Difference between revisions of "Team:GO Paris-Saclay"

(Undo revision 57588 by Briand (talk))
Line 1: Line 1:
 
 
<html>
 
<html>
 
 
   <meta charset="utf-8">
 
   <meta charset="utf-8">
  
Line 13: Line 11:
 
<app-root></app-root>
 
<app-root></app-root>
 
</div>
 
</div>
 +
 
<link rel="stylesheet" href="data:text/css;base64,QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwIWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOjAgMH0ubWF0LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCwubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUtc3RpY2t5LFttYXQtZm9vdGVyLXJvd10sW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sbWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvd3tiYWNrZ3JvdW5kOmluaGVyaXR9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6IzY3M2FiNztjYXJldC1jb2xvcjojNjIwMDNjfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmZkNzQwfS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMWM0ZTl9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTU3Zn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiM2NzNhYjc7c3Ryb2tlOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmZDc0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA5LDE5NiwyMzMsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOSwxOTYsMjMzLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpLC13ZWJraXQtdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMCk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIsLmNkay1vdmVybGF5LWNvbnRhaW5lcntwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXI6ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5le3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6LjZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI4OCl9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kO2FuaW1hdGlvbi1uYW1lOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjJweCAwIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudH0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6Izk2MWU2NH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmNmU0MH0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZhZmFmYX0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6Izk2MWU2NH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiM2MjAwM2N9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZmY2ZTQwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzYyMDAzYztwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNik7dHJhbnNmb3JtOnNjYWxlKC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXstd2Via2l0LXRyYW5zZm9ybTpub25lO3RyYW5zZm9ybTpub25lfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDo4cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xMXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCwubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOjAgMH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMTIpfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMSl9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjEpfS5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRde2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtZmFiLm1hdC13YXJuLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0ubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjIpfS5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmFmYWZhIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjI2KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtvcGFjaXR5Oi40O2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfW1hdC1mb290ZXItcm93LG1hdC1oZWFkZXItcm93LG1hdC1yb3csdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxsLHRoLm1hdC1oZWFkZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jYWxlbmRhci1hcnJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCksLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC40KX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojNjIwMDNjfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZGlhbG9nLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZXJyb3J7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC40MikgMCxyZ2JhKDAsMCwwLC40MikgMzMlLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtib3R0b206MS4zNDM3NWVtO2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQsLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmY2ZTQwfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDowIDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb246bm90KFtjb2xvcl0pLC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMGIzYzV9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlMGJjZDF9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmNjYmN9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6Izk2MWU2NH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmZjZlNDB9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtc2VsZWN0LWNvbnRlbnQsLm1hdC1zZWxlY3QtcGFuZWwtZG9uZS1hbmltYXRpbmd7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC41KX0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEyKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Om5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZjU3MjJ9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC41KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSw4NywzNCwuMTIpfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0uY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KC4wMDAxZGVnLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tbm90LXRvdWNoZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCk7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA0LDE4OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyNCwxODgsMjA5LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7YmFja2dyb3VuZDojMzIzMjMyO2NvbG9yOiNmZmZ9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOiM5NjFlNjR9I0hRX3BhZ2UgaDJ7YmFja2dyb3VuZC1jb2xvcjojN2EyNjU5O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1zaXplOjEwMCUgYXV0b30jSFFfcGFnZSAjdG9jdGl0bGUgaDJ7YmFja2dyb3VuZC1jb2xvcjp1bnNldDtjb2xvcjp1bnNldDtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfS5heGlzLS14IC5kb21haW4sLmF4aXMtLXkgLmRvbWFpbntkaXNwbGF5Om5vbmV9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtmbGV4LWJhc2lzOjB9QGZvbnQtZmFjZXtmb250LWZhbWlseTpSb2JvdG87Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3QpO3NyYzpsb2NhbCgiUm9ib3RvIiksbG9jYWwoIlJvYm90by1SZWd1bGFyIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjYvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCJlbWJlZGRlZC1vcGVudHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzBiL1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLndvZmYpIGZvcm1hdCgid29mZiIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnR0ZikgZm9ybWF0KCJ0cnVldHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnN2ZyNSb2JvdG8pIGZvcm1hdCgic3ZnIil9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNYXRlcmlhbEljb25zLVJlZ3VsYXI7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81MS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjgvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzEvMWUvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzMvM2YvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuc3ZnI01hdGVyaWFsSWNvbnMtUmVndWxhcikgZm9ybWF0KCJzdmciKX0ubWF0ZXJpYWwtaWNvbnN7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbDtkaXJlY3Rpb246bHRyOy1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOidsaWdhJzstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9aDEsaDIsaDMsaDQsaDUsaDZ7Ym9yZGVyLWJvdHRvbTowfQovKiMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuY3NzLm1hcCov">
 
<link rel="stylesheet" href="data:text/css;base64,QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwIWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOjAgMH0ubWF0LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCwubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUtc3RpY2t5LFttYXQtZm9vdGVyLXJvd10sW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sbWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvd3tiYWNrZ3JvdW5kOmluaGVyaXR9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6IzY3M2FiNztjYXJldC1jb2xvcjojNjIwMDNjfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmZkNzQwfS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMWM0ZTl9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTU3Zn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiM2NzNhYjc7c3Ryb2tlOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmZDc0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA5LDE5NiwyMzMsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOSwxOTYsMjMzLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpLC13ZWJraXQtdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMCk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIsLmNkay1vdmVybGF5LWNvbnRhaW5lcntwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXI6ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5le3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6LjZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI4OCl9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kO2FuaW1hdGlvbi1uYW1lOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjJweCAwIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudH0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6Izk2MWU2NH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmNmU0MH0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZhZmFmYX0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6Izk2MWU2NH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiM2MjAwM2N9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZmY2ZTQwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzYyMDAzYztwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNik7dHJhbnNmb3JtOnNjYWxlKC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXstd2Via2l0LXRyYW5zZm9ybTpub25lO3RyYW5zZm9ybTpub25lfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDo4cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xMXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCwubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOjAgMH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMTIpfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMSl9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjEpfS5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRde2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtZmFiLm1hdC13YXJuLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0ubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjIpfS5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmFmYWZhIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjI2KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtvcGFjaXR5Oi40O2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfW1hdC1mb290ZXItcm93LG1hdC1oZWFkZXItcm93LG1hdC1yb3csdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxsLHRoLm1hdC1oZWFkZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jYWxlbmRhci1hcnJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCksLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC40KX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojNjIwMDNjfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZGlhbG9nLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZXJyb3J7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC40MikgMCxyZ2JhKDAsMCwwLC40MikgMzMlLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtib3R0b206MS4zNDM3NWVtO2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQsLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmY2ZTQwfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDowIDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb246bm90KFtjb2xvcl0pLC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMGIzYzV9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlMGJjZDF9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmNjYmN9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6Izk2MWU2NH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmZjZlNDB9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtc2VsZWN0LWNvbnRlbnQsLm1hdC1zZWxlY3QtcGFuZWwtZG9uZS1hbmltYXRpbmd7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC41KX0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEyKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Om5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZjU3MjJ9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC41KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSw4NywzNCwuMTIpfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0uY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KC4wMDAxZGVnLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tbm90LXRvdWNoZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCk7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA0LDE4OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyNCwxODgsMjA5LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7YmFja2dyb3VuZDojMzIzMjMyO2NvbG9yOiNmZmZ9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOiM5NjFlNjR9I0hRX3BhZ2UgaDJ7YmFja2dyb3VuZC1jb2xvcjojN2EyNjU5O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1zaXplOjEwMCUgYXV0b30jSFFfcGFnZSAjdG9jdGl0bGUgaDJ7YmFja2dyb3VuZC1jb2xvcjp1bnNldDtjb2xvcjp1bnNldDtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfS5heGlzLS14IC5kb21haW4sLmF4aXMtLXkgLmRvbWFpbntkaXNwbGF5Om5vbmV9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtmbGV4LWJhc2lzOjB9QGZvbnQtZmFjZXtmb250LWZhbWlseTpSb2JvdG87Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3QpO3NyYzpsb2NhbCgiUm9ib3RvIiksbG9jYWwoIlJvYm90by1SZWd1bGFyIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjYvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCJlbWJlZGRlZC1vcGVudHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzBiL1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLndvZmYpIGZvcm1hdCgid29mZiIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnR0ZikgZm9ybWF0KCJ0cnVldHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnN2ZyNSb2JvdG8pIGZvcm1hdCgic3ZnIil9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNYXRlcmlhbEljb25zLVJlZ3VsYXI7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81MS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjgvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzEvMWUvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzMvM2YvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuc3ZnI01hdGVyaWFsSWNvbnMtUmVndWxhcikgZm9ybWF0KCJzdmciKX0ubWF0ZXJpYWwtaWNvbnN7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbDtkaXJlY3Rpb246bHRyOy1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOidsaWdhJzstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9aDEsaDIsaDMsaDQsaDUsaDZ7Ym9yZGVyLWJvdHRvbTowfQovKiMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuY3NzLm1hcCov">
  
<script>var base64script = atob("IWZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUuZG9jdW1lbnQscj1lLk9iamVjdCxvPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxsLGE9L15bQS1aXStbYS16XS8saT1mdW5jdGlvbihlLHQpeyh0PXQudG9Mb3dlckNhc2UoKSlpbiB1fHwodVtlXT0odVtlXXx8W10pLmNvbmNhdCh0KSx1W3RdPXVbdC50b1VwcGVyQ2FzZSgpXT1lKX0sdT0oci5jcmVhdGV8fHIpKG51bGwpLGM9e307Zm9yKG4gaW4gZSlmb3IobCBpbiBlW25dKWZvcih1W2xdPW89ZVtuXVtsXSx0PTA7dDxvLmxlbmd0aDt0KyspdVtvW3RdLnRvTG93ZXJDYXNlKCldPXVbb1t0XS50b1VwcGVyQ2FzZSgpXT1sO3JldHVybiBjLmdldD1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/dVtlXXx8KGEudGVzdChlKT9bXToiIik6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IodCBpbiB1KWUudGVzdCh0KSYmbi5wdXNoKHQpO3JldHVybiBufShlKX0sYy5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYS50ZXN0KGUpP2koZSx0KTppKHQsZSksY30sY30oe2NvbGxlY3Rpb25zOntIVE1MQWxsQ29sbGVjdGlvbjpbImFsbCJdLEhUTUxDb2xsZWN0aW9uOlsiZm9ybXMiXSxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjpbImVsZW1lbnRzIl0sSFRNTE9wdGlvbnNDb2xsZWN0aW9uOlsib3B0aW9ucyJdfSxlbGVtZW50czp7RWxlbWVudDpbImVsZW1lbnQiXSxIVE1MQW5jaG9yRWxlbWVudDpbImEiXSxIVE1MQXBwbGV0RWxlbWVudDpbImFwcGxldCJdLEhUTUxBcmVhRWxlbWVudDpbImFyZWEiXSxIVE1MQXR0YWNobWVudEVsZW1lbnQ6WyJhdHRhY2htZW50Il0sSFRNTEF1ZGlvRWxlbWVudDpbImF1ZGlvIl0sSFRNTEJSRWxlbWVudDpbImJyIl0sSFRNTEJhc2VFbGVtZW50OlsiYmFzZSJdLEhUTUxCb2R5RWxlbWVudDpbImJvZHkiXSxIVE1MQnV0dG9uRWxlbWVudDpbImJ1dHRvbiJdLEhUTUxDYW52YXNFbGVtZW50OlsiY2FudmFzIl0sSFRNTENvbnRlbnRFbGVtZW50OlsiY29udGVudCJdLEhUTUxETGlzdEVsZW1lbnQ6WyJkbCJdLEhUTUxEYXRhRWxlbWVudDpbImRhdGEiXSxIVE1MRGF0YUxpc3RFbGVtZW50OlsiZGF0YWxpc3QiXSxIVE1MRGV0YWlsc0VsZW1lbnQ6WyJkZXRhaWxzIl0sSFRNTERpYWxvZ0VsZW1lbnQ6WyJkaWFsb2ciXSxIVE1MRGlyZWN0b3J5RWxlbWVudDpbImRpciJdLEhUTUxEaXZFbGVtZW50OlsiZGl2Il0sSFRNTERvY3VtZW50OlsiZG9jdW1lbnQiXSxIVE1MRWxlbWVudDpbImVsZW1lbnQiLCJhYmJyIiwiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImIiLCJiZGkiLCJiZG8iLCJjaXRlIiwiY29kZSIsImNvbW1hbmQiLCJkZCIsImRmbiIsImR0IiwiZW0iLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiaGVhZGVyIiwiaSIsImtiZCIsIm1hcmsiLCJuYXYiLCJub3NjcmlwdCIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic21hbGwiLCJzdHJvbmciLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidSIsInZhciIsIndiciJdLEhUTUxFbWJlZEVsZW1lbnQ6WyJlbWJlZCJdLEhUTUxGaWVsZFNldEVsZW1lbnQ6WyJmaWVsZHNldCJdLEhUTUxGb250RWxlbWVudDpbImZvbnQiXSxIVE1MRm9ybUVsZW1lbnQ6WyJmb3JtIl0sSFRNTEZyYW1lRWxlbWVudDpbImZyYW1lIl0sSFRNTEZyYW1lU2V0RWxlbWVudDpbImZyYW1lc2V0Il0sSFRNTEhSRWxlbWVudDpbImhyIl0sSFRNTEhlYWRFbGVtZW50OlsiaGVhZCJdLEhUTUxIZWFkaW5nRWxlbWVudDpbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLEhUTUxIdG1sRWxlbWVudDpbImh0bWwiXSxIVE1MSUZyYW1lRWxlbWVudDpbImlmcmFtZSJdLEhUTUxJbWFnZUVsZW1lbnQ6WyJpbWciXSxIVE1MSW5wdXRFbGVtZW50OlsiaW5wdXQiXSxIVE1MS2V5Z2VuRWxlbWVudDpbImtleWdlbiJdLEhUTUxMSUVsZW1lbnQ6WyJsaSJdLEhUTUxMYWJlbEVsZW1lbnQ6WyJsYWJlbCJdLEhUTUxMZWdlbmRFbGVtZW50OlsibGVnZW5kIl0sSFRNTExpbmtFbGVtZW50OlsibGluayJdLEhUTUxNYXBFbGVtZW50OlsibWFwIl0sSFRNTE1hcnF1ZWVFbGVtZW50OlsibWFycXVlZSJdLEhUTUxNZWRpYUVsZW1lbnQ6WyJtZWRpYSJdLEhUTUxNZW51RWxlbWVudDpbIm1lbnUiXSxIVE1MTWVudUl0ZW1FbGVtZW50OlsibWVudWl0ZW0iXSxIVE1MTWV0YUVsZW1lbnQ6WyJtZXRhIl0sSFRNTE1ldGVyRWxlbWVudDpbIm1ldGVyIl0sSFRNTE1vZEVsZW1lbnQ6WyJkZWwiLCJpbnMiXSxIVE1MT0xpc3RFbGVtZW50Olsib2wiXSxIVE1MT2JqZWN0RWxlbWVudDpbIm9iamVjdCJdLEhUTUxPcHRHcm91cEVsZW1lbnQ6WyJvcHRncm91cCJdLEhUTUxPcHRpb25FbGVtZW50Olsib3B0aW9uIl0sSFRNTE91dHB1dEVsZW1lbnQ6WyJvdXRwdXQiXSxIVE1MUGFyYWdyYXBoRWxlbWVudDpbInAiXSxIVE1MUGFyYW1FbGVtZW50OlsicGFyYW0iXSxIVE1MUGljdHVyZUVsZW1lbnQ6WyJwaWN0dXJlIl0sSFRNTFByZUVsZW1lbnQ6WyJwcmUiXSxIVE1MUHJvZ3Jlc3NFbGVtZW50OlsicHJvZ3Jlc3MiXSxIVE1MUXVvdGVFbGVtZW50OlsiYmxvY2txdW90ZSIsInEiLCJxdW90ZSJdLEhUTUxTY3JpcHRFbGVtZW50Olsic2NyaXB0Il0sSFRNTFNlbGVjdEVsZW1lbnQ6WyJzZWxlY3QiXSxIVE1MU2hhZG93RWxlbWVudDpbInNoYWRvdyJdLEhUTUxTbG90RWxlbWVudDpbInNsb3QiXSxIVE1MU291cmNlRWxlbWVudDpbInNvdXJjZSJdLEhUTUxTcGFuRWxlbWVudDpbInNwYW4iXSxIVE1MU3R5bGVFbGVtZW50Olsic3R5bGUiXSxIVE1MVGFibGVDYXB0aW9uRWxlbWVudDpbImNhcHRpb24iXSxIVE1MVGFibGVDZWxsRWxlbWVudDpbInRkIiwidGgiXSxIVE1MVGFibGVDb2xFbGVtZW50OlsiY29sIiwiY29sZ3JvdXAiXSxIVE1MVGFibGVFbGVtZW50OlsidGFibGUiXSxIVE1MVGFibGVSb3dFbGVtZW50OlsidHIiXSxIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpbInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCJdLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6WyJ0ZW1wbGF0ZSJdLEhUTUxUZXh0QXJlYUVsZW1lbnQ6WyJ0ZXh0YXJlYSJdLEhUTUxUaW1lRWxlbWVudDpbInRpbWUiXSxIVE1MVGl0bGVFbGVtZW50OlsidGl0bGUiXSxIVE1MVHJhY2tFbGVtZW50OlsidHJhY2siXSxIVE1MVUxpc3RFbGVtZW50OlsidWwiXSxIVE1MVW5rbm93bkVsZW1lbnQ6WyJ1bmtub3duIiwidmhncm91cHYiLCJ2a2V5Z2VuIl0sSFRNTFZpZGVvRWxlbWVudDpbInZpZGVvIl19LG5vZGVzOntBdHRyOlsibm9kZSJdLEF1ZGlvOlsiYXVkaW8iXSxDREFUQVNlY3Rpb246WyJub2RlIl0sQ2hhcmFjdGVyRGF0YTpbIm5vZGUiXSxDb21tZW50OlsiI2NvbW1lbnQiXSxEb2N1bWVudDpbIiNkb2N1bWVudCJdLERvY3VtZW50RnJhZ21lbnQ6WyIjZG9jdW1lbnQtZnJhZ21lbnQiXSxEb2N1bWVudFR5cGU6WyJub2RlIl0sSFRNTERvY3VtZW50OlsiI2RvY3VtZW50Il0sSW1hZ2U6WyJpbWciXSxPcHRpb246WyJvcHRpb24iXSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246WyJub2RlIl0sU2hhZG93Um9vdDpbIiNzaGFkb3ctcm9vdCJdLFRleHQ6WyIjdGV4dCJdLFhNTERvY3VtZW50OlsieG1sIl19fSk7Im9iamVjdCIhPXR5cGVvZiB0JiYodD17dHlwZTp0fHwiYXV0byJ9KTt2YXIgbCxhLGksdSxjLHMsbSxmLHAsZD0icmVnaXN0ZXJFbGVtZW50IixoPSJfXyIrZCsoMWU1KmUuTWF0aC5yYW5kb20oKT4+MCksVD0iYWRkRXZlbnRMaXN0ZW5lciIsTD0iYXR0YWNoZWQiLE09IkNhbGxiYWNrIixFPSJkZXRhY2hlZCIsdj0iZXh0ZW5kcyIsSD0iYXR0cmlidXRlQ2hhbmdlZCIrTSxnPUwrTSxiPSJjb25uZWN0ZWQiK00seT0iZGlzY29ubmVjdGVkIitNLEM9ImNyZWF0ZWQiK00sdz1FK00sQT0iQURESVRJT04iLE89IlJFTU9WQUwiLE49IkRPTUF0dHJNb2RpZmllZCIsRD0iRE9NQ29udGVudExvYWRlZCIsST0iRE9NU3VidHJlZU1vZGlmaWVkIixGPSI8IixTPSI9IixWPS9eW0EtWl1bQS1aMC05XSooPzotW0EtWjAtOV0rKSskLyxQPVsiQU5OT1RBVElPTi1YTUwiLCJDT0xPUi1QUk9GSUxFIiwiRk9OVC1GQUNFIiwiRk9OVC1GQUNFLVNSQyIsIkZPTlQtRkFDRS1VUkkiLCJGT05ULUZBQ0UtRk9STUFUIiwiRk9OVC1GQUNFLU5BTUUiLCJNSVNTSU5HLUdMWVBIIl0sUj1bXSxVPVtdLGs9IiIsXz1uLmRvY3VtZW50RWxlbWVudCxxPVIuaW5kZXhPZnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMubGVuZ3RoO3QtLSYmdGhpc1t0XSE9PWU7KTtyZXR1cm4gdH0seD1yLnByb3RvdHlwZSxCPXguaGFzT3duUHJvcGVydHksWj14LmlzUHJvdG90eXBlT2Ysaj1yLmRlZmluZVByb3BlcnR5LEc9W10sej1yLmdldE93blByb3BlcnR5RGVzY3JpcHRvcixLPXIuZ2V0T3duUHJvcGVydHlOYW1lcyxYPXIuZ2V0UHJvdG90eXBlT2YsJD1yLnNldFByb3RvdHlwZU9mLFE9ISFyLl9fcHJvdG9fXyxXPSJfX2RyZUNFdjEiLFk9ZS5jdXN0b21FbGVtZW50cyxKPSEvXmZvcmNlLy50ZXN0KHQudHlwZSkmJiEhKFkmJlkuZGVmaW5lJiZZLmdldCYmWS53aGVuRGVmaW5lZCksZWU9ci5jcmVhdGV8fHIsdGU9ZS5NYXB8fGZ1bmN0aW9uKCl7dmFyIGUsdD1bXSxuPVtdO3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG5bcS5jYWxsKHQsZSldfSxzZXQ6ZnVuY3Rpb24ocixvKXsoZT1xLmNhbGwodCxyKSk8MD9uW3QucHVzaChyKS0xXT1vOm5bZV09b319fSxuZT1lLlByb21pc2V8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ITEscj17Y2F0Y2g6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhlbjpmdW5jdGlvbihlKXtyZXR1cm4gdC5wdXNoKGUpLG4mJnNldFRpbWVvdXQobywxKSxyfX07ZnVuY3Rpb24gbyhlKXtmb3Iobj0hMDt0Lmxlbmd0aDspdC5zaGlmdCgpKGUpfXJldHVybiBlKG8pLHJ9LHJlPSExLG9lPWVlKG51bGwpLGxlPWVlKG51bGwpLGFlPW5ldyB0ZSxpZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpfSx1ZT1yLmNyZWF0ZXx8ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdD8oZS5wcm90b3R5cGU9dCxuZXcgZSk6dGhpc30sY2U9JHx8KFE/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfTpLJiZ6P2Z1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgbixyPUsodCksbz0wLGw9ci5sZW5ndGg7bzxsO28rKylCLmNhbGwoZSxuPXJbb10pfHxqKGUsbix6KHQsbikpfXJldHVybiBmdW5jdGlvbih0LG4pe2Rve2UodCxuKX13aGlsZSgobj1YKG4pKSYmIVouY2FsbChuLHQpKTtyZXR1cm4gdH19KCk6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9KSxzZT1lLk11dGF0aW9uT2JzZXJ2ZXJ8fGUuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixtZT0oZS5IVE1MRWxlbWVudHx8ZS5FbGVtZW50fHxlLk5vZGUpLnByb3RvdHlwZSxmZT0hWi5jYWxsKG1lLF8pLHBlPWZlP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLnZhbHVlLGV9OmosZGU9ZmU/ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfTpmdW5jdGlvbihlKXtyZXR1cm4gWi5jYWxsKG1lLGUpfSxoZT1mZSYmW10sVGU9bWUuYXR0YWNoU2hhZG93LExlPW1lLmNsb25lTm9kZSxNZT1tZS5kaXNwYXRjaEV2ZW50LEVlPW1lLmdldEF0dHJpYnV0ZSx2ZT1tZS5oYXNBdHRyaWJ1dGUsSGU9bWUucmVtb3ZlQXR0cmlidXRlLGdlPW1lLnNldEF0dHJpYnV0ZSxiZT1uLmNyZWF0ZUVsZW1lbnQseWU9YmUsQ2U9c2UmJnthdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITAsYXR0cmlidXRlT2xkVmFsdWU6ITB9LHdlPXNlfHxmdW5jdGlvbihlKXtJZT0hMSxfLnJlbW92ZUV2ZW50TGlzdGVuZXIoTix3ZSl9LEFlPTAsT2U9ZCBpbiBuJiYhL15mb3JjZS1hbGwvLnRlc3QodC50eXBlKSxOZT0hMCxEZT0hMSxJZT0hMCxGZT0hMCxTZT0hMDtmdW5jdGlvbiBWZSgpe3ZhciBlPWwuc3BsaWNlKDAsbC5sZW5ndGgpO2ZvcihBZT0wO2UubGVuZ3RoOyllLnNoaWZ0KCkuY2FsbChudWxsLGUuc2hpZnQoKSl9ZnVuY3Rpb24gUGUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspR2UoZVtuXSx0KX1mdW5jdGlvbiBSZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZGUodCkmJihHZSh0LGUpLGsubGVuZ3RoJiZQZSh0LnF1ZXJ5U2VsZWN0b3JBbGwoayksZSkpfX1mdW5jdGlvbiBVZShlKXt2YXIgdD1FZS5jYWxsKGUsImlzIiksbj1lLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkscj1xLmNhbGwoUix0P1MrdC50b1VwcGVyQ2FzZSgpOkYrbik7cmV0dXJuIHQmJi0xPHImJiFrZShuLHQpPy0xOnJ9ZnVuY3Rpb24ga2UoZSx0KXtyZXR1cm4tMTxrLmluZGV4T2YoZSsnW2lzPSInK3QrJyJdJyl9ZnVuY3Rpb24gX2UoZSl7dmFyIHQ9ZS5jdXJyZW50VGFyZ2V0LG49ZS5hdHRyQ2hhbmdlLHI9ZS5hdHRyTmFtZSxvPWUudGFyZ2V0LGw9ZVtBXXx8MixhPWVbT118fDM7IVNlfHxvJiZvIT09dHx8IXRbSF18fCJzdHlsZSI9PT1yfHxlLnByZXZWYWx1ZT09PWUubmV3VmFsdWUmJigiIiE9PWUubmV3VmFsdWV8fG4hPT1sJiZuIT09YSl8fHRbSF0ocixuPT09bD9udWxsOmUucHJldlZhbHVlLG49PT1hP251bGw6ZS5uZXdWYWx1ZSl9ZnVuY3Rpb24gcWUoZSl7dmFyIHQ9UmUoZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2wucHVzaCh0LGUudGFyZ2V0KSxBZSYmY2xlYXJUaW1lb3V0KEFlKSxBZT1zZXRUaW1lb3V0KFZlLDEpfX1mdW5jdGlvbiB4ZShlKXtGZSYmKEZlPSExLGUuY3VycmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKEQseGUpKSxrLmxlbmd0aCYmUGUoKGUudGFyZ2V0fHxuKS5xdWVyeVNlbGVjdG9yQWxsKGspLGUuZGV0YWlsPT09RT9FOkwpLGZlJiZmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTAsbj1oZS5sZW5ndGg7dDxuO3QrKylfLmNvbnRhaW5zKGU9aGVbdF0pfHwobi0tLGhlLnNwbGljZSh0LS0sMSksR2UoZSxFKSl9KCl9ZnVuY3Rpb24gQmUoZSx0KXtnZS5jYWxsKHRoaXMsZSx0KSxhLmNhbGwodGhpcyx7dGFyZ2V0OnRoaXN9KX1mdW5jdGlvbiBaZShlLHQpe2NlKGUsdCksYz9jLm9ic2VydmUoZSxDZSk6KEllJiYoZS5zZXRBdHRyaWJ1dGU9QmUsZVtoXT11KGUpLGVbVF0oSSxhKSksZVtUXShOLF9lKSksZVtDXSYmU2UmJihlLmNyZWF0ZWQ9ITAsZVtDXSgpLGUuY3JlYXRlZD0hMSl9ZnVuY3Rpb24gamUoZSl7dGhyb3cgbmV3IEVycm9yKCJBICIrZSsiIHR5cGUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIil9ZnVuY3Rpb24gR2UoZSx0KXt2YXIgbixyLG89VWUoZSk7LTE8byYmKG0oZSxVW29dKSxvPTAsdCE9PUx8fGVbTF0/dCE9PUV8fGVbRV18fChlW0xdPSExLGVbRV09ITAscj0iZGlzY29ubmVjdGVkIixvPTEpOihlW0VdPSExLGVbTF09ITAscj0iY29ubmVjdGVkIixvPTEsZmUmJnEuY2FsbChoZSxlKTwwJiZoZS5wdXNoKGUpKSxvJiYobj1lW3QrTV18fGVbcitNXSkmJm4uY2FsbChlKSl9ZnVuY3Rpb24gemUoKXt9ZnVuY3Rpb24gS2UoZSx0LHIpe3ZhciBvPXImJnJbdl18fCIiLGw9dC5wcm90b3R5cGUsYT11ZShsKSxpPXQub2JzZXJ2ZWRBdHRyaWJ1dGVzfHxHLHU9e3Byb3RvdHlwZTphfTtwZShhLEMse3ZhbHVlOmZ1bmN0aW9uKCl7aWYocmUpcmU9ITE7ZWxzZSBpZighdGhpc1tXXSl7dGhpc1tXXT0hMCxuZXcgdCh0aGlzKSxsW0NdJiZsW0NdLmNhbGwodGhpcyk7dmFyIGU9b2VbYWUuZ2V0KHQpXTsoIUp8fGUuY3JlYXRlLmxlbmd0aD4xKSYmUWUodGhpcyl9fX0pLHBlKGEsSCx7dmFsdWU6ZnVuY3Rpb24oZSl7LTE8cS5jYWxsKGksZSkmJmxbSF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLGxbYl0mJnBlKGEsZyx7dmFsdWU6bFtiXX0pLGxbeV0mJnBlKGEsdyx7dmFsdWU6bFt5XX0pLG8mJih1W3ZdPW8pLGU9ZS50b1VwcGVyQ2FzZSgpLG9lW2VdPXtjb25zdHJ1Y3Rvcjp0LGNyZWF0ZTpvP1tvLGllKGUpXTpbZV19LGFlLnNldCh0LGUpLG5bZF0oZS50b0xvd2VyQ2FzZSgpLHUpLFdlKGUpLGxlW2VdLnIoKX1mdW5jdGlvbiBYZShlKXt2YXIgdD1vZVtlLnRvVXBwZXJDYXNlKCldO3JldHVybiB0JiZ0LmNvbnN0cnVjdG9yfWZ1bmN0aW9uICRlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lOmUmJmUuaXN8fCIifWZ1bmN0aW9uIFFlKGUpe2Zvcih2YXIgdCxuPWVbSF0scj1uP2UuYXR0cmlidXRlczpHLG89ci5sZW5ndGg7by0tOyluLmNhbGwoZSwodD1yW29dKS5uYW1lfHx0Lm5vZGVOYW1lLG51bGwsdC52YWx1ZXx8dC5ub2RlVmFsdWUpfWZ1bmN0aW9uIFdlKGUpe3JldHVybihlPWUudG9VcHBlckNhc2UoKSlpbiBsZXx8KGxlW2VdPXt9LGxlW2VdLnA9bmV3IG5lKGZ1bmN0aW9uKHQpe2xlW2VdLnI9dH0pKSxsZVtlXS5wfWZ1bmN0aW9uIFllKCl7WSYmZGVsZXRlIGUuY3VzdG9tRWxlbWVudHMsaihlLCJjdXN0b21FbGVtZW50cyIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpuZXcgemV9KSxqKGUsIkN1c3RvbUVsZW1lbnRSZWdpc3RyeSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp6ZX0pO2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgcj1lW3RdO2lmKHIpe2VbdF09ZnVuY3Rpb24oZSl7dmFyIHQsbztyZXR1cm4gZXx8KGU9dGhpcyksZVtXXXx8KHJlPSEwLHQ9b2VbYWUuZ2V0KGUuY29uc3RydWN0b3IpXSwoZT0obz1KJiYxPT09dC5jcmVhdGUubGVuZ3RoKT9SZWZsZWN0LmNvbnN0cnVjdChyLEcsdC5jb25zdHJ1Y3Rvcik6bi5jcmVhdGVFbGVtZW50LmFwcGx5KG4sdC5jcmVhdGUpKVtXXT0hMCxyZT0hMSxvfHxRZShlKSksZX0sZVt0XS5wcm90b3R5cGU9ci5wcm90b3R5cGU7dHJ5e3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWVbdF19Y2F0Y2gobil7aihyLFcse3ZhbHVlOmVbdF19KX19fSxyPW8uZ2V0KC9eSFRNTFtBLVpdKlthLXpdLyksbD1yLmxlbmd0aDtsLS07dChyW2xdKSk7bi5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49JGUodCk7cmV0dXJuIG4/eWUuY2FsbCh0aGlzLGUsaWUobikpOnllLmNhbGwodGhpcyxlKX0sT2V8fChEZT0hMCxuW2RdKCIiKSl9aWYoc2UmJigocD1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9IjxkaXY+PGRpdj48L2Rpdj48L2Rpdj4iLG5ldyBzZShmdW5jdGlvbihlLHQpe2lmKGVbMF0mJiJjaGlsZExpc3QiPT1lWzBdLnR5cGUmJiFlWzBdLnJlbW92ZWROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIG49KHA9eihtZSwiaW5uZXJIVE1MIikpJiZwLnNldDtuJiZqKG1lLCJpbm5lckhUTUwiLHtzZXQ6ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLmxhc3RDaGlsZDspdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmxhc3RDaGlsZCk7bi5jYWxsKHRoaXMsZSl9fSl9dC5kaXNjb25uZWN0KCkscD1udWxsfSkub2JzZXJ2ZShwLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHAuaW5uZXJIVE1MPSIiKSxPZXx8KCR8fFE/KG09ZnVuY3Rpb24oZSx0KXtaLmNhbGwodCxlKXx8WmUoZSx0KX0sZj1aZSk6Zj1tPWZ1bmN0aW9uKGUsdCl7ZVtoXXx8KGVbaF09cighMCksWmUoZSx0KSl9LGZlPyhJZT0hMSxmdW5jdGlvbigpe3ZhciBlPXoobWUsVCksdD1lLnZhbHVlLG49ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEN1c3RvbUV2ZW50KE4se2J1YmJsZXM6ITB9KTt0LmF0dHJOYW1lPWUsdC5wcmV2VmFsdWU9RWUuY2FsbCh0aGlzLGUpLHQubmV3VmFsdWU9bnVsbCx0W09dPXQuYXR0ckNoYW5nZT0yLEhlLmNhbGwodGhpcyxlKSxNZS5jYWxsKHRoaXMsdCl9LHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj12ZS5jYWxsKHRoaXMsZSkscj1uJiZFZS5jYWxsKHRoaXMsZSksbz1uZXcgQ3VzdG9tRXZlbnQoTix7YnViYmxlczohMH0pO2dlLmNhbGwodGhpcyxlLHQpLG8uYXR0ck5hbWU9ZSxvLnByZXZWYWx1ZT1uP3I6bnVsbCxvLm5ld1ZhbHVlPXQsbj9vLk1PRElGSUNBVElPTj1vLmF0dHJDaGFuZ2U9MTpvW0FdPW8uYXR0ckNoYW5nZT0wLE1lLmNhbGwodGhpcyxvKX0sbz1mdW5jdGlvbihlKXt2YXIgdCxuPWUuY3VycmVudFRhcmdldCxyPW5baF0sbz1lLnByb3BlcnR5TmFtZTtyLmhhc093blByb3BlcnR5KG8pJiYocj1yW29dLCh0PW5ldyBDdXN0b21FdmVudChOLHtidWJibGVzOiEwfSkpLmF0dHJOYW1lPXIubmFtZSx0LnByZXZWYWx1ZT1yLnZhbHVlfHxudWxsLHQubmV3VmFsdWU9ci52YWx1ZT1uW29dfHxudWxsLG51bGw9PXQucHJldlZhbHVlP3RbQV09dC5hdHRyQ2hhbmdlPTA6dC5NT0RJRklDQVRJT049dC5hdHRyQ2hhbmdlPTEsTWUuY2FsbChuLHQpKX07ZS52YWx1ZT1mdW5jdGlvbihlLGwsYSl7ZT09PU4mJnRoaXNbSF0mJnRoaXMuc2V0QXR0cmlidXRlIT09ciYmKHRoaXNbaF09e2NsYXNzTmFtZTp7bmFtZToiY2xhc3MiLHZhbHVlOnRoaXMuY2xhc3NOYW1lfX0sdGhpcy5zZXRBdHRyaWJ1dGU9cix0aGlzLnJlbW92ZUF0dHJpYnV0ZT1uLHQuY2FsbCh0aGlzLCJwcm9wZXJ0eWNoYW5nZSIsbykpLHQuY2FsbCh0aGlzLGUsbCxhKX0saihtZSxULGUpfSgpKTpzZXx8KF9bVF0oTix3ZSksXy5zZXRBdHRyaWJ1dGUoaCwxKSxfLnJlbW92ZUF0dHJpYnV0ZShoKSxJZSYmKGE9ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKHRoaXM9PT1lLnRhcmdldCl7Zm9yKHIgaW4gdD10aGlzW2hdLHRoaXNbaF09bj11KHRoaXMpLG4pe2lmKCEociBpbiB0KSlyZXR1cm4gaSgwLHRoaXMscix0W3JdLG5bcl0sQSk7aWYobltyXSE9PXRbcl0pcmV0dXJuIGkoMSx0aGlzLHIsdFtyXSxuW3JdLCJNT0RJRklDQVRJT04iKX1mb3IociBpbiB0KWlmKCEociBpbiBuKSlyZXR1cm4gaSgyLHRoaXMscix0W3JdLG5bcl0sTyl9fSxpPWZ1bmN0aW9uKGUsdCxuLHIsbyxsKXt2YXIgYT17YXR0ckNoYW5nZTplLGN1cnJlbnRUYXJnZXQ6dCxhdHRyTmFtZTpuLHByZXZWYWx1ZTpyLG5ld1ZhbHVlOm99O2FbbF09ZSxfZShhKX0sdT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyPXt9LG89ZS5hdHRyaWJ1dGVzLGw9MCxhPW8ubGVuZ3RoO2w8YTtsKyspInNldEF0dHJpYnV0ZSIhPT0obj0odD1vW2xdKS5uYW1lKSYmKHJbbl09dC52YWx1ZSk7cmV0dXJuIHJ9KSksbltkXT1mdW5jdGlvbihlLHQpe2lmKHI9ZS50b1VwcGVyQ2FzZSgpLE5lJiYoTmU9ITEsc2U/KGM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7dChlW24rK10pKTt9cmV0dXJuIG5ldyBzZShmdW5jdGlvbihyKXtmb3IodmFyIG8sbCxhLGk9MCx1PXIubGVuZ3RoO2k8dTtpKyspImNoaWxkTGlzdCI9PT0obz1yW2ldKS50eXBlPyhuKG8uYWRkZWROb2RlcyxlKSxuKG8ucmVtb3ZlZE5vZGVzLHQpKToobD1vLnRhcmdldCxTZSYmbFtIXSYmInN0eWxlIiE9PW8uYXR0cmlidXRlTmFtZSYmKGE9RWUuY2FsbChsLG8uYXR0cmlidXRlTmFtZSkpIT09by5vbGRWYWx1ZSYmbFtIXShvLmF0dHJpYnV0ZU5hbWUsby5vbGRWYWx1ZSxhKSl9KX0oUmUoTCksUmUoRSkpLChzPWZ1bmN0aW9uKGUpe3JldHVybiBjLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlfSkobiksVGUmJihtZS5hdHRhY2hTaGFkb3c9ZnVuY3Rpb24oKXtyZXR1cm4gcyhUZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpOihsPVtdLG5bVF0oIkRPTU5vZGVJbnNlcnRlZCIscWUoTCkpLG5bVF0oIkRPTU5vZGVSZW1vdmVkIixxZShFKSkpLG5bVF0oRCx4ZSksbltUXSgicmVhZHlzdGF0ZWNoYW5nZSIseGUpLG1lLmNsb25lTm9kZT1mdW5jdGlvbihlKXt2YXIgdD1MZS5jYWxsKHRoaXMsISFlKSxuPVVlKHQpO3JldHVybi0xPG4mJmYodCxVW25dKSxlJiZrLmxlbmd0aCYmZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MCxyPWUubGVuZ3RoO248cjtuKyspZih0PWVbbl0sVVtVZSh0KV0pfSh0LnF1ZXJ5U2VsZWN0b3JBbGwoaykpLHR9KSxEZSlyZXR1cm4gRGU9ITE7aWYoLTI8cS5jYWxsKFIsUytyKStxLmNhbGwoUixGK3IpJiZqZShlKSwhVi50ZXN0KHIpfHwtMTxxLmNhbGwoUCxyKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlICIrZSsiIGlzIGludmFsaWQiKTt2YXIgcixvLGE9ZnVuY3Rpb24oKXtyZXR1cm4gdT9uLmNyZWF0ZUVsZW1lbnQobSxyKTpuLmNyZWF0ZUVsZW1lbnQobSl9LGk9dHx8eCx1PUIuY2FsbChpLHYpLG09dT90W3ZdLnRvVXBwZXJDYXNlKCk6cjtyZXR1cm4gdSYmLTE8cS5jYWxsKFIsRittKSYmamUobSksbz1SLnB1c2goKHU/UzpGKStyKS0xLGs9ay5jb25jYXQoay5sZW5ndGg/IiwiOiIiLHU/bSsnW2lzPSInK2UudG9Mb3dlckNhc2UoKSsnIl0nOm0pLGEucHJvdG90eXBlPVVbb109Qi5jYWxsKGksInByb3RvdHlwZSIpP2kucHJvdG90eXBlOnVlKG1lKSxrLmxlbmd0aCYmUGUobi5xdWVyeVNlbGVjdG9yQWxsKGspLEwpLGF9LG4uY3JlYXRlRWxlbWVudD15ZT1mdW5jdGlvbihlLHQpe3ZhciByPSRlKHQpLG89cj9iZS5jYWxsKG4sZSxpZShyKSk6YmUuY2FsbChuLGUpLGw9IiIrZSxhPXEuY2FsbChSLChyP1M6RikrKHJ8fGwpLnRvVXBwZXJDYXNlKCkpLGk9LTE8YTtyZXR1cm4gciYmKG8uc2V0QXR0cmlidXRlKCJpcyIscj1yLnRvTG93ZXJDYXNlKCkpLGkmJihpPWtlKGwudG9VcHBlckNhc2UoKSxyKSkpLFNlPSFuLmNyZWF0ZUVsZW1lbnQuaW5uZXJIVE1MSGVscGVyLGkmJmYobyxVW2FdKSxvfSksemUucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6ZSxkZWZpbmU6Sj9mdW5jdGlvbihlLHQsbil7aWYobilLZShlLHQsbik7ZWxzZXt2YXIgcj1lLnRvVXBwZXJDYXNlKCk7b2Vbcl09e2NvbnN0cnVjdG9yOnQsY3JlYXRlOltyXX0sYWUuc2V0KHQsciksWS5kZWZpbmUoZSx0KX19OktlLGdldDpKP2Z1bmN0aW9uKGUpe3JldHVybiBZLmdldChlKXx8WGUoZSl9OlhlLHdoZW5EZWZpbmVkOko/ZnVuY3Rpb24oZSl7cmV0dXJuIG5lLnJhY2UoW1kud2hlbkRlZmluZWQoZSksV2UoZSldKX06V2V9LCFZfHwvXmZvcmNlLy50ZXN0KHQudHlwZSkpWWUoKTtlbHNlIGlmKCF0Lm5vQnVpbHRJbil0cnl7IWZ1bmN0aW9uKHQscixvKXt2YXIgbD1uZXcgUmVnRXhwKCJePGFcXHMraXM9KCd8XCIpIitvKyJcXDE+PC9hPiQiKTtpZihyW3ZdPSJhIiwodC5wcm90b3R5cGU9dWUoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9dCxlLmN1c3RvbUVsZW1lbnRzLmRlZmluZShvLHQsciksIWwudGVzdChuLmNyZWF0ZUVsZW1lbnQoImEiLHtpczpvfSkub3V0ZXJIVE1MKXx8IWwudGVzdCgobmV3IHQpLm91dGVySFRNTCkpdGhyb3cgcn0oZnVuY3Rpb24gZSgpe3JldHVybiBSZWZsZWN0LmNvbnN0cnVjdChIVE1MQW5jaG9yRWxlbWVudCxbXSxlKX0se30sImRvY3VtZW50LXJlZ2lzdGVyLWVsZW1lbnQtYSIpfWNhdGNoKGUpe1llKCl9aWYoIXQubm9CdWlsdEluKXRyeXtiZS5jYWxsKG4sImEiLCJhIil9Y2F0Y2goZSl7aWU9ZnVuY3Rpb24oZSl7cmV0dXJue2lzOmUudG9Mb3dlckNhc2UoKX19fX0od2luZG93KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NyaXB0cy5qcy5tYXAhZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyKXtmb3IodmFyIG4saSxhPXJbMF0sYz1yWzFdLGw9clsyXSxwPTAsZj1bXTtwPGEubGVuZ3RoO3ArKylvW2k9YVtwXV0mJmYucHVzaChvW2ldWzBdKSxvW2ldPTA7Zm9yKG4gaW4gYylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxuKSYmKGVbbl09Y1tuXSk7Zm9yKHMmJnMocik7Zi5sZW5ndGg7KWYuc2hpZnQoKSgpO3JldHVybiB1LnB1c2guYXBwbHkodSxsfHxbXSksdCgpfWZ1bmN0aW9uIHQoKXtmb3IodmFyIGUscj0wO3I8dS5sZW5ndGg7cisrKXtmb3IodmFyIHQ9dVtyXSxuPSEwLGE9MTthPHQubGVuZ3RoO2ErKykwIT09b1t0W2FdXSYmKG49ITEpO24mJih1LnNwbGljZShyLS0sMSksZT1pKGkucz10WzBdKSl9cmV0dXJuIGV9dmFyIG49e30sbz17MzowfSx1PVtdO2Z1bmN0aW9uIGkocil7aWYobltyXSlyZXR1cm4gbltyXS5leHBvcnRzO3ZhciB0PW5bcl09e2k6cixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW3JdLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLGkpLHQubD0hMCx0LmV4cG9ydHN9aS5lPWZ1bmN0aW9uKGUpe3ZhciByPVtdLHQ9b1tlXTtpZigwIT09dClpZih0KXIucHVzaCh0WzJdKTtlbHNle3ZhciBuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dD1vW2VdPVtyLG5dfSk7ci5wdXNoKHRbMl09bik7dmFyIHU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2EuY2hhcnNldD0idXRmLTgiLGEudGltZW91dD0xMjAsaS5uYyYmYS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixpLm5jKSxhLnNyYz1mdW5jdGlvbihlKXtyZXR1cm4gaS5wKyIiKyh7fVtlXXx8ZSkrIi5qcyJ9KGUpO3ZhciBjPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKHt0eXBlOiJ0aW1lb3V0Iix0YXJnZXQ6YX0pfSwxMmU0KTtmdW5jdGlvbiBsKHIpe2Eub25lcnJvcj1hLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dChjKTt2YXIgdD1vW2VdO2lmKDAhPT10KXtpZih0KXt2YXIgbj1yJiYoImxvYWQiPT09ci50eXBlPyJtaXNzaW5nIjpyLnR5cGUpLHU9ciYmci50YXJnZXQmJnIudGFyZ2V0LnNyYyxpPW5ldyBFcnJvcigiTG9hZGluZyBjaHVuayAiK2UrIiBmYWlsZWQuXG4oIituKyI6ICIrdSsiKSIpO2kudHlwZT1uLGkucmVxdWVzdD11LHRbMV0oaSl9b1tlXT12b2lkIDB9fWEub25lcnJvcj1hLm9ubG9hZD1sLHUuYXBwZW5kQ2hpbGQoYSl9cmV0dXJuIFByb21pc2UuYWxsKHIpfSxpLm09ZSxpLmM9bixpLmQ9ZnVuY3Rpb24oZSxyLHQpe2kubyhlLHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6dH0pfSxpLnI9ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxpLm49ZnVuY3Rpb24oZSl7dmFyIHI9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIGkuZChyLCJhIixyKSxyfSxpLm89ZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscil9LGkucD0iIixpLm9lPWZ1bmN0aW9uKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoZSksZX07dmFyIGE9d2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSxjPWEucHVzaC5iaW5kKGEpO2EucHVzaD1yLGE9YS5zbGljZSgpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKXIoYVtsXSk7dmFyIHM9Yzt0KCl9KFtdKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVudGltZS5qcy5tYXAod2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSkucHVzaChbWzVdLHsiK3JMdiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKS5kb2N1bWVudDtlLmV4cG9ydHM9ciYmci5kb2N1bWVudEVsZW1lbnR9LCIwL1I0IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6ImZ1bmN0aW9uIj09dHlwZW9mIGV9fSwiMFRXcCI6ZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZXJmb3JtYW5jZTtmdW5jdGlvbiBuKGUpe3QmJnQubWFyayYmdC5tYXJrKGUpfWZ1bmN0aW9uIHIoZSxuKXt0JiZ0Lm1lYXN1cmUmJnQubWVhc3VyZShlLG4pfWlmKG4oIlpvbmUiKSxlLlpvbmUpdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3ZhciBvLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsdCl7dGhpcy5fcHJvcGVydGllcz1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX25hbWU9dD90Lm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPXQmJnQucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBjKHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSx0KX1yZXR1cm4gdC5hc3NlcnRab25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKGUuUHJvbWlzZSE9PU8uWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicm9vdCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgZT10LmN1cnJlbnQ7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC56b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjdXJyZW50VGFzayIse2dldDpmdW5jdGlvbigpe3JldHVybiBqfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKG8saSl7aWYoTy5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrbyk7aWYoIWVbIl9fWm9uZV9kaXNhYmxlXyIrb10pe3ZhciBhPSJab25lOiIrbztuKGEpLE9bb109aShlLHQsUykscihhLGEpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFpvbmVXaXRoKGUpO2lmKHQpcmV0dXJuIHQuX3Byb3BlcnRpZXNbZV19LHQucHJvdG90eXBlLmdldFpvbmVXaXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzO3Q7KXtpZih0Ll9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGUpKXJldHVybiB0O3Q9dC5fcGFyZW50fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsZSl9LHQucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrZSk7dmFyIG49dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLGUsdCkscj10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByLnJ1bkd1YXJkZWQobix0aGlzLGFyZ3VtZW50cyx0KX19LHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD12b2lkIDApLHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPW51bGwpLEQ9e3BhcmVudDpELHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsZSx0LG4scil9ZmluYWxseXtEPUQucGFyZW50fX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT10JiYodD1udWxsKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj1udWxsKSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxlLHQsbixyKX1jYXRjaChlKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSl0aHJvdyBlfX1maW5hbGx5e0Q9RC5wYXJlbnR9fSx0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKGUsdCxuKXtpZihlLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKGUuem9uZXx8ZykubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYoZS5zdGF0ZSE9PXl8fGUudHlwZSE9PXgpe3ZhciByPWUuc3RhdGUhPWs7ciYmZS5fdHJhbnNpdGlvblRvKGssbSksZS5ydW5Db3VudCsrO3ZhciBvPWo7aj1lLEQ9e3BhcmVudDpELHpvbmU6dGhpc307dHJ5e2UudHlwZT09RSYmZS5kYXRhJiYhZS5kYXRhLmlzUGVyaW9kaWMmJihlLmNhbmNlbEZuPW51bGwpO3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZVRhc2sodGhpcyxlLHQsbil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtlLnN0YXRlIT09eSYmZS5zdGF0ZSE9PVQmJihlLnR5cGU9PXh8fGUuZGF0YSYmZS5kYXRhLmlzUGVyaW9kaWM/ciYmZS5fdHJhbnNpdGlvblRvKG0sayk6KGUucnVuQ291bnQ9MCx0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwtMSksciYmZS5fdHJhbnNpdGlvblRvKHksayx5KSkpLEQ9RC5wYXJlbnQsaj1vfX19LHQucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlKXtpZihlLnpvbmUmJmUuem9uZSE9PXRoaXMpZm9yKHZhciB0PXRoaXM7dDspe2lmKHQ9PT1lLnpvbmUpdGhyb3cgRXJyb3IoImNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICIrdGhpcy5uYW1lKyIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIitlLnpvbmUubmFtZSk7dD10LnBhcmVudH1lLl90cmFuc2l0aW9uVG8oXyx5KTt2YXIgbj1bXTtlLl96b25lRGVsZWdhdGVzPW4sZS5fem9uZT10aGlzO3RyeXtlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxlKX1jYXRjaCh0KXt0aHJvdyBlLl90cmFuc2l0aW9uVG8oVCxfLHkpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpLHR9cmV0dXJuIGUuX3pvbmVEZWxlZ2F0ZXM9PT1uJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwxKSxlLnN0YXRlPT1fJiZlLl90cmFuc2l0aW9uVG8obSxfKSxlfSx0LnByb3RvdHlwZS5zY2hlZHVsZU1pY3JvVGFzaz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHUodyxlLHQsbixyLG51bGwpKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHUoRSxlLHQsbixyLG8pKX0sdC5wcm90b3R5cGUuc2NoZWR1bGVFdmVudFRhc2s9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHUoeCxlLHQsbixyLG8pKX0sdC5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlKXtpZihlLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKGUuem9uZXx8ZykubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7ZS5fdHJhbnNpdGlvblRvKGIsbSxrKTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxlKX1jYXRjaCh0KXt0aHJvdyBlLl90cmFuc2l0aW9uVG8oVCxiKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0KSx0fXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQoZSwtMSksZS5fdHJhbnNpdGlvblRvKHksYiksZS5ydW5Db3VudD0wLGV9LHQucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl96b25lRGVsZWdhdGVzOy0xPT10JiYoZS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLl91cGRhdGVUYXNrQ291bnQoZS50eXBlLHQpfSx0Ll9fc3ltYm9sX189eix0fSgpLGE9e25hbWU6IiIsb25IYXNUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLmhhc1Rhc2sobixyKX0sb25TY2hlZHVsZVRhc2s6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUuc2NoZWR1bGVUYXNrKG4scil9LG9uSW52b2tlVGFzazpmdW5jdGlvbihlLHQsbixyLG8saSl7cmV0dXJuIGUuaW52b2tlVGFzayhuLHIsbyxpKX0sb25DYW5jZWxUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLmNhbmNlbFRhc2sobixyKX19LGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLl90YXNrQ291bnRzPXttaWNyb1Rhc2s6MCxtYWNyb1Rhc2s6MCxldmVudFRhc2s6MH0sdGhpcy56b25lPWUsdGhpcy5fcGFyZW50RGVsZWdhdGU9dCx0aGlzLl9mb3JrWlM9biYmKG4mJm4ub25Gb3JrP246dC5fZm9ya1pTKSx0aGlzLl9mb3JrRGxndD1uJiYobi5vbkZvcms/dDp0Ll9mb3JrRGxndCksdGhpcy5fZm9ya0N1cnJab25lPW4mJihuLm9uRm9yaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnRlcmNlcHRaUz1uJiYobi5vbkludGVyY2VwdD9uOnQuX2ludGVyY2VwdFpTKSx0aGlzLl9pbnRlcmNlcHREbGd0PW4mJihuLm9uSW50ZXJjZXB0P3Q6dC5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9biYmKG4ub25JbnRlcmNlcHQ/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW52b2tlWlM9biYmKG4ub25JbnZva2U/bjp0Ll9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1uJiYobi5vbkludm9rZT90OnQuX2ludm9rZURsZ3QpLHRoaXMuX2ludm9rZUN1cnJab25lPW4mJihuLm9uSW52b2tlP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9biYmKG4ub25IYW5kbGVFcnJvcj9uOnQuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1uJiYobi5vbkhhbmRsZUVycm9yP3Q6dC5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPW4mJihuLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOnQuem9uZSksdGhpcy5fc2NoZWR1bGVUYXNrWlM9biYmKG4ub25TY2hlZHVsZVRhc2s/bjp0Ll9zY2hlZHVsZVRhc2taUyksdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1uJiYobi5vblNjaGVkdWxlVGFzaz90OnQuX3NjaGVkdWxlVGFza0RsZ3QpLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPW4mJihuLm9uU2NoZWR1bGVUYXNrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVRhc2taUz1uJiYobi5vbkludm9rZVRhc2s/bjp0Ll9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PW4mJihuLm9uSW52b2tlVGFzaz90OnQuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9biYmKG4ub25JbnZva2VUYXNrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1uJiYobi5vbkNhbmNlbFRhc2s/bjp0Ll9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PW4mJihuLm9uQ2FuY2VsVGFzaz90OnQuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9biYmKG4ub25DYW5jZWxUYXNrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciByPW4mJm4ub25IYXNUYXNrOyhyfHx0JiZ0Ll9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPXI/bjphLHRoaXMuX2hhc1Rhc2tEbGd0PXQsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1lLG4ub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1hLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9dCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPWEsdGhpcy5faW52b2tlVGFza0RsZ3Q9dCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1hLHRoaXMuX2NhbmNlbFRhc2tEbGd0PXQsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPXRoaXMuem9uZSkpfXJldHVybiBlLnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSxlLHQpOm5ldyBpKGUsdCl9LGUucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsZSx0LG4pOnR9LGUucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLGUsdCxuLHIsbyk6dC5hcHBseShuLHIpfSxlLnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbihlLHQpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsZSx0KX0sZS5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKGUsdCl7dmFyIG49dDtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJm4uX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwobj10aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLGUsdCkpfHwobj10KTtlbHNlIGlmKHQuc2NoZWR1bGVGbil0LnNjaGVkdWxlRm4odCk7ZWxzZXtpZih0LnR5cGUhPXcpdGhyb3cgbmV3IEVycm9yKCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTt2KHQpfXJldHVybiBufSxlLnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsZSx0LG4scik6dC5jYWxsYmFjay5hcHBseShuLHIpfSxlLnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYodGhpcy5fY2FuY2VsVGFza1pTKW49dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsZSx0KTtlbHNle2lmKCF0LmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7bj10LmNhbmNlbEZuKHQpfXJldHVybiBufSxlLnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiB0aGlzLl9oYXNUYXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLGUsdCl9Y2F0Y2godCl7dGhpcy5oYW5kbGVFcnJvcihlLHQpfX0sZS5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3Rhc2tDb3VudHMscj1uW2VdLG89bltlXT1yK3Q7aWYobzwwKXRocm93IG5ldyBFcnJvcigiTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPXImJjAhPW98fHRoaXMuaGFzVGFzayh0aGlzLnpvbmUse21pY3JvVGFzazpuLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpuLm1hY3JvVGFzaz4wLGV2ZW50VGFzazpuLmV2ZW50VGFzaz4wLGNoYW5nZTplfSl9LGV9KCksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobixyLG8saSxhLGMpe3RoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVsZWQiLHRoaXMudHlwZT1uLHRoaXMuc291cmNlPXIsdGhpcy5kYXRhPWksdGhpcy5zY2hlZHVsZUZuPWEsdGhpcy5jYW5jZWxGbj1jLHRoaXMuY2FsbGJhY2s9bzt2YXIgdT10aGlzO3RoaXMuaW52b2tlPW49PT14JiZpJiZpLnVzZUc/dC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuaW52b2tlVGFzay5jYWxsKGUsdSx0aGlzLGFyZ3VtZW50cyl9fXJldHVybiB0Lmludm9rZVRhc2s9ZnVuY3Rpb24oZSx0LG4pe2V8fChlPXRoaXMpLFArKzt0cnl7cmV0dXJuIGUucnVuQ291bnQrKyxlLnpvbmUucnVuVGFzayhlLHQsbil9ZmluYWxseXsxPT1QJiZkKCksUC0tfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ6b25lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZVJlcXVlc3Q9ZnVuY3Rpb24oKXt0aGlzLl90cmFuc2l0aW9uVG8oeSxfKX0sdC5wcm90b3R5cGUuX3RyYW5zaXRpb25Ubz1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5fc3RhdGUhPT10JiZ0aGlzLl9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZSsiICciK3RoaXMuc291cmNlKyInOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyIrZSsiJywgZXhwZWN0aW5nIHN0YXRlICciK3QrIiciKyhuPyIgb3IgJyIrbisiJyI6IiIpKyIsIHdhcyAnIit0aGlzLl9zdGF0ZSsiJy4iKTt0aGlzLl9zdGF0ZT1lLGU9PXkmJih0aGlzLl96b25lRGVsZWdhdGVzPW51bGwpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEmJnZvaWQgMCE9PXRoaXMuZGF0YS5oYW5kbGVJZD90aGlzLmRhdGEuaGFuZGxlSWQ6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsc3RhdGU6dGhpcy5zdGF0ZSxzb3VyY2U6dGhpcy5zb3VyY2Usem9uZTp0aGlzLnpvbmUubmFtZSxydW5Db3VudDp0aGlzLnJ1bkNvdW50fX0sdH0oKSxzPXooInNldFRpbWVvdXQiKSxsPXooIlByb21pc2UiKSxmPXooInRoZW4iKSxwPVtdLGg9ITE7ZnVuY3Rpb24gdih0KXswPT09UCYmMD09PXAubGVuZ3RoJiYob3x8ZVtsXSYmKG89ZVtsXS5yZXNvbHZlKDApKSxvP29bZl0oZCk6ZVtzXShkLDApKSx0JiZwLnB1c2godCl9ZnVuY3Rpb24gZCgpe2lmKCFoKXtmb3IoaD0hMDtwLmxlbmd0aDspe3ZhciBlPXA7cD1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTt0cnl7bi56b25lLnJ1blRhc2sobixudWxsLG51bGwpfWNhdGNoKGUpe1Mub25VbmhhbmRsZWRFcnJvcihlKX19fVMubWljcm90YXNrRHJhaW5Eb25lKCksaD0hMX19dmFyIGc9e25hbWU6Ik5PIFpPTkUifSx5PSJub3RTY2hlZHVsZWQiLF89InNjaGVkdWxpbmciLG09InNjaGVkdWxlZCIsaz0icnVubmluZyIsYj0iY2FuY2VsaW5nIixUPSJ1bmtub3duIix3PSJtaWNyb1Rhc2siLEU9Im1hY3JvVGFzayIseD0iZXZlbnRUYXNrIixPPXt9LFM9e3N5bWJvbDp6LGN1cnJlbnRab25lRnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gRH0sb25VbmhhbmRsZWRFcnJvcjpaLG1pY3JvdGFza0RyYWluRG9uZTpaLHNjaGVkdWxlTWljcm9UYXNrOnYsc2hvd1VuY2F1Z2h0RXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4haVt6KCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildfSxwYXRjaEV2ZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoT25Qcm9wZXJ0aWVzOloscGF0Y2hNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gWn0sYmluZEFyZ3VtZW50czpmdW5jdGlvbigpe3JldHVybiBudWxsfSxzZXROYXRpdmVQcm9taXNlOmZ1bmN0aW9uKGUpe2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlc29sdmUmJihvPWUucmVzb2x2ZSgwKSl9fSxEPXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBpKG51bGwsbnVsbCl9LGo9bnVsbCxQPTA7ZnVuY3Rpb24gWigpe31mdW5jdGlvbiB6KGUpe3JldHVybiJfX3pvbmVfc3ltYm9sX18iK2V9cigiWm9uZSIsIlpvbmUiKSxlLlpvbmU9aX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWwpLFpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIixmdW5jdGlvbihlLHQsbil7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpPW4uc3ltYm9sLGE9W10sYz1pKCJQcm9taXNlIiksdT1pKCJ0aGVuIikscz0iX19jcmVhdGlvblRyYWNlX18iO24ub25VbmhhbmRsZWRFcnJvcj1mdW5jdGlvbihlKXtpZihuLnNob3dVbmNhdWdodEVycm9yKCkpe3ZhciB0PWUmJmUucmVqZWN0aW9uO3Q/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsdCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTp0LCI7IFpvbmU6IixlLnpvbmUubmFtZSwiOyBUYXNrOiIsZS50YXNrJiZlLnRhc2suc291cmNlLCI7IFZhbHVlOiIsdCx0IGluc3RhbmNlb2YgRXJyb3I/dC5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3IoZSl9fSxuLm1pY3JvdGFza0RyYWluRG9uZT1mdW5jdGlvbigpe2Zvcig7YS5sZW5ndGg7KWZvcih2YXIgZT1mdW5jdGlvbigpe3ZhciBlPWEuc2hpZnQoKTt0cnl7ZS56b25lLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9Y2F0Y2goZSl7ZihlKX19O2EubGVuZ3RoOyllKCl9O3ZhciBsPWkoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIik7ZnVuY3Rpb24gZihlKXtuLm9uVW5oYW5kbGVkRXJyb3IoZSk7dHJ5e3ZhciByPXRbbF07ciYmImZ1bmN0aW9uIj09dHlwZW9mIHImJnIuY2FsbCh0aGlzLGUpfWNhdGNoKGUpe319ZnVuY3Rpb24gcChlKXtyZXR1cm4gZSYmZS50aGVufWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gdihlKXtyZXR1cm4gTS5yZWplY3QoZSl9dmFyIGQ9aSgic3RhdGUiKSxnPWkoInZhbHVlIikseT1pKCJmaW5hbGx5IiksXz1pKCJwYXJlbnRQcm9taXNlVmFsdWUiKSxtPWkoInBhcmVudFByb21pc2VTdGF0ZSIpLGs9IlByb21pc2UudGhlbiIsYj1udWxsLFQ9ITAsdz0hMSxFPTA7ZnVuY3Rpb24geChlLHQpe3JldHVybiBmdW5jdGlvbihuKXt0cnl7aihlLHQsbil9Y2F0Y2godCl7aihlLCExLHQpfX19dmFyIE89ZnVuY3Rpb24oKXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZXx8KGU9ITAsdC5hcHBseShudWxsLGFyZ3VtZW50cykpfX19LFM9IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLEQ9aSgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIGooZSxyLGkpe3ZhciBjLHU9TygpO2lmKGU9PT1pKXRocm93IG5ldyBUeXBlRXJyb3IoUyk7aWYoZVtkXT09PWIpe3ZhciBsPW51bGw7dHJ5eyJvYmplY3QiIT10eXBlb2YgaSYmImZ1bmN0aW9uIiE9dHlwZW9mIGl8fChsPWkmJmkudGhlbil9Y2F0Y2godCl7cmV0dXJuIHUoZnVuY3Rpb24oKXtqKGUsITEsdCl9KSgpLGV9aWYociE9PXcmJmkgaW5zdGFuY2VvZiBNJiZpLmhhc093blByb3BlcnR5KGQpJiZpLmhhc093blByb3BlcnR5KGcpJiZpW2RdIT09YilaKGkpLGooZSxpW2RdLGlbZ10pO2Vsc2UgaWYociE9PXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBsKXRyeXtsLmNhbGwoaSx1KHgoZSxyKSksdSh4KGUsITEpKSl9Y2F0Y2godCl7dShmdW5jdGlvbigpe2ooZSwhMSx0KX0pKCl9ZWxzZXtlW2RdPXI7dmFyIGY9ZVtnXTtpZihlW2ddPWksZVt5XT09PXkmJnI9PT1UJiYoZVtkXT1lW21dLGVbZ109ZVtfXSkscj09PXcmJmkgaW5zdGFuY2VvZiBFcnJvcil7dmFyIHA9dC5jdXJyZW50VGFzayYmdC5jdXJyZW50VGFzay5kYXRhJiZ0LmN1cnJlbnRUYXNrLmRhdGFbc107cCYmbyhpLEQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnB9KX1mb3IodmFyIGg9MDtoPGYubGVuZ3RoOyl6KGUsZltoKytdLGZbaCsrXSxmW2grK10sZltoKytdKTtpZigwPT1mLmxlbmd0aCYmcj09dyl7ZVtkXT1FO3RyeXt0aHJvdyBuZXcgRXJyb3IoIlVuY2F1Z2h0IChpbiBwcm9taXNlKTogIisoKGM9aSkmJmMudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyhjLmNvbnN0cnVjdG9yJiZjLmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGMpOmM/Yy50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSkrKGkmJmkuc3RhY2s/IlxuIitpLnN0YWNrOiIiKSl9Y2F0Y2gocil7dmFyIHY9cjt2LnJlamVjdGlvbj1pLHYucHJvbWlzZT1lLHYuem9uZT10LmN1cnJlbnQsdi50YXNrPXQuY3VycmVudFRhc2ssYS5wdXNoKHYpLG4uc2NoZWR1bGVNaWNyb1Rhc2soKX19fX1yZXR1cm4gZX12YXIgUD1pKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIFooZSl7aWYoZVtkXT09PUUpe3RyeXt2YXIgbj10W1BdO24mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuLmNhbGwodGhpcyx7cmVqZWN0aW9uOmVbZ10scHJvbWlzZTplfSl9Y2F0Y2goZSl7fWVbZF09dztmb3IodmFyIHI9MDtyPGEubGVuZ3RoO3IrKyllPT09YVtyXS5wcm9taXNlJiZhLnNwbGljZShyLDEpfX1mdW5jdGlvbiB6KGUsdCxuLHIsbyl7WihlKTt2YXIgaT1lW2RdLGE9aT8iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOmg6ImZ1bmN0aW9uIj09dHlwZW9mIG8/bzp2O3Quc2NoZWR1bGVNaWNyb1Rhc2soayxmdW5jdGlvbigpe3RyeXt2YXIgcj1lW2ddLG89biYmeT09PW5beV07byYmKG5bX109cixuW21dPWkpO3ZhciBjPXQucnVuKGEsdm9pZCAwLG8mJmEhPT12JiZhIT09aD9bXTpbcl0pO2oobiwhMCxjKX1jYXRjaChlKXtqKG4sITEsZSl9fSxuKX12YXIgTT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGFuIGluc3RhbmNlb2YgUHJvbWlzZS4iKTt0aGlzW2RdPWIsdGhpc1tnXT1bXTt0cnl7dCYmdCh4KHRoaXMsVCkseCh0aGlzLHcpKX1jYXRjaChlKXtqKHRoaXMsITEsZSl9fXJldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LGUucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gaihuZXcgdGhpcyhudWxsKSxULGUpfSxlLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gaihuZXcgdGhpcyhudWxsKSx3LGUpfSxlLnJhY2U9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPW5ldyB0aGlzKGZ1bmN0aW9uKGUscil7dD1lLG49cn0pO2Z1bmN0aW9uIG8oZSl7ciYmKHI9dChlKSl9ZnVuY3Rpb24gaShlKXtyJiYocj1uKGUpKX1mb3IodmFyIGE9MCxjPWU7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07cCh1KXx8KHU9dGhpcy5yZXNvbHZlKHUpKSx1LnRoZW4obyxpKX1yZXR1cm4gcn0sZS5hbGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scj1uZXcgdGhpcyhmdW5jdGlvbihlLHIpe3Q9ZSxuPXJ9KSxvPTAsaT1bXSxhPTAsYz1lO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO3AodSl8fCh1PXRoaXMucmVzb2x2ZSh1KSksdS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihuKXtpW2VdPW4sLS1vfHx0KGkpfX0obyksbiksbysrfXJldHVybiBvfHx0KGkpLHJ9LGUucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSxuKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihudWxsKSxvPXQuY3VycmVudDtyZXR1cm4gdGhpc1tkXT09Yj90aGlzW2ddLnB1c2gobyxyLGUsbik6eih0aGlzLG8scixlLG4pLHJ9LGUucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4obnVsbCxlKX0sZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTtuW3ldPXk7dmFyIHI9dC5jdXJyZW50O3JldHVybiB0aGlzW2RdPT1iP3RoaXNbZ10ucHVzaChyLG4sZSxlKTp6KHRoaXMscixuLGUsZSksbn0sZX0oKTtNLnJlc29sdmU9TS5yZXNvbHZlLE0ucmVqZWN0PU0ucmVqZWN0LE0ucmFjZT1NLnJhY2UsTS5hbGw9TS5hbGw7dmFyIEM9ZVtjXT1lLlByb21pc2UsUj10Ll9fc3ltYm9sX18oIlpvbmVBd2FyZVByb21pc2UiKSxJPXIoZSwiUHJvbWlzZSIpO0kmJiFJLmNvbmZpZ3VyYWJsZXx8KEkmJmRlbGV0ZSBJLndyaXRhYmxlLEkmJmRlbGV0ZSBJLnZhbHVlLEl8fChJPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pLEkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGVbUl0/ZVtSXTplW2NdfSxJLnNldD1mdW5jdGlvbih0KXt0PT09TT9lW1JdPXQ6KGVbY109dCx0LnByb3RvdHlwZVt1XXx8cSh0KSxuLnNldE5hdGl2ZVByb21pc2UodCkpfSxvKGUsIlByb21pc2UiLEkpKSxlLlByb21pc2U9TTt2YXIgRixMPWkoInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gcShlKXt2YXIgdD1lLnByb3RvdHlwZSxuPXIodCwidGhlbiIpO2lmKCFufHwhMSE9PW4ud3JpdGFibGUmJm4uY29uZmlndXJhYmxlKXt2YXIgbz10LnRoZW47dFt1XT1vLGUucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgTShmdW5jdGlvbihlLHQpe28uY2FsbChuLGUsdCl9KS50aGVuKGUsdCl9LGVbTF09ITB9fWlmKEMpe3EoQyk7dmFyIEE9ZS5mZXRjaDsiZnVuY3Rpb24iPT10eXBlb2YgQSYmKGUuZmV0Y2g9KEY9QSxmdW5jdGlvbigpe3ZhciBlPUYuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGUgaW5zdGFuY2VvZiBNKXJldHVybiBlO3ZhciB0PWUuY29uc3RydWN0b3I7cmV0dXJuIHRbTF18fHEodCksZX0pKX1yZXR1cm4gUHJvbWlzZVt0Ll9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1hLE19KTt2YXIgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LG49T2JqZWN0LmdldFByb3RvdHlwZU9mLHI9T2JqZWN0LmNyZWF0ZSxvPUFycmF5LnByb3RvdHlwZS5zbGljZSxpPSJhZGRFdmVudExpc3RlbmVyIixhPSJyZW1vdmVFdmVudExpc3RlbmVyIixjPVpvbmUuX19zeW1ib2xfXyhpKSx1PVpvbmUuX19zeW1ib2xfXyhhKSxzPSJ0cnVlIixsPSJmYWxzZSIsZj0iX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBwKGUsdCl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKGUsdCl9ZnVuY3Rpb24gaChlLHQsbixyLG8pe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2soZSx0LG4scixvKX12YXIgdj1ab25lLl9fc3ltYm9sX18sZD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyxnPWQ/d2luZG93OnZvaWQgMCx5PWQmJmd8fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsLF89InJlbW92ZUF0dHJpYnV0ZSIsbT1bbnVsbF07ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aC0xO24+PTA7bi0tKSJmdW5jdGlvbiI9PXR5cGVvZiBlW25dJiYoZVtuXT1wKGVbbl0sdCsiXyIrbikpO3JldHVybiBlfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIWV8fCExIT09ZS53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXQmJnZvaWQgMD09PWUuc2V0KX12YXIgVD0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsdz0hKCJudyJpbiB5KSYmdm9pZCAwIT09eS5wcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHkucHJvY2VzcyksRT0hdyYmIVQmJiEoIWR8fCFnLkhUTUxFbGVtZW50KSx4PXZvaWQgMCE9PXkucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpJiYhVCYmISghZHx8IWcuSFRNTEVsZW1lbnQpLE89e30sUz1mdW5jdGlvbihlKXtpZihlPWV8fHkuZXZlbnQpe3ZhciB0PU9bZS50eXBlXTt0fHwodD1PW2UudHlwZV09digiT05fUFJPUEVSVFkiK2UudHlwZSkpO3ZhciBuPSh0aGlzfHxlLnRhcmdldHx8eSlbdF0scj1uJiZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdm9pZCAwPT1yfHxyfHxlLnByZXZlbnREZWZhdWx0KCkscn19O2Z1bmN0aW9uIEQobixyLG8pe3ZhciBpPWUobixyKTtpZighaSYmbyYmZShvLHIpJiYoaT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxpJiZpLmNvbmZpZ3VyYWJsZSl7ZGVsZXRlIGkud3JpdGFibGUsZGVsZXRlIGkudmFsdWU7dmFyIGE9aS5nZXQsYz1pLnNldCx1PXIuc3Vic3RyKDIpLHM9T1t1XTtzfHwocz1PW3VdPXYoIk9OX1BST1BFUlRZIit1KSksaS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0fHxuIT09eXx8KHQ9eSksdCYmKHRbc10mJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih1LFMpLGMmJmMuYXBwbHkodCxtKSwiZnVuY3Rpb24iPT10eXBlb2YgZT8odFtzXT1lLHQuYWRkRXZlbnRMaXN0ZW5lcih1LFMsITEpKTp0W3NdPW51bGwpfSxpLmdldD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoZXx8biE9PXl8fChlPXkpLCFlKXJldHVybiBudWxsO3ZhciB0PWVbc107aWYodClyZXR1cm4gdDtpZihhKXt2YXIgbz1hJiZhLmNhbGwodGhpcyk7aWYobylyZXR1cm4gaS5zZXQuY2FsbCh0aGlzLG8pLCJmdW5jdGlvbiI9PXR5cGVvZiBlW19dJiZlLnJlbW92ZUF0dHJpYnV0ZShyKSxvfXJldHVybiBudWxsfSx0KG4scixpKX19ZnVuY3Rpb24gaihlLHQsbil7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylEKGUsIm9uIit0W3JdLG4pO2Vsc2V7dmFyIG89W107Zm9yKHZhciBpIGluIGUpIm9uIj09aS5zdWJzdHIoMCwyKSYmby5wdXNoKGkpO2Zvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKUQoZSxvW2FdLG4pfX12YXIgUD12KCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gWihlKXt2YXIgbj15W2VdO2lmKG4pe3lbdihlKV09bix5W2VdPWZ1bmN0aW9uKCl7dmFyIHQ9ayhhcmd1bWVudHMsZSk7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6dGhpc1tQXT1uZXcgbjticmVhaztjYXNlIDE6dGhpc1tQXT1uZXcgbih0WzBdKTticmVhaztjYXNlIDI6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0pO2JyZWFrO2Nhc2UgMzp0aGlzW1BdPW5ldyBuKHRbMF0sdFsxXSx0WzJdKTticmVhaztjYXNlIDQ6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0sdFsyXSx0WzNdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxNKHlbZV0sbik7dmFyIHIsbz1uZXcgbihmdW5jdGlvbigpe30pO2ZvcihyIGluIG8pIlhNTEh0dHBSZXF1ZXN0Ij09PWUmJiJyZXNwb25zZUJsb2IiPT09cnx8ZnVuY3Rpb24obil7ImZ1bmN0aW9uIj09dHlwZW9mIG9bbl0/eVtlXS5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tQXVtuXS5hcHBseSh0aGlzW1BdLGFyZ3VtZW50cyl9OnQoeVtlXS5wcm90b3R5cGUsbix7c2V0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiI9PXR5cGVvZiB0Pyh0aGlzW1BdW25dPXAodCxlKyIuIituKSxNKHRoaXNbUF1bbl0sdCkpOnRoaXNbUF1bbl09dH0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbUF1bbl19fSl9KHIpO2ZvcihyIGluIG4pInByb3RvdHlwZSIhPT1yJiZuLmhhc093blByb3BlcnR5KHIpJiYoeVtlXVtyXT1uW3JdKX19ZnVuY3Rpb24geih0LHIsbyl7Zm9yKHZhciBpPXQ7aSYmIWkuaGFzT3duUHJvcGVydHkocik7KWk9bihpKTshaSYmdFtyXSYmKGk9dCk7dmFyIGEsYz12KHIpO2lmKGkmJiEoYT1pW2NdKSYmKGE9aVtjXT1pW3JdLGIoaSYmZShpLHIpKSkpe3ZhciB1PW8oYSxjLHIpO2lbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLGFyZ3VtZW50cyl9LE0oaVtyXSxhKX1yZXR1cm4gYX1mdW5jdGlvbiBNKGUsdCl7ZVt2KCJPcmlnaW5hbERlbGVnYXRlIildPXR9dmFyIEM9ITEsUj0hMTtmdW5jdGlvbiBJKCl7aWYoQylyZXR1cm4gUjtDPSEwO3RyeXt2YXIgZT1nLm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuLTE9PT1lLmluZGV4T2YoIk1TSUUgIikmJi0xPT09ZS5pbmRleE9mKCJUcmlkZW50LyIpJiYtMT09PWUuaW5kZXhPZigiRWRnZS8iKXx8KFI9ITApLFJ9Y2F0Y2goZSl7fX1ab25lLl9fbG9hZF9wYXRjaCgidG9TdHJpbmciLGZ1bmN0aW9uKGUpe3ZhciB0PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxuPXYoIk9yaWdpbmFsRGVsZWdhdGUiKSxyPXYoIlByb21pc2UiKSxvPXYoIkVycm9yIiksaT1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXt2YXIgaT10aGlzW25dO2lmKGkpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGk/dC5hcHBseSh0aGlzW25dLGFyZ3VtZW50cyk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpO2lmKHRoaXM9PT1Qcm9taXNlKXt2YXIgYT1lW3JdO2lmKGEpcmV0dXJuIHQuYXBwbHkoYSxhcmd1bWVudHMpfWlmKHRoaXM9PT1FcnJvcil7dmFyIGM9ZVtvXTtpZihjKXJldHVybiB0LmFwcGx5KGMsYXJndW1lbnRzKX19cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpW25dPXQsRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPWk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjphLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KTt2YXIgRj17dXNlRzohMH0sTD17fSxxPXt9LEE9L15fX3pvbmVfc3ltYm9sX18oXHcrKSh0cnVlfGZhbHNlKSQvLEg9Il9fem9uZV9zeW1ib2xfX3Byb3BhZ2F0aW9uU3RvcHBlZCI7ZnVuY3Rpb24gTihlLHQscil7dmFyIG89ciYmci5hZGR8fGksYz1yJiZyLnJtfHxhLHU9ciYmci5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIscD1yJiZyLnJtQWxsfHwicmVtb3ZlQWxsTGlzdGVuZXJzIixoPXYobyksZD0iLiIrbysiOiIsZz0icHJlcGVuZExpc3RlbmVyIix5PSIuIitnKyI6IixfPWZ1bmN0aW9uKGUsdCxuKXtpZighZS5pc1JlbW92ZWQpe3ZhciByPWUuY2FsbGJhY2s7Im9iamVjdCI9PXR5cGVvZiByJiZyLmhhbmRsZUV2ZW50JiYoZS5jYWxsYmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gci5oYW5kbGVFdmVudChlKX0sZS5vcmlnaW5hbERlbGVnYXRlPXIpLGUuaW52b2tlKGUsdCxbbl0pO3ZhciBvPWUub3B0aW9ucztvJiYib2JqZWN0Ij09dHlwZW9mIG8mJm8ub25jZSYmdFtjXS5jYWxsKHQsbi50eXBlLGUub3JpZ2luYWxEZWxlZ2F0ZT9lLm9yaWdpbmFsRGVsZWdhdGU6ZS5jYWxsYmFjayxvKX19LG09ZnVuY3Rpb24odCl7aWYodD10fHxlLmV2ZW50KXt2YXIgbj10aGlzfHx0LnRhcmdldHx8ZSxyPW5bTFt0LnR5cGVdW2xdXTtpZihyKWlmKDE9PT1yLmxlbmd0aClfKHJbMF0sbix0KTtlbHNlIGZvcih2YXIgbz1yLnNsaWNlKCksaT0wO2k8by5sZW5ndGgmJighdHx8ITAhPT10W0hdKTtpKyspXyhvW2ldLG4sdCl9fSxrPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8ZS5ldmVudCl7dmFyIG49dGhpc3x8dC50YXJnZXR8fGUscj1uW0xbdC50eXBlXVtzXV07aWYocilpZigxPT09ci5sZW5ndGgpXyhyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoJiYoIXR8fCEwIT09dFtIXSk7aSsrKV8ob1tpXSxuLHQpfX07ZnVuY3Rpb24gYih0LHIpe2lmKCF0KXJldHVybiExO3ZhciBpPSEwO3ImJnZvaWQgMCE9PXIudXNlRyYmKGk9ci51c2VHKTt2YXIgYT1yJiZyLnZoLF89ITA7ciYmdm9pZCAwIT09ci5jaGtEdXAmJihfPXIuY2hrRHVwKTt2YXIgYj0hMTtyJiZ2b2lkIDAhPT1yLnJ0JiYoYj1yLnJ0KTtmb3IodmFyIFQ9dDtUJiYhVC5oYXNPd25Qcm9wZXJ0eShvKTspVD1uKFQpO2lmKCFUJiZ0W29dJiYoVD10KSwhVClyZXR1cm4hMTtpZihUW2hdKXJldHVybiExO3ZhciB3LEU9e30seD1UW2hdPVRbb10sTz1UW3YoYyldPVRbY10sUz1UW3YodSldPVRbdV0sRD1UW3YocCldPVRbcF07ciYmci5wcmVwZW5kJiYodz1UW3Yoci5wcmVwZW5kKV09VFtyLnByZXBlbmRdKTt2YXIgaj1pP2Z1bmN0aW9uKCl7aWYoIUUuaXNFeGlzdGluZylyZXR1cm4geC5jYWxsKEUudGFyZ2V0LEUuZXZlbnROYW1lLEUuY2FwdHVyZT9rOm0sRS5vcHRpb25zKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHguY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxlLmludm9rZSxFLm9wdGlvbnMpfSxQPWk/ZnVuY3Rpb24oZSl7aWYoIWUuaXNSZW1vdmVkKXt2YXIgdD1MW2UuZXZlbnROYW1lXSxuPXZvaWQgMDt0JiYobj10W2UuY2FwdHVyZT9zOmxdKTt2YXIgcj1uJiZlLnRhcmdldFtuXTtpZihyKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWlmKHJbb109PT1lKXtyLnNwbGljZShvLDEpLGUuaXNSZW1vdmVkPSEwLDA9PT1yLmxlbmd0aCYmKGUuYWxsUmVtb3ZlZD0hMCxlLnRhcmdldFtuXT1udWxsKTticmVha319aWYoZS5hbGxSZW1vdmVkKXJldHVybiBPLmNhbGwoZS50YXJnZXQsZS5ldmVudE5hbWUsZS5jYXB0dXJlP2s6bSxlLm9wdGlvbnMpfTpmdW5jdGlvbihlKXtyZXR1cm4gTy5jYWxsKGUudGFyZ2V0LGUuZXZlbnROYW1lLGUuaW52b2tlLGUub3B0aW9ucyl9LFo9ciYmci5kaWZmP3IuZGlmZjpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiB0O3JldHVybiJmdW5jdGlvbiI9PT1uJiZlLmNhbGxiYWNrPT09dHx8Im9iamVjdCI9PT1uJiZlLm9yaWdpbmFsRGVsZWdhdGU9PT10fSx6PVpvbmVbWm9uZS5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIildLEM9ZnVuY3Rpb24odCxuLHIsbyxjLHUpe3JldHVybiB2b2lkIDA9PT1jJiYoYz0hMSksdm9pZCAwPT09dSYmKHU9ITEpLGZ1bmN0aW9uKCl7dmFyIHA9dGhpc3x8ZSxoPWFyZ3VtZW50c1sxXTtpZighaClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHY9ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGgpe2lmKCFoLmhhbmRsZUV2ZW50KXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2PSEwfWlmKCFhfHxhKHQsaCxwLGFyZ3VtZW50cykpe3ZhciBkLGc9YXJndW1lbnRzWzBdLHk9YXJndW1lbnRzWzJdO2lmKHopZm9yKHZhciBtPTA7bTx6Lmxlbmd0aDttKyspaWYoZz09PXpbbV0pcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBrPSExO3ZvaWQgMD09PXk/ZD0hMTohMD09PXk/ZD0hMDohMT09PXk/ZD0hMTooZD0hIXkmJiEheS5jYXB0dXJlLGs9ISF5JiYhIXkub25jZSk7dmFyIGIsVD1ab25lLmN1cnJlbnQsdz1MW2ddO2lmKHcpYj13W2Q/czpsXTtlbHNle3ZhciB4PWYrKGcrbCksTz1mKyhnK3MpO0xbZ109e30sTFtnXVtsXT14LExbZ11bc109TyxiPWQ/Tzp4fXZhciBTLEQ9cFtiXSxqPSExO2lmKEQpe2lmKGo9ITAsXylmb3IobT0wO208RC5sZW5ndGg7bSsrKWlmKFooRFttXSxoKSlyZXR1cm59ZWxzZSBEPXBbYl09W107dmFyIFA9cC5jb25zdHJ1Y3Rvci5uYW1lLE09cVtQXTtNJiYoUz1NW2ddKSxTfHwoUz1QK24rZyksRS5vcHRpb25zPXksayYmKEUub3B0aW9ucy5vbmNlPSExKSxFLnRhcmdldD1wLEUuY2FwdHVyZT1kLEUuZXZlbnROYW1lPWcsRS5pc0V4aXN0aW5nPWo7dmFyIEM9aT9GOm51bGw7QyYmKEMudGFza0RhdGE9RSk7dmFyIFI9VC5zY2hlZHVsZUV2ZW50VGFzayhTLGgsQyxyLG8pO3JldHVybiBFLnRhcmdldD1udWxsLEMmJihDLnRhc2tEYXRhPW51bGwpLGsmJih5Lm9uY2U9ITApLFIub3B0aW9ucz15LFIudGFyZ2V0PXAsUi5jYXB0dXJlPWQsUi5ldmVudE5hbWU9Zyx2JiYoUi5vcmlnaW5hbERlbGVnYXRlPWgpLHU/RC51bnNoaWZ0KFIpOkQucHVzaChSKSxjP3A6dm9pZCAwfX19O3JldHVybiBUW29dPUMoeCxkLGosUCxiKSx3JiYoVFtnXT1DKHcseSxmdW5jdGlvbihlKXtyZXR1cm4gdy5jYWxsKEUudGFyZ2V0LEUuZXZlbnROYW1lLGUuaW52b2tlLEUub3B0aW9ucyl9LFAsYiwhMCkpLFRbY109ZnVuY3Rpb24oKXt2YXIgdCxuPXRoaXN8fGUscj1hcmd1bWVudHNbMF0sbz1hcmd1bWVudHNbMl07dD12b2lkIDAhPT1vJiYoITA9PT1vfHwhMSE9PW8mJiEhbyYmISFvLmNhcHR1cmUpO3ZhciBpPWFyZ3VtZW50c1sxXTtpZighaSlyZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIWF8fGEoTyxpLG4sYXJndW1lbnRzKSl7dmFyIGMsdT1MW3JdO3UmJihjPXVbdD9zOmxdKTt2YXIgZj1jJiZuW2NdO2lmKGYpZm9yKHZhciBwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBoPWZbcF07aWYoWihoLGkpKXJldHVybiBmLnNwbGljZShwLDEpLGguaXNSZW1vdmVkPSEwLDA9PT1mLmxlbmd0aCYmKGguYWxsUmVtb3ZlZD0hMCxuW2NdPW51bGwpLGguem9uZS5jYW5jZWxUYXNrKGgpLGI/bjp2b2lkIDB9cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sVFt1XT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxuPVcodGhpc3x8ZSxhcmd1bWVudHNbMF0pLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTt0LnB1c2goby5vcmlnaW5hbERlbGVnYXRlP28ub3JpZ2luYWxEZWxlZ2F0ZTpvLmNhbGxiYWNrKX1yZXR1cm4gdH0sVFtwXT1mdW5jdGlvbigpe3ZhciB0PXRoaXN8fGUsbj1hcmd1bWVudHNbMF07aWYobil7dmFyIHI9TFtuXTtpZihyKXt2YXIgbz10W3JbbF1dLGk9dFtyW3NdXTtpZihvKXt2YXIgYT1vLnNsaWNlKCk7Zm9yKGg9MDtoPGEubGVuZ3RoO2grKyl0aGlzW2NdLmNhbGwodGhpcyxuLCh1PWFbaF0pLm9yaWdpbmFsRGVsZWdhdGU/dS5vcmlnaW5hbERlbGVnYXRlOnUuY2FsbGJhY2ssdS5vcHRpb25zKX1pZihpKWZvcihhPWkuc2xpY2UoKSxoPTA7aDxhLmxlbmd0aDtoKyspe3ZhciB1O3RoaXNbY10uY2FsbCh0aGlzLG4sKHU9YVtoXSkub3JpZ2luYWxEZWxlZ2F0ZT91Lm9yaWdpbmFsRGVsZWdhdGU6dS5jYWxsYmFjayx1Lm9wdGlvbnMpfX19ZWxzZXtmb3IodmFyIGY9T2JqZWN0LmtleXModCksaD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgdj1BLmV4ZWMoZltoXSksZD12JiZ2WzFdO2QmJiJyZW1vdmVMaXN0ZW5lciIhPT1kJiZ0aGlzW3BdLmNhbGwodGhpcyxkKX10aGlzW3BdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihiKXJldHVybiB0aGlzfSxNKFRbb10seCksTShUW2NdLE8pLEQmJk0oVFtwXSxEKSxTJiZNKFRbdV0sUyksITB9Zm9yKHZhciBUPVtdLHc9MDt3PHQubGVuZ3RoO3crKylUW3ddPWIodFt3XSxyKTtyZXR1cm4gVH1mdW5jdGlvbiBXKGUsdCl7dmFyIG49W107Zm9yKHZhciByIGluIGUpe3ZhciBvPUEuZXhlYyhyKSxpPW8mJm9bMV07aWYoaSYmKCF0fHxpPT09dCkpe3ZhciBhPWVbcl07aWYoYSlmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyluLnB1c2goYVtjXSl9fXJldHVybiBufXZhciBYPXYoInpvbmVUYXNrIik7ZnVuY3Rpb24gSyhlLHQsbixyKXt2YXIgbz1udWxsLGk9bnVsbDtuKz1yO3ZhciBhPXt9O2Z1bmN0aW9uIGModCl7dmFyIG49dC5kYXRhO3JldHVybiBuLmFyZ3NbMF09ZnVuY3Rpb24oKXt0cnl7dC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7dC5kYXRhJiZ0LmRhdGEuaXNQZXJpb2RpY3x8KCJudW1iZXIiPT10eXBlb2Ygbi5oYW5kbGVJZD9kZWxldGUgYVtuLmhhbmRsZUlkXTpuLmhhbmRsZUlkJiYobi5oYW5kbGVJZFtYXT1udWxsKSl9fSxuLmhhbmRsZUlkPW8uYXBwbHkoZSxuLmFyZ3MpLHR9ZnVuY3Rpb24gdShlKXtyZXR1cm4gaShlLmRhdGEuaGFuZGxlSWQpfW89eihlLHQrPXIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG8saSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGlbMF0pe3ZhciBzPWgodCxpWzBdLHtoYW5kbGVJZDpudWxsLGlzUGVyaW9kaWM6IkludGVydmFsIj09PXIsZGVsYXk6IlRpbWVvdXQiPT09cnx8IkludGVydmFsIj09PXI/aVsxXXx8MDpudWxsLGFyZ3M6aX0sYyx1KTtpZighcylyZXR1cm4gczt2YXIgbD1zLmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2FbbF09czpsJiYobFtYXT1zKSxsJiZsLnJlZiYmbC51bnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgbC51bnJlZiYmKHMucmVmPWwucmVmLmJpbmQobCkscy51bnJlZj1sLnVucmVmLmJpbmQobCkpLCJudW1iZXIiPT10eXBlb2YgbHx8bD9sOnN9cmV0dXJuIG4uYXBwbHkoZSxpKX19KSxpPXooZSxuLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBvLGk9clswXTsibnVtYmVyIj09dHlwZW9mIGk/bz1hW2ldOihvPWkmJmlbWF0pfHwobz1pKSxvJiYic3RyaW5nIj09dHlwZW9mIG8udHlwZT8ibm90U2NoZWR1bGVkIiE9PW8uc3RhdGUmJihvLmNhbmNlbEZuJiZvLmRhdGEuaXNQZXJpb2RpY3x8MD09PW8ucnVuQ291bnQpJiYoIm51bWJlciI9PXR5cGVvZiBpP2RlbGV0ZSBhW2ldOmkmJihpW1hdPW51bGwpLG8uem9uZS5jYW5jZWxUYXNrKG8pKTp0LmFwcGx5KGUscil9fSl9dmFyIFU9T2JqZWN0W3YoImRlZmluZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxCPU9iamVjdFt2KCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixZPU9iamVjdC5jcmVhdGUsSj12KCJ1bmNvbmZpZ3VyYWJsZXMiKTtmdW5jdGlvbiBWKGUsdCl7cmV0dXJuIGUmJmVbSl0mJmVbSl1bdF19ZnVuY3Rpb24gRyhlLHQsbil7cmV0dXJuIE9iamVjdC5pc0Zyb3plbihuKXx8KG4uY29uZmlndXJhYmxlPSEwKSxuLmNvbmZpZ3VyYWJsZXx8KGVbSl18fE9iamVjdC5pc0Zyb3plbihlKXx8VShlLEose3dyaXRhYmxlOiEwLHZhbHVlOnt9fSksZVtKXSYmKGVbSl1bdF09ITApKSxufWZ1bmN0aW9uIFEoZSx0LG4scil7dHJ5e3JldHVybiBVKGUsdCxuKX1jYXRjaChpKXtpZighbi5jb25maWd1cmFibGUpdGhyb3cgaTt2b2lkIDA9PT1yP2RlbGV0ZSBuLmNvbmZpZ3VyYWJsZTpuLmNvbmZpZ3VyYWJsZT1yO3RyeXtyZXR1cm4gVShlLHQsbil9Y2F0Y2gocil7dmFyIG89bnVsbDt0cnl7bz1KU09OLnN0cmluZ2lmeShuKX1jYXRjaChlKXtvPW4udG9TdHJpbmcoKX1jb25zb2xlLmxvZygiQXR0ZW1wdGluZyB0byBjb25maWd1cmUgJyIrdCsiJyB3aXRoIGRlc2NyaXB0b3IgJyIrbysiJyBvbiBvYmplY3QgJyIrZSsiJyBhbmQgZ290IGVycm9yLCBnaXZpbmcgdXA6ICIrcil9fX12YXIgJD1bImFic29sdXRlZGV2aWNlb3JpZW50YXRpb24iLCJhZnRlcmlucHV0IiwiYWZ0ZXJwcmludCIsImFwcGluc3RhbGxlZCIsImJlZm9yZWluc3RhbGxwcm9tcHQiLCJiZWZvcmVwcmludCIsImJlZm9yZXVubG9hZCIsImRldmljZWxpZ2h0IiwiZGV2aWNlbW90aW9uIiwiZGV2aWNlb3JpZW50YXRpb24iLCJkZXZpY2VvcmllbnRhdGlvbmFic29sdXRlIiwiZGV2aWNlcHJveGltaXR5IiwiaGFzaGNoYW5nZSIsImxhbmd1YWdlY2hhbmdlIiwibWVzc2FnZSIsIm1vemJlZm9yZXBhaW50Iiwib2ZmbGluZSIsIm9ubGluZSIsInBhaW50IiwicGFnZXNob3ciLCJwYWdlaGlkZSIsInBvcHN0YXRlIiwicmVqZWN0aW9uaGFuZGxlZCIsInN0b3JhZ2UiLCJ1bmhhbmRsZWRyZWplY3Rpb24iLCJ1bmxvYWQiLCJ1c2VycHJveGltaXR5IiwidnJkaXNwbHljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sZWU9WyJlbmNyeXB0ZWQiLCJ3YWl0aW5nZm9ya2V5IiwibXNuZWVka2V5IiwibW96aW50ZXJydXB0YmVnaW4iLCJtb3ppbnRlcnJ1cHRlbmQiXSx0ZT1bImxvYWQiXSxuZT1bImJsdXIiLCJlcnJvciIsImZvY3VzIiwibG9hZCIsInJlc2l6ZSIsInNjcm9sbCIsIm1lc3NhZ2VlcnJvciJdLHJlPVsiYm91bmNlIiwiZmluaXNoIiwic3RhcnQiXSxvZT1bImxvYWRzdGFydCIsInByb2dyZXNzIiwiYWJvcnQiLCJlcnJvciIsImxvYWQiLCJwcm9ncmVzcyIsInRpbWVvdXQiLCJsb2FkZW5kIiwicmVhZHlzdGF0ZWNoYW5nZSJdLGllPVsidXBncmFkZW5lZWRlZCIsImNvbXBsZXRlIiwiYWJvcnQiLCJzdWNjZXNzIiwiZXJyb3IiLCJibG9ja2VkIiwidmVyc2lvbmNoYW5nZSIsImNsb3NlIl0sYWU9WyJjbG9zZSIsImVycm9yIiwib3BlbiIsIm1lc3NhZ2UiXSxjZT1bImVycm9yIiwibWVzc2FnZSJdLHVlPVsiYWJvcnQiLCJhbmltYXRpb25jYW5jZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9yZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5nZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5kIiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIsImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJlIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwib3JpZW50YXRpb25jaGFuZ2UiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJkb3duIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcmxvY2tjaGFuZ2UiLCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIndlYmtpdHBvaW50ZXJsb2NrZXJjaGFuZ2UiLCJwb2ludGVybG9ja2Vycm9yIiwibW96cG9pbnRlcmxvY2tlcnJvciIsIndlYmtpdHBvaW50ZXJsb2NrZXJyb3IiLCJwb2ludGVybW92ZSIsInBvaW50b3V0IiwicG9pbnRlcm92ZXIiLCJwb2ludGVydXAiLCJwcm9ncmVzcyIsInJhdGVjaGFuZ2UiLCJyZXNldCIsInJlc2l6ZSIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzZWxlY3QiLCJzZWxlY3Rpb25jaGFuZ2UiLCJzZWxlY3RzdGFydCIsInNob3ciLCJzb3J0Iiwic3RhbGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1ldXBkYXRlIiwidm9sdW1lY2hhbmdlIiwidG91Y2hjYW5jZWwiLCJ0b3VjaG1vdmUiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiLCJ0cmFuc2l0aW9uY2FuY2VsIiwidHJhbnNpdGlvbmVuZCIsIndhaXRpbmciLCJ3aGVlbCJdLmNvbmNhdChbIndlYmdsY29udGV4dHJlc3RvcmVkIiwid2ViZ2xjb250ZXh0bG9zdCIsIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiXSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sWyJ0b2dnbGUiXSxbImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlwdGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVlbmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIiwidmlzaWJpbGl0eWNoYW5nZSJdLCQsWyJiZWZvcmVjb3B5IiwiYmVmb3JlY3V0IiwiYmVmb3JlcGFzdGUiLCJjb3B5IiwiY3V0IiwicGFzdGUiLCJkcmFnc3RhcnQiLCJsb2FkZW5kIiwiYW5pbWF0aW9uc3RhcnQiLCJzZWFyY2giLCJ0cmFuc2l0aW9ucnVuIiwidHJhbnNpdGlvbnN0YXJ0Iiwid2Via2l0YW5pbWF0aW9uZW5kIiwid2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uIiwid2Via2l0YW5pbWF0aW9uc3RhcnQiLCJ3ZWJraXR0cmFuc2l0aW9uZW5kIl0sWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSk7ZnVuY3Rpb24gc2UoZSx0LG4scil7ZSYmaihlLGZ1bmN0aW9uKGUsdCxuKXtpZighbilyZXR1cm4gdDt2YXIgcj1uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQ9PT1lfSk7aWYoIXJ8fDA9PT1yLmxlbmd0aClyZXR1cm4gdDt2YXIgbz1yWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09by5pbmRleE9mKGUpfSl9KGUsdCxuKSxyKX1mdW5jdGlvbiBsZShjLHUpe2lmKCF3fHx4KXt2YXIgcz0idW5kZWZpbmVkIiE9dHlwZW9mIFdlYlNvY2tldDtpZihmdW5jdGlvbigpe2lmKChFfHx4KSYmIWUoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJiJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCl7dmFyIG49ZShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpO2lmKG4mJiFuLmNvbmZpZ3VyYWJsZSlyZXR1cm4hMX12YXIgcj1YTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsbz1lKHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIpO2lmKG8pe3Qociwib25yZWFkeXN0YXRlY2hhbmdlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSk7dmFyIGk9ISEoYz1uZXcgWE1MSHR0cFJlcXVlc3QpLm9ucmVhZHlzdGF0ZWNoYW5nZTtyZXR1cm4gdChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLG98fHt9KSxpfXZhciBhPXYoImZha2UiKTt0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW2FdfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpc1thXT1lfX0pO3ZhciBjLHU9ZnVuY3Rpb24oKXt9O3JldHVybihjPW5ldyBYTUxIdHRwUmVxdWVzdCkub25yZWFkeXN0YXRlY2hhbmdlPXUsaT1jW2FdPT09dSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGl9KCkpe3ZhciBsPXUuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2lmKEUpe3ZhciBmPXdpbmRvdztzZShmLHVlLmNvbmNhdChbIm1lc3NhZ2VlcnJvciJdKSxsLG4oZikpLHNlKERvY3VtZW50LnByb3RvdHlwZSx1ZSxsKSx2b2lkIDAhPT1mLlNWR0VsZW1lbnQmJnNlKGYuU1ZHRWxlbWVudC5wcm90b3R5cGUsdWUsbCksc2UoRWxlbWVudC5wcm90b3R5cGUsdWUsbCksc2UoSFRNTEVsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLGVlLGwpLHNlKEhUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlLCQuY29uY2F0KG5lKSxsKSxzZShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCQuY29uY2F0KG5lKSxsKSxzZShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSx0ZSxsKSxzZShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsdGUsbCk7dmFyIGg9Zi5IVE1MTWFycXVlZUVsZW1lbnQ7aCYmc2UoaC5wcm90b3R5cGUscmUsbCk7dmFyIGQ9Zi5Xb3JrZXI7ZCYmc2UoZC5wcm90b3R5cGUsY2UsbCl9c2UoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLG9lLGwpO3ZhciBnPXUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtnJiZzZShnJiZnLnByb3RvdHlwZSxvZSxsKSwidW5kZWZpbmVkIiE9dHlwZW9mIElEQkluZGV4JiYoc2UoSURCSW5kZXgucHJvdG90eXBlLGllLGwpLHNlKElEQlJlcXVlc3QucHJvdG90eXBlLGllLGwpLHNlKElEQk9wZW5EQlJlcXVlc3QucHJvdG90eXBlLGllLGwpLHNlKElEQkRhdGFiYXNlLnByb3RvdHlwZSxpZSxsKSxzZShJREJUcmFuc2FjdGlvbi5wcm90b3R5cGUsaWUsbCksc2UoSURCQ3Vyc29yLnByb3RvdHlwZSxpZSxsKSkscyYmc2UoV2ViU29ja2V0LnByb3RvdHlwZSxhZSxsKX1lbHNlIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWZ1bmN0aW9uKGUpe3ZhciB0PXVlW2VdLG49Im9uIit0O3NlbGYuYWRkRXZlbnRMaXN0ZW5lcih0LGZ1bmN0aW9uKGUpe3ZhciB0LHIsbz1lLnRhcmdldDtmb3Iocj1vP28uY29uc3RydWN0b3IubmFtZSsiLiIrbjoidW5rbm93bi4iK247bzspb1tuXSYmIW9bbl1bZmVdJiYoKHQ9cChvW25dLHIpKVtmZV09b1tuXSxvW25dPXQpLG89by5wYXJlbnRFbGVtZW50fSwhMCl9LHQ9MDt0PHVlLmxlbmd0aDt0KyspZSh0KX0oKSxaKCJYTUxIdHRwUmVxdWVzdCIpLHMmJmZ1bmN0aW9uKHQsbil7dmFyIGM9bi5XZWJTb2NrZXQ7bi5FdmVudFRhcmdldHx8TihuLFtjLnByb3RvdHlwZV0pLG4uV2ViU29ja2V0PWZ1bmN0aW9uKHQsbil7dmFyIHUscyxsPWFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgYyh0LG4pOm5ldyBjKHQpLGY9ZShsLCJvbm1lc3NhZ2UiKTtyZXR1cm4gZiYmITE9PT1mLmNvbmZpZ3VyYWJsZT8odT1yKGwpLHM9bCxbaSxhLCJzZW5kIiwiY2xvc2UiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3VbZV09ZnVuY3Rpb24oKXt2YXIgdD1vLmNhbGwoYXJndW1lbnRzKTtpZihlPT09aXx8ZT09PWEpe3ZhciBuPXQubGVuZ3RoPjA/dFswXTp2b2lkIDA7aWYobil7dmFyIHI9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrbik7bFtyXT11W3JdfX1yZXR1cm4gbFtlXS5hcHBseShsLHQpfX0pKTp1PWwsaih1LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0scyksdX07dmFyIHU9bi5XZWJTb2NrZXQ7Zm9yKHZhciBzIGluIGMpdVtzXT1jW3NdfSgwLHUpfX12YXIgZmU9digidW5ib3VuZCIpO1pvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihlLHQsbil7bi5wYXRjaE9uUHJvcGVydGllcz1qLG4ucGF0Y2hNZXRob2Q9eixuLmJpbmRBcmd1bWVudHM9a30pLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLGZ1bmN0aW9uKGUpe0soZSwic2V0IiwiY2xlYXIiLCJUaW1lb3V0IiksSyhlLCJzZXQiLCJjbGVhciIsIkludGVydmFsIiksSyhlLCJzZXQiLCJjbGVhciIsIkltbWVkaWF0ZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsZnVuY3Rpb24oZSl7SyhlLCJyZXF1ZXN0IiwiY2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxLKGUsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLEsoZSwid2Via2l0UmVxdWVzdCIsIndlYmtpdENhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIil9KSxab25lLl9fbG9hZF9wYXRjaCgiYmxvY2tpbmciLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0scj0wO3I8bi5sZW5ndGg7cisrKXooZSxuW3JdLGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdC5jdXJyZW50LnJ1bihuLGUsaSxvKX19KX0pLFpvbmUuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldCIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpO2Vbcl0mJih0W3JdPWVbcl0pLGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5FdmVudDtuJiZuLnByb3RvdHlwZSYmdC5wYXRjaE1ldGhvZChuLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt0W0hdPSEwLGUmJmUuYXBwbHkodCxuKX19KX0oZSx0KX0oZSxuKSxmdW5jdGlvbihlLHQpe3ZhciBuPSJBbmNob3IsQXJlYSxBdWRpbyxCUixCYXNlLEJhc2VGb250LEJvZHksQnV0dG9uLENhbnZhcyxDb250ZW50LERMaXN0LERpcmVjdG9yeSxEaXYsRW1iZWQsRmllbGRTZXQsRm9udCxGb3JtLEZyYW1lLEZyYW1lU2V0LEhSLEhlYWQsSGVhZGluZyxIdG1sLElGcmFtZSxJbWFnZSxJbnB1dCxLZXlnZW4sTEksTGFiZWwsTGVnZW5kLExpbmssTWFwLE1hcnF1ZWUsTWVkaWEsTWVudSxNZXRhLE1ldGVyLE1vZCxPTGlzdCxPYmplY3QsT3B0R3JvdXAsT3B0aW9uLE91dHB1dCxQYXJhZ3JhcGgsUHJlLFByb2dyZXNzLFF1b3RlLFNjcmlwdCxTZWxlY3QsU291cmNlLFNwYW4sU3R5bGUsVGFibGVDYXB0aW9uLFRhYmxlQ2VsbCxUYWJsZUNvbCxUYWJsZSxUYWJsZVJvdyxUYWJsZVNlY3Rpb24sVGV4dEFyZWEsVGl0bGUsVHJhY2ssVUxpc3QsVW5rbm93bixWaWRlbyIscj0iQXBwbGljYXRpb25DYWNoZSxFdmVudFNvdXJjZSxGaWxlUmVhZGVyLElucHV0TWV0aG9kQ29udGV4dCxNZWRpYUNvbnRyb2xsZXIsTWVzc2FnZVBvcnQsTm9kZSxQZXJmb3JtYW5jZSxTVkdFbGVtZW50SW5zdGFuY2UsU2hhcmVkV29ya2VyLFRleHRUcmFjayxUZXh0VHJhY2tDdWUsVGV4dFRyYWNrTGlzdCxXZWJLaXROYW1lZEZsb3csV2luZG93LFdvcmtlcixXb3JrZXJHbG9iYWxTY29wZSxYTUxIdHRwUmVxdWVzdCxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LFhNTEh0dHBSZXF1ZXN0VXBsb2FkLElEQlJlcXVlc3QsSURCT3BlbkRCUmVxdWVzdCxJREJEYXRhYmFzZSxJREJUcmFuc2FjdGlvbixJREJDdXJzb3IsREJJbmRleCxXZWJTb2NrZXQiLnNwbGl0KCIsIiksbz1bXSxpPWUud3RmLGE9bi5zcGxpdCgiLCIpO2k/bz1hLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iSFRNTCIrZSsiRWxlbWVudCJ9KS5jb25jYXQocik6ZS5FdmVudFRhcmdldD9vLnB1c2goIkV2ZW50VGFyZ2V0Iik6bz1yO2Zvcih2YXIgYz1lLl9fWm9uZV9kaXNhYmxlX0lFX2NoZWNrfHwhMSx1PWUuX19ab25lX2VuYWJsZV9jcm9zc19jb250ZXh0X2NoZWNrfHwhMSxwPUkoKSxoPSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLHY9MDt2PHVlLmxlbmd0aDt2Kyspe3ZhciBkPWYrKChrPXVlW3ZdKStsKSxnPWYrKGsrcyk7TFtrXT17fSxMW2tdW2xdPWQsTFtrXVtzXT1nfWZvcih2PTA7djxuLmxlbmd0aDt2KyspZm9yKHZhciB5PWFbdl0sXz1xW3ldPXt9LG09MDttPHVlLmxlbmd0aDttKyspe3ZhciBrO19baz11ZVttXV09eSsiLmFkZEV2ZW50TGlzdGVuZXI6IitrfXZhciBiPVtdO2Zvcih2PTA7djxvLmxlbmd0aDt2Kyspe3ZhciBUPWVbb1t2XV07Yi5wdXNoKFQmJlQucHJvdG90eXBlKX1OKGUsYix7dmg6ZnVuY3Rpb24oZSx0LG4scil7aWYoIWMmJnApe2lmKHUpdHJ5e3ZhciBvO2lmKCJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iPT09KG89dC50b1N0cmluZygpKXx8bz09aClyZXR1cm4gZS5hcHBseShuLHIpLCExfWNhdGNoKHQpe3JldHVybiBlLmFwcGx5KG4sciksITF9ZWxzZSBpZigiW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIj09PShvPXQudG9TdHJpbmcoKSl8fG89PWgpcmV0dXJuIGUuYXBwbHkobixyKSwhMX1lbHNlIGlmKHUpdHJ5e3QudG9TdHJpbmcoKX1jYXRjaCh0KXtyZXR1cm4gZS5hcHBseShuLHIpLCExfXJldHVybiEwfX0pLHQucGF0Y2hFdmVudFRhcmdldD1OfShlLG4pO3ZhciBvPWUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtvJiZvLnByb3RvdHlwZSYmbi5wYXRjaEV2ZW50VGFyZ2V0KGUsW28ucHJvdG90eXBlXSksWigiTXV0YXRpb25PYnNlcnZlciIpLFooIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKSxaKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIpLFooIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24odCxuLHIpe2xlKDAsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuKXtpZihWKGUsdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrdCsiJyBvZiAiK2UpO3ZhciByPW4uY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09dCYmKG49RyhlLHQsbikpLFEoZSx0LG4scil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix0W25dKX0pLGV9LE9iamVjdC5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHR8fE9iamVjdC5pc0Zyb3plbih0KXx8T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt0W25dPUcoZSxuLHRbbl0pfSksWShlLHQpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49QihlLHQpO3JldHVybiBWKGUsdCkmJihuLmNvbmZpZ3VyYWJsZT0hMSksbn0sZnVuY3Rpb24obil7aWYoKEV8fHgpJiYicmVnaXN0ZXJFbGVtZW50ImluIHQuZG9jdW1lbnQpe3ZhciByPWRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCxvPVsiY3JlYXRlZENhbGxiYWNrIiwiYXR0YWNoZWRDYWxsYmFjayIsImRldGFjaGVkQ2FsbGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXTtkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbiYmbi5wcm90b3R5cGUmJm8uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcixvLGksYSxjPSJEb2N1bWVudC5yZWdpc3RlckVsZW1lbnQ6OiIrdCx1PW4ucHJvdG90eXBlO2lmKHUuaGFzT3duUHJvcGVydHkodCkpe3ZhciBzPWUodSx0KTtzJiZzLnZhbHVlPyhzLnZhbHVlPXAocy52YWx1ZSxjKSxhPShpPXMpLmNvbmZpZ3VyYWJsZSxRKHI9bi5wcm90b3R5cGUsbz10LGk9RyhyLG8saSksYSkpOnVbdF09cCh1W3RdLGMpfWVsc2UgdVt0XSYmKHVbdF09cCh1W3RdLGMpKX0pLHIuY2FsbChkb2N1bWVudCx0LG4pfSxNKGRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCxyKX19KCl9KSxab25lLl9fbG9hZF9wYXRjaCgiY2FudmFzIixmdW5jdGlvbihlKXt2YXIgdD1lLkhUTUxDYW52YXNFbGVtZW50O3ZvaWQgMCE9PXQmJnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS50b0Jsb2ImJmZ1bmN0aW9uKGUsbixyKXt2YXIgbz1udWxsO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5kYXRhO3JldHVybiB0LmFyZ3NbdC5jYklkeF09ZnVuY3Rpb24oKXtlLmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG8uYXBwbHkodC50YXJnZXQsdC5hcmdzKSxlfW89eih0LnByb3RvdHlwZSwidG9CbG9iIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybntuYW1lOiJIVE1MQ2FudmFzRWxlbWVudC50b0Jsb2IiLHRhcmdldDplLGNiSWR4OjAsYXJnczp0fX0odCxuKTtyZXR1cm4gci5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG5bci5jYklkeF0/aChyLm5hbWUsbltyLmNiSWR4XSxyLGksbnVsbCk6ZS5hcHBseSh0LG4pfX0pfSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goIlhIUiIsZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24odCl7dmFyIHM9WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLGw9c1tjXSxmPXNbdV07aWYoIWwpe3ZhciBwPWUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihwKXt2YXIgdj1wLnByb3RvdHlwZTtsPXZbY10sZj12W3VdfX12YXIgZD0icmVhZHlzdGF0ZWNoYW5nZSIsZz0ic2NoZWR1bGVkIjtmdW5jdGlvbiB5KGUpe1hNTEh0dHBSZXF1ZXN0W2ldPSExO3ZhciB0PWUuZGF0YSxyPXQudGFyZ2V0LGE9cltvXTtsfHwobD1yW2NdLGY9clt1XSksYSYmZi5jYWxsKHIsZCxhKTt2YXIgcz1yW29dPWZ1bmN0aW9uKCl7ci5yZWFkeVN0YXRlPT09ci5ET05FJiYhdC5hYm9ydGVkJiZYTUxIdHRwUmVxdWVzdFtpXSYmZS5zdGF0ZT09PWcmJmUuaW52b2tlKCl9O3JldHVybiBsLmNhbGwocixkLHMpLHJbbl18fChyW25dPWUpLGIuYXBwbHkocix0LmFyZ3MpLFhNTEh0dHBSZXF1ZXN0W2ldPSEwLGV9ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBtKGUpe3ZhciB0PWUuZGF0YTtyZXR1cm4gdC5hYm9ydGVkPSEwLFQuYXBwbHkodC50YXJnZXQsdC5hcmdzKX12YXIgaz16KHMsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbcl09MD09dFsyXSxlW2FdPXRbMV0say5hcHBseShlLHQpfX0pLGI9eihzLCJzZW5kIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlW3JdP2IuYXBwbHkoZSx0KTpoKCJYTUxIdHRwUmVxdWVzdC5zZW5kIixfLHt0YXJnZXQ6ZSx1cmw6ZVthXSxpc1BlcmlvZGljOiExLGRlbGF5Om51bGwsYXJnczp0LGFib3J0ZWQ6ITF9LHksbSl9fSksVD16KHMsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lW25dO2lmKHQmJiJzdHJpbmciPT10eXBlb2YgdC50eXBlKXtpZihudWxsPT10LmNhbmNlbEZufHx0LmRhdGEmJnQuZGF0YS5hYm9ydGVkKXJldHVybjt0LnpvbmUuY2FuY2VsVGFzayh0KX19fSl9KCk7dmFyIG49digieGhyVGFzayIpLHI9digieGhyU3luYyIpLG89digieGhyTGlzdGVuZXIiKSxpPXYoInhoclNjaGVkdWxlZCIpLGE9digieGhyVVJMIil9KSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLGZ1bmN0aW9uKHQpe3QubmF2aWdhdG9yJiZ0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9dC5jb25zdHJ1Y3Rvci5uYW1lLG89ZnVuY3Rpb24obyl7dmFyIGk9bltvXSxhPXRbaV07aWYoYSl7aWYoIWIoZSh0LGkpKSlyZXR1cm4iY29udGludWUiO3RbaV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGsoYXJndW1lbnRzLHIrIi4iK2kpKX07cmV0dXJuIE0odCxlKSx0fShhKX19LGk9MDtpPG4ubGVuZ3RoO2krKylvKGkpfSh0Lm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe1coZSx0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPWUuUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKG8pe3ZhciBpPW5ldyBvKHQse3Byb21pc2U6bi5wcm9taXNlLHJlYXNvbjpuLnJlamVjdGlvbn0pO3IuaW52b2tlKGkpfX0pfX1lLlByb21pc2VSZWplY3Rpb25FdmVudCYmKHRbdigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09bigidW5oYW5kbGVkcmVqZWN0aW9uIiksdFt2KCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpXT1uKCJyZWplY3Rpb25oYW5kbGVkIikpfSl9KCl9LCIxVHNBIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTp0LGRvbmU6ISFlfX19LCIyT2lGIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sMzpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oImhOL2ciKX0sIjNMeWoiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJLcm9KIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIG8gaW4gdClyKGUsbyx0W29dLG4pO3JldHVybiBlfX0sIjQ1VHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1uKCJPUDNZIiksYT1yLmhhcyxjPXIuZ2V0LHU9ci5rZXkscz1mdW5jdGlvbihlLHQsbil7aWYoYShlLHQsbikpcmV0dXJuIGMoZSx0LG4pO3ZhciByPWkodCk7cmV0dXJuIG51bGwhPT1yP3MoZSxyLG4pOnZvaWQgMH07ci5leHAoe2dldE1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sIjQ5RDQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmtleSxhPXIuc2V0O3IuZXhwKHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbihlLHQsbixyKXthKGUsdCxvKG4pLGkocikpfX0pfSwiNExpRCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJkeVpYIiksbz1uKCJYS0ZVIiksaT1uKCJLcm9KIiksYT1uKCIzTHlqIiksYz1uKCJaNnZGIiksdT1uKCJTbGtZIikscz1uKCI5Z1g3IiksbD1uKCIwL1I0IiksZj1uKCJlZVZxIikscD1uKCJYTVZoIiksaD1uKCJmeURxIiksdj1uKCJYYnppIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGQsZyx5KXt2YXIgXz1yW2VdLG09XyxrPWc/InNldCI6ImFkZCIsYj1tJiZtLnByb3RvdHlwZSxUPXt9LHc9ZnVuY3Rpb24oZSl7dmFyIHQ9YltlXTtpKGIsZSwiZGVsZXRlIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHkmJiFsKGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImhhcyI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh5JiYhbChlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJnZXQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB5JiYhbChlKT92b2lkIDA6dC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImFkZCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplLG4pLHRoaXN9KX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIG0mJih5fHxiLmZvckVhY2gmJiFmKGZ1bmN0aW9uKCl7KG5ldyBtKS5lbnRyaWVzKCkubmV4dCgpfSkpKXt2YXIgRT1uZXcgbSx4PUVba10oeT97fTotMCwxKSE9RSxPPWYoZnVuY3Rpb24oKXtFLmhhcygxKX0pLFM9cChmdW5jdGlvbihlKXtuZXcgbShlKX0pLEQ9IXkmJmYoZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IG0sdD01O3QtLTspZVtrXSh0LHQpO3JldHVybiFlLmhhcygtMCl9KTtTfHwoKG09dChmdW5jdGlvbih0LG4pe3ModCxtLGUpO3ZhciByPXYobmV3IF8sdCxtKTtyZXR1cm4gdm9pZCAwIT1uJiZ1KG4sZyxyW2tdLHIpLHJ9KSkucHJvdG90eXBlPWIsYi5jb25zdHJ1Y3Rvcj1tKSwoT3x8RCkmJih3KCJkZWxldGUiKSx3KCJoYXMiKSxnJiZ3KCJnZXQiKSksKER8fHgpJiZ3KGspLHkmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfWVsc2UgbT1kLmdldENvbnN0cnVjdG9yKHQsZSxnLGspLGEobS5wcm90b3R5cGUsbiksYy5ORUVEPSEwO3JldHVybiBoKG0sZSksVFtlXT1tLG8oby5HK28uVytvLkYqKG0hPV8pLFQpLHl8fGQuc2V0U3Ryb25nKG0sZSxnKSxtfX0sIjRSNHUiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YiLnNwbGl0KCIsIil9LCI2Rk1PIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiRVdtQyIpLGk9bigiSzB4VSIpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBvKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIW8odC5wcm90b3R5cGUpfHwodD12b2lkIDApLHIodCkmJm51bGw9PT0odD10W2ldKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sIjdEbGgiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmhhcyxhPXIua2V5O3IuZXhwKHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LCI5QUFuIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIndtdkciKSxvPW4oInM1cVkiKTtlLmV4cG9ydHM9bigiNExpRCIpKCJNYXAiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbihlKXt2YXIgdD1yLmdldEVudHJ5KG8odGhpcywiTWFwIiksZSk7cmV0dXJuIHQmJnQudn0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVmKG8odGhpcywiTWFwIiksMD09PWU/MDplLHQpfX0sciwhMCl9LCI5Z1g3IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtpZighKGUgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09ciYmciBpbiBlKXRocm93IFR5cGVFcnJvcihuKyI6IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBlfX0sQWZuejpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkxRQWMiKSxvPW4oIlhLRlUiKSxpPW4oIktyb0oiKSxhPW4oIk11a2IiKSxjPW4oImhQSVEiKSx1PW4oIlFhRGIiKSxzPW4oImZ5RHEiKSxsPW4oIk9QM1kiKSxmPW4oIksweFUiKSgiaXRlcmF0b3IiKSxwPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHYsZCxnLHkpe3Uobix0LHYpO3ZhciBfLG0sayxiPWZ1bmN0aW9uKGUpe2lmKCFwJiZlIGluIHgpcmV0dXJuIHhbZV07c3dpdGNoKGUpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19LFQ9dCsiIEl0ZXJhdG9yIix3PSJ2YWx1ZXMiPT1kLEU9ITEseD1lLnByb3RvdHlwZSxPPXhbZl18fHhbIkBAaXRlcmF0b3IiXXx8ZCYmeFtkXSxTPU98fGIoZCksRD1kP3c/YigiZW50cmllcyIpOlM6dm9pZCAwLGo9IkFycmF5Ij09dCYmeC5lbnRyaWVzfHxPO2lmKGomJihrPWwoai5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmay5uZXh0JiYocyhrLFQsITApLHJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBrW2ZdfHxhKGssZixoKSksdyYmTyYmInZhbHVlcyIhPT1PLm5hbWUmJihFPSEwLFM9ZnVuY3Rpb24oKXtyZXR1cm4gTy5jYWxsKHRoaXMpfSksciYmIXl8fCFwJiYhRSYmeFtmXXx8YSh4LGYsUyksY1t0XT1TLGNbVF09aCxkKWlmKF89e3ZhbHVlczp3P1M6YigidmFsdWVzIiksa2V5czpnP1M6Yigia2V5cyIpLGVudHJpZXM6RH0seSlmb3IobSBpbiBfKW0gaW4geHx8aSh4LG0sX1ttXSk7ZWxzZSBvKG8uUCtvLkYqKHB8fEUpLHQsXyk7cmV0dXJuIF99fSxCcWZWOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmdldCxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LENra1Q6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIm0wUHAiKSxvPW4oIlltcXYiKSxpPW4oIlMvai8iKSxhPW4oIm5lOGkiKSxjPW4oInpSd28iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0xPT1lLHU9Mj09ZSxzPTM9PWUsbD00PT1lLGY9Nj09ZSxwPTU9PWV8fGYsaD10fHxjO3JldHVybiBmdW5jdGlvbih0LGMsdil7Zm9yKHZhciBkLGcseT1pKHQpLF89byh5KSxtPXIoYyx2LDMpLGs9YShfLmxlbmd0aCksYj0wLFQ9bj9oKHQsayk6dT9oKHQsMCk6dm9pZCAwO2s+YjtiKyspaWYoKHB8fGIgaW4gXykmJihnPW0oZD1fW2JdLGIseSksZSkpaWYobilUW2JdPWc7ZWxzZSBpZihnKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBkO2Nhc2UgNjpyZXR1cm4gYjtjYXNlIDI6VC5wdXNoKGQpfWVsc2UgaWYobClyZXR1cm4hMTtyZXR1cm4gZj8tMTpzfHxsP2w6VH19fSxEVmdBOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ6aEFiIiksbz1uKCI0UjR1Iik7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLG8pfX0sRUswRTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLG89bigiQ2trVCIpKDApLGk9bigiS3JvSiIpLGE9bigiWjZ2RiIpLGM9bigiY3pOSyIpLHU9bigiWkQ2NyIpLHM9bigiMC9SNCIpLGw9bigiZWVWcSIpLGY9bigiczVxWSIpLHA9YS5nZXRXZWFrLGg9T2JqZWN0LmlzRXh0ZW5zaWJsZSx2PXUudWZzdG9yZSxkPXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx5PXtnZXQ6ZnVuY3Rpb24oZSl7aWYocyhlKSl7dmFyIHQ9cChlKTtyZXR1cm4hMD09PXQ/dihmKHRoaXMsIldlYWtNYXAiKSkuZ2V0KGUpOnQ/dFt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdS5kZWYoZih0aGlzLCJXZWFrTWFwIiksZSx0KX19LF89ZS5leHBvcnRzPW4oIjRMaUQiKSgiV2Vha01hcCIsZyx5LHUsITAsITApO2woZnVuY3Rpb24oKXtyZXR1cm4gNyE9KG5ldyBfKS5zZXQoKE9iamVjdC5mcmVlemV8fE9iamVjdCkoZCksNykuZ2V0KGQpfSkmJihjKChyPXUuZ2V0Q29uc3RydWN0b3IoZywiV2Vha01hcCIpKS5wcm90b3R5cGUseSksYS5ORUVEPSEwLG8oWyJkZWxldGUiLCJoYXMiLCJnZXQiLCJzZXQiXSxmdW5jdGlvbihlKXt2YXIgdD1fLnByb3RvdHlwZSxuPXRbZV07aSh0LGUsZnVuY3Rpb24odCxvKXtpZihzKHQpJiYhaCh0KSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IHIpO3ZhciBpPXRoaXMuX2ZbZV0odCxvKTtyZXR1cm4ic2V0Ij09ZT90aGlzOml9cmV0dXJuIG4uY2FsbCh0aGlzLHQsbyl9KX0pKX0sRVdtQzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT1yKGUpfX0sRWVtSDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVXFjRiIpLG89bigiUmpELyIpLGk9bigiYUNGaiIpLGE9bigiYXBtVCIpLGM9bigiYWFneCIpLHU9bigieHBxbCIpLHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9bigibmg0ZyIpP3M6ZnVuY3Rpb24oZSx0KXtpZihlPWkoZSksdD1hKHQsITApLHUpdHJ5e3JldHVybiBzKGUsdCl9Y2F0Y2goZSl7fWlmKGMoZSx0KSlyZXR1cm4gbyghci5mLmNhbGwoZSx0KSxlW3RdKX19LEZKVzU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKSxvPW4oInkzdzkiKSxpPW4oIkRWZ0EiKTtlLmV4cG9ydHM9bigibmg0ZyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7byhlKTtmb3IodmFyIG4sYT1pKHQpLGM9YS5sZW5ndGgsdT0wO2M+dTspci5mKGUsbj1hW3UrK10sdFtuXSk7cmV0dXJuIGV9fSxGWmNxOmZ1bmN0aW9uKGUsdCxuKXtuKCI0OUQ0IiksbigienErQyIpLG4oIjQ1VHYiKSxuKCJ1QXRkIiksbigiQnFmViIpLG4oImZOLzMiKSxuKCJpVytTIiksbigiN0RsaCIpLG4oIk9weGIiKSxlLmV4cG9ydHM9bigiZzNnNSIpLlJlZmxlY3R9LEg2aGY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sbyl7dHJ5e3JldHVybiBvP3QocihuKVswXSxuWzFdKTp0KG4pfWNhdGNoKHQpe3ZhciBpPWUucmV0dXJuO3Rocm93IHZvaWQgMCE9PWkmJnIoaS5jYWxsKGUpKSx0fX19LCJJOGErIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpLG89bigiSzB4VSIpKCJ0b1N0cmluZ1RhZyIpLGk9IkFyZ3VtZW50cyI9PXIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixhO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1PYmplY3QoZSksbykpP246aT9yKHQpOiJPYmplY3QiPT0oYT1yKHQpKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsbGVlPyJBcmd1bWVudHMiOmF9fSxJdzcxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJkeVpYIikuZG9jdW1lbnQsaT1yKG8pJiZyKG8uY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpP28uY3JlYXRlRWxlbWVudChlKTp7fX19LCJKKzZlIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiSThhKyIpLG89bigiSzB4VSIpKCJpdGVyYXRvciIpLGk9bigiaFBJUSIpO2UuZXhwb3J0cz1uKCJnM2c1IikuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT1lKXJldHVybiBlW29dfHxlWyJAQGl0ZXJhdG9yIl18fGlbcihlKV19fSxKaUVhOmZ1bmN0aW9uKGUsdCl7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LEsweFU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlZUZXIiKSgid2tzIiksbz1uKCJ5bHFzIiksaT1uKCJkeVpYIikuU3ltYm9sLGE9ImZ1bmN0aW9uIj09dHlwZW9mIGk7KGUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcltlXXx8KHJbZV09YSYmaVtlXXx8KGE/aTpvKSgiU3ltYm9sLiIrZSkpfSkuc3RvcmU9cn0sS3JvSjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZHlaWCIpLG89bigiTXVrYiIpLGk9bigiYWFneCIpLGE9bigieWxxcyIpKCJzcmMiKSxjPUZ1bmN0aW9uLnRvU3RyaW5nLHU9KCIiK2MpLnNwbGl0KCJ0b1N0cmluZyIpO24oImczZzUiKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBjLmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sYyl7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIG47cyYmKGkobiwibmFtZSIpfHxvKG4sIm5hbWUiLHQpKSxlW3RdIT09biYmKHMmJihpKG4sYSl8fG8obixhLGVbdF0/IiIrZVt0XTp1LmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1yP2VbdF09bjpjP2VbdF0/ZVt0XT1uOm8oZSx0LG4pOihkZWxldGUgZVt0XSxvKGUsdCxuKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1thXXx8Yy5jYWxsKHRoaXMpfSl9LEt1dGg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKSxvPW4oIkZKVzUiKSxpPW4oIjRSNHUiKSxhPW4oIllUdkEiKSgiSUVfUFJPVE8iKSxjPWZ1bmN0aW9uKCl7fSx1PWZ1bmN0aW9uKCl7dmFyIGUsdD1uKCJJdzcxIikoImlmcmFtZSIpLHI9aS5sZW5ndGg7Zm9yKHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsbigiK3JMdiIpLmFwcGVuZENoaWxkKHQpLHQuc3JjPSJqYXZhc2NyaXB0OiIsKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxlLmNsb3NlKCksdT1lLkY7ci0tOylkZWxldGUgdS5wcm90b3R5cGVbaVtyXV07cmV0dXJuIHUoKX07ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhjLnByb3RvdHlwZT1yKGUpLG49bmV3IGMsYy5wcm90b3R5cGU9bnVsbCxuW2FdPWUpOm49dSgpLHZvaWQgMD09PXQ/bjpvKG4sdCl9fSxMUUFjOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSExfSxMWld0OmZ1bmN0aW9uKGUsdCl7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwoZSkuc2xpY2UoOCwtMSl9fSxNNlFqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoUElRIiksbz1uKCJLMHhVIikoIml0ZXJhdG9yIiksaT1BcnJheS5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiYoci5BcnJheT09PWV8fGlbb109PT1lKX19LE11a2I6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKSxvPW4oIlJqRC8iKTtlLmV4cG9ydHM9bigibmg0ZyIpP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5mKGUsdCxvKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfX0sTjZjSjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiOUFBbiIpLG89bigiWEtGVSIpLGk9bigiVlRlciIpKCJtZXRhZGF0YSIpLGE9aS5zdG9yZXx8KGkuc3RvcmU9bmV3KG4oIkVLMEUiKSkpLGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWEuZ2V0KGUpO2lmKCFvKXtpZighbilyZXR1cm47YS5zZXQoZSxvPW5ldyByKX12YXIgaT1vLmdldCh0KTtpZighaSl7aWYoIW4pcmV0dXJuO28uc2V0KHQsaT1uZXcgcil9cmV0dXJuIGl9O2UuZXhwb3J0cz17c3RvcmU6YSxtYXA6YyxoYXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWModCxuLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXMoZSl9LGdldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9Yyh0LG4sITEpO3JldHVybiB2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldChlKX0sc2V0OmZ1bmN0aW9uKGUsdCxuLHIpe2MobixyLCEwKS5zZXQoZSx0KX0sa2V5czpmdW5jdGlvbihlLHQpe3ZhciBuPWMoZSx0LCExKSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goZnVuY3Rpb24oZSx0KXtyLnB1c2godCl9KSxyfSxrZXk6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV8fCJzeW1ib2wiPT10eXBlb2YgZT9lOlN0cmluZyhlKX0sZXhwOmZ1bmN0aW9uKGUpe28oby5TLCJSZWZsZWN0IixlKX19fSxPUDNZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhYWd4Iiksbz1uKCJTL2ovIiksaT1uKCJZVHZBIikoIklFX1BST1RPIiksYT1PYmplY3QucHJvdG90eXBlO2UuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUpe3JldHVybiBlPW8oZSkscihlLGkpP2VbaV06ImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3ImJmUgaW5zdGFuY2VvZiBlLmNvbnN0cnVjdG9yP2UuY29uc3RydWN0b3IucHJvdG90eXBlOmUgaW5zdGFuY2VvZiBPYmplY3Q/YTpudWxsfX0sT3B4YjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiMk9pRiIpLGE9ci5rZXksYz1yLnNldDtyLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtjKGUsdCwodm9pZCAwIT09cj9vOmkpKG4pLGEocikpfX19KX0sUTNuZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiU2xrWSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO3JldHVybiByKGUsITEsbi5wdXNoLG4sdCksbn19LFFhRGI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJLdXRoIiksbz1uKCJSakQvIiksaT1uKCJmeURxIiksYT17fTtuKCJNdWtiIikoYSxuKCJLMHhVIikoIml0ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZS5wcm90b3R5cGU9cihhLHtuZXh0Om8oMSxuKX0pLGkoZSx0KyIgSXRlcmF0b3IiKX19LFJZaTc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP3I6bikoZSl9fSwiUmpELyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSwiUy9qLyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInZoUFUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyKGUpKX19LFNsa1k6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIm0wUHAiKSxvPW4oIkg2aGYiKSxpPW4oIk02UWoiKSxhPW4oInkzdzkiKSxjPW4oIm5lOGkiKSx1PW4oIkorNmUiKSxzPXt9LGw9e307KHQ9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGYscCl7dmFyIGgsdixkLGcseT1wP2Z1bmN0aW9uKCl7cmV0dXJuIGV9OnUoZSksXz1yKG4sZix0PzI6MSksbT0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB5KXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKGkoeSkpe2ZvcihoPWMoZS5sZW5ndGgpO2g+bTttKyspaWYoKGc9dD9fKGEodj1lW21dKVswXSx2WzFdKTpfKGVbbV0pKT09PXN8fGc9PT1sKXJldHVybiBnfWVsc2UgZm9yKGQ9eS5jYWxsKGUpOyEodj1kLm5leHQoKSkuZG9uZTspaWYoKGc9byhkLF8sdi52YWx1ZSx0KSk9PT1zfHxnPT09bClyZXR1cm4gZ30pLkJSRUFLPXMsdC5SRVRVUk49bH0sVDM5YjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIndtdkciKSxvPW4oInM1cVkiKTtlLmV4cG9ydHM9bigiNExpRCIpKCJTZXQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbihlKXtyZXR1cm4gci5kZWYobyh0aGlzLCJTZXQiKSxlPTA9PT1lPzA6ZSxlKX19LHIpfSxVcWNGOmZ1bmN0aW9uKGUsdCl7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxWVGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJnM2c1Iiksbz1uKCJkeVpYIiksaT1vWyJfX2NvcmUtanNfc2hhcmVkX18iXXx8KG9bIl9fY29yZS1qc19zaGFyZWRfXyJdPXt9KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlbZV18fChpW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOnIudmVyc2lvbixtb2RlOm4oIkxRQWMiKT8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiJceGE5IDIwMTggRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LFhLRlU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKSxvPW4oImczZzUiKSxpPW4oIk11a2IiKSxhPW4oIktyb0oiKSxjPW4oIm0wUHAiKSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcyxsLGYscCxoPWUmdS5GLHY9ZSZ1LkcsZD1lJnUuUCxnPWUmdS5CLHk9dj9yOmUmdS5TP3JbdF18fChyW3RdPXt9KTooclt0XXx8e30pLnByb3RvdHlwZSxfPXY/bzpvW3RdfHwob1t0XT17fSksbT1fLnByb3RvdHlwZXx8KF8ucHJvdG90eXBlPXt9KTtmb3IocyBpbiB2JiYobj10KSxuKWY9KChsPSFoJiZ5JiZ2b2lkIDAhPT15W3NdKT95Om4pW3NdLHA9ZyYmbD9jKGYscik6ZCYmImZ1bmN0aW9uIj09dHlwZW9mIGY/YyhGdW5jdGlvbi5jYWxsLGYpOmYseSYmYSh5LHMsZixlJnUuVSksX1tzXSE9ZiYmaShfLHMscCksZCYmbVtzXSE9ZiYmKG1bc109Zil9O3IuY29yZT1vLHUuRj0xLHUuRz0yLHUuUz00LHUuUD04LHUuQj0xNix1Llc9MzIsdS5VPTY0LHUuUj0xMjgsZS5leHBvcnRzPXV9LFhNVmg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIksweFUiKSgiaXRlcmF0b3IiKSxvPSExO3RyeXt2YXIgaT1bN11bcl0oKTtpLnJldHVybj1mdW5jdGlvbigpe289ITB9LEFycmF5LmZyb20oaSxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT1bN10sYT1pW3JdKCk7YS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19LGlbcl09ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZShpKX1jYXRjaChlKXt9cmV0dXJuIG59fSxYYnppOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJpNWRjIikuc2V0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIGksYT10LmNvbnN0cnVjdG9yO3JldHVybiBhIT09biYmImZ1bmN0aW9uIj09dHlwZW9mIGEmJihpPWEucHJvdG90eXBlKSE9PW4ucHJvdG90eXBlJiZyKGkpJiZvJiZvKGUsaSksZX19LFlUdkE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlZUZXIiKSgia2V5cyIpLG89bigieWxxcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcltlXXx8KHJbZV09byhlKSl9fSxZbXF2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJMWld0Iik7ZS5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09cihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSxaNnZGOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5bHFzIikoIm1ldGEiKSxvPW4oIjAvUjQiKSxpPW4oImFhZ3giKSxhPW4oImhzd2EiKS5mLGM9MCx1PU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHM9IW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiB1KE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksbD1mdW5jdGlvbihlKXthKGUscix7dmFsdWU6e2k6Ik8iKyArK2Msdzp7fX19KX0sZj1lLmV4cG9ydHM9e0tFWTpyLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihlLHQpe2lmKCFvKGUpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOigic3RyaW5nIj09dHlwZW9mIGU/IlMiOiJQIikrZTtpZighaShlLHIpKXtpZighdShlKSlyZXR1cm4iRiI7aWYoIXQpcmV0dXJuIkUiO2woZSl9cmV0dXJuIGVbcl0uaX0sZ2V0V2VhazpmdW5jdGlvbihlLHQpe2lmKCFpKGUscikpe2lmKCF1KGUpKXJldHVybiEwO2lmKCF0KXJldHVybiExO2woZSl9cmV0dXJuIGVbcl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZSl7cmV0dXJuIHMmJmYuTkVFRCYmdShlKSYmIWkoZSxyKSYmbChlKSxlfX19LFpENjc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCIzTHlqIiksbz1uKCJaNnZGIikuZ2V0V2VhayxpPW4oInkzdzkiKSxhPW4oIjAvUjQiKSxjPW4oIjlnWDciKSx1PW4oIlNsa1kiKSxzPW4oIkNra1QiKSxsPW4oImFhZ3giKSxmPW4oInM1cVkiKSxwPXMoNSksaD1zKDYpLHY9MCxkPWZ1bmN0aW9uKGUpe3JldHVybiBlLl9sfHwoZS5fbD1uZXcgZyl9LGc9ZnVuY3Rpb24oKXt0aGlzLmE9W119LHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLmEsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSl9O2cucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9eSh0aGlzLGUpO2lmKHQpcmV0dXJuIHRbMV19LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIXkodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49eSh0aGlzLGUpO24/blsxXT10OnRoaXMuYS5wdXNoKFtlLHRdKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWgodGhpcy5hLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pO3JldHVybn50JiZ0aGlzLmEuc3BsaWNlKHQsMSksISF+dH19LGUuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHM9ZShmdW5jdGlvbihlLHIpe2MoZSxzLHQsIl9pIiksZS5fdD10LGUuX2k9disrLGUuX2w9dm9pZCAwLHZvaWQgMCE9ciYmdShyLG4sZVtpXSxlKX0pO3JldHVybiByKHMucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24oZSl7aWYoIWEoZSkpcmV0dXJuITE7dmFyIG49byhlKTtyZXR1cm4hMD09PW4/ZChmKHRoaXMsdCkpLmRlbGV0ZShlKTpuJiZsKG4sdGhpcy5faSkmJmRlbGV0ZSBuW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24oZSl7aWYoIWEoZSkpcmV0dXJuITE7dmFyIG49byhlKTtyZXR1cm4hMD09PW4/ZChmKHRoaXMsdCkpLmhhcyhlKTpuJiZsKG4sdGhpcy5faSl9fSksc30sZGVmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1vKGkodCksITApO3JldHVybiEwPT09cj9kKGUpLnNldCh0LG4pOnJbZS5faV09bixlfSx1ZnN0b3JlOmR9fSxhQ0ZqOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJZbXF2Iiksbz1uKCJ2aFBVIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByKG8oZSkpfX0sYWFneDpmdW5jdGlvbihlLHQpe3ZhciBuPXt9Lmhhc093blByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0KX19LGFwbVQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighcihlKSlyZXR1cm4gZTt2YXIgbixvO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87aWYoImZ1bmN0aW9uIj09dHlwZW9mKG49ZS52YWx1ZU9mKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCF0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSxjek5LOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiRFZnQSIpLG89bigiSmlFYSIpLGk9bigiVXFjRiIpLGE9bigiUy9qLyIpLGM9bigiWW1xdiIpLHU9T2JqZWN0LmFzc2lnbjtlLmV4cG9ydHM9IXV8fG4oImVlVnEiKShmdW5jdGlvbigpe3ZhciBlPXt9LHQ9e30sbj1TeW1ib2woKSxyPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIGVbbl09NyxyLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZX0pLDchPXUoe30sZSlbbl18fE9iamVjdC5rZXlzKHUoe30sdCkpLmpvaW4oIiIpIT1yfSk/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49YShlKSx1PWFyZ3VtZW50cy5sZW5ndGgscz0xLGw9by5mLGY9aS5mO3U+czspZm9yKHZhciBwLGg9Yyhhcmd1bWVudHNbcysrXSksdj1sP3IoaCkuY29uY2F0KGwoaCkpOnIoaCksZD12Lmxlbmd0aCxnPTA7ZD5nOylmLmNhbGwoaCxwPXZbZysrXSkmJihuW3BdPWhbcF0pO3JldHVybiBufTp1fSwiZC9HYyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlJZaTciKSxvPU1hdGgubWF4LGk9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9cihlKSk8MD9vKGUrdCwwKTppKGUsdCl9fSxkeVpYOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxlZVZxOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSxlbFpxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZHlaWCIpLG89bigiaHN3YSIpLGk9bigibmg0ZyIpLGE9bigiSzB4VSIpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07aSYmdCYmIXRbYV0mJm8uZih0LGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LCJmTi8zIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXlzLGE9ci5rZXk7ci5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gaShvKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6YShhcmd1bWVudHNbMV0pKX19KX0sZnlEcTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaHN3YSIpLmYsbz1uKCJhYWd4IiksaT1uKCJLMHhVIikoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlJiYhbyhlPW4/ZTplLnByb3RvdHlwZSxpKSYmcihlLGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxnM2c1OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPXt2ZXJzaW9uOiIyLjUuNyJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPW4pfSwiaE4vZyI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLnIodCksbigiRlpjcSIpLG4oIjBUV3AiKX0saFBJUTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17fX0saHN3YTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieTN3OSIpLG89bigieHBxbCIpLGk9bigiYXBtVCIpLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1uKCJuaDRnIik/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHQ9aSh0LCEwKSxyKG4pLG8pdHJ5e3JldHVybiBhKGUsdCxuKX1jYXRjaChlKXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEiKTtyZXR1cm4idmFsdWUiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LGk1ZGM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oInkzdzkiKSxpPWZ1bmN0aW9uKGUsdCl7aWYobyhlKSwhcih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKHQrIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSEiKX07ZS5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKGUsdCxyKXt0cnl7KHI9bigibTBQcCIpKEZ1bmN0aW9uLmNhbGwsbigiRWVtSCIpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShlLFtdKSx0PSEoZSBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaChlKXt0PSEwfXJldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBpKGUsbiksdD9lLl9fcHJvdG9fXz1uOnIoZSxuKSxlfX0oe30sITEpOnZvaWQgMCksY2hlY2s6aX19LCJpVytTIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiT1AzWSIpLGE9ci5oYXMsYz1yLmtleSx1PWZ1bmN0aW9uKGUsdCxuKXtpZihhKGUsdCxuKSlyZXR1cm4hMDt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09ciYmdShlLHIsbil9O3IuZXhwKHtoYXNNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKSl9fSl9LG0wUHA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjJPaUYiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdm9pZCAwPT09dClyZXR1cm4gZTtzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGUuY2FsbCh0LG4scixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LG5lOGk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlJZaTciKSxvPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP28ocihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sbmg0ZzpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxzNXFZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSl8fGUuX3QhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3QrIiByZXF1aXJlZCEiKTtyZXR1cm4gZX19LHVBdGQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlQzOWIiKSxvPW4oIlEzbmUiKSxpPW4oIk42Y0oiKSxhPW4oInkzdzkiKSxjPW4oIk9QM1kiKSx1PWkua2V5cyxzPWkua2V5LGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj11KGUsdCksaT1jKGUpO2lmKG51bGw9PT1pKXJldHVybiBuO3ZhciBhPWwoaSx0KTtyZXR1cm4gYS5sZW5ndGg/bi5sZW5ndGg/byhuZXcgcihuLmNvbmNhdChhKSkpOmE6bn07aS5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gbChhKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6cyhhcmd1bWVudHNbMV0pKX19KX0sdmhQVTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PWUpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIitlKTtyZXR1cm4gZX19LHcyYTU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImFDRmoiKSxvPW4oIm5lOGkiKSxpPW4oImQvR2MiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXt2YXIgYyx1PXIodCkscz1vKHUubGVuZ3RoKSxsPWkoYSxzKTtpZihlJiZuIT1uKXtmb3IoO3M+bDspaWYoKGM9dVtsKytdKSE9YylyZXR1cm4hMH1lbHNlIGZvcig7cz5sO2wrKylpZigoZXx8bCBpbiB1KSYmdVtsXT09PW4pcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX19LHdtdkc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJoc3dhIikuZixvPW4oIkt1dGgiKSxpPW4oIjNMeWoiKSxhPW4oIm0wUHAiKSxjPW4oIjlnWDciKSx1PW4oIlNsa1kiKSxzPW4oIkFmbnoiKSxsPW4oIjFUc0EiKSxmPW4oImVsWnEiKSxwPW4oIm5oNGciKSxoPW4oIlo2dkYiKS5mYXN0S2V5LHY9bigiczVxWSIpLGQ9cD8iX3MiOiJzaXplIixnPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1oKHQpO2lmKCJGIiE9PXIpcmV0dXJuIGUuX2lbcl07Zm9yKG49ZS5fZjtuO249bi5uKWlmKG4uaz09dClyZXR1cm4gbn07ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixzKXt2YXIgbD1lKGZ1bmN0aW9uKGUscil7YyhlLGwsdCwiX2kiKSxlLl90PXQsZS5faT1vKG51bGwpLGUuX2Y9dm9pZCAwLGUuX2w9dm9pZCAwLGVbZF09MCx2b2lkIDAhPXImJnUocixuLGVbc10sZSl9KTtyZXR1cm4gaShsLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dih0aGlzLHQpLG49ZS5faSxyPWUuX2Y7cjtyPXIubilyLnI9ITAsci5wJiYoci5wPXIucC5uPXZvaWQgMCksZGVsZXRlIG5bci5pXTtlLl9mPWUuX2w9dm9pZCAwLGVbZF09MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciBuPXYodGhpcyx0KSxyPWcobixlKTtpZihyKXt2YXIgbz1yLm4saT1yLnA7ZGVsZXRlIG4uX2lbci5pXSxyLnI9ITAsaSYmKGkubj1vKSxvJiYoby5wPWkpLG4uX2Y9PXImJihuLl9mPW8pLG4uX2w9PXImJihuLl9sPWkpLG5bZF0tLX1yZXR1cm4hIXJ9LGZvckVhY2g6ZnVuY3Rpb24oZSl7dih0aGlzLHQpO2Zvcih2YXIgbixyPWEoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtuPW4/bi5uOnRoaXMuX2Y7KWZvcihyKG4udixuLmssdGhpcyk7biYmbi5yOyluPW4ucH0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhZyh2KHRoaXMsdCksZSl9fSkscCYmcihsLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMsdClbZF19fSksbH0sZGVmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGk9ZyhlLHQpO3JldHVybiBpP2kudj1uOihlLl9sPWk9e2k6bz1oKHQsITApLGs6dCx2Om4scDpyPWUuX2wsbjp2b2lkIDAscjohMX0sZS5fZnx8KGUuX2Y9aSksciYmKHIubj1pKSxlW2RdKyssIkYiIT09byYmKGUuX2lbb109aSkpLGV9LGdldEVudHJ5Omcsc2V0U3Ryb25nOmZ1bmN0aW9uKGUsdCxuKXtzKGUsdCxmdW5jdGlvbihlLG4pe3RoaXMuX3Q9dihlLHQpLHRoaXMuX2s9bix0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fayx0PXRoaXMuX2w7dCYmdC5yOyl0PXQucDtyZXR1cm4gdGhpcy5fdCYmKHRoaXMuX2w9dD10P3Qubjp0aGlzLl90Ll9mKT9sKDAsImtleXMiPT1lP3QuazoidmFsdWVzIj09ZT90LnY6W3Quayx0LnZdKToodGhpcy5fdD12b2lkIDAsbCgxKSl9LG4/ImVudHJpZXMiOiJ2YWx1ZXMiLCFuLCEwKSxmKHQpfX19LHhwcWw6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigibmg0ZyIpJiYhbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKCJJdzcxIikoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSx5M3c5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFyKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGFuIG9iamVjdCEiKTtyZXR1cm4gZX19LHlscXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9TWF0aC5yYW5kb20oKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1lPyIiOmUsIilfIiwoKytuK3IpLnRvU3RyaW5nKDM2KSl9fSx6UndvOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCI2Rk1PIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhyKGUpKSh0KX19LHpoQWI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImFhZ3giKSxvPW4oImFDRmoiKSxpPW4oIncyYTUiKSghMSksYT1uKCJZVHZBIikoIklFX1BST1RPIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sYz1vKGUpLHU9MCxzPVtdO2ZvcihuIGluIGMpbiE9YSYmcihjLG4pJiZzLnB1c2gobik7Zm9yKDt0Lmxlbmd0aD51OylyKGMsbj10W3UrK10pJiYofmkocyxuKXx8cy5wdXNoKG4pKTtyZXR1cm4gc319LCJ6cStDIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXksYT1yLm1hcCxjPXIuc3RvcmU7ci5leHAoe2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDppKGFyZ3VtZW50c1syXSkscj1hKG8odCksbiwhMSk7aWYodm9pZCAwPT09cnx8IXIuZGVsZXRlKGUpKXJldHVybiExO2lmKHIuc2l6ZSlyZXR1cm4hMDt2YXIgdT1jLmdldCh0KTtyZXR1cm4gdS5kZWxldGUobiksISF1LnNpemV8fGMuZGVsZXRlKHQpfX0pfX0sW1szLDNdXV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1wb2x5ZmlsbHMuanMubWFwKHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s2XSx7Iit0SjQiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHImJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY2xvc2VkfHxlLmNvbXBsZXRlKCl9fX0sIit1bUsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe31uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSwiL1dZdiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdC5zdWJzY3JpYmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIjAvUTYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB2fSk7dmFyIHI9bigibXJTRyIpLGk9bigiQ2NuRyIpLG89bigiV2Y0cCIpLGE9bigibExBUCIpLHM9bigibjZnRyIpLHU9bigiWWxiUSIpLGw9bigiWVNoMiIpLGM9KG4oImdJY1kiKSxuKCJwdWdUIikpLGY9T2JqZWN0KG8udikoZnVuY3Rpb24oKXt9KSxoPU9iamVjdChvLnYpKGZ1bmN0aW9uKCl7fSksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShmKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGYpLG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZWxlbWVudD1lLHIuX25hdkxpc3Q9bixyLl9pc05hdkxpc3Q9ITEsci5faXNOYXZMaXN0PSEhbixyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe25ldyBvLmoodGhpcy5fbGluZXMsdGhpcy5fZWxlbWVudCl9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2lzTmF2TGlzdHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLl9uYXZMaXN0LmRpc2FibGVSaXBwbGV9LGUucHJvdG90eXBlLl9oYW5kbGVGb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9oYW5kbGVCbHVyPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1saXN0LWl0ZW0tZm9jdXMiKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sZX0oaCkseT1PYmplY3Qoby52KShPYmplY3Qoby53KShmdW5jdGlvbigpe30pKSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fZWxlbWVudD1lLGkuX2NoYW5nZURldGVjdG9yPW4saS5zZWxlY3Rpb25MaXN0PXIsaS5fc2VsZWN0ZWQ9ITEsaS5fZGlzYWJsZWQ9ITEsaS5faGFzRm9jdXM9ITEsaS5jaGVja2JveFBvc2l0aW9uPSJhZnRlciIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLnNlbGVjdGlvbkxpc3QmJnRoaXMuc2VsZWN0aW9uTGlzdC5kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLmIpKHQpO2UhPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2VsZWN0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5pc1NlbGVjdGVkKHRoaXMpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHMuYikodCk7ZSE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2V0U2VsZWN0ZWQoZSksdGhpcy5zZWxlY3Rpb25MaXN0Ll9yZXBvcnRWYWx1ZUNoYW5nZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9zZWxlY3RlZDtQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7KHQuX3NlbGVjdGVkfHxlKSYmKHQuc2VsZWN0ZWQ9ITAsdC5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSl9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe25ldyBvLmoodGhpcy5fbGluZXMsdGhpcy5fZWxlbWVudCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnNlbGVjdGVkJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0ZWQ9ITF9KSx0aGlzLnNlbGVjdGlvbkxpc3QuX3JlbW92ZU9wdGlvbkZyb21MaXN0KHRoaXMpfSxlLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPSF0aGlzLnNlbGVjdGVkfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfSxlLnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXh0P3RoaXMuX3RleHQubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDoiIn0sZS5wcm90b3R5cGUuX2lzUmlwcGxlRGlzYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLnNlbGVjdGlvbkxpc3QuZGlzYWJsZVJpcHBsZX0sZS5wcm90b3R5cGUuX2hhbmRsZUNsaWNrPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMudG9nZ2xlKCksdGhpcy5zZWxlY3Rpb25MaXN0Ll9lbWl0Q2hhbmdlRXZlbnQodGhpcykpfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9oYXNGb2N1cz0hMCx0aGlzLnNlbGVjdGlvbkxpc3QuX3NldEZvY3VzZWRPcHRpb24odGhpcyl9LGUucHJvdG90eXBlLl9oYW5kbGVCbHVyPWZ1bmN0aW9uKCl7dGhpcy5faGFzRm9jdXM9ITEsdGhpcy5zZWxlY3Rpb25MaXN0Ll9vblRvdWNoZWQoKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sZS5wcm90b3R5cGUuX3NldFNlbGVjdGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD10LHQ/dGhpcy5zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5zZWxlY3QodGhpcyk6dGhpcy5zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5kZXNlbGVjdCh0aGlzKSx0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSwhMCl9LGV9KE9iamVjdChvLnYpKGZ1bmN0aW9uKCl7fSkpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZWxlbWVudD1lLHIuc2VsZWN0aW9uQ2hhbmdlPW5ldyBpLm0sci50YWJJbmRleD0wLHIuc2VsZWN0ZWRPcHRpb25zPW5ldyB1LmEoITApLHIuX29uQ2hhbmdlPWZ1bmN0aW9uKHQpe30sci5fbW9kZWxDaGFuZ2VzPWMuYS5FTVBUWSxyLl9vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9LHIudGFiSW5kZXg9cGFyc2VJbnQobil8fDAscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBhLmEodGhpcy5vcHRpb25zKS53aXRoV3JhcCgpLndpdGhUeXBlQWhlYWQoKS5za2lwUHJlZGljYXRlKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSx0aGlzLl90ZW1wVmFsdWVzJiYodGhpcy5fc2V0T3B0aW9uc0Zyb21WYWx1ZXModGhpcy5fdGVtcFZhbHVlcyksdGhpcy5fdGVtcFZhbHVlcz1udWxsKSx0aGlzLl9tb2RlbENoYW5nZXM9dGhpcy5zZWxlY3RlZE9wdGlvbnMub25DaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2lmKHQuYWRkZWQpZm9yKHZhciBlPTAsbj10LmFkZGVkO2U8bi5sZW5ndGg7ZSsrKW5bZV0uc2VsZWN0ZWQ9ITA7aWYodC5yZW1vdmVkKWZvcih2YXIgcj0wLGk9dC5yZW1vdmVkO3I8aS5sZW5ndGg7cisrKWlbcl0uc2VsZWN0ZWQ9ITF9KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9tb2RlbENoYW5nZXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0sZS5wcm90b3R5cGUuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKCEwKX0sZS5wcm90b3R5cGUuZGVzZWxlY3RBbGw9ZnVuY3Rpb24oKXt0aGlzLl9zZXRBbGxPcHRpb25zU2VsZWN0ZWQoITEpfSxlLnByb3RvdHlwZS5fc2V0Rm9jdXNlZE9wdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW1JbmRleCh0aGlzLl9nZXRPcHRpb25JbmRleCh0KSl9LGUucHJvdG90eXBlLl9yZW1vdmVPcHRpb25Gcm9tTGlzdD1mdW5jdGlvbih0KXtpZih0Ll9oYXNGb2N1cyl7dmFyIGU9dGhpcy5fZ2V0T3B0aW9uSW5kZXgodCk7ZT4wP3RoaXMuX2tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6MD09PWUmJnRoaXMub3B0aW9ucy5sZW5ndGg+MSYmdGhpcy5fa2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpfX0sZS5wcm90b3R5cGUuX2tleWRvd249ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlLG49dGhpcy5fa2V5TWFuYWdlcixyPW4uYWN0aXZlSXRlbUluZGV4O3N3aXRjaChlKXtjYXNlIGwuajpjYXNlIGwuZDp0aGlzLmRpc2FibGVkfHwodGhpcy5fdG9nZ2xlU2VsZWN0T25Gb2N1c2VkT3B0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztjYXNlIGwuZjpjYXNlIGwuYzplPT09bC5mP24uc2V0Rmlyc3RJdGVtQWN0aXZlKCk6bi5zZXRMYXN0SXRlbUFjdGl2ZSgpLHQucHJldmVudERlZmF1bHQoKTticmVhaztkZWZhdWx0Om4ub25LZXlkb3duKHQpfWUhPT1sLmwmJmUhPT1sLmJ8fCF0LnNoaWZ0S2V5fHxuLmFjdGl2ZUl0ZW1JbmRleD09PXJ8fHRoaXMuX3RvZ2dsZVNlbGVjdE9uRm9jdXNlZE9wdGlvbigpfSxlLnByb3RvdHlwZS5fcmVwb3J0VmFsdWVDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJnRoaXMuX29uQ2hhbmdlKHRoaXMuX2dldFNlbGVjdGVkT3B0aW9uVmFsdWVzKCkpfSxlLnByb3RvdHlwZS5fZW1pdENoYW5nZUV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV3IGZ1bmN0aW9uKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfSh0aGlzLHQpKX0sZS5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM/dGhpcy5fc2V0T3B0aW9uc0Zyb21WYWx1ZXModHx8W10pOnRoaXMuX3RlbXBWYWx1ZXM9dH0sZS5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPXR9KX0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9vbkNoYW5nZT10fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLl9vblRvdWNoZWQ9dH0sZS5wcm90b3R5cGUuX3NldE9wdGlvbnNGcm9tVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuX3NldFNlbGVjdGVkKCExKX0pLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLm9wdGlvbnMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gZS5jb21wYXJlV2l0aD9lLmNvbXBhcmVXaXRoKG4udmFsdWUsdCk6bi52YWx1ZT09PXR9KX0pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9zZXRTZWxlY3RlZCghMCl9KX0sZS5wcm90b3R5cGUuX2dldFNlbGVjdGVkT3B0aW9uVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0ZWR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KX0sZS5wcm90b3R5cGUuX3RvZ2dsZVNlbGVjdE9uRm9jdXNlZE9wdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O2lmKG51bGwhPXQmJnRoaXMuX2lzVmFsaWRJbmRleCh0KSl7dmFyIGU9dGhpcy5vcHRpb25zLnRvQXJyYXkoKVt0XTtlJiYoZS50b2dnbGUoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoZSkpfX0sZS5wcm90b3R5cGUuX3NldEFsbE9wdGlvbnNTZWxlY3RlZD1mdW5jdGlvbih0KXt2YXIgZT0hMTt0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLl9zZXRTZWxlY3RlZCh0KSYmKGU9ITApfSksZSYmdGhpcy5fcmVwb3J0VmFsdWVDaGFuZ2UoKX0sZS5wcm90b3R5cGUuX2lzVmFsaWRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MCYmdDx0aGlzLm9wdGlvbnMubGVuZ3RofSxlLnByb3RvdHlwZS5fZ2V0T3B0aW9uSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy50b0FycmF5KCkuaW5kZXhPZih0KX0sZX0oeSksYj1mdW5jdGlvbigpe319LCIwL3VRIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIjZibEYiKSxpPW4oIi9XWXYiKSxvPW4oIjJlUGwiKSxhPW4oInhUbGEiKSxzPW4oIkVuOCsiKSx1PW4oIklVVGIiKSxsPW4oInB1Z1QiKSxjPW4oIlM1WFEiKSxmPW4oInU2N0QiKSxoPW4oIkpjUnYiKSxkPW4oIkZ4YjEiKTtmdW5jdGlvbiBwKHQsZSl7aWYoIWUpcmV0dXJuIHQgaW5zdGFuY2VvZiByLmE/dDpuZXcgci5hKE9iamVjdChkLmEpKHQpKTtpZihudWxsIT10KXtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbYS5hXX0odCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcj1uZXcgbC5hO3JldHVybiByLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7dmFyIGk9dFthLmFdKCk7ci5hZGQoaS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLm5leHQodCl9KSl9LGVycm9yOmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5lcnJvcih0KX0pKX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcGxldGUoKX0pKX19KSl9KSkscn06T2JqZWN0KGguYSkodCkpfSh0LGUpO2lmKE9iamVjdChpLmEpKHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IGwuYTtyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiB0LnRoZW4oZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe24ubmV4dCh0KSxyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcGxldGUoKX0pKX0pKX0sZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKHQpfSkpfSl9KSkscn06T2JqZWN0KGMuYSkodCkpfSh0LGUpO2lmKE9iamVjdChvLmEpKHQpKXJldHVybiBPYmplY3QodS5hKSh0LGUpO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtzLmFdfSh0KXx8InN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IHIuYShlP2Z1bmN0aW9uKG4pe3ZhciByLGk9bmV3IGwuYTtyZXR1cm4gaS5hZGQoZnVuY3Rpb24oKXtyJiYiZnVuY3Rpb24iPT10eXBlb2Ygci5yZXR1cm4mJnIucmV0dXJuKCl9KSxpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cj10W3MuYV0oKSxpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7aWYoIW4uY2xvc2VkKXt2YXIgdCxlO3RyeXt2YXIgaT1yLm5leHQoKTt0PWkudmFsdWUsZT1pLmRvbmV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgbi5lcnJvcih0KX1lP24uY29tcGxldGUoKToobi5uZXh0KHQpLHRoaXMuc2NoZWR1bGUoKSl9fSkpfSkpLGl9Ok9iamVjdChmLmEpKHQpKX0odCxlKX10aHJvdyBuZXcgVHlwZUVycm9yKChudWxsIT09dCYmdHlwZW9mIHR8fHQpKyIgaXMgbm90IG9ic2VydmFibGUiKX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pfSwiMjFMYiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1uKCJPemZCIiksbz1uKCJLOUlhIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9ZSxyLndvcms9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxuPjA/dC5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLGUsbik6KHRoaXMuZGVsYXk9bix0aGlzLnN0YXRlPWUsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj4wfHx0aGlzLmNsb3NlZD90LnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcyxlLG4pOnRoaXMuX2V4ZWN1dGUoZSxuKX0sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSxudWxsIT09ciYmcj4wfHxudWxsPT09ciYmdGhpcy5kZWxheT4wP3QucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcyxlLG4scik6ZS5mbHVzaCh0aGlzKX0sZX0obigiaDlEcSIpLmEpLHM9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLmIoZSx0KSxlfShuKCJDUzlRIikuYSkpKGEpLHU9bigicHVnVCIpLGw9bigiRkZPbyIpLGM9bigiNjBpVSIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ciYmKHI9MCk7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPW4saS5kZWxheT1yLGl9cmV0dXJuIHIuYihlLHQpLGUuZGlzcGF0Y2g9ZnVuY3Rpb24odCl7dC5ub3RpZmljYXRpb24ub2JzZXJ2ZSh0LmRlc3RpbmF0aW9uKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLnNjaGVkdWxlTWVzc2FnZT1mdW5jdGlvbih0KXt0aGlzLmFkZCh0aGlzLnNjaGVkdWxlci5zY2hlZHVsZShlLmRpc3BhdGNoLHRoaXMuZGVsYXksbmV3IGgodCx0aGlzLmRlc3RpbmF0aW9uKSkpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShjLmEuY3JlYXRlTmV4dCh0KSl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShjLmEuY3JlYXRlRXJyb3IodCkpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnNjaGVkdWxlTWVzc2FnZShjLmEuY3JlYXRlQ29tcGxldGUoKSl9LGV9KGwuYSksaD1mdW5jdGlvbih0LGUpe3RoaXMubm90aWZpY2F0aW9uPXQsdGhpcy5kZXN0aW5hdGlvbj1lfSxkPW4oIjhnOEEiKSxwPW4oInVNYU8iKSxtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PWUmJihlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksdm9pZCAwPT09biYmKG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPXIsaS5fZXZlbnRzPVtdLGkuX2luZmluaXRlVGltZVdpbmRvdz0hMSxpLl9idWZmZXJTaXplPWU8MT8xOmUsaS5fd2luZG93VGltZT1uPDE/MTpuLG49PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk/KGkuX2luZmluaXRlVGltZVdpbmRvdz0hMCxpLm5leHQ9aS5uZXh0SW5maW5pdGVUaW1lV2luZG93KTppLm5leHQ9aS5uZXh0VGltZVdpbmRvdyxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0SW5maW5pdGVUaW1lV2luZG93PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMuX2V2ZW50cztuLnB1c2goZSksbi5sZW5ndGg+dGhpcy5fYnVmZmVyU2l6ZSYmbi5zaGlmdCgpLHQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5uZXh0VGltZVdpbmRvdz1mdW5jdGlvbihlKXt0aGlzLl9ldmVudHMucHVzaChuZXcgeSh0aGlzLl9nZXROb3coKSxlKSksdGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSx0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuX2luZmluaXRlVGltZVdpbmRvdyxyPW4/dGhpcy5fZXZlbnRzOnRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksaT10aGlzLnNjaGVkdWxlcixvPXIubGVuZ3RoO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBkLmE7aWYodGhpcy5pc1N0b3BwZWR8fHRoaXMuaGFzRXJyb3I/ZT11LmEuRU1QVFk6KHRoaXMub2JzZXJ2ZXJzLnB1c2godCksZT1uZXcgcC5hKHRoaXMsdCkpLGkmJnQuYWRkKHQ9bmV3IGYodCxpKSksbilmb3IodmFyIGE9MDthPG8mJiF0LmNsb3NlZDthKyspdC5uZXh0KHJbYV0pO2Vsc2UgZm9yKGE9MDthPG8mJiF0LmNsb3NlZDthKyspdC5uZXh0KHJbYV0udmFsdWUpO3JldHVybiB0aGlzLmhhc0Vycm9yP3QuZXJyb3IodGhpcy50aHJvd25FcnJvcik6dGhpcy5pc1N0b3BwZWQmJnQuY29tcGxldGUoKSxlfSxlLnByb3RvdHlwZS5fZ2V0Tm93PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuc2NoZWR1bGVyfHxzKS5ub3coKX0sZS5wcm90b3R5cGUuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dldE5vdygpLGU9dGhpcy5fYnVmZmVyU2l6ZSxuPXRoaXMuX3dpbmRvd1RpbWUscj10aGlzLl9ldmVudHMsaT1yLmxlbmd0aCxvPTA7bzxpJiYhKHQtcltvXS50aW1lPG4pOylvKys7cmV0dXJuIGk+ZSYmKG89TWF0aC5tYXgobyxpLWUpKSxvPjAmJnIuc3BsaWNlKDAsbykscn0sZX0oby5hKSx5PWZ1bmN0aW9uKHQsZSl7dGhpcy50aW1lPXQsdGhpcy52YWx1ZT1lfTtuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gSX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KTt2YXIgZz0iaW5saW5lIix2PVsicm93IiwiY29sdW1uIiwicm93LXJldmVyc2UiLCJjb2x1bW4tcmV2ZXJzZSJdO2Z1bmN0aW9uIGIodCl7dmFyIGU9KHQ9dD90LnRvTG93ZXJDYXNlKCk6IiIpLnNwbGl0KCIgIiksbj1lWzBdLHI9ZVsxXSxpPWVbMl07cmV0dXJuIHYuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PW59KXx8KG49dlswXSkscj09PWcmJihyPWkhPT1nP2k6IiIsaT1nKSxbbixmdW5jdGlvbih0KXtpZih0KXN3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2UicmV2ZXJzZSI6Y2FzZSJ3cmFwLXJldmVyc2UiOmNhc2UicmV2ZXJzZS13cmFwIjp0PSJ3cmFwLXJldmVyc2UiO2JyZWFrO2Nhc2Uibm8iOmNhc2Uibm9uZSI6Y2FzZSJub3dyYXAiOnQ9Im5vd3JhcCI7YnJlYWs7ZGVmYXVsdDp0PSJ3cmFwIn1yZXR1cm4gdH0ociksISFpXX1mdW5jdGlvbiBfKHQpe3JldHVybiBiKHQpWzBdLmluZGV4T2YoInJvdyIpPi0xfXZhciB3PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5fYW5ub3VuY2VyPW5ldyBtKDEpLGkubGF5b3V0JD1pLl9hbm5vdW5jZXIuYXNPYnNlcnZhYmxlKCksaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQubGF5b3V0fHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoRGlyZWN0aW9uKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJsYXlvdXQiLCJyb3ciLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhEaXJlY3Rpb24odC52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoRGlyZWN0aW9uKCl9LGUucHJvdG90eXBlLl91cGRhdGVXaXRoRGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgibGF5b3V0Iil8fCJyb3ciLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KTt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1iKHQpO3JldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPSExKSx7ZGlzcGxheTpyPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjplWzBdLCJmbGV4LXdyYXAiOm58fG51bGx9fSgwLGVbMV0sZVsyXSl9KHR8fCIiKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KGUpLHRoaXMuX2Fubm91bmNlci5uZXh0KHtkaXJlY3Rpb246ZVsiZmxleC1kaXJlY3Rpb24iXSx3cmFwOiEhZVsiZmxleC13cmFwIl0mJiJub3dyYXAiIT09ZVsiZmxleC13cmFwIl19KX0sZX0oaS5iKSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEpe3ZhciBzPXQuY2FsbCh0aGlzLGUsbixhKXx8dGhpcztyZXR1cm4gcy5fem9uZT1pLHMuX2RpcmVjdGlvbmFsaXR5PW8scy5fbGF5b3V0PSJyb3ciLHImJihzLl9sYXlvdXRXYXRjaGVyPXIubGF5b3V0JC5zdWJzY3JpYmUocy5fb25MYXlvdXRDaGFuZ2UuYmluZChzKSkpLHMuX2RpcmVjdGlvbldhdGNoZXI9cy5fZGlyZWN0aW9uYWxpdHkuY2hhbmdlLnN1YnNjcmliZShzLl91cGRhdGVXaXRoVmFsdWUuYmluZChzKSksc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXAiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwU20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZ2FwfHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl93YXRjaENvbnRlbnRDaGFuZ2VzKCksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImdhcCIsIjAiLGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZVdpdGhWYWx1ZShlLnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpLHRoaXMuX29ic2VydmVyJiZ0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fZGlyZWN0aW9uV2F0Y2hlciYmdGhpcy5fZGlyZWN0aW9uV2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fd2F0Y2hDb250ZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgTXV0YXRpb25PYnNlcnZlciYmKHQuX29ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2Uuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRlZE5vZGVzJiZ0LmFkZGVkTm9kZXMubGVuZ3RoPjB8fHQucmVtb3ZlZE5vZGVzJiZ0LnJlbW92ZWROb2Rlcy5sZW5ndGg+MH0pJiZ0Ll91cGRhdGVXaXRoVmFsdWUoKX0pLHQuX29ic2VydmVyLm9ic2VydmUodC5uYXRpdmVFbGVtZW50LHtjaGlsZExpc3Q6ITB9KSl9KX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksdi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5fbGF5b3V0fSl8fCh0aGlzLl9sYXlvdXQ9InJvdyIpLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10fHx0aGlzLl9xdWVyeUlucHV0KCJnYXAiKXx8IjAiO3RoaXMuX21xQWN0aXZhdGlvbiYmKG49dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KTt2YXIgcj10aGlzLmNoaWxkcmVuTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5ub2RlVHlwZSYmIm5vbmUiIT1lLl9nZXREaXNwbGF5U3R5bGUodCl9KS5zb3J0KGZ1bmN0aW9uKHQsbil7dmFyIHI9K2UuX3N0eWxlci5sb29rdXBTdHlsZSh0LCJvcmRlciIpLGk9K2UuX3N0eWxlci5sb29rdXBTdHlsZShuLCJvcmRlciIpO3JldHVybiBpc05hTihyKXx8aXNOYU4oaSl8fHI9PT1pPzA6cj5pPzE6LTF9KTtpZihyLmxlbmd0aD4wKWlmKG4uZW5kc1dpdGgoTykpbj1uLnN1YnN0cmluZygwLG4uaW5kZXhPZihPKSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRHcmlkUGFkZGluZyhuKSxyKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkR3JpZE1hcmdpbihuKSk7ZWxzZXt2YXIgaT1yLnBvcCgpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKG4pLHIpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKCksW2ldKX19LGUucHJvdG90eXBlLl9idWlsZEdyaWRQYWRkaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPSIwcHgiLG49IjBweCI7cmV0dXJuInJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT9uPXQ6ZT10LHtwYWRkaW5nOiIwcHggIitlKyIgIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkR3JpZE1hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj0iLSIrdDplPSItIit0LHttYXJnaW46IjBweCAiK2UrIiAtIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkQ1NTPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PW51bGwpO3ZhciBlLG49eyJtYXJnaW4tbGVmdCI6bnVsbCwibWFyZ2luLXJpZ2h0IjpudWxsLCJtYXJnaW4tdG9wIjpudWxsLCJtYXJnaW4tYm90dG9tIjpudWxsfTtzd2l0Y2godGhpcy5fbGF5b3V0KXtjYXNlImNvbHVtbiI6ZT0ibWFyZ2luLWJvdHRvbSI7YnJlYWs7Y2FzZSJjb2x1bW4tcmV2ZXJzZSI6ZT0ibWFyZ2luLXRvcCI7YnJlYWs7Y2FzZSJyb3ciOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQiO2JyZWFrO2Nhc2Uicm93LXJldmVyc2UiOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLXJpZ2h0IjoibWFyZ2luLWxlZnQiO2JyZWFrO2RlZmF1bHQ6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tbGVmdCI6Im1hcmdpbi1yaWdodCJ9cmV0dXJuIG5bZV09dCxufSxlfShpLmIpLE89IiBncmlkIjtmdW5jdGlvbiBDKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIHI9MCxpPWU7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl07aWYobnVsbCE9bylmb3IodmFyIGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYodFthXT1vW2FdKX1yZXR1cm4gdH12YXIgUz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyl7dmFyIGE9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiBhLl9jb250YWluZXI9cixhLnN0eWxlVXRpbHM9aSxhLmxheW91dENvbmZpZz1vLGEuX2NhY2hlSW5wdXQoImZsZXgiLCIiKSxhLl9jYWNoZUlucHV0KCJzaHJpbmsiLDEpLGEuX2NhY2hlSW5wdXQoImdyb3ciLDEpLHImJihhLl9sYXlvdXRXYXRjaGVyPXIubGF5b3V0JC5zdWJzY3JpYmUoZnVuY3Rpb24odCl7YS5fb25MYXlvdXRDaGFuZ2UodCl9KSksYX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNocmluayIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJzaHJpbmsiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ3JvdyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJncm93Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXgiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmZsZXh8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVN0eWxlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJmbGV4IiwiIixmdW5jdGlvbih0KXtlLl91cGRhdGVTdHlsZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVN0eWxlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9sYXlvdXRXYXRjaGVyJiZ0aGlzLl9sYXlvdXRXYXRjaGVyLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9vbkxheW91dENoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9sYXlvdXQ9dHx8dGhpcy5fbGF5b3V0fHx7ZGlyZWN0aW9uOiJyb3ciLHdyYXA6ITF9LHRoaXMuX3VwZGF0ZVN0eWxlKCl9LGUucHJvdG90eXBlLl91cGRhdGVTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT10fHx0aGlzLl9xdWVyeUlucHV0KCJmbGV4Iil8fCIiO3RoaXMuX21xQWN0aXZhdGlvbiYmKGU9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KTt2YXIgbj1TdHJpbmcoZSkucmVwbGFjZSgiOyIsIiIpLHI9T2JqZWN0KGkubykobix0aGlzLl9xdWVyeUlucHV0KCJncm93IiksdGhpcy5fcXVlcnlJbnB1dCgic2hyaW5rIikpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQodGhpcy5fdmFsaWRhdGVWYWx1ZS5hcHBseSh0aGlzLHIpKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlVmFsdWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX2dldEZsZXhGbG93RGlyZWN0aW9uKHRoaXMucGFyZW50RWxlbWVudCx0aGlzLmxheW91dENvbmZpZy5hZGRGbGV4VG9QYXJlbnQpLmluZGV4T2YoImNvbHVtbiIpPi0xPyJjb2x1bW4iOiJyb3ciLGk9XyhyKT8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCIsbz1fKHIpPyJtaW4td2lkdGgiOiJtaW4taGVpZ2h0IixhPVN0cmluZyhuKS5pbmRleE9mKCJjYWxjIik+LTEscz1hfHwiYXV0byI9PW4sdT1TdHJpbmcobikuaW5kZXhPZigiJSIpPi0xJiYhYSxsPVN0cmluZyhuKS5pbmRleE9mKCJweCIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigiZW0iKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoInZ3Iik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJ2aCIpPi0xLGM9U3RyaW5nKG4pLmluZGV4T2YoInB4Iik+LTF8fHMsZj1hfHxsO3Q9IjAiPT10PzA6dCxlPSIwIj09ZT8wOmU7dmFyIGg9IXQmJiFlLGQ9e30scD17Im1heC13aWR0aCI6bnVsbCwibWF4LWhlaWdodCI6bnVsbCwibWluLXdpZHRoIjpudWxsLCJtaW4taGVpZ2h0IjpudWxsfTtzd2l0Y2gobnx8IiIpe2Nhc2UiIjpuPSJyb3ciPT09cj8iMCUiOnRoaXMubGF5b3V0Q29uZmlnLnVzZUNvbHVtbkJhc2lzWmVybz8iMC4wMDAwMDAwMDFweCI6ImF1dG8iO2JyZWFrO2Nhc2UiaW5pdGlhbCI6Y2FzZSJub2dyb3ciOnQ9MCxuPSJhdXRvIjticmVhaztjYXNlImdyb3ciOm49IjEwMCUiO2JyZWFrO2Nhc2Uibm9zaHJpbmsiOmU9MCxuPSJhdXRvIjticmVhaztjYXNlImF1dG8iOmJyZWFrO2Nhc2Uibm9uZSI6dD0wLGU9MCxuPSJhdXRvIjticmVhaztkZWZhdWx0OmZ8fHV8fGlzTmFOKG4pfHwobis9IiUiKSwiMCUiPT09biYmKGY9ITApLCIwcHgiPT09biYmKG49IjAlIiksZD1DKHAsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOmY/bjoiMTAwJSJ9OntmbGV4OnQrIiAiK2UrIiAiKyhmP246IjEwMCUiKX0pfXJldHVybiBkLmZsZXh8fGRbImZsZXgtZ3JvdyJdfHwoZD1DKHAsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSksIjAlIiE9PW4mJiIwcHgiIT09biYmIjAuMDAwMDAwMDAxcHgiIT09biYmImF1dG8iIT09biYmKGRbb109aHx8YyYmdD9uOm51bGwsZFtpXT1ofHwhcyYmZT9uOm51bGwpLGRbb118fGRbaV0/dGhpcy5fbGF5b3V0JiZ0aGlzLl9sYXlvdXQud3JhcCYmKGRbYT8iZmxleC1iYXNpcyI6ImZsZXgiXT1kW2ldP2E/ZFtpXTp0KyIgIitlKyIgIitkW2ldOmE/ZFtvXTp0KyIgIitlKyIgIitkW29dKTpkPUMocCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6bn06e2ZsZXg6dCsiICIrZSsiICIrbn0pLEMoZCx7ImJveC1zaXppbmciOiJib3JkZXItYm94In0pfSxlfShpLmIpLEU9e21hcmdpbjowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLCJtaW4td2lkdGgiOiIxMDAlIiwibWluLWhlaWdodCI6IjEwMCUifSxrPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5lbFJlZj1uLGkuX2FwcGx5U3R5bGVUb0VsZW1lbnQoRSksaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShpLmIpLFQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4saSl8fHRoaXM7cmV0dXJuIG8uX2xheW91dD0icm93IixyJiYoby5fbGF5b3V0V2F0Y2hlcj1yLmxheW91dCQuc3Vic2NyaWJlKG8uX29uTGF5b3V0Q2hhbmdlLmJpbmQobykpKSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ24iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ24iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25YcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnblhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduU20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25TbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbk1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkxnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmFsaWdufHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImFsaWduIiwic3RhcnQgc3RyZXRjaCIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlV2l0aFZhbHVlKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9sYXlvdXRXYXRjaGVyJiZ0aGlzLl9sYXlvdXRXYXRjaGVyLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl91cGRhdGVXaXRoVmFsdWU9ZnVuY3Rpb24odCl7dD10fHx0aGlzLl9xdWVyeUlucHV0KCJhbGlnbiIpfHwic3RhcnQgc3RyZXRjaCIsdGhpcy5fbXFBY3RpdmF0aW9uJiYodD10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQodGhpcy5fYnVpbGRDU1ModCkpLHRoaXMuX2FsbG93U3RyZXRjaGluZyh0LHRoaXMuX2xheW91dD90aGlzLl9sYXlvdXQ6InJvdyIpfSxlLnByb3RvdHlwZS5fb25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9sYXlvdXQ9KHQuZGlyZWN0aW9ufHwiIikudG9Mb3dlckNhc2UoKSx2LmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLl9sYXlvdXR9KXx8KHRoaXMuX2xheW91dD0icm93Iik7dmFyIG49dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giO3RoaXMuX21xQWN0aXZhdGlvbiYmKG49dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcobix0aGlzLl9sYXlvdXR8fCJyb3ciKX0sZS5wcm90b3R5cGUuX2J1aWxkQ1NTPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49dC5zcGxpdCgiICIpLHI9blsxXTtzd2l0Y2goblswXSl7Y2FzZSJjZW50ZXIiOmVbImp1c3RpZnktY29udGVudCJdPSJjZW50ZXIiO2JyZWFrO2Nhc2Uic3BhY2UtYXJvdW5kIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtYXJvdW5kIjticmVhaztjYXNlInNwYWNlLWJldHdlZW4iOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1iZXR3ZWVuIjticmVhaztjYXNlInNwYWNlLWV2ZW5seSI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWV2ZW5seSI7YnJlYWs7Y2FzZSJlbmQiOmNhc2UiZmxleC1lbmQiOmVbImp1c3RpZnktY29udGVudCJdPSJmbGV4LWVuZCI7YnJlYWs7Y2FzZSJzdGFydCI6Y2FzZSJmbGV4LXN0YXJ0IjpkZWZhdWx0OmVbImp1c3RpZnktY29udGVudCJdPSJmbGV4LXN0YXJ0In1zd2l0Y2gocil7Y2FzZSJzdGFydCI6Y2FzZSJmbGV4LXN0YXJ0IjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iZmxleC1zdGFydCI7YnJlYWs7Y2FzZSJiYXNlbGluZSI6ZVsiYWxpZ24taXRlbXMiXT0iYmFzZWxpbmUiO2JyZWFrO2Nhc2UiY2VudGVyIjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iY2VudGVyIjticmVhaztjYXNlImVuZCI6Y2FzZSJmbGV4LWVuZCI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImZsZXgtZW5kIjticmVhaztjYXNlInN0cmV0Y2giOmRlZmF1bHQ6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09InN0cmV0Y2gifXJldHVybiBDKGUse2Rpc3BsYXk6ImZsZXgiLCJmbGV4LWRpcmVjdGlvbiI6dGhpcy5fbGF5b3V0fHwicm93IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGUucHJvdG90eXBlLl9hbGxvd1N0cmV0Y2hpbmc9ZnVuY3Rpb24odCxlKXsic3RyZXRjaCI9PXQuc3BsaXQoIiAiKVsxXSYmdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh7ImJveC1zaXppbmciOiJib3JkZXItYm94IiwibWF4LXdpZHRoIjpfKGUpP251bGw6IjEwMCUiLCJtYXgtaGVpZ2h0IjpfKGUpPyIxMDAlIjpudWxsfSl9LGV9KGkuYiksST1mdW5jdGlvbigpe319LCIyNkZVIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigibXJTRyIpLGk9bigiSzlJYSIpLG89bigiOGc4QSIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3ZhbHVlPWUsbn1yZXR1cm4gci5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgbj10LnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcyxlKTtyZXR1cm4gbiYmIW4uY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLG59LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNFcnJvcil0aHJvdyB0aGlzLnRocm93bkVycm9yO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBvLmE7cmV0dXJuIHRoaXMuX3ZhbHVlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLHRoaXMuX3ZhbHVlPWUpfSxlfShpLmEpfSwiMkJkaiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LCIyZVBsIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fX0sIjNwSlEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuKCJtclNHIiksbigiT3pmQiIpLG4oIm42Z0ciKTt2YXIgcj1mdW5jdGlvbigpe319LDQ6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKCJ6VW5iIil9LCI0YzM1IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBofSk7dmFyIHI9bigibXJTRyIpLGk9bigiQ2NuRyIpO2Z1bmN0aW9uIG8oKXt0aHJvdyBFcnJvcigiSG9zdCBhbHJlYWR5IGhhcyBhIHBvcnRhbCBhdHRhY2hlZCIpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10JiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhIHBvcnRhbCB0byBhIG51bGwgUG9ydGFsT3V0bGV0Iil9KCksdC5oYXNBdHRhY2hlZCgpJiZvKCksdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2F0dGFjaGVkSG9zdDtudWxsPT10P2Z1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZGV0YWNoIGEgcG9ydGFsIHRoYXQgaXMgbm90IGF0dGFjaGVkIHRvIGEgaG9zdCIpfSgpOih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0F0dGFjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuX2F0dGFjaGVkSG9zdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZXRBdHRhY2hlZEhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5fYXR0YWNoZWRIb3N0PXR9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuY29tcG9uZW50PWUsaS52aWV3Q29udGFpbmVyUmVmPW4saS5pbmplY3Rvcj1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oYSksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkudGVtcGxhdGVSZWY9ZSxpLnZpZXdDb250YWluZXJSZWY9bixpLmNvbnRleHQ9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib3JpZ2luIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49dGhpcy5jb250ZXh0KSx0aGlzLmNvbnRleHQ9bix0LnByb3RvdHlwZS5hdHRhY2guY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0PXZvaWQgMCx0LnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKX0sZX0oYSksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExfXJldHVybiB0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdHx8ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTXVzdCBwcm92aWRlIGEgcG9ydGFsIHRvIGF0dGFjaCIpfSgpLHRoaXMuaGFzQXR0YWNoZWQoKSYmbygpLHRoaXMuX2lzRGlzcG9zZWQmJmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlRoaXMgUG9ydGFsT3V0bGV0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX0oKSx0IGluc3RhbmNlb2Ygcz8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIHU/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dm9pZCBmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhbiB1bmtub3duIFBvcnRhbCB0eXBlLiBCYXNlUG9ydGFsT3V0bGV0IGFjY2VwdHMgZWl0aGVyIGEgQ29tcG9uZW50UG9ydGFsIG9yIGEgVGVtcGxhdGVQb3J0YWwuIil9KCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9LHQucHJvdG90eXBlLnNldERpc3Bvc2VGbj1mdW5jdGlvbih0KXt0aGlzLl9kaXNwb3NlRm49dH0sdC5wcm90b3R5cGUuX2ludm9rZURpc3Bvc2VGbj1mdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBvLm91dGxldEVsZW1lbnQ9ZSxvLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bixvLl9hcHBSZWY9cixvLl9kZWZhdWx0SW5qZWN0b3I9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMscj10aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpO3JldHVybiB0LnZpZXdDb250YWluZXJSZWY/KGU9dC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChyLHQudmlld0NvbnRhaW5lclJlZi5sZW5ndGgsdC5pbmplY3Rvcnx8dC52aWV3Q29udGFpbmVyUmVmLnBhcmVudEluamVjdG9yKSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe3JldHVybiBlLmRlc3Ryb3koKX0pKTooZT1yLmNyZWF0ZSh0LmluamVjdG9yfHx0aGlzLl9kZWZhdWx0SW5qZWN0b3IpLHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMuc2V0RGlzcG9zZUZuKGZ1bmN0aW9uKCl7bi5fYXBwUmVmLmRldGFjaFZpZXcoZS5ob3N0VmlldyksZS5kZXN0cm95KCl9KSksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2dldENvbXBvbmVudFJvb3ROb2RlKGUpKSxlfSxlLnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC52aWV3Q29udGFpbmVyUmVmLHI9bi5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQpO3JldHVybiByLmRldGVjdENoYW5nZXMoKSxyLnJvb3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe3ZhciB0PW4uaW5kZXhPZihyKTstMSE9PXQmJm4ucmVtb3ZlKHQpfSkscn0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSxudWxsIT10aGlzLm91dGxldEVsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5vdXRsZXRFbGVtZW50KX0sZS5wcm90b3R5cGUuX2dldENvbXBvbmVudFJvb3ROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX0sZX0obCksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSxyLl92aWV3Q29udGFpbmVyUmVmPW4sci5faXNJbml0aWFsaXplZD0hMSxyLmF0dGFjaGVkPW5ldyBpLm0scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBvcnRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH0sc2V0OmZ1bmN0aW9uKGUpeyghdGhpcy5oYXNBdHRhY2hlZCgpfHxlfHx0aGlzLl9pc0luaXRpYWxpemVkKSYmKHRoaXMuaGFzQXR0YWNoZWQoKSYmdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksZSYmdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dGFjaGVkUmVmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIG49bnVsbCE9ZS52aWV3Q29udGFpbmVyUmVmP2Uudmlld0NvbnRhaW5lclJlZjp0aGlzLl92aWV3Q29udGFpbmVyUmVmLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGUuY29tcG9uZW50KSxpPW4uY3JlYXRlQ29tcG9uZW50KHIsbi5sZW5ndGgsZS5pbmplY3Rvcnx8bi5wYXJlbnRJbmplY3Rvcik7cmV0dXJuIHQucHJvdG90eXBlLnNldERpc3Bvc2VGbi5jYWxsKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoZS50ZW1wbGF0ZVJlZixlLmNvbnRleHQpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cix0aGlzLmF0dGFjaGVkLmVtaXQocikscn0sZX0obCksaD1mdW5jdGlvbigpe319LCI2MGlVIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigiRzVKMSIpLGk9bigiRi9YTCIpLG89bigiWGxQdyIpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmtpbmQ9dCx0aGlzLnZhbHVlPWUsdGhpcy5lcnJvcj1uLHRoaXMuaGFzVmFsdWU9Ik4iPT09dH1yZXR1cm4gdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiB0Lm5leHQmJnQubmV4dCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiB0LmVycm9yJiZ0LmVycm9yKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIHQuY29tcGxldGUmJnQuY29tcGxldGUoKX19LHQucHJvdG90eXBlLmRvPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiB0JiZ0KHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIGUmJmUodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gbiYmbigpfX0sdC5wcm90b3R5cGUuYWNjZXB0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dD90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsbil9LHQucHJvdG90eXBlLnRvT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIE9iamVjdChpLmEpKHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIE9iamVjdChvLmEpKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIE9iamVjdChyLmIpKCl9dGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kIHZhbHVlIil9LHQuY3JlYXRlTmV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZT9uZXcgdCgiTiIsZSk6dC51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbn0sdC5jcmVhdGVFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoIkUiLHZvaWQgMCxlKX0sdC5jcmVhdGVDb21wbGV0ZT1mdW5jdGlvbigpe3JldHVybiB0LmNvbXBsZXRlTm90aWZpY2F0aW9ufSx0LmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyB0KCJDIiksdC51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbj1uZXcgdCgiTiIsdm9pZCAwKSx0fSgpfSwiNjdZLyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uLiBBcmUgeW91IGxvb2tpbmcgZm9yIGBtYXBUbygpYD8iKTtyZXR1cm4gbi5saWZ0KG5ldyBhKHQsZSkpfX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByb2plY3Q9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgcyh0LHRoaXMucHJvamVjdCx0aGlzLnRoaXNBcmcpKX0sdH0oKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnByb2plY3Q9bixpLmNvdW50PTAsaS50aGlzQXJnPXJ8fGksaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcm9qZWN0LmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5jb3VudCsrKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oaS5hKX0sIjZhaHciOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJpTHhRIiksaT1uKCJES1RiIiksbz17Y2xvc2VkOiEwLG5leHQ6ZnVuY3Rpb24odCl7fSxlcnJvcjpmdW5jdGlvbih0KXtpZihyLmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyB0O09iamVjdChpLmEpKHQpfSxjb21wbGV0ZTpmdW5jdGlvbigpe319fSwiNmJsRiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJGRk9vIiksaT1uKCJML1Y5Iiksbz1uKCI2YWh3IiksYT1uKCJ4VGxhIikscz1uKCJ5M0J5IiksdT1uKCJpTHhRIik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5faXNTY2FsYXI9ITEsdCYmKHRoaXMuX3N1YnNjcmliZT10KX1yZXR1cm4gdC5wcm90b3R5cGUubGlmdD1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdDtyZXR1cm4gbi5zb3VyY2U9dGhpcyxuLm9wZXJhdG9yPWUsbn0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT10aGlzLm9wZXJhdG9yLHM9ZnVuY3Rpb24odCxlLG4pe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiByLmEpcmV0dXJuIHQ7aWYodFtpLmFdKXJldHVybiB0W2kuYV0oKX1yZXR1cm4gdHx8ZXx8bj9uZXcgci5hKHQsZSxuKTpuZXcgci5hKG8uYSl9KHQsZSxuKTtpZihhP2EuY2FsbChzLHRoaXMuc291cmNlKTpzLmFkZCh0aGlzLnNvdXJjZXx8dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJiFzLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9zdWJzY3JpYmUocyk6dGhpcy5fdHJ5U3Vic2NyaWJlKHMpKSx1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmcy5zeW5jRXJyb3JUaHJvd2FibGUmJihzLnN5bmNFcnJvclRocm93YWJsZT0hMSxzLnN5bmNFcnJvclRocm93bikpdGhyb3cgcy5zeW5jRXJyb3JWYWx1ZTtyZXR1cm4gc30sdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KX1jYXRjaChlKXt1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmKHQuc3luY0Vycm9yVGhyb3duPSEwLHQuc3luY0Vycm9yVmFsdWU9ZSksdC5lcnJvcihlKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcoZT1jKGUpKShmdW5jdGlvbihlLHIpe3ZhciBpO2k9bi5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dHJ5e3QoZSl9Y2F0Y2godCl7cih0KSxpJiZpLnVuc3Vic2NyaWJlKCl9fSxyLGUpfSl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zb3VyY2U7cmV0dXJuIGUmJmUuc3Vic2NyaWJlKHQpfSx0LnByb3RvdHlwZVthLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIDA9PT10Lmxlbmd0aD90aGlzOk9iamVjdChzLmIpKHQpKHRoaXMpfSx0LnByb3RvdHlwZS50b1Byb21pc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3KHQ9Yyh0KSkoZnVuY3Rpb24odCxuKXt2YXIgcjtlLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gcj10fSxmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0sZnVuY3Rpb24oKXtyZXR1cm4gdChyKX0pfSl9LHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdH0oKTtmdW5jdGlvbiBjKHQpe2lmKHR8fCh0PXUuYS5Qcm9taXNlfHxQcm9taXNlKSwhdCl0aHJvdyBuZXcgRXJyb3IoIm5vIFByb21pc2UgaW1wbCBmb3VuZCIpO3JldHVybiB0fX0sIjhnOEEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsIm9iamVjdCB1bnN1YnNjcmliZWQiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIHIuYihlLHQpLGV9KEVycm9yKX0sIjhtTXIiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIldmNHAiKSxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9wbGF0Zm9ybT1uLGkuX2RvY3VtZW50PXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyVmlld0luaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdChpLlcpKCkmJnRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCl9KSl9LGUucHJvdG90eXBlLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90b29sYmFyUm93cy5sZW5ndGgmJltdLnNsaWNlLmNhbGwodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQuY2xhc3NMaXN0JiZ0LmNsYXNzTGlzdC5jb250YWlucygibWF0LXRvb2xiYXItcm93IikpfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVUeXBlIT09KHQuX2RvY3VtZW50P3QuX2RvY3VtZW50LkNPTU1FTlRfTk9ERTo4KX0pLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dENvbnRlbnQudHJpbSgpfSkmJmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk1hdFRvb2xiYXI6IEF0dGVtcHRpbmcgdG8gY29tYmluZSBkaWZmZXJlbnQgdG9vbGJhciBtb2Rlcy4gRWl0aGVyIHNwZWNpZnkgbXVsdGlwbGUgYDxtYXQtdG9vbGJhci1yb3c+YCBlbGVtZW50cyBleHBsaWNpdGx5IG9yIGp1c3QgcGxhY2UgY29udGVudCBpbnNpZGUgb2YgYSBgPG1hdC10b29sYmFyPmAgZm9yIGEgc2luZ2xlIHJvdy4iKX0oKX0sZX0oT2JqZWN0KG8udSkoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpLHM9ZnVuY3Rpb24oKXt9fSwiOVoxRiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIk1HQlMiKSxvPW4oInpvdG0iKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgcyh0KSxyPWUubGlmdChuKTtyZXR1cm4gbi5jYXVnaHQ9cn19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc2VsZWN0b3I9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdSh0LHRoaXMuc2VsZWN0b3IsdGhpcy5jYXVnaHQpKX0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnNlbGVjdG9yPW4saS5jYXVnaHQ9cixpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihlKXtpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBuPXZvaWQgMDt0cnl7bj10aGlzLnNlbGVjdG9yKGUsdGhpcy5jYXVnaHQpfWNhdGNoKGUpe3JldHVybiB2b2lkIHQucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyxlKX10aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKSx0aGlzLmFkZChPYmplY3Qoby5hKSh0aGlzLG4pKX19LGV9KGkuYSl9LEF5dFI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPXtwcm9kdWN0aW9uOiEwfX0sQ1M5UTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4pe3ZvaWQgMD09PW4mJihuPXQubm93KSx0aGlzLlNjaGVkdWxlckFjdGlvbj1lLHRoaXMubm93PW59cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbmV3IHRoaXMuU2NoZWR1bGVyQWN0aW9uKHRoaXMsdCkuc2NoZWR1bGUobixlKX0sdC5ub3c9RGF0ZS5ub3c/RGF0ZS5ub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LHR9KCk7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4scil7dm9pZCAwPT09ciYmKHI9aS5ub3cpO3ZhciBvPXQuY2FsbCh0aGlzLG4sZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PW8/ZS5kZWxlZ2F0ZS5ub3coKTpyKCl9KXx8dGhpcztyZXR1cm4gby5hY3Rpb25zPVtdLG8uYWN0aXZlPSExLG8uc2NoZWR1bGVkPXZvaWQgMCxvfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihuLHIsaSl7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLGUuZGVsZWdhdGUmJmUuZGVsZWdhdGUhPT10aGlzP2UuZGVsZWdhdGUuc2NoZWR1bGUobixyLGkpOnQucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxuLHIsaSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aW9ucztpZih0aGlzLmFjdGl2ZSllLnB1c2godCk7ZWxzZXt2YXIgbjt0aGlzLmFjdGl2ZT0hMDtkb3tpZihuPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLmFjdGl2ZT0hMSxuKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgbn19fSxlfShpKX0sQ2NuRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJIYSIsZnVuY3Rpb24oKXtyZXR1cm4gS2V9KSxuLmQoZSwiSWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFplfSksbi5kKGUsIkphIixmdW5jdGlvbigpe3JldHVybiBYZX0pLG4uZChlLCJHYSIsZnVuY3Rpb24oKXtyZXR1cm4gZHR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gSnR9KSxuLmQoZSwiVyIsZnVuY3Rpb24oKXtyZXR1cm4gdGV9KSxuLmQoZSwiUSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV9KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaHR9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gbXR9KSxuLmQoZSwieiIsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gY3R9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnR9KSxuLmQoZSwiVSIsZnVuY3Rpb24oKXtyZXR1cm4gU2V9KSxuLmQoZSwiTCIsZnVuY3Rpb24oKXtyZXR1cm4gcXR9KSxuLmQoZSwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gR3R9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gUWV9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gJGV9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gTHR9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gYXR9KSxuLmQoZSwiRSIsZnVuY3Rpb24oKXtyZXR1cm4gU259KSxuLmQoZSwiRiIsZnVuY3Rpb24oKXtyZXR1cm4gQ259KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJPIixmdW5jdGlvbigpe3JldHVybiBYfSksbi5kKGUsIk0iLGZ1bmN0aW9uKCl7cmV0dXJuICR9KSxuLmQoZSwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJUIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsIlYiLGZ1bmN0aW9uKCl7cmV0dXJuIFp9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJIIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ0fSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIHVlfSksbi5kKGUsIkQiLGZ1bmN0aW9uKCl7cmV0dXJuIGxlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIF90fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIFB0fSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGp0fSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZlfSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIGhlfSksbi5kKGUsIkkiLGZ1bmN0aW9uKCl7cmV0dXJuIG1lfSksbi5kKGUsIkoiLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSksbi5kKGUsIksiLGZ1bmN0aW9uKCl7cmV0dXJuIGdlfSksbi5kKGUsIk4iLGZ1bmN0aW9uKCl7cmV0dXJuIHZlfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGJlfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEJlfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIEhlfSksbi5kKGUsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIEllfSksbi5kKGUsIlAiLGZ1bmN0aW9uKCl7cmV0dXJuIFRlfSksbi5kKGUsIlgiLGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSksbi5kKGUsIlJhIixmdW5jdGlvbigpe3JldHVybiBBZX0pLG4uZChlLCJCYSIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiWiIsZnVuY3Rpb24oKXtyZXR1cm4gc3R9KSxuLmQoZSwiQWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEl0fSksbi5kKGUsIkNhIixmdW5jdGlvbigpe3JldHVybiBibn0pLG4uZChlLCJEYSIsZnVuY3Rpb24oKXtyZXR1cm4gT259KSxuLmQoZSwiRWEiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsIlBhIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsIlVhIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImZiIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsIlNhIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJUYSIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxuLmQoZSwiRmEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZyfSksbi5kKGUsIkthIixmdW5jdGlvbigpe3JldHVybiBGcn0pLG4uZChlLCJMYSIsZnVuY3Rpb24oKXtyZXR1cm4gR299KSxuLmQoZSwiTWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEhufSksbi5kKGUsIk5hIixmdW5jdGlvbigpe3JldHVybiB1aX0pLG4uZChlLCJPYSIsZnVuY3Rpb24oKXtyZXR1cm4gYnJ9KSxuLmQoZSwiUWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHlyfSksbi5kKGUsIlZhIixmdW5jdGlvbigpe3JldHVybiBJcn0pLG4uZChlLCJXYSIsZnVuY3Rpb24oKXtyZXR1cm4gVHJ9KSxuLmQoZSwiWGEiLGZ1bmN0aW9uKCl7cmV0dXJuIEFpfSksbi5kKGUsIllhIixmdW5jdGlvbigpe3JldHVybiBLcn0pLG4uZChlLCJhYiIsZnVuY3Rpb24oKXtyZXR1cm4gbGl9KSxuLmQoZSwiZGIiLGZ1bmN0aW9uKCl7cmV0dXJuIGNpfSksbi5kKGUsIlphIixmdW5jdGlvbigpe3JldHVybiBNaX0pLG4uZChlLCJiYiIsZnVuY3Rpb24oKXtyZXR1cm4gTml9KSxuLmQoZSwiY2IiLGZ1bmN0aW9uKCl7cmV0dXJuIFBpfSksbi5kKGUsImViIixmdW5jdGlvbigpe3JldHVybiBTaX0pLG4uZChlLCJnYiIsZnVuY3Rpb24oKXtyZXR1cm4gRGl9KSxuLmQoZSwiaGIiLGZ1bmN0aW9uKCl7cmV0dXJuIFVufSksbi5kKGUsImliIixmdW5jdGlvbigpe3JldHVybiBWaX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oInB1Z1QiKSxvPW4oIks5SWEiKSxhPW4oIjZibEYiKSxzPW4oInAwaWIiKSx1PW4oIlMxblgiKTtmdW5jdGlvbiBsKHQpe3JldHVybntwcm92aWRlZEluOnQucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OnQuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2Rlc2M9dCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5uZ0luamVjdGFibGVEZWY9dm9pZCAwIT09ZT9sKHtwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSk6dm9pZCAwfXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJJbmplY3Rpb25Ub2tlbiAiK3RoaXMuX2Rlc2N9LHR9KCksZj0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIGgodCxlLG4pe3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtpZih0KXt2YXIgaT10LmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShlKSk7Zm9yKHZhciBvIGluIGkpdGhpc1tvXT1pW29dfX19KGUpO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07aWYodGhpcyBpbnN0YW5jZW9mIG8pcmV0dXJuIGkuYXBwbHkodGhpcyx0KSx0aGlzO3ZhciBuLGE9bmV3KChuPW8pLmJpbmQuYXBwbHkobixPYmplY3Qoci5kKShbdm9pZCAwXSx0KSkpO3JldHVybiBzLmFubm90YXRpb249YSxzO2Z1bmN0aW9uIHModCxlLG4pe2Zvcih2YXIgcj10Lmhhc093blByb3BlcnR5KGYpP3RbZl06T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZix7dmFsdWU6W119KVtmXTtyLmxlbmd0aDw9bjspci5wdXNoKG51bGwpO3JldHVybihyW25dPXJbbl18fFtdKS5wdXNoKGEpLHR9fXJldHVybiBuJiYoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLG8ucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsby5hbm5vdGF0aW9uQ2xzPW8sb312YXIgZD1uZXcgYygiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpO0Z1bmN0aW9uO3ZhciBwPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3csbT0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZix5PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwsZz1wfHx5fHxtLHY9UHJvbWlzZS5yZXNvbHZlKDApLGI9bnVsbDtmdW5jdGlvbiBfKCl7aWYoIWIpe3ZhciB0PWcuU3ltYm9sO2lmKHQmJnQuaXRlcmF0b3IpYj10Lml0ZXJhdG9yO2Vsc2UgZm9yKHZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHI9ZVtuXTsiZW50cmllcyIhPT1yJiYic2l6ZSIhPT1yJiZNYXAucHJvdG90eXBlW3JdPT09TWFwLnByb3RvdHlwZS5lbnRyaWVzJiYoYj1yKX19cmV0dXJuIGJ9ZnVuY3Rpb24gdyh0KXsidW5kZWZpbmVkIj09dHlwZW9mIFpvbmU/di50aGVuKGZ1bmN0aW9uKCl7dCYmdC5hcHBseShudWxsLG51bGwpfSk6Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJzY2hlZHVsZU1pY3JvdGFzayIsdCl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0PT09ZXx8Im51bWJlciI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIGUmJmlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBPKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIlsiK3QubWFwKE8pLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PXQpcmV0dXJuIiIrdDtpZih0Lm92ZXJyaWRkZW5OYW1lKXJldHVybiIiK3Qub3ZlcnJpZGRlbk5hbWU7aWYodC5uYW1lKXJldHVybiIiK3QubmFtZTt2YXIgZT10LnRvU3RyaW5nKCk7aWYobnVsbD09ZSlyZXR1cm4iIitlO3ZhciBuPWUuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PW4/ZTplLnN1YnN0cmluZygwLG4pfWZ1bmN0aW9uIEModCl7cmV0dXJuIHQuX19mb3J3YXJkX3JlZl9fPUMsdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBPKHRoaXMoKSl9LHR9ZnVuY3Rpb24gUyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5oYXNPd25Qcm9wZXJ0eSgiX19mb3J3YXJkX3JlZl9fIikmJnQuX19mb3J3YXJkX3JlZl9fPT09Qz90KCk6dH12YXIgRT1oKCJJbmplY3QiLGZ1bmN0aW9uKHQpe3JldHVybnt0b2tlbjp0fX0pLGs9aCgiT3B0aW9uYWwiKSxUPWgoIlNlbGYiKSxJPWgoIlNraXBTZWxmIiksQT0iX19zb3VyY2UiLGo9bmV3IE9iamVjdCxQPW5ldyBjKCJJTkpFQ1RPUiIpLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT1qKSxlPT09ail0aHJvdyBuZXcgRXJyb3IoIk51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgIitPKHQpKyIhIik7cmV0dXJuIGV9LHR9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/bmV3IFcodCxlKTpuZXcgVyh0LnByb3ZpZGVycyx0LnBhcmVudCx0Lm5hbWV8fG51bGwpfSx0LlRIUk9XX0lGX05PVF9GT1VORD1qLHQuTlVMTD1uZXcgTSx0Lm5nSW5qZWN0YWJsZURlZj1sKHtwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gWihQKX19KSx0fSgpLFI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEQ9W10sTD1SLEY9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKX0sVj17fSxVPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHRbZV09PT1WKXJldHVybiBlO3Rocm93IEVycm9yKCIhcHJvcCIpfSh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6Vn0pLHo9Ti5OVUxMLEI9L1xuL2dtLEg9Ilx1MDI3NSIsVz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PWUmJihlPXopLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMucGFyZW50PWUsdGhpcy5zb3VyY2U9bjt2YXIgcj10aGlzLl9yZWNvcmRzPW5ldyBNYXA7ci5zZXQoTix7dG9rZW46TixmbjpSLGRlcHM6RCx2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLHIuc2V0KFAse3Rva2VuOlAsZm46UixkZXBzOkQsdmFsdWU6dGhpcyx1c2VOZXc6ITF9KSxmdW5jdGlvbiB0KGUsbil7aWYobilpZigobj1TKG4pKWluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspdChlLG5bcl0pO2Vsc2V7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pdGhyb3cgRygiRnVuY3Rpb24vQ2xhc3Mgbm90IHN1cHBvcnRlZCIsbik7aWYoIW58fCJvYmplY3QiIT10eXBlb2Ygbnx8IW4ucHJvdmlkZSl0aHJvdyBHKCJVbmV4cGVjdGVkIHByb3ZpZGVyIixuKTt2YXIgaT1TKG4ucHJvdmlkZSksbz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1ELG49dC5kZXBzO2lmKG4mJm4ubGVuZ3RoKXtlPVtdO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT02O2lmKCh1PVMobltyXSkpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG89MCxhPXU7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cyBpbnN0YW5jZW9mIGt8fHM9PWs/aXw9MTpzIGluc3RhbmNlb2YgSXx8cz09ST9pJj0tMzpzIGluc3RhbmNlb2YgVHx8cz09VD9pJj0tNTp1PXMgaW5zdGFuY2VvZiBFP3MudG9rZW46UyhzKX1lLnB1c2goe3Rva2VuOnUsb3B0aW9uczppfSl9fWVsc2UgaWYodC51c2VFeGlzdGluZyl7dmFyIHU7ZT1be3Rva2VuOnU9Uyh0LnVzZUV4aXN0aW5nKSxvcHRpb25zOjZ9XX1lbHNlIGlmKCEobnx8VSBpbiB0KSl0aHJvdyBHKCInZGVwcycgcmVxdWlyZWQiLHQpO3JldHVybiBlfSh0KSxuPVIscj1ELGk9ITEsbz1TKHQucHJvdmlkZSk7aWYoVSBpbiB0KXI9dC51c2VWYWx1ZTtlbHNlIGlmKHQudXNlRmFjdG9yeSluPXQudXNlRmFjdG9yeTtlbHNlIGlmKHQudXNlRXhpc3RpbmcpO2Vsc2UgaWYodC51c2VDbGFzcylpPSEwLG49Uyh0LnVzZUNsYXNzKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvKXRocm93IEcoIlN0YXRpY1Byb3ZpZGVyIGRvZXMgbm90IGhhdmUgW3VzZVZhbHVlfHVzZUZhY3Rvcnl8dXNlRXhpc3Rpbmd8dXNlQ2xhc3NdIG9yIFtwcm92aWRlXSBpcyBub3QgbmV3YWJsZSIsdCk7aT0hMCxuPW99cmV0dXJue2RlcHM6ZSxmbjpuLHVzZU5ldzppLHZhbHVlOnJ9fShuKTtpZighMD09PW4ubXVsdGkpe3ZhciBhPWUuZ2V0KGkpO2lmKGEpe2lmKGEuZm4hPT1GKXRocm93IHEoaSl9ZWxzZSBlLnNldChpLGE9e3Rva2VuOm4ucHJvdmlkZSxkZXBzOltdLHVzZU5ldzohMSxmbjpGLHZhbHVlOkR9KTthLmRlcHMucHVzaCh7dG9rZW46aT1uLG9wdGlvbnM6Nn0pfXZhciBzPWUuZ2V0KGkpO2lmKHMmJnMuZm49PUYpdGhyb3cgcShpKTtlLnNldChpLG8pfX0ocix0KX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgaT10aGlzLl9yZWNvcmRzLmdldCh0KTt0cnl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLGksbyxhLHMpe3RyeXtyZXR1cm4gZnVuY3Rpb24oZSxuLGksbyxhLHMpe3ZhciB1LGw7aWYoIW58fDQmcykyJnN8fCh1PW8uZ2V0KGUsYSwwKSk7ZWxzZXtpZigodT1uLnZhbHVlKT09TCl0aHJvdyBFcnJvcihIKyJDaXJjdWxhciBkZXBlbmRlbmN5Iik7aWYodT09PUQpe24udmFsdWU9TDt2YXIgYz1uLnVzZU5ldyxmPW4uZm4saD1uLmRlcHMsZD1EO2lmKGgubGVuZ3RoKXtkPVtdO2Zvcih2YXIgcD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1oW3BdLHk9bS5vcHRpb25zLGc9MiZ5P2kuZ2V0KG0udG9rZW4pOnZvaWQgMDtkLnB1c2godChtLnRva2VuLGcsaSxnfHw0Jnk/bzp6LDEmeT9udWxsOk4uVEhST1dfSUZfTk9UX0ZPVU5ELDApKX19bi52YWx1ZT11PWM/bmV3KChsPWYpLmJpbmQuYXBwbHkobCxPYmplY3Qoci5kKShbdm9pZCAwXSxkKSkpOmYuYXBwbHkodm9pZCAwLGQpfX1yZXR1cm4gdX0oZSxuLGksbyxhLHMpfWNhdGNoKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQpKSwodC5uZ1RlbXBUb2tlblBhdGg9dC5uZ1RlbXBUb2tlblBhdGh8fFtdKS51bnNoaWZ0KGUpLG4mJm4udmFsdWU9PUwmJihuLnZhbHVlPUQpLHR9fSh0LGksdGhpcy5fcmVjb3Jkcyx0aGlzLnBhcmVudCxlLG4pfWNhdGNoKGUpe3ZhciBvPWUubmdUZW1wVG9rZW5QYXRoO3Rocm93IHRbQV0mJm8udW5zaGlmdCh0W0FdKSxlLm1lc3NhZ2U9WSgiXG4iK2UubWVzc2FnZSxvLHRoaXMuc291cmNlKSxlLm5nVG9rZW5QYXRoPW8sZS5uZ1RlbXBUb2tlblBhdGg9bnVsbCxlfX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHVzaChPKG4pKX0pLCJTdGF0aWNJbmplY3RvclsiK3Quam9pbigiLCAiKSsiXSJ9LHR9KCk7ZnVuY3Rpb24gcSh0KXtyZXR1cm4gRygiQ2Fubm90IG1peCBtdWx0aSBwcm92aWRlcnMgYW5kIHJlZ3VsYXIgcHJvdmlkZXJzIix0KX1mdW5jdGlvbiBZKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1udWxsKSx0PXQmJiJcbiI9PT10LmNoYXJBdCgwKSYmdC5jaGFyQXQoMSk9PUg/dC5zdWJzdHIoMik6dDt2YXIgcj1PKGUpO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlyPWUubWFwKE8pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl7dmFyIGk9W107Zm9yKHZhciBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIGE9ZVtvXTtpLnB1c2gobysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpPKGEpKSl9cj0ieyIraS5qb2luKCIsICIpKyJ9In1yZXR1cm4iU3RhdGljSW5qZWN0b3JFcnJvciIrKG4/IigiK24rIikiOiIiKSsiWyIrcisiXTogIit0LnJlcGxhY2UoQiwiXG4gICIpfWZ1bmN0aW9uIEcodCxlKXtyZXR1cm4gbmV3IEVycm9yKFkodCxlKSl9dmFyIFE9dm9pZCAwO2Z1bmN0aW9uIEsodCl7dmFyIGU9UTtyZXR1cm4gUT10LGV9ZnVuY3Rpb24gWih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PVEpdGhyb3cgbmV3IEVycm9yKCJpbmplY3QoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIGluamVjdGlvbiBjb250ZXh0Iik7aWYobnVsbD09PVEpe3ZhciBuPXQubmdJbmplY3RhYmxlRGVmO2lmKG4mJiJyb290Ij09bi5wcm92aWRlZEluKXJldHVybiB2b2lkIDA9PT1uLnZhbHVlP24udmFsdWU9bi5mYWN0b3J5KCk6bi52YWx1ZTt0aHJvdyBuZXcgRXJyb3IoIkluamVjdG9yOiBOT1RfRk9VTkQgWyIrTyh0KSsiXSIpfXJldHVybiBRLmdldCh0LDgmZT9udWxsOnZvaWQgMCxlKX1TdHJpbmc7dmFyIFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLHRbdC5OYXRpdmU9MV09Ik5hdGl2ZSIsdFt0Lk5vbmU9Ml09Ik5vbmUiLHRbdC5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsdH0oe30pLCQ9ZnVuY3Rpb24odCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfSxKPW5ldyAkKCI2LjAuOSIpLHR0PSJuZ0RlYnVnQ29udGV4dCIsZXQ9Im5nT3JpZ2luYWxFcnJvciIsbnQ9Im5nRXJyb3JMb2dnZXIiO2Z1bmN0aW9uIHJ0KHQpe3JldHVybiB0W3R0XX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFtldF19ZnVuY3Rpb24gb3QodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LE9iamVjdChyLmQpKGUpKX12YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY29uc29sZT1jb25zb2xlfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KSxuPXRoaXMuX2ZpbmRDb250ZXh0KHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHRbbnRdfHxvdH0odCk7cih0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmcih0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmcih0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX0sdC5wcm90b3R5cGUuX2ZpbmRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3J0KHQpP3J0KHQpOnRoaXMuX2ZpbmRDb250ZXh0KGl0KHQpKTpudWxsfSx0LnByb3RvdHlwZS5fZmluZE9yaWdpbmFsRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWl0KHQpO2UmJml0KGUpOyllPWl0KGUpO3JldHVybiBlfSx0fSgpLHN0PW5ldyBjKCJUaGUgcHJlc2VuY2Ugb2YgdGhpcyB0b2tlbiBtYXJrcyBhbiBpbmplY3RvciBhcyBiZWluZyB0aGUgcm9vdCBpbmplY3Rvci4iKTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gbHQodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIGN0PW5ldyBjKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpLGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuYXBwSW5pdHM9dCx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuZG9uZT0hMSx0aGlzLmRvbmVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5yZXNvbHZlPXQsZS5yZWplY3Q9bn0pfXJldHVybiB0LnByb3RvdHlwZS5ydW5Jbml0aWFsaXplcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmluaXRpYWxpemVkKXt2YXIgZT1bXSxuPWZ1bmN0aW9uKCl7dC5kb25lPSEwLHQucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcih2YXIgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXt2YXIgaT10aGlzLmFwcEluaXRzW3JdKCk7dXQoaSkmJmUucHVzaChpKX1Qcm9taXNlLmFsbChlKS50aGVuKGZ1bmN0aW9uKCl7bigpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5yZWplY3QoZSl9KSwwPT09ZS5sZW5ndGgmJm4oKSx0aGlzLmluaXRpYWxpemVkPSEwfX0sdH0oKSxodD1uZXcgYygiQXBwSWQiKTtmdW5jdGlvbiBkdCgpe3JldHVybiIiK3B0KCkrcHQoKStwdCgpfWZ1bmN0aW9uIHB0KCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoOTcrTWF0aC5mbG9vcigyNSpNYXRoLnJhbmRvbSgpKSl9dmFyIG10PW5ldyBjKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLHl0PW5ldyBjKCJQbGF0Zm9ybSBJRCIpLGd0PW5ldyBjKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLHZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKHQpfSx0LnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2Fybih0KX0sdH0oKTtmdW5jdGlvbiBidCgpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSBjb21waWxlciBpcyBub3QgbG9hZGVkIil9dmFyIF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZVN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgYnQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGVGb3I9ZnVuY3Rpb24odCl7fSx0fSgpLHd0PWZ1bmN0aW9uKCl7fSx4dD1mdW5jdGlvbigpe307ZnVuY3Rpb24gT3QodCl7dmFyIGU9RXJyb3IoIk5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAiK08odCkrIi4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz8iKTtyZXR1cm4gZVtFdF09dCxlfXZhciBDdCxTdCxFdD0ibmdDb21wb25lbnQiLGt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dGhyb3cgT3QodCl9LHR9KCksVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5VTEw9bmV3IGt0LHR9KCksSXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uZ01vZHVsZT1uLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO3RoaXMuX2ZhY3Rvcmllcy5zZXQoaS5jb21wb25lbnRUeXBlLGkpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtpZighZSYmdGhpcy5fcGFyZW50JiYoZT10aGlzLl9wYXJlbnQucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCkpLCFlKXRocm93IE90KHQpO3JldHVybiBuZXcgQXQoZSx0aGlzLl9uZ01vZHVsZSl9LHR9KCksQXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5mYWN0b3J5PWUsci5uZ01vZHVsZT1uLHIuc2VsZWN0b3I9ZS5zZWxlY3RvcixyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlLHIubmdDb250ZW50U2VsZWN0b3JzPWUubmdDb250ZW50U2VsZWN0b3JzLHIuaW5wdXRzPWUuaW5wdXRzLHIub3V0cHV0cz1lLm91dHB1dHMscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGUodCxlLG4scnx8dGhpcy5uZ01vZHVsZSl9LGV9KHh0KSxqdD1mdW5jdGlvbigpe30sUHQ9ZnVuY3Rpb24oKXt9LE10PWZ1bmN0aW9uKCl7dmFyIHQ9Zy53dGY7cmV0dXJuISghdHx8IShDdD10LnRyYWNlKXx8KFN0PUN0LmV2ZW50cywwKSl9KCk7ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gbnVsbH12YXIgUnQ9TXQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCksU3QuY3JlYXRlU2NvcGUodCxlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gTnR9LER0PU10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEN0LmxlYXZlU2NvcGUodCxlKSxlfTpmdW5jdGlvbih0LGUpe3JldHVybiBlfSxMdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX19pc0FzeW5jPWUsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSxuLHIpe3ZhciBvLGE9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZSYmIm9iamVjdCI9PXR5cGVvZiBlPyhvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0KHQpfSl9OmZ1bmN0aW9uKHQpe2UubmV4dCh0KX0sZS5lcnJvciYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmVycm9yKHQpfSl9OmZ1bmN0aW9uKHQpe2UuZXJyb3IodCl9KSxlLmNvbXBsZXRlJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9OmZ1bmN0aW9uKCl7ZS5jb21wbGV0ZSgpfSkpOihvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX0pfTpmdW5jdGlvbih0KXtlKHQpfSxuJiYoYT10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4odCl9KX06ZnVuY3Rpb24odCl7bih0KX0pLHImJihzPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByKCl9KX06ZnVuY3Rpb24oKXtyKCl9KSk7dmFyIHU9dC5wcm90b3R5cGUuc3Vic2NyaWJlLmNhbGwodGhpcyxvLGEscyk7cmV0dXJuIGUgaW5zdGFuY2VvZiBpLmEmJmUuYWRkKHUpLHV9LGV9KG8uYSksRnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlLG49dC5lbmFibGVMb25nU3RhY2tUcmFjZSxyPXZvaWQgMCE9PW4mJm47aWYodGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBMdCghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBMdCghMSksdGhpcy5vblN0YWJsZT1uZXcgTHQoITEpLHRoaXMub25FcnJvcj1uZXcgTHQoITEpLCJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZSl0aHJvdyBuZXcgRXJyb3IoIkluIHRoaXMgY29uZmlndXJhdGlvbiBBbmd1bGFyIHJlcXVpcmVzIFpvbmUuanMiKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCksdGhpcy5fbmVzdGluZz0wLHRoaXMuX291dGVyPXRoaXMuX2lubmVyPVpvbmUuY3VycmVudCxab25lLnd0ZlpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLnd0ZlpvbmVTcGVjKSksWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxyJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLChlPXRoaXMpLl9pbm5lcj1lLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxuLHIsaSxvLGEpe3RyeXtyZXR1cm4gQnQoZSksdC5pbnZva2VUYXNrKHIsaSxvLGEpfWZpbmFsbHl7SHQoZSl9fSxvbkludm9rZTpmdW5jdGlvbih0LG4scixpLG8sYSxzKXt0cnl7cmV0dXJuIEJ0KGUpLHQuaW52b2tlKHIsaSxvLGEscyl9ZmluYWxseXtIdChlKX19LG9uSGFzVGFzazpmdW5jdGlvbih0LG4scixpKXt0Lmhhc1Rhc2socixpKSxuPT09ciYmKCJtaWNyb1Rhc2siPT1pLmNoYW5nZT8oZS5oYXNQZW5kaW5nTWljcm90YXNrcz1pLm1pY3JvVGFzayx6dChlKSk6Im1hY3JvVGFzayI9PWkuY2hhbmdlJiYoZS5oYXNQZW5kaW5nTWFjcm90YXNrcz1pLm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiB0LmhhbmRsZUVycm9yKHIsaSksZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLm9uRXJyb3IuZW1pdChpKX0pLCExfX0pfXJldHVybiB0LmlzSW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe3JldHVybiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfSx0LmFzc2VydEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZighdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5vdCEiKX0sdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYodC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyEiKX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9pbm5lcixvPWkuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK3IsdCxVdCxWdCxWdCk7dHJ5e3JldHVybiBpLnJ1blRhc2sobyxlLG4pfWZpbmFsbHl7aS5jYW5jZWxUYXNrKG8pfX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQodCxlLG4pfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfSx0fSgpO2Z1bmN0aW9uIFZ0KCl7fXZhciBVdD17fTtmdW5jdGlvbiB6dCh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Lm9uU3RhYmxlLmVtaXQobnVsbCl9KX1maW5hbGx5e3QuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBCdCh0KXt0Ll9uZXN0aW5nKyssdC5pc1N0YWJsZSYmKHQuaXNTdGFibGU9ITEsdC5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIEh0KHQpe3QuX25lc3RpbmctLSx6dCh0KX12YXIgV3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBMdCx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEx0LHRoaXMub25TdGFibGU9bmV3IEx0LHRoaXMub25FcnJvcj1uZXcgTHR9cmV0dXJuIHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdH0oKSxxdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksdC5ydW4oZnVuY3Rpb24oKXtlLnRhc2tUcmFja2luZ1pvbmU9Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9cmV0dXJuIHQucHJvdG90eXBlLl93YXRjaEFuZ3VsYXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe3QuX2RpZFdvcms9ITAsdC5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXtGdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe3QuX2lzWm9uZVN0YWJsZT0hMCx0Ll9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfSx0LnByb3RvdHlwZS5pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuaXNTdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfSx0LnByb3RvdHlwZS5fcnVuQ2FsbGJhY2tzSWZSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5pc1N0YWJsZSgpKXcoZnVuY3Rpb24oKXtmb3IoOzAhPT10Ll9jYWxsYmFja3MubGVuZ3RoOyl7dmFyIGU9dC5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChlLnRpbWVvdXRJZCksZS5kb25lQ2IodC5fZGlkV29yayl9dC5fZGlkV29yaz0hMX0pO2Vsc2V7dmFyIGU9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC51cGRhdGVDYnx8IXQudXBkYXRlQ2IoZSl8fChjbGVhclRpbWVvdXQodC50aW1lb3V0SWQpLCExKX0pLHRoaXMuX2RpZFdvcms9ITB9fSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nVGFza3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQuc291cmNlLGlzUGVyaW9kaWM6dC5kYXRhLmlzUGVyaW9kaWMsZGVsYXk6dC5kYXRhLmRlbGF5LGNyZWF0aW9uTG9jYXRpb246dC5jcmVhdGlvbkxvY2F0aW9uLHhocjp0LmRhdGEudGFyZ2V0fX0pOltdfSx0LnByb3RvdHlwZS5hZGRDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPS0xO2UmJmU+MCYmKGk9c2V0VGltZW91dChmdW5jdGlvbigpe3IuX2NhbGxiYWNrcz1yLl9jYWxsYmFja3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbWVvdXRJZCE9PWl9KSx0KHIuX2RpZFdvcmssci5nZXRQZW5kaW5nVGFza3MoKSl9LGUpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOnQsdGltZW91dElkOmksdXBkYXRlQ2I6bn0pfSx0LnByb3RvdHlwZS53aGVuU3RhYmxlPWZ1bmN0aW9uKHQsZSxuKXtpZihuJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9kaXN0L3Rhc2stdHJhY2tpbmcuanMiIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKHQsZSxuKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9LHQucHJvdG90eXBlLmdldFBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5maW5kUHJvdmlkZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX0sdH0oKSxZdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcCxLdC5hZGRUb1dpbmRvdyh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQodCxlKX0sdC5wcm90b3R5cGUudW5yZWdpc3RlckFwcGxpY2F0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUodCl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0VGVzdGFiaWxpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmdldEFsbFRlc3RhYmlsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfSx0LnByb3RvdHlwZS5nZXRBbGxSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX0sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSEwKSxLdC5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyx0LGUpfSx0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHR9KCk7ZnVuY3Rpb24gR3QodCl7S3Q9dH12YXIgUXQsS3Q9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYWRkVG9XaW5kb3c9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsfSx0fSgpKSxadD0hMCxYdD0hMSwkdD1uZXcgYygiQWxsb3dNdWx0aXBsZVRva2VuIik7ZnVuY3Rpb24gSnQoKXtpZihYdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbmFibGUgcHJvZCBtb2RlIGFmdGVyIHBsYXRmb3JtIHNldHVwLiIpO1p0PSExfWZ1bmN0aW9uIHRlKCl7cmV0dXJuIFh0PSEwLFp0fXZhciBlZT1mdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMudG9rZW49ZX07ZnVuY3Rpb24gbmUodCxlLG4pe3ZvaWQgMD09PW4mJihuPVtdKTt2YXIgcj0iUGxhdGZvcm06ICIrZSxpPW5ldyBjKHIpO3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG89cmUoKTtpZighb3x8by5pbmplY3Rvci5nZXQoJHQsITEpKWlmKHQpdChuLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0pKTtlbHNle3ZhciBhPW4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSk7IWZ1bmN0aW9uKHQpe2lmKFF0JiYhUXQuZGVzdHJveWVkJiYhUXQuaW5qZWN0b3IuZ2V0KCR0LCExKSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwbGF0Zm9ybS4gRGVzdHJveSB0aGUgcHJldmlvdXMgb25lIHRvIGNyZWF0ZSBhIG5ldyBvbmUuIik7UXQ9dC5nZXQoaWUpO3ZhciBlPXQuZ2V0KG10LG51bGwpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9KE4uY3JlYXRlKHtwcm92aWRlcnM6YSxuYW1lOnJ9KSl9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXJlKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0oaSl9fWZ1bmN0aW9uIHJlKCl7cmV0dXJuIFF0JiYhUXQuZGVzdHJveWVkP1F0Om51bGx9dmFyIGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pbmplY3Rvcj10LHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT0ibm9vcCI9PT0obj1lP2Uubmdab25lOnZvaWQgMCk/bmV3IFd0Oigiem9uZS5qcyI9PT1uP3ZvaWQgMDpuKXx8bmV3IEZ0KHtlbmFibGVMb25nU3RhY2tUcmFjZTp0ZSgpfSksbz1be3Byb3ZpZGU6RnQsdXNlVmFsdWU6aX1dO3JldHVybiBpLnJ1bihmdW5jdGlvbigpe3ZhciBlPU4uY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6ci5pbmplY3RvcixuYW1lOnQubW9kdWxlVHlwZS5uYW1lfSksbj10LmNyZWF0ZShlKSxhPW4uaW5qZWN0b3IuZ2V0KGF0LG51bGwpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTm8gRXJyb3JIYW5kbGVyLiBJcyBwbGF0Zm9ybSBtb2R1bGUgKEJyb3dzZXJNb2R1bGUpIGluY2x1ZGVkPyIpO3JldHVybiBuLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBzZShyLl9tb2R1bGVzLG4pfSksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBpLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe2EuaGFuZGxlRXJyb3IodCl9fSl9KSxmdW5jdGlvbih0LGUsaSl7dHJ5e3ZhciBvPSgoYT1uLmluamVjdG9yLmdldChmdCkpLnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3JldHVybiByLl9tb2R1bGVEb0Jvb3RzdHJhcChuKSxufSkpO3JldHVybiB1dChvKT9vLmNhdGNoKGZ1bmN0aW9uKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59KTpvfWNhdGNoKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59dmFyIGF9KGEsaSl9KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5pbmplY3Rvci5nZXQod3QpLGk9b2Uoe30sZSk7cmV0dXJuIHIuY3JlYXRlQ29tcGlsZXIoW2ldKS5jb21waWxlTW9kdWxlQXN5bmModCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gbi5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsaSl9KX0sdC5wcm90b3R5cGUuX21vZHVsZURvQm9vdHN0cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5qZWN0b3IuZ2V0KGFlKTtpZih0Ll9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKXQuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5ib290c3RyYXAodCl9KTtlbHNle2lmKCF0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IEVycm9yKCJUaGUgbW9kdWxlICIrTyh0Lmluc3RhbmNlLmNvbnN0cnVjdG9yKSsnIHdhcyBib290c3RyYXBwZWQsIGJ1dCBpdCBkb2VzIG5vdCBkZWNsYXJlICJATmdNb2R1bGUuYm9vdHN0cmFwIiBjb21wb25lbnRzIG5vciBhICJuZ0RvQm9vdHN0cmFwIiBtZXRob2QuIFBsZWFzZSBkZWZpbmUgb25lIG9mIHRoZXNlLicpO3QuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChlKX10aGlzLl9tb2R1bGVzLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwbGF0Zm9ybSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCEiKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2Rlc3Ryb3llZD0hMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gb2UodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZShvZSx0KTpPYmplY3Qoci5hKSh7fSx0LGUpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3ZhciBsPXRoaXM7dGhpcy5fem9uZT10LHRoaXMuX2NvbnNvbGU9ZSx0aGlzLl9pbmplY3Rvcj1uLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9aSx0aGlzLl9pbml0U3RhdHVzPW8sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9dGUoKSx0aGlzLl96b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7bC5fem9uZS5ydW4oZnVuY3Rpb24oKXtsLnRpY2soKX0pfX0pO3ZhciBjPW5ldyBhLmEoZnVuY3Rpb24odCl7bC5fc3RhYmxlPWwuX3pvbmUuaXNTdGFibGUmJiFsLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhbC5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyxsLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KGwuX3N0YWJsZSksdC5jb21wbGV0ZSgpfSl9KSxmPW5ldyBhLmEoZnVuY3Rpb24odCl7dmFyIGU7bC5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2U9bC5fem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtGdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe2wuX3N0YWJsZXx8bC5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc3x8bC5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrc3x8KGwuX3N0YWJsZT0hMCx0Lm5leHQoITApKX0pfSl9KTt2YXIgbj1sLl96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7RnQuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGwuX3N0YWJsZSYmKGwuX3N0YWJsZT0hMSxsLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KCExKX0pKX0pO3JldHVybiBmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSk7dGhpcy5pc1N0YWJsZT1PYmplY3Qocy5hKShjLGYucGlwZShPYmplY3QodS5hKSgpKSl9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcztpZighdGhpcy5faW5pdFN0YXR1cy5kb25lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGJvb3RzdHJhcCBhcyB0aGVyZSBhcmUgc3RpbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemVycyBydW5uaW5nLiBCb290c3RyYXAgY29tcG9uZW50cyBpbiB0aGUgYG5nRG9Cb290c3RyYXBgIG1ldGhvZCBvZiB0aGUgcm9vdCBtb2R1bGUuIik7bj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKG4uY29tcG9uZW50VHlwZSk7dmFyIGk9biBpbnN0YW5jZW9mIEF0P251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KGp0KSxvPW4uY3JlYXRlKE4uTlVMTCxbXSxlfHxuLnNlbGVjdG9yLGkpO28ub25EZXN0cm95KGZ1bmN0aW9uKCl7ci5fdW5sb2FkQ29tcG9uZW50KG8pfSk7dmFyIGE9by5pbmplY3Rvci5nZXQocXQsbnVsbCk7cmV0dXJuIGEmJm8uaW5qZWN0b3IuZ2V0KFl0KS5yZWdpc3RlckFwcGxpY2F0aW9uKG8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCxhKSx0aGlzLl9sb2FkQ29tcG9uZW50KG8pLHRlKCkmJnRoaXMuX2NvbnNvbGUubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gdGhlIGRldmVsb3BtZW50IG1vZGUuIENhbGwgZW5hYmxlUHJvZE1vZGUoKSB0byBlbmFibGUgdGhlIHByb2R1Y3Rpb24gbW9kZS4iKSxvfSx0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgRXJyb3IoIkFwcGxpY2F0aW9uUmVmLnRpY2sgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5Iik7dmFyIG49dC5fdGlja1Njb3BlKCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwLHRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGV0ZWN0Q2hhbmdlcygpfSksdGhpcy5fZW5mb3JjZU5vTmV3Q2hhbmdlcyYmdGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja05vQ2hhbmdlcygpfSl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKHQpfSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMSxEdChuKX19LHQucHJvdG90eXBlLmF0dGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDtzZSh0aGlzLl92aWV3cyxlKSxlLmRldGFjaEZyb21BcHBSZWYoKX0sdC5wcm90b3R5cGUuX2xvYWRDb21wb25lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldChndCxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfSx0LnByb3RvdHlwZS5fdW5sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSxzZSh0aGlzLmNvbXBvbmVudHMsdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5fdGlja1Njb3BlPVJ0KCJBcHBsaWNhdGlvblJlZiN0aWNrKCkiKSx0fSgpO2Z1bmN0aW9uIHNlKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIHVlPWZ1bmN0aW9uKCl7fSxsZT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkltcG9ydGFudD0xXT0iSW1wb3J0YW50Iix0W3QuRGFzaENhc2U9Ml09IkRhc2hDYXNlIix0fSh7fSksY2U9ZnVuY3Rpb24odCl7dGhpcy5uYXRpdmVFbGVtZW50PXR9LGZlPWZ1bmN0aW9uKCl7fSxoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5jaGFuZ2VzPW5ldyBMdCx0aGlzLmxlbmd0aD0wfXJldHVybiB0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfSx0LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKHQpfSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9LHQucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaCh0KX0sdC5wcm90b3R5cGUuc29tZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX0sdC5wcm90b3R5cGVbXygpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzW18oKV0oKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKT90KG4pOm47cmV0dXJuIGUuY29uY2F0KHIpfSxbXSl9KHQpLHRoaXMuZGlydHk9ITEsdGhpcy5sZW5ndGg9dGhpcy5fcmVzdWx0cy5sZW5ndGgsdGhpcy5sYXN0PXRoaXMuX3Jlc3VsdHNbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD10aGlzLl9yZXN1bHRzWzBdfSx0LnByb3RvdHlwZS5ub3RpZnlPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZXMuZW1pdCh0aGlzKX0sdC5wcm90b3R5cGUuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5jaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LHR9KCksZGU9ZnVuY3Rpb24oKXt9LHBlPXtmYWN0b3J5UGF0aFByZWZpeDoiIixmYWN0b3J5UGF0aFN1ZmZpeDoiLm5nZmFjdG9yeSJ9LG1lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NvbXBpbGVyPXQsdGhpcy5fY29uZmlnPWV8fHBlfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb21waWxlciBpbnN0YW5jZW9mIF90P3RoaXMubG9hZEZhY3RvcnkodCk6dGhpcy5sb2FkQW5kQ29tcGlsZSh0KX0sdC5wcm90b3R5cGUubG9hZEFuZENvbXBpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPU9iamVjdChyLmMpKHQuc3BsaXQoIiMiKSwyKSxvPWlbMF0sYT1pWzFdO3JldHVybiB2b2lkIDA9PT1hJiYoYT0iZGVmYXVsdCIpLG4oImNybmQiKShvKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W2FdfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4geWUodCxvLGEpfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5fY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpfSl9LHQucHJvdG90eXBlLmxvYWRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChyLmMpKHQuc3BsaXQoIiMiKSwyKSxpPWVbMF0sbz1lWzFdLGE9Ik5nRmFjdG9yeSI7cmV0dXJuIHZvaWQgMD09PW8mJihvPSJkZWZhdWx0IixhPSIiKSxuKCJjcm5kIikodGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoUHJlZml4K2krdGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoU3VmZml4KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W28rYV19KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB5ZSh0LGksbyl9KX0sdH0oKTtmdW5jdGlvbiB5ZSh0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCAnIituKyInIGluICciK2UrIiciKTtyZXR1cm4gdH12YXIgZ2U9ZnVuY3Rpb24oKXt9LHZlPWZ1bmN0aW9uKCl7fSxiZT1mdW5jdGlvbigpe30sX2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9kZWJ1Z0NvbnRleHQ9bix0aGlzLm5hdGl2ZU5vZGU9dCxlJiZlIGluc3RhbmNlb2Ygd2U/ZS5hZGRDaGlsZCh0aGlzKTp0aGlzLnBhcmVudD1udWxsLHRoaXMubGlzdGVuZXJzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLHdlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5wcm9wZXJ0aWVzPXt9LGkuYXR0cmlidXRlcz17fSxpLmNsYXNzZXM9e30saS5zdHlsZXM9e30saS5jaGlsZE5vZGVzPVtdLGkubmF0aXZlRWxlbWVudD1lLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24odCl7dCYmKHRoaXMuY2hpbGROb2Rlcy5wdXNoKHQpLHQucGFyZW50PXRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoZSwxKSl9LGUucHJvdG90eXBlLmluc2VydENoaWxkcmVuQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMsbz10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PW8mJigobj10aGlzLmNoaWxkTm9kZXMpLnNwbGljZS5hcHBseShuLE9iamVjdChyLmQpKFtvKzEsMF0sZSkpLGUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlQ2hpbGQodCksdC5wYXJlbnQ9aX0pKX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTE9PT1uP3RoaXMuYWRkQ2hpbGQoZSk6KGUucGFyZW50JiZlLnBhcmVudC5yZW1vdmVDaGlsZChlKSxlLnBhcmVudD10aGlzLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UobiwwLGUpKX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnlBbGwodClbMF18fG51bGx9LGUucHJvdG90eXBlLnF1ZXJ5QWxsPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB4ZSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gT2UodGhpcyx0LGUpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50cmlnZ2VyRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLm5hbWU9PXQmJm4uY2FsbGJhY2soZSl9KX0sZX0oX2UpO2Z1bmN0aW9uIHhlKHQsZSxuKXt0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IGluc3RhbmNlb2Ygd2UmJihlKHQpJiZuLnB1c2godCkseGUodCxlLG4pKX0pfWZ1bmN0aW9uIE9lKHQsZSxuKXt0IGluc3RhbmNlb2Ygd2UmJnQuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCkmJm4ucHVzaCh0KSx0IGluc3RhbmNlb2Ygd2UmJk9lKHQsZSxuKX0pfXZhciBDZT1uZXcgTWFwO2Z1bmN0aW9uIFNlKHQpe3JldHVybiBDZS5nZXQodCl8fG51bGx9ZnVuY3Rpb24gRWUodCl7Q2Uuc2V0KHQubmF0aXZlTm9kZSx0KX1mdW5jdGlvbiBrZSh0LGUpe3ZhciBuPUFlKHQpLHI9QWUoZSk7cmV0dXJuIG4mJnI/ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj10W18oKV0oKSxpPWVbXygpXSgpOzspe3ZhciBvPXIubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lJiZhLmRvbmUpcmV0dXJuITA7aWYoby5kb25lfHxhLmRvbmUpcmV0dXJuITE7aWYoIW4oby52YWx1ZSxhLnZhbHVlKSlyZXR1cm4hMX19KHQsZSxrZSk6IShufHwhdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8cnx8IWV8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpfHx4KHQsZSl9dmFyIFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLndyYXBwZWQ9dH1yZXR1cm4gdC53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNXcmFwcGVkKGUpP2Uud3JhcHBlZDplfSx0LmlzV3JhcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9LHR9KCksSWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZXZpb3VzVmFsdWU9dCx0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMuZmlyc3RDaGFuZ2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuaXNGaXJzdENoYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfSx0fSgpO2Z1bmN0aW9uIEFlKHQpe3JldHVybiEhamUodCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2VvZiBNYXApJiZfKClpbiB0KX1mdW5jdGlvbiBqZSh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX12YXIgUGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gQWUodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5lKHQpfSx0fSgpLE1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9LE5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49dHx8TWV9cmV0dXJuIHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE9wZXJhdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5faXRIZWFkLG49dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxpPW51bGw7ZXx8bjspe3ZhciBvPSFufHxlJiZlLmN1cnJlbnRJbmRleDxGZShuLHIsaSk/ZTpuLGE9RmUobyxyLGkpLHM9by5jdXJyZW50SW5kZXg7aWYobz09PW4pci0tLG49bi5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihlPWUuX25leHQsbnVsbD09by5wcmV2aW91c0luZGV4KXIrKztlbHNle2l8fChpPVtdKTt2YXIgdT1hLXIsbD1zLXI7aWYodSE9bCl7Zm9yKHZhciBjPTA7Yzx1O2MrKyl7dmFyIGY9YzxpLmxlbmd0aD9pW2NdOmlbY109MCxoPWYrYztsPD1oJiZoPHUmJihpW2NdPWYrMSl9aVtvLnByZXZpb3VzSW5kZXhdPWwtdX19YSE9PXMmJnQobyxhLHMpfX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c0l0SGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQWRkZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFJlbW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9LHQucHJvdG90eXBlLmRpZmY9ZnVuY3Rpb24odCl7aWYobnVsbD09dCYmKHQ9W10pLCFBZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK08odCkrIicuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWQiKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuLHIsaSxvPXRoaXMuX2l0SGVhZCxhPSExO2lmKEFycmF5LmlzQXJyYXkodCkpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO2Zvcih2YXIgcz0wO3M8dGhpcy5sZW5ndGg7cysrKWk9dGhpcy5fdHJhY2tCeUZuKHMscj10W3NdKSxudWxsIT09byYmeChvLnRyYWNrQnlJZCxpKT8oYSYmKG89dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24obyxyLGkscykpLHgoby5pdGVtLHIpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShvLHIpKToobz10aGlzLl9taXNtYXRjaChvLHIsaSxzKSxhPSEwKSxvPW8uX25leHR9ZWxzZSBuPTAsZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSk7ZWxzZSBmb3IodmFyIHI9dFtfKCldKCksaT12b2lkIDA7IShpPXIubmV4dCgpKS5kb25lOyllKGkudmFsdWUpfSh0LGZ1bmN0aW9uKHQpe2k9ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PW8mJngoby50cmFja0J5SWQsaSk/KGEmJihvPWUuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8sdCxpLG4pKSx4KG8uaXRlbSx0KXx8ZS5fYWRkSWRlbnRpdHlDaGFuZ2Uobyx0KSk6KG89ZS5fbWlzbWF0Y2gobyx0LGksbiksYT0hMCksbz1vLl9uZXh0LG4rK30pLHRoaXMubGVuZ3RoPW47cmV0dXJuIHRoaXMuX3RydW5jYXRlKG8pLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PWUpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4LGU9dC5fbmV4dE1vdmVkO3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fSx0LnByb3RvdHlwZS5fbWlzbWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk7cmV0dXJuIG51bGw9PT10P2k9dGhpcy5faXRUYWlsOihpPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpKT8oeCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsaSxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyh4KHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsaSxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgUmUoZSxuKSxpLHIpLHR9LHQucHJvdG90eXBlLl92ZXJpZnlSZWluc2VydGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpO3JldHVybiBudWxsIT09aT90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoaSx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9LHQucHJvdG90eXBlLl90cnVuY2F0ZT1mdW5jdGlvbih0KXtmb3IoO251bGwhPT10Oyl7dmFyIGU9dC5fbmV4dDt0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSksdD1lfW51bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5jbGVhcigpLG51bGwhPT10aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLG51bGwhPT10aGlzLl9tb3Zlc1RhaWwmJih0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faXRUYWlsJiYodGhpcy5faXRUYWlsLl9uZXh0PW51bGwpLG51bGwhPT10aGlzLl9yZW1vdmFsc1RhaWwmJih0aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsJiYodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGwpfSx0LnByb3RvdHlwZS5fcmVpbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgcj10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9aTpyLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1yOmkuX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fbW92ZUFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX2FkZEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD10OnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHR9LHQucHJvdG90eXBlLl9pbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IExlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1uLHR9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX0sdC5wcm90b3R5cGUuX3VubGluaz1mdW5jdGlvbih0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIGU9dC5fcHJldixuPXQuX25leHQ7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2l0SGVhZD1uOmUuX25leHQ9bixudWxsPT09bj90aGlzLl9pdFRhaWw9ZTpuLl9wcmV2PWUsdH0sdC5wcm90b3R5cGUuX2FkZFRvTW92ZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZT90Oih0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10LHQpfSx0LnByb3RvdHlwZS5fYWRkVG9SZW1vdmFscz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgTGUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bnVsbCx0Ll9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9dCx0Ll9wcmV2UmVtb3ZlZD1udWxsKToodC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPXQpLHR9LHQucHJvdG90eXBlLl9hZGRJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fSx0fSgpLFJlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9LERlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcihuPXRoaXMuX2hlYWQ7bnVsbCE9PW47bj1uLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9bi5jdXJyZW50SW5kZXgpJiZ4KG4udHJhY2tCeUlkLHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH0sdH0oKSxMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQsbj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IERlLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBuP24uZ2V0KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0VtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXAuY2xlYXIoKX0sdH0oKTtmdW5jdGlvbiBGZSh0LGUsbil7dmFyIHI9dC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO3ZhciBpPTA7cmV0dXJuIG4mJnI8bi5sZW5ndGgmJihpPW5bcl0pLHIrZStpfXZhciBWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxqZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVZX0sdH0oKSxVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hDaGFuZ2VkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fGplKHQpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK08odCkrIicuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZCIpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG49dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCxmdW5jdGlvbih0LHIpe2lmKG4mJm4ua2V5PT09cillLl9tYXliZUFkZFRvQ2hhbmdlcyhuLHQpLGUuX2FwcGVuZEFmdGVyPW4sbj1uLl9uZXh0O2Vsc2V7dmFyIGk9ZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocix0KTtuPWUuX2luc2VydEJlZm9yZU9yQXBwZW5kKG4saSl9fSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsaT1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1pKSxpJiYoaS5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIG89bmV3IHplKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG8pLG8uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobyksb30sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXt4KGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2FkZFRvQWRkaXRpb25zPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD10Oih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0aGlzLl9hZGRpdGlvbnNUYWlsPXQpfSx0LnByb3RvdHlwZS5fYWRkVG9DaGFuZ2VzPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX0sdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlKHRbbl0sbil9KX0sdH0oKSx6ZT1mdW5jdGlvbih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9LEJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG51bGwhPW4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IEksbmV3IGtdXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYobnVsbCE9bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAnIisoKGU9dCkubmFtZXx8dHlwZW9mIGUpKyInIil9LHQubmdJbmplY3RhYmxlRGVmPWwoe3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoW25ldyBQZV0pfX0pLHR9KCksSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYobil7dmFyIHI9bi5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgdChlKX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJue3Byb3ZpZGU6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGV4dGVuZCBLZXlWYWx1ZURpZmZlcnMgd2l0aG91dCBhIHBhcmVudCBpbmplY3RvciIpO3JldHVybiB0LmNyZWF0ZShlLG4pfSxkZXBzOltbdCxuZXcgSSxuZXcga11dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIiciKX0sdH0oKSxXZT1bbmV3IFZlXSxxZT1uZXcgQmUoW25ldyBQZV0pLFllPW5ldyBIZShXZSksR2U9bmUobnVsbCwiY29yZSIsW3twcm92aWRlOnl0LHVzZVZhbHVlOiJ1bmtub3duIn0se3Byb3ZpZGU6aWUsZGVwczpbTl19LHtwcm92aWRlOll0LGRlcHM6W119LHtwcm92aWRlOnZ0LGRlcHM6W119XSksUWU9bmV3IGMoIkxvY2FsZUlkIik7ZnVuY3Rpb24gS2UoKXtyZXR1cm4gcWV9ZnVuY3Rpb24gWmUoKXtyZXR1cm4gWWV9ZnVuY3Rpb24gWGUodCl7cmV0dXJuIHR8fCJlbi1VUyJ9dmFyICRlPWZ1bmN0aW9uKHQpe30sSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmJvZHksbnVsbD09dGhpcy5pbmVydEJvZHlFbGVtZW50KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3RoaXMuaW5lcnREb2N1bWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKSxlLmFwcGVuZENoaWxkKHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9dGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48ZyBvbmxvYWQ9InRoaXMucGFyZW50Tm9kZS5yZW1vdmUoKSI+PC9nPjwvc3ZnPicsIXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yfHx0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIik/KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9Jzxzdmc+PHA+PHN0eWxlPjxpbWcgc3JjPSI8L3N0eWxlPjxpbWcgc3JjPXggb25lcnJvcj1hbGVydCgxKS8vIj4nLHRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3RvciYmdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInN2ZyBpbWciKSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuISF3aW5kb3cuRE9NUGFyc2VyfWNhdGNoKHQpe3JldHVybiExfX0oKT90aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfRE9NUGFyc2VyOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50KTp0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X1hIUn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9YSFI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt0PWVuY29kZVVSSSh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH12YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5yZXNwb25zZVR5cGU9ImRvY3VtZW50IixlLm9wZW4oIkdFVCIsImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsIit0LCExKSxlLnNlbmQobnVsbCk7dmFyIG49ZS5yZXNwb25zZS5ib2R5O3JldHVybiBuLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCksbn0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt2YXIgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCksZX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19LHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfSW5lcnREb2N1bWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4iY29udGVudCJpbiBlPyhlLmlubmVySFRNTD10LGUpOih0aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPXQsdGhpcy5kZWZhdWx0RG9jLmRvY3VtZW50TW9kZSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnModGhpcy5pbmVydEJvZHlFbGVtZW50KSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQpfSx0LnByb3RvdHlwZS5zdHJpcEN1c3RvbU5zQXR0cnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXR0cmlidXRlcyxuPWUubGVuZ3RoLTE7MDxuO24tLSl7dmFyIHI9ZS5pdGVtKG4pLm5hbWU7InhtbG5zOm5zMSIhPT1yJiYwIT09ci5pbmRleE9mKCJuczE6Iil8fHQucmVtb3ZlQXR0cmlidXRlKHIpfWZvcih2YXIgaT10LmZpcnN0Q2hpbGQ7aTspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyhpKSxpPWkubmV4dFNpYmxpbmd9LHR9KCksdG49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxlbj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05K1wvXSs9KiQvaTtmdW5jdGlvbiBubih0KXtyZXR1cm4odD1TdHJpbmcodCkpLm1hdGNoKHRuKXx8dC5tYXRjaChlbik/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBVUkwgdmFsdWUgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIiksInVuc2FmZToiK3QpfWZ1bmN0aW9uIHJuKHQpe3ZhciBlLG4saT17fTt0cnl7Zm9yKHZhciBvPU9iamVjdChyLmUpKHQuc3BsaXQoIiwiKSksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpaVthLnZhbHVlXT0hMH1jYXRjaCh0KXtlPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGUpdGhyb3cgZS5lcnJvcn19cmV0dXJuIGl9ZnVuY3Rpb24gb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG4saSxvPXt9O3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuZSkodCkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciB1PXMudmFsdWU7Zm9yKHZhciBsIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShsKSYmKG9bbF09ITApfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG99dmFyIGFuLHNuPXJuKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksdW49cm4oImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxsbj1ybigicnAscnQiKSxjbj1vbihsbix1biksZm49b24oc24sb24odW4scm4oImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLG9uKGxuLHJuKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksY24pLGhuPXJuKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxkbj1ybigic3Jjc2V0IikscG49b24oaG4sZG4scm4oImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIikpLG1uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZUNoaWxkcmVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZpcnN0Q2hpbGQ7ZTspaWYoZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP3RoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTt2YXIgbj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKG4pe2U9bjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9LHQucHJvdG90eXBlLnN0YXJ0RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoZm4uaGFzT3duUHJvcGVydHkoZSkpe3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2Zvcih2YXIgbixyPXQuYXR0cmlidXRlcyxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXIuaXRlbShpKSxhPW8ubmFtZSxzPWEudG9Mb3dlckNhc2UoKTtpZihwbi5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIHU9by52YWx1ZTtobltzXSYmKHU9bm4odSkpLGRuW3NdJiYobj11LHU9KG49U3RyaW5nKG4pKS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbm4odC50cmltKCkpfSkuam9pbigiLCAiKSksdGhpcy5idWYucHVzaCgiICIsYSwnPSInLHZuKHUpLCciJyl9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH10aGlzLmJ1Zi5wdXNoKCI+Iil9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH0sdC5wcm90b3R5cGUuZW5kRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Zm4uaGFzT3duUHJvcGVydHkoZSkmJiFzbi5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfSx0LnByb3RvdHlwZS5jaGFycz1mdW5jdGlvbih0KXt0aGlzLmJ1Zi5wdXNoKHZuKHQpKX0sdC5wcm90b3R5cGUuY2hlY2tDbG9iYmVyZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogIit0Lm91dGVySFRNTCk7cmV0dXJuIGV9LHR9KCkseW49L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGduPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiB2bih0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSh5bixmdW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNoYXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKGduLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIGJuKHQsZSl7dmFyIG49bnVsbDt0cnl7YW49YW58fG5ldyBKZSh0KTt2YXIgcj1lP1N0cmluZyhlKToiIjtuPWFuLmdldEluZXJ0Qm9keUVsZW1lbnQocik7dmFyIGk9NSxvPXI7ZG97aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2ktLSxyPW8sbz1uLmlubmVySFRNTCxuPWFuLmdldEluZXJ0Qm9keUVsZW1lbnQocil9d2hpbGUociE9PW8pO3ZhciBhPW5ldyBtbixzPWEuc2FuaXRpemVDaGlsZHJlbihfbihuKXx8bik7cmV0dXJuIHRlKCkmJmEuc2FuaXRpemVkU29tZXRoaW5nJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgSFRNTCBzdHJpcHBlZCBzb21lIGNvbnRlbnQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpLiIpLHN9ZmluYWxseXtpZihuKWZvcih2YXIgdT1fbihuKXx8bjt1LmZpcnN0Q2hpbGQ7KXUucmVtb3ZlQ2hpbGQodS5maXJzdENoaWxkKX19ZnVuY3Rpb24gX24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PXQubm9kZU5hbWV9KHQpP3QuY29udGVudDpudWxsfXZhciB3bj1uZXcgUmVnRXhwKCJeKFstLC5cIiclXyEjIGEtekEtWjAtOV0rfCg/Oig/Om1hdHJpeHx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHNrZXd8cGVyc3BlY3RpdmUpKD86WHxZfDNkKT98KD86cmdifGhzbClhP3woPzpyZXBlYXRpbmctKT8oPzpsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudHwoPzpjYWxjfGF0dHIpKVxcKFstMC05LiUsICNhLXpBLVpdK1xcKSkkIiwiZyIpLHhuPS9edXJsXCgoW14pXSspXCkkLztmdW5jdGlvbiBPbih0KXtpZighKHQ9U3RyaW5nKHQpLnRyaW0oKSkpcmV0dXJuIiI7dmFyIGU9dC5tYXRjaCh4bik7cmV0dXJuIGUmJm5uKGVbMV0pPT09ZVsxXXx8dC5tYXRjaCh3bikmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dC5jaGFyQXQocik7IiciPT09aSYmbj9lPSFlOiciJz09PWkmJmUmJihuPSFuKX1yZXR1cm4gZSYmbn0odCk/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBzdHlsZSB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksInVuc2FmZSIpfXZhciBDbj1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5IVE1MPTFdPSJIVE1MIix0W3QuU1RZTEU9Ml09IlNUWUxFIix0W3QuU0NSSVBUPTNdPSJTQ1JJUFQiLHRbdC5VUkw9NF09IlVSTCIsdFt0LlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIix0fSh7fSksU249ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEVuKHQsZSxuKXt2YXIgcj10LnN0YXRlLGk9MTc5MiZyO3JldHVybiBpPT09ZT8odC5zdGF0ZT0tMTc5MyZyfG4sdC5pbml0SW5kZXg9LTEsITApOmk9PT1ufWZ1bmN0aW9uIGtuKHQsZSxuKXtyZXR1cm4oMTc5MiZ0LnN0YXRlKT09PWUmJnQuaW5pdEluZGV4PD1uJiYodC5pbml0SW5kZXg9bisxLCEwKX1mdW5jdGlvbiBUbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIEluKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gQW4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBqbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIFBuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19dmFyIE1uPXtzZXRDdXJyZW50Tm9kZTp2b2lkIDAsY3JlYXRlUm9vdFZpZXc6dm9pZCAwLGNyZWF0ZUVtYmVkZGVkVmlldzp2b2lkIDAsY3JlYXRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY3JlYXRlTmdNb2R1bGVSZWY6dm9pZCAwLG92ZXJyaWRlUHJvdmlkZXI6dm9pZCAwLG92ZXJyaWRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY2xlYXJPdmVycmlkZXM6dm9pZCAwLGNoZWNrQW5kVXBkYXRlVmlldzp2b2lkIDAsY2hlY2tOb0NoYW5nZXNWaWV3OnZvaWQgMCxkZXN0cm95Vmlldzp2b2lkIDAscmVzb2x2ZURlcDp2b2lkIDAsY3JlYXRlRGVidWdDb250ZXh0OnZvaWQgMCxoYW5kbGVFdmVudDp2b2lkIDAsdXBkYXRlRGlyZWN0aXZlczp2b2lkIDAsdXBkYXRlUmVuZGVyZXI6dm9pZCAwLGRpcnR5UGFyZW50UXVlcmllczp2b2lkIDB9O2Z1bmN0aW9uIE5uKHQsZSxuLHIpe3ZhciBpPSJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJyIrZSsiJy4gQ3VycmVudCB2YWx1ZTogJyIrbisiJy4iO3JldHVybiByJiYoaSs9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rID8iKSxmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gUm4obixlKSxufShpLHQpfWZ1bmN0aW9uIFJuKHQsZSl7dFt0dF09ZSx0W250XT1lLmxvZ0Vycm9yLmJpbmQoZSl9ZnVuY3Rpb24gRG4odCl7cmV0dXJuIG5ldyBFcnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3OiAiK3QpfXZhciBMbj1mdW5jdGlvbigpe30sRm49bmV3IE1hcDtmdW5jdGlvbiBWbih0KXt2YXIgZT1Gbi5nZXQodCk7cmV0dXJuIGV8fChlPU8odCkrIl8iK0ZuLnNpemUsRm4uc2V0KHQsZSkpLGV9ZnVuY3Rpb24gVW4odCxlLG4scil7aWYoVGUuaXNXcmFwcGVkKHIpKXtyPVRlLnVud3JhcChyKTt2YXIgaT10LmRlZi5ub2Rlc1tlXS5iaW5kaW5nSW5kZXgrbixvPVRlLnVud3JhcCh0Lm9sZFZhbHVlc1tpXSk7dC5vbGRWYWx1ZXNbaV09bmV3IFRlKG8pfXJldHVybiByfXZhciB6bj0iJCR1bmRlZmluZWQiLEJuPSIkJGVtcHR5IjtmdW5jdGlvbiBIbih0KXtyZXR1cm57aWQ6em4sc3R5bGVzOnQuc3R5bGVzLGVuY2Fwc3VsYXRpb246dC5lbmNhcHN1bGF0aW9uLGRhdGE6dC5kYXRhfX12YXIgV249MDtmdW5jdGlvbiBxbih0LGUsbixyKXtyZXR1cm4hKCEoMiZ0LnN0YXRlKSYmeCh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gWW4odCxlLG4scil7cmV0dXJuISFxbih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIEduKHQsZSxuLHIpe3ZhciBpPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IWtlKGkscikpe3ZhciBvPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBObihNbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksbysiOiAiK2ksbysiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBRbih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIEtuKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiBabih0LGUsbixyKXt0cnl7cmV0dXJuIFFuKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP0luKHQsZSkuY29tcG9uZW50Vmlldzp0KSxNbi5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChlKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX1mdW5jdGlvbiBYbih0KXtyZXR1cm4gdC5wYXJlbnQ/SW4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiAkbih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uIEpuKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBUbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiB0cih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGVyKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIG5yKHQpe3JldHVybiAxPDx0JTMyfWZ1bmN0aW9uIHJyKHQpe3ZhciBlPXt9LG49MCxpPXt9O3JldHVybiB0JiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG89T2JqZWN0KHIuYykodCwyKSxhPW9bMF0scz1vWzFdOyJudW1iZXIiPT10eXBlb2YgYT8oZVthXT1zLG58PW5yKGEpKTppW2FdPXN9KSx7bWF0Y2hlZFF1ZXJpZXM6ZSxyZWZlcmVuY2VzOmksbWF0Y2hlZFF1ZXJ5SWRzOm59fWZ1bmN0aW9uIGlyKHQsZSl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBuLGksbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaT0obz1PYmplY3Qoci5jKSh0LDIpKVswXSxuPW9bMV0pOihpPTAsbj10KSxuJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJmUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEEse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSkse2ZsYWdzOmksdG9rZW46bix0b2tlbktleTpWbihuKX19KX1mdW5jdGlvbiBvcih0LGUsbil7dmFyIHI9bi5yZW5kZXJQYXJlbnQ7cmV0dXJuIHI/MD09KDEmci5mbGFncyl8fDA9PSgzMzU1NDQzMiZyLmZsYWdzKXx8ci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZSYmci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZS5lbmNhcHN1bGF0aW9uPT09WC5OYXRpdmU/SW4odCxuLnJlbmRlclBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ6dm9pZCAwOmV9dmFyIGFyPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHNyKHQpe3ZhciBlPWFyLmdldCh0KTtyZXR1cm4gZXx8KChlPXQoZnVuY3Rpb24oKXtyZXR1cm4gTG59KSkuZmFjdG9yeT10LGFyLnNldCh0LGUpKSxlfWZ1bmN0aW9uIHVyKHQsZSxuLHIsaSl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZShKbih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSxscih0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsaSl9ZnVuY3Rpb24gbHIodCxlLG4scixpLG8sYSl7Zm9yKHZhciBzPW47czw9cjtzKyspe3ZhciB1PXQuZGVmLm5vZGVzW3NdOzExJnUuZmxhZ3MmJmZyKHQsdSxlLGksbyxhKSxzKz11LmNoaWxkQ291bnR9fWZ1bmN0aW9uIGNyKHQsZSxuLHIsaSxvKXtmb3IodmFyIGE9dDthJiYhdHIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciBzPWEucGFyZW50LHU9JG4oYSksbD11Lm5vZGVJbmRleCt1LmNoaWxkQ291bnQsYz11Lm5vZGVJbmRleCsxO2M8PWw7YysrKXt2YXIgZj1zLmRlZi5ub2Rlc1tjXTtmLm5nQ29udGVudEluZGV4PT09ZSYmZnIocyxmLG4scixpLG8pLGMrPWYuY2hpbGRDb3VudH1pZighcy5wYXJlbnQpe3ZhciBoPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGgpZm9yKGM9MDtjPGgubGVuZ3RoO2MrKylocih0LGhbY10sbixyLGksbyl9fWZ1bmN0aW9uIGZyKHQsZSxuLHIsaSxvKXtpZig4JmUuZmxhZ3MpY3IodCxlLm5nQ29udGVudC5pbmRleCxuLHIsaSxvKTtlbHNle3ZhciBhPUpuKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmaHIodCxhLG4scixpLG8pLDMyJmUuYmluZGluZ0ZsYWdzJiZocihJbih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLGksbykpOmhyKHQsYSxuLHIsaSxvKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgcz1Jbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLHU9MDt1PHMubGVuZ3RoO3UrKyl1cihzW3VdLG4scixpLG8pOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZscih0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixpLG8pfX1mdW5jdGlvbiBocih0LGUsbixyLGksbyl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLGkpO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOm8ucHVzaChlKX19dmFyIGRyPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIHByKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2goZHIpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiBtcih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX1mdW5jdGlvbiB5cih0LGUsbixyLGksbyxhLHMsdSxsLGMsZixoLGQscCxtLHksZyx2LGIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIGUrZ3IobikrcjtjYXNlIDI6cmV0dXJuIGUrZ3IobikrcitncihpKStvO2Nhc2UgMzpyZXR1cm4gZStncihuKStyK2dyKGkpK28rZ3IoYSkrcztjYXNlIDQ6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbDtjYXNlIDU6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmO2Nhc2UgNjpyZXR1cm4gZStncihuKStyK2dyKGkpK28rZ3IoYSkrcytncih1KStsK2dyKGMpK2YrZ3IoaCkrZDtjYXNlIDc6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmK2dyKGgpK2QrZ3IocCkrbTtjYXNlIDg6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmK2dyKGgpK2QrZ3IocCkrbStncih5KStnO2Nhc2UgOTpyZXR1cm4gZStncihuKStyK2dyKGkpK28rZ3IoYSkrcytncih1KStsK2dyKGMpK2YrZ3IoaCkrZCtncihwKSttK2dyKHkpK2crZ3IodikrYjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gOSBleHByZXNzaW9ucyIpfX1mdW5jdGlvbiBncih0KXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCk6IiJ9ZnVuY3Rpb24gdnIodCxlLG4scixpLG8pe3R8PTE7dmFyIGE9cnIoZSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsZmxhZ3M6dCxjaGVja0luZGV4Oi0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmEubWF0Y2hlZFF1ZXJpZXMsbWF0Y2hlZFF1ZXJ5SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6YS5yZWZlcmVuY2VzLG5nQ29udGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDp7bnM6bnVsbCxuYW1lOm51bGwsYXR0cnM6bnVsbCx0ZW1wbGF0ZTpvP3NyKG8pOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Om51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOm51bGwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6aXx8TG59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGJyKHQsZSxuLGksbyxhLHMsdSxsLGMsZixoKXt2b2lkIDA9PT1zJiYocz1bXSksY3x8KGM9TG4pO3ZhciBkPXJyKG4pLHA9ZC5tYXRjaGVkUXVlcmllcyxtPWQucmVmZXJlbmNlcyx5PWQubWF0Y2hlZFF1ZXJ5SWRzLGc9bnVsbCx2PW51bGw7YSYmKGc9KFA9T2JqZWN0KHIuYykocHIoYSksMikpWzBdLHY9UFsxXSksdT11fHxbXTtmb3IodmFyIGI9bmV3IEFycmF5KHUubGVuZ3RoKSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PU9iamVjdChyLmMpKHVbX10sMykseD13WzBdLE89d1sxXSxDPXdbMl0sUz1PYmplY3Qoci5jKShwcihPKSwyKSxFPVNbMF0saz1TWzFdLFQ9dm9pZCAwLEk9dm9pZCAwO3N3aXRjaCgxNSZ4KXtjYXNlIDQ6ST1DO2JyZWFrO2Nhc2UgMTpjYXNlIDg6VD1DfWJbX109e2ZsYWdzOngsbnM6RSxuYW1lOmssbm9uTWluaWZpZWROYW1lOmssc2VjdXJpdHlDb250ZXh0OlQsc3VmZml4Okl9fWw9bHx8W107dmFyIEE9bmV3IEFycmF5KGwubGVuZ3RoKTtmb3IoXz0wO188bC5sZW5ndGg7XysrKXt2YXIgaj1PYmplY3Qoci5jKShsW19dLDIpO0FbX109e3R5cGU6MCx0YXJnZXQ6alswXSxldmVudE5hbWU6alsxXSxwcm9wTmFtZTpudWxsfX12YXIgUCxNPShzPXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHIuYykodCwyKSxuPWVbMF0saT1lWzFdLG89T2JqZWN0KHIuYykocHIobiksMik7cmV0dXJuW29bMF0sb1sxXSxpXX0pO3JldHVybiBoPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT16bil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1YLk5vbmV8fHQuc3R5bGVzLmxlbmd0aHx8T2JqZWN0LmtleXModC5kYXRhKS5sZW5ndGg7dC5pZD1lPyJjIitXbisrOkJufXJldHVybiB0JiZ0LmlkPT09Qm4mJih0PW51bGwpLHR8fG51bGx9KGgpLGYmJihlfD0zMzU1NDQzMikse25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmV8PTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6cCxtYXRjaGVkUXVlcnlJZHM6eSxyZWZlcmVuY2VzOm0sbmdDb250ZW50SW5kZXg6aSxjaGlsZENvdW50Om8sYmluZGluZ3M6YixiaW5kaW5nRmxhZ3M6bXIoYiksb3V0cHV0czpBLGVsZW1lbnQ6e25zOmcsbmFtZTp2LGF0dHJzOk0sdGVtcGxhdGU6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6Znx8bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6aCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpjfHxMbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gX3IodCxlLG4pe3ZhciBpLG89bi5lbGVtZW50LGE9dC5yb290LnNlbGVjdG9yT3JOb2RlLHM9dC5yZW5kZXJlcjtpZih0LnBhcmVudHx8IWEpe2k9by5uYW1lP3MuY3JlYXRlRWxlbWVudChvLm5hbWUsby5ucyk6cy5jcmVhdGVDb21tZW50KCIiKTt2YXIgdT1vcih0LGUsbik7dSYmcy5hcHBlbmRDaGlsZCh1LGkpfWVsc2UgaT1zLnNlbGVjdFJvb3RFbGVtZW50KGEpO2lmKG8uYXR0cnMpZm9yKHZhciBsPTA7bDxvLmF0dHJzLmxlbmd0aDtsKyspe3ZhciBjPU9iamVjdChyLmMpKG8uYXR0cnNbbF0sMyk7cy5zZXRBdHRyaWJ1dGUoaSxjWzFdLGNbMl0sY1swXSl9cmV0dXJuIGl9ZnVuY3Rpb24gd3IodCxlLG4scil7Zm9yKHZhciBpPTA7aTxuLm91dHB1dHMubGVuZ3RoO2krKyl7dmFyIG89bi5vdXRwdXRzW2ldLGE9eHIodCxuLm5vZGVJbmRleCwoZj1vLmV2ZW50TmFtZSwoYz1vLnRhcmdldCk/YysiOiIrZjpmKSkscz1vLnRhcmdldCx1PXQ7ImNvbXBvbmVudCI9PT1vLnRhcmdldCYmKHM9bnVsbCx1PWUpO3ZhciBsPXUucmVuZGVyZXIubGlzdGVuKHN8fHIsby5ldmVudE5hbWUsYSk7dC5kaXNwb3NhYmxlc1tuLm91dHB1dEluZGV4K2ldPWx9dmFyIGMsZn1mdW5jdGlvbiB4cih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBabih0LGUsbixyKX19ZnVuY3Rpb24gT3IodCxlLG4scil7aWYoIVluKHQsZSxuLHIpKXJldHVybiExO3ZhciBpPWUuYmluZGluZ3Nbbl0sbz1Jbih0LGUubm9kZUluZGV4KSxhPW8ucmVuZGVyRWxlbWVudCxzPWkubmFtZTtzd2l0Y2goMTUmaS5mbGFncyl7Y2FzZSAxOiFmdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9ZS5zZWN1cml0eUNvbnRleHQscz1hP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoYSxvKTpvO3M9bnVsbCE9cz9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgdT10LnJlbmRlcmVyO251bGwhPW8/dS5zZXRBdHRyaWJ1dGUobixpLHMscik6dS5yZW1vdmVBdHRyaWJ1dGUobixpLHIpfSh0LGksYSxpLm5zLHMscik7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnJlbmRlcmVyO3I/aS5hZGRDbGFzcyhlLG4pOmkucmVtb3ZlQ2xhc3MoZSxuKX0odCxhLHMscik7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoQ24uU1RZTEUsaSk7aWYobnVsbCE9byl7bz1vLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9YSYmKG8rPWEpfWVsc2Ugbz1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9bz9zLnNldFN0eWxlKG4scixvKTpzLnJlbW92ZVN0eWxlKG4scil9KHQsaSxhLHMscik7YnJlYWs7Y2FzZSA4OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPWUuc2VjdXJpdHlDb250ZXh0LGE9bz90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKG8saSk6aTt0LnJlbmRlcmVyLnNldFByb3BlcnR5KG4scixhKX0oMzM1NTQ0MzImZS5mbGFncyYmMzImaS5mbGFncz9vLmNvbXBvbmVudFZpZXc6dCxpLGEscyxyKX1yZXR1cm4hMH12YXIgQ3I9bmV3IE9iamVjdCxTcj1WbihOKSxFcj1WbihQKSxrcj1WbihqdCk7ZnVuY3Rpb24gVHIodCxlLG4scil7cmV0dXJuIG49UyhuKSx7aW5kZXg6LTEsZGVwczppcihyLE8oZSkpLGZsYWdzOnQsdG9rZW46ZSx2YWx1ZTpufX1mdW5jdGlvbiBJcih0KXtmb3IodmFyIGU9e30sbj1bXSxyPSExLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvLnRva2VuPT09c3QmJihyPSEwKSwxMDczNzQxODI0Jm8uZmxhZ3MmJm4ucHVzaChvLnRva2VuKSxvLmluZGV4PWksZVtWbihvLnRva2VuKV09b31yZXR1cm57ZmFjdG9yeTpudWxsLHByb3ZpZGVyc0J5S2V5OmUscHJvdmlkZXJzOnQsbW9kdWxlczpuLGlzUm9vdDpyfX1mdW5jdGlvbiBBcih0LGUsbil7dm9pZCAwPT09biYmKG49Ti5USFJPV19JRl9OT1RfRk9VTkQpO3ZhciByLGksbz1LKHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIFNyOmNhc2UgRXI6Y2FzZSBrcjpyZXR1cm4gdH12YXIgcz10Ll9kZWYucHJvdmlkZXJzQnlLZXlbYV07aWYocyl7dmFyIHU9dC5fcHJvdmlkZXJzW3MuaW5kZXhdO3JldHVybiB2b2lkIDA9PT11JiYodT10Ll9wcm92aWRlcnNbcy5pbmRleF09anIodCxzKSksdT09PUNyP3ZvaWQgMDp1fWlmKGUudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYocj10LG51bGwhPShpPWUudG9rZW4ubmdJbmplY3RhYmxlRGVmKS5wcm92aWRlZEluJiYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fZGVmLm1vZHVsZXMuaW5kZXhPZihpLnByb3ZpZGVkSW4pPi0xfShyKXx8InJvb3QiPT09aS5wcm92aWRlZEluJiZyLl9kZWYuaXNSb290KSkpe3ZhciBsPXQuX3Byb3ZpZGVycy5sZW5ndGg7cmV0dXJuIHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTplLnRva2VuLm5nSW5qZWN0YWJsZURlZi5mYWN0b3J5LGRlcHM6W10saW5kZXg6bCx0b2tlbjplLnRva2VufSx0Ll9wcm92aWRlcnNbbF09Q3IsdC5fcHJvdmlkZXJzW2xdPWpyKHQsdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldKX1yZXR1cm4gNCZlLmZsYWdzP246dC5fcGFyZW50LmdldChlLnRva2VuLG4pfWZpbmFsbHl7SyhvKX19ZnVuY3Rpb24ganIodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOm49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUoQXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgZShBcih0LG5bMF0pLEFyKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGUoQXIodCxuWzBdKSxBcih0LG5bMV0pLEFyKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBvPW5ldyBBcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUFyKHQsblthXSk7cmV0dXJuIG5ldyhlLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5kKShbdm9pZCAwXSxvKSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAxMDI0Om49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGUoKTtjYXNlIDE6cmV0dXJuIGUoQXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBlKEFyKHQsblswXSksQXIodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBlKEFyKHQsblswXSksQXIodCxuWzFdKSxBcih0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgbz1BcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUFyKHQsblthXSk7cmV0dXJuIGUuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKG8pKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMjA0ODpuPUFyKHQsZS5kZXBzWzBdKTticmVhaztjYXNlIDI1NjpuPWUudmFsdWV9cmV0dXJuIG49PT1Dcnx8bnVsbD09bnx8Im9iamVjdCIhPXR5cGVvZiBufHwxMzEwNzImZS5mbGFnc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIG4ubmdPbkRlc3Ryb3l8fChlLmZsYWdzfD0xMzEwNzIpLHZvaWQgMD09PW4/Q3I6bn1mdW5jdGlvbiBQcih0LGUpe3ZhciBuPXQudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztpZigobnVsbD09ZXx8ZT49bi5sZW5ndGgpJiYoZT1uLmxlbmd0aC0xKSxlPDApcmV0dXJuIG51bGw7dmFyIHI9bltlXTtyZXR1cm4gci52aWV3Q29udGFpbmVyUGFyZW50PW51bGwsRHIobixlKSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksTnIocikscn1mdW5jdGlvbiBNcih0LGUsbil7dmFyIHI9ZT9KbihlLGUuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSk6dC5yZW5kZXJFbGVtZW50O3VyKG4sMixuLnJlbmRlcmVyLnBhcmVudE5vZGUociksbi5yZW5kZXJlci5uZXh0U2libGluZyhyKSx2b2lkIDApfWZ1bmN0aW9uIE5yKHQpe3VyKHQsMyxudWxsLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBScih0LGUsbil7ZT49dC5sZW5ndGg/dC5wdXNoKG4pOnQuc3BsaWNlKGUsMCxuKX1mdW5jdGlvbiBEcih0LGUpe2U+PXQubGVuZ3RoLTE/dC5wb3AoKTp0LnNwbGljZShlLDEpfXZhciBMcj1uZXcgT2JqZWN0O2Z1bmN0aW9uIEZyKHQsZSxuLHIsaSxvKXtyZXR1cm4gbmV3IFZyKHQsZSxuLHIsaSxvKX12YXIgVnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSl7dmFyIHM9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBzLnNlbGVjdG9yPWUscy5jb21wb25lbnRUeXBlPW4scy5faW5wdXRzPWkscy5fb3V0cHV0cz1vLHMubmdDb250ZW50U2VsZWN0b3JzPWEscy52aWV3RGVmRmFjdG9yeT1yLHN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuX2lucHV0cztmb3IodmFyIG4gaW4gZSl0LnB1c2goe3Byb3BOYW1lOm4sdGVtcGxhdGVOYW1lOmVbbl19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm91dHB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fb3V0cHV0cyl0LnB1c2goe3Byb3BOYW1lOmUsdGVtcGxhdGVOYW1lOnRoaXMuX291dHB1dHNbZV19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJuZ01vZHVsZSBzaG91bGQgYmUgcHJvdmlkZWQiKTt2YXIgaT1zcih0aGlzLnZpZXdEZWZGYWN0b3J5KSxvPWkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRQcm92aWRlci5ub2RlSW5kZXgsYT1Nbi5jcmVhdGVSb290Vmlldyh0LGV8fFtdLG4saSxyLExyKSxzPUFuKGEsbykuaW5zdGFuY2U7cmV0dXJuIG4mJmEucmVuZGVyZXIuc2V0QXR0cmlidXRlKEluKGEsMCkucmVuZGVyRWxlbWVudCwibmctdmVyc2lvbiIsSi5mdWxsKSxuZXcgVXIoYSxuZXcgV3IoYSkscyl9LGV9KHh0KSxVcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3ZpZXc9ZSxpLl92aWV3UmVmPW4saS5fY29tcG9uZW50PXIsaS5fZWxEZWY9aS5fdmlldy5kZWYubm9kZXNbMF0saS5ob3N0Vmlldz1uLGkuY2hhbmdlRGV0ZWN0b3JSZWY9bixpLmluc3RhbmNlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjZShJbih0aGlzLl92aWV3LHRoaXMuX2VsRGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgUXIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb21wb25lbnRUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudC5jb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld1JlZi5kZXN0cm95KCl9LGUucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3UmVmLm9uRGVzdHJveSh0KX0sZX0oZnVuY3Rpb24oKXt9KTtmdW5jdGlvbiB6cih0LGUsbil7cmV0dXJuIG5ldyBCcih0LGUsbil9dmFyIEJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlldz10LHRoaXMuX2VsRGVmPWUsdGhpcy5fZGF0YT1uLHRoaXMuX2VtYmVkZGVkVmlld3M9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgY2UodGhpcy5fZGF0YS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRcih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZpZXcsZT10aGlzLl9lbERlZi5wYXJlbnQ7IWUmJnQ7KWU9JG4odCksdD10LnBhcmVudDtyZXR1cm4gdD9uZXcgUXIodCxlKTpuZXcgUXIodGhpcy5fdmlldyxudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgZT1Qcih0aGlzLl9kYXRhLHQpO01uLmRlc3Ryb3lWaWV3KGUpfX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VtYmVkZGVkVmlld3NbdF07aWYoZSl7dmFyIG49bmV3IFdyKGUpO3JldHVybiBuLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSxufXJldHVybiBudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuY3JlYXRlRW1iZWRkZWRWaWV3KGV8fHt9KTtyZXR1cm4gdGhpcy5pbnNlcnQocixuKSxyfSx0LnByb3RvdHlwZS5jcmVhdGVDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1ufHx0aGlzLnBhcmVudEluamVjdG9yO2l8fHQgaW5zdGFuY2VvZiBBdHx8KGk9by5nZXQoanQpKTt2YXIgYT10LmNyZWF0ZShvLHIsdm9pZCAwLGkpO3JldHVybiB0aGlzLmluc2VydChhLmhvc3RWaWV3LGUpLGF9LHQucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGluc2VydCBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhPXQ7cmV0dXJuIGk9YS5fdmlldyxvPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbnVsbCE9PShyPWUpJiZ2b2lkIDAhPT1yfHwocj1vLmxlbmd0aCksaS52aWV3Q29udGFpbmVyUGFyZW50PXRoaXMuX3ZpZXcsUnIobyxyLGkpLGZ1bmN0aW9uKHQsZSl7dmFyIG49WG4oZSk7aWYobiYmbiE9PXQmJiEoMTYmZS5zdGF0ZSkpe2Uuc3RhdGV8PTE2O3ZhciByPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO3J8fChyPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzPVtdKSxyLnB1c2goZSksZnVuY3Rpb24odCxuKXtpZighKDQmbi5mbGFncykpe2UucGFyZW50LmRlZi5ub2RlRmxhZ3N8PTQsbi5mbGFnc3w9NDtmb3IodmFyIHI9bi5wYXJlbnQ7cjspci5jaGlsZEZsYWdzfD00LHI9ci5wYXJlbnR9fSgwLGUucGFyZW50Tm9kZURlZil9fShuLGkpLE1uLmRpcnR5UGFyZW50UXVlcmllcyhpKSxNcihuLHI+MD9vW3ItMV06bnVsbCxpKSxhLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSx0fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhLHM9dGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpO3JldHVybiBpPWUsYT0obz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzKVtyPXNdLERyKG8sciksbnVsbD09aSYmKGk9by5sZW5ndGgpLFJyKG8saSxhKSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXMoYSksTnIoYSksTXIobixpPjA/b1tpLTFdOm51bGwsYSksdH0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9UHIodGhpcy5fZGF0YSx0KTtlJiZNbi5kZXN0cm95VmlldyhlKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPVByKHRoaXMuX2RhdGEsdCk7cmV0dXJuIGU/bmV3IFdyKGUpOm51bGx9LHR9KCk7ZnVuY3Rpb24gSHIodCl7cmV0dXJuIG5ldyBXcih0KX12YXIgV3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXc9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwsdGhpcy5fYXBwUmVmPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdE5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVyKHRoaXMuX3ZpZXcsMCx2b2lkIDAsdm9pZCAwLHQ9W10pLHQ7dmFyIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3ZpZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpe1FuKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdpbiYmdC5iZWdpbigpO3RyeXtNbi5jaGVja0FuZFVwZGF0ZVZpZXcodGhpcy5fdmlldyl9ZmluYWxseXt0LmVuZCYmdC5lbmQoKX19LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7TW4uY2hlY2tOb0NoYW5nZXNWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGV8PTR9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3LmRpc3Bvc2FibGVzfHwodGhpcy5fdmlldy5kaXNwb3NhYmxlcz1bXSksdGhpcy5fdmlldy5kaXNwb3NhYmxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmP3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpOnRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYuZGV0YWNoKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzKSksTW4uZGVzdHJveVZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbCxOcih0aGlzLl92aWV3KSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXModGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhIik7dGhpcy5fYXBwUmVmPXR9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0fSgpO2Z1bmN0aW9uIHFyKHQsZSl7cmV0dXJuIG5ldyBZcih0LGUpfXZhciBZcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wYXJlbnRWaWV3PWUsci5fZGVmPW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXcihNbi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYsdGhpcy5fZGVmLmVsZW1lbnQudGVtcGxhdGUsdCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVsZW1lbnRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNlKEluKHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oZ2UpO2Z1bmN0aW9uIEdyKHQsZSl7cmV0dXJuIG5ldyBRcih0LGUpfXZhciBRcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLmVsRGVmPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1OLlRIUk9XX0lGX05PVF9GT1VORCksTW4ucmVzb2x2ZURlcCh0aGlzLnZpZXcsdGhpcy5lbERlZiwhIXRoaXMuZWxEZWYmJjAhPSgzMzU1NDQzMiZ0aGlzLmVsRGVmLmZsYWdzKSx7ZmxhZ3M6MCx0b2tlbjp0LHRva2VuS2V5OlZuKHQpfSxlKX0sdH0oKTtmdW5jdGlvbiBLcih0LGUpe3ZhciBuPXQuZGVmLm5vZGVzW2VdO2lmKDEmbi5mbGFncyl7dmFyIHI9SW4odCxuLm5vZGVJbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1wbGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIFRuKHQsbi5ub2RlSW5kZXgpLnJlbmRlclRleHQ7aWYoMjAyNDAmbi5mbGFncylyZXR1cm4gQW4odCxuLm5vZGVJbmRleCkuaW5zdGFuY2U7dGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHN0YXRlOiByZWFkIG5vZGVWYWx1ZSBmb3Igbm9kZSBpbmRleCAiK2UpfWZ1bmN0aW9uIFpyKHQpe3JldHVybiBuZXcgWHIodC5yZW5kZXJlcil9dmFyIFhyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuYykocHIoZSksMiksaT10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQoblsxXSxuWzBdKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGkpLGl9LHQucHJvdG90eXBlLmNyZWF0ZVZpZXdSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVUZW1wbGF0ZUFuY2hvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChlKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LG4pLG59LHQucHJvdG90eXBlLnByb2plY3ROb2Rlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlW25dKX0sdC5wcm90b3R5cGUuYXR0YWNoVmlld0FmdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KSxyPXRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCksaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKG4sZVtpXSxyKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXSxyPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShuKTt0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHIsbil9fSx0LnByb3RvdHlwZS5kZXN0cm95Vmlldz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUoZVtuXSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuR2xvYmFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1PYmplY3Qoci5jKShwcihlKSwyKSxvPWlbMF0sYT1pWzFdO251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxhLG4sbyk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxhLG8pfSx0LnByb3RvdHlwZS5zZXRCaW5kaW5nRGVidWdJbmZvPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnNldEVsZW1lbnRDbGFzcz1mdW5jdGlvbih0LGUsbil7bj90aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50U3R5bGU9ZnVuY3Rpb24odCxlLG4pe251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbik6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUpfSx0LnByb3RvdHlwZS5pbnZva2VFbGVtZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSxuKXt0W2VdLmFwcGx5KHQsbil9LHQucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyLmFuaW1hdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCEiKX0sdH0oKTtmdW5jdGlvbiAkcih0LGUsbixyKXtyZXR1cm4gbmV3IEpyKHQsZSxuLHIpfXZhciBKcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fbW9kdWxlVHlwZT10LHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9bix0aGlzLl9kZWY9cix0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLmluamVjdG9yPXRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2RlZixuPXQuX3Byb3ZpZGVycz1uZXcgQXJyYXkoZS5wcm92aWRlcnMubGVuZ3RoKSxyPTA7cjxlLnByb3ZpZGVycy5sZW5ndGg7cisrKXt2YXIgaT1lLnByb3ZpZGVyc1tyXTs0MDk2JmkuZmxhZ3N8fHZvaWQgMD09PW5bcl0mJihuW3JdPWpyKHQsaSkpfX0odGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9Ti5USFJPV19JRl9OT1RfRk9VTkQpLHZvaWQgMD09PW4mJihuPTApO3ZhciByPTA7cmV0dXJuIDQmbj9yfD0xOjImbiYmKHJ8PTQpLEFyKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6Vm4odCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoVHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIrTyh0aGlzLmluc3RhbmNlLmNvbnN0cnVjdG9yKSsiIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpO3RoaXMuX2Rlc3Ryb3llZD0hMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Ll9kZWYscj1uZXcgU2V0LGk9MDtpPG4ucHJvdmlkZXJzLmxlbmd0aDtpKyspaWYoMTMxMDcyJm4ucHJvdmlkZXJzW2ldLmZsYWdzKXt2YXIgbz10Ll9wcm92aWRlcnNbaV07aWYobyYmbyE9PUNyKXt2YXIgYT1vLm5nT25EZXN0cm95OyJmdW5jdGlvbiIhPXR5cGVvZiBhfHxyLmhhcyhvKXx8KGEuYXBwbHkobyksci5hZGQobykpfX19KHRoaXMpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksdGk9Vm4oZnVuY3Rpb24oKXt9KSxlaT1WbihmdW5jdGlvbigpe30pLG5pPVZuKGNlKSxyaT1Wbih2ZSksaWk9Vm4oZ2UpLG9pPVZuKGJlKSxhaT1WbihOKSxzaT1WbihQKTtmdW5jdGlvbiB1aSh0LGUsbixpLG8sYSxzLHUpe3ZhciBsPVtdO2lmKHMpZm9yKHZhciBjIGluIHMpe3ZhciBmPU9iamVjdChyLmMpKHNbY10sMik7bFtmWzBdXT17ZmxhZ3M6OCxuYW1lOmMsbm9uTWluaWZpZWROYW1lOmZbMV0sbnM6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19dmFyIGg9W107aWYodSlmb3IodmFyIGQgaW4gdSloLnB1c2goe3R5cGU6MSxwcm9wTmFtZTpkLHRhcmdldDpudWxsLGV2ZW50TmFtZTp1W2RdfSk7cmV0dXJuIGZpKHQsZXw9MTYzODQsbixpLG8sbyxhLGwsaCl9ZnVuY3Rpb24gbGkodCxlLG4pe3JldHVybiBmaSgtMSx0fD0xNixudWxsLDAsZSxlLG4pfWZ1bmN0aW9uIGNpKHQsZSxuLHIsaSl7cmV0dXJuIGZpKC0xLHQsZSwwLG4scixpKX1mdW5jdGlvbiBmaSh0LGUsbixyLGksbyxhLHMsdSl7dmFyIGw9cnIobiksYz1sLm1hdGNoZWRRdWVyaWVzLGY9bC5yZWZlcmVuY2VzLGg9bC5tYXRjaGVkUXVlcnlJZHM7dXx8KHU9W10pLHN8fChzPVtdKSxvPVMobyk7dmFyIGQ9aXIoYSxPKGkpKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpjLG1hdGNoZWRRdWVyeUlkczpoLHJlZmVyZW5jZXM6ZixuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OnIsYmluZGluZ3M6cyxiaW5kaW5nRmxhZ3M6bXIocyksb3V0cHV0czp1LGVsZW1lbnQ6bnVsbCxwcm92aWRlcjp7dG9rZW46aSx2YWx1ZTpvLGRlcHM6ZH0sdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGhpKHQsZSl7cmV0dXJuIHlpKHQsZSl9ZnVuY3Rpb24gZGkodCxlKXtmb3IodmFyIG49dDtuLnBhcmVudCYmIXRyKG4pOyluPW4ucGFyZW50O3JldHVybiBnaShuLnBhcmVudCwkbihuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gcGkodCxlKXt2YXIgbj1naSh0LGUucGFyZW50LCgzMjc2OCZlLmZsYWdzKT4wLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKTtpZihlLm91dHB1dHMubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5vdXRwdXRzLmxlbmd0aDtyKyspe3ZhciBpPWUub3V0cHV0c1tyXSxvPW5baS5wcm9wTmFtZV0uc3Vic2NyaWJlKG1pKHQsZS5wYXJlbnQubm9kZUluZGV4LGkuZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxlc1tlLm91dHB1dEluZGV4K3JdPW8udW5zdWJzY3JpYmUuYmluZChvKX1yZXR1cm4gbn1mdW5jdGlvbiBtaSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBabih0LGUsbixyKX19ZnVuY3Rpb24geWkodCxlKXt2YXIgbj0oODE5MiZlLmZsYWdzKT4wLGk9ZS5wcm92aWRlcjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOnJldHVybiBnaSh0LGUucGFyZW50LG4saS52YWx1ZSxpLmRlcHMpO2Nhc2UgMTAyNDpyZXR1cm4gZnVuY3Rpb24odCxlLG4saSxvKXt2YXIgYT1vLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBpKCk7Y2FzZSAxOnJldHVybiBpKGJpKHQsZSxuLG9bMF0pKTtjYXNlIDI6cmV0dXJuIGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gaShiaSh0LGUsbixvWzBdKSxiaSh0LGUsbixvWzFdKSxiaSh0LGUsbixvWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHM9QXJyYXkoYSksdT0wO3U8YTt1Kyspc1t1XT1iaSh0LGUsbixvW3VdKTtyZXR1cm4gaS5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkocykpfX0odCxlLnBhcmVudCxuLGkudmFsdWUsaS5kZXBzKTtjYXNlIDIwNDg6cmV0dXJuIGJpKHQsZS5wYXJlbnQsbixpLmRlcHNbMF0pO2Nhc2UgMjU2OnJldHVybiBpLnZhbHVlfX1mdW5jdGlvbiBnaSh0LGUsbixpLG8pe3ZhciBhPW8ubGVuZ3RoO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIG5ldyBpO2Nhc2UgMTpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSkpO2Nhc2UgMjpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSksYmkodCxlLG4sb1syXSkpO2RlZmF1bHQ6Zm9yKHZhciBzPW5ldyBBcnJheShhKSx1PTA7dTxhO3UrKylzW3VdPWJpKHQsZSxuLG9bdV0pO3JldHVybiBuZXcoaS5iaW5kLmFwcGx5KGksT2JqZWN0KHIuZCkoW3ZvaWQgMF0scykpKX19dmFyIHZpPXt9O2Z1bmN0aW9uIGJpKHQsZSxuLHIsaSl7aWYodm9pZCAwPT09aSYmKGk9Ti5USFJPV19JRl9OT1RfRk9VTkQpLDgmci5mbGFncylyZXR1cm4gci50b2tlbjt2YXIgbz10OzImci5mbGFncyYmKGk9bnVsbCk7dmFyIGE9ci50b2tlbktleTthPT09b2kmJihuPSEoIWV8fCFlLmVsZW1lbnQuY29tcG9uZW50VmlldykpLGUmJjEmci5mbGFncyYmKG49ITEsZT1lLnBhcmVudCk7Zm9yKHZhciBzPXQ7czspe2lmKGUpc3dpdGNoKGEpe2Nhc2UgdGk6cmV0dXJuIFpyKF9pKHMsZSxuKSk7Y2FzZSBlaTpyZXR1cm4gX2kocyxlLG4pLnJlbmRlcmVyO2Nhc2Ugbmk6cmV0dXJuIG5ldyBjZShJbihzLGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIHJpOnJldHVybiBJbihzLGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgaWk6aWYoZS5lbGVtZW50LnRlbXBsYXRlKXJldHVybiBJbihzLGUubm9kZUluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIG9pOnJldHVybiBIcihfaShzLGUsbikpO2Nhc2UgYWk6Y2FzZSBzaTpyZXR1cm4gR3IocyxlKTtkZWZhdWx0OnZhciB1PShuP2UuZWxlbWVudC5hbGxQcm92aWRlcnM6ZS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycylbYV07aWYodSl7dmFyIGw9QW4ocyx1Lm5vZGVJbmRleCk7cmV0dXJuIGx8fChsPXtpbnN0YW5jZTp5aShzLHUpfSxzLm5vZGVzW3Uubm9kZUluZGV4XT1sKSxsLmluc3RhbmNlfX1uPXRyKHMpLGU9JG4ocykscz1zLnBhcmVudCw0JnIuZmxhZ3MmJihzPW51bGwpfXZhciBjPW8ucm9vdC5pbmplY3Rvci5nZXQoci50b2tlbix2aSk7cmV0dXJuIGMhPT12aXx8aT09PXZpP2M6by5yb290Lm5nTW9kdWxlLmluamVjdG9yLmdldChyLnRva2VuLGkpfWZ1bmN0aW9uIF9pKHQsZSxuKXt2YXIgcjtpZihuKXI9SW4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldztlbHNlIGZvcihyPXQ7ci5wYXJlbnQmJiF0cihyKTspcj1yLnBhcmVudDtyZXR1cm4gcn1mdW5jdGlvbiB3aSh0LGUsbixyLGksbyl7aWYoMzI3Njgmbi5mbGFncyl7dmFyIGE9SW4odCxuLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7MiZhLmRlZi5mbGFncyYmKGEuc3RhdGV8PTgpfWlmKGUuaW5zdGFuY2Vbbi5iaW5kaW5nc1tyXS5uYW1lXT1pLDUyNDI4OCZuLmZsYWdzKXtvPW98fHt9O3ZhciBzPVRlLnVud3JhcCh0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtyXSk7b1tuLmJpbmRpbmdzW3JdLm5vbk1pbmlmaWVkTmFtZV09bmV3IEllKHMsaSwwIT0oMiZ0LnN0YXRlKSl9cmV0dXJuIHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdPWksb31mdW5jdGlvbiB4aSh0LGUpe2lmKHQuZGVmLm5vZGVGbGFncyZlKWZvcih2YXIgbj10LmRlZi5ub2RlcyxyPTAsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldLGE9by5wYXJlbnQ7Zm9yKCFhJiZvLmZsYWdzJmUmJkNpKHQsaSxvLmZsYWdzJmUscisrKSwwPT0oby5jaGlsZEZsYWdzJmUpJiYoaSs9by5jaGlsZENvdW50KTthJiYxJmEuZmxhZ3MmJmk9PT1hLm5vZGVJbmRleCthLmNoaWxkQ291bnQ7KWEuZGlyZWN0Q2hpbGRGbGFncyZlJiYocj1PaSh0LGEsZSxyKSksYT1hLnBhcmVudH19ZnVuY3Rpb24gT2kodCxlLG4scil7Zm9yKHZhciBpPWUubm9kZUluZGV4KzE7aTw9ZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50O2krKyl7dmFyIG89dC5kZWYubm9kZXNbaV07by5mbGFncyZuJiZDaSh0LGksby5mbGFncyZuLHIrKyksaSs9by5jaGlsZENvdW50fXJldHVybiByfWZ1bmN0aW9uIENpKHQsZSxuLHIpe3ZhciBpPUFuKHQsZSk7aWYoaSl7dmFyIG89aS5pbnN0YW5jZTtvJiYoTW4uc2V0Q3VycmVudE5vZGUodCxlKSwxMDQ4NTc2Jm4mJmtuKHQsNTEyLHIpJiZvLm5nQWZ0ZXJDb250ZW50SW5pdCgpLDIwOTcxNTImbiYmby5uZ0FmdGVyQ29udGVudENoZWNrZWQoKSw0MTk0MzA0Jm4mJmtuKHQsNzY4LHIpJiZvLm5nQWZ0ZXJWaWV3SW5pdCgpLDgzODg2MDgmbiYmby5uZ0FmdGVyVmlld0NoZWNrZWQoKSwxMzEwNzImbiYmby5uZ09uRGVzdHJveSgpKX19ZnVuY3Rpb24gU2kodCxlLG4pe3ZhciByPVtdO2Zvcih2YXIgaSBpbiBuKXIucHVzaCh7cHJvcE5hbWU6aSxiaW5kaW5nVHlwZTpuW2ldfSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDotMSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG5nQ29udGVudEluZGV4Oi0xLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sY2hpbGRDb3VudDowLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5OntpZDplLGZpbHRlcklkOm5yKGUpLGJpbmRpbmdzOnJ9LG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBFaSh0KXtmb3IodmFyIGU9dC5kZWYubm9kZU1hdGNoZWRRdWVyaWVzO3QucGFyZW50JiZlcih0KTspe3ZhciBuPXQucGFyZW50Tm9kZURlZjt0PXQucGFyZW50O2Zvcih2YXIgcj1uLm5vZGVJbmRleCtuLmNoaWxkQ291bnQsaT0wO2k8PXI7aSsrKTY3MTA4ODY0JihvPXQuZGVmLm5vZGVzW2ldKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJihvLnF1ZXJ5LmZpbHRlcklkJmUpPT09by5xdWVyeS5maWx0ZXJJZCYmUG4odCxpKS5zZXREaXJ0eSgpLCEoMSZvLmZsYWdzJiZpK28uY2hpbGRDb3VudDxuLm5vZGVJbmRleCkmJjY3MTA4ODY0Jm8uY2hpbGRGbGFncyYmNTM2ODcwOTEyJm8uY2hpbGRGbGFnc3x8KGkrPW8uY2hpbGRDb3VudCl9aWYoMTM0MjE3NzI4JnQuZGVmLm5vZGVGbGFncylmb3IoaT0wO2k8dC5kZWYubm9kZXMubGVuZ3RoO2krKyl7dmFyIG87MTM0MjE3NzI4JihvPXQuZGVmLm5vZGVzW2ldKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJlBuKHQsaSkuc2V0RGlydHkoKSxpKz1vLmNoaWxkQ291bnR9fWZ1bmN0aW9uIGtpKHQsZSl7dmFyIG49UG4odCxlLm5vZGVJbmRleCk7aWYobi5kaXJ0eSl7dmFyIHIsaT12b2lkIDA7aWYoNjcxMDg4NjQmZS5mbGFncyl7dmFyIG89ZS5wYXJlbnQucGFyZW50O2k9VGkodCxvLm5vZGVJbmRleCxvLm5vZGVJbmRleCtvLmNoaWxkQ291bnQsZS5xdWVyeSxbXSkscj1Bbih0LGUucGFyZW50Lm5vZGVJbmRleCkuaW5zdGFuY2V9ZWxzZSAxMzQyMTc3MjgmZS5mbGFncyYmKGk9VGkodCwwLHQuZGVmLm5vZGVzLmxlbmd0aC0xLGUucXVlcnksW10pLHI9dC5jb21wb25lbnQpO24ucmVzZXQoaSk7Zm9yKHZhciBhPWUucXVlcnkuYmluZGluZ3Mscz0hMSx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBsPWFbdV0sYz12b2lkIDA7c3dpdGNoKGwuYmluZGluZ1R5cGUpe2Nhc2UgMDpjPW4uZmlyc3Q7YnJlYWs7Y2FzZSAxOmM9bixzPSEwfXJbbC5wcm9wTmFtZV09Y31zJiZuLm5vdGlmeU9uQ2hhbmdlcygpfX1mdW5jdGlvbiBUaSh0LGUsbixyLGkpe2Zvcih2YXIgbz1lO288PW47bysrKXt2YXIgYT10LmRlZi5ub2Rlc1tvXSxzPWEubWF0Y2hlZFF1ZXJpZXNbci5pZF07aWYobnVsbCE9cyYmaS5wdXNoKElpKHQsYSxzKSksMSZhLmZsYWdzJiZhLmVsZW1lbnQudGVtcGxhdGUmJihhLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpPT09ci5maWx0ZXJJZCl7dmFyIHU9SW4odCxvKTtpZigoYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpPT09ci5maWx0ZXJJZCYmKFRpKHQsbysxLG8rYS5jaGlsZENvdW50LHIsaSksbys9YS5jaGlsZENvdW50KSwxNjc3NzIxNiZhLmZsYWdzKWZvcih2YXIgbD11LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgZj1sW2NdLGg9WG4oZik7aCYmaD09PXUmJlRpKGYsMCxmLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLGkpfXZhciBkPXUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO2lmKGQpZm9yKGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIHA9ZFtjXTtUaShwLDAscC5kZWYubm9kZXMubGVuZ3RoLTEscixpKX19KGEuY2hpbGRNYXRjaGVkUXVlcmllcyZyLmZpbHRlcklkKSE9PXIuZmlsdGVySWQmJihvKz1hLmNoaWxkQ291bnQpfXJldHVybiBpfWZ1bmN0aW9uIElpKHQsZSxuKXtpZihudWxsIT1uKXN3aXRjaChuKXtjYXNlIDE6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAwOnJldHVybiBuZXcgY2UoSW4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Y2FzZSAyOnJldHVybiBJbih0LGUubm9kZUluZGV4KS50ZW1wbGF0ZTtjYXNlIDM6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXI7Y2FzZSA0OnJldHVybiBBbih0LGUubm9kZUluZGV4KS5pbnN0YW5jZX19ZnVuY3Rpb24gQWkodCxlKXtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4Oi0xLGZsYWdzOjgsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDp0LGNoaWxkQ291bnQ6MCxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDp7aW5kZXg6ZX19fWZ1bmN0aW9uIGppKHQsZSxuKXt2YXIgcj1vcih0LGUsbik7ciYmY3IodCxuLm5nQ29udGVudC5pbmRleCwxLHIsbnVsbCx2b2lkIDApfWZ1bmN0aW9uIFBpKHQsZSl7cmV0dXJuIFJpKDEyOCx0LG5ldyBBcnJheShlKzEpKX1mdW5jdGlvbiBNaSh0LGUpe3JldHVybiBSaSgzMix0LG5ldyBBcnJheShlKSl9ZnVuY3Rpb24gTmkodCxlKXtmb3IodmFyIG49T2JqZWN0LmtleXMoZSkscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKyl7dmFyIGE9bltvXTtpW2VbYV1dPWF9cmV0dXJuIFJpKDY0LHQsaSl9ZnVuY3Rpb24gUmkodCxlLG4pe2Zvcih2YXIgcj1uZXcgQXJyYXkobi5sZW5ndGgpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtyW2ldPXtmbGFnczo4LG5hbWU6byxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpvLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX1yZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OmUsZmxhZ3M6dCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4Oi0xLGNoaWxkQ291bnQ6MCxiaW5kaW5nczpyLGJpbmRpbmdGbGFnczptcihyKSxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBEaSh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheShuLmxlbmd0aC0xKSxpPTE7aTxuLmxlbmd0aDtpKyspcltpLTFdPXtmbGFnczo4LG5hbWU6bnVsbCxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpuW2ldfTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6MixjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OmUsY2hpbGRDb3VudDowLGJpbmRpbmdzOnIsYmluZGluZ0ZsYWdzOjgsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0OntwcmVmaXg6blswXX0scXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gTGkodCxlLG4pe3ZhciByLGk9dC5yZW5kZXJlcjtyPWkuY3JlYXRlVGV4dChuLnRleHQucHJlZml4KTt2YXIgbz1vcih0LGUsbik7cmV0dXJuIG8mJmkuYXBwZW5kQ2hpbGQobyxyKSx7cmVuZGVyVGV4dDpyfX1mdW5jdGlvbiBGaSh0LGUpe3JldHVybihudWxsIT10P3QudG9TdHJpbmcoKToiIikrZS5zdWZmaXh9ZnVuY3Rpb24gVmkodCxlLG4scil7Zm9yKHZhciBpPTAsbz0wLGE9MCxzPTAsdT0wLGw9bnVsbCxjPW51bGwsZj0hMSxoPSExLGQ9bnVsbCxwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBtPWVbcF07aWYobS5ub2RlSW5kZXg9cCxtLnBhcmVudD1sLG0uYmluZGluZ0luZGV4PWksbS5vdXRwdXRJbmRleD1vLG0ucmVuZGVyUGFyZW50PWMsYXw9bS5mbGFncyx1fD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQpe3ZhciB5PW0uZWxlbWVudDt5LnB1YmxpY1Byb3ZpZGVycz1sP2wuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM6T2JqZWN0LmNyZWF0ZShudWxsKSx5LmFsbFByb3ZpZGVycz15LnB1YmxpY1Byb3ZpZGVycyxmPSExLGg9ITEsbS5lbGVtZW50LnRlbXBsYXRlJiYodXw9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyl9aWYoemkobCxtLGUubGVuZ3RoKSxpKz1tLmJpbmRpbmdzLmxlbmd0aCxvKz1tLm91dHB1dHMubGVuZ3RoLCFjJiYzJm0uZmxhZ3MmJihkPW0pLDIwMjI0Jm0uZmxhZ3Mpe2Z8fChmPSEwLGwuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZShsLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSxsLmVsZW1lbnQuYWxsUHJvdmlkZXJzPWwuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpO3ZhciBnPTAhPSgzMjc2OCZtLmZsYWdzKTswPT0oODE5MiZtLmZsYWdzKXx8Zz9sLmVsZW1lbnQucHVibGljUHJvdmlkZXJzW1ZuKG0ucHJvdmlkZXIudG9rZW4pXT1tOihofHwoaD0hMCxsLmVsZW1lbnQuYWxsUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUobC5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycykpLGwuZWxlbWVudC5hbGxQcm92aWRlcnNbVm4obS5wcm92aWRlci50b2tlbildPW0pLGcmJihsLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXI9bSl9aWYobD8obC5jaGlsZEZsYWdzfD1tLmZsYWdzLGwuZGlyZWN0Q2hpbGRGbGFnc3w9bS5mbGFncyxsLmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PW0ubWF0Y2hlZFF1ZXJ5SWRzLG0uZWxlbWVudCYmbS5lbGVtZW50LnRlbXBsYXRlJiYobC5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKSk6c3w9bS5mbGFncyxtLmNoaWxkQ291bnQ+MClsPW0sVWkobSl8fChjPW0pO2Vsc2UgZm9yKDtsJiZwPT09bC5ub2RlSW5kZXgrbC5jaGlsZENvdW50Oyl7dmFyIHY9bC5wYXJlbnQ7diYmKHYuY2hpbGRGbGFnc3w9bC5jaGlsZEZsYWdzLHYuY2hpbGRNYXRjaGVkUXVlcmllc3w9bC5jaGlsZE1hdGNoZWRRdWVyaWVzKSxjPShsPXYpJiZVaShsKT9sLnJlbmRlclBhcmVudDpsfX1yZXR1cm57ZmFjdG9yeTpudWxsLG5vZGVGbGFnczphLHJvb3ROb2RlRmxhZ3M6cyxub2RlTWF0Y2hlZFF1ZXJpZXM6dSxmbGFnczp0LG5vZGVzOmUsdXBkYXRlRGlyZWN0aXZlczpufHxMbix1cGRhdGVSZW5kZXJlcjpyfHxMbixoYW5kbGVFdmVudDpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gZVtuXS5lbGVtZW50LmhhbmRsZUV2ZW50KHQscixpKX0sYmluZGluZ0NvdW50Omksb3V0cHV0Q291bnQ6byxsYXN0UmVuZGVyUm9vdE5vZGU6ZH19ZnVuY3Rpb24gVWkodCl7cmV0dXJuIDAhPSgxJnQuZmxhZ3MpJiZudWxsPT09dC5lbGVtZW50Lm5hbWV9ZnVuY3Rpb24gemkodCxlLG4pe3ZhciByPWUuZWxlbWVudCYmZS5lbGVtZW50LnRlbXBsYXRlO2lmKHIpe2lmKCFyLmxhc3RSZW5kZXJSb290Tm9kZSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IEVtYmVkZGVkIHRlbXBsYXRlcyB3aXRob3V0IG5vZGVzIGFyZSBub3QgYWxsb3dlZCEiKTtpZihyLmxhc3RSZW5kZXJSb290Tm9kZSYmMTY3NzcyMTYmci5sYXN0UmVuZGVyUm9vdE5vZGUuZmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBMYXN0IHJvb3Qgbm9kZSBvZiBhIHRlbXBsYXRlIGNhbid0IGhhdmUgZW1iZWRkZWQgdmlld3MsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZigyMDIyNCZlLmZsYWdzJiYwPT0oMSYodD90LmZsYWdzOjApKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFN0YXRpY1Byb3ZpZGVyL0RpcmVjdGl2ZSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGVsZW1lbnRzIG9yIGFuY2hvcnMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZihlLnF1ZXJ5KXtpZig2NzEwODg2NCZlLmZsYWdzJiYoIXR8fDA9PSgxNjM4NCZ0LmZsYWdzKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBDb250ZW50IFF1ZXJ5IG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZGlyZWN0aXZlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKDEzNDIxNzcyOCZlLmZsYWdzJiZ0KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogVmlldyBRdWVyeSBub2RlcyBoYXZlIHRvIGJlIHRvcCBsZXZlbCBub2RlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKGUuY2hpbGRDb3VudCl7dmFyIGk9dD90Lm5vZGVJbmRleCt0LmNoaWxkQ291bnQ6bi0xO2lmKGUubm9kZUluZGV4PD1pJiZlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ+aSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGNoaWxkQ291bnQgb2Ygbm9kZSBsZWFkcyBvdXRzaWRlIG9mIHBhcmVudCwgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfX1mdW5jdGlvbiBCaSh0LGUsbixyKXt2YXIgaT1xaSh0LnJvb3QsdC5yZW5kZXJlcix0LGUsbik7cmV0dXJuIFlpKGksdC5jb21wb25lbnQsciksR2koaSksaX1mdW5jdGlvbiBIaSh0LGUsbil7dmFyIHI9cWkodCx0LnJlbmRlcmVyLG51bGwsbnVsbCxlKTtyZXR1cm4gWWkocixuLG4pLEdpKHIpLHJ9ZnVuY3Rpb24gV2kodCxlLG4scil7dmFyIGksbz1lLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlO3JldHVybiBpPW8/dC5yb290LnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihyLG8pOnQucm9vdC5yZW5kZXJlcixxaSh0LnJvb3QsaSx0LGUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlcixuKX1mdW5jdGlvbiBxaSh0LGUsbixyLGkpe3ZhciBvPW5ldyBBcnJheShpLm5vZGVzLmxlbmd0aCksYT1pLm91dHB1dENvdW50P25ldyBBcnJheShpLm91dHB1dENvdW50KTpudWxsO3JldHVybntkZWY6aSxwYXJlbnQ6bix2aWV3Q29udGFpbmVyUGFyZW50Om51bGwscGFyZW50Tm9kZURlZjpyLGNvbnRleHQ6bnVsbCxjb21wb25lbnQ6bnVsbCxub2RlczpvLHN0YXRlOjEzLHJvb3Q6dCxyZW5kZXJlcjplLG9sZFZhbHVlczpuZXcgQXJyYXkoaS5iaW5kaW5nQ291bnQpLGRpc3Bvc2FibGVzOmEsaW5pdEluZGV4Oi0xfX1mdW5jdGlvbiBZaSh0LGUsbil7dC5jb21wb25lbnQ9ZSx0LmNvbnRleHQ9bn1mdW5jdGlvbiBHaSh0KXt2YXIgZTt0cih0KSYmKGU9SW4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLnBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Zvcih2YXIgbj10LmRlZixyPXQubm9kZXMsaT0wO2k8bi5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgbz1uLm5vZGVzW2ldO01uLnNldEN1cnJlbnROb2RlKHQsaSk7dmFyIGE9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmby5mbGFncyl7Y2FzZSAxOnZhciBzPV9yKHQsZSxvKSx1PXZvaWQgMDtpZigzMzU1NDQzMiZvLmZsYWdzKXt2YXIgbD1zcihvLmVsZW1lbnQuY29tcG9uZW50Vmlldyk7dT1Nbi5jcmVhdGVDb21wb25lbnRWaWV3KHQsbyxsLHMpfXdyKHQsdSxvLHMpLGE9e3JlbmRlckVsZW1lbnQ6cyxjb21wb25lbnRWaWV3OnUsdmlld0NvbnRhaW5lcjpudWxsLHRlbXBsYXRlOm8uZWxlbWVudC50ZW1wbGF0ZT9xcih0LG8pOnZvaWQgMH0sMTY3NzcyMTYmby5mbGFncyYmKGEudmlld0NvbnRhaW5lcj16cih0LG8sYSkpO2JyZWFrO2Nhc2UgMjphPUxpKHQsZSxvKTticmVhaztjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgMjU2OihhPXJbaV0pfHw0MDk2Jm8uZmxhZ3N8fChhPXtpbnN0YW5jZTpoaSh0LG8pfSk7YnJlYWs7Y2FzZSAxNjphPXtpbnN0YW5jZTpkaSh0LG8pfTticmVhaztjYXNlIDE2Mzg0OihhPXJbaV0pfHwoYT17aW5zdGFuY2U6cGkodCxvKX0pLDMyNzY4Jm8uZmxhZ3MmJllpKEluKHQsby5wYXJlbnQubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEuaW5zdGFuY2UsYS5pbnN0YW5jZSk7YnJlYWs7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmE9e3ZhbHVlOnZvaWQgMH07YnJlYWs7Y2FzZSA2NzEwODg2NDpjYXNlIDEzNDIxNzcyODphPW5ldyBoZTticmVhaztjYXNlIDg6amkodCxlLG8pLGE9dm9pZCAwfXJbaV09YX1ubyh0LGVvLkNyZWF0ZVZpZXdOb2RlcyksYW8odCwyMDEzMjY1OTIsMjY4NDM1NDU2LDApfWZ1bmN0aW9uIFFpKHQpe1hpKHQpLE1uLnVwZGF0ZURpcmVjdGl2ZXModCwxKSxybyh0LGVvLkNoZWNrTm9DaGFuZ2VzKSxNbi51cGRhdGVSZW5kZXJlcih0LDEpLG5vKHQsZW8uQ2hlY2tOb0NoYW5nZXMpLHQuc3RhdGUmPS05N31mdW5jdGlvbiBLaSh0KXsxJnQuc3RhdGU/KHQuc3RhdGUmPS0yLHQuc3RhdGV8PTIpOnQuc3RhdGUmPS0zLEVuKHQsMCwyNTYpLFhpKHQpLE1uLnVwZGF0ZURpcmVjdGl2ZXModCwwKSxybyh0LGVvLkNoZWNrQW5kVXBkYXRlKSxhbyh0LDY3MTA4ODY0LDUzNjg3MDkxMiwwKTt2YXIgZT1Fbih0LDI1Niw1MTIpO3hpKHQsMjA5NzE1MnwoZT8xMDQ4NTc2OjApKSxNbi51cGRhdGVSZW5kZXJlcih0LDApLG5vKHQsZW8uQ2hlY2tBbmRVcGRhdGUpLGFvKHQsMTM0MjE3NzI4LDUzNjg3MDkxMiwwKSx4aSh0LDgzODg2MDh8KChlPUVuKHQsNTEyLDc2OCkpPzQxOTQzMDQ6MCkpLDImdC5kZWYuZmxhZ3MmJih0LnN0YXRlJj0tOSksdC5zdGF0ZSY9LTk3LEVuKHQsNzY4LDEwMjQpfWZ1bmN0aW9uIFppKHQsZSxuLGksbyxhLHMsdSxsLGMsZixoLGQpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsLGMsZil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLmxlbmd0aCxkPSExO3JldHVybiBoPjAmJk9yKHQsZSwwLG4pJiYoZD0hMCksaD4xJiZPcih0LGUsMSxyKSYmKGQ9ITApLGg+MiYmT3IodCxlLDIsaSkmJihkPSEwKSxoPjMmJk9yKHQsZSwzLG8pJiYoZD0hMCksaD40JiZPcih0LGUsNCxhKSYmKGQ9ITApLGg+NSYmT3IodCxlLDUscykmJihkPSEwKSxoPjYmJk9yKHQsZSw2LHUpJiYoZD0hMCksaD43JiZPcih0LGUsNyxsKSYmKGQ9ITApLGg+OCYmT3IodCxlLDgsYykmJihkPSEwKSxoPjkmJk9yKHQsZSw5LGYpJiYoZD0hMCksZH0odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpe3ZhciBoPSExLGQ9ZS5iaW5kaW5ncyxwPWQubGVuZ3RoO2lmKHA+MCYmWW4odCxlLDAsbikmJihoPSEwKSxwPjEmJlluKHQsZSwxLHIpJiYoaD0hMCkscD4yJiZZbih0LGUsMixpKSYmKGg9ITApLHA+MyYmWW4odCxlLDMsbykmJihoPSEwKSxwPjQmJlluKHQsZSw0LGEpJiYoaD0hMCkscD41JiZZbih0LGUsNSxzKSYmKGg9ITApLHA+NiYmWW4odCxlLDYsdSkmJihoPSEwKSxwPjcmJlluKHQsZSw3LGwpJiYoaD0hMCkscD44JiZZbih0LGUsOCxjKSYmKGg9ITApLHA+OSYmWW4odCxlLDksZikmJihoPSEwKSxoKXt2YXIgbT1lLnRleHQucHJlZml4O3A+MCYmKG0rPUZpKG4sZFswXSkpLHA+MSYmKG0rPUZpKHIsZFsxXSkpLHA+MiYmKG0rPUZpKGksZFsyXSkpLHA+MyYmKG0rPUZpKG8sZFszXSkpLHA+NCYmKG0rPUZpKGEsZFs0XSkpLHA+NSYmKG0rPUZpKHMsZFs1XSkpLHA+NiYmKG0rPUZpKHUsZFs2XSkpLHA+NyYmKG0rPUZpKGwsZFs3XSkpLHA+OCYmKG0rPUZpKGMsZFs4XSkpLHA+OSYmKG0rPUZpKGYsZFs5XSkpO3ZhciB5PVRuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZSh5LG0pfXJldHVybiBofSh0LGUsbixyLGksbyxhLHMsdSxsLGMsZik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpe3ZhciBoPUFuKHQsZS5ub2RlSW5kZXgpLGQ9aC5pbnN0YW5jZSxwPSExLG09dm9pZCAwLHk9ZS5iaW5kaW5ncy5sZW5ndGg7cmV0dXJuIHk+MCYmcW4odCxlLDAsbikmJihwPSEwLG09d2kodCxoLGUsMCxuLG0pKSx5PjEmJnFuKHQsZSwxLHIpJiYocD0hMCxtPXdpKHQsaCxlLDEscixtKSkseT4yJiZxbih0LGUsMixpKSYmKHA9ITAsbT13aSh0LGgsZSwyLGksbSkpLHk+MyYmcW4odCxlLDMsbykmJihwPSEwLG09d2kodCxoLGUsMyxvLG0pKSx5PjQmJnFuKHQsZSw0LGEpJiYocD0hMCxtPXdpKHQsaCxlLDQsYSxtKSkseT41JiZxbih0LGUsNSxzKSYmKHA9ITAsbT13aSh0LGgsZSw1LHMsbSkpLHk+NiYmcW4odCxlLDYsdSkmJihwPSEwLG09d2kodCxoLGUsNix1LG0pKSx5PjcmJnFuKHQsZSw3LGwpJiYocD0hMCxtPXdpKHQsaCxlLDcsbCxtKSkseT44JiZxbih0LGUsOCxjKSYmKHA9ITAsbT13aSh0LGgsZSw4LGMsbSkpLHk+OSYmcW4odCxlLDksZikmJihwPSEwLG09d2kodCxoLGUsOSxmLG0pKSxtJiZkLm5nT25DaGFuZ2VzKG0pLDY1NTM2JmUuZmxhZ3MmJmtuKHQsMjU2LGUubm9kZUluZGV4KSYmZC5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZkLm5nRG9DaGVjaygpLHB9KHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLGQ9ITEscD1oLmxlbmd0aDtpZihwPjAmJlluKHQsZSwwLG4pJiYoZD0hMCkscD4xJiZZbih0LGUsMSxyKSYmKGQ9ITApLHA+MiYmWW4odCxlLDIsaSkmJihkPSEwKSxwPjMmJlluKHQsZSwzLG8pJiYoZD0hMCkscD40JiZZbih0LGUsNCxhKSYmKGQ9ITApLHA+NSYmWW4odCxlLDUscykmJihkPSEwKSxwPjYmJlluKHQsZSw2LHUpJiYoZD0hMCkscD43JiZZbih0LGUsNyxsKSYmKGQ9ITApLHA+OCYmWW4odCxlLDgsYykmJihkPSEwKSxwPjkmJlluKHQsZSw5LGYpJiYoZD0hMCksZCl7dmFyIG09am4odCxlLm5vZGVJbmRleCkseT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnk9bmV3IEFycmF5KGgubGVuZ3RoKSxwPjAmJih5WzBdPW4pLHA+MSYmKHlbMV09cikscD4yJiYoeVsyXT1pKSxwPjMmJih5WzNdPW8pLHA+NCYmKHlbNF09YSkscD41JiYoeVs1XT1zKSxwPjYmJih5WzZdPXUpLHA+NyYmKHlbN109bCkscD44JiYoeVs4XT1jKSxwPjkmJih5WzldPWYpO2JyZWFrO2Nhc2UgNjQ6eT17fSxwPjAmJih5W2hbMF0ubmFtZV09bikscD4xJiYoeVtoWzFdLm5hbWVdPXIpLHA+MiYmKHlbaFsyXS5uYW1lXT1pKSxwPjMmJih5W2hbM10ubmFtZV09bykscD40JiYoeVtoWzRdLm5hbWVdPWEpLHA+NSYmKHlbaFs1XS5uYW1lXT1zKSxwPjYmJih5W2hbNl0ubmFtZV09dSkscD43JiYoeVtoWzddLm5hbWVdPWwpLHA+OCYmKHlbaFs4XS5uYW1lXT1jKSxwPjkmJih5W2hbOV0ubmFtZV09Zik7YnJlYWs7Y2FzZSAxMjg6dmFyIGc9bjtzd2l0Y2gocCl7Y2FzZSAxOnk9Zy50cmFuc2Zvcm0obik7YnJlYWs7Y2FzZSAyOnk9Zy50cmFuc2Zvcm0ocik7YnJlYWs7Y2FzZSAzOnk9Zy50cmFuc2Zvcm0ocixpKTticmVhaztjYXNlIDQ6eT1nLnRyYW5zZm9ybShyLGksbyk7YnJlYWs7Y2FzZSA1Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSk7YnJlYWs7Y2FzZSA2Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzKTticmVhaztjYXNlIDc6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsdSk7YnJlYWs7Y2FzZSA4Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLHUsbCk7YnJlYWs7Y2FzZSA5Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLHUsbCxjKTticmVhaztjYXNlIDEwOnk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLHUsbCxjLGYpfX1tLnZhbHVlPXl9cmV0dXJuIGR9KHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKTtkZWZhdWx0OnRocm93InVucmVhY2hhYmxlIn19KHQsZSxpLG8sYSxzLHUsbCxjLGYsaCxkKTpmdW5jdGlvbih0LGUsbil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ITEsaT0wO2k8bi5sZW5ndGg7aSsrKU9yKHQsZSxpLG5baV0pJiYocj0hMCk7cmV0dXJuIHJ9KHQsZSxuKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ZS5iaW5kaW5ncyxpPSExLG89MDtvPG4ubGVuZ3RoO28rKylZbih0LGUsbyxuW29dKSYmKGk9ITApO2lmKGkpe3ZhciBhPSIiO2ZvcihvPTA7bzxuLmxlbmd0aDtvKyspYSs9RmkobltvXSxyW29dKTthPWUudGV4dC5wcmVmaXgrYTt2YXIgcz1Ubih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUocyxhKX1yZXR1cm4gaX0odCxlLG4pO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9QW4odCxlLm5vZGVJbmRleCksaT1yLmluc3RhbmNlLG89ITEsYT12b2lkIDAscz0wO3M8bi5sZW5ndGg7cysrKXFuKHQsZSxzLG5bc10pJiYobz0hMCxhPXdpKHQscixlLHMsbltzXSxhKSk7cmV0dXJuIGEmJmkubmdPbkNoYW5nZXMoYSksNjU1MzYmZS5mbGFncyYma24odCwyNTYsZS5ub2RlSW5kZXgpJiZpLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJmkubmdEb0NoZWNrKCksb30odCxlLG4pO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT1lLmJpbmRpbmdzLG89ITEsYT0wO2E8bi5sZW5ndGg7YSsrKVluKHQsZSxhLG5bYV0pJiYobz0hMCk7aWYobyl7dmFyIHM9am4odCxlLm5vZGVJbmRleCksdT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnU9bjticmVhaztjYXNlIDY0OmZvcih1PXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl1W2lbYV0ubmFtZV09blthXTticmVhaztjYXNlIDEyODp2YXIgbD1uWzBdLGM9bi5zbGljZSgxKTt1PWwudHJhbnNmb3JtLmFwcGx5KGwsT2JqZWN0KHIuZCkoYykpfXMudmFsdWU9dX1yZXR1cm4gb30odCxlLG4pO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLGkpfWZ1bmN0aW9uIFhpKHQpe3ZhciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPWUubm9kZXNbbl07aWYoNCZyLmZsYWdzKXt2YXIgaT1Jbih0LG4pLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pW29dO2Euc3RhdGV8PTMyLEtuKGEsdCl9fWVsc2UgMD09KDQmci5jaGlsZEZsYWdzKSYmKG4rPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uICRpKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmLGgpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsLGMsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGg7aD4wJiZHbih0LGUsMCxuKSxoPjEmJkduKHQsZSwxLHIpLGg+MiYmR24odCxlLDIsaSksaD4zJiZHbih0LGUsMyxvKSxoPjQmJkduKHQsZSw0LGEpLGg+NSYmR24odCxlLDUscyksaD42JiZHbih0LGUsNix1KSxoPjcmJkduKHQsZSw3LGwpLGg+OCYmR24odCxlLDgsYyksaD45JiZHbih0LGUsOSxmKX0odCxlLHIsaSxvLGEscyx1LGwsYyxmLGgpOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKylHbih0LGUscixuW3JdKX0odCxlLHIpLCExfWZ1bmN0aW9uIEppKHQsZSl7aWYoUG4odCxlLm5vZGVJbmRleCkuZGlydHkpdGhyb3cgTm4oTW4uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBub3QgZGlydHkiLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBkaXJ0eSIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIHRvKHQpe2lmKCEoMTI4JnQuc3RhdGUpKXtpZihybyh0LGVvLkRlc3Ryb3kpLG5vKHQsZW8uRGVzdHJveSkseGkodCwxMzEwNzIpLHQuZGlzcG9zYWJsZXMpZm9yKHZhciBlPTA7ZTx0LmRpc3Bvc2FibGVzLmxlbmd0aDtlKyspdC5kaXNwb3NhYmxlc1tlXSgpOyFmdW5jdGlvbih0KXtpZigxNiZ0LnN0YXRlKXt2YXIgZT1Ybih0KTtpZihlKXt2YXIgbj1lLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztuJiYoRHIobixuLmluZGV4T2YodCkpLE1uLmRpcnR5UGFyZW50UXVlcmllcyh0KSl9fX0odCksdC5yZW5kZXJlci5kZXN0cm95Tm9kZSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07MSZyLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoSW4odCxuKS5yZW5kZXJFbGVtZW50KToyJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShUbih0LG4pLnJlbmRlclRleHQpOig2NzEwODg2NCZyLmZsYWdzfHwxMzQyMTc3Mjgmci5mbGFncykmJlBuKHQsbikuZGVzdHJveSgpfX0odCksdHIodCkmJnQucmVuZGVyZXIuZGVzdHJveSgpLHQuc3RhdGV8PTEyOH19dmFyIGVvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kiLHR9KHt9KTtmdW5jdGlvbiBubyh0LGUpe3ZhciBuPXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT1uLm5vZGVzW3JdOzMzNTU0NDMyJmkuZmxhZ3M/aW8oSW4odCxyKS5jb21wb25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZpLmNoaWxkRmxhZ3MpJiYocis9aS5jaGlsZENvdW50KX19ZnVuY3Rpb24gcm8odCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylmb3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIGk9bi5ub2Rlc1tyXTtpZigxNjc3NzIxNiZpLmZsYWdzKWZvcih2YXIgbz1Jbih0LHIpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYT0wO2E8by5sZW5ndGg7YSsrKWlvKG9bYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmaS5jaGlsZEZsYWdzKSYmKHIrPWkuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIGlvKHQsZSl7dmFyIG49dC5zdGF0ZTtzd2l0Y2goZSl7Y2FzZSBlby5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9RaSh0KTo2NCZuJiZvbyh0LGVvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGVvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/UWkodCk6NjQmbiYmb28odCxlKSk7YnJlYWs7Y2FzZSBlby5DaGVja0FuZFVwZGF0ZTowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9LaSh0KTo2NCZuJiZvbyh0LGVvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGVvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/S2kodCk6NjQmbiYmb28odCxlKSk7YnJlYWs7Y2FzZSBlby5EZXN0cm95OnRvKHQpO2JyZWFrO2Nhc2UgZW8uQ3JlYXRlVmlld05vZGVzOkdpKHQpfX1mdW5jdGlvbiBvbyh0LGUpe3JvKHQsZSksbm8odCxlKX1mdW5jdGlvbiBhbyh0LGUsbixyKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciBpPXQuZGVmLm5vZGVzLmxlbmd0aCxvPTA7bzxpO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb107aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dpdGNoKE1uLnNldEN1cnJlbnROb2RlKHQsYS5ub2RlSW5kZXgpLHIpe2Nhc2UgMDpraSh0LGEpO2JyZWFrO2Nhc2UgMTpKaSh0LGEpfWEuY2hpbGRGbGFncyZlJiZhLmNoaWxkRmxhZ3Mmbnx8KG8rPWEuY2hpbGRDb3VudCl9fXZhciBzbz0hMTtmdW5jdGlvbiB1byh0LGUsbixyLGksbyl7cmV0dXJuIEhpKGNvKHQsaSxpLmluamVjdG9yLmdldCh1ZSksZSxuKSxyLG8pfWZ1bmN0aW9uIGxvKHQsZSxuLHIsaSxvKXt2YXIgYT1pLmluamVjdG9yLmdldCh1ZSkscz1jbyh0LGksbmV3IHFvKGEpLGUsbiksdT13byhyKTtyZXR1cm4gSG8oQW8uY3JlYXRlLEhpLG51bGwsW3MsdSxvXSl9ZnVuY3Rpb24gY28odCxlLG4scixpKXt2YXIgbz1lLmluamVjdG9yLmdldChTbiksYT1lLmluamVjdG9yLmdldChhdCk7cmV0dXJue25nTW9kdWxlOmUsaW5qZWN0b3I6dCxwcm9qZWN0YWJsZU5vZGVzOnIsc2VsZWN0b3JPck5vZGU6aSxzYW5pdGl6ZXI6byxyZW5kZXJlckZhY3Rvcnk6bixyZW5kZXJlcjpuLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCksZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIGZvKHQsZSxuLHIpe3ZhciBpPXdvKG4pO3JldHVybiBIbyhBby5jcmVhdGUsQmksbnVsbCxbdCxlLGkscl0pfWZ1bmN0aW9uIGhvKHQsZSxuLHIpe3JldHVybiBuPWdvLmdldChlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIucHJvdmlkZXIudG9rZW4pfHx3byhuKSxIbyhBby5jcmVhdGUsV2ksbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIHBvKHQsZSxuLHIpe3JldHVybiAkcih0LGUsbixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT0hMSxuPSExO3JldHVybiAwPT09bW8uc2l6ZT97aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufToodC5wcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1tby5nZXQodC50b2tlbik7Mzg0MCZ0LmZsYWdzJiZyJiYoZT0hMCxuPW58fHIuZGVwcmVjYXRlZEJlaGF2aW9yKX0pLHQubW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lvLmZvckVhY2goZnVuY3Rpb24ocixpKXtpLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluPT09dCYmKGU9ITAsbj1ufHxyLmRlcHJlY2F0ZWRCZWhhdmlvcil9KX0pLHtoYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59KX0odCksbj1lLmhhc0RlcHJlY2F0ZWRPdmVycmlkZXM7cmV0dXJuIGUuaGFzT3ZlcnJpZGVzPyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQucHJvdmlkZXJzLmxlbmd0aDtlKyspe3ZhciByPXQucHJvdmlkZXJzW2VdO24mJihyLmZsYWdzfD00MDk2KTt2YXIgaT1tby5nZXQoci50b2tlbik7aSYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xpLmZsYWdzLHIuZGVwcz1pcihpLmRlcHMpLHIudmFsdWU9aS52YWx1ZSl9aWYoeW8uc2l6ZT4wKXt2YXIgbz1uZXcgU2V0KHQubW9kdWxlcyk7eW8uZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG8uaGFzKHIubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4pKXt2YXIgaT17dG9rZW46cixmbGFnczplLmZsYWdzfChuPzQwOTY6MCksZGVwczppcihlLmRlcHMpLHZhbHVlOmUudmFsdWUsaW5kZXg6dC5wcm92aWRlcnMubGVuZ3RofTt0LnByb3ZpZGVycy5wdXNoKGkpLHQucHJvdmlkZXJzQnlLZXlbVm4ocildPWl9fSl9fSh0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBMbn0pKSx0KTp0fShyKSl9dmFyIG1vPW5ldyBNYXAseW89bmV3IE1hcCxnbz1uZXcgTWFwO2Z1bmN0aW9uIHZvKHQpe21vLnNldCh0LnRva2VuLHQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuJiZ0LnRva2VuLm5nSW5qZWN0YWJsZURlZiYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9rZW4ubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4mJnlvLnNldCh0LnRva2VuLHQpfWZ1bmN0aW9uIGJvKHQsZSl7dmFyIG49c3Ioc3IoZS52aWV3RGVmRmFjdG9yeSkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRWaWV3KTtnby5zZXQodCxuKX1mdW5jdGlvbiBfbygpe21vLmNsZWFyKCkseW8uY2xlYXIoKSxnby5jbGVhcigpfWZ1bmN0aW9uIHdvKHQpe2lmKDA9PT1tby5zaXplKXJldHVybiB0O3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPW51bGwscj0wO3I8dC5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT10Lm5vZGVzW3JdOzEmaS5mbGFncyYmKG49aSksbiYmMzg0MCZpLmZsYWdzJiZtby5oYXMoaS5wcm92aWRlci50b2tlbikmJihlLnB1c2gobi5ub2RlSW5kZXgpLG49bnVsbCl9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBMbn0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIodCxlW25dKTtyZXR1cm4gdDtmdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuPWUrMTtuPHQubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5ub2Rlc1tuXTtpZigxJnIuZmxhZ3MpcmV0dXJuO2lmKDM4NDAmci5mbGFncyl7dmFyIGk9ci5wcm92aWRlcixvPW1vLmdldChpLnRva2VuKTtvJiYoci5mbGFncz0tMzg0MSZyLmZsYWdzfG8uZmxhZ3MsaS5kZXBzPWlyKG8uZGVwcyksaS52YWx1ZT1vLnZhbHVlKX19fX1mdW5jdGlvbiB4byh0LGUsbixyLGksbyxhLHMsdSxsLGMsZixoKXt2YXIgZD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gWmkodCxkLG4scixpLG8sYSxzLHUsbCxjLGYsaCksMjI0JmQuZmxhZ3M/am4odCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rpb24gT28odCxlLG4scixpLG8sYSxzLHUsbCxjLGYsaCl7dmFyIGQ9dC5kZWYubm9kZXNbZV07cmV0dXJuICRpKHQsZCxuLHIsaSxvLGEscyx1LGwsYyxmLGgpLDIyNCZkLmZsYWdzP2puKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIENvKHQpe3JldHVybiBIbyhBby5kZXRlY3RDaGFuZ2VzLEtpLG51bGwsW3RdKX1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gSG8oQW8uY2hlY2tOb0NoYW5nZXMsUWksbnVsbCxbdF0pfWZ1bmN0aW9uIEVvKHQpe3JldHVybiBIbyhBby5kZXN0cm95LHRvLG51bGwsW3RdKX12YXIga28sVG8sSW8sQW89ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5jcmVhdGU9MF09ImNyZWF0ZSIsdFt0LmRldGVjdENoYW5nZXM9MV09ImRldGVjdENoYW5nZXMiLHRbdC5jaGVja05vQ2hhbmdlcz0yXT0iY2hlY2tOb0NoYW5nZXMiLHRbdC5kZXN0cm95PTNdPSJkZXN0cm95Iix0W3QuaGFuZGxlRXZlbnQ9NF09ImhhbmRsZUV2ZW50Iix0fSh7fSk7ZnVuY3Rpb24gam8odCxlKXtUbz10LElvPWV9ZnVuY3Rpb24gUG8odCxlLG4scil7cmV0dXJuIGpvKHQsZSksSG8oQW8uaGFuZGxlRXZlbnQsdC5kZWYuaGFuZGxlRXZlbnQsbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIE1vKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRG4oQW9ba29dKTtyZXR1cm4gam8odCxWbyh0LDApKSx0LmRlZi51cGRhdGVEaXJlY3RpdmVzKGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9W10sbz0zO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTNdPWFyZ3VtZW50c1tvXTt2YXIgYT10LmRlZi5ub2Rlc1tuXTtyZXR1cm4gMD09PWU/Um8odCxhLHIsaSk6RG8odCxhLHIsaSksMTYzODQmYS5mbGFncyYmam8odCxWbyh0LG4pKSwyMjQmYS5mbGFncz9qbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIE5vKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRG4oQW9ba29dKTtyZXR1cm4gam8odCxVbyh0LDApKSx0LmRlZi51cGRhdGVSZW5kZXJlcihmdW5jdGlvbih0LG4scil7Zm9yKHZhciBpPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWlbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP1JvKHQsYSxyLGkpOkRvKHQsYSxyLGkpLDMmYS5mbGFncyYmam8odCxVbyh0LG4pKSwyMjQmYS5mbGFncz9qbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIFJvKHQsZSxuLGkpe2lmKFppLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShbdCxlLG5dLGkpKSl7dmFyIG89MT09PW4/aVswXTppO2lmKDE2Mzg0JmUuZmxhZ3Mpe2Zvcih2YXIgYT17fSxzPTA7czxlLmJpbmRpbmdzLmxlbmd0aDtzKyspe3ZhciB1PWUuYmluZGluZ3Nbc10sbD1vW3NdOzgmdS5mbGFncyYmKGFbKGQ9dS5ub25NaW5pZmllZE5hbWUsIm5nLXJlZmxlY3QtIisoZD1kLnJlcGxhY2UoL1skQF0vZywiXyIpLnJlcGxhY2UoTG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIi0iK3RbMV0udG9Mb3dlckNhc2UoKX0pKSldPUZvKGwpKX12YXIgYz1lLnBhcmVudCxmPUluKHQsYy5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7aWYoYy5lbGVtZW50Lm5hbWUpZm9yKHZhciBoIGluIGEpbnVsbCE9KGw9YVtoXSk/dC5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZixoLGwpOnQucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGYsaCk7ZWxzZSB0LnJlbmRlcmVyLnNldFZhbHVlKGYsImJpbmRpbmdzPSIrSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpKX19dmFyIGR9ZnVuY3Rpb24gRG8odCxlLG4saSl7JGkuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKFt0LGUsbl0saSkpfXZhciBMbz0vKFtBLVpdKS9nO2Z1bmN0aW9uIEZvKHQpe3RyeXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCkuc2xpY2UoMCwzMCk6dH1jYXRjaCh0KXtyZXR1cm4iW0VSUk9SXSBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUifX1mdW5jdGlvbiBWbyh0LGUpe2Zvcih2YXIgbj1lO248dC5kZWYubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07aWYoMTYzODQmci5mbGFncyYmci5iaW5kaW5ncyYmci5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gVW8odCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dO2lmKDMmci5mbGFncyYmci5iaW5kaW5ncyYmci5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9dmFyIHpvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMubm9kZUluZGV4PWUsbnVsbD09ZSYmKHRoaXMubm9kZUluZGV4PWU9MCksdGhpcy5ub2RlRGVmPXQuZGVmLm5vZGVzW2VdO2Zvcih2YXIgbj10aGlzLm5vZGVEZWYscj10O24mJjA9PSgxJm4uZmxhZ3MpOyluPW4ucGFyZW50O2lmKCFuKWZvcig7IW4mJnI7KW49JG4ocikscj1yLnBhcmVudDt0aGlzLmVsRGVmPW4sdGhpcy5lbFZpZXc9cn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbE9yQ29tcFZpZXciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSW4odGhpcy5lbFZpZXcsdGhpcy5lbERlZi5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXd8fHRoaXMudmlld30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEdyKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbXBvbmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbE9yQ29tcFZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5lbERlZilmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmdC5wdXNoKG4ucHJvdmlkZXIudG9rZW4pLGUrPW4uY2hpbGRDb3VudH1yZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmVsRGVmKXtCbyh0aGlzLmVsVmlldyx0aGlzLmVsRGVmLHQpO2Zvcih2YXIgZT10aGlzLmVsRGVmLm5vZGVJbmRleCsxO2U8PXRoaXMuZWxEZWYubm9kZUluZGV4K3RoaXMuZWxEZWYuY2hpbGRDb3VudDtlKyspe3ZhciBuPXRoaXMuZWxWaWV3LmRlZi5ub2Rlc1tlXTsyMDIyNCZuLmZsYWdzJiZCbyh0aGlzLmVsVmlldyxuLHQpLGUrPW4uY2hpbGRDb3VudH19cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRSZW5kZXJFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCl7Zm9yKDt0JiYhdHIodCk7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQucGFyZW50P0luKHQucGFyZW50LCRuKHQpLm5vZGVJbmRleCk6bnVsbH0odGhpcy5lbE9yQ29tcFZpZXcpO3JldHVybiB0P3QucmVuZGVyRWxlbWVudDp2b2lkIDB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZW5kZXJOb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDImdGhpcy5ub2RlRGVmLmZsYWdzP0puKHRoaXMudmlldyx0aGlzLm5vZGVEZWYpOkpuKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmxvZ0Vycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9W10sbz0xO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTFdPWFyZ3VtZW50c1tvXTsyJnRoaXMubm9kZURlZi5mbGFncz8oZT10aGlzLnZpZXcuZGVmLG49dGhpcy5ub2RlRGVmLm5vZGVJbmRleCk6KGU9dGhpcy5lbFZpZXcuZGVmLG49dGhpcy5lbERlZi5ub2RlSW5kZXgpO3ZhciBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9MDtyPD1lO3IrKykzJnQubm9kZXNbcl0uZmxhZ3MmJm4rKztyZXR1cm4gbn0oZSxuKSxzPS0xO2UuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybisrcz09PWE/KGU9dC5lcnJvcikuYmluZC5hcHBseShlLE9iamVjdChyLmQpKFt0XSxpKSk6TG47dmFyIGV9KSxzPGEmJih0LmVycm9yKCJJbGxlZ2FsIHN0YXRlOiB0aGUgVmlld0RlZmluaXRpb25GYWN0b3J5IGRpZCBub3QgY2FsbCB0aGUgbG9nZ2VyISIpLHQuZXJyb3IuYXBwbHkodCxPYmplY3Qoci5kKShpKSkpfSx0fSgpO2Z1bmN0aW9uIEJvKHQsZSxuKXtmb3IodmFyIHIgaW4gZS5yZWZlcmVuY2VzKW5bcl09SWkodCxlLGUucmVmZXJlbmNlc1tyXSl9ZnVuY3Rpb24gSG8odCxlLG4scil7dmFyIGk9a28sbz1UbyxhPUlvO3RyeXtrbz10O3ZhciBzPWUuYXBwbHkobixyKTtyZXR1cm4gVG89byxJbz1hLGtvPWksc31jYXRjaCh0KXtpZihydCh0KXx8IVRvKXRocm93IHQ7dGhyb3cgZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodC50b1N0cmluZygpKSksUm4odCxlKSx0fSh0LFdvKCkpfX1mdW5jdGlvbiBXbygpe3JldHVybiBUbz9uZXcgem8oVG8sSW8pOm51bGx9dmFyIHFvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBZbyh0aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSkpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmU/dGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZSgpOlByb21pc2UucmVzb2x2ZShudWxsKX0sdH0oKSxZbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZGF0YT10aGlzLmRlbGVnYXRlLmRhdGF9cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3lOb2RlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0KXtDZS5kZWxldGUodC5uYXRpdmVOb2RlKX0oU2UodCkpLHRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUmJnRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUodCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpLHI9V28oKTtpZihyKXt2YXIgaT1uZXcgd2UobixudWxsLHIpO2kubmFtZT10LEVlKGkpfXJldHVybiBufSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KSxuPVdvKCk7cmV0dXJuIG4mJkVlKG5ldyBfZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpLG49V28oKTtyZXR1cm4gbiYmRWUobmV3IF9lKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1TZSh0KSxyPVNlKGUpO24mJnImJm4gaW5zdGFuY2VvZiB3ZSYmbi5hZGRDaGlsZChyKSx0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U2UodCksaT1TZShlKSxvPVNlKG4pO3ImJmkmJnIgaW5zdGFuY2VvZiB3ZSYmci5pbnNlcnRCZWZvcmUobyxpKSx0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49U2UodCkscj1TZShlKTtuJiZyJiZuIGluc3RhbmNlb2Ygd2UmJm4ucmVtb3ZlQ2hpbGQociksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZCh0LGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpLG49V28oKTtyZXR1cm4gbiYmRWUobmV3IHdlKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVNlKHQpO2kmJmkgaW5zdGFuY2VvZiB3ZSYmKGkuYXR0cmlidXRlc1tyP3IrIjoiK2U6ZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U2UodCk7ciYmciBpbnN0YW5jZW9mIHdlJiYoci5hdHRyaWJ1dGVzW24/bisiOiIrZTplXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49U2UodCk7biYmbiBpbnN0YW5jZW9mIHdlJiYobi5jbGFzc2VzW2VdPSEwKSx0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49U2UodCk7biYmbiBpbnN0YW5jZW9mIHdlJiYobi5jbGFzc2VzW2VdPSExKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVNlKHQpO2kmJmkgaW5zdGFuY2VvZiB3ZSYmKGkuc3R5bGVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1TZSh0KTtyJiZyIGluc3RhbmNlb2Ygd2UmJihyLnN0eWxlc1tlXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVNlKHQpO3ImJnIgaW5zdGFuY2VvZiB3ZSYmKHIucHJvcGVydGllc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPVNlKHQpO3ImJnIubGlzdGVuZXJzLnB1c2gobmV3IGZ1bmN0aW9uKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5jYWxsYmFjaz1lfShlLG4pKX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHR9KCk7ZnVuY3Rpb24gR28odCxlLG4pe3JldHVybiBuZXcgUW8odCxlLG4pfXZhciBRbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkubW9kdWxlVHlwZT1lLGkuX2Jvb3RzdHJhcENvbXBvbmVudHM9bixpLl9uZ01vZHVsZURlZkZhY3Rvcnk9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXshZnVuY3Rpb24oKXtpZighc28pe3NvPSEwO3ZhciB0PXRlKCk/e3NldEN1cnJlbnROb2RlOmpvLGNyZWF0ZVJvb3RWaWV3OmxvLGNyZWF0ZUVtYmVkZGVkVmlldzpmbyxjcmVhdGVDb21wb25lbnRWaWV3OmhvLGNyZWF0ZU5nTW9kdWxlUmVmOnBvLG92ZXJyaWRlUHJvdmlkZXI6dm8sb3ZlcnJpZGVDb21wb25lbnRWaWV3OmJvLGNsZWFyT3ZlcnJpZGVzOl9vLGNoZWNrQW5kVXBkYXRlVmlldzpDbyxjaGVja05vQ2hhbmdlc1ZpZXc6U28sZGVzdHJveVZpZXc6RW8sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB6byh0LGUpfSxoYW5kbGVFdmVudDpQbyx1cGRhdGVEaXJlY3RpdmVzOk1vLHVwZGF0ZVJlbmRlcmVyOk5vfTp7c2V0Q3VycmVudE5vZGU6ZnVuY3Rpb24oKXt9LGNyZWF0ZVJvb3RWaWV3OnVvLGNyZWF0ZUVtYmVkZGVkVmlldzpCaSxjcmVhdGVDb21wb25lbnRWaWV3OldpLGNyZWF0ZU5nTW9kdWxlUmVmOiRyLG92ZXJyaWRlUHJvdmlkZXI6TG4sb3ZlcnJpZGVDb21wb25lbnRWaWV3OkxuLGNsZWFyT3ZlcnJpZGVzOkxuLGNoZWNrQW5kVXBkYXRlVmlldzpLaSxjaGVja05vQ2hhbmdlc1ZpZXc6UWksZGVzdHJveVZpZXc6dG8sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB6byh0LGUpfSxoYW5kbGVFdmVudDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdC5kZWYuaGFuZGxlRXZlbnQodCxlLG4scil9LHVwZGF0ZURpcmVjdGl2ZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlRGlyZWN0aXZlcygwPT09ZT94bzpPbyx0KX0sdXBkYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlUmVuZGVyZXIoMD09PWU/eG86T28sdCl9fTtNbi5zZXRDdXJyZW50Tm9kZT10LnNldEN1cnJlbnROb2RlLE1uLmNyZWF0ZVJvb3RWaWV3PXQuY3JlYXRlUm9vdFZpZXcsTW4uY3JlYXRlRW1iZWRkZWRWaWV3PXQuY3JlYXRlRW1iZWRkZWRWaWV3LE1uLmNyZWF0ZUNvbXBvbmVudFZpZXc9dC5jcmVhdGVDb21wb25lbnRWaWV3LE1uLmNyZWF0ZU5nTW9kdWxlUmVmPXQuY3JlYXRlTmdNb2R1bGVSZWYsTW4ub3ZlcnJpZGVQcm92aWRlcj10Lm92ZXJyaWRlUHJvdmlkZXIsTW4ub3ZlcnJpZGVDb21wb25lbnRWaWV3PXQub3ZlcnJpZGVDb21wb25lbnRWaWV3LE1uLmNsZWFyT3ZlcnJpZGVzPXQuY2xlYXJPdmVycmlkZXMsTW4uY2hlY2tBbmRVcGRhdGVWaWV3PXQuY2hlY2tBbmRVcGRhdGVWaWV3LE1uLmNoZWNrTm9DaGFuZ2VzVmlldz10LmNoZWNrTm9DaGFuZ2VzVmlldyxNbi5kZXN0cm95Vmlldz10LmRlc3Ryb3lWaWV3LE1uLnJlc29sdmVEZXA9YmksTW4uY3JlYXRlRGVidWdDb250ZXh0PXQuY3JlYXRlRGVidWdDb250ZXh0LE1uLmhhbmRsZUV2ZW50PXQuaGFuZGxlRXZlbnQsTW4udXBkYXRlRGlyZWN0aXZlcz10LnVwZGF0ZURpcmVjdGl2ZXMsTW4udXBkYXRlUmVuZGVyZXI9dC51cGRhdGVSZW5kZXJlcixNbi5kaXJ0eVBhcmVudFF1ZXJpZXM9RWl9fSgpO3ZhciBlPXNyKHRoaXMuX25nTW9kdWxlRGVmRmFjdG9yeSk7cmV0dXJuIE1uLmNyZWF0ZU5nTW9kdWxlUmVmKHRoaXMubW9kdWxlVHlwZSx0fHxOLk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0oUHQpO2Z1bmN0aW9uIEtvKHQsZSxuKXt0IT1lJiYkbyhuKX1mdW5jdGlvbiBabyh0LGUpe251bGwhPXQmJiRvKGUpfWZ1bmN0aW9uIFhvKHQsZSl7bnVsbD09dCYmJG8oZSl9ZnVuY3Rpb24gJG8odCl7dGhyb3cgbmV3IEVycm9yKCJBU1NFUlRJT04gRVJST1I6ICIrdCl9ZnVuY3Rpb24gSm8odCxlLG4scil7dmFyIGk9cj9lOm47aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTIpZVtuKzFdLmNhbGwodFtlW25dXSl9KHQsaSl9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGUmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5uZ0Rldk1vZGU9ITApLCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKHNlbGYubmdEZXZNb2RlPSEwKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmKGdsb2JhbC5uZ0Rldk1vZGU9ITApKTt2YXIgdGEsZWEsbmEscmEsaWEsb2EsYWEsc2EsdWEsbGEsY2E9Il9fbmdIb3N0TE5vZGVfXyIsZmE9UHJvbWlzZS5yZXNvbHZlKG51bGwpLGhhPVswLDBdLGRhPW51bGwscGE9ITE7ZnVuY3Rpb24gbWEodCxlKXt2YXIgbj1kYTtyZXR1cm4gc2E9dCYmdC5kYXRhLHVhPXQmJnQuZGlyZWN0aXZlcyxpYT10JiZ0LnRWaWV3LmRhdGEsYWE9dCYmMT09KDEmdC5mbGFncyksdGE9dCYmdC5yZW5kZXJlcix0JiZ0LmJpbmRpbmdJbmRleDwwJiYodC5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nU3RhcnRJbmRleCksbnVsbCE9ZSYmKG5hPWUscmE9ITApLGRhPXQsb2E9dCYmdC5xdWVyaWVzLG59ZnVuY3Rpb24geWEodCl7cGF8fEpvKHVhLGRhLnRWaWV3LnZpZXdIb29rcyxkYS50Vmlldy52aWV3Q2hlY2tIb29rcyxhYSksZGEuZmxhZ3MmPS02LGRhLmxpZmVjeWNsZVN0YWdlPTEsZGEuYmluZGluZ0luZGV4PS0xLG1hKHQsbnVsbCl9ZnVuY3Rpb24gZ2EoKXtiYSgpO3ZhciB0PWRhLnRWaWV3O3QuZmlyc3RUZW1wbGF0ZVBhc3M9ITEsdmEodC5ob3N0QmluZGluZ3MpLGZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpZm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXhhKHRbZV0sdFtlKzFdKX0odC5jb21wb25lbnRzKX1mdW5jdGlvbiB2YSh0KXtpZihudWxsIT10KWZvcih2YXIgZT1kYS50Vmlldy5kaXJlY3RpdmVzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl0saT1lW3JdO2kuaG9zdEJpbmRpbmdzJiZpLmhvc3RCaW5kaW5ncyhyLHRbbisxXSl9fWZ1bmN0aW9uIGJhKCl7aWYoIXBhKXt2YXIgdD1kYS50VmlldzsoZnVuY3Rpb24odCxlLG4pezE9PT10LmxpZmVjeWNsZVN0YWdlJiYoSm8odC5kaXJlY3RpdmVzLGUuaW5pdEhvb2tzLGUuY2hlY2tIb29rcyxuKSx0LmxpZmVjeWNsZVN0YWdlPTIpfSkoZGEsdCxhYSksSm8odWEsdC5jb250ZW50SG9va3MsdC5jb250ZW50Q2hlY2tIb29rcyxhYSl9fWZ1bmN0aW9uIF9hKHQsZSxuLHIsaSxvKXt2YXIgYSxzLHUsbCxjLGYsaCxkLHAsbT1yYSx5PW5hO3RyeXtyYT0hMCxuYT1udWxsO3ZhciBnPTI7bnVsbD09dCYmKHM9bnVsbCx1PTIsbD1udWxsLGM9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybntwYXJlbnQ6ZGEsaWQ6LTEsZmxhZ3M6MTEsbm9kZTpudWxsLGRhdGE6W10sZGlyZWN0aXZlczpudWxsLHRWaWV3Om4sY2xlYW51cDpudWxsLHJlbmRlcmVyOmUsY2hpbGQ6bnVsbCx0YWlsOm51bGwsbmV4dDpudWxsLGJpbmRpbmdTdGFydEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSx0ZW1wbGF0ZTpyLGNvbnRleHQ6aSxkeW5hbWljVmlld0NvdW50OjAsbGlmZWN5Y2xlU3RhZ2U6MSxxdWVyaWVzOm51bGwsaW5qZWN0b3I6ZGEmJmRhLmluamVjdG9yfX0oMCxyLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5uZ1ByaXZhdGVEYXRhfHwodC5uZ1ByaXZhdGVEYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6W10sZGlyZWN0aXZlczpudWxsLGZpcnN0VGVtcGxhdGVQYXNzOiEwLGluaXRIb29rczpudWxsLGNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwscGlwZURlc3Ryb3lIb29rczpudWxsLGhvc3RCaW5kaW5nczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCxwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUsY3VycmVudE1hdGNoZXM6bnVsbH19KGUsbikpfShlLGl8fG51bGwsb3x8bnVsbCksZSxuKSxmPXJhP25hOm5hJiZuYS5wYXJlbnQsaD0ocmE/b2E6bmEmJm5hLnF1ZXJpZXMpfHxmJiZmLnF1ZXJpZXMmJmYucXVlcmllcy5jaGlsZCgpLHA9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybnt0eXBlOnQsbmF0aXZlOnIsdmlldzplLHBhcmVudDpuLGNoaWxkOm51bGwsbmV4dDpudWxsLG5vZGVJbmplY3RvcjpuP24ubm9kZUluamVjdG9yOm51bGwsZGF0YTppLHF1ZXJpZXM6byx0Tm9kZTpudWxsLHBOZXh0T3JQYXJlbnQ6bnVsbCxkeW5hbWljTENvbnRhaW5lck5vZGU6bnVsbH19KHUsZGEsZixsLChkPW51bGwhPWMpP2M6bnVsbCxoKSwyPT0oMiZ1KSYmZCYmKG5nRGV2TW9kZSYmWm8oYy5ub2RlLCJMVmlldy5ub2RlIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksYy5ub2RlPXApLG51bGwhPXMmJihuZ0Rldk1vZGUmJmZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9c2EpLEtvKGUubGVuZ3RoLHQsImluZGV4ICIrdCsiIGV4cGVjdGVkIHRvIGJlIGF0IHRoZSBlbmQgb2YgYXJyIChsZW5ndGggIitlLmxlbmd0aCsiKSIpfShzKSxzYVtzXT1wLHM+PWlhLmxlbmd0aD9pYVtzXT1udWxsOnAudE5vZGU9aWFbc10scmE/KG9hPW51bGwsbmEudmlldyE9PWRhJiYyIT09bmEudHlwZXx8KG5nRGV2TW9kZSYmWm8obmEuY2hpbGQsInByZXZpb3VzT3JQYXJlbnROb2RlJ3MgY2hpbGQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0LiIpLG5hLmNoaWxkPXApKTpuYSYmKG5nRGV2TW9kZSYmWm8obmEubmV4dCwicHJldmlvdXNPclBhcmVudE5vZGUncyBuZXh0IHByb3BlcnR5IHNob3VsZCBub3QgaGF2ZSBiZWVuIHNldCAiK3MrIi4iKSxuYS5uZXh0PXAsbmEuZHluYW1pY0xDb250YWluZXJOb2RlJiYobmEuZHluYW1pY0xDb250YWluZXJOb2RlLm5leHQ9cCkpKSxuYT1wLHJhPSEwLHQ9cCxnPTEpLGE9bWEodC5kYXRhLHQpLGUoZyxuKSxnYSgpLHdhKCl9ZmluYWxseXt5YShhKSxyYT1tLG5hPXl9cmV0dXJuIHR9ZnVuY3Rpb24gd2EoKXtmb3IodmFyIHQ9ZGEuY2hpbGQ7bnVsbCE9PXQ7dD10Lm5leHQpaWYoMCE9PXQuZHluYW1pY1ZpZXdDb3VudCYmdC52aWV3cylmb3IodmFyIGU9dCxuPTA7bjxlLnZpZXdzLmxlbmd0aDtuKyspe3ZhciByPWUudmlld3Nbbl07X2EocixyLmRhdGEudGVtcGxhdGUsci5kYXRhLmNvbnRleHQsdGEpfX1mdW5jdGlvbiB4YSh0LGUpe25nRGV2TW9kZSYmU2EoZSk7dmFyIG4scixpPXNhW2VdO25nRGV2TW9kZSYmKHI9MyxYbyhuPWksInNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIG5vZGUiKSxLbyhuLnR5cGUsciwic2hvdWxkIGJlIGEgIitmdW5jdGlvbih0KXtyZXR1cm4gMT09dD8iUHJvamVjdGlvbiI6MD09dD8iQ29udGFpbmVyIjoyPT10PyJWaWV3IjozPT10PyJFbGVtZW50IjoiPHVua25vd24+In0ocikpKSxuZ0Rldk1vZGUmJlhvKGkuZGF0YSwiQ29tcG9uZW50J3MgaG9zdCBub2RlIHNob3VsZCBoYXZlIGFuIExWaWV3IGF0dGFjaGVkLiIpO3ZhciBvLGE9aS5kYXRhOzg9PSg4JmEuZmxhZ3MpJiY2JmEuZmxhZ3MmJihuZ0Rldk1vZGUmJlNhKHQsdWEpLENhKGEsaSxkYS50Vmlldy5kaXJlY3RpdmVzW3RdLChvPXVhW3RdLEFycmF5LmlzQXJyYXkobyk/b1swXTpvKSkpfWZ1bmN0aW9uIE9hKHQpe3ZhciBlPUVhKHQpO25nRGV2TW9kZSYmWG8oZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLENhKGUuZGF0YSxlLGUudmlldy50Vmlldy5kaXJlY3RpdmVzW2UudE5vZGUuZmxhZ3M+PjEzXSx0KX1mdW5jdGlvbiBDYSh0LGUsbixyKXt2YXIgaT1tYSh0LGUpLG89bi50ZW1wbGF0ZTt0cnl7bygxJnQuZmxhZ3M/MzoyLHIpLGdhKCksd2EoKX1maW5hbGx5e3lhKGkpfX1mdW5jdGlvbiBTYSh0LGUpe251bGw9PWUmJihlPXNhKSx0Pj0oZT9lLmxlbmd0aDowKSYmJG8oImluZGV4IGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgZGF0YSBpbmRleCIpfWZ1bmN0aW9uIEVhKHQpe25nRGV2TW9kZSYmWG8odCwiZXhwZWN0aW5nIGNvbXBvbmVudCBnb3QgbnVsbCIpO3ZhciBlPXRbY2FdO3JldHVybiBuZ0Rldk1vZGUmJlhvKHQsIm9iamVjdCBpcyBub3QgYSBjb21wb25lbnQiKSxlfWxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXc9dCx0aGlzLmNvbnRleHQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldENvbXBvbmVudENvbnRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92aWV3PXQsdGhpcy5jb250ZXh0PWV9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9dDtudWxsIT1lLnBhcmVudDspZS5mbGFnc3w9NCxlPWUucGFyZW50O3ZhciBuLHI7ZS5mbGFnc3w9NCxuZ0Rldk1vZGUmJlhvKGUuY29udGV4dCwicm9vdENvbnRleHQiKSwobj1lLmNvbnRleHQpLmNsZWFuPT1mYSYmKG4uY2xlYW49bmV3IFByb21pc2UoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0pLG4uc2NoZWR1bGVyKGZ1bmN0aW9uKCl7dmFyIHQsZTtlPUVhKCh0PWZ1bmN0aW9uKHQpe25nRGV2TW9kZSYmWG8odCwiY29tcG9uZW50Iik7Zm9yKHZhciBlPUVhKHQpLnZpZXc7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9KG4uY29tcG9uZW50KSkuY29udGV4dC5jb21wb25lbnQpLG5nRGV2TW9kZSYmWG8oZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLGZ1bmN0aW9uKG4scixpLG8pe3ZhciBhPW1hKHQsZSk7dHJ5e2VhLmJlZ2luJiZlYS5iZWdpbigpLGJhKCksdmEoaGEpLHhhKDAsMCl9ZmluYWxseXtlYS5lbmQmJmVhLmVuZCgpLHlhKGEpfX0oKSxyKG51bGwpLG4uY2xlYW49ZmF9KSl9KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzJj0tOX0sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzfD04fSx0LnByb3RvdHlwZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7T2EodGhpcy5jb250ZXh0KX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7cGE9ITA7dHJ5e09hKHQpfWZpbmFsbHl7cGE9ITF9fSh0aGlzLmNvbnRleHQpfSx0fSgpLE9iamVjdChyLmIpKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1sYS5jYWxsKHRoaXMsdC5kYXRhLG4pfHx0aGlzO3JldHVybiByLl9sVmlld05vZGU9dCxyfSxsYSl9LERLVGI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sRWhtazpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHIsaT1uKCJlaWhzIik7ZnVuY3Rpb24gbygpe3RyeXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2godCl7cmV0dXJuIGkuYS5lPXQsaS5hfX1mdW5jdGlvbiBhKHQpe3JldHVybiByPXQsb319LCJFbjgrIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKX0sIkYvWEwiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJua1k3IiksaT1uKCJJVVRiIiksbz1uKCJHNUoxIiksYT1uKCJQVThMIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3N3aXRjaChPYmplY3Qoci5hKShuKT90LnBvcCgpOm49dm9pZCAwLHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIE9iamVjdChvLmIpKG4pO2Nhc2UgMTpyZXR1cm4gbj9PYmplY3QoaS5hKSh0LG4pOk9iamVjdChhLmEpKHRbMF0pO2RlZmF1bHQ6cmV0dXJuIE9iamVjdChpLmEpKHQsbil9fX0sRkZPbzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIHI9bigibXJTRyIpLGk9bigiMkJkaiIpLG89bigiNmFodyIpLGE9bigicHVnVCIpLHM9bigiTC9WOSIpLHU9bigiaUx4USIpLGw9bigiREtUYiIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChpLnN5bmNFcnJvclZhbHVlPW51bGwsaS5zeW5jRXJyb3JUaHJvd249ITEsaS5zeW5jRXJyb3JUaHJvd2FibGU9ITEsaS5pc1N0b3BwZWQ9ITEsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmkuZGVzdGluYXRpb249by5hO2JyZWFrO2Nhc2UgMTppZighZSl7aS5kZXN0aW5hdGlvbj1vLmE7YnJlYWt9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZihoKGUpKXt2YXIgYT1lW3MuYV0oKTtpLnN5bmNFcnJvclRocm93YWJsZT1hLnN5bmNFcnJvclRocm93YWJsZSxpLmRlc3RpbmF0aW9uPWEsYS5hZGQoaSl9ZWxzZSBpLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyBmKGksZSk7YnJlYWt9ZGVmYXVsdDppLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyBmKGksZSxuLHIpfXJldHVybiBpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZVtzLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT1uZXcgZSh0LG4scik7cmV0dXJuIGkuc3luY0Vycm9yVGhyb3dhYmxlPSExLGl9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc1N0b3BwZWR8fHRoaXMuX25leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZUFuZFJlY3ljbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnQsZT10aGlzLl9wYXJlbnRzO3JldHVybiB0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9wYXJlbnRzPW51bGwsdGhpcy51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkPSExLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuX3BhcmVudD10LHRoaXMuX3BhcmVudHM9ZSx0aGlzfSxlfShhLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixhKXt2YXIgcyx1PXQuY2FsbCh0aGlzKXx8dGhpczt1Ll9wYXJlbnRTdWJzY3JpYmVyPWU7dmFyIGw9dTtyZXR1cm4gT2JqZWN0KGkuYSkobik/cz1uOm4mJihzPW4ubmV4dCxyPW4uZXJyb3IsYT1uLmNvbXBsZXRlLG4hPT1vLmEmJihsPU9iamVjdC5jcmVhdGUobiksT2JqZWN0KGkuYSkobC51bnN1YnNjcmliZSkmJnUuYWRkKGwudW5zdWJzY3JpYmUuYmluZChsKSksbC51bnN1YnNjcmliZT11LnVuc3Vic2NyaWJlLmJpbmQodSkpKSx1Ll9jb250ZXh0PWwsdS5fbmV4dD1zLHUuX2Vycm9yPXIsdS5fY29tcGxldGU9YSx1fXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZS5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fX3RyeU9yU2V0RXJyb3IoZSx0aGlzLl9uZXh0LHQpJiZ0aGlzLnVuc3Vic2NyaWJlKCk6dGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fbmV4dCx0KX19LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcixuPXUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nO2lmKHRoaXMuX2Vycm9yKW4mJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZSBpZihlLnN5bmNFcnJvclRocm93YWJsZSluPyhlLnN5bmNFcnJvclZhbHVlPXQsZS5zeW5jRXJyb3JUaHJvd249ITApOk9iamVjdChsLmEpKHQpLHRoaXMudW5zdWJzY3JpYmUoKTtlbHNle2lmKHRoaXMudW5zdWJzY3JpYmUoKSxuKXRocm93IHQ7T2JqZWN0KGwuYSkodCl9fX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtpZih0aGlzLl9jb21wbGV0ZSl7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29tcGxldGUuY2FsbCh0Ll9jb250ZXh0KX07dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLG4pLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKG4pLHRoaXMudW5zdWJzY3JpYmUoKSl9ZWxzZSB0aGlzLnVuc3Vic2NyaWJlKCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yVW5zdWI9ZnVuY3Rpb24odCxlKXt0cnl7dC5jYWxsKHRoaXMuX2NvbnRleHQsZSl9Y2F0Y2godCl7aWYodGhpcy51bnN1YnNjcmliZSgpLHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7T2JqZWN0KGwuYSkodCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yU2V0RXJyb3I9ZnVuY3Rpb24odCxlLG4pe2lmKCF1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyBuZXcgRXJyb3IoImJhZCBjYWxsIik7dHJ5e2UuY2FsbCh0aGlzLl9jb250ZXh0LG4pfWNhdGNoKGUpe3JldHVybiB1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz8odC5zeW5jRXJyb3JWYWx1ZT1lLHQuc3luY0Vycm9yVGhyb3duPSEwLCEwKTooT2JqZWN0KGwuYSkoZSksITApfXJldHVybiExfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO3RoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9wYXJlbnRTdWJzY3JpYmVyPW51bGwsdC51bnN1YnNjcmliZSgpfSxlfShjKTtmdW5jdGlvbiBoKHQpe3JldHVybiB0IGluc3RhbmNlb2YgY3x8InN5bmNFcnJvclRocm93YWJsZSJpbiB0JiZ0W3MuYV19fSxGVlN5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9ZnVuY3Rpb24oKXt9LGk9ZnVuY3Rpb24oKXt9LG89ZnVuY3Rpb24oKXt9LGE9ZnVuY3Rpb24oKXt9LHM9ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24oKXt9fSxGeGIxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCIrdEo0Iiksbz1uKCJTNVhRIiksYT1uKCJ1NjdEIikscz1uKCJKY1J2IiksdT1uKCIyZVBsIiksbD1uKCIvV1l2IiksYz1uKCJNY1NvIiksZj1uKCJFbjgrIiksaD1uKCJ4VGxhIiksZD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2Ygci5hKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5faXNTY2FsYXI/KGUubmV4dCh0LnZhbHVlKSx2b2lkIGUuY29tcGxldGUoKSk6dC5zdWJzY3JpYmUoZSl9O2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2guYV0pcmV0dXJuIE9iamVjdChzLmEpKHQpO2lmKE9iamVjdCh1LmEpKHQpKXJldHVybiBPYmplY3QoaS5hKSh0KTtpZihPYmplY3QobC5hKSh0KSlyZXR1cm4gT2JqZWN0KG8uYSkodCk7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbZi5hXSlyZXR1cm4gT2JqZWN0KGEuYSkodCk7dmFyIGU9T2JqZWN0KGMuYSkodCk/ImFuIGludmFsaWQgb2JqZWN0IjoiJyIrdCsiJyI7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIrZSsiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIEFycmF5LCBvciBJdGVyYWJsZS4iKX19LEZ6cWM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bmV3IGkubygiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChpLlYpKHIuZCl9fSksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgaS5tLHQmJih0aGlzLnZhbHVlPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8KHQuZG9jdW1lbnRFbGVtZW50P3QuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKG8sOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxzPWZ1bmN0aW9uKCl7fX0sRzVKMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCI2YmxGIiksaT1uZXcgci5hKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbXBsZXRlKCl9KTtmdW5jdGlvbiBvKHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgci5hKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfSl9KHQpOml9fSxHaTNpOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIiksbz1uKCJUMURNIik7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1vLmEpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IHModCxlKSl9fXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZHVlVGltZT10LHRoaXMuc2NoZWR1bGVyPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLmR1ZVRpbWUsdGhpcy5zY2hlZHVsZXIpKX0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmR1ZVRpbWU9bixpLnNjaGVkdWxlcj1yLGkuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwsaS5sYXN0VmFsdWU9bnVsbCxpLmhhc1ZhbHVlPSExLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMubGFzdFZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCx0aGlzLmFkZCh0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj10aGlzLnNjaGVkdWxlci5zY2hlZHVsZShsLHRoaXMuZHVlVGltZSx0aGlzKSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVib3VuY2VkTmV4dCgpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuZGVib3VuY2VkTmV4dD1mdW5jdGlvbigpe2lmKHRoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMuaGFzVmFsdWUpe3ZhciB0PXRoaXMubGFzdFZhbHVlO3RoaXMubGFzdFZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9fSxlLnByb3RvdHlwZS5jbGVhckRlYm91bmNlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb247bnVsbCE9PXQmJih0aGlzLnJlbW92ZSh0KSx0LnVuc3Vic2NyaWJlKCksdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCl9LGV9KGkuYSk7ZnVuY3Rpb24gbCh0KXt0LmRlYm91bmNlZE5leHQoKX19LElVVGI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIjZibEYiKSxpPW4oInB1Z1QiKSxvPW4oIit0SjQiKTtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcj1uZXcgaS5hLG89MDtyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe28hPT10Lmxlbmd0aD8obi5uZXh0KHRbbysrXSksbi5jbG9zZWR8fHIuYWRkKHRoaXMuc2NoZWR1bGUoKSkpOm4uY29tcGxldGUoKX0pKSxyfTpPYmplY3Qoby5hKSh0KSl9fSxJcDBSOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigibXJTRyIpLG89ZnVuY3Rpb24oKXt9LGE9bmV3IHIubygiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKSxzPWZ1bmN0aW9uKCl7fSx1PW5ldyByLm8oImFwcEJhc2VIcmVmIiksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49dGhpczt0aGlzLl9zdWJqZWN0PW5ldyByLm0sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT1lO3ZhciBpPXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj10LnN0cmlwVHJhaWxpbmdTbGFzaChjKGkpKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5Lm9uUG9wU3RhdGUoZnVuY3Rpb24odCl7bi5fc3ViamVjdC5lbWl0KHt1cmw6bi5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSl9cmV0dXJuIHQucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLm5vcm1hbGl6ZSh0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnBhdGgodCkpfSx0LnByb3RvdHlwZS5pc0N1cnJlbnRQYXRoRXF1YWxUbz1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0iIiksdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrdC5ub3JtYWxpemVRdWVyeVBhcmFtcyhuKSl9LHQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZS5zdGFydHNXaXRoKHQpP2Uuc3Vic3RyaW5nKHQubGVuZ3RoKTplfSh0aGlzLl9iYXNlSHJlZixjKGUpKSl9LHQucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIi8iIT09dFswXSYmKHQ9Ii8iK3QpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHQpfSx0LnByb3RvdHlwZS5nbz1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHVzaFN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5yZXBsYWNlU3RhdGUobiwiIix0LGUpfSx0LnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5mb3J3YXJkKCl9LHQucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6dCxlcnJvcjplLGNvbXBsZXRlOm59KX0sdC5ub3JtYWxpemVRdWVyeVBhcmFtcz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIj8iIT09dFswXT8iPyIrdDp0fSx0LmpvaW5XaXRoU2xhc2g9ZnVuY3Rpb24odCxlKXtpZigwPT10Lmxlbmd0aClyZXR1cm4gZTtpZigwPT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj0wO3JldHVybiB0LmVuZHNXaXRoKCIvIikmJm4rKyxlLnN0YXJ0c1dpdGgoIi8iKSYmbisrLDI9PW4/dCtlLnN1YnN0cmluZygxKToxPT1uP3QrZTp0KyIvIitlfSx0LnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8jfFw/fCQvKSxuPWUmJmUuaW5kZXh8fHQubGVuZ3RoO3JldHVybiB0LnNsaWNlKDAsbi0oIi8iPT09dFtuLTFdPzE6MCkpK3Quc2xpY2Uobil9LHR9KCk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGxhdGZvcm1Mb2NhdGlvbj1lLHIuX2Jhc2VIcmVmPSIiLG51bGwhPW4mJihyLl9iYXNlSHJlZj1uKSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1lJiYoZT0iIyIpLGUubGVuZ3RoPjA/ZS5zdWJzdHJpbmcoMSk6ZX0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPWwuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KTtyZXR1cm4gZS5sZW5ndGg+MD8iIyIrZTplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitsLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTswPT1pLmxlbmd0aCYmKGk9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxlLGkpfSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitsLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTswPT1pLmxlbmd0aCYmKGk9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLGkpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO2lmKHIuX3BsYXRmb3JtTG9jYXRpb249ZSxudWxsPT1uJiYobj1yLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKSxudWxsPT1uKXRocm93IG5ldyBFcnJvcigiTm8gYmFzZSBocmVmIHNldC4gUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIEFQUF9CQVNFX0hSRUYgdG9rZW4gb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC4iKTtyZXR1cm4gci5fYmFzZUhyZWY9bixyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBsLmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsdCl9LGUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrbC5ub3JtYWxpemVRdWVyeVBhcmFtcyh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksbj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJnQ/IiIrZStuOmV9LGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2wubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rbC5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLGkpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksZD12b2lkIDAscD1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGRdLFtbIkFNIiwiUE0iXSxkLGRdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLGQsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGQsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixkLCJ7MX0gJ2F0JyB7MH0iLGRdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiJCIsIlVTIERvbGxhciIse30sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLmFicyh0KSksbj10LnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PW4/MTo1fV0sbT17fSx5PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuWmVybz0wXT0iWmVybyIsdFt0Lk9uZT0xXT0iT25lIix0W3QuVHdvPTJdPSJUd28iLHRbdC5GZXc9M109IkZldyIsdFt0Lk1hbnk9NF09Ik1hbnkiLHRbdC5PdGhlcj01XT0iT3RoZXIiLHR9KHt9KSxnPW5ldyByLm8oIlVzZVY0UGx1cmFscyIpLHY9ZnVuY3Rpb24oKXt9LGI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5sb2NhbGU9ZSxyLmRlcHJlY2F0ZWRQbHVyYWxGbj1uLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0UGx1cmFsQ2F0ZWdvcnk9ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5kZXByZWNhdGVkUGx1cmFsRm4/dGhpcy5kZXByZWNhdGVkUGx1cmFsRm4oZXx8dGhpcy5sb2NhbGUsdCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSxuPW1bZV07aWYobilyZXR1cm4gbjt2YXIgcj1lLnNwbGl0KCItIilbMF07aWYobj1tW3JdKXJldHVybiBuO2lmKCJlbiI9PT1yKXJldHVybiBwO3Rocm93IG5ldyBFcnJvcignTWlzc2luZyBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJyt0KyciLicpfSh0KVsxOF19KGV8fHRoaXMubG9jYWxlKSh0KSl7Y2FzZSB5Llplcm86cmV0dXJuInplcm8iO2Nhc2UgeS5PbmU6cmV0dXJuIm9uZSI7Y2FzZSB5LlR3bzpyZXR1cm4idHdvIjtjYXNlIHkuRmV3OnJldHVybiJmZXciO2Nhc2UgeS5NYW55OnJldHVybiJtYW55IjtkZWZhdWx0OnJldHVybiJvdGhlciJ9fSxlfSh2KTtmdW5jdGlvbiBfKHQsZSl7ZT1lbmNvZGVVUklDb21wb25lbnQoZSk7dHJ5e2Zvcih2YXIgbj1PYmplY3QoaS5lKSh0LnNwbGl0KCI7IikpLHI9bi5uZXh0KCk7IXIuZG9uZTtyPW4ubmV4dCgpKXt2YXIgbz1yLnZhbHVlLGE9by5pbmRleE9mKCI9Iikscz1PYmplY3QoaS5jKSgtMT09YT9bbywiIl06W28uc2xpY2UoMCxhKSxvLnNsaWNlKGErMSldLDIpLHU9c1sxXTtpZihzWzBdLnRyaW0oKT09PWUpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1KX19Y2F0Y2godCl7bD17ZXJyb3I6dH19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGM9bi5yZXR1cm4pJiZjLmNhbGwobil9ZmluYWxseXtpZihsKXRocm93IGwuZXJyb3J9fXJldHVybiBudWxsO3ZhciBsLGN9dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX2l0ZXJhYmxlRGlmZmVycz10LHRoaXMuX2tleVZhbHVlRGlmZmVycz1lLHRoaXMuX25nRWw9bix0aGlzLl9yZW5kZXJlcj1yLHRoaXMuX2luaXRpYWxDbGFzc2VzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2luaXRpYWxDbGFzc2VzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTpbXSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX3Jhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTp0LHRoaXMuX3Jhd0NsYXNzJiYoT2JqZWN0KHIuUmEpKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7dmFyIHQ9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7dCYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXModCl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7dmFyIGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fSx0LnByb3RvdHlwZS5fYXBwbHlLZXlWYWx1ZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXt0LnByZXZpb3VzVmFsdWUmJmUuX3RvZ2dsZUNsYXNzKHQua2V5LCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlJdGVyYWJsZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lml0ZW0pdGhyb3cgbmV3IEVycm9yKCJOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICIrT2JqZWN0KHIuZmIpKHQuaXRlbSkpO2UuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMCl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5pdGVtLCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCEwKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKG4sISF0W25dKX0pKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMSl9KSl9LHQucHJvdG90eXBlLl90b2dnbGVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7KHQ9dC50cmltKCkpJiZ0LnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbih0KXtlP24uX3JlbmRlcmVyLmFkZENsYXNzKG4uX25nRWwubmF0aXZlRWxlbWVudCx0KTpuLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCl9KX0sdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9bix0aGlzLmNvdW50PXJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsYXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJldmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9kZCIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmV2ZW59LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlld0NvbnRhaW5lcj10LHRoaXMuX3RlbXBsYXRlPWUsdGhpcy5fZGlmZmVycz1uLHRoaXMuX2RpZmZlcj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nRm9yVHJhY2tCeSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFja0J5Rm59LHNldDpmdW5jdGlvbih0KXtPYmplY3Qoci5XKSgpJiZudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInRyYWNrQnkgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSsiLiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MvdHMvbGF0ZXN0L2FwaS9jb21tb24vaW5kZXgvTmdGb3ItZGlyZWN0aXZlLmh0bWwjISNjaGFuZ2UtcHJvcGFnYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiksdGhpcy5fdHJhY2tCeUZuPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRlbXBsYXRlIix7c2V0OmZ1bmN0aW9uKHQpe3QmJih0aGlzLl90ZW1wbGF0ZT10KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXtpZigibmdGb3JPZiJpbiB0KXt2YXIgZT10Lm5nRm9yT2YuY3VycmVudFZhbHVlO2lmKCF0aGlzLl9kaWZmZXImJmUpdHJ5e3RoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoZSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK2UrIicgb2YgdHlwZSAnIisoKG49ZSkubmFtZXx8dHlwZW9mIG4pKyInLiBOZ0ZvciBvbmx5IHN1cHBvcnRzIGJpbmRpbmcgdG8gSXRlcmFibGVzIHN1Y2ggYXMgQXJyYXlzLiIpfX12YXIgbn0sdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLm5nRm9yT2YpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3QuZm9yRWFjaE9wZXJhdGlvbihmdW5jdGlvbih0LHIsaSl7aWYobnVsbD09dC5wcmV2aW91c0luZGV4KXt2YXIgbz1lLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhlLl90ZW1wbGF0ZSxuZXcgeChudWxsLGUubmdGb3JPZiwtMSwtMSksaSksYT1uZXcgQyh0LG8pO24ucHVzaChhKX1lbHNlIG51bGw9PWk/ZS5fdmlld0NvbnRhaW5lci5yZW1vdmUocik6KG89ZS5fdmlld0NvbnRhaW5lci5nZXQociksZS5fdmlld0NvbnRhaW5lci5tb3ZlKG8saSksYT1uZXcgQyh0LG8pLG4ucHVzaChhKSl9KTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzLl9wZXJWaWV3Q2hhbmdlKG5bcl0udmlldyxuW3JdLnJlY29yZCk7cj0wO2Zvcih2YXIgaT10aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDtyPGk7cisrKXt2YXIgbz10aGlzLl92aWV3Q29udGFpbmVyLmdldChyKTtvLmNvbnRleHQuaW5kZXg9cixvLmNvbnRleHQuY291bnQ9aSxvLmNvbnRleHQubmdGb3JPZj10aGlzLm5nRm9yT2Z9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7ZS5fdmlld0NvbnRhaW5lci5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX0pfSx0LnByb3RvdHlwZS5fcGVyVmlld0NoYW5nZT1mdW5jdGlvbih0LGUpe3QuY29udGV4dC4kaW1wbGljaXQ9ZS5pdGVtfSx0fSgpLEM9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl9jb250ZXh0PW5ldyBFLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj10LHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZUaGVuIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZFbHNlIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZFbHNlIix0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdXBkYXRlVmlldz1mdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX0sdH0oKSxFPWZ1bmN0aW9uKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH07ZnVuY3Rpb24gayh0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICciK09iamVjdChyLmZiKShlKSsiJy4iKX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2RpZmZlcnM9dCx0aGlzLl9uZ0VsPWUsdGhpcy5fcmVuZGVyZXI9bn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ1N0eWxlIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX25nU3R5bGU9dCwhdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LG51bGwpfSksdC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpfSl9LHQucHJvdG90eXBlLl9zZXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChpLmMpKHQuc3BsaXQoIi4iKSwyKSxyPW5bMF0sbz1uWzFdO251bGwhPShlPW51bGwhPWUmJm8/IiIrZStvOmUpP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyLGUpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0sdH0oKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6ZnVuY3Rpb24odCl7dGhyb3cgdH19KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHR9KCksQT1uZXcoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVTdWJzY3JpcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aGVuKGUsZnVuY3Rpb24odCl7dGhyb3cgdH0pfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe30sdH0oKSksaj1uZXcgSSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWY9dCx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpfSx0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29iaj90IT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0odCkpOnRoaXMuX2xhdGVzdFZhbHVlPT09dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT90aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlOih0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHIuUC53cmFwKHRoaXMuX2xhdGVzdFZhbHVlKSk6KHQmJnRoaXMuX3N1YnNjcmliZSh0KSx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHRoaXMuX2xhdGVzdFZhbHVlKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCxmdW5jdGlvbihuKXtyZXR1cm4gZS5fdXBkYXRlTGF0ZXN0VmFsdWUodCxuKX0pfSx0LnByb3RvdHlwZS5fc2VsZWN0U3RyYXRlZ3k9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0KHIuVGEpKGUpKXJldHVybiBBO2lmKE9iamVjdChyLlNhKShlKSlyZXR1cm4gajt0aHJvdyBuPXQsRXJyb3IoIkludmFsaWRQaXBlQXJndW1lbnQ6ICciK2UrIicgZm9yIHBpcGUgJyIrT2JqZWN0KHIuZmIpKG4pKyInIik7dmFyIG59LHQucHJvdG90eXBlLl9kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfSx0LnByb3RvdHlwZS5fdXBkYXRlTGF0ZXN0VmFsdWU9ZnVuY3Rpb24odCxlKXt0PT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfSx0fSgpLE09ZnVuY3Rpb24oKXt9LE49bmV3IHIubygiRG9jdW1lbnRUb2tlbiIpLFI9ImJyb3dzZXIiLEQ9InNlcnZlciI7ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdD09PVJ9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdD09PUR9fSxKY1J2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJ4VGxhIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dFtyLmFdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX19LEs5SWE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIHI9bigibXJTRyIpLGk9bigiNmJsRiIpLG89bigiRkZPbyIpLGE9bigicHVnVCIpLHM9bigiOGc4QSIpLHU9bigidU1hTyIpLGw9bigiTC9WOSIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kZXN0aW5hdGlvbj1lLG59cmV0dXJuIHIuYihlLHQpLGV9KG8uYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLm9ic2VydmVycz1bXSxlLmNsb3NlZD0hMSxlLmlzU3RvcHBlZD0hMSxlLmhhc0Vycm9yPSExLGUudGhyb3duRXJyb3I9bnVsbCxlfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZVtsLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBoKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7aWYoIXRoaXMuaXNTdG9wcGVkKWZvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGljZSgpLGk9MDtpPG47aSsrKXJbaV0ubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxpPTA7aTxuO2krKylyW2ldLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciB0PXRoaXMub2JzZXJ2ZXJzLGU9dC5sZW5ndGgsbj10LnNsaWNlKCkscj0wO3I8ZTtyKyspbltyXS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkPSEwLHRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPW51bGx9LGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxhLmEuRU1QVFkpOnRoaXMuaXNTdG9wcGVkPyh0LmNvbXBsZXRlKCksYS5hLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgdS5hKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgaS5hO3JldHVybiB0LnNvdXJjZT10aGlzLHR9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBoKHQsZSl9LGV9KGkuYSksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmRlc3RpbmF0aW9uPWUsci5zb3VyY2U9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5uZXh0JiZlLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5lcnJvciYmdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uO3QmJnQuY29tcGxldGUmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHQpOmEuYS5FTVBUWX0sZX0oZil9LCJML1Y5IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigicnhTdWJzY3JpYmVyIik6IkBAcnhTdWJzY3JpYmVyIn0sTEM1cDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbigibjZnRyIpO3ZhciByPWZ1bmN0aW9uKCl7fX0sTUdCUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShuKCJGRk9vIikuYSl9LE1jU286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIk1obSsiOmZ1bmN0aW9uKG1vZHVsZSxfX3dlYnBhY2tfZXhwb3J0c19fLF9fd2VicGFja19yZXF1aXJlX18peyJ1c2Ugc3RyaWN0IjtfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQ2h1bmtMb2FkZXJTZXJ2aWNlfSk7dmFyIHJ4anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCIwL3VRIiksX3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX189X193ZWJwYWNrX3JlcXVpcmVfXygicmYzMCIpLF9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJBeXRSIiksX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fPV9fd2VicGFja19yZXF1aXJlX18oIkNjbkciKSxfYW5ndWxhcl9jb21tb25faHR0cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fPV9fd2VicGFja19yZXF1aXJlX18oInQvTmEiKSxDaHVua0xvYWRlclNlcnZpY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBDaHVua0xvYWRlclNlcnZpY2UodCl7dmFyIGU9dGhpczt0aGlzLmh0dHA9dCx0aGlzLnJlY29yZHM9X3BhZ2VfY2h1bmtfcmVjb3JkX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18uYSwwIT1fZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18uYS5wcm9kdWN0aW9uJiZ0aGlzLnJlY29yZHMuZm9yRWFjaChmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5sb2FkUGFnZUNodW5rKHQucGFnZU5hbWUsZnVuY3Rpb24oKXt9KX0pfSl9cmV0dXJuIENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUuYXN5bmNMb2FkUGFnZUNodW5rPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1uZXcgUHJvbWlzZShmdW5jdGlvbihuLHIpe3ZhciBpPWUucmVjb3Jkcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBhZ2VOYW1lPT10fSk7dm9pZCAwIT1pPyhjb25zb2xlLmxvZygiTG9hZGluZyA6ICIraS5wYWdlTmFtZSsiICgiK2kuY2h1bmtVUkwrIiwgIitpLmNodW5rTG9hZGVkKyIpIFtBc3luY10iKSwwPT1pLmNodW5rTG9hZGVkP2UuaHR0cC5nZXQoaS5jaHVua1VSTCx7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZS5hc3luY0xvYWREYXRhQ2h1bmsodCxpLG4pfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2codCl9KTpuKCEwKSk6bighMCl9KTtyZXR1cm4gT2JqZWN0KHJ4anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5hKShuKX0sQ2h1bmtMb2FkZXJTZXJ2aWNlLnByb3RvdHlwZS5sb2FkUGFnZUNodW5rPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMucmVjb3Jkcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBhZ2VOYW1lPT10fSk7dm9pZCAwIT1yPyhjb25zb2xlLmxvZygiTG9hZGluZyA6ICIrci5wYWdlTmFtZSsiICgiK3IuY2h1bmtVUkwrIikiKSwwPT1yLmNodW5rTG9hZGVkP3RoaXMuaHR0cC5nZXQoci5jaHVua1VSTCx7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gbi5sb2FkRGF0YUNodW5rKHQsZSxyKX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSk6ZSgpKTplKCl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZERhdGFDaHVuaz1mdW5jdGlvbihiYXNlNjRkYXRhLGNhbGxiYWNrLHJlY29yZCl7dmFyIGRlY29kZWREYXRhPWF0b2IoYmFzZTY0ZGF0YSk7ZXZhbChkZWNvZGVkRGF0YSkscmVjb3JkLmNodW5rTG9hZGVkPSEwLGNvbnNvbGUubG9nKCJMb2FkZWQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpLGNhbGxiYWNrKCl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUuYXN5bmNMb2FkRGF0YUNodW5rPWZ1bmN0aW9uKGJhc2U2NGRhdGEscmVjb3JkLHJlc29sdmUpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKGJhc2U2NGRhdGEpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikgW0FzeW5jXSIpLHJlc29sdmUoITApfSxDaHVua0xvYWRlclNlcnZpY2UubmdJbmplY3RhYmxlRGVmPV9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5SKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDaHVua0xvYWRlclNlcnZpY2UoX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fLlYoX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXy5jKSl9LHRva2VuOkNodW5rTG9hZGVyU2VydmljZSxwcm92aWRlZEluOiJyb290In0pLENodW5rTG9hZGVyU2VydmljZX0oKX0sIk1yK1giOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIkNjbkciKSxpPShuKCJTTXNtIiksbigiRnpxYyIpLG4oIldmNHAiKSxyLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1pY29ue2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4fS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5pYigyLFtyLlhhKG51bGwsMCldLG51bGwsbnVsbCl9fSxOU1lMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBZdH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBhZX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB1ZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBsZX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oImloWVkiKTtmdW5jdGlvbiBvKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzfWZ1bmN0aW9uIGEodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBpLmQ7Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBpLm4odCl9fWZ1bmN0aW9uIHModCxlLG4scixvLGEpe3ZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSk7dmFyIHM9W10sdT1bXSxsPS0xLGM9bnVsbDtpZihyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5vZmZzZXQscj1uPT1sLGY9ciYmY3x8e307T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1uLHU9dFtuXTtpZigib2Zmc2V0IiE9PW4pc3dpdGNoKHI9ZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWUocixzKSx1KXtjYXNlIGkubzp1PW9bbl07YnJlYWs7Y2FzZSBpLmE6dT1hW25dO2JyZWFrO2RlZmF1bHQ6dT1lLm5vcm1hbGl6ZVN0eWxlVmFsdWUobixyLHUscyl9ZltyXT11fSkscnx8dS5wdXNoKGYpLGM9ZixsPW59KSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBhbmltYXRlIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczpcbiAtICIrcy5qb2luKCJcbiAtICIpKTtyZXR1cm4gdX1mdW5jdGlvbiB1KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlInN0YXJ0Ijp0Lm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gcihuJiZsKG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmbChuLCJkb25lIix0KSl9KTticmVhaztjYXNlImRlc3Ryb3kiOnQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmbChuLCJkZXN0cm95Iix0KSl9KX19ZnVuY3Rpb24gbCh0LGUsbil7dmFyIHI9bi50b3RhbFRpbWUsaT1jKHQuZWxlbWVudCx0LnRyaWdnZXJOYW1lLHQuZnJvbVN0YXRlLHQudG9TdGF0ZSxlfHx0LnBoYXNlTmFtZSx2b2lkIDA9PXI/dC50b3RhbFRpbWU6ciwhIW4uZGlzYWJsZWQpLG89dC5fZGF0YTtyZXR1cm4gbnVsbCE9byYmKGkuX2RhdGE9byksaX1mdW5jdGlvbiBjKHQsZSxuLHIsaSxvLGEpe3JldHVybiB2b2lkIDA9PT1pJiYoaT0iIiksdm9pZCAwPT09byYmKG89MCkse2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGZyb21TdGF0ZTpuLHRvU3RhdGU6cixwaGFzZU5hbWU6aSx0b3RhbFRpbWU6byxkaXNhYmxlZDohIWF9fWZ1bmN0aW9uIGYodCxlLG4pe3ZhciByO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhyPXQuZ2V0KGUpKXx8dC5zZXQoZSxyPW4pOihyPXRbZV0pfHwocj10W2VdPW4pLHJ9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIjoiKTtyZXR1cm5bdC5zdWJzdHJpbmcoMSxlKSx0LnN1YnN0cihlKzEpXX12YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiExfSxwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LG09ZnVuY3Rpb24odCxlLG4pe3JldHVybltdfSx5PW8oKTtpZih5fHwidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe2lmKGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0seXx8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWF0Y2hlcyhlKX07ZWxzZXt2YXIgZz1FbGVtZW50LnByb3RvdHlwZSx2PWcubWF0Y2hlc1NlbGVjdG9yfHxnLm1vek1hdGNoZXNTZWxlY3Rvcnx8Zy5tc01hdGNoZXNTZWxlY3Rvcnx8Zy5vTWF0Y2hlc1NlbGVjdG9yfHxnLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2JiYocD1mdW5jdGlvbih0LGUpe3JldHVybiB2LmFwcGx5KHQsW2VdKX0pfW09ZnVuY3Rpb24odCxlLG4pe3ZhciBpPVtdO2lmKG4paS5wdXNoLmFwcGx5KGksT2JqZWN0KHIuZCkodC5xdWVyeVNlbGVjdG9yQWxsKGUpKSk7ZWxzZXt2YXIgbz10LnF1ZXJ5U2VsZWN0b3IoZSk7byYmaS5wdXNoKG8pfXJldHVybiBpfX12YXIgYj1udWxsLF89ITE7ZnVuY3Rpb24gdyh0KXtifHwoYj0oInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSxfPSEhYi5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gYi5zdHlsZSk7dmFyIGU9ITA7cmV0dXJuIGIuc3R5bGUmJiFmdW5jdGlvbih0KXtyZXR1cm4iZWJraXQiPT10LnN1YnN0cmluZygxLDYpfSh0KSYmIShlPXQgaW4gYi5zdHlsZSkmJl8mJihlPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBiLnN0eWxlKSxlfXZhciB4PXAsTz1kLEM9bTtmdW5jdGlvbiBTKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKTtlW3JdPXRbbl19KSxlfXZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQyh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG58fCIifSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLHIsbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1bXSksbmV3IGkuZChuLHIpfSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5PT1A9bmV3IEUsdH0oKSxUPTFlMztmdW5jdGlvbiBJKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFlfHxlLmxlbmd0aDwyPzA6QShwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIEEodCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gdCpUO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGoodCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGE9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaCgnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJykse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9QShwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO3ZhciBzPWFbM107bnVsbCE9cyYmKGk9QShNYXRoLmZsb29yKHBhcnNlRmxvYXQocykpLGFbNF0pKTt2YXIgdT1hWzVdO3UmJihvPXUpfWVsc2Ugcj10O2lmKCFuKXt2YXIgbD0hMSxjPWUubGVuZ3RoO3I8MCYmKGUucHVzaCgiRHVyYXRpb24gdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGw9ITApLGk8MCYmKGUucHVzaCgiRGVsYXkgdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGw9ITApLGwmJmUuc3BsaWNlKGMsMCwnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJyl9cmV0dXJue2R1cmF0aW9uOnIsZGVsYXk6aSxlYXNpbmc6b319KHQsZSxuKX1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pLGV9ZnVuY3Rpb24gTSh0LGUsbil7aWYodm9pZCAwPT09biYmKG49e30pLGUpZm9yKHZhciByIGluIHQpbltyXT10W3JdO2Vsc2UgUCh0LG4pO3JldHVybiBufWZ1bmN0aW9uIE4odCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPSIiLG49MDtuPHQuc3R5bGUubGVuZ3RoO24rKyllKz1OKDAscj10LnN0eWxlLml0ZW0obiksdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHIpKTtmb3IodmFyIHIgaW4gdC5zdHlsZSl0LnN0eWxlLmhhc093blByb3BlcnR5KHIpJiYhci5zdGFydHNXaXRoKCJfIikmJihlKz1OKDAsci5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtyXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gRCh0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPVcobik7dC5zdHlsZVtyXT1lW25dfSksbygpJiZSKHQpKX1mdW5jdGlvbiBMKHQsZSl7dC5zdHlsZSYmKE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49VyhlKTt0LnN0eWxlW25dPSIifSksbygpJiZSKHQpKX1mdW5jdGlvbiBGKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzE9PXQubGVuZ3RoP3RbMF06T2JqZWN0KGkuaSkodCk6dH12YXIgVj1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiBVKHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxyPXZvaWQgMDtyPVYuZXhlYyhuKTspZS5wdXNoKHJbMV0pO1YubGFzdEluZGV4PTB9cmV0dXJuIGV9ZnVuY3Rpb24geih0LGUsbil7dmFyIHI9dC50b1N0cmluZygpLGk9ci5yZXBsYWNlKFYsZnVuY3Rpb24odCxyKXt2YXIgaT1lW3JdO3JldHVybiBlLmhhc093blByb3BlcnR5KHIpfHwobi5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICIrciksaT0iIiksaS50b1N0cmluZygpfSk7cmV0dXJuIGk9PXI/dDppfWZ1bmN0aW9uIEIodCl7Zm9yKHZhciBlPVtdLG49dC5uZXh0KCk7IW4uZG9uZTspZS5wdXNoKG4udmFsdWUpLG49dC5uZXh0KCk7cmV0dXJuIGV9dmFyIEg9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQucmVwbGFjZShILGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiB0WzFdLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBxKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBZKHQsZSxuKXt2YXIgcj1PYmplY3Qua2V5cyhuKTtpZihyLmxlbmd0aCYmZS5sZW5ndGgpe3ZhciBpPWVbMF0sbz1bXTtpZihyLmZvckVhY2goZnVuY3Rpb24odCl7aS5oYXNPd25Qcm9wZXJ0eSh0KXx8by5wdXNoKHQpLGlbdF09blt0XX0pLG8ubGVuZ3RoKWZvcih2YXIgYT1mdW5jdGlvbigpe3ZhciBuPWVbc107by5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV09USh0LGUpfSl9LHM9MTtzPGUubGVuZ3RoO3MrKylhKCl9cmV0dXJuIGV9ZnVuY3Rpb24gRyh0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19dmFyIEs9IioiLFo9bmV3IFNldChbInRydWUiLCIxIl0pLFg9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiAkKHQsZSl7dmFyIG49Wi5oYXModCl8fFguaGFzKHQpLHI9Wi5oYXMoZSl8fFguaGFzKGUpO3JldHVybiBmdW5jdGlvbihpLG8pe3ZhciBhPXQ9PUt8fHQ9PWkscz1lPT1LfHxlPT1vO3JldHVybiFhJiZuJiYiYm9vbGVhbiI9PXR5cGVvZiBpJiYoYT1pP1ouaGFzKHQpOlguaGFzKHQpKSwhcyYmciYmImJvb2xlYW4iPT10eXBlb2YgbyYmKHM9bz9aLmhhcyhlKTpYLmhhcyhlKSksYSYmc319dmFyIEo9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gdHQodCxlLG4pe3JldHVybiBuZXcgZXQodCkuYnVpbGQoZSxuKX12YXIgZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RyaXZlcj10fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBudChlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSxHKHRoaXMsRih0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5xdWVyeUNvdW50PTAsaT1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LHU9cy5uYW1lO3UudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT11fWVsc2UgaWYoMT09dC50eXBlKXt2YXIgbD1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO3IrPWwucXVlcnlDb3VudCxpKz1sLmRlcENvdW50LGEucHVzaChsKX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpyLGRlcENvdW50Omksb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIGk9bmV3IFNldCxvPXJ8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYocnQodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtVKGVbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7by5oYXNPd25Qcm9wZXJ0eSh0KXx8aS5hZGQodCl9KX0pfX0pLGkuc2l6ZSl7dmFyIGE9QihpLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKCdzdGF0ZSgiJyt0Lm5hbWUrJyIsIC4uLikgbXVzdCBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgZm9sbG93aW5nIHN0eWxlIHN1YnN0aXR1dGlvbnM6ICcrYS5qb2luKCIsICIpKX19cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTpuLG9wdGlvbnM6cj97cGFyYW1zOnJ9Om51bGx9fSx0LnByb3RvdHlwZS52aXNpdFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7dmFyIG4scixpLG89Ryh0aGlzLEYodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6KG49dC5leHByLHI9ZS5lcnJvcnMsaT1bXSwic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtpZigiOiI9PXRbMF0pe3ZhciByPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKT5wYXJzZUZsb2F0KHQpfTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCl9O2RlZmF1bHQ6cmV0dXJuIGUucHVzaCgnVGhlIHRyYW5zaXRpb24gYWxpYXMgdmFsdWUgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyksIiogPT4gKiJ9fSh0LG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiB2b2lkIGUucHVzaChyKTt0PXJ9dmFyIGk9dC5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09aXx8aS5sZW5ndGg8NClyZXR1cm4gbi5wdXNoKCdUaGUgcHJvdmlkZWQgdHJhbnNpdGlvbiBleHByZXNzaW9uICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLGU7dmFyIG89aVsxXSxhPWlbMl0scz1pWzNdO2UucHVzaCgkKG8scykpLCI8IiE9YVswXXx8bz09SyYmcz09S3x8ZS5wdXNoKCQocyxvKSl9KHQsaSxyKX0pOmkucHVzaChuKSxpKSxhbmltYXRpb246byxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0U2VxdWVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEcobix0LGUpfSksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmN1cnJlbnRUaW1lLGk9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9cjt2YXIgbz1HKG4sdCxlKTtyZXR1cm4gaT1NYXRoLm1heChpLGUuY3VycmVudFRpbWUpLG99KTtyZXR1cm4gZS5jdXJyZW50VGltZT1pLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbDtpZih0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKW49dDtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gb3Qoaih0LGUpLmR1cmF0aW9uLDAsIiIpO3ZhciByPXQ7aWYoci5zcGxpdCgvXHMrLykuc29tZShmdW5jdGlvbih0KXtyZXR1cm4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpfSkpe3ZhciBpPW90KDAsMCwiIik7cmV0dXJuIGkuZHluYW1pYz0hMCxpLnN0clZhbHVlPXIsaX1yZXR1cm4gb3QoKG49bnx8aihyLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1yO3ZhciBvPXQuc3R5bGVzP3Quc3R5bGVzOk9iamVjdChpLmspKHt9KTtpZig1PT1vLnR5cGUpbj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXt2YXIgYT10LnN0eWxlcyxzPSExO2lmKCFhKXtzPSEwO3ZhciB1PXt9O3IuZWFzaW5nJiYodS5lYXNpbmc9ci5lYXNpbmcpLGE9T2JqZWN0KGkuaykodSl9ZS5jdXJyZW50VGltZSs9ci5kdXJhdGlvbityLmRlbGF5O3ZhciBsPXRoaXMudmlzaXRTdHlsZShhLGUpO2wuaXNFbXB0eVN0ZXA9cyxuPWx9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOnIsc3R5bGU6bixvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufSx0LnByb3RvdHlwZS5fbWFrZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49W107QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQ/dD09aS5hP24ucHVzaCh0KTplLmVycm9ycy5wdXNoKCJUaGUgcHJvdmlkZWQgc3R5bGUgc3RyaW5nIHZhbHVlICIrdCsiIGlzIG5vdCBhbGxvd2VkLiIpOm4ucHVzaCh0KX0pOm4ucHVzaCh0LnN0eWxlcyk7dmFyIHI9ITEsbz1udWxsO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7aWYocnQodCkpe3ZhciBlPXQsbj1lLmVhc2luZztpZihuJiYobz1uLGRlbGV0ZSBlLmVhc2luZyksIXIpZm9yKHZhciBpIGluIGUpaWYoZVtpXS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe3I9ITA7YnJlYWt9fX0pLHt0eXBlOjYsc3R5bGVzOm4sZWFzaW5nOm8sb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpyLG9wdGlvbnM6bnVsbH19LHQucHJvdG90eXBlLl92YWxpZGF0ZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLGk9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7ciYmbz4wJiYoby09ci5kdXJhdGlvbityLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtpZihuLl9kcml2ZXIudmFsaWRhdGVTdHlsZVByb3BlcnR5KHIpKXt2YXIgYSxzLHUsbD1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxjPWxbcl0sZj0hMDtjJiYobyE9aSYmbz49Yy5zdGFydFRpbWUmJmk8PWMuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2goJ1RoZSBDU1MgcHJvcGVydHkgIicrcisnIiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJytjLnN0YXJ0VGltZSsnbXMiIGFuZCAiJytjLmVuZFRpbWUrJ21zIiBpcyBhbHNvIGJlaW5nIGFuaW1hdGVkIGluIGEgcGFyYWxsZWwgYW5pbWF0aW9uIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK28rJ21zIiBhbmQgIicraSsnbXMiJyksZj0hMSksbz1jLnN0YXJ0VGltZSksZiYmKGxbcl09e3N0YXJ0VGltZTpvLGVuZFRpbWU6aX0pLGUub3B0aW9ucyYmKGE9ZS5lcnJvcnMscz1lLm9wdGlvbnMucGFyYW1zfHx7fSwodT1VKHRbcl0pKS5sZW5ndGgmJnUuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK3IrJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIikscjt2YXIgaT0wLG89W10sYT0hMSxzPSExLHU9MCxsPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPW4uX21ha2VTdHlsZUFzdCh0LGUpLGw9bnVsbCE9ci5vZmZzZXQ/ci5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYocnQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYocnQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShyLnN0eWxlcyksYz0wO3JldHVybiBudWxsIT1sJiYoaSsrLGM9ci5vZmZzZXQ9bCkscz1zfHxjPDB8fGM+MSxhPWF8fGM8dSx1PWMsby5wdXNoKGMpLHJ9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgYz10LnN0ZXBzLmxlbmd0aCxmPTA7aT4wJiZpPGM/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09aSYmKGY9MS8oYy0xKSk7dmFyIGg9Yy0xLGQ9ZS5jdXJyZW50VGltZSxwPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09cC5kdXJhdGlvbjtyZXR1cm4gbC5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIGE9Zj4wP2k9PWg/MTpmKmk6b1tpXSxzPWEqbTtlLmN1cnJlbnRUaW1lPWQrcC5kZWxheStzLHAuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxyLnN0eWxlcy5wdXNoKHQpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpHKHRoaXMsRih0LmFuaW1hdGlvbiksZSksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlUmVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRRdWVyeT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaT10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7dmFyIG89T2JqZWN0KHIuYykoZnVuY3Rpb24odCl7dmFyIGU9ISF0LnNwbGl0KC9ccyosXHMqLykuZmluZChmdW5jdGlvbih0KXtyZXR1cm4iOnNlbGYiPT10fSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZShKLCIiKSksW3Q9dC5yZXBsYWNlKC9AXCovZywiLm5nLXRyaWdnZXIiKS5yZXBsYWNlKC9AXHcrL2csZnVuY3Rpb24odCl7cmV0dXJuIi5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSl9KS5yZXBsYWNlKC86YW5pbWF0aW5nL2csIi5uZy1hbmltYXRpbmciKSxlXX0odC5zZWxlY3RvciksMiksYT1vWzBdLHM9b1sxXTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4ubGVuZ3RoP24rIiAiK2E6YSxmKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3Ise30pO3ZhciB1PUcodGhpcyxGKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6YSxsaW1pdDppLmxpbWl0fHwwLG9wdGlvbmFsOiEhaS5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjp1LG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaCgic3RhZ2dlcigpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIHF1ZXJ5KCkiKTt2YXIgbj0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpqKHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOkcodGhpcyxGKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOm4sb3B0aW9uczpudWxsfX0sdH0oKSxudD1mdW5jdGlvbih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9e30sdGhpcy5vcHRpb25zPW51bGx9O2Z1bmN0aW9uIHJ0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gaXQodCl7dmFyIGU7cmV0dXJuIHQ/KHQ9UCh0KSkucGFyYW1zJiYodC5wYXJhbXM9KGU9dC5wYXJhbXMpP1AoZSk6bnVsbCk6dD17fSx0fWZ1bmN0aW9uIG90KHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiBhdCh0LGUsbixyLGksbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1udWxsKSx2b2lkIDA9PT1zJiYocz0hMSkse3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOnIsZHVyYXRpb246aSxkZWxheTpvLHRvdGFsVGltZTppK28sZWFzaW5nOmEsc3ViVGltZWxpbmU6c319dmFyIHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX21hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5jb25zdW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21hcC5nZXQodCk7bnx8dGhpcy5fbWFwLnNldCh0LG49W10pLG4ucHVzaC5hcHBseShuLE9iamVjdChyLmQpKGUpKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX21hcC5jbGVhcigpfSx0fSgpLHV0PW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxsdD1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gY3QodCxlLG4scixpLG8sYSxzLHUsbCl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSksdm9pZCAwPT09bCYmKGw9W10pLChuZXcgZnQpLmJ1aWxkS2V5ZnJhbWVzKHQsZSxuLHIsaSxvLGEscyx1LGwpfXZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwpe3ZvaWQgMD09PWwmJihsPVtdKSx1PXV8fG5ldyBzdDt2YXIgYz1uZXcgZHQodCxlLHUscixpLGwsW10pO2Mub3B0aW9ucz1zLGMuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbb10sbnVsbCxjLmVycm9ycyxzKSxHKHRoaXMsbixjKTt2YXIgZj1jLnRpbWVsaW5lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29udGFpbnNBbmltYXRpb24oKX0pO2lmKGYubGVuZ3RoJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgpe3ZhciBoPWZbZi5sZW5ndGgtMV07aC5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpfHxoLnNldFN0eWxlcyhbYV0sbnVsbCxjLmVycm9ycyxzKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnVpbGRLZXlmcmFtZXMoKX0pOlthdChlLFtdLFtdLFtdLDAsMCwiIiwhMSldfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1Ykluc3RydWN0aW9ucy5jb25zdW1lKGUuZWxlbWVudCk7aWYobil7dmFyIHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyksaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKG4scixyLm9wdGlvbnMpO2khPW8mJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG8pfWUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO24udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixuKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShuLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxpPW51bGwhPW4uZHVyYXRpb24/SShuLmR1cmF0aW9uKTpudWxsLG89bnVsbCE9bi5kZWxheT9JKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1pJiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxpLG8pO3I9TWF0aC5tYXgocixuLmR1cmF0aW9uK24uZGVsYXkpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxHKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLnN1YkNvbnRleHRDb3VudCxpPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKChpPWUuY3JlYXRlU3ViQ29udGV4dChvKSkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PWkucHJldmlvdXNOb2RlLnR5cGUmJihpLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxpLnByZXZpb3VzTm9kZT1odCk7dmFyIGE9SShvLmRlbGF5KTtpLmRlbGF5TmV4dFN0ZXAoYSl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEcobix0LGkpfSksaS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaS5zdWJDb250ZXh0Q291bnQ+ciYmaS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1bXSxpPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/SSh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxHKG4sYSxzKSxpPU1hdGgubWF4KGkscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLHIucHVzaChzLmN1cnJlbnRUaW1lbGluZSl9KSxyLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCl9KSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS5fdmlzaXRUaW1pbmc9ZnVuY3Rpb24odCxlKXtpZih0LmR5bmFtaWMpe3ZhciBuPXQuc3RyVmFsdWU7cmV0dXJuIGooZS5wYXJhbXM/eihuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO24uZGVsYXkmJihlLmluY3JlbWVudFRpbWUobi5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7dmFyIGk9dC5zdHlsZTs1PT1pLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhpLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGksZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50VGltZWxpbmUscj1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshciYmbi5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoJiZuLmZvcndhcmRGcmFtZSgpO3ZhciBpPXImJnIuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAoaSk6bi5zZXRTdHlsZXModC5zdHlsZXMsaSxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixpPW4uZHVyYXRpb24sbz1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7by5lYXNpbmc9bi5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtvLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqaSksby5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxvLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhvKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyK2kpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaT10Lm9wdGlvbnN8fHt9LG89aS5kZWxheT9JKGkuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1yJiZlLmN1cnJlbnRUaW1lbGluZS5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPWh0KTt2YXIgYT1yLHM9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFpLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPXMubGVuZ3RoO3ZhciB1PW51bGw7cy5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7ZS5jdXJyZW50UXVlcnlJbmRleD1pO3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMscik7byYmcy5kZWxheU5leHRTdGVwKG8pLHI9PT1lLmVsZW1lbnQmJih1PXMuY3VycmVudFRpbWVsaW5lKSxHKG4sdC5hbmltYXRpb24scykscy5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSksdSYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModSksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuPWUucGFyZW50Q29udGV4dCxyPWUuY3VycmVudFRpbWVsaW5lLGk9dC50aW1pbmdzLG89TWF0aC5hYnMoaS5kdXJhdGlvbiksYT1vKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLHM9byplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChpLmR1cmF0aW9uPDA/InJldmVyc2UiOmkuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9YS1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX12YXIgdT1lLmN1cnJlbnRUaW1lbGluZTtzJiZ1LmRlbGF5TmV4dFN0ZXAocyk7dmFyIGw9dS5jdXJyZW50VGltZTtHKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxuLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLWwrKHIuc3RhcnRUaW1lLW4uY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9LHR9KCksaHQ9e30sZHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9bix0aGlzLl9lbnRlckNsYXNzTmFtZT1yLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWksdGhpcy5lcnJvcnM9byx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPXN8fG5ldyBwdCh0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciByPXQsaT10aGlzLm9wdGlvbnM7bnVsbCE9ci5kdXJhdGlvbiYmKGkuZHVyYXRpb249SShyLmR1cmF0aW9uKSksbnVsbCE9ci5kZWxheSYmKGkuZGVsYXk9SShyLmRlbGF5KSk7dmFyIG89ci5wYXJhbXM7aWYobyl7dmFyIGE9aS5wYXJhbXM7YXx8KGE9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtlJiZhLmhhc093blByb3BlcnR5KHQpfHwoYVt0XT16KG9bdF0sYSxuLmVycm9ycykpfSl9fX0sdC5wcm90b3R5cGUuX2NvcHlPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5vcHRpb25zKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe3ZhciBuPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9fXJldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVTdWJDb250ZXh0PWZ1bmN0aW9uKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgaT1ufHx0aGlzLmVsZW1lbnQsbz1uZXcgdCh0aGlzLl9kcml2ZXIsaSx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGkscnx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99LHQucHJvdG90eXBlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9LHQucHJvdG90eXBlLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LGk9bmV3IG10KHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChpKSxyfSx0LnByb3RvdHlwZS5pbmNyZW1lbnRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX0sdC5wcm90b3R5cGUuaW52b2tlUXVlcnk9ZnVuY3Rpb24odCxlLG4saSxvLGEpe3ZhciBzPVtdO2lmKGkmJnMucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKHV0LCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UobHQsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTt2YXIgdT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJih1PW48MD91LnNsaWNlKHUubGVuZ3RoK24sdS5sZW5ndGgpOnUuc2xpY2UoMCxuKSkscy5wdXNoLmFwcGx5KHMsT2JqZWN0KHIuZCkodSkpfXJldHVybiBvfHwwIT1zLmxlbmd0aHx8YS5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLHN9LHR9KCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fGkuYSxlLl9jdXJyZW50S2V5ZnJhbWVbdF09aS5hfSksdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuc2V0U3R5bGVzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXM7ZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPWUpO3ZhciBhPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyIqIj09PXQ/KG49bnx8T2JqZWN0LmtleXMoZSkpLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT1pLmF9KTpNKHQsITEscil9KSxyfSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXooc1t0XSxhLG4pO28uX3BlbmRpbmdTdHlsZXNbdF09ZSxvLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpfHwoby5fYmFja0ZpbGxbdF09by5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCk/by5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF06aS5hKSxvLl91cGRhdGVTdHlsZSh0LGUpfSl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVzVG9LZXlmcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wZW5kaW5nU3R5bGVzLG49T2JqZWN0LmtleXMoZSk7MCE9bi5sZW5ndGgmJih0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LG4uZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9jdXJyZW50S2V5ZnJhbWVbbl09ZVtuXX0pLE9iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KGUpfHwodC5fY3VycmVudEtleWZyYW1lW2VdPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV0pfSkpfSx0LnByb3RvdHlwZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXTt0Ll9wZW5kaW5nU3R5bGVzW2VdPW4sdC5fdXBkYXRlU3R5bGUoZSxuKX0pfSx0LnByb3RvdHlwZS5nZXRGaW5hbEtleWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvcGVydGllcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9ZS5fc3R5bGVTdW1tYXJ5W25dLGk9dC5fc3R5bGVTdW1tYXJ5W25dOyghcnx8aS50aW1lPnIudGltZSkmJmUuX3VwZGF0ZVN0eWxlKG4saS52YWx1ZSl9KX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7dmFyIGU9bmV3IFNldCxuPW5ldyBTZXQscj0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLG89W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgdT1NKGEsITApO09iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9dVt0XTtyPT1pLm8/ZS5hZGQodCk6cj09aS5hJiZuLmFkZCh0KX0pLHJ8fCh1Lm9mZnNldD1zL3QuZHVyYXRpb24pLG8ucHVzaCh1KX0pO3ZhciBhPWUuc2l6ZT9CKGUudmFsdWVzKCkpOltdLHM9bi5zaXplP0Iobi52YWx1ZXMoKSk6W107aWYocil7dmFyIHU9b1swXSxsPVAodSk7dS5vZmZzZXQ9MCxsLm9mZnNldD0xLG89W3UsbF19cmV0dXJuIGF0KHRoaXMuZWxlbWVudCxvLGEscyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX0sdH0oKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhLHMpe3ZvaWQgMD09PXMmJihzPSExKTt2YXIgdT10LmNhbGwodGhpcyxlLG4sYS5kZWxheSl8fHRoaXM7cmV0dXJuIHUuZWxlbWVudD1uLHUua2V5ZnJhbWVzPXIsdS5wcmVTdHlsZVByb3BzPWksdS5wb3N0U3R5bGVQcm9wcz1vLHUuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPXMsdS50aW1pbmdzPXtkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzaW5nOmEuZWFzaW5nfSx1fXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfSxlLnByb3RvdHlwZS5idWlsZEtleWZyYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMua2V5ZnJhbWVzLGU9dGhpcy50aW1pbmdzLG49ZS5kZWxheSxyPWUuZHVyYXRpb24saT1lLmVhc2luZztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmbil7dmFyIG89W10sYT1yK24scz1uL2EsdT1NKHRbMF0sITEpO3Uub2Zmc2V0PTAsby5wdXNoKHUpO3ZhciBsPU0odFswXSwhMSk7bC5vZmZzZXQ9eXQocyksby5wdXNoKGwpO2Zvcih2YXIgYz10Lmxlbmd0aC0xLGY9MTtmPD1jO2YrKyl7dmFyIGg9TSh0W2ZdLCExKTtoLm9mZnNldD15dCgobitoLm9mZnNldCpyKS9hKSxvLnB1c2goaCl9cj1hLG49MCxpPSIiLHQ9b31yZXR1cm4gYXQodGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMscixuLGksITApfSxlfShwdCk7ZnVuY3Rpb24geXQodCxlKXt2b2lkIDA9PT1lJiYoZT0zKTt2YXIgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn12YXIgZ3Q9ZnVuY3Rpb24oKXt9LHZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5vcm1hbGl6ZVByb3BlcnR5TmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiBXKHQpfSxlLnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVZhbHVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPSIiLG89bi50b1N0cmluZygpLnRyaW0oKTtpZihidFtlXSYmMCE9PW4mJiIwIiE9PW4paWYoIm51bWJlciI9PXR5cGVvZiBuKWk9InB4IjtlbHNle3ZhciBhPW4ubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTthJiYwPT1hWzFdLmxlbmd0aCYmci5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAiK3QrIjoiK24pfXJldHVybiBvK2l9LGV9KGd0KSxidD1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4id2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09ITB9KSxlfSgpO2Z1bmN0aW9uIF90KHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmLGgpe3JldHVybnt0eXBlOjAsZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsaXNSZW1vdmFsVHJhbnNpdGlvbjppLGZyb21TdGF0ZTpuLGZyb21TdHlsZXM6byx0b1N0YXRlOnIsdG9TdHlsZXM6YSx0aW1lbGluZXM6cyxxdWVyaWVkRWxlbWVudHM6dSxwcmVTdHlsZVByb3BzOmwscG9zdFN0eWxlUHJvcHM6Yyx0b3RhbFRpbWU6ZixlcnJvcnM6aH19dmFyIHd0PXt9LHh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPW59cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSxuLHIsaSl9KX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLG4scil9LHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9zdGF0ZVN0eWxlc1siKiJdLGk9dGhpcy5fc3RhdGVTdHlsZXNbdF0sbz1yP3IuYnVpbGRTdHlsZXMoZSxuKTp7fTtyZXR1cm4gaT9pLmJ1aWxkU3R5bGVzKGUsbik6b30sdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlLG4saSxvLGEscyx1LGwsYyl7dmFyIGg9W10sZD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8d3QscD10aGlzLmJ1aWxkU3R5bGVzKG4scyYmcy5wYXJhbXN8fHd0LGgpLG09dSYmdS5wYXJhbXN8fHd0LHk9dGhpcy5idWlsZFN0eWxlcyhpLG0saCksZz1uZXcgU2V0LHY9bmV3IE1hcCxiPW5ldyBNYXAsXz0idm9pZCI9PT1pLHc9e3BhcmFtczpPYmplY3Qoci5hKSh7fSxkLG0pfSx4PWM/W106Y3QodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLGEscCx5LHcsbCxoKSxPPTA7aWYoeC5mb3JFYWNoKGZ1bmN0aW9uKHQpe089TWF0aC5tYXgodC5kdXJhdGlvbit0LmRlbGF5LE8pfSksaC5sZW5ndGgpcmV0dXJuIF90KGUsdGhpcy5fdHJpZ2dlck5hbWUsbixpLF8scCx5LFtdLFtdLHYsYixPLGgpO3guZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LmVsZW1lbnQscj1mKHYsbix7fSk7dC5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHJbdF09ITB9KTt2YXIgaT1mKGIsbix7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdPSEwfSksbiE9PWUmJmcuYWRkKG4pfSk7dmFyIEM9QihnLnZhbHVlcygpKTtyZXR1cm4gX3QoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLGksXyxwLHkseCxDLHYsYixPKX0sdH0oKSxPdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5idWlsZFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9LHI9UCh0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07bnVsbCE9biYmKHJbZV09bil9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPXQ7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1pW3RdO28ubGVuZ3RoPjEmJihvPXoobyxyLGUpKSxuW3RdPW99KX19KSxufSx0fSgpLEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9e30sZS5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnN0YXRlc1t0Lm5hbWVdPW5ldyBPdCh0LnN0eWxlLHQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8e30pfSksU3QodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksU3QodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtuLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgeHQodCxlLG4uc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1uZXcgeHQodCx7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuITB9XSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHRoaXMuc3RhdGVzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250YWluc1F1ZXJpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hdGNoVHJhbnNpdGlvbj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24oaSl7cmV0dXJuIGkubWF0Y2godCxlLG4scil9KXx8bnVsbH0sdC5wcm90b3R5cGUubWF0Y2hTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsbil9LHR9KCk7ZnVuY3Rpb24gU3QodCxlLG4pe3QuaGFzT3duUHJvcGVydHkoZSk/dC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09dFtlXSk6dC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZV09dFtuXSl9dmFyIEV0PW5ldyBzdCxrdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPW4sdGhpcy5fYW5pbWF0aW9ucz17fSx0aGlzLl9wbGF5ZXJzQnlJZD17fSx0aGlzLnBsYXllcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W10scj10dCh0aGlzLl9kcml2ZXIsZSxuKTtpZihuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBidWlsZCB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIituLmpvaW4oIlxuIikpO3RoaXMuX2FuaW1hdGlvbnNbdF09cn0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmVsZW1lbnQsaT1zKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsbik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKHIsaSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvLHM9W10sdT10aGlzLl9hbmltYXRpb25zW3RdLGw9bmV3IE1hcDtpZih1PyhvPWN0KHRoaXMuX2RyaXZlcixlLHUsIm5nLWVudGVyIiwibmctbGVhdmUiLHt9LHt9LG4sRXQscykpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZihsLHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPW51bGx9KX0pOihzLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxvPVtdKSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrcy5qb2luKCJcbiIpKTtsLmZvckVhY2goZnVuY3Rpb24odCxlKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ci5fZHJpdmVyLmNvbXB1dGVTdHlsZShlLG4saS5hKX0pfSk7dmFyIGM9YShvLm1hcChmdW5jdGlvbih0KXt2YXIgZT1sLmdldCh0LmVsZW1lbnQpO3JldHVybiByLl9idWlsZFBsYXllcih0LHt9LGUpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZFt0XT1jLGMub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVzdHJveSh0KX0pLHRoaXMucGxheWVycy5wdXNoKGMpLGN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0UGxheWVyKHQpO2UuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9wbGF5ZXJzQnlJZFt0XTt2YXIgbj10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtuPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG4sMSl9LHQucHJvdG90eXBlLl9nZXRQbGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyc0J5SWRbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB0aGUgdGltZWxpbmUgcGxheWVyIHJlZmVyZW5jZWQgYnkgIit0KTtyZXR1cm4gZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWMoZSwiIiwiIiwiIik7cmV0dXJuIHUodGhpcy5fZ2V0UGxheWVyKHQpLG4saSxyKSxmdW5jdGlvbigpe319LHQucHJvdG90eXBlLmNvbW1hbmQ9ZnVuY3Rpb24odCxlLG4scil7aWYoInJlZ2lzdGVyIiE9bilpZigiY3JlYXRlIiE9bil7dmFyIGk9dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChuKXtjYXNlInBsYXkiOmkucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmkucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjppLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjppLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6aS5maW5pc2goKTticmVhaztjYXNlImluaXQiOmkuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmkuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChyWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fWVsc2UgdGhpcy5jcmVhdGUodCxlLHJbMF18fHt9KTtlbHNlIHRoaXMucmVnaXN0ZXIodCxyWzBdKX0sdH0oKSxUdD1bXSxJdD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sQXQ9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LGp0PSJfX25nX3JlbW92ZWQiLFB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKSx0aGlzLm5hbWVzcGFjZUlkPWU7dmFyIG49dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10P3Q6bnVsbH0obj90LnZhbHVlOnQpLG4pe3ZhciByPVAodCk7ZGVsZXRlIHIudmFsdWUsdGhpcy5vcHRpb25zPXJ9ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmFic29yYk9wdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJhbXM7aWYoZSl7dmFyIG49dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGw9PW5bdF0mJihuW3RdPWVbdF0pfSl9fSx0fSgpLE10PW5ldyBQdCgidm9pZCIpLE50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9bix0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9e30sdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsQnQoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1yZXR1cm4gdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLG89dGhpcztpZighdGhpcy5fdHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciBldmVudCAiJytuKyciIGJlY2F1c2UgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrIlwiIGRvZXNuJ3QgZXhpc3QhIik7aWYobnVsbD09bnx8MD09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGV2ZW50IGlzIHVuZGVmaW5lZCEnKTtpZigic3RhcnQiIT0oaT1uKSYmImRvbmUiIT1pKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgZm9yIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQhJyk7dmFyIGE9Zih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOnJ9O2EucHVzaChzKTt2YXIgdT1mKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsdCx7fSk7cmV0dXJuIHUuaGFzT3duUHJvcGVydHkoZSl8fChCdCh0LCJuZy10cmlnZ2VyIiksQnQodCwibmctdHJpZ2dlci0iK2UpLHVbZV09TXQpLGZ1bmN0aW9uKCl7by5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXt2YXIgdD1hLmluZGV4T2Yocyk7dD49MCYmYS5zcGxpY2UodCwxKSxvLl90cmlnZ2Vyc1tlXXx8ZGVsZXRlIHVbZV19KX19LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzW3RdJiYodGhpcy5fdHJpZ2dlcnNbdF09ZSwhMCl9LHQucHJvdG90eXBlLl9nZXRUcmlnZ2VyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyaWdnZXJzW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyICInK3QrJyIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQhJyk7cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpczt2b2lkIDA9PT1yJiYocj0hMCk7dmFyIG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxhPW5ldyBEdCh0aGlzLmlkLGUsdCkscz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtzfHwoQnQodCwibmctdHJpZ2dlciIpLEJ0KHQsIm5nLXRyaWdnZXItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LHM9e30pKTt2YXIgdT1zW2VdLGw9bmV3IFB0KG4sdGhpcy5pZCk7aWYoIShuJiZuLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmdSYmbC5hYnNvcmJPcHRpb25zKHUub3B0aW9ucyksc1tlXT1sLHV8fCh1PU10KSwidm9pZCI9PT1sLnZhbHVlfHx1LnZhbHVlIT09bC52YWx1ZSl7dmFyIGM9Zih0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCx0LFtdKTtjLmZvckVhY2goZnVuY3Rpb24odCl7dC5uYW1lc3BhY2VJZD09aS5pZCYmdC50cmlnZ2VyTmFtZT09ZSYmdC5xdWV1ZWQmJnQuZGVzdHJveSgpfSk7dmFyIGg9by5tYXRjaFRyYW5zaXRpb24odS52YWx1ZSxsLnZhbHVlLHQsbC5wYXJhbXMpLGQ9ITE7aWYoIWgpe2lmKCFyKXJldHVybjtoPW8uZmFsbGJhY2tUcmFuc2l0aW9uLGQ9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmgsZnJvbVN0YXRlOnUsdG9TdGF0ZTpsLHBsYXllcjphLGlzRmFsbGJhY2tUcmFuc2l0aW9uOmR9KSxkfHwoQnQodCwibmctYW5pbWF0ZS1xdWV1ZWQiKSxhLm9uU3RhcnQoZnVuY3Rpb24oKXtIdCh0LCJuZy1hbmltYXRlLXF1ZXVlZCIpfSkpLGEub25Eb25lKGZ1bmN0aW9uKCl7dmFyIGU9aS5wbGF5ZXJzLmluZGV4T2YoYSk7ZT49MCYmaS5wbGF5ZXJzLnNwbGljZShlLDEpO3ZhciBuPWkuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihuKXt2YXIgcj1uLmluZGV4T2YoYSk7cj49MCYmbi5zcGxpY2UociwxKX19KSx0aGlzLnBsYXllcnMucHVzaChhKSxjLnB1c2goYSksYX1pZighZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxyPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtpZighZS5oYXNPd25Qcm9wZXJ0eShvKXx8dFtvXSE9PWVbb10pcmV0dXJuITF9cmV0dXJuITB9KHUucGFyYW1zLGwucGFyYW1zKSl7dmFyIHA9W10sbT1vLm1hdGNoU3R5bGVzKHUudmFsdWUsdS5wYXJhbXMscCkseT1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMscCk7cC5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHApOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7TCh0LG0pLEQodCx5KX0pfX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2RlbGV0ZSB0aGlzLl90cmlnZ2Vyc1t0XSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goZnVuY3Rpb24oZSxuKXtkZWxldGUgZVt0XX0pLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuLHIpe2UuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KHIsbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSE9dH0pKX0pfSx0LnByb3RvdHlwZS5jbGVhckVsZW1lbnRDYWNoZT1mdW5jdGlvbih0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTt2YXIgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfSx0LnByb3RvdHlwZS5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCwiLm5nLXRyaWdnZXIiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0W2p0XSl7dmFyIG49ci5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KTtuLnNpemU/bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITEsITApfSk6ci5jbGVhckVsZW1lbnRDYWNoZSh0KX19KX0sdC5wcm90b3R5cGUudHJpZ2dlckxlYXZlQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihvKXt2YXIgcz1bXTtpZihPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGkuX3RyaWdnZXJzW2VdKXt2YXIgbj1pLnRyaWdnZXIodCxlLCJ2b2lkIixyKTtuJiZzLnB1c2gobil9fSkscy5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSksbiYmYShzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUodCl9KSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldCh0KTtpZihuKXt2YXIgcj1uZXcgU2V0O24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLm5hbWU7aWYoIXIuaGFzKGkpKXtyLmFkZChpKTt2YXIgbz1lLl90cmlnZ2Vyc1tpXS5mYWxsYmFja1RyYW5zaXRpb24sYT1lLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KVtpXXx8TXQscz1uZXcgUHQoInZvaWQiKSx1PW5ldyBEdChlLmlkLGksdCk7ZS5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLGUuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTppLHRyYW5zaXRpb246byxmcm9tU3RhdGU6YSx0b1N0YXRlOnMscGxheWVyOnUsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX19KX19LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSwhMCksIXRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpe3ZhciBpPSExO2lmKHIudG90YWxBbmltYXRpb25zKXt2YXIgbz1yLnBsYXllcnMubGVuZ3RoP3IucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKWk9ITA7ZWxzZSBmb3IodmFyIGE9dDthPWEucGFyZW50Tm9kZTspaWYoci5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGEpKXtpPSEwO2JyZWFrfX10aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxpP3IubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpOihyLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtyZXR1cm4gbi5jbGVhckVsZW1lbnRDYWNoZSh0KX0pLHIuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxyLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlKXtCdCh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfSx0LnByb3RvdHlwZS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1yLnBsYXllcjtpZighaS5kZXN0cm95ZWQpe3ZhciBvPXIuZWxlbWVudCxhPWUuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO2EmJmEuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLm5hbWU9PXIudHJpZ2dlck5hbWUpe3ZhciBuPWMobyxyLnRyaWdnZXJOYW1lLHIuZnJvbVN0YXRlLnZhbHVlLHIudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LHUoci5wbGF5ZXIsZS5waGFzZSxuLGUuY2FsbGJhY2spfX0pLGkubWFya2VkRm9yRGVzdHJveT9lLl9lbmdpbmUuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe2kuZGVzdHJveSgpfSk6bi5wdXNoKHIpfX0pLHRoaXMuX3F1ZXVlPVtdLG4uc29ydChmdW5jdGlvbih0LG4pe3ZhciByPXQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsaT1uLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1yfHwwPT1pP3ItaTplLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0LmVsZW1lbnQsbi5lbGVtZW50KT8xOi0xfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX0sdC5wcm90b3R5cGUuZWxlbWVudENvbnRhaW5zRGF0YT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSwhIXRoaXMuX3F1ZXVlLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWxlbWVudD09PXR9KXx8ZX0sdH0oKSxSdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLmRyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt9fXJldHVybiB0LnByb3RvdHlwZS5fb25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVldWVkUGxheWVycyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5xdWV1ZWQmJnQucHVzaChlKX0pfSksdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVOYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgTnQodCxlLHRoaXMpO3JldHVybiBlLnBhcmVudE5vZGU/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QobixlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsbiksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09bn0sdC5wcm90b3R5cGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtpZihuPj0wKXtmb3IodmFyIHI9ITEsaT1uO2k+PTA7aS0tKWlmKHRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLl9uYW1lc3BhY2VMaXN0W2ldLmhvc3RFbGVtZW50LGUpKXt0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShpKzEsMCx0KSxyPSEwO2JyZWFrfXJ8fHRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKDAsMCx0KX1lbHNlIHRoaXMuX25hbWVzcGFjZUxpc3QucHVzaCh0KTtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5zZXQoZSx0KSx0fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyZXR1cm4gbnx8KG49dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSksbn0sdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07ciYmci5yZWdpc3RlcihlLG4pJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih0KXt2YXIgcj10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtuLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShyLmhvc3RFbGVtZW50KSxkZWxldGUgbi5fbmFtZXNwYWNlTG9va3VwW3RdO3ZhciBlPW4uX25hbWVzcGFjZUxpc3QuaW5kZXhPZihyKTtlPj0wJiZuLl9uYW1lc3BhY2VMaXN0LnNwbGljZShlLDEpfSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoZnVuY3Rpb24oKXtyZXR1cm4gci5kZXN0cm95KGUpfSl9fSx0LnByb3RvdHlwZS5fZmV0Y2hOYW1lc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX0sdC5wcm90b3R5cGUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBTZXQsbj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobilmb3IodmFyIHI9T2JqZWN0LmtleXMobiksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1uW3JbaV1dLm5hbWVzcGFjZUlkO2lmKG8pe3ZhciBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG8pO2EmJmUuYWRkKGEpfX1yZXR1cm4gZX0sdC5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbih0LGUsbixyKXtpZihMdChlKSl7dmFyIGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYoaSlyZXR1cm4gaS50cmlnZ2VyKGUsbixyKSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUsbixyKXtpZihMdChlKSl7dmFyIGk9ZVtqdF07aWYoaSYmaS5zZXRGb3JSZW1vdmFsKXtpLnNldEZvclJlbW92YWw9ITEsaS5zZXRGb3JNb3ZlPSEwO3ZhciBvPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO28+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UobywxKX1pZih0KXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTthJiZhLmluc2VydE5vZGUoZSxuKX1yJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9fSx0LnByb3RvdHlwZS5jb2xsZWN0RW50ZXJFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQ9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLEJ0KHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksSHQodCwibmctYW5pbWF0ZS1kaXNhYmxlZCIpKX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUsbil7aWYoTHQoZSkpe3ZhciByPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtyP3IucmVtb3ZlTm9kZShlLG4pOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLG4pfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoZSxuKX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc1JlbW92ZWQ9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtqdF09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpyLGhhc0FuaW1hdGlvbjpuLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIEx0KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLG4scixpKTpmdW5jdGlvbigpe319LHQucHJvdG90eXBlLl9idWlsZEluc3RydWN0aW9uPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHQudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcix0LmVsZW1lbnQsdC5mcm9tU3RhdGUudmFsdWUsdC50b1N0YXRlLnZhbHVlLG4scix0LmZyb21TdGF0ZS5vcHRpb25zLHQudG9TdGF0ZS5vcHRpb25zLGUsaSl9LHQucHJvdG90eXBlLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCk7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KX0pLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKG49dGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGluZyIsITApKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl9KX0sdC5wcm90b3R5cGUuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucXVldWVkP3QubWFya2VkRm9yRGVzdHJveT0hMDp0LmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2lmKHQucGxheWVycy5sZW5ndGgpcmV0dXJuIGEodC5wbGF5ZXJzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZSgpfSk7ZSgpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NMZWF2ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbanRdO2lmKG4mJm4uc2V0Rm9yUmVtb3ZhbCl7aWYodFtqdF09SXQsbi5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO3ZhciByPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG4ubmFtZXNwYWNlSWQpO3ImJnIuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxuLnNldEZvclJlbW92YWwpfXRoaXMuZHJpdmVyLm1hdGNoZXNFbGVtZW50KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIikmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKX0pfSx0LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PS0xKTt2YXIgbj1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LG4pfSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKHZhciByPTA7cjx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO3IrKylCdCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbcl0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7dmFyIGk9W107dHJ5e249dGhpcy5fZmx1c2hBbmltYXRpb25zKGksdCl9ZmluYWxseXtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0oKX19ZWxzZSBmb3Iocj0wO3I8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtyKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tyXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe3ZhciBvPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sbi5sZW5ndGg/YShuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsbz1uZXcgc3Qscz1bXSx1PW5ldyBNYXAsbD1bXSxjPW5ldyBNYXAsaD1uZXcgTWFwLGQ9bmV3IE1hcCxwPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cC5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKylwLmFkZChlW3JdKX0pO3ZhciBtPXRoaXMuYm9keU5vZGUseT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksZz1VdCh5LHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksdj1uZXcgTWFwLGI9MDtnLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK2IrKzt2LnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gQnQodCxuKX0pfSk7Zm9yKHZhciBfPVtdLHc9bmV3IFNldCx4PW5ldyBTZXQsTz0wO088dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtPKyspKEI9KHo9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW09dKVtqdF0pJiZCLnNldEZvclJlbW92YWwmJihfLnB1c2goeiksdy5hZGQoeiksQi5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoeiwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB3LmFkZCh0KX0pOnguYWRkKHopKTt2YXIgQz1uZXcgTWFwLFM9VXQoeSxBcnJheS5mcm9tKHcpKTtTLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK2IrKztDLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gQnQodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7Zy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49di5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIdCh0LG4pfSl9KSxTLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1DLmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsbil9KX0pLF8uZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgRT1bXSxrPVtdLFQ9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1RdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixyPXQuZWxlbWVudDtpZihFLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIGk9cltqdF07aWYoaSYmaS5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBhPSFtfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KG0sciksdT1DLmdldChyKSxwPXYuZ2V0KHIpLHk9bi5fYnVpbGRJbnN0cnVjdGlvbih0LG8scCx1LGEpO2lmKHkuZXJyb3JzJiZ5LmVycm9ycy5sZW5ndGgpay5wdXNoKHkpO2Vsc2V7aWYoYSlyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwocix5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChyLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7aWYodC5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwocix5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChyLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7eS50aW1lbGluZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMH0pLG8uYXBwZW5kKHIseS50aW1lbGluZXMpLGwucHVzaCh7aW5zdHJ1Y3Rpb246eSxwbGF5ZXI6ZSxlbGVtZW50OnJ9KSx5LnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmKGMsdCxbXSkucHVzaChlKX0pLHkucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGgpe3ZhciByPWguZ2V0KGUpO3J8fGguc2V0KGUscj1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSl9fSkseS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCkscj1kLmdldChlKTtyfHxkLnNldChlLHI9bmV3IFNldCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByLmFkZCh0KX0pfSl9fSk7aWYoay5sZW5ndGgpe3ZhciBJPVtdO2suZm9yRWFjaChmdW5jdGlvbih0KXtJLnB1c2goIkAiK3QudHJpZ2dlck5hbWUrIiBoYXMgZmFpbGVkIGR1ZSB0bzpcbiIpLHQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEkucHVzaCgiLSAiK3QrIlxuIil9KX0pLEUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLnJlcG9ydEVycm9yKEkpfXZhciBBPW5ldyBNYXAsaj1uZXcgTWFwO2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQ7by5oYXMoZSkmJihqLnNldChlLGUpLG4uX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQucGxheWVyLm5hbWVzcGFjZUlkLHQuaW5zdHJ1Y3Rpb24sQSkpfSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtuLl9nZXRQcmV2aW91c1BsYXllcnMoZSwhMSx0Lm5hbWVzcGFjZUlkLHQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaChmdW5jdGlvbih0KXtmKEEsZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIFA9Xy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHF0KHQsaCxkKX0pLE09bmV3IE1hcDtWdChNLHRoaXMuZHJpdmVyLHgsZCxpLmEpLmZvckVhY2goZnVuY3Rpb24odCl7cXQodCxoLGQpJiZQLnB1c2godCl9KTt2YXIgTj1uZXcgTWFwO2cuZm9yRWFjaChmdW5jdGlvbih0LGUpe1Z0KE4sbi5kcml2ZXIsbmV3IFNldCh0KSxoLGkubyl9KSxQLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9TS5nZXQodCksbj1OLmdldCh0KTtNLnNldCh0LE9iamVjdChyLmEpKHt9LGUsbikpfSk7dmFyIFI9W10sRj1bXSxWPXt9O2wuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQscj10LnBsYXllcixpPXQuaW5zdHJ1Y3Rpb247aWYoby5oYXMoZSkpe2lmKHAuaGFzKGUpKXJldHVybiByLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKGUsaS50b1N0eWxlcyl9KSxyLmRpc2FibGVkPSEwLHIub3ZlcnJpZGVUb3RhbFRpbWUoaS50b3RhbFRpbWUpLHZvaWQgcy5wdXNoKHIpO3ZhciBsPVY7aWYoai5zaXplPjEpe2Zvcih2YXIgYz1lLGY9W107Yz1jLnBhcmVudE5vZGU7KXt2YXIgaD1qLmdldChjKTtpZihoKXtsPWg7YnJlYWt9Zi5wdXNoKGMpfWYuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gai5zZXQodCxsKX0pfXZhciBkPW4uX2J1aWxkQW5pbWF0aW9uKHIubmFtZXNwYWNlSWQsaSxBLHUsTixNKTtpZihyLnNldFJlYWxQbGF5ZXIoZCksbD09PVYpUi5wdXNoKHIpO2Vsc2V7dmFyIG09bi5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTttJiZtLmxlbmd0aCYmKHIucGFyZW50UGxheWVyPWEobSkpLHMucHVzaChyKX19ZWxzZSBMKGUsaS5mcm9tU3R5bGVzKSxyLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKGUsaS50b1N0eWxlcyl9KSxGLnB1c2gocikscC5oYXMoZSkmJnMucHVzaChyKX0pLEYuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT11LmdldCh0LmVsZW1lbnQpO2lmKGUmJmUubGVuZ3RoKXt2YXIgbj1hKGUpO3Quc2V0UmVhbFBsYXllcihuKX19KSxzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnRQbGF5ZXI/dC5zeW5jUGxheWVyRXZlbnRzKHQucGFyZW50UGxheWVyKTp0LmRlc3Ryb3koKX0pO2Zvcih2YXIgVT0wO1U8Xy5sZW5ndGg7VSsrKXt2YXIgeixCPSh6PV9bVV0pW2p0XTtpZihIdCh6LCJuZy1sZWF2ZSIpLCFCfHwhQi5oYXNBbmltYXRpb24pe3ZhciBIPVtdO2lmKGMuc2l6ZSl7dmFyIFc9Yy5nZXQoeik7VyYmVy5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChyLmQpKFcpKTtmb3IodmFyIHE9dGhpcy5kcml2ZXIucXVlcnkoeiwiLm5nLWFuaW1hdGluZyIsITApLFk9MDtZPHEubGVuZ3RoO1krKyl7dmFyIEc9Yy5nZXQocVtZXSk7RyYmRy5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChyLmQpKEcpKX19dmFyIFE9SC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZGVzdHJveWVkfSk7US5sZW5ndGg/V3QodGhpcyx6LFEpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZSh6KX19cmV0dXJuIF8ubGVuZ3RoPTAsUi5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucGxheWVycy5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7dC5kZXN0cm95KCk7dmFyIGU9bi5wbGF5ZXJzLmluZGV4T2YodCk7bi5wbGF5ZXJzLnNwbGljZShlLDEpfSksdC5wbGF5KCl9KSxSfSx0LnByb3RvdHlwZS5lbGVtZW50Q29udGFpbnNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEscj1lW2p0XTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8bn0sdC5wcm90b3R5cGUuYWZ0ZXJGbHVzaD1mdW5jdGlvbih0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9nZXRQcmV2aW91c1BsYXllcnM9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1bXTtpZihlKXt2YXIgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYobz1hKX1lbHNle3ZhciBzPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYocyl7dmFyIHU9IWl8fCJ2b2lkIj09aTtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5xdWV1ZWR8fCh1fHx0LnRyaWdnZXJOYW1lPT1yKSYmby5wdXNoKHQpfSl9fXJldHVybihufHxyKSYmKG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIShuJiZuIT10Lm5hbWVzcGFjZUlkfHxyJiZyIT10LnRyaWdnZXJOYW1lKX0pKSxvfSx0LnByb3RvdHlwZS5fYmVmb3JlQW5pbWF0aW9uQnVpbGQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG8sYT1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsdT1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWUsbD1mdW5jdGlvbih0KXt2YXIgcj10LmVsZW1lbnQsaT1yIT09YSxvPWYobixyLFtdKTtjLl9nZXRQcmV2aW91c1BsYXllcnMocixpLHMsdSxlLnRvU3RhdGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRSZWFsUGxheWVyKCk7ZS5iZWZvcmVEZXN0cm95JiZlLmJlZm9yZURlc3Ryb3koKSx0LmRlc3Ryb3koKSxvLnB1c2godCl9KX0sYz10aGlzO3RyeXtmb3IodmFyIGg9T2JqZWN0KHIuZSkoZS50aW1lbGluZXMpLGQ9aC5uZXh0KCk7IWQuZG9uZTtkPWgubmV4dCgpKWwoZC52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKG89aC5yZXR1cm4pJiZvLmNhbGwoaCl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fUwoYSxlLmZyb21TdHlsZXMpfSx0LnByb3RvdHlwZS5fYnVpbGRBbmltYXRpb249ZnVuY3Rpb24odCxlLG4scixvLHUpe3ZhciBsPXRoaXMsYz1lLnRyaWdnZXJOYW1lLGg9ZS5lbGVtZW50LGQ9W10scD1uZXcgU2V0LG09bmV3IFNldCx5PWUudGltZWxpbmVzLm1hcChmdW5jdGlvbihlKXt2YXIgYT1lLmVsZW1lbnQ7cC5hZGQoYSk7dmFyIGY9YVtqdF07aWYoZiYmZi5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IGkuZChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciB5LGcsdj1hIT09aCxiPSh5PShuLmdldChhKXx8VHQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSxnPVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXTtvIGluc3RhbmNlb2YgaS5uP3Qoby5wbGF5ZXJzLG4pOm4ucHVzaChvKX19KHksZyksZykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhdC5lbGVtZW50JiZ0LmVsZW1lbnQ9PT1hfSksXz1vLmdldChhKSx3PXUuZ2V0KGEpLHg9cygwLGwuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyxfLHcpLE89bC5fYnVpbGRQbGF5ZXIoZSx4LGIpO2lmKGUuc3ViVGltZWxpbmUmJnImJm0uYWRkKGEpLHYpe3ZhciBDPW5ldyBEdCh0LGMsYSk7Qy5zZXRSZWFsUGxheWVyKE8pLGQucHVzaChDKX1yZXR1cm4gT30pO2QuZm9yRWFjaChmdW5jdGlvbih0KXtmKGwucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LFtdKS5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtpZih0IGluc3RhbmNlb2YgTWFwKXtpZihyPXQuZ2V0KGUpKXtpZihyLmxlbmd0aCl7dmFyIGk9ci5pbmRleE9mKG4pO3Iuc3BsaWNlKGksMSl9MD09ci5sZW5ndGgmJnQuZGVsZXRlKGUpfX1lbHNlKHI9dFtlXSkmJihyLmxlbmd0aCYmKGk9ci5pbmRleE9mKG4pLHIuc3BsaWNlKGksMSkpLDA9PXIubGVuZ3RoJiZkZWxldGUgdFtlXSk7cmV0dXJuIHJ9KGwucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LHQpfSl9KSxwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEJ0KHQsIm5nLWFuaW1hdGluZyIpfSk7dmFyIGc9YSh5KTtyZXR1cm4gZy5vbkRlc3Ryb3koZnVuY3Rpb24oKXtwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsIm5nLWFuaW1hdGluZyIpfSksRChoLGUudG9TdHlsZXMpfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Yocix0LFtdKS5wdXNoKGcpfSksZ30sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKHQuZWxlbWVudCxlLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxuKTpuZXcgaS5kKHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksRHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgaS5kLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1yZXR1cm4gdC5wcm90b3R5cGUuc2V0UmVhbFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj10LE9iamVjdC5rZXlzKHRoaXMuX3F1ZXVlZENhbGxiYWNrcykuZm9yRWFjaChmdW5jdGlvbihuKXtlLl9xdWV1ZWRDYWxsYmFja3Nbbl0uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdSh0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Zih0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsdCksdGhpcy5fcGxheWVyLm9uU3RhcnQodCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5pbml0KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX0sdH0oKTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gdCYmMT09PXQubm9kZVR5cGV9ZnVuY3Rpb24gRnQodCxlKXt2YXIgbj10LnN0eWxlLmRpc3BsYXk7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT1udWxsIT1lP2U6Im5vbmUiLG59ZnVuY3Rpb24gVnQodCxlLG4scixpKXt2YXIgbz1bXTtuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG8ucHVzaChGdCh0KSl9KTt2YXIgYT1bXTtyLmZvckVhY2goZnVuY3Rpb24obixyKXt2YXIgbz17fTtuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49b1t0XT1lLmNvbXB1dGVTdHlsZShyLHQsaSk7biYmMCE9bi5sZW5ndGh8fChyW2p0XT1BdCxhLnB1c2gocikpfSksdC5zZXQocixvKX0pO3ZhciBzPTA7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gRnQodCxvW3MrK10pfSksYX1mdW5jdGlvbiBVdCh0LGUpe3ZhciBuPW5ldyBNYXA7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNldCh0LFtdKX0pLDA9PWUubGVuZ3RoKXJldHVybiBuO3ZhciByPW5ldyBTZXQoZSksaT1uZXcgTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24gdChlKXtpZighZSlyZXR1cm4gMTt2YXIgbz1pLmdldChlKTtpZihvKXJldHVybiBvO3ZhciBhPWUucGFyZW50Tm9kZTtyZXR1cm4gbz1uLmhhcyhhKT9hOnIuaGFzKGEpPzE6dChhKSxpLnNldChlLG8pLG99KHQpOzEhPT1lJiZuLmdldChlKS5wdXNoKHQpfSksbn12YXIgenQ9IiQkY2xhc3NlcyI7ZnVuY3Rpb24gQnQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj10W3p0XTtufHwobj10W3p0XT17fSksbltlXT0hMH19ZnVuY3Rpb24gSHQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5yZW1vdmUoZSk7ZWxzZXt2YXIgbj10W3p0XTtuJiZkZWxldGUgbltlXX19ZnVuY3Rpb24gV3QodCxlLG4pe2Eobikub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvY2Vzc0xlYXZlTm9kZShlKX0pfWZ1bmN0aW9uIHF0KHQsZSxuKXt2YXIgcj1uLmdldCh0KTtpZighcilyZXR1cm4hMTt2YXIgaT1lLmdldCh0KTtyZXR1cm4gaT9yLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkuYWRkKHQpfSk6ZS5zZXQodCxyKSxuLmRlbGV0ZSh0KSwhMH12YXIgWXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgUnQodCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBrdCh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiByLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9fXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3RlclRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz10KyItIityLGE9dGhpcy5fdHJpZ2dlckNhY2hlW29dO2lmKCFhKXt2YXIgcz1bXSx1PXR0KHRoaXMuX2RyaXZlcixpLHMpO2lmKHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK3IrJyIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAnK3Muam9pbigiXG4gLSAiKSk7YT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgQ3QodCxlKX0ocix1KSx0aGlzLl90cmlnZ2VyQ2FjaGVbb109YX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLHIsYSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9LHQucHJvdG90eXBlLm9uSW5zZXJ0PWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixyKX0sdC5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX0sdC5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbih0LGUsbixpKXtpZigiQCI9PW4uY2hhckF0KDApKXt2YXIgbz1PYmplY3Qoci5jKShoKG4pLDIpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQob1swXSxlLG9bMV0saSl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIodCxlLG4saSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixpLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe3ZhciBhPU9iamVjdChyLmMpKGgobiksMik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihhWzBdLGUsYVsxXSxvKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLG4saSxvKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9LTEpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGxheWVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxHdD0iYW5pbWF0aW9uIixRdD0iYW5pbWF0aW9uZW5kIixLdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fbmFtZT1lLHRoaXMuX2R1cmF0aW9uPW4sdGhpcy5fZGVsYXk9cix0aGlzLl9lYXNpbmc9aSx0aGlzLl9maWxsTW9kZT1vLHRoaXMuX29uRG9uZUZuPWEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fZXZlbnRGbj1mdW5jdGlvbih0KXtyZXR1cm4gcy5faGFuZGxlQ2FsbGJhY2sodCl9fXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0LGUsbjtlPXRoaXMuX2R1cmF0aW9uKyJtcyAiK3RoaXMuX2Vhc2luZysiICIrdGhpcy5fZGVsYXkrIm1zIDEgbm9ybWFsICIrdGhpcy5fZmlsbE1vZGUrIiAiK3RoaXMuX25hbWUsKG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS50cmltKCkpLmxlbmd0aCYmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspIiwiPT09dC5jaGFyQXQobikmJjB9KG4pLGU9bisiLCAiK2UpLHRlKHQsIiIsZSksSnQodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtadCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInBhdXNlZCIpfSx0LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtadCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInJ1bm5pbmciKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9WHQodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKTt0aGlzLl9wb3NpdGlvbj10KnRoaXMuX2R1cmF0aW9uLHRlKHRoaXMuX2VsZW1lbnQsIkRlbGF5IiwiLSIrdGhpcy5fcG9zaXRpb24rIm1zIixlKX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHQucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9uZ1Rlc3RNYW51YWxUaW1lc3RhbXB8fERhdGUubm93KCksbj0xZTMqcGFyc2VGbG9hdCh0LmVsYXBzZWRUaW1lLnRvRml4ZWQoMykpO3QuYW5pbWF0aW9uTmFtZT09dGhpcy5fbmFtZSYmTWF0aC5tYXgoZS10aGlzLl9zdGFydFRpbWUsMCk+PXRoaXMuX2RlbGF5JiZuPj10aGlzLl9kdXJhdGlvbiYmdGhpcy5maW5pc2goKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLEp0KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZmluaXNoKCksZT10aGlzLl9uYW1lLChyPSR0KG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS5zcGxpdCgiLCIpLGUpKT49MCYmKG4uc3BsaWNlKHIsMSksdGUodCwiIixuLmpvaW4oIiwiKSkpKX0sdH0oKTtmdW5jdGlvbiBadCh0LGUsbil7dGUodCwiUGxheVN0YXRlIixuLFh0KHQsZSkpfWZ1bmN0aW9uIFh0KHQsZSl7dmFyIG49ZWUodCwiIik7cmV0dXJuIG4uaW5kZXhPZigiLCIpPjA/JHQobi5zcGxpdCgiLCIpLGUpOiR0KFtuXSxlKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBKdCh0LGUsbil7bj90LnJlbW92ZUV2ZW50TGlzdGVuZXIoUXQsZSk6dC5hZGRFdmVudExpc3RlbmVyKFF0LGUpfWZ1bmN0aW9uIHRlKHQsZSxuLHIpe3ZhciBpPUd0K2U7aWYobnVsbCE9cil7dmFyIG89dC5zdHlsZVtpXTtpZihvLmxlbmd0aCl7dmFyIGE9by5zcGxpdCgiLCIpO2Fbcl09bixuPWEuam9pbigiLCIpfX10LnN0eWxlW2ldPW59ZnVuY3Rpb24gZWUodCxlKXtyZXR1cm4gdC5zdHlsZVtHdCtlXX12YXIgbmU9ImxpbmVhciIscmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JTklUSUFMSVpFRD0xXT0iSU5JVElBTElaRUQiLHRbdC5TVEFSVEVEPTJdPSJTVEFSVEVEIix0W3QuRklOSVNIRUQ9M109IkZJTklTSEVEIix0W3QuREVTVFJPWUVEPTRdPSJERVNUUk9ZRUQiLHR9KHt9KSxpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1yLHRoaXMuX2RlbGF5PWksdGhpcy5fZmluYWxTdHlsZXM9YSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLmN1cnJlbnRTbmFwc2hvdD17fSx0aGlzLnN0YXRlPTAsdGhpcy5lYXNpbmc9b3x8bmUsdGhpcy50b3RhbFRpbWU9citpLHRoaXMuX2J1aWxkU3R5bGVyKCl9cmV0dXJuIHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PXJlLkRFU1RST1lFRHx8KHRoaXMuc3RhdGU9cmUuREVTVFJPWUVELHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5fZmx1c2hEb25lRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXX0sdC5wcm90b3R5cGUuX2ZsdXNoU3RhcnRGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PXJlLkZJTklTSEVEfHwodGhpcy5zdGF0ZT1yZS5GSU5JU0hFRCx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlPj1yZS5TVEFSVEVEfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT49cmUuSU5JVElBTElaRUR8fCh0aGlzLnN0YXRlPXJlLklOSVRJQUxJWkVELHRoaXMuX3N0eWxlci5hcHBseSgpLHRoaXMuX2RlbGF5JiZ0aGlzLl9zdHlsZXIucGF1c2UoKSl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLnN0YXRlPXJlLlNUQVJURUQpLHRoaXMuX3N0eWxlci5yZXN1bWUoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9zdHlsZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXIuZGVzdHJveSgpLHRoaXMuX2J1aWxkU3R5bGVyKCksdGhpcy5fc3R5bGVyLmFwcGx5KCl9LHQucHJvdG90eXBlLl9idWlsZFN0eWxlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3R5bGVyPW5ldyBLdCh0aGlzLmVsZW1lbnQsdGhpcy5hbmltYXRpb25OYW1lLHRoaXMuX2R1cmF0aW9uLHRoaXMuX2RlbGF5LHRoaXMuZWFzaW5nLCJmb3J3YXJkcyIsZnVuY3Rpb24oKXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaW5pdCgpO3ZhciBlPXt9O2lmKHRoaXMuaGFzU3RhcnRlZCgpKXt2YXIgbj10aGlzLnN0YXRlPj1yZS5GSU5JU0hFRDtPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihyKXsib2Zmc2V0IiE9ciYmKGVbcl09bj90Ll9maW5hbFN0eWxlc1tyXTpRKHQuZWxlbWVudCxyKSl9KX10aGlzLmN1cnJlbnRTbmFwc2hvdD1lfSx0fSgpLG9lPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuZWxlbWVudD1lLHIuX3N0YXJ0aW5nU3R5bGVzPXt9LHIuX19pbml0aWFsaXplZD0hMSxyLl9zdHlsZXM9UyhuKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOyF0aGlzLl9faW5pdGlhbGl6ZWQmJnRoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5fX2luaXRpYWxpemVkPSEwLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9zdGFydGluZ1N0eWxlc1t0XT1lLmVsZW1lbnQuc3R5bGVbdF19KSx0LnByb3RvdHlwZS5pbml0LmNhbGwodGhpcykpfSxlLnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9zdGFydGluZ1N0eWxlcyYmKHRoaXMuaW5pdCgpLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsZS5fc3R5bGVzW3RdKX0pLHQucHJvdG90eXBlLnBsYXkuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYoT2JqZWN0LmtleXModGhpcy5fc3RhcnRpbmdTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5fc3RhcnRpbmdTdHlsZXNbdF07bj9lLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxuKTplLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9KSx0aGlzLl9zdGFydGluZ1N0eWxlcz1udWxsLHQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSl9LGV9KGkuZCksYWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY291bnQ9MCx0aGlzLl9oZWFkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImhlYWQiKSx0aGlzLl93YXJuaW5nSXNzdWVkPSExfXJldHVybiB0LnByb3RvdHlwZS52YWxpZGF0ZVN0eWxlUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCxlKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBDKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19LHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0iQGtleWZyYW1lcyAiK2UrIiB7XG4iLGk9IiI7KG49bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFModCl9KSkuZm9yRWFjaChmdW5jdGlvbih0KXtpPSIgIjt2YXIgZT1wYXJzZUZsb2F0KHQub2Zmc2V0KTtyKz0iIitpKzEwMCplKyIlIHtcbiIsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJvZmZzZXQiOnJldHVybjtjYXNlImVhc2luZyI6cmV0dXJuIHZvaWQobiYmKHIrPWkrImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICIrbisiO1xuIikpO2RlZmF1bHQ6cmV0dXJuIHZvaWQocis9IiIraStlKyI6ICIrbisiO1xuIil9fSkscis9aSsifVxuIn0pLHIrPSJ9XG4iO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG8uaW5uZXJIVE1MPXIsb30sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXt2b2lkIDA9PT1vJiYobz1bXSksYSYmdGhpcy5fbm90aWZ5RmF1bHR5U2NydWJiZXIoKTt2YXIgcz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGllfSksdT17fTtxKG4scikmJnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmN1cnJlbnRTbmFwc2hvdDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB1W3RdPWVbdF19KX0pO3ZhciBsPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0JiYoQXJyYXkuaXNBcnJheSh0KT90Olt0XSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4peyJvZmZzZXQiIT1uJiYiZWFzaW5nIiE9biYmKGVbbl09dFtuXSl9KX0pLGV9KGU9WSh0LGUsdSkpO2lmKDA9PW4pcmV0dXJuIG5ldyBvZSh0LGwpO3ZhciBjPSJnZW5fY3NzX2tmXyIrdGhpcy5fY291bnQrKyxmPXRoaXMuYnVpbGRLZXlmcmFtZUVsZW1lbnQodCxjLGUpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImhlYWQiKS5hcHBlbmRDaGlsZChmKTt2YXIgaD1uZXcgaWUodCxlLGMsbixyLGksbCk7cmV0dXJuIGgub25EZXN0cm95KGZ1bmN0aW9uKCl7dmFyIHQ7KHQ9ZikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pLGh9LHQucHJvdG90eXBlLl9ub3RpZnlGYXVsdHlTY3J1YmJlcj1mdW5jdGlvbigpe3RoaXMuX3dhcm5pbmdJc3N1ZWR8fChjb25zb2xlLndhcm4oIkBhbmd1bGFyL2FuaW1hdGlvbnM6IHBsZWFzZSBsb2FkIHRoZSB3ZWItYW5pbWF0aW9ucy5qcyBwb2x5ZmlsbCB0byBhbGxvdyBwcm9ncmFtbWF0aWMgYWNjZXNzLi4uXG4iLCIgIHZpc2l0IGh0dHA6Ly9iaXQubHkvSVd1a2FtIHRvIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgdGhlIHdlYi1hbmltYXRpb24tanMgcG9seWZpbGwuIiksdGhpcy5fd2FybmluZ0lzc3VlZD0hMCl9LHR9KCksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1uLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PXt9LHRoaXMuX2R1cmF0aW9uPW4uZHVyYXRpb24sdGhpcy5fZGVsYXk9bi5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfSx0LnByb3RvdHlwZS5fYnVpbGRQbGF5ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9pbml0aWFsaXplZCl7dGhpcy5faW5pdGlhbGl6ZWQ9ITA7dmFyIGU9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsZSx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp7fSx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX19LHQucHJvdG90eXBlLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUuX3RyaWdnZXJXZWJBbmltYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmFuaW1hdGUoZSxuKX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9LHQucHJvdG90eXBlLl9yZXNldERvbVBsYXllclN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRGVzdHJveUZucz1bXSl9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidG90YWxUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307dGhpcy5oYXNTdGFydGVkKCkmJk9iamVjdC5rZXlzKHRoaXMuX2ZpbmFsS2V5ZnJhbWUpLmZvckVhY2goZnVuY3Rpb24obil7Im9mZnNldCIhPW4mJihlW25dPXQuX2ZpbmlzaGVkP3QuX2ZpbmFsS2V5ZnJhbWVbbl06USh0LmVsZW1lbnQsbikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzTmF0aXZlSW1wbD0vXHtccypcW25hdGl2ZVxzK2NvZGVcXVxzKlx9Ly50ZXN0KGNlKCkudG9TdHJpbmcoKSksdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyPW5ldyBhZX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQyh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfSx0LnByb3RvdHlwZS5vdmVycmlkZVdlYkFuaW1hdGlvbnNTdXBwb3J0PWZ1bmN0aW9uKHQpe3RoaXMuX2lzTmF0aXZlSW1wbD10fSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEpe2lmKHZvaWQgMD09PW8mJihvPVtdKSwhYSYmIXRoaXMuX2lzTmF0aXZlSW1wbClyZXR1cm4gdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyLmFuaW1hdGUodCxlLG4scixpLG8pO3ZhciBzPXtkdXJhdGlvbjpuLGRlbGF5OnIsZmlsbDowPT1yPyJib3RoIjoiZm9yd2FyZHMifTtpJiYocy5lYXNpbmc9aSk7dmFyIHU9e30sbD1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHNlfSk7cmV0dXJuIHEobixyKSYmbC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHVbdF09ZVt0XX0pfSksZT1ZKHQsZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTSh0LCExKX0pLHUpLG5ldyBzZSh0LGUscyl9LHR9KCk7ZnVuY3Rpb24gbGUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY2UoKX1mdW5jdGlvbiBjZSgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fX0sT3pmQjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBqfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHp9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gSH0pO3ZhciByPW4oIkNjbkciKSxpPW4oIklwMFIiKSxvPW4oIjI2RlUiKSxhPW4oIlZuRC8iKSxzPW4oIjY3WS8iKSx1PW4oIm1yU0ciKTtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoT2JqZWN0KGkucSkoZSkpe3ZhciBuPS9cYmZsZXgtbGF5b3V0LS4rP1xiL2c7QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoIltjbGFzcyo9IitjKyJdIikpLmZvckVhY2goZnVuY3Rpb24odCl7dC5jbGFzc0xpc3QuY29udGFpbnMoYysic3NyIikmJnQucGFyZW50Tm9kZT90LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCk6dC5jbGFzc05hbWUucmVwbGFjZShuLCIiKX0pfX19dmFyIGM9ImZsZXgtbGF5b3V0LSIsZj1uZXcgci5vKCJGbGV4IExheW91dCB0b2tlbiwgY29sbGVjdCBhbGwgYnJlYWtwb2ludHMgaW50byBvbmUgcHJvdmlkZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksaD1be2FsaWFzOiJ4cyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMHB4KSBhbmQgKG1heC13aWR0aDogNTk5cHgpIn0se2FsaWFzOiJndC14cyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogNjAwcHgpIn0se2FsaWFzOiJsdC1zbSIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogNTk5cHgpIn0se2FsaWFzOiJzbSIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkifSx7YWxpYXM6Imd0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA5NjBweCkifSx7YWxpYXM6Imx0LW1kIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA5NTlweCkifSx7YWxpYXM6Im1kIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkifSx7YWxpYXM6Imd0LW1kIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxMjgwcHgpIn0se2FsaWFzOiJsdC1sZyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoibGciLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkgYW5kIChtYXgtd2lkdGg6IDE5MTlweCkifSx7YWxpYXM6Imd0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJsdC14bCIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogMTkyMHB4KSJ9LHthbGlhczoieGwiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkgYW5kIChtYXgtd2lkdGg6IDUwMDBweCkifV0sZD0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLHA9IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSIsbT0iKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDg0MHB4KSIseT0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIixnPXtIQU5EU0VUOiIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNTk5cHgpLCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSIsVEFCTEVUOnArIiAsICIrZCxXRUI6bSsiLCAiK3krIiAiLEhBTkRTRVRfUE9SVFJBSVQ6IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkiLFRBQkxFVF9QT1JUUkFJVDpwKyIgIixXRUJfUE9SVFJBSVQ6IiIrbSxIQU5EU0VUX0xBTkRTQ0FQRToiKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCldIixUQUJMRVRfTEFORFNDQVBFOiIiK2QsV0VCX0xBTkRTQ0FQRToiIit5fSx2PVt7YWxpYXM6ImhhbmRzZXQiLG1lZGlhUXVlcnk6Zy5IQU5EU0VUfSx7YWxpYXM6ImhhbmRzZXQubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OmcuSEFORFNFVF9MQU5EU0NBUEV9LHthbGlhczoiaGFuZHNldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTpnLkhBTkRTRVRfUE9SVFJBSVR9LHthbGlhczoidGFibGV0IixtZWRpYVF1ZXJ5OmcuVEFCTEVUfSx7YWxpYXM6InRhYmxldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6Zy5UQUJMRVR9LHthbGlhczoidGFibGV0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OmcuVEFCTEVUX1BPUlRSQUlUfSx7YWxpYXM6IndlYiIsbWVkaWFRdWVyeTpnLldFQixvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OmcuV0VCX0xBTkRTQ0FQRSxvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIucG9ydHJhaXQiLG1lZGlhUXVlcnk6Zy5XRUJfUE9SVFJBSVQsb3ZlcmxhcHBpbmc6ITB9XTtmdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIHI9MCxpPWU7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl07aWYobnVsbCE9bylmb3IodmFyIGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYodFthXT1vW2FdKX1yZXR1cm4gdH12YXIgXz0vKFwufC18XykvZztmdW5jdGlvbiB3KHQpe3ZhciBlPXQubGVuZ3RoPjA/dC5jaGFyQXQoMCk6IiIsbj10Lmxlbmd0aD4xP3Quc2xpY2UoMSk6IiI7cmV0dXJuIGUudG9VcHBlckNhc2UoKStufXZhciB4PXthZGRGbGV4VG9QYXJlbnQ6ITAsYWRkT3JpZW50YXRpb25CcHM6ITEsZGlzYWJsZURlZmF1bHRCcHM6ITEsZGlzYWJsZVZlbmRvclByZWZpeGVzOiExLHNlcnZlckxvYWRlZDohMSx1c2VDb2x1bW5CYXNpc1plcm86ITB9LE89bmV3IHIubygiRmxleCBMYXlvdXQgdG9rZW4sIGNvbmZpZyBvcHRpb25zIGZvciB0aGUgbGlicmFyeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4geH19KSxDPW5ldyByLm8oIlRva2VuIChAYW5ndWxhci9mbGV4LWxheW91dCkgQnJlYWtwb2ludHMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHIuVikoZiksZT1PYmplY3Qoci5WKShPKSxuPVtdLmNvbmNhdC5hcHBseShbXSwodHx8W10pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Olt0XX0pKTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG4scj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdC5hbGlhc109dH0pLGUuZm9yRWFjaChmdW5jdGlvbih0KXtyW3QuYWxpYXNdP2Ioclt0LmFsaWFzXSx0KTpyW3QuYWxpYXNdPXR9KSwobj1PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnN1ZmZpeHx8KHQuc3VmZml4PXQuYWxpYXMucmVwbGFjZShfLCJ8Iikuc3BsaXQoInwiKS5tYXAodykuam9pbigiIiksdC5vdmVybGFwcGluZz0hIXQub3ZlcmxhcHBpbmcpfSksbn0oKGUuZGlzYWJsZURlZmF1bHRCcHM/W106aCkuY29uY2F0KGUuYWRkT3JpZW50YXRpb25CcHM/djpbXSksbil9fSksUz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcmVnaXN0cnk9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpdGVtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5zbGljZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic29ydGVkSXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10Lm92ZXJsYXBwaW5nfSksZT10aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuITAhPT10Lm92ZXJsYXBwaW5nfSk7cmV0dXJuIHQuY29uY2F0KGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFsaWFzPT10fSl8fG51bGx9LHQucHJvdG90eXBlLmZpbmRCeVF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1lZGlhUXVlcnk9PXR9KXx8bnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvdmVybGFwcGluZ3MiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAxPT10Lm92ZXJsYXBwaW5nfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhbGlhc2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlhc30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3VmZml4ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1ZmZpeD90LnN1ZmZpeDoiIn0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKEMpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dm9pZCAwPT09dCYmKHQ9ITEpLHZvaWQgMD09PWUmJihlPSJhbGwiKSx2b2lkIDA9PT1uJiYobj0iIiksdm9pZCAwPT09ciYmKHI9IiIpLHRoaXMubWF0Y2hlcz10LHRoaXMubWVkaWFRdWVyeT1lLHRoaXMubXFBbGlhcz1uLHRoaXMuc3VmZml4PXJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMubWF0Y2hlcyx0aGlzLm1lZGlhUXVlcnksdGhpcy5tcUFsaWFzLHRoaXMuc3VmZml4KX0sdH0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fem9uZT10LHRoaXMuX3BsYXRmb3JtSWQ9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3JlZ2lzdHJ5PW5ldyBNYXAsdGhpcy5fc291cmNlPW5ldyBvLmEobmV3IEUoITApKSx0aGlzLl9vYnNlcnZhYmxlJD10aGlzLl9zb3VyY2UuYXNPYnNlcnZhYmxlKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlZ2lzdHJ5LmdldCh0KTtyZXR1cm4hIWUmJmUubWF0Y2hlc30sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZWdpc3RlclF1ZXJ5KHQpLHRoaXMuX29ic2VydmFibGUkLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIXR8fGUubWVkaWFRdWVyeT09PXR9KSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P1tdOiJzdHJpbmciPT10eXBlb2YgdD9bdF06KGU9e30sdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIWUuaGFzT3duUHJvcGVydHkodCkmJihlW3RdPSEwKX0pKTt2YXIgZX0odCk7bi5sZW5ndGg+MCYmKHRoaXMuX3ByZXBhcmVRdWVyeUNTUyhuLHRoaXMuX2RvY3VtZW50KSxuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5fcmVnaXN0cnkuZ2V0KHQpLHI9ZnVuY3Rpb24obil7ZS5fem9uZS5ydW4oZnVuY3Rpb24oKXt2YXIgcj1uZXcgRShuLm1hdGNoZXMsdCk7ZS5fc291cmNlLm5leHQocil9KX07bnx8KChuPWUuX2J1aWxkTVFMKHQpKS5hZGRMaXN0ZW5lcihyKSxlLl9yZWdpc3RyeS5zZXQodCxuKSksbi5tYXRjaGVzJiZyKG4pfSkpfSx0LnByb3RvdHlwZS5fYnVpbGRNUUw9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChpLnEpKHRoaXMuX3BsYXRmb3JtSWQpJiZ3aW5kb3cubWF0Y2hNZWRpYSgiYWxsIikuYWRkTGlzdGVuZXI/d2luZG93Lm1hdGNoTWVkaWEodCk6e21hdGNoZXM6ImFsbCI9PT10fHwiIj09PXQsbWVkaWE6dCxhZGRMaXN0ZW5lcjpmdW5jdGlvbigpe30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oKXt9fX0sdC5wcm90b3R5cGUuX3ByZXBhcmVRdWVyeUNTUz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFUW3RdfSk7aWYobi5sZW5ndGg+MCl7dmFyIHI9bi5qb2luKCIsICIpO3RyeXt2YXIgaT1lLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGkuc3R5bGVTaGVldHx8aS5hcHBlbmRDaGlsZChlLmNyZWF0ZVRleHROb2RlKCJcbi8qXG4gIEBhbmd1bGFyL2ZsZXgtbGF5b3V0IC0gd29ya2Fyb3VuZCBmb3IgcG9zc2libGUgYnJvd3NlciBxdWlyayB3aXRoIG1lZGlhUXVlcnkgbGlzdGVuZXJzXG4gIHNlZSBodHRwOi8vYml0Lmx5LzJzZDRITVBcbiovXG5AbWVkaWEgIityKyIgey5meC1xdWVyeS10ZXN0eyB9fVxuIikpLGUuaGVhZC5hcHBlbmRDaGlsZChpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFRbdF09aX0pfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IodCl9fX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoci54KSxPYmplY3Qoci5WKShyLnopLE9iamVjdChyLlYpKGkuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxUPXt9O2Z1bmN0aW9uIEkodCxlKXtyZXR1cm4gYih0LGU/e21xQWxpYXM6ZS5hbGlhcyxzdWZmaXg6ZS5zdWZmaXh9Ont9KX12YXIgQT1mdW5jdGlvbigpe30saj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmJyZWFrcG9pbnRzPXQsdGhpcy5tZWRpYVdhdGNoZXI9ZSx0aGlzLmZpbHRlck92ZXJsYXBzPSEwLHRoaXMuX3JlZ2lzdGVyQnJlYWtQb2ludHMoKSx0aGlzLm9ic2VydmFibGUkPXRoaXMuX2J1aWxkT2JzZXJ2YWJsZSgpfXJldHVybiB0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90b01lZGlhUXVlcnkodCk7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLmlzQWN0aXZlKGUpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLm9ic2VydmFibGUkLnN1YnNjcmliZSh0LGUsbil9LHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9ic2VydmFibGUkfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha1BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLm1lZGlhV2F0Y2hlci5yZWdpc3RlclF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fYnVpbGRPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXM7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLm9ic2VydmUoKS5waXBlKE9iamVjdChhLmEpKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dC5tYXRjaGVzfSksT2JqZWN0KGEuYSkoZnVuY3Rpb24obil7dmFyIHI9dC5icmVha3BvaW50cy5maW5kQnlRdWVyeShuLm1lZGlhUXVlcnkpO3JldHVybiFyfHwhKGUuZmlsdGVyT3ZlcmxhcHMmJnIub3ZlcmxhcHBpbmcpfSksT2JqZWN0KHMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSx0Ll9maW5kQnlRdWVyeShlLm1lZGlhUXVlcnkpKX0pKX0sdC5wcm90b3R5cGUuX2ZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHQpfSx0LnByb3RvdHlwZS5fZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCl9LHQucHJvdG90eXBlLl90b01lZGlhUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmluZEJ5QWxpYXModCl8fHRoaXMuX2ZpbmRCeVF1ZXJ5KHQpO3JldHVybiBlP2UubWVkaWFRdWVyeTp0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShTKSxPYmplY3Qoci5WKShrKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFA9ZnVuY3Rpb24oKXt9LE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5zdHlsZXNoZWV0PW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmFkZFN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLnN0eWxlc2hlZXQuZ2V0KHQpO3I/ci5zZXQoZSxuKTp0aGlzLnN0eWxlc2hlZXQuc2V0KHQsbmV3IE1hcChbW2Usbl1dKSl9LHQucHJvdG90eXBlLmNsZWFyU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5zdHlsZXNoZWV0LmNsZWFyKCl9LHQucHJvdG90eXBlLmdldFN0eWxlRm9yRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuc3R5bGVzaGVldC5nZXQodCkscj0iIjtpZihuKXt2YXIgaT1uLmdldChlKTsibnVtYmVyIiE9dHlwZW9mIGkmJiJzdHJpbmciIT10eXBlb2YgaXx8KHI9aSsiIil9cmV0dXJuIHJ9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxOPW5ldyByLm8oIkZsZXhMYXlvdXRTZXJ2ZXJMb2FkZWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSksUj1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fb3B0aW9ucz10LHRoaXMuX21lZGlhTW9uaXRvcj1lLHRoaXMuX29uTWVkaWFDaGFuZ2VzPW4sdGhpcy5fc3Vic2NyaWJlcnM9W10sdGhpcy5fcmVnaXN0cnlNYXA9dGhpcy5fYnVpbGRSZWdpc3RyeU1hcCgpLHRoaXMuX3N1YnNjcmliZXJzPXRoaXMuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZ2lzdHJ5RnJvbUxhcmdlc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuc2xpY2UoKS5yZXZlcnNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtZWRpYU1vbml0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFNb25pdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkSW5wdXRLZXkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkSW5wdXRLZXl8fHRoaXMuX29wdGlvbnMuYmFzZUtleX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY3RpdmF0ZWRJbnB1dEtleTtyZXR1cm4gdGhpcy5oYXNLZXlWYWx1ZSh0KT90aGlzLl9sb29rdXBLZXlWYWx1ZSh0KTp0aGlzLl9vcHRpb25zLmRlZmF1bHRWYWx1ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fb3B0aW9ucy5pbnB1dEtleXNbdF19LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudW5zdWJzY3JpYmUoKX0pLHRoaXMuX3N1YnNjcmliZXJzPVtdfSx0LnByb3RvdHlwZS5fY29uZmlndXJlQ2hhbmdlT2JzZXJ2ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0aGlzLl9yZWdpc3RyeU1hcC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuX2tleUluVXNlKG4ua2V5KSYmZS5wdXNoKHQubWVkaWFNb25pdG9yLm9ic2VydmUobi5hbGlhcykucGlwZShPYmplY3Qocy5hKShmdW5jdGlvbihlKXtyZXR1cm4oZT1lLmNsb25lKCkpLnByb3BlcnR5PXQuX29wdGlvbnMuYmFzZUtleSxlfSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXt0Ll9vbk1vbml0b3JFdmVudHMoZSl9KSl9KSxlfSx0LnByb3RvdHlwZS5fYnVpbGRSZWdpc3RyeU1hcD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMubWVkaWFNb25pdG9yLmJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYih7fSxlLHtiYXNlS2V5OnQuX29wdGlvbnMuYmFzZUtleSxrZXk6dC5fb3B0aW9ucy5iYXNlS2V5K2Uuc3VmZml4fSl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2tleUluVXNlKGUua2V5KX0pfSx0LnByb3RvdHlwZS5fb25Nb25pdG9yRXZlbnRzPWZ1bmN0aW9uKHQpe3QucHJvcGVydHk9PXRoaXMuX29wdGlvbnMuYmFzZUtleSYmKHQudmFsdWU9dGhpcy5fY2FsY3VsYXRlQWN0aXZhdGVkVmFsdWUodCksdGhpcy5fb25NZWRpYUNoYW5nZXModCkpfSx0LnByb3RvdHlwZS5fa2V5SW5Vc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX2xvb2t1cEtleVZhbHVlKHQpfSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQWN0aXZhdGVkVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fb3B0aW9ucy5iYXNlS2V5K3Quc3VmZml4LG49dGhpcy5fYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5PXRoaXMuX3ZhbGlkYXRlSW5wdXRLZXkobj10Lm1hdGNoZXM/ZTpuPT1lPyIiOm4pLHRoaXMuYWN0aXZhdGVkSW5wdXR9LHQucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbih0KXtyZXR1cm4hZS5fa2V5SW5Vc2UodCl9O3JldHVybiBuKHQpJiZ0aGlzLm1lZGlhTW9uaXRvci5hY3RpdmVPdmVybGFwcy5zb21lKGZ1bmN0aW9uKHIpe3ZhciBpPWUuX29wdGlvbnMuYmFzZUtleStyLnN1ZmZpeDtyZXR1cm4hbihpKSYmKHQ9aSwhMCl9KSx0fSx0LnByb3RvdHlwZS5fbG9va3VwS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0fSgpLEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9tZWRpYU1vbml0b3I9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fc3R5bGVyPW4sdGhpcy5faW5wdXRNYXA9e30sdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzTWVkaWFRdWVyeUxpc3RlbmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tcUFjdGl2YXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb24/dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0OnZvaWQgMH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlLG49ImJhc2VLZXkiO3RoaXMuX21xQWN0aXZhdGlvbiYmKGU9dGhpcy5faW5wdXRNYXBbbj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXRLZXldLHRoaXMuX2lucHV0TWFwW25dPXQpO3ZhciBpLG89bmV3IHIuRyhlLHQsITEpO3RoaXMubmdPbkNoYW5nZXMoKChpPXt9KVtuXT1vLGkpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuYXRpdmVFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcXVlcnlJbnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5wdXRNYXBbdF19LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fZGlzcGxheT10aGlzLl9nZXREaXNwbGF5U3R5bGUoKSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMH0sdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJCYXNlRGlyZWN0aXZlOjpuZ09uQ2hhbmdlcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzczogIit0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9tcUFjdGl2YXRpb24mJnRoaXMuX21xQWN0aXZhdGlvbi5kZXN0cm95KCksZGVsZXRlIHRoaXMuX21lZGlhTW9uaXRvcn0sdC5wcm90b3R5cGUuX2dldERlZmF1bHRWYWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9xdWVyeUlucHV0KHQpO3JldHVybiB2b2lkIDAhPT1uJiZudWxsIT09biYmIiIhPT1uP246ZX0sdC5wcm90b3R5cGUuX2dldERpc3BsYXlTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwU3R5bGUodCwiZGlzcGxheSIpfSx0LnByb3RvdHlwZS5fZ2V0QXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwQXR0cmlidXRlVmFsdWUoZSx0KX0sdC5wcm90b3R5cGUuX2dldEZsZXhGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBuLHI9InJvdyI7aWYodCYmKHI9KG49dGhpcy5fc3R5bGVyLmdldEZsb3dEaXJlY3Rpb24odCkpWzBdLCFuWzFdJiZlKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGUsbixyPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiBSLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1ufSl8fChuPVJbMF0pLCJpbmxpbmUiPT09ciYmKHI9ImlubGluZSIhPT1pP2k6IiIsaT0iaW5saW5lIiksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19KHQpO3JldHVybiBuPXJbMl0sdm9pZCAwPT09KGU9clsxXSkmJihlPW51bGwpLHZvaWQgMD09PW4mJihuPSExKSx7ZGlzcGxheTpuPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjpyWzBdLCJmbGV4LXdyYXAiOmV8fG51bGx9fShyKTt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHMoaSxbdF0pfXJldHVybiByLnRyaW0oKXx8InJvdyJ9LHQucHJvdG90eXBlLl9hcHBseVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50KG4sdCxlKX0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnRzKHQsZSl9LHQucHJvdG90eXBlLl9jYWNoZUlucHV0PWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbiBpbiBlKXRoaXMuX2lucHV0TWFwW25dPWVbbl07ZWxzZSB0JiYodGhpcy5faW5wdXRNYXBbdF09ZSl9LHQucHJvdG90eXBlLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcz1mdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuX21xQWN0aXZhdGlvbil7dmFyIHI9bmV3IGZ1bmN0aW9uKHQsZSxuKXt0aGlzLmJhc2VLZXk9dCx0aGlzLmRlZmF1bHRWYWx1ZT1lLHRoaXMuaW5wdXRLZXlzPW59KHQsZSx0aGlzLl9pbnB1dE1hcCk7dGhpcy5fbXFBY3RpdmF0aW9uPW5ldyBEKHIsdGhpcy5fbWVkaWFNb25pdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSl9cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbk5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbixlPVtdLG49dC5sZW5ndGg7bi0tOyllW25dPXRbbl07cmV0dXJuIGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQST1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5faW5wdXRNYXApLmxlbmd0aC0odGhpcy5faW5wdXRNYXBbdF0/MTowKT4wfSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9uLmhhc0tleVZhbHVlKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0luaXRpYWxpemVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0luaXRpYWxpemVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksRj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLG4scixpKXx8dGhpcztyZXR1cm4gby5fYmFzZUtleT1lLG8uX21lZGlhTW9uaXRvcj1uLG8uX2VsZW1lbnRSZWY9cixvLl9zdHlsZXI9aSxvfXJldHVybiBPYmplY3QodS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWN0aXZlS2V5Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbXFBY3RpdmF0aW9uLGU9dD90LmFjdGl2YXRlZElucHV0S2V5OnRoaXMuX2Jhc2VLZXk7cmV0dXJuImNsYXNzIj09PWU/ImtsYXp6IjplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5wdXRNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXRNYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtcUFjdGl2YXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQSS5jYWxsKHRoaXMsdGhpcy5fYmFzZUtleSl9LGUucHJvdG90eXBlLnF1ZXJ5SW5wdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dGhpcy5fcXVlcnlJbnB1dCh0KTp2b2lkIDB9LGUucHJvdG90eXBlLmNhY2hlSW5wdXQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPSExKSxuKXRoaXMuX2NhY2hlSW5wdXRSYXcodCxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpdGhpcy5fY2FjaGVJbnB1dEFycmF5KHQsZSk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpdGhpcy5fY2FjaGVJbnB1dE9iamVjdCh0LGUpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjbGFzcyB2YWx1ZSAnIit0KyInIHByb3ZpZGVkLiBEaWQgeW91IHdhbnQgdG8gY2FjaGUgdGhlIHJhdyB2YWx1ZT8iKTt0aGlzLl9jYWNoZUlucHV0U3RyaW5nKHQsZSl9fSxlLnByb3RvdHlwZS5saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKHQsZSxuKX0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRSYXc9ZnVuY3Rpb24odCxlKXt0JiYodGhpcy5faW5wdXRNYXBbdF09ZSl9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0QXJyYXk9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIiksdGhpcy5faW5wdXRNYXBbdF09ZT9lLmpvaW4oIiAiKToiIn0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRPYmplY3Q9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIik7dmFyIG49W107aWYoZSlmb3IodmFyIHIgaW4gZSllW3JdJiZuLnB1c2gocik7dGhpcy5faW5wdXRNYXBbdF09bi5qb2luKCIgIil9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0U3RyaW5nPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2lucHV0TWFwW3RdPWV9LGV9KEwpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fYnJlYWtwb2ludHM9dCx0aGlzLl9tYXRjaE1lZGlhPWUsdGhpcy5fcmVnaXN0ZXJCcmVha3BvaW50cygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImJyZWFrcG9pbnRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLml0ZW1zLnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVPdmVybGFwcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLm92ZXJsYXBwaW5ncy5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXRjaE1lZGlhLmlzQWN0aXZlKGUubWVkaWFRdWVyeSl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZSIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1udWxsO3RoaXMuYnJlYWtwb2ludHMucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obil7IiIhPT1uLmFsaWFzJiYhZSYmdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpJiYoZT1uKX0pO3ZhciBuPXRoaXMuYnJlYWtwb2ludHNbMF07cmV0dXJuIGV8fCh0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKG4ubWVkaWFRdWVyeSk/bjpudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCk7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEuaXNBY3RpdmUoZT9lLm1lZGlhUXVlcnk6dCl9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModHx8IiIpfHx0aGlzLl9icmVha3BvaW50cy5maW5kQnlRdWVyeSh0fHwiIik7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEub2JzZXJ2ZShlP2UubWVkaWFRdWVyeTp0KS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBJKHQsZSl9KSxPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4hZXx8IiIhPT10Lm1xQWxpYXN9KSl9LHQucHJvdG90eXBlLl9yZWdpc3RlckJyZWFrcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLl9tYXRjaE1lZGlhLnJlZ2lzdGVyUXVlcnkodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKFMpLE9iamVjdChyLlYpKGspKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gVSh0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG49dFtlXXx8IiI7c3dpdGNoKGUpe2Nhc2UiZGlzcGxheSI6dC5kaXNwbGF5PSJmbGV4Ij09PW4/WyItd2Via2l0LWZsZXgiLCJmbGV4Il06ImlubGluZS1mbGV4Ij09PW4/WyItd2Via2l0LWlubGluZS1mbGV4IiwiaW5saW5lLWZsZXgiXTpuO2JyZWFrO2Nhc2UiYWxpZ24taXRlbXMiOmNhc2UiYWxpZ24tc2VsZiI6Y2FzZSJhbGlnbi1jb250ZW50IjpjYXNlImZsZXgiOmNhc2UiZmxleC1iYXNpcyI6Y2FzZSJmbGV4LWZsb3ciOmNhc2UiZmxleC1ncm93IjpjYXNlImZsZXgtc2hyaW5rIjpjYXNlImZsZXgtd3JhcCI6Y2FzZSJqdXN0aWZ5LWNvbnRlbnQiOnRbIi13ZWJraXQtIitlXT1uO2JyZWFrO2Nhc2UiZmxleC1kaXJlY3Rpb24iOnRbIi13ZWJraXQtZmxleC1kaXJlY3Rpb24iXT1uPW58fCJyb3ciLHRbImZsZXgtZGlyZWN0aW9uIl09bjticmVhaztjYXNlIm9yZGVyIjp0Lm9yZGVyPXRbIi13ZWJraXQtIitlXT1pc05hTihuKT8iMCI6bn19cmV0dXJuIHR9dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3NlcnZlclN0eWxlc2hlZXQ9dCx0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ9ZSx0aGlzLl9wbGF0Zm9ybUlkPW4sdGhpcy5sYXlvdXRDb25maWc9cn1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHlTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9e307InN0cmluZyI9PXR5cGVvZiBlJiYocltlXT1uLGU9cikscj10aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXM/ZTpVKGUpLHRoaXMuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KHIsdCl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5sYXlvdXRDb25maWcuZGlzYWJsZVZlbmRvclByZWZpeGVzP3Q6VSh0KTtlLmZvckVhY2goZnVuY3Rpb24odCl7bi5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQocix0KX0pfSx0LnByb3RvdHlwZS5nZXRGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9va3VwU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKTtlPT09QiYmKGU9IiIpO3ZhciBuPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKXx8T2JqZWN0KGkucikodGhpcy5fcGxhdGZvcm1JZCkmJnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD9lOiIiO3JldHVybltlfHwicm93IixuXX0sdC5wcm90b3R5cGUubG9va3VwQXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl8fCIifSx0LnByb3RvdHlwZS5sb29rdXBJbmxpbmVTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QoaS5xKSh0aGlzLl9wbGF0Zm9ybUlkKT90LnN0eWxlW2VdOnRoaXMuX2dldFNlcnZlclN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmxvb2t1cFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9IiI7cmV0dXJuIHQmJigocj10aGlzLmxvb2t1cElubGluZVN0eWxlKHQsZSkpfHwoT2JqZWN0KGkucSkodGhpcy5fcGxhdGZvcm1JZCk/bnx8KHI9Z2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTp0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQmJihyPXRoaXMuX3NlcnZlclN0eWxlc2hlZXQuZ2V0U3R5bGVGb3JFbGVtZW50KHQsZSkpKSkscj9yLnRyaW0oKTpCfSx0LnByb3RvdHlwZS5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO09iamVjdC5rZXlzKHQpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPUFycmF5LmlzQXJyYXkodFtyXSk/dFtyXTpbdFtyXV07by5zb3J0KCk7Zm9yKHZhciBhPTAscz1vO2E8cy5sZW5ndGg7YSsrKXt2YXIgdT1zW2FdO09iamVjdChpLnEpKG4uX3BsYXRmb3JtSWQpfHwhbi5fc2VydmVyTW9kdWxlTG9hZGVkP09iamVjdChpLnEpKG4uX3BsYXRmb3JtSWQpP2Uuc3R5bGUuc2V0UHJvcGVydHkocix1KTpuLl9zZXRTZXJ2ZXJTdHlsZShlLHIsdSk6bi5fc2VydmVyU3R5bGVzaGVldC5hZGRTdHlsZVRvRWxlbWVudChlLHIsdSl9fSl9LHQucHJvdG90eXBlLl9zZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUsbil7ZT1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKTt2YXIgcj10aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodCk7cltlXT1ufHwiIix0aGlzLl93cml0ZVN0eWxlQXR0cmlidXRlKHQscil9LHQucHJvdG90eXBlLl9nZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodClbZV18fCIifSx0LnByb3RvdHlwZS5fcmVhZFN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49dC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7aWYobilmb3IodmFyIHI9bi5zcGxpdCgvOysvZyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldLnRyaW0oKTtpZihvLmxlbmd0aD4wKXt2YXIgYT1vLmluZGV4T2YoIjoiKTtpZigtMT09PWEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIENTUyBzdHlsZTogIitvKTtlW28uc3Vic3RyKDAsYSkudHJpbSgpXT1vLnN1YnN0cihhKzEpLnRyaW0oKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLl93cml0ZVN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49IiI7Zm9yKHZhciByIGluIGUpZVtyXSYmKG4rPXIrIjoiK2Vbcl0rIjsiKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLG4pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShNLDgpLE9iamVjdChyLlYpKE4sOCksT2JqZWN0KHIuVikoci56KSxPYmplY3Qoci5WKShPKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEI9ImJsb2NrIjtmdW5jdGlvbiBIKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iMSIpLHZvaWQgMD09PW4mJihuPSIxIik7dmFyIHI9W2Usbix0XSxpPXQuaW5kZXhPZigiY2FsYyIpO2lmKGk+MClyWzJdPVcodC5zdWJzdHJpbmcoaSkudHJpbSgpKSwyPT0obz10LnN1YnN0cigwLGkpLnRyaW0oKS5zcGxpdCgiICIpKS5sZW5ndGgmJihyWzBdPW9bMF0sclsxXT1vWzFdKTtlbHNlIGlmKDA9PWkpclsyXT1XKHQudHJpbSgpKTtlbHNle3ZhciBvO3I9Mz09PShvPXQuc3BsaXQoIiAiKSkubGVuZ3RoP286W2Usbix0XX1yZXR1cm4gcn1mdW5jdGlvbiBXKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcc10vZywiIikucmVwbGFjZSgvW1wvXCpcK1wtXS9nLCIgJCYgIil9fSxQVThMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCI2YmxGIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT1uZXcgci5hKGZ1bmN0aW9uKGUpe2UubmV4dCh0KSxlLmNvbXBsZXRlKCl9KTtyZXR1cm4gZS5faXNTY2FsYXI9ITAsZS52YWx1ZT10LGV9fSxQaGpuOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJwc1cwIik7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBPYmplY3Qoci5hKSh0LGUsMSl9fSxTMW5YOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9bigiSzlJYSIpLG89bigiNmJsRiIpLGE9bigiRkZPbyIpLHM9bigicHVnVCIpO2Z1bmN0aW9uIHUoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgbCh0KSl9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNvbm5lY3RhYmxlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNvbm5lY3RhYmxlO24uX3JlZkNvdW50Kys7dmFyIHI9bmV3IGModCxuKSxpPWUuc3Vic2NyaWJlKHIpO3JldHVybiByLmNsb3NlZHx8KHIuY29ubmVjdGlvbj1uLmNvbm5lY3QoKSksaX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5jb25uZWN0YWJsZT1uLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29ubmVjdGFibGU7aWYodCl7dGhpcy5jb25uZWN0YWJsZT1udWxsO3ZhciBlPXQuX3JlZkNvdW50O2lmKGU8PTApdGhpcy5jb25uZWN0aW9uPW51bGw7ZWxzZSBpZih0Ll9yZWZDb3VudD1lLTEsZT4xKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2V7dmFyIG49dGhpcy5jb25uZWN0aW9uLHI9dC5fY29ubmVjdGlvbjt0aGlzLmNvbm5lY3Rpb249bnVsbCwhcnx8biYmciE9PW58fHIudW5zdWJzY3JpYmUoKX19ZWxzZSB0aGlzLmNvbm5lY3Rpb249bnVsbH0sZX0oYS5hKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc291cmNlPWUsci5zdWJqZWN0RmFjdG9yeT1uLHIuX3JlZkNvdW50PTAsci5faXNDb21wbGV0ZT0hMSxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9LGUucHJvdG90eXBlLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdWJqZWN0O3JldHVybiB0JiYhdC5pc1N0b3BwZWR8fCh0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH0sZS5wcm90b3R5cGUuY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Nvbm5lY3Rpb247cmV0dXJuIHR8fCh0aGlzLl9pc0NvbXBsZXRlPSExLCh0PXRoaXMuX2Nvbm5lY3Rpb249bmV3IHMuYSkuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShuZXcgZCh0aGlzLmdldFN1YmplY3QoKSx0aGlzKSkpLHQuY2xvc2VkPyh0aGlzLl9jb25uZWN0aW9uPW51bGwsdD1zLmEuRU1QVFkpOnRoaXMuX2Nvbm5lY3Rpb249dCksdH0sZS5wcm90b3R5cGUucmVmQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpKHRoaXMpfSxlfShvLmEpLnByb3RvdHlwZSxoPXtvcGVyYXRvcjp7dmFsdWU6bnVsbH0sX3JlZkNvdW50Ont2YWx1ZTowLHdyaXRhYmxlOiEwfSxfc3ViamVjdDp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX2Nvbm5lY3Rpb246e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9zdWJzY3JpYmU6e3ZhbHVlOmYuX3N1YnNjcmliZX0sX2lzQ29tcGxldGU6e3ZhbHVlOmYuX2lzQ29tcGxldGUsd3JpdGFibGU6ITB9LGdldFN1YmplY3Q6e3ZhbHVlOmYuZ2V0U3ViamVjdH0sY29ubmVjdDp7dmFsdWU6Zi5jb25uZWN0fSxyZWZDb3VudDp7dmFsdWU6Zi5yZWZDb3VudH19LGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmNvbm5lY3RhYmxlPW4scn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKGUpe3RoaXMuX3Vuc3Vic2NyaWJlKCksdC5wcm90b3R5cGUuX2Vycm9yLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5jb25uZWN0YWJsZS5faXNDb21wbGV0ZT0hMCx0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbm5lY3RhYmxlO2lmKHQpe3RoaXMuY29ubmVjdGFibGU9bnVsbDt2YXIgZT10Ll9jb25uZWN0aW9uO3QuX3JlZkNvdW50PTAsdC5fc3ViamVjdD1udWxsLHQuX2Nvbm5lY3Rpb249bnVsbCxlJiZlLnVuc3Vic2NyaWJlKCl9fSxlfShpLmIpO2Z1bmN0aW9uIHAoKXtyZXR1cm4gbmV3IGkuYX1mdW5jdGlvbiBtKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB1KCkoKGU9cCxmdW5jdGlvbih0KXt2YXIgbjtuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LGgpO3JldHVybiByLnNvdXJjZT10LHIuc3ViamVjdEZhY3Rvcnk9bixyfSkodCkpO3ZhciBlfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pfSxTNVhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJES1RiIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtlLmNsb3NlZHx8KGUubmV4dCh0KSxlLmNvbXBsZXRlKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lcnJvcih0KX0pLnRoZW4obnVsbCxyLmEpLGV9fX0sU01zbTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIklwMFIiKSxpPW4oInQvTmEiKSxvPW4oIkNjbkciKSxhPW4oIlpZanQiKSxzPW4oIkYvWEwiKSx1PW4oIlZOcjQiKSxsPW4oIlhsUHciKSxjPW4oInhNeUUiKSxmPW4oIjY3WS8iKSxoPW4oIm1yU0ciKSxkPW4oIkZGT28iKSxwPW4oInB1Z1QiKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNhbGxiYWNrPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHkodCx0aGlzLmNhbGxiYWNrKSl9LHR9KCkseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuYWRkKG5ldyBwLmEobikpLHJ9cmV0dXJuIGguYihlLHQpLGV9KGQuYSksZz1uKCJTMW5YIiksdj1uKCI5WjFGIiksYj1uKCJ0OWZaIiksXz1uKCJXZjRwIiksdz1uKCJuNmdHIik7ZnVuY3Rpb24geCh0KXtyZXR1cm4gRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGljb24gd2l0aCB0aGUgbmFtZSAiJyt0KyciJyl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gRXJyb3IoIlRoZSBVUkwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTCB2aWEgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIFVSTCB3YXMgXCIiK3QrJyIuJyl9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gRXJyb3IoIlRoZSBsaXRlcmFsIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgc2FmZSBIVE1MIGJ5IEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBsaXRlcmFsIHdhcyBcIiIrdCsnIi4nKX1uLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KTt2YXIgUz1mdW5jdGlvbih0KXt0Lm5vZGVOYW1lP3RoaXMuc3ZnRWxlbWVudD10OnRoaXMudXJsPXR9LEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9odHRwQ2xpZW50PXQsdGhpcy5fc2FuaXRpemVyPWUsdGhpcy5fc3ZnSWNvbkNvbmZpZ3M9bmV3IE1hcCx0aGlzLl9pY29uU2V0Q29uZmlncz1uZXcgTWFwLHRoaXMuX2NhY2hlZEljb25zQnlVcmw9bmV3IE1hcCx0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcz1uZXcgTWFwLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcz1uZXcgTWFwLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9Im1hdGVyaWFsLWljb25zIix0aGlzLl9kb2N1bWVudD1ufXJldHVybiB0LnByb3RvdHlwZS5hZGRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLHQsZSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgUyhuKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkYuSFRNTCxuKTtpZighcil0aHJvdyBDKG4pO3ZhciBpPXRoaXMuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHIpO3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgUyhpKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBTKGUpKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkYuSFRNTCxlKTtpZighbil0aHJvdyBDKGUpO3ZhciByPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKG4pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3IFMocikpfSx0LnByb3RvdHlwZS5yZWdpc3RlckZvbnRDbGFzc0FsaWFzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQpLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5zZXQodCxlKSx0aGlzfSx0LnByb3RvdHlwZS5jbGFzc05hbWVGb3JGb250QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQodCl8fHR9LHQucHJvdG90eXBlLnNldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9dCx0aGlzfSx0LnByb3RvdHlwZS5nZXREZWZhdWx0Rm9udFNldENsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3N9LHQucHJvdG90eXBlLmdldFN2Z0ljb25Gcm9tVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLlJFU09VUkNFX1VSTCx0KTtpZighbil0aHJvdyBPKHQpO3ZhciByPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KG4pO3JldHVybiByP09iamVjdChzLmEpKGsocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgUyh0KSkucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fY2FjaGVkSWNvbnNCeVVybC5zZXQobix0KX0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpfSkpfSx0LnByb3RvdHlwZS5nZXROYW1lZFN2Z0ljb249ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0iIik7dmFyIG49VChlLHQpLHI9dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KG4pO2lmKHIpcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcocik7dmFyIGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOk9iamVjdChsLmEpKHgobikpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdFbGVtZW50P09iamVjdChzLmEpKGsodC5zdmdFbGVtZW50KSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKHQpLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3ZnRWxlbWVudD1lfSksT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGsodCl9KSl9LHQucHJvdG90eXBlLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZihyKXJldHVybiBPYmplY3Qocy5hKShyKTt2YXIgaT1lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5zdmdFbGVtZW50fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcodCkucGlwZShPYmplY3Qodi5hKShmdW5jdGlvbihlKXt2YXIgcj1uLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLlJFU09VUkNFX1VSTCx0LnVybCk7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxvYWRpbmcgaWNvbiBzZXQgVVJMOiAiK3IrIiBmYWlsZWQ6ICIrZS5tZXNzYWdlKSxPYmplY3Qocy5hKShudWxsKX0pKX0pO3JldHVybiBPYmplY3QodS5hKShpKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7dmFyIHI9bi5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZighcil0aHJvdyB4KHQpO3JldHVybiByfSkpfSx0LnByb3RvdHlwZS5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXTtpZihyLnN2Z0VsZW1lbnQpe3ZhciBpPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChyLnN2Z0VsZW1lbnQsdCk7aWYoaSlyZXR1cm4gaX19cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvbkZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHQpfSkpfSx0LnByb3RvdHlwZS5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3Qocy5hKSh0LnN2Z0VsZW1lbnQpOnRoaXMuX2ZldGNoVXJsKHQudXJsKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN2Z0VsZW1lbnR8fCh0LnN2Z0VsZW1lbnQ9ZS5fc3ZnRWxlbWVudEZyb21TdHJpbmcobikpLHQuc3ZnRWxlbWVudH0pKX0sdC5wcm90b3R5cGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHQpO3JldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGUpLGV9LHQucHJvdG90eXBlLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIiMiK2UpO2lmKCFuKXJldHVybiBudWxsO3ZhciByPW4uY2xvbmVOb2RlKCEwKTtpZihyLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSwic3ZnIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhyKTtpZigic3ltYm9sIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocikpO3ZhciBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpO3JldHVybiBpLmFwcGVuZENoaWxkKHIpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSl9LHQucHJvdG90eXBlLl9zdmdFbGVtZW50RnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtlLmlubmVySFRNTD10O3ZhciBuPWUucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIW4pdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gbn0sdC5wcm90b3R5cGUuX3RvU3ZnRWxlbWVudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iiksbj0wO248dC5jaGlsZE5vZGVzLmxlbmd0aDtuKyspdC5jaGlsZE5vZGVzW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZlLmFwcGVuZENoaWxkKHQuY2hpbGROb2Rlc1tuXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUuX3NldFN2Z0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSx0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSx0LnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSx0fSx0LnByb3RvdHlwZS5fZmV0Y2hVcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICInK3QrJyIuJyk7dmFyIG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uRi5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgTyh0KTt2YXIgcj10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQobik7aWYocilyZXR1cm4gcjt2YXIgaSxhPXRoaXMuX2h0dHBDbGllbnQuZ2V0KG4se3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5waXBlKChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShuKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgbShpKSl9KSxPYmplY3QoZy5hKSgpKTtyZXR1cm4gdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuc2V0KG4sYSksYX0sdC5wcm90b3R5cGUuX2FkZFN2Z0ljb25Db25maWc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoVCh0LGUpLG4pLHRoaXN9LHQucHJvdG90eXBlLl9hZGRTdmdJY29uU2V0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KHQpO3JldHVybiBuP24ucHVzaChlKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQodCxbZV0pLHRoaXN9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlYpKGkuYyw4KSxPYmplY3Qoby5WKShhLmMpLE9iamVjdChvLlYpKHIuZCw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIGsodCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHQrIjoiK2V9dmFyIEk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX2ljb25SZWdpc3RyeT1uLGkuX2lubGluZT0hMSxyfHxlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpfXJldHVybiBPYmplY3QoaC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5saW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lubGluZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2lubGluZT1PYmplY3Qody5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRTZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udFNldH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbnRTZXQ9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRJY29uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udEljb249dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3BsaXRJY29uTmFtZT1mdW5jdGlvbih0KXtpZighdClyZXR1cm5bIiIsIiJdO3ZhciBlPXQuc3BsaXQoIjoiKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bIiIsZVswXV07Y2FzZSAyOnJldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoJ0ludmFsaWQgaWNvbiBuYW1lOiAiJyt0KyciJyl9fSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQuc3ZnSWNvbilpZih0aGlzLnN2Z0ljb24pe3ZhciBuPXRoaXMuX3NwbGl0SWNvbk5hbWUodGhpcy5zdmdJY29uKTt0aGlzLl9pY29uUmVnaXN0cnkuZ2V0TmFtZWRTdmdJY29uKG5bMV0sblswXSkucGlwZShPYmplY3QoYi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdmdFbGVtZW50KHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2coIkVycm9yIHJldHJpZXZpbmcgaWNvbjogIit0Lm1lc3NhZ2UpfSl9ZWxzZSB0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKTt0aGlzLl91c2luZ0ZvbnRJY29uKCkmJnRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX3VzaW5nRm9udEljb24oKSYmdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9LGUucHJvdG90eXBlLl91c2luZ0ZvbnRJY29uPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc3ZnSWNvbn0sZS5wcm90b3R5cGUuX3NldFN2Z0VsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHQpfSxlLnByb3RvdHlwZS5fY2xlYXJTdmdFbGVtZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXQuY2hpbGROb2Rlcy5sZW5ndGgsbj0wO248ZTtuKyspdC5yZW1vdmVDaGlsZCh0LmNoaWxkTm9kZXNbbl0pfSxlLnByb3RvdHlwZS5fdXBkYXRlRm9udEljb25DbGFzc2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5fdXNpbmdGb250SWNvbigpKXt2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLmZvbnRTZXQ/dGhpcy5faWNvblJlZ2lzdHJ5LmNsYXNzTmFtZUZvckZvbnRBbGlhcyh0aGlzLmZvbnRTZXQpOnRoaXMuX2ljb25SZWdpc3RyeS5nZXREZWZhdWx0Rm9udFNldENsYXNzKCk7ZSE9dGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJih0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzKSxlJiZ0LmNsYXNzTGlzdC5hZGQoZSksdGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3M9ZSksdGhpcy5mb250SWNvbiE9dGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZ0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZ0LmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfX0sZS5wcm90b3R5cGUuX2NsZWFudXBGb250VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QudHJpbSgpLnNwbGl0KCIgIilbMF06dH0sZX0oT2JqZWN0KF8udSkoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpLEE9ZnVuY3Rpb24oKXt9fSxUMURNOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJoOURxIiksaT1uZXcobigiQ1M5USIpLmEpKHIuYSl9LFR4amc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIlpuOEQiKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdChyLmEpKDEpfX0sVW9kSDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIldmNHAiKSxvPSJhY2NlbnQiLGE9InByaW1hcnkiLHM9WyJtYXQtYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwibWF0LXJhaXNlZC1idXR0b24iLCJtYXQtc3Ryb2tlZC1idXR0b24iLCJtYXQtbWluaS1mYWIiLCJtYXQtZmFiIl0sdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciB1PXQuY2FsbCh0aGlzLGUpfHx0aGlzO3UuX3BsYXRmb3JtPW4sdS5fZm9jdXNNb25pdG9yPXIsdS5fYW5pbWF0aW9uTW9kZT1pLHUuaXNSb3VuZEJ1dHRvbj11Ll9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHUuaXNJY29uQnV0dG9uPXUuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IodmFyIGw9MCxjPXM7bDxjLmxlbmd0aDtsKyspe3ZhciBmPWNbbF07dS5faGFzSG9zdEF0dHJpYnV0ZXMoZikmJmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGYpfXJldHVybiB1Ll9mb2N1c01vbml0b3IubW9uaXRvcih1Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApLHUuaXNSb3VuZEJ1dHRvbj91LmNvbG9yPW86dS5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1mbGF0LWJ1dHRvbiIpJiYodS5jb2xvcj1hKSx1fXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cygpfSxlLnByb3RvdHlwZS5fZ2V0SG9zdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9LGUucHJvdG90eXBlLl9oYXNIb3N0QXR0cmlidXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoZSl9KX0sZX0oT2JqZWN0KGkudSkoT2JqZWN0KGkudykoT2JqZWN0KGkudikoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpKSksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3JldHVybiB0LmNhbGwodGhpcyxyLGUsbixpKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5faGFsdERpc2FibGVkRXZlbnRzPWZ1bmN0aW9uKHQpe3RoaXMuZGlzYWJsZWQmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9LGV9KHUpLGM9ZnVuY3Rpb24oKXt9fSwiVjlxKyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4oIkNjbkciKTt2YXIgcj1uKCJJcDBSIiksaT1uKCJPemZCIiksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtPYmplY3Qoci5yKShlKSYmIXQmJmNvbnNvbGUud2FybigiV2FybmluZzogRmxleCBMYXlvdXQgbG9hZGVkIG9uIHRoZSBzZXJ2ZXIgd2l0aG91dCBGbGV4TGF5b3V0U2VydmVyTW9kdWxlIil9cmV0dXJuIHQud2l0aENvbmZpZz1mdW5jdGlvbihlLG4pe3ZhciByPU9iamVjdC5hc3NpZ24oe30saS5mKSxvPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV09PT1yW2FdfHwhMSE9PWVbYV0mJiEwIT09ZVthXXx8KHJbYV09ZVthXSk7cmV0dXJuIGUuc2VydmVyTG9hZGVkJiZvLnB1c2goe3Byb3ZpZGU6aS5sLHVzZVZhbHVlOiEwfSksQXJyYXkuaXNBcnJheShuKSYmby5wdXNoKHtwcm92aWRlOmkuYSx1c2VWYWx1ZTpuLG11bHRpOiEwfSksby5wdXNoKHtwcm92aWRlOmkuZyx1c2VWYWx1ZTpyfSkse25nTW9kdWxlOnQscHJvdmlkZXJzOm99fSx0fSgpfSxWTnI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCI2YmxGIiksbz1uKCJpc2J5IiksYT1uKCJHNUoxIikscz1uKCJ6b3RtIiksdT1uKCJNR0JTIiksbD1uKCI2N1kvIik7ZnVuY3Rpb24gYygpe2Zvcih2YXIgdCxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlW2UubGVuZ3RoLTFdJiYodD1lLnBvcCgpKSwxPT09ZS5sZW5ndGgmJk9iamVjdChvLmEpKGVbMF0pJiYoZT1lWzBdKSwwPT09ZS5sZW5ndGg/YS5hOnQ/YyhlKS5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHZvaWQgMCxlKX0pKTpuZXcgaS5hKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0LGUpfSl9dmFyIGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3Iuc291cmNlcz1uLHIuY29tcGxldGVkPTAsci5oYXZlVmFsdWVzPTA7dmFyIGk9bi5sZW5ndGg7ci52YWx1ZXM9bmV3IEFycmF5KGkpO2Zvcih2YXIgbz0wO288aTtvKyspe3ZhciBhPW5bb10sdT1PYmplY3Qocy5hKShyLGEsbnVsbCxvKTt1JiZyLmFkZCh1KX1yZXR1cm4gcn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMudmFsdWVzW25dPWUsaS5faGFzVmFsdWV8fChpLl9oYXNWYWx1ZT0hMCx0aGlzLmhhdmVWYWx1ZXMrKyl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb24sbj10aGlzLmhhdmVWYWx1ZXMscj10aGlzLnZhbHVlcyxpPXIubGVuZ3RoO3QuX2hhc1ZhbHVlPyh0aGlzLmNvbXBsZXRlZCsrLHRoaXMuY29tcGxldGVkPT09aSYmKG49PT1pJiZlLm5leHQociksZS5jb21wbGV0ZSgpKSk6ZS5jb21wbGV0ZSgpfSxlfSh1LmEpfSwiVm5ELyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IGEodCxlKSl9fXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucHJlZGljYXRlPXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByZWRpY2F0ZSx0aGlzLnRoaXNBcmcpKX0sdH0oKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnByZWRpY2F0ZT1uLGkudGhpc0FyZz1yLGkuY291bnQ9MCxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1lJiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGV9KGkuYSl9LFdmNHA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwidSIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIFd9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBIfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gRH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBMfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigibXJTRyIpLG89bigibjZnRyIpLGE9bigiSzlJYSIpLHM9KG4oIjZibEYiKSxuKCJkV1pnIikpLHU9KG4oIlpZanQiKSxuKCJZU2gyIikpLGw9bmV3IHIubygibWF0LXNhbml0eS1jaGVja3MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZD10LHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMSx0aGlzLl9kb2N1bWVudD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudD9kb2N1bWVudDpudWxsLHRoaXMuX3dpbmRvdz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93P3dpbmRvdzpudWxsLHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3MmJih0aGlzLl9jaGVja0RvY3R5cGVJc0RlZmluZWQoKSx0aGlzLl9jaGVja1RoZW1lSXNQcmVzZW50KCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9cmV0dXJuIHQucHJvdG90eXBlLl9hcmVDaGVja3NFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQmJk9iamVjdChyLlcpKCkmJiF0aGlzLl9pc1Rlc3RFbnYoKX0sdC5wcm90b3R5cGUuX2lzVGVzdEVudj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aW5kb3cmJih0aGlzLl93aW5kb3cuX19rYXJtYV9ffHx0aGlzLl93aW5kb3cuamFzbWluZSl9LHQucHJvdG90eXBlLl9jaGVja0RvY3R5cGVJc0RlZmluZWQ9ZnVuY3Rpb24oKXt0aGlzLl9kb2N1bWVudCYmIXRoaXMuX2RvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybigiQ3VycmVudCBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGEgZG9jdHlwZS4gVGhpcyBtYXkgY2F1c2Ugc29tZSBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbm90IHRvIGJlaGF2ZSBhcyBleHBlY3RlZC4iKX0sdC5wcm90b3R5cGUuX2NoZWNrVGhlbWVJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudCYmImZ1bmN0aW9uIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgibWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPWdldENvbXB1dGVkU3R5bGUodCk7ZSYmIm5vbmUiIT09ZS5kaXNwbGF5JiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEFuZ3VsYXIgTWF0ZXJpYWwgY29yZSB0aGVtZS4gTW9zdCBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4gRm9yIG1vcmUgaW5mbyByZWZlciB0byB0aGUgdGhlbWluZyBndWlkZTogaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL3RoZW1pbmciKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX0sdC5wcm90b3R5cGUuX2NoZWNrSGFtbWVySXNBdmFpbGFibGU9ZnVuY3Rpb24oKXshdGhpcy5faGFzQ2hlY2tlZEhhbW1lciYmdGhpcy5fd2luZG93JiYodGhpcy5fYXJlQ2hlY2tzRW5hYmxlZCgpJiYhdGhpcy5fd2luZG93LkhhbW1lciYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBIYW1tZXJKUy4gQ2VydGFpbiBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4iKSx0aGlzLl9oYXNDaGVja2VkSGFtbWVyPSEwKX0sdH0oKTtmdW5jdGlvbiBmKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZWQ9ITEscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KG8uYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odCl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBuPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3ZhciBpPXQuYXBwbHkodGhpcyxuKXx8dGhpcztyZXR1cm4gaS5jb2xvcj1lLGl9cmV0dXJuIE9iamVjdChpLmIpKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJjb2xvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvcn0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBuPXR8fGU7biE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtIit0aGlzLl9jb2xvciksbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC0iK24pLHRoaXMuX2NvbG9yPW4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLG59KHQpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dmFyIHI9dC5hcHBseSh0aGlzLGUpfHx0aGlzO3JldHVybiByLl9kaXNhYmxlUmlwcGxlPSExLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlUmlwcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPU9iamVjdChvLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfXZhciBwPW5ldyByLm8oIk1BVF9EQVRFX0xPQ0FMRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHIuVikoci5zKX19KSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2xvY2FsZUNoYW5nZXM9bmV3IGEuYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsb2NhbGVDaGFuZ2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUNoYW5nZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR8fHRoaXMuaXNEYXRlSW5zdGFuY2UodCkmJnRoaXMuaXNWYWxpZCh0KT90OnRoaXMuaW52YWxpZCgpfSx0LnByb3RvdHlwZS5zZXRMb2NhbGU9ZnVuY3Rpb24odCl7dGhpcy5sb2NhbGU9dCx0aGlzLl9sb2NhbGVDaGFuZ2VzLm5leHQoKX0sdC5wcm90b3R5cGUuY29tcGFyZURhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRZZWFyKHQpLXRoaXMuZ2V0WWVhcihlKXx8dGhpcy5nZXRNb250aCh0KS10aGlzLmdldE1vbnRoKGUpfHx0aGlzLmdldERhdGUodCktdGhpcy5nZXREYXRlKGUpfSx0LnByb3RvdHlwZS5zYW1lRGF0ZT1mdW5jdGlvbih0LGUpe2lmKHQmJmUpe3ZhciBuPXRoaXMuaXNWYWxpZCh0KSxyPXRoaXMuaXNWYWxpZChlKTtyZXR1cm4gbiYmcj8hdGhpcy5jb21wYXJlRGF0ZSh0LGUpOm49PXJ9cmV0dXJuIHQ9PWV9LHQucHJvdG90eXBlLmNsYW1wRGF0ZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUmJnRoaXMuY29tcGFyZURhdGUodCxlKTwwP2U6biYmdGhpcy5jb21wYXJlRGF0ZSh0LG4pPjA/bjp0fSx0fSgpLHk9bmV3IHIubygibWF0LWRhdGUtZm9ybWF0cyIpLGc9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsLHY9e2xvbmc6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sbmFycm93OlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl19LGI9eCgzMSxmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQrMSl9KSxfPXtsb25nOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG5hcnJvdzpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXX0sdz0vXlxkezR9LVxkezJ9LVxkezJ9KD86VFxkezJ9OlxkezJ9OlxkezJ9KD86XC5cZCspPyg/Olp8KD86KD86XCt8LSlcZHsyfTpcZHsyfSkpPyk/JC87ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWUocik7cmV0dXJuIG59dmFyIE89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci51c2VVdGNGb3JEaXNwbGF5PSEwLHQucHJvdG90eXBlLnNldExvY2FsZS5jYWxsKHIsZSksci51c2VVdGNGb3JEaXNwbGF5PSFuLlRSSURFTlQsci5fY2xhbXBEYXRlPW4uVFJJREVOVHx8bi5FREdFLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0WWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSxlLnByb3RvdHlwZS5nZXRNb250aD1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSxlLnByb3RvdHlwZS5nZXREYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKX0sZS5wcm90b3R5cGUuZ2V0RGF5T2ZXZWVrPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxlLnByb3RvdHlwZS5nZXRNb250aE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoZyl7dmFyIG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse21vbnRoOnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4geCgxMixmdW5jdGlvbih0KXtyZXR1cm4gZS5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoZS5fZm9ybWF0KG4sbmV3IERhdGUoMjAxNyx0LDEpKSl9KX1yZXR1cm4gdlt0XX0sZS5wcm90b3R5cGUuZ2V0RGF0ZU5hbWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZihnKXt2YXIgZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7ZGF5OiJudW1lcmljIix0aW1lWm9uZToidXRjIn0pO3JldHVybiB4KDMxLGZ1bmN0aW9uKG4pe3JldHVybiB0Ll9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0Ll9mb3JtYXQoZSxuZXcgRGF0ZSgyMDE3LDAsbisxKSkpfSl9cmV0dXJuIGJ9LGUucHJvdG90eXBlLmdldERheU9mV2Vla05hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoZyl7dmFyIG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse3dlZWtkYXk6dCx0aW1lWm9uZToidXRjIn0pO3JldHVybiB4KDcsZnVuY3Rpb24odCl7cmV0dXJuIGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKGUuX2Zvcm1hdChuLG5ldyBEYXRlKDIwMTcsMCx0KzEpKSl9KX1yZXR1cm4gX1t0XX0sZS5wcm90b3R5cGUuZ2V0WWVhck5hbWU9ZnVuY3Rpb24odCl7aWYoZyl7dmFyIGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse3llYXI6Im51bWVyaWMiLHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChlLHQpKX1yZXR1cm4gU3RyaW5nKHRoaXMuZ2V0WWVhcih0KSl9LGUucHJvdG90eXBlLmdldEZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmdldE51bURheXNJbk1vbnRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERhdGUodGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSsxLDApKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY3JlYXRlRGF0ZSh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSx0aGlzLmdldERhdGUodCkpfSxlLnByb3RvdHlwZS5jcmVhdGVEYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZihlPDB8fGU+MTEpdGhyb3cgRXJyb3IoJ0ludmFsaWQgbW9udGggaW5kZXggIicrZSsnIi4gTW9udGggaW5kZXggaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMTEuJyk7aWYobjwxKXRocm93IEVycm9yKCdJbnZhbGlkIGRhdGUgIicrbisnIi4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuJyk7dmFyIHI9dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0LGUsbik7aWYoci5nZXRNb250aCgpIT1lKXRocm93IEVycm9yKCdJbnZhbGlkIGRhdGUgIicrbisnIiBmb3IgbW9udGggd2l0aCBpbmRleCAiJytlKyciLicpO3JldHVybiByfSxlLnByb3RvdHlwZS50b2RheT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZX0sZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P25ldyBEYXRlKHQpOnQ/bmV3IERhdGUoRGF0ZS5wYXJzZSh0KSk6bnVsbH0sZS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaXNWYWxpZCh0KSl0aHJvdyBFcnJvcigiTmF0aXZlRGF0ZUFkYXB0ZXI6IENhbm5vdCBmb3JtYXQgaW52YWxpZCBkYXRlLiIpO2lmKGcpe3RoaXMuX2NsYW1wRGF0ZSYmKHQuZ2V0RnVsbFllYXIoKTwxfHx0LmdldEZ1bGxZZWFyKCk+OTk5OSkmJih0PXRoaXMuY2xvbmUodCkpLnNldEZ1bGxZZWFyKE1hdGgubWF4KDEsTWF0aC5taW4oOTk5OSx0LmdldEZ1bGxZZWFyKCkpKSksZT1PYmplY3QoaS5hKSh7fSxlLHt0aW1lWm9uZToidXRjIn0pO3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLGUpO3JldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQobix0KSl9cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHQudG9EYXRlU3RyaW5nKCkpfSxlLnByb3RvdHlwZS5hZGRDYWxlbmRhclllYXJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkQ2FsZW5kYXJNb250aHModCwxMiplKX0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJNb250aHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpK2UsdGhpcy5nZXREYXRlKHQpKTtyZXR1cm4gdGhpcy5nZXRNb250aChuKSE9KCh0aGlzLmdldE1vbnRoKHQpK2UpJTEyKzEyKSUxMiYmKG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIobiksdGhpcy5nZXRNb250aChuKSwwKSksbn0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJEYXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCksdGhpcy5nZXREYXRlKHQpK2UpfSxlLnByb3RvdHlwZS50b0lzbzg2MDE9ZnVuY3Rpb24odCl7cmV0dXJuW3QuZ2V0VVRDRnVsbFllYXIoKSx0aGlzLl8yZGlnaXQodC5nZXRVVENNb250aCgpKzEpLHRoaXMuXzJkaWdpdCh0LmdldFVUQ0RhdGUoKSldLmpvaW4oIi0iKX0sZS5wcm90b3R5cGUuZGVzZXJpYWxpemU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZighZSlyZXR1cm4gbnVsbDtpZih3LnRlc3QoZSkpe3ZhciBuPW5ldyBEYXRlKGUpO2lmKHRoaXMuaXNWYWxpZChuKSlyZXR1cm4gbn19cmV0dXJuIHQucHJvdG90eXBlLmRlc2VyaWFsaXplLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuaXNEYXRlSW5zdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlfSxlLnByb3RvdHlwZS5pc1ZhbGlkPWZ1bmN0aW9uKHQpe3JldHVybiFpc05hTih0LmdldFRpbWUoKSl9LGUucHJvdG90eXBlLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUoTmFOKX0sZS5wcm90b3R5cGUuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3c9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBEYXRlKHQsZSxuKTtyZXR1cm4gdD49MCYmdDwxMDAmJnIuc2V0RnVsbFllYXIodGhpcy5nZXRZZWFyKHIpLTE5MDApLHJ9LGUucHJvdG90eXBlLl8yZGlnaXQ9ZnVuY3Rpb24odCl7cmV0dXJuKCIwMCIrdCkuc2xpY2UoLTIpfSxlLnByb3RvdHlwZS5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvW1x1MjAwZVx1MjAwZl0vZywiIil9LGUucHJvdG90eXBlLl9mb3JtYXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRGF0ZShEYXRlLlVUQyhlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpLGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSxlLmdldE1pbGxpc2Vjb25kcygpKSk7cmV0dXJuIHQuZm9ybWF0KG4pfSxlfShtKSxDPXtwYXJzZTp7ZGF0ZUlucHV0Om51bGx9LGRpc3BsYXk6e2RhdGVJbnB1dDp7eWVhcjoibnVtZXJpYyIsbW9udGg6Im51bWVyaWMiLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQifSxkYXRlQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0sbW9udGhZZWFyQTExeUxhYmVsOnt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyJ9fX0sUz1mdW5jdGlvbigpe30sRT1mdW5jdGlvbigpe30saz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX2xpbmVzPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX3NldExpbmVDbGFzcyh0aGlzLl9saW5lcy5sZW5ndGgpLHRoaXMuX2xpbmVzLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7bi5fc2V0TGluZUNsYXNzKG4uX2xpbmVzLmxlbmd0aCl9KX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldExpbmVDbGFzcz1mdW5jdGlvbih0KXt0aGlzLl9yZXNldENsYXNzZXMoKSwyPT09dHx8Mz09PXQ/dGhpcy5fc2V0Q2xhc3MoIm1hdC0iK3QrIi1saW5lIiwhMCk6dD4zJiZ0aGlzLl9zZXRDbGFzcygibWF0LW11bHRpLWxpbmUiLCEwKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3RoaXMuX3NldENsYXNzKCJtYXQtMi1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC0zLWxpbmUiLCExKSx0aGlzLl9zZXRDbGFzcygibWF0LW11bHRpLWxpbmUiLCExKX0sdC5wcm90b3R5cGUuX3NldENsYXNzPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0KX0sdH0oKSxUPWZ1bmN0aW9uKCl7fSxJPWZ1bmN0aW9uKCl7dmFyIHQ9e0ZBRElOR19JTjowLFZJU0lCTEU6MSxGQURJTkdfT1VUOjIsSElEREVOOjN9O3JldHVybiB0W3QuRkFESU5HX0lOXT0iRkFESU5HX0lOIix0W3QuVklTSUJMRV09IlZJU0lCTEUiLHRbdC5GQURJTkdfT1VUXT0iRkFESU5HX09VVCIsdFt0LkhJRERFTl09IkhJRERFTiIsdH0oKSxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbmZpZz1uLHRoaXMuc3RhdGU9SS5ISURERU59cmV0dXJuIHQucHJvdG90eXBlLmZhZGVPdXQ9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5mYWRlT3V0UmlwcGxlKHRoaXMpfSx0fSgpLGo9e2VudGVyRHVyYXRpb246NDUwLGV4aXREdXJhdGlvbjo0MDB9LFA9ODAwLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5fdGFyZ2V0PXQsdGhpcy5fbmdab25lPWUsdGhpcy5faXNQb2ludGVyRG93bj0hMSx0aGlzLl90cmlnZ2VyRXZlbnRzPW5ldyBNYXAsdGhpcy5fYWN0aXZlUmlwcGxlcz1uZXcgU2V0LHRoaXMuX2V2ZW50T3B0aW9ucz0hIU9iamVjdChzLmMpKCkmJntwYXNzaXZlOiEwfSx0aGlzLm9uTW91c2Vkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPWkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8aS5fbGFzdFRvdWNoU3RhcnRFdmVudCtQO2kuX3RhcmdldC5yaXBwbGVEaXNhYmxlZHx8ZXx8KGkuX2lzUG9pbnRlckRvd249ITAsaS5mYWRlSW5SaXBwbGUodC5jbGllbnRYLHQuY2xpZW50WSxpLl90YXJnZXQucmlwcGxlQ29uZmlnKSl9LHRoaXMub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHQpe2kuX3RhcmdldC5yaXBwbGVEaXNhYmxlZHx8KGkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQ9RGF0ZS5ub3coKSxpLl9pc1BvaW50ZXJEb3duPSEwLGkuZmFkZUluUmlwcGxlKHQudG91Y2hlc1swXS5jbGllbnRYLHQudG91Y2hlc1swXS5jbGllbnRZLGkuX3RhcmdldC5yaXBwbGVDb25maWcpKX0sdGhpcy5vblBvaW50ZXJVcD1mdW5jdGlvbigpe2kuX2lzUG9pbnRlckRvd24mJihpLl9pc1BvaW50ZXJEb3duPSExLGkuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXshdC5jb25maWcucGVyc2lzdGVudCYmKHQuc3RhdGU9PT1JLlZJU0lCTEV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiZ0LnN0YXRlPT09SS5GQURJTkdfSU4pJiZ0LmZhZGVPdXQoKX0pKX0sci5pc0Jyb3dzZXImJih0aGlzLl9jb250YWluZXJFbGVtZW50PW4ubmF0aXZlRWxlbWVudCx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgibW91c2Vkb3duIix0aGlzLm9uTW91c2Vkb3duKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgibW91c2V1cCIsdGhpcy5vblBvaW50ZXJVcCksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlbGVhdmUiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaHN0YXJ0Iix0aGlzLm9uVG91Y2hTdGFydCksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoInRvdWNoZW5kIix0aGlzLm9uUG9pbnRlclVwKSl9cmV0dXJuIHQucHJvdG90eXBlLmZhZGVJblJpcHBsZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17fSk7dmFyIG89dGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9jb250YWluZXJSZWN0fHx0aGlzLl9jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9T2JqZWN0KGkuYSkoe30saixuLmFuaW1hdGlvbik7bi5jZW50ZXJlZCYmKHQ9by5sZWZ0K28ud2lkdGgvMixlPW8udG9wK28uaGVpZ2h0LzIpO3ZhciBzPW4ucmFkaXVzfHxmdW5jdGlvbih0LGUsbil7dmFyIHI9TWF0aC5tYXgoTWF0aC5hYnModC1uLmxlZnQpLE1hdGguYWJzKHQtbi5yaWdodCkpLGk9TWF0aC5tYXgoTWF0aC5hYnMoZS1uLnRvcCksTWF0aC5hYnMoZS1uLmJvdHRvbSkpO3JldHVybiBNYXRoLnNxcnQocipyK2kqaSl9KHQsZSxvKSx1PXQtby5sZWZ0LGw9ZS1vLnRvcCxjPWEuZW50ZXJEdXJhdGlvbi8obi5zcGVlZEZhY3Rvcnx8MSksZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLGYuc3R5bGUubGVmdD11LXMrInB4IixmLnN0eWxlLnRvcD1sLXMrInB4IixmLnN0eWxlLmhlaWdodD0yKnMrInB4IixmLnN0eWxlLndpZHRoPTIqcysicHgiLGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPW4uY29sb3J8fG51bGwsZi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YysibXMiLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoZiksd2luZG93LmdldENvbXB1dGVkU3R5bGUoZikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGYuc3R5bGUudHJhbnNmb3JtPSJzY2FsZSgxKSI7dmFyIGg9bmV3IEEodGhpcyxmLG4pO3JldHVybiBoLnN0YXRlPUkuRkFESU5HX0lOLHRoaXMuX2FjdGl2ZVJpcHBsZXMuYWRkKGgpLG4ucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9aCksdGhpcy5ydW5UaW1lb3V0T3V0c2lkZVpvbmUoZnVuY3Rpb24oKXt2YXIgdD1oPT09ci5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZTtoLnN0YXRlPUkuVklTSUJMRSxuLnBlcnNpc3RlbnR8fHQmJnIuX2lzUG9pbnRlckRvd258fGguZmFkZU91dCgpfSxjKSxofSx0LnByb3RvdHlwZS5mYWRlT3V0UmlwcGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FjdGl2ZVJpcHBsZXMuZGVsZXRlKHQpO2lmKHQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlJiYodGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZT1udWxsKSx0aGlzLl9hY3RpdmVSaXBwbGVzLnNpemV8fCh0aGlzLl9jb250YWluZXJSZWN0PW51bGwpLGUpe3ZhciBuPXQuZWxlbWVudCxyPU9iamVjdChpLmEpKHt9LGosdC5jb25maWcuYW5pbWF0aW9uKTtuLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1yLmV4aXREdXJhdGlvbisibXMiLG4uc3R5bGUub3BhY2l0eT0iMCIsdC5zdGF0ZT1JLkZBRElOR19PVVQsdGhpcy5ydW5UaW1lb3V0T3V0c2lkZVpvbmUoZnVuY3Rpb24oKXt0LnN0YXRlPUkuSElEREVOLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0sci5leGl0RHVyYXRpb24pfX0sdC5wcm90b3R5cGUuZmFkZU91dEFsbD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5mYWRlT3V0KCl9KX0sdC5wcm90b3R5cGUuc2V0dXBUcmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdCE9PXRoaXMuX3RyaWdnZXJFbGVtZW50JiYodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UuX3RyaWdnZXJFdmVudHMuZm9yRWFjaChmdW5jdGlvbihuLHIpe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIocixuLGUuX2V2ZW50T3B0aW9ucyl9KX0pLHRoaXMuX3RyaWdnZXJFbGVtZW50PXQpfSx0LnByb3RvdHlwZS5ydW5UaW1lb3V0T3V0c2lkZVpvbmU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dCh0LGUpfSl9LHQucHJvdG90eXBlLl9yZW1vdmVUcmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90cmlnZ2VyRWxlbWVudCYmdGhpcy5fdHJpZ2dlckV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dC5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGUsdC5fZXZlbnRPcHRpb25zKX0pfSx0fSgpLE49bmV3IHIubygibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2FuaW1hdGlvbk1vZGU9aSx0aGlzLnJhZGl1cz0wLHRoaXMuc3BlZWRGYWN0b3I9MSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX2dsb2JhbE9wdGlvbnM9cnx8e30sdGhpcy5fcmlwcGxlUmVuZGVyZXI9bmV3IE0odGhpcyxlLHQsbil9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidHJpZ2dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmlnZ2VyfHx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9LHQucHJvdG90eXBlLmZhZGVPdXRBbGw9ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmlwcGxlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOiJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlP3tlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9Ok9iamVjdChpLmEpKHt9LHRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uLHRoaXMuYW5pbWF0aW9uKSx0ZXJtaW5hdGVPblBvaW50ZXJVcDp0aGlzLl9nbG9iYWxPcHRpb25zLnRlcm1pbmF0ZU9uUG9pbnRlclVwLHNwZWVkRmFjdG9yOnRoaXMuc3BlZWRGYWN0b3IqKHRoaXMuX2dsb2JhbE9wdGlvbnMuYmFzZVNwZWVkRmFjdG9yfHwxKX19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyaXBwbGVEaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZD1mdW5jdGlvbigpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX0sdC5wcm90b3R5cGUubGF1bmNoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSh0LGUsT2JqZWN0KGkuYSkoe30sdGhpcy5yaXBwbGVDb25maWcsbikpOnRoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSgwLDAsT2JqZWN0KGkuYSkoe30sdGhpcy5yaXBwbGVDb25maWcsdCkpfSx0fSgpLEQ9ZnVuY3Rpb24oKXt9LEw9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPSJ1bmNoZWNrZWQiLHRoaXMuZGlzYWJsZWQ9ITF9LEY9ZnVuY3Rpb24oKXt9LFY9MCxVPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2xhYmVsSWQ9Im1hdC1vcHRncm91cC1sYWJlbC0iK1YrKyxlfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KGYoZnVuY3Rpb24oKXt9KSksej0wLEI9bmV3IHIubygiTUFUX09QVElPTl9QQVJFTlRfQ09NUE9ORU5UIiksSD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fcGFyZW50PW4sdGhpcy5ncm91cD1pLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pZD0ibWF0LW9wdGlvbi0iK3orKyx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPSIiLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9bmV3IHIubSx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IGEuYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtdWx0aXBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5tdWx0aXBsZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic2VsZWN0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmRpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChvLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZVJpcHBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5kaXNhYmxlUmlwcGxlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnRleHRDb250ZW50fHwiIikudHJpbSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldEhvc3RFbGVtZW50KCk7ImZ1bmN0aW9uIj09dHlwZW9mIHQuZm9jdXMmJnQuZm9jdXMoKX0sdC5wcm90b3R5cGUuc2V0QWN0aXZlU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlfHwodGhpcy5fYWN0aXZlPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sdC5wcm90b3R5cGUuc2V0SW5hY3RpdmVTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSx0LnByb3RvdHlwZS5nZXRMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX0sdC5wcm90b3R5cGUuX2hhbmRsZUtleWRvd249ZnVuY3Rpb24odCl7dC5rZXlDb2RlIT09dS5kJiZ0LmtleUNvZGUhPT11Lmp8fCh0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHQucHJldmVudERlZmF1bHQoKSl9LHQucHJvdG90eXBlLl9zZWxlY3RWaWFJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfSx0LnByb3RvdHlwZS5fZ2V0VGFiSW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn0sdC5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH0sdC5wcm90b3R5cGUubmdBZnRlclZpZXdDaGVja2VkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc2VsZWN0ZWQpe3ZhciB0PXRoaXMudmlld1ZhbHVlO3QhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT10LHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCkpfX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSksdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSExKSx0aGlzLnNvdXJjZT10LHRoaXMuaXNVc2VySW5wdXQ9ZX0odGhpcyx0KSl9LHR9KCksVz1mdW5jdGlvbigpe319LFhsUHc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIjZibEYiKTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXtyZXR1cm4gZS5zY2hlZHVsZShvLDAse2Vycm9yOnQsc3Vic2NyaWJlcjpufSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKHQpfSl9ZnVuY3Rpb24gbyh0KXt0LnN1YnNjcmliZXIuZXJyb3IodC5lcnJvcil9fSxZU2gyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4geX0pO3ZhciByPTksaT0xMyxvPTI3LGE9MzIscz0zNSx1PTM2LGw9MzcsYz0zOCxmPTM5LGg9NDAsZD00OCxwPTU3LG09NjUseT05MH0sWWxiUTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuKCJtclNHIiksbigiNmJsRiIpLG4oIkYvWEwiKTt2YXIgcj1uKCJLOUlhIiksaT1uKCJDY25HIiksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1uJiYobj0hMCk7dmFyIGk9dGhpczt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPW4sdGhpcy5fc2VsZWN0aW9uPW5ldyBTZXQsdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSx0aGlzLm9uQ2hhbmdlPXRoaXMuX2VtaXRDaGFuZ2VzP25ldyByLmE6bnVsbCxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9tYXJrU2VsZWN0ZWQodCl9KTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudChlKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21hcmtTZWxlY3RlZChlKX0pLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KGUpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KT90aGlzLmRlc2VsZWN0KHQpOnRoaXMuc2VsZWN0KHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX3VubWFya0FsbCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5pc1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfSx0LnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9zZWxlY3Rpb24uc2l6ZX0sdC5wcm90b3R5cGUuaGFzVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9LHQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuX3NlbGVjdGVkJiZ0aGlzLl9zZWxlY3RlZC5zb3J0KHQpfSx0LnByb3RvdHlwZS5fZW1pdENoYW5nZUV2ZW50PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLm9uQ2hhbmdlJiZ0aGlzLm9uQ2hhbmdlLm5leHQoe3NvdXJjZTp0aGlzLGFkZGVkOnRoaXMuX3NlbGVjdGVkVG9FbWl0LHJlbW92ZWQ6dGhpcy5fZGVzZWxlY3RlZFRvRW1pdH0pLHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10pfSx0LnByb3RvdHlwZS5fbWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX0sdC5wcm90b3R5cGUuX3VubWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9LHQucHJvdG90eXBlLl91bm1hcmtBbGw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KX0sdC5wcm90b3R5cGUuX3ZlcmlmeVZhbHVlQXNzaWdubWVudD1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aD4xJiYhdGhpcy5fbXVsdGlwbGUpdGhyb3cgRXJyb3IoIkNhbm5vdCBwYXNzIG11bHRpcGxlIHZhbHVlcyBpbnRvIFNlbGVjdGlvbk1vZGVsIHdpdGggc2luZ2xlLXZhbHVlIG1vZGUuIil9LHR9KCksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9saXN0ZW5lcnM9W119cmV0dXJuIHQucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9dGhpcy5fbGlzdGVuZXJzO248ci5sZW5ndGg7bisrKSgwLHJbbl0pKHQsZSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9saXN0ZW5lcnMucHVzaCh0KSxmdW5jdGlvbigpe2UuX2xpc3RlbmVycz1lLl9saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pfX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9saXN0ZW5lcnM9W119LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKX0sWllDaTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIjI2RlUiKSxhPW4oIjAvdVEiKSxzPW4oIkYvWEwiKSx1PW4oIks5SWEiKSxsPW4oIjZibEYiKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcywibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJFbXB0eUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gci5iKGUsdCksZX0oRXJyb3IpLGY9bigiVm5ELyIpLGg9bigidDlmWiIpLGQ9bigiRkZPbyIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IG0odCkpfX12YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWZhdWx0VmFsdWU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgeSh0LHRoaXMuZGVmYXVsdFZhbHVlKSl9LHR9KCkseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZGVmYXVsdFZhbHVlPW4sci5pc0VtcHR5PSEwLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNFbXB0eT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNFbXB0eSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KGQuYSksZz1uKCJ4TXlFIiksdj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9YiksT2JqZWN0KGcuYSkoe2hhc1ZhbHVlOiExLG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1ZhbHVlPSEwfSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc1ZhbHVlKXRocm93IHQoKX19KX07ZnVuY3Rpb24gYigpe3JldHVybiBuZXcgY312YXIgXz1uKCJtQ2hGIik7ZnVuY3Rpb24gdyh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9PYmplY3QoZi5hKShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pOl8uYSxPYmplY3QoaC5hKSgxKSxuP3AoZSk6dihmdW5jdGlvbigpe3JldHVybiBuZXcgY30pKX19dmFyIHg9bigicHNXMCIpLE89bigiNjdZLyIpLEM9bigiUGhqbiIpLFM9bigiYjdtVyIpLEU9bigiRzVKMSIpO2Z1bmN0aW9uIGsodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoRS5iKSgpOmUubGlmdChuZXcgVCh0KSl9fXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBTLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEkodCx0aGlzLnRvdGFsKSl9LHR9KCksST1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLnJpbmc9bmV3IEFycmF5LHIuY291bnQ9MCxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJpbmcsbj10aGlzLnRvdGFsLHI9dGhpcy5jb3VudCsrO2UubGVuZ3RoPG4/ZS5wdXNoKHQpOmVbciVuXT10fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uLGU9dGhpcy5jb3VudDtpZihlPjApZm9yKHZhciBuPXRoaXMuY291bnQ+PXRoaXMudG90YWw/dGhpcy50b3RhbDp0aGlzLmNvdW50LHI9dGhpcy5yaW5nLGk9MDtpPG47aSsrKXt2YXIgbz1lKyslbjt0Lm5leHQocltvXSl9dC5jb21wbGV0ZSgpfSxlfShkLmEpO2Z1bmN0aW9uIEEodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/T2JqZWN0KGYuYSkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KTpfLmEsaygxKSxuP3AoZSk6dihmdW5jdGlvbigpe3JldHVybiBuZXcgY30pKX19ZnVuY3Rpb24gaih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBQKHQsZSxuKSl9fXZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZSx0aGlzLnNvdXJjZT1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBNKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnLHRoaXMuc291cmNlKSl9LHR9KCksTT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnByZWRpY2F0ZT1uLG8udGhpc0FyZz1yLG8uc291cmNlPWksby5pbmRleD0wLG8udGhpc0FyZz1yfHxvLG99cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5pbmRleCsrLHRoaXMuc291cmNlKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWV8fHRoaXMubm90aWZ5Q29tcGxldGUoITEpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeUNvbXBsZXRlKCEwKX0sZX0oZC5hKSxOPW4oIjlaMUYiKSxSPW4oIlR4amciKSxEPW4oIlpuOEQiKTtmdW5jdGlvbiBMKHQsZSl7dmFyIG49ITE7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTImJihuPSEwKSxmdW5jdGlvbihyKXtyZXR1cm4gci5saWZ0KG5ldyBGKHQsZSxuKSl9fXZhciBGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuYWNjdW11bGF0b3I9dCx0aGlzLnNlZWQ9ZSx0aGlzLmhhc1NlZWQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgVih0LHRoaXMuYWNjdW11bGF0b3IsdGhpcy5zZWVkLHRoaXMuaGFzU2VlZCkpfSx0fSgpLFY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5hY2N1bXVsYXRvcj1uLG8uX3NlZWQ9cixvLmhhc1NlZWQ9aSxvLmluZGV4PTAsb31yZXR1cm4gci5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLmhhc1NlZWQ9ITAsdGhpcy5fc2VlZD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzU2VlZClyZXR1cm4gdGhpcy5fdHJ5TmV4dCh0KTt0aGlzLnNlZWQ9dCx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMuYWNjdW11bGF0b3IodGhpcy5zZWVkLHQsbil9Y2F0Y2godCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLnNlZWQ9ZSx0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGQuYSksVT1uKCJ5M0J5Iiksej1uKCJJcDBSIiksQj1uKCJaWWp0Iik7bi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIGFufSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIHlufSksbi5kKGUsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIGdufSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZufSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIHBufSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVufSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGRufSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIFFlfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuICRlfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIERlfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHFlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIEZlfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIG9ufSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHZufSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGxufSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIFhlfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGVufSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRufSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHJufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIFVlfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIG90fSk7dmFyIEg9ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQsdGhpcy51cmw9ZX0sVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZvaWQgMD09PXImJihyPSJpbXBlcmF0aXZlIiksdm9pZCAwPT09aSYmKGk9bnVsbCk7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby5uYXZpZ2F0aW9uVHJpZ2dlcj1yLG8ucmVzdG9yZWRTdGF0ZT1pLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvblN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxxPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkudXJsQWZ0ZXJSZWRpcmVjdHM9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJykifSxlfShIKSxZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkucmVhc29uPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuZXJyb3I9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FcnJvcihpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIGVycm9yOiAiK3RoaXMuZXJyb3IrIikifSxlfShIKSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlc1JlY29nbml6ZWQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLEs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iR3VhcmRzQ2hlY2tTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyl7dmFyIGE9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gYS51cmxBZnRlclJlZGlyZWN0cz1yLGEuc3RhdGU9aSxhLnNob3VsZEFjdGl2YXRlPW8sYX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja0VuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIsIHNob3VsZEFjdGl2YXRlOiAiK3RoaXMuc2hvdWxkQWN0aXZhdGUrIikifSxlfShIKSxYPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksJD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSZXNvbHZlRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJvdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICIrdGhpcy5yb3V0ZS5wYXRoKyIpIn0sdH0oKSx0dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yb3V0ZT10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLGV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBY3RpdmF0aW9uU3RhcnQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksaXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxvdD1mdW5jdGlvbigpe30sYXQ9InByaW1hcnkiLHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBhcmFtcz10fHx7fX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhcmFtcy5oYXNPd25Qcm9wZXJ0eSh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzKHQpKXt2YXIgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lWzBdOmV9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpbZV19cmV0dXJuW119LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2V5cyIse2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4gbmV3IHN0KHQpfWZ1bmN0aW9uIGx0KHQsZSxuKXt2YXIgcj1uLnBhdGguc3BsaXQoIi8iKTtpZihyLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiZnVsbCI9PT1uLnBhdGhNYXRjaCYmKGUuaGFzQ2hpbGRyZW4oKXx8ci5sZW5ndGg8dC5sZW5ndGgpKXJldHVybiBudWxsO2Zvcih2YXIgaT17fSxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBhPXJbb10scz10W29dO2lmKGEuc3RhcnRzV2l0aCgiOiIpKWlbYS5zdWJzdHJpbmcoMSldPXM7ZWxzZSBpZihhIT09cy5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDp0LnNsaWNlKDAsci5sZW5ndGgpLHBvc1BhcmFtczppfX12YXIgY3Q9ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlcz10LHRoaXMubW9kdWxlPWV9O2Z1bmN0aW9uIGZ0KHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2h0KHIsZHQoZSxyKSl9fWZ1bmN0aW9uIGh0KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgIEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBFbmNvdW50ZXJlZCB1bmRlZmluZWQgcm91dGUuXG4gICAgICBUaGUgcmVhc29uIG1pZ2h0IGJlIGFuIGV4dHJhIGNvbW1hLlxuXG4gICAgICBFeGFtcGxlOlxuICAgICAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gICAgICAgIHsgcGF0aDogJycsIHJlZGlyZWN0VG86ICcvZGFzaGJvYXJkJywgcGF0aE1hdGNoOiAnZnVsbCcgfSxcbiAgICAgICAgeyBwYXRoOiAnZGFzaGJvYXJkJywgIGNvbXBvbmVudDogRGFzaGJvYXJkQ29tcG9uZW50IH0sLCA8PCB0d28gY29tbWFzXG4gICAgICAgIHsgcGF0aDogJ2RldGFpbC86aWQnLCBjb21wb25lbnQ6IEhlcm9EZXRhaWxDb21wb25lbnQgfVxuICAgICAgXTtcbiAgICAiKTtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IEFycmF5IGNhbm5vdCBiZSBzcGVjaWZpZWQiKTtpZighdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4mJnQub3V0bGV0JiZ0Lm91dGxldCE9PWF0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGEgY29tcG9uZW50bGVzcyByb3V0ZSB3aXRob3V0IGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiBjYW5ub3QgaGF2ZSBhIG5hbWVkIG91dGxldCBzZXQiKTtpZih0LnJlZGlyZWN0VG8mJnQuY2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgY2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQuY2hpbGRyZW4mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGNoaWxkcmVuIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQuY29tcG9uZW50KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNvbXBvbmVudCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucGF0aCYmdC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggYW5kIG1hdGNoZXIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih2b2lkIDA9PT10LnJlZGlyZWN0VG8mJiF0LmNvbXBvbmVudCYmIXQuY2hpbGRyZW4mJiF0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInLiBPbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHByb3ZpZGVkOiBjb21wb25lbnQsIHJlZGlyZWN0VG8sIGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiIpO2lmKHZvaWQgMD09PXQucGF0aCYmdm9pZCAwPT09dC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJvdXRlcyBtdXN0IGhhdmUgZWl0aGVyIGEgcGF0aCBvciBhIG1hdGNoZXIgc3BlY2lmaWVkIik7aWYoInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiIvIj09PXQucGF0aC5jaGFyQXQoMCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aCBjYW5ub3Qgc3RhcnQgd2l0aCBhIHNsYXNoIik7aWYoIiI9PT10LnBhdGgmJnZvaWQgMCE9PXQucmVkaXJlY3RUbyYmdm9pZCAwPT09dC5wYXRoTWF0Y2gpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJ3twYXRoOiBcIiIrZSsnIiwgcmVkaXJlY3RUbzogIicrdC5yZWRpcmVjdFRvKyJcIn0nOiBwbGVhc2UgcHJvdmlkZSAncGF0aE1hdGNoJy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgJ3BhdGhNYXRjaCcgaXMgJ3ByZWZpeCcsIGJ1dCBvZnRlbiB0aGUgaW50ZW50IGlzIHRvIHVzZSAnZnVsbCcuIik7aWYodm9pZCAwIT09dC5wYXRoTWF0Y2gmJiJmdWxsIiE9PXQucGF0aE1hdGNoJiYicHJlZml4IiE9PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGhNYXRjaCBjYW4gb25seSBiZSBzZXQgdG8gJ3ByZWZpeCcgb3IgJ2Z1bGwnIik7dC5jaGlsZHJlbiYmZnQodC5jaGlsZHJlbixlKX1mdW5jdGlvbiBkdCh0LGUpe3JldHVybiBlP3R8fGUucGF0aD90JiYhZS5wYXRoP3QrIi8iOiF0JiZlLnBhdGg/ZS5wYXRoOnQrIi8iK2UucGF0aDoiIjp0fWZ1bmN0aW9uIHB0KHQpe3ZhciBlPXQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubWFwKHB0KSxuPWU/T2JqZWN0KHIuYSkoe30sdCx7Y2hpbGRyZW46ZX0pOk9iamVjdChyLmEpKHt9LHQpO3JldHVybiFuLmNvbXBvbmVudCYmKGV8fG4ubG9hZENoaWxkcmVuKSYmbi5vdXRsZXQmJm4ub3V0bGV0IT09YXQmJihuLmNvbXBvbmVudD1vdCksbn1mdW5jdGlvbiBtdCh0LGUpe3ZhciBuLHI9T2JqZWN0LmtleXModCksaT1PYmplY3Qua2V5cyhlKTtpZihyLmxlbmd0aCE9aS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaWYodFtuPXJbb11dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gdC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gdnQodCxlKXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZlKHRbbl0sbil9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIHQucGlwZShPYmplY3QoRC5hKSgpLGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfWZ1bmN0aW9uIF90KHQpe3JldHVybiBPYmplY3QoaS5TYSkodCk/dDpPYmplY3QoaS5UYSkodCk/T2JqZWN0KGEuYSkoUHJvbWlzZS5yZXNvbHZlKHQpKTpPYmplY3Qocy5hKSh0KX1mdW5jdGlvbiB3dCh0LGUsbil7cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbXQodCxlKX0odC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKSYmZnVuY3Rpb24gdChlLG4pe2lmKCFTdChlLnNlZ21lbnRzLG4uc2VnbWVudHMpKXJldHVybiExO2lmKGUubnVtYmVyT2ZDaGlsZHJlbiE9PW4ubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IodmFyIHIgaW4gbi5jaGlsZHJlbil7aWYoIWUuY2hpbGRyZW5bcl0pcmV0dXJuITE7aWYoIXQoZS5jaGlsZHJlbltyXSxuLmNoaWxkcmVuW3JdKSlyZXR1cm4hMX1yZXR1cm4hMH0odC5yb290LGUucm9vdCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RoPD1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJk9iamVjdC5rZXlzKGUpLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBlW25dPT09dFtuXX0pfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7cmV0dXJuIGZ1bmN0aW9uIGUobixyLGkpe2lmKG4uc2VnbWVudHMubGVuZ3RoPmkubGVuZ3RoKXJldHVybiEhU3QoYT1uLnNlZ21lbnRzLnNsaWNlKDAsaS5sZW5ndGgpLGkpJiYhci5oYXNDaGlsZHJlbigpO2lmKG4uc2VnbWVudHMubGVuZ3RoPT09aS5sZW5ndGgpe2lmKCFTdChuLnNlZ21lbnRzLGkpKXJldHVybiExO2Zvcih2YXIgbyBpbiByLmNoaWxkcmVuKXtpZighbi5jaGlsZHJlbltvXSlyZXR1cm4hMTtpZighdChuLmNoaWxkcmVuW29dLHIuY2hpbGRyZW5bb10pKXJldHVybiExfXJldHVybiEwfXZhciBhPWkuc2xpY2UoMCxuLnNlZ21lbnRzLmxlbmd0aCkscz1pLnNsaWNlKG4uc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIVN0KG4uc2VnbWVudHMsYSkmJiEhbi5jaGlsZHJlblthdF0mJmUobi5jaGlsZHJlblthdF0scixzKX0oZSxuLG4uc2VnbWVudHMpfSh0LnJvb3QsZS5yb290KX12YXIgeHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvb3Q9dCx0aGlzLnF1ZXJ5UGFyYW1zPWUsdGhpcy5mcmFnbWVudD1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSXQuc2VyaWFsaXplKHRoaXMpfSx0fSgpLE90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5zZWdtZW50cz10LHRoaXMuY2hpbGRyZW49ZSx0aGlzLnBhcmVudD1udWxsLHZ0KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wYXJlbnQ9bn0pfXJldHVybiB0LnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJudW1iZXJPZkNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBBdCh0aGlzKX0sdH0oKSxDdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnBhcmFtZXRlcnM9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbWV0ZXJNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwfHwodGhpcy5fcGFyYW1ldGVyTWFwPXV0KHRoaXMucGFyYW1ldGVycykpLHRoaXMuX3BhcmFtZXRlck1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBEdCh0aGlzKX0sdH0oKTtmdW5jdGlvbiBTdCh0LGUpe3JldHVybiB0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQucGF0aD09PWVbbl0ucGF0aH0pfWZ1bmN0aW9uIEV0KHQsZSl7dmFyIG49W107cmV0dXJuIHZ0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxyKXtyPT09YXQmJihuPW4uY29uY2F0KGUodCxyKSkpfSksdnQodC5jaGlsZHJlbixmdW5jdGlvbih0LHIpe3IhPT1hdCYmKG49bi5jb25jYXQoZSh0LHIpKSl9KSxufXZhciBrdD1mdW5jdGlvbigpe30sVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgenQodCk7cmV0dXJuIG5ldyB4dChlLnBhcnNlUm9vdFNlZ21lbnQoKSxlLnBhcnNlUXVlcnlQYXJhbXMoKSxlLnBhcnNlRnJhZ21lbnQoKSl9LHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZSxuO3JldHVybiIvIitmdW5jdGlvbiB0KGUsbil7aWYoIWUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gQXQoZSk7aWYobil7dmFyIHI9ZS5jaGlsZHJlblthdF0/dChlLmNoaWxkcmVuW2F0XSwhMSk6IiIsaT1bXTtyZXR1cm4gdnQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG4pe24hPT1hdCYmaS5wdXNoKG4rIjoiK3QoZSwhMSkpfSksaS5sZW5ndGg+MD9yKyIoIitpLmpvaW4oIi8vIikrIikiOnJ9dmFyIG89RXQoZSxmdW5jdGlvbihuLHIpe3JldHVybiByPT09YXQ/W3QoZS5jaGlsZHJlblthdF0sITEpXTpbcisiOiIrdChuLCExKV19KTtyZXR1cm4gQXQoZSkrIi8oIitvLmpvaW4oIi8vIikrIikifSh0LnJvb3QsITApKyhlPXQucXVlcnlQYXJhbXMsKG49T2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIFB0KHQpKyI9IitQdChlKX0pLmpvaW4oIiYiKTpQdCh0KSsiPSIrUHQobil9KSkubGVuZ3RoPyI/IituLmpvaW4oIiYiKToiIikrKCJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudD8iIyIrZW5jb2RlVVJJKHQuZnJhZ21lbnQpOiIiKX0sdH0oKSxJdD1uZXcgVHQ7ZnVuY3Rpb24gQXQodCl7cmV0dXJuIHQuc2VnbWVudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBEdCh0KX0pLmpvaW4oIi8iKX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4ganQodCkucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gTXQodCl7cmV0dXJuIGp0KHQpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1bmN0aW9uIE50KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gUnQodCl7cmV0dXJuIE50KHQucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIER0KHQpe3JldHVybiIiK010KHQucGF0aCkrKGU9dC5wYXJhbWV0ZXJzLE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iOyIrTXQodCkrIj0iK010KGVbdF0pfSkuam9pbigiIikpO3ZhciBlfXZhciBMdD0vXlteXC8oKT87PSNdKy87ZnVuY3Rpb24gRnQodCl7dmFyIGU9dC5tYXRjaChMdCk7cmV0dXJuIGU/ZVswXToiIn12YXIgVnQ9L15bXj0/JiNdKy8sVXQ9L15bXj8mI10rLyx6dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy51cmw9dCx0aGlzLnJlbWFpbmluZz10fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZVJvb3RTZWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IE90KFtdLHt9KTpuZXcgT3QoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbSh0KX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH0sdC5wcm90b3R5cGUucGFyc2VDaGlsZHJlbj1mdW5jdGlvbigpe2lmKCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTt2YXIgdD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt2YXIgZT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksZT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7dmFyIG49e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKG49dGhpcy5wYXJzZVBhcmVucyghMSkpLCh0Lmxlbmd0aD4wfHxPYmplY3Qua2V5cyhlKS5sZW5ndGg+MCkmJihuW2F0XT1uZXcgT3QodCxlKSksbn0sdC5wcm90b3R5cGUucGFyc2VTZWdtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9RnQodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09dCYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBFcnJvcigiRW1wdHkgcGF0aCB1cmwgc2VnbWVudCBjYW5ub3QgaGF2ZSBwYXJhbWV0ZXJzOiAnIit0aGlzLnJlbWFpbmluZysiJy4iKTtyZXR1cm4gdGhpcy5jYXB0dXJlKHQpLG5ldyBDdChOdCh0KSx0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCkpfSx0LnByb3RvdHlwZS5wYXJzZU1hdHJpeFBhcmFtcz1mdW5jdGlvbigpe2Zvcih2YXIgdD17fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0odCk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnBhcnNlUGFyYW09ZnVuY3Rpb24odCl7dmFyIGU9RnQodGhpcy5yZW1haW5pbmcpO2lmKGUpe3RoaXMuY2FwdHVyZShlKTt2YXIgbj0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXt2YXIgcj1GdCh0aGlzLnJlbWFpbmluZyk7ciYmdGhpcy5jYXB0dXJlKG49cil9dFtOdChlKV09TnQobil9fSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW09ZnVuY3Rpb24odCl7dmFyIGUsbj0oZT10aGlzLnJlbWFpbmluZy5tYXRjaChWdCkpP2VbMF06IiI7aWYobil7dGhpcy5jYXB0dXJlKG4pO3ZhciByPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goVXQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpJiZ0aGlzLmNhcHR1cmUocj1pKX12YXIgbz1SdChuKSxhPVJ0KHIpO2lmKHQuaGFzT3duUHJvcGVydHkobykpe3ZhciBzPXRbb107QXJyYXkuaXNBcnJheShzKXx8KHRbb109cz1bc10pLHMucHVzaChhKX1lbHNlIHRbb109YX19LHQucHJvdG90eXBlLnBhcnNlUGFyZW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXt2YXIgbj1GdCh0aGlzLnJlbWFpbmluZykscj10aGlzLnJlbWFpbmluZ1tuLmxlbmd0aF07aWYoIi8iIT09ciYmIikiIT09ciYmIjsiIT09cil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSB1cmwgJyIrdGhpcy51cmwrIiciKTt2YXIgaT12b2lkIDA7bi5pbmRleE9mKCI6Iik+LTE/KGk9bi5zdWJzdHIoMCxuLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGkpLHRoaXMuY2FwdHVyZSgiOiIpKTp0JiYoaT1hdCk7dmFyIG89dGhpcy5wYXJzZUNoaWxkcmVuKCk7ZVtpXT0xPT09T2JqZWN0LmtleXMobykubGVuZ3RoP29bYXRdOm5ldyBPdChbXSxvKSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucGVla1N0YXJ0c1dpdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgodCl9LHQucHJvdG90eXBlLmNvbnN1bWVPcHRpb25hbD1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgodCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcodC5sZW5ndGgpLCEwKX0sdC5wcm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbih0KXtpZighdGhpcy5jb25zdW1lT3B0aW9uYWwodCkpdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAiJyt0KyciLicpfSx0fSgpLEJ0PWZ1bmN0aW9uKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9LEh0PWZ1bmN0aW9uKHQpe3RoaXMudXJsVHJlZT10fTtmdW5jdGlvbiBXdCh0KXtyZXR1cm4gbmV3IGwuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgQnQodCkpfSl9ZnVuY3Rpb24gcXQodCl7cmV0dXJuIG5ldyBsLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEh0KHQpKX0pfWZ1bmN0aW9uIFl0KHQpe3JldHVybiBuZXcgbC5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBFcnJvcigiT25seSBhYnNvbHV0ZSByZWRpcmVjdHMgY2FuIGhhdmUgbmFtZWQgb3V0bGV0cy4gcmVkaXJlY3RUbzogJyIrdCsiJyIpKX0pfXZhciBHdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXt0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMudXJsU2VyaWFsaXplcj1uLHRoaXMudXJsVHJlZT1yLHRoaXMuY29uZmlnPW8sdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLm5nTW9kdWxlPXQuZ2V0KGkudil9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50R3JvdXAodGhpcy5uZ01vZHVsZSx0aGlzLmNvbmZpZyx0aGlzLnVybFRyZWUucm9vdCxhdCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5jcmVhdGVVcmxUcmVlKGUsdC51cmxUcmVlLnF1ZXJ5UGFyYW1zLHQudXJsVHJlZS5mcmFnbWVudCl9KSkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgSHQpcmV0dXJuIHQuYWxsb3dSZWRpcmVjdHM9ITEsdC5tYXRjaChlLnVybFRyZWUpO2lmKGUgaW5zdGFuY2VvZiBCdCl0aHJvdyB0Lm5vTWF0Y2hFcnJvcihlKTt0aHJvdyBlfSkpfSx0LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHQucm9vdCxhdCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5jcmVhdGVVcmxUcmVlKG4sdC5xdWVyeVBhcmFtcyx0LmZyYWdtZW50KX0pKS5waXBlKE9iamVjdChOLmEpKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBCdCl0aHJvdyBlLm5vTWF0Y2hFcnJvcih0KTt0aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub01hdGNoRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFcnJvcigiQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIFVSTCBTZWdtZW50OiAnIit0LnNlZ21lbnRHcm91cCsiJyIpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXQuc2VnbWVudHMubGVuZ3RoPjA/bmV3IE90KFtdLCgocj17fSlbYXRdPXQscikpOnQ7cmV0dXJuIG5ldyB4dChpLGUsbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMD09PW4uc2VnbWVudHMubGVuZ3RoJiZuLmhhc0NoaWxkcmVuKCk/dGhpcy5leHBhbmRDaGlsZHJlbih0LGUsbikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE90KFtdLHQpfSkpOnRoaXMuZXhwYW5kU2VnbWVudCh0LG4sZSxuLnNlZ21lbnRzLHIsITApfSx0LnByb3RvdHlwZS5leHBhbmRDaGlsZHJlbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcztyZXR1cm4gZnVuY3Rpb24obixpKXtpZigwPT09T2JqZWN0LmtleXMobikubGVuZ3RoKXJldHVybiBPYmplY3Qocy5hKSh7fSk7dmFyIG89W10sYT1bXSx1PXt9O3JldHVybiB2dChuLGZ1bmN0aW9uKG4saSl7dmFyIHMsbCxjPShzPWksbD1uLHIuZXhwYW5kU2VnbWVudEdyb3VwKHQsZSxsLHMpKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1W2ldPXR9KSk7aT09PWF0P28ucHVzaChjKTphLnB1c2goYyl9KSxzLmEuYXBwbHkobnVsbCxvLmNvbmNhdChhKSkucGlwZShPYmplY3QoUi5hKSgpLEEoKSxPYmplY3QoTy5hKShmdW5jdGlvbigpe3JldHVybiB1fSkpfShuLmNoaWxkcmVuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudD1mdW5jdGlvbih0LGUsbixpLG8sYSl7dmFyIHU9dGhpcztyZXR1cm4gcy5hLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShuKSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihyKXtyZXR1cm4gdS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxuLHIsaSxvLGEpLnBpcGUoT2JqZWN0KE4uYSkoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEJ0KXJldHVybiBPYmplY3Qocy5hKShudWxsKTt0aHJvdyB0fSkpfSksT2JqZWN0KFIuYSkoKSx3KGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLE9iamVjdChOLmEpKGZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIGN8fCJFbXB0eUVycm9yIj09PXQubmFtZSl7aWYodS5ub0xlZnRvdmVyc0luVXJsKGUsaSxvKSlyZXR1cm4gT2JqZWN0KHMuYSkobmV3IE90KFtdLHt9KSk7dGhyb3cgbmV3IEJ0KGUpfXRocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEpe3JldHVybiBYdChyKSE9PW8/V3QoZSk6dm9pZCAwPT09ci5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxyLGkpOmEmJnRoaXMuYWxsb3dSZWRpcmVjdHM/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixyLGksbyk6V3QoZSl9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXtyZXR1cm4iKioiPT09ci5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LG4scixvKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixyLGksbyl9LHQucHJvdG90eXBlLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLG4ucmVkaXJlY3RUbyx7fSk7cmV0dXJuIG4ucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/cXQobyk6dGhpcy5saW5lcmFsaXplU2VnbWVudHMobixvKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKG4pe3ZhciBvPW5ldyBPdChuLHt9KTtyZXR1cm4gaS5leHBhbmRTZWdtZW50KHQsbyxlLG4sciwhMSl9KSl9LHQucHJvdG90eXBlLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9dGhpcyxzPVF0KGUscixpKSx1PXMuY29uc3VtZWRTZWdtZW50cyxsPXMubGFzdENoaWxkLGM9cy5wb3NpdGlvbmFsUGFyYW1TZWdtZW50cztpZighcy5tYXRjaGVkKXJldHVybiBXdChlKTt2YXIgZj10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyh1LHIucmVkaXJlY3RUbyxjKTtyZXR1cm4gci5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9xdChmKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhyLGYpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIGEuZXhwYW5kU2VnbWVudCh0LGUsbixyLmNvbmNhdChpLnNsaWNlKGwpKSxvLCExKX0pKX0sdC5wcm90b3R5cGUubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvPXRoaXM7aWYoIioqIj09PW4ucGF0aClyZXR1cm4gbi5sb2FkQ2hpbGRyZW4/dGhpcy5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLG4pLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRlZENvbmZpZz10LG5ldyBPdChpLHt9KX0pKTpPYmplY3Qocy5hKShuZXcgT3QoaSx7fSkpO3ZhciBhPVF0KGUsbixpKSx1PWEuY29uc3VtZWRTZWdtZW50cyxsPWEubGFzdENoaWxkO2lmKCFhLm1hdGNoZWQpcmV0dXJuIFd0KGUpO3ZhciBjPWkuc2xpY2UobCk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb25maWcodCxuKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLGk9dC5yb3V0ZXMsYT1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFp0KHQsZSxuKSYmWHQobikhPT1hdH0pfSh0LG4pP3tzZWdtZW50R3JvdXA6S3QobmV3IE90KGUsZnVuY3Rpb24odCxlKXt2YXIgbixpLG89e307b1thdF09ZTt0cnl7Zm9yKHZhciBhPU9iamVjdChyLmUpKHQpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgdT1zLnZhbHVlOyIiPT09dS5wYXRoJiZYdCh1KSE9PWF0JiYob1tYdCh1KV09bmV3IE90KFtdLHt9KSl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihpPWEucmV0dXJuKSYmaS5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gb30oaSxuZXcgT3Qobix0LmNoaWxkcmVuKSkpKSxzbGljZWRTZWdtZW50czpbXX06MD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIGkuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gWnQodCxlLG4pfSl9KHQsbik/e3NlZ21lbnRHcm91cDpLdChuZXcgT3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3Qoci5lKShuKSxsPXUubmV4dCgpOyFsLmRvbmU7bD11Lm5leHQoKSl7dmFyIGM9bC52YWx1ZTtadCh0LGUsYykmJiFpW1h0KGMpXSYmKHNbWHQoYyldPW5ldyBPdChbXSx7fSkpfX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIE9iamVjdChyLmEpKHt9LGkscyl9KHQsbixpLHQuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6bn06e3NlZ21lbnRHcm91cDp0LHNsaWNlZFNlZ21lbnRzOm59fShlLHUsYyxpKSxsPWEuc2VnbWVudEdyb3VwLGY9YS5zbGljZWRTZWdtZW50cztyZXR1cm4gMD09PWYubGVuZ3RoJiZsLmhhc0NoaWxkcmVuKCk/by5leHBhbmRDaGlsZHJlbihuLGksbCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE90KHUsdCl9KSk6MD09PWkubGVuZ3RoJiYwPT09Zi5sZW5ndGg/T2JqZWN0KHMuYSkobmV3IE90KHUse30pKTpvLmV4cGFuZFNlZ21lbnQobixsLGksZixhdCwhMCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE90KHUuY29uY2F0KHQuc2VnbWVudHMpLHQuY2hpbGRyZW4pfSkpfSkpfSx0LnByb3RvdHlwZS5nZXRDaGlsZENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGUuY2hpbGRyZW4/T2JqZWN0KHMuYSkobmV3IGN0KGUuY2hpbGRyZW4sdCkpOmUubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWUuX2xvYWRlZENvbmZpZz9PYmplY3Qocy5hKShlLl9sb2FkZWRDb25maWcpOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jYW5Mb2FkO3JldHVybiBuJiYwIT09bi5sZW5ndGg/YnQoT2JqZWN0KGEuYSkobikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihuKXt2YXIgcj10LmdldChuKTtyZXR1cm4gX3Qoci5jYW5Mb2FkP3IuY2FuTG9hZChlKTpyKGUpKX0pKSk6T2JqZWN0KHMuYSkoITApfSh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIHI/bi5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IoKChuPUVycm9yKCJOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6IENhbm5vdCBsb2FkIGNoaWxkcmVuIGJlY2F1c2UgdGhlIGd1YXJkIG9mIHRoZSByb3V0ZSBcInBhdGg6ICciK3QucGF0aCsiJ1wiIHJldHVybmVkIGZhbHNlIikpLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yPSEwLG4pKTt2YXIgbn0pfShlKX0pKTpPYmplY3Qocy5hKShuZXcgY3QoW10sdCkpfSx0LnByb3RvdHlwZS5saW5lcmFsaXplU2VnbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10scj1lLnJvb3Q7Oyl7aWYobj1uLmNvbmNhdChyLnNlZ21lbnRzKSwwPT09ci5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBPYmplY3Qocy5hKShuKTtpZihyLm51bWJlck9mQ2hpbGRyZW4+MXx8IXIuY2hpbGRyZW5bYXRdKXJldHVybiBZdCh0LnJlZGlyZWN0VG8pO3I9ci5jaGlsZHJlblthdF19fSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q29tbWFuZHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmFwcGx5UmVkaXJlY3RDcmVhdHJlVXJsVHJlZShlLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlKSx0LG4pfSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAodCxlLnJvb3QsbixyKTtyZXR1cm4gbmV3IHh0KGksdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhlLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksZS5mcmFnbWVudCl9LHQucHJvdG90eXBlLmNyZWF0ZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIHZ0KHQsZnVuY3Rpb24odCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQuc3RhcnRzV2l0aCgiOiIpKXt2YXIgaT10LnN1YnN0cmluZygxKTtuW3JdPWVbaV19ZWxzZSBuW3JdPXR9KSxufSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXRoaXMuY3JlYXRlU2VnbWVudHModCxlLnNlZ21lbnRzLG4sciksYT17fTtyZXR1cm4gdnQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG8pe2Fbb109aS5jcmVhdGVTZWdtZW50R3JvdXAodCxlLG4scil9KSxuZXcgT3QobyxhKX0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGF0aC5zdGFydHNXaXRoKCI6Iik/aS5maW5kUG9zUGFyYW0odCxlLHIpOmkuZmluZE9yUmV0dXJuKGUsbil9KX0sdC5wcm90b3R5cGUuZmluZFBvc1BhcmFtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uW2UucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFyKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZGlyZWN0IHRvICciK3QrIicuIENhbm5vdCBmaW5kICciK2UucGF0aCsiJy4iKTtyZXR1cm4gcn0sdC5wcm90b3R5cGUuZmluZE9yUmV0dXJuPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvPTA7dHJ5e2Zvcih2YXIgYT1PYmplY3Qoci5lKShlKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTtpZih1LnBhdGg9PT10LnBhdGgpcmV0dXJuIGUuc3BsaWNlKG8pLHU7bysrfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gUXQodCxlLG4pe2lmKCIiPT09ZS5wYXRoKXJldHVybiJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKT97bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTt2YXIgcj0oZS5tYXRjaGVyfHxsdCkobix0LGUpO3JldHVybiByP3ttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6ci5jb25zdW1lZCxsYXN0Q2hpbGQ6ci5jb25zdW1lZC5sZW5ndGgscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6ci5wb3NQYXJhbXN9OnttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319fWZ1bmN0aW9uIEt0KHQpe2lmKDE9PT10Lm51bWJlck9mQ2hpbGRyZW4mJnQuY2hpbGRyZW5bYXRdKXt2YXIgZT10LmNoaWxkcmVuW2F0XTtyZXR1cm4gbmV3IE90KHQuc2VnbWVudHMuY29uY2F0KGUuc2VnbWVudHMpLGUuY2hpbGRyZW4pfXJldHVybiB0fWZ1bmN0aW9uIFp0KHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDAhPT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gWHQodCl7cmV0dXJuIHQub3V0bGV0fHxhdH12YXIgJHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Jvb3Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGF0aEZyb21Sb290KHQpO3JldHVybiBlLmxlbmd0aD4xP2VbZS5sZW5ndGgtMl06bnVsbH0sdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9SnQodCx0aGlzLl9yb290KTtyZXR1cm4gZT9lLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOltdfSx0LnByb3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPUp0KHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUmJmUuY2hpbGRyZW4ubGVuZ3RoPjA/ZS5jaGlsZHJlblswXS52YWx1ZTpudWxsfSx0LnByb3RvdHlwZS5zaWJsaW5ncz1mdW5jdGlvbih0KXt2YXIgZT10ZSh0LHRoaXMuX3Jvb3QpO3JldHVybiBlLmxlbmd0aDwyP1tdOmVbZS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfSx0LnByb3RvdHlwZS5wYXRoRnJvbVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRlKHQsdGhpcy5fcm9vdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LHR9KCk7ZnVuY3Rpb24gSnQodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm4gZTt0cnl7Zm9yKHZhciBuPU9iamVjdChyLmUpKGUuY2hpbGRyZW4pLGk9bi5uZXh0KCk7IWkuZG9uZTtpPW4ubmV4dCgpKXt2YXIgbz1KdCh0LGkudmFsdWUpO2lmKG8pcmV0dXJuIG99fWNhdGNoKHQpe2E9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihzPW4ucmV0dXJuKSYmcy5jYWxsKG4pfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgYSxzfWZ1bmN0aW9uIHRlKHQsZSl7aWYodD09PWUudmFsdWUpcmV0dXJuW2VdO3RyeXtmb3IodmFyIG49T2JqZWN0KHIuZSkoZS5jaGlsZHJlbiksaT1uLm5leHQoKTshaS5kb25lO2k9bi5uZXh0KCkpe3ZhciBvPXRlKHQsaS52YWx1ZSk7aWYoby5sZW5ndGgpcmV0dXJuIG8udW5zaGlmdChlKSxvfX1jYXRjaCh0KXthPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYocz1uLnJldHVybikmJnMuY2FsbChuKX1maW5hbGx5e2lmKGEpdGhyb3cgYS5lcnJvcn19cmV0dXJuW107dmFyIGEsc312YXIgZWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuY2hpbGRyZW49ZX1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iVHJlZU5vZGUoIit0aGlzLnZhbHVlKyIpIn0sdH0oKTtmdW5jdGlvbiBuZSh0KXt2YXIgZT17fTtyZXR1cm4gdCYmdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3QudmFsdWUub3V0bGV0XT10fSksZX12YXIgcmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnNuYXBzaG90PW4sbGUocixlKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX0sZX0oJHQpO2Z1bmN0aW9uIGllKHQsZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgc2UoW10se30se30sIiIse30sYXQsZSxudWxsLHQucm9vdCwtMSx7fSk7cmV0dXJuIG5ldyB1ZSgiIixuZXcgZWUobixbXSkpfSh0LGUpLHI9bmV3IG8uYShbbmV3IEN0KCIiLHt9KV0pLGk9bmV3IG8uYSh7fSksYT1uZXcgby5hKHt9KSxzPW5ldyBvLmEoe30pLHU9bmV3IG8uYSgiIiksbD1uZXcgb2UocixpLHMsdSxhLGF0LGUsbi5yb290KTtyZXR1cm4gbC5zbmFwc2hvdD1uLnJvb3QsbmV3IHJlKG5ldyBlZShsLFtdKSxuKX12YXIgb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PXIsdGhpcy5kYXRhPWksdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMuX2Z1dHVyZVNuYXBzaG90PXN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD10aGlzLnBhcmFtcy5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1dCh0KX0pKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXRoaXMucXVlcnlQYXJhbXMucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdXQodCl9KSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6IkZ1dHVyZSgiK3RoaXMuX2Z1dHVyZVNuYXBzaG90KyIpIn0sdH0oKTtmdW5jdGlvbiBhZSh0LGUpe3ZvaWQgMD09PWUmJihlPSJlbXB0eU9ubHkiKTt2YXIgbj10LnBhdGhGcm9tUm9vdCxpPTA7aWYoImFsd2F5cyIhPT1lKWZvcihpPW4ubGVuZ3RoLTE7aT49MTspe3ZhciBvPW5baV0sYT1uW2ktMV07aWYoby5yb3V0ZUNvbmZpZyYmIiI9PT1vLnJvdXRlQ29uZmlnLnBhdGgpaS0tO2Vsc2V7aWYoYS5jb21wb25lbnQpYnJlYWs7aS0tfX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BhcmFtczpPYmplY3Qoci5hKSh7fSx0LnBhcmFtcyxlLnBhcmFtcyksZGF0YTpPYmplY3Qoci5hKSh7fSx0LmRhdGEsZS5kYXRhKSxyZXNvbHZlOk9iamVjdChyLmEpKHt9LHQucmVzb2x2ZSxlLl9yZXNvbHZlZERhdGEpfX0se3BhcmFtczp7fSxkYXRhOnt9LHJlc29sdmU6e319KX0obi5zbGljZShpKSl9dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMsdSxsLGMpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1yLHRoaXMuZGF0YT1pLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLnJvdXRlQ29uZmlnPXMsdGhpcy5fdXJsU2VnbWVudD11LHRoaXMuX2xhc3RQYXRoSW5kZXg9bCx0aGlzLl9yZXNvbHZlPWN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dXQodGhpcy5wYXJhbXMpKSx0aGlzLl9wYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGUodXJsOiciK3RoaXMudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpKyInLCBwYXRoOiciKyh0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIikrIicpIn0sdH0oKSx1ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsbil8fHRoaXM7cmV0dXJuIHIudXJsPWUsbGUocixuKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKHRoaXMuX3Jvb3QpfSxlfSgkdCk7ZnVuY3Rpb24gbGUodCxlKXtlLnZhbHVlLl9yb3V0ZXJTdGF0ZT10LGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbGUodCxlKX0pfWZ1bmN0aW9uIGNlKHQpe3ZhciBlPXQuY2hpbGRyZW4ubGVuZ3RoPjA/IiB7ICIrdC5jaGlsZHJlbi5tYXAoY2UpLmpvaW4oIiwgIikrIiB9ICI6IiI7cmV0dXJuIiIrdC52YWx1ZStlfWZ1bmN0aW9uIGZlKHQpe2lmKHQuc25hcHNob3Qpe3ZhciBlPXQuc25hcHNob3Qsbj10Ll9mdXR1cmVTbmFwc2hvdDt0LnNuYXBzaG90PW4sbXQoZS5xdWVyeVBhcmFtcyxuLnF1ZXJ5UGFyYW1zKXx8dC5xdWVyeVBhcmFtcy5uZXh0KG4ucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQhPT1uLmZyYWdtZW50JiZ0LmZyYWdtZW50Lm5leHQobi5mcmFnbWVudCksbXQoZS5wYXJhbXMsbi5wYXJhbXMpfHx0LnBhcmFtcy5uZXh0KG4ucGFyYW1zKSxmdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24paWYoIW10KHRbbl0sZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9KGUudXJsLG4udXJsKXx8dC51cmwubmV4dChuLnVybCksbXQoZS5kYXRhLG4uZGF0YSl8fHQuZGF0YS5uZXh0KG4uZGF0YSl9ZWxzZSB0LnNuYXBzaG90PXQuX2Z1dHVyZVNuYXBzaG90LHQuZGF0YS5uZXh0KHQuX2Z1dHVyZVNuYXBzaG90LmRhdGEpfWZ1bmN0aW9uIGhlKHQsZSl7dmFyIG4scjtyZXR1cm4gbXQodC5wYXJhbXMsZS5wYXJhbXMpJiZTdChuPXQudXJsLHI9ZS51cmwpJiZuLmV2ZXJ5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG10KHQucGFyYW1ldGVycyxyW2VdLnBhcmFtZXRlcnMpfSkmJiEoIXQucGFyZW50IT0hZS5wYXJlbnQpJiYoIXQucGFyZW50fHxoZSh0LnBhcmVudCxlLnBhcmVudCkpfWZ1bmN0aW9uIGRlKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmIXQub3V0bGV0cyYmIXQuc2VnbWVudFBhdGh9ZnVuY3Rpb24gcGUodCxlLG4scixpKXt2YXIgbz17fTtyZXR1cm4gciYmdnQocixmdW5jdGlvbih0LGUpe29bZV09QXJyYXkuaXNBcnJheSh0KT90Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4iIit0fSk6IiIrdH0pLG5ldyB4dChuLnJvb3Q9PT10P2U6ZnVuY3Rpb24gdChlLG4scil7dmFyIGk9e307cmV0dXJuIHZ0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXtpW29dPWU9PT1uP3I6dChlLG4scil9KSxuZXcgT3QoZS5zZWdtZW50cyxpKX0obi5yb290LHQsZSksbyxpKX12YXIgbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtpZih0aGlzLmlzQWJzb2x1dGU9dCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1lLHRoaXMuY29tbWFuZHM9bix0JiZuLmxlbmd0aD4wJiZkZShuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycyIpO3ZhciByPW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0c30pO2lmKHImJnIhPT1ndChuKSl0aHJvdyBuZXcgRXJyb3IoIntvdXRsZXRzOnt9fSBoYXMgdG8gYmUgdGhlIGxhc3QgY29tbWFuZCIpfXJldHVybiB0LnByb3RvdHlwZS50b1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fic29sdXRlJiYxPT09dGhpcy5jb21tYW5kcy5sZW5ndGgmJiIvIj09dGhpcy5jb21tYW5kc1swXX0sdH0oKSx5ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZWdtZW50R3JvdXA9dCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1lLHRoaXMuaW5kZXg9bn07ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHM/dC5vdXRsZXRzW2F0XToiIit0fWZ1bmN0aW9uIHZlKHQsZSxuKXtpZih0fHwodD1uZXcgT3QoW10se30pKSwwPT09dC5zZWdtZW50cy5sZW5ndGgmJnQuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYmUodCxlLG4pO3ZhciByPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MCxpPWUsbz17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2k8dC5zZWdtZW50cy5sZW5ndGg7KXtpZihyPj1uLmxlbmd0aClyZXR1cm4gbzt2YXIgYT10LnNlZ21lbnRzW2ldLHM9Z2UobltyXSksdT1yPG4ubGVuZ3RoLTE/bltyKzFdOm51bGw7aWYoaT4wJiZ2b2lkIDA9PT1zKWJyZWFrO2lmKHMmJnUmJiJvYmplY3QiPT10eXBlb2YgdSYmdm9pZCAwPT09dS5vdXRsZXRzKXtpZighT2Uocyx1LGEpKXJldHVybiBvO3IrPTJ9ZWxzZXtpZighT2Uocyx7fSxhKSlyZXR1cm4gbztyKyt9aSsrfXJldHVybnttYXRjaDohMCxwYXRoSW5kZXg6aSxjb21tYW5kSW5kZXg6cn19KHQsZSxuKSxpPW4uc2xpY2Uoci5jb21tYW5kSW5kZXgpO2lmKHIubWF0Y2gmJnIucGF0aEluZGV4PHQuc2VnbWVudHMubGVuZ3RoKXt2YXIgbz1uZXcgT3QodC5zZWdtZW50cy5zbGljZSgwLHIucGF0aEluZGV4KSx7fSk7cmV0dXJuIG8uY2hpbGRyZW5bYXRdPW5ldyBPdCh0LnNlZ21lbnRzLnNsaWNlKHIucGF0aEluZGV4KSx0LmNoaWxkcmVuKSxiZShvLDAsaSl9cmV0dXJuIHIubWF0Y2gmJjA9PT1pLmxlbmd0aD9uZXcgT3QodC5zZWdtZW50cyx7fSk6ci5tYXRjaCYmIXQuaGFzQ2hpbGRyZW4oKT9fZSh0LGUsbik6ci5tYXRjaD9iZSh0LDAsaSk6X2UodCxlLG4pfWZ1bmN0aW9uIGJlKHQsZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG5ldyBPdCh0LnNlZ21lbnRzLHt9KTt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHRbMF0/KChlPXt9KVthdF09dCxlKTp2b2lkIDA9PT10WzBdLm91dGxldHM/KChuPXt9KVthdF09dCxuKTp0WzBdLm91dGxldHM7dmFyIGUsbn0obiksaT17fTtyZXR1cm4gdnQocixmdW5jdGlvbihuLHIpe251bGwhPT1uJiYoaVtyXT12ZSh0LmNoaWxkcmVuW3JdLGUsbikpfSksdnQodC5jaGlsZHJlbixmdW5jdGlvbih0LGUpe3ZvaWQgMD09PXJbZV0mJihpW2VdPXQpfSksbmV3IE90KHQuc2VnbWVudHMsaSl9ZnVuY3Rpb24gX2UodCxlLG4pe2Zvcih2YXIgcj10LnNlZ21lbnRzLnNsaWNlKDAsZSksaT0wO2k8bi5sZW5ndGg7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5baV0mJnZvaWQgMCE9PW5baV0ub3V0bGV0cyl7dmFyIG89d2UobltpXS5vdXRsZXRzKTtyZXR1cm4gbmV3IE90KHIsbyl9aWYoMD09PWkmJmRlKG5bMF0pKXIucHVzaChuZXcgQ3QodC5zZWdtZW50c1tlXS5wYXRoLG5bMF0pKSxpKys7ZWxzZXt2YXIgYT1nZShuW2ldKSxzPWk8bi5sZW5ndGgtMT9uW2krMV06bnVsbDthJiZzJiZkZShzKT8oci5wdXNoKG5ldyBDdChhLHhlKHMpKSksaSs9Mik6KHIucHVzaChuZXcgQ3QoYSx7fSkpLGkrKyl9fXJldHVybiBuZXcgT3Qocix7fSl9ZnVuY3Rpb24gd2UodCl7dmFyIGU9e307cmV0dXJuIHZ0KHQsZnVuY3Rpb24odCxuKXtudWxsIT09dCYmKGVbbl09X2UobmV3IE90KFtdLHt9KSwwLHQpKX0pLGV9ZnVuY3Rpb24geGUodCl7dmFyIGU9e307cmV0dXJuIHZ0KHQsZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT0iIit0fSksZX1mdW5jdGlvbiBPZSh0LGUsbil7cmV0dXJuIHQ9PW4ucGF0aCYmbXQoZSxuLnBhcmFtZXRlcnMpfXZhciBDZT1mdW5jdGlvbih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfSxTZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcG9uZW50PXQsdGhpcy5yb3V0ZT1lfSxFZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5mdXR1cmU9dCx0aGlzLmN1cnI9ZSx0aGlzLm1vZHVsZUluamVjdG9yPW4sdGhpcy5mb3J3YXJkRXZlbnQ9cix0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzPVtdLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcz1bXX1yZXR1cm4gdC5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZS5fcm9vdDt0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyhlLHRoaXMuY3Vycj90aGlzLmN1cnIuX3Jvb3Q6bnVsbCx0LFtlLnZhbHVlXSl9LHQucHJvdG90eXBlLmNoZWNrR3VhcmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pc0RlYWN0aXZhdGluZygpfHx0aGlzLmlzQWN0aXZhdGluZygpP3RoaXMucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcygpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5ydW5DYW5BY3RpdmF0ZUNoZWNrcygpOk9iamVjdChzLmEpKCExKX0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJlc29sdmVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaXNBY3RpdmF0aW5nKCk/T2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoQy5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5ydW5SZXNvbHZlKG4ucm91dGUsdCl9KSxmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yP2Z1bmN0aW9uKG4pe3JldHVybiBPYmplY3QoVS5hKShMKHQsZSksaygxKSxwKGUpKShuKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChVLmEpKEwoZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KGUsbixyKzEpfSksaygxKSkoZSl9fShmdW5jdGlvbih0LGUpe3JldHVybiB0fSkpOk9iamVjdChzLmEpKG51bGwpfSx0LnByb3RvdHlwZS5pc0RlYWN0aXZhdGluZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuaXNBY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuc2V0dXBDaGlsZFJvdXRlR3VhcmRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7aS5zZXR1cFJvdXRlR3VhcmRzKHQsb1t0LnZhbHVlLm91dGxldF0sbixyLmNvbmNhdChbdC52YWx1ZV0pKSxkZWxldGUgb1t0LnZhbHVlLm91dGxldF19KSx2dChvLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuLmdldENvbnRleHQoZSkpfSl9LHQucHJvdG90eXBlLnNldHVwUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC52YWx1ZSxvPWU/ZS52YWx1ZTpudWxsLGE9bj9uLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpOm51bGw7aWYobyYmaS5yb3V0ZUNvbmZpZz09PW8ucm91dGVDb25maWcpe3ZhciBzPXRoaXMuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzKG8saSxpLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7cz90aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IENlKHIpKTooaS5kYXRhPW8uZGF0YSxpLl9yZXNvbHZlZERhdGE9by5fcmVzb2x2ZWREYXRhKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LGUsaS5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixyKSxzJiZ0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgU2UoYS5vdXRsZXQuY29tcG9uZW50LG8pKX1lbHNlIG8mJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxhKSx0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IENlKHIpKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LG51bGwsaS5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixyKX0sdC5wcm90b3R5cGUuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2gobil7Y2FzZSJhbHdheXMiOnJldHVybiEwO2Nhc2UicGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIWhlKHQsZSl8fCFtdCh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpO2Nhc2UicGFyYW1zQ2hhbmdlIjpkZWZhdWx0OnJldHVybiFoZSh0LGUpfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bmUodCksaT10LnZhbHVlO3Z0KHIsZnVuY3Rpb24odCxyKXtuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsaS5jb21wb25lbnQ/ZT9lLmNoaWxkcmVuLmdldENvbnRleHQocik6bnVsbDplKX0pLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBTZShpLmNvbXBvbmVudCYmZSYmZS5vdXRsZXQmJmUub3V0bGV0LmlzQWN0aXZhdGVkP2Uub3V0bGV0LmNvbXBvbmVudDpudWxsLGkpKX0sdC5wcm90b3R5cGUucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIE9iamVjdChhLmEpKHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5ydW5DYW5EZWFjdGl2YXRlKGUuY29tcG9uZW50LGUucm91dGUpfSksaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gT2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoQy5hKShmdW5jdGlvbihlKXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkoW3QuZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0KGUucm91dGUucGFyZW50KSx0LmZpcmVBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZSksdC5ydW5DYW5BY3RpdmF0ZUNoaWxkKGUucGF0aCksdC5ydW5DYW5BY3RpdmF0ZShlLnJvdXRlKV0pKX0pLGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5maXJlQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBydCh0KSksT2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IGV0KHQpKSxPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP2J0KE9iamVjdChhLmEpKG4pLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7dmFyIHI9ZS5nZXRUb2tlbihuLHQpO3JldHVybiBfdChyLmNhbkFjdGl2YXRlP3IuY2FuQWN0aXZhdGUodCxlLmZ1dHVyZSk6cih0LGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbdC5sZW5ndGgtMV0scj10LnNsaWNlKDAsdC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZCh0KX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXR9KTtyZXR1cm4gYnQoT2JqZWN0KGEuYSkocikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkodC5ndWFyZHMpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24ocil7dmFyIGk9ZS5nZXRUb2tlbihyLHQubm9kZSk7cmV0dXJuIF90KGkuY2FuQWN0aXZhdGVDaGlsZD9pLmNhbkFjdGl2YXRlQ2hpbGQobixlLmZ1dHVyZSk6aShuLGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKX0pKSl9LHQucHJvdG90eXBlLmV4dHJhY3RDYW5BY3RpdmF0ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkOm51bGw7cmV0dXJuIGUmJjAhPT1lLmxlbmd0aD97bm9kZTp0LGd1YXJkczplfTpudWxsfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUmJmUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIHImJjAhPT1yLmxlbmd0aD9PYmplY3QoYS5hKShyKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHIpe3ZhciBpPW4uZ2V0VG9rZW4ocixlKTtyZXR1cm4gX3QoaS5jYW5EZWFjdGl2YXRlP2kuY2FuRGVhY3RpdmF0ZSh0LGUsbi5jdXJyLG4uZnV0dXJlKTppKHQsZSxuLmN1cnIsbi5mdXR1cmUpKS5waXBlKHcoKSl9KSkucGlwZShqKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1blJlc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXNvbHZlTm9kZSh0Ll9yZXNvbHZlLHQpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7cmV0dXJuIHQuX3Jlc29sdmVkRGF0YT1uLHQuZGF0YT1PYmplY3Qoci5hKSh7fSx0LmRhdGEsYWUodCxlKS5yZXNvbHZlKSxudWxsfSkpfSx0LnByb3RvdHlwZS5yZXNvbHZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1PYmplY3Qua2V5cyh0KTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIE9iamVjdChzLmEpKHt9KTtpZigxPT09ci5sZW5ndGgpe3ZhciBpPXJbMF07cmV0dXJuIHRoaXMuZ2V0UmVzb2x2ZXIodFtpXSxlKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybihlPXt9KVtpXT10LGU7dmFyIGV9KSl9dmFyIG89e307cmV0dXJuIE9iamVjdChhLmEpKHIpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIG4uZ2V0UmVzb2x2ZXIodFtyXSxlKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBvW3JdPXQsdH0pKX0pKS5waXBlKEEoKSxPYmplY3QoTy5hKShmdW5jdGlvbigpe3JldHVybiBvfSkpfSx0LnByb3RvdHlwZS5nZXRSZXNvbHZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0VG9rZW4odCxlKTtyZXR1cm4gX3Qobi5yZXNvbHZlP24ucmVzb2x2ZShlLHRoaXMuZnV0dXJlKTpuKGUsdGhpcy5mdXR1cmUpKX0sdC5wcm90b3R5cGUuZ2V0VG9rZW49ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnfXJldHVybiBudWxsfShlKTtyZXR1cm4obj9uLm1vZHVsZS5pbmplY3Rvcjp0aGlzLm1vZHVsZUluamVjdG9yKS5nZXQodCl9LHR9KCksa2U9ZnVuY3Rpb24oKXt9LFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLmNvbmZpZz1lLHRoaXMudXJsVHJlZT1uLHRoaXMudXJsPXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PWl9cmV0dXJuIHQucHJvdG90eXBlLnJlY29nbml6ZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1qZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwLGU9dGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuY29uZmlnLHQsYXQpLG49bmV3IHNlKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoT2JqZWN0KHIuYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGF0LHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx0aGlzLnVybFRyZWUucm9vdCwtMSx7fSksaT1uZXcgZWUobixlKSxvPW5ldyB1ZSh0aGlzLnVybCxpKTtyZXR1cm4gdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShvLl9yb290KSxPYmplY3Qocy5hKShvKX1jYXRjaCh0KXtyZXR1cm4gbmV3IGwuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfX0sdC5wcm90b3R5cGUuaW5oZXJpdFBhcmFtc0FuZERhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmFsdWUscj1hZShuLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7bi5wYXJhbXM9T2JqZWN0LmZyZWV6ZShyLnBhcmFtcyksbi5kYXRhPU9iamVjdC5mcmVlemUoci5kYXRhKSx0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5oZXJpdFBhcmFtc0FuZERhdGEodCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLnNlZ21lbnRzLmxlbmd0aCYmZS5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKHQsZSk6dGhpcy5wcm9jZXNzU2VnbWVudCh0LGUsZS5zZWdtZW50cyxuKX0sdC5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLGk9RXQoZSxmdW5jdGlvbihlLG4pe3JldHVybiByLnByb2Nlc3NTZWdtZW50R3JvdXAodCxlLG4pfSk7cmV0dXJuIG49e30saS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52YWx1ZS5vdXRsZXRdO2lmKGUpe3ZhciByPWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpLGk9dC52YWx1ZS51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIik7dGhyb3cgbmV3IEVycm9yKCJUd28gc2VnbWVudHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgb3V0bGV0IG5hbWU6ICciK3IrIicgYW5kICciK2krIicuIil9blt0LnZhbHVlLm91dGxldF09dC52YWx1ZX0pLGkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnZhbHVlLm91dGxldD09PWF0Py0xOmUudmFsdWUub3V0bGV0PT09YXQ/MTp0LnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGUudmFsdWUub3V0bGV0KX0pLGl9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLGkpe3RyeXtmb3IodmFyIG89T2JqZWN0KHIuZSkodCksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPWEudmFsdWU7dHJ5e3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKHMsZSxuLGkpfWNhdGNoKHQpe2lmKCEodCBpbnN0YW5jZW9mIGtlKSl0aHJvdyB0fX19Y2F0Y2godCl7dT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKGw9by5yZXR1cm4pJiZsLmNhbGwobyl9ZmluYWxseXtpZih1KXRocm93IHUuZXJyb3J9fWlmKHRoaXMubm9MZWZ0b3ZlcnNJblVybChlLG4saSkpcmV0dXJuW107dGhyb3cgbmV3IGtlO3ZhciB1LGx9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixpKXtpZih0LnJlZGlyZWN0VG8pdGhyb3cgbmV3IGtlO2lmKCh0Lm91dGxldHx8YXQpIT09aSl0aHJvdyBuZXcga2U7dmFyIG8sYT1bXSxzPVtdO2lmKCIqKiI9PT10LnBhdGgpe3ZhciB1PW4ubGVuZ3RoPjA/Z3QobikucGFyYW1ldGVyczp7fTtvPW5ldyBzZShuLHUsT2JqZWN0LmZyZWV6ZShPYmplY3Qoci5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsTmUodCksaSx0LmNvbXBvbmVudCx0LEllKGUpLEFlKGUpK24ubGVuZ3RoLFJlKHQpKX1lbHNle3ZhciBsPWZ1bmN0aW9uKHQsZSxuKXtpZigiIj09PWUucGF0aCl7aWYoImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApKXRocm93IG5ldyBrZTtyZXR1cm57Y29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwYXJhbWV0ZXJzOnt9fX12YXIgaT0oZS5tYXRjaGVyfHxsdCkobix0LGUpO2lmKCFpKXRocm93IG5ldyBrZTt2YXIgbz17fTt2dChpLnBvc1BhcmFtcyxmdW5jdGlvbih0LGUpe29bZV09dC5wYXRofSk7dmFyIGE9aS5jb25zdW1lZC5sZW5ndGg+MD9PYmplY3Qoci5hKSh7fSxvLGkuY29uc3VtZWRbaS5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVycyk6bztyZXR1cm57Y29uc3VtZWRTZWdtZW50czppLmNvbnN1bWVkLGxhc3RDaGlsZDppLmNvbnN1bWVkLmxlbmd0aCxwYXJhbWV0ZXJzOmF9fShlLHQsbik7YT1sLmNvbnN1bWVkU2VnbWVudHMscz1uLnNsaWNlKGwubGFzdENoaWxkKSxvPW5ldyBzZShhLGwucGFyYW1ldGVycyxPYmplY3QuZnJlZXplKE9iamVjdChyLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxOZSh0KSxpLHQuY29tcG9uZW50LHQsSWUoZSksQWUoZSkrYS5sZW5ndGgsUmUodCkpfXZhciBjPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkcmVuP3QuY2hpbGRyZW46dC5sb2FkQ2hpbGRyZW4/dC5fbG9hZGVkQ29uZmlnLnJvdXRlczpbXX0odCksZj1qZShlLGEscyxjKSxoPWYuc2VnbWVudEdyb3VwLGQ9Zi5zbGljZWRTZWdtZW50cztpZigwPT09ZC5sZW5ndGgmJmguaGFzQ2hpbGRyZW4oKSl7dmFyIHA9dGhpcy5wcm9jZXNzQ2hpbGRyZW4oYyxoKTtyZXR1cm5bbmV3IGVlKG8scCldfWlmKDA9PT1jLmxlbmd0aCYmMD09PWQubGVuZ3RoKXJldHVybltuZXcgZWUobyxbXSldO3ZhciBtPXRoaXMucHJvY2Vzc1NlZ21lbnQoYyxoLGQsYXQpO3JldHVybltuZXcgZWUobyxtKV19LHR9KCk7ZnVuY3Rpb24gSWUodCl7Zm9yKHZhciBlPXQ7ZS5fc291cmNlU2VnbWVudDspZT1lLl9zb3VyY2VTZWdtZW50O3JldHVybiBlfWZ1bmN0aW9uIEFlKHQpe2Zvcih2YXIgZT10LG49ZS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtlLl9zb3VyY2VTZWdtZW50OyluKz0oZT1lLl9zb3VyY2VTZWdtZW50KS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtyZXR1cm4gbi0xfWZ1bmN0aW9uIGplKHQsZSxuLGkpe2lmKG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBQZSh0LGUsbikmJk1lKG4pIT09YXR9KX0odCxuKSl7dmFyIG89bmV3IE90KGUsZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxzPXt9O3NbYXRdPWksaS5fc291cmNlU2VnbWVudD10LGkuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoO3RyeXtmb3IodmFyIHU9T2JqZWN0KHIuZSkobiksbD11Lm5leHQoKTshbC5kb25lO2w9dS5uZXh0KCkpe3ZhciBjPWwudmFsdWU7aWYoIiI9PT1jLnBhdGgmJk1lKGMpIT09YXQpe3ZhciBmPW5ldyBPdChbXSx7fSk7Zi5fc291cmNlU2VnbWVudD10LGYuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHNbTWUoYyldPWZ9fX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIHN9KHQsZSxpLG5ldyBPdChuLHQuY2hpbGRyZW4pKSk7cmV0dXJuIG8uX3NvdXJjZVNlZ21lbnQ9dCxvLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOm8sc2xpY2VkU2VnbWVudHM6W119fWlmKDA9PT1uLmxlbmd0aCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFBlKHQsZSxuKX0pfSh0LG4pKXt2YXIgYT1uZXcgT3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3Qoci5lKShuKSxsPXUubmV4dCgpOyFsLmRvbmU7bD11Lm5leHQoKSl7dmFyIGM9bC52YWx1ZTtpZihQZSh0LGUsYykmJiFpW01lKGMpXSl7dmFyIGY9bmV3IE90KFtdLHt9KTtmLl9zb3VyY2VTZWdtZW50PXQsZi5fc2VnbWVudEluZGV4U2hpZnQ9dC5zZWdtZW50cy5sZW5ndGgsc1tNZShjKV09Zn19fWNhdGNoKHQpe289e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2wmJiFsLmRvbmUmJihhPXUucmV0dXJuKSYmYS5jYWxsKHUpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gT2JqZWN0KHIuYSkoe30saSxzKX0odCxuLGksdC5jaGlsZHJlbikpO3JldHVybiBhLl9zb3VyY2VTZWdtZW50PXQsYS5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDphLHNsaWNlZFNlZ21lbnRzOm59fXZhciBzPW5ldyBPdCh0LnNlZ21lbnRzLHQuY2hpbGRyZW4pO3JldHVybiBzLl9zb3VyY2VTZWdtZW50PXQscy5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpzLHNsaWNlZFNlZ21lbnRzOm59fWZ1bmN0aW9uIFBlKHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDA9PT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gTWUodCl7cmV0dXJuIHQub3V0bGV0fHxhdH1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gdC5kYXRhfHx7fX1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdC5yZXNvbHZlfHx7fX12YXIgRGU9ZnVuY3Rpb24oKXt9LExlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5zdG9yZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuc2hvdWxkQXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5yZXRyaWV2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuc2hvdWxkUmV1c2VSb3V0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJvdXRlQ29uZmlnPT09ZS5yb3V0ZUNvbmZpZ30sdH0oKSxGZT1uZXcgaS5vKCJST1VURVMiKSxWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5sb2FkZXI9dCx0aGlzLmNvbXBpbGVyPWUsdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyPW4sdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcj1yfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZSksdGhpcy5sb2FkTW9kdWxlRmFjdG9yeShlLmxvYWRDaGlsZHJlbikucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbihyKXtuLm9uTG9hZEVuZExpc3RlbmVyJiZuLm9uTG9hZEVuZExpc3RlbmVyKGUpO3ZhciBpPXIuY3JlYXRlKHQpO3JldHVybiBuZXcgY3QoeXQoaS5pbmplY3Rvci5nZXQoRmUpKS5tYXAocHQpLGkpfSkpfSx0LnByb3RvdHlwZS5sb2FkTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9PYmplY3QoYS5hKSh0aGlzLmxvYWRlci5sb2FkKHQpKTpfdCh0KCkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpLnQ/T2JqZWN0KHMuYSkodCk6T2JqZWN0KGEuYSkoZS5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCkpfSkpfSx0fSgpLFVlPWZ1bmN0aW9uKCl7fSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZFByb2Nlc3NVcmw9ZnVuY3Rpb24odCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmV4dHJhY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gQmUodCl7dGhyb3cgdH1mdW5jdGlvbiBIZSh0LGUsbil7cmV0dXJuIGUucGFyc2UoIi8iKX1mdW5jdGlvbiBXZSh0KXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9dmFyIHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGEscyxsLGMpe3ZhciBmPXRoaXM7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMudXJsU2VyaWFsaXplcj1lLHRoaXMucm9vdENvbnRleHRzPW4sdGhpcy5sb2NhdGlvbj1yLHRoaXMuY29uZmlnPWMsdGhpcy5uYXZpZ2F0aW9ucz1uZXcgby5hKG51bGwpLHRoaXMubmF2aWdhdGlvbklkPTAsdGhpcy5ldmVudHM9bmV3IHUuYSx0aGlzLmVycm9ySGFuZGxlcj1CZSx0aGlzLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcj1IZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy5ob29rcz17YmVmb3JlUHJlYWN0aXZhdGlvbjpXZSxhZnRlclByZWFjdGl2YXRpb246V2V9LHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1uZXcgemUsdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9bmV3IExlLHRoaXMub25TYW1lVXJsTmF2aWdhdGlvbj0iaWdub3JlIix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9ImVtcHR5T25seSIsdGhpcy5uZ01vZHVsZT1hLmdldChpLnYpLHRoaXMucmVzZXRDb25maWcoYyksdGhpcy5jdXJyZW50VXJsVHJlZT1uZXcgeHQobmV3IE90KFtdLHt9KSx7fSxudWxsKSx0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmNvbmZpZ0xvYWRlcj1uZXcgVmUocyxsLGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgSih0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgdHQodCkpfSksdGhpcy5yb3V0ZXJTdGF0ZT1pZSh0aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLHRoaXMucHJvY2Vzc05hdmlnYXRpb25zKCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0Um9vdENvbXBvbmVudFR5cGU9ZnVuY3Rpb24odCl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9dGhpcy5yb290Q29tcG9uZW50VHlwZX0sdC5wcm90b3R5cGUuaW5pdGlhbE5hdmlnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLDA9PT10aGlzLm5hdmlnYXRpb25JZCYmdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMubG9jYXRpb24ucGF0aCghMCkse3JlcGxhY2VVcmw6ITB9KX0sdC5wcm90b3R5cGUuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9ufHwodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj10aGlzLmxvY2F0aW9uLnN1YnNjcmliZShmdW5jdGlvbihlKXt2YXIgbj10LnBhcnNlVXJsKGUudXJsKSxyPSJwb3BzdGF0ZSI9PT1lLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSIsaT1lLnN0YXRlJiZlLnN0YXRlLm5hdmlnYXRpb25JZD97bmF2aWdhdGlvbklkOmUuc3RhdGUubmF2aWdhdGlvbklkfTpudWxsO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjaGVkdWxlTmF2aWdhdGlvbihuLHIsaSx7cmVwbGFjZVVybDohMH0pfSwwKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuZXZlbnRzLm5leHQodCl9LHQucHJvdG90eXBlLnJlc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2Z0KHQpLHRoaXMuY29uZmlnPXQubWFwKHB0KSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTF9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249bnVsbCl9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5yZWxhdGl2ZVRvLG89ZS5xdWVyeVBhcmFtcyxhPWUuZnJhZ21lbnQscz1lLnByZXNlcnZlUXVlcnlQYXJhbXMsdT1lLnF1ZXJ5UGFyYW1zSGFuZGxpbmcsbD1lLnByZXNlcnZlRnJhZ21lbnQ7T2JqZWN0KGkuVykoKSYmcyYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKTt2YXIgYz1ufHx0aGlzLnJvdXRlclN0YXRlLnJvb3QsZj1sP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6YSxoPW51bGw7aWYodSlzd2l0Y2godSl7Y2FzZSJtZXJnZSI6aD1PYmplY3Qoci5hKSh7fSx0aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLG8pO2JyZWFrO2Nhc2UicHJlc2VydmUiOmg9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0Omg9b3x8bnVsbH1lbHNlIGg9cz90aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zOm98fG51bGw7cmV0dXJuIG51bGwhPT1oJiYoaD10aGlzLnJlbW92ZUVtcHR5UHJvcHMoaCkpLGZ1bmN0aW9uKHQsZSxuLGksbyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBwZShlLnJvb3QsZS5yb290LGUsaSxvKTt2YXIgYT1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHRbMF0mJjE9PT10Lmxlbmd0aCYmIi8iPT09dFswXSlyZXR1cm4gbmV3IG1lKCEwLDAsdCk7dmFyIGU9MCxuPSExLGk9dC5yZWR1Y2UoZnVuY3Rpb24odCxpLG8pe2lmKCJvYmplY3QiPT10eXBlb2YgaSYmbnVsbCE9aSl7aWYoaS5vdXRsZXRzKXt2YXIgYT17fTtyZXR1cm4gdnQoaS5vdXRsZXRzLGZ1bmN0aW9uKHQsZSl7YVtlXT0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgiLyIpOnR9KSxPYmplY3Qoci5kKSh0LFt7b3V0bGV0czphfV0pfWlmKGkuc2VnbWVudFBhdGgpcmV0dXJuIE9iamVjdChyLmQpKHQsW2kuc2VnbWVudFBhdGhdKX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGk/T2JqZWN0KHIuZCkodCxbaV0pOjA9PT1vPyhpLnNwbGl0KCIvIikuZm9yRWFjaChmdW5jdGlvbihyLGkpezA9PWkmJiIuIj09PXJ8fCgwPT1pJiYiIj09PXI/bj0hMDoiLi4iPT09cj9lKys6IiIhPXImJnQucHVzaChyKSl9KSx0KTpPYmplY3Qoci5kKSh0LFtpXSl9LFtdKTtyZXR1cm4gbmV3IG1lKG4sZSxpKX0obik7aWYoYS50b1Jvb3QoKSlyZXR1cm4gcGUoZS5yb290LG5ldyBPdChbXSx7fSksZSxpLG8pO3ZhciBzPWZ1bmN0aW9uKHQsbixyKXtpZih0LmlzQWJzb2x1dGUpcmV0dXJuIG5ldyB5ZShlLnJvb3QsITAsMCk7aWYoLTE9PT1yLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4KXJldHVybiBuZXcgeWUoci5zbmFwc2hvdC5fdXJsU2VnbWVudCwhMCwwKTt2YXIgaT1kZSh0LmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtmb3IodmFyIGE9ci5zbmFwc2hvdC5fdXJsU2VnbWVudCxzPXIuc25hcHNob3QuX2xhc3RQYXRoSW5kZXgraSx1PXQubnVtYmVyT2ZEb3VibGVEb3RzO3U+czspe2lmKHUtPXMsIShhPWEucGFyZW50KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbnVtYmVyIG9mICcuLi8nIik7cz1hLnNlZ21lbnRzLmxlbmd0aH1yZXR1cm4gbmV3IHllKGEsITEscy11KX0oKX0oYSwwLHQpLHU9cy5wcm9jZXNzQ2hpbGRyZW4/YmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTp2ZShzLnNlZ21lbnRHcm91cCxzLmluZGV4LGEuY29tbWFuZHMpO3JldHVybiBwZShzLnNlZ21lbnRHcm91cCx1LGUsaSxvKX0oYyx0aGlzLmN1cnJlbnRVcmxUcmVlLHQsaCxmKX0sdC5wcm90b3R5cGUubmF2aWdhdGVCeVVybD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KTt2YXIgbj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLnBhcnNlVXJsKHQpLHI9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKG4sdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4gdGhpcy5zY2hlZHVsZU5hdmlnYXRpb24ociwiaW1wZXJhdGl2ZSIsbnVsbCxlKX0sdC5wcm90b3R5cGUubmF2aWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVxdWVzdGVkIHBhdGggY29udGFpbnMgIituKyIgc2VnbWVudCBhdCBpbmRleCAiK2UpfX0odCksdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3JlYXRlVXJsVHJlZSh0LGUpLGUpfSx0LnByb3RvdHlwZS5zZXJpYWxpemVVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodCl9LHQucHJvdG90eXBlLnBhcnNlVXJsPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KX1jYXRjaChuKXtlPXRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKG4sdGhpcy51cmxTZXJpYWxpemVyLHQpfXJldHVybiBlfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiB4dClyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMucGFyc2VVcmwodCk7cmV0dXJuIHd0KHRoaXMuY3VycmVudFVybFRyZWUsbixlKX0sdC5wcm90b3R5cGUucmVtb3ZlRW1wdHlQcm9wcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIHI9dFtuXTtyZXR1cm4gbnVsbCE9PXImJnZvaWQgMCE9PXImJihlW25dPXIpLGV9LHt9KX0sdC5wcm90b3R5cGUucHJvY2Vzc05hdmlnYXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5hdmlnYXRpb25zLnBpcGUoT2JqZWN0KEMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/KHQuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb24oZSksZS5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSkpOk9iamVjdChzLmEpKG51bGwpfSkpLnN1YnNjcmliZShmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS5zY2hlZHVsZU5hdmlnYXRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5uYXZpZ2F0aW9ucy52YWx1ZTtpZihpJiYiaW1wZXJhdGl2ZSIhPT1lJiYiaW1wZXJhdGl2ZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihpJiYiaGFzaGNoYW5nZSI9PWUmJiJwb3BzdGF0ZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihpJiYicG9wc3RhdGUiPT1lJiYiaGFzaGNoYW5nZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTt2YXIgbz1udWxsLGE9bnVsbCxzPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bz10LGE9ZX0pLHU9Kyt0aGlzLm5hdmlnYXRpb25JZDtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9ucy5uZXh0KHtpZDp1LHNvdXJjZTplLHN0YXRlOm4scmF3VXJsOnQsZXh0cmFzOnIscmVzb2x2ZTpvLHJlamVjdDphLHByb21pc2U6c30pLHMuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSl9LHQucHJvdG90eXBlLmV4ZWN1dGVTY2hlZHVsZWROYXZpZ2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmlkLHI9dC5yYXdVcmwsaT10LmV4dHJhcyxvPXQucmVzb2x2ZSxhPXQucmVqZWN0LHM9dC5zb3VyY2UsdT10LnN0YXRlLGw9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QociksYz0hdGhpcy5uYXZpZ2F0ZWR8fGwudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTsoInJlbG9hZCI9PT10aGlzLm9uU2FtZVVybE5hdmlnYXRpb258fGMpJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChyKT8odGhpcy5ldmVudHMubmV4dChuZXcgVyhuLHRoaXMuc2VyaWFsaXplVXJsKGwpLHMsdSkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUobCxyLCEhaS5za2lwTG9jYXRpb25DaGFuZ2UsISFpLnJlcGxhY2VVcmwsbixudWxsKX0pLnRoZW4obyxhKSk6YyYmdGhpcy5yYXdVcmxUcmVlJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybCh0aGlzLnJhd1VybFRyZWUpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBXKG4sdGhpcy5zZXJpYWxpemVVcmwobCkscyx1KSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5ydW5OYXZpZ2F0ZShsLHIsITEsITEsbixpZShsLGUucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90KX0pLnRoZW4obyxhKSk6KHRoaXMucmF3VXJsVHJlZT1yLG8obnVsbCkpfSx0LnByb3RvdHlwZS5ydW5OYXZpZ2F0ZT1mdW5jdGlvbih0LGUsbixpLGEsdSl7dmFyIGw9dGhpcztyZXR1cm4gYSE9PXRoaXMubmF2aWdhdGlvbklkPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBZKGEsdGhpcy5zZXJpYWxpemVVcmwodCksIk5hdmlnYXRpb24gSUQgIithKyIgaXMgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaWQgIit0aGlzLm5hdmlnYXRpb25JZCkpLFByb21pc2UucmVzb2x2ZSghMSkpOm5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsZil7dmFyIGgsZD0odT9PYmplY3Qocy5hKSh7YXBwbGllZFVybDp0LHNuYXBzaG90OnV9KTpuZXcgR3QobC5uZ01vZHVsZS5pbmplY3RvcixsLmNvbmZpZ0xvYWRlcixsLnVybFNlcmlhbGl6ZXIsdCxsLmNvbmZpZykuYXBwbHkoKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT0iZW1wdHlPbmx5IiksbmV3IFRlKHQsZSxuLHIsaSkucmVjb2duaXplKCl9KGwucm9vdENvbXBvbmVudFR5cGUsbC5jb25maWcsZSxsLnNlcmlhbGl6ZVVybChlKSxsLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7cmV0dXJuIGwuZXZlbnRzLm5leHQobmV3IFEoYSxsLnNlcmlhbGl6ZVVybCh0KSxsLnNlcmlhbGl6ZVVybChlKSxuKSkse2FwcGxpZWRVcmw6ZSxzbmFwc2hvdDpufX0pKX0pKSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0P09iamVjdChzLmEpKHQpOmwuaG9va3MuYmVmb3JlUHJlYWN0aXZhdGlvbih0LnNuYXBzaG90KS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQuYXBwbGllZFVybCxuPXQuc25hcHNob3Q7cmV0dXJuKGg9bmV3IEVlKG4sbC5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxsLm5nTW9kdWxlLmluamVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBsLnRyaWdnZXJFdmVudCh0KX0pKS5pbml0aWFsaXplKGwucm9vdENvbnRleHRzKSx7YXBwbGllZFVybDplLHNuYXBzaG90Om59fSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7aWYoImJvb2xlYW4iPT10eXBlb2YgZXx8bC5uYXZpZ2F0aW9uSWQhPT1hKXJldHVybiBPYmplY3Qocy5hKSghMSk7dmFyIG49ZS5hcHBsaWVkVXJsLHI9ZS5zbmFwc2hvdDtyZXR1cm4gbC50cmlnZ2VyRXZlbnQobmV3IEsoYSxsLnNlcmlhbGl6ZVVybCh0KSxsLnNlcmlhbGl6ZVVybChuKSxyKSksaC5jaGVja0d1YXJkcygpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGwudHJpZ2dlckV2ZW50KG5ldyBaKGEsbC5zZXJpYWxpemVVcmwodCksbC5zZXJpYWxpemVVcmwobikscixlKSkse2FwcGxpZWRVcmw6bixzbmFwc2hvdDpyLHNob3VsZEFjdGl2YXRlOmV9fSkpfSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZXx8bC5uYXZpZ2F0aW9uSWQhPT1hP09iamVjdChzLmEpKCExKTplLnNob3VsZEFjdGl2YXRlJiZoLmlzQWN0aXZhdGluZygpPyhsLnRyaWdnZXJFdmVudChuZXcgWChhLGwuc2VyaWFsaXplVXJsKHQpLGwuc2VyaWFsaXplVXJsKGUuYXBwbGllZFVybCksZS5zbmFwc2hvdCkpLGgucmVzb2x2ZURhdGEobC5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGwudHJpZ2dlckV2ZW50KG5ldyAkKGEsbC5zZXJpYWxpemVVcmwodCksbC5zZXJpYWxpemVVcmwoZS5hcHBsaWVkVXJsKSxlLnNuYXBzaG90KSksZX0pKSk6T2JqZWN0KHMuYSkoZSl9KSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fHxsLm5hdmlnYXRpb25JZCE9PWE/T2JqZWN0KHMuYSkoITEpOmwuaG9va3MuYWZ0ZXJQcmVhY3RpdmF0aW9uKHQuc25hcHNob3QpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHR8fGwubmF2aWdhdGlvbklkIT09YSlyZXR1cm4hMTt2YXIgZSxuLGkscz10LmFwcGxpZWRVcmwsdT10LnNob3VsZEFjdGl2YXRlO3JldHVybiB1P3thcHBsaWVkVXJsOnMsc3RhdGU6KGk9ZnVuY3Rpb24gdChlLG4saSl7aWYoaSYmZS5zaG91bGRSZXVzZVJvdXRlKG4udmFsdWUsaS52YWx1ZS5zbmFwc2hvdCkpeyhjPWkudmFsdWUpLl9mdXR1cmVTbmFwc2hvdD1uLnZhbHVlO3ZhciBhPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gbi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7dHJ5e2Zvcih2YXIgbz1PYmplY3Qoci5lKShpLmNoaWxkcmVuKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSl7dmFyIHM9YS52YWx1ZTtpZihlLnNob3VsZFJldXNlUm91dGUocy52YWx1ZS5zbmFwc2hvdCxuLnZhbHVlKSlyZXR1cm4gdChlLG4scyl9fWNhdGNoKHQpe3U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihsPW8ucmV0dXJuKSYmbC5jYWxsKG8pfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX1yZXR1cm4gdChlLG4pO3ZhciB1LGx9KX0oZSxuLGkpO3JldHVybiBuZXcgZWUoYyxhKX12YXIgcz1lLnJldHJpZXZlKG4udmFsdWUpO2lmKHMpe3ZhciB1PXMucm91dGU7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZihlLnZhbHVlLnJvdXRlQ29uZmlnIT09bi52YWx1ZS5yb3V0ZUNvbmZpZyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGNyZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCByb3V0ZSIpO2lmKGUuY2hpbGRyZW4ubGVuZ3RoIT09bi5jaGlsZHJlbi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhdHRhY2ggQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB3aXRoIGEgZGlmZmVyZW50IG51bWJlciBvZiBjaGlsZHJlbiIpO24udmFsdWUuX2Z1dHVyZVNuYXBzaG90PWUudmFsdWU7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDsrK3IpdChlLmNoaWxkcmVuW3JdLG4uY2hpbGRyZW5bcl0pfShuLHUpLHV9dmFyIGwsYz1uZXcgb2UobmV3IG8uYSgobD1uLnZhbHVlKS51cmwpLG5ldyBvLmEobC5wYXJhbXMpLG5ldyBvLmEobC5xdWVyeVBhcmFtcyksbmV3IG8uYShsLmZyYWdtZW50KSxuZXcgby5hKGwuZGF0YSksbC5vdXRsZXQsbC5jb21wb25lbnQsbCk7cmV0dXJuIGE9bi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pLG5ldyBlZShjLGEpfShsLnJvdXRlUmV1c2VTdHJhdGVneSwoZT10LnNuYXBzaG90KS5fcm9vdCwobj1sLnJvdXRlclN0YXRlKT9uLl9yb290OnZvaWQgMCksbmV3IHJlKGksZSkpLHNob3VsZEFjdGl2YXRlOnV9OnthcHBsaWVkVXJsOnMsc3RhdGU6bnVsbCxzaG91bGRBY3RpdmF0ZTp1fX0pKTtsLmFjdGl2YXRlUm91dGVzKGQsbC5yb3V0ZXJTdGF0ZSxsLmN1cnJlbnRVcmxUcmVlLGEsdCxlLG4saSxjLGYpfSl9LHQucHJvdG90eXBlLmFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwpe3ZhciBjLGY9dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iIT10eXBlb2YgdCYmdC5zaG91bGRBY3RpdmF0ZSYmcj09PWYubmF2aWdhdGlvbklkJiZ0LnN0YXRlKXt2YXIgbj10LnN0YXRlO2lmKGYuY3VycmVudFVybFRyZWU9dC5hcHBsaWVkVXJsLGYucmF3VXJsVHJlZT1mLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZi5jdXJyZW50VXJsVHJlZSxvKSxmLnJvdXRlclN0YXRlPW4sIWEpe3ZhciBpPWYudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5yYXdVcmxUcmVlKTtmLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKGkpfHxzP2YubG9jYXRpb24ucmVwbGFjZVN0YXRlKGksIiIse25hdmlnYXRpb25JZDpyfSk6Zi5sb2NhdGlvbi5nbyhpLCIiLHtuYXZpZ2F0aW9uSWQ6cn0pfW5ldyBZZShmLnJvdXRlUmV1c2VTdHJhdGVneSxuLGUsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KHQpfSkuYWN0aXZhdGUoZi5yb290Q29udGV4dHMpLGM9ITB9ZWxzZSBjPSExfSkudGhlbihmdW5jdGlvbigpe2M/KGYubmF2aWdhdGVkPSEwLGYubGFzdFN1Y2Nlc3NmdWxJZD1yLGYuZXZlbnRzLm5leHQobmV3IHEocixmLnNlcmlhbGl6ZVVybChpKSxmLnNlcmlhbGl6ZVVybChmLmN1cnJlbnRVcmxUcmVlKSkpLHUoITApKTooZi5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSxmLmV2ZW50cy5uZXh0KG5ldyBZKHIsZi5zZXJpYWxpemVVcmwoaSksIiIpKSx1KCExKSl9LGZ1bmN0aW9uKHQpe2lmKChhPXQpJiZhLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKWYubmF2aWdhdGVkPSEwLGYucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksZi5ldmVudHMubmV4dChuZXcgWShyLGYuc2VyaWFsaXplVXJsKGkpLHQubWVzc2FnZSkpLHUoITEpO2Vsc2V7Zi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBHKHIsZi5zZXJpYWxpemVVcmwoaSksdCkpO3RyeXt1KGYuZXJyb3JIYW5kbGVyKHQpKX1jYXRjaCh0KXtsKHQpfX12YXIgYX0pfSx0LnByb3RvdHlwZS5yZXNldFN0YXRlQW5kVXJsPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnJvdXRlclN0YXRlPXQsdGhpcy5jdXJyZW50VXJsVHJlZT1lLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSxuKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpfSx0LnByb3RvdHlwZS5yZXNldFVybFRvQ3VycmVudFVybFRyZWU9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIse25hdmlnYXRpb25JZDp0aGlzLmxhc3RTdWNjZXNzZnVsSWR9KX0sdH0oKSxZZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9dCx0aGlzLmZ1dHVyZVN0YXRlPWUsdGhpcy5jdXJyU3RhdGU9bix0aGlzLmZvcndhcmRFdmVudD1yfXJldHVybiB0LnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LG49dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCksZmUodGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZS5vdXRsZXQ7ci5kZWFjdGl2YXRlUm91dGVzKHQsaVtlXSxuKSxkZWxldGUgaVtlXX0pLHZ0KGksZnVuY3Rpb24odCxlKXtyLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbil9KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxpPWU/ZS52YWx1ZTpudWxsO2lmKHI9PT1pKWlmKHIuY29tcG9uZW50KXt2YXIgbz1uLmdldENvbnRleHQoci5vdXRsZXQpO28mJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxuKTtlbHNlIGkmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxuKX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2godC52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZSh0LGUpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KHQsZSl9LHQucHJvdG90eXBlLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTtpZihuJiZuLm91dGxldCl7dmFyIHI9bi5vdXRsZXQuZGV0YWNoKCksaT1uLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZSh0LnZhbHVlLnNuYXBzaG90LHtjb21wb25lbnRSZWY6cixyb3V0ZTp0LGNvbnRleHRzOml9KX19LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKHIpe3ZhciBpPW5lKHQpLG89dC52YWx1ZS5jb21wb25lbnQ/ci5jaGlsZHJlbjplO3Z0KGksZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG8pfSksci5vdXRsZXQmJihyLm91dGxldC5kZWFjdGl2YXRlKCksci5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpfX0sdC5wcm90b3R5cGUuYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyLmFjdGl2YXRlUm91dGVzKHQsaVt0LnZhbHVlLm91dGxldF0sbiksci5mb3J3YXJkRXZlbnQobmV3IGl0KHQudmFsdWUuc25hcHNob3QpKX0pLHQuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmZvcndhcmRFdmVudChuZXcgbnQodC52YWx1ZS5zbmFwc2hvdCkpfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxpPWU/ZS52YWx1ZTpudWxsO2lmKGZlKHIpLHI9PT1pKWlmKHIuY29tcG9uZW50KXt2YXIgbz1uLmdldE9yQ3JlYXRlQ29udGV4dChyLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSBpZihyLmNvbXBvbmVudClpZihvPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goci5zbmFwc2hvdCkpe3ZhciBhPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKHIuc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHIuc25hcHNob3QsbnVsbCksby5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoYS5jb250ZXh0cyksby5hdHRhY2hSZWY9YS5jb21wb25lbnRSZWYsby5yb3V0ZT1hLnJvdXRlLnZhbHVlLG8ub3V0bGV0JiZvLm91dGxldC5hdHRhY2goYS5jb21wb25lbnRSZWYsYS5yb3V0ZS52YWx1ZSksR2UoYS5yb3V0ZSl9ZWxzZXt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9ci5zbmFwc2hvdC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnO2lmKG4mJm4uY29tcG9uZW50KXJldHVybiBudWxsfXJldHVybiBudWxsfSgpLHU9cz9zLm1vZHVsZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6bnVsbDtvLnJvdXRlPXIsby5yZXNvbHZlcj11LG8ub3V0bGV0JiZvLm91dGxldC5hY3RpdmF0ZVdpdGgocix1KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxuKX0sdH0oKTtmdW5jdGlvbiBHZSh0KXtmZSh0LnZhbHVlKSx0LmNoaWxkcmVuLmZvckVhY2goR2UpfXZhciBRZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByPXRoaXM7dGhpcy5yb3V0ZXI9dCx0aGlzLnJvdXRlPWUsdGhpcy5sb2NhdGlvblN0cmF0ZWd5PW4sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbj10LmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7dCBpbnN0YW5jZW9mIHEmJnIudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVyTGluayIse3NldDpmdW5jdGlvbih0KXt0aGlzLmNvbW1hbmRzPW51bGwhPXQ/QXJyYXkuaXNBcnJheSh0KT90Olt0XTpbXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByZXNlcnZlUXVlcnlQYXJhbXMiLHtzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KGkuVykoKSYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKSx0aGlzLnByZXNlcnZlPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy51cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbih0LGUsbixyKXtpZigwIT09dHx8ZXx8bnx8cilyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldClyZXR1cm4hMDt2YXIgaT17c2tpcExvY2F0aW9uQ2hhbmdlOktlKHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlKSxyZXBsYWNlVXJsOktlKHRoaXMucmVwbGFjZVVybCl9O3JldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMudXJsVHJlZSxpKSwhMX0sdC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZj1mdW5jdGlvbigpe3RoaXMuaHJlZj10aGlzLmxvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmxUcmVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5jb21tYW5kcyx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxwcmVzZXJ2ZVF1ZXJ5UGFyYW1zOktlKHRoaXMucHJlc2VydmUpLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6dGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nLHByZXNlcnZlRnJhZ21lbnQ6S2UodGhpcy5wcmVzZXJ2ZUZyYWdtZW50KX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gS2UodCl7cmV0dXJuIiI9PT10fHwhIXR9dmFyIFplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vdXRsZXQ9bnVsbCx0aGlzLnJvdXRlPW51bGwsdGhpcy5yZXNvbHZlcj1udWxsLHRoaXMuY2hpbGRyZW49bmV3IFhlLHRoaXMuYXR0YWNoUmVmPW51bGx9fSgpLFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUub25DaGlsZE91dGxldENyZWF0ZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldE9yQ3JlYXRlQ29udGV4dCh0KTtuLm91dGxldD1lLHRoaXMuY29udGV4dHMuc2V0KHQsbil9LHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO2UmJihlLm91dGxldD1udWxsKX0sdC5wcm90b3R5cGUub25PdXRsZXREZWFjdGl2YXRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCx0fSx0LnByb3RvdHlwZS5vbk91dGxldFJlQXR0YWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0cz10fSx0LnByb3RvdHlwZS5nZXRPckNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO3JldHVybiBlfHwoZT1uZXcgWmUsdGhpcy5jb250ZXh0cy5zZXQodCxlKSksZX0sdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQodCl8fG51bGx9LHR9KCksJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyl7dGhpcy5wYXJlbnRDb250ZXh0cz10LHRoaXMubG9jYXRpb249ZSx0aGlzLnJlc29sdmVyPW4sdGhpcy5jaGFuZ2VEZXRlY3Rvcj1vLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBpLm0sdGhpcy5kZWFjdGl2YXRlRXZlbnRzPW5ldyBpLm0sdGhpcy5uYW1lPXJ8fGF0LHQub25DaGlsZE91dGxldENyZWF0ZWQodGhpcy5uYW1lLHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZCh0aGlzLm5hbWUpfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7dCYmdC5yb3V0ZSYmKHQuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKHQuYXR0YWNoUmVmLHQucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKHQucm91dGUsdC5yZXNvbHZlcnx8bnVsbCkpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0FjdGl2YXRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFJvdXRlIix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZURhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7dmFyIHQ9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0fSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCxlKXt0aGlzLmFjdGl2YXRlZD10LHRoaXMuX2FjdGl2YXRlZFJvdXRlPWUsdGhpcy5sb2NhdGlvbi5pbnNlcnQodC5ob3N0Vmlldyl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdCh0KX19LHQucHJvdG90eXBlLmFjdGl2YXRlV2l0aD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaXNBY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWN0aXZhdGUgYW4gYWxyZWFkeSBhY3RpdmF0ZWQgb3V0bGV0Iik7dGhpcy5fYWN0aXZhdGVkUm91dGU9dDt2YXIgbj0oZT1lfHx0aGlzLnJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0Ll9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZy5jb21wb25lbnQpLHI9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQodGhpcy5uYW1lKS5jaGlsZHJlbixpPW5ldyBKZSh0LHIsdGhpcy5sb2NhdGlvbi5pbmplY3Rvcik7dGhpcy5hY3RpdmF0ZWQ9dGhpcy5sb2NhdGlvbi5jcmVhdGVDb21wb25lbnQobix0aGlzLmxvY2F0aW9uLmxlbmd0aCxpKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9LHR9KCksSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvdXRlPXQsdGhpcy5jaGlsZENvbnRleHRzPWUsdGhpcy5wYXJlbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1vZT90aGlzLnJvdXRlOnQ9PT1YZT90aGlzLmNoaWxkQ29udGV4dHM6dGhpcy5wYXJlbnQuZ2V0KHQsZSl9LHR9KCksdG49ZnVuY3Rpb24oKXt9LGVuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbih0LGUpe3JldHVybiBlKCkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbigpe3JldHVybiBPYmplY3Qocy5hKShudWxsKX0pKX0sdH0oKSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9LHR9KCkscm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5yb3V0ZXI9dCx0aGlzLmluamVjdG9yPXIsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9aSx0aGlzLmxvYWRlcj1uZXcgVmUoZSxuLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgSihlKSl9LGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgdHQoZSkpfSl9cmV0dXJuIHQucHJvdG90eXBlLnNldFVwUHJlbG9hZGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxfSksT2JqZWN0KEMuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmVsb2FkKCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluamVjdG9yLmdldChpLnYpO3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModCx0aGlzLnJvdXRlci5jb25maWcpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnByb2Nlc3NSb3V0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbixpLG89W107dHJ5e2Zvcih2YXIgcz1PYmplY3Qoci5lKShlKSx1PXMubmV4dCgpOyF1LmRvbmU7dT1zLm5leHQoKSl7dmFyIGw9dS52YWx1ZTtpZihsLmxvYWRDaGlsZHJlbiYmIWwuY2FuTG9hZCYmbC5fbG9hZGVkQ29uZmlnKXt2YXIgYz1sLl9sb2FkZWRDb25maWc7by5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhjLm1vZHVsZSxjLnJvdXRlcykpfWVsc2UgbC5sb2FkQ2hpbGRyZW4mJiFsLmNhbkxvYWQ/by5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyh0LGwpKTpsLmNoaWxkcmVuJiZvLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKHQsbC5jaGlsZHJlbikpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXt1JiYhdS5kb25lJiYoaT1zLnJldHVybikmJmkuY2FsbChzKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIE9iamVjdChhLmEpKG8pLnBpcGUoT2JqZWN0KEQuYSkoKSxPYmplY3QoTy5hKShmdW5jdGlvbih0KXt9KSl9LHQucHJvdG90eXBlLnByZWxvYWRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGUsZnVuY3Rpb24oKXtyZXR1cm4gbi5sb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LG4ucHJvY2Vzc1JvdXRlcyh0Lm1vZHVsZSx0LnJvdXRlcyl9KSl9KX0sdH0oKSxvbj1uZXcgaS5vKCJST1VURVJfQ09ORklHVVJBVElPTiIpLGFuPW5ldyBpLm8oIlJPVVRFUl9GT1JST09UX0dVQVJEIiksc249W3ouZyx7cHJvdmlkZTprdCx1c2VDbGFzczpUdH0se3Byb3ZpZGU6cWUsdXNlRmFjdG9yeTpkbixkZXBzOltpLmcsa3QsWGUsei5nLGkucCxpLnUsaS5pLEZlLG9uLFtVZSxuZXcgaS55XSxbRGUsbmV3IGkueV1dfSxYZSx7cHJvdmlkZTpvZSx1c2VGYWN0b3J5OnBuLGRlcHM6W3FlXX0se3Byb3ZpZGU6aS51LHVzZUNsYXNzOmkuSX0scm4sbm4sZW4se3Byb3ZpZGU6b24sdXNlVmFsdWU6e2VuYWJsZVRyYWNpbmc6ITF9fV07ZnVuY3Rpb24gdW4oKXtyZXR1cm4gbmV3IGkudygiUm91dGVyIixxZSl9dmFyIGxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe31yZXR1cm4gdC5mb3JSb290PWZ1bmN0aW9uKGUsbil7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOltzbixobihlKSx7cHJvdmlkZTphbix1c2VGYWN0b3J5OmZuLGRlcHM6W1txZSxuZXcgaS55LG5ldyBpLkhdXX0se3Byb3ZpZGU6b24sdXNlVmFsdWU6bnx8e319LHtwcm92aWRlOnouaCx1c2VGYWN0b3J5OmNuLGRlcHM6W3oucCxbbmV3IGkubih6LmEpLG5ldyBpLnldLG9uXX0se3Byb3ZpZGU6dG4sdXNlRXhpc3Rpbmc6biYmbi5wcmVsb2FkaW5nU3RyYXRlZ3k/bi5wcmVsb2FkaW5nU3RyYXRlZ3k6bm59LHtwcm92aWRlOmkudyxtdWx0aTohMCx1c2VGYWN0b3J5OnVufSxbbW4se3Byb3ZpZGU6aS5kLG11bHRpOiEwLHVzZUZhY3Rvcnk6eW4sZGVwczpbbW5dfSx7cHJvdmlkZTp2bix1c2VGYWN0b3J5OmduLGRlcHM6W21uXX0se3Byb3ZpZGU6aS5iLG11bHRpOiEwLHVzZUV4aXN0aW5nOnZufV1dfX0sdC5mb3JDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W2huKGUpXX19LHR9KCk7ZnVuY3Rpb24gY24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksbi51c2VIYXNoP25ldyB6LmUodCxlKTpuZXcgei5vKHQsZSl9ZnVuY3Rpb24gZm4odCl7aWYodCl0aHJvdyBuZXcgRXJyb3IoIlJvdXRlck1vZHVsZS5mb3JSb290KCkgY2FsbGVkIHR3aWNlLiBMYXp5IGxvYWRlZCBtb2R1bGVzIHNob3VsZCB1c2UgUm91dGVyTW9kdWxlLmZvckNoaWxkKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gaG4odCl7cmV0dXJuW3twcm92aWRlOmkuYSxtdWx0aTohMCx1c2VWYWx1ZTp0fSx7cHJvdmlkZTpGZSxtdWx0aTohMCx1c2VWYWx1ZTp0fV19ZnVuY3Rpb24gZG4odCxlLG4scixpLG8sYSxzLHUsbCxjKXt2b2lkIDA9PT11JiYodT17fSk7dmFyIGY9bmV3IHFlKG51bGwsZSxuLHIsaSxvLGEseXQocykpO2lmKGwmJihmLnVybEhhbmRsaW5nU3RyYXRlZ3k9bCksYyYmKGYucm91dGVSZXVzZVN0cmF0ZWd5PWMpLHUuZXJyb3JIYW5kbGVyJiYoZi5lcnJvckhhbmRsZXI9dS5lcnJvckhhbmRsZXIpLHUubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyJiYoZi5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXI9dS5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIpLHUuZW5hYmxlVHJhY2luZyl7dmFyIGg9T2JqZWN0KEIudCkoKTtmLmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aC5sb2dHcm91cCgiUm91dGVyIEV2ZW50OiAiK3QuY29uc3RydWN0b3IubmFtZSksaC5sb2codC50b1N0cmluZygpKSxoLmxvZyh0KSxoLmxvZ0dyb3VwRW5kKCl9KX1yZXR1cm4gdS5vblNhbWVVcmxOYXZpZ2F0aW9uJiYoZi5vblNhbWVVcmxOYXZpZ2F0aW9uPXUub25TYW1lVXJsTmF2aWdhdGlvbiksdS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5JiYoZi5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksZn1mdW5jdGlvbiBwbih0KXtyZXR1cm4gdC5yb3V0ZXJTdGF0ZS5yb290fXZhciBtbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5pbmplY3Rvcj10LHRoaXMuaW5pdE5hdmlnYXRpb249ITEsdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lPW5ldyB1LmF9cmV0dXJuIHQucHJvdG90eXBlLmFwcEluaXRpYWxpemVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoei5mLFByb21pc2UucmVzb2x2ZShudWxsKSkudGhlbihmdW5jdGlvbigpe3ZhciBlPW51bGwsbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtyZXR1cm4gZT10fSkscj10LmluamVjdG9yLmdldChxZSksaT10LmluamVjdG9yLmdldChvbik7aWYodC5pc0xlZ2FjeURpc2FibGVkKGkpfHx0LmlzTGVnYWN5RW5hYmxlZChpKSllKCEwKTtlbHNlIGlmKCJkaXNhYmxlZCI9PT1pLmluaXRpYWxOYXZpZ2F0aW9uKXIuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksZSghMCk7ZWxzZXtpZigiZW5hYmxlZCIhPT1pLmluaXRpYWxOYXZpZ2F0aW9uKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbml0aWFsTmF2aWdhdGlvbiBvcHRpb25zOiAnIitpLmluaXRpYWxOYXZpZ2F0aW9uKyInIik7ci5ob29rcy5hZnRlclByZWFjdGl2YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5pbml0TmF2aWdhdGlvbj9PYmplY3Qocy5hKShudWxsKToodC5pbml0TmF2aWdhdGlvbj0hMCxlKCEwKSx0LnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUpfSxyLmluaXRpYWxOYXZpZ2F0aW9uKCl9cmV0dXJuIG59KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTGlzdGVuZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmplY3Rvci5nZXQob24pLG49dGhpcy5pbmplY3Rvci5nZXQocm4pLHI9dGhpcy5pbmplY3Rvci5nZXQocWUpLG89dGhpcy5pbmplY3Rvci5nZXQoaS5nKTt0PT09by5jb21wb25lbnRzWzBdJiYodGhpcy5pc0xlZ2FjeUVuYWJsZWQoZSk/ci5pbml0aWFsTmF2aWdhdGlvbigpOnRoaXMuaXNMZWdhY3lEaXNhYmxlZChlKSYmci5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxuLnNldFVwUHJlbG9hZGluZygpLHIucmVzZXRSb290Q29tcG9uZW50VHlwZShvLmNvbXBvbmVudFR5cGVzWzBdKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUubmV4dChudWxsKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUuY29tcGxldGUoKSl9LHQucHJvdG90eXBlLmlzTGVnYWN5RW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4ibGVnYWN5X2VuYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHx2b2lkIDA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0LnByb3RvdHlwZS5pc0xlZ2FjeURpc2FibGVkPWZ1bmN0aW9uKHQpe3JldHVybiJsZWdhY3lfZGlzYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITE9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0fSgpO2Z1bmN0aW9uIHluKHQpe3JldHVybiB0LmFwcEluaXRpYWxpemVyLmJpbmQodCl9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIHQuYm9vdHN0cmFwTGlzdGVuZXIuYmluZCh0KX12YXIgdm49bmV3IGkubygiUm91dGVyIEluaXRpYWxpemVyIil9LFpZanQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBidH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBndH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbnR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gcnR9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGl0fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIklwMFIiKSxvPW4oIkNjbkciKSxhPW51bGw7ZnVuY3Rpb24gcygpe3JldHVybiBhfXZhciB1LGw9e2NsYXNzOiJjbGFzc05hbWUiLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9LGM9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LGY9e0E6IjEiLEI6IjIiLEM6IjMiLEQ6IjQiLEU6IjUiLEY6IjYiLEc6IjciLEg6IjgiLEk6IjkiLEo6IioiLEs6IisiLE06Ii0iLE46Ii4iLE86Ii8iLCJgIjoiMCIsIlx4OTAiOiJOdW1Mb2NrIn07by5QYS5Ob2RlJiYodT1vLlBhLk5vZGUucHJvdG90eXBlLmNvbnRhaW5zfHxmdW5jdGlvbih0KXtyZXR1cm4hISgxNiZ0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKX0pO3ZhciBoLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwYXJzZSBub3QgaW1wbGVtZW50ZWQiKX0sZS5tYWtlQ3VycmVudD1mdW5jdGlvbigpe3ZhciB0O3Q9bmV3IGUsYXx8KGE9dCl9LGUucHJvdG90eXBlLmhhc1Byb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH0sZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RbZV09bn0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXX0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaTsoaT10KVtlXS5hcHBseShpLE9iamVjdChyLmQpKG4pKX0sZS5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJihjb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IodCk6Y29uc29sZS5sb2codCkpfSxlLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cD1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cEVuZD1mdW5jdGlvbigpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCYmd2luZG93LmNvbnNvbGUuZ3JvdXBFbmQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRyVG9Qcm9wTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5jYWxsKHQsZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKGUpfSxlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChlKX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpfSxlLnByb3RvdHlwZS5vbkFuZENhbmNlbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpLGZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMSl9fSxlLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dC5kaXNwYXRjaEV2ZW50KGUpfSxlLnByb3RvdHlwZS5jcmVhdGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUuY3JlYXRlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITF9LGUucHJvdG90eXBlLmlzUHJldmVudGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlZmF1bHRQcmV2ZW50ZWR8fG51bGwhPXQucmV0dXJuVmFsdWUmJiF0LnJldHVyblZhbHVlfSxlLnByb3RvdHlwZS5nZXRJbm5lckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5uZXJIVE1MfSxlLnByb3RvdHlwZS5nZXRUZW1wbGF0ZUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90LmNvbnRlbnQ6bnVsbH0sZS5wcm90b3R5cGUuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dGVySFRNTH0sZS5wcm90b3R5cGUubm9kZU5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWV9LGUucHJvdG90eXBlLm5vZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVmFsdWV9LGUucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNQcm9wZXJ0eSh0LCJjb250ZW50Iik/dC5jb250ZW50OnR9LGUucHJvdG90eXBlLmZpcnN0Q2hpbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlyc3RDaGlsZH0sZS5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sZS5wcm90b3R5cGUuY2hpbGROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGlsZE5vZGVzfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzQXNMaXN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMsbj1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl07cmV0dXJuIG59LGUucHJvdG90eXBlLmNsZWFyTm9kZXM9ZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZD1mdW5jdGlvbih0LGUsbil7dC5yZXBsYWNlQ2hpbGQoZSxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0fSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZSl9LGUucHJvdG90eXBlLmluc2VydEFsbEJlZm9yZT1mdW5jdGlvbih0LGUsbil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0Lmluc2VydEJlZm9yZShuLGUpfSl9LGUucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShuLGUubmV4dFNpYmxpbmcpfSxlLnByb3RvdHlwZS5zZXRJbm5lckhUTUw9ZnVuY3Rpb24odCxlKXt0LmlubmVySFRNTD1lfSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50fSxlLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dC50ZXh0Q29udGVudD1lfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0LnZhbHVlPWV9LGUucHJvdG90eXBlLmdldENoZWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tlZH0sZS5wcm90b3R5cGUuc2V0Q2hlY2tlZD1mdW5jdGlvbih0LGUpe3QuY2hlY2tlZD1lfSxlLnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUNvbW1lbnQodCl9LGUucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9dCxlfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50TlModCxlKX0sZS5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVUZXh0Tm9kZSh0KX0sZS5wcm90b3R5cGUuY3JlYXRlU2NyaXB0VGFnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJTQ1JJUFQiKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUodCxlKSxyfSxlLnByb3RvdHlwZS5jcmVhdGVTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4sdGhpcy5jcmVhdGVUZXh0Tm9kZSh0LGUpKSxufSxlLnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNyZWF0ZVNoYWRvd1Jvb3QoKX0sZS5wcm90b3R5cGUuZ2V0U2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zaGFkb3dSb290fSxlLnByb3RvdHlwZS5nZXRIb3N0PWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3R9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfSxlLnByb3RvdHlwZS5jbGFzc0xpc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuY2xhc3NMaXN0LDApfSxlLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LGUucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGUpfSxlLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbil7dC5zdHlsZVtlXT1ufSxlLnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbZV09IiJ9LGUucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3R5bGVbZV19LGUucHJvdG90eXBlLmhhc1N0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmdldFN0eWxlKHQsZSl8fCIiO3JldHVybiBuP3I9PW46ci5sZW5ndGg+MH0sZS5wcm90b3R5cGUudGFnTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lfSxlLnByb3RvdHlwZS5hdHRyaWJ1dGVNYXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBNYXAsbj10LmF0dHJpYnV0ZXMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uLml0ZW0ocik7ZS5zZXQoaS5uYW1lLGkudmFsdWUpfXJldHVybiBlfSxlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3Quc2V0QXR0cmlidXRlKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuLHIpe3Quc2V0QXR0cmlidXRlTlMoZSxuLHIpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt0LnJlbW92ZUF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3QucmVtb3ZlQXR0cmlidXRlTlMoZSxuKX0sZS5wcm90b3R5cGUudGVtcGxhdGVBd2FyZVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNUZW1wbGF0ZUVsZW1lbnQodCk/dGhpcy5jb250ZW50KHQpOnR9LGUucHJvdG90eXBlLmNyZWF0ZUh0bWxEb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfSxlLnByb3RvdHlwZS5nZXREZWZhdWx0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGUucHJvdG90eXBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2godCl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjB9fX0sZS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGl0bGV9LGUucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKHQsZSl7dC50aXRsZT1lfHwiIn0sZS5wcm90b3R5cGUuZWxlbWVudE1hdGNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuaXNFbGVtZW50Tm9kZSh0KSYmKHQubWF0Y2hlcyYmdC5tYXRjaGVzKGUpfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yJiZ0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfHx0LndlYmtpdE1hdGNoZXNTZWxlY3RvciYmdC53ZWJraXRNYXRjaGVzU2VsZWN0b3IoZSkpfSxlLnByb3RvdHlwZS5pc1RlbXBsYXRlRWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYiVEVNUExBVEUiPT09dC5ub2RlTmFtZX0sZS5wcm90b3R5cGUuaXNUZXh0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFfSxlLnByb3RvdHlwZS5pc0NvbW1lbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5DT01NRU5UX05PREV9LGUucHJvdG90eXBlLmlzRWxlbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaGFzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dC5zaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGUucHJvdG90eXBlLmlzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9LGUucHJvdG90eXBlLmltcG9ydEludG9Eb2M9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmltcG9ydE5vZGUodGhpcy50ZW1wbGF0ZUF3YXJlUm9vdCh0KSwhMCl9LGUucHJvdG90eXBlLmFkb3B0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuYWRvcHROb2RlKHQpfSxlLnByb3RvdHlwZS5nZXRIcmVmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0ZSgiaHJlZiIpfSxlLnByb3RvdHlwZS5nZXRFdmVudEtleT1mdW5jdGlvbih0KXt2YXIgZT10LmtleTtpZihudWxsPT1lKXtpZihudWxsPT0oZT10LmtleUlkZW50aWZpZXIpKXJldHVybiJVbmlkZW50aWZpZWQiO2Uuc3RhcnRzV2l0aCgiVSsiKSYmKGU9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnN1YnN0cmluZygyKSwxNikpLDM9PT10LmxvY2F0aW9uJiZmLmhhc093blByb3BlcnR5KGUpJiYoZT1mW2VdKSl9cmV0dXJuIGNbZV18fGV9LGUucHJvdG90eXBlLmdldEdsb2JhbEV2ZW50VGFyZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9LGUucHJvdG90eXBlLmdldEhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93Lmhpc3Rvcnl9LGUucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbn0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24odCl7dmFyIGUsbj1wfHwocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP3AuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbDtyZXR1cm4gbnVsbD09bj9udWxsOihlPW4saHx8KGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxoLnNldEF0dHJpYnV0ZSgiaHJlZiIsZSksIi8iPT09aC5wYXRobmFtZS5jaGFyQXQoMCk/aC5wYXRobmFtZToiLyIraC5wYXRobmFtZSl9LGUucHJvdG90eXBlLnJlc2V0QmFzZUVsZW1lbnQ9ZnVuY3Rpb24oKXtwPW51bGx9LGUucHJvdG90eXBlLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH0sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2Usbil9LGUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2UpfSxlLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHQpfSxlLnByb3RvdHlwZS5zdXBwb3J0c1dlYkFuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlfSxlLnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdygpOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5zdXBwb3J0c0Nvb2tpZXM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0Q29va2llPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoaS51KShkb2N1bWVudC5jb29raWUsdCl9LGUucHJvdG90eXBlLnNldENvb2tpZT1mdW5jdGlvbih0LGUpe2RvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklDb21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0sZX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGw7dHJ5e3ZhciBuPWUuY3JlYXRlRWxlbWVudCgiZGl2Iixkb2N1bWVudCk7aWYobnVsbCE9ZS5nZXRTdHlsZShuLCJhbmltYXRpb25OYW1lIikpZS5fYW5pbWF0aW9uUHJlZml4PSIiO2Vsc2UgZm9yKHZhciByPVsiV2Via2l0IiwiTW96IiwiTyIsIm1zIl0saT0wO2k8ci5sZW5ndGg7aSsrKWlmKG51bGwhPWUuZ2V0U3R5bGUobixyW2ldKyJBbmltYXRpb25OYW1lIikpe2UuX2FuaW1hdGlvblByZWZpeD0iLSIrcltpXS50b0xvd2VyQ2FzZSgpKyItIjticmVha312YXIgbz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtudWxsIT1lLmdldFN0eWxlKG4sdCkmJihlLl90cmFuc2l0aW9uRW5kPW9bdF0pfSl9Y2F0Y2godCl7ZS5fYW5pbWF0aW9uUHJlZml4PW51bGwsZS5fdHJhbnNpdGlvbkVuZD1udWxsfXJldHVybiBlfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldERpc3RyaWJ1dGVkTm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGlzdHJpYnV0ZWROb2RlcygpfSxlLnByb3RvdHlwZS5yZXNvbHZlQW5kU2V0SHJlZj1mdW5jdGlvbih0LGUsbil7dC5ocmVmPW51bGw9PW4/ZTplKyIvLi4vIitufSxlLnByb3RvdHlwZS5zdXBwb3J0c0RPTUV2ZW50cz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5zdXBwb3J0c05hdGl2ZVNoYWRvd0RPTT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkb2N1bWVudC5ib2R5LmNyZWF0ZVNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEFuaW1hdGlvblByZWZpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25QcmVmaXg/dGhpcy5fYW5pbWF0aW9uUHJlZml4OiIifSxlLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmQ/dGhpcy5fdHJhbnNpdGlvbkVuZDoiIn0sZS5wcm90b3R5cGUuc3VwcG9ydHNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fYW5pbWF0aW9uUHJlZml4JiZudWxsIT10aGlzLl90cmFuc2l0aW9uRW5kfSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc291cmNlTG9hZGVyVHlwZT1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0clRvUHJvcE1hcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F0dHJUb1Byb3BNYXA9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpKSkscD1udWxsLG09aS5kO2Z1bmN0aW9uIHkoKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX12YXIgZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faW5pdCgpLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uPXMoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rvcnk9cygpLmdldEhpc3RvcnkoKX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWZGcm9tRE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0LCExKX0sZS5wcm90b3R5cGUub25IYXNoQ2hhbmdlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQsITEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGhuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aG5hbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWFyY2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoYXNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZSh0LGUsbik6dGhpcy5sb2NhdGlvbi5oYXNoPW59LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7eSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9LGUuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOm8ubixhcmdzOlttXX1dfV19LGV9KGkucCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXQsdGhpcy5fZG9tPXMoKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkVGFnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9LHQucHJvdG90eXBlLmFkZFRhZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksdD90LnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiByJiZ0LnB1c2gobi5fZ2V0T3JDcmVhdGVFbGVtZW50KHIsZSkpLHR9LFtdKTpbXX0sdC5wcm90b3R5cGUuZ2V0VGFnPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLl9kb20ucXVlcnlTZWxlY3Rvcih0aGlzLl9kb2MsIm1ldGFbIit0KyJdIil8fG51bGx9LHQucHJvdG90eXBlLmdldFRhZ3M9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuW107dmFyIGU9dGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fZG9jLCJtZXRhWyIrdCsiXSIpO3JldHVybiBlP1tdLnNsaWNlLmNhbGwoZSk6W119LHQucHJvdG90eXBlLnVwZGF0ZVRhZz1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2U9ZXx8dGhpcy5fcGFyc2VTZWxlY3Rvcih0KTt2YXIgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZVRhZz1mdW5jdGlvbih0KXt0aGlzLnJlbW92ZVRhZ0VsZW1lbnQodGhpcy5nZXRUYWcodCkpfSx0LnByb3RvdHlwZS5yZW1vdmVUYWdFbGVtZW50PWZ1bmN0aW9uKHQpe3QmJnRoaXMuX2RvbS5yZW1vdmUodCl9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksIWUpe3ZhciBuPXRoaXMuX3BhcnNlU2VsZWN0b3IodCkscj10aGlzLmdldFRhZyhuKTtpZihyJiZ0aGlzLl9jb250YWluc0F0dHJpYnV0ZXModCxyKSlyZXR1cm4gcn12YXIgaT10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3RoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0LGkpO3ZhciBvPXRoaXMuX2RvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0aGlzLl9kb2MsImhlYWQiKVswXTtyZXR1cm4gdGhpcy5fZG9tLmFwcGVuZENoaWxkKG8saSksaX0sdC5wcm90b3R5cGUuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIG4uX2RvbS5zZXRBdHRyaWJ1dGUoZSxyLHRbcl0pfSksZX0sdC5wcm90b3R5cGUuX3BhcnNlU2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lPyJuYW1lIjoicHJvcGVydHkiO3JldHVybiBlKyc9IicrdFtlXSsnIid9LHQucHJvdG90eXBlLl9jb250YWluc0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0KS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gbi5fZG9tLmdldEF0dHJpYnV0ZShlLHIpPT09dFtyXX0pfSx0fSgpLGI9bmV3IG8ubygiVFJBTlNJVElPTl9JRCIpLF89W3twcm92aWRlOm8uZCx1c2VGYWN0b3J5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXtuLmdldChvLmUpLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1zKCk7QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KG4ucXVlcnlTZWxlY3RvckFsbChlLCJzdHlsZVtuZy10cmFuc2l0aW9uXSIpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZ2V0QXR0cmlidXRlKGUsIm5nLXRyYW5zaXRpb24iKT09PXR9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJlbW92ZSh0KX0pfSl9fSxkZXBzOltiLG0sby5wXSxtdWx0aTohMH1dLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmluaXQ9ZnVuY3Rpb24oKXtPYmplY3Qoby5ZKShuZXcgdCl9LHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe28uUGEuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciByPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiByfSxvLlBhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsVGVzdGFiaWxpdGllcygpfSxvLlBhLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxSb290RWxlbWVudHMoKX0sby5QYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KG8uUGEuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLG8uUGEuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1vLlBhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxyPSExLGk9ZnVuY3Rpb24oZSl7cj1yfHxlLDA9PS0tbiYmdChyKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShpKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgcj10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1yP3I6bj9zKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLmdldEhvc3QoZSksITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRUaXRsZSh0aGlzLl9kb2MpfSx0LnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0KXtzKCkuc2V0VGl0bGUodGhpcy5fZG9jLHQpfSx0fSgpO2Z1bmN0aW9uIE8odCxlKXsidW5kZWZpbmVkIiE9dHlwZW9mIENPTVBJTEVEJiZDT01QSUxFRHx8KChvLlBhLm5nPW8uUGEubmd8fHt9KVt0XT1lKX12YXIgQz17QXBwbGljYXRpb25SZWY6by5nLE5nWm9uZTpvLnh9LFM9InByb2JlIixFPSJjb3JlVG9rZW5zIjtmdW5jdGlvbiBrKHQpe3JldHVybiBPYmplY3Qoby5VKSh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiBPKFMsayksTyhFLE9iamVjdChyLmEpKHt9LEMsKHR8fFtdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlLm5hbWVdPWUudG9rZW4sdH0se30pKSksZnVuY3Rpb24oKXtyZXR1cm4ga319dmFyIEk9bmV3IG8ubygiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl96b25lPWUsdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQubWFuYWdlcj1ufSksdGhpcy5fcGx1Z2lucz10LnNsaWNlKCkucmV2ZXJzZSgpfXJldHVybiB0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sdC5wcm90b3R5cGUuX2ZpbmRQbHVnaW5Gb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Zm9yKHZhciBuPXRoaXMuX3BsdWdpbnMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuc3VwcG9ydHModCkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldCh0LGkpLGl9dGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgIit0KX0sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAiK3IrIiBmb3IgZXZlbnQgIitlKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxuKX0sdH0oKSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPW5ldyBTZXQ7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0eWxlc1NldC5oYXModCl8fChlLl9zdHlsZXNTZXQuYWRkKHQpLG4uYWRkKHQpKX0pLHRoaXMub25TdHlsZXNBZGRlZChuKX0sdC5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldEFsbFN0eWxlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9LHR9KCksTT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9zdE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5oZWFkKSxufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLl9hZGRTdHlsZXNUb0hvc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnRleHRDb250ZW50PXQsbi5fc3R5bGVOb2Rlcy5hZGQoZS5hcHBlbmRDaGlsZChyKSl9KX0sZS5wcm90b3R5cGUuYWRkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LHQpLHRoaXMuX2hvc3ROb2Rlcy5hZGQodCl9LGUucHJvdG90eXBlLnJlbW92ZUhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5faG9zdE5vZGVzLmRlbGV0ZSh0KX0sZS5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl9hZGRTdHlsZXNUb0hvc3QodCxuKX0pfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0eWxlTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcygpLnJlbW92ZSh0KX0pfSxlfShQKSxOPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxSPS8lQ09NUCUvZyxEPSJfbmdob3N0LSVDT01QJSIsTD0iX25nY29udGVudC0lQ09NUCUiO2Z1bmN0aW9uIEYodCxlLG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO0FycmF5LmlzQXJyYXkoaSk/Rih0LGksbik6KGk9aS5yZXBsYWNlKFIsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBWKHQpe3JldHVybiBmdW5jdGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fXZhciBVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IHoodCl9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIG8uTy5FbXVsYXRlZDp2YXIgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgcSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG47Y2FzZSBvLk8uTmF0aXZlOmNhc2Ugby5PLlNoYWRvd0RvbTpyZXR1cm4gbmV3IFkodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LHQsZSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhlLmlkKSl7dmFyIHI9RihlLmlkLGUuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHIpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sdH0oKSx6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5bZV0sdCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0JiZ0Lmluc2VydEJlZm9yZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QmJnQucmVtb3ZlQ2hpbGQoZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdUaGUgc2VsZWN0b3IgIicrdCsnIiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50cycpO3JldHVybiBlLnRleHRDb250ZW50PSIiLGV9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixyKXtpZihyKXtlPXIrIjoiK2U7dmFyIGk9TltyXTtpP3Quc2V0QXR0cmlidXRlTlMoaSxlLG4pOnQuc2V0QXR0cmlidXRlKGUsbil9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe2lmKG4pe3ZhciByPU5bbl07cj90LnJlbW92ZUF0dHJpYnV0ZU5TKHIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUobisiOiIrZSl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixyKXtyJm8uRC5EYXNoQ2FzZT90LnN0eWxlLnNldFByb3BlcnR5KGUsbixyJm8uRC5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOnQuc3R5bGVbZV09bn0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe24mby5ELkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe0goZSwicHJvcGVydHkiKSx0W2VdPW59LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dC5ub2RlVmFsdWU9ZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gSChlLCJsaXN0ZW5lciIpLCJzdHJpbmciPT10eXBlb2YgdD90aGlzLmV2ZW50TWFuYWdlci5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxWKG4pKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxWKG4pKX0sdH0oKSxCPSJAIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIEgodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1CKXRocm93IG5ldyBFcnJvcigiRm91bmQgdGhlIHN5bnRoZXRpYyAiK2UrIiAiK3QrJy4gUGxlYXNlIGluY2x1ZGUgZWl0aGVyICJCcm93c2VyQW5pbWF0aW9uc01vZHVsZSIgb3IgIk5vb3BBbmltYXRpb25zTW9kdWxlIiBpbiB5b3VyIGFwcGxpY2F0aW9uLicpfXZhciBXLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7aS5jb21wb25lbnQ9cjt2YXIgbz1GKHIuaWQsci5zdHlsZXMsW10pO3JldHVybiBuLmFkZFN0eWxlcyhvKSxpLmNvbnRlbnRBdHRyPUwucmVwbGFjZShSLHIuaWQpLGkuaG9zdEF0dHI9RC5yZXBsYWNlKFIsci5pZCksaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5hcHBseVRvSG9zdD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLGUsdGhpcy5ob3N0QXR0ciwiIil9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSxuKXt2YXIgcj10LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LmNhbGwodGhpcyxlLG4pO3JldHVybiB0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLHIsdGhpcy5jb250ZW50QXR0ciwiIikscn0sZX0oeiksWT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBhPXQuY2FsbCh0aGlzLGUpfHx0aGlzO2Euc2hhcmVkU3R5bGVzSG9zdD1uLGEuaG9zdEVsPXIsYS5jb21wb25lbnQ9aSxhLnNoYWRvd1Jvb3Q9aS5lbmNhcHN1bGF0aW9uPT09by5PLlNoYWRvd0RvbT9yLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KTpyLmNyZWF0ZVNoYWRvd1Jvb3QoKSxhLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdChhLnNoYWRvd1Jvb3QpO2Zvcih2YXIgcz1GKGkuaWQsaS5zdHlsZXMsW10pLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsLnRleHRDb250ZW50PXNbdV0sYS5zaGFkb3dSb290LmFwcGVuZENoaWxkKGwpfXJldHVybiBhfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5vZGVPclNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzLmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZENoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHQucHJvdG90eXBlLmluc2VydEJlZm9yZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdCh0LnByb3RvdHlwZS5wYXJlbnROb2RlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSkpKX0sZX0oeiksRz0idW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmUuX19zeW1ib2xfX3x8ZnVuY3Rpb24odCl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrdH0sUT1HKCJhZGRFdmVudExpc3RlbmVyIiksSz1HKCJyZW1vdmVFdmVudExpc3RlbmVyIiksWj17fSxYPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiOyJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZVtHKCJCTEFDS19MSVNURURfRVZFTlRTIildJiYoVz17fSk7dmFyICQ9ZnVuY3Rpb24odCl7cmV0dXJuISFXJiZXLmhhc093blByb3BlcnR5KHQpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPVpbdC50eXBlXTtpZihlKXt2YXIgbj10aGlzW2VdO2lmKG4pe3ZhciByPVt0XTtpZigxPT09bi5sZW5ndGgpcmV0dXJuKGE9blswXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLHIpOmEuaGFuZGxlci5hcHBseSh0aGlzLHIpO2Zvcih2YXIgaT1uLnNsaWNlKCksbz0wO288aS5sZW5ndGgmJiEwIT09dFtYXTtvKyspe3ZhciBhOyhhPWlbb10pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxyKTphLmhhbmRsZXIuYXBwbHkodGhpcyxyKX19fX0sdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ubmdab25lPW4sciYmT2JqZWN0KGkucikocil8fG8ucGF0Y2hFdmVudCgpLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUucGF0Y2hFdmVudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRXZlbnQmJkV2ZW50JiZFdmVudC5wcm90b3R5cGUmJiFFdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKXt2YXIgdD1FdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPUV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMmJih0aGlzW1hdPSEwKSx0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW47aWYoIXRbUV18fG8ueC5pc0luQW5ndWxhclpvbmUoKSYmISQoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSk7ZWxzZXt2YXIgYT1aW2VdO2F8fChhPVpbZV09RygiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIHM9dFthXSx1PXMmJnMubGVuZ3RoPjA7c3x8KHM9dFthXT1bXSk7dmFyIGw9JChlKT9ab25lLnJvb3Q6Wm9uZS5jdXJyZW50O2lmKDA9PT1zLmxlbmd0aClzLnB1c2goe3pvbmU6bCxoYW5kbGVyOml9KTtlbHNle2Zvcih2YXIgYz0hMSxmPTA7ZjxzLmxlbmd0aDtmKyspaWYoc1tmXS5oYW5kbGVyPT09aSl7Yz0hMDticmVha31jfHxzLnB1c2goe3pvbmU6bCxoYW5kbGVyOml9KX11fHx0W1FdKGUsSiwhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSl9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10W0tdO2lmKCFyKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7dmFyIGk9WltlXSxvPWkmJnRbaV07aWYoIW8pcmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0LFtlLG4sITFdKTtmb3IodmFyIGE9ITEscz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uaGFuZGxlcj09PW4pe2E9ITAsby5zcGxpY2UocywxKTticmVha31hPzA9PT1vLmxlbmd0aCYmci5hcHBseSh0LFtlLEosITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KGopLGV0PXtwYW46ITAscGFuc3RhcnQ6ITAscGFubW92ZTohMCxwYW5lbmQ6ITAscGFuY2FuY2VsOiEwLHBhbmxlZnQ6ITAscGFucmlnaHQ6ITAscGFudXA6ITAscGFuZG93bjohMCxwaW5jaDohMCxwaW5jaHN0YXJ0OiEwLHBpbmNobW92ZTohMCxwaW5jaGVuZDohMCxwaW5jaGNhbmNlbDohMCxwaW5jaGluOiEwLHBpbmNob3V0OiEwLHByZXNzOiEwLHByZXNzdXA6ITAscm90YXRlOiEwLHJvdGF0ZXN0YXJ0OiEwLHJvdGF0ZW1vdmU6ITAscm90YXRlZW5kOiEwLHJvdGF0ZWNhbmNlbDohMCxzd2lwZTohMCxzd2lwZWxlZnQ6ITAsc3dpcGVyaWdodDohMCxzd2lwZXVwOiEwLHN3aXBlZG93bjohMCx0YXA6ITB9LG50PW5ldyBvLm8oIkhhbW1lckdlc3R1cmVDb25maWciKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fY29uZmlnPW4saS5jb25zb2xlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFldC5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpJiYhdGhpcy5pc0N1c3RvbUV2ZW50KHQpfHwhd2luZG93LkhhbW1lciYmKHRoaXMuY29uc29sZS53YXJuKCJIYW1tZXIuanMgaXMgbm90IGxvYWRlZCwgY2FuIG5vdCBiaW5kICciK3QrIicgZXZlbnQuIiksMSkpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9dGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3ZhciBvPXIuX2NvbmZpZy5idWlsZEhhbW1lcih0KSxhPWZ1bmN0aW9uKHQpe2kucnVuR3VhcmRlZChmdW5jdGlvbigpe24odCl9KX07cmV0dXJuIG8ub24oZSxhKSxmdW5jdGlvbigpe3JldHVybiBvLm9mZihlLGEpfX0pfSxlLnByb3RvdHlwZS5pc0N1c3RvbUV2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9LGV9KGopLG90PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLGF0PXthbHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5fSxjb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmN0cmxLZXl9LG1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWV0YUtleX0sc2hpZnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hpZnRLZXl9fSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9ZS5wYXJzZUV2ZW50TmFtZSh0KX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5wYXJzZUV2ZW50TmFtZShuKSxvPWUuZXZlbnRDYWxsYmFjayhpLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzKCkub25BbmRDYW5jZWwodCxpLmRvbUV2ZW50TmFtZSxvKX0pfSxlLnBhcnNlRXZlbnROYW1lPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9bi5zaGlmdCgpO2lmKDA9PT1uLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7dmFyIGk9ZS5fbm9ybWFsaXplS2V5KG4ucG9wKCkpLG89IiI7aWYob3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksbys9dCsiLiIpfSksbys9aSwwIT1uLmxlbmd0aHx8MD09PWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXt9O3JldHVybiBhLmRvbUV2ZW50TmFtZT1yLGEuZnVsbEtleT1vLGF9LGUuZ2V0RXZlbnRGdWxsS2V5PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49cygpLmdldEV2ZW50S2V5KHQpO3JldHVybiIgIj09PShuPW4udG9Mb3dlckNhc2UoKSk/bj0ic3BhY2UiOiIuIj09PW4mJihuPSJkb3QiKSxvdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPW4mJigwLGF0W3JdKSh0KSYmKGUrPXIrIi4iKX0pLGUrPW59LGUuZXZlbnRDYWxsYmFjaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe2UuZ2V0RXZlbnRGdWxsS2V5KGkpPT09dCYmci5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7cmV0dXJuIG4oaSl9KX19LGUuX25vcm1hbGl6ZUtleT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fSxlfShqKSx1dD1mdW5jdGlvbigpe30sbHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiBudWxsO3N3aXRjaCh0KXtjYXNlIG8uRi5OT05FOnJldHVybiBlO2Nhc2Ugby5GLkhUTUw6cmV0dXJuIGUgaW5zdGFuY2VvZiBmdD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiSFRNTCIpLE9iamVjdChvLkNhKSh0aGlzLl9kb2MsU3RyaW5nKGUpKSk7Y2FzZSBvLkYuU1RZTEU6cmV0dXJuIGUgaW5zdGFuY2VvZiBodD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU3R5bGUiKSxPYmplY3Qoby5EYSkoZSkpO2Nhc2Ugby5GLlNDUklQVDppZihlIGluc3RhbmNlb2YgZHQpcmV0dXJuIGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlNjcmlwdCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2Ugby5GLlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIG10fHxlIGluc3RhbmNlb2YgcHQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLE9iamVjdChvLkVhKShTdHJpbmcoZSkpKTtjYXNlIG8uRi5SRVNPVVJDRV9VUkw6aWYoZSBpbnN0YW5jZW9mIG10KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJSZXNvdXJjZVVSTCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9fSxlLnByb3RvdHlwZS5jaGVja05vdFNhZmVWYWx1ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBjdCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVpcmVkIGEgc2FmZSAiK2UrIiwgZ290IGEgIit0LmdldFR5cGVOYW1lKCkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFVybD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtdCh0KX0sZX0odXQpLGN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogIit0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykifSx0fSgpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIkhUTUwifSxlfShjdCksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU3R5bGUifSxlfShjdCksZHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU2NyaXB0In0sZX0oY3QpLHB0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlVSTCJ9LGV9KGN0KSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJSZXNvdXJjZVVSTCJ9LGV9KGN0KSx5dD1be3Byb3ZpZGU6by56LHVzZVZhbHVlOmkuc30se3Byb3ZpZGU6by5BLHVzZVZhbHVlOmZ1bmN0aW9uKCl7ZC5tYWtlQ3VycmVudCgpLHcuaW5pdCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6aS5wLHVzZUNsYXNzOmcsZGVwczpbbV19LHtwcm92aWRlOm0sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZGVwczpbXX1dLGd0PU9iamVjdChvLlEpKG8uWCwiYnJvd3NlciIseXQpO2Z1bmN0aW9uIHZ0KCl7cmV0dXJuIG5ldyBvLmx9dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXJldHVybiB0LndpdGhTZXJ2ZXJUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6by5jLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOmIsdXNlRXhpc3Rpbmc6by5jfSxfXX19LHR9KCk7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd30sWm44RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigicHNXMCIpLGk9bigibUNoRiIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksT2JqZWN0KHIuYSkoaS5hLHQpfX0sYWVjZDpmdW5jdGlvbihtb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIFByZUluaXRMb2FkZXJTZXJ2aWNlfSk7dmFyIF9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fPV9fd2VicGFja19yZXF1aXJlX18oInJmMzAiKSxfZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX189X193ZWJwYWNrX3JlcXVpcmVfXygiQXl0UiIpLF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJDY25HIiksX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJ0L05hIiksUHJlSW5pdExvYWRlclNlcnZpY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQcmVJbml0TG9hZGVyU2VydmljZSh0KXt0aGlzLmh0dHA9dH1yZXR1cm4gUHJlSW5pdExvYWRlclNlcnZpY2UucHJvdG90eXBlLmxvYWRQYWdlQXRJbml0PWZ1bmN0aW9uKCl7aWYoMCE9X2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fLmEucHJvZHVjdGlvbil7Y29uc29sZS5sb2coIklQTCA6IEluaXRpYWwgcGFnZSBsb2FkZXIgW0FQUF9JTklUSUFMSVpFUl0iKTt2YXIgY3VyclVybD13aW5kb3cubG9jYXRpb24uaHJlZixyZWdleD1uZXcgUmVnRXhwKCIjXFwvLioiKSxtYXRjaEFycmF5PWN1cnJVcmwubWF0Y2gocmVnZXgpLGN1cnJQYXRoPW1hdGNoQXJyYXlbMF0uc2xpY2UoMSk7Y29uc29sZS5sb2coIlVSTCA6ICIrY3VyclVybCksY29uc29sZS5sb2coIlBhdGggOiAiK2N1cnJQYXRoKTt2YXIgcmVjb3JkPV9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLmEuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWdlTmFtZT09Y3VyclBhdGh9KTtpZih2b2lkIDAhPXJlY29yZCl7aWYoY29uc29sZS5sb2coIklQTCA6IENvcnJlc3BvbmRpbmcgcmVjb3JkIGZvdW5kIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKSwwPT1yZWNvcmQuY2h1bmtMb2FkZWQpe3ZhciByZXE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKHJlcS5vcGVuKCJHRVQiLHJlY29yZC5jaHVua1VSTCwhMSkscmVxLnNlbmQobnVsbCksMjAwPT09cmVxLnN0YXR1cyl7dmFyIGRlY29kZWREYXRhPWF0b2IocmVxLnJlc3BvbnNlVGV4dCk7ZXZhbChkZWNvZGVkRGF0YSkscmVjb3JkLmNodW5rTG9hZGVkPSEwLGNvbnNvbGUubG9nKCJJUEwgOiBMb2FkZWQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpfWVsc2UgY29uc29sZS5sb2coIklQTCA6IEVycm9yIHdoaWxlIGdldHRpbmcgZGF0YTogJWQgKCVzKSIscmVxLnN0YXR1cyxyZXEuc3RhdHVzVGV4dCl9fWVsc2UgY29uc29sZS5sb2coIklQTCA6IE5vIHJlY29yZCBmb3VuZCwgcGFnZSBjYW4ndCBiZSBsb2FkZWQgaW5pdGlhbGx5LlxuSVBMIDogVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIHBhdGggaXMgbm90IHBhcnQgb2YgdGhlIG1haW4gY2h1bmsgdGhhdCBpcyBlbWJlZGRlZCBpbiB0aGUgaHRtbCBwYWdlIil9fSxQcmVJbml0TG9hZGVyU2VydmljZS5uZ0luamVjdGFibGVEZWY9X2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLlIoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByZUluaXRMb2FkZXJTZXJ2aWNlKF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXy5WKF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uYykpfSx0b2tlbjpQcmVJbml0TG9hZGVyU2VydmljZSxwcm92aWRlZEluOiJyb290In0pLFByZUluaXRMb2FkZXJTZXJ2aWNlfSgpfSxiN21XOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsImFyZ3VtZW50IG91dCBvZiByYW5nZSIpfHx0aGlzO3JldHVybiBuLm5hbWU9IkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gci5iKGUsdCksZX0oRXJyb3IpfSxibmU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJpc2J5Iiksbz1uKCIyQmRqIiksYT1uKCI2N1kvIik7ZnVuY3Rpb24gcyh0LGUsbix1KXtyZXR1cm4gT2JqZWN0KG8uYSkobikmJih1PW4sbj12b2lkIDApLHU/cyh0LGUsbikucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGkuYSkodCk/dS5hcHBseSh2b2lkIDAsdCk6dSh0KX0pKTpuZXcgci5hKGZ1bmN0aW9uKHIpeyFmdW5jdGlvbiB0KGUsbixyLGksbyl7dmFyIGE7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUV2ZW50TGlzdGVuZXJ9KGUpKXt2YXIgcz1lO2UuYWRkRXZlbnRMaXN0ZW5lcihuLHIsbyksYT1mdW5jdGlvbigpe3JldHVybiBzLnJlbW92ZUV2ZW50TGlzdGVuZXIobixyLG8pfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmImZ1bmN0aW9uIj09dHlwZW9mIHQub2ZmfShlKSl7dmFyIHU9ZTtlLm9uKG4sciksYT1mdW5jdGlvbigpe3JldHVybiB1Lm9mZihuLHIpfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlTGlzdGVuZXJ9KGUpKXt2YXIgbD1lO2UuYWRkTGlzdGVuZXIobixyKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIGwucmVtb3ZlTGlzdGVuZXIobixyKX19ZWxzZXtpZighZXx8IWUubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7Zm9yKHZhciBjPTAsZj1lLmxlbmd0aDtjPGY7YysrKXQoZVtjXSxuLHIsaSxvKX1pLmFkZChhKX0odCxlLGZ1bmN0aW9uKHQpe3IubmV4dChhcmd1bWVudHMubGVuZ3RoPjE/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTp0KX0scixuKX0pfU9iamVjdH0sYnVqdDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1uKCJDY25HIiksaT0obigiVW9kSCIpLG4oIklwMFIiKSxuKCJGenFjIiksbigiV2Y0cCIpKSxvPW4oImRXWmciKSxhPW4oIndGdzEiKSxzPShuKCJsTEFQIiksci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lO29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtcmFpc2VkLWJ1dHRvbnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtc3Ryb2tlZC1idXR0b257Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6MzRweH0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAwIDAgMCByZ2JhKDAsMCwwLC4yKSwwIDAgMCAwIHJnYmEoMCwwLDAsLjE0KSwwIDAgMCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLC4yKSwwIDEycHggMTdweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1taW5pLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtbWluaS1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWljb24tYnV0dG9uIGl7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpLGJhY2tncm91bmQtY29sb3IgLjJzIGN1YmljLWJlemllciguMzUsMCwuMjUsMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX19Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257b3V0bGluZTpzb2xpZCAxcHh9fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gci5pYigyLFtyLmViKDQwMjY1MzE4NCwxLHtyaXBwbGU6MH0pLCh0KCkoKSxyLk9hKDEsMCxudWxsLG51bGwsMSwic3BhbiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXdyYXBwZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksci5YYShudWxsLDApLCh0KCkoKSxyLk9hKDMsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tcmlwcGxlIG1hdC1yaXBwbGUiXSxbIm1hdFJpcHBsZSIsIiJdXSxbWzIsIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixudWxsXSxbMiwibWF0LXJpcHBsZS11bmJvdW5kZWQiLG51bGxdXSxudWxsLG51bGwsbnVsbCxudWxsKSksci5OYSg0LDIxMjk5MixbWzEsNF1dLDAsaS5xLFtyLmssci54LG8uYSxbMixpLmddLFsyLGEuYV1dLHtjZW50ZXJlZDpbMCwiY2VudGVyZWQiXSxkaXNhYmxlZDpbMSwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsyLCJ0cmlnZ2VyIl19LG51bGwpLCh0KCkoKSxyLk9hKDUsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNCwwLG4uaXNJY29uQnV0dG9uLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMywwLG4uaXNSb3VuZEJ1dHRvbnx8bi5pc0ljb25CdXR0b24sci5ZYShlLDQpLnVuYm91bmRlZCl9KX19LGNybmQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXsiLi9zdXBwb3J0LXNlY3Rpb24vc3VwcG9ydC1zZWN0aW9uLWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiTjRscCIsMF0sIi4vdGVhbS1yb3N0ZXIvdGVhbS1yb3N0ZXItbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJUa1lrIiwxXSwiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiZ0RqYyIsMl19O2Z1bmN0aW9uIGkodCl7dmFyIGU9clt0XTtyZXR1cm4gZT9uLmUoZVsxXSkudGhlbihmdW5jdGlvbigpe3JldHVybiBuKGVbMF0pfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICInK3QrJyIuJyk7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfSl9aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLmlkPSJjcm5kIix0LmV4cG9ydHM9aX0sZFdaZzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByLGk9bigiQ2NuRyIpLG89bigiSXAwUiIpLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsJiZJbnRsLnY4QnJlYWtJdGVyYXRvcixzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9wbGF0Zm9ybUlkPXQsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9PYmplY3Qoby5xKSh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFhKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShpLnosOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB1KCl7aWYobnVsbD09ciYmInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiByPSEwfX0pKX1maW5hbGx5e3I9cnx8ITF9cmV0dXJuIHJ9dmFyIGw9ZnVuY3Rpb24oKXt9fSxlRGtQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBEfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigibjZnRyIpLG89bigicUFsUyIpLGE9bigiSXAwUiIpLHM9bigibXJTRyIpLHU9bigiSzlJYSIpLGw9bigicHVnVCIpLGM9bigiNmJsRiIpLGY9bigidDlmWiIpLGg9bigiZFdaZyIpLGQ9bigiNGMzNSIpLHA9KG4oIllTaDIiKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0fSgpKSxtPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5zY3JvbGxTdHJhdGVneT1uZXcgcCx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHQmJk9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGVbbl09dFtuXX0pfX0oKTtmdW5jdGlvbiB5KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIGcodCxlKXtpZigic3RhcnQiIT09ZSYmImVuZCIhPT1lJiYiY2VudGVyIiE9PWUpdGhyb3cgRXJyb3IoIkNvbm5lY3RlZFBvc2l0aW9uOiBJbnZhbGlkICIrdCsnICInK2UrJyIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLicpfXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9T2JqZWN0KGkuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9T2JqZWN0KGkuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNFbmFibGVkKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10aGlzLl9kb2N1bWVudC5ib2R5LG49dC5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiIscj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsdC5zdHlsZS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LHQuc3R5bGUudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIix3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1uLGUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9cn19LHQucHJvdG90eXBlLl9jYW5CZUVuYWJsZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTt2YXIgdD10aGlzLl9kb2N1bWVudC5ib2R5LGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gdC5zY3JvbGxIZWlnaHQ+ZS5oZWlnaHR8fHQuc2Nyb2xsV2lkdGg+ZS53aWR0aH0sdH0oKTtmdW5jdGlvbiBiKCl7cmV0dXJuIEVycm9yKCJTY3JvbGwgc3RyYXRlZ3kgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZC4iKX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2NvbmZpZz1yLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2RldGFjaD1mdW5jdGlvbigpe2kuZGlzYWJsZSgpLGkuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmaS5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiBpLl9vdmVybGF5UmVmLmRldGFjaCgpfSl9fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7aWYodGhpcy5fb3ZlcmxheVJlZil0aHJvdyBiKCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pe3ZhciBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGU9dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdC5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50Ll9jb25maWcudGhyZXNob2xkP3QuX2RldGFjaCgpOnQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCk7ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYm90dG9tPGUudG9wfHx0LnRvcD5lLmJvdHRvbXx8dC5yaWdodDxlLmxlZnR8fHQubGVmdD5lLnJpZ2h0fSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9wPGUudG9wfHx0LmJvdHRvbT5lLmJvdHRvbXx8dC5sZWZ0PGUubGVmdHx8dC5yaWdodD5lLnJpZ2h0fSl9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IGIoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9ufHwodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQodGhpcy5fY29uZmlnP3RoaXMuX2NvbmZpZy5zY3JvbGxUaHJvdHRsZTowKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZih0Ll9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdC5fY29uZmlnJiZ0Ll9jb25maWcuYXV0b0Nsb3NlKXt2YXIgZT10Ll9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxyPW4ud2lkdGgsaT1uLmhlaWdodDt3KGUsW3t3aWR0aDpyLGhlaWdodDppLGJvdHRvbTppLHJpZ2h0OnIsdG9wOjAsbGVmdDowfV0pJiYodC5kaXNhYmxlKCksdC5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9vdmVybGF5UmVmLmRldGFjaCgpfSkpfX0pKX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX0sdH0oKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ub29wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwfSx0aGlzLmNsb3NlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgXyhpLl9zY3JvbGxEaXNwYXRjaGVyLGkuX25nWm9uZSxpLl92aWV3cG9ydFJ1bGVyLHQpfSx0aGlzLmJsb2NrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KGkuX3ZpZXdwb3J0UnVsZXIsaS5fZG9jdW1lbnQpfSx0aGlzLnJlcG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPKGkuX3Njcm9sbERpc3BhdGNoZXIsaS5fdmlld3BvcnRSdWxlcixpLl9uZ1pvbmUsdCl9LHRoaXMuX2RvY3VtZW50PXJ9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKG8uYyksT2JqZWN0KHIuVikoby5lKSxPYmplY3Qoci5WKShyLngpLE9iamVjdChyLlYpKGEuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZlLl9hdHRhY2hlZE92ZXJsYXlzW2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoLTFdLl9rZXlkb3duRXZlbnRzLm5leHQodCl9LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShhLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jdW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2NvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX0sdC5wcm90b3R5cGUuZ2V0Q29udGFpbmVyRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fSx0LnByb3RvdHlwZS5fY3JlYXRlQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb250YWluZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9dH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoYS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fbmdab25lPWksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPW8sdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyB1LmEsdGhpcy5fYXR0YWNobWVudHM9bmV3IHUuYSx0aGlzLl9kZXRhY2htZW50cz1uZXcgdS5hLHRoaXMuX2tleWRvd25FdmVudHM9bmV3IHUuYSxyLnNjcm9sbFN0cmF0ZWd5JiZyLnNjcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvdmVybGF5RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYmFja2Ryb3BFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhvc3RFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5lbmFibGUoKSx0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5oYXNBdHRhY2hlZCgpJiZlLnVwZGF0ZVBvc2l0aW9uKCl9KSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksbn0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNBdHRhY2hlZCgpKXt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO3ZhciB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH19LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnROb2RlJiYodGhpcy5faG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX2hvc3Q9bnVsbCksdGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hdHRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZGV0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmtleWRvd25FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ30sdC5wcm90b3R5cGUudXBkYXRlUG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHQpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9LHQucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudERpcmVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXsodGhpcy5fY29uZmlnLndpZHRofHwwPT09dGhpcy5fY29uZmlnLndpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUud2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLndpZHRoKSksKHRoaXMuX2NvbmZpZy5oZWlnaHR8fDA9PT10aGlzLl9jb25maWcuaGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUuaGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5oZWlnaHQpKSwodGhpcy5fY29uZmlnLm1pbldpZHRofHwwPT09dGhpcy5fY29uZmlnLm1pbldpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWluV2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLm1pbldpZHRoKSksKHRoaXMuX2NvbmZpZy5taW5IZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWluSGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWluSGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5taW5IZWlnaHQpKSwodGhpcy5fY29uZmlnLm1heFdpZHRofHwwPT09dGhpcy5fY29uZmlnLm1heFdpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4V2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLm1heFdpZHRoKSksKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWF4SGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4SGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpKX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG49ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChuLDUwMCl9KX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzc2VzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNsYXNzTGlzdDtPYmplY3QoaS5hKShlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24/ci5hZGQodCk6ci5yZW1vdmUodCl9KX0sdH0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuX2lzUHVzaGVkPSExLHRoaXMuX2NhblB1c2g9ITAsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9ITAsdGhpcy5fcG9zaXRpb25Mb2NrZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49MCx0aGlzLnNjcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IHUuYSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249bC5hLkVNUFRZLHRoaXMuX29mZnNldFg9MCx0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPTAsdGhpcy5wb3NpdGlvbkNoYW5nZXM9Yy5hLmNyZWF0ZShmdW5jdGlvbih0KXt2YXIgZT1pLl9wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKHQpO3JldHVybiBpLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMrKyxmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxpLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMtLX19KSx0aGlzLnNldE9yaWdpbih0KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwb3NpdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX292ZXJsYXlSZWYmJnQhPT10aGlzLl9vdmVybGF5UmVmKXRocm93IEVycm9yKCJUaGlzIHBvc2l0aW9uIHN0cmF0ZWd5IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYW4gb3ZlcmxheSIpO3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KCl9KX0sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZighKHRoaXMuX2lzRGlzcG9zZWR8fHRoaXMuX3BsYXRmb3JtJiYhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSlpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO2Vsc2V7dGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Zvcih2YXIgdCxlPXRoaXMuX29yaWdpblJlY3Qsbj10aGlzLl9vdmVybGF5UmVjdCxyPXRoaXMuX3ZpZXdwb3J0UmVjdCxpPVtdLG89MCxhPXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucztvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSx1PXRoaXMuX2dldE9yaWdpblBvaW50KGUscyksbD10aGlzLl9nZXRPdmVybGF5UG9pbnQodSxuLHMpLGM9dGhpcy5fZ2V0T3ZlcmxheUZpdChsLG4scixzKTtpZihjLmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24ocyx1KTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKGMsbCxyKT9pLnB1c2goe3Bvc2l0aW9uOnMsb3JpZ2luOnUsb3ZlcmxheVJlY3Q6bixib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHUscyl9KTooIXR8fHQub3ZlcmxheUZpdC52aXNpYmxlQXJlYTxjLnZpc2libGVBcmVhKSYmKHQ9e292ZXJsYXlGaXQ6YyxvdmVybGF5UG9pbnQ6bCxvcmlnaW5Qb2ludDp1LHBvc2l0aW9uOnMsb3ZlcmxheVJlY3Q6bn0pfWlmKGkubGVuZ3RoKXtmb3IodmFyIGY9bnVsbCxoPS0xLGQ9MCxwPWk7ZDxwLmxlbmd0aDtkKyspe3ZhciBtPXBbZF0seT1tLmJvdW5kaW5nQm94UmVjdC53aWR0aCptLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKG0ucG9zaXRpb24ud2VpZ2h0fHwxKTt5PmgmJihoPXksZj1tKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGYucG9zaXRpb24sZi5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbih0LnBvc2l0aW9uLHQub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KX19LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuZGV0YWNoKCksdGhpcy5fYm91bmRpbmdCb3g9bnVsbCx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwKX0sdC5wcm90b3R5cGUucmVhcHBseUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9pc0Rpc3Bvc2VkJiYoIXRoaXMuX3BsYXRmb3JtfHx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpKXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpO3ZhciB0PXRoaXMuX2xhc3RQb3NpdGlvbnx8dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zWzBdLGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9fSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGxhYmxlcz10fSx0LnByb3RvdHlwZS53aXRoUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUud2l0aFZpZXdwb3J0TWFyZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoR3Jvd0FmdGVyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2dyb3dBZnRlck9wZW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoUHVzaD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2NhblB1c2g9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9LHQucHJvdG90eXBlLnNldE9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQgaW5zdGFuY2VvZiByLms/dC5uYXRpdmVFbGVtZW50OnQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRYPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFRyYW5zZm9ybU9yaWdpbk9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9LHQucHJvdG90eXBlLl9nZXRPcmlnaW5Qb2ludD1mdW5jdGlvbih0LGUpe3ZhciBuO2lmKCJjZW50ZXIiPT1lLm9yaWdpblgpbj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7dmFyIHI9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxpPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7bj0ic3RhcnQiPT1lLm9yaWdpblg/cjppfXJldHVybnt4Om4seToiY2VudGVyIj09ZS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWUub3JpZ2luWT90LnRvcDp0LmJvdHRvbX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5UG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiByPSJjZW50ZXIiPT1uLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PW4ub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCx7eDp0Lngrcix5OnQueSsoImNlbnRlciI9PW4ub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PW4ub3ZlcmxheVk/MDotZS5oZWlnaHQpfX0sdC5wcm90b3R5cGUuX2dldE92ZXJsYXlGaXQ9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC54LG89dC55LGE9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxzPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7YSYmKGkrPWEpLHMmJihvKz1zKTt2YXIgdT0wLW8sbD1vK2UuaGVpZ2h0LW4uaGVpZ2h0LGM9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS53aWR0aCwwLWksaStlLndpZHRoLW4ud2lkdGgpLGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS5oZWlnaHQsdSxsKSxoPWMqZjtyZXR1cm57dmlzaWJsZUFyZWE6aCxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDplLndpZHRoKmUuaGVpZ2h0PT09aCxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6Zj09PWUuaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmM9PWUud2lkdGh9fSx0LnByb3RvdHlwZS5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucz1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zKXt2YXIgcj1uLmJvdHRvbS1lLnksaT1uLnJpZ2h0LWUueCxvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluSGVpZ2h0LGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aDtyZXR1cm4odC5maXRzSW5WaWV3cG9ydFZlcnRpY2FsbHl8fG51bGwhPW8mJm88PXIpJiYodC5maXRzSW5WaWV3cG9ydEhvcml6b250YWxseXx8bnVsbCE9YSYmYTw9aSl9fSx0LnByb3RvdHlwZS5fcHVzaE92ZXJsYXlPblNjcmVlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPU1hdGgubWF4KHQueCtlLndpZHRoLW4ucmlnaHQsMCksaT1NYXRoLm1heCh0LnkrZS5oZWlnaHQtbi5ib3R0b20sMCksbz1NYXRoLm1heChuLnRvcC10LnksMCksYT1NYXRoLm1heChuLmxlZnQtdC54LDApO3JldHVybnt4OnQueCsoZS53aWR0aDw9bi53aWR0aD9hfHwtcjpuLmxlZnQtdC54KSx5OnQueSsoZS5oZWlnaHQ8PW4uaGVpZ2h0P298fC1pOm4udG9wLXQueSl9fSx0LnByb3RvdHlwZS5fYXBwbHlQb3NpdGlvbj1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3NldFRyYW5zZm9ybU9yaWdpbih0KSx0aGlzLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcyhlLHQpLHRoaXMuX3NldEJvdW5kaW5nQm94U3R5bGVzKGUsdCksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPjApe3ZhciBuPW5ldyBmdW5jdGlvbih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfSh0LHRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSk7dGhpcy5fcG9zaXRpb25DaGFuZ2VzLm5leHQobil9dGhpcy5faXNJbml0aWFsUmVuZGVyPSExfSx0LnByb3RvdHlwZS5fc2V0VHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKXt2YXIgZSxuPXRoaXMuX2JvdW5kaW5nQm94LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpLHI9dC5vdmVybGF5WTtlPSJjZW50ZXIiPT09dC5vdmVybGF5WD8iY2VudGVyIjp0aGlzLl9pc1J0bCgpPyJzdGFydCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiOiJzdGFydCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV0uc3R5bGUudHJhbnNmb3JtT3JpZ2luPWUrIiAiK3J9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG8sYSxzLHU9dGhpcy5fdmlld3BvcnRSZWN0LGw9dGhpcy5faXNSdGwoKTtpZigidG9wIj09PWUub3ZlcmxheVkpcj10Lnksbj11LmJvdHRvbS10Lnk7ZWxzZSBpZigiYm90dG9tIj09PWUub3ZlcmxheVkpbj11LmhlaWdodC0oaT11LmhlaWdodC10LnkrMip0aGlzLl92aWV3cG9ydE1hcmdpbikrdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZXt2YXIgYz1NYXRoLm1pbih1LmJvdHRvbS10LnksdC55LXUubGVmdCksZj10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodDtyPXQueS1jLChuPTIqYyk+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihyPXQueS1mLzIpfWlmKCJlbmQiPT09ZS5vdmVybGF5WCYmIWx8fCJzdGFydCI9PT1lLm92ZXJsYXlYJiZsKXM9dS5yaWdodC10LngrdGhpcy5fdmlld3BvcnRNYXJnaW4sbz10LngtdS5sZWZ0O2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFsfHwiZW5kIj09PWUub3ZlcmxheVgmJmwpYT10Lngsbz11LnJpZ2h0LXQueDtlbHNle2M9TWF0aC5taW4odS5yaWdodC10LngsdC54LXUudG9wKTt2YXIgaD10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoO2E9dC54LWMsKG89MipjKT5oJiYhdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGE9dC54LWgvMil9cmV0dXJue3RvcDpyLGxlZnQ6YSxib3R0b206aSxyaWdodDpzLHdpZHRoOm8saGVpZ2h0Om59fSx0LnByb3RvdHlwZS5fc2V0Qm91bmRpbmdCb3hTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTt0aGlzLl9pc0luaXRpYWxSZW5kZXJ8fHRoaXMuX2dyb3dBZnRlck9wZW58fChuLmhlaWdodD1NYXRoLm1pbihuLmhlaWdodCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodCksbi53aWR0aD1NYXRoLm1pbihuLndpZHRoLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGgpKTt2YXIgcj17fTtpZih0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCkpci50b3A9ci5sZWZ0PSIwIixyLmJvdHRvbT1yLnJpZ2h0PSIiLHIud2lkdGg9ci5oZWlnaHQ9IjEwMCUiO2Vsc2V7dmFyIG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQsYT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoO3IuaGVpZ2h0PU9iamVjdChpLmMpKG4uaGVpZ2h0KSxyLnRvcD1PYmplY3QoaS5jKShuLnRvcCksci5ib3R0b209T2JqZWN0KGkuYykobi5ib3R0b20pLHIud2lkdGg9T2JqZWN0KGkuYykobi53aWR0aCksci5sZWZ0PU9iamVjdChpLmMpKG4ubGVmdCksci5yaWdodD1PYmplY3QoaS5jKShuLnJpZ2h0KSxyLmFsaWduSXRlbXM9ImNlbnRlciI9PT1lLm92ZXJsYXlYPyJjZW50ZXIiOiJlbmQiPT09ZS5vdmVybGF5WD8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixyLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiPT09ZS5vdmVybGF5WT8iY2VudGVyIjoiYm90dG9tIj09PWUub3ZlcmxheVk/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsbyYmKHIubWF4SGVpZ2h0PU9iamVjdChpLmMpKG8pKSxhJiYoci5tYXhXaWR0aD1PYmplY3QoaS5jKShhKSl9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT1uLEkodGhpcy5fYm91bmRpbmdCb3guc3R5bGUscil9LHQucHJvdG90eXBlLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKCl7SSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIwIixsZWZ0OiIwIixyaWdodDoiMCIsYm90dG9tOiIwIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pfSx0LnByb3RvdHlwZS5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbigpe0kodGhpcy5fcGFuZS5zdHlsZSx7dG9wOiIiLGxlZnQ6IiIsYm90dG9tOiIiLHJpZ2h0OiIiLHBvc2l0aW9uOiIifSl9LHQucHJvdG90eXBlLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3RoaXMuX2hhc0V4YWN0UG9zaXRpb24oKT8oSShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVkoZSx0KSksSShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVgoZSx0KSkpOm4ucG9zaXRpb249InN0YXRpYyI7dmFyIHI9IiIsaT10aGlzLl9nZXRPZmZzZXQoZSwieCIpLG89dGhpcy5fZ2V0T2Zmc2V0KGUsInkiKTtpJiYocis9InRyYW5zbGF0ZVgoIitpKyJweCkgIiksbyYmKHIrPSJ0cmFuc2xhdGVZKCIrbysicHgpIiksbi50cmFuc2Zvcm09ci50cmltKCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heEhlaWdodCYmKG4ubWF4SGVpZ2h0PSIiKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMmJnRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4V2lkdGgmJihuLm1heFdpZHRoPSIiKSxJKHRoaXMuX3BhbmUuc3R5bGUsbil9LHQucHJvdG90eXBlLl9nZXRFeGFjdE92ZXJsYXlZPWZ1bmN0aW9uKHQsZSl7dmFyIG49e3RvcDpudWxsLGJvdHRvbTpudWxsfSxyPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKHI9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihyLHRoaXMuX292ZXJsYXlSZWN0KSksImJvdHRvbSI9PT10Lm92ZXJsYXlZP24uYm90dG9tPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtKHIueSt0aGlzLl9vdmVybGF5UmVjdC5oZWlnaHQpKyJweCI6bi50b3A9T2JqZWN0KGkuYykoci55KSxufSx0LnByb3RvdHlwZS5fZ2V0RXhhY3RPdmVybGF5WD1mdW5jdGlvbih0LGUpe3ZhciBuPXtsZWZ0Om51bGwscmlnaHQ6bnVsbH0scj10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihyPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4ocix0aGlzLl9vdmVybGF5UmVjdCkpLCJyaWdodCI9PSh0aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIpP24ucmlnaHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLShyLngrdGhpcy5fb3ZlcmxheVJlY3Qud2lkdGgpKyJweCI6bi5sZWZ0PU9iamVjdChpLmMpKHIueCksbn0sdC5wcm90b3R5cGUuX2dldFNjcm9sbFZpc2liaWxpdHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5zY3JvbGxhYmxlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOngodCxuKSxpc09yaWdpbk91dHNpZGVWaWV3OncodCxuKSxpc092ZXJsYXlDbGlwcGVkOngoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzp3KGUsbil9fSx0LnByb3RvdHlwZS5fc3VidHJhY3RPdmVyZmxvd3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtTWF0aC5tYXgoZSwwKX0sdCl9LHQucHJvdG90eXBlLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOm4udG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6bi5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0Om4ubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTpuLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX0sdC5wcm90b3R5cGUuX2lzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfSx0LnByb3RvdHlwZS5faGFzRXhhY3RQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnN8fHRoaXMuX2lzUHVzaGVkfSx0LnByb3RvdHlwZS5fZ2V0T2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfSx0LnByb3RvdHlwZS5fdmFsaWRhdGVQb3NpdGlvbnM9ZnVuY3Rpb24oKXtpZighdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmxlbmd0aCl0aHJvdyBFcnJvcigiRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5OiBBdCBsZWFzdCBvbmUgcG9zaXRpb24gaXMgcmVxdWlyZWQuIik7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7Zygib3JpZ2luWCIsdC5vcmlnaW5YKSx5KCJvcmlnaW5ZIix0Lm9yaWdpblkpLGcoIm92ZXJsYXlYIix0Lm92ZXJsYXlYKSx5KCJvdmVybGF5WSIsdC5vdmVybGF5WSl9KX0sdH0oKTtmdW5jdGlvbiBJKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dmFyIEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvKXt0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25TdHJhdGVneT1uZXcgVChuLHIsaSxvKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSkud2l0aFZpZXdwb3J0TWFyZ2luKDApLHRoaXMud2l0aEZhbGxiYWNrUG9zaXRpb24odCxlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNSdGwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvblBvc2l0aW9uQ2hhbmdlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHQpLHRoaXMuX2RpcmVjdGlvbiYmKHQuc2V0RGlyZWN0aW9uKHRoaXMuX2RpcmVjdGlvbiksdGhpcy5fZGlyZWN0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfSx0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpfSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl9LHQucHJvdG90eXBlLndpdGhGYWxsYmFja1Bvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW5ldyBmdW5jdGlvbih0LGUsbixyKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9cix0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX0odCxlLG4scik7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5wdXNoKGkpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9LHQucHJvdG90eXBlLndpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5zZXREaXJlY3Rpb24odCk6dGhpcy5fZGlyZWN0aW9uPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRYKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WSh0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhQb3NpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LnNsaWNlKCksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUuc2V0T3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0KSx0aGlzfSx0fSgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5fanVzdGlmeUNvbnRlbnQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIifXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiKX0sdC5wcm90b3R5cGUudG9wPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmJvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUucmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfSx0LnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfSx0LnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfSx0LnByb3RvdHlwZS5jZW50ZXJIb3Jpem9udGFsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuY2VudGVyVmVydGljYWxseT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpe3ZhciB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LnN0eWxlLG49dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD0iMTAwJSI9PT1uLndpZHRoPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPSIxMDAlIj09PW4uaGVpZ2h0PyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9dGhpcy5fcmlnaHRPZmZzZXQsZS5qdXN0aWZ5Q29udGVudD0iMTAwJSI9PT1uLndpZHRoPyJmbGV4LXN0YXJ0Ijp0aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9IjEwMCUiPT09bi5oZWlnaHQ/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSx0fSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9wbGF0Zm9ybT1ufXJldHVybiB0LnByb3RvdHlwZS5nbG9iYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGp9LHQucHJvdG90eXBlLmNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IEEoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLmZsZXhpYmxlQ29ubmVjdGVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUKHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKG8uZSksT2JqZWN0KHIuVikoYS5kKSxPYmplY3Qoci5WKShoLmEsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxNPTAsTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzLHUpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9cix0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9aSx0aGlzLl9pbmplY3Rvcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9dX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxyPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxpPW5ldyBtKHQpO3JldHVybiBpLmRpcmVjdGlvbj1pLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IGsocixlLG4saSx0aGlzLl9uZ1pvbmUsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLHRoaXMuX2RvY3VtZW50KX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfSx0LnByb3RvdHlwZS5fY3JlYXRlUGFuZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuaWQ9ImNkay1vdmVybGF5LSIrTSsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX0sdC5wcm90b3R5cGUuX2NyZWF0ZUhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9LHQucHJvdG90eXBlLl9jcmVhdGVQb3J0YWxPdXRsZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoci5nKSksbmV3IGQuYih0LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IpfSx0fSgpLFI9bmV3IHIubygiY2RrLWNvbm5lY3RlZC1vdmVybGF5LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIEQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBMPWZ1bmN0aW9uKCl7fX0sZWloczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9e2U6e319fSxnSTNCOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiNmJsRiIpLGk9bigiVDFETSIpLG89bigiaXNieSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIU9iamVjdChvLmEpKHQpJiZ0LXBhcnNlRmxvYXQodCkrMT49MH12YXIgcz1uKCJua1k3Iik7ZnVuY3Rpb24gdSh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIG89LTE7cmV0dXJuIGEoZSk/bz1OdW1iZXIoZSk8MT8xOk51bWJlcihlKTpPYmplY3Qocy5hKShlKSYmKG49ZSksT2JqZWN0KHMuYSkobil8fChuPWkuYSksbmV3IHIuYShmdW5jdGlvbihlKXt2YXIgcj1hKHQpP3Q6K3Qtbi5ub3coKTtyZXR1cm4gbi5zY2hlZHVsZShsLHIse2luZGV4OjAscGVyaW9kOm8sc3Vic2NyaWJlcjplfSl9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxyPXQuc3Vic2NyaWJlcjtpZihyLm5leHQoZSksIXIuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIHIuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSl9LGdJY1k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4oIm1yU0ciKTt2YXIgcj1uKCJDY25HIik7bigiVk5yNCIpLG4oIjAvdVEiKSxuKCI2N1kvIiksbigiWllqdCIpO3ZhciBpPW5ldyByLm8oIk5nVmFsdWVBY2Nlc3NvciIpfSxoOURxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyl8fHRoaXN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHRoaXN9LGV9KG4oInB1Z1QiKS5hKTtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1lLHIud29yaz1uLHIucGVuZGluZz0hMSxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDt2YXIgbj10aGlzLmlkLHI9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPW4mJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQocixuLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9dGhpcy5pZHx8dGhpcy5yZXF1ZXN0QXN5bmNJZChyLHRoaXMuaWQsZSksdGhpc30sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxzZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxuKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPTApLG51bGwhPT1uJiZ0aGlzLmRlbGF5PT09biYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7Y2xlYXJJbnRlcnZhbChlKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7dmFyIG49dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKG4pcmV0dXJuIG47ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9LGUucHJvdG90eXBlLl9leGVjdXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEscj12b2lkIDA7dHJ5e3RoaXMud29yayh0KX1jYXRjaCh0KXtuPSEwLHI9ISF0JiZ0fHxuZXcgRXJyb3IodCl9aWYobilyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLHJ9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaWQsZT10aGlzLnNjaGVkdWxlcixuPWUuYWN0aW9ucyxyPW4uaW5kZXhPZih0aGlzKTt0aGlzLndvcms9bnVsbCx0aGlzLnN0YXRlPW51bGwsdGhpcy5wZW5kaW5nPSExLHRoaXMuc2NoZWR1bGVyPW51bGwsLTEhPT1yJiZuLnNwbGljZShyLDEpLG51bGwhPXQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZSx0LG51bGwpKSx0aGlzLmRlbGF5PW51bGx9LGV9KGkpfSxoVVdQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuKCJtclNHIiksbigiQ2NuRyIpLG4oIklwMFIiKSxuKCJPemZCIik7dmFyIHI9ZnVuY3Rpb24oKXt9fSxpTHhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj0hMSxpPXtQcm9taXNlOnZvaWQgMCxzZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyh0KXtyPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIHJ9fX0saWhZWTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciByPWZ1bmN0aW9uKCl7fSxpPWZ1bmN0aW9uKCl7fSxvPSIqIjtmdW5jdGlvbiBhKHQsZSl7cmV0dXJue3R5cGU6NyxuYW1lOnQsZGVmaW5pdGlvbnM6ZSxvcHRpb25zOnt9fX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjQsc3R5bGVzOmUsdGltaW5nczp0fX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjMsc3RlcHM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MixzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gYyh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBmKHQsZSxuKXtyZXR1cm57dHlwZTowLG5hbWU6dCxzdHlsZXM6ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx7dHlwZToxLGV4cHI6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGQodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLHt0eXBlOjksb3B0aW9uczp0fX1mdW5jdGlvbiBwKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCkse3R5cGU6MTEsc2VsZWN0b3I6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIG0odCl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4odCl9dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9dCtlfXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS50cmlnZ2VyTWljcm90YXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczttKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX0sdC5wcm90b3R5cGUuX29uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDt2YXIgbj0wLHI9MCxpPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/bShmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysrcj09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK2k9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksdj0iISJ9LGlzYnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofX0sbExBUDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBPfSk7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bigiSzlJYSIpLGE9bigicHVnVCIpLHM9bigiRi9YTCIpLHU9bigiWVNoMiIpLGw9bigieE15RSIpLGM9bigiR2kzaSIpLGY9bigiVm5ELyIpLGg9bigiNjdZLyIpLGQ9bigidDlmWiIpLHA9bigibXJTRyIpLG09bigiZFdaZyIpO24oIm42Z0ciKTt2YXIgeT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9vcmlnaW49InByb2dyYW0iLGV9cmV0dXJuIE9iamVjdChwLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0Rm9jdXNPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9LGUucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW09ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbS5jYWxsKHRoaXMsZSksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uZm9jdXModGhpcy5fb3JpZ2luKX0sZX0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5faXRlbXM9dCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9LTEsdGhpcy5fd3JhcD0hMSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW09bmV3IG8uYSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249YS5hLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX3NraXBQcmVkaWNhdGVGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlZH0sdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IG8uYSx0aGlzLmNoYW5nZT1uZXcgby5hLHQgaW5zdGFuY2VvZiBpLkImJnQuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aWYoZS5fYWN0aXZlSXRlbSl7dmFyIG49dC50b0FycmF5KCkuaW5kZXhPZihlLl9hY3RpdmVJdGVtKTtuPi0xJiZuIT09ZS5fYWN0aXZlSXRlbUluZGV4JiYoZS5fYWN0aXZlSXRlbUluZGV4PW4pfX0pfXJldHVybiB0LnByb3RvdHlwZS5za2lwUHJlZGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9za2lwUHJlZGljYXRlRm49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoV3JhcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwPSEwLHRoaXN9LHQucHJvdG90eXBlLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fdmVydGljYWw9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFR5cGVBaGVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHZvaWQgMD09PXQmJih0PTIwMCksdGhpcy5faXRlbXMubGVuZ3RoJiZ0aGlzLl9pdGVtcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldExhYmVsfSkpdGhyb3cgRXJyb3IoIkxpc3RLZXlNYW5hZ2VyIGl0ZW1zIGluIHR5cGVhaGVhZCBtb2RlIG11c3QgaW1wbGVtZW50IHRoZSBgZ2V0TGFiZWxgIG1ldGhvZC4iKTtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5wdXNoKHQpfSksT2JqZWN0KGMuYSkodCksT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjB9KSxPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUuX2dldEl0ZW1zQXJyYXkoKSxyPTE7cjxuLmxlbmd0aCsxO3IrKyl7dmFyIGk9KGUuX2FjdGl2ZUl0ZW1JbmRleCtyKSVuLmxlbmd0aCxvPW5baV07aWYoIWUuX3NraXBQcmVkaWNhdGVGbihvKSYmMD09PW8uZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKHQpKXtlLnNldEFjdGl2ZUl0ZW0oaSk7YnJlYWt9fWUuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc30sdC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVJdGVtSW5kZXg7dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX0sdC5wcm90b3R5cGUub25LZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZTtzd2l0Y2goZSl7Y2FzZSB1Lms6cmV0dXJuIHZvaWQgdGhpcy50YWJPdXQubmV4dCgpO2Nhc2UgdS5iOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5sOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIHUuaTppZigibHRyIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5nOmlmKCJsdHIiPT09dGhpcy5faG9yaXpvbnRhbCl7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCh0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49dS5hJiZlPD11Lm18fGU+PXUubiYmZTw9dS5oKSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVJdGVtSW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbUluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlSXRlbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldEZpcnN0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9LHQucHJvdG90eXBlLnNldExhc3RJdGVtQWN0aXZlPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfSx0LnByb3RvdHlwZS5zZXROZXh0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwP3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoMSl9LHQucHJvdG90eXBlLnNldFByZXZpb3VzSXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9LHQucHJvdG90eXBlLnVwZGF0ZUFjdGl2ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW1JbmRleD1uLHRoaXMuX2FjdGl2ZUl0ZW09ZVtuXX0sdC5wcm90b3R5cGUudXBkYXRlQWN0aXZlSXRlbUluZGV4PWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUl0ZW1CeURlbHRhPWZ1bmN0aW9uKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSW5XcmFwTW9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49MTtuPD1lLmxlbmd0aDtuKyspe3ZhciByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCpuK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19LHQucHJvdG90eXBlLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlPWZ1bmN0aW9uKHQpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0LHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSXRlbUJ5SW5kZXg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoblt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oblt0XSk7KWlmKCFuW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fSx0LnByb3RvdHlwZS5fZ2V0SXRlbXNBcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIGkuQj90aGlzLl9pdGVtcy50b0FycmF5KCk6dGhpcy5faXRlbXN9LHR9KCkpLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3BsYXRmb3JtPXR9cmV0dXJuIHQucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfSx0LnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDbGllbnRSZWN0cyYmdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KHQpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKHQpLnZpc2liaWxpdHl9LHQucHJvdG90eXBlLmlzVGFiYmFibGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTt2YXIgZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZnJhbWVFbGVtZW50fWNhdGNoKHQpe3JldHVybiBudWxsfX0odC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpO2lmKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigtMT09PWIoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGk9Yih0KTtpZih0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpcmV0dXJuLTEhPT1pO2lmKCJpZnJhbWUiPT09cilyZXR1cm4hMTtpZigiYXVkaW8iPT09cil7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LKXJldHVybiEwfWlmKCJ2aWRlbyI9PT1yKXtpZighdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJnRoaXMuX3BsYXRmb3JtLlRSSURFTlQpcmV0dXJuITE7aWYodGhpcy5fcGxhdGZvcm0uQkxJTkt8fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gpcmV0dXJuITB9cmV0dXJuKCJvYmplY3QiIT09cnx8IXRoaXMuX3BsYXRmb3JtLkJMSU5LJiYhdGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmISh0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPSJpbnB1dCI9PT1lJiZ0LnR5cGU7cmV0dXJuInRleHQiPT09bnx8InBhc3N3b3JkIj09PW58fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9KHQpKSYmdC50YWJJbmRleD49MH0sdC5wcm90b3R5cGUuaXNGb2N1c2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiFmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImlucHV0Ij09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSh0KSYmImhpZGRlbiI9PXQudHlwZX0odCkmJihmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8ImJ1dHRvbiI9PT1lfHwidGV4dGFyZWEiPT09ZX0odCl8fGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iYSI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJnQuaGFzQXR0cmlidXRlKCJocmVmIil9KHQpfHx0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fHYodCkpfSh0KSYmIXRoaXMuaXNEaXNhYmxlZCh0KSYmdGhpcy5pc1Zpc2libGUodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB2KHQpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09dC50YWJJbmRleClyZXR1cm4hMTt2YXIgZT10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4iLTMyNzY4IiE9ZSYmISghZXx8aXNOYU4ocGFyc2VJbnQoZSwxMCkpKX1mdW5jdGlvbiBiKHQpe2lmKCF2KHQpKXJldHVybiBudWxsO3ZhciBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dm9pZCAwPT09aSYmKGk9ITEpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9lbmFibGVkPSEwLGl8fHRoaXMuYXR0YWNoQW5jaG9ycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fc3RhcnRBbmNob3IudGFiSW5kZXg9dGhpcy5fZW5kQW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl9lbmRBbmNob3ImJnRoaXMuX2VuZEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbmRBbmNob3IpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsfSx0LnByb3RvdHlwZS5hdHRhY2hBbmNob3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCkpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3QuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGZ1bmN0aW9uKCl7dC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbGVtZW50LnBhcmVudE5vZGUmJih0Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuX3N0YXJ0QW5jaG9yLHQuX2VsZW1lbnQpLHQuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodC5fZW5kQW5jaG9yLHQuX2VsZW1lbnQubmV4dFNpYmxpbmcpKX0pfSx0LnByb3RvdHlwZS5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0luaXRpYWxFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuX2dldFJlZ2lvbkJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltjZGstZm9jdXMtcmVnaW9uLSIrdCsiXSwgW2Nka0ZvY3VzUmVnaW9uIit0KyJdLCBbY2RrLWZvY3VzLSIrdCsiXSIpLG49MDtuPGUubGVuZ3RoO24rKyllW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLSIrdCk/Y29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pOmVbbl0uaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtcmVnaW9uLSIrdCkmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtcmVnaW9uLSIrdCsiJywgdXNlICdjZGtGb2N1c1JlZ2lvbiIrdCsiJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wLiIsZVtuXSk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtyZXR1cm4gdD8odC5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy1pbml0aWFsIikmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtaW5pdGlhbCcsIHVzZSAnY2RrRm9jdXNJbml0aWFsJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wIix0KSx0LmZvY3VzKCksITApOnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpfSx0LnByb3RvdHlwZS5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH0sdC5wcm90b3R5cGUuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbbl0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2NyZWF0ZUFuY2hvcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHR9LHQucHJvdG90eXBlLl9leGVjdXRlT25TdGFibGU9ZnVuY3Rpb24odCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZC5hKSgxKSkuc3Vic2NyaWJlKHQpfSx0fSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgXyh0LHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGUpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShnKSxPYmplY3QoaS5WKShpLngpLE9iamVjdChpLlYpKHIuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fb3JpZ2luPW51bGwsdGhpcy5fd2luZG93Rm9jdXNlZD0hMSx0aGlzLl9lbGVtZW50SW5mbz1uZXcgTWFwLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9LHRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudD0wfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT0hMSksIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCk7aWYodGhpcy5fZWxlbWVudEluZm8uaGFzKHQpKXt2YXIgcj10aGlzLl9lbGVtZW50SW5mby5nZXQodCk7cmV0dXJuIHIuY2hlY2tDaGlsZHJlbj1lLHIuc3ViamVjdC5hc09ic2VydmFibGUoKX12YXIgaT17dW5saXN0ZW46ZnVuY3Rpb24oKXt9LGNoZWNrQ2hpbGRyZW46ZSxzdWJqZWN0Om5ldyBvLmF9O3RoaXMuX2VsZW1lbnRJbmZvLnNldCh0LGkpLHRoaXMuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpO3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBuLl9vbkZvY3VzKGUsdCl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uQmx1cihlLHQpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsYSwhMCksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix1LCEwKX0pLGkudW5saXN0ZW49ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixhLCEwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHUsITApfSxpLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXModCksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKHQpLHRoaXMuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpKX0sdC5wcm90b3R5cGUuZm9jdXNWaWE9ZnVuY3Rpb24odCxlKXt0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnN0b3BNb25pdG9yaW5nKG4pfSl9LHQucHJvdG90eXBlLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXt2YXIgZT1mdW5jdGlvbigpe3QuX2xhc3RUb3VjaFRhcmdldD1udWxsLHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSxuPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0fHx0Ll9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSgibW91c2UiKX0scj1mdW5jdGlvbihlKXtudWxsIT10Ll90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHQuX3RvdWNoVGltZW91dElkKSx0Ll9sYXN0VG91Y2hUYXJnZXQ9ZS50YXJnZXQsdC5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9sYXN0VG91Y2hUYXJnZXQ9bnVsbH0sNjUwKX0saT1mdW5jdGlvbigpe3QuX3dpbmRvd0ZvY3VzZWQ9ITAsdC5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll93aW5kb3dGb2N1c2VkPSExfSl9O3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsciwhT2JqZWN0KG0uYykoKXx8e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsaSl9KSx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixyLCFPYmplY3QobS5jKSgpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixpKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0pfSl9LHQucHJvdG90eXBlLl93YXNDYXVzZWRCeVRvdWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O3JldHVybiB0aGlzLl9sYXN0VG91Y2hUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlIGluc3RhbmNlb2YgTm9kZSYmKGU9PT10aGlzLl9sYXN0VG91Y2hUYXJnZXR8fGUuY29udGFpbnModGhpcy5fbGFzdFRvdWNoVGFyZ2V0KSl9LHQucHJvdG90eXBlLl9vbkZvY3VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO2lmKG4mJihuLmNoZWNrQ2hpbGRyZW58fGU9PT10LnRhcmdldCkpe3ZhciByPXRoaXMuX29yaWdpbjtyfHwocj10aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOnRoaXMuX3dhc0NhdXNlZEJ5VG91Y2godCk/InRvdWNoIjoicHJvZ3JhbSIpLHRoaXMuX3NldENsYXNzZXMoZSxyKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxyKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49cn19LHQucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7IW58fG4uY2hlY2tDaGlsZHJlbiYmdC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZS5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxudWxsKSl9LHQucHJvdG90eXBlLl9lbWl0T3JpZ2luPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Lm5leHQoZSl9KX0sdC5wcm90b3R5cGUuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpezE9PSsrdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50JiZ0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpfSx0LnByb3RvdHlwZS5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShpLngpLE9iamVjdChpLlYpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBPKHQpe3JldHVybiAwPT09dC5idXR0b25zfX0sbHpsajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9KG4oIkZWU3kiKSxuKCJGenFjIiksbigiV2Y0cCIpLHIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWNhcmR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlfVtkaXI9cnRsXSAubWF0LWNhcmQgLm1hdC1kaXZpZGVyLWhvcml6b250YWx7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFsLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOnN0YXRpYzttYXJnaW46MH0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jYXJke291dGxpbmU6c29saWQgMXB4fX0ubWF0LWNhcmQtYWN0aW9ucywubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLXRpdGxle2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi0xNnB4O21hcmdpbi1yaWdodDotMTZweDtwYWRkaW5nOjhweCAwfS5tYXQtY2FyZC1hY3Rpb25zLWFsaWduLWVuZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtY2FyZC1pbWFnZXt3aWR0aDpjYWxjKDEwMCUgKyA0OHB4KTttYXJnaW46MCAtMjRweCAxNnB4IC0yNHB4fS5tYXQtY2FyZC14bC1pbWFnZXt3aWR0aDoyNDBweDtoZWlnaHQ6MjQwcHg7bWFyZ2luOi04cHh9Lm1hdC1jYXJkLWZvb3RlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4IC0yNHB4IC0yNHB4fS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbnttYXJnaW46MCA0cHh9Lm1hdC1jYXJkLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tYXQtY2FyZC1oZWFkZXItdGV4dHttYXJnaW46MCA4cHh9Lm1hdC1jYXJkLWF2YXRhcntoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Lm1hdC1jYXJkLWxnLWltYWdlLC5tYXQtY2FyZC1tZC1pbWFnZSwubWF0LWNhcmQtc20taW1hZ2V7bWFyZ2luOi04cHggMH0ubWF0LWNhcmQtdGl0bGUtZ3JvdXB7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbjowIC04cHh9Lm1hdC1jYXJkLXNtLWltYWdle3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHh9Lm1hdC1jYXJkLW1kLWltYWdle3dpZHRoOjExMnB4O2hlaWdodDoxMTJweH0ubWF0LWNhcmQtbGctaW1hZ2V7d2lkdGg6MTUycHg7aGVpZ2h0OjE1MnB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LWNhcmR7cGFkZGluZzoyNHB4IDE2cHh9Lm1hdC1jYXJkLWFjdGlvbnN7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgMzJweCk7bWFyZ2luOjE2cHggLTE2cHh9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe21hcmdpbjowfS5tYXQtY2FyZC14bC1pbWFnZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1oZWFkZXJ7bWFyZ2luOi04cHggMCAwIDB9Lm1hdC1jYXJkLWZvb3RlcnttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHh9fS5tYXQtY2FyZC1jb250ZW50PjpmaXJzdC1jaGlsZCwubWF0LWNhcmQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubWF0LWNhcmQtY29udGVudD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3RlciksLm1hdC1jYXJkPjpsYXN0LWNoaWxkOm5vdCgubWF0LWNhcmQtZm9vdGVyKXttYXJnaW4tYm90dG9tOjB9Lm1hdC1jYXJkLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTI0cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC1hY3Rpb25zOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMTZweDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uOmZpcnN0LWNoaWxkLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKSwubWF0LWNhcmQtdGl0bGU6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDotNHB4fS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXN1YnRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotOHB4fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5pYigyLFtyLlhhKG51bGwsMCksci5YYShudWxsLDEpXSxudWxsLG51bGwpfXZhciBhPXIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIHModCl7cmV0dXJuIHIuaWIoMixbci5YYShudWxsLDApLCh0KCkoKSxyLk9hKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuWGEobnVsbCwxKSxyLlhhKG51bGwsMildLG51bGwsbnVsbCl9fSxtQ2hGOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxtVnNhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiQ2NuRyIpO24oIjRjMzUiKSxuKCJpaFlZIiksbigibXJTRyIpLG4oImxMQVAiKSxuKCJXZjRwIiksbigiSzlJYSIpLG4oInAwaWIiKSxuKCJGL1hMIiksbigiaDlEcSIpLG4oInB1Z1QiKSxuKCJuNmdHIiksbigiWVNoMiIpLG4oIlZuRC8iKSxuKCJ0OWZaIiksbigiTUdCUyIpLG4oInpvdG0iKSxuKCI2N1kvIiksbigiMC91USIpLG4oInAwU2oiKSxuKCJueTI0IiksbigiVDFETSIpLG4oIkZGT28iKSxuKCI2MGlVIiksbigiZURrUCIpLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW5ldyByLm8oIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBhPWZ1bmN0aW9uKCl7fX0sbXJTRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9cih0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX12YXIgbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHR9O2Z1bmN0aW9uIGEodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fWZ1bmN0aW9uIHModCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIHIsaSxvPW4uY2FsbCh0KSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKHI9by5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KHMoYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9fSxuNmdHOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbCE9dCYmIiIrdCE9ImZhbHNlIn1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLGZ1bmN0aW9uKHQpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHQpKSYmIWlzTmFOKE51bWJlcih0KSl9KHQpP051bWJlcih0KTplfWZ1bmN0aW9uIG8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbnVsbD09dD8iIjoic3RyaW5nIj09dHlwZW9mIHQ/dDp0KyJweCJ9bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX0sbmtZNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNjaGVkdWxlfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LG55MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIk1HQlMiKSxvPW4oInpvdG0iKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBzKHQpKX19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubm90aWZpZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB1KHQpLHI9T2JqZWN0KG8uYSkobix0aGlzLm5vdGlmaWVyKTtyZXR1cm4gciYmIXIuY2xvc2VkPyhuLmFkZChyKSxlLnN1YnNjcmliZShuKSk6bn0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe30sZX0oaS5hKX0scDBTajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIklVVGIiKSxpPW4oIlBVOEwiKSxvPW4oIkc1SjEiKSxhPW4oIm5rWTciKSxzPW4oIkYvWEwiKSx1PW4oIjAvdVEiKSxsPW4oIlR4amciKTtmdW5jdGlvbiBjKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W3QubGVuZ3RoLTFdO09iamVjdChhLmEpKG4pP3QucG9wKCk6bj1udWxsO3ZhciBjPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMT09PXQubGVuZ3RofHwyPT09dC5sZW5ndGgmJk9iamVjdChhLmEpKHRbMV0pP09iamVjdCh1LmEpKHRbMF0pOk9iamVjdChsLmEpKCkocy5hLmFwcGx5KHZvaWQgMCx0KSl9KDEhPT1jfHxuP2M+MD9PYmplY3Qoci5hKSh0LG4pOk9iamVjdChvLmIpKG4pOk9iamVjdChpLmEpKHRbMF0pLGUpfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pfSxwMGliOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJua1k3Iiksbz1uKCJabjhEIiksYT1uKCJJVVRiIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1udWxsLHU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gT2JqZWN0KGkuYSkodSk/KHM9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIHUmJihuPXQucG9wKCkpLG51bGw9PT1zJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIHIuYT90WzBdOk9iamVjdChvLmEpKG4pKE9iamVjdChhLmEpKHQscykpfX0scE1uUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigiWllDaSIpLG89ci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5pYigwLFsodCgpKCksci5PYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxyLk5hKDEsMjEyOTkyLG51bGwsMCxpLm4sW2kuYixyLk4sci5qLFs4LG51bGxdLHIuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIHM9ci5LYSgibmctY29tcG9uZW50IixpLnIsZnVuY3Rpb24odCl7cmV0dXJuIHIuaWIoMCxbKHQoKSgpLHIuT2EoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLGEsbykpLHIuTmEoMSw0OTE1MixudWxsLDAsaS5yLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKX0scFpoTTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24oKXt9fSxwc1cwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJ6b3RtIiksbz1uKCJNR0JTIiksYT1uKCI2N1kvIikscz1uKCIwL3VRIik7ZnVuY3Rpb24gdSh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24ocil7cmV0dXJuIHIucGlwZSh1KGZ1bmN0aW9uKG4scil7cmV0dXJuIE9iamVjdChzLmEpKHQobixyKSkucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0LGkpe3JldHVybiBlKG4sdCxyLGkpfSkpfSxuKSl9OigibnVtYmVyIj09dHlwZW9mIGUmJihuPWUpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IGwodCxuKSl9KX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMucHJvamVjdD10LHRoaXMuY29uY3VycmVudD1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBjKHQsdGhpcy5wcm9qZWN0LHRoaXMuY29uY3VycmVudCkpfSx0fSgpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ciYmKHI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcm9qZWN0PW4saS5jb25jdXJyZW50PXIsaS5oYXNDb21wbGV0ZWQ9ITEsaS5idWZmZXI9W10saS5hY3RpdmU9MCxpLmluZGV4PTAsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU8dGhpcy5jb25jdXJyZW50P3RoaXMuX3RyeU5leHQodCk6dGhpcy5idWZmZXIucHVzaCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5wcm9qZWN0KHQsbil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmFjdGl2ZSsrLHRoaXMuX2lubmVyU3ViKGUsdCxuKX0sZS5wcm90b3R5cGUuX2lubmVyU3ViPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmFkZChPYmplY3QoaS5hKSh0aGlzLHQsZSxuKSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaGFzQ29tcGxldGVkPSEwLDA9PT10aGlzLmFjdGl2ZSYmMD09PXRoaXMuYnVmZmVyLmxlbmd0aCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1ZmZlcjt0aGlzLnJlbW92ZSh0KSx0aGlzLmFjdGl2ZS0tLGUubGVuZ3RoPjA/dGhpcy5fbmV4dChlLnNoaWZ0KCkpOjA9PT10aGlzLmFjdGl2ZSYmdGhpcy5oYXNDb21wbGV0ZWQmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oby5hKX0scHVnVDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImlzYnkiKSxpPW4oIk1jU28iKSxvPW4oIjJCZGoiKSxhPW4oIkVobWsiKSxzPW4oImVpaHMiKSx1PW4oIm1yU0ciKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7dmFyIHI9dC5jYWxsKHRoaXMsbj9uLmxlbmd0aCsiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4gICIrbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSsxKyIpICIrdC50b1N0cmluZygpfSkuam9pbigiXG4gICIpOiIiKXx8dGhpcztyZXR1cm4gci5lcnJvcnM9bixyLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihyLGUucHJvdG90eXBlKSxyfXJldHVybiB1LmIoZSx0KSxlfShFcnJvcik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5zdWJzY3JpYmU9dCl9dmFyIGU7cmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQsZT0hMTtpZighdGhpcy5jbG9zZWQpe3ZhciBuPXRoaXMuX3BhcmVudCx1PXRoaXMuX3BhcmVudHMsYz10aGlzLl91bnN1YnNjcmliZSxoPXRoaXMuX3N1YnNjcmlwdGlvbnM7dGhpcy5jbG9zZWQ9ITAsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbDtmb3IodmFyIGQ9LTEscD11P3UubGVuZ3RoOjA7bjspbi5yZW1vdmUodGhpcyksbj0rK2Q8cCYmdVtkXXx8bnVsbDtpZihPYmplY3Qoby5hKShjKSYmT2JqZWN0KGEuYSkoYykuY2FsbCh0aGlzKT09PXMuYSYmKGU9ITAsdD10fHwocy5hLmUgaW5zdGFuY2VvZiBsP2Yocy5hLmUuZXJyb3JzKTpbcy5hLmVdKSksT2JqZWN0KHIuYSkoaCkpZm9yKGQ9LTEscD1oLmxlbmd0aDsrK2Q8cDspe3ZhciBtPWhbZF07aWYoT2JqZWN0KGkuYSkobSkmJk9iamVjdChhLmEpKG0udW5zdWJzY3JpYmUpLmNhbGwobSk9PT1zLmEpe2U9ITAsdD10fHxbXTt2YXIgeT1zLmEuZTt5IGluc3RhbmNlb2YgbD90PXQuY29uY2F0KGYoeS5lcnJvcnMpKTp0LnB1c2goeSl9fWlmKGUpdGhyb3cgbmV3IGwodCl9fSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYoIWV8fGU9PT10LkVNUFRZKXJldHVybiB0LkVNUFRZO2lmKGU9PT10aGlzKXJldHVybiB0aGlzO3ZhciBuPWU7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImZ1bmN0aW9uIjpuPW5ldyB0KGUpO2Nhc2Uib2JqZWN0IjppZihuLmNsb3NlZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIG4udW5zdWJzY3JpYmUpcmV0dXJuIG47aWYodGhpcy5jbG9zZWQpcmV0dXJuIG4udW5zdWJzY3JpYmUoKSxuO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuLl9hZGRQYXJlbnQpe3ZhciByPW47KG49bmV3IHQpLl9zdWJzY3JpcHRpb25zPVtyXX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrZSsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1yZXR1cm4odGhpcy5fc3Vic2NyaXB0aW9uc3x8KHRoaXMuX3N1YnNjcmlwdGlvbnM9W10pKS5wdXNoKG4pLG4uX2FkZFBhcmVudCh0aGlzKSxufSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vic2NyaXB0aW9ucztpZihlKXt2YXIgbj1lLmluZGV4T2YodCk7LTEhPT1uJiZlLnNwbGljZShuLDEpfX0sdC5wcm90b3R5cGUuX2FkZFBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJlbnQsbj10aGlzLl9wYXJlbnRzO2UmJmUhPT10P24/LTE9PT1uLmluZGV4T2YodCkmJm4ucHVzaCh0KTp0aGlzLl9wYXJlbnRzPVt0XTp0aGlzLl9wYXJlbnQ9dH0sdC5FTVBUWT0oKGU9bmV3IHQpLmNsb3NlZD0hMCxlKSx0fSgpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUgaW5zdGFuY2VvZiBsP2UuZXJyb3JzOmUpfSxbXSl9fSxxQWxTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZFdaZyIpLGk9bigiQ2NuRyIpLG89bigiYm5lNSIpLGE9bigiRi9YTCIpLHM9bigiSzlJYSIpLHU9bigiNmJsRiIpLGw9bigicDBpYiIpLGM9bigiVDFETSIpLGY9bigibXJTRyIpLGg9bigiRWhtayIpLGQ9bigiZWlocyIpLHA9bigiTUdCUyIpLG09bigiem90bSIpLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZHVyYXRpb25TZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBnKHQsdGhpcy5kdXJhdGlvblNlbGVjdG9yKSl9LHR9KCksZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZHVyYXRpb25TZWxlY3Rvcj1uLHIuaGFzVmFsdWU9ITEscn1yZXR1cm4gZi5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy52YWx1ZT10LHRoaXMuaGFzVmFsdWU9ITAsIXRoaXMudGhyb3R0bGVkKXt2YXIgZT1PYmplY3QoaC5hKSh0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKHQpO2lmKGU9PT1kLmEpdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihkLmEuZSk7ZWxzZXt2YXIgbj1PYmplY3QobS5hKSh0aGlzLGUpOyFufHxuLmNsb3NlZD90aGlzLmNsZWFyVGhyb3R0bGUoKTp0aGlzLmFkZCh0aGlzLnRocm90dGxlZD1uKX19fSxlLnByb3RvdHlwZS5jbGVhclRocm90dGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZSxlPXRoaXMuaGFzVmFsdWUsbj10aGlzLnRocm90dGxlZDtuJiYodGhpcy5yZW1vdmUobiksdGhpcy50aHJvdHRsZWQ9bnVsbCxuLnVuc3Vic2NyaWJlKCkpLGUmJih0aGlzLnZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCkpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuY2xlYXJUaHJvdHRsZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY2xlYXJUaHJvdHRsZSgpfSxlfShwLmEpLHY9bigiZ0kzQiIpO2Z1bmN0aW9uIGIodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9Yy5hKSxuPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdCh2LmEpKHQsZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHkobikpfTt2YXIgbn12YXIgXz1uKCJWbkQvIik7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fc2Nyb2xsZWQ9bmV3IHMuYSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl9zY3JvbGxlZC5uZXh0KHQpfSk7dGhpcy5zY3JvbGxDb250YWluZXJzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5kZXJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQodCk7ZSYmKGUudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuc2Nyb2xsZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj91LmEuY3JlYXRlKGZ1bmN0aW9uKG4pe2UuX2dsb2JhbFN1YnNjcmlwdGlvbnx8ZS5fYWRkR2xvYmFsTGlzdGVuZXIoKTt2YXIgcj10PjA/ZS5fc2Nyb2xsZWQucGlwZShiKHQpKS5zdWJzY3JpYmUobik6ZS5fc2Nyb2xsZWQuc3Vic2NyaWJlKG4pO3JldHVybiBlLl9zY3JvbGxlZENvdW50KyssZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKCksZS5fc2Nyb2xsZWRDb3VudC0tLGUuX3Njcm9sbGVkQ291bnR8fGUuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6T2JqZWN0KGEuYSkoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5kZXJlZ2lzdGVyKG4pfSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuYW5jZXN0b3JTY3JvbGxlZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHQpO3JldHVybiB0aGlzLnNjcm9sbGVkKGUpLnBpcGUoT2JqZWN0KF8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR8fG4uaW5kZXhPZih0KT4tMX0pKX0sdC5wcm90b3R5cGUuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24ocixpKXtlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGksdCkmJm4ucHVzaChpKX0pLG59LHQucHJvdG90eXBlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5uYXRpdmVFbGVtZW50LHI9dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihuPT1yKXJldHVybiEwfXdoaWxlKG49bi5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2FkZEdsb2JhbExpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChvLmEpKHdpbmRvdy5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3Njcm9sbGVkLm5leHQoKX0pfSl9LHQucHJvdG90eXBlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoaS54KSxPYmplY3QoaS5WKShyLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX3Njcm9sbD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgcy5hLHRoaXMuX3Njcm9sbExpc3RlbmVyPWZ1bmN0aW9uKHQpe3JldHVybiByLl9lbGVtZW50U2Nyb2xsZWQubmV4dCh0KX19cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdC5fc2Nyb2xsTGlzdGVuZXIpfSksdGhpcy5fc2Nyb2xsLnJlZ2lzdGVyKHRoaXMpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3Njcm9sbExpc3RlbmVyJiZ0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fc2Nyb2xsTGlzdGVuZXIpfSx0LnByb3RvdHlwZS5lbGVtZW50U2Nyb2xsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5nZXRFbGVtZW50UmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWZ9LHR9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fY2hhbmdlPXQuaXNCcm93c2VyP2UucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGwuYSkoT2JqZWN0KG8uYSkod2luZG93LCJyZXNpemUiKSxPYmplY3Qoby5hKSh3aW5kb3csIm9yaWVudGF0aW9uY2hhbmdlIikpfSk6T2JqZWN0KGEuYSkoKSx0aGlzLl9pbnZhbGlkYXRlQ2FjaGU9dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gbi5fdXBkYXRlVmlld3BvcnRTaXplKCl9KX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9pbnZhbGlkYXRlQ2FjaGUudW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTaXplPWZ1bmN0aW9uKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTt2YXIgdD17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLHR9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0UmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGU9dGhpcy5nZXRWaWV3cG9ydFNpemUoKSxuPWUud2lkdGgscj1lLmhlaWdodDtyZXR1cm57dG9wOnQudG9wLGxlZnQ6dC5sZWZ0LGJvdHRvbTp0LnRvcCtyLHJpZ2h0OnQubGVmdCtuLGhlaWdodDpyLHdpZHRoOm59fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTt2YXIgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotdC50b3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wfHx3aW5kb3cuc2Nyb2xsWXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8MCxsZWZ0Oi10LmxlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdHx8d2luZG93LnNjcm9sbFh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHwwfX0sdC5wcm90b3R5cGUuY2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0yMCksdD4wP3RoaXMuX2NoYW5nZS5waXBlKGIodCkpOnRoaXMuX2NoYW5nZX0sdC5wcm90b3R5cGUuX3VwZGF0ZVZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoci5hKSxPYmplY3QoaS5WKShpLngpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksQz17cHJvdmlkZTpPLGRlcHM6W1tuZXcgaS55LG5ldyBpLkgsT10sci5hLGkueF0sdXNlRmFjdG9yeTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHR8fG5ldyBPKGUsbil9fSxTPWZ1bmN0aW9uKCl7fX0scmYzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9ZnVuY3Rpb24odCxlKXt0aGlzLnBhZ2VOYW1lPXQsdGhpcy5jaHVua1VSTD1lLHRoaXMuY2h1bmtMb2FkZWQ9ITF9LGk9W25ldyByKCIvc3VwcG9ydCIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzkvOTEvVC0tR09fUGFyaXMtU2FjbGF5LS1zdXBwb3J0X2NodW5rLmJhc2U2NC50eHQiKSxuZXcgcigiL3RlYW0iLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy83Lzc0L1QtLUdPX1BhcmlzLVNhY2xheS0tdGVhbV9jaHVuay5iYXNlNjQudHh0IiksbmV3IHIoIi9sYWJub3RlYm9vayIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzAvMDIvVC0tR09fUGFyaXMtU2FjbGF5LS1sYWJub3RlYm9va19jaHVuay5iYXNlNjQudHh0IildfSwidC9OYSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBEfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJDY25HIiksbz1uKCJGL1hMIiksYT1uKCI2YmxGIikscz1uKCJQaGpuIiksdT1uKCJWbkQvIiksbD1uKCI2N1kvIiksYz1uKCJJcDBSIiksZj1mdW5jdGlvbigpe30saD1mdW5jdGlvbigpe30sZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLm5vcm1hbGl6ZWROYW1lcz1uZXcgTWFwLHRoaXMubGF6eVVwZGF0ZT1udWxsLHQ/dGhpcy5sYXp5SW5pdD0ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCx0LnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5pbmRleE9mKCI6Iik7aWYobj4wKXt2YXIgcj10LnNsaWNlKDAsbiksaT1yLnRvTG93ZXJDYXNlKCksbz10LnNsaWNlKG4rMSkudHJpbSgpO2UubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLGkpLGUuaGVhZGVycy5oYXMoaSk/ZS5oZWFkZXJzLmdldChpKS5wdXNoKG8pOmUuaGVhZGVycy5zZXQoaSxbb10pfX0pfTpmdW5jdGlvbigpe2UuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9dFtuXSxpPW4udG9Mb3dlckNhc2UoKTsic3RyaW5nIj09dHlwZW9mIHImJihyPVtyXSksci5sZW5ndGg+MCYmKGUuaGVhZGVycy5zZXQoaSxyKSxlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobixpKSl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9LHQucHJvdG90eXBlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWU9ZnVuY3Rpb24odCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5VXBkYXRlKHQpfSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX0sdC5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmluaXQoKSxBcnJheS5mcm9tKHQuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7ZS5oZWFkZXJzLnNldChuLHQuaGVhZGVycy5nZXQobikpLGUubm9ybWFsaXplZE5hbWVzLnNldChuLHQubm9ybWFsaXplZE5hbWVzLmdldChuKSl9KX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4ubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5sYXp5SW5pdDp0aGlzLG4ubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtlXSksbn0sdC5wcm90b3R5cGUuYXBwbHlVcGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjp2YXIgbj10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmKG49W25dKSwwPT09bi5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7dmFyIGk9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtpLnB1c2guYXBwbHkoaSxPYmplY3Qoci5kKShuKSksdGhpcy5oZWFkZXJzLnNldChlLGkpO2JyZWFrO2Nhc2UiZCI6dmFyIG89dC52YWx1ZTtpZihvKXt2YXIgYT10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFhKXJldHVybjswPT09KGE9YS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1vLmluZGV4T2YodCl9KSkubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKSk6dGhpcy5oZWFkZXJzLnNldChlLGEpfWVsc2UgdGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQoZS5ub3JtYWxpemVkTmFtZXMuZ2V0KG4pLGUuaGVhZGVycy5nZXQobikpfSl9LHR9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVuY29kZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0KX0sdC5wcm90b3R5cGUuZW5jb2RlVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCl9LHQucHJvdG90eXBlLmRlY29kZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0LnByb3RvdHlwZS5kZWNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0fSgpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lNDAvZ2ksIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZ2ksIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKS5yZXBsYWNlKC8lMkIvZ2ksIisiKS5yZXBsYWNlKC8lM0QvZ2ksIj0iKS5yZXBsYWNlKC8lM0YvZ2ksIj8iKS5yZXBsYWNlKC8lMkYvZ2ksIi8iKX12YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlLG4saSxvPXRoaXM7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgcCx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD0oZT10LmZyb21TdHJpbmcsbj10aGlzLmVuY29kZXIsaT1uZXcgTWFwLGUubGVuZ3RoPjAmJmUuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiPSIpLG89T2JqZWN0KHIuYykoLTE9PWU/W24uZGVjb2RlS2V5KHQpLCIiXTpbbi5kZWNvZGVLZXkodC5zbGljZSgwLGUpKSxuLmRlY29kZVZhbHVlKHQuc2xpY2UoZSsxKSldLDIpLGE9b1swXSxzPW9bMV0sdT1pLmdldChhKXx8W107dS5wdXNoKHMpLGkuc2V0KGEsdSl9KSxpKX1lbHNlIHQuZnJvbU9iamVjdD8odGhpcy5tYXA9bmV3IE1hcCxPYmplY3Qua2V5cyh0LmZyb21PYmplY3QpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5mcm9tT2JqZWN0W2VdO28ubWFwLnNldChlLEFycmF5LmlzQXJyYXkobik/bjpbbl0pfSkpOnRoaXMubWFwPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBlP2VbMF06bnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJhIn0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChmdW5jdGlvbihlKXt2YXIgbj10LmVuY29kZXIuZW5jb2RlS2V5KGUpO3JldHVybiB0Lm1hcC5nZXQoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuKyI9Iit0LmVuY29kZXIuZW5jb2RlVmFsdWUoZSl9KS5qb2luKCImIil9KS5qb2luKCImIil9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBuLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxuLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXAuc2V0KGUsdC5jbG9uZUZyb20ubWFwLmdldChlKSl9KSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbihlKXtzd2l0Y2goZS5vcCl7Y2FzZSJhIjpjYXNlInMiOnZhciBuPSgiYSI9PT1lLm9wP3QubWFwLmdldChlLnBhcmFtKTp2b2lkIDApfHxbXTtuLnB1c2goZS52YWx1ZSksdC5tYXAuc2V0KGUucGFyYW0sbik7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1lLnZhbHVlKXt0Lm1hcC5kZWxldGUoZS5wYXJhbSk7YnJlYWt9dmFyIHI9dC5tYXAuZ2V0KGUucGFyYW0pfHxbXSxpPXIuaW5kZXhPZihlLnZhbHVlKTstMSE9PWkmJnIuc3BsaWNlKGksMSksci5sZW5ndGg+MD90Lm1hcC5zZXQoZS5wYXJhbSxyKTp0Lm1hcC5kZWxldGUoZS5wYXJhbSl9fSksdGhpcy5jbG9uZUZyb209bnVsbCl9LHR9KCk7ZnVuY3Rpb24gZyh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gdih0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIGIodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmdCBpbnN0YW5jZW9mIEZvcm1EYXRhfXZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaTtpZih0aGlzLnVybD1lLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPXQudG9VcHBlckNhc2UoKSxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8cj8odGhpcy5ib2R5PXZvaWQgMCE9PW4/bjpudWxsLGk9cik6aT1uLGkmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhaS5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIWkud2l0aENyZWRlbnRpYWxzLGkucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9aS5yZXNwb25zZVR5cGUpLGkuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1pLmhlYWRlcnMpLGkucGFyYW1zJiYodGhpcy5wYXJhbXM9aS5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGQpLHRoaXMucGFyYW1zKXt2YXIgbz10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT1vLmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9ZTtlbHNle3ZhciBhPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PWE/Ij8iOmE8ZS5sZW5ndGgtMT8iJiI6IiIpK299fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHksdGhpcy51cmxXaXRoUGFyYW1zPWV9cmV0dXJuIHQucHJvdG90eXBlLnNlcmlhbGl6ZUJvZHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmcodGhpcy5ib2R5KXx8dih0aGlzLmJvZHkpfHxiKHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiB5P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfSx0LnByb3RvdHlwZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6Yih0aGlzLmJvZHkpP251bGw6dih0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOmcodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiB5PyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj1lLm1ldGhvZHx8dGhpcy5tZXRob2Qscj1lLnVybHx8dGhpcy51cmwsaT1lLnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsbz12b2lkIDAhPT1lLmJvZHk/ZS5ib2R5OnRoaXMuYm9keSxhPXZvaWQgMCE9PWUud2l0aENyZWRlbnRpYWxzP2Uud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLHM9dm9pZCAwIT09ZS5yZXBvcnRQcm9ncmVzcz9lLnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3MsdT1lLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxsPWUucGFyYW1zfHx0aGlzLnBhcmFtcztyZXR1cm4gdm9pZCAwIT09ZS5zZXRIZWFkZXJzJiYodT1PYmplY3Qua2V5cyhlLnNldEhlYWRlcnMpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0LnNldChuLGUuc2V0SGVhZGVyc1tuXSl9LHUpKSxlLnNldFBhcmFtcyYmKGw9T2JqZWN0LmtleXMoZS5zZXRQYXJhbXMpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiB0LnNldChuLGUuc2V0UGFyYW1zW25dKX0sbCkpLG5ldyB0KG4scixvLHtwYXJhbXM6bCxoZWFkZXJzOnUscmVwb3J0UHJvZ3Jlc3M6cyxyZXNwb25zZVR5cGU6aSx3aXRoQ3JlZGVudGlhbHM6YX0pfSx0fSgpLHc9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5TZW50PTBdPSJTZW50Iix0W3QuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIix0W3QuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsdFt0LlVzZXI9NV09IlVzZXIiLHR9KHt9KSx4PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0yMDApLHZvaWQgMD09PW4mJihuPSJPSyIpLHRoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBkLHRoaXMuc3RhdHVzPXZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOmUsdGhpcy5zdGF0dXNUZXh0PXQuc3RhdHVzVGV4dHx8bix0aGlzLnVybD10LnVybHx8bnVsbCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMH19KCksTz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPXcuUmVzcG9uc2VIZWFkZXIsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9e30pLG5ldyBlKHtoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfSxlfSh4KSxDPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLnR5cGU9dy5SZXNwb25zZSxuLmJvZHk9dm9pZCAwIT09ZS5ib2R5P2UuYm9keTpudWxsLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxuZXcgZSh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfSxlfSh4KSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSwwLCJVbmtub3duIEVycm9yIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLG4ub2s9ITEsbi5tZXNzYWdlPW4uc3RhdHVzPj0yMDAmJm4uc3RhdHVzPDMwMD8iSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKToiSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKSsiOiAiK2Uuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQsbi5lcnJvcj1lLmVycm9yfHxudWxsLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oeCk7ZnVuY3Rpb24gRSh0LGUpe3JldHVybntib2R5OmUsaGVhZGVyczp0LmhlYWRlcnMsb2JzZXJ2ZTp0Lm9ic2VydmUscGFyYW1zOnQucGFyYW1zLHJlcG9ydFByb2dyZXNzOnQucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczp0LndpdGhDcmVkZW50aWFsc319dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuaGFuZGxlcj10fXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRoaXM7aWYodm9pZCAwPT09biYmKG49e30pLHQgaW5zdGFuY2VvZiBfKXI9dDtlbHNle3ZhciBhO2E9bi5oZWFkZXJzIGluc3RhbmNlb2YgZD9uLmhlYWRlcnM6bmV3IGQobi5oZWFkZXJzKTt2YXIgYz12b2lkIDA7bi5wYXJhbXMmJihjPW4ucGFyYW1zIGluc3RhbmNlb2YgeT9uLnBhcmFtczpuZXcgeSh7ZnJvbU9iamVjdDpuLnBhcmFtc30pKSxyPW5ldyBfKHQsZSx2b2lkIDAhPT1uLmJvZHk/bi5ib2R5Om51bGwse2hlYWRlcnM6YSxwYXJhbXM6YyxyZXBvcnRQcm9ncmVzczpuLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc30pfXZhciBmPU9iamVjdChvLmEpKHIpLnBpcGUoT2JqZWN0KHMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGkuaGFuZGxlci5oYW5kbGUodCl9KSk7aWYodCBpbnN0YW5jZW9mIF98fCJldmVudHMiPT09bi5vYnNlcnZlKXJldHVybiBmO3ZhciBoPWYucGlwZShPYmplY3QodS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEN9KSk7c3dpdGNoKG4ub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChyLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtpZihudWxsIT09dC5ib2R5JiYhKHQuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhbiBBcnJheUJ1ZmZlci4iKTtyZXR1cm4gdC5ib2R5fSkpO2Nhc2UiYmxvYiI6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtpZihudWxsIT09dC5ib2R5JiYhKHQuYm9keSBpbnN0YW5jZW9mIEJsb2IpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgQmxvYi4iKTtyZXR1cm4gdC5ib2R5fSkpO2Nhc2UidGV4dCI6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtpZihudWxsIT09dC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIHQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gdC5ib2R5fSkpO2Nhc2UianNvbiI6ZGVmYXVsdDpyZXR1cm4gaC5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJvZHl9KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGg7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICIrbi5vYnNlcnZlKyJ9Iil9fSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiREVMRVRFIix0LGUpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiR0VUIix0LGUpfSx0LnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkhFQUQiLHQsZSl9LHQucHJvdG90eXBlLmpzb25wPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLHQse3BhcmFtczoobmV3IHkpLmFwcGVuZChlLCJKU09OUF9DQUxMQkFDSyIpLG9ic2VydmU6ImJvZHkiLHJlc3BvbnNlVHlwZToianNvbiJ9KX0sdC5wcm90b3R5cGUub3B0aW9ucz1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJPUFRJT05TIix0LGUpfSx0LnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBBVENIIix0LEUobixlKSl9LHQucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQT1NUIix0LEUobixlKSl9LHQucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBVVCIsdCxFKG4sZSkpfSx0fSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5uZXh0PXQsdGhpcy5pbnRlcmNlcHRvcj1lfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX0sdH0oKSxJPW5ldyBpLm8oIkhUVFBfSU5URVJDRVBUT1JTIiksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3JldHVybiBlLmhhbmRsZSh0KX0sdH0oKSxqPS9eXClcXVx9Jyw/XG4vLFA9ZnVuY3Rpb24oKXt9LE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9LHR9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy54aHJGYWN0b3J5PXR9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJKU09OUCI9PT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEpzb25wQ2xpZW50TW9kdWxlIGluc3RhbGxlZC4iKTtyZXR1cm4gbmV3IGEuYShmdW5jdGlvbihuKXt2YXIgcj1lLnhockZhY3RvcnkuYnVpbGQoKTtpZihyLm9wZW4odC5tZXRob2QsdC51cmxXaXRoUGFyYW1zKSx0LndpdGhDcmVkZW50aWFscyYmKHIud2l0aENyZWRlbnRpYWxzPSEwKSx0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIodCxlLmpvaW4oIiwiKSl9KSx0LmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8ci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiKSwhdC5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIikpe3ZhciBpPXQuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09aSYmci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGkpfWlmKHQucmVzcG9uc2VUeXBlKXt2YXIgbz10LnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO3IucmVzcG9uc2VUeXBlPSJqc29uIiE9PW8/bzoidGV4dCJ9dmFyIGE9dC5zZXJpYWxpemVCb2R5KCkscz1udWxsLHU9ZnVuY3Rpb24oKXtpZihudWxsIT09cylyZXR1cm4gczt2YXIgZT0xMjIzPT09ci5zdGF0dXM/MjA0OnIuc3RhdHVzLG49ci5zdGF0dXNUZXh0fHwiT0siLGk9bmV3IGQoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbz1mdW5jdGlvbih0KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gdCYmdC5yZXNwb25zZVVSTD90LnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KHQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP3QuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShyKXx8dC51cmw7cmV0dXJuIHM9bmV3IE8oe2hlYWRlcnM6aSxzdGF0dXM6ZSxzdGF0dXNUZXh0Om4sdXJsOm99KX0sbD1mdW5jdGlvbigpe3ZhciBlPXUoKSxpPWUuaGVhZGVycyxvPWUuc3RhdHVzLGE9ZS5zdGF0dXNUZXh0LHM9ZS51cmwsbD1udWxsOzIwNCE9PW8mJihsPXZvaWQgMD09PXIucmVzcG9uc2U/ci5yZXNwb25zZVRleHQ6ci5yZXNwb25zZSksMD09PW8mJihvPWw/MjAwOjApO3ZhciBjPW8+PTIwMCYmbzwzMDA7aWYoImpzb24iPT09dC5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgbCl7dmFyIGY9bDtsPWwucmVwbGFjZShqLCIiKTt0cnl7bD0iIiE9PWw/SlNPTi5wYXJzZShsKTpudWxsfWNhdGNoKHQpe2w9ZixjJiYoYz0hMSxsPXtlcnJvcjp0LHRleHQ6bH0pfX1jPyhuLm5leHQobmV3IEMoe2JvZHk6bCxoZWFkZXJzOmksc3RhdHVzOm8sc3RhdHVzVGV4dDphLHVybDpzfHx2b2lkIDB9KSksbi5jb21wbGV0ZSgpKTpuLmVycm9yKG5ldyBTKHtlcnJvcjpsLGhlYWRlcnM6aSxzdGF0dXM6byxzdGF0dXNUZXh0OmEsdXJsOnN8fHZvaWQgMH0pKX0sYz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUyh7ZXJyb3I6dCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIn0pO24uZXJyb3IoZSl9LGY9ITEsaD1mdW5jdGlvbihlKXtmfHwobi5uZXh0KHUoKSksZj0hMCk7dmFyIGk9e3R5cGU6dy5Eb3dubG9hZFByb2dyZXNzLGxvYWRlZDplLmxvYWRlZH07ZS5sZW5ndGhDb21wdXRhYmxlJiYoaS50b3RhbD1lLnRvdGFsKSwidGV4dCI9PT10LnJlc3BvbnNlVHlwZSYmci5yZXNwb25zZVRleHQmJihpLnBhcnRpYWxUZXh0PXIucmVzcG9uc2VUZXh0KSxuLm5leHQoaSl9LHA9ZnVuY3Rpb24odCl7dmFyIGU9e3R5cGU6dy5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6dC5sb2FkZWR9O3QubGVuZ3RoQ29tcHV0YWJsZSYmKGUudG90YWw9dC50b3RhbCksbi5uZXh0KGUpfTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKSx0LnJlcG9ydFByb2dyZXNzJiYoci5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsaCksbnVsbCE9PWEmJnIudXBsb2FkJiZyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIuc2VuZChhKSxuLm5leHQoe3R5cGU6dy5TZW50fSksZnVuY3Rpb24oKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHQucmVwb3J0UHJvZ3Jlc3MmJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmci51cGxvYWQmJnIudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5hYm9ydCgpfX0pfSx0fSgpLFI9bmV3IGkubygiWFNSRl9DT09LSUVfTkFNRSIpLEQ9bmV3IGkubygiWFNSRl9IRUFERVJfTkFNRSIpLEw9ZnVuY3Rpb24oKXt9LEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRvYz10LHRoaXMucGxhdGZvcm09ZSx0aGlzLmNvb2tpZU5hbWU9bix0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0VG9rZW49ZnVuY3Rpb24oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gdCE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPU9iamVjdChjLnUpKHQsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9dCksdGhpcy5sYXN0VG9rZW59LHR9KCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnRva2VuU2VydmljZT10LHRoaXMuaGVhZGVyTmFtZT1lfXJldHVybiB0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnVybC50b0xvd2VyQ2FzZSgpO2lmKCJHRVQiPT09dC5tZXRob2R8fCJIRUFEIj09PXQubWV0aG9kfHxuLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8bi5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBlLmhhbmRsZSh0KTt2YXIgcj10aGlzLnRva2VuU2VydmljZS5nZXRUb2tlbigpO3JldHVybiBudWxsPT09cnx8dC5oZWFkZXJzLmhhcyh0aGlzLmhlYWRlck5hbWUpfHwodD10LmNsb25lKHtoZWFkZXJzOnQuaGVhZGVycy5zZXQodGhpcy5oZWFkZXJOYW1lLHIpfSkpLGUuaGFuZGxlKHQpfSx0fSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5iYWNrZW5kPXQsdGhpcy5pbmplY3Rvcj1lLHRoaXMuY2hhaW49bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10aGlzLmNoYWluKXt2YXIgZT10aGlzLmluamVjdG9yLmdldChJLFtdKTt0aGlzLmNoYWluPWUucmVkdWNlUmlnaHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFQodCxlKX0sdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUodCl9LHR9KCksej1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGlzYWJsZT1mdW5jdGlvbigpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6Vix1c2VDbGFzczpBfV19fSx0LndpdGhPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSkse25nTW9kdWxlOnQscHJvdmlkZXJzOltlLmNvb2tpZU5hbWU/e3Byb3ZpZGU6Uix1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTpELHVzZVZhbHVlOmUuaGVhZGVyTmFtZX06W11dfX0sdH0oKSxCPWZ1bmN0aW9uKCl7fX0sdDlmWjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigibXJTRyIpLGk9bigiRkZPbyIpLG89bigiYjdtVyIpLGE9bigiRzVKMSIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoYS5iKSgpOmUubGlmdChuZXcgdSh0KSl9fXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBvLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGwodCx0aGlzLnRvdGFsKSl9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLmNvdW50PTAscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50b3RhbCxuPSsrdGhpcy5jb3VudDtuPD1lJiYodGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLG49PT1lJiYodGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKSkpfSxlfShpLmEpfSx1NjdEOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJFbjgrIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXRbci5hXSgpOzspe3ZhciBpPW4ubmV4dCgpO2lmKGkuZG9uZSl7ZS5jb21wbGV0ZSgpO2JyZWFrfWlmKGUubmV4dChpLnZhbHVlKSxlLmNsb3NlZClicmVha31yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5yZXR1cm4mJmUuYWRkKGZ1bmN0aW9uKCl7bi5yZXR1cm4mJm4ucmV0dXJuKCl9KSxlfX19LHVNYU86ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc3ViamVjdD1lLHIuc3Vic2NyaWJlcj1uLHIuY2xvc2VkPSExLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDt2YXIgdD10aGlzLnN1YmplY3QsZT10Lm9ic2VydmVycztpZih0aGlzLnN1YmplY3Q9bnVsbCxlJiYwIT09ZS5sZW5ndGgmJiF0LmlzU3RvcHBlZCYmIXQuY2xvc2VkKXt2YXIgbj1lLmluZGV4T2YodGhpcy5zdWJzY3JpYmVyKTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fX0sZX0obigicHVnVCIpLmEpfSx3RncxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJpaFlZIiksbz1uKCJDY25HIiksYT0obigiWllqdCIpLG4oIk5TWUwiKSkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9uZXh0QW5pbWF0aW9uSWQ9MCxyLl9yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKG4uYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246by5PLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO3ZhciBuPUFycmF5LmlzQXJyYXkodCk/T2JqZWN0KGkuaSkodCk6dDtyZXR1cm4gYyh0aGlzLl9yZW5kZXJlcixudWxsLGUsInJlZ2lzdGVyIixbbl0pLG5ldyB1KGUsdGhpcy5fcmVuZGVyZXIpfSxlfShpLmIpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5faWQ9ZSxyLl9yZW5kZXJlcj1uLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBsKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfSxlfShpLmMpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuaWQ9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1yLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLnRvdGFsVGltZT0wLHRoaXMuX2NvbW1hbmQoImNyZWF0ZSIsbil9cmV0dXJuIHQucHJvdG90eXBlLl9saXN0ZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCwiQEAiK3RoaXMuaWQrIjoiK3QsZSl9LHQucHJvdG90eXBlLl9jb21tYW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3JldHVybiBjKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3Rlbigic3RhcnQiLHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImluaXQiKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiAwfSx0fSgpO2Z1bmN0aW9uIGModCxlLG4scixpKXtyZXR1cm4gdC5zZXRQcm9wZXJ0eShlLCJAQCIrbisiOiIrcixpKX12YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZGVsZWdhdGU9dCx0aGlzLmVuZ2luZT1lLHRoaXMuX3pvbmU9bix0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsdGhpcy5wcm9taXNlPVByb21pc2UucmVzb2x2ZSgwKSxlLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7ZSYmZS5wYXJlbnROb2RlKHQpJiZlLnJlbW92ZUNoaWxkKHQucGFyZW50Tm9kZSx0KX19cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIodCxlKTtpZighKHQmJmUmJmUuZGF0YSYmZS5kYXRhLmFuaW1hdGlvbikpe3ZhciBpPXRoaXMuX3JlbmRlcmVyQ2FjaGUuZ2V0KHIpO3JldHVybiBpfHwoaT1uZXcgaCgiIixyLHRoaXMuZW5naW5lKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChyLGkpKSxpfXZhciBvPWUuaWQsYT1lLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7cmV0dXJuIHRoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsdCksZS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIobyxhLHQsZS5uYW1lLGUpfSksbmV3IGQodGhpcyxhLHIsdGhpcy5lbmdpbmUpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuX3NjaGVkdWxlQ291bnRUYXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbigpe3QuX21pY3JvdGFza0lkKyt9KX0sdC5wcm90b3R5cGUuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzO3Q+PTAmJnQ8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gZShuKX0pOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbihmdW5jdGlvbigpe2kuX3pvbmUucnVuKGZ1bmN0aW9uKCl7aS5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHIuYykodCwyKTsoMCxlWzBdKShlWzFdKX0pLGkuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2Usbl0pKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9zY2hlZHVsZUNvdW50VGFzaygpLHQuZW5naW5lLmZsdXNoKHQuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfSx0fSgpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPW4sdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lOb2RlKHQpfTpudWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLG4pLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCEwKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGUsdGhpcy5kZWxlZ2F0ZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4peyJAIj09ZS5jaGFyQXQoMCkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsISFuKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUuZGlzYWJsZUFuaW1hdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyh0LGUpfSx0fSgpLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxuLHIsaSl8fHRoaXM7cmV0dXJuIG8uZmFjdG9yeT1lLG8ubmFtZXNwYWNlSWQ9bixvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsbj12b2lkIDA9PT1ufHwhIW4pOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc3Vic3RyKDEpLG4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSxlLnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG8sYSxzPXRoaXM7aWYoIkAiPT1lLmNoYXJBdCgwKSl7dmFyIHU9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSh0KSxsPWUuc3Vic3RyKDEpLGM9IiI7cmV0dXJuIkAiIT1sLmNoYXJBdCgwKSYmKGw9KGk9T2JqZWN0KHIuYykoKG89bCxhPW8uaW5kZXhPZigiLiIpLFtvLnN1YnN0cmluZygwLGEpLG8uc3Vic3RyKGErMSldKSwyKSlbMF0sYz1pWzFdKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCx1LGwsYyxmdW5jdGlvbih0KXtzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHQuX2RhdGF8fC0xLG4sdCl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSxlfShoKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3JldHVybiB0LmNhbGwodGhpcyxlLmJvZHksbixyKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShhLmIpO2Z1bmN0aW9uIG0oKXtyZXR1cm4gT2JqZWN0KGEuaCkoKT9uZXcgYS5mOm5ldyBhLmR9ZnVuY3Rpb24geSgpe3JldHVybiBuZXcgYS5nfWZ1bmN0aW9uIGcodCxlLG4pe3JldHVybiBuZXcgZih0LGUsbil9dmFyIHY9bmV3IG8ubygiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLGI9ZnVuY3Rpb24oKXt9fSx4TXlFOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIiksbz1uKCIrdW1LIiksYT1uKCIyQmRqIik7ZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLmxpZnQobmV3IHUodCxlLG4pKX19dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5leHRPck9ic2VydmVyPXQsdGhpcy5lcnJvcj1lLHRoaXMuY29tcGxldGU9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgbCh0LHRoaXMubmV4dE9yT2JzZXJ2ZXIsdGhpcy5lcnJvcix0aGlzLmNvbXBsZXRlKSl9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBzPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBzLl90YXBOZXh0PW8uYSxzLl90YXBFcnJvcj1vLmEscy5fdGFwQ29tcGxldGU9by5hLHMuX3RhcEVycm9yPXJ8fG8uYSxzLl90YXBDb21wbGV0ZT1pfHxvLmEsT2JqZWN0KGEuYSkobik/KHMuX2NvbnRleHQ9cyxzLl90YXBOZXh0PW4pOm4mJihzLl9jb250ZXh0PW4scy5fdGFwTmV4dD1uLm5leHR8fG8uYSxzLl90YXBFcnJvcj1uLmVycm9yfHxvLmEscy5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8by5hKSxzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwRXJyb3IuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShpLmEpfSx4VGxhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSJ9LHkzQnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiK3VtSyIpO2Z1bmN0aW9uIGkoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIG8odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD8xPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSh0KX0sZSl9OnIuYX19LHpVbmI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLnIoZSk7dmFyIHIsaT1uKCJDY25HIiksbz1uKCJBeXRSIiksYT1uKCJJcDBSIikscz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3RoaXMucGxhdGZvcm1JZD10LHRoaXMuYXBwSWQ9ZTt2YXIgbj1PYmplY3QoYS5xKSh0KT8iaW4gdGhlIGJyb3dzZXIiOiJvbiB0aGUgc2VydmVyIjtjb25zb2xlLmxvZygiUnVubmluZyAiK24rIiB3aXRoIGFwcElkPSIrZSl9fSgpLHU9bigiZFdaZyIpLGw9bigibXJTRyIpLGM9bigibmtZNyIpLGY9bigiaXNieSIpLGg9bigiTUdCUyIpLGQ9bigiem90bSIpLHA9bigiSVVUYiIpLG09e30seT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBnKHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfSx0fSgpLGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnJlc3VsdFNlbGVjdG9yPW4sci5hY3RpdmU9MCxyLnZhbHVlcz1bXSxyLm9ic2VydmFibGVzPVtdLHJ9cmV0dXJuIGwuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2gobSksdGhpcy5vYnNlcnZhYmxlcy5wdXNoKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9ic2VydmFibGVzLGU9dC5sZW5ndGg7aWYoMD09PWUpdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO2Vsc2V7dGhpcy5hY3RpdmU9ZSx0aGlzLnRvUmVzcG9uZD1lO2Zvcih2YXIgbj0wO248ZTtuKyspe3ZhciByPXRbbl07dGhpcy5hZGQoT2JqZWN0KGQuYSkodGhpcyxyLHIsbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/b1tuXT09PW0/LS10aGlzLnRvUmVzcG9uZDp0aGlzLnRvUmVzcG9uZDowO29bbl09ZSwwPT09YSYmKHRoaXMucmVzdWx0U2VsZWN0b3I/dGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3Iobyk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KG8uc2xpY2UoKSkpfSxlLnByb3RvdHlwZS5fdHJ5UmVzdWx0U2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5yZXN1bHRTZWxlY3Rvci5hcHBseSh0aGlzLHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShoLmEpLHY9bigiSzlJYSIpLGI9bigiNmJsRiIpLF89bigiMkJkaiIpLHc9bigiNjdZLyIpLHg9bigibnkyNCIpLE89bigicDBTaiIpLEM9bigibjZnRyIpLFM9bmV3IFNldCxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOmt9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZighUy5oYXModCkpdHJ5e3J8fCgocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocikpLHIuc2hlZXQmJihyLnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSxTLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKHUuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBrKHQpe3JldHVybnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5tZWRpYU1hdGNoZXI9dCx0aGlzLnpvbmU9ZSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IHYuYX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaXNNYXRjaGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIEkoT2JqZWN0KEMuYSkodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLHI9bnVsbDtyZXR1cm4gT2JqZWN0KGMuYSkodFt0Lmxlbmd0aC0xXSkmJihyPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJk9iamVjdChmLmEpKHRbMF0pJiYodD10WzBdKSxPYmplY3QocC5hKSh0LHIpLmxpZnQobmV3IHkobikpfShJKE9iamVjdChDLmEpKHQpKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkub2JzZXJ2YWJsZX0pKS5waXBlKE9iamVjdCh3LmEpKGZ1bmN0aW9uKHQpe3JldHVybnttYXRjaGVzOnQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5tYXRjaGVzfSl9fSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX3F1ZXJpZXMuaGFzKHQpKXJldHVybiB0aGlzLl9xdWVyaWVzLmdldCh0KTt2YXIgbj10aGlzLm1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKHQpLHI9e29ic2VydmFibGU6ZnVuY3Rpb24gdChlLG4scil7cmV0dXJuIHI/dChlLG4pLnBpcGUoT2JqZWN0KHcuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChmLmEpKHQpP3IuYXBwbHkodm9pZCAwLHQpOnIodCl9KSk6bmV3IGIuYShmdW5jdGlvbih0KXt2YXIgcixpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0Lm5leHQoMT09PWUubGVuZ3RoP2VbMF06ZSl9O3RyeXtyPWUoaSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX1pZihPYmplY3QoXy5hKShuKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbihpLHIpfX0pfShmdW5jdGlvbih0KXtuLmFkZExpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSxmdW5jdGlvbih0KXtuLnJlbW92ZUxpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSkucGlwZShPYmplY3QoeC5hKSh0aGlzLl9kZXN0cm95U3ViamVjdCksT2JqZWN0KE8uYSkobiksT2JqZWN0KHcuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5tYXRjaGVzfX0pKSxtcWw6bn07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KHQscikscn0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoRSksT2JqZWN0KGkuVikoaS54KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIEkodCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCIsIil9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSl9dmFyIEEsaixQPXtYU21hbGw6IihtYXgtd2lkdGg6IDU5OXB4KSIsU21hbGw6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogOTU5cHgpIixNZWRpdW06IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSIsTGFyZ2U6IihtaW4td2lkdGg6IDEyODBweCkgYW5kIChtYXgtd2lkdGg6IDE5MTlweCkiLFhMYXJnZToiKG1pbi13aWR0aDogMTkyMHB4KSIsSGFuZHNldDoiKG1heC13aWR0aDogNTk5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFRhYmxldDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsV2ViOiIobWluLXdpZHRoOiA4NDBweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLEhhbmRzZXRQb3J0cmFpdDoiKG1heC13aWR0aDogNTk5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsVGFibGV0UG9ydHJhaXQ6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogODM5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsV2ViUG9ydHJhaXQ6IihtaW4td2lkdGg6IDg0MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLEhhbmRzZXRMYW5kc2NhcGU6IihtYXgtd2lkdGg6IDk1OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixUYWJsZXRMYW5kc2NhcGU6IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixXZWJMYW5kc2NhcGU6IihtaW4td2lkdGg6IDEyODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSJ9LE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYnJlYWtwb2ludE9ic2VydmVyPXQsdGhpcy5yb3V0ZXI9ZSx0aGlzLmNodW5rTG9hZGVyPW4sdGhpcy5zaG93U3VibWVudT0hMSx0aGlzLm9wZW5lZFNpZGVOYXY9ITAsdGhpcy5pc0hhbmRzZXQkPXRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoUC5IYW5kc2V0KS5waXBlKE9iamVjdCh3LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hdGNoZXN9KSksdGhpcy5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nPWZ1bmN0aW9uKHQpe3Iucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZ1VuYm91bmQodCxyKX19cmV0dXJuIHQucHJvdG90eXBlLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmdVbmJvdW5kPWZ1bmN0aW9uKHQsZSl7ZS5jaHVua0xvYWRlci5sb2FkUGFnZUNodW5rKHQsZnVuY3Rpb24oKXtlLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHQpfSl9LHQucHJvdG90eXBlLm9wZW5TaWRlTmF2PWZ1bmN0aW9uKCl7dGhpcy5vcGVuZWRTaWRlTmF2PSEwIT09dGhpcy5vcGVuZWRTaWRlTmF2fSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxOPW4oInBNblMiKSxSPW4oImx6bGoiKSxEPW4oIkZWU3kiKSxMPW4oImdJM0IiKSxGPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfSxWPSgxPT09KEE9RikubGVuZ3RoJiYoaj1BLEE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRihqKHQpLGUpfSkse2xlZnQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgaT1uK3I+Pj4xO0EodFtpXSxlKTwwP249aSsxOnI9aX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgaT1uK3I+Pj4xO0EodFtpXSxlKT4wP3I9aTpuPWkrMX1yZXR1cm4gbn19KS5yaWdodCxVPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LHo9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sQj1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFc9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHE9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkoaSk7KytyPGk7KW9bcl09dCtyKm47cmV0dXJuIG99LFk9TWF0aC5zcXJ0KDUwKSxHPU1hdGguc3FydCgxMCksUT1NYXRoLnNxcnQoMiksSz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChyPWU8dCkmJihpPXQsdD1lLGU9aSksMD09PShhPVoodCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylvW3NdPSh0LXMpL2E7cmV0dXJuIHImJm8ucmV2ZXJzZSgpLG99O2Z1bmN0aW9uIFoodCxlLG4pe3ZhciByPShlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCksbz1yL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1ZPzEwOm8+PUc/NTpvPj1RPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49WT8xMDpvPj1HPzU6bz49UT8yOjEpfWZ1bmN0aW9uIFgodCxlLG4pe3ZhciByPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSksbz1yL2k7cmV0dXJuIG8+PVk/aSo9MTA6bz49Rz9pKj01Om8+PVEmJihpKj0yKSxlPHQ/LWk6aX12YXIgJD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX07QXJyYXk7dmFyIEo9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gdHQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IGV0KHIpfWZ1bmN0aW9uIGV0KHQpe3RoaXMuXz10fWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gcnQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPUosdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fWV0LnByb3RvdHlwZT10dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmV0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRoaXMuXyxvPShyPWksKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtpZihuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHQmJiFyLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pKSxhPS0xLHM9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8czspaWYobj0odD1vW2FdKS50eXBlKWlbbl09cnQoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1ydChpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxzOylpZigobj0odD1vW2FdKS50eXBlKSYmKG49bnQoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgZXQodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksbz0wO288bjsrK28paVtvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKXJbb10udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBpdD10dCxvdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsYXQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOm90LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSksYXQuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOmF0W2VdLGxvY2FsOnR9OnR9LHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXN0KHQpO3JldHVybihlLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PW90JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1vdD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19KShlKX07ZnVuY3Rpb24gbHQoKXt9dmFyIGN0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2x0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19O2Z1bmN0aW9uIGZ0KCl7cmV0dXJuW119dmFyIGh0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2Z0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19LGR0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgcHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCFwdC5tYXRjaGVzKXt2YXIgbXQ9cHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxwdC5tc01hdGNoZXNTZWxlY3Rvcnx8cHQubW96TWF0Y2hlc1NlbGVjdG9yfHxwdC5vTWF0Y2hlc1NlbGVjdG9yO2R0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBtdC5jYWxsKHRoaXMsdCl9fX19dmFyIHl0PWR0LGd0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfTtmdW5jdGlvbiB2dCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZ0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBidD0iJCI7ZnVuY3Rpb24gX3QodCxlLG4scixpLG8pe2Zvcih2YXIgYSxzPTAsdT1lLmxlbmd0aCxsPW8ubGVuZ3RoO3M8bDsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxyW3NdPWEpOm5bc109bmV3IHZ0KHQsb1tzXSk7Zm9yKDtzPHU7KytzKShhPWVbc10pJiYoaVtzXT1hKX1mdW5jdGlvbiB3dCh0LGUsbixyLGksbyxhKXt2YXIgcyx1LGwsYz17fSxmPWUubGVuZ3RoLGg9by5sZW5ndGgsZD1uZXcgQXJyYXkoZik7Zm9yKHM9MDtzPGY7KytzKSh1PWVbc10pJiYoZFtzXT1sPWJ0K2EuY2FsbCh1LHUuX19kYXRhX18scyxlKSxsIGluIGM/aVtzXT11OmNbbF09dSk7Zm9yKHM9MDtzPGg7KytzKSh1PWNbbD1idCthLmNhbGwodCxvW3NdLHMsbyldKT8ocltzXT11LHUuX19kYXRhX189b1tzXSxjW2xdPW51bGwpOm5bc109bmV3IHZ0KHQsb1tzXSk7Zm9yKHM9MDtzPGY7KytzKSh1PWVbc10pJiZjW2Rbc11dPT09dSYmKGlbc109dSl9ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIE90PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gQ3QodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxPdCh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBTdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gRXQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcga3QodCl9ZnVuY3Rpb24ga3QodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVN0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gVHQodCxlKXtmb3IodmFyIG49RXQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBJdCh0LGUpe2Zvcih2YXIgbj1FdCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIEF0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBqdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFB0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIE10KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gTnQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBSdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIER0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITEpLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIEx0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWt0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIEZ0PXt9LFZ0PW51bGw7ZnVuY3Rpb24gVXQodCxlLG4pe3JldHVybiB0PXp0KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24genQodCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1WdDtWdD1yO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXtWdD1pfX19ZnVuY3Rpb24gQnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixyPTAsaT0tMSxvPWUubGVuZ3RoO3I8bzsrK3Ipbj1lW3JdLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK2ldPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytpP2UubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEh0KHQsZSxuKXt2YXIgcj1GdC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1V0Onp0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHMsdT10aGlzLl9fb24sbD1yKGUsbyxhKTtpZih1KWZvcih2YXIgYz0wLGY9dS5sZW5ndGg7YzxmOysrYylpZigocz11W2NdKS50eXBlPT09dC50eXBlJiZzLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcixzLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcj1sLHMuY2FwdHVyZT1uKSx2b2lkKHMudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxsLG4pLHM9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6bCxjYXB0dXJlOm59LHU/dS5wdXNoKHMpOnRoaXMuX19vbj1bc119fWZ1bmN0aW9uIFd0KHQsZSxuKXt2YXIgcj1PdCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShlLG4pOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oaS5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxpLmRldGFpbD1uLmRldGFpbCk6aS5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChGdD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHF0PVtudWxsXTtmdW5jdGlvbiBZdCh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBHdCgpe3JldHVybiBuZXcgWXQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxxdCl9WXQucHJvdG90eXBlPUd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXQsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhLHM9ZVtpXSx1PXMubGVuZ3RoLGw9cltpXT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpKG89c1tjXSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sYyxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksbFtjXT1hKTtyZXR1cm4gbmV3IFl0KHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aHQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSx1PXMubGVuZ3RoLGw9MDtsPHU7KytsKShhPXNbbF0pJiYoci5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sbCxzKSksaS5wdXNoKGEpKTtyZXR1cm4gbmV3IFl0KHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIG8sYT1lW2ldLHM9YS5sZW5ndGgsdT1yW2ldPVtdLGw9MDtsPHM7KytsKShvPWFbbF0pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGwsYSkmJnUucHVzaChvKTtyZXR1cm4gbmV3IFl0KHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3BbKytjXT10fSkscDt2YXIgbixyPWU/d3Q6X3QsaT10aGlzLl9wYXJlbnRzLG89dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYobj10LHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Zvcih2YXIgYT1vLmxlbmd0aCxzPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSxjPTA7YzxhOysrYyl7dmFyIGY9aVtjXSxoPW9bY10sZD1oLmxlbmd0aCxwPXQuY2FsbChmLGYmJmYuX19kYXRhX18sYyxpKSxtPXAubGVuZ3RoLHk9dVtjXT1uZXcgQXJyYXkobSksZz1zW2NdPW5ldyBBcnJheShtKTtyKGYsaCx5LGcsbFtjXT1uZXcgQXJyYXkoZCkscCxlKTtmb3IodmFyIHYsYixfPTAsdz0wO188bTsrK18paWYodj15W19dKXtmb3IoXz49dyYmKHc9XysxKTshKGI9Z1t3XSkmJisrdzxtOyk7di5fbmV4dD1ifHxudWxsfX1yZXR1cm4ocz1uZXcgWXQocyxpKSkuX2VudGVyPXUscy5fZXhpdD1sLHN9LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChndCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFl0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoZ3QpLHRoaXMuX3BhcmVudHMpfSxtZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1NYXRoLm1pbihyLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShyKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdT1lW2FdLGw9blthXSxjPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkoYyksaD0wO2g8YzsrK2gpKHM9dVtoXXx8bFtoXSkmJihmW2hdPXMpO2Zvcig7YTxyOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBZdChvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PXh0KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgYSxzPW5bb10sdT1zLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHUpLGM9MDtjPHU7KytjKShhPXNbY10pJiYobFtjXT1hKTtsLnNvcnQoZSl9cmV0dXJuIG5ldyBZdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0WysrZV09dGhpc30pLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIGE9cltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAscj1lLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgaSxvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkoaT1vW2FdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49c3QodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fTpuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixuKX19OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19KSh0LGUsbnVsbD09bj8iIjpuKSk6Q3QodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fSkodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1TdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1FdCh0aGlzLm5vZGUoKSksaT0tMSxvPW4ubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9UdDpJdCkodGhpcyx0KX19OmU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7VHQodGhpcyx0KX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe0l0KHRoaXMsdCl9fSkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/QXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9qdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goUHQpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goTXQpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1dCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1dCh0KSxyPW51bGw9PWU/TnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpjdChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goUnQpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9MdDpEdCl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbz0odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP0h0OkJ0LG51bGw9PW4mJihuPSExKSxyPTA7cjxhOysrcil0aGlzLmVhY2gocyhvW3JdLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIHUsbD0wLGM9cy5sZW5ndGg7bDxjOysrbClmb3Iocj0wLHU9c1tsXTtyPGE7KytyKWlmKChpPW9bcl0pLnR5cGU9PT11LnR5cGUmJmkubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcyx0LGUpfX0pKHQsZSkpfX07dmFyIFF0PUd0LEt0PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgWXQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBZdChbW3RdXSxxdCl9LFp0PTA7ZnVuY3Rpb24gWHQoKXt0aGlzLl89IkAiKygrK1p0KS50b1N0cmluZygzNil9WHQucHJvdG90eXBlPShmdW5jdGlvbigpe3JldHVybiBuZXcgWHR9KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlh0LGdldDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fOyEoZSBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W2VdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFt0aGlzLl9dPWV9LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciAkdD1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIEp0KHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIHRlKCl7fXZhciBlZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsbmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIscmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGllPS9eIyhbMC05YS1mXXszfSkkLyxvZT0vXiMoWzAtOWEtZl17Nn0pJC8sYWU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2VlLGVlLGVlXSsiXFwpJCIpLHNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tyZSxyZSxyZV0rIlxcKSQiKSx1ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2VlLGVlLGVlLG5lXSsiXFwpJCIpLGxlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbcmUscmUscmUsbmVdKyJcXCkkIiksY2U9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW25lLHJlLHJlXSsiXFwpJCIpLGZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbbmUscmUscmUsbmVdKyJcXCkkIiksaGU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gZGUodCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPWllLmV4ZWModCkpP25ldyB2ZSgoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT1vZS5leGVjKHQpKT9wZShwYXJzZUludChlWzFdLDE2KSk6KGU9YWUuZXhlYyh0KSk/bmV3IHZlKGVbMV0sZVsyXSxlWzNdLDEpOihlPXNlLmV4ZWModCkpP25ldyB2ZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT11ZS5leGVjKHQpKT9tZShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1sZS5leGVjKHQpKT9tZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1jZS5leGVjKHQpKT9fZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWZlLmV4ZWModCkpP19lKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6aGUuaGFzT3duUHJvcGVydHkodCk/cGUoaGVbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyB2ZShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHBlKHQpe3JldHVybiBuZXcgdmUodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIG1lKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgdmUodCxlLG4scil9ZnVuY3Rpb24geWUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0ZXx8KHQ9ZGUodCkpLHQ/bmV3IHZlKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyB2ZX1mdW5jdGlvbiBnZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eWUodCk6bmV3IHZlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB2ZSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gYmUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBfZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IHhlKHQsZSxuLHIpfWZ1bmN0aW9uIHdlKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgeGUpcmV0dXJuIG5ldyB4ZSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB0ZXx8KHQ9ZGUodCkpLCF0KXJldHVybiBuZXcgeGU7aWYodCBpbnN0YW5jZW9mIHhlKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihlLG4sciksbz1NYXRoLm1heChlLG4sciksYT1OYU4scz1vLWksdT0obytpKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLXIpL3MrNioobjxyKTpuPT09bz8oci1lKS9zKzI6KGUtbikvcys0LHMvPXU8LjU/bytpOjItby1pLGEqPTYwKTpzPXU+MCYmdTwxPzA6YSxuZXcgeGUoYSxzLHUsdC5vcGFjaXR5KX0odCk6bmV3IHhlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB4ZSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gT2UodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfSR0KHRlLGRlLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLCR0KHZlLGdlLEp0KHRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdmUodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHZlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIiMiK2JlKHRoaXMucikrYmUodGhpcy5nKStiZSh0aGlzLmIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSwkdCh4ZSx3ZSxKdCh0ZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHhlKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHhlKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgdmUoT2UodD49MjQwP3QtMjQwOnQrMTIwLGksciksT2UodCxpLHIpLE9lKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBDZT1NYXRoLlBJLzE4MCxTZT0xODAvTWF0aC5QSSxFZT0uOTY0MjIsa2U9MSxUZT0uODI1MjEsSWU9NC8yOSxBZT02LzI5LGplPTMqQWUqQWUsUGU9QWUqQWUqQWU7ZnVuY3Rpb24gTWUodCl7aWYodCBpbnN0YW5jZW9mIE5lKXJldHVybiBuZXcgTmUodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgVWUpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBOZSh0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKkNlO3JldHVybiBuZXcgTmUodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgdmV8fCh0PXllKHQpKTt2YXIgbixyLGk9RmUodC5yKSxvPUZlKHQuZyksYT1GZSh0LmIpLHM9UmUoKC4yMjI1MDQ1KmkrLjcxNjg3ODYqbysuMDYwNjE2OSphKS9rZSk7cmV0dXJuIGk9PT1vJiZvPT09YT9uPXI9czoobj1SZSgoLjQzNjA3NDcqaSsuMzg1MDY0OSpvKy4xNDMwODA0KmEpL0VlKSxyPVJlKCguMDEzOTMyMippKy4wOTcxMDQ1Km8rLjcxNDE3MzMqYSkvVGUpKSxuZXcgTmUoMTE2KnMtMTYsNTAwKihuLXMpLDIwMCoocy1yKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIE5lKHQsZSxuLHIpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdD5QZT9NYXRoLnBvdyh0LDEvMyk6dC9qZStJZX1mdW5jdGlvbiBEZSh0KXtyZXR1cm4gdD5BZT90KnQqdDpqZSoodC1JZSl9ZnVuY3Rpb24gTGUodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBGZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBWZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFVlKXJldHVybiBuZXcgVWUodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgTmV8fCh0PU1lKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgVWUoTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpTZTtyZXR1cm4gbmV3IFVlKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfSh0KTpuZXcgVWUodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFVlKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn0kdChOZSxmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TWUodCk6bmV3IE5lKHQsZSxuLG51bGw9PXI/MTpyKX0sSnQodGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTmUodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOZSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgdmUoTGUoMy4xMzM4NTYxKihlPUVlKkRlKGUpKS0xLjYxNjg2NjcqKHQ9a2UqRGUodCkpLS40OTA2MTQ2KihuPVRlKkRlKG4pKSksTGUoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxMZSguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLCR0KFVlLFZlLEp0KHRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFVlKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWUodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gTWUodGhpcykucmdiKCl9fSkpO3ZhciB6ZT0tLjI5MjI3LEJlPS0uOTA2NDksSGU9MS45NzI5NCxXZT1IZSpCZSxxZT0xLjc4Mjc3KkhlLFllPTEuNzgyNzcqemUtIC0uMTQ4NjEqQmU7ZnVuY3Rpb24gR2UodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBRZSlyZXR1cm4gbmV3IFFlKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHZlfHwodD15ZSh0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUscj0oWWUqbitXZSoodC5yLzI1NSktcWUqZSkvKFllK1dlLXFlKSxpPW4tcixvPShIZSooZS1yKS16ZSppKS9CZSxhPU1hdGguc3FydChvKm8raSppKS8oSGUqciooMS1yKSkscz1hP01hdGguYXRhbjIobyxpKSpTZS0xMjA6TmFOO3JldHVybiBuZXcgUWUoczwwP3MrMzYwOnMsYSxyLHQub3BhY2l0eSl9KHQpOm5ldyBRZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gUWUodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIEtlKHQsZSxuLHIsaSl7dmFyIG89dCp0LGE9byp0O3JldHVybigoMS0zKnQrMypvLWEpKmUrKDQtNipvKzMqYSkqbisoMSszKnQrMypvLTMqYSkqcithKmkpLzZ9JHQoUWUsR2UsSnQodGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBRZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBRZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqQ2UsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IHZlKDI1NSooZStuKigtLjE0ODYxKnIrMS43ODI3NyppKSksMjU1KihlK24qKHplKnIrQmUqaSkpLDI1NSooZStuKihIZSpyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIFplPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gWGUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiAkZSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9YZSh0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6WmUoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBKZSh0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9YZSh0LG4pOlplKGlzTmFOKHQpP2U6dCl9dmFyIHRuPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9KZTpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOlplKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1nZSh0KSkuciwoZT1nZShlKSkuciksaT1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPUplKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBlbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPWdlKGVbbl0pLG9bbl09ci5yfHwwLGFbbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPW8odCksci5nPWEodCksci5iPXModCkscisiIn19fXZhciBubixybixvbixhbixzbj1lbihmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLG89dFtyKzFdO3JldHVybiBLZSgobi1yL2UpKmUscj4wP3Rbci0xXToyKmktbyxpLG8scjxlLTE/dFtyKzJdOjIqby1pKX19KSx1bj0oZW4oZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKTtyZXR1cm4gS2UoKG4tci9lKSplLHRbKHIrZS0xKSVlXSx0W3IlZV0sdFsocisxKSVlXSx0WyhyKzIpJWVdKX19KSxmdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn19KSxsbj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csY249bmV3IFJlZ0V4cChsbi5zb3VyY2UsImciKSxmbj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPWxuLmxhc3RJbmRleD1jbi5sYXN0SW5kZXg9MCxhPS0xLHM9W10sdT1bXTtmb3IodCs9IiIsZSs9IiI7KG49bG4uZXhlYyh0KSkmJihyPWNuLmV4ZWMoZSkpOykoaT1yLmluZGV4KT5vJiYoaT1lLnNsaWNlKG8saSksc1thXT9zW2FdKz1pOnNbKythXT1pKSwobj1uWzBdKT09PShyPXJbMF0pP3NbYV0/c1thXSs9cjpzWysrYV09cjooc1srK2FdPW51bGwsdS5wdXNoKHtpOmEseDp1bihuLHIpfSkpLG89Y24ubGFzdEluZGV4O3JldHVybiBvPGUubGVuZ3RoJiYoaT1lLnNsaWNlKG8pLHNbYV0/c1thXSs9aTpzWysrYV09aSkscy5sZW5ndGg8Mj91WzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKSsiIn19KHVbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShlKTooZT11Lmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIG4scj0wO3I8ZTsrK3Ipc1sobj11W3JdKS5pXT1uLngodCk7cmV0dXJuIHMuam9pbigiIil9KX0saG49ZnVuY3Rpb24odCxlKXt2YXIgbixyPXR5cGVvZiBlO3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PT1yP1plKGUpOigibnVtYmVyIj09PXI/dW46InN0cmluZyI9PT1yPyhuPWRlKGUpKT8oZT1uLHRuKTpmbjplIGluc3RhbmNlb2YgZGU/dG46ZSBpbnN0YW5jZW9mIERhdGU/ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQrZSpyKSxufX06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilvW25dPWhuKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19OiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9mdW5jdGlvbih0LGUpe3ZhciBuLHI9e30saT17fTtmb3IobiBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZXx8KGU9e30pLGUpbiBpbiB0P3Jbbl09aG4odFtuXSxlW25dKTppW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuIGluIHIpaVtuXT1yW25dKHQpO3JldHVybiBpfX06dW4pKHQsZSl9LGRuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCtlKm4pfX0scG49MTgwL01hdGguUEksbW49e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX0seW49ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhLHMsdTtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89YSxlLz1hKSwodT10Km4rZSpyKSYmKG4tPXQqdSxyLT1lKnUpLChzPU1hdGguc3FydChuKm4rcipyKSkmJihuLz1zLHIvPXMsdS89cyksdCpyPGUqbiYmKHQ9LXQsZT0tZSx1PS11LGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqcG4sc2tld1g6TWF0aC5hdGFuKHUpKnBuLHNjYWxlWDphLHNjYWxlWTpzfX07ZnVuY3Rpb24gZ24odCxlLG4scil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHM9W10sdT1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSxmdW5jdGlvbih0LHIsaSxvLGEscyl7aWYodCE9PWl8fHIhPT1vKXt2YXIgdT1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLG4pO3MucHVzaCh7aTp1LTQseDp1bih0LGkpfSx7aTp1LTIseDp1bihyLG8pfSl9ZWxzZShpfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrbytuKX0oby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHMsdSksZnVuY3Rpb24odCxlLG4sbyl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTpuLnB1c2goaShuKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6dW4odCxlKX0pKTplJiZuLnB1c2goaShuKSsicm90YXRlKCIrZStyKX0oby5yb3RhdGUsYS5yb3RhdGUscyx1KSxmdW5jdGlvbih0LGUsbixvKXt0IT09ZT9vLnB1c2goe2k6bi5wdXNoKGkobikrInNrZXdYKCIsbnVsbCxyKS0yLHg6dW4odCxlKX0pOmUmJm4ucHVzaChpKG4pKyJza2V3WCgiK2Urcil9KG8uc2tld1gsYS5za2V3WCxzLHUpLGZ1bmN0aW9uKHQsZSxuLHIsbyxhKXtpZih0IT09bnx8ZSE9PXIpe3ZhciBzPW8ucHVzaChpKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6cy00LHg6dW4odCxuKX0se2k6cy0yLHg6dW4oZSxyKX0pfWVsc2UgMT09PW4mJjE9PT1yfHxvLnB1c2goaShvKSsic2NhbGUoIituKyIsIityKyIpIil9KG8uc2NhbGVYLG8uc2NhbGVZLGEuc2NhbGVYLGEuc2NhbGVZLHMsdSksbz1hPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEscj11Lmxlbmd0aDsrK248cjspc1soZT11W25dKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgdm49Z24oZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9tbjoobm58fChubj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxybj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsb249ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5uLnN0eWxlLnRyYW5zZm9ybT10LHQ9b24uZ2V0Q29tcHV0ZWRTdHlsZShybi5hcHBlbmRDaGlsZChubiksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscm4ucmVtb3ZlQ2hpbGQobm4pLHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHluKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLGJuPWduKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P21uOihhbnx8KGFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGFuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1hbi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT95bigodD10Lm1hdHJpeCkuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKTptbil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gX24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT13ZShlKSkuaCwobj13ZShuKSkuaCksaT1KZShlLnMsbi5zKSxvPUplKGUubCxuLmwpLGE9SmUoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9aSh0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19ZnVuY3Rpb24gd24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT1WZShlKSkuaCwobj1WZShuKSkuaCksaT1KZShlLmMsbi5jKSxvPUplKGUubCxuLmwpLGE9SmUoZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLmM9aSh0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19ZnVuY3Rpb24geG4odCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gcihlLHIpe3ZhciBpPXQoKGU9R2UoZSkpLmgsKHI9R2UocikpLmgpLG89SmUoZS5zLHIucyksYT1KZShlLmwsci5sKSxzPUplKGUub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24sci5nYW1tYT1lLHJ9KDEpfU1hdGgsX24oJGUpLF9uKEplKSx3bigkZSksd24oSmUpLHhuKCRlKTt2YXIgT24sQ24sU249eG4oSmUpLEVuPTAsa249MCxUbj0wLEluPTFlMyxBbj0wLGpuPTAsUG49MCxNbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxObj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBSbigpe3JldHVybiBqbnx8KE5uKERuKSxqbj1Nbi5ub3coKStQbil9ZnVuY3Rpb24gRG4oKXtqbj0wfWZ1bmN0aW9uIExuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBGbih0LGUsbil7dmFyIHI9bmV3IExuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gVm4oKXtqbj0oQW49TW4ubm93KCkpK1BuLEVuPWtuPTA7dHJ5eyFmdW5jdGlvbigpe1JuKCksKytFbjtmb3IodmFyIHQsZT1PbjtlOykodD1qbi1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tRW59KCl9ZmluYWxseXtFbj0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1PbixyPTEvMDtuOyluLl9jYWxsPyhyPm4uX3RpbWUmJihyPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6T249ZSk7Q249dCx6bihyKX0oKSxqbj0wfX1mdW5jdGlvbiBVbigpe3ZhciB0PU1uLm5vdygpLGU9dC1BbjtlPkluJiYoUG4tPWUsQW49dCl9ZnVuY3Rpb24gem4odCl7RW58fChrbiYmKGtuPWNsZWFyVGltZW91dChrbikpLHQtam4+MjQ/KHQ8MS8wJiYoa249c2V0VGltZW91dChWbix0LU1uLm5vdygpLVBuKSksVG4mJihUbj1jbGVhckludGVydmFsKFRuKSkpOihUbnx8KEFuPU1uLm5vdygpLFRuPXNldEludGVydmFsKFVuLEluKSksRW49MSxObihWbikpKX1Mbi5wcm90b3R5cGU9Rm4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMbixyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/Um4oKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8Q249PT10aGlzfHwoQ24/Q24uX25leHQ9dGhpczpPbj10aGlzLENuPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sem4oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsem4oKSl9fTt2YXIgQm49ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBMbjtyZXR1cm4gci5yZXN0YXJ0KGZ1bmN0aW9uKG4pe3Iuc3RvcCgpLHQobitlKX0sZT1udWxsPT1lPzA6K2Usbikscn0sSG49aXQoInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IiksV249W10scW49MCxZbj0xLEduPTIsUW49MyxLbj00LFpuPTUsWG49Niwkbj1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9dC5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBvKHUpe3ZhciBsLGMsZixoO2lmKG4uc3RhdGUhPT1ZbilyZXR1cm4gcygpO2ZvcihsIGluIGkpaWYoKGg9aVtsXSkubmFtZT09PW4ubmFtZSl7aWYoaC5zdGF0ZT09PVFuKXJldHVybiBCbihvKTtoLnN0YXRlPT09S24/KGguc3RhdGU9WG4saC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW2xdKTorbDxlJiYoaC5zdGF0ZT1YbixoLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtsXSl9aWYoQm4oZnVuY3Rpb24oKXtuLnN0YXRlPT09UW4mJihuLnN0YXRlPUtuLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxhKHUpKX0pLG4uc3RhdGU9R24sbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksbi5zdGF0ZT09PUduKXtmb3Iobi5zdGF0ZT1RbixyPW5ldyBBcnJheShmPW4udHdlZW4ubGVuZ3RoKSxsPTAsYz0tMTtsPGY7KytsKShoPW4udHdlZW5bbF0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihyWysrY109aCk7ci5sZW5ndGg9YysxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgaT1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT1abiwxKSxvPS0xLGE9ci5sZW5ndGg7KytvPGE7KXJbb10uY2FsbChudWxsLGkpO24uc3RhdGU9PT1abiYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT1YbixuLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtlXSxpKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259aVtlXT1uLG4udGltZXI9Rm4oZnVuY3Rpb24odCl7bi5zdGF0ZT1ZbixuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmbyh0LW4uZGVsYXkpfSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpIbix0d2VlbjpXbix0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpxbn0pfTtmdW5jdGlvbiBKbih0LGUpe3ZhciBuPWVyKHQsZSk7aWYobi5zdGF0ZT5xbil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIHRyKHQsZSl7dmFyIG49ZXIodCxlKTtpZihuLnN0YXRlPkduKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZCIpO3JldHVybiBufWZ1bmN0aW9uIGVyKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59ZnVuY3Rpb24gbnIodCxlLG4pe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD10cih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24odCl7cmV0dXJuIGVyKHQscikudmFsdWVbZV19fXZhciBycj1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/dW46ZSBpbnN0YW5jZW9mIGRlP3RuOihuPWRlKGUpKT8oZT1uLHRuKTpmbikodCxlKX0saXI9UXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLG9yPTA7ZnVuY3Rpb24gYXIodCxlLG4scil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1yfWZ1bmN0aW9uIHNyKCl7cmV0dXJuKytvcn12YXIgdXI9UXQucHJvdG90eXBlO2Z1bmN0aW9uIGxyKHQpe3JldHVybit0fWFyLnByb3RvdHlwZT0oZnVuY3Rpb24odCl7cmV0dXJuIFF0KCkudHJhbnNpdGlvbih0KX0pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YXIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdSxsPXJbYV0sYz1sLmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGMpLGg9MDtoPGM7KytoKShzPWxbaF0pJiYodT10LmNhbGwocyxzLl9fZGF0YV9fLGgsbCkpJiYoIl9fZGF0YV9fImluIHMmJih1Ll9fZGF0YV9fPXMuX19kYXRhX18pLGZbaF09dSwkbihmW2hdLGUsbixoLGYsZXIocyxuKSkpO3JldHVybiBuZXcgYXIobyx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWh0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgdSxsPXJbc10sYz1sLmxlbmd0aCxmPTA7ZjxjOysrZilpZih1PWxbZl0pe2Zvcih2YXIgaCxkPXQuY2FsbCh1LHUuX19kYXRhX18sZixsKSxwPWVyKHUsbiksbT0wLHk9ZC5sZW5ndGg7bTx5OysrbSkoaD1kW21dKSYmJG4oaCxlLG4sbSxkLHApO28ucHVzaChkKSxhLnB1c2godSl9cmV0dXJuIG5ldyBhcihvLGEsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD15dCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhPWVbaV0scz1hLmxlbmd0aCx1PXJbaV09W10sbD0wO2w8czsrK2wpKG89YVtsXSkmJnQuY2FsbChvLG8uX19kYXRhX18sbCxhKSYmdS5wdXNoKG8pO3JldHVybiBuZXcgYXIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1NYXRoLm1pbihyLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShyKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdT1lW2FdLGw9blthXSxjPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkoYyksaD0wO2g8YzsrK2gpKHM9dVtoXXx8bFtoXSkmJihmW2hdPXMpO2Zvcig7YTxyOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBhcihvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgaXIodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPXNyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEscz1yW29dLHU9cy5sZW5ndGgsbD0wO2w8dTsrK2wpaWYoYT1zW2xdKXt2YXIgYz1lcihhLGUpOyRuKGEsdCxuLGwscyx7dGltZTpjLnRpbWUrYy5kZWxheStjLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246Yy5kdXJhdGlvbixlYXNlOmMuZWFzZX0pfXJldHVybiBuZXcgYXIocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6dXIuY2FsbCxub2Rlczp1ci5ub2Rlcyxub2RlOnVyLm5vZGUsc2l6ZTp1ci5zaXplLGVtcHR5OnVyLmVtcHR5LGVhY2g6dXIuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZXIodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KX0oZSk/Sm46dHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLGEub249aX19KG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1zdCh0KSxyPSJ0cmFuc2Zvcm0iPT09bj9ibjpycjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9bih0aGlzKTtpZihudWxsIT1zKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09cz9udWxsOmE9PT1yJiZzPT09aT9vOm89ZShyPWEsaT1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShuLHIsbnIodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkobik6KG4ubG9jYWw/ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KShuLHIsZSsiIikpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPXN0KHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKHIubG9jYWw/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxyPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn06ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxyPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZSh0LHIoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufSkocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT92bjpycjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1DdCh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksQ3QodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1yP2k6aT1lKG49byxyPWEpfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19KHQpKTp0aGlzLnN0eWxlVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUN0KHRoaXMsdCkscz1uKHRoaXMpO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxzPUN0KHRoaXMsdCkpLGE9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpfX0odCxyLG5yKHRoaXMsInN0eWxlLiIrdCxlKSk6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89Q3QodGhpcyx0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSsiIiksbil9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXt2YXIgcj10aGlzLGk9ZS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe3Iuc3R5bGUuc2V0UHJvcGVydHkodCxpKGUpLG4pfX1yZXR1cm4gci5fdmFsdWU9ZSxyfSh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fShucih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwodD10aGlzLl9pZCxmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSkpO3ZhciB0fSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9ZXIodGhpcy5ub2RlKCksbikudHdlZW4sbz0wLGE9aS5sZW5ndGg7bzxhOysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10cih0aGlzLHQpLG89aS50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShyPW49bykubGVuZ3RoO2E8czsrK2EpaWYoclthXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31pLnR3ZWVuPXJ9fTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dHIodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PXIpe2k9KHI9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSx1PTAsbD1pLmxlbmd0aDt1PGw7Kyt1KWlmKGlbdV0ubmFtZT09PWUpe2lbdV09czticmVha311PT09bCYmaS5wdXNoKHMpfW8udHdlZW49aX19KShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Sm4odGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7Sm4odGhpcyx0KS5kZWxheT1lfX0pKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj1lfX0pKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt0cih0aGlzLHQpLmVhc2U9ZX19KGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmVhc2V9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLE1hdGgsZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KTt2YXIgY3I9MipNYXRoLlBJLGZyPShmdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1jcik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZSpNYXRoLnBvdygyLDEwKi0tdCkqTWF0aC5zaW4oKHItdCkvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipjcil9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLGZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPWNyKTtmdW5jdGlvbiBpKHQpe3JldHVybiAxLWUqTWF0aC5wb3coMiwtMTAqKHQ9K3QpKSpNYXRoLnNpbigodCtyKS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKmNyKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Y3IpO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2UqTWF0aC5wb3coMiwxMCp0KSpNYXRoLnNpbigoci10KS9uKToyLWUqTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKHIrdCkvbikpLzJ9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipjcil9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLHt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn19KTtmdW5jdGlvbiBocih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBmci50aW1lPVJuKCksZnI7cmV0dXJuIG59ZnVuY3Rpb24gZHIodCl7cmV0dXJue3R5cGU6dH19UXQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLG8pKG49b1tpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT5HbiYmbi5zdGF0ZTxabixuLnN0YXRlPVhuLG4udGltZXIuc3RvcCgpLHImJm4ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tpXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSh0aGlzLHQpfSl9LFF0LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIGFyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9c3IoKSwobj1mcikudGltZT1SbigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEscz1yW29dLHU9cy5sZW5ndGgsbD0wO2w8dTsrK2wpKGE9c1tsXSkmJiRuKGEsdCxlLGwscyxufHxocihhLGUpKTtyZXR1cm4gbmV3IGFyKHIsdGhpcy5fcGFyZW50cyx0LGUpfSxbImUiLCJ3Il0ubWFwKGRyKSxbIm4iLCJzIl0ubWFwKGRyKSxbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLm1hcChkciksTWF0aCxNYXRoLE1hdGgsTWF0aCxBcnJheTt2YXIgcHI9TWF0aC5QSSxtcj0yKnByLHlyPW1yLTFlLTY7ZnVuY3Rpb24gZ3IoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB2cigpe3JldHVybiBuZXcgZ3J9Z3IucHJvdG90eXBlPXZyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3IsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPShuPStuKS0odD0rdCksdT0ocj0rciktKGU9K2UpLGw9by10LGM9YS1lLGY9bCpsK2MqYztpZigoaT0raSk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihmPjFlLTYpaWYoTWF0aC5hYnMoYypzLXUqbCk+MWUtNiYmaSl7dmFyIGg9bi1vLGQ9ci1hLHA9cypzK3UqdSxtPWgqaCtkKmQseT1NYXRoLnNxcnQocCksZz1NYXRoLnNxcnQoZiksdj1pKk1hdGgudGFuKChwci1NYXRoLmFjb3MoKHArZi1tKS8oMip5KmcpKSkvMiksYj12L2csXz12L3k7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYipsKSsiLCIrKGUrYipjKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGMqaD5sKmQpKyIsIisodGhpcy5feDE9dCtfKnMpKyIsIisodGhpcy5feTE9ZStfKnUpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSl9LGFyYzpmdW5jdGlvbih0LGUsbixyLGksbyl7dD0rdCxlPStlO3ZhciBhPShuPStuKSpNYXRoLmNvcyhyKSxzPW4qTWF0aC5zaW4ociksdT10K2EsbD1lK3MsYz0xXm8sZj1vP3ItaTppLXI7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIit1KyIsIitsOihNYXRoLmFicyh0aGlzLl94MS11KT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS1sKT4xZS02KSYmKHRoaXMuXys9IkwiK3UrIiwiK2wpLG4mJihmPDAmJihmPWYlbXIrbXIpLGY+eXI/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2MrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2MrIiwiKyh0aGlzLl94MT11KSsiLCIrKHRoaXMuX3kxPWwpOmY+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoZj49cHIpKyIsIitjKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgYnI9dnI7ZnVuY3Rpb24gX3IoKXt9ZnVuY3Rpb24gd3IodCxlKXt2YXIgbj1uZXcgX3I7aWYodCBpbnN0YW5jZW9mIF9yKXQuZWFjaChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytpPG87KW4uc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxvOyluLnNldChlKHI9dFtpXSxpLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCluLnNldChhLHRbYV0pO3JldHVybiBufWZ1bmN0aW9uIHhyKCl7fV9yLnByb3RvdHlwZT13ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9yLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBPcj13ci5wcm90b3R5cGU7eHIucHJvdG90eXBlPShmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB4cjtpZih0IGluc3RhbmNlb2YgeHIpdC5lYWNoKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgcj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK3I8aTspbi5hZGQodFtyXSk7ZWxzZSBmb3IoOysrcjxpOyluLmFkZChlKHRbcl0scix0KSl9cmV0dXJuIG59KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhyLGhhczpPci5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpPci5yZW1vdmUsY2xlYXI6T3IuY2xlYXIsdmFsdWVzOk9yLmtleXMsc2l6ZTpPci5zaXplLGVtcHR5Ok9yLmVtcHR5LGVhY2g6T3IuZWFjaH0sQXJyYXk7dmFyIENyPXt9LFNyPXt9LEVyPTM0LGtyPTEwLFRyPTEzO2Z1bmN0aW9uIElyKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iil9dmFyIEFyPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIHIodCxlKXt2YXIgcixpPVtdLG89dC5sZW5ndGgsYT0wLHM9MCx1PW88PTAsbD0hMTtmdW5jdGlvbiBjKCl7aWYodSlyZXR1cm4gU3I7aWYobClyZXR1cm4gbD0hMSxDcjt2YXIgZSxyLGk9YTtpZih0LmNoYXJDb2RlQXQoaSk9PT1Fcil7Zm9yKDthKys8byYmdC5jaGFyQ29kZUF0KGEpIT09RXJ8fHQuY2hhckNvZGVBdCgrK2EpPT09RXI7KTtyZXR1cm4oZT1hKT49bz91PSEwOihyPXQuY2hhckNvZGVBdChhKyspKT09PWtyP2w9ITA6cj09PVRyJiYobD0hMCx0LmNoYXJDb2RlQXQoYSk9PT1rciYmKythKSx0LnNsaWNlKGkrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKChyPXQuY2hhckNvZGVBdChlPWErKykpPT09a3IpbD0hMDtlbHNlIGlmKHI9PT1UcilsPSEwLHQuY2hhckNvZGVBdChhKT09PWtyJiYrK2E7ZWxzZSBpZihyIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShpLGUpfXJldHVybiB1PSEwLHQuc2xpY2UoaSxvKX1mb3IodC5jaGFyQ29kZUF0KG8tMSk9PT1rciYmLS1vLHQuY2hhckNvZGVBdChvLTEpPT09VHImJi0tbzsocj1jKCkpIT09U3I7KXtmb3IodmFyIGY9W107ciE9PUNyJiZyIT09U3I7KWYucHVzaChyKSxyPWMoKTtlJiZudWxsPT0oZj1lKGYscysrKSl8fGkucHVzaChmKX1yZXR1cm4gaX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6ZS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvPXIodCxmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO2k9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj1Jcih0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gZShuKHIpLGksdCl9fSh0LGUpOklyKHQpfSk7cmV0dXJuIG8uY29sdW1ucz1pfHxbXSxvfSxwYXJzZVJvd3M6cixmb3JtYXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09biYmKG49ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBlfHxuLnB1c2goZVtyXT1yKX0pLG59KGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pLmpvaW4odCl9KSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoaSkuam9pbigiXG4iKX19fSxqcj1BcigiLCIpLnBhcnNlLFByPUFyKCJcdCIpLnBhcnNlO2Z1bmN0aW9uIE1yKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC50ZXh0KCl9dmFyIE5yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihNcil9O2Z1bmN0aW9uIFJyKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCksTnIoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUscil9KX19ZnVuY3Rpb24gRHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIE5yKGUsbikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KX19UnIoanIpLFJyKFByKSxEcigiYXBwbGljYXRpb24veG1sIiksRHIoInRleHQvaHRtbCIpO3ZhciBMcj1EcigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIEZyKHQsZSxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgaSxvLGEscyx1LGwsYyxmLGgsZD10Ll9yb290LHA9e2RhdGE6cn0sbT10Ll94MCx5PXQuX3kwLGc9dC5feDEsdj10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKGw9ZT49KG89KG0rZykvMikpP209bzpnPW8sKGM9bj49KGE9KHkrdikvMikpP3k9YTp2PWEsaT1kLCEoZD1kW2Y9Yzw8MXxsXSkpcmV0dXJuIGlbZl09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksdT0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmbj09PXUpcmV0dXJuIHAubmV4dD1kLGk/aVtmXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwobD1lPj0obz0obStnKS8yKSk/bT1vOmc9bywoYz1uPj0oYT0oeSt2KS8yKSk/eT1hOnY9YX13aGlsZSgoZj1jPDwxfGwpPT0oaD0odT49YSk8PDF8cz49bykpO3JldHVybiBpW2hdPWQsaVtmXT1wLHR9dmFyIFZyPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1pfTtmdW5jdGlvbiBVcih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB6cih0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBCcih0LGUsbixyLGksbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIEhyKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgV3I9KGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgQnIobnVsbD09ZT9VcjplLG51bGw9PW4/enI6bixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9KS5wcm90b3R5cGU9QnIucHJvdG90eXBlO1dyLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IEJyKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBuO2lmKCFyLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1IcihyKSxuO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPXIuc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPUhyKGUpKTtyZXR1cm4gbn0sV3IuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gRnIodGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sV3IuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksdT0xLzAsbD0xLzAsYz0tMS8wLGY9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09cixzW25dPWkscjx1JiYodT1yKSxyPmMmJihjPXIpLGk8bCYmKGw9aSksaT5mJiYoZj1pKSk7Zm9yKGM8dSYmKHU9dGhpcy5feDAsYz10aGlzLl94MSksZjxsJiYobD10aGlzLl95MCxmPXRoaXMuX3kxKSx0aGlzLmNvdmVyKHUsbCkuY292ZXIoYyxmKSxuPTA7bjxvOysrbilGcih0aGlzLGFbbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sV3IuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4obikpaT0obj1NYXRoLmZsb29yKHQpKSsxLG89KHI9TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEobj50fHx0Pml8fHI+ZXx8ZT5vKSlyZXR1cm4gdGhpczt2YXIgYSxzLHU9aS1uLGw9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwocitvKS8yKTw8MXx0PChuK2kpLzIpe2Nhc2UgMDpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKG89cisodSo9MiksdD4oaT1uK3UpfHxlPm8pO2JyZWFrO2Nhc2UgMTpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKG89cisodSo9MiksKG49aS11KT50fHxlPm8pO2JyZWFrO2Nhc2UgMjpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKHI9by0odSo9MiksdD4oaT1uK3UpfHxyPmUpO2JyZWFrO2Nhc2UgMzpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWwsbD1hfXdoaWxlKHI9by0odSo9MiksKG49aS11KT50fHxyPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1sKX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfSxXci5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pLHR9LFdyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sV3IuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvLGEscyx1LGwsYz10aGlzLl94MCxmPXRoaXMuX3kwLGg9dGhpcy5feDEsZD10aGlzLl95MSxwPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmcC5wdXNoKG5ldyBWcihtLGMsZixoLGQpKSxudWxsPT1uP249MS8wOihjPXQtbixmPWUtbixoPXQrbixkPWUrbixuKj1uKTt1PXAucG9wKCk7KWlmKCEoIShtPXUubm9kZSl8fChpPXUueDApPmh8fChvPXUueTApPmR8fChhPXUueDEpPGN8fChzPXUueTEpPGYpKWlmKG0ubGVuZ3RoKXt2YXIgeT0oaSthKS8yLGc9KG8rcykvMjtwLnB1c2gobmV3IFZyKG1bM10seSxnLGEscyksbmV3IFZyKG1bMl0saSxnLHkscyksbmV3IFZyKG1bMV0seSxvLGEsZyksbmV3IFZyKG1bMF0saSxvLHksZykpLChsPShlPj1nKTw8MXx0Pj15KSYmKHU9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS1sXSxwW3AubGVuZ3RoLTEtbF09dSl9ZWxzZXt2YXIgdj10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLGI9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxfPXYqditiKmI7aWYoXzxuKXt2YXIgdz1NYXRoLnNxcnQobj1fKTtjPXQtdyxmPWUtdyxoPXQrdyxkPWUrdyxyPW0uZGF0YX19cmV0dXJuIHJ9LFdyLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLHIsaSxvLGEscyx1LGwsYyxmLGgsZD10aGlzLl9yb290LHA9dGhpcy5feDAsbT10aGlzLl95MCx5PXRoaXMuX3gxLGc9dGhpcy5feTE7aWYoIWQpcmV0dXJuIHRoaXM7aWYoZC5sZW5ndGgpZm9yKDs7KXtpZigobD1vPj0ocz0ocCt5KS8yKSk/cD1zOnk9cywoYz1hPj0odT0obStnKS8yKSk/bT11Omc9dSxlPWQsIShkPWRbZj1jPDwxfGxdKSlyZXR1cm4gdGhpcztpZighZC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYobj1lLGg9Zil9Zm9yKDtkLmRhdGEhPT10OylpZihyPWQsIShkPWQubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9ZC5uZXh0KSYmZGVsZXRlIGQubmV4dCxyPyhpP3IubmV4dD1pOmRlbGV0ZSByLm5leHQsdGhpcyk6ZT8oaT9lW2ZdPWk6ZGVsZXRlIGVbZl0sKGQ9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJmQ9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFkLmxlbmd0aCYmKG4/bltoXT1kOnRoaXMuX3Jvb3Q9ZCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sV3IucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sV3Iucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxXci5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LFdyLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxzPVtdLHU9dGhpcy5fcm9vdDtmb3IodSYmcy5wdXNoKG5ldyBWcih1LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdCh1PWUubm9kZSxyPWUueDAsaT1lLnkwLG89ZS54MSxhPWUueTEpJiZ1Lmxlbmd0aCl7dmFyIGw9KHIrbykvMixjPShpK2EpLzI7KG49dVszXSkmJnMucHVzaChuZXcgVnIobixsLGMsbyxhKSksKG49dVsyXSkmJnMucHVzaChuZXcgVnIobixyLGMsbCxhKSksKG49dVsxXSkmJnMucHVzaChuZXcgVnIobixsLGksbyxjKSksKG49dVswXSkmJnMucHVzaChuZXcgVnIobixyLGksbCxjKSl9cmV0dXJuIHRoaXN9LFdyLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IFZyKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgaT1lLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBvLGE9ZS54MCxzPWUueTAsdT1lLngxLGw9ZS55MSxjPShhK3UpLzIsZj0ocytsKS8yOyhvPWlbMF0pJiZuLnB1c2gobmV3IFZyKG8sYSxzLGMsZikpLChvPWlbMV0pJiZuLnB1c2gobmV3IFZyKG8sYyxzLHUsZikpLChvPWlbMl0pJiZuLnB1c2gobmV3IFZyKG8sYSxmLGMsbCkpLChvPWlbM10pJiZuLnB1c2gobmV3IFZyKG8sYyxmLHUsbCkpfXIucHVzaChlKX1mb3IoO2U9ci5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LFdyLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxXci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sTWF0aCxNYXRoLnNxcnQoNSk7dmFyIHFyPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfSxZcj1mdW5jdGlvbih0KXtyZXR1cm4odD1xcihNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxHcj0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gUXIodCl7cmV0dXJuIG5ldyBLcih0KX1mdW5jdGlvbiBLcih0KXtpZighKGU9R3IuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTt0aGlzLmZpbGw9ZVsxXXx8IiAiLHRoaXMuYWxpZ249ZVsyXXx8Ij4iLHRoaXMuc2lnbj1lWzNdfHwiLSIsdGhpcy5zeW1ib2w9ZVs0XXx8IiIsdGhpcy56ZXJvPSEhZVs1XSx0aGlzLndpZHRoPWVbNl0mJitlWzZdLHRoaXMuY29tbWE9ISFlWzddLHRoaXMucHJlY2lzaW9uPWVbOF0mJitlWzhdLnNsaWNlKDEpLHRoaXMudHJpbT0hIWVbOV0sdGhpcy50eXBlPWVbMTBdfHwiIn1Rci5wcm90b3R5cGU9S3IucHJvdG90eXBlLEtyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBacixYciwkcixKcix0aT1mdW5jdGlvbih0KXt0OmZvcih2YXIgZSxuPXQubGVuZ3RoLHI9MSxpPS0xO3I8bjsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6aT1lPXI7YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9ciksZT1yO2JyZWFrO2RlZmF1bHQ6aWYoaT4wKXtpZighK3Rbcl0pYnJlYWsgdDtpPTB9fXJldHVybiBpPjA/dC5zbGljZSgwLGkpK3Quc2xpY2UoZSsxKTp0fSxlaT1mdW5jdGlvbih0LGUpe3ZhciBuPXFyKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK3I6ci5sZW5ndGg+aSsxP3Iuc2xpY2UoMCxpKzEpKyIuIityLnNsaWNlKGkrMSk6cituZXcgQXJyYXkoaS1yLmxlbmd0aCsyKS5qb2luKCIwIil9LG5pPXsiJSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQoZSl9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9FeHBvbmVudGlhbChlKX0sZjpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRml4ZWQoZSl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LGUpe3JldHVybiBlaSgxMDAqdCxlKX0scjplaSxzOmZ1bmN0aW9uKHQsZSl7dmFyIG49cXIodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXSxvPWktKFpyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxhPXIubGVuZ3RoO3JldHVybiBvPT09YT9yOm8+YT9yK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9yLnNsaWNlKDAsbykrIi4iK3Iuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrcXIodCxNYXRoLm1heCgwLGUrby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0scmk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGlpPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO1hyPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz8oZT10Lmdyb3VwaW5nLG49dC50aG91c2FuZHMsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsbz1bXSxhPTAscz1lWzBdLHU9MDtpPjAmJnM+MCYmKHUrcysxPnImJihzPU1hdGgubWF4KDEsci11KSksby5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgodSs9cysxKT5yKSk7KXM9ZVthPShhKzEpJWUubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihuKX0pOnJpLGk9dC5jdXJyZW5jeSxvPXQuZGVjaW1hbCxhPXQubnVtZXJhbHM/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbK2VdfSl9fSh0Lm51bWVyYWxzKTpyaSxzPXQucGVyY2VudHx8IiUiO2Z1bmN0aW9uIHUodCl7dmFyIGU9KHQ9UXIodCkpLmZpbGwsbj10LmFsaWduLHU9dC5zaWduLGw9dC5zeW1ib2wsYz10Lnplcm8sZj10LndpZHRoLGg9dC5jb21tYSxkPXQucHJlY2lzaW9uLHA9dC50cmltLG09dC50eXBlOyJuIj09PW0/KGg9ITAsbT0iZyIpOm5pW21dfHwobnVsbD09ZCYmKGQ9MTIpLHA9ITAsbT0iZyIpLChjfHwiMCI9PT1lJiYiPSI9PT1uKSYmKGM9ITAsZT0iMCIsbj0iPSIpO3ZhciB5PSIkIj09PWw/aVswXToiIyI9PT1sJiYvW2JveFhdLy50ZXN0KG0pPyIwIittLnRvTG93ZXJDYXNlKCk6IiIsZz0iJCI9PT1sP2lbMV06L1slcF0vLnRlc3QobSk/czoiIix2PW5pW21dLGI9L1tkZWZncHJzJV0vLnRlc3QobSk7ZnVuY3Rpb24gXyh0KXt2YXIgaSxzLGwsXz15LHc9ZztpZigiYyI9PT1tKXc9dih0KSt3LHQ9IiI7ZWxzZXt2YXIgeD0odD0rdCk8MDtpZih0PXYoTWF0aC5hYnModCksZCkscCYmKHQ9dGkodCkpLHgmJjA9PSt0JiYoeD0hMSksXz0oeD8iKCI9PT11P3U6Ii0iOiItIj09PXV8fCIoIj09PXU/IiI6dSkrXyx3PSgicyI9PT1tP2lpWzgrWnIvM106IiIpK3crKHgmJiIoIj09PXU/IikiOiIiKSxiKWZvcihpPS0xLHM9dC5sZW5ndGg7KytpPHM7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChpKSl8fGw+NTcpe3c9KDQ2PT09bD9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKSt3LHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1oJiYhYyYmKHQ9cih0LDEvMCkpO3ZhciBPPV8ubGVuZ3RoK3QubGVuZ3RoK3cubGVuZ3RoLEM9TzxmP25ldyBBcnJheShmLU8rMSkuam9pbihlKToiIjtzd2l0Y2goaCYmYyYmKHQ9cihDK3QsQy5sZW5ndGg/Zi13Lmxlbmd0aDoxLzApLEM9IiIpLG4pe2Nhc2UiPCI6dD1fK3QrdytDO2JyZWFrO2Nhc2UiPSI6dD1fK0MrdCt3O2JyZWFrO2Nhc2UiXiI6dD1DLnNsaWNlKDAsTz1DLmxlbmd0aD4+MSkrXyt0K3crQy5zbGljZShPKTticmVhaztkZWZhdWx0OnQ9QytfK3Qrd31yZXR1cm4gYSh0KX1yZXR1cm4gZD1udWxsPT1kPzY6L1tncHJzXS8udGVzdChtKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGQpKSxfLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LF99cmV0dXJue2Zvcm1hdDp1LGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPXUoKCh0PVFyKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihZcihlKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLG89aWlbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihpKnQpK299fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLCRyPVhyLmZvcm1hdCxKcj1Yci5mb3JtYXRQcmVmaXg7dmFyIG9pPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhaX07ZnVuY3Rpb24gYWkoKXt0aGlzLnJlc2V0KCl9YWkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphaSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe3VpKHNpLHQsdGhpcy50KSx1aSh0aGlzLHNpLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1zaS50OnRoaXMucz1zaS50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBzaT1uZXcgYWk7ZnVuY3Rpb24gdWkodCxlLG4pe3ZhciByPXQucz1lK24saT1yLWU7dC50PWUtKHItaSkrKG4taSl9dmFyIGxpPU1hdGguUEksY2k9bGkvMixmaT0yKmxpLGhpPWxpLzE4MCxkaT0oTWF0aCxNYXRoLmF0YW4pLHBpPU1hdGguYXRhbjIsbWk9TWF0aC5jb3MseWk9KE1hdGgsTWF0aCxNYXRoLE1hdGgsTWF0aCxNYXRoLnNpbiksZ2k9KE1hdGgsTWF0aC5zcXJ0KTtmdW5jdGlvbiB2aSh0KXtyZXR1cm4gdD4xP2NpOnQ8LTE/LWNpOk1hdGguYXNpbih0KX1mdW5jdGlvbiBiaSh0LGUpe3JldHVyblt0PmxpP3QtZmk6dDwtbGk/dCtmaTp0LGVdfWZ1bmN0aW9uIF9pKCl7fWZ1bmN0aW9uIHdpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPW1pKGUpLGk9bWkobiksbz10KHIqaSk7cmV0dXJuW28qaSp5aShlKSxvKnlpKG4pXX19ZnVuY3Rpb24geGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9Z2koZSplK24qbiksaT10KHIpLG89eWkoaSksYT1taShpKTtyZXR1cm5bcGkoZSpvLHIqYSksdmkociYmbipvL3IpXX19ZnVuY3Rpb24gT2kodCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBDaSh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIFNpKHQsZSl7dmFyIG4scixpLG8sYSxzPW5ldyBJaSh0KSx1PSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSxsPVtzXTtmb3IobnVsbD09ZSYmKGU9RWkpO249bC5wb3AoKTspaWYodSYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKGE9aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShhKSxvPWEtMTtvPj0wOy0tbylsLnB1c2gocj1uLmNoaWxkcmVuW29dPW5ldyBJaShpW29dKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKFRpKX1mdW5jdGlvbiBFaSh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBraSh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gVGkodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBJaSh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1NYXRoLG9pKCksb2koKSxvaSgpLGJpLmludmVydD1iaSxvaSgpLG9pKCksb2koKSxvaSgpLG9pKCksX2kucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpfaSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxtaSgzMCpoaSksd2koZnVuY3Rpb24odCl7cmV0dXJuIGdpKDIvKDErdCkpfSkuaW52ZXJ0PXhpKGZ1bmN0aW9uKHQpe3JldHVybiAyKnZpKHQvMil9KSx3aShmdW5jdGlvbih0KXtyZXR1cm4odD0oZT10KT4xPzA6ZTwtMT9saTpNYXRoLmFjb3MoZSkpJiZ0L3lpKHQpO3ZhciBlfSkuaW52ZXJ0PXhpKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksT2kuaW52ZXJ0PU9pLHhpKGRpKSx4aSh2aSkseGkoZnVuY3Rpb24odCl7cmV0dXJuIDIqZGkodCl9KSxJaS5wcm90b3R5cGU9U2kucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJaSxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihDaSl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3Iocj0wLGk9bi5sZW5ndGg7cjxpOysrcilhLnB1c2gobltyXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpPXRoaXMsbz1baV0sYT1bXTtpPW8ucG9wKCk7KWlmKGEucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24pby5wdXNoKGVbbl0pO2Zvcig7aT1hLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksZT1yLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4paS5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0rdChlLmRhdGEpfHwwLHI9ZS5jaGlsZHJlbixpPXImJnIubGVuZ3RoOy0taT49MDspbis9cltpXS52YWx1ZTtlLnZhbHVlPW59KX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgbj10LmFuY2VzdG9ycygpLHI9ZS5hbmNlc3RvcnMoKSxpPW51bGw7Zm9yKHQ9bi5wb3AoKSxlPXIucG9wKCk7dD09PWU7KWk9dCx0PW4ucG9wKCksZT1yLnBvcCgpO3JldHVybiBpfShlLHQpLHI9W2VdO2UhPT1uOylyLnB1c2goZT1lLnBhcmVudCk7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1uOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBTaSh0aGlzKS5lYWNoQmVmb3JlKGtpKX19LEFycmF5O3ZhciBBaT1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSx1PWEubGVuZ3RoLGw9dC52YWx1ZSYmKHItZSkvdC52YWx1ZTsrK3M8dTspKG89YVtzXSkueTA9bixvLnkxPWksby54MD1lLG8ueDE9ZSs9by52YWx1ZSpsfTtPYmplY3QuY3JlYXRlKElpLnByb3RvdHlwZSk7dmFyIGppPWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLHU9YS5sZW5ndGgsbD10LnZhbHVlJiYoaS1uKS90LnZhbHVlOysrczx1Oykobz1hW3NdKS54MD1lLG8ueDE9cixvLnkwPW4sby55MT1uKz1vLnZhbHVlKmx9LFBpPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBNaSh0LGUsbixyLGksbyl7Zm9yKHZhciBhLHMsdSxsLGMsZixoLGQscCxtLHksZz1bXSx2PWUuY2hpbGRyZW4sYj0wLF89MCx3PXYubGVuZ3RoLHg9ZS52YWx1ZTtiPHc7KXt1PWktbixsPW8tcjtkb3tjPXZbXysrXS52YWx1ZX13aGlsZSghYyYmXzx3KTtmb3IoZj1oPWMseT1jKmMqKG09TWF0aC5tYXgobC91LHUvbCkvKHgqdCkpLHA9TWF0aC5tYXgoaC95LHkvZik7Xzx3OysrXyl7aWYoYys9cz12W19dLnZhbHVlLHM8ZiYmKGY9cykscz5oJiYoaD1zKSx5PWMqYyptLChkPU1hdGgubWF4KGgveSx5L2YpKT5wKXtjLT1zO2JyZWFrfXA9ZH1nLnB1c2goYT17dmFsdWU6YyxkaWNlOnU8bCxjaGlsZHJlbjp2LnNsaWNlKGIsXyl9KSxhLmRpY2U/QWkoYSxuLHIsaSx4P3IrPWwqYy94Om8pOmppKGEsbixyLHg/bis9dSpjL3g6aSxvKSx4LT1jLGI9X31yZXR1cm4gZ30oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixyLGksbyl7TWkoZSx0LG4scixpLG8pfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KShQaSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixyLGksbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09ZSlmb3IodmFyIGEscyx1LGwsYyxmPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrZjxoOyl7Zm9yKHU9KHM9YVtmXSkuY2hpbGRyZW4sbD1zLnZhbHVlPTAsYz11Lmxlbmd0aDtsPGM7KytsKXMudmFsdWUrPXVbbF0udmFsdWU7cy5kaWNlP0FpKHMsbixyLGkscis9KG8tcikqcy52YWx1ZS9kKTpqaShzLG4scixuKz0oaS1uKSpzLnZhbHVlL2QsbyksZC09cy52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PWE9TWkoZSx0LG4scixpLG8pLGEucmF0aW89ZX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufShQaSk7dmFyIE5pPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LFJpPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGk7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIG87aWYobnVsbCE9cilvPXIscj1udWxsO2Vsc2UgZG97cj0yKmUoKS0xLG89MiplKCktMSxpPXIqcitvKm99d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrbipvKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpKSxEaT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9Umkuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KE5pKSksTGk9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1EaS5zb3VyY2UoZSkodCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShOaSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLWUoKSkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpLEFycmF5LnByb3RvdHlwZSksRmk9TGkubWFwLFZpPUxpLnNsaWNlLFVpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0semk9ZnVuY3Rpb24odCl7cmV0dXJuK3R9LEJpPVswLDFdO2Z1bmN0aW9uIEhpKHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OlVpKGUpfWZ1bmN0aW9uIFdpKHQsZSxuLHIpe3ZhciBpPXRbMF0sbz10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIG88aT8oaT1uKG8saSksYT1yKHMsYSkpOihpPW4oaSxvKSxhPXIoYSxzKSksZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fWZ1bmN0aW9uIHFpKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPW4odFtzXSx0W3MrMV0pLGFbc109cihlW3NdLGVbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPVYodCxlLDEsaSktMTtyZXR1cm4gYVtuXShvW25dKGUpKX19dmFyIFlpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9WChpLG8sbnVsbD09ZT8xMDplKTtzd2l0Y2goKG49UXIobnVsbD09bj8iLGYiOm4pKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKTtyZXR1cm4gbnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihZcihlKS8zKSkpLVlyKE1hdGguYWJzKHQpKSl9KGEscykpfHwobi5wcmVjaXNpb249ciksSnIobixzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4ocj1mdW5jdGlvbih0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLFlyKGUpLVlyKHQpKSsxfShhLE1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKSkpfHwobi5wcmVjaXNpb249ci0oImUiPT09bi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1ZcihNYXRoLmFicyh0KSkpfShhKSl8fChuLnByZWNpc2lvbj1yLTIqKCIlIj09PW4udHlwZSkpfXJldHVybiAkcihuKX07ZnVuY3Rpb24gR2koKXt2YXIgdD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPUJpLGE9Qmkscz1obix1PSExO2Z1bmN0aW9uIGwoKXtyZXR1cm4gbj1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj9xaTpXaSxyPWk9bnVsbCxjfWZ1bmN0aW9uIGMoZSl7cmV0dXJuKHJ8fChyPW4obyxhLHU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dChlPStlLG49K24pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9ZT8wOnQ+PW4/MTpyKHQpfX19KHQpOnQscykpKSgrZSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihpfHwoaT1uKGEsbyxIaSx1P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/ZTp0Pj0xP246cih0KX19fShlKTplKSkpKCt0KX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RmkuY2FsbCh0LHppKSxsKCkpOm8uc2xpY2UoKX0sYy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1WaS5jYWxsKHQpLGwoKSk6YS5zbGljZSgpfSxjLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9VmkuY2FsbCh0KSxzPWRuLGwoKX0sYy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXQsbCgpKTp1fSxjLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCgpKTpzfSxsKCl9KEhpLHVuKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGU9dCxHaSgpLmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKTt2YXIgZX0sZnVuY3Rpb24odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBLKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoZSgpLHQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaT1lKCksbz0wLGE9aS5sZW5ndGgtMSxzPWlbb10sdT1pW2FdO3JldHVybiB1PHMmJihyPXMscz11LHU9cixyPW8sbz1hLGE9ciksKHI9WihzLHUsbikpPjA/cj1aKHM9TWF0aC5mbG9vcihzL3IpKnIsdT1NYXRoLmNlaWwodS9yKSpyLG4pOnI8MCYmKHI9WihzPU1hdGguY2VpbChzKnIpL3IsdT1NYXRoLmZsb29yKHUqcikvcixuKSkscj4wPyhpW29dPU1hdGguZmxvb3Iocy9yKSpyLGlbYV09TWF0aC5jZWlsKHUvcikqcixlKGkpKTpyPDAmJihpW29dPU1hdGguY2VpbChzKnIpL3IsaVthXT1NYXRoLmZsb29yKHUqcikvcixlKGkpKSx0fSx0fSh0KX12YXIgUWk9bmV3IERhdGUsS2k9bmV3IERhdGU7ZnVuY3Rpb24gWmkodCxlLG4scil7ZnVuY3Rpb24gaShlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX1yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KSxuPWkuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LGkucmFuZ2U9ZnVuY3Rpb24obixyLG8pe3ZhciBhLHM9W107aWYobj1pLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48ciYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxyKTtyZXR1cm4gc30saS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIFppKGZ1bmN0aW9uKGUpe2lmKGU+PWUpZm9yKDt0KGUpLCFuKGUpOyllLnNldFRpbWUoZS0xKX0sZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KX0sbiYmKGkuY291bnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gUWkuc2V0VGltZSgrZSksS2kuc2V0VGltZSgrciksdChRaSksdChLaSksTWF0aC5mbG9vcihuKFFpLEtpKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKGUpe3JldHVybiByKGUpJXQ9PTB9OmZ1bmN0aW9uKGUpe3JldHVybiBpLmNvdW50KDAsZSkldD09MH0pOmk6bnVsbH0pLGl9dmFyIFhpPVppKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSk7WGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9aaShmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSxmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSxmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KTpYaTpudWxsfTt2YXIgJGk9NmU0LEppPTYwNDhlNSx0bz0oWmkoZnVuY3Rpb24odCl7dC5zZXRUaW1lKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzFlMyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pLFppKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvJGkpKiRpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSokaSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvJGl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLFppKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSokaSUzNmU1O2U8MCYmKGUrPTM2ZTUpLHQuc2V0VGltZSgzNmU1Kk1hdGguZmxvb3IoKCt0LWUpLzM2ZTUpK2UpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSokaSkvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpO2Z1bmN0aW9uIGVvKHQpe3JldHVybiBaaShmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKiRpKS9KaX0pfXZhciBubz1lbygwKSxybz1lbygxKSxpbz0oZW8oMiksZW8oMyksZW8oNCkpLG9vPShlbyg1KSxlbyg2KSxaaShmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pKTtvby5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1ppKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pOm51bGx9O3ZhciBhbz1vbyxzbz0oWmkoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqJGkpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLyRpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSk7ZnVuY3Rpb24gdW8odCl7cmV0dXJuIFppKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvSml9KX12YXIgbG89dW8oMCksY289dW8oMSksZm89KHVvKDIpLHVvKDMpLHVvKDQpKSxobz0odW8oNSksdW8oNiksWmkoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSksWmkoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7aG8uZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9aaShmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KTpudWxsfTt2YXIgcG89aG87ZnVuY3Rpb24gbW8odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHlvKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGdvKHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fXZhciB2byxibyxfbyx3bz17Ii0iOiIiLF86IiAiLDA6IjAifSx4bz0vXlxzKlxkKy8sT289L14lLyxDbz0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gU28odCxlLG4pe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiByKyhvPG4/bmV3IEFycmF5KG4tbysxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gRW8odCl7cmV0dXJuIHQucmVwbGFjZShDbywiXFwkJiIpfWZ1bmN0aW9uIGtvKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChFbykuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFRvKHQpe2Zvcih2YXIgZT17fSxuPS0xLHI9dC5sZW5ndGg7KytuPHI7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIElvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEFvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC51PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5VPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFBvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5WPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1vKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5XPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5vKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRG8odCxlLG4pe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRm8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVm8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVW8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lkg9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gem8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lk09K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQm8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSG8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lkw9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV28odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Lkw9TWF0aC5mbG9vcihyWzBdLzFlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcW8odCxlLG4pe3ZhciByPU9vLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByP24rclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gWW8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQuUT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPTFlMyorclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRbyh0LGUpe3JldHVybiBTbyh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIEtvKHQsZSl7cmV0dXJuIFNvKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIFpvKHQsZSl7cmV0dXJuIFNvKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBYbyh0LGUpe3JldHVybiBTbygxK3RvLmNvdW50KGFvKHQpLHQpLGUsMyl9ZnVuY3Rpb24gJG8odCxlKXtyZXR1cm4gU28odC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIEpvKHQsZSl7cmV0dXJuICRvKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gdGEodCxlKXtyZXR1cm4gU28odC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBlYSh0LGUpe3JldHVybiBTbyh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG5hKHQsZSl7cmV0dXJuIFNvKHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gcmEodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGlhKHQsZSl7cmV0dXJuIFNvKG5vLmNvdW50KGFvKHQpLHQpLGUsMil9ZnVuY3Rpb24gb2EodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP2lvKHQpOmlvLmNlaWwodCksU28oaW8uY291bnQoYW8odCksdCkrKDQ9PT1hbyh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBhYSh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBzYSh0LGUpe3JldHVybiBTbyhyby5jb3VudChhbyh0KSx0KSxlLDIpfWZ1bmN0aW9uIHVhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBsYSh0LGUpe3JldHVybiBTbyh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gY2EodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStTbyhlLzYwfDAsIjAiLDIpK1NvKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIGZhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gU28odC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gZGEodCxlKXtyZXR1cm4gU28odC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIHBhKHQsZSl7cmV0dXJuIFNvKDErc28uY291bnQocG8odCksdCksZSwzKX1mdW5jdGlvbiBtYSh0LGUpe3JldHVybiBTbyh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24geWEodCxlKXtyZXR1cm4gbWEodCxlKSsiMDAwIn1mdW5jdGlvbiBnYSh0LGUpe3JldHVybiBTbyh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHZhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gYmEodCxlKXtyZXR1cm4gU28odC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBfYSh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gd2EodCxlKXtyZXR1cm4gU28obG8uY291bnQocG8odCksdCksZSwyKX1mdW5jdGlvbiB4YSh0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/Zm8odCk6Zm8uY2VpbCh0KSxTbyhmby5jb3VudChwbyh0KSx0KSsoND09PXBvKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIE9hKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIENhKHQsZSl7cmV0dXJuIFNvKGNvLmNvdW50KHBvKHQpLHQpLGUsMil9ZnVuY3Rpb24gU2EodCxlKXtyZXR1cm4gU28odC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEVhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBrYSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gVGEoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gSWEodCl7cmV0dXJuK3R9ZnVuY3Rpb24gQWEodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX0hZnVuY3Rpb24odCl7dm89ZnVuY3Rpb24oZSl7dmFyIG49dC5kYXRlVGltZSxyPXQuZGF0ZSxpPXQudGltZSxvPXQucGVyaW9kcyxhPXQuZGF5cyxzPXQuc2hvcnREYXlzLHU9dC5tb250aHMsbD10LnNob3J0TW9udGhzLGM9a28obyksZj1UbyhvKSxoPWtvKGEpLGQ9VG8oYSkscD1rbyhzKSxtPVRvKHMpLHk9a28odSksZz1Ubyh1KSx2PWtvKGwpLGI9VG8obCksXz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlFvLGU6UW8sZjpKbyxIOktvLEk6Wm8sajpYbyxMOiRvLG06dGEsTTplYSxwOmZ1bmN0aW9uKHQpe3JldHVybiBvWysodC5nZXRIb3VycygpPj0xMildfSxROklhLHM6QWEsUzpuYSx1OnJhLFU6aWEsVjpvYSx3OmFhLFc6c2EseDpudWxsLFg6bnVsbCx5OnVhLFk6bGEsWjpjYSwiJSI6VGF9LHc9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpmYSxlOmZhLGY6eWEsSDpoYSxJOmRhLGo6cGEsTDptYSxtOmdhLE06dmEscDpmdW5jdGlvbih0KXtyZXR1cm4gb1srKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0sUTpJYSxzOkFhLFM6YmEsdTpfYSxVOndhLFY6eGEsdzpPYSxXOkNhLHg6bnVsbCxYOm51bGwseTpTYSxZOkVhLFo6a2EsIiUiOlRhfSx4PXthOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1wLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1tW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWguZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PWRbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUsbil7dmFyIHI9di5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09YltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj15LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT1nW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBTKHQsbixlLHIpfSxkOkZvLGU6Rm8sZjpXbyxIOlVvLEk6VW8sajpWbyxMOkhvLG06TG8sTTp6byxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1mW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LFE6WW8sczpHbyxTOkJvLHU6QW8sVTpqbyxWOlBvLHc6SW8sVzpNbyx4OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUyh0LHIsZSxuKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFModCxpLGUsbil9LHk6Um8sWTpObyxaOkRvLCIlIjpxb307ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLG8sYT1bXSxzPS0xLHU9MCxsPXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8bDspMzc9PT10LmNoYXJDb2RlQXQocykmJihhLnB1c2godC5zbGljZSh1LHMpKSxudWxsIT0oaT13b1tyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKG89ZVtyXSkmJihyPW8obixpKSksYS5wdXNoKHIpLHU9cysxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UodSxzKSksYS5qb2luKCIiKX19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLG89Z28oMTkwMCk7aWYoUyhvLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG8pcmV0dXJuIG5ldyBEYXRlKG8uUSk7aWYoInAiaW4gbyYmKG8uSD1vLkglMTIrMTIqby5wKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8ocj0oaT0ocj15byhnbyhvLnkpKSkuZ2V0VVRDRGF5KCkpPjR8fDA9PT1pP2NvLmNlaWwocik6Y28ocikscj1zby5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldFVUQ0Z1bGxZZWFyKCksby5tPXIuZ2V0VVRDTW9udGgoKSxvLmQ9ci5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT0ocj1lKGdvKG8ueSkpKS5nZXREYXkoKSk+NHx8MD09PWk/cm8uY2VpbChyKTpybyhyKSxyPXRvLm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0RnVsbFllYXIoKSxvLm09ci5nZXRNb250aCgpLG8uZD1yLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLGk9IloiaW4gbz95byhnbyhvLnkpKS5nZXRVVENEYXkoKTplKGdvKG8ueSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0oaSs1KSU3Om8udys3Km8uVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAseW8obykpOmUobyl9fWZ1bmN0aW9uIFModCxlLG4scil7Zm9yKHZhciBpLG8sYT0wLHM9ZS5sZW5ndGgsdT1uLmxlbmd0aDthPHM7KXtpZihyPj11KXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihpPWUuY2hhckF0KGErKyksIShvPXhbaSBpbiB3bz9lLmNoYXJBdChhKyspOmldKXx8KHI9byh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4gXy54PU8ocixfKSxfLlg9TyhpLF8pLF8uYz1PKG4sXyksdy54PU8ocix3KSx3Llg9TyhpLHcpLHcuYz1PKG4sdykse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1PKHQrPSIiLF8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPUModCs9IiIsbW8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1PKHQrPSIiLHcpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPUModCx5byk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fSgpLGJvPXZvLnV0Y0Zvcm1hdCxfbz12by51dGNQYXJzZX0oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KSxEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ3x8Ym8oIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLCtuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIil8fF9vKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTt2YXIgamE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPSIjIit0LnNsaWNlKDYqciw2Kisrcik7cmV0dXJuIG59LFBhPShqYSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksamEoIjdmYzk3ZmJlYWVkNGZkYzA4NmZmZmY5OTM4NmNiMGYwMDI3ZmJmNWIxNzY2NjY2NiIpLGphKCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKSxqYSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4IiksamEoImZiYjRhZWIzY2RlM2NjZWJjNWRlY2JlNGZlZDlhNmZmZmZjY2U1ZDhiZGZkZGFlY2YyZjJmMiIpLGphKCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKSxqYSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5IiksamEoIjY2YzJhNWZjOGQ2MjhkYTBjYmU3OGFjM2E2ZDg1NGZmZDkyZmU1YzQ5NGIzYjNiMyIpLGphKCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKSxmdW5jdGlvbih0KXtyZXR1cm4gc24odFt0Lmxlbmd0aC0xXSl9KTtmdW5jdGlvbiBNYSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX1QYShuZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoamEpKSxQYShuZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoamEpKSxTbihHZSgzMDAsLjUsMCksR2UoLTI0MCwuNSwxKSksU24oR2UoLTEwMCwuNzUsLjM1KSxHZSg4MCwxLjUsLjgpKSxTbihHZSgyNjAsLjc1LC4zNSksR2UoODAsMS41LC44KSksR2UoKSxnZSgpLE1hdGgsTWF0aCxNYShqYSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLE1hKGphKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksTWEoamEoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxNYShqYSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO3ZhciBOYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFJhPU1hdGguYWJzLERhPU1hdGguYXRhbjIsTGE9TWF0aC5jb3MsRmE9TWF0aC5tYXgsVmE9TWF0aC5taW4sVWE9TWF0aC5zaW4semE9TWF0aC5zcXJ0LEJhPTFlLTEyLEhhPU1hdGguUEksV2E9SGEvMixxYT0yKkhhO2Z1bmN0aW9uIFlhKHQpe3JldHVybiB0Pj0xP1dhOnQ8PS0xPy1XYTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gR2EodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gUWEodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gS2EodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBaYSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBYYSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiAkYSh0LGUsbixyLGksbyxhKXt2YXIgcz10LW4sdT1lLXIsbD0oYT9vOi1vKS96YShzKnMrdSp1KSxjPWwqdSxmPS1sKnMsaD10K2MsZD1lK2YscD1uK2MsbT1yK2YseT0oaCtwKS8yLGc9KGQrbSkvMix2PXAtaCxiPW0tZCxfPXYqditiKmIsdz1pLW8seD1oKm0tcCpkLE89KGI8MD8tMToxKSp6YShGYSgwLHcqdypfLXgqeCkpLEM9KHgqYi12Kk8pL18sUz0oLXgqdi1iKk8pL18sRT0oeCpiK3YqTykvXyxrPSgteCp2K2IqTykvXyxUPUMteSxJPVMtZyxBPUUteSxqPWstZztyZXR1cm4gVCpUK0kqST5BKkEraipqJiYoQz1FLFM9aykse2N4OkMsY3k6Uyx4MDE6LWMseTAxOi1mLHgxMTpDKihpL3ctMSkseTExOlMqKGkvdy0xKX19dmFyIEphPWZ1bmN0aW9uKCl7dmFyIHQ9R2EsZT1RYSxuPU5hKDApLHI9bnVsbCxpPUthLG89WmEsYT1YYSxzPW51bGw7ZnVuY3Rpb24gdSgpe3ZhciB1LGwsYyxmPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLVdhLHA9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktV2EsbT1SYShwLWQpLHk9cD5kO2lmKHN8fChzPXU9YnIoKSksaDxmJiYobD1oLGg9ZixmPWwpLGg+QmEpaWYobT5xYS1CYSlzLm1vdmVUbyhoKkxhKGQpLGgqVWEoZCkpLHMuYXJjKDAsMCxoLGQscCwheSksZj5CYSYmKHMubW92ZVRvKGYqTGEocCksZipVYShwKSkscy5hcmMoMCwwLGYscCxkLHkpKTtlbHNle3ZhciBnLHYsYj1kLF89cCx3PWQseD1wLE89bSxDPW0sUz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9Uz5CYSYmKHI/K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnphKGYqZitoKmgpKSxrPVZhKFJhKGgtZikvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFQ9ayxJPWs7aWYoRT5CYSl7dmFyIEE9WWEoRS9mKlVhKFMpKSxqPVlhKEUvaCpVYShTKSk7KE8tPTIqQSk+QmE/KHcrPUEqPXk/MTotMSx4LT1BKTooTz0wLHc9eD0oZCtwKS8yKSwoQy09MipqKT5CYT8oYis9aio9eT8xOi0xLF8tPWopOihDPTAsYj1fPShkK3ApLzIpfXZhciBQPWgqTGEoYiksTT1oKlVhKGIpLE49ZipMYSh4KSxSPWYqVWEoeCk7aWYoaz5CYSl7dmFyIEQ9aCpMYShfKSxMPWgqVWEoXyksRj1mKkxhKHcpLFY9ZipVYSh3KTtpZihtPEhhKXt2YXIgVT1PPkJhP2Z1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyl7dmFyIHU9Ri1QLGw9Vi1NLGM9YS1ELGY9cy1MLGg9KGMqKE0tTCktZiooUC1EKSkvKGYqdS1jKmwpO3JldHVybltQK2gqdSxNK2gqbF19KDAsMCwwLDAsMCwwLE4sUik6W04sUl0sej1QLVVbMF0sQj1NLVVbMV0sSD1ELVVbMF0sVz1MLVVbMV0scT0xL1VhKCgoYz0oeipIK0IqVykvKHphKHoqeitCKkIpKnphKEgqSCtXKlcpKSk+MT8wOmM8LTE/SGE6TWF0aC5hY29zKGMpKS8yKSxZPXphKFVbMF0qVVswXStVWzFdKlVbMV0pO1Q9VmEoaywoZi1ZKS8ocS0xKSksST1WYShrLChoLVkpLyhxKzEpKX19Qz5CYT9JPkJhPyhnPSRhKEYsVixQLE0saCxJLHkpLHY9JGEoRCxMLE4sUixoLEkseSkscy5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxJPGs/cy5hcmMoZy5jeCxnLmN5LEksRGEoZy55MDEsZy54MDEpLERhKHYueTAxLHYueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxJLERhKGcueTAxLGcueDAxKSxEYShnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxoLERhKGcuY3krZy55MTEsZy5jeCtnLngxMSksRGEodi5jeSt2LnkxMSx2LmN4K3YueDExKSwheSkscy5hcmModi5jeCx2LmN5LEksRGEodi55MTEsdi54MTEpLERhKHYueTAxLHYueDAxKSwheSkpKToocy5tb3ZlVG8oUCxNKSxzLmFyYygwLDAsaCxiLF8sIXkpKTpzLm1vdmVUbyhQLE0pLGY+QmEmJk8+QmE/VD5CYT8oZz0kYShOLFIsRCxMLGYsLVQseSksdj0kYShQLE0sRixWLGYsLVQseSkscy5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxUPGs/cy5hcmMoZy5jeCxnLmN5LFQsRGEoZy55MDEsZy54MDEpLERhKHYueTAxLHYueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxULERhKGcueTAxLGcueDAxKSxEYShnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxmLERhKGcuY3krZy55MTEsZy5jeCtnLngxMSksRGEodi5jeSt2LnkxMSx2LmN4K3YueDExKSx5KSxzLmFyYyh2LmN4LHYuY3ksVCxEYSh2LnkxMSx2LngxMSksRGEodi55MDEsdi54MDEpLCF5KSkpOnMuYXJjKDAsMCxmLHgsdyx5KTpzLmxpbmVUbyhOLFIpfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLHUpcmV0dXJuIHM9bnVsbCx1KyIifHxudWxsfXJldHVybiB1LmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUhhLzI7cmV0dXJuW0xhKHIpKm4sVWEocikqbl19LHUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpOYSgrZSksdSk6dH0sdS5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTplfSx1LmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTpufSx1LnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6cn0sdS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoK3QpLHUpOml9LHUuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6b30sdS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTphfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsdSk6c30sdX07ZnVuY3Rpb24gdHModCl7dGhpcy5fY29udGV4dD10fXRzLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciBlcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRzKHQpfTtmdW5jdGlvbiBucyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBycyh0KXtyZXR1cm4gdFsxXX12YXIgaXM9ZnVuY3Rpb24oKXt2YXIgdD1ucyxlPXJzLG49TmEoITApLHI9bnVsbCxpPWVzLG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciBzLHUsbCxjPWEubGVuZ3RoLGY9ITE7Zm9yKG51bGw9PXImJihvPWkobD1icigpKSkscz0wO3M8PWM7KytzKSEoczxjJiZuKHU9YVtzXSxzLGEpKT09PWYmJigoZj0hZik/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksZiYmby5wb2ludCgrdCh1LHMsYSksK2UodSxzLGEpKTtpZihsKXJldHVybiBvPW51bGwsbCsiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TmEoK2UpLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSxhKTplfSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSghIXQpLGEpOm59LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYobz1pKHIpKSxhKTppfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1vPW51bGw6bz1pKHI9dCksYSk6cn0sYX0sb3M9ZnVuY3Rpb24oKXt2YXIgdD1ucyxlPW51bGwsbj1OYSgwKSxyPXJzLGk9TmEoITApLG89bnVsbCxhPWVzLHM9bnVsbDtmdW5jdGlvbiB1KHUpe3ZhciBsLGMsZixoLGQscD11Lmxlbmd0aCxtPSExLHk9bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApO2ZvcihudWxsPT1vJiYocz1hKGQ9YnIoKSkpLGw9MDtsPD1wOysrbCl7aWYoIShsPHAmJmkoaD11W2xdLGwsdSkpPT09bSlpZihtPSFtKWM9bCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxmPWwtMTtmPj1jOy0tZilzLnBvaW50KHlbZl0sZ1tmXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9bSYmKHlbbF09K3QoaCxsLHUpLGdbbF09K24oaCxsLHUpLHMucG9pbnQoZT8rZShoLGwsdSk6eVtsXSxyPytyKGgsbCx1KTpnW2xdKSl9aWYoZClyZXR1cm4gcz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gbCgpe3JldHVybiBpcygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gdS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246TmEoK24pLGU9bnVsbCx1KTp0fSx1LngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TmEoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoK3QpLHUpOmV9LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSxyPW51bGwsdSk6bn0sdS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTpufSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTpyfSx1LmxpbmVYMD11LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KG4pfSx1LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBsKCkueCh0KS55KHIpfSx1LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBsKCkueChlKS55KG4pfSx1LmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSghIXQpLHUpOml9LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYocz1hKG8pKSx1KTphfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1zPW51bGw6cz1hKG89dCksdSk6b30sdX07ZnVuY3Rpb24gYXModCl7dGhpcy5fY3VydmU9dH1hcy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19LEFycmF5LE1hdGguc3FydCgxLzMpLE1hdGguc2luKEhhLzEwKSxNYXRoLnNpbig3KkhhLzEwKTt2YXIgc3M9KE1hdGguc2luKHFhLzEwKSxNYXRoLmNvcyhxYS8xMCksTWF0aC5zcXJ0KDMpLE1hdGguc3FydCgzKSxNYXRoLnNxcnQoMTIpLGZ1bmN0aW9uKCl7fSk7ZnVuY3Rpb24gdXModCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIGxzKHQpe3RoaXMuX2NvbnRleHQ9dH1scy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOnVzKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OnVzKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgY3M9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBscyh0KX07ZnVuY3Rpb24gZnModCxlKXt0aGlzLl9iYXNpcz1uZXcgbHModCksdGhpcy5fYmV0YT1lfWZ1bmN0aW9uIGhzKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZHModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWZ1bmN0aW9uIHBzKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBtcyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24geXModCxlLG4pe3ZhciByPXQuX3gxLGk9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPkJhKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSx1PTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtyPShyKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvdSxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvdX1pZih0Ll9sMjNfYT5CYSl7dmFyIGw9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypsK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvYyxhPShhKmwrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9jfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyLGksbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBncyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWZ1bmN0aW9uIHZzKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZnVuY3Rpb24gYnModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1mdW5jdGlvbiBfcyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gd3ModCxlLG4pe3ZhciByPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxvPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLGE9KG4tdC5feTEpLyhpfHxyPDAmJi0wKSxzPShvKmkrYSpyKS8ocitpKTtyZXR1cm4oX3MobykrX3MoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiB4cyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gT3ModCxlLG4pe3ZhciByPXQuX3gwLGk9dC5feDEsbz10Ll95MSxhPShpLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrYSx0Ll95MCthKmUsaS1hLG8tYSpuLGksbyl9ZnVuY3Rpb24gQ3ModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFNzKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBFcygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGtzKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gVHModCxlKXt2YXIgbj1lLHI9ZS5SLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLlI9ci5MLG4uUiYmKG4uUi5VPW4pLHIuTD1ufWZ1bmN0aW9uIElzKHQsZSl7dmFyIG49ZSxyPWUuTCxpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5MPXIuUixuLkwmJihuLkwuVT1uKSxyLlI9bn1mdW5jdGlvbiBBcyh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnMucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgcixpPXRbMF0sbz1lWzBdLGE9dFtuXS1pLHM9ZVtuXS1vLHU9LTE7Kyt1PD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbdV0rKDEtdGhpcy5fYmV0YSkqKGkrKHI9dS9uKSphKSx0aGlzLl9iZXRhKmVbdV0rKDEtdGhpcy5fYmV0YSkqKG8rcipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IGxzKHQpOm5ldyBmcyh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpLGRzLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpocyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6aHModGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IGRzKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLHBzLnByb3RvdHlwZT17YXJlYVN0YXJ0OnNzLGFyZWFFbmQ6c3MsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpocyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgcHModCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCksbXMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6aHModGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IG1zKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLGdzLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6eXModGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGdzKHQsZSk6bmV3IGRzKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSksdnMucHJvdG90eXBlPXthcmVhU3RhcnQ6c3MsYXJlYUVuZDpzcyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDp5cyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgdnModCxlKTpuZXcgcHModCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KSxicy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6eXModGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGJzKHQsZSk6bmV3IG1zKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSksQ3MucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk9zKHRoaXMsdGhpcy5fdDAseHModGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE9zKHRoaXMseHModGhpcyxuPXdzKHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDpPcyh0aGlzLHRoaXMuX3QwLG49d3ModGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwoKGZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQ9bmV3IFNzKHQpfSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQ3MucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtDcy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LFNzLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxyLG4sbyxpKX19LEVzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RXMsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1Bcyh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KHI9bi5VKS5MPyhpPXIuUikmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uUiYmKFRzKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLElzKHRoaXMscikpOihpPXIuTCkmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uTCYmKElzKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLFRzKHRoaXMscikpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLHIsaT10LlUsbz10LkwsYT10LlI7aWYobj1vP2E/QXMoYSk6bzphLGk/aS5MPT09dD9pLkw9bjppLlI9bjp0aGlzLl89bixvJiZhPyhyPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhpPW4uVSxuLlU9dC5VLGkuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1pLGk9bix0PW4uUikpOihyPXQuQyx0PW4pLHQmJih0LlU9aSksIXIpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKGU9aS5SKS5DJiYoZS5DPSExLGkuQz0hMCxUcyh0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLElzKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLFRzKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9aS5MKS5DJiYoZS5DPSExLGkuQz0hMCxJcyh0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLFRzKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLElzKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIganM9RXM7ZnVuY3Rpb24gUHModCxlLG4scil7dmFyIGk9W251bGwsbnVsbF0sbz10dS5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9ZSxuJiZOcyhpLHQsZSxuKSxyJiZOcyhpLGUsdCxyKSwkc1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSwkc1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIE1zKHQsZSxuKXt2YXIgcj1bZSxuXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBOcyh0LGUsbixyKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gUnModCxlLG4scixpKXt2YXIgbyxhPXRbMF0scz10WzFdLHU9YVswXSxsPWFbMV0sYz0wLGY9MSxoPXNbMF0tdSxkPXNbMV0tbDtpZihvPWUtdSxofHwhKG8+MCkpe2lmKG8vPWgsaDwwKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihoPjApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1pZihvPXItdSxofHwhKG88MCkpe2lmKG8vPWgsaDwwKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihoPjApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1pZihvPW4tbCxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihkPjApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1pZihvPWktbCxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9ZWxzZSBpZihkPjApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1yZXR1cm4hKGM+MHx8ZjwxKXx8KGM+MCYmKHRbMF09W3UrYypoLGwrYypkXSksZjwxJiYodFsxXT1bdStmKmgsbCtmKmRdKSwhMCl9fX19fWZ1bmN0aW9uIERzKHQsZSxuLHIsaSl7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsdT10WzBdLGw9dC5sZWZ0LGM9dC5yaWdodCxmPWxbMF0saD1sWzFdLGQ9Y1swXSxwPWNbMV0sbT0oZitkKS8yLHk9KGgrcCkvMjtpZihwPT09aCl7aWYobTxlfHxtPj1yKXJldHVybjtpZihmPmQpe2lmKHUpe2lmKHVbMV0+PWkpcmV0dXJufWVsc2UgdT1bbSxuXTtvPVttLGldfWVsc2V7aWYodSl7aWYodVsxXTxuKXJldHVybn1lbHNlIHU9W20saV07bz1bbSxuXX19ZWxzZSBpZihzPXktKGE9KGYtZCkvKHAtaCkpKm0sYTwtMXx8YT4xKWlmKGY+ZCl7aWYodSl7aWYodVsxXT49aSlyZXR1cm59ZWxzZSB1PVsobi1zKS9hLG5dO289WyhpLXMpL2EsaV19ZWxzZXtpZih1KXtpZih1WzFdPG4pcmV0dXJufWVsc2UgdT1bKGktcykvYSxpXTtvPVsobi1zKS9hLG5dfWVsc2UgaWYoaDxwKXtpZih1KXtpZih1WzBdPj1yKXJldHVybn1lbHNlIHU9W2UsYSplK3NdO289W3IsYSpyK3NdfWVsc2V7aWYodSl7aWYodVswXTxlKXJldHVybn1lbHNlIHU9W3IsYSpyK3NdO289W2UsYSplK3NdfXJldHVybiB0WzBdPXUsdFsxXT1vLCEwfWZ1bmN0aW9uIExzKHQsZSl7dmFyIG49dC5zaXRlLHI9ZS5sZWZ0LGk9ZS5yaWdodDtyZXR1cm4gbj09PWkmJihpPXIscj1uKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KG49PT1yPyhyPWVbMV0saT1lWzBdKToocj1lWzBdLGk9ZVsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gRnModCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIFZzKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgVXMsenM9W107ZnVuY3Rpb24gQnModCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciByPWUuc2l0ZSxpPXQuc2l0ZSxvPW4uc2l0ZTtpZihyIT09byl7dmFyIGE9aVswXSxzPWlbMV0sdT1yWzBdLWEsbD1yWzFdLXMsYz1vWzBdLWEsZj1vWzFdLXMsaD0yKih1KmYtbCpjKTtpZighKGg+PS1udSkpe3ZhciBkPXUqdStsKmwscD1jKmMrZipmLG09KGYqZC1sKnApL2gseT0odSpwLWMqZCkvaCxnPXpzLnBvcCgpfHxuZXcgZnVuY3Rpb24oKXtrcyh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9O2cuYXJjPXQsZy5zaXRlPWksZy54PW0rYSxnLnk9KGcuY3k9eStzKStNYXRoLnNxcnQobSptK3kqeSksdC5jaXJjbGU9Zztmb3IodmFyIHY9bnVsbCxiPUpzLl87YjspaWYoZy55PGIueXx8Zy55PT09Yi55JiZnLng8PWIueCl7aWYoIWIuTCl7dj1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXt2PWI7YnJlYWt9Yj1iLlJ9SnMuaW5zZXJ0KHYsZyksdnx8KFVzPWcpfX19fWZ1bmN0aW9uIEhzKHQpe3ZhciBlPXQuY2lyY2xlO2UmJihlLlB8fChVcz1lLk4pLEpzLnJlbW92ZShlKSx6cy5wdXNoKGUpLGtzKGUpLHQuY2lyY2xlPW51bGwpfXZhciBXcz1bXTtmdW5jdGlvbiBxcyh0KXt2YXIgZT1Xcy5wb3AoKXx8bmV3IGZ1bmN0aW9uKCl7a3ModGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBZcyh0KXtIcyh0KSxYcy5yZW1vdmUodCksV3MucHVzaCh0KSxrcyh0KX1mdW5jdGlvbiBHcyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxyPWUuY3ksaT1bbixyXSxvPXQuUCxhPXQuTixzPVt0XTtZcyh0KTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxldSYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8ZXU7KW89dS5QLHMudW5zaGlmdCh1KSxZcyh1KSx1PW87cy51bnNoaWZ0KHUpLEhzKHUpO2Zvcih2YXIgbD1hO2wuY2lyY2xlJiZNYXRoLmFicyhuLWwuY2lyY2xlLngpPGV1JiZNYXRoLmFicyhyLWwuY2lyY2xlLmN5KTxldTspYT1sLk4scy5wdXNoKGwpLFlzKGwpLGw9YTtzLnB1c2gobCksSHMobCk7dmFyIGMsZj1zLmxlbmd0aDtmb3IoYz0xO2M8ZjsrK2MpTnMoKGw9c1tjXSkuZWRnZSwodT1zW2MtMV0pLnNpdGUsbC5zaXRlLGkpOyhsPXNbZi0xXSkuZWRnZT1QcygodT1zWzBdKS5zaXRlLGwuc2l0ZSxudWxsLGkpLEJzKHUpLEJzKGwpfWZ1bmN0aW9uIFFzKHQpe2Zvcih2YXIgZSxuLHIsaSxvPXRbMF0sYT10WzFdLHM9WHMuXztzOylpZigocj1LcyhzLGEpLW8pPmV1KXM9cy5MO2Vsc2V7aWYoISgoaT1vLVpzKHMsYSkpPmV1KSl7cj4tZXU/KGU9cy5QLG49cyk6aT4tZXU/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXskc1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciB1PXFzKHQpO2lmKFhzLmluc2VydChlLHUpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBIcyhlKSxuPXFzKGUuc2l0ZSksWHMuaW5zZXJ0KHUsbiksdS5lZGdlPW4uZWRnZT1QcyhlLnNpdGUsdS5zaXRlKSxCcyhlKSx2b2lkIEJzKG4pO2lmKG4pe0hzKGUpLEhzKG4pO3ZhciBsPWUuc2l0ZSxjPWxbMF0sZj1sWzFdLGg9dFswXS1jLGQ9dFsxXS1mLHA9bi5zaXRlLG09cFswXS1jLHk9cFsxXS1mLGc9MiooaCp5LWQqbSksdj1oKmgrZCpkLGI9bSptK3kqeSxfPVsoeSp2LWQqYikvZytjLChoKmItbSp2KS9nK2ZdO05zKG4uZWRnZSxsLHAsXyksdS5lZGdlPVBzKGwsdCxudWxsLF8pLG4uZWRnZT1Qcyh0LHAsbnVsbCxfKSxCcyhlKSxCcyhuKX1lbHNlIHUuZWRnZT1QcyhlLnNpdGUsdS5zaXRlKX19ZnVuY3Rpb24gS3ModCxlKXt2YXIgbj10LnNpdGUscj1uWzBdLGk9blsxXSxvPWktZTtpZighbylyZXR1cm4gcjt2YXIgYT10LlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0obj1hLnNpdGUpWzBdLHU9blsxXSxsPXUtZTtpZighbClyZXR1cm4gczt2YXIgYz1zLXIsZj0xL28tMS9sLGg9Yy9sO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZiooYypjLygtMipsKS11K2wvMitpLW8vMikpKS9mK3I6KHIrcykvMn1mdW5jdGlvbiBacyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBLcyhuLGUpO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PWU/clswXToxLzB9dmFyIFhzLCRzLEpzLHR1LGV1PTFlLTYsbnU9MWUtMTI7ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gaXUodCxlKXt2YXIgbixyLGksbz10LnNvcnQocnUpLnBvcCgpO2Zvcih0dT1bXSwkcz1uZXcgQXJyYXkodC5sZW5ndGgpLFhzPW5ldyBqcyxKcz1uZXcganM7OylpZihpPVVzLG8mJighaXx8b1sxXTxpLnl8fG9bMV09PT1pLnkmJm9bMF08aS54KSlvWzBdPT09biYmb1sxXT09PXJ8fChRcyhvKSxuPW9bMF0scj1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztHcyhpLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLHIsaT0wLG89JHMubGVuZ3RoO2k8bzsrK2kpaWYoKHQ9JHNbaV0pJiYocj0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilhW25dPW4sc1tuXT1Mcyh0LHR1W2Vbbl1dKTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pLG49MDtuPHI7KytuKXNbbl09ZVthW25dXTtmb3Iobj0wO248cjsrK24pZVtuXT1zW25dfX0oKSxlKXt2YXIgYT0rZVswXVswXSxzPStlWzBdWzFdLHU9K2VbMV1bMF0sbD0rZVsxXVsxXTshZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpLG89dHUubGVuZ3RoO28tLTspRHMoaT10dVtvXSx0LGUsbixyKSYmUnMoaSx0LGUsbixyKSYmKE1hdGguYWJzKGlbMF1bMF0taVsxXVswXSk+ZXV8fE1hdGguYWJzKGlbMF1bMV0taVsxXVsxXSk+ZXUpfHxkZWxldGUgdHVbb119KGEscyx1LGwpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGYsaCxkLHAsbSx5PSRzLmxlbmd0aCxnPSEwO2ZvcihpPTA7aTx5OysraSlpZihvPSRzW2ldKXtmb3IoYT1vLnNpdGUscz0odT1vLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspdHVbdVtzXV18fHUuc3BsaWNlKHMsMSk7Zm9yKHM9MCxsPXUubGVuZ3RoO3M8bDspcD0oZD1WcyhvLHR1W3Vbc11dKSlbMF0sbT1kWzFdLGY9KGM9RnMobyx0dVt1WysrcyVsXV0pKVswXSxoPWNbMV0sKE1hdGguYWJzKHAtZik+ZXV8fE1hdGguYWJzKG0taCk+ZXUpJiYodS5zcGxpY2UocywwLHR1LnB1c2goTXMoYSxkLE1hdGguYWJzKHAtdCk8ZXUmJnItbT5ldT9bdCxNYXRoLmFicyhmLXQpPGV1P2g6cl06TWF0aC5hYnMobS1yKTxldSYmbi1wPmV1P1tNYXRoLmFicyhoLXIpPGV1P2Y6bixyXTpNYXRoLmFicyhwLW4pPGV1JiZtLWU+ZXU/W24sTWF0aC5hYnMoZi1uKTxldT9oOmVdOk1hdGguYWJzKG0tZSk8ZXUmJnAtdD5ldT9bTWF0aC5hYnMoaC1lKTxldT9mOnQsZV06bnVsbCkpLTEpLCsrbCk7bCYmKGc9ITEpfWlmKGcpe3ZhciB2LGIsXyx3PTEvMDtmb3IoaT0wLGc9bnVsbDtpPHk7KytpKShvPSRzW2ldKSYmKF89KHY9KGE9by5zaXRlKVswXS10KSp2KyhiPWFbMV0tZSkqYik8dyYmKHc9XyxnPW8pO2lmKGcpe3ZhciB4PVt0LGVdLE89W3Qscl0sQz1bbixyXSxTPVtuLGVdO2cuaGFsZmVkZ2VzLnB1c2godHUucHVzaChNcyhhPWcuc2l0ZSx4LE8pKS0xLHR1LnB1c2goTXMoYSxPLEMpKS0xLHR1LnB1c2goTXMoYSxDLFMpKS0xLHR1LnB1c2goTXMoYSxTLHgpKS0xKX19Zm9yKGk9MDtpPHk7KytpKShvPSRzW2ldKSYmKG8uaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlICRzW2ldKX0oYSxzLHUsbCl9dGhpcy5lZGdlcz10dSx0aGlzLmNlbGxzPSRzLFhzPUpzPXR1PSRzPW51bGx9ZnVuY3Rpb24gb3UodCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufWZ1bmN0aW9uIGF1KHQsZSxuKXt2YXIgcixpPUt0KHQpLG89TWF0aC5taW4ocGFyc2VJbnQoaS5zdHlsZSgid2lkdGgiKSkscGFyc2VJbnQoaS5zdHlsZSgiaGVpZ2h0IikpKS8yLGE9cGFyc2VJbnQoaS5zdHlsZSgid2lkdGgiKSkvMi1vLHM9cGFyc2VJbnQoaS5zdHlsZSgiaGVpZ2h0IikpLzItbyx1PU1hdGgubWF4KG4ubWluVmFsdWUsTWF0aC5taW4obi5tYXhWYWx1ZSxlKSkvbi5tYXhWYWx1ZSxsPU1hdGguZmxvb3IoMTAwKk1hdGgucmFuZG9tKCkpKzE7cj1uLndhdmVIZWlnaHRTY2FsaW5nP0dpKCkucmFuZ2UoWzAsbi53YXZlSGVpZ2h0LDBdKS5kb21haW4oWzAsNTAsMTAwXSk6R2koKS5yYW5nZShbbi53YXZlSGVpZ2h0LG4ud2F2ZUhlaWdodF0pLmRvbWFpbihbMCwxMDBdKTt2YXIgYz1uLnRleHRTaXplKm8vMixmPXBhcnNlRmxvYXQoZSkudG9GaXhlZCgyKSxoPW4udmFsdWVDb3VudFVwP24ubWluVmFsdWU6ZixkPW4uZGlzcGxheVBlcmNlbnQ/bi5jdXN0b21QZXJjZW50OiIiLHA9bi5jaXJjbGVUaGlja25lc3MqbyxtPXArbi5jaXJjbGVGaWxsR2FwKm8seT1vLW0sZz15KnIoMTAwKnUpLHY9MStuLndhdmVDb3VudCxiPTIqeS9uLndhdmVDb3VudCp2LF89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCl9O3BhcnNlRmxvYXQoZikhPXBhcnNlRmxvYXQoXyhmKSkmJihfPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGYpIT1wYXJzZUZsb2F0KF8oZikpJiYoXz1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpfSk7Zm9yKHZhciB3PVtdLHg9MDt4PD00MCp2O3grKyl3LnB1c2goe3g6eC8oNDAqdikseTp4LzQwfSk7dmFyIE89R2koKS5yYW5nZShbMCwyKk1hdGguUEldKS5kb21haW4oWzAsMV0pLEM9R2koKS5yYW5nZShbMCxvXSkuZG9tYWluKFswLG9dKSxTPUdpKCkucmFuZ2UoWzAsYl0pLmRvbWFpbihbMCwxXSksRT1HaSgpLnJhbmdlKFswLGddKS5kb21haW4oWzAsMV0pLGs9R2koKS5yYW5nZShbbSsyKnkrZyxtLWddKS5kb21haW4oWzAsMV0pLFQ9R2koKS5yYW5nZShbMCxiLTIqeV0pLmRvbWFpbihbMCwxXSksST1HaSgpLnJhbmdlKFttKzIqeSxtKy43KmNdKS5kb21haW4oWzAsMV0pLEE9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithKyIsIitzKyIpIiksaj1KYSgpLnN0YXJ0QW5nbGUoTygwKSkuZW5kQW5nbGUoTygxKSkub3V0ZXJSYWRpdXMoQyhvKSkuaW5uZXJSYWRpdXMoQyhvLXApKTtBLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGopLnN0eWxlKCJmaWxsIixuLmNpcmNsZUNvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitvKyIpIik7dmFyIFA9QS5hcHBlbmQoInRleHQiKS50ZXh0KF8oaCkrZCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLGMrInB4Iikuc3R5bGUoImZpbGwiLG4udGV4dENvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitJKG4udGV4dFZlcnRQb3NpdGlvbikrIikiKSxNPW9zKCkueChmdW5jdGlvbih0KXtyZXR1cm4gUyh0LngpfSkueTAoZnVuY3Rpb24odCl7cmV0dXJuIEUoTWF0aC5zaW4oMipNYXRoLlBJKm4ud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtbi53YXZlQ291bnQpKzIqdC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKHQpe3JldHVybiAyKnkrZ30pLE49QS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJjbGlwV2F2ZSIrbC50b1N0cmluZygpKSxSPU4uYXBwZW5kKCJwYXRoIikuZGF0dW0odykuYXR0cigiZCIsTSkuYXR0cigiVCIsMCksRD1BLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjY2xpcFdhdmUiK2wudG9TdHJpbmcoKSsiKSIpO0QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsbykuYXR0cigiY3kiLG8pLmF0dHIoInIiLHkpLnN0eWxlKCJmaWxsIixuLndhdmVDb2xvcik7dmFyIEw9RC5hcHBlbmQoInRleHQiKS50ZXh0KF8oaCkrZCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLGMrInB4Iikuc3R5bGUoImZpbGwiLG4ud2F2ZVRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrSShuLnRleHRWZXJ0UG9zaXRpb24pKyIpIik7aWYobi52YWx1ZUNvdW50VXApe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIHQ9aG4oaCxmKTtyZXR1cm4gZnVuY3Rpb24oZSl7UC50ZXh0KF8odChlKSkrZCksTC50ZXh0KF8odChlKSkrZCl9fTtQLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLEYpLEwudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsRil9dmFyIFY9bSsyKnktYjtmdW5jdGlvbiBVKCl7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitUKFIuYXR0cigiVCIpKSsiLDApIiksUi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlQW5pbWF0ZVRpbWUqKDEtUi5hdHRyKCJUIikpKS5lYXNlKGxyKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitUKDEpKyIsMCkiKS5hdHRyKCJUIiwxKS5vbigiZW5kIixmdW5jdGlvbigpe1IuYXR0cigiVCIsMCksVSgpfSl9cmV0dXJuIG4ud2F2ZVJpc2U/Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKDApKyIpIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKHUpKyIpIikub24oInN0YXJ0IixmdW5jdGlvbigpe1IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDEsMCkiKX0pOk4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrayh1KSsiKSIpLG4ud2F2ZUFuaW1hdGUmJlUoKSx7dXBkYXRlKHQpe3ZhciBlPXBhcnNlRmxvYXQodCkudG9GaXhlZCgyKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpfTtwYXJzZUZsb2F0KGUpIT1wYXJzZUZsb2F0KGkoZSkpJiYoaT1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDEpfSkscGFyc2VGbG9hdChlKSE9cGFyc2VGbG9hdChpKGUpKSYmKGk9ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgyKX0pO3ZhciBvPWZ1bmN0aW9uKCl7dmFyIGU9aG4oUC50ZXh0KCkscGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpKTtyZXR1cm4gZnVuY3Rpb24odCl7UC50ZXh0KGkoZSh0KSkrZCksTC50ZXh0KGkoZSh0KSkrZCl9fTtQLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLG8pLEwudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsbyk7dmFyIGEscz1NYXRoLm1heChuLm1pblZhbHVlLE1hdGgubWluKG4ubWF4VmFsdWUsdCkpL24ubWF4VmFsdWUsdT15KnIoMTAwKnMpLGw9R2koKS5yYW5nZShbbSsyKnkrdSxtLXVdKS5kb21haW4oWzAsMV0pKHMpLGM9R2koKS5yYW5nZShbMCxiXSkuZG9tYWluKFswLDFdKSxmPUdpKCkucmFuZ2UoWzAsdV0pLmRvbWFpbihbMCwxXSk7YT1uLndhdmVIZWlnaHRTY2FsaW5nP0xyLmFyZWEoKS54KGZ1bmN0aW9uKHQpe3JldHVybiBjKHQueCl9KS55MChmdW5jdGlvbih0KXtyZXR1cm4gZihNYXRoLnNpbigyKk1hdGguUEkqbi53YXZlT2Zmc2V0Ki0xKzIqTWF0aC5QSSooMS1uLndhdmVDb3VudCkrMip0LnkqTWF0aC5QSSkpfSkueTEoZnVuY3Rpb24odCl7cmV0dXJuIDIqeSt1fSk6TTt2YXIgaD1uLndhdmVBbmltYXRlP1QoMSk6MDtSLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlQW5pbWF0ZT9uLndhdmVBbmltYXRlVGltZSooMS1SLmF0dHIoIlQiKSk6bi53YXZlUmlzZVRpbWUpLmVhc2UobHIpLmF0dHIoImQiLGEpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwwKSIpLmF0dHIoIlQiLCIxIikub24oImVuZCIsZnVuY3Rpb24oKXtuLndhdmVBbmltYXRlJiYoUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitUKDApKyIsMCkiKSxVKCkpfSksTi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK2wrIikiKX19fWl1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aXUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEZzKGUsdFtuXSl9KTtyZXR1cm4gbi5kYXRhPWUuc2l0ZS5kYXRhLG59KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24obixyKXtpZihvPShpPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBpLG8sYSxzLHUsbCxjPW4uc2l0ZSxmPS0xLGg9ZVtpW28tMV1dLGQ9aC5sZWZ0PT09Yz9oLnJpZ2h0OmgubGVmdDsrK2Y8bzspYT1kLGQ9KGg9ZVtpW2ZdXSkubGVmdD09PWM/aC5yaWdodDpoLmxlZnQsYSYmZCYmcjxhLmluZGV4JiZyPGQuaW5kZXgmJigocz1jKVswXS0obD1kKVswXSkqKCh1PWEpWzFdLXNbMV0pLShzWzBdLXVbMF0pKihsWzFdLXNbMV0pPDAmJnQucHVzaChbYy5kYXRhLGEuZGF0YSxkLmRhdGFdKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJpZ2h0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksbz10aGlzLGE9by5fZm91bmR8fDAscz1vLmNlbGxzLmxlbmd0aDshKGk9by5jZWxsc1thXSk7KWlmKCsrYT49cylyZXR1cm4gbnVsbDt2YXIgdT10LWkuc2l0ZVswXSxsPWUtaS5zaXRlWzFdLGM9dSp1K2wqbDtkb3tpPW8uY2VsbHNbcj1hXSxhPW51bGwsaS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1vLmVkZ2VzW25dLHM9ci5sZWZ0O2lmKHMhPT1pLnNpdGUmJnN8fChzPXIucmlnaHQpKXt2YXIgdT10LXNbMF0sbD1lLXNbMV0sZj11KnUrbCpsO2Y8YyYmKGM9ZixhPXMuaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9cixudWxsPT1ufHxjPD1uKm4/aS5zaXRlOm51bGx9fSxvdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm91LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBvdSh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IG91KHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IG91KDEsMCwwKTt2YXIgc3U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5keW5fd2lkdGg9NTAwfXJldHVybiB0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlO3RoaXMuZHluX3dpZHRoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkM2NvbnRhaW5lciIpLmNsaWVudFdpZHRoLHQ9S3QoIiNkM3RhcmdldCIpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsImFuaW1hdGUtZ3JhZGllbnQiKS5hdHRyKCJ4MSIsIjAlIikuYXR0cigieTEiLCIwJSIpLmF0dHIoIngyIiwiMTAwJSIpLmF0dHIoInkyIiwiMCIpLmF0dHIoInNwcmVhZE1ldGhvZCIsInJlZmxlY3QiKSxlPVsiIzAwMWFmZCIsIiM2YjY3ZmMiLCIjNTM5MGUzIiwiIzM1NmNjNiIsIiM1MzkwZTMiLCIjNmI2N2ZjIiwiIzAwMWFmZCJdLHQuc2VsZWN0QWxsKCIuc3RvcCIpLmRhdGEoZSkuZW50ZXIoKS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4vKGUubGVuZ3RoLTEpfSkuYXR0cigic3RvcC1jb2xvciIsZnVuY3Rpb24odCl7cmV0dXJuIHR9KSx0LmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MSIpLmF0dHIoInZhbHVlcyIsIjAlOzEwMCUiKS5hdHRyKCJkdXIiLCI3cyIpLmF0dHIoInJlcGVhdENvdW50IiwiaW5kZWZpbml0ZSIpLHQuYXBwZW5kKCJhbmltYXRlIikuYXR0cigiYXR0cmlidXRlTmFtZSIsIngyIikuYXR0cigidmFsdWVzIiwiMTAwJTsyMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKTt2YXIgbj17bWluVmFsdWU6MCxtYXhWYWx1ZToxMDAsY2lyY2xlVGhpY2tuZXNzOi4wNSxjaXJjbGVGaWxsR2FwOi4wNSxjaXJjbGVDb2xvcjoiIzE3OEJDQSIsd2F2ZUhlaWdodDouMDUsd2F2ZUNvdW50OjEsd2F2ZVJpc2VUaW1lOjFlMyx3YXZlQW5pbWF0ZVRpbWU6MThlMyx3YXZlUmlzZTohMCx3YXZlSGVpZ2h0U2NhbGluZzohMCx3YXZlQW5pbWF0ZTohMCx3YXZlQ29sb3I6IiMxNzhCQ0EiLHdhdmVPZmZzZXQ6MCx0ZXh0VmVydFBvc2l0aW9uOi41LHRleHRTaXplOjEsdmFsdWVDb3VudFVwOiEwLGRpc3BsYXlQZXJjZW50OiEwLHRleHRDb2xvcjoiIzA0NTY4MSIsd2F2ZVRleHRDb2xvcjoiI0E0REJmOCIsY3VzdG9tUGVyY2VudDoiJSJ9O24udmFsdWVDb3VudFVwPSEwLG4uY2lyY2xlVGhpY2tuZXNzPS4xNSxuLmNpcmNsZUNvbG9yPSIjODA4MDE1IixuLnRleHRDb2xvcj0iIzU1NTUwMCIsbi53YXZlVGV4dENvbG9yPSIjRkZGRkFBIixuLndhdmVDb2xvcj0iI0FBQUEzOSIsbi50ZXh0VmVydFBvc2l0aW9uPS44LG4ud2F2ZUFuaW1hdGVUaW1lPTFlMyxuLndhdmVIZWlnaHQ9LjA1LG4ud2F2ZUFuaW1hdGU9ITAsbi53YXZlUmlzZT0hMSxuLndhdmVIZWlnaHRTY2FsaW5nPSExLG4ud2F2ZU9mZnNldD0uMjUsbi50ZXh0U2l6ZT0uNSxuLndhdmVDb3VudD0zLG4uZGlzcGxheVBlcmNlbnQ9ITAsbi5taW5WYWx1ZT0wLG4ubWF4VmFsdWU9NjAwLG4uY3VzdG9tUGVyY2VudD0iIG5tb2wvTCI7dmFyIHI9YXUoIiNkM2lucHV0Z2F1Z2UiLDIyMCxuKTtPYmplY3QoTC5hKSgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gci51cGRhdGUoTWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMjUwKX0pO3ZhciBpPXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07aS52YWx1ZUNvdW50VXA9ITAsaS5jaXJjbGVUaGlja25lc3M9LjE1LGkuY2lyY2xlQ29sb3I9IiM4MDM1N2MiLGkudGV4dENvbG9yPSIjNTU1NTAwIixpLndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLGkud2F2ZUNvbG9yPSIjQUFBQTM5IixpLnRleHRWZXJ0UG9zaXRpb249LjgsaS53YXZlQW5pbWF0ZVRpbWU9MWUzLGkud2F2ZUhlaWdodD0uMDUsaS53YXZlQW5pbWF0ZT0hMCxpLndhdmVSaXNlPSExLGkud2F2ZUhlaWdodFNjYWxpbmc9ITEsaS53YXZlT2Zmc2V0PS4yNSxpLnRleHRTaXplPS41LGkud2F2ZUNvdW50PTMsaS5kaXNwbGF5UGVyY2VudD0hMCxpLm1pblZhbHVlPTAsaS5tYXhWYWx1ZT02MDAsaS5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgbyxhLHMsdSxsLGMsZixoLGQscD1hdSgiI2Qzb3V0Z2F1Z2UiLDQ1LGkpO09iamVjdChMLmEpKDE1MDAsMTUwMCkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBwLnVwZGF0ZShNYXRoLmZsb29yKDQwKk1hdGgucmFuZG9tKCkpKzUwKX0pLHM9S3QoIiNkM2JpbW9kYWwiKSx1PUdpKCkuZG9tYWluKFszMCwxMTBdKS5yYW5nZShbNDAsMjcwXSksbD1HaSgpLmRvbWFpbihbMCwuMV0pLnJhbmdlKFsxNTAsMjBdKSxmPShjPVs3OSw1NCw3NCw2Miw4NSw1NSw4OCw4NSw1MSw4NSw1NCw4NCw3OCw0Nyw4Myw1Miw2Miw4NCw1Miw3OSw1MSw0Nyw3OCw2OSw3NCw4Myw1NSw3Niw3OCw3OSw3Myw3Nyw2Niw4MCw3NCw1Miw0OCw4MCw1OSw5MCw4MCw1OCw4NCw1OCw3Myw4Myw2NCw1Myw4Miw1OSw3NSw5MCw1NCw4MCw1NCw4Myw3MSw2NCw3Nyw4MSw1OSw4NCw0OCw4Miw2MCw5Miw3OCw3OCw2NSw3Myw4Miw1Niw3OSw3MSw2Miw3Niw2MCw3OCw3Niw4Myw3NSw4Miw3MCw2NSw3Myw4OCw3Niw4MCw0OCw4Niw2MCw5MCw1MCw3OCw2Myw3Miw4NCw3NSw1MSw4Miw2Miw4OCw0OSw4Myw4MSw0Nyw4NCw1Miw4Niw4MSw3NSw1OSw4OSw3OSw1OSw4MSw1MCw4NSw1OSw4Nyw1Myw2OSw3Nyw1Niw4OCw4MSw0NSw4Miw1NSw5MCw0NSw4Myw1Niw4OSw0Niw4Miw1MSw4Niw1Myw3OSw4MSw2MCw4Miw3Nyw3Niw1OSw4MCw0OSw5Niw1Myw3Nyw3Nyw2NSw4MSw3MSw3MCw4MSw5Myw1Myw4OSw0NSw4Niw1OCw3OCw2Niw3Niw2Myw4OCw1Miw5Myw0OSw1Nyw3Nyw2OCw4MSw4MSw3Myw1MCw4NSw3NCw1NSw3Nyw4Myw4Myw1MSw3OCw4NCw0Niw4Myw1NSw4MSw1Nyw3Niw4NCw3Nyw4MSw4Nyw3Nyw1MSw3OCw2MCw4Miw5MSw1Myw3OCw0Niw3Nyw4NCw0OSw4Myw3MSw4MCw0OSw3NSw2NCw3Niw1Myw5NCw1NSw3Niw1MCw4Miw1NCw3NSw3OCw3OSw3OCw3OCw3MCw3OSw3MCw1NCw4Niw1MCw5MCw1NCw1NCw3Nyw3OSw2NCw3NSw0Nyw4Niw2Myw4NSw4Miw1Nyw4Miw2Nyw3NCw1NCw4Myw3Myw3Myw4OCw4MCw3MSw4Myw1Niw3OSw3OCw4NCw1OCw4Myw0Myw2MCw3NSw4MSw0Niw5MCw0Niw3NF0pLmxlbmd0aCxoPWZ1bmN0aW9uKCl7dmFyIHQ9VyxlPXosbj0kO2Z1bmN0aW9uIHIocil7dmFyIGksbyxhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpO2ZvcihpPTA7aTxhOysraSlzW2ldPXQocltpXSxpLHIpO3ZhciB1PWUocyksbD11WzBdLGM9dVsxXSxmPW4ocyxsLGMpO0FycmF5LmlzQXJyYXkoZil8fChmPVgobCxjLGYpLGY9cShNYXRoLmNlaWwobC9mKSpmLE1hdGguZmxvb3IoYy9mKSpmLGYpKTtmb3IodmFyIGg9Zi5sZW5ndGg7ZlswXTw9bDspZi5zaGlmdCgpLC0taDtmb3IoO2ZbaC0xXT5jOylmLnBvcCgpLC0taDt2YXIgZCxwPW5ldyBBcnJheShoKzEpO2ZvcihpPTA7aTw9aDsrK2kpKGQ9cFtpXT1bXSkueDA9aT4wP2ZbaS0xXTpsLGQueDE9aTxoP2ZbaV06Yztmb3IoaT0wO2k8YTsrK2kpbDw9KG89c1tpXSkmJm88PWMmJnBbVihmLG8sMCxoKV0ucHVzaChyW2ldKTtyZXR1cm4gcH1yZXR1cm4gci52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkgoZSkscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIKFt0WzBdLHRbMV1dKSxyKTplfSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0goQi5jYWxsKHQpKTpIKHQpLHIpOm59LHJ9KCkuZG9tYWluKHUuZG9tYWluKCkpLnRocmVzaG9sZHMoNDApKGMpLGQ9KG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQvPTcpPD0xPy43NSooMS10KnQpLzc6MH0sYT11LnRpY2tzKDQwKSxmdW5jdGlvbih0KXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixvPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytvPHI7KWlzTmFOKG49VSh0W29dKSk/LS1pOmErPW47ZWxzZSBmb3IoOysrbzxyOylpc05hTihuPVUoZSh0W29dKSkpPy0taTphKz1uO2lmKGkpcmV0dXJuIGEvaX0odCxmdW5jdGlvbih0KXtyZXR1cm4gbyhlLXQpfSldfSl9KShjKSxzLmluc2VydCgiZyIsIioiKS5hdHRyKCJmaWxsIiwiI2JiYiIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoaCkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gdSh0LngwKSsxfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIGwodC5sZW5ndGgvZil9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHUodC54MSktdSh0LngwKS0xfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gbCgwKS1sKHQubGVuZ3RoL2YpfSkscy5hcHBlbmQoInBhdGgiKS5kYXR1bShkKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJkIixpcygpLmN1cnZlKGNzKS54KGZ1bmN0aW9uKHQpe3JldHVybiB1KHRbMF0pfSkueShmdW5jdGlvbih0KXtyZXR1cm4gbCh0WzFdKX0pKX0sdH0oKSx1dT1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIi5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99bWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhc2hib2FyZC5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiBsdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDUyLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIk1lVGhyaXggOiBDbGVhbmluZyBob3NwaXRhbCBlZmZsdWVudCBzaW5jZSAyMDE4Il0pKSwodCgpKCksaS5PYSgzLDAsbnVsbCxudWxsLDQ5LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKSwodCgpKCksaS5PYSg1LDAsbnVsbCwwLDQsIm1hdC1jYXJkLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtY2FyZC1oZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsUi5jLFIuYikpLGkuTmEoNiw0OTE1MixudWxsLDAsRC5jLFtdLG51bGwsbnVsbCksKHQoKSgpLGkuT2EoNywwLG51bGwsMSwyLCJtYXQtY2FyZC10aXRsZSIsW1siY2xhc3MiLCJtYXQtY2FyZC10aXRsZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDgsMTYzODQsbnVsbCwwLEQuZSxbXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyIgT3VyIFByb2plY3QgIl0pKSwodCgpKCksaS5PYSgxMCwwLG51bGwsMCw0MiwibWF0LWNhcmQtY29udGVudCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZC1jb250ZW50IG1hdC1jYXJkLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSgxMSwxNjM4NCxudWxsLDAsRC5iLFtdLG51bGwsbnVsbCksKHQoKSgpLGkuT2EoMTIsMCxudWxsLG51bGwsNDAsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTMsMCxudWxsLG51bGwsMjQsImRpdiIsW1siaWQiLCJkM2NvbnRhaW5lciJdLFsic3R5bGUiLCJtYXJnaW46IGF1dG87Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE0LDAsbnVsbCxudWxsLDIzLCI6c3ZnOnN2ZyIsW1siaGVpZ2h0IiwiNTAwIl0sWyJpZCIsImQzdGFyZ2V0Il0sWyJzdHlsZSIsImRpc3BsYXk6IGJsb2NrO21hcmdpbjogYXV0bzsiXSxbIndpZHRoIiwiNjc0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE1LDAsbnVsbCxudWxsLDUsIjpzdmc6ZyIsW1sidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTYsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIzMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtMjApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJNVFgiXSkpLCh0KCkoKSxpLk9hKDE4LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJIb3NwaXRhbCBlZmZsdWVudHMiXSkpLCh0KCkoKSxpLk9hKDIwLDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2lucHV0Z2F1Z2UiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNTBweDt3aWR0aDogMTUwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDIxLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiNTAiXSxbInN0eWxlIiwiZmlsbDogdHJhbnNwYXJlbnQ7IHN0cm9rZTogIzVhMDAzNkZGOyBzdHJva2Utd2lkdGg6IDVweCJdLFsid2lkdGgiLCI2NzUiXSxbIngiLCIwIl0sWyJ5IiwiMjcwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDIyLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiMTUwIl0sWyJzdHlsZSIsImZpbGw6IHRyYW5zcGFyZW50OyBzdHJva2U6ICM1YTAwMzZGRjsgc3Ryb2tlLXdpZHRoOiA1cHg7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyMywwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjUwIl0sWyJzdHlsZSIsImZpbGw6IHVybCgnI2FuaW1hdGUtZ3JhZGllbnQnKTsiXSxbIndpZHRoIiwiNjc1Il0sWyJ4IiwiMCJdLFsieSIsIjI3MCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNCwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNiwwLG51bGwsbnVsbCw1LCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg0NzAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyNywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjMwIl0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC0yMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIk1UWCJdKSksKHQoKSgpLGkuT2EoMjksMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIldhc3Rld2F0ZXIgb3V0cHV0Il0pKSwodCgpKCksaS5PYSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMzIsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTgwLDIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgzMywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNjMpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKHQoKSgpLGkuT2EoMzUsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTc1KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiQmltb2RhbCBkaXN0cmlidXRpb24iXSkpLCh0KCkoKSxpLk9hKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMzgsMCxudWxsLG51bGwsMTQsImRpdiIsW1sic3R5bGUiLCJwYWRkaW5nOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiIE91ciBwcm9qZWN0IGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGJhY3RlcmlhbCBwbGF0Zm9ybSBmb3IgZHJ1ZyBkZWdyYWRhdGlvbi4gQXMgYSBwcm9vZiBvZiBjb25jZXB0LCB3ZSBoYXZlIGNob3NlbiB0byBmb2N1cyBvbiB0aGUgY3l0b3RveGljIGRydWdzIHVzZWQgaW4gdGhlIHRyZWF0bWVudCBvZiBjYW5jZXIsIGFzIHRoZWlyIGNvbmNlbnRyYXRpb25zIGFyZSBhbGFybWluZ2x5IGhpZ2ggaW4gaG9zcGl0YWwgd2FzdGV3YXRlciBlZmZsdWVudHMuIFRocm91Z2ggYSB0b29sa2l0IG9mIGJyb2FkLSBhbmQgbmFycm93LXNwZWN0cnVtIGVuenltZXMsIHdlIGFpbSB0byBhY2hpZXZlIGNsZWFyYW5jZSBvZiB0aGUgbWFpbiBjaGVtb3RoZXJhcGV1dGljIGFnZW50cywgbGlrZSBtZXRob3RyZXhhdGUsIDUtZmx1b3JvdXJhY2lsIG9yIGRveG9ydWJpY2luLiAiXSkpLCh0KCkoKSxpLk9hKDQwLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSg0MSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbJyBXZSBhcmUgdGFraW5nIG9uIHRocmVlIG1haW4gY2hhbGxlbmdlcyA6IGVmZmljaWVudCBlbnRyeSBvZiB0aGVzZSBtb2xlY3VsZXMgaW4gdGhlIGJhY3RlcmlhbCBjZWxsLCB0aHJvdWdoIGNoYW5uZWxzIGFuZCB0cmFuc3BvcnRlcnMgKHVyYWNpbC1saWtlIHRyYW5zcG9ydGVyIHVyYUEsIGNyeXB0aWMgZm9sYXRlLWFuYWxvZ3VlIHRyYW5zcG9ydGVyIGFiZ1QgLi4uKSwgcHJvcGVyIGRlZ3JhZGF0aW9uIHRocm91Z2ggbWV0YWJvbGl6aW5nIGVuenltZXMgKGNhcmJveHlwZXB0aWRhc2UgRzIsIGN5dG9jaHJvbWUgUDQ1MCBcdTIwMjYpLCBhbmQgbG9uZyB0ZXJtIG9wZXJhdGlvbiBvZiB0aGUgYmlvcmVhY3RvciB0aG91Z2ggYSBiaXN0YWJsZSwgInN0ZW0tY2VsbCBsaWtlIiwgcG9wdWxhdGlvbiBvZiBiYWN0ZXJpYSwgYWxsZXZpYXRpbmcgdGhlIG5lZWQgZm9yIHJlZ3VsYXIgcmVzZWVkaW5nIHdpdGggZnJlc2ggY2xvbmVzLiAnXSkpLCh0KCkoKSxpLk9hKDQzLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSg0NCwwLG51bGwsbnVsbCwxLCJoMyIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIlByb2plY3Qgc2lnbmlmaWNhbmNlIl0pKSwodCgpKCksaS5nYigtMSxudWxsLFsiIFBoYXJtYWNldXRpY2FsIGRydWdzIGFyZSBhIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHNvdXJjZSBvZiBwb2xsdXRpb24gOiBzZWxlY3RlZCB0byBiZSBiaW9sb2dpY2FsbHkgYWN0aXZlIGF0IGxvdyBjb25jZW50cmF0aW9uICYgZGVzaWduZWQgdG8gcmVzaXN0IGJpb2RlZ3JhZGF0aW9uLCBkcnVncyBjb25zdGl0dXRlIGEgY2xhc3Mgb2YgaGlnaCByZW1hbmVuY2UgcG9sbHV0YW50cyByb3V0aW5lbHkgZm91bmQgaW4gdGhlIGVudmlyb25tZW50LCBldmVuIGluIG91ciBkcmlua2luZyB3YXRlci4gIl0pKSwodCgpKCksaS5PYSg0NywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoNDgsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyIgVGhvdWdoIHBoeXNpY2FsICYgY2hlbWljYWwgc29sdXRpb25zIGV4aXN0LCBpbiB0aGUgZm9ybSBvZiBvem9uZSBhbmQgVVYgdHJlYXRtZW50LCBvdXIgc29sdXRpb24gY2FuIG9mZmVyIHRoZSBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeSBvZiBhIGJpb3JlYWN0b3ItYmFzZWQgYXBwcm9hY2guICJdKSksKHQoKSgpLGkuT2EoNTAsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDUxLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsnIE91ciAic3RlbS1jZWxsIGxpa2UiIGFwcHJvYWNoIHRvIGJhY3RlcmlhbCBwb3B1bGF0aW9uIG1ha2VzIGl0IGFuIG9wdGlvbiB3aXRoIHBvdGVudGlhbGx5IGxvd2VyIG9uZ29pbmcgY29zdHMsIGFuZCBvdXIgZGVncmFkYXRpb24gZW56eW1lcyBhbGxvdyB0YXJnZXRlZCBkZWdyYWRhdGlvbiBvZiBwYXJ0aWN1bGFybHkgcmVzaWxpZW50IG1vbGVjdWxlcyA6IGJvdGggd2Vha25lc3NlcyBvZiBjb252ZW50aW9uYWwgbWV0aG9kcyBvZiB3YXN0ZXdhdGVyIHRyZWF0bWVudC4gJ10pKV0sbnVsbCxudWxsKX12YXIgY3U9aS5LYSgiZGFzaGJvYXJkIixzdSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImRhc2hib2FyZCIsW10sbnVsbCxudWxsLG51bGwsbHUsdXUpKSxpLk5hKDEsMTA5NzcyOCxudWxsLDAsc3UsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX0se30se30sW10pLGZ1PW4oInB1Z1QiKSxodT0wLGR1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX29wZW5DbG9zZUFsbEFjdGlvbnM9bmV3IHYuYSx0aGlzLmlkPSJjZGstYWNjb3JkaW9uLSIraHUrKyx0aGlzLl9tdWx0aT0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtdWx0aSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX211bHRpPU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW5BbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITApfSx0LnByb3RvdHlwZS5jbG9zZUFsbD1mdW5jdGlvbigpe3RoaXMuX29wZW5DbG9zZUFsbCghMSl9LHQucHJvdG90eXBlLl9vcGVuQ2xvc2VBbGw9ZnVuY3Rpb24odCl7dGhpcy5tdWx0aSYmdGhpcy5fb3BlbkNsb3NlQWxsQWN0aW9ucy5uZXh0KHQpfSx0fSgpLHB1PTAsbXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYWNjb3JkaW9uPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyPW4sdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPWZ1LmEuRU1QVFksdGhpcy5jbG9zZWQ9bmV3IGkubSx0aGlzLm9wZW5lZD1uZXcgaS5tLHRoaXMuZGVzdHJveWVkPW5ldyBpLm0sdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgaS5tLHRoaXMuaWQ9ImNkay1hY2NvcmRpb24tY2hpbGQtIitwdSsrLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyPWZ1bmN0aW9uKCl7fSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1uLmxpc3RlbihmdW5jdGlvbih0LGUpe3IuYWNjb3JkaW9uJiYhci5hY2NvcmRpb24ubXVsdGkmJnIuYWNjb3JkaW9uLmlkPT09ZSYmci5pZCE9PXQmJihyLmV4cGFuZGVkPSExKX0pLHRoaXMuYWNjb3JkaW9uJiYodGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvT3BlbkNsb3NlQWxsQWN0aW9ucygpKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJleHBhbmRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9leHBhbmRlZH0sc2V0OmZ1bmN0aW9uKHQpe3Q9T2JqZWN0KEMuYikodCksdGhpcy5fZXhwYW5kZWQhPT10JiYodGhpcy5fZXhwYW5kZWQ9dCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodCksdD8odGhpcy5vcGVuZWQuZW1pdCgpLHRoaXMuX2V4cGFuc2lvbkRpc3BhdGNoZXIubm90aWZ5KHRoaXMuaWQsdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaWQ6dGhpcy5pZCkpOnRoaXMuY2xvc2VkLmVtaXQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQuY29tcGxldGUoKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuZGVzdHJveWVkLmVtaXQoKSx0aGlzLmRlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyKCksdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkKX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMSl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMCl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmVUb09wZW5DbG9zZUFsbEFjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmFjY29yZGlvbi5fb3BlbkNsb3NlQWxsQWN0aW9ucy5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5kaXNhYmxlZHx8KHQuZXhwYW5kZWQ9ZSl9KX0sdH0oKSx5dT1mdW5jdGlvbigpe30sZ3U9bigiaWhZWSIpLHZ1PW4oIjRjMzUiKSxidT1uKCJwMGliIiksX3U9bigiVm5ELyIpLHd1PW4oInQ5ZloiKSx4dT1uKCJZU2gyIiksT3U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5faGlkZVRvZ2dsZT0hMSxlLmRpc3BsYXlNb2RlPSJkZWZhdWx0IixlfXJldHVybiBPYmplY3QobC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGlkZVRvZ2dsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaWRlVG9nZ2xlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGlkZVRvZ2dsZT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShkdSksQ3U9MCxTdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5fdmlld0NvbnRhaW5lclJlZj1pLG8uX2hpZGVUb2dnbGU9ITEsby5faW5wdXRDaGFuZ2VzPW5ldyB2LmEsby5faGVhZGVySWQ9Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLSIrQ3UrKyxvLmFjY29yZGlvbj1lLG99cmV0dXJuIE9iamVjdChsLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaWRlVG9nZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVUb2dnbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9oaWRlVG9nZ2xlPU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9nZXRIaWRlVG9nZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWNjb3JkaW9uP3RoaXMuYWNjb3JkaW9uLmhpZGVUb2dnbGU6dGhpcy5oaWRlVG9nZ2xlfSxlLnByb3RvdHlwZS5faGFzU3BhY2luZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY2NvcmRpb24mJiJkZWZhdWx0Ij09PSh0aGlzLmV4cGFuZGVkP3RoaXMuYWNjb3JkaW9uLmRpc3BsYXlNb2RlOnRoaXMuX2dldEV4cGFuZGVkU3RhdGUoKSl9LGUucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIn0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9sYXp5Q29udGVudCYmdGhpcy5vcGVuZWQucGlwZShPYmplY3QoTy5hKShudWxsKSxPYmplY3QoX3UuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5leHBhbmRlZCYmIXQuX3BvcnRhbH0pLE9iamVjdCh3dS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fcG9ydGFsPW5ldyB2dS5kKHQuX2xhenlDb250ZW50Ll90ZW1wbGF0ZSx0Ll92aWV3Q29udGFpbmVyUmVmKX0pfSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLl9pbnB1dENoYW5nZXMubmV4dCh0KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2lucHV0Q2hhbmdlcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fYm9keUFuaW1hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQuY2xhc3NMaXN0LG49dC5waGFzZU5hbWUscj10LnRvU3RhdGU7ImRvbmUiPT09biYmImV4cGFuZGVkIj09PXI/ZS5hZGQoIm1hdC1leHBhbmRlZCIpOiJzdGFydCI9PT1uJiYiY29sbGFwc2VkIj09PXImJmUucmVtb3ZlKCJtYXQtZXhwYW5kZWQiKX0sZX0obXUpLEV1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMucGFuZWw9dCx0aGlzLl9lbGVtZW50PWUsdGhpcy5fZm9jdXNNb25pdG9yPW4sdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb249ZnUuYS5FTVBUWSx0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb249T2JqZWN0KGJ1LmEpKHQub3BlbmVkLHQuY2xvc2VkLHQuX2lucHV0Q2hhbmdlcy5waXBlKE9iamVjdChfdS5hKShmdW5jdGlvbih0KXtyZXR1cm4hKCF0LmhpZGVUb2dnbGUmJiF0LmRpc2FibGVkKX0pKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksbi5tb25pdG9yKGUubmF0aXZlRWxlbWVudCl9cmV0dXJuIHQucHJvdG90eXBlLl90b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLnBhbmVsLnRvZ2dsZSgpfSx0LnByb3RvdHlwZS5faXNFeHBhbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLmV4cGFuZGVkfSx0LnByb3RvdHlwZS5fZ2V0RXhwYW5kZWRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLl9nZXRFeHBhbmRlZFN0YXRlKCl9LHQucHJvdG90eXBlLl9nZXRQYW5lbElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuaWR9LHQucHJvdG90eXBlLl9zaG93VG9nZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucGFuZWwuaGlkZVRvZ2dsZSYmIXRoaXMucGFuZWwuZGlzYWJsZWR9LHQucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgeHUuajpjYXNlIHh1LmQ6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZSgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KX0sdH0oKSxrdT1mdW5jdGlvbigpe30sVHU9ZnVuY3Rpb24oKXt9LEl1PWZ1bmN0aW9uKCl7fSxBdT1uKCJZbGJRIiksanU9bigibExBUCIpLFB1PWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWV4cGFuc2lvbi1wYW5lbHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO3RyYW5zaXRpb246bWFyZ2luIDIyNW1zIGN1YmljLWJlemllciguNCwwLC4yLDEpfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWV4cGFuc2lvbi1wYW5lbHtvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudC5tYXQtZXhwYW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5e3BhZGRpbmc6MCAyNHB4IDE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW46MTZweCAwfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6Zmlyc3QtY2hpbGQsLm1hdC1hY2NvcmRpb24+OmZpcnN0LWNoaWxkOm5vdCgubWF0LWV4cGFuc2lvbi1wYW5lbCkgLm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW4tdG9wOjB9Lm1hdC1hY2NvcmRpb24+Lm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZzpsYXN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpsYXN0LWNoaWxkOm5vdCgubWF0LWV4cGFuc2lvbi1wYW5lbCkgLm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW4tYm90dG9tOjB9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzoxNnB4IDhweCAxNnB4IDI0cHh9Lm1hdC1hY3Rpb24tcm93IGJ1dHRvbi5tYXQtYnV0dG9ue21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1hY3Rpb24tcm93IGJ1dHRvbi5tYXQtYnV0dG9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiYm9keUV4cGFuc2lvbiIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiMHB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiIqIix2aXNpYmlsaXR5OiJ2aXNpYmxlIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBNdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5GYSgwLG51bGwsbnVsbCwwKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gTnUodCl7cmV0dXJuIGkuaWIoMixbaS5YYShudWxsLDApLCh0KCkoKSxpLk9hKDEsMCxbWyJib2R5IiwxXV0sbnVsbCw1LCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50Il0sWyJyb2xlIiwicmVnaW9uIl1dLFtbMjQsIkBib2R5RXhwYW5zaW9uIiwwXSxbMSwiYXJpYS1sYWJlbGxlZGJ5IiwwXSxbOCwiaWQiLDBdXSxbW251bGwsIkBib2R5RXhwYW5zaW9uLmRvbmUiXSxbbnVsbCwiQGJvZHlFeHBhbnNpb24uc3RhcnQiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLGk9dC5jb21wb25lbnQ7cmV0dXJuIkBib2R5RXhwYW5zaW9uLmRvbmUiPT09ZSYmKHI9ITEhPT1pLl9ib2R5QW5pbWF0aW9uKG4pJiZyKSwiQGJvZHlFeHBhbnNpb24uc3RhcnQiPT09ZSYmKHI9ITEhPT1pLl9ib2R5QW5pbWF0aW9uKG4pJiZyKSxyfSxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5YYShudWxsLDEpLCh0KCkoKSxpLkZhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsTXUpKSxpLk5hKDUsMjEyOTkyLG51bGwsMCx2dS5hLFtpLmosaS5OXSx7cG9ydGFsOlswLCJwb3J0YWwiXX0sbnVsbCksaS5YYShudWxsLDIpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3BvcnRhbCl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxuLl9nZXRFeHBhbmRlZFN0YXRlKCksbi5faGVhZGVySWQsbi5pZCl9KX12YXIgUnU9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjRweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6Zm9jdXMsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye291dGxpbmU6MH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQ6aG92ZXJ7YmFja2dyb3VuZDppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2N1cnNvcjpwb2ludGVyfS5tYXQtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOnJvdztvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixbZGlyPXJ0bF0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZ3JvdzoyfS5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweCAycHggMDtjb250ZW50OicnO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6M3B4O3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiaW5kaWNhdG9yUm90YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMTgwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fSx7dHlwZTo3LG5hbWU6ImV4cGFuc2lvbkhlaWdodCIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoie3tjb2xsYXBzZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2NvbGxhcHNlZEhlaWdodDoiNDhweCJ9fX0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7ZXhwYW5kZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2V4cGFuZGVkSGVpZ2h0OiI2NHB4In19fSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTozLHN0ZXBzOlt7dHlwZToxMSxzZWxlY3RvcjoiQGluZGljYXRvclJvdGF0ZSIsYW5pbWF0aW9uOnt0eXBlOjksb3B0aW9uczpudWxsfSxvcHRpb25zOntvcHRpb25hbDohMH19LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn1dLG9wdGlvbnM6bnVsbH0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIER1KHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMCwic3BhbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLWluZGljYXRvciJdXSxbWzI0LCJAaW5kaWNhdG9yUm90YXRlIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0pfWZ1bmN0aW9uIEx1KHQpe3JldHVybiBpLmliKDIsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMywic3BhbiIsW1siY2xhc3MiLCJtYXQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlhhKG51bGwsMCksaS5YYShudWxsLDEpLGkuWGEobnVsbCwyKSwodCgpKCksaS5GYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLER1KSksaS5OYSg1LDE2Mzg0LG51bGwsMCxhLmssW2kuTixpLktdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3Nob3dUb2dnbGUoKSl9LG51bGwpfXZhciBGdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLFZ1PWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fVxuLyojIHNvdXJjZU1hcHBpbmdVUkw9c2l0ZW1hcC5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiBVdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDM1LCJkaXYiLFtbImlkIiwiZ2NvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiU2l0ZSBtYXBzIl0pKSwodCgpKCksaS5PYSgzLDAsbnVsbCxudWxsLDMyLCJtYXQtYWNjb3JkaW9uIixbWyJjbGFzcyIsIm1hdC1hY2NvcmRpb24iXSxbIm11bHRpIiwidHJ1ZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDQsMTYzODQsbnVsbCwwLE91LFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKHQoKSgpLGkuT2EoNSwxNjc3NzIxNixudWxsLG51bGwsMTQsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxOdSxQdSkpLGkuTmEoNiwxNzUzMDg4LG51bGwsMSxTdSxbWzMsT3VdLGkuaCxBdS5iLGkuTl0sbnVsbCxudWxsKSxpLmViKDMzNTU0NDMyMCwxLHtfbGF6eUNvbnRlbnQ6MH0pLGkuZGIoMjU2LG51bGwsT3Usdm9pZCAwLFtdKSwodCgpKCksaS5PYSg5LDAsbnVsbCwwLDksIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIl0sWyJyb2xlIiwiYnV0dG9uIl1dLFtbMSwiaWQiLDBdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtY29udHJvbHMiLDBdLFsxLCJhcmlhLWV4cGFuZGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzQwLCJAZXhwYW5zaW9uSGVpZ2h0IiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT1pLllhKHQsMTApLl90b2dnbGUoKSYmciksImtleWRvd24iPT09ZSYmKHI9ITEhPT1pLllhKHQsMTApLl9rZXlkb3duKG4pJiZyKSxyfSxMdSxSdSkpLGkuTmEoMTAsMTgwMjI0LG51bGwsMCxFdSxbU3UsaS5rLGp1LmIsaS5oXSxudWxsLG51bGwpLGkuYmIoMTEse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxpLmJiKDEyLHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLGkuT2EoMTMsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMTQsMTYzODQsbnVsbCwwLFR1LFtdLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIiBQcm9qZWN0IGRlc2lnbiAiXSkpLCh0KCkoKSxpLk9hKDE2LDAsbnVsbCwxLDIsIm1hdC1wYW5lbC1kZXNjcmlwdGlvbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDE3LDE2Mzg0LG51bGwsMCxrdSxbXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyIgVGhlb3JldGljYWwgdW5kZXJwaW5uaW5nIG9mIG91ciBwcm9qZWN0ICJdKSksKHQoKSgpLGkuZ2IoLTEsMSxbIiBBQUFBQUFBQUFBQWEgIl0pKSwodCgpKCksaS5PYSgyMCwxNjc3NzIxNixudWxsLG51bGwsMTUsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxOdSxQdSkpLGkuTmEoMjEsMTc1MzA4OCxudWxsLDEsU3UsW1szLE91XSxpLmgsQXUuYixpLk5dLG51bGwsbnVsbCksaS5lYigzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSxpLmRiKDI1NixudWxsLE91LHZvaWQgMCxbXSksKHQoKSgpLGkuT2EoMjQsMCxudWxsLDAsOSwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiXSxbInJvbGUiLCJidXR0b24iXV0sW1sxLCJpZCIsMF0sWzEsInRhYmluZGV4IiwwXSxbMSwiYXJpYS1jb250cm9scyIsMF0sWzEsImFyaWEtZXhwYW5kZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbNDAsIkBleHBhbnNpb25IZWlnaHQiLDBdXSxbW251bGwsImNsaWNrIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCwyNSkuX3RvZ2dsZSgpJiZyKSwia2V5ZG93biI9PT1lJiYocj0hMSE9PWkuWWEodCwyNSkuX2tleWRvd24obikmJnIpLHJ9LEx1LFJ1KSksaS5OYSgyNSwxODAyMjQsbnVsbCwwLEV1LFtTdSxpLmssanUuYixpLmhdLG51bGwsbnVsbCksaS5iYigyNix7Y29sbGFwc2VkSGVpZ2h0OjAsZXhwYW5kZWRIZWlnaHQ6MX0pLGkuYmIoMjcse3ZhbHVlOjAscGFyYW1zOjF9KSwodCgpKCksaS5PYSgyOCwwLG51bGwsMCwyLCJtYXQtcGFuZWwtdGl0bGUiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSgyOSwxNjM4NCxudWxsLDAsVHUsW10sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSxudWxsLFsiIE1hdGVyaWFsIGFuZCBtZXRob2QgIl0pKSwodCgpKCksaS5PYSgzMSwwLG51bGwsMSwyLCJtYXQtcGFuZWwtZGVzY3JpcHRpb24iLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSgzMiwxNjM4NCxudWxsLDAsa3UsW10sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSxudWxsLFsiIE91ciBleHBlcmltZW50YWwgZGVzaWducyAmIHJlc3VsdHMgIl0pKSwodCgpKCksaS5PYSgzNCwwLG51bGwsMSwxLCJwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiSSdtIHZpc2libGUgYmVjYXVzZSBJIGFtIG9wZW4iXSkpXSxmdW5jdGlvbih0LGUpe3QoZSw0LDAsInRydWUiKX0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGkuWWEoZSw2KS5leHBhbmRlZCxpLllhKGUsNikuX2hhc1NwYWNpbmcoKSksdChlLDksMCxpLllhKGUsMTApLnBhbmVsLl9oZWFkZXJJZCxpLllhKGUsMTApLnBhbmVsLmRpc2FibGVkPy0xOjAsaS5ZYShlLDEwKS5fZ2V0UGFuZWxJZCgpLGkuWWEoZSwxMCkuX2lzRXhwYW5kZWQoKSxpLllhKGUsMTApLnBhbmVsLmRpc2FibGVkLGkuWWEoZSwxMCkuX2lzRXhwYW5kZWQoKSx0KGUsMTIsMCxpLllhKGUsMTApLl9nZXRFeHBhbmRlZFN0YXRlKCksdChlLDExLDAsaS5ZYShlLDEwKS5jb2xsYXBzZWRIZWlnaHQsaS5ZYShlLDEwKS5leHBhbmRlZEhlaWdodCkpKSx0KGUsMjAsMCxpLllhKGUsMjEpLmV4cGFuZGVkLGkuWWEoZSwyMSkuX2hhc1NwYWNpbmcoKSksdChlLDI0LDAsaS5ZYShlLDI1KS5wYW5lbC5faGVhZGVySWQsaS5ZYShlLDI1KS5wYW5lbC5kaXNhYmxlZD8tMTowLGkuWWEoZSwyNSkuX2dldFBhbmVsSWQoKSxpLllhKGUsMjUpLl9pc0V4cGFuZGVkKCksaS5ZYShlLDI1KS5wYW5lbC5kaXNhYmxlZCxpLllhKGUsMjUpLl9pc0V4cGFuZGVkKCksdChlLDI3LDAsaS5ZYShlLDI1KS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLHQoZSwyNiwwLGkuWWEoZSwyNSkuY29sbGFwc2VkSGVpZ2h0LGkuWWEoZSwyNSkuZXhwYW5kZWRIZWlnaHQpKSl9KX12YXIgenU9aS5LYSgiYXBwLXNpdGVtYXAiLEZ1LGZ1bmN0aW9uKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMSwiYXBwLXNpdGVtYXAiLFtdLG51bGwsbnVsbCxudWxsLFV1LFZ1KSksaS5OYSgxLDExNDY4OCxudWxsLDAsRnUsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxCdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLEh1PWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9XG4vKiMgc291cmNlTWFwcGluZ1VSTD1wcm9qZWN0LWRldGFpbHMuY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gV3UodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIlByb2plY3QgZGV0YWlscyJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgcXU9aS5LYSgiYXBwLXByb2plY3QtZGV0YWlscyIsQnUsZnVuY3Rpb24odCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtcHJvamVjdC1kZXRhaWxzIixbXSxudWxsLG51bGwsbnVsbCxXdSxIdSkpLGkuTmEoMSwxMTQ2ODgsbnVsbCwwLEJ1LFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksWXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxHdT1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fVxuLyojIHNvdXJjZU1hcHBpbmdVUkw9YmlvbG9neS1zZWN0aW9uLmNvbXBvbmVudC5jc3MubWFwKi8iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIFF1KHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJCaW9sb2d5Il0pKSwodCgpKCksaS5PYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLFIuZCxSLmEpKSxpLk5hKDQsNDkxNTIsbnVsbCwwLEQuYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBLdT1pLkthKCJhcHAtYmlvbG9neS1zZWN0aW9uIixZdSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1iaW9sb2d5LXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLFF1LEd1KSksaS5OYSgxLDExNDY4OCxudWxsLDAsWXUsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxadT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLFh1PWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9XG4vKiMgc291cmNlTWFwcGluZ1VSTD1jb21wdXRpbmctc2VjdGlvbi5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiAkdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiTW9kZWxpbmcgJiBTb2Z0d2FyZSJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgSnU9aS5LYSgiYXBwLWNvbXB1dGluZy1zZWN0aW9uIixadSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1jb21wdXRpbmctc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwsJHUsWHUpKSxpLk5hKDEsMTE0Njg4LG51bGwsMCxadSxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHRsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksZWw9aS5NYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWh1bWFuLXByYWN0aWNlLXNlY3Rpb24uY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gbmwodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIkh1bWFuIFByYWN0aWNlcyJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgcmw9aS5LYSgiYXBwLWh1bWFuLXByYWN0aWNlLXNlY3Rpb24iLHRsLGZ1bmN0aW9uKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMSwiYXBwLWh1bWFuLXByYWN0aWNlLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLG5sLGVsKSksaS5OYSgxLDExNDY4OCxudWxsLDAsdGwsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxpbD1uKCI4bU1yIiksb2w9bigiRnpxYyIpLGFsPW4oIldmNHAiKSxzbD1pLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC10b29sYmFye291dGxpbmU6c29saWQgMXB4fX0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIHVsKHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKSxpLlhhKG51bGwsMSldLG51bGwsbnVsbCl9dmFyIGxsPW4oImJ1anQiKSxjbD1uKCJVb2RIIiksZmw9bigid0Z3MSIpLGhsPW4oIk1yK1giKSxkbD1uKCJTTXNtIikscGw9bigiYm5lNSIpLG1sPW4oIkdpM2kiKTtmdW5jdGlvbiB5bCh0KXt0aHJvdyBFcnJvcigiQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiIrdCsiXCInIil9dmFyIGdsPW5ldyBpLm8oIk1BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSx2bD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj10LHRoaXMuX2NvbnRhaW5lcj1lfXJldHVybiB0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbkNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdH0oKSxibD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvLGEpe3ZhciBzPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2RvYz1hLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMSx0aGlzLl9wb3NpdGlvbj0ic3RhcnQiLHRoaXMuX21vZGU9Im92ZXIiLHRoaXMuX2Rpc2FibGVDbG9zZT0hMSx0aGlzLl9hdXRvRm9jdXM9ITAsdGhpcy5fYW5pbWF0aW9uU3RhcnRlZD1uZXcgaS5tLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLm9wZW5lZENoYW5nZT1uZXcgaS5tKCEwKSx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkPW5ldyBpLm0sdGhpcy5fbW9kZUNoYW5nZWQ9bmV3IHYuYSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3Q/KHMuX2RvYyYmKHMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPXMuX2RvYy5hY3RpdmVFbGVtZW50KSxzLl9pc0ZvY3VzVHJhcEVuYWJsZWQmJnMuX2ZvY3VzVHJhcCYmcy5fdHJhcEZvY3VzKCkpOnMuX3Jlc3RvcmVGb2N1cygpfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7T2JqZWN0KHBsLmEpKHMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwia2V5ZG93biIpLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUNvZGU9PT14dS5lJiYhcy5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cy5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9Gb2N1cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRm9jdXN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvRm9jdXM9T2JqZWN0KEMuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfb3BlbmVkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksT2JqZWN0KHcuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvcGVuZWRTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZSYmMD09PXQudG9TdGF0ZS5pbmRleE9mKCJvcGVuIil9KSxPYmplY3Qody5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9jbG9zZWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuZWRDaGFuZ2UucGlwZShPYmplY3QoX3UuYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR9KSxPYmplY3Qody5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNsb3NlZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QoX3UuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlJiYidm9pZCI9PT10LnRvU3RhdGV9KSxPYmplY3Qody5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9pc0ZvY3VzVHJhcEVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuZWQmJiJzaWRlIiE9PXRoaXMubW9kZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdHJhcEZvY3VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmF1dG9Gb2N1cyYmdGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGZ1bmN0aW9uKGUpe2V8fCJmdW5jdGlvbiIhPXR5cGVvZiB0Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXN8fHQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9LHQucHJvdG90eXBlLl9yZXN0b3JlRm9jdXM9ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9Gb2N1cyl7dmFyIHQ9dGhpcy5fZG9jJiZ0aGlzLl9kb2MuYWN0aXZlRWxlbWVudDt0JiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModCkmJih0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZCx0aGlzLl9vcGVuZWRWaWEpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCkpLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fb3BlbmVkVmlhPW51bGx9fSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9mb2N1c1RyYXAuZW5hYmxlZD10aGlzLl9pc0ZvY3VzVHJhcEVuYWJsZWR9LHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2VuYWJsZUFuaW1hdGlvbnM9ITApfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvcGVuZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3BlbmVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50b2dnbGUoT2JqZWN0KEMuYikodCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlKCEwLHQpfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvZ2dsZSghMSl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PSF0aGlzLm9wZW5lZCksdm9pZCAwPT09ZSYmKGU9InByb2dyYW0iKSx0aGlzLl9vcGVuZWQ9dCx0Pyh0aGlzLl9hbmltYXRpb25TdGF0ZT10aGlzLl9lbmFibGVBbmltYXRpb25zPyJvcGVuIjoib3Blbi1pbnN0YW50Iix0aGlzLl9vcGVuZWRWaWE9ZSk6KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9yZXN0b3JlRm9jdXMoKSksdGhpcy5fZm9jdXNUcmFwJiYodGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkKSxuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtuLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdCh3dS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3JldHVybiB0KGU/Im9wZW4iOiJjbG9zZSIpfSl9KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5lbWl0KHQpfSx0LnByb3RvdHlwZS5fb25BbmltYXRpb25FbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5mcm9tU3RhdGUsbj10LnRvU3RhdGU7KDA9PT1uLmluZGV4T2YoIm9wZW4iKSYmInZvaWQiPT09ZXx8InZvaWQiPT09biYmMD09PWUuaW5kZXhPZigib3BlbiIpKSYmdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLl9vcGVuZWQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLF9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8sYSl7dm9pZCAwPT09byYmKG89ITEpO3ZhciBzPXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgaS5tLHRoaXMuX2Rlc3Ryb3llZD1uZXcgdi5hLHRoaXMuX2RvQ2hlY2tTdWJqZWN0PW5ldyB2LmEsdGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6bnVsbCxyaWdodDpudWxsfSx0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcz1uZXcgdi5hLHQmJnQuY2hhbmdlLnBpcGUoT2JqZWN0KHguYSkodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cy5fdmFsaWRhdGVEcmF3ZXJzKCkscy5fdXBkYXRlQ29udGVudE1hcmdpbnMoKX0pLHRoaXMuX2F1dG9zaXplPW99cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXV0b3NpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b3NpemV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvc2l6ZT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0JhY2tkcm9wIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2JhY2tkcm9wT3ZlcnJpZGU/IXRoaXMuX3N0YXJ0fHwic2lkZSIhPT10aGlzLl9zdGFydC5tb2RlfHwhdGhpcy5fZW5kfHwic2lkZSIhPT10aGlzLl9lbmQubW9kZTp0aGlzLl9iYWNrZHJvcE92ZXJyaWRlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYmFja2Ryb3BPdmVycmlkZT1udWxsPT10P251bGw6T2JqZWN0KEMuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9kcmF3ZXJzLmNoYW5nZXMucGlwZShPYmplY3QoTy5hKShudWxsKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fdmFsaWRhdGVEcmF3ZXJzKCksdC5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuX3dhdGNoRHJhd2VyVG9nZ2xlKGUpLHQuX3dhdGNoRHJhd2VyUG9zaXRpb24oZSksdC5fd2F0Y2hEcmF3ZXJNb2RlKGUpfSksKCF0Ll9kcmF3ZXJzLmxlbmd0aHx8dC5faXNEcmF3ZXJPcGVuKHQuX3N0YXJ0KXx8dC5faXNEcmF3ZXJPcGVuKHQuX2VuZCkpJiZ0Ll91cGRhdGVDb250ZW50TWFyZ2lucygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZG9DaGVja1N1YmplY3QucGlwZShPYmplY3QobWwuYSkoMTApLE9iamVjdCh4LmEpKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll91cGRhdGVDb250ZW50TWFyZ2lucygpfSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZG9DaGVja1N1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW4oKX0pfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYXV0b3NpemUmJnRoaXMuX2lzUHVzaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Ll9kb0NoZWNrU3ViamVjdC5uZXh0KCl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyVG9nZ2xlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKE9iamVjdCh4LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyksT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Im9wZW4taW5zdGFudCIhPT10LnRvU3RhdGUmJiJOb29wQW5pbWF0aW9ucyIhPT1lLl9hbmltYXRpb25Nb2RlJiZlLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci10cmFuc2l0aW9uIiksZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLCJzaWRlIiE9PXQubW9kZSYmdC5vcGVuZWRDaGFuZ2UucGlwZShPYmplY3QoeC5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2V0Q29udGFpbmVyQ2xhc3ModC5vcGVuZWQpfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlclBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdC5vblBvc2l0aW9uQ2hhbmdlZC5waXBlKE9iamVjdCh4LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcykpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KHd1LmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl92YWxpZGF0ZURyYXdlcnMoKX0pfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlck1vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0Ll9tb2RlQ2hhbmdlZC5waXBlKE9iamVjdCh4LmEpKE9iamVjdChidS5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMsdGhpcy5fZGVzdHJveWVkKSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCksZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdC5wcm90b3R5cGUuX3NldENvbnRhaW5lckNsYXNzPWZ1bmN0aW9uKHQpe3Q/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1kcmF3ZXItb3BlbmVkIik6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1kcmF3ZXItb3BlbmVkIil9LHQucHJvdG90eXBlLl92YWxpZGF0ZURyYXdlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0YXJ0PXRoaXMuX2VuZD1udWxsLHRoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbihlKXsiZW5kIj09ZS5wb3NpdGlvbj8obnVsbCE9dC5fZW5kJiZ5bCgiZW5kIiksdC5fZW5kPWUpOihudWxsIT10Ll9zdGFydCYmeWwoInN0YXJ0IiksdC5fc3RhcnQ9ZSl9KSx0aGlzLl9yaWdodD10aGlzLl9sZWZ0PW51bGwsdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8odGhpcy5fbGVmdD10aGlzLl9lbmQsdGhpcy5fcmlnaHQ9dGhpcy5fc3RhcnQpOih0aGlzLl9sZWZ0PXRoaXMuX3N0YXJ0LHRoaXMuX3JpZ2h0PXRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9pc1B1c2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiYib3ZlciIhPXRoaXMuX3N0YXJ0Lm1vZGV8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiYib3ZlciIhPXRoaXMuX2VuZC5tb2RlfSx0LnByb3RvdHlwZS5fb25CYWNrZHJvcENsaWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdCgpLHRoaXMuX2Nsb3NlTW9kYWxEcmF3ZXIoKX0sdC5wcm90b3R5cGUuX2Nsb3NlTW9kYWxEcmF3ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO1t0aGlzLl9zdGFydCx0aGlzLl9lbmRdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmIWUuZGlzYWJsZUNsb3NlJiZ0Ll9jYW5IYXZlQmFja2Ryb3AoZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUuX2lzU2hvd2luZ0JhY2tkcm9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkmJnRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9zdGFydCl8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fZW5kKX0sdC5wcm90b3R5cGUuX2NhbkhhdmVCYWNrZHJvcD1mdW5jdGlvbih0KXtyZXR1cm4ic2lkZSIhPT10Lm1vZGV8fCEhdGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sdC5wcm90b3R5cGUuX2lzRHJhd2VyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmdC5vcGVuZWR9LHQucHJvdG90eXBlLl91cGRhdGVDb250ZW50TWFyZ2lucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT0wLG49MDtpZih0aGlzLl9sZWZ0JiZ0aGlzLl9sZWZ0Lm9wZW5lZCYmKCJzaWRlIj09dGhpcy5fbGVmdC5tb2RlP2UrPXRoaXMuX2xlZnQuX3dpZHRoOiJwdXNoIj09dGhpcy5fbGVmdC5tb2RlJiYoZSs9cj10aGlzLl9sZWZ0Ll93aWR0aCxuLT1yKSksdGhpcy5fcmlnaHQmJnRoaXMuX3JpZ2h0Lm9wZW5lZClpZigic2lkZSI9PXRoaXMuX3JpZ2h0Lm1vZGUpbis9dGhpcy5fcmlnaHQuX3dpZHRoO2Vsc2UgaWYoInB1c2giPT10aGlzLl9yaWdodC5tb2RlKXt2YXIgcjtuKz1yPXRoaXMuX3JpZ2h0Ll93aWR0aCxlLT1yfWU9PT10aGlzLl9jb250ZW50TWFyZ2lucy5sZWZ0JiZuPT09dGhpcy5fY29udGVudE1hcmdpbnMucmlnaHR8fCh0aGlzLl9jb250ZW50TWFyZ2lucz17bGVmdDplLHJpZ2h0Om59LHRoaXMuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29udGVudE1hcmdpbkNoYW5nZXMubmV4dCh0Ll9jb250ZW50TWFyZ2lucyl9KSl9LHR9KCksd2w9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyxlLG4pfHx0aGlzfXJldHVybiBPYmplY3QobC5iKShlLHQpLGV9KHZsKSx4bD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9maXhlZEluVmlld3BvcnQ9ITEsZS5fZml4ZWRUb3BHYXA9MCxlLl9maXhlZEJvdHRvbUdhcD0wLGV9cmV0dXJuIE9iamVjdChsLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZEluVmlld3BvcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRJblZpZXdwb3J0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRJblZpZXdwb3J0PU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRUb3BHYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRUb3BHYXB9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZFRvcEdhcD1PYmplY3QoQy5kKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkQm90dG9tR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQm90dG9tR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRCb3R0b21HYXA9T2JqZWN0KEMuZCkodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oYmwpLE9sPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QobC5iKShlLHQpLGV9KF9sKSxDbD1mdW5jdGlvbigpe30sU2w9bigicUFsUyIpLEVsPWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIGtsKHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgVGw9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToidHJhbnNmb3JtIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJvcGVuLCBvcGVuLWluc3RhbnQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgwLCAwLCAwKSIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJ2b2lkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6eyJib3gtc2hhZG93Ijoibm9uZSIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6InZvaWQgPT4gb3Blbi1pbnN0YW50IixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIwbXMifSxvcHRpb25zOm51bGx9LHt0eXBlOjEsZXhwcjoidm9pZCA8PT4gb3Blbiwgb3Blbi1pbnN0YW50ID0+IHZvaWQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpIn0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIElsKHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgQWw9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZHJhd2VyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lcltmdWxsc2NyZWVuXXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl0ubWF0LWRyYXdlci1vcGVuZWR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lci5tYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCAubWF0LWRyYXdlci1zaWRle3otaW5kZXg6M30ubWF0LWRyYXdlci1iYWNrZHJvcHt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6Mzt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWJhY2tkcm9we3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcix2aXNpYmlsaXR5fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLWJhY2tkcm9we29wYWNpdHk6LjV9fS5tYXQtZHJhd2VyLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWNvbnRlbnR7dHJhbnNpdGlvbi1kdXJhdGlvbjouNHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm0sbWFyZ2luLWxlZnQsbWFyZ2luLXJpZ2h0fS5tYXQtZHJhd2Vye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6NDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3otaW5kZXg6MztvdXRsaW5lOjA7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93LXk6YXV0bzt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlcixbZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCBjdXJyZW50Q29sb3J9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5kLFtkaXI9cnRsXSAubWF0LWRyYXdlcntib3JkZXItbGVmdDpzb2xpZCAxcHggY3VycmVudENvbG9yO2JvcmRlci1yaWdodDpub25lfX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXNpZGV7ei1pbmRleDoyfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7bGVmdDowO3JpZ2h0OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtc2lkZW5hdi1maXhlZHtwb3NpdGlvbjpmaXhlZH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gamwodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwwLCJkaXYiLFtbImNsYXNzIiwibWF0LWRyYXdlci1iYWNrZHJvcCJdXSxbWzIsIm1hdC1kcmF3ZXItc2hvd24iLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LmNvbXBvbmVudC5fb25CYWNrZHJvcENsaWNrZWQoKSYmcikscn0sbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9pc1Nob3dpbmdCYWNrZHJvcCgpKX0pfWZ1bmN0aW9uIFBsKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMywibWF0LXNpZGVuYXYtY29udGVudCIsW1siY2RrU2Nyb2xsYWJsZSIsIiJdLFsiY2xhc3MiLCJtYXQtZHJhd2VyLWNvbnRlbnQgbWF0LXNpZGVuYXYtY29udGVudCJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLGtsLEVsKSksaS5OYSgxLDIxMjk5MixbWzEsNF1dLDAsU2wuYSxbaS5rLFNsLmMsaS54XSxudWxsLG51bGwpLGkuTmEoMiwxMDk3NzI4LG51bGwsMCx3bCxbaS5oLE9sXSxudWxsLG51bGwpLGkuWGEoMCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt0KGUsMCwwLGkuWWEoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5sZWZ0LGkuWWEoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX1mdW5jdGlvbiBNbCh0KXtyZXR1cm4gaS5pYigyLFtpLmViKDY3MTA4ODY0MCwxLHtzY3JvbGxhYmxlOjB9KSwodCgpKCksaS5GYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGpsKSksaS5OYSgyLDE2Mzg0LG51bGwsMCxhLmssW2kuTixpLktdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLGkuWGEobnVsbCwwKSxpLlhhKG51bGwsMSksKHQoKSgpLGkuRmEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxQbCkpLGkuTmEoNiwxNjM4NCxudWxsLDAsYS5rLFtpLk4saS5LXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uaGFzQmFja2Ryb3ApLHQoZSw2LDAsIW4uX2NvbnRlbnQpfSxudWxsKX12YXIgTmw9bigiMC9RNiIpLFJsPW4oIkxDNXAiKTtuKCJnSWNZIik7dmFyIERsPWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRpdmlkZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItdG9wOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjgwcHh9W2Rpcj1ydGxdIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4MHB4fS5tYXQtc3ViaGVhZGVye2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye21hcmdpbjowfS5tYXQtbGlzdCwubWF0LW5hdi1saXN0LC5tYXQtc2VsZWN0aW9uLWxpc3R7cGFkZGluZy10b3A6OHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo3MnB4O3dpZHRoOmNhbGMoMTAwJSAtIDcycHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjI0cHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjRweDt3aWR0aDpjYWxjKDEwMCUgLSA2NHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbGlzdFtkZW5zZV0sLm1hdC1uYXYtbGlzdFtkZW5zZV0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV17cGFkZGluZy10b3A6NHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi00cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTGwodCl7cmV0dXJuIGkuaWIoMixbaS5YYShudWxsLDApXSxudWxsLG51bGwpfXZhciBGbD1pLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBWbCh0KXtyZXR1cm4gaS5pYigyLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0LXJpcHBsZSIsIiJdXSxbWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMiwyMTI5OTIsbnVsbCwwLGFsLnEsW2kuayxpLngsdS5hLFsyLGFsLmddLFsyLGZsLmFdXSx7ZGlzYWJsZWQ6WzAsImRpc2FibGVkIl0sdHJpZ2dlcjpbMSwidHJpZ2dlciJdfSxudWxsKSxpLlhhKG51bGwsMCksKHQoKSgpLGkuT2EoNCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtdGV4dCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLlhhKG51bGwsMSksaS5YYShudWxsLDIpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsaS5ZYShlLDIpLnVuYm91bmRlZCl9KX12YXIgVWw9bigiWllDaSIpLHpsPW4oIjIxTGIiKSxCbD1uKCJPemZCIiksSGw9bigiTWhtKyIpLFdsPWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siYm9keVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjJlbX0uZmlsbC10b29sYmFyLXNwYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSBhdXRvfS5zaWRlbmF2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnNpZGVuYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwMHB4O2JveC1zaGFkb3c6M3B4IDAgNnB4IHJnYmEoMCwwLDAsLjI0KX0jc2l0ZW1hcGJ1dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9I3NpZGVuYXZmbGV4Y29udGVudFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMDBweH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiBxbCh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEzMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1hcHAtYmFja2dyb3VuZCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxLDAsbnVsbCxudWxsLDE3LCJtYXQtdG9vbGJhciIsW1siY2xhc3MiLCJtYXQtdG9vbGJhciJdLFsiY29sb3IiLCJhY2NlbnQiXV0sW1syLCJtYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dzIixudWxsXSxbMiwibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsbnVsbF1dLG51bGwsbnVsbCx1bCxzbCkpLGkuTmEoMiw0MjQzNDU2LG51bGwsMSxpbC5hLFtpLmssdS5hLGEuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSxpLmViKDYwMzk3OTc3NiwxLHtfdG9vbGJhclJvd3M6MX0pLCh0KCkoKSxpLk9hKDQsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmcikscn0sbGwuYixsbC5hKSksaS5OYSg1LDE4MDIyNCxudWxsLDAsY2wuYixbaS5rLHUuYSxqdS5iLFsyLGZsLmFdXSxudWxsLG51bGwpLCh0KCkoKSxpLk9hKDYsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSg3LDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbIm1lbnUiXSkpLCh0KCkoKSxpLk9hKDksMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTAsMCxudWxsLDAsMSwic3BhbiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIk1lVGhyaVgiXSkpLCh0KCkoKSxpLk9hKDEyLDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTMsMCxudWxsLDAsMCwiaW1nIixbWyJzcmMiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9jL2MwL1QtLUdPX1BhcmlzLVNhY2xheS0tZ28tcHMtd2hpdGUucG5nIl0sWyJzdHlsZSIsIm1heC1oZWlnaHQ6MTAwJTsgd2lkdGg6YXV0bzsgcGFkZGluZzoxZW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE0LDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMTUsMCxudWxsLDAsMywic3BhbiIsW1sic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bGluZS1oZWlnaHQ6IDg1JTsgZm9udC1zaXplOiBtZWRpdW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJUZWFtIEdPIl0pKSwodCgpKCksaS5PYSgxNywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIlBhcmlzU2FjbGF5Il0pKSwodCgpKCksaS5PYSgxOSwwLG51bGwsbnVsbCwxMTEsIm1hdC1zaWRlbmF2LWNvbnRhaW5lciIsW1siY2xhc3MiLCJzaWRlbmF2LWNvbnRhaW5lciBtYXQtZHJhd2VyLWNvbnRhaW5lciBtYXQtc2lkZW5hdi1jb250YWluZXIiXV0sW1syLCJtYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCIsbnVsbF1dLG51bGwsbnVsbCxNbCxBbCkpLGkuTmEoMjAsMTQ5MDk0NCxudWxsLDIsT2wsW1syLG9sLmJdLGkuayxpLngsaS5oLGdsLFsyLGZsLmFdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDIse19kcmF3ZXJzOjF9KSxpLmViKDMzNTU0NDMyMCwzLHtfY29udGVudDowfSksKHQoKSgpLGkuT2EoMjMsMCxudWxsLDAsOTksIm1hdC1zaWRlbmF2IixbWyJjbGFzcyIsInNpZGVuYXYgbWF0LWRyYXdlciBtYXQtc2lkZW5hdiJdLFsiZml4ZWRJblZpZXdwb3J0IiwidHJ1ZSJdLFsidGFiSW5kZXgiLCItMSJdXSxbWzEsInJvbGUiLDBdLFs0MCwiQHRyYW5zZm9ybSIsMF0sWzEsImFsaWduIiwwXSxbMiwibWF0LWRyYXdlci1lbmQiLG51bGxdLFsyLCJtYXQtZHJhd2VyLW92ZXIiLG51bGxdLFsyLCJtYXQtZHJhd2VyLXB1c2giLG51bGxdLFsyLCJtYXQtZHJhd2VyLXNpZGUiLG51bGxdLFsyLCJtYXQtc2lkZW5hdi1maXhlZCIsbnVsbF0sWzQsInRvcCIsInB4Il0sWzQsImJvdHRvbSIsInB4Il1dLFtbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uc3RhcnQiXSxbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNvbXBvbmVudDpAdHJhbnNmb3JtLnN0YXJ0Ij09PWUmJihyPSExIT09aS5ZYSh0LDI0KS5fb25BbmltYXRpb25TdGFydChuKSYmciksImNvbXBvbmVudDpAdHJhbnNmb3JtLmRvbmUiPT09ZSYmKHI9ITEhPT1pLllhKHQsMjQpLl9vbkFuaW1hdGlvbkVuZChuKSYmcikscn0sSWwsVGwpKSxpLk5hKDI0LDMzMjU5NTIsW1syLDRdLFsiZHJhd2VyIiw0XV0sMCx4bCxbaS5rLGp1LmMsanUuYix1LmEsaS54LFsyLGEuZF1dLHttb2RlOlswLCJtb2RlIl0sb3BlbmVkOlsxLCJvcGVuZWQiXSxmaXhlZEluVmlld3BvcnQ6WzIsImZpeGVkSW5WaWV3cG9ydCJdfSxudWxsKSxpLmFiKDEzMTA3MixhLmIsW2kuaF0pLGkuYWIoMTMxMDcyLGEuYixbaS5oXSksKHQoKSgpLGkuT2EoMjcsMCxudWxsLDAsOSwibWF0LXRvb2xiYXIiLFtbImNsYXNzIiwibWF0LXRvb2xiYXIiXSxbImNvbG9yIiwicHJpbWFyeSJdLFsic3R5bGUiLCJtYXJnaW4tdG9wOiAxNXB4OyJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLHVsLHNsKSksaS5OYSgyOCw0MjQzNDU2LG51bGwsMSxpbC5hLFtpLmssdS5hLGEuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSxpLmViKDYwMzk3OTc3Niw0LHtfdG9vbGJhclJvd3M6MX0pLCh0KCkoKSxpLmdiKC0xLDAsWyJOYXZpZ2F0aW9uICJdKSksKHQoKSgpLGkuT2EoMzEsMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMzIsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmcikscn0sbGwuYixsbC5hKSksaS5OYSgzMywxODAyMjQsbnVsbCwwLGNsLmIsW2kuayx1LmEsanUuYixbMixmbC5hXV0sbnVsbCxudWxsKSwodCgpKCksaS5PYSgzNCwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDM1LDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImtleWJvYXJkX2Fycm93X2xlZnQiXSkpLCh0KCkoKSxpLk9hKDM3LDAsbnVsbCwwLDg1LCJtYXQtbmF2LWxpc3QiLFtbImNsYXNzIiwibWF0LW5hdi1saXN0Il0sWyJyb2xlIiwibmF2aWdhdGlvbiJdXSxudWxsLG51bGwsbnVsbCxMbCxEbCkpLGkuTmEoMzgsNDkxNTIsbnVsbCwwLE5sLmUsW10sbnVsbCxudWxsKSwodCgpKCksaS5PYSgzOSwwLG51bGwsMCw3LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdXSxbW251bGwsImNsaWNrIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLG89dC5jb21wb25lbnQ7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDQwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNDApLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8ucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZygiL2Rhc2hib2FyZCIpJiZyKSxyfSxWbCxGbCkpLGkuTmEoNDAsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDUse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsNix7X2F2YXRhcjowfSksKHQoKSgpLGkuT2EoNDMsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSg0NCw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJkYXNoYm9hcmQiXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyIgTWFpbiBwYWdlIl0pKSwodCgpKCksaS5PYSg0NywwLG51bGwsMCw3LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdXSxbW251bGwsImNsaWNrIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLG89dC5jb21wb25lbnQ7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDQ4KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNDgpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8ucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZygiL3Byb2plY3QiKSYmcikscn0sVmwsRmwpKSxpLk5hKDQ4LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3Niw3LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDgse19hdmF0YXI6MH0pLCh0KCkoKSxpLk9hKDUxLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNTIsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYXNzZXNzbWVudCJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBQcm9qZWN0IGRldGFpbHMiXSkpLCh0KCkoKSxpLk9hKDU1LDAsbnVsbCwwLDcsImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITAsbz10LmNvbXBvbmVudDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1pLllhKHQsNTYpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuWWEodCw1NikuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nKCIvYmlvbG9neSIpJiZyKSxyfSxWbCxGbCkpLGkuTmEoNTYsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDkse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsMTAse19hdmF0YXI6MH0pLCh0KCkoKSxpLk9hKDU5LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNjAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYmx1cl9jaXJjdWxhciJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBCaW9sb2d5Il0pKSwodCgpKCksaS5PYSg2MywwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1pLllhKHQsNjQpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuWWEodCw2NCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09aS5ZYSh0LDY3KS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LFZsLEZsKSksaS5OYSg2NCwxMDk3NzI4LG51bGwsMixObC5iLFtpLmssWzIsTmwuZV1dLG51bGwsbnVsbCksaS5lYig2MDM5Nzk3NzYsMTEse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsMTIse19hdmF0YXI6MH0pLGkuTmEoNjcsNjcxNzQ0LG51bGwsMCxVbC5sLFtVbC5rLFVsLmEsYS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxpLlphKDY4LDEpLCh0KCkoKSxpLk9hKDY5LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNzAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsibWVtb3J5Il0pKSwodCgpKCksaS5nYigtMSwyLFsiIENvbXB1dGluZyJdKSksKHQoKSgpLGkuT2EoNzMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDc0KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNzQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCw3Nykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoNzQsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDEzLHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDE0LHtfYXZhdGFyOjB9KSxpLk5hKDc3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSg3OCwxKSwodCgpKCksaS5PYSg3OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDgwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImFjY2Vzc2liaWxpdHlfbmV3Il0pKSwodCgpKCksaS5nYigtMSwyLFsiIEh1bWFuIFByYWN0aWNlcyJdKSksKHQoKSgpLGkuT2EoODMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDg0KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsODQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCw4Nykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoODQsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDE1LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDE2LHtfYXZhdGFyOjB9KSxpLk5hKDg3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSg4OCwxKSwodCgpKCksaS5PYSg4OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDkwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbInBlb3BsZSJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBPdXIgdGVhbSJdKSksKHQoKSgpLGkuT2EoOTMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDk0KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsOTQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCw5Nykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoOTQsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDE3LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDE4LHtfYXZhdGFyOjB9KSxpLk5hKDk3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSg5OCwxKSwodCgpKCksaS5PYSg5OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDEwMCw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJmb2xkZXJfc3BlY2lhbCJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBTdXBwb3J0Il0pKSwodCgpKCksaS5PYSgxMDMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDEwNCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDEwNCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09aS5ZYSh0LDEwNykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoMTA0LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwxOSx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCwyMCx7X2F2YXRhcjowfSksaS5OYSgxMDcsNjcxNzQ0LG51bGwsMCxVbC5sLFtVbC5rLFVsLmEsYS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxpLlphKDEwOCwxKSwodCgpKCksaS5PYSgxMDksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSgxMTAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYm9vayJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIkxhYiBOb3RlYm9vayJdKSksKHQoKSgpLGkuT2EoMTEzLDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsiaWQiLCJzaXRlbWFwYnV0Il0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDExNCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDExNCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09aS5ZYSh0LDExNykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoMTE0LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwyMSx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCwyMix7X2F2YXRhcjowfSksaS5OYSgxMTcsNjcxNzQ0LG51bGwsMCxVbC5sLFtVbC5rLFVsLmEsYS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxpLlphKDExOCwxKSwodCgpKCksaS5PYSgxMTksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSgxMjAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiYXBwcyJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBTaXRlIG1hcCJdKSksKHQoKSgpLGkuT2EoMTIzLDAsbnVsbCwxLDcsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXSxbImZ4TGF5b3V0Iiwicm93Il0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLFtbNCwibWFyZ2luLWxlZnQiLCJweCJdLFs0LCJtYXJnaW4tcmlnaHQiLCJweCJdXSxudWxsLG51bGwsa2wsRWwpKSxpLk5hKDEyNCwxMDk3NzI4LFtbMyw0XV0sMCx3bCxbaS5oLE9sXSxudWxsLG51bGwpLGkuTmEoMTI1LDczNzI4MCxudWxsLDAsemwuZSxbQmwuaSxpLmssQmwubV0se2xheW91dDpbMCwibGF5b3V0Il19LG51bGwpLGkuTmEoMTI2LDczNzI4MCxudWxsLDAsemwuZCxbQmwuaSxpLmssWzYsemwuZV0sQmwubV0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksaS5PYSgxMjcsMCxudWxsLDAsMywiZGl2IixbWyJmeEZsZXgiLCIxIDAgNTAwcHgiXSxbImlkIiwic2lkZW5hdmZsZXhjb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMTI4LDczNzI4MCxudWxsLDAsemwuYSxbQmwuaSxpLmssWzMsemwuZV0sQmwubSxCbC5nXSx7ZmxleDpbMCwiZmxleCJdfSxudWxsKSwodCgpKCksaS5PYSgxMjksMTY3NzcyMTYsbnVsbCxudWxsLDEsInJvdXRlci1vdXRsZXQiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMTMwLDIxMjk5MixudWxsLDAsVWwubixbVWwuYixpLk4saS5qLFs4LG51bGxdLGkuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLCJhY2NlbnQiKSx0KGUsNywwKSx0KGUsMjAsMCksdChlLDI0LDAsaS5oYihlLDI0LDAsaS5ZYShlLDI1KS50cmFuc2Zvcm0obi5pc0hhbmRzZXQkKSk/Im92ZXIiOiJzaWRlIixuLm9wZW5lZFNpZGVOYXYsInRydWUiKSx0KGUsMjgsMCwicHJpbWFyeSIpLHQoZSwzNSwwKSx0KGUsNDQsMCksdChlLDUyLDApLHQoZSw2MCwwKSx0KGUsNjcsMCx0KGUsNjgsMCwiLi4vY29tcHV0aW5nIikpLHQoZSw3MCwwKSx0KGUsNzcsMCx0KGUsNzgsMCwiLi4vaHVtYW4tcHJhY3RpY2VzIikpLHQoZSw4MCwwKSx0KGUsODcsMCx0KGUsODgsMCwiLi4vdGVhbSIpKSx0KGUsOTAsMCksdChlLDk3LDAsdChlLDk4LDAsIi4uL3N1cHBvcnQiKSksdChlLDEwMCwwKSx0KGUsMTA3LDAsdChlLDEwOCwwLCIuLi9sYWJub3RlYm9vayIpKSx0KGUsMTEwLDApLHQoZSwxMTcsMCx0KGUsMTE4LDAsIi4uL3NpdGVtYXAiKSksdChlLDEyMCwwKSx0KGUsMTI1LDAsInJvdyIpLHQoZSwxMjYsMCwiY2VudGVyIiksdChlLDEyOCwwLCIxIDAgNTAwcHgiKSx0KGUsMTMwLDApfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsaS5ZYShlLDIpLl90b29sYmFyUm93cy5sZW5ndGgsIWkuWWEoZSwyKS5fdG9vbGJhclJvd3MubGVuZ3RoKSx0KGUsNCwwLGkuWWEoZSw1KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09aS5ZYShlLDUpLl9hbmltYXRpb25Nb2RlKSx0KGUsNiwwLGkuWWEoZSw3KS5pbmxpbmUpLHQoZSwxOSwwLGkuWWEoZSwyMCkuX2JhY2tkcm9wT3ZlcnJpZGUpLHQoZSwyMywwLGkuaGIoZSwyMywwLGkuWWEoZSwyNikudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJkaWFsb2ciOiJuYXZpZ2F0aW9uIixpLllhKGUsMjQpLl9hbmltYXRpb25TdGF0ZSxudWxsLCJlbmQiPT09aS5ZYShlLDI0KS5wb3NpdGlvbiwib3ZlciI9PT1pLllhKGUsMjQpLm1vZGUsInB1c2giPT09aS5ZYShlLDI0KS5tb2RlLCJzaWRlIj09PWkuWWEoZSwyNCkubW9kZSxpLllhKGUsMjQpLmZpeGVkSW5WaWV3cG9ydCxpLllhKGUsMjQpLmZpeGVkSW5WaWV3cG9ydD9pLllhKGUsMjQpLmZpeGVkVG9wR2FwOm51bGwsaS5ZYShlLDI0KS5maXhlZEluVmlld3BvcnQ/aS5ZYShlLDI0KS5maXhlZEJvdHRvbUdhcDpudWxsKSx0KGUsMjcsMCxpLllhKGUsMjgpLl90b29sYmFyUm93cy5sZW5ndGgsIWkuWWEoZSwyOCkuX3Rvb2xiYXJSb3dzLmxlbmd0aCksdChlLDMyLDAsaS5ZYShlLDMzKS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09aS5ZYShlLDMzKS5fYW5pbWF0aW9uTW9kZSksdChlLDM0LDAsaS5ZYShlLDM1KS5pbmxpbmUpLHQoZSwzOSwwLGkuWWEoZSw0MCkuX2F2YXRhcixpLllhKGUsNDApLl9hdmF0YXIpLHQoZSw0MywwLGkuWWEoZSw0NCkuaW5saW5lKSx0KGUsNDcsMCxpLllhKGUsNDgpLl9hdmF0YXIsaS5ZYShlLDQ4KS5fYXZhdGFyKSx0KGUsNTEsMCxpLllhKGUsNTIpLmlubGluZSksdChlLDU1LDAsaS5ZYShlLDU2KS5fYXZhdGFyLGkuWWEoZSw1NikuX2F2YXRhciksdChlLDU5LDAsaS5ZYShlLDYwKS5pbmxpbmUpLHQoZSw2MywwLGkuWWEoZSw2NCkuX2F2YXRhcixpLllhKGUsNjQpLl9hdmF0YXIsaS5ZYShlLDY3KS50YXJnZXQsaS5ZYShlLDY3KS5ocmVmKSx0KGUsNjksMCxpLllhKGUsNzApLmlubGluZSksdChlLDczLDAsaS5ZYShlLDc0KS5fYXZhdGFyLGkuWWEoZSw3NCkuX2F2YXRhcixpLllhKGUsNzcpLnRhcmdldCxpLllhKGUsNzcpLmhyZWYpLHQoZSw3OSwwLGkuWWEoZSw4MCkuaW5saW5lKSx0KGUsODMsMCxpLllhKGUsODQpLl9hdmF0YXIsaS5ZYShlLDg0KS5fYXZhdGFyLGkuWWEoZSw4NykudGFyZ2V0LGkuWWEoZSw4NykuaHJlZiksdChlLDg5LDAsaS5ZYShlLDkwKS5pbmxpbmUpLHQoZSw5MywwLGkuWWEoZSw5NCkuX2F2YXRhcixpLllhKGUsOTQpLl9hdmF0YXIsaS5ZYShlLDk3KS50YXJnZXQsaS5ZYShlLDk3KS5ocmVmKSx0KGUsOTksMCxpLllhKGUsMTAwKS5pbmxpbmUpLHQoZSwxMDMsMCxpLllhKGUsMTA0KS5fYXZhdGFyLGkuWWEoZSwxMDQpLl9hdmF0YXIsaS5ZYShlLDEwNykudGFyZ2V0LGkuWWEoZSwxMDcpLmhyZWYpLHQoZSwxMDksMCxpLllhKGUsMTEwKS5pbmxpbmUpLHQoZSwxMTMsMCxpLllhKGUsMTE0KS5fYXZhdGFyLGkuWWEoZSwxMTQpLl9hdmF0YXIsaS5ZYShlLDExNykudGFyZ2V0LGkuWWEoZSwxMTcpLmhyZWYpLHQoZSwxMTksMCxpLllhKGUsMTIwKS5pbmxpbmUpLHQoZSwxMjMsMCxpLllhKGUsMTI0KS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5sZWZ0LGkuWWEoZSwxMjQpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfXZhciBZbD1pLkthKCJhcHAtcm9vdCIsTSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1yb290IixbXSxudWxsLG51bGwsbnVsbCxxbCxXbCkpLGkuTmEoMSwxMTQ2ODgsbnVsbCwwLE0sW1QsVWwuayxIbC5hXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLEdsPW4oIlpZanQiKSxRbD1uKCJOU1lMIiksS2w9bigiZURrUCIpLFpsPW4oIm1Wc2EiKSxYbD1uKCJ0L05hIiksJGw9bigiYWVjZCIpLEpsPW4oImhVV1AiKSx0Yz1uKCIzcEpRIiksZWM9bigiVjlxKyIpLG5jPW4oIjAvdVEiKSxyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnJvdXRlcj10LHRoaXMuY2h1bmtMb2FkZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FuQWN0aXZhdGU9ZnVuY3Rpb24odCxlKXtpZigwPT1vLmEucHJvZHVjdGlvbilyZXR1cm4gT2JqZWN0KG5jLmEpKG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7dCghMCl9KSk7dmFyIG49ZS51cmw7cmV0dXJuIGNvbnNvbGUubG9nKCJDaHVua0d1YXJkIDogIituKSx0aGlzLmNodW5rTG9hZGVyLmFzeW5jTG9hZFBhZ2VDaHVuayhuKX0sdC5uZ0luamVjdGFibGVEZWY9aS5SKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KGkuVihVbC5rKSxpLlYoSGwuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxpYz1mdW5jdGlvbigpe30sb2M9bigicFpoTSIpLGFjPWkuTGEocyxbTV0sZnVuY3Rpb24odCl7cmV0dXJuIGkuVmEoW2kuV2EoNTEyLGkuaixpLkFhLFtbOCxbTi5hLGN1LHp1LHF1LEt1LEp1LHJsLFlsXV0sWzMsaS5qXSxpLnZdKSxpLldhKDUxMjAsaS5zLGkuSmEsW1szLGkuc11dKSxpLldhKDQ2MDgsYS5tLGEubCxbaS5zLFsyLGEudF1dKSxpLldhKDUxMjAsaS5xLGkuSGEsW10pLGkuV2EoNTEyMCxpLnIsaS5JYSxbXSksaS5XYSg0NjA4LEdsLmMsR2wucixbYS5kXSksaS5XYSg2MTQ0LGkuRSxudWxsLFtHbC5jXSksaS5XYSg0NjA4LEdsLmYsR2wuZyxbXSksaS5XYSg1MTIwLEdsLmQsZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuW25ldyBHbC5rKHQsZSxuKSxuZXcgR2wubyhyKSxuZXcgR2wubihpLG8sYSldfSxbYS5kLGkueCxbMixpLnpdLGEuZCxhLmQsR2wuZixpLkJhXSksaS5XYSg0NjA4LEdsLmUsR2wuZSxbR2wuZCxpLnhdKSxpLldhKDEzNTY4MCxHbC5tLEdsLm0sW2EuZF0pLGkuV2EoNDYwOCxHbC5sLEdsLmwsW0dsLmUsR2wubV0pLGkuV2EoNTEyMCxRbC5hLGZsLmUsW10pLGkuV2EoNTEyMCxRbC5jLGZsLmYsW10pLGkuV2EoNDYwOCxRbC5iLGZsLmQsW2EuZCxRbC5hLFFsLmNdKSxpLldhKDUxMjAsaS5DLGZsLmcsW0dsLmwsUWwuYixpLnhdKSxpLldhKDYxNDQsR2wucCxudWxsLFtHbC5tXSksaS5XYSg0NjA4LGkuTCxpLkwsW2kueF0pLGkuV2EoNDYwOCxHbC5oLEdsLmgsW2EuZF0pLGkuV2EoNDYwOCxHbC5pLEdsLmksW2EuZF0pLGkuV2EoNDYwOCxndS5iLGZsLmMsW2kuQyxHbC5iXSksaS5XYSg0NjA4LEJsLmssQmwuaixbQmwuZCxCbC5oXSksaS5XYSg1MTIwLFVsLmgsVWwuQSxbVWwueV0pLGkuV2EoNTEyMCxpLmIsZnVuY3Rpb24odCxlLG4pe3JldHVybltCbC5uKHQsZSksbl19LFthLmQsaS56LFVsLmhdKSxpLldhKDUxMjAsVWwuYSxVbC54LFtVbC5rXSksaS5XYSg0NjA4LFVsLmQsVWwuZCxbXSksaS5XYSg2MTQ0LFVsLmYsbnVsbCxbVWwuZF0pLGkuV2EoMTM1NjgwLFVsLm8sVWwubyxbVWwuayxpLnUsaS5pLGkucCxVbC5mXSksaS5XYSg0NjA4LFVsLmUsVWwuZSxbXSksaS5XYSg0NjA4LEtsLmEsS2wuYSxbS2wuZyxLbC5jLGkuaixLbC5mLEtsLmQsaS5wLGkueCxhLmQsb2wuYl0pLGkuV2EoNTEyMCxLbC5oLEtsLmksW0tsLmFdKSxpLldhKDUxMjAsWmwuYSxabC5jLFtLbC5hXSksaS5XYSg0NjA4LFhsLmgsWGwubixbYS5kLGkueixYbC5sXSksaS5XYSg0NjA4LFhsLm8sWGwubyxbWGwuaCxYbC5tXSksaS5XYSg1MTIwLFhsLmEsZnVuY3Rpb24odCl7cmV0dXJuW3RdfSxbWGwub10pLGkuV2EoMTA3Mzc0MjMzNixhLmMsYS5jLFtdKSxpLldhKDEwMjQsaS5sLEdsLnEsW10pLGkuV2EoMTAyNCxpLncsZnVuY3Rpb24oKXtyZXR1cm5bVWwudCgpXX0sW10pLGkuV2EoNTEyLFVsLnksVWwueSxbaS5wXSksaS5XYSg1MTIsWGwuayxYbC5rLFtdKSxpLldhKDIwNDgsWGwuaSxudWxsLFtYbC5rXSksaS5XYSg1MTIsWGwuZyxYbC5nLFtYbC5pXSksaS5XYSgyMDQ4LFhsLmIsbnVsbCxbWGwuZ10pLGkuV2EoNTEyLFhsLmYsWGwuaixbWGwuYixpLnBdKSxpLldhKDUxMixYbC5jLFhsLmMsW1hsLmZdKSxpLldhKDUxMiwkbC5hLCRsLmEsW1hsLmNdKSxpLldhKDEwMjQsaS5kLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bR2wucyh0KSxVbC56KGUpLChyPW4sZnVuY3Rpb24oKXtyZXR1cm4gci5sb2FkUGFnZUF0SW5pdCgpfSldO3ZhciByfSxbWzIsaS53XSxVbC55LCRsLmFdKSxpLldhKDUxMixpLmUsaS5lLFtbMixpLmRdXSksaS5XYSgxMzE1ODQsaS5nLGkuZyxbaS54LGkuQmEsaS5wLGkubCxpLmosaS5lXSksaS5XYSgxMDczNzQyMzM2LGkuZixpLmYsW2kuZ10pLGkuV2EoMTA3Mzc0MjMzNixHbC5hLEdsLmEsW1szLEdsLmFdXSksaS5XYSgxMDczNzQyMzM2LGZsLmIsZmwuYixbXSksaS5XYSgxMDczNzQyMzM2LG9sLmEsb2wuYSxbXSksaS5XYSgxMDczNzQyMzM2LGFsLmgsYWwuaCxbWzIsYWwuYl1dKSxpLldhKDEwNzM3NDIzMzYsaWwuYixpbC5iLFtdKSxpLldhKDEwNzM3NDIzMzYsdS5iLHUuYixbXSksaS5XYSgxMDczNzQyMzM2LGFsLnIsYWwucixbXSksaS5XYSgxMDczNzQyMzM2LGNsLmMsY2wuYyxbXSksaS5XYSgxMDczNzQyMzM2LFNsLmIsU2wuYixbXSksaS5XYSgxMDczNzQyMzM2LENsLENsLFtdKSxpLldhKDEwNzM3NDIzMzYsZGwuYixkbC5iLFtdKSxpLldhKDEwNzM3NDIzMzYsYWwuaSxhbC5pLFtdKSxpLldhKDEwNzM3NDIzMzYsYWwucCxhbC5wLFtdKSxpLldhKDEwNzM3NDIzMzYsUmwuYSxSbC5hLFtdKSxpLldhKDEwNzM3NDIzMzYsTmwuYyxObC5jLFtdKSxpLldhKDEwNzM3NDIzMzYseXUseXUsW10pLGkuV2EoMTA3Mzc0MjMzNix2dS5jLHZ1LmMsW10pLGkuV2EoMTA3Mzc0MjMzNixJdSxJdSxbXSksaS5XYSgxMDczNzQyMzM2LEJsLmUsQmwuZSxbXSksaS5XYSgxMDczNzQyMzM2LHpsLmMsemwuYyxbXSksaS5XYSgxMDczNzQyMzM2LEpsLmEsSmwuYSxbXSksaS5XYSgxMDczNzQyMzM2LHRjLmEsdGMuYSxbXSksaS5XYSgxMDczNzQyMzM2LGVjLmEsZWMuYSxbWzIsQmwubF0saS56XSksaS5XYSgxMDI0LFVsLnMsVWwudixbWzMsVWwua11dKSxpLldhKDUxMixVbC5xLFVsLmMsW10pLGkuV2EoNTEyLFVsLmIsVWwuYixbXSksaS5XYSgyNTYsVWwuZyx7dXNlSGFzaDohMH0sW10pLGkuV2EoMTAyNCxhLmgsVWwudSxbYS5wLFsyLGEuYV0sVWwuZ10pLGkuV2EoNTEyLGEuZyxhLmcsW2EuaF0pLGkuV2EoNTEyLGkuaSxpLmksW10pLGkuV2EoNTEyLGkudSxpLkksW2kuaSxbMixpLkpdXSksaS5XYSgxMDI0LFVsLmksZnVuY3Rpb24oKXtyZXR1cm5bW3twYXRoOiJkYXNoYm9hcmQiLGNvbXBvbmVudDpzdSxjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoic2l0ZW1hcCIsY29tcG9uZW50OkZ1LGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJsYWJub3RlYm9vay86cGFnZXBhdGgiLGxvYWRDaGlsZHJlbjoiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZSNXaWtpTGlnaHRwcm94eUxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoibGFibm90ZWJvb2siLGxvYWRDaGlsZHJlbjoiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZSNXaWtpTGlnaHRwcm94eUxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoidGVhbSIsbG9hZENoaWxkcmVuOiIuL3RlYW0tcm9zdGVyL3RlYW0tcm9zdGVyLWxheWVyLm1vZHVsZSNUZWFtUm9zdGVyTGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJwcm9qZWN0Iixjb21wb25lbnQ6QnUsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6ImJpb2xvZ3kiLGNvbXBvbmVudDpZdSxjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoiY29tcHV0aW5nIixjb21wb25lbnQ6WnUsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6Imh1bWFuLXByYWN0aWNlcyIsY29tcG9uZW50OnRsLGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJzdXBwb3J0Iixsb2FkQ2hpbGRyZW46Ii4vc3VwcG9ydC1zZWN0aW9uL3N1cHBvcnQtc2VjdGlvbi1sYXllci5tb2R1bGUjU3VwcG9ydFNlY3Rpb25MYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6IiIscmVkaXJlY3RUbzoiZGFzaGJvYXJkIixwYXRoTWF0Y2g6ImZ1bGwifV1dfSxbXSksaS5XYSgxMDI0LFVsLmssVWwudyxbaS5nLFVsLnEsVWwuYixhLmcsaS5wLGkudSxpLmksVWwuaSxVbC5nLFsyLFVsLnBdLFsyLFVsLmpdXSksaS5XYSgxMDczNzQyMzM2LFVsLm0sVWwubSxbWzIsVWwuc10sWzIsVWwua11dKSxpLldhKDEwNzM3NDIzMzYsaWMsaWMsW10pLGkuV2EoMTA3Mzc0MjMzNixELmQsRC5kLFtdKSxpLldhKDEwNzM3NDIzMzYsS2wuZSxLbC5lLFtdKSxpLldhKDEwNzM3NDIzMzYsWmwuYixabC5iLFtdKSxpLldhKDEwNzM3NDIzMzYsWGwuZSxYbC5lLFtdKSxpLldhKDEwNzM3NDIzMzYsWGwuZCxYbC5kLFtdKSxpLldhKDEwNzM3NDIzMzYsb2MuYSxvYy5hLFtdKSxpLldhKDEwMjQsaS5jLGkuR2EsW10pLGkuV2EoMTA3Mzc0MjMzNixzLHMsW2kueixpLmNdKSxpLldhKDI1NixpLlosITAsW10pLGkuV2EoMjU2LGZsLmEsIkJyb3dzZXJBbmltYXRpb25zIixbXSksaS5XYSgyNTYsWGwubCwiWFNSRi1UT0tFTiIsW10pLGkuV2EoMjU2LFhsLm0sIlgtWFNSRi1UT0tFTiIsW10pXSl9KTtvLmEucHJvZHVjdGlvbiYmT2JqZWN0KGkuUykoKSxHbC5qKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShhYykuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSl9LHpvdG06ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkucGFyZW50PWUsaS5vdXRlclZhbHVlPW4saS5vdXRlckluZGV4PXIsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeU5leHQodGhpcy5vdXRlclZhbHVlLHQsdGhpcy5vdXRlckluZGV4LHRoaXMuaW5kZXgrKyx0aGlzKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeUVycm9yKHQsdGhpcyksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudC5ub3RpZnlDb21wbGV0ZSh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGV9KG4oIkZGT28iKS5hKSxvPW4oIkZ4YjEiKTtmdW5jdGlvbiBhKHQsZSxuLHIpe3ZhciBhPW5ldyBpKHQsbixyKTtyZXR1cm4gT2JqZWN0KG8uYSkoZSkoYSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX19LFtbNCwzXV1dKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFpbi5qcy5tYXA=");eval(base64script); </script>
+
<script>var base64script = atob("IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYT1yWzBdLGM9clsxXSxsPXJbMl0scD0wLGY9W107cDxhLmxlbmd0aDtwKyspb1tpPWFbcF1dJiZmLnB1c2gob1tpXVswXSksb1tpXT0wO2ZvcihuIGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbikmJihlW25dPWNbbl0pO2ZvcihzJiZzKHIpO2YubGVuZ3RoOylmLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsbHx8W10pLHQoKX1mdW5jdGlvbiB0KCl7Zm9yKHZhciBlLHI9MDtyPHUubGVuZ3RoO3IrKyl7Zm9yKHZhciB0PXVbcl0sbj0hMCxhPTE7YTx0Lmxlbmd0aDthKyspMCE9PW9bdFthXV0mJihuPSExKTtuJiYodS5zcGxpY2Uoci0tLDEpLGU9aShpLnM9dFswXSkpfXJldHVybiBlfXZhciBuPXt9LG89ezM6MH0sdT1bXTtmdW5jdGlvbiBpKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgdD1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxpKSx0Lmw9ITAsdC5leHBvcnRzfWkuZT1mdW5jdGlvbihlKXt2YXIgcj1bXSx0PW9bZV07aWYoMCE9PXQpaWYodClyLnB1c2godFsyXSk7ZWxzZXt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3Q9b1tlXT1bcixuXX0pO3IucHVzaCh0WzJdPW4pO3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLmNoYXJzZXQ9InV0Zi04IixhLnRpbWVvdXQ9MTIwLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkucCsiIisoe31bZV18fGUpKyIuanMifShlKTt2YXIgYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCh7dHlwZToidGltZW91dCIsdGFyZ2V0OmF9KX0sMTJlNCk7ZnVuY3Rpb24gbChyKXthLm9uZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQoYyk7dmFyIHQ9b1tlXTtpZigwIT09dCl7aWYodCl7dmFyIG49ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSx1PXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmMsaT1uZXcgRXJyb3IoIkxvYWRpbmcgY2h1bmsgIitlKyIgZmFpbGVkLlxuKCIrbisiOiAiK3UrIikiKTtpLnR5cGU9bixpLnJlcXVlc3Q9dSx0WzFdKGkpfW9bZV09dm9pZCAwfX1hLm9uZXJyb3I9YS5vbmxvYWQ9bCx1LmFwcGVuZENoaWxkKGEpfXJldHVybiBQcm9taXNlLmFsbChyKX0saS5tPWUsaS5jPW4saS5kPWZ1bmN0aW9uKGUscix0KXtpLm8oZSxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnR9KX0saS5yPWZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0saS5uPWZ1bmN0aW9uKGUpe3ZhciByPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBpLmQociwiYSIscikscn0saS5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxpLnA9IiIsaS5vZT1mdW5jdGlvbihlKXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9O3ZhciBhPXdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10sYz1hLnB1c2guYmluZChhKTthLnB1c2g9cixhPWEuc2xpY2UoKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylyKGFbbF0pO3ZhciBzPWM7dCgpfShbXSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXJ1bnRpbWUuanMubWFwKHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s1XSx7IityTHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIikuZG9jdW1lbnQ7ZS5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSwiMC9SNCI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sIjBUV3AiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGUpe3ZhciB0PWUucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbihlKXt0JiZ0Lm1hcmsmJnQubWFyayhlKX1mdW5jdGlvbiByKGUsbil7dCYmdC5tZWFzdXJlJiZ0Lm1lYXN1cmUoZSxuKX1pZihuKCJab25lIiksZS5ab25lKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTt2YXIgbyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3RoaXMuX3Byb3BlcnRpZXM9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uYW1lPXQ/dC5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz10JiZ0LnByb3BlcnRpZXN8fHt9LHRoaXMuX3pvbmVEZWxlZ2F0ZT1uZXcgYyh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsdCl9cmV0dXJuIHQuYXNzZXJ0Wm9uZVBhdGNoZWQ9ZnVuY3Rpb24oKXtpZihlLlByb21pc2UhPT1PLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5jdXJyZW50O2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjdXJyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihvLGkpe2lmKE8uaGFzT3duUHJvcGVydHkobykpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK28pO2lmKCFlWyJfX1pvbmVfZGlzYWJsZV8iK29dKXt2YXIgYT0iWm9uZToiK287bihhKSxPW29dPWkoZSx0LFMpLHIoYSxhKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRab25lV2l0aChlKTtpZih0KXJldHVybiB0Ll9wcm9wZXJ0aWVzW2VdfSx0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0Oyl7aWYodC5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdDt0PXQuX3BhcmVudH1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLGUpfSx0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK2UpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxlLHQpLHI9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsdCl9fSx0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj1udWxsKSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLGUsdCxuLHIpfWZpbmFsbHl7RD1ELnBhcmVudH19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09ciYmKHI9bnVsbCksRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsZSx0LG4scil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtEPUQucGFyZW50fX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihlLHQsbil7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIHJ1biBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKGUuc3RhdGUhPT15fHxlLnR5cGUhPT14KXt2YXIgcj1lLnN0YXRlIT1rO3ImJmUuX3RyYW5zaXRpb25UbyhrLG0pLGUucnVuQ291bnQrKzt2YXIgbz1qO2o9ZSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtlLnR5cGU9PUUmJmUuZGF0YSYmIWUuZGF0YS5pc1BlcmlvZGljJiYoZS5jYW5jZWxGbj1udWxsKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsZSx0LG4pfWNhdGNoKGUpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGUpKXRocm93IGV9fWZpbmFsbHl7ZS5zdGF0ZSE9PXkmJmUuc3RhdGUhPT1UJiYoZS50eXBlPT14fHxlLmRhdGEmJmUuZGF0YS5pc1BlcmlvZGljP3ImJmUuX3RyYW5zaXRpb25UbyhtLGspOihlLnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLHImJmUuX3RyYW5zaXRpb25Ubyh5LGsseSkpKSxEPUQucGFyZW50LGo9b319fSx0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lJiZlLnpvbmUhPT10aGlzKWZvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZS56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrZS56b25lLm5hbWUpO3Q9dC5wYXJlbnR9ZS5fdHJhbnNpdGlvblRvKF8seSk7dmFyIG49W107ZS5fem9uZURlbGVnYXRlcz1uLGUuX3pvbmU9dGhpczt0cnl7ZT10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsXyx5KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0KSx0fXJldHVybiBlLl96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsMSksZS5zdGF0ZT09XyYmZS5fdHJhbnNpdGlvblRvKG0sXyksZX0sdC5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHcsZSx0LG4scixudWxsKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KEUsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHgsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2UuX3RyYW5zaXRpb25UbyhiLG0sayk7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsYiksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdCksdH1yZXR1cm4gdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLGUuX3RyYW5zaXRpb25Ubyh5LGIpLGUucnVuQ291bnQ9MCxlfSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fem9uZURlbGVnYXRlczstMT09dCYmKGUuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXS5fdXBkYXRlVGFza0NvdW50KGUudHlwZSx0KX0sdC5fX3N5bWJvbF9fPXosdH0oKSxhPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5oYXNUYXNrKG4scil9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLnNjaGVkdWxlVGFzayhuLHIpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3JldHVybiBlLmludm9rZVRhc2sobixyLG8saSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5jYW5jZWxUYXNrKG4scil9fSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1lLHRoaXMuX3BhcmVudERlbGVnYXRlPXQsdGhpcy5fZm9ya1pTPW4mJihuJiZuLm9uRm9yaz9uOnQuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9biYmKG4ub25Gb3JrP3Q6dC5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1uJiYobi5vbkZvcms/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW50ZXJjZXB0WlM9biYmKG4ub25JbnRlcmNlcHQ/bjp0Ll9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1uJiYobi5vbkludGVyY2VwdD90OnQuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPW4mJihuLm9uSW50ZXJjZXB0P3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246dC5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/dDp0Ll9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPW4mJihuLm9uSGFuZGxlRXJyb3I/bjp0Ll9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9biYmKG4ub25IYW5kbGVFcnJvcj90OnQuX2hhbmRsZUVycm9yRGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1uJiYobi5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246dC5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/dDp0Ll9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VUYXNrWlM9biYmKG4ub25JbnZva2VUYXNrP246dC5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1uJiYobi5vbkludm9rZVRhc2s/dDp0Ll9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPW4mJihuLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9biYmKG4ub25DYW5jZWxUYXNrP246dC5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1uJiYobi5vbkNhbmNlbFRhc2s/dDp0Ll9jYW5jZWxUYXNrRGxndCksdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPW4mJihuLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIgcj1uJiZuLm9uSGFzVGFzazsocnx8dCYmdC5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1yP246YSx0aGlzLl9oYXNUYXNrRGxndD10LHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9ZSxuLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9YSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PXQsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1hLHRoaXMuX2ludm9rZVRhc2tEbGd0PXQsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksbi5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9YSx0aGlzLl9jYW5jZWxUYXNrRGxndD10LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsZSx0KTpuZXcgaShlLHQpfSxlLnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGUsdCxuKTp0fSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxlLHQsbixyLG8pOnQuYXBwbHkobixyKX0sZS5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLGUsdCl9LGUucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuPXQ7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZuLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKG49dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxlLHQpKXx8KG49dCk7ZWxzZSBpZih0LnNjaGVkdWxlRm4pdC5zY2hlZHVsZUZuKHQpO2Vsc2V7aWYodC50eXBlIT13KXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7dih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaW52b2tlVGFzaz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGUsdCxuLHIpOnQuY2FsbGJhY2suYXBwbHkobixyKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHRoaXMuX2NhbmNlbFRhc2taUyluPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGUsdCk7ZWxzZXtpZighdC5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO249dC5jYW5jZWxGbih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaGFzVGFzaz1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gdGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxlLHQpfWNhdGNoKHQpe3RoaXMuaGFuZGxlRXJyb3IoZSx0KX19LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90YXNrQ291bnRzLHI9bltlXSxvPW5bZV09cit0O2lmKG88MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1yJiYwIT1vfHx0aGlzLmhhc1Rhc2sodGhpcy56b25lLHttaWNyb1Rhc2s6bi5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6bi5tYWNyb1Rhc2s+MCxldmVudFRhc2s6bi5ldmVudFRhc2s+MCxjaGFuZ2U6ZX0pfSxlfSgpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4scixvLGksYSxjKXt0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1yLHRoaXMuZGF0YT1pLHRoaXMuc2NoZWR1bGVGbj1hLHRoaXMuY2FuY2VsRm49Yyx0aGlzLmNhbGxiYWNrPW87dmFyIHU9dGhpczt0aGlzLmludm9rZT1uPT09eCYmaSYmaS51c2VHP3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiB0Lmludm9rZVRhc2suY2FsbChlLHUsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gdC5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuKXtlfHwoZT10aGlzKSxQKys7dHJ5e3JldHVybiBlLnJ1bkNvdW50KyssZS56b25lLnJ1blRhc2soZSx0LG4pfWZpbmFsbHl7MT09UCYmZCgpLFAtLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKHksXyl9LHQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuX3N0YXRlIT09dCYmdGhpcy5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrIiAnIit0aGlzLnNvdXJjZSsiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciK2UrIicsIGV4cGVjdGluZyBzdGF0ZSAnIit0KyInIisobj8iIG9yICciK24rIiciOiIiKSsiLCB3YXMgJyIrdGhpcy5fc3RhdGUrIicuIik7dGhpcy5fc3RhdGU9ZSxlPT15JiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ2b2lkIDAhPT10aGlzLmRhdGEuaGFuZGxlSWQ/dGhpcy5kYXRhLmhhbmRsZUlkOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LHR9KCkscz16KCJzZXRUaW1lb3V0IiksbD16KCJQcm9taXNlIiksZj16KCJ0aGVuIikscD1bXSxoPSExO2Z1bmN0aW9uIHYodCl7MD09PVAmJjA9PT1wLmxlbmd0aCYmKG98fGVbbF0mJihvPWVbbF0ucmVzb2x2ZSgwKSksbz9vW2ZdKGQpOmVbc10oZCwwKSksdCYmcC5wdXNoKHQpfWZ1bmN0aW9uIGQoKXtpZighaCl7Zm9yKGg9ITA7cC5sZW5ndGg7KXt2YXIgZT1wO3A9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaChlKXtTLm9uVW5oYW5kbGVkRXJyb3IoZSl9fX1TLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBnPXtuYW1lOiJOTyBaT05FIn0seT0ibm90U2NoZWR1bGVkIixfPSJzY2hlZHVsaW5nIixtPSJzY2hlZHVsZWQiLGs9InJ1bm5pbmciLGI9ImNhbmNlbGluZyIsVD0idW5rbm93biIsdz0ibWljcm9UYXNrIixFPSJtYWNyb1Rhc2siLHg9ImV2ZW50VGFzayIsTz17fSxTPXtzeW1ib2w6eixjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIER9LG9uVW5oYW5kbGVkRXJyb3I6WixtaWNyb3Rhc2tEcmFpbkRvbmU6WixzY2hlZHVsZU1pY3JvVGFzazp2LHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWlbeigiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpaLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIFp9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sc2V0TmF0aXZlUHJvbWlzZTpmdW5jdGlvbihlKXtlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5yZXNvbHZlJiYobz1lLnJlc29sdmUoMCkpfX0sRD17cGFyZW50Om51bGwsem9uZTpuZXcgaShudWxsLG51bGwpfSxqPW51bGwsUD0wO2Z1bmN0aW9uIFooKXt9ZnVuY3Rpb24geihlKXtyZXR1cm4iX196b25lX3N5bWJvbF9fIitlfXIoIlpvbmUiLCJab25lIiksZS5ab25lPWl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsKSxab25lLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1PYmplY3QuZGVmaW5lUHJvcGVydHksaT1uLnN5bWJvbCxhPVtdLGM9aSgiUHJvbWlzZSIpLHU9aSgidGhlbiIpLHM9Il9fY3JlYXRpb25UcmFjZV9fIjtuLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24oZSl7aWYobi5zaG93VW5jYXVnaHRFcnJvcigpKXt2YXIgdD1lJiZlLnJlamVjdGlvbjt0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLHQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6dCwiOyBab25lOiIsZS56b25lLm5hbWUsIjsgVGFzazoiLGUudGFzayYmZS50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLHQsdCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKGUpfX0sbi5taWNyb3Rhc2tEcmFpbkRvbmU9ZnVuY3Rpb24oKXtmb3IoO2EubGVuZ3RoOylmb3IodmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT1hLnNoaWZ0KCk7dHJ5e2Uuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWNhdGNoKGUpe2YoZSl9fTthLmxlbmd0aDspZSgpfTt2YXIgbD1pKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIGYoZSl7bi5vblVuaGFuZGxlZEVycm9yKGUpO3RyeXt2YXIgcj10W2xdO3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLmNhbGwodGhpcyxlKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUudGhlbn1mdW5jdGlvbiBoKGUpe3JldHVybiBlfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIE0ucmVqZWN0KGUpfXZhciBkPWkoInN0YXRlIiksZz1pKCJ2YWx1ZSIpLHk9aSgiZmluYWxseSIpLF89aSgicGFyZW50UHJvbWlzZVZhbHVlIiksbT1pKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxrPSJQcm9taXNlLnRoZW4iLGI9bnVsbCxUPSEwLHc9ITEsRT0wO2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dHJ5e2ooZSx0LG4pfWNhdGNoKHQpe2ooZSwhMSx0KX19fXZhciBPPWZ1bmN0aW9uKCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxTPSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixEPWkoImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBqKGUscixpKXt2YXIgYyx1PU8oKTtpZihlPT09aSl0aHJvdyBuZXcgVHlwZUVycm9yKFMpO2lmKGVbZF09PT1iKXt2YXIgbD1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIGkmJiJmdW5jdGlvbiIhPXR5cGVvZiBpfHwobD1pJiZpLnRoZW4pfWNhdGNoKHQpe3JldHVybiB1KGZ1bmN0aW9uKCl7aihlLCExLHQpfSkoKSxlfWlmKHIhPT13JiZpIGluc3RhbmNlb2YgTSYmaS5oYXNPd25Qcm9wZXJ0eShkKSYmaS5oYXNPd25Qcm9wZXJ0eShnKSYmaVtkXSE9PWIpWihpKSxqKGUsaVtkXSxpW2ddKTtlbHNlIGlmKHIhPT13JiYiZnVuY3Rpb24iPT10eXBlb2YgbCl0cnl7bC5jYWxsKGksdSh4KGUscikpLHUoeChlLCExKSkpfWNhdGNoKHQpe3UoZnVuY3Rpb24oKXtqKGUsITEsdCl9KSgpfWVsc2V7ZVtkXT1yO3ZhciBmPWVbZ107aWYoZVtnXT1pLGVbeV09PT15JiZyPT09VCYmKGVbZF09ZVttXSxlW2ddPWVbX10pLHI9PT13JiZpIGluc3RhbmNlb2YgRXJyb3Ipe3ZhciBwPXQuY3VycmVudFRhc2smJnQuY3VycmVudFRhc2suZGF0YSYmdC5jdXJyZW50VGFzay5kYXRhW3NdO3AmJm8oaSxELHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpwfSl9Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDspeihlLGZbaCsrXSxmW2grK10sZltoKytdLGZbaCsrXSk7aWYoMD09Zi5sZW5ndGgmJnI9PXcpe2VbZF09RTt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrKChjPWkpJiZjLnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oYy5jb25zdHJ1Y3RvciYmYy5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeShjKTpjP2MudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpKyhpJiZpLnN0YWNrPyJcbiIraS5zdGFjazoiIikpfWNhdGNoKHIpe3ZhciB2PXI7di5yZWplY3Rpb249aSx2LnByb21pc2U9ZSx2LnpvbmU9dC5jdXJyZW50LHYudGFzaz10LmN1cnJlbnRUYXNrLGEucHVzaCh2KSxuLnNjaGVkdWxlTWljcm9UYXNrKCl9fX19cmV0dXJuIGV9dmFyIFA9aSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBaKGUpe2lmKGVbZF09PT1FKXt0cnl7dmFyIG49dFtQXTtuJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5jYWxsKHRoaXMse3JlamVjdGlvbjplW2ddLHByb21pc2U6ZX0pfWNhdGNoKGUpe31lW2RdPXc7Zm9yKHZhciByPTA7cjxhLmxlbmd0aDtyKyspZT09PWFbcl0ucHJvbWlzZSYmYS5zcGxpY2UociwxKX19ZnVuY3Rpb24geihlLHQsbixyLG8pe1ooZSk7dmFyIGk9ZVtkXSxhPWk/ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpoOiJmdW5jdGlvbiI9PXR5cGVvZiBvP286djt0LnNjaGVkdWxlTWljcm9UYXNrKGssZnVuY3Rpb24oKXt0cnl7dmFyIHI9ZVtnXSxvPW4mJnk9PT1uW3ldO28mJihuW19dPXIsblttXT1pKTt2YXIgYz10LnJ1bihhLHZvaWQgMCxvJiZhIT09diYmYSE9PWg/W106W3JdKTtqKG4sITAsYyl9Y2F0Y2goZSl7aihuLCExLGUpfX0sbil9dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7dGhpc1tkXT1iLHRoaXNbZ109W107dHJ5e3QmJnQoeCh0aGlzLFQpLHgodGhpcyx3KSl9Y2F0Y2goZSl7aih0aGlzLCExLGUpfX1yZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSxlLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksVCxlKX0sZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksdyxlKX0sZS5yYWNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1uZXcgdGhpcyhmdW5jdGlvbihlLHIpe3Q9ZSxuPXJ9KTtmdW5jdGlvbiBvKGUpe3ImJihyPXQoZSkpfWZ1bmN0aW9uIGkoZSl7ciYmKHI9bihlKSl9Zm9yKHZhciBhPTAsYz1lO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO3AodSl8fCh1PXRoaXMucmVzb2x2ZSh1KSksdS50aGVuKG8saSl9cmV0dXJuIHJ9LGUuYWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9bmV3IHRoaXMoZnVuY3Rpb24oZSxyKXt0PWUsbj1yfSksbz0wLGk9W10sYT0wLGM9ZTthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtwKHUpfHwodT10aGlzLnJlc29sdmUodSkpLHUudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7aVtlXT1uLC0tb3x8dChpKX19KG8pLG4pLG8rK31yZXR1cm4gb3x8dChpKSxyfSxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsbil7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCksbz10LmN1cnJlbnQ7cmV0dXJuIHRoaXNbZF09PWI/dGhpc1tnXS5wdXNoKG8scixlLG4pOnoodGhpcyxvLHIsZSxuKSxyfSxlLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LGUucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCk7blt5XT15O3ZhciByPXQuY3VycmVudDtyZXR1cm4gdGhpc1tkXT09Yj90aGlzW2ddLnB1c2gocixuLGUsZSk6eih0aGlzLHIsbixlLGUpLG59LGV9KCk7TS5yZXNvbHZlPU0ucmVzb2x2ZSxNLnJlamVjdD1NLnJlamVjdCxNLnJhY2U9TS5yYWNlLE0uYWxsPU0uYWxsO3ZhciBDPWVbY109ZS5Qcm9taXNlLFI9dC5fX3N5bWJvbF9fKCJab25lQXdhcmVQcm9taXNlIiksST1yKGUsIlByb21pc2UiKTtJJiYhSS5jb25maWd1cmFibGV8fChJJiZkZWxldGUgSS53cml0YWJsZSxJJiZkZWxldGUgSS52YWx1ZSxJfHwoST17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KSxJLmdldD1mdW5jdGlvbigpe3JldHVybiBlW1JdP2VbUl06ZVtjXX0sSS5zZXQ9ZnVuY3Rpb24odCl7dD09PU0/ZVtSXT10OihlW2NdPXQsdC5wcm90b3R5cGVbdV18fHEodCksbi5zZXROYXRpdmVQcm9taXNlKHQpKX0sbyhlLCJQcm9taXNlIixJKSksZS5Qcm9taXNlPU07dmFyIEYsTD1pKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHEoZSl7dmFyIHQ9ZS5wcm90b3R5cGUsbj1yKHQsInRoZW4iKTtpZighbnx8ITEhPT1uLndyaXRhYmxlJiZuLmNvbmZpZ3VyYWJsZSl7dmFyIG89dC50aGVuO3RbdV09byxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IE0oZnVuY3Rpb24oZSx0KXtvLmNhbGwobixlLHQpfSkudGhlbihlLHQpfSxlW0xdPSEwfX1pZihDKXtxKEMpO3ZhciBBPWUuZmV0Y2g7ImZ1bmN0aW9uIj09dHlwZW9mIEEmJihlLmZldGNoPShGPUEsZnVuY3Rpb24oKXt2YXIgZT1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihlIGluc3RhbmNlb2YgTSlyZXR1cm4gZTt2YXIgdD1lLmNvbnN0cnVjdG9yO3JldHVybiB0W0xdfHxxKHQpLGV9KSl9cmV0dXJuIFByb21pc2VbdC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09YSxNfSk7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixyPU9iamVjdC5jcmVhdGUsbz1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT0iYWRkRXZlbnRMaXN0ZW5lciIsYT0icmVtb3ZlRXZlbnRMaXN0ZW5lciIsYz1ab25lLl9fc3ltYm9sX18oaSksdT1ab25lLl9fc3ltYm9sX18oYSkscz0idHJ1ZSIsbD0iZmFsc2UiLGY9Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gcChlLHQpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scixvKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGUsdCxuLHIsbyl9dmFyIHY9Wm9uZS5fX3N5bWJvbF9fLGQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3csZz1kP3dpbmRvdzp2b2lkIDAseT1kJiZnfHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCxfPSJyZW1vdmVBdHRyaWJ1dGUiLG09W251bGxdO2Z1bmN0aW9uIGsoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmKGVbbl09cChlW25dLHQrIl8iK24pKTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe3JldHVybiFlfHwhMSE9PWUud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0JiZ2b2lkIDA9PT1lLnNldCl9dmFyIFQ9InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHc9ISgibnciaW4geSkmJnZvaWQgMCE9PXkucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpLEU9IXcmJiFUJiYhKCFkfHwhZy5IVE1MRWxlbWVudCkseD12b2lkIDAhPT15LnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSYmIVQmJiEoIWR8fCFnLkhUTUxFbGVtZW50KSxPPXt9LFM9ZnVuY3Rpb24oZSl7aWYoZT1lfHx5LmV2ZW50KXt2YXIgdD1PW2UudHlwZV07dHx8KHQ9T1tlLnR5cGVdPXYoIk9OX1BST1BFUlRZIitlLnR5cGUpKTt2YXIgbj0odGhpc3x8ZS50YXJnZXR8fHkpW3RdLHI9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMD09cnx8cnx8ZS5wcmV2ZW50RGVmYXVsdCgpLHJ9fTtmdW5jdGlvbiBEKG4scixvKXt2YXIgaT1lKG4scik7aWYoIWkmJm8mJmUobyxyKSYmKGk9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksaSYmaS5jb25maWd1cmFibGUpe2RlbGV0ZSBpLndyaXRhYmxlLGRlbGV0ZSBpLnZhbHVlO3ZhciBhPWkuZ2V0LGM9aS5zZXQsdT1yLnN1YnN0cigyKSxzPU9bdV07c3x8KHM9T1t1XT12KCJPTl9QUk9QRVJUWSIrdSkpLGkuc2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dHx8biE9PXl8fCh0PXkpLHQmJih0W3NdJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIodSxTKSxjJiZjLmFwcGx5KHQsbSksImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRbc109ZSx0LmFkZEV2ZW50TGlzdGVuZXIodSxTLCExKSk6dFtzXT1udWxsKX0saS5nZXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGV8fG4hPT15fHwoZT15KSwhZSlyZXR1cm4gbnVsbDt2YXIgdD1lW3NdO2lmKHQpcmV0dXJuIHQ7aWYoYSl7dmFyIG89YSYmYS5jYWxsKHRoaXMpO2lmKG8pcmV0dXJuIGkuc2V0LmNhbGwodGhpcyxvKSwiZnVuY3Rpb24iPT10eXBlb2YgZVtfXSYmZS5yZW1vdmVBdHRyaWJ1dGUociksb31yZXR1cm4gbnVsbH0sdChuLHIsaSl9fWZ1bmN0aW9uIGooZSx0LG4pe2lmKHQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspRChlLCJvbiIrdFtyXSxuKTtlbHNle3ZhciBvPVtdO2Zvcih2YXIgaSBpbiBlKSJvbiI9PWkuc3Vic3RyKDAsMikmJm8ucHVzaChpKTtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKylEKGUsb1thXSxuKX19dmFyIFA9digib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIFooZSl7dmFyIG49eVtlXTtpZihuKXt5W3YoZSldPW4seVtlXT1mdW5jdGlvbigpe3ZhciB0PWsoYXJndW1lbnRzLGUpO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnRoaXNbUF09bmV3IG47YnJlYWs7Y2FzZSAxOnRoaXNbUF09bmV3IG4odFswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbUF09bmV3IG4odFswXSx0WzFdKTticmVhaztjYXNlIDM6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0sdFsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbUF09bmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sTSh5W2VdLG4pO3ZhciByLG89bmV3IG4oZnVuY3Rpb24oKXt9KTtmb3IociBpbiBvKSJYTUxIdHRwUmVxdWVzdCI9PT1lJiYicmVzcG9uc2VCbG9iIj09PXJ8fGZ1bmN0aW9uKG4peyJmdW5jdGlvbiI9PXR5cGVvZiBvW25dP3lbZV0ucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbUF1bbl0uYXBwbHkodGhpc1tQXSxhcmd1bWVudHMpfTp0KHlbZV0ucHJvdG90eXBlLG4se3NldDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdD8odGhpc1tQXVtuXT1wKHQsZSsiLiIrbiksTSh0aGlzW1BdW25dLHQpKTp0aGlzW1BdW25dPXR9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1BdW25dfX0pfShyKTtmb3IociBpbiBuKSJwcm90b3R5cGUiIT09ciYmbi5oYXNPd25Qcm9wZXJ0eShyKSYmKHlbZV1bcl09bltyXSl9fWZ1bmN0aW9uIHoodCxyLG8pe2Zvcih2YXIgaT10O2kmJiFpLmhhc093blByb3BlcnR5KHIpOylpPW4oaSk7IWkmJnRbcl0mJihpPXQpO3ZhciBhLGM9dihyKTtpZihpJiYhKGE9aVtjXSkmJihhPWlbY109aVtyXSxiKGkmJmUoaSxyKSkpKXt2YXIgdT1vKGEsYyxyKTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyxhcmd1bWVudHMpfSxNKGlbcl0sYSl9cmV0dXJuIGF9ZnVuY3Rpb24gTShlLHQpe2VbdigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT10fXZhciBDPSExLFI9ITE7ZnVuY3Rpb24gSSgpe2lmKEMpcmV0dXJuIFI7Qz0hMDt0cnl7dmFyIGU9Zy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybi0xPT09ZS5pbmRleE9mKCJNU0lFICIpJiYtMT09PWUuaW5kZXhPZigiVHJpZGVudC8iKSYmLTE9PT1lLmluZGV4T2YoIkVkZ2UvIil8fChSPSEwKSxSfWNhdGNoKGUpe319Wm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbihlKXt2YXIgdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbj12KCJPcmlnaW5hbERlbGVnYXRlIikscj12KCJQcm9taXNlIiksbz12KCJFcnJvciIpLGk9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIGk9dGhpc1tuXTtpZihpKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3QuYXBwbHkodGhpc1tuXSxhcmd1bWVudHMpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIGE9ZVtyXTtpZihhKXJldHVybiB0LmFwcGx5KGEsYXJndW1lbnRzKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBjPWVbb107aWYoYylyZXR1cm4gdC5hcHBseShjLGFyZ3VtZW50cyl9fXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aVtuXT10LEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1pO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIEY9e3VzZUc6ITB9LEw9e30scT17fSxBPS9eX196b25lX3N5bWJvbF9fKFx3KykodHJ1ZXxmYWxzZSkkLyxIPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiO2Z1bmN0aW9uIE4oZSx0LHIpe3ZhciBvPXImJnIuYWRkfHxpLGM9ciYmci5ybXx8YSx1PXImJnIubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLHA9ciYmci5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsaD12KG8pLGQ9Ii4iK28rIjoiLGc9InByZXBlbmRMaXN0ZW5lciIseT0iLiIrZysiOiIsXz1mdW5jdGlvbihlLHQsbil7aWYoIWUuaXNSZW1vdmVkKXt2YXIgcj1lLmNhbGxiYWNrOyJvYmplY3QiPT10eXBlb2YgciYmci5oYW5kbGVFdmVudCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaGFuZGxlRXZlbnQoZSl9LGUub3JpZ2luYWxEZWxlZ2F0ZT1yKSxlLmludm9rZShlLHQsW25dKTt2YXIgbz1lLm9wdGlvbnM7byYmIm9iamVjdCI9PXR5cGVvZiBvJiZvLm9uY2UmJnRbY10uY2FsbCh0LG4udHlwZSxlLm9yaWdpbmFsRGVsZWdhdGU/ZS5vcmlnaW5hbERlbGVnYXRlOmUuY2FsbGJhY2ssbyl9fSxtPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8ZS5ldmVudCl7dmFyIG49dGhpc3x8dC50YXJnZXR8fGUscj1uW0xbdC50eXBlXVtsXV07aWYocilpZigxPT09ci5sZW5ndGgpXyhyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoJiYoIXR8fCEwIT09dFtIXSk7aSsrKV8ob1tpXSxuLHQpfX0saz1mdW5jdGlvbih0KXtpZih0PXR8fGUuZXZlbnQpe3ZhciBuPXRoaXN8fHQudGFyZ2V0fHxlLHI9bltMW3QudHlwZV1bc11dO2lmKHIpaWYoMT09PXIubGVuZ3RoKV8oclswXSxuLHQpO2Vsc2UgZm9yKHZhciBvPXIuc2xpY2UoKSxpPTA7aTxvLmxlbmd0aCYmKCF0fHwhMCE9PXRbSF0pO2krKylfKG9baV0sbix0KX19O2Z1bmN0aW9uIGIodCxyKXtpZighdClyZXR1cm4hMTt2YXIgaT0hMDtyJiZ2b2lkIDAhPT1yLnVzZUcmJihpPXIudXNlRyk7dmFyIGE9ciYmci52aCxfPSEwO3ImJnZvaWQgMCE9PXIuY2hrRHVwJiYoXz1yLmNoa0R1cCk7dmFyIGI9ITE7ciYmdm9pZCAwIT09ci5ydCYmKGI9ci5ydCk7Zm9yKHZhciBUPXQ7VCYmIVQuaGFzT3duUHJvcGVydHkobyk7KVQ9bihUKTtpZighVCYmdFtvXSYmKFQ9dCksIVQpcmV0dXJuITE7aWYoVFtoXSlyZXR1cm4hMTt2YXIgdyxFPXt9LHg9VFtoXT1UW29dLE89VFt2KGMpXT1UW2NdLFM9VFt2KHUpXT1UW3VdLEQ9VFt2KHApXT1UW3BdO3ImJnIucHJlcGVuZCYmKHc9VFt2KHIucHJlcGVuZCldPVRbci5wcmVwZW5kXSk7dmFyIGo9aT9mdW5jdGlvbigpe2lmKCFFLmlzRXhpc3RpbmcpcmV0dXJuIHguY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxFLmNhcHR1cmU/azptLEUub3B0aW9ucyl9OmZ1bmN0aW9uKGUpe3JldHVybiB4LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsZS5pbnZva2UsRS5vcHRpb25zKX0sUD1pP2Z1bmN0aW9uKGUpe2lmKCFlLmlzUmVtb3ZlZCl7dmFyIHQ9TFtlLmV2ZW50TmFtZV0sbj12b2lkIDA7dCYmKG49dFtlLmNhcHR1cmU/czpsXSk7dmFyIHI9biYmZS50YXJnZXRbbl07aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZihyW29dPT09ZSl7ci5zcGxpY2UobywxKSxlLmlzUmVtb3ZlZD0hMCwwPT09ci5sZW5ndGgmJihlLmFsbFJlbW92ZWQ9ITAsZS50YXJnZXRbbl09bnVsbCk7YnJlYWt9fWlmKGUuYWxsUmVtb3ZlZClyZXR1cm4gTy5jYWxsKGUudGFyZ2V0LGUuZXZlbnROYW1lLGUuY2FwdHVyZT9rOm0sZS5vcHRpb25zKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE8uY2FsbChlLnRhcmdldCxlLmV2ZW50TmFtZSxlLmludm9rZSxlLm9wdGlvbnMpfSxaPXImJnIuZGlmZj9yLmRpZmY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgdDtyZXR1cm4iZnVuY3Rpb24iPT09biYmZS5jYWxsYmFjaz09PXR8fCJvYmplY3QiPT09biYmZS5vcmlnaW5hbERlbGVnYXRlPT09dH0sej1ab25lW1pvbmUuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSxDPWZ1bmN0aW9uKHQsbixyLG8sYyx1KXtyZXR1cm4gdm9pZCAwPT09YyYmKGM9ITEpLHZvaWQgMD09PXUmJih1PSExKSxmdW5jdGlvbigpe3ZhciBwPXRoaXN8fGUsaD1hcmd1bWVudHNbMV07aWYoIWgpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB2PSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoKXtpZighaC5oYW5kbGVFdmVudClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dj0hMH1pZighYXx8YSh0LGgscCxhcmd1bWVudHMpKXt2YXIgZCxnPWFyZ3VtZW50c1swXSx5PWFyZ3VtZW50c1syXTtpZih6KWZvcih2YXIgbT0wO208ei5sZW5ndGg7bSsrKWlmKGc9PT16W21dKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaz0hMTt2b2lkIDA9PT15P2Q9ITE6ITA9PT15P2Q9ITA6ITE9PT15P2Q9ITE6KGQ9ISF5JiYhIXkuY2FwdHVyZSxrPSEheSYmISF5Lm9uY2UpO3ZhciBiLFQ9Wm9uZS5jdXJyZW50LHc9TFtnXTtpZih3KWI9d1tkP3M6bF07ZWxzZXt2YXIgeD1mKyhnK2wpLE89ZisoZytzKTtMW2ddPXt9LExbZ11bbF09eCxMW2ddW3NdPU8sYj1kP086eH12YXIgUyxEPXBbYl0saj0hMTtpZihEKXtpZihqPSEwLF8pZm9yKG09MDttPEQubGVuZ3RoO20rKylpZihaKERbbV0saCkpcmV0dXJufWVsc2UgRD1wW2JdPVtdO3ZhciBQPXAuY29uc3RydWN0b3IubmFtZSxNPXFbUF07TSYmKFM9TVtnXSksU3x8KFM9UCtuK2cpLEUub3B0aW9ucz15LGsmJihFLm9wdGlvbnMub25jZT0hMSksRS50YXJnZXQ9cCxFLmNhcHR1cmU9ZCxFLmV2ZW50TmFtZT1nLEUuaXNFeGlzdGluZz1qO3ZhciBDPWk/RjpudWxsO0MmJihDLnRhc2tEYXRhPUUpO3ZhciBSPVQuc2NoZWR1bGVFdmVudFRhc2soUyxoLEMscixvKTtyZXR1cm4gRS50YXJnZXQ9bnVsbCxDJiYoQy50YXNrRGF0YT1udWxsKSxrJiYoeS5vbmNlPSEwKSxSLm9wdGlvbnM9eSxSLnRhcmdldD1wLFIuY2FwdHVyZT1kLFIuZXZlbnROYW1lPWcsdiYmKFIub3JpZ2luYWxEZWxlZ2F0ZT1oKSx1P0QudW5zaGlmdChSKTpELnB1c2goUiksYz9wOnZvaWQgMH19fTtyZXR1cm4gVFtvXT1DKHgsZCxqLFAsYiksdyYmKFRbZ109Qyh3LHksZnVuY3Rpb24oZSl7cmV0dXJuIHcuY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxlLmludm9rZSxFLm9wdGlvbnMpfSxQLGIsITApKSxUW2NdPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzfHxlLHI9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzJdO3Q9dm9pZCAwIT09byYmKCEwPT09b3x8ITEhPT1vJiYhIW8mJiEhby5jYXB0dXJlKTt2YXIgaT1hcmd1bWVudHNbMV07aWYoIWkpcmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFhfHxhKE8saSxuLGFyZ3VtZW50cykpe3ZhciBjLHU9TFtyXTt1JiYoYz11W3Q/czpsXSk7dmFyIGY9YyYmbltjXTtpZihmKWZvcih2YXIgcD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgaD1mW3BdO2lmKFooaCxpKSlyZXR1cm4gZi5zcGxpY2UocCwxKSxoLmlzUmVtb3ZlZD0hMCwwPT09Zi5sZW5ndGgmJihoLmFsbFJlbW92ZWQ9ITAsbltjXT1udWxsKSxoLnpvbmUuY2FuY2VsVGFzayhoKSxiP246dm9pZCAwfXJldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFRbdV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj1XKHRoaXN8fGUsYXJndW1lbnRzWzBdKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07dC5wdXNoKG8ub3JpZ2luYWxEZWxlZ2F0ZT9vLm9yaWdpbmFsRGVsZWdhdGU6by5jYWxsYmFjayl9cmV0dXJuIHR9LFRbcF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzfHxlLG49YXJndW1lbnRzWzBdO2lmKG4pe3ZhciByPUxbbl07aWYocil7dmFyIG89dFtyW2xdXSxpPXRbcltzXV07aWYobyl7dmFyIGE9by5zbGljZSgpO2ZvcihoPTA7aDxhLmxlbmd0aDtoKyspdGhpc1tjXS5jYWxsKHRoaXMsbiwodT1hW2hdKS5vcmlnaW5hbERlbGVnYXRlP3Uub3JpZ2luYWxEZWxlZ2F0ZTp1LmNhbGxiYWNrLHUub3B0aW9ucyl9aWYoaSlmb3IoYT1pLnNsaWNlKCksaD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgdTt0aGlzW2NdLmNhbGwodGhpcyxuLCh1PWFbaF0pLm9yaWdpbmFsRGVsZWdhdGU/dS5vcmlnaW5hbERlbGVnYXRlOnUuY2FsbGJhY2ssdS5vcHRpb25zKX19fWVsc2V7Zm9yKHZhciBmPU9iamVjdC5rZXlzKHQpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHY9QS5leGVjKGZbaF0pLGQ9diYmdlsxXTtkJiYicmVtb3ZlTGlzdGVuZXIiIT09ZCYmdGhpc1twXS5jYWxsKHRoaXMsZCl9dGhpc1twXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoYilyZXR1cm4gdGhpc30sTShUW29dLHgpLE0oVFtjXSxPKSxEJiZNKFRbcF0sRCksUyYmTShUW3VdLFMpLCEwfWZvcih2YXIgVD1bXSx3PTA7dzx0Lmxlbmd0aDt3KyspVFt3XT1iKHRbd10scik7cmV0dXJuIFR9ZnVuY3Rpb24gVyhlLHQpe3ZhciBuPVtdO2Zvcih2YXIgciBpbiBlKXt2YXIgbz1BLmV4ZWMociksaT1vJiZvWzFdO2lmKGkmJighdHx8aT09PXQpKXt2YXIgYT1lW3JdO2lmKGEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspbi5wdXNoKGFbY10pfX1yZXR1cm4gbn12YXIgWD12KCJ6b25lVGFzayIpO2Z1bmN0aW9uIEsoZSx0LG4scil7dmFyIG89bnVsbCxpPW51bGw7bis9cjt2YXIgYT17fTtmdW5jdGlvbiBjKHQpe3ZhciBuPXQuZGF0YTtyZXR1cm4gbi5hcmdzWzBdPWZ1bmN0aW9uKCl7dHJ5e3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3QuZGF0YSYmdC5kYXRhLmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIG4uaGFuZGxlSWQ/ZGVsZXRlIGFbbi5oYW5kbGVJZF06bi5oYW5kbGVJZCYmKG4uaGFuZGxlSWRbWF09bnVsbCkpfX0sbi5oYW5kbGVJZD1vLmFwcGx5KGUsbi5hcmdzKSx0fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGkoZS5kYXRhLmhhbmRsZUlkKX1vPXooZSx0Kz1yLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihvLGkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpWzBdKXt2YXIgcz1oKHQsaVswXSx7aGFuZGxlSWQ6bnVsbCxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1yLGRlbGF5OiJUaW1lb3V0Ij09PXJ8fCJJbnRlcnZhbCI9PT1yP2lbMV18fDA6bnVsbCxhcmdzOml9LGMsdSk7aWYoIXMpcmV0dXJuIHM7dmFyIGw9cy5kYXRhLmhhbmRsZUlkO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9hW2xdPXM6bCYmKGxbWF09cyksbCYmbC5yZWYmJmwudW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwudW5yZWYmJihzLnJlZj1sLnJlZi5iaW5kKGwpLHMudW5yZWY9bC51bnJlZi5iaW5kKGwpKSwibnVtYmVyIj09dHlwZW9mIGx8fGw/bDpzfXJldHVybiBuLmFwcGx5KGUsaSl9fSksaT16KGUsbixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbyxpPXJbMF07Im51bWJlciI9PXR5cGVvZiBpP289YVtpXToobz1pJiZpW1hdKXx8KG89aSksbyYmInN0cmluZyI9PXR5cGVvZiBvLnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1vLnN0YXRlJiYoby5jYW5jZWxGbiYmby5kYXRhLmlzUGVyaW9kaWN8fDA9PT1vLnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgaT9kZWxldGUgYVtpXTppJiYoaVtYXT1udWxsKSxvLnpvbmUuY2FuY2VsVGFzayhvKSk6dC5hcHBseShlLHIpfX0pfXZhciBVPU9iamVjdFt2KCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksQj1PYmplY3RbdigiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWT1PYmplY3QuY3JlYXRlLEo9digidW5jb25maWd1cmFibGVzIik7ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlJiZlW0pdJiZlW0pdW3RdfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBPYmplY3QuaXNGcm96ZW4obil8fChuLmNvbmZpZ3VyYWJsZT0hMCksbi5jb25maWd1cmFibGV8fChlW0pdfHxPYmplY3QuaXNGcm96ZW4oZSl8fFUoZSxKLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLGVbSl0mJihlW0pdW3RdPSEwKSksbn1mdW5jdGlvbiBRKGUsdCxuLHIpe3RyeXtyZXR1cm4gVShlLHQsbil9Y2F0Y2goaSl7aWYoIW4uY29uZmlndXJhYmxlKXRocm93IGk7dm9pZCAwPT09cj9kZWxldGUgbi5jb25maWd1cmFibGU6bi5jb25maWd1cmFibGU9cjt0cnl7cmV0dXJuIFUoZSx0LG4pfWNhdGNoKHIpe3ZhciBvPW51bGw7dHJ5e289SlNPTi5zdHJpbmdpZnkobil9Y2F0Y2goZSl7bz1uLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciK3QrIicgd2l0aCBkZXNjcmlwdG9yICciK28rIicgb24gb2JqZWN0ICciK2UrIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiK3IpfX19dmFyICQ9WyJhYnNvbHV0ZWRldmljZW9yaWVudGF0aW9uIiwiYWZ0ZXJpbnB1dCIsImFmdGVycHJpbnQiLCJhcHBpbnN0YWxsZWQiLCJiZWZvcmVpbnN0YWxscHJvbXB0IiwiYmVmb3JlcHJpbnQiLCJiZWZvcmV1bmxvYWQiLCJkZXZpY2VsaWdodCIsImRldmljZW1vdGlvbiIsImRldmljZW9yaWVudGF0aW9uIiwiZGV2aWNlb3JpZW50YXRpb25hYnNvbHV0ZSIsImRldmljZXByb3hpbWl0eSIsImhhc2hjaGFuZ2UiLCJsYW5ndWFnZWNoYW5nZSIsIm1lc3NhZ2UiLCJtb3piZWZvcmVwYWludCIsIm9mZmxpbmUiLCJvbmxpbmUiLCJwYWludCIsInBhZ2VzaG93IiwicGFnZWhpZGUiLCJwb3BzdGF0ZSIsInJlamVjdGlvbmhhbmRsZWQiLCJzdG9yYWdlIiwidW5oYW5kbGVkcmVqZWN0aW9uIiwidW5sb2FkIiwidXNlcnByb3hpbWl0eSIsInZyZGlzcGx5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLGVlPVsiZW5jcnlwdGVkIiwid2FpdGluZ2ZvcmtleSIsIm1zbmVlZGtleSIsIm1vemludGVycnVwdGJlZ2luIiwibW96aW50ZXJydXB0ZW5kIl0sdGU9WyJsb2FkIl0sbmU9WyJibHVyIiwiZXJyb3IiLCJmb2N1cyIsImxvYWQiLCJyZXNpemUiLCJzY3JvbGwiLCJtZXNzYWdlZXJyb3IiXSxyZT1bImJvdW5jZSIsImZpbmlzaCIsInN0YXJ0Il0sb2U9WyJsb2Fkc3RhcnQiLCJwcm9ncmVzcyIsImFib3J0IiwiZXJyb3IiLCJsb2FkIiwicHJvZ3Jlc3MiLCJ0aW1lb3V0IiwibG9hZGVuZCIsInJlYWR5c3RhdGVjaGFuZ2UiXSxpZT1bInVwZ3JhZGVuZWVkZWQiLCJjb21wbGV0ZSIsImFib3J0Iiwic3VjY2VzcyIsImVycm9yIiwiYmxvY2tlZCIsInZlcnNpb25jaGFuZ2UiLCJjbG9zZSJdLGFlPVsiY2xvc2UiLCJlcnJvciIsIm9wZW4iLCJtZXNzYWdlIl0sY2U9WyJlcnJvciIsIm1lc3NhZ2UiXSx1ZT1bImFib3J0IiwiYW5pbWF0aW9uY2FuY2VsIiwiYW5pbWF0aW9uZW5kIiwiYW5pbWF0aW9uaXRlcmF0aW9uIiwiYXV4Y2xpY2siLCJiZWZvcmVpbnB1dCIsImJsdXIiLCJjYW5jZWwiLCJjYW5wbGF5IiwiY2FucGxheXRocm91Z2giLCJjaGFuZ2UiLCJjb21wb3NpdGlvbnN0YXJ0IiwiY29tcG9zaXRpb251cGRhdGUiLCJjb21wb3NpdGlvbmVuZCIsImN1ZWNoYW5nZSIsImNsaWNrIiwiY2xvc2UiLCJjb250ZXh0bWVudSIsImN1cmVjaGFuZ2UiLCJkYmxjbGljayIsImRyYWciLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiZHJhZ2V4aXQiLCJkcmFnbGVhdmUiLCJkcmFnb3ZlciIsImRyb3AiLCJkdXJhdGlvbmNoYW5nZSIsImVtcHRpZWQiLCJlbmRlZCIsImVycm9yIiwiZm9jdXMiLCJmb2N1c2luIiwiZm9jdXNvdXQiLCJnb3Rwb2ludGVyY2FwdHVyZSIsImlucHV0IiwiaW52YWxpZCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwibG9hZCIsImxvYWRzdGFydCIsImxvYWRlZGRhdGEiLCJsb2FkZWRtZXRhZGF0YSIsImxvc3Rwb2ludGVyY2FwdHVyZSIsIm1vdXNlZG93biIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJtb3VzZXVwIiwibW91c2V3aGVlbCIsIm9yaWVudGF0aW9uY2hhbmdlIiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyZG93biIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsInBvaW50ZXJsb2NrY2hhbmdlIiwibW96cG9pbnRlcmxvY2tjaGFuZ2UiLCJ3ZWJraXRwb2ludGVybG9ja2VyY2hhbmdlIiwicG9pbnRlcmxvY2tlcnJvciIsIm1venBvaW50ZXJsb2NrZXJyb3IiLCJ3ZWJraXRwb2ludGVybG9ja2Vycm9yIiwicG9pbnRlcm1vdmUiLCJwb2ludG91dCIsInBvaW50ZXJvdmVyIiwicG9pbnRlcnVwIiwicHJvZ3Jlc3MiLCJyYXRlY2hhbmdlIiwicmVzZXQiLCJyZXNpemUiLCJzY3JvbGwiLCJzZWVrZWQiLCJzZWVraW5nIiwic2VsZWN0Iiwic2VsZWN0aW9uY2hhbmdlIiwic2VsZWN0c3RhcnQiLCJzaG93Iiwic29ydCIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5kIiwidGltZXVwZGF0ZSIsInZvbHVtZWNoYW5nZSIsInRvdWNoY2FuY2VsIiwidG91Y2htb3ZlIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIiwidHJhbnNpdGlvbmNhbmNlbCIsInRyYW5zaXRpb25lbmQiLCJ3YWl0aW5nIiwid2hlZWwiXS5jb25jYXQoWyJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIndlYmdsY29udGV4dGxvc3QiLCJ3ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yIl0sWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLFsidG9nZ2xlIl0sWyJhZnRlcnNjcmlwdGV4ZWN1dGUiLCJiZWZvcmVzY3JpcHRleGVjdXRlIiwiRE9NQ29udGVudExvYWRlZCIsImZ1bGxzY3JlZW5jaGFuZ2UiLCJtb3pmdWxsc2NyZWVuY2hhbmdlIiwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsIm1zZnVsbHNjcmVlbmNoYW5nZSIsImZ1bGxzY3JlZW5lcnJvciIsIm1vemZ1bGxzY3JlZW5lcnJvciIsIndlYmtpdGZ1bGxzY3JlZW5lcnJvciIsIm1zZnVsbHNjcmVlbmVycm9yIiwicmVhZHlzdGF0ZWNoYW5nZSIsInZpc2liaWxpdHljaGFuZ2UiXSwkLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLFsiYWN0aXZhdGUiLCJhZnRlcnVwZGF0ZSIsImFyaWFyZXF1ZXN0IiwiYmVmb3JlYWN0aXZhdGUiLCJiZWZvcmVkZWFjdGl2YXRlIiwiYmVmb3JlZWRpdGZvY3VzIiwiYmVmb3JldXBkYXRlIiwiY2VsbGNoYW5nZSIsImNvbnRyb2xzZWxlY3QiLCJkYXRhYXZhaWxhYmxlIiwiZGF0YXNldGNoYW5nZWQiLCJkYXRhc2V0Y29tcGxldGUiLCJlcnJvcnVwZGF0ZSIsImZpbHRlcmNoYW5nZSIsImxheW91dGNvbXBsZXRlIiwibG9zZWNhcHR1cmUiLCJtb3ZlIiwibW92ZWVuZCIsIm1vdmVzdGFydCIsInByb3BlcnR5Y2hhbmdlIiwicmVzaXplZW5kIiwicmVzaXplc3RhcnQiLCJyb3dlbnRlciIsInJvd2V4aXQiLCJyb3dzZGVsZXRlIiwicm93c2luc2VydGVkIiwiY29tbWFuZCIsImNvbXBhc3NuZWVkc2NhbGlicmF0aW9uIiwiZGVhY3RpdmF0ZSIsImhlbHAiLCJtc2NvbnRlbnR6b29tIiwibXNtYW5pcHVsYXRpb25zdGF0ZWNoYW5nZWQiLCJtc2dlc3R1cmVjaGFuZ2UiLCJtc2dlc3R1cmVkb3VibGV0YXAiLCJtc2dlc3R1cmVlbmQiLCJtc2dlc3R1cmVob2xkIiwibXNnZXN0dXJlc3RhcnQiLCJtc2dlc3R1cmV0YXAiLCJtc2dvdHBvaW50ZXJjYXB0dXJlIiwibXNpbmVydGlhc3RhcnQiLCJtc2xvc3Rwb2ludGVyY2FwdHVyZSIsIm1zcG9pbnRlcmNhbmNlbCIsIm1zcG9pbnRlcmRvd24iLCJtc3BvaW50ZXJlbnRlciIsIm1zcG9pbnRlcmhvdmVyIiwibXNwb2ludGVybGVhdmUiLCJtc3BvaW50ZXJtb3ZlIiwibXNwb2ludGVyb3V0IiwibXNwb2ludGVyb3ZlciIsIm1zcG9pbnRlcnVwIiwicG9pbnRlcm91dCIsIm1zc2l0ZW1vZGVqdW1wbGlzdGl0ZW1yZW1vdmVkIiwibXN0aHVtYm5haWxjbGljayIsInN0b3AiLCJzdG9yYWdlY29tbWl0Il0pO2Z1bmN0aW9uIHNlKGUsdCxuLHIpe2UmJmooZSxmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIHQ7dmFyIHI9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0PT09ZX0pO2lmKCFyfHwwPT09ci5sZW5ndGgpcmV0dXJuIHQ7dmFyIG89clswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMT09PW8uaW5kZXhPZihlKX0pfShlLHQsbikscil9ZnVuY3Rpb24gbGUoYyx1KXtpZighd3x8eCl7dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQ7aWYoZnVuY3Rpb24oKXtpZigoRXx8eCkmJiFlKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe3ZhciBuPWUoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihuJiYhbi5jb25maWd1cmFibGUpcmV0dXJuITF9dmFyIHI9WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLG89ZShyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiKTtpZihvKXt0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBpPSEhKGM9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vbnJlYWR5c3RhdGVjaGFuZ2U7cmV0dXJuIHQociwib25yZWFkeXN0YXRlY2hhbmdlIixvfHx7fSksaX12YXIgYT12KCJmYWtlIik7dChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1thXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbYV09ZX19KTt2YXIgYyx1PWZ1bmN0aW9uKCl7fTtyZXR1cm4oYz1uZXcgWE1MSHR0cFJlcXVlc3QpLm9ucmVhZHlzdGF0ZWNoYW5nZT11LGk9Y1thXT09PXUsYy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpfSgpKXt2YXIgbD11Ll9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztpZihFKXt2YXIgZj13aW5kb3c7c2UoZix1ZS5jb25jYXQoWyJtZXNzYWdlZXJyb3IiXSksbCxuKGYpKSxzZShEb2N1bWVudC5wcm90b3R5cGUsdWUsbCksdm9pZCAwIT09Zi5TVkdFbGVtZW50JiZzZShmLlNWR0VsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEVsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxlZSxsKSxzZShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsdGUsbCksc2UoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLHRlLGwpO3ZhciBoPWYuSFRNTE1hcnF1ZWVFbGVtZW50O2gmJnNlKGgucHJvdG90eXBlLHJlLGwpO3ZhciBkPWYuV29ya2VyO2QmJnNlKGQucHJvdG90eXBlLGNlLGwpfXNlKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxvZSxsKTt2YXIgZz11LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7ZyYmc2UoZyYmZy5wcm90b3R5cGUsb2UsbCksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKHNlKElEQkluZGV4LnByb3RvdHlwZSxpZSxsKSxzZShJREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJEYXRhYmFzZS5wcm90b3R5cGUsaWUsbCksc2UoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLGllLGwpLHNlKElEQkN1cnNvci5wcm90b3R5cGUsaWUsbCkpLHMmJnNlKFdlYlNvY2tldC5wcm90b3R5cGUsYWUsbCl9ZWxzZSFmdW5jdGlvbigpe2Zvcih2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD11ZVtlXSxuPSJvbiIrdDtzZWxmLmFkZEV2ZW50TGlzdGVuZXIodCxmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS50YXJnZXQ7Zm9yKHI9bz9vLmNvbnN0cnVjdG9yLm5hbWUrIi4iK246InVua25vd24uIituO287KW9bbl0mJiFvW25dW2ZlXSYmKCh0PXAob1tuXSxyKSlbZmVdPW9bbl0sb1tuXT10KSxvPW8ucGFyZW50RWxlbWVudH0sITApfSx0PTA7dDx1ZS5sZW5ndGg7dCsrKWUodCl9KCksWigiWE1MSHR0cFJlcXVlc3QiKSxzJiZmdW5jdGlvbih0LG4pe3ZhciBjPW4uV2ViU29ja2V0O24uRXZlbnRUYXJnZXR8fE4obixbYy5wcm90b3R5cGVdKSxuLldlYlNvY2tldD1mdW5jdGlvbih0LG4pe3ZhciB1LHMsbD1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IGModCxuKTpuZXcgYyh0KSxmPWUobCwib25tZXNzYWdlIik7cmV0dXJuIGYmJiExPT09Zi5jb25maWd1cmFibGU/KHU9cihsKSxzPWwsW2ksYSwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt1W2VdPWZ1bmN0aW9uKCl7dmFyIHQ9by5jYWxsKGFyZ3VtZW50cyk7aWYoZT09PWl8fGU9PT1hKXt2YXIgbj10Lmxlbmd0aD4wP3RbMF06dm9pZCAwO2lmKG4pe3ZhciByPVpvbmUuX19zeW1ib2xfXygiT05fUFJPUEVSVFkiK24pO2xbcl09dVtyXX19cmV0dXJuIGxbZV0uYXBwbHkobCx0KX19KSk6dT1sLGoodSxbImNsb3NlIiwiZXJyb3IiLCJtZXNzYWdlIiwib3BlbiJdLHMpLHV9O3ZhciB1PW4uV2ViU29ja2V0O2Zvcih2YXIgcyBpbiBjKXVbc109Y1tzXX0oMCx1KX19dmFyIGZlPXYoInVuYm91bmQiKTtab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oZSx0LG4pe24ucGF0Y2hPblByb3BlcnRpZXM9aixuLnBhdGNoTWV0aG9kPXosbi5iaW5kQXJndW1lbnRzPWt9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihlKXtLKGUsInNldCIsImNsZWFyIiwiVGltZW91dCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbnRlcnZhbCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKGUpe0soZSwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksSyhlLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxLKGUsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLHI9MDtyPG4ubGVuZ3RoO3IrKyl6KGUsbltyXSxmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIHQuY3VycmVudC5ydW4obixlLGksbyl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Ll9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKTtlW3JdJiYodFtyXT1lW3JdKSxmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuRXZlbnQ7biYmbi5wcm90b3R5cGUmJnQucGF0Y2hNZXRob2Qobi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dFtIXT0hMCxlJiZlLmFwcGx5KHQsbil9fSl9KGUsdCl9KGUsbiksZnVuY3Rpb24oZSx0KXt2YXIgbj0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLHI9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLG89W10saT1lLnd0ZixhPW4uc3BsaXQoIiwiKTtpP289YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIkhUTUwiK2UrIkVsZW1lbnQifSkuY29uY2F0KHIpOmUuRXZlbnRUYXJnZXQ/by5wdXNoKCJFdmVudFRhcmdldCIpOm89cjtmb3IodmFyIGM9ZS5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEsdT1lLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEscD1JKCksaD0iZnVuY3Rpb24gX19CUk9XU0VSVE9PTFNfQ09OU09MRV9TQUZFRlVOQygpIHsgW25hdGl2ZSBjb2RlXSB9Iix2PTA7djx1ZS5sZW5ndGg7disrKXt2YXIgZD1mKygoaz11ZVt2XSkrbCksZz1mKyhrK3MpO0xba109e30sTFtrXVtsXT1kLExba11bc109Z31mb3Iodj0wO3Y8bi5sZW5ndGg7disrKWZvcih2YXIgeT1hW3ZdLF89cVt5XT17fSxtPTA7bTx1ZS5sZW5ndGg7bSsrKXt2YXIgaztfW2s9dWVbbV1dPXkrIi5hZGRFdmVudExpc3RlbmVyOiIra312YXIgYj1bXTtmb3Iodj0wO3Y8by5sZW5ndGg7disrKXt2YXIgVD1lW29bdl1dO2IucHVzaChUJiZULnByb3RvdHlwZSl9TihlLGIse3ZoOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFjJiZwKXtpZih1KXRyeXt2YXIgbztpZigiW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIj09PShvPXQudG9TdHJpbmcoKSl8fG89PWgpcmV0dXJuIGUuYXBwbHkobixyKSwhMX1jYXRjaCh0KXtyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYoIltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSI9PT0obz10LnRvU3RyaW5nKCkpfHxvPT1oKXJldHVybiBlLmFwcGx5KG4sciksITF9ZWxzZSBpZih1KXRyeXt0LnRvU3RyaW5nKCl9Y2F0Y2godCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1yZXR1cm4hMH19KSx0LnBhdGNoRXZlbnRUYXJnZXQ9Tn0oZSxuKTt2YXIgbz1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7byYmby5wcm90b3R5cGUmJm4ucGF0Y2hFdmVudFRhcmdldChlLFtvLnByb3RvdHlwZV0pLFooIk11dGF0aW9uT2JzZXJ2ZXIiKSxaKCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiksWigiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKSxaKCJGaWxlUmVhZGVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLGZ1bmN0aW9uKHQsbixyKXtsZSgwLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbil7aWYoVihlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3QrIicgb2YgIitlKTt2YXIgcj1uLmNvbmZpZ3VyYWJsZTtyZXR1cm4icHJvdG90eXBlIiE9PXQmJihuPUcoZSx0LG4pKSxRKGUsdCxuLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sdFtuXSl9KSxlfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0fHxPYmplY3QuaXNGcm96ZW4odCl8fE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1HKGUsbix0W25dKX0pLFkoZSx0KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPUIoZSx0KTtyZXR1cm4gVihlLHQpJiYobi5jb25maWd1cmFibGU9ITEpLG59LGZ1bmN0aW9uKG4pe2lmKChFfHx4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50KXt2YXIgcj1kb2N1bWVudC5yZWdpc3RlckVsZW1lbnQsbz1bImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl07ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4mJm4ucHJvdG90eXBlJiZvLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxpLGEsYz0iRG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50OjoiK3QsdT1uLnByb3RvdHlwZTtpZih1Lmhhc093blByb3BlcnR5KHQpKXt2YXIgcz1lKHUsdCk7cyYmcy52YWx1ZT8ocy52YWx1ZT1wKHMudmFsdWUsYyksYT0oaT1zKS5jb25maWd1cmFibGUsUShyPW4ucHJvdG90eXBlLG89dCxpPUcocixvLGkpLGEpKTp1W3RdPXAodVt0XSxjKX1lbHNlIHVbdF0mJih1W3RdPXAodVt0XSxjKSl9KSxyLmNhbGwoZG9jdW1lbnQsdCxuKX0sTShkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQscil9fSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goImNhbnZhcyIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5IVE1MQ2FudmFzRWxlbWVudDt2b2lkIDAhPT10JiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUudG9CbG9iJiZmdW5jdGlvbihlLG4scil7dmFyIG89bnVsbDtmdW5jdGlvbiBpKGUpe3ZhciB0PWUuZGF0YTtyZXR1cm4gdC5hcmdzW3QuY2JJZHhdPWZ1bmN0aW9uKCl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvLmFwcGx5KHQudGFyZ2V0LHQuYXJncyksZX1vPXoodC5wcm90b3R5cGUsInRvQmxvYiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm57bmFtZToiSFRNTENhbnZhc0VsZW1lbnQudG9CbG9iIix0YXJnZXQ6ZSxjYklkeDowLGFyZ3M6dH19KHQsbik7cmV0dXJuIHIuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3IuY2JJZHhdP2goci5uYW1lLG5bci5jYklkeF0scixpLG51bGwpOmUuYXBwbHkodCxuKX19KX0oKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKHQpe3ZhciBzPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxsPXNbY10sZj1zW3VdO2lmKCFsKXt2YXIgcD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYocCl7dmFyIHY9cC5wcm90b3R5cGU7bD12W2NdLGY9dlt1XX19dmFyIGQ9InJlYWR5c3RhdGVjaGFuZ2UiLGc9InNjaGVkdWxlZCI7ZnVuY3Rpb24geShlKXtYTUxIdHRwUmVxdWVzdFtpXT0hMTt2YXIgdD1lLmRhdGEscj10LnRhcmdldCxhPXJbb107bHx8KGw9cltjXSxmPXJbdV0pLGEmJmYuY2FsbChyLGQsYSk7dmFyIHM9cltvXT1mdW5jdGlvbigpe3IucmVhZHlTdGF0ZT09PXIuRE9ORSYmIXQuYWJvcnRlZCYmWE1MSHR0cFJlcXVlc3RbaV0mJmUuc3RhdGU9PT1nJiZlLmludm9rZSgpfTtyZXR1cm4gbC5jYWxsKHIsZCxzKSxyW25dfHwocltuXT1lKSxiLmFwcGx5KHIsdC5hcmdzKSxYTUxIdHRwUmVxdWVzdFtpXT0hMCxlfWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gbShlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYWJvcnRlZD0hMCxULmFwcGx5KHQudGFyZ2V0LHQuYXJncyl9dmFyIGs9eihzLCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlW3JdPTA9PXRbMl0sZVthXT10WzFdLGsuYXBwbHkoZSx0KX19KSxiPXoocywic2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtyXT9iLmFwcGx5KGUsdCk6aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsXyx7dGFyZ2V0OmUsdXJsOmVbYV0saXNQZXJpb2RpYzohMSxkZWxheTpudWxsLGFyZ3M6dCxhYm9ydGVkOiExfSx5LG0pfX0pLFQ9eihzLCJhYm9ydCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuXTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHQudHlwZSl7aWYobnVsbD09dC5jYW5jZWxGbnx8dC5kYXRhJiZ0LmRhdGEuYWJvcnRlZClyZXR1cm47dC56b25lLmNhbmNlbFRhc2sodCl9fX0pfSgpO3ZhciBuPXYoInhoclRhc2siKSxyPXYoInhoclN5bmMiKSxvPXYoInhockxpc3RlbmVyIiksaT12KCJ4aHJTY2hlZHVsZWQiKSxhPXYoInhoclVSTCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixmdW5jdGlvbih0KXt0Lm5hdmlnYXRvciYmdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJmZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPXQuY29uc3RydWN0b3IubmFtZSxvPWZ1bmN0aW9uKG8pe3ZhciBpPW5bb10sYT10W2ldO2lmKGEpe2lmKCFiKGUodCxpKSkpcmV0dXJuImNvbnRpbnVlIjt0W2ldPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxrKGFyZ3VtZW50cyxyKyIuIitpKSl9O3JldHVybiBNKHQsZSksdH0oYSl9fSxpPTA7aTxuLmxlbmd0aDtpKyspbyhpKX0odC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihuKXtXKGUsdCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1lLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihvKXt2YXIgaT1uZXcgbyh0LHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtyLmludm9rZShpKX19KX19ZS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJih0W3YoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPW4oInVuaGFuZGxlZHJlamVjdGlvbiIpLHRbdigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bigicmVqZWN0aW9uaGFuZGxlZCIpKX0pfSgpfSwiMVRzQSI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSwiMk9pRiI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LDM6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCJoTi9nIil9LCIzTHlqIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiS3JvSiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpcihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LCI0NVR2IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiT1AzWSIpLGE9ci5oYXMsYz1yLmdldCx1PXIua2V5LHM9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiBjKGUsdCxuKTt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09cj9zKGUscixuKTp2b2lkIDB9O3IuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKSl9fSl9LCI0OUQ0IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXksYT1yLnNldDtyLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24oZSx0LG4scil7YShlLHQsbyhuKSxpKHIpKX19KX0sIjRMaUQiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZHlaWCIpLG89bigiWEtGVSIpLGk9bigiS3JvSiIpLGE9bigiM0x5aiIpLGM9bigiWjZ2RiIpLHU9bigiU2xrWSIpLHM9bigiOWdYNyIpLGw9bigiMC9SNCIpLGY9bigiZWVWcSIpLHA9bigiWE1WaCIpLGg9bigiZnlEcSIpLHY9bigiWGJ6aSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixkLGcseSl7dmFyIF89cltlXSxtPV8saz1nPyJzZXQiOiJhZGQiLGI9bSYmbS5wcm90b3R5cGUsVD17fSx3PWZ1bmN0aW9uKGUpe3ZhciB0PWJbZV07aShiLGUsImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh5JiYhbChlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJoYXMiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoeSYmIWwoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4geSYmIWwoZSk/dm9pZCAwOnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJhZGQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUpLHRoaXN9OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoeXx8Yi5mb3JFYWNoJiYhZihmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIEU9bmV3IG0seD1FW2tdKHk/e306LTAsMSkhPUUsTz1mKGZ1bmN0aW9uKCl7RS5oYXMoMSl9KSxTPXAoZnVuY3Rpb24oZSl7bmV3IG0oZSl9KSxEPSF5JiZmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBtLHQ9NTt0LS07KWVba10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSk7U3x8KChtPXQoZnVuY3Rpb24odCxuKXtzKHQsbSxlKTt2YXIgcj12KG5ldyBfLHQsbSk7cmV0dXJuIHZvaWQgMCE9biYmdShuLGcscltrXSxyKSxyfSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9bSksKE98fEQpJiYodygiZGVsZXRlIiksdygiaGFzIiksZyYmdygiZ2V0IikpLChEfHx4KSYmdyhrKSx5JiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1lbHNlIG09ZC5nZXRDb25zdHJ1Y3Rvcih0LGUsZyxrKSxhKG0ucHJvdG90eXBlLG4pLGMuTkVFRD0hMDtyZXR1cm4gaChtLGUpLFRbZV09bSxvKG8uRytvLlcrby5GKihtIT1fKSxUKSx5fHxkLnNldFN0cm9uZyhtLGUsZyksbX19LCI0UjR1IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwiNkZNTyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oIkVXbUMiKSxpPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbyhlKSYmKCJmdW5jdGlvbiIhPXR5cGVvZih0PWUuY29uc3RydWN0b3IpfHx0IT09QXJyYXkmJiFvKHQucHJvdG90eXBlKXx8KHQ9dm9pZCAwKSxyKHQpJiZudWxsPT09KHQ9dFtpXSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/QXJyYXk6dH19LCI3RGxoIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5oYXMsYT1yLmtleTtyLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSwiOUFBbiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiTWFwIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ci5nZXRFbnRyeShvKHRoaXMsIk1hcCIpLGUpO3JldHVybiB0JiZ0LnZ9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiByLmRlZihvKHRoaXMsIk1hcCIpLDA9PT1lPzA6ZSx0KX19LHIsITApfSwiOWdYNyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7aWYoIShlIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PXImJnIgaW4gZSl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gZX19LEFmbno6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJMUUFjIiksbz1uKCJYS0ZVIiksaT1uKCJLcm9KIiksYT1uKCJNdWtiIiksYz1uKCJoUElRIiksdT1uKCJRYURiIikscz1uKCJmeURxIiksbD1uKCJPUDNZIiksZj1uKCJLMHhVIikoIml0ZXJhdG9yIikscD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbix2LGQsZyx5KXt1KG4sdCx2KTt2YXIgXyxtLGssYj1mdW5jdGlvbihlKXtpZighcCYmZSBpbiB4KXJldHVybiB4W2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxUPXQrIiBJdGVyYXRvciIsdz0idmFsdWVzIj09ZCxFPSExLHg9ZS5wcm90b3R5cGUsTz14W2ZdfHx4WyJAQGl0ZXJhdG9yIl18fGQmJnhbZF0sUz1PfHxiKGQpLEQ9ZD93P2IoImVudHJpZXMiKTpTOnZvaWQgMCxqPSJBcnJheSI9PXQmJnguZW50cmllc3x8TztpZihqJiYoaz1sKGouY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmsubmV4dCYmKHMoayxULCEwKSxyfHwiZnVuY3Rpb24iPT10eXBlb2Yga1tmXXx8YShrLGYsaCkpLHcmJk8mJiJ2YWx1ZXMiIT09Ty5uYW1lJiYoRT0hMCxTPWZ1bmN0aW9uKCl7cmV0dXJuIE8uY2FsbCh0aGlzKX0pLHImJiF5fHwhcCYmIUUmJnhbZl18fGEoeCxmLFMpLGNbdF09UyxjW1RdPWgsZClpZihfPXt2YWx1ZXM6dz9TOmIoInZhbHVlcyIpLGtleXM6Zz9TOmIoImtleXMiKSxlbnRyaWVzOkR9LHkpZm9yKG0gaW4gXyltIGluIHh8fGkoeCxtLF9bbV0pO2Vsc2UgbyhvLlArby5GKihwfHxFKSx0LF8pO3JldHVybiBffX0sQnFmVjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5nZXQsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxDa2tUOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJZbXF2IiksaT1uKCJTL2ovIiksYT1uKCJuZThpIiksYz1uKCJ6UndvIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MT09ZSx1PTI9PWUscz0zPT1lLGw9ND09ZSxmPTY9PWUscD01PT1lfHxmLGg9dHx8YztyZXR1cm4gZnVuY3Rpb24odCxjLHYpe2Zvcih2YXIgZCxnLHk9aSh0KSxfPW8oeSksbT1yKGMsdiwzKSxrPWEoXy5sZW5ndGgpLGI9MCxUPW4/aCh0LGspOnU/aCh0LDApOnZvaWQgMDtrPmI7YisrKWlmKChwfHxiIGluIF8pJiYoZz1tKGQ9X1tiXSxiLHkpLGUpKWlmKG4pVFtiXT1nO2Vsc2UgaWYoZylzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOlQucHVzaChkKX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6c3x8bD9sOlR9fX0sRFZnQTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiemhBYiIpLG89bigiNFI0dSIpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LEVLMEU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIkNra1QiKSgwKSxpPW4oIktyb0oiKSxhPW4oIlo2dkYiKSxjPW4oImN6TksiKSx1PW4oIlpENjciKSxzPW4oIjAvUjQiKSxsPW4oImVlVnEiKSxmPW4oInM1cVkiKSxwPWEuZ2V0V2VhayxoPU9iamVjdC5pc0V4dGVuc2libGUsdj11LnVmc3RvcmUsZD17fSxnPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0seT17Z2V0OmZ1bmN0aW9uKGUpe2lmKHMoZSkpe3ZhciB0PXAoZSk7cmV0dXJuITA9PT10P3YoZih0aGlzLCJXZWFrTWFwIikpLmdldChlKTp0P3RbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuZGVmKGYodGhpcywiV2Vha01hcCIpLGUsdCl9fSxfPWUuZXhwb3J0cz1uKCI0TGlEIikoIldlYWtNYXAiLGcseSx1LCEwLCEwKTtsKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgXykuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKGQpLDcpLmdldChkKX0pJiYoYygocj11LmdldENvbnN0cnVjdG9yKGcsIldlYWtNYXAiKSkucHJvdG90eXBlLHkpLGEuTkVFRD0hMCxvKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9Xy5wcm90b3R5cGUsbj10W2VdO2kodCxlLGZ1bmN0aW9uKHQsbyl7aWYocyh0KSYmIWgodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyByKTt2YXIgaT10aGlzLl9mW2VdKHQsbyk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiBuLmNhbGwodGhpcyx0LG8pfSl9KSl9LEVXbUM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09cihlKX19LEVlbUg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlVxY0YiKSxvPW4oIlJqRC8iKSxpPW4oImFDRmoiKSxhPW4oImFwbVQiKSxjPW4oImFhZ3giKSx1PW4oInhwcWwiKSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4oIm5oNGciKT9zOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9YSh0LCEwKSx1KXRyeXtyZXR1cm4gcyhlLHQpfWNhdGNoKGUpe31pZihjKGUsdCkpcmV0dXJuIG8oIXIuZi5jYWxsKGUsdCksZVt0XSl9fSxGSlc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJ5M3c5IiksaT1uKCJEVmdBIik7ZS5leHBvcnRzPW4oIm5oNGciKT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciBuLGE9aSh0KSxjPWEubGVuZ3RoLHU9MDtjPnU7KXIuZihlLG49YVt1KytdLHRbbl0pO3JldHVybiBlfX0sRlpjcTpmdW5jdGlvbihlLHQsbil7bigiNDlENCIpLG4oInpxK0MiKSxuKCI0NVR2IiksbigidUF0ZCIpLG4oIkJxZlYiKSxuKCJmTi8zIiksbigiaVcrUyIpLG4oIjdEbGgiKSxuKCJPcHhiIiksZS5leHBvcnRzPW4oImczZzUiKS5SZWZsZWN0fSxINmhmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG8pe3RyeXtyZXR1cm4gbz90KHIobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXt2YXIgaT1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbChlKSksdH19fSwiSThhKyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKSxvPW4oIksweFUiKSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYTtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLG8pKT9uOmk/cih0KToiT2JqZWN0Ij09KGE9cih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjphfX0sSXc3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiZHlaWCIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQoZSk6e319fSwiSis2ZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkk4YSsiKSxvPW4oIksweFUiKSgiaXRlcmF0b3IiKSxpPW4oImhQSVEiKTtlLmV4cG9ydHM9bigiZzNnNSIpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9ZSlyZXR1cm4gZVtvXXx8ZVsiQEBpdGVyYXRvciJdfHxpW3IoZSldfX0sSmlFYTpmdW5jdGlvbihlLHQpe3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxLMHhVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoIndrcyIpLG89bigieWxxcyIpLGk9bigiZHlaWCIpLlN5bWJvbCxhPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPWEmJmlbZV18fChhP2k6bykoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPXJ9LEtyb0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKSxvPW4oIk11a2IiKSxpPW4oImFhZ3giKSxhPW4oInlscXMiKSgic3JjIiksYz1GdW5jdGlvbi50b1N0cmluZyx1PSgiIitjKS5zcGxpdCgidG9TdHJpbmciKTtuKCJnM2c1IikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5jYWxsKGUpfSwoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGMpe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3MmJihpKG4sIm5hbWUiKXx8byhuLCJuYW1lIix0KSksZVt0XSE9PW4mJihzJiYoaShuLGEpfHxvKG4sYSxlW3RdPyIiK2VbdF06dS5qb2luKFN0cmluZyh0KSkpKSxlPT09cj9lW3RdPW46Yz9lW3RdP2VbdF09bjpvKGUsdCxuKTooZGVsZXRlIGVbdF0sbyhlLHQsbikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fGMuY2FsbCh0aGlzKX0pfSxLdXRoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iiksbz1uKCJGSlc1IiksaT1uKCI0UjR1IiksYT1uKCJZVHZBIikoIklFX1BST1RPIiksYz1mdW5jdGlvbigpe30sdT1mdW5jdGlvbigpe3ZhciBlLHQ9bigiSXc3MSIpKCJpZnJhbWUiKSxyPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLG4oIityTHYiKS5hcHBlbmRDaGlsZCh0KSx0LnNyYz0iamF2YXNjcmlwdDoiLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksZS5jbG9zZSgpLHU9ZS5GO3ItLTspZGVsZXRlIHUucHJvdG90eXBlW2lbcl1dO3JldHVybiB1KCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oYy5wcm90b3R5cGU9cihlKSxuPW5ldyBjLGMucHJvdG90eXBlPW51bGwsblthXT1lKTpuPXUoKSx2b2lkIDA9PT10P246byhuLHQpfX0sTFFBYzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0hMX0sTFpXdDpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sTTZRajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaFBJUSIpLG89bigiSzB4VSIpKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxpW29dPT09ZSl9fSxNdWtiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJSakQvIik7ZS5leHBvcnRzPW4oIm5oNGciKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LE42Y0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjlBQW4iKSxvPW4oIlhLRlUiKSxpPW4oIlZUZXIiKSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyhuKCJFSzBFIikpKSxjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1hLmdldChlKTtpZighbyl7aWYoIW4pcmV0dXJuO2Euc2V0KGUsbz1uZXcgcil9dmFyIGk9by5nZXQodCk7aWYoIWkpe2lmKCFuKXJldHVybjtvLnNldCh0LGk9bmV3IHIpfXJldHVybiBpfTtlLmV4cG9ydHM9e3N0b3JlOmEsbWFwOmMsaGFzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwhMSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKGUpfSxnZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWModCxuLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQoZSl9LHNldDpmdW5jdGlvbihlLHQsbixyKXtjKG4sciwhMCkuc2V0KGUsdCl9LGtleXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1jKGUsdCwhMSkscj1bXTtyZXR1cm4gbiYmbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ci5wdXNoKHQpfSkscn0sa2V5OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwic3ltYm9sIj09dHlwZW9mIGU/ZTpTdHJpbmcoZSl9LGV4cDpmdW5jdGlvbihlKXtvKG8uUywiUmVmbGVjdCIsZSl9fX0sT1AzWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYWFneCIpLG89bigiUy9qLyIpLGk9bigiWVR2QSIpKCJJRV9QUk9UTyIpLGE9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxpKT9lW2ldOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LE9weGI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIjJPaUYiKSxhPXIua2V5LGM9ci5zZXQ7ci5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7YyhlLHQsKHZvaWQgMCE9PXI/bzppKShuKSxhKHIpKX19fSl9LFEzbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlNsa1kiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gcihlLCExLG4ucHVzaCxuLHQpLG59fSxRYURiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiS3V0aCIpLG89bigiUmpELyIpLGk9bigiZnlEcSIpLGE9e307bigiTXVrYiIpKGEsbigiSzB4VSIpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UucHJvdG90eXBlPXIoYSx7bmV4dDpvKDEsbil9KSxpKGUsdCsiIEl0ZXJhdG9yIil9fSxSWWk3OmZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5jZWlsLHI9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGU9K2UpPzA6KGU+MD9yOm4pKGUpfX0sIlJqRC8iOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sIlMvai8iOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ2aFBVIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxTbGtZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJINmhmIiksaT1uKCJNNlFqIiksYT1uKCJ5M3c5IiksYz1uKCJuZThpIiksdT1uKCJKKzZlIikscz17fSxsPXt9Oyh0PWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixmLHApe3ZhciBoLHYsZCxnLHk9cD9mdW5jdGlvbigpe3JldHVybiBlfTp1KGUpLF89cihuLGYsdD8yOjEpLG09MDtpZigiZnVuY3Rpb24iIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBpdGVyYWJsZSEiKTtpZihpKHkpKXtmb3IoaD1jKGUubGVuZ3RoKTtoPm07bSsrKWlmKChnPXQ/XyhhKHY9ZVttXSlbMF0sdlsxXSk6XyhlW21dKSk9PT1zfHxnPT09bClyZXR1cm4gZ31lbHNlIGZvcihkPXkuY2FsbChlKTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKChnPW8oZCxfLHYudmFsdWUsdCkpPT09c3x8Zz09PWwpcmV0dXJuIGd9KS5CUkVBSz1zLHQuUkVUVVJOPWx9LFQzOWI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiU2V0IixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVmKG8odGhpcywiU2V0IiksZT0wPT09ZT8wOmUsZSl9fSxyKX0sVXFjRjpmdW5jdGlvbihlLHQpe3QuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sVlRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZzNnNSIpLG89bigiZHlaWCIpLGk9b1siX19jb3JlLWpzX3NoYXJlZF9fIl18fChvWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpW2VdfHwoaVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKCJMUUFjIik/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE4IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSxYS0ZVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIiksbz1uKCJnM2c1IiksaT1uKCJNdWtiIiksYT1uKCJLcm9KIiksYz1uKCJtMFBwIiksdT1mdW5jdGlvbihlLHQsbil7dmFyIHMsbCxmLHAsaD1lJnUuRix2PWUmdS5HLGQ9ZSZ1LlAsZz1lJnUuQix5PXY/cjplJnUuUz9yW3RdfHwoclt0XT17fSk6KHJbdF18fHt9KS5wcm90b3R5cGUsXz12P286b1t0XXx8KG9bdF09e30pLG09Xy5wcm90b3R5cGV8fChfLnByb3RvdHlwZT17fSk7Zm9yKHMgaW4gdiYmKG49dCksbilmPSgobD0haCYmeSYmdm9pZCAwIT09eVtzXSk/eTpuKVtzXSxwPWcmJmw/YyhmLHIpOmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBmP2MoRnVuY3Rpb24uY2FsbCxmKTpmLHkmJmEoeSxzLGYsZSZ1LlUpLF9bc10hPWYmJmkoXyxzLHApLGQmJm1bc10hPWYmJihtW3NdPWYpfTtyLmNvcmU9byx1LkY9MSx1Lkc9Mix1LlM9NCx1LlA9OCx1LkI9MTYsdS5XPTMyLHUuVT02NCx1LlI9MTI4LGUuZXhwb3J0cz11fSxYTVZoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJLMHhVIikoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9WzddW3JdKCk7aS5yZXR1cm49ZnVuY3Rpb24oKXtvPSEwfSxBcnJheS5mcm9tKGksZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9WzddLGE9aVtyXSgpO2EubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUoaSl9Y2F0Y2goZSl7fXJldHVybiBufX0sWGJ6aTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiaTVkYyIpLnNldDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGE9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYSE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoaT1hLnByb3RvdHlwZSkhPT1uLnByb3RvdHlwZSYmcihpKSYmbyYmbyhlLGkpLGV9fSxZVHZBOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoImtleXMiKSxvPW4oInlscXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sWW1xdjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sWjZ2RjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieWxxcyIpKCJtZXRhIiksbz1uKCIwL1I0IiksaT1uKCJhYWd4IiksYT1uKCJoc3dhIikuZixjPTAsdT1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gdShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLGw9ZnVuY3Rpb24oZSl7YShlLHIse3ZhbHVlOntpOiJPIisgKytjLHc6e319fSl9LGY9ZS5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6ZnVuY3Rpb24oZSx0KXtpZighbyhlKSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGU/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtsKGUpfXJldHVybiBlW3JdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighaShlLHIpKXtpZighdShlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtsKGUpfXJldHVybiBlW3JdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiBzJiZmLk5FRUQmJnUoZSkmJiFpKGUscikmJmwoZSksZX19fSxaRDY3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiM0x5aiIpLG89bigiWjZ2RiIpLmdldFdlYWssaT1uKCJ5M3c5IiksYT1uKCIwL1I0IiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJDa2tUIiksbD1uKCJhYWd4IiksZj1uKCJzNXFZIikscD1zKDUpLGg9cyg2KSx2PTAsZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fbHx8KGUuX2w9bmV3IGcpfSxnPWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSx5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZS5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pfTtnLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXkodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISF5KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPXkodGhpcyxlKTtuP25bMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1oKHRoaXMuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KTtyZXR1cm5+dCYmdGhpcy5hLnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPWUoZnVuY3Rpb24oZSxyKXtjKGUscyx0LCJfaSIpLGUuX3Q9dCxlLl9pPXYrKyxlLl9sPXZvaWQgMCx2b2lkIDAhPXImJnUocixuLGVbaV0sZSl9KTtyZXR1cm4gcihzLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5kZWxldGUoZSk6biYmbChuLHRoaXMuX2kpJiZkZWxldGUgblt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5oYXMoZSk6biYmbChuLHRoaXMuX2kpfX0pLHN9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9byhpKHQpLCEwKTtyZXR1cm4hMD09PXI/ZChlKS5zZXQodCxuKTpyW2UuX2ldPW4sZX0sdWZzdG9yZTpkfX0sYUNGajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiWW1xdiIpLG89bigidmhQVSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihvKGUpKX19LGFhZ3g6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxhcG1UOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sY3pOSzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkRWZ0EiKSxvPW4oIkppRWEiKSxpPW4oIlVxY0YiKSxhPW4oIlMvai8iKSxjPW4oIlltcXYiKSx1PU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSF1fHxuKCJlZVZxIikoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCkscj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW25dPTcsci5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWV9KSw3IT11KHt9LGUpW25dfHxPYmplY3Qua2V5cyh1KHt9LHQpKS5qb2luKCIiKSE9cn0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWEoZSksdT1hcmd1bWVudHMubGVuZ3RoLHM9MSxsPW8uZixmPWkuZjt1PnM7KWZvcih2YXIgcCxoPWMoYXJndW1lbnRzW3MrK10pLHY9bD9yKGgpLmNvbmNhdChsKGgpKTpyKGgpLGQ9di5sZW5ndGgsZz0wO2Q+ZzspZi5jYWxsKGgscD12W2crK10pJiYobltwXT1oW3BdKTtyZXR1cm4gbn06dX0sImQvR2MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybihlPXIoZSkpPDA/byhlK3QsMCk6aShlLHQpfX0sZHlaWDpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsibnVtYmVyIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZWVWcTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZWxacTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImR5WlgiKSxvPW4oImhzd2EiKSxpPW4oIm5oNGciKSxhPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yW2VdO2kmJnQmJiF0W2FdJiZvLmYodCxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwiZk4vMyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5cyxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkobyhlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRzWzFdKSl9fSl9LGZ5RHE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKS5mLG89bigiYWFneCIpLGk9bigiSzB4VSIpKCJ0b1N0cmluZ1RhZyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZSYmIW8oZT1uP2U6ZS5wcm90b3R5cGUsaSkmJnIoZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZzNnNTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi41LjcifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sImhOL2ciOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4oIkZaY3EiKSxuKCIwVFdwIil9LGhQSVE6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGhzd2E6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKSxvPW4oInhwcWwiKSxpPW4oImFwbVQiKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigibmg0ZyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYocihlKSx0PWkodCwhMCkscihuKSxvKXRyeXtyZXR1cm4gYShlLHQsbil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxpNWRjOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJ5M3c5IiksaT1mdW5jdGlvbihlLHQpe2lmKG8oZSksIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQscil7dHJ5eyhyPW4oIm0wUHAiKShGdW5jdGlvbi5jYWxsLG4oIkVlbUgiKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwyKSkoZSxbXSksdD0hKGUgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2goZSl7dD0hMH1yZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4pLHQ/ZS5fX3Byb3RvX189bjpyKGUsbiksZX19KHt9LCExKTp2b2lkIDApLGNoZWNrOml9fSwiaVcrUyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIk9QM1kiKSxhPXIuaGFzLGM9ci5rZXksdT1mdW5jdGlvbihlLHQsbil7aWYoYShlLHQsbikpcmV0dXJuITA7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXImJnUoZSxyLG4pfTtyLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSkpfX0pfSxtMFBwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIyT2lGIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiBlLmNhbGwodCxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxuZThpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9vKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LG5oNGc6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sczVxWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSx1QXRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJUMzliIiksbz1uKCJRM25lIiksaT1uKCJONmNKIiksYT1uKCJ5M3c5IiksYz1uKCJPUDNZIiksdT1pLmtleXMscz1pLmtleSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dShlLHQpLGk9YyhlKTtpZihudWxsPT09aSlyZXR1cm4gbjt2YXIgYT1sKGksdCk7cmV0dXJuIGEubGVuZ3RoP24ubGVuZ3RoP28obmV3IHIobi5jb25jYXQoYSkpKTphOm59O2kuZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoYShlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOnMoYXJndW1lbnRzWzFdKSl9fSl9LHZoUFU6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSx3MmE1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhQ0ZqIiksbz1uKCJuZThpIiksaT1uKCJkL0djIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sYSl7dmFyIGMsdT1yKHQpLHM9byh1Lmxlbmd0aCksbD1pKGEscyk7aWYoZSYmbiE9bil7Zm9yKDtzPmw7KWlmKChjPXVbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3M+bDtsKyspaWYoKGV8fGwgaW4gdSkmJnVbbF09PT1uKXJldHVybiBlfHxsfHwwO3JldHVybiFlJiYtMX19fSx3bXZHOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiaHN3YSIpLmYsbz1uKCJLdXRoIiksaT1uKCIzTHlqIiksYT1uKCJtMFBwIiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJBZm56IiksbD1uKCIxVHNBIiksZj1uKCJlbFpxIikscD1uKCJuaDRnIiksaD1uKCJaNnZGIikuZmFzdEtleSx2PW4oInM1cVkiKSxkPXA/Il9zIjoic2l6ZSIsZz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9aCh0KTtpZigiRiIhPT1yKXJldHVybiBlLl9pW3JdO2ZvcihuPWUuX2Y7bjtuPW4ubilpZihuLms9PXQpcmV0dXJuIG59O2UuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGw9ZShmdW5jdGlvbihlLHIpe2MoZSxsLHQsIl9pIiksZS5fdD10LGUuX2k9byhudWxsKSxlLl9mPXZvaWQgMCxlLl9sPXZvaWQgMCxlW2RdPTAsdm9pZCAwIT1yJiZ1KHIsbixlW3NdLGUpfSk7cmV0dXJuIGkobC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXYodGhpcyx0KSxuPWUuX2kscj1lLl9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBuW3IuaV07ZS5fZj1lLl9sPXZvaWQgMCxlW2RdPTB9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgbj12KHRoaXMsdCkscj1nKG4sZSk7aWYocil7dmFyIG89ci5uLGk9ci5wO2RlbGV0ZSBuLl9pW3IuaV0sci5yPSEwLGkmJihpLm49byksbyYmKG8ucD1pKSxuLl9mPT1yJiYobi5fZj1vKSxuLl9sPT1yJiYobi5fbD1pKSxuW2RdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe3YodGhpcyx0KTtmb3IodmFyIG4scj1hKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7bj1uP24ubjp0aGlzLl9mOylmb3IocihuLnYsbi5rLHRoaXMpO24mJm4ucjspbj1uLnB9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIWcodih0aGlzLHQpLGUpfX0pLHAmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLHQpW2RdfX0pLGx9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPWcoZSx0KTtyZXR1cm4gaT9pLnY9bjooZS5fbD1pPXtpOm89aCh0LCEwKSxrOnQsdjpuLHA6cj1lLl9sLG46dm9pZCAwLHI6ITF9LGUuX2Z8fChlLl9mPWkpLHImJihyLm49aSksZVtkXSsrLCJGIiE9PW8mJihlLl9pW29dPWkpKSxlfSxnZXRFbnRyeTpnLHNldFN0cm9uZzpmdW5jdGlvbihlLHQsbil7cyhlLHQsZnVuY3Rpb24oZSxuKXt0aGlzLl90PXYoZSx0KSx0aGlzLl9rPW4sdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2ssdD10aGlzLl9sO3QmJnQucjspdD10LnA7cmV0dXJuIHRoaXMuX3QmJih0aGlzLl9sPXQ9dD90Lm46dGhpcy5fdC5fZik/bCgwLCJrZXlzIj09ZT90Lms6InZhbHVlcyI9PWU/dC52Olt0LmssdC52XSk6KHRoaXMuX3Q9dm9pZCAwLGwoMSkpfSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksZih0KX19fSx4cHFsOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oIm5oNGciKSYmIW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobigiSXc3MSIpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0seTN3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSx5bHFzOmZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0selJ3bzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiNkZNTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcocihlKSkodCl9fSx6aEFiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhYWd4Iiksbz1uKCJhQ0ZqIiksaT1uKCJ3MmE1IikoITEpLGE9bigiWVR2QSIpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGM9byhlKSx1PTAscz1bXTtmb3IobiBpbiBjKW4hPWEmJnIoYyxuKSYmcy5wdXNoKG4pO2Zvcig7dC5sZW5ndGg+dTspcihjLG49dFt1KytdKSYmKH5pKHMsbil8fHMucHVzaChuKSk7cmV0dXJuIHN9fSwienErQyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5tYXAsYz1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6aShhcmd1bWVudHNbMl0pLHI9YShvKHQpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIHU9Yy5nZXQodCk7cmV0dXJuIHUuZGVsZXRlKG4pLCEhdS5zaXplfHxjLmRlbGV0ZSh0KX19KX19LFtbMywzXV1dKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9seWZpbGxzLmpzLm1hcCh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbNl0seyIrdEo0IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyJiYhZS5jbG9zZWQ7bisrKWUubmV4dCh0W25dKTtlLmNsb3NlZHx8ZS5jb21wbGV0ZSgpfX19LCIrdW1LIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIi9XWXYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3Vic2NyaWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LCIwL1E2IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIldmNHAiKSxhPW4oImxMQVAiKSxzPW4oIm42Z0ciKSx1PW4oIllsYlEiKSxsPW4oIllTaDIiKSxjPShuKCJnSWNZIiksbigicHVnVCIpKSxmPU9iamVjdChvLnYpKGZ1bmN0aW9uKCl7fSksaD1PYmplY3Qoby52KShmdW5jdGlvbigpe30pLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oZikscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShmKSxtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2VsZW1lbnQ9ZSxyLl9uYXZMaXN0PW4sci5faXNOYXZMaXN0PSExLHIuX2lzTmF2TGlzdD0hIW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXtuZXcgby5qKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc05hdkxpc3R8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fbmF2TGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWxpc3QtaXRlbS1mb2N1cyIpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGV9KGgpLHk9T2JqZWN0KG8udikoT2JqZWN0KG8udykoZnVuY3Rpb24oKXt9KSksZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2VsZW1lbnQ9ZSxpLl9jaGFuZ2VEZXRlY3Rvcj1uLGkuc2VsZWN0aW9uTGlzdD1yLGkuX3NlbGVjdGVkPSExLGkuX2Rpc2FibGVkPSExLGkuX2hhc0ZvY3VzPSExLGkuY2hlY2tib3hQb3NpdGlvbj0iYWZ0ZXIiLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5zZWxlY3Rpb25MaXN0JiZ0aGlzLnNlbGVjdGlvbkxpc3QuZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qocy5iKSh0KTtlIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1lLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuaXNTZWxlY3RlZCh0aGlzKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLmIpKHQpO2UhPT10aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NldFNlbGVjdGVkKGUpLHRoaXMuc2VsZWN0aW9uTGlzdC5fcmVwb3J0VmFsdWVDaGFuZ2UoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fc2VsZWN0ZWQ7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpeyh0Ll9zZWxlY3RlZHx8ZSkmJih0LnNlbGVjdGVkPSEwLHQuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pfSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXtuZXcgby5qKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zZWxlY3RlZCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdGVkPSExfSksdGhpcy5zZWxlY3Rpb25MaXN0Ll9yZW1vdmVPcHRpb25Gcm9tTGlzdCh0aGlzKX0sZS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD0hdGhpcy5zZWxlY3RlZH0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGV4dD90aGlzLl90ZXh0Lm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ6IiJ9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5zZWxlY3Rpb25MaXN0LmRpc2FibGVSaXBwbGV9LGUucHJvdG90eXBlLl9oYW5kbGVDbGljaz1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnRvZ2dsZSgpLHRoaXMuc2VsZWN0aW9uTGlzdC5fZW1pdENoYW5nZUV2ZW50KHRoaXMpKX0sZS5wcm90b3R5cGUuX2hhbmRsZUZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5faGFzRm9jdXM9ITAsdGhpcy5zZWxlY3Rpb25MaXN0Ll9zZXRGb2N1c2VkT3B0aW9uKHRoaXMpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2hhc0ZvY3VzPSExLHRoaXMuc2VsZWN0aW9uTGlzdC5fb25Ub3VjaGVkKCl9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGUucHJvdG90eXBlLl9zZXRTZWxlY3RlZD1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9dCx0P3RoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0KHRoaXMpOnRoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuZGVzZWxlY3QodGhpcyksdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksITApfSxlfShPYmplY3Qoby52KShmdW5jdGlvbigpe30pKSx2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2VsZW1lbnQ9ZSxyLnNlbGVjdGlvbkNoYW5nZT1uZXcgaS5tLHIudGFiSW5kZXg9MCxyLnNlbGVjdGVkT3B0aW9ucz1uZXcgdS5hKCEwKSxyLl9vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHIuX21vZGVsQ2hhbmdlcz1jLmEuRU1QVFksci5fb25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSxyLnRhYkluZGV4PXBhcnNlSW50KG4pfHwwLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgYS5hKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkuc2tpcFByZWRpY2F0ZShmdW5jdGlvbigpe3JldHVybiExfSksdGhpcy5fdGVtcFZhbHVlcyYmKHRoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHRoaXMuX3RlbXBWYWx1ZXMpLHRoaXMuX3RlbXBWYWx1ZXM9bnVsbCksdGhpcy5fbW9kZWxDaGFuZ2VzPXRoaXMuc2VsZWN0ZWRPcHRpb25zLm9uQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXtpZih0LmFkZGVkKWZvcih2YXIgZT0wLG49dC5hZGRlZDtlPG4ubGVuZ3RoO2UrKyluW2VdLnNlbGVjdGVkPSEwO2lmKHQucmVtb3ZlZClmb3IodmFyIHI9MCxpPXQucmVtb3ZlZDtyPGkubGVuZ3RoO3IrKylpW3JdLnNlbGVjdGVkPSExfSl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbW9kZWxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuX3NldEFsbE9wdGlvbnNTZWxlY3RlZCghMCl9LGUucHJvdG90eXBlLmRlc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKCExKX0sZS5wcm90b3R5cGUuX3NldEZvY3VzZWRPcHRpb249ZnVuY3Rpb24odCl7dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtSW5kZXgodGhpcy5fZ2V0T3B0aW9uSW5kZXgodCkpfSxlLnByb3RvdHlwZS5fcmVtb3ZlT3B0aW9uRnJvbUxpc3Q9ZnVuY3Rpb24odCl7aWYodC5faGFzRm9jdXMpe3ZhciBlPXRoaXMuX2dldE9wdGlvbkluZGV4KHQpO2U+MD90aGlzLl9rZXlNYW5hZ2VyLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOjA9PT1lJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPjEmJnRoaXMuX2tleU1hbmFnZXIuc2V0TmV4dEl0ZW1BY3RpdmUoKX19LGUucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZSxuPXRoaXMuX2tleU1hbmFnZXIscj1uLmFjdGl2ZUl0ZW1JbmRleDtzd2l0Y2goZSl7Y2FzZSBsLmo6Y2FzZSBsLmQ6dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3RvZ2dsZVNlbGVjdE9uRm9jdXNlZE9wdGlvbigpLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7Y2FzZSBsLmY6Y2FzZSBsLmM6ZT09PWwuZj9uLnNldEZpcnN0SXRlbUFjdGl2ZSgpOm4uc2V0TGFzdEl0ZW1BY3RpdmUoKSx0LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDpuLm9uS2V5ZG93bih0KX1lIT09bC5sJiZlIT09bC5ifHwhdC5zaGlmdEtleXx8bi5hY3RpdmVJdGVtSW5kZXg9PT1yfHx0aGlzLl90b2dnbGVTZWxlY3RPbkZvY3VzZWRPcHRpb24oKX0sZS5wcm90b3R5cGUuX3JlcG9ydFZhbHVlQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiZ0aGlzLl9vbkNoYW5nZSh0aGlzLl9nZXRTZWxlY3RlZE9wdGlvblZhbHVlcygpKX0sZS5wcm90b3R5cGUuX2VtaXRDaGFuZ2VFdmVudD1mdW5jdGlvbih0KXt0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy5vcHRpb249ZX0odGhpcyx0KSl9LGUucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zP3RoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHR8fFtdKTp0aGlzLl90ZW1wVmFsdWVzPXR9LGUucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD10fSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25DaGFuZ2U9dH0sZS5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5fb25Ub3VjaGVkPXR9LGUucHJvdG90eXBlLl9zZXRPcHRpb25zRnJvbVZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9zZXRTZWxlY3RlZCghMSl9KSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5vcHRpb25zLmZpbmQoZnVuY3Rpb24obil7cmV0dXJuIGUuY29tcGFyZVdpdGg/ZS5jb21wYXJlV2l0aChuLnZhbHVlLHQpOm4udmFsdWU9PT10fSl9KS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5fc2V0U2VsZWN0ZWQoITApfSl9LGUucHJvdG90eXBlLl9nZXRTZWxlY3RlZE9wdGlvblZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LGUucHJvdG90eXBlLl90b2dnbGVTZWxlY3RPbkZvY3VzZWRPcHRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtpZihudWxsIT10JiZ0aGlzLl9pc1ZhbGlkSW5kZXgodCkpe3ZhciBlPXRoaXMub3B0aW9ucy50b0FycmF5KClbdF07ZSYmKGUudG9nZ2xlKCksdGhpcy5fZW1pdENoYW5nZUV2ZW50KGUpKX19LGUucHJvdG90eXBlLl9zZXRBbGxPcHRpb25zU2VsZWN0ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9ITE7dGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24obil7bi5fc2V0U2VsZWN0ZWQodCkmJihlPSEwKX0pLGUmJnRoaXMuX3JlcG9ydFZhbHVlQ2hhbmdlKCl9LGUucHJvdG90eXBlLl9pc1ZhbGlkSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5vcHRpb25zLmxlbmd0aH0sZS5wcm90b3R5cGUuX2dldE9wdGlvbkluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMudG9BcnJheSgpLmluZGV4T2YodCl9LGV9KHkpLGI9ZnVuY3Rpb24oKXt9fSwiMC91USI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCI2YmxGIiksaT1uKCIvV1l2Iiksbz1uKCIyZVBsIiksYT1uKCJ4VGxhIikscz1uKCJFbjgrIiksdT1uKCJJVVRiIiksbD1uKCJwdWdUIiksYz1uKCJTNVhRIiksZj1uKCJ1NjdEIiksaD1uKCJKY1J2IiksZD1uKCJGeGIxIik7ZnVuY3Rpb24gcCh0LGUpe2lmKCFlKXJldHVybiB0IGluc3RhbmNlb2Ygci5hP3Q6bmV3IHIuYShPYmplY3QoZC5hKSh0KSk7aWYobnVsbCE9dCl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2EuYV19KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IGwuYTtyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3ZhciBpPXRbYS5hXSgpO3IuYWRkKGkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5uZXh0KHQpfSkpfSxlcnJvcjpmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmNvbXBsZXRlKCl9KSl9fSkpfSkpLHJ9Ok9iamVjdChoLmEpKHQpKX0odCxlKTtpZihPYmplY3QoaS5hKSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHIuYShlP2Z1bmN0aW9uKG4pe3ZhciByPW5ldyBsLmE7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gdC50aGVuKGZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtuLm5leHQodCksci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmNvbXBsZXRlKCl9KSl9KSl9LGZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5lcnJvcih0KX0pKX0pfSkpLHJ9Ok9iamVjdChjLmEpKHQpKX0odCxlKTtpZihPYmplY3Qoby5hKSh0KSlyZXR1cm4gT2JqZWN0KHUuYSkodCxlKTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbcy5hXX0odCl8fCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcixpPW5ldyBsLmE7cmV0dXJuIGkuYWRkKGZ1bmN0aW9uKCl7ciYmImZ1bmN0aW9uIj09dHlwZW9mIHIucmV0dXJuJiZyLnJldHVybigpfSksaS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3I9dFtzLmFdKCksaS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe2lmKCFuLmNsb3NlZCl7dmFyIHQsZTt0cnl7dmFyIGk9ci5uZXh0KCk7dD1pLnZhbHVlLGU9aS5kb25lfWNhdGNoKHQpe3JldHVybiB2b2lkIG4uZXJyb3IodCl9ZT9uLmNvbXBsZXRlKCk6KG4ubmV4dCh0KSx0aGlzLnNjaGVkdWxlKCkpfX0pKX0pKSxpfTpPYmplY3QoZi5hKSh0KSl9KHQsZSl9dGhyb3cgbmV3IFR5cGVFcnJvcigobnVsbCE9PXQmJnR5cGVvZiB0fHx0KSsiIGlzIG5vdCBvYnNlcnZhYmxlIil9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KX0sIjIxTGIiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9bigiT3pmQiIpLG89bigiSzlJYSIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIHIuc2NoZWR1bGVyPWUsci53b3JrPW4scn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksbj4wP3QucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxlLG4pOih0aGlzLmRlbGF5PW4sdGhpcy5zdGF0ZT1lLHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpLHRoaXMpfSxlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4+MHx8dGhpcy5jbG9zZWQ/dC5wcm90b3R5cGUuZXhlY3V0ZS5jYWxsKHRoaXMsZSxuKTp0aGlzLl9leGVjdXRlKGUsbil9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MCksbnVsbCE9PXImJnI+MHx8bnVsbD09PXImJnRoaXMuZGVsYXk+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsZSxuLHIpOmUuZmx1c2godGhpcyl9LGV9KG4oImg5RHEiKS5hKSxzPW5ldyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gci5iKGUsdCksZX0obigiQ1M5USIpLmEpKShhKSx1PW4oInB1Z1QiKSxsPW4oIkZGT28iKSxjPW4oIjYwaVUiKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PXImJihyPTApO3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1uLGkuZGVsYXk9cixpfXJldHVybiByLmIoZSx0KSxlLmRpc3BhdGNoPWZ1bmN0aW9uKHQpe3Qubm90aWZpY2F0aW9uLm9ic2VydmUodC5kZXN0aW5hdGlvbiksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5zY2hlZHVsZU1lc3NhZ2U9ZnVuY3Rpb24odCl7dGhpcy5hZGQodGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoZS5kaXNwYXRjaCx0aGlzLmRlbGF5LG5ldyBoKHQsdGhpcy5kZXN0aW5hdGlvbikpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoYy5hLmNyZWF0ZU5leHQodCkpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoYy5hLmNyZWF0ZUVycm9yKHQpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoYy5hLmNyZWF0ZUNvbXBsZXRlKCkpfSxlfShsLmEpLGg9ZnVuY3Rpb24odCxlKXt0aGlzLm5vdGlmaWNhdGlvbj10LHRoaXMuZGVzdGluYXRpb249ZX0sZD1uKCI4ZzhBIikscD1uKCJ1TWFPIiksbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHZvaWQgMD09PW4mJihuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1yLGkuX2V2ZW50cz1bXSxpLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITEsaS5fYnVmZmVyU2l6ZT1lPDE/MTplLGkuX3dpbmRvd1RpbWU9bjwxPzE6bixuPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPyhpLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsaS5uZXh0PWkubmV4dEluZmluaXRlVGltZVdpbmRvdyk6aS5uZXh0PWkubmV4dFRpbWVXaW5kb3csaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubmV4dEluZmluaXRlVGltZVdpbmRvdz1mdW5jdGlvbihlKXt2YXIgbj10aGlzLl9ldmVudHM7bi5wdXNoKGUpLG4ubGVuZ3RoPnRoaXMuX2J1ZmZlclNpemUmJm4uc2hpZnQoKSx0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUubmV4dFRpbWVXaW5kb3c9ZnVuY3Rpb24oZSl7dGhpcy5fZXZlbnRzLnB1c2gobmV3IHkodGhpcy5fZ2V0Tm93KCksZSkpLHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cscj1uP3RoaXMuX2V2ZW50czp0aGlzLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cygpLGk9dGhpcy5zY2hlZHVsZXIsbz1yLmxlbmd0aDtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgZC5hO2lmKHRoaXMuaXNTdG9wcGVkfHx0aGlzLmhhc0Vycm9yP2U9dS5hLkVNUFRZOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLGU9bmV3IHAuYSh0aGlzLHQpKSxpJiZ0LmFkZCh0PW5ldyBmKHQsaSkpLG4pZm9yKHZhciBhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdKTtlbHNlIGZvcihhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksZX0sZS5wcm90b3R5cGUuX2dldE5vdz1mdW5jdGlvbigpe3JldHVybih0aGlzLnNjaGVkdWxlcnx8cykubm93KCl9LGUucHJvdG90eXBlLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9nZXROb3coKSxlPXRoaXMuX2J1ZmZlclNpemUsbj10aGlzLl93aW5kb3dUaW1lLHI9dGhpcy5fZXZlbnRzLGk9ci5sZW5ndGgsbz0wO288aSYmISh0LXJbb10udGltZTxuKTspbysrO3JldHVybiBpPmUmJihvPU1hdGgubWF4KG8saS1lKSksbz4wJiZyLnNwbGljZSgwLG8pLHJ9LGV9KG8uYSkseT1mdW5jdGlvbih0LGUpe3RoaXMudGltZT10LHRoaXMudmFsdWU9ZX07bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB4fSk7dmFyIGc9ImlubGluZSIsdj1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXTtmdW5jdGlvbiBiKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiB2LmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1ufSl8fChuPXZbMF0pLHI9PT1nJiYocj1pIT09Zz9pOiIiLGk9ZyksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19ZnVuY3Rpb24gXyh0KXtyZXR1cm4gYih0KVswXS5pbmRleE9mKCJyb3ciKT4tMX12YXIgdz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGkuX2Fubm91bmNlcj1uZXcgbSgxKSxpLmxheW91dCQ9aS5fYW5ub3VuY2VyLmFzT2JzZXJ2YWJsZSgpLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmxheW91dHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aERpcmVjdGlvbigpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygibGF5b3V0Iiwicm93IixmdW5jdGlvbih0KXtlLl91cGRhdGVXaXRoRGlyZWN0aW9uKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlV2l0aERpcmVjdGlvbigpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aERpcmVjdGlvbj1mdW5jdGlvbih0KXt0PXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImxheW91dCIpfHwicm93Iix0aGlzLl9tcUFjdGl2YXRpb24mJih0PXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9Yih0KTtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj0hMSkse2Rpc3BsYXk6cj8iaW5saW5lLWZsZXgiOiJmbGV4IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJmbGV4LWRpcmVjdGlvbiI6ZVswXSwiZmxleC13cmFwIjpufHxudWxsfX0oMCxlWzFdLGVbMl0pfSh0fHwiIik7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudChlKSx0aGlzLl9hbm5vdW5jZXIubmV4dCh7ZGlyZWN0aW9uOmVbImZsZXgtZGlyZWN0aW9uIl0sd3JhcDohIWVbImZsZXgtd3JhcCJdJiYibm93cmFwIiE9PWVbImZsZXgtd3JhcCJdfSl9LGV9KGkuYikseD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhKXt2YXIgcz10LmNhbGwodGhpcyxlLG4sYSl8fHRoaXM7cmV0dXJuIHMuX3pvbmU9aSxzLl9kaXJlY3Rpb25hbGl0eT1vLHMuX2xheW91dD0icm93IixyJiYocy5fbGF5b3V0V2F0Y2hlcj1yLmxheW91dCQuc3Vic2NyaWJlKHMuX29uTGF5b3V0Q2hhbmdlLmJpbmQocykpKSxzLl9kaXJlY3Rpb25XYXRjaGVyPXMuX2RpcmVjdGlvbmFsaXR5LmNoYW5nZS5zdWJzY3JpYmUocy5fdXBkYXRlV2l0aFZhbHVlLmJpbmQocykpLHN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXAiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmdhcHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fd2F0Y2hDb250ZW50Q2hhbmdlcygpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJnYXAiLCIwIixmdW5jdGlvbihlKXt0Ll91cGRhdGVXaXRoVmFsdWUoZS52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKSx0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX2RpcmVjdGlvbldhdGNoZXImJnRoaXMuX2RpcmVjdGlvbldhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX3dhdGNoQ29udGVudENoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXImJih0Ll9vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkZWROb2RlcyYmdC5hZGRlZE5vZGVzLmxlbmd0aD4wfHx0LnJlbW92ZWROb2RlcyYmdC5yZW1vdmVkTm9kZXMubGVuZ3RoPjB9KSYmdC5fdXBkYXRlV2l0aFZhbHVlKCl9KSx0Ll9vYnNlcnZlci5vYnNlcnZlKHQubmF0aXZlRWxlbWVudCx7Y2hpbGRMaXN0OiEwfSkpfSl9LGUucHJvdG90eXBlLl9vbkxheW91dENoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2xheW91dD0odC5kaXJlY3Rpb258fCIiKS50b0xvd2VyQ2FzZSgpLHYuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dHx8dGhpcy5fcXVlcnlJbnB1dCgiZ2FwIil8fCIwIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIHI9dGhpcy5jaGlsZHJlbk5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubm9kZVR5cGUmJiJub25lIiE9ZS5fZ2V0RGlzcGxheVN0eWxlKHQpfSkuc29ydChmdW5jdGlvbih0LG4pe3ZhciByPStlLl9zdHlsZXIubG9va3VwU3R5bGUodCwib3JkZXIiKSxpPStlLl9zdHlsZXIubG9va3VwU3R5bGUobiwib3JkZXIiKTtyZXR1cm4gaXNOYU4ocil8fGlzTmFOKGkpfHxyPT09aT8wOnI+aT8xOi0xfSk7aWYoci5sZW5ndGg+MClpZihuLmVuZHNXaXRoKE8pKW49bi5zdWJzdHJpbmcoMCxuLmluZGV4T2YoTykpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkR3JpZFBhZGRpbmcobiksciksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl9idWlsZEdyaWRNYXJnaW4obikpO2Vsc2V7dmFyIGk9ci5wb3AoKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZENTUyhuKSxyKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZENTUygpLFtpXSl9fSxlLnByb3RvdHlwZS5fYnVpbGRHcmlkUGFkZGluZz1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj10OmU9dCx7cGFkZGluZzoiMHB4ICIrZSsiICIrdCsiICIrbn19LGUucHJvdG90eXBlLl9idWlsZEdyaWRNYXJnaW49ZnVuY3Rpb24odCl7dmFyIGU9IjBweCIsbj0iMHB4IjtyZXR1cm4icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlP249Ii0iK3Q6ZT0iLSIrdCx7bWFyZ2luOiIwcHggIitlKyIgLSIrdCsiICIrbn19LGUucHJvdG90eXBlLl9idWlsZENTUz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1udWxsKTt2YXIgZSxuPXsibWFyZ2luLWxlZnQiOm51bGwsIm1hcmdpbi1yaWdodCI6bnVsbCwibWFyZ2luLXRvcCI6bnVsbCwibWFyZ2luLWJvdHRvbSI6bnVsbH07c3dpdGNoKHRoaXMuX2xheW91dCl7Y2FzZSJjb2x1bW4iOmU9Im1hcmdpbi1ib3R0b20iO2JyZWFrO2Nhc2UiY29sdW1uLXJldmVyc2UiOmU9Im1hcmdpbi10b3AiO2JyZWFrO2Nhc2Uicm93IjplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1sZWZ0IjoibWFyZ2luLXJpZ2h0IjticmVhaztjYXNlInJvdy1yZXZlcnNlIjplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1yaWdodCI6Im1hcmdpbi1sZWZ0IjticmVhaztkZWZhdWx0OmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQifXJldHVybiBuW2VdPXQsbn0sZX0oaS5iKSxPPSIgZ3JpZCI7ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciByPTAsaT1lO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdO2lmKG51bGwhPW8pZm9yKHZhciBhIGluIG8pby5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbYV09b1thXSl9cmV0dXJuIHR9dmFyIFM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8pe3ZhciBhPXQuY2FsbCh0aGlzLGUsbixpKXx8dGhpcztyZXR1cm4gYS5fY29udGFpbmVyPXIsYS5zdHlsZVV0aWxzPWksYS5sYXlvdXRDb25maWc9byxhLl9jYWNoZUlucHV0KCJmbGV4IiwiIiksYS5fY2FjaGVJbnB1dCgic2hyaW5rIiwxKSxhLl9jYWNoZUlucHV0KCJncm93IiwxKSxyJiYoYS5fbGF5b3V0V2F0Y2hlcj1yLmxheW91dCQuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2EuX29uTGF5b3V0Q2hhbmdlKHQpfSkpLGF9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaHJpbmsiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgic2hyaW5rIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdyb3ciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ3JvdyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXgiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5mbGV4fHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygiZmxleCIsIiIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlU3R5bGUodC52YWx1ZSl9KSx0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fb25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fbGF5b3V0PXR8fHRoaXMuX2xheW91dHx8e2RpcmVjdGlvbjoicm93Iix3cmFwOiExfSx0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9dHx8dGhpcy5fcXVlcnlJbnB1dCgiZmxleCIpfHwiIjt0aGlzLl9tcUFjdGl2YXRpb24mJihlPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIG49U3RyaW5nKGUpLnJlcGxhY2UoIjsiLCIiKSxyPU9iamVjdChpLm8pKG4sdGhpcy5fcXVlcnlJbnB1dCgiZ3JvdyIpLHRoaXMuX3F1ZXJ5SW5wdXQoInNocmluayIpKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX3ZhbGlkYXRlVmFsdWUuYXBwbHkodGhpcyxyKSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9nZXRGbGV4Rmxvd0RpcmVjdGlvbih0aGlzLnBhcmVudEVsZW1lbnQsdGhpcy5sYXlvdXRDb25maWcuYWRkRmxleFRvUGFyZW50KS5pbmRleE9mKCJjb2x1bW4iKT4tMT8iY29sdW1uIjoicm93IixpPV8ocik/Im1heC13aWR0aCI6Im1heC1oZWlnaHQiLG89XyhyKT8ibWluLXdpZHRoIjoibWluLWhlaWdodCIsYT1TdHJpbmcobikuaW5kZXhPZigiY2FsYyIpPi0xLHM9YXx8ImF1dG8iPT1uLHU9U3RyaW5nKG4pLmluZGV4T2YoIiUiKT4tMSYmIWEsbD1TdHJpbmcobikuaW5kZXhPZigicHgiKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoImVtIik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJ2dyIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigidmgiKT4tMSxjPVN0cmluZyhuKS5pbmRleE9mKCJweCIpPi0xfHxzLGY9YXx8bDt0PSIwIj09dD8wOnQsZT0iMCI9PWU/MDplO3ZhciBoPSF0JiYhZSxkPXt9LHA9eyJtYXgtd2lkdGgiOm51bGwsIm1heC1oZWlnaHQiOm51bGwsIm1pbi13aWR0aCI6bnVsbCwibWluLWhlaWdodCI6bnVsbH07c3dpdGNoKG58fCIiKXtjYXNlIiI6bj0icm93Ij09PXI/IjAlIjp0aGlzLmxheW91dENvbmZpZy51c2VDb2x1bW5CYXNpc1plcm8/IjAuMDAwMDAwMDAxcHgiOiJhdXRvIjticmVhaztjYXNlImluaXRpYWwiOmNhc2Uibm9ncm93Ijp0PTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJncm93IjpuPSIxMDAlIjticmVhaztjYXNlIm5vc2hyaW5rIjplPTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJhdXRvIjpicmVhaztjYXNlIm5vbmUiOnQ9MCxlPTAsbj0iYXV0byI7YnJlYWs7ZGVmYXVsdDpmfHx1fHxpc05hTihuKXx8KG4rPSIlIiksIjAlIj09PW4mJihmPSEwKSwiMHB4Ij09PW4mJihuPSIwJSIpLGQ9QyhwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpmP246IjEwMCUifTp7ZmxleDp0KyIgIitlKyIgIisoZj9uOiIxMDAlIil9KX1yZXR1cm4gZC5mbGV4fHxkWyJmbGV4LWdyb3ciXXx8KGQ9QyhwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpufTp7ZmxleDp0KyIgIitlKyIgIitufSkpLCIwJSIhPT1uJiYiMHB4IiE9PW4mJiIwLjAwMDAwMDAwMXB4IiE9PW4mJiJhdXRvIiE9PW4mJihkW29dPWh8fGMmJnQ/bjpudWxsLGRbaV09aHx8IXMmJmU/bjpudWxsKSxkW29dfHxkW2ldP3RoaXMuX2xheW91dCYmdGhpcy5fbGF5b3V0LndyYXAmJihkW2E/ImZsZXgtYmFzaXMiOiJmbGV4Il09ZFtpXT9hP2RbaV06dCsiICIrZSsiICIrZFtpXTphP2Rbb106dCsiICIrZSsiICIrZFtvXSk6ZD1DKHAsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSxDKGQseyJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KX0sZX0oaS5iKSxFPXttYXJnaW46MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIiwibWluLXdpZHRoIjoiMTAwJSIsIm1pbi1oZWlnaHQiOiIxMDAlIn0saz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGkuZWxSZWY9bixpLl9hcHBseVN0eWxlVG9FbGVtZW50KEUpLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oaS5iKSxUPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiBvLl9sYXlvdXQ9InJvdyIsciYmKG8uX2xheW91dFdhdGNoZXI9ci5sYXlvdXQkLnN1YnNjcmliZShvLl9vbkxheW91dENoYW5nZS5iaW5kKG8pKSksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25NZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbk1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5hbGlnbnx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJhbGlnbiIsInN0YXJ0IHN0cmV0Y2giLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhWYWx1ZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkQ1NTKHQpKSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcodCx0aGlzLl9sYXlvdXQ/dGhpcy5fbGF5b3V0OiJyb3ciKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksdi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5fbGF5b3V0fSl8fCh0aGlzLl9sYXlvdXQ9InJvdyIpO3ZhciBuPXRoaXMuX3F1ZXJ5SW5wdXQoImFsaWduIil8fCJzdGFydCBzdHJldGNoIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCksdGhpcy5fYWxsb3dTdHJldGNoaW5nKG4sdGhpcy5fbGF5b3V0fHwicm93Iil9LGUucHJvdG90eXBlLl9idWlsZENTUz1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXQuc3BsaXQoIiAiKSxyPW5bMV07c3dpdGNoKG5bMF0pe2Nhc2UiY2VudGVyIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iY2VudGVyIjticmVhaztjYXNlInNwYWNlLWFyb3VuZCI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWFyb3VuZCI7YnJlYWs7Y2FzZSJzcGFjZS1iZXR3ZWVuIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtYmV0d2VlbiI7YnJlYWs7Y2FzZSJzcGFjZS1ldmVubHkiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1ldmVubHkiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RhcnQiOmNhc2UiZmxleC1zdGFydCI6ZGVmYXVsdDplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iZmxleC1zdGFydCJ9c3dpdGNoKHIpe2Nhc2Uic3RhcnQiOmNhc2UiZmxleC1zdGFydCI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImZsZXgtc3RhcnQiO2JyZWFrO2Nhc2UiYmFzZWxpbmUiOmVbImFsaWduLWl0ZW1zIl09ImJhc2VsaW5lIjticmVhaztjYXNlImNlbnRlciI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJlbmQiOmNhc2UiZmxleC1lbmQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LWVuZCI7YnJlYWs7Y2FzZSJzdHJldGNoIjpkZWZhdWx0OmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJzdHJldGNoIn1yZXR1cm4gQyhlLHtkaXNwbGF5OiJmbGV4IiwiZmxleC1kaXJlY3Rpb24iOnRoaXMuX2xheW91dHx8InJvdyIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pfSxlLnByb3RvdHlwZS5fYWxsb3dTdHJldGNoaW5nPWZ1bmN0aW9uKHQsZSl7InN0cmV0Y2giPT10LnNwbGl0KCIgIilbMV0mJnRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQoeyJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsIm1heC13aWR0aCI6XyhlKT9udWxsOiIxMDAlIiwibWF4LWhlaWdodCI6XyhlKT8iMTAwJSI6bnVsbH0pfSxlfShpLmIpLEk9ZnVuY3Rpb24oKXt9fSwiMjZGVSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIks5SWEiKSxvPW4oIjhnOEEiKSxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl92YWx1ZT1lLG59cmV0dXJuIHIuYihlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsZSk7cmV0dXJuIG4mJiFuLmNsb3NlZCYmZS5uZXh0KHRoaXMuX3ZhbHVlKSxufSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe2lmKHRoaXMuaGFzRXJyb3IpdGhyb3cgdGhpcy50aHJvd25FcnJvcjtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgby5hO3JldHVybiB0aGlzLl92YWx1ZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1lKX0sZX0oaS5hKX0sIjJCZGoiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSwiMmVQbCI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgdH19LCIzcEpRIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbigibXJTRyIpLG4oIk96ZkIiKSxuKCJuNmdHIik7dmFyIHI9ZnVuY3Rpb24oKXt9fSw0OmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9bigielVuYiIpfSwiNGMzNSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKTtmdW5jdGlvbiBvKCl7dGhyb3cgRXJyb3IoIkhvc3QgYWxyZWFkeSBoYXMgYSBwb3J0YWwgYXR0YWNoZWQiKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dCYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYSBwb3J0YWwgdG8gYSBudWxsIFBvcnRhbE91dGxldCIpfSgpLHQuaGFzQXR0YWNoZWQoKSYmbygpLHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbD09dD9mdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGRldGFjaCBhIHBvcnRhbCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhIGhvc3QiKX0oKToodGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBdHRhY2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2V0QXR0YWNoZWRIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fSx0fSgpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmNvbXBvbmVudD1lLGkudmlld0NvbnRhaW5lclJlZj1uLGkuaW5qZWN0b3I9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGEpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnRlbXBsYXRlUmVmPWUsaS52aWV3Q29udGFpbmVyUmVmPW4saS5jb250ZXh0PXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm9yaWdpbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMuY29udGV4dCksdGhpcy5jb250ZXh0PW4sdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyl9LGV9KGEpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faXNEaXNwb3NlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzQXR0YWNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHR8fGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk11c3QgcHJvdmlkZSBhIHBvcnRhbCB0byBhdHRhY2giKX0oKSx0aGlzLmhhc0F0dGFjaGVkKCkmJm8oKSx0aGlzLl9pc0Rpc3Bvc2VkJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJUaGlzIFBvcnRhbE91dGxldCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9KCksdCBpbnN0YW5jZW9mIHM/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hDb21wb25lbnRQb3J0YWwodCkpOnQgaW5zdGFuY2VvZiB1Pyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnZvaWQgZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYW4gdW5rbm93biBQb3J0YWwgdHlwZS4gQmFzZVBvcnRhbE91dGxldCBhY2NlcHRzIGVpdGhlciBhIENvbXBvbmVudFBvcnRhbCBvciBhIFRlbXBsYXRlUG9ydGFsLiIpfSgpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5kZXRhY2goKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwfSx0LnByb3RvdHlwZS5zZXREaXNwb3NlRm49ZnVuY3Rpb24odCl7dGhpcy5fZGlzcG9zZUZuPXR9LHQucHJvdG90eXBlLl9pbnZva2VEaXNwb3NlRm49ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9LHR9KCksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5vdXRsZXRFbGVtZW50PWUsby5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sby5fYXBwUmVmPXIsby5fZGVmYXVsdEluamVjdG9yPWksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhlPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQocix0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXN0cm95KCl9KSk6KGU9ci5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhlLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe24uX2FwcFJlZi5kZXRhY2hWaWV3KGUuaG9zdFZpZXcpLGUuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShlKSksZX0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmlld0NvbnRhaW5lclJlZixyPW4uY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0KTtyZXR1cm4gci5kZXRlY3RDaGFuZ2VzKCksci5yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHQpfSksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXt2YXIgdD1uLmluZGV4T2Yocik7LTEhPT10JiZuLnJlbW92ZSh0KX0pLHJ9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksbnVsbCE9dGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3V0bGV0RWxlbWVudCl9LGUucHJvdG90eXBlLl9nZXRDb21wb25lbnRSb290Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19LGV9KGwpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsci5fdmlld0NvbnRhaW5lclJlZj1uLHIuX2lzSW5pdGlhbGl6ZWQ9ITEsci5hdHRhY2hlZD1uZXcgaS5tLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwb3J0YWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHNldDpmdW5jdGlvbihlKXsoIXRoaXMuaGFzQXR0YWNoZWQoKXx8ZXx8dGhpcy5faXNJbml0aWFsaXplZCkmJih0aGlzLmhhc0F0dGFjaGVkKCkmJnQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLGUmJnQucHJvdG90eXBlLmF0dGFjaC5jYWxsKHRoaXMsZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRhY2hlZFJlZiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwsdGhpcy5fYXR0YWNoZWRSZWY9bnVsbH0sZS5wcm90b3R5cGUuYXR0YWNoQ29tcG9uZW50UG9ydGFsPWZ1bmN0aW9uKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO3ZhciBuPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixyPXRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCksaT1uLmNyZWF0ZUNvbXBvbmVudChyLG4ubGVuZ3RoLGUuaW5qZWN0b3J8fG4ucGFyZW50SW5qZWN0b3IpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVzdHJveSgpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfSxlLnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbD1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO3ZhciByPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0KTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0RGlzcG9zZUZuLmNhbGwodGhpcyxmdW5jdGlvbigpe3JldHVybiBuLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPXIsdGhpcy5hdHRhY2hlZC5lbWl0KHIpLHJ9LGV9KGwpLGg9ZnVuY3Rpb24oKXt9fSwiNjBpVSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIkc1SjEiKSxpPW4oIkYvWEwiKSxvPW4oIlhsUHciKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9bix0aGlzLmhhc1ZhbHVlPSJOIj09PXR9cmV0dXJuIHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdC5uZXh0JiZ0Lm5leHQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gdC5lcnJvciYmdC5lcnJvcih0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiB0LmNvbXBsZXRlJiZ0LmNvbXBsZXRlKCl9fSx0LnByb3RvdHlwZS5kbz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdCYmdCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBlJiZlKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIG4mJm4oKX19LHQucHJvdG90eXBlLmFjY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQ/dGhpcy5vYnNlcnZlKHQpOnRoaXMuZG8odCxlLG4pfSx0LnByb3RvdHlwZS50b09ic2VydmFibGU9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiBPYmplY3QoaS5hKSh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBPYmplY3Qoby5hKSh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBPYmplY3Qoci5iKSgpfXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCB2YWx1ZSIpfSx0LmNyZWF0ZU5leHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/bmV3IHQoIk4iLGUpOnQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb259LHQuY3JlYXRlRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KCJFIix2b2lkIDAsZSl9LHQuY3JlYXRlQ29tcGxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jb21wbGV0ZU5vdGlmaWNhdGlvbn0sdC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgdCgiQyIpLHQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb249bmV3IHQoIk4iLHZvaWQgMCksdH0oKX0sIjY3WS8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbi4gQXJlIHlvdSBsb29raW5nIGZvciBgbWFwVG8oKWA/Iik7cmV0dXJuIG4ubGlmdChuZXcgYSh0LGUpKX19dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcm9qZWN0PXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByb2plY3QsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcm9qZWN0PW4saS5jb3VudD0wLGkudGhpc0FyZz1yfHxpLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucHJvamVjdC5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGkuYSl9LCI2YWh3IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiaUx4USIpLGk9bigiREtUYiIpLG89e2Nsb3NlZDohMCxuZXh0OmZ1bmN0aW9uKHQpe30sZXJyb3I6ZnVuY3Rpb24odCl7aWYoci5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtPYmplY3QoaS5hKSh0KX0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fX0sIjZibEYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiRkZPbyIpLGk9bigiTC9WOSIpLG89bigiNmFodyIpLGE9bigieFRsYSIpLHM9bigieTNCeSIpLHU9bigiaUx4USIpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9cmV0dXJuIHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc291cmNlPXRoaXMsbi5vcGVyYXRvcj1lLG59LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7dmFyIGE9dGhpcy5vcGVyYXRvcixzPWZ1bmN0aW9uKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2Ygci5hKXJldHVybiB0O2lmKHRbaS5hXSlyZXR1cm4gdFtpLmFdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IHIuYSh0LGUsbik6bmV3IHIuYShvLmEpfSh0LGUsbik7aWYoYT9hLmNhbGwocyx0aGlzLnNvdXJjZSk6cy5hZGQodGhpcy5zb3VyY2V8fHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYhcy5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fc3Vic2NyaWJlKHMpOnRoaXMuX3RyeVN1YnNjcmliZShzKSksdS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnMuc3luY0Vycm9yVGhyb3dhYmxlJiYocy5zeW5jRXJyb3JUaHJvd2FibGU9ITEscy5zeW5jRXJyb3JUaHJvd24pKXRocm93IHMuc3luY0Vycm9yVmFsdWU7cmV0dXJuIHN9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLHQuZXJyb3IoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9YyhlKSkoZnVuY3Rpb24oZSxyKXt2YXIgaTtpPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3RyeXt0KGUpfWNhdGNoKHQpe3IodCksaSYmaS51bnN1YnNjcmliZSgpfX0scixlKX0pfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc291cmNlO3JldHVybiBlJiZlLnN1YnNjcmliZSh0KX0sdC5wcm90b3R5cGVbYS5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAwPT09dC5sZW5ndGg/dGhpczpPYmplY3Qocy5iKSh0KSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyh0PWModCkpKGZ1bmN0aW9uKHQsbil7dmFyIHI7ZS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0sZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHQocil9KX0pfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gYyh0KXtpZih0fHwodD11LmEuUHJvbWlzZXx8UHJvbWlzZSksIXQpdGhyb3cgbmV3IEVycm9yKCJubyBQcm9taXNlIGltcGwgZm91bmQiKTtyZXR1cm4gdH19LCI4ZzhBIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJvYmplY3QgdW5zdWJzY3JpYmVkIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiByLmIoZSx0KSxlfShFcnJvcil9LCI4bU1yIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJDY25HIiksbz1uKCJXZjRwIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fcGxhdGZvcm09bixpLl9kb2N1bWVudD1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztPYmplY3QoaS5XKSgpJiZ0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCksdGhpcy5fdG9vbGJhclJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpfSkpfSxlLnByb3RvdHlwZS5fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdG9vbGJhclJvd3MubGVuZ3RoJiZbXS5zbGljZS5jYWxsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNsYXNzTGlzdCYmdC5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC10b29sYmFyLXJvdyIpKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZSE9PSh0Ll9kb2N1bWVudD90Ll9kb2N1bWVudC5DT01NRU5UX05PREU6OCl9KS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50LnRyaW0oKX0pJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJNYXRUb29sYmFyOiBBdHRlbXB0aW5nIHRvIGNvbWJpbmUgZGlmZmVyZW50IHRvb2xiYXIgbW9kZXMuIEVpdGhlciBzcGVjaWZ5IG11bHRpcGxlIGA8bWF0LXRvb2xiYXItcm93PmAgZWxlbWVudHMgZXhwbGljaXRseSBvciBqdXN0IHBsYWNlIGNvbnRlbnQgaW5zaWRlIG9mIGEgYDxtYXQtdG9vbGJhcj5gIGZvciBhIHNpbmdsZSByb3cuIil9KCl9LGV9KE9iamVjdChvLnUpKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSxzPWZ1bmN0aW9uKCl7fX0sIjlaMUYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJNR0JTIiksbz1uKCJ6b3RtIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IHModCkscj1lLmxpZnQobik7cmV0dXJuIG4uY2F1Z2h0PXJ9fXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLnNlbGVjdG9yLHRoaXMuY2F1Z2h0KSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5zZWxlY3Rvcj1uLGkuY2F1Z2h0PXIsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgbj12b2lkIDA7dHJ5e249dGhpcy5zZWxlY3RvcihlLHRoaXMuY2F1Z2h0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0LnByb3RvdHlwZS5lcnJvci5jYWxsKHRoaXMsZSl9dGhpcy5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCksdGhpcy5hZGQoT2JqZWN0KG8uYSkodGhpcyxuKSl9fSxlfShpLmEpfSxBeXRSOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj17cHJvZHVjdGlvbjohMH19LENTOVE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXt2b2lkIDA9PT1uJiYobj10Lm5vdyksdGhpcy5TY2hlZHVsZXJBY3Rpb249ZSx0aGlzLm5vdz1ufXJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLG5ldyB0aGlzLlNjaGVkdWxlckFjdGlvbih0aGlzLHQpLnNjaGVkdWxlKG4sZSl9LHQubm93PURhdGUubm93P0RhdGUubm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSx0fSgpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLHIpe3ZvaWQgMD09PXImJihyPWkubm93KTt2YXIgbz10LmNhbGwodGhpcyxuLGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVsZWdhdGUmJmUuZGVsZWdhdGUhPT1vP2UuZGVsZWdhdGUubm93KCk6cigpfSl8fHRoaXM7cmV0dXJuIG8uYWN0aW9ucz1bXSxvLmFjdGl2ZT0hMSxvLnNjaGVkdWxlZD12b2lkIDAsb31yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24obixyLGkpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSxlLmRlbGVnYXRlJiZlLmRlbGVnYXRlIT09dGhpcz9lLmRlbGVnYXRlLnNjaGVkdWxlKG4scixpKTp0LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsbixyLGkpfSxlLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGlvbnM7aWYodGhpcy5hY3RpdmUpZS5wdXNoKHQpO2Vsc2V7dmFyIG47dGhpcy5hY3RpdmU9ITA7ZG97aWYobj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5hY3RpdmU9ITEsbil7Zm9yKDt0PWUuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0sZX0oaSl9LENjbkc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiSGEiLGZ1bmN0aW9uKCl7cmV0dXJuIEtlfSksbi5kKGUsIklhIixmdW5jdGlvbigpe3JldHVybiBaZX0pLG4uZChlLCJKYSIsZnVuY3Rpb24oKXtyZXR1cm4gWGV9KSxuLmQoZSwiR2EiLGZ1bmN0aW9uKCl7cmV0dXJuIGR0fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGFlfSksbi5kKGUsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIEp0fSksbi5kKGUsIlciLGZ1bmN0aW9uKCl7cmV0dXJuIHRlfSksbi5kKGUsIlEiLGZ1bmN0aW9uKCl7cmV0dXJuIG5lfSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGVlfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGh0fSksbi5kKGUsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIG10fSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIHl0fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGN0fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ0fSksbi5kKGUsIlUiLGZ1bmN0aW9uKCl7cmV0dXJuIFNlfSksbi5kKGUsIkwiLGZ1bmN0aW9uKCl7cmV0dXJuIHF0fSksbi5kKGUsIlkiLGZ1bmN0aW9uKCl7cmV0dXJuIEd0fSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIFFlfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuICRlfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIEx0fSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGF0fSksbi5kKGUsIkUiLGZ1bmN0aW9uKCl7cmV0dXJuIFNufSksbi5kKGUsIkYiLGZ1bmN0aW9uKCl7cmV0dXJuIENufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiTyIsZnVuY3Rpb24oKXtyZXR1cm4gWH0pLG4uZChlLCJNIixmdW5jdGlvbigpe3JldHVybiAkfSksbi5kKGUsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiVCIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJWIixmdW5jdGlvbigpe3JldHVybiBafSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiSCIsZnVuY3Rpb24oKXtyZXR1cm4gSX0pLG4uZChlLCJ4IixmdW5jdGlvbigpe3JldHVybiBGdH0pLG4uZChlLCJDIixmdW5jdGlvbigpe3JldHVybiB1ZX0pLG4uZChlLCJEIixmdW5jdGlvbigpe3JldHVybiBsZX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBfdH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBUdH0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBjZX0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBQdH0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBqdH0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBmZX0pLG4uZChlLCJCIixmdW5jdGlvbigpe3JldHVybiBoZX0pLG4uZChlLCJJIixmdW5jdGlvbigpe3JldHVybiBtZX0pLG4uZChlLCJKIixmdW5jdGlvbigpe3JldHVybiBkZX0pLG4uZChlLCJLIixmdW5jdGlvbigpe3JldHVybiBnZX0pLG4uZChlLCJOIixmdW5jdGlvbigpe3JldHVybiB2ZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBiZX0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBCZX0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBIZX0pLG4uZChlLCJHIixmdW5jdGlvbigpe3JldHVybiBJZX0pLG4uZChlLCJQIixmdW5jdGlvbigpe3JldHVybiBUZX0pLG4uZChlLCJYIixmdW5jdGlvbigpe3JldHVybiBHZX0pLG4uZChlLCJSYSIsZnVuY3Rpb24oKXtyZXR1cm4gQWV9KSxuLmQoZSwiQmEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSksbi5kKGUsIloiLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsIkFhIixmdW5jdGlvbigpe3JldHVybiBJdH0pLG4uZChlLCJDYSIsZnVuY3Rpb24oKXtyZXR1cm4gYm59KSxuLmQoZSwiRGEiLGZ1bmN0aW9uKCl7cmV0dXJuIE9ufSksbi5kKGUsIkVhIixmdW5jdGlvbigpe3JldHVybiBubn0pLG4uZChlLCJQYSIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJVYSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJmYiIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJTYSIsZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSxuLmQoZSwiVGEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSksbi5kKGUsIkZhIixmdW5jdGlvbigpe3JldHVybiB2cn0pLG4uZChlLCJLYSIsZnVuY3Rpb24oKXtyZXR1cm4gRnJ9KSxuLmQoZSwiTGEiLGZ1bmN0aW9uKCl7cmV0dXJuIEdvfSksbi5kKGUsIk1hIixmdW5jdGlvbigpe3JldHVybiBIbn0pLG4uZChlLCJOYSIsZnVuY3Rpb24oKXtyZXR1cm4gdWl9KSxuLmQoZSwiT2EiLGZ1bmN0aW9uKCl7cmV0dXJuIGJyfSksbi5kKGUsIlFhIixmdW5jdGlvbigpe3JldHVybiB5cn0pLG4uZChlLCJWYSIsZnVuY3Rpb24oKXtyZXR1cm4gSXJ9KSxuLmQoZSwiV2EiLGZ1bmN0aW9uKCl7cmV0dXJuIFRyfSksbi5kKGUsIlhhIixmdW5jdGlvbigpe3JldHVybiBBaX0pLG4uZChlLCJZYSIsZnVuY3Rpb24oKXtyZXR1cm4gS3J9KSxuLmQoZSwiYWIiLGZ1bmN0aW9uKCl7cmV0dXJuIGxpfSksbi5kKGUsImRiIixmdW5jdGlvbigpe3JldHVybiBjaX0pLG4uZChlLCJaYSIsZnVuY3Rpb24oKXtyZXR1cm4gTWl9KSxuLmQoZSwiYmIiLGZ1bmN0aW9uKCl7cmV0dXJuIE5pfSksbi5kKGUsImNiIixmdW5jdGlvbigpe3JldHVybiBQaX0pLG4uZChlLCJlYiIsZnVuY3Rpb24oKXtyZXR1cm4gU2l9KSxuLmQoZSwiZ2IiLGZ1bmN0aW9uKCl7cmV0dXJuIERpfSksbi5kKGUsImhiIixmdW5jdGlvbigpe3JldHVybiBVbn0pLG4uZChlLCJpYiIsZnVuY3Rpb24oKXtyZXR1cm4gVml9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJwdWdUIiksbz1uKCJLOUlhIiksYT1uKCI2YmxGIikscz1uKCJwMGliIiksdT1uKCJTMW5YIik7ZnVuY3Rpb24gbCh0KXtyZXR1cm57cHJvdmlkZWRJbjp0LnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTp0LmZhY3RvcnksdmFsdWU6dm9pZCAwfX12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMubmdJbmplY3RhYmxlRGVmPXZvaWQgMCE9PWU/bCh7cHJvdmlkZWRJbjplLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmUuZmFjdG9yeX0pOnZvaWQgMH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iSW5qZWN0aW9uVG9rZW4gIit0aGlzLl9kZXNjfSx0fSgpLGY9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiBoKHQsZSxuKXt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07aWYodCl7dmFyIGk9dC5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkoZSkpO2Zvcih2YXIgbyBpbiBpKXRoaXNbb109aVtvXX19fShlKTtmdW5jdGlvbiBvKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO2lmKHRoaXMgaW5zdGFuY2VvZiBvKXJldHVybiBpLmFwcGx5KHRoaXMsdCksdGhpczt2YXIgbixhPW5ldygobj1vKS5iaW5kLmFwcGx5KG4sT2JqZWN0KHIuZCkoW3ZvaWQgMF0sdCkpKTtyZXR1cm4gcy5hbm5vdGF0aW9uPWEscztmdW5jdGlvbiBzKHQsZSxuKXtmb3IodmFyIHI9dC5oYXNPd25Qcm9wZXJ0eShmKT90W2ZdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGYse3ZhbHVlOltdfSlbZl07ci5sZW5ndGg8PW47KXIucHVzaChudWxsKTtyZXR1cm4ocltuXT1yW25dfHxbXSkucHVzaChhKSx0fX1yZXR1cm4gbiYmKG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpKSxvLnByb3RvdHlwZS5uZ01ldGFkYXRhTmFtZT10LG8uYW5ub3RhdGlvbkNscz1vLG99dmFyIGQ9bmV3IGMoIkFuYWx5emVGb3JFbnRyeUNvbXBvbmVudHMiKTtGdW5jdGlvbjt2YXIgcD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LG09InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYseT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLGc9cHx8eXx8bSx2PVByb21pc2UucmVzb2x2ZSgwKSxiPW51bGw7ZnVuY3Rpb24gXygpe2lmKCFiKXt2YXIgdD1nLlN5bWJvbDtpZih0JiZ0Lml0ZXJhdG9yKWI9dC5pdGVyYXRvcjtlbHNlIGZvcih2YXIgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhNYXAucHJvdG90eXBlKSxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciByPWVbbl07ImVudHJpZXMiIT09ciYmInNpemUiIT09ciYmTWFwLnByb3RvdHlwZVtyXT09PU1hcC5wcm90b3R5cGUuZW50cmllcyYmKGI9cil9fXJldHVybiBifWZ1bmN0aW9uIHcodCl7InVuZGVmaW5lZCI9PXR5cGVvZiBab25lP3YudGhlbihmdW5jdGlvbigpe3QmJnQuYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLHQpfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gdD09PWV8fCJudW1iZXIiPT10eXBlb2YgdCYmIm51bWJlciI9PXR5cGVvZiBlJiZpc05hTih0KSYmaXNOYU4oZSl9ZnVuY3Rpb24gTyh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIEFycmF5KXJldHVybiJbIit0Lm1hcChPKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT10KXJldHVybiIiK3Q7aWYodC5vdmVycmlkZGVuTmFtZSlyZXR1cm4iIit0Lm92ZXJyaWRkZW5OYW1lO2lmKHQubmFtZSlyZXR1cm4iIit0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpO2lmKG51bGw9PWUpcmV0dXJuIiIrZTt2YXIgbj1lLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1uP2U6ZS5zdWJzdHJpbmcoMCxuKX1mdW5jdGlvbiBDKHQpe3JldHVybiB0Ll9fZm9yd2FyZF9yZWZfXz1DLHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzKCkpfSx0fWZ1bmN0aW9uIFModCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuaGFzT3duUHJvcGVydHkoIl9fZm9yd2FyZF9yZWZfXyIpJiZ0Ll9fZm9yd2FyZF9yZWZfXz09PUM/dCgpOnR9dmFyIEU9aCgiSW5qZWN0IixmdW5jdGlvbih0KXtyZXR1cm57dG9rZW46dH19KSxrPWgoIk9wdGlvbmFsIiksVD1oKCJTZWxmIiksST1oKCJTa2lwU2VsZiIpLEE9Il9fc291cmNlIixqPW5ldyBPYmplY3QsUD1uZXcgYygiSU5KRUNUT1IiKSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9aiksZT09PWopdGhyb3cgbmV3IEVycm9yKCJOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICIrTyh0KSsiISIpO3JldHVybiBlfSx0fSgpLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP25ldyBXKHQsZSk6bmV3IFcodC5wcm92aWRlcnMsdC5wYXJlbnQsdC5uYW1lfHxudWxsKX0sdC5USFJPV19JRl9OT1RfRk9VTkQ9aix0Lk5VTEw9bmV3IE0sdC5uZ0luamVjdGFibGVEZWY9bCh7cHJvdmlkZWRJbjoiYW55IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFooUCl9fSksdH0oKSxSPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxEPVtdLEw9UixGPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyl9LFY9e30sVT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdClpZih0W2VdPT09VilyZXR1cm4gZTt0aHJvdyBFcnJvcigiIXByb3AiKX0oe3Byb3ZpZGU6U3RyaW5nLHVzZVZhbHVlOlZ9KSx6PU4uTlVMTCxCPS9cbi9nbSxIPSJcdTAyNzUiLFc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1lJiYoZT16KSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLnBhcmVudD1lLHRoaXMuc291cmNlPW47dmFyIHI9dGhpcy5fcmVjb3Jkcz1uZXcgTWFwO3Iuc2V0KE4se3Rva2VuOk4sZm46UixkZXBzOkQsdmFsdWU6dGhpcyx1c2VOZXc6ITF9KSxyLnNldChQLHt0b2tlbjpQLGZuOlIsZGVwczpELHZhbHVlOnRoaXMsdXNlTmV3OiExfSksZnVuY3Rpb24gdChlLG4pe2lmKG4paWYoKG49UyhuKSlpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXQoZSxuW3JdKTtlbHNle2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXRocm93IEcoIkZ1bmN0aW9uL0NsYXNzIG5vdCBzdXBwb3J0ZWQiLG4pO2lmKCFufHwib2JqZWN0IiE9dHlwZW9mIG58fCFuLnByb3ZpZGUpdGhyb3cgRygiVW5leHBlY3RlZCBwcm92aWRlciIsbik7dmFyIGk9UyhuLnByb3ZpZGUpLG89ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9RCxuPXQuZGVwcztpZihuJiZuLmxlbmd0aCl7ZT1bXTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9NjtpZigodT1TKG5bcl0pKWluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBvPTAsYT11O288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3MgaW5zdGFuY2VvZiBrfHxzPT1rP2l8PTE6cyBpbnN0YW5jZW9mIEl8fHM9PUk/aSY9LTM6cyBpbnN0YW5jZW9mIFR8fHM9PVQ/aSY9LTU6dT1zIGluc3RhbmNlb2YgRT9zLnRva2VuOlMocyl9ZS5wdXNoKHt0b2tlbjp1LG9wdGlvbnM6aX0pfX1lbHNlIGlmKHQudXNlRXhpc3Rpbmcpe3ZhciB1O2U9W3t0b2tlbjp1PVModC51c2VFeGlzdGluZyksb3B0aW9uczo2fV19ZWxzZSBpZighKG58fFUgaW4gdCkpdGhyb3cgRygiJ2RlcHMnIHJlcXVpcmVkIix0KTtyZXR1cm4gZX0odCksbj1SLHI9RCxpPSExLG89Uyh0LnByb3ZpZGUpO2lmKFUgaW4gdClyPXQudXNlVmFsdWU7ZWxzZSBpZih0LnVzZUZhY3Rvcnkpbj10LnVzZUZhY3Rvcnk7ZWxzZSBpZih0LnVzZUV4aXN0aW5nKTtlbHNlIGlmKHQudXNlQ2xhc3MpaT0hMCxuPVModC51c2VDbGFzcyk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbyl0aHJvdyBHKCJTdGF0aWNQcm92aWRlciBkb2VzIG5vdCBoYXZlIFt1c2VWYWx1ZXx1c2VGYWN0b3J5fHVzZUV4aXN0aW5nfHVzZUNsYXNzXSBvciBbcHJvdmlkZV0gaXMgbm90IG5ld2FibGUiLHQpO2k9ITAsbj1vfXJldHVybntkZXBzOmUsZm46bix1c2VOZXc6aSx2YWx1ZTpyfX0obik7aWYoITA9PT1uLm11bHRpKXt2YXIgYT1lLmdldChpKTtpZihhKXtpZihhLmZuIT09Ril0aHJvdyBxKGkpfWVsc2UgZS5zZXQoaSxhPXt0b2tlbjpuLnByb3ZpZGUsZGVwczpbXSx1c2VOZXc6ITEsZm46Rix2YWx1ZTpEfSk7YS5kZXBzLnB1c2goe3Rva2VuOmk9bixvcHRpb25zOjZ9KX12YXIgcz1lLmdldChpKTtpZihzJiZzLmZuPT1GKXRocm93IHEoaSk7ZS5zZXQoaSxvKX19KHIsdCl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49MCk7dmFyIGk9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dHJ5e3JldHVybiBmdW5jdGlvbiB0KGUsbixpLG8sYSxzKXt0cnl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpLG8sYSxzKXt2YXIgdSxsO2lmKCFufHw0JnMpMiZzfHwodT1vLmdldChlLGEsMCkpO2Vsc2V7aWYoKHU9bi52YWx1ZSk9PUwpdGhyb3cgRXJyb3IoSCsiQ2lyY3VsYXIgZGVwZW5kZW5jeSIpO2lmKHU9PT1EKXtuLnZhbHVlPUw7dmFyIGM9bi51c2VOZXcsZj1uLmZuLGg9bi5kZXBzLGQ9RDtpZihoLmxlbmd0aCl7ZD1bXTtmb3IodmFyIHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIG09aFtwXSx5PW0ub3B0aW9ucyxnPTImeT9pLmdldChtLnRva2VuKTp2b2lkIDA7ZC5wdXNoKHQobS50b2tlbixnLGksZ3x8NCZ5P286eiwxJnk/bnVsbDpOLlRIUk9XX0lGX05PVF9GT1VORCwwKSl9fW4udmFsdWU9dT1jP25ldygobD1mKS5iaW5kLmFwcGx5KGwsT2JqZWN0KHIuZCkoW3ZvaWQgMF0sZCkpKTpmLmFwcGx5KHZvaWQgMCxkKX19cmV0dXJuIHV9KGUsbixpLG8sYSxzKX1jYXRjaCh0KXt0aHJvdyB0IGluc3RhbmNlb2YgRXJyb3J8fCh0PW5ldyBFcnJvcih0KSksKHQubmdUZW1wVG9rZW5QYXRoPXQubmdUZW1wVG9rZW5QYXRofHxbXSkudW5zaGlmdChlKSxuJiZuLnZhbHVlPT1MJiYobi52YWx1ZT1EKSx0fX0odCxpLHRoaXMuX3JlY29yZHMsdGhpcy5wYXJlbnQsZSxuKX1jYXRjaChlKXt2YXIgbz1lLm5nVGVtcFRva2VuUGF0aDt0aHJvdyB0W0FdJiZvLnVuc2hpZnQodFtBXSksZS5tZXNzYWdlPVkoIlxuIitlLm1lc3NhZ2Usbyx0aGlzLnNvdXJjZSksZS5uZ1Rva2VuUGF0aD1vLGUubmdUZW1wVG9rZW5QYXRoPW51bGwsZX19LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuX3JlY29yZHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnB1c2goTyhuKSl9KSwiU3RhdGljSW5qZWN0b3JbIit0LmpvaW4oIiwgIikrIl0ifSx0fSgpO2Z1bmN0aW9uIHEodCl7cmV0dXJuIEcoIkNhbm5vdCBtaXggbXVsdGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVycyIsdCl9ZnVuY3Rpb24gWSh0LGUsbil7dm9pZCAwPT09biYmKG49bnVsbCksdD10JiYiXG4iPT09dC5jaGFyQXQoMCkmJnQuY2hhckF0KDEpPT1IP3Quc3Vic3RyKDIpOnQ7dmFyIHI9TyhlKTtpZihlIGluc3RhbmNlb2YgQXJyYXkpcj1lLm1hcChPKS5qb2luKCIgLT4gIik7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciBpPVtdO2Zvcih2YXIgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykpe3ZhciBhPWVbb107aS5wdXNoKG8rIjoiKygic3RyaW5nIj09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6TyhhKSkpfXI9InsiK2kuam9pbigiLCAiKSsifSJ9cmV0dXJuIlN0YXRpY0luamVjdG9yRXJyb3IiKyhuPyIoIituKyIpIjoiIikrIlsiK3IrIl06ICIrdC5yZXBsYWNlKEIsIlxuICAiKX1mdW5jdGlvbiBHKHQsZSl7cmV0dXJuIG5ldyBFcnJvcihZKHQsZSkpfXZhciBRPXZvaWQgMDtmdW5jdGlvbiBLKHQpe3ZhciBlPVE7cmV0dXJuIFE9dCxlfWZ1bmN0aW9uIFoodCxlKXtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1RKXRocm93IG5ldyBFcnJvcigiaW5qZWN0KCkgbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBpbmplY3Rpb24gY29udGV4dCIpO2lmKG51bGw9PT1RKXt2YXIgbj10Lm5nSW5qZWN0YWJsZURlZjtpZihuJiYicm9vdCI9PW4ucHJvdmlkZWRJbilyZXR1cm4gdm9pZCAwPT09bi52YWx1ZT9uLnZhbHVlPW4uZmFjdG9yeSgpOm4udmFsdWU7dGhyb3cgbmV3IEVycm9yKCJJbmplY3RvcjogTk9UX0ZPVU5EIFsiK08odCkrIl0iKX1yZXR1cm4gUS5nZXQodCw4JmU/bnVsbDp2b2lkIDAsZSl9U3RyaW5nO3ZhciBYPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIix0W3QuTmF0aXZlPTFdPSJOYXRpdmUiLHRbdC5Ob25lPTJdPSJOb25lIix0W3QuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLHR9KHt9KSwkPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX0sSj1uZXcgJCgiNi4wLjkiKSx0dD0ibmdEZWJ1Z0NvbnRleHQiLGV0PSJuZ09yaWdpbmFsRXJyb3IiLG50PSJuZ0Vycm9yTG9nZ2VyIjtmdW5jdGlvbiBydCh0KXtyZXR1cm4gdFt0dF19ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHRbZXRdfWZ1bmN0aW9uIG90KHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3QuZXJyb3IuYXBwbHkodCxPYmplY3Qoci5kKShlKSl9dmFyIGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmluZE9yaWdpbmFsRXJyb3IodCksbj10aGlzLl9maW5kQ29udGV4dCh0KSxyPWZ1bmN0aW9uKHQpe3JldHVybiB0W250XXx8b3R9KHQpO3IodGhpcy5fY29uc29sZSwiRVJST1IiLHQpLGUmJnIodGhpcy5fY29uc29sZSwiT1JJR0lOQUwgRVJST1IiLGUpLG4mJnIodGhpcy5fY29uc29sZSwiRVJST1IgQ09OVEVYVCIsbil9LHQucHJvdG90eXBlLl9maW5kQ29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdD9ydCh0KT9ydCh0KTp0aGlzLl9maW5kQ29udGV4dChpdCh0KSk6bnVsbH0sdC5wcm90b3R5cGUuX2ZpbmRPcmlnaW5hbEVycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pdCh0KTtlJiZpdChlKTspZT1pdChlKTtyZXR1cm4gZX0sdH0oKSxzdD1uZXcgYygiVGhlIHByZXNlbmNlIG9mIHRoaXMgdG9rZW4gbWFya3MgYW4gaW5qZWN0b3IgYXMgYmVpbmcgdGhlIHJvb3QgaW5qZWN0b3IuIik7ZnVuY3Rpb24gdXQodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufWZ1bmN0aW9uIGx0KHQpe3JldHVybiEhdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc3Vic2NyaWJlfXZhciBjdD1uZXcgYygiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLmFwcEluaXRzPXQsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe2UucmVzb2x2ZT10LGUucmVqZWN0PW59KX1yZXR1cm4gdC5wcm90b3R5cGUucnVuSW5pdGlhbGl6ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pbml0aWFsaXplZCl7dmFyIGU9W10sbj1mdW5jdGlvbigpe3QuZG9uZT0hMCx0LnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IodmFyIHI9MDtyPHRoaXMuYXBwSW5pdHMubGVuZ3RoO3IrKyl7dmFyIGk9dGhpcy5hcHBJbml0c1tyXSgpO3V0KGkpJiZlLnB1c2goaSl9UHJvbWlzZS5hbGwoZSkudGhlbihmdW5jdGlvbigpe24oKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3QucmVqZWN0KGUpfSksMD09PWUubGVuZ3RoJiZuKCksdGhpcy5pbml0aWFsaXplZD0hMH19LHR9KCksaHQ9bmV3IGMoIkFwcElkIik7ZnVuY3Rpb24gZHQoKXtyZXR1cm4iIitwdCgpK3B0KCkrcHQoKX1mdW5jdGlvbiBwdCgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBtdD1uZXcgYygiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSx5dD1uZXcgYygiUGxhdGZvcm0gSUQiKSxndD1uZXcgYygiYXBwQm9vdHN0cmFwTGlzdGVuZXIiKSx2dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmxvZz1mdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KX0sdC5wcm90b3R5cGUud2Fybj1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4odCl9LHR9KCk7ZnVuY3Rpb24gYnQoKXt0aHJvdyBuZXcgRXJyb3IoIlJ1bnRpbWUgY29tcGlsZXIgaXMgbm90IGxvYWRlZCIpfXZhciBfdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVTeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBc3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmM9ZnVuY3Rpb24odCl7dGhyb3cgYnQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNBc3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jbGVhckNhY2hlRm9yPWZ1bmN0aW9uKHQpe30sdH0oKSx3dD1mdW5jdGlvbigpe30seHQ9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIE90KHQpe3ZhciBlPUVycm9yKCJObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgIitPKHQpKyIuIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/Iik7cmV0dXJuIGVbRXRdPXQsZX12YXIgQ3QsU3QsRXQ9Im5nQ29tcG9uZW50IixrdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3Rocm93IE90KHQpfSx0fSgpLFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5OVUxMPW5ldyBrdCx0fSgpLEl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fcGFyZW50PWUsdGhpcy5fbmdNb2R1bGU9bix0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcDtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTt0aGlzLl9mYWN0b3JpZXMuc2V0KGkuY29tcG9uZW50VHlwZSxpKX19cmV0dXJuIHQucHJvdG90eXBlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7aWYoIWUmJnRoaXMuX3BhcmVudCYmKGU9dGhpcy5fcGFyZW50LnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpKSwhZSl0aHJvdyBPdCh0KTtyZXR1cm4gbmV3IEF0KGUsdGhpcy5fbmdNb2R1bGUpfSx0fSgpLEF0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuZmFjdG9yeT1lLHIubmdNb2R1bGU9bixyLnNlbGVjdG9yPWUuc2VsZWN0b3Isci5jb21wb25lbnRUeXBlPWUuY29tcG9uZW50VHlwZSxyLm5nQ29udGVudFNlbGVjdG9ycz1lLm5nQ29udGVudFNlbGVjdG9ycyxyLmlucHV0cz1lLmlucHV0cyxyLm91dHB1dHM9ZS5vdXRwdXRzLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlKHQsZSxuLHJ8fHRoaXMubmdNb2R1bGUpfSxlfSh4dCksanQ9ZnVuY3Rpb24oKXt9LFB0PWZ1bmN0aW9uKCl7fSxNdD1mdW5jdGlvbigpe3ZhciB0PWcud3RmO3JldHVybiEoIXR8fCEoQ3Q9dC50cmFjZSl8fChTdD1DdC5ldmVudHMsMCkpfSgpO2Z1bmN0aW9uIE50KHQsZSl7cmV0dXJuIG51bGx9dmFyIFJ0PU10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLFN0LmNyZWF0ZVNjb3BlKHQsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE50fSxEdD1NdD9mdW5jdGlvbih0LGUpe3JldHVybiBDdC5sZWF2ZVNjb3BlKHQsZSksZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0sTHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9faXNBc3luYz1lLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUsbixyKXt2YXIgbyxhPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O2UmJiJvYmplY3QiPT10eXBlb2YgZT8obz10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUubmV4dCh0KX0pfTpmdW5jdGlvbih0KXtlLm5leHQodCl9LGUuZXJyb3ImJihhPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5lcnJvcih0KX0pfTpmdW5jdGlvbih0KXtlLmVycm9yKHQpfSksZS5jb21wbGV0ZSYmKHM9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfTpmdW5jdGlvbigpe2UuY29tcGxldGUoKX0pKToobz10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUodCl9KX06ZnVuY3Rpb24odCl7ZSh0KX0sbiYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuKHQpfSl9OmZ1bmN0aW9uKHQpe24odCl9KSxyJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gcigpfSl9OmZ1bmN0aW9uKCl7cigpfSkpO3ZhciB1PXQucHJvdG90eXBlLnN1YnNjcmliZS5jYWxsKHRoaXMsbyxhLHMpO3JldHVybiBlIGluc3RhbmNlb2YgaS5hJiZlLmFkZCh1KSx1fSxlfShvLmEpLEZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZSxuPXQuZW5hYmxlTG9uZ1N0YWNrVHJhY2Uscj12b2lkIDAhPT1uJiZuO2lmKHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgTHQoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgTHQoITEpLHRoaXMub25TdGFibGU9bmV3IEx0KCExKSx0aGlzLm9uRXJyb3I9bmV3IEx0KCExKSwidW5kZWZpbmVkIj09dHlwZW9mIFpvbmUpdGhyb3cgbmV3IEVycm9yKCJJbiB0aGlzIGNvbmZpZ3VyYXRpb24gQW5ndWxhciByZXF1aXJlcyBab25lLmpzIik7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpLHRoaXMuX25lc3Rpbmc9MCx0aGlzLl9vdXRlcj10aGlzLl9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS53dGZab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsoWm9uZS53dGZab25lU3BlYykpLFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksciYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSwoZT10aGlzKS5faW5uZXI9ZS5faW5uZXIuZm9yayh7bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOmZ1bmN0aW9uKHQsbixyLGksbyxhKXt0cnl7cmV0dXJuIEJ0KGUpLHQuaW52b2tlVGFzayhyLGksbyxhKX1maW5hbGx5e0h0KGUpfX0sb25JbnZva2U6ZnVuY3Rpb24odCxuLHIsaSxvLGEscyl7dHJ5e3JldHVybiBCdChlKSx0Lmludm9rZShyLGksbyxhLHMpfWZpbmFsbHl7SHQoZSl9fSxvbkhhc1Rhc2s6ZnVuY3Rpb24odCxuLHIsaSl7dC5oYXNUYXNrKHIsaSksbj09PXImJigibWljcm9UYXNrIj09aS5jaGFuZ2U/KGUuaGFzUGVuZGluZ01pY3JvdGFza3M9aS5taWNyb1Rhc2ssenQoZSkpOiJtYWNyb1Rhc2siPT1pLmNoYW5nZSYmKGUuaGFzUGVuZGluZ01hY3JvdGFza3M9aS5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihyLGkpLGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkVycm9yLmVtaXQoaSl9KSwhMX19KX1yZXR1cm4gdC5pc0luQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4hMD09PVpvbmUuY3VycmVudC5nZXQoImlzQW5ndWxhclpvbmUiKX0sdC5hc3NlcnRJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYoIXQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0byBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyBub3QhIil9LHQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe2lmKHQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0byBub3QgYmUgaW4gQW5ndWxhciBab25lLCBidXQgaXQgaXMhIil9LHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bih0LGUsbil9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5faW5uZXIsbz1pLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIityLHQsVXQsVnQsVnQpO3RyeXtyZXR1cm4gaS5ydW5UYXNrKG8sZSxuKX1maW5hbGx5e2kuY2FuY2VsVGFzayhvKX19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuT3V0c2lkZUFuZ3VsYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX0sdH0oKTtmdW5jdGlvbiBWdCgpe312YXIgVXQ9e307ZnVuY3Rpb24genQodCl7aWYoMD09dC5fbmVzdGluZyYmIXQuaGFzUGVuZGluZ01pY3JvdGFza3MmJiF0LmlzU3RhYmxlKXRyeXt0Ll9uZXN0aW5nKyssdC5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCl9ZmluYWxseXtpZih0Ll9uZXN0aW5nLS0sIXQuaGFzUGVuZGluZ01pY3JvdGFza3MpdHJ5e3QucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5vblN0YWJsZS5lbWl0KG51bGwpfSl9ZmluYWxseXt0LmlzU3RhYmxlPSEwfX19ZnVuY3Rpb24gQnQodCl7dC5fbmVzdGluZysrLHQuaXNTdGFibGUmJih0LmlzU3RhYmxlPSExLHQub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBIdCh0KXt0Ll9uZXN0aW5nLS0senQodCl9dmFyIFd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgTHQsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBMdCx0aGlzLm9uU3RhYmxlPW5ldyBMdCx0aGlzLm9uRXJyb3I9bmV3IEx0fXJldHVybiB0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHR9KCkscXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fbmdab25lPXQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLHQucnVuKGZ1bmN0aW9uKCl7ZS50YXNrVHJhY2tpbmdab25lPVpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfXJldHVybiB0LnByb3RvdHlwZS5fd2F0Y2hBbmd1bGFyRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXt0Ll9kaWRXb3JrPSEwLHQuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7RnQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHcoZnVuY3Rpb24oKXt0Ll9pc1pvbmVTdGFibGU9ITAsdC5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX0sdC5wcm90b3R5cGUuaW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9LHQucHJvdG90eXBlLmlzU3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc30sdC5wcm90b3R5cGUuX3J1bkNhbGxiYWNrc0lmUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuaXNTdGFibGUoKSl3KGZ1bmN0aW9uKCl7Zm9yKDswIT09dC5fY2FsbGJhY2tzLmxlbmd0aDspe3ZhciBlPXQuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLGUuZG9uZUNiKHQuX2RpZFdvcmspfXQuX2RpZFdvcms9ITF9KTtlbHNle3ZhciBlPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQudXBkYXRlQ2J8fCF0LnVwZGF0ZUNiKGUpfHwoY2xlYXJUaW1lb3V0KHQudGltZW91dElkKSwhMSl9KSx0aGlzLl9kaWRXb3JrPSEwfX0sdC5wcm90b3R5cGUuZ2V0UGVuZGluZ1Rhc2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LnNvdXJjZSxpc1BlcmlvZGljOnQuZGF0YS5pc1BlcmlvZGljLGRlbGF5OnQuZGF0YS5kZWxheSxjcmVhdGlvbkxvY2F0aW9uOnQuY3JlYXRpb25Mb2NhdGlvbix4aHI6dC5kYXRhLnRhcmdldH19KTpbXX0sdC5wcm90b3R5cGUuYWRkQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT0tMTtlJiZlPjAmJihpPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLl9jYWxsYmFja3M9ci5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50aW1lb3V0SWQhPT1pfSksdChyLl9kaWRXb3JrLHIuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxlKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjp0LHRpbWVvdXRJZDppLHVwZGF0ZUNiOm59KX0sdC5wcm90b3R5cGUud2hlblN0YWJsZT1mdW5jdGlvbih0LGUsbil7aWYobiYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvZGlzdC90YXNrLXRyYWNraW5nLmpzIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayh0LGUsbiksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuZmluZFByb3ZpZGVycz1mdW5jdGlvbih0LGUsbil7cmV0dXJuW119LHR9KCksWXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXAsS3QuYWRkVG9XaW5kb3codGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyQXBwbGljYXRpb249ZnVuY3Rpb24odCxlKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KHQsZSl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHQpfSx0LnByb3RvdHlwZS51bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9LHQucHJvdG90eXBlLmdldFRlc3RhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KHQpfHxudWxsfSx0LnByb3RvdHlwZS5nZXRBbGxUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsUm9vdEVsZW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMCksS3QuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsdCxlKX0sdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfSx0fSgpO2Z1bmN0aW9uIEd0KHQpe0t0PXR9dmFyIFF0LEt0PW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnVsbH0sdH0oKSksWnQ9ITAsWHQ9ITEsJHQ9bmV3IGMoIkFsbG93TXVsdGlwbGVUb2tlbiIpO2Z1bmN0aW9uIEp0KCl7aWYoWHQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTtadD0hMX1mdW5jdGlvbiB0ZSgpe3JldHVybiBYdD0hMCxadH12YXIgZWU9ZnVuY3Rpb24odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnRva2VuPWV9O2Z1bmN0aW9uIG5lKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1bXSk7dmFyIHI9IlBsYXRmb3JtOiAiK2UsaT1uZXcgYyhyKTtyZXR1cm4gZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBvPXJlKCk7aWYoIW98fG8uaW5qZWN0b3IuZ2V0KCR0LCExKSlpZih0KXQobi5jb25jYXQoZSkuY29uY2F0KHtwcm92aWRlOmksdXNlVmFsdWU6ITB9KSk7ZWxzZXt2YXIgYT1uLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0pOyFmdW5jdGlvbih0KXtpZihRdCYmIVF0LmRlc3Ryb3llZCYmIVF0LmluamVjdG9yLmdldCgkdCwhMSkpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBjYW4gYmUgb25seSBvbmUgcGxhdGZvcm0uIERlc3Ryb3kgdGhlIHByZXZpb3VzIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLiIpO1F0PXQuZ2V0KGllKTt2YXIgZT10LmdldChtdCxudWxsKTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfShOLmNyZWF0ZSh7cHJvdmlkZXJzOmEsbmFtZTpyfSkpfXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1yZSgpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gcGxhdGZvcm0gZXhpc3RzISIpO2lmKCFlLmluamVjdG9yLmdldCh0LG51bGwpKXRocm93IG5ldyBFcnJvcigiQSBwbGF0Zm9ybSB3aXRoIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY3JlYXRlZC4gUGxlYXNlIGRlc3Ryb3kgaXQgZmlyc3QuIik7cmV0dXJuIGV9KGkpfX1mdW5jdGlvbiByZSgpe3JldHVybiBRdCYmIVF0LmRlc3Ryb3llZD9RdDpudWxsfXZhciBpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5faW5qZWN0b3I9dCx0aGlzLl9tb2R1bGVzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExfXJldHVybiB0LnByb3RvdHlwZS5ib290c3RyYXBNb2R1bGVGYWN0b3J5PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLGk9Im5vb3AiPT09KG49ZT9lLm5nWm9uZTp2b2lkIDApP25ldyBXdDooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBGdCh7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dGUoKX0pLG89W3twcm92aWRlOkZ0LHVzZVZhbHVlOml9XTtyZXR1cm4gaS5ydW4oZnVuY3Rpb24oKXt2YXIgZT1OLmNyZWF0ZSh7cHJvdmlkZXJzOm8scGFyZW50OnIuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG49dC5jcmVhdGUoZSksYT1uLmluamVjdG9yLmdldChhdCxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gbi5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gc2Uoci5fbW9kdWxlcyxuKX0pLGkucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXthLmhhbmRsZUVycm9yKHQpfX0pfSksZnVuY3Rpb24odCxlLGkpe3RyeXt2YXIgbz0oKGE9bi5pbmplY3Rvci5nZXQoZnQpKS5ydW5Jbml0aWFsaXplcnMoKSxhLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gci5fbW9kdWxlRG9Cb290c3RyYXAobiksbn0pKTtyZXR1cm4gdXQobyk/by5jYXRjaChmdW5jdGlvbihuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufSk6b31jYXRjaChuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufXZhciBhfShhLGkpfSl9LHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciByPXRoaXMuaW5qZWN0b3IuZ2V0KHd0KSxpPW9lKHt9LGUpO3JldHVybiByLmNyZWF0ZUNvbXBpbGVyKFtpXSkuY29tcGlsZU1vZHVsZUFzeW5jKHQpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIG4uYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSh0LGkpfSl9LHQucHJvdG90eXBlLl9tb2R1bGVEb0Jvb3RzdHJhcD1mdW5jdGlvbih0KXt2YXIgZT10LmluamVjdG9yLmdldChhZSk7aWYodC5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCl0Ll9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuYm9vdHN0cmFwKHQpfSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcigiVGhlIG1vZHVsZSAiK08odC5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrJyB3YXMgYm9vdHN0cmFwcGVkLCBidXQgaXQgZG9lcyBub3QgZGVjbGFyZSAiQE5nTW9kdWxlLmJvb3RzdHJhcCIgY29tcG9uZW50cyBub3IgYSAibmdEb0Jvb3RzdHJhcCIgbWV0aG9kLiBQbGVhc2UgZGVmaW5lIG9uZSBvZiB0aGVzZS4nKTt0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZSl9dGhpcy5fbW9kdWxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQhIik7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITB9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIG9lKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5yZWR1Y2Uob2UsdCk6T2JqZWN0KHIuYSkoe30sdCxlKX12YXIgYWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvKXt2YXIgbD10aGlzO3RoaXMuX3pvbmU9dCx0aGlzLl9jb25zb2xlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9leGNlcHRpb25IYW5kbGVyPXIsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWksdGhpcy5faW5pdFN0YXR1cz1vLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl92aWV3cz1bXSx0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPXRlKCksdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe2wuX3pvbmUucnVuKGZ1bmN0aW9uKCl7bC50aWNrKCl9KX19KTt2YXIgYz1uZXcgYS5hKGZ1bmN0aW9uKHQpe2wuX3N0YWJsZT1sLl96b25lLmlzU3RhYmxlJiYhbC5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWwuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsbC5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dChsLl9zdGFibGUpLHQuY29tcGxldGUoKX0pfSksZj1uZXcgYS5hKGZ1bmN0aW9uKHQpe3ZhciBlO2wuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlPWwuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7RnQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHcoZnVuY3Rpb24oKXtsLl9zdGFibGV8fGwuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N8fGwuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3N8fChsLl9zdGFibGU9ITAsdC5uZXh0KCEwKSl9KX0pfSk7dmFyIG49bC5fem9uZS5vblVuc3RhYmxlLnN1YnNjcmliZShmdW5jdGlvbigpe0Z0LmFzc2VydEluQW5ndWxhclpvbmUoKSxsLl9zdGFibGUmJihsLl9zdGFibGU9ITEsbC5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dCghMSl9KSl9KTtyZXR1cm4gZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksbi51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9T2JqZWN0KHMuYSkoYyxmLnBpcGUoT2JqZWN0KHUuYSkoKSkpfXJldHVybiB0LnByb3RvdHlwZS5ib290c3RyYXA9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXM7aWYoIXRoaXMuX2luaXRTdGF0dXMuZG9uZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBib290c3RyYXAgYXMgdGhlcmUgYXJlIHN0aWxsIGFzeW5jaHJvbm91cyBpbml0aWFsaXplcnMgcnVubmluZy4gQm9vdHN0cmFwIGNvbXBvbmVudHMgaW4gdGhlIGBuZ0RvQm9vdHN0cmFwYCBtZXRob2Qgb2YgdGhlIHJvb3QgbW9kdWxlLiIpO249dCBpbnN0YW5jZW9mIHh0P3Q6dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpLHRoaXMuY29tcG9uZW50VHlwZXMucHVzaChuLmNvbXBvbmVudFR5cGUpO3ZhciBpPW4gaW5zdGFuY2VvZiBBdD9udWxsOnRoaXMuX2luamVjdG9yLmdldChqdCksbz1uLmNyZWF0ZShOLk5VTEwsW10sZXx8bi5zZWxlY3RvcixpKTtvLm9uRGVzdHJveShmdW5jdGlvbigpe3IuX3VubG9hZENvbXBvbmVudChvKX0pO3ZhciBhPW8uaW5qZWN0b3IuZ2V0KHF0LG51bGwpO3JldHVybiBhJiZvLmluamVjdG9yLmdldChZdCkucmVnaXN0ZXJBcHBsaWNhdGlvbihvLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5fbG9hZENvbXBvbmVudChvKSx0ZSgpJiZ0aGlzLl9jb25zb2xlLmxvZygiQW5ndWxhciBpcyBydW5uaW5nIGluIHRoZSBkZXZlbG9wbWVudCBtb2RlLiBDYWxsIGVuYWJsZVByb2RNb2RlKCkgdG8gZW5hYmxlIHRoZSBwcm9kdWN0aW9uIG1vZGUuIiksb30sdC5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEVycm9yKCJBcHBsaWNhdGlvblJlZi50aWNrIGlzIGNhbGxlZCByZWN1cnNpdmVseSIpO3ZhciBuPXQuX3RpY2tTY29wZSgpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMCx0aGlzLl92aWV3cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRldGVjdENoYW5nZXMoKX0pLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXMmJnRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tOb0NoYW5nZXMoKX0pfWNhdGNoKHQpe3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcih0KX0pfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITEsRHQobil9fSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7dGhpcy5fdmlld3MucHVzaChlKSxlLmF0dGFjaFRvQXBwUmVmKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7c2UodGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9LHQucHJvdG90eXBlLl9sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuYXR0YWNoVmlldyh0Lmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaCh0KSx0aGlzLl9pbmplY3Rvci5nZXQoZ3QsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0sdC5wcm90b3R5cGUuX3VubG9hZENvbXBvbmVudD1mdW5jdGlvbih0KXt0aGlzLmRldGFjaFZpZXcodC5ob3N0Vmlldyksc2UodGhpcy5jb21wb25lbnRzLHQpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2aWV3Q291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQuX3RpY2tTY29wZT1SdCgiQXBwbGljYXRpb25SZWYjdGljaygpIiksdH0oKTtmdW5jdGlvbiBzZSh0LGUpe3ZhciBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfXZhciB1ZT1mdW5jdGlvbigpe30sbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsdH0oe30pLGNlPWZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRWxlbWVudD10fSxmZT1mdW5jdGlvbigpe30saGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9yZXN1bHRzPVtdLHRoaXMuY2hhbmdlcz1uZXcgTHQsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdC5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcCh0KX0sdC5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcih0KX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfSx0LnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UodCxlKX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzLmZvckVhY2godCl9LHQucHJvdG90eXBlLnNvbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX0sdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9LHQucHJvdG90eXBlW18oKV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tfKCldKCl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVzdWx0cz1mdW5jdGlvbiB0KGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLG4pe3ZhciByPUFycmF5LmlzQXJyYXkobik/dChuKTpuO3JldHVybiBlLmNvbmNhdChyKX0sW10pfSh0KSx0aGlzLmRpcnR5PSExLHRoaXMubGVuZ3RoPXRoaXMuX3Jlc3VsdHMubGVuZ3RoLHRoaXMubGFzdD10aGlzLl9yZXN1bHRzW3RoaXMubGVuZ3RoLTFdLHRoaXMuZmlyc3Q9dGhpcy5fcmVzdWx0c1swXX0sdC5wcm90b3R5cGUubm90aWZ5T25DaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VzLmVtaXQodGhpcyl9LHQucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfSx0fSgpLGRlPWZ1bmN0aW9uKCl7fSxwZT17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifSxtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jb21waWxlcj10LHRoaXMuX2NvbmZpZz1lfHxwZX1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29tcGlsZXIgaW5zdGFuY2VvZiBfdD90aGlzLmxvYWRGYWN0b3J5KHQpOnRoaXMubG9hZEFuZENvbXBpbGUodCl9LHQucHJvdG90eXBlLmxvYWRBbmRDb21waWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1PYmplY3Qoci5jKSh0LnNwbGl0KCIjIiksMiksbz1pWzBdLGE9aVsxXTtyZXR1cm4gdm9pZCAwPT09YSYmKGE9ImRlZmF1bHQiKSxuKCJjcm5kIikobykudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdFthXX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHllKHQsbyxhKX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KX0pfSx0LnByb3RvdHlwZS5sb2FkRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qoci5jKSh0LnNwbGl0KCIjIiksMiksaT1lWzBdLG89ZVsxXSxhPSJOZ0ZhY3RvcnkiO3JldHVybiB2b2lkIDA9PT1vJiYobz0iZGVmYXVsdCIsYT0iIiksbigiY3JuZCIpKHRoaXMuX2NvbmZpZy5mYWN0b3J5UGF0aFByZWZpeCtpK3RoaXMuX2NvbmZpZy5mYWN0b3J5UGF0aFN1ZmZpeCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdFtvK2FdfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4geWUodCxpLG8pfSl9LHR9KCk7ZnVuY3Rpb24geWUodCxlLG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgJyIrbisiJyBpbiAnIitlKyInIik7cmV0dXJuIHR9dmFyIGdlPWZ1bmN0aW9uKCl7fSx2ZT1mdW5jdGlvbigpe30sYmU9ZnVuY3Rpb24oKXt9LF9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fZGVidWdDb250ZXh0PW4sdGhpcy5uYXRpdmVOb2RlPXQsZSYmZSBpbnN0YW5jZW9mIHdlP2UuYWRkQ2hpbGQodGhpcyk6dGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmxpc3RlbmVycz1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQuaW5qZWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRJbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQuY29tcG9uZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LnJlZmVyZW5jZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucHJvdmlkZXJUb2tlbnN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSx3ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGkucHJvcGVydGllcz17fSxpLmF0dHJpYnV0ZXM9e30saS5jbGFzc2VzPXt9LGkuc3R5bGVzPXt9LGkuY2hpbGROb2Rlcz1bXSxpLm5hdGl2ZUVsZW1lbnQ9ZSxpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKHQpe3QmJih0aGlzLmNoaWxkTm9kZXMucHVzaCh0KSx0LnBhcmVudD10aGlzKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTEhPT1lJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGUsMSkpfSxlLnByb3RvdHlwZS5pbnNlcnRDaGlsZHJlbkFmdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLG89dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTEhPT1vJiYoKG49dGhpcy5jaGlsZE5vZGVzKS5zcGxpY2UuYXBwbHkobixPYmplY3Qoci5kKShbbysxLDBdLGUpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZUNoaWxkKHQpLHQucGFyZW50PWl9KSl9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xPT09bj90aGlzLmFkZENoaWxkKGUpOihlLnBhcmVudCYmZS5wYXJlbnQucmVtb3ZlQ2hpbGQoZSksZS5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKG4sMCxlKSl9LGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5QWxsKHQpWzBdfHxudWxsfSxlLnByb3RvdHlwZS5xdWVyeUFsbD1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4geGUodGhpcyx0LGUpLGV9LGUucHJvdG90eXBlLnF1ZXJ5QWxsTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIE9lKHRoaXMsdCxlKSxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudHJpZ2dlckV2ZW50SGFuZGxlcj1mdW5jdGlvbih0LGUpe3RoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obil7bi5uYW1lPT10JiZuLmNhbGxiYWNrKGUpfSl9LGV9KF9lKTtmdW5jdGlvbiB4ZSh0LGUsbil7dC5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbnN0YW5jZW9mIHdlJiYoZSh0KSYmbi5wdXNoKHQpLHhlKHQsZSxuKSl9KX1mdW5jdGlvbiBPZSh0LGUsbil7dCBpbnN0YW5jZW9mIHdlJiZ0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtlKHQpJiZuLnB1c2godCksdCBpbnN0YW5jZW9mIHdlJiZPZSh0LGUsbil9KX12YXIgQ2U9bmV3IE1hcDtmdW5jdGlvbiBTZSh0KXtyZXR1cm4gQ2UuZ2V0KHQpfHxudWxsfWZ1bmN0aW9uIEVlKHQpe0NlLnNldCh0Lm5hdGl2ZU5vZGUsdCl9ZnVuY3Rpb24ga2UodCxlKXt2YXIgbj1BZSh0KSxyPUFlKGUpO3JldHVybiBuJiZyP2Z1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9dFtfKCldKCksaT1lW18oKV0oKTs7KXt2YXIgbz1yLm5leHQoKSxhPWkubmV4dCgpO2lmKG8uZG9uZSYmYS5kb25lKXJldHVybiEwO2lmKG8uZG9uZXx8YS5kb25lKXJldHVybiExO2lmKCFuKG8udmFsdWUsYS52YWx1ZSkpcmV0dXJuITF9fSh0LGUsa2UpOiEobnx8IXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHJ8fCFlfHwib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXx8eCh0LGUpfXZhciBUZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy53cmFwcGVkPXR9cmV0dXJuIHQud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHQudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmlzV3JhcHBlZChlKT9lLndyYXBwZWQ6ZX0sdC5pc1dyYXBwZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fSx0fSgpLEllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59cmV0dXJuIHQucHJvdG90eXBlLmlzRmlyc3RDaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX0sdH0oKTtmdW5jdGlvbiBBZSh0KXtyZXR1cm4hIWplKHQpJiYoQXJyYXkuaXNBcnJheSh0KXx8ISh0IGluc3RhbmNlb2YgTWFwKSYmXygpaW4gdCl9ZnVuY3Rpb24gamUodCl7cmV0dXJuIG51bGwhPT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIHR8fCJvYmplY3QiPT10eXBlb2YgdCl9dmFyIFBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIEFlKHQpfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOZSh0KX0sdH0oKSxNZT1mdW5jdGlvbih0LGUpe3JldHVybiBlfSxOZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPXR8fE1lfXJldHVybiB0LnByb3RvdHlwZS5mb3JFYWNoSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hPcGVyYXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2l0SGVhZCxuPXRoaXMuX3JlbW92YWxzSGVhZCxyPTAsaT1udWxsO2V8fG47KXt2YXIgbz0hbnx8ZSYmZS5jdXJyZW50SW5kZXg8RmUobixyLGkpP2U6bixhPUZlKG8scixpKSxzPW8uY3VycmVudEluZGV4O2lmKG89PT1uKXItLSxuPW4uX25leHRSZW1vdmVkO2Vsc2UgaWYoZT1lLl9uZXh0LG51bGw9PW8ucHJldmlvdXNJbmRleClyKys7ZWxzZXtpfHwoaT1bXSk7dmFyIHU9YS1yLGw9cy1yO2lmKHUhPWwpe2Zvcih2YXIgYz0wO2M8dTtjKyspe3ZhciBmPWM8aS5sZW5ndGg/aVtjXTppW2NdPTAsaD1mK2M7bDw9aCYmaDx1JiYoaVtjXT1mKzEpfWlbby5wcmV2aW91c0luZGV4XT1sLXV9fWEhPT1zJiZ0KG8sYSxzKX19LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hNb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dE1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQmJih0PVtdKSwhQWUodCkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB0cnlpbmcgdG8gZGlmZiAnIitPKHQpKyInLiBPbmx5IGFycmF5cyBhbmQgaXRlcmFibGVzIGFyZSBhbGxvd2VkIik7cmV0dXJuIHRoaXMuY2hlY2sodCk/dGhpczpudWxsfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fcmVzZXQoKTt2YXIgbixyLGksbz10aGlzLl9pdEhlYWQsYT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IodmFyIHM9MDtzPHRoaXMubGVuZ3RoO3MrKylpPXRoaXMuX3RyYWNrQnlGbihzLHI9dFtzXSksbnVsbCE9PW8mJngoby50cmFja0J5SWQsaSk/KGEmJihvPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8scixpLHMpKSx4KG8uaXRlbSxyKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobyxyKSk6KG89dGhpcy5fbWlzbWF0Y2gobyxyLGkscyksYT0hMCksbz1vLl9uZXh0fWVsc2Ugbj0wLGZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyllKHRbbl0pO2Vsc2UgZm9yKHZhciByPXRbXygpXSgpLGk9dm9pZCAwOyEoaT1yLm5leHQoKSkuZG9uZTspZShpLnZhbHVlKX0odCxmdW5jdGlvbih0KXtpPWUuX3RyYWNrQnlGbihuLHQpLG51bGwhPT1vJiZ4KG8udHJhY2tCeUlkLGkpPyhhJiYobz1lLl92ZXJpZnlSZWluc2VydGlvbihvLHQsaSxuKSkseChvLml0ZW0sdCl8fGUuX2FkZElkZW50aXR5Q2hhbmdlKG8sdCkpOihvPWUuX21pc21hdGNoKG8sdCxpLG4pLGE9ITApLG89by5fbmV4dCxuKyt9KSx0aGlzLmxlbmd0aD1uO3JldHVybiB0aGlzLl90cnVuY2F0ZShvKSx0aGlzLmNvbGxlY3Rpb249dCx0aGlzLmlzRGlydHl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX21vdmVzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZHx8bnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDAsZT12b2lkIDA7Zm9yKHQ9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PXQ7dD1lKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleCxlPXQuX25leHRNb3ZlZDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX0sdC5wcm90b3R5cGUuX21pc21hdGNoPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpO3JldHVybiBudWxsPT09dD9pPXRoaXMuX2l0VGFpbDooaT10Ll9wcmV2LHRoaXMuX3JlbW92ZSh0KSksbnVsbCE9PSh0PW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQobixyKSk/KHgodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LGkscikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpKT8oeCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LGkscikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IFJlKGUsbiksaSxyKSx0fSx0LnByb3RvdHlwZS5fdmVyaWZ5UmVpbnNlcnRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKTtyZXR1cm4gbnVsbCE9PWk/dD10aGlzLl9yZWluc2VydEFmdGVyKGksdC5fcHJldixyKTp0LmN1cnJlbnRJbmRleCE9ciYmKHQuY3VycmVudEluZGV4PXIsdGhpcy5fYWRkVG9Nb3Zlcyh0LHIpKSx0fSx0LnByb3RvdHlwZS5fdHJ1bmNhdGU9ZnVuY3Rpb24odCl7Zm9yKDtudWxsIT09dDspe3ZhciBlPXQuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpLHQ9ZX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX0sdC5wcm90b3R5cGUuX3JlaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIHI9dC5fcHJldlJlbW92ZWQsaT10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPWk6ci5fbmV4dFJlbW92ZWQ9aSxudWxsPT09aT90aGlzLl9yZW1vdmFsc1RhaWw9cjppLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX21vdmVBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3VubGluayh0KSx0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zlcyh0LG4pLHR9LHQucHJvdG90eXBlLl9hZGRBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fSx0LnByb3RvdHlwZS5faW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBMZSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bix0fSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSl9LHQucHJvdG90eXBlLl91bmxpbms9ZnVuY3Rpb24odCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHQpO3ZhciBlPXQuX3ByZXYsbj10Ll9uZXh0O3JldHVybiBudWxsPT09ZT90aGlzLl9pdEhlYWQ9bjplLl9uZXh0PW4sbnVsbD09PW4/dGhpcy5faXRUYWlsPWU6bi5fcHJldj1lLHR9LHQucHJvdG90eXBlLl9hZGRUb01vdmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWU/dDoodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNIZWFkPXQ6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9dCx0KX0sdC5wcm90b3R5cGUuX2FkZFRvUmVtb3ZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IExlKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fSx0LnByb3RvdHlwZS5fYWRkSWRlbnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH0sdH0oKSxSZT1mdW5jdGlvbih0LGUpe3RoaXMuaXRlbT10LHRoaXMudHJhY2tCeUlkPWUsdGhpcy5jdXJyZW50SW5kZXg9bnVsbCx0aGlzLnByZXZpb3VzSW5kZXg9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXZEdXA9bnVsbCx0aGlzLl9uZXh0RHVwPW51bGwsdGhpcy5fcHJldlJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRNb3ZlZD1udWxsLHRoaXMuX25leHRJZGVudGl0eUNoYW5nZT1udWxsfSxEZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfXJldHVybiB0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD10LHQuX25leHREdXA9bnVsbCx0Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPXQsdC5fcHJldkR1cD10aGlzLl90YWlsLHQuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPXQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtmb3Iobj10aGlzLl9oZWFkO251bGwhPT1uO249bi5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PW4uY3VycmVudEluZGV4KSYmeChuLnRyYWNrQnlJZCx0KSlyZXR1cm4gbjtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByZXZEdXAsbj10Ll9uZXh0RHVwO3JldHVybiBudWxsPT09ZT90aGlzLl9oZWFkPW46ZS5fbmV4dER1cD1uLG51bGw9PT1uP3RoaXMuX3RhaWw9ZTpuLl9wcmV2RHVwPWUsbnVsbD09PXRoaXMuX2hlYWR9LHR9KCksTGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5tYXA9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkLG49dGhpcy5tYXAuZ2V0KGUpO258fChuPW5ldyBEZSx0aGlzLm1hcC5zZXQoZSxuKSksbi5hZGQodCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gbj9uLmdldCh0LGUpOm51bGx9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10LnRyYWNrQnlJZDtyZXR1cm4gdGhpcy5tYXAuZ2V0KGUpLnJlbW92ZSh0KSYmdGhpcy5tYXAuZGVsZXRlKGUpLHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNFbXB0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwLmNsZWFyKCl9LHR9KCk7ZnVuY3Rpb24gRmUodCxlLG4pe3ZhciByPXQucHJldmlvdXNJbmRleDtpZihudWxsPT09cilyZXR1cm4gcjt2YXIgaT0wO3JldHVybiBuJiZyPG4ubGVuZ3RoJiYoaT1uW3JdKSxyK2UraX12YXIgVmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8amUodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVWV9LHR9KCksVWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5mb3JFYWNoSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9tYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUHJldmlvdXNJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQ2hhbmdlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0Q2hhbmdlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQWRkZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFJlbW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmRpZmY9ZnVuY3Rpb24odCl7aWYodCl7aWYoISh0IGluc3RhbmNlb2YgTWFwfHxqZSh0KSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB0cnlpbmcgdG8gZGlmZiAnIitPKHQpKyInLiBPbmx5IG1hcHMgYW5kIG9iamVjdHMgYXJlIGFsbG93ZWQiKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuPXRoaXMuX21hcEhlYWQ7aWYodGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9mb3JFYWNoKHQsZnVuY3Rpb24odCxyKXtpZihuJiZuLmtleT09PXIpZS5fbWF5YmVBZGRUb0NoYW5nZXMobix0KSxlLl9hcHBlbmRBZnRlcj1uLG49bi5fbmV4dDtlbHNle3ZhciBpPWUuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KHIsdCk7bj1lLl9pbnNlcnRCZWZvcmVPckFwcGVuZChuLGkpfX0pLG4pe24uX3ByZXYmJihuLl9wcmV2Ll9uZXh0PW51bGwpLHRoaXMuX3JlbW92YWxzSGVhZD1uO2Zvcih2YXIgcj1uO251bGwhPT1yO3I9ci5fbmV4dFJlbW92ZWQpcj09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPW51bGwpLHRoaXMuX3JlY29yZHMuZGVsZXRlKHIua2V5KSxyLl9uZXh0UmVtb3ZlZD1yLl9uZXh0LHIucHJldmlvdXNWYWx1ZT1yLmN1cnJlbnRWYWx1ZSxyLmN1cnJlbnRWYWx1ZT1udWxsLHIuX3ByZXY9bnVsbCxyLl9uZXh0PW51bGx9cmV0dXJuIHRoaXMuX2NoYW5nZXNUYWlsJiYodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPW51bGwpLHRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksdGhpcy5pc0RpcnR5fSx0LnByb3RvdHlwZS5faW5zZXJ0QmVmb3JlT3JBcHBlbmQ9ZnVuY3Rpb24odCxlKXtpZih0KXt2YXIgbj10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1uLHQuX3ByZXY9ZSxuJiYobi5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfSx0LnByb3RvdHlwZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXk9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7dmFyIG49dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMobixlKTt2YXIgcj1uLl9wcmV2LGk9bi5fbmV4dDtyZXR1cm4gciYmKHIuX25leHQ9aSksaSYmKGkuX3ByZXY9ciksbi5fbmV4dD1udWxsLG4uX3ByZXY9bnVsbCxufXZhciBvPW5ldyB6ZSh0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxvKSxvLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKG8pLG99LHQucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2lmKHRoaXMuaXNEaXJ0eSl7dmFyIHQ9dm9pZCAwO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX0sdC5wcm90b3R5cGUuX21heWJlQWRkVG9DaGFuZ2VzPWZ1bmN0aW9uKHQsZSl7eChlLHQuY3VycmVudFZhbHVlKXx8KHQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZSx0LmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9hZGRUb0FkZGl0aW9ucz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX0sdC5wcm90b3R5cGUuX2FkZFRvQ2hhbmdlcz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9LHQucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dCBpbnN0YW5jZW9mIE1hcD90LmZvckVhY2goZSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZSh0W25dLG4pfSl9LHR9KCksemU9ZnVuY3Rpb24odCl7dGhpcy5rZXk9dCx0aGlzLnByZXZpb3VzVmFsdWU9bnVsbCx0aGlzLmN1cnJlbnRWYWx1ZT1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0Q2hhbmdlZD1udWxsfSxCZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5mYWN0b3JpZXM9dH1yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24oZSxuKXtpZihudWxsIT1uKXt2YXIgcj1uLmZhY3Rvcmllcy5zbGljZSgpO2U9ZS5jb25jYXQocil9cmV0dXJuIG5ldyB0KGUpfSx0LmV4dGVuZD1mdW5jdGlvbihlKXtyZXR1cm57cHJvdmlkZTp0LHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZXh0ZW5kIEl0ZXJhYmxlRGlmZmVycyB3aXRob3V0IGEgcGFyZW50IGluamVjdG9yIik7cmV0dXJuIHQuY3JlYXRlKGUsbil9LGRlcHM6W1t0LG5ldyBJLG5ldyBrXV19fSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5mYWN0b3JpZXMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdXBwb3J0cyh0KX0pO2lmKG51bGwhPW4pcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIit0KyInIG9mIHR5cGUgJyIrKChlPXQpLm5hbWV8fHR5cGVvZiBlKSsiJyIpfSx0Lm5nSW5qZWN0YWJsZURlZj1sKHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KFtuZXcgUGVdKX19KSx0fSgpLEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgS2V5VmFsdWVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IEksbmV3IGtdXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mYWN0b3JpZXMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdXBwb3J0cyh0KX0pO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIit0KyInIil9LHR9KCksV2U9W25ldyBWZV0scWU9bmV3IEJlKFtuZXcgUGVdKSxZZT1uZXcgSGUoV2UpLEdlPW5lKG51bGwsImNvcmUiLFt7cHJvdmlkZTp5dCx1c2VWYWx1ZToidW5rbm93biJ9LHtwcm92aWRlOmllLGRlcHM6W05dfSx7cHJvdmlkZTpZdCxkZXBzOltdfSx7cHJvdmlkZTp2dCxkZXBzOltdfV0pLFFlPW5ldyBjKCJMb2NhbGVJZCIpO2Z1bmN0aW9uIEtlKCl7cmV0dXJuIHFlfWZ1bmN0aW9uIFplKCl7cmV0dXJuIFllfWZ1bmN0aW9uIFhlKHQpe3JldHVybiB0fHwiZW4tVVMifXZhciAkZT1mdW5jdGlvbih0KXt9LEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksdGhpcy5pbmVydEJvZHlFbGVtZW50PXRoaXMuaW5lcnREb2N1bWVudC5ib2R5LG51bGw9PXRoaXMuaW5lcnRCb2R5RWxlbWVudCl7dmFyIGU9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImh0bWwiKTt0aGlzLmluZXJ0RG9jdW1lbnQuYXBwZW5kQ2hpbGQoZSksdGhpcy5pbmVydEJvZHlFbGVtZW50PXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5IiksZS5hcHBlbmRDaGlsZCh0aGlzLmluZXJ0Qm9keUVsZW1lbnQpfXRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9Jzxzdmc+PGcgb25sb2FkPSJ0aGlzLnBhcmVudE5vZGUucmVtb3ZlKCkiPjwvZz48L3N2Zz4nLCF0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcnx8dGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInN2ZyIpPyh0aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPSc8c3ZnPjxwPjxzdHlsZT48aW1nIHNyYz0iPC9zdHlsZT48aW1nIHNyYz14IG9uZXJyb3I9YWxlcnQoMSkvLyI+Jyx0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3ImJnRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJzdmcgaW1nIikmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiEhd2luZG93LkRPTVBhcnNlcn1jYXRjaCh0KXtyZXR1cm4hMX19KCk/dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X0RPTVBhcnNlcjp0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfSW5lcnREb2N1bWVudCk6dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50PXRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9YSFJ9cmV0dXJuIHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfWEhSPWZ1bmN0aW9uKHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0KyI8L2JvZHk+Ijt0cnl7dD1lbmNvZGVVUkkodCl9Y2F0Y2godCl7cmV0dXJuIG51bGx9dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O2UucmVzcG9uc2VUeXBlPSJkb2N1bWVudCIsZS5vcGVuKCJHRVQiLCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCIrdCwhMSksZS5zZW5kKG51bGwpO3ZhciBuPWUucmVzcG9uc2UuYm9keTtyZXR1cm4gbi5yZW1vdmVDaGlsZChuLmZpcnN0Q2hpbGQpLG59LHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfRE9NUGFyc2VyPWZ1bmN0aW9uKHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0KyI8L2JvZHk+Ijt0cnl7dmFyIGU9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodCwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpLGV9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSx0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X0luZXJ0RG9jdW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuImNvbnRlbnQiaW4gZT8oZS5pbm5lckhUTUw9dCxlKToodGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD10LHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKHRoaXMuaW5lcnRCb2R5RWxlbWVudCksdGhpcy5pbmVydEJvZHlFbGVtZW50KX0sdC5wcm90b3R5cGUuc3RyaXBDdXN0b21Oc0F0dHJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF0dHJpYnV0ZXMsbj1lLmxlbmd0aC0xOzA8bjtuLS0pe3ZhciByPWUuaXRlbShuKS5uYW1lOyJ4bWxuczpuczEiIT09ciYmMCE9PXIuaW5kZXhPZigibnMxOiIpfHx0LnJlbW92ZUF0dHJpYnV0ZShyKX1mb3IodmFyIGk9dC5maXJzdENoaWxkO2k7KWkubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnMoaSksaT1pLm5leHRTaWJsaW5nfSx0fSgpLHRuPS9eKD86KD86aHR0cHM/fG1haWx0b3xmdHB8dGVsfGZpbGUpOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvZ2ksZW49L15kYXRhOig/OmltYWdlXC8oPzpibXB8Z2lmfGpwZWd8anBnfHBuZ3x0aWZmfHdlYnApfHZpZGVvXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW2EtejAtOStcL10rPSokL2k7ZnVuY3Rpb24gbm4odCl7cmV0dXJuKHQ9U3RyaW5nKHQpKS5tYXRjaCh0bil8fHQubWF0Y2goZW4pP3Q6KHRlKCkmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyB1bnNhZmUgVVJMIHZhbHVlICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpLCJ1bnNhZmU6Iit0KX1mdW5jdGlvbiBybih0KXt2YXIgZSxuLGk9e307dHJ5e2Zvcih2YXIgbz1PYmplY3Qoci5lKSh0LnNwbGl0KCIsIikpLGE9by5uZXh0KCk7IWEuZG9uZTthPW8ubmV4dCgpKWlbYS52YWx1ZV09ITB9Y2F0Y2godCl7ZT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKG49by5yZXR1cm4pJiZuLmNhbGwobyl9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fXJldHVybiBpfWZ1bmN0aW9uIG9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuLGksbz17fTt0cnl7Zm9yKHZhciBhPU9iamVjdChyLmUpKHQpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgdT1zLnZhbHVlO2Zvcih2YXIgbCBpbiB1KXUuaGFzT3duUHJvcGVydHkobCkmJihvW2xdPSEwKX19Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKGk9YS5yZXR1cm4pJiZpLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBvfXZhciBhbixzbj1ybigiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLHVuPXJuKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksbG49cm4oInJwLHJ0IiksY249b24obG4sdW4pLGZuPW9uKHNuLG9uKHVuLHJuKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpbnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxvbihsbixybigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGNuKSxobj1ybigiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksZG49cm4oInNyY3NldCIpLHBuPW9uKGhuLGRuLHJuKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpKSxtbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1yZXR1cm4gdC5wcm90b3R5cGUuc2FuaXRpemVDaGlsZHJlbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5maXJzdENoaWxkO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT90aGlzLnN0YXJ0RWxlbWVudChlKTplLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhlLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsZS5maXJzdENoaWxkKWU9ZS5maXJzdENoaWxkO2Vsc2UgZm9yKDtlOyl7ZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoZSk7dmFyIG49dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLm5leHRTaWJsaW5nKTtpZihuKXtlPW47YnJlYWt9ZT10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUucGFyZW50Tm9kZSl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfSx0LnByb3RvdHlwZS5zdGFydEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGZuLmhhc093blByb3BlcnR5KGUpKXt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChlKTtmb3IodmFyIG4scj10LmF0dHJpYnV0ZXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yLml0ZW0oaSksYT1vLm5hbWUscz1hLnRvTG93ZXJDYXNlKCk7aWYocG4uaGFzT3duUHJvcGVydHkocykpe3ZhciB1PW8udmFsdWU7aG5bc10mJih1PW5uKHUpKSxkbltzXSYmKG49dSx1PShuPVN0cmluZyhuKSkuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG5uKHQudHJpbSgpKX0pLmpvaW4oIiwgIikpLHRoaXMuYnVmLnB1c2goIiAiLGEsJz0iJyx2bih1KSwnIicpfWVsc2UgdGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITB9dGhpcy5idWYucHVzaCgiPiIpfWVsc2UgdGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITB9LHQucHJvdG90eXBlLmVuZEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2ZuLmhhc093blByb3BlcnR5KGUpJiYhc24uaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLmJ1Zi5wdXNoKCI8LyIpLHRoaXMuYnVmLnB1c2goZSksdGhpcy5idWYucHVzaCgiPiIpKX0sdC5wcm90b3R5cGUuY2hhcnM9ZnVuY3Rpb24odCl7dGhpcy5idWYucHVzaCh2bih0KSl9LHQucHJvdG90eXBlLmNoZWNrQ2xvYmJlcmVkRWxlbWVudD1mdW5jdGlvbih0LGUpe2lmKGUmJih0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICIrdC5vdXRlckhUTUwpO3JldHVybiBlfSx0fSgpLHluPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxnbj0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gdm4odCl7cmV0dXJuIHQucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoeW4sZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShnbixmdW5jdGlvbih0KXtyZXR1cm4iJiMiK3QuY2hhckNvZGVBdCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiBibih0LGUpe3ZhciBuPW51bGw7dHJ5e2FuPWFufHxuZXcgSmUodCk7dmFyIHI9ZT9TdHJpbmcoZSk6IiI7bj1hbi5nZXRJbmVydEJvZHlFbGVtZW50KHIpO3ZhciBpPTUsbz1yO2Rve2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtpLS0scj1vLG89bi5pbm5lckhUTUwsbj1hbi5nZXRJbmVydEJvZHlFbGVtZW50KHIpfXdoaWxlKHIhPT1vKTt2YXIgYT1uZXcgbW4scz1hLnNhbml0aXplQ2hpbGRyZW4oX24obil8fG4pO3JldHVybiB0ZSgpJiZhLnNhbml0aXplZFNvbWV0aGluZyYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIEhUTUwgc3RyaXBwZWQgc29tZSBjb250ZW50IChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKS4iKSxzfWZpbmFsbHl7aWYobilmb3IodmFyIHU9X24obil8fG47dS5maXJzdENoaWxkOyl1LnJlbW92ZUNoaWxkKHUuZmlyc3RDaGlsZCl9fWZ1bmN0aW9uIF9uKHQpe3JldHVybiJjb250ZW50ImluIHQmJmZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfSh0KT90LmNvbnRlbnQ6bnVsbH12YXIgd249bmV3IFJlZ0V4cCgiXihbLSwuXCInJV8hIyBhLXpBLVowLTldK3woPzooPzptYXRyaXh8dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxza2V3fHBlcnNwZWN0aXZlKSg/Olh8WXwzZCk/fCg/OnJnYnxoc2wpYT98KD86cmVwZWF0aW5nLSk/KD86bGluZWFyfHJhZGlhbCktZ3JhZGllbnR8KD86Y2FsY3xhdHRyKSlcXChbLTAtOS4lLCAjYS16QS1aXStcXCkpJCIsImciKSx4bj0vXnVybFwoKFteKV0rKVwpJC87ZnVuY3Rpb24gT24odCl7aWYoISh0PVN0cmluZyh0KS50cmltKCkpKXJldHVybiIiO3ZhciBlPXQubWF0Y2goeG4pO3JldHVybiBlJiZubihlWzFdKT09PWVbMV18fHQubWF0Y2god24pJiZmdW5jdGlvbih0KXtmb3IodmFyIGU9ITAsbj0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXQuY2hhckF0KHIpOyInIj09PWkmJm4/ZT0hZTonIic9PT1pJiZlJiYobj0hbil9cmV0dXJuIGUmJm59KHQpP3Q6KHRlKCkmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyB1bnNhZmUgc3R5bGUgdmFsdWUgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpLiIpLCJ1bnNhZmUiKX12YXIgQ249ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5OT05FPTBdPSJOT05FIix0W3QuSFRNTD0xXT0iSFRNTCIsdFt0LlNUWUxFPTJdPSJTVFlMRSIsdFt0LlNDUklQVD0zXT0iU0NSSVBUIix0W3QuVVJMPTRdPSJVUkwiLHRbdC5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsdH0oe30pLFNuPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBFbih0LGUsbil7dmFyIHI9dC5zdGF0ZSxpPTE3OTImcjtyZXR1cm4gaT09PWU/KHQuc3RhdGU9LTE3OTMmcnxuLHQuaW5pdEluZGV4PS0xLCEwKTppPT09bn1mdW5jdGlvbiBrbih0LGUsbil7cmV0dXJuKDE3OTImdC5zdGF0ZSk9PT1lJiZ0LmluaXRJbmRleDw9biYmKHQuaW5pdEluZGV4PW4rMSwhMCl9ZnVuY3Rpb24gVG4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBJbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIEFuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gam4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBQbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfXZhciBNbj17c2V0Q3VycmVudE5vZGU6dm9pZCAwLGNyZWF0ZVJvb3RWaWV3OnZvaWQgMCxjcmVhdGVFbWJlZGRlZFZpZXc6dm9pZCAwLGNyZWF0ZUNvbXBvbmVudFZpZXc6dm9pZCAwLGNyZWF0ZU5nTW9kdWxlUmVmOnZvaWQgMCxvdmVycmlkZVByb3ZpZGVyOnZvaWQgMCxvdmVycmlkZUNvbXBvbmVudFZpZXc6dm9pZCAwLGNsZWFyT3ZlcnJpZGVzOnZvaWQgMCxjaGVja0FuZFVwZGF0ZVZpZXc6dm9pZCAwLGNoZWNrTm9DaGFuZ2VzVmlldzp2b2lkIDAsZGVzdHJveVZpZXc6dm9pZCAwLHJlc29sdmVEZXA6dm9pZCAwLGNyZWF0ZURlYnVnQ29udGV4dDp2b2lkIDAsaGFuZGxlRXZlbnQ6dm9pZCAwLHVwZGF0ZURpcmVjdGl2ZXM6dm9pZCAwLHVwZGF0ZVJlbmRlcmVyOnZvaWQgMCxkaXJ0eVBhcmVudFF1ZXJpZXM6dm9pZCAwfTtmdW5jdGlvbiBObih0LGUsbixyKXt2YXIgaT0iRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWU6ICciK2UrIicuIEN1cnJlbnQgdmFsdWU6ICciK24rIicuIjtyZXR1cm4gciYmKGkrPSIgSXQgc2VlbXMgbGlrZSB0aGUgdmlldyBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGl0cyBwYXJlbnQgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gZGlydHkgY2hlY2tlZC4gSGFzIGl0IGJlZW4gY3JlYXRlZCBpbiBhIGNoYW5nZSBkZXRlY3Rpb24gaG9vayA/IiksZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRXJyb3IodCk7cmV0dXJuIFJuKG4sZSksbn0oaSx0KX1mdW5jdGlvbiBSbih0LGUpe3RbdHRdPWUsdFtudF09ZS5sb2dFcnJvci5iaW5kKGUpfWZ1bmN0aW9uIERuKHQpe3JldHVybiBuZXcgRXJyb3IoIlZpZXdEZXN0cm95ZWRFcnJvcjogQXR0ZW1wdCB0byB1c2UgYSBkZXN0cm95ZWQgdmlldzogIit0KX12YXIgTG49ZnVuY3Rpb24oKXt9LEZuPW5ldyBNYXA7ZnVuY3Rpb24gVm4odCl7dmFyIGU9Rm4uZ2V0KHQpO3JldHVybiBlfHwoZT1PKHQpKyJfIitGbi5zaXplLEZuLnNldCh0LGUpKSxlfWZ1bmN0aW9uIFVuKHQsZSxuLHIpe2lmKFRlLmlzV3JhcHBlZChyKSl7cj1UZS51bndyYXAocik7dmFyIGk9dC5kZWYubm9kZXNbZV0uYmluZGluZ0luZGV4K24sbz1UZS51bndyYXAodC5vbGRWYWx1ZXNbaV0pO3Qub2xkVmFsdWVzW2ldPW5ldyBUZShvKX1yZXR1cm4gcn12YXIgem49IiQkdW5kZWZpbmVkIixCbj0iJCRlbXB0eSI7ZnVuY3Rpb24gSG4odCl7cmV0dXJue2lkOnpuLHN0eWxlczp0LnN0eWxlcyxlbmNhcHN1bGF0aW9uOnQuZW5jYXBzdWxhdGlvbixkYXRhOnQuZGF0YX19dmFyIFduPTA7ZnVuY3Rpb24gcW4odCxlLG4scil7cmV0dXJuISghKDImdC5zdGF0ZSkmJngodC5vbGRWYWx1ZXNbZS5iaW5kaW5nSW5kZXgrbl0scikpfWZ1bmN0aW9uIFluKHQsZSxuLHIpe3JldHVybiEhcW4odCxlLG4scikmJih0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXT1yLCEwKX1mdW5jdGlvbiBHbih0LGUsbixyKXt2YXIgaT10Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXTtpZigxJnQuc3RhdGV8fCFrZShpLHIpKXt2YXIgbz1lLmJpbmRpbmdzW25dLm5hbWU7dGhyb3cgTm4oTW4uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLG8rIjogIitpLG8rIjogIityLDAhPSgxJnQuc3RhdGUpKX19ZnVuY3Rpb24gUW4odCl7Zm9yKHZhciBlPXQ7ZTspMiZlLmRlZi5mbGFncyYmKGUuc3RhdGV8PTgpLGU9ZS52aWV3Q29udGFpbmVyUGFyZW50fHxlLnBhcmVudH1mdW5jdGlvbiBLbih0LGUpe2Zvcih2YXIgbj10O24mJm4hPT1lOyluLnN0YXRlfD02NCxuPW4udmlld0NvbnRhaW5lclBhcmVudHx8bi5wYXJlbnR9ZnVuY3Rpb24gWm4odCxlLG4scil7dHJ5e3JldHVybiBRbigzMzU1NDQzMiZ0LmRlZi5ub2Rlc1tlXS5mbGFncz9Jbih0LGUpLmNvbXBvbmVudFZpZXc6dCksTW4uaGFuZGxlRXZlbnQodCxlLG4scil9Y2F0Y2goZSl7dC5yb290LmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlKX19ZnVuY3Rpb24gWG4odCl7cmV0dXJuIHQucGFyZW50P0luKHQucGFyZW50LHQucGFyZW50Tm9kZURlZi5ub2RlSW5kZXgpOm51bGx9ZnVuY3Rpb24gJG4odCl7cmV0dXJuIHQucGFyZW50P3QucGFyZW50Tm9kZURlZi5wYXJlbnQ6bnVsbH1mdW5jdGlvbiBKbih0LGUpe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBJbih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2Nhc2UgMjpyZXR1cm4gVG4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dH19ZnVuY3Rpb24gdHIodCl7cmV0dXJuISF0LnBhcmVudCYmISEoMzI3NjgmdC5wYXJlbnROb2RlRGVmLmZsYWdzKX1mdW5jdGlvbiBlcih0KXtyZXR1cm4hKCF0LnBhcmVudHx8MzI3NjgmdC5wYXJlbnROb2RlRGVmLmZsYWdzKX1mdW5jdGlvbiBucih0KXtyZXR1cm4gMTw8dCUzMn1mdW5jdGlvbiBycih0KXt2YXIgZT17fSxuPTAsaT17fTtyZXR1cm4gdCYmdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPU9iamVjdChyLmMpKHQsMiksYT1vWzBdLHM9b1sxXTsibnVtYmVyIj09dHlwZW9mIGE/KGVbYV09cyxufD1ucihhKSk6aVthXT1zfSkse21hdGNoZWRRdWVyaWVzOmUscmVmZXJlbmNlczppLG1hdGNoZWRRdWVyeUlkczpufX1mdW5jdGlvbiBpcih0LGUpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgbixpLG87cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/KGk9KG89T2JqZWN0KHIuYykodCwyKSlbMF0sbj1vWzFdKTooaT0wLG49dCksbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBufHwib2JqZWN0Ij09dHlwZW9mIG4pJiZlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobixBLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pLHtmbGFnczppLHRva2VuOm4sdG9rZW5LZXk6Vm4obil9fSl9ZnVuY3Rpb24gb3IodCxlLG4pe3ZhciByPW4ucmVuZGVyUGFyZW50O3JldHVybiByPzA9PSgxJnIuZmxhZ3MpfHwwPT0oMzM1NTQ0MzImci5mbGFncyl8fHIuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGUmJnIuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGUuZW5jYXBzdWxhdGlvbj09PVguTmF0aXZlP0luKHQsbi5yZW5kZXJQYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50OnZvaWQgMDplfXZhciBhcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzcih0KXt2YXIgZT1hci5nZXQodCk7cmV0dXJuIGV8fCgoZT10KGZ1bmN0aW9uKCl7cmV0dXJuIExufSkpLmZhY3Rvcnk9dCxhci5zZXQodCxlKSksZX1mdW5jdGlvbiB1cih0LGUsbixyLGkpezM9PT1lJiYobj10LnJlbmRlcmVyLnBhcmVudE5vZGUoSm4odCx0LmRlZi5sYXN0UmVuZGVyUm9vdE5vZGUpKSksbHIodCxlLDAsdC5kZWYubm9kZXMubGVuZ3RoLTEsbixyLGkpfWZ1bmN0aW9uIGxyKHQsZSxuLHIsaSxvLGEpe2Zvcih2YXIgcz1uO3M8PXI7cysrKXt2YXIgdT10LmRlZi5ub2Rlc1tzXTsxMSZ1LmZsYWdzJiZmcih0LHUsZSxpLG8sYSkscys9dS5jaGlsZENvdW50fX1mdW5jdGlvbiBjcih0LGUsbixyLGksbyl7Zm9yKHZhciBhPXQ7YSYmIXRyKGEpOylhPWEucGFyZW50O2Zvcih2YXIgcz1hLnBhcmVudCx1PSRuKGEpLGw9dS5ub2RlSW5kZXgrdS5jaGlsZENvdW50LGM9dS5ub2RlSW5kZXgrMTtjPD1sO2MrKyl7dmFyIGY9cy5kZWYubm9kZXNbY107Zi5uZ0NvbnRlbnRJbmRleD09PWUmJmZyKHMsZixuLHIsaSxvKSxjKz1mLmNoaWxkQ291bnR9aWYoIXMucGFyZW50KXt2YXIgaD10LnJvb3QucHJvamVjdGFibGVOb2Rlc1tlXTtpZihoKWZvcihjPTA7YzxoLmxlbmd0aDtjKyspaHIodCxoW2NdLG4scixpLG8pfX1mdW5jdGlvbiBmcih0LGUsbixyLGksbyl7aWYoOCZlLmZsYWdzKWNyKHQsZS5uZ0NvbnRlbnQuaW5kZXgsbixyLGksbyk7ZWxzZXt2YXIgYT1Kbih0LGUpO2lmKDM9PT1uJiYzMzU1NDQzMiZlLmZsYWdzJiY0OCZlLmJpbmRpbmdGbGFncz8oMTYmZS5iaW5kaW5nRmxhZ3MmJmhyKHQsYSxuLHIsaSxvKSwzMiZlLmJpbmRpbmdGbGFncyYmaHIoSW4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldyxhLG4scixpLG8pKTpocih0LGEsbixyLGksbyksMTY3NzcyMTYmZS5mbGFncylmb3IodmFyIHM9SW4odCxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyx1PTA7dTxzLmxlbmd0aDt1KyspdXIoc1t1XSxuLHIsaSxvKTsxJmUuZmxhZ3MmJiFlLmVsZW1lbnQubmFtZSYmbHIodCxuLGUubm9kZUluZGV4KzEsZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50LHIsaSxvKX19ZnVuY3Rpb24gaHIodCxlLG4scixpLG8pe3ZhciBhPXQucmVuZGVyZXI7c3dpdGNoKG4pe2Nhc2UgMTphLmFwcGVuZENoaWxkKHIsZSk7YnJlYWs7Y2FzZSAyOmEuaW5zZXJ0QmVmb3JlKHIsZSxpKTticmVhaztjYXNlIDM6YS5yZW1vdmVDaGlsZChyLGUpO2JyZWFrO2Nhc2UgMDpvLnB1c2goZSl9fXZhciBkcj0vXjooW146XSspOiguKykkLztmdW5jdGlvbiBwcih0KXtpZigiOiI9PT10WzBdKXt2YXIgZT10Lm1hdGNoKGRyKTtyZXR1cm5bZVsxXSxlWzJdXX1yZXR1cm5bIiIsdF19ZnVuY3Rpb24gbXIodCl7Zm9yKHZhciBlPTAsbj0wO248dC5sZW5ndGg7bisrKWV8PXRbbl0uZmxhZ3M7cmV0dXJuIGV9ZnVuY3Rpb24geXIodCxlLG4scixpLG8sYSxzLHUsbCxjLGYsaCxkLHAsbSx5LGcsdixiKXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiBlK2dyKG4pK3I7Y2FzZSAyOnJldHVybiBlK2dyKG4pK3IrZ3IoaSkrbztjYXNlIDM6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3M7Y2FzZSA0OnJldHVybiBlK2dyKG4pK3IrZ3IoaSkrbytncihhKStzK2dyKHUpK2w7Y2FzZSA1OnJldHVybiBlK2dyKG4pK3IrZ3IoaSkrbytncihhKStzK2dyKHUpK2wrZ3IoYykrZjtjYXNlIDY6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmK2dyKGgpK2Q7Y2FzZSA3OnJldHVybiBlK2dyKG4pK3IrZ3IoaSkrbytncihhKStzK2dyKHUpK2wrZ3IoYykrZitncihoKStkK2dyKHApK207Y2FzZSA4OnJldHVybiBlK2dyKG4pK3IrZ3IoaSkrbytncihhKStzK2dyKHUpK2wrZ3IoYykrZitncihoKStkK2dyKHApK20rZ3IoeSkrZztjYXNlIDk6cmV0dXJuIGUrZ3IobikrcitncihpKStvK2dyKGEpK3MrZ3IodSkrbCtncihjKStmK2dyKGgpK2QrZ3IocCkrbStncih5KStnK2dyKHYpK2I7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRvZXMgbm90IHN1cHBvcnQgbW9yZSB0aGFuIDkgZXhwcmVzc2lvbnMiKX19ZnVuY3Rpb24gZ3IodCl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpOiIifWZ1bmN0aW9uIHZyKHQsZSxuLHIsaSxvKXt0fD0xO3ZhciBhPXJyKGUpO3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGZsYWdzOnQsY2hlY2tJbmRleDotMSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczphLm1hdGNoZWRRdWVyaWVzLG1hdGNoZWRRdWVyeUlkczphLm1hdGNoZWRRdWVyeUlkcyxyZWZlcmVuY2VzOmEucmVmZXJlbmNlcyxuZ0NvbnRlbnRJbmRleDpuLGNoaWxkQ291bnQ6cixiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6e25zOm51bGwsbmFtZTpudWxsLGF0dHJzOm51bGwsdGVtcGxhdGU6bz9zcihvKTpudWxsLGNvbXBvbmVudFByb3ZpZGVyOm51bGwsY29tcG9uZW50VmlldzpudWxsLGNvbXBvbmVudFJlbmRlcmVyVHlwZTpudWxsLHB1YmxpY1Byb3ZpZGVyczpudWxsLGFsbFByb3ZpZGVyczpudWxsLGhhbmRsZUV2ZW50Oml8fExufSxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBicih0LGUsbixpLG8sYSxzLHUsbCxjLGYsaCl7dm9pZCAwPT09cyYmKHM9W10pLGN8fChjPUxuKTt2YXIgZD1ycihuKSxwPWQubWF0Y2hlZFF1ZXJpZXMsbT1kLnJlZmVyZW5jZXMseT1kLm1hdGNoZWRRdWVyeUlkcyxnPW51bGwsdj1udWxsO2EmJihnPShQPU9iamVjdChyLmMpKHByKGEpLDIpKVswXSx2PVBbMV0pLHU9dXx8W107Zm9yKHZhciBiPW5ldyBBcnJheSh1Lmxlbmd0aCksXz0wO188dS5sZW5ndGg7XysrKXt2YXIgdz1PYmplY3Qoci5jKSh1W19dLDMpLHg9d1swXSxPPXdbMV0sQz13WzJdLFM9T2JqZWN0KHIuYykocHIoTyksMiksRT1TWzBdLGs9U1sxXSxUPXZvaWQgMCxJPXZvaWQgMDtzd2l0Y2goMTUmeCl7Y2FzZSA0Okk9QzticmVhaztjYXNlIDE6Y2FzZSA4OlQ9Q31iW19dPXtmbGFnczp4LG5zOkUsbmFtZTprLG5vbk1pbmlmaWVkTmFtZTprLHNlY3VyaXR5Q29udGV4dDpULHN1ZmZpeDpJfX1sPWx8fFtdO3ZhciBBPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKF89MDtfPGwubGVuZ3RoO18rKyl7dmFyIGo9T2JqZWN0KHIuYykobFtfXSwyKTtBW19dPXt0eXBlOjAsdGFyZ2V0OmpbMF0sZXZlbnROYW1lOmpbMV0scHJvcE5hbWU6bnVsbH19dmFyIFAsTT0ocz1zfHxbXSkubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChyLmMpKHQsMiksbj1lWzBdLGk9ZVsxXSxvPU9iamVjdChyLmMpKHByKG4pLDIpO3JldHVybltvWzBdLG9bMV0saV19KTtyZXR1cm4gaD1mdW5jdGlvbih0KXtpZih0JiZ0LmlkPT09em4pe3ZhciBlPW51bGwhPXQuZW5jYXBzdWxhdGlvbiYmdC5lbmNhcHN1bGF0aW9uIT09WC5Ob25lfHx0LnN0eWxlcy5sZW5ndGh8fE9iamVjdC5rZXlzKHQuZGF0YSkubGVuZ3RoO3QuaWQ9ZT8iYyIrV24rKzpCbn1yZXR1cm4gdCYmdC5pZD09PUJuJiYodD1udWxsKSx0fHxudWxsfShoKSxmJiYoZXw9MzM1NTQ0MzIpLHtub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczplfD0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnAsbWF0Y2hlZFF1ZXJ5SWRzOnkscmVmZXJlbmNlczptLG5nQ29udGVudEluZGV4OmksY2hpbGRDb3VudDpvLGJpbmRpbmdzOmIsYmluZGluZ0ZsYWdzOm1yKGIpLG91dHB1dHM6QSxlbGVtZW50OntuczpnLG5hbWU6dixhdHRyczpNLHRlbXBsYXRlOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3OmZ8fG51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOmgscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6Y3x8TG59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIF9yKHQsZSxuKXt2YXIgaSxvPW4uZWxlbWVudCxhPXQucm9vdC5zZWxlY3Rvck9yTm9kZSxzPXQucmVuZGVyZXI7aWYodC5wYXJlbnR8fCFhKXtpPW8ubmFtZT9zLmNyZWF0ZUVsZW1lbnQoby5uYW1lLG8ubnMpOnMuY3JlYXRlQ29tbWVudCgiIik7dmFyIHU9b3IodCxlLG4pO3UmJnMuYXBwZW5kQ2hpbGQodSxpKX1lbHNlIGk9cy5zZWxlY3RSb290RWxlbWVudChhKTtpZihvLmF0dHJzKWZvcih2YXIgbD0wO2w8by5hdHRycy5sZW5ndGg7bCsrKXt2YXIgYz1PYmplY3Qoci5jKShvLmF0dHJzW2xdLDMpO3Muc2V0QXR0cmlidXRlKGksY1sxXSxjWzJdLGNbMF0pfXJldHVybiBpfWZ1bmN0aW9uIHdyKHQsZSxuLHIpe2Zvcih2YXIgaT0wO2k8bi5vdXRwdXRzLmxlbmd0aDtpKyspe3ZhciBvPW4ub3V0cHV0c1tpXSxhPXhyKHQsbi5ub2RlSW5kZXgsKGY9by5ldmVudE5hbWUsKGM9by50YXJnZXQpP2MrIjoiK2Y6ZikpLHM9by50YXJnZXQsdT10OyJjb21wb25lbnQiPT09by50YXJnZXQmJihzPW51bGwsdT1lKTt2YXIgbD11LnJlbmRlcmVyLmxpc3RlbihzfHxyLG8uZXZlbnROYW1lLGEpO3QuZGlzcG9zYWJsZXNbbi5vdXRwdXRJbmRleCtpXT1sfXZhciBjLGZ9ZnVuY3Rpb24geHIodCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gWm4odCxlLG4scil9fWZ1bmN0aW9uIE9yKHQsZSxuLHIpe2lmKCFZbih0LGUsbixyKSlyZXR1cm4hMTt2YXIgaT1lLmJpbmRpbmdzW25dLG89SW4odCxlLm5vZGVJbmRleCksYT1vLnJlbmRlckVsZW1lbnQscz1pLm5hbWU7c3dpdGNoKDE1JmkuZmxhZ3Mpe2Nhc2UgMTohZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhPWUuc2VjdXJpdHlDb250ZXh0LHM9YT90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKGEsbyk6bztzPW51bGwhPXM/cy50b1N0cmluZygpOm51bGw7dmFyIHU9dC5yZW5kZXJlcjtudWxsIT1vP3Uuc2V0QXR0cmlidXRlKG4saSxzLHIpOnUucmVtb3ZlQXR0cmlidXRlKG4saSxyKX0odCxpLGEsaS5ucyxzLHIpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5yZW5kZXJlcjtyP2kuYWRkQ2xhc3MoZSxuKTppLnJlbW92ZUNsYXNzKGUsbil9KHQsYSxzLHIpO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz10LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKENuLlNUWUxFLGkpO2lmKG51bGwhPW8pe289by50b1N0cmluZygpO3ZhciBhPWUuc3VmZml4O251bGwhPWEmJihvKz1hKX1lbHNlIG89bnVsbDt2YXIgcz10LnJlbmRlcmVyO251bGwhPW8/cy5zZXRTdHlsZShuLHIsbyk6cy5yZW1vdmVTdHlsZShuLHIpfSh0LGksYSxzLHIpO2JyZWFrO2Nhc2UgODohZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1lLnNlY3VyaXR5Q29udGV4dCxhPW8/dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShvLGkpOmk7dC5yZW5kZXJlci5zZXRQcm9wZXJ0eShuLHIsYSl9KDMzNTU0NDMyJmUuZmxhZ3MmJjMyJmkuZmxhZ3M/by5jb21wb25lbnRWaWV3OnQsaSxhLHMscil9cmV0dXJuITB9dmFyIENyPW5ldyBPYmplY3QsU3I9Vm4oTiksRXI9Vm4oUCksa3I9Vm4oanQpO2Z1bmN0aW9uIFRyKHQsZSxuLHIpe3JldHVybiBuPVMobikse2luZGV4Oi0xLGRlcHM6aXIocixPKGUpKSxmbGFnczp0LHRva2VuOmUsdmFsdWU6bn19ZnVuY3Rpb24gSXIodCl7Zm9yKHZhciBlPXt9LG49W10scj0hMSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07by50b2tlbj09PXN0JiYocj0hMCksMTA3Mzc0MTgyNCZvLmZsYWdzJiZuLnB1c2goby50b2tlbiksby5pbmRleD1pLGVbVm4oby50b2tlbildPW99cmV0dXJue2ZhY3Rvcnk6bnVsbCxwcm92aWRlcnNCeUtleTplLHByb3ZpZGVyczp0LG1vZHVsZXM6bixpc1Jvb3Q6cn19ZnVuY3Rpb24gQXIodCxlLG4pe3ZvaWQgMD09PW4mJihuPU4uVEhST1dfSUZfTk9UX0ZPVU5EKTt2YXIgcixpLG89Syh0KTt0cnl7aWYoOCZlLmZsYWdzKXJldHVybiBlLnRva2VuO2lmKDImZS5mbGFncyYmKG49bnVsbCksMSZlLmZsYWdzKXJldHVybiB0Ll9wYXJlbnQuZ2V0KGUudG9rZW4sbik7dmFyIGE9ZS50b2tlbktleTtzd2l0Y2goYSl7Y2FzZSBTcjpjYXNlIEVyOmNhc2Uga3I6cmV0dXJuIHR9dmFyIHM9dC5fZGVmLnByb3ZpZGVyc0J5S2V5W2FdO2lmKHMpe3ZhciB1PXQuX3Byb3ZpZGVyc1tzLmluZGV4XTtyZXR1cm4gdm9pZCAwPT09dSYmKHU9dC5fcHJvdmlkZXJzW3MuaW5kZXhdPWpyKHQscykpLHU9PT1Dcj92b2lkIDA6dX1pZihlLnRva2VuLm5nSW5qZWN0YWJsZURlZiYmKHI9dCxudWxsIT0oaT1lLnRva2VuLm5nSW5qZWN0YWJsZURlZikucHJvdmlkZWRJbiYmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2RlZi5tb2R1bGVzLmluZGV4T2YoaS5wcm92aWRlZEluKT4tMX0ocil8fCJyb290Ij09PWkucHJvdmlkZWRJbiYmci5fZGVmLmlzUm9vdCkpKXt2YXIgbD10Ll9wcm92aWRlcnMubGVuZ3RoO3JldHVybiB0Ll9kZWYucHJvdmlkZXJzQnlLZXlbZS50b2tlbktleV09e2ZsYWdzOjUxMjAsdmFsdWU6ZS50b2tlbi5uZ0luamVjdGFibGVEZWYuZmFjdG9yeSxkZXBzOltdLGluZGV4OmwsdG9rZW46ZS50b2tlbn0sdC5fcHJvdmlkZXJzW2xdPUNyLHQuX3Byb3ZpZGVyc1tsXT1qcih0LHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XSl9cmV0dXJuIDQmZS5mbGFncz9uOnQuX3BhcmVudC5nZXQoZS50b2tlbixuKX1maW5hbGx5e0sobyl9fWZ1bmN0aW9uIGpyKHQsZSl7dmFyIG47c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDUxMjpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uLmxlbmd0aDtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKEFyKHQsblswXSkpO2Nhc2UgMjpyZXR1cm4gbmV3IGUoQXIodCxuWzBdKSxBcih0LG5bMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyBlKEFyKHQsblswXSksQXIodCxuWzFdKSxBcih0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgbz1uZXcgQXJyYXkoaSksYT0wO2E8aTthKyspb1thXT1Bcih0LG5bYV0pO3JldHVybiBuZXcoZS5iaW5kLmFwcGx5KGUsT2JqZWN0KHIuZCkoW3ZvaWQgMF0sbykpKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMTAyNDpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uLmxlbmd0aDtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBlKCk7Y2FzZSAxOnJldHVybiBlKEFyKHQsblswXSkpO2Nhc2UgMjpyZXR1cm4gZShBcih0LG5bMF0pLEFyKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gZShBcih0LG5bMF0pLEFyKHQsblsxXSksQXIodCxuWzJdKSk7ZGVmYXVsdDpmb3IodmFyIG89QXJyYXkoaSksYT0wO2E8aTthKyspb1thXT1Bcih0LG5bYV0pO3JldHVybiBlLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShvKSl9fSh0LGUudmFsdWUsZS5kZXBzKTticmVhaztjYXNlIDIwNDg6bj1Bcih0LGUuZGVwc1swXSk7YnJlYWs7Y2FzZSAyNTY6bj1lLnZhbHVlfXJldHVybiBuPT09Q3J8fG51bGw9PW58fCJvYmplY3QiIT10eXBlb2Ygbnx8MTMxMDcyJmUuZmxhZ3N8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLm5nT25EZXN0cm95fHwoZS5mbGFnc3w9MTMxMDcyKSx2b2lkIDA9PT1uP0NyOm59ZnVuY3Rpb24gUHIodCxlKXt2YXIgbj10LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3M7aWYoKG51bGw9PWV8fGU+PW4ubGVuZ3RoKSYmKGU9bi5sZW5ndGgtMSksZTwwKXJldHVybiBudWxsO3ZhciByPW5bZV07cmV0dXJuIHIudmlld0NvbnRhaW5lclBhcmVudD1udWxsLERyKG4sZSksTW4uZGlydHlQYXJlbnRRdWVyaWVzKHIpLE5yKHIpLHJ9ZnVuY3Rpb24gTXIodCxlLG4pe3ZhciByPWU/Sm4oZSxlLmRlZi5sYXN0UmVuZGVyUm9vdE5vZGUpOnQucmVuZGVyRWxlbWVudDt1cihuLDIsbi5yZW5kZXJlci5wYXJlbnROb2RlKHIpLG4ucmVuZGVyZXIubmV4dFNpYmxpbmcociksdm9pZCAwKX1mdW5jdGlvbiBOcih0KXt1cih0LDMsbnVsbCxudWxsLHZvaWQgMCl9ZnVuY3Rpb24gUnIodCxlLG4pe2U+PXQubGVuZ3RoP3QucHVzaChuKTp0LnNwbGljZShlLDAsbil9ZnVuY3Rpb24gRHIodCxlKXtlPj10Lmxlbmd0aC0xP3QucG9wKCk6dC5zcGxpY2UoZSwxKX12YXIgTHI9bmV3IE9iamVjdDtmdW5jdGlvbiBGcih0LGUsbixyLGksbyl7cmV0dXJuIG5ldyBWcih0LGUsbixyLGksbyl9dmFyIFZyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEpe3ZhciBzPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gcy5zZWxlY3Rvcj1lLHMuY29tcG9uZW50VHlwZT1uLHMuX2lucHV0cz1pLHMuX291dHB1dHM9byxzLm5nQ29udGVudFNlbGVjdG9ycz1hLHMudmlld0RlZkZhY3Rvcnk9cixzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5wdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLl9pbnB1dHM7Zm9yKHZhciBuIGluIGUpdC5wdXNoKHtwcm9wTmFtZTpuLHRlbXBsYXRlTmFtZTplW25dfSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvdXRwdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX291dHB1dHMpdC5wdXNoKHtwcm9wTmFtZTplLHRlbXBsYXRlTmFtZTp0aGlzLl9vdXRwdXRzW2VdfSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCFyKXRocm93IG5ldyBFcnJvcigibmdNb2R1bGUgc2hvdWxkIGJlIHByb3ZpZGVkIik7dmFyIGk9c3IodGhpcy52aWV3RGVmRmFjdG9yeSksbz1pLm5vZGVzWzBdLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIubm9kZUluZGV4LGE9TW4uY3JlYXRlUm9vdFZpZXcodCxlfHxbXSxuLGkscixMcikscz1BbihhLG8pLmluc3RhbmNlO3JldHVybiBuJiZhLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShJbihhLDApLnJlbmRlckVsZW1lbnQsIm5nLXZlcnNpb24iLEouZnVsbCksbmV3IFVyKGEsbmV3IFdyKGEpLHMpfSxlfSh4dCksVXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl92aWV3PWUsaS5fdmlld1JlZj1uLGkuX2NvbXBvbmVudD1yLGkuX2VsRGVmPWkuX3ZpZXcuZGVmLm5vZGVzWzBdLGkuaG9zdFZpZXc9bixpLmNoYW5nZURldGVjdG9yUmVmPW4saS5pbnN0YW5jZT1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsb2NhdGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgY2UoSW4odGhpcy5fdmlldyx0aGlzLl9lbERlZi5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFFyKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29tcG9uZW50VHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnQuY29uc3RydWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdSZWYuZGVzdHJveSgpfSxlLnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fdmlld1JlZi5vbkRlc3Ryb3kodCl9LGV9KGZ1bmN0aW9uKCl7fSk7ZnVuY3Rpb24genIodCxlLG4pe3JldHVybiBuZXcgQnIodCxlLG4pfXZhciBCcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXc9dCx0aGlzLl9lbERlZj1lLHRoaXMuX2RhdGE9bix0aGlzLl9lbWJlZGRlZFZpZXdzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNlKHRoaXMuX2RhdGEucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgUXIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRJbmplY3RvciIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92aWV3LGU9dGhpcy5fZWxEZWYucGFyZW50OyFlJiZ0OyllPSRuKHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHQ/bmV3IFFyKHQsZSk6bmV3IFFyKHRoaXMuX3ZpZXcsbnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIGU9UHIodGhpcy5fZGF0YSx0KTtNbi5kZXN0cm95VmlldyhlKX19LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9lbWJlZGRlZFZpZXdzW3RdO2lmKGUpe3ZhciBuPW5ldyBXcihlKTtyZXR1cm4gbi5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksbn1yZXR1cm4gbnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSk7cmV0dXJuIHRoaXMuaW5zZXJ0KHIsbikscn0sdC5wcm90b3R5cGUuY3JlYXRlQ29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89bnx8dGhpcy5wYXJlbnRJbmplY3RvcjtpfHx0IGluc3RhbmNlb2YgQXR8fChpPW8uZ2V0KGp0KSk7dmFyIGE9dC5jcmVhdGUobyxyLHZvaWQgMCxpKTtyZXR1cm4gdGhpcy5pbnNlcnQoYS5ob3N0VmlldyxlKSxhfSx0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4scixpLG8sYT10O3JldHVybiBpPWEuX3ZpZXcsbz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLG51bGwhPT0ocj1lKSYmdm9pZCAwIT09cnx8KHI9by5sZW5ndGgpLGkudmlld0NvbnRhaW5lclBhcmVudD10aGlzLl92aWV3LFJyKG8scixpKSxmdW5jdGlvbih0LGUpe3ZhciBuPVhuKGUpO2lmKG4mJm4hPT10JiYhKDE2JmUuc3RhdGUpKXtlLnN0YXRlfD0xNjt2YXIgcj1uLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztyfHwocj1uLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cz1bXSksci5wdXNoKGUpLGZ1bmN0aW9uKHQsbil7aWYoISg0Jm4uZmxhZ3MpKXtlLnBhcmVudC5kZWYubm9kZUZsYWdzfD00LG4uZmxhZ3N8PTQ7Zm9yKHZhciByPW4ucGFyZW50O3I7KXIuY2hpbGRGbGFnc3w9NCxyPXIucGFyZW50fX0oMCxlLnBhcmVudE5vZGVEZWYpfX0obixpKSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXMoaSksTXIobixyPjA/b1tyLTFdOm51bGwsaSksYS5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksdH0sdC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1vdmUgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4scixpLG8sYSxzPXRoaXMuX2VtYmVkZGVkVmlld3MuaW5kZXhPZih0Ll92aWV3KTtyZXR1cm4gaT1lLGE9KG89KG49dGhpcy5fZGF0YSkudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cylbcj1zXSxEcihvLHIpLG51bGw9PWkmJihpPW8ubGVuZ3RoKSxScihvLGksYSksTW4uZGlydHlQYXJlbnRRdWVyaWVzKGEpLE5yKGEpLE1yKG4saT4wP29baS0xXTpudWxsLGEpLHR9LHQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VtYmVkZGVkVmlld3MuaW5kZXhPZih0Ll92aWV3KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPVByKHRoaXMuX2RhdGEsdCk7ZSYmTW4uZGVzdHJveVZpZXcoZSl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbih0KXt2YXIgZT1Qcih0aGlzLl9kYXRhLHQpO3JldHVybiBlP25ldyBXcihlKTpudWxsfSx0fSgpO2Z1bmN0aW9uIEhyKHQpe3JldHVybiBuZXcgV3IodCl9dmFyIFdyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl92aWV3PXQsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1udWxsLHRoaXMuX2FwcFJlZj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3ROb2RlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB1cih0aGlzLl92aWV3LDAsdm9pZCAwLHZvaWQgMCx0PVtdKSx0O3ZhciB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9KDEyOCZ0aGlzLl92aWV3LnN0YXRlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tYXJrRm9yQ2hlY2s9ZnVuY3Rpb24oKXtRbih0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5zdGF0ZSY9LTV9LHQucHJvdG90eXBlLmRldGVjdENoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl92aWV3LnJvb3QucmVuZGVyZXJGYWN0b3J5O3QuYmVnaW4mJnQuYmVnaW4oKTt0cnl7TW4uY2hlY2tBbmRVcGRhdGVWaWV3KHRoaXMuX3ZpZXcpfWZpbmFsbHl7dC5lbmQmJnQuZW5kKCl9fSx0LnByb3RvdHlwZS5jaGVja05vQ2hhbmdlcz1mdW5jdGlvbigpe01uLmNoZWNrTm9DaGFuZ2VzVmlldyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlfD00fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fdmlldy5kaXNwb3NhYmxlc3x8KHRoaXMuX3ZpZXcuZGlzcG9zYWJsZXM9W10pLHRoaXMuX3ZpZXcuZGlzcG9zYWJsZXMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2FwcFJlZj90aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTp0aGlzLl92aWV3Q29udGFpbmVyUmVmJiZ0aGlzLl92aWV3Q29udGFpbmVyUmVmLmRldGFjaCh0aGlzLl92aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcykpLE1uLmRlc3Ryb3lWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2hGcm9tQXBwUmVmPWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmPW51bGwsTnIodGhpcy5fdmlldyksTW4uZGlydHlQYXJlbnRRdWVyaWVzKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5hdHRhY2hUb0FwcFJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl92aWV3Q29udGFpbmVyUmVmKXRocm93IG5ldyBFcnJvcigiVGhpcyB2aWV3IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBWaWV3Q29udGFpbmVyISIpO3RoaXMuX2FwcFJlZj10fSx0LnByb3RvdHlwZS5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWY9ZnVuY3Rpb24odCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBFcnJvcigiVGhpcyB2aWV3IGlzIGFscmVhZHkgYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIEFwcGxpY2F0aW9uUmVmISIpO3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dH0sdH0oKTtmdW5jdGlvbiBxcih0LGUpe3JldHVybiBuZXcgWXIodCxlKX12YXIgWXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGFyZW50Vmlldz1lLHIuX2RlZj1uLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgV3IoTW4uY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLHRoaXMuX2RlZi5lbGVtZW50LnRlbXBsYXRlLHQpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlbGVtZW50UmVmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjZShJbih0aGlzLl9wYXJlbnRWaWV3LHRoaXMuX2RlZi5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KGdlKTtmdW5jdGlvbiBHcih0LGUpe3JldHVybiBuZXcgUXIodCxlKX12YXIgUXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52aWV3PXQsdGhpcy5lbERlZj1lfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9Ti5USFJPV19JRl9OT1RfRk9VTkQpLE1uLnJlc29sdmVEZXAodGhpcy52aWV3LHRoaXMuZWxEZWYsISF0aGlzLmVsRGVmJiYwIT0oMzM1NTQ0MzImdGhpcy5lbERlZi5mbGFncykse2ZsYWdzOjAsdG9rZW46dCx0b2tlbktleTpWbih0KX0sZSl9LHR9KCk7ZnVuY3Rpb24gS3IodCxlKXt2YXIgbj10LmRlZi5ub2Rlc1tlXTtpZigxJm4uZmxhZ3Mpe3ZhciByPUluKHQsbi5ub2RlSW5kZXgpO3JldHVybiBuLmVsZW1lbnQudGVtcGxhdGU/ci50ZW1wbGF0ZTpyLnJlbmRlckVsZW1lbnR9aWYoMiZuLmZsYWdzKXJldHVybiBUbih0LG4ubm9kZUluZGV4KS5yZW5kZXJUZXh0O2lmKDIwMjQwJm4uZmxhZ3MpcmV0dXJuIEFuKHQsbi5ub2RlSW5kZXgpLmluc3RhbmNlO3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBzdGF0ZTogcmVhZCBub2RlVmFsdWUgZm9yIG5vZGUgaW5kZXggIitlKX1mdW5jdGlvbiBacih0KXtyZXR1cm4gbmV3IFhyKHQucmVuZGVyZXIpfXZhciBYcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10fXJldHVybiB0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChyLmMpKHByKGUpLDIpLGk9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5bMV0sblswXSk7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxpKSxpfSx0LnByb3RvdHlwZS5jcmVhdGVWaWV3Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdC5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGVBbmNob3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KCIiKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQoZSk7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxuKSxufSx0LnByb3RvdHlwZS5wcm9qZWN0Tm9kZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZVtuXSl9LHQucHJvdG90eXBlLmF0dGFjaFZpZXdBZnRlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCkscj10aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpLGk9MDtpPGUubGVuZ3RoO2krKyl0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShuLGVbaV0scil9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV0scj10aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobik7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChyLG4pfX0sdC5wcm90b3R5cGUuZGVzdHJveVZpZXc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlKGVbbl0pfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLmxpc3Rlbkdsb2JhbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9T2JqZWN0KHIuYykocHIoZSksMiksbz1pWzBdLGE9aVsxXTtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsYSxuLG8pOnRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsYSxvKX0sdC5wcm90b3R5cGUuc2V0QmluZGluZ0RlYnVnSW5mbz1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5zZXRFbGVtZW50Q2xhc3M9ZnVuY3Rpb24odCxlLG4pe24/dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpOnRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4pOnRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlKX0sdC5wcm90b3R5cGUuaW52b2tlRWxlbWVudE1ldGhvZD1mdW5jdGlvbih0LGUsbil7dFtlXS5hcHBseSh0LG4pfSx0LnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZW5kZXJlci5hbmltYXRlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQhIil9LHR9KCk7ZnVuY3Rpb24gJHIodCxlLG4scil7cmV0dXJuIG5ldyBKcih0LGUsbixyKX12YXIgSnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX21vZHVsZVR5cGU9dCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPW4sdGhpcy5fZGVmPXIsdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5pbmplY3Rvcj10aGlzLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9kZWYsbj10Ll9wcm92aWRlcnM9bmV3IEFycmF5KGUucHJvdmlkZXJzLmxlbmd0aCkscj0wO3I8ZS5wcm92aWRlcnMubGVuZ3RoO3IrKyl7dmFyIGk9ZS5wcm92aWRlcnNbcl07NDA5NiZpLmZsYWdzfHx2b2lkIDA9PT1uW3JdJiYobltyXT1qcih0LGkpKX19KHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPU4uVEhST1dfSUZfTk9UX0ZPVU5EKSx2b2lkIDA9PT1uJiYobj0wKTt2YXIgcj0wO3JldHVybiA0Jm4/cnw9MToyJm4mJihyfD00KSxBcih0aGlzLHt0b2tlbjp0LHRva2VuS2V5OlZuKHQpLGZsYWdzOnJ9LGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuX21vZHVsZVR5cGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KFR0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIG5nIG1vZHVsZSAiK08odGhpcy5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrIiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4iKTt0aGlzLl9kZXN0cm95ZWQ9ITAsZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5fZGVmLHI9bmV3IFNldCxpPTA7aTxuLnByb3ZpZGVycy5sZW5ndGg7aSsrKWlmKDEzMTA3MiZuLnByb3ZpZGVyc1tpXS5mbGFncyl7dmFyIG89dC5fcHJvdmlkZXJzW2ldO2lmKG8mJm8hPT1Dcil7dmFyIGE9by5uZ09uRGVzdHJveTsiZnVuY3Rpb24iIT10eXBlb2YgYXx8ci5oYXMobyl8fChhLmFwcGx5KG8pLHIuYWRkKG8pKX19fSh0aGlzKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKHQpfSx0fSgpLHRpPVZuKGZ1bmN0aW9uKCl7fSksZWk9Vm4oZnVuY3Rpb24oKXt9KSxuaT1WbihjZSkscmk9Vm4odmUpLGlpPVZuKGdlKSxvaT1WbihiZSksYWk9Vm4oTiksc2k9Vm4oUCk7ZnVuY3Rpb24gdWkodCxlLG4saSxvLGEscyx1KXt2YXIgbD1bXTtpZihzKWZvcih2YXIgYyBpbiBzKXt2YXIgZj1PYmplY3Qoci5jKShzW2NdLDIpO2xbZlswXV09e2ZsYWdzOjgsbmFtZTpjLG5vbk1pbmlmaWVkTmFtZTpmWzFdLG5zOm51bGwsc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om51bGx9fXZhciBoPVtdO2lmKHUpZm9yKHZhciBkIGluIHUpaC5wdXNoKHt0eXBlOjEscHJvcE5hbWU6ZCx0YXJnZXQ6bnVsbCxldmVudE5hbWU6dVtkXX0pO3JldHVybiBmaSh0LGV8PTE2Mzg0LG4saSxvLG8sYSxsLGgpfWZ1bmN0aW9uIGxpKHQsZSxuKXtyZXR1cm4gZmkoLTEsdHw9MTYsbnVsbCwwLGUsZSxuKX1mdW5jdGlvbiBjaSh0LGUsbixyLGkpe3JldHVybiBmaSgtMSx0LGUsMCxuLHIsaSl9ZnVuY3Rpb24gZmkodCxlLG4scixpLG8sYSxzLHUpe3ZhciBsPXJyKG4pLGM9bC5tYXRjaGVkUXVlcmllcyxmPWwucmVmZXJlbmNlcyxoPWwubWF0Y2hlZFF1ZXJ5SWRzO3V8fCh1PVtdKSxzfHwocz1bXSksbz1TKG8pO3ZhciBkPWlyKGEsTyhpKSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmUsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6YyxtYXRjaGVkUXVlcnlJZHM6aCxyZWZlcmVuY2VzOmYsbmdDb250ZW50SW5kZXg6LTEsY2hpbGRDb3VudDpyLGJpbmRpbmdzOnMsYmluZGluZ0ZsYWdzOm1yKHMpLG91dHB1dHM6dSxlbGVtZW50Om51bGwscHJvdmlkZXI6e3Rva2VuOmksdmFsdWU6byxkZXBzOmR9LHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBoaSh0LGUpe3JldHVybiB5aSh0LGUpfWZ1bmN0aW9uIGRpKHQsZSl7Zm9yKHZhciBuPXQ7bi5wYXJlbnQmJiF0cihuKTspbj1uLnBhcmVudDtyZXR1cm4gZ2kobi5wYXJlbnQsJG4obiksITAsZS5wcm92aWRlci52YWx1ZSxlLnByb3ZpZGVyLmRlcHMpfWZ1bmN0aW9uIHBpKHQsZSl7dmFyIG49Z2kodCxlLnBhcmVudCwoMzI3NjgmZS5mbGFncyk+MCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyk7aWYoZS5vdXRwdXRzLmxlbmd0aClmb3IodmFyIHI9MDtyPGUub3V0cHV0cy5sZW5ndGg7cisrKXt2YXIgaT1lLm91dHB1dHNbcl0sbz1uW2kucHJvcE5hbWVdLnN1YnNjcmliZShtaSh0LGUucGFyZW50Lm5vZGVJbmRleCxpLmV2ZW50TmFtZSkpO3QuZGlzcG9zYWJsZXNbZS5vdXRwdXRJbmRleCtyXT1vLnVuc3Vic2NyaWJlLmJpbmQobyl9cmV0dXJuIG59ZnVuY3Rpb24gbWkodCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gWm4odCxlLG4scil9fWZ1bmN0aW9uIHlpKHQsZSl7dmFyIG49KDgxOTImZS5mbGFncyk+MCxpPWUucHJvdmlkZXI7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDUxMjpyZXR1cm4gZ2kodCxlLnBhcmVudCxuLGkudmFsdWUsaS5kZXBzKTtjYXNlIDEwMjQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGksbyl7dmFyIGE9by5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gaSgpO2Nhc2UgMTpyZXR1cm4gaShiaSh0LGUsbixvWzBdKSk7Y2FzZSAyOnJldHVybiBpKGJpKHQsZSxuLG9bMF0pLGJpKHQsZSxuLG9bMV0pKTtjYXNlIDM6cmV0dXJuIGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSksYmkodCxlLG4sb1syXSkpO2RlZmF1bHQ6Zm9yKHZhciBzPUFycmF5KGEpLHU9MDt1PGE7dSsrKXNbdV09YmkodCxlLG4sb1t1XSk7cmV0dXJuIGkuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKHMpKX19KHQsZS5wYXJlbnQsbixpLnZhbHVlLGkuZGVwcyk7Y2FzZSAyMDQ4OnJldHVybiBiaSh0LGUucGFyZW50LG4saS5kZXBzWzBdKTtjYXNlIDI1NjpyZXR1cm4gaS52YWx1ZX19ZnVuY3Rpb24gZ2kodCxlLG4saSxvKXt2YXIgYT1vLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBuZXcgaTtjYXNlIDE6cmV0dXJuIG5ldyBpKGJpKHQsZSxuLG9bMF0pKTtjYXNlIDI6cmV0dXJuIG5ldyBpKGJpKHQsZSxuLG9bMF0pLGJpKHQsZSxuLG9bMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyBpKGJpKHQsZSxuLG9bMF0pLGJpKHQsZSxuLG9bMV0pLGJpKHQsZSxuLG9bMl0pKTtkZWZhdWx0OmZvcih2YXIgcz1uZXcgQXJyYXkoYSksdT0wO3U8YTt1Kyspc1t1XT1iaSh0LGUsbixvW3VdKTtyZXR1cm4gbmV3KGkuYmluZC5hcHBseShpLE9iamVjdChyLmQpKFt2b2lkIDBdLHMpKSl9fXZhciB2aT17fTtmdW5jdGlvbiBiaSh0LGUsbixyLGkpe2lmKHZvaWQgMD09PWkmJihpPU4uVEhST1dfSUZfTk9UX0ZPVU5EKSw4JnIuZmxhZ3MpcmV0dXJuIHIudG9rZW47dmFyIG89dDsyJnIuZmxhZ3MmJihpPW51bGwpO3ZhciBhPXIudG9rZW5LZXk7YT09PW9pJiYobj0hKCFlfHwhZS5lbGVtZW50LmNvbXBvbmVudFZpZXcpKSxlJiYxJnIuZmxhZ3MmJihuPSExLGU9ZS5wYXJlbnQpO2Zvcih2YXIgcz10O3M7KXtpZihlKXN3aXRjaChhKXtjYXNlIHRpOnJldHVybiBacihfaShzLGUsbikpO2Nhc2UgZWk6cmV0dXJuIF9pKHMsZSxuKS5yZW5kZXJlcjtjYXNlIG5pOnJldHVybiBuZXcgY2UoSW4ocyxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Y2FzZSByaTpyZXR1cm4gSW4ocyxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIGlpOmlmKGUuZWxlbWVudC50ZW1wbGF0ZSlyZXR1cm4gSW4ocyxlLm5vZGVJbmRleCkudGVtcGxhdGU7YnJlYWs7Y2FzZSBvaTpyZXR1cm4gSHIoX2kocyxlLG4pKTtjYXNlIGFpOmNhc2Ugc2k6cmV0dXJuIEdyKHMsZSk7ZGVmYXVsdDp2YXIgdT0obj9lLmVsZW1lbnQuYWxsUHJvdmlkZXJzOmUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpW2FdO2lmKHUpe3ZhciBsPUFuKHMsdS5ub2RlSW5kZXgpO3JldHVybiBsfHwobD17aW5zdGFuY2U6eWkocyx1KX0scy5ub2Rlc1t1Lm5vZGVJbmRleF09bCksbC5pbnN0YW5jZX19bj10cihzKSxlPSRuKHMpLHM9cy5wYXJlbnQsNCZyLmZsYWdzJiYocz1udWxsKX12YXIgYz1vLnJvb3QuaW5qZWN0b3IuZ2V0KHIudG9rZW4sdmkpO3JldHVybiBjIT09dml8fGk9PT12aT9jOm8ucm9vdC5uZ01vZHVsZS5pbmplY3Rvci5nZXQoci50b2tlbixpKX1mdW5jdGlvbiBfaSh0LGUsbil7dmFyIHI7aWYobilyPUluKHQsZS5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7ZWxzZSBmb3Iocj10O3IucGFyZW50JiYhdHIocik7KXI9ci5wYXJlbnQ7cmV0dXJuIHJ9ZnVuY3Rpb24gd2kodCxlLG4scixpLG8pe2lmKDMyNzY4Jm4uZmxhZ3Mpe3ZhciBhPUluKHQsbi5wYXJlbnQubm9kZUluZGV4KS5jb21wb25lbnRWaWV3OzImYS5kZWYuZmxhZ3MmJihhLnN0YXRlfD04KX1pZihlLmluc3RhbmNlW24uYmluZGluZ3Nbcl0ubmFtZV09aSw1MjQyODgmbi5mbGFncyl7bz1vfHx7fTt2YXIgcz1UZS51bndyYXAodC5vbGRWYWx1ZXNbbi5iaW5kaW5nSW5kZXgrcl0pO29bbi5iaW5kaW5nc1tyXS5ub25NaW5pZmllZE5hbWVdPW5ldyBJZShzLGksMCE9KDImdC5zdGF0ZSkpfXJldHVybiB0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtyXT1pLG99ZnVuY3Rpb24geGkodCxlKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSlmb3IodmFyIG49dC5kZWYubm9kZXMscj0wLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxhPW8ucGFyZW50O2ZvcighYSYmby5mbGFncyZlJiZDaSh0LGksby5mbGFncyZlLHIrKyksMD09KG8uY2hpbGRGbGFncyZlKSYmKGkrPW8uY2hpbGRDb3VudCk7YSYmMSZhLmZsYWdzJiZpPT09YS5ub2RlSW5kZXgrYS5jaGlsZENvdW50OylhLmRpcmVjdENoaWxkRmxhZ3MmZSYmKHI9T2kodCxhLGUscikpLGE9YS5wYXJlbnR9fWZ1bmN0aW9uIE9pKHQsZSxuLHIpe2Zvcih2YXIgaT1lLm5vZGVJbmRleCsxO2k8PWUubm9kZUluZGV4K2UuY2hpbGRDb3VudDtpKyspe3ZhciBvPXQuZGVmLm5vZGVzW2ldO28uZmxhZ3MmbiYmQ2kodCxpLG8uZmxhZ3MmbixyKyspLGkrPW8uY2hpbGRDb3VudH1yZXR1cm4gcn1mdW5jdGlvbiBDaSh0LGUsbixyKXt2YXIgaT1Bbih0LGUpO2lmKGkpe3ZhciBvPWkuaW5zdGFuY2U7byYmKE1uLnNldEN1cnJlbnROb2RlKHQsZSksMTA0ODU3NiZuJiZrbih0LDUxMixyKSYmby5uZ0FmdGVyQ29udGVudEluaXQoKSwyMDk3MTUyJm4mJm8ubmdBZnRlckNvbnRlbnRDaGVja2VkKCksNDE5NDMwNCZuJiZrbih0LDc2OCxyKSYmby5uZ0FmdGVyVmlld0luaXQoKSw4Mzg4NjA4Jm4mJm8ubmdBZnRlclZpZXdDaGVja2VkKCksMTMxMDcyJm4mJm8ubmdPbkRlc3Ryb3koKSl9fWZ1bmN0aW9uIFNpKHQsZSxuKXt2YXIgcj1bXTtmb3IodmFyIGkgaW4gbilyLnB1c2goe3Byb3BOYW1lOmksYmluZGluZ1R5cGU6bltpXX0pO3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6LTEsZmxhZ3M6dCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxuZ0NvbnRlbnRJbmRleDotMSxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LGNoaWxkQ291bnQ6MCxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTp7aWQ6ZSxmaWx0ZXJJZDpucihlKSxiaW5kaW5nczpyfSxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gRWkodCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVNYXRjaGVkUXVlcmllczt0LnBhcmVudCYmZXIodCk7KXt2YXIgbj10LnBhcmVudE5vZGVEZWY7dD10LnBhcmVudDtmb3IodmFyIHI9bi5ub2RlSW5kZXgrbi5jaGlsZENvdW50LGk9MDtpPD1yO2krKyk2NzEwODg2NCYobz10LmRlZi5ub2Rlc1tpXSkuZmxhZ3MmJjUzNjg3MDkxMiZvLmZsYWdzJiYoby5xdWVyeS5maWx0ZXJJZCZlKT09PW8ucXVlcnkuZmlsdGVySWQmJlBuKHQsaSkuc2V0RGlydHkoKSwhKDEmby5mbGFncyYmaStvLmNoaWxkQ291bnQ8bi5ub2RlSW5kZXgpJiY2NzEwODg2NCZvLmNoaWxkRmxhZ3MmJjUzNjg3MDkxMiZvLmNoaWxkRmxhZ3N8fChpKz1vLmNoaWxkQ291bnQpfWlmKDEzNDIxNzcyOCZ0LmRlZi5ub2RlRmxhZ3MpZm9yKGk9MDtpPHQuZGVmLm5vZGVzLmxlbmd0aDtpKyspe3ZhciBvOzEzNDIxNzcyOCYobz10LmRlZi5ub2Rlc1tpXSkuZmxhZ3MmJjUzNjg3MDkxMiZvLmZsYWdzJiZQbih0LGkpLnNldERpcnR5KCksaSs9by5jaGlsZENvdW50fX1mdW5jdGlvbiBraSh0LGUpe3ZhciBuPVBuKHQsZS5ub2RlSW5kZXgpO2lmKG4uZGlydHkpe3ZhciByLGk9dm9pZCAwO2lmKDY3MTA4ODY0JmUuZmxhZ3Mpe3ZhciBvPWUucGFyZW50LnBhcmVudDtpPVRpKHQsby5ub2RlSW5kZXgsby5ub2RlSW5kZXgrby5jaGlsZENvdW50LGUucXVlcnksW10pLHI9QW4odCxlLnBhcmVudC5ub2RlSW5kZXgpLmluc3RhbmNlfWVsc2UgMTM0MjE3NzI4JmUuZmxhZ3MmJihpPVRpKHQsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxlLnF1ZXJ5LFtdKSxyPXQuY29tcG9uZW50KTtuLnJlc2V0KGkpO2Zvcih2YXIgYT1lLnF1ZXJ5LmJpbmRpbmdzLHM9ITEsdT0wO3U8YS5sZW5ndGg7dSsrKXt2YXIgbD1hW3VdLGM9dm9pZCAwO3N3aXRjaChsLmJpbmRpbmdUeXBlKXtjYXNlIDA6Yz1uLmZpcnN0O2JyZWFrO2Nhc2UgMTpjPW4scz0hMH1yW2wucHJvcE5hbWVdPWN9cyYmbi5ub3RpZnlPbkNoYW5nZXMoKX19ZnVuY3Rpb24gVGkodCxlLG4scixpKXtmb3IodmFyIG89ZTtvPD1uO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb10scz1hLm1hdGNoZWRRdWVyaWVzW3IuaWRdO2lmKG51bGwhPXMmJmkucHVzaChJaSh0LGEscykpLDEmYS5mbGFncyYmYS5lbGVtZW50LnRlbXBsYXRlJiYoYS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyZyLmZpbHRlcklkKT09PXIuZmlsdGVySWQpe3ZhciB1PUluKHQsbyk7aWYoKGEuY2hpbGRNYXRjaGVkUXVlcmllcyZyLmZpbHRlcklkKT09PXIuZmlsdGVySWQmJihUaSh0LG8rMSxvK2EuY2hpbGRDb3VudCxyLGkpLG8rPWEuY2hpbGRDb3VudCksMTY3NzcyMTYmYS5mbGFncylmb3IodmFyIGw9dS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIGY9bFtjXSxoPVhuKGYpO2gmJmg9PT11JiZUaShmLDAsZi5kZWYubm9kZXMubGVuZ3RoLTEscixpKX12YXIgZD11LnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihkKWZvcihjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBwPWRbY107VGkocCwwLHAuZGVmLm5vZGVzLmxlbmd0aC0xLHIsaSl9fShhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCkhPT1yLmZpbHRlcklkJiYobys9YS5jaGlsZENvdW50KX1yZXR1cm4gaX1mdW5jdGlvbiBJaSh0LGUsbil7aWYobnVsbCE9bilzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBJbih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2Nhc2UgMDpyZXR1cm4gbmV3IGNlKEluKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Nhc2UgMjpyZXR1cm4gSW4odCxlLm5vZGVJbmRleCkudGVtcGxhdGU7Y2FzZSAzOnJldHVybiBJbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgNDpyZXR1cm4gQW4odCxlLm5vZGVJbmRleCkuaW5zdGFuY2V9fWZ1bmN0aW9uIEFpKHQsZSl7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDotMSxmbGFnczo4LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5kZXg6dCxjaGlsZENvdW50OjAsYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6e2luZGV4OmV9fX1mdW5jdGlvbiBqaSh0LGUsbil7dmFyIHI9b3IodCxlLG4pO3ImJmNyKHQsbi5uZ0NvbnRlbnQuaW5kZXgsMSxyLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBQaSh0LGUpe3JldHVybiBSaSgxMjgsdCxuZXcgQXJyYXkoZSsxKSl9ZnVuY3Rpb24gTWkodCxlKXtyZXR1cm4gUmkoMzIsdCxuZXcgQXJyYXkoZSkpfWZ1bmN0aW9uIE5pKHQsZSl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspe3ZhciBhPW5bb107aVtlW2FdXT1hfXJldHVybiBSaSg2NCx0LGkpfWZ1bmN0aW9uIFJpKHQsZSxuKXtmb3IodmFyIHI9bmV3IEFycmF5KG4ubGVuZ3RoKSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV07cltpXT17ZmxhZ3M6OCxuYW1lOm8sbnM6bnVsbCxub25NaW5pZmllZE5hbWU6byxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDplLGZsYWdzOnQsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OjAsYmluZGluZ3M6cixiaW5kaW5nRmxhZ3M6bXIociksb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gRGkodCxlLG4pe2Zvcih2YXIgcj1uZXcgQXJyYXkobi5sZW5ndGgtMSksaT0xO2k8bi5sZW5ndGg7aSsrKXJbaS0xXT17ZmxhZ3M6OCxuYW1lOm51bGwsbnM6bnVsbCxub25NaW5pZmllZE5hbWU6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bltpXX07cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOjIsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDplLGNoaWxkQ291bnQ6MCxiaW5kaW5nczpyLGJpbmRpbmdGbGFnczo4LG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDp7cHJlZml4Om5bMF19LHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIExpKHQsZSxuKXt2YXIgcixpPXQucmVuZGVyZXI7cj1pLmNyZWF0ZVRleHQobi50ZXh0LnByZWZpeCk7dmFyIG89b3IodCxlLG4pO3JldHVybiBvJiZpLmFwcGVuZENoaWxkKG8scikse3JlbmRlclRleHQ6cn19ZnVuY3Rpb24gRmkodCxlKXtyZXR1cm4obnVsbCE9dD90LnRvU3RyaW5nKCk6IiIpK2Uuc3VmZml4fWZ1bmN0aW9uIFZpKHQsZSxuLHIpe2Zvcih2YXIgaT0wLG89MCxhPTAscz0wLHU9MCxsPW51bGwsYz1udWxsLGY9ITEsaD0hMSxkPW51bGwscD0wO3A8ZS5sZW5ndGg7cCsrKXt2YXIgbT1lW3BdO2lmKG0ubm9kZUluZGV4PXAsbS5wYXJlbnQ9bCxtLmJpbmRpbmdJbmRleD1pLG0ub3V0cHV0SW5kZXg9byxtLnJlbmRlclBhcmVudD1jLGF8PW0uZmxhZ3MsdXw9bS5tYXRjaGVkUXVlcnlJZHMsbS5lbGVtZW50KXt2YXIgeT1tLmVsZW1lbnQ7eS5wdWJsaWNQcm92aWRlcnM9bD9sLmVsZW1lbnQucHVibGljUHJvdmlkZXJzOk9iamVjdC5jcmVhdGUobnVsbCkseS5hbGxQcm92aWRlcnM9eS5wdWJsaWNQcm92aWRlcnMsZj0hMSxoPSExLG0uZWxlbWVudC50ZW1wbGF0ZSYmKHV8PW0uZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMpfWlmKHppKGwsbSxlLmxlbmd0aCksaSs9bS5iaW5kaW5ncy5sZW5ndGgsbys9bS5vdXRwdXRzLmxlbmd0aCwhYyYmMyZtLmZsYWdzJiYoZD1tKSwyMDIyNCZtLmZsYWdzKXtmfHwoZj0hMCxsLmVsZW1lbnQucHVibGljUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUobC5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycyksbC5lbGVtZW50LmFsbFByb3ZpZGVycz1sLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKTt2YXIgZz0wIT0oMzI3NjgmbS5mbGFncyk7MD09KDgxOTImbS5mbGFncyl8fGc/bC5lbGVtZW50LnB1YmxpY1Byb3ZpZGVyc1tWbihtLnByb3ZpZGVyLnRva2VuKV09bTooaHx8KGg9ITAsbC5lbGVtZW50LmFsbFByb3ZpZGVycz1PYmplY3QuY3JlYXRlKGwuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpKSxsLmVsZW1lbnQuYWxsUHJvdmlkZXJzW1ZuKG0ucHJvdmlkZXIudG9rZW4pXT1tKSxnJiYobC5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyPW0pfWlmKGw/KGwuY2hpbGRGbGFnc3w9bS5mbGFncyxsLmRpcmVjdENoaWxkRmxhZ3N8PW0uZmxhZ3MsbC5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQmJm0uZWxlbWVudC50ZW1wbGF0ZSYmKGwuY2hpbGRNYXRjaGVkUXVlcmllc3w9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcykpOnN8PW0uZmxhZ3MsbS5jaGlsZENvdW50PjApbD1tLFVpKG0pfHwoYz1tKTtlbHNlIGZvcig7bCYmcD09PWwubm9kZUluZGV4K2wuY2hpbGRDb3VudDspe3ZhciB2PWwucGFyZW50O3YmJih2LmNoaWxkRmxhZ3N8PWwuY2hpbGRGbGFncyx2LmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PWwuY2hpbGRNYXRjaGVkUXVlcmllcyksYz0obD12KSYmVWkobCk/bC5yZW5kZXJQYXJlbnQ6bH19cmV0dXJue2ZhY3Rvcnk6bnVsbCxub2RlRmxhZ3M6YSxyb290Tm9kZUZsYWdzOnMsbm9kZU1hdGNoZWRRdWVyaWVzOnUsZmxhZ3M6dCxub2RlczplLHVwZGF0ZURpcmVjdGl2ZXM6bnx8TG4sdXBkYXRlUmVuZGVyZXI6cnx8TG4saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIGVbbl0uZWxlbWVudC5oYW5kbGVFdmVudCh0LHIsaSl9LGJpbmRpbmdDb3VudDppLG91dHB1dENvdW50Om8sbGFzdFJlbmRlclJvb3ROb2RlOmR9fWZ1bmN0aW9uIFVpKHQpe3JldHVybiAwIT0oMSZ0LmZsYWdzKSYmbnVsbD09PXQuZWxlbWVudC5uYW1lfWZ1bmN0aW9uIHppKHQsZSxuKXt2YXIgcj1lLmVsZW1lbnQmJmUuZWxlbWVudC50ZW1wbGF0ZTtpZihyKXtpZighci5sYXN0UmVuZGVyUm9vdE5vZGUpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBFbWJlZGRlZCB0ZW1wbGF0ZXMgd2l0aG91dCBub2RlcyBhcmUgbm90IGFsbG93ZWQhIik7aWYoci5sYXN0UmVuZGVyUm9vdE5vZGUmJjE2Nzc3MjE2JnIubGFzdFJlbmRlclJvb3ROb2RlLmZsYWdzKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogTGFzdCByb290IG5vZGUgb2YgYSB0ZW1wbGF0ZSBjYW4ndCBoYXZlIGVtYmVkZGVkIHZpZXdzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9aWYoMjAyMjQmZS5mbGFncyYmMD09KDEmKHQ/dC5mbGFnczowKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBTdGF0aWNQcm92aWRlci9EaXJlY3RpdmUgbm9kZXMgbmVlZCB0byBiZSBjaGlsZHJlbiBvZiBlbGVtZW50cyBvciBhbmNob3JzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIik7aWYoZS5xdWVyeSl7aWYoNjcxMDg4NjQmZS5mbGFncyYmKCF0fHwwPT0oMTYzODQmdC5mbGFncykpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogQ29udGVudCBRdWVyeSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGRpcmVjdGl2ZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZigxMzQyMTc3MjgmZS5mbGFncyYmdCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFZpZXcgUXVlcnkgbm9kZXMgaGF2ZSB0byBiZSB0b3AgbGV2ZWwgbm9kZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZihlLmNoaWxkQ291bnQpe3ZhciBpPXQ/dC5ub2RlSW5kZXgrdC5jaGlsZENvdW50Om4tMTtpZihlLm5vZGVJbmRleDw9aSYmZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50PmkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBjaGlsZENvdW50IG9mIG5vZGUgbGVhZHMgb3V0c2lkZSBvZiBwYXJlbnQsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX19ZnVuY3Rpb24gQmkodCxlLG4scil7dmFyIGk9cWkodC5yb290LHQucmVuZGVyZXIsdCxlLG4pO3JldHVybiBZaShpLHQuY29tcG9uZW50LHIpLEdpKGkpLGl9ZnVuY3Rpb24gSGkodCxlLG4pe3ZhciByPXFpKHQsdC5yZW5kZXJlcixudWxsLG51bGwsZSk7cmV0dXJuIFlpKHIsbixuKSxHaShyKSxyfWZ1bmN0aW9uIFdpKHQsZSxuLHIpe3ZhciBpLG89ZS5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZTtyZXR1cm4gaT1vP3Qucm9vdC5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIocixvKTp0LnJvb3QucmVuZGVyZXIscWkodC5yb290LGksdCxlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIsbil9ZnVuY3Rpb24gcWkodCxlLG4scixpKXt2YXIgbz1uZXcgQXJyYXkoaS5ub2Rlcy5sZW5ndGgpLGE9aS5vdXRwdXRDb3VudD9uZXcgQXJyYXkoaS5vdXRwdXRDb3VudCk6bnVsbDtyZXR1cm57ZGVmOmkscGFyZW50Om4sdmlld0NvbnRhaW5lclBhcmVudDpudWxsLHBhcmVudE5vZGVEZWY6cixjb250ZXh0Om51bGwsY29tcG9uZW50Om51bGwsbm9kZXM6byxzdGF0ZToxMyxyb290OnQscmVuZGVyZXI6ZSxvbGRWYWx1ZXM6bmV3IEFycmF5KGkuYmluZGluZ0NvdW50KSxkaXNwb3NhYmxlczphLGluaXRJbmRleDotMX19ZnVuY3Rpb24gWWkodCxlLG4pe3QuY29tcG9uZW50PWUsdC5jb250ZXh0PW59ZnVuY3Rpb24gR2kodCl7dmFyIGU7dHIodCkmJihlPUluKHQucGFyZW50LHQucGFyZW50Tm9kZURlZi5wYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtmb3IodmFyIG49dC5kZWYscj10Lm5vZGVzLGk9MDtpPG4ubm9kZXMubGVuZ3RoO2krKyl7dmFyIG89bi5ub2Rlc1tpXTtNbi5zZXRDdXJyZW50Tm9kZSh0LGkpO3ZhciBhPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3Jm8uZmxhZ3Mpe2Nhc2UgMTp2YXIgcz1fcih0LGUsbyksdT12b2lkIDA7aWYoMzM1NTQ0MzImby5mbGFncyl7dmFyIGw9c3Ioby5lbGVtZW50LmNvbXBvbmVudFZpZXcpO3U9TW4uY3JlYXRlQ29tcG9uZW50Vmlldyh0LG8sbCxzKX13cih0LHUsbyxzKSxhPXtyZW5kZXJFbGVtZW50OnMsY29tcG9uZW50Vmlldzp1LHZpZXdDb250YWluZXI6bnVsbCx0ZW1wbGF0ZTpvLmVsZW1lbnQudGVtcGxhdGU/cXIodCxvKTp2b2lkIDB9LDE2Nzc3MjE2Jm8uZmxhZ3MmJihhLnZpZXdDb250YWluZXI9enIodCxvLGEpKTticmVhaztjYXNlIDI6YT1MaSh0LGUsbyk7YnJlYWs7Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDI1NjooYT1yW2ldKXx8NDA5NiZvLmZsYWdzfHwoYT17aW5zdGFuY2U6aGkodCxvKX0pO2JyZWFrO2Nhc2UgMTY6YT17aW5zdGFuY2U6ZGkodCxvKX07YnJlYWs7Y2FzZSAxNjM4NDooYT1yW2ldKXx8KGE9e2luc3RhbmNlOnBpKHQsbyl9KSwzMjc2OCZvLmZsYWdzJiZZaShJbih0LG8ucGFyZW50Lm5vZGVJbmRleCkuY29tcG9uZW50VmlldyxhLmluc3RhbmNlLGEuaW5zdGFuY2UpO2JyZWFrO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODphPXt2YWx1ZTp2b2lkIDB9O2JyZWFrO2Nhc2UgNjcxMDg4NjQ6Y2FzZSAxMzQyMTc3Mjg6YT1uZXcgaGU7YnJlYWs7Y2FzZSA4OmppKHQsZSxvKSxhPXZvaWQgMH1yW2ldPWF9bm8odCxlby5DcmVhdGVWaWV3Tm9kZXMpLGFvKHQsMjAxMzI2NTkyLDI2ODQzNTQ1NiwwKX1mdW5jdGlvbiBRaSh0KXtYaSh0KSxNbi51cGRhdGVEaXJlY3RpdmVzKHQsMSkscm8odCxlby5DaGVja05vQ2hhbmdlcyksTW4udXBkYXRlUmVuZGVyZXIodCwxKSxubyh0LGVvLkNoZWNrTm9DaGFuZ2VzKSx0LnN0YXRlJj0tOTd9ZnVuY3Rpb24gS2kodCl7MSZ0LnN0YXRlPyh0LnN0YXRlJj0tMix0LnN0YXRlfD0yKTp0LnN0YXRlJj0tMyxFbih0LDAsMjU2KSxYaSh0KSxNbi51cGRhdGVEaXJlY3RpdmVzKHQsMCkscm8odCxlby5DaGVja0FuZFVwZGF0ZSksYW8odCw2NzEwODg2NCw1MzY4NzA5MTIsMCk7dmFyIGU9RW4odCwyNTYsNTEyKTt4aSh0LDIwOTcxNTJ8KGU/MTA0ODU3NjowKSksTW4udXBkYXRlUmVuZGVyZXIodCwwKSxubyh0LGVvLkNoZWNrQW5kVXBkYXRlKSxhbyh0LDEzNDIxNzcyOCw1MzY4NzA5MTIsMCkseGkodCw4Mzg4NjA4fCgoZT1Fbih0LDUxMiw3NjgpKT80MTk0MzA0OjApKSwyJnQuZGVmLmZsYWdzJiYodC5zdGF0ZSY9LTkpLHQuc3RhdGUmPS05NyxFbih0LDc2OCwxMDI0KX1mdW5jdGlvbiBaaSh0LGUsbixpLG8sYSxzLHUsbCxjLGYsaCxkKXtyZXR1cm4gMD09PW4/ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsLGMsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGgsZD0hMTtyZXR1cm4gaD4wJiZPcih0LGUsMCxuKSYmKGQ9ITApLGg+MSYmT3IodCxlLDEscikmJihkPSEwKSxoPjImJk9yKHQsZSwyLGkpJiYoZD0hMCksaD4zJiZPcih0LGUsMyxvKSYmKGQ9ITApLGg+NCYmT3IodCxlLDQsYSkmJihkPSEwKSxoPjUmJk9yKHQsZSw1LHMpJiYoZD0hMCksaD42JiZPcih0LGUsNix1KSYmKGQ9ITApLGg+NyYmT3IodCxlLDcsbCkmJihkPSEwKSxoPjgmJk9yKHQsZSw4LGMpJiYoZD0hMCksaD45JiZPcih0LGUsOSxmKSYmKGQ9ITApLGR9KHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKXt2YXIgaD0hMSxkPWUuYmluZGluZ3MscD1kLmxlbmd0aDtpZihwPjAmJlluKHQsZSwwLG4pJiYoaD0hMCkscD4xJiZZbih0LGUsMSxyKSYmKGg9ITApLHA+MiYmWW4odCxlLDIsaSkmJihoPSEwKSxwPjMmJlluKHQsZSwzLG8pJiYoaD0hMCkscD40JiZZbih0LGUsNCxhKSYmKGg9ITApLHA+NSYmWW4odCxlLDUscykmJihoPSEwKSxwPjYmJlluKHQsZSw2LHUpJiYoaD0hMCkscD43JiZZbih0LGUsNyxsKSYmKGg9ITApLHA+OCYmWW4odCxlLDgsYykmJihoPSEwKSxwPjkmJlluKHQsZSw5LGYpJiYoaD0hMCksaCl7dmFyIG09ZS50ZXh0LnByZWZpeDtwPjAmJihtKz1GaShuLGRbMF0pKSxwPjEmJihtKz1GaShyLGRbMV0pKSxwPjImJihtKz1GaShpLGRbMl0pKSxwPjMmJihtKz1GaShvLGRbM10pKSxwPjQmJihtKz1GaShhLGRbNF0pKSxwPjUmJihtKz1GaShzLGRbNV0pKSxwPjYmJihtKz1GaSh1LGRbNl0pKSxwPjcmJihtKz1GaShsLGRbN10pKSxwPjgmJihtKz1GaShjLGRbOF0pKSxwPjkmJihtKz1GaShmLGRbOV0pKTt2YXIgeT1Ubih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUoeSxtKX1yZXR1cm4gaH0odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmKXt2YXIgaD1Bbih0LGUubm9kZUluZGV4KSxkPWguaW5zdGFuY2UscD0hMSxtPXZvaWQgMCx5PWUuYmluZGluZ3MubGVuZ3RoO3JldHVybiB5PjAmJnFuKHQsZSwwLG4pJiYocD0hMCxtPXdpKHQsaCxlLDAsbixtKSkseT4xJiZxbih0LGUsMSxyKSYmKHA9ITAsbT13aSh0LGgsZSwxLHIsbSkpLHk+MiYmcW4odCxlLDIsaSkmJihwPSEwLG09d2kodCxoLGUsMixpLG0pKSx5PjMmJnFuKHQsZSwzLG8pJiYocD0hMCxtPXdpKHQsaCxlLDMsbyxtKSkseT40JiZxbih0LGUsNCxhKSYmKHA9ITAsbT13aSh0LGgsZSw0LGEsbSkpLHk+NSYmcW4odCxlLDUscykmJihwPSEwLG09d2kodCxoLGUsNSxzLG0pKSx5PjYmJnFuKHQsZSw2LHUpJiYocD0hMCxtPXdpKHQsaCxlLDYsdSxtKSkseT43JiZxbih0LGUsNyxsKSYmKHA9ITAsbT13aSh0LGgsZSw3LGwsbSkpLHk+OCYmcW4odCxlLDgsYykmJihwPSEwLG09d2kodCxoLGUsOCxjLG0pKSx5PjkmJnFuKHQsZSw5LGYpJiYocD0hMCxtPXdpKHQsaCxlLDksZixtKSksbSYmZC5uZ09uQ2hhbmdlcyhtKSw2NTUzNiZlLmZsYWdzJiZrbih0LDI1NixlLm5vZGVJbmRleCkmJmQubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmZC5uZ0RvQ2hlY2soKSxwfSh0LGUsbixyLGksbyxhLHMsdSxsLGMsZik7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsLGMsZil7dmFyIGg9ZS5iaW5kaW5ncyxkPSExLHA9aC5sZW5ndGg7aWYocD4wJiZZbih0LGUsMCxuKSYmKGQ9ITApLHA+MSYmWW4odCxlLDEscikmJihkPSEwKSxwPjImJlluKHQsZSwyLGkpJiYoZD0hMCkscD4zJiZZbih0LGUsMyxvKSYmKGQ9ITApLHA+NCYmWW4odCxlLDQsYSkmJihkPSEwKSxwPjUmJlluKHQsZSw1LHMpJiYoZD0hMCkscD42JiZZbih0LGUsNix1KSYmKGQ9ITApLHA+NyYmWW4odCxlLDcsbCkmJihkPSEwKSxwPjgmJlluKHQsZSw4LGMpJiYoZD0hMCkscD45JiZZbih0LGUsOSxmKSYmKGQ9ITApLGQpe3ZhciBtPWpuKHQsZS5ub2RlSW5kZXgpLHk9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjp5PW5ldyBBcnJheShoLmxlbmd0aCkscD4wJiYoeVswXT1uKSxwPjEmJih5WzFdPXIpLHA+MiYmKHlbMl09aSkscD4zJiYoeVszXT1vKSxwPjQmJih5WzRdPWEpLHA+NSYmKHlbNV09cykscD42JiYoeVs2XT11KSxwPjcmJih5WzddPWwpLHA+OCYmKHlbOF09YykscD45JiYoeVs5XT1mKTticmVhaztjYXNlIDY0Onk9e30scD4wJiYoeVtoWzBdLm5hbWVdPW4pLHA+MSYmKHlbaFsxXS5uYW1lXT1yKSxwPjImJih5W2hbMl0ubmFtZV09aSkscD4zJiYoeVtoWzNdLm5hbWVdPW8pLHA+NCYmKHlbaFs0XS5uYW1lXT1hKSxwPjUmJih5W2hbNV0ubmFtZV09cykscD42JiYoeVtoWzZdLm5hbWVdPXUpLHA+NyYmKHlbaFs3XS5uYW1lXT1sKSxwPjgmJih5W2hbOF0ubmFtZV09YykscD45JiYoeVtoWzldLm5hbWVdPWYpO2JyZWFrO2Nhc2UgMTI4OnZhciBnPW47c3dpdGNoKHApe2Nhc2UgMTp5PWcudHJhbnNmb3JtKG4pO2JyZWFrO2Nhc2UgMjp5PWcudHJhbnNmb3JtKHIpO2JyZWFrO2Nhc2UgMzp5PWcudHJhbnNmb3JtKHIsaSk7YnJlYWs7Y2FzZSA0Onk9Zy50cmFuc2Zvcm0ocixpLG8pO2JyZWFrO2Nhc2UgNTp5PWcudHJhbnNmb3JtKHIsaSxvLGEpO2JyZWFrO2Nhc2UgNjp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyk7YnJlYWs7Y2FzZSA3Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLHUpO2JyZWFrO2Nhc2UgODp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyx1LGwpO2JyZWFrO2Nhc2UgOTp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyx1LGwsYyk7YnJlYWs7Y2FzZSAxMDp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyx1LGwsYyxmKX19bS52YWx1ZT15fXJldHVybiBkfSh0LGUsbixyLGksbyxhLHMsdSxsLGMsZik7ZGVmYXVsdDp0aHJvdyJ1bnJlYWNoYWJsZSJ9fSh0LGUsaSxvLGEscyx1LGwsYyxmLGgsZCk6ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPSExLGk9MDtpPG4ubGVuZ3RoO2krKylPcih0LGUsaSxuW2ldKSYmKHI9ITApO3JldHVybiByfSh0LGUsbik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPWUuYmluZGluZ3MsaT0hMSxvPTA7bzxuLmxlbmd0aDtvKyspWW4odCxlLG8sbltvXSkmJihpPSEwKTtpZihpKXt2YXIgYT0iIjtmb3Iobz0wO288bi5sZW5ndGg7bysrKWErPUZpKG5bb10scltvXSk7YT1lLnRleHQucHJlZml4K2E7dmFyIHM9VG4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHMsYSl9cmV0dXJuIGl9KHQsZSxuKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPUFuKHQsZS5ub2RlSW5kZXgpLGk9ci5pbnN0YW5jZSxvPSExLGE9dm9pZCAwLHM9MDtzPG4ubGVuZ3RoO3MrKylxbih0LGUscyxuW3NdKSYmKG89ITAsYT13aSh0LHIsZSxzLG5bc10sYSkpO3JldHVybiBhJiZpLm5nT25DaGFuZ2VzKGEpLDY1NTM2JmUuZmxhZ3MmJmtuKHQsMjU2LGUubm9kZUluZGV4KSYmaS5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZpLm5nRG9DaGVjaygpLG99KHQsZSxuKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9ZS5iaW5kaW5ncyxvPSExLGE9MDthPG4ubGVuZ3RoO2ErKylZbih0LGUsYSxuW2FdKSYmKG89ITApO2lmKG8pe3ZhciBzPWpuKHQsZS5ub2RlSW5kZXgpLHU9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjp1PW47YnJlYWs7Y2FzZSA2NDpmb3IodT17fSxhPTA7YTxuLmxlbmd0aDthKyspdVtpW2FdLm5hbWVdPW5bYV07YnJlYWs7Y2FzZSAxMjg6dmFyIGw9blswXSxjPW4uc2xpY2UoMSk7dT1sLnRyYW5zZm9ybS5hcHBseShsLE9iamVjdChyLmQpKGMpKX1zLnZhbHVlPXV9cmV0dXJuIG99KHQsZSxuKTtkZWZhdWx0OnRocm93InVucmVhY2hhYmxlIn19KHQsZSxpKX1mdW5jdGlvbiBYaSh0KXt2YXIgZT10LmRlZjtpZig0JmUubm9kZUZsYWdzKWZvcih2YXIgbj0wO248ZS5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj1lLm5vZGVzW25dO2lmKDQmci5mbGFncyl7dmFyIGk9SW4odCxuKS50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYoaSlmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9aVtvXTthLnN0YXRlfD0zMixLbihhLHQpfX1lbHNlIDA9PSg0JnIuY2hpbGRGbGFncykmJihuKz1yLmNoaWxkQ291bnQpfX1mdW5jdGlvbiAkaSh0LGUsbixyLGksbyxhLHMsdSxsLGMsZixoKXtyZXR1cm4gMD09PW4/ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsbCxjLGYpe3ZhciBoPWUuYmluZGluZ3MubGVuZ3RoO2g+MCYmR24odCxlLDAsbiksaD4xJiZHbih0LGUsMSxyKSxoPjImJkduKHQsZSwyLGkpLGg+MyYmR24odCxlLDMsbyksaD40JiZHbih0LGUsNCxhKSxoPjUmJkduKHQsZSw1LHMpLGg+NiYmR24odCxlLDYsdSksaD43JiZHbih0LGUsNyxsKSxoPjgmJkduKHQsZSw4LGMpLGg+OSYmR24odCxlLDksZil9KHQsZSxyLGksbyxhLHMsdSxsLGMsZixoKTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspR24odCxlLHIsbltyXSl9KHQsZSxyKSwhMX1mdW5jdGlvbiBKaSh0LGUpe2lmKFBuKHQsZS5ub2RlSW5kZXgpLmRpcnR5KXRocm93IE5uKE1uLmNyZWF0ZURlYnVnQ29udGV4dCh0LGUubm9kZUluZGV4KSwiUXVlcnkgIitlLnF1ZXJ5LmlkKyIgbm90IGRpcnR5IiwiUXVlcnkgIitlLnF1ZXJ5LmlkKyIgZGlydHkiLDAhPSgxJnQuc3RhdGUpKX1mdW5jdGlvbiB0byh0KXtpZighKDEyOCZ0LnN0YXRlKSl7aWYocm8odCxlby5EZXN0cm95KSxubyh0LGVvLkRlc3Ryb3kpLHhpKHQsMTMxMDcyKSx0LmRpc3Bvc2FibGVzKWZvcih2YXIgZT0wO2U8dC5kaXNwb3NhYmxlcy5sZW5ndGg7ZSsrKXQuZGlzcG9zYWJsZXNbZV0oKTshZnVuY3Rpb24odCl7aWYoMTYmdC5zdGF0ZSl7dmFyIGU9WG4odCk7aWYoZSl7dmFyIG49ZS50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7biYmKERyKG4sbi5pbmRleE9mKHQpKSxNbi5kaXJ0eVBhcmVudFF1ZXJpZXModCkpfX19KHQpLHQucmVuZGVyZXIuZGVzdHJveU5vZGUmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmRlZi5ub2Rlcy5sZW5ndGgsbj0wO248ZTtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dOzEmci5mbGFncz90LnJlbmRlcmVyLmRlc3Ryb3lOb2RlKEluKHQsbikucmVuZGVyRWxlbWVudCk6MiZyLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoVG4odCxuKS5yZW5kZXJUZXh0KTooNjcxMDg4NjQmci5mbGFnc3x8MTM0MjE3NzI4JnIuZmxhZ3MpJiZQbih0LG4pLmRlc3Ryb3koKX19KHQpLHRyKHQpJiZ0LnJlbmRlcmVyLmRlc3Ryb3koKSx0LnN0YXRlfD0xMjh9fXZhciBlbz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkNyZWF0ZVZpZXdOb2Rlcz0wXT0iQ3JlYXRlVmlld05vZGVzIix0W3QuQ2hlY2tOb0NoYW5nZXM9MV09IkNoZWNrTm9DaGFuZ2VzIix0W3QuQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cz0yXT0iQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cyIsdFt0LkNoZWNrQW5kVXBkYXRlPTNdPSJDaGVja0FuZFVwZGF0ZSIsdFt0LkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M9NF09IkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MiLHRbdC5EZXN0cm95PTVdPSJEZXN0cm95Iix0fSh7fSk7ZnVuY3Rpb24gbm8odCxlKXt2YXIgbj10LmRlZjtpZigzMzU1NDQzMiZuLm5vZGVGbGFncylmb3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIGk9bi5ub2Rlc1tyXTszMzU1NDQzMiZpLmZsYWdzP2lvKEluKHQscikuY29tcG9uZW50VmlldyxlKTowPT0oMzM1NTQ0MzImaS5jaGlsZEZsYWdzKSYmKHIrPWkuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIHJvKHQsZSl7dmFyIG49dC5kZWY7aWYoMTY3NzcyMTYmbi5ub2RlRmxhZ3MpZm9yKHZhciByPTA7cjxuLm5vZGVzLmxlbmd0aDtyKyspe3ZhciBpPW4ubm9kZXNbcl07aWYoMTY3NzcyMTYmaS5mbGFncylmb3IodmFyIG89SW4odCxyKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGE9MDthPG8ubGVuZ3RoO2ErKylpbyhvW2FdLGUpO2Vsc2UgMD09KDE2Nzc3MjE2JmkuY2hpbGRGbGFncykmJihyKz1pLmNoaWxkQ291bnQpfX1mdW5jdGlvbiBpbyh0LGUpe3ZhciBuPXQuc3RhdGU7c3dpdGNoKGUpe2Nhc2UgZW8uQ2hlY2tOb0NoYW5nZXM6MD09KDEyOCZuKSYmKDEyPT0oMTImbik/UWkodCk6NjQmbiYmb28odCxlby5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzKSk7YnJlYWs7Y2FzZSBlby5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzOjA9PSgxMjgmbikmJigzMiZuP1FpKHQpOjY0Jm4mJm9vKHQsZSkpO2JyZWFrO2Nhc2UgZW8uQ2hlY2tBbmRVcGRhdGU6MD09KDEyOCZuKSYmKDEyPT0oMTImbik/S2kodCk6NjQmbiYmb28odCxlby5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzKSk7YnJlYWs7Y2FzZSBlby5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzOjA9PSgxMjgmbikmJigzMiZuP0tpKHQpOjY0Jm4mJm9vKHQsZSkpO2JyZWFrO2Nhc2UgZW8uRGVzdHJveTp0byh0KTticmVhaztjYXNlIGVvLkNyZWF0ZVZpZXdOb2RlczpHaSh0KX19ZnVuY3Rpb24gb28odCxlKXtybyh0LGUpLG5vKHQsZSl9ZnVuY3Rpb24gYW8odCxlLG4scil7aWYodC5kZWYubm9kZUZsYWdzJmUmJnQuZGVmLm5vZGVGbGFncyZuKWZvcih2YXIgaT10LmRlZi5ub2Rlcy5sZW5ndGgsbz0wO288aTtvKyspe3ZhciBhPXQuZGVmLm5vZGVzW29dO2lmKGEuZmxhZ3MmZSYmYS5mbGFncyZuKXN3aXRjaChNbi5zZXRDdXJyZW50Tm9kZSh0LGEubm9kZUluZGV4KSxyKXtjYXNlIDA6a2kodCxhKTticmVhaztjYXNlIDE6SmkodCxhKX1hLmNoaWxkRmxhZ3MmZSYmYS5jaGlsZEZsYWdzJm58fChvKz1hLmNoaWxkQ291bnQpfX12YXIgc289ITE7ZnVuY3Rpb24gdW8odCxlLG4scixpLG8pe3JldHVybiBIaShjbyh0LGksaS5pbmplY3Rvci5nZXQodWUpLGUsbikscixvKX1mdW5jdGlvbiBsbyh0LGUsbixyLGksbyl7dmFyIGE9aS5pbmplY3Rvci5nZXQodWUpLHM9Y28odCxpLG5ldyBxbyhhKSxlLG4pLHU9d28ocik7cmV0dXJuIEhvKEFvLmNyZWF0ZSxIaSxudWxsLFtzLHUsb10pfWZ1bmN0aW9uIGNvKHQsZSxuLHIsaSl7dmFyIG89ZS5pbmplY3Rvci5nZXQoU24pLGE9ZS5pbmplY3Rvci5nZXQoYXQpO3JldHVybntuZ01vZHVsZTplLGluamVjdG9yOnQscHJvamVjdGFibGVOb2RlczpyLHNlbGVjdG9yT3JOb2RlOmksc2FuaXRpemVyOm8scmVuZGVyZXJGYWN0b3J5Om4scmVuZGVyZXI6bi5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpLGVycm9ySGFuZGxlcjphfX1mdW5jdGlvbiBmbyh0LGUsbixyKXt2YXIgaT13byhuKTtyZXR1cm4gSG8oQW8uY3JlYXRlLEJpLG51bGwsW3QsZSxpLHJdKX1mdW5jdGlvbiBobyh0LGUsbixyKXtyZXR1cm4gbj1nby5nZXQoZS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLnByb3ZpZGVyLnRva2VuKXx8d28obiksSG8oQW8uY3JlYXRlLFdpLG51bGwsW3QsZSxuLHJdKX1mdW5jdGlvbiBwbyh0LGUsbixyKXtyZXR1cm4gJHIodCxlLG4sZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9ITEsbj0hMTtyZXR1cm4gMD09PW1vLnNpemU/e2hhc092ZXJyaWRlczplLGhhc0RlcHJlY2F0ZWRPdmVycmlkZXM6bn06KHQucHJvdmlkZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9bW8uZ2V0KHQudG9rZW4pOzM4NDAmdC5mbGFncyYmciYmKGU9ITAsbj1ufHxyLmRlcHJlY2F0ZWRCZWhhdmlvcil9KSx0Lm1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt5by5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7aS5uZ0luamVjdGFibGVEZWYucHJvdmlkZWRJbj09PXQmJihlPSEwLG49bnx8ci5kZXByZWNhdGVkQmVoYXZpb3IpfSl9KSx7aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufSl9KHQpLG49ZS5oYXNEZXByZWNhdGVkT3ZlcnJpZGVzO3JldHVybiBlLmhhc092ZXJyaWRlcz8oZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0LnByb3ZpZGVycy5sZW5ndGg7ZSsrKXt2YXIgcj10LnByb3ZpZGVyc1tlXTtuJiYoci5mbGFnc3w9NDA5Nik7dmFyIGk9bW8uZ2V0KHIudG9rZW4pO2kmJihyLmZsYWdzPS0zODQxJnIuZmxhZ3N8aS5mbGFncyxyLmRlcHM9aXIoaS5kZXBzKSxyLnZhbHVlPWkudmFsdWUpfWlmKHlvLnNpemU+MCl7dmFyIG89bmV3IFNldCh0Lm1vZHVsZXMpO3lvLmZvckVhY2goZnVuY3Rpb24oZSxyKXtpZihvLmhhcyhyLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluKSl7dmFyIGk9e3Rva2VuOnIsZmxhZ3M6ZS5mbGFnc3wobj80MDk2OjApLGRlcHM6aXIoZS5kZXBzKSx2YWx1ZTplLnZhbHVlLGluZGV4OnQucHJvdmlkZXJzLmxlbmd0aH07dC5wcm92aWRlcnMucHVzaChpKSx0LnByb3ZpZGVyc0J5S2V5W1ZuKHIpXT1pfX0pfX0odD10LmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4gTG59KSksdCk6dH0ocikpfXZhciBtbz1uZXcgTWFwLHlvPW5ldyBNYXAsZ289bmV3IE1hcDtmdW5jdGlvbiB2byh0KXttby5zZXQodC50b2tlbix0KSwiZnVuY3Rpb24iPT10eXBlb2YgdC50b2tlbiYmdC50b2tlbi5uZ0luamVjdGFibGVEZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluJiZ5by5zZXQodC50b2tlbix0KX1mdW5jdGlvbiBibyh0LGUpe3ZhciBuPXNyKHNyKGUudmlld0RlZkZhY3RvcnkpLm5vZGVzWzBdLmVsZW1lbnQuY29tcG9uZW50Vmlldyk7Z28uc2V0KHQsbil9ZnVuY3Rpb24gX28oKXttby5jbGVhcigpLHlvLmNsZWFyKCksZ28uY2xlYXIoKX1mdW5jdGlvbiB3byh0KXtpZigwPT09bW8uc2l6ZSlyZXR1cm4gdDt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj1udWxsLHI9MDtyPHQubm9kZXMubGVuZ3RoO3IrKyl7dmFyIGk9dC5ub2Rlc1tyXTsxJmkuZmxhZ3MmJihuPWkpLG4mJjM4NDAmaS5mbGFncyYmbW8uaGFzKGkucHJvdmlkZXIudG9rZW4pJiYoZS5wdXNoKG4ubm9kZUluZGV4KSxuPW51bGwpfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dD10LmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4gTG59KTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylyKHQsZVtuXSk7cmV0dXJuIHQ7ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbj1lKzE7bjx0Lm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQubm9kZXNbbl07aWYoMSZyLmZsYWdzKXJldHVybjtpZigzODQwJnIuZmxhZ3Mpe3ZhciBpPXIucHJvdmlkZXIsbz1tby5nZXQoaS50b2tlbik7byYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xvLmZsYWdzLGkuZGVwcz1pcihvLmRlcHMpLGkudmFsdWU9by52YWx1ZSl9fX19ZnVuY3Rpb24geG8odCxlLG4scixpLG8sYSxzLHUsbCxjLGYsaCl7dmFyIGQ9dC5kZWYubm9kZXNbZV07cmV0dXJuIFppKHQsZCxuLHIsaSxvLGEscyx1LGwsYyxmLGgpLDIyNCZkLmZsYWdzP2puKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIE9vKHQsZSxuLHIsaSxvLGEscyx1LGwsYyxmLGgpe3ZhciBkPXQuZGVmLm5vZGVzW2VdO3JldHVybiAkaSh0LGQsbixyLGksbyxhLHMsdSxsLGMsZixoKSwyMjQmZC5mbGFncz9qbih0LGUpLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBDbyh0KXtyZXR1cm4gSG8oQW8uZGV0ZWN0Q2hhbmdlcyxLaSxudWxsLFt0XSl9ZnVuY3Rpb24gU28odCl7cmV0dXJuIEhvKEFvLmNoZWNrTm9DaGFuZ2VzLFFpLG51bGwsW3RdKX1mdW5jdGlvbiBFbyh0KXtyZXR1cm4gSG8oQW8uZGVzdHJveSx0byxudWxsLFt0XSl9dmFyIGtvLFRvLElvLEFvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuY3JlYXRlPTBdPSJjcmVhdGUiLHRbdC5kZXRlY3RDaGFuZ2VzPTFdPSJkZXRlY3RDaGFuZ2VzIix0W3QuY2hlY2tOb0NoYW5nZXM9Ml09ImNoZWNrTm9DaGFuZ2VzIix0W3QuZGVzdHJveT0zXT0iZGVzdHJveSIsdFt0LmhhbmRsZUV2ZW50PTRdPSJoYW5kbGVFdmVudCIsdH0oe30pO2Z1bmN0aW9uIGpvKHQsZSl7VG89dCxJbz1lfWZ1bmN0aW9uIFBvKHQsZSxuLHIpe3JldHVybiBqbyh0LGUpLEhvKEFvLmhhbmRsZUV2ZW50LHQuZGVmLmhhbmRsZUV2ZW50LG51bGwsW3QsZSxuLHJdKX1mdW5jdGlvbiBNbyh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IERuKEFvW2tvXSk7cmV0dXJuIGpvKHQsVm8odCwwKSksdC5kZWYudXBkYXRlRGlyZWN0aXZlcyhmdW5jdGlvbih0LG4scil7Zm9yKHZhciBpPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWlbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP1JvKHQsYSxyLGkpOkRvKHQsYSxyLGkpLDE2Mzg0JmEuZmxhZ3MmJmpvKHQsVm8odCxuKSksMjI0JmEuZmxhZ3M/am4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSx0KX1mdW5jdGlvbiBObyh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IERuKEFvW2tvXSk7cmV0dXJuIGpvKHQsVW8odCwwKSksdC5kZWYudXBkYXRlUmVuZGVyZXIoZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgaT1bXSxvPTM7bzxhcmd1bWVudHMubGVuZ3RoO28rKylpW28tM109YXJndW1lbnRzW29dO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9Sbyh0LGEscixpKTpEbyh0LGEscixpKSwzJmEuZmxhZ3MmJmpvKHQsVW8odCxuKSksMjI0JmEuZmxhZ3M/am4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSx0KX1mdW5jdGlvbiBSbyh0LGUsbixpKXtpZihaaS5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkoW3QsZSxuXSxpKSkpe3ZhciBvPTE9PT1uP2lbMF06aTtpZigxNjM4NCZlLmZsYWdzKXtmb3IodmFyIGE9e30scz0wO3M8ZS5iaW5kaW5ncy5sZW5ndGg7cysrKXt2YXIgdT1lLmJpbmRpbmdzW3NdLGw9b1tzXTs4JnUuZmxhZ3MmJihhWyhkPXUubm9uTWluaWZpZWROYW1lLCJuZy1yZWZsZWN0LSIrKGQ9ZC5yZXBsYWNlKC9bJEBdL2csIl8iKS5yZXBsYWNlKExvLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiItIit0WzFdLnRvTG93ZXJDYXNlKCl9KSkpXT1GbyhsKSl9dmFyIGM9ZS5wYXJlbnQsZj1Jbih0LGMubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2lmKGMuZWxlbWVudC5uYW1lKWZvcih2YXIgaCBpbiBhKW51bGwhPShsPWFbaF0pP3QucmVuZGVyZXIuc2V0QXR0cmlidXRlKGYsaCxsKTp0LnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShmLGgpO2Vsc2UgdC5yZW5kZXJlci5zZXRWYWx1ZShmLCJiaW5kaW5ncz0iK0pTT04uc3RyaW5naWZ5KGEsbnVsbCwyKSl9fXZhciBkfWZ1bmN0aW9uIERvKHQsZSxuLGkpeyRpLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShbdCxlLG5dLGkpKX12YXIgTG89LyhbQS1aXSkvZztmdW5jdGlvbiBGbyh0KXt0cnl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpLnNsaWNlKDAsMzApOnR9Y2F0Y2godCl7cmV0dXJuIltFUlJPUl0gRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBzZXJpYWxpemUgdGhlIHZhbHVlIn19ZnVuY3Rpb24gVm8odCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dO2lmKDE2Mzg0JnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIFVvKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTtpZigzJnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfXZhciB6bz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLm5vZGVJbmRleD1lLG51bGw9PWUmJih0aGlzLm5vZGVJbmRleD1lPTApLHRoaXMubm9kZURlZj10LmRlZi5ub2Rlc1tlXTtmb3IodmFyIG49dGhpcy5ub2RlRGVmLHI9dDtuJiYwPT0oMSZuLmZsYWdzKTspbj1uLnBhcmVudDtpZighbilmb3IoOyFuJiZyOyluPSRuKHIpLHI9ci5wYXJlbnQ7dGhpcy5lbERlZj1uLHRoaXMuZWxWaWV3PXJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxPckNvbXBWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEluKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYubm9kZUluZGV4KS5jb21wb25lbnRWaWV3fHx0aGlzLnZpZXd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBHcih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuZWxEZWYpZm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJnQucHVzaChuLnByb3ZpZGVyLnRva2VuKSxlKz1uLmNoaWxkQ291bnR9cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5lbERlZil7Qm8odGhpcy5lbFZpZXcsdGhpcy5lbERlZix0KTtmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmQm8odGhpcy5lbFZpZXcsbix0KSxlKz1uLmNoaWxkQ291bnR9fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50UmVuZGVyRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe2Zvcig7dCYmIXRyKHQpOyl0PXQucGFyZW50O3JldHVybiB0LnBhcmVudD9Jbih0LnBhcmVudCwkbih0KS5ub2RlSW5kZXgpOm51bGx9KHRoaXMuZWxPckNvbXBWaWV3KTtyZXR1cm4gdD90LnJlbmRlckVsZW1lbnQ6dm9pZCAwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVuZGVyTm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiAyJnRoaXMubm9kZURlZi5mbGFncz9Kbih0aGlzLnZpZXcsdGhpcy5ub2RlRGVmKTpKbih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixpPVtdLG89MTtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWlbby0xXT1hcmd1bWVudHNbb107MiZ0aGlzLm5vZGVEZWYuZmxhZ3M/KGU9dGhpcy52aWV3LmRlZixuPXRoaXMubm9kZURlZi5ub2RlSW5kZXgpOihlPXRoaXMuZWxWaWV3LmRlZixuPXRoaXMuZWxEZWYubm9kZUluZGV4KTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPTA7cjw9ZTtyKyspMyZ0Lm5vZGVzW3JdLmZsYWdzJiZuKys7cmV0dXJuIG59KGUsbikscz0tMTtlLmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4rK3M9PT1hPyhlPXQuZXJyb3IpLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5kKShbdF0saSkpOkxuO3ZhciBlfSksczxhJiYodC5lcnJvcigiSWxsZWdhbCBzdGF0ZTogdGhlIFZpZXdEZWZpbml0aW9uRmFjdG9yeSBkaWQgbm90IGNhbGwgdGhlIGxvZ2dlciEiKSx0LmVycm9yLmFwcGx5KHQsT2JqZWN0KHIuZCkoaSkpKX0sdH0oKTtmdW5jdGlvbiBCbyh0LGUsbil7Zm9yKHZhciByIGluIGUucmVmZXJlbmNlcyluW3JdPUlpKHQsZSxlLnJlZmVyZW5jZXNbcl0pfWZ1bmN0aW9uIEhvKHQsZSxuLHIpe3ZhciBpPWtvLG89VG8sYT1Jbzt0cnl7a289dDt2YXIgcz1lLmFwcGx5KG4scik7cmV0dXJuIFRvPW8sSW89YSxrbz1pLHN9Y2F0Y2godCl7aWYocnQodCl8fCFUbyl0aHJvdyB0O3Rocm93IGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQudG9TdHJpbmcoKSkpLFJuKHQsZSksdH0odCxXbygpKX19ZnVuY3Rpb24gV28oKXtyZXR1cm4gVG8/bmV3IHpvKFRvLElvKTpudWxsfXZhciBxbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgWW8odGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbGVnYXRlLndoZW5SZW5kZXJpbmdEb25lP3RoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmUoKTpQcm9taXNlLnJlc29sdmUobnVsbCl9LHR9KCksWW89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dCx0aGlzLmRhdGE9dGhpcy5kZWxlZ2F0ZS5kYXRhfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95Tm9kZT1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7Q2UuZGVsZXRlKHQubmF0aXZlTm9kZSl9KFNlKHQpKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlJiZ0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKSxyPVdvKCk7aWYocil7dmFyIGk9bmV3IHdlKG4sbnVsbCxyKTtpLm5hbWU9dCxFZShpKX1yZXR1cm4gbn0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCksbj1XbygpO3JldHVybiBuJiZFZShuZXcgX2UoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KSxuPVdvKCk7cmV0dXJuIG4mJkVlKG5ldyBfZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49U2UodCkscj1TZShlKTtuJiZyJiZuIGluc3RhbmNlb2Ygd2UmJm4uYWRkQ2hpbGQociksdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVNlKHQpLGk9U2UoZSksbz1TZShuKTtyJiZpJiZyIGluc3RhbmNlb2Ygd2UmJnIuaW5zZXJ0QmVmb3JlKG8saSksdGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPVNlKHQpLHI9U2UoZSk7biYmciYmbiBpbnN0YW5jZW9mIHdlJiZuLnJlbW92ZUNoaWxkKHIpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KSxuPVdvKCk7cmV0dXJuIG4mJkVlKG5ldyB3ZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TZSh0KTtpJiZpIGluc3RhbmNlb2Ygd2UmJihpLmF0dHJpYnV0ZXNbcj9yKyI6IitlOmVdPW4pLHRoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLHIpfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVNlKHQpO3ImJnIgaW5zdGFuY2VvZiB3ZSYmKHIuYXR0cmlidXRlc1tuP24rIjoiK2U6ZV09bnVsbCksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPVNlKHQpO24mJm4gaW5zdGFuY2VvZiB3ZSYmKG4uY2xhc3Nlc1tlXT0hMCksdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPVNlKHQpO24mJm4gaW5zdGFuY2VvZiB3ZSYmKG4uY2xhc3Nlc1tlXT0hMSksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TZSh0KTtpJiZpIGluc3RhbmNlb2Ygd2UmJihpLnN0eWxlc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuLHIpfSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U2UodCk7ciYmciBpbnN0YW5jZW9mIHdlJiYoci5zdHlsZXNbZV09bnVsbCksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsbil9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1TZSh0KTtyJiZyIGluc3RhbmNlb2Ygd2UmJihyLnByb3BlcnRpZXNbZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgcj1TZSh0KTtyJiZyLmxpc3RlbmVycy5wdXNoKG5ldyBmdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMuY2FsbGJhY2s9ZX0oZSxuKSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0fSgpO2Z1bmN0aW9uIEdvKHQsZSxuKXtyZXR1cm4gbmV3IFFvKHQsZSxuKX12YXIgUW89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLm1vZHVsZVR5cGU9ZSxpLl9ib290c3RyYXBDb21wb25lbnRzPW4saS5fbmdNb2R1bGVEZWZGYWN0b3J5PXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKCl7aWYoIXNvKXtzbz0hMDt2YXIgdD10ZSgpP3tzZXRDdXJyZW50Tm9kZTpqbyxjcmVhdGVSb290VmlldzpsbyxjcmVhdGVFbWJlZGRlZFZpZXc6Zm8sY3JlYXRlQ29tcG9uZW50VmlldzpobyxjcmVhdGVOZ01vZHVsZVJlZjpwbyxvdmVycmlkZVByb3ZpZGVyOnZvLG92ZXJyaWRlQ29tcG9uZW50VmlldzpibyxjbGVhck92ZXJyaWRlczpfbyxjaGVja0FuZFVwZGF0ZVZpZXc6Q28sY2hlY2tOb0NoYW5nZXNWaWV3OlNvLGRlc3Ryb3lWaWV3OkVvLGNyZWF0ZURlYnVnQ29udGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgem8odCxlKX0saGFuZGxlRXZlbnQ6UG8sdXBkYXRlRGlyZWN0aXZlczpNbyx1cGRhdGVSZW5kZXJlcjpOb306e3NldEN1cnJlbnROb2RlOmZ1bmN0aW9uKCl7fSxjcmVhdGVSb290Vmlldzp1byxjcmVhdGVFbWJlZGRlZFZpZXc6QmksY3JlYXRlQ29tcG9uZW50VmlldzpXaSxjcmVhdGVOZ01vZHVsZVJlZjokcixvdmVycmlkZVByb3ZpZGVyOkxuLG92ZXJyaWRlQ29tcG9uZW50VmlldzpMbixjbGVhck92ZXJyaWRlczpMbixjaGVja0FuZFVwZGF0ZVZpZXc6S2ksY2hlY2tOb0NoYW5nZXNWaWV3OlFpLGRlc3Ryb3lWaWV3OnRvLGNyZWF0ZURlYnVnQ29udGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgem8odCxlKX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHQuZGVmLmhhbmRsZUV2ZW50KHQsZSxuLHIpfSx1cGRhdGVEaXJlY3RpdmVzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZURpcmVjdGl2ZXMoMD09PWU/eG86T28sdCl9LHVwZGF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZVJlbmRlcmVyKDA9PT1lP3hvOk9vLHQpfX07TW4uc2V0Q3VycmVudE5vZGU9dC5zZXRDdXJyZW50Tm9kZSxNbi5jcmVhdGVSb290Vmlldz10LmNyZWF0ZVJvb3RWaWV3LE1uLmNyZWF0ZUVtYmVkZGVkVmlldz10LmNyZWF0ZUVtYmVkZGVkVmlldyxNbi5jcmVhdGVDb21wb25lbnRWaWV3PXQuY3JlYXRlQ29tcG9uZW50VmlldyxNbi5jcmVhdGVOZ01vZHVsZVJlZj10LmNyZWF0ZU5nTW9kdWxlUmVmLE1uLm92ZXJyaWRlUHJvdmlkZXI9dC5vdmVycmlkZVByb3ZpZGVyLE1uLm92ZXJyaWRlQ29tcG9uZW50Vmlldz10Lm92ZXJyaWRlQ29tcG9uZW50VmlldyxNbi5jbGVhck92ZXJyaWRlcz10LmNsZWFyT3ZlcnJpZGVzLE1uLmNoZWNrQW5kVXBkYXRlVmlldz10LmNoZWNrQW5kVXBkYXRlVmlldyxNbi5jaGVja05vQ2hhbmdlc1ZpZXc9dC5jaGVja05vQ2hhbmdlc1ZpZXcsTW4uZGVzdHJveVZpZXc9dC5kZXN0cm95VmlldyxNbi5yZXNvbHZlRGVwPWJpLE1uLmNyZWF0ZURlYnVnQ29udGV4dD10LmNyZWF0ZURlYnVnQ29udGV4dCxNbi5oYW5kbGVFdmVudD10LmhhbmRsZUV2ZW50LE1uLnVwZGF0ZURpcmVjdGl2ZXM9dC51cGRhdGVEaXJlY3RpdmVzLE1uLnVwZGF0ZVJlbmRlcmVyPXQudXBkYXRlUmVuZGVyZXIsTW4uZGlydHlQYXJlbnRRdWVyaWVzPUVpfX0oKTt2YXIgZT1zcih0aGlzLl9uZ01vZHVsZURlZkZhY3RvcnkpO3JldHVybiBNbi5jcmVhdGVOZ01vZHVsZVJlZih0aGlzLm1vZHVsZVR5cGUsdHx8Ti5OVUxMLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHMsZSl9LGV9KFB0KTtmdW5jdGlvbiBLbyh0LGUsbil7dCE9ZSYmJG8obil9ZnVuY3Rpb24gWm8odCxlKXtudWxsIT10JiYkbyhlKX1mdW5jdGlvbiBYbyh0LGUpe251bGw9PXQmJiRvKGUpfWZ1bmN0aW9uICRvKHQpe3Rocm93IG5ldyBFcnJvcigiQVNTRVJUSU9OIEVSUk9SOiAiK3QpfWZ1bmN0aW9uIEpvKHQsZSxuLHIpe3ZhciBpPXI/ZTpuO2kmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0yKWVbbisxXS5jYWxsKHRbZVtuXV0pfSh0LGkpfSJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cubmdEZXZNb2RlPSEwKSwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJihzZWxmLm5nRGV2TW9kZT0hMCksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJihnbG9iYWwubmdEZXZNb2RlPSEwKSk7dmFyIHRhLGVhLG5hLHJhLGlhLG9hLGFhLHNhLHVhLGxhLGNhPSJfX25nSG9zdExOb2RlX18iLGZhPVByb21pc2UucmVzb2x2ZShudWxsKSxoYT1bMCwwXSxkYT1udWxsLHBhPSExO2Z1bmN0aW9uIG1hKHQsZSl7dmFyIG49ZGE7cmV0dXJuIHNhPXQmJnQuZGF0YSx1YT10JiZ0LmRpcmVjdGl2ZXMsaWE9dCYmdC50Vmlldy5kYXRhLGFhPXQmJjE9PSgxJnQuZmxhZ3MpLHRhPXQmJnQucmVuZGVyZXIsdCYmdC5iaW5kaW5nSW5kZXg8MCYmKHQuYmluZGluZ0luZGV4PXQuYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPWUmJihuYT1lLHJhPSEwKSxkYT10LG9hPXQmJnQucXVlcmllcyxufWZ1bmN0aW9uIHlhKHQpe3BhfHxKbyh1YSxkYS50Vmlldy52aWV3SG9va3MsZGEudFZpZXcudmlld0NoZWNrSG9va3MsYWEpLGRhLmZsYWdzJj0tNixkYS5saWZlY3ljbGVTdGFnZT0xLGRhLmJpbmRpbmdJbmRleD0tMSxtYSh0LG51bGwpfWZ1bmN0aW9uIGdhKCl7YmEoKTt2YXIgdD1kYS50Vmlldzt0LmZpcnN0VGVtcGxhdGVQYXNzPSExLHZhKHQuaG9zdEJpbmRpbmdzKSxmdW5jdGlvbih0KXtpZihudWxsIT10KWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSs9Mil4YSh0W2VdLHRbZSsxXSl9KHQuY29tcG9uZW50cyl9ZnVuY3Rpb24gdmEodCl7aWYobnVsbCE9dClmb3IodmFyIGU9ZGEudFZpZXcuZGlyZWN0aXZlcyxuPTA7bjx0Lmxlbmd0aDtuKz0yKXt2YXIgcj10W25dLGk9ZVtyXTtpLmhvc3RCaW5kaW5ncyYmaS5ob3N0QmluZGluZ3Mocix0W24rMV0pfX1mdW5jdGlvbiBiYSgpe2lmKCFwYSl7dmFyIHQ9ZGEudFZpZXc7KGZ1bmN0aW9uKHQsZSxuKXsxPT09dC5saWZlY3ljbGVTdGFnZSYmKEpvKHQuZGlyZWN0aXZlcyxlLmluaXRIb29rcyxlLmNoZWNrSG9va3MsbiksdC5saWZlY3ljbGVTdGFnZT0yKX0pKGRhLHQsYWEpLEpvKHVhLHQuY29udGVudEhvb2tzLHQuY29udGVudENoZWNrSG9va3MsYWEpfX1mdW5jdGlvbiBfYSh0LGUsbixyLGksbyl7dmFyIGEscyx1LGwsYyxmLGgsZCxwLG09cmEseT1uYTt0cnl7cmE9ITAsbmE9bnVsbDt2YXIgZz0yO251bGw9PXQmJihzPW51bGwsdT0yLGw9bnVsbCxjPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXtyZXR1cm57cGFyZW50OmRhLGlkOi0xLGZsYWdzOjExLG5vZGU6bnVsbCxkYXRhOltdLGRpcmVjdGl2ZXM6bnVsbCx0VmlldzpuLGNsZWFudXA6bnVsbCxyZW5kZXJlcjplLGNoaWxkOm51bGwsdGFpbDpudWxsLG5leHQ6bnVsbCxiaW5kaW5nU3RhcnRJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsdGVtcGxhdGU6cixjb250ZXh0OmksZHluYW1pY1ZpZXdDb3VudDowLGxpZmVjeWNsZVN0YWdlOjEscXVlcmllczpudWxsLGluamVjdG9yOmRhJiZkYS5pbmplY3Rvcn19KDAscixmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQubmdQcml2YXRlRGF0YXx8KHQubmdQcml2YXRlRGF0YT1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOltdLGRpcmVjdGl2ZXM6bnVsbCxmaXJzdFRlbXBsYXRlUGFzczohMCxpbml0SG9va3M6bnVsbCxjaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLHBpcGVEZXN0cm95SG9va3M6bnVsbCxob3N0QmluZGluZ3M6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dCgpOnQscGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2UoKTplLGN1cnJlbnRNYXRjaGVzOm51bGx9fShlLG4pKX0oZSxpfHxudWxsLG98fG51bGwpLGUsbiksZj1yYT9uYTpuYSYmbmEucGFyZW50LGg9KHJhP29hOm5hJiZuYS5xdWVyaWVzKXx8ZiYmZi5xdWVyaWVzJiZmLnF1ZXJpZXMuY2hpbGQoKSxwPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXtyZXR1cm57dHlwZTp0LG5hdGl2ZTpyLHZpZXc6ZSxwYXJlbnQ6bixjaGlsZDpudWxsLG5leHQ6bnVsbCxub2RlSW5qZWN0b3I6bj9uLm5vZGVJbmplY3RvcjpudWxsLGRhdGE6aSxxdWVyaWVzOm8sdE5vZGU6bnVsbCxwTmV4dE9yUGFyZW50Om51bGwsZHluYW1pY0xDb250YWluZXJOb2RlOm51bGx9fSh1LGRhLGYsbCwoZD1udWxsIT1jKT9jOm51bGwsaCksMj09KDImdSkmJmQmJihuZ0Rldk1vZGUmJlpvKGMubm9kZSwiTFZpZXcubm9kZSBzaG91bGQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpLGMubm9kZT1wKSxudWxsIT1zJiYobmdEZXZNb2RlJiZmdW5jdGlvbih0LGUpe251bGw9PWUmJihlPXNhKSxLbyhlLmxlbmd0aCx0LCJpbmRleCAiK3QrIiBleHBlY3RlZCB0byBiZSBhdCB0aGUgZW5kIG9mIGFyciAobGVuZ3RoICIrZS5sZW5ndGgrIikiKX0ocyksc2Fbc109cCxzPj1pYS5sZW5ndGg/aWFbc109bnVsbDpwLnROb2RlPWlhW3NdLHJhPyhvYT1udWxsLG5hLnZpZXchPT1kYSYmMiE9PW5hLnR5cGV8fChuZ0Rldk1vZGUmJlpvKG5hLmNoaWxkLCJwcmV2aW91c09yUGFyZW50Tm9kZSdzIGNoaWxkIHNob3VsZCBub3QgaGF2ZSBiZWVuIHNldC4iKSxuYS5jaGlsZD1wKSk6bmEmJihuZ0Rldk1vZGUmJlpvKG5hLm5leHQsInByZXZpb3VzT3JQYXJlbnROb2RlJ3MgbmV4dCBwcm9wZXJ0eSBzaG91bGQgbm90IGhhdmUgYmVlbiBzZXQgIitzKyIuIiksbmEubmV4dD1wLG5hLmR5bmFtaWNMQ29udGFpbmVyTm9kZSYmKG5hLmR5bmFtaWNMQ29udGFpbmVyTm9kZS5uZXh0PXApKSksbmE9cCxyYT0hMCx0PXAsZz0xKSxhPW1hKHQuZGF0YSx0KSxlKGcsbiksZ2EoKSx3YSgpfWZpbmFsbHl7eWEoYSkscmE9bSxuYT15fXJldHVybiB0fWZ1bmN0aW9uIHdhKCl7Zm9yKHZhciB0PWRhLmNoaWxkO251bGwhPT10O3Q9dC5uZXh0KWlmKDAhPT10LmR5bmFtaWNWaWV3Q291bnQmJnQudmlld3MpZm9yKHZhciBlPXQsbj0wO248ZS52aWV3cy5sZW5ndGg7bisrKXt2YXIgcj1lLnZpZXdzW25dO19hKHIsci5kYXRhLnRlbXBsYXRlLHIuZGF0YS5jb250ZXh0LHRhKX19ZnVuY3Rpb24geGEodCxlKXtuZ0Rldk1vZGUmJlNhKGUpO3ZhciBuLHIsaT1zYVtlXTtuZ0Rldk1vZGUmJihyPTMsWG8obj1pLCJzaG91bGQgYmUgY2FsbGVkIHdpdGggYSBub2RlIiksS28obi50eXBlLHIsInNob3VsZCBiZSBhICIrZnVuY3Rpb24odCl7cmV0dXJuIDE9PXQ/IlByb2plY3Rpb24iOjA9PXQ/IkNvbnRhaW5lciI6Mj09dD8iVmlldyI6Mz09dD8iRWxlbWVudCI6Ijx1bmtub3duPiJ9KHIpKSksbmdEZXZNb2RlJiZYbyhpLmRhdGEsIkNvbXBvbmVudCdzIGhvc3Qgbm9kZSBzaG91bGQgaGF2ZSBhbiBMVmlldyBhdHRhY2hlZC4iKTt2YXIgbyxhPWkuZGF0YTs4PT0oOCZhLmZsYWdzKSYmNiZhLmZsYWdzJiYobmdEZXZNb2RlJiZTYSh0LHVhKSxDYShhLGksZGEudFZpZXcuZGlyZWN0aXZlc1t0XSwobz11YVt0XSxBcnJheS5pc0FycmF5KG8pP29bMF06bykpKX1mdW5jdGlvbiBPYSh0KXt2YXIgZT1FYSh0KTtuZ0Rldk1vZGUmJlhvKGUuZGF0YSwiQ29tcG9uZW50IGhvc3Qgbm9kZSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gYW4gTFZpZXciKSxDYShlLmRhdGEsZSxlLnZpZXcudFZpZXcuZGlyZWN0aXZlc1tlLnROb2RlLmZsYWdzPj4xM10sdCl9ZnVuY3Rpb24gQ2EodCxlLG4scil7dmFyIGk9bWEodCxlKSxvPW4udGVtcGxhdGU7dHJ5e28oMSZ0LmZsYWdzPzM6MixyKSxnYSgpLHdhKCl9ZmluYWxseXt5YShpKX19ZnVuY3Rpb24gU2EodCxlKXtudWxsPT1lJiYoZT1zYSksdD49KGU/ZS5sZW5ndGg6MCkmJiRvKCJpbmRleCBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGRhdGEgaW5kZXgiKX1mdW5jdGlvbiBFYSh0KXtuZ0Rldk1vZGUmJlhvKHQsImV4cGVjdGluZyBjb21wb25lbnQgZ290IG51bGwiKTt2YXIgZT10W2NhXTtyZXR1cm4gbmdEZXZNb2RlJiZYbyh0LCJvYmplY3QgaXMgbm90IGEgY29tcG9uZW50IiksZX1sYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl92aWV3PXQsdGhpcy5jb250ZXh0PWV9cmV0dXJuIHQucHJvdG90eXBlLl9zZXRDb21wb25lbnRDb250ZXh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmlldz10LHRoaXMuY29udGV4dD1lfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5tYXJrRm9yQ2hlY2s9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQ7bnVsbCE9ZS5wYXJlbnQ7KWUuZmxhZ3N8PTQsZT1lLnBhcmVudDt2YXIgbixyO2UuZmxhZ3N8PTQsbmdEZXZNb2RlJiZYbyhlLmNvbnRleHQsInJvb3RDb250ZXh0IiksKG49ZS5jb250ZXh0KS5jbGVhbj09ZmEmJihuLmNsZWFuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3JldHVybiByPXR9KSxuLnNjaGVkdWxlcihmdW5jdGlvbigpe3ZhciB0LGU7ZT1FYSgodD1mdW5jdGlvbih0KXtuZ0Rldk1vZGUmJlhvKHQsImNvbXBvbmVudCIpO2Zvcih2YXIgZT1FYSh0KS52aWV3O2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfShuLmNvbXBvbmVudCkpLmNvbnRleHQuY29tcG9uZW50KSxuZ0Rldk1vZGUmJlhvKGUuZGF0YSwiQ29tcG9uZW50IGhvc3Qgbm9kZSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gYW4gTFZpZXciKSxmdW5jdGlvbihuLHIsaSxvKXt2YXIgYT1tYSh0LGUpO3RyeXtlYS5iZWdpbiYmZWEuYmVnaW4oKSxiYSgpLHZhKGhhKSx4YSgwLDApfWZpbmFsbHl7ZWEuZW5kJiZlYS5lbmQoKSx5YShhKX19KCkscihudWxsKSxuLmNsZWFuPWZhfSkpfSh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5mbGFncyY9LTl9LHQucHJvdG90eXBlLnJlYXR0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5mbGFnc3w9OH0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe09hKHRoaXMuY29udGV4dCl9LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3BhPSEwO3RyeXtPYSh0KX1maW5hbGx5e3BhPSExfX0odGhpcy5jb250ZXh0KX0sdH0oKSxPYmplY3Qoci5iKShmdW5jdGlvbih0LGUsbil7dmFyIHI9bGEuY2FsbCh0aGlzLHQuZGF0YSxuKXx8dGhpcztyZXR1cm4gci5fbFZpZXdOb2RlPXQscn0sbGEpfSxES1RiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0pfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LEVobWs6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByLGk9bigiZWlocyIpO2Z1bmN0aW9uIG8oKXt0cnl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKHQpe3JldHVybiBpLmEuZT10LGkuYX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gcj10LG99fSwiRW44KyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCl9LCJGL1hMIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigibmtZNyIpLGk9bigiSVVUYiIpLG89bigiRzVKMSIpLGE9bigiUFU4TCIpO2Z1bmN0aW9uIHMoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49dFt0Lmxlbmd0aC0xXTtzd2l0Y2goT2JqZWN0KHIuYSkobik/dC5wb3AoKTpuPXZvaWQgMCx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBPYmplY3Qoby5iKShuKTtjYXNlIDE6cmV0dXJuIG4/T2JqZWN0KGkuYSkodCxuKTpPYmplY3QoYS5hKSh0WzBdKTtkZWZhdWx0OnJldHVybiBPYmplY3QoaS5hKSh0LG4pfX19LEZGT286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIjJCZGoiKSxvPW4oIjZhaHciKSxhPW4oInB1Z1QiKSxzPW4oIkwvVjkiKSx1PW4oImlMeFEiKSxsPW4oIkRLVGIiKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2goaS5zeW5jRXJyb3JWYWx1ZT1udWxsLGkuc3luY0Vycm9yVGhyb3duPSExLGkuc3luY0Vycm9yVGhyb3dhYmxlPSExLGkuaXNTdG9wcGVkPSExLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDppLmRlc3RpbmF0aW9uPW8uYTticmVhaztjYXNlIDE6aWYoIWUpe2kuZGVzdGluYXRpb249by5hO2JyZWFrfWlmKCJvYmplY3QiPT10eXBlb2YgZSl7aWYoaChlKSl7dmFyIGE9ZVtzLmFdKCk7aS5zeW5jRXJyb3JUaHJvd2FibGU9YS5zeW5jRXJyb3JUaHJvd2FibGUsaS5kZXN0aW5hdGlvbj1hLGEuYWRkKGkpfWVsc2UgaS5zeW5jRXJyb3JUaHJvd2FibGU9ITAsaS5kZXN0aW5hdGlvbj1uZXcgZihpLGUpO2JyZWFrfWRlZmF1bHQ6aS5zeW5jRXJyb3JUaHJvd2FibGU9ITAsaS5kZXN0aW5hdGlvbj1uZXcgZihpLGUsbixyKX1yZXR1cm4gaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGVbcy5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmNyZWF0ZT1mdW5jdGlvbih0LG4scil7dmFyIGk9bmV3IGUodCxuLHIpO3JldHVybiBpLnN5bmNFcnJvclRocm93YWJsZT0hMSxpfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50LGU9dGhpcy5fcGFyZW50cztyZXR1cm4gdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMudW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9wYXJlbnRzPWUsdGhpc30sZX0oYS5hKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsYSl7dmFyIHMsdT10LmNhbGwodGhpcyl8fHRoaXM7dS5fcGFyZW50U3Vic2NyaWJlcj1lO3ZhciBsPXU7cmV0dXJuIE9iamVjdChpLmEpKG4pP3M9bjpuJiYocz1uLm5leHQscj1uLmVycm9yLGE9bi5jb21wbGV0ZSxuIT09by5hJiYobD1PYmplY3QuY3JlYXRlKG4pLE9iamVjdChpLmEpKGwudW5zdWJzY3JpYmUpJiZ1LmFkZChsLnVuc3Vic2NyaWJlLmJpbmQobCkpLGwudW5zdWJzY3JpYmU9dS51bnN1YnNjcmliZS5iaW5kKHUpKSksdS5fY29udGV4dD1sLHUuX25leHQ9cyx1Ll9lcnJvcj1yLHUuX2NvbXBsZXRlPWEsdX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQmJnRoaXMuX25leHQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fbmV4dCx0KSYmdGhpcy51bnN1YnNjcmliZSgpOnRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsdCl9fSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXIsbj11LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZztpZih0aGlzLl9lcnJvciluJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSx0aGlzLl9lcnJvcix0KSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9lcnJvcix0KSx0aGlzLnVuc3Vic2NyaWJlKCkpO2Vsc2UgaWYoZS5zeW5jRXJyb3JUaHJvd2FibGUpbj8oZS5zeW5jRXJyb3JWYWx1ZT10LGUuc3luY0Vycm9yVGhyb3duPSEwKTpPYmplY3QobC5hKSh0KSx0aGlzLnVuc3Vic2NyaWJlKCk7ZWxzZXtpZih0aGlzLnVuc3Vic2NyaWJlKCksbil0aHJvdyB0O09iamVjdChsLmEpKHQpfX19LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7aWYodGhpcy5fY29tcGxldGUpe3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbXBsZXRlLmNhbGwodC5fY29udGV4dCl9O3UuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSxuKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1YihuKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX0sZS5wcm90b3R5cGUuX190cnlPclVuc3ViPWZ1bmN0aW9uKHQsZSl7dHJ5e3QuY2FsbCh0aGlzLl9jb250ZXh0LGUpfWNhdGNoKHQpe2lmKHRoaXMudW5zdWJzY3JpYmUoKSx1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyB0O09iamVjdChsLmEpKHQpfX0sZS5wcm90b3R5cGUuX190cnlPclNldEVycm9yPWZ1bmN0aW9uKHQsZSxuKXtpZighdS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgbmV3IEVycm9yKCJiYWQgY2FsbCIpO3RyeXtlLmNhbGwodGhpcy5fY29udGV4dCxuKX1jYXRjaChlKXtyZXR1cm4gdS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/KHQuc3luY0Vycm9yVmFsdWU9ZSx0LnN5bmNFcnJvclRocm93bj0hMCwhMCk6KE9iamVjdChsLmEpKGUpLCEwKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt0aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fcGFyZW50U3Vic2NyaWJlcj1udWxsLHQudW5zdWJzY3JpYmUoKX0sZX0oYyk7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGN8fCJzeW5jRXJyb3JUaHJvd2FibGUiaW4gdCYmdFtzLmFdfX0sRlZTeTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciByPWZ1bmN0aW9uKCl7fSxpPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7fSxhPWZ1bmN0aW9uKCl7fSxzPWZ1bmN0aW9uKCl7fSx1PWZ1bmN0aW9uKCl7fX0sRnhiMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBkfSk7dmFyIHI9bigiNmJsRiIpLGk9bigiK3RKNCIpLG89bigiUzVYUSIpLGE9bigidTY3RCIpLHM9bigiSmNSdiIpLHU9bigiMmVQbCIpLGw9bigiL1dZdiIpLGM9bigiTWNTbyIpLGY9bigiRW44KyIpLGg9bigieFRsYSIpLGQ9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHIuYSlyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2lzU2NhbGFyPyhlLm5leHQodC52YWx1ZSksdm9pZCBlLmNvbXBsZXRlKCkpOnQuc3Vic2NyaWJlKGUpfTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtoLmFdKXJldHVybiBPYmplY3Qocy5hKSh0KTtpZihPYmplY3QodS5hKSh0KSlyZXR1cm4gT2JqZWN0KGkuYSkodCk7aWYoT2JqZWN0KGwuYSkodCkpcmV0dXJuIE9iamVjdChvLmEpKHQpO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2YuYV0pcmV0dXJuIE9iamVjdChhLmEpKHQpO3ZhciBlPU9iamVjdChjLmEpKHQpPyJhbiBpbnZhbGlkIG9iamVjdCI6IiciK3QrIiciO3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBwcm92aWRlZCAiK2UrIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBBcnJheSwgb3IgSXRlcmFibGUuIil9fSxGenFjOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIklwMFIiKSxpPW4oIkNjbkciKSxvPW5ldyBpLm8oImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QoaS5WKShyLmQpfX0pLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMudmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IGkubSx0JiYodGhpcy52YWx1ZT0odC5ib2R5P3QuYm9keS5kaXI6bnVsbCl8fCh0LmRvY3VtZW50RWxlbWVudD90LmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShvLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkscz1mdW5jdGlvbigpe319LEc1SjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiNmJsRiIpLGk9bmV3IHIuYShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wbGV0ZSgpfSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHIuYShmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBlLmNvbXBsZXRlKCl9KX0pfSh0KTppfX0sR2kzaTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigibXJTRyIpLGk9bigiRkZPbyIpLG89bigiVDFETSIpO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9by5hKSxmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBzKHQsZSkpfX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmR1ZVRpbWU9dCx0aGlzLnNjaGVkdWxlcj1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB1KHQsdGhpcy5kdWVUaW1lLHRoaXMuc2NoZWR1bGVyKSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5kdWVUaW1lPW4saS5zY2hlZHVsZXI9cixpLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsLGkubGFzdFZhbHVlPW51bGwsaS5oYXNWYWx1ZT0hMSxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmNsZWFyRGVib3VuY2UoKSx0aGlzLmxhc3RWYWx1ZT10LHRoaXMuaGFzVmFsdWU9ITAsdGhpcy5hZGQodGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249dGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUobCx0aGlzLmR1ZVRpbWUsdGhpcykpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlZE5leHQoKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLmRlYm91bmNlZE5leHQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNsZWFyRGVib3VuY2UoKSx0aGlzLmhhc1ZhbHVlKXt2YXIgdD10aGlzLmxhc3RWYWx1ZTt0aGlzLmxhc3RWYWx1ZT1udWxsLHRoaXMuaGFzVmFsdWU9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfX0sZS5wcm90b3R5cGUuY2xlYXJEZWJvdW5jZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uO251bGwhPT10JiYodGhpcy5yZW1vdmUodCksdC51bnN1YnNjcmliZSgpLHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwpfSxlfShpLmEpO2Z1bmN0aW9uIGwodCl7dC5kZWJvdW5jZWROZXh0KCl9fSxJVVRiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJwdWdUIiksbz1uKCIrdEo0Iik7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IGkuYSxvPTA7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtvIT09dC5sZW5ndGg/KG4ubmV4dCh0W28rK10pLG4uY2xvc2VkfHxyLmFkZCh0aGlzLnNjaGVkdWxlKCkpKTpuLmNvbXBsZXRlKCl9KSkscn06T2JqZWN0KG8uYSkodCkpfX0sSXAwUjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByPW4oIkNjbkciKSxpPW4oIm1yU0ciKSxvPWZ1bmN0aW9uKCl7fSxhPW5ldyByLm8oIkxvY2F0aW9uIEluaXRpYWxpemVkIikscz1mdW5jdGlvbigpe30sdT1uZXcgci5vKCJhcHBCYXNlSHJlZiIpLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7dGhpcy5fc3ViamVjdD1uZXcgci5tLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3k9ZTt2YXIgaT10aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZUhyZWY9dC5zdHJpcFRyYWlsaW5nU2xhc2goYyhpKSksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5vblBvcFN0YXRlKGZ1bmN0aW9uKHQpe24uX3N1YmplY3QuZW1pdCh7dXJsOm4ucGF0aCghMCkscG9wOiEwLHN0YXRlOnQuc3RhdGUsdHlwZTp0LnR5cGV9KX0pfXJldHVybiB0LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdGhpcy5ub3JtYWxpemUodGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wYXRoKHQpKX0sdC5wcm90b3R5cGUuaXNDdXJyZW50UGF0aEVxdWFsVG89ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49IiIpLHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShlK3Qubm9ybWFsaXplUXVlcnlQYXJhbXMobikpfSx0LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmUuc3RhcnRzV2l0aCh0KT9lLnN1YnN0cmluZyh0Lmxlbmd0aCk6ZX0odGhpcy5fYmFzZUhyZWYsYyhlKSkpfSx0LnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiIvIiE9PXRbMF0mJih0PSIvIit0KSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0KX0sdC5wcm90b3R5cGUuZ289ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnB1c2hTdGF0ZShuLCIiLHQsZSl9LHQucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucmVwbGFjZVN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZm9yd2FyZCgpfSx0LnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5iYWNrKCl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OnQsZXJyb3I6ZSxjb21wbGV0ZTpufSl9LHQubm9ybWFsaXplUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI/IiE9PXRbMF0/Ij8iK3Q6dH0sdC5qb2luV2l0aFNsYXNoPWZ1bmN0aW9uKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX0sdC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvI3xcP3wkLyksbj1lJiZlLmluZGV4fHx0Lmxlbmd0aDtyZXR1cm4gdC5zbGljZSgwLG4tKCIvIj09PXRbbi0xXT8xOjApKSt0LnNsaWNlKG4pfSx0fSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHQucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfXZhciBmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3BsYXRmb3JtTG9jYXRpb249ZSxyLl9iYXNlSHJlZj0iIixudWxsIT1uJiYoci5fYmFzZUhyZWY9bikscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZSh0KSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZSh0KX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9LGUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbnVsbD09ZSYmKGU9IiMiKSxlLmxlbmd0aD4wP2Uuc3Vic3RyaW5nKDEpOmV9LGUucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXt2YXIgZT1sLmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsdCk7cmV0dXJuIGUubGVuZ3RoPjA/IiMiK2U6ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rbC5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rbC5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KHMpLGg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbD09biYmKG49ci5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2UgaHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRva2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7cmV0dXJuIHIuX2Jhc2VIcmVmPW4scn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZSh0KSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZSh0KX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9LGUucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gbC5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK2wubm9ybWFsaXplUXVlcnlQYXJhbXModGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLG49dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBuJiZ0PyIiK2UrbjplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitsLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2wubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KHMpLGQ9dm9pZCAwLHA9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxkXSxbWyJBTSIsIlBNIl0sZCxkXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxkLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxkLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsZCwiezF9ICdhdCcgezB9IixkXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIiQiLCJVUyBEb2xsYXIiLHt9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5hYnModCkpLG49dC50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWUmJjA9PT1uPzE6NX1dLG09e30seT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Llplcm89MF09Ilplcm8iLHRbdC5PbmU9MV09Ik9uZSIsdFt0LlR3bz0yXT0iVHdvIix0W3QuRmV3PTNdPSJGZXciLHRbdC5NYW55PTRdPSJNYW55Iix0W3QuT3RoZXI9NV09Ik90aGVyIix0fSh7fSksZz1uZXcgci5vKCJVc2VWNFBsdXJhbHMiKSx2PWZ1bmN0aW9uKCl7fSxiPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIubG9jYWxlPWUsci5kZXByZWNhdGVkUGx1cmFsRm49bixyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFBsdXJhbENhdGVnb3J5PWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuZGVwcmVjYXRlZFBsdXJhbEZuP3RoaXMuZGVwcmVjYXRlZFBsdXJhbEZuKGV8fHRoaXMubG9jYWxlLHQpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksbj1tW2VdO2lmKG4pcmV0dXJuIG47dmFyIHI9ZS5zcGxpdCgiLSIpWzBdO2lmKG49bVtyXSlyZXR1cm4gbjtpZigiZW4iPT09cilyZXR1cm4gcDt0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgIicrdCsnIi4nKX0odClbMThdfShlfHx0aGlzLmxvY2FsZSkodCkpe2Nhc2UgeS5aZXJvOnJldHVybiJ6ZXJvIjtjYXNlIHkuT25lOnJldHVybiJvbmUiO2Nhc2UgeS5Ud286cmV0dXJuInR3byI7Y2FzZSB5LkZldzpyZXR1cm4iZmV3IjtjYXNlIHkuTWFueTpyZXR1cm4ibWFueSI7ZGVmYXVsdDpyZXR1cm4ib3RoZXIifX0sZX0odik7ZnVuY3Rpb24gXyh0LGUpe2U9ZW5jb2RlVVJJQ29tcG9uZW50KGUpO3RyeXtmb3IodmFyIG49T2JqZWN0KGkuZSkodC5zcGxpdCgiOyIpKSxyPW4ubmV4dCgpOyFyLmRvbmU7cj1uLm5leHQoKSl7dmFyIG89ci52YWx1ZSxhPW8uaW5kZXhPZigiPSIpLHM9T2JqZWN0KGkuYykoLTE9PWE/W28sIiJdOltvLnNsaWNlKDAsYSksby5zbGljZShhKzEpXSwyKSx1PXNbMV07aWYoc1swXS50cmltKCk9PT1lKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQodSl9fWNhdGNoKHQpe2w9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihjPW4ucmV0dXJuKSYmYy5jYWxsKG4pfWZpbmFsbHl7aWYobCl0aHJvdyBsLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgbCxjfXZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9dCx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9ZSx0aGlzLl9uZ0VsPW4sdGhpcy5fcmVuZGVyZXI9cix0aGlzLl9pbml0aWFsQ2xhc3Nlcz1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJrbGFzcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pbml0aWFsQ2xhc3Nlcz0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgvXHMrLyk6W10sdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgvXHMrLyk6dCx0aGlzLl9yYXdDbGFzcyYmKE9iamVjdChyLlJhKSh0aGlzLl9yYXdDbGFzcyk/dGhpcy5faXRlcmFibGVEaWZmZXI9dGhpcy5faXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpOnRoaXMuX2tleVZhbHVlRGlmZmVyPXRoaXMuX2tleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5faXRlcmFibGVEaWZmZXIpe3ZhciB0PXRoaXMuX2l0ZXJhYmxlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO3QmJnRoaXMuX2FwcGx5SXRlcmFibGVDaGFuZ2VzKHQpfWVsc2UgaWYodGhpcy5fa2V5VmFsdWVEaWZmZXIpe3ZhciBlPXRoaXMuX2tleVZhbHVlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO2UmJnRoaXMuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzKGUpfX0sdC5wcm90b3R5cGUuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7dC5wcmV2aW91c1ZhbHVlJiZlLl90b2dnbGVDbGFzcyh0LmtleSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5SXRlcmFibGVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5pdGVtKXRocm93IG5ldyBFcnJvcigiTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAiK09iamVjdChyLmZiKSh0Lml0ZW0pKTtlLl90b2dnbGVDbGFzcyh0Lml0ZW0sITApfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5Q2xhc3Nlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgU2V0P3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMCl9KTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl90b2dnbGVDbGFzcyhuLCEhdFtuXSl9KSl9LHQucHJvdG90eXBlLl9yZW1vdmVDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCExKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSkpfSx0LnByb3RvdHlwZS5fdG9nZ2xlQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzOyh0PXQudHJpbSgpKSYmdC5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24odCl7ZT9uLl9yZW5kZXJlci5hZGRDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCk6bi5fcmVuZGVyZXIucmVtb3ZlQ2xhc3Mobi5fbmdFbC5uYXRpdmVFbGVtZW50LHQpfSl9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy4kaW1wbGljaXQ9dCx0aGlzLm5nRm9yT2Y9ZSx0aGlzLmluZGV4PW4sdGhpcy5jb3VudD1yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibGFzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXZlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvZGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ldmVufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl90ZW1wbGF0ZT1lLHRoaXMuX2RpZmZlcnM9bix0aGlzLl9kaWZmZXI9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRyYWNrQnkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KHIuVykoKSYmbnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkrIi4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkvY29tbW9uL2luZGV4L05nRm9yLWRpcmVjdGl2ZS5odG1sIyEjY2hhbmdlLXByb3BhZ2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpLHRoaXMuX3RyYWNrQnlGbj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdGb3JUZW1wbGF0ZSIse3NldDpmdW5jdGlvbih0KXt0JiYodGhpcy5fdGVtcGxhdGU9dCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7aWYoIm5nRm9yT2YiaW4gdCl7dmFyIGU9dC5uZ0Zvck9mLmN1cnJlbnRWYWx1ZTtpZighdGhpcy5fZGlmZmVyJiZlKXRyeXt0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIitlKyInIG9mIHR5cGUgJyIrKChuPWUpLm5hbWV8fHR5cGVvZiBuKSsiJy4gTmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy4iKX19dmFyIG59LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe2lmKHRoaXMuX2RpZmZlcil7dmFyIHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5uZ0Zvck9mKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTt0LmZvckVhY2hPcGVyYXRpb24oZnVuY3Rpb24odCxyLGkpe2lmKG51bGw9PXQucHJldmlvdXNJbmRleCl7dmFyIG89ZS5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZS5fdGVtcGxhdGUsbmV3IHgobnVsbCxlLm5nRm9yT2YsLTEsLTEpLGkpLGE9bmV3IEModCxvKTtuLnB1c2goYSl9ZWxzZSBudWxsPT1pP2UuX3ZpZXdDb250YWluZXIucmVtb3ZlKHIpOihvPWUuX3ZpZXdDb250YWluZXIuZ2V0KHIpLGUuX3ZpZXdDb250YWluZXIubW92ZShvLGkpLGE9bmV3IEModCxvKSxuLnB1c2goYSkpfSk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspdGhpcy5fcGVyVmlld0NoYW5nZShuW3JdLnZpZXcsbltyXS5yZWNvcmQpO3I9MDtmb3IodmFyIGk9dGhpcy5fdmlld0NvbnRhaW5lci5sZW5ndGg7cjxpO3IrKyl7dmFyIG89dGhpcy5fdmlld0NvbnRhaW5lci5nZXQocik7by5jb250ZXh0LmluZGV4PXIsby5jb250ZXh0LmNvdW50PWksby5jb250ZXh0Lm5nRm9yT2Y9dGhpcy5uZ0Zvck9mfXQuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGZ1bmN0aW9uKHQpe2UuX3ZpZXdDb250YWluZXIuZ2V0KHQuY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD10Lml0ZW19KX0sdC5wcm90b3R5cGUuX3BlclZpZXdDaGFuZ2U9ZnVuY3Rpb24odCxlKXt0LmNvbnRleHQuJGltcGxpY2l0PWUuaXRlbX0sdH0oKSxDPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNvcmQ9dCx0aGlzLnZpZXc9ZX0sUz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fY29udGV4dD1uZXcgRSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJZiIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD10aGlzLl9jb250ZXh0Lm5nSWY9dCx0aGlzLl91cGRhdGVWaWV3KCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmVGhlbiIse3NldDpmdW5jdGlvbih0KXtrKCJuZ0lmVGhlbiIsdCksdGhpcy5fdGhlblRlbXBsYXRlUmVmPXQsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmRWxzZSIse3NldDpmdW5jdGlvbih0KXtrKCJuZ0lmRWxzZSIsdCksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPXQsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3VwZGF0ZVZpZXc9ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSl9LHR9KCksRT1mdW5jdGlvbigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9O2Z1bmN0aW9uIGsodCxlKXtpZihlJiYhZS5jcmVhdGVFbWJlZGRlZFZpZXcpdGhyb3cgbmV3IEVycm9yKHQrIiBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnIitPYmplY3Qoci5mYikoZSkrIicuIil9dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9kaWZmZXJzPXQsdGhpcy5fbmdFbD1lLHRoaXMuX3JlbmRlcmVyPW59cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdTdHlsZSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9uZ1N0eWxlPXQsIXRoaXMuX2RpZmZlciYmdCYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodCkuY3JlYXRlKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe2lmKHRoaXMuX2RpZmZlcil7dmFyIHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7dCYmdGhpcy5fYXBwbHlDaGFuZ2VzKHQpfX0sdC5wcm90b3R5cGUuX2FwcGx5Q2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaFJlbW92ZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSxudWxsKX0pLHQuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LHQuY3VycmVudFZhbHVlKX0pfSx0LnByb3RvdHlwZS5fc2V0U3R5bGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QoaS5jKSh0LnNwbGl0KCIuIiksMikscj1uWzBdLG89blsxXTtudWxsIT0oZT1udWxsIT1lJiZvPyIiK2UrbzplKT90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscixlKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscil9LHR9KCksST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVN1YnNjcmlwdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDplLGVycm9yOmZ1bmN0aW9uKHQpe3Rocm93IHR9fSl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSx0fSgpLEE9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudGhlbihlLGZ1bmN0aW9uKHQpe3Rocm93IHR9KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt9LHR9KCkpLGo9bmV3IEksUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcmVmPXQsdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX2Rpc3Bvc2UoKX0sdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vYmo/dCE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKHQpKTp0aGlzLl9sYXRlc3RWYWx1ZT09PXRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU/dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZToodGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT10aGlzLl9sYXRlc3RWYWx1ZSxyLlAud3JhcCh0aGlzLl9sYXRlc3RWYWx1ZSkpOih0JiZ0aGlzLl9zdWJzY3JpYmUodCksdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT10aGlzLl9sYXRlc3RWYWx1ZSx0aGlzLl9sYXRlc3RWYWx1ZSl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9vYmo9dCx0aGlzLl9zdHJhdGVneT10aGlzLl9zZWxlY3RTdHJhdGVneSh0KSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKHQsZnVuY3Rpb24obil7cmV0dXJuIGUuX3VwZGF0ZUxhdGVzdFZhbHVlKHQsbil9KX0sdC5wcm90b3R5cGUuX3NlbGVjdFN0cmF0ZWd5PWZ1bmN0aW9uKGUpe2lmKE9iamVjdChyLlRhKShlKSlyZXR1cm4gQTtpZihPYmplY3Qoci5TYSkoZSkpcmV0dXJuIGo7dGhyb3cgbj10LEVycm9yKCJJbnZhbGlkUGlwZUFyZ3VtZW50OiAnIitlKyInIGZvciBwaXBlICciK09iamVjdChyLmZiKShuKSsiJyIpO3ZhciBufSx0LnByb3RvdHlwZS5fZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH0sdC5wcm90b3R5cGUuX3VwZGF0ZUxhdGVzdFZhbHVlPWZ1bmN0aW9uKHQsZSl7dD09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWUsdGhpcy5fcmVmLm1hcmtGb3JDaGVjaygpKX0sdH0oKSxNPWZ1bmN0aW9uKCl7fSxOPW5ldyByLm8oIkRvY3VtZW50VG9rZW4iKSxSPSJicm93c2VyIixEPSJzZXJ2ZXIiO2Z1bmN0aW9uIEwodCl7cmV0dXJuIHQ9PT1SfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQ9PT1EfX0sSmNSdjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigieFRsYSIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbci5hXSgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuLnN1YnNjcmliZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpO3JldHVybiBuLnN1YnNjcmliZShlKX19fSxLOUlhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIjZibEYiKSxvPW4oIkZGT28iKSxhPW4oInB1Z1QiKSxzPW4oIjhnOEEiKSx1PW4oInVNYU8iKSxsPW4oIkwvVjkiKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uZGVzdGluYXRpb249ZSxufXJldHVybiByLmIoZSx0KSxlfShvLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5vYnNlcnZlcnM9W10sZS5jbG9zZWQ9ITEsZS5pc1N0b3BwZWQ9ITEsZS5oYXNFcnJvcj0hMSxlLnRocm93bkVycm9yPW51bGwsZX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGVbbC5hXT1mdW5jdGlvbigpe3JldHVybiBuZXcgYyh0aGlzKX0sZS5wcm90b3R5cGUubGlmdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgaCh0aGlzLHRoaXMpO3JldHVybiBlLm9wZXJhdG9yPXQsZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgcy5hO2lmKCF0aGlzLmlzU3RvcHBlZClmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxpPTA7aTxuO2krKylyW2ldLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5oYXNFcnJvcj0hMCx0aGlzLnRocm93bkVycm9yPXQsdGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciBlPXRoaXMub2JzZXJ2ZXJzLG49ZS5sZW5ndGgscj1lLnNsaWNlKCksaT0wO2k8bjtpKyspcltpXS5lcnJvcih0KTt0aGlzLm9ic2VydmVycy5sZW5ndGg9MH0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgcy5hO3RoaXMuaXNTdG9wcGVkPSEwO2Zvcih2YXIgdD10aGlzLm9ic2VydmVycyxlPXQubGVuZ3RoLG49dC5zbGljZSgpLHI9MDtyPGU7cisrKW5bcl0uY29tcGxldGUoKTt0aGlzLm9ic2VydmVycy5sZW5ndGg9MH0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz1udWxsfSxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7cmV0dXJuIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7cmV0dXJuIHRoaXMuaGFzRXJyb3I/KHQuZXJyb3IodGhpcy50aHJvd25FcnJvciksYS5hLkVNUFRZKTp0aGlzLmlzU3RvcHBlZD8odC5jb21wbGV0ZSgpLGEuYS5FTVBUWSk6KHRoaXMub2JzZXJ2ZXJzLnB1c2godCksbmV3IHUuYSh0aGlzLHQpKX0sZS5wcm90b3R5cGUuYXNPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGkuYTtyZXR1cm4gdC5zb3VyY2U9dGhpcyx0fSxlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaCh0LGUpfSxlfShpLmEpLGg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5kZXN0aW5hdGlvbj1lLHIuc291cmNlPW4scn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUubmV4dCYmZS5uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUuZXJyb3ImJnRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZXN0aW5hdGlvbjt0JiZ0LmNvbXBsZXRlJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlP3RoaXMuc291cmNlLnN1YnNjcmliZSh0KTphLmEuRU1QVFl9LGV9KGYpfSwiTC9WOSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoInJ4U3Vic2NyaWJlciIpOiJAQHJ4U3Vic2NyaWJlciJ9LExDNXA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4oIm42Z0ciKTt2YXIgcj1mdW5jdGlvbigpe319LE1HQlM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlLnByb3RvdHlwZS5ub3RpZnlFcnJvcj1mdW5jdGlvbih0LGUpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0obigiRkZPbyIpLmEpfSxNY1NvOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LCJNaG0rIjpmdW5jdGlvbihtb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIENodW5rTG9hZGVyU2VydmljZX0pO3ZhciByeGpzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiMC91USIpLF9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fPV9fd2VicGFja19yZXF1aXJlX18oInJmMzAiKSxfZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX189X193ZWJwYWNrX3JlcXVpcmVfXygiQXl0UiIpLF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJDY25HIiksX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJ0L05hIiksQ2h1bmtMb2FkZXJTZXJ2aWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ2h1bmtMb2FkZXJTZXJ2aWNlKHQpe3ZhciBlPXRoaXM7dGhpcy5odHRwPXQsdGhpcy5yZWNvcmRzPV9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fLmEsMCE9X2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLmEucHJvZHVjdGlvbiYmdGhpcy5yZWNvcmRzLmZvckVhY2goZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe2UubG9hZFBhZ2VDaHVuayh0LnBhZ2VOYW1lLGZ1bmN0aW9uKCl7fSl9KX0pfXJldHVybiBDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmFzeW5jTG9hZFBhZ2VDaHVuaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49bmV3IFByb21pc2UoZnVuY3Rpb24obixyKXt2YXIgaT1lLnJlY29yZHMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYWdlTmFtZT09dH0pO3ZvaWQgMCE9aT8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK2kucGFnZU5hbWUrIiAoIitpLmNodW5rVVJMKyIsICIraS5jaHVua0xvYWRlZCsiKSBbQXN5bmNdIiksMD09aS5jaHVua0xvYWRlZD9lLmh0dHAuZ2V0KGkuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGUuYXN5bmNMb2FkRGF0YUNodW5rKHQsaSxuKX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSk6bighMCkpOm4oITApfSk7cmV0dXJuIE9iamVjdChyeGpzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uYSkobil9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZFBhZ2VDaHVuaz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLnJlY29yZHMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYWdlTmFtZT09dH0pO3ZvaWQgMCE9cj8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK3IucGFnZU5hbWUrIiAoIityLmNodW5rVVJMKyIpIiksMD09ci5jaHVua0xvYWRlZD90aGlzLmh0dHAuZ2V0KHIuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIG4ubG9hZERhdGFDaHVuayh0LGUscil9LGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLmxvZyh0KX0pOmUoKSk6ZSgpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmxvYWREYXRhQ2h1bms9ZnVuY3Rpb24oYmFzZTY0ZGF0YSxjYWxsYmFjayxyZWNvcmQpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKGJhc2U2NGRhdGEpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKSxjYWxsYmFjaygpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmFzeW5jTG9hZERhdGFDaHVuaz1mdW5jdGlvbihiYXNlNjRkYXRhLHJlY29yZCxyZXNvbHZlKXt2YXIgZGVjb2RlZERhdGE9YXRvYihiYXNlNjRkYXRhKTtldmFsKGRlY29kZWREYXRhKSxyZWNvcmQuY2h1bmtMb2FkZWQ9ITAsY29uc29sZS5sb2coIkxvYWRlZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIFtBc3luY10iKSxyZXNvbHZlKCEwKX0sQ2h1bmtMb2FkZXJTZXJ2aWNlLm5nSW5qZWN0YWJsZURlZj1fYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uUih7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQ2h1bmtMb2FkZXJTZXJ2aWNlKF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5WKF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18uYykpfSx0b2tlbjpDaHVua0xvYWRlclNlcnZpY2UscHJvdmlkZWRJbjoicm9vdCJ9KSxDaHVua0xvYWRlclNlcnZpY2V9KCl9LCJNcitYIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJDY25HIiksaT0obigiU01zbSIpLG4oIkZ6cWMiKSxuKCJXZjRwIiksci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtaWNvbntiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweH0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLDEpfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbnttYXJnaW46YXV0b30iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHIuaWIoMixbci5YYShudWxsLDApXSxudWxsLG51bGwpfX0sTlNZTDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gWXR9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gdWV9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gbGV9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJpaFlZIik7ZnVuY3Rpb24gbygpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzc31mdW5jdGlvbiBhKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgaS5kO2Nhc2UgMTpyZXR1cm4gdFswXTtkZWZhdWx0OnJldHVybiBuZXcgaS5uKHQpfX1mdW5jdGlvbiBzKHQsZSxuLHIsbyxhKXt2b2lkIDA9PT1vJiYobz17fSksdm9pZCAwPT09YSYmKGE9e30pO3ZhciBzPVtdLHU9W10sbD0tMSxjPW51bGw7aWYoci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQub2Zmc2V0LHI9bj09bCxmPXImJmN8fHt9O09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9bix1PXRbbl07aWYoIm9mZnNldCIhPT1uKXN3aXRjaChyPWUubm9ybWFsaXplUHJvcGVydHlOYW1lKHIscyksdSl7Y2FzZSBpLm86dT1vW25dO2JyZWFrO2Nhc2UgaS5hOnU9YVtuXTticmVhaztkZWZhdWx0OnU9ZS5ub3JtYWxpemVTdHlsZVZhbHVlKG4scix1LHMpfWZbcl09dX0pLHJ8fHUucHVzaChmKSxjPWYsbD1ufSkscy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYW5pbWF0ZSBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAiK3Muam9pbigiXG4gLSAiKSk7cmV0dXJuIHV9ZnVuY3Rpb24gdSh0LGUsbixyKXtzd2l0Y2goZSl7Y2FzZSJzdGFydCI6dC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmbChuLCJzdGFydCIsdCkpfSk7YnJlYWs7Y2FzZSJkb25lIjp0Lm9uRG9uZShmdW5jdGlvbigpe3JldHVybiByKG4mJmwobiwiZG9uZSIsdCkpfSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0Lm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiByKG4mJmwobiwiZGVzdHJveSIsdCkpfSl9fWZ1bmN0aW9uIGwodCxlLG4pe3ZhciByPW4udG90YWxUaW1lLGk9Yyh0LmVsZW1lbnQsdC50cmlnZ2VyTmFtZSx0LmZyb21TdGF0ZSx0LnRvU3RhdGUsZXx8dC5waGFzZU5hbWUsdm9pZCAwPT1yP3QudG90YWxUaW1lOnIsISFuLmRpc2FibGVkKSxvPXQuX2RhdGE7cmV0dXJuIG51bGwhPW8mJihpLl9kYXRhPW8pLGl9ZnVuY3Rpb24gYyh0LGUsbixyLGksbyxhKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9IiIpLHZvaWQgMD09PW8mJihvPTApLHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSxmcm9tU3RhdGU6bix0b1N0YXRlOnIscGhhc2VOYW1lOmksdG90YWxUaW1lOm8sZGlzYWJsZWQ6ISFhfX1mdW5jdGlvbiBmKHQsZSxuKXt2YXIgcjtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcD8ocj10LmdldChlKSl8fHQuc2V0KGUscj1uKToocj10W2VdKXx8KHI9dFtlXT1uKSxyfWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5pbmRleE9mKCI6Iik7cmV0dXJuW3Quc3Vic3RyaW5nKDEsZSksdC5zdWJzdHIoZSsxKV19dmFyIGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4hMX0scD1mdW5jdGlvbih0LGUpe3JldHVybiExfSxtPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX0seT1vKCk7aWYoeXx8InVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50KXtpZihkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29udGFpbnMoZSl9LHl8fEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMpcD1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hdGNoZXMoZSl9O2Vsc2V7dmFyIGc9RWxlbWVudC5wcm90b3R5cGUsdj1nLm1hdGNoZXNTZWxlY3Rvcnx8Zy5tb3pNYXRjaGVzU2VsZWN0b3J8fGcubXNNYXRjaGVzU2VsZWN0b3J8fGcub01hdGNoZXNTZWxlY3Rvcnx8Zy53ZWJraXRNYXRjaGVzU2VsZWN0b3I7diYmKHA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5hcHBseSh0LFtlXSl9KX1tPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1bXTtpZihuKWkucHVzaC5hcHBseShpLE9iamVjdChyLmQpKHQucXVlcnlTZWxlY3RvckFsbChlKSkpO2Vsc2V7dmFyIG89dC5xdWVyeVNlbGVjdG9yKGUpO28mJmkucHVzaChvKX1yZXR1cm4gaX19dmFyIGI9bnVsbCxfPSExO2Z1bmN0aW9uIHcodCl7Ynx8KGI9KCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuYm9keTpudWxsKXx8e30sXz0hIWIuc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIGIuc3R5bGUpO3ZhciBlPSEwO3JldHVybiBiLnN0eWxlJiYhZnVuY3Rpb24odCl7cmV0dXJuImVia2l0Ij09dC5zdWJzdHJpbmcoMSw2KX0odCkmJiEoZT10IGluIGIuc3R5bGUpJiZfJiYoZT0iV2Via2l0Iit0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpaW4gYi5zdHlsZSksZX12YXIgeD1wLE89ZCxDPW07ZnVuY3Rpb24gUyh0KXt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1uLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIik7ZVtyXT10W25dfSksZX12YXIgRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geCh0LGUpfSx0LnByb3RvdHlwZS5jb250YWluc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTyh0LGUpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEModCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBufHwiIn0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLG8sYSxzKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9W10pLG5ldyBpLmQobixyKX0sdH0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5OT09QPW5ldyBFLHR9KCksVD0xZTM7ZnVuY3Rpb24gSSh0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hZXx8ZS5sZW5ndGg8Mj8wOkEocGFyc2VGbG9hdChlWzFdKSxlWzJdKX1mdW5jdGlvbiBBKHQsZSl7c3dpdGNoKGUpe2Nhc2UicyI6cmV0dXJuIHQqVDtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBqKHQsZSxuKXtyZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT90OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPTAsbz0iIjtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBhPXQubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1hKXJldHVybiBlLnB1c2goJ1RoZSBwcm92aWRlZCB0aW1pbmcgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkLicpLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtyPUEocGFyc2VGbG9hdChhWzFdKSxhWzJdKTt2YXIgcz1hWzNdO251bGwhPXMmJihpPUEoTWF0aC5mbG9vcihwYXJzZUZsb2F0KHMpKSxhWzRdKSk7dmFyIHU9YVs1XTt1JiYobz11KX1lbHNlIHI9dDtpZighbil7dmFyIGw9ITEsYz1lLmxlbmd0aDtyPDAmJihlLnB1c2goIkR1cmF0aW9uIHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxsPSEwKSxpPDAmJihlLnB1c2goIkRlbGF5IHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSxsPSEwKSxsJiZlLnNwbGljZShjLDAsJ1RoZSBwcm92aWRlZCB0aW1pbmcgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkLicpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5OmksZWFzaW5nOm99fSh0LGUsbil9ZnVuY3Rpb24gUCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlW25dPXRbbl19KSxlfWZ1bmN0aW9uIE0odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPXt9KSxlKWZvcih2YXIgciBpbiB0KW5bcl09dFtyXTtlbHNlIFAodCxuKTtyZXR1cm4gbn1mdW5jdGlvbiBOKHQsZSxuKXtyZXR1cm4gbj9lKyI6IituKyI7IjoiIn1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT0iIixuPTA7bjx0LnN0eWxlLmxlbmd0aDtuKyspZSs9TigwLHI9dC5zdHlsZS5pdGVtKG4pLHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShyKSk7Zm9yKHZhciByIGluIHQuc3R5bGUpdC5zdHlsZS5oYXNPd25Qcm9wZXJ0eShyKSYmIXIuc3RhcnRzV2l0aCgiXyIpJiYoZSs9TigwLHIucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpLHQuc3R5bGVbcl0pKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLGUpfWZ1bmN0aW9uIEQodCxlKXt0LnN0eWxlJiYoT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1XKG4pO3Quc3R5bGVbcl09ZVtuXX0pLG8oKSYmUih0KSl9ZnVuY3Rpb24gTCh0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPVcoZSk7dC5zdHlsZVtuXT0iIn0pLG8oKSYmUih0KSl9ZnVuY3Rpb24gRih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8xPT10Lmxlbmd0aD90WzBdOk9iamVjdChpLmkpKHQpOnR9dmFyIFY9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gVSh0KXt2YXIgZT1bXTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2Zvcih2YXIgbj10LnRvU3RyaW5nKCkscj12b2lkIDA7cj1WLmV4ZWMobik7KWUucHVzaChyWzFdKTtWLmxhc3RJbmRleD0wfXJldHVybiBlfWZ1bmN0aW9uIHoodCxlLG4pe3ZhciByPXQudG9TdHJpbmcoKSxpPXIucmVwbGFjZShWLGZ1bmN0aW9uKHQscil7dmFyIGk9ZVtyXTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eShyKXx8KG4ucHVzaCgiUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBwYXJhbSAiK3IpLGk9IiIpLGkudG9TdHJpbmcoKX0pO3JldHVybiBpPT1yP3Q6aX1mdW5jdGlvbiBCKHQpe2Zvcih2YXIgZT1bXSxuPXQubmV4dCgpOyFuLmRvbmU7KWUucHVzaChuLnZhbHVlKSxuPXQubmV4dCgpO3JldHVybiBlfXZhciBIPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBXKHQpe3JldHVybiB0LnJlcGxhY2UoSCxmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gdFsxXS50b1VwcGVyQ2FzZSgpfSl9ZnVuY3Rpb24gcSh0LGUpe3JldHVybiAwPT09dHx8MD09PWV9ZnVuY3Rpb24gWSh0LGUsbil7dmFyIHI9T2JqZWN0LmtleXMobik7aWYoci5sZW5ndGgmJmUubGVuZ3RoKXt2YXIgaT1lWzBdLG89W107aWYoci5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuaGFzT3duUHJvcGVydHkodCl8fG8ucHVzaCh0KSxpW3RdPW5bdF19KSxvLmxlbmd0aClmb3IodmFyIGE9ZnVuY3Rpb24oKXt2YXIgbj1lW3NdO28uZm9yRWFjaChmdW5jdGlvbihlKXtuW2VdPVEodCxlKX0pfSxzPTE7czxlLmxlbmd0aDtzKyspYSgpfXJldHVybiBlfWZ1bmN0aW9uIEcodCxlLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UgNzpyZXR1cm4gdC52aXNpdFRyaWdnZXIoZSxuKTtjYXNlIDA6cmV0dXJuIHQudmlzaXRTdGF0ZShlLG4pO2Nhc2UgMTpyZXR1cm4gdC52aXNpdFRyYW5zaXRpb24oZSxuKTtjYXNlIDI6cmV0dXJuIHQudmlzaXRTZXF1ZW5jZShlLG4pO2Nhc2UgMzpyZXR1cm4gdC52aXNpdEdyb3VwKGUsbik7Y2FzZSA0OnJldHVybiB0LnZpc2l0QW5pbWF0ZShlLG4pO2Nhc2UgNTpyZXR1cm4gdC52aXNpdEtleWZyYW1lcyhlLG4pO2Nhc2UgNjpyZXR1cm4gdC52aXNpdFN0eWxlKGUsbik7Y2FzZSA4OnJldHVybiB0LnZpc2l0UmVmZXJlbmNlKGUsbik7Y2FzZSA5OnJldHVybiB0LnZpc2l0QW5pbWF0ZUNoaWxkKGUsbik7Y2FzZSAxMDpyZXR1cm4gdC52aXNpdEFuaW1hdGVSZWYoZSxuKTtjYXNlIDExOnJldHVybiB0LnZpc2l0UXVlcnkoZSxuKTtjYXNlIDEyOnJldHVybiB0LnZpc2l0U3RhZ2dlcihlLG4pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBhbmltYXRpb24gbWV0YWRhdGEgbm9kZSAjIitlLnR5cGUpfX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfXZhciBLPSIqIixaPW5ldyBTZXQoWyJ0cnVlIiwiMSJdKSxYPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gJCh0LGUpe3ZhciBuPVouaGFzKHQpfHxYLmhhcyh0KSxyPVouaGFzKGUpfHxYLmhhcyhlKTtyZXR1cm4gZnVuY3Rpb24oaSxvKXt2YXIgYT10PT1LfHx0PT1pLHM9ZT09S3x8ZT09bztyZXR1cm4hYSYmbiYmImJvb2xlYW4iPT10eXBlb2YgaSYmKGE9aT9aLmhhcyh0KTpYLmhhcyh0KSksIXMmJnImJiJib29sZWFuIj09dHlwZW9mIG8mJihzPW8/Wi5oYXMoZSk6WC5oYXMoZSkpLGEmJnN9fXZhciBKPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIHR0KHQsZSxuKXtyZXR1cm4gbmV3IGV0KHQpLmJ1aWxkKGUsbil9dmFyIGV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kcml2ZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgbnQoZSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobiksRyh0aGlzLEYodCksbil9LHQucHJvdG90eXBlLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlPWZ1bmN0aW9uKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9e30sdC5jb2xsZWN0ZWRTdHlsZXNbIiJdPXt9LHQuY3VycmVudFRpbWU9MH0sdC5wcm90b3R5cGUudmlzaXRUcmlnZ2VyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUucXVlcnlDb3VudD0wLGk9ZS5kZXBDb3VudD0wLG89W10sYT1bXTtyZXR1cm4iQCI9PXQubmFtZS5jaGFyQXQoMCkmJmUuZXJyb3JzLnB1c2goImFuaW1hdGlvbiB0cmlnZ2VycyBjYW5ub3QgYmUgcHJlZml4ZWQgd2l0aCBhbiBgQGAgc2lnbiAoZS5nLiB0cmlnZ2VyKCdAZm9vJywgWy4uLl0pKSIpLHQuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbih0KXtpZihuLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGUpLDA9PXQudHlwZSl7dmFyIHM9dCx1PXMubmFtZTt1LnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MubmFtZT10LG8ucHVzaChuLnZpc2l0U3RhdGUocyxlKSl9KSxzLm5hbWU9dX1lbHNlIGlmKDE9PXQudHlwZSl7dmFyIGw9bi52aXNpdFRyYW5zaXRpb24odCxlKTtyKz1sLnF1ZXJ5Q291bnQsaSs9bC5kZXBDb3VudCxhLnB1c2gobCl9ZWxzZSBlLmVycm9ycy5wdXNoKCJvbmx5IHN0YXRlKCkgYW5kIHRyYW5zaXRpb24oKSBkZWZpbml0aW9ucyBjYW4gc2l0IGluc2lkZSBvZiBhIHRyaWdnZXIoKSIpfSkse3R5cGU6NyxuYW1lOnQubmFtZSxzdGF0ZXM6byx0cmFuc2l0aW9uczphLHF1ZXJ5Q291bnQ6cixkZXBDb3VudDppLG9wdGlvbnM6bnVsbH19LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSkscj10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYobi5jb250YWluc0R5bmFtaWNTdHlsZXMpe3ZhciBpPW5ldyBTZXQsbz1yfHx7fTtpZihuLnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHJ0KHQpKXt2YXIgZT10O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7VShlW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe28uaGFzT3duUHJvcGVydHkodCl8fGkuYWRkKHQpfSl9KX19KSxpLnNpemUpe3ZhciBhPUIoaS52YWx1ZXMoKSk7ZS5lcnJvcnMucHVzaCgnc3RhdGUoIicrdC5uYW1lKyciLCAuLi4pIG11c3QgZGVmaW5lIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIGZvbGxvd2luZyBzdHlsZSBzdWJzdGl0dXRpb25zOiAnK2Euam9pbigiLCAiKSl9fXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6bixvcHRpb25zOnI/e3BhcmFtczpyfTpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7ZS5xdWVyeUNvdW50PTAsZS5kZXBDb3VudD0wO3ZhciBuLHIsaSxvPUcodGhpcyxGKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOihuPXQuZXhwcixyPWUuZXJyb3JzLGk9W10sInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUsbil7aWYoIjoiPT10WzBdKXt2YXIgcj1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQoZSk+cGFyc2VGbG9hdCh0KX07Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKTxwYXJzZUZsb2F0KHQpfTtkZWZhdWx0OnJldHVybiBlLnB1c2goJ1RoZSB0cmFuc2l0aW9uIGFsaWFzIHZhbHVlICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLCIqID0+ICoifX0odCxuKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdm9pZCBlLnB1c2gocik7dD1yfXZhciBpPXQubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIG4ucHVzaCgnVGhlIHByb3ZpZGVkIHRyYW5zaXRpb24gZXhwcmVzc2lvbiAiJyt0KyciIGlzIG5vdCBzdXBwb3J0ZWQnKSxlO3ZhciBvPWlbMV0sYT1pWzJdLHM9aVszXTtlLnB1c2goJChvLHMpKSwiPCIhPWFbMF18fG89PUsmJnM9PUt8fGUucHVzaCgkKHMsbykpfSh0LGkscil9KTppLnB1c2gobiksaSksYW5pbWF0aW9uOm8scXVlcnlDb3VudDplLnF1ZXJ5Q291bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFNlcXVlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm57dHlwZToyLHN0ZXBzOnQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBHKG4sdCxlKX0pLG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0R3JvdXA9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50VGltZSxpPTAsbz10LnN0ZXBzLm1hcChmdW5jdGlvbih0KXtlLmN1cnJlbnRUaW1lPXI7dmFyIG89RyhuLHQsZSk7cmV0dXJuIGk9TWF0aC5tYXgoaSxlLmN1cnJlbnRUaW1lKSxvfSk7cmV0dXJuIGUuY3VycmVudFRpbWU9aSx7dHlwZTozLHN0ZXBzOm8sb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0LGUpe3ZhciBuPW51bGw7aWYodC5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSluPXQ7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIG90KGoodCxlKS5kdXJhdGlvbiwwLCIiKTt2YXIgcj10O2lmKHIuc3BsaXQoL1xzKy8pLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuInsiPT10LmNoYXJBdCgwKSYmInsiPT10LmNoYXJBdCgxKX0pKXt2YXIgaT1vdCgwLDAsIiIpO3JldHVybiBpLmR5bmFtaWM9ITAsaS5zdHJWYWx1ZT1yLGl9cmV0dXJuIG90KChuPW58fGoocixlKSkuZHVyYXRpb24sbi5kZWxheSxuLmVhc2luZyl9KHQudGltaW5ncyxlLmVycm9ycyk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9cjt2YXIgbz10LnN0eWxlcz90LnN0eWxlczpPYmplY3QoaS5rKSh7fSk7aWYoNT09by50eXBlKW49dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpO2Vsc2V7dmFyIGE9dC5zdHlsZXMscz0hMTtpZighYSl7cz0hMDt2YXIgdT17fTtyLmVhc2luZyYmKHUuZWFzaW5nPXIuZWFzaW5nKSxhPU9iamVjdChpLmspKHUpfWUuY3VycmVudFRpbWUrPXIuZHVyYXRpb24rci5kZWxheTt2YXIgbD10aGlzLnZpc2l0U3R5bGUoYSxlKTtsLmlzRW1wdHlTdGVwPXMsbj1sfXJldHVybiBlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczpyLHN0eWxlOm4sb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KG4sZSksbn0sdC5wcm90b3R5cGUuX21ha2VTdHlsZUFzdD1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO0FycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0P3Q9PWkuYT9uLnB1c2godCk6ZS5lcnJvcnMucHVzaCgiVGhlIHByb3ZpZGVkIHN0eWxlIHN0cmluZyB2YWx1ZSAiK3QrIiBpcyBub3QgYWxsb3dlZC4iKTpuLnB1c2godCl9KTpuLnB1c2godC5zdHlsZXMpO3ZhciByPSExLG89bnVsbDtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHJ0KHQpKXt2YXIgZT10LG49ZS5lYXNpbmc7aWYobiYmKG89bixkZWxldGUgZS5lYXNpbmcpLCFyKWZvcih2YXIgaSBpbiBlKWlmKGVbaV0udG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtyPSEwO2JyZWFrfX19KSx7dHlwZTo2LHN0eWxlczpuLGVhc2luZzpvLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6cixvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS5fdmFsaWRhdGVTdHlsZUFzdD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxpPWUuY3VycmVudFRpbWUsbz1lLmN1cnJlbnRUaW1lO3ImJm8+MCYmKG8tPXIuZHVyYXRpb24rci5kZWxheSksdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXsic3RyaW5nIiE9dHlwZW9mIHQmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7aWYobi5fZHJpdmVyLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eShyKSl7dmFyIGEscyx1LGw9ZS5jb2xsZWN0ZWRTdHlsZXNbZS5jdXJyZW50UXVlcnlTZWxlY3Rvcl0sYz1sW3JdLGY9ITA7YyYmKG8hPWkmJm8+PWMuc3RhcnRUaW1lJiZpPD1jLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKCdUaGUgQ1NTIHByb3BlcnR5ICInK3IrJyIgdGhhdCBleGlzdHMgYmV0d2VlbiB0aGUgdGltZXMgb2YgIicrYy5zdGFydFRpbWUrJ21zIiBhbmQgIicrYy5lbmRUaW1lKydtcyIgaXMgYWxzbyBiZWluZyBhbmltYXRlZCBpbiBhIHBhcmFsbGVsIGFuaW1hdGlvbiBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJytvKydtcyIgYW5kICInK2krJ21zIicpLGY9ITEpLG89Yy5zdGFydFRpbWUpLGYmJihsW3JdPXtzdGFydFRpbWU6byxlbmRUaW1lOml9KSxlLm9wdGlvbnMmJihhPWUuZXJyb3JzLHM9ZS5vcHRpb25zLnBhcmFtc3x8e30sKHU9VSh0W3JdKSkubGVuZ3RoJiZ1LmZvckVhY2goZnVuY3Rpb24odCl7cy5oYXNPd25Qcm9wZXJ0eSh0KXx8YS5wdXNoKCJVbmFibGUgdG8gcmVzb2x2ZSB0aGUgbG9jYWwgYW5pbWF0aW9uIHBhcmFtICIrdCsiIGluIHRoZSBnaXZlbiBsaXN0IG9mIHZhbHVlcyIpfSkpfWVsc2UgZS5lcnJvcnMucHVzaCgnVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiBwcm9wZXJ0eSAiJytyKyciIGlzIG5vdCBhIHN1cHBvcnRlZCBDU1MgcHJvcGVydHkgZm9yIGFuaW1hdGlvbnMnKX0pfSl9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWUuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBlLmVycm9ycy5wdXNoKCJrZXlmcmFtZXMoKSBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgb2YgYSBjYWxsIHRvIGFuaW1hdGUoKSIpLHI7dmFyIGk9MCxvPVtdLGE9ITEscz0hMSx1PTAsbD10LnN0ZXBzLm1hcChmdW5jdGlvbih0KXt2YXIgcj1uLl9tYWtlU3R5bGVBc3QodCxlKSxsPW51bGwhPXIub2Zmc2V0P3Iub2Zmc2V0OmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbnVsbDt2YXIgZT1udWxsO2lmKEFycmF5LmlzQXJyYXkodCkpdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHJ0KHQpJiZ0Lmhhc093blByb3BlcnR5KCJvZmZzZXQiKSl7dmFyIG49dDtlPXBhcnNlRmxvYXQobi5vZmZzZXQpLGRlbGV0ZSBuLm9mZnNldH19KTtlbHNlIGlmKHJ0KHQpJiZ0Lmhhc093blByb3BlcnR5KCJvZmZzZXQiKSl7dmFyIG49dDtlPXBhcnNlRmxvYXQobi5vZmZzZXQpLGRlbGV0ZSBuLm9mZnNldH1yZXR1cm4gZX0oci5zdHlsZXMpLGM9MDtyZXR1cm4gbnVsbCE9bCYmKGkrKyxjPXIub2Zmc2V0PWwpLHM9c3x8YzwwfHxjPjEsYT1hfHxjPHUsdT1jLG8ucHVzaChjKSxyfSk7cyYmZS5lcnJvcnMucHVzaCgiUGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBrZXlmcmFtZSBvZmZzZXRzIGFyZSBiZXR3ZWVuIDAgYW5kIDEiKSxhJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGluIG9yZGVyIik7dmFyIGM9dC5zdGVwcy5sZW5ndGgsZj0wO2k+MCYmaTxjP2UuZXJyb3JzLnB1c2goIk5vdCBhbGwgc3R5bGUoKSBzdGVwcyB3aXRoaW4gdGhlIGRlY2xhcmVkIGtleWZyYW1lcygpIGNvbnRhaW4gb2Zmc2V0cyIpOjA9PWkmJihmPTEvKGMtMSkpO3ZhciBoPWMtMSxkPWUuY3VycmVudFRpbWUscD1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxtPXAuZHVyYXRpb247cmV0dXJuIGwuZm9yRWFjaChmdW5jdGlvbih0LGkpe3ZhciBhPWY+MD9pPT1oPzE6ZippOm9baV0scz1hKm07ZS5jdXJyZW50VGltZT1kK3AuZGVsYXkrcyxwLmR1cmF0aW9uPXMsbi5fdmFsaWRhdGVTdHlsZUFzdCh0LGUpLHQub2Zmc2V0PWEsci5zdHlsZXMucHVzaCh0KX0pLHJ9LHQucHJvdG90eXBlLnZpc2l0UmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3R5cGU6OCxhbmltYXRpb246Ryh0aGlzLEYodC5hbmltYXRpb24pLGUpLG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3JldHVybnt0eXBlOjEwLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGUpLG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLGk9dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O3ZhciBvPU9iamVjdChyLmMpKGZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIjpzZWxmIj09dH0pO3JldHVybiBlJiYodD10LnJlcGxhY2UoSiwiIikpLFt0PXQucmVwbGFjZSgvQFwqL2csIi5uZy10cmlnZ2VyIikucmVwbGFjZSgvQFx3Ky9nLGZ1bmN0aW9uKHQpe3JldHVybiIubmctdHJpZ2dlci0iK3Quc3Vic3RyKDEpfSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLCIubmctYW5pbWF0aW5nIiksZV19KHQuc2VsZWN0b3IpLDIpLGE9b1swXSxzPW9bMV07ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1uLmxlbmd0aD9uKyIgIithOmEsZihlLmNvbGxlY3RlZFN0eWxlcyxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yLHt9KTt2YXIgdT1HKHRoaXMsRih0LmFuaW1hdGlvbiksZSk7cmV0dXJuIGUuY3VycmVudFF1ZXJ5PW51bGwsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1uLHt0eXBlOjExLHNlbGVjdG9yOmEsbGltaXQ6aS5saW1pdHx8MCxvcHRpb25hbDohIWkub3B0aW9uYWwsaW5jbHVkZVNlbGY6cyxhbmltYXRpb246dSxvcmlnaW5hbFNlbGVjdG9yOnQuc2VsZWN0b3Isb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRTdGFnZ2VyPWZ1bmN0aW9uKHQsZSl7ZS5jdXJyZW50UXVlcnl8fGUuZXJyb3JzLnB1c2goInN0YWdnZXIoKSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBvZiBxdWVyeSgpIik7dmFyIG49ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06aih0LnRpbWluZ3MsZS5lcnJvcnMsITApO3JldHVybnt0eXBlOjEyLGFuaW1hdGlvbjpHKHRoaXMsRih0LmFuaW1hdGlvbiksZSksdGltaW5nczpuLG9wdGlvbnM6bnVsbH19LHR9KCksbnQ9ZnVuY3Rpb24odCl7dGhpcy5lcnJvcnM9dCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPXt9LHRoaXMub3B0aW9ucz1udWxsfTtmdW5jdGlvbiBydCh0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGl0KHQpe3ZhciBlO3JldHVybiB0Pyh0PVAodCkpLnBhcmFtcyYmKHQucGFyYW1zPShlPXQucGFyYW1zKT9QKGUpOm51bGwpOnQ9e30sdH1mdW5jdGlvbiBvdCh0LGUsbil7cmV0dXJue2R1cmF0aW9uOnQsZGVsYXk6ZSxlYXNpbmc6bn19ZnVuY3Rpb24gYXQodCxlLG4scixpLG8sYSxzKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9bnVsbCksdm9pZCAwPT09cyYmKHM9ITEpLHt0eXBlOjEsZWxlbWVudDp0LGtleWZyYW1lczplLHByZVN0eWxlUHJvcHM6bixwb3N0U3R5bGVQcm9wczpyLGR1cmF0aW9uOmksZGVsYXk6byx0b3RhbFRpbWU6aStvLGVhc2luZzphLHN1YlRpbWVsaW5lOnN9fXZhciBzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9tYXA9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUuY29uc3VtZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBlP3RoaXMuX21hcC5kZWxldGUodCk6ZT1bXSxlfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9tYXAuZ2V0KHQpO258fHRoaXMuX21hcC5zZXQodCxuPVtdKSxuLnB1c2guYXBwbHkobixPYmplY3Qoci5kKShlKSl9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuY2xlYXIoKX0sdH0oKSx1dD1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksbHQ9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIGN0KHQsZSxuLHIsaSxvLGEscyx1LGwpe3JldHVybiB2b2lkIDA9PT1vJiYobz17fSksdm9pZCAwPT09YSYmKGE9e30pLHZvaWQgMD09PWwmJihsPVtdKSwobmV3IGZ0KS5idWlsZEtleWZyYW1lcyh0LGUsbixyLGksbyxhLHMsdSxsKX12YXIgZnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5idWlsZEtleWZyYW1lcz1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsKXt2b2lkIDA9PT1sJiYobD1bXSksdT11fHxuZXcgc3Q7dmFyIGM9bmV3IGR0KHQsZSx1LHIsaSxsLFtdKTtjLm9wdGlvbnM9cyxjLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW29dLG51bGwsYy5lcnJvcnMscyksRyh0aGlzLG4sYyk7dmFyIGY9Yy50aW1lbGluZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbnRhaW5zQW5pbWF0aW9uKCl9KTtpZihmLmxlbmd0aCYmT2JqZWN0LmtleXMoYSkubGVuZ3RoKXt2YXIgaD1mW2YubGVuZ3RoLTFdO2guYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXx8aC5zZXRTdHlsZXMoW2FdLG51bGwsYy5lcnJvcnMscyl9cmV0dXJuIGYubGVuZ3RoP2YubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJ1aWxkS2V5ZnJhbWVzKCl9KTpbYXQoZSxbXSxbXSxbXSwwLDAsIiIsITEpXX0sdC5wcm90b3R5cGUudmlzaXRUcmlnZ2VyPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS52aXNpdFN0YXRlPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS52aXNpdFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdWJJbnN0cnVjdGlvbnMuY29uc3VtZShlLmVsZW1lbnQpO2lmKG4pe3ZhciByPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhuLHIsci5vcHRpb25zKTtpIT1vJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShvKX1lLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVSZWY9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtuLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sbiksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobi5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLl92aXNpdFN1Ykluc3RydWN0aW9ucz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaT1udWxsIT1uLmR1cmF0aW9uP0kobi5kdXJhdGlvbik6bnVsbCxvPW51bGwhPW4uZGVsYXk/SShuLmRlbGF5KTpudWxsO3JldHVybiAwIT09aSYmdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsaSxvKTtyPU1hdGgubWF4KHIsbi5kdXJhdGlvbituLmRlbGF5KX0pLHJ9LHQucHJvdG90eXBlLnZpc2l0UmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7ZS51cGRhdGVPcHRpb25zKHQub3B0aW9ucywhMCksRyh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U2VxdWVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5zdWJDb250ZXh0Q291bnQsaT1lLG89dC5vcHRpb25zO2lmKG8mJihvLnBhcmFtc3x8by5kZWxheSkmJigoaT1lLmNyZWF0ZVN1YkNvbnRleHQobykpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPW8uZGVsYXkpKXs2PT1pLnByZXZpb3VzTm9kZS50eXBlJiYoaS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaS5wcmV2aW91c05vZGU9aHQpO3ZhciBhPUkoby5kZWxheSk7aS5kZWxheU5leHRTdGVwKGEpfXQuc3RlcHMubGVuZ3RoJiYodC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBHKG4sdCxpKX0pLGkuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGkuc3ViQ29udGV4dENvdW50PnImJmkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0R3JvdXA9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9W10saT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXQub3B0aW9ucyYmdC5vcHRpb25zLmRlbGF5P0kodC5vcHRpb25zLmRlbGF5KTowO3Quc3RlcHMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgcz1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtvJiZzLmRlbGF5TmV4dFN0ZXAobyksRyhuLGEscyksaT1NYXRoLm1heChpLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxyLnB1c2gocy5jdXJyZW50VGltZWxpbmUpfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHQpfSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0VGltaW5nPWZ1bmN0aW9uKHQsZSl7aWYodC5keW5hbWljKXt2YXIgbj10LnN0clZhbHVlO3JldHVybiBqKGUucGFyYW1zP3oobixlLnBhcmFtcyxlLmVycm9ycyk6bixlLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOnQuZHVyYXRpb24sZGVsYXk6dC5kZWxheSxlYXNpbmc6dC5lYXNpbmd9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSkscj1lLmN1cnJlbnRUaW1lbGluZTtuLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKG4uZGVsYXkpLHIuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO3ZhciBpPXQuc3R5bGU7NT09aS50eXBlP3RoaXMudmlzaXRLZXlmcmFtZXMoaSxlKTooZS5pbmNyZW1lbnRUaW1lKG4uZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShpLGUpLHIuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudFRpbWVsaW5lLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IXImJm4uZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCYmbi5mb3J3YXJkRnJhbWUoKTt2YXIgaT1yJiZyLmVhc2luZ3x8dC5lYXNpbmc7dC5pc0VtcHR5U3RlcD9uLmFwcGx5RW1wdHlTdGVwKGkpOm4uc2V0U3R5bGVzKHQuc3R5bGVzLGksZS5lcnJvcnMsZS5vcHRpb25zKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdEtleWZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24saT1uLmR1cmF0aW9uLG89ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO28uZWFzaW5nPW4uZWFzaW5nLHQuc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7by5mb3J3YXJkVGltZSgodC5vZmZzZXR8fDApKmkpLG8uc2V0U3R5bGVzKHQuc3R5bGVzLHQuZWFzaW5nLGUuZXJyb3JzLGUub3B0aW9ucyksby5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobyksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocitpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGk9dC5vcHRpb25zfHx7fSxvPWkuZGVsYXk/SShpLmRlbGF5KTowO28mJig2PT09ZS5wcmV2aW91c05vZGUudHlwZXx8MD09ciYmZS5jdXJyZW50VGltZWxpbmUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCkmJihlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxlLnByZXZpb3VzTm9kZT1odCk7dmFyIGE9cixzPWUuaW52b2tlUXVlcnkodC5zZWxlY3Rvcix0Lm9yaWdpbmFsU2VsZWN0b3IsdC5saW1pdCx0LmluY2x1ZGVTZWxmLCEhaS5vcHRpb25hbCxlLmVycm9ycyk7ZS5jdXJyZW50UXVlcnlUb3RhbD1zLmxlbmd0aDt2YXIgdT1udWxsO3MuZm9yRWFjaChmdW5jdGlvbihyLGkpe2UuY3VycmVudFF1ZXJ5SW5kZXg9aTt2YXIgcz1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zLHIpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxyPT09ZS5lbGVtZW50JiYodT1zLmN1cnJlbnRUaW1lbGluZSksRyhuLHQuYW5pbWF0aW9uLHMpLHMuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGE9TWF0aC5tYXgoYSxzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxlLmN1cnJlbnRRdWVyeUluZGV4PTAsZS5jdXJyZW50UXVlcnlUb3RhbD0wLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGEpLHUmJihlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHUpLGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnBhcmVudENvbnRleHQscj1lLmN1cnJlbnRUaW1lbGluZSxpPXQudGltaW5ncyxvPU1hdGguYWJzKGkuZHVyYXRpb24pLGE9byooZS5jdXJyZW50UXVlcnlUb3RhbC0xKSxzPW8qZS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goaS5kdXJhdGlvbjwwPyJyZXZlcnNlIjppLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpzPWEtczticmVhaztjYXNlImZ1bGwiOnM9bi5jdXJyZW50U3RhZ2dlclRpbWV9dmFyIHU9ZS5jdXJyZW50VGltZWxpbmU7cyYmdS5kZWxheU5leHRTdGVwKHMpO3ZhciBsPXUuY3VycmVudFRpbWU7Ryh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXQsbi5jdXJyZW50U3RhZ2dlclRpbWU9ci5jdXJyZW50VGltZS1sKyhyLnN0YXJ0VGltZS1uLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfSx0fSgpLGh0PXt9LGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPW4sdGhpcy5fZW50ZXJDbGFzc05hbWU9cix0aGlzLl9sZWF2ZUNsYXNzTmFtZT1pLHRoaXMuZXJyb3JzPW8sdGhpcy50aW1lbGluZXM9YSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPWh0LHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1zfHxuZXcgcHQodGhpcy5fZHJpdmVyLGUsMCksYS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS51cGRhdGVPcHRpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih0KXt2YXIgcj10LGk9dGhpcy5vcHRpb25zO251bGwhPXIuZHVyYXRpb24mJihpLmR1cmF0aW9uPUkoci5kdXJhdGlvbikpLG51bGwhPXIuZGVsYXkmJihpLmRlbGF5PUkoci5kZWxheSkpO3ZhciBvPXIucGFyYW1zO2lmKG8pe3ZhciBhPWkucGFyYW1zO2F8fChhPXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24odCl7ZSYmYS5oYXNPd25Qcm9wZXJ0eSh0KXx8KGFbdF09eihvW3RdLGEsbi5lcnJvcnMpKX0pfX19LHQucHJvdG90eXBlLl9jb3B5T3B0aW9ucz1mdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMub3B0aW9ucyl7dmFyIGU9dGhpcy5vcHRpb25zLnBhcmFtcztpZihlKXt2YXIgbj10LnBhcmFtcz17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09ZVt0XX0pfX1yZXR1cm4gdH0sdC5wcm90b3R5cGUuY3JlYXRlU3ViQ29udGV4dD1mdW5jdGlvbihlLG4scil7dm9pZCAwPT09ZSYmKGU9bnVsbCk7dmFyIGk9bnx8dGhpcy5lbGVtZW50LG89bmV3IHQodGhpcy5fZHJpdmVyLGksdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhpLHJ8fDApKTtyZXR1cm4gby5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsby5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3Msby5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksby51cGRhdGVPcHRpb25zKGUpLG8uY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxvLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsby5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxvfSx0LnByb3RvdHlwZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPWh0LHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LHQpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfSx0LnByb3RvdHlwZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXtkdXJhdGlvbjpudWxsIT1lP2U6dC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsobnVsbCE9bj9uOjApK3QuZGVsYXksZWFzaW5nOiIifSxpPW5ldyBtdCh0aGlzLl9kcml2ZXIsdC5lbGVtZW50LHQua2V5ZnJhbWVzLHQucHJlU3R5bGVQcm9wcyx0LnBvc3RTdHlsZVByb3BzLHIsdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goaSkscn0sdC5wcm90b3R5cGUuaW5jcmVtZW50VGltZT1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbit0KX0sdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9LHQucHJvdG90eXBlLmludm9rZVF1ZXJ5PWZ1bmN0aW9uKHQsZSxuLGksbyxhKXt2YXIgcz1bXTtpZihpJiZzLnB1c2godGhpcy5lbGVtZW50KSx0Lmxlbmd0aD4wKXt0PSh0PXQucmVwbGFjZSh1dCwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKGx0LCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7dmFyIHU9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCx0LDEhPW4pOzAhPT1uJiYodT1uPDA/dS5zbGljZSh1Lmxlbmd0aCtuLHUubGVuZ3RoKTp1LnNsaWNlKDAsbikpLHMucHVzaC5hcHBseShzLE9iamVjdChyLmQpKHUpKX1yZXR1cm4gb3x8MCE9cy5sZW5ndGh8fGEucHVzaCgnYHF1ZXJ5KCInK2UrJyIpYCByZXR1cm5lZCB6ZXJvIGVsZW1lbnRzLiAoVXNlIGBxdWVyeSgiJytlKyciLCB7IG9wdGlvbmFsOiB0cnVlIH0pYCBpZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGlzLiknKSxzfSx0fSgpLHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN0YXJ0VGltZT1uLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1yLHRoaXMuZHVyYXRpb249MCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPXt9LHRoaXMuX2N1cnJlbnRLZXlmcmFtZT17fSx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9e30sdGhpcy5fcGVuZGluZ1N0eWxlcz17fSx0aGlzLl9iYWNrRmlsbD17fSx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcz1PYmplY3QuY3JlYXRlKHRoaXMuX2JhY2tGaWxsLHt9KSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGUpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGUsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfXJldHVybiB0LnByb3RvdHlwZS5jb250YWluc0FuaW1hdGlvbj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoPjA7ZGVmYXVsdDpyZXR1cm4hMH19LHQucHJvdG90eXBlLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fY3VycmVudEtleWZyYW1lKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjdXJyZW50VGltZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlbGF5TmV4dFN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9MT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJk9iamVjdC5rZXlzKHRoaXMuX3BlbmRpbmdTdHlsZXMpLmxlbmd0aDt0aGlzLmR1cmF0aW9ufHxlPyh0aGlzLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWUrdCksZSYmdGhpcy5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk6dGhpcy5zdGFydFRpbWUrPXR9LHQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgdCh0aGlzLl9kcml2ZXIsZSxufHx0aGlzLmN1cnJlbnRUaW1lLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cCl9LHQucHJvdG90eXBlLl9sb2FkS2V5ZnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX0sdC5wcm90b3R5cGUuZm9yd2FyZEZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuZm9yd2FyZFRpbWU9ZnVuY3Rpb24odCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9LHQucHJvdG90eXBlLl91cGRhdGVTdHlsZT1mdW5jdGlvbih0LGUpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXNbdF09ZSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX3N0eWxlU3VtbWFyeVt0XT17dGltZTp0aGlzLmN1cnJlbnRUaW1lLHZhbHVlOmV9fSx0LnByb3RvdHlwZS5hbGxvd09ubHlUaW1lbGluZVN0eWxlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9LHQucHJvdG90eXBlLmFwcGx5RW1wdHlTdGVwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPXQpLE9iamVjdC5rZXlzKHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX2JhY2tGaWxsW3RdPWUuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdfHxpLmEsZS5fY3VycmVudEtleWZyYW1lW3RdPWkuYX0pLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9LHQucHJvdG90eXBlLnNldFN0eWxlcz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz10aGlzO2UmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lLmVhc2luZz1lKTt2YXIgYT1yJiZyLnBhcmFtc3x8e30scz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXsiKiI9PT10PyhuPW58fE9iamVjdC5rZXlzKGUpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09aS5hfSk6TSh0LCExLHIpfSkscn0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7T2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT16KHNbdF0sYSxuKTtvLl9wZW5kaW5nU3R5bGVzW3RdPWUsby5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KG8uX2JhY2tGaWxsW3RdPW8uX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpP28uX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdOmkuYSksby5fdXBkYXRlU3R5bGUodCxlKX0pfSx0LnByb3RvdHlwZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fcGVuZGluZ1N0eWxlcyxuPU9iamVjdC5rZXlzKGUpOzAhPW4ubGVuZ3RoJiYodGhpcy5fcGVuZGluZ1N0eWxlcz17fSxuLmZvckVhY2goZnVuY3Rpb24obil7dC5fY3VycmVudEtleWZyYW1lW25dPWVbbl19KSxPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuX2N1cnJlbnRLZXlmcmFtZS5oYXNPd25Qcm9wZXJ0eShlKXx8KHQuX2N1cnJlbnRLZXlmcmFtZVtlXT10Ll9sb2NhbFRpbWVsaW5lU3R5bGVzW2VdKX0pKX0sdC5wcm90b3R5cGUuc25hcHNob3RDdXJyZW50U3R5bGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV07dC5fcGVuZGluZ1N0eWxlc1tlXT1uLHQuX3VwZGF0ZVN0eWxlKGUsbil9KX0sdC5wcm90b3R5cGUuZ2V0RmluYWxLZXlmcmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3BlcnRpZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKXQucHVzaChlKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7T2JqZWN0LmtleXModC5fc3R5bGVTdW1tYXJ5KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWUuX3N0eWxlU3VtbWFyeVtuXSxpPXQuX3N0eWxlU3VtbWFyeVtuXTsoIXJ8fGkudGltZT5yLnRpbWUpJiZlLl91cGRhdGVTdHlsZShuLGkudmFsdWUpfSl9LHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO3ZhciBlPW5ldyBTZXQsbj1uZXcgU2V0LHI9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbixvPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7dmFyIHU9TShhLCEwKTtPYmplY3Qua2V5cyh1KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXVbdF07cj09aS5vP2UuYWRkKHQpOnI9PWkuYSYmbi5hZGQodCl9KSxyfHwodS5vZmZzZXQ9cy90LmR1cmF0aW9uKSxvLnB1c2godSl9KTt2YXIgYT1lLnNpemU/QihlLnZhbHVlcygpKTpbXSxzPW4uc2l6ZT9CKG4udmFsdWVzKCkpOltdO2lmKHIpe3ZhciB1PW9bMF0sbD1QKHUpO3Uub2Zmc2V0PTAsbC5vZmZzZXQ9MSxvPVt1LGxdfXJldHVybiBhdCh0aGlzLmVsZW1lbnQsbyxhLHMsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9LHR9KCksbXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSxzKXt2b2lkIDA9PT1zJiYocz0hMSk7dmFyIHU9dC5jYWxsKHRoaXMsZSxuLGEuZGVsYXkpfHx0aGlzO3JldHVybiB1LmVsZW1lbnQ9bix1LmtleWZyYW1lcz1yLHUucHJlU3R5bGVQcm9wcz1pLHUucG9zdFN0eWxlUHJvcHM9byx1Ll9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1zLHUudGltaW5ncz17ZHVyYXRpb246YS5kdXJhdGlvbixkZWxheTphLmRlbGF5LGVhc2luZzphLmVhc2luZ30sdX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jb250YWluc0FuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX0sZS5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmtleWZyYW1lcyxlPXRoaXMudGltaW5ncyxuPWUuZGVsYXkscj1lLmR1cmF0aW9uLGk9ZS5lYXNpbmc7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJm4pe3ZhciBvPVtdLGE9cituLHM9bi9hLHU9TSh0WzBdLCExKTt1Lm9mZnNldD0wLG8ucHVzaCh1KTt2YXIgbD1NKHRbMF0sITEpO2wub2Zmc2V0PXl0KHMpLG8ucHVzaChsKTtmb3IodmFyIGM9dC5sZW5ndGgtMSxmPTE7Zjw9YztmKyspe3ZhciBoPU0odFtmXSwhMSk7aC5vZmZzZXQ9eXQoKG4raC5vZmZzZXQqcikvYSksby5wdXNoKGgpfXI9YSxuPTAsaT0iIix0PW99cmV0dXJuIGF0KHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLHIsbixpLCEwKX0sZX0ocHQpO2Z1bmN0aW9uIHl0KHQsZSl7dm9pZCAwPT09ZSYmKGU9Myk7dmFyIG49TWF0aC5wb3coMTAsZS0xKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259dmFyIGd0PWZ1bmN0aW9uKCl7fSx2dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVyh0KX0sZS5wcm90b3R5cGUubm9ybWFsaXplU3R5bGVWYWx1ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT0iIixvPW4udG9TdHJpbmcoKS50cmltKCk7aWYoYnRbZV0mJjAhPT1uJiYiMCIhPT1uKWlmKCJudW1iZXIiPT10eXBlb2YgbilpPSJweCI7ZWxzZXt2YXIgYT1uLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJnIucHVzaCgiUGxlYXNlIHByb3ZpZGUgYSBDU1MgdW5pdCB2YWx1ZSBmb3IgIit0KyI6IituKX1yZXR1cm4gbytpfSxlfShndCksYnQ9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIndpZHRoLGhlaWdodCxtaW5XaWR0aCxtaW5IZWlnaHQsbWF4V2lkdGgsbWF4SGVpZ2h0LGxlZnQsdG9wLGJvdHRvbSxyaWdodCxmb250U2l6ZSxvdXRsaW5lV2lkdGgsb3V0bGluZU9mZnNldCxwYWRkaW5nVG9wLHBhZGRpbmdMZWZ0LHBhZGRpbmdCb3R0b20scGFkZGluZ1JpZ2h0LG1hcmdpblRvcCxtYXJnaW5MZWZ0LG1hcmdpbkJvdHRvbSxtYXJnaW5SaWdodCxib3JkZXJSYWRpdXMsYm9yZGVyV2lkdGgsYm9yZGVyVG9wV2lkdGgsYm9yZGVyTGVmdFdpZHRoLGJvcmRlclJpZ2h0V2lkdGgsYm9yZGVyQm90dG9tV2lkdGgsdGV4dEluZGVudCxwZXJzcGVjdGl2ZSIuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPSEwfSksZX0oKTtmdW5jdGlvbiBfdCh0LGUsbixyLGksbyxhLHMsdSxsLGMsZixoKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGlzUmVtb3ZhbFRyYW5zaXRpb246aSxmcm9tU3RhdGU6bixmcm9tU3R5bGVzOm8sdG9TdGF0ZTpyLHRvU3R5bGVzOmEsdGltZWxpbmVzOnMscXVlcmllZEVsZW1lbnRzOnUscHJlU3R5bGVQcm9wczpsLHBvc3RTdHlsZVByb3BzOmMsdG90YWxUaW1lOmYsZXJyb3JzOmh9fXZhciB3dD17fSx4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3RyaWdnZXJOYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9zdGF0ZVN0eWxlcz1ufXJldHVybiB0LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gdC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0KGUsbixyLGkpfSl9KHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxuLHIpfSx0LnByb3RvdHlwZS5idWlsZFN0eWxlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fc3RhdGVTdHlsZXNbIioiXSxpPXRoaXMuX3N0YXRlU3R5bGVzW3RdLG89cj9yLmJ1aWxkU3R5bGVzKGUsbik6e307cmV0dXJuIGk/aS5idWlsZFN0eWxlcyhlLG4pOm99LHQucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKHQsZSxuLGksbyxhLHMsdSxsLGMpe3ZhciBoPVtdLGQ9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fHd0LHA9dGhpcy5idWlsZFN0eWxlcyhuLHMmJnMucGFyYW1zfHx3dCxoKSxtPXUmJnUucGFyYW1zfHx3dCx5PXRoaXMuYnVpbGRTdHlsZXMoaSxtLGgpLGc9bmV3IFNldCx2PW5ldyBNYXAsYj1uZXcgTWFwLF89InZvaWQiPT09aSx3PXtwYXJhbXM6T2JqZWN0KHIuYSkoe30sZCxtKX0seD1jP1tdOmN0KHQsZSx0aGlzLmFzdC5hbmltYXRpb24sbyxhLHAseSx3LGwsaCksTz0wO2lmKHguZm9yRWFjaChmdW5jdGlvbih0KXtPPU1hdGgubWF4KHQuZHVyYXRpb24rdC5kZWxheSxPKX0pLGgubGVuZ3RoKXJldHVybiBfdChlLHRoaXMuX3RyaWdnZXJOYW1lLG4saSxfLHAseSxbXSxbXSx2LGIsTyxoKTt4LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5lbGVtZW50LHI9Zih2LG4se30pO3QucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdPSEwfSk7dmFyIGk9ZihiLG4se30pO3QucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaVt0XT0hMH0pLG4hPT1lJiZnLmFkZChuKX0pO3ZhciBDPUIoZy52YWx1ZXMoKSk7cmV0dXJuIF90KGUsdGhpcy5fdHJpZ2dlck5hbWUsbixpLF8scCx5LHgsQyx2LGIsTyl9LHR9KCksT3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5zdHlsZXM9dCx0aGlzLmRlZmF1bHRQYXJhbXM9ZX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fSxyPVAodGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10W2VdO251bGwhPW4mJihyW2VdPW4pfSksdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgaT10O09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG89aVt0XTtvLmxlbmd0aD4xJiYobz16KG8scixlKSksblt0XT1vfSl9fSksbn0sdH0oKSxDdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPXt9LGUuc3RhdGVzLmZvckVhY2goZnVuY3Rpb24odCl7bi5zdGF0ZXNbdC5uYW1lXT1uZXcgT3QodC5zdHlsZSx0Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fHt9KX0pLFN0KHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLFN0KHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxlLnRyYW5zaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7bi50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IHh0KHQsZSxuLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249bmV3IHh0KHQse3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOltmdW5jdGlvbih0LGUpe3JldHVybiEwfV0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0aGlzLnN0YXRlcyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGFpbnNRdWVyaWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tYXRjaFRyYW5zaXRpb249ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGkpe3JldHVybiBpLm1hdGNoKHQsZSxuLHIpfSl8fG51bGx9LHQucHJvdG90eXBlLm1hdGNoU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLG4pfSx0fSgpO2Z1bmN0aW9uIFN0KHQsZSxuKXt0Lmhhc093blByb3BlcnR5KGUpP3QuaGFzT3duUHJvcGVydHkobil8fCh0W25dPXRbZV0pOnQuaGFzT3duUHJvcGVydHkobikmJih0W2VdPXRbbl0pfXZhciBFdD1uZXcgc3Qsa3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1uLHRoaXMuX2FuaW1hdGlvbnM9e30sdGhpcy5fcGxheWVyc0J5SWQ9e30sdGhpcy5wbGF5ZXJzPVtdfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPVtdLHI9dHQodGhpcy5fZHJpdmVyLGUsbik7aWYobi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYnVpbGQgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrbi5qb2luKCJcbiIpKTt0aGlzLl9hbmltYXRpb25zW3RdPXJ9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5lbGVtZW50LGk9cygwLHRoaXMuX25vcm1hbGl6ZXIsMCx0LmtleWZyYW1lcyxlLG4pO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShyLGksdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLFtdLCEwKX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgbyxzPVtdLHU9dGhpcy5fYW5pbWF0aW9uc1t0XSxsPW5ldyBNYXA7aWYodT8obz1jdCh0aGlzLl9kcml2ZXIsZSx1LCJuZy1lbnRlciIsIm5nLWxlYXZlIix7fSx7fSxuLEV0LHMpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWYobCx0LmVsZW1lbnQse30pO3QucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT1udWxsfSl9KToocy5wdXNoKCJUaGUgcmVxdWVzdGVkIGFuaW1hdGlvbiBkb2Vzbid0IGV4aXN0IG9yIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIiksbz1bXSkscy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gY3JlYXRlIHRoZSBhbmltYXRpb24gZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiAiK3Muam9pbigiXG4iKSk7bC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt0W25dPXIuX2RyaXZlci5jb21wdXRlU3R5bGUoZSxuLGkuYSl9KX0pO3ZhciBjPWEoby5tYXAoZnVuY3Rpb24odCl7dmFyIGU9bC5nZXQodC5lbGVtZW50KTtyZXR1cm4gci5fYnVpbGRQbGF5ZXIodCx7fSxlKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWRbdF09YyxjLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiByLmRlc3Ryb3kodCl9KSx0aGlzLnBsYXllcnMucHVzaChjKSxjfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldFBsYXllcih0KTtlLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5fcGxheWVyc0J5SWRbdF07dmFyIG49dGhpcy5wbGF5ZXJzLmluZGV4T2YoZSk7bj49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShuLDEpfSx0LnByb3RvdHlwZS5fZ2V0UGxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BsYXllcnNCeUlkW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdGhlIHRpbWVsaW5lIHBsYXllciByZWZlcmVuY2VkIGJ5ICIrdCk7cmV0dXJuIGV9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1jKGUsIiIsIiIsIiIpO3JldHVybiB1KHRoaXMuX2dldFBsYXllcih0KSxuLGksciksZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5jb21tYW5kPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCJyZWdpc3RlciIhPW4paWYoImNyZWF0ZSIhPW4pe3ZhciBpPXRoaXMuX2dldFBsYXllcih0KTtzd2l0Y2gobil7Y2FzZSJwbGF5IjppLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjppLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6aS5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6aS5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOmkuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjppLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjppLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoclswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KHQpfX1lbHNlIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7ZWxzZSB0aGlzLnJlZ2lzdGVyKHQsclswXSl9LHR9KCksVHQ9W10sSXQ9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LEF0PXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxqdD0iX19uZ19yZW1vdmVkIixQdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT0iIiksdGhpcy5uYW1lc3BhY2VJZD1lO3ZhciBuPXQmJnQuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dD90Om51bGx9KG4/dC52YWx1ZTp0KSxuKXt2YXIgcj1QKHQpO2RlbGV0ZSByLnZhbHVlLHRoaXMub3B0aW9ucz1yfWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hYnNvcmJPcHRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyYW1zO2lmKGUpe3ZhciBuPXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtudWxsPT1uW3RdJiYoblt0XT1lW3RdKX0pfX0sdH0oKSxNdD1uZXcgUHQoInZvaWQiKSxOdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPW4sdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPXt9LHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIit0LEJ0KGUsdGhpcy5faG9zdENsYXNzTmFtZSl9cmV0dXJuIHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvPXRoaXM7aWYoIXRoaXMuX3RyaWdnZXJzLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxpc3RlbiBvbiB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgZXZlbnQgIicrbisnIiBiZWNhdXNlIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyJcIiBkb2Vzbid0IGV4aXN0ISIpO2lmKG51bGw9PW58fDA9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxpc3RlbiBvbiB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIicrZSsnIiBiZWNhdXNlIHRoZSBwcm92aWRlZCBldmVudCBpcyB1bmRlZmluZWQhJyk7aWYoInN0YXJ0IiE9KGk9bikmJiJkb25lIiE9aSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBhbmltYXRpb24gdHJpZ2dlciBldmVudCAiJytuKyciIGZvciB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkIScpO3ZhciBhPWYodGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxzPXtuYW1lOmUscGhhc2U6bixjYWxsYmFjazpyfTthLnB1c2gocyk7dmFyIHU9Zih0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQse30pO3JldHVybiB1Lmhhc093blByb3BlcnR5KGUpfHwoQnQodCwibmctdHJpZ2dlciIpLEJ0KHQsIm5nLXRyaWdnZXItIitlKSx1W2VdPU10KSxmdW5jdGlvbigpe28uX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7dmFyIHQ9YS5pbmRleE9mKHMpO3Q+PTAmJmEuc3BsaWNlKHQsMSksby5fdHJpZ2dlcnNbZV18fGRlbGV0ZSB1W2VdfSl9fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vyc1t0XSYmKHRoaXMuX3RyaWdnZXJzW3RdPWUsITApfSx0LnByb3RvdHlwZS5fZ2V0VHJpZ2dlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmlnZ2Vyc1t0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBhbmltYXRpb24gdHJpZ2dlciAiJyt0KyciIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIScpO3JldHVybiBlfSx0LnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXM7dm9pZCAwPT09ciYmKHI9ITApO3ZhciBvPXRoaXMuX2dldFRyaWdnZXIoZSksYT1uZXcgRHQodGhpcy5pZCxlLHQpLHM9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7c3x8KEJ0KHQsIm5nLXRyaWdnZXIiKSxCdCh0LCJuZy10cmlnZ2VyLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxzPXt9KSk7dmFyIHU9c1tlXSxsPW5ldyBQdChuLHRoaXMuaWQpO2lmKCEobiYmbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJnUmJmwuYWJzb3JiT3B0aW9ucyh1Lm9wdGlvbnMpLHNbZV09bCx1fHwodT1NdCksInZvaWQiPT09bC52YWx1ZXx8dS52YWx1ZSE9PWwudmFsdWUpe3ZhciBjPWYodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsdCxbXSk7Yy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QubmFtZXNwYWNlSWQ9PWkuaWQmJnQudHJpZ2dlck5hbWU9PWUmJnQucXVldWVkJiZ0LmRlc3Ryb3koKX0pO3ZhciBoPW8ubWF0Y2hUcmFuc2l0aW9uKHUudmFsdWUsbC52YWx1ZSx0LGwucGFyYW1zKSxkPSExO2lmKCFoKXtpZighcilyZXR1cm47aD1vLmZhbGxiYWNrVHJhbnNpdGlvbixkPSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsdHJhbnNpdGlvbjpoLGZyb21TdGF0ZTp1LHRvU3RhdGU6bCxwbGF5ZXI6YSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjpkfSksZHx8KEJ0KHQsIm5nLWFuaW1hdGUtcXVldWVkIiksYS5vblN0YXJ0KGZ1bmN0aW9uKCl7SHQodCwibmctYW5pbWF0ZS1xdWV1ZWQiKX0pKSxhLm9uRG9uZShmdW5jdGlvbigpe3ZhciBlPWkucGxheWVycy5pbmRleE9mKGEpO2U+PTAmJmkucGxheWVycy5zcGxpY2UoZSwxKTt2YXIgbj1pLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYobil7dmFyIHI9bi5pbmRleE9mKGEpO3I+PTAmJm4uc3BsaWNlKHIsMSl9fSksdGhpcy5wbGF5ZXJzLnB1c2goYSksYy5wdXNoKGEpLGF9aWYoIWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCkscj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aCE9ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV07aWYoIWUuaGFzT3duUHJvcGVydHkobyl8fHRbb10hPT1lW29dKXJldHVybiExfXJldHVybiEwfSh1LnBhcmFtcyxsLnBhcmFtcykpe3ZhciBwPVtdLG09by5tYXRjaFN0eWxlcyh1LnZhbHVlLHUucGFyYW1zLHApLHk9by5tYXRjaFN0eWxlcyhsLnZhbHVlLGwucGFyYW1zLHApO3AubGVuZ3RoP3RoaXMuX2VuZ2luZS5yZXBvcnRFcnJvcihwKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe0wodCxtKSxEKHQseSl9KX19LHQucHJvdG90eXBlLmRlcmVnaXN0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztkZWxldGUgdGhpcy5fdHJpZ2dlcnNbdF0sdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZGVsZXRlIGVbdF19KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obixyKXtlLl9lbGVtZW50TGlzdGVuZXJzLnNldChyLG4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUhPXR9KSl9KX0sdC5wcm90b3R5cGUuY2xlYXJFbGVtZW50Q2FjaGU9ZnVuY3Rpb24odCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7dmFyIGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtpZighdFtqdF0pe3ZhciBuPXIuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCk7bi5zaXplP24uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbi50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCExLCEwKX0pOnIuY2xlYXJFbGVtZW50Q2FjaGUodCl9fSl9LHQucHJvdG90eXBlLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobyl7dmFyIHM9W107aWYoT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihpLl90cmlnZ2Vyc1tlXSl7dmFyIG49aS50cmlnZ2VyKHQsZSwidm9pZCIscik7biYmcy5wdXNoKG4pfX0pLHMubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUpLG4mJmEocykub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKHQpfSksITB9cmV0dXJuITF9LHQucHJvdG90eXBlLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQodCk7aWYobil7dmFyIHI9bmV3IFNldDtuLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9bi5uYW1lO2lmKCFyLmhhcyhpKSl7ci5hZGQoaSk7dmFyIG89ZS5fdHJpZ2dlcnNbaV0uZmFsbGJhY2tUcmFuc2l0aW9uLGE9ZS5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodClbaV18fE10LHM9bmV3IFB0KCJ2b2lkIiksdT1uZXcgRHQoZS5pZCxpLHQpO2UuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyxlLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6aSx0cmFuc2l0aW9uOm8sZnJvbVN0YXRlOmEsdG9TdGF0ZTpzLHBsYXllcjp1LGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9fSl9fSx0LnByb3RvdHlwZS5yZW1vdmVOb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMuX2VuZ2luZTtpZih0LmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUsITApLCF0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITApKXt2YXIgaT0hMTtpZihyLnRvdGFsQW5pbWF0aW9ucyl7dmFyIG89ci5wbGF5ZXJzLmxlbmd0aD9yLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTpbXTtpZihvJiZvLmxlbmd0aClpPSEwO2Vsc2UgZm9yKHZhciBhPXQ7YT1hLnBhcmVudE5vZGU7KWlmKHIuc3RhdGVzQnlFbGVtZW50LmdldChhKSl7aT0hMDticmVha319dGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCksaT9yLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMSxlKTooci5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY2xlYXJFbGVtZW50Q2FjaGUodCl9KSxyLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCksci5fb25SZW1vdmFsQ29tcGxldGUodCxlKSl9fSx0LnByb3RvdHlwZS5pbnNlcnROb2RlPWZ1bmN0aW9uKHQsZSl7QnQodCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX0sdC5wcm90b3R5cGUuZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHRoaXMuX3F1ZXVlLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIGk9ci5wbGF5ZXI7aWYoIWkuZGVzdHJveWVkKXt2YXIgbz1yLmVsZW1lbnQsYT1lLl9lbGVtZW50TGlzdGVuZXJzLmdldChvKTthJiZhLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5uYW1lPT1yLnRyaWdnZXJOYW1lKXt2YXIgbj1jKG8sci50cmlnZ2VyTmFtZSxyLmZyb21TdGF0ZS52YWx1ZSxyLnRvU3RhdGUudmFsdWUpO24uX2RhdGE9dCx1KHIucGxheWVyLGUucGhhc2UsbixlLmNhbGxiYWNrKX19KSxpLm1hcmtlZEZvckRlc3Ryb3k/ZS5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtpLmRlc3Ryb3koKX0pOm4ucHVzaChyKX19KSx0aGlzLl9xdWV1ZT1bXSxuLnNvcnQoZnVuY3Rpb24odCxuKXt2YXIgcj10LnRyYW5zaXRpb24uYXN0LmRlcENvdW50LGk9bi50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09cnx8MD09aT9yLWk6ZS5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQodC5lbGVtZW50LG4uZWxlbWVudCk/MTotMX0pfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9LHQucHJvdG90eXBlLmVsZW1lbnRDb250YWluc0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksISF0aGlzLl9xdWV1ZS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVsZW1lbnQ9PT10fSl8fGV9LHR9KCksUnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPW4sdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fX1yZXR1cm4gdC5wcm90b3R5cGUuX29uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXVlZFBsYXllcnMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucXVldWVkJiZ0LnB1c2goZSl9KX0pLHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IE50KHQsZSx0aGlzKTtyZXR1cm4gZS5wYXJlbnROb2RlP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KG4sZSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChlLG4pLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdPW59LHQucHJvdG90eXBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7aWYobj49MCl7Zm9yKHZhciByPSExLGk9bjtpPj0wO2ktLSlpZih0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5fbmFtZXNwYWNlTGlzdFtpXS5ob3N0RWxlbWVudCxlKSl7dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaSsxLDAsdCkscj0hMDticmVha31yfHx0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZSgwLDAsdCl9ZWxzZSB0aGlzLl9uYW1lc3BhY2VMaXN0LnB1c2godCk7cmV0dXJuIHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuc2V0KGUsdCksdH0sdC5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIG58fChuPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLG59LHQucHJvdG90eXBlLnJlZ2lzdGVyVHJpZ2dlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxuKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYodCl7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7bi5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoci5ob3N0RWxlbWVudCksZGVsZXRlIG4uX25hbWVzcGFjZUxvb2t1cFt0XTt2YXIgZT1uLl9uYW1lc3BhY2VMaXN0LmluZGV4T2Yocik7ZT49MCYmbi5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoZSwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVzdHJveShlKX0pfX0sdC5wcm90b3R5cGUuX2ZldGNoTmFtZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF19LHQucHJvdG90eXBlLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgU2V0LG49dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pZm9yKHZhciByPU9iamVjdC5rZXlzKG4pLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89bltyW2ldXS5uYW1lc3BhY2VJZDtpZihvKXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZShvKTthJiZlLmFkZChhKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scil7aWYoTHQoZSkpe3ZhciBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKGkpcmV0dXJuIGkudHJpZ2dlcihlLG4sciksITB9cmV0dXJuITF9LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlLG4scil7aWYoTHQoZSkpe3ZhciBpPWVbanRdO2lmKGkmJmkuc2V0Rm9yUmVtb3ZhbCl7aS5zZXRGb3JSZW1vdmFsPSExLGkuc2V0Rm9yTW92ZT0hMDt2YXIgbz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtvPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKG8sMSl9aWYodCl7dmFyIGE9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7YSYmYS5pbnNlcnROb2RlKGUsbil9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfX0sdC5wcm90b3R5cGUuY29sbGVjdEVudGVyRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc0Rpc2FibGVkPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxCdCh0LCJuZy1hbmltYXRlLWRpc2FibGVkIikpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXModCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKHQpLEh0KHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSl9LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlLG4pe2lmKEx0KGUpKXt2YXIgcj10P3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpOm51bGw7cj9yLnJlbW92ZU5vZGUoZSxuKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSwhMSxuKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUsbil9LHQucHJvdG90eXBlLm1hcmtFbGVtZW50QXNSZW1vdmVkPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGVbanRdPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6cixoYXNBbmltYXRpb246bixyZW1vdmVkQmVmb3JlUXVlcmllZDohMX19LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBMdChlKT90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5saXN0ZW4oZSxuLHIsaSk6ZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5fYnVpbGRJbnN0cnVjdGlvbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxuLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLGkpfSx0LnByb3RvdHlwZS5kZXN0cm95SW5uZXJBbmltYXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLmRyaXZlci5xdWVyeSh0LCIubmctdHJpZ2dlciIsITApO24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl9KSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRpbmciLCEwKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnF1ZXVlZD90Lm1hcmtlZEZvckRlc3Ryb3k9ITA6dC5kZXN0cm95KCl9KX0sdC5wcm90b3R5cGUuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmluaXNoKCl9KX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtpZih0LnBsYXllcnMubGVuZ3RoKXJldHVybiBhKHQucGxheWVycykub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGUoKX0pO2UoKX0pfSx0LnByb3RvdHlwZS5wcm9jZXNzTGVhdmVOb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10W2p0XTtpZihuJiZuLnNldEZvclJlbW92YWwpe2lmKHRbanRdPUl0LG4ubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTt2YXIgcj10aGlzLl9mZXRjaE5hbWVzcGFjZShuLm5hbWVzcGFjZUlkKTtyJiZyLmNsZWFyRWxlbWVudENhY2hlKHQpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKHQsbi5zZXRGb3JSZW1vdmFsKX10aGlzLmRyaXZlci5tYXRjaGVzRWxlbWVudCh0LCIubmctYW5pbWF0ZS1kaXNhYmxlZCIpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goZnVuY3Rpb24obil7ZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSl9KX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0tMSk7dmFyIG49W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxuKX0pLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcih2YXIgcj0wO3I8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtyKyspQnQodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW3JdLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe3ZhciBpPVtdO3RyeXtuPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhpLHQpfWZpbmFsbHl7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdKCl9fWVsc2UgZm9yKHI9MDtyPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7cisrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbcl0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXt2YXIgbz10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLG4ubGVuZ3RoP2Eobikub25Eb25lKGZ1bmN0aW9uKCl7by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX0pOm8uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9fSx0LnByb3RvdHlwZS5yZXBvcnRFcnJvcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBwcm9jZXNzIGFuaW1hdGlvbnMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZmFpbGVkIHRyaWdnZXIgdHJhbnNpdGlvbnNcbiAiK3Quam9pbigiXG4iKSl9LHQucHJvdG90eXBlLl9mbHVzaEFuaW1hdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLG89bmV3IHN0LHM9W10sdT1uZXcgTWFwLGw9W10sYz1uZXcgTWFwLGg9bmV3IE1hcCxkPW5ldyBNYXAscD1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3AuYWRkKHQpO2Zvcih2YXIgZT1uLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspcC5hZGQoZVtyXSl9KTt2YXIgbT10aGlzLmJvZHlOb2RlLHk9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLGc9VXQoeSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLHY9bmV3IE1hcCxiPTA7Zy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49Im5nLWVudGVyIitiKys7di5zZXQoZSxuKSx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEJ0KHQsbil9KX0pO2Zvcih2YXIgXz1bXSx3PW5ldyBTZXQseD1uZXcgU2V0LE89MDtPPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7TysrKShCPSh6PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tPXSlbanRdKSYmQi5zZXRGb3JSZW1vdmFsJiYoXy5wdXNoKHopLHcuYWRkKHopLEIuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KHosIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdy5hZGQodCl9KTp4LmFkZCh6KSk7dmFyIEM9bmV3IE1hcCxTPVV0KHksQXJyYXkuZnJvbSh3KSk7Uy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49Im5nLWxlYXZlIitiKys7Qy5zZXQoZSxuKSx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEJ0KHQsbil9KX0pLHQucHVzaChmdW5jdGlvbigpe2cuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPXYuZ2V0KGUpO3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSHQodCxuKX0pfSksUy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49Qy5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIdCh0LG4pfSl9KSxfLmZvckVhY2goZnVuY3Rpb24odCl7bi5wcm9jZXNzTGVhdmVOb2RlKHQpfSl9KTtmb3IodmFyIEU9W10saz1bXSxUPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7VD49MDtULS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtUXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5wbGF5ZXIscj10LmVsZW1lbnQ7aWYoRS5wdXNoKGUpLG4uY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe3ZhciBpPXJbanRdO2lmKGkmJmkuc2V0Rm9yTW92ZSlyZXR1cm4gdm9pZCBlLmRlc3Ryb3koKX12YXIgYT0hbXx8IW4uZHJpdmVyLmNvbnRhaW5zRWxlbWVudChtLHIpLHU9Qy5nZXQocikscD12LmdldChyKSx5PW4uX2J1aWxkSW5zdHJ1Y3Rpb24odCxvLHAsdSxhKTtpZih5LmVycm9ycyYmeS5lcnJvcnMubGVuZ3RoKWsucHVzaCh5KTtlbHNle2lmKGEpcmV0dXJuIGUub25TdGFydChmdW5jdGlvbigpe3JldHVybiBMKHIseS5mcm9tU3R5bGVzKX0pLGUub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIEQocix5LnRvU3R5bGVzKX0pLHZvaWQgcy5wdXNoKGUpO2lmKHQuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIGUub25TdGFydChmdW5jdGlvbigpe3JldHVybiBMKHIseS5mcm9tU3R5bGVzKX0pLGUub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIEQocix5LnRvU3R5bGVzKX0pLHZvaWQgcy5wdXNoKGUpO3kudGltZWxpbmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITB9KSxvLmFwcGVuZChyLHkudGltZWxpbmVzKSxsLnB1c2goe2luc3RydWN0aW9uOnkscGxheWVyOmUsZWxlbWVudDpyfSkseS5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZihjLHQsW10pLnB1c2goZSl9KSx5LnByZVN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoKXt2YXIgcj1oLmdldChlKTtyfHxoLnNldChlLHI9bmV3IFNldCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByLmFkZCh0KX0pfX0pLHkucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpLHI9ZC5nZXQoZSk7cnx8ZC5zZXQoZSxyPW5ldyBTZXQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gci5hZGQodCl9KX0pfX0pO2lmKGsubGVuZ3RoKXt2YXIgST1bXTtrLmZvckVhY2goZnVuY3Rpb24odCl7SS5wdXNoKCJAIit0LnRyaWdnZXJOYW1lKyIgaGFzIGZhaWxlZCBkdWUgdG86XG4iKSx0LmVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBJLnB1c2goIi0gIit0KyJcbiIpfSl9KSxFLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5yZXBvcnRFcnJvcihJKX12YXIgQT1uZXcgTWFwLGo9bmV3IE1hcDtsLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50O28uaGFzKGUpJiYoai5zZXQoZSxlKSxuLl9iZWZvcmVBbmltYXRpb25CdWlsZCh0LnBsYXllci5uYW1lc3BhY2VJZCx0Lmluc3RydWN0aW9uLEEpKX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQ7bi5fZ2V0UHJldmlvdXNQbGF5ZXJzKGUsITEsdC5uYW1lc3BhY2VJZCx0LnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goZnVuY3Rpb24odCl7ZihBLGUsW10pLnB1c2godCksdC5kZXN0cm95KCl9KX0pO3ZhciBQPV8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBxdCh0LGgsZCl9KSxNPW5ldyBNYXA7VnQoTSx0aGlzLmRyaXZlcix4LGQsaS5hKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3F0KHQsaCxkKSYmUC5wdXNoKHQpfSk7dmFyIE49bmV3IE1hcDtnLmZvckVhY2goZnVuY3Rpb24odCxlKXtWdChOLG4uZHJpdmVyLG5ldyBTZXQodCksaCxpLm8pfSksUC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU0uZ2V0KHQpLG49Ti5nZXQodCk7TS5zZXQodCxPYmplY3Qoci5hKSh7fSxlLG4pKX0pO3ZhciBSPVtdLEY9W10sVj17fTtsLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50LHI9dC5wbGF5ZXIsaT10Lmluc3RydWN0aW9uO2lmKG8uaGFzKGUpKXtpZihwLmhhcyhlKSlyZXR1cm4gci5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChlLGkudG9TdHlsZXMpfSksci5kaXNhYmxlZD0hMCxyLm92ZXJyaWRlVG90YWxUaW1lKGkudG90YWxUaW1lKSx2b2lkIHMucHVzaChyKTt2YXIgbD1WO2lmKGouc2l6ZT4xKXtmb3IodmFyIGM9ZSxmPVtdO2M9Yy5wYXJlbnROb2RlOyl7dmFyIGg9ai5nZXQoYyk7aWYoaCl7bD1oO2JyZWFrfWYucHVzaChjKX1mLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGouc2V0KHQsbCl9KX12YXIgZD1uLl9idWlsZEFuaW1hdGlvbihyLm5hbWVzcGFjZUlkLGksQSx1LE4sTSk7aWYoci5zZXRSZWFsUGxheWVyKGQpLGw9PT1WKVIucHVzaChyKTtlbHNle3ZhciBtPW4ucGxheWVyc0J5RWxlbWVudC5nZXQobCk7bSYmbS5sZW5ndGgmJihyLnBhcmVudFBsYXllcj1hKG0pKSxzLnB1c2gocil9fWVsc2UgTChlLGkuZnJvbVN0eWxlcyksci5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChlLGkudG9TdHlsZXMpfSksRi5wdXNoKHIpLHAuaGFzKGUpJiZzLnB1c2gocil9KSxGLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dS5nZXQodC5lbGVtZW50KTtpZihlJiZlLmxlbmd0aCl7dmFyIG49YShlKTt0LnNldFJlYWxQbGF5ZXIobil9fSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucGFyZW50UGxheWVyP3Quc3luY1BsYXllckV2ZW50cyh0LnBhcmVudFBsYXllcik6dC5kZXN0cm95KCl9KTtmb3IodmFyIFU9MDtVPF8ubGVuZ3RoO1UrKyl7dmFyIHosQj0oej1fW1VdKVtqdF07aWYoSHQoeiwibmctbGVhdmUiKSwhQnx8IUIuaGFzQW5pbWF0aW9uKXt2YXIgSD1bXTtpZihjLnNpemUpe3ZhciBXPWMuZ2V0KHopO1cmJlcubGVuZ3RoJiZILnB1c2guYXBwbHkoSCxPYmplY3Qoci5kKShXKSk7Zm9yKHZhciBxPXRoaXMuZHJpdmVyLnF1ZXJ5KHosIi5uZy1hbmltYXRpbmciLCEwKSxZPTA7WTxxLmxlbmd0aDtZKyspe3ZhciBHPWMuZ2V0KHFbWV0pO0cmJkcubGVuZ3RoJiZILnB1c2guYXBwbHkoSCxPYmplY3Qoci5kKShHKSl9fXZhciBRPUguZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmRlc3Ryb3llZH0pO1EubGVuZ3RoP1d0KHRoaXMseixRKTp0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoeil9fXJldHVybiBfLmxlbmd0aD0wLFIuZm9yRWFjaChmdW5jdGlvbih0KXtuLnBsYXllcnMucHVzaCh0KSx0Lm9uRG9uZShmdW5jdGlvbigpe3QuZGVzdHJveSgpO3ZhciBlPW4ucGxheWVycy5pbmRleE9mKHQpO24ucGxheWVycy5zcGxpY2UoZSwxKX0pLHQucGxheSgpfSksUn0sdC5wcm90b3R5cGUuZWxlbWVudENvbnRhaW5zRGF0YT1mdW5jdGlvbih0LGUpe3ZhciBuPSExLHI9ZVtqdF07cmV0dXJuIHImJnIuc2V0Rm9yUmVtb3ZhbCYmKG49ITApLHRoaXMucGxheWVyc0J5RWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMuc3RhdGVzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmVsZW1lbnRDb250YWluc0RhdGEoZSl8fG59LHQucHJvdG90eXBlLmFmdGVyRmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5fZmx1c2hGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lPWZ1bmN0aW9uKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5fZ2V0UHJldmlvdXNQbGF5ZXJzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89W107aWYoZSl7dmFyIGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7YSYmKG89YSl9ZWxzZXt2YXIgcz10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKHMpe3ZhciB1PSFpfHwidm9pZCI9PWk7cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucXVldWVkfHwodXx8dC50cmlnZ2VyTmFtZT09cikmJm8ucHVzaCh0KX0pfX1yZXR1cm4obnx8cikmJihvPW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEobiYmbiE9dC5uYW1lc3BhY2VJZHx8ciYmciE9dC50cmlnZ2VyTmFtZSl9KSksb30sdC5wcm90b3R5cGUuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxvLGE9ZS5lbGVtZW50LHM9ZS5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDp0LHU9ZS5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDplLnRyaWdnZXJOYW1lLGw9ZnVuY3Rpb24odCl7dmFyIHI9dC5lbGVtZW50LGk9ciE9PWEsbz1mKG4scixbXSk7Yy5fZ2V0UHJldmlvdXNQbGF5ZXJzKHIsaSxzLHUsZS50b1N0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0UmVhbFBsYXllcigpO2UuYmVmb3JlRGVzdHJveSYmZS5iZWZvcmVEZXN0cm95KCksdC5kZXN0cm95KCksby5wdXNoKHQpfSl9LGM9dGhpczt0cnl7Zm9yKHZhciBoPU9iamVjdChyLmUpKGUudGltZWxpbmVzKSxkPWgubmV4dCgpOyFkLmRvbmU7ZD1oLm5leHQoKSlsKGQudmFsdWUpfWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihvPWgucmV0dXJuKSYmby5jYWxsKGgpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1MKGEsZS5mcm9tU3R5bGVzKX0sdC5wcm90b3R5cGUuX2J1aWxkQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLHIsbyx1KXt2YXIgbD10aGlzLGM9ZS50cmlnZ2VyTmFtZSxoPWUuZWxlbWVudCxkPVtdLHA9bmV3IFNldCxtPW5ldyBTZXQseT1lLnRpbWVsaW5lcy5tYXAoZnVuY3Rpb24oZSl7dmFyIGE9ZS5lbGVtZW50O3AuYWRkKGEpO3ZhciBmPWFbanRdO2lmKGYmJmYucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBpLmQoZS5kdXJhdGlvbixlLmRlbGF5KTt2YXIgeSxnLHY9YSE9PWgsYj0oeT0obi5nZXQoYSl8fFR0KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0UmVhbFBsYXllcigpfSksZz1bXSxmdW5jdGlvbiB0KGUsbil7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPWVbcl07byBpbnN0YW5jZW9mIGkubj90KG8ucGxheWVycyxuKTpuLnB1c2gobyl9fSh5LGcpLGcpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hIXQuZWxlbWVudCYmdC5lbGVtZW50PT09YX0pLF89by5nZXQoYSksdz11LmdldChhKSx4PXMoMCxsLl9ub3JtYWxpemVyLDAsZS5rZXlmcmFtZXMsXyx3KSxPPWwuX2J1aWxkUGxheWVyKGUseCxiKTtpZihlLnN1YlRpbWVsaW5lJiZyJiZtLmFkZChhKSx2KXt2YXIgQz1uZXcgRHQodCxjLGEpO0Muc2V0UmVhbFBsYXllcihPKSxkLnB1c2goQyl9cmV0dXJuIE99KTtkLmZvckVhY2goZnVuY3Rpb24odCl7ZihsLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCxbXSkucHVzaCh0KSx0Lm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI7aWYodCBpbnN0YW5jZW9mIE1hcCl7aWYocj10LmdldChlKSl7aWYoci5sZW5ndGgpe3ZhciBpPXIuaW5kZXhPZihuKTtyLnNwbGljZShpLDEpfTA9PXIubGVuZ3RoJiZ0LmRlbGV0ZShlKX19ZWxzZShyPXRbZV0pJiYoci5sZW5ndGgmJihpPXIuaW5kZXhPZihuKSxyLnNwbGljZShpLDEpKSwwPT1yLmxlbmd0aCYmZGVsZXRlIHRbZV0pO3JldHVybiByfShsLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCx0KX0pfSkscC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBCdCh0LCJuZy1hbmltYXRpbmciKX0pO3ZhciBnPWEoeSk7cmV0dXJuIGcub25EZXN0cm95KGZ1bmN0aW9uKCl7cC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIdCh0LCJuZy1hbmltYXRpbmciKX0pLEQoaCxlLnRvU3R5bGVzKX0pLG0uZm9yRWFjaChmdW5jdGlvbih0KXtmKHIsdCxbXSkucHVzaChnKX0pLGd9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsbik6bmV3IGkuZCh0LmR1cmF0aW9uLHQuZGVsYXkpfSx0fSgpLER0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMudHJpZ2dlck5hbWU9ZSx0aGlzLmVsZW1lbnQ9bix0aGlzLl9wbGF5ZXI9bmV3IGkuZCx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPXt9LHRoaXMuZGVzdHJveWVkPSExLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9cmV0dXJuIHQucHJvdG90eXBlLnNldFJlYWxQbGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9dCxPYmplY3Qua2V5cyh0aGlzLl9xdWV1ZWRDYWxsYmFja3MpLmZvckVhY2goZnVuY3Rpb24obil7ZS5fcXVldWVkQ2FsbGJhY2tzW25dLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHUodCxuLHZvaWQgMCxlKX0pfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzPXt9LHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKHQudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9LHQucHJvdG90eXBlLmdldFJlYWxQbGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGxheWVyfSx0LnByb3RvdHlwZS5vdmVycmlkZVRvdGFsVGltZT1mdW5jdGlvbih0KXt0aGlzLnRvdGFsVGltZT10fSx0LnByb3RvdHlwZS5zeW5jUGxheWVyRXZlbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9wbGF5ZXI7bi50cmlnZ2VyQ2FsbGJhY2smJnQub25TdGFydChmdW5jdGlvbigpe3JldHVybiBuLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKX0pLHQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBlLmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5fcXVldWVFdmVudD1mdW5jdGlvbih0LGUpe2YodGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsdCksdGhpcy5fcGxheWVyLm9uRG9uZSh0KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5maW5pc2goKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9LHR9KCk7ZnVuY3Rpb24gTHQodCl7cmV0dXJuIHQmJjE9PT10Lm5vZGVUeXBlfWZ1bmN0aW9uIEZ0KHQsZSl7dmFyIG49dC5zdHlsZS5kaXNwbGF5O3JldHVybiB0LnN0eWxlLmRpc3BsYXk9bnVsbCE9ZT9lOiJub25lIixufWZ1bmN0aW9uIFZ0KHQsZSxuLHIsaSl7dmFyIG89W107bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnB1c2goRnQodCkpfSk7dmFyIGE9W107ci5mb3JFYWNoKGZ1bmN0aW9uKG4scil7dmFyIG89e307bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPW9bdF09ZS5jb21wdXRlU3R5bGUocix0LGkpO24mJjAhPW4ubGVuZ3RofHwocltqdF09QXQsYS5wdXNoKHIpKX0pLHQuc2V0KHIsbyl9KTt2YXIgcz0wO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEZ0KHQsb1tzKytdKX0pLGF9ZnVuY3Rpb24gVXQodCxlKXt2YXIgbj1uZXcgTWFwO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbi5zZXQodCxbXSl9KSwwPT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcj1uZXcgU2V0KGUpLGk9bmV3IE1hcDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uIHQoZSl7aWYoIWUpcmV0dXJuIDE7dmFyIG89aS5nZXQoZSk7aWYobylyZXR1cm4gbzt2YXIgYT1lLnBhcmVudE5vZGU7cmV0dXJuIG89bi5oYXMoYSk/YTpyLmhhcyhhKT8xOnQoYSksaS5zZXQoZSxvKSxvfSh0KTsxIT09ZSYmbi5nZXQoZSkucHVzaCh0KX0pLG59dmFyIHp0PSIkJGNsYXNzZXMiO2Z1bmN0aW9uIEJ0KHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QuYWRkKGUpO2Vsc2V7dmFyIG49dFt6dF07bnx8KG49dFt6dF09e30pLG5bZV09ITB9fWZ1bmN0aW9uIEh0KHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QucmVtb3ZlKGUpO2Vsc2V7dmFyIG49dFt6dF07biYmZGVsZXRlIG5bZV19fWZ1bmN0aW9uIFd0KHQsZSxuKXthKG4pLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiB0LnByb2Nlc3NMZWF2ZU5vZGUoZSl9KX1mdW5jdGlvbiBxdCh0LGUsbil7dmFyIHI9bi5nZXQodCk7aWYoIXIpcmV0dXJuITE7dmFyIGk9ZS5nZXQodCk7cmV0dXJuIGk/ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLmFkZCh0KX0pOmUuc2V0KHQsciksbi5kZWxldGUodCksITB9dmFyIFl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IFJ0KHQsZSxuKSx0aGlzLl90aW1lbGluZUVuZ2luZT1uZXcga3QodCxlLG4pLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5vblJlbW92YWxDb21wbGV0ZSh0LGUpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89dCsiLSIrcixhPXRoaXMuX3RyaWdnZXJDYWNoZVtvXTtpZighYSl7dmFyIHM9W10sdT10dCh0aGlzLl9kcml2ZXIsaSxzKTtpZihzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhbmltYXRpb24gdHJpZ2dlciAiJytyKyciIGhhcyBmYWlsZWQgdG8gYnVpbGQgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuIC0gJytzLmpvaW4oIlxuIC0gIikpO2E9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEN0KHQsZSl9KHIsdSksdGhpcy5fdHJpZ2dlckNhY2hlW29dPWF9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxyLGEpfSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfSx0LnByb3RvdHlwZS5vbkluc2VydD1mdW5jdGlvbih0LGUsbixyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLG4scil9LHQucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl9LHQucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24odCxlLG4saSl7aWYoIkAiPT1uLmNoYXJBdCgwKSl7dmFyIG89T2JqZWN0KHIuYykoaChuKSwyKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKG9bMF0sZSxvWzFdLGkpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4saSxvKXtpZigiQCI9PW4uY2hhckF0KDApKXt2YXIgYT1PYmplY3Qoci5jKShoKG4pLDIpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4oYVswXSxlLGFbMV0sbyl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxuLGksbyl9LHQucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PS0xKSx0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBsYXllcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLmNvbmNhdCh0aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9LHR9KCksR3Q9ImFuaW1hdGlvbiIsUXQ9ImFuaW1hdGlvbmVuZCIsS3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3ZhciBzPXRoaXM7dGhpcy5fZWxlbWVudD10LHRoaXMuX25hbWU9ZSx0aGlzLl9kdXJhdGlvbj1uLHRoaXMuX2RlbGF5PXIsdGhpcy5fZWFzaW5nPWksdGhpcy5fZmlsbE1vZGU9byx0aGlzLl9vbkRvbmVGbj1hLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9zdGFydFRpbWU9MCx0aGlzLl9wb3NpdGlvbj0wLHRoaXMuX2V2ZW50Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHMuX2hhbmRsZUNhbGxiYWNrKHQpfX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG47ZT10aGlzLl9kdXJhdGlvbisibXMgIit0aGlzLl9lYXNpbmcrIiAiK3RoaXMuX2RlbGF5KyJtcyAxIG5vcm1hbCAiK3RoaXMuX2ZpbGxNb2RlKyIgIit0aGlzLl9uYW1lLChuPWVlKHQ9dGhpcy5fZWxlbWVudCwiIikudHJpbSgpKS5sZW5ndGgmJihmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKSIsIj09PXQuY2hhckF0KG4pJiYwfShuKSxlPW4rIiwgIitlKSx0ZSh0LCIiLGUpLEp0KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMSksdGhpcy5fc3RhcnRUaW1lPURhdGUubm93KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7WnQodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lLCJwYXVzZWQiKX0sdC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7WnQodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lLCJydW5uaW5nIil9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPVh0KHRoaXMuX2VsZW1lbnQsdGhpcy5fbmFtZSk7dGhpcy5fcG9zaXRpb249dCp0aGlzLl9kdXJhdGlvbix0ZSh0aGlzLl9lbGVtZW50LCJEZWxheSIsIi0iK3RoaXMuX3Bvc2l0aW9uKyJtcyIsZSl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufSx0LnByb3RvdHlwZS5faGFuZGxlQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5fbmdUZXN0TWFudWFsVGltZXN0YW1wfHxEYXRlLm5vdygpLG49MWUzKnBhcnNlRmxvYXQodC5lbGFwc2VkVGltZS50b0ZpeGVkKDMpKTt0LmFuaW1hdGlvbk5hbWU9PXRoaXMuX25hbWUmJk1hdGgubWF4KGUtdGhpcy5fc3RhcnRUaW1lLDApPj10aGlzLl9kZWxheSYmbj49dGhpcy5fZHVyYXRpb24mJnRoaXMuZmluaXNoKCl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm4oKSxKdCh0aGlzLl9lbGVtZW50LHRoaXMuX2V2ZW50Rm4sITApKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0LGUsbixyO3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmZpbmlzaCgpLGU9dGhpcy5fbmFtZSwocj0kdChuPWVlKHQ9dGhpcy5fZWxlbWVudCwiIikuc3BsaXQoIiwiKSxlKSk+PTAmJihuLnNwbGljZShyLDEpLHRlKHQsIiIsbi5qb2luKCIsIikpKSl9LHR9KCk7ZnVuY3Rpb24gWnQodCxlLG4pe3RlKHQsIlBsYXlTdGF0ZSIsbixYdCh0LGUpKX1mdW5jdGlvbiBYdCh0LGUpe3ZhciBuPWVlKHQsIiIpO3JldHVybiBuLmluZGV4T2YoIiwiKT4wPyR0KG4uc3BsaXQoIiwiKSxlKTokdChbbl0sZSl9ZnVuY3Rpb24gJHQodCxlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gSnQodCxlLG4pe24/dC5yZW1vdmVFdmVudExpc3RlbmVyKFF0LGUpOnQuYWRkRXZlbnRMaXN0ZW5lcihRdCxlKX1mdW5jdGlvbiB0ZSh0LGUsbixyKXt2YXIgaT1HdCtlO2lmKG51bGwhPXIpe3ZhciBvPXQuc3R5bGVbaV07aWYoby5sZW5ndGgpe3ZhciBhPW8uc3BsaXQoIiwiKTthW3JdPW4sbj1hLmpvaW4oIiwiKX19dC5zdHlsZVtpXT1ufWZ1bmN0aW9uIGVlKHQsZSl7cmV0dXJuIHQuc3R5bGVbR3QrZV19dmFyIG5lPSJsaW5lYXIiLHJlPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuSU5JVElBTElaRUQ9MV09IklOSVRJQUxJWkVEIix0W3QuU1RBUlRFRD0yXT0iU1RBUlRFRCIsdFt0LkZJTklTSEVEPTNdPSJGSU5JU0hFRCIsdFt0LkRFU1RST1lFRD00XT0iREVTVFJPWUVEIix0fSh7fSksaWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5hbmltYXRpb25OYW1lPW4sdGhpcy5fZHVyYXRpb249cix0aGlzLl9kZWxheT1pLHRoaXMuX2ZpbmFsU3R5bGVzPWEsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5zdGF0ZT0wLHRoaXMuZWFzaW5nPW98fG5lLHRoaXMudG90YWxUaW1lPXIraSx0aGlzLl9idWlsZFN0eWxlcigpfXJldHVybiB0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLnN0YXRlPj1yZS5ERVNUUk9ZRUR8fCh0aGlzLnN0YXRlPXJlLkRFU1RST1lFRCx0aGlzLl9zdHlsZXIuZGVzdHJveSgpLHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLl9mbHVzaERvbmVGbnMoKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuX2ZsdXNoRG9uZUZucz1mdW5jdGlvbigpe3RoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W119LHQucHJvdG90eXBlLl9mbHVzaFN0YXJ0Rm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLnN0YXRlPj1yZS5GSU5JU0hFRHx8KHRoaXMuc3RhdGU9cmUuRklOSVNIRUQsdGhpcy5fc3R5bGVyLmZpbmlzaCgpLHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLl9mbHVzaERvbmVGbnMoKSl9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX3N0eWxlci5zZXRQb3NpdGlvbih0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3R5bGVyLmdldFBvc2l0aW9uKCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZT49cmUuU1RBUlRFRH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuc3RhdGU+PXJlLklOSVRJQUxJWkVEfHwodGhpcy5zdGF0ZT1yZS5JTklUSUFMSVpFRCx0aGlzLl9zdHlsZXIuYXBwbHkoKSx0aGlzLl9kZWxheSYmdGhpcy5fc3R5bGVyLnBhdXNlKCkpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5zdGF0ZT1yZS5TVEFSVEVEKSx0aGlzLl9zdHlsZXIucmVzdW1lKCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fc3R5bGVyLnBhdXNlKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVyLmRlc3Ryb3koKSx0aGlzLl9idWlsZFN0eWxlcigpLHRoaXMuX3N0eWxlci5hcHBseSgpfSx0LnByb3RvdHlwZS5fYnVpbGRTdHlsZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0eWxlcj1uZXcgS3QodGhpcy5lbGVtZW50LHRoaXMuYW5pbWF0aW9uTmFtZSx0aGlzLl9kdXJhdGlvbix0aGlzLl9kZWxheSx0aGlzLmVhc2luZywiZm9yd2FyZHMiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZmluaXNoKCl9KX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmluaXQoKTt2YXIgZT17fTtpZih0aGlzLmhhc1N0YXJ0ZWQoKSl7dmFyIG49dGhpcy5zdGF0ZT49cmUuRklOSVNIRUQ7T2JqZWN0LmtleXModGhpcy5fZmluYWxTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24ocil7Im9mZnNldCIhPXImJihlW3JdPW4/dC5fZmluYWxTdHlsZXNbcl06USh0LmVsZW1lbnQscikpfSl9dGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdH0oKSxvZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmVsZW1lbnQ9ZSxyLl9zdGFydGluZ1N0eWxlcz17fSxyLl9faW5pdGlhbGl6ZWQ9ITEsci5fc3R5bGVzPVMobikscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczshdGhpcy5fX2luaXRpYWxpemVkJiZ0aGlzLl9zdGFydGluZ1N0eWxlcyYmKHRoaXMuX19pbml0aWFsaXplZD0hMCxPYmplY3Qua2V5cyh0aGlzLl9zdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fc3RhcnRpbmdTdHlsZXNbdF09ZS5lbGVtZW50LnN0eWxlW3RdfSksdC5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc3RhcnRpbmdTdHlsZXMmJih0aGlzLmluaXQoKSxPYmplY3Qua2V5cyh0aGlzLl9zdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuX3N0eWxlc1t0XSl9KSx0LnByb3RvdHlwZS5wbGF5LmNhbGwodGhpcykpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9zdGFydGluZ1N0eWxlcyYmKE9iamVjdC5rZXlzKHRoaXMuX3N0YXJ0aW5nU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuX3N0YXJ0aW5nU3R5bGVzW3RdO24/ZS5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsbik6ZS5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfSksdGhpcy5fc3RhcnRpbmdTdHlsZXM9bnVsbCx0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcykpfSxlfShpLmQpLGFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2NvdW50PTAsdGhpcy5faGVhZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIiksdGhpcy5fd2FybmluZ0lzc3VlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQyh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfSx0LnByb3RvdHlwZS5idWlsZEtleWZyYW1lRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9IkBrZXlmcmFtZXMgIitlKyIge1xuIixpPSIiOyhuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBTKHQpfSkpLmZvckVhY2goZnVuY3Rpb24odCl7aT0iICI7dmFyIGU9cGFyc2VGbG9hdCh0Lm9mZnNldCk7cis9IiIraSsxMDAqZSsiJSB7XG4iLGkrPSIgIixPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07c3dpdGNoKGUpe2Nhc2Uib2Zmc2V0IjpyZXR1cm47Y2FzZSJlYXNpbmciOnJldHVybiB2b2lkKG4mJihyKz1pKyJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAiK24rIjtcbiIpKTtkZWZhdWx0OnJldHVybiB2b2lkKHIrPSIiK2krZSsiOiAiK24rIjtcbiIpfX0pLHIrPWkrIn1cbiJ9KSxyKz0ifVxuIjt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBvLmlubmVySFRNTD1yLG99LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlLG4scixpLG8sYSl7dm9pZCAwPT09byYmKG89W10pLGEmJnRoaXMuX25vdGlmeUZhdWx0eVNjcnViYmVyKCk7dmFyIHM9by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpZX0pLHU9e307cShuLHIpJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdVt0XT1lW3RdfSl9KTt2YXIgbD1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdCYmKEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmImVhc2luZyIhPW4mJihlW25dPXRbbl0pfSl9KSxlfShlPVkodCxlLHUpKTtpZigwPT1uKXJldHVybiBuZXcgb2UodCxsKTt2YXIgYz0iZ2VuX2Nzc19rZl8iK3RoaXMuX2NvdW50KyssZj10aGlzLmJ1aWxkS2V5ZnJhbWVFbGVtZW50KHQsYyxlKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIikuYXBwZW5kQ2hpbGQoZik7dmFyIGg9bmV3IGllKHQsZSxjLG4scixpLGwpO3JldHVybiBoLm9uRGVzdHJveShmdW5jdGlvbigpe3ZhciB0Oyh0PWYpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9KSxofSx0LnByb3RvdHlwZS5fbm90aWZ5RmF1bHR5U2NydWJiZXI9ZnVuY3Rpb24oKXt0aGlzLl93YXJuaW5nSXNzdWVkfHwoY29uc29sZS53YXJuKCJAYW5ndWxhci9hbmltYXRpb25zOiBwbGVhc2UgbG9hZCB0aGUgd2ViLWFuaW1hdGlvbnMuanMgcG9seWZpbGwgdG8gYWxsb3cgcHJvZ3JhbW1hdGljIGFjY2Vzcy4uLlxuIiwiICB2aXNpdCBodHRwOi8vYml0Lmx5L0lXdWthbSB0byBsZWFybiBtb3JlIGFib3V0IHVzaW5nIHRoZSB3ZWItYW5pbWF0aW9uLWpzIHBvbHlmaWxsLiIpLHRoaXMuX3dhcm5pbmdJc3N1ZWQ9ITApfSx0fSgpLHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLm9wdGlvbnM9bix0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD17fSx0aGlzLl9kdXJhdGlvbj1uLmR1cmF0aW9uLHRoaXMuX2RlbGF5PW4uZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5faW5pdGlhbGl6ZWQpe3RoaXMuX2luaXRpYWxpemVkPSEwO3ZhciBlPXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LGUsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPWUubGVuZ3RoP2VbZS5sZW5ndGgtMV06e30sdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIixmdW5jdGlvbigpe3JldHVybiB0Ll9vbkZpbmlzaCgpfSl9fSx0LnByb3RvdHlwZS5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9LHQucHJvdG90eXBlLl90cmlnZ2VyV2ViQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5hbmltYXRlKGUsbil9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCksdGhpcy5kb21QbGF5ZXIucGxheSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLnBhdXNlKCl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfSx0LnByb3RvdHlwZS5fcmVzZXREb21QbGF5ZXJTdGF0ZT1mdW5jdGlvbigpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT10KnRoaXMudGltZX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWUvdGhpcy50aW1lfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRvdGFsVGltZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXt9O3RoaXMuaGFzU3RhcnRlZCgpJiZPYmplY3Qua2V5cyh0aGlzLl9maW5hbEtleWZyYW1lKS5mb3JFYWNoKGZ1bmN0aW9uKG4peyJvZmZzZXQiIT1uJiYoZVtuXT10Ll9maW5pc2hlZD90Ll9maW5hbEtleWZyYW1lW25dOlEodC5lbGVtZW50LG4pKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PWV9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksZS5sZW5ndGg9MH0sdH0oKSx1ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9pc05hdGl2ZUltcGw9L1x7XHMqXFtuYXRpdmVccytjb2RlXF1ccypcfS8udGVzdChjZSgpLnRvU3RyaW5nKCkpLHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlcj1uZXcgYWV9cmV0dXJuIHQucHJvdG90eXBlLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geCh0LGUpfSx0LnByb3RvdHlwZS5jb250YWluc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTyh0LGUpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEModCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUub3ZlcnJpZGVXZWJBbmltYXRpb25zU3VwcG9ydD1mdW5jdGlvbih0KXt0aGlzLl9pc05hdGl2ZUltcGw9dH0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtpZih2b2lkIDA9PT1vJiYobz1bXSksIWEmJiF0aGlzLl9pc05hdGl2ZUltcGwpcmV0dXJuIHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlci5hbmltYXRlKHQsZSxuLHIsaSxvKTt2YXIgcz17ZHVyYXRpb246bixkZWxheTpyLGZpbGw6MD09cj8iYm90aCI6ImZvcndhcmRzIn07aSYmKHMuZWFzaW5nPWkpO3ZhciB1PXt9LGw9by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBzZX0pO3JldHVybiBxKG4scikmJmwuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmN1cnJlbnRTbmFwc2hvdDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB1W3RdPWVbdF19KX0pLGU9WSh0LGU9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE0odCwhMSl9KSx1KSxuZXcgc2UodCxlLHMpfSx0fSgpO2Z1bmN0aW9uIGxlKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNlKCl9ZnVuY3Rpb24gY2UoKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LmRvY3VtZW50JiZFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlfHx7fX19LE96ZkI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIEh9KTt2YXIgcj1uKCJDY25HIiksaT1uKCJJcDBSIiksbz1uKCIyNkZVIiksYT1uKCJWbkQvIikscz1uKCI2N1kvIiksdT1uKCJtclNHIik7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbigpe2lmKE9iamVjdChpLnEpKGUpKXt2YXIgbj0vXGJmbGV4LWxheW91dC0uKz9cYi9nO0FycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKCJbY2xhc3MqPSIrYysiXSIpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2xhc3NMaXN0LmNvbnRhaW5zKGMrInNzciIpJiZ0LnBhcmVudE5vZGU/dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpOnQuY2xhc3NOYW1lLnJlcGxhY2UobiwiIil9KX19fXZhciBjPSJmbGV4LWxheW91dC0iLGY9bmV3IHIubygiRmxleCBMYXlvdXQgdG9rZW4sIGNvbGxlY3QgYWxsIGJyZWFrcG9pbnRzIGludG8gb25lIHByb3ZpZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLGg9W3thbGlhczoieHMiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDBweCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSJ9LHthbGlhczoiZ3QteHMiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDYwMHB4KSJ9LHthbGlhczoibHQtc20iLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDU5OXB4KSJ9LHthbGlhczoic20iLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogOTU5cHgpIn0se2FsaWFzOiJndC1zbSIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogOTYwcHgpIn0se2FsaWFzOiJsdC1tZCIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogOTU5cHgpIn0se2FsaWFzOiJtZCIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIn0se2FsaWFzOiJndC1tZCIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTI4MHB4KSJ9LHthbGlhczoibHQtbGciLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDEyNzlweCkifSx7YWxpYXM6ImxnIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAobWF4LXdpZHRoOiAxOTE5cHgpIn0se2FsaWFzOiJndC1sZyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTkyMHB4KSJ9LHthbGlhczoibHQteGwiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDE5MjBweCkifSx7YWxpYXM6InhsIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxOTIwcHgpIGFuZCAobWF4LXdpZHRoOiA1MDAwcHgpIn1dLGQ9IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIixwPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkiLG09IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4NDBweCkiLHk9IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSIsZz17SEFORFNFVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSwgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLFRBQkxFVDpwKyIgLCAiK2QsV0VCOm0rIiwgIit5KyIgIixIQU5EU0VUX1BPUlRSQUlUOiIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNTk5cHgpIixUQUJMRVRfUE9SVFJBSVQ6cCsiICIsV0VCX1BPUlRSQUlUOiIiK20sSEFORFNFVF9MQU5EU0NBUEU6IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogOTU5cHgpXSIsVEFCTEVUX0xBTkRTQ0FQRToiIitkLFdFQl9MQU5EU0NBUEU6IiIreX0sdj1be2FsaWFzOiJoYW5kc2V0IixtZWRpYVF1ZXJ5OmcuSEFORFNFVH0se2FsaWFzOiJoYW5kc2V0LmxhbmRzY2FwZSIsbWVkaWFRdWVyeTpnLkhBTkRTRVRfTEFORFNDQVBFfSx7YWxpYXM6ImhhbmRzZXQucG9ydHJhaXQiLG1lZGlhUXVlcnk6Zy5IQU5EU0VUX1BPUlRSQUlUfSx7YWxpYXM6InRhYmxldCIsbWVkaWFRdWVyeTpnLlRBQkxFVH0se2FsaWFzOiJ0YWJsZXQubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OmcuVEFCTEVUfSx7YWxpYXM6InRhYmxldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTpnLlRBQkxFVF9QT1JUUkFJVH0se2FsaWFzOiJ3ZWIiLG1lZGlhUXVlcnk6Zy5XRUIsb3ZlcmxhcHBpbmc6ITB9LHthbGlhczoid2ViLmxhbmRzY2FwZSIsbWVkaWFRdWVyeTpnLldFQl9MQU5EU0NBUEUsb3ZlcmxhcHBpbmc6ITB9LHthbGlhczoid2ViLnBvcnRyYWl0IixtZWRpYVF1ZXJ5OmcuV0VCX1BPUlRSQUlULG92ZXJsYXBwaW5nOiEwfV07ZnVuY3Rpb24gYih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciByPTAsaT1lO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdO2lmKG51bGwhPW8pZm9yKHZhciBhIGluIG8pby5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbYV09b1thXSl9cmV0dXJuIHR9dmFyIF89LyhcLnwtfF8pL2c7ZnVuY3Rpb24gdyh0KXt2YXIgZT10Lmxlbmd0aD4wP3QuY2hhckF0KDApOiIiLG49dC5sZW5ndGg+MT90LnNsaWNlKDEpOiIiO3JldHVybiBlLnRvVXBwZXJDYXNlKCkrbn12YXIgeD17YWRkRmxleFRvUGFyZW50OiEwLGFkZE9yaWVudGF0aW9uQnBzOiExLGRpc2FibGVEZWZhdWx0QnBzOiExLGRpc2FibGVWZW5kb3JQcmVmaXhlczohMSxzZXJ2ZXJMb2FkZWQ6ITEsdXNlQ29sdW1uQmFzaXNaZXJvOiEwfSxPPW5ldyByLm8oIkZsZXggTGF5b3V0IHRva2VuLCBjb25maWcgb3B0aW9ucyBmb3IgdGhlIGxpYnJhcnkiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHh9fSksQz1uZXcgci5vKCJUb2tlbiAoQGFuZ3VsYXIvZmxleC1sYXlvdXQpIEJyZWFrcG9pbnRzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3ZhciB0PU9iamVjdChyLlYpKGYpLGU9T2JqZWN0KHIuVikoTyksbj1bXS5jb25jYXQuYXBwbHkoW10sKHR8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19KSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBuLHI9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtyW3QuYWxpYXNdPXR9KSxlLmZvckVhY2goZnVuY3Rpb24odCl7clt0LmFsaWFzXT9iKHJbdC5hbGlhc10sdCk6clt0LmFsaWFzXT10fSksKG49T2JqZWN0LmtleXMocikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdfSkpLmZvckVhY2goZnVuY3Rpb24odCl7dC5zdWZmaXh8fCh0LnN1ZmZpeD10LmFsaWFzLnJlcGxhY2UoXywifCIpLnNwbGl0KCJ8IikubWFwKHcpLmpvaW4oIiIpLHQub3ZlcmxhcHBpbmc9ISF0Lm92ZXJsYXBwaW5nKX0pLG59KChlLmRpc2FibGVEZWZhdWx0QnBzP1tdOmgpLmNvbmNhdChlLmFkZE9yaWVudGF0aW9uQnBzP3Y6W10pLG4pfX0pLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZ2lzdHJ5PXR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuc2xpY2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNvcnRlZEl0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dC5vdmVybGFwcGluZ30pLGU9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwIT09dC5vdmVybGFwcGluZ30pO3JldHVybiB0LmNvbmNhdChlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5maW5kQnlBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5hbGlhcz09dH0pfHxudWxsfSx0LnByb3RvdHlwZS5maW5kQnlRdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5tZWRpYVF1ZXJ5PT10fSl8fG51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3ZlcmxhcHBpbmdzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09dC5vdmVybGFwcGluZ30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWxpYXNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpYXN9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN1ZmZpeGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWZmaXg/dC5zdWZmaXg6IiJ9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShDKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1lJiYoZT0iYWxsIiksdm9pZCAwPT09biYmKG49IiIpLHZvaWQgMD09PXImJihyPSIiKSx0aGlzLm1hdGNoZXM9dCx0aGlzLm1lZGlhUXVlcnk9ZSx0aGlzLm1xQWxpYXM9bix0aGlzLnN1ZmZpeD1yfXJldHVybiB0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLm1hdGNoZXMsdGhpcy5tZWRpYVF1ZXJ5LHRoaXMubXFBbGlhcyx0aGlzLnN1ZmZpeCl9LHR9KCksaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3pvbmU9dCx0aGlzLl9wbGF0Zm9ybUlkPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9yZWdpc3RyeT1uZXcgTWFwLHRoaXMuX3NvdXJjZT1uZXcgby5hKG5ldyBFKCEwKSksdGhpcy5fb2JzZXJ2YWJsZSQ9dGhpcy5fc291cmNlLmFzT2JzZXJ2YWJsZSgpfXJldHVybiB0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZWdpc3RyeS5nZXQodCk7cmV0dXJuISFlJiZlLm1hdGNoZXN9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMucmVnaXN0ZXJRdWVyeSh0KSx0aGlzLl9vYnNlcnZhYmxlJC5waXBlKE9iamVjdChhLmEpKGZ1bmN0aW9uKGUpe3JldHVybiF0fHxlLm1lZGlhUXVlcnk9PT10fSkpfSx0LnByb3RvdHlwZS5yZWdpc3RlclF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9bXToic3RyaW5nIj09dHlwZW9mIHQ/W3RdOihlPXt9LHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc093blByb3BlcnR5KHQpJiYoZVt0XT0hMCl9KSk7dmFyIGV9KHQpO24ubGVuZ3RoPjAmJih0aGlzLl9wcmVwYXJlUXVlcnlDU1Mobix0aGlzLl9kb2N1bWVudCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuX3JlZ2lzdHJ5LmdldCh0KSxyPWZ1bmN0aW9uKG4pe2UuX3pvbmUucnVuKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IEUobi5tYXRjaGVzLHQpO2UuX3NvdXJjZS5uZXh0KHIpfSl9O258fCgobj1lLl9idWlsZE1RTCh0KSkuYWRkTGlzdGVuZXIociksZS5fcmVnaXN0cnkuc2V0KHQsbikpLG4ubWF0Y2hlcyYmcihuKX0pKX0sdC5wcm90b3R5cGUuX2J1aWxkTVFMPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoaS5xKSh0aGlzLl9wbGF0Zm9ybUlkKSYmd2luZG93Lm1hdGNoTWVkaWEoImFsbCIpLmFkZExpc3RlbmVyP3dpbmRvdy5tYXRjaE1lZGlhKHQpOnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19LHQucHJvdG90eXBlLl9wcmVwYXJlUXVlcnlDU1M9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hVFt0XX0pO2lmKG4ubGVuZ3RoPjApe3ZhciByPW4uam9pbigiLCAiKTt0cnl7dmFyIGk9ZS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxpLnN0eWxlU2hlZXR8fGkuYXBwZW5kQ2hpbGQoZS5jcmVhdGVUZXh0Tm9kZSgiXG4vKlxuICBAYW5ndWxhci9mbGV4LWxheW91dCAtIHdvcmthcm91bmQgZm9yIHBvc3NpYmxlIGJyb3dzZXIgcXVpcmsgd2l0aCBtZWRpYVF1ZXJ5IGxpc3RlbmVyc1xuICBzZWUgaHR0cDovL2JpdC5seS8yc2Q0SE1QXG4qL1xuQG1lZGlhICIrcisiIHsuZngtcXVlcnktdGVzdHsgfX1cbiIpKSxlLmhlYWQuYXBwZW5kQ2hpbGQoaSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBUW3RdPWl9KX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX19LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKHIueCksT2JqZWN0KHIuVikoci56KSxPYmplY3Qoci5WKShpLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksVD17fTtmdW5jdGlvbiBJKHQsZSl7cmV0dXJuIGIodCxlP3ttcUFsaWFzOmUuYWxpYXMsc3VmZml4OmUuc3VmZml4fTp7fSl9dmFyIEE9ZnVuY3Rpb24oKXt9LGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5icmVha3BvaW50cz10LHRoaXMubWVkaWFXYXRjaGVyPWUsdGhpcy5maWx0ZXJPdmVybGFwcz0hMCx0aGlzLl9yZWdpc3RlckJyZWFrUG9pbnRzKCksdGhpcy5vYnNlcnZhYmxlJD10aGlzLl9idWlsZE9ic2VydmFibGUoKX1yZXR1cm4gdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdG9NZWRpYVF1ZXJ5KHQpO3JldHVybiB0aGlzLm1lZGlhV2F0Y2hlci5pc0FjdGl2ZShlKX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlJC5zdWJzY3JpYmUodCxlLG4pfSx0LnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlJH0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyQnJlYWtQb2ludHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJyZWFrcG9pbnRzLnNvcnRlZEl0ZW1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tZWRpYVF1ZXJ5fSk7dGhpcy5tZWRpYVdhdGNoZXIucmVnaXN0ZXJRdWVyeSh0KX0sdC5wcm90b3R5cGUuX2J1aWxkT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzO3JldHVybiB0aGlzLm1lZGlhV2F0Y2hlci5vYnNlcnZlKCkucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQubWF0Y2hlc30pLE9iamVjdChhLmEpKGZ1bmN0aW9uKG4pe3ZhciByPXQuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkobi5tZWRpYVF1ZXJ5KTtyZXR1cm4hcnx8IShlLmZpbHRlck92ZXJsYXBzJiZyLm92ZXJsYXBwaW5nKX0pLE9iamVjdChzLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBJKGUsdC5fZmluZEJ5UXVlcnkoZS5tZWRpYVF1ZXJ5KSl9KSl9LHQucHJvdG90eXBlLl9maW5kQnlBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KX0sdC5wcm90b3R5cGUuX2ZpbmRCeVF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fdG9NZWRpYVF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZpbmRCeUFsaWFzKHQpfHx0aGlzLl9maW5kQnlRdWVyeSh0KTtyZXR1cm4gZT9lLm1lZGlhUXVlcnk6dH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoUyksT2JqZWN0KHIuVikoaykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxQPWZ1bmN0aW9uKCl7fSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc3R5bGVzaGVldD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5zdHlsZXNoZWV0LmdldCh0KTtyP3Iuc2V0KGUsbik6dGhpcy5zdHlsZXNoZWV0LnNldCh0LG5ldyBNYXAoW1tlLG5dXSkpfSx0LnByb3RvdHlwZS5jbGVhclN0eWxlcz1mdW5jdGlvbigpe3RoaXMuc3R5bGVzaGVldC5jbGVhcigpfSx0LnByb3RvdHlwZS5nZXRTdHlsZUZvckVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLnN0eWxlc2hlZXQuZ2V0KHQpLHI9IiI7aWYobil7dmFyIGk9bi5nZXQoZSk7Im51bWJlciIhPXR5cGVvZiBpJiYic3RyaW5nIiE9dHlwZW9mIGl8fChyPWkrIiIpfXJldHVybiByfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksTj1uZXcgci5vKCJGbGV4TGF5b3V0U2VydmVyTG9hZGVkIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiExfX0pLFI9WyJyb3ciLCJjb2x1bW4iLCJyb3ctcmV2ZXJzZSIsImNvbHVtbi1yZXZlcnNlIl0sRD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9tZWRpYU1vbml0b3I9ZSx0aGlzLl9vbk1lZGlhQ2hhbmdlcz1uLHRoaXMuX3N1YnNjcmliZXJzPVtdLHRoaXMuX3JlZ2lzdHJ5TWFwPXRoaXMuX2J1aWxkUmVnaXN0cnlNYXAoKSx0aGlzLl9zdWJzY3JpYmVycz10aGlzLl9jb25maWd1cmVDaGFuZ2VPYnNlcnZlcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWdpc3RyeUZyb21MYXJnZXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5TWFwLnNsaWNlKCkucmV2ZXJzZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibWVkaWFNb25pdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhTW9uaXRvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0S2V5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5fHx0aGlzLl9vcHRpb25zLmJhc2VLZXl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRJbnB1dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuaGFzS2V5VmFsdWUodCk/dGhpcy5fbG9va3VwS2V5VmFsdWUodCk6dGhpcy5fb3B0aW9ucy5kZWZhdWx0VmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9KSx0aGlzLl9zdWJzY3JpYmVycz1bXX0sdC5wcm90b3R5cGUuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9rZXlJblVzZShuLmtleSkmJmUucHVzaCh0Lm1lZGlhTW9uaXRvci5vYnNlcnZlKG4uYWxpYXMpLnBpcGUoT2JqZWN0KHMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuKGU9ZS5jbG9uZSgpKS5wcm9wZXJ0eT10Ll9vcHRpb25zLmJhc2VLZXksZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5fb25Nb25pdG9yRXZlbnRzKGUpfSkpfSksZX0sdC5wcm90b3R5cGUuX2J1aWxkUmVnaXN0cnlNYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLm1lZGlhTW9uaXRvci5icmVha3BvaW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGIoe30sZSx7YmFzZUtleTp0Ll9vcHRpb25zLmJhc2VLZXksa2V5OnQuX29wdGlvbnMuYmFzZUtleStlLnN1ZmZpeH0pfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9rZXlJblVzZShlLmtleSl9KX0sdC5wcm90b3R5cGUuX29uTW9uaXRvckV2ZW50cz1mdW5jdGlvbih0KXt0LnByb3BlcnR5PT10aGlzLl9vcHRpb25zLmJhc2VLZXkmJih0LnZhbHVlPXRoaXMuX2NhbGN1bGF0ZUFjdGl2YXRlZFZhbHVlKHQpLHRoaXMuX29uTWVkaWFDaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2tleUluVXNlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLl9sb29rdXBLZXlWYWx1ZSh0KX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUFjdGl2YXRlZFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX29wdGlvbnMuYmFzZUtleSt0LnN1ZmZpeCxuPXRoaXMuX2FjdGl2YXRlZElucHV0S2V5O3JldHVybiB0aGlzLl9hY3RpdmF0ZWRJbnB1dEtleT10aGlzLl92YWxpZGF0ZUlucHV0S2V5KG49dC5tYXRjaGVzP2U6bj09ZT8iIjpuKSx0aGlzLmFjdGl2YXRlZElucHV0fSx0LnByb3RvdHlwZS5fdmFsaWRhdGVJbnB1dEtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24odCl7cmV0dXJuIWUuX2tleUluVXNlKHQpfTtyZXR1cm4gbih0KSYmdGhpcy5tZWRpYU1vbml0b3IuYWN0aXZlT3ZlcmxhcHMuc29tZShmdW5jdGlvbihyKXt2YXIgaT1lLl9vcHRpb25zLmJhc2VLZXkrci5zdWZmaXg7cmV0dXJuIW4oaSkmJih0PWksITApfSksdH0sdC5wcm90b3R5cGUuX2xvb2t1cEtleVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vcHRpb25zLmlucHV0S2V5c1t0XX0sdH0oKSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fbWVkaWFNb25pdG9yPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3N0eWxlcj1uLHRoaXMuX2lucHV0TWFwPXt9LHRoaXMuX2hhc0luaXRpYWxpemVkPSExfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc01lZGlhUXVlcnlMaXN0ZW5lciIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbXFBY3RpdmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkVmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9uP3RoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dDp2b2lkIDB9LHNldDpmdW5jdGlvbih0KXt2YXIgZSxuPSJiYXNlS2V5Ijt0aGlzLl9tcUFjdGl2YXRpb24mJihlPXRoaXMuX2lucHV0TWFwW249dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0S2V5XSx0aGlzLl9pbnB1dE1hcFtuXT10KTt2YXIgaSxvPW5ldyByLkcoZSx0LCExKTt0aGlzLm5nT25DaGFuZ2VzKCgoaT17fSlbbl09byxpKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmF0aXZlRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3F1ZXJ5SW5wdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lucHV0TWFwW3RdfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2Rpc3BsYXk9dGhpcy5fZ2V0RGlzcGxheVN0eWxlKCksdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITB9LHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiQmFzZURpcmVjdGl2ZTo6bmdPbkNoYW5nZXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3M6ICIrdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbXFBY3RpdmF0aW9uJiZ0aGlzLl9tcUFjdGl2YXRpb24uZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9tZWRpYU1vbml0b3J9LHQucHJvdG90eXBlLl9nZXREZWZhdWx0VmFsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fcXVlcnlJbnB1dCh0KTtyZXR1cm4gdm9pZCAwIT09biYmbnVsbCE9PW4mJiIiIT09bj9uOmV9LHQucHJvdG90eXBlLl9nZXREaXNwbGF5U3R5bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmxvb2t1cFN0eWxlKHQsImRpc3BsYXkiKX0sdC5wcm90b3R5cGUuX2dldEF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmxvb2t1cEF0dHJpYnV0ZVZhbHVlKGUsdCl9LHQucHJvdG90eXBlLl9nZXRGbGV4Rmxvd0RpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbixyPSJyb3ciO2lmKHQmJihyPShuPXRoaXMuX3N0eWxlci5nZXRGbG93RGlyZWN0aW9uKHQpKVswXSwhblsxXSYmZSkpe3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1mdW5jdGlvbih0KXt2YXIgZT0odD10P3QudG9Mb3dlckNhc2UoKToiIikuc3BsaXQoIiAiKSxuPWVbMF0scj1lWzFdLGk9ZVsyXTtyZXR1cm4gUi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09bn0pfHwobj1SWzBdKSwiaW5saW5lIj09PXImJihyPSJpbmxpbmUiIT09aT9pOiIiLGk9ImlubGluZSIpLFtuLGZ1bmN0aW9uKHQpe2lmKHQpc3dpdGNoKHQudG9Mb3dlckNhc2UoKSl7Y2FzZSJyZXZlcnNlIjpjYXNlIndyYXAtcmV2ZXJzZSI6Y2FzZSJyZXZlcnNlLXdyYXAiOnQ9IndyYXAtcmV2ZXJzZSI7YnJlYWs7Y2FzZSJubyI6Y2FzZSJub25lIjpjYXNlIm5vd3JhcCI6dD0ibm93cmFwIjticmVhaztkZWZhdWx0OnQ9IndyYXAifXJldHVybiB0fShyKSwhIWldfSh0KTtyZXR1cm4gbj1yWzJdLHZvaWQgMD09PShlPXJbMV0pJiYoZT1udWxsKSx2b2lkIDA9PT1uJiYobj0hMSkse2Rpc3BsYXk6bj8iaW5saW5lLWZsZXgiOiJmbGV4IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJmbGV4LWRpcmVjdGlvbiI6clswXSwiZmxleC13cmFwIjplfHxudWxsfX0ocik7dGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnRzKGksW3RdKX1yZXR1cm4gci50cmltKCl8fCJyb3cifSx0LnByb3RvdHlwZS5fYXBwbHlTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudChuLHQsZSl9LHQucHJvdG90eXBlLl9hcHBseVN0eWxlVG9FbGVtZW50cz1mdW5jdGlvbih0LGUpe3RoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50cyh0LGUpfSx0LnByb3RvdHlwZS5fY2FjaGVJbnB1dD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZSlmb3IodmFyIG4gaW4gZSl0aGlzLl9pbnB1dE1hcFtuXT1lW25dO2Vsc2UgdCYmKHRoaXMuX2lucHV0TWFwW3RdPWUpfSx0LnByb3RvdHlwZS5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXM9ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl9tcUFjdGl2YXRpb24pe3ZhciByPW5ldyBmdW5jdGlvbih0LGUsbil7dGhpcy5iYXNlS2V5PXQsdGhpcy5kZWZhdWx0VmFsdWU9ZSx0aGlzLmlucHV0S2V5cz1ufSh0LGUsdGhpcy5faW5wdXRNYXApO3RoaXMuX21xQWN0aXZhdGlvbj1uZXcgRChyLHRoaXMuX21lZGlhTW9uaXRvcixmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pfXJldHVybiB0aGlzLl9tcUFjdGl2YXRpb259LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW5Ob2RlcyIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4sZT1bXSxuPXQubGVuZ3RoO24tLTspZVtuXT10W25dO3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEk9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2lucHV0TWFwKS5sZW5ndGgtKHRoaXMuX2lucHV0TWFwW3RdPzE6MCk+MH0sdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbi5oYXNLZXlWYWx1ZSh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNJbml0aWFsaXplZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNJbml0aWFsaXplZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLEY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxuLHIsaSl8fHRoaXM7cmV0dXJuIG8uX2Jhc2VLZXk9ZSxvLl9tZWRpYU1vbml0b3I9bixvLl9lbGVtZW50UmVmPXIsby5fc3R5bGVyPWksb31yZXR1cm4gT2JqZWN0KHUuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFjdGl2ZUtleSIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21xQWN0aXZhdGlvbixlPXQ/dC5hY3RpdmF0ZWRJbnB1dEtleTp0aGlzLl9iYXNlS2V5O3JldHVybiJjbGFzcyI9PT1lPyJrbGF6eiI6ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlucHV0TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0TWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibXFBY3RpdmF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5oYXNSZXNwb25zaXZlQVBJPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEkuY2FsbCh0aGlzLHRoaXMuX2Jhc2VLZXkpfSxlLnByb3RvdHlwZS5xdWVyeUlucHV0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3RoaXMuX3F1ZXJ5SW5wdXQodCk6dm9pZCAwfSxlLnByb3RvdHlwZS5jYWNoZUlucHV0PWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj0hMSksbil0aGlzLl9jYWNoZUlucHV0UmF3KHQsZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXRoaXMuX2NhY2hlSW5wdXRBcnJheSh0LGUpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKXRoaXMuX2NhY2hlSW5wdXRPYmplY3QodCxlKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2xhc3MgdmFsdWUgJyIrdCsiJyBwcm92aWRlZC4gRGlkIHlvdSB3YW50IHRvIGNhY2hlIHRoZSByYXcgdmFsdWU/Iik7dGhpcy5fY2FjaGVJbnB1dFN0cmluZyh0LGUpfX0sZS5wcm90b3R5cGUubGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcyh0LGUsbil9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0UmF3PWZ1bmN0aW9uKHQsZSl7dCYmKHRoaXMuX2lucHV0TWFwW3RdPWUpfSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dEFycmF5PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2lucHV0TWFwW3RdPWU/ZS5qb2luKCIgIik6IiJ9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0T2JqZWN0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9IiIpO3ZhciBuPVtdO2lmKGUpZm9yKHZhciByIGluIGUpZVtyXSYmbi5wdXNoKHIpO3RoaXMuX2lucHV0TWFwW3RdPW4uam9pbigiICIpfSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dFN0cmluZz1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9pbnB1dE1hcFt0XT1lfSxlfShMKSxWPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2JyZWFrcG9pbnRzPXQsdGhpcy5fbWF0Y2hNZWRpYT1lLHRoaXMuX3JlZ2lzdGVyQnJlYWtwb2ludHMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJicmVha3BvaW50cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9icmVha3BvaW50cy5pdGVtcy5zbGljZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlT3ZlcmxhcHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9icmVha3BvaW50cy5vdmVybGFwcGluZ3MucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShlLm1lZGlhUXVlcnkpfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9bnVsbDt0aGlzLmJyZWFrcG9pbnRzLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKG4peyIiIT09bi5hbGlhcyYmIWUmJnQuX21hdGNoTWVkaWEuaXNBY3RpdmUobi5tZWRpYVF1ZXJ5KSYmKGU9bil9KTt2YXIgbj10aGlzLmJyZWFrcG9pbnRzWzBdO3JldHVybiBlfHwodGhpcy5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpP246bnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModCl8fHRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHQpO3JldHVybiB0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKGU/ZS5tZWRpYVF1ZXJ5OnQpfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHR8fCIiKXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodHx8IiIpO3JldHVybiB0aGlzLl9tYXRjaE1lZGlhLm9ic2VydmUoZT9lLm1lZGlhUXVlcnk6dCkucGlwZShPYmplY3Qocy5hKShmdW5jdGlvbih0KXtyZXR1cm4gSSh0LGUpfSksT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuIWV8fCIiIT09dC5tcUFsaWFzfSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha3BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2JyZWFrcG9pbnRzLnNvcnRlZEl0ZW1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tZWRpYVF1ZXJ5fSk7dGhpcy5fbWF0Y2hNZWRpYS5yZWdpc3RlclF1ZXJ5KHQpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShTKSxPYmplY3Qoci5WKShrKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIFUodCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuPXRbZV18fCIiO3N3aXRjaChlKXtjYXNlImRpc3BsYXkiOnQuZGlzcGxheT0iZmxleCI9PT1uP1siLXdlYmtpdC1mbGV4IiwiZmxleCJdOiJpbmxpbmUtZmxleCI9PT1uP1siLXdlYmtpdC1pbmxpbmUtZmxleCIsImlubGluZS1mbGV4Il06bjticmVhaztjYXNlImFsaWduLWl0ZW1zIjpjYXNlImFsaWduLXNlbGYiOmNhc2UiYWxpZ24tY29udGVudCI6Y2FzZSJmbGV4IjpjYXNlImZsZXgtYmFzaXMiOmNhc2UiZmxleC1mbG93IjpjYXNlImZsZXgtZ3JvdyI6Y2FzZSJmbGV4LXNocmluayI6Y2FzZSJmbGV4LXdyYXAiOmNhc2UianVzdGlmeS1jb250ZW50Ijp0WyItd2Via2l0LSIrZV09bjticmVhaztjYXNlImZsZXgtZGlyZWN0aW9uIjp0WyItd2Via2l0LWZsZXgtZGlyZWN0aW9uIl09bj1ufHwicm93Iix0WyJmbGV4LWRpcmVjdGlvbiJdPW47YnJlYWs7Y2FzZSJvcmRlciI6dC5vcmRlcj10WyItd2Via2l0LSIrZV09aXNOYU4obik/IjAiOm59fXJldHVybiB0fXZhciB6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9zZXJ2ZXJTdHlsZXNoZWV0PXQsdGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkPWUsdGhpcy5fcGxhdGZvcm1JZD1uLHRoaXMubGF5b3V0Q29uZmlnPXJ9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5U3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9OyJzdHJpbmciPT10eXBlb2YgZSYmKHJbZV09bixlPXIpLHI9dGhpcy5sYXlvdXRDb25maWcuZGlzYWJsZVZlbmRvclByZWZpeGVzP2U6VShlKSx0aGlzLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChyLHQpfSx0LnByb3RvdHlwZS5hcHBseVN0eWxlVG9FbGVtZW50cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciByPXRoaXMubGF5b3V0Q29uZmlnLmRpc2FibGVWZW5kb3JQcmVmaXhlcz90OlUodCk7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KHIsdCl9KX0sdC5wcm90b3R5cGUuZ2V0Rmxvd0RpcmVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvb2t1cFN0eWxlKHQsImZsZXgtZGlyZWN0aW9uIik7ZT09PUImJihlPSIiKTt2YXIgbj10aGlzLmxvb2t1cElubGluZVN0eWxlKHQsImZsZXgtZGlyZWN0aW9uIil8fE9iamVjdChpLnIpKHRoaXMuX3BsYXRmb3JtSWQpJiZ0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ/ZToiIjtyZXR1cm5bZXx8InJvdyIsbl19LHQucHJvdG90eXBlLmxvb2t1cEF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKGUpfHwiIn0sdC5wcm90b3R5cGUubG9va3VwSW5saW5lU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0KGkucSkodGhpcy5fcGxhdGZvcm1JZCk/dC5zdHlsZVtlXTp0aGlzLl9nZXRTZXJ2ZXJTdHlsZSh0LGUpfSx0LnByb3RvdHlwZS5sb29rdXBTdHlsZT1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciByPSIiO3JldHVybiB0JiYoKHI9dGhpcy5sb29rdXBJbmxpbmVTdHlsZSh0LGUpKXx8KE9iamVjdChpLnEpKHRoaXMuX3BsYXRmb3JtSWQpP258fChyPWdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk6dGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkJiYocj10aGlzLl9zZXJ2ZXJTdHlsZXNoZWV0LmdldFN0eWxlRm9yRWxlbWVudCh0LGUpKSkpLHI/ci50cmltKCk6Qn0sdC5wcm90b3R5cGUuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztPYmplY3Qua2V5cyh0KS5zb3J0KCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1BcnJheS5pc0FycmF5KHRbcl0pP3Rbcl06W3Rbcl1dO28uc29ydCgpO2Zvcih2YXIgYT0wLHM9bzthPHMubGVuZ3RoO2ErKyl7dmFyIHU9c1thXTtPYmplY3QoaS5xKShuLl9wbGF0Zm9ybUlkKXx8IW4uX3NlcnZlck1vZHVsZUxvYWRlZD9PYmplY3QoaS5xKShuLl9wbGF0Zm9ybUlkKT9lLnN0eWxlLnNldFByb3BlcnR5KHIsdSk6bi5fc2V0U2VydmVyU3R5bGUoZSxyLHUpOm4uX3NlcnZlclN0eWxlc2hlZXQuYWRkU3R5bGVUb0VsZW1lbnQoZSxyLHUpfX0pfSx0LnByb3RvdHlwZS5fc2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlLG4pe2U9ZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIHI9dGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpO3JbZV09bnx8IiIsdGhpcy5fd3JpdGVTdHlsZUF0dHJpYnV0ZSh0LHIpfSx0LnByb3RvdHlwZS5fZ2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpW2VdfHwiIn0sdC5wcm90b3R5cGUuX3JlYWRTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2lmKG4pZm9yKHZhciByPW4uc3BsaXQoLzsrL2cpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXS50cmltKCk7aWYoby5sZW5ndGg+MCl7dmFyIGE9by5pbmRleE9mKCI6Iik7aWYoLTE9PT1hKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBDU1Mgc3R5bGU6ICIrbyk7ZVtvLnN1YnN0cigwLGEpLnRyaW0oKV09by5zdWJzdHIoYSsxKS50cmltKCl9fXJldHVybiBlfSx0LnByb3RvdHlwZS5fd3JpdGVTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSIiO2Zvcih2YXIgciBpbiBlKWVbcl0mJihuKz1yKyI6IitlW3JdKyI7Iik7dC5zZXRBdHRyaWJ1dGUoInN0eWxlIixuKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoTSw4KSxPYmplY3Qoci5WKShOLDgpLE9iamVjdChyLlYpKHIueiksT2JqZWN0KHIuVikoTykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxCPSJibG9jayI7ZnVuY3Rpb24gSCh0LGUsbil7dm9pZCAwPT09ZSYmKGU9IjEiKSx2b2lkIDA9PT1uJiYobj0iMSIpO3ZhciByPVtlLG4sdF0saT10LmluZGV4T2YoImNhbGMiKTtpZihpPjApclsyXT1XKHQuc3Vic3RyaW5nKGkpLnRyaW0oKSksMj09KG89dC5zdWJzdHIoMCxpKS50cmltKCkuc3BsaXQoIiAiKSkubGVuZ3RoJiYoclswXT1vWzBdLHJbMV09b1sxXSk7ZWxzZSBpZigwPT1pKXJbMl09Vyh0LnRyaW0oKSk7ZWxzZXt2YXIgbztyPTM9PT0obz10LnNwbGl0KCIgIikpLmxlbmd0aD9vOltlLG4sdF19cmV0dXJuIHJ9ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXHNdL2csIiIpLnJlcGxhY2UoL1tcL1wqXCtcLV0vZywiICQmICIpfX0sUFU4TDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiNmJsRiIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9bmV3IHIuYShmdW5jdGlvbihlKXtlLm5leHQodCksZS5jb21wbGV0ZSgpfSk7cmV0dXJuIGUuX2lzU2NhbGFyPSEwLGUudmFsdWU9dCxlfX0sUGhqbjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigicHNXMCIpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gT2JqZWN0KHIuYSkodCxlLDEpfX0sUzFuWDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPW4oIks5SWEiKSxvPW4oIjZibEYiKSxhPW4oIkZGT28iKSxzPW4oInB1Z1QiKTtmdW5jdGlvbiB1KCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IGwodCkpfX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jb25uZWN0YWJsZT10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25uZWN0YWJsZTtuLl9yZWZDb3VudCsrO3ZhciByPW5ldyBjKHQsbiksaT1lLnN1YnNjcmliZShyKTtyZXR1cm4gci5jbG9zZWR8fChyLmNvbm5lY3Rpb249bi5jb25uZWN0KCkpLGl9LHR9KCksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuY29ubmVjdGFibGU9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbm5lY3RhYmxlO2lmKHQpe3RoaXMuY29ubmVjdGFibGU9bnVsbDt2YXIgZT10Ll9yZWZDb3VudDtpZihlPD0wKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2UgaWYodC5fcmVmQ291bnQ9ZS0xLGU+MSl0aGlzLmNvbm5lY3Rpb249bnVsbDtlbHNle3ZhciBuPXRoaXMuY29ubmVjdGlvbixyPXQuX2Nvbm5lY3Rpb247dGhpcy5jb25uZWN0aW9uPW51bGwsIXJ8fG4mJnIhPT1ufHxyLnVuc3Vic2NyaWJlKCl9fWVsc2UgdGhpcy5jb25uZWN0aW9uPW51bGx9LGV9KGEuYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnNvdXJjZT1lLHIuc3ViamVjdEZhY3Rvcnk9bixyLl9yZWZDb3VudD0wLHIuX2lzQ29tcGxldGU9ITEscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHQpfSxlLnByb3RvdHlwZS5nZXRTdWJqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4gdCYmIXQuaXNTdG9wcGVkfHwodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9LGUucHJvdG90eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb25uZWN0aW9uO3JldHVybiB0fHwodGhpcy5faXNDb21wbGV0ZT0hMSwodD10aGlzLl9jb25uZWN0aW9uPW5ldyBzLmEpLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUobmV3IGQodGhpcy5nZXRTdWJqZWN0KCksdGhpcykpKSx0LmNsb3NlZD8odGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9cy5hLkVNUFRZKTp0aGlzLl9jb25uZWN0aW9uPXQpLHR9LGUucHJvdG90eXBlLnJlZkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHUoKSh0aGlzKX0sZX0oby5hKS5wcm90b3R5cGUsaD17b3BlcmF0b3I6e3ZhbHVlOm51bGx9LF9yZWZDb3VudDp7dmFsdWU6MCx3cml0YWJsZTohMH0sX3N1YmplY3Q6e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9jb25uZWN0aW9uOnt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSxfc3Vic2NyaWJlOnt2YWx1ZTpmLl9zdWJzY3JpYmV9LF9pc0NvbXBsZXRlOnt2YWx1ZTpmLl9pc0NvbXBsZXRlLHdyaXRhYmxlOiEwfSxnZXRTdWJqZWN0Ont2YWx1ZTpmLmdldFN1YmplY3R9LGNvbm5lY3Q6e3ZhbHVlOmYuY29ubmVjdH0scmVmQ291bnQ6e3ZhbHVlOmYucmVmQ291bnR9fSxkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5jb25uZWN0YWJsZT1uLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbihlKXt0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY29ubmVjdGFibGUuX2lzQ29tcGxldGU9ITAsdGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7dmFyIGU9dC5fY29ubmVjdGlvbjt0Ll9yZWZDb3VudD0wLHQuX3N1YmplY3Q9bnVsbCx0Ll9jb25uZWN0aW9uPW51bGwsZSYmZS51bnN1YnNjcmliZSgpfX0sZX0oaS5iKTtmdW5jdGlvbiBwKCl7cmV0dXJuIG5ldyBpLmF9ZnVuY3Rpb24gbSgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdSgpKChlPXAsZnVuY3Rpb24odCl7dmFyIG47bj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciByPU9iamVjdC5jcmVhdGUodCxoKTtyZXR1cm4gci5zb3VyY2U9dCxyLnN1YmplY3RGYWN0b3J5PW4scn0pKHQpKTt2YXIgZX19bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KX0sUzVYUTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiREtUYiIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnRoZW4oZnVuY3Rpb24odCl7ZS5jbG9zZWR8fChlLm5leHQodCksZS5jb21wbGV0ZSgpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUuZXJyb3IodCl9KS50aGVuKG51bGwsci5hKSxlfX19LFNNc206ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJJcDBSIiksaT1uKCJ0L05hIiksbz1uKCJDY25HIiksYT1uKCJaWWp0Iikscz1uKCJGL1hMIiksdT1uKCJWTnI0IiksbD1uKCJYbFB3IiksYz1uKCJ4TXlFIiksZj1uKCI2N1kvIiksaD1uKCJtclNHIiksZD1uKCJGRk9vIikscD1uKCJwdWdUIiksbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jYWxsYmFjaz10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB5KHQsdGhpcy5jYWxsYmFjaykpfSx0fSgpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmFkZChuZXcgcC5hKG4pKSxyfXJldHVybiBoLmIoZSx0KSxlfShkLmEpLGc9bigiUzFuWCIpLHY9bigiOVoxRiIpLGI9bigidDlmWiIpLF89bigiV2Y0cCIpLHc9bigibjZnRyIpO2Z1bmN0aW9uIHgodCl7cmV0dXJuIEVycm9yKCdVbmFibGUgdG8gZmluZCBpY29uIHdpdGggdGhlIG5hbWUgIicrdCsnIicpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIEVycm9yKCJUaGUgVVJMIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgYSByZXNvdXJjZSBVUkwgdmlhIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBVUkwgd2FzIFwiIit0KyciLicpfWZ1bmN0aW9uIEModCl7cmV0dXJuIEVycm9yKCJUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgXCIiK3QrJyIuJyl9bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gSX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBFfSk7dmFyIFM9ZnVuY3Rpb24odCl7dC5ub2RlTmFtZT90aGlzLnN2Z0VsZW1lbnQ9dDp0aGlzLnVybD10fSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5faHR0cENsaWVudD10LHRoaXMuX3Nhbml0aXplcj1lLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPSJtYXRlcmlhbC1pY29ucyIsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3ZnSWNvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uTGl0ZXJhbD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCxlKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3IFMobikpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLkhUTUwsbik7aWYoIXIpdGhyb3cgQyhuKTt2YXIgaT10aGlzLl9jcmVhdGVTdmdFbGVtZW50Rm9yU2luZ2xlSWNvbihyKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3IFMoaSkpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZSgiIix0KX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldExpdGVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZSgiIix0KX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcodCxuZXcgUyhlKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLkhUTUwsZSk7aWYoIW4pdGhyb3cgQyhlKTt2YXIgcj10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhuKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBTKHIpKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJGb250Q2xhc3NBbGlhcz1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10KSx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KHQsZSksdGhpc30sdC5wcm90b3R5cGUuY2xhc3NOYW1lRm9yRm9udEFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuZ2V0KHQpfHx0fSx0LnByb3RvdHlwZS5zZXREZWZhdWx0Rm9udFNldENsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPXQsdGhpc30sdC5wcm90b3R5cGUuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfSx0LnByb3RvdHlwZS5nZXRTdmdJY29uRnJvbVVybD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uRi5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgTyh0KTt2YXIgcj10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChuKTtyZXR1cm4gcj9PYmplY3Qocy5hKShrKHIpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3IFModCkpLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhY2hlZEljb25zQnlVcmwuc2V0KG4sdCl9KSxPYmplY3QoZi5hKShmdW5jdGlvbih0KXtyZXR1cm4gayh0KX0pKX0sdC5wcm90b3R5cGUuZ2V0TmFtZWRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciBuPVQoZSx0KSxyPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChuKTtpZihyKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKHIpO3ZhciBpPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gaT90aGlzLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3ModCxpKTpPYmplY3QobC5hKSh4KG4pKX0sdC5wcm90b3R5cGUuX2dldFN2Z0Zyb21Db25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3Qocy5hKShrKHQuc3ZnRWxlbWVudCkpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyh0KS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LnN2Z0VsZW1lbnQ9ZX0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpfSkpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7aWYocilyZXR1cm4gT2JqZWN0KHMuYSkocik7dmFyIGk9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuc3ZnRWxlbWVudH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUoT2JqZWN0KHYuYSkoZnVuY3Rpb24oZSl7dmFyIHI9bi5fc2FuaXRpemVyLnNhbml0aXplKG8uRi5SRVNPVVJDRV9VUkwsdC51cmwpO3JldHVybiBjb25zb2xlLmVycm9yKCJMb2FkaW5nIGljb24gc2V0IFVSTDogIityKyIgZmFpbGVkOiAiK2UubWVzc2FnZSksT2JqZWN0KHMuYSkobnVsbCl9KSl9KTtyZXR1cm4gT2JqZWN0KHUuYSkoaSkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbigpe3ZhciByPW4uX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7aWYoIXIpdGhyb3cgeCh0KTtyZXR1cm4gcn0pKX0sdC5wcm90b3R5cGUuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPWVbbl07aWYoci5zdmdFbGVtZW50KXt2YXIgaT10aGlzLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQoci5zdmdFbGVtZW50LHQpO2lmKGkpcmV0dXJuIGl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2ZldGNoVXJsKHQudXJsKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jcmVhdGVTdmdFbGVtZW50Rm9yU2luZ2xlSWNvbih0KX0pKX0sdC5wcm90b3R5cGUuX2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0LnN2Z0VsZW1lbnQ/T2JqZWN0KHMuYSkodC5zdmdFbGVtZW50KTp0aGlzLl9mZXRjaFVybCh0LnVybCkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbihuKXtyZXR1cm4gdC5zdmdFbGVtZW50fHwodC5zdmdFbGVtZW50PWUuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKG4pKSx0LnN2Z0VsZW1lbnR9KSl9LHQucHJvdG90eXBlLl9jcmVhdGVTdmdFbGVtZW50Rm9yU2luZ2xlSWNvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyh0KTtyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhlKSxlfSx0LnByb3RvdHlwZS5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5xdWVyeVNlbGVjdG9yKCIjIitlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1uLmNsb25lTm9kZSghMCk7aWYoci5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMocik7aWYoInN5bWJvbCI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KHIpKTt2YXIgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZygiPHN2Zz48L3N2Zz4iKTtyZXR1cm4gaS5hcHBlbmRDaGlsZChyKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGkpfSx0LnByb3RvdHlwZS5fc3ZnRWxlbWVudEZyb21TdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7ZS5pbm5lckhUTUw9dDt2YXIgbj1lLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFuKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIG59LHQucHJvdG90eXBlLl90b1N2Z0VsZW1lbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpLG49MDtuPHQuY2hpbGROb2Rlcy5sZW5ndGg7bisrKXQuY2hpbGROb2Rlc1tuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmZS5hcHBlbmRDaGlsZCh0LmNoaWxkTm9kZXNbbl0uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGV9LHQucHJvdG90eXBlLl9zZXRTdmdBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZml0IiwiIiksdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiksdC5zZXRBdHRyaWJ1dGUoImZvY3VzYWJsZSIsImZhbHNlIiksdH0sdC5wcm90b3R5cGUuX2ZldGNoVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuX2h0dHBDbGllbnQpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIEh0dHBDbGllbnQgcHJvdmlkZXIgZm9yIHVzZSB3aXRoIEFuZ3VsYXIgTWF0ZXJpYWwgaWNvbnMuIFBsZWFzZSBpbmNsdWRlIHRoZSBIdHRwQ2xpZW50TW9kdWxlIGZyb20gQGFuZ3VsYXIvY29tbW9uL2h0dHAgaW4geW91ciBhcHAgaW1wb3J0cy4iKTtpZihudWxsPT10KXRocm93IEVycm9yKCdDYW5ub3QgZmV0Y2ggaWNvbiBmcm9tIFVSTCAiJyt0KyciLicpO3ZhciBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkYuUkVTT1VSQ0VfVVJMLHQpO2lmKCFuKXRocm93IE8odCk7dmFyIHI9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KG4pO2lmKHIpcmV0dXJuIHI7dmFyIGksYT10aGlzLl9odHRwQ2xpZW50LmdldChuLHtyZXNwb25zZVR5cGU6InRleHQifSkucGlwZSgoaT1mdW5jdGlvbigpe3JldHVybiBlLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUobil9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IG0oaSkpfSksT2JqZWN0KGcuYSkoKSk7cmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLnNldChuLGEpLGF9LHQucHJvdG90eXBlLl9hZGRTdmdJY29uQ29uZmlnPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KFQodCxlKSxuKSx0aGlzfSx0LnByb3RvdHlwZS5fYWRkU3ZnSWNvblNldENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2ljb25TZXRDb25maWdzLmdldCh0KTtyZXR1cm4gbj9uLnB1c2goZSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KHQsW2VdKSx0aGlzfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5WKShpLmMsOCksT2JqZWN0KG8uVikoYS5jKSxPYmplY3Qoby5WKShyLmQsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBrKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiB0KyI6IitlfXZhciBJPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9pY29uUmVnaXN0cnk9bixpLl9pbmxpbmU9ITEscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksaX1yZXR1cm4gT2JqZWN0KGguYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlubGluZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmxpbmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pbmxpbmU9T2JqZWN0KHcuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb250U2V0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb250U2V0PXRoaXMuX2NsZWFudXBGb250VmFsdWUodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb250SWNvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250SWNvbn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbnRJY29uPXRoaXMuX2NsZWFudXBGb250VmFsdWUodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3NwbGl0SWNvbk5hbWU9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuWyIiLCIiXTt2YXIgZT10LnNwbGl0KCI6Iik7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDE6cmV0dXJuWyIiLGVbMF1dO2Nhc2UgMjpyZXR1cm4gZTtkZWZhdWx0OnRocm93IEVycm9yKCdJbnZhbGlkIGljb24gbmFtZTogIicrdCsnIicpfX0sZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0LnN2Z0ljb24paWYodGhpcy5zdmdJY29uKXt2YXIgbj10aGlzLl9zcGxpdEljb25OYW1lKHRoaXMuc3ZnSWNvbik7dGhpcy5faWNvblJlZ2lzdHJ5LmdldE5hbWVkU3ZnSWNvbihuWzFdLG5bMF0pLnBpcGUoT2JqZWN0KGIuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3ZnRWxlbWVudCh0KX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciByZXRyaWV2aW5nIGljb246ICIrdC5tZXNzYWdlKX0pfWVsc2UgdGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7dGhpcy5fdXNpbmdGb250SWNvbigpJiZ0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl91c2luZ0ZvbnRJY29uKCkmJnRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfSxlLnByb3RvdHlwZS5fdXNpbmdGb250SWNvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN2Z0ljb259LGUucHJvdG90eXBlLl9zZXRTdmdFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0KX0sZS5wcm90b3R5cGUuX2NsZWFyU3ZnRWxlbWVudD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10LmNoaWxkTm9kZXMubGVuZ3RoLG49MDtuPGU7bisrKXQucmVtb3ZlQ2hpbGQodC5jaGlsZE5vZGVzW25dKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcz1mdW5jdGlvbigpe2lmKHRoaXMuX3VzaW5nRm9udEljb24oKSl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpO2UhPXRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiYodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyksZSYmdC5jbGFzc0xpc3QuYWRkKGUpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWUpLHRoaXMuZm9udEljb24hPXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmdC5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX19LGUucHJvdG90eXBlLl9jbGVhbnVwRm9udFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnRyaW0oKS5zcGxpdCgiICIpWzBdOnR9LGV9KE9iamVjdChfLnUpKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSxBPWZ1bmN0aW9uKCl7fX0sVDFETTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiaDlEcSIpLGk9bmV3KG4oIkNTOVEiKS5hKShyLmEpfSxUeGpnOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJabjhEIik7ZnVuY3Rpb24gaSgpe3JldHVybiBPYmplY3Qoci5hKSgxKX19LFVvZEg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJXZjRwIiksbz0iYWNjZW50IixhPSJwcmltYXJ5IixzPVsibWF0LWJ1dHRvbiIsIm1hdC1mbGF0LWJ1dHRvbiIsIm1hdC1pY29uLWJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwibWF0LXN0cm9rZWQtYnV0dG9uIiwibWF0LW1pbmktZmFiIiwibWF0LWZhYiJdLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgdT10LmNhbGwodGhpcyxlKXx8dGhpczt1Ll9wbGF0Zm9ybT1uLHUuX2ZvY3VzTW9uaXRvcj1yLHUuX2FuaW1hdGlvbk1vZGU9aSx1LmlzUm91bmRCdXR0b249dS5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1mYWIiLCJtYXQtbWluaS1mYWIiKSx1LmlzSWNvbkJ1dHRvbj11Ll9oYXNIb3N0QXR0cmlidXRlcygibWF0LWljb24tYnV0dG9uIik7Zm9yKHZhciBsPTAsYz1zO2w8Yy5sZW5ndGg7bCsrKXt2YXIgZj1jW2xdO3UuX2hhc0hvc3RBdHRyaWJ1dGVzKGYpJiZlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChmKX1yZXR1cm4gdS5fZm9jdXNNb25pdG9yLm1vbml0b3IodS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCEwKSx1LmlzUm91bmRCdXR0b24/dS5jb2xvcj1vOnUuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmxhdC1idXR0b24iKSYmKHUuY29sb3I9YSksdX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZS5wcm90b3R5cGUuX2lzUmlwcGxlRGlzYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5faGFzSG9zdEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2dldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKGUpfSl9LGV9KE9iamVjdChpLnUpKE9iamVjdChpLncpKE9iamVjdChpLnYpKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSkpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXtyZXR1cm4gdC5jYWxsKHRoaXMscixlLG4saSl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuX2hhbHREaXNhYmxlZEV2ZW50cz1mdW5jdGlvbih0KXt0aGlzLmRpc2FibGVkJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSxlfSh1KSxjPWZ1bmN0aW9uKCl7fX0sIlY5cSsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuKCJDY25HIik7dmFyIHI9bigiSXAwUiIpLGk9bigiT3pmQiIpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7T2JqZWN0KHIucikoZSkmJiF0JiZjb25zb2xlLndhcm4oIldhcm5pbmc6IEZsZXggTGF5b3V0IGxvYWRlZCBvbiB0aGUgc2VydmVyIHdpdGhvdXQgRmxleExheW91dFNlcnZlck1vZHVsZSIpfXJldHVybiB0LndpdGhDb25maWc9ZnVuY3Rpb24oZSxuKXt2YXIgcj1PYmplY3QuYXNzaWduKHt9LGkuZiksbz1bXTtmb3IodmFyIGEgaW4gZSllW2FdPT09clthXXx8ITEhPT1lW2FdJiYhMCE9PWVbYV18fChyW2FdPWVbYV0pO3JldHVybiBlLnNlcnZlckxvYWRlZCYmby5wdXNoKHtwcm92aWRlOmkubCx1c2VWYWx1ZTohMH0pLEFycmF5LmlzQXJyYXkobikmJm8ucHVzaCh7cHJvdmlkZTppLmEsdXNlVmFsdWU6bixtdWx0aTohMH0pLG8ucHVzaCh7cHJvdmlkZTppLmcsdXNlVmFsdWU6cn0pLHtuZ01vZHVsZTp0LHByb3ZpZGVyczpvfX0sdH0oKX0sVk5yNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIHI9bigibXJTRyIpLGk9bigiNmJsRiIpLG89bigiaXNieSIpLGE9bigiRzVKMSIpLHM9bigiem90bSIpLHU9bigiTUdCUyIpLGw9bigiNjdZLyIpO2Z1bmN0aW9uIGMoKXtmb3IodmFyIHQsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZVtlLmxlbmd0aC0xXSYmKHQ9ZS5wb3AoKSksMT09PWUubGVuZ3RoJiZPYmplY3Qoby5hKShlWzBdKSYmKGU9ZVswXSksMD09PWUubGVuZ3RoP2EuYTp0P2MoZSkucGlwZShPYmplY3QobC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh2b2lkIDAsZSl9KSk6bmV3IGkuYShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGYodCxlKX0pfXZhciBmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyLnNvdXJjZXM9bixyLmNvbXBsZXRlZD0wLHIuaGF2ZVZhbHVlcz0wO3ZhciBpPW4ubGVuZ3RoO3IudmFsdWVzPW5ldyBBcnJheShpKTtmb3IodmFyIG89MDtvPGk7bysrKXt2YXIgYT1uW29dLHU9T2JqZWN0KHMuYSkocixhLG51bGwsbyk7dSYmci5hZGQodSl9cmV0dXJuIHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLnZhbHVlc1tuXT1lLGkuX2hhc1ZhbHVlfHwoaS5faGFzVmFsdWU9ITAsdGhpcy5oYXZlVmFsdWVzKyspfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uLG49dGhpcy5oYXZlVmFsdWVzLHI9dGhpcy52YWx1ZXMsaT1yLmxlbmd0aDt0Ll9oYXNWYWx1ZT8odGhpcy5jb21wbGV0ZWQrKyx0aGlzLmNvbXBsZXRlZD09PWkmJihuPT09aSYmZS5uZXh0KHIpLGUuY29tcGxldGUoKSkpOmUuY29tcGxldGUoKX0sZX0odS5hKX0sIlZuRC8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBhKHQsZSkpfX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcmVkaWNhdGU9bixpLnRoaXNBcmc9cixpLmNvdW50PTAsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlfShpLmEpfSxXZjRwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwidiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBXfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gSH0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pO3ZhciByPW4oIkNjbkciKSxpPW4oIm1yU0ciKSxvPW4oIm42Z0ciKSxhPW4oIks5SWEiKSxzPShuKCI2YmxGIiksbigiZFdaZyIpKSx1PShuKCJaWWp0IiksbigiWVNoMiIpKSxsPW5ldyByLm8oIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQ9dCx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLHRoaXMuX2hhc0NoZWNrZWRIYW1tZXI9ITEsdGhpcy5fZG9jdW1lbnQ9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQ/ZG9jdW1lbnQ6bnVsbCx0aGlzLl93aW5kb3c9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdz93aW5kb3c6bnVsbCx0aGlzLl9hcmVDaGVja3NFbmFibGVkKCkmJiF0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzJiYodGhpcy5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkKCksdGhpcy5fY2hlY2tUaGVtZUlzUHJlc2VudCgpLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITApfXJldHVybiB0LnByb3RvdHlwZS5fYXJlQ2hlY2tzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zYW5pdHlDaGVja3NFbmFibGVkJiZPYmplY3Qoci5XKSgpJiYhdGhpcy5faXNUZXN0RW52KCl9LHQucHJvdG90eXBlLl9pc1Rlc3RFbnY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2luZG93JiYodGhpcy5fd2luZG93Ll9fa2FybWFfX3x8dGhpcy5fd2luZG93Lmphc21pbmUpfSx0LnByb3RvdHlwZS5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkPWZ1bmN0aW9uKCl7dGhpcy5fZG9jdW1lbnQmJiF0aGlzLl9kb2N1bWVudC5kb2N0eXBlJiZjb25zb2xlLndhcm4oIkN1cnJlbnQgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIGRvY3R5cGUuIFRoaXMgbWF5IGNhdXNlIHNvbWUgQW5ndWxhciBNYXRlcmlhbCBjb21wb25lbnRzIG5vdCB0byBiZWhhdmUgYXMgZXhwZWN0ZWQuIil9LHQucHJvdG90eXBlLl9jaGVja1RoZW1lSXNQcmVzZW50PWZ1bmN0aW9uKCl7aWYodGhpcy5fZG9jdW1lbnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBnZXRDb21wdXRlZFN0eWxlKXt2YXIgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTGlzdC5hZGQoIm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTt2YXIgZT1nZXRDb21wdXRlZFN0eWxlKHQpO2UmJiJub25lIiE9PWUuZGlzcGxheSYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBBbmd1bGFyIE1hdGVyaWFsIGNvcmUgdGhlbWUuIE1vc3QgTWF0ZXJpYWwgY29tcG9uZW50cyBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIEZvciBtb3JlIGluZm8gcmVmZXIgdG8gdGhlIHRoZW1pbmcgZ3VpZGU6IGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS90aGVtaW5nIiksdGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19LHQucHJvdG90eXBlLl9jaGVja0hhbW1lcklzQXZhaWxhYmxlPWZ1bmN0aW9uKCl7IXRoaXMuX2hhc0NoZWNrZWRIYW1tZXImJnRoaXMuX3dpbmRvdyYmKHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX3dpbmRvdy5IYW1tZXImJmNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgSGFtbWVySlMuIENlcnRhaW4gQW5ndWxhciBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBjb3JyZWN0bHkuIiksdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMCl9LHR9KCk7ZnVuY3Rpb24gZih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgcj10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuX2Rpc2FibGVkPSExLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChvLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe2Zvcih2YXIgbj1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgaT10LmFwcGx5KHRoaXMsbil8fHRoaXM7cmV0dXJuIGkuY29sb3I9ZSxpfXJldHVybiBPYmplY3QoaS5iKShuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiY29sb3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3J9LHNldDpmdW5jdGlvbih0KXt2YXIgbj10fHxlO24hPT10aGlzLl9jb2xvciYmKHRoaXMuX2NvbG9yJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWF0LSIrdGhpcy5fY29sb3IpLG4mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtIituKSx0aGlzLl9jb2xvcj1uKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxufSh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZVJpcHBsZT0hMSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZVJpcHBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZVJpcHBsZT1PYmplY3Qoby5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfSh0KX12YXIgcD1uZXcgci5vKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyLlYpKHIucyl9fSksbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9sb2NhbGVDaGFuZ2VzPW5ldyBhLmF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibG9jYWxlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhbGVDaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0aGlzLmlzRGF0ZUluc3RhbmNlKHQpJiZ0aGlzLmlzVmFsaWQodCk/dDp0aGlzLmludmFsaWQoKX0sdC5wcm90b3R5cGUuc2V0TG9jYWxlPWZ1bmN0aW9uKHQpe3RoaXMubG9jYWxlPXQsdGhpcy5fbG9jYWxlQ2hhbmdlcy5uZXh0KCl9LHQucHJvdG90eXBlLmNvbXBhcmVEYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0WWVhcih0KS10aGlzLmdldFllYXIoZSl8fHRoaXMuZ2V0TW9udGgodCktdGhpcy5nZXRNb250aChlKXx8dGhpcy5nZXREYXRlKHQpLXRoaXMuZ2V0RGF0ZShlKX0sdC5wcm90b3R5cGUuc2FtZURhdGU9ZnVuY3Rpb24odCxlKXtpZih0JiZlKXt2YXIgbj10aGlzLmlzVmFsaWQodCkscj10aGlzLmlzVmFsaWQoZSk7cmV0dXJuIG4mJnI/IXRoaXMuY29tcGFyZURhdGUodCxlKTpuPT1yfXJldHVybiB0PT1lfSx0LnByb3RvdHlwZS5jbGFtcERhdGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlJiZ0aGlzLmNvbXBhcmVEYXRlKHQsZSk8MD9lOm4mJnRoaXMuY29tcGFyZURhdGUodCxuKT4wP246dH0sdH0oKSx5PW5ldyByLm8oIm1hdC1kYXRlLWZvcm1hdHMiKSxnPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCx2PXtsb25nOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLG5hcnJvdzpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdfSxiPXgoMzEsZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KzEpfSksXz17bG9uZzpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxuYXJyb3c6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl19LHc9L15cZHs0fS1cZHsyfS1cZHsyfSg/OlRcZHsyfTpcZHsyfTpcZHsyfSg/OlwuXGQrKT8oPzpafCg/Oig/OlwrfC0pXGR7Mn06XGR7Mn0pKT8pPyQvO2Z1bmN0aW9uIHgodCxlKXtmb3IodmFyIG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1lKHIpO3JldHVybiBufXZhciBPPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIudXNlVXRjRm9yRGlzcGxheT0hMCx0LnByb3RvdHlwZS5zZXRMb2NhbGUuY2FsbChyLGUpLHIudXNlVXRjRm9yRGlzcGxheT0hbi5UUklERU5ULHIuX2NsYW1wRGF0ZT1uLlRSSURFTlR8fG4uRURHRSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0sZS5wcm90b3R5cGUuZ2V0TW9udGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0sZS5wcm90b3R5cGUuZ2V0RGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCl9LGUucHJvdG90eXBlLmdldERheU9mV2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sZS5wcm90b3R5cGUuZ2V0TW9udGhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKGcpe3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHttb250aDp0LHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHgoMTIsZnVuY3Rpb24odCl7cmV0dXJuIGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKGUuX2Zvcm1hdChuLG5ldyBEYXRlKDIwMTcsdCwxKSkpfSl9cmV0dXJuIHZbdF19LGUucHJvdG90eXBlLmdldERhdGVOYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoZyl7dmFyIGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse2RheToibnVtZXJpYyIsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4geCgzMSxmdW5jdGlvbihuKXtyZXR1cm4gdC5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModC5fZm9ybWF0KGUsbmV3IERhdGUoMjAxNywwLG4rMSkpKX0pfXJldHVybiBifSxlLnByb3RvdHlwZS5nZXREYXlPZldlZWtOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKGcpe3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt3ZWVrZGF5OnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4geCg3LGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhlLl9mb3JtYXQobixuZXcgRGF0ZSgyMDE3LDAsdCsxKSkpfSl9cmV0dXJuIF9bdF19LGUucHJvdG90eXBlLmdldFllYXJOYW1lPWZ1bmN0aW9uKHQpe2lmKGcpe3ZhciBlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt5ZWFyOiJudW1lcmljIix0aW1lWm9uZToidXRjIn0pO3JldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZSx0KSl9cmV0dXJuIFN0cmluZyh0aGlzLmdldFllYXIodCkpfSxlLnByb3RvdHlwZS5nZXRGaXJzdERheU9mV2Vlaz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5nZXROdW1EYXlzSW5Nb250aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXREYXRlKHRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCkrMSwwKSl9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNyZWF0ZURhdGUodGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCksdGhpcy5nZXREYXRlKHQpKX0sZS5wcm90b3R5cGUuY3JlYXRlRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYoZTwwfHxlPjExKXRocm93IEVycm9yKCdJbnZhbGlkIG1vbnRoIGluZGV4ICInK2UrJyIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLicpO2lmKG48MSl0aHJvdyBFcnJvcignSW52YWxpZCBkYXRlICInK24rJyIuIERhdGUgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLicpO3ZhciByPXRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codCxlLG4pO2lmKHIuZ2V0TW9udGgoKSE9ZSl0aHJvdyBFcnJvcignSW52YWxpZCBkYXRlICInK24rJyIgZm9yIG1vbnRoIHdpdGggaW5kZXggIicrZSsnIi4nKTtyZXR1cm4gcn0sZS5wcm90b3R5cGUudG9kYXk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGV9LGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgRGF0ZSh0KTp0P25ldyBEYXRlKERhdGUucGFyc2UodCkpOm51bGx9LGUucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmlzVmFsaWQodCkpdGhyb3cgRXJyb3IoIk5hdGl2ZURhdGVBZGFwdGVyOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4iKTtpZihnKXt0aGlzLl9jbGFtcERhdGUmJih0LmdldEZ1bGxZZWFyKCk8MXx8dC5nZXRGdWxsWWVhcigpPjk5OTkpJiYodD10aGlzLmNsb25lKHQpKS5zZXRGdWxsWWVhcihNYXRoLm1heCgxLE1hdGgubWluKDk5OTksdC5nZXRGdWxsWWVhcigpKSkpLGU9T2JqZWN0KGkuYSkoe30sZSx7dGltZVpvbmU6InV0YyJ9KTt2YXIgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSxlKTtyZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KG4sdCkpfXJldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0LnRvRGF0ZVN0cmluZygpKX0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJZZWFycz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKHQsMTIqZSl9LGUucHJvdG90eXBlLmFkZENhbGVuZGFyTW9udGhzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KStlLHRoaXMuZ2V0RGF0ZSh0KSk7cmV0dXJuIHRoaXMuZ2V0TW9udGgobikhPSgodGhpcy5nZXRNb250aCh0KStlKSUxMisxMiklMTImJihuPXRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKG4pLHRoaXMuZ2V0TW9udGgobiksMCkpLG59LGUucHJvdG90eXBlLmFkZENhbGVuZGFyRGF5cz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpLHRoaXMuZ2V0RGF0ZSh0KStlKX0sZS5wcm90b3R5cGUudG9Jc284NjAxPWZ1bmN0aW9uKHQpe3JldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5fMmRpZ2l0KHQuZ2V0VVRDTW9udGgoKSsxKSx0aGlzLl8yZGlnaXQodC5nZXRVVENEYXRlKCkpXS5qb2luKCItIil9LGUucHJvdG90eXBlLmRlc2VyaWFsaXplPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYody50ZXN0KGUpKXt2YXIgbj1uZXcgRGF0ZShlKTtpZih0aGlzLmlzVmFsaWQobikpcmV0dXJuIG59fXJldHVybiB0LnByb3RvdHlwZS5kZXNlcmlhbGl6ZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmlzRGF0ZUluc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZX0sZS5wcm90b3R5cGUuaXNWYWxpZD1mdW5jdGlvbih0KXtyZXR1cm4haXNOYU4odC5nZXRUaW1lKCkpfSxlLnByb3RvdHlwZS5pbnZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKE5hTil9LGUucHJvdG90eXBlLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgRGF0ZSh0LGUsbik7cmV0dXJuIHQ+PTAmJnQ8MTAwJiZyLnNldEZ1bGxZZWFyKHRoaXMuZ2V0WWVhcihyKS0xOTAwKSxyfSxlLnByb3RvdHlwZS5fMmRpZ2l0PWZ1bmN0aW9uKHQpe3JldHVybigiMDAiK3QpLnNsaWNlKC0yKX0sZS5wcm90b3R5cGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcdTIwMGVcdTIwMGZdL2csIiIpfSxlLnByb3RvdHlwZS5fZm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCksZS5nZXRTZWNvbmRzKCksZS5nZXRNaWxsaXNlY29uZHMoKSkpO3JldHVybiB0LmZvcm1hdChuKX0sZX0obSksQz17cGFyc2U6e2RhdGVJbnB1dDpudWxsfSxkaXNwbGF5OntkYXRlSW5wdXQ6e3llYXI6Im51bWVyaWMiLG1vbnRoOiJudW1lcmljIixkYXk6Im51bWVyaWMifSxtb250aFllYXJMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0In0sZGF0ZUExMXlMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckExMXlMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmcifX19LFM9ZnVuY3Rpb24oKXt9LEU9ZnVuY3Rpb24oKXt9LGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9saW5lcz10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zZXRMaW5lQ2xhc3ModGhpcy5fbGluZXMubGVuZ3RoKSx0aGlzLl9saW5lcy5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe24uX3NldExpbmVDbGFzcyhuLl9saW5lcy5sZW5ndGgpfSl9cmV0dXJuIHQucHJvdG90eXBlLl9zZXRMaW5lQ2xhc3M9ZnVuY3Rpb24odCl7dGhpcy5fcmVzZXRDbGFzc2VzKCksMj09PXR8fDM9PT10P3RoaXMuX3NldENsYXNzKCJtYXQtIit0KyItbGluZSIsITApOnQ+MyYmdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9yZXNldENsYXNzZXM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRDbGFzcygibWF0LTItbGluZSIsITEpLHRoaXMuX3NldENsYXNzKCJtYXQtMy1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMSl9LHQucHJvdG90eXBlLl9zZXRDbGFzcz1mdW5jdGlvbih0LGUpe2U/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodCk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodCl9LHR9KCksVD1mdW5jdGlvbigpe30sST1mdW5jdGlvbigpe3ZhciB0PXtGQURJTkdfSU46MCxWSVNJQkxFOjEsRkFESU5HX09VVDoyLEhJRERFTjozfTtyZXR1cm4gdFt0LkZBRElOR19JTl09IkZBRElOR19JTiIsdFt0LlZJU0lCTEVdPSJWSVNJQkxFIix0W3QuRkFESU5HX09VVF09IkZBRElOR19PVVQiLHRbdC5ISURERU5dPSJISURERU4iLHR9KCksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5jb25maWc9bix0aGlzLnN0YXRlPUkuSElEREVOfXJldHVybiB0LnByb3RvdHlwZS5mYWRlT3V0PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuZmFkZU91dFJpcHBsZSh0aGlzKX0sdH0oKSxqPXtlbnRlckR1cmF0aW9uOjQ1MCxleGl0RHVyYXRpb246NDAwfSxQPTgwMCxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3RhcmdldD10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fdHJpZ2dlckV2ZW50cz1uZXcgTWFwLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IFNldCx0aGlzLl9ldmVudE9wdGlvbnM9ISFPYmplY3Qocy5jKSgpJiZ7cGFzc2l2ZTohMH0sdGhpcy5vbk1vdXNlZG93bj1mdW5jdGlvbih0KXt2YXIgZT1pLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPGkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQrUDtpLl90YXJnZXQucmlwcGxlRGlzYWJsZWR8fGV8fChpLl9pc1BvaW50ZXJEb3duPSEwLGkuZmFkZUluUmlwcGxlKHQuY2xpZW50WCx0LmNsaWVudFksaS5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uVG91Y2hTdGFydD1mdW5jdGlvbih0KXtpLl90YXJnZXQucmlwcGxlRGlzYWJsZWR8fChpLl9sYXN0VG91Y2hTdGFydEV2ZW50PURhdGUubm93KCksaS5faXNQb2ludGVyRG93bj0hMCxpLmZhZGVJblJpcHBsZSh0LnRvdWNoZXNbMF0uY2xpZW50WCx0LnRvdWNoZXNbMF0uY2xpZW50WSxpLl90YXJnZXQucmlwcGxlQ29uZmlnKSl9LHRoaXMub25Qb2ludGVyVXA9ZnVuY3Rpb24oKXtpLl9pc1BvaW50ZXJEb3duJiYoaS5faXNQb2ludGVyRG93bj0hMSxpLl9hY3RpdmVSaXBwbGVzLmZvckVhY2goZnVuY3Rpb24odCl7IXQuY29uZmlnLnBlcnNpc3RlbnQmJih0LnN0YXRlPT09SS5WSVNJQkxFfHx0LmNvbmZpZy50ZXJtaW5hdGVPblBvaW50ZXJVcCYmdC5zdGF0ZT09PUkuRkFESU5HX0lOKSYmdC5mYWRlT3V0KCl9KSl9LHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1uLm5hdGl2ZUVsZW1lbnQsdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlZG93biksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNldXAiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWxlYXZlIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQpLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaGVuZCIsdGhpcy5vblBvaW50ZXJVcCkpfXJldHVybiB0LnByb3RvdHlwZS5mYWRlSW5SaXBwbGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvPXRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fY29udGFpbmVyUmVjdHx8dGhpcy5fY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPU9iamVjdChpLmEpKHt9LGosbi5hbmltYXRpb24pO24uY2VudGVyZWQmJih0PW8ubGVmdCtvLndpZHRoLzIsZT1vLnRvcCtvLmhlaWdodC8yKTt2YXIgcz1uLnJhZGl1c3x8ZnVuY3Rpb24odCxlLG4pe3ZhciByPU1hdGgubWF4KE1hdGguYWJzKHQtbi5sZWZ0KSxNYXRoLmFicyh0LW4ucmlnaHQpKSxpPU1hdGgubWF4KE1hdGguYWJzKGUtbi50b3ApLE1hdGguYWJzKGUtbi5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KHIqcitpKmkpfSh0LGUsbyksdT10LW8ubGVmdCxsPWUtby50b3AsYz1hLmVudGVyRHVyYXRpb24vKG4uc3BlZWRGYWN0b3J8fDEpLGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5jbGFzc0xpc3QuYWRkKCJtYXQtcmlwcGxlLWVsZW1lbnQiKSxmLnN0eWxlLmxlZnQ9dS1zKyJweCIsZi5zdHlsZS50b3A9bC1zKyJweCIsZi5zdHlsZS5oZWlnaHQ9MipzKyJweCIsZi5zdHlsZS53aWR0aD0yKnMrInB4IixmLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLmNvbG9yfHxudWxsLGYuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWMrIm1zIix0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGYpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYpLmdldFByb3BlcnR5VmFsdWUoIm9wYWNpdHkiKSxmLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUoMSkiO3ZhciBoPW5ldyBBKHRoaXMsZixuKTtyZXR1cm4gaC5zdGF0ZT1JLkZBRElOR19JTix0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChoKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPWgpLHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dmFyIHQ9aD09PXIuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU7aC5zdGF0ZT1JLlZJU0lCTEUsbi5wZXJzaXN0ZW50fHx0JiZyLl9pc1BvaW50ZXJEb3dufHxoLmZhZGVPdXQoKX0sYyksaH0sdC5wcm90b3R5cGUuZmFkZU91dFJpcHBsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVSaXBwbGVzLmRlbGV0ZSh0KTtpZih0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSxlKXt2YXIgbj10LmVsZW1lbnQscj1PYmplY3QoaS5hKSh7fSxqLHQuY29uZmlnLmFuaW1hdGlvbik7bi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249ci5leGl0RHVyYXRpb24rIm1zIixuLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9SS5GQURJTkdfT1VULHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dC5zdGF0ZT1JLkhJRERFTixuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9LHIuZXhpdER1cmF0aW9uKX19LHQucHJvdG90eXBlLmZhZGVPdXRBbGw9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVSaXBwbGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmFkZU91dCgpfSl9LHQucHJvdG90eXBlLnNldHVwVHJpZ2dlckV2ZW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQhPT10aGlzLl90cmlnZ2VyRWxlbWVudCYmKHRoaXMuX3JlbW92ZVRyaWdnZXJFdmVudHMoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl90cmlnZ2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24obixyKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKHIsbixlLl9ldmVudE9wdGlvbnMpfSl9KSx0aGlzLl90cmlnZ2VyRWxlbWVudD10KX0sdC5wcm90b3R5cGUucnVuVGltZW91dE91dHNpZGVab25lPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQodCxlKX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlVHJpZ2dlckV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdHJpZ2dlckVsZW1lbnQmJnRoaXMuX3RyaWdnZXJFdmVudHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3QuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixlLHQuX2V2ZW50T3B0aW9ucyl9KX0sdH0oKSxOPW5ldyByLm8oIm1hdC1yaXBwbGUtZ2xvYmFsLW9wdGlvbnMiKSxSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9hbmltYXRpb25Nb2RlPWksdGhpcy5yYWRpdXM9MCx0aGlzLnNwZWVkRmFjdG9yPTEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPXJ8fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBNKHRoaXMsZSx0LG4pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9dCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRyaWdnZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcj10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfSx0LnByb3RvdHlwZS5mYWRlT3V0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJpcHBsZUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybntjZW50ZXJlZDp0aGlzLmNlbnRlcmVkLHJhZGl1czp0aGlzLnJhZGl1cyxjb2xvcjp0aGlzLmNvbG9yLGFuaW1hdGlvbjoiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZT97ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfTpPYmplY3QoaS5hKSh7fSx0aGlzLl9nbG9iYWxPcHRpb25zLmFuaW1hdGlvbix0aGlzLmFuaW1hdGlvbiksdGVybWluYXRlT25Qb2ludGVyVXA6dGhpcy5fZ2xvYmFsT3B0aW9ucy50ZXJtaW5hdGVPblBvaW50ZXJVcCxzcGVlZEZhY3Rvcjp0aGlzLnNwZWVkRmFjdG9yKih0aGlzLl9nbG9iYWxPcHRpb25zLmJhc2VTcGVlZEZhY3Rvcnx8MSl9fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmlwcGxlRGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQ9ZnVuY3Rpb24oKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9LHQucHJvdG90eXBlLmxhdW5jaD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLCJudW1iZXIiPT10eXBlb2YgdD90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUodCxlLE9iamVjdChpLmEpKHt9LHRoaXMucmlwcGxlQ29uZmlnLG4pKTp0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoMCwwLE9iamVjdChpLmEpKHt9LHRoaXMucmlwcGxlQ29uZmlnLHQpKX0sdH0oKSxEPWZ1bmN0aW9uKCl7fSxMPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT0idW5jaGVja2VkIix0aGlzLmRpc2FibGVkPSExfSxGPWZ1bmN0aW9uKCl7fSxWPTAsVT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9sYWJlbElkPSJtYXQtb3B0Z3JvdXAtbGFiZWwtIitWKyssZX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShmKGZ1bmN0aW9uKCl7fSkpLHo9MCxCPW5ldyByLm8oIk1BVF9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCIpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX3BhcmVudD1uLHRoaXMuZ3JvdXA9aSx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faWQ9Im1hdC1vcHRpb24tIit6KyssdGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT0iIix0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPW5ldyByLm0sdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBhLmF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGlwbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQubXVsdGlwbGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1PYmplY3Qoby5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVSaXBwbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuZGlzYWJsZVJpcHBsZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2aWV3VmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuZGVzZWxlY3Q9ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKCl9LHQucHJvdG90eXBlLnNldEFjdGl2ZVN0eWxlcz1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LHQucHJvdG90eXBlLnNldEluYWN0aXZlU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sdC5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3VmFsdWV9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlkb3duPWZ1bmN0aW9uKHQpe3Qua2V5Q29kZSE9PXUuZCYmdC5rZXlDb2RlIT09dS5qfHwodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0LnByZXZlbnREZWZhdWx0KCkpfSx0LnByb3RvdHlwZS5fc2VsZWN0VmlhSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fc2VsZWN0ZWQ9IXRoaXMubXVsdGlwbGV8fCF0aGlzLl9zZWxlY3RlZCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoITApKX0sdC5wcm90b3R5cGUuX2dldFRhYkluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9LHQucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LHQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3Q2hlY2tlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NlbGVjdGVkKXt2YXIgdD10aGlzLnZpZXdWYWx1ZTt0IT09dGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmKHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9dCx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpKX19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0hMSksdGhpcy5zb3VyY2U9dCx0aGlzLmlzVXNlcklucHV0PWV9KHRoaXMsdCkpfSx0fSgpLFc9ZnVuY3Rpb24oKXt9fSxYbFB3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCI2YmxGIik7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7cmV0dXJuIGUuc2NoZWR1bGUobywwLHtlcnJvcjp0LHN1YnNjcmliZXI6bn0pfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfWZ1bmN0aW9uIG8odCl7dC5zdWJzY3JpYmVyLmVycm9yKHQuZXJyb3IpfX0sWVNoMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KTt2YXIgcj05LGk9MTMsbz0yNyxhPTMyLHM9MzUsdT0zNixsPTM3LGM9MzgsZj0zOSxoPTQwLGQ9NDgscD01NyxtPTY1LHk9OTB9LFlsYlE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbigibXJTRyIpLG4oIjZibEYiKSxuKCJGL1hMIik7dmFyIHI9bigiSzlJYSIpLGk9bigiQ2NuRyIpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09biYmKG49ITApO3ZhciBpPXRoaXM7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1uLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5vbkNoYW5nZT10aGlzLl9lbWl0Q2hhbmdlcz9uZXcgci5hOm51bGwsZSYmZS5sZW5ndGgmJih0P2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5fbWFya1NlbGVjdGVkKHQpfSk6dGhpcy5fbWFya1NlbGVjdGVkKGVbMF0pLHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aD0wKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPUFycmF5LmZyb20odGhpcy5fc2VsZWN0aW9uLnZhbHVlcygpKSksdGhpcy5fc2VsZWN0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQoZSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXJrU2VsZWN0ZWQoZSl9KSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuZGVzZWxlY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudChlKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3VubWFya1NlbGVjdGVkKGUpfSksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0KXt0aGlzLmlzU2VsZWN0ZWQodCk/dGhpcy5kZXNlbGVjdCh0KTp0aGlzLnNlbGVjdCh0KX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuaXNTZWxlY3RlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uLmhhcyh0KX0sdC5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9LHQucHJvdG90eXBlLmhhc1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNFbXB0eSgpfSx0LnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKHQpe3RoaXMuX211bHRpcGxlJiZ0aGlzLl9zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX0sdC5wcm90b3R5cGUuX2VtaXRDaGFuZ2VFdmVudD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPW51bGwsKHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aHx8dGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgpJiYodGhpcy5vbkNoYW5nZSYmdGhpcy5vbkNoYW5nZS5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX0sdC5wcm90b3R5cGUuX21hcmtTZWxlY3RlZD1mdW5jdGlvbih0KXt0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5fc2VsZWN0aW9uLmFkZCh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9LHQucHJvdG90eXBlLl91bm1hcmtTZWxlY3RlZD1mdW5jdGlvbih0KXt0aGlzLmlzU2VsZWN0ZWQodCkmJih0aGlzLl9zZWxlY3Rpb24uZGVsZXRlKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9kZXNlbGVjdGVkVG9FbWl0LnB1c2godCkpfSx0LnByb3RvdHlwZS5fdW5tYXJrQWxsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmlzRW1wdHkoKXx8dGhpcy5fc2VsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3VubWFya1NlbGVjdGVkKGUpfSl9LHQucHJvdG90eXBlLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQ9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg+MSYmIXRoaXMuX211bHRpcGxlKXRocm93IEVycm9yKCJDYW5ub3QgcGFzcyBtdWx0aXBsZSB2YWx1ZXMgaW50byBTZWxlY3Rpb25Nb2RlbCB3aXRoIHNpbmdsZS12YWx1ZSBtb2RlLiIpfSx0fSgpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbGlzdGVuZXJzPVtdfXJldHVybiB0LnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPXRoaXMuX2xpc3RlbmVycztuPHIubGVuZ3RoO24rKykoMCxyW25dKSh0LGUpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fbGlzdGVuZXJzLnB1c2godCksZnVuY3Rpb24oKXtlLl9saXN0ZW5lcnM9ZS5fbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KX19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuZXJzPVtdfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCl9LFpZQ2k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1uKCJDY25HIiksbz1uKCIyNkZVIiksYT1uKCIwL3VRIikscz1uKCJGL1hMIiksdT1uKCJLOUlhIiksbD1uKCI2YmxGIiksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iRW1wdHlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIHIuYihlLHQpLGV9KEVycm9yKSxmPW4oIlZuRC8iKSxoPW4oInQ5ZloiKSxkPW4oIkZGT28iKTtmdW5jdGlvbiBwKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBtKHQpKX19dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHkodCx0aGlzLmRlZmF1bHRWYWx1ZSkpfSx0fSgpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmRlZmF1bHRWYWx1ZT1uLHIuaXNFbXB0eT0hMCxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmlzRW1wdHk9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkmJnRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShkLmEpLGc9bigieE15RSIpLHY9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWIpLE9iamVjdChnLmEpKHtoYXNWYWx1ZTohMSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5oYXNWYWx1ZT0hMH0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNWYWx1ZSl0aHJvdyB0KCl9fSl9O2Z1bmN0aW9uIGIoKXtyZXR1cm4gbmV3IGN9dmFyIF89bigibUNoRiIpO2Z1bmN0aW9uIHcodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/T2JqZWN0KGYuYSkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KTpfLmEsT2JqZWN0KGguYSkoMSksbj9wKGUpOnYoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGN9KSl9fXZhciB4PW4oInBzVzAiKSxPPW4oIjY3WS8iKSxDPW4oIlBoam4iKSxTPW4oImI3bVciKSxFPW4oIkc1SjEiKTtmdW5jdGlvbiBrKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/T2JqZWN0KEUuYikoKTplLmxpZnQobmV3IFQodCkpfX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgUy5hfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBJKHQsdGhpcy50b3RhbCkpfSx0fSgpLEk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnRvdGFsPW4sci5yaW5nPW5ldyBBcnJheSxyLmNvdW50PTAscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yaW5nLG49dGhpcy50b3RhbCxyPXRoaXMuY291bnQrKztlLmxlbmd0aDxuP2UucHVzaCh0KTplW3Ilbl09dH0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZXN0aW5hdGlvbixlPXRoaXMuY291bnQ7aWYoZT4wKWZvcih2YXIgbj10aGlzLmNvdW50Pj10aGlzLnRvdGFsP3RoaXMudG90YWw6dGhpcy5jb3VudCxyPXRoaXMucmluZyxpPTA7aTxuO2krKyl7dmFyIG89ZSsrJW47dC5uZXh0KHJbb10pfXQuY29tcGxldGUoKX0sZX0oZC5hKTtmdW5jdGlvbiBBKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHIucGlwZSh0P09iamVjdChmLmEpKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLHIpfSk6Xy5hLGsoMSksbj9wKGUpOnYoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGN9KSl9fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgUCh0LGUsbikpfX12YXIgUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucHJlZGljYXRlPXQsdGhpcy50aGlzQXJnPWUsdGhpcy5zb3VyY2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgTSh0LHRoaXMucHJlZGljYXRlLHRoaXMudGhpc0FyZyx0aGlzLnNvdXJjZSkpfSx0fSgpLE09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5wcmVkaWNhdGU9bixvLnRoaXNBcmc9cixvLnNvdXJjZT1pLG8uaW5kZXg9MCxvLnRoaXNBcmc9cnx8byxvfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT0hMTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuaW5kZXgrKyx0aGlzLnNvdXJjZSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1lfHx0aGlzLm5vdGlmeUNvbXBsZXRlKCExKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5ub3RpZnlDb21wbGV0ZSghMCl9LGV9KGQuYSksTj1uKCI5WjFGIiksUj1uKCJUeGpnIiksRD1uKCJabjhEIik7ZnVuY3Rpb24gTCh0LGUpe3ZhciBuPSExO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yJiYobj0hMCksZnVuY3Rpb24ocil7cmV0dXJuIHIubGlmdChuZXcgRih0LGUsbikpfX12YXIgRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLmFjY3VtdWxhdG9yPXQsdGhpcy5zZWVkPWUsdGhpcy5oYXNTZWVkPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IFYodCx0aGlzLmFjY3VtdWxhdG9yLHRoaXMuc2VlZCx0aGlzLmhhc1NlZWQpKX0sdH0oKSxWPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8uYWNjdW11bGF0b3I9bixvLl9zZWVkPXIsby5oYXNTZWVkPWksby5pbmRleD0wLG99cmV0dXJuIHIuYihlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2VlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5oYXNTZWVkPSEwLHRoaXMuX3NlZWQ9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLmhhc1NlZWQpcmV0dXJuIHRoaXMuX3RyeU5leHQodCk7dGhpcy5zZWVkPXQsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fdHJ5TmV4dD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuaW5kZXgrKzt0cnl7ZT10aGlzLmFjY3VtdWxhdG9yKHRoaXMuc2VlZCx0LG4pfWNhdGNoKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5zZWVkPWUsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShkLmEpLFU9bigieTNCeSIpLHo9bigiSXAwUiIpLEI9bigiWllqdCIpO24uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBhbn0pLG4uZChlLCJ5IixmdW5jdGlvbigpe3JldHVybiBtbn0pLG4uZChlLCJ6IixmdW5jdGlvbigpe3JldHVybiB5bn0pLG4uZChlLCJBIixmdW5jdGlvbigpe3JldHVybiBnbn0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBmbn0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBjbn0pLG4uZChlLCJ4IixmdW5jdGlvbigpe3JldHVybiBwbn0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiB1bn0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBkbn0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBRZX0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiAkZX0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBEZX0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBxZX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBGZX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBvbn0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiB2bn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBsbn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBYZX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBubn0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBlbn0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB0bn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBybn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvZX0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBVZX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBUdH0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBrdH0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBvdH0pO3ZhciBIPWZ1bmN0aW9uKHQsZSl7dGhpcy5pZD10LHRoaXMudXJsPWV9LFc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2b2lkIDA9PT1yJiYocj0iaW1wZXJhdGl2ZSIpLHZvaWQgMD09PWkmJihpPW51bGwpO3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8ubmF2aWdhdGlvblRyaWdnZXI9cixvLnJlc3RvcmVkU3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25TdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicpIn0sZX0oSCkscT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLnVybEFmdGVyUmVkaXJlY3RzPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicpIn0sZX0oSCksWT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLnJlYXNvbj1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkNhbmNlbChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicpIn0sZX0oSCksRz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLmVycm9yPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uRXJyb3IoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCBlcnJvcjogIit0aGlzLmVycm9yKyIpIn0sZX0oSCksUT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZXNSZWNvZ25pemVkKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkd1YXJkc0NoZWNrU3RhcnQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLFo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8pe3ZhciBhPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGEudXJsQWZ0ZXJSZWRpcmVjdHM9cixhLnN0YXRlPWksYS5zaG91bGRBY3RpdmF0ZT1vLGF9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iR3VhcmRzQ2hlY2tFbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiLCBzaG91bGRBY3RpdmF0ZTogIit0aGlzLnNob3VsZEFjdGl2YXRlKyIpIn0sZX0oSCksWD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSZXNvbHZlU3RhcnQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLCQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmVzb2x2ZUVuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksSj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yb3V0ZT10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZUNvbmZpZ0xvYWRTdGFydChwYXRoOiAiK3RoaXMucm91dGUucGF0aCsiKSJ9LHR9KCksdHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucm91dGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICIrdGhpcy5yb3V0ZS5wYXRoKyIpIn0sdH0oKSxldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxudD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCkscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLGl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFjdGl2YXRpb25FbmQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksb3Q9ZnVuY3Rpb24oKXt9LGF0PSJwcmltYXJ5IixzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5wYXJhbXM9dHx8e319cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wYXJhbXMuaGFzT3duUHJvcGVydHkodCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZVswXTplfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXModCkpe3ZhciBlPXRoaXMucGFyYW1zW3RdO3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfXJldHVybltdfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtleXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gdXQodCl7cmV0dXJuIG5ldyBzdCh0KX1mdW5jdGlvbiBsdCh0LGUsbil7dmFyIHI9bi5wYXRoLnNwbGl0KCIvIik7aWYoci5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoImZ1bGwiPT09bi5wYXRoTWF0Y2gmJihlLmhhc0NoaWxkcmVuKCl8fHIubGVuZ3RoPHQubGVuZ3RoKSlyZXR1cm4gbnVsbDtmb3IodmFyIGk9e30sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYT1yW29dLHM9dFtvXTtpZihhLnN0YXJ0c1dpdGgoIjoiKSlpW2Euc3Vic3RyaW5nKDEpXT1zO2Vsc2UgaWYoYSE9PXMucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6dC5zbGljZSgwLHIubGVuZ3RoKSxwb3NQYXJhbXM6aX19dmFyIGN0PWZ1bmN0aW9uKHQsZSl7dGhpcy5yb3V0ZXM9dCx0aGlzLm1vZHVsZT1lfTtmdW5jdGlvbiBmdCh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtodChyLGR0KGUscikpfX1mdW5jdGlvbiBodCh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiXG4gICAgICBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogRW5jb3VudGVyZWQgdW5kZWZpbmVkIHJvdXRlLlxuICAgICAgVGhlIHJlYXNvbiBtaWdodCBiZSBhbiBleHRyYSBjb21tYS5cblxuICAgICAgRXhhbXBsZTpcbiAgICAgIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgICAgICB7IHBhdGg6ICcnLCByZWRpcmVjdFRvOiAnL2Rhc2hib2FyZCcsIHBhdGhNYXRjaDogJ2Z1bGwnIH0sXG4gICAgICAgIHsgcGF0aDogJ2Rhc2hib2FyZCcsICBjb21wb25lbnQ6IERhc2hib2FyZENvbXBvbmVudCB9LCwgPDwgdHdvIGNvbW1hc1xuICAgICAgICB7IHBhdGg6ICdkZXRhaWwvOmlkJywgY29tcG9uZW50OiBIZXJvRGV0YWlsQ29tcG9uZW50IH1cbiAgICAgIF07XG4gICAgIik7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBBcnJheSBjYW5ub3QgYmUgc3BlY2lmaWVkIik7aWYoIXQuY29tcG9uZW50JiYhdC5jaGlsZHJlbiYmIXQubG9hZENoaWxkcmVuJiZ0Lm91dGxldCYmdC5vdXRsZXQhPT1hdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBhIGNvbXBvbmVudGxlc3Mgcm91dGUgd2l0aG91dCBjaGlsZHJlbiBvciBsb2FkQ2hpbGRyZW4gY2Fubm90IGhhdmUgYSBuYW1lZCBvdXRsZXQgc2V0Iik7aWYodC5yZWRpcmVjdFRvJiZ0LmNoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5yZWRpcmVjdFRvJiZ0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LmNoaWxkcmVuJiZ0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBjaGlsZHJlbiBhbmQgbG9hZENoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5yZWRpcmVjdFRvJiZ0LmNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBjb21wb25lbnQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnBhdGgmJnQubWF0Y2hlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoIGFuZCBtYXRjaGVyIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodm9pZCAwPT09dC5yZWRpcmVjdFRvJiYhdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJy4gT25lIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBiZSBwcm92aWRlZDogY29tcG9uZW50LCByZWRpcmVjdFRvLCBjaGlsZHJlbiBvciBsb2FkQ2hpbGRyZW4iKTtpZih2b2lkIDA9PT10LnBhdGgmJnZvaWQgMD09PXQubWF0Y2hlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByb3V0ZXMgbXVzdCBoYXZlIGVpdGhlciBhIHBhdGggb3IgYSBtYXRjaGVyIHNwZWNpZmllZCIpO2lmKCJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYiLyI9PT10LnBhdGguY2hhckF0KDApKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggY2Fubm90IHN0YXJ0IHdpdGggYSBzbGFzaCIpO2lmKCIiPT09dC5wYXRoJiZ2b2lkIDAhPT10LnJlZGlyZWN0VG8mJnZvaWQgMD09PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICd7cGF0aDogXCIiK2UrJyIsIHJlZGlyZWN0VG86ICInK3QucmVkaXJlY3RUbysiXCJ9JzogcGxlYXNlIHByb3ZpZGUgJ3BhdGhNYXRjaCcuIFRoZSBkZWZhdWx0IHZhbHVlIG9mICdwYXRoTWF0Y2gnIGlzICdwcmVmaXgnLCBidXQgb2Z0ZW4gdGhlIGludGVudCBpcyB0byB1c2UgJ2Z1bGwnLiIpO2lmKHZvaWQgMCE9PXQucGF0aE1hdGNoJiYiZnVsbCIhPT10LnBhdGhNYXRjaCYmInByZWZpeCIhPT10LnBhdGhNYXRjaCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoTWF0Y2ggY2FuIG9ubHkgYmUgc2V0IHRvICdwcmVmaXgnIG9yICdmdWxsJyIpO3QuY2hpbGRyZW4mJmZ0KHQuY2hpbGRyZW4sZSl9ZnVuY3Rpb24gZHQodCxlKXtyZXR1cm4gZT90fHxlLnBhdGg/dCYmIWUucGF0aD90KyIvIjohdCYmZS5wYXRoP2UucGF0aDp0KyIvIitlLnBhdGg6IiI6dH1mdW5jdGlvbiBwdCh0KXt2YXIgZT10LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLm1hcChwdCksbj1lP09iamVjdChyLmEpKHt9LHQse2NoaWxkcmVuOmV9KTpPYmplY3Qoci5hKSh7fSx0KTtyZXR1cm4hbi5jb21wb25lbnQmJihlfHxuLmxvYWRDaGlsZHJlbikmJm4ub3V0bGV0JiZuLm91dGxldCE9PWF0JiYobi5jb21wb25lbnQ9b3QpLG59ZnVuY3Rpb24gbXQodCxlKXt2YXIgbixyPU9iamVjdC5rZXlzKHQpLGk9T2JqZWN0LmtleXMoZSk7aWYoci5sZW5ndGghPWkubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWlmKHRbbj1yW29dXSE9PWVbbl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geXQodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sdCl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHQubGVuZ3RoPjA/dFt0Lmxlbmd0aC0xXTpudWxsfWZ1bmN0aW9uIHZ0KHQsZSl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZSh0W25dLG4pfWZ1bmN0aW9uIGJ0KHQpe3JldHVybiB0LnBpcGUoT2JqZWN0KEQuYSkoKSxqKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKX1mdW5jdGlvbiBfdCh0KXtyZXR1cm4gT2JqZWN0KGkuU2EpKHQpP3Q6T2JqZWN0KGkuVGEpKHQpP09iamVjdChhLmEpKFByb21pc2UucmVzb2x2ZSh0KSk6T2JqZWN0KHMuYSkodCl9ZnVuY3Rpb24gd3QodCxlLG4pe3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG10KHQsZSl9KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcykmJmZ1bmN0aW9uIHQoZSxuKXtpZighU3QoZS5zZWdtZW50cyxuLnNlZ21lbnRzKSlyZXR1cm4hMTtpZihlLm51bWJlck9mQ2hpbGRyZW4hPT1uLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuITE7Zm9yKHZhciByIGluIG4uY2hpbGRyZW4pe2lmKCFlLmNoaWxkcmVuW3JdKXJldHVybiExO2lmKCF0KGUuY2hpbGRyZW5bcl0sbi5jaGlsZHJlbltyXSkpcmV0dXJuITF9cmV0dXJuITB9KHQucm9vdCxlLnJvb3QpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aDw9T2JqZWN0LmtleXModCkubGVuZ3RoJiZPYmplY3Qua2V5cyhlKS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT09PXRbbl19KX0odC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKSYmZnVuY3Rpb24gdChlLG4pe3JldHVybiBmdW5jdGlvbiBlKG4scixpKXtpZihuLnNlZ21lbnRzLmxlbmd0aD5pLmxlbmd0aClyZXR1cm4hIVN0KGE9bi5zZWdtZW50cy5zbGljZSgwLGkubGVuZ3RoKSxpKSYmIXIuaGFzQ2hpbGRyZW4oKTtpZihuLnNlZ21lbnRzLmxlbmd0aD09PWkubGVuZ3RoKXtpZighU3Qobi5zZWdtZW50cyxpKSlyZXR1cm4hMTtmb3IodmFyIG8gaW4gci5jaGlsZHJlbil7aWYoIW4uY2hpbGRyZW5bb10pcmV0dXJuITE7aWYoIXQobi5jaGlsZHJlbltvXSxyLmNoaWxkcmVuW29dKSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgYT1pLnNsaWNlKDAsbi5zZWdtZW50cy5sZW5ndGgpLHM9aS5zbGljZShuLnNlZ21lbnRzLmxlbmd0aCk7cmV0dXJuISFTdChuLnNlZ21lbnRzLGEpJiYhIW4uY2hpbGRyZW5bYXRdJiZlKG4uY2hpbGRyZW5bYXRdLHIscyl9KGUsbixuLnNlZ21lbnRzKX0odC5yb290LGUucm9vdCl9dmFyIHh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5yb290PXQsdGhpcy5xdWVyeVBhcmFtcz1lLHRoaXMuZnJhZ21lbnQ9bn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXV0KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LnNlcmlhbGl6ZSh0aGlzKX0sdH0oKSxPdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuc2VnbWVudHM9dCx0aGlzLmNoaWxkcmVuPWUsdGhpcy5wYXJlbnQ9bnVsbCx2dChlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucGFyZW50PW59KX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5udW1iZXJPZkNoaWxkcmVuPjB9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibnVtYmVyT2ZDaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQXQodGhpcyl9LHR9KCksQ3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wYXRoPXQsdGhpcy5wYXJhbWV0ZXJzPWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1ldGVyTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtZXRlck1hcHx8KHRoaXMuX3BhcmFtZXRlck1hcD11dCh0aGlzLnBhcmFtZXRlcnMpKSx0aGlzLl9wYXJhbWV0ZXJNYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gRHQodGhpcyl9LHR9KCk7ZnVuY3Rpb24gU3QodCxlKXtyZXR1cm4gdC5sZW5ndGg9PT1lLmxlbmd0aCYmdC5ldmVyeShmdW5jdGlvbih0LG4pe3JldHVybiB0LnBhdGg9PT1lW25dLnBhdGh9KX1mdW5jdGlvbiBFdCh0LGUpe3ZhciBuPVtdO3JldHVybiB2dCh0LmNoaWxkcmVuLGZ1bmN0aW9uKHQscil7cj09PWF0JiYobj1uLmNvbmNhdChlKHQscikpKX0pLHZ0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxyKXtyIT09YXQmJihuPW4uY29uY2F0KGUodCxyKSkpfSksbn12YXIga3Q9ZnVuY3Rpb24oKXt9LFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHp0KHQpO3JldHVybiBuZXcgeHQoZS5wYXJzZVJvb3RTZWdtZW50KCksZS5wYXJzZVF1ZXJ5UGFyYW1zKCksZS5wYXJzZUZyYWdtZW50KCkpfSx0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGUsbjtyZXR1cm4iLyIrZnVuY3Rpb24gdChlLG4pe2lmKCFlLmhhc0NoaWxkcmVuKCkpcmV0dXJuIEF0KGUpO2lmKG4pe3ZhciByPWUuY2hpbGRyZW5bYXRdP3QoZS5jaGlsZHJlblthdF0sITEpOiIiLGk9W107cmV0dXJuIHZ0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxuKXtuIT09YXQmJmkucHVzaChuKyI6Iit0KGUsITEpKX0pLGkubGVuZ3RoPjA/cisiKCIraS5qb2luKCIvLyIpKyIpIjpyfXZhciBvPUV0KGUsZnVuY3Rpb24obixyKXtyZXR1cm4gcj09PWF0P1t0KGUuY2hpbGRyZW5bYXRdLCExKV06W3IrIjoiK3QobiwhMSldfSk7cmV0dXJuIEF0KGUpKyIvKCIrby5qb2luKCIvLyIpKyIpIn0odC5yb290LCEwKSsoZT10LnF1ZXJ5UGFyYW1zLChuPU9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXt2YXIgbj1lW3RdO3JldHVybiBBcnJheS5pc0FycmF5KG4pP24ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBQdCh0KSsiPSIrUHQoZSl9KS5qb2luKCImIik6UHQodCkrIj0iK1B0KG4pfSkpLmxlbmd0aD8iPyIrbi5qb2luKCImIik6IiIpKygic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQ/IiMiK2VuY29kZVVSSSh0LmZyYWdtZW50KToiIil9LHR9KCksSXQ9bmV3IFR0O2Z1bmN0aW9uIEF0KHQpe3JldHVybiB0LnNlZ21lbnRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gRHQodCl9KS5qb2luKCIvIil9ZnVuY3Rpb24ganQodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24gUHQodCl7cmV0dXJuIGp0KHQpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIE10KHQpe3JldHVybiBqdCh0KS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiBOdCh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWZ1bmN0aW9uIFJ0KHQpe3JldHVybiBOdCh0LnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4iIitNdCh0LnBhdGgpKyhlPXQucGFyYW1ldGVycyxPYmplY3Qua2V5cyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIjsiK010KHQpKyI9IitNdChlW3RdKX0pLmpvaW4oIiIpKTt2YXIgZX12YXIgTHQ9L15bXlwvKCk/Oz0jXSsvO2Z1bmN0aW9uIEZ0KHQpe3ZhciBlPXQubWF0Y2goTHQpO3JldHVybiBlP2VbMF06IiJ9dmFyIFZ0PS9eW149PyYjXSsvLFV0PS9eW14/JiNdKy8senQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMudXJsPXQsdGhpcy5yZW1haW5pbmc9dH1yZXR1cm4gdC5wcm90b3R5cGUucGFyc2VSb290U2VnbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpLCIiPT09dGhpcy5yZW1haW5pbmd8fHRoaXMucGVla1N0YXJ0c1dpdGgoIj8iKXx8dGhpcy5wZWVrU3RhcnRzV2l0aCgiIyIpP25ldyBPdChbXSx7fSk6bmV3IE90KFtdLHRoaXMucGFyc2VDaGlsZHJlbigpKX0sdC5wcm90b3R5cGUucGFyc2VRdWVyeVBhcmFtcz1mdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI/IikpZG97dGhpcy5wYXJzZVF1ZXJ5UGFyYW0odCl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWwoIiYiKSk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIiMiKT9kZWNvZGVVUklDb21wb25lbnQodGhpcy5yZW1haW5pbmcpOm51bGx9LHQucHJvdG90eXBlLnBhcnNlQ2hpbGRyZW49ZnVuY3Rpb24oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7dmFyIHQ9W107Zm9yKHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKXx8dC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3RoaXMucGVla1N0YXJ0c1dpdGgoIi8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8vIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpOyl0aGlzLmNhcHR1cmUoIi8iKSx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dmFyIGU9e307dGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKSYmKHRoaXMuY2FwdHVyZSgiLyIpLGU9dGhpcy5wYXJzZVBhcmVucyghMCkpO3ZhciBuPXt9O3JldHVybiB0aGlzLnBlZWtTdGFydHNXaXRoKCIoIikmJihuPXRoaXMucGFyc2VQYXJlbnMoITEpKSwodC5sZW5ndGg+MHx8T2JqZWN0LmtleXMoZSkubGVuZ3RoPjApJiYoblthdF09bmV3IE90KHQsZSkpLG59LHQucHJvdG90eXBlLnBhcnNlU2VnbWVudD1mdW5jdGlvbigpe3ZhciB0PUZ0KHRoaXMucmVtYWluaW5nKTtpZigiIj09PXQmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgRXJyb3IoIkVtcHR5IHBhdGggdXJsIHNlZ21lbnQgY2Fubm90IGhhdmUgcGFyYW1ldGVyczogJyIrdGhpcy5yZW1haW5pbmcrIicuIik7cmV0dXJuIHRoaXMuY2FwdHVyZSh0KSxuZXcgQ3QoTnQodCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX0sdC5wcm90b3R5cGUucGFyc2VNYXRyaXhQYXJhbXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e307dGhpcy5jb25zdW1lT3B0aW9uYWwoIjsiKTspdGhpcy5wYXJzZVBhcmFtKHQpO3JldHVybiB0fSx0LnByb3RvdHlwZS5wYXJzZVBhcmFtPWZ1bmN0aW9uKHQpe3ZhciBlPUZ0KHRoaXMucmVtYWluaW5nKTtpZihlKXt0aGlzLmNhcHR1cmUoZSk7dmFyIG49IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7dmFyIHI9RnQodGhpcy5yZW1haW5pbmcpO3ImJnRoaXMuY2FwdHVyZShuPXIpfXRbTnQoZSldPU50KG4pfX0sdC5wcm90b3R5cGUucGFyc2VRdWVyeVBhcmFtPWZ1bmN0aW9uKHQpe3ZhciBlLG49KGU9dGhpcy5yZW1haW5pbmcubWF0Y2goVnQpKT9lWzBdOiIiO2lmKG4pe3RoaXMuY2FwdHVyZShuKTt2YXIgcj0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXt2YXIgaT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKFV0KTtyZXR1cm4gZT9lWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aSYmdGhpcy5jYXB0dXJlKHI9aSl9dmFyIG89UnQobiksYT1SdChyKTtpZih0Lmhhc093blByb3BlcnR5KG8pKXt2YXIgcz10W29dO0FycmF5LmlzQXJyYXkocyl8fCh0W29dPXM9W3NdKSxzLnB1c2goYSl9ZWxzZSB0W29dPWF9fSx0LnByb3RvdHlwZS5wYXJzZVBhcmVucz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodGhpcy5jYXB0dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7dmFyIG49RnQodGhpcy5yZW1haW5pbmcpLHI9dGhpcy5yZW1haW5pbmdbbi5sZW5ndGhdO2lmKCIvIiE9PXImJiIpIiE9PXImJiI7IiE9PXIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFyc2UgdXJsICciK3RoaXMudXJsKyInIik7dmFyIGk9dm9pZCAwO24uaW5kZXhPZigiOiIpPi0xPyhpPW4uc3Vic3RyKDAsbi5pbmRleE9mKCI6IikpLHRoaXMuY2FwdHVyZShpKSx0aGlzLmNhcHR1cmUoIjoiKSk6dCYmKGk9YXQpO3ZhciBvPXRoaXMucGFyc2VDaGlsZHJlbigpO2VbaV09MT09PU9iamVjdC5rZXlzKG8pLmxlbmd0aD9vW2F0XTpuZXcgT3QoW10sbyksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIGV9LHQucHJvdG90eXBlLnBlZWtTdGFydHNXaXRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKHQpfSx0LnByb3RvdHlwZS5jb25zdW1lT3B0aW9uYWw9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLnBlZWtTdGFydHNXaXRoKHQpJiYodGhpcy5yZW1haW5pbmc9dGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKHQubGVuZ3RoKSwhMCl9LHQucHJvdG90eXBlLmNhcHR1cmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKHQpKXRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgIicrdCsnIi4nKX0sdH0oKSxCdD1mdW5jdGlvbih0KXt0aGlzLnNlZ21lbnRHcm91cD10fHxudWxsfSxIdD1mdW5jdGlvbih0KXt0aGlzLnVybFRyZWU9dH07ZnVuY3Rpb24gV3QodCl7cmV0dXJuIG5ldyBsLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEJ0KHQpKX0pfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBuZXcgbC5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBIdCh0KSl9KX1mdW5jdGlvbiBZdCh0KXtyZXR1cm4gbmV3IGwuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgRXJyb3IoIk9ubHkgYWJzb2x1dGUgcmVkaXJlY3RzIGNhbiBoYXZlIG5hbWVkIG91dGxldHMuIHJlZGlyZWN0VG86ICciK3QrIiciKSl9KX12YXIgR3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyl7dGhpcy5jb25maWdMb2FkZXI9ZSx0aGlzLnVybFNlcmlhbGl6ZXI9bix0aGlzLnVybFRyZWU9cix0aGlzLmNvbmZpZz1vLHRoaXMuYWxsb3dSZWRpcmVjdHM9ITAsdGhpcy5uZ01vZHVsZT10LmdldChpLnYpfXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuZXhwYW5kU2VnbWVudEdyb3VwKHRoaXMubmdNb2R1bGUsdGhpcy5jb25maWcsdGhpcy51cmxUcmVlLnJvb3QsYXQpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY3JlYXRlVXJsVHJlZShlLHQudXJsVHJlZS5xdWVyeVBhcmFtcyx0LnVybFRyZWUuZnJhZ21lbnQpfSkpLnBpcGUoT2JqZWN0KE4uYSkoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIEh0KXJldHVybiB0LmFsbG93UmVkaXJlY3RzPSExLHQubWF0Y2goZS51cmxUcmVlKTtpZihlIGluc3RhbmNlb2YgQnQpdGhyb3cgdC5ub01hdGNoRXJyb3IoZSk7dGhyb3cgZX0pKX0sdC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50R3JvdXAodGhpcy5uZ01vZHVsZSx0aGlzLmNvbmZpZyx0LnJvb3QsYXQpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7cmV0dXJuIGUuY3JlYXRlVXJsVHJlZShuLHQucXVlcnlQYXJhbXMsdC5mcmFnbWVudCl9KSkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgQnQpdGhyb3cgZS5ub01hdGNoRXJyb3IodCk7dGhyb3cgdH0pKX0sdC5wcm90b3R5cGUubm9NYXRjaEVycm9yPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXJyb3IoIkNhbm5vdCBtYXRjaCBhbnkgcm91dGVzLiBVUkwgU2VnbWVudDogJyIrdC5zZWdtZW50R3JvdXArIiciKX0sdC5wcm90b3R5cGUuY3JlYXRlVXJsVHJlZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT10LnNlZ21lbnRzLmxlbmd0aD4wP25ldyBPdChbXSwoKHI9e30pW2F0XT10LHIpKTp0O3JldHVybiBuZXcgeHQoaSxlLG4pfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDA9PT1uLnNlZ21lbnRzLmxlbmd0aCYmbi5oYXNDaGlsZHJlbigpP3RoaXMuZXhwYW5kQ2hpbGRyZW4odCxlLG4pLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPdChbXSx0KX0pKTp0aGlzLmV4cGFuZFNlZ21lbnQodCxuLGUsbi5zZWdtZW50cyxyLCEwKX0sdC5wcm90b3R5cGUuZXhwYW5kQ2hpbGRyZW49ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYoMD09PU9iamVjdC5rZXlzKG4pLmxlbmd0aClyZXR1cm4gT2JqZWN0KHMuYSkoe30pO3ZhciBvPVtdLGE9W10sdT17fTtyZXR1cm4gdnQobixmdW5jdGlvbihuLGkpe3ZhciBzLGwsYz0ocz1pLGw9bixyLmV4cGFuZFNlZ21lbnRHcm91cCh0LGUsbCxzKSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdVtpXT10fSkpO2k9PT1hdD9vLnB1c2goYyk6YS5wdXNoKGMpfSkscy5hLmFwcGx5KG51bGwsby5jb25jYXQoYSkpLnBpcGUoT2JqZWN0KFIuYSkoKSxBKCksT2JqZWN0KE8uYSkoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKX0obi5jaGlsZHJlbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnQ9ZnVuY3Rpb24odCxlLG4saSxvLGEpe3ZhciB1PXRoaXM7cmV0dXJuIHMuYS5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkobikpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24ocil7cmV0dXJuIHUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUsbixyLGksbyxhKS5waXBlKE9iamVjdChOLmEpKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBCdClyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCk7dGhyb3cgdH0pKX0pLE9iamVjdChSLmEpKCksdyhmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSxPYmplY3QoTi5hKShmdW5jdGlvbih0LG4pe2lmKHQgaW5zdGFuY2VvZiBjfHwiRW1wdHlFcnJvciI9PT10Lm5hbWUpe2lmKHUubm9MZWZ0b3ZlcnNJblVybChlLGksbykpcmV0dXJuIE9iamVjdChzLmEpKG5ldyBPdChbXSx7fSkpO3Rocm93IG5ldyBCdChlKX10aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub0xlZnRvdmVyc0luVXJsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUubGVuZ3RoJiYhdC5jaGlsZHJlbltuXX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtyZXR1cm4gWHQocikhPT1vP1d0KGUpOnZvaWQgMD09PXIucmVkaXJlY3RUbz90aGlzLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUscixpKTphJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixpLG8pOld0KGUpfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLGksbyl7cmV0dXJuIioqIj09PXIucGF0aD90aGlzLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxuLHIsbyk6dGhpcy5leHBhbmRSZWd1bGFyU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixpLG8pfSx0LnByb3RvdHlwZS5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhbXSxuLnJlZGlyZWN0VG8se30pO3JldHVybiBuLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP3F0KG8pOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKG4sbykucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbihuKXt2YXIgbz1uZXcgT3Qobix7fSk7cmV0dXJuIGkuZXhwYW5kU2VnbWVudCh0LG8sZSxuLHIsITEpfSkpfSx0LnByb3RvdHlwZS5leHBhbmRSZWd1bGFyU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhPXRoaXMscz1RdChlLHIsaSksdT1zLmNvbnN1bWVkU2VnbWVudHMsbD1zLmxhc3RDaGlsZCxjPXMucG9zaXRpb25hbFBhcmFtU2VnbWVudHM7aWYoIXMubWF0Y2hlZClyZXR1cm4gV3QoZSk7dmFyIGY9dGhpcy5hcHBseVJlZGlyZWN0Q29tbWFuZHModSxyLnJlZGlyZWN0VG8sYyk7cmV0dXJuIHIucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/cXQoZik6dGhpcy5saW5lcmFsaXplU2VnbWVudHMocixmKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHIpe3JldHVybiBhLmV4cGFuZFNlZ21lbnQodCxlLG4sci5jb25jYXQoaS5zbGljZShsKSksbywhMSl9KSl9LHQucHJvdG90eXBlLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgbz10aGlzO2lmKCIqKiI9PT1uLnBhdGgpcmV0dXJuIG4ubG9hZENoaWxkcmVuP3RoaXMuY29uZmlnTG9hZGVyLmxvYWQodC5pbmplY3RvcixuKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9sb2FkZWRDb25maWc9dCxuZXcgT3QoaSx7fSl9KSk6T2JqZWN0KHMuYSkobmV3IE90KGkse30pKTt2YXIgYT1RdChlLG4saSksdT1hLmNvbnN1bWVkU2VnbWVudHMsbD1hLmxhc3RDaGlsZDtpZighYS5tYXRjaGVkKXJldHVybiBXdChlKTt2YXIgYz1pLnNsaWNlKGwpO3JldHVybiB0aGlzLmdldENoaWxkQ29uZmlnKHQsbikucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXt2YXIgbj10Lm1vZHVsZSxpPXQucm91dGVzLGE9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBadCh0LGUsbikmJlh0KG4pIT09YXR9KX0odCxuKT97c2VnbWVudEdyb3VwOkt0KG5ldyBPdChlLGZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvPXt9O29bYXRdPWU7dHJ5e2Zvcih2YXIgYT1PYmplY3Qoci5lKSh0KSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTsiIj09PXUucGF0aCYmWHQodSkhPT1hdCYmKG9bWHQodSldPW5ldyBPdChbXSx7fSkpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG99KGksbmV3IE90KG4sdC5jaGlsZHJlbikpKSksc2xpY2VkU2VnbWVudHM6W119OjA9PT1uLmxlbmd0aCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFp0KHQsZSxuKX0pfSh0LG4pP3tzZWdtZW50R3JvdXA6S3QobmV3IE90KHQuc2VnbWVudHMsZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxzPXt9O3RyeXtmb3IodmFyIHU9T2JqZWN0KHIuZSkobiksbD11Lm5leHQoKTshbC5kb25lO2w9dS5uZXh0KCkpe3ZhciBjPWwudmFsdWU7WnQodCxlLGMpJiYhaVtYdChjKV0mJihzW1h0KGMpXT1uZXcgT3QoW10se30pKX19Y2F0Y2godCl7bz17ZXJyb3I6dH19ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKGE9dS5yZXR1cm4pJiZhLmNhbGwodSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBPYmplY3Qoci5hKSh7fSxpLHMpfSh0LG4saSx0LmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOm59OntzZWdtZW50R3JvdXA6dCxzbGljZWRTZWdtZW50czpufX0oZSx1LGMsaSksbD1hLnNlZ21lbnRHcm91cCxmPWEuc2xpY2VkU2VnbWVudHM7cmV0dXJuIDA9PT1mLmxlbmd0aCYmbC5oYXNDaGlsZHJlbigpP28uZXhwYW5kQ2hpbGRyZW4obixpLGwpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPdCh1LHQpfSkpOjA9PT1pLmxlbmd0aCYmMD09PWYubGVuZ3RoP09iamVjdChzLmEpKG5ldyBPdCh1LHt9KSk6by5leHBhbmRTZWdtZW50KG4sbCxpLGYsYXQsITApLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPdCh1LmNvbmNhdCh0LnNlZ21lbnRzKSx0LmNoaWxkcmVuKX0pKX0pKX0sdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBlLmNoaWxkcmVuP09iamVjdChzLmEpKG5ldyBjdChlLmNoaWxkcmVuLHQpKTplLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1lLl9sb2FkZWRDb25maWc/T2JqZWN0KHMuYSkoZS5fbG9hZGVkQ29uZmlnKTpmdW5jdGlvbih0LGUpe3ZhciBuPWUuY2FuTG9hZDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP2J0KE9iamVjdChhLmEpKG4pLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24obil7dmFyIHI9dC5nZXQobik7cmV0dXJuIF90KHIuY2FuTG9hZD9yLmNhbkxvYWQoZSk6cihlKSl9KSkpOk9iamVjdChzLmEpKCEwKX0odC5pbmplY3RvcixlKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHIpe3JldHVybiByP24uY29uZmlnTG9hZGVyLmxvYWQodC5pbmplY3RvcixlKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sb2FkZWRDb25maWc9dCx0fSkpOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbC5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKCgobj1FcnJvcigiTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiBDYW5ub3QgbG9hZCBjaGlsZHJlbiBiZWNhdXNlIHRoZSBndWFyZCBvZiB0aGUgcm91dGUgXCJwYXRoOiAnIit0LnBhdGgrIidcIiByZXR1cm5lZCBmYWxzZSIpKS5uZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcj0hMCxuKSk7dmFyIG59KX0oZSl9KSk6T2JqZWN0KHMuYSkobmV3IGN0KFtdLHQpKX0sdC5wcm90b3R5cGUubGluZXJhbGl6ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLHI9ZS5yb290Ozspe2lmKG49bi5jb25jYXQoci5zZWdtZW50cyksMD09PXIubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gT2JqZWN0KHMuYSkobik7aWYoci5udW1iZXJPZkNoaWxkcmVuPjF8fCFyLmNoaWxkcmVuW2F0XSlyZXR1cm4gWXQodC5yZWRpcmVjdFRvKTtyPXIuY2hpbGRyZW5bYXRdfX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENvbW1hbmRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWUoZSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoZSksdCxuKX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENyZWF0cmVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKHQsZS5yb290LG4scik7cmV0dXJuIG5ldyB4dChpLHRoaXMuY3JlYXRlUXVlcnlQYXJhbXMoZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQpfSx0LnByb3RvdHlwZS5jcmVhdGVRdWVyeVBhcmFtcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiB2dCh0LGZ1bmN0aW9uKHQscil7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0LnN0YXJ0c1dpdGgoIjoiKSl7dmFyIGk9dC5zdWJzdHJpbmcoMSk7bltyXT1lW2ldfWVsc2UgbltyXT10fSksbn0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz10aGlzLmNyZWF0ZVNlZ21lbnRzKHQsZS5zZWdtZW50cyxuLHIpLGE9e307cmV0dXJuIHZ0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXthW29dPWkuY3JlYXRlU2VnbWVudEdyb3VwKHQsZSxuLHIpfSksbmV3IE90KG8sYSl9LHQucHJvdG90eXBlLmNyZWF0ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXM7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBhdGguc3RhcnRzV2l0aCgiOiIpP2kuZmluZFBvc1BhcmFtKHQsZSxyKTppLmZpbmRPclJldHVybihlLG4pfSl9LHQucHJvdG90eXBlLmZpbmRQb3NQYXJhbT1mdW5jdGlvbih0LGUsbil7dmFyIHI9bltlLnBhdGguc3Vic3RyaW5nKDEpXTtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWRpcmVjdCB0byAnIit0KyInLiBDYW5ub3QgZmluZCAnIitlLnBhdGgrIicuIik7cmV0dXJuIHJ9LHQucHJvdG90eXBlLmZpbmRPclJldHVybj1mdW5jdGlvbih0LGUpe3ZhciBuLGksbz0wO3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuZSkoZSkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciB1PXMudmFsdWU7aWYodS5wYXRoPT09dC5wYXRoKXJldHVybiBlLnNwbGljZShvKSx1O28rK319Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKGk9YS5yZXR1cm4pJiZpLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiB0fSx0fSgpO2Z1bmN0aW9uIFF0KHQsZSxuKXtpZigiIj09PWUucGF0aClyZXR1cm4iZnVsbCI9PT1lLnBhdGhNYXRjaCYmKHQuaGFzQ2hpbGRyZW4oKXx8bi5sZW5ndGg+MCk/e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX06e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX07dmFyIHI9KGUubWF0Y2hlcnx8bHQpKG4sdCxlKTtyZXR1cm4gcj97bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOnIuY29uc3VtZWQsbGFzdENoaWxkOnIuY29uc3VtZWQubGVuZ3RoLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnIucG9zUGFyYW1zfTp7bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX1mdW5jdGlvbiBLdCh0KXtpZigxPT09dC5udW1iZXJPZkNoaWxkcmVuJiZ0LmNoaWxkcmVuW2F0XSl7dmFyIGU9dC5jaGlsZHJlblthdF07cmV0dXJuIG5ldyBPdCh0LnNlZ21lbnRzLmNvbmNhdChlLnNlZ21lbnRzKSxlLmNoaWxkcmVuKX1yZXR1cm4gdH1mdW5jdGlvbiBadCh0LGUsbil7cmV0dXJuKCEodC5oYXNDaGlsZHJlbigpfHxlLmxlbmd0aD4wKXx8ImZ1bGwiIT09bi5wYXRoTWF0Y2gpJiYiIj09PW4ucGF0aCYmdm9pZCAwIT09bi5yZWRpcmVjdFRvfWZ1bmN0aW9uIFh0KHQpe3JldHVybiB0Lm91dGxldHx8YXR9dmFyICR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yb290PXR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhdGhGcm9tUm9vdCh0KTtyZXR1cm4gZS5sZW5ndGg+MT9lW2UubGVuZ3RoLTJdOm51bGx9LHQucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe3ZhciBlPUp0KHQsdGhpcy5fcm9vdCk7cmV0dXJuIGU/ZS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KTpbXX0sdC5wcm90b3R5cGUuZmlyc3RDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT1KdCh0LHRoaXMuX3Jvb3QpO3JldHVybiBlJiZlLmNoaWxkcmVuLmxlbmd0aD4wP2UuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH0sdC5wcm90b3R5cGUuc2libGluZ3M9ZnVuY3Rpb24odCl7dmFyIGU9dGUodCx0aGlzLl9yb290KTtyZXR1cm4gZS5sZW5ndGg8Mj9bXTplW2UubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KX0sdC5wcm90b3R5cGUucGF0aEZyb21Sb290PWZ1bmN0aW9uKHQpe3JldHVybiB0ZSh0LHRoaXMuX3Jvb3QpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pfSx0fSgpO2Z1bmN0aW9uIEp0KHQsZSl7aWYodD09PWUudmFsdWUpcmV0dXJuIGU7dHJ5e2Zvcih2YXIgbj1PYmplY3Qoci5lKShlLmNoaWxkcmVuKSxpPW4ubmV4dCgpOyFpLmRvbmU7aT1uLm5leHQoKSl7dmFyIG89SnQodCxpLnZhbHVlKTtpZihvKXJldHVybiBvfX1jYXRjaCh0KXthPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYocz1uLnJldHVybikmJnMuY2FsbChuKX1maW5hbGx5e2lmKGEpdGhyb3cgYS5lcnJvcn19cmV0dXJuIG51bGw7dmFyIGEsc31mdW5jdGlvbiB0ZSh0LGUpe2lmKHQ9PT1lLnZhbHVlKXJldHVybltlXTt0cnl7Zm9yKHZhciBuPU9iamVjdChyLmUpKGUuY2hpbGRyZW4pLGk9bi5uZXh0KCk7IWkuZG9uZTtpPW4ubmV4dCgpKXt2YXIgbz10ZSh0LGkudmFsdWUpO2lmKG8ubGVuZ3RoKXJldHVybiBvLnVuc2hpZnQoZSksb319Y2F0Y2godCl7YT17ZXJyb3I6dH19ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHM9bi5yZXR1cm4pJiZzLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybltdO3ZhciBhLHN9dmFyIGVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmFsdWU9dCx0aGlzLmNoaWxkcmVuPWV9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlRyZWVOb2RlKCIrdGhpcy52YWx1ZSsiKSJ9LHR9KCk7ZnVuY3Rpb24gbmUodCl7dmFyIGU9e307cmV0dXJuIHQmJnQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0LnZhbHVlLm91dGxldF09dH0pLGV9dmFyIHJlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5zbmFwc2hvdD1uLGxlKHIsZSkscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9LGV9KCR0KTtmdW5jdGlvbiBpZSh0LGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHNlKFtdLHt9LHt9LCIiLHt9LGF0LGUsbnVsbCx0LnJvb3QsLTEse30pO3JldHVybiBuZXcgdWUoIiIsbmV3IGVlKG4sW10pKX0odCxlKSxyPW5ldyBvLmEoW25ldyBDdCgiIix7fSldKSxpPW5ldyBvLmEoe30pLGE9bmV3IG8uYSh7fSkscz1uZXcgby5hKHt9KSx1PW5ldyBvLmEoIiIpLGw9bmV3IG9lKHIsaSxzLHUsYSxhdCxlLG4ucm9vdCk7cmV0dXJuIGwuc25hcHNob3Q9bi5yb290LG5ldyByZShuZXcgZWUobCxbXSksbil9dmFyIG9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1yLHRoaXMuZGF0YT1pLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLl9mdXR1cmVTbmFwc2hvdD1zfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvdXRlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdXQodCl9KSkpLHRoaXMuX3BhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1ZXJ5UGFyYW1zLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIHV0KHQpfSkpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3Q/dGhpcy5zbmFwc2hvdC50b1N0cmluZygpOiJGdXR1cmUoIit0aGlzLl9mdXR1cmVTbmFwc2hvdCsiKSJ9LHR9KCk7ZnVuY3Rpb24gYWUodCxlKXt2b2lkIDA9PT1lJiYoZT0iZW1wdHlPbmx5Iik7dmFyIG49dC5wYXRoRnJvbVJvb3QsaT0wO2lmKCJhbHdheXMiIT09ZSlmb3IoaT1uLmxlbmd0aC0xO2k+PTE7KXt2YXIgbz1uW2ldLGE9bltpLTFdO2lmKG8ucm91dGVDb25maWcmJiIiPT09by5yb3V0ZUNvbmZpZy5wYXRoKWktLTtlbHNle2lmKGEuY29tcG9uZW50KWJyZWFrO2ktLX19cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybntwYXJhbXM6T2JqZWN0KHIuYSkoe30sdC5wYXJhbXMsZS5wYXJhbXMpLGRhdGE6T2JqZWN0KHIuYSkoe30sdC5kYXRhLGUuZGF0YSkscmVzb2x2ZTpPYmplY3Qoci5hKSh7fSx0LnJlc29sdmUsZS5fcmVzb2x2ZWREYXRhKX19LHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KG4uc2xpY2UoaSkpfXZhciBzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzLHUsbCxjKXt0aGlzLnVybD10LHRoaXMucGFyYW1zPWUsdGhpcy5xdWVyeVBhcmFtcz1uLHRoaXMuZnJhZ21lbnQ9cix0aGlzLmRhdGE9aSx0aGlzLm91dGxldD1vLHRoaXMuY29tcG9uZW50PWEsdGhpcy5yb3V0ZUNvbmZpZz1zLHRoaXMuX3VybFNlZ21lbnQ9dSx0aGlzLl9sYXN0UGF0aEluZGV4PWwsdGhpcy5fcmVzb2x2ZT1jfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhdGhGcm9tUm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbU1hcHx8KHRoaXMuX3BhcmFtTWFwPXV0KHRoaXMucGFyYW1zKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXV0KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlKHVybDonIit0aGlzLnVybC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoKX0pLmpvaW4oIi8iKSsiJywgcGF0aDonIisodGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBhdGg6IiIpKyInKSJ9LHR9KCksdWU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLG4pfHx0aGlzO3JldHVybiByLnVybD1lLGxlKHIsbikscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBjZSh0aGlzLl9yb290KX0sZX0oJHQpO2Z1bmN0aW9uIGxlKHQsZSl7ZS52YWx1ZS5fcm91dGVyU3RhdGU9dCxlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGxlKHQsZSl9KX1mdW5jdGlvbiBjZSh0KXt2YXIgZT10LmNoaWxkcmVuLmxlbmd0aD4wPyIgeyAiK3QuY2hpbGRyZW4ubWFwKGNlKS5qb2luKCIsICIpKyIgfSAiOiIiO3JldHVybiIiK3QudmFsdWUrZX1mdW5jdGlvbiBmZSh0KXtpZih0LnNuYXBzaG90KXt2YXIgZT10LnNuYXBzaG90LG49dC5fZnV0dXJlU25hcHNob3Q7dC5zbmFwc2hvdD1uLG10KGUucXVlcnlQYXJhbXMsbi5xdWVyeVBhcmFtcyl8fHQucXVlcnlQYXJhbXMubmV4dChuLnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50IT09bi5mcmFnbWVudCYmdC5mcmFnbWVudC5uZXh0KG4uZnJhZ21lbnQpLG10KGUucGFyYW1zLG4ucGFyYW1zKXx8dC5wYXJhbXMubmV4dChuLnBhcmFtcyksZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKCFtdCh0W25dLGVbbl0pKXJldHVybiExO3JldHVybiEwfShlLnVybCxuLnVybCl8fHQudXJsLm5leHQobi51cmwpLG10KGUuZGF0YSxuLmRhdGEpfHx0LmRhdGEubmV4dChuLmRhdGEpfWVsc2UgdC5zbmFwc2hvdD10Ll9mdXR1cmVTbmFwc2hvdCx0LmRhdGEubmV4dCh0Ll9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBoZSh0LGUpe3ZhciBuLHI7cmV0dXJuIG10KHQucGFyYW1zLGUucGFyYW1zKSYmU3Qobj10LnVybCxyPWUudXJsKSYmbi5ldmVyeShmdW5jdGlvbih0LGUpe3JldHVybiBtdCh0LnBhcmFtZXRlcnMscltlXS5wYXJhbWV0ZXJzKX0pJiYhKCF0LnBhcmVudCE9IWUucGFyZW50KSYmKCF0LnBhcmVudHx8aGUodC5wYXJlbnQsZS5wYXJlbnQpKX1mdW5jdGlvbiBkZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJiF0Lm91dGxldHMmJiF0LnNlZ21lbnRQYXRofWZ1bmN0aW9uIHBlKHQsZSxuLHIsaSl7dmFyIG89e307cmV0dXJuIHImJnZ0KHIsZnVuY3Rpb24odCxlKXtvW2VdPUFycmF5LmlzQXJyYXkodCk/dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiIrdH0pOiIiK3R9KSxuZXcgeHQobi5yb290PT09dD9lOmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpPXt9O3JldHVybiB2dChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbyl7aVtvXT1lPT09bj9yOnQoZSxuLHIpfSksbmV3IE90KGUuc2VnbWVudHMsaSl9KG4ucm9vdCx0LGUpLG8saSl9dmFyIG1lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7aWYodGhpcy5pc0Fic29sdXRlPXQsdGhpcy5udW1iZXJPZkRvdWJsZURvdHM9ZSx0aGlzLmNvbW1hbmRzPW4sdCYmbi5sZW5ndGg+MCYmZGUoblswXSkpdGhyb3cgbmV3IEVycm9yKCJSb290IHNlZ21lbnQgY2Fubm90IGhhdmUgbWF0cml4IHBhcmFtZXRlcnMiKTt2YXIgcj1uLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHN9KTtpZihyJiZyIT09Z3QobikpdGhyb3cgbmV3IEVycm9yKCJ7b3V0bGV0czp7fX0gaGFzIHRvIGJlIHRoZSBsYXN0IGNvbW1hbmQiKX1yZXR1cm4gdC5wcm90b3R5cGUudG9Sb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19LHR9KCkseWU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuc2VnbWVudEdyb3VwPXQsdGhpcy5wcm9jZXNzQ2hpbGRyZW49ZSx0aGlzLmluZGV4PW59O2Z1bmN0aW9uIGdlKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmdC5vdXRsZXRzP3Qub3V0bGV0c1thdF06IiIrdH1mdW5jdGlvbiB2ZSh0LGUsbil7aWYodHx8KHQ9bmV3IE90KFtdLHt9KSksMD09PXQuc2VnbWVudHMubGVuZ3RoJiZ0Lmhhc0NoaWxkcmVuKCkpcmV0dXJuIGJlKHQsZSxuKTt2YXIgcj1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPTAsaT1lLG89e21hdGNoOiExLHBhdGhJbmRleDowLGNvbW1hbmRJbmRleDowfTtpPHQuc2VnbWVudHMubGVuZ3RoOyl7aWYocj49bi5sZW5ndGgpcmV0dXJuIG87dmFyIGE9dC5zZWdtZW50c1tpXSxzPWdlKG5bcl0pLHU9cjxuLmxlbmd0aC0xP25bcisxXTpudWxsO2lmKGk+MCYmdm9pZCAwPT09cylicmVhaztpZihzJiZ1JiYib2JqZWN0Ij09dHlwZW9mIHUmJnZvaWQgMD09PXUub3V0bGV0cyl7aWYoIU9lKHMsdSxhKSlyZXR1cm4gbztyKz0yfWVsc2V7aWYoIU9lKHMse30sYSkpcmV0dXJuIG87cisrfWkrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmksY29tbWFuZEluZGV4OnJ9fSh0LGUsbiksaT1uLnNsaWNlKHIuY29tbWFuZEluZGV4KTtpZihyLm1hdGNoJiZyLnBhdGhJbmRleDx0LnNlZ21lbnRzLmxlbmd0aCl7dmFyIG89bmV3IE90KHQuc2VnbWVudHMuc2xpY2UoMCxyLnBhdGhJbmRleCkse30pO3JldHVybiBvLmNoaWxkcmVuW2F0XT1uZXcgT3QodC5zZWdtZW50cy5zbGljZShyLnBhdGhJbmRleCksdC5jaGlsZHJlbiksYmUobywwLGkpfXJldHVybiByLm1hdGNoJiYwPT09aS5sZW5ndGg/bmV3IE90KHQuc2VnbWVudHMse30pOnIubWF0Y2gmJiF0Lmhhc0NoaWxkcmVuKCk/X2UodCxlLG4pOnIubWF0Y2g/YmUodCwwLGkpOl9lKHQsZSxuKX1mdW5jdGlvbiBiZSh0LGUsbil7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBuZXcgT3QodC5zZWdtZW50cyx7fSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0WzBdPygoZT17fSlbYXRdPXQsZSk6dm9pZCAwPT09dFswXS5vdXRsZXRzPygobj17fSlbYXRdPXQsbik6dFswXS5vdXRsZXRzO3ZhciBlLG59KG4pLGk9e307cmV0dXJuIHZ0KHIsZnVuY3Rpb24obixyKXtudWxsIT09biYmKGlbcl09dmUodC5jaGlsZHJlbltyXSxlLG4pKX0pLHZ0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1yW2VdJiYoaVtlXT10KX0pLG5ldyBPdCh0LnNlZ21lbnRzLGkpfWZ1bmN0aW9uIF9lKHQsZSxuKXtmb3IodmFyIHI9dC5zZWdtZW50cy5zbGljZSgwLGUpLGk9MDtpPG4ubGVuZ3RoOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBuW2ldJiZ2b2lkIDAhPT1uW2ldLm91dGxldHMpe3ZhciBvPXdlKG5baV0ub3V0bGV0cyk7cmV0dXJuIG5ldyBPdChyLG8pfWlmKDA9PT1pJiZkZShuWzBdKSlyLnB1c2gobmV3IEN0KHQuc2VnbWVudHNbZV0ucGF0aCxuWzBdKSksaSsrO2Vsc2V7dmFyIGE9Z2UobltpXSkscz1pPG4ubGVuZ3RoLTE/bltpKzFdOm51bGw7YSYmcyYmZGUocyk/KHIucHVzaChuZXcgQ3QoYSx4ZShzKSkpLGkrPTIpOihyLnB1c2gobmV3IEN0KGEse30pKSxpKyspfX1yZXR1cm4gbmV3IE90KHIse30pfWZ1bmN0aW9uIHdlKHQpe3ZhciBlPXt9O3JldHVybiB2dCh0LGZ1bmN0aW9uKHQsbil7bnVsbCE9PXQmJihlW25dPV9lKG5ldyBPdChbXSx7fSksMCx0KSl9KSxlfWZ1bmN0aW9uIHhlKHQpe3ZhciBlPXt9O3JldHVybiB2dCh0LGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbbl09IiIrdH0pLGV9ZnVuY3Rpb24gT2UodCxlLG4pe3JldHVybiB0PT1uLnBhdGgmJm10KGUsbi5wYXJhbWV0ZXJzKX12YXIgQ2U9ZnVuY3Rpb24odCl7dGhpcy5wYXRoPXQsdGhpcy5yb3V0ZT10aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aC0xXX0sU2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXBvbmVudD10LHRoaXMucm91dGU9ZX0sRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuZnV0dXJlPXQsdGhpcy5jdXJyPWUsdGhpcy5tb2R1bGVJbmplY3Rvcj1uLHRoaXMuZm9yd2FyZEV2ZW50PXIsdGhpcy5jYW5BY3RpdmF0ZUNoZWNrcz1bXSx0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3M9W119cmV0dXJuIHQucHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mdXR1cmUuX3Jvb3Q7dGhpcy5zZXR1cENoaWxkUm91dGVHdWFyZHMoZSx0aGlzLmN1cnI/dGhpcy5jdXJyLl9yb290Om51bGwsdCxbZS52YWx1ZV0pfSx0LnByb3RvdHlwZS5jaGVja0d1YXJkcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaXNEZWFjdGl2YXRpbmcoKXx8dGhpcy5pc0FjdGl2YXRpbmcoKT90aGlzLnJ1bkNhbkRlYWN0aXZhdGVDaGVja3MoKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QucnVuQ2FuQWN0aXZhdGVDaGVja3MoKTpPYmplY3Qocy5hKSghMSl9KSk6T2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5yZXNvbHZlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmlzQWN0aXZhdGluZygpP09iamVjdChhLmEpKHRoaXMuY2FuQWN0aXZhdGVDaGVja3MpLnBpcGUoT2JqZWN0KEMuYSkoZnVuY3Rpb24obil7cmV0dXJuIGUucnVuUmVzb2x2ZShuLnJvdXRlLHQpfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49Mj9mdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0KFUuYSkoTCh0LGUpLGsoMSkscChlKSkobil9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoVS5hKShMKGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdChlLG4scisxKX0pLGsoMSkpKGUpfX0oZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0pKTpPYmplY3Qocy5hKShudWxsKX0sdC5wcm90b3R5cGUuaXNEZWFjdGl2YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5sZW5ndGh9LHQucHJvdG90eXBlLmlzQWN0aXZhdGluZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGh9LHQucHJvdG90eXBlLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89bmUoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuc2V0dXBSb3V0ZUd1YXJkcyh0LG9bdC52YWx1ZS5vdXRsZXRdLG4sci5jb25jYXQoW3QudmFsdWVdKSksZGVsZXRlIG9bdC52YWx1ZS5vdXRsZXRdfSksdnQobyxmdW5jdGlvbih0LGUpe3JldHVybiBpLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbi5nZXRDb250ZXh0KGUpKX0pfSx0LnByb3RvdHlwZS5zZXR1cFJvdXRlR3VhcmRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQudmFsdWUsbz1lP2UudmFsdWU6bnVsbCxhPW4/bi5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTpudWxsO2lmKG8mJmkucm91dGVDb25maWc9PT1vLnJvdXRlQ29uZmlnKXt2YXIgcz10aGlzLnNob3VsZFJ1bkd1YXJkc0FuZFJlc29sdmVycyhvLGksaS5yb3V0ZUNvbmZpZy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMpO3M/dGhpcy5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBDZShyKSk6KGkuZGF0YT1vLmRhdGEsaS5fcmVzb2x2ZWREYXRhPW8uX3Jlc29sdmVkRGF0YSksdGhpcy5zZXR1cENoaWxkUm91dGVHdWFyZHModCxlLGkuY29tcG9uZW50P2E/YS5jaGlsZHJlbjpudWxsOm4scikscyYmdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IFNlKGEub3V0bGV0LmNvbXBvbmVudCxvKSl9ZWxzZSBvJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGUsYSksdGhpcy5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBDZShyKSksdGhpcy5zZXR1cENoaWxkUm91dGVHdWFyZHModCxudWxsLGkuY29tcG9uZW50P2E/YS5jaGlsZHJlbjpudWxsOm4scil9LHQucHJvdG90eXBlLnNob3VsZFJ1bkd1YXJkc0FuZFJlc29sdmVycz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG4pe2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFoZSh0LGUpfHwhbXQodC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKTtjYXNlInBhcmFtc0NoYW5nZSI6ZGVmYXVsdDpyZXR1cm4haGUodCxlKX19LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW5lKHQpLGk9dC52YWx1ZTt2dChyLGZ1bmN0aW9uKHQscil7bi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LGkuY29tcG9uZW50P2U/ZS5jaGlsZHJlbi5nZXRDb250ZXh0KHIpOm51bGw6ZSl9KSx0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgU2UoaS5jb21wb25lbnQmJmUmJmUub3V0bGV0JiZlLm91dGxldC5pc0FjdGl2YXRlZD9lLm91dGxldC5jb21wb25lbnQ6bnVsbCxpKSl9LHQucHJvdG90eXBlLnJ1bkNhbkRlYWN0aXZhdGVDaGVja3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBPYmplY3QoYS5hKSh0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQucnVuQ2FuRGVhY3RpdmF0ZShlLmNvbXBvbmVudCxlLnJvdXRlKX0pLGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5ydW5DYW5BY3RpdmF0ZUNoZWNrcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIE9iamVjdChhLmEpKHRoaXMuY2FuQWN0aXZhdGVDaGVja3MpLnBpcGUoT2JqZWN0KEMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGJ0KE9iamVjdChhLmEpKFt0LmZpcmVDaGlsZEFjdGl2YXRpb25TdGFydChlLnJvdXRlLnBhcmVudCksdC5maXJlQWN0aXZhdGlvblN0YXJ0KGUucm91dGUpLHQucnVuQ2FuQWN0aXZhdGVDaGlsZChlLnBhdGgpLHQucnVuQ2FuQWN0aXZhdGUoZS5yb3V0ZSldKSl9KSxqKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKX0sdC5wcm90b3R5cGUuZmlyZUFjdGl2YXRpb25TdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQmJnRoaXMuZm9yd2FyZEV2ZW50JiZ0aGlzLmZvcndhcmRFdmVudChuZXcgcnQodCkpLE9iamVjdChzLmEpKCEwKX0sdC5wcm90b3R5cGUuZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBldCh0KSksT2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5ydW5DYW5BY3RpdmF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5yb3V0ZUNvbmZpZz90LnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlOm51bGw7cmV0dXJuIG4mJjAhPT1uLmxlbmd0aD9idChPYmplY3QoYS5hKShuKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKG4pe3ZhciByPWUuZ2V0VG9rZW4obix0KTtyZXR1cm4gX3Qoci5jYW5BY3RpdmF0ZT9yLmNhbkFjdGl2YXRlKHQsZS5mdXR1cmUpOnIodCxlLmZ1dHVyZSkpLnBpcGUodygpKX0pKSk6T2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5ydW5DYW5BY3RpdmF0ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10W3QubGVuZ3RoLTFdLHI9dC5zbGljZSgwLHQubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuZXh0cmFjdENhbkFjdGl2YXRlQ2hpbGQodCl9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10fSk7cmV0dXJuIGJ0KE9iamVjdChhLmEpKHIpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7cmV0dXJuIGJ0KE9iamVjdChhLmEpKHQuZ3VhcmRzKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKHIpe3ZhciBpPWUuZ2V0VG9rZW4ocix0Lm5vZGUpO3JldHVybiBfdChpLmNhbkFjdGl2YXRlQ2hpbGQ/aS5jYW5BY3RpdmF0ZUNoaWxkKG4sZS5mdXR1cmUpOmkobixlLmZ1dHVyZSkpLnBpcGUodygpKX0pKSl9KSkpfSx0LnByb3RvdHlwZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZDpudWxsO3JldHVybiBlJiYwIT09ZS5sZW5ndGg/e25vZGU6dCxndWFyZHM6ZX06bnVsbH0sdC5wcm90b3R5cGUucnVuQ2FuRGVhY3RpdmF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lJiZlLnJvdXRlQ29uZmlnP2Uucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiByJiYwIT09ci5sZW5ndGg/T2JqZWN0KGEuYSkocikucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbihyKXt2YXIgaT1uLmdldFRva2VuKHIsZSk7cmV0dXJuIF90KGkuY2FuRGVhY3RpdmF0ZT9pLmNhbkRlYWN0aXZhdGUodCxlLG4uY3VycixuLmZ1dHVyZSk6aSh0LGUsbi5jdXJyLG4uZnV0dXJlKSkucGlwZSh3KCkpfSkpLnBpcGUoaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSk6T2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5ydW5SZXNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVzb2x2ZU5vZGUodC5fcmVzb2x2ZSx0KS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB0Ll9yZXNvbHZlZERhdGE9bix0LmRhdGE9T2JqZWN0KHIuYSkoe30sdC5kYXRhLGFlKHQsZSkucmVzb2x2ZSksbnVsbH0pKX0sdC5wcm90b3R5cGUucmVzb2x2ZU5vZGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9T2JqZWN0LmtleXModCk7aWYoMD09PXIubGVuZ3RoKXJldHVybiBPYmplY3Qocy5hKSh7fSk7aWYoMT09PXIubGVuZ3RoKXt2YXIgaT1yWzBdO3JldHVybiB0aGlzLmdldFJlc29sdmVyKHRbaV0sZSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4oZT17fSlbaV09dCxlO3ZhciBlfSkpfXZhciBvPXt9O3JldHVybiBPYmplY3QoYS5hKShyKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHIpe3JldHVybiBuLmdldFJlc29sdmVyKHRbcl0sZSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtyZXR1cm4gb1tyXT10LHR9KSl9KSkucGlwZShBKCksT2JqZWN0KE8uYSkoZnVuY3Rpb24oKXtyZXR1cm4gb30pKX0sdC5wcm90b3R5cGUuZ2V0UmVzb2x2ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldFRva2VuKHQsZSk7cmV0dXJuIF90KG4ucmVzb2x2ZT9uLnJlc29sdmUoZSx0aGlzLmZ1dHVyZSk6bihlLHRoaXMuZnV0dXJlKSl9LHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZ31yZXR1cm4gbnVsbH0oZSk7cmV0dXJuKG4/bi5tb2R1bGUuaW5qZWN0b3I6dGhpcy5tb2R1bGVJbmplY3RvcikuZ2V0KHQpfSx0fSgpLGtlPWZ1bmN0aW9uKCl7fSxUZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpKXt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy5jb25maWc9ZSx0aGlzLnVybFRyZWU9bix0aGlzLnVybD1yLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT1pfXJldHVybiB0LnByb3RvdHlwZS5yZWNvZ25pemU9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9amUodGhpcy51cmxUcmVlLnJvb3QsW10sW10sdGhpcy5jb25maWcpLnNlZ21lbnRHcm91cCxlPXRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0aGlzLmNvbmZpZyx0LGF0KSxuPW5ldyBzZShbXSxPYmplY3QuZnJlZXplKHt9KSxPYmplY3QuZnJlZXplKE9iamVjdChyLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCx7fSxhdCx0aGlzLnJvb3RDb21wb25lbnRUeXBlLG51bGwsdGhpcy51cmxUcmVlLnJvb3QsLTEse30pLGk9bmV3IGVlKG4sZSksbz1uZXcgdWUodGhpcy51cmwsaSk7cmV0dXJuIHRoaXMuaW5oZXJpdFBhcmFtc0FuZERhdGEoby5fcm9vdCksT2JqZWN0KHMuYSkobyl9Y2F0Y2godCl7cmV0dXJuIG5ldyBsLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KX19LHQucHJvdG90eXBlLmluaGVyaXRQYXJhbXNBbmREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnZhbHVlLHI9YWUobix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpO24ucGFyYW1zPU9iamVjdC5mcmVlemUoci5wYXJhbXMpLG4uZGF0YT1PYmplY3QuZnJlZXplKHIuZGF0YSksdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluaGVyaXRQYXJhbXNBbmREYXRhKHQpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5zZWdtZW50cy5sZW5ndGgmJmUuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbih0LGUpOnRoaXMucHJvY2Vzc1NlZ21lbnQodCxlLGUuc2VnbWVudHMsbil9LHQucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcyxpPUV0KGUsZnVuY3Rpb24oZSxuKXtyZXR1cm4gci5wcm9jZXNzU2VnbWVudEdyb3VwKHQsZSxuKX0pO3JldHVybiBuPXt9LGkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uW3QudmFsdWUub3V0bGV0XTtpZihlKXt2YXIgcj1lLnVybC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoKX0pLmpvaW4oIi8iKSxpPXQudmFsdWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpO3Rocm93IG5ldyBFcnJvcigiVHdvIHNlZ21lbnRzIGNhbm5vdCBoYXZlIHRoZSBzYW1lIG91dGxldCBuYW1lOiAnIityKyInIGFuZCAnIitpKyInLiIpfW5bdC52YWx1ZS5vdXRsZXRdPXQudmFsdWV9KSxpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC52YWx1ZS5vdXRsZXQ9PT1hdD8tMTplLnZhbHVlLm91dGxldD09PWF0PzE6dC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShlLnZhbHVlLm91dGxldCl9KSxpfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudD1mdW5jdGlvbih0LGUsbixpKXt0cnl7Zm9yKHZhciBvPU9iamVjdChyLmUpKHQpLGE9by5uZXh0KCk7IWEuZG9uZTthPW8ubmV4dCgpKXt2YXIgcz1hLnZhbHVlO3RyeXtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShzLGUsbixpKX1jYXRjaCh0KXtpZighKHQgaW5zdGFuY2VvZiBrZSkpdGhyb3cgdH19fWNhdGNoKHQpe3U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihsPW8ucmV0dXJuKSYmbC5jYWxsKG8pfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX1pZih0aGlzLm5vTGVmdG92ZXJzSW5VcmwoZSxuLGkpKXJldHVybltdO3Rocm93IG5ldyBrZTt2YXIgdSxsfSx0LnByb3RvdHlwZS5ub0xlZnRvdmVyc0luVXJsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUubGVuZ3RoJiYhdC5jaGlsZHJlbltuXX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGU9ZnVuY3Rpb24odCxlLG4saSl7aWYodC5yZWRpcmVjdFRvKXRocm93IG5ldyBrZTtpZigodC5vdXRsZXR8fGF0KSE9PWkpdGhyb3cgbmV3IGtlO3ZhciBvLGE9W10scz1bXTtpZigiKioiPT09dC5wYXRoKXt2YXIgdT1uLmxlbmd0aD4wP2d0KG4pLnBhcmFtZXRlcnM6e307bz1uZXcgc2Uobix1LE9iamVjdC5mcmVlemUoT2JqZWN0KHIuYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LE5lKHQpLGksdC5jb21wb25lbnQsdCxJZShlKSxBZShlKStuLmxlbmd0aCxSZSh0KSl9ZWxzZXt2YXIgbD1mdW5jdGlvbih0LGUsbil7aWYoIiI9PT1lLnBhdGgpe2lmKCJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKSl0aHJvdyBuZXcga2U7cmV0dXJue2NvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscGFyYW1ldGVyczp7fX19dmFyIGk9KGUubWF0Y2hlcnx8bHQpKG4sdCxlKTtpZighaSl0aHJvdyBuZXcga2U7dmFyIG89e307dnQoaS5wb3NQYXJhbXMsZnVuY3Rpb24odCxlKXtvW2VdPXQucGF0aH0pO3ZhciBhPWkuY29uc3VtZWQubGVuZ3RoPjA/T2JqZWN0KHIuYSkoe30sbyxpLmNvbnN1bWVkW2kuY29uc3VtZWQubGVuZ3RoLTFdLnBhcmFtZXRlcnMpOm87cmV0dXJue2NvbnN1bWVkU2VnbWVudHM6aS5jb25zdW1lZCxsYXN0Q2hpbGQ6aS5jb25zdW1lZC5sZW5ndGgscGFyYW1ldGVyczphfX0oZSx0LG4pO2E9bC5jb25zdW1lZFNlZ21lbnRzLHM9bi5zbGljZShsLmxhc3RDaGlsZCksbz1uZXcgc2UoYSxsLnBhcmFtZXRlcnMsT2JqZWN0LmZyZWV6ZShPYmplY3Qoci5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsTmUodCksaSx0LmNvbXBvbmVudCx0LEllKGUpLEFlKGUpK2EubGVuZ3RoLFJlKHQpKX12YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGlsZHJlbj90LmNoaWxkcmVuOnQubG9hZENoaWxkcmVuP3QuX2xvYWRlZENvbmZpZy5yb3V0ZXM6W119KHQpLGY9amUoZSxhLHMsYyksaD1mLnNlZ21lbnRHcm91cCxkPWYuc2xpY2VkU2VnbWVudHM7aWYoMD09PWQubGVuZ3RoJiZoLmhhc0NoaWxkcmVuKCkpe3ZhciBwPXRoaXMucHJvY2Vzc0NoaWxkcmVuKGMsaCk7cmV0dXJuW25ldyBlZShvLHApXX1pZigwPT09Yy5sZW5ndGgmJjA9PT1kLmxlbmd0aClyZXR1cm5bbmV3IGVlKG8sW10pXTt2YXIgbT10aGlzLnByb2Nlc3NTZWdtZW50KGMsaCxkLGF0KTtyZXR1cm5bbmV3IGVlKG8sbSldfSx0fSgpO2Z1bmN0aW9uIEllKHQpe2Zvcih2YXIgZT10O2UuX3NvdXJjZVNlZ21lbnQ7KWU9ZS5fc291cmNlU2VnbWVudDtyZXR1cm4gZX1mdW5jdGlvbiBBZSh0KXtmb3IodmFyIGU9dCxuPWUuX3NlZ21lbnRJbmRleFNoaWZ0P2UuX3NlZ21lbnRJbmRleFNoaWZ0OjA7ZS5fc291cmNlU2VnbWVudDspbis9KGU9ZS5fc291cmNlU2VnbWVudCkuX3NlZ21lbnRJbmRleFNoaWZ0P2UuX3NlZ21lbnRJbmRleFNoaWZ0OjA7cmV0dXJuIG4tMX1mdW5jdGlvbiBqZSh0LGUsbixpKXtpZihuLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIGkuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gUGUodCxlLG4pJiZNZShuKSE9PWF0fSl9KHQsbikpe3ZhciBvPW5ldyBPdChlLGZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvLGEscz17fTtzW2F0XT1pLGkuX3NvdXJjZVNlZ21lbnQ9dCxpLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aDt0cnl7Zm9yKHZhciB1PU9iamVjdChyLmUpKG4pLGw9dS5uZXh0KCk7IWwuZG9uZTtsPXUubmV4dCgpKXt2YXIgYz1sLnZhbHVlO2lmKCIiPT09Yy5wYXRoJiZNZShjKSE9PWF0KXt2YXIgZj1uZXcgT3QoW10se30pO2YuX3NvdXJjZVNlZ21lbnQ9dCxmLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCxzW01lKGMpXT1mfX19Y2F0Y2godCl7bz17ZXJyb3I6dH19ZmluYWxseXt0cnl7bCYmIWwuZG9uZSYmKGE9dS5yZXR1cm4pJiZhLmNhbGwodSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBzfSh0LGUsaSxuZXcgT3Qobix0LmNoaWxkcmVuKSkpO3JldHVybiBvLl9zb3VyY2VTZWdtZW50PXQsby5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpvLHNsaWNlZFNlZ21lbnRzOltdfX1pZigwPT09bi5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBQZSh0LGUsbil9KX0odCxuKSl7dmFyIGE9bmV3IE90KHQuc2VnbWVudHMsZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxzPXt9O3RyeXtmb3IodmFyIHU9T2JqZWN0KHIuZSkobiksbD11Lm5leHQoKTshbC5kb25lO2w9dS5uZXh0KCkpe3ZhciBjPWwudmFsdWU7aWYoUGUodCxlLGMpJiYhaVtNZShjKV0pe3ZhciBmPW5ldyBPdChbXSx7fSk7Zi5fc291cmNlU2VnbWVudD10LGYuX3NlZ21lbnRJbmRleFNoaWZ0PXQuc2VnbWVudHMubGVuZ3RoLHNbTWUoYyldPWZ9fX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtsJiYhbC5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIE9iamVjdChyLmEpKHt9LGkscyl9KHQsbixpLHQuY2hpbGRyZW4pKTtyZXR1cm4gYS5fc291cmNlU2VnbWVudD10LGEuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHtzZWdtZW50R3JvdXA6YSxzbGljZWRTZWdtZW50czpufX12YXIgcz1uZXcgT3QodC5zZWdtZW50cyx0LmNoaWxkcmVuKTtyZXR1cm4gcy5fc291cmNlU2VnbWVudD10LHMuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHtzZWdtZW50R3JvdXA6cyxzbGljZWRTZWdtZW50czpufX1mdW5jdGlvbiBQZSh0LGUsbil7cmV0dXJuKCEodC5oYXNDaGlsZHJlbigpfHxlLmxlbmd0aD4wKXx8ImZ1bGwiIT09bi5wYXRoTWF0Y2gpJiYiIj09PW4ucGF0aCYmdm9pZCAwPT09bi5yZWRpcmVjdFRvfWZ1bmN0aW9uIE1lKHQpe3JldHVybiB0Lm91dGxldHx8YXR9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIHQuZGF0YXx8e319ZnVuY3Rpb24gUmUodCl7cmV0dXJuIHQucmVzb2x2ZXx8e319dmFyIERlPWZ1bmN0aW9uKCl7fSxMZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZERldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4hMX0sdC5wcm90b3R5cGUuc3RvcmU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnNob3VsZEF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4hMX0sdC5wcm90b3R5cGUucmV0cmlldmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLnNob3VsZFJldXNlUm91dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yb3V0ZUNvbmZpZz09PWUucm91dGVDb25maWd9LHR9KCksRmU9bmV3IGkubygiUk9VVEVTIiksVmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMubG9hZGVyPXQsdGhpcy5jb21waWxlcj1lLHRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcj1uLHRoaXMub25Mb2FkRW5kTGlzdGVuZXI9cn1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGUpLHRoaXMubG9hZE1vZHVsZUZhY3RvcnkoZS5sb2FkQ2hpbGRyZW4pLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24ocil7bi5vbkxvYWRFbmRMaXN0ZW5lciYmbi5vbkxvYWRFbmRMaXN0ZW5lcihlKTt2YXIgaT1yLmNyZWF0ZSh0KTtyZXR1cm4gbmV3IGN0KHl0KGkuaW5qZWN0b3IuZ2V0KEZlKSkubWFwKHB0KSxpKX0pKX0sdC5wcm90b3R5cGUubG9hZE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/T2JqZWN0KGEuYSkodGhpcy5sb2FkZXIubG9hZCh0KSk6X3QodCgpKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaS50P09iamVjdChzLmEpKHQpOk9iamVjdChhLmEpKGUuY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpKX0pKX0sdH0oKSxVZT1mdW5jdGlvbigpe30semU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zaG91bGRQcm9jZXNzVXJsPWZ1bmN0aW9uKHQpe3JldHVybiEwfSx0LnByb3RvdHlwZS5leHRyYWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0LGUpe3JldHVybiB0fSx0fSgpO2Z1bmN0aW9uIEJlKHQpe3Rocm93IHR9ZnVuY3Rpb24gSGUodCxlLG4pe3JldHVybiBlLnBhcnNlKCIvIil9ZnVuY3Rpb24gV2UodCl7cmV0dXJuIE9iamVjdChzLmEpKG51bGwpfXZhciBxZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixhLHMsbCxjKXt2YXIgZj10aGlzO3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLnVybFNlcmlhbGl6ZXI9ZSx0aGlzLnJvb3RDb250ZXh0cz1uLHRoaXMubG9jYXRpb249cix0aGlzLmNvbmZpZz1jLHRoaXMubmF2aWdhdGlvbnM9bmV3IG8uYShudWxsKSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuZXZlbnRzPW5ldyB1LmEsdGhpcy5lcnJvckhhbmRsZXI9QmUsdGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXI9SGUsdGhpcy5uYXZpZ2F0ZWQ9ITEsdGhpcy5sYXN0U3VjY2Vzc2Z1bElkPS0xLHRoaXMuaG9va3M9e2JlZm9yZVByZWFjdGl2YXRpb246V2UsYWZ0ZXJQcmVhY3RpdmF0aW9uOldlfSx0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9bmV3IHplLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5PW5ldyBMZSx0aGlzLm9uU2FtZVVybE5hdmlnYXRpb249Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PSJlbXB0eU9ubHkiLHRoaXMubmdNb2R1bGU9YS5nZXQoaS52KSx0aGlzLnJlc2V0Q29uZmlnKGMpLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IHh0KG5ldyBPdChbXSx7fSkse30sbnVsbCksdGhpcy5yYXdVcmxUcmVlPXRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5jb25maWdMb2FkZXI9bmV3IFZlKHMsbCxmdW5jdGlvbih0KXtyZXR1cm4gZi50cmlnZ2VyRXZlbnQobmV3IEoodCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gZi50cmlnZ2VyRXZlbnQobmV3IHR0KHQpKX0pLHRoaXMucm91dGVyU3RhdGU9aWUodGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLnJvb3RDb21wb25lbnRUeXBlKSx0aGlzLnByb2Nlc3NOYXZpZ2F0aW9ucygpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldFJvb3RDb21wb25lbnRUeXBlPWZ1bmN0aW9uKHQpe3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLnJvdXRlclN0YXRlLnJvb3QuY29tcG9uZW50PXRoaXMucm9vdENvbXBvbmVudFR5cGV9LHQucHJvdG90eXBlLmluaXRpYWxOYXZpZ2F0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSwwPT09dGhpcy5uYXZpZ2F0aW9uSWQmJnRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmxvY2F0aW9uLnBhdGgoITApLHtyZXBsYWNlVXJsOiEwfSl9LHQucHJvdG90eXBlLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbnx8KHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249dGhpcy5sb2NhdGlvbi5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dmFyIG49dC5wYXJzZVVybChlLnVybCkscj0icG9wc3RhdGUiPT09ZS50eXBlPyJwb3BzdGF0ZSI6Imhhc2hjaGFuZ2UiLGk9ZS5zdGF0ZSYmZS5zdGF0ZS5uYXZpZ2F0aW9uSWQ/e25hdmlnYXRpb25JZDplLnN0YXRlLm5hdmlnYXRpb25JZH06bnVsbDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zY2hlZHVsZU5hdmlnYXRpb24obixyLGkse3JlcGxhY2VVcmw6ITB9KX0sMCl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidXJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3VycmVudFVybFRyZWUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRyaWdnZXJFdmVudD1mdW5jdGlvbih0KXt0aGlzLmV2ZW50cy5uZXh0KHQpfSx0LnByb3RvdHlwZS5yZXNldENvbmZpZz1mdW5jdGlvbih0KXtmdCh0KSx0aGlzLmNvbmZpZz10Lm1hcChwdCksdGhpcy5uYXZpZ2F0ZWQ9ITEsdGhpcy5sYXN0U3VjY2Vzc2Z1bElkPS0xfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGlzcG9zZSgpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPWUucmVsYXRpdmVUbyxvPWUucXVlcnlQYXJhbXMsYT1lLmZyYWdtZW50LHM9ZS5wcmVzZXJ2ZVF1ZXJ5UGFyYW1zLHU9ZS5xdWVyeVBhcmFtc0hhbmRsaW5nLGw9ZS5wcmVzZXJ2ZUZyYWdtZW50O09iamVjdChpLlcpKCkmJnMmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIGlzIGRlcHJlY2F0ZWQsIHVzZSBxdWVyeVBhcmFtc0hhbmRsaW5nIGluc3RlYWQuIik7dmFyIGM9bnx8dGhpcy5yb3V0ZXJTdGF0ZS5yb290LGY9bD90aGlzLmN1cnJlbnRVcmxUcmVlLmZyYWdtZW50OmEsaD1udWxsO2lmKHUpc3dpdGNoKHUpe2Nhc2UibWVyZ2UiOmg9T2JqZWN0KHIuYSkoe30sdGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtcyxvKTticmVhaztjYXNlInByZXNlcnZlIjpoPXRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXM7YnJlYWs7ZGVmYXVsdDpoPW98fG51bGx9ZWxzZSBoPXM/dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczpvfHxudWxsO3JldHVybiBudWxsIT09aCYmKGg9dGhpcy5yZW1vdmVFbXB0eVByb3BzKGgpKSxmdW5jdGlvbih0LGUsbixpLG8pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gcGUoZS5yb290LGUucm9vdCxlLGksbyk7dmFyIGE9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0WzBdJiYxPT09dC5sZW5ndGgmJiIvIj09PXRbMF0pcmV0dXJuIG5ldyBtZSghMCwwLHQpO3ZhciBlPTAsbj0hMSxpPXQucmVkdWNlKGZ1bmN0aW9uKHQsaSxvKXtpZigib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPWkpe2lmKGkub3V0bGV0cyl7dmFyIGE9e307cmV0dXJuIHZ0KGkub3V0bGV0cyxmdW5jdGlvbih0LGUpe2FbZV09InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoIi8iKTp0fSksT2JqZWN0KHIuZCkodCxbe291dGxldHM6YX1dKX1pZihpLnNlZ21lbnRQYXRoKXJldHVybiBPYmplY3Qoci5kKSh0LFtpLnNlZ21lbnRQYXRoXSl9cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpP09iamVjdChyLmQpKHQsW2ldKTowPT09bz8oaS5zcGxpdCgiLyIpLmZvckVhY2goZnVuY3Rpb24ocixpKXswPT1pJiYiLiI9PT1yfHwoMD09aSYmIiI9PT1yP249ITA6Ii4uIj09PXI/ZSsrOiIiIT1yJiZ0LnB1c2gocikpfSksdCk6T2JqZWN0KHIuZCkodCxbaV0pfSxbXSk7cmV0dXJuIG5ldyBtZShuLGUsaSl9KG4pO2lmKGEudG9Sb290KCkpcmV0dXJuIHBlKGUucm9vdCxuZXcgT3QoW10se30pLGUsaSxvKTt2YXIgcz1mdW5jdGlvbih0LG4scil7aWYodC5pc0Fic29sdXRlKXJldHVybiBuZXcgeWUoZS5yb290LCEwLDApO2lmKC0xPT09ci5zbmFwc2hvdC5fbGFzdFBhdGhJbmRleClyZXR1cm4gbmV3IHllKHIuc25hcHNob3QuX3VybFNlZ21lbnQsITAsMCk7dmFyIGk9ZGUodC5jb21tYW5kc1swXSk/MDoxO3JldHVybiBmdW5jdGlvbihlLG4sbyl7Zm9yKHZhciBhPXIuc25hcHNob3QuX3VybFNlZ21lbnQscz1yLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4K2ksdT10Lm51bWJlck9mRG91YmxlRG90czt1PnM7KXtpZih1LT1zLCEoYT1hLnBhcmVudCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG51bWJlciBvZiAnLi4vJyIpO3M9YS5zZWdtZW50cy5sZW5ndGh9cmV0dXJuIG5ldyB5ZShhLCExLHMtdSl9KCl9KGEsMCx0KSx1PXMucHJvY2Vzc0NoaWxkcmVuP2JlKHMuc2VnbWVudEdyb3VwLHMuaW5kZXgsYS5jb21tYW5kcyk6dmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTtyZXR1cm4gcGUocy5zZWdtZW50R3JvdXAsdSxlLGksbyl9KGMsdGhpcy5jdXJyZW50VXJsVHJlZSx0LGgsZil9LHQucHJvdG90eXBlLm5hdmlnYXRlQnlVcmw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSk7dmFyIG49dCBpbnN0YW5jZW9mIHh0P3Q6dGhpcy5wYXJzZVVybCh0KSxyPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShuLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKHIsImltcGVyYXRpdmUiLG51bGwsZSl9LHQucHJvdG90eXBlLm5hdmlnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZihudWxsPT1uKXRocm93IG5ldyBFcnJvcigiVGhlIHJlcXVlc3RlZCBwYXRoIGNvbnRhaW5zICIrbisiIHNlZ21lbnQgYXQgaW5kZXggIitlKX19KHQpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUodCxlKSxlKX0sdC5wcm90b3R5cGUuc2VyaWFsaXplVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQpfSx0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UodCl9Y2F0Y2gobil7ZT10aGlzLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcihuLHRoaXMudXJsU2VyaWFsaXplcix0KX1yZXR1cm4gZX0sdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCxlKXtpZih0IGluc3RhbmNlb2YgeHQpcmV0dXJuIHd0KHRoaXMuY3VycmVudFVybFRyZWUsdCxlKTt2YXIgbj10aGlzLnBhcnNlVXJsKHQpO3JldHVybiB3dCh0aGlzLmN1cnJlbnRVcmxUcmVlLG4sZSl9LHQucHJvdG90eXBlLnJlbW92ZUVtcHR5UHJvcHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnJlZHVjZShmdW5jdGlvbihlLG4pe3ZhciByPXRbbl07cmV0dXJuIG51bGwhPT1yJiZ2b2lkIDAhPT1yJiYoZVtuXT1yKSxlfSx7fSl9LHQucHJvdG90eXBlLnByb2Nlc3NOYXZpZ2F0aW9ucz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5uYXZpZ2F0aW9ucy5waXBlKE9iamVjdChDLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBlPyh0LmV4ZWN1dGVTY2hlZHVsZWROYXZpZ2F0aW9uKGUpLGUucHJvbWlzZS5jYXRjaChmdW5jdGlvbigpe30pKTpPYmplY3Qocy5hKShudWxsKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt9KX0sdC5wcm90b3R5cGUuc2NoZWR1bGVOYXZpZ2F0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMubmF2aWdhdGlvbnMudmFsdWU7aWYoaSYmImltcGVyYXRpdmUiIT09ZSYmImltcGVyYXRpdmUiPT09aS5zb3VyY2UmJmkucmF3VXJsLnRvU3RyaW5nKCk9PT10LnRvU3RyaW5nKCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCk7aWYoaSYmImhhc2hjaGFuZ2UiPT1lJiYicG9wc3RhdGUiPT09aS5zb3VyY2UmJmkucmF3VXJsLnRvU3RyaW5nKCk9PT10LnRvU3RyaW5nKCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCk7aWYoaSYmInBvcHN0YXRlIj09ZSYmImhhc2hjaGFuZ2UiPT09aS5zb3VyY2UmJmkucmF3VXJsLnRvU3RyaW5nKCk9PT10LnRvU3RyaW5nKCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCk7dmFyIG89bnVsbCxhPW51bGwscz1uZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe289dCxhPWV9KSx1PSsrdGhpcy5uYXZpZ2F0aW9uSWQ7cmV0dXJuIHRoaXMubmF2aWdhdGlvbnMubmV4dCh7aWQ6dSxzb3VyY2U6ZSxzdGF0ZTpuLHJhd1VybDp0LGV4dHJhczpyLHJlc29sdmU6byxyZWplY3Q6YSxwcm9taXNlOnN9KSxzLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlamVjdCh0KX0pfSx0LnByb3RvdHlwZS5leGVjdXRlU2NoZWR1bGVkTmF2aWdhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5pZCxyPXQucmF3VXJsLGk9dC5leHRyYXMsbz10LnJlc29sdmUsYT10LnJlamVjdCxzPXQuc291cmNlLHU9dC5zdGF0ZSxsPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KHIpLGM9IXRoaXMubmF2aWdhdGVkfHxsLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRVcmxUcmVlLnRvU3RyaW5nKCk7KCJyZWxvYWQiPT09dGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9ufHxjKSYmdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwocik/KHRoaXMuZXZlbnRzLm5leHQobmV3IFcobix0aGlzLnNlcmlhbGl6ZVVybChsKSxzLHUpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJ1bk5hdmlnYXRlKGwsciwhIWkuc2tpcExvY2F0aW9uQ2hhbmdlLCEhaS5yZXBsYWNlVXJsLG4sbnVsbCl9KS50aGVuKG8sYSkpOmMmJnRoaXMucmF3VXJsVHJlZSYmdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwodGhpcy5yYXdVcmxUcmVlKT8odGhpcy5ldmVudHMubmV4dChuZXcgVyhuLHRoaXMuc2VyaWFsaXplVXJsKGwpLHMsdSkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUobCxyLCExLCExLG4saWUobCxlLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdCl9KS50aGVuKG8sYSkpOih0aGlzLnJhd1VybFRyZWU9cixvKG51bGwpKX0sdC5wcm90b3R5cGUucnVuTmF2aWdhdGU9ZnVuY3Rpb24odCxlLG4saSxhLHUpe3ZhciBsPXRoaXM7cmV0dXJuIGEhPT10aGlzLm5hdmlnYXRpb25JZD8odGhpcy5ldmVudHMubmV4dChuZXcgWShhLHRoaXMuc2VyaWFsaXplVXJsKHQpLCJOYXZpZ2F0aW9uIElEICIrYSsiIGlzIG5vdCBlcXVhbCB0byB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGlkICIrdGhpcy5uYXZpZ2F0aW9uSWQpKSxQcm9taXNlLnJlc29sdmUoITEpKTpuZXcgUHJvbWlzZShmdW5jdGlvbihjLGYpe3ZhciBoLGQ9KHU/T2JqZWN0KHMuYSkoe2FwcGxpZWRVcmw6dCxzbmFwc2hvdDp1fSk6bmV3IEd0KGwubmdNb2R1bGUuaW5qZWN0b3IsbC5jb25maWdMb2FkZXIsbC51cmxTZXJpYWxpemVyLHQsbC5jb25maWcpLmFwcGx5KCkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9ImVtcHR5T25seSIpLG5ldyBUZSh0LGUsbixyLGkpLnJlY29nbml6ZSgpfShsLnJvb3RDb21wb25lbnRUeXBlLGwuY29uZmlnLGUsbC5zZXJpYWxpemVVcmwoZSksbC5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKG4pe3JldHVybiBsLmV2ZW50cy5uZXh0KG5ldyBRKGEsbC5zZXJpYWxpemVVcmwodCksbC5zZXJpYWxpemVVcmwoZSksbikpLHthcHBsaWVkVXJsOmUsc25hcHNob3Q6bn19KSl9KSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdD9PYmplY3Qocy5hKSh0KTpsLmhvb2tzLmJlZm9yZVByZWFjdGl2YXRpb24odC5zbmFwc2hvdCkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbigpe3JldHVybiB0fSkpfSkpLnBpcGUoT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LmFwcGxpZWRVcmwsbj10LnNuYXBzaG90O3JldHVybihoPW5ldyBFZShuLGwucm91dGVyU3RhdGUuc25hcHNob3QsbC5uZ01vZHVsZS5pbmplY3RvcixmdW5jdGlvbih0KXtyZXR1cm4gbC50cmlnZ2VyRXZlbnQodCl9KSkuaW5pdGlhbGl6ZShsLnJvb3RDb250ZXh0cykse2FwcGxpZWRVcmw6ZSxzbmFwc2hvdDpufX0pKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGUpe2lmKCJib29sZWFuIj09dHlwZW9mIGV8fGwubmF2aWdhdGlvbklkIT09YSlyZXR1cm4gT2JqZWN0KHMuYSkoITEpO3ZhciBuPWUuYXBwbGllZFVybCxyPWUuc25hcHNob3Q7cmV0dXJuIGwudHJpZ2dlckV2ZW50KG5ldyBLKGEsbC5zZXJpYWxpemVVcmwodCksbC5zZXJpYWxpemVVcmwobikscikpLGguY2hlY2tHdWFyZHMoKS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBsLnRyaWdnZXJFdmVudChuZXcgWihhLGwuc2VyaWFsaXplVXJsKHQpLGwuc2VyaWFsaXplVXJsKG4pLHIsZSkpLHthcHBsaWVkVXJsOm4sc25hcHNob3Q6cixzaG91bGRBY3RpdmF0ZTplfX0pKX0pKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV8fGwubmF2aWdhdGlvbklkIT09YT9PYmplY3Qocy5hKSghMSk6ZS5zaG91bGRBY3RpdmF0ZSYmaC5pc0FjdGl2YXRpbmcoKT8obC50cmlnZ2VyRXZlbnQobmV3IFgoYSxsLnNlcmlhbGl6ZVVybCh0KSxsLnNlcmlhbGl6ZVVybChlLmFwcGxpZWRVcmwpLGUuc25hcHNob3QpKSxoLnJlc29sdmVEYXRhKGwucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbigpe3JldHVybiBsLnRyaWdnZXJFdmVudChuZXcgJChhLGwuc2VyaWFsaXplVXJsKHQpLGwuc2VyaWFsaXplVXJsKGUuYXBwbGllZFVybCksZS5zbmFwc2hvdCkpLGV9KSkpOk9iamVjdChzLmEpKGUpfSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdHx8bC5uYXZpZ2F0aW9uSWQhPT1hP09iamVjdChzLmEpKCExKTpsLmhvb2tzLmFmdGVyUHJlYWN0aXZhdGlvbih0LnNuYXBzaG90KS5waXBlKE9iamVjdChPLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSkucGlwZShPYmplY3QoTy5hKShmdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PXR5cGVvZiB0fHxsLm5hdmlnYXRpb25JZCE9PWEpcmV0dXJuITE7dmFyIGUsbixpLHM9dC5hcHBsaWVkVXJsLHU9dC5zaG91bGRBY3RpdmF0ZTtyZXR1cm4gdT97YXBwbGllZFVybDpzLHN0YXRlOihpPWZ1bmN0aW9uIHQoZSxuLGkpe2lmKGkmJmUuc2hvdWxkUmV1c2VSb3V0ZShuLnZhbHVlLGkudmFsdWUuc25hcHNob3QpKXsoYz1pLnZhbHVlKS5fZnV0dXJlU25hcHNob3Q9bi52YWx1ZTt2YXIgYT1mdW5jdGlvbihlLG4saSl7cmV0dXJuIG4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG4pe3RyeXtmb3IodmFyIG89T2JqZWN0KHIuZSkoaS5jaGlsZHJlbiksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPWEudmFsdWU7aWYoZS5zaG91bGRSZXVzZVJvdXRlKHMudmFsdWUuc25hcHNob3Qsbi52YWx1ZSkpcmV0dXJuIHQoZSxuLHMpfX1jYXRjaCh0KXt1PXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobD1vLnJldHVybikmJmwuY2FsbChvKX1maW5hbGx5e2lmKHUpdGhyb3cgdS5lcnJvcn19cmV0dXJuIHQoZSxuKTt2YXIgdSxsfSl9KGUsbixpKTtyZXR1cm4gbmV3IGVlKGMsYSl9dmFyIHM9ZS5yZXRyaWV2ZShuLnZhbHVlKTtpZihzKXt2YXIgdT1zLnJvdXRlO3JldHVybiBmdW5jdGlvbiB0KGUsbil7aWYoZS52YWx1ZS5yb3V0ZUNvbmZpZyE9PW4udmFsdWUucm91dGVDb25maWcpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhdHRhY2ggQWN0aXZhdGVkUm91dGVTbmFwc2hvdCBjcmVhdGVkIGZyb20gYSBkaWZmZXJlbnQgcm91dGUiKTtpZihlLmNoaWxkcmVuLmxlbmd0aCE9PW4uY2hpbGRyZW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYXR0YWNoIEFjdGl2YXRlZFJvdXRlU25hcHNob3Qgd2l0aCBhIGRpZmZlcmVudCBudW1iZXIgb2YgY2hpbGRyZW4iKTtuLnZhbHVlLl9mdXR1cmVTbmFwc2hvdD1lLnZhbHVlO2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7KytyKXQoZS5jaGlsZHJlbltyXSxuLmNoaWxkcmVuW3JdKX0obix1KSx1fXZhciBsLGM9bmV3IG9lKG5ldyBvLmEoKGw9bi52YWx1ZSkudXJsKSxuZXcgby5hKGwucGFyYW1zKSxuZXcgby5hKGwucXVlcnlQYXJhbXMpLG5ldyBvLmEobC5mcmFnbWVudCksbmV3IG8uYShsLmRhdGEpLGwub3V0bGV0LGwuY29tcG9uZW50LGwpO3JldHVybiBhPW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9KSxuZXcgZWUoYyxhKX0obC5yb3V0ZVJldXNlU3RyYXRlZ3ksKGU9dC5zbmFwc2hvdCkuX3Jvb3QsKG49bC5yb3V0ZXJTdGF0ZSk/bi5fcm9vdDp2b2lkIDApLG5ldyByZShpLGUpKSxzaG91bGRBY3RpdmF0ZTp1fTp7YXBwbGllZFVybDpzLHN0YXRlOm51bGwsc2hvdWxkQWN0aXZhdGU6dX19KSk7bC5hY3RpdmF0ZVJvdXRlcyhkLGwucm91dGVyU3RhdGUsbC5jdXJyZW50VXJsVHJlZSxhLHQsZSxuLGksYyxmKX0pfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxsKXt2YXIgYyxmPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIiE9dHlwZW9mIHQmJnQuc2hvdWxkQWN0aXZhdGUmJnI9PT1mLm5hdmlnYXRpb25JZCYmdC5zdGF0ZSl7dmFyIG49dC5zdGF0ZTtpZihmLmN1cnJlbnRVcmxUcmVlPXQuYXBwbGllZFVybCxmLnJhd1VybFRyZWU9Zi51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGYuY3VycmVudFVybFRyZWUsbyksZi5yb3V0ZXJTdGF0ZT1uLCFhKXt2YXIgaT1mLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGYucmF3VXJsVHJlZSk7Zi5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhpKXx8cz9mLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShpLCIiLHtuYXZpZ2F0aW9uSWQ6cn0pOmYubG9jYXRpb24uZ28oaSwiIix7bmF2aWdhdGlvbklkOnJ9KX1uZXcgWWUoZi5yb3V0ZVJldXNlU3RyYXRlZ3ksbixlLGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudCh0KX0pLmFjdGl2YXRlKGYucm9vdENvbnRleHRzKSxjPSEwfWVsc2UgYz0hMX0pLnRoZW4oZnVuY3Rpb24oKXtjPyhmLm5hdmlnYXRlZD0hMCxmLmxhc3RTdWNjZXNzZnVsSWQ9cixmLmV2ZW50cy5uZXh0KG5ldyBxKHIsZi5zZXJpYWxpemVVcmwoaSksZi5zZXJpYWxpemVVcmwoZi5jdXJyZW50VXJsVHJlZSkpKSx1KCEwKSk6KGYucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCksZi5ldmVudHMubmV4dChuZXcgWShyLGYuc2VyaWFsaXplVXJsKGkpLCIiKSksdSghMSkpfSxmdW5jdGlvbih0KXtpZigoYT10KSYmYS5uZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcilmLm5hdmlnYXRlZD0hMCxmLnJlc2V0U3RhdGVBbmRVcmwoZSxuLG8pLGYuZXZlbnRzLm5leHQobmV3IFkocixmLnNlcmlhbGl6ZVVybChpKSx0Lm1lc3NhZ2UpKSx1KCExKTtlbHNle2YucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksZi5ldmVudHMubmV4dChuZXcgRyhyLGYuc2VyaWFsaXplVXJsKGkpLHQpKTt0cnl7dShmLmVycm9ySGFuZGxlcih0KSl9Y2F0Y2godCl7bCh0KX19dmFyIGF9KX0sdC5wcm90b3R5cGUucmVzZXRTdGF0ZUFuZFVybD1mdW5jdGlvbih0LGUsbil7dGhpcy5yb3V0ZXJTdGF0ZT10LHRoaXMuY3VycmVudFVybFRyZWU9ZSx0aGlzLnJhd1VybFRyZWU9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKHRoaXMuY3VycmVudFVybFRyZWUsbiksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKX0sdC5wcm90b3R5cGUucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlPWZ1bmN0aW9uKCl7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLnJhd1VybFRyZWUpLCIiLHtuYXZpZ2F0aW9uSWQ6dGhpcy5sYXN0U3VjY2Vzc2Z1bElkfSl9LHR9KCksWWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5PXQsdGhpcy5mdXR1cmVTdGF0ZT1lLHRoaXMuY3VyclN0YXRlPW4sdGhpcy5mb3J3YXJkRXZlbnQ9cn1yZXR1cm4gdC5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mdXR1cmVTdGF0ZS5fcm9vdCxuPXRoaXMuY3VyclN0YXRlP3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpLGZlKHRoaXMuZnV0dXJlU3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9bmUoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUub3V0bGV0O3IuZGVhY3RpdmF0ZVJvdXRlcyh0LGlbZV0sbiksZGVsZXRlIGlbZV19KSx2dChpLGZ1bmN0aW9uKHQsZSl7ci5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4pfSl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQudmFsdWUsaT1lP2UudmFsdWU6bnVsbDtpZihyPT09aSlpZihyLmNvbXBvbmVudCl7dmFyIG89bi5nZXRDb250ZXh0KHIub3V0bGV0KTtvJiZ0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSBpJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGUsbil9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKHQudmFsdWUuc25hcHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUodCxlKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldCh0LGUpfSx0LnByb3RvdHlwZS5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYobiYmbi5vdXRsZXQpe3ZhciByPW4ub3V0bGV0LmRldGFjaCgpLGk9bi5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUodC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOnIscm91dGU6dCxjb250ZXh0czppfSl9fSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTtpZihyKXt2YXIgaT1uZSh0KSxvPXQudmFsdWUuY29tcG9uZW50P3IuY2hpbGRyZW46ZTt2dChpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxvKX0pLHIub3V0bGV0JiYoci5vdXRsZXQuZGVhY3RpdmF0ZSgpLHIuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpKX19LHQucHJvdG90eXBlLmFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7ci5hY3RpdmF0ZVJvdXRlcyh0LGlbdC52YWx1ZS5vdXRsZXRdLG4pLHIuZm9yd2FyZEV2ZW50KG5ldyBpdCh0LnZhbHVlLnNuYXBzaG90KSl9KSx0LmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IG50KHQudmFsdWUuc25hcHNob3QpKX0sdC5wcm90b3R5cGUuYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQudmFsdWUsaT1lP2UudmFsdWU6bnVsbDtpZihmZShyKSxyPT09aSlpZihyLmNvbXBvbmVudCl7dmFyIG89bi5nZXRPckNyZWF0ZUNvbnRleHQoci5vdXRsZXQpO3RoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgaWYoci5jb21wb25lbnQpaWYobz1uLmdldE9yQ3JlYXRlQ29udGV4dChyLm91dGxldCksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKHIuc25hcHNob3QpKXt2YXIgYT10aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5yZXRyaWV2ZShyLnNuYXBzaG90KTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZShyLnNuYXBzaG90LG51bGwpLG8uY2hpbGRyZW4ub25PdXRsZXRSZUF0dGFjaGVkKGEuY29udGV4dHMpLG8uYXR0YWNoUmVmPWEuY29tcG9uZW50UmVmLG8ucm91dGU9YS5yb3V0ZS52YWx1ZSxvLm91dGxldCYmby5vdXRsZXQuYXR0YWNoKGEuY29tcG9uZW50UmVmLGEucm91dGUudmFsdWUpLEdlKGEucm91dGUpfWVsc2V7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXIuc25hcHNob3QucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZztpZihuJiZuLmNvbXBvbmVudClyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0oKSx1PXM/cy5tb2R1bGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOm51bGw7by5yb3V0ZT1yLG8ucmVzb2x2ZXI9dSxvLm91dGxldCYmby5vdXRsZXQuYWN0aXZhdGVXaXRoKHIsdSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LG51bGwsbil9LHR9KCk7ZnVuY3Rpb24gR2UodCl7ZmUodC52YWx1ZSksdC5jaGlsZHJlbi5mb3JFYWNoKEdlKX12YXIgUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMucm91dGVyPXQsdGhpcy5yb3V0ZT1lLHRoaXMubG9jYXRpb25TdHJhdGVneT1uLHRoaXMuY29tbWFuZHM9W10sdGhpcy5zdWJzY3JpcHRpb249dC5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3QgaW5zdGFuY2VvZiBxJiZyLnVwZGF0ZVRhcmdldFVybEFuZEhyZWYoKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvdXRlckxpbmsiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jb21tYW5kcz1udWxsIT10P0FycmF5LmlzQXJyYXkodCk/dDpbdF06W119LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIix7c2V0OmZ1bmN0aW9uKHQpe09iamVjdChpLlcpKCkmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIGlzIGRlcHJlY2F0ZWQsIHVzZSBxdWVyeVBhcmFtc0hhbmRsaW5nIGluc3RlYWQuIiksdGhpcy5wcmVzZXJ2ZT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24odCxlLG4scil7aWYoMCE9PXR8fGV8fG58fHIpcmV0dXJuITA7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdldCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpcmV0dXJuITA7dmFyIGk9e3NraXBMb2NhdGlvbkNoYW5nZTpLZSh0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSkscmVwbGFjZVVybDpLZSh0aGlzLnJlcGxhY2VVcmwpfTtyZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUsaSksITF9LHQucHJvdG90eXBlLnVwZGF0ZVRhcmdldFVybEFuZEhyZWY9ZnVuY3Rpb24oKXt0aGlzLmhyZWY9dGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodGhpcy51cmxUcmVlKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidXJsVHJlZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscHJlc2VydmVRdWVyeVBhcmFtczpLZSh0aGlzLnByZXNlcnZlKSxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OktlKHRoaXMucHJlc2VydmVGcmFnbWVudCl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIEtlKHQpe3JldHVybiIiPT09dHx8ISF0fXZhciBaZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3RoaXMub3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMucmVzb2x2ZXI9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBYZSx0aGlzLmF0dGFjaFJlZj1udWxsfX0oKSxYZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXRDcmVhdGVkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQodCk7bi5vdXRsZXQ9ZSx0aGlzLmNvbnRleHRzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5vbkNoaWxkT3V0bGV0RGVzdHJveWVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q29udGV4dCh0KTtlJiYoZS5vdXRsZXQ9bnVsbCl9LHQucHJvdG90eXBlLm9uT3V0bGV0RGVhY3RpdmF0ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHRzO3JldHVybiB0aGlzLmNvbnRleHRzPW5ldyBNYXAsdH0sdC5wcm90b3R5cGUub25PdXRsZXRSZUF0dGFjaGVkPWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dHM9dH0sdC5wcm90b3R5cGUuZ2V0T3JDcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q29udGV4dCh0KTtyZXR1cm4gZXx8KGU9bmV3IFplLHRoaXMuY29udGV4dHMuc2V0KHQsZSkpLGV9LHQucHJvdG90eXBlLmdldENvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KHQpfHxudWxsfSx0fSgpLCRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8pe3RoaXMucGFyZW50Q29udGV4dHM9dCx0aGlzLmxvY2F0aW9uPWUsdGhpcy5yZXNvbHZlcj1uLHRoaXMuY2hhbmdlRGV0ZWN0b3I9byx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5hY3RpdmF0ZUV2ZW50cz1uZXcgaS5tLHRoaXMuZGVhY3RpdmF0ZUV2ZW50cz1uZXcgaS5tLHRoaXMubmFtZT1yfHxhdCx0Lm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKX0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dCh0aGlzLm5hbWUpO3QmJnQucm91dGUmJih0LmF0dGFjaFJlZj90aGlzLmF0dGFjaCh0LmF0dGFjaFJlZix0LnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aCh0LnJvdXRlLHQucmVzb2x2ZXJ8fG51bGwpKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBY3RpdmF0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2V9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZSIse2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkUm91dGVEYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTt0aGlzLmxvY2F0aW9uLmRldGFjaCgpO3ZhciB0PXRoaXMuYWN0aXZhdGVkO3JldHVybiB0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdH0sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQsZSl7dGhpcy5hY3RpdmF0ZWQ9dCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1lLHRoaXMubG9jYXRpb24uaW5zZXJ0KHQuaG9zdFZpZXcpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZWFjdGl2YXRlRXZlbnRzLmVtaXQodCl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZVdpdGg9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzQWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjdGl2YXRlIGFuIGFscmVhZHkgYWN0aXZhdGVkIG91dGxldCIpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPXQ7dmFyIG49KGU9ZXx8dGhpcy5yZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWcuY29tcG9uZW50KSxyPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4saT1uZXcgSmUodCxyLHRoaXMubG9jYXRpb24uaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPXRoaXMubG9jYXRpb24uY3JlYXRlQ29tcG9uZW50KG4sdGhpcy5sb2NhdGlvbi5sZW5ndGgsaSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfSx0fSgpLEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5yb3V0ZT10LHRoaXMuY2hpbGRDb250ZXh0cz1lLHRoaXMucGFyZW50PW59cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09b2U/dGhpcy5yb3V0ZTp0PT09WGU/dGhpcy5jaGlsZENvbnRleHRzOnRoaXMucGFyZW50LmdldCh0LGUpfSx0fSgpLHRuPWZ1bmN0aW9uKCl7fSxlbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSgpLnBpcGUoT2JqZWN0KE4uYSkoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9KSl9LHR9KCksbm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdChzLmEpKG51bGwpfSx0fSgpLHJuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMucm91dGVyPXQsdGhpcy5pbmplY3Rvcj1yLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWksdGhpcy5sb2FkZXI9bmV3IFZlKGUsbixmdW5jdGlvbihlKXtyZXR1cm4gdC50cmlnZ2VyRXZlbnQobmV3IEooZSkpfSxmdW5jdGlvbihlKXtyZXR1cm4gdC50cmlnZ2VyRXZlbnQobmV3IHR0KGUpKX0pfXJldHVybiB0LnByb3RvdHlwZS5zZXRVcFByZWxvYWRpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgcX0pLE9iamVjdChDLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJlbG9hZCgpfSkpLnN1YnNjcmliZShmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5pbmplY3Rvci5nZXQoaS52KTtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHQsdGhpcy5yb3V0ZXIuY29uZmlnKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5wcm9jZXNzUm91dGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvPVtdO3RyeXtmb3IodmFyIHM9T2JqZWN0KHIuZSkoZSksdT1zLm5leHQoKTshdS5kb25lO3U9cy5uZXh0KCkpe3ZhciBsPXUudmFsdWU7aWYobC5sb2FkQ2hpbGRyZW4mJiFsLmNhbkxvYWQmJmwuX2xvYWRlZENvbmZpZyl7dmFyIGM9bC5fbG9hZGVkQ29uZmlnO28ucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXMoYy5tb2R1bGUsYy5yb3V0ZXMpKX1lbHNlIGwubG9hZENoaWxkcmVuJiYhbC5jYW5Mb2FkP28ucHVzaCh0aGlzLnByZWxvYWRDb25maWcodCxsKSk6bC5jaGlsZHJlbiYmby5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyh0LGwuY2hpbGRyZW4pKX19Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKGk9cy5yZXR1cm4pJiZpLmNhbGwocyl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBPYmplY3QoYS5hKShvKS5waXBlKE9iamVjdChELmEpKCksT2JqZWN0KE8uYSkoZnVuY3Rpb24odCl7fSkpfSx0LnByb3RvdHlwZS5wcmVsb2FkQ29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChlLGZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZGVyLmxvYWQodC5pbmplY3RvcixlKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sb2FkZWRDb25maWc9dCxuLnByb2Nlc3NSb3V0ZXModC5tb2R1bGUsdC5yb3V0ZXMpfSkpfSl9LHR9KCksb249bmV3IGkubygiUk9VVEVSX0NPTkZJR1VSQVRJT04iKSxhbj1uZXcgaS5vKCJST1VURVJfRk9SUk9PVF9HVUFSRCIpLHNuPVt6Lmcse3Byb3ZpZGU6a3QsdXNlQ2xhc3M6VHR9LHtwcm92aWRlOnFlLHVzZUZhY3Rvcnk6ZG4sZGVwczpbaS5nLGt0LFhlLHouZyxpLnAsaS51LGkuaSxGZSxvbixbVWUsbmV3IGkueV0sW0RlLG5ldyBpLnldXX0sWGUse3Byb3ZpZGU6b2UsdXNlRmFjdG9yeTpwbixkZXBzOltxZV19LHtwcm92aWRlOmkudSx1c2VDbGFzczppLkl9LHJuLG5uLGVuLHtwcm92aWRlOm9uLHVzZVZhbHVlOntlbmFibGVUcmFjaW5nOiExfX1dO2Z1bmN0aW9uIHVuKCl7cmV0dXJuIG5ldyBpLncoIlJvdXRlciIscWUpfXZhciBsbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt9cmV0dXJuIHQuZm9yUm9vdD1mdW5jdGlvbihlLG4pe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbc24saG4oZSkse3Byb3ZpZGU6YW4sdXNlRmFjdG9yeTpmbixkZXBzOltbcWUsbmV3IGkueSxuZXcgaS5IXV19LHtwcm92aWRlOm9uLHVzZVZhbHVlOm58fHt9fSx7cHJvdmlkZTp6LmgsdXNlRmFjdG9yeTpjbixkZXBzOlt6LnAsW25ldyBpLm4oei5hKSxuZXcgaS55XSxvbl19LHtwcm92aWRlOnRuLHVzZUV4aXN0aW5nOm4mJm4ucHJlbG9hZGluZ1N0cmF0ZWd5P24ucHJlbG9hZGluZ1N0cmF0ZWd5Om5ufSx7cHJvdmlkZTppLncsbXVsdGk6ITAsdXNlRmFjdG9yeTp1bn0sW21uLHtwcm92aWRlOmkuZCxtdWx0aTohMCx1c2VGYWN0b3J5OnluLGRlcHM6W21uXX0se3Byb3ZpZGU6dm4sdXNlRmFjdG9yeTpnbixkZXBzOlttbl19LHtwcm92aWRlOmkuYixtdWx0aTohMCx1c2VFeGlzdGluZzp2bn1dXX19LHQuZm9yQ2hpbGQ9ZnVuY3Rpb24oZSl7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOltobihlKV19fSx0fSgpO2Z1bmN0aW9uIGNuKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLG4udXNlSGFzaD9uZXcgei5lKHQsZSk6bmV3IHoubyh0LGUpfWZ1bmN0aW9uIGZuKHQpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJSb3V0ZXJNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gTGF6eSBsb2FkZWQgbW9kdWxlcyBzaG91bGQgdXNlIFJvdXRlck1vZHVsZS5mb3JDaGlsZCgpIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIGhuKHQpe3JldHVyblt7cHJvdmlkZTppLmEsbXVsdGk6ITAsdXNlVmFsdWU6dH0se3Byb3ZpZGU6RmUsbXVsdGk6ITAsdXNlVmFsdWU6dH1dfWZ1bmN0aW9uIGRuKHQsZSxuLHIsaSxvLGEscyx1LGwsYyl7dm9pZCAwPT09dSYmKHU9e30pO3ZhciBmPW5ldyBxZShudWxsLGUsbixyLGksbyxhLHl0KHMpKTtpZihsJiYoZi51cmxIYW5kbGluZ1N0cmF0ZWd5PWwpLGMmJihmLnJvdXRlUmV1c2VTdHJhdGVneT1jKSx1LmVycm9ySGFuZGxlciYmKGYuZXJyb3JIYW5kbGVyPXUuZXJyb3JIYW5kbGVyKSx1Lm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlciYmKGYubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPXUubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKSx1LmVuYWJsZVRyYWNpbmcpe3ZhciBoPU9iamVjdChCLnQpKCk7Zi5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2gubG9nR3JvdXAoIlJvdXRlciBFdmVudDogIit0LmNvbnN0cnVjdG9yLm5hbWUpLGgubG9nKHQudG9TdHJpbmcoKSksaC5sb2codCksaC5sb2dHcm91cEVuZCgpfSl9cmV0dXJuIHUub25TYW1lVXJsTmF2aWdhdGlvbiYmKGYub25TYW1lVXJsTmF2aWdhdGlvbj11Lm9uU2FtZVVybE5hdmlnYXRpb24pLHUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSYmKGYucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT11LnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLGZ9ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHQucm91dGVyU3RhdGUucm9vdH12YXIgbW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuaW5qZWN0b3I9dCx0aGlzLmluaXROYXZpZ2F0aW9uPSExLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZT1uZXcgdS5hfXJldHVybiB0LnByb3RvdHlwZS5hcHBJbml0aWFsaXplcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KHouZixQcm9taXNlLnJlc29sdmUobnVsbCkpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1udWxsLG49bmV3IFByb21pc2UoZnVuY3Rpb24odCl7cmV0dXJuIGU9dH0pLHI9dC5pbmplY3Rvci5nZXQocWUpLGk9dC5pbmplY3Rvci5nZXQob24pO2lmKHQuaXNMZWdhY3lEaXNhYmxlZChpKXx8dC5pc0xlZ2FjeUVuYWJsZWQoaSkpZSghMCk7ZWxzZSBpZigiZGlzYWJsZWQiPT09aS5pbml0aWFsTmF2aWdhdGlvbilyLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLGUoITApO2Vsc2V7aWYoImVuYWJsZWQiIT09aS5pbml0aWFsTmF2aWdhdGlvbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5pdGlhbE5hdmlnYXRpb24gb3B0aW9uczogJyIraS5pbml0aWFsTmF2aWdhdGlvbisiJyIpO3IuaG9va3MuYWZ0ZXJQcmVhY3RpdmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuaW5pdE5hdmlnYXRpb24/T2JqZWN0KHMuYSkobnVsbCk6KHQuaW5pdE5hdmlnYXRpb249ITAsZSghMCksdC5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lKX0sci5pbml0aWFsTmF2aWdhdGlvbigpfXJldHVybiBufSl9LHQucHJvdG90eXBlLmJvb3RzdHJhcExpc3RlbmVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5qZWN0b3IuZ2V0KG9uKSxuPXRoaXMuaW5qZWN0b3IuZ2V0KHJuKSxyPXRoaXMuaW5qZWN0b3IuZ2V0KHFlKSxvPXRoaXMuaW5qZWN0b3IuZ2V0KGkuZyk7dD09PW8uY29tcG9uZW50c1swXSYmKHRoaXMuaXNMZWdhY3lFbmFibGVkKGUpP3IuaW5pdGlhbE5hdmlnYXRpb24oKTp0aGlzLmlzTGVnYWN5RGlzYWJsZWQoZSkmJnIuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksbi5zZXRVcFByZWxvYWRpbmcoKSxyLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoby5jb21wb25lbnRUeXBlc1swXSksdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lLm5leHQobnVsbCksdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lLmNvbXBsZXRlKCkpfSx0LnByb3RvdHlwZS5pc0xlZ2FjeUVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuImxlZ2FjeV9lbmFibGVkIj09PXQuaW5pdGlhbE5hdmlnYXRpb258fCEwPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8dm9pZCAwPT09dC5pbml0aWFsTmF2aWdhdGlvbn0sdC5wcm90b3R5cGUuaXNMZWdhY3lEaXNhYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4ibGVnYWN5X2Rpc2FibGVkIj09PXQuaW5pdGlhbE5hdmlnYXRpb258fCExPT09dC5pbml0aWFsTmF2aWdhdGlvbn0sdH0oKTtmdW5jdGlvbiB5bih0KXtyZXR1cm4gdC5hcHBJbml0aWFsaXplci5iaW5kKHQpfWZ1bmN0aW9uIGduKHQpe3JldHVybiB0LmJvb3RzdHJhcExpc3RlbmVyLmJpbmQodCl9dmFyIHZuPW5ldyBpLm8oIlJvdXRlciBJbml0aWFsaXplciIpfSxaWWp0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYnR9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gSX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIG50fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHJ0fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gVX0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiB0dH0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBpdH0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBzdH0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBNfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJJcDBSIiksbz1uKCJDY25HIiksYT1udWxsO2Z1bmN0aW9uIHMoKXtyZXR1cm4gYX12YXIgdSxsPXtjbGFzczoiY2xhc3NOYW1lIixpbm5lckh0bWw6ImlubmVySFRNTCIscmVhZG9ubHk6InJlYWRPbmx5Iix0YWJpbmRleDoidGFiSW5kZXgifSxjPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxmPXtBOiIxIixCOiIyIixDOiIzIixEOiI0IixFOiI1IixGOiI2IixHOiI3IixIOiI4IixJOiI5IixKOiIqIixLOiIrIixNOiItIixOOiIuIixPOiIvIiwiYCI6IjAiLCJceDkwIjoiTnVtTG9jayJ9O28uUGEuTm9kZSYmKHU9by5QYS5Ob2RlLnByb3RvdHlwZS5jb250YWluc3x8ZnVuY3Rpb24odCl7cmV0dXJuISEoMTYmdGhpcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSl9KTt2YXIgaCxkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicGFyc2Ugbm90IGltcGxlbWVudGVkIil9LGUubWFrZUN1cnJlbnQ9ZnVuY3Rpb24oKXt2YXIgdDt0PW5ldyBlLGF8fChhPXQpfSxlLnByb3RvdHlwZS5oYXNQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHR9LGUucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt0W2VdPW59LGUucHJvdG90eXBlLmdldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV19LGUucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbih0LGUsbil7dmFyIGk7KGk9dClbZV0uYXBwbHkoaSxPYmplY3Qoci5kKShuKSl9LGUucHJvdG90eXBlLmxvZ0Vycm9yPWZ1bmN0aW9uKHQpe3dpbmRvdy5jb25zb2xlJiYoY29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yKHQpOmNvbnNvbGUubG9nKHQpKX0sZS5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKHQpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cmJndpbmRvdy5jb25zb2xlLmxvZyh0KX0sZS5wcm90b3R5cGUubG9nR3JvdXA9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmdyb3VwJiZ3aW5kb3cuY29uc29sZS5ncm91cCh0KX0sZS5wcm90b3R5cGUubG9nR3JvdXBFbmQ9ZnVuY3Rpb24oKXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXBFbmQmJndpbmRvdy5jb25zb2xlLmdyb3VwRW5kKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYXR0clRvUHJvcE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiBsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUuY2FsbCh0LGUpfSxlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucXVlcnlTZWxlY3RvcihlKX0sZS5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbih0LGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9LGUucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxuKXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKX0sZS5wcm90b3R5cGUub25BbmRDYW5jZWw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCExKSxmdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4sITEpfX0sZS5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudD1mdW5jdGlvbih0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX0sZS5wcm90b3R5cGUuY3JlYXRlTW91c2VFdmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KHQsITAsITApLGV9LGUucHJvdG90eXBlLmNyZWF0ZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KHQsITAsITApLGV9LGUucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnJldHVyblZhbHVlPSExfSxlLnByb3RvdHlwZS5pc1ByZXZlbnRlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0UHJldmVudGVkfHxudWxsIT10LnJldHVyblZhbHVlJiYhdC5yZXR1cm5WYWx1ZX0sZS5wcm90b3R5cGUuZ2V0SW5uZXJIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlubmVySFRNTH0sZS5wcm90b3R5cGUuZ2V0VGVtcGxhdGVDb250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiJjb250ZW50ImluIHQmJnRoaXMuaXNUZW1wbGF0ZUVsZW1lbnQodCk/dC5jb250ZW50Om51bGx9LGUucHJvdG90eXBlLmdldE91dGVySFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRlckhUTUx9LGUucHJvdG90eXBlLm5vZGVOYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVOYW1lfSxlLnByb3RvdHlwZS5ub2RlVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVZhbHVlfSxlLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9LGUucHJvdG90eXBlLmNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzUHJvcGVydHkodCwiY29udGVudCIpP3QuY29udGVudDp0fSxlLnByb3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpcnN0Q2hpbGR9LGUucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfSxlLnByb3RvdHlwZS5wYXJlbnRFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGV9LGUucHJvdG90eXBlLmNoaWxkTm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hpbGROb2Rlc30sZS5wcm90b3R5cGUuY2hpbGROb2Rlc0FzTGlzdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jaGlsZE5vZGVzLG49bmV3IEFycmF5KGUubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1lW3JdO3JldHVybiBufSxlLnByb3RvdHlwZS5jbGVhck5vZGVzPWZ1bmN0aW9uKHQpe2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LnJlbW92ZUNoaWxkKGUpfSxlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ9ZnVuY3Rpb24odCxlLG4pe3QucmVwbGFjZUNoaWxkKGUsbil9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdH0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShuLGUpfSxlLnByb3RvdHlwZS5pbnNlcnRBbGxCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe24uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gdC5pbnNlcnRCZWZvcmUobixlKX0pfSxlLnByb3RvdHlwZS5pbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7dC5pbnNlcnRCZWZvcmUobixlLm5leHRTaWJsaW5nKX0sZS5wcm90b3R5cGUuc2V0SW5uZXJIVE1MPWZ1bmN0aW9uKHQsZSl7dC5pbm5lckhUTUw9ZX0sZS5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29udGVudH0sZS5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbih0LGUpe3QudGV4dENvbnRlbnQ9ZX0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9LGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dC52YWx1ZT1lfSxlLnByb3RvdHlwZS5nZXRDaGVja2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoZWNrZWR9LGUucHJvdG90eXBlLnNldENoZWNrZWQ9ZnVuY3Rpb24odCxlKXt0LmNoZWNrZWQ9ZX0sZS5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVDb21tZW50KHQpfSxlLnByb3RvdHlwZS5jcmVhdGVUZW1wbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGUuaW5uZXJIVE1MPXQsZX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUz1mdW5jdGlvbih0LGUsbil7cmV0dXJuKG49bnx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudE5TKHQsZSl9LGUucHJvdG90eXBlLmNyZWF0ZVRleHROb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlVGV4dE5vZGUodCl9LGUucHJvdG90eXBlLmNyZWF0ZVNjcmlwdFRhZz1mdW5jdGlvbih0LGUsbil7dmFyIHI9KG49bnx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCgiU0NSSVBUIik7cmV0dXJuIHIuc2V0QXR0cmlidXRlKHQsZSkscn0sZS5wcm90b3R5cGUuY3JlYXRlU3R5bGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49KGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChuLHRoaXMuY3JlYXRlVGV4dE5vZGUodCxlKSksbn0sZS5wcm90b3R5cGUuY3JlYXRlU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5jcmVhdGVTaGFkb3dSb290KCl9LGUucHJvdG90eXBlLmdldFNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hhZG93Um9vdH0sZS5wcm90b3R5cGUuZ2V0SG9zdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5ob3N0fSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9uZU5vZGUoITApfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKX0sZS5wcm90b3R5cGUuY2xhc3NMaXN0PWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmNsYXNzTGlzdCwwKX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNsYXNzTGlzdC5jb250YWlucyhlKX0sZS5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4pe3Quc3R5bGVbZV09bn0sZS5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlKXt0LnN0eWxlW2VdPSIifSxlLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnN0eWxlW2VdfSxlLnByb3RvdHlwZS5oYXNTdHlsZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5nZXRTdHlsZSh0LGUpfHwiIjtyZXR1cm4gbj9yPT1uOnIubGVuZ3RoPjB9LGUucHJvdG90eXBlLnRhZ05hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFnTmFtZX0sZS5wcm90b3R5cGUuYXR0cmlidXRlTWFwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgTWFwLG49dC5hdHRyaWJ1dGVzLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bi5pdGVtKHIpO2Uuc2V0KGkubmFtZSxpLnZhbHVlKX1yZXR1cm4gZX0sZS5wcm90b3R5cGUuaGFzQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKGUpfSxlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuaGFzQXR0cmlidXRlTlMoZSxuKX0sZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKGUpfSxlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuZ2V0QXR0cmlidXRlTlMoZSxuKX0sZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt0LnNldEF0dHJpYnV0ZShlLG4pfSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbixyKXt0LnNldEF0dHJpYnV0ZU5TKGUsbixyKX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7dC5yZW1vdmVBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXt0LnJlbW92ZUF0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLnRlbXBsYXRlQXdhcmVSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzVGVtcGxhdGVFbGVtZW50KHQpP3RoaXMuY29udGVudCh0KTp0fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sRG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJmYWtlVGl0bGUiKX0sZS5wcm90b3R5cGUuZ2V0RGVmYXVsdERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50fSxlLnByb3RvdHlwZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKHQpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX19LGUucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRpdGxlfSxlLnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0LGUpe3QudGl0bGU9ZXx8IiJ9LGUucHJvdG90eXBlLmVsZW1lbnRNYXRjaGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmlzRWxlbWVudE5vZGUodCkmJih0Lm1hdGNoZXMmJnQubWF0Y2hlcyhlKXx8dC5tc01hdGNoZXNTZWxlY3RvciYmdC5tc01hdGNoZXNTZWxlY3RvcihlKXx8dC53ZWJraXRNYXRjaGVzU2VsZWN0b3ImJnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yKGUpKX0sZS5wcm90b3R5cGUuaXNUZW1wbGF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNFbGVtZW50Tm9kZSh0KSYmIlRFTVBMQVRFIj09PXQubm9kZU5hbWV9LGUucHJvdG90eXBlLmlzVGV4dE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERX0sZS5wcm90b3R5cGUuaXNDb21tZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuQ09NTUVOVF9OT0RFfSxlLnByb3RvdHlwZS5pc0VsZW1lbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9LGUucHJvdG90eXBlLmhhc1NoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQuc2hhZG93Um9vdCYmdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSxlLnByb3RvdHlwZS5pc1NoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fSxlLnByb3RvdHlwZS5pbXBvcnRJbnRvRG9jPWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGVBd2FyZVJvb3QodCksITApfSxlLnByb3RvdHlwZS5hZG9wdE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmFkb3B0Tm9kZSh0KX0sZS5wcm90b3R5cGUuZ2V0SHJlZj1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0sZS5wcm90b3R5cGUuZ2V0RXZlbnRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXk7aWYobnVsbD09ZSl7aWYobnVsbD09KGU9dC5rZXlJZGVudGlmaWVyKSlyZXR1cm4iVW5pZGVudGlmaWVkIjtlLnN0YXJ0c1dpdGgoIlUrIikmJihlPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zdWJzdHJpbmcoMiksMTYpKSwzPT09dC5sb2NhdGlvbiYmZi5oYXNPd25Qcm9wZXJ0eShlKSYmKGU9ZltlXSkpfXJldHVybiBjW2VdfHxlfSxlLnByb3RvdHlwZS5nZXRHbG9iYWxFdmVudFRhcmdldD1mdW5jdGlvbih0LGUpe3JldHVybiJ3aW5kb3ciPT09ZT93aW5kb3c6ImRvY3VtZW50Ij09PWU/dDoiYm9keSI9PT1lP3QuYm9keTpudWxsfSxlLnByb3RvdHlwZS5nZXRIaXN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5oaXN0b3J5fSxlLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubG9jYXRpb259LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKHQpe3ZhciBlLG49cHx8KHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpKT9wLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGw7cmV0dXJuIG51bGw9PW4/bnVsbDooZT1uLGh8fChoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksaC5zZXRBdHRyaWJ1dGUoImhyZWYiLGUpLCIvIj09PWgucGF0aG5hbWUuY2hhckF0KDApP2gucGF0aG5hbWU6Ii8iK2gucGF0aG5hbWUpfSxlLnByb3RvdHlwZS5yZXNldEJhc2VFbGVtZW50PWZ1bmN0aW9uKCl7cD1udWxsfSxlLnByb3RvdHlwZS5nZXRVc2VyQWdlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9LGUucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24odCxlLG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsImRhdGEtIitlLG4pfSxlLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKHQsImRhdGEtIitlKX0sZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0KX0sZS5wcm90b3R5cGUuc3VwcG9ydHNXZWJBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZX0sZS5wcm90b3R5cGUucGVyZm9ybWFuY2VOb3c9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3coKToobmV3IERhdGUpLmdldFRpbWUoKX0sZS5wcm90b3R5cGUuc3VwcG9ydHNDb29raWVzPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmdldENvb2tpZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KGkudSkoZG9jdW1lbnQuY29va2llLHQpfSxlLnByb3RvdHlwZS5zZXRDb29raWU9ZnVuY3Rpb24odCxlKXtkb2N1bWVudC5jb29raWU9ZW5jb2RlVVJJQ29tcG9uZW50KHQpKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSl9LGV9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7ZS5fYW5pbWF0aW9uUHJlZml4PW51bGwsZS5fdHJhbnNpdGlvbkVuZD1udWxsO3RyeXt2YXIgbj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIsZG9jdW1lbnQpO2lmKG51bGwhPWUuZ2V0U3R5bGUobiwiYW5pbWF0aW9uTmFtZSIpKWUuX2FuaW1hdGlvblByZWZpeD0iIjtlbHNlIGZvcih2YXIgcj1bIldlYmtpdCIsIk1veiIsIk8iLCJtcyJdLGk9MDtpPHIubGVuZ3RoO2krKylpZihudWxsIT1lLmdldFN0eWxlKG4scltpXSsiQW5pbWF0aW9uTmFtZSIpKXtlLl9hbmltYXRpb25QcmVmaXg9Ii0iK3JbaV0udG9Mb3dlckNhc2UoKSsiLSI7YnJlYWt9dmFyIG89e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9O09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24odCl7bnVsbCE9ZS5nZXRTdHlsZShuLHQpJiYoZS5fdHJhbnNpdGlvbkVuZD1vW3RdKX0pfWNhdGNoKHQpe2UuX2FuaW1hdGlvblByZWZpeD1udWxsLGUuX3RyYW5zaXRpb25FbmQ9bnVsbH1yZXR1cm4gZX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXREaXN0cmlidXRlZE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERpc3RyaWJ1dGVkTm9kZXMoKX0sZS5wcm90b3R5cGUucmVzb2x2ZUFuZFNldEhyZWY9ZnVuY3Rpb24odCxlLG4pe3QuaHJlZj1udWxsPT1uP2U6ZSsiLy4uLyIrbn0sZS5wcm90b3R5cGUuc3VwcG9ydHNET01FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuc3VwcG9ydHNOYXRpdmVTaGFkb3dET009ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZG9jdW1lbnQuYm9keS5jcmVhdGVTaGFkb3dSb290fSxlLnByb3RvdHlwZS5nZXRBbmltYXRpb25QcmVmaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uUHJlZml4P3RoaXMuX2FuaW1hdGlvblByZWZpeDoiIn0sZS5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbkVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5kP3RoaXMuX3RyYW5zaXRpb25FbmQ6IiJ9LGUucHJvdG90eXBlLnN1cHBvcnRzQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuX2FuaW1hdGlvblByZWZpeCYmbnVsbCE9dGhpcy5fdHJhbnNpdGlvbkVuZH0sZX0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5yZXNvdXJjZUxvYWRlclR5cGU9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhdHRyVG9Qcm9wTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dHJUb1Byb3BNYXB9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdHRyVG9Qcm9wTWFwPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSkpLHA9bnVsbCxtPWkuZDtmdW5jdGlvbiB5KCl7cmV0dXJuISF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGV9dmFyIGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG4uX2luaXQoKSxufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7dGhpcy5sb2NhdGlvbj1zKCkuZ2V0TG9jYXRpb24oKSx0aGlzLl9oaXN0b3J5PXMoKS5nZXRIaXN0b3J5KCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmRnJvbURPTT1mdW5jdGlvbigpe3JldHVybiBzKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX0sZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXtzKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsdCwhMSl9LGUucHJvdG90eXBlLm9uSGFzaENoYW5nZT1mdW5jdGlvbih0KXtzKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0LCExKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRobmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5sb2NhdGlvbi5wYXRobmFtZT10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2VhcmNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uc2VhcmNofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGFzaCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhhc2h9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt5KCk/dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3koKT90aGlzLl9oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LGUsbik6dGhpcy5sb2NhdGlvbi5oYXNoPW59LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX2hpc3RvcnkuYmFjaygpfSxlLmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW3t0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpvLm4sYXJnczpbbV19XX1dfSxlfShpLnApLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvYz10LHRoaXMuX2RvbT1zKCl9cmV0dXJuIHQucHJvdG90eXBlLmFkZFRhZz1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksdD90aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCxlKTpudWxsfSx0LnByb3RvdHlwZS5hZGRUYWdzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHQ/dC5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gciYmdC5wdXNoKG4uX2dldE9yQ3JlYXRlRWxlbWVudChyLGUpKSx0fSxbXSk6W119LHQucHJvdG90eXBlLmdldFRhZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3IodGhpcy5fZG9jLCJtZXRhWyIrdCsiXSIpfHxudWxsfSx0LnByb3RvdHlwZS5nZXRUYWdzPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybltdO3ZhciBlPXRoaXMuX2RvbS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX2RvYywibWV0YVsiK3QrIl0iKTtyZXR1cm4gZT9bXS5zbGljZS5jYWxsKGUpOltdfSx0LnByb3RvdHlwZS51cGRhdGVUYWc9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gbnVsbDtlPWV8fHRoaXMuX3BhcnNlU2VsZWN0b3IodCk7dmFyIG49dGhpcy5nZXRUYWcoZSk7cmV0dXJuIG4/dGhpcy5fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzKHQsbik6dGhpcy5fZ2V0T3JDcmVhdGVFbGVtZW50KHQsITApfSx0LnByb3RvdHlwZS5yZW1vdmVUYWc9ZnVuY3Rpb24odCl7dGhpcy5yZW1vdmVUYWdFbGVtZW50KHRoaXMuZ2V0VGFnKHQpKX0sdC5wcm90b3R5cGUucmVtb3ZlVGFnRWxlbWVudD1mdW5jdGlvbih0KXt0JiZ0aGlzLl9kb20ucmVtb3ZlKHQpfSx0LnByb3RvdHlwZS5fZ2V0T3JDcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9ITEpLCFlKXt2YXIgbj10aGlzLl9wYXJzZVNlbGVjdG9yKHQpLHI9dGhpcy5nZXRUYWcobik7aWYociYmdGhpcy5fY29udGFpbnNBdHRyaWJ1dGVzKHQscikpcmV0dXJuIHJ9dmFyIGk9dGhpcy5fZG9tLmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTt0aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxpKTt2YXIgbz10aGlzLl9kb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUodGhpcy5fZG9jLCJoZWFkIilbMF07cmV0dXJuIHRoaXMuX2RvbS5hcHBlbmRDaGlsZChvLGkpLGl9LHQucHJvdG90eXBlLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiBuLl9kb20uc2V0QXR0cmlidXRlKGUscix0W3JdKX0pLGV9LHQucHJvdG90eXBlLl9wYXJzZVNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZT8ibmFtZSI6InByb3BlcnR5IjtyZXR1cm4gZSsnPSInK3RbZV0rJyInfSx0LnByb3RvdHlwZS5fY29udGFpbnNBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gT2JqZWN0LmtleXModCkuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIG4uX2RvbS5nZXRBdHRyaWJ1dGUoZSxyKT09PXRbcl19KX0sdH0oKSxiPW5ldyBvLm8oIlRSQU5TSVRJT05fSUQiKSxfPVt7cHJvdmlkZTpvLmQsdXNlRmFjdG9yeTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7bi5nZXQoby5lKS5kb25lUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7dmFyIG49cygpO0FycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShuLnF1ZXJ5U2VsZWN0b3JBbGwoZSwic3R5bGVbbmctdHJhbnNpdGlvbl0iKSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBuLmdldEF0dHJpYnV0ZShlLCJuZy10cmFuc2l0aW9uIik9PT10fSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbi5yZW1vdmUodCl9KX0pfX0sZGVwczpbYixtLG8ucF0sbXVsdGk6ITB9XSx3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5pbml0PWZ1bmN0aW9uKCl7T2JqZWN0KG8uWSkobmV3IHQpfSx0LnByb3RvdHlwZS5hZGRUb1dpbmRvdz1mdW5jdGlvbih0KXtvLlBhLmdldEFuZ3VsYXJUZXN0YWJpbGl0eT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgcj10LmZpbmRUZXN0YWJpbGl0eUluVHJlZShlLG4pO2lmKG51bGw9PXIpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0ZXN0YWJpbGl0eSBmb3IgZWxlbWVudC4iKTtyZXR1cm4gcn0sby5QYS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcz1mdW5jdGlvbigpe3JldHVybiB0LmdldEFsbFRlc3RhYmlsaXRpZXMoKX0sby5QYS5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsUm9vdEVsZW1lbnRzKCl9LG8uUGEuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChvLlBhLmZyYW1ld29ya1N0YWJpbGl6ZXJzPVtdKSxvLlBhLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZnVuY3Rpb24odCl7dmFyIGU9by5QYS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpLG49ZS5sZW5ndGgscj0hMSxpPWZ1bmN0aW9uKGUpe3I9cnx8ZSwwPT0tLW4mJnQocil9O2UuZm9yRWFjaChmdW5jdGlvbih0KXt0LndoZW5TdGFibGUoaSl9KX0pfSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9ZnVuY3Rpb24odCxlLG4pe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7dmFyIHI9dC5nZXRUZXN0YWJpbGl0eShlKTtyZXR1cm4gbnVsbCE9cj9yOm4/cygpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LHMoKS5nZXRIb3N0KGUpLCEwKTp0aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LHMoKS5wYXJlbnRFbGVtZW50KGUpLCEwKTpudWxsfSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvYz10fXJldHVybiB0LnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3JldHVybiBzKCkuZ2V0VGl0bGUodGhpcy5fZG9jKX0sdC5wcm90b3R5cGUuc2V0VGl0bGU9ZnVuY3Rpb24odCl7cygpLnNldFRpdGxlKHRoaXMuX2RvYyx0KX0sdH0oKTtmdW5jdGlvbiBPKHQsZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBDT01QSUxFRCYmQ09NUElMRUR8fCgoby5QYS5uZz1vLlBhLm5nfHx7fSlbdF09ZSl9dmFyIEM9e0FwcGxpY2F0aW9uUmVmOm8uZyxOZ1pvbmU6by54fSxTPSJwcm9iZSIsRT0iY29yZVRva2VucyI7ZnVuY3Rpb24gayh0KXtyZXR1cm4gT2JqZWN0KG8uVSkodCl9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gTyhTLGspLE8oRSxPYmplY3Qoci5hKSh7fSxDLCh0fHxbXSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZS5uYW1lXT1lLnRva2VuLHR9LHt9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGt9fXZhciBJPW5ldyBvLm8oIkV2ZW50TWFuYWdlclBsdWdpbnMiKSxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5fem9uZT1lLHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luPW5ldyBNYXAsdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hbmFnZXI9bn0pLHRoaXMuX3BsdWdpbnM9dC5zbGljZSgpLnJldmVyc2UoKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGUpLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLG4pfSx0LnByb3RvdHlwZS5nZXRab25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvbmV9LHQucHJvdG90eXBlLl9maW5kUGx1Z2luRm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldCh0KTtpZihlKXJldHVybiBlO2Zvcih2YXIgbj10aGlzLl9wbHVnaW5zLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpZihpLnN1cHBvcnRzKHQpKXJldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQodCxpKSxpfXRocm93IG5ldyBFcnJvcigiTm8gZXZlbnQgbWFuYWdlciBwbHVnaW4gZm91bmQgZm9yIGV2ZW50ICIrdCl9LHR9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXMoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsdCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgIityKyIgZm9yIGV2ZW50ICIrZSk7cmV0dXJuIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLGUsbil9LHR9KCksUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9zdHlsZXNTZXQ9bmV3IFNldH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3R5bGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1uZXcgU2V0O3QuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9zdHlsZXNTZXQuaGFzKHQpfHwoZS5fc3R5bGVzU2V0LmFkZCh0KSxuLmFkZCh0KSl9KSx0aGlzLm9uU3R5bGVzQWRkZWQobil9LHQucHJvdG90eXBlLm9uU3R5bGVzQWRkZWQ9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5nZXRBbGxTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zdHlsZXNTZXQpfSx0fSgpLE09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG4uX2hvc3ROb2Rlcz1uZXcgU2V0LG4uX3N0eWxlTm9kZXM9bmV3IFNldCxuLl9ob3N0Tm9kZXMuYWRkKGUuaGVhZCksbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5fYWRkU3R5bGVzVG9Ib3N0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5fZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci50ZXh0Q29udGVudD10LG4uX3N0eWxlTm9kZXMuYWRkKGUuYXBwZW5kQ2hpbGQocikpfSl9LGUucHJvdG90eXBlLmFkZEhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5fYWRkU3R5bGVzVG9Ib3N0KHRoaXMuX3N0eWxlc1NldCx0KSx0aGlzLl9ob3N0Tm9kZXMuYWRkKHQpfSxlLnByb3RvdHlwZS5yZW1vdmVIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2hvc3ROb2Rlcy5kZWxldGUodCl9LGUucHJvdG90eXBlLm9uU3R5bGVzQWRkZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5fYWRkU3R5bGVzVG9Ib3N0KHQsbil9KX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZU5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHMoKS5yZW1vdmUodCl9KX0sZX0oUCksTj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sUj0vJUNPTVAlL2csRD0iX25naG9zdC0lQ09NUCUiLEw9Il9uZ2NvbnRlbnQtJUNPTVAlIjtmdW5jdGlvbiBGKHQsZSxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtBcnJheS5pc0FycmF5KGkpP0YodCxpLG4pOihpPWkucmVwbGFjZShSLHQpLG4ucHVzaChpKSl9cmV0dXJuIG59ZnVuY3Rpb24gVih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ITE9PT10KGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUucmV0dXJuVmFsdWU9ITEpfX12YXIgVT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMucmVuZGVyZXJCeUNvbXBJZD1uZXcgTWFwLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5ldyB6KHQpfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe2lmKCF0fHwhZSlyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7c3dpdGNoKGUuZW5jYXBzdWxhdGlvbil7Y2FzZSBvLk8uRW11bGF0ZWQ6dmFyIG49dGhpcy5yZW5kZXJlckJ5Q29tcElkLmdldChlLmlkKTtyZXR1cm4gbnx8KG49bmV3IHEodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCxuKSksbi5hcHBseVRvSG9zdCh0KSxuO2Nhc2Ugby5PLk5hdGl2ZTpjYXNlIG8uTy5TaGFkb3dEb206cmV0dXJuIG5ldyBZKHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMuc2hhcmVkU3R5bGVzSG9zdCx0LGUpO2RlZmF1bHQ6aWYoIXRoaXMucmVuZGVyZXJCeUNvbXBJZC5oYXMoZS5pZCkpe3ZhciByPUYoZS5pZCxlLnN0eWxlcyxbXSk7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyhyKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGUuaWQsdGhpcy5kZWZhdWx0UmVuZGVyZXIpfXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcn19LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LHR9KCksej1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBlP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOW2VdLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dCYmdC5pbnNlcnRCZWZvcmUoZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0JiZ0LnJlbW92ZUNoaWxkKGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT0ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0O2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHNlbGVjdG9yICInK3QrJyIgZGlkIG5vdCBtYXRjaCBhbnkgZWxlbWVudHMnKTtyZXR1cm4gZS50ZXh0Q29udGVudD0iIixlfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGV9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7aWYocil7ZT1yKyI6IitlO3ZhciBpPU5bcl07aT90LnNldEF0dHJpYnV0ZU5TKGksZSxuKTp0LnNldEF0dHJpYnV0ZShlLG4pfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXtpZihuKXt2YXIgcj1OW25dO3I/dC5yZW1vdmVBdHRyaWJ1dGVOUyhyLGUpOnQucmVtb3ZlQXR0cmlidXRlKG4rIjoiK2UpfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7ciZvLkQuRGFzaENhc2U/dC5zdHlsZS5zZXRQcm9wZXJ0eShlLG4sciZvLkQuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPW59LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtuJm8uRC5EYXNoQ2FzZT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnQuc3R5bGVbZV09IiJ9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXtIKGUsInByb3BlcnR5IiksdFtlXT1ufSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3Qubm9kZVZhbHVlPWV9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEgoZSwibGlzdGVuZXIiKSwic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsVihuKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LGUsVihuKSl9LHR9KCksQj0iQCIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBIKHQsZSl7aWYodC5jaGFyQ29kZUF0KDApPT09Qil0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIHRoZSBzeW50aGV0aWMgIitlKyIgIit0KycuIFBsZWFzZSBpbmNsdWRlIGVpdGhlciAiQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUiIG9yICJOb29wQW5pbWF0aW9uc01vZHVsZSIgaW4geW91ciBhcHBsaWNhdGlvbi4nKX12YXIgVyxxPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO2kuY29tcG9uZW50PXI7dmFyIG89RihyLmlkLHIuc3R5bGVzLFtdKTtyZXR1cm4gbi5hZGRTdHlsZXMobyksaS5jb250ZW50QXR0cj1MLnJlcGxhY2UoUixyLmlkKSxpLmhvc3RBdHRyPUQucmVwbGFjZShSLHIuaWQpLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYXBwbHlUb0hvc3Q9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcyxlLHRoaXMuaG9zdEF0dHIsIiIpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsbil7dmFyIHI9dC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudC5jYWxsKHRoaXMsZSxuKTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcyxyLHRoaXMuY29udGVudEF0dHIsIiIpLHJ9LGV9KHopLFk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgYT10LmNhbGwodGhpcyxlKXx8dGhpczthLnNoYXJlZFN0eWxlc0hvc3Q9bixhLmhvc3RFbD1yLGEuY29tcG9uZW50PWksYS5zaGFkb3dSb290PWkuZW5jYXBzdWxhdGlvbj09PW8uTy5TaGFkb3dEb20/ci5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSk6ci5jcmVhdGVTaGFkb3dSb290KCksYS5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3QoYS5zaGFkb3dSb290KTtmb3IodmFyIHM9RihpLmlkLGkuc3R5bGVzLFtdKSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC50ZXh0Q29udGVudD1zW3VdLGEuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChsKX1yZXR1cm4gYX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5ub2RlT3JTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfSxlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbihlLG4pe3JldHVybiB0LnByb3RvdHlwZS5hcHBlbmRDaGlsZC5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4pfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmUuY2FsbCh0aGlzLHRoaXMubm9kZU9yU2hhZG93Um9vdChlKSxuLHIpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlLG4pe3JldHVybiB0LnByb3RvdHlwZS5yZW1vdmVDaGlsZC5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4pfSxlLnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3QodC5wcm90b3R5cGUucGFyZW50Tm9kZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpKSl9LGV9KHopLEc9InVuZGVmaW5lZCIhPXR5cGVvZiBab25lJiZab25lLl9fc3ltYm9sX198fGZ1bmN0aW9uKHQpe3JldHVybiJfX3pvbmVfc3ltYm9sX18iK3R9LFE9RygiYWRkRXZlbnRMaXN0ZW5lciIpLEs9RygicmVtb3ZlRXZlbnRMaXN0ZW5lciIpLFo9e30sWD0iX196b25lX3N5bWJvbF9fcHJvcGFnYXRpb25TdG9wcGVkIjsidW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmVbRygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSYmKFc9e30pO3ZhciAkPWZ1bmN0aW9uKHQpe3JldHVybiEhVyYmVy5oYXNPd25Qcm9wZXJ0eSh0KX0sSj1mdW5jdGlvbih0KXt2YXIgZT1aW3QudHlwZV07aWYoZSl7dmFyIG49dGhpc1tlXTtpZihuKXt2YXIgcj1bdF07aWYoMT09PW4ubGVuZ3RoKXJldHVybihhPW5bMF0pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxyKTphLmhhbmRsZXIuYXBwbHkodGhpcyxyKTtmb3IodmFyIGk9bi5zbGljZSgpLG89MDtvPGkubGVuZ3RoJiYhMCE9PXRbWF07bysrKXt2YXIgYTsoYT1pW29dKS56b25lIT09Wm9uZS5jdXJyZW50P2Euem9uZS5ydW4oYS5oYW5kbGVyLHRoaXMscik6YS5oYW5kbGVyLmFwcGx5KHRoaXMscil9fX19LHR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLm5nWm9uZT1uLHImJk9iamVjdChpLnIpKHIpfHxvLnBhdGNoRXZlbnQoKSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnBhdGNoRXZlbnQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEV2ZW50JiZFdmVudCYmRXZlbnQucHJvdG90eXBlJiYhRXZlbnQucHJvdG90eXBlLl9fem9uZV9zeW1ib2xfX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbil7dmFyIHQ9RXZlbnQucHJvdG90eXBlLl9fem9uZV9zeW1ib2xfX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1FdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO0V2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzJiYodGhpc1tYXT0hMCksdCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuITB9LGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT1uO2lmKCF0W1FdfHxvLnguaXNJbkFuZ3VsYXJab25lKCkmJiEkKGUpKXQuYWRkRXZlbnRMaXN0ZW5lcihlLGksITEpO2Vsc2V7dmFyIGE9WltlXTthfHwoYT1aW2VdPUcoIkFOR1VMQVIiK2UrIkZBTFNFIikpO3ZhciBzPXRbYV0sdT1zJiZzLmxlbmd0aD4wO3N8fChzPXRbYV09W10pO3ZhciBsPSQoZSk/Wm9uZS5yb290OlpvbmUuY3VycmVudDtpZigwPT09cy5sZW5ndGgpcy5wdXNoKHt6b25lOmwsaGFuZGxlcjppfSk7ZWxzZXtmb3IodmFyIGM9ITEsZj0wO2Y8cy5sZW5ndGg7ZisrKWlmKHNbZl0uaGFuZGxlcj09PWkpe2M9ITA7YnJlYWt9Y3x8cy5wdXNoKHt6b25lOmwsaGFuZGxlcjppfSl9dXx8dFtRXShlLEosITEpfXJldHVybiBmdW5jdGlvbigpe3JldHVybiByLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLGkpfX0sZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dFtLXTtpZighcilyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHQsW2UsbiwhMV0pO3ZhciBpPVpbZV0sbz1pJiZ0W2ldO2lmKCFvKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7Zm9yKHZhciBhPSExLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihvW3NdLmhhbmRsZXI9PT1uKXthPSEwLG8uc3BsaWNlKHMsMSk7YnJlYWt9YT8wPT09by5sZW5ndGgmJnIuYXBwbHkodCxbZSxKLCExXSk6dC5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHQsW2UsbiwhMV0pfSxlfShqKSxldD17cGFuOiEwLHBhbnN0YXJ0OiEwLHBhbm1vdmU6ITAscGFuZW5kOiEwLHBhbmNhbmNlbDohMCxwYW5sZWZ0OiEwLHBhbnJpZ2h0OiEwLHBhbnVwOiEwLHBhbmRvd246ITAscGluY2g6ITAscGluY2hzdGFydDohMCxwaW5jaG1vdmU6ITAscGluY2hlbmQ6ITAscGluY2hjYW5jZWw6ITAscGluY2hpbjohMCxwaW5jaG91dDohMCxwcmVzczohMCxwcmVzc3VwOiEwLHJvdGF0ZTohMCxyb3RhdGVzdGFydDohMCxyb3RhdGVtb3ZlOiEwLHJvdGF0ZWVuZDohMCxyb3RhdGVjYW5jZWw6ITAsc3dpcGU6ITAsc3dpcGVsZWZ0OiEwLHN3aXBlcmlnaHQ6ITAsc3dpcGV1cDohMCxzd2lwZWRvd246ITAsdGFwOiEwfSxudD1uZXcgby5vKCJIYW1tZXJHZXN0dXJlQ29uZmlnIikscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5ldmVudHM9W10sdGhpcy5vdmVycmlkZXM9e319cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkSGFtbWVyPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBIYW1tZXIodCx0aGlzLm9wdGlvbnMpO2Zvcih2YXIgbiBpbiBlLmdldCgicGluY2giKS5zZXQoe2VuYWJsZTohMH0pLGUuZ2V0KCJyb3RhdGUiKS5zZXQoe2VuYWJsZTohMH0pLHRoaXMub3ZlcnJpZGVzKWUuZ2V0KG4pLnNldCh0aGlzLm92ZXJyaWRlc1tuXSk7cmV0dXJuIGV9LHR9KCksaXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX2NvbmZpZz1uLGkuY29uc29sZT1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISghZXQuaGFzT3duUHJvcGVydHkodC50b0xvd2VyQ2FzZSgpKSYmIXRoaXMuaXNDdXN0b21FdmVudCh0KXx8IXdpbmRvdy5IYW1tZXImJih0aGlzLmNvbnNvbGUud2FybigiSGFtbWVyLmpzIGlzIG5vdCBsb2FkZWQsIGNhbiBub3QgYmluZCAnIit0KyInIGV2ZW50LiIpLDEpKX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPXRoaXMubWFuYWdlci5nZXRab25lKCk7cmV0dXJuIGU9ZS50b0xvd2VyQ2FzZSgpLGkucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt2YXIgbz1yLl9jb25maWcuYnVpbGRIYW1tZXIodCksYT1mdW5jdGlvbih0KXtpLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXtuKHQpfSl9O3JldHVybiBvLm9uKGUsYSksZnVuY3Rpb24oKXtyZXR1cm4gby5vZmYoZSxhKX19KX0sZS5wcm90b3R5cGUuaXNDdXN0b21FdmVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29uZmlnLmV2ZW50cy5pbmRleE9mKHQpPi0xfSxlfShqKSxvdD1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxhdD17YWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0LmFsdEtleX0sY29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jdHJsS2V5fSxtZXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1ldGFLZXl9LHNoaWZ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNoaWZ0S2V5fX0sc3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPWUucGFyc2VFdmVudE5hbWUodCl9LGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUucGFyc2VFdmVudE5hbWUobiksbz1lLmV2ZW50Q2FsbGJhY2soaS5mdWxsS2V5LHIsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gcygpLm9uQW5kQ2FuY2VsKHQsaS5kb21FdmVudE5hbWUsbyl9KX0sZS5wYXJzZUV2ZW50TmFtZT1mdW5jdGlvbih0KXt2YXIgbj10LnRvTG93ZXJDYXNlKCkuc3BsaXQoIi4iKSxyPW4uc2hpZnQoKTtpZigwPT09bi5sZW5ndGh8fCJrZXlkb3duIiE9PXImJiJrZXl1cCIhPT1yKXJldHVybiBudWxsO3ZhciBpPWUuX25vcm1hbGl6ZUtleShuLnBvcCgpKSxvPSIiO2lmKG90LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5pbmRleE9mKHQpO2U+LTEmJihuLnNwbGljZShlLDEpLG8rPXQrIi4iKX0pLG8rPWksMCE9bi5sZW5ndGh8fDA9PT1pLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgYT17fTtyZXR1cm4gYS5kb21FdmVudE5hbWU9cixhLmZ1bGxLZXk9byxhfSxlLmdldEV2ZW50RnVsbEtleT1mdW5jdGlvbih0KXt2YXIgZT0iIixuPXMoKS5nZXRFdmVudEtleSh0KTtyZXR1cm4iICI9PT0obj1uLnRvTG93ZXJDYXNlKCkpP249InNwYWNlIjoiLiI9PT1uJiYobj0iZG90Iiksb3QuZm9yRWFjaChmdW5jdGlvbihyKXtyIT1uJiYoMCxhdFtyXSkodCkmJihlKz1yKyIuIil9KSxlKz1ufSxlLmV2ZW50Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBmdW5jdGlvbihpKXtlLmdldEV2ZW50RnVsbEtleShpKT09PXQmJnIucnVuR3VhcmRlZChmdW5jdGlvbigpe3JldHVybiBuKGkpfSl9fSxlLl9ub3JtYWxpemVLZXk9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiZXNjIjpyZXR1cm4iZXNjYXBlIjtkZWZhdWx0OnJldHVybiB0fX0sZX0oaiksdXQ9ZnVuY3Rpb24oKXt9LGx0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kb2M9ZSxufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnNhbml0aXplPWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtzd2l0Y2godCl7Y2FzZSBvLkYuTk9ORTpyZXR1cm4gZTtjYXNlIG8uRi5IVE1MOnJldHVybiBlIGluc3RhbmNlb2YgZnQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIkhUTUwiKSxPYmplY3Qoby5DYSkodGhpcy5fZG9jLFN0cmluZyhlKSkpO2Nhc2Ugby5GLlNUWUxFOnJldHVybiBlIGluc3RhbmNlb2YgaHQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlN0eWxlIiksT2JqZWN0KG8uRGEpKGUpKTtjYXNlIG8uRi5TQ1JJUFQ6aWYoZSBpbnN0YW5jZW9mIGR0KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJTY3JpcHQiKSxuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgc2NyaXB0IGNvbnRleHQiKTtjYXNlIG8uRi5VUkw6cmV0dXJuIGUgaW5zdGFuY2VvZiBtdHx8ZSBpbnN0YW5jZW9mIHB0P2UuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eToodGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJVUkwiKSxPYmplY3Qoby5FYSkoU3RyaW5nKGUpKSk7Y2FzZSBvLkYuUkVTT1VSQ0VfVVJMOmlmKGUgaW5zdGFuY2VvZiBtdClyZXR1cm4gZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5O3Rocm93IHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiUmVzb3VyY2VVUkwiKSxuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgcmVzb3VyY2UgVVJMIGNvbnRleHQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpfX0sZS5wcm90b3R5cGUuY2hlY2tOb3RTYWZlVmFsdWU9ZnVuY3Rpb24odCxlKXtpZih0IGluc3RhbmNlb2YgY3QpdGhyb3cgbmV3IEVycm9yKCJSZXF1aXJlZCBhIHNhZmUgIitlKyIsIGdvdCBhICIrdC5nZXRUeXBlTmFtZSgpKyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZnQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGh0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbXQodCl9LGV9KHV0KSxjdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICIrdGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIn0sdH0oKSxmdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJIVE1MIn0sZX0oY3QpLGh0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlN0eWxlIn0sZX0oY3QpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlNjcmlwdCJ9LGV9KGN0KSxwdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJVUkwifSxlfShjdCksbXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iUmVzb3VyY2VVUkwifSxlfShjdCkseXQ9W3twcm92aWRlOm8ueix1c2VWYWx1ZTppLnN9LHtwcm92aWRlOm8uQSx1c2VWYWx1ZTpmdW5jdGlvbigpe2QubWFrZUN1cnJlbnQoKSx3LmluaXQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOmkucCx1c2VDbGFzczpnLGRlcHM6W21dfSx7cHJvdmlkZTptLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGRlcHM6W119XSxndD1PYmplY3Qoby5RKShvLlgsImJyb3dzZXIiLHl0KTtmdW5jdGlvbiB2dCgpe3JldHVybiBuZXcgby5sfXZhciBidD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodCl0aHJvdyBuZXcgRXJyb3IoIkJyb3dzZXJNb2R1bGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuIElmIHlvdSBuZWVkIGFjY2VzcyB0byBjb21tb24gZGlyZWN0aXZlcyBzdWNoIGFzIE5nSWYgYW5kIE5nRm9yIGZyb20gYSBsYXp5IGxvYWRlZCBtb2R1bGUsIGltcG9ydCBDb21tb25Nb2R1bGUgaW5zdGVhZC4iKX1yZXR1cm4gdC53aXRoU2VydmVyVHJhbnNpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W3twcm92aWRlOm8uYyx1c2VWYWx1ZTplLmFwcElkfSx7cHJvdmlkZTpiLHVzZUV4aXN0aW5nOm8uY30sX119fSx0fSgpOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d9LFpuOEQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oInBzVzAiKSxpPW4oIm1DaEYiKTtmdW5jdGlvbiBvKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLE9iamVjdChyLmEpKGkuYSx0KX19LGFlY2Q6ZnVuY3Rpb24obW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCJhIixmdW5jdGlvbigpe3JldHVybiBQcmVJbml0TG9hZGVyU2VydmljZX0pO3ZhciBfcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJyZjMwIiksX2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fPV9fd2VicGFja19yZXF1aXJlX18oIkF5dFIiKSxfYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX189X193ZWJwYWNrX3JlcXVpcmVfXygiQ2NuRyIpLF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX189X193ZWJwYWNrX3JlcXVpcmVfXygidC9OYSIpLFByZUluaXRMb2FkZXJTZXJ2aWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUHJlSW5pdExvYWRlclNlcnZpY2UodCl7dGhpcy5odHRwPXR9cmV0dXJuIFByZUluaXRMb2FkZXJTZXJ2aWNlLnByb3RvdHlwZS5sb2FkUGFnZUF0SW5pdD1mdW5jdGlvbigpe2lmKDAhPV9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXy5hLnByb2R1Y3Rpb24pe2NvbnNvbGUubG9nKCJJUEwgOiBJbml0aWFsIHBhZ2UgbG9hZGVyIFtBUFBfSU5JVElBTElaRVJdIik7dmFyIGN1cnJVcmw9d2luZG93LmxvY2F0aW9uLmhyZWYscmVnZXg9bmV3IFJlZ0V4cCgiI1xcLy4qIiksbWF0Y2hBcnJheT1jdXJyVXJsLm1hdGNoKHJlZ2V4KSxjdXJyUGF0aD1tYXRjaEFycmF5WzBdLnNsaWNlKDEpO2NvbnNvbGUubG9nKCJVUkwgOiAiK2N1cnJVcmwpLGNvbnNvbGUubG9nKCJQYXRoIDogIitjdXJyUGF0aCk7dmFyIHJlY29yZD1fcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5hLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQucGFnZU5hbWU9PWN1cnJQYXRofSk7aWYodm9pZCAwIT1yZWNvcmQpe2lmKGNvbnNvbGUubG9nKCJJUEwgOiBDb3JyZXNwb25kaW5nIHJlY29yZCBmb3VuZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIiksMD09cmVjb3JkLmNodW5rTG9hZGVkKXt2YXIgcmVxPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihyZXEub3BlbigiR0VUIixyZWNvcmQuY2h1bmtVUkwsITEpLHJlcS5zZW5kKG51bGwpLDIwMD09PXJlcS5zdGF0dXMpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKHJlcS5yZXNwb25zZVRleHQpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiSVBMIDogTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKX1lbHNlIGNvbnNvbGUubG9nKCJJUEwgOiBFcnJvciB3aGlsZSBnZXR0aW5nIGRhdGE6ICVkICglcykiLHJlcS5zdGF0dXMscmVxLnN0YXR1c1RleHQpfX1lbHNlIGNvbnNvbGUubG9nKCJJUEwgOiBObyByZWNvcmQgZm91bmQsIHBhZ2UgY2FuJ3QgYmUgbG9hZGVkIGluaXRpYWxseS5cbklQTCA6IFRoaXMgbWF5IGJlIGFuIGVycm9yIGlmIHRoZSBwYXRoIGlzIG5vdCBwYXJ0IG9mIHRoZSBtYWluIGNodW5rIHRoYXQgaXMgZW1iZWRkZWQgaW4gdGhlIGh0bWwgcGFnZSIpfX0sUHJlSW5pdExvYWRlclNlcnZpY2UubmdJbmplY3RhYmxlRGVmPV9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXy5SKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcmVJbml0TG9hZGVyU2VydmljZShfYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18uVihfYW5ndWxhcl9jb21tb25faHR0cF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fLmMpKX0sdG9rZW46UHJlSW5pdExvYWRlclNlcnZpY2UscHJvdmlkZWRJbjoicm9vdCJ9KSxQcmVJbml0TG9hZGVyU2VydmljZX0oKX0sYjdtVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIHIuYihlLHQpLGV9KEVycm9yKX0sYm5lNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiNmJsRiIpLGk9bigiaXNieSIpLG89bigiMkJkaiIpLGE9bigiNjdZLyIpO2Z1bmN0aW9uIHModCxlLG4sdSl7cmV0dXJuIE9iamVjdChvLmEpKG4pJiYodT1uLG49dm9pZCAwKSx1P3ModCxlLG4pLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChpLmEpKHQpP3UuYXBwbHkodm9pZCAwLHQpOnUodCl9KSk6bmV3IHIuYShmdW5jdGlvbihyKXshZnVuY3Rpb24gdChlLG4scixpLG8pe3ZhciBhO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVFdmVudExpc3RlbmVyfShlKSl7dmFyIHM9ZTtlLmFkZEV2ZW50TGlzdGVuZXIobixyLG8pLGE9ZnVuY3Rpb24oKXtyZXR1cm4gcy5yZW1vdmVFdmVudExpc3RlbmVyKG4scixvKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub24mJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9mZn0oZSkpe3ZhciB1PWU7ZS5vbihuLHIpLGE9ZnVuY3Rpb24oKXtyZXR1cm4gdS5vZmYobixyKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWRkTGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUxpc3RlbmVyfShlKSl7dmFyIGw9ZTtlLmFkZExpc3RlbmVyKG4sciksYT1mdW5jdGlvbigpe3JldHVybiBsLnJlbW92ZUxpc3RlbmVyKG4scil9fWVsc2V7aWYoIWV8fCFlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO2Zvcih2YXIgYz0wLGY9ZS5sZW5ndGg7YzxmO2MrKyl0KGVbY10sbixyLGksbyl9aS5hZGQoYSl9KHQsZSxmdW5jdGlvbih0KXtyLm5leHQoYXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk6dCl9LHIsbil9KX1PYmplY3R9LGJ1anQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9bigiQ2NuRyIpLGk9KG4oIlVvZEgiKSxuKCJJcDBSIiksbigiRnpxYyIpLG4oIldmNHAiKSksbz1uKCJkV1pnIiksYT1uKCJ3RncxIikscz0obigibExBUCIpLHIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZTtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXJhaXNlZC1idXR0b257dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1pY29uLWJ1dHRvbiBpe2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKSxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9fS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTpibG9jaztmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24sLm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtbWluaS1mYWIsLm1hdC1yYWlzZWQtYnV0dG9ue291dGxpbmU6c29saWQgMXB4fX0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHIuaWIoMixbci5lYig0MDI2NTMxODQsMSx7cmlwcGxlOjB9KSwodCgpKCksci5PYSgxLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImNsYXNzIiwibWF0LWJ1dHRvbi13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuWGEobnVsbCwwKSwodCgpKCksci5PYSgzLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXJpcHBsZSBtYXQtcmlwcGxlIl0sWyJtYXRSaXBwbGUiLCIiXV0sW1syLCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsbnVsbF0sWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuTmEoNCwyMTI5OTIsW1sxLDRdXSwwLGkucSxbci5rLHIueCxvLmEsWzIsaS5nXSxbMixhLmFdXSx7Y2VudGVyZWQ6WzAsImNlbnRlcmVkIl0sZGlzYWJsZWQ6WzEsImRpc2FibGVkIl0sdHJpZ2dlcjpbMiwidHJpZ2dlciJdfSxudWxsKSwodCgpKCksci5PYSg1LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDQsMCxuLmlzSWNvbkJ1dHRvbixuLl9pc1JpcHBsZURpc2FibGVkKCksbi5fZ2V0SG9zdEVsZW1lbnQoKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDMsMCxuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uLHIuWWEoZSw0KS51bmJvdW5kZWQpfSl9fSxjcm5kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17Ii4vc3VwcG9ydC1zZWN0aW9uL3N1cHBvcnQtc2VjdGlvbi1sYXllci5tb2R1bGUubmdmYWN0b3J5IjpbIk40bHAiLDBdLCIuL3RlYW0tcm9zdGVyL3RlYW0tcm9zdGVyLWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiVGtZayIsMV0sIi4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUubmdmYWN0b3J5IjpbImdEamMiLDJdfTtmdW5jdGlvbiBpKHQpe3ZhciBlPXJbdF07cmV0dXJuIGU/bi5lKGVbMV0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbihlWzBdKX0pOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT1uZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIG1vZHVsZSAiJyt0KyciLicpO3Rocm93IGUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZX0pfWkua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhyKX0saS5pZD0iY3JuZCIsdC5leHBvcnRzPWl9LGRXWmc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgcixpPW4oIkNjbkciKSxvPW4oIklwMFIiKSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCYmSW50bC52OEJyZWFrSXRlcmF0b3Iscz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcGxhdGZvcm1JZD10LHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/T2JqZWN0KG8ucSkodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhYSkmJiJ1bmRlZmluZWQiIT10eXBlb2YgQ1NTJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cuTVNTdHJlYW0sdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH1yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoaS56LDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gdSgpe2lmKG51bGw9PXImJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcj0hMH19KSl9ZmluYWxseXtyPXJ8fCExfXJldHVybiByfXZhciBsPWZ1bmN0aW9uKCl7fX0sZURrUDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gRH0pO3ZhciByPW4oIkNjbkciKSxpPW4oIm42Z0ciKSxvPW4oInFBbFMiKSxhPW4oIklwMFIiKSxzPW4oIm1yU0ciKSx1PW4oIks5SWEiKSxsPW4oInB1Z1QiKSxjPW4oIjZibEYiKSxmPW4oInQ5ZloiKSxoPW4oImRXWmciKSxkPW4oIjRjMzUiKSxwPShuKCJZU2gyIiksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbigpe30sdH0oKSksbT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuc2Nyb2xsU3RyYXRlZ3k9bmV3IHAsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITEsdGhpcy5iYWNrZHJvcENsYXNzPSJjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wIix0JiZPYmplY3Qua2V5cyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRbZV19KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlW25dPXRbbl19KX19KCk7ZnVuY3Rpb24geSh0LGUpe2lmKCJ0b3AiIT09ZSYmImJvdHRvbSIhPT1lJiYiY2VudGVyIiE9PWUpdGhyb3cgRXJyb3IoIkNvbm5lY3RlZFBvc2l0aW9uOiBJbnZhbGlkICIrdCsnICInK2UrJyIuIEV4cGVjdGVkICJ0b3AiLCAiYm90dG9tIiBvciAiY2VudGVyIi4nKX1mdW5jdGlvbiBnKHQsZSl7aWYoInN0YXJ0IiE9PWUmJiJlbmQiIT09ZSYmImNlbnRlciIhPT1lKXRocm93IEVycm9yKCJDb25uZWN0ZWRQb3NpdGlvbjogSW52YWxpZCAiK3QrJyAiJytlKyciLiBFeHBlY3RlZCAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIi4nKX12YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzPXt0b3A6IiIsbGVmdDoiIn0sdGhpcy5faXNFbmFibGVkPSExLHRoaXMuX2RvY3VtZW50PWV9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5fY2FuQmVFbmFibGVkKCkpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0PXQuc3R5bGUubGVmdHx8IiIsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcD10LnN0eWxlLnRvcHx8IiIsdC5zdHlsZS5sZWZ0PU9iamVjdChpLmMpKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpLHQuc3R5bGUudG9wPU9iamVjdChpLmMpKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5jbGFzc0xpc3QuYWRkKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdGhpcy5faXNFbmFibGVkPSEwfX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2lzRW5hYmxlZCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9dGhpcy5fZG9jdW1lbnQuYm9keSxuPXQuc3R5bGUuc2Nyb2xsQmVoYXZpb3J8fCIiLHI9ZS5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiI7dGhpcy5faXNFbmFibGVkPSExLHQuc3R5bGUubGVmdD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdCx0LnN0eWxlLnRvcD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9ZS5zdHlsZS5zY3JvbGxCZWhhdmlvcj0iYXV0byIsd2luZG93LnNjcm9sbCh0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQsdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9bixlLnN0eWxlLnNjcm9sbEJlaGF2aW9yPXJ9fSx0LnByb3RvdHlwZS5fY2FuQmVFbmFibGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpfHx0aGlzLl9pc0VuYWJsZWQpcmV0dXJuITE7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuYm9keSxlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJuIHQuc2Nyb2xsSGVpZ2h0PmUuaGVpZ2h0fHx0LnNjcm9sbFdpZHRoPmUud2lkdGh9LHR9KCk7ZnVuY3Rpb24gYigpe3JldHVybiBFcnJvcigiU2Nyb2xsIHN0cmF0ZWd5IGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQuIil9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX3ZpZXdwb3J0UnVsZXI9bix0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9kZXRhY2g9ZnVuY3Rpb24oKXtpLmRpc2FibGUoKSxpLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJmkuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gaS5fb3ZlcmxheVJlZi5kZXRhY2goKX0pfX1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX292ZXJsYXlSZWYpdGhyb3cgYigpO3RoaXMuX292ZXJsYXlSZWY9dH0sdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uKXt2YXIgZT10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKDApO3RoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLnRocmVzaG9sZCYmdGhpcy5fY29uZmlnLnRocmVzaG9sZD4xPyh0aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1lLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciBlPXQuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcDtNYXRoLmFicyhlLXQuX2luaXRpYWxTY3JvbGxQb3NpdGlvbik+dC5fY29uZmlnLnRocmVzaG9sZD90Ll9kZXRhY2goKTp0Ll9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSk6dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKHRoaXMuX2RldGFjaCl9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfSx0fSgpO2Z1bmN0aW9uIHcodCxlKXtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0LmJvdHRvbTxlLnRvcHx8dC50b3A+ZS5ib3R0b218fHQucmlnaHQ8ZS5sZWZ0fHx0LmxlZnQ+ZS5yaWdodH0pfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0LnRvcDxlLnRvcHx8dC5ib3R0b20+ZS5ib3R0b218fHQubGVmdDxlLmxlZnR8fHQucmlnaHQ+ZS5yaWdodH0pfXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NvbmZpZz1yLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7aWYodGhpcy5fb3ZlcmxheVJlZil0aHJvdyBiKCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7aWYodC5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHQuX2NvbmZpZyYmdC5fY29uZmlnLmF1dG9DbG9zZSl7dmFyIGU9dC5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCkscj1uLndpZHRoLGk9bi5oZWlnaHQ7dyhlLFt7d2lkdGg6cixoZWlnaHQ6aSxib3R0b206aSxyaWdodDpyLHRvcDowLGxlZnQ6MH1dKSYmKHQuZGlzYWJsZSgpLHQuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fb3ZlcmxheVJlZi5kZXRhY2goKX0pKX19KSl9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCksQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMubm9vcD1mdW5jdGlvbigpe3JldHVybiBuZXcgcH0sdGhpcy5jbG9zZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IF8oaS5fc2Nyb2xsRGlzcGF0Y2hlcixpLl9uZ1pvbmUsaS5fdmlld3BvcnRSdWxlcix0KX0sdGhpcy5ibG9jaz1mdW5jdGlvbigpe3JldHVybiBuZXcgdihpLl92aWV3cG9ydFJ1bGVyLGkuX2RvY3VtZW50KX0sdGhpcy5yZXBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTyhpLl9zY3JvbGxEaXNwYXRjaGVyLGkuX3ZpZXdwb3J0UnVsZXIsaS5fbmdab25lLHQpfSx0aGlzLl9kb2N1bWVudD1yfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShvLmMpLE9iamVjdChyLlYpKG8uZSksT2JqZWN0KHIuVikoci54KSxPYmplY3Qoci5WKShhLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksUz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9hdHRhY2hlZE92ZXJsYXlzPVtdLHRoaXMuX2tleWRvd25MaXN0ZW5lcj1mdW5jdGlvbih0KXtlLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmZS5fYXR0YWNoZWRPdmVybGF5c1tlLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aC0xXS5fa2V5ZG93bkV2ZW50cy5uZXh0KHQpfSx0aGlzLl9kb2N1bWVudD10fXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2RldGFjaCgpfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dGhpcy5faXNBdHRhY2hlZHx8KHRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyLCEwKSx0aGlzLl9pc0F0dGFjaGVkPSEwKSx0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnB1c2godCl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmluZGV4T2YodCk7ZT4tMSYmdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zcGxpY2UoZSwxKSwwPT09dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5sZW5ndGgmJnRoaXMuX2RldGFjaCgpfSx0LnByb3RvdHlwZS5fZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5faXNBdHRhY2hlZCYmKHRoaXMuX2RvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyLCEwKSx0aGlzLl9pc0F0dGFjaGVkPSExKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoYS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyRWxlbWVudCYmdGhpcy5fY29udGFpbmVyRWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyRWxlbWVudCl9LHQucHJvdG90eXBlLmdldENvbnRhaW5lckVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyRWxlbWVudHx8dGhpcy5fY3JlYXRlQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyRWxlbWVudH0sdC5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktY29udGFpbmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9jb250YWluZXJFbGVtZW50PXR9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKGEuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1uLHRoaXMuX2NvbmZpZz1yLHRoaXMuX25nWm9uZT1pLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1vLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgdS5hLHRoaXMuX2F0dGFjaG1lbnRzPW5ldyB1LmEsdGhpcy5fZGV0YWNobWVudHM9bmV3IHUuYSx0aGlzLl9rZXlkb3duRXZlbnRzPW5ldyB1LmEsci5zY3JvbGxTdHJhdGVneSYmci5zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3ZlcmxheUVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFuZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImJhY2tkcm9wRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcEVsZW1lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJob3N0RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ob3N0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaCh0KTtyZXR1cm4gdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KGYuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuaGFzQXR0YWNoZWQoKSYmZS51cGRhdGVQb3NpdGlvbigpfSksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMCksdGhpcy5fY29uZmlnLmhhc0JhY2tkcm9wJiZ0aGlzLl9hdHRhY2hCYWNrZHJvcCgpLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITApLHRoaXMuX2F0dGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIuYWRkKHRoaXMpLG59LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe2lmKHRoaXMuaGFzQXR0YWNoZWQoKSl7dGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITEpLHRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTt2YXIgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHR9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oYXNBdHRhY2hlZCgpO3RoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpLHRoaXMuZGV0YWNoQmFja2Ryb3AoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX3BvcnRhbE91dGxldC5kaXNwb3NlKCksdGhpcy5fYXR0YWNobWVudHMuY29tcGxldGUoKSx0aGlzLl9iYWNrZHJvcENsaWNrLmNvbXBsZXRlKCksdGhpcy5fa2V5ZG93bkV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hvc3QmJnRoaXMuX2hvc3QucGFyZW50Tm9kZSYmKHRoaXMuX2hvc3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9ob3N0KSx0aGlzLl9ob3N0PW51bGwpLHRoaXMuX3BhbmU9bnVsbCx0JiZ0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fZGV0YWNobWVudHMuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaGFzQXR0YWNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9LHQucHJvdG90eXBlLmJhY2tkcm9wQ2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BDbGljay5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuYXR0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmRldGFjaG1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5rZXlkb3duRXZlbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWRvd25FdmVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb25maWd9LHQucHJvdG90eXBlLnVwZGF0ZVBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9LHQucHJvdG90eXBlLnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dGhpcy5fY29uZmlnPU9iamVjdChzLmEpKHt9LHRoaXMuX2NvbmZpZyx0KSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfSx0LnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24odCl7dGhpcy5fY29uZmlnPU9iamVjdChzLmEpKHt9LHRoaXMuX2NvbmZpZyx7ZGlyZWN0aW9uOnR9KSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl9LHQucHJvdG90eXBlLmdldERpcmVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn0sdC5wcm90b3R5cGUuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb249ZnVuY3Rpb24oKXt0aGlzLl9ob3N0LnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmdldERpcmVjdGlvbigpKX0sdC5wcm90b3R5cGUuX3VwZGF0ZUVsZW1lbnRTaXplPWZ1bmN0aW9uKCl7KHRoaXMuX2NvbmZpZy53aWR0aHx8MD09PXRoaXMuX2NvbmZpZy53aWR0aCkmJih0aGlzLl9wYW5lLnN0eWxlLndpZHRoPU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy53aWR0aCkpLCh0aGlzLl9jb25maWcuaGVpZ2h0fHwwPT09dGhpcy5fY29uZmlnLmhlaWdodCkmJih0aGlzLl9wYW5lLnN0eWxlLmhlaWdodD1PYmplY3QoaS5jKSh0aGlzLl9jb25maWcuaGVpZ2h0KSksKHRoaXMuX2NvbmZpZy5taW5XaWR0aHx8MD09PXRoaXMuX2NvbmZpZy5taW5XaWR0aCkmJih0aGlzLl9wYW5lLnN0eWxlLm1pbldpZHRoPU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5taW5XaWR0aCkpLCh0aGlzLl9jb25maWcubWluSGVpZ2h0fHwwPT09dGhpcy5fY29uZmlnLm1pbkhlaWdodCkmJih0aGlzLl9wYW5lLnN0eWxlLm1pbkhlaWdodD1PYmplY3QoaS5jKSh0aGlzLl9jb25maWcubWluSGVpZ2h0KSksKHRoaXMuX2NvbmZpZy5tYXhXaWR0aHx8MD09PXRoaXMuX2NvbmZpZy5tYXhXaWR0aCkmJih0aGlzLl9wYW5lLnN0eWxlLm1heFdpZHRoPU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCkpLCh0aGlzLl9jb25maWcubWF4SGVpZ2h0fHwwPT09dGhpcy5fY29uZmlnLm1heEhlaWdodCkmJih0aGlzLl9wYW5lLnN0eWxlLm1heEhlaWdodD1PYmplY3QoaS5jKSh0aGlzLl9jb25maWcubWF4SGVpZ2h0KSl9LHQucHJvdG90eXBlLl90b2dnbGVQb2ludGVyRXZlbnRzPWZ1bmN0aW9uKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyJhdXRvIjoibm9uZSJ9LHQucHJvdG90eXBlLl9hdHRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcywhMCksdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5faG9zdCksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXtyZXR1cm4gdC5fYmFja2Ryb3BDbGljay5uZXh0KGUpfSksInVuZGVmaW5lZCIhPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dC5fYmFja2Ryb3BFbGVtZW50JiZ0Ll9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpfSx0LnByb3RvdHlwZS5fdXBkYXRlU3RhY2tpbmdPcmRlcj1mdW5jdGlvbigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX0sdC5wcm90b3R5cGUuZGV0YWNoQmFja2Ryb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fYmFja2Ryb3BFbGVtZW50O2lmKGUpe3ZhciBuPWZ1bmN0aW9uKCl7ZSYmZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksdC5fYmFja2Ryb3BFbGVtZW50PT1lJiYodC5fYmFja2Ryb3BFbGVtZW50PW51bGwpfTtlLmNsYXNzTGlzdC5yZW1vdmUoImNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmciKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3NlcyhlLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCExKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLG4pLGUuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQobiw1MDApfSl9fSx0LnByb3RvdHlwZS5fdG9nZ2xlQ2xhc3Nlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5jbGFzc0xpc3Q7T2JqZWN0KGkuYSkoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtuP3IuYWRkKHQpOnIucmVtb3ZlKHQpfSl9LHR9KCksVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5zY3JvbGxhYmxlcz1bXSx0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25DaGFuZ2VzPW5ldyB1LmEsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPWwuYS5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz0wLHRoaXMucG9zaXRpb25DaGFuZ2VzPWMuYS5jcmVhdGUoZnVuY3Rpb24odCl7dmFyIGU9aS5fcG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZSh0KTtyZXR1cm4gaS5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zKyssZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksaS5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zLS19fSksdGhpcy5zZXRPcmlnaW4odCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9vdmVybGF5UmVmJiZ0IT09dGhpcy5fb3ZlcmxheVJlZil0aHJvdyBFcnJvcigiVGhpcyBwb3NpdGlvbiBzdHJhdGVneSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFuIG92ZXJsYXkiKTt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIpLHRoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9ib3VuZGluZ0JveD10Lmhvc3RFbGVtZW50LHRoaXMuX3BhbmU9dC5vdmVybGF5RWxlbWVudCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSgpfSl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYoISh0aGlzLl9pc0Rpc3Bvc2VkfHx0aGlzLl9wbGF0Zm9ybSYmIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcikpaWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbil0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTtlbHNle3RoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3IodmFyIHQsZT10aGlzLl9vcmlnaW5SZWN0LG49dGhpcy5fb3ZlcmxheVJlY3Qscj10aGlzLl92aWV3cG9ydFJlY3QsaT1bXSxvPTAsYT10aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sdT10aGlzLl9nZXRPcmlnaW5Qb2ludChlLHMpLGw9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KHUsbixzKSxjPXRoaXMuX2dldE92ZXJsYXlGaXQobCxuLHIscyk7aWYoYy5pc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMsdSk7dGhpcy5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyhjLGwscik/aS5wdXNoKHtwb3NpdGlvbjpzLG9yaWdpbjp1LG92ZXJsYXlSZWN0Om4sYm91bmRpbmdCb3hSZWN0OnRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh1LHMpfSk6KCF0fHx0Lm92ZXJsYXlGaXQudmlzaWJsZUFyZWE8Yy52aXNpYmxlQXJlYSkmJih0PXtvdmVybGF5Rml0OmMsb3ZlcmxheVBvaW50Omwsb3JpZ2luUG9pbnQ6dSxwb3NpdGlvbjpzLG92ZXJsYXlSZWN0Om59KX1pZihpLmxlbmd0aCl7Zm9yKHZhciBmPW51bGwsaD0tMSxkPTAscD1pO2Q8cC5sZW5ndGg7ZCsrKXt2YXIgbT1wW2RdLHk9bS5ib3VuZGluZ0JveFJlY3Qud2lkdGgqbS5ib3VuZGluZ0JveFJlY3QuaGVpZ2h0KihtLnBvc2l0aW9uLndlaWdodHx8MSk7eT5oJiYoaD15LGY9bSl9cmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihmLnBvc2l0aW9uLGYub3JpZ2luKX1pZih0aGlzLl9jYW5QdXNoKXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMCx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQucG9zaXRpb24sdC5vcmlnaW5Qb2ludCl9fSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLmRldGFjaCgpLHRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5faXNEaXNwb3NlZD0hMCl9LHQucHJvdG90eXBlLnJlYXBwbHlMYXN0UG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy5faXNEaXNwb3NlZCYmKCF0aGlzLl9wbGF0Zm9ybXx8dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKTt2YXIgdD10aGlzLl9sYXN0UG9zaXRpb258fHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc1swXSxlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LGUpfX0sdC5wcm90b3R5cGUud2l0aFNjcm9sbGFibGVDb250YWluZXJzPWZ1bmN0aW9uKHQpe3RoaXMuc2Nyb2xsYWJsZXM9dH0sdC5wcm90b3R5cGUud2l0aFBvc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLndpdGhWaWV3cG9ydE1hcmdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRNYXJnaW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoRmxleGlibGVEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEdyb3dBZnRlck9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9jYW5QdXNoPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aExvY2tlZFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfSx0LnByb3RvdHlwZS5zZXRPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10IGluc3RhbmNlb2Ygci5rP3QubmF0aXZlRWxlbWVudDp0LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9LHQucHJvdG90eXBlLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfSx0LnByb3RvdHlwZS5fZ2V0T3JpZ2luUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtpZigiY2VudGVyIj09ZS5vcmlnaW5YKW49dC5sZWZ0K3Qud2lkdGgvMjtlbHNle3ZhciByPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQsaT10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O249InN0YXJ0Ij09ZS5vcmlnaW5YP3I6aX1yZXR1cm57eDpuLHk6ImNlbnRlciI9PWUub3JpZ2luWT90LnRvcCt0LmhlaWdodC8yOiJ0b3AiPT1lLm9yaWdpblk/dC50b3A6dC5ib3R0b219fSx0LnByb3RvdHlwZS5fZ2V0T3ZlcmxheVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iY2VudGVyIj09bi5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1uLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgse3g6dC54K3IseTp0LnkrKCJjZW50ZXIiPT1uLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1uLm92ZXJsYXlZPzA6LWUuaGVpZ2h0KX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5Rml0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxvPXQueSxhPXRoaXMuX2dldE9mZnNldChyLCJ4Iikscz10aGlzLl9nZXRPZmZzZXQociwieSIpO2EmJihpKz1hKSxzJiYobys9cyk7dmFyIHU9MC1vLGw9bytlLmhlaWdodC1uLmhlaWdodCxjPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUud2lkdGgsMC1pLGkrZS53aWR0aC1uLndpZHRoKSxmPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUuaGVpZ2h0LHUsbCksaD1jKmY7cmV0dXJue3Zpc2libGVBcmVhOmgsaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQ6ZS53aWR0aCplLmhlaWdodD09PWgsZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5OmY9PT1lLmhlaWdodCxmaXRzSW5WaWV3cG9ydEhvcml6b250YWxseTpjPT1lLndpZHRofX0sdC5wcm90b3R5cGUuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7dmFyIHI9bi5ib3R0b20tZS55LGk9bi5yaWdodC1lLngsbz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluV2lkdGg7cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1vJiZvPD1yKSYmKHQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPWEmJmE8PWkpfX0sdC5wcm90b3R5cGUuX3B1c2hPdmVybGF5T25TY3JlZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl92aWV3cG9ydFJlY3Qscj1NYXRoLm1heCh0LngrZS53aWR0aC1uLnJpZ2h0LDApLGk9TWF0aC5tYXgodC55K2UuaGVpZ2h0LW4uYm90dG9tLDApLG89TWF0aC5tYXgobi50b3AtdC55LDApLGE9TWF0aC5tYXgobi5sZWZ0LXQueCwwKTtyZXR1cm57eDp0LngrKGUud2lkdGg8PW4ud2lkdGg/YXx8LXI6bi5sZWZ0LXQueCkseTp0LnkrKGUuaGVpZ2h0PD1uLmhlaWdodD9vfHwtaTpuLnRvcC10LnkpfX0sdC5wcm90b3R5cGUuX2FwcGx5UG9zaXRpb249ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHRoaXMuX2xhc3RQb3NpdGlvbj10LHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz4wKXt2YXIgbj1uZXcgZnVuY3Rpb24odCxlKXt0aGlzLmNvbm5lY3Rpb25QYWlyPXQsdGhpcy5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXM9ZX0odCx0aGlzLl9nZXRTY3JvbGxWaXNpYmlsaXR5KCkpO3RoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5uZXh0KG4pfXRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMX0sdC5wcm90b3R5cGUuX3NldFRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbih0KXtpZih0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil7dmFyIGUsbj10aGlzLl9ib3VuZGluZ0JveC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKSxyPXQub3ZlcmxheVk7ZT0iY2VudGVyIj09PXQub3ZlcmxheVg/ImNlbnRlciI6dGhpcy5faXNSdGwoKT8ic3RhcnQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0Ijoic3RhcnQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0Ijtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj1lKyIgIityfX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvLGEscyx1PXRoaXMuX3ZpZXdwb3J0UmVjdCxsPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXI9dC55LG49dS5ib3R0b20tdC55O2Vsc2UgaWYoImJvdHRvbSI9PT1lLm92ZXJsYXlZKW49dS5oZWlnaHQtKGk9dS5oZWlnaHQtdC55KzIqdGhpcy5fdmlld3BvcnRNYXJnaW4pK3RoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2V7dmFyIGM9TWF0aC5taW4odS5ib3R0b20tdC55LHQueS11LmxlZnQpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7cj10LnktYywobj0yKmMpPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocj10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFsfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmbClzPXUucmlnaHQtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLG89dC54LXUubGVmdDtlbHNlIGlmKCJzdGFydCI9PT1lLm92ZXJsYXlYJiYhbHx8ImVuZCI9PT1lLm92ZXJsYXlYJiZsKWE9dC54LG89dS5yaWdodC10Lng7ZWxzZXtjPU1hdGgubWluKHUucmlnaHQtdC54LHQueC11LnRvcCk7dmFyIGg9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDthPXQueC1jLChvPTIqYyk+aCYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueC1oLzIpfXJldHVybnt0b3A6cixsZWZ0OmEsYm90dG9tOmkscmlnaHQ6cyx3aWR0aDpvLGhlaWdodDpufX0sdC5wcm90b3R5cGUuX3NldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHQsZSk7dGhpcy5faXNJbml0aWFsUmVuZGVyfHx0aGlzLl9ncm93QWZ0ZXJPcGVufHwobi5oZWlnaHQ9TWF0aC5taW4obi5oZWlnaHQsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQpLG4ud2lkdGg9TWF0aC5taW4obi53aWR0aCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoKSk7dmFyIHI9e307aWYodGhpcy5faGFzRXhhY3RQb3NpdGlvbigpKXIudG9wPXIubGVmdD0iMCIsci5ib3R0b209ci5yaWdodD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle3ZhciBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1PYmplY3QoaS5jKShuLmhlaWdodCksci50b3A9T2JqZWN0KGkuYykobi50b3ApLHIuYm90dG9tPU9iamVjdChpLmMpKG4uYm90dG9tKSxyLndpZHRoPU9iamVjdChpLmMpKG4ud2lkdGgpLHIubGVmdD1PYmplY3QoaS5jKShuLmxlZnQpLHIucmlnaHQ9T2JqZWN0KGkuYykobi5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1PYmplY3QoaS5jKShvKSksYSYmKHIubWF4V2lkdGg9T2JqZWN0KGkuYykoYSkpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9bixJKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHIpfSx0LnByb3RvdHlwZS5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcz1mdW5jdGlvbigpe0kodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiMCIsbGVmdDoiMCIscmlnaHQ6IjAiLGJvdHRvbToiMCIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KX0sdC5wcm90b3R5cGUuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXM9ZnVuY3Rpb24oKXtJKHRoaXMuX3BhbmUuc3R5bGUse3RvcDoiIixsZWZ0OiIiLGJvdHRvbToiIixyaWdodDoiIixwb3NpdGlvbjoiIn0pfSx0LnByb3RvdHlwZS5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTt0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCk/KEkobix0aGlzLl9nZXRFeGFjdE92ZXJsYXlZKGUsdCkpLEkobix0aGlzLl9nZXRFeGFjdE92ZXJsYXlYKGUsdCkpKTpuLnBvc2l0aW9uPSJzdGF0aWMiO3ZhciByPSIiLGk9dGhpcy5fZ2V0T2Zmc2V0KGUsIngiKSxvPXRoaXMuX2dldE9mZnNldChlLCJ5Iik7aSYmKHIrPSJ0cmFuc2xhdGVYKCIraSsicHgpICIpLG8mJihyKz0idHJhbnNsYXRlWSgiK28rInB4KSIpLG4udHJhbnNmb3JtPXIudHJpbSgpLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyYmdGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQmJihuLm1heEhlaWdodD0iIiksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoJiYobi5tYXhXaWR0aD0iIiksSSh0aGlzLl9wYW5lLnN0eWxlLG4pfSx0LnByb3RvdHlwZS5fZ2V0RXhhY3RPdmVybGF5WT1mdW5jdGlvbih0LGUpe3ZhciBuPXt0b3A6bnVsbCxib3R0b206bnVsbH0scj10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihyPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4ocix0aGlzLl9vdmVybGF5UmVjdCkpLCJib3R0b20iPT09dC5vdmVybGF5WT9uLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShyLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOm4udG9wPU9iamVjdChpLmMpKHIueSksbn0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVg9ZnVuY3Rpb24odCxlKXt2YXIgbj17bGVmdDpudWxsLHJpZ2h0Om51bGx9LHI9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYocj10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKHIsdGhpcy5fb3ZlcmxheVJlY3QpKSwicmlnaHQiPT0odGhpcy5faXNSdGwoKT8iZW5kIj09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI6ImVuZCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiKT9uLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oci54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOm4ubGVmdD1PYmplY3QoaS5jKShyLngpLG59LHQucHJvdG90eXBlLl9nZXRTY3JvbGxWaXNpYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuc2Nyb2xsYWJsZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSk7cmV0dXJue2lzT3JpZ2luQ2xpcHBlZDp4KHQsbiksaXNPcmlnaW5PdXRzaWRlVmlldzp3KHQsbiksaXNPdmVybGF5Q2xpcHBlZDp4KGUsbiksaXNPdmVybGF5T3V0c2lkZVZpZXc6dyhlLG4pfX0sdC5wcm90b3R5cGUuX3N1YnRyYWN0T3ZlcmZsb3dzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LU1hdGgubWF4KGUsMCl9LHQpfSx0LnByb3RvdHlwZS5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LG49dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDpuLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0Om4ubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDpuLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206bi50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19LHQucHJvdG90eXBlLl9pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuX2hhc0V4YWN0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH0sdC5wcm90b3R5cGUuX2dldE9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlUG9zaXRpb25zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5sZW5ndGgpdGhyb3cgRXJyb3IoIkZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTogQXQgbGVhc3Qgb25lIHBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2coIm9yaWdpblgiLHQub3JpZ2luWCkseSgib3JpZ2luWSIsdC5vcmlnaW5ZKSxnKCJvdmVybGF5WCIsdC5vdmVybGF5WCkseSgib3ZlcmxheVkiLHQub3ZlcmxheVkpfSl9LHR9KCk7ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pO3JldHVybiB0fXZhciBBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyl7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9bmV3IFQobixyLGksbykud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFB1c2goITEpLndpdGhWaWV3cG9ydE1hcmdpbigwKSx0aGlzLndpdGhGYWxsYmFja1Bvc2l0aW9uKHQsZSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2lzUnRsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib25Qb3NpdGlvbkNoYW5nZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBvc2l0aW9ucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0KSx0aGlzLl9kaXJlY3Rpb24mJih0LnNldERpcmVjdGlvbih0aGlzLl9kaXJlY3Rpb24pLHRoaXMuX2RpcmVjdGlvbj1udWxsKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCgpfSx0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUucmVjYWxjdWxhdGVMYXN0UG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUud2l0aFNjcm9sbGFibGVDb250YWluZXJzPWZ1bmN0aW9uKHQpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpfSx0LnByb3RvdHlwZS53aXRoRmFsbGJhY2tQb3NpdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uZXcgZnVuY3Rpb24odCxlLG4scil7dGhpcy5vZmZzZXRYPW4sdGhpcy5vZmZzZXRZPXIsdGhpcy5vcmlnaW5YPXQub3JpZ2luWCx0aGlzLm9yaWdpblk9dC5vcmlnaW5ZLHRoaXMub3ZlcmxheVg9ZS5vdmVybGF5WCx0aGlzLm92ZXJsYXlZPWUub3ZlcmxheVl9KHQsZSxuLHIpO3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMucHVzaChpKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKSx0aGlzfSx0LnByb3RvdHlwZS53aXRoRGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuc2V0RGlyZWN0aW9uKHQpOnRoaXMuX2RpcmVjdGlvbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhPZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WCh0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoT2Zmc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoRGVmYXVsdE9mZnNldFkodCksdGhpc30sdC5wcm90b3R5cGUud2l0aExvY2tlZFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhMb2NrZWRQb3NpdGlvbih0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dC5zbGljZSgpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9LHQucHJvdG90eXBlLnNldE9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS5zZXRPcmlnaW4odCksdGhpc30sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX2p1c3RpZnlDb250ZW50PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIn1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3dpZHRoJiYhZS53aWR0aCYmdC51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl93aWR0aH0pLHRoaXMuX2hlaWdodCYmIWUuaGVpZ2h0JiZ0LnVwZGF0ZVNpemUoe2hlaWdodDp0aGlzLl9oZWlnaHR9KSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIil9LHQucHJvdG90eXBlLnRvcD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfSx0LnByb3RvdHlwZS5sZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fcmlnaHRPZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iix0aGlzfSx0LnByb3RvdHlwZS5ib3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9LHQucHJvdG90eXBlLnJpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dH0pOnRoaXMuX3dpZHRoPXQsdGhpc30sdC5wcm90b3R5cGUuaGVpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe2hlaWdodDp0fSk6dGhpcy5faGVpZ2h0PXQsdGhpc30sdC5wcm90b3R5cGUuY2VudGVySG9yaXpvbnRhbGx5PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5sZWZ0KHQpLHRoaXMuX2p1c3RpZnlDb250ZW50PSJjZW50ZXIiLHRoaXN9LHQucHJvdG90eXBlLmNlbnRlclZlcnRpY2FsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYodGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXt2YXIgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxuPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCk7dC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9IjEwMCUiPT09bi53aWR0aD8iMCI6dGhpcy5fbGVmdE9mZnNldCx0Lm1hcmdpblRvcD0iMTAwJSI9PT1uLmhlaWdodD8iMCI6dGhpcy5fdG9wT2Zmc2V0LHQubWFyZ2luQm90dG9tPXRoaXMuX2JvdHRvbU9mZnNldCx0Lm1hcmdpblJpZ2h0PXRoaXMuX3JpZ2h0T2Zmc2V0LGUuanVzdGlmeUNvbnRlbnQ9IjEwMCUiPT09bi53aWR0aD8iZmxleC1zdGFydCI6dGhpcy5fanVzdGlmeUNvbnRlbnQsZS5hbGlnbkl0ZW1zPSIxMDAlIj09PW4uaGVpZ2h0PyJmbGV4LXN0YXJ0Ijp0aGlzLl9hbGlnbkl0ZW1zfX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sdH0oKSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX2RvY3VtZW50PWUsdGhpcy5fcGxhdGZvcm09bn1yZXR1cm4gdC5wcm90b3R5cGUuZ2xvYmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqfSx0LnByb3RvdHlwZS5jb25uZWN0ZWRUbz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG5ldyBBKGUsbix0LHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQpfSx0LnByb3RvdHlwZS5mbGV4aWJsZUNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVCh0LHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fcGxhdGZvcm0pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShvLmUpLE9iamVjdChyLlYpKGEuZCksT2JqZWN0KHIuVikoaC5hLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksTT0wLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyx1KXt0aGlzLnNjcm9sbFN0cmF0ZWdpZXM9dCx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWUsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sdGhpcy5fcG9zaXRpb25CdWlsZGVyPXIsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPWksdGhpcy5faW5qZWN0b3I9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9kb2N1bWVudD1zLHRoaXMuX2RpcmVjdGlvbmFsaXR5PXV9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9jcmVhdGVIb3N0RWxlbWVudCgpLG49dGhpcy5fY3JlYXRlUGFuZUVsZW1lbnQoZSkscj10aGlzLl9jcmVhdGVQb3J0YWxPdXRsZXQobiksaT1uZXcgbSh0KTtyZXR1cm4gaS5kaXJlY3Rpb249aS5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBrKHIsZSxuLGksdGhpcy5fbmdab25lLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn0sdC5wcm90b3R5cGUuX2NyZWF0ZVBhbmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmlkPSJjZGstb3ZlcmxheS0iK00rKyxlLmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LXBhbmUiKSx0LmFwcGVuZENoaWxkKGUpLGV9LHQucHJvdG90eXBlLl9jcmVhdGVIb3N0RWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZCh0KSx0fSx0LnByb3RvdHlwZS5fY3JlYXRlUG9ydGFsT3V0bGV0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcHBSZWZ8fCh0aGlzLl9hcHBSZWY9dGhpcy5faW5qZWN0b3IuZ2V0KHIuZykpLG5ldyBkLmIodCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yKX0sdH0oKSxSPW5ldyByLm8oImNkay1jb25uZWN0ZWQtb3ZlcmxheS1zY3JvbGwtc3RyYXRlZ3kiKTtmdW5jdGlvbiBEKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgTD1mdW5jdGlvbigpe319LGVpaHM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPXtlOnt9fX0sZ0kzQjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIjZibEYiKSxpPW4oIlQxRE0iKSxvPW4oImlzYnkiKTtmdW5jdGlvbiBhKHQpe3JldHVybiFPYmplY3Qoby5hKSh0KSYmdC1wYXJzZUZsb2F0KHQpKzE+PTB9dmFyIHM9bigibmtZNyIpO2Z1bmN0aW9uIHUodCxlLG4pe3ZvaWQgMD09PXQmJih0PTApO3ZhciBvPS0xO3JldHVybiBhKGUpP289TnVtYmVyKGUpPDE/MTpOdW1iZXIoZSk6T2JqZWN0KHMuYSkoZSkmJihuPWUpLE9iamVjdChzLmEpKG4pfHwobj1pLmEpLG5ldyByLmEoZnVuY3Rpb24oZSl7dmFyIHI9YSh0KT90Oit0LW4ubm93KCk7cmV0dXJuIG4uc2NoZWR1bGUobCxyLHtpbmRleDowLHBlcmlvZDpvLHN1YnNjcmliZXI6ZX0pfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10LmluZGV4LG49dC5wZXJpb2Qscj10LnN1YnNjcmliZXI7aWYoci5uZXh0KGUpLCFyLmNsb3NlZCl7aWYoLTE9PT1uKXJldHVybiByLmNvbXBsZXRlKCk7dC5pbmRleD1lKzEsdGhpcy5zY2hlZHVsZSh0LG4pfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pfSxnSWNZOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuKCJtclNHIik7dmFyIHI9bigiQ2NuRyIpO24oIlZOcjQiKSxuKCIwL3VRIiksbigiNjdZLyIpLG4oIlpZanQiKTt2YXIgaT1uZXcgci5vKCJOZ1ZhbHVlQWNjZXNzb3IiKX0saDlEcTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMpfHx0aGlzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSx0aGlzfSxlfShuKCJwdWdUIikuYSk7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9ZSxyLndvcms9bixyLnBlbmRpbmc9ITEscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPXQ7dmFyIG49dGhpcy5pZCxyPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1uJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHIsbixlKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9ZSx0aGlzLmlkPXRoaXMuaWR8fHRoaXMucmVxdWVzdEFzeW5jSWQocix0aGlzLmlkLGUpLHRoaXN9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksbil9LGUucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj0wKSxudWxsIT09biYmdGhpcy5kZWxheT09PW4mJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO2NsZWFySW50ZXJ2YWwoZSl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO3ZhciBuPXRoaXMuX2V4ZWN1dGUodCxlKTtpZihuKXJldHVybiBuOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfSxlLnByb3RvdHlwZS5fZXhlY3V0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSExLHI9dm9pZCAwO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2godCl7bj0hMCxyPSEhdCYmdHx8bmV3IEVycm9yKHQpfWlmKG4pcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlkLGU9dGhpcy5zY2hlZHVsZXIsbj1lLmFjdGlvbnMscj1uLmluZGV4T2YodGhpcyk7dGhpcy53b3JrPW51bGwsdGhpcy5zdGF0ZT1udWxsLHRoaXMucGVuZGluZz0hMSx0aGlzLnNjaGVkdWxlcj1udWxsLC0xIT09ciYmbi5zcGxpY2UociwxKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsfSxlfShpKX0saFVXUDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbigibXJTRyIpLG4oIkNjbkciKSxuKCJJcDBSIiksbigiT3pmQiIpO3ZhciByPWZ1bmN0aW9uKCl7fX0saUx4UTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9ITEsaT17UHJvbWlzZTp2b2lkIDAsc2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcodCl7cj10fSxnZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZygpe3JldHVybiByfX19LGloWVk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KTt2YXIgcj1mdW5jdGlvbigpe30saT1mdW5jdGlvbigpe30sbz0iKiI7ZnVuY3Rpb24gYSh0LGUpe3JldHVybnt0eXBlOjcsbmFtZTp0LGRlZmluaXRpb25zOmUsb3B0aW9uczp7fX19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1udWxsKSx7dHlwZTo0LHN0eWxlczplLHRpbWluZ3M6dH19ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1udWxsKSx7dHlwZTozLHN0ZXBzOnQsb3B0aW9uczplfX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjIsc3RlcHM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGModCl7cmV0dXJue3R5cGU6NixzdHlsZXM6dCxvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gZih0LGUsbil7cmV0dXJue3R5cGU6MCxuYW1lOnQsc3R5bGVzOmUsb3B0aW9uczpufX1mdW5jdGlvbiBoKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCkse3R5cGU6MSxleHByOnQsYW5pbWF0aW9uOmUsb3B0aW9uczpufX1mdW5jdGlvbiBkKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSx7dHlwZTo5LG9wdGlvbnM6dH19ZnVuY3Rpb24gcCh0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPW51bGwpLHt0eXBlOjExLHNlbGVjdG9yOnQsYW5pbWF0aW9uOmUsb3B0aW9uczpufX1mdW5jdGlvbiBtKHQpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKHQpfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PWUmJihlPTApLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPXQrZX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH0sdC5wcm90b3R5cGUudHJpZ2dlck1pY3JvdGFzaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7bShmdW5jdGlvbigpe3JldHVybiB0Ll9vbkZpbmlzaCgpfSl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fb25GaW5pc2goKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRGVzdHJveUZucz1bXSl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksZS5sZW5ndGg9MH0sdH0oKSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7dmFyIG49MCxyPTAsaT0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP20oZnVuY3Rpb24oKXtyZXR1cm4gZS5fb25GaW5pc2goKX0pOnRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qub25Eb25lKGZ1bmN0aW9uKCl7KytuPT1vJiZlLl9vbkZpbmlzaCgpfSksdC5vbkRlc3Ryb3koZnVuY3Rpb24oKXsrK3I9PW8mJmUuX29uRGVzdHJveSgpfSksdC5vblN0YXJ0KGZ1bmN0aW9uKCl7KytpPT1vJiZlLl9vblN0YXJ0KCl9KX0pLHRoaXMudG90YWxUaW1lPXRoaXMucGxheWVycy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnRvdGFsVGltZSl9LDApfXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5pdCgpfSl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5fb25TdGFydD1mdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W10pfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5wbGF5KCl9KX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXVzZSgpfSl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXN0YXJ0KCl9KX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fb25EZXN0cm95KCl9LHQucHJvdG90eXBlLl9vbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNldCgpfSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC50b3RhbFRpbWU/TWF0aC5taW4oMSxlL3QudG90YWxUaW1lKToxO3Quc2V0UG9zaXRpb24obil9KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1lLmdldFBvc2l0aW9uKCk7dD1NYXRoLm1pbihuLHQpfSksdH0sdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYmVmb3JlRGVzdHJveSYmdC5iZWZvcmVEZXN0cm95KCl9KX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHY9IiEifSxpc2J5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aH19LGxMQVA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gT30pO3ZhciByPW4oIklwMFIiKSxpPW4oIkNjbkciKSxvPW4oIks5SWEiKSxhPW4oInB1Z1QiKSxzPW4oIkYvWEwiKSx1PW4oIllTaDIiKSxsPW4oInhNeUUiKSxjPW4oIkdpM2kiKSxmPW4oIlZuRC8iKSxoPW4oIjY3WS8iKSxkPW4oInQ5ZloiKSxwPW4oIm1yU0ciKSxtPW4oImRXWmciKTtuKCJuNmdHIik7dmFyIHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fb3JpZ2luPSJwcm9ncmFtIixlfXJldHVybiBPYmplY3QocC5iKShlLHQpLGUucHJvdG90eXBlLnNldEZvY3VzT3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfSxlLnByb3RvdHlwZS5zZXRBY3RpdmVJdGVtPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW0uY2FsbCh0aGlzLGUpLHRoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLmZvY3VzKHRoaXMuX29yaWdpbil9LGV9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX3dyYXA9ITEsdGhpcy5fbGV0dGVyS2V5U3RyZWFtPW5ldyBvLmEsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPWEuYS5FTVBUWSx0aGlzLl92ZXJ0aWNhbD0hMCx0aGlzLl9za2lwUHJlZGljYXRlRm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzYWJsZWR9LHRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHRoaXMudGFiT3V0PW5ldyBvLmEsdGhpcy5jaGFuZ2U9bmV3IG8uYSx0IGluc3RhbmNlb2YgaS5CJiZ0LmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2lmKGUuX2FjdGl2ZUl0ZW0pe3ZhciBuPXQudG9BcnJheSgpLmluZGV4T2YoZS5fYWN0aXZlSXRlbSk7bj4tMSYmbiE9PWUuX2FjdGl2ZUl0ZW1JbmRleCYmKGUuX2FjdGl2ZUl0ZW1JbmRleD1uKX19KX1yZXR1cm4gdC5wcm90b3R5cGUuc2tpcFByZWRpY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFdyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcD0hMCx0aGlzfSx0LnByb3RvdHlwZS53aXRoVmVydGljYWxPcmllbnRhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX3ZlcnRpY2FsPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEhvcml6b250YWxPcmllbnRhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faG9yaXpvbnRhbD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhUeXBlQWhlYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2b2lkIDA9PT10JiYodD0yMDApLHRoaXMuX2l0ZW1zLmxlbmd0aCYmdGhpcy5faXRlbXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdC5nZXRMYWJlbH0pKXRocm93IEVycm9yKCJMaXN0S2V5TWFuYWdlciBpdGVtcyBpbiB0eXBlYWhlYWQgbW9kZSBtdXN0IGltcGxlbWVudCB0aGUgYGdldExhYmVsYCBtZXRob2QuIik7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj10aGlzLl9sZXR0ZXJLZXlTdHJlYW0ucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMucHVzaCh0KX0pLE9iamVjdChjLmEpKHQpLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfSksT2JqZWN0KGguYSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMuam9pbigiIil9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1lLl9nZXRJdGVtc0FycmF5KCkscj0xO3I8bi5sZW5ndGgrMTtyKyspe3ZhciBpPShlLl9hY3RpdmVJdGVtSW5kZXgrciklbi5sZW5ndGgsbz1uW2ldO2lmKCFlLl9za2lwUHJlZGljYXRlRm4obykmJjA9PT1vLmdldExhYmVsKCkudG9VcHBlckNhc2UoKS50cmltKCkuaW5kZXhPZih0KSl7ZS5zZXRBY3RpdmVJdGVtKGkpO2JyZWFrfX1lLl9wcmVzc2VkTGV0dGVycz1bXX0pLHRoaXN9LHQucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYWN0aXZlSXRlbUluZGV4O3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KSx0aGlzLl9hY3RpdmVJdGVtSW5kZXghPT1lJiZ0aGlzLmNoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCl9LHQucHJvdG90eXBlLm9uS2V5ZG93bj1mdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7c3dpdGNoKGUpe2Nhc2UgdS5rOnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIHUuYjppZih0aGlzLl92ZXJ0aWNhbCl7dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIHUubDppZih0aGlzLl92ZXJ0aWNhbCl7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSB1Lmk6aWYoImx0ciI9PT10aGlzLl9ob3Jpem9udGFsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9aWYoInJ0bCI9PT10aGlzLl9ob3Jpem9udGFsKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIHUuZzppZigibHRyIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9aWYoInJ0bCI9PT10aGlzLl9ob3Jpem9udGFsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2RlZmF1bHQ6cmV0dXJuIHZvaWQodC5rZXkmJjE9PT10LmtleS5sZW5ndGg/dGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQodC5rZXkudG9Mb2NhbGVVcHBlckNhc2UoKSk6KGU+PXUuYSYmZTw9dS5tfHxlPj11Lm4mJmU8PXUuaCkmJnRoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpKX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0LnByZXZlbnREZWZhdWx0KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlSXRlbUluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZUl0ZW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZXRGaXJzdEl0ZW1BY3RpdmU9ZnVuY3Rpb24oKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLDEpfSx0LnByb3RvdHlwZS5zZXRMYXN0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2l0ZW1zLmxlbmd0aC0xLC0xKX0sdC5wcm90b3R5cGUuc2V0TmV4dEl0ZW1BY3RpdmU9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfSx0LnByb3RvdHlwZS5zZXRQcmV2aW91c0l0ZW1BY3RpdmU9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MCYmdGhpcy5fd3JhcD90aGlzLnNldExhc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoLTEpfSx0LnByb3RvdHlwZS51cGRhdGVBY3RpdmVJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxuPSJudW1iZXIiPT10eXBlb2YgdD90OmUuaW5kZXhPZih0KTt0aGlzLl9hY3RpdmVJdGVtSW5kZXg9bix0aGlzLl9hY3RpdmVJdGVtPWVbbl19LHQucHJvdG90eXBlLnVwZGF0ZUFjdGl2ZUl0ZW1JbmRleD1mdW5jdGlvbih0KXt0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0odCl9LHQucHJvdG90eXBlLl9zZXRBY3RpdmVJdGVtQnlEZWx0YT1mdW5jdGlvbih0KXt0aGlzLl93cmFwP3RoaXMuX3NldEFjdGl2ZUluV3JhcE1vZGUodCk6dGhpcy5fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZSh0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUluV3JhcE1vZGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxuPTE7bjw9ZS5sZW5ndGg7bisrKXt2YXIgcj0odGhpcy5fYWN0aXZlSXRlbUluZGV4K3QqbitlLmxlbmd0aCklZS5sZW5ndGg7aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihlW3JdKSlyZXR1cm4gdm9pZCB0aGlzLnNldEFjdGl2ZUl0ZW0ocil9fSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZT1mdW5jdGlvbih0KXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCx0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUl0ZW1CeUluZGV4PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKG5bdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKG5bdF0pOylpZighblt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX0sdC5wcm90b3R5cGUuX2dldEl0ZW1zQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXRlbXMgaW5zdGFuY2VvZiBpLkI/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfSx0fSgpKSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9wbGF0Zm9ybT10fXJldHVybiB0LnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKX0sdC5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hISh0Lm9mZnNldFdpZHRofHx0Lm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Q2xpZW50UmVjdHMmJnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfSh0KSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS52aXNpYmlsaXR5fSx0LnByb3RvdHlwZS5pc1RhYmJhYmxlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7dmFyIGU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LmZyYW1lRWxlbWVudH1jYXRjaCh0KXtyZXR1cm4gbnVsbH19KHQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KTtpZihlKXt2YXIgbj1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoLTE9PT1iKGUpKXJldHVybiExO2lmKCh0aGlzLl9wbGF0Zm9ybS5CTElOS3x8dGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmIm9iamVjdCI9PT1uKXJldHVybiExO2lmKCh0aGlzLl9wbGF0Zm9ybS5CTElOS3x8dGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmIXRoaXMuaXNWaXNpYmxlKGUpKXJldHVybiExfXZhciByPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxpPWIodCk7aWYodC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKXJldHVybi0xIT09aTtpZigiaWZyYW1lIj09PXIpcmV0dXJuITE7aWYoImF1ZGlvIj09PXIpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSlyZXR1cm4hMTtpZih0aGlzLl9wbGF0Zm9ybS5CTElOSylyZXR1cm4hMH1pZigidmlkZW8iPT09cil7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiZ0aGlzLl9wbGF0Zm9ybS5UUklERU5UKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YKXJldHVybiEwfXJldHVybigib2JqZWN0IiE9PXJ8fCF0aGlzLl9wbGF0Zm9ybS5CTElOSyYmIXRoaXMuX3BsYXRmb3JtLldFQktJVCkmJiEodGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj0iaW5wdXQiPT09ZSYmdC50eXBlO3JldHVybiJ0ZXh0Ij09PW58fCJwYXNzd29yZCI9PT1ufHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfSh0KSkmJnQudGFiSW5kZXg+PTB9LHQucHJvdG90eXBlLmlzRm9jdXNhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJiJoaWRkZW4iPT10LnR5cGV9KHQpJiYoZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJidXR0b24iPT09ZXx8InRleHRhcmVhIj09PWV9KHQpfHxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImEiPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KHQpJiZ0Lmhhc0F0dHJpYnV0ZSgiaHJlZiIpfSh0KXx8dC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHx2KHQpKX0odCkmJiF0aGlzLmlzRGlzYWJsZWQodCkmJnRoaXMuaXNWaXNpYmxlKHQpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShtLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gdih0KXtpZighdC5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PXQudGFiSW5kZXgpcmV0dXJuITE7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuIi0zMjc2OCIhPWUmJiEoIWV8fGlzTmFOKHBhcnNlSW50KGUsMTApKSl9ZnVuY3Rpb24gYih0KXtpZighdih0KSlyZXR1cm4gbnVsbDt2YXIgZT1wYXJzZUludCh0LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTihlKT8tMTplfXZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3ZvaWQgMD09PWkmJihpPSExKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fZW5hYmxlZD0hMCxpfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3N0YXJ0QW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuZEFuY2hvci50YWJJbmRleD10aGlzLl9lbmFibGVkPzA6LTEpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fZW5kQW5jaG9yJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fZW5kQW5jaG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZW5kQW5jaG9yKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbH0sdC5wcm90b3R5cGUuYXR0YWNoQW5jaG9ycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsZnVuY3Rpb24oKXt0LmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpfSksdC5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3QuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpfSksdC5fZWxlbWVudC5wYXJlbnROb2RlJiYodC5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0Ll9zdGFydEFuY2hvcix0Ll9lbGVtZW50KSx0Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuX2VuZEFuY2hvcix0Ll9lbGVtZW50Lm5leHRTaWJsaW5nKSl9KX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNJbml0aWFsRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLl9nZXRSZWdpb25Cb3VuZGFyeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIl0sIFtjZGtGb2N1c1JlZ2lvbiIrdCsiXSwgW2Nkay1mb2N1cy0iK3QrIl0iKSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXS5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy0iK3QpP2NvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtIit0KyInLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uIit0KyInIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAuIixlW25dKTplW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLXJlZ2lvbi0iK3QpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pO3JldHVybiJzdGFydCI9PXQ/ZS5sZW5ndGg/ZVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTplLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9LHQucHJvdG90eXBlLmZvY3VzSW5pdGlhbEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtjZGtGb2N1c0luaXRpYWxdIik7cmV0dXJuIHQ/KHQuaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtaW5pdGlhbCIpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLWluaXRpYWwnLCB1c2UgJ2Nka0ZvY3VzSW5pdGlhbCcgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMCIsdCksdC5mb2N1cygpLCEwKTp0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiB0JiZ0LmZvY3VzKCksISF0fSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7Zm9yKHZhciBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2RlcyxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZVtuXSk6bnVsbDtpZihyKXJldHVybiByfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7Zm9yKHZhciBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2RlcyxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPWVbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9jcmVhdGVBbmNob3I9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC50YWJJbmRleD10aGlzLl9lbmFibGVkPzA6LTEsdC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSx0fSx0LnByb3RvdHlwZS5fZXhlY3V0ZU9uU3RhYmxlPWZ1bmN0aW9uKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KGQuYSkoMSkpLnN1YnNjcmliZSh0KX0sdH0oKSx3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fY2hlY2tlcj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2RvY3VtZW50PW59cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksbmV3IF8odCx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxlKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoZyksT2JqZWN0KGkuVikoaS54KSxPYmplY3QoaS5WKShyLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7fSx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MH1yZXR1cm4gdC5wcm90b3R5cGUubW9uaXRvcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYodm9pZCAwPT09ZSYmKGU9ITEpLCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIE9iamVjdChzLmEpKG51bGwpO2lmKHRoaXMuX2VsZW1lbnRJbmZvLmhhcyh0KSl7dmFyIHI9dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpO3JldHVybiByLmNoZWNrQ2hpbGRyZW49ZSxyLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9dmFyIGk9e3VubGlzdGVuOmZ1bmN0aW9uKCl7fSxjaGVja0NoaWxkcmVuOmUsc3ViamVjdDpuZXcgby5hfTt0aGlzLl9lbGVtZW50SW5mby5zZXQodCxpKSx0aGlzLl9pbmNyZW1lbnRNb25pdG9yZWRFbGVtZW50Q291bnQoKTt2YXIgYT1mdW5jdGlvbihlKXtyZXR1cm4gbi5fb25Gb2N1cyhlLHQpfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBuLl9vbkJsdXIoZSx0KX07cmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGEsITApLHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdSwhMCl9KSxpLnVubGlzdGVuPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsYSwhMCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix1LCEwKX0saS5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5zdG9wTW9uaXRvcmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9lbGVtZW50SW5mby5nZXQodCk7ZSYmKGUudW5saXN0ZW4oKSxlLnN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9zZXRDbGFzc2VzKHQpLHRoaXMuX2VsZW1lbnRJbmZvLmRlbGV0ZSh0KSx0aGlzLl9kZWNyZW1lbnRNb25pdG9yZWRFbGVtZW50Q291bnQoKSl9LHQucHJvdG90eXBlLmZvY3VzVmlhPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWUoZSksImZ1bmN0aW9uIj09dHlwZW9mIHQuZm9jdXMmJnQuZm9jdXMoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2VsZW1lbnRJbmZvLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5zdG9wTW9uaXRvcmluZyhuKX0pfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7dmFyIGU9ZnVuY3Rpb24oKXt0Ll9sYXN0VG91Y2hUYXJnZXQ9bnVsbCx0Ll9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSgia2V5Ym9hcmQiKX0sbj1mdW5jdGlvbigpe3QuX2xhc3RUb3VjaFRhcmdldHx8dC5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWUoIm1vdXNlIil9LHI9ZnVuY3Rpb24oZSl7bnVsbCE9dC5fdG91Y2hUaW1lb3V0SWQmJmNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksdC5fbGFzdFRvdWNoVGFyZ2V0PWUudGFyZ2V0LHQuX3RvdWNoVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fbGFzdFRvdWNoVGFyZ2V0PW51bGx9LDY1MCl9LGk9ZnVuY3Rpb24oKXt0Ll93aW5kb3dGb2N1c2VkPSEwLHQuX3dpbmRvd0ZvY3VzVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fd2luZG93Rm9jdXNlZD0hMX0pfTt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLG4sITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHIsIU9iamVjdChtLmMpKCl8fHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGkpfSksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsciwhT2JqZWN0KG0uYykoKXx8e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsaSksY2xlYXJUaW1lb3V0KHQuX3dpbmRvd0ZvY3VzVGltZW91dElkKSxjbGVhclRpbWVvdXQodC5fdG91Y2hUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll9vcmlnaW5UaW1lb3V0SWQpfX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzcz1mdW5jdGlvbih0LGUsbil7bj90LmNsYXNzTGlzdC5hZGQoZSk6dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5fc2V0Q2xhc3Nlcz1mdW5jdGlvbih0LGUpe3RoaXMuX2VsZW1lbnRJbmZvLmdldCh0KSYmKHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1mb2N1c2VkIiwhIWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay10b3VjaC1mb2N1c2VkIiwidG91Y2giPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWtleWJvYXJkLWZvY3VzZWQiLCJrZXlib2FyZCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1wcm9ncmFtLWZvY3VzZWQiLCJwcm9ncmFtIj09PWUpKX0sdC5wcm90b3R5cGUuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZS5fb3JpZ2luPXQsZS5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5fb3JpZ2luPW51bGx9KX0pfSx0LnByb3RvdHlwZS5fd2FzQ2F1c2VkQnlUb3VjaD1mdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldDtyZXR1cm4gdGhpcy5fbGFzdFRvdWNoVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZSBpbnN0YW5jZW9mIE5vZGUmJihlPT09dGhpcy5fbGFzdFRvdWNoVGFyZ2V0fHxlLmNvbnRhaW5zKHRoaXMuX2xhc3RUb3VjaFRhcmdldCkpfSx0LnByb3RvdHlwZS5fb25Gb2N1cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2VsZW1lbnRJbmZvLmdldChlKTtpZihuJiYobi5jaGVja0NoaWxkcmVufHxlPT09dC50YXJnZXQpKXt2YXIgcj10aGlzLl9vcmlnaW47cnx8KHI9dGhpcy5fd2luZG93Rm9jdXNlZCYmdGhpcy5fbGFzdEZvY3VzT3JpZ2luP3RoaXMuX2xhc3RGb2N1c09yaWdpbjp0aGlzLl93YXNDYXVzZWRCeVRvdWNoKHQpPyJ0b3VjaCI6InByb2dyYW0iKSx0aGlzLl9zZXRDbGFzc2VzKGUsciksdGhpcy5fZW1pdE9yaWdpbihuLnN1YmplY3QsciksdGhpcy5fbGFzdEZvY3VzT3JpZ2luPXJ9fSx0LnByb3RvdHlwZS5fb25CbHVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpOyFufHxuLmNoZWNrQ2hpbGRyZW4mJnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJmUuY29udGFpbnModC5yZWxhdGVkVGFyZ2V0KXx8KHRoaXMuX3NldENsYXNzZXMoZSksdGhpcy5fZW1pdE9yaWdpbihuLnN1YmplY3QsbnVsbCkpfSx0LnByb3RvdHlwZS5fZW1pdE9yaWdpbj1mdW5jdGlvbih0LGUpe3RoaXMuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5uZXh0KGUpfSl9LHQucHJvdG90eXBlLl9pbmNyZW1lbnRNb25pdG9yZWRFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXsxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmdGhpcy5fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoKX0sdC5wcm90b3R5cGUuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpey0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikoaS54KSxPYmplY3QoaS5WKShtLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gTyh0KXtyZXR1cm4gMD09PXQuYnV0dG9uc319LGx6bGo6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIkNjbkciKSxpPShuKCJGVlN5IiksbigiRnpxYyIpLG4oIldmNHAiKSxyLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1jYXJke3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MjRweDtib3JkZXItcmFkaXVzOjJweH0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FyZCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7d2lkdGg6MTAwJX1bZGlyPXJ0bF0gLm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse2xlZnQ6YXV0bztyaWdodDowfS5tYXQtY2FyZCAubWF0LWRpdmlkZXItaG9yaXpvbnRhbC5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luOjB9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXR7Ym94LXNoYWRvdzpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtY2FyZHtvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC1jYXJkLWFjdGlvbnMsLm1hdC1jYXJkLWNvbnRlbnQsLm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC10aXRsZXtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTZweH0ubWF0LWNhcmQtYWN0aW9uc3ttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHg7cGFkZGluZzo4cHggMH0ubWF0LWNhcmQtYWN0aW9ucy1hbGlnbi1lbmR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgNDhweCk7bWFyZ2luOjAgLTI0cHggMTZweCAtMjRweH0ubWF0LWNhcmQteGwtaW1hZ2V7d2lkdGg6MjQwcHg7aGVpZ2h0OjI0MHB4O21hcmdpbjotOHB4fS5tYXQtY2FyZC1mb290ZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MCAtMjRweCAtMjRweCAtMjRweH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbiwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b257bWFyZ2luOjAgNHB4fS5tYXQtY2FyZC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubWF0LWNhcmQtaGVhZGVyLXRleHR7bWFyZ2luOjAgOHB4fS5tYXQtY2FyZC1hdmF0YXJ7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowfS5tYXQtY2FyZC1sZy1pbWFnZSwubWF0LWNhcmQtbWQtaW1hZ2UsLm1hdC1jYXJkLXNtLWltYWdle21hcmdpbjotOHB4IDB9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MCAtOHB4fS5tYXQtY2FyZC1zbS1pbWFnZXt3aWR0aDo4MHB4O2hlaWdodDo4MHB4fS5tYXQtY2FyZC1tZC1pbWFnZXt3aWR0aDoxMTJweDtoZWlnaHQ6MTEycHh9Lm1hdC1jYXJkLWxnLWltYWdle3dpZHRoOjE1MnB4O2hlaWdodDoxNTJweH1AbWVkaWEgKG1heC13aWR0aDo1OTlweCl7Lm1hdC1jYXJke3BhZGRpbmc6MjRweCAxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0Oi04cHh9Lm1hdC1jYXJkLWltYWdle3dpZHRoOmNhbGMoMTAwJSArIDMycHgpO21hcmdpbjoxNnB4IC0xNnB4fS5tYXQtY2FyZC10aXRsZS1ncm91cHttYXJnaW46MH0ubWF0LWNhcmQteGwtaW1hZ2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtaGVhZGVye21hcmdpbjotOHB4IDAgMCAwfS5tYXQtY2FyZC1mb290ZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4fX0ubWF0LWNhcmQtY29udGVudD46Zmlyc3QtY2hpbGQsLm1hdC1jYXJkPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1hdC1jYXJkLWNvbnRlbnQ+Omxhc3QtY2hpbGQ6bm90KC5tYXQtY2FyZC1mb290ZXIpLC5tYXQtY2FyZD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3Rlcil7bWFyZ2luLWJvdHRvbTowfS5tYXQtY2FyZC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi0yNHB4fS5tYXQtY2FyZD4ubWF0LWNhcmQtYWN0aW9uczpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTE2cHg7cGFkZGluZy1ib3R0b206MH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbjpmaXJzdC1jaGlsZCwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b246Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtc3VidGl0bGU6bm90KDpmaXJzdC1jaGlsZCksLm1hdC1jYXJkLXRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LTRweH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LThweH0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHIuaWIoMixbci5YYShudWxsLDApLHIuWGEobnVsbCwxKV0sbnVsbCxudWxsKX12YXIgYT1yLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBzKHQpe3JldHVybiByLmliKDIsW3IuWGEobnVsbCwwKSwodCgpKCksci5PYSgxLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtY2FyZC1oZWFkZXItdGV4dCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxyLlhhKG51bGwsMSksci5YYShudWxsLDIpXSxudWxsLG51bGwpfX0sbUNoRjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sbVZzYTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkNjbkciKTtuKCI0YzM1IiksbigiaWhZWSIpLG4oIm1yU0ciKSxuKCJsTEFQIiksbigiV2Y0cCIpLG4oIks5SWEiKSxuKCJwMGliIiksbigiRi9YTCIpLG4oImg5RHEiKSxuKCJwdWdUIiksbigibjZnRyIpLG4oIllTaDIiKSxuKCJWbkQvIiksbigidDlmWiIpLG4oIk1HQlMiKSxuKCJ6b3RtIiksbigiNjdZLyIpLG4oIjAvdVEiKSxuKCJwMFNqIiksbigibnkyNCIpLG4oIlQxRE0iKSxuKCJGRk9vIiksbigiNjBpVSIpLG4oImVEa1AiKSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uZXcgci5vKCJtYXQtbWVudS1zY3JvbGwtc3RyYXRlZ3kiKTtmdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgYT1mdW5jdGlvbigpe319LG1yU0c6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9O2Z1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXIodCxlKSx0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9dmFyIG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIGkgaW4gZT1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0fTtmdW5jdGlvbiBhKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXSxuPTA7cmV0dXJuIGU/ZS5jYWxsKHQpOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHQmJm4+PXQubGVuZ3RoJiYodD12b2lkIDApLHt2YWx1ZTp0JiZ0W24rK10sZG9uZTohdH19fX1mdW5jdGlvbiBzKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciByLGksbz1uLmNhbGwodCksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShyPW8ubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49by5yZXR1cm4pJiZuLmNhbGwobyl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIHUoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdD10LmNvbmNhdChzKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fX0sbjZnRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIG51bGwhPXQmJiIiK3QhPSJmYWxzZSJ9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxmdW5jdGlvbih0KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh0KSkmJiFpc05hTihOdW1iZXIodCkpfSh0KT9OdW1iZXIodCk6ZX1mdW5jdGlvbiBvKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG51bGw9PXQ/IiI6InN0cmluZyI9PXR5cGVvZiB0P3Q6dCsicHgifW4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBhfSl9LG5rWTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zY2hlZHVsZX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxueTI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJNR0JTIiksbz1uKCJ6b3RtIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubGlmdChuZXcgcyh0KSl9fXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLm5vdGlmaWVyPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdSh0KSxyPU9iamVjdChvLmEpKG4sdGhpcy5ub3RpZmllcik7cmV0dXJuIHImJiFyLmNsb3NlZD8obi5hZGQociksZS5zdWJzY3JpYmUobikpOm59LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMuY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24oKXt9LGV9KGkuYSl9LHAwU2o6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJJVVRiIiksaT1uKCJQVThMIiksbz1uKCJHNUoxIiksYT1uKCJua1k3Iikscz1uKCJGL1hMIiksdT1uKCIwL3VRIiksbD1uKCJUeGpnIik7ZnVuY3Rpb24gYygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dFt0Lmxlbmd0aC0xXTtPYmplY3QoYS5hKShuKT90LnBvcCgpOm49bnVsbDt2YXIgYz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIDE9PT10Lmxlbmd0aHx8Mj09PXQubGVuZ3RoJiZPYmplY3QoYS5hKSh0WzFdKT9PYmplY3QodS5hKSh0WzBdKTpPYmplY3QobC5hKSgpKHMuYS5hcHBseSh2b2lkIDAsdCkpfSgxIT09Y3x8bj9jPjA/T2JqZWN0KHIuYSkodCxuKTpPYmplY3Qoby5iKShuKTpPYmplY3QoaS5hKSh0WzBdKSxlKX19bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KX0scDBpYjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiNmJsRiIpLGk9bigibmtZNyIpLG89bigiWm44RCIpLGE9bigiSVVUYiIpO2Z1bmN0aW9uIHMoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHM9bnVsbCx1PXRbdC5sZW5ndGgtMV07cmV0dXJuIE9iamVjdChpLmEpKHUpPyhzPXQucG9wKCksdC5sZW5ndGg+MSYmIm51bWJlciI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSk6Im51bWJlciI9PXR5cGVvZiB1JiYobj10LnBvcCgpKSxudWxsPT09cyYmMT09PXQubGVuZ3RoJiZ0WzBdaW5zdGFuY2VvZiByLmE/dFswXTpPYmplY3Qoby5hKShuKShPYmplY3QoYS5hKSh0LHMpKX19LHBNblM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIkNjbkciKSxpPW4oIlpZQ2kiKSxvPXIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIuaWIoMCxbKHQoKSgpLHIuT2EoMCwxNjc3NzIxNixudWxsLG51bGwsMSwicm91dGVyLW91dGxldCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksci5OYSgxLDIxMjk5MixudWxsLDAsaS5uLFtpLmIsci5OLHIuaixbOCxudWxsXSxyLmhdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfXZhciBzPXIuS2EoIm5nLWNvbXBvbmVudCIsaS5yLGZ1bmN0aW9uKHQpe3JldHVybiByLmliKDAsWyh0KCkoKSxyLk9hKDAsMCxudWxsLG51bGwsMSwibmctY29tcG9uZW50IixbXSxudWxsLG51bGwsbnVsbCxhLG8pKSxyLk5hKDEsNDkxNTIsbnVsbCwwLGkucixbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfSx7fSx7fSxbXSl9LHBaaE06ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPWZ1bmN0aW9uKCl7fX0scHNXMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9bigibXJTRyIpLGk9bigiem90bSIpLG89bigiTUdCUyIpLGE9bigiNjdZLyIpLHM9bigiMC91USIpO2Z1bmN0aW9uIHUodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodShmdW5jdGlvbihuLHIpe3JldHVybiBPYmplY3Qocy5hKSh0KG4scikpLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCxpKXtyZXR1cm4gZShuLHQscixpKX0pKX0sbikpfTooIm51bWJlciI9PXR5cGVvZiBlJiYobj1lKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBsKHQsbikpfSl9dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx0aGlzLnByb2plY3Q9dCx0aGlzLmNvbmN1cnJlbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgYyh0LHRoaXMucHJvamVjdCx0aGlzLmNvbmN1cnJlbnQpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PXImJihyPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucHJvamVjdD1uLGkuY29uY3VycmVudD1yLGkuaGFzQ29tcGxldGVkPSExLGkuYnVmZmVyPVtdLGkuYWN0aXZlPTAsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD90aGlzLl90cnlOZXh0KHQpOnRoaXMuYnVmZmVyLnB1c2godCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5hY3RpdmUrKyx0aGlzLl9pbm5lclN1YihlLHQsbil9LGUucHJvdG90eXBlLl9pbm5lclN1Yj1mdW5jdGlvbih0LGUsbil7dGhpcy5hZGQoT2JqZWN0KGkuYSkodGhpcyx0LGUsbikpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmhhc0NvbXBsZXRlZD0hMCwwPT09dGhpcy5hY3RpdmUmJjA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idWZmZXI7dGhpcy5yZW1vdmUodCksdGhpcy5hY3RpdmUtLSxlLmxlbmd0aD4wP3RoaXMuX25leHQoZS5zaGlmdCgpKTowPT09dGhpcy5hY3RpdmUmJnRoaXMuaGFzQ29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG8uYSl9LHB1Z1Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJpc2J5IiksaT1uKCJNY1NvIiksbz1uKCIyQmRqIiksYT1uKCJFaG1rIikscz1uKCJlaWhzIiksdT1uKCJtclNHIiksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciByPXQuY2FsbCh0aGlzLG4/bi5sZW5ndGgrIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuICAiK24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMSsiKSAiK3QudG9TdHJpbmcoKX0pLmpvaW4oIlxuICAiKToiIil8fHRoaXM7cmV0dXJuIHIuZXJyb3JzPW4sci5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YocixlLnByb3RvdHlwZSkscn1yZXR1cm4gdS5iKGUsdCksZX0oRXJyb3IpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGwsdCYmKHRoaXMuX3Vuc3Vic2NyaWJlPXQpfXZhciBlO3JldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0LGU9ITE7aWYoIXRoaXMuY2xvc2VkKXt2YXIgbj10aGlzLl9wYXJlbnQsdT10aGlzLl9wYXJlbnRzLGM9dGhpcy5fdW5zdWJzY3JpYmUsaD10aGlzLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGw7Zm9yKHZhciBkPS0xLHA9dT91Lmxlbmd0aDowO247KW4ucmVtb3ZlKHRoaXMpLG49KytkPHAmJnVbZF18fG51bGw7aWYoT2JqZWN0KG8uYSkoYykmJk9iamVjdChhLmEpKGMpLmNhbGwodGhpcyk9PT1zLmEmJihlPSEwLHQ9dHx8KHMuYS5lIGluc3RhbmNlb2YgbD9mKHMuYS5lLmVycm9ycyk6W3MuYS5lXSkpLE9iamVjdChyLmEpKGgpKWZvcihkPS0xLHA9aC5sZW5ndGg7KytkPHA7KXt2YXIgbT1oW2RdO2lmKE9iamVjdChpLmEpKG0pJiZPYmplY3QoYS5hKShtLnVuc3Vic2NyaWJlKS5jYWxsKG0pPT09cy5hKXtlPSEwLHQ9dHx8W107dmFyIHk9cy5hLmU7eSBpbnN0YW5jZW9mIGw/dD10LmNvbmNhdChmKHkuZXJyb3JzKSk6dC5wdXNoKHkpfX1pZihlKXRocm93IG5ldyBsKHQpfX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKCFlfHxlPT09dC5FTVBUWSlyZXR1cm4gdC5FTVBUWTtpZihlPT09dGhpcylyZXR1cm4gdGhpczt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobi5jbG9zZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLnVuc3Vic2NyaWJlKXJldHVybiBuO2lmKHRoaXMuY2xvc2VkKXJldHVybiBuLnVuc3Vic2NyaWJlKCksbjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5fYWRkUGFyZW50KXt2YXIgcj1uOyhuPW5ldyB0KS5fc3Vic2NyaXB0aW9ucz1bcl19YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0ZWFyZG93biAiK2UrIiBhZGRlZCB0byBTdWJzY3JpcHRpb24uIil9cmV0dXJuKHRoaXMuX3N1YnNjcmlwdGlvbnN8fCh0aGlzLl9zdWJzY3JpcHRpb25zPVtdKSkucHVzaChuKSxuLl9hZGRQYXJlbnQodGhpcyksbn0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKX19LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyZW50LG49dGhpcy5fcGFyZW50cztlJiZlIT09dD9uPy0xPT09bi5pbmRleE9mKHQpJiZuLnB1c2godCk6dGhpcy5fcGFyZW50cz1bdF06dGhpcy5fcGFyZW50PXR9LHQuRU1QVFk9KChlPW5ldyB0KS5jbG9zZWQ9ITAsZSksdH0oKTtmdW5jdGlvbiBmKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlIGluc3RhbmNlb2YgbD9lLmVycm9yczplKX0sW10pfX0scUFsUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImRXWmciKSxpPW4oIkNjbkciKSxvPW4oImJuZTUiKSxhPW4oIkYvWEwiKSxzPW4oIks5SWEiKSx1PW4oIjZibEYiKSxsPW4oInAwaWIiKSxjPW4oIlQxRE0iKSxmPW4oIm1yU0ciKSxoPW4oIkVobWsiKSxkPW4oImVpaHMiKSxwPW4oIk1HQlMiKSxtPW4oInpvdG0iKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmR1cmF0aW9uU2VsZWN0b3I9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgZyh0LHRoaXMuZHVyYXRpb25TZWxlY3RvcikpfSx0fSgpLGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmR1cmF0aW9uU2VsZWN0b3I9bixyLmhhc1ZhbHVlPSExLHJ9cmV0dXJuIGYuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmFsdWU9dCx0aGlzLmhhc1ZhbHVlPSEwLCF0aGlzLnRocm90dGxlZCl7dmFyIGU9T2JqZWN0KGguYSkodGhpcy5kdXJhdGlvblNlbGVjdG9yKSh0KTtpZihlPT09ZC5hKXRoaXMuZGVzdGluYXRpb24uZXJyb3IoZC5hLmUpO2Vsc2V7dmFyIG49T2JqZWN0KG0uYSkodGhpcyxlKTshbnx8bi5jbG9zZWQ/dGhpcy5jbGVhclRocm90dGxlKCk6dGhpcy5hZGQodGhpcy50aHJvdHRsZWQ9bil9fX0sZS5wcm90b3R5cGUuY2xlYXJUaHJvdHRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmFsdWUsZT10aGlzLmhhc1ZhbHVlLG49dGhpcy50aHJvdHRsZWQ7biYmKHRoaXMucmVtb3ZlKG4pLHRoaXMudGhyb3R0bGVkPW51bGwsbi51bnN1YnNjcmliZSgpKSxlJiYodGhpcy52YWx1ZT1udWxsLHRoaXMuaGFzVmFsdWU9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX0sZX0ocC5hKSx2PW4oImdJM0IiKTtmdW5jdGlvbiBiKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWMuYSksbj1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qodi5hKSh0LGUpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5saWZ0KG5ldyB5KG4pKX07dmFyIG59dmFyIF89bigiVm5ELyIpO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KTt2YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX3Njcm9sbGVkPW5ldyBzLmEsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2Nyb2xsZWQubmV4dCh0KX0pO3RoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQodCxuKX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KHQpO2UmJihlLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLnNjcm9sbGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIwKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/dS5hLmNyZWF0ZShmdW5jdGlvbihuKXtlLl9nbG9iYWxTdWJzY3JpcHRpb258fGUuX2FkZEdsb2JhbExpc3RlbmVyKCk7dmFyIHI9dD4wP2UuX3Njcm9sbGVkLnBpcGUoYih0KSkuc3Vic2NyaWJlKG4pOmUuX3Njcm9sbGVkLnN1YnNjcmliZShuKTtyZXR1cm4gZS5fc2Nyb2xsZWRDb3VudCsrLGZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZSgpLGUuX3Njcm9sbGVkQ291bnQtLSxlLl9zY3JvbGxlZENvdW50fHxlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOk9iamVjdChhLmEpKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuZGVyZWdpc3RlcihuKX0pLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmFuY2VzdG9yU2Nyb2xsZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0KTtyZXR1cm4gdGhpcy5zY3JvbGxlZChlKS5waXBlKE9iamVjdChfLmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fHxuLmluZGV4T2YodCk+LTF9KSl9LHQucHJvdG90eXBlLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7ZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChpLHQpJiZuLnB1c2goaSl9KSxufSx0LnByb3RvdHlwZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPWUubmF0aXZlRWxlbWVudCxyPXQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYobj09cilyZXR1cm4hMH13aGlsZShuPW4ucGFyZW50RWxlbWVudCk7cmV0dXJuITF9LHQucHJvdG90eXBlLl9hZGRHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBPYmplY3Qoby5hKSh3aW5kb3cuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9zY3JvbGxlZC5uZXh0KCl9KX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXI9ZnVuY3Rpb24oKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKGkueCksT2JqZWN0KGkuVikoci5hKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9zY3JvbGw9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IHMuYSx0aGlzLl9zY3JvbGxMaXN0ZW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gci5fZWxlbWVudFNjcm9sbGVkLm5leHQodCl9fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHQuX3Njcm9sbExpc3RlbmVyKX0pLHRoaXMuX3Njcm9sbC5yZWdpc3Rlcih0aGlzKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9zY3JvbGxMaXN0ZW5lciYmdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX3Njcm9sbExpc3RlbmVyKX0sdC5wcm90b3R5cGUuZWxlbWVudFNjcm9sbGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0RWxlbWVudFJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmfSx0fSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX2NoYW5nZT10LmlzQnJvd3Nlcj9lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChsLmEpKE9iamVjdChvLmEpKHdpbmRvdywicmVzaXplIiksT2JqZWN0KG8uYSkod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOk9iamVjdChhLmEpKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLHI9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3ArcixyaWdodDp0LmxlZnQrbixoZWlnaHQ6cix3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZShiKHQpKTp0aGlzLl9jaGFuZ2V9LHQucHJvdG90eXBlLl91cGRhdGVWaWV3cG9ydFNpemU9ZnVuY3Rpb24oKXt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKHIuYSksT2JqZWN0KGkuVikoaS54KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEM9e3Byb3ZpZGU6TyxkZXBzOltbbmV3IGkueSxuZXcgaS5ILE9dLHIuYSxpLnhdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0fHxuZXcgTyhlLG4pfX0sUz1mdW5jdGlvbigpe319LHJmMzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPWZ1bmN0aW9uKHQsZSl7dGhpcy5wYWdlTmFtZT10LHRoaXMuY2h1bmtVUkw9ZSx0aGlzLmNodW5rTG9hZGVkPSExfSxpPVtuZXcgcigiL3N1cHBvcnQiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy85LzkxL1QtLUdPX1BhcmlzLVNhY2xheS0tc3VwcG9ydF9jaHVuay5iYXNlNjQudHh0IiksbmV3IHIoIi90ZWFtIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNy83NC9ULS1HT19QYXJpcy1TYWNsYXktLXRlYW1fY2h1bmsuYmFzZTY0LnR4dCIpLG5ldyByKCIvbGFibm90ZWJvb2siLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzAyL1QtLUdPX1BhcmlzLVNhY2xheS0tbGFibm90ZWJvb2tfY2h1bmsuYmFzZTY0LnR4dCIpXX0sInQvTmEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gRH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gen0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBMfSk7dmFyIHI9bigibXJTRyIpLGk9bigiQ2NuRyIpLG89bigiRi9YTCIpLGE9bigiNmJsRiIpLHM9bigiUGhqbiIpLHU9bigiVm5ELyIpLGw9bigiNjdZLyIpLGM9bigiSXAwUiIpLGY9ZnVuY3Rpb24oKXt9LGg9ZnVuY3Rpb24oKXt9LGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCx0P3RoaXMubGF6eUluaXQ9InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7ZS5oZWFkZXJzPW5ldyBNYXAsdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5kZXhPZigiOiIpO2lmKG4+MCl7dmFyIHI9dC5zbGljZSgwLG4pLGk9ci50b0xvd2VyQ2FzZSgpLG89dC5zbGljZShuKzEpLnRyaW0oKTtlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUocixpKSxlLmhlYWRlcnMuaGFzKGkpP2UuaGVhZGVycy5nZXQoaSkucHVzaChvKTplLmhlYWRlcnMuc2V0KGksW29dKX19KX06ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl0saT1uLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiByJiYocj1bcl0pLHIubGVuZ3RoPjAmJihlLmhlYWRlcnMuc2V0KGksciksZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG4saSkpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3RoaXMuaW5pdCgpO3ZhciBlPXRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lWzBdOm51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImEifSl9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGUpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoZSx0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseVVwZGF0ZSh0KX0pLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9LHQucHJvdG90eXBlLmNvcHlGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuaGVhZGVycy5zZXQobix0LmhlYWRlcnMuZ2V0KG4pKSxlLm5vcm1hbGl6ZWROYW1lcy5zZXQobix0Lm5vcm1hbGl6ZWROYW1lcy5nZXQobikpfSl9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLmxhenlJbml0PXRoaXMubGF6eUluaXQmJnRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMubGF6eUluaXQ6dGhpcyxuLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmFwcGx5VXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6dmFyIG49dC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIG4mJihuPVtuXSksMD09PW4ubGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUodC5uYW1lLGUpO3ZhciBpPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107aS5wdXNoLmFwcGx5KGksT2JqZWN0KHIuZCkobikpLHRoaXMuaGVhZGVycy5zZXQoZSxpKTticmVhaztjYXNlImQiOnZhciBvPXQudmFsdWU7aWYobyl7dmFyIGE9dGhpcy5oZWFkZXJzLmdldChlKTtpZighYSlyZXR1cm47MD09PShhPWEuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybi0xPT09by5pbmRleE9mKHQpfSkpLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSxhKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0KGUubm9ybWFsaXplZE5hbWVzLmdldChuKSxlLmhlYWRlcnMuZ2V0KG4pKX0pfSx0fSgpLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCl9LHQucHJvdG90eXBlLmVuY29kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpfSx0LnByb3RvdHlwZS5kZWNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX0sdC5wcm90b3R5cGUuZGVjb2RlVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX0sdH0oKTtmdW5jdGlvbiBtKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2dpLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2dpLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTNCL2dpLCI7IikucmVwbGFjZSgvJTJCL2dpLCIrIikucmVwbGFjZSgvJTNEL2dpLCI9IikucmVwbGFjZSgvJTNGL2dpLCI/IikucmVwbGFjZSgvJTJGL2dpLCIvIil9dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgZSxuLGksbz10aGlzO2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPXQuZW5jb2Rlcnx8bmV3IHAsdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9KGU9dC5mcm9tU3RyaW5nLG49dGhpcy5lbmNvZGVyLGk9bmV3IE1hcCxlLmxlbmd0aD4wJiZlLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIj0iKSxvPU9iamVjdChyLmMpKC0xPT1lP1tuLmRlY29kZUtleSh0KSwiIl06W24uZGVjb2RlS2V5KHQuc2xpY2UoMCxlKSksbi5kZWNvZGVWYWx1ZSh0LnNsaWNlKGUrMSkpXSwyKSxhPW9bMF0scz1vWzFdLHU9aS5nZXQoYSl8fFtdO3UucHVzaChzKSxpLnNldChhLHUpfSksaSl9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZnJvbU9iamVjdFtlXTtvLm1hcC5zZXQoZSxBcnJheS5pc0FycmF5KG4pP246W25dKX0pKTp0aGlzLm1hcD1udWxsfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3RoaXMuaW5pdCgpO3ZhciBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoicyJ9KX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiZCJ9KX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAoZnVuY3Rpb24oZSl7dmFyIG49dC5lbmNvZGVyLmVuY29kZUtleShlKTtyZXR1cm4gdC5tYXAuZ2V0KGUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbisiPSIrdC5lbmNvZGVyLmVuY29kZVZhbHVlKGUpfSkuam9pbigiJiIpfSkuam9pbigiJiIpfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdCh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gbi5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsbi51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQoW2VdKSxufSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQubWFwLnNldChlLHQuY2xvbmVGcm9tLm1hcC5nZXQoZSkpfSksdGhpcy51cGRhdGVzLmZvckVhY2goZnVuY3Rpb24oZSl7c3dpdGNoKGUub3Ape2Nhc2UiYSI6Y2FzZSJzIjp2YXIgbj0oImEiPT09ZS5vcD90Lm1hcC5nZXQoZS5wYXJhbSk6dm9pZCAwKXx8W107bi5wdXNoKGUudmFsdWUpLHQubWFwLnNldChlLnBhcmFtLG4pO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09ZS52YWx1ZSl7dC5tYXAuZGVsZXRlKGUucGFyYW0pO2JyZWFrfXZhciByPXQubWFwLmdldChlLnBhcmFtKXx8W10saT1yLmluZGV4T2YoZS52YWx1ZSk7LTEhPT1pJiZyLnNwbGljZShpLDEpLHIubGVuZ3RoPjA/dC5tYXAuc2V0KGUucGFyYW0scik6dC5tYXAuZGVsZXRlKGUucGFyYW0pfX0pLHRoaXMuY2xvbmVGcm9tPW51bGwpfSx0fSgpO2Z1bmN0aW9uIGcodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIHYodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZ0IGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBiKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk7aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fHI/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxpPXIpOmk9bixpJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWkucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFpLndpdGhDcmVkZW50aWFscyxpLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWkucmVzcG9uc2VUeXBlKSxpLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9aS5oZWFkZXJzKSxpLnBhcmFtcyYmKHRoaXMucGFyYW1zPWkucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBkKSx0aGlzLnBhcmFtcyl7dmFyIG89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09by5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXt2YXIgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStvfX1lbHNlIHRoaXMucGFyYW1zPW5ldyB5LHRoaXMudXJsV2l0aFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5zZXJpYWxpemVCb2R5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDpnKHRoaXMuYm9keSl8fHYodGhpcy5ib2R5KXx8Yih0aGlzLmJvZHkpfHwic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgeT90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmIodGhpcy5ib2R5KT9udWxsOnYodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpnKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgeT8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpPyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5tZXRob2R8fHRoaXMubWV0aG9kLHI9ZS51cmx8fHRoaXMudXJsLGk9ZS5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLG89dm9pZCAwIT09ZS5ib2R5P2UuYm9keTp0aGlzLmJvZHksYT12b2lkIDAhPT1lLndpdGhDcmVkZW50aWFscz9lLndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxzPXZvaWQgMCE9PWUucmVwb3J0UHJvZ3Jlc3M/ZS5yZXBvcnRQcm9ncmVzczp0aGlzLnJlcG9ydFByb2dyZXNzLHU9ZS5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsbD1lLnBhcmFtc3x8dGhpcy5wYXJhbXM7cmV0dXJuIHZvaWQgMCE9PWUuc2V0SGVhZGVycyYmKHU9T2JqZWN0LmtleXMoZS5zZXRIZWFkZXJzKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldEhlYWRlcnNbbl0pfSx1KSksZS5zZXRQYXJhbXMmJihsPU9iamVjdC5rZXlzKGUuc2V0UGFyYW1zKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldFBhcmFtc1tuXSl9LGwpKSxuZXcgdChuLHIsbyx7cGFyYW1zOmwsaGVhZGVyczp1LHJlcG9ydFByb2dyZXNzOnMscmVzcG9uc2VUeXBlOmksd2l0aENyZWRlbnRpYWxzOmF9KX0sdH0oKSx3PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuU2VudD0wXT0iU2VudCIsdFt0LlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsdFt0LkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZT00XT0iUmVzcG9uc2UiLHRbdC5Vc2VyPTVdPSJVc2VyIix0fSh7fSkseD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MjAwKSx2b2lkIDA9PT1uJiYobj0iT0siKSx0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgZCx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fG4sdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fSgpLE89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4udHlwZT13LlJlc3BvbnNlSGVhZGVyLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxuZXcgZSh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0oeCksQz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPXcuUmVzcG9uc2Usbi5ib2R5PXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6bnVsbCxufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0oeCksUz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzLGUsMCwiVW5rbm93biBFcnJvciIpfHx0aGlzO3JldHVybiBuLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIixuLm9rPSExLG4ubWVzc2FnZT1uLnN0YXR1cz49MjAwJiZuLnN0YXR1czwzMDA/Ikh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgIisoZS51cmx8fCIodW5rbm93biB1cmwpIik6Ikh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgIisoZS51cmx8fCIodW5rbm93biB1cmwpIikrIjogIitlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0LG4uZXJyb3I9ZS5lcnJvcnx8bnVsbCxufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KHgpO2Z1bmN0aW9uIEUodCxlKXtyZXR1cm57Ym9keTplLGhlYWRlcnM6dC5oZWFkZXJzLG9ic2VydmU6dC5vYnNlcnZlLHBhcmFtczp0LnBhcmFtcyxyZXBvcnRQcm9ncmVzczp0LnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6dC53aXRoQ3JlZGVudGlhbHN9fXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmhhbmRsZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT10aGlzO2lmKHZvaWQgMD09PW4mJihuPXt9KSx0IGluc3RhbmNlb2YgXylyPXQ7ZWxzZXt2YXIgYTthPW4uaGVhZGVycyBpbnN0YW5jZW9mIGQ/bi5oZWFkZXJzOm5ldyBkKG4uaGVhZGVycyk7dmFyIGM9dm9pZCAwO24ucGFyYW1zJiYoYz1uLnBhcmFtcyBpbnN0YW5jZW9mIHk/bi5wYXJhbXM6bmV3IHkoe2Zyb21PYmplY3Q6bi5wYXJhbXN9KSkscj1uZXcgXyh0LGUsdm9pZCAwIT09bi5ib2R5P24uYm9keTpudWxsLHtoZWFkZXJzOmEscGFyYW1zOmMscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6bi53aXRoQ3JlZGVudGlhbHN9KX12YXIgZj1PYmplY3Qoby5hKShyKS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBpLmhhbmRsZXIuaGFuZGxlKHQpfSkpO2lmKHQgaW5zdGFuY2VvZiBffHwiZXZlbnRzIj09PW4ub2JzZXJ2ZSlyZXR1cm4gZjt2YXIgaD1mLnBpcGUoT2JqZWN0KHUuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDfSkpO3N3aXRjaChuLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goci5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBoLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBoLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBoLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImpzb24iOmRlZmF1bHQ6cmV0dXJuIGgucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5ib2R5fSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBoO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAiK24ub2JzZXJ2ZSsifSIpfX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkRFTEVURSIsdCxlKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkdFVCIsdCxlKX0sdC5wcm90b3R5cGUuaGVhZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfSx0LnByb3RvdHlwZS5qc29ucD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIix0LHtwYXJhbXM6KG5ldyB5KS5hcHBlbmQoZSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9LHQucHJvdG90eXBlLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsdCxlKX0sdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQQVRDSCIsdCxFKG4sZSkpfSx0LnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUE9TVCIsdCxFKG4sZSkpfSx0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQVVQiLHQsRShuLGUpKX0sdH0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMubmV4dD10LHRoaXMuaW50ZXJjZXB0b3I9ZX1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludGVyY2VwdG9yLmludGVyY2VwdCh0LHRoaXMubmV4dCl9LHR9KCksST1uZXcgaS5vKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5oYW5kbGUodCl9LHR9KCksaj0vXlwpXF1cfScsP1xuLyxQPWZ1bmN0aW9uKCl7fSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fSx0fSgpLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMueGhyRmFjdG9yeT10fXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigiSlNPTlAiPT09dC5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBKc29ucENsaWVudE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBhLmEoZnVuY3Rpb24obil7dmFyIHI9ZS54aHJGYWN0b3J5LmJ1aWxkKCk7aWYoci5vcGVuKHQubWV0aG9kLHQudXJsV2l0aFBhcmFtcyksdC53aXRoQ3JlZGVudGlhbHMmJihyLndpdGhDcmVkZW50aWFscz0hMCksdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gci5zZXRSZXF1ZXN0SGVhZGVyKHQsZS5qb2luKCIsIikpfSksdC5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIXQuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXt2YXIgaT10LmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWkmJnIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixpKX1pZih0LnJlc3BvbnNlVHlwZSl7dmFyIG89dC5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtyLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1vP286InRleHQifXZhciBhPXQuc2VyaWFsaXplQm9keSgpLHM9bnVsbCx1PWZ1bmN0aW9uKCl7aWYobnVsbCE9PXMpcmV0dXJuIHM7dmFyIGU9MTIyMz09PXIuc3RhdHVzPzIwNDpyLnN0YXR1cyxuPXIuc3RhdHVzVGV4dHx8Ik9LIixpPW5ldyBkKHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG89ZnVuY3Rpb24odCl7cmV0dXJuInJlc3BvbnNlVVJMImluIHQmJnQucmVzcG9uc2VVUkw/dC5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdCh0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT90LmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0ocil8fHQudXJsO3JldHVybiBzPW5ldyBPKHtoZWFkZXJzOmksc3RhdHVzOmUsc3RhdHVzVGV4dDpuLHVybDpvfSl9LGw9ZnVuY3Rpb24oKXt2YXIgZT11KCksaT1lLmhlYWRlcnMsbz1lLnN0YXR1cyxhPWUuc3RhdHVzVGV4dCxzPWUudXJsLGw9bnVsbDsyMDQhPT1vJiYobD12b2lkIDA9PT1yLnJlc3BvbnNlP3IucmVzcG9uc2VUZXh0OnIucmVzcG9uc2UpLDA9PT1vJiYobz1sPzIwMDowKTt2YXIgYz1vPj0yMDAmJm88MzAwO2lmKCJqc29uIj09PXQucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIGwpe3ZhciBmPWw7bD1sLnJlcGxhY2UoaiwiIik7dHJ5e2w9IiIhPT1sP0pTT04ucGFyc2UobCk6bnVsbH1jYXRjaCh0KXtsPWYsYyYmKGM9ITEsbD17ZXJyb3I6dCx0ZXh0Omx9KX19Yz8obi5uZXh0KG5ldyBDKHtib2R5OmwsaGVhZGVyczppLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpLG4uY29tcGxldGUoKSk6bi5lcnJvcihuZXcgUyh7ZXJyb3I6bCxoZWFkZXJzOmksc3RhdHVzOm8sc3RhdHVzVGV4dDphLHVybDpzfHx2b2lkIDB9KSl9LGM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFMoe2Vycm9yOnQsc3RhdHVzOnIuc3RhdHVzfHwwLHN0YXR1c1RleHQ6ci5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciJ9KTtuLmVycm9yKGUpfSxmPSExLGg9ZnVuY3Rpb24oZSl7Znx8KG4ubmV4dCh1KCkpLGY9ITApO3ZhciBpPXt0eXBlOncuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6ZS5sb2FkZWR9O2UubGVuZ3RoQ29tcHV0YWJsZSYmKGkudG90YWw9ZS50b3RhbCksInRleHQiPT09dC5yZXNwb25zZVR5cGUmJnIucmVzcG9uc2VUZXh0JiYoaS5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksbi5uZXh0KGkpfSxwPWZ1bmN0aW9uKHQpe3ZhciBlPXt0eXBlOncuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOnQubG9hZGVkfTt0Lmxlbmd0aENvbXB1dGFibGUmJihlLnRvdGFsPXQudG90YWwpLG4ubmV4dChlKX07cmV0dXJuIHIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCksci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYyksdC5yZXBvcnRQcm9ncmVzcyYmKHIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGgpLG51bGwhPT1hJiZyLnVwbG9hZCYmci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnNlbmQoYSksbi5uZXh0KHt0eXBlOncuU2VudH0pLGZ1bmN0aW9uKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYyksci5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsKSx0LnJlcG9ydFByb2dyZXNzJiYoci5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsaCksbnVsbCE9PWEmJnIudXBsb2FkJiZyLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIuYWJvcnQoKX19KX0sdH0oKSxSPW5ldyBpLm8oIlhTUkZfQ09PS0lFX05BTUUiKSxEPW5ldyBpLm8oIlhTUkZfSEVBREVSX05BTUUiKSxMPWZ1bmN0aW9uKCl7fSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIHQhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1PYmplY3QoYy51KSh0LHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPXQpLHRoaXMubGFzdFRva2VufSx0fSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy50b2tlblNlcnZpY2U9dCx0aGlzLmhlYWRlck5hbWU9ZX1yZXR1cm4gdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC51cmwudG9Mb3dlckNhc2UoKTtpZigiR0VUIj09PXQubWV0aG9kfHwiSEVBRCI9PT10Lm1ldGhvZHx8bi5zdGFydHNXaXRoKCJodHRwOi8vIil8fG4uc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gZS5oYW5kbGUodCk7dmFyIHI9dGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW4oKTtyZXR1cm4gbnVsbD09PXJ8fHQuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKXx8KHQ9dC5jbG9uZSh7aGVhZGVyczp0LmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxyKX0pKSxlLmhhbmRsZSh0KX0sdH0oKSxVPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuYmFja2VuZD10LHRoaXMuaW5qZWN0b3I9ZSx0aGlzLmNoYWluPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXtpZihudWxsPT09dGhpcy5jaGFpbil7dmFyIGU9dGhpcy5pbmplY3Rvci5nZXQoSSxbXSk7dGhpcy5jaGFpbj1lLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBUKHQsZSl9LHRoaXMuYmFja2VuZCl9cmV0dXJuIHRoaXMuY2hhaW4uaGFuZGxlKHQpfSx0fSgpLHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmRpc2FibGU9ZnVuY3Rpb24oKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W3twcm92aWRlOlYsdXNlQ2xhc3M6QX1dfX0sdC53aXRoT3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHtuZ01vZHVsZTp0LHByb3ZpZGVyczpbZS5jb29raWVOYW1lP3twcm92aWRlOlIsdXNlVmFsdWU6ZS5jb29raWVOYW1lfTpbXSxlLmhlYWRlck5hbWU/e3Byb3ZpZGU6RCx1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19LHR9KCksQj1mdW5jdGlvbigpe319LHQ5Zlo6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKSxvPW4oImI3bVciKSxhPW4oIkc1SjEiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/T2JqZWN0KGEuYikoKTplLmxpZnQobmV3IHUodCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgby5hfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsKHQsdGhpcy50b3RhbCkpfSx0fSgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnRvdGFsPW4sci5jb3VudD0wLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudG90YWwsbj0rK3RoaXMuY291bnQ7bjw9ZSYmKHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSxuPT09ZSYmKHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCkpKX0sZX0oaS5hKX0sdTY3RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiRW44KyIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj10W3IuYV0oKTs7KXt2YXIgaT1uLm5leHQoKTtpZihpLmRvbmUpe2UuY29tcGxldGUoKTticmVha31pZihlLm5leHQoaS52YWx1ZSksZS5jbG9zZWQpYnJlYWt9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4ucmV0dXJuJiZlLmFkZChmdW5jdGlvbigpe24ucmV0dXJuJiZuLnJldHVybigpfSksZX19fSx1TWFPOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnN1YmplY3Q9ZSxyLnN1YnNjcmliZXI9bixyLmNsb3NlZD0hMSxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe2lmKCF0aGlzLmNsb3NlZCl7dGhpcy5jbG9zZWQ9ITA7dmFyIHQ9dGhpcy5zdWJqZWN0LGU9dC5vYnNlcnZlcnM7aWYodGhpcy5zdWJqZWN0PW51bGwsZSYmMCE9PWUubGVuZ3RoJiYhdC5pc1N0b3BwZWQmJiF0LmNsb3NlZCl7dmFyIG49ZS5pbmRleE9mKHRoaXMuc3Vic2NyaWJlcik7LTEhPT1uJiZlLnNwbGljZShuLDEpfX19LGV9KG4oInB1Z1QiKS5hKX0sd0Z3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigibXJTRyIpLGk9bigiaWhZWSIpLG89bigiQ2NuRyIpLGE9KG4oIlpZanQiKSxuKCJOU1lMIikpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fbmV4dEFuaW1hdGlvbklkPTAsci5fcmVuZGVyZXI9ZS5jcmVhdGVSZW5kZXJlcihuLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOm8uTy5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSkscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uZXh0QW5pbWF0aW9uSWQudG9TdHJpbmcoKTt0aGlzLl9uZXh0QW5pbWF0aW9uSWQrKzt2YXIgbj1BcnJheS5pc0FycmF5KHQpP09iamVjdChpLmkpKHQpOnQ7cmV0dXJuIGModGhpcy5fcmVuZGVyZXIsbnVsbCxlLCJyZWdpc3RlciIsW25dKSxuZXcgdShlLHRoaXMuX3JlbmRlcmVyKX0sZX0oaS5iKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2lkPWUsci5fcmVuZGVyZXI9bixyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbCh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX0sZX0oaS5jKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9cix0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLG4pfXJldHVybiB0LnByb3RvdHlwZS5fbGlzdGVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsIkBAIit0aGlzLmlkKyI6Iit0LGUpfSx0LnByb3RvdHlwZS5fY29tbWFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gYyh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJkb25lIix0KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInBhdXNlIil9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInJlc2V0Iil9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIix0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdH0oKTtmdW5jdGlvbiBjKHQsZSxuLHIsaSl7cmV0dXJuIHQuc2V0UHJvcGVydHkoZSwiQEAiK24rIjoiK3IsaSl9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRlbGVnYXRlPXQsdGhpcy5lbmdpbmU9ZSx0aGlzLl96b25lPW4sdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLHRoaXMucHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoMCksZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe2UmJmUucGFyZW50Tm9kZSh0KSYmZS5yZW1vdmVDaGlsZCh0LnBhcmVudE5vZGUsdCl9fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSk7aWYoISh0JiZlJiZlLmRhdGEmJmUuZGF0YS5hbmltYXRpb24pKXt2YXIgaT10aGlzLl9yZW5kZXJlckNhY2hlLmdldChyKTtyZXR1cm4gaXx8KGk9bmV3IGgoIiIscix0aGlzLmVuZ2luZSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQocixpKSksaX12YXIgbz1lLmlkLGE9ZS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3JldHVybiB0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihhLHQpLGUuZGF0YS5hbmltYXRpb24uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbi5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKG8sYSx0LGUubmFtZSxlKX0pLG5ldyBkKHRoaXMsYSxyLHRoaXMuZW5naW5lKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLl9zY2hlZHVsZUNvdW50VGFzaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt0Ll9taWNyb3Rhc2tJZCsrfSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpczt0Pj0wJiZ0PHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oZnVuY3Rpb24oKXtpLl96b25lLnJ1bihmdW5jdGlvbigpe2kuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChyLmMpKHQsMik7KDAsZVswXSkoZVsxXSl9KSxpLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtlLG5dKSl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fc2NoZWR1bGVDb3VudFRhc2soKSx0LmVuZ2luZS5mbHVzaCh0Ll9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1uLHRoaXMuZGVzdHJveU5vZGU9dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT9mdW5jdGlvbih0KXtyZXR1cm4gZS5kZXN0cm95Tm9kZSh0KX06bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLHIpfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixyKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuLHIpfSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsbil9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApJiYiQC5kaXNhYmxlZCI9PWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LCEhbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnModCxlKX0sdH0oKSxkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsbixyLGkpfHx0aGlzO3JldHVybiBvLmZhY3Rvcnk9ZSxvLm5hbWVzcGFjZUlkPW4sb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7IkAiPT1lLmNoYXJBdCgwKT8iLiI9PWUuY2hhckF0KDEpJiYiQC5kaXNhYmxlZCI9PWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LG49dm9pZCAwPT09bnx8ISFuKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsdCxlLnN1YnN0cigxKSxuKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sZS5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxvLGEscz10aGlzO2lmKCJAIj09ZS5jaGFyQXQoMCkpe3ZhciB1PWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiB0fX0odCksbD1lLnN1YnN0cigxKSxjPSIiO3JldHVybiJAIiE9bC5jaGFyQXQoMCkmJihsPShpPU9iamVjdChyLmMpKChvPWwsYT1vLmluZGV4T2YoIi4iKSxbby5zdWJzdHJpbmcoMCxhKSxvLnN1YnN0cihhKzEpXSksMikpWzBdLGM9aVsxXSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsdSxsLGMsZnVuY3Rpb24odCl7cy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayh0Ll9kYXRhfHwtMSxuLHQpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sZX0oaCkscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXtyZXR1cm4gdC5jYWxsKHRoaXMsZS5ib2R5LG4scil8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oYS5iKTtmdW5jdGlvbiBtKCl7cmV0dXJuIE9iamVjdChhLmgpKCk/bmV3IGEuZjpuZXcgYS5kfWZ1bmN0aW9uIHkoKXtyZXR1cm4gbmV3IGEuZ31mdW5jdGlvbiBnKHQsZSxuKXtyZXR1cm4gbmV3IGYodCxlLG4pfXZhciB2PW5ldyBvLm8oIkFuaW1hdGlvbk1vZHVsZVR5cGUiKSxiPWZ1bmN0aW9uKCl7fX0seE15RTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigibXJTRyIpLGk9bigiRkZPbyIpLG89bigiK3VtSyIpLGE9bigiMkJkaiIpO2Z1bmN0aW9uIHModCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5saWZ0KG5ldyB1KHQsZSxuKSl9fXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uZXh0T3JPYnNlcnZlcj10LHRoaXMuZXJyb3I9ZSx0aGlzLmNvbXBsZXRlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGwodCx0aGlzLm5leHRPck9ic2VydmVyLHRoaXMuZXJyb3IsdGhpcy5jb21wbGV0ZSkpfSx0fSgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgcz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gcy5fdGFwTmV4dD1vLmEscy5fdGFwRXJyb3I9by5hLHMuX3RhcENvbXBsZXRlPW8uYSxzLl90YXBFcnJvcj1yfHxvLmEscy5fdGFwQ29tcGxldGU9aXx8by5hLE9iamVjdChhLmEpKG4pPyhzLl9jb250ZXh0PXMscy5fdGFwTmV4dD1uKTpuJiYocy5fY29udGV4dD1uLHMuX3RhcE5leHQ9bi5uZXh0fHxvLmEscy5fdGFwRXJyb3I9bi5lcnJvcnx8by5hLHMuX3RhcENvbXBsZXRlPW4uY29tcGxldGV8fG8uYSksc31yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dHJ5e3RoaXMuX3RhcE5leHQuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dHJ5e3RoaXMuX3RhcEVycm9yLmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RyeXt0aGlzLl90YXBDb21wbGV0ZS5jYWxsKHRoaXMuX2NvbnRleHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9cmV0dXJuIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0oaS5hKX0seFRsYTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUifSx5M0J5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIit1bUsiKTtmdW5jdGlvbiBpKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBvKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ/MT09PXQubGVuZ3RoP3RbMF06ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUodCl9LGUpfTpyLmF9fSx6VW5iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciByLGk9bigiQ2NuRyIpLG89bigiQXl0UiIpLGE9bigiSXAwUiIpLHM9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt0aGlzLnBsYXRmb3JtSWQ9dCx0aGlzLmFwcElkPWU7dmFyIG49T2JqZWN0KGEucSkodCk/ImluIHRoZSBicm93c2VyIjoib24gdGhlIHNlcnZlciI7Y29uc29sZS5sb2coIlJ1bm5pbmcgIituKyIgd2l0aCBhcHBJZD0iK2UpfX0oKSx1PW4oImRXWmciKSxsPW4oIm1yU0ciKSxjPW4oIm5rWTciKSxmPW4oImlzYnkiKSxoPW4oIk1HQlMiKSxkPW4oInpvdG0iKSxwPW4oIklVVGIiKSxtPXt9LHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucmVzdWx0U2VsZWN0b3I9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgZyh0LHRoaXMucmVzdWx0U2VsZWN0b3IpKX0sdH0oKSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5yZXN1bHRTZWxlY3Rvcj1uLHIuYWN0aXZlPTAsci52YWx1ZXM9W10sci5vYnNlcnZhYmxlcz1bXSxyfXJldHVybiBsLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLnZhbHVlcy5wdXNoKG0pLHRoaXMub2JzZXJ2YWJsZXMucHVzaCh0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vYnNlcnZhYmxlcyxlPXQubGVuZ3RoO2lmKDA9PT1lKXRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtlbHNle3RoaXMuYWN0aXZlPWUsdGhpcy50b1Jlc3BvbmQ9ZTtmb3IodmFyIG49MDtuPGU7bisrKXt2YXIgcj10W25dO3RoaXMuYWRkKE9iamVjdChkLmEpKHRoaXMscixyLG4pKX19fSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXswPT0odGhpcy5hY3RpdmUtPTEpJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz10aGlzLnZhbHVlcyxhPXRoaXMudG9SZXNwb25kP29bbl09PT1tPy0tdGhpcy50b1Jlc3BvbmQ6dGhpcy50b1Jlc3BvbmQ6MDtvW25dPWUsMD09PWEmJih0aGlzLnJlc3VsdFNlbGVjdG9yP3RoaXMuX3RyeVJlc3VsdFNlbGVjdG9yKG8pOnRoaXMuZGVzdGluYXRpb24ubmV4dChvLnNsaWNlKCkpKX0sZS5wcm90b3R5cGUuX3RyeVJlc3VsdFNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucmVzdWx0U2VsZWN0b3IuYXBwbHkodGhpcyx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oaC5hKSx2PW4oIks5SWEiKSxiPW4oIjZibEYiKSxfPW4oIjJCZGoiKSx3PW4oIjY3WS8iKSx4PW4oIm55MjQiKSxPPW4oInAwU2oiKSxDPW4oIm42Z0ciKSxTPW5ldyBTZXQsRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5wbGF0Zm9ybT10LHRoaXMuX21hdGNoTWVkaWE9dGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXImJndpbmRvdy5tYXRjaE1lZGlhP3dpbmRvdy5tYXRjaE1lZGlhLmJpbmQod2luZG93KTprfXJldHVybiB0LnByb3RvdHlwZS5tYXRjaE1lZGlhPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBsYXRmb3JtLldFQktJVCYmZnVuY3Rpb24odCl7aWYoIVMuaGFzKHQpKXRyeXtyfHwoKHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHIpKSxyLnNoZWV0JiYoci5zaGVldC5pbnNlcnRSdWxlKCJAbWVkaWEgIit0KyIgey5meC1xdWVyeS10ZXN0eyB9fSIsMCksUy5hZGQodCkpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IodCl9fSh0KSx0aGlzLl9tYXRjaE1lZGlhKHQpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKSh1LmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gayh0KXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe319fXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMubWVkaWFNYXRjaGVyPXQsdGhpcy56b25lPWUsdGhpcy5fcXVlcmllcz1uZXcgTWFwLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0PW5ldyB2LmF9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmlzTWF0Y2hlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBJKE9iamVjdChDLmEpKHQpKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9yZWdpc3RlclF1ZXJ5KHQpLm1xbC5tYXRjaGVzfSl9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49bnVsbCxyPW51bGw7cmV0dXJuIE9iamVjdChjLmEpKHRbdC5sZW5ndGgtMV0pJiYocj10LnBvcCgpKSwiZnVuY3Rpb24iPT10eXBlb2YgdFt0Lmxlbmd0aC0xXSYmKG49dC5wb3AoKSksMT09PXQubGVuZ3RoJiZPYmplY3QoZi5hKSh0WzBdKSYmKHQ9dFswXSksT2JqZWN0KHAuYSkodCxyKS5saWZ0KG5ldyB5KG4pKX0oSShPYmplY3QoQy5hKSh0KSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9yZWdpc3RlclF1ZXJ5KHQpLm9ic2VydmFibGV9KSkucGlwZShPYmplY3Qody5hKShmdW5jdGlvbih0KXtyZXR1cm57bWF0Y2hlczp0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubWF0Y2hlc30pfX0pKX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9xdWVyaWVzLmhhcyh0KSlyZXR1cm4gdGhpcy5fcXVlcmllcy5nZXQodCk7dmFyIG49dGhpcy5tZWRpYU1hdGNoZXIubWF0Y2hNZWRpYSh0KSxyPXtvYnNlcnZhYmxlOmZ1bmN0aW9uIHQoZSxuLHIpe3JldHVybiByP3QoZSxuKS5waXBlKE9iamVjdCh3LmEpKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoZi5hKSh0KT9yLmFwcGx5KHZvaWQgMCx0KTpyKHQpfSkpOm5ldyBiLmEoZnVuY3Rpb24odCl7dmFyIHIsaT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdC5uZXh0KDE9PT1lLmxlbmd0aD9lWzBdOmUpfTt0cnl7cj1lKGkpfWNhdGNoKGUpe3JldHVybiB2b2lkIHQuZXJyb3IoZSl9aWYoT2JqZWN0KF8uYSkobikpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oaSxyKX19KX0oZnVuY3Rpb24odCl7bi5hZGRMaXN0ZW5lcihmdW5jdGlvbihuKXtyZXR1cm4gZS56b25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0KG4pfSl9KX0sZnVuY3Rpb24odCl7bi5yZW1vdmVMaXN0ZW5lcihmdW5jdGlvbihuKXtyZXR1cm4gZS56b25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0KG4pfSl9KX0pLnBpcGUoT2JqZWN0KHguYSkodGhpcy5fZGVzdHJveVN1YmplY3QpLE9iamVjdChPLmEpKG4pLE9iamVjdCh3LmEpKGZ1bmN0aW9uKHQpe3JldHVybnttYXRjaGVzOnQubWF0Y2hlc319KSksbXFsOm59O3JldHVybiB0aGlzLl9xdWVyaWVzLnNldCh0LHIpLHJ9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKEUpLE9iamVjdChpLlYpKGkueCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBJKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiLCIpfSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUpfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKX0pfXZhciBBLGosUD17WFNtYWxsOiIobWF4LXdpZHRoOiA1OTlweCkiLFNtYWxsOiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSIsTWVkaXVtOiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLExhcmdlOiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAobWF4LXdpZHRoOiAxOTE5cHgpIixYTGFyZ2U6IihtaW4td2lkdGg6IDE5MjBweCkiLEhhbmRzZXQ6IihtYXgtd2lkdGg6IDU5OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtYXgtd2lkdGg6IDk1OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixUYWJsZXQ6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogODM5cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYjoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixIYW5kc2V0UG9ydHJhaXQ6IihtYXgtd2lkdGg6IDU5OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLFRhYmxldFBvcnRyYWl0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiLFdlYlBvcnRyYWl0OiIobWluLXdpZHRoOiA4NDBweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixIYW5kc2V0TGFuZHNjYXBlOiIobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0TGFuZHNjYXBlOiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsV2ViTGFuZHNjYXBlOiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkifSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLmJyZWFrcG9pbnRPYnNlcnZlcj10LHRoaXMucm91dGVyPWUsdGhpcy5jaHVua0xvYWRlcj1uLHRoaXMuc2hvd1N1Ym1lbnU9ITEsdGhpcy5vcGVuZWRTaWRlTmF2PSEwLHRoaXMuaXNIYW5kc2V0JD10aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFAuSGFuZHNldCkucGlwZShPYmplY3Qody5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaGVzfSkpLHRoaXMucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZz1mdW5jdGlvbih0KXtyLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmdVbmJvdW5kKHQscil9fXJldHVybiB0LnByb3RvdHlwZS5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nVW5ib3VuZD1mdW5jdGlvbih0LGUpe2UuY2h1bmtMb2FkZXIubG9hZFBhZ2VDaHVuayh0LGZ1bmN0aW9uKCl7ZS5yb3V0ZXIubmF2aWdhdGVCeVVybCh0KX0pfSx0LnByb3RvdHlwZS5vcGVuU2lkZU5hdj1mdW5jdGlvbigpe3RoaXMub3BlbmVkU2lkZU5hdj0hMCE9PXRoaXMub3BlbmVkU2lkZU5hdn0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksTj1uKCJwTW5TIiksUj1uKCJsemxqIiksRD1uKCJGVlN5IiksTD1uKCJnSTNCIiksRj1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0sVj0oMT09PShBPUYpLmxlbmd0aCYmKGo9QSxBPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEYoaih0KSxlKX0pLHtsZWZ0OmZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihudWxsPT1uJiYobj0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7bjxyOyl7dmFyIGk9bityPj4+MTtBKHRbaV0sZSk8MD9uPWkrMTpyPWl9cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihudWxsPT1uJiYobj0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7bjxyOyl7dmFyIGk9bityPj4+MTtBKHRbaV0sZSk+MD9yPWk6bj1pKzF9cmV0dXJuIG59fSkucmlnaHQsVT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fSx6PWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG89dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1pPW47KythPG87KW51bGwhPShuPXRbYV0pJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1lbHNlIGZvcig7KythPG87KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1pPW47KythPG87KW51bGwhPShuPWUodFthXSxhLHQpKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSk7cmV0dXJuW3IsaV19LEI9QXJyYXkucHJvdG90eXBlLnNsaWNlLEg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxXPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxxPWZ1bmN0aW9uKHQsZSxuKXt0PSt0LGU9K2Usbj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOituO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrcipuO3JldHVybiBvfSxZPU1hdGguc3FydCg1MCksRz1NYXRoLnNxcnQoMTApLFE9TWF0aC5zcXJ0KDIpLEs9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxhLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0oYT1aKHQsZSxuKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKHQ9TWF0aC5jZWlsKHQvYSksZT1NYXRoLmZsb29yKGUvYSksbz1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspb1tzXT0odCtzKSphO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KmEpLGU9TWF0aC5jZWlsKGUqYSksbz1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspb1tzXT0odC1zKS9hO3JldHVybiByJiZvLnJldmVyc2UoKSxvfTtmdW5jdGlvbiBaKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLG89ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49WT8xMDpvPj1HPzU6bz49UT8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PVk/MTA6bz49Rz81Om8+PVE/MjoxKX1mdW5jdGlvbiBYKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLG89ci9pO3JldHVybiBvPj1ZP2kqPTEwOm8+PUc/aSo9NTpvPj1RJiYoaSo9MiksZTx0Py1pOml9dmFyICQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9O0FycmF5O3ZhciBKPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHR0KCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgscj17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBldChyKX1mdW5jdGlvbiBldCh0KXt0aGlzLl89dH1mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgbixyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChuPXRbcl0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIHJ0KHQsZSxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09ZSl7dFtyXT1KLHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1ldC5wcm90b3R5cGU9dHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpldCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10aGlzLl8sbz0ocj1pLCh0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhci5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KSksYT0tMSxzPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHM7KWlmKG49KHQ9b1thXSkudHlwZSlpW25dPXJ0KGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09cnQoaVtuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8czspaWYoKG49KHQ9b1thXSkudHlwZSkmJihuPW50KGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IGV0KHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixyLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKWlbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KHI9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylyW29dLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgaXQ9dHQsb3Q9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGF0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LHN0PWZ1bmN0aW9uKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGF0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTphdFtlXSxsb2NhbDp0fTp0fSx1dD1mdW5jdGlvbih0KXt2YXIgZT1zdCh0KTtyZXR1cm4oZS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1vdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09b3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fSkoZSl9O2Z1bmN0aW9uIGx0KCl7fXZhciBjdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9sdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fTtmdW5jdGlvbiBmdCgpe3JldHVybltdfXZhciBodD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9mdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxkdD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl7dmFyIHB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZighcHQubWF0Y2hlcyl7dmFyIG10PXB0LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8cHQubXNNYXRjaGVzU2VsZWN0b3J8fHB0Lm1vek1hdGNoZXNTZWxlY3Rvcnx8cHQub01hdGNoZXNTZWxlY3RvcjtkdD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbXQuY2FsbCh0aGlzLHQpfX19fXZhciB5dD1kdCxndD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX07ZnVuY3Rpb24gdnQodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9dnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2dCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgYnQ9IiQiO2Z1bmN0aW9uIF90KHQsZSxuLHIsaSxvKXtmb3IodmFyIGEscz0wLHU9ZS5sZW5ndGgsbD1vLmxlbmd0aDtzPGw7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10scltzXT1hKTpuW3NdPW5ldyB2dCh0LG9bc10pO2Zvcig7czx1OysrcykoYT1lW3NdKSYmKGlbc109YSl9ZnVuY3Rpb24gd3QodCxlLG4scixpLG8sYSl7dmFyIHMsdSxsLGM9e30sZj1lLmxlbmd0aCxoPW8ubGVuZ3RoLGQ9bmV3IEFycmF5KGYpO2ZvcihzPTA7czxmOysrcykodT1lW3NdKSYmKGRbc109bD1idCthLmNhbGwodSx1Ll9fZGF0YV9fLHMsZSksbCBpbiBjP2lbc109dTpjW2xdPXUpO2ZvcihzPTA7czxoOysrcykodT1jW2w9YnQrYS5jYWxsKHQsb1tzXSxzLG8pXSk/KHJbc109dSx1Ll9fZGF0YV9fPW9bc10sY1tsXT1udWxsKTpuW3NdPW5ldyB2dCh0LG9bc10pO2ZvcihzPTA7czxmOysrcykodT1lW3NdKSYmY1tkW3NdXT09PXUmJihpW3NdPXUpfWZ1bmN0aW9uIHh0KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciBPdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9O2Z1bmN0aW9uIEN0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8T3QodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gU3QodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEV0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IGt0KHQpfWZ1bmN0aW9uIGt0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1TdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFR0KHQsZSl7Zm9yKHZhciBuPUV0KHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gSXQodCxlKXtmb3IodmFyIG49RXQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiBBdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24ganQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBQdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBNdCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE50KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gUnQoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBEdCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCExKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBMdCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCEwKSx0aGlzLm5leHRTaWJsaW5nKX1rdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBGdD17fSxWdD1udWxsO2Z1bmN0aW9uIFV0KHQsZSxuKXtyZXR1cm4gdD16dCh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIHp0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9VnQ7VnQ9cjt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7VnQ9aX19fWZ1bmN0aW9uIEJ0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsbz1lLmxlbmd0aDtyPG87KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBIdCh0LGUsbil7dmFyIHI9RnQuaGFzT3duUHJvcGVydHkodC50eXBlKT9VdDp6dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzLHU9dGhpcy5fX29uLGw9cihlLG8sYSk7aWYodSlmb3IodmFyIGM9MCxmPXUubGVuZ3RoO2M8ZjsrK2MpaWYoKHM9dVtjXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9bCxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsbCxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmwsY2FwdHVyZTpufSx1P3UucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBXdCh0LGUsbil7dmFyIHI9T3QodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoRnQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBxdD1bbnVsbF07ZnVuY3Rpb24gWXQodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gR3QoKXtyZXR1cm4gbmV3IFl0KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0scXQpfVl0LnByb3RvdHlwZT1HdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOll0LHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIG8sYSxzPWVbaV0sdT1zLmxlbmd0aCxsPXJbaV09bmV3IEFycmF5KHUpLGM9MDtjPHU7KytjKShvPXNbY10pJiYoYT10LmNhbGwobyxvLl9fZGF0YV9fLGMscykpJiYoIl9fZGF0YV9fImluIG8mJihhLl9fZGF0YV9fPW8uX19kYXRhX18pLGxbY109YSk7cmV0dXJuIG5ldyBZdChyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWh0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1bXSxpPVtdLG89MDtvPG47KytvKWZvcih2YXIgYSxzPWVbb10sdT1zLmxlbmd0aCxsPTA7bDx1OysrbCkoYT1zW2xdKSYmKHIucHVzaCh0LmNhbGwoYSxhLl9fZGF0YV9fLGwscykpLGkucHVzaChhKSk7cmV0dXJuIG5ldyBZdChyLGkpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXl0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBvLGE9ZVtpXSxzPWEubGVuZ3RoLHU9cltpXT1bXSxsPTA7bDxzOysrbCkobz1hW2xdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxsLGEpJiZ1LnB1c2gobyk7cmV0dXJuIG5ldyBZdChyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbih0KXtwWysrY109dH0pLHA7dmFyIG4scj1lP3d0Ol90LGk9dGhpcy5fcGFyZW50cyxvPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKG49dCx0PWZ1bmN0aW9uKCl7cmV0dXJuIG59KTtmb3IodmFyIGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz0wO2M8YTsrK2Mpe3ZhciBmPWlbY10saD1vW2NdLGQ9aC5sZW5ndGgscD10LmNhbGwoZixmJiZmLl9fZGF0YV9fLGMsaSksbT1wLmxlbmd0aCx5PXVbY109bmV3IEFycmF5KG0pLGc9c1tjXT1uZXcgQXJyYXkobSk7cihmLGgseSxnLGxbY109bmV3IEFycmF5KGQpLHAsZSk7Zm9yKHZhciB2LGIsXz0wLHc9MDtfPG07KytfKWlmKHY9eVtfXSl7Zm9yKF8+PXcmJih3PV8rMSk7IShiPWdbd10pJiYrK3c8bTspO3YuX25leHQ9Ynx8bnVsbH19cmV0dXJuKHM9bmV3IFl0KHMsaSkpLl9lbnRlcj11LHMuX2V4aXQ9bCxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgWXQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoZ3QpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZdCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGd0KSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9TWF0aC5taW4ocixuLmxlbmd0aCksbz1uZXcgQXJyYXkociksYT0wO2E8aTsrK2EpZm9yKHZhciBzLHU9ZVthXSxsPW5bYV0sYz11Lmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGMpLGg9MDtoPGM7KytoKShzPXVbaF18fGxbaF0pJiYoZltoXT1zKTtmb3IoO2E8cjsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgWXQobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciByLGk9dFtlXSxvPWkubGVuZ3RoLTEsYT1pW29dOy0tbz49MDspKHI9aVtvXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD14dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXtmb3IodmFyIGEscz1uW29dLHU9cy5sZW5ndGgsbD1pW29dPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYykoYT1zW2NdKSYmKGxbY109YSk7bC5zb3J0KGUpfXJldHVybiBuZXcgWXQoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSx0fSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcj10W2VdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPXJbaV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrdH0pLHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKGk9b1thXSkmJnQuY2FsbChpLGkuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPXN0KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnIuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX06bi5sb2NhbD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX0pKG4sZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fSkodCxlLG51bGw9PW4/IiI6bikpOkN0KHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX0pKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49U3QodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9RXQodGhpcy5ub2RlKCkpLGk9LTEsbz1uLmxlbmd0aDsrK2k8bzspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VHQ6SXQpKHRoaXMsdCl9fTplP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe1R0KHRoaXMsdCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtJdCh0aGlzLHQpfX0pKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0F0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/anQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFB0KX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKE10KX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dXQodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dXQodCkscj1udWxsPT1lP050OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6Y3QoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFJ0KX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/THQ6RHQpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG89KHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9IdDpCdCxudWxsPT1uJiYobj0hMSkscj0wO3I8YTsrK3IpdGhpcy5lYWNoKHMob1tyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciB1LGw9MCxjPXMubGVuZ3RoO2w8YzsrK2wpZm9yKHI9MCx1PXNbbF07cjxhOysrcilpZigoaT1vW3JdKS50eXBlPT09dS50eXBlJiZpLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFd0KHRoaXMsdCxlKX19KSh0LGUpKX19O3ZhciBRdD1HdCxLdD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFl0KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgWXQoW1t0XV0scXQpfSxadD0wO2Z1bmN0aW9uIFh0KCl7dGhpcy5fPSJAIisoKytadCkudG9TdHJpbmcoMzYpfVh0LnByb3RvdHlwZT0oZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFh0fSkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYdCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgJHQ9ZnVuY3Rpb24odCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fTtmdW5jdGlvbiBKdCh0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiB0ZSgpe312YXIgZWU9IlxccyooWystXT9cXGQrKVxccyoiLG5lPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHJlPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixpZT0vXiMoWzAtOWEtZl17M30pJC8sb2U9L14jKFswLTlhLWZdezZ9KSQvLGFlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tlZSxlZSxlZV0rIlxcKSQiKSxzZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbcmUscmUscmVdKyJcXCkkIiksdWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tlZSxlZSxlZSxuZV0rIlxcKSQiKSxsZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3JlLHJlLHJlLG5lXSsiXFwpJCIpLGNlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tuZSxyZSxyZV0rIlxcKSQiKSxmZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW25lLHJlLHJlLG5lXSsiXFwpJCIpLGhlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGRlKHQpe3ZhciBlO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1pZS5leGVjKHQpKT9uZXcgdmUoKGU9cGFyc2VJbnQoZVsxXSwxNikpPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6KGU9b2UuZXhlYyh0KSk/cGUocGFyc2VJbnQoZVsxXSwxNikpOihlPWFlLmV4ZWModCkpP25ldyB2ZShlWzFdLGVbMl0sZVszXSwxKTooZT1zZS5leGVjKHQpKT9uZXcgdmUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9dWUuZXhlYyh0KSk/bWUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9bGUuZXhlYyh0KSk/bWUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9Y2UuZXhlYyh0KSk/X2UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1mZS5leGVjKHQpKT9fZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmhlLmhhc093blByb3BlcnR5KHQpP3BlKGhlW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgdmUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBwZSh0KXtyZXR1cm4gbmV3IHZlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBtZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IHZlKHQsZSxuLHIpfWZ1bmN0aW9uIHllKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGV8fCh0PWRlKHQpKSx0P25ldyB2ZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgdmV9ZnVuY3Rpb24gZ2UodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3llKHQpOm5ldyB2ZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gdmUodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIGJlKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gX2UodCxlLG4scil7cmV0dXJuIHI8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyB4ZSh0LGUsbixyKX1mdW5jdGlvbiB3ZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHhlKXJldHVybiBuZXcgeGUodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgdGV8fCh0PWRlKHQpKSwhdClyZXR1cm4gbmV3IHhlO2lmKHQgaW5zdGFuY2VvZiB4ZSlyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLG89TWF0aC5tYXgoZSxuLHIpLGE9TmFOLHM9by1pLHU9KG8raSkvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1yKS9zKzYqKG48cik6bj09PW8/KHItZSkvcysyOihlLW4pL3MrNCxzLz11PC41P28raToyLW8taSxhKj02MCk6cz11PjAmJnU8MT8wOmEsbmV3IHhlKGEscyx1LHQub3BhY2l0eSl9KHQpOm5ldyB4ZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24geGUodCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIE9lKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX0kdCh0ZSxkZSx7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn19KSwkdCh2ZSxnZSxKdCh0ZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHZlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyB2ZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpmdW5jdGlvbigpe3JldHVybiIjIitiZSh0aGlzLnIpK2JlKHRoaXMuZykrYmUodGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksJHQoeGUsd2UsSnQodGUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyB4ZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyB4ZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IHZlKE9lKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLE9lKHQsaSxyKSxPZSh0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgQ2U9TWF0aC5QSS8xODAsU2U9MTgwL01hdGguUEksRWU9Ljk2NDIyLGtlPTEsVGU9LjgyNTIxLEllPTQvMjksQWU9Ni8yOSxqZT0zKkFlKkFlLFBlPUFlKkFlKkFlO2Z1bmN0aW9uIE1lKHQpe2lmKHQgaW5zdGFuY2VvZiBOZSlyZXR1cm4gbmV3IE5lKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIFVlKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgTmUodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpDZTtyZXR1cm4gbmV3IE5lKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIHZlfHwodD15ZSh0KSk7dmFyIG4scixpPUZlKHQuciksbz1GZSh0LmcpLGE9RmUodC5iKSxzPVJlKCguMjIyNTA0NSppKy43MTY4Nzg2Km8rLjA2MDYxNjkqYSkva2UpO3JldHVybiBpPT09byYmbz09PWE/bj1yPXM6KG49UmUoKC40MzYwNzQ3KmkrLjM4NTA2NDkqbysuMTQzMDgwNCphKS9FZSkscj1SZSgoLjAxMzkzMjIqaSsuMDk3MTA0NSpvKy43MTQxNzMzKmEpL1RlKSksbmV3IE5lKDExNipzLTE2LDUwMCoobi1zKSwyMDAqKHMtciksdC5vcGFjaXR5KX1mdW5jdGlvbiBOZSh0LGUsbixyKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gUmUodCl7cmV0dXJuIHQ+UGU/TWF0aC5wb3codCwxLzMpOnQvamUrSWV9ZnVuY3Rpb24gRGUodCl7cmV0dXJuIHQ+QWU/dCp0KnQ6amUqKHQtSWUpfWZ1bmN0aW9uIExlKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gRmUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gVmUodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBVZSlyZXR1cm4gbmV3IFVlKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE5lfHwodD1NZSh0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IFVlKE5hTiwwLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqU2U7cmV0dXJuIG5ldyBVZShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX0odCk6bmV3IFVlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBVZSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9JHQoTmUsZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP01lKHQpOm5ldyBOZSh0LGUsbixudWxsPT1yPzE6cil9LEp0KHRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5lKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTmUodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHZlKExlKDMuMTMzODU2MSooZT1FZSpEZShlKSktMS42MTY4NjY3Kih0PWtlKkRlKHQpKS0uNDkwNjE0Nioobj1UZSpEZShuKSkpLExlKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqbiksTGUoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypuKSx0aGlzLm9wYWNpdHkpfX0pKSwkdChVZSxWZSxKdCh0ZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVZSh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFVlKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIE1lKHRoaXMpLnJnYigpfX0pKTt2YXIgemU9LS4yOTIyNyxCZT0tLjkwNjQ5LEhlPTEuOTcyOTQsV2U9SGUqQmUscWU9MS43ODI3NypIZSxZZT0xLjc4Mjc3KnplLSAtLjE0ODYxKkJlO2Z1bmN0aW9uIEdlKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgUWUpcmV0dXJuIG5ldyBRZSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiB2ZXx8KHQ9eWUodCkpO3ZhciBlPXQuZy8yNTUsbj10LmIvMjU1LHI9KFllKm4rV2UqKHQuci8yNTUpLXFlKmUpLyhZZStXZS1xZSksaT1uLXIsbz0oSGUqKGUtciktemUqaSkvQmUsYT1NYXRoLnNxcnQobypvK2kqaSkvKEhlKnIqKDEtcikpLHM9YT9NYXRoLmF0YW4yKG8saSkqU2UtMTIwOk5hTjtyZXR1cm4gbmV3IFFlKHM8MD9zKzM2MDpzLGEscix0Lm9wYWNpdHkpfSh0KTpuZXcgUWUodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFFlKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBLZSh0LGUsbixyLGkpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSplKyg0LTYqbyszKmEpKm4rKDErMyp0KzMqby0zKmEpKnIrYSppKS82fSR0KFFlLEdlLEp0KHRlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgUWUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgUWUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKkNlLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyB2ZSgyNTUqKGUrbiooLS4xNDg2MSpyKzEuNzgyNzcqaSkpLDI1NSooZStuKih6ZSpyK0JlKmkpKSwyNTUqKGUrbiooSGUqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBaZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIFhlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gJGUodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/WGUodCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOlplKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gSmUodCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/WGUodCxuKTpaZShpc05hTih0KT9lOnQpfXZhciB0bj1mdW5jdGlvbiB0KGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0odD0rdCk/SmU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqZSxuKX19KGUsbix0KTpaZShpc05hTihlKT9uOmUpfX0oZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW4oKHQ9Z2UodCkpLnIsKGU9Z2UoZSkpLnIpLGk9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT1KZSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1yKGUpLHQuZz1pKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gZW4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLHIsaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pcj1nZShlW25dKSxvW25dPXIucnx8MCxhW25dPXIuZ3x8MCxzW25dPXIuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSxzPXQocyksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1vKHQpLHIuZz1hKHQpLHIuYj1zKHQpLHIrIiJ9fX12YXIgbm4scm4sb24sYW4sc249ZW4oZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFtyXSxvPXRbcisxXTtyZXR1cm4gS2UoKG4tci9lKSplLHI+MD90W3ItMV06MippLW8saSxvLHI8ZS0xP3RbcisyXToyKm8taSl9fSksdW49KGVuKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSk7cmV0dXJuIEtlKChuLXIvZSkqZSx0WyhyK2UtMSklZV0sdFtyJWVdLHRbKHIrMSklZV0sdFsocisyKSVlXSl9fSksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gdCtlKm59fSksbG49L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNuPW5ldyBSZWdFeHAobG4uc291cmNlLCJnIiksZm49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz1sbi5sYXN0SW5kZXg9Y24ubGFzdEluZGV4PTAsYT0tMSxzPVtdLHU9W107Zm9yKHQrPSIiLGUrPSIiOyhuPWxuLmV4ZWModCkpJiYocj1jbi5leGVjKGUpKTspKGk9ci5pbmRleCk+byYmKGk9ZS5zbGljZShvLGkpLHNbYV0/c1thXSs9aTpzWysrYV09aSksKG49blswXSk9PT0ocj1yWzBdKT9zW2FdP3NbYV0rPXI6c1srK2FdPXI6KHNbKythXT1udWxsLHUucHVzaCh7aTphLHg6dW4obixyKX0pKSxvPWNuLmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKGk9ZS5zbGljZShvKSxzW2FdP3NbYV0rPWk6c1srK2FdPWkpLHMubGVuZ3RoPDI/dVswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fSh1WzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9dS5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49dVtyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LGhuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9aZShlKTooIm51bWJlciI9PT1yP3VuOiJzdHJpbmciPT09cj8obj1kZShlKSk/KGU9bix0bik6Zm46ZSBpbnN0YW5jZW9mIGRlP3RuOmUgaW5zdGFuY2VvZiBEYXRlP2Z1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIG4uc2V0VGltZSh0K2Uqciksbn19OkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24odCxlKXt2YXIgbixyPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4ocix0Lmxlbmd0aCk6MCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShyKTtmb3Iobj0wO248aTsrK24pb1tuXT1obih0W25dLGVbbl0pO2Zvcig7bjxyOysrbilhW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuPTA7bjxpOysrbilhW25dPW9bbl0odCk7cmV0dXJuIGF9fToiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/ZnVuY3Rpb24odCxlKXt2YXIgbixyPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9yW25dPWhuKHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiByKWlbbl09cltuXSh0KTtyZXR1cm4gaX19OnVuKSh0LGUpfSxkbj1mdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQrZSpuKX19LHBuPTE4MC9NYXRoLlBJLG1uPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LHluPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYSxzLHU7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKHU9dCpuK2UqcikmJihuLT10KnUsci09ZSp1KSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLHUvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsdT0tdSxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKnBuLHNrZXdYOk1hdGguYXRhbih1KSpwbixzY2FsZVg6YSxzY2FsZVk6c319O2Z1bmN0aW9uIGduKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLHU9W107cmV0dXJuIG89dChvKSxhPXQoYSksZnVuY3Rpb24odCxyLGksbyxhLHMpe2lmKHQhPT1pfHxyIT09byl7dmFyIHU9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6dS00LHg6dW4odCxpKX0se2k6dS0yLHg6dW4ocixvKX0pfWVsc2UoaXx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIraStlK28rbil9KG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLHUpLGZ1bmN0aW9uKHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OnVuKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KG8ucm90YXRlLGEucm90YXRlLHMsdSksZnVuY3Rpb24odCxlLG4sbyl7dCE9PWU/by5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OnVuKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShvLnNrZXdYLGEuc2tld1gscyx1KSxmdW5jdGlvbih0LGUsbixyLG8sYSl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1vLnB1c2goaShvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4OnVuKHQsbil9LHtpOnMtMix4OnVuKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8by5wdXNoKGkobykrInNjYWxlKCIrbisiLCIrcisiKSIpfShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLHUpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9dS5sZW5ndGg7KytuPHI7KXNbKGU9dVtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIHZuPWduKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIj09PXQ/bW46KG5ufHwobm49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikscm49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG9uPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxubi5zdHlsZS50cmFuc2Zvcm09dCx0PW9uLmdldENvbXB1dGVkU3R5bGUocm4uYXBwZW5kQ2hpbGQobm4pLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHJuLnJlbW92ZUNoaWxkKG5uKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSx5bigrdFswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSwicHgsICIsInB4KSIsImRlZykiKSxibj1nbihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9tbjooYW58fChhbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxhbi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9YW4udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/eW4oKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6bW4pfSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIF9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9d2UoZSkpLmgsKG49d2UobikpLmgpLGk9SmUoZS5zLG4ucyksbz1KZShlLmwsbi5sKSxhPUplKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPWkodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fWZ1bmN0aW9uIHduKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9VmUoZSkpLmgsKG49VmUobikpLmgpLGk9SmUoZS5jLG4uYyksbz1KZShlLmwsbi5sKSxhPUplKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fWZ1bmN0aW9uIHhuKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIHIoZSxyKXt2YXIgaT10KChlPUdlKGUpKS5oLChyPUdlKHIpKS5oKSxvPUplKGUucyxyLnMpLGE9SmUoZS5sLHIubCkscz1KZShlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1vKHQpLGUubD1hKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLHIuZ2FtbWE9ZSxyfSgxKX1NYXRoLF9uKCRlKSxfbihKZSksd24oJGUpLHduKEplKSx4bigkZSk7dmFyIE9uLENuLFNuPXhuKEplKSxFbj0wLGtuPTAsVG49MCxJbj0xZTMsQW49MCxqbj0wLFBuPTAsTW49Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsTm49Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gUm4oKXtyZXR1cm4gam58fChObihEbiksam49TW4ubm93KCkrUG4pfWZ1bmN0aW9uIERuKCl7am49MH1mdW5jdGlvbiBMbigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gRm4odCxlLG4pe3ZhciByPW5ldyBMbjtyZXR1cm4gci5yZXN0YXJ0KHQsZSxuKSxyfWZ1bmN0aW9uIFZuKCl7am49KEFuPU1uLm5vdygpKStQbixFbj1rbj0wO3RyeXshZnVuY3Rpb24oKXtSbigpLCsrRW47Zm9yKHZhciB0LGU9T247ZTspKHQ9am4tZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUVufSgpfWZpbmFsbHl7RW49MCxmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG49T24scj0xLzA7bjspbi5fY2FsbD8ocj5uLl90aW1lJiYocj1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOk9uPWUpO0NuPXQsem4ocil9KCksam49MH19ZnVuY3Rpb24gVW4oKXt2YXIgdD1Nbi5ub3coKSxlPXQtQW47ZT5JbiYmKFBuLT1lLEFuPXQpfWZ1bmN0aW9uIHpuKHQpe0VufHwoa24mJihrbj1jbGVhclRpbWVvdXQoa24pKSx0LWpuPjI0Pyh0PDEvMCYmKGtuPXNldFRpbWVvdXQoVm4sdC1Nbi5ub3coKS1QbikpLFRuJiYoVG49Y2xlYXJJbnRlcnZhbChUbikpKTooVG58fChBbj1Nbi5ub3coKSxUbj1zZXRJbnRlcnZhbChVbixJbikpLEVuPTEsTm4oVm4pKSl9TG4ucHJvdG90eXBlPUZuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TG4scmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP1JuKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fENuPT09dGhpc3x8KENuP0NuLl9uZXh0PXRoaXM6T249dGhpcyxDbj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLHpuKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHpuKCkpfX07dmFyIEJuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgTG47cmV0dXJuIHIucmVzdGFydChmdW5jdGlvbihuKXtyLnN0b3AoKSx0KG4rZSl9LGU9bnVsbD09ZT8wOitlLG4pLHJ9LEhuPWl0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLFduPVtdLHFuPTAsWW49MSxHbj0yLFFuPTMsS249NCxabj01LFhuPTYsJG49ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyh1KXt2YXIgbCxjLGYsaDtpZihuLnN0YXRlIT09WW4pcmV0dXJuIHMoKTtmb3IobCBpbiBpKWlmKChoPWlbbF0pLm5hbWU9PT1uLm5hbWUpe2lmKGguc3RhdGU9PT1RbilyZXR1cm4gQm4obyk7aC5zdGF0ZT09PUtuPyhoLnN0YXRlPVhuLGgudGltZXIuc3RvcCgpLGgub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18saC5pbmRleCxoLmdyb3VwKSxkZWxldGUgaVtsXSk6K2w8ZSYmKGguc3RhdGU9WG4saC50aW1lci5zdG9wKCksZGVsZXRlIGlbbF0pfWlmKEJuKGZ1bmN0aW9uKCl7bi5zdGF0ZT09PVFuJiYobi5zdGF0ZT1LbixuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksYSh1KSl9KSxuLnN0YXRlPUduLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLG4uc3RhdGU9PT1Hbil7Zm9yKG4uc3RhdGU9UW4scj1uZXcgQXJyYXkoZj1uLnR3ZWVuLmxlbmd0aCksbD0wLGM9LTE7bDxmOysrbCkoaD1uLnR3ZWVuW2xdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYoclsrK2NdPWgpO3IubGVuZ3RoPWMrMX19ZnVuY3Rpb24gYShlKXtmb3IodmFyIGk9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9Wm4sMSksbz0tMSxhPXIubGVuZ3RoOysrbzxhOylyW29dLmNhbGwobnVsbCxpKTtuLnN0YXRlPT09Wm4mJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciByIGluIG4uc3RhdGU9WG4sbi50aW1lci5zdG9wKCksZGVsZXRlIGlbZV0saSlyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufWlbZV09bixuLnRpbWVyPUZuKGZ1bmN0aW9uKHQpe24uc3RhdGU9WW4sbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0sMCxuLnRpbWUpfSh0LG4se25hbWU6ZSxpbmRleDpyLGdyb3VwOmksb246SG4sdHdlZW46V24sdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6cW59KX07ZnVuY3Rpb24gSm4odCxlKXt2YXIgbj1lcih0LGUpO2lmKG4uc3RhdGU+cW4pdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB0cih0LGUpe3ZhciBuPWVyKHQsZSk7aWYobi5zdGF0ZT5Hbil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBlcih0LGUpe3ZhciBuPXQuX190cmFuc2l0aW9uO2lmKCFufHwhKG49bltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBufWZ1bmN0aW9uIG5yKHQsZSxuKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dHIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LHIpLnZhbHVlW2VdfX12YXIgcnI9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP3VuOmUgaW5zdGFuY2VvZiBkZT90bjoobj1kZShlKSk/KGU9bix0bik6Zm4pKHQsZSl9LGlyPVF0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcixvcj0wO2Z1bmN0aW9uIGFyKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBzcigpe3JldHVybisrb3J9dmFyIHVyPVF0LnByb3RvdHlwZTtmdW5jdGlvbiBscih0KXtyZXR1cm4rdH1hci5wcm90b3R5cGU9KGZ1bmN0aW9uKHQpe3JldHVybiBRdCgpLnRyYW5zaXRpb24odCl9KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFyLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWN0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzLHUsbD1yW2FdLGM9bC5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxoPTA7aDxjOysraCkocz1sW2hdKSYmKHU9dC5jYWxsKHMscy5fX2RhdGFfXyxoLGwpKSYmKCJfX2RhdGFfXyJpbiBzJiYodS5fX2RhdGFfXz1zLl9fZGF0YV9fKSxmW2hdPXUsJG4oZltoXSxlLG4saCxmLGVyKHMsbikpKTtyZXR1cm4gbmV3IGFyKG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1odCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIHUsbD1yW3NdLGM9bC5sZW5ndGgsZj0wO2Y8YzsrK2YpaWYodT1sW2ZdKXtmb3IodmFyIGgsZD10LmNhbGwodSx1Ll9fZGF0YV9fLGYsbCkscD1lcih1LG4pLG09MCx5PWQubGVuZ3RoO208eTsrK20pKGg9ZFttXSkmJiRuKGgsZSxuLG0sZCxwKTtvLnB1c2goZCksYS5wdXNoKHUpfXJldHVybiBuZXcgYXIobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIG8sYT1lW2ldLHM9YS5sZW5ndGgsdT1yW2ldPVtdLGw9MDtsPHM7KytsKShvPWFbbF0pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGwsYSkmJnUucHVzaChvKTtyZXR1cm4gbmV3IGFyKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9TWF0aC5taW4ocixuLmxlbmd0aCksbz1uZXcgQXJyYXkociksYT0wO2E8aTsrK2EpZm9yKHZhciBzLHU9ZVthXSxsPW5bYV0sYz11Lmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGMpLGg9MDtoPGM7KytoKShzPXVbaF18fGxbaF0pJiYoZltoXT1zKTtmb3IoO2E8cjsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgYXIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGlyKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1zcigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHM9cltvXSx1PXMubGVuZ3RoLGw9MDtsPHU7KytsKWlmKGE9c1tsXSl7dmFyIGM9ZXIoYSxlKTskbihhLHQsbixsLHMse3RpbWU6Yy50aW1lK2MuZGVsYXkrYy5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmMuZHVyYXRpb24sZWFzZTpjLmVhc2V9KX1yZXR1cm4gbmV3IGFyKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOnVyLmNhbGwsbm9kZXM6dXIubm9kZXMsbm9kZTp1ci5ub2RlLHNpemU6dXIuc2l6ZSxlbXB0eTp1ci5lbXB0eSxlYWNoOnVyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2VyKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KGUpP0puOnRyO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyx0KSxzPWEub247cyE9PXImJihpPShyPXMpLmNvcHkoKSkub24oZSxuKSxhLm9uPWl9fShuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49c3QodCkscj0idHJhbnNmb3JtIj09PW4/Ym46cnI7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09cz9udWxsOmE9PT1yJiZzPT09aT9vOm89ZShyPWEsaT1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9bih0aGlzKTtpZihudWxsIT1zKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PXM/bnVsbDphPT09ciYmcz09PWk/bzpvPWUocj1hLGk9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkobixyLG5yKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKG4pOihuLmxvY2FsP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PW4/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSkobixyLGUrIiIpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1zdCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciBuPXRoaXMscj1lLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24oZSl7bi5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscihlKSl9fXJldHVybiBuLl92YWx1ZT1lLG59OmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciBuPXRoaXMscj1lLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24oZSl7bi5zZXRBdHRyaWJ1dGUodCxyKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn0pKHIsZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/dm46cnI7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89Q3QodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLEN0KHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1uJiZhPT09cj9pOmk9ZShuPW8scj1hKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1DdCh0aGlzLHQpLHM9bih0aGlzKTtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCkscz1DdCh0aGlzLHQpKSxhPT09cz9udWxsOmE9PT1yJiZzPT09aT9vOm89ZShyPWEsaT1zKX19KHQscixucih0aGlzLCJzdHlsZS4iK3QsZSkpOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUN0KHRoaXMsdCk7cmV0dXJuIG89PT1uP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0odCxyLGUrIiIpLG4pfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLGZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPWUuYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShlKSxuKX19cmV0dXJuIHIuX3ZhbHVlPWUscn0odCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0obnIodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKHQ9dGhpcy5faWQsZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pKTt2YXIgdH0sdHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPWVyKHRoaXMubm9kZSgpLG4pLnR3ZWVuLG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoKHI9aVtvXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dHIodGhpcyx0KSxvPWkudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0ocj1uPW8pLmxlbmd0aDthPHM7KythKWlmKHJbYV0ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9aS50d2Vlbj1yfX06ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRyKHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1yKXtpPShyPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sdT0wLGw9aS5sZW5ndGg7dTxsOysrdSlpZihpW3VdLm5hbWU9PT1lKXtpW3VdPXM7YnJlYWt9dT09PWwmJmkucHVzaChzKX1vLnR3ZWVuPWl9fSkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe0puKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe0puKHRoaXMsdCkuZGVsYXk9ZX19KShlLHQpKTplcih0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RyKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe3RyKHRoaXMsdCkuZHVyYXRpb249ZX19KShlLHQpKTplcih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5lYXNlPWV9fShlLHQpKTplcih0aGlzLm5vZGUoKSxlKS5lYXNlfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxNYXRoLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybi0tdCp0KigoZSsxKSp0K2UpKzF9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKGUrMSkqdC1lKToodC09MikqdCooKGUrMSkqdCtlKSsyKS8yfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCk7dmFyIGNyPTIqTWF0aC5QSSxmcj0oZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Y3IpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUqTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qY3IpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxmdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1jcik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipjcil9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLGZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPWNyKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL24pKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qY3IpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSx7dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fSk7ZnVuY3Rpb24gaHIodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gZnIudGltZT1SbigpLGZyO3JldHVybiBufWZ1bmN0aW9uIGRyKHQpe3JldHVybnt0eXBlOnR9fVF0LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixvKShuPW9baV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+R24mJm4uc3RhdGU8Wm4sbi5zdGF0ZT1YbixuLnRpbWVyLnN0b3AoKSxyJiZuLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9baV0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX0odGhpcyx0KX0pfSxRdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBhcj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPXNyKCksKG49ZnIpLnRpbWU9Um4oKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHM9cltvXSx1PXMubGVuZ3RoLGw9MDtsPHU7KytsKShhPXNbbF0pJiYkbihhLHQsZSxsLHMsbnx8aHIoYSxlKSk7cmV0dXJuIG5ldyBhcihyLHRoaXMuX3BhcmVudHMsdCxlKX0sWyJlIiwidyJdLm1hcChkciksWyJuIiwicyJdLm1hcChkciksWyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZHIpLE1hdGgsTWF0aCxNYXRoLE1hdGgsQXJyYXk7dmFyIHByPU1hdGguUEksbXI9Mipwcix5cj1tci0xZS02O2Z1bmN0aW9uIGdyKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gdnIoKXtyZXR1cm4gbmV3IGdyfWdyLnByb3RvdHlwZT12ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdyLG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLHU9KHI9K3IpLShlPStlKSxsPW8tdCxjPWEtZSxmPWwqbCtjKmM7aWYoKGk9K2kpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoZj4xZS02KWlmKE1hdGguYWJzKGMqcy11KmwpPjFlLTYmJmkpe3ZhciBoPW4tbyxkPXItYSxwPXMqcyt1KnUsbT1oKmgrZCpkLHk9TWF0aC5zcXJ0KHApLGc9TWF0aC5zcXJ0KGYpLHY9aSpNYXRoLnRhbigocHItTWF0aC5hY29zKChwK2YtbSkvKDIqeSpnKSkpLzIpLGI9di9nLF89di95O01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9IkwiKyh0K2IqbCkrIiwiKyhlK2IqYykpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhjKmg+bCpkKSsiLCIrKHRoaXMuX3gxPXQrXypzKSsiLCIrKHRoaXMuX3kxPWUrXyp1KX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4scixpLG8pe3Q9K3QsZT0rZTt2YXIgYT0obj0rbikqTWF0aC5jb3Mocikscz1uKk1hdGguc2luKHIpLHU9dCthLGw9ZStzLGM9MV5vLGY9bz9yLWk6aS1yO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrdSsiLCIrbDooTWF0aC5hYnModGhpcy5feDEtdSk+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtbCk+MWUtNikmJih0aGlzLl8rPSJMIit1KyIsIitsKSxuJiYoZjwwJiYoZj1mJW1yK21yKSxmPnlyP3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitjKyIsIisodC1hKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitjKyIsIisodGhpcy5feDE9dSkrIiwiKyh0aGlzLl95MT1sKTpmPjFlLTYmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGY+PXByKSsiLCIrYysiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK3IrImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJyPXZyO2Z1bmN0aW9uIF9yKCl7fWZ1bmN0aW9uIHdyKHQsZSl7dmFyIG49bmV3IF9yO2lmKHQgaW5zdGFuY2VvZiBfcil0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLG89dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxvOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8bzspbi5zZXQoZShyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpbi5zZXQoYSx0W2FdKTtyZXR1cm4gbn1mdW5jdGlvbiB4cigpe31fci5wcm90b3R5cGU9d3IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpfcixoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgT3I9d3IucHJvdG90eXBlO3hyLnByb3RvdHlwZT0oZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgeHI7aWYodCBpbnN0YW5jZW9mIHhyKXQuZWFjaChmdW5jdGlvbih0KXtuLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPGk7KW4uYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspbi5hZGQoZSh0W3JdLHIsdCkpfXJldHVybiBufSkucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4cixoYXM6T3IuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6T3IucmVtb3ZlLGNsZWFyOk9yLmNsZWFyLHZhbHVlczpPci5rZXlzLHNpemU6T3Iuc2l6ZSxlbXB0eTpPci5lbXB0eSxlYWNoOk9yLmVhY2h9LEFycmF5O3ZhciBDcj17fSxTcj17fSxFcj0zNCxrcj0xMCxUcj0xMztmdW5jdGlvbiBJcih0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyJdIn0pLmpvaW4oIiwiKSsifSIpfXZhciBBcj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxvPXQubGVuZ3RoLGE9MCxzPTAsdT1vPD0wLGw9ITE7ZnVuY3Rpb24gYygpe2lmKHUpcmV0dXJuIFNyO2lmKGwpcmV0dXJuIGw9ITEsQ3I7dmFyIGUscixpPWE7aWYodC5jaGFyQ29kZUF0KGkpPT09RXIpe2Zvcig7YSsrPG8mJnQuY2hhckNvZGVBdChhKSE9PUVyfHx0LmNoYXJDb2RlQXQoKythKT09PUVyOyk7cmV0dXJuKGU9YSk+PW8/dT0hMDoocj10LmNoYXJDb2RlQXQoYSsrKSk9PT1rcj9sPSEwOnI9PT1UciYmKGw9ITAsdC5jaGFyQ29kZUF0KGEpPT09a3ImJisrYSksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDthPG87KXtpZigocj10LmNoYXJDb2RlQXQoZT1hKyspKT09PWtyKWw9ITA7ZWxzZSBpZihyPT09VHIpbD0hMCx0LmNoYXJDb2RlQXQoYSk9PT1rciYmKythO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gdT0hMCx0LnNsaWNlKGksbyl9Zm9yKHQuY2hhckNvZGVBdChvLTEpPT09a3ImJi0tbyx0LmNoYXJDb2RlQXQoby0xKT09PVRyJiYtLW87KHI9YygpKSE9PVNyOyl7Zm9yKHZhciBmPVtdO3IhPT1DciYmciE9PVNyOylmLnB1c2gocikscj1jKCk7ZSYmbnVsbD09KGY9ZShmLHMrKykpfHxpLnB1c2goZil9cmV0dXJuIGl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOmUudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LGUpe3ZhciBuLGksbz1yKHQsZnVuY3Rpb24odCxyKXtpZihuKXJldHVybiBuKHQsci0xKTtpPXQsbj1lP2Z1bmN0aW9uKHQsZSl7dmFyIG49SXIodCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGUobihyKSxpLHQpfX0odCxlKTpJcih0KX0pO3JldHVybiBvLmNvbHVtbnM9aXx8W10sb30scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gZXx8bi5wdXNoKGVbcl09cil9KSxufShlKSksW24ubWFwKG8pLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGkpLmpvaW4oIlxuIil9fX0sanI9QXIoIiwiKS5wYXJzZSxQcj1BcigiXHQiKS5wYXJzZTtmdW5jdGlvbiBNcih0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfXZhciBOcj1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oTXIpfTtmdW5jdGlvbiBScih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApLE5yKGUsbikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSl9fWZ1bmN0aW9uIERyKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBOcihlLG4pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpfSl9fVJyKGpyKSxScihQciksRHIoImFwcGxpY2F0aW9uL3htbCIpLERyKCJ0ZXh0L2h0bWwiKTt2YXIgTHI9RHIoImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBGcih0LGUsbixyKXtpZihpc05hTihlKXx8aXNOYU4obikpcmV0dXJuIHQ7dmFyIGksbyxhLHMsdSxsLGMsZixoLGQ9dC5fcm9vdCxwPXtkYXRhOnJ9LG09dC5feDAseT10Ll95MCxnPXQuX3gxLHY9dC5feTE7aWYoIWQpcmV0dXJuIHQuX3Jvb3Q9cCx0O2Zvcig7ZC5sZW5ndGg7KWlmKChsPWU+PShvPShtK2cpLzIpKT9tPW86Zz1vLChjPW4+PShhPSh5K3YpLzIpKT95PWE6dj1hLGk9ZCwhKGQ9ZFtmPWM8PDF8bF0pKXJldHVybiBpW2ZdPXAsdDtpZihzPSt0Ll94LmNhbGwobnVsbCxkLmRhdGEpLHU9K3QuX3kuY2FsbChudWxsLGQuZGF0YSksZT09PXMmJm49PT11KXJldHVybiBwLm5leHQ9ZCxpP2lbZl09cDp0Ll9yb290PXAsdDtkb3tpPWk/aVtmXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGw9ZT49KG89KG0rZykvMikpP209bzpnPW8sKGM9bj49KGE9KHkrdikvMikpP3k9YTp2PWF9d2hpbGUoKGY9Yzw8MXxsKT09KGg9KHU+PWEpPDwxfHM+PW8pKTtyZXR1cm4gaVtoXT1kLGlbZl09cCx0fXZhciBWcj1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1yLHRoaXMueTE9aX07ZnVuY3Rpb24gVXIodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24genIodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gQnIodCxlLG4scixpLG8pe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBIcih0KXtmb3IodmFyIGU9e2RhdGE6dC5kYXRhfSxuPWU7dD10Lm5leHQ7KW49bi5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIGV9dmFyIFdyPShmdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IEJyKG51bGw9PWU/VXI6ZSxudWxsPT1uP3pyOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfSkucHJvdG90eXBlPUJyLnByb3RvdHlwZTtXci5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5ldyBCcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gbjtpZighci5sZW5ndGgpcmV0dXJuIG4uX3Jvb3Q9SHIociksbjtmb3IodD1be3NvdXJjZTpyLHRhcmdldDpuLl9yb290PW5ldyBBcnJheSg0KX1dO3I9dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1yLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpyLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpyLnRhcmdldFtpXT1IcihlKSk7cmV0dXJuIG59LFdyLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIEZyKHRoaXMuY292ZXIoZSxuKSxlLG4sdCl9LFdyLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvPXQubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLHU9MS8wLGw9MS8wLGM9LTEvMCxmPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKHI9K3RoaXMuX3guY2FsbChudWxsLGU9dFtuXSkpfHxpc05hTihpPSt0aGlzLl95LmNhbGwobnVsbCxlKSl8fChhW25dPXIsc1tuXT1pLHI8dSYmKHU9cikscj5jJiYoYz1yKSxpPGwmJihsPWkpLGk+ZiYmKGY9aSkpO2ZvcihjPHUmJih1PXRoaXMuX3gwLGM9dGhpcy5feDEpLGY8bCYmKGw9dGhpcy5feTAsZj10aGlzLl95MSksdGhpcy5jb3Zlcih1LGwpLmNvdmVyKGMsZiksbj0wO248bzsrK24pRnIodGhpcyxhW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LFdyLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKG4pKWk9KG49TWF0aC5mbG9vcih0KSkrMSxvPShyPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtpZighKG4+dHx8dD5pfHxyPmV8fGU+bykpcmV0dXJuIHRoaXM7dmFyIGEscyx1PWktbixsPXRoaXMuX3Jvb3Q7c3dpdGNoKHM9KGU8KHIrbykvMik8PDF8dDwobitpKS8yKXtjYXNlIDA6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShvPXIrKHUqPTIpLHQ+KGk9bit1KXx8ZT5vKTticmVhaztjYXNlIDE6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShvPXIrKHUqPTIpLChuPWktdSk+dHx8ZT5vKTticmVhaztjYXNlIDI6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShyPW8tKHUqPTIpLHQ+KGk9bit1KXx8cj5lKTticmVhaztjYXNlIDM6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT1sLGw9YX13aGlsZShyPW8tKHUqPTIpLChuPWktdSk+dHx8cj5lKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9bCl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc30sV3IuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSx0fSxXci5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LFdyLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxhLHMsdSxsLGM9dGhpcy5feDAsZj10aGlzLl95MCxoPXRoaXMuX3gxLGQ9dGhpcy5feTEscD1bXSxtPXRoaXMuX3Jvb3Q7Zm9yKG0mJnAucHVzaChuZXcgVnIobSxjLGYsaCxkKSksbnVsbD09bj9uPTEvMDooYz10LW4sZj1lLW4saD10K24sZD1lK24sbio9bik7dT1wLnBvcCgpOylpZighKCEobT11Lm5vZGUpfHwoaT11LngwKT5ofHwobz11LnkwKT5kfHwoYT11LngxKTxjfHwocz11LnkxKTxmKSlpZihtLmxlbmd0aCl7dmFyIHk9KGkrYSkvMixnPShvK3MpLzI7cC5wdXNoKG5ldyBWcihtWzNdLHksZyxhLHMpLG5ldyBWcihtWzJdLGksZyx5LHMpLG5ldyBWcihtWzFdLHksbyxhLGcpLG5ldyBWcihtWzBdLGksbyx5LGcpKSwobD0oZT49Zyk8PDF8dD49eSkmJih1PXBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTEtbF0scFtwLmxlbmd0aC0xLWxdPXUpfWVsc2V7dmFyIHY9dC0rdGhpcy5feC5jYWxsKG51bGwsbS5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLG0uZGF0YSksXz12KnYrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7Yz10LXcsZj1lLXcsaD10K3csZD1lK3cscj1tLmRhdGF9fXJldHVybiByfSxXci5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUsbixyLGksbyxhLHMsdSxsLGMsZixoLGQ9dGhpcy5fcm9vdCxwPXRoaXMuX3gwLG09dGhpcy5feTAseT10aGlzLl94MSxnPXRoaXMuX3kxO2lmKCFkKXJldHVybiB0aGlzO2lmKGQubGVuZ3RoKWZvcig7Oyl7aWYoKGw9bz49KHM9KHAreSkvMikpP3A9czp5PXMsKGM9YT49KHU9KG0rZykvMikpP209dTpnPXUsZT1kLCEoZD1kW2Y9Yzw8MXxsXSkpcmV0dXJuIHRoaXM7aWYoIWQubGVuZ3RoKWJyZWFrOyhlW2YrMSYzXXx8ZVtmKzImM118fGVbZiszJjNdKSYmKG49ZSxoPWYpfWZvcig7ZC5kYXRhIT09dDspaWYocj1kLCEoZD1kLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPWQubmV4dCkmJmRlbGV0ZSBkLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOmU/KGk/ZVtmXT1pOmRlbGV0ZSBlW2ZdLChkPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZkPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhZC5sZW5ndGgmJihuP25baF09ZDp0aGlzLl9yb290PWQpLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LFdyLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LFdyLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sV3Iuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSx0fSxXci52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscz1bXSx1PXRoaXMuX3Jvb3Q7Zm9yKHUmJnMucHVzaChuZXcgVnIodSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQodT1lLm5vZGUscj1lLngwLGk9ZS55MCxvPWUueDEsYT1lLnkxKSYmdS5sZW5ndGgpe3ZhciBsPShyK28pLzIsYz0oaSthKS8yOyhuPXVbM10pJiZzLnB1c2gobmV3IFZyKG4sbCxjLG8sYSkpLChuPXVbMl0pJiZzLnB1c2gobmV3IFZyKG4scixjLGwsYSkpLChuPXVbMV0pJiZzLnB1c2gobmV3IFZyKG4sbCxpLG8sYykpLChuPXVbMF0pJiZzLnB1c2gobmV3IFZyKG4scixpLGwsYykpfXJldHVybiB0aGlzfSxXci52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10scj1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBWcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgbyxhPWUueDAscz1lLnkwLHU9ZS54MSxsPWUueTEsYz0oYSt1KS8yLGY9KHMrbCkvMjsobz1pWzBdKSYmbi5wdXNoKG5ldyBWcihvLGEscyxjLGYpKSwobz1pWzFdKSYmbi5wdXNoKG5ldyBWcihvLGMscyx1LGYpKSwobz1pWzJdKSYmbi5wdXNoKG5ldyBWcihvLGEsZixjLGwpKSwobz1pWzNdKSYmbi5wdXNoKG5ldyBWcihvLGMsZix1LGwpKX1yLnB1c2goZSl9Zm9yKDtlPXIucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxXci54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sV3IueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LE1hdGgsTWF0aC5zcXJ0KDUpO3ZhciBxcj1mdW5jdGlvbih0LGUpe2lmKChuPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgbixyPXQuc2xpY2UoMCxuKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShuKzEpXX0sWXI9ZnVuY3Rpb24odCl7cmV0dXJuKHQ9cXIoTWF0aC5hYnModCkpKT90WzFdOk5hTn0sR3I9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtXCggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIFFyKHQpe3JldHVybiBuZXcgS3IodCl9ZnVuY3Rpb24gS3IodCl7aWYoIShlPUdyLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7dGhpcy5maWxsPWVbMV18fCIgIix0aGlzLmFsaWduPWVbMl18fCI+Iix0aGlzLnNpZ249ZVszXXx8Ii0iLHRoaXMuc3ltYm9sPWVbNF18fCIiLHRoaXMuemVybz0hIWVbNV0sdGhpcy53aWR0aD1lWzZdJiYrZVs2XSx0aGlzLmNvbW1hPSEhZVs3XSx0aGlzLnByZWNpc2lvbj1lWzhdJiYrZVs4XS5zbGljZSgxKSx0aGlzLnRyaW09ISFlWzldLHRoaXMudHlwZT1lWzEwXXx8IiJ9UXIucHJvdG90eXBlPUtyLnByb3RvdHlwZSxLci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgWnIsWHIsJHIsSnIsdGk9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKGk+MCl7aWYoISt0W3JdKWJyZWFrIHQ7aT0wfX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0sZWk9ZnVuY3Rpb24odCxlKXt2YXIgbj1xcih0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfSxuaT17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZWkoMTAwKnQsZSl9LHI6ZWksczpmdW5jdGlvbih0LGUpe3ZhciBuPXFyKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV0sbz1pLShacj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsYT1yLmxlbmd0aDtyZXR1cm4gbz09PWE/cjpvPmE/cituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/ci5zbGljZSgwLG8pKyIuIityLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK3FyKHQsTWF0aC5tYXgoMCxlK28tMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19LHJpPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpaT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtYcj1mdW5jdGlvbih0KXt2YXIgZSxuLHI9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KGU9dC5ncm91cGluZyxuPXQudGhvdXNhbmRzLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLG89W10sYT0wLHM9ZVswXSx1PTA7aT4wJiZzPjAmJih1K3MrMT5yJiYocz1NYXRoLm1heCgxLHItdSkpLG8ucHVzaCh0LnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKHUrPXMrMSk+cikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4obil9KTpyaSxpPXQuY3VycmVuY3ksbz10LmRlY2ltYWwsYT10Lm51bWVyYWxzP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pfX0odC5udW1lcmFscyk6cmkscz10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiB1KHQpe3ZhciBlPSh0PVFyKHQpKS5maWxsLG49dC5hbGlnbix1PXQuc2lnbixsPXQuc3ltYm9sLGM9dC56ZXJvLGY9dC53aWR0aCxoPXQuY29tbWEsZD10LnByZWNpc2lvbixwPXQudHJpbSxtPXQudHlwZTsibiI9PT1tPyhoPSEwLG09ImciKTpuaVttXXx8KG51bGw9PWQmJihkPTEyKSxwPSEwLG09ImciKSwoY3x8IjAiPT09ZSYmIj0iPT09bikmJihjPSEwLGU9IjAiLG49Ij0iKTt2YXIgeT0iJCI9PT1sP2lbMF06IiMiPT09bCYmL1tib3hYXS8udGVzdChtKT8iMCIrbS50b0xvd2VyQ2FzZSgpOiIiLGc9IiQiPT09bD9pWzFdOi9bJXBdLy50ZXN0KG0pP3M6IiIsdj1uaVttXSxiPS9bZGVmZ3BycyVdLy50ZXN0KG0pO2Z1bmN0aW9uIF8odCl7dmFyIGkscyxsLF89eSx3PWc7aWYoImMiPT09bSl3PXYodCkrdyx0PSIiO2Vsc2V7dmFyIHg9KHQ9K3QpPDA7aWYodD12KE1hdGguYWJzKHQpLGQpLHAmJih0PXRpKHQpKSx4JiYwPT0rdCYmKHg9ITEpLF89KHg/IigiPT09dT91OiItIjoiLSI9PT11fHwiKCI9PT11PyIiOnUpK18sdz0oInMiPT09bT9paVs4K1pyLzNdOiIiKSt3Kyh4JiYiKCI9PT11PyIpIjoiIiksYilmb3IoaT0tMSxzPXQubGVuZ3RoOysraTxzOylpZig0OD4obD10LmNoYXJDb2RlQXQoaSkpfHxsPjU3KXt3PSg0Nj09PWw/byt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkrdyx0PXQuc2xpY2UoMCxpKTticmVha319aCYmIWMmJih0PXIodCwxLzApKTt2YXIgTz1fLmxlbmd0aCt0Lmxlbmd0aCt3Lmxlbmd0aCxDPU88Zj9uZXcgQXJyYXkoZi1PKzEpLmpvaW4oZSk6IiI7c3dpdGNoKGgmJmMmJih0PXIoQyt0LEMubGVuZ3RoP2Ytdy5sZW5ndGg6MS8wKSxDPSIiKSxuKXtjYXNlIjwiOnQ9Xyt0K3crQzticmVhaztjYXNlIj0iOnQ9XytDK3QrdzticmVhaztjYXNlIl4iOnQ9Qy5zbGljZSgwLE89Qy5sZW5ndGg+PjEpK18rdCt3K0Muc2xpY2UoTyk7YnJlYWs7ZGVmYXVsdDp0PUMrXyt0K3d9cmV0dXJuIGEodCl9cmV0dXJuIGQ9bnVsbD09ZD82Oi9bZ3Byc10vLnRlc3QobSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxkKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxkKSksXy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxffXJldHVybntmb3JtYXQ6dSxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxlKXt2YXIgbj11KCgodD1Rcih0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoWXIoZSkvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPWlpWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4oaSp0KStvfX19fSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KSwkcj1Yci5mb3JtYXQsSnI9WHIuZm9ybWF0UHJlZml4O3ZhciBvaT1mdW5jdGlvbigpe3JldHVybiBuZXcgYWl9O2Z1bmN0aW9uIGFpKCl7dGhpcy5yZXNldCgpfWFpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YWkscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXt1aShzaSx0LHRoaXMudCksdWkodGhpcyxzaS5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2kudDp0aGlzLnM9c2kudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2k9bmV3IGFpO2Z1bmN0aW9uIHVpKHQsZSxuKXt2YXIgcj10LnM9ZStuLGk9ci1lO3QudD1lLShyLWkpKyhuLWkpfXZhciBsaT1NYXRoLlBJLGNpPWxpLzIsZmk9MipsaSxoaT1saS8xODAsZGk9KE1hdGgsTWF0aC5hdGFuKSxwaT1NYXRoLmF0YW4yLG1pPU1hdGguY29zLHlpPShNYXRoLE1hdGgsTWF0aCxNYXRoLE1hdGgsTWF0aC5zaW4pLGdpPShNYXRoLE1hdGguc3FydCk7ZnVuY3Rpb24gdmkodCl7cmV0dXJuIHQ+MT9jaTp0PC0xPy1jaTpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gYmkodCxlKXtyZXR1cm5bdD5saT90LWZpOnQ8LWxpP3QrZmk6dCxlXX1mdW5jdGlvbiBfaSgpe31mdW5jdGlvbiB3aSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1taShlKSxpPW1pKG4pLG89dChyKmkpO3JldHVybltvKmkqeWkoZSksbyp5aShuKV19fWZ1bmN0aW9uIHhpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPWdpKGUqZStuKm4pLGk9dChyKSxvPXlpKGkpLGE9bWkoaSk7cmV0dXJuW3BpKGUqbyxyKmEpLHZpKHImJm4qby9yKV19fWZ1bmN0aW9uIE9pKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gQ2kodCl7dmFyIGU9MCxuPXQuY2hpbGRyZW4scj1uJiZuLmxlbmd0aDtpZihyKWZvcig7LS1yPj0wOyllKz1uW3JdLnZhbHVlO2Vsc2UgZT0xO3QudmFsdWU9ZX1mdW5jdGlvbiBTaSh0LGUpe3ZhciBuLHIsaSxvLGEscz1uZXcgSWkodCksdT0rdC52YWx1ZSYmKHMudmFsdWU9dC52YWx1ZSksbD1bc107Zm9yKG51bGw9PWUmJihlPUVpKTtuPWwucG9wKCk7KWlmKHUmJihuLnZhbHVlPStuLmRhdGEudmFsdWUpLChpPWUobi5kYXRhKSkmJihhPWkubGVuZ3RoKSlmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkoYSksbz1hLTE7bz49MDstLW8pbC5wdXNoKHI9bi5jaGlsZHJlbltvXT1uZXcgSWkoaVtvXSkpLHIucGFyZW50PW4sci5kZXB0aD1uLmRlcHRoKzE7cmV0dXJuIHMuZWFjaEJlZm9yZShUaSl9ZnVuY3Rpb24gRWkodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24ga2kodCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIFRpKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gSWkodCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9TWF0aCxvaSgpLG9pKCksb2koKSxiaS5pbnZlcnQ9Ymksb2koKSxvaSgpLG9pKCksb2koKSxvaSgpLF9pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6X2kscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0sbWkoMzAqaGkpLHdpKGZ1bmN0aW9uKHQpe3JldHVybiBnaSgyLygxK3QpKX0pLmludmVydD14aShmdW5jdGlvbih0KXtyZXR1cm4gMip2aSh0LzIpfSksd2koZnVuY3Rpb24odCl7cmV0dXJuKHQ9KGU9dCk+MT8wOmU8LTE/bGk6TWF0aC5hY29zKGUpKSYmdC95aSh0KTt2YXIgZX0pLmludmVydD14aShmdW5jdGlvbih0KXtyZXR1cm4gdH0pLE9pLmludmVydD1PaSx4aShkaSkseGkodmkpLHhpKGZ1bmN0aW9uKHQpe3JldHVybiAyKmRpKHQpfSksSWkucHJvdG90eXBlPVNpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SWksY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoQ2kpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG89dGhpcyxhPVtvXTtkb3tmb3IoZT1hLnJldmVyc2UoKSxhPVtdO289ZS5wb3AoKTspaWYodChvKSxuPW8uY2hpbGRyZW4pZm9yKHI9MCxpPW4ubGVuZ3RoO3I8aTsrK3IpYS5wdXNoKG5bcl0pfXdoaWxlKGEubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaT10aGlzLG89W2ldLGE9W107aT1vLnBvcCgpOylpZihhLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKW8ucHVzaChlW25dKTtmb3IoO2k9YS5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXRoaXMsaT1bcl07cj1pLnBvcCgpOylpZih0KHIpLGU9ci5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWkucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxyPWUuY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KW4rPXJbaV0udmFsdWU7ZS52YWx1ZT1ufSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxyPWUuYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PW4ucG9wKCksZT1yLnBvcCgpO3Q9PT1lOylpPXQsdD1uLnBvcCgpLGU9ci5wb3AoKTtyZXR1cm4gaX0oZSx0KSxyPVtlXTtlIT09bjspci5wdXNoKGU9ZS5wYXJlbnQpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gU2kodGhpcykuZWFjaEJlZm9yZShraSl9fSxBcnJheTt2YXIgQWk9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsdT1hLmxlbmd0aCxsPXQudmFsdWUmJihyLWUpL3QudmFsdWU7KytzPHU7KShvPWFbc10pLnkwPW4sby55MT1pLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqbH07T2JqZWN0LmNyZWF0ZShJaS5wcm90b3R5cGUpO3ZhciBqaT1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSx1PWEubGVuZ3RoLGw9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8dTspKG89YVtzXSkueDA9ZSxvLngxPXIsby55MD1uLG8ueTE9bis9by52YWx1ZSpsfSxQaT0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gTWkodCxlLG4scixpLG8pe2Zvcih2YXIgYSxzLHUsbCxjLGYsaCxkLHAsbSx5LGc9W10sdj1lLmNoaWxkcmVuLGI9MCxfPTAsdz12Lmxlbmd0aCx4PWUudmFsdWU7Yjx3Oyl7dT1pLW4sbD1vLXI7ZG97Yz12W18rK10udmFsdWV9d2hpbGUoIWMmJl88dyk7Zm9yKGY9aD1jLHk9YypjKihtPU1hdGgubWF4KGwvdSx1L2wpLyh4KnQpKSxwPU1hdGgubWF4KGgveSx5L2YpO188dzsrK18pe2lmKGMrPXM9dltfXS52YWx1ZSxzPGYmJihmPXMpLHM+aCYmKGg9cykseT1jKmMqbSwoZD1NYXRoLm1heChoL3kseS9mKSk+cCl7Yy09czticmVha31wPWR9Zy5wdXNoKGE9e3ZhbHVlOmMsZGljZTp1PGwsY2hpbGRyZW46di5zbGljZShiLF8pfSksYS5kaWNlP0FpKGEsbixyLGkseD9yKz1sKmMveDpvKTpqaShhLG4scix4P24rPXUqYy94OmksbykseC09YyxiPV99cmV0dXJuIGd9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLG8pe01pKGUsdCxuLHIsaSxvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSkoUGkpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLG8pe2lmKChhPXQuX3NxdWFyaWZ5KSYmYS5yYXRpbz09PWUpZm9yKHZhciBhLHMsdSxsLGMsZj0tMSxoPWEubGVuZ3RoLGQ9dC52YWx1ZTsrK2Y8aDspe2Zvcih1PShzPWFbZl0pLmNoaWxkcmVuLGw9cy52YWx1ZT0wLGM9dS5sZW5ndGg7bDxjOysrbClzLnZhbHVlKz11W2xdLnZhbHVlO3MuZGljZT9BaShzLG4scixpLHIrPShvLXIpKnMudmFsdWUvZCk6amkocyxuLHIsbis9KGktbikqcy52YWx1ZS9kLG8pLGQtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1hPU1pKGUsdCxuLHIsaSxvKSxhLnJhdGlvPWV9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oUGkpO3ZhciBOaT1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfSxSaT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD0wKTpuLT10LGZ1bmN0aW9uKCl7cmV0dXJuIGUoKSpuK3R9fXJldHVybiBuLnNvdXJjZT10LG59KE5pKSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXt2YXIgcixpO3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbixmdW5jdGlvbigpe3ZhciBvO2lmKG51bGwhPXIpbz1yLHI9bnVsbDtlbHNlIGRve3I9MiplKCktMSxvPTIqZSgpLTEsaT1yKnIrbypvfXdoaWxlKCFpfHxpPjEpO3JldHVybiB0K24qbypNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fXJldHVybiBuLnNvdXJjZT10LG59KE5pKSksRGk9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbigpe3ZhciB0PVJpLnNvdXJjZShlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KE5pKSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAscj0wO3I8dDsrK3Ipbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufShOaSkpLExpPShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49RGkuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTmkpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KE5pKSxBcnJheS5wcm90b3R5cGUpLEZpPUxpLm1hcCxWaT1MaS5zbGljZSxVaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHppPWZ1bmN0aW9uKHQpe3JldHVybit0fSxCaT1bMCwxXTtmdW5jdGlvbiBIaSh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfTpVaShlKX1mdW5jdGlvbiBXaSh0LGUsbixyKXt2YXIgaT10WzBdLG89dFsxXSxhPWVbMF0scz1lWzFdO3JldHVybiBvPGk/KGk9bihvLGkpLGE9cihzLGEpKTooaT1uKGksbyksYT1yKGEscykpLGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiBxaSh0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSxzPS0xO2Zvcih0W2ldPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8aTspb1tzXT1uKHRbc10sdFtzKzFdKSxhW3NdPXIoZVtzXSxlW3MrMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1WKHQsZSwxLGkpLTE7cmV0dXJuIGFbbl0ob1tuXShlKSl9fXZhciBZaT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT10WzBdLG89dFt0Lmxlbmd0aC0xXSxhPVgoaSxvLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChuPVFyKG51bGw9PW4/IixmIjpuKSkudHlwZSl7Y2FzZSJzIjp2YXIgcz1NYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhvKSk7cmV0dXJuIG51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoWXIoZSkvMykpKS1ZcihNYXRoLmFicyh0KSkpfShhLHMpKXx8KG4ucHJlY2lzaW9uPXIpLEpyKG4scyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxZcihlKS1Zcih0KSkrMX0oYSxNYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhvKSkpKXx8KG4ucHJlY2lzaW9uPXItKCJlIj09PW4udHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4ocj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtWXIoTWF0aC5hYnModCkpKX0oYSkpfHwobi5wcmVjaXNpb249ci0yKigiJSI9PT1uLnR5cGUpKX1yZXR1cm4gJHIobil9O2Z1bmN0aW9uIEdpKCl7dmFyIHQ9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz1CaSxhPUJpLHM9aG4sdT0hMTtmdW5jdGlvbiBsKCl7cmV0dXJuIG49TWF0aC5taW4oby5sZW5ndGgsYS5sZW5ndGgpPjI/cWk6V2kscj1pPW51bGwsY31mdW5jdGlvbiBjKGUpe3JldHVybihyfHwocj1uKG8sYSx1P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PWU/MDp0Pj1uPzE6cih0KX19fSh0KTp0LHMpKSkoK2UpfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4oaXx8KGk9bihhLG8sSGksdT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KGU9K2Usbj0rbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wP2U6dD49MT9uOnIodCl9fX0oZSk6ZSkpKSgrdCl9LGMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUZpLmNhbGwodCx6aSksbCgpKTpvLnNsaWNlKCl9LGMucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9VmkuY2FsbCh0KSxsKCkpOmEuc2xpY2UoKX0sYy5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPVZpLmNhbGwodCkscz1kbixsKCl9LGMuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ISF0LGwoKSk6dX0sYy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGwoKSk6c30sbCgpfShIaSx1bik7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBlPXQsR2koKS5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSk7dmFyIGV9LGZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gSyhuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlpKGUoKSx0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGk9ZSgpLG89MCxhPWkubGVuZ3RoLTEscz1pW29dLHU9aVthXTtyZXR1cm4gdTxzJiYocj1zLHM9dSx1PXIscj1vLG89YSxhPXIpLChyPVoocyx1LG4pKT4wP3I9WihzPU1hdGguZmxvb3Iocy9yKSpyLHU9TWF0aC5jZWlsKHUvcikqcixuKTpyPDAmJihyPVoocz1NYXRoLmNlaWwocypyKS9yLHU9TWF0aC5mbG9vcih1KnIpL3IsbikpLHI+MD8oaVtvXT1NYXRoLmZsb29yKHMvcikqcixpW2FdPU1hdGguY2VpbCh1L3IpKnIsZShpKSk6cjwwJiYoaVtvXT1NYXRoLmNlaWwocypyKS9yLGlbYV09TWF0aC5mbG9vcih1KnIpL3IsZShpKSksdH0sdH0odCl9dmFyIFFpPW5ldyBEYXRlLEtpPW5ldyBEYXRlO2Z1bmN0aW9uIFppKHQsZSxuLHIpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIGkuZmxvb3I9aSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixvKXt2YXIgYSxzPVtdO2lmKG49aS5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPHImJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBaaShmdW5jdGlvbihlKXtpZihlPj1lKWZvcig7dChlKSwhbihlKTspZS5zZXRUaW1lKGUtMSl9LGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSl9LG4mJihpLmNvdW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIFFpLnNldFRpbWUoK2UpLEtpLnNldFRpbWUoK3IpLHQoUWkpLHQoS2kpLE1hdGguZmxvb3IobihRaSxLaSkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/aS5maWx0ZXIocj9mdW5jdGlvbihlKXtyZXR1cm4gcihlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gaS5jb3VudCgwLGUpJXQ9PTB9KTppOm51bGx9KSxpfXZhciBYaT1aaShmdW5jdGlvbigpe30sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pO1hpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/WmkoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0sZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0sZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSk6WGk6bnVsbH07dmFyICRpPTZlNCxKaT02MDQ4ZTUsdG89KFppKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSgxZTMqTWF0aC5mbG9vcih0LzFlMykpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCsxZTMqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSxaaShmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0LyRpKSokaSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqJGkpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLyRpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxaaShmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkqJGklMzZlNTtlPDAmJihlKz0zNmU1KSx0LnNldFRpbWUoMzZlNSpNYXRoLmZsb29yKCgrdC1lKS8zNmU1KStlKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksWmkoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqJGkpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKTtmdW5jdGlvbiBlbyh0KXtyZXR1cm4gWmkoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSokaSkvSml9KX12YXIgbm89ZW8oMCkscm89ZW8oMSksaW89KGVvKDIpLGVvKDMpLGVvKDQpKSxvbz0oZW8oNSksZW8oNiksWmkoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksWmkoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7b28uZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9aaShmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KTpudWxsfTt2YXIgYW89b28sc289KFppKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKiRpKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8kaX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSksWmkoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSksWmkoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpO2Z1bmN0aW9uIHVvKHQpe3JldHVybiBaaShmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0ppfSl9dmFyIGxvPXVvKDApLGNvPXVvKDEpLGZvPSh1bygyKSx1bygzKSx1byg0KSksaG89KHVvKDUpLHVvKDYpLFppKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLFppKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO2hvLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/WmkoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSk6bnVsbH07dmFyIHBvPWhvO2Z1bmN0aW9uIG1vKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiB5byh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBnbyh0KXtyZXR1cm57eTp0LG06MCxkOjEsSDowLE06MCxTOjAsTDowfX12YXIgdm8sYm8sX28sd289eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLE9vPS9eJS8sQ289L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIFNvKHQsZSxuKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gcisobzxuP25ldyBBcnJheShuLW8rMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIEVvKHQpe3JldHVybiB0LnJlcGxhY2UoQ28sIlxcJCYiKX1mdW5jdGlvbiBrbyh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoRW8pLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBUbyh0KXtmb3IodmFyIGU9e30sbj0tMSxyPXQubGVuZ3RoOysrbjxyOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiBJbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBObyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIHI/KHQueT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSbyh0LGUsbil7dmFyIHI9eG8uZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERvKHQsZSxuKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTG8odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lm09clswXS0xLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFvKHQsZSxuKXt2YXIgcj1Pby5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj9uK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFlvKHQsZSxuKXt2YXIgcj14by5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LlE9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR28odCxlLG4pe3ZhciByPXhvLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQuUT0xZTMqK3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUW8odCxlKXtyZXR1cm4gU28odC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBLbyh0LGUpe3JldHVybiBTbyh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBabyh0LGUpe3JldHVybiBTbyh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWG8odCxlKXtyZXR1cm4gU28oMSt0by5jb3VudChhbyh0KSx0KSxlLDMpfWZ1bmN0aW9uICRvKHQsZSl7cmV0dXJuIFNvKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBKbyh0LGUpe3JldHVybiAkbyh0LGUpKyIwMDAifWZ1bmN0aW9uIHRhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gZWEodCxlKXtyZXR1cm4gU28odC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBuYSh0LGUpe3JldHVybiBTbyh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIHJhKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBpYSh0LGUpe3JldHVybiBTbyhuby5jb3VudChhbyh0KSx0KSxlLDIpfWZ1bmN0aW9uIG9hKHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9pbyh0KTppby5jZWlsKHQpLFNvKGlvLmNvdW50KGFvKHQpLHQpKyg0PT09YW8odCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gYWEodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gc2EodCxlKXtyZXR1cm4gU28ocm8uY291bnQoYW8odCksdCksZSwyKX1mdW5jdGlvbiB1YSh0LGUpe3JldHVybiBTbyh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gbGEodCxlKXtyZXR1cm4gU28odC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGNhKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrU28oZS82MHwwLCIwIiwyKStTbyhlJTYwLCIwIiwyKX1mdW5jdGlvbiBmYSh0LGUpe3JldHVybiBTbyh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIGhhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIGRhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBwYSh0LGUpe3JldHVybiBTbygxK3NvLmNvdW50KHBvKHQpLHQpLGUsMyl9ZnVuY3Rpb24gbWEodCxlKXtyZXR1cm4gU28odC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIHlhKHQsZSl7cmV0dXJuIG1hKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gZ2EodCxlKXtyZXR1cm4gU28odC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiB2YSh0LGUpe3JldHVybiBTbyh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIGJhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gX2EodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIHdhKHQsZSl7cmV0dXJuIFNvKGxvLmNvdW50KHBvKHQpLHQpLGUsMil9ZnVuY3Rpb24geGEodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP2ZvKHQpOmZvLmNlaWwodCksU28oZm8uY291bnQocG8odCksdCkrKDQ9PT1wbyh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBPYSh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBDYSh0LGUpe3JldHVybiBTbyhjby5jb3VudChwbyh0KSx0KSxlLDIpfWZ1bmN0aW9uIFNhKHQsZSl7cmV0dXJuIFNvKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBFYSh0LGUpe3JldHVybiBTbyh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24ga2EoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIFRhKCl7cmV0dXJuIiUifWZ1bmN0aW9uIElhKHQpe3JldHVybit0fWZ1bmN0aW9uIEFhKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9IWZ1bmN0aW9uKHQpe3ZvPWZ1bmN0aW9uKGUpe3ZhciBuPXQuZGF0ZVRpbWUscj10LmRhdGUsaT10LnRpbWUsbz10LnBlcmlvZHMsYT10LmRheXMscz10LnNob3J0RGF5cyx1PXQubW9udGhzLGw9dC5zaG9ydE1vbnRocyxjPWtvKG8pLGY9VG8obyksaD1rbyhhKSxkPVRvKGEpLHA9a28ocyksbT1UbyhzKSx5PWtvKHUpLGc9VG8odSksdj1rbyhsKSxiPVRvKGwpLF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldE1vbnRoKCldfSxjOm51bGwsZDpRbyxlOlFvLGY6Sm8sSDpLbyxJOlpvLGo6WG8sTDokbyxtOnRhLE06ZWEscDpmdW5jdGlvbih0KXtyZXR1cm4gb1srKHQuZ2V0SG91cnMoKT49MTIpXX0sUTpJYSxzOkFhLFM6bmEsdTpyYSxVOmlhLFY6b2EsdzphYSxXOnNhLHg6bnVsbCxYOm51bGwseTp1YSxZOmxhLFo6Y2EsIiUiOlRhfSx3PXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6ZmEsZTpmYSxmOnlhLEg6aGEsSTpkYSxqOnBhLEw6bWEsbTpnYSxNOnZhLHA6ZnVuY3Rpb24odCl7cmV0dXJuIG9bKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6SWEsczpBYSxTOmJhLHU6X2EsVTp3YSxWOnhhLHc6T2EsVzpDYSx4Om51bGwsWDpudWxsLHk6U2EsWTpFYSxaOmthLCIlIjpUYX0seD17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9cC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9bVtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1kW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWJbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9eS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUyh0LG4sZSxyKX0sZDpGbyxlOkZvLGY6V28sSDpVbyxJOlVvLGo6Vm8sTDpIbyxtOkxvLE06em8scDpmdW5jdGlvbih0LGUsbil7dmFyIHI9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnA9ZltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxROllvLHM6R28sUzpCbyx1OkFvLFU6am8sVjpQbyx3OklvLFc6TW8seDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFModCxyLGUsbil9LFg6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBTKHQsaSxlLG4pfSx5OlJvLFk6Tm8sWjpEbywiJSI6cW99O2Z1bmN0aW9uIE8odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvLGE9W10scz0tMSx1PTAsbD10Lmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KytzPGw7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoYS5wdXNoKHQuc2xpY2UodSxzKSksbnVsbCE9KGk9d29bcj10LmNoYXJBdCgrK3MpXSk/cj10LmNoYXJBdCgrK3MpOmk9ImUiPT09cj8iICI6IjAiLChvPWVbcl0pJiYocj1vKG4saSkpLGEucHVzaChyKSx1PXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKHUscykpLGEuam9pbigiIil9fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvPWdvKDE5MDApO2lmKFMobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KHI9KGk9KHI9eW8oZ28oby55KSkpLmdldFVUQ0RheSgpKT40fHwwPT09aT9jby5jZWlsKHIpOmNvKHIpLHI9c28ub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRVVENGdWxsWWVhcigpLG8ubT1yLmdldFVUQ01vbnRoKCksby5kPXIuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KHI9KGk9KHI9ZShnbyhvLnkpKSkuZ2V0RGF5KCkpPjR8fDA9PT1pP3JvLmNlaWwocik6cm8ocikscj10by5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldEZ1bGxZZWFyKCksby5tPXIuZ2V0TW9udGgoKSxvLmQ9ci5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxpPSJaImluIG8/eW8oZ28oby55KSkuZ2V0VVRDRGF5KCk6ZShnbyhvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKGkrNSklNzpvLncrNypvLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLHlvKG8pKTplKG8pfX1mdW5jdGlvbiBTKHQsZSxuLHIpe2Zvcih2YXIgaSxvLGE9MCxzPWUubGVuZ3RoLHU9bi5sZW5ndGg7YTxzOyl7aWYocj49dSlyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChhKyspKSl7aWYoaT1lLmNoYXJBdChhKyspLCEobz14W2kgaW4gd28/ZS5jaGFyQXQoYSsrKTppXSl8fChyPW8odCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIF8ueD1PKHIsXyksXy5YPU8oaSxfKSxfLmM9TyhuLF8pLHcueD1PKHIsdyksdy5YPU8oaSx3KSx3LmM9TyhuLHcpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9Tyh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1DKHQrPSIiLG1vKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9Tyh0Kz0iIix3KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1DKHQseW8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX0oKSxibz12by51dGNGb3JtYXQsX289dm8udXRjUGFyc2V9KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSksRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmd8fGJvKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKSwrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpfHxfbygiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIGphPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufSxQYT0oamEoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLGphKCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKSxqYSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2IiksamEoImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOCIpLGphKCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKSxqYSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIiksamEoImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OSIpLGphKCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKSxqYSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIiksZnVuY3Rpb24odCl7cmV0dXJuIHNuKHRbdC5sZW5ndGgtMV0pfSk7ZnVuY3Rpb24gTWEodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19UGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZDhiMzY1ZjVmNWY1NWFiNGFjIiwiYTY2MTFhZGZjMjdkODBjZGMxMDE4NTcxIiwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxIiwiOGM1MTBhZDhiMzY1ZjZlOGMzYzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhZDhiMzY1ZjZlOGMzZjVmNWY1YzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiYWY4ZGMzZjdmN2Y3N2ZiZjdiIiwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3IiwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiOTk4ZWMzZjdmN2Y3ZjFhMzQwIiwiNWUzYzk5YjJhYmQyZmRiODYzZTY2MTAxIiwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxIiwiNTQyNzg4OTk4ZWMzZDhkYWViZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4OTk4ZWMzZDhkYWViZjdmN2Y3ZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZjdmN2Y3NjdhOWNmIiwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwIiwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFiZmRiIiwiZDcxOTFjZmRhZTYxYWJkOWU5MmM3YmI2IiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkOWU5MmM3YmI2IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZmZmZmJmZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFjZjYwIiwiZDcxOTFjZmRhZTYxYTZkOTZhMWE5NjQxIiwiZDcxOTFjZmRhZTYxZmZmZmJmYTZkOTZhMWE5NjQxIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZmZmZmJmZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWY5OTlkOGM5MmNhMjVmIiwiZWRmOGZiYjJlMmUyNjZjMmE0MjM4YjQ1IiwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZTBlY2Y0OWViY2RhODg1NmE3IiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg0MTlkIiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkODEwZjdjNGQwMDRiIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlOGM4ZmRiYjg0ZTM0YTMzIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZDczMDFmIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmYjMwMDAwN2YwMDAwIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlMmYwYTZiZGRiMWM5MDk5IiwiZjZlZmY3YmRjOWUxNjdhOWNmMDI4MThhIiwiZjZlZmY3YmRjOWUxNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2YzU5MDE0NjM2IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZTdlMWVmYzk5NGM3ZGQxYzc3IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwY2UxMjU2IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTgwMDQzNjcwMDFmIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmRlMGRkZmE5ZmI1YzUxYjhhIiwiZmVlYmUyZmJiNGI5Zjc2OGExYWUwMTdlIiwiZmVlYmUyZmJiNGI5Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3NDkwMDZhIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZjdmY2I5YWRkZDhlMzFhMzU0IiwiZmZmZmNjYzJlNjk5NzhjNjc5MjM4NDQzIiwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA2ODM3MDA0NTI5IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmZmN2JjZmVjNDRmZDk1ZjBlIiwiZmZmZmQ0ZmVkOThlZmU5OTI5Y2M0YzAyIiwiZmZmZmQ0ZmVkOThlZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOTkzNDA0NjYyNTA2IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZGVlYmY3OWVjYWUxMzE4MmJkIiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1IiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWUwYTFkOTliMzFhMzU0IiwiZWRmOGU5YmFlNGIzNzRjNDc2MjM4YjQ1IiwiZWRmOGU5YmFlNGIzNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZWZlZGY1YmNiZGRjNzU2YmIxIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NmE1MWEzIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNTQyNzhmM2YwMDdkIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlMGQyZmM5MjcyZGUyZDI2IiwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkIiwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkIikubWFwKGphKSksUGEobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKGphKSksU24oR2UoMzAwLC41LDApLEdlKC0yNDAsLjUsMSkpLFNuKEdlKC0xMDAsLjc1LC4zNSksR2UoODAsMS41LC44KSksU24oR2UoMjYwLC43NSwuMzUpLEdlKDgwLDEuNSwuOCkpLEdlKCksZ2UoKSxNYXRoLE1hdGgsTWEoamEoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxNYShqYSgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLE1hKGphKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksTWEoamEoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKTt2YXIgTmE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxSYT1NYXRoLmFicyxEYT1NYXRoLmF0YW4yLExhPU1hdGguY29zLEZhPU1hdGgubWF4LFZhPU1hdGgubWluLFVhPU1hdGguc2luLHphPU1hdGguc3FydCxCYT0xZS0xMixIYT1NYXRoLlBJLFdhPUhhLzIscWE9MipIYTtmdW5jdGlvbiBZYSh0KXtyZXR1cm4gdD49MT9XYTp0PD0tMT8tV2E6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIEdhKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIFFhKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIEthKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gWmEodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gWGEodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gJGEodCxlLG4scixpLG8sYSl7dmFyIHM9dC1uLHU9ZS1yLGw9KGE/bzotbykvemEocypzK3UqdSksYz1sKnUsZj0tbCpzLGg9dCtjLGQ9ZStmLHA9bitjLG09citmLHk9KGgrcCkvMixnPShkK20pLzIsdj1wLWgsYj1tLWQsXz12KnYrYipiLHc9aS1vLHg9aCptLXAqZCxPPShiPDA/LTE6MSkqemEoRmEoMCx3KncqXy14KngpKSxDPSh4KmItdipPKS9fLFM9KC14KnYtYipPKS9fLEU9KHgqYit2Kk8pL18saz0oLXgqditiKk8pL18sVD1DLXksST1TLWcsQT1FLXksaj1rLWc7cmV0dXJuIFQqVCtJKkk+QSpBK2oqaiYmKEM9RSxTPWspLHtjeDpDLGN5OlMseDAxOi1jLHkwMTotZix4MTE6QyooaS93LTEpLHkxMTpTKihpL3ctMSl9fXZhciBKYT1mdW5jdGlvbigpe3ZhciB0PUdhLGU9UWEsbj1OYSgwKSxyPW51bGwsaT1LYSxvPVphLGE9WGEscz1udWxsO2Z1bmN0aW9uIHUoKXt2YXIgdSxsLGMsZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1XYSxwPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLVdhLG09UmEocC1kKSx5PXA+ZDtpZihzfHwocz11PWJyKCkpLGg8ZiYmKGw9aCxoPWYsZj1sKSxoPkJhKWlmKG0+cWEtQmEpcy5tb3ZlVG8oaCpMYShkKSxoKlVhKGQpKSxzLmFyYygwLDAsaCxkLHAsIXkpLGY+QmEmJihzLm1vdmVUbyhmKkxhKHApLGYqVWEocCkpLHMuYXJjKDAsMCxmLHAsZCx5KSk7ZWxzZXt2YXIgZyx2LGI9ZCxfPXAsdz1kLHg9cCxPPW0sQz1tLFM9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixFPVM+QmEmJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6YShmKmYraCpoKSksaz1WYShSYShoLWYpLzIsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxUPWssST1rO2lmKEU+QmEpe3ZhciBBPVlhKEUvZipVYShTKSksaj1ZYShFL2gqVWEoUykpOyhPLT0yKkEpPkJhPyh3Kz1BKj15PzE6LTEseC09QSk6KE89MCx3PXg9KGQrcCkvMiksKEMtPTIqaik+QmE/KGIrPWoqPXk/MTotMSxfLT1qKTooQz0wLGI9Xz0oZCtwKS8yKX12YXIgUD1oKkxhKGIpLE09aCpVYShiKSxOPWYqTGEoeCksUj1mKlVhKHgpO2lmKGs+QmEpe3ZhciBEPWgqTGEoXyksTD1oKlVhKF8pLEY9ZipMYSh3KSxWPWYqVWEodyk7aWYobTxIYSl7dmFyIFU9Tz5CYT9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMpe3ZhciB1PUYtUCxsPVYtTSxjPWEtRCxmPXMtTCxoPShjKihNLUwpLWYqKFAtRCkpLyhmKnUtYypsKTtyZXR1cm5bUCtoKnUsTStoKmxdfSgwLDAsMCwwLDAsMCxOLFIpOltOLFJdLHo9UC1VWzBdLEI9TS1VWzFdLEg9RC1VWzBdLFc9TC1VWzFdLHE9MS9VYSgoKGM9KHoqSCtCKlcpLyh6YSh6KnorQipCKSp6YShIKkgrVypXKSkpPjE/MDpjPC0xP0hhOk1hdGguYWNvcyhjKSkvMiksWT16YShVWzBdKlVbMF0rVVsxXSpVWzFdKTtUPVZhKGssKGYtWSkvKHEtMSkpLEk9VmEoaywoaC1ZKS8ocSsxKSl9fUM+QmE/ST5CYT8oZz0kYShGLFYsUCxNLGgsSSx5KSx2PSRhKEQsTCxOLFIsaCxJLHkpLHMubW92ZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksSTxrP3MuYXJjKGcuY3gsZy5jeSxJLERhKGcueTAxLGcueDAxKSxEYSh2LnkwMSx2LngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksSSxEYShnLnkwMSxnLngwMSksRGEoZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsaCxEYShnLmN5K2cueTExLGcuY3grZy54MTEpLERhKHYuY3krdi55MTEsdi5jeCt2LngxMSksIXkpLHMuYXJjKHYuY3gsdi5jeSxJLERhKHYueTExLHYueDExKSxEYSh2LnkwMSx2LngwMSksIXkpKSk6KHMubW92ZVRvKFAsTSkscy5hcmMoMCwwLGgsYixfLCF5KSk6cy5tb3ZlVG8oUCxNKSxmPkJhJiZPPkJhP1Q+QmE/KGc9JGEoTixSLEQsTCxmLC1ULHkpLHY9JGEoUCxNLEYsVixmLC1ULHkpLHMubGluZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksVDxrP3MuYXJjKGcuY3gsZy5jeSxULERhKGcueTAxLGcueDAxKSxEYSh2LnkwMSx2LngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksVCxEYShnLnkwMSxnLngwMSksRGEoZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsZixEYShnLmN5K2cueTExLGcuY3grZy54MTEpLERhKHYuY3krdi55MTEsdi5jeCt2LngxMSkseSkscy5hcmModi5jeCx2LmN5LFQsRGEodi55MTEsdi54MTEpLERhKHYueTAxLHYueDAxKSwheSkpKTpzLmFyYygwLDAsZix4LHcseSk6cy5saW5lVG8oTixSKX1lbHNlIHMubW92ZVRvKDAsMCk7aWYocy5jbG9zZVBhdGgoKSx1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gdS5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1IYS8yO3JldHVybltMYShyKSpuLFVhKHIpKm5dfSx1LmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TmEoK2UpLHUpOnR9LHUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6ZX0sdS5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6bn0sdS5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoK3QpLHUpOnJ9LHUuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTppfSx1LmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoK3QpLHUpOm99LHUucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6YX0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LHUpOnN9LHV9O2Z1bmN0aW9uIHRzKHQpe3RoaXMuX2NvbnRleHQ9dH10cy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgZXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB0cyh0KX07ZnVuY3Rpb24gbnModCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gcnModCl7cmV0dXJuIHRbMV19dmFyIGlzPWZ1bmN0aW9uKCl7dmFyIHQ9bnMsZT1ycyxuPU5hKCEwKSxyPW51bGwsaT1lcyxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgcyx1LGwsYz1hLmxlbmd0aCxmPSExO2ZvcihudWxsPT1yJiYobz1pKGw9YnIoKSkpLHM9MDtzPD1jOysrcykhKHM8YyYmbih1PWFbc10scyxhKSk9PT1mJiYoKGY9IWYpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGYmJm8ucG9pbnQoK3QodSxzLGEpLCtlKHUscyxhKSk7aWYobClyZXR1cm4gbz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk5hKCtlKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksYSk6ZX0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoISF0KSxhKTpufSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKG89aShyKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bz1udWxsOm89aShyPXQpLGEpOnJ9LGF9LG9zPWZ1bmN0aW9uKCl7dmFyIHQ9bnMsZT1udWxsLG49TmEoMCkscj1ycyxpPU5hKCEwKSxvPW51bGwsYT1lcyxzPW51bGw7ZnVuY3Rpb24gdSh1KXt2YXIgbCxjLGYsaCxkLHA9dS5sZW5ndGgsbT0hMSx5PW5ldyBBcnJheShwKSxnPW5ldyBBcnJheShwKTtmb3IobnVsbD09byYmKHM9YShkPWJyKCkpKSxsPTA7bDw9cDsrK2wpe2lmKCEobDxwJiZpKGg9dVtsXSxsLHUpKT09PW0paWYobT0hbSljPWwscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCksZj1sLTE7Zj49YzstLWYpcy5wb2ludCh5W2ZdLGdbZl0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfW0mJih5W2xdPSt0KGgsbCx1KSxnW2xdPStuKGgsbCx1KSxzLnBvaW50KGU/K2UoaCxsLHUpOnlbbF0scj8rcihoLGwsdSk6Z1tsXSkpfWlmKGQpcmV0dXJuIHM9bnVsbCxkKyIifHxudWxsfWZ1bmN0aW9uIGwoKXtyZXR1cm4gaXMoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIHUueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk5hKCtuKSxlPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk5hKCtlKSx1KTp0fSx1LngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hKCt0KSx1KTplfSx1Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCkscj1udWxsLHUpOm59LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6bn0sdS55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOYSgrdCksdSk6cn0sdS5saW5lWDA9dS5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gbCgpLngodCkueShuKX0sdS5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gbCgpLngodCkueShyKX0sdS5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gbCgpLngoZSkueShuKX0sdS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmEoISF0KSx1KTppfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbnVsbCE9byYmKHM9YShvKSksdSk6YX0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P289cz1udWxsOnM9YShvPXQpLHUpOm99LHV9O2Z1bmN0aW9uIGFzKHQpe3RoaXMuX2N1cnZlPXR9YXMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fSxBcnJheSxNYXRoLnNxcnQoMS8zKSxNYXRoLnNpbihIYS8xMCksTWF0aC5zaW4oNypIYS8xMCk7dmFyIHNzPShNYXRoLnNpbihxYS8xMCksTWF0aC5jb3MocWEvMTApLE1hdGguc3FydCgzKSxNYXRoLnNxcnQoMyksTWF0aC5zcXJ0KDEyKSxmdW5jdGlvbigpe30pO2Z1bmN0aW9uIHVzKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStuKS82KX1mdW5jdGlvbiBscyh0KXt0aGlzLl9jb250ZXh0PXR9bHMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzp1cyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDp1cyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIGNzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbHModCl9O2Z1bmN0aW9uIGZzKHQsZSl7dGhpcy5fYmFzaXM9bmV3IGxzKHQpLHRoaXMuX2JldGE9ZX1mdW5jdGlvbiBocyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtbiksdC5feDIsdC5feTIpfWZ1bmN0aW9uIGRzKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBwcyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24gbXModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWZ1bmN0aW9uIHlzKHQsZSxuKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsYT10Ll95MjtpZih0Ll9sMDFfYT5CYSl7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL3UsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL3V9aWYodC5fbDIzX2E+QmEpe3ZhciBsPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qbCt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2MsYT0oYSpsK3QuX3kxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvY310Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sYSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZ3ModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1mdW5jdGlvbiB2cyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWZ1bmN0aW9uIGJzKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZnVuY3Rpb24gX3ModCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIHdzKHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsbz0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxhPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0obyppK2EqcikvKHIraSk7cmV0dXJuKF9zKG8pK19zKGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24geHModCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIE9zKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3gxLG89dC5feTEsYT0oaS1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK2EsdC5feTArYSplLGktYSxvLWEqbixpLG8pfWZ1bmN0aW9uIENzKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBTcyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRXMoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBrcyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIFRzKHQsZSl7dmFyIG49ZSxyPWUuUixpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5SPXIuTCxuLlImJihuLlIuVT1uKSxyLkw9bn1mdW5jdGlvbiBJcyh0LGUpe3ZhciBuPWUscj1lLkwsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24gQXModCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZzLnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aC0xO2lmKG4+MClmb3IodmFyIHIsaT10WzBdLG89ZVswXSxhPXRbbl0taSxzPWVbbl0tbyx1PS0xOysrdTw9bjspdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W3VdKygxLXRoaXMuX2JldGEpKihpKyhyPXUvbikqYSksdGhpcy5fYmV0YSplW3VdKygxLXRoaXMuX2JldGEpKihvK3IqcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDE9PT1lP25ldyBscyh0KTpuZXcgZnModCxlKX1yZXR1cm4gbi5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjg1KSxkcy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6aHModGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OmhzKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBkcyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKSxwcy5wcm90b3R5cGU9e2FyZWFTdGFydDpzcyxhcmVhRW5kOnNzLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6aHModGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IHBzKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLG1zLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmhzKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBtcyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKSxncy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OnlzKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBncyh0LGUpOm5ldyBkcyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpLHZzLnByb3RvdHlwZT17YXJlYVN0YXJ0OnNzLGFyZWFFbmQ6c3MsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6eXModGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IHZzKHQsZSk6bmV3IHBzKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSksYnMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OnlzKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBicyh0LGUpOm5ldyBtcyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpLENzLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpPcyh0aGlzLHRoaXMuX3QwLHhzKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxPcyh0aGlzLHhzKHRoaXMsbj13cyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6T3ModGhpcyx0aGlzLl90MCxuPXdzKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKChmdW5jdGlvbih0KXt0aGlzLl9jb250ZXh0PW5ldyBTcyh0KX0pLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKENzLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7Q3MucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxTcy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLG8saSl9fSxFcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkVzLGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtuPXR9ZWxzZSB0aGlzLl8/KHQ9QXModGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUsbj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLG49bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9bixlLkM9ITAsdD1lO24mJm4uQzspbj09PShyPW4uVSkuTD8oaT1yLlIpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLlImJihUcyh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCxJcyh0aGlzLHIpKTooaT1yLkwpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLkwmJihJcyh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCxUcyh0aGlzLHIpKSxuPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUsbixyLGk9dC5VLG89dC5MLGE9dC5SO2lmKG49bz9hP0FzKGEpOm86YSxpP2kuTD09PXQ/aS5MPW46aS5SPW46dGhpcy5fPW4sbyYmYT8ocj1uLkMsbi5DPXQuQyxuLkw9byxvLlU9bixuIT09YT8oaT1uLlUsbi5VPXQuVSxpLkw9dD1uLlIsbi5SPWEsYS5VPW4pOihuLlU9aSxpPW4sdD1uLlIpKToocj10LkMsdD1uKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsVHModGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxJcyh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxUcyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsSXModGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxUcyh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxJcyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIGpzPUVzO2Z1bmN0aW9uIFBzKHQsZSxuLHIpe3ZhciBpPVtudWxsLG51bGxdLG89dHUucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9dCxpLnJpZ2h0PWUsbiYmTnMoaSx0LGUsbiksciYmTnMoaSxlLHQsciksJHNbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksJHNbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBNcyh0LGUsbil7dmFyIHI9W2Usbl07cmV0dXJuIHIubGVmdD10LHJ9ZnVuY3Rpb24gTnModCxlLG4scil7dFswXXx8dFsxXT90LmxlZnQ9PT1uP3RbMV09cjp0WzBdPXI6KHRbMF09cix0LmxlZnQ9ZSx0LnJpZ2h0PW4pfWZ1bmN0aW9uIFJzKHQsZSxuLHIsaSl7dmFyIG8sYT10WzBdLHM9dFsxXSx1PWFbMF0sbD1hWzFdLGM9MCxmPTEsaD1zWzBdLXUsZD1zWzFdLWw7aWYobz1lLXUsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfWVsc2UgaWYoaD4wKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9aWYobz1yLXUsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoaD4wKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9aWYobz1uLWwsZHx8IShvPjApKXtpZihvLz1kLGQ8MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfWVsc2UgaWYoZD4wKXtpZihvPmYpcmV0dXJuO28+YyYmKGM9byl9aWYobz1pLWwsZHx8IShvPDApKXtpZihvLz1kLGQ8MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoZD4wKXtpZihvPGMpcmV0dXJuO288ZiYmKGY9byl9cmV0dXJuIShjPjB8fGY8MSl8fChjPjAmJih0WzBdPVt1K2MqaCxsK2MqZF0pLGY8MSYmKHRbMV09W3UrZipoLGwrZipkXSksITApfX19fX1mdW5jdGlvbiBEcyh0LGUsbixyLGkpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSxzLHU9dFswXSxsPXQubGVmdCxjPXQucmlnaHQsZj1sWzBdLGg9bFsxXSxkPWNbMF0scD1jWzFdLG09KGYrZCkvMix5PShoK3ApLzI7aWYocD09PWgpe2lmKG08ZXx8bT49cilyZXR1cm47aWYoZj5kKXtpZih1KXtpZih1WzFdPj1pKXJldHVybn1lbHNlIHU9W20sbl07bz1bbSxpXX1lbHNle2lmKHUpe2lmKHVbMV08bilyZXR1cm59ZWxzZSB1PVttLGldO289W20sbl19fWVsc2UgaWYocz15LShhPShmLWQpLyhwLWgpKSptLGE8LTF8fGE+MSlpZihmPmQpe2lmKHUpe2lmKHVbMV0+PWkpcmV0dXJufWVsc2UgdT1bKG4tcykvYSxuXTtvPVsoaS1zKS9hLGldfWVsc2V7aWYodSl7aWYodVsxXTxuKXJldHVybn1lbHNlIHU9WyhpLXMpL2EsaV07bz1bKG4tcykvYSxuXX1lbHNlIGlmKGg8cCl7aWYodSl7aWYodVswXT49cilyZXR1cm59ZWxzZSB1PVtlLGEqZStzXTtvPVtyLGEqcitzXX1lbHNle2lmKHUpe2lmKHVbMF08ZSlyZXR1cm59ZWxzZSB1PVtyLGEqcitzXTtvPVtlLGEqZStzXX1yZXR1cm4gdFswXT11LHRbMV09bywhMH1mdW5jdGlvbiBMcyh0LGUpe3ZhciBuPXQuc2l0ZSxyPWUubGVmdCxpPWUucmlnaHQ7cmV0dXJuIG49PT1pJiYoaT1yLHI9biksaT9NYXRoLmF0YW4yKGlbMV0tclsxXSxpWzBdLXJbMF0pOihuPT09cj8ocj1lWzFdLGk9ZVswXSk6KHI9ZVswXSxpPWVbMV0pLE1hdGguYXRhbjIoclswXS1pWzBdLGlbMV0tclsxXSkpfWZ1bmN0aW9uIEZzKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiBWcyh0LGUpe3JldHVybiBlWysoZS5sZWZ0PT09dC5zaXRlKV19dmFyIFVzLHpzPVtdO2Z1bmN0aW9uIEJzKHQpe3ZhciBlPXQuUCxuPXQuTjtpZihlJiZuKXt2YXIgcj1lLnNpdGUsaT10LnNpdGUsbz1uLnNpdGU7aWYociE9PW8pe3ZhciBhPWlbMF0scz1pWzFdLHU9clswXS1hLGw9clsxXS1zLGM9b1swXS1hLGY9b1sxXS1zLGg9MioodSpmLWwqYyk7aWYoIShoPj0tbnUpKXt2YXIgZD11KnUrbCpsLHA9YypjK2YqZixtPShmKmQtbCpwKS9oLHk9KHUqcC1jKmQpL2gsZz16cy5wb3AoKXx8bmV3IGZ1bmN0aW9uKCl7a3ModGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfTtnLmFyYz10LGcuc2l0ZT1pLGcueD1tK2EsZy55PShnLmN5PXkrcykrTWF0aC5zcXJ0KG0qbSt5KnkpLHQuY2lyY2xlPWc7Zm9yKHZhciB2PW51bGwsYj1Kcy5fO2I7KWlmKGcueTxiLnl8fGcueT09PWIueSYmZy54PD1iLngpe2lmKCFiLkwpe3Y9Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7dj1iO2JyZWFrfWI9Yi5SfUpzLmluc2VydCh2LGcpLHZ8fChVcz1nKX19fX1mdW5jdGlvbiBIcyh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoVXM9ZS5OKSxKcy5yZW1vdmUoZSksenMucHVzaChlKSxrcyhlKSx0LmNpcmNsZT1udWxsKX12YXIgV3M9W107ZnVuY3Rpb24gcXModCl7dmFyIGU9V3MucG9wKCl8fG5ldyBmdW5jdGlvbigpe2tzKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH07cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gWXModCl7SHModCksWHMucmVtb3ZlKHQpLFdzLnB1c2godCksa3ModCl9ZnVuY3Rpb24gR3ModCl7dmFyIGU9dC5jaXJjbGUsbj1lLngscj1lLmN5LGk9W24scl0sbz10LlAsYT10Lk4scz1bdF07WXModCk7Zm9yKHZhciB1PW87dS5jaXJjbGUmJk1hdGguYWJzKG4tdS5jaXJjbGUueCk8ZXUmJk1hdGguYWJzKHItdS5jaXJjbGUuY3kpPGV1OylvPXUuUCxzLnVuc2hpZnQodSksWXModSksdT1vO3MudW5zaGlmdCh1KSxIcyh1KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmTWF0aC5hYnMobi1sLmNpcmNsZS54KTxldSYmTWF0aC5hYnMoci1sLmNpcmNsZS5jeSk8ZXU7KWE9bC5OLHMucHVzaChsKSxZcyhsKSxsPWE7cy5wdXNoKGwpLEhzKGwpO3ZhciBjLGY9cy5sZW5ndGg7Zm9yKGM9MTtjPGY7KytjKU5zKChsPXNbY10pLmVkZ2UsKHU9c1tjLTFdKS5zaXRlLGwuc2l0ZSxpKTsobD1zW2YtMV0pLmVkZ2U9UHMoKHU9c1swXSkuc2l0ZSxsLnNpdGUsbnVsbCxpKSxCcyh1KSxCcyhsKX1mdW5jdGlvbiBRcyh0KXtmb3IodmFyIGUsbixyLGksbz10WzBdLGE9dFsxXSxzPVhzLl87czspaWYoKHI9S3MocyxhKS1vKT5ldSlzPXMuTDtlbHNle2lmKCEoKGk9by1acyhzLGEpKT5ldSkpe3I+LWV1PyhlPXMuUCxuPXMpOmk+LWV1PyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7JHNbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgdT1xcyh0KTtpZihYcy5pbnNlcnQoZSx1KSxlfHxuKXtpZihlPT09bilyZXR1cm4gSHMoZSksbj1xcyhlLnNpdGUpLFhzLmluc2VydCh1LG4pLHUuZWRnZT1uLmVkZ2U9UHMoZS5zaXRlLHUuc2l0ZSksQnMoZSksdm9pZCBCcyhuKTtpZihuKXtIcyhlKSxIcyhuKTt2YXIgbD1lLnNpdGUsYz1sWzBdLGY9bFsxXSxoPXRbMF0tYyxkPXRbMV0tZixwPW4uc2l0ZSxtPXBbMF0tYyx5PXBbMV0tZixnPTIqKGgqeS1kKm0pLHY9aCpoK2QqZCxiPW0qbSt5KnksXz1bKHkqdi1kKmIpL2crYywoaCpiLW0qdikvZytmXTtOcyhuLmVkZ2UsbCxwLF8pLHUuZWRnZT1QcyhsLHQsbnVsbCxfKSxuLmVkZ2U9UHModCxwLG51bGwsXyksQnMoZSksQnMobil9ZWxzZSB1LmVkZ2U9UHMoZS5zaXRlLHUuc2l0ZSl9fWZ1bmN0aW9uIEtzKHQsZSl7dmFyIG49dC5zaXRlLHI9blswXSxpPW5bMV0sbz1pLWU7aWYoIW8pcmV0dXJuIHI7dmFyIGE9dC5QO2lmKCFhKXJldHVybi0xLzA7dmFyIHM9KG49YS5zaXRlKVswXSx1PW5bMV0sbD11LWU7aWYoIWwpcmV0dXJuIHM7dmFyIGM9cy1yLGY9MS9vLTEvbCxoPWMvbDtyZXR1cm4gZj8oLWgrTWF0aC5zcXJ0KGgqaC0yKmYqKGMqYy8oLTIqbCktdStsLzIraS1vLzIpKSkvZityOihyK3MpLzJ9ZnVuY3Rpb24gWnModCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gS3MobixlKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1lP3JbMF06MS8wfXZhciBYcywkcyxKcyx0dSxldT0xZS02LG51PTFlLTEyO2Z1bmN0aW9uIHJ1KHQsZSl7cmV0dXJuIGVbMV0tdFsxXXx8ZVswXS10WzBdfWZ1bmN0aW9uIGl1KHQsZSl7dmFyIG4scixpLG89dC5zb3J0KHJ1KS5wb3AoKTtmb3IodHU9W10sJHM9bmV3IEFycmF5KHQubGVuZ3RoKSxYcz1uZXcganMsSnM9bmV3IGpzOzspaWYoaT1VcyxvJiYoIWl8fG9bMV08aS55fHxvWzFdPT09aS55JiZvWzBdPGkueCkpb1swXT09PW4mJm9bMV09PT1yfHwoUXMobyksbj1vWzBdLHI9b1sxXSksbz10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7R3MoaS5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbixyLGk9MCxvPSRzLmxlbmd0aDtpPG87KytpKWlmKCh0PSRzW2ldKSYmKHI9KGU9dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24pYVtuXT1uLHNbbl09THModCx0dVtlW25dXSk7Zm9yKGEuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSxuPTA7bjxyOysrbilzW25dPWVbYVtuXV07Zm9yKG49MDtuPHI7KytuKWVbbl09c1tuXX19KCksZSl7dmFyIGE9K2VbMF1bMF0scz0rZVswXVsxXSx1PStlWzFdWzBdLGw9K2VbMV1bMV07IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaSxvPXR1Lmxlbmd0aDtvLS07KURzKGk9dHVbb10sdCxlLG4scikmJlJzKGksdCxlLG4scikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPmV1fHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPmV1KXx8ZGVsZXRlIHR1W29dfShhLHMsdSxsKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLGgsZCxwLG0seT0kcy5sZW5ndGgsZz0hMDtmb3IoaT0wO2k8eTsrK2kpaWYobz0kc1tpXSl7Zm9yKGE9by5zaXRlLHM9KHU9by5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KXR1W3Vbc11dfHx1LnNwbGljZShzLDEpO2ZvcihzPTAsbD11Lmxlbmd0aDtzPGw7KXA9KGQ9VnMobyx0dVt1W3NdXSkpWzBdLG09ZFsxXSxmPShjPUZzKG8sdHVbdVsrK3MlbF1dKSlbMF0saD1jWzFdLChNYXRoLmFicyhwLWYpPmV1fHxNYXRoLmFicyhtLWgpPmV1KSYmKHUuc3BsaWNlKHMsMCx0dS5wdXNoKE1zKGEsZCxNYXRoLmFicyhwLXQpPGV1JiZyLW0+ZXU/W3QsTWF0aC5hYnMoZi10KTxldT9oOnJdOk1hdGguYWJzKG0tcik8ZXUmJm4tcD5ldT9bTWF0aC5hYnMoaC1yKTxldT9mOm4scl06TWF0aC5hYnMocC1uKTxldSYmbS1lPmV1P1tuLE1hdGguYWJzKGYtbik8ZXU/aDplXTpNYXRoLmFicyhtLWUpPGV1JiZwLXQ+ZXU/W01hdGguYWJzKGgtZSk8ZXU/Zjp0LGVdOm51bGwpKS0xKSwrK2wpO2wmJihnPSExKX1pZihnKXt2YXIgdixiLF8sdz0xLzA7Zm9yKGk9MCxnPW51bGw7aTx5OysraSkobz0kc1tpXSkmJihfPSh2PShhPW8uc2l0ZSlbMF0tdCkqdisoYj1hWzFdLWUpKmIpPHcmJih3PV8sZz1vKTtpZihnKXt2YXIgeD1bdCxlXSxPPVt0LHJdLEM9W24scl0sUz1bbixlXTtnLmhhbGZlZGdlcy5wdXNoKHR1LnB1c2goTXMoYT1nLnNpdGUseCxPKSktMSx0dS5wdXNoKE1zKGEsTyxDKSktMSx0dS5wdXNoKE1zKGEsQyxTKSktMSx0dS5wdXNoKE1zKGEsUyx4KSktMSl9fWZvcihpPTA7aTx5OysraSkobz0kc1tpXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSAkc1tpXSl9KGEscyx1LGwpfXRoaXMuZWRnZXM9dHUsdGhpcy5jZWxscz0kcyxYcz1Kcz10dT0kcz1udWxsfWZ1bmN0aW9uIG91KHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn1mdW5jdGlvbiBhdSh0LGUsbil7dmFyIHIsaT1LdCh0KSxvPU1hdGgubWluKHBhcnNlSW50KGkuc3R5bGUoIndpZHRoIikpLHBhcnNlSW50KGkuc3R5bGUoImhlaWdodCIpKSkvMixhPXBhcnNlSW50KGkuc3R5bGUoIndpZHRoIikpLzItbyxzPXBhcnNlSW50KGkuc3R5bGUoImhlaWdodCIpKS8yLW8sdT1NYXRoLm1heChuLm1pblZhbHVlLE1hdGgubWluKG4ubWF4VmFsdWUsZSkpL24ubWF4VmFsdWUsbD1NYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKSsxO3I9bi53YXZlSGVpZ2h0U2NhbGluZz9HaSgpLnJhbmdlKFswLG4ud2F2ZUhlaWdodCwwXSkuZG9tYWluKFswLDUwLDEwMF0pOkdpKCkucmFuZ2UoW24ud2F2ZUhlaWdodCxuLndhdmVIZWlnaHRdKS5kb21haW4oWzAsMTAwXSk7dmFyIGM9bi50ZXh0U2l6ZSpvLzIsZj1wYXJzZUZsb2F0KGUpLnRvRml4ZWQoMiksaD1uLnZhbHVlQ291bnRVcD9uLm1pblZhbHVlOmYsZD1uLmRpc3BsYXlQZXJjZW50P24uY3VzdG9tUGVyY2VudDoiIixwPW4uY2lyY2xlVGhpY2tuZXNzKm8sbT1wK24uY2lyY2xlRmlsbEdhcCpvLHk9by1tLGc9eSpyKDEwMCp1KSx2PTErbi53YXZlQ291bnQsYj0yKnkvbi53YXZlQ291bnQqdixfPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpfTtwYXJzZUZsb2F0KGYpIT1wYXJzZUZsb2F0KF8oZikpJiYoXz1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDEpfSkscGFyc2VGbG9hdChmKSE9cGFyc2VGbG9hdChfKGYpKSYmKF89ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgyKX0pO2Zvcih2YXIgdz1bXSx4PTA7eDw9NDAqdjt4Kyspdy5wdXNoKHt4OngvKDQwKnYpLHk6eC80MH0pO3ZhciBPPUdpKCkucmFuZ2UoWzAsMipNYXRoLlBJXSkuZG9tYWluKFswLDFdKSxDPUdpKCkucmFuZ2UoWzAsb10pLmRvbWFpbihbMCxvXSksUz1HaSgpLnJhbmdlKFswLGJdKS5kb21haW4oWzAsMV0pLEU9R2koKS5yYW5nZShbMCxnXSkuZG9tYWluKFswLDFdKSxrPUdpKCkucmFuZ2UoW20rMip5K2csbS1nXSkuZG9tYWluKFswLDFdKSxUPUdpKCkucmFuZ2UoWzAsYi0yKnldKS5kb21haW4oWzAsMV0pLEk9R2koKS5yYW5nZShbbSsyKnksbSsuNypjXSkuZG9tYWluKFswLDFdKSxBPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYSsiLCIrcysiKSIpLGo9SmEoKS5zdGFydEFuZ2xlKE8oMCkpLmVuZEFuZ2xlKE8oMSkpLm91dGVyUmFkaXVzKEMobykpLmlubmVyUmFkaXVzKEMoby1wKSk7QS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixqKS5zdHlsZSgiZmlsbCIsbi5jaXJjbGVDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrbysiKSIpO3ZhciBQPUEuYXBwZW5kKCJ0ZXh0IikudGV4dChfKGgpK2QpLmF0dHIoImNsYXNzIiwibGlxdWlkRmlsbEdhdWdlVGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZm9udC1zaXplIixjKyJweCIpLnN0eWxlKCJmaWxsIixuLnRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrSShuLnRleHRWZXJ0UG9zaXRpb24pKyIpIiksTT1vcygpLngoZnVuY3Rpb24odCl7cmV0dXJuIFModC54KX0pLnkwKGZ1bmN0aW9uKHQpe3JldHVybiBFKE1hdGguc2luKDIqTWF0aC5QSSpuLndhdmVPZmZzZXQqLTErMipNYXRoLlBJKigxLW4ud2F2ZUNvdW50KSsyKnQueSpNYXRoLlBJKSl9KS55MShmdW5jdGlvbih0KXtyZXR1cm4gMip5K2d9KSxOPUEuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwiY2xpcFdhdmUiK2wudG9TdHJpbmcoKSksUj1OLmFwcGVuZCgicGF0aCIpLmRhdHVtKHcpLmF0dHIoImQiLE0pLmF0dHIoIlQiLDApLEQ9QS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLCJ1cmwoI2NsaXBXYXZlIitsLnRvU3RyaW5nKCkrIikiKTtELmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLG8pLmF0dHIoImN5IixvKS5hdHRyKCJyIix5KS5zdHlsZSgiZmlsbCIsbi53YXZlQ29sb3IpO3ZhciBMPUQuYXBwZW5kKCJ0ZXh0IikudGV4dChfKGgpK2QpLmF0dHIoImNsYXNzIiwibGlxdWlkRmlsbEdhdWdlVGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZm9udC1zaXplIixjKyJweCIpLnN0eWxlKCJmaWxsIixuLndhdmVUZXh0Q29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28rIiwiK0kobi50ZXh0VmVydFBvc2l0aW9uKSsiKSIpO2lmKG4udmFsdWVDb3VudFVwKXt2YXIgRj1mdW5jdGlvbigpe3ZhciB0PWhuKGgsZik7cmV0dXJuIGZ1bmN0aW9uKGUpe1AudGV4dChfKHQoZSkpK2QpLEwudGV4dChfKHQoZSkpK2QpfX07UC50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixGKSxMLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLEYpfXZhciBWPW0rMip5LWI7ZnVuY3Rpb24gVSgpe1IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVChSLmF0dHIoIlQiKSkrIiwwKSIpLFIudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZUFuaW1hdGVUaW1lKigxLVIuYXR0cigiVCIpKSkuZWFzZShscikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVCgxKSsiLDApIikuYXR0cigiVCIsMSkub24oImVuZCIsZnVuY3Rpb24oKXtSLmF0dHIoIlQiLDApLFUoKX0pfXJldHVybiBuLndhdmVSaXNlP04uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIraygwKSsiKSIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrayh1KSsiKSIpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxLDApIil9KTpOLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK2sodSkrIikiKSxuLndhdmVBbmltYXRlJiZVKCkse3VwZGF0ZSh0KXt2YXIgZT1wYXJzZUZsb2F0KHQpLnRvRml4ZWQoMiksaT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KX07cGFyc2VGbG9hdChlKSE9cGFyc2VGbG9hdChpKGUpKSYmKGk9ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgxKX0pLHBhcnNlRmxvYXQoZSkhPXBhcnNlRmxvYXQoaShlKSkmJihpPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMil9KTt2YXIgbz1mdW5jdGlvbigpe3ZhciBlPWhuKFAudGV4dCgpLHBhcnNlRmxvYXQodCkudG9GaXhlZCgyKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe1AudGV4dChpKGUodCkpK2QpLEwudGV4dChpKGUodCkpK2QpfX07UC50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixvKSxMLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLG8pO3ZhciBhLHM9TWF0aC5tYXgobi5taW5WYWx1ZSxNYXRoLm1pbihuLm1heFZhbHVlLHQpKS9uLm1heFZhbHVlLHU9eSpyKDEwMCpzKSxsPUdpKCkucmFuZ2UoW20rMip5K3UsbS11XSkuZG9tYWluKFswLDFdKShzKSxjPUdpKCkucmFuZ2UoWzAsYl0pLmRvbWFpbihbMCwxXSksZj1HaSgpLnJhbmdlKFswLHVdKS5kb21haW4oWzAsMV0pO2E9bi53YXZlSGVpZ2h0U2NhbGluZz9Mci5hcmVhKCkueChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LngpfSkueTAoZnVuY3Rpb24odCl7cmV0dXJuIGYoTWF0aC5zaW4oMipNYXRoLlBJKm4ud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtbi53YXZlQ291bnQpKzIqdC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKHQpe3JldHVybiAyKnkrdX0pOk07dmFyIGg9bi53YXZlQW5pbWF0ZT9UKDEpOjA7Ui50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZUFuaW1hdGU/bi53YXZlQW5pbWF0ZVRpbWUqKDEtUi5hdHRyKCJUIikpOm4ud2F2ZVJpc2VUaW1lKS5lYXNlKGxyKS5hdHRyKCJkIixhKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitoKyIsMCkiKS5hdHRyKCJUIiwiMSIpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7bi53YXZlQW5pbWF0ZSYmKFIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVCgwKSsiLDApIiksVSgpKX0pLE4udHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitsKyIpIil9fX1pdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOml1LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24oZSl7dmFyIG49ZS5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBGcyhlLHRbbl0pfSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7aWYobz0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxvLGEscyx1LGwsYz1uLnNpdGUsZj0tMSxoPWVbaVtvLTFdXSxkPWgubGVmdD09PWM/aC5yaWdodDpoLmxlZnQ7KytmPG87KWE9ZCxkPShoPWVbaVtmXV0pLmxlZnQ9PT1jP2gucmlnaHQ6aC5sZWZ0LGEmJmQmJnI8YS5pbmRleCYmcjxkLmluZGV4JiYoKHM9YylbMF0tKGw9ZClbMF0pKigodT1hKVsxXS1zWzFdKS0oc1swXS11WzBdKSoobFsxXS1zWzFdKTwwJiZ0LnB1c2goW2MuZGF0YSxhLmRhdGEsZC5kYXRhXSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHM9by5jZWxscy5sZW5ndGg7IShpPW8uY2VsbHNbYV0pOylpZigrK2E+PXMpcmV0dXJuIG51bGw7dmFyIHU9dC1pLnNpdGVbMF0sbD1lLWkuc2l0ZVsxXSxjPXUqdStsKmw7ZG97aT1vLmNlbGxzW3I9YV0sYT1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9by5lZGdlc1tuXSxzPXIubGVmdDtpZihzIT09aS5zaXRlJiZzfHwocz1yLnJpZ2h0KSl7dmFyIHU9dC1zWzBdLGw9ZS1zWzFdLGY9dSp1K2wqbDtmPGMmJihjPWYsYT1zLmluZGV4KX19KX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPXIsbnVsbD09bnx8Yzw9bipuP2kuc2l0ZTpudWxsfX0sb3UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgb3UodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dCYwPT09ZT90aGlzOm5ldyBvdSh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19LG5ldyBvdSgxLDAsMCk7dmFyIHN1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZHluX3dpZHRoPTUwMH1yZXR1cm4gdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQsZTt0aGlzLmR5bl93aWR0aD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZDNjb250YWluZXIiKS5jbGllbnRXaWR0aCx0PUt0KCIjZDN0YXJnZXQiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLCJhbmltYXRlLWdyYWRpZW50IikuYXR0cigieDEiLCIwJSIpLmF0dHIoInkxIiwiMCUiKS5hdHRyKCJ4MiIsIjEwMCUiKS5hdHRyKCJ5MiIsIjAiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJyZWZsZWN0IiksZT1bIiMwMDFhZmQiLCIjNmI2N2ZjIiwiIzUzOTBlMyIsIiMzNTZjYzYiLCIjNTM5MGUzIiwiIzZiNjdmYyIsIiMwMDFhZmQiXSx0LnNlbGVjdEFsbCgiLnN0b3AiKS5kYXRhKGUpLmVudGVyKCkuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixmdW5jdGlvbih0LG4pe3JldHVybiBuLyhlLmxlbmd0aC0xKX0pLmF0dHIoInN0b3AtY29sb3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSksdC5hcHBlbmQoImFuaW1hdGUiKS5hdHRyKCJhdHRyaWJ1dGVOYW1lIiwieDEiKS5hdHRyKCJ2YWx1ZXMiLCIwJTsxMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKSx0LmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MiIpLmF0dHIoInZhbHVlcyIsIjEwMCU7MjAwJSIpLmF0dHIoImR1ciIsIjdzIikuYXR0cigicmVwZWF0Q291bnQiLCJpbmRlZmluaXRlIik7dmFyIG49e21pblZhbHVlOjAsbWF4VmFsdWU6MTAwLGNpcmNsZVRoaWNrbmVzczouMDUsY2lyY2xlRmlsbEdhcDouMDUsY2lyY2xlQ29sb3I6IiMxNzhCQ0EiLHdhdmVIZWlnaHQ6LjA1LHdhdmVDb3VudDoxLHdhdmVSaXNlVGltZToxZTMsd2F2ZUFuaW1hdGVUaW1lOjE4ZTMsd2F2ZVJpc2U6ITAsd2F2ZUhlaWdodFNjYWxpbmc6ITAsd2F2ZUFuaW1hdGU6ITAsd2F2ZUNvbG9yOiIjMTc4QkNBIix3YXZlT2Zmc2V0OjAsdGV4dFZlcnRQb3NpdGlvbjouNSx0ZXh0U2l6ZToxLHZhbHVlQ291bnRVcDohMCxkaXNwbGF5UGVyY2VudDohMCx0ZXh0Q29sb3I6IiMwNDU2ODEiLHdhdmVUZXh0Q29sb3I6IiNBNERCZjgiLGN1c3RvbVBlcmNlbnQ6IiUifTtuLnZhbHVlQ291bnRVcD0hMCxuLmNpcmNsZVRoaWNrbmVzcz0uMTUsbi5jaXJjbGVDb2xvcj0iIzgwODAxNSIsbi50ZXh0Q29sb3I9IiM1NTU1MDAiLG4ud2F2ZVRleHRDb2xvcj0iI0ZGRkZBQSIsbi53YXZlQ29sb3I9IiNBQUFBMzkiLG4udGV4dFZlcnRQb3NpdGlvbj0uOCxuLndhdmVBbmltYXRlVGltZT0xZTMsbi53YXZlSGVpZ2h0PS4wNSxuLndhdmVBbmltYXRlPSEwLG4ud2F2ZVJpc2U9ITEsbi53YXZlSGVpZ2h0U2NhbGluZz0hMSxuLndhdmVPZmZzZXQ9LjI1LG4udGV4dFNpemU9LjUsbi53YXZlQ291bnQ9MyxuLmRpc3BsYXlQZXJjZW50PSEwLG4ubWluVmFsdWU9MCxuLm1heFZhbHVlPTYwMCxuLmN1c3RvbVBlcmNlbnQ9IiBubW9sL0wiO3ZhciByPWF1KCIjZDNpbnB1dGdhdWdlIiwyMjAsbik7T2JqZWN0KEwuYSkoMTUwMCwxNTAwKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIHIudXBkYXRlKE1hdGguZmxvb3IoMTAwKk1hdGgucmFuZG9tKCkpKzI1MCl9KTt2YXIgaT17bWluVmFsdWU6MCxtYXhWYWx1ZToxMDAsY2lyY2xlVGhpY2tuZXNzOi4wNSxjaXJjbGVGaWxsR2FwOi4wNSxjaXJjbGVDb2xvcjoiIzE3OEJDQSIsd2F2ZUhlaWdodDouMDUsd2F2ZUNvdW50OjEsd2F2ZVJpc2VUaW1lOjFlMyx3YXZlQW5pbWF0ZVRpbWU6MThlMyx3YXZlUmlzZTohMCx3YXZlSGVpZ2h0U2NhbGluZzohMCx3YXZlQW5pbWF0ZTohMCx3YXZlQ29sb3I6IiMxNzhCQ0EiLHdhdmVPZmZzZXQ6MCx0ZXh0VmVydFBvc2l0aW9uOi41LHRleHRTaXplOjEsdmFsdWVDb3VudFVwOiEwLGRpc3BsYXlQZXJjZW50OiEwLHRleHRDb2xvcjoiIzA0NTY4MSIsd2F2ZVRleHRDb2xvcjoiI0E0REJmOCIsY3VzdG9tUGVyY2VudDoiJSJ9O2kudmFsdWVDb3VudFVwPSEwLGkuY2lyY2xlVGhpY2tuZXNzPS4xNSxpLmNpcmNsZUNvbG9yPSIjODAzNTdjIixpLnRleHRDb2xvcj0iIzU1NTUwMCIsaS53YXZlVGV4dENvbG9yPSIjRkZGRkFBIixpLndhdmVDb2xvcj0iI0FBQUEzOSIsaS50ZXh0VmVydFBvc2l0aW9uPS44LGkud2F2ZUFuaW1hdGVUaW1lPTFlMyxpLndhdmVIZWlnaHQ9LjA1LGkud2F2ZUFuaW1hdGU9ITAsaS53YXZlUmlzZT0hMSxpLndhdmVIZWlnaHRTY2FsaW5nPSExLGkud2F2ZU9mZnNldD0uMjUsaS50ZXh0U2l6ZT0uNSxpLndhdmVDb3VudD0zLGkuZGlzcGxheVBlcmNlbnQ9ITAsaS5taW5WYWx1ZT0wLGkubWF4VmFsdWU9NjAwLGkuY3VzdG9tUGVyY2VudD0iIG5tb2wvTCI7dmFyIG8sYSxzLHUsbCxjLGYsaCxkLHA9YXUoIiNkM291dGdhdWdlIiw0NSxpKTtPYmplY3QoTC5hKSgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gcC51cGRhdGUoTWF0aC5mbG9vcig0MCpNYXRoLnJhbmRvbSgpKSs1MCl9KSxzPUt0KCIjZDNiaW1vZGFsIiksdT1HaSgpLmRvbWFpbihbMzAsMTEwXSkucmFuZ2UoWzQwLDI3MF0pLGw9R2koKS5kb21haW4oWzAsLjFdKS5yYW5nZShbMTUwLDIwXSksZj0oYz1bNzksNTQsNzQsNjIsODUsNTUsODgsODUsNTEsODUsNTQsODQsNzgsNDcsODMsNTIsNjIsODQsNTIsNzksNTEsNDcsNzgsNjksNzQsODMsNTUsNzYsNzgsNzksNzMsNzcsNjYsODAsNzQsNTIsNDgsODAsNTksOTAsODAsNTgsODQsNTgsNzMsODMsNjQsNTMsODIsNTksNzUsOTAsNTQsODAsNTQsODMsNzEsNjQsNzcsODEsNTksODQsNDgsODIsNjAsOTIsNzgsNzgsNjUsNzMsODIsNTYsNzksNzEsNjIsNzYsNjAsNzgsNzYsODMsNzUsODIsNzAsNjUsNzMsODgsNzYsODAsNDgsODYsNjAsOTAsNTAsNzgsNjMsNzIsODQsNzUsNTEsODIsNjIsODgsNDksODMsODEsNDcsODQsNTIsODYsODEsNzUsNTksODksNzksNTksODEsNTAsODUsNTksODcsNTMsNjksNzcsNTYsODgsODEsNDUsODIsNTUsOTAsNDUsODMsNTYsODksNDYsODIsNTEsODYsNTMsNzksODEsNjAsODIsNzcsNzYsNTksODAsNDksOTYsNTMsNzcsNzcsNjUsODEsNzEsNzAsODEsOTMsNTMsODksNDUsODYsNTgsNzgsNjYsNzYsNjMsODgsNTIsOTMsNDksNTcsNzcsNjgsODEsODEsNzMsNTAsODUsNzQsNTUsNzcsODMsODMsNTEsNzgsODQsNDYsODMsNTUsODEsNTcsNzYsODQsNzcsODEsODcsNzcsNTEsNzgsNjAsODIsOTEsNTMsNzgsNDYsNzcsODQsNDksODMsNzEsODAsNDksNzUsNjQsNzYsNTMsOTQsNTUsNzYsNTAsODIsNTQsNzUsNzgsNzksNzgsNzgsNzAsNzksNzAsNTQsODYsNTAsOTAsNTQsNTQsNzcsNzksNjQsNzUsNDcsODYsNjMsODUsODIsNTcsODIsNjcsNzQsNTQsODMsNzMsNzMsODgsODAsNzEsODMsNTYsNzksNzgsODQsNTgsODMsNDMsNjAsNzUsODEsNDYsOTAsNDYsNzRdKS5sZW5ndGgsaD1mdW5jdGlvbigpe3ZhciB0PVcsZT16LG49JDtmdW5jdGlvbiByKHIpe3ZhciBpLG8sYT1yLmxlbmd0aCxzPW5ldyBBcnJheShhKTtmb3IoaT0wO2k8YTsrK2kpc1tpXT10KHJbaV0saSxyKTt2YXIgdT1lKHMpLGw9dVswXSxjPXVbMV0sZj1uKHMsbCxjKTtBcnJheS5pc0FycmF5KGYpfHwoZj1YKGwsYyxmKSxmPXEoTWF0aC5jZWlsKGwvZikqZixNYXRoLmZsb29yKGMvZikqZixmKSk7Zm9yKHZhciBoPWYubGVuZ3RoO2ZbMF08PWw7KWYuc2hpZnQoKSwtLWg7Zm9yKDtmW2gtMV0+YzspZi5wb3AoKSwtLWg7dmFyIGQscD1uZXcgQXJyYXkoaCsxKTtmb3IoaT0wO2k8PWg7KytpKShkPXBbaV09W10pLngwPWk+MD9mW2ktMV06bCxkLngxPWk8aD9mW2ldOmM7Zm9yKGk9MDtpPGE7KytpKWw8PShvPXNbaV0pJiZvPD1jJiZwW1YoZixvLDAsaCldLnB1c2gocltpXSk7cmV0dXJuIHB9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpIKGUpLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SChbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9IKEIuY2FsbCh0KSk6SCh0KSxyKTpufSxyfSgpLmRvbWFpbih1LmRvbWFpbigpKS50aHJlc2hvbGRzKDQwKShjKSxkPShvPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0Lz03KTw9MT8uNzUqKDEtdCp0KS83OjB9LGE9dS50aWNrcyg0MCksZnVuY3Rpb24odCl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLGZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPXIsbz0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysrbzxyOylpc05hTihuPVUodFtvXSkpPy0taTphKz1uO2Vsc2UgZm9yKDsrK288cjspaXNOYU4obj1VKGUodFtvXSkpKT8tLWk6YSs9bjtpZihpKXJldHVybiBhL2l9KHQsZnVuY3Rpb24odCl7cmV0dXJuIG8oZS10KX0pXX0pfSkoYykscy5pbnNlcnQoImciLCIqIikuYXR0cigiZmlsbCIsIiNiYmIiKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKGgpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHUodC54MCkrMX0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiBsKHQubGVuZ3RoL2YpfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB1KHQueDEpLXUodC54MCktMX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIGwoMCktbCh0Lmxlbmd0aC9mKX0pLHMuYXBwZW5kKCJwYXRoIikuZGF0dW0oZCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxLjUpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigiZCIsaXMoKS5jdXJ2ZShjcykueChmdW5jdGlvbih0KXtyZXR1cm4gdSh0WzBdKX0pLnkoZnVuY3Rpb24odCl7cmV0dXJuIGwodFsxXSl9KSl9LHR9KCksdXU9aS5NYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIuZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfW1hdC1jYXJkLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo3MDB9XG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXNoYm9hcmQuY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gbHUodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCw1MiwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJNZVRocml4IDogQ2xlYW5pbmcgaG9zcGl0YWwgZWZmbHVlbnQgc2luY2UgMjAxOCJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCw0OSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsUi5kLFIuYSkpLGkuTmEoNCw0OTE1MixudWxsLDAsRC5hLFtdLG51bGwsbnVsbCksKHQoKSgpLGkuT2EoNSwwLG51bGwsMCw0LCJtYXQtY2FyZC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWNhcmQtaGVhZGVyIl1dLG51bGwsbnVsbCxudWxsLFIuYyxSLmIpKSxpLk5hKDYsNDkxNTIsbnVsbCwwLEQuYyxbXSxudWxsLG51bGwpLCh0KCkoKSxpLk9hKDcsMCxudWxsLDEsMiwibWF0LWNhcmQtdGl0bGUiLFtbImNsYXNzIiwibWF0LWNhcmQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSg4LDE2Mzg0LG51bGwsMCxELmUsW10sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSxudWxsLFsiIE91ciBQcm9qZWN0ICJdKSksKHQoKSgpLGkuT2EoMTAsMCxudWxsLDAsNDIsIm1hdC1jYXJkLWNvbnRlbnQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQtY29udGVudCBtYXQtY2FyZC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMTEsMTYzODQsbnVsbCwwLEQuYixbXSxudWxsLG51bGwpLCh0KCkoKSxpLk9hKDEyLDAsbnVsbCxudWxsLDQwLCJkaXYiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEzLDAsbnVsbCxudWxsLDI0LCJkaXYiLFtbImlkIiwiZDNjb250YWluZXIiXSxbInN0eWxlIiwibWFyZ2luOiBhdXRvOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxNCwwLG51bGwsbnVsbCwyMywiOnN2ZzpzdmciLFtbImhlaWdodCIsIjUwMCJdLFsiaWQiLCJkM3RhcmdldCJdLFsic3R5bGUiLCJkaXNwbGF5OiBibG9jazttYXJnaW46IGF1dG87Il0sWyJ3aWR0aCIsIjY3NCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxNSwwLG51bGwsbnVsbCw1LCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwxMDApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE2LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMzAiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiTVRYIl0pKSwodCgpKCksaS5PYSgxOCwwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC01KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiSG9zcGl0YWwgZWZmbHVlbnRzIl0pKSwodCgpKCksaS5PYSgyMCwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNpbnB1dGdhdWdlIl0sWyJzdHlsZSIsImhlaWdodDogMTUwcHg7d2lkdGg6IDE1MHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyMSwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjUwIl0sWyJzdHlsZSIsImZpbGw6IHRyYW5zcGFyZW50OyBzdHJva2U6ICM1YTAwMzZGRjsgc3Ryb2tlLXdpZHRoOiA1cHgiXSxbIndpZHRoIiwiNjc1Il0sWyJ4IiwiMCJdLFsieSIsIjI3MCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgyMiwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB0cmFuc3BhcmVudDsgc3Ryb2tlOiAjNWEwMDM2RkY7IHN0cm9rZS13aWR0aDogNXB4OyJdLFsid2lkdGgiLCIxNTAiXSxbIngiLCIyNTAiXSxbInkiLCIyMDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMjMsMCxudWxsLG51bGwsMCwiOnN2ZzpyZWN0IixbWyJoZWlnaHQiLCI1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjY3NSJdLFsieCIsIjAiXSxbInkiLCIyNzAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMjQsMCxudWxsLG51bGwsMCwiOnN2ZzpyZWN0IixbWyJoZWlnaHQiLCIxNTAiXSxbInN0eWxlIiwiZmlsbDogdXJsKCcjYW5pbWF0ZS1ncmFkaWVudCcpOyJdLFsid2lkdGgiLCIxNTAiXSxbIngiLCIyNTAiXSxbInkiLCIyMDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMjUsMCxudWxsLG51bGwsMCwiOnN2ZzpyZWN0IixbWyJoZWlnaHQiLCIxNTAiXSxbInN0eWxlIiwiZmlsbDogdXJsKCcjYW5pbWF0ZS1ncmFkaWVudCcpOyJdLFsid2lkdGgiLCIxNTAiXSxbIngiLCIyNTAiXSxbInkiLCIyMDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMjYsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNDcwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMjcsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIzMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtMjApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJNVFgiXSkpLCh0KCkoKSxpLk9hKDI5LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJXYXN0ZXdhdGVyIG91dHB1dCJdKSksKHQoKSgpLGkuT2EoMzEsMCxudWxsLG51bGwsMCwiOnN2ZzpnIixbWyJpZCIsImQzb3V0Z2F1Z2UiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNTBweDt3aWR0aDogMTUwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDMyLDAsbnVsbCxudWxsLDUsIjpzdmc6ZyIsW1sidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE4MCwyMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMzMsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTYzKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiQmFjdGVyaWFsIHBvcHVsYXRpb24iXSkpLCh0KCkoKSxpLk9hKDM1LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTAiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQ1LDE3NSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIkJpbW9kYWwgZGlzdHJpYnV0aW9uIl0pKSwodCgpKCksaS5PYSgzNywwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNiaW1vZGFsIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDM4LDAsbnVsbCxudWxsLDE0LCJkaXYiLFtbInN0eWxlIiwicGFkZGluZzogMTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIiBPdXIgcHJvamVjdCBpcyBhIGdlbmVyYWwtcHVycG9zZSBiYWN0ZXJpYWwgcGxhdGZvcm0gZm9yIGRydWcgZGVncmFkYXRpb24uIEFzIGEgcHJvb2Ygb2YgY29uY2VwdCwgd2UgaGF2ZSBjaG9zZW4gdG8gZm9jdXMgb24gdGhlIGN5dG90b3hpYyBkcnVncyB1c2VkIGluIHRoZSB0cmVhdG1lbnQgb2YgY2FuY2VyLCBhcyB0aGVpciBjb25jZW50cmF0aW9ucyBhcmUgYWxhcm1pbmdseSBoaWdoIGluIGhvc3BpdGFsIHdhc3Rld2F0ZXIgZWZmbHVlbnRzLiBUaHJvdWdoIGEgdG9vbGtpdCBvZiBicm9hZC0gYW5kIG5hcnJvdy1zcGVjdHJ1bSBlbnp5bWVzLCB3ZSBhaW0gdG8gYWNoaWV2ZSBjbGVhcmFuY2Ugb2YgdGhlIG1haW4gY2hlbW90aGVyYXBldXRpYyBhZ2VudHMsIGxpa2UgbWV0aG90cmV4YXRlLCA1LWZsdW9yb3VyYWNpbCBvciBkb3hvcnViaWNpbi4gIl0pKSwodCgpKCksaS5PYSg0MCwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoNDEsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWycgV2UgYXJlIHRha2luZyBvbiB0aHJlZSBtYWluIGNoYWxsZW5nZXMgOiBlZmZpY2llbnQgZW50cnkgb2YgdGhlc2UgbW9sZWN1bGVzIGluIHRoZSBiYWN0ZXJpYWwgY2VsbCwgdGhyb3VnaCBjaGFubmVscyBhbmQgdHJhbnNwb3J0ZXJzICh1cmFjaWwtbGlrZSB0cmFuc3BvcnRlciB1cmFBLCBjcnlwdGljIGZvbGF0ZS1hbmFsb2d1ZSB0cmFuc3BvcnRlciBhYmdUIC4uLiksIHByb3BlciBkZWdyYWRhdGlvbiB0aHJvdWdoIG1ldGFib2xpemluZyBlbnp5bWVzIChjYXJib3h5cGVwdGlkYXNlIEcyLCBjeXRvY2hyb21lIFA0NTAgXHUyMDI2KSwgYW5kIGxvbmcgdGVybSBvcGVyYXRpb24gb2YgdGhlIGJpb3JlYWN0b3IgdGhvdWdoIGEgYmlzdGFibGUsICJzdGVtLWNlbGwgbGlrZSIsIHBvcHVsYXRpb24gb2YgYmFjdGVyaWEsIGFsbGV2aWF0aW5nIHRoZSBuZWVkIGZvciByZWd1bGFyIHJlc2VlZGluZyB3aXRoIGZyZXNoIGNsb25lcy4gJ10pKSwodCgpKCksaS5PYSg0MywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoNDQsMCxudWxsLG51bGwsMSwiaDMiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJQcm9qZWN0IHNpZ25pZmljYW5jZSJdKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIiBQaGFybWFjZXV0aWNhbCBkcnVncyBhcmUgYSBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBzb3VyY2Ugb2YgcG9sbHV0aW9uIDogc2VsZWN0ZWQgdG8gYmUgYmlvbG9naWNhbGx5IGFjdGl2ZSBhdCBsb3cgY29uY2VudHJhdGlvbiAmIGRlc2lnbmVkIHRvIHJlc2lzdCBiaW9kZWdyYWRhdGlvbiwgZHJ1Z3MgY29uc3RpdHV0ZSBhIGNsYXNzIG9mIGhpZ2ggcmVtYW5lbmNlIHBvbGx1dGFudHMgcm91dGluZWx5IGZvdW5kIGluIHRoZSBlbnZpcm9ubWVudCwgZXZlbiBpbiBvdXIgZHJpbmtpbmcgd2F0ZXIuICJdKSksKHQoKSgpLGkuT2EoNDcsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDQ4LDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiIFRob3VnaCBwaHlzaWNhbCAmIGNoZW1pY2FsIHNvbHV0aW9ucyBleGlzdCwgaW4gdGhlIGZvcm0gb2Ygb3pvbmUgYW5kIFVWIHRyZWF0bWVudCwgb3VyIHNvbHV0aW9uIGNhbiBvZmZlciB0aGUgZmxleGliaWxpdHkgYW5kIGVmZmljaWVuY3kgb2YgYSBiaW9yZWFjdG9yLWJhc2VkIGFwcHJvYWNoLiAiXSkpLCh0KCkoKSxpLk9hKDUwLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSg1MSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbJyBPdXIgInN0ZW0tY2VsbCBsaWtlIiBhcHByb2FjaCB0byBiYWN0ZXJpYWwgcG9wdWxhdGlvbiBtYWtlcyBpdCBhbiBvcHRpb24gd2l0aCBwb3RlbnRpYWxseSBsb3dlciBvbmdvaW5nIGNvc3RzLCBhbmQgb3VyIGRlZ3JhZGF0aW9uIGVuenltZXMgYWxsb3cgdGFyZ2V0ZWQgZGVncmFkYXRpb24gb2YgcGFydGljdWxhcmx5IHJlc2lsaWVudCBtb2xlY3VsZXMgOiBib3RoIHdlYWtuZXNzZXMgb2YgY29udmVudGlvbmFsIG1ldGhvZHMgb2Ygd2FzdGV3YXRlciB0cmVhdG1lbnQuICddKSldLG51bGwsbnVsbCl9dmFyIGN1PWkuS2EoImRhc2hib2FyZCIsc3UsZnVuY3Rpb24odCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwxLCJkYXNoYm9hcmQiLFtdLG51bGwsbnVsbCxudWxsLGx1LHV1KSksaS5OYSgxLDEwOTc3MjgsbnVsbCwwLHN1LFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKSxmdT1uKCJwdWdUIiksaHU9MCxkdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9vcGVuQ2xvc2VBbGxBY3Rpb25zPW5ldyB2LmEsdGhpcy5pZD0iY2RrLWFjY29yZGlvbi0iK2h1KyssdGhpcy5fbXVsdGk9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGl9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tdWx0aT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuQWxsPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbkNsb3NlQWxsKCEwKX0sdC5wcm90b3R5cGUuY2xvc2VBbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITEpfSx0LnByb3RvdHlwZS5fb3BlbkNsb3NlQWxsPWZ1bmN0aW9uKHQpe3RoaXMubXVsdGkmJnRoaXMuX29wZW5DbG9zZUFsbEFjdGlvbnMubmV4dCh0KX0sdH0oKSxwdT0wLG11PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLmFjY29yZGlvbj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZXhwYW5zaW9uRGlzcGF0Y2hlcj1uLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbj1mdS5hLkVNUFRZLHRoaXMuY2xvc2VkPW5ldyBpLm0sdGhpcy5vcGVuZWQ9bmV3IGkubSx0aGlzLmRlc3Ryb3llZD1uZXcgaS5tLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IGkubSx0aGlzLmlkPSJjZGstYWNjb3JkaW9uLWNoaWxkLSIrcHUrKyx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1mdW5jdGlvbigpe30sdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXI9bi5saXN0ZW4oZnVuY3Rpb24odCxlKXtyLmFjY29yZGlvbiYmIXIuYWNjb3JkaW9uLm11bHRpJiZyLmFjY29yZGlvbi5pZD09PWUmJnIuaWQhPT10JiYoci5leHBhbmRlZD0hMSl9KSx0aGlzLmFjY29yZGlvbiYmKHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbj10aGlzLl9zdWJzY3JpYmVUb09wZW5DbG9zZUFsbEFjdGlvbnMoKSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXhwYW5kZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9LHNldDpmdW5jdGlvbih0KXt0PU9iamVjdChDLmIpKHQpLHRoaXMuX2V4cGFuZGVkIT09dCYmKHRoaXMuX2V4cGFuZGVkPXQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHQpLHQ/KHRoaXMub3BlbmVkLmVtaXQoKSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyLm5vdGlmeSh0aGlzLmlkLHRoaXMuYWNjb3JkaW9uP3RoaXMuYWNjb3JkaW9uLmlkOnRoaXMuaWQpKTp0aGlzLmNsb3NlZC5lbWl0KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMub3BlbmVkLmNvbXBsZXRlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKSx0aGlzLmRlc3Ryb3llZC5lbWl0KCksdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcigpLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITEpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITApfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlVG9PcGVuQ2xvc2VBbGxBY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5hY2NvcmRpb24uX29wZW5DbG9zZUFsbEFjdGlvbnMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuZGlzYWJsZWR8fCh0LmV4cGFuZGVkPWUpfSl9LHR9KCkseXU9ZnVuY3Rpb24oKXt9LGd1PW4oImloWVkiKSx2dT1uKCI0YzM1IiksYnU9bigicDBpYiIpLF91PW4oIlZuRC8iKSx3dT1uKCJ0OWZaIikseHU9bigiWVNoMiIpLE91PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2hpZGVUb2dnbGU9ITEsZS5kaXNwbGF5TW9kZT0iZGVmYXVsdCIsZX1yZXR1cm4gT2JqZWN0KGwuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9T2JqZWN0KEMuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oZHUpLEN1PTAsU3U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIG8uX3ZpZXdDb250YWluZXJSZWY9aSxvLl9oaWRlVG9nZ2xlPSExLG8uX2lucHV0Q2hhbmdlcz1uZXcgdi5hLG8uX2hlYWRlcklkPSJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci0iK0N1Kyssby5hY2NvcmRpb249ZSxvfXJldHVybiBPYmplY3QobC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaGlkZVRvZ2dsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaWRlVG9nZ2xlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faGlkZVRvZ2dsZT1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fZ2V0SGlkZVRvZ2dsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFjY29yZGlvbj90aGlzLmFjY29yZGlvbi5oaWRlVG9nZ2xlOnRoaXMuaGlkZVRvZ2dsZX0sZS5wcm90b3R5cGUuX2hhc1NwYWNpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYWNjb3JkaW9uJiYiZGVmYXVsdCI9PT0odGhpcy5leHBhbmRlZD90aGlzLmFjY29yZGlvbi5kaXNwbGF5TW9kZTp0aGlzLl9nZXRFeHBhbmRlZFN0YXRlKCkpfSxlLnByb3RvdHlwZS5fZ2V0RXhwYW5kZWRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbGF6eUNvbnRlbnQmJnRoaXMub3BlbmVkLnBpcGUoT2JqZWN0KE8uYSkobnVsbCksT2JqZWN0KF91LmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZXhwYW5kZWQmJiF0Ll9wb3J0YWx9KSxPYmplY3Qod3UuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3BvcnRhbD1uZXcgdnUuZCh0Ll9sYXp5Q29udGVudC5fdGVtcGxhdGUsdC5fdmlld0NvbnRhaW5lclJlZil9KX0sZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy5faW5wdXRDaGFuZ2VzLm5leHQodCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUubmdPbkRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9pbnB1dENoYW5nZXMuY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX2JvZHlBbmltYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50LmNsYXNzTGlzdCxuPXQucGhhc2VOYW1lLHI9dC50b1N0YXRlOyJkb25lIj09PW4mJiJleHBhbmRlZCI9PT1yP2UuYWRkKCJtYXQtZXhwYW5kZWQiKToic3RhcnQiPT09biYmImNvbGxhcHNlZCI9PT1yJiZlLnJlbW92ZSgibWF0LWV4cGFuZGVkIil9LGV9KG11KSxFdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLnBhbmVsPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uPWZ1LmEuRU1QVFksdGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uPU9iamVjdChidS5hKSh0Lm9wZW5lZCx0LmNsb3NlZCx0Ll9pbnB1dENoYW5nZXMucGlwZShPYmplY3QoX3UuYSkoZnVuY3Rpb24odCl7cmV0dXJuISghdC5oaWRlVG9nZ2xlJiYhdC5kaXNhYmxlZCl9KSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBpLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLG4ubW9uaXRvcihlLm5hdGl2ZUVsZW1lbnQpfXJldHVybiB0LnByb3RvdHlwZS5fdG9nZ2xlPWZ1bmN0aW9uKCl7dGhpcy5wYW5lbC50b2dnbGUoKX0sdC5wcm90b3R5cGUuX2lzRXhwYW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5leHBhbmRlZH0sdC5wcm90b3R5cGUuX2dldEV4cGFuZGVkU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5fZ2V0RXhwYW5kZWRTdGF0ZSgpfSx0LnByb3RvdHlwZS5fZ2V0UGFuZWxJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLmlkfSx0LnByb3RvdHlwZS5fc2hvd1RvZ2dsZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnBhbmVsLmhpZGVUb2dnbGUmJiF0aGlzLnBhbmVsLmRpc2FibGVkfSx0LnByb3RvdHlwZS5fa2V5ZG93bj1mdW5jdGlvbih0KXtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIHh1Lmo6Y2FzZSB4dS5kOnQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGUoKTticmVhaztkZWZhdWx0OnJldHVybn19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCl9LHR9KCksa3U9ZnVuY3Rpb24oKXt9LFR1PWZ1bmN0aW9uKCl7fSxJdT1mdW5jdGlvbigpe30sQXU9bigiWWxiUSIpLGp1PW4oImxMQVAiKSxQdT1pLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1leHBhbnNpb24tcGFuZWx7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDt0cmFuc2l0aW9uOm1hcmdpbiAyMjVtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1leHBhbnNpb24tcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQubWF0LWV4cGFuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1leHBhbnNpb24tcGFuZWwtYm9keXtwYWRkaW5nOjAgMjRweCAxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luOjE2cHggMH0ubWF0LWFjY29yZGlvbj4ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nOmZpcnN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpmaXJzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLXRvcDowfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6bGFzdC1jaGlsZCwubWF0LWFjY29yZGlvbj46bGFzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLWJvdHRvbTowfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MTZweCA4cHggMTZweCAyNHB4fS5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImJvZHlFeHBhbnNpb24iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjBweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gTXUodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuRmEoMCxudWxsLG51bGwsMCkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIE51KHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKSwodCgpKCksaS5PYSgxLDAsW1siYm9keSIsMV1dLG51bGwsNSwiZGl2IixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCJdLFsicm9sZSIsInJlZ2lvbiJdXSxbWzI0LCJAYm9keUV4cGFuc2lvbiIsMF0sWzEsImFyaWEtbGFiZWxsZWRieSIsMF0sWzgsImlkIiwwXV0sW1tudWxsLCJAYm9keUV4cGFuc2lvbi5kb25lIl0sW251bGwsIkBib2R5RXhwYW5zaW9uLnN0YXJ0Il1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMCxpPXQuY29tcG9uZW50O3JldHVybiJAYm9keUV4cGFuc2lvbi5kb25lIj09PWUmJihyPSExIT09aS5fYm9keUFuaW1hdGlvbihuKSYmciksIkBib2R5RXhwYW5zaW9uLnN0YXJ0Ij09PWUmJihyPSExIT09aS5fYm9keUFuaW1hdGlvbihuKSYmcikscn0sbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMiwwLG51bGwsbnVsbCwzLCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuWGEobnVsbCwxKSwodCgpKCksaS5GYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLE11KSksaS5OYSg1LDIxMjk5MixudWxsLDAsdnUuYSxbaS5qLGkuTl0se3BvcnRhbDpbMCwicG9ydGFsIl19LG51bGwpLGkuWGEobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUuY29tcG9uZW50Ll9wb3J0YWwpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsbi5fZ2V0RXhwYW5kZWRTdGF0ZSgpLG4uX2hlYWRlcklkLG4uaWQpfSl9dmFyIFJ1PWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDI0cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntvdXRsaW5lOjB9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZDpmb2N1cywubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmhvdmVye2JhY2tncm91bmQ6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtjdXJzb3I6cG9pbnRlcn0ubWF0LWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpyb3c7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO21hcmdpbi1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sW2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntmbGV4LWdyb3c6Mn0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAycHggMnB4IDA7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjNweDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImluZGljYXRvclJvdGF0ZSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDBkZWcpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDE4MGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX0se3R5cGU6NyxuYW1lOiJleHBhbnNpb25IZWlnaHQiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7Y29sbGFwc2VkSGVpZ2h0fX0ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp7cGFyYW1zOntjb2xsYXBzZWRIZWlnaHQ6IjQ4cHgifX19LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiJ7e2V4cGFuZGVkSGVpZ2h0fX0ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp7cGFyYW1zOntleHBhbmRlZEhlaWdodDoiNjRweCJ9fX0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6MyxzdGVwczpbe3R5cGU6MTEsc2VsZWN0b3I6IkBpbmRpY2F0b3JSb3RhdGUiLGFuaW1hdGlvbjp7dHlwZTo5LG9wdGlvbnM6bnVsbH0sb3B0aW9uczp7b3B0aW9uYWw6ITB9fSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9XSxvcHRpb25zOm51bGx9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBEdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDAsInNwYW4iLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1pbmRpY2F0b3IiXV0sW1syNCwiQGluZGljYXRvclJvdGF0ZSIsMF1dLG51bGwsbnVsbCxudWxsLG51bGwpKV0sbnVsbCxmdW5jdGlvbih0LGUpe3QoZSwwLDAsZS5jb21wb25lbnQuX2dldEV4cGFuZGVkU3RhdGUoKSl9KX1mdW5jdGlvbiBMdSh0KXtyZXR1cm4gaS5pYigyLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDMsInNwYW4iLFtbImNsYXNzIiwibWF0LWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5YYShudWxsLDApLGkuWGEobnVsbCwxKSxpLlhhKG51bGwsMiksKHQoKSgpLGkuRmEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxEdSkpLGkuTmEoNSwxNjM4NCxudWxsLDAsYS5rLFtpLk4saS5LXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUuY29tcG9uZW50Ll9zaG93VG9nZ2xlKCkpfSxudWxsKX12YXIgRnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxWdT1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPXNpdGVtYXAuY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gVXUodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwzNSwiZGl2IixbWyJpZCIsImdjb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIlNpdGUgbWFwcyJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwzMiwibWF0LWFjY29yZGlvbiIsW1siY2xhc3MiLCJtYXQtYWNjb3JkaW9uIl0sWyJtdWx0aSIsInRydWUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSg0LDE2Mzg0LG51bGwsMCxPdSxbXSx7bXVsdGk6WzAsIm11bHRpIl19LG51bGwpLCh0KCkoKSxpLk9hKDUsMTY3NzcyMTYsbnVsbCxudWxsLDE0LCJtYXQtZXhwYW5zaW9uLXBhbmVsIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwiXV0sW1syLCJtYXQtZXhwYW5kZWQiLG51bGxdLFsyLCJtYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmciLG51bGxdXSxudWxsLG51bGwsTnUsUHUpKSxpLk5hKDYsMTc1MzA4OCxudWxsLDEsU3UsW1szLE91XSxpLmgsQXUuYixpLk5dLG51bGwsbnVsbCksaS5lYigzMzU1NDQzMjAsMSx7X2xhenlDb250ZW50OjB9KSxpLmRiKDI1NixudWxsLE91LHZvaWQgMCxbXSksKHQoKSgpLGkuT2EoOSwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09aS5ZYSh0LDEwKS5fdG9nZ2xlKCkmJnIpLCJrZXlkb3duIj09PWUmJihyPSExIT09aS5ZYSh0LDEwKS5fa2V5ZG93bihuKSYmcikscn0sTHUsUnUpKSxpLk5hKDEwLDE4MDIyNCxudWxsLDAsRXUsW1N1LGkuayxqdS5iLGkuaF0sbnVsbCxudWxsKSxpLmJiKDExLHtjb2xsYXBzZWRIZWlnaHQ6MCxleHBhbmRlZEhlaWdodDoxfSksaS5iYigxMix7dmFsdWU6MCxwYXJhbXM6MX0pLCh0KCkoKSxpLk9hKDEzLDAsbnVsbCwwLDIsIm1hdC1wYW5lbC10aXRsZSIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDE0LDE2Mzg0LG51bGwsMCxUdSxbXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyIgUHJvamVjdCBkZXNpZ24gIl0pKSwodCgpKCksaS5PYSgxNiwwLG51bGwsMSwyLCJtYXQtcGFuZWwtZGVzY3JpcHRpb24iLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5OYSgxNywxNjM4NCxudWxsLDAsa3UsW10sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSxudWxsLFsiIFRoZW9yZXRpY2FsIHVuZGVycGlubmluZyBvZiBvdXIgcHJvamVjdCAiXSkpLCh0KCkoKSxpLmdiKC0xLDEsWyIgQUFBQUFBQUFBQUFhICJdKSksKHQoKSgpLGkuT2EoMjAsMTY3NzcyMTYsbnVsbCxudWxsLDE1LCJtYXQtZXhwYW5zaW9uLXBhbmVsIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwiXV0sW1syLCJtYXQtZXhwYW5kZWQiLG51bGxdLFsyLCJtYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmciLG51bGxdXSxudWxsLG51bGwsTnUsUHUpKSxpLk5hKDIxLDE3NTMwODgsbnVsbCwxLFN1LFtbMyxPdV0saS5oLEF1LmIsaS5OXSxudWxsLG51bGwpLGkuZWIoMzM1NTQ0MzIwLDIse19sYXp5Q29udGVudDowfSksaS5kYigyNTYsbnVsbCxPdSx2b2lkIDAsW10pLCh0KCkoKSxpLk9hKDI0LDAsbnVsbCwwLDksIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIl0sWyJyb2xlIiwiYnV0dG9uIl1dLFtbMSwiaWQiLDBdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtY29udHJvbHMiLDBdLFsxLCJhcmlhLWV4cGFuZGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzQwLCJAZXhwYW5zaW9uSGVpZ2h0IiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT1pLllhKHQsMjUpLl90b2dnbGUoKSYmciksImtleWRvd24iPT09ZSYmKHI9ITEhPT1pLllhKHQsMjUpLl9rZXlkb3duKG4pJiZyKSxyfSxMdSxSdSkpLGkuTmEoMjUsMTgwMjI0LG51bGwsMCxFdSxbU3UsaS5rLGp1LmIsaS5oXSxudWxsLG51bGwpLGkuYmIoMjYse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxpLmJiKDI3LHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLGkuT2EoMjgsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMjksMTYzODQsbnVsbCwwLFR1LFtdLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIiBNYXRlcmlhbCBhbmQgbWV0aG9kICJdKSksKHQoKSgpLGkuT2EoMzEsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuTmEoMzIsMTYzODQsbnVsbCwwLGt1LFtdLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIiBPdXIgZXhwZXJpbWVudGFsIGRlc2lnbnMgJiByZXN1bHRzICJdKSksKHQoKSgpLGkuT2EoMzQsMCxudWxsLDEsMSwicCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIkknbSB2aXNpYmxlIGJlY2F1c2UgSSBhbSBvcGVuIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsNCwwLCJ0cnVlIil9LGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxpLllhKGUsNikuZXhwYW5kZWQsaS5ZYShlLDYpLl9oYXNTcGFjaW5nKCkpLHQoZSw5LDAsaS5ZYShlLDEwKS5wYW5lbC5faGVhZGVySWQsaS5ZYShlLDEwKS5wYW5lbC5kaXNhYmxlZD8tMTowLGkuWWEoZSwxMCkuX2dldFBhbmVsSWQoKSxpLllhKGUsMTApLl9pc0V4cGFuZGVkKCksaS5ZYShlLDEwKS5wYW5lbC5kaXNhYmxlZCxpLllhKGUsMTApLl9pc0V4cGFuZGVkKCksdChlLDEyLDAsaS5ZYShlLDEwKS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLHQoZSwxMSwwLGkuWWEoZSwxMCkuY29sbGFwc2VkSGVpZ2h0LGkuWWEoZSwxMCkuZXhwYW5kZWRIZWlnaHQpKSksdChlLDIwLDAsaS5ZYShlLDIxKS5leHBhbmRlZCxpLllhKGUsMjEpLl9oYXNTcGFjaW5nKCkpLHQoZSwyNCwwLGkuWWEoZSwyNSkucGFuZWwuX2hlYWRlcklkLGkuWWEoZSwyNSkucGFuZWwuZGlzYWJsZWQ/LTE6MCxpLllhKGUsMjUpLl9nZXRQYW5lbElkKCksaS5ZYShlLDI1KS5faXNFeHBhbmRlZCgpLGkuWWEoZSwyNSkucGFuZWwuZGlzYWJsZWQsaS5ZYShlLDI1KS5faXNFeHBhbmRlZCgpLHQoZSwyNywwLGkuWWEoZSwyNSkuX2dldEV4cGFuZGVkU3RhdGUoKSx0KGUsMjYsMCxpLllhKGUsMjUpLmNvbGxhcHNlZEhlaWdodCxpLllhKGUsMjUpLmV4cGFuZGVkSGVpZ2h0KSkpfSl9dmFyIHp1PWkuS2EoImFwcC1zaXRlbWFwIixGdSxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1zaXRlbWFwIixbXSxudWxsLG51bGwsbnVsbCxVdSxWdSkpLGkuTmEoMSwxMTQ2ODgsbnVsbCwwLEZ1LFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksQnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxIdT1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fVxuLyojIHNvdXJjZU1hcHBpbmdVUkw9cHJvamVjdC1kZXRhaWxzLmNvbXBvbmVudC5jc3MubWFwKi8iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIFd1KHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJQcm9qZWN0IGRldGFpbHMiXSkpLCh0KCkoKSxpLk9hKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsUi5kLFIuYSkpLGkuTmEoNCw0OTE1MixudWxsLDAsRC5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIHF1PWkuS2EoImFwcC1wcm9qZWN0LWRldGFpbHMiLEJ1LGZ1bmN0aW9uKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMSwiYXBwLXByb2plY3QtZGV0YWlscyIsW10sbnVsbCxudWxsLG51bGwsV3UsSHUpKSxpLk5hKDEsMTE0Njg4LG51bGwsMCxCdSxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLFl1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksR3U9aS5NYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH1cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWJpb2xvZ3ktc2VjdGlvbi5jb21wb25lbnQuY3NzLm1hcCovIl1dLGRhdGE6e319KTtmdW5jdGlvbiBRdSh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiQmlvbG9neSJdKSksKHQoKSgpLGkuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxSLmQsUi5hKSksaS5OYSg0LDQ5MTUyLG51bGwsMCxELmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgS3U9aS5LYSgiYXBwLWJpb2xvZ3ktc2VjdGlvbiIsWXUsZnVuY3Rpb24odCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtYmlvbG9neS1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxRdSxHdSkpLGkuTmEoMSwxMTQ2ODgsbnVsbCwwLFl1LFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksWnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxYdT1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fVxuLyojIHNvdXJjZU1hcHBpbmdVUkw9Y29tcHV0aW5nLXNlY3Rpb24uY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gJHUodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuZ2IoLTEsbnVsbCxbIk1vZGVsaW5nICYgU29mdHdhcmUiXSkpLCh0KCkoKSxpLk9hKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsUi5kLFIuYSkpLGkuTmEoNCw0OTE1MixudWxsLDAsRC5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIEp1PWkuS2EoImFwcC1jb21wdXRpbmctc2VjdGlvbiIsWnUsZnVuY3Rpb24odCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtY29tcHV0aW5nLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLCR1LFh1KSksaS5OYSgxLDExNDY4OCxudWxsLDAsWnUsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSx0bD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLGVsPWkuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9XG4vKiMgc291cmNlTWFwcGluZ1VSTD1odW1hbi1wcmFjdGljZS1zZWN0aW9uLmNvbXBvbmVudC5jc3MubWFwKi8iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIG5sKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJIdW1hbiBQcmFjdGljZXMiXSkpLCh0KCkoKSxpLk9hKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsUi5kLFIuYSkpLGkuTmEoNCw0OTE1MixudWxsLDAsRC5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIHJsPWkuS2EoImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIix0bCxmdW5jdGlvbih0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxubCxlbCkpLGkuTmEoMSwxMTQ2ODgsbnVsbCwwLHRsLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksaWw9bigiOG1NciIpLG9sPW4oIkZ6cWMiKSxhbD1uKCJXZjRwIiksc2w9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtdG9vbGJhcntvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEgKG1heC13aWR0aDo1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fSJdLGRhdGE6e319KTtmdW5jdGlvbiB1bCh0KXtyZXR1cm4gaS5pYigyLFtpLlhhKG51bGwsMCksaS5YYShudWxsLDEpXSxudWxsLG51bGwpfXZhciBsbD1uKCJidWp0IiksY2w9bigiVW9kSCIpLGZsPW4oIndGdzEiKSxobD1uKCJNcitYIiksZGw9bigiU01zbSIpLHBsPW4oImJuZTUiKSxtbD1uKCJHaTNpIik7ZnVuY3Rpb24geWwodCl7dGhyb3cgRXJyb3IoIkEgZHJhd2VyIHdhcyBhbHJlYWR5IGRlY2xhcmVkIGZvciAncG9zaXRpb249XCIiK3QrIlwiJyIpfXZhciBnbD1uZXcgaS5vKCJNQVRfRFJBV0VSX0RFRkFVTFRfQVVUT1NJWkUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSksdmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9dCx0aGlzLl9jb250YWluZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5DaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9LHR9KCksYmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyxhKXt2YXIgcz10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWUsdGhpcy5fZm9jdXNNb25pdG9yPW4sdGhpcy5fcGxhdGZvcm09cix0aGlzLl9uZ1pvbmU9byx0aGlzLl9kb2M9YSx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1udWxsLHRoaXMuX2VuYWJsZUFuaW1hdGlvbnM9ITEsdGhpcy5fcG9zaXRpb249InN0YXJ0Iix0aGlzLl9tb2RlPSJvdmVyIix0aGlzLl9kaXNhYmxlQ2xvc2U9ITEsdGhpcy5fYXV0b0ZvY3VzPSEwLHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQ9bmV3IGkubSx0aGlzLl9hbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IGkubSghMCksdGhpcy5vblBvc2l0aW9uQ2hhbmdlZD1uZXcgaS5tLHRoaXMuX21vZGVDaGFuZ2VkPW5ldyB2LmEsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXt0PyhzLl9kb2MmJihzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1zLl9kb2MuYWN0aXZlRWxlbWVudCkscy5faXNGb2N1c1RyYXBFbmFibGVkJiZzLl9mb2N1c1RyYXAmJnMuX3RyYXBGb2N1cygpKTpzLl9yZXN0b3JlRm9jdXMoKX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe09iamVjdChwbC5hKShzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImtleWRvd24iKS5waXBlKE9iamVjdChfdS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlDb2RlPT09eHUuZSYmIXMuZGlzYWJsZUNsb3NlfSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3MuY2xvc2UoKSx0LnN0b3BQcm9wYWdhdGlvbigpfSl9KX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBvc2l0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufSxzZXQ6ZnVuY3Rpb24odCl7KHQ9ImVuZCI9PT10PyJlbmQiOiJzdGFydCIpIT10aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3Bvc2l0aW9uPXQsdGhpcy5vblBvc2l0aW9uQ2hhbmdlZC5lbWl0KCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibW9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbW9kZT10LHRoaXMuX21vZGVDaGFuZ2VkLm5leHQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVDbG9zZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xvc2V9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlQ2xvc2U9T2JqZWN0KEMuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhdXRvRm9jdXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0ZvY3VzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXV0b0ZvY3VzPU9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX29wZW5lZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChfdS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdH0pLE9iamVjdCh3LmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkU3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKE9iamVjdChfdS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJjA9PT10LnRvU3RhdGUuaW5kZXhPZigib3BlbiIpfSksT2JqZWN0KHcuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfY2xvc2VkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fSksT2JqZWN0KHcuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjbG9zZWRTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KF91LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZSYmInZvaWQiPT09dC50b1N0YXRlfSksT2JqZWN0KHcuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNGb2N1c1RyYXBFbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkJiYic2lkZSIhPT10aGlzLm1vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3RyYXBGb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5hdXRvRm9jdXMmJnRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCkudGhlbihmdW5jdGlvbihlKXtlfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzfHx0Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfSx0LnByb3RvdHlwZS5fcmVzdG9yZUZvY3VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvRm9jdXMpe3ZhciB0PXRoaXMuX2RvYyYmdGhpcy5fZG9jLmFjdGl2ZUVsZW1lbnQ7dCYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHQpJiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQsdGhpcy5fb3BlbmVkVmlhKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpKSx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1udWxsLHRoaXMuX29wZW5lZFZpYT1udWxsfX0sdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCksdGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkfSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudENoZWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9lbmFibGVBbmltYXRpb25zPSEwKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXAmJnRoaXMuX2ZvY3VzVHJhcC5kZXN0cm95KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29wZW5lZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudG9nZ2xlKE9iamVjdChDLmIpKHQpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRvZ2dsZSghMCx0KX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2dnbGUoITEpfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT10JiYodD0hdGhpcy5vcGVuZWQpLHZvaWQgMD09PWUmJihlPSJwcm9ncmFtIiksdGhpcy5fb3BlbmVkPXQsdD8odGhpcy5fYW5pbWF0aW9uU3RhdGU9dGhpcy5fZW5hYmxlQW5pbWF0aW9ucz8ib3BlbiI6Im9wZW4taW5zdGFudCIsdGhpcy5fb3BlbmVkVmlhPWUpOih0aGlzLl9hbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5fcmVzdG9yZUZvY3VzKCkpLHRoaXMuX2ZvY3VzVHJhcCYmKHRoaXMuX2ZvY3VzVHJhcC5lbmFibGVkPXRoaXMuX2lzRm9jdXNUcmFwRW5hYmxlZCksbmV3IFByb21pc2UoZnVuY3Rpb24odCl7bi5vcGVuZWRDaGFuZ2UucGlwZShPYmplY3Qod3UuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXtyZXR1cm4gdChlPyJvcGVuIjoiY2xvc2UiKX0pfSl9LHQucHJvdG90eXBlLl9vbkFuaW1hdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2FuaW1hdGlvblN0YXJ0ZWQuZW1pdCh0KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uRW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJvbVN0YXRlLG49dC50b1N0YXRlOygwPT09bi5pbmRleE9mKCJvcGVuIikmJiJ2b2lkIj09PWV8fCJ2b2lkIj09PW4mJjA9PT1lLmluZGV4T2YoIm9wZW4iKSkmJnRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodGhpcy5fb3BlbmVkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd2lkdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50JiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxfbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvLGEpe3ZvaWQgMD09PW8mJihvPSExKTt2YXIgcz10aGlzO3RoaXMuX2Rpcj10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLmJhY2tkcm9wQ2xpY2s9bmV3IGkubSx0aGlzLl9kZXN0cm95ZWQ9bmV3IHYuYSx0aGlzLl9kb0NoZWNrU3ViamVjdD1uZXcgdi5hLHRoaXMuX2NvbnRlbnRNYXJnaW5zPXtsZWZ0Om51bGwscmlnaHQ6bnVsbH0sdGhpcy5fY29udGVudE1hcmdpbkNoYW5nZXM9bmV3IHYuYSx0JiZ0LmNoYW5nZS5waXBlKE9iamVjdCh4LmEpKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3MuX3ZhbGlkYXRlRHJhd2VycygpLHMuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCl9KSx0aGlzLl9hdXRvc2l6ZT1vfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZW5kIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9zaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9zaXplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXV0b3NpemU9T2JqZWN0KEMuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNCYWNrZHJvcCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLl9iYWNrZHJvcE92ZXJyaWRlPyF0aGlzLl9zdGFydHx8InNpZGUiIT09dGhpcy5fc3RhcnQubW9kZXx8IXRoaXMuX2VuZHx8InNpZGUiIT09dGhpcy5fZW5kLm1vZGU6dGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2JhY2tkcm9wT3ZlcnJpZGU9bnVsbD09dD9udWxsOk9iamVjdChDLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZHJhd2Vycy5jaGFuZ2VzLnBpcGUoT2JqZWN0KE8uYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3ZhbGlkYXRlRHJhd2VycygpLHQuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll93YXRjaERyYXdlclRvZ2dsZShlKSx0Ll93YXRjaERyYXdlclBvc2l0aW9uKGUpLHQuX3dhdGNoRHJhd2VyTW9kZShlKX0pLCghdC5fZHJhd2Vycy5sZW5ndGh8fHQuX2lzRHJhd2VyT3Blbih0Ll9zdGFydCl8fHQuX2lzRHJhd2VyT3Blbih0Ll9lbmQpKSYmdC5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSx0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RvQ2hlY2tTdWJqZWN0LnBpcGUoT2JqZWN0KG1sLmEpKDEwKSxPYmplY3QoeC5hKSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5fdXBkYXRlQ29udGVudE1hcmdpbnMoKX0pfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2RvQ2hlY2tTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX0sdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3RoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGVuKCl9KX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9kcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvc2UoKX0pfSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2F1dG9zaXplJiZ0aGlzLl9pc1B1c2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5fZG9DaGVja1N1YmplY3QubmV4dCgpfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlclRvZ2dsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QoeC5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpLE9iamVjdChfdS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGV9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpeyJvcGVuLWluc3RhbnQiIT09dC50b1N0YXRlJiYiTm9vcEFuaW1hdGlvbnMiIT09ZS5fYW5pbWF0aW9uTW9kZSYmZS5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1kcmF3ZXItdHJhbnNpdGlvbiIpLGUuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCksZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSwic2lkZSIhPT10Lm1vZGUmJnQub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KHguYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3NldENvbnRhaW5lckNsYXNzKHQub3BlbmVkKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQub25Qb3NpdGlvbkNoYW5nZWQucGlwZShPYmplY3QoeC5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5hc09ic2VydmFibGUoKS5waXBlKE9iamVjdCh3dS5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fdmFsaWRhdGVEcmF3ZXJzKCl9KX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJNb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdC5fbW9kZUNoYW5nZWQucGlwZShPYmplY3QoeC5hKShPYmplY3QoYnUuYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl91cGRhdGVDb250ZW50TWFyZ2lucygpLGUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9LHQucHJvdG90eXBlLl9zZXRDb250YWluZXJDbGFzcz1mdW5jdGlvbih0KXt0P3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtZHJhd2VyLW9wZW5lZCIpOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtZHJhd2VyLW9wZW5lZCIpfSx0LnByb3RvdHlwZS5fdmFsaWRhdGVEcmF3ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGFydD10aGlzLl9lbmQ9bnVsbCx0aGlzLl9kcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7ImVuZCI9PWUucG9zaXRpb24/KG51bGwhPXQuX2VuZCYmeWwoImVuZCIpLHQuX2VuZD1lKToobnVsbCE9dC5fc3RhcnQmJnlsKCJzdGFydCIpLHQuX3N0YXJ0PWUpfSksdGhpcy5fcmlnaHQ9dGhpcy5fbGVmdD1udWxsLHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/KHRoaXMuX2xlZnQ9dGhpcy5fZW5kLHRoaXMuX3JpZ2h0PXRoaXMuX3N0YXJ0KToodGhpcy5fbGVmdD10aGlzLl9zdGFydCx0aGlzLl9yaWdodD10aGlzLl9lbmQpfSx0LnByb3RvdHlwZS5faXNQdXNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX3N0YXJ0KSYmIm92ZXIiIT10aGlzLl9zdGFydC5tb2RlfHx0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fZW5kKSYmIm92ZXIiIT10aGlzLl9lbmQubW9kZX0sdC5wcm90b3R5cGUuX29uQmFja2Ryb3BDbGlja2VkPWZ1bmN0aW9uKCl7dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoKSx0aGlzLl9jbG9zZU1vZGFsRHJhd2VyKCl9LHQucHJvdG90eXBlLl9jbG9zZU1vZGFsRHJhd2VyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztbdGhpcy5fc3RhcnQsdGhpcy5fZW5kXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiFlLmRpc2FibGVDbG9zZSYmdC5fY2FuSGF2ZUJhY2tkcm9wKGUpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLl9pc1Nob3dpbmdCYWNrZHJvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fc3RhcnQpfHx0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fZW5kKSYmdGhpcy5fY2FuSGF2ZUJhY2tkcm9wKHRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9jYW5IYXZlQmFja2Ryb3A9ZnVuY3Rpb24odCl7cmV0dXJuInNpZGUiIT09dC5tb2RlfHwhIXRoaXMuX2JhY2tkcm9wT3ZlcnJpZGV9LHQucHJvdG90eXBlLl9pc0RyYXdlck9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJnQub3BlbmVkfSx0LnByb3RvdHlwZS5fdXBkYXRlQ29udGVudE1hcmdpbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9MCxuPTA7aWYodGhpcy5fbGVmdCYmdGhpcy5fbGVmdC5vcGVuZWQmJigic2lkZSI9PXRoaXMuX2xlZnQubW9kZT9lKz10aGlzLl9sZWZ0Ll93aWR0aDoicHVzaCI9PXRoaXMuX2xlZnQubW9kZSYmKGUrPXI9dGhpcy5fbGVmdC5fd2lkdGgsbi09cikpLHRoaXMuX3JpZ2h0JiZ0aGlzLl9yaWdodC5vcGVuZWQpaWYoInNpZGUiPT10aGlzLl9yaWdodC5tb2RlKW4rPXRoaXMuX3JpZ2h0Ll93aWR0aDtlbHNlIGlmKCJwdXNoIj09dGhpcy5fcmlnaHQubW9kZSl7dmFyIHI7bis9cj10aGlzLl9yaWdodC5fd2lkdGgsZS09cn1lPT09dGhpcy5fY29udGVudE1hcmdpbnMubGVmdCYmbj09PXRoaXMuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0fHwodGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6ZSxyaWdodDpufSx0aGlzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbnRlbnRNYXJnaW5DaGFuZ2VzLm5leHQodC5fY29udGVudE1hcmdpbnMpfSkpfSx0fSgpLHdsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gT2JqZWN0KGwuYikoZSx0KSxlfSh2bCkseGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fZml4ZWRJblZpZXdwb3J0PSExLGUuX2ZpeGVkVG9wR2FwPTAsZS5fZml4ZWRCb3R0b21HYXA9MCxlfXJldHVybiBPYmplY3QobC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRJblZpZXdwb3J0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkSW5WaWV3cG9ydH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkSW5WaWV3cG9ydD1PYmplY3QoQy5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkVG9wR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkVG9wR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRUb3BHYXA9T2JqZWN0KEMuZCkodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZEJvdHRvbUdhcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJvdHRvbUdhcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkQm90dG9tR2FwPU9iamVjdChDLmQpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KGJsKSxPbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGwuYikoZSx0KSxlfShfbCksQ2w9ZnVuY3Rpb24oKXt9LFNsPW4oInFBbFMiKSxFbD1pLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBrbCh0KXtyZXR1cm4gaS5pYigyLFtpLlhhKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIFRsPWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InRyYW5zZm9ybSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToib3Blbiwgb3Blbi1pbnN0YW50IixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwgMCwgMCkiLHZpc2liaWxpdHk6InZpc2libGUifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToidm9pZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnsiYm94LXNoYWRvdyI6Im5vbmUiLHZpc2liaWxpdHk6ImhpZGRlbiJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2b2lkID0+IG9wZW4taW5zdGFudCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMG1zIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPD0+IG9wZW4sIG9wZW4taW5zdGFudCA9PiB2b2lkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiI0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBJbCh0KXtyZXR1cm4gaS5pYigyLFtpLlhhKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIEFsPWkuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRyYXdlci1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl17dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1kcmF3ZXItY29udGFpbmVyW2Z1bGxzY3JlZW5dLm1hdC1kcmF3ZXItb3BlbmVke292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXIubWF0LWRyYXdlci1jb250YWluZXItZXhwbGljaXQtYmFja2Ryb3AgLm1hdC1kcmF3ZXItc2lkZXt6LWluZGV4OjN9Lm1hdC1kcmF3ZXItYmFja2Ryb3B7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt6LWluZGV4OjM7dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bnt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1iYWNrZHJvcHt0cmFuc2l0aW9uLWR1cmF0aW9uOi40czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3IsdmlzaWJpbGl0eX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci1iYWNrZHJvcHtvcGFjaXR5Oi41fX0ubWF0LWRyYXdlci1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1jb250ZW50e3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtLG1hcmdpbi1sZWZ0LG1hcmdpbi1yaWdodH0ubWF0LWRyYXdlcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjQ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt6LWluZGV4OjM7b3V0bGluZTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdy15OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXIsW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1yaWdodDpzb2xpZCAxcHggY3VycmVudENvbG9yfX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZCxbZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IGN1cnJlbnRDb2xvcjtib3JkZXItcmlnaHQ6bm9uZX19Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1zaWRle3otaW5kZXg6Mn0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2Vye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2xlZnQ6MDtyaWdodDphdXRvO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXNpZGVuYXYtZml4ZWR7cG9zaXRpb246Zml4ZWR9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIGpsKHQpe3JldHVybiBpLmliKDAsWyh0KCkoKSxpLk9hKDAsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItYmFja2Ryb3AiXV0sW1syLCJtYXQtZHJhd2VyLXNob3duIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuX29uQmFja2Ryb3BDbGlja2VkKCkmJnIpLHJ9LG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5faXNTaG93aW5nQmFja2Ryb3AoKSl9KX1mdW5jdGlvbiBQbCh0KXtyZXR1cm4gaS5pYigwLFsodCgpKCksaS5PYSgwLDAsbnVsbCxudWxsLDMsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNka1Njcm9sbGFibGUiLCIiXSxbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXV0sW1s0LCJtYXJnaW4tbGVmdCIsInB4Il0sWzQsIm1hcmdpbi1yaWdodCIsInB4Il1dLG51bGwsbnVsbCxrbCxFbCkpLGkuTmEoMSwyMTI5OTIsW1sxLDRdXSwwLFNsLmEsW2kuayxTbC5jLGkueF0sbnVsbCxudWxsKSxpLk5hKDIsMTA5NzcyOCxudWxsLDAsd2wsW2kuaCxPbF0sbnVsbCxudWxsKSxpLlhhKDAsMildLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxpLllhKGUsMikuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMubGVmdCxpLllhKGUsMikuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMucmlnaHQpfSl9ZnVuY3Rpb24gTWwodCl7cmV0dXJuIGkuaWIoMixbaS5lYig2NzEwODg2NDAsMSx7c2Nyb2xsYWJsZTowfSksKHQoKSgpLGkuRmEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxqbCkpLGkuTmEoMiwxNjM4NCxudWxsLDAsYS5rLFtpLk4saS5LXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSxpLlhhKG51bGwsMCksaS5YYShudWxsLDEpLCh0KCkoKSxpLkZhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsUGwpKSxpLk5hKDYsMTYzODQsbnVsbCwwLGEuayxbaS5OLGkuS10se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDIsMCxuLmhhc0JhY2tkcm9wKSx0KGUsNiwwLCFuLl9jb250ZW50KX0sbnVsbCl9dmFyIE5sPW4oIjAvUTYiKSxSbD1uKCJMQzVwIik7bigiZ0ljWSIpO3ZhciBEbD1pLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1kaXZpZGVye2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXRvcDowO2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo4MHB4fVtkaXI9cnRsXSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6ODBweH0ubWF0LXN1YmhlYWRlcntkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTZweDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcnttYXJnaW46MH0ubWF0LWxpc3QsLm1hdC1uYXYtbGlzdCwubWF0LXNlbGVjdGlvbi1saXN0e3BhZGRpbmctdG9wOjhweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb257ZGlzcGxheTpibG9jaztoZWlnaHQ6NDhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNnB4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFye2hlaWdodDo1NnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZXtoZWlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmV7aGVpZ2h0Ojg4cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5le2hlaWdodDphdXRvfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0Pip7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6aW5oZXJpdH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFye2ZsZXgtc2hyaW5rOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NzJweDt3aWR0aDpjYWxjKDEwMCUgLSA3MnB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb257ZmxleC1zaHJpbms6MDt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzo0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY0cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjRweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO21hcmdpbjowfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWxpc3RbZGVuc2VdLC5tYXQtbmF2LWxpc3RbZGVuc2VdLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2Vde3BhZGRpbmctdG9wOjRweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6NzZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2OHB4O3dpZHRoOmNhbGMoMTAwJSAtIDY4cHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Zm9udC1zaXplOjIwcHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjBweDt3aWR0aDpjYWxjKDEwMCUgLSA2MHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjBweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbmF2LWxpc3QgYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0fS5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW17Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5tYXQtbGlzdC1vcHRpb246bm90KC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIExsKHQpe3JldHVybiBpLmliKDIsW2kuWGEobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgRmw9aS5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gVmwodCl7cmV0dXJuIGkuaWIoMixbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCw2LCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0tcmlwcGxlIG1hdC1yaXBwbGUiXSxbIm1hdC1yaXBwbGUiLCIiXV0sW1syLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDIsMjEyOTkyLG51bGwsMCxhbC5xLFtpLmssaS54LHUuYSxbMixhbC5nXSxbMixmbC5hXV0se2Rpc2FibGVkOlswLCJkaXNhYmxlZCJdLHRyaWdnZXI6WzEsInRyaWdnZXIiXX0sbnVsbCksaS5YYShudWxsLDApLCh0KCkoKSxpLk9hKDQsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LXRleHQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5YYShudWxsLDEpLGkuWGEobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLGkuWWEoZSwyKS51bmJvdW5kZWQpfSl9dmFyIFVsPW4oIlpZQ2kiKSx6bD1uKCIyMUxiIiksQmw9bigiT3pmQiIpLEhsPW4oIk1obSsiKSxXbD1pLk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbImJvZHlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyZW19LmZpbGwtdG9vbGJhci1zcGFjZVtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgYXV0b30uc2lkZW5hdi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5zaWRlbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMDBweDtib3gtc2hhZG93OjNweCAwIDZweCByZ2JhKDAsMCwwLC4yNCl9I3NpdGVtYXBidXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3dpZHRoOjEwMCV9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4fSNzaWRlbmF2ZmxleGNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAwcHh9XG4vKiMgc291cmNlTWFwcGluZ1VSTD1hcHAuY29tcG9uZW50LmNzcy5tYXAqLyJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gcWwodCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwxMzAsImRpdiIsW1siY2xhc3MiLCJtYXQtYXBwLWJhY2tncm91bmQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuT2EoMSwwLG51bGwsbnVsbCwxNywibWF0LXRvb2xiYXIiLFtbImNsYXNzIiwibWF0LXRvb2xiYXIiXSxbImNvbG9yIiwiYWNjZW50Il1dLFtbMiwibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsbnVsbF0sWzIsIm1hdC10b29sYmFyLXNpbmdsZS1yb3ciLG51bGxdXSxudWxsLG51bGwsdWwsc2wpKSxpLk5hKDIsNDI0MzQ1NixudWxsLDEsaWwuYSxbaS5rLHUuYSxhLmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksaS5lYig2MDM5Nzk3NzYsMSx7X3Rvb2xiYXJSb3dzOjF9KSwodCgpKCksaS5PYSg0LDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PXQuY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJnIpLHJ9LGxsLmIsbGwuYSkpLGkuTmEoNSwxODAyMjQsbnVsbCwwLGNsLmIsW2kuayx1LmEsanUuYixbMixmbC5hXV0sbnVsbCxudWxsKSwodCgpKCksaS5PYSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNyw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJtZW51Il0pKSwodCgpKCksaS5PYSg5LDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEwLDAsbnVsbCwwLDEsInNwYW4iLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJNZVRocmlYIl0pKSwodCgpKCksaS5PYSgxMiwwLG51bGwsMCwwLCJzcGFuIixbWyJzdHlsZSIsIndpZHRoOjAuMmVtIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDEzLDAsbnVsbCwwLDAsImltZyIsW1sic3JjIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvYy9jMC9ULS1HT19QYXJpcy1TYWNsYXktLWdvLXBzLXdoaXRlLnBuZyJdLFsic3R5bGUiLCJtYXgtaGVpZ2h0OjEwMCU7IHdpZHRoOmF1dG87IHBhZGRpbmc6MWVtOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5PYSgxNCwwLG51bGwsMCwwLCJzcGFuIixbWyJzdHlsZSIsIndpZHRoOjAuMmVtIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDE1LDAsbnVsbCwwLDMsInNwYW4iLFtbInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO2xpbmUtaGVpZ2h0OiA4NSU7IGZvbnQtc2l6ZTogbWVkaXVtOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksaS5nYigtMSxudWxsLFsiVGVhbSBHTyJdKSksKHQoKSgpLGkuT2EoMTcsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLmdiKC0xLG51bGwsWyJQYXJpc1NhY2xheSJdKSksKHQoKSgpLGkuT2EoMTksMCxudWxsLG51bGwsMTExLCJtYXQtc2lkZW5hdi1jb250YWluZXIiLFtbImNsYXNzIiwic2lkZW5hdi1jb250YWluZXIgbWF0LWRyYXdlci1jb250YWluZXIgbWF0LXNpZGVuYXYtY29udGFpbmVyIl1dLFtbMiwibWF0LWRyYXdlci1jb250YWluZXItZXhwbGljaXQtYmFja2Ryb3AiLG51bGxdXSxudWxsLG51bGwsTWwsQWwpKSxpLk5hKDIwLDE0OTA5NDQsbnVsbCwyLE9sLFtbMixvbC5iXSxpLmssaS54LGkuaCxnbCxbMixmbC5hXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwyLHtfZHJhd2VyczoxfSksaS5lYigzMzU1NDQzMjAsMyx7X2NvbnRlbnQ6MH0pLCh0KCkoKSxpLk9hKDIzLDAsbnVsbCwwLDk5LCJtYXQtc2lkZW5hdiIsW1siY2xhc3MiLCJzaWRlbmF2IG1hdC1kcmF3ZXIgbWF0LXNpZGVuYXYiXSxbImZpeGVkSW5WaWV3cG9ydCIsInRydWUiXSxbInRhYkluZGV4IiwiLTEiXV0sW1sxLCJyb2xlIiwwXSxbNDAsIkB0cmFuc2Zvcm0iLDBdLFsxLCJhbGlnbiIsMF0sWzIsIm1hdC1kcmF3ZXItZW5kIixudWxsXSxbMiwibWF0LWRyYXdlci1vdmVyIixudWxsXSxbMiwibWF0LWRyYXdlci1wdXNoIixudWxsXSxbMiwibWF0LWRyYXdlci1zaWRlIixudWxsXSxbMiwibWF0LXNpZGVuYXYtZml4ZWQiLG51bGxdLFs0LCJ0b3AiLCJweCJdLFs0LCJib3R0b20iLCJweCJdXSxbWyJjb21wb25lbnQiLCJAdHJhbnNmb3JtLnN0YXJ0Il0sWyJjb21wb25lbnQiLCJAdHJhbnNmb3JtLmRvbmUiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjb21wb25lbnQ6QHRyYW5zZm9ybS5zdGFydCI9PT1lJiYocj0hMSE9PWkuWWEodCwyNCkuX29uQW5pbWF0aW9uU3RhcnQobikmJnIpLCJjb21wb25lbnQ6QHRyYW5zZm9ybS5kb25lIj09PWUmJihyPSExIT09aS5ZYSh0LDI0KS5fb25BbmltYXRpb25FbmQobikmJnIpLHJ9LElsLFRsKSksaS5OYSgyNCwzMzI1OTUyLFtbMiw0XSxbImRyYXdlciIsNF1dLDAseGwsW2kuayxqdS5jLGp1LmIsdS5hLGkueCxbMixhLmRdXSx7bW9kZTpbMCwibW9kZSJdLG9wZW5lZDpbMSwib3BlbmVkIl0sZml4ZWRJblZpZXdwb3J0OlsyLCJmaXhlZEluVmlld3BvcnQiXX0sbnVsbCksaS5hYigxMzEwNzIsYS5iLFtpLmhdKSxpLmFiKDEzMTA3MixhLmIsW2kuaF0pLCh0KCkoKSxpLk9hKDI3LDAsbnVsbCwwLDksIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsInByaW1hcnkiXSxbInN0eWxlIiwibWFyZ2luLXRvcDogMTVweDsiXV0sW1syLCJtYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dzIixudWxsXSxbMiwibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsbnVsbF1dLG51bGwsbnVsbCx1bCxzbCkpLGkuTmEoMjgsNDI0MzQ1NixudWxsLDEsaWwuYSxbaS5rLHUuYSxhLmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksaS5lYig2MDM5Nzk3NzYsNCx7X3Rvb2xiYXJSb3dzOjF9KSwodCgpKCksaS5nYigtMSwwLFsiTmF2aWdhdGlvbiAiXSkpLCh0KCkoKSxpLk9hKDMxLDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLk9hKDMyLDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PXQuY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJnIpLHJ9LGxsLmIsbGwuYSkpLGkuTmEoMzMsMTgwMjI0LG51bGwsMCxjbC5iLFtpLmssdS5hLGp1LmIsWzIsZmwuYV1dLG51bGwsbnVsbCksKHQoKSgpLGkuT2EoMzQsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSgzNSw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJrZXlib2FyZF9hcnJvd19sZWZ0Il0pKSwodCgpKCksaS5PYSgzNywwLG51bGwsMCw4NSwibWF0LW5hdi1saXN0IixbWyJjbGFzcyIsIm1hdC1uYXYtbGlzdCJdLFsicm9sZSIsIm5hdmlnYXRpb24iXV0sbnVsbCxudWxsLG51bGwsTGwsRGwpKSxpLk5hKDM4LDQ5MTUyLG51bGwsMCxObC5lLFtdLG51bGwsbnVsbCksKHQoKSgpLGkuT2EoMzksMCxudWxsLDAsNywiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMCxvPXQuY29tcG9uZW50O3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuWWEodCw0MCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDQwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmcoIi9kYXNoYm9hcmQiKSYmcikscn0sVmwsRmwpKSxpLk5hKDQwLDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3Niw1LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDYse19hdmF0YXI6MH0pLCh0KCkoKSxpLk9hKDQzLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoNDQsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiZGFzaGJvYXJkIl0pKSwodCgpKCksaS5nYigtMSwyLFsiIE1haW4gcGFnZSJdKSksKHQoKSgpLGkuT2EoNDcsMCxudWxsLDAsNywiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMCxvPXQuY29tcG9uZW50O3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuWWEodCw0OCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDQ4KS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmcoIi9wcm9qZWN0IikmJnIpLHJ9LFZsLEZsKSksaS5OYSg0OCwxMDk3NzI4LG51bGwsMixObC5iLFtpLmssWzIsTmwuZV1dLG51bGwsbnVsbCksaS5lYig2MDM5Nzk3NzYsNyx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCw4LHtfYXZhdGFyOjB9KSwodCgpKCksaS5PYSg1MSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDUyLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImFzc2Vzc21lbnQiXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyIgUHJvamVjdCBkZXRhaWxzIl0pKSwodCgpKCksaS5PYSg1NSwwLG51bGwsMCw3LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdXSxbW251bGwsImNsaWNrIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLG89dC5jb21wb25lbnQ7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDU2KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNTYpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8ucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZygiL2Jpb2xvZ3kiKSYmcikscn0sVmwsRmwpKSxpLk5hKDU2LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3Niw5LHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDEwLHtfYXZhdGFyOjB9KSwodCgpKCksaS5PYSg1OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDYwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImJsdXJfY2lyY3VsYXIiXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyIgQmlvbG9neSJdKSksKHQoKSgpLGkuT2EoNjMsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5ZYSh0LDY0KS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1pLllhKHQsNjQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCw2Nykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxWbCxGbCkpLGkuTmEoNjQsMTA5NzcyOCxudWxsLDIsTmwuYixbaS5rLFsyLE5sLmVdXSxudWxsLG51bGwpLGkuZWIoNjAzOTc5Nzc2LDExLHtfbGluZXM6MX0pLGkuZWIoMzM1NTQ0MzIwLDEyLHtfYXZhdGFyOjB9KSxpLk5hKDY3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSg2OCwxKSwodCgpKCksaS5PYSg2OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxobC5iLGhsLmEpKSxpLk5hKDcwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbIm1lbW9yeSJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBDb21wdXRpbmciXSkpLCh0KCkoKSxpLk9hKDczLDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuWWEodCw3NCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDc0KS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1pLllhKHQsNzcpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sVmwsRmwpKSxpLk5hKDc0LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwxMyx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCwxNCx7X2F2YXRhcjowfSksaS5OYSg3Nyw2NzE3NDQsbnVsbCwwLFVsLmwsW1VsLmssVWwuYSxhLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLGkuWmEoNzgsMSksKHQoKSgpLGkuT2EoNzksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSg4MCw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJhY2Nlc3NpYmlsaXR5X25ldyJdKSksKHQoKSgpLGkuZ2IoLTEsMixbIiBIdW1hbiBQcmFjdGljZXMiXSkpLCh0KCkoKSxpLk9hKDgzLDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuWWEodCw4NCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDg0KS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1pLllhKHQsODcpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sVmwsRmwpKSxpLk5hKDg0LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwxNSx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCwxNix7X2F2YXRhcjowfSksaS5OYSg4Nyw2NzE3NDQsbnVsbCwwLFVsLmwsW1VsLmssVWwuYSxhLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLGkuWmEoODgsMSksKHQoKSgpLGkuT2EoODksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSg5MCw2Mzg5NzYsbnVsbCwwLGRsLmEsW2kuayxkbC5jLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxpLmdiKC0xLDAsWyJwZW9wbGUiXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyIgT3VyIHRlYW0iXSkpLCh0KCkoKSxpLk9hKDkzLDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuWWEodCw5NCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09aS5ZYSh0LDk0KS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1pLllhKHQsOTcpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sVmwsRmwpKSxpLk5hKDk0LDEwOTc3MjgsbnVsbCwyLE5sLmIsW2kuayxbMixObC5lXV0sbnVsbCxudWxsKSxpLmViKDYwMzk3OTc3NiwxNyx7X2xpbmVzOjF9KSxpLmViKDMzNTU0NDMyMCwxOCx7X2F2YXRhcjowfSksaS5OYSg5Nyw2NzE3NDQsbnVsbCwwLFVsLmwsW1VsLmssVWwuYSxhLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLGkuWmEoOTgsMSksKHQoKSgpLGkuT2EoOTksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaGwuYixobC5hKSksaS5OYSgxMDAsNjM4OTc2LG51bGwsMCxkbC5hLFtpLmssZGwuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5nYigtMSwwLFsiZm9sZGVyX3NwZWNpYWwiXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyIgU3VwcG9ydCJdKSksKHQoKSgpLGkuT2EoMTAzLDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuWWEodCwxMDQpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuWWEodCwxMDQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCwxMDcpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sVmwsRmwpKSxpLk5hKDEwNCwxMDk3NzI4LG51bGwsMixObC5iLFtpLmssWzIsTmwuZV1dLG51bGwsbnVsbCksaS5lYig2MDM5Nzk3NzYsMTkse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsMjAse19hdmF0YXI6MH0pLGkuTmEoMTA3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSgxMDgsMSksKHQoKSgpLGkuT2EoMTA5LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoMTEwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImJvb2siXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyJMYWIgTm90ZWJvb2siXSkpLCh0KCkoKSxpLk9hKDExMywwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbImlkIiwic2l0ZW1hcGJ1dCJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PWkuWWEodCwxMTQpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuWWEodCwxMTQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PWkuWWEodCwxMTcpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sVmwsRmwpKSxpLk5hKDExNCwxMDk3NzI4LG51bGwsMixObC5iLFtpLmssWzIsTmwuZV1dLG51bGwsbnVsbCksaS5lYig2MDM5Nzk3NzYsMjEse19saW5lczoxfSksaS5lYigzMzU1NDQzMjAsMjIse19hdmF0YXI6MH0pLGkuTmEoMTE3LDY3MTc0NCxudWxsLDAsVWwubCxbVWwuayxVbC5hLGEuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksaS5aYSgxMTgsMSksKHQoKSgpLGkuT2EoMTE5LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGhsLmIsaGwuYSkpLGkuTmEoMTIwLDYzODk3NixudWxsLDAsZGwuYSxbaS5rLGRsLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuZ2IoLTEsMCxbImFwcHMiXSkpLCh0KCkoKSxpLmdiKC0xLDIsWyIgU2l0ZSBtYXAiXSkpLCh0KCkoKSxpLk9hKDEyMywwLG51bGwsMSw3LCJtYXQtc2lkZW5hdi1jb250ZW50IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItY29udGVudCBtYXQtc2lkZW5hdi1jb250ZW50Il0sWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXRBbGlnbiIsImNlbnRlciJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLGtsLEVsKSksaS5OYSgxMjQsMTA5NzcyOCxbWzMsNF1dLDAsd2wsW2kuaCxPbF0sbnVsbCxudWxsKSxpLk5hKDEyNSw3MzcyODAsbnVsbCwwLHpsLmUsW0JsLmksaS5rLEJsLm1dLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxpLk5hKDEyNiw3MzcyODAsbnVsbCwwLHpsLmQsW0JsLmksaS5rLFs2LHpsLmVdLEJsLm1dLHthbGlnbjpbMCwiYWxpZ24iXX0sbnVsbCksKHQoKSgpLGkuT2EoMTI3LDAsbnVsbCwwLDMsImRpdiIsW1siZnhGbGV4IiwiMSAwIDUwMHB4Il0sWyJpZCIsInNpZGVuYXZmbGV4Y29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDEyOCw3MzcyODAsbnVsbCwwLHpsLmEsW0JsLmksaS5rLFszLHpsLmVdLEJsLm0sQmwuZ10se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLGkuT2EoMTI5LDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk5hKDEzMCwyMTI5OTIsbnVsbCwwLFVsLm4sW1VsLmIsaS5OLGkuaixbOCxudWxsXSxpLmhdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDIsMCwiYWNjZW50IiksdChlLDcsMCksdChlLDIwLDApLHQoZSwyNCwwLGkuaGIoZSwyNCwwLGkuWWEoZSwyNSkudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJvdmVyIjoic2lkZSIsbi5vcGVuZWRTaWRlTmF2LCJ0cnVlIiksdChlLDI4LDAsInByaW1hcnkiKSx0KGUsMzUsMCksdChlLDQ0LDApLHQoZSw1MiwwKSx0KGUsNjAsMCksdChlLDY3LDAsdChlLDY4LDAsIi4uL2NvbXB1dGluZyIpKSx0KGUsNzAsMCksdChlLDc3LDAsdChlLDc4LDAsIi4uL2h1bWFuLXByYWN0aWNlcyIpKSx0KGUsODAsMCksdChlLDg3LDAsdChlLDg4LDAsIi4uL3RlYW0iKSksdChlLDkwLDApLHQoZSw5NywwLHQoZSw5OCwwLCIuLi9zdXBwb3J0IikpLHQoZSwxMDAsMCksdChlLDEwNywwLHQoZSwxMDgsMCwiLi4vbGFibm90ZWJvb2siKSksdChlLDExMCwwKSx0KGUsMTE3LDAsdChlLDExOCwwLCIuLi9zaXRlbWFwIikpLHQoZSwxMjAsMCksdChlLDEyNSwwLCJyb3ciKSx0KGUsMTI2LDAsImNlbnRlciIpLHQoZSwxMjgsMCwiMSAwIDUwMHB4IiksdChlLDEzMCwwKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLGkuWWEoZSwyKS5fdG9vbGJhclJvd3MubGVuZ3RoLCFpLllhKGUsMikuX3Rvb2xiYXJSb3dzLmxlbmd0aCksdChlLDQsMCxpLllhKGUsNSkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PWkuWWEoZSw1KS5fYW5pbWF0aW9uTW9kZSksdChlLDYsMCxpLllhKGUsNykuaW5saW5lKSx0KGUsMTksMCxpLllhKGUsMjApLl9iYWNrZHJvcE92ZXJyaWRlKSx0KGUsMjMsMCxpLmhiKGUsMjMsMCxpLllhKGUsMjYpLnRyYW5zZm9ybShuLmlzSGFuZHNldCQpKT8iZGlhbG9nIjoibmF2aWdhdGlvbiIsaS5ZYShlLDI0KS5fYW5pbWF0aW9uU3RhdGUsbnVsbCwiZW5kIj09PWkuWWEoZSwyNCkucG9zaXRpb24sIm92ZXIiPT09aS5ZYShlLDI0KS5tb2RlLCJwdXNoIj09PWkuWWEoZSwyNCkubW9kZSwic2lkZSI9PT1pLllhKGUsMjQpLm1vZGUsaS5ZYShlLDI0KS5maXhlZEluVmlld3BvcnQsaS5ZYShlLDI0KS5maXhlZEluVmlld3BvcnQ/aS5ZYShlLDI0KS5maXhlZFRvcEdhcDpudWxsLGkuWWEoZSwyNCkuZml4ZWRJblZpZXdwb3J0P2kuWWEoZSwyNCkuZml4ZWRCb3R0b21HYXA6bnVsbCksdChlLDI3LDAsaS5ZYShlLDI4KS5fdG9vbGJhclJvd3MubGVuZ3RoLCFpLllhKGUsMjgpLl90b29sYmFyUm93cy5sZW5ndGgpLHQoZSwzMiwwLGkuWWEoZSwzMykuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PWkuWWEoZSwzMykuX2FuaW1hdGlvbk1vZGUpLHQoZSwzNCwwLGkuWWEoZSwzNSkuaW5saW5lKSx0KGUsMzksMCxpLllhKGUsNDApLl9hdmF0YXIsaS5ZYShlLDQwKS5fYXZhdGFyKSx0KGUsNDMsMCxpLllhKGUsNDQpLmlubGluZSksdChlLDQ3LDAsaS5ZYShlLDQ4KS5fYXZhdGFyLGkuWWEoZSw0OCkuX2F2YXRhciksdChlLDUxLDAsaS5ZYShlLDUyKS5pbmxpbmUpLHQoZSw1NSwwLGkuWWEoZSw1NikuX2F2YXRhcixpLllhKGUsNTYpLl9hdmF0YXIpLHQoZSw1OSwwLGkuWWEoZSw2MCkuaW5saW5lKSx0KGUsNjMsMCxpLllhKGUsNjQpLl9hdmF0YXIsaS5ZYShlLDY0KS5fYXZhdGFyLGkuWWEoZSw2NykudGFyZ2V0LGkuWWEoZSw2NykuaHJlZiksdChlLDY5LDAsaS5ZYShlLDcwKS5pbmxpbmUpLHQoZSw3MywwLGkuWWEoZSw3NCkuX2F2YXRhcixpLllhKGUsNzQpLl9hdmF0YXIsaS5ZYShlLDc3KS50YXJnZXQsaS5ZYShlLDc3KS5ocmVmKSx0KGUsNzksMCxpLllhKGUsODApLmlubGluZSksdChlLDgzLDAsaS5ZYShlLDg0KS5fYXZhdGFyLGkuWWEoZSw4NCkuX2F2YXRhcixpLllhKGUsODcpLnRhcmdldCxpLllhKGUsODcpLmhyZWYpLHQoZSw4OSwwLGkuWWEoZSw5MCkuaW5saW5lKSx0KGUsOTMsMCxpLllhKGUsOTQpLl9hdmF0YXIsaS5ZYShlLDk0KS5fYXZhdGFyLGkuWWEoZSw5NykudGFyZ2V0LGkuWWEoZSw5NykuaHJlZiksdChlLDk5LDAsaS5ZYShlLDEwMCkuaW5saW5lKSx0KGUsMTAzLDAsaS5ZYShlLDEwNCkuX2F2YXRhcixpLllhKGUsMTA0KS5fYXZhdGFyLGkuWWEoZSwxMDcpLnRhcmdldCxpLllhKGUsMTA3KS5ocmVmKSx0KGUsMTA5LDAsaS5ZYShlLDExMCkuaW5saW5lKSx0KGUsMTEzLDAsaS5ZYShlLDExNCkuX2F2YXRhcixpLllhKGUsMTE0KS5fYXZhdGFyLGkuWWEoZSwxMTcpLnRhcmdldCxpLllhKGUsMTE3KS5ocmVmKSx0KGUsMTE5LDAsaS5ZYShlLDEyMCkuaW5saW5lKSx0KGUsMTIzLDAsaS5ZYShlLDEyNCkuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMubGVmdCxpLllhKGUsMTI0KS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX12YXIgWWw9aS5LYSgiYXBwLXJvb3QiLE0sZnVuY3Rpb24odCl7cmV0dXJuIGkuaWIoMCxbKHQoKSgpLGkuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtcm9vdCIsW10sbnVsbCxudWxsLG51bGwscWwsV2wpKSxpLk5hKDEsMTE0Njg4LG51bGwsMCxNLFtULFVsLmssSGwuYV0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxHbD1uKCJaWWp0IiksUWw9bigiTlNZTCIpLEtsPW4oImVEa1AiKSxabD1uKCJtVnNhIiksWGw9bigidC9OYSIpLCRsPW4oImFlY2QiKSxKbD1uKCJoVVdQIiksdGM9bigiM3BKUSIpLGVjPW4oIlY5cSsiKSxuYz1uKCIwL3VRIikscmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5yb3V0ZXI9dCx0aGlzLmNodW5rTG9hZGVyPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbkFjdGl2YXRlPWZ1bmN0aW9uKHQsZSl7aWYoMD09by5hLnByb2R1Y3Rpb24pcmV0dXJuIE9iamVjdChuYy5hKShuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3QoITApfSkpO3ZhciBuPWUudXJsO3JldHVybiBjb25zb2xlLmxvZygiQ2h1bmtHdWFyZCA6ICIrbiksdGhpcy5jaHVua0xvYWRlci5hc3luY0xvYWRQYWdlQ2h1bmsobil9LHQubmdJbmplY3RhYmxlRGVmPWkuUih7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChpLlYoVWwuayksaS5WKEhsLmEpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksaWM9ZnVuY3Rpb24oKXt9LG9jPW4oInBaaE0iKSxhYz1pLkxhKHMsW01dLGZ1bmN0aW9uKHQpe3JldHVybiBpLlZhKFtpLldhKDUxMixpLmosaS5BYSxbWzgsW04uYSxjdSx6dSxxdSxLdSxKdSxybCxZbF1dLFszLGkual0saS52XSksaS5XYSg1MTIwLGkucyxpLkphLFtbMyxpLnNdXSksaS5XYSg0NjA4LGEubSxhLmwsW2kucyxbMixhLnRdXSksaS5XYSg1MTIwLGkucSxpLkhhLFtdKSxpLldhKDUxMjAsaS5yLGkuSWEsW10pLGkuV2EoNDYwOCxHbC5jLEdsLnIsW2EuZF0pLGkuV2EoNjE0NCxpLkUsbnVsbCxbR2wuY10pLGkuV2EoNDYwOCxHbC5mLEdsLmcsW10pLGkuV2EoNTEyMCxHbC5kLGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEpe3JldHVybltuZXcgR2wuayh0LGUsbiksbmV3IEdsLm8ociksbmV3IEdsLm4oaSxvLGEpXX0sW2EuZCxpLngsWzIsaS56XSxhLmQsYS5kLEdsLmYsaS5CYV0pLGkuV2EoNDYwOCxHbC5lLEdsLmUsW0dsLmQsaS54XSksaS5XYSgxMzU2ODAsR2wubSxHbC5tLFthLmRdKSxpLldhKDQ2MDgsR2wubCxHbC5sLFtHbC5lLEdsLm1dKSxpLldhKDUxMjAsUWwuYSxmbC5lLFtdKSxpLldhKDUxMjAsUWwuYyxmbC5mLFtdKSxpLldhKDQ2MDgsUWwuYixmbC5kLFthLmQsUWwuYSxRbC5jXSksaS5XYSg1MTIwLGkuQyxmbC5nLFtHbC5sLFFsLmIsaS54XSksaS5XYSg2MTQ0LEdsLnAsbnVsbCxbR2wubV0pLGkuV2EoNDYwOCxpLkwsaS5MLFtpLnhdKSxpLldhKDQ2MDgsR2wuaCxHbC5oLFthLmRdKSxpLldhKDQ2MDgsR2wuaSxHbC5pLFthLmRdKSxpLldhKDQ2MDgsZ3UuYixmbC5jLFtpLkMsR2wuYl0pLGkuV2EoNDYwOCxCbC5rLEJsLmosW0JsLmQsQmwuaF0pLGkuV2EoNTEyMCxVbC5oLFVsLkEsW1VsLnldKSxpLldhKDUxMjAsaS5iLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bQmwubih0LGUpLG5dfSxbYS5kLGkueixVbC5oXSksaS5XYSg1MTIwLFVsLmEsVWwueCxbVWwua10pLGkuV2EoNDYwOCxVbC5kLFVsLmQsW10pLGkuV2EoNjE0NCxVbC5mLG51bGwsW1VsLmRdKSxpLldhKDEzNTY4MCxVbC5vLFVsLm8sW1VsLmssaS51LGkuaSxpLnAsVWwuZl0pLGkuV2EoNDYwOCxVbC5lLFVsLmUsW10pLGkuV2EoNDYwOCxLbC5hLEtsLmEsW0tsLmcsS2wuYyxpLmosS2wuZixLbC5kLGkucCxpLngsYS5kLG9sLmJdKSxpLldhKDUxMjAsS2wuaCxLbC5pLFtLbC5hXSksaS5XYSg1MTIwLFpsLmEsWmwuYyxbS2wuYV0pLGkuV2EoNDYwOCxYbC5oLFhsLm4sW2EuZCxpLnosWGwubF0pLGkuV2EoNDYwOCxYbC5vLFhsLm8sW1hsLmgsWGwubV0pLGkuV2EoNTEyMCxYbC5hLGZ1bmN0aW9uKHQpe3JldHVyblt0XX0sW1hsLm9dKSxpLldhKDEwNzM3NDIzMzYsYS5jLGEuYyxbXSksaS5XYSgxMDI0LGkubCxHbC5xLFtdKSxpLldhKDEwMjQsaS53LGZ1bmN0aW9uKCl7cmV0dXJuW1VsLnQoKV19LFtdKSxpLldhKDUxMixVbC55LFVsLnksW2kucF0pLGkuV2EoNTEyLFhsLmssWGwuayxbXSksaS5XYSgyMDQ4LFhsLmksbnVsbCxbWGwua10pLGkuV2EoNTEyLFhsLmcsWGwuZyxbWGwuaV0pLGkuV2EoMjA0OCxYbC5iLG51bGwsW1hsLmddKSxpLldhKDUxMixYbC5mLFhsLmosW1hsLmIsaS5wXSksaS5XYSg1MTIsWGwuYyxYbC5jLFtYbC5mXSksaS5XYSg1MTIsJGwuYSwkbC5hLFtYbC5jXSksaS5XYSgxMDI0LGkuZCxmdW5jdGlvbih0LGUsbil7cmV0dXJuW0dsLnModCksVWwueihlKSwocj1uLGZ1bmN0aW9uKCl7cmV0dXJuIHIubG9hZFBhZ2VBdEluaXQoKX0pXTt2YXIgcn0sW1syLGkud10sVWwueSwkbC5hXSksaS5XYSg1MTIsaS5lLGkuZSxbWzIsaS5kXV0pLGkuV2EoMTMxNTg0LGkuZyxpLmcsW2kueCxpLkJhLGkucCxpLmwsaS5qLGkuZV0pLGkuV2EoMTA3Mzc0MjMzNixpLmYsaS5mLFtpLmddKSxpLldhKDEwNzM3NDIzMzYsR2wuYSxHbC5hLFtbMyxHbC5hXV0pLGkuV2EoMTA3Mzc0MjMzNixmbC5iLGZsLmIsW10pLGkuV2EoMTA3Mzc0MjMzNixvbC5hLG9sLmEsW10pLGkuV2EoMTA3Mzc0MjMzNixhbC5oLGFsLmgsW1syLGFsLmJdXSksaS5XYSgxMDczNzQyMzM2LGlsLmIsaWwuYixbXSksaS5XYSgxMDczNzQyMzM2LHUuYix1LmIsW10pLGkuV2EoMTA3Mzc0MjMzNixhbC5yLGFsLnIsW10pLGkuV2EoMTA3Mzc0MjMzNixjbC5jLGNsLmMsW10pLGkuV2EoMTA3Mzc0MjMzNixTbC5iLFNsLmIsW10pLGkuV2EoMTA3Mzc0MjMzNixDbCxDbCxbXSksaS5XYSgxMDczNzQyMzM2LGRsLmIsZGwuYixbXSksaS5XYSgxMDczNzQyMzM2LGFsLmksYWwuaSxbXSksaS5XYSgxMDczNzQyMzM2LGFsLnAsYWwucCxbXSksaS5XYSgxMDczNzQyMzM2LFJsLmEsUmwuYSxbXSksaS5XYSgxMDczNzQyMzM2LE5sLmMsTmwuYyxbXSksaS5XYSgxMDczNzQyMzM2LHl1LHl1LFtdKSxpLldhKDEwNzM3NDIzMzYsdnUuYyx2dS5jLFtdKSxpLldhKDEwNzM3NDIzMzYsSXUsSXUsW10pLGkuV2EoMTA3Mzc0MjMzNixCbC5lLEJsLmUsW10pLGkuV2EoMTA3Mzc0MjMzNix6bC5jLHpsLmMsW10pLGkuV2EoMTA3Mzc0MjMzNixKbC5hLEpsLmEsW10pLGkuV2EoMTA3Mzc0MjMzNix0Yy5hLHRjLmEsW10pLGkuV2EoMTA3Mzc0MjMzNixlYy5hLGVjLmEsW1syLEJsLmxdLGkuel0pLGkuV2EoMTAyNCxVbC5zLFVsLnYsW1szLFVsLmtdXSksaS5XYSg1MTIsVWwucSxVbC5jLFtdKSxpLldhKDUxMixVbC5iLFVsLmIsW10pLGkuV2EoMjU2LFVsLmcse3VzZUhhc2g6ITB9LFtdKSxpLldhKDEwMjQsYS5oLFVsLnUsW2EucCxbMixhLmFdLFVsLmddKSxpLldhKDUxMixhLmcsYS5nLFthLmhdKSxpLldhKDUxMixpLmksaS5pLFtdKSxpLldhKDUxMixpLnUsaS5JLFtpLmksWzIsaS5KXV0pLGkuV2EoMTAyNCxVbC5pLGZ1bmN0aW9uKCl7cmV0dXJuW1t7cGF0aDoiZGFzaGJvYXJkIixjb21wb25lbnQ6c3UsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6InNpdGVtYXAiLGNvbXBvbmVudDpGdSxjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoibGFibm90ZWJvb2svOnBhZ2VwYXRoIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6ImxhYm5vdGVib29rIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6InRlYW0iLGxvYWRDaGlsZHJlbjoiLi90ZWFtLXJvc3Rlci90ZWFtLXJvc3Rlci1sYXllci5tb2R1bGUjVGVhbVJvc3RlckxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoicHJvamVjdCIsY29tcG9uZW50OkJ1LGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJiaW9sb2d5Iixjb21wb25lbnQ6WXUsY2FuQWN0aXZhdGU6W3JjXX0se3BhdGg6ImNvbXB1dGluZyIsY29tcG9uZW50Olp1LGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiJodW1hbi1wcmFjdGljZXMiLGNvbXBvbmVudDp0bCxjYW5BY3RpdmF0ZTpbcmNdfSx7cGF0aDoic3VwcG9ydCIsbG9hZENoaWxkcmVuOiIuL3N1cHBvcnQtc2VjdGlvbi9zdXBwb3J0LXNlY3Rpb24tbGF5ZXIubW9kdWxlI1N1cHBvcnRTZWN0aW9uTGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOltyY119LHtwYXRoOiIiLHJlZGlyZWN0VG86ImRhc2hib2FyZCIscGF0aE1hdGNoOiJmdWxsIn1dXX0sW10pLGkuV2EoMTAyNCxVbC5rLFVsLncsW2kuZyxVbC5xLFVsLmIsYS5nLGkucCxpLnUsaS5pLFVsLmksVWwuZyxbMixVbC5wXSxbMixVbC5qXV0pLGkuV2EoMTA3Mzc0MjMzNixVbC5tLFVsLm0sW1syLFVsLnNdLFsyLFVsLmtdXSksaS5XYSgxMDczNzQyMzM2LGljLGljLFtdKSxpLldhKDEwNzM3NDIzMzYsRC5kLEQuZCxbXSksaS5XYSgxMDczNzQyMzM2LEtsLmUsS2wuZSxbXSksaS5XYSgxMDczNzQyMzM2LFpsLmIsWmwuYixbXSksaS5XYSgxMDczNzQyMzM2LFhsLmUsWGwuZSxbXSksaS5XYSgxMDczNzQyMzM2LFhsLmQsWGwuZCxbXSksaS5XYSgxMDczNzQyMzM2LG9jLmEsb2MuYSxbXSksaS5XYSgxMDI0LGkuYyxpLkdhLFtdKSxpLldhKDEwNzM3NDIzMzYscyxzLFtpLnosaS5jXSksaS5XYSgyNTYsaS5aLCEwLFtdKSxpLldhKDI1NixmbC5hLCJCcm93c2VyQW5pbWF0aW9ucyIsW10pLGkuV2EoMjU2LFhsLmwsIlhTUkYtVE9LRU4iLFtdKSxpLldhKDI1NixYbC5tLCJYLVhTUkYtVE9LRU4iLFtdKV0pfSk7by5hLnByb2R1Y3Rpb24mJk9iamVjdChpLlMpKCksR2wuaigpLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkoYWMpLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLmxvZyh0KX0pfSx6b3RtOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnBhcmVudD1lLGkub3V0ZXJWYWx1ZT1uLGkub3V0ZXJJbmRleD1yLGkuaW5kZXg9MCxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudC5ub3RpZnlOZXh0KHRoaXMub3V0ZXJWYWx1ZSx0LHRoaXMub3V0ZXJJbmRleCx0aGlzLmluZGV4KyssdGhpcyl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0aGlzLnBhcmVudC5ub3RpZnlFcnJvcih0LHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnQubm90aWZ5Q29tcGxldGUodGhpcyksdGhpcy51bnN1YnNjcmliZSgpfSxlfShuKCJGRk9vIikuYSksbz1uKCJGeGIxIik7ZnVuY3Rpb24gYSh0LGUsbixyKXt2YXIgYT1uZXcgaSh0LG4scik7cmV0dXJuIE9iamVjdChvLmEpKGUpKGEpfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSl9fSxbWzQsM11dXSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW1haW4uanMubWFw");eval(base64script); </script>
  
  
Line 21: Line 20:
 
<script>
 
<script>
 
setTimeout(function(){
 
setTimeout(function(){
    $(".body").append($("#bigmaindiv"));
+
$(".body").append($("#bigmaindiv"));
 
+
 
$('#top_title').remove();
 
$('#top_title').remove();
$('#bigmaindiv').insertBefore('#content'); }, 2000);
+
$('#bigmaindiv').insertBefore('#content');
 +
}, 2000);
 
</script>
 
</script>
 
<style>
 
<style>

Revision as of 09:05, 15 July 2018