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

Line 1: Line 1:
+
Loading, please wait...
 
<html>
 
<html>
 
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
 
 
   <meta charset="utf-8">
 
   <meta charset="utf-8">
  
Line 15: Line 12:
 
<app-root></app-root>
 
<app-root></app-root>
 
</div>
 
</div>
<link rel="stylesheet" href="data:text/css;base64,Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojNjczYWI3O2NhcmV0LWNvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZmQ3NDB9Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QxYzRlOX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNTdmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZjZGQyfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6IzY3M2FiNztzdHJva2U6IzYyMDAzY30ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmZkNzQwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSwtd2Via2l0LXRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciwuY2RrLW92ZXJsYXktY29udGFpbmVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjg4KX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydDthbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5ne2hlaWdodDphdXRvIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MnB4IDAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ghaW1wb3J0YW50fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6IzYyMDAzY30ubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojOTYxZTY0fS5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmY2ZTQwfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojZmFmYWZhfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojOTYxZTY0fS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6IzYyMDAzY30ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZmNmU0MH0ubWF0LWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYmFkZ2UtaGlkZGVuIC5tYXQtYmFkZ2UtY29udGVudHtkaXNwbGF5Om5vbmV9Lm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNjIwMDNjO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQsLXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC42KTt0cmFuc2Zvcm06c2NhbGUoLjYpO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztwb2ludGVyLWV2ZW50czpub25lfS5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZley13ZWJraXQtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDo4cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6MCAwfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xMil9Lm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4xMil9Lm1hdC1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMSl9Lm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mYWIubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1mYWIubWF0LXdhcm4sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMil9Lm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMil9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmFmYWZhfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmYWZhZmEhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94Om5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7b3BhY2l0eTouNDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9bWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvdyx0ZC5tYXQtY2VsbCx0ZC5tYXQtZm9vdGVyLWNlbGwsdGgubWF0LWhlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNhbGVuZGFyLWFycm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24sLm1hdC1kYXRlcGlja2VyLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpLC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiM2MjAwM2N9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1oaW50e2NvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1lcnJvcntjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNDIpIDAscmdiYSgwLDAsMCwuNDIpIDMzJSx0cmFuc3BhcmVudCAwKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2JvdHRvbToxLjM0Mzc1ZW07Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjZlNDB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWxpc3QtaXRlbS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOjAgMDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbjpub3QoW2NvbG9yXSksLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZDBiM2M1fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZTBiY2QxfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjY2JjfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojOTYxZTY0fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2ZmNmU0MH0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MjAwM2N9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY2ZTQwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4yNil9Lm1hdC1zZWxlY3QtY29udGVudCwubWF0LXNlbGVjdC1wYW5lbC1kb25lLWFuaW1hdGluZ3tiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdywubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnk6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmNTcyMn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsODcsMzQsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC4xMil9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC43KSxyZ2JhKDAsMCwwLC43KSAycHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoLjAwMDFkZWcscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1ub3QtdG91Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOCwxNzksMTk3LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMjQsMTg4LDIwOSwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOCwxNzksMTk3LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNCwxODgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3MsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC10b29sYmFye2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjppbmhlcml0fS5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiMzMjMyMzI7Y29sb3I6I2ZmZn0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6Izk2MWU2NH0jSFFfcGFnZSBoMntiYWNrZ3JvdW5kLWNvbG9yOiM3YTI2NTk7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfSNIUV9wYWdlICN0b2N0aXRsZSBoMntiYWNrZ3JvdW5kLWNvbG9yOnVuc2V0O2NvbG9yOnVuc2V0O2JhY2tncm91bmQtc2l6ZToxMDAlIGF1dG99LmF4aXMtLXggLmRvbWFpbiwuYXhpcy0teSAuZG9tYWlue2Rpc3BsYXk6bm9uZX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXgtYmFzaXM6MH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OlJvYm90bztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8yLzI2L1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzAvMGIvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL0ZpbGU6VC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL0ZpbGU6VC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuc3ZnI1JvYm90bykgZm9ybWF0KCJzdmciKX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5Ok1hdGVyaWFsSWNvbnMtUmVndWxhcjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDB9QGZvbnQtZmFjZXtmb250LWZhbWlseTonTWF0ZXJpYWwgSWNvbnMnO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzUvNTEvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuZW90KTtzcmM6bG9jYWwoIlJvYm90byIpLGxvY2FsKCJSb2JvdG8tUmVndWxhciIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdD8jaWVmaXgpIGZvcm1hdCgiZW1iZWRkZWQtb3BlbnR5cGUiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yOC9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci53b2ZmKSBmb3JtYXQoIndvZmYiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMS8xZS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci50dGYpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMy8zZi9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5zdmcjTWF0ZXJpYWxJY29ucy1SZWd1bGFyKSBmb3JtYXQoInN2ZyIpfS5tYXRlcmlhbC1pY29uc3tmb250LWZhbWlseTonTWF0ZXJpYWwgSWNvbnMnO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDoxO2xldHRlci1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt3b3JkLXdyYXA6bm9ybWFsO2RpcmVjdGlvbjpsdHI7LW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6J2xpZ2EnOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX1oMSxoMixoMyxoNCxoNSxoNntib3JkZXItYm90dG9tOjB9">
 
  
<script>var base64script = atob("IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGEsaT1yWzBdLGM9clsxXSxsPXJbMl0scD0wLGY9W107cDxpLmxlbmd0aDtwKyspb1thPWlbcF1dJiZmLnB1c2gob1thXVswXSksb1thXT0wO2ZvcihuIGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbikmJihlW25dPWNbbl0pO2ZvcihzJiZzKHIpO2YubGVuZ3RoOylmLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsbHx8W10pLHQoKX1mdW5jdGlvbiB0KCl7Zm9yKHZhciBlLHI9MDtyPHUubGVuZ3RoO3IrKyl7Zm9yKHZhciB0PXVbcl0sbj0hMCxpPTE7aTx0Lmxlbmd0aDtpKyspMCE9PW9bdFtpXV0mJihuPSExKTtuJiYodS5zcGxpY2Uoci0tLDEpLGU9YShhLnM9dFswXSkpfXJldHVybiBlfXZhciBuPXt9LG89ezE6MH0sdT1bXTtmdW5jdGlvbiBhKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgdD1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxhKSx0Lmw9ITAsdC5leHBvcnRzfWEuZT1mdW5jdGlvbihlKXt2YXIgcj1bXSx0PW9bZV07aWYoMCE9PXQpaWYodClyLnB1c2godFsyXSk7ZWxzZXt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3Q9b1tlXT1bcixuXX0pO3IucHVzaCh0WzJdPW4pO3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0saT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpLmNoYXJzZXQ9InV0Zi04IixpLnRpbWVvdXQ9MTIwLGEubmMmJmkuc2V0QXR0cmlidXRlKCJub25jZSIsYS5uYyksaS5zcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEucCsiIisoe31bZV18fGUpKyIuIit7MDoiOTkyYTNkYjhhMDA3MWUyOWNjNjkifVtlXSsiLmpzIn0oZSk7dmFyIGM9c2V0VGltZW91dChmdW5jdGlvbigpe2woe3R5cGU6InRpbWVvdXQiLHRhcmdldDppfSl9LDEyZTQpO2Z1bmN0aW9uIGwocil7aS5vbmVycm9yPWkub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KGMpO3ZhciB0PW9bZV07aWYoMCE9PXQpe2lmKHQpe3ZhciBuPXImJigibG9hZCI9PT1yLnR5cGU/Im1pc3NpbmciOnIudHlwZSksdT1yJiZyLnRhcmdldCYmci50YXJnZXQuc3JjLGE9bmV3IEVycm9yKCJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC5cbigiK24rIjogIit1KyIpIik7YS50eXBlPW4sYS5yZXF1ZXN0PXUsdFsxXShhKX1vW2VdPXZvaWQgMH19aS5vbmVycm9yPWkub25sb2FkPWwsdS5hcHBlbmRDaGlsZChpKX1yZXR1cm4gUHJvbWlzZS5hbGwocil9LGEubT1lLGEuYz1uLGEuZD1mdW5jdGlvbihlLHIsdCl7YS5vKGUscil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDp0fSl9LGEucj1mdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGEubj1mdW5jdGlvbihlKXt2YXIgcj1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gYS5kKHIsImEiLHIpLHJ9LGEubz1mdW5jdGlvbihlLHIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKX0sYS5wPSIiLGEub2U9ZnVuY3Rpb24oZSl7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfTt2YXIgaT13aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdLGM9aS5wdXNoLmJpbmQoaSk7aS5wdXNoPXIsaT1pLnNsaWNlKCk7Zm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspcihpW2xdKTt2YXIgcz1jO3QoKX0oW10pOyh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbM10seyIrckx2IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZHlaWCIpLmRvY3VtZW50O2UuZXhwb3J0cz1yJiZyLmRvY3VtZW50RWxlbWVudH0sIjAvUjQiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX19LCIwVFdwIjpmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiOyFmdW5jdGlvbihlKXt2YXIgdD1lLnBlcmZvcm1hbmNlO2Z1bmN0aW9uIG4oZSl7dCYmdC5tYXJrJiZ0Lm1hcmsoZSl9ZnVuY3Rpb24gcihlLG4pe3QmJnQubWVhc3VyZSYmdC5tZWFzdXJlKGUsbil9aWYobigiWm9uZSIpLGUuWm9uZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7dmFyIG8saT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0KXt0aGlzLl9wcm9wZXJ0aWVzPW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fbmFtZT10P3QubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9dCYmdC5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IGModGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLHQpfXJldHVybiB0LmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYoZS5Qcm9taXNlIT09Ty5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4pIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuY3VycmVudDtlLnBhcmVudDspZT1lLnBhcmVudDtyZXR1cm4gZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBELnpvbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5fX2xvYWRfcGF0Y2g9ZnVuY3Rpb24obyxpKXtpZihPLmhhc093blByb3BlcnR5KG8pKXRocm93IEVycm9yKCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogIitvKTtpZighZVsiX19ab25lX2Rpc2FibGVfIitvXSl7dmFyIGE9IlpvbmU6IitvO24oYSksT1tvXT1pKGUsdCxTKSxyKGEsYSl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0Wm9uZVdpdGgoZSk7aWYodClyZXR1cm4gdC5fcHJvcGVydGllc1tlXX0sdC5wcm90b3R5cGUuZ2V0Wm9uZVdpdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXM7dDspe2lmKHQuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHQ7dD10Ll9wYXJlbnR9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcyxlKX0sdC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIGZ1bmN0aW9uIGdvdDogIitlKTt2YXIgbj10aGlzLl96b25lRGVsZWdhdGUuaW50ZXJjZXB0KHRoaXMsZSx0KSxyPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucnVuR3VhcmRlZChuLHRoaXMsYXJndW1lbnRzLHQpfX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09ciYmKHI9bnVsbCksRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxlLHQsbixyKX1maW5hbGx5e0Q9RC5wYXJlbnR9fSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PW51bGwpLHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPW51bGwpLEQ9e3BhcmVudDpELHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLGUsdCxuLHIpfWNhdGNoKGUpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGUpKXRocm93IGV9fWZpbmFsbHl7RD1ELnBhcmVudH19LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24oZSx0LG4pe2lmKGUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoZS56b25lfHxnKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihlLnN0YXRlIT09eXx8ZS50eXBlIT09eCl7dmFyIHI9ZS5zdGF0ZSE9aztyJiZlLl90cmFuc2l0aW9uVG8oayxtKSxlLnJ1bkNvdW50Kys7dmFyIG89ajtqPWUsRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7ZS50eXBlPT1FJiZlLmRhdGEmJiFlLmRhdGEuaXNQZXJpb2RpYyYmKGUuY2FuY2VsRm49bnVsbCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLGUsdCxuKX1jYXRjaChlKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxlKSl0aHJvdyBlfX1maW5hbGx5e2Uuc3RhdGUhPT15JiZlLnN0YXRlIT09VCYmKGUudHlwZT09eHx8ZS5kYXRhJiZlLmRhdGEuaXNQZXJpb2RpYz9yJiZlLl90cmFuc2l0aW9uVG8obSxrKTooZS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChlLC0xKSxyJiZlLl90cmFuc2l0aW9uVG8oeSxrLHkpKSksRD1ELnBhcmVudCxqPW99fX0sdC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKGUpe2lmKGUuem9uZSYmZS56b25lIT09dGhpcylmb3IodmFyIHQ9dGhpczt0Oyl7aWYodD09PWUuem9uZSl0aHJvdyBFcnJvcigiY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gIit0aGlzLm5hbWUrIiB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAiK2Uuem9uZS5uYW1lKTt0PXQucGFyZW50fWUuX3RyYW5zaXRpb25UbyhfLHkpO3ZhciBuPVtdO2UuX3pvbmVEZWxlZ2F0ZXM9bixlLl96b25lPXRoaXM7dHJ5e2U9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLGUpfWNhdGNoKHQpe3Rocm93IGUuX3RyYW5zaXRpb25UbyhULF8seSksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdCksdH1yZXR1cm4gZS5fem9uZURlbGVnYXRlcz09PW4mJnRoaXMuX3VwZGF0ZVRhc2tDb3VudChlLDEpLGUuc3RhdGU9PV8mJmUuX3RyYW5zaXRpb25UbyhtLF8pLGV9LHQucHJvdG90eXBlLnNjaGVkdWxlTWljcm9UYXNrPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgdSh3LGUsdCxuLHIsbnVsbCkpfSx0LnByb3RvdHlwZS5zY2hlZHVsZU1hY3JvVGFzaz1mdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgdShFLGUsdCxuLHIsbykpfSx0LnByb3RvdHlwZS5zY2hlZHVsZUV2ZW50VGFzaz1mdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgdSh4LGUsdCxuLHIsbykpfSx0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKGUpe2lmKGUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBjYW5jZWxsZWQgaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoZS56b25lfHxnKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtlLl90cmFuc2l0aW9uVG8oYixtLGspO3RyeXt0aGlzLl96b25lRGVsZWdhdGUuY2FuY2VsVGFzayh0aGlzLGUpfWNhdGNoKHQpe3Rocm93IGUuX3RyYW5zaXRpb25UbyhULGIpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHQpLHR9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChlLC0xKSxlLl90cmFuc2l0aW9uVG8oeSxiKSxlLnJ1bkNvdW50PTAsZX0sdC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX3pvbmVEZWxlZ2F0ZXM7LTE9PXQmJihlLl96b25lRGVsZWdhdGVzPW51bGwpO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uX3VwZGF0ZVRhc2tDb3VudChlLnR5cGUsdCl9LHQuX19zeW1ib2xfXz16LHR9KCksYT17bmFtZToiIixvbkhhc1Rhc2s6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUuaGFzVGFzayhuLHIpfSxvblNjaGVkdWxlVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5zY2hlZHVsZVRhc2sobixyKX0sb25JbnZva2VUYXNrOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXtyZXR1cm4gZS5pbnZva2VUYXNrKG4scixvLGkpfSxvbkNhbmNlbFRhc2s6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGUuY2FuY2VsVGFzayhuLHIpfX0sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9ZSx0aGlzLl9wYXJlbnREZWxlZ2F0ZT10LHRoaXMuX2ZvcmtaUz1uJiYobiYmbi5vbkZvcms/bjp0Ll9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PW4mJihuLm9uRm9yaz90OnQuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9biYmKG4ub25Gb3JrP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPW4mJihuLm9uSW50ZXJjZXB0P246dC5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9biYmKG4ub25JbnRlcmNlcHQ/dDp0Ll9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1uJiYobi5vbkludGVyY2VwdD90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VaUz1uJiYobi5vbkludm9rZT9uOnQuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PW4mJihuLm9uSW52b2tlP3Q6dC5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9biYmKG4ub25JbnZva2U/dGhpcy56b25lOnQuem9uZSksdGhpcy5faGFuZGxlRXJyb3JaUz1uJiYobi5vbkhhbmRsZUVycm9yP246dC5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PW4mJihuLm9uSGFuZGxlRXJyb3I/dDp0Ll9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9biYmKG4ub25IYW5kbGVFcnJvcj90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9zY2hlZHVsZVRhc2taUz1uJiYobi5vblNjaGVkdWxlVGFzaz9uOnQuX3NjaGVkdWxlVGFza1pTKSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PW4mJihuLm9uU2NoZWR1bGVUYXNrP3Q6dC5fc2NoZWR1bGVUYXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9biYmKG4ub25TY2hlZHVsZVRhc2s/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW52b2tlVGFza1pTPW4mJihuLm9uSW52b2tlVGFzaz9uOnQuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFza0RsZ3Q9biYmKG4ub25JbnZva2VUYXNrP3Q6dC5faW52b2tlVGFza0RsZ3QpLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT1uJiYobi5vbkludm9rZVRhc2s/dGhpcy56b25lOnQuem9uZSksdGhpcy5fY2FuY2VsVGFza1pTPW4mJihuLm9uQ2FuY2VsVGFzaz9uOnQuX2NhbmNlbFRhc2taUyksdGhpcy5fY2FuY2VsVGFza0RsZ3Q9biYmKG4ub25DYW5jZWxUYXNrP3Q6dC5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1uJiYobi5vbkNhbmNlbFRhc2s/dGhpcy56b25lOnQuem9uZSksdGhpcy5faGFzVGFza1pTPW51bGwsdGhpcy5faGFzVGFza0RsZ3Q9bnVsbCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPW51bGwsdGhpcy5faGFzVGFza0N1cnJab25lPW51bGw7dmFyIHI9biYmbi5vbkhhc1Rhc2s7KHJ8fHQmJnQuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9cj9uOmEsdGhpcy5faGFzVGFza0RsZ3Q9dCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPWUsbi5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPWEsdGhpcy5fc2NoZWR1bGVUYXNrRGxndD10LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9uZSksbi5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9YSx0aGlzLl9pbnZva2VUYXNrRGxndD10LHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLG4ub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPWEsdGhpcy5fY2FuY2VsVGFza0RsZ3Q9dCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9dGhpcy56b25lKSl9cmV0dXJuIGUucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLGUsdCk6bmV3IGkoZSx0KX0sZS5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxlLHQsbik6dH0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsZSx0LG4scixvKTp0LmFwcGx5KG4scil9LGUucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZSxlLHQpfSxlLnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oZSx0KXt2YXIgbj10O2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmbi5fem9uZURlbGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpLChuPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsZSx0KSl8fChuPXQpO2Vsc2UgaWYodC5zY2hlZHVsZUZuKXQuc2NoZWR1bGVGbih0KTtlbHNle2lmKHQudHlwZSE9dyl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBzY2hlZHVsZUZuLiIpO3YodCl9cmV0dXJuIG59LGUucHJvdG90eXBlLmludm9rZVRhc2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUz90aGlzLl9pbnZva2VUYXNrWlMub25JbnZva2VUYXNrKHRoaXMuX2ludm9rZVRhc2tEbGd0LHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSxlLHQsbixyKTp0LmNhbGxiYWNrLmFwcGx5KG4scil9LGUucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0aGlzLl9jYW5jZWxUYXNrWlMpbj10aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSxlLHQpO2Vsc2V7aWYoIXQuY2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtuPXQuY2FuY2VsRm4odCl9cmV0dXJuIG59LGUucHJvdG90eXBlLmhhc1Rhc2s9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIHRoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsZSx0KX1jYXRjaCh0KXt0aGlzLmhhbmRsZUVycm9yKGUsdCl9fSxlLnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdGFza0NvdW50cyxyPW5bZV0sbz1uW2VdPXIrdDtpZihvPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9ciYmMCE9b3x8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOm4ubWljcm9UYXNrPjAsbWFjcm9UYXNrOm4ubWFjcm9UYXNrPjAsZXZlbnRUYXNrOm4uZXZlbnRUYXNrPjAsY2hhbmdlOmV9KX0sZX0oKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuLHIsbyxpLGEsYyl7dGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhpcy50eXBlPW4sdGhpcy5zb3VyY2U9cix0aGlzLmRhdGE9aSx0aGlzLnNjaGVkdWxlRm49YSx0aGlzLmNhbmNlbEZuPWMsdGhpcy5jYWxsYmFjaz1vO3ZhciB1PXRoaXM7dGhpcy5pbnZva2U9bj09PXgmJmkmJmkudXNlRz90Lmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pbnZva2VUYXNrLmNhbGwoZSx1LHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIHQuaW52b2tlVGFzaz1mdW5jdGlvbihlLHQsbil7ZXx8KGU9dGhpcyksUCsrO3RyeXtyZXR1cm4gZS5ydW5Db3VudCsrLGUuem9uZS5ydW5UYXNrKGUsdCxuKX1maW5hbGx5ezE9PVAmJmQoKSxQLS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN0YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25Ubyh5LF8pfSx0LnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLl9zdGF0ZSE9PXQmJnRoaXMuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlKyIgJyIrdGhpcy5zb3VyY2UrIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnIitlKyInLCBleHBlY3Rpbmcgc3RhdGUgJyIrdCsiJyIrKG4/IiBvciAnIituKyInIjoiIikrIiwgd2FzICciK3RoaXMuX3N0YXRlKyInLiIpO3RoaXMuX3N0YXRlPWUsZT09eSYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YSYmdm9pZCAwIT09dGhpcy5kYXRhLmhhbmRsZUlkP3RoaXMuZGF0YS5oYW5kbGVJZDpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fSx0fSgpLHM9eigic2V0VGltZW91dCIpLGw9eigiUHJvbWlzZSIpLGY9eigidGhlbiIpLHA9W10saD0hMTtmdW5jdGlvbiB2KHQpezA9PT1QJiYwPT09cC5sZW5ndGgmJihvfHxlW2xdJiYobz1lW2xdLnJlc29sdmUoMCkpLG8/b1tmXShkKTplW3NdKGQsMCkpLHQmJnAucHVzaCh0KX1mdW5jdGlvbiBkKCl7aWYoIWgpe2ZvcihoPSEwO3AubGVuZ3RoOyl7dmFyIGU9cDtwPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO3RyeXtuLnpvbmUucnVuVGFzayhuLG51bGwsbnVsbCl9Y2F0Y2goZSl7Uy5vblVuaGFuZGxlZEVycm9yKGUpfX19Uy5taWNyb3Rhc2tEcmFpbkRvbmUoKSxoPSExfX12YXIgZz17bmFtZToiTk8gWk9ORSJ9LHk9Im5vdFNjaGVkdWxlZCIsXz0ic2NoZWR1bGluZyIsbT0ic2NoZWR1bGVkIixrPSJydW5uaW5nIixiPSJjYW5jZWxpbmciLFQ9InVua25vd24iLHc9Im1pY3JvVGFzayIsRT0ibWFjcm9UYXNrIix4PSJldmVudFRhc2siLE89e30sUz17c3ltYm9sOnosY3VycmVudFpvbmVGcmFtZTpmdW5jdGlvbigpe3JldHVybiBEfSxvblVuaGFuZGxlZEVycm9yOlosbWljcm90YXNrRHJhaW5Eb25lOlosc2NoZWR1bGVNaWNyb1Rhc2s6dixzaG93VW5jYXVnaHRFcnJvcjpmdW5jdGlvbigpe3JldHVybiFpW3ooImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hPblByb3BlcnRpZXM6WixwYXRjaE1ldGhvZDpmdW5jdGlvbigpe3JldHVybiBafSxiaW5kQXJndW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHNldE5hdGl2ZVByb21pc2U6ZnVuY3Rpb24oZSl7ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUucmVzb2x2ZSYmKG89ZS5yZXNvbHZlKDApKX19LEQ9e3BhcmVudDpudWxsLHpvbmU6bmV3IGkobnVsbCxudWxsKX0saj1udWxsLFA9MDtmdW5jdGlvbiBaKCl7fWZ1bmN0aW9uIHooZSl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrZX1yKCJab25lIiwiWm9uZSIpLGUuWm9uZT1pfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fHwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCksWm9uZS5fX2xvYWRfcGF0Y2goIlpvbmVBd2FyZVByb21pc2UiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLG89T2JqZWN0LmRlZmluZVByb3BlcnR5LGk9bi5zeW1ib2wsYT1bXSxjPWkoIlByb21pc2UiKSx1PWkoInRoZW4iKSxzPSJfX2NyZWF0aW9uVHJhY2VfXyI7bi5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKGUpe2lmKG4uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIHQ9ZSYmZS5yZWplY3Rpb247dD9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246Iix0IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOnQsIjsgWm9uZToiLGUuem9uZS5uYW1lLCI7IFRhc2s6IixlLnRhc2smJmUudGFzay5zb3VyY2UsIjsgVmFsdWU6Iix0LHQgaW5zdGFuY2VvZiBFcnJvcj90LnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcihlKX19LG4ubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKDthLmxlbmd0aDspZm9yKHZhciBlPWZ1bmN0aW9uKCl7dmFyIGU9YS5zaGlmdCgpO3RyeXtlLnpvbmUucnVuR3VhcmRlZChmdW5jdGlvbigpe3Rocm93IGV9KX1jYXRjaChlKXtmKGUpfX07YS5sZW5ndGg7KWUoKX07dmFyIGw9aSgidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBmKGUpe24ub25VbmhhbmRsZWRFcnJvcihlKTt0cnl7dmFyIHI9dFtsXTtyJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmci5jYWxsKHRoaXMsZSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBwKGUpe3JldHVybiBlJiZlLnRoZW59ZnVuY3Rpb24gaChlKXtyZXR1cm4gZX1mdW5jdGlvbiB2KGUpe3JldHVybiBNLnJlamVjdChlKX12YXIgZD1pKCJzdGF0ZSIpLGc9aSgidmFsdWUiKSx5PWkoImZpbmFsbHkiKSxfPWkoInBhcmVudFByb21pc2VWYWx1ZSIpLG09aSgicGFyZW50UHJvbWlzZVN0YXRlIiksaz0iUHJvbWlzZS50aGVuIixiPW51bGwsVD0hMCx3PSExLEU9MDtmdW5jdGlvbiB4KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RyeXtqKGUsdCxuKX1jYXRjaCh0KXtqKGUsITEsdCl9fX12YXIgTz1mdW5jdGlvbigpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtlfHwoZT0hMCx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sUz0iUHJvbWlzZSByZXNvbHZlZCB3aXRoIGl0c2VsZiIsRD1pKCJjdXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gaihlLHIsaSl7dmFyIGMsdT1PKCk7aWYoZT09PWkpdGhyb3cgbmV3IFR5cGVFcnJvcihTKTtpZihlW2RdPT09Yil7dmFyIGw9bnVsbDt0cnl7Im9iamVjdCIhPXR5cGVvZiBpJiYiZnVuY3Rpb24iIT10eXBlb2YgaXx8KGw9aSYmaS50aGVuKX1jYXRjaCh0KXtyZXR1cm4gdShmdW5jdGlvbigpe2ooZSwhMSx0KX0pKCksZX1pZihyIT09dyYmaSBpbnN0YW5jZW9mIE0mJmkuaGFzT3duUHJvcGVydHkoZCkmJmkuaGFzT3duUHJvcGVydHkoZykmJmlbZF0hPT1iKVooaSksaihlLGlbZF0saVtnXSk7ZWxzZSBpZihyIT09dyYmImZ1bmN0aW9uIj09dHlwZW9mIGwpdHJ5e2wuY2FsbChpLHUoeChlLHIpKSx1KHgoZSwhMSkpKX1jYXRjaCh0KXt1KGZ1bmN0aW9uKCl7aihlLCExLHQpfSkoKX1lbHNle2VbZF09cjt2YXIgZj1lW2ddO2lmKGVbZ109aSxlW3ldPT09eSYmcj09PVQmJihlW2RdPWVbbV0sZVtnXT1lW19dKSxyPT09dyYmaSBpbnN0YW5jZW9mIEVycm9yKXt2YXIgcD10LmN1cnJlbnRUYXNrJiZ0LmN1cnJlbnRUYXNrLmRhdGEmJnQuY3VycmVudFRhc2suZGF0YVtzXTtwJiZvKGksRCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6cH0pfWZvcih2YXIgaD0wO2g8Zi5sZW5ndGg7KXooZSxmW2grK10sZltoKytdLGZbaCsrXSxmW2grK10pO2lmKDA9PWYubGVuZ3RoJiZyPT13KXtlW2RdPUU7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiKygoYz1pKSYmYy50b1N0cmluZz09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc/KGMuY29uc3RydWN0b3ImJmMuY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkoYyk6Yz9jLnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKSsoaSYmaS5zdGFjaz8iXG4iK2kuc3RhY2s6IiIpKX1jYXRjaChyKXt2YXIgdj1yO3YucmVqZWN0aW9uPWksdi5wcm9taXNlPWUsdi56b25lPXQuY3VycmVudCx2LnRhc2s9dC5jdXJyZW50VGFzayxhLnB1c2godiksbi5zY2hlZHVsZU1pY3JvVGFzaygpfX19fXJldHVybiBlfXZhciBQPWkoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gWihlKXtpZihlW2RdPT09RSl7dHJ5e3ZhciBuPXRbUF07biYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uY2FsbCh0aGlzLHtyZWplY3Rpb246ZVtnXSxwcm9taXNlOmV9KX1jYXRjaChlKXt9ZVtkXT13O2Zvcih2YXIgcj0wO3I8YS5sZW5ndGg7cisrKWU9PT1hW3JdLnByb21pc2UmJmEuc3BsaWNlKHIsMSl9fWZ1bmN0aW9uIHooZSx0LG4scixvKXtaKGUpO3ZhciBpPWVbZF0sYT1pPyJmdW5jdGlvbiI9PXR5cGVvZiByP3I6aDoiZnVuY3Rpb24iPT10eXBlb2Ygbz9vOnY7dC5zY2hlZHVsZU1pY3JvVGFzayhrLGZ1bmN0aW9uKCl7dHJ5e3ZhciByPWVbZ10sbz1uJiZ5PT09blt5XTtvJiYobltfXT1yLG5bbV09aSk7dmFyIGM9dC5ydW4oYSx2b2lkIDAsbyYmYSE9PXYmJmEhPT1oP1tdOltyXSk7aihuLCEwLGMpfWNhdGNoKGUpe2oobiwhMSxlKX19LG4pfXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLiIpO3RoaXNbZF09Yix0aGlzW2ddPVtdO3RyeXt0JiZ0KHgodGhpcyxUKSx4KHRoaXMsdykpfWNhdGNoKGUpe2oodGhpcywhMSxlKX19cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24gWm9uZUF3YXJlUHJvbWlzZSgpIHsgW25hdGl2ZSBjb2RlXSB9In0sZS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3JldHVybiBqKG5ldyB0aGlzKG51bGwpLFQsZSl9LGUucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBqKG5ldyB0aGlzKG51bGwpLHcsZSl9LGUucmFjZT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9bmV3IHRoaXMoZnVuY3Rpb24oZSxyKXt0PWUsbj1yfSk7ZnVuY3Rpb24gbyhlKXtyJiYocj10KGUpKX1mdW5jdGlvbiBpKGUpe3ImJihyPW4oZSkpfWZvcih2YXIgYT0wLGM9ZTthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtwKHUpfHwodT10aGlzLnJlc29sdmUodSkpLHUudGhlbihvLGkpfXJldHVybiByfSxlLmFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyPW5ldyB0aGlzKGZ1bmN0aW9uKGUscil7dD1lLG49cn0pLG89MCxpPVtdLGE9MCxjPWU7YTxjLmxlbmd0aDthKyspe3ZhciB1PWNbYV07cCh1KXx8KHU9dGhpcy5yZXNvbHZlKHUpKSx1LnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lbZV09biwtLW98fHQoaSl9fShvKSxuKSxvKyt9cmV0dXJuIG98fHQoaSkscn0sZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLG4pe3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKG51bGwpLG89dC5jdXJyZW50O3JldHVybiB0aGlzW2RdPT1iP3RoaXNbZ10ucHVzaChvLHIsZSxuKTp6KHRoaXMsbyxyLGUsbikscn0sZS5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGUpfSxlLnByb3RvdHlwZS5maW5hbGx5PWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKG51bGwpO25beV09eTt2YXIgcj10LmN1cnJlbnQ7cmV0dXJuIHRoaXNbZF09PWI/dGhpc1tnXS5wdXNoKHIsbixlLGUpOnoodGhpcyxyLG4sZSxlKSxufSxlfSgpO00ucmVzb2x2ZT1NLnJlc29sdmUsTS5yZWplY3Q9TS5yZWplY3QsTS5yYWNlPU0ucmFjZSxNLmFsbD1NLmFsbDt2YXIgQz1lW2NdPWUuUHJvbWlzZSxSPXQuX19zeW1ib2xfXygiWm9uZUF3YXJlUHJvbWlzZSIpLEk9cihlLCJQcm9taXNlIik7SSYmIUkuY29uZmlndXJhYmxlfHwoSSYmZGVsZXRlIEkud3JpdGFibGUsSSYmZGVsZXRlIEkudmFsdWUsSXx8KEk9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSksSS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZVtSXT9lW1JdOmVbY119LEkuc2V0PWZ1bmN0aW9uKHQpe3Q9PT1NP2VbUl09dDooZVtjXT10LHQucHJvdG90eXBlW3VdfHxxKHQpLG4uc2V0TmF0aXZlUHJvbWlzZSh0KSl9LG8oZSwiUHJvbWlzZSIsSSkpLGUuUHJvbWlzZT1NO3ZhciBGLEw9aSgidGhlblBhdGNoZWQiKTtmdW5jdGlvbiBxKGUpe3ZhciB0PWUucHJvdG90eXBlLG49cih0LCJ0aGVuIik7aWYoIW58fCExIT09bi53cml0YWJsZSYmbi5jb25maWd1cmFibGUpe3ZhciBvPXQudGhlbjt0W3VdPW8sZS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBNKGZ1bmN0aW9uKGUsdCl7by5jYWxsKG4sZSx0KX0pLnRoZW4oZSx0KX0sZVtMXT0hMH19aWYoQyl7cShDKTt2YXIgQT1lLmZldGNoOyJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoZS5mZXRjaD0oRj1BLGZ1bmN0aW9uKCl7dmFyIGU9Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoZSBpbnN0YW5jZW9mIE0pcmV0dXJuIGU7dmFyIHQ9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdFtMXXx8cSh0KSxlfSkpfXJldHVybiBQcm9taXNlW3QuX19zeW1ib2xfXygidW5jYXVnaHRQcm9taXNlRXJyb3JzIildPWEsTX0pO3ZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdD1PYmplY3QuZGVmaW5lUHJvcGVydHksbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yscj1PYmplY3QuY3JlYXRlLG89QXJyYXkucHJvdG90eXBlLnNsaWNlLGk9ImFkZEV2ZW50TGlzdGVuZXIiLGE9InJlbW92ZUV2ZW50TGlzdGVuZXIiLGM9Wm9uZS5fX3N5bWJvbF9fKGkpLHU9Wm9uZS5fX3N5bWJvbF9fKGEpLHM9InRydWUiLGw9ImZhbHNlIixmPSJfX3pvbmVfc3ltYm9sX18iO2Z1bmN0aW9uIHAoZSx0KXtyZXR1cm4gWm9uZS5jdXJyZW50LndyYXAoZSx0KX1mdW5jdGlvbiBoKGUsdCxuLHIsbyl7cmV0dXJuIFpvbmUuY3VycmVudC5zY2hlZHVsZU1hY3JvVGFzayhlLHQsbixyLG8pfXZhciB2PVpvbmUuX19zeW1ib2xfXyxkPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LGc9ZD93aW5kb3c6dm9pZCAwLHk9ZCYmZ3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWwsXz0icmVtb3ZlQXR0cmlidXRlIixtPVtudWxsXTtmdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLTE7bj49MDtuLS0pImZ1bmN0aW9uIj09dHlwZW9mIGVbbl0mJihlW25dPXAoZVtuXSx0KyJfIituKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtyZXR1cm4hZXx8ITEhPT1lLndyaXRhYmxlJiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldCYmdm9pZCAwPT09ZS5zZXQpfXZhciBUPSJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSx3PSEoIm53ImluIHkpJiZ2b2lkIDAhPT15LnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSxFPSF3JiYhVCYmISghZHx8IWcuSFRNTEVsZW1lbnQpLHg9dm9pZCAwIT09eS5wcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHkucHJvY2VzcykmJiFUJiYhKCFkfHwhZy5IVE1MRWxlbWVudCksTz17fSxTPWZ1bmN0aW9uKGUpe2lmKGU9ZXx8eS5ldmVudCl7dmFyIHQ9T1tlLnR5cGVdO3R8fCh0PU9bZS50eXBlXT12KCJPTl9QUk9QRVJUWSIrZS50eXBlKSk7dmFyIG49KHRoaXN8fGUudGFyZ2V0fHx5KVt0XSxyPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2b2lkIDA9PXJ8fHJ8fGUucHJldmVudERlZmF1bHQoKSxyfX07ZnVuY3Rpb24gRChuLHIsbyl7dmFyIGk9ZShuLHIpO2lmKCFpJiZvJiZlKG8scikmJihpPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGkmJmkuY29uZmlndXJhYmxlKXtkZWxldGUgaS53cml0YWJsZSxkZWxldGUgaS52YWx1ZTt2YXIgYT1pLmdldCxjPWkuc2V0LHU9ci5zdWJzdHIoMikscz1PW3VdO3N8fChzPU9bdV09digiT05fUFJPUEVSVFkiK3UpKSxpLnNldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3R8fG4hPT15fHwodD15KSx0JiYodFtzXSYmdC5yZW1vdmVFdmVudExpc3RlbmVyKHUsUyksYyYmYy5hcHBseSh0LG0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlPyh0W3NdPWUsdC5hZGRFdmVudExpc3RlbmVyKHUsUywhMSkpOnRbc109bnVsbCl9LGkuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZihlfHxuIT09eXx8KGU9eSksIWUpcmV0dXJuIG51bGw7dmFyIHQ9ZVtzXTtpZih0KXJldHVybiB0O2lmKGEpe3ZhciBvPWEmJmEuY2FsbCh0aGlzKTtpZihvKXJldHVybiBpLnNldC5jYWxsKHRoaXMsbyksImZ1bmN0aW9uIj09dHlwZW9mIGVbX10mJmUucmVtb3ZlQXR0cmlidXRlKHIpLG99cmV0dXJuIG51bGx9LHQobixyLGkpfX1mdW5jdGlvbiBqKGUsdCxuKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKUQoZSwib24iK3Rbcl0sbik7ZWxzZXt2YXIgbz1bXTtmb3IodmFyIGkgaW4gZSkib24iPT1pLnN1YnN0cigwLDIpJiZvLnB1c2goaSk7Zm9yKHZhciBhPTA7YTxvLmxlbmd0aDthKyspRChlLG9bYV0sbil9fXZhciBQPXYoIm9yaWdpbmFsSW5zdGFuY2UiKTtmdW5jdGlvbiBaKGUpe3ZhciBuPXlbZV07aWYobil7eVt2KGUpXT1uLHlbZV09ZnVuY3Rpb24oKXt2YXIgdD1rKGFyZ3VtZW50cyxlKTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDp0aGlzW1BdPW5ldyBuO2JyZWFrO2Nhc2UgMTp0aGlzW1BdPW5ldyBuKHRbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW1BdPW5ldyBuKHRbMF0sdFsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbUF09bmV3IG4odFswXSx0WzFdLHRbMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW1BdPW5ldyBuKHRbMF0sdFsxXSx0WzJdLHRbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LE0oeVtlXSxuKTt2YXIgcixvPW5ldyBuKGZ1bmN0aW9uKCl7fSk7Zm9yKHIgaW4gbykiWE1MSHR0cFJlcXVlc3QiPT09ZSYmInJlc3BvbnNlQmxvYiI9PT1yfHxmdW5jdGlvbihuKXsiZnVuY3Rpb24iPT10eXBlb2Ygb1tuXT95W2VdLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW1BdW25dLmFwcGx5KHRoaXNbUF0sYXJndW1lbnRzKX06dCh5W2VdLnByb3RvdHlwZSxuLHtzZXQ6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIj09dHlwZW9mIHQ/KHRoaXNbUF1bbl09cCh0LGUrIi4iK24pLE0odGhpc1tQXVtuXSx0KSk6dGhpc1tQXVtuXT10fSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tQXVtuXX19KX0ocik7Zm9yKHIgaW4gbikicHJvdG90eXBlIiE9PXImJm4uaGFzT3duUHJvcGVydHkocikmJih5W2VdW3JdPW5bcl0pfX1mdW5jdGlvbiB6KHQscixvKXtmb3IodmFyIGk9dDtpJiYhaS5oYXNPd25Qcm9wZXJ0eShyKTspaT1uKGkpOyFpJiZ0W3JdJiYoaT10KTt2YXIgYSxjPXYocik7aWYoaSYmIShhPWlbY10pJiYoYT1pW2NdPWlbcl0sYihpJiZlKGkscikpKSl7dmFyIHU9byhhLGMscik7aVtyXT1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMsYXJndW1lbnRzKX0sTShpW3JdLGEpfXJldHVybiBhfWZ1bmN0aW9uIE0oZSx0KXtlW3YoIk9yaWdpbmFsRGVsZWdhdGUiKV09dH12YXIgQz0hMSxSPSExO2Z1bmN0aW9uIEkoKXtpZihDKXJldHVybiBSO0M9ITA7dHJ5e3ZhciBlPWcubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4tMT09PWUuaW5kZXhPZigiTVNJRSAiKSYmLTE9PT1lLmluZGV4T2YoIlRyaWRlbnQvIikmJi0xPT09ZS5pbmRleE9mKCJFZGdlLyIpfHwoUj0hMCksUn1jYXRjaChlKXt9fVpvbmUuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsZnVuY3Rpb24oZSl7dmFyIHQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLG49digiT3JpZ2luYWxEZWxlZ2F0ZSIpLHI9digiUHJvbWlzZSIpLG89digiRXJyb3IiKSxpPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMpe3ZhciBpPXRoaXNbbl07aWYoaSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT90LmFwcGx5KHRoaXNbbl0sYXJndW1lbnRzKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk7aWYodGhpcz09PVByb21pc2Upe3ZhciBhPWVbcl07aWYoYSlyZXR1cm4gdC5hcHBseShhLGFyZ3VtZW50cyl9aWYodGhpcz09PUVycm9yKXt2YXIgYz1lW29dO2lmKGMpcmV0dXJuIHQuYXBwbHkoYyxhcmd1bWVudHMpfX1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lbbl09dCxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9aTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOmEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pO3ZhciBGPXt1c2VHOiEwfSxMPXt9LHE9e30sQT0vXl9fem9uZV9zeW1ib2xfXyhcdyspKHRydWV8ZmFsc2UpJC8sSD0iX196b25lX3N5bWJvbF9fcHJvcGFnYXRpb25TdG9wcGVkIjtmdW5jdGlvbiBOKGUsdCxyKXt2YXIgbz1yJiZyLmFkZHx8aSxjPXImJnIucm18fGEsdT1yJiZyLmxpc3RlbmVyc3x8ImV2ZW50TGlzdGVuZXJzIixwPXImJnIucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLGg9dihvKSxkPSIuIitvKyI6IixnPSJwcmVwZW5kTGlzdGVuZXIiLHk9Ii4iK2crIjoiLF89ZnVuY3Rpb24oZSx0LG4pe2lmKCFlLmlzUmVtb3ZlZCl7dmFyIHI9ZS5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIHImJnIuaGFuZGxlRXZlbnQmJihlLmNhbGxiYWNrPWZ1bmN0aW9uKGUpe3JldHVybiByLmhhbmRsZUV2ZW50KGUpfSxlLm9yaWdpbmFsRGVsZWdhdGU9ciksZS5pbnZva2UoZSx0LFtuXSk7dmFyIG89ZS5vcHRpb25zO28mJiJvYmplY3QiPT10eXBlb2YgbyYmby5vbmNlJiZ0W2NdLmNhbGwodCxuLnR5cGUsZS5vcmlnaW5hbERlbGVnYXRlP2Uub3JpZ2luYWxEZWxlZ2F0ZTplLmNhbGxiYWNrLG8pfX0sbT1mdW5jdGlvbih0KXtpZih0PXR8fGUuZXZlbnQpe3ZhciBuPXRoaXN8fHQudGFyZ2V0fHxlLHI9bltMW3QudHlwZV1bbF1dO2lmKHIpaWYoMT09PXIubGVuZ3RoKV8oclswXSxuLHQpO2Vsc2UgZm9yKHZhciBvPXIuc2xpY2UoKSxpPTA7aTxvLmxlbmd0aCYmKCF0fHwhMCE9PXRbSF0pO2krKylfKG9baV0sbix0KX19LGs9ZnVuY3Rpb24odCl7aWYodD10fHxlLmV2ZW50KXt2YXIgbj10aGlzfHx0LnRhcmdldHx8ZSxyPW5bTFt0LnR5cGVdW3NdXTtpZihyKWlmKDE9PT1yLmxlbmd0aClfKHJbMF0sbix0KTtlbHNlIGZvcih2YXIgbz1yLnNsaWNlKCksaT0wO2k8by5sZW5ndGgmJighdHx8ITAhPT10W0hdKTtpKyspXyhvW2ldLG4sdCl9fTtmdW5jdGlvbiBiKHQscil7aWYoIXQpcmV0dXJuITE7dmFyIGk9ITA7ciYmdm9pZCAwIT09ci51c2VHJiYoaT1yLnVzZUcpO3ZhciBhPXImJnIudmgsXz0hMDtyJiZ2b2lkIDAhPT1yLmNoa0R1cCYmKF89ci5jaGtEdXApO3ZhciBiPSExO3ImJnZvaWQgMCE9PXIucnQmJihiPXIucnQpO2Zvcih2YXIgVD10O1QmJiFULmhhc093blByb3BlcnR5KG8pOylUPW4oVCk7aWYoIVQmJnRbb10mJihUPXQpLCFUKXJldHVybiExO2lmKFRbaF0pcmV0dXJuITE7dmFyIHcsRT17fSx4PVRbaF09VFtvXSxPPVRbdihjKV09VFtjXSxTPVRbdih1KV09VFt1XSxEPVRbdihwKV09VFtwXTtyJiZyLnByZXBlbmQmJih3PVRbdihyLnByZXBlbmQpXT1UW3IucHJlcGVuZF0pO3ZhciBqPWk/ZnVuY3Rpb24oKXtpZighRS5pc0V4aXN0aW5nKXJldHVybiB4LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsRS5jYXB0dXJlP2s6bSxFLm9wdGlvbnMpfTpmdW5jdGlvbihlKXtyZXR1cm4geC5jYWxsKEUudGFyZ2V0LEUuZXZlbnROYW1lLGUuaW52b2tlLEUub3B0aW9ucyl9LFA9aT9mdW5jdGlvbihlKXtpZighZS5pc1JlbW92ZWQpe3ZhciB0PUxbZS5ldmVudE5hbWVdLG49dm9pZCAwO3QmJihuPXRbZS5jYXB0dXJlP3M6bF0pO3ZhciByPW4mJmUudGFyZ2V0W25dO2lmKHIpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaWYocltvXT09PWUpe3Iuc3BsaWNlKG8sMSksZS5pc1JlbW92ZWQ9ITAsMD09PXIubGVuZ3RoJiYoZS5hbGxSZW1vdmVkPSEwLGUudGFyZ2V0W25dPW51bGwpO2JyZWFrfX1pZihlLmFsbFJlbW92ZWQpcmV0dXJuIE8uY2FsbChlLnRhcmdldCxlLmV2ZW50TmFtZSxlLmNhcHR1cmU/azptLGUub3B0aW9ucyl9OmZ1bmN0aW9uKGUpe3JldHVybiBPLmNhbGwoZS50YXJnZXQsZS5ldmVudE5hbWUsZS5pbnZva2UsZS5vcHRpb25zKX0sWj1yJiZyLmRpZmY/ci5kaWZmOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIHQ7cmV0dXJuImZ1bmN0aW9uIj09PW4mJmUuY2FsbGJhY2s9PT10fHwib2JqZWN0Ij09PW4mJmUub3JpZ2luYWxEZWxlZ2F0ZT09PXR9LHo9Wm9uZVtab25lLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKV0sQz1mdW5jdGlvbih0LG4scixvLGMsdSl7cmV0dXJuIHZvaWQgMD09PWMmJihjPSExKSx2b2lkIDA9PT11JiYodT0hMSksZnVuY3Rpb24oKXt2YXIgcD10aGlzfHxlLGg9YXJndW1lbnRzWzFdO2lmKCFoKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgdj0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgaCl7aWYoIWguaGFuZGxlRXZlbnQpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Y9ITB9aWYoIWF8fGEodCxoLHAsYXJndW1lbnRzKSl7dmFyIGQsZz1hcmd1bWVudHNbMF0seT1hcmd1bWVudHNbMl07aWYoeilmb3IodmFyIG09MDttPHoubGVuZ3RoO20rKylpZihnPT09elttXSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGs9ITE7dm9pZCAwPT09eT9kPSExOiEwPT09eT9kPSEwOiExPT09eT9kPSExOihkPSEheSYmISF5LmNhcHR1cmUsaz0hIXkmJiEheS5vbmNlKTt2YXIgYixUPVpvbmUuY3VycmVudCx3PUxbZ107aWYodyliPXdbZD9zOmxdO2Vsc2V7dmFyIHg9ZisoZytsKSxPPWYrKGcrcyk7TFtnXT17fSxMW2ddW2xdPXgsTFtnXVtzXT1PLGI9ZD9POnh9dmFyIFMsRD1wW2JdLGo9ITE7aWYoRCl7aWYoaj0hMCxfKWZvcihtPTA7bTxELmxlbmd0aDttKyspaWYoWihEW21dLGgpKXJldHVybn1lbHNlIEQ9cFtiXT1bXTt2YXIgUD1wLmNvbnN0cnVjdG9yLm5hbWUsTT1xW1BdO00mJihTPU1bZ10pLFN8fChTPVArbitnKSxFLm9wdGlvbnM9eSxrJiYoRS5vcHRpb25zLm9uY2U9ITEpLEUudGFyZ2V0PXAsRS5jYXB0dXJlPWQsRS5ldmVudE5hbWU9ZyxFLmlzRXhpc3Rpbmc9ajt2YXIgQz1pP0Y6bnVsbDtDJiYoQy50YXNrRGF0YT1FKTt2YXIgUj1ULnNjaGVkdWxlRXZlbnRUYXNrKFMsaCxDLHIsbyk7cmV0dXJuIEUudGFyZ2V0PW51bGwsQyYmKEMudGFza0RhdGE9bnVsbCksayYmKHkub25jZT0hMCksUi5vcHRpb25zPXksUi50YXJnZXQ9cCxSLmNhcHR1cmU9ZCxSLmV2ZW50TmFtZT1nLHYmJihSLm9yaWdpbmFsRGVsZWdhdGU9aCksdT9ELnVuc2hpZnQoUik6RC5wdXNoKFIpLGM/cDp2b2lkIDB9fX07cmV0dXJuIFRbb109Qyh4LGQsaixQLGIpLHcmJihUW2ddPUModyx5LGZ1bmN0aW9uKGUpe3JldHVybiB3LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsZS5pbnZva2UsRS5vcHRpb25zKX0sUCxiLCEwKSksVFtjXT1mdW5jdGlvbigpe3ZhciB0LG49dGhpc3x8ZSxyPWFyZ3VtZW50c1swXSxvPWFyZ3VtZW50c1syXTt0PXZvaWQgMCE9PW8mJighMD09PW98fCExIT09byYmISFvJiYhIW8uY2FwdHVyZSk7dmFyIGk9YXJndW1lbnRzWzFdO2lmKCFpKXJldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighYXx8YShPLGksbixhcmd1bWVudHMpKXt2YXIgYyx1PUxbcl07dSYmKGM9dVt0P3M6bF0pO3ZhciBmPWMmJm5bY107aWYoZilmb3IodmFyIHA9MDtwPGYubGVuZ3RoO3ArKyl7dmFyIGg9ZltwXTtpZihaKGgsaSkpcmV0dXJuIGYuc3BsaWNlKHAsMSksaC5pc1JlbW92ZWQ9ITAsMD09PWYubGVuZ3RoJiYoaC5hbGxSZW1vdmVkPSEwLG5bY109bnVsbCksaC56b25lLmNhbmNlbFRhc2soaCksYj9uOnZvaWQgMH1yZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxUW3VdPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG49Vyh0aGlzfHxlLGFyZ3VtZW50c1swXSkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdO3QucHVzaChvLm9yaWdpbmFsRGVsZWdhdGU/by5vcmlnaW5hbERlbGVnYXRlOm8uY2FsbGJhY2spfXJldHVybiB0fSxUW3BdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc3x8ZSxuPWFyZ3VtZW50c1swXTtpZihuKXt2YXIgcj1MW25dO2lmKHIpe3ZhciBvPXRbcltsXV0saT10W3Jbc11dO2lmKG8pe3ZhciBhPW8uc2xpY2UoKTtmb3IoaD0wO2g8YS5sZW5ndGg7aCsrKXRoaXNbY10uY2FsbCh0aGlzLG4sKHU9YVtoXSkub3JpZ2luYWxEZWxlZ2F0ZT91Lm9yaWdpbmFsRGVsZWdhdGU6dS5jYWxsYmFjayx1Lm9wdGlvbnMpfWlmKGkpZm9yKGE9aS5zbGljZSgpLGg9MDtoPGEubGVuZ3RoO2grKyl7dmFyIHU7dGhpc1tjXS5jYWxsKHRoaXMsbiwodT1hW2hdKS5vcmlnaW5hbERlbGVnYXRlP3Uub3JpZ2luYWxEZWxlZ2F0ZTp1LmNhbGxiYWNrLHUub3B0aW9ucyl9fX1lbHNle2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciB2PUEuZXhlYyhmW2hdKSxkPXYmJnZbMV07ZCYmInJlbW92ZUxpc3RlbmVyIiE9PWQmJnRoaXNbcF0uY2FsbCh0aGlzLGQpfXRoaXNbcF0uY2FsbCh0aGlzLCJyZW1vdmVMaXN0ZW5lciIpfWlmKGIpcmV0dXJuIHRoaXN9LE0oVFtvXSx4KSxNKFRbY10sTyksRCYmTShUW3BdLEQpLFMmJk0oVFt1XSxTKSwhMH1mb3IodmFyIFQ9W10sdz0wO3c8dC5sZW5ndGg7dysrKVRbd109Yih0W3ddLHIpO3JldHVybiBUfWZ1bmN0aW9uIFcoZSx0KXt2YXIgbj1bXTtmb3IodmFyIHIgaW4gZSl7dmFyIG89QS5leGVjKHIpLGk9byYmb1sxXTtpZihpJiYoIXR8fGk9PT10KSl7dmFyIGE9ZVtyXTtpZihhKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKW4ucHVzaChhW2NdKX19cmV0dXJuIG59dmFyIFg9digiem9uZVRhc2siKTtmdW5jdGlvbiBLKGUsdCxuLHIpe3ZhciBvPW51bGwsaT1udWxsO24rPXI7dmFyIGE9e307ZnVuY3Rpb24gYyh0KXt2YXIgbj10LmRhdGE7cmV0dXJuIG4uYXJnc1swXT1mdW5jdGlvbigpe3RyeXt0Lmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXt0LmRhdGEmJnQuZGF0YS5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBuLmhhbmRsZUlkP2RlbGV0ZSBhW24uaGFuZGxlSWRdOm4uaGFuZGxlSWQmJihuLmhhbmRsZUlkW1hdPW51bGwpKX19LG4uaGFuZGxlSWQ9by5hcHBseShlLG4uYXJncyksdH1mdW5jdGlvbiB1KGUpe3JldHVybiBpKGUuZGF0YS5oYW5kbGVJZCl9bz16KGUsdCs9cixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgaVswXSl7dmFyIHM9aCh0LGlbMF0se2hhbmRsZUlkOm51bGwsaXNQZXJpb2RpYzoiSW50ZXJ2YWwiPT09cixkZWxheToiVGltZW91dCI9PT1yfHwiSW50ZXJ2YWwiPT09cj9pWzFdfHwwOm51bGwsYXJnczppfSxjLHUpO2lmKCFzKXJldHVybiBzO3ZhciBsPXMuZGF0YS5oYW5kbGVJZDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/YVtsXT1zOmwmJihsW1hdPXMpLGwmJmwucmVmJiZsLnVucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnVucmVmJiYocy5yZWY9bC5yZWYuYmluZChsKSxzLnVucmVmPWwudW5yZWYuYmluZChsKSksIm51bWJlciI9PXR5cGVvZiBsfHxsP2w6c31yZXR1cm4gbi5hcHBseShlLGkpfX0pLGk9eihlLG4sZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIG8saT1yWzBdOyJudW1iZXIiPT10eXBlb2YgaT9vPWFbaV06KG89aSYmaVtYXSl8fChvPWkpLG8mJiJzdHJpbmciPT10eXBlb2Ygby50eXBlPyJub3RTY2hlZHVsZWQiIT09by5zdGF0ZSYmKG8uY2FuY2VsRm4mJm8uZGF0YS5pc1BlcmlvZGljfHwwPT09by5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIGk/ZGVsZXRlIGFbaV06aSYmKGlbWF09bnVsbCksby56b25lLmNhbmNlbFRhc2sobykpOnQuYXBwbHkoZSxyKX19KX12YXIgVT1PYmplY3RbdigiZGVmaW5lUHJvcGVydHkiKV09T2JqZWN0LmRlZmluZVByb3BlcnR5LEI9T2JqZWN0W3YoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFk9T2JqZWN0LmNyZWF0ZSxKPXYoInVuY29uZmlndXJhYmxlcyIpO2Z1bmN0aW9uIFYoZSx0KXtyZXR1cm4gZSYmZVtKXSYmZVtKXVt0XX1mdW5jdGlvbiBHKGUsdCxuKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKG4pfHwobi5jb25maWd1cmFibGU9ITApLG4uY29uZmlndXJhYmxlfHwoZVtKXXx8T2JqZWN0LmlzRnJvemVuKGUpfHxVKGUsSix7d3JpdGFibGU6ITAsdmFsdWU6e319KSxlW0pdJiYoZVtKXVt0XT0hMCkpLG59ZnVuY3Rpb24gUShlLHQsbixyKXt0cnl7cmV0dXJuIFUoZSx0LG4pfWNhdGNoKGkpe2lmKCFuLmNvbmZpZ3VyYWJsZSl0aHJvdyBpO3ZvaWQgMD09PXI/ZGVsZXRlIG4uY29uZmlndXJhYmxlOm4uY29uZmlndXJhYmxlPXI7dHJ5e3JldHVybiBVKGUsdCxuKX1jYXRjaChyKXt2YXIgbz1udWxsO3RyeXtvPUpTT04uc3RyaW5naWZ5KG4pfWNhdGNoKGUpe289bi50b1N0cmluZygpfWNvbnNvbGUubG9nKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSAnIit0KyInIHdpdGggZGVzY3JpcHRvciAnIitvKyInIG9uIG9iamVjdCAnIitlKyInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIityKX19fXZhciAkPVsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BseWNvbm5lY3RlZCIsInZyZGlzcGxheWRpc2Nvbm5lY3RlZCIsInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiXSxlZT1bImVuY3J5cHRlZCIsIndhaXRpbmdmb3JrZXkiLCJtc25lZWRrZXkiLCJtb3ppbnRlcnJ1cHRiZWdpbiIsIm1vemludGVycnVwdGVuZCJdLHRlPVsibG9hZCJdLG5lPVsiYmx1ciIsImVycm9yIiwiZm9jdXMiLCJsb2FkIiwicmVzaXplIiwic2Nyb2xsIiwibWVzc2FnZWVycm9yIl0scmU9WyJib3VuY2UiLCJmaW5pc2giLCJzdGFydCJdLG9lPVsibG9hZHN0YXJ0IiwicHJvZ3Jlc3MiLCJhYm9ydCIsImVycm9yIiwibG9hZCIsInByb2dyZXNzIiwidGltZW91dCIsImxvYWRlbmQiLCJyZWFkeXN0YXRlY2hhbmdlIl0saWU9WyJ1cGdyYWRlbmVlZGVkIiwiY29tcGxldGUiLCJhYm9ydCIsInN1Y2Nlc3MiLCJlcnJvciIsImJsb2NrZWQiLCJ2ZXJzaW9uY2hhbmdlIiwiY2xvc2UiXSxhZT1bImNsb3NlIiwiZXJyb3IiLCJvcGVuIiwibWVzc2FnZSJdLGNlPVsiZXJyb3IiLCJtZXNzYWdlIl0sdWU9WyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0uY29uY2F0KFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLFsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlZXJyb3IiXSxbInRvZ2dsZSJdLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIl0sJCxbImJlZm9yZWNvcHkiLCJiZWZvcmVjdXQiLCJiZWZvcmVwYXN0ZSIsImNvcHkiLCJjdXQiLCJwYXN0ZSIsImRyYWdzdGFydCIsImxvYWRlbmQiLCJhbmltYXRpb25zdGFydCIsInNlYXJjaCIsInRyYW5zaXRpb25ydW4iLCJ0cmFuc2l0aW9uc3RhcnQiLCJ3ZWJraXRhbmltYXRpb25lbmQiLCJ3ZWJraXRhbmltYXRpb25pdGVyYXRpb24iLCJ3ZWJraXRhbmltYXRpb25zdGFydCIsIndlYmtpdHRyYW5zaXRpb25lbmQiXSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdKTtmdW5jdGlvbiBzZShlLHQsbixyKXtlJiZqKGUsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiB0O3ZhciByPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldD09PWV9KTtpZighcnx8MD09PXIubGVuZ3RoKXJldHVybiB0O3ZhciBvPXJbMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1vLmluZGV4T2YoZSl9KX0oZSx0LG4pLHIpfWZ1bmN0aW9uIGxlKGMsdSl7aWYoIXd8fHgpe3ZhciBzPSJ1bmRlZmluZWQiIT10eXBlb2YgV2ViU29ja2V0O2lmKGZ1bmN0aW9uKCl7aWYoKEV8fHgpJiYhZShIVE1MRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBFbGVtZW50KXt2YXIgbj1lKEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIik7aWYobiYmIW4uY29uZmlndXJhYmxlKXJldHVybiExfXZhciByPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxvPWUociwib25yZWFkeXN0YXRlY2hhbmdlIik7aWYobyl7dChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KTt2YXIgaT0hIShjPW5ldyBYTUxIdHRwUmVxdWVzdCkub25yZWFkeXN0YXRlY2hhbmdlO3JldHVybiB0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsb3x8e30pLGl9dmFyIGE9digiZmFrZSIpO3Qociwib25yZWFkeXN0YXRlY2hhbmdlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYV19LHNldDpmdW5jdGlvbihlKXt0aGlzW2FdPWV9fSk7dmFyIGMsdT1mdW5jdGlvbigpe307cmV0dXJuKGM9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vbnJlYWR5c3RhdGVjaGFuZ2U9dSxpPWNbYV09PT11LGMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsaX0oKSl7dmFyIGw9dS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXM7aWYoRSl7dmFyIGY9d2luZG93O3NlKGYsdWUuY29uY2F0KFsibWVzc2FnZWVycm9yIl0pLGwsbihmKSksc2UoRG9jdW1lbnQucHJvdG90eXBlLHVlLGwpLHZvaWQgMCE9PWYuU1ZHRWxlbWVudCYmc2UoZi5TVkdFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShIVE1MRWxlbWVudC5wcm90b3R5cGUsdWUsbCksc2UoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsZWUsbCksc2UoSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUsJC5jb25jYXQobmUpLGwpLHNlKEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsJC5jb25jYXQobmUpLGwpLHNlKEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLHRlLGwpLHNlKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSx0ZSxsKTt2YXIgaD1mLkhUTUxNYXJxdWVlRWxlbWVudDtoJiZzZShoLnByb3RvdHlwZSxyZSxsKTt2YXIgZD1mLldvcmtlcjtkJiZzZShkLnByb3RvdHlwZSxjZSxsKX1zZShYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsb2UsbCk7dmFyIGc9dS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2cmJnNlKGcmJmcucHJvdG90eXBlLG9lLGwpLCJ1bmRlZmluZWQiIT10eXBlb2YgSURCSW5kZXgmJihzZShJREJJbmRleC5wcm90b3R5cGUsaWUsbCksc2UoSURCUmVxdWVzdC5wcm90b3R5cGUsaWUsbCksc2UoSURCT3BlbkRCUmVxdWVzdC5wcm90b3R5cGUsaWUsbCksc2UoSURCRGF0YWJhc2UucHJvdG90eXBlLGllLGwpLHNlKElEQlRyYW5zYWN0aW9uLnByb3RvdHlwZSxpZSxsKSxzZShJREJDdXJzb3IucHJvdG90eXBlLGllLGwpKSxzJiZzZShXZWJTb2NrZXQucHJvdG90eXBlLGFlLGwpfWVsc2UhZnVuY3Rpb24oKXtmb3IodmFyIGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dWVbZV0sbj0ib24iK3Q7c2VsZi5hZGRFdmVudExpc3RlbmVyKHQsZnVuY3Rpb24oZSl7dmFyIHQscixvPWUudGFyZ2V0O2ZvcihyPW8/by5jb25zdHJ1Y3Rvci5uYW1lKyIuIituOiJ1bmtub3duLiIrbjtvOylvW25dJiYhb1tuXVtmZV0mJigodD1wKG9bbl0scikpW2ZlXT1vW25dLG9bbl09dCksbz1vLnBhcmVudEVsZW1lbnR9LCEwKX0sdD0wO3Q8dWUubGVuZ3RoO3QrKyllKHQpfSgpLFooIlhNTEh0dHBSZXF1ZXN0IikscyYmZnVuY3Rpb24odCxuKXt2YXIgYz1uLldlYlNvY2tldDtuLkV2ZW50VGFyZ2V0fHxOKG4sW2MucHJvdG90eXBlXSksbi5XZWJTb2NrZXQ9ZnVuY3Rpb24odCxuKXt2YXIgdSxzLGw9YXJndW1lbnRzLmxlbmd0aD4xP25ldyBjKHQsbik6bmV3IGModCksZj1lKGwsIm9ubWVzc2FnZSIpO3JldHVybiBmJiYhMT09PWYuY29uZmlndXJhYmxlPyh1PXIobCkscz1sLFtpLGEsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dVtlXT1mdW5jdGlvbigpe3ZhciB0PW8uY2FsbChhcmd1bWVudHMpO2lmKGU9PT1pfHxlPT09YSl7dmFyIG49dC5sZW5ndGg+MD90WzBdOnZvaWQgMDtpZihuKXt2YXIgcj1ab25lLl9fc3ltYm9sX18oIk9OX1BST1BFUlRZIituKTtsW3JdPXVbcl19fXJldHVybiBsW2VdLmFwcGx5KGwsdCl9fSkpOnU9bCxqKHUsWyJjbG9zZSIsImVycm9yIiwibWVzc2FnZSIsIm9wZW4iXSxzKSx1fTt2YXIgdT1uLldlYlNvY2tldDtmb3IodmFyIHMgaW4gYyl1W3NdPWNbc119KDAsdSl9fXZhciBmZT12KCJ1bmJvdW5kIik7Wm9uZS5fX2xvYWRfcGF0Y2goInV0aWwiLGZ1bmN0aW9uKGUsdCxuKXtuLnBhdGNoT25Qcm9wZXJ0aWVzPWosbi5wYXRjaE1ldGhvZD16LG4uYmluZEFyZ3VtZW50cz1rfSksWm9uZS5fX2xvYWRfcGF0Y2goInRpbWVycyIsZnVuY3Rpb24oZSl7SyhlLCJzZXQiLCJjbGVhciIsIlRpbWVvdXQiKSxLKGUsInNldCIsImNsZWFyIiwiSW50ZXJ2YWwiKSxLKGUsInNldCIsImNsZWFyIiwiSW1tZWRpYXRlIil9KSxab25lLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixmdW5jdGlvbihlKXtLKGUsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLEsoZSwibW96UmVxdWVzdCIsIm1vekNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksSyhlLCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXSxyPTA7cjxuLmxlbmd0aDtyKyspeihlLG5bcl0sZnVuY3Rpb24obixyLG8pe3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiB0LmN1cnJlbnQucnVuKG4sZSxpLG8pfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihlLHQsbil7dmFyIHI9dC5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIik7ZVtyXSYmKHRbcl09ZVtyXSksZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSx0KXt2YXIgbj1lLkV2ZW50O24mJm4ucHJvdG90eXBlJiZ0LnBhdGNoTWV0aG9kKG4ucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3RbSF09ITAsZSYmZS5hcHBseSh0LG4pfX0pfShlLHQpfShlLG4pLGZ1bmN0aW9uKGUsdCl7dmFyIG49IkFuY2hvcixBcmVhLEF1ZGlvLEJSLEJhc2UsQmFzZUZvbnQsQm9keSxCdXR0b24sQ2FudmFzLENvbnRlbnQsRExpc3QsRGlyZWN0b3J5LERpdixFbWJlZCxGaWVsZFNldCxGb250LEZvcm0sRnJhbWUsRnJhbWVTZXQsSFIsSGVhZCxIZWFkaW5nLEh0bWwsSUZyYW1lLEltYWdlLElucHV0LEtleWdlbixMSSxMYWJlbCxMZWdlbmQsTGluayxNYXAsTWFycXVlZSxNZWRpYSxNZW51LE1ldGEsTWV0ZXIsTW9kLE9MaXN0LE9iamVjdCxPcHRHcm91cCxPcHRpb24sT3V0cHV0LFBhcmFncmFwaCxQcmUsUHJvZ3Jlc3MsUXVvdGUsU2NyaXB0LFNlbGVjdCxTb3VyY2UsU3BhbixTdHlsZSxUYWJsZUNhcHRpb24sVGFibGVDZWxsLFRhYmxlQ29sLFRhYmxlLFRhYmxlUm93LFRhYmxlU2VjdGlvbixUZXh0QXJlYSxUaXRsZSxUcmFjayxVTGlzdCxVbmtub3duLFZpZGVvIixyPSJBcHBsaWNhdGlvbkNhY2hlLEV2ZW50U291cmNlLEZpbGVSZWFkZXIsSW5wdXRNZXRob2RDb250ZXh0LE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxOb2RlLFBlcmZvcm1hbmNlLFNWR0VsZW1lbnRJbnN0YW5jZSxTaGFyZWRXb3JrZXIsVGV4dFRyYWNrLFRleHRUcmFja0N1ZSxUZXh0VHJhY2tMaXN0LFdlYktpdE5hbWVkRmxvdyxXaW5kb3csV29ya2VyLFdvcmtlckdsb2JhbFNjb3BlLFhNTEh0dHBSZXF1ZXN0LFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQsWE1MSHR0cFJlcXVlc3RVcGxvYWQsSURCUmVxdWVzdCxJREJPcGVuREJSZXF1ZXN0LElEQkRhdGFiYXNlLElEQlRyYW5zYWN0aW9uLElEQkN1cnNvcixEQkluZGV4LFdlYlNvY2tldCIuc3BsaXQoIiwiKSxvPVtdLGk9ZS53dGYsYT1uLnNwbGl0KCIsIik7aT9vPWEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiJIVE1MIitlKyJFbGVtZW50In0pLmNvbmNhdChyKTplLkV2ZW50VGFyZ2V0P28ucHVzaCgiRXZlbnRUYXJnZXQiKTpvPXI7Zm9yKHZhciBjPWUuX19ab25lX2Rpc2FibGVfSUVfY2hlY2t8fCExLHU9ZS5fX1pvbmVfZW5hYmxlX2Nyb3NzX2NvbnRleHRfY2hlY2t8fCExLHA9SSgpLGg9ImZ1bmN0aW9uIF9fQlJPV1NFUlRPT0xTX0NPTlNPTEVfU0FGRUZVTkMoKSB7IFtuYXRpdmUgY29kZV0gfSIsdj0wO3Y8dWUubGVuZ3RoO3YrKyl7dmFyIGQ9ZisoKGs9dWVbdl0pK2wpLGc9ZisoaytzKTtMW2tdPXt9LExba11bbF09ZCxMW2tdW3NdPWd9Zm9yKHY9MDt2PG4ubGVuZ3RoO3YrKylmb3IodmFyIHk9YVt2XSxfPXFbeV09e30sbT0wO208dWUubGVuZ3RoO20rKyl7dmFyIGs7X1trPXVlW21dXT15KyIuYWRkRXZlbnRMaXN0ZW5lcjoiK2t9dmFyIGI9W107Zm9yKHY9MDt2PG8ubGVuZ3RoO3YrKyl7dmFyIFQ9ZVtvW3ZdXTtiLnB1c2goVCYmVC5wcm90b3R5cGUpfU4oZSxiLHt2aDpmdW5jdGlvbihlLHQsbixyKXtpZighYyYmcCl7aWYodSl0cnl7dmFyIG87aWYoIltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSI9PT0obz10LnRvU3RyaW5nKCkpfHxvPT1oKXJldHVybiBlLmFwcGx5KG4sciksITF9Y2F0Y2godCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1lbHNlIGlmKCJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iPT09KG89dC50b1N0cmluZygpKXx8bz09aClyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYodSl0cnl7dC50b1N0cmluZygpfWNhdGNoKHQpe3JldHVybiBlLmFwcGx5KG4sciksITF9cmV0dXJuITB9fSksdC5wYXRjaEV2ZW50VGFyZ2V0PU59KGUsbik7dmFyIG89ZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O28mJm8ucHJvdG90eXBlJiZuLnBhdGNoRXZlbnRUYXJnZXQoZSxbby5wcm90b3R5cGVdKSxaKCJNdXRhdGlvbk9ic2VydmVyIiksWigiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpLFooIkludGVyc2VjdGlvbk9ic2VydmVyIiksWigiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IixmdW5jdGlvbih0LG4scil7bGUoMCx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oZSx0LG4pe2lmKFYoZSx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYXNzaWduIHRvIHJlYWQgb25seSBwcm9wZXJ0eSAnIit0KyInIG9mICIrZSk7dmFyIHI9bi5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT10JiYobj1HKGUsdCxuKSksUShlLHQsbixyKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHRbbl0pfSksZX0sT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiJvYmplY3QiIT10eXBlb2YgdHx8T2JqZWN0LmlzRnJvemVuKHQpfHxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09RyhlLG4sdFtuXSl9KSxZKGUsdCl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1CKGUsdCk7cmV0dXJuIFYoZSx0KSYmKG4uY29uZmlndXJhYmxlPSExKSxufSxmdW5jdGlvbihuKXtpZigoRXx8eCkmJiJyZWdpc3RlckVsZW1lbnQiaW4gdC5kb2N1bWVudCl7dmFyIHI9ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50LG89WyJjcmVhdGVkQ2FsbGJhY2siLCJhdHRhY2hlZENhbGxiYWNrIiwiZGV0YWNoZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdO2RvY3VtZW50LnJlZ2lzdGVyRWxlbWVudD1mdW5jdGlvbih0LG4pe3JldHVybiBuJiZuLnByb3RvdHlwZSYmby5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByLG8saSxhLGM9IkRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudDo6Iit0LHU9bi5wcm90b3R5cGU7aWYodS5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIHM9ZSh1LHQpO3MmJnMudmFsdWU/KHMudmFsdWU9cChzLnZhbHVlLGMpLGE9KGk9cykuY29uZmlndXJhYmxlLFEocj1uLnByb3RvdHlwZSxvPXQsaT1HKHIsbyxpKSxhKSk6dVt0XT1wKHVbdF0sYyl9ZWxzZSB1W3RdJiYodVt0XT1wKHVbdF0sYykpfSksci5jYWxsKGRvY3VtZW50LHQsbil9LE0oZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50LHIpfX0oKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJjYW52YXMiLGZ1bmN0aW9uKGUpe3ZhciB0PWUuSFRNTENhbnZhc0VsZW1lbnQ7dm9pZCAwIT09dCYmdC5wcm90b3R5cGUmJnQucHJvdG90eXBlLnRvQmxvYiYmZnVuY3Rpb24oZSxuLHIpe3ZhciBvPW51bGw7ZnVuY3Rpb24gaShlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYXJnc1t0LmNiSWR4XT1mdW5jdGlvbigpe2UuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sby5hcHBseSh0LnRhcmdldCx0LmFyZ3MpLGV9bz16KHQucHJvdG90eXBlLCJ0b0Jsb2IiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJue25hbWU6IkhUTUxDYW52YXNFbGVtZW50LnRvQmxvYiIsdGFyZ2V0OmUsY2JJZHg6MCxhcmdzOnR9fSh0LG4pO3JldHVybiByLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2YgbltyLmNiSWR4XT9oKHIubmFtZSxuW3IuY2JJZHhdLHIsaSxudWxsKTplLmFwcGx5KHQsbil9fSl9KCl9KSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIixmdW5jdGlvbihlLHQpeyFmdW5jdGlvbih0KXt2YXIgcz1YTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsbD1zW2NdLGY9c1t1XTtpZighbCl7dmFyIHA9ZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2lmKHApe3ZhciB2PXAucHJvdG90eXBlO2w9dltjXSxmPXZbdV19fXZhciBkPSJyZWFkeXN0YXRlY2hhbmdlIixnPSJzY2hlZHVsZWQiO2Z1bmN0aW9uIHkoZSl7WE1MSHR0cFJlcXVlc3RbaV09ITE7dmFyIHQ9ZS5kYXRhLHI9dC50YXJnZXQsYT1yW29dO2x8fChsPXJbY10sZj1yW3VdKSxhJiZmLmNhbGwocixkLGEpO3ZhciBzPXJbb109ZnVuY3Rpb24oKXtyLnJlYWR5U3RhdGU9PT1yLkRPTkUmJiF0LmFib3J0ZWQmJlhNTEh0dHBSZXF1ZXN0W2ldJiZlLnN0YXRlPT09ZyYmZS5pbnZva2UoKX07cmV0dXJuIGwuY2FsbChyLGQscykscltuXXx8KHJbbl09ZSksYi5hcHBseShyLHQuYXJncyksWE1MSHR0cFJlcXVlc3RbaV09ITAsZX1mdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIG0oZSl7dmFyIHQ9ZS5kYXRhO3JldHVybiB0LmFib3J0ZWQ9ITAsVC5hcHBseSh0LnRhcmdldCx0LmFyZ3MpfXZhciBrPXoocywib3BlbiIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtyXT0wPT10WzJdLGVbYV09dFsxXSxrLmFwcGx5KGUsdCl9fSksYj16KHMsInNlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbcl0/Yi5hcHBseShlLHQpOmgoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLF8se3RhcmdldDplLHVybDplW2FdLGlzUGVyaW9kaWM6ITEsZGVsYXk6bnVsbCxhcmdzOnQsYWJvcnRlZDohMX0seSxtKX19KSxUPXoocywiYWJvcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWVbbl07aWYodCYmInN0cmluZyI9PXR5cGVvZiB0LnR5cGUpe2lmKG51bGw9PXQuY2FuY2VsRm58fHQuZGF0YSYmdC5kYXRhLmFib3J0ZWQpcmV0dXJuO3Quem9uZS5jYW5jZWxUYXNrKHQpfX19KX0oKTt2YXIgbj12KCJ4aHJUYXNrIikscj12KCJ4aHJTeW5jIiksbz12KCJ4aHJMaXN0ZW5lciIpLGk9digieGhyU2NoZWR1bGVkIiksYT12KCJ4aHJVUkwiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsZnVuY3Rpb24odCl7dC5uYXZpZ2F0b3ImJnQubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbih0LG4pe2Zvcih2YXIgcj10LmNvbnN0cnVjdG9yLm5hbWUsbz1mdW5jdGlvbihvKXt2YXIgaT1uW29dLGE9dFtpXTtpZihhKXtpZighYihlKHQsaSkpKXJldHVybiJjb250aW51ZSI7dFtpXT1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsayhhcmd1bWVudHMscisiLiIraSkpfTtyZXR1cm4gTSh0LGUpLHR9KGEpfX0saT0wO2k8bi5sZW5ndGg7aSsrKW8oaSl9KHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLFsiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2F0Y2hQb3NpdGlvbiJdKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24obil7VyhlLHQpLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG89ZS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ7aWYobyl7dmFyIGk9bmV3IG8odCx7cHJvbWlzZTpuLnByb21pc2UscmVhc29uOm4ucmVqZWN0aW9ufSk7ci5pbnZva2UoaSl9fSl9fWUuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYodFt2KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1uKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSx0W3YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPW4oInJlamVjdGlvbmhhbmRsZWQiKSl9KX0oKX0sIjFUc0EiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWV9fX0sIjJPaUYiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGV9fSwzOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigiaE4vZyIpfSwiM0x5aiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIktyb0oiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgbyBpbiB0KXIoZSxvLHRbb10sbik7cmV0dXJuIGV9fSwiNDVUdiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIk9QM1kiKSxhPXIuaGFzLGM9ci5nZXQsdT1yLmtleSxzPWZ1bmN0aW9uKGUsdCxuKXtpZihhKGUsdCxuKSlyZXR1cm4gYyhlLHQsbik7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXI/cyhlLHIsbik6dm9pZCAwfTtyLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSkpfX0pfSwiNDlENCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5zZXQ7ci5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGUsdCxuLHIpe2EoZSx0LG8obiksaShyKSl9fSl9LCI0TGlEIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImR5WlgiKSxvPW4oIlhLRlUiKSxpPW4oIktyb0oiKSxhPW4oIjNMeWoiKSxjPW4oIlo2dkYiKSx1PW4oIlNsa1kiKSxzPW4oIjlnWDciKSxsPW4oIjAvUjQiKSxmPW4oImVlVnEiKSxwPW4oIlhNVmgiKSxoPW4oImZ5RHEiKSx2PW4oIlhiemkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZCxnLHkpe3ZhciBfPXJbZV0sbT1fLGs9Zz8ic2V0IjoiYWRkIixiPW0mJm0ucHJvdG90eXBlLFQ9e30sdz1mdW5jdGlvbihlKXt2YXIgdD1iW2VdO2koYixlLCJkZWxldGUiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoeSYmIWwoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHkmJiFsKGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImdldCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHkmJiFsKGUpP3ZvaWQgMDp0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplKSx0aGlzfTpmdW5jdGlvbihlLG4pe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUsbiksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbSYmKHl8fGIuZm9yRWFjaCYmIWYoZnVuY3Rpb24oKXsobmV3IG0pLmVudHJpZXMoKS5uZXh0KCl9KSkpe3ZhciBFPW5ldyBtLHg9RVtrXSh5P3t9Oi0wLDEpIT1FLE89ZihmdW5jdGlvbigpe0UuaGFzKDEpfSksUz1wKGZ1bmN0aW9uKGUpe25ldyBtKGUpfSksRD0heSYmZihmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgbSx0PTU7dC0tOyllW2tdKHQsdCk7cmV0dXJuIWUuaGFzKC0wKX0pO1N8fCgobT10KGZ1bmN0aW9uKHQsbil7cyh0LG0sZSk7dmFyIHI9dihuZXcgXyx0LG0pO3JldHVybiB2b2lkIDAhPW4mJnUobixnLHJba10scikscn0pKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPW0pLChPfHxEKSYmKHcoImRlbGV0ZSIpLHcoImhhcyIpLGcmJncoImdldCIpKSwoRHx8eCkmJncoaykseSYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9ZWxzZSBtPWQuZ2V0Q29uc3RydWN0b3IodCxlLGcsayksYShtLnByb3RvdHlwZSxuKSxjLk5FRUQ9ITA7cmV0dXJuIGgobSxlKSxUW2VdPW0sbyhvLkcrby5XK28uRioobSE9XyksVCkseXx8ZC5zZXRTdHJvbmcobSxlLGcpLG19fSwiNFI0dSI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIuc3BsaXQoIiwiKX0sIjZGTU8iOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJFV21DIiksaT1uKCJLMHhVIikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG8oZSkmJigiZnVuY3Rpb24iIT10eXBlb2YodD1lLmNvbnN0cnVjdG9yKXx8dCE9PUFycmF5JiYhbyh0LnByb3RvdHlwZSl8fCh0PXZvaWQgMCkscih0KSYmbnVsbD09PSh0PXRbaV0pJiYodD12b2lkIDApKSx2b2lkIDA9PT10P0FycmF5OnR9fSwiN0RsaCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIuaGFzLGE9ci5rZXk7ci5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sIjlBQW4iOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigid212RyIpLG89bigiczVxWSIpO2UuZXhwb3J0cz1uKCI0TGlEIikoIk1hcCIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0RW50cnkobyh0aGlzLCJNYXAiKSxlKTtyZXR1cm4gdCYmdC52fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5kZWYobyh0aGlzLCJNYXAiKSwwPT09ZT8wOmUsdCl9fSxyLCEwKX0sIjlnWDciOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCEoZSBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1yJiZyIGluIGUpdGhyb3cgVHlwZUVycm9yKG4rIjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGV9fSxBZm56OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiTFFBYyIpLG89bigiWEtGVSIpLGk9bigiS3JvSiIpLGE9bigiTXVrYiIpLGM9bigiaFBJUSIpLHU9bigiUWFEYiIpLHM9bigiZnlEcSIpLGw9bigiT1AzWSIpLGY9bigiSzB4VSIpKCJpdGVyYXRvciIpLHA9IShbXS5rZXlzJiYibmV4dCJpbltdLmtleXMoKSksaD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sdixkLGcseSl7dShuLHQsdik7dmFyIF8sbSxrLGI9ZnVuY3Rpb24oZSl7aWYoIXAmJmUgaW4geClyZXR1cm4geFtlXTtzd2l0Y2goZSl7Y2FzZSJrZXlzIjpjYXNlInZhbHVlcyI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX0sVD10KyIgSXRlcmF0b3IiLHc9InZhbHVlcyI9PWQsRT0hMSx4PWUucHJvdG90eXBlLE89eFtmXXx8eFsiQEBpdGVyYXRvciJdfHxkJiZ4W2RdLFM9T3x8YihkKSxEPWQ/dz9iKCJlbnRyaWVzIik6Uzp2b2lkIDAsaj0iQXJyYXkiPT10JiZ4LmVudHJpZXN8fE87aWYoaiYmKGs9bChqLmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiZrLm5leHQmJihzKGssVCwhMCkscnx8ImZ1bmN0aW9uIj09dHlwZW9mIGtbZl18fGEoayxmLGgpKSx3JiZPJiYidmFsdWVzIiE9PU8ubmFtZSYmKEU9ITAsUz1mdW5jdGlvbigpe3JldHVybiBPLmNhbGwodGhpcyl9KSxyJiYheXx8IXAmJiFFJiZ4W2ZdfHxhKHgsZixTKSxjW3RdPVMsY1tUXT1oLGQpaWYoXz17dmFsdWVzOnc/UzpiKCJ2YWx1ZXMiKSxrZXlzOmc/UzpiKCJrZXlzIiksZW50cmllczpEfSx5KWZvcihtIGluIF8pbSBpbiB4fHxpKHgsbSxfW21dKTtlbHNlIG8oby5QK28uRioocHx8RSksdCxfKTtyZXR1cm4gX319LEJxZlY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIuZ2V0LGE9ci5rZXk7ci5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sQ2trVDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigibTBQcCIpLG89bigiWW1xdiIpLGk9bigiUy9qLyIpLGE9bigibmU4aSIpLGM9bigielJ3byIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTE9PWUsdT0yPT1lLHM9Mz09ZSxsPTQ9PWUsZj02PT1lLHA9NT09ZXx8ZixoPXR8fGM7cmV0dXJuIGZ1bmN0aW9uKHQsYyx2KXtmb3IodmFyIGQsZyx5PWkodCksXz1vKHkpLG09cihjLHYsMyksaz1hKF8ubGVuZ3RoKSxiPTAsVD1uP2godCxrKTp1P2godCwwKTp2b2lkIDA7az5iO2IrKylpZigocHx8YiBpbiBfKSYmKGc9bShkPV9bYl0sYix5KSxlKSlpZihuKVRbYl09ZztlbHNlIGlmKGcpc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGQ7Y2FzZSA2OnJldHVybiBiO2Nhc2UgMjpULnB1c2goZCl9ZWxzZSBpZihsKXJldHVybiExO3JldHVybiBmPy0xOnN8fGw/bDpUfX19LERWZ0E6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInpoQWIiKSxvPW4oIjRSNHUiKTtlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiByKGUsbyl9fSxFSzBFOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKCJDa2tUIikoMCksaT1uKCJLcm9KIiksYT1uKCJaNnZGIiksYz1uKCJjek5LIiksdT1uKCJaRDY3Iikscz1uKCIwL1I0IiksbD1uKCJlZVZxIiksZj1uKCJzNXFZIikscD1hLmdldFdlYWssaD1PYmplY3QuaXNFeHRlbnNpYmxlLHY9dS51ZnN0b3JlLGQ9e30sZz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHk9e2dldDpmdW5jdGlvbihlKXtpZihzKGUpKXt2YXIgdD1wKGUpO3JldHVybiEwPT09dD92KGYodGhpcywiV2Vha01hcCIpKS5nZXQoZSk6dD90W3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB1LmRlZihmKHRoaXMsIldlYWtNYXAiKSxlLHQpfX0sXz1lLmV4cG9ydHM9bigiNExpRCIpKCJXZWFrTWFwIixnLHksdSwhMCwhMCk7bChmdW5jdGlvbigpe3JldHVybiA3IT0obmV3IF8pLnNldCgoT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KShkKSw3KS5nZXQoZCl9KSYmKGMoKHI9dS5nZXRDb25zdHJ1Y3RvcihnLCJXZWFrTWFwIikpLnByb3RvdHlwZSx5KSxhLk5FRUQ9ITAsbyhbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLGZ1bmN0aW9uKGUpe3ZhciB0PV8ucHJvdG90eXBlLG49dFtlXTtpKHQsZSxmdW5jdGlvbih0LG8pe2lmKHModCkmJiFoKHQpKXt0aGlzLl9mfHwodGhpcy5fZj1uZXcgcik7dmFyIGk9dGhpcy5fZltlXSh0LG8pO3JldHVybiJzZXQiPT1lP3RoaXM6aX1yZXR1cm4gbi5jYWxsKHRoaXMsdCxvKX0pfSkpfSxFV21DOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJMWld0Iik7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJBcnJheSI9PXIoZSl9fSxFZW1IOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJVcWNGIiksbz1uKCJSakQvIiksaT1uKCJhQ0ZqIiksYT1uKCJhcG1UIiksYz1uKCJhYWd4IiksdT1uKCJ4cHFsIikscz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1uKCJuaDRnIik/czpmdW5jdGlvbihlLHQpe2lmKGU9aShlKSx0PWEodCwhMCksdSl0cnl7cmV0dXJuIHMoZSx0KX1jYXRjaChlKXt9aWYoYyhlLHQpKXJldHVybiBvKCFyLmYuY2FsbChlLHQpLGVbdF0pfX0sRkpXNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaHN3YSIpLG89bigieTN3OSIpLGk9bigiRFZnQSIpO2UuZXhwb3J0cz1uKCJuaDRnIik/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtvKGUpO2Zvcih2YXIgbixhPWkodCksYz1hLmxlbmd0aCx1PTA7Yz51OylyLmYoZSxuPWFbdSsrXSx0W25dKTtyZXR1cm4gZX19LEZaY3E6ZnVuY3Rpb24oZSx0LG4pe24oIjQ5RDQiKSxuKCJ6cStDIiksbigiNDVUdiIpLG4oInVBdGQiKSxuKCJCcWZWIiksbigiZk4vMyIpLG4oImlXK1MiKSxuKCI3RGxoIiksbigiT3B4YiIpLGUuZXhwb3J0cz1uKCJnM2c1IikuUmVmbGVjdH0sSDZoZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieTN3OSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvKXt0cnl7cmV0dXJuIG8/dChyKG4pWzBdLG5bMV0pOnQobil9Y2F0Y2godCl7dmFyIGk9ZS5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmcihpLmNhbGwoZSkpLHR9fX0sIkk4YSsiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJMWld0Iiksbz1uKCJLMHhVIikoInRvU3RyaW5nVGFnIiksaT0iQXJndW1lbnRzIj09cihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLGE7cmV0dXJuIHZvaWQgMD09PWU/IlVuZGVmaW5lZCI6bnVsbD09PWU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PU9iamVjdChlKSxvKSk/bjppP3IodCk6Ik9iamVjdCI9PShhPXIodCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsZWU/IkFyZ3VtZW50cyI6YX19LEl3NzE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oImR5WlgiKS5kb2N1bWVudCxpPXIobykmJnIoby5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KGUpOnt9fX0sIkorNmUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJJOGErIiksbz1uKCJLMHhVIikoIml0ZXJhdG9yIiksaT1uKCJoUElRIik7ZS5leHBvcnRzPW4oImczZzUiKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihlKXtpZih2b2lkIDAhPWUpcmV0dXJuIGVbb118fGVbIkBAaXRlcmF0b3IiXXx8aVtyKGUpXX19LEppRWE6ZnVuY3Rpb24oZSx0KXt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sSzB4VTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVlRlciIpKCJ3a3MiKSxvPW4oInlscXMiKSxpPW4oImR5WlgiKS5TeW1ib2wsYT0iZnVuY3Rpb24iPT10eXBlb2YgaTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1hJiZpW2VdfHwoYT9pOm8pKCJTeW1ib2wuIitlKSl9KS5zdG9yZT1yfSxLcm9KOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIiksbz1uKCJNdWtiIiksaT1uKCJhYWd4IiksYT1uKCJ5bHFzIikoInNyYyIpLGM9RnVuY3Rpb24udG9TdHJpbmcsdT0oIiIrYykuc3BsaXQoInRvU3RyaW5nIik7bigiZzNnNSIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuY2FsbChlKX0sKGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixjKXt2YXIgcz0iZnVuY3Rpb24iPT10eXBlb2YgbjtzJiYoaShuLCJuYW1lIil8fG8obiwibmFtZSIsdCkpLGVbdF0hPT1uJiYocyYmKGkobixhKXx8byhuLGEsZVt0XT8iIitlW3RdOnUuam9pbihTdHJpbmcodCkpKSksZT09PXI/ZVt0XT1uOmM/ZVt0XT9lW3RdPW46byhlLHQsbik6KGRlbGV0ZSBlW3RdLG8oZSx0LG4pKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ0aGlzW2FdfHxjLmNhbGwodGhpcyl9KX0sS3V0aDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieTN3OSIpLG89bigiRkpXNSIpLGk9bigiNFI0dSIpLGE9bigiWVR2QSIpKCJJRV9QUk9UTyIpLGM9ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24oKXt2YXIgZSx0PW4oIkl3NzEiKSgiaWZyYW1lIikscj1pLmxlbmd0aDtmb3IodC5zdHlsZS5kaXNwbGF5PSJub25lIixuKCIrckx2IikuYXBwZW5kQ2hpbGQodCksdC5zcmM9ImphdmFzY3JpcHQ6IiwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLGUuY2xvc2UoKSx1PWUuRjtyLS07KWRlbGV0ZSB1LnByb3RvdHlwZVtpW3JdXTtyZXR1cm4gdSgpfTtlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KGMucHJvdG90eXBlPXIoZSksbj1uZXcgYyxjLnByb3RvdHlwZT1udWxsLG5bYV09ZSk6bj11KCksdm9pZCAwPT09dD9uOm8obix0KX19LExRQWM6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ITF9LExaV3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LE02UWo6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhQSVEiKSxvPW4oIksweFUiKSgiaXRlcmF0b3IiKSxpPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihyLkFycmF5PT09ZXx8aVtvXT09PWUpfX0sTXVrYjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaHN3YSIpLG89bigiUmpELyIpO2UuZXhwb3J0cz1uKCJuaDRnIik/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByLmYoZSx0LG8oMSxuKSl9OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLGV9fSxONmNKOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCI5QUFuIiksbz1uKCJYS0ZVIiksaT1uKCJWVGVyIikoIm1ldGFkYXRhIiksYT1pLnN0b3JlfHwoaS5zdG9yZT1uZXcobigiRUswRSIpKSksYz1mdW5jdGlvbihlLHQsbil7dmFyIG89YS5nZXQoZSk7aWYoIW8pe2lmKCFuKXJldHVybjthLnNldChlLG89bmV3IHIpfXZhciBpPW8uZ2V0KHQpO2lmKCFpKXtpZighbilyZXR1cm47by5zZXQodCxpPW5ldyByKX1yZXR1cm4gaX07ZS5leHBvcnRzPXtzdG9yZTphLG1hcDpjLGhhczpmdW5jdGlvbihlLHQsbil7dmFyIHI9Yyh0LG4sITEpO3JldHVybiB2b2lkIDAhPT1yJiZyLmhhcyhlKX0sZ2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwhMSk7cmV0dXJuIHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KGUpfSxzZXQ6ZnVuY3Rpb24oZSx0LG4scil7YyhuLHIsITApLnNldChlLHQpfSxrZXlzOmZ1bmN0aW9uKGUsdCl7dmFyIG49YyhlLHQsITEpLHI9W107cmV0dXJuIG4mJm4uZm9yRWFjaChmdW5jdGlvbihlLHQpe3IucHVzaCh0KX0pLHJ9LGtleTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8InN5bWJvbCI9PXR5cGVvZiBlP2U6U3RyaW5nKGUpfSxleHA6ZnVuY3Rpb24oZSl7byhvLlMsIlJlZmxlY3QiLGUpfX19LE9QM1k6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImFhZ3giKSxvPW4oIlMvai8iKSxpPW4oIllUdkEiKSgiSUVfUFJPVE8iKSxhPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9byhlKSxyKGUsaSk/ZVtpXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9hOm51bGx9fSxPcHhiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1uKCIyT2lGIiksYT1yLmtleSxjPXIuc2V0O3IuZXhwKHttZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe2MoZSx0LCh2b2lkIDAhPT1yP286aSkobiksYShyKSl9fX0pfSxRM25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJTbGtZIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107cmV0dXJuIHIoZSwhMSxuLnB1c2gsbix0KSxufX0sUWFEYjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkt1dGgiKSxvPW4oIlJqRC8iKSxpPW4oImZ5RHEiKSxhPXt9O24oIk11a2IiKShhLG4oIksweFUiKSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlLnByb3RvdHlwZT1yKGEse25leHQ6bygxLG4pfSksaShlLHQrIiBJdGVyYXRvciIpfX0sUllpNzpmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOihlPjA/cjpuKShlKX19LCJSakQvIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX19LCJTL2ovIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigidmhQVSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHIoZSkpfX0sU2xrWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigibTBQcCIpLG89bigiSDZoZiIpLGk9bigiTTZRaiIpLGE9bigieTN3OSIpLGM9bigibmU4aSIpLHU9bigiSis2ZSIpLHM9e30sbD17fTsodD1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZixwKXt2YXIgaCx2LGQsZyx5PXA/ZnVuY3Rpb24oKXtyZXR1cm4gZX06dShlKSxfPXIobixmLHQ/MjoxKSxtPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgaXRlcmFibGUhIik7aWYoaSh5KSl7Zm9yKGg9YyhlLmxlbmd0aCk7aD5tO20rKylpZigoZz10P18oYSh2PWVbbV0pWzBdLHZbMV0pOl8oZVttXSkpPT09c3x8Zz09PWwpcmV0dXJuIGd9ZWxzZSBmb3IoZD15LmNhbGwoZSk7ISh2PWQubmV4dCgpKS5kb25lOylpZigoZz1vKGQsXyx2LnZhbHVlLHQpKT09PXN8fGc9PT1sKXJldHVybiBnfSkuQlJFQUs9cyx0LlJFVFVSTj1sfSxUMzliOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigid212RyIpLG89bigiczVxWSIpO2UuZXhwb3J0cz1uKCI0TGlEIikoIlNldCIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKGUpe3JldHVybiByLmRlZihvKHRoaXMsIlNldCIpLGU9MD09PWU/MDplLGUpfX0scil9LFVxY0Y6ZnVuY3Rpb24oZSx0KXt0LmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LFZUZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImczZzUiKSxvPW4oImR5WlgiKSxpPW9bIl9fY29yZS1qc19zaGFyZWRfXyJdfHwob1siX19jb3JlLWpzX3NoYXJlZF9fIl09e30pOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaVtlXXx8KGlbZV09dm9pZCAwIT09dD90Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246ci52ZXJzaW9uLG1vZGU6bigiTFFBYyIpPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4YTkgMjAxOCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sWEtGVTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZHlaWCIpLG89bigiZzNnNSIpLGk9bigiTXVrYiIpLGE9bigiS3JvSiIpLGM9bigibTBQcCIpLHU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzLGwsZixwLGg9ZSZ1LkYsdj1lJnUuRyxkPWUmdS5QLGc9ZSZ1LkIseT12P3I6ZSZ1LlM/clt0XXx8KHJbdF09e30pOihyW3RdfHx7fSkucHJvdG90eXBlLF89dj9vOm9bdF18fChvW3RdPXt9KSxtPV8ucHJvdG90eXBlfHwoXy5wcm90b3R5cGU9e30pO2ZvcihzIGluIHYmJihuPXQpLG4pZj0oKGw9IWgmJnkmJnZvaWQgMCE9PXlbc10pP3k6bilbc10scD1nJiZsP2MoZixyKTpkJiYiZnVuY3Rpb24iPT10eXBlb2YgZj9jKEZ1bmN0aW9uLmNhbGwsZik6Zix5JiZhKHkscyxmLGUmdS5VKSxfW3NdIT1mJiZpKF8scyxwKSxkJiZtW3NdIT1mJiYobVtzXT1mKX07ci5jb3JlPW8sdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sWE1WaDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiSzB4VSIpKCJpdGVyYXRvciIpLG89ITE7dHJ5e3ZhciBpPVs3XVtyXSgpO2kucmV0dXJuPWZ1bmN0aW9uKCl7bz0hMH0sQXJyYXkuZnJvbShpLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKGUpe31lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighdCYmIW8pcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBpPVs3XSxhPWlbcl0oKTthLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX0saVtyXT1mdW5jdGlvbigpe3JldHVybiBhfSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gbn19LFhiemk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oImk1ZGMiKS5zZXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxhPXQuY29uc3RydWN0b3I7cmV0dXJuIGEhPT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgYSYmKGk9YS5wcm90b3R5cGUpIT09bi5wcm90b3R5cGUmJnIoaSkmJm8mJm8oZSxpKSxlfX0sWVR2QTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVlRlciIpKCJrZXlzIiksbz1uKCJ5bHFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT1vKGUpKX19LFltcXY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKTtlLmV4cG9ydHM9T2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJTdHJpbmciPT1yKGUpP2Uuc3BsaXQoIiIpOk9iamVjdChlKX19LFo2dkY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInlscXMiKSgibWV0YSIpLG89bigiMC9SNCIpLGk9bigiYWFneCIpLGE9bigiaHN3YSIpLmYsYz0wLHU9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0scz0hbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIHUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxsPWZ1bmN0aW9uKGUpe2EoZSxyLHt2YWx1ZTp7aToiTyIrICsrYyx3Ont9fX0pfSxmPWUuZXhwb3J0cz17S0VZOnIsTkVFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIW8oZSkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6KCJzdHJpbmciPT10eXBlb2YgZT8iUyI6IlAiKStlO2lmKCFpKGUscikpe2lmKCF1KGUpKXJldHVybiJGIjtpZighdClyZXR1cm4iRSI7bChlKX1yZXR1cm4gZVtyXS5pfSxnZXRXZWFrOmZ1bmN0aW9uKGUsdCl7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuITA7aWYoIXQpcmV0dXJuITE7bChlKX1yZXR1cm4gZVtyXS53fSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gcyYmZi5ORUVEJiZ1KGUpJiYhaShlLHIpJiZsKGUpLGV9fX0sWkQ2NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIjNMeWoiKSxvPW4oIlo2dkYiKS5nZXRXZWFrLGk9bigieTN3OSIpLGE9bigiMC9SNCIpLGM9bigiOWdYNyIpLHU9bigiU2xrWSIpLHM9bigiQ2trVCIpLGw9bigiYWFneCIpLGY9bigiczVxWSIpLHA9cyg1KSxoPXMoNiksdj0wLGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2x8fChlLl9sPW5ldyBnKX0sZz1mdW5jdGlvbigpe3RoaXMuYT1bXX0seT1mdW5jdGlvbihlLHQpe3JldHVybiBwKGUuYSxmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KX07Zy5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXt2YXIgdD15KHRoaXMsZSk7aWYodClyZXR1cm4gdFsxXX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEheSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj15KHRoaXMsZSk7bj9uWzFdPXQ6dGhpcy5hLnB1c2goW2UsdF0pfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9aCh0aGlzLmEsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSk7cmV0dXJufnQmJnRoaXMuYS5zcGxpY2UodCwxKSwhIX50fX0sZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixpKXt2YXIgcz1lKGZ1bmN0aW9uKGUscil7YyhlLHMsdCwiX2kiKSxlLl90PXQsZS5faT12KyssZS5fbD12b2lkIDAsdm9pZCAwIT1yJiZ1KHIsbixlW2ldLGUpfSk7cmV0dXJuIHIocy5wcm90b3R5cGUse2RlbGV0ZTpmdW5jdGlvbihlKXtpZighYShlKSlyZXR1cm4hMTt2YXIgbj1vKGUpO3JldHVybiEwPT09bj9kKGYodGhpcyx0KSkuZGVsZXRlKGUpOm4mJmwobix0aGlzLl9pKSYmZGVsZXRlIG5bdGhpcy5faV19LGhhczpmdW5jdGlvbihlKXtpZighYShlKSlyZXR1cm4hMTt2YXIgbj1vKGUpO3JldHVybiEwPT09bj9kKGYodGhpcyx0KSkuaGFzKGUpOm4mJmwobix0aGlzLl9pKX19KSxzfSxkZWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW8oaSh0KSwhMCk7cmV0dXJuITA9PT1yP2QoZSkuc2V0KHQsbik6cltlLl9pXT1uLGV9LHVmc3RvcmU6ZH19LGFDRmo6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlltcXYiKSxvPW4oInZoUFUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIobyhlKSl9fSxhYWd4OmZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sYXBtVDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpKXJldHVybiBlO3ZhciBuLG87aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZigiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnZhbHVlT2YpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87aWYoIXQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LGN6Tks6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJEVmdBIiksbz1uKCJKaUVhIiksaT1uKCJVcWNGIiksYT1uKCJTL2ovIiksYz1uKCJZbXF2IiksdT1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hdXx8bigiZWVWcSIpKGZ1bmN0aW9uKCl7dmFyIGU9e30sdD17fSxuPVN5bWJvbCgpLHI9ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gZVtuXT03LHIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1lfSksNyE9dSh7fSxlKVtuXXx8T2JqZWN0LmtleXModSh7fSx0KSkuam9pbigiIikhPXJ9KT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1hKGUpLHU9YXJndW1lbnRzLmxlbmd0aCxzPTEsbD1vLmYsZj1pLmY7dT5zOylmb3IodmFyIHAsaD1jKGFyZ3VtZW50c1tzKytdKSx2PWw/cihoKS5jb25jYXQobChoKSk6cihoKSxkPXYubGVuZ3RoLGc9MDtkPmc7KWYuY2FsbChoLHA9dltnKytdKSYmKG5bcF09aFtwXSk7cmV0dXJuIG59OnV9LCJkL0djIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiUllpNyIpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT1yKGUpKTwwP28oZSt0LDApOmkoZSx0KX19LGR5Wlg6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9bil9LGVlVnE6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX19LGVsWnE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJkeVpYIiksbz1uKCJoc3dhIiksaT1uKCJuaDRnIiksYT1uKCJLMHhVIikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTtpJiZ0JiYhdFthXSYmby5mKHQsYSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sImZOLzMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmtleXMsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBpKG8oZSksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDphKGFyZ3VtZW50c1sxXSkpfX0pfSxmeURxOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIikuZixvPW4oImFhZ3giKSxpPW4oIksweFUiKSgidG9TdHJpbmdUYWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UmJiFvKGU9bj9lOmUucHJvdG90eXBlLGkpJiZyKGUsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LGczZzU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9e3ZlcnNpb246IjIuNS43In07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bil9LCJoTi9nIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KSxuKCJGWmNxIiksbigiMFRXcCIpfSxoUElROmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt9fSxoc3dhOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iiksbz1uKCJ4cHFsIiksaT1uKCJhcG1UIiksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5mPW4oIm5oNGciKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdD1pKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGEoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0saTVkYzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigieTN3OSIpLGk9ZnVuY3Rpb24oZSx0KXtpZihvKGUpLCFyKHQpJiZudWxsIT09dCl0aHJvdyBUeXBlRXJyb3IodCsiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIpfTtlLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oZSx0LHIpe3RyeXsocj1uKCJtMFBwIikoRnVuY3Rpb24uY2FsbCxuKCJFZW1IIikuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKGUsW10pLHQ9IShlIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKGUpe3Q9ITB9cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkoZSxuKSx0P2UuX19wcm90b19fPW46cihlLG4pLGV9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazppfX0sImlXK1MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1uKCJPUDNZIiksYT1yLmhhcyxjPXIua2V5LHU9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiEwO3ZhciByPWkodCk7cmV0dXJuIG51bGwhPT1yJiZ1KGUscixuKX07ci5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pKX19KX0sbTBQcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMk9pRiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYocihlKSx2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChuKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmNhbGwodCxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBlLmNhbGwodCxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZS5jYWxsKHQsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fX0sbmU4aTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiUllpNyIpLG89TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/byhyKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxuaDRnOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LHM1cVk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighcihlKXx8ZS5fdCE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkISIpO3JldHVybiBlfX0sdUF0ZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiVDM5YiIpLG89bigiUTNuZSIpLGk9bigiTjZjSiIpLGE9bigieTN3OSIpLGM9bigiT1AzWSIpLHU9aS5rZXlzLHM9aS5rZXksbD1mdW5jdGlvbihlLHQpe3ZhciBuPXUoZSx0KSxpPWMoZSk7aWYobnVsbD09PWkpcmV0dXJuIG47dmFyIGE9bChpLHQpO3JldHVybiBhLmxlbmd0aD9uLmxlbmd0aD9vKG5ldyByKG4uY29uY2F0KGEpKSk6YTpufTtpLmV4cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBsKGEoZSksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpzKGFyZ3VtZW50c1sxXSkpfX0pfSx2aFBVOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICAiK2UpO3JldHVybiBlfX0sdzJhNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYUNGaiIpLG89bigibmU4aSIpLGk9bigiZC9HYyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGEpe3ZhciBjLHU9cih0KSxzPW8odS5sZW5ndGgpLGw9aShhLHMpO2lmKGUmJm4hPW4pe2Zvcig7cz5sOylpZigoYz11W2wrK10pIT1jKXJldHVybiEwfWVsc2UgZm9yKDtzPmw7bCsrKWlmKChlfHxsIGluIHUpJiZ1W2xdPT09bilyZXR1cm4gZXx8bHx8MDtyZXR1cm4hZSYmLTF9fX0sd212RzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImhzd2EiKS5mLG89bigiS3V0aCIpLGk9bigiM0x5aiIpLGE9bigibTBQcCIpLGM9bigiOWdYNyIpLHU9bigiU2xrWSIpLHM9bigiQWZueiIpLGw9bigiMVRzQSIpLGY9bigiZWxacSIpLHA9bigibmg0ZyIpLGg9bigiWjZ2RiIpLmZhc3RLZXksdj1uKCJzNXFZIiksZD1wPyJfcyI6InNpemUiLGc9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWgodCk7aWYoIkYiIT09cilyZXR1cm4gZS5faVtyXTtmb3Iobj1lLl9mO247bj1uLm4paWYobi5rPT10KXJldHVybiBufTtlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLHMpe3ZhciBsPWUoZnVuY3Rpb24oZSxyKXtjKGUsbCx0LCJfaSIpLGUuX3Q9dCxlLl9pPW8obnVsbCksZS5fZj12b2lkIDAsZS5fbD12b2lkIDAsZVtkXT0wLHZvaWQgMCE9ciYmdShyLG4sZVtzXSxlKX0pO3JldHVybiBpKGwucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT12KHRoaXMsdCksbj1lLl9pLHI9ZS5fZjtyO3I9ci5uKXIucj0hMCxyLnAmJihyLnA9ci5wLm49dm9pZCAwKSxkZWxldGUgbltyLmldO2UuX2Y9ZS5fbD12b2lkIDAsZVtkXT0wfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIG49dih0aGlzLHQpLHI9ZyhuLGUpO2lmKHIpe3ZhciBvPXIubixpPXIucDtkZWxldGUgbi5faVtyLmldLHIucj0hMCxpJiYoaS5uPW8pLG8mJihvLnA9aSksbi5fZj09ciYmKG4uX2Y9byksbi5fbD09ciYmKG4uX2w9aSksbltkXS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbihlKXt2KHRoaXMsdCk7Zm9yKHZhciBuLHI9YShlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO249bj9uLm46dGhpcy5fZjspZm9yKHIobi52LG4uayx0aGlzKTtuJiZuLnI7KW49bi5wfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFnKHYodGhpcyx0KSxlKX19KSxwJiZyKGwucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcyx0KVtkXX19KSxsfSxkZWY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saT1nKGUsdCk7cmV0dXJuIGk/aS52PW46KGUuX2w9aT17aTpvPWgodCwhMCksazp0LHY6bixwOnI9ZS5fbCxuOnZvaWQgMCxyOiExfSxlLl9mfHwoZS5fZj1pKSxyJiYoci5uPWkpLGVbZF0rKywiRiIhPT1vJiYoZS5faVtvXT1pKSksZX0sZ2V0RW50cnk6ZyxzZXRTdHJvbmc6ZnVuY3Rpb24oZSx0LG4pe3MoZSx0LGZ1bmN0aW9uKGUsbil7dGhpcy5fdD12KGUsdCksdGhpcy5faz1uLHRoaXMuX2w9dm9pZCAwfSxmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9rLHQ9dGhpcy5fbDt0JiZ0LnI7KXQ9dC5wO3JldHVybiB0aGlzLl90JiYodGhpcy5fbD10PXQ/dC5uOnRoaXMuX3QuX2YpP2woMCwia2V5cyI9PWU/dC5rOiJ2YWx1ZXMiPT1lP3QudjpbdC5rLHQudl0pOih0aGlzLl90PXZvaWQgMCxsKDEpKX0sbj8iZW50cmllcyI6InZhbHVlcyIsIW4sITApLGYodCl9fX0seHBxbDpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKCJuaDRnIikmJiFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KG4oIkl3NzEiKSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LHkzdzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIXIoZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0seWxxczpmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHZvaWQgMD09PWU/IiI6ZSwiKV8iLCgrK24rcikudG9TdHJpbmcoMzYpKX19LHpSd286ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjZGTU8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KHIoZSkpKHQpfX0semhBYjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYWFneCIpLG89bigiYUNGaiIpLGk9bigidzJhNSIpKCExKSxhPW4oIllUdkEiKSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixjPW8oZSksdT0wLHM9W107Zm9yKG4gaW4gYyluIT1hJiZyKGMsbikmJnMucHVzaChuKTtmb3IoO3QubGVuZ3RoPnU7KXIoYyxuPXRbdSsrXSkmJih+aShzLG4pfHxzLnB1c2gobikpO3JldHVybiBzfX0sInpxK0MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJONmNKIiksbz1uKCJ5M3c5IiksaT1yLmtleSxhPXIubWFwLGM9ci5zdG9yZTtyLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmkoYXJndW1lbnRzWzJdKSxyPWEobyh0KSxuLCExKTtpZih2b2lkIDA9PT1yfHwhci5kZWxldGUoZSkpcmV0dXJuITE7aWYoci5zaXplKXJldHVybiEwO3ZhciB1PWMuZ2V0KHQpO3JldHVybiB1LmRlbGV0ZShuKSwhIXUuc2l6ZXx8Yy5kZWxldGUodCl9fSl9fSxbWzMsMV1dXSk7KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s0XSx7Iit0SjQiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHImJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY2xvc2VkfHxlLmNvbXBsZXRlKCl9fX0sIit1bUsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe31uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSwiL1dZdiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdC5zdWJzY3JpYmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIjAvdVEiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiNmJsRiIpLGk9bigiL1dZdiIpLG89bigiMmVQbCIpLGE9bigieFRsYSIpLHM9bigiRW44KyIpLGw9bigiSVVUYiIpLHU9bigicHVnVCIpLGM9bigiUzVYUSIpLGY9bigidTY3RCIpLGg9bigiSmNSdiIpLHA9bigiRnhiMSIpO2Z1bmN0aW9uIGQodCxlKXtpZighZSlyZXR1cm4gdCBpbnN0YW5jZW9mIHIuYT90Om5ldyByLmEoT2JqZWN0KHAuYSkodCkpO2lmKG51bGwhPXQpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFthLmFdfSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHIuYShlP2Z1bmN0aW9uKG4pe3ZhciByPW5ldyB1LmE7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXt2YXIgaT10W2EuYV0oKTtyLmFkZChpLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKX0sZXJyb3I6ZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKHQpfSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfX0pKX0pKSxyfTpPYmplY3QoaC5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KGkuYSkodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcj1uZXcgdS5hO3JldHVybiByLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7bi5uZXh0KHQpLHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfSkpfSxmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9KX0pKSxyfTpPYmplY3QoYy5hKSh0KSl9KHQsZSk7aWYoT2JqZWN0KG8uYSkodCkpcmV0dXJuIE9iamVjdChsLmEpKHQsZSk7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W3MuYV19KHQpfHwic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHIsaT1uZXcgdS5hO3JldHVybiBpLmFkZChmdW5jdGlvbigpe3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByLnJldHVybiYmci5yZXR1cm4oKX0pLGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyPXRbcy5hXSgpLGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtpZighbi5jbG9zZWQpe3ZhciB0LGU7dHJ5e3ZhciBpPXIubmV4dCgpO3Q9aS52YWx1ZSxlPWkuZG9uZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuLmVycm9yKHQpfWU/bi5jb21wbGV0ZSgpOihuLm5leHQodCksdGhpcy5zY2hlZHVsZSgpKX19KSl9KSksaX06T2JqZWN0KGYuYSkodCkpfSh0LGUpfXRocm93IG5ldyBUeXBlRXJyb3IoKG51bGwhPT10JiZ0eXBlb2YgdHx8dCkrIiBpcyBub3Qgb2JzZXJ2YWJsZSIpfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBkfSl9LCIyNkZVIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigibXJTRyIpLGk9bigiSzlJYSIpLG89bigiOGc4QSIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3ZhbHVlPWUsbn1yZXR1cm4gci5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgbj10LnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcyxlKTtyZXR1cm4gbiYmIW4uY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLG59LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNFcnJvcil0aHJvdyB0aGlzLnRocm93bkVycm9yO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBvLmE7cmV0dXJuIHRoaXMuX3ZhbHVlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLHRoaXMuX3ZhbHVlPWUpfSxlfShpLmEpfSwiMkJkaiI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LCIyZVBsIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fX0sNDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oInpVbmIiKX0sIjY3WS8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbi4gQXJlIHlvdSBsb29raW5nIGZvciBgbWFwVG8oKWA/Iik7cmV0dXJuIG4ubGlmdChuZXcgYSh0LGUpKX19dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcm9qZWN0PXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByb2plY3QsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcm9qZWN0PW4saS5jb3VudD0wLGkudGhpc0FyZz1yfHxpLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucHJvamVjdC5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGkuYSl9LCI2YWh3IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiaUx4USIpLGk9bigiREtUYiIpLG89e2Nsb3NlZDohMCxuZXh0OmZ1bmN0aW9uKHQpe30sZXJyb3I6ZnVuY3Rpb24odCl7aWYoci5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtPYmplY3QoaS5hKSh0KX0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fX0sIjZibEYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiRkZPbyIpLGk9bigiTC9WOSIpLG89bigiNmFodyIpLGE9bigieFRsYSIpLHM9bigieTNCeSIpLGw9bigiaUx4USIpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9cmV0dXJuIHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc291cmNlPXRoaXMsbi5vcGVyYXRvcj1lLG59LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7dmFyIGE9dGhpcy5vcGVyYXRvcixzPWZ1bmN0aW9uKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2Ygci5hKXJldHVybiB0O2lmKHRbaS5hXSlyZXR1cm4gdFtpLmFdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IHIuYSh0LGUsbik6bmV3IHIuYShvLmEpfSh0LGUsbik7aWYoYT9hLmNhbGwocyx0aGlzLnNvdXJjZSk6cy5hZGQodGhpcy5zb3VyY2V8fGwuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYhcy5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fc3Vic2NyaWJlKHMpOnRoaXMuX3RyeVN1YnNjcmliZShzKSksbC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnMuc3luY0Vycm9yVGhyb3dhYmxlJiYocy5zeW5jRXJyb3JUaHJvd2FibGU9ITEscy5zeW5jRXJyb3JUaHJvd24pKXRocm93IHMuc3luY0Vycm9yVmFsdWU7cmV0dXJuIHN9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7bC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLHQuZXJyb3IoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9YyhlKSkoZnVuY3Rpb24oZSxyKXt2YXIgaTtpPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3RyeXt0KGUpfWNhdGNoKHQpe3IodCksaSYmaS51bnN1YnNjcmliZSgpfX0scixlKX0pfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc291cmNlO3JldHVybiBlJiZlLnN1YnNjcmliZSh0KX0sdC5wcm90b3R5cGVbYS5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAwPT09dC5sZW5ndGg/dGhpczpPYmplY3Qocy5iKSh0KSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyh0PWModCkpKGZ1bmN0aW9uKHQsbil7dmFyIHI7ZS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0sZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHQocil9KX0pfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gYyh0KXtpZih0fHwodD1sLmEuUHJvbWlzZXx8UHJvbWlzZSksIXQpdGhyb3cgbmV3IEVycm9yKCJubyBQcm9taXNlIGltcGwgZm91bmQiKTtyZXR1cm4gdH19LCI4ZzhBIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJvYmplY3QgdW5zdWJzY3JpYmVkIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiByLmIoZSx0KSxlfShFcnJvcil9LCI5WjFGIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigibXJTRyIpLGk9bigiTUdCUyIpLG89bigiem90bSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBzKHQpLHI9ZS5saWZ0KG4pO3JldHVybiBuLmNhdWdodD1yfX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBsKHQsdGhpcy5zZWxlY3Rvcix0aGlzLmNhdWdodCkpfSx0fSgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuc2VsZWN0b3I9bixpLmNhdWdodD1yLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIG49dm9pZCAwO3RyeXtuPXRoaXMuc2VsZWN0b3IoZSx0aGlzLmNhdWdodCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLGUpfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpLHRoaXMuYWRkKE9iamVjdChvLmEpKHRoaXMsbikpfX0sZX0oaS5hKX0sQ2NuRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJKYSIsZnVuY3Rpb24oKXtyZXR1cm4gWGV9KSxuLmQoZSwiS2EiLGZ1bmN0aW9uKCl7cmV0dXJuICRlfSksbi5kKGUsIkxhIixmdW5jdGlvbigpe3JldHVybiBKZX0pLG4uZChlLCJJYSIsZnVuY3Rpb24oKXtyZXR1cm4gcHR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwiVSIsZnVuY3Rpb24oKXtyZXR1cm4gSnR9KSxuLmQoZSwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gdGV9KSxuLmQoZSwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gbmV9KSxuLmQoZSwieCIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaHR9KSxuLmQoZSwiQiIsZnVuY3Rpb24oKXtyZXR1cm4gbXR9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gY3R9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnR9KSxuLmQoZSwiVyIsZnVuY3Rpb24oKXtyZXR1cm4ga2V9KSxuLmQoZSwiTiIsZnVuY3Rpb24oKXtyZXR1cm4gcXR9KSxuLmQoZSwiQWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFl0fSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIEtlfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRufSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEZ0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGF0fSksbi5kKGUsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIGtufSksbi5kKGUsIkgiLGZ1bmN0aW9uKCl7cmV0dXJuIFNufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiUSIsZnVuY3Rpb24oKXtyZXR1cm4gWH0pLG4uZChlLCJPIixmdW5jdGlvbigpe3JldHVybiAkfSksbi5kKGUsIlQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiViIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJYIixmdW5jdGlvbigpe3JldHVybiBLfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiSiIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJ5IixmdW5jdGlvbigpe3JldHVybiBMdH0pLG4uZChlLCJEIixmdW5jdGlvbigpe3JldHVybiBjZX0pLG4uZChlLCJFIixmdW5jdGlvbigpe3JldHVybiBsZX0pLG4uZChlLCJGIixmdW5jdGlvbigpe3JldHVybiB1ZX0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBfdH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBUdH0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBmZX0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBJdH0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBqdH0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBoZX0pLG4uZChlLCJDIixmdW5jdGlvbigpe3JldHVybiBwZX0pLG4uZChlLCJLIixmdW5jdGlvbigpe3JldHVybiB5ZX0pLG4uZChlLCJMIixmdW5jdGlvbigpe3JldHVybiBkZX0pLG4uZChlLCJNIixmdW5jdGlvbigpe3JldHVybiB2ZX0pLG4uZChlLCJQIixmdW5jdGlvbigpe3JldHVybiBiZX0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB3ZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBfZX0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBRZX0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBxZX0pLG4uZChlLCJJIixmdW5jdGlvbigpe3JldHVybiBqZX0pLG4uZChlLCJSIixmdW5jdGlvbigpe3JldHVybiBBZX0pLG4uZChlLCJaIixmdW5jdGlvbigpe3JldHVybiBaZX0pLG4uZChlLCJUYSIsZnVuY3Rpb24oKXtyZXR1cm4gSWV9KSxuLmQoZSwiRGEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSksbi5kKGUsIkJhIixmdW5jdGlvbigpe3JldHVybiBzdH0pLG4uZChlLCJDYSIsZnVuY3Rpb24oKXtyZXR1cm4gUHR9KSxuLmQoZSwiRWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHdufSksbi5kKGUsIkZhIixmdW5jdGlvbigpe3JldHVybiBPbn0pLG4uZChlLCJHYSIsZnVuY3Rpb24oKXtyZXR1cm4gb259KSxuLmQoZSwiUmEiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiV2EiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiaGIiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiVWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSksbi5kKGUsIlZhIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJIYSIsZnVuY3Rpb24oKXtyZXR1cm4gX3J9KSxuLmQoZSwiTWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEJyfSksbi5kKGUsIk5hIixmdW5jdGlvbigpe3JldHVybiBab30pLG4uZChlLCJPYSIsZnVuY3Rpb24oKXtyZXR1cm4gcW59KSxuLmQoZSwiUGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGNpfSksbi5kKGUsIlFhIixmdW5jdGlvbigpe3JldHVybiB3cn0pLG4uZChlLCJTYSIsZnVuY3Rpb24oKXtyZXR1cm4gdnJ9KSxuLmQoZSwiWGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGpyfSksbi5kKGUsIllhIixmdW5jdGlvbigpe3JldHVybiBBcn0pLG4uZChlLCJaYSIsZnVuY3Rpb24oKXtyZXR1cm4gSWl9KSxuLmQoZSwiYWIiLGZ1bmN0aW9uKCl7cmV0dXJuIFhyfSksbi5kKGUsImNiIixmdW5jdGlvbigpe3JldHVybiBmaX0pLG4uZChlLCJmYiIsZnVuY3Rpb24oKXtyZXR1cm4gaGl9KSxuLmQoZSwiYmIiLGZ1bmN0aW9uKCl7cmV0dXJuIFJpfSksbi5kKGUsImRiIixmdW5jdGlvbigpe3JldHVybiBEaX0pLG4uZChlLCJlYiIsZnVuY3Rpb24oKXtyZXR1cm4gTml9KSxuLmQoZSwiZ2IiLGZ1bmN0aW9uKCl7cmV0dXJuIGtpfSksbi5kKGUsImliIixmdW5jdGlvbigpe3JldHVybiBMaX0pLG4uZChlLCJqYiIsZnVuY3Rpb24oKXtyZXR1cm4gVW59KSxuLmQoZSwia2IiLGZ1bmN0aW9uKCl7cmV0dXJuIHppfSk7dmFyIHI9bigibXJTRyIpLGk9bigicHVnVCIpLG89bigiSzlJYSIpLGE9bigiNmJsRiIpLHM9bigicDBpYiIpLGw9bigiUzFuWCIpO2Z1bmN0aW9uIHUodCl7cmV0dXJue3Byb3ZpZGVkSW46dC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6dC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fZGVzYz10LHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLm5nSW5qZWN0YWJsZURlZj12b2lkIDAhPT1lP3Uoe3Byb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KTp2b2lkIDB9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkluamVjdGlvblRva2VuICIrdGhpcy5fZGVzY30sdH0oKSxmPSJfX3BhcmFtZXRlcnNfXyI7ZnVuY3Rpb24gaCh0LGUsbil7dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO2lmKHQpe3ZhciBpPXQuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKGUpKTtmb3IodmFyIG8gaW4gaSl0aGlzW29dPWlbb119fX0oZSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gaS5hcHBseSh0aGlzLHQpLHRoaXM7dmFyIG4sYT1uZXcoKG49bykuYmluZC5hcHBseShuLE9iamVjdChyLmQpKFt2b2lkIDBdLHQpKSk7cmV0dXJuIHMuYW5ub3RhdGlvbj1hLHM7ZnVuY3Rpb24gcyh0LGUsbil7Zm9yKHZhciByPXQuaGFzT3duUHJvcGVydHkoZik/dFtmXTpPYmplY3QuZGVmaW5lUHJvcGVydHkodCxmLHt2YWx1ZTpbXX0pW2ZdO3IubGVuZ3RoPD1uOylyLnB1c2gobnVsbCk7cmV0dXJuKHJbbl09cltuXXx8W10pLnB1c2goYSksdH19cmV0dXJuIG4mJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxvLmFubm90YXRpb25DbHM9byxvfXZhciBwPW5ldyBjKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIik7RnVuY3Rpb247dmFyIGQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxtPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmLHk9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJmdsb2JhbCxnPWR8fHl8fG0sdj1Qcm9taXNlLnJlc29sdmUoMCksYj1udWxsO2Z1bmN0aW9uIF8oKXtpZighYil7dmFyIHQ9Zy5TeW1ib2w7aWYodCYmdC5pdGVyYXRvciliPXQuaXRlcmF0b3I7ZWxzZSBmb3IodmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTWFwLnByb3RvdHlwZSksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcj1lW25dOyJlbnRyaWVzIiE9PXImJiJzaXplIiE9PXImJk1hcC5wcm90b3R5cGVbcl09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJihiPXIpfX1yZXR1cm4gYn1mdW5jdGlvbiB3KHQpeyJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZT92LnRoZW4oZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KG51bGwsbnVsbCl9KTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIix0KX1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIHQ9PT1lfHwibnVtYmVyIj09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgZSYmaXNOYU4odCkmJmlzTmFOKGUpfWZ1bmN0aW9uIEModCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHQgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iWyIrdC5tYXAoQykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09dClyZXR1cm4iIit0O2lmKHQub3ZlcnJpZGRlbk5hbWUpcmV0dXJuIiIrdC5vdmVycmlkZGVuTmFtZTtpZih0Lm5hbWUpcmV0dXJuIiIrdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKTtpZihudWxsPT1lKXJldHVybiIiK2U7dmFyIG49ZS5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09bj9lOmUuc3Vic3RyaW5nKDAsbil9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdC5fX2ZvcndhcmRfcmVmX189RSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEModGhpcygpKX0sdH1mdW5jdGlvbiBPKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Lmhhc093blByb3BlcnR5KCJfX2ZvcndhcmRfcmVmX18iKSYmdC5fX2ZvcndhcmRfcmVmX189PT1FP3QoKTp0fXZhciBTPWgoIkluamVjdCIsZnVuY3Rpb24odCl7cmV0dXJue3Rva2VuOnR9fSksaz1oKCJPcHRpb25hbCIpLFQ9aCgiU2VsZiIpLFA9aCgiU2tpcFNlbGYiKSxBPSJfX3NvdXJjZSIsaj1uZXcgT2JqZWN0LEk9bmV3IGMoIklOSkVDVE9SIiksTT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPWopLGU9PT1qKXRocm93IG5ldyBFcnJvcigiTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAiK0ModCkrIiEiKTtyZXR1cm4gZX0sdH0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9uZXcgUSh0LGUpOm5ldyBRKHQucHJvdmlkZXJzLHQucGFyZW50LHQubmFtZXx8bnVsbCl9LHQuVEhST1dfSUZfTk9UX0ZPVU5EPWosdC5OVUxMPW5ldyBNLHQubmdJbmplY3RhYmxlRGVmPXUoe3Byb3ZpZGVkSW46ImFueSIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBLKEkpfX0pLHR9KCksUj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sRD1bXSxGPVIsTD1mdW5jdGlvbigpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpfSxWPXt9LEI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpaWYodFtlXT09PVYpcmV0dXJuIGU7dGhyb3cgRXJyb3IoIiFwcm9wIil9KHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpWfSksej1OLk5VTEwsVT0vXG4vZ20sSD0iXHUwMjc1IixRPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09ZSYmKGU9eiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1uO3ZhciByPXRoaXMuX3JlY29yZHM9bmV3IE1hcDtyLnNldChOLHt0b2tlbjpOLGZuOlIsZGVwczpELHZhbHVlOnRoaXMsdXNlTmV3OiExfSksci5zZXQoSSx7dG9rZW46SSxmbjpSLGRlcHM6RCx2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLGZ1bmN0aW9uIHQoZSxuKXtpZihuKWlmKChuPU8obikpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0KGUsbltyXSk7ZWxzZXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil0aHJvdyBZKCJGdW5jdGlvbi9DbGFzcyBub3Qgc3VwcG9ydGVkIixuKTtpZighbnx8Im9iamVjdCIhPXR5cGVvZiBufHwhbi5wcm92aWRlKXRocm93IFkoIlVuZXhwZWN0ZWQgcHJvdmlkZXIiLG4pO3ZhciBpPU8obi5wcm92aWRlKSxvPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPUQsbj10LmRlcHM7aWYobiYmbi5sZW5ndGgpe2U9W107Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPTY7aWYoKGw9TyhuW3JdKSlpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgbz0wLGE9bDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtzIGluc3RhbmNlb2Yga3x8cz09az9pfD0xOnMgaW5zdGFuY2VvZiBQfHxzPT1QP2kmPS0zOnMgaW5zdGFuY2VvZiBUfHxzPT1UP2kmPS01Omw9cyBpbnN0YW5jZW9mIFM/cy50b2tlbjpPKHMpfWUucHVzaCh7dG9rZW46bCxvcHRpb25zOml9KX19ZWxzZSBpZih0LnVzZUV4aXN0aW5nKXt2YXIgbDtlPVt7dG9rZW46bD1PKHQudXNlRXhpc3RpbmcpLG9wdGlvbnM6Nn1dfWVsc2UgaWYoIShufHxCIGluIHQpKXRocm93IFkoIidkZXBzJyByZXF1aXJlZCIsdCk7cmV0dXJuIGV9KHQpLG49UixyPUQsaT0hMSxvPU8odC5wcm92aWRlKTtpZihCIGluIHQpcj10LnVzZVZhbHVlO2Vsc2UgaWYodC51c2VGYWN0b3J5KW49dC51c2VGYWN0b3J5O2Vsc2UgaWYodC51c2VFeGlzdGluZyk7ZWxzZSBpZih0LnVzZUNsYXNzKWk9ITAsbj1PKHQudXNlQ2xhc3MpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgWSgiU3RhdGljUHJvdmlkZXIgZG9lcyBub3QgaGF2ZSBbdXNlVmFsdWV8dXNlRmFjdG9yeXx1c2VFeGlzdGluZ3x1c2VDbGFzc10gb3IgW3Byb3ZpZGVdIGlzIG5vdCBuZXdhYmxlIix0KTtpPSEwLG49b31yZXR1cm57ZGVwczplLGZuOm4sdXNlTmV3OmksdmFsdWU6cn19KG4pO2lmKCEwPT09bi5tdWx0aSl7dmFyIGE9ZS5nZXQoaSk7aWYoYSl7aWYoYS5mbiE9PUwpdGhyb3cgcShpKX1lbHNlIGUuc2V0KGksYT17dG9rZW46bi5wcm92aWRlLGRlcHM6W10sdXNlTmV3OiExLGZuOkwsdmFsdWU6RH0pO2EuZGVwcy5wdXNoKHt0b2tlbjppPW4sb3B0aW9uczo2fSl9dmFyIHM9ZS5nZXQoaSk7aWYocyYmcy5mbj09TCl0aHJvdyBxKGkpO2Uuc2V0KGksbyl9fShyLHQpfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPTApO3ZhciBpPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RyeXtyZXR1cm4gZnVuY3Rpb24gdChlLG4saSxvLGEscyl7dHJ5e3JldHVybiBmdW5jdGlvbihlLG4saSxvLGEscyl7dmFyIGwsdTtpZighbnx8NCZzKTImc3x8KGw9by5nZXQoZSxhLDApKTtlbHNle2lmKChsPW4udmFsdWUpPT1GKXRocm93IEVycm9yKEgrIkNpcmN1bGFyIGRlcGVuZGVuY3kiKTtpZihsPT09RCl7bi52YWx1ZT1GO3ZhciBjPW4udXNlTmV3LGY9bi5mbixoPW4uZGVwcyxwPUQ7aWYoaC5sZW5ndGgpe3A9W107Zm9yKHZhciBkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBtPWhbZF0seT1tLm9wdGlvbnMsZz0yJnk/aS5nZXQobS50b2tlbik6dm9pZCAwO3AucHVzaCh0KG0udG9rZW4sZyxpLGd8fDQmeT9vOnosMSZ5P251bGw6Ti5USFJPV19JRl9OT1RfRk9VTkQsMCkpfX1uLnZhbHVlPWw9Yz9uZXcoKHU9ZikuYmluZC5hcHBseSh1LE9iamVjdChyLmQpKFt2b2lkIDBdLHApKSk6Zi5hcHBseSh2b2lkIDAscCl9fXJldHVybiBsfShlLG4saSxvLGEscyl9Y2F0Y2godCl7dGhyb3cgdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodCkpLCh0Lm5nVGVtcFRva2VuUGF0aD10Lm5nVGVtcFRva2VuUGF0aHx8W10pLnVuc2hpZnQoZSksbiYmbi52YWx1ZT09RiYmKG4udmFsdWU9RCksdH19KHQsaSx0aGlzLl9yZWNvcmRzLHRoaXMucGFyZW50LGUsbil9Y2F0Y2goZSl7dmFyIG89ZS5uZ1RlbXBUb2tlblBhdGg7dGhyb3cgdFtBXSYmby51bnNoaWZ0KHRbQV0pLGUubWVzc2FnZT1HKCJcbiIrZS5tZXNzYWdlLG8sdGhpcy5zb3VyY2UpLGUubmdUb2tlblBhdGg9byxlLm5nVGVtcFRva2VuUGF0aD1udWxsLGV9fSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9yZWNvcmRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wdXNoKEMobikpfSksIlN0YXRpY0luamVjdG9yWyIrdC5qb2luKCIsICIpKyJdIn0sdH0oKTtmdW5jdGlvbiBxKHQpe3JldHVybiBZKCJDYW5ub3QgbWl4IG11bHRpIHByb3ZpZGVycyBhbmQgcmVndWxhciBwcm92aWRlcnMiLHQpfWZ1bmN0aW9uIEcodCxlLG4pe3ZvaWQgMD09PW4mJihuPW51bGwpLHQ9dCYmIlxuIj09PXQuY2hhckF0KDApJiZ0LmNoYXJBdCgxKT09SD90LnN1YnN0cigyKTp0O3ZhciByPUMoZSk7aWYoZSBpbnN0YW5jZW9mIEFycmF5KXI9ZS5tYXAoQykuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgaT1bXTtmb3IodmFyIG8gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG8pKXt2YXIgYT1lW29dO2kucHVzaChvKyI6IisoInN0cmluZyI9PXR5cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOkMoYSkpKX1yPSJ7IitpLmpvaW4oIiwgIikrIn0ifXJldHVybiJTdGF0aWNJbmplY3RvckVycm9yIisobj8iKCIrbisiKSI6IiIpKyJbIityKyJdOiAiK3QucmVwbGFjZShVLCJcbiAgIil9ZnVuY3Rpb24gWSh0LGUpe3JldHVybiBuZXcgRXJyb3IoRyh0LGUpKX12YXIgVz12b2lkIDA7ZnVuY3Rpb24gWih0KXt2YXIgZT1XO3JldHVybiBXPXQsZX1mdW5jdGlvbiBLKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09Vyl0aHJvdyBuZXcgRXJyb3IoImluamVjdCgpIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gaW5qZWN0aW9uIGNvbnRleHQiKTtpZihudWxsPT09Vyl7dmFyIG49dC5uZ0luamVjdGFibGVEZWY7aWYobiYmInJvb3QiPT1uLnByb3ZpZGVkSW4pcmV0dXJuIHZvaWQgMD09PW4udmFsdWU/bi52YWx1ZT1uLmZhY3RvcnkoKTpuLnZhbHVlO3Rocm93IG5ldyBFcnJvcigiSW5qZWN0b3I6IE5PVF9GT1VORCBbIitDKHQpKyJdIil9cmV0dXJuIFcuZ2V0KHQsOCZlP251bGw6dm9pZCAwLGUpfVN0cmluZzt2YXIgWD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsdFt0Lk5hdGl2ZT0xXT0iTmF0aXZlIix0W3QuTm9uZT0yXT0iTm9uZSIsdH0oe30pLCQ9ZnVuY3Rpb24odCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfSxKPW5ldyAkKCI2LjAuNSIpLHR0PSJuZ0RlYnVnQ29udGV4dCIsZXQ9Im5nT3JpZ2luYWxFcnJvciIsbnQ9Im5nRXJyb3JMb2dnZXIiO2Z1bmN0aW9uIHJ0KHQpe3JldHVybiB0W3R0XX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFtldF19ZnVuY3Rpb24gb3QodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LE9iamVjdChyLmQpKGUpKX12YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY29uc29sZT1jb25zb2xlfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KSxuPXRoaXMuX2ZpbmRDb250ZXh0KHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHRbbnRdfHxvdH0odCk7cih0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmcih0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmcih0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX0sdC5wcm90b3R5cGUuX2ZpbmRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3J0KHQpP3J0KHQpOnRoaXMuX2ZpbmRDb250ZXh0KGl0KHQpKTpudWxsfSx0LnByb3RvdHlwZS5fZmluZE9yaWdpbmFsRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWl0KHQpO2UmJml0KGUpOyllPWl0KGUpO3JldHVybiBlfSx0fSgpLHN0PW5ldyBjKCJUaGUgcHJlc2VuY2Ugb2YgdGhpcyB0b2tlbiBtYXJrcyBhbiBpbmplY3RvciBhcyBiZWluZyB0aGUgcm9vdCBpbmplY3Rvci4iKTtmdW5jdGlvbiBsdCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gdXQodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIGN0PW5ldyBjKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpLGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuYXBwSW5pdHM9dCx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuZG9uZT0hMSx0aGlzLmRvbmVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5yZXNvbHZlPXQsZS5yZWplY3Q9bn0pfXJldHVybiB0LnByb3RvdHlwZS5ydW5Jbml0aWFsaXplcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmluaXRpYWxpemVkKXt2YXIgZT1bXSxuPWZ1bmN0aW9uKCl7dC5kb25lPSEwLHQucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcih2YXIgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXt2YXIgaT10aGlzLmFwcEluaXRzW3JdKCk7bHQoaSkmJmUucHVzaChpKX1Qcm9taXNlLmFsbChlKS50aGVuKGZ1bmN0aW9uKCl7bigpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5yZWplY3QoZSl9KSwwPT09ZS5sZW5ndGgmJm4oKSx0aGlzLmluaXRpYWxpemVkPSEwfX0sdH0oKSxodD1uZXcgYygiQXBwSWQiKTtmdW5jdGlvbiBwdCgpe3JldHVybiIiK2R0KCkrZHQoKStkdCgpfWZ1bmN0aW9uIGR0KCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoOTcrTWF0aC5mbG9vcigyNSpNYXRoLnJhbmRvbSgpKSl9dmFyIG10PW5ldyBjKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLHl0PW5ldyBjKCJQbGF0Zm9ybSBJRCIpLGd0PW5ldyBjKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLHZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKHQpfSx0LnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2Fybih0KX0sdH0oKTtmdW5jdGlvbiBidCgpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSBjb21waWxlciBpcyBub3QgbG9hZGVkIil9dmFyIF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZVN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgYnQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGVGb3I9ZnVuY3Rpb24odCl7fSx0fSgpLHd0PWZ1bmN0aW9uKCl7fSx4dD1mdW5jdGlvbigpe307ZnVuY3Rpb24gQ3QodCl7dmFyIGU9RXJyb3IoIk5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAiK0ModCkrIi4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz8iKTtyZXR1cm4gZVtTdF09dCxlfXZhciBFdCxPdCxTdD0ibmdDb21wb25lbnQiLGt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dGhyb3cgQ3QodCl9LHR9KCksVHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5VTEw9bmV3IGt0LHR9KCksUHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uZ01vZHVsZT1uLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO3RoaXMuX2ZhY3Rvcmllcy5zZXQoaS5jb21wb25lbnRUeXBlLGkpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtpZighZSYmdGhpcy5fcGFyZW50JiYoZT10aGlzLl9wYXJlbnQucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCkpLCFlKXRocm93IEN0KHQpO3JldHVybiBuZXcgQXQoZSx0aGlzLl9uZ01vZHVsZSl9LHR9KCksQXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5mYWN0b3J5PWUsci5uZ01vZHVsZT1uLHIuc2VsZWN0b3I9ZS5zZWxlY3RvcixyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlLHIubmdDb250ZW50U2VsZWN0b3JzPWUubmdDb250ZW50U2VsZWN0b3JzLHIuaW5wdXRzPWUuaW5wdXRzLHIub3V0cHV0cz1lLm91dHB1dHMscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGUodCxlLG4scnx8dGhpcy5uZ01vZHVsZSl9LGV9KHh0KSxqdD1mdW5jdGlvbigpe30sSXQ9ZnVuY3Rpb24oKXt9LE10PWZ1bmN0aW9uKCl7dmFyIHQ9Zy53dGY7cmV0dXJuISghdHx8IShFdD10LnRyYWNlKXx8KE90PUV0LmV2ZW50cywwKSl9KCk7ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gbnVsbH12YXIgUnQ9TXQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCksT3QuY3JlYXRlU2NvcGUodCxlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gTnR9LER0PU10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEV0LmxlYXZlU2NvcGUodCxlKSxlfTpmdW5jdGlvbih0LGUpe3JldHVybiBlfSxGdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX19pc0FzeW5jPWUsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSxuLHIpe3ZhciBvLGE9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZSYmIm9iamVjdCI9PXR5cGVvZiBlPyhvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0KHQpfSl9OmZ1bmN0aW9uKHQpe2UubmV4dCh0KX0sZS5lcnJvciYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmVycm9yKHQpfSl9OmZ1bmN0aW9uKHQpe2UuZXJyb3IodCl9KSxlLmNvbXBsZXRlJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9OmZ1bmN0aW9uKCl7ZS5jb21wbGV0ZSgpfSkpOihvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX0pfTpmdW5jdGlvbih0KXtlKHQpfSxuJiYoYT10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4odCl9KX06ZnVuY3Rpb24odCl7bih0KX0pLHImJihzPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByKCl9KX06ZnVuY3Rpb24oKXtyKCl9KSk7dmFyIGw9dC5wcm90b3R5cGUuc3Vic2NyaWJlLmNhbGwodGhpcyxvLGEscyk7cmV0dXJuIGUgaW5zdGFuY2VvZiBpLmEmJmUuYWRkKGwpLGx9LGV9KG8uYSksTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlLG49dC5lbmFibGVMb25nU3RhY2tUcmFjZSxyPXZvaWQgMCE9PW4mJm47aWYodGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGdCghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBGdCghMSksdGhpcy5vblN0YWJsZT1uZXcgRnQoITEpLHRoaXMub25FcnJvcj1uZXcgRnQoITEpLCJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZSl0aHJvdyBuZXcgRXJyb3IoIkluIHRoaXMgY29uZmlndXJhdGlvbiBBbmd1bGFyIHJlcXVpcmVzIFpvbmUuanMiKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCksdGhpcy5fbmVzdGluZz0wLHRoaXMuX291dGVyPXRoaXMuX2lubmVyPVpvbmUuY3VycmVudCxab25lLnd0ZlpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLnd0ZlpvbmVTcGVjKSksWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxyJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLChlPXRoaXMpLl9pbm5lcj1lLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxuLHIsaSxvLGEpe3RyeXtyZXR1cm4gVXQoZSksdC5pbnZva2VUYXNrKHIsaSxvLGEpfWZpbmFsbHl7SHQoZSl9fSxvbkludm9rZTpmdW5jdGlvbih0LG4scixpLG8sYSxzKXt0cnl7cmV0dXJuIFV0KGUpLHQuaW52b2tlKHIsaSxvLGEscyl9ZmluYWxseXtIdChlKX19LG9uSGFzVGFzazpmdW5jdGlvbih0LG4scixpKXt0Lmhhc1Rhc2socixpKSxuPT09ciYmKCJtaWNyb1Rhc2siPT1pLmNoYW5nZT8oZS5oYXNQZW5kaW5nTWljcm90YXNrcz1pLm1pY3JvVGFzayx6dChlKSk6Im1hY3JvVGFzayI9PWkuY2hhbmdlJiYoZS5oYXNQZW5kaW5nTWFjcm90YXNrcz1pLm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiB0LmhhbmRsZUVycm9yKHIsaSksZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLm9uRXJyb3IuZW1pdChpKX0pLCExfX0pfXJldHVybiB0LmlzSW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe3JldHVybiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfSx0LmFzc2VydEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZighdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5vdCEiKX0sdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYodC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyEiKX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9pbm5lcixvPWkuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK3IsdCxCdCxWdCxWdCk7dHJ5e3JldHVybiBpLnJ1blRhc2sobyxlLG4pfWZpbmFsbHl7aS5jYW5jZWxUYXNrKG8pfX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQodCxlLG4pfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfSx0fSgpO2Z1bmN0aW9uIFZ0KCl7fXZhciBCdD17fTtmdW5jdGlvbiB6dCh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Lm9uU3RhYmxlLmVtaXQobnVsbCl9KX1maW5hbGx5e3QuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBVdCh0KXt0Ll9uZXN0aW5nKyssdC5pc1N0YWJsZSYmKHQuaXNTdGFibGU9ITEsdC5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIEh0KHQpe3QuX25lc3RpbmctLSx6dCh0KX12YXIgUXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGdCx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEZ0LHRoaXMub25TdGFibGU9bmV3IEZ0LHRoaXMub25FcnJvcj1uZXcgRnR9cmV0dXJuIHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdH0oKSxxdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksdC5ydW4oZnVuY3Rpb24oKXtlLnRhc2tUcmFja2luZ1pvbmU9Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9cmV0dXJuIHQucHJvdG90eXBlLl93YXRjaEFuZ3VsYXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe3QuX2RpZFdvcms9ITAsdC5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXtMdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe3QuX2lzWm9uZVN0YWJsZT0hMCx0Ll9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfSx0LnByb3RvdHlwZS5pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuaXNTdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfSx0LnByb3RvdHlwZS5fcnVuQ2FsbGJhY2tzSWZSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5pc1N0YWJsZSgpKXcoZnVuY3Rpb24oKXtmb3IoOzAhPT10Ll9jYWxsYmFja3MubGVuZ3RoOyl7dmFyIGU9dC5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChlLnRpbWVvdXRJZCksZS5kb25lQ2IodC5fZGlkV29yayl9dC5fZGlkV29yaz0hMX0pO2Vsc2V7dmFyIGU9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC51cGRhdGVDYnx8IXQudXBkYXRlQ2IoZSl8fChjbGVhclRpbWVvdXQodC50aW1lb3V0SWQpLCExKX0pLHRoaXMuX2RpZFdvcms9ITB9fSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nVGFza3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQuc291cmNlLGlzUGVyaW9kaWM6dC5kYXRhLmlzUGVyaW9kaWMsZGVsYXk6dC5kYXRhLmRlbGF5LGNyZWF0aW9uTG9jYXRpb246dC5jcmVhdGlvbkxvY2F0aW9uLHhocjp0LmRhdGEudGFyZ2V0fX0pOltdfSx0LnByb3RvdHlwZS5hZGRDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPS0xO2UmJmU+MCYmKGk9c2V0VGltZW91dChmdW5jdGlvbigpe3IuX2NhbGxiYWNrcz1yLl9jYWxsYmFja3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbWVvdXRJZCE9PWl9KSx0KHIuX2RpZFdvcmssci5nZXRQZW5kaW5nVGFza3MoKSl9LGUpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOnQsdGltZW91dElkOmksdXBkYXRlQ2I6bn0pfSx0LnByb3RvdHlwZS53aGVuU3RhYmxlPWZ1bmN0aW9uKHQsZSxuKXtpZihuJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9kaXN0L3Rhc2stdHJhY2tpbmcuanMiIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKHQsZSxuKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9LHQucHJvdG90eXBlLmdldFBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5maW5kUHJvdmlkZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX0sdH0oKSxHdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcCxadC5hZGRUb1dpbmRvdyh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQodCxlKX0sdC5wcm90b3R5cGUudW5yZWdpc3RlckFwcGxpY2F0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUodCl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0VGVzdGFiaWxpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmdldEFsbFRlc3RhYmlsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfSx0LnByb3RvdHlwZS5nZXRBbGxSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX0sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSEwKSxadC5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyx0LGUpfSx0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHR9KCk7ZnVuY3Rpb24gWXQodCl7WnQ9dH12YXIgV3QsWnQ9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYWRkVG9XaW5kb3c9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsfSx0fSgpKSxLdD0hMCxYdD0hMSwkdD1uZXcgYygiQWxsb3dNdWx0aXBsZVRva2VuIik7ZnVuY3Rpb24gSnQoKXtpZihYdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbmFibGUgcHJvZCBtb2RlIGFmdGVyIHBsYXRmb3JtIHNldHVwLiIpO0t0PSExfWZ1bmN0aW9uIHRlKCl7cmV0dXJuIFh0PSEwLEt0fXZhciBlZT1mdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMudG9rZW49ZX07ZnVuY3Rpb24gbmUodCxlLG4pe3ZvaWQgMD09PW4mJihuPVtdKTt2YXIgcj0iUGxhdGZvcm06ICIrZSxpPW5ldyBjKHIpO3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG89cmUoKTtpZighb3x8by5pbmplY3Rvci5nZXQoJHQsITEpKWlmKHQpdChuLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0pKTtlbHNle3ZhciBhPW4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSk7IWZ1bmN0aW9uKHQpe2lmKFd0JiYhV3QuZGVzdHJveWVkJiYhV3QuaW5qZWN0b3IuZ2V0KCR0LCExKSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwbGF0Zm9ybS4gRGVzdHJveSB0aGUgcHJldmlvdXMgb25lIHRvIGNyZWF0ZSBhIG5ldyBvbmUuIik7V3Q9dC5nZXQoaWUpO3ZhciBlPXQuZ2V0KG10LG51bGwpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9KE4uY3JlYXRlKHtwcm92aWRlcnM6YSxuYW1lOnJ9KSl9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXJlKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0oaSl9fWZ1bmN0aW9uIHJlKCl7cmV0dXJuIFd0JiYhV3QuZGVzdHJveWVkP1d0Om51bGx9dmFyIGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pbmplY3Rvcj10LHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT0ibm9vcCI9PT0obj1lP2Uubmdab25lOnZvaWQgMCk/bmV3IFF0Oigiem9uZS5qcyI9PT1uP3ZvaWQgMDpuKXx8bmV3IEx0KHtlbmFibGVMb25nU3RhY2tUcmFjZTp0ZSgpfSksbz1be3Byb3ZpZGU6THQsdXNlVmFsdWU6aX1dO3JldHVybiBpLnJ1bihmdW5jdGlvbigpe3ZhciBlPU4uY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6ci5pbmplY3RvcixuYW1lOnQubW9kdWxlVHlwZS5uYW1lfSksbj10LmNyZWF0ZShlKSxhPW4uaW5qZWN0b3IuZ2V0KGF0LG51bGwpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTm8gRXJyb3JIYW5kbGVyLiBJcyBwbGF0Zm9ybSBtb2R1bGUgKEJyb3dzZXJNb2R1bGUpIGluY2x1ZGVkPyIpO3JldHVybiBuLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBzZShyLl9tb2R1bGVzLG4pfSksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBpLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe2EuaGFuZGxlRXJyb3IodCl9fSl9KSxmdW5jdGlvbih0LGUsaSl7dHJ5e3ZhciBvPSgoYT1uLmluamVjdG9yLmdldChmdCkpLnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3JldHVybiByLl9tb2R1bGVEb0Jvb3RzdHJhcChuKSxufSkpO3JldHVybiBsdChvKT9vLmNhdGNoKGZ1bmN0aW9uKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59KTpvfWNhdGNoKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59dmFyIGF9KGEsaSl9KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5pbmplY3Rvci5nZXQod3QpLGk9b2Uoe30sZSk7cmV0dXJuIHIuY3JlYXRlQ29tcGlsZXIoW2ldKS5jb21waWxlTW9kdWxlQXN5bmModCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gbi5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsaSl9KX0sdC5wcm90b3R5cGUuX21vZHVsZURvQm9vdHN0cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5qZWN0b3IuZ2V0KGFlKTtpZih0Ll9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKXQuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5ib290c3RyYXAodCl9KTtlbHNle2lmKCF0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IEVycm9yKCJUaGUgbW9kdWxlICIrQyh0Lmluc3RhbmNlLmNvbnN0cnVjdG9yKSsnIHdhcyBib290c3RyYXBwZWQsIGJ1dCBpdCBkb2VzIG5vdCBkZWNsYXJlICJATmdNb2R1bGUuYm9vdHN0cmFwIiBjb21wb25lbnRzIG5vciBhICJuZ0RvQm9vdHN0cmFwIiBtZXRob2QuIFBsZWFzZSBkZWZpbmUgb25lIG9mIHRoZXNlLicpO3QuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChlKX10aGlzLl9tb2R1bGVzLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwbGF0Zm9ybSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCEiKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2Rlc3Ryb3llZD0hMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gb2UodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZShvZSx0KTpPYmplY3Qoci5hKSh7fSx0LGUpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3ZhciB1PXRoaXM7dGhpcy5fem9uZT10LHRoaXMuX2NvbnNvbGU9ZSx0aGlzLl9pbmplY3Rvcj1uLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9aSx0aGlzLl9pbml0U3RhdHVzPW8sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9dGUoKSx0aGlzLl96b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7dS5fem9uZS5ydW4oZnVuY3Rpb24oKXt1LnRpY2soKX0pfX0pO3ZhciBjPW5ldyBhLmEoZnVuY3Rpb24odCl7dS5fc3RhYmxlPXUuX3pvbmUuaXNTdGFibGUmJiF1Ll96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdS5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyx1Ll96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KHUuX3N0YWJsZSksdC5jb21wbGV0ZSgpfSl9KSxmPW5ldyBhLmEoZnVuY3Rpb24odCl7dmFyIGU7dS5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2U9dS5fem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtMdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe3UuX3N0YWJsZXx8dS5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc3x8dS5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrc3x8KHUuX3N0YWJsZT0hMCx0Lm5leHQoITApKX0pfSl9KTt2YXIgbj11Ll96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7THQuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLHUuX3N0YWJsZSYmKHUuX3N0YWJsZT0hMSx1Ll96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KCExKX0pKX0pO3JldHVybiBmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSk7dGhpcy5pc1N0YWJsZT1PYmplY3Qocy5hKShjLGYucGlwZShPYmplY3QobC5hKSgpKSl9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcztpZighdGhpcy5faW5pdFN0YXR1cy5kb25lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGJvb3RzdHJhcCBhcyB0aGVyZSBhcmUgc3RpbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemVycyBydW5uaW5nLiBCb290c3RyYXAgY29tcG9uZW50cyBpbiB0aGUgYG5nRG9Cb290c3RyYXBgIG1ldGhvZCBvZiB0aGUgcm9vdCBtb2R1bGUuIik7bj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKG4uY29tcG9uZW50VHlwZSk7dmFyIGk9biBpbnN0YW5jZW9mIEF0P251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KGp0KSxvPW4uY3JlYXRlKE4uTlVMTCxbXSxlfHxuLnNlbGVjdG9yLGkpO28ub25EZXN0cm95KGZ1bmN0aW9uKCl7ci5fdW5sb2FkQ29tcG9uZW50KG8pfSk7dmFyIGE9by5pbmplY3Rvci5nZXQocXQsbnVsbCk7cmV0dXJuIGEmJm8uaW5qZWN0b3IuZ2V0KEd0KS5yZWdpc3RlckFwcGxpY2F0aW9uKG8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCxhKSx0aGlzLl9sb2FkQ29tcG9uZW50KG8pLHRlKCkmJnRoaXMuX2NvbnNvbGUubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gdGhlIGRldmVsb3BtZW50IG1vZGUuIENhbGwgZW5hYmxlUHJvZE1vZGUoKSB0byBlbmFibGUgdGhlIHByb2R1Y3Rpb24gbW9kZS4iKSxvfSx0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgRXJyb3IoIkFwcGxpY2F0aW9uUmVmLnRpY2sgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5Iik7dmFyIG49dC5fdGlja1Njb3BlKCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwLHRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGV0ZWN0Q2hhbmdlcygpfSksdGhpcy5fZW5mb3JjZU5vTmV3Q2hhbmdlcyYmdGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja05vQ2hhbmdlcygpfSl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKHQpfSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMSxEdChuKX19LHQucHJvdG90eXBlLmF0dGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDtzZSh0aGlzLl92aWV3cyxlKSxlLmRldGFjaEZyb21BcHBSZWYoKX0sdC5wcm90b3R5cGUuX2xvYWRDb21wb25lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldChndCxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfSx0LnByb3RvdHlwZS5fdW5sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSxzZSh0aGlzLmNvbXBvbmVudHMsdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5fdGlja1Njb3BlPVJ0KCJBcHBsaWNhdGlvblJlZiN0aWNrKCkiKSx0fSgpO2Z1bmN0aW9uIHNlKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIGxlPWZ1bmN0aW9uKCl7fSx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkltcG9ydGFudD0xXT0iSW1wb3J0YW50Iix0W3QuRGFzaENhc2U9Ml09IkRhc2hDYXNlIix0fSh7fSksY2U9ZnVuY3Rpb24oKXt9LGZlPWZ1bmN0aW9uKHQpe3RoaXMubmF0aXZlRWxlbWVudD10fSxoZT1mdW5jdGlvbigpe30scGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9yZXN1bHRzPVtdLHRoaXMuY2hhbmdlcz1uZXcgRnQsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdC5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcCh0KX0sdC5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcih0KX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfSx0LnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UodCxlKX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzLmZvckVhY2godCl9LHQucHJvdG90eXBlLnNvbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX0sdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9LHQucHJvdG90eXBlW18oKV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tfKCldKCl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCl7dGhpcy5fcmVzdWx0cz1mdW5jdGlvbiB0KGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihlLG4pe3ZhciByPUFycmF5LmlzQXJyYXkobik/dChuKTpuO3JldHVybiBlLmNvbmNhdChyKX0sW10pfSh0KSx0aGlzLmRpcnR5PSExLHRoaXMubGVuZ3RoPXRoaXMuX3Jlc3VsdHMubGVuZ3RoLHRoaXMubGFzdD10aGlzLl9yZXN1bHRzW3RoaXMubGVuZ3RoLTFdLHRoaXMuZmlyc3Q9dGhpcy5fcmVzdWx0c1swXX0sdC5wcm90b3R5cGUubm90aWZ5T25DaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VzLmVtaXQodGhpcyl9LHQucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfSx0fSgpLGRlPWZ1bmN0aW9uKCl7fSxtZT17ZmFjdG9yeVBhdGhQcmVmaXg6IiIsZmFjdG9yeVBhdGhTdWZmaXg6Ii5uZ2ZhY3RvcnkifSx5ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jb21waWxlcj10LHRoaXMuX2NvbmZpZz1lfHxtZX1yZXR1cm4gdC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29tcGlsZXIgaW5zdGFuY2VvZiBfdD90aGlzLmxvYWRGYWN0b3J5KHQpOnRoaXMubG9hZEFuZENvbXBpbGUodCl9LHQucHJvdG90eXBlLmxvYWRBbmRDb21waWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1PYmplY3Qoci5jKSh0LnNwbGl0KCIjIiksMiksbz1pWzBdLGE9aVsxXTtyZXR1cm4gdm9pZCAwPT09YSYmKGE9ImRlZmF1bHQiKSxuKCJjcm5kIikobykudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdFthXX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGdlKHQsbyxhKX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KX0pfSx0LnByb3RvdHlwZS5sb2FkRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qoci5jKSh0LnNwbGl0KCIjIiksMiksaT1lWzBdLG89ZVsxXSxhPSJOZ0ZhY3RvcnkiO3JldHVybiB2b2lkIDA9PT1vJiYobz0iZGVmYXVsdCIsYT0iIiksbigiY3JuZCIpKHRoaXMuX2NvbmZpZy5mYWN0b3J5UGF0aFByZWZpeCtpK3RoaXMuX2NvbmZpZy5mYWN0b3J5UGF0aFN1ZmZpeCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdFtvK2FdfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZ2UodCxpLG8pfSl9LHR9KCk7ZnVuY3Rpb24gZ2UodCxlLG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgJyIrbisiJyBpbiAnIitlKyInIik7cmV0dXJuIHR9dmFyIHZlPWZ1bmN0aW9uKCl7fSxiZT1mdW5jdGlvbigpe30sX2U9ZnVuY3Rpb24oKXt9LHdlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KF9lKSkseGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9kZWJ1Z0NvbnRleHQ9bix0aGlzLm5hdGl2ZU5vZGU9dCxlJiZlIGluc3RhbmNlb2YgQ2U/ZS5hZGRDaGlsZCh0aGlzKTp0aGlzLnBhcmVudD1udWxsLHRoaXMubGlzdGVuZXJzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLENlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5wcm9wZXJ0aWVzPXt9LGkuYXR0cmlidXRlcz17fSxpLmNsYXNzZXM9e30saS5zdHlsZXM9e30saS5jaGlsZE5vZGVzPVtdLGkubmF0aXZlRWxlbWVudD1lLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24odCl7dCYmKHRoaXMuY2hpbGROb2Rlcy5wdXNoKHQpLHQucGFyZW50PXRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoZSwxKSl9LGUucHJvdG90eXBlLmluc2VydENoaWxkcmVuQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMsbz10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PW8mJigobj10aGlzLmNoaWxkTm9kZXMpLnNwbGljZS5hcHBseShuLE9iamVjdChyLmQpKFtvKzEsMF0sZSkpLGUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlQ2hpbGQodCksdC5wYXJlbnQ9aX0pKX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTE9PT1uP3RoaXMuYWRkQ2hpbGQoZSk6KGUucGFyZW50JiZlLnBhcmVudC5yZW1vdmVDaGlsZChlKSxlLnBhcmVudD10aGlzLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UobiwwLGUpKX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnlBbGwodClbMF18fG51bGx9LGUucHJvdG90eXBlLnF1ZXJ5QWxsPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBFZSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gT2UodGhpcyx0LGUpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50cmlnZ2VyRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLm5hbWU9PXQmJm4uY2FsbGJhY2soZSl9KX0sZX0oeGUpO2Z1bmN0aW9uIEVlKHQsZSxuKXt0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IGluc3RhbmNlb2YgQ2UmJihlKHQpJiZuLnB1c2godCksRWUodCxlLG4pKX0pfWZ1bmN0aW9uIE9lKHQsZSxuKXt0IGluc3RhbmNlb2YgQ2UmJnQuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCkmJm4ucHVzaCh0KSx0IGluc3RhbmNlb2YgQ2UmJk9lKHQsZSxuKX0pfXZhciBTZT1uZXcgTWFwO2Z1bmN0aW9uIGtlKHQpe3JldHVybiBTZS5nZXQodCl8fG51bGx9ZnVuY3Rpb24gVGUodCl7U2Uuc2V0KHQubmF0aXZlTm9kZSx0KX1mdW5jdGlvbiBQZSh0LGUpe3ZhciBuPUllKHQpLHI9SWUoZSk7cmV0dXJuIG4mJnI/ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj10W18oKV0oKSxpPWVbXygpXSgpOzspe3ZhciBvPXIubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lJiZhLmRvbmUpcmV0dXJuITA7aWYoby5kb25lfHxhLmRvbmUpcmV0dXJuITE7aWYoIW4oby52YWx1ZSxhLnZhbHVlKSlyZXR1cm4hMX19KHQsZSxQZSk6IShufHwhdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8cnx8IWV8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpfHx4KHQsZSl9dmFyIEFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLndyYXBwZWQ9dH1yZXR1cm4gdC53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNXcmFwcGVkKGUpP2Uud3JhcHBlZDplfSx0LmlzV3JhcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9LHR9KCksamU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZXZpb3VzVmFsdWU9dCx0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMuZmlyc3RDaGFuZ2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuaXNGaXJzdENoYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfSx0fSgpO2Z1bmN0aW9uIEllKHQpe3JldHVybiEhTWUodCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2VvZiBNYXApJiZfKClpbiB0KX1mdW5jdGlvbiBNZSh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX12YXIgTmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gSWUodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERlKHQpfSx0fSgpLFJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9LERlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49dHx8UmV9cmV0dXJuIHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE9wZXJhdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5faXRIZWFkLG49dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxpPW51bGw7ZXx8bjspe3ZhciBvPSFufHxlJiZlLmN1cnJlbnRJbmRleDxCZShuLHIsaSk/ZTpuLGE9QmUobyxyLGkpLHM9by5jdXJyZW50SW5kZXg7aWYobz09PW4pci0tLG49bi5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihlPWUuX25leHQsbnVsbD09by5wcmV2aW91c0luZGV4KXIrKztlbHNle2l8fChpPVtdKTt2YXIgbD1hLXIsdT1zLXI7aWYobCE9dSl7Zm9yKHZhciBjPTA7YzxsO2MrKyl7dmFyIGY9YzxpLmxlbmd0aD9pW2NdOmlbY109MCxoPWYrYzt1PD1oJiZoPGwmJihpW2NdPWYrMSl9aVtvLnByZXZpb3VzSW5kZXhdPXUtbH19YSE9PXMmJnQobyxhLHMpfX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c0l0SGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQWRkZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFJlbW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9LHQucHJvdG90eXBlLmRpZmY9ZnVuY3Rpb24odCl7aWYobnVsbD09dCYmKHQ9W10pLCFJZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK0ModCkrIicuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWQiKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuLHIsaSxvPXRoaXMuX2l0SGVhZCxhPSExO2lmKEFycmF5LmlzQXJyYXkodCkpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO2Zvcih2YXIgcz0wO3M8dGhpcy5sZW5ndGg7cysrKWk9dGhpcy5fdHJhY2tCeUZuKHMscj10W3NdKSxudWxsIT09byYmeChvLnRyYWNrQnlJZCxpKT8oYSYmKG89dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24obyxyLGkscykpLHgoby5pdGVtLHIpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShvLHIpKToobz10aGlzLl9taXNtYXRjaChvLHIsaSxzKSxhPSEwKSxvPW8uX25leHR9ZWxzZSBuPTAsZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSk7ZWxzZSBmb3IodmFyIHI9dFtfKCldKCksaT12b2lkIDA7IShpPXIubmV4dCgpKS5kb25lOyllKGkudmFsdWUpfSh0LGZ1bmN0aW9uKHQpe2k9ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PW8mJngoby50cmFja0J5SWQsaSk/KGEmJihvPWUuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8sdCxpLG4pKSx4KG8uaXRlbSx0KXx8ZS5fYWRkSWRlbnRpdHlDaGFuZ2Uobyx0KSk6KG89ZS5fbWlzbWF0Y2gobyx0LGksbiksYT0hMCksbz1vLl9uZXh0LG4rK30pLHRoaXMubGVuZ3RoPW47cmV0dXJuIHRoaXMuX3RydW5jYXRlKG8pLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PWUpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4LGU9dC5fbmV4dE1vdmVkO3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fSx0LnByb3RvdHlwZS5fbWlzbWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk7cmV0dXJuIG51bGw9PT10P2k9dGhpcy5faXRUYWlsOihpPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpKT8oeCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsaSxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyh4KHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsaSxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgRmUoZSxuKSxpLHIpLHR9LHQucHJvdG90eXBlLl92ZXJpZnlSZWluc2VydGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpO3JldHVybiBudWxsIT09aT90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoaSx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9LHQucHJvdG90eXBlLl90cnVuY2F0ZT1mdW5jdGlvbih0KXtmb3IoO251bGwhPT10Oyl7dmFyIGU9dC5fbmV4dDt0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSksdD1lfW51bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5jbGVhcigpLG51bGwhPT10aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLG51bGwhPT10aGlzLl9tb3Zlc1RhaWwmJih0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faXRUYWlsJiYodGhpcy5faXRUYWlsLl9uZXh0PW51bGwpLG51bGwhPT10aGlzLl9yZW1vdmFsc1RhaWwmJih0aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsJiYodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGwpfSx0LnByb3RvdHlwZS5fcmVpbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgcj10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9aTpyLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1yOmkuX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fbW92ZUFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX2FkZEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD10OnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHR9LHQucHJvdG90eXBlLl9pbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IFZlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1uLHR9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX0sdC5wcm90b3R5cGUuX3VubGluaz1mdW5jdGlvbih0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIGU9dC5fcHJldixuPXQuX25leHQ7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2l0SGVhZD1uOmUuX25leHQ9bixudWxsPT09bj90aGlzLl9pdFRhaWw9ZTpuLl9wcmV2PWUsdH0sdC5wcm90b3R5cGUuX2FkZFRvTW92ZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZT90Oih0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10LHQpfSx0LnByb3RvdHlwZS5fYWRkVG9SZW1vdmFscz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgVmUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bnVsbCx0Ll9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9dCx0Ll9wcmV2UmVtb3ZlZD1udWxsKToodC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPXQpLHR9LHQucHJvdG90eXBlLl9hZGRJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fSx0fSgpLEZlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9LExlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcihuPXRoaXMuX2hlYWQ7bnVsbCE9PW47bj1uLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9bi5jdXJyZW50SW5kZXgpJiZ4KG4udHJhY2tCeUlkLHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH0sdH0oKSxWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQsbj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IExlLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBuP24uZ2V0KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0VtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXAuY2xlYXIoKX0sdH0oKTtmdW5jdGlvbiBCZSh0LGUsbil7dmFyIHI9dC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO3ZhciBpPTA7cmV0dXJuIG4mJnI8bi5sZW5ndGgmJihpPW5bcl0pLHIrZStpfXZhciB6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxNZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVZX0sdH0oKSxVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hDaGFuZ2VkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fE1lKHQpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK0ModCkrIicuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZCIpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG49dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCxmdW5jdGlvbih0LHIpe2lmKG4mJm4ua2V5PT09cillLl9tYXliZUFkZFRvQ2hhbmdlcyhuLHQpLGUuX2FwcGVuZEFmdGVyPW4sbj1uLl9uZXh0O2Vsc2V7dmFyIGk9ZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocix0KTtuPWUuX2luc2VydEJlZm9yZU9yQXBwZW5kKG4saSl9fSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsaT1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1pKSxpJiYoaS5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIG89bmV3IEhlKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG8pLG8uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobyksb30sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXt4KGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2FkZFRvQWRkaXRpb25zPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD10Oih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0aGlzLl9hZGRpdGlvbnNUYWlsPXQpfSx0LnByb3RvdHlwZS5fYWRkVG9DaGFuZ2VzPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX0sdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlKHRbbl0sbil9KX0sdH0oKSxIZT1mdW5jdGlvbih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9LFFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG51bGwhPW4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IFAsbmV3IGtdXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYobnVsbCE9bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAnIisoKGU9dCkubmFtZXx8dHlwZW9mIGUpKyInIil9LHQubmdJbmplY3RhYmxlRGVmPXUoe3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoW25ldyBOZV0pfX0pLHR9KCkscWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYobil7dmFyIHI9bi5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgdChlKX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJue3Byb3ZpZGU6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGV4dGVuZCBLZXlWYWx1ZURpZmZlcnMgd2l0aG91dCBhIHBhcmVudCBpbmplY3RvciIpO3JldHVybiB0LmNyZWF0ZShlLG4pfSxkZXBzOltbdCxuZXcgUCxuZXcga11dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIiciKX0sdH0oKSxHZT1bbmV3IHplXSxZZT1uZXcgUWUoW25ldyBOZV0pLFdlPW5ldyBxZShHZSksWmU9bmUobnVsbCwiY29yZSIsW3twcm92aWRlOnl0LHVzZVZhbHVlOiJ1bmtub3duIn0se3Byb3ZpZGU6aWUsZGVwczpbTl19LHtwcm92aWRlOkd0LGRlcHM6W119LHtwcm92aWRlOnZ0LGRlcHM6W119XSksS2U9bmV3IGMoIkxvY2FsZUlkIik7ZnVuY3Rpb24gWGUoKXtyZXR1cm4gWWV9ZnVuY3Rpb24gJGUoKXtyZXR1cm4gV2V9ZnVuY3Rpb24gSmUodCl7cmV0dXJuIHR8fCJlbi1VUyJ9dmFyIHRuPWZ1bmN0aW9uKHQpe30sZW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmJvZHksbnVsbD09dGhpcy5pbmVydEJvZHlFbGVtZW50KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3RoaXMuaW5lcnREb2N1bWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKSxlLmFwcGVuZENoaWxkKHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9dGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48ZyBvbmxvYWQ9InRoaXMucGFyZW50Tm9kZS5yZW1vdmUoKSI+PC9nPjwvc3ZnPicsIXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yfHx0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIik/KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9Jzxzdmc+PHA+PHN0eWxlPjxpbWcgc3JjPSI8L3N0eWxlPjxpbWcgc3JjPXggb25lcnJvcj1hbGVydCgxKS8vIj4nLHRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3RvciYmdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInN2ZyBpbWciKSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuISF3aW5kb3cuRE9NUGFyc2VyfWNhdGNoKHQpe3JldHVybiExfX0oKT90aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfRE9NUGFyc2VyOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50KTp0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X1hIUn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9YSFI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt0PWVuY29kZVVSSSh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH12YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5yZXNwb25zZVR5cGU9ImRvY3VtZW50IixlLm9wZW4oIkdFVCIsImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsIit0LCExKSxlLnNlbmQobnVsbCk7dmFyIG49ZS5yZXNwb25zZS5ib2R5O3JldHVybiBuLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCksbn0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt2YXIgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCksZX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19LHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfSW5lcnREb2N1bWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4iY29udGVudCJpbiBlPyhlLmlubmVySFRNTD10LGUpOih0aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPXQsdGhpcy5kZWZhdWx0RG9jLmRvY3VtZW50TW9kZSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnModGhpcy5pbmVydEJvZHlFbGVtZW50KSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQpfSx0LnByb3RvdHlwZS5zdHJpcEN1c3RvbU5zQXR0cnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXR0cmlidXRlcyxuPWUubGVuZ3RoLTE7MDxuO24tLSl7dmFyIHI9ZS5pdGVtKG4pLm5hbWU7InhtbG5zOm5zMSIhPT1yJiYwIT09ci5pbmRleE9mKCJuczE6Iil8fHQucmVtb3ZlQXR0cmlidXRlKHIpfWZvcih2YXIgaT10LmZpcnN0Q2hpbGQ7aTspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyhpKSxpPWkubmV4dFNpYmxpbmd9LHR9KCksbm49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxybj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05K1wvXSs9KiQvaTtmdW5jdGlvbiBvbih0KXtyZXR1cm4odD1TdHJpbmcodCkpLm1hdGNoKG5uKXx8dC5tYXRjaChybik/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBVUkwgdmFsdWUgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIiksInVuc2FmZToiK3QpfWZ1bmN0aW9uIGFuKHQpe3ZhciBlLG4saT17fTt0cnl7Zm9yKHZhciBvPU9iamVjdChyLmUpKHQuc3BsaXQoIiwiKSksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpaVthLnZhbHVlXT0hMH1jYXRjaCh0KXtlPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGUpdGhyb3cgZS5lcnJvcn19cmV0dXJuIGl9ZnVuY3Rpb24gc24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG4saSxvPXt9O3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuZSkodCkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciBsPXMudmFsdWU7Zm9yKHZhciB1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmKG9bdV09ITApfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG99dmFyIGxuLHVuPWFuKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksY249YW4oImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxmbj1hbigicnAscnQiKSxobj1zbihmbixjbikscG49c24odW4sc24oY24sYW4oImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLHNuKGZuLGFuKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksaG4pLGRuPWFuKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxtbj1hbigic3Jjc2V0IikseW49c24oZG4sbW4sYW4oImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIikpLGduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZUNoaWxkcmVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZpcnN0Q2hpbGQ7ZTspaWYoZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP3RoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTt2YXIgbj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKG4pe2U9bjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9LHQucHJvdG90eXBlLnN0YXJ0RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYocG4uaGFzT3duUHJvcGVydHkoZSkpe3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2Zvcih2YXIgbixyPXQuYXR0cmlidXRlcyxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXIuaXRlbShpKSxhPW8ubmFtZSxzPWEudG9Mb3dlckNhc2UoKTtpZih5bi5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIGw9by52YWx1ZTtkbltzXSYmKGw9b24obCkpLG1uW3NdJiYobj1sLGw9KG49U3RyaW5nKG4pKS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb24odC50cmltKCkpfSkuam9pbigiLCAiKSksdGhpcy5idWYucHVzaCgiICIsYSwnPSInLF9uKGwpLCciJyl9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH10aGlzLmJ1Zi5wdXNoKCI+Iil9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH0sdC5wcm90b3R5cGUuZW5kRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cG4uaGFzT3duUHJvcGVydHkoZSkmJiF1bi5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfSx0LnByb3RvdHlwZS5jaGFycz1mdW5jdGlvbih0KXt0aGlzLmJ1Zi5wdXNoKF9uKHQpKX0sdC5wcm90b3R5cGUuY2hlY2tDbG9iYmVyZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogIit0Lm91dGVySFRNTCk7cmV0dXJuIGV9LHR9KCksdm49L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGJuPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBfbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSh2bixmdW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNoYXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKGJuLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIHduKHQsZSl7dmFyIG49bnVsbDt0cnl7bG49bG58fG5ldyBlbih0KTt2YXIgcj1lP1N0cmluZyhlKToiIjtuPWxuLmdldEluZXJ0Qm9keUVsZW1lbnQocik7dmFyIGk9NSxvPXI7ZG97aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2ktLSxyPW8sbz1uLmlubmVySFRNTCxuPWxuLmdldEluZXJ0Qm9keUVsZW1lbnQocil9d2hpbGUociE9PW8pO3ZhciBhPW5ldyBnbixzPWEuc2FuaXRpemVDaGlsZHJlbih4bihuKXx8bik7cmV0dXJuIHRlKCkmJmEuc2FuaXRpemVkU29tZXRoaW5nJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgSFRNTCBzdHJpcHBlZCBzb21lIGNvbnRlbnQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpLiIpLHN9ZmluYWxseXtpZihuKWZvcih2YXIgbD14bihuKXx8bjtsLmZpcnN0Q2hpbGQ7KWwucmVtb3ZlQ2hpbGQobC5maXJzdENoaWxkKX19ZnVuY3Rpb24geG4odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PXQubm9kZU5hbWV9KHQpP3QuY29udGVudDpudWxsfXZhciBDbj1uZXcgUmVnRXhwKCJeKFstLC5cIiclXyEjIGEtekEtWjAtOV0rfCg/Oig/Om1hdHJpeHx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHNrZXd8cGVyc3BlY3RpdmUpKD86WHxZfDNkKT98KD86cmdifGhzbClhP3woPzpyZXBlYXRpbmctKT8oPzpsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudHwoPzpjYWxjfGF0dHIpKVxcKFstMC05LiUsICNhLXpBLVpdK1xcKSkkIiwiZyIpLEVuPS9edXJsXCgoW14pXSspXCkkLztmdW5jdGlvbiBPbih0KXtpZighKHQ9U3RyaW5nKHQpLnRyaW0oKSkpcmV0dXJuIiI7dmFyIGU9dC5tYXRjaChFbik7cmV0dXJuIGUmJm9uKGVbMV0pPT09ZVsxXXx8dC5tYXRjaChDbikmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dC5jaGFyQXQocik7IiciPT09aSYmbj9lPSFlOiciJz09PWkmJmUmJihuPSFuKX1yZXR1cm4gZSYmbn0odCk/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBzdHlsZSB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksInVuc2FmZSIpfXZhciBTbj1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5IVE1MPTFdPSJIVE1MIix0W3QuU1RZTEU9Ml09IlNUWUxFIix0W3QuU0NSSVBUPTNdPSJTQ1JJUFQiLHRbdC5VUkw9NF09IlVSTCIsdFt0LlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIix0fSh7fSksa249ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIFRuKHQsZSxuKXt2YXIgcj10LnN0YXRlLGk9MTc5MiZyO3JldHVybiBpPT09ZT8odC5zdGF0ZT0tMTc5MyZyfG4sdC5pbml0SW5kZXg9LTEsITApOmk9PT1ufWZ1bmN0aW9uIFBuKHQsZSxuKXtyZXR1cm4oMTc5MiZ0LnN0YXRlKT09PWUmJnQuaW5pdEluZGV4PD1uJiYodC5pbml0SW5kZXg9bisxLCEwKX1mdW5jdGlvbiBBbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIGpuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gSW4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBNbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIE5uKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19dmFyIFJuPXtzZXRDdXJyZW50Tm9kZTp2b2lkIDAsY3JlYXRlUm9vdFZpZXc6dm9pZCAwLGNyZWF0ZUVtYmVkZGVkVmlldzp2b2lkIDAsY3JlYXRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY3JlYXRlTmdNb2R1bGVSZWY6dm9pZCAwLG92ZXJyaWRlUHJvdmlkZXI6dm9pZCAwLG92ZXJyaWRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY2xlYXJPdmVycmlkZXM6dm9pZCAwLGNoZWNrQW5kVXBkYXRlVmlldzp2b2lkIDAsY2hlY2tOb0NoYW5nZXNWaWV3OnZvaWQgMCxkZXN0cm95Vmlldzp2b2lkIDAscmVzb2x2ZURlcDp2b2lkIDAsY3JlYXRlRGVidWdDb250ZXh0OnZvaWQgMCxoYW5kbGVFdmVudDp2b2lkIDAsdXBkYXRlRGlyZWN0aXZlczp2b2lkIDAsdXBkYXRlUmVuZGVyZXI6dm9pZCAwLGRpcnR5UGFyZW50UXVlcmllczp2b2lkIDB9O2Z1bmN0aW9uIERuKHQsZSxuLHIpe3ZhciBpPSJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJyIrZSsiJy4gQ3VycmVudCB2YWx1ZTogJyIrbisiJy4iO3JldHVybiByJiYoaSs9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rID8iKSxmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gRm4obixlKSxufShpLHQpfWZ1bmN0aW9uIEZuKHQsZSl7dFt0dF09ZSx0W250XT1lLmxvZ0Vycm9yLmJpbmQoZSl9ZnVuY3Rpb24gTG4odCl7cmV0dXJuIG5ldyBFcnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3OiAiK3QpfXZhciBWbj1mdW5jdGlvbigpe30sQm49bmV3IE1hcDtmdW5jdGlvbiB6bih0KXt2YXIgZT1Cbi5nZXQodCk7cmV0dXJuIGV8fChlPUModCkrIl8iK0JuLnNpemUsQm4uc2V0KHQsZSkpLGV9ZnVuY3Rpb24gVW4odCxlLG4scil7aWYoQWUuaXNXcmFwcGVkKHIpKXtyPUFlLnVud3JhcChyKTt2YXIgaT10LmRlZi5ub2Rlc1tlXS5iaW5kaW5nSW5kZXgrbixvPUFlLnVud3JhcCh0Lm9sZFZhbHVlc1tpXSk7dC5vbGRWYWx1ZXNbaV09bmV3IEFlKG8pfXJldHVybiByfXZhciBIbj0iJCR1bmRlZmluZWQiLFFuPSIkJGVtcHR5IjtmdW5jdGlvbiBxbih0KXtyZXR1cm57aWQ6SG4sc3R5bGVzOnQuc3R5bGVzLGVuY2Fwc3VsYXRpb246dC5lbmNhcHN1bGF0aW9uLGRhdGE6dC5kYXRhfX12YXIgR249MDtmdW5jdGlvbiBZbih0LGUsbixyKXtyZXR1cm4hKCEoMiZ0LnN0YXRlKSYmeCh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gV24odCxlLG4scil7cmV0dXJuISFZbih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIFpuKHQsZSxuLHIpe3ZhciBpPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IVBlKGkscikpe3ZhciBvPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBEbihSbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksbysiOiAiK2ksbysiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBLbih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIFhuKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiAkbih0LGUsbixyKXt0cnl7cmV0dXJuIEtuKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP2puKHQsZSkuY29tcG9uZW50Vmlldzp0KSxSbi5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChlKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX1mdW5jdGlvbiBKbih0KXtyZXR1cm4gdC5wYXJlbnQ/am4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiB0cih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uIGVyKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGpuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBBbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiBucih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIHJyKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGlyKHQpe3JldHVybiAxPDx0JTMyfWZ1bmN0aW9uIG9yKHQpe3ZhciBlPXt9LG49MCxpPXt9O3JldHVybiB0JiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG89T2JqZWN0KHIuYykodCwyKSxhPW9bMF0scz1vWzFdOyJudW1iZXIiPT10eXBlb2YgYT8oZVthXT1zLG58PWlyKGEpKTppW2FdPXN9KSx7bWF0Y2hlZFF1ZXJpZXM6ZSxyZWZlcmVuY2VzOmksbWF0Y2hlZFF1ZXJ5SWRzOm59fWZ1bmN0aW9uIGFyKHQsZSl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBuLGksbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaT0obz1PYmplY3Qoci5jKSh0LDIpKVswXSxuPW9bMV0pOihpPTAsbj10KSxuJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJmUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEEse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSkse2ZsYWdzOmksdG9rZW46bix0b2tlbktleTp6bihuKX19KX1mdW5jdGlvbiBzcih0LGUsbil7dmFyIHI9bi5yZW5kZXJQYXJlbnQ7cmV0dXJuIHI/MD09KDEmci5mbGFncyl8fDA9PSgzMzU1NDQzMiZyLmZsYWdzKXx8ci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZSYmci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZS5lbmNhcHN1bGF0aW9uPT09WC5OYXRpdmU/am4odCxuLnJlbmRlclBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ6dm9pZCAwOmV9dmFyIGxyPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHVyKHQpe3ZhciBlPWxyLmdldCh0KTtyZXR1cm4gZXx8KChlPXQoZnVuY3Rpb24oKXtyZXR1cm4gVm59KSkuZmFjdG9yeT10LGxyLnNldCh0LGUpKSxlfWZ1bmN0aW9uIGNyKHQsZSxuLHIsaSl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZShlcih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSxmcih0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsaSl9ZnVuY3Rpb24gZnIodCxlLG4scixpLG8sYSl7Zm9yKHZhciBzPW47czw9cjtzKyspe3ZhciBsPXQuZGVmLm5vZGVzW3NdOzExJmwuZmxhZ3MmJnByKHQsbCxlLGksbyxhKSxzKz1sLmNoaWxkQ291bnR9fWZ1bmN0aW9uIGhyKHQsZSxuLHIsaSxvKXtmb3IodmFyIGE9dDthJiYhbnIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciBzPWEucGFyZW50LGw9dHIoYSksdT1sLm5vZGVJbmRleCtsLmNoaWxkQ291bnQsYz1sLm5vZGVJbmRleCsxO2M8PXU7YysrKXt2YXIgZj1zLmRlZi5ub2Rlc1tjXTtmLm5nQ29udGVudEluZGV4PT09ZSYmcHIocyxmLG4scixpLG8pLGMrPWYuY2hpbGRDb3VudH1pZighcy5wYXJlbnQpe3ZhciBoPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGgpZm9yKGM9MDtjPGgubGVuZ3RoO2MrKylkcih0LGhbY10sbixyLGksbyl9fWZ1bmN0aW9uIHByKHQsZSxuLHIsaSxvKXtpZig4JmUuZmxhZ3MpaHIodCxlLm5nQ29udGVudC5pbmRleCxuLHIsaSxvKTtlbHNle3ZhciBhPWVyKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmZHIodCxhLG4scixpLG8pLDMyJmUuYmluZGluZ0ZsYWdzJiZkcihqbih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLGksbykpOmRyKHQsYSxuLHIsaSxvKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgcz1qbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGw9MDtsPHMubGVuZ3RoO2wrKyljcihzW2xdLG4scixpLG8pOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZmcih0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixpLG8pfX1mdW5jdGlvbiBkcih0LGUsbixyLGksbyl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLGkpO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOm8ucHVzaChlKX19dmFyIG1yPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIHlyKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2gobXIpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiBncih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX1mdW5jdGlvbiB2cih0LGUsbixyLGksbyxhLHMsbCx1LGMsZixoLHAsZCxtLHksZyx2LGIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIGUrYnIobikrcjtjYXNlIDI6cmV0dXJuIGUrYnIobikrciticihpKStvO2Nhc2UgMzpyZXR1cm4gZSticihuKStyK2JyKGkpK28rYnIoYSkrcztjYXNlIDQ6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdTtjYXNlIDU6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdSticihjKStmO2Nhc2UgNjpyZXR1cm4gZSticihuKStyK2JyKGkpK28rYnIoYSkrcyticihsKSt1K2JyKGMpK2YrYnIoaCkrcDtjYXNlIDc6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdSticihjKStmK2JyKGgpK3ArYnIoZCkrbTtjYXNlIDg6cmV0dXJuIGUrYnIobikrciticihpKStvK2JyKGEpK3MrYnIobCkrdSticihjKStmK2JyKGgpK3ArYnIoZCkrbSticih5KStnO2Nhc2UgOTpyZXR1cm4gZSticihuKStyK2JyKGkpK28rYnIoYSkrcyticihsKSt1K2JyKGMpK2YrYnIoaCkrcCticihkKSttK2JyKHkpK2crYnIodikrYjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gOSBleHByZXNzaW9ucyIpfX1mdW5jdGlvbiBicih0KXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCk6IiJ9ZnVuY3Rpb24gX3IodCxlLG4scixpLG8pe3R8PTE7dmFyIGE9b3IoZSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsZmxhZ3M6dCxjaGVja0luZGV4Oi0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmEubWF0Y2hlZFF1ZXJpZXMsbWF0Y2hlZFF1ZXJ5SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6YS5yZWZlcmVuY2VzLG5nQ29udGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDp7bnM6bnVsbCxuYW1lOm51bGwsYXR0cnM6bnVsbCx0ZW1wbGF0ZTpvP3VyKG8pOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Om51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOm51bGwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6aXx8Vm59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIHdyKHQsZSxuLGksbyxhLHMsbCx1LGMsZixoKXt2b2lkIDA9PT1zJiYocz1bXSksY3x8KGM9Vm4pO3ZhciBwPW9yKG4pLGQ9cC5tYXRjaGVkUXVlcmllcyxtPXAucmVmZXJlbmNlcyx5PXAubWF0Y2hlZFF1ZXJ5SWRzLGc9bnVsbCx2PW51bGw7YSYmKGc9KEk9T2JqZWN0KHIuYykoeXIoYSksMikpWzBdLHY9SVsxXSksbD1sfHxbXTtmb3IodmFyIGI9bmV3IEFycmF5KGwubGVuZ3RoKSxfPTA7XzxsLmxlbmd0aDtfKyspe3ZhciB3PU9iamVjdChyLmMpKGxbX10sMykseD13WzBdLEM9d1sxXSxFPXdbMl0sTz1PYmplY3Qoci5jKSh5cihDKSwyKSxTPU9bMF0saz1PWzFdLFQ9dm9pZCAwLFA9dm9pZCAwO3N3aXRjaCgxNSZ4KXtjYXNlIDQ6UD1FO2JyZWFrO2Nhc2UgMTpjYXNlIDg6VD1FfWJbX109e2ZsYWdzOngsbnM6UyxuYW1lOmssbm9uTWluaWZpZWROYW1lOmssc2VjdXJpdHlDb250ZXh0OlQsc3VmZml4OlB9fXU9dXx8W107dmFyIEE9bmV3IEFycmF5KHUubGVuZ3RoKTtmb3IoXz0wO188dS5sZW5ndGg7XysrKXt2YXIgaj1PYmplY3Qoci5jKSh1W19dLDIpO0FbX109e3R5cGU6MCx0YXJnZXQ6alswXSxldmVudE5hbWU6alsxXSxwcm9wTmFtZTpudWxsfX12YXIgSSxNPShzPXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHIuYykodCwyKSxuPWVbMF0saT1lWzFdLG89T2JqZWN0KHIuYykoeXIobiksMik7cmV0dXJuW29bMF0sb1sxXSxpXX0pO3JldHVybiBoPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT1Ibil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1YLk5vbmV8fHQuc3R5bGVzLmxlbmd0aHx8T2JqZWN0LmtleXModC5kYXRhKS5sZW5ndGg7dC5pZD1lPyJjIitHbisrOlFufXJldHVybiB0JiZ0LmlkPT09UW4mJih0PW51bGwpLHR8fG51bGx9KGgpLGYmJihlfD0zMzU1NDQzMikse25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmV8PTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6ZCxtYXRjaGVkUXVlcnlJZHM6eSxyZWZlcmVuY2VzOm0sbmdDb250ZW50SW5kZXg6aSxjaGlsZENvdW50Om8sYmluZGluZ3M6YixiaW5kaW5nRmxhZ3M6Z3IoYiksb3V0cHV0czpBLGVsZW1lbnQ6e25zOmcsbmFtZTp2LGF0dHJzOk0sdGVtcGxhdGU6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6Znx8bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6aCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpjfHxWbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24geHIodCxlLG4pe3ZhciBpLG89bi5lbGVtZW50LGE9dC5yb290LnNlbGVjdG9yT3JOb2RlLHM9dC5yZW5kZXJlcjtpZih0LnBhcmVudHx8IWEpe2k9by5uYW1lP3MuY3JlYXRlRWxlbWVudChvLm5hbWUsby5ucyk6cy5jcmVhdGVDb21tZW50KCIiKTt2YXIgbD1zcih0LGUsbik7bCYmcy5hcHBlbmRDaGlsZChsLGkpfWVsc2UgaT1zLnNlbGVjdFJvb3RFbGVtZW50KGEpO2lmKG8uYXR0cnMpZm9yKHZhciB1PTA7dTxvLmF0dHJzLmxlbmd0aDt1Kyspe3ZhciBjPU9iamVjdChyLmMpKG8uYXR0cnNbdV0sMyk7cy5zZXRBdHRyaWJ1dGUoaSxjWzFdLGNbMl0sY1swXSl9cmV0dXJuIGl9ZnVuY3Rpb24gQ3IodCxlLG4scil7Zm9yKHZhciBpPTA7aTxuLm91dHB1dHMubGVuZ3RoO2krKyl7dmFyIG89bi5vdXRwdXRzW2ldLGE9RXIodCxuLm5vZGVJbmRleCwoZj1vLmV2ZW50TmFtZSwoYz1vLnRhcmdldCk/YysiOiIrZjpmKSkscz1vLnRhcmdldCxsPXQ7ImNvbXBvbmVudCI9PT1vLnRhcmdldCYmKHM9bnVsbCxsPWUpO3ZhciB1PWwucmVuZGVyZXIubGlzdGVuKHN8fHIsby5ldmVudE5hbWUsYSk7dC5kaXNwb3NhYmxlc1tuLm91dHB1dEluZGV4K2ldPXV9dmFyIGMsZn1mdW5jdGlvbiBFcih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiAkbih0LGUsbixyKX19ZnVuY3Rpb24gT3IodCxlLG4scil7aWYoIVduKHQsZSxuLHIpKXJldHVybiExO3ZhciBpPWUuYmluZGluZ3Nbbl0sbz1qbih0LGUubm9kZUluZGV4KSxhPW8ucmVuZGVyRWxlbWVudCxzPWkubmFtZTtzd2l0Y2goMTUmaS5mbGFncyl7Y2FzZSAxOiFmdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9ZS5zZWN1cml0eUNvbnRleHQscz1hP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoYSxvKTpvO3M9bnVsbCE9cz9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgbD10LnJlbmRlcmVyO251bGwhPW8/bC5zZXRBdHRyaWJ1dGUobixpLHMscik6bC5yZW1vdmVBdHRyaWJ1dGUobixpLHIpfSh0LGksYSxpLm5zLHMscik7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnJlbmRlcmVyO3I/aS5hZGRDbGFzcyhlLG4pOmkucmVtb3ZlQ2xhc3MoZSxuKX0odCxhLHMscik7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoU24uU1RZTEUsaSk7aWYobnVsbCE9byl7bz1vLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9YSYmKG8rPWEpfWVsc2Ugbz1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9bz9zLnNldFN0eWxlKG4scixvKTpzLnJlbW92ZVN0eWxlKG4scil9KHQsaSxhLHMscik7YnJlYWs7Y2FzZSA4OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPWUuc2VjdXJpdHlDb250ZXh0LGE9bz90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKG8saSk6aTt0LnJlbmRlcmVyLnNldFByb3BlcnR5KG4scixhKX0oMzM1NTQ0MzImZS5mbGFncyYmMzImaS5mbGFncz9vLmNvbXBvbmVudFZpZXc6dCxpLGEscyxyKX1yZXR1cm4hMH12YXIgU3I9bmV3IE9iamVjdCxrcj16bihOKSxUcj16bihJKSxQcj16bihqdCk7ZnVuY3Rpb24gQXIodCxlLG4scil7cmV0dXJuIG49TyhuKSx7aW5kZXg6LTEsZGVwczphcihyLEMoZSkpLGZsYWdzOnQsdG9rZW46ZSx2YWx1ZTpufX1mdW5jdGlvbiBqcih0KXtmb3IodmFyIGU9e30sbj1bXSxyPSExLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvLnRva2VuPT09c3QmJihyPSEwKSwxMDczNzQxODI0Jm8uZmxhZ3MmJm4ucHVzaChvLnRva2VuKSxvLmluZGV4PWksZVt6bihvLnRva2VuKV09b31yZXR1cm57ZmFjdG9yeTpudWxsLHByb3ZpZGVyc0J5S2V5OmUscHJvdmlkZXJzOnQsbW9kdWxlczpuLGlzUm9vdDpyfX1mdW5jdGlvbiBJcih0LGUsbil7dm9pZCAwPT09biYmKG49Ti5USFJPV19JRl9OT1RfRk9VTkQpO3ZhciByLGksbz1aKHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIGtyOmNhc2UgVHI6Y2FzZSBQcjpyZXR1cm4gdH12YXIgcz10Ll9kZWYucHJvdmlkZXJzQnlLZXlbYV07aWYocyl7dmFyIGw9dC5fcHJvdmlkZXJzW3MuaW5kZXhdO3JldHVybiB2b2lkIDA9PT1sJiYobD10Ll9wcm92aWRlcnNbcy5pbmRleF09TXIodCxzKSksbD09PVNyP3ZvaWQgMDpsfWlmKGUudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYocj10LG51bGwhPShpPWUudG9rZW4ubmdJbmplY3RhYmxlRGVmKS5wcm92aWRlZEluJiYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fZGVmLm1vZHVsZXMuaW5kZXhPZihpLnByb3ZpZGVkSW4pPi0xfShyKXx8InJvb3QiPT09aS5wcm92aWRlZEluJiZyLl9kZWYuaXNSb290KSkpe3ZhciB1PXQuX3Byb3ZpZGVycy5sZW5ndGg7cmV0dXJuIHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTplLnRva2VuLm5nSW5qZWN0YWJsZURlZi5mYWN0b3J5LGRlcHM6W10saW5kZXg6dSx0b2tlbjplLnRva2VufSx0Ll9wcm92aWRlcnNbdV09U3IsdC5fcHJvdmlkZXJzW3VdPU1yKHQsdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldKX1yZXR1cm4gdC5fcGFyZW50LmdldChlLnRva2VuLG4pfWZpbmFsbHl7WihvKX19ZnVuY3Rpb24gTXIodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOm49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUoSXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgZShJcih0LG5bMF0pLElyKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGUoSXIodCxuWzBdKSxJcih0LG5bMV0pLElyKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBvPW5ldyBBcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUlyKHQsblthXSk7cmV0dXJuIG5ldyhlLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5kKShbdm9pZCAwXSxvKSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAxMDI0Om49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGUoKTtjYXNlIDE6cmV0dXJuIGUoSXIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBlKElyKHQsblswXSksSXIodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBlKElyKHQsblswXSksSXIodCxuWzFdKSxJcih0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgbz1BcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPUlyKHQsblthXSk7cmV0dXJuIGUuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKG8pKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMjA0ODpuPUlyKHQsZS5kZXBzWzBdKTticmVhaztjYXNlIDI1NjpuPWUudmFsdWV9cmV0dXJuIG49PT1Tcnx8bnVsbD09bnx8Im9iamVjdCIhPXR5cGVvZiBufHwxMzEwNzImZS5mbGFnc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIG4ubmdPbkRlc3Ryb3l8fChlLmZsYWdzfD0xMzEwNzIpLHZvaWQgMD09PW4/U3I6bn1mdW5jdGlvbiBOcih0LGUpe3ZhciBuPXQudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztpZigobnVsbD09ZXx8ZT49bi5sZW5ndGgpJiYoZT1uLmxlbmd0aC0xKSxlPDApcmV0dXJuIG51bGw7dmFyIHI9bltlXTtyZXR1cm4gci52aWV3Q29udGFpbmVyUGFyZW50PW51bGwsTHIobixlKSxSbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksRHIocikscn1mdW5jdGlvbiBScih0LGUsbil7dmFyIHI9ZT9lcihlLGUuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSk6dC5yZW5kZXJFbGVtZW50O2NyKG4sMixuLnJlbmRlcmVyLnBhcmVudE5vZGUociksbi5yZW5kZXJlci5uZXh0U2libGluZyhyKSx2b2lkIDApfWZ1bmN0aW9uIERyKHQpe2NyKHQsMyxudWxsLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBGcih0LGUsbil7ZT49dC5sZW5ndGg/dC5wdXNoKG4pOnQuc3BsaWNlKGUsMCxuKX1mdW5jdGlvbiBMcih0LGUpe2U+PXQubGVuZ3RoLTE/dC5wb3AoKTp0LnNwbGljZShlLDEpfXZhciBWcj1uZXcgT2JqZWN0O2Z1bmN0aW9uIEJyKHQsZSxuLHIsaSxvKXtyZXR1cm4gbmV3IHpyKHQsZSxuLHIsaSxvKX12YXIgenI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSl7dmFyIHM9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBzLnNlbGVjdG9yPWUscy5jb21wb25lbnRUeXBlPW4scy5faW5wdXRzPWkscy5fb3V0cHV0cz1vLHMubmdDb250ZW50U2VsZWN0b3JzPWEscy52aWV3RGVmRmFjdG9yeT1yLHN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuX2lucHV0cztmb3IodmFyIG4gaW4gZSl0LnB1c2goe3Byb3BOYW1lOm4sdGVtcGxhdGVOYW1lOmVbbl19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm91dHB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fb3V0cHV0cyl0LnB1c2goe3Byb3BOYW1lOmUsdGVtcGxhdGVOYW1lOnRoaXMuX291dHB1dHNbZV19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJuZ01vZHVsZSBzaG91bGQgYmUgcHJvdmlkZWQiKTt2YXIgaT11cih0aGlzLnZpZXdEZWZGYWN0b3J5KSxvPWkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRQcm92aWRlci5ub2RlSW5kZXgsYT1Sbi5jcmVhdGVSb290Vmlldyh0LGV8fFtdLG4saSxyLFZyKSxzPUluKGEsbykuaW5zdGFuY2U7cmV0dXJuIG4mJmEucmVuZGVyZXIuc2V0QXR0cmlidXRlKGpuKGEsMCkucmVuZGVyRWxlbWVudCwibmctdmVyc2lvbiIsSi5mdWxsKSxuZXcgVXIoYSxuZXcgR3IoYSkscyl9LGV9KHh0KSxVcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3ZpZXc9ZSxpLl92aWV3UmVmPW4saS5fY29tcG9uZW50PXIsaS5fZWxEZWY9aS5fdmlldy5kZWYubm9kZXNbMF0saS5ob3N0Vmlldz1uLGkuY2hhbmdlRGV0ZWN0b3JSZWY9bixpLmluc3RhbmNlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmZShqbih0aGlzLl92aWV3LHRoaXMuX2VsRGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgS3IodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb21wb25lbnRUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudC5jb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld1JlZi5kZXN0cm95KCl9LGUucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3UmVmLm9uRGVzdHJveSh0KX0sZX0oZnVuY3Rpb24oKXt9KTtmdW5jdGlvbiBIcih0LGUsbil7cmV0dXJuIG5ldyBRcih0LGUsbil9dmFyIFFyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlldz10LHRoaXMuX2VsRGVmPWUsdGhpcy5fZGF0YT1uLHRoaXMuX2VtYmVkZGVkVmlld3M9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgZmUodGhpcy5fZGF0YS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZpZXcsZT10aGlzLl9lbERlZi5wYXJlbnQ7IWUmJnQ7KWU9dHIodCksdD10LnBhcmVudDtyZXR1cm4gdD9uZXcgS3IodCxlKTpuZXcgS3IodGhpcy5fdmlldyxudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgZT1Ocih0aGlzLl9kYXRhLHQpO1JuLmRlc3Ryb3lWaWV3KGUpfX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VtYmVkZGVkVmlld3NbdF07aWYoZSl7dmFyIG49bmV3IEdyKGUpO3JldHVybiBuLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSxufXJldHVybiBudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuY3JlYXRlRW1iZWRkZWRWaWV3KGV8fHt9KTtyZXR1cm4gdGhpcy5pbnNlcnQocixuKSxyfSx0LnByb3RvdHlwZS5jcmVhdGVDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1ufHx0aGlzLnBhcmVudEluamVjdG9yO2l8fHQgaW5zdGFuY2VvZiBBdHx8KGk9by5nZXQoanQpKTt2YXIgYT10LmNyZWF0ZShvLHIsdm9pZCAwLGkpO3JldHVybiB0aGlzLmluc2VydChhLmhvc3RWaWV3LGUpLGF9LHQucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGluc2VydCBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhPXQ7cmV0dXJuIGk9YS5fdmlldyxvPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbnVsbCE9PShyPWUpJiZ2b2lkIDAhPT1yfHwocj1vLmxlbmd0aCksaS52aWV3Q29udGFpbmVyUGFyZW50PXRoaXMuX3ZpZXcsRnIobyxyLGkpLGZ1bmN0aW9uKHQsZSl7dmFyIG49Sm4oZSk7aWYobiYmbiE9PXQmJiEoMTYmZS5zdGF0ZSkpe2Uuc3RhdGV8PTE2O3ZhciByPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO3J8fChyPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzPVtdKSxyLnB1c2goZSksZnVuY3Rpb24odCxuKXtpZighKDQmbi5mbGFncykpe2UucGFyZW50LmRlZi5ub2RlRmxhZ3N8PTQsbi5mbGFnc3w9NDtmb3IodmFyIHI9bi5wYXJlbnQ7cjspci5jaGlsZEZsYWdzfD00LHI9ci5wYXJlbnR9fSgwLGUucGFyZW50Tm9kZURlZil9fShuLGkpLFJuLmRpcnR5UGFyZW50UXVlcmllcyhpKSxScihuLHI+MD9vW3ItMV06bnVsbCxpKSxhLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSx0fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhLHM9dGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpO3JldHVybiBpPWUsYT0obz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzKVtyPXNdLExyKG8sciksbnVsbD09aSYmKGk9by5sZW5ndGgpLEZyKG8saSxhKSxSbi5kaXJ0eVBhcmVudFF1ZXJpZXMoYSksRHIoYSksUnIobixpPjA/b1tpLTFdOm51bGwsYSksdH0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9TnIodGhpcy5fZGF0YSx0KTtlJiZSbi5kZXN0cm95VmlldyhlKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPU5yKHRoaXMuX2RhdGEsdCk7cmV0dXJuIGU/bmV3IEdyKGUpOm51bGx9LHR9KCk7ZnVuY3Rpb24gcXIodCl7cmV0dXJuIG5ldyBHcih0KX12YXIgR3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXc9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwsdGhpcy5fYXBwUmVmPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdE5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNyKHRoaXMuX3ZpZXcsMCx2b2lkIDAsdm9pZCAwLHQ9W10pLHQ7dmFyIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3ZpZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpe0tuKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdpbiYmdC5iZWdpbigpO3RyeXtSbi5jaGVja0FuZFVwZGF0ZVZpZXcodGhpcy5fdmlldyl9ZmluYWxseXt0LmVuZCYmdC5lbmQoKX19LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7Um4uY2hlY2tOb0NoYW5nZXNWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGV8PTR9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3LmRpc3Bvc2FibGVzfHwodGhpcy5fdmlldy5kaXNwb3NhYmxlcz1bXSksdGhpcy5fdmlldy5kaXNwb3NhYmxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmP3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpOnRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYuZGV0YWNoKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzKSksUm4uZGVzdHJveVZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbCxEcih0aGlzLl92aWV3KSxSbi5kaXJ0eVBhcmVudFF1ZXJpZXModGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhIik7dGhpcy5fYXBwUmVmPXR9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0fSgpO2Z1bmN0aW9uIFlyKHQsZSl7cmV0dXJuIG5ldyBXcih0LGUpfXZhciBXcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wYXJlbnRWaWV3PWUsci5fZGVmPW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHcihSbi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYsdGhpcy5fZGVmLmVsZW1lbnQudGVtcGxhdGUsdCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVsZW1lbnRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZlKGpuKHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odmUpO2Z1bmN0aW9uIFpyKHQsZSl7cmV0dXJuIG5ldyBLcih0LGUpfXZhciBLcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLmVsRGVmPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1OLlRIUk9XX0lGX05PVF9GT1VORCksUm4ucmVzb2x2ZURlcCh0aGlzLnZpZXcsdGhpcy5lbERlZiwhIXRoaXMuZWxEZWYmJjAhPSgzMzU1NDQzMiZ0aGlzLmVsRGVmLmZsYWdzKSx7ZmxhZ3M6MCx0b2tlbjp0LHRva2VuS2V5OnpuKHQpfSxlKX0sdH0oKTtmdW5jdGlvbiBYcih0LGUpe3ZhciBuPXQuZGVmLm5vZGVzW2VdO2lmKDEmbi5mbGFncyl7dmFyIHI9am4odCxuLm5vZGVJbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1wbGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIEFuKHQsbi5ub2RlSW5kZXgpLnJlbmRlclRleHQ7aWYoMjAyNDAmbi5mbGFncylyZXR1cm4gSW4odCxuLm5vZGVJbmRleCkuaW5zdGFuY2U7dGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHN0YXRlOiByZWFkIG5vZGVWYWx1ZSBmb3Igbm9kZSBpbmRleCAiK2UpfWZ1bmN0aW9uICRyKHQpe3JldHVybiBuZXcgSnIodC5yZW5kZXJlcil9dmFyIEpyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuYykoeXIoZSksMiksaT10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQoblsxXSxuWzBdKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGkpLGl9LHQucHJvdG90eXBlLmNyZWF0ZVZpZXdSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVUZW1wbGF0ZUFuY2hvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChlKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LG4pLG59LHQucHJvdG90eXBlLnByb2plY3ROb2Rlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlW25dKX0sdC5wcm90b3R5cGUuYXR0YWNoVmlld0FmdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KSxyPXRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCksaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKG4sZVtpXSxyKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXSxyPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShuKTt0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHIsbil9fSx0LnByb3RvdHlwZS5kZXN0cm95Vmlldz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUoZVtuXSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuR2xvYmFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1PYmplY3Qoci5jKSh5cihlKSwyKSxvPWlbMF0sYT1pWzFdO251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxhLG4sbyk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxhLG8pfSx0LnByb3RvdHlwZS5zZXRCaW5kaW5nRGVidWdJbmZvPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnNldEVsZW1lbnRDbGFzcz1mdW5jdGlvbih0LGUsbil7bj90aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50U3R5bGU9ZnVuY3Rpb24odCxlLG4pe251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbik6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUpfSx0LnByb3RvdHlwZS5pbnZva2VFbGVtZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSxuKXt0W2VdLmFwcGx5KHQsbil9LHQucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyLmFuaW1hdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCEiKX0sdH0oKTtmdW5jdGlvbiB0aSh0LGUsbixyKXtyZXR1cm4gbmV3IGVpKHQsZSxuLHIpfXZhciBlaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fbW9kdWxlVHlwZT10LHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9bix0aGlzLl9kZWY9cix0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLmluamVjdG9yPXRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2RlZixuPXQuX3Byb3ZpZGVycz1uZXcgQXJyYXkoZS5wcm92aWRlcnMubGVuZ3RoKSxyPTA7cjxlLnByb3ZpZGVycy5sZW5ndGg7cisrKXt2YXIgaT1lLnByb3ZpZGVyc1tyXTs0MDk2JmkuZmxhZ3N8fHZvaWQgMD09PW5bcl0mJihuW3JdPU1yKHQsaSkpfX0odGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9Ti5USFJPV19JRl9OT1RfRk9VTkQpLHZvaWQgMD09PW4mJihuPTApO3ZhciByPTA7cmV0dXJuIDQmbj9yfD0xOjImbiYmKHJ8PTQpLElyKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6em4odCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoVHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIrQyh0aGlzLmluc3RhbmNlLmNvbnN0cnVjdG9yKSsiIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpO3RoaXMuX2Rlc3Ryb3llZD0hMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Ll9kZWYscj1uZXcgU2V0LGk9MDtpPG4ucHJvdmlkZXJzLmxlbmd0aDtpKyspaWYoMTMxMDcyJm4ucHJvdmlkZXJzW2ldLmZsYWdzKXt2YXIgbz10Ll9wcm92aWRlcnNbaV07aWYobyYmbyE9PVNyKXt2YXIgYT1vLm5nT25EZXN0cm95OyJmdW5jdGlvbiIhPXR5cGVvZiBhfHxyLmhhcyhvKXx8KGEuYXBwbHkobyksci5hZGQobykpfX19KHRoaXMpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksbmk9em4oZnVuY3Rpb24oKXt9KSxyaT16bihjZSksaWk9em4oZmUpLG9pPXpuKGJlKSxhaT16bih2ZSksc2k9em4oX2UpLGxpPXpuKE4pLHVpPXpuKEkpO2Z1bmN0aW9uIGNpKHQsZSxuLGksbyxhLHMsbCl7dmFyIHU9W107aWYocylmb3IodmFyIGMgaW4gcyl7dmFyIGY9T2JqZWN0KHIuYykoc1tjXSwyKTt1W2ZbMF1dPXtmbGFnczo4LG5hbWU6Yyxub25NaW5pZmllZE5hbWU6ZlsxXSxuczpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX12YXIgaD1bXTtpZihsKWZvcih2YXIgcCBpbiBsKWgucHVzaCh7dHlwZToxLHByb3BOYW1lOnAsdGFyZ2V0Om51bGwsZXZlbnROYW1lOmxbcF19KTtyZXR1cm4gcGkodCxlfD0xNjM4NCxuLGksbyxvLGEsdSxoKX1mdW5jdGlvbiBmaSh0LGUsbil7cmV0dXJuIHBpKC0xLHR8PTE2LG51bGwsMCxlLGUsbil9ZnVuY3Rpb24gaGkodCxlLG4scixpKXtyZXR1cm4gcGkoLTEsdCxlLDAsbixyLGkpfWZ1bmN0aW9uIHBpKHQsZSxuLHIsaSxvLGEscyxsKXt2YXIgdT1vcihuKSxjPXUubWF0Y2hlZFF1ZXJpZXMsZj11LnJlZmVyZW5jZXMsaD11Lm1hdGNoZWRRdWVyeUlkcztsfHwobD1bXSksc3x8KHM9W10pLG89TyhvKTt2YXIgcD1hcihhLEMoaSkpO3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczplLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmMsbWF0Y2hlZFF1ZXJ5SWRzOmgscmVmZXJlbmNlczpmLG5nQ29udGVudEluZGV4Oi0xLGNoaWxkQ291bnQ6cixiaW5kaW5nczpzLGJpbmRpbmdGbGFnczpncihzKSxvdXRwdXRzOmwsZWxlbWVudDpudWxsLHByb3ZpZGVyOnt0b2tlbjppLHZhbHVlOm8sZGVwczpwfSx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gZGkodCxlKXtyZXR1cm4gdmkodCxlKX1mdW5jdGlvbiBtaSh0LGUpe2Zvcih2YXIgbj10O24ucGFyZW50JiYhbnIobik7KW49bi5wYXJlbnQ7cmV0dXJuIGJpKG4ucGFyZW50LHRyKG4pLCEwLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKX1mdW5jdGlvbiB5aSh0LGUpe3ZhciBuPWJpKHQsZS5wYXJlbnQsKDMyNzY4JmUuZmxhZ3MpPjAsZS5wcm92aWRlci52YWx1ZSxlLnByb3ZpZGVyLmRlcHMpO2lmKGUub3V0cHV0cy5sZW5ndGgpZm9yKHZhciByPTA7cjxlLm91dHB1dHMubGVuZ3RoO3IrKyl7dmFyIGk9ZS5vdXRwdXRzW3JdLG89bltpLnByb3BOYW1lXS5zdWJzY3JpYmUoZ2kodCxlLnBhcmVudC5ub2RlSW5kZXgsaS5ldmVudE5hbWUpKTt0LmRpc3Bvc2FibGVzW2Uub3V0cHV0SW5kZXgrcl09by51bnN1YnNjcmliZS5iaW5kKG8pfXJldHVybiBufWZ1bmN0aW9uIGdpKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuICRuKHQsZSxuLHIpfX1mdW5jdGlvbiB2aSh0LGUpe3ZhciBuPSg4MTkyJmUuZmxhZ3MpPjAsaT1lLnByb3ZpZGVyO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSA1MTI6cmV0dXJuIGJpKHQsZS5wYXJlbnQsbixpLnZhbHVlLGkuZGVwcyk7Y2FzZSAxMDI0OnJldHVybiBmdW5jdGlvbih0LGUsbixpLG8pe3ZhciBhPW8ubGVuZ3RoO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIGkoKTtjYXNlIDE6cmV0dXJuIGkod2kodCxlLG4sb1swXSkpO2Nhc2UgMjpyZXR1cm4gaSh3aSh0LGUsbixvWzBdKSx3aSh0LGUsbixvWzFdKSk7Y2FzZSAzOnJldHVybiBpKHdpKHQsZSxuLG9bMF0pLHdpKHQsZSxuLG9bMV0pLHdpKHQsZSxuLG9bMl0pKTtkZWZhdWx0OmZvcih2YXIgcz1BcnJheShhKSxsPTA7bDxhO2wrKylzW2xdPXdpKHQsZSxuLG9bbF0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShzKSl9fSh0LGUucGFyZW50LG4saS52YWx1ZSxpLmRlcHMpO2Nhc2UgMjA0ODpyZXR1cm4gd2kodCxlLnBhcmVudCxuLGkuZGVwc1swXSk7Y2FzZSAyNTY6cmV0dXJuIGkudmFsdWV9fWZ1bmN0aW9uIGJpKHQsZSxuLGksbyl7dmFyIGE9by5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gbmV3IGk7Y2FzZSAxOnJldHVybiBuZXcgaSh3aSh0LGUsbixvWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgaSh3aSh0LGUsbixvWzBdKSx3aSh0LGUsbixvWzFdKSk7Y2FzZSAzOnJldHVybiBuZXcgaSh3aSh0LGUsbixvWzBdKSx3aSh0LGUsbixvWzFdKSx3aSh0LGUsbixvWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHM9bmV3IEFycmF5KGEpLGw9MDtsPGE7bCsrKXNbbF09d2kodCxlLG4sb1tsXSk7cmV0dXJuIG5ldyhpLmJpbmQuYXBwbHkoaSxPYmplY3Qoci5kKShbdm9pZCAwXSxzKSkpfX12YXIgX2k9e307ZnVuY3Rpb24gd2kodCxlLG4scixpKXtpZih2b2lkIDA9PT1pJiYoaT1OLlRIUk9XX0lGX05PVF9GT1VORCksOCZyLmZsYWdzKXJldHVybiByLnRva2VuO3ZhciBvPXQ7MiZyLmZsYWdzJiYoaT1udWxsKTt2YXIgYT1yLnRva2VuS2V5O2E9PT1zaSYmKG49ISghZXx8IWUuZWxlbWVudC5jb21wb25lbnRWaWV3KSksZSYmMSZyLmZsYWdzJiYobj0hMSxlPWUucGFyZW50KTtmb3IodmFyIHM9dDtzOyl7aWYoZSlzd2l0Y2goYSl7Y2FzZSBuaTpyZXR1cm4gJHIoeGkocyxlLG4pKTtjYXNlIHJpOnJldHVybiB4aShzLGUsbikucmVuZGVyZXI7Y2FzZSBpaTpyZXR1cm4gbmV3IGZlKGpuKHMsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Nhc2Ugb2k6cmV0dXJuIGpuKHMsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXI7Y2FzZSBhaTppZihlLmVsZW1lbnQudGVtcGxhdGUpcmV0dXJuIGpuKHMsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2JyZWFrO2Nhc2Ugc2k6cmV0dXJuIHFyKHhpKHMsZSxuKSk7Y2FzZSBsaTpjYXNlIHVpOnJldHVybiBacihzLGUpO2RlZmF1bHQ6dmFyIGw9KG4/ZS5lbGVtZW50LmFsbFByb3ZpZGVyczplLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKVthXTtpZihsKXt2YXIgdT1JbihzLGwubm9kZUluZGV4KTtyZXR1cm4gdXx8KHU9e2luc3RhbmNlOnZpKHMsbCl9LHMubm9kZXNbbC5ub2RlSW5kZXhdPXUpLHUuaW5zdGFuY2V9fW49bnIocyksZT10cihzKSxzPXMucGFyZW50LDQmci5mbGFncyYmKHM9bnVsbCl9dmFyIGM9by5yb290LmluamVjdG9yLmdldChyLnRva2VuLF9pKTtyZXR1cm4gYyE9PV9pfHxpPT09X2k/YzpvLnJvb3QubmdNb2R1bGUuaW5qZWN0b3IuZ2V0KHIudG9rZW4saSl9ZnVuY3Rpb24geGkodCxlLG4pe3ZhciByO2lmKG4pcj1qbih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3O2Vsc2UgZm9yKHI9dDtyLnBhcmVudCYmIW5yKHIpOylyPXIucGFyZW50O3JldHVybiByfWZ1bmN0aW9uIENpKHQsZSxuLHIsaSxvKXtpZigzMjc2OCZuLmZsYWdzKXt2YXIgYT1qbih0LG4ucGFyZW50Lm5vZGVJbmRleCkuY29tcG9uZW50VmlldzsyJmEuZGVmLmZsYWdzJiYoYS5zdGF0ZXw9OCl9aWYoZS5pbnN0YW5jZVtuLmJpbmRpbmdzW3JdLm5hbWVdPWksNTI0Mjg4Jm4uZmxhZ3Mpe289b3x8e307dmFyIHM9QWUudW53cmFwKHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdKTtvW24uYmluZGluZ3Nbcl0ubm9uTWluaWZpZWROYW1lXT1uZXcgamUocyxpLDAhPSgyJnQuc3RhdGUpKX1yZXR1cm4gdC5vbGRWYWx1ZXNbbi5iaW5kaW5nSW5kZXgrcl09aSxvfWZ1bmN0aW9uIEVpKHQsZSl7aWYodC5kZWYubm9kZUZsYWdzJmUpZm9yKHZhciBuPXQuZGVmLm5vZGVzLHI9MCxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV0sYT1vLnBhcmVudDtmb3IoIWEmJm8uZmxhZ3MmZSYmU2kodCxpLG8uZmxhZ3MmZSxyKyspLDA9PShvLmNoaWxkRmxhZ3MmZSkmJihpKz1vLmNoaWxkQ291bnQpO2EmJjEmYS5mbGFncyYmaT09PWEubm9kZUluZGV4K2EuY2hpbGRDb3VudDspYS5kaXJlY3RDaGlsZEZsYWdzJmUmJihyPU9pKHQsYSxlLHIpKSxhPWEucGFyZW50fX1mdW5jdGlvbiBPaSh0LGUsbixyKXtmb3IodmFyIGk9ZS5ub2RlSW5kZXgrMTtpPD1lLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ7aSsrKXt2YXIgbz10LmRlZi5ub2Rlc1tpXTtvLmZsYWdzJm4mJlNpKHQsaSxvLmZsYWdzJm4scisrKSxpKz1vLmNoaWxkQ291bnR9cmV0dXJuIHJ9ZnVuY3Rpb24gU2kodCxlLG4scil7dmFyIGk9SW4odCxlKTtpZihpKXt2YXIgbz1pLmluc3RhbmNlO28mJihSbi5zZXRDdXJyZW50Tm9kZSh0LGUpLDEwNDg1NzYmbiYmUG4odCw1MTIscikmJm8ubmdBZnRlckNvbnRlbnRJbml0KCksMjA5NzE1MiZuJiZvLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpLDQxOTQzMDQmbiYmUG4odCw3NjgscikmJm8ubmdBZnRlclZpZXdJbml0KCksODM4ODYwOCZuJiZvLm5nQWZ0ZXJWaWV3Q2hlY2tlZCgpLDEzMTA3MiZuJiZvLm5nT25EZXN0cm95KCkpfX1mdW5jdGlvbiBraSh0LGUsbil7dmFyIHI9W107Zm9yKHZhciBpIGluIG4pci5wdXNoKHtwcm9wTmFtZTppLGJpbmRpbmdUeXBlOm5baV19KTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4Oi0xLGZsYWdzOnQsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbmdDb250ZW50SW5kZXg6LTEsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxjaGlsZENvdW50OjAsYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6e2lkOmUsZmlsdGVySWQ6aXIoZSksYmluZGluZ3M6cn0sbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIFRpKHQpe2Zvcih2YXIgZT10LmRlZi5ub2RlTWF0Y2hlZFF1ZXJpZXM7dC5wYXJlbnQmJnJyKHQpOyl7dmFyIG49dC5wYXJlbnROb2RlRGVmO3Q9dC5wYXJlbnQ7Zm9yKHZhciByPW4ubm9kZUluZGV4K24uY2hpbGRDb3VudCxpPTA7aTw9cjtpKyspNjcxMDg4NjQmKG89dC5kZWYubm9kZXNbaV0pLmZsYWdzJiY1MzY4NzA5MTImby5mbGFncyYmKG8ucXVlcnkuZmlsdGVySWQmZSk9PT1vLnF1ZXJ5LmZpbHRlcklkJiZObih0LGkpLnNldERpcnR5KCksISgxJm8uZmxhZ3MmJmkrby5jaGlsZENvdW50PG4ubm9kZUluZGV4KSYmNjcxMDg4NjQmby5jaGlsZEZsYWdzJiY1MzY4NzA5MTImby5jaGlsZEZsYWdzfHwoaSs9by5jaGlsZENvdW50KX1pZigxMzQyMTc3MjgmdC5kZWYubm9kZUZsYWdzKWZvcihpPTA7aTx0LmRlZi5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgbzsxMzQyMTc3MjgmKG89dC5kZWYubm9kZXNbaV0pLmZsYWdzJiY1MzY4NzA5MTImby5mbGFncyYmTm4odCxpKS5zZXREaXJ0eSgpLGkrPW8uY2hpbGRDb3VudH19ZnVuY3Rpb24gUGkodCxlKXt2YXIgbj1Obih0LGUubm9kZUluZGV4KTtpZihuLmRpcnR5KXt2YXIgcixpPXZvaWQgMDtpZig2NzEwODg2NCZlLmZsYWdzKXt2YXIgbz1lLnBhcmVudC5wYXJlbnQ7aT1BaSh0LG8ubm9kZUluZGV4LG8ubm9kZUluZGV4K28uY2hpbGRDb3VudCxlLnF1ZXJ5LFtdKSxyPUluKHQsZS5wYXJlbnQubm9kZUluZGV4KS5pbnN0YW5jZX1lbHNlIDEzNDIxNzcyOCZlLmZsYWdzJiYoaT1BaSh0LDAsdC5kZWYubm9kZXMubGVuZ3RoLTEsZS5xdWVyeSxbXSkscj10LmNvbXBvbmVudCk7bi5yZXNldChpKTtmb3IodmFyIGE9ZS5xdWVyeS5iaW5kaW5ncyxzPSExLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxjPXZvaWQgMDtzd2l0Y2godS5iaW5kaW5nVHlwZSl7Y2FzZSAwOmM9bi5maXJzdDticmVhaztjYXNlIDE6Yz1uLHM9ITB9clt1LnByb3BOYW1lXT1jfXMmJm4ubm90aWZ5T25DaGFuZ2VzKCl9fWZ1bmN0aW9uIEFpKHQsZSxuLHIsaSl7Zm9yKHZhciBvPWU7bzw9bjtvKyspe3ZhciBhPXQuZGVmLm5vZGVzW29dLHM9YS5tYXRjaGVkUXVlcmllc1tyLmlkXTtpZihudWxsIT1zJiZpLnB1c2goamkodCxhLHMpKSwxJmEuZmxhZ3MmJmEuZWxlbWVudC50ZW1wbGF0ZSYmKGEuZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkKXt2YXIgbD1qbih0LG8pO2lmKChhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkJiYoQWkodCxvKzEsbythLmNoaWxkQ291bnQscixpKSxvKz1hLmNoaWxkQ291bnQpLDE2Nzc3MjE2JmEuZmxhZ3MpZm9yKHZhciB1PWwudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxjPTA7Yzx1Lmxlbmd0aDtjKyspe3ZhciBmPXVbY10saD1KbihmKTtoJiZoPT09bCYmQWkoZiwwLGYuZGVmLm5vZGVzLmxlbmd0aC0xLHIsaSl9dmFyIHA9bC50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYocClmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXt2YXIgZD1wW2NdO0FpKGQsMCxkLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLGkpfX0oYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpIT09ci5maWx0ZXJJZCYmKG8rPWEuY2hpbGRDb3VudCl9cmV0dXJuIGl9ZnVuY3Rpb24gamkodCxlLG4pe2lmKG51bGwhPW4pc3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gam4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtjYXNlIDA6cmV0dXJuIG5ldyBmZShqbih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIDI6cmV0dXJuIGpuKHQsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2Nhc2UgMzpyZXR1cm4gam4odCxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIDQ6cmV0dXJuIEluKHQsZS5ub2RlSW5kZXgpLmluc3RhbmNlfX1mdW5jdGlvbiBJaSh0LGUpe3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6LTEsZmxhZ3M6OCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OnQsY2hpbGRDb3VudDowLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50OntpbmRleDplfX19ZnVuY3Rpb24gTWkodCxlLG4pe3ZhciByPXNyKHQsZSxuKTtyJiZocih0LG4ubmdDb250ZW50LmluZGV4LDEscixudWxsLHZvaWQgMCl9ZnVuY3Rpb24gTmkodCxlKXtyZXR1cm4gRmkoMTI4LHQsbmV3IEFycmF5KGUrMSkpfWZ1bmN0aW9uIFJpKHQsZSl7cmV0dXJuIEZpKDMyLHQsbmV3IEFycmF5KGUpKX1mdW5jdGlvbiBEaSh0LGUpe2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7bysrKXt2YXIgYT1uW29dO2lbZVthXV09YX1yZXR1cm4gRmkoNjQsdCxpKX1mdW5jdGlvbiBGaSh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheShuLmxlbmd0aCksaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO3JbaV09e2ZsYWdzOjgsbmFtZTpvLG5zOm51bGwsbm9uTWluaWZpZWROYW1lOm8sc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om51bGx9fXJldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6ZSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5kZXg6LTEsY2hpbGRDb3VudDowLGJpbmRpbmdzOnIsYmluZGluZ0ZsYWdzOmdyKHIpLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIExpKHQsZSxuKXtmb3IodmFyIHI9bmV3IEFycmF5KG4ubGVuZ3RoLTEpLGk9MTtpPG4ubGVuZ3RoO2krKylyW2ktMV09e2ZsYWdzOjgsbmFtZTpudWxsLG5zOm51bGwsbm9uTWluaWZpZWROYW1lOm51bGwsc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om5baV19O3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczoyLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5kZXg6ZSxjaGlsZENvdW50OjAsYmluZGluZ3M6cixiaW5kaW5nRmxhZ3M6OCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6e3ByZWZpeDpuWzBdfSxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBWaSh0LGUsbil7dmFyIHIsaT10LnJlbmRlcmVyO3I9aS5jcmVhdGVUZXh0KG4udGV4dC5wcmVmaXgpO3ZhciBvPXNyKHQsZSxuKTtyZXR1cm4gbyYmaS5hcHBlbmRDaGlsZChvLHIpLHtyZW5kZXJUZXh0OnJ9fWZ1bmN0aW9uIEJpKHQsZSl7cmV0dXJuKG51bGwhPXQ/dC50b1N0cmluZygpOiIiKStlLnN1ZmZpeH1mdW5jdGlvbiB6aSh0LGUsbixyKXtmb3IodmFyIGk9MCxvPTAsYT0wLHM9MCxsPTAsdT1udWxsLGM9bnVsbCxmPSExLGg9ITEscD1udWxsLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIG09ZVtkXTtpZihtLm5vZGVJbmRleD1kLG0ucGFyZW50PXUsbS5iaW5kaW5nSW5kZXg9aSxtLm91dHB1dEluZGV4PW8sbS5yZW5kZXJQYXJlbnQ9YyxhfD1tLmZsYWdzLGx8PW0ubWF0Y2hlZFF1ZXJ5SWRzLG0uZWxlbWVudCl7dmFyIHk9bS5lbGVtZW50O3kucHVibGljUHJvdmlkZXJzPXU/dS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVyczpPYmplY3QuY3JlYXRlKG51bGwpLHkuYWxsUHJvdmlkZXJzPXkucHVibGljUHJvdmlkZXJzLGY9ITEsaD0hMSxtLmVsZW1lbnQudGVtcGxhdGUmJihsfD1tLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKX1pZihIaSh1LG0sZS5sZW5ndGgpLGkrPW0uYmluZGluZ3MubGVuZ3RoLG8rPW0ub3V0cHV0cy5sZW5ndGgsIWMmJjMmbS5mbGFncyYmKHA9bSksMjAyMjQmbS5mbGFncyl7Znx8KGY9ITAsdS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycz1PYmplY3QuY3JlYXRlKHUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpLHUuZWxlbWVudC5hbGxQcm92aWRlcnM9dS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycyk7dmFyIGc9MCE9KDMyNzY4Jm0uZmxhZ3MpOzA9PSg4MTkyJm0uZmxhZ3MpfHxnP3UuZWxlbWVudC5wdWJsaWNQcm92aWRlcnNbem4obS5wcm92aWRlci50b2tlbildPW06KGh8fChoPSEwLHUuZWxlbWVudC5hbGxQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZSh1LmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSksdS5lbGVtZW50LmFsbFByb3ZpZGVyc1t6bihtLnByb3ZpZGVyLnRva2VuKV09bSksZyYmKHUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlcj1tKX1pZih1Pyh1LmNoaWxkRmxhZ3N8PW0uZmxhZ3MsdS5kaXJlY3RDaGlsZEZsYWdzfD1tLmZsYWdzLHUuY2hpbGRNYXRjaGVkUXVlcmllc3w9bS5tYXRjaGVkUXVlcnlJZHMsbS5lbGVtZW50JiZtLmVsZW1lbnQudGVtcGxhdGUmJih1LmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PW0uZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMpKTpzfD1tLmZsYWdzLG0uY2hpbGRDb3VudD4wKXU9bSxVaShtKXx8KGM9bSk7ZWxzZSBmb3IoO3UmJmQ9PT11Lm5vZGVJbmRleCt1LmNoaWxkQ291bnQ7KXt2YXIgdj11LnBhcmVudDt2JiYodi5jaGlsZEZsYWdzfD11LmNoaWxkRmxhZ3Msdi5jaGlsZE1hdGNoZWRRdWVyaWVzfD11LmNoaWxkTWF0Y2hlZFF1ZXJpZXMpLGM9KHU9dikmJlVpKHUpP3UucmVuZGVyUGFyZW50OnV9fXJldHVybntmYWN0b3J5Om51bGwsbm9kZUZsYWdzOmEscm9vdE5vZGVGbGFnczpzLG5vZGVNYXRjaGVkUXVlcmllczpsLGZsYWdzOnQsbm9kZXM6ZSx1cGRhdGVEaXJlY3RpdmVzOm58fFZuLHVwZGF0ZVJlbmRlcmVyOnJ8fFZuLGhhbmRsZUV2ZW50OmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiBlW25dLmVsZW1lbnQuaGFuZGxlRXZlbnQodCxyLGkpfSxiaW5kaW5nQ291bnQ6aSxvdXRwdXRDb3VudDpvLGxhc3RSZW5kZXJSb290Tm9kZTpwfX1mdW5jdGlvbiBVaSh0KXtyZXR1cm4gMCE9KDEmdC5mbGFncykmJm51bGw9PT10LmVsZW1lbnQubmFtZX1mdW5jdGlvbiBIaSh0LGUsbil7dmFyIHI9ZS5lbGVtZW50JiZlLmVsZW1lbnQudGVtcGxhdGU7aWYocil7aWYoIXIubGFzdFJlbmRlclJvb3ROb2RlKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogRW1iZWRkZWQgdGVtcGxhdGVzIHdpdGhvdXQgbm9kZXMgYXJlIG5vdCBhbGxvd2VkISIpO2lmKHIubGFzdFJlbmRlclJvb3ROb2RlJiYxNjc3NzIxNiZyLmxhc3RSZW5kZXJSb290Tm9kZS5mbGFncyl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IExhc3Qgcm9vdCBub2RlIG9mIGEgdGVtcGxhdGUgY2FuJ3QgaGF2ZSBlbWJlZGRlZCB2aWV3cywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKDIwMjI0JmUuZmxhZ3MmJjA9PSgxJih0P3QuZmxhZ3M6MCkpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogU3RhdGljUHJvdmlkZXIvRGlyZWN0aXZlIG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZWxlbWVudHMgb3IgYW5jaG9ycywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKGUucXVlcnkpe2lmKDY3MTA4ODY0JmUuZmxhZ3MmJighdHx8MD09KDE2Mzg0JnQuZmxhZ3MpKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IENvbnRlbnQgUXVlcnkgbm9kZXMgbmVlZCB0byBiZSBjaGlsZHJlbiBvZiBkaXJlY3RpdmVzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIik7aWYoMTM0MjE3NzI4JmUuZmxhZ3MmJnQpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBWaWV3IFF1ZXJ5IG5vZGVzIGhhdmUgdG8gYmUgdG9wIGxldmVsIG5vZGVzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9aWYoZS5jaGlsZENvdW50KXt2YXIgaT10P3Qubm9kZUluZGV4K3QuY2hpbGRDb3VudDpuLTE7aWYoZS5ub2RlSW5kZXg8PWkmJmUubm9kZUluZGV4K2UuY2hpbGRDb3VudD5pKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogY2hpbGRDb3VudCBvZiBub2RlIGxlYWRzIG91dHNpZGUgb2YgcGFyZW50LCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9fWZ1bmN0aW9uIFFpKHQsZSxuLHIpe3ZhciBpPVlpKHQucm9vdCx0LnJlbmRlcmVyLHQsZSxuKTtyZXR1cm4gV2koaSx0LmNvbXBvbmVudCxyKSxaaShpKSxpfWZ1bmN0aW9uIHFpKHQsZSxuKXt2YXIgcj1ZaSh0LHQucmVuZGVyZXIsbnVsbCxudWxsLGUpO3JldHVybiBXaShyLG4sbiksWmkocikscn1mdW5jdGlvbiBHaSh0LGUsbixyKXt2YXIgaSxvPWUuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGU7cmV0dXJuIGk9bz90LnJvb3QucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHIsbyk6dC5yb290LnJlbmRlcmVyLFlpKHQucm9vdCxpLHQsZS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLG4pfWZ1bmN0aW9uIFlpKHQsZSxuLHIsaSl7dmFyIG89bmV3IEFycmF5KGkubm9kZXMubGVuZ3RoKSxhPWkub3V0cHV0Q291bnQ/bmV3IEFycmF5KGkub3V0cHV0Q291bnQpOm51bGw7cmV0dXJue2RlZjppLHBhcmVudDpuLHZpZXdDb250YWluZXJQYXJlbnQ6bnVsbCxwYXJlbnROb2RlRGVmOnIsY29udGV4dDpudWxsLGNvbXBvbmVudDpudWxsLG5vZGVzOm8sc3RhdGU6MTMscm9vdDp0LHJlbmRlcmVyOmUsb2xkVmFsdWVzOm5ldyBBcnJheShpLmJpbmRpbmdDb3VudCksZGlzcG9zYWJsZXM6YSxpbml0SW5kZXg6LTF9fWZ1bmN0aW9uIFdpKHQsZSxuKXt0LmNvbXBvbmVudD1lLHQuY29udGV4dD1ufWZ1bmN0aW9uIFppKHQpe3ZhciBlO25yKHQpJiYoZT1qbih0LnBhcmVudCx0LnBhcmVudE5vZGVEZWYucGFyZW50Lm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Zm9yKHZhciBuPXQuZGVmLHI9dC5ub2RlcyxpPTA7aTxuLm5vZGVzLmxlbmd0aDtpKyspe3ZhciBvPW4ubm9kZXNbaV07Um4uc2V0Q3VycmVudE5vZGUodCxpKTt2YXIgYT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZvLmZsYWdzKXtjYXNlIDE6dmFyIHM9eHIodCxlLG8pLGw9dm9pZCAwO2lmKDMzNTU0NDMyJm8uZmxhZ3Mpe3ZhciB1PXVyKG8uZWxlbWVudC5jb21wb25lbnRWaWV3KTtsPVJuLmNyZWF0ZUNvbXBvbmVudFZpZXcodCxvLHUscyl9Q3IodCxsLG8scyksYT17cmVuZGVyRWxlbWVudDpzLGNvbXBvbmVudFZpZXc6bCx2aWV3Q29udGFpbmVyOm51bGwsdGVtcGxhdGU6by5lbGVtZW50LnRlbXBsYXRlP1lyKHQsbyk6dm9pZCAwfSwxNjc3NzIxNiZvLmZsYWdzJiYoYS52aWV3Q29udGFpbmVyPUhyKHQsbyxhKSk7YnJlYWs7Y2FzZSAyOmE9VmkodCxlLG8pO2JyZWFrO2Nhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSAyNTY6KGE9cltpXSl8fDQwOTYmby5mbGFnc3x8KGE9e2luc3RhbmNlOmRpKHQsbyl9KTticmVhaztjYXNlIDE2OmE9e2luc3RhbmNlOm1pKHQsbyl9O2JyZWFrO2Nhc2UgMTYzODQ6KGE9cltpXSl8fChhPXtpbnN0YW5jZTp5aSh0LG8pfSksMzI3Njgmby5mbGFncyYmV2koam4odCxvLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXcsYS5pbnN0YW5jZSxhLmluc3RhbmNlKTticmVhaztjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6YT17dmFsdWU6dm9pZCAwfTticmVhaztjYXNlIDY3MTA4ODY0OmNhc2UgMTM0MjE3NzI4OmE9bmV3IHBlO2JyZWFrO2Nhc2UgODpNaSh0LGUsbyksYT12b2lkIDB9cltpXT1hfWlvKHQscm8uQ3JlYXRlVmlld05vZGVzKSxsbyh0LDIwMTMyNjU5MiwyNjg0MzU0NTYsMCl9ZnVuY3Rpb24gS2kodCl7SmkodCksUm4udXBkYXRlRGlyZWN0aXZlcyh0LDEpLG9vKHQscm8uQ2hlY2tOb0NoYW5nZXMpLFJuLnVwZGF0ZVJlbmRlcmVyKHQsMSksaW8odCxyby5DaGVja05vQ2hhbmdlcyksdC5zdGF0ZSY9LTk3fWZ1bmN0aW9uIFhpKHQpezEmdC5zdGF0ZT8odC5zdGF0ZSY9LTIsdC5zdGF0ZXw9Mik6dC5zdGF0ZSY9LTMsVG4odCwwLDI1NiksSmkodCksUm4udXBkYXRlRGlyZWN0aXZlcyh0LDApLG9vKHQscm8uQ2hlY2tBbmRVcGRhdGUpLGxvKHQsNjcxMDg4NjQsNTM2ODcwOTEyLDApO3ZhciBlPVRuKHQsMjU2LDUxMik7RWkodCwyMDk3MTUyfChlPzEwNDg1NzY6MCkpLFJuLnVwZGF0ZVJlbmRlcmVyKHQsMCksaW8odCxyby5DaGVja0FuZFVwZGF0ZSksbG8odCwxMzQyMTc3MjgsNTM2ODcwOTEyLDApLEVpKHQsODM4ODYwOHwoKGU9VG4odCw1MTIsNzY4KSk/NDE5NDMwNDowKSksMiZ0LmRlZi5mbGFncyYmKHQuc3RhdGUmPS05KSx0LnN0YXRlJj0tOTcsVG4odCw3NjgsMTAyNCl9ZnVuY3Rpb24gJGkodCxlLG4saSxvLGEscyxsLHUsYyxmLGgscCl7cmV0dXJuIDA9PT1uP2Z1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpe3ZhciBoPWUuYmluZGluZ3MubGVuZ3RoLHA9ITE7cmV0dXJuIGg+MCYmT3IodCxlLDAsbikmJihwPSEwKSxoPjEmJk9yKHQsZSwxLHIpJiYocD0hMCksaD4yJiZPcih0LGUsMixpKSYmKHA9ITApLGg+MyYmT3IodCxlLDMsbykmJihwPSEwKSxoPjQmJk9yKHQsZSw0LGEpJiYocD0hMCksaD41JiZPcih0LGUsNSxzKSYmKHA9ITApLGg+NiYmT3IodCxlLDYsbCkmJihwPSEwKSxoPjcmJk9yKHQsZSw3LHUpJiYocD0hMCksaD44JiZPcih0LGUsOCxjKSYmKHA9ITApLGg+OSYmT3IodCxlLDksZikmJihwPSEwKSxwfSh0LGUsbixyLGksbyxhLHMsbCx1LGMsZik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1LGMsZil7dmFyIGg9ITEscD1lLmJpbmRpbmdzLGQ9cC5sZW5ndGg7aWYoZD4wJiZXbih0LGUsMCxuKSYmKGg9ITApLGQ+MSYmV24odCxlLDEscikmJihoPSEwKSxkPjImJlduKHQsZSwyLGkpJiYoaD0hMCksZD4zJiZXbih0LGUsMyxvKSYmKGg9ITApLGQ+NCYmV24odCxlLDQsYSkmJihoPSEwKSxkPjUmJlduKHQsZSw1LHMpJiYoaD0hMCksZD42JiZXbih0LGUsNixsKSYmKGg9ITApLGQ+NyYmV24odCxlLDcsdSkmJihoPSEwKSxkPjgmJlduKHQsZSw4LGMpJiYoaD0hMCksZD45JiZXbih0LGUsOSxmKSYmKGg9ITApLGgpe3ZhciBtPWUudGV4dC5wcmVmaXg7ZD4wJiYobSs9QmkobixwWzBdKSksZD4xJiYobSs9QmkocixwWzFdKSksZD4yJiYobSs9QmkoaSxwWzJdKSksZD4zJiYobSs9QmkobyxwWzNdKSksZD40JiYobSs9QmkoYSxwWzRdKSksZD41JiYobSs9QmkocyxwWzVdKSksZD42JiYobSs9QmkobCxwWzZdKSksZD43JiYobSs9QmkodSxwWzddKSksZD44JiYobSs9QmkoYyxwWzhdKSksZD45JiYobSs9QmkoZixwWzldKSk7dmFyIHk9QW4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHksbSl9cmV0dXJuIGh9KHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1LGMsZil7dmFyIGg9SW4odCxlLm5vZGVJbmRleCkscD1oLmluc3RhbmNlLGQ9ITEsbT12b2lkIDAseT1lLmJpbmRpbmdzLmxlbmd0aDtyZXR1cm4geT4wJiZZbih0LGUsMCxuKSYmKGQ9ITAsbT1DaSh0LGgsZSwwLG4sbSkpLHk+MSYmWW4odCxlLDEscikmJihkPSEwLG09Q2kodCxoLGUsMSxyLG0pKSx5PjImJlluKHQsZSwyLGkpJiYoZD0hMCxtPUNpKHQsaCxlLDIsaSxtKSkseT4zJiZZbih0LGUsMyxvKSYmKGQ9ITAsbT1DaSh0LGgsZSwzLG8sbSkpLHk+NCYmWW4odCxlLDQsYSkmJihkPSEwLG09Q2kodCxoLGUsNCxhLG0pKSx5PjUmJlluKHQsZSw1LHMpJiYoZD0hMCxtPUNpKHQsaCxlLDUscyxtKSkseT42JiZZbih0LGUsNixsKSYmKGQ9ITAsbT1DaSh0LGgsZSw2LGwsbSkpLHk+NyYmWW4odCxlLDcsdSkmJihkPSEwLG09Q2kodCxoLGUsNyx1LG0pKSx5PjgmJlluKHQsZSw4LGMpJiYoZD0hMCxtPUNpKHQsaCxlLDgsYyxtKSkseT45JiZZbih0LGUsOSxmKSYmKGQ9ITAsbT1DaSh0LGgsZSw5LGYsbSkpLG0mJnAubmdPbkNoYW5nZXMobSksNjU1MzYmZS5mbGFncyYmUG4odCwyNTYsZS5ub2RlSW5kZXgpJiZwLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJnAubmdEb0NoZWNrKCksZH0odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpe3ZhciBoPWUuYmluZGluZ3MscD0hMSxkPWgubGVuZ3RoO2lmKGQ+MCYmV24odCxlLDAsbikmJihwPSEwKSxkPjEmJlduKHQsZSwxLHIpJiYocD0hMCksZD4yJiZXbih0LGUsMixpKSYmKHA9ITApLGQ+MyYmV24odCxlLDMsbykmJihwPSEwKSxkPjQmJlduKHQsZSw0LGEpJiYocD0hMCksZD41JiZXbih0LGUsNSxzKSYmKHA9ITApLGQ+NiYmV24odCxlLDYsbCkmJihwPSEwKSxkPjcmJlduKHQsZSw3LHUpJiYocD0hMCksZD44JiZXbih0LGUsOCxjKSYmKHA9ITApLGQ+OSYmV24odCxlLDksZikmJihwPSEwKSxwKXt2YXIgbT1Nbih0LGUubm9kZUluZGV4KSx5PXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6eT1uZXcgQXJyYXkoaC5sZW5ndGgpLGQ+MCYmKHlbMF09biksZD4xJiYoeVsxXT1yKSxkPjImJih5WzJdPWkpLGQ+MyYmKHlbM109byksZD40JiYoeVs0XT1hKSxkPjUmJih5WzVdPXMpLGQ+NiYmKHlbNl09bCksZD43JiYoeVs3XT11KSxkPjgmJih5WzhdPWMpLGQ+OSYmKHlbOV09Zik7YnJlYWs7Y2FzZSA2NDp5PXt9LGQ+MCYmKHlbaFswXS5uYW1lXT1uKSxkPjEmJih5W2hbMV0ubmFtZV09ciksZD4yJiYoeVtoWzJdLm5hbWVdPWkpLGQ+MyYmKHlbaFszXS5uYW1lXT1vKSxkPjQmJih5W2hbNF0ubmFtZV09YSksZD41JiYoeVtoWzVdLm5hbWVdPXMpLGQ+NiYmKHlbaFs2XS5uYW1lXT1sKSxkPjcmJih5W2hbN10ubmFtZV09dSksZD44JiYoeVtoWzhdLm5hbWVdPWMpLGQ+OSYmKHlbaFs5XS5uYW1lXT1mKTticmVhaztjYXNlIDEyODp2YXIgZz1uO3N3aXRjaChkKXtjYXNlIDE6eT1nLnRyYW5zZm9ybShuKTticmVhaztjYXNlIDI6eT1nLnRyYW5zZm9ybShyKTticmVhaztjYXNlIDM6eT1nLnRyYW5zZm9ybShyLGkpO2JyZWFrO2Nhc2UgNDp5PWcudHJhbnNmb3JtKHIsaSxvKTticmVhaztjYXNlIDU6eT1nLnRyYW5zZm9ybShyLGksbyxhKTticmVhaztjYXNlIDY6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMpO2JyZWFrO2Nhc2UgNzp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyxsKTticmVhaztjYXNlIDg6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsbCx1KTticmVhaztjYXNlIDk6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsbCx1LGMpO2JyZWFrO2Nhc2UgMTA6eT1nLnRyYW5zZm9ybShyLGksbyxhLHMsbCx1LGMsZil9fW0udmFsdWU9eX1yZXR1cm4gcH0odCxlLG4scixpLG8sYSxzLGwsdSxjLGYpO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLGksbyxhLHMsbCx1LGMsZixoLHApOmZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0hMSxpPTA7aTxuLmxlbmd0aDtpKyspT3IodCxlLGksbltpXSkmJihyPSEwKTtyZXR1cm4gcn0odCxlLG4pO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1lLmJpbmRpbmdzLGk9ITEsbz0wO288bi5sZW5ndGg7bysrKVduKHQsZSxvLG5bb10pJiYoaT0hMCk7aWYoaSl7dmFyIGE9IiI7Zm9yKG89MDtvPG4ubGVuZ3RoO28rKylhKz1CaShuW29dLHJbb10pO2E9ZS50ZXh0LnByZWZpeCthO3ZhciBzPUFuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZShzLGEpfXJldHVybiBpfSh0LGUsbik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1Jbih0LGUubm9kZUluZGV4KSxpPXIuaW5zdGFuY2Usbz0hMSxhPXZvaWQgMCxzPTA7czxuLmxlbmd0aDtzKyspWW4odCxlLHMsbltzXSkmJihvPSEwLGE9Q2kodCxyLGUscyxuW3NdLGEpKTtyZXR1cm4gYSYmaS5uZ09uQ2hhbmdlcyhhKSw2NTUzNiZlLmZsYWdzJiZQbih0LDI1NixlLm5vZGVJbmRleCkmJmkubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmaS5uZ0RvQ2hlY2soKSxvfSh0LGUsbik7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPWUuYmluZGluZ3Msbz0hMSxhPTA7YTxuLmxlbmd0aDthKyspV24odCxlLGEsblthXSkmJihvPSEwKTtpZihvKXt2YXIgcz1Nbih0LGUubm9kZUluZGV4KSxsPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6bD1uO2JyZWFrO2Nhc2UgNjQ6Zm9yKGw9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWxbaVthXS5uYW1lXT1uW2FdO2JyZWFrO2Nhc2UgMTI4OnZhciB1PW5bMF0sYz1uLnNsaWNlKDEpO2w9dS50cmFuc2Zvcm0uYXBwbHkodSxPYmplY3Qoci5kKShjKSl9cy52YWx1ZT1sfXJldHVybiBvfSh0LGUsbik7ZGVmYXVsdDp0aHJvdyJ1bnJlYWNoYWJsZSJ9fSh0LGUsaSl9ZnVuY3Rpb24gSmkodCl7dmFyIGU9dC5kZWY7aWYoNCZlLm5vZGVGbGFncylmb3IodmFyIG49MDtuPGUubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9ZS5ub2Rlc1tuXTtpZig0JnIuZmxhZ3Mpe3ZhciBpPWpuKHQsbikudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO2lmKGkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPWlbb107YS5zdGF0ZXw9MzIsWG4oYSx0KX19ZWxzZSAwPT0oNCZyLmNoaWxkRmxhZ3MpJiYobis9ci5jaGlsZENvdW50KX19ZnVuY3Rpb24gdG8odCxlLG4scixpLG8sYSxzLGwsdSxjLGYsaCl7cmV0dXJuIDA9PT1uP2Z1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmKXt2YXIgaD1lLmJpbmRpbmdzLmxlbmd0aDtoPjAmJlpuKHQsZSwwLG4pLGg+MSYmWm4odCxlLDEsciksaD4yJiZabih0LGUsMixpKSxoPjMmJlpuKHQsZSwzLG8pLGg+NCYmWm4odCxlLDQsYSksaD41JiZabih0LGUsNSxzKSxoPjYmJlpuKHQsZSw2LGwpLGg+NyYmWm4odCxlLDcsdSksaD44JiZabih0LGUsOCxjKSxoPjkmJlpuKHQsZSw5LGYpfSh0LGUscixpLG8sYSxzLGwsdSxjLGYsaCk6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKVpuKHQsZSxyLG5bcl0pfSh0LGUsciksITF9ZnVuY3Rpb24gZW8odCxlKXtpZihObih0LGUubm9kZUluZGV4KS5kaXJ0eSl0aHJvdyBEbihSbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksIlF1ZXJ5ICIrZS5xdWVyeS5pZCsiIG5vdCBkaXJ0eSIsIlF1ZXJ5ICIrZS5xdWVyeS5pZCsiIGRpcnR5IiwwIT0oMSZ0LnN0YXRlKSl9ZnVuY3Rpb24gbm8odCl7aWYoISgxMjgmdC5zdGF0ZSkpe2lmKG9vKHQscm8uRGVzdHJveSksaW8odCxyby5EZXN0cm95KSxFaSh0LDEzMTA3MiksdC5kaXNwb3NhYmxlcylmb3IodmFyIGU9MDtlPHQuZGlzcG9zYWJsZXMubGVuZ3RoO2UrKyl0LmRpc3Bvc2FibGVzW2VdKCk7IWZ1bmN0aW9uKHQpe2lmKDE2JnQuc3RhdGUpe3ZhciBlPUpuKHQpO2lmKGUpe3ZhciBuPWUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO24mJihMcihuLG4uaW5kZXhPZih0KSksUm4uZGlydHlQYXJlbnRRdWVyaWVzKHQpKX19fSh0KSx0LnJlbmRlcmVyLmRlc3Ryb3lOb2RlJiZmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5kZWYubm9kZXMubGVuZ3RoLG49MDtuPGU7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTsxJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShqbih0LG4pLnJlbmRlckVsZW1lbnQpOjImci5mbGFncz90LnJlbmRlcmVyLmRlc3Ryb3lOb2RlKEFuKHQsbikucmVuZGVyVGV4dCk6KDY3MTA4ODY0JnIuZmxhZ3N8fDEzNDIxNzcyOCZyLmZsYWdzKSYmTm4odCxuKS5kZXN0cm95KCl9fSh0KSxucih0KSYmdC5yZW5kZXJlci5kZXN0cm95KCksdC5zdGF0ZXw9MTI4fX12YXIgcm89ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5DcmVhdGVWaWV3Tm9kZXM9MF09IkNyZWF0ZVZpZXdOb2RlcyIsdFt0LkNoZWNrTm9DaGFuZ2VzPTFdPSJDaGVja05vQ2hhbmdlcyIsdFt0LkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M9Ml09IkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MiLHRbdC5DaGVja0FuZFVwZGF0ZT0zXT0iQ2hlY2tBbmRVcGRhdGUiLHRbdC5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzPTRdPSJDaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzIix0W3QuRGVzdHJveT01XT0iRGVzdHJveSIsdH0oe30pO2Z1bmN0aW9uIGlvKHQsZSl7dmFyIG49dC5kZWY7aWYoMzM1NTQ0MzImbi5ub2RlRmxhZ3MpZm9yKHZhciByPTA7cjxuLm5vZGVzLmxlbmd0aDtyKyspe3ZhciBpPW4ubm9kZXNbcl07MzM1NTQ0MzImaS5mbGFncz9hbyhqbih0LHIpLmNvbXBvbmVudFZpZXcsZSk6MD09KDMzNTU0NDMyJmkuY2hpbGRGbGFncykmJihyKz1pLmNoaWxkQ291bnQpfX1mdW5jdGlvbiBvbyh0LGUpe3ZhciBuPXQuZGVmO2lmKDE2Nzc3MjE2Jm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT1uLm5vZGVzW3JdO2lmKDE2Nzc3MjE2JmkuZmxhZ3MpZm9yKHZhciBvPWpuKHQscikudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxhPTA7YTxvLmxlbmd0aDthKyspYW8ob1thXSxlKTtlbHNlIDA9PSgxNjc3NzIxNiZpLmNoaWxkRmxhZ3MpJiYocis9aS5jaGlsZENvdW50KX19ZnVuY3Rpb24gYW8odCxlKXt2YXIgbj10LnN0YXRlO3N3aXRjaChlKXtjYXNlIHJvLkNoZWNrTm9DaGFuZ2VzOjA9PSgxMjgmbikmJigxMj09KDEyJm4pP0tpKHQpOjY0Jm4mJnNvKHQscm8uQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cykpO2JyZWFrO2Nhc2Ugcm8uQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3czowPT0oMTI4Jm4pJiYoMzImbj9LaSh0KTo2NCZuJiZzbyh0LGUpKTticmVhaztjYXNlIHJvLkNoZWNrQW5kVXBkYXRlOjA9PSgxMjgmbikmJigxMj09KDEyJm4pP1hpKHQpOjY0Jm4mJnNvKHQscm8uQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cykpO2JyZWFrO2Nhc2Ugcm8uQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3czowPT0oMTI4Jm4pJiYoMzImbj9YaSh0KTo2NCZuJiZzbyh0LGUpKTticmVhaztjYXNlIHJvLkRlc3Ryb3k6bm8odCk7YnJlYWs7Y2FzZSByby5DcmVhdGVWaWV3Tm9kZXM6WmkodCl9fWZ1bmN0aW9uIHNvKHQsZSl7b28odCxlKSxpbyh0LGUpfWZ1bmN0aW9uIGxvKHQsZSxuLHIpe2lmKHQuZGVmLm5vZGVGbGFncyZlJiZ0LmRlZi5ub2RlRmxhZ3Mmbilmb3IodmFyIGk9dC5kZWYubm9kZXMubGVuZ3RoLG89MDtvPGk7bysrKXt2YXIgYT10LmRlZi5ub2Rlc1tvXTtpZihhLmZsYWdzJmUmJmEuZmxhZ3Mmbilzd2l0Y2goUm4uc2V0Q3VycmVudE5vZGUodCxhLm5vZGVJbmRleCkscil7Y2FzZSAwOlBpKHQsYSk7YnJlYWs7Y2FzZSAxOmVvKHQsYSl9YS5jaGlsZEZsYWdzJmUmJmEuY2hpbGRGbGFncyZufHwobys9YS5jaGlsZENvdW50KX19dmFyIHVvPSExO2Z1bmN0aW9uIGNvKHQsZSxuLHIsaSxvKXtyZXR1cm4gcWkoaG8odCxpLGkuaW5qZWN0b3IuZ2V0KGxlKSxlLG4pLHIsbyl9ZnVuY3Rpb24gZm8odCxlLG4scixpLG8pe3ZhciBhPWkuaW5qZWN0b3IuZ2V0KGxlKSxzPWhvKHQsaSxuZXcgWW8oYSksZSxuKSxsPUNvKHIpO3JldHVybiBxbyhJby5jcmVhdGUscWksbnVsbCxbcyxsLG9dKX1mdW5jdGlvbiBobyh0LGUsbixyLGkpe3ZhciBvPWUuaW5qZWN0b3IuZ2V0KGtuKSxhPWUuaW5qZWN0b3IuZ2V0KGF0KTtyZXR1cm57bmdNb2R1bGU6ZSxpbmplY3Rvcjp0LHByb2plY3RhYmxlTm9kZXM6cixzZWxlY3Rvck9yTm9kZTppLHNhbml0aXplcjpvLHJlbmRlcmVyRmFjdG9yeTpuLHJlbmRlcmVyOm4uY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKSxlcnJvckhhbmRsZXI6YX19ZnVuY3Rpb24gcG8odCxlLG4scil7dmFyIGk9Q28obik7cmV0dXJuIHFvKElvLmNyZWF0ZSxRaSxudWxsLFt0LGUsaSxyXSl9ZnVuY3Rpb24gbW8odCxlLG4scil7cmV0dXJuIG49Ym8uZ2V0KGUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlci5wcm92aWRlci50b2tlbil8fENvKG4pLHFvKElvLmNyZWF0ZSxHaSxudWxsLFt0LGUsbixyXSl9ZnVuY3Rpb24geW8odCxlLG4scil7cmV0dXJuIHRpKHQsZSxuLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPSExLG49ITE7cmV0dXJuIDA9PT1nby5zaXplP3toYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59Oih0LnByb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWdvLmdldCh0LnRva2VuKTszODQwJnQuZmxhZ3MmJnImJihlPSEwLG49bnx8ci5kZXByZWNhdGVkQmVoYXZpb3IpfSksdC5tb2R1bGVzLmZvckVhY2goZnVuY3Rpb24odCl7dm8uZm9yRWFjaChmdW5jdGlvbihyLGkpe2kubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW49PT10JiYoZT0hMCxuPW58fHIuZGVwcmVjYXRlZEJlaGF2aW9yKX0pfSkse2hhc092ZXJyaWRlczplLGhhc0RlcHJlY2F0ZWRPdmVycmlkZXM6bn0pfSh0KSxuPWUuaGFzRGVwcmVjYXRlZE92ZXJyaWRlcztyZXR1cm4gZS5oYXNPdmVycmlkZXM/KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5wcm92aWRlcnMubGVuZ3RoO2UrKyl7dmFyIHI9dC5wcm92aWRlcnNbZV07biYmKHIuZmxhZ3N8PTQwOTYpO3ZhciBpPWdvLmdldChyLnRva2VuKTtpJiYoci5mbGFncz0tMzg0MSZyLmZsYWdzfGkuZmxhZ3Msci5kZXBzPWFyKGkuZGVwcyksci52YWx1ZT1pLnZhbHVlKX1pZih2by5zaXplPjApe3ZhciBvPW5ldyBTZXQodC5tb2R1bGVzKTt2by5mb3JFYWNoKGZ1bmN0aW9uKGUscil7aWYoby5oYXMoci5uZ0luamVjdGFibGVEZWYucHJvdmlkZWRJbikpe3ZhciBpPXt0b2tlbjpyLGZsYWdzOmUuZmxhZ3N8KG4/NDA5NjowKSxkZXBzOmFyKGUuZGVwcyksdmFsdWU6ZS52YWx1ZSxpbmRleDp0LnByb3ZpZGVycy5sZW5ndGh9O3QucHJvdmlkZXJzLnB1c2goaSksdC5wcm92aWRlcnNCeUtleVt6bihyKV09aX19KX19KHQ9dC5mYWN0b3J5KGZ1bmN0aW9uKCl7cmV0dXJuIFZufSkpLHQpOnR9KHIpKX12YXIgZ289bmV3IE1hcCx2bz1uZXcgTWFwLGJvPW5ldyBNYXA7ZnVuY3Rpb24gX28odCl7Z28uc2V0KHQudG9rZW4sdCksImZ1bmN0aW9uIj09dHlwZW9mIHQudG9rZW4mJnQudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50b2tlbi5uZ0luamVjdGFibGVEZWYucHJvdmlkZWRJbiYmdm8uc2V0KHQudG9rZW4sdCl9ZnVuY3Rpb24gd28odCxlKXt2YXIgbj11cih1cihlLnZpZXdEZWZGYWN0b3J5KS5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFZpZXcpO2JvLnNldCh0LG4pfWZ1bmN0aW9uIHhvKCl7Z28uY2xlYXIoKSx2by5jbGVhcigpLGJvLmNsZWFyKCl9ZnVuY3Rpb24gQ28odCl7aWYoMD09PWdvLnNpemUpcmV0dXJuIHQ7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49bnVsbCxyPTA7cjx0Lm5vZGVzLmxlbmd0aDtyKyspe3ZhciBpPXQubm9kZXNbcl07MSZpLmZsYWdzJiYobj1pKSxuJiYzODQwJmkuZmxhZ3MmJmdvLmhhcyhpLnByb3ZpZGVyLnRva2VuKSYmKGUucHVzaChuLm5vZGVJbmRleCksbj1udWxsKX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3Q9dC5mYWN0b3J5KGZ1bmN0aW9uKCl7cmV0dXJuIFZufSk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspcih0LGVbbl0pO3JldHVybiB0O2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIG49ZSsxO248dC5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10Lm5vZGVzW25dO2lmKDEmci5mbGFncylyZXR1cm47aWYoMzg0MCZyLmZsYWdzKXt2YXIgaT1yLnByb3ZpZGVyLG89Z28uZ2V0KGkudG9rZW4pO28mJihyLmZsYWdzPS0zODQxJnIuZmxhZ3N8by5mbGFncyxpLmRlcHM9YXIoby5kZXBzKSxpLnZhbHVlPW8udmFsdWUpfX19fWZ1bmN0aW9uIEVvKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxmLGgpe3ZhciBwPXQuZGVmLm5vZGVzW2VdO3JldHVybiAkaSh0LHAsbixyLGksbyxhLHMsbCx1LGMsZixoKSwyMjQmcC5mbGFncz9Nbih0LGUpLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBPbyh0LGUsbixyLGksbyxhLHMsbCx1LGMsZixoKXt2YXIgcD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gdG8odCxwLG4scixpLG8sYSxzLGwsdSxjLGYsaCksMjI0JnAuZmxhZ3M/TW4odCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rpb24gU28odCl7cmV0dXJuIHFvKElvLmRldGVjdENoYW5nZXMsWGksbnVsbCxbdF0pfWZ1bmN0aW9uIGtvKHQpe3JldHVybiBxbyhJby5jaGVja05vQ2hhbmdlcyxLaSxudWxsLFt0XSl9ZnVuY3Rpb24gVG8odCl7cmV0dXJuIHFvKElvLmRlc3Ryb3ksbm8sbnVsbCxbdF0pfXZhciBQbyxBbyxqbyxJbz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LmNyZWF0ZT0wXT0iY3JlYXRlIix0W3QuZGV0ZWN0Q2hhbmdlcz0xXT0iZGV0ZWN0Q2hhbmdlcyIsdFt0LmNoZWNrTm9DaGFuZ2VzPTJdPSJjaGVja05vQ2hhbmdlcyIsdFt0LmRlc3Ryb3k9M109ImRlc3Ryb3kiLHRbdC5oYW5kbGVFdmVudD00XT0iaGFuZGxlRXZlbnQiLHR9KHt9KTtmdW5jdGlvbiBNbyh0LGUpe0FvPXQsam89ZX1mdW5jdGlvbiBObyh0LGUsbixyKXtyZXR1cm4gTW8odCxlKSxxbyhJby5oYW5kbGVFdmVudCx0LmRlZi5oYW5kbGVFdmVudCxudWxsLFt0LGUsbixyXSl9ZnVuY3Rpb24gUm8odCxlKXtpZigxMjgmdC5zdGF0ZSl0aHJvdyBMbihJb1tQb10pO3JldHVybiBNbyh0LHpvKHQsMCkpLHQuZGVmLnVwZGF0ZURpcmVjdGl2ZXMoZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgaT1bXSxvPTM7bzxhcmd1bWVudHMubGVuZ3RoO28rKylpW28tM109YXJndW1lbnRzW29dO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9Gbyh0LGEscixpKTpMbyh0LGEscixpKSwxNjM4NCZhLmZsYWdzJiZNbyh0LHpvKHQsbikpLDIyNCZhLmZsYWdzP01uKHQsYS5ub2RlSW5kZXgpLnZhbHVlOnZvaWQgMH0sdCl9ZnVuY3Rpb24gRG8odCxlKXtpZigxMjgmdC5zdGF0ZSl0aHJvdyBMbihJb1tQb10pO3JldHVybiBNbyh0LFVvKHQsMCkpLHQuZGVmLnVwZGF0ZVJlbmRlcmVyKGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9W10sbz0zO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTNdPWFyZ3VtZW50c1tvXTt2YXIgYT10LmRlZi5ub2Rlc1tuXTtyZXR1cm4gMD09PWU/Rm8odCxhLHIsaSk6TG8odCxhLHIsaSksMyZhLmZsYWdzJiZNbyh0LFVvKHQsbikpLDIyNCZhLmZsYWdzP01uKHQsYS5ub2RlSW5kZXgpLnZhbHVlOnZvaWQgMH0sdCl9ZnVuY3Rpb24gRm8odCxlLG4saSl7aWYoJGkuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKFt0LGUsbl0saSkpKXt2YXIgbz0xPT09bj9pWzBdOmk7aWYoMTYzODQmZS5mbGFncyl7Zm9yKHZhciBhPXt9LHM9MDtzPGUuYmluZGluZ3MubGVuZ3RoO3MrKyl7dmFyIGw9ZS5iaW5kaW5nc1tzXSx1PW9bc107OCZsLmZsYWdzJiYoYVsocD1sLm5vbk1pbmlmaWVkTmFtZSwibmctcmVmbGVjdC0iKyhwPXAucmVwbGFjZSgvWyRAXS9nLCJfIikucmVwbGFjZShWbyxmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4iLSIrdFsxXS50b0xvd2VyQ2FzZSgpfSkpKV09Qm8odSkpfXZhciBjPWUucGFyZW50LGY9am4odCxjLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtpZihjLmVsZW1lbnQubmFtZSlmb3IodmFyIGggaW4gYSludWxsIT0odT1hW2hdKT90LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShmLGgsdSk6dC5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoZixoKTtlbHNlIHQucmVuZGVyZXIuc2V0VmFsdWUoZiwiYmluZGluZ3M9IitKU09OLnN0cmluZ2lmeShhLG51bGwsMikpfX12YXIgcH1mdW5jdGlvbiBMbyh0LGUsbixpKXt0by5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkoW3QsZSxuXSxpKSl9dmFyIFZvPS8oW0EtWl0pL2c7ZnVuY3Rpb24gQm8odCl7dHJ5e3JldHVybiBudWxsIT10P3QudG9TdHJpbmcoKS5zbGljZSgwLDMwKTp0fWNhdGNoKHQpe3JldHVybiJbRVJST1JdIEV4Y2VwdGlvbiB3aGlsZSB0cnlpbmcgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSJ9fWZ1bmN0aW9uIHpvKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTtpZigxNjM4NCZyLmZsYWdzJiZyLmJpbmRpbmdzJiZyLmJpbmRpbmdzLmxlbmd0aClyZXR1cm4gbn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBVbyh0LGUpe2Zvcih2YXIgbj1lO248dC5kZWYubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07aWYoMyZyLmZsYWdzJiZyLmJpbmRpbmdzJiZyLmJpbmRpbmdzLmxlbmd0aClyZXR1cm4gbn1yZXR1cm4gbnVsbH12YXIgSG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52aWV3PXQsdGhpcy5ub2RlSW5kZXg9ZSxudWxsPT1lJiYodGhpcy5ub2RlSW5kZXg9ZT0wKSx0aGlzLm5vZGVEZWY9dC5kZWYubm9kZXNbZV07Zm9yKHZhciBuPXRoaXMubm9kZURlZixyPXQ7biYmMD09KDEmbi5mbGFncyk7KW49bi5wYXJlbnQ7aWYoIW4pZm9yKDshbiYmcjspbj10cihyKSxyPXIucGFyZW50O3RoaXMuZWxEZWY9bix0aGlzLmVsVmlldz1yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVsT3JDb21wVmlldyIse2dldDpmdW5jdGlvbigpe3JldHVybiBqbih0aGlzLmVsVmlldyx0aGlzLmVsRGVmLm5vZGVJbmRleCkuY29tcG9uZW50Vmlld3x8dGhpcy52aWV3fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWnIodGhpcy5lbFZpZXcsdGhpcy5lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbE9yQ29tcFZpZXcuY29tcG9uZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvdmlkZXJUb2tlbnMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtpZih0aGlzLmVsRGVmKWZvcih2YXIgZT10aGlzLmVsRGVmLm5vZGVJbmRleCsxO2U8PXRoaXMuZWxEZWYubm9kZUluZGV4K3RoaXMuZWxEZWYuY2hpbGRDb3VudDtlKyspe3ZhciBuPXRoaXMuZWxWaWV3LmRlZi5ub2Rlc1tlXTsyMDIyNCZuLmZsYWdzJiZ0LnB1c2gobi5wcm92aWRlci50b2tlbiksZSs9bi5jaGlsZENvdW50fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMuZWxEZWYpe1FvKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYsdCk7Zm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJlFvKHRoaXMuZWxWaWV3LG4sdCksZSs9bi5jaGlsZENvdW50fX1yZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudFJlbmRlckVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0KXtmb3IoO3QmJiFucih0KTspdD10LnBhcmVudDtyZXR1cm4gdC5wYXJlbnQ/am4odC5wYXJlbnQsdHIodCkubm9kZUluZGV4KTpudWxsfSh0aGlzLmVsT3JDb21wVmlldyk7cmV0dXJuIHQ/dC5yZW5kZXJFbGVtZW50OnZvaWQgMH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlbmRlck5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMiZ0aGlzLm5vZGVEZWYuZmxhZ3M/ZXIodGhpcy52aWV3LHRoaXMubm9kZURlZik6ZXIodGhpcy5lbFZpZXcsdGhpcy5lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saT1bXSxvPTE7bzxhcmd1bWVudHMubGVuZ3RoO28rKylpW28tMV09YXJndW1lbnRzW29dOzImdGhpcy5ub2RlRGVmLmZsYWdzPyhlPXRoaXMudmlldy5kZWYsbj10aGlzLm5vZGVEZWYubm9kZUluZGV4KTooZT10aGlzLmVsVmlldy5kZWYsbj10aGlzLmVsRGVmLm5vZGVJbmRleCk7dmFyIGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj0wO3I8PWU7cisrKTMmdC5ub2Rlc1tyXS5mbGFncyYmbisrO3JldHVybiBufShlLG4pLHM9LTE7ZS5mYWN0b3J5KGZ1bmN0aW9uKCl7cmV0dXJuKytzPT09YT8oZT10LmVycm9yKS5iaW5kLmFwcGx5KGUsT2JqZWN0KHIuZCkoW3RdLGkpKTpWbjt2YXIgZX0pLHM8YSYmKHQuZXJyb3IoIklsbGVnYWwgc3RhdGU6IHRoZSBWaWV3RGVmaW5pdGlvbkZhY3RvcnkgZGlkIG5vdCBjYWxsIHRoZSBsb2dnZXIhIiksdC5lcnJvci5hcHBseSh0LE9iamVjdChyLmQpKGkpKSl9LHR9KCk7ZnVuY3Rpb24gUW8odCxlLG4pe2Zvcih2YXIgciBpbiBlLnJlZmVyZW5jZXMpbltyXT1qaSh0LGUsZS5yZWZlcmVuY2VzW3JdKX1mdW5jdGlvbiBxbyh0LGUsbixyKXt2YXIgaT1QbyxvPUFvLGE9am87dHJ5e1BvPXQ7dmFyIHM9ZS5hcHBseShuLHIpO3JldHVybiBBbz1vLGpvPWEsUG89aSxzfWNhdGNoKHQpe2lmKHJ0KHQpfHwhQW8pdGhyb3cgdDt0aHJvdyBmdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3J8fCh0PW5ldyBFcnJvcih0LnRvU3RyaW5nKCkpKSxGbih0LGUpLHR9KHQsR28oKSl9fWZ1bmN0aW9uIEdvKCl7cmV0dXJuIEFvP25ldyBIbyhBbyxqbyk6bnVsbH12YXIgWW89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFdvKHRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIodCxlKSl9LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZT90aGlzLmRlbGVnYXRlLndoZW5SZW5kZXJpbmdEb25lKCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfSx0fSgpLFdvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXQsdGhpcy5kYXRhPXRoaXMuZGVsZWdhdGUuZGF0YX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveU5vZGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe1NlLmRlbGV0ZSh0Lm5hdGl2ZU5vZGUpfShrZSh0KSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSYmdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSkscj1HbygpO2lmKHIpe3ZhciBpPW5ldyBDZShuLG51bGwscik7aS5uYW1lPXQsVGUoaSl9cmV0dXJuIG59LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpLG49R28oKTtyZXR1cm4gbiYmVGUobmV3IHhlKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCksbj1HbygpO3JldHVybiBuJiZUZShuZXcgeGUoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPWtlKHQpLHI9a2UoZSk7biYmciYmbiBpbnN0YW5jZW9mIENlJiZuLmFkZENoaWxkKHIpLHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1rZSh0KSxpPWtlKGUpLG89a2Uobik7ciYmaSYmciBpbnN0YW5jZW9mIENlJiZyLmluc2VydEJlZm9yZShvLGkpLHRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1rZSh0KSxyPWtlKGUpO24mJnImJm4gaW5zdGFuY2VvZiBDZSYmbi5yZW1vdmVDaGlsZChyKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHQsZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCksbj1HbygpO3JldHVybiBuJiZUZShuZXcgQ2UoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9a2UodCk7aSYmaSBpbnN0YW5jZW9mIENlJiYoaS5hdHRyaWJ1dGVzW3I/cisiOiIrZTplXT1uKSx0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1rZSh0KTtyJiZyIGluc3RhbmNlb2YgQ2UmJihyLmF0dHJpYnV0ZXNbbj9uKyI6IitlOmVdPW51bGwpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1rZSh0KTtuJiZuIGluc3RhbmNlb2YgQ2UmJihuLmNsYXNzZXNbZV09ITApLHRoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1rZSh0KTtuJiZuIGluc3RhbmNlb2YgQ2UmJihuLmNsYXNzZXNbZV09ITEpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9a2UodCk7aSYmaSBpbnN0YW5jZW9mIENlJiYoaS5zdHlsZXNbZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWtlKHQpO3ImJnIgaW5zdGFuY2VvZiBDZSYmKHIuc3R5bGVzW2VdPW51bGwpLHRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dmFyIHI9a2UodCk7ciYmciBpbnN0YW5jZW9mIENlJiYoci5wcm9wZXJ0aWVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIHI9a2UodCk7ciYmci5saXN0ZW5lcnMucHVzaChuZXcgZnVuY3Rpb24odCxlKXt0aGlzLm5hbWU9dCx0aGlzLmNhbGxiYWNrPWV9KGUsbikpfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdH0oKTtmdW5jdGlvbiBabyh0LGUsbil7cmV0dXJuIG5ldyBLbyh0LGUsbil9dmFyIEtvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5tb2R1bGVUeXBlPWUsaS5fYm9vdHN0cmFwQ29tcG9uZW50cz1uLGkuX25nTW9kdWxlRGVmRmFjdG9yeT1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbigpe2lmKCF1byl7dW89ITA7dmFyIHQ9dGUoKT97c2V0Q3VycmVudE5vZGU6TW8sY3JlYXRlUm9vdFZpZXc6Zm8sY3JlYXRlRW1iZWRkZWRWaWV3OnBvLGNyZWF0ZUNvbXBvbmVudFZpZXc6bW8sY3JlYXRlTmdNb2R1bGVSZWY6eW8sb3ZlcnJpZGVQcm92aWRlcjpfbyxvdmVycmlkZUNvbXBvbmVudFZpZXc6d28sY2xlYXJPdmVycmlkZXM6eG8sY2hlY2tBbmRVcGRhdGVWaWV3OlNvLGNoZWNrTm9DaGFuZ2VzVmlldzprbyxkZXN0cm95VmlldzpUbyxjcmVhdGVEZWJ1Z0NvbnRleHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEhvKHQsZSl9LGhhbmRsZUV2ZW50Ok5vLHVwZGF0ZURpcmVjdGl2ZXM6Um8sdXBkYXRlUmVuZGVyZXI6RG99OntzZXRDdXJyZW50Tm9kZTpmdW5jdGlvbigpe30sY3JlYXRlUm9vdFZpZXc6Y28sY3JlYXRlRW1iZWRkZWRWaWV3OlFpLGNyZWF0ZUNvbXBvbmVudFZpZXc6R2ksY3JlYXRlTmdNb2R1bGVSZWY6dGksb3ZlcnJpZGVQcm92aWRlcjpWbixvdmVycmlkZUNvbXBvbmVudFZpZXc6Vm4sY2xlYXJPdmVycmlkZXM6Vm4sY2hlY2tBbmRVcGRhdGVWaWV3OlhpLGNoZWNrTm9DaGFuZ2VzVmlldzpLaSxkZXN0cm95VmlldzpubyxjcmVhdGVEZWJ1Z0NvbnRleHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEhvKHQsZSl9LGhhbmRsZUV2ZW50OmZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0LmRlZi5oYW5kbGVFdmVudCh0LGUsbixyKX0sdXBkYXRlRGlyZWN0aXZlczpmdW5jdGlvbih0LGUpe3JldHVybiB0LmRlZi51cGRhdGVEaXJlY3RpdmVzKDA9PT1lP0VvOk9vLHQpfSx1cGRhdGVSZW5kZXJlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmRlZi51cGRhdGVSZW5kZXJlcigwPT09ZT9FbzpPbyx0KX19O1JuLnNldEN1cnJlbnROb2RlPXQuc2V0Q3VycmVudE5vZGUsUm4uY3JlYXRlUm9vdFZpZXc9dC5jcmVhdGVSb290VmlldyxSbi5jcmVhdGVFbWJlZGRlZFZpZXc9dC5jcmVhdGVFbWJlZGRlZFZpZXcsUm4uY3JlYXRlQ29tcG9uZW50Vmlldz10LmNyZWF0ZUNvbXBvbmVudFZpZXcsUm4uY3JlYXRlTmdNb2R1bGVSZWY9dC5jcmVhdGVOZ01vZHVsZVJlZixSbi5vdmVycmlkZVByb3ZpZGVyPXQub3ZlcnJpZGVQcm92aWRlcixSbi5vdmVycmlkZUNvbXBvbmVudFZpZXc9dC5vdmVycmlkZUNvbXBvbmVudFZpZXcsUm4uY2xlYXJPdmVycmlkZXM9dC5jbGVhck92ZXJyaWRlcyxSbi5jaGVja0FuZFVwZGF0ZVZpZXc9dC5jaGVja0FuZFVwZGF0ZVZpZXcsUm4uY2hlY2tOb0NoYW5nZXNWaWV3PXQuY2hlY2tOb0NoYW5nZXNWaWV3LFJuLmRlc3Ryb3lWaWV3PXQuZGVzdHJveVZpZXcsUm4ucmVzb2x2ZURlcD13aSxSbi5jcmVhdGVEZWJ1Z0NvbnRleHQ9dC5jcmVhdGVEZWJ1Z0NvbnRleHQsUm4uaGFuZGxlRXZlbnQ9dC5oYW5kbGVFdmVudCxSbi51cGRhdGVEaXJlY3RpdmVzPXQudXBkYXRlRGlyZWN0aXZlcyxSbi51cGRhdGVSZW5kZXJlcj10LnVwZGF0ZVJlbmRlcmVyLFJuLmRpcnR5UGFyZW50UXVlcmllcz1UaX19KCk7dmFyIGU9dXIodGhpcy5fbmdNb2R1bGVEZWZGYWN0b3J5KTtyZXR1cm4gUm4uY3JlYXRlTmdNb2R1bGVSZWYodGhpcy5tb2R1bGVUeXBlLHR8fE4uTlVMTCx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzLGUpfSxlfShJdCk7ZnVuY3Rpb24gWG8odCxlLG4pe3QhPWUmJnRhKG4pfWZ1bmN0aW9uICRvKHQsZSl7bnVsbCE9dCYmdGEoZSl9ZnVuY3Rpb24gSm8odCxlKXtudWxsPT10JiZ0YShlKX1mdW5jdGlvbiB0YSh0KXt0aHJvdyBuZXcgRXJyb3IoIkFTU0VSVElPTiBFUlJPUjogIit0KX1mdW5jdGlvbiBlYSh0LGUsbixyKXt2YXIgaT1yP2U6bjtpJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bis9MillW24rMV0uY2FsbCh0W2Vbbl1dKX0odCxpKX0idW5kZWZpbmVkIj09dHlwZW9mIG5nRGV2TW9kZSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93Lm5nRGV2TW9kZT0hMCksInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYoc2VsZi5uZ0Rldk1vZGU9ITApLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiYoZ2xvYmFsLm5nRGV2TW9kZT0hMCkpO3ZhciBuYSxyYSxpYSxvYSxhYSxzYSxsYSx1YSxjYSxmYSxoYT0iX19uZ0hvc3RMTm9kZV9fIixwYT1Qcm9taXNlLnJlc29sdmUobnVsbCksZGE9WzAsMF0sbWE9bnVsbCx5YT0hMTtmdW5jdGlvbiBnYSh0LGUpe3ZhciBuPW1hO3JldHVybiB1YT10JiZ0LmRhdGEsY2E9dCYmdC5kaXJlY3RpdmVzLGFhPXQmJnQudFZpZXcuZGF0YSxsYT10JiYxPT0oMSZ0LmZsYWdzKSxuYT10JiZ0LnJlbmRlcmVyLHQmJnQuYmluZGluZ0luZGV4PDAmJih0LmJpbmRpbmdJbmRleD10LmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT1lJiYoaWE9ZSxvYT0hMCksbWE9dCxzYT10JiZ0LnF1ZXJpZXMsbn1mdW5jdGlvbiB2YSh0KXt5YXx8ZWEoY2EsbWEudFZpZXcudmlld0hvb2tzLG1hLnRWaWV3LnZpZXdDaGVja0hvb2tzLGxhKSxtYS5mbGFncyY9LTYsbWEubGlmZWN5Y2xlU3RhZ2U9MSxtYS5iaW5kaW5nSW5kZXg9LTEsZ2EodCxudWxsKX1mdW5jdGlvbiBiYSgpe3dhKCk7dmFyIHQ9bWEudFZpZXc7dC5maXJzdFRlbXBsYXRlUGFzcz0hMSxfYSh0Lmhvc3RCaW5kaW5ncyksZnVuY3Rpb24odCl7aWYobnVsbCE9dClmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrPTIpRWEodFtlXSx0W2UrMV0pfSh0LmNvbXBvbmVudHMpfWZ1bmN0aW9uIF9hKHQpe2lmKG51bGwhPXQpZm9yKHZhciBlPW1hLnRWaWV3LmRpcmVjdGl2ZXMsbj0wO248dC5sZW5ndGg7bis9Mil7dmFyIHI9dFtuXSxpPWVbcl07aS5ob3N0QmluZGluZ3MmJmkuaG9zdEJpbmRpbmdzKHIsdFtuKzFdKX19ZnVuY3Rpb24gd2EoKXtpZigheWEpe3ZhciB0PW1hLnRWaWV3OyhmdW5jdGlvbih0LGUsbil7MT09PXQubGlmZWN5Y2xlU3RhZ2UmJihlYSh0LmRpcmVjdGl2ZXMsZS5pbml0SG9va3MsZS5jaGVja0hvb2tzLG4pLHQubGlmZWN5Y2xlU3RhZ2U9Mil9KShtYSx0LGxhKSxlYShjYSx0LmNvbnRlbnRIb29rcyx0LmNvbnRlbnRDaGVja0hvb2tzLGxhKX19ZnVuY3Rpb24geGEodCxlLG4scixpLG8pe3ZhciBhLHMsbCx1LGMsZixoLHAsZCxtPW9hLHk9aWE7dHJ5e29hPSEwLGlhPW51bGw7dmFyIGc9MjtudWxsPT10JiYocz1udWxsLGw9Mix1PW51bGwsYz1mdW5jdGlvbih0LGUsbixyLGksbyl7cmV0dXJue3BhcmVudDptYSxpZDotMSxmbGFnczoxMSxub2RlOm51bGwsZGF0YTpbXSxkaXJlY3RpdmVzOm51bGwsdFZpZXc6bixjbGVhbnVwOm51bGwscmVuZGVyZXI6ZSxjaGlsZDpudWxsLHRhaWw6bnVsbCxuZXh0Om51bGwsYmluZGluZ1N0YXJ0SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLHRlbXBsYXRlOnIsY29udGV4dDppLGR5bmFtaWNWaWV3Q291bnQ6MCxsaWZlY3ljbGVTdGFnZToxLHF1ZXJpZXM6bnVsbCxpbmplY3RvcjptYSYmbWEuaW5qZWN0b3J9fSgwLHIsZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lm5nUHJpdmF0ZURhdGF8fCh0Lm5nUHJpdmF0ZURhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbXSxkaXJlY3RpdmVzOm51bGwsZmlyc3RUZW1wbGF0ZVBhc3M6ITAsaW5pdEhvb2tzOm51bGwsY2hlY2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxwaXBlRGVzdHJveUhvb2tzOm51bGwsaG9zdEJpbmRpbmdzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoKTp0LHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZT9lKCk6ZSxjdXJyZW50TWF0Y2hlczpudWxsfX0oZSxuKSl9KGUsaXx8bnVsbCxvfHxudWxsKSxlLG4pLGY9b2E/aWE6aWEmJmlhLnBhcmVudCxoPShvYT9zYTppYSYmaWEucXVlcmllcyl8fGYmJmYucXVlcmllcyYmZi5xdWVyaWVzLmNoaWxkKCksZD1mdW5jdGlvbih0LGUsbixyLGksbyl7cmV0dXJue3R5cGU6dCxuYXRpdmU6cix2aWV3OmUscGFyZW50Om4sY2hpbGQ6bnVsbCxuZXh0Om51bGwsbm9kZUluamVjdG9yOm4/bi5ub2RlSW5qZWN0b3I6bnVsbCxkYXRhOmkscXVlcmllczpvLHROb2RlOm51bGwscE5leHRPclBhcmVudDpudWxsLGR5bmFtaWNMQ29udGFpbmVyTm9kZTpudWxsfX0obCxtYSxmLHUsKHA9bnVsbCE9Yyk/YzpudWxsLGgpLDI9PSgyJmwpJiZwJiYobmdEZXZNb2RlJiYkbyhjLm5vZGUsIkxWaWV3Lm5vZGUgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSxjLm5vZGU9ZCksbnVsbCE9cyYmKG5nRGV2TW9kZSYmZnVuY3Rpb24odCxlKXtudWxsPT1lJiYoZT11YSksWG8oZS5sZW5ndGgsdCwiaW5kZXggIit0KyIgZXhwZWN0ZWQgdG8gYmUgYXQgdGhlIGVuZCBvZiBhcnIgKGxlbmd0aCAiK2UubGVuZ3RoKyIpIil9KHMpLHVhW3NdPWQscz49YWEubGVuZ3RoP2FhW3NdPW51bGw6ZC50Tm9kZT1hYVtzXSxvYT8oc2E9bnVsbCxpYS52aWV3IT09bWEmJjIhPT1pYS50eXBlfHwobmdEZXZNb2RlJiYkbyhpYS5jaGlsZCwicHJldmlvdXNPclBhcmVudE5vZGUncyBjaGlsZCBzaG91bGQgbm90IGhhdmUgYmVlbiBzZXQuIiksaWEuY2hpbGQ9ZCkpOmlhJiYobmdEZXZNb2RlJiYkbyhpYS5uZXh0LCJwcmV2aW91c09yUGFyZW50Tm9kZSdzIG5leHQgcHJvcGVydHkgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0ICIrcysiLiIpLGlhLm5leHQ9ZCxpYS5keW5hbWljTENvbnRhaW5lck5vZGUmJihpYS5keW5hbWljTENvbnRhaW5lck5vZGUubmV4dD1kKSkpLGlhPWQsb2E9ITAsdD1kLGc9MSksYT1nYSh0LmRhdGEsdCksZShnLG4pLGJhKCksQ2EoKX1maW5hbGx5e3ZhKGEpLG9hPW0saWE9eX1yZXR1cm4gdH1mdW5jdGlvbiBDYSgpe2Zvcih2YXIgdD1tYS5jaGlsZDtudWxsIT09dDt0PXQubmV4dClpZigwIT09dC5keW5hbWljVmlld0NvdW50JiZ0LnZpZXdzKWZvcih2YXIgZT10LG49MDtuPGUudmlld3MubGVuZ3RoO24rKyl7dmFyIHI9ZS52aWV3c1tuXTt4YShyLHIuZGF0YS50ZW1wbGF0ZSxyLmRhdGEuY29udGV4dCxuYSl9fWZ1bmN0aW9uIEVhKHQsZSl7bmdEZXZNb2RlJiZrYShlKTt2YXIgbixyLGk9dWFbZV07bmdEZXZNb2RlJiYocj0zLEpvKG49aSwic2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgbm9kZSIpLFhvKG4udHlwZSxyLCJzaG91bGQgYmUgYSAiK2Z1bmN0aW9uKHQpe3JldHVybiAxPT10PyJQcm9qZWN0aW9uIjowPT10PyJDb250YWluZXIiOjI9PXQ/IlZpZXciOjM9PXQ/IkVsZW1lbnQiOiI8dW5rbm93bj4ifShyKSkpLG5nRGV2TW9kZSYmSm8oaS5kYXRhLCJDb21wb25lbnQncyBob3N0IG5vZGUgc2hvdWxkIGhhdmUgYW4gTFZpZXcgYXR0YWNoZWQuIik7dmFyIG8sYT1pLmRhdGE7OD09KDgmYS5mbGFncykmJjYmYS5mbGFncyYmKG5nRGV2TW9kZSYma2EodCxjYSksU2EoYSxpLG1hLnRWaWV3LmRpcmVjdGl2ZXNbdF0sKG89Y2FbdF0sQXJyYXkuaXNBcnJheShvKT9vWzBdOm8pKSl9ZnVuY3Rpb24gT2EodCl7dmFyIGU9VGEodCk7bmdEZXZNb2RlJiZKbyhlLmRhdGEsIkNvbXBvbmVudCBob3N0IG5vZGUgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGFuIExWaWV3IiksU2EoZS5kYXRhLGUsZS52aWV3LnRWaWV3LmRpcmVjdGl2ZXNbZS50Tm9kZS5mbGFncz4+MTNdLHQpfWZ1bmN0aW9uIFNhKHQsZSxuLHIpe3ZhciBpPWdhKHQsZSksbz1uLnRlbXBsYXRlO3RyeXtvKDEmdC5mbGFncz8zOjIsciksYmEoKSxDYSgpfWZpbmFsbHl7dmEoaSl9fWZ1bmN0aW9uIGthKHQsZSl7bnVsbD09ZSYmKGU9dWEpLHQ+PShlP2UubGVuZ3RoOjApJiZ0YSgiaW5kZXggZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBkYXRhIGluZGV4Iil9ZnVuY3Rpb24gVGEodCl7bmdEZXZNb2RlJiZKbyh0LCJleHBlY3RpbmcgY29tcG9uZW50IGdvdCBudWxsIik7dmFyIGU9dFtoYV07cmV0dXJuIG5nRGV2TW9kZSYmSm8odCwib2JqZWN0IGlzIG5vdCBhIGNvbXBvbmVudCIpLGV9ZmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlldz10LHRoaXMuY29udGV4dD1lfXJldHVybiB0LnByb3RvdHlwZS5fc2V0Q29tcG9uZW50Q29udGV4dD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZpZXc9dCx0aGlzLmNvbnRleHQ9ZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUubWFya0ZvckNoZWNrPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10O251bGwhPWUucGFyZW50OyllLmZsYWdzfD00LGU9ZS5wYXJlbnQ7dmFyIG4scjtlLmZsYWdzfD00LG5nRGV2TW9kZSYmSm8oZS5jb250ZXh0LCJyb290Q29udGV4dCIpLChuPWUuY29udGV4dCkuY2xlYW49PXBhJiYobi5jbGVhbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtyZXR1cm4gcj10fSksbi5zY2hlZHVsZXIoZnVuY3Rpb24oKXt2YXIgdCxlO2U9VGEoKHQ9ZnVuY3Rpb24odCl7bmdEZXZNb2RlJiZKbyh0LCJjb21wb25lbnQiKTtmb3IodmFyIGU9VGEodCkudmlldztlLnBhcmVudDspZT1lLnBhcmVudDtyZXR1cm4gZX0obi5jb21wb25lbnQpKS5jb250ZXh0LmNvbXBvbmVudCksbmdEZXZNb2RlJiZKbyhlLmRhdGEsIkNvbXBvbmVudCBob3N0IG5vZGUgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGFuIExWaWV3IiksZnVuY3Rpb24obixyLGksbyl7dmFyIGE9Z2EodCxlKTt0cnl7cmEuYmVnaW4mJnJhLmJlZ2luKCksd2EoKSxfYShkYSksRWEoMCwwKX1maW5hbGx5e3JhLmVuZCYmcmEuZW5kKCksdmEoYSl9fSgpLHIobnVsbCksbi5jbGVhbj1wYX0pKX0odGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuZmxhZ3MmPS05fSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuZmxhZ3N8PTh9LHQucHJvdG90eXBlLmRldGVjdENoYW5nZXM9ZnVuY3Rpb24oKXtPYSh0aGlzLmNvbnRleHQpfSx0LnByb3RvdHlwZS5jaGVja05vQ2hhbmdlcz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXt5YT0hMDt0cnl7T2EodCl9ZmluYWxseXt5YT0hMX19KHRoaXMuY29udGV4dCl9LHR9KCksT2JqZWN0KHIuYikoZnVuY3Rpb24odCxlLG4pe3ZhciByPWZhLmNhbGwodGhpcyx0LmRhdGEsbil8fHRoaXM7cmV0dXJuIHIuX2xWaWV3Tm9kZT10LHJ9LGZhKX0sREtUYjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9KX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxFaG1rOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcixpPW4oImVpaHMiKTtmdW5jdGlvbiBvKCl7dHJ5e3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaCh0KXtyZXR1cm4gaS5hLmU9dCxpLmF9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHI9dCxvfX0sIkVuOCsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifSgpfSwiRi9YTCI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIm5rWTciKSxpPW4oIklVVGIiKSxvPW4oIkc1SjEiKSxhPW4oIlBVOEwiKTtmdW5jdGlvbiBzKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPXRbdC5sZW5ndGgtMV07c3dpdGNoKE9iamVjdChyLmEpKG4pP3QucG9wKCk6bj12b2lkIDAsdC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gT2JqZWN0KG8uYikobik7Y2FzZSAxOnJldHVybiBuP09iamVjdChpLmEpKHQsbik6T2JqZWN0KGEuYSkodFswXSk7ZGVmYXVsdDpyZXR1cm4gT2JqZWN0KGkuYSkodCxuKX19fSxGRk9vOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCIyQmRqIiksbz1uKCI2YWh3IiksYT1uKCJwdWdUIikscz1uKCJML1Y5IiksbD1uKCJpTHhRIiksdT1uKCJES1RiIiksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7c3dpdGNoKGkuc3luY0Vycm9yVmFsdWU9bnVsbCxpLnN5bmNFcnJvclRocm93bj0hMSxpLnN5bmNFcnJvclRocm93YWJsZT0hMSxpLmlzU3RvcHBlZD0hMSxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6aS5kZXN0aW5hdGlvbj1vLmE7YnJlYWs7Y2FzZSAxOmlmKCFlKXtpLmRlc3RpbmF0aW9uPW8uYTticmVha31pZigib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGgoZSkpe3ZhciBhPWVbcy5hXSgpO2kuc3luY0Vycm9yVGhyb3dhYmxlPWEuc3luY0Vycm9yVGhyb3dhYmxlLGkuZGVzdGluYXRpb249YSxhLmFkZChpKX1lbHNlIGkuc3luY0Vycm9yVGhyb3dhYmxlPSEwLGkuZGVzdGluYXRpb249bmV3IGYoaSxlKTticmVha31kZWZhdWx0Omkuc3luY0Vycm9yVGhyb3dhYmxlPSEwLGkuZGVzdGluYXRpb249bmV3IGYoaSxlLG4scil9cmV0dXJuIGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlW3MuYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5jcmVhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPW5ldyBlKHQsbixyKTtyZXR1cm4gaS5zeW5jRXJyb3JUaHJvd2FibGU9ITEsaX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8dGhpcy5fbmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcih0KSl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcykpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudCxlPXRoaXMuX3BhcmVudHM7cmV0dXJuIHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLnVuc3Vic2NyaWJlKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5fcGFyZW50PXQsdGhpcy5fcGFyZW50cz1lLHRoaXN9LGV9KGEuYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGEpe3ZhciBzLGw9dC5jYWxsKHRoaXMpfHx0aGlzO2wuX3BhcmVudFN1YnNjcmliZXI9ZTt2YXIgdT1sO3JldHVybiBPYmplY3QoaS5hKShuKT9zPW46biYmKHM9bi5uZXh0LHI9bi5lcnJvcixhPW4uY29tcGxldGUsbiE9PW8uYSYmKHU9T2JqZWN0LmNyZWF0ZShuKSxPYmplY3QoaS5hKSh1LnVuc3Vic2NyaWJlKSYmbC5hZGQodS51bnN1YnNjcmliZS5iaW5kKHUpKSx1LnVuc3Vic2NyaWJlPWwudW5zdWJzY3JpYmUuYmluZChsKSkpLGwuX2NvbnRleHQ9dSxsLl9uZXh0PXMsbC5fZXJyb3I9cixsLl9jb21wbGV0ZT1hLGx9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNTdG9wcGVkJiZ0aGlzLl9uZXh0KXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO2wuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX25leHQsdCkmJnRoaXMudW5zdWJzY3JpYmUoKTp0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9uZXh0LHQpfX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVyLG49bC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc7aWYodGhpcy5fZXJyb3IpbiYmZS5zeW5jRXJyb3JUaHJvd2FibGU/KHRoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKToodGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKTtlbHNlIGlmKGUuc3luY0Vycm9yVGhyb3dhYmxlKW4/KGUuc3luY0Vycm9yVmFsdWU9dCxlLnN5bmNFcnJvclRocm93bj0hMCk6T2JqZWN0KHUuYSkodCksdGhpcy51bnN1YnNjcmliZSgpO2Vsc2V7aWYodGhpcy51bnN1YnNjcmliZSgpLG4pdGhyb3cgdDtPYmplY3QodS5hKSh0KX19fSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO2lmKHRoaXMuX2NvbXBsZXRlKXt2YXIgbj1mdW5jdGlvbigpe3JldHVybiB0Ll9jb21wbGV0ZS5jYWxsKHQuX2NvbnRleHQpfTtsLmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZS5zeW5jRXJyb3JUaHJvd2FibGU/KHRoaXMuX190cnlPclNldEVycm9yKGUsbiksdGhpcy51bnN1YnNjcmliZSgpKToodGhpcy5fX3RyeU9yVW5zdWIobiksdGhpcy51bnN1YnNjcmliZSgpKX1lbHNlIHRoaXMudW5zdWJzY3JpYmUoKX19LGUucHJvdG90eXBlLl9fdHJ5T3JVbnN1Yj1mdW5jdGlvbih0LGUpe3RyeXt0LmNhbGwodGhpcy5fY29udGV4dCxlKX1jYXRjaCh0KXtpZih0aGlzLnVuc3Vic2NyaWJlKCksbC5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtPYmplY3QodS5hKSh0KX19LGUucHJvdG90eXBlLl9fdHJ5T3JTZXRFcnJvcj1mdW5jdGlvbih0LGUsbil7aWYoIWwuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IG5ldyBFcnJvcigiYmFkIGNhbGwiKTt0cnl7ZS5jYWxsKHRoaXMuX2NvbnRleHQsbil9Y2F0Y2goZSl7cmV0dXJuIGwuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nPyh0LnN5bmNFcnJvclZhbHVlPWUsdC5zeW5jRXJyb3JUaHJvd249ITAsITApOihPYmplY3QodS5hKShlKSwhMCl9cmV0dXJuITF9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudFN1YnNjcmliZXI7dGhpcy5fY29udGV4dD1udWxsLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9bnVsbCx0LnVuc3Vic2NyaWJlKCl9LGV9KGMpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBjfHwic3luY0Vycm9yVGhyb3dhYmxlImluIHQmJnRbcy5hXX19LEZ4YjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pO3ZhciByPW4oIjZibEYiKSxpPW4oIit0SjQiKSxvPW4oIlM1WFEiKSxhPW4oInU2N0QiKSxzPW4oIkpjUnYiKSxsPW4oIjJlUGwiKSx1PW4oIi9XWXYiKSxjPW4oIk1jU28iKSxmPW4oIkVuOCsiKSxoPW4oInhUbGEiKSxwPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiByLmEpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9pc1NjYWxhcj8oZS5uZXh0KHQudmFsdWUpLHZvaWQgZS5jb21wbGV0ZSgpKTp0LnN1YnNjcmliZShlKX07aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbaC5hXSlyZXR1cm4gT2JqZWN0KHMuYSkodCk7aWYoT2JqZWN0KGwuYSkodCkpcmV0dXJuIE9iamVjdChpLmEpKHQpO2lmKE9iamVjdCh1LmEpKHQpKXJldHVybiBPYmplY3Qoby5hKSh0KTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtmLmFdKXJldHVybiBPYmplY3QoYS5hKSh0KTt2YXIgZT1PYmplY3QoYy5hKSh0KT8iYW4gaW52YWxpZCBvYmplY3QiOiInIit0KyInIjt0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgcHJvdmlkZWQgIitlKyIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgQXJyYXksIG9yIEl0ZXJhYmxlLiIpfX0sRzVKMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCI2YmxGIiksaT1uZXcgci5hKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbXBsZXRlKCl9KTtmdW5jdGlvbiBvKHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgci5hKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfSl9KHQpOml9fSxJVVRiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJwdWdUIiksbz1uKCIrdEo0Iik7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IGkuYSxvPTA7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtvIT09dC5sZW5ndGg/KG4ubmV4dCh0W28rK10pLG4uY2xvc2VkfHxyLmFkZCh0aGlzLnNjaGVkdWxlKCkpKTpuLmNvbXBsZXRlKCl9KSkscn06T2JqZWN0KG8uYSkodCkpfX0sSXAwUjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciByPW4oIkNjbkciKSxpPW4oIm1yU0ciKSxvPWZ1bmN0aW9uKCl7fSxhPW5ldyByLnAoIkxvY2F0aW9uIEluaXRpYWxpemVkIikscz1mdW5jdGlvbigpe30sbD1uZXcgci5wKCJhcHBCYXNlSHJlZiIpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7dGhpcy5fc3ViamVjdD1uZXcgci5uLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3k9ZTt2YXIgaT10aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZUhyZWY9dC5zdHJpcFRyYWlsaW5nU2xhc2goYyhpKSksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5vblBvcFN0YXRlKGZ1bmN0aW9uKHQpe24uX3N1YmplY3QuZW1pdCh7dXJsOm4ucGF0aCghMCkscG9wOiEwLHN0YXRlOnQuc3RhdGUsdHlwZTp0LnR5cGV9KX0pfXJldHVybiB0LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMSksdGhpcy5ub3JtYWxpemUodGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wYXRoKHQpKX0sdC5wcm90b3R5cGUuaXNDdXJyZW50UGF0aEVxdWFsVG89ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49IiIpLHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShlK3Qubm9ybWFsaXplUXVlcnlQYXJhbXMobikpfSx0LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmUuc3RhcnRzV2l0aCh0KT9lLnN1YnN0cmluZyh0Lmxlbmd0aCk6ZX0odGhpcy5fYmFzZUhyZWYsYyhlKSkpfSx0LnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiIvIiE9PXRbMF0mJih0PSIvIit0KSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0KX0sdC5wcm90b3R5cGUuZ289ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnB1c2hTdGF0ZShuLCIiLHQsZSl9LHQucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucmVwbGFjZVN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZm9yd2FyZCgpfSx0LnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5iYWNrKCl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OnQsZXJyb3I6ZSxjb21wbGV0ZTpufSl9LHQubm9ybWFsaXplUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI/IiE9PXRbMF0/Ij8iK3Q6dH0sdC5qb2luV2l0aFNsYXNoPWZ1bmN0aW9uKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX0sdC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvI3xcP3wkLyksbj1lJiZlLmluZGV4fHx0Lmxlbmd0aDtyZXR1cm4gdC5zbGljZSgwLG4tKCIvIj09PXRbbi0xXT8xOjApKSt0LnNsaWNlKG4pfSx0fSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHQucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfXZhciBmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3BsYXRmb3JtTG9jYXRpb249ZSxyLl9iYXNlSHJlZj0iIixudWxsIT1uJiYoci5fYmFzZUhyZWY9bikscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZSh0KSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZSh0KX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9LGUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbnVsbD09ZSYmKGU9IiMiKSxlLmxlbmd0aD4wP2Uuc3Vic3RyaW5nKDEpOmV9LGUucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXt2YXIgZT11LmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsdCk7cmV0dXJuIGUubGVuZ3RoPjA/IiMiK2U6ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rdS5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rdS5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KHMpLGg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbD09biYmKG49ci5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2UgaHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRva2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7cmV0dXJuIHIuX2Jhc2VIcmVmPW4scn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZSh0KSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZSh0KX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9LGUucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gdS5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK3Uubm9ybWFsaXplUXVlcnlQYXJhbXModGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLG49dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBuJiZ0PyIiK2UrbjplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobit1Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK3Uubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KHMpLHA9dm9pZCAwLGQ9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxwXSxbWyJBTSIsIlBNIl0scCxwXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxwLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxwLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIscCwiezF9ICdhdCcgezB9IixwXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIiQiLCJVUyBEb2xsYXIiLHt9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5hYnModCkpLG49dC50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWUmJjA9PT1uPzE6NX1dLG09e30seT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Llplcm89MF09Ilplcm8iLHRbdC5PbmU9MV09Ik9uZSIsdFt0LlR3bz0yXT0iVHdvIix0W3QuRmV3PTNdPSJGZXciLHRbdC5NYW55PTRdPSJNYW55Iix0W3QuT3RoZXI9NV09Ik90aGVyIix0fSh7fSksZz1uZXcgci5wKCJVc2VWNFBsdXJhbHMiKSx2PWZ1bmN0aW9uKCl7fSxiPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIubG9jYWxlPWUsci5kZXByZWNhdGVkUGx1cmFsRm49bixyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFBsdXJhbENhdGVnb3J5PWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuZGVwcmVjYXRlZFBsdXJhbEZuP3RoaXMuZGVwcmVjYXRlZFBsdXJhbEZuKGV8fHRoaXMubG9jYWxlLHQpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksbj1tW2VdO2lmKG4pcmV0dXJuIG47dmFyIHI9ZS5zcGxpdCgiLSIpWzBdO2lmKG49bVtyXSlyZXR1cm4gbjtpZigiZW4iPT09cilyZXR1cm4gZDt0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgIicrdCsnIi4nKX0odClbMThdfShlfHx0aGlzLmxvY2FsZSkodCkpe2Nhc2UgeS5aZXJvOnJldHVybiJ6ZXJvIjtjYXNlIHkuT25lOnJldHVybiJvbmUiO2Nhc2UgeS5Ud286cmV0dXJuInR3byI7Y2FzZSB5LkZldzpyZXR1cm4iZmV3IjtjYXNlIHkuTWFueTpyZXR1cm4ibWFueSI7ZGVmYXVsdDpyZXR1cm4ib3RoZXIifX0sZX0odik7ZnVuY3Rpb24gXyh0LGUpe2U9ZW5jb2RlVVJJQ29tcG9uZW50KGUpO3RyeXtmb3IodmFyIG49T2JqZWN0KGkuZSkodC5zcGxpdCgiOyIpKSxyPW4ubmV4dCgpOyFyLmRvbmU7cj1uLm5leHQoKSl7dmFyIG89ci52YWx1ZSxhPW8uaW5kZXhPZigiPSIpLHM9T2JqZWN0KGkuYykoLTE9PWE/W28sIiJdOltvLnNsaWNlKDAsYSksby5zbGljZShhKzEpXSwyKSxsPXNbMV07aWYoc1swXS50cmltKCk9PT1lKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9fWNhdGNoKHQpe3U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihjPW4ucmV0dXJuKSYmYy5jYWxsKG4pfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgdSxjfXZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9dCx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9ZSx0aGlzLl9uZ0VsPW4sdGhpcy5fcmVuZGVyZXI9cix0aGlzLl9pbml0aWFsQ2xhc3Nlcz1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJrbGFzcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pbml0aWFsQ2xhc3Nlcz0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgvXHMrLyk6W10sdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgvXHMrLyk6dCx0aGlzLl9yYXdDbGFzcyYmKE9iamVjdChyLlRhKSh0aGlzLl9yYXdDbGFzcyk/dGhpcy5faXRlcmFibGVEaWZmZXI9dGhpcy5faXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpOnRoaXMuX2tleVZhbHVlRGlmZmVyPXRoaXMuX2tleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5faXRlcmFibGVEaWZmZXIpe3ZhciB0PXRoaXMuX2l0ZXJhYmxlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO3QmJnRoaXMuX2FwcGx5SXRlcmFibGVDaGFuZ2VzKHQpfWVsc2UgaWYodGhpcy5fa2V5VmFsdWVEaWZmZXIpe3ZhciBlPXRoaXMuX2tleVZhbHVlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO2UmJnRoaXMuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzKGUpfX0sdC5wcm90b3R5cGUuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7dC5wcmV2aW91c1ZhbHVlJiZlLl90b2dnbGVDbGFzcyh0LmtleSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5SXRlcmFibGVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5pdGVtKXRocm93IG5ldyBFcnJvcigiTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAiK09iamVjdChyLmhiKSh0Lml0ZW0pKTtlLl90b2dnbGVDbGFzcyh0Lml0ZW0sITApfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5Q2xhc3Nlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgU2V0P3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMCl9KTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl90b2dnbGVDbGFzcyhuLCEhdFtuXSl9KSl9LHQucHJvdG90eXBlLl9yZW1vdmVDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCExKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSkpfSx0LnByb3RvdHlwZS5fdG9nZ2xlQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzOyh0PXQudHJpbSgpKSYmdC5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24odCl7ZT9uLl9yZW5kZXJlci5hZGRDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCk6bi5fcmVuZGVyZXIucmVtb3ZlQ2xhc3Mobi5fbmdFbC5uYXRpdmVFbGVtZW50LHQpfSl9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy4kaW1wbGljaXQ9dCx0aGlzLm5nRm9yT2Y9ZSx0aGlzLmluZGV4PW4sdGhpcy5jb3VudD1yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibGFzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5jb3VudC0xfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXZlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvZGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ldmVufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl90ZW1wbGF0ZT1lLHRoaXMuX2RpZmZlcnM9bix0aGlzLl9kaWZmZXI9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRyYWNrQnkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KHIuWSkoKSYmbnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJ0cmFja0J5IG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkrIi4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkvY29tbW9uL2luZGV4L05nRm9yLWRpcmVjdGl2ZS5odG1sIyEjY2hhbmdlLXByb3BhZ2F0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpLHRoaXMuX3RyYWNrQnlGbj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdGb3JUZW1wbGF0ZSIse3NldDpmdW5jdGlvbih0KXt0JiYodGhpcy5fdGVtcGxhdGU9dCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7aWYoIm5nRm9yT2YiaW4gdCl7dmFyIGU9dC5uZ0Zvck9mLmN1cnJlbnRWYWx1ZTtpZighdGhpcy5fZGlmZmVyJiZlKXRyeXt0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIitlKyInIG9mIHR5cGUgJyIrKChuPWUpLm5hbWV8fHR5cGVvZiBuKSsiJy4gTmdGb3Igb25seSBzdXBwb3J0cyBiaW5kaW5nIHRvIEl0ZXJhYmxlcyBzdWNoIGFzIEFycmF5cy4iKX19dmFyIG59LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe2lmKHRoaXMuX2RpZmZlcil7dmFyIHQ9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5uZ0Zvck9mKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTt0LmZvckVhY2hPcGVyYXRpb24oZnVuY3Rpb24odCxyLGkpe2lmKG51bGw9PXQucHJldmlvdXNJbmRleCl7dmFyIG89ZS5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZS5fdGVtcGxhdGUsbmV3IHgobnVsbCxlLm5nRm9yT2YsLTEsLTEpLGkpLGE9bmV3IEUodCxvKTtuLnB1c2goYSl9ZWxzZSBudWxsPT1pP2UuX3ZpZXdDb250YWluZXIucmVtb3ZlKHIpOihvPWUuX3ZpZXdDb250YWluZXIuZ2V0KHIpLGUuX3ZpZXdDb250YWluZXIubW92ZShvLGkpLGE9bmV3IEUodCxvKSxuLnB1c2goYSkpfSk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspdGhpcy5fcGVyVmlld0NoYW5nZShuW3JdLnZpZXcsbltyXS5yZWNvcmQpO3I9MDtmb3IodmFyIGk9dGhpcy5fdmlld0NvbnRhaW5lci5sZW5ndGg7cjxpO3IrKyl7dmFyIG89dGhpcy5fdmlld0NvbnRhaW5lci5nZXQocik7by5jb250ZXh0LmluZGV4PXIsby5jb250ZXh0LmNvdW50PWl9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7ZS5fdmlld0NvbnRhaW5lci5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX0pfSx0LnByb3RvdHlwZS5fcGVyVmlld0NoYW5nZT1mdW5jdGlvbih0LGUpe3QuY29udGV4dC4kaW1wbGljaXQ9ZS5pdGVtfSx0fSgpLEU9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl9jb250ZXh0PW5ldyBTLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj10LHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZUaGVuIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZFbHNlIix7c2V0OmZ1bmN0aW9uKHQpe2soIm5nSWZFbHNlIix0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdXBkYXRlVmlldz1mdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX0sdH0oKSxTPWZ1bmN0aW9uKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH07ZnVuY3Rpb24gayh0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICciK09iamVjdChyLmhiKShlKSsiJy4iKX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2RpZmZlcnM9dCx0aGlzLl9uZ0VsPWUsdGhpcy5fcmVuZGVyZXI9bn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ1N0eWxlIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX25nU3R5bGU9dCwhdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LG51bGwpfSksdC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpfSl9LHQucHJvdG90eXBlLl9zZXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChpLmMpKHQuc3BsaXQoIi4iKSwyKSxyPW5bMF0sbz1uWzFdO251bGwhPShlPW51bGwhPWUmJm8/IiIrZStvOmUpP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyLGUpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0sdH0oKSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6ZnVuY3Rpb24odCl7dGhyb3cgdH19KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHR9KCksQT1uZXcoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVTdWJzY3JpcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aGVuKGUsZnVuY3Rpb24odCl7dGhyb3cgdH0pfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe30sdH0oKSksaj1uZXcgUCxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWY9dCx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpfSx0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29iaj90IT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0odCkpOnRoaXMuX2xhdGVzdFZhbHVlPT09dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT90aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlOih0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHIuUi53cmFwKHRoaXMuX2xhdGVzdFZhbHVlKSk6KHQmJnRoaXMuX3N1YnNjcmliZSh0KSx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHRoaXMuX2xhdGVzdFZhbHVlKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCxmdW5jdGlvbihuKXtyZXR1cm4gZS5fdXBkYXRlTGF0ZXN0VmFsdWUodCxuKX0pfSx0LnByb3RvdHlwZS5fc2VsZWN0U3RyYXRlZ3k9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0KHIuVmEpKGUpKXJldHVybiBBO2lmKE9iamVjdChyLlVhKShlKSlyZXR1cm4gajt0aHJvdyBuPXQsRXJyb3IoIkludmFsaWRQaXBlQXJndW1lbnQ6ICciK2UrIicgZm9yIHBpcGUgJyIrT2JqZWN0KHIuaGIpKG4pKyInIik7dmFyIG59LHQucHJvdG90eXBlLl9kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfSx0LnByb3RvdHlwZS5fdXBkYXRlTGF0ZXN0VmFsdWU9ZnVuY3Rpb24odCxlKXt0PT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfSx0fSgpLE09ZnVuY3Rpb24oKXt9LE49bmV3IHIucCgiRG9jdW1lbnRUb2tlbiIpLFI9ImJyb3dzZXIiLEQ9InNlcnZlciI7ZnVuY3Rpb24gRih0KXtyZXR1cm4gdD09PVJ9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdD09PUR9fSxKY1J2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJ4VGxhIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dFtyLmFdKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX19LEs5SWE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIHI9bigibXJTRyIpLGk9bigiNmJsRiIpLG89bigiRkZPbyIpLGE9bigicHVnVCIpLHM9bigiOGc4QSIpLGw9bigidU1hTyIpLHU9bigiTC9WOSIpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kZXN0aW5hdGlvbj1lLG59cmV0dXJuIHIuYihlLHQpLGV9KG8uYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLm9ic2VydmVycz1bXSxlLmNsb3NlZD0hMSxlLmlzU3RvcHBlZD0hMSxlLmhhc0Vycm9yPSExLGUudGhyb3duRXJyb3I9bnVsbCxlfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZVt1LmFdPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBoKHRoaXMsdGhpcyk7cmV0dXJuIGUub3BlcmF0b3I9dCxlfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7aWYoIXRoaXMuaXNTdG9wcGVkKWZvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGljZSgpLGk9MDtpPG47aSsrKXJbaV0ubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxpPTA7aTxuO2krKylyW2ldLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciB0PXRoaXMub2JzZXJ2ZXJzLGU9dC5sZW5ndGgsbj10LnNsaWNlKCkscj0wO3I8ZTtyKyspbltyXS5jb21wbGV0ZSgpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkPSEwLHRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPW51bGx9LGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxhLmEuRU1QVFkpOnRoaXMuaXNTdG9wcGVkPyh0LmNvbXBsZXRlKCksYS5hLkVNUFRZKToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxuZXcgbC5hKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgaS5hO3JldHVybiB0LnNvdXJjZT10aGlzLHR9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBoKHQsZSl9LGV9KGkuYSksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmRlc3RpbmF0aW9uPWUsci5zb3VyY2U9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5uZXh0JiZlLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb247ZSYmZS5lcnJvciYmdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uO3QmJnQuY29tcGxldGUmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHQpOmEuYS5FTVBUWX0sZX0oZil9LCJML1Y5IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigicnhTdWJzY3JpYmVyIik6IkBAcnhTdWJzY3JpYmVyIn0sTUdCUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShuKCJGRk9vIikuYSl9LE1jU286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sUFU4TDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiNmJsRiIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9bmV3IHIuYShmdW5jdGlvbihlKXtlLm5leHQodCksZS5jb21wbGV0ZSgpfSk7cmV0dXJuIGUuX2lzU2NhbGFyPSEwLGUudmFsdWU9dCxlfX0sUGhqbjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigicHNXMCIpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gT2JqZWN0KHIuYSkodCxlLDEpfX0sUzFuWDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPW4oIks5SWEiKSxvPW4oIjZibEYiKSxhPW4oIkZGT28iKSxzPW4oInB1Z1QiKTtmdW5jdGlvbiBsKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHUodCkpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jb25uZWN0YWJsZT10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25uZWN0YWJsZTtuLl9yZWZDb3VudCsrO3ZhciByPW5ldyBjKHQsbiksaT1lLnN1YnNjcmliZShyKTtyZXR1cm4gci5jbG9zZWR8fChyLmNvbm5lY3Rpb249bi5jb25uZWN0KCkpLGl9LHR9KCksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuY29ubmVjdGFibGU9bixyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbm5lY3RhYmxlO2lmKHQpe3RoaXMuY29ubmVjdGFibGU9bnVsbDt2YXIgZT10Ll9yZWZDb3VudDtpZihlPD0wKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2UgaWYodC5fcmVmQ291bnQ9ZS0xLGU+MSl0aGlzLmNvbm5lY3Rpb249bnVsbDtlbHNle3ZhciBuPXRoaXMuY29ubmVjdGlvbixyPXQuX2Nvbm5lY3Rpb247dGhpcy5jb25uZWN0aW9uPW51bGwsIXJ8fG4mJnIhPT1ufHxyLnVuc3Vic2NyaWJlKCl9fWVsc2UgdGhpcy5jb25uZWN0aW9uPW51bGx9LGV9KGEuYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnNvdXJjZT1lLHIuc3ViamVjdEZhY3Rvcnk9bixyLl9yZWZDb3VudD0wLHIuX2lzQ29tcGxldGU9ITEscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHQpfSxlLnByb3RvdHlwZS5nZXRTdWJqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4gdCYmIXQuaXNTdG9wcGVkfHwodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9LGUucHJvdG90eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb25uZWN0aW9uO3JldHVybiB0fHwodGhpcy5faXNDb21wbGV0ZT0hMSwodD10aGlzLl9jb25uZWN0aW9uPW5ldyBzLmEpLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUobmV3IHAodGhpcy5nZXRTdWJqZWN0KCksdGhpcykpKSx0LmNsb3NlZD8odGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9cy5hLkVNUFRZKTp0aGlzLl9jb25uZWN0aW9uPXQpLHR9LGUucHJvdG90eXBlLnJlZkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIGwoKSh0aGlzKX0sZX0oby5hKS5wcm90b3R5cGUsaD17b3BlcmF0b3I6e3ZhbHVlOm51bGx9LF9yZWZDb3VudDp7dmFsdWU6MCx3cml0YWJsZTohMH0sX3N1YmplY3Q6e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9jb25uZWN0aW9uOnt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSxfc3Vic2NyaWJlOnt2YWx1ZTpmLl9zdWJzY3JpYmV9LF9pc0NvbXBsZXRlOnt2YWx1ZTpmLl9pc0NvbXBsZXRlLHdyaXRhYmxlOiEwfSxnZXRTdWJqZWN0Ont2YWx1ZTpmLmdldFN1YmplY3R9LGNvbm5lY3Q6e3ZhbHVlOmYuY29ubmVjdH0scmVmQ291bnQ6e3ZhbHVlOmYucmVmQ291bnR9fSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5jb25uZWN0YWJsZT1uLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbihlKXt0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY29ubmVjdGFibGUuX2lzQ29tcGxldGU9ITAsdGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7dmFyIGU9dC5fY29ubmVjdGlvbjt0Ll9yZWZDb3VudD0wLHQuX3N1YmplY3Q9bnVsbCx0Ll9jb25uZWN0aW9uPW51bGwsZSYmZS51bnN1YnNjcmliZSgpfX0sZX0oaS5iKTtmdW5jdGlvbiBkKCl7cmV0dXJuIG5ldyBpLmF9ZnVuY3Rpb24gbSgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbCgpKChlPWQsZnVuY3Rpb24odCl7dmFyIG47bj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciByPU9iamVjdC5jcmVhdGUodCxoKTtyZXR1cm4gci5zb3VyY2U9dCxyLnN1YmplY3RGYWN0b3J5PW4scn0pKHQpKTt2YXIgZX19bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KX0sUzVYUTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigiREtUYiIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnRoZW4oZnVuY3Rpb24odCl7ZS5jbG9zZWR8fChlLm5leHQodCksZS5jb21wbGV0ZSgpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUuZXJyb3IodCl9KS50aGVuKG51bGwsci5hKSxlfX19LFR4amc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIlpuOEQiKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdChyLmEpKDEpfX0sIlZuRC8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBhKHQsZSkpfX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcmVkaWNhdGU9bixpLnRoaXNBcmc9cixpLmNvdW50PTAsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlfShpLmEpfSxaWUNpOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bigibXJTRyIpLGE9bigiMjZGVSIpLHM9bigiMC91USIpLGw9bigiRi9YTCIpLHU9bigiSzlJYSIpLGM9bigiNmJsRiIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSIpfHx0aGlzO3JldHVybiBuLm5hbWU9IkVtcHR5RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiBvLmIoZSx0KSxlfShFcnJvciksaD1uKCI2N1kvIikscD1uKCJwc1cwIiksZD1uKCJQaGpuIiksbT1uKCJWbkQvIikseT1uKCJGRk9vIiksZz1uKCJiN21XIiksdj1uKCJHNUoxIik7ZnVuY3Rpb24gYih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10P09iamVjdCh2LmIpKCk6ZS5saWZ0KG5ldyBfKHQpKX19dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudG90YWw9dCx0aGlzLnRvdGFsPDApdGhyb3cgbmV3IGcuYX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdyh0LHRoaXMudG90YWwpKX0sdH0oKSx3PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci50b3RhbD1uLHIucmluZz1uZXcgQXJyYXksci5jb3VudD0wLHJ9cmV0dXJuIG8uYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmluZyxuPXRoaXMudG90YWwscj10aGlzLmNvdW50Kys7ZS5sZW5ndGg8bj9lLnB1c2godCk6ZVtyJW5dPXR9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVzdGluYXRpb24sZT10aGlzLmNvdW50O2lmKGU+MClmb3IodmFyIG49dGhpcy5jb3VudD49dGhpcy50b3RhbD90aGlzLnRvdGFsOnRoaXMuY291bnQscj10aGlzLnJpbmcsaT0wO2k8bjtpKyspe3ZhciBvPWUrKyVuO3QubmV4dChyW29dKX10LmNvbXBsZXRlKCl9LGV9KHkuYSkseD1uKCJ4TXlFIiksQz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9RSksT2JqZWN0KHguYSkoe2hhc1ZhbHVlOiExLG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1ZhbHVlPSEwfSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc1ZhbHVlKXRocm93IHQoKX19KX07ZnVuY3Rpb24gRSgpe3JldHVybiBuZXcgZn1mdW5jdGlvbiBPKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBTKHQpKX19dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGsodCx0aGlzLmRlZmF1bHRWYWx1ZSkpfSx0fSgpLGs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmRlZmF1bHRWYWx1ZT1uLHIuaXNFbXB0eT0hMCxyfXJldHVybiBvLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmlzRW1wdHk9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkmJnRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfSh5LmEpLFQ9bigibUNoRiIpO2Z1bmN0aW9uIFAodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/T2JqZWN0KG0uYSkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KTpULmEsYigxKSxuP08oZSk6QyhmdW5jdGlvbigpe3JldHVybiBuZXcgZn0pKX19dmFyIEE9bigiOVoxRiIpO2Z1bmN0aW9uIGoodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgSSh0LGUsbikpfX12YXIgST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucHJlZGljYXRlPXQsdGhpcy50aGlzQXJnPWUsdGhpcy5zb3VyY2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgTSh0LHRoaXMucHJlZGljYXRlLHRoaXMudGhpc0FyZyx0aGlzLnNvdXJjZSkpfSx0fSgpLE09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5wcmVkaWNhdGU9bixvLnRoaXNBcmc9cixvLnNvdXJjZT1pLG8uaW5kZXg9MCxvLnRoaXNBcmc9cnx8byxvfXJldHVybiBvLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT0hMTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuaW5kZXgrKyx0aGlzLnNvdXJjZSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1lfHx0aGlzLm5vdGlmeUNvbXBsZXRlKCExKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5ub3RpZnlDb21wbGV0ZSghMCl9LGV9KHkuYSksTj1uKCJ0OWZaIik7ZnVuY3Rpb24gUih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9PYmplY3QobS5hKShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pOlQuYSxPYmplY3QoTi5hKSgxKSxuP08oZSk6QyhmdW5jdGlvbigpe3JldHVybiBuZXcgZn0pKX19dmFyIEQ9bigiWm44RCIpLEY9bigiVHhqZyIpO2Z1bmN0aW9uIEwodCxlKXt2YXIgbj0hMTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MiYmKG49ITApLGZ1bmN0aW9uKHIpe3JldHVybiByLmxpZnQobmV3IFYodCxlLG4pKX19dmFyIFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSksdGhpcy5hY2N1bXVsYXRvcj10LHRoaXMuc2VlZD1lLHRoaXMuaGFzU2VlZD1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBCKHQsdGhpcy5hY2N1bXVsYXRvcix0aGlzLnNlZWQsdGhpcy5oYXNTZWVkKSl9LHR9KCksQj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLmFjY3VtdWxhdG9yPW4sby5fc2VlZD1yLG8uaGFzU2VlZD1pLG8uaW5kZXg9MCxvfXJldHVybiBvLmIoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaGFzU2VlZD0hMCx0aGlzLl9zZWVkPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXNTZWVkKXJldHVybiB0aGlzLl90cnlOZXh0KHQpO3RoaXMuc2VlZD10LHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5hY2N1bXVsYXRvcih0aGlzLnNlZWQsdCxuKX1jYXRjaCh0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuc2VlZD1lLHRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oeS5hKSx6PW4oInkzQnkiKSxVPW4oIlpZanQiKTtuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gb259KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4gZG59KSxuLmQoZSwieiIsZnVuY3Rpb24oKXtyZXR1cm4gbW59KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4geW59KSxuLmQoZSwidiIsZnVuY3Rpb24oKXtyZXR1cm4gY259KSxuLmQoZSwidSIsZnVuY3Rpb24oKXtyZXR1cm4gdW59KSxuLmQoZSwieCIsZnVuY3Rpb24oKXtyZXR1cm4gcG59KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gc259KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gaG59KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gWWV9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gWGV9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gRGV9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gUWV9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gTGV9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gcm59KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gZ259KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gbG59KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gS2V9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZW59KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gdG59KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gSmV9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gbm59KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb2V9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gQmV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gVHR9KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4ga3R9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gb3R9KTt2YXIgSD1mdW5jdGlvbih0LGUpe3RoaXMuaWQ9dCx0aGlzLnVybD1lfSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dm9pZCAwPT09ciYmKHI9ImltcGVyYXRpdmUiKSx2b2lkIDA9PT1pJiYoaT1udWxsKTt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLm5hdmlnYXRpb25UcmlnZ2VyPXIsby5yZXN0b3JlZFN0YXRlPWksb31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uU3RhcnQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KEgpLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS51cmxBZnRlclJlZGlyZWN0cz1yLGl9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInKSJ9LGV9KEgpLEc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS5yZWFzb249cixpfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25DYW5jZWwoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KEgpLFk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS5lcnJvcj1yLGl9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvbkVycm9yKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgZXJyb3I6ICIrdGhpcy5lcnJvcisiKSJ9LGV9KEgpLFc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVzUmVjb2duaXplZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja1N0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBhLnVybEFmdGVyUmVkaXJlY3RzPXIsYS5zdGF0ZT1pLGEuc2hvdWxkQWN0aXZhdGU9byxhfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkd1YXJkc0NoZWNrRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIiwgc2hvdWxkQWN0aXZhdGU6ICIrdGhpcy5zaG91bGRBY3RpdmF0ZSsiKSJ9LGV9KEgpLFg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmVzb2x2ZVN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVFbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucm91dGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVDb25maWdMb2FkU3RhcnQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJvdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlQ29uZmlnTG9hZEVuZChwYXRoOiAiK3RoaXMucm91dGUucGF0aCsiKSJ9LHR9KCksZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2hpbGRBY3RpdmF0aW9uU3RhcnQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2hpbGRBY3RpdmF0aW9uRW5kKHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLHJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFjdGl2YXRpb25TdGFydChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxpdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBY3RpdmF0aW9uRW5kKHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLG90PWZ1bmN0aW9uKCl7fSxhdD0icHJpbWFyeSIsc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucGFyYW1zPXR8fHt9fXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGFyYW1zLmhhc093blByb3BlcnR5KHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXModCkpe3ZhciBlPXRoaXMucGFyYW1zW3RdO3JldHVybiBBcnJheS5pc0FycmF5KGUpP2VbMF06ZX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzKHQpKXt2YXIgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOltlXX1yZXR1cm5bXX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJrZXlzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIGx0KHQpe3JldHVybiBuZXcgc3QodCl9ZnVuY3Rpb24gdXQodCxlLG4pe3ZhciByPW4ucGF0aC5zcGxpdCgiLyIpO2lmKHIubGVuZ3RoPnQubGVuZ3RoKXJldHVybiBudWxsO2lmKCJmdWxsIj09PW4ucGF0aE1hdGNoJiYoZS5oYXNDaGlsZHJlbigpfHxyLmxlbmd0aDx0Lmxlbmd0aCkpcmV0dXJuIG51bGw7Zm9yKHZhciBpPXt9LG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGE9cltvXSxzPXRbb107aWYoYS5zdGFydHNXaXRoKCI6IikpaVthLnN1YnN0cmluZygxKV09cztlbHNlIGlmKGEhPT1zLnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOnQuc2xpY2UoMCxyLmxlbmd0aCkscG9zUGFyYW1zOml9fXZhciBjdD1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVzPXQsdGhpcy5tb2R1bGU9ZX07ZnVuY3Rpb24gZnQodCxlKXt2b2lkIDA9PT1lJiYoZT0iIik7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07aHQocixwdChlLHIpKX19ZnVuY3Rpb24gaHQodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IEVuY291bnRlcmVkIHVuZGVmaW5lZCByb3V0ZS5cbiAgICAgIFRoZSByZWFzb24gbWlnaHQgYmUgYW4gZXh0cmEgY29tbWEuXG5cbiAgICAgIEV4YW1wbGU6XG4gICAgICBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAgICAgICAgeyBwYXRoOiAnJywgcmVkaXJlY3RUbzogJy9kYXNoYm9hcmQnLCBwYXRoTWF0Y2g6ICdmdWxsJyB9LFxuICAgICAgICB7IHBhdGg6ICdkYXNoYm9hcmQnLCAgY29tcG9uZW50OiBEYXNoYm9hcmRDb21wb25lbnQgfSwsIDw8IHR3byBjb21tYXNcbiAgICAgICAgeyBwYXRoOiAnZGV0YWlsLzppZCcsIGNvbXBvbmVudDogSGVyb0RldGFpbENvbXBvbmVudCB9XG4gICAgICBdO1xuICAgICIpO2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogQXJyYXkgY2Fubm90IGJlIHNwZWNpZmllZCIpO2lmKCF0LmNvbXBvbmVudCYmIXQuY2hpbGRyZW4mJiF0LmxvYWRDaGlsZHJlbiYmdC5vdXRsZXQmJnQub3V0bGV0IT09YXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogYSBjb21wb25lbnRsZXNzIHJvdXRlIHdpdGhvdXQgY2hpbGRyZW4gb3IgbG9hZENoaWxkcmVuIGNhbm5vdCBoYXZlIGEgbmFtZWQgb3V0bGV0IHNldCIpO2lmKHQucmVkaXJlY3RUbyYmdC5jaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBjaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucmVkaXJlY3RUbyYmdC5sb2FkQ2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgbG9hZENoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5jaGlsZHJlbiYmdC5sb2FkQ2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogY2hpbGRyZW4gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucmVkaXJlY3RUbyYmdC5jb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgY29tcG9uZW50IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5wYXRoJiZ0Lm1hdGNoZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aCBhbmQgbWF0Y2hlciBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHZvaWQgMD09PXQucmVkaXJlY3RUbyYmIXQuY29tcG9uZW50JiYhdC5jaGlsZHJlbiYmIXQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIicuIE9uZSBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgcHJvdmlkZWQ6IGNvbXBvbmVudCwgcmVkaXJlY3RUbywgY2hpbGRyZW4gb3IgbG9hZENoaWxkcmVuIik7aWYodm9pZCAwPT09dC5wYXRoJiZ2b2lkIDA9PT10Lm1hdGNoZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcm91dGVzIG11c3QgaGF2ZSBlaXRoZXIgYSBwYXRoIG9yIGEgbWF0Y2hlciBzcGVjaWZpZWQiKTtpZigic3RyaW5nIj09dHlwZW9mIHQucGF0aCYmIi8iPT09dC5wYXRoLmNoYXJBdCgwKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoIGNhbm5vdCBzdGFydCB3aXRoIGEgc2xhc2giKTtpZigiIj09PXQucGF0aCYmdm9pZCAwIT09dC5yZWRpcmVjdFRvJiZ2b2lkIDA9PT10LnBhdGhNYXRjaCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAne3BhdGg6IFwiIitlKyciLCByZWRpcmVjdFRvOiAiJyt0LnJlZGlyZWN0VG8rIlwifSc6IHBsZWFzZSBwcm92aWRlICdwYXRoTWF0Y2gnLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAncGF0aE1hdGNoJyBpcyAncHJlZml4JywgYnV0IG9mdGVuIHRoZSBpbnRlbnQgaXMgdG8gdXNlICdmdWxsJy4iKTtpZih2b2lkIDAhPT10LnBhdGhNYXRjaCYmImZ1bGwiIT09dC5wYXRoTWF0Y2gmJiJwcmVmaXgiIT09dC5wYXRoTWF0Y2gpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aE1hdGNoIGNhbiBvbmx5IGJlIHNldCB0byAncHJlZml4JyBvciAnZnVsbCciKTt0LmNoaWxkcmVuJiZmdCh0LmNoaWxkcmVuLGUpfWZ1bmN0aW9uIHB0KHQsZSl7cmV0dXJuIGU/dHx8ZS5wYXRoP3QmJiFlLnBhdGg/dCsiLyI6IXQmJmUucGF0aD9lLnBhdGg6dCsiLyIrZS5wYXRoOiIiOnR9ZnVuY3Rpb24gZHQodCl7dmFyIGU9dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5tYXAoZHQpLG49ZT9PYmplY3Qoby5hKSh7fSx0LHtjaGlsZHJlbjplfSk6T2JqZWN0KG8uYSkoe30sdCk7cmV0dXJuIW4uY29tcG9uZW50JiYoZXx8bi5sb2FkQ2hpbGRyZW4pJiZuLm91dGxldCYmbi5vdXRsZXQhPT1hdCYmKG4uY29tcG9uZW50PW90KSxufWZ1bmN0aW9uIG10KHQsZSl7dmFyIG4scj1PYmplY3Qua2V5cyh0KSxpPU9iamVjdC5rZXlzKGUpO2lmKHIubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZih0W249cltvXV0hPT1lW25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHl0KHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpfWZ1bmN0aW9uIGd0KHQpe3JldHVybiB0Lmxlbmd0aD4wP3RbdC5sZW5ndGgtMV06bnVsbH1mdW5jdGlvbiB2dCh0LGUpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmUodFtuXSxuKX1mdW5jdGlvbiBidCh0KXtyZXR1cm4gdC5waXBlKE9iamVjdChELmEpKCksaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIE9iamVjdChpLlVhKSh0KT90Ok9iamVjdChpLlZhKSh0KT9PYmplY3Qocy5hKShQcm9taXNlLnJlc29sdmUodCkpOk9iamVjdChsLmEpKHQpfWZ1bmN0aW9uIHd0KHQsZSxuKXtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe3JldHVybiBtdCh0LGUpfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7aWYoIU90KGUuc2VnbWVudHMsbi5zZWdtZW50cykpcmV0dXJuITE7aWYoZS5udW1iZXJPZkNoaWxkcmVuIT09bi5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcih2YXIgciBpbiBuLmNoaWxkcmVuKXtpZighZS5jaGlsZHJlbltyXSlyZXR1cm4hMTtpZighdChlLmNoaWxkcmVuW3JdLG4uY2hpbGRyZW5bcl0pKXJldHVybiExfXJldHVybiEwfSh0LnJvb3QsZS5yb290KTpmdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5sZW5ndGg8PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmT2JqZWN0LmtleXMoZSkuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIGVbbl09PT10W25dfSl9KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcykmJmZ1bmN0aW9uIHQoZSxuKXtyZXR1cm4gZnVuY3Rpb24gZShuLHIsaSl7aWYobi5zZWdtZW50cy5sZW5ndGg+aS5sZW5ndGgpcmV0dXJuISFPdChhPW4uc2VnbWVudHMuc2xpY2UoMCxpLmxlbmd0aCksaSkmJiFyLmhhc0NoaWxkcmVuKCk7aWYobi5zZWdtZW50cy5sZW5ndGg9PT1pLmxlbmd0aCl7aWYoIU90KG4uc2VnbWVudHMsaSkpcmV0dXJuITE7Zm9yKHZhciBvIGluIHIuY2hpbGRyZW4pe2lmKCFuLmNoaWxkcmVuW29dKXJldHVybiExO2lmKCF0KG4uY2hpbGRyZW5bb10sci5jaGlsZHJlbltvXSkpcmV0dXJuITF9cmV0dXJuITB9dmFyIGE9aS5zbGljZSgwLG4uc2VnbWVudHMubGVuZ3RoKSxzPWkuc2xpY2Uobi5zZWdtZW50cy5sZW5ndGgpO3JldHVybiEhT3Qobi5zZWdtZW50cyxhKSYmISFuLmNoaWxkcmVuW2F0XSYmZShuLmNoaWxkcmVuW2F0XSxyLHMpfShlLG4sbi5zZWdtZW50cyl9KHQucm9vdCxlLnJvb3QpfXZhciB4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucm9vdD10LHRoaXMucXVlcnlQYXJhbXM9ZSx0aGlzLmZyYWdtZW50PW59cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD1sdCh0aGlzLnF1ZXJ5UGFyYW1zKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBQdC5zZXJpYWxpemUodGhpcyl9LHR9KCksQ3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLnNlZ21lbnRzPXQsdGhpcy5jaGlsZHJlbj1lLHRoaXMucGFyZW50PW51bGwsdnQoZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LnBhcmVudD1ufSl9cmV0dXJuIHQucHJvdG90eXBlLmhhc0NoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtYmVyT2ZDaGlsZHJlbj4wfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm51bWJlck9mQ2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEF0KHRoaXMpfSx0fSgpLEV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucGF0aD10LHRoaXMucGFyYW1ldGVycz1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtZXRlck1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9bHQodGhpcy5wYXJhbWV0ZXJzKSksdGhpcy5fcGFyYW1ldGVyTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIER0KHRoaXMpfSx0fSgpO2Z1bmN0aW9uIE90KHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5wYXRoPT09ZVtuXS5wYXRofSl9ZnVuY3Rpb24gU3QodCxlKXt2YXIgbj1bXTtyZXR1cm4gdnQodC5jaGlsZHJlbixmdW5jdGlvbih0LHIpe3I9PT1hdCYmKG49bi5jb25jYXQoZSh0LHIpKSl9KSx2dCh0LmNoaWxkcmVuLGZ1bmN0aW9uKHQscil7ciE9PWF0JiYobj1uLmNvbmNhdChlKHQscikpKX0pLG59dmFyIGt0PWZ1bmN0aW9uKCl7fSxUdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB6dCh0KTtyZXR1cm4gbmV3IHh0KGUucGFyc2VSb290U2VnbWVudCgpLGUucGFyc2VRdWVyeVBhcmFtcygpLGUucGFyc2VGcmFnbWVudCgpKX0sdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlLG47cmV0dXJuIi8iK2Z1bmN0aW9uIHQoZSxuKXtpZighZS5oYXNDaGlsZHJlbigpKXJldHVybiBBdChlKTtpZihuKXt2YXIgcj1lLmNoaWxkcmVuW2F0XT90KGUuY2hpbGRyZW5bYXRdLCExKToiIixpPVtdO3JldHVybiB2dChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbil7biE9PWF0JiZpLnB1c2gobisiOiIrdChlLCExKSl9KSxpLmxlbmd0aD4wP3IrIigiK2kuam9pbigiLy8iKSsiKSI6cn12YXIgbz1TdChlLGZ1bmN0aW9uKG4scil7cmV0dXJuIHI9PT1hdD9bdChlLmNoaWxkcmVuW2F0XSwhMSldOltyKyI6Iit0KG4sITEpXX0pO3JldHVybiBBdChlKSsiLygiK28uam9pbigiLy8iKSsiKSJ9KHQucm9vdCwhMCkrKGU9dC5xdWVyeVBhcmFtcywobj1PYmplY3Qua2V5cyhlKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49ZVt0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gSXQodCkrIj0iK0l0KGUpfSkuam9pbigiJiIpOkl0KHQpKyI9IitJdChuKX0pKS5sZW5ndGg/Ij8iK24uam9pbigiJiIpOiIiKSsoInN0cmluZyI9PXR5cGVvZiB0LmZyYWdtZW50PyIjIitlbmNvZGVVUkkodC5mcmFnbWVudCk6IiIpfSx0fSgpLFB0PW5ldyBUdDtmdW5jdGlvbiBBdCh0KXtyZXR1cm4gdC5zZWdtZW50cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIER0KHQpfSkuam9pbigiLyIpfWZ1bmN0aW9uIGp0KHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2csIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiBqdCh0KS5yZXBsYWNlKC8lM0IvZ2ksIjsiKX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4ganQodCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gTnQodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gTnQodC5yZXBsYWNlKC9cKy9nLCIlMjAiKSl9ZnVuY3Rpb24gRHQodCl7cmV0dXJuIiIrTXQodC5wYXRoKSsoZT10LnBhcmFtZXRlcnMsT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiI7IitNdCh0KSsiPSIrTXQoZVt0XSl9KS5qb2luKCIiKSk7dmFyIGV9dmFyIEZ0PS9eW15cLygpPzs9I10rLztmdW5jdGlvbiBMdCh0KXt2YXIgZT10Lm1hdGNoKEZ0KTtyZXR1cm4gZT9lWzBdOiIifXZhciBWdD0vXltePT8mI10rLyxCdD0vXltePyYjXSsvLHp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnVybD10LHRoaXMucmVtYWluaW5nPXR9cmV0dXJuIHQucHJvdG90eXBlLnBhcnNlUm9vdFNlZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgQ3QoW10se30pOm5ldyBDdChbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9LHQucHJvdG90eXBlLnBhcnNlUXVlcnlQYXJhbXM9ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPyIpKWRve3RoaXMucGFyc2VRdWVyeVBhcmFtKHQpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsKCImIikpO3JldHVybiB0fSx0LnByb3RvdHlwZS5wYXJzZUZyYWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfSx0LnByb3RvdHlwZS5wYXJzZUNoaWxkcmVuPWZ1bmN0aW9uKCl7aWYoIiI9PT10aGlzLnJlbWFpbmluZylyZXR1cm57fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpO3ZhciB0PVtdO2Zvcih0aGlzLnBlZWtTdGFydHNXaXRoKCIoIil8fHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKTspdGhpcy5jYXB0dXJlKCIvIiksdC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3ZhciBlPXt9O3RoaXMucGVla1N0YXJ0c1dpdGgoIi8oIikmJih0aGlzLmNhcHR1cmUoIi8iKSxlPXRoaXMucGFyc2VQYXJlbnMoITApKTt2YXIgbj17fTtyZXR1cm4gdGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpJiYobj10aGlzLnBhcnNlUGFyZW5zKCExKSksKHQubGVuZ3RoPjB8fE9iamVjdC5rZXlzKGUpLmxlbmd0aD4wKSYmKG5bYXRdPW5ldyBDdCh0LGUpKSxufSx0LnByb3RvdHlwZS5wYXJzZVNlZ21lbnQ9ZnVuY3Rpb24oKXt2YXIgdD1MdCh0aGlzLnJlbWFpbmluZyk7aWYoIiI9PT10JiZ0aGlzLnBlZWtTdGFydHNXaXRoKCI7IikpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBwYXRoIHVybCBzZWdtZW50IGNhbm5vdCBoYXZlIHBhcmFtZXRlcnM6ICciK3RoaXMucmVtYWluaW5nKyInLiIpO3JldHVybiB0aGlzLmNhcHR1cmUodCksbmV3IEV0KE50KHQpLHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKSl9LHQucHJvdG90eXBlLnBhcnNlTWF0cml4UGFyYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCI7Iik7KXRoaXMucGFyc2VQYXJhbSh0KTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VQYXJhbT1mdW5jdGlvbih0KXt2YXIgZT1MdCh0aGlzLnJlbWFpbmluZyk7aWYoZSl7dGhpcy5jYXB0dXJlKGUpO3ZhciBuPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciByPUx0KHRoaXMucmVtYWluaW5nKTtyJiZ0aGlzLmNhcHR1cmUobj1yKX10W050KGUpXT1OdChuKX19LHQucHJvdG90eXBlLnBhcnNlUXVlcnlQYXJhbT1mdW5jdGlvbih0KXt2YXIgZSxuPShlPXRoaXMucmVtYWluaW5nLm1hdGNoKFZ0KSk/ZVswXToiIjtpZihuKXt0aGlzLmNhcHR1cmUobik7dmFyIHI9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChCdCk7cmV0dXJuIGU/ZVswXToiIn0odGhpcy5yZW1haW5pbmcpO2kmJnRoaXMuY2FwdHVyZShyPWkpfXZhciBvPVJ0KG4pLGE9UnQocik7aWYodC5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIHM9dFtvXTtBcnJheS5pc0FycmF5KHMpfHwodFtvXT1zPVtzXSkscy5wdXNoKGEpfWVsc2UgdFtvXT1hfX0sdC5wcm90b3R5cGUucGFyc2VQYXJlbnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe3ZhciBuPUx0KHRoaXMucmVtYWluaW5nKSxyPXRoaXMucmVtYWluaW5nW24ubGVuZ3RoXTtpZigiLyIhPT1yJiYiKSIhPT1yJiYiOyIhPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBhcnNlIHVybCAnIit0aGlzLnVybCsiJyIpO3ZhciBpPXZvaWQgMDtuLmluZGV4T2YoIjoiKT4tMT8oaT1uLnN1YnN0cigwLG4uaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoaSksdGhpcy5jYXB0dXJlKCI6IikpOnQmJihpPWF0KTt2YXIgbz10aGlzLnBhcnNlQ2hpbGRyZW4oKTtlW2ldPTE9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGg/b1thdF06bmV3IEN0KFtdLG8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBlfSx0LnByb3RvdHlwZS5wZWVrU3RhcnRzV2l0aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aCh0KX0sdC5wcm90b3R5cGUuY29uc3VtZU9wdGlvbmFsPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aCh0KSYmKHRoaXMucmVtYWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyh0Lmxlbmd0aCksITApfSx0LnByb3RvdHlwZS5jYXB0dXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmNvbnN1bWVPcHRpb25hbCh0KSl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICInK3QrJyIuJyl9LHR9KCksVXQ9ZnVuY3Rpb24odCl7dGhpcy5zZWdtZW50R3JvdXA9dHx8bnVsbH0sSHQ9ZnVuY3Rpb24odCl7dGhpcy51cmxUcmVlPXR9O2Z1bmN0aW9uIFF0KHQpe3JldHVybiBuZXcgYy5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBVdCh0KSl9KX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgSHQodCkpfSl9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIG5ldyBjLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEVycm9yKCJPbmx5IGFic29sdXRlIHJlZGlyZWN0cyBjYW4gaGF2ZSBuYW1lZCBvdXRsZXRzLiByZWRpcmVjdFRvOiAnIit0KyInIikpfSl9dmFyIFl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8pe3RoaXMuY29uZmlnTG9hZGVyPWUsdGhpcy51cmxTZXJpYWxpemVyPW4sdGhpcy51cmxUcmVlPXIsdGhpcy5jb25maWc9byx0aGlzLmFsbG93UmVkaXJlY3RzPSEwLHRoaXMubmdNb2R1bGU9dC5nZXQoaS53KX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHRoaXMudXJsVHJlZS5yb290LGF0KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNyZWF0ZVVybFRyZWUoZSx0LnVybFRyZWUucXVlcnlQYXJhbXMsdC51cmxUcmVlLmZyYWdtZW50KX0pKS5waXBlKE9iamVjdChBLmEpKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBIdClyZXR1cm4gdC5hbGxvd1JlZGlyZWN0cz0hMSx0Lm1hdGNoKGUudXJsVHJlZSk7aWYoZSBpbnN0YW5jZW9mIFV0KXRocm93IHQubm9NYXRjaEVycm9yKGUpO3Rocm93IGV9KSl9LHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuZXhwYW5kU2VnbWVudEdyb3VwKHRoaXMubmdNb2R1bGUsdGhpcy5jb25maWcsdC5yb290LGF0KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG4pe3JldHVybiBlLmNyZWF0ZVVybFRyZWUobix0LnF1ZXJ5UGFyYW1zLHQuZnJhZ21lbnQpfSkpLnBpcGUoT2JqZWN0KEEuYSkoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFV0KXRocm93IGUubm9NYXRjaEVycm9yKHQpO3Rocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTWF0Y2hFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKCJDYW5ub3QgbWF0Y2ggYW55IHJvdXRlcy4gVVJMIFNlZ21lbnQ6ICciK3Quc2VnbWVudEdyb3VwKyInIil9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5zZWdtZW50cy5sZW5ndGg+MD9uZXcgQ3QoW10sKChyPXt9KVthdF09dCxyKSk6dDtyZXR1cm4gbmV3IHh0KGksZSxuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAwPT09bi5zZWdtZW50cy5sZW5ndGgmJm4uaGFzQ2hpbGRyZW4oKT90aGlzLmV4cGFuZENoaWxkcmVuKHQsZSxuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3QoW10sdCl9KSk6dGhpcy5leHBhbmRTZWdtZW50KHQsbixlLG4uc2VnbWVudHMsciwhMCl9LHQucHJvdG90eXBlLmV4cGFuZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3JldHVybiBmdW5jdGlvbihuLGkpe2lmKDA9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGgpcmV0dXJuIE9iamVjdChsLmEpKHt9KTt2YXIgbz1bXSxhPVtdLHM9e307cmV0dXJuIHZ0KG4sZnVuY3Rpb24obixpKXt2YXIgbCx1LGM9KGw9aSx1PW4sci5leHBhbmRTZWdtZW50R3JvdXAodCxlLHUsbCkpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIHNbaV09dH0pKTtpPT09YXQ/by5wdXNoKGMpOmEucHVzaChjKX0pLGwuYS5hcHBseShudWxsLG8uY29uY2F0KGEpKS5waXBlKE9iamVjdChGLmEpKCksUCgpLE9iamVjdChoLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSl9KG4uY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgcz10aGlzO3JldHVybiBsLmEuYXBwbHkodm9pZCAwLE9iamVjdChvLmQpKG4pKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG8pe3JldHVybiBzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGUodCxlLG4sbyxyLGksYSkucGlwZShPYmplY3QoQS5hKShmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVXQpcmV0dXJuIE9iamVjdChsLmEpKG51bGwpO3Rocm93IHR9KSl9KSxPYmplY3QoRi5hKSgpLFIoZnVuY3Rpb24odCl7cmV0dXJuISF0fSksT2JqZWN0KEEuYSkoZnVuY3Rpb24odCxuKXtpZih0IGluc3RhbmNlb2YgZnx8IkVtcHR5RXJyb3IiPT09dC5uYW1lKXtpZihzLm5vTGVmdG92ZXJzSW5VcmwoZSxyLGkpKXJldHVybiBPYmplY3QobC5hKShuZXcgQ3QoW10se30pKTt0aHJvdyBuZXcgVXQoZSl9dGhyb3cgdH0pKX0sdC5wcm90b3R5cGUubm9MZWZ0b3ZlcnNJblVybD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLmxlbmd0aCYmIXQuY2hpbGRyZW5bbl19LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGU9ZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuIFh0KHIpIT09bz9RdChlKTp2b2lkIDA9PT1yLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUodCxlLHIsaSk6YSYmdGhpcy5hbGxvd1JlZGlyZWN0cz90aGlzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQsZSxuLHIsaSxvKTpRdChlKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybiIqKiI9PT1yLnBhdGg/dGhpcy5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQsbixyLG8pOnRoaXMuZXhwYW5kUmVndWxhclNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQsZSxuLHIsaSxvKX0sdC5wcm90b3R5cGUuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5hcHBseVJlZGlyZWN0Q29tbWFuZHMoW10sbi5yZWRpcmVjdFRvLHt9KTtyZXR1cm4gbi5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9xdChvKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhuLG8pLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24obil7dmFyIG89bmV3IEN0KG4se30pO3JldHVybiBpLmV4cGFuZFNlZ21lbnQodCxvLGUsbixyLCExKX0pKX0sdC5wcm90b3R5cGUuZXhwYW5kUmVndWxhclNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10aGlzLHM9V3QoZSxyLGkpLGw9cy5jb25zdW1lZFNlZ21lbnRzLHU9cy5sYXN0Q2hpbGQsYz1zLnBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzO2lmKCFzLm1hdGNoZWQpcmV0dXJuIFF0KGUpO3ZhciBmPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKGwsci5yZWRpcmVjdFRvLGMpO3JldHVybiByLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP3F0KGYpOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKHIsZikucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihyKXtyZXR1cm4gYS5leHBhbmRTZWdtZW50KHQsZSxuLHIuY29uY2F0KGkuc2xpY2UodSkpLG8sITEpfSkpfSx0LnByb3RvdHlwZS5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztpZigiKioiPT09bi5wYXRoKXJldHVybiBuLmxvYWRDaGlsZHJlbj90aGlzLmNvbmZpZ0xvYWRlci5sb2FkKHQuaW5qZWN0b3IsbikucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtyZXR1cm4gbi5fbG9hZGVkQ29uZmlnPXQsbmV3IEN0KHIse30pfSkpOk9iamVjdChsLmEpKG5ldyBDdChyLHt9KSk7dmFyIGE9V3QoZSxuLHIpLHM9YS5jb25zdW1lZFNlZ21lbnRzLHU9YS5sYXN0Q2hpbGQ7aWYoIWEubWF0Y2hlZClyZXR1cm4gUXQoZSk7dmFyIGM9ci5zbGljZSh1KTtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbmZpZyh0LG4pLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24odCl7dmFyIG49dC5tb2R1bGUscj10LnJvdXRlcyxhPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBuLmxlbmd0aD4wJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gS3QodCxlLG4pJiZYdChuKSE9PWF0fSl9KHQsbik/e3NlZ21lbnRHcm91cDpadChuZXcgQ3QoZSxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT17fTtpW2F0XT1lO3RyeXtmb3IodmFyIGE9T2JqZWN0KG8uZSkodCkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciBsPXMudmFsdWU7IiI9PT1sLnBhdGgmJlh0KGwpIT09YXQmJihpW1h0KGwpXT1uZXcgQ3QoW10se30pKX19Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKHI9YS5yZXR1cm4pJiZyLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBpfShyLG5ldyBDdChuLHQuY2hpbGRyZW4pKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09bi5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBLdCh0LGUsbil9KX0odCxuKT97c2VnbWVudEdyb3VwOlp0KG5ldyBDdCh0LnNlZ21lbnRzLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEscz17fTt0cnl7Zm9yKHZhciBsPU9iamVjdChvLmUpKG4pLHU9bC5uZXh0KCk7IXUuZG9uZTt1PWwubmV4dCgpKXt2YXIgYz11LnZhbHVlO0t0KHQsZSxjKSYmIXJbWHQoYyldJiYoc1tYdChjKV09bmV3IEN0KFtdLHt9KSl9fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihhPWwucmV0dXJuKSYmYS5jYWxsKGwpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gT2JqZWN0KG8uYSkoe30scixzKX0odCxuLHIsdC5jaGlsZHJlbikpKSxzbGljZWRTZWdtZW50czpufTp7c2VnbWVudEdyb3VwOnQsc2xpY2VkU2VnbWVudHM6bn19KGUscyxjLHIpLHU9YS5zZWdtZW50R3JvdXAsZj1hLnNsaWNlZFNlZ21lbnRzO3JldHVybiAwPT09Zi5sZW5ndGgmJnUuaGFzQ2hpbGRyZW4oKT9pLmV4cGFuZENoaWxkcmVuKG4scix1KS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3Qocyx0KX0pKTowPT09ci5sZW5ndGgmJjA9PT1mLmxlbmd0aD9PYmplY3QobC5hKShuZXcgQ3Qocyx7fSkpOmkuZXhwYW5kU2VnbWVudChuLHUscixmLGF0LCEwKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQ3Qocy5jb25jYXQodC5zZWdtZW50cyksdC5jaGlsZHJlbil9KSl9KSl9LHQucHJvdG90eXBlLmdldENoaWxkQ29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gZS5jaGlsZHJlbj9PYmplY3QobC5hKShuZXcgY3QoZS5jaGlsZHJlbix0KSk6ZS5sb2FkQ2hpbGRyZW4/dm9pZCAwIT09ZS5fbG9hZGVkQ29uZmlnP09iamVjdChsLmEpKGUuX2xvYWRlZENvbmZpZyk6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNhbkxvYWQ7cmV0dXJuIG4mJjAhPT1uLmxlbmd0aD9idChPYmplY3Qocy5hKShuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKG4pe3ZhciByPXQuZ2V0KG4pO3JldHVybiBfdChyLmNhbkxvYWQ/ci5jYW5Mb2FkKGUpOnIoZSkpfSkpKTpPYmplY3QobC5hKSghMCl9KHQuaW5qZWN0b3IsZSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihyKXtyZXR1cm4gcj9uLmNvbmZpZ0xvYWRlci5sb2FkKHQuaW5qZWN0b3IsZSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fbG9hZGVkQ29uZmlnPXQsdH0pKTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcigoKG49RXJyb3IoIk5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogQ2Fubm90IGxvYWQgY2hpbGRyZW4gYmVjYXVzZSB0aGUgZ3VhcmQgb2YgdGhlIHJvdXRlIFwicGF0aDogJyIrdC5wYXRoKyInXCIgcmV0dXJuZWQgZmFsc2UiKSkubmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I9ITAsbikpO3ZhciBufSl9KGUpfSkpOk9iamVjdChsLmEpKG5ldyBjdChbXSx0KSl9LHQucHJvdG90eXBlLmxpbmVyYWxpemVTZWdtZW50cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxyPWUucm9vdDs7KXtpZihuPW4uY29uY2F0KHIuc2VnbWVudHMpLDA9PT1yLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuIE9iamVjdChsLmEpKG4pO2lmKHIubnVtYmVyT2ZDaGlsZHJlbj4xfHwhci5jaGlsZHJlblthdF0pcmV0dXJuIEd0KHQucmVkaXJlY3RUbyk7cj1yLmNoaWxkcmVuW2F0XX19LHQucHJvdG90eXBlLmFwcGx5UmVkaXJlY3RDb21tYW5kcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuYXBwbHlSZWRpcmVjdENyZWF0cmVVcmxUcmVlKGUsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGUpLHQsbil9LHQucHJvdG90eXBlLmFwcGx5UmVkaXJlY3RDcmVhdHJlVXJsVHJlZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cCh0LGUucm9vdCxuLHIpO3JldHVybiBuZXcgeHQoaSx0aGlzLmNyZWF0ZVF1ZXJ5UGFyYW1zKGUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50KX0sdC5wcm90b3R5cGUuY3JlYXRlUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gdnQodCxmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5zdGFydHNXaXRoKCI6Iikpe3ZhciBpPXQuc3Vic3RyaW5nKDEpO25bcl09ZVtpXX1lbHNlIG5bcl09dH0pLG59LHQucHJvdG90eXBlLmNyZWF0ZVNlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5jcmVhdGVTZWdtZW50cyh0LGUuc2VnbWVudHMsbixyKSxhPXt9O3JldHVybiB2dChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbyl7YVtvXT1pLmNyZWF0ZVNlZ21lbnRHcm91cCh0LGUsbixyKX0pLG5ldyBDdChvLGEpfSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzO3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXRoLnN0YXJ0c1dpdGgoIjoiKT9pLmZpbmRQb3NQYXJhbSh0LGUscik6aS5maW5kT3JSZXR1cm4oZSxuKX0pfSx0LnByb3RvdHlwZS5maW5kUG9zUGFyYW09ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5bZS5wYXRoLnN1YnN0cmluZygxKV07aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVkaXJlY3QgdG8gJyIrdCsiJy4gQ2Fubm90IGZpbmQgJyIrZS5wYXRoKyInLiIpO3JldHVybiByfSx0LnByb3RvdHlwZS5maW5kT3JSZXR1cm49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9MDt0cnl7Zm9yKHZhciBhPU9iamVjdChvLmUpKGUpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgbD1zLnZhbHVlO2lmKGwucGF0aD09PXQucGF0aClyZXR1cm4gZS5zcGxpY2UoaSksbDtpKyt9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gdH0sdH0oKTtmdW5jdGlvbiBXdCh0LGUsbil7aWYoIiI9PT1lLnBhdGgpcmV0dXJuImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApP3ttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O3ZhciByPShlLm1hdGNoZXJ8fHV0KShuLHQsZSk7cmV0dXJuIHI/e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpyLmNvbnN1bWVkLGxhc3RDaGlsZDpyLmNvbnN1bWVkLmxlbmd0aCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpyLnBvc1BhcmFtc306e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX19ZnVuY3Rpb24gWnQodCl7aWYoMT09PXQubnVtYmVyT2ZDaGlsZHJlbiYmdC5jaGlsZHJlblthdF0pe3ZhciBlPXQuY2hpbGRyZW5bYXRdO3JldHVybiBuZXcgQ3QodC5zZWdtZW50cy5jb25jYXQoZS5zZWdtZW50cyksZS5jaGlsZHJlbil9cmV0dXJuIHR9ZnVuY3Rpb24gS3QodCxlLG4pe3JldHVybighKHQuaGFzQ2hpbGRyZW4oKXx8ZS5sZW5ndGg+MCl8fCJmdWxsIiE9PW4ucGF0aE1hdGNoKSYmIiI9PT1uLnBhdGgmJnZvaWQgMCE9PW4ucmVkaXJlY3RUb31mdW5jdGlvbiBYdCh0KXtyZXR1cm4gdC5vdXRsZXR8fGF0fXZhciAkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcm9vdD10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXRoRnJvbVJvb3QodCk7cmV0dXJuIGUubGVuZ3RoPjE/ZVtlLmxlbmd0aC0yXTpudWxsfSx0LnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXt2YXIgZT1KdCh0LHRoaXMuX3Jvb3QpO3JldHVybiBlP2UuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSk6W119LHQucHJvdG90eXBlLmZpcnN0Q2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9SnQodCx0aGlzLl9yb290KTtyZXR1cm4gZSYmZS5jaGlsZHJlbi5sZW5ndGg+MD9lLmNoaWxkcmVuWzBdLnZhbHVlOm51bGx9LHQucHJvdG90eXBlLnNpYmxpbmdzPWZ1bmN0aW9uKHQpe3ZhciBlPXRlKHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUubGVuZ3RoPDI/W106ZVtlLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fSl9LHQucHJvdG90eXBlLnBhdGhGcm9tUm9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdGUodCx0aGlzLl9yb290KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KX0sdH0oKTtmdW5jdGlvbiBKdCh0LGUpe2lmKHQ9PT1lLnZhbHVlKXJldHVybiBlO3RyeXtmb3IodmFyIG49T2JqZWN0KG8uZSkoZS5jaGlsZHJlbikscj1uLm5leHQoKTshci5kb25lO3I9bi5uZXh0KCkpe3ZhciBpPUp0KHQsci52YWx1ZSk7aWYoaSlyZXR1cm4gaX19Y2F0Y2godCl7YT17ZXJyb3I6dH19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKHM9bi5yZXR1cm4pJiZzLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBudWxsO3ZhciBhLHN9ZnVuY3Rpb24gdGUodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm5bZV07dHJ5e2Zvcih2YXIgbj1PYmplY3Qoby5lKShlLmNoaWxkcmVuKSxyPW4ubmV4dCgpOyFyLmRvbmU7cj1uLm5leHQoKSl7dmFyIGk9dGUodCxyLnZhbHVlKTtpZihpLmxlbmd0aClyZXR1cm4gaS51bnNoaWZ0KGUpLGl9fWNhdGNoKHQpe2E9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihzPW4ucmV0dXJuKSYmcy5jYWxsKG4pfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm5bXTt2YXIgYSxzfXZhciBlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5jaGlsZHJlbj1lfXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJUcmVlTm9kZSgiK3RoaXMudmFsdWUrIikifSx0fSgpO2Z1bmN0aW9uIG5lKHQpe3ZhciBlPXt9O3JldHVybiB0JiZ0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdC52YWx1ZS5vdXRsZXRdPXR9KSxlfXZhciByZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuc25hcHNob3Q9bix1ZShyLGUpLHJ9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwc2hvdC50b1N0cmluZygpfSxlfSgkdCk7ZnVuY3Rpb24gaWUodCxlKXt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBzZShbXSx7fSx7fSwiIix7fSxhdCxlLG51bGwsdC5yb290LC0xLHt9KTtyZXR1cm4gbmV3IGxlKCIiLG5ldyBlZShuLFtdKSl9KHQsZSkscj1uZXcgYS5hKFtuZXcgRXQoIiIse30pXSksaT1uZXcgYS5hKHt9KSxvPW5ldyBhLmEoe30pLHM9bmV3IGEuYSh7fSksbD1uZXcgYS5hKCIiKSx1PW5ldyBvZShyLGkscyxsLG8sYXQsZSxuLnJvb3QpO3JldHVybiB1LnNuYXBzaG90PW4ucm9vdCxuZXcgcmUobmV3IGVlKHUsW10pLG4pfXZhciBvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzKXt0aGlzLnVybD10LHRoaXMucGFyYW1zPWUsdGhpcy5xdWVyeVBhcmFtcz1uLHRoaXMuZnJhZ21lbnQ9cix0aGlzLmRhdGE9aSx0aGlzLm91dGxldD1vLHRoaXMuY29tcG9uZW50PWEsdGhpcy5fZnV0dXJlU25hcHNob3Q9c31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb3V0ZUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZ30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhdGhGcm9tUm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbU1hcHx8KHRoaXMuX3BhcmFtTWFwPXRoaXMucGFyYW1zLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIGx0KHQpfSkpKSx0aGlzLl9wYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dGhpcy5xdWVyeVBhcmFtcy5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBsdCh0KX0pKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKToiRnV0dXJlKCIrdGhpcy5fZnV0dXJlU25hcHNob3QrIikifSx0fSgpO2Z1bmN0aW9uIGFlKHQsZSl7dm9pZCAwPT09ZSYmKGU9ImVtcHR5T25seSIpO3ZhciBuPXQucGF0aEZyb21Sb290LHI9MDtpZigiYWx3YXlzIiE9PWUpZm9yKHI9bi5sZW5ndGgtMTtyPj0xOyl7dmFyIGk9bltyXSxhPW5bci0xXTtpZihpLnJvdXRlQ29uZmlnJiYiIj09PWkucm91dGVDb25maWcucGF0aClyLS07ZWxzZXtpZihhLmNvbXBvbmVudClicmVhaztyLS19fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm57cGFyYW1zOk9iamVjdChvLmEpKHt9LHQucGFyYW1zLGUucGFyYW1zKSxkYXRhOk9iamVjdChvLmEpKHt9LHQuZGF0YSxlLmRhdGEpLHJlc29sdmU6T2JqZWN0KG8uYSkoe30sdC5yZXNvbHZlLGUuX3Jlc29sdmVkRGF0YSl9fSx7cGFyYW1zOnt9LGRhdGE6e30scmVzb2x2ZTp7fX0pfShuLnNsaWNlKHIpKX12YXIgc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyxsLHUsYyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PXIsdGhpcy5kYXRhPWksdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMucm91dGVDb25maWc9cyx0aGlzLl91cmxTZWdtZW50PWwsdGhpcy5fbGFzdFBhdGhJbmRleD11LHRoaXMuX3Jlc29sdmU9Y31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1sdCh0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD1sdCh0aGlzLnF1ZXJ5UGFyYW1zKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZSh1cmw6JyIrdGhpcy51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIikrIicsIHBhdGg6JyIrKHRoaXMucm91dGVDb25maWc/dGhpcy5yb3V0ZUNvbmZpZy5wYXRoOiIiKSsiJykifSx0fSgpLGxlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxuKXx8dGhpcztyZXR1cm4gci51cmw9ZSx1ZShyLG4pLHJ9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2UodGhpcy5fcm9vdCl9LGV9KCR0KTtmdW5jdGlvbiB1ZSh0LGUpe2UudmFsdWUuX3JvdXRlclN0YXRlPXQsZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB1ZSh0LGUpfSl9ZnVuY3Rpb24gY2UodCl7dmFyIGU9dC5jaGlsZHJlbi5sZW5ndGg+MD8iIHsgIit0LmNoaWxkcmVuLm1hcChjZSkuam9pbigiLCAiKSsiIH0gIjoiIjtyZXR1cm4iIit0LnZhbHVlK2V9ZnVuY3Rpb24gZmUodCl7aWYodC5zbmFwc2hvdCl7dmFyIGU9dC5zbmFwc2hvdCxuPXQuX2Z1dHVyZVNuYXBzaG90O3Quc25hcHNob3Q9bixtdChlLnF1ZXJ5UGFyYW1zLG4ucXVlcnlQYXJhbXMpfHx0LnF1ZXJ5UGFyYW1zLm5leHQobi5xdWVyeVBhcmFtcyksZS5mcmFnbWVudCE9PW4uZnJhZ21lbnQmJnQuZnJhZ21lbnQubmV4dChuLmZyYWdtZW50KSxtdChlLnBhcmFtcyxuLnBhcmFtcyl8fHQucGFyYW1zLm5leHQobi5wYXJhbXMpLGZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbilpZighbXQodFtuXSxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH0oZS51cmwsbi51cmwpfHx0LnVybC5uZXh0KG4udXJsKSxtdChlLmRhdGEsbi5kYXRhKXx8dC5kYXRhLm5leHQobi5kYXRhKX1lbHNlIHQuc25hcHNob3Q9dC5fZnV0dXJlU25hcHNob3QsdC5kYXRhLm5leHQodC5fZnV0dXJlU25hcHNob3QuZGF0YSl9ZnVuY3Rpb24gaGUodCxlKXt2YXIgbixyO3JldHVybiBtdCh0LnBhcmFtcyxlLnBhcmFtcykmJk90KG49dC51cmwscj1lLnVybCkmJm4uZXZlcnkoZnVuY3Rpb24odCxlKXtyZXR1cm4gbXQodC5wYXJhbWV0ZXJzLHJbZV0ucGFyYW1ldGVycyl9KSYmISghdC5wYXJlbnQhPSFlLnBhcmVudCkmJighdC5wYXJlbnR8fGhlKHQucGFyZW50LGUucGFyZW50KSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiYhdC5vdXRsZXRzJiYhdC5zZWdtZW50UGF0aH1mdW5jdGlvbiBkZSh0LGUsbixyLGkpe3ZhciBvPXt9O3JldHVybiByJiZ2dChyLGZ1bmN0aW9uKHQsZSl7b1tlXT1BcnJheS5pc0FycmF5KHQpP3QubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIiK3R9KToiIit0fSksbmV3IHh0KG4ucm9vdD09PXQ/ZTpmdW5jdGlvbiB0KGUsbixyKXt2YXIgaT17fTtyZXR1cm4gdnQoZS5jaGlsZHJlbixmdW5jdGlvbihlLG8pe2lbb109ZT09PW4/cjp0KGUsbixyKX0pLG5ldyBDdChlLnNlZ21lbnRzLGkpfShuLnJvb3QsdCxlKSxvLGkpfXZhciBtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe2lmKHRoaXMuaXNBYnNvbHV0ZT10LHRoaXMubnVtYmVyT2ZEb3VibGVEb3RzPWUsdGhpcy5jb21tYW5kcz1uLHQmJm4ubGVuZ3RoPjAmJnBlKG5bMF0pKXRocm93IG5ldyBFcnJvcigiUm9vdCBzZWdtZW50IGNhbm5vdCBoYXZlIG1hdHJpeCBwYXJhbWV0ZXJzIik7dmFyIHI9bi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmdC5vdXRsZXRzfSk7aWYociYmciE9PWd0KG4pKXRocm93IG5ldyBFcnJvcigie291dGxldHM6e319IGhhcyB0byBiZSB0aGUgbGFzdCBjb21tYW5kIil9cmV0dXJuIHQucHJvdG90eXBlLnRvUm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfSx0fSgpLHllPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnNlZ21lbnRHcm91cD10LHRoaXMucHJvY2Vzc0NoaWxkcmVuPWUsdGhpcy5pbmRleD1ufTtmdW5jdGlvbiBnZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0cz90Lm91dGxldHNbYXRdOiIiK3R9ZnVuY3Rpb24gdmUodCxlLG4pe2lmKHR8fCh0PW5ldyBDdChbXSx7fSkpLDA9PT10LnNlZ21lbnRzLmxlbmd0aCYmdC5oYXNDaGlsZHJlbigpKXJldHVybiBiZSh0LGUsbik7dmFyIHI9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0wLGk9ZSxvPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6MH07aTx0LnNlZ21lbnRzLmxlbmd0aDspe2lmKHI+PW4ubGVuZ3RoKXJldHVybiBvO3ZhciBhPXQuc2VnbWVudHNbaV0scz1nZShuW3JdKSxsPXI8bi5sZW5ndGgtMT9uW3IrMV06bnVsbDtpZihpPjAmJnZvaWQgMD09PXMpYnJlYWs7aWYocyYmbCYmIm9iamVjdCI9PXR5cGVvZiBsJiZ2b2lkIDA9PT1sLm91dGxldHMpe2lmKCFDZShzLGwsYSkpcmV0dXJuIG87cis9Mn1lbHNle2lmKCFDZShzLHt9LGEpKXJldHVybiBvO3IrK31pKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDppLGNvbW1hbmRJbmRleDpyfX0odCxlLG4pLGk9bi5zbGljZShyLmNvbW1hbmRJbmRleCk7aWYoci5tYXRjaCYmci5wYXRoSW5kZXg8dC5zZWdtZW50cy5sZW5ndGgpe3ZhciBvPW5ldyBDdCh0LnNlZ21lbnRzLnNsaWNlKDAsci5wYXRoSW5kZXgpLHt9KTtyZXR1cm4gby5jaGlsZHJlblthdF09bmV3IEN0KHQuc2VnbWVudHMuc2xpY2Uoci5wYXRoSW5kZXgpLHQuY2hpbGRyZW4pLGJlKG8sMCxpKX1yZXR1cm4gci5tYXRjaCYmMD09PWkubGVuZ3RoP25ldyBDdCh0LnNlZ21lbnRzLHt9KTpyLm1hdGNoJiYhdC5oYXNDaGlsZHJlbigpP19lKHQsZSxuKTpyLm1hdGNoP2JlKHQsMCxpKTpfZSh0LGUsbil9ZnVuY3Rpb24gYmUodCxlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbmV3IEN0KHQuc2VnbWVudHMse30pO3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiIT10eXBlb2YgdFswXT8oKGU9e30pW2F0XT10LGUpOnZvaWQgMD09PXRbMF0ub3V0bGV0cz8oKG49e30pW2F0XT10LG4pOnRbMF0ub3V0bGV0czt2YXIgZSxufShuKSxpPXt9O3JldHVybiB2dChyLGZ1bmN0aW9uKG4scil7bnVsbCE9PW4mJihpW3JdPXZlKHQuY2hpbGRyZW5bcl0sZSxuKSl9KSx2dCh0LmNoaWxkcmVuLGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09cltlXSYmKGlbZV09dCl9KSxuZXcgQ3QodC5zZWdtZW50cyxpKX1mdW5jdGlvbiBfZSh0LGUsbil7Zm9yKHZhciByPXQuc2VnbWVudHMuc2xpY2UoMCxlKSxpPTA7aTxuLmxlbmd0aDspe2lmKCJvYmplY3QiPT10eXBlb2YgbltpXSYmdm9pZCAwIT09bltpXS5vdXRsZXRzKXt2YXIgbz13ZShuW2ldLm91dGxldHMpO3JldHVybiBuZXcgQ3QocixvKX1pZigwPT09aSYmcGUoblswXSkpci5wdXNoKG5ldyBFdCh0LnNlZ21lbnRzW2VdLnBhdGgsblswXSkpLGkrKztlbHNle3ZhciBhPWdlKG5baV0pLHM9aTxuLmxlbmd0aC0xP25baSsxXTpudWxsO2EmJnMmJnBlKHMpPyhyLnB1c2gobmV3IEV0KGEseGUocykpKSxpKz0yKTooci5wdXNoKG5ldyBFdChhLHt9KSksaSsrKX19cmV0dXJuIG5ldyBDdChyLHt9KX1mdW5jdGlvbiB3ZSh0KXt2YXIgZT17fTtyZXR1cm4gdnQodCxmdW5jdGlvbih0LG4pe251bGwhPT10JiYoZVtuXT1fZShuZXcgQ3QoW10se30pLDAsdCkpfSksZX1mdW5jdGlvbiB4ZSh0KXt2YXIgZT17fTtyZXR1cm4gdnQodCxmdW5jdGlvbih0LG4pe3JldHVybiBlW25dPSIiK3R9KSxlfWZ1bmN0aW9uIENlKHQsZSxuKXtyZXR1cm4gdD09bi5wYXRoJiZtdChlLG4ucGFyYW1ldGVycyl9dmFyIEVlPWZ1bmN0aW9uKHQpe3RoaXMucGF0aD10LHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19LE9lPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb21wb25lbnQ9dCx0aGlzLnJvdXRlPWV9LFNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLmZ1dHVyZT10LHRoaXMuY3Vycj1lLHRoaXMubW9kdWxlSW5qZWN0b3I9bix0aGlzLmZvcndhcmRFdmVudD1yLHRoaXMuY2FuQWN0aXZhdGVDaGVja3M9W10sdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzPVtdfXJldHVybiB0LnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnV0dXJlLl9yb290O3RoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKGUsdGhpcy5jdXJyP3RoaXMuY3Vyci5fcm9vdDpudWxsLHQsW2UudmFsdWVdKX0sdC5wcm90b3R5cGUuY2hlY2tHdWFyZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmlzRGVhY3RpdmF0aW5nKCl8fHRoaXMuaXNBY3RpdmF0aW5nKCk/dGhpcy5ydW5DYW5EZWFjdGl2YXRlQ2hlY2tzKCkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihlKXtyZXR1cm4gZT90LnJ1bkNhbkFjdGl2YXRlQ2hlY2tzKCk6T2JqZWN0KGwuYSkoITEpfSkpOk9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucmVzb2x2ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5pc0FjdGl2YXRpbmcoKT9PYmplY3Qocy5hKSh0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKG4pe3JldHVybiBlLnJ1blJlc29sdmUobi5yb3V0ZSx0KX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTI/ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdCh6LmEpKEwodCxlKSxiKDEpLE8oZSkpKG4pfTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHouYSkoTChmdW5jdGlvbihlLG4scil7cmV0dXJuIHQoZSxuLHIrMSl9KSxiKDEpKShlKX19KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KSk6T2JqZWN0KGwuYSkobnVsbCl9LHQucHJvdG90eXBlLmlzRGVhY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5pc0FjdGl2YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuY2FuQWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5zZXR1cENoaWxkUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtpLnNldHVwUm91dGVHdWFyZHModCxvW3QudmFsdWUub3V0bGV0XSxuLHIuY29uY2F0KFt0LnZhbHVlXSkpLGRlbGV0ZSBvW3QudmFsdWUub3V0bGV0XX0pLHZ0KG8sZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4uZ2V0Q29udGV4dChlKSl9KX0sdC5wcm90b3R5cGUuc2V0dXBSb3V0ZUd1YXJkcz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnZhbHVlLG89ZT9lLnZhbHVlOm51bGwsYT1uP24uZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk6bnVsbDtpZihvJiZpLnJvdXRlQ29uZmlnPT09by5yb3V0ZUNvbmZpZyl7dmFyIHM9dGhpcy5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnMobyxpLGkucm91dGVDb25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtzP3RoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgRWUocikpOihpLmRhdGE9by5kYXRhLGkuX3Jlc29sdmVkRGF0YT1vLl9yZXNvbHZlZERhdGEpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsZSxpLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLHIpLHMmJnRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBPZShhLm91dGxldC5jb21wb25lbnQsbykpfWVsc2UgbyYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLGEpLHRoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgRWUocikpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsbnVsbCxpLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLHIpfSx0LnByb3RvdHlwZS5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChuKXtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4haGUodCxlKXx8IW10KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcyk7Y2FzZSJwYXJhbXNDaGFuZ2UiOmRlZmF1bHQ6cmV0dXJuIWhlKHQsZSl9fSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uZSh0KSxpPXQudmFsdWU7dnQocixmdW5jdGlvbih0LHIpe24uZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxpLmNvbXBvbmVudD9lP2UuY2hpbGRyZW4uZ2V0Q29udGV4dChyKTpudWxsOmUpfSksdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IE9lKGkuY29tcG9uZW50JiZlJiZlLm91dGxldCYmZS5vdXRsZXQuaXNBY3RpdmF0ZWQ/ZS5vdXRsZXQuY29tcG9uZW50Om51bGwsaSkpfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gT2JqZWN0KHMuYSkodGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChwLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJ1bkNhbkRlYWN0aXZhdGUoZS5jb21wb25lbnQsZS5yb3V0ZSl9KSxqKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGVDaGVja3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBPYmplY3Qocy5hKSh0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzKS5waXBlKE9iamVjdChkLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBidChPYmplY3Qocy5hKShbdC5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZS5wYXJlbnQpLHQuZmlyZUFjdGl2YXRpb25TdGFydChlLnJvdXRlKSx0LnJ1bkNhbkFjdGl2YXRlQ2hpbGQoZS5wYXRoKSx0LnJ1bkNhbkFjdGl2YXRlKGUucm91dGUpXSkpfSksaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9LHQucHJvdG90eXBlLmZpcmVBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IHJ0KHQpKSxPYmplY3QobC5hKSghMCl9LHQucHJvdG90eXBlLmZpcmVDaGlsZEFjdGl2YXRpb25TdGFydD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQmJnRoaXMuZm9yd2FyZEV2ZW50JiZ0aGlzLmZvcndhcmRFdmVudChuZXcgZXQodCkpLE9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZTpudWxsO3JldHVybiBuJiYwIT09bi5sZW5ndGg/YnQoT2JqZWN0KHMuYSkobikucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihuKXt2YXIgcj1lLmdldFRva2VuKG4sdCk7cmV0dXJuIF90KHIuY2FuQWN0aXZhdGU/ci5jYW5BY3RpdmF0ZSh0LGUuZnV0dXJlKTpyKHQsZS5mdXR1cmUpKS5waXBlKFIoKSl9KSkpOk9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dFt0Lmxlbmd0aC0xXSxyPXQuc2xpY2UoMCx0Lmxlbmd0aC0xKS5yZXZlcnNlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmV4dHJhY3RDYW5BY3RpdmF0ZUNoaWxkKHQpfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dH0pO3JldHVybiBidChPYmplY3Qocy5hKShyKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBidChPYmplY3Qocy5hKSh0Lmd1YXJkcykucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihyKXt2YXIgaT1lLmdldFRva2VuKHIsdC5ub2RlKTtyZXR1cm4gX3QoaS5jYW5BY3RpdmF0ZUNoaWxkP2kuY2FuQWN0aXZhdGVDaGlsZChuLGUuZnV0dXJlKTppKG4sZS5mdXR1cmUpKS5waXBlKFIoKSl9KSkpfSkpKX0sdC5wcm90b3R5cGUuZXh0cmFjdENhbkFjdGl2YXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3V0ZUNvbmZpZz90LnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gZSYmMCE9PWUubGVuZ3RoP3tub2RlOnQsZ3VhcmRzOmV9Om51bGx9LHQucHJvdG90eXBlLnJ1bkNhbkRlYWN0aXZhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZSYmZS5yb3V0ZUNvbmZpZz9lLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGU6bnVsbDtyZXR1cm4gciYmMCE9PXIubGVuZ3RoP09iamVjdChzLmEpKHIpLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24ocil7dmFyIGk9bi5nZXRUb2tlbihyLGUpO3JldHVybiBfdChpLmNhbkRlYWN0aXZhdGU/aS5jYW5EZWFjdGl2YXRlKHQsZSxuLmN1cnIsbi5mdXR1cmUpOmkodCxlLG4uY3VycixuLmZ1dHVyZSkpLnBpcGUoUigpKX0pKS5waXBlKGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpOk9iamVjdChsLmEpKCEwKX0sdC5wcm90b3R5cGUucnVuUmVzb2x2ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlc29sdmVOb2RlKHQuX3Jlc29sdmUsdCkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihuKXtyZXR1cm4gdC5fcmVzb2x2ZWREYXRhPW4sdC5kYXRhPU9iamVjdChvLmEpKHt9LHQuZGF0YSxhZSh0LGUpLnJlc29sdmUpLG51bGx9KSl9LHQucHJvdG90eXBlLnJlc29sdmVOb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPU9iamVjdC5rZXlzKHQpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gT2JqZWN0KGwuYSkoe30pO2lmKDE9PT1yLmxlbmd0aCl7dmFyIGk9clswXTtyZXR1cm4gdGhpcy5nZXRSZXNvbHZlcih0W2ldLGUpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuKGU9e30pW2ldPXQsZTt2YXIgZX0pKX12YXIgbz17fTtyZXR1cm4gT2JqZWN0KHMuYSkocikucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihyKXtyZXR1cm4gbi5nZXRSZXNvbHZlcih0W3JdLGUpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7cmV0dXJuIG9bcl09dCx0fSkpfSkpLnBpcGUoUCgpLE9iamVjdChoLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSl9LHQucHJvdG90eXBlLmdldFJlc29sdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRUb2tlbih0LGUpO3JldHVybiBfdChuLnJlc29sdmU/bi5yZXNvbHZlKGUsdGhpcy5mdXR1cmUpOm4oZSx0aGlzLmZ1dHVyZSkpfSx0LnByb3RvdHlwZS5nZXRUb2tlbj1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudDtlO2U9ZS5wYXJlbnQpe3ZhciBuPWUucm91dGVDb25maWc7aWYobiYmbi5fbG9hZGVkQ29uZmlnKXJldHVybiBuLl9sb2FkZWRDb25maWd9cmV0dXJuIG51bGx9KGUpO3JldHVybihuP24ubW9kdWxlLmluamVjdG9yOnRoaXMubW9kdWxlSW5qZWN0b3IpLmdldCh0KX0sdH0oKSxrZT1mdW5jdGlvbigpe30sVGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMuY29uZmlnPWUsdGhpcy51cmxUcmVlPW4sdGhpcy51cmw9cix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9aX1yZXR1cm4gdC5wcm90b3R5cGUucmVjb2duaXplPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWplKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXAsZT10aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAodGhpcy5jb25maWcsdCxhdCksbj1uZXcgc2UoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZShPYmplY3Qoby5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQse30sYXQsdGhpcy5yb290Q29tcG9uZW50VHlwZSxudWxsLHRoaXMudXJsVHJlZS5yb290LC0xLHt9KSxyPW5ldyBlZShuLGUpLGk9bmV3IGxlKHRoaXMudXJsLHIpO3JldHVybiB0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGkuX3Jvb3QpLE9iamVjdChsLmEpKGkpfWNhdGNoKHQpe3JldHVybiBuZXcgYy5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKHQpfSl9fSx0LnByb3RvdHlwZS5pbmhlcml0UGFyYW1zQW5kRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC52YWx1ZSxyPWFlKG4sdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KTtuLnBhcmFtcz1PYmplY3QuZnJlZXplKHIucGFyYW1zKSxuLmRhdGE9T2JqZWN0LmZyZWV6ZShyLmRhdGEpLHQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmhlcml0UGFyYW1zQW5kRGF0YSh0KX0pfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUuc2VnbWVudHMubGVuZ3RoJiZlLmhhc0NoaWxkcmVuKCk/dGhpcy5wcm9jZXNzQ2hpbGRyZW4odCxlKTp0aGlzLnByb2Nlc3NTZWdtZW50KHQsZSxlLnNlZ21lbnRzLG4pfSx0LnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT1TdChlLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHIucHJvY2Vzc1NlZ21lbnRHcm91cCh0LGUsbil9KTtyZXR1cm4gbj17fSxpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9blt0LnZhbHVlLm91dGxldF07aWYoZSl7dmFyIHI9ZS51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIiksaT10LnZhbHVlLnVybC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoKX0pLmpvaW4oIi8iKTt0aHJvdyBuZXcgRXJyb3IoIlR3byBzZWdtZW50cyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBvdXRsZXQgbmFtZTogJyIrcisiJyBhbmQgJyIraSsiJy4iKX1uW3QudmFsdWUub3V0bGV0XT10LnZhbHVlfSksaS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudmFsdWUub3V0bGV0PT09YXQ/LTE6ZS52YWx1ZS5vdXRsZXQ9PT1hdD8xOnQudmFsdWUub3V0bGV0LmxvY2FsZUNvbXBhcmUoZS52YWx1ZS5vdXRsZXQpfSksaX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnQ9ZnVuY3Rpb24odCxlLG4scil7dHJ5e2Zvcih2YXIgaT1PYmplY3Qoby5lKSh0KSxhPWkubmV4dCgpOyFhLmRvbmU7YT1pLm5leHQoKSl7dmFyIHM9YS52YWx1ZTt0cnl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUocyxlLG4scil9Y2F0Y2godCl7aWYoISh0IGluc3RhbmNlb2Yga2UpKXRocm93IHR9fX1jYXRjaCh0KXtsPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYodT1pLnJldHVybikmJnUuY2FsbChpKX1maW5hbGx5e2lmKGwpdGhyb3cgbC5lcnJvcn19aWYodGhpcy5ub0xlZnRvdmVyc0luVXJsKGUsbixyKSlyZXR1cm5bXTt0aHJvdyBuZXcga2U7dmFyIGwsdX0sdC5wcm90b3R5cGUubm9MZWZ0b3ZlcnNJblVybD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLmxlbmd0aCYmIXQuY2hpbGRyZW5bbl19LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKHQucmVkaXJlY3RUbyl0aHJvdyBuZXcga2U7aWYoKHQub3V0bGV0fHxhdCkhPT1yKXRocm93IG5ldyBrZTt2YXIgaSxhPVtdLHM9W107aWYoIioqIj09PXQucGF0aCl7dmFyIGw9bi5sZW5ndGg+MD9ndChuKS5wYXJhbWV0ZXJzOnt9O2k9bmV3IHNlKG4sbCxPYmplY3QuZnJlZXplKE9iamVjdChvLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxOZSh0KSxyLHQuY29tcG9uZW50LHQsUGUoZSksQWUoZSkrbi5sZW5ndGgsUmUodCkpfWVsc2V7dmFyIHU9ZnVuY3Rpb24odCxlLG4pe2lmKCIiPT09ZS5wYXRoKXtpZigiZnVsbCI9PT1lLnBhdGhNYXRjaCYmKHQuaGFzQ2hpbGRyZW4oKXx8bi5sZW5ndGg+MCkpdGhyb3cgbmV3IGtlO3JldHVybntjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBhcmFtZXRlcnM6e319fXZhciByPShlLm1hdGNoZXJ8fHV0KShuLHQsZSk7aWYoIXIpdGhyb3cgbmV3IGtlO3ZhciBpPXt9O3Z0KHIucG9zUGFyYW1zLGZ1bmN0aW9uKHQsZSl7aVtlXT10LnBhdGh9KTt2YXIgYT1yLmNvbnN1bWVkLmxlbmd0aD4wP09iamVjdChvLmEpKHt9LGksci5jb25zdW1lZFtyLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzKTppO3JldHVybntjb25zdW1lZFNlZ21lbnRzOnIuY29uc3VtZWQsbGFzdENoaWxkOnIuY29uc3VtZWQubGVuZ3RoLHBhcmFtZXRlcnM6YX19KGUsdCxuKTthPXUuY29uc3VtZWRTZWdtZW50cyxzPW4uc2xpY2UodS5sYXN0Q2hpbGQpLGk9bmV3IHNlKGEsdS5wYXJhbWV0ZXJzLE9iamVjdC5mcmVlemUoT2JqZWN0KG8uYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LE5lKHQpLHIsdC5jb21wb25lbnQsdCxQZShlKSxBZShlKSthLmxlbmd0aCxSZSh0KSl9dmFyIGM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hpbGRyZW4/dC5jaGlsZHJlbjp0LmxvYWRDaGlsZHJlbj90Ll9sb2FkZWRDb25maWcucm91dGVzOltdfSh0KSxmPWplKGUsYSxzLGMpLGg9Zi5zZWdtZW50R3JvdXAscD1mLnNsaWNlZFNlZ21lbnRzO2lmKDA9PT1wLmxlbmd0aCYmaC5oYXNDaGlsZHJlbigpKXt2YXIgZD10aGlzLnByb2Nlc3NDaGlsZHJlbihjLGgpO3JldHVybltuZXcgZWUoaSxkKV19aWYoMD09PWMubGVuZ3RoJiYwPT09cC5sZW5ndGgpcmV0dXJuW25ldyBlZShpLFtdKV07dmFyIG09dGhpcy5wcm9jZXNzU2VnbWVudChjLGgscCxhdCk7cmV0dXJuW25ldyBlZShpLG0pXX0sdH0oKTtmdW5jdGlvbiBQZSh0KXtmb3IodmFyIGU9dDtlLl9zb3VyY2VTZWdtZW50OyllPWUuX3NvdXJjZVNlZ21lbnQ7cmV0dXJuIGV9ZnVuY3Rpb24gQWUodCl7Zm9yKHZhciBlPXQsbj1lLl9zZWdtZW50SW5kZXhTaGlmdD9lLl9zZWdtZW50SW5kZXhTaGlmdDowO2UuX3NvdXJjZVNlZ21lbnQ7KW4rPShlPWUuX3NvdXJjZVNlZ21lbnQpLl9zZWdtZW50SW5kZXhTaGlmdD9lLl9zZWdtZW50SW5kZXhTaGlmdDowO3JldHVybiBuLTF9ZnVuY3Rpb24gamUodCxlLG4scil7aWYobi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIEllKHQsZSxuKSYmTWUobikhPT1hdH0pfSh0LG4pKXt2YXIgaT1uZXcgQ3QoZSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLHM9e307c1thdF09cixyLl9zb3VyY2VTZWdtZW50PXQsci5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGg7dHJ5e2Zvcih2YXIgbD1PYmplY3Qoby5lKShuKSx1PWwubmV4dCgpOyF1LmRvbmU7dT1sLm5leHQoKSl7dmFyIGM9dS52YWx1ZTtpZigiIj09PWMucGF0aCYmTWUoYykhPT1hdCl7dmFyIGY9bmV3IEN0KFtdLHt9KTtmLl9zb3VyY2VTZWdtZW50PXQsZi5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgsc1tNZShjKV09Zn19fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihhPWwucmV0dXJuKSYmYS5jYWxsKGwpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gc30odCxlLHIsbmV3IEN0KG4sdC5jaGlsZHJlbikpKTtyZXR1cm4gaS5fc291cmNlU2VnbWVudD10LGkuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHtzZWdtZW50R3JvdXA6aSxzbGljZWRTZWdtZW50czpbXX19aWYoMD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gSWUodCxlLG4pfSl9KHQsbikpe3ZhciBhPW5ldyBDdCh0LnNlZ21lbnRzLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEscz17fTt0cnl7Zm9yKHZhciBsPU9iamVjdChvLmUpKG4pLHU9bC5uZXh0KCk7IXUuZG9uZTt1PWwubmV4dCgpKXt2YXIgYz11LnZhbHVlO2lmKEllKHQsZSxjKSYmIXJbTWUoYyldKXt2YXIgZj1uZXcgQ3QoW10se30pO2YuX3NvdXJjZVNlZ21lbnQ9dCxmLl9zZWdtZW50SW5kZXhTaGlmdD10LnNlZ21lbnRzLmxlbmd0aCxzW01lKGMpXT1mfX19Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKGE9bC5yZXR1cm4pJiZhLmNhbGwobCl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBPYmplY3Qoby5hKSh7fSxyLHMpfSh0LG4scix0LmNoaWxkcmVuKSk7cmV0dXJuIGEuX3NvdXJjZVNlZ21lbnQ9dCxhLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOmEsc2xpY2VkU2VnbWVudHM6bn19dmFyIHM9bmV3IEN0KHQuc2VnbWVudHMsdC5jaGlsZHJlbik7cmV0dXJuIHMuX3NvdXJjZVNlZ21lbnQ9dCxzLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOnMsc2xpY2VkU2VnbWVudHM6bn19ZnVuY3Rpb24gSWUodCxlLG4pe3JldHVybighKHQuaGFzQ2hpbGRyZW4oKXx8ZS5sZW5ndGg+MCl8fCJmdWxsIiE9PW4ucGF0aE1hdGNoKSYmIiI9PT1uLnBhdGgmJnZvaWQgMD09PW4ucmVkaXJlY3RUb31mdW5jdGlvbiBNZSh0KXtyZXR1cm4gdC5vdXRsZXR8fGF0fWZ1bmN0aW9uIE5lKHQpe3JldHVybiB0LmRhdGF8fHt9fWZ1bmN0aW9uIFJlKHQpe3JldHVybiB0LnJlc29sdmV8fHt9fXZhciBEZT1mdW5jdGlvbigpe30sRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zaG91bGREZXRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuITF9LHQucHJvdG90eXBlLnN0b3JlPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS5zaG91bGRBdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuITF9LHQucHJvdG90eXBlLnJldHJpZXZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5zaG91bGRSZXVzZVJvdXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucm91dGVDb25maWc9PT1lLnJvdXRlQ29uZmlnfSx0fSgpLExlPW5ldyBpLnAoIlJPVVRFUyIpLFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLmxvYWRlcj10LHRoaXMuY29tcGlsZXI9ZSx0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXI9bix0aGlzLm9uTG9hZEVuZExpc3RlbmVyPXJ9cmV0dXJuIHQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihlKSx0aGlzLmxvYWRNb2R1bGVGYWN0b3J5KGUubG9hZENoaWxkcmVuKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHIpe24ub25Mb2FkRW5kTGlzdGVuZXImJm4ub25Mb2FkRW5kTGlzdGVuZXIoZSk7dmFyIGk9ci5jcmVhdGUodCk7cmV0dXJuIG5ldyBjdCh5dChpLmluamVjdG9yLmdldChMZSkpLm1hcChkdCksaSl9KSl9LHQucHJvdG90eXBlLmxvYWRNb2R1bGVGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P09iamVjdChzLmEpKHRoaXMubG9hZGVyLmxvYWQodCkpOl90KHQoKSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGkudT9PYmplY3QobC5hKSh0KTpPYmplY3Qocy5hKShlLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KSl9KSl9LHR9KCksQmU9ZnVuY3Rpb24oKXt9LHplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkUHJvY2Vzc1VybD1mdW5jdGlvbih0KXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZXh0cmFjdD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdC5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0sdH0oKTtmdW5jdGlvbiBVZSh0KXt0aHJvdyB0fWZ1bmN0aW9uIEhlKHQpe3JldHVybiBPYmplY3QobC5hKShudWxsKX12YXIgUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyxzLGwsYyl7dmFyIGY9dGhpczt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy51cmxTZXJpYWxpemVyPWUsdGhpcy5yb290Q29udGV4dHM9bix0aGlzLmxvY2F0aW9uPXIsdGhpcy5jb25maWc9Yyx0aGlzLm5hdmlnYXRpb25zPW5ldyBhLmEobnVsbCksdGhpcy5uYXZpZ2F0aW9uSWQ9MCx0aGlzLmV2ZW50cz1uZXcgdS5hLHRoaXMuZXJyb3JIYW5kbGVyPVVlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLmhvb2tzPXtiZWZvcmVQcmVhY3RpdmF0aW9uOkhlLGFmdGVyUHJlYWN0aXZhdGlvbjpIZX0sdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PW5ldyB6ZSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1uZXcgRmUsdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPSJpZ25vcmUiLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT0iZW1wdHlPbmx5Iix0aGlzLm5nTW9kdWxlPW8uZ2V0KGkudyksdGhpcy5yZXNldENvbmZpZyhjKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyB4dChuZXcgQ3QoW10se30pLHt9LG51bGwpLHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMuY29uZmlnTG9hZGVyPW5ldyBWZShzLGwsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KG5ldyBKKHQpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KG5ldyB0dCh0KSl9KSx0aGlzLnJvdXRlclN0YXRlPWllKHRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb290Q29tcG9uZW50VHlwZSksdGhpcy5wcm9jZXNzTmF2aWdhdGlvbnMoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXRSb290Q29tcG9uZW50VHlwZT1mdW5jdGlvbih0KXt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD10aGlzLnJvb3RDb21wb25lbnRUeXBlfSx0LnByb3RvdHlwZS5pbml0aWFsTmF2aWdhdGlvbj1mdW5jdGlvbigpe3RoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksMD09PXRoaXMubmF2aWdhdGlvbklkJiZ0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSx7cmVwbGFjZVVybDohMH0pfSx0LnByb3RvdHlwZS5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3ZhciBuPXQudXJsU2VyaWFsaXplci5wYXJzZShlLnVybCkscj0icG9wc3RhdGUiPT09ZS50eXBlPyJwb3BzdGF0ZSI6Imhhc2hjaGFuZ2UiLGk9ZS5zdGF0ZSYmZS5zdGF0ZS5uYXZpZ2F0aW9uSWQ/e25hdmlnYXRpb25JZDplLnN0YXRlLm5hdmlnYXRpb25JZH06bnVsbDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zY2hlZHVsZU5hdmlnYXRpb24obixyLGkse3JlcGxhY2VVcmw6ITB9KX0sMCl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidXJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3VycmVudFVybFRyZWUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRyaWdnZXJFdmVudD1mdW5jdGlvbih0KXt0aGlzLmV2ZW50cy5uZXh0KHQpfSx0LnByb3RvdHlwZS5yZXNldENvbmZpZz1mdW5jdGlvbih0KXtmdCh0KSx0aGlzLmNvbmZpZz10Lm1hcChkdCksdGhpcy5uYXZpZ2F0ZWQ9ITEsdGhpcy5sYXN0U3VjY2Vzc2Z1bElkPS0xfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGlzcG9zZSgpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPWUucmVsYXRpdmVUbyxyPWUucXVlcnlQYXJhbXMsYT1lLmZyYWdtZW50LHM9ZS5wcmVzZXJ2ZVF1ZXJ5UGFyYW1zLGw9ZS5xdWVyeVBhcmFtc0hhbmRsaW5nLHU9ZS5wcmVzZXJ2ZUZyYWdtZW50O09iamVjdChpLlkpKCkmJnMmJmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJwcmVzZXJ2ZVF1ZXJ5UGFyYW1zIGlzIGRlcHJlY2F0ZWQsIHVzZSBxdWVyeVBhcmFtc0hhbmRsaW5nIGluc3RlYWQuIik7dmFyIGM9bnx8dGhpcy5yb3V0ZXJTdGF0ZS5yb290LGY9dT90aGlzLmN1cnJlbnRVcmxUcmVlLmZyYWdtZW50OmEsaD1udWxsO2lmKGwpc3dpdGNoKGwpe2Nhc2UibWVyZ2UiOmg9T2JqZWN0KG8uYSkoe30sdGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtcyxyKTticmVhaztjYXNlInByZXNlcnZlIjpoPXRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXM7YnJlYWs7ZGVmYXVsdDpoPXJ8fG51bGx9ZWxzZSBoPXM/dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczpyfHxudWxsO3JldHVybiBudWxsIT09aCYmKGg9dGhpcy5yZW1vdmVFbXB0eVByb3BzKGgpKSxmdW5jdGlvbih0LGUsbixyLGkpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gZGUoZS5yb290LGUucm9vdCxlLHIsaSk7dmFyIGE9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0WzBdJiYxPT09dC5sZW5ndGgmJiIvIj09PXRbMF0pcmV0dXJuIG5ldyBtZSghMCwwLHQpO3ZhciBlPTAsbj0hMSxyPXQucmVkdWNlKGZ1bmN0aW9uKHQscixpKXtpZigib2JqZWN0Ij09dHlwZW9mIHImJm51bGwhPXIpe2lmKHIub3V0bGV0cyl7dmFyIGE9e307cmV0dXJuIHZ0KHIub3V0bGV0cyxmdW5jdGlvbih0LGUpe2FbZV09InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoIi8iKTp0fSksT2JqZWN0KG8uZCkodCxbe291dGxldHM6YX1dKX1pZihyLnNlZ21lbnRQYXRoKXJldHVybiBPYmplY3Qoby5kKSh0LFtyLnNlZ21lbnRQYXRoXSl9cmV0dXJuInN0cmluZyIhPXR5cGVvZiByP09iamVjdChvLmQpKHQsW3JdKTowPT09aT8oci5zcGxpdCgiLyIpLmZvckVhY2goZnVuY3Rpb24ocixpKXswPT1pJiYiLiI9PT1yfHwoMD09aSYmIiI9PT1yP249ITA6Ii4uIj09PXI/ZSsrOiIiIT1yJiZ0LnB1c2gocikpfSksdCk6T2JqZWN0KG8uZCkodCxbcl0pfSxbXSk7cmV0dXJuIG5ldyBtZShuLGUscil9KG4pO2lmKGEudG9Sb290KCkpcmV0dXJuIGRlKGUucm9vdCxuZXcgQ3QoW10se30pLGUscixpKTt2YXIgcz1mdW5jdGlvbih0LG4scil7aWYodC5pc0Fic29sdXRlKXJldHVybiBuZXcgeWUoZS5yb290LCEwLDApO2lmKC0xPT09ci5zbmFwc2hvdC5fbGFzdFBhdGhJbmRleClyZXR1cm4gbmV3IHllKHIuc25hcHNob3QuX3VybFNlZ21lbnQsITAsMCk7dmFyIGk9cGUodC5jb21tYW5kc1swXSk/MDoxO3JldHVybiBmdW5jdGlvbihlLG4sbyl7Zm9yKHZhciBhPXIuc25hcHNob3QuX3VybFNlZ21lbnQscz1yLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4K2ksbD10Lm51bWJlck9mRG91YmxlRG90cztsPnM7KXtpZihsLT1zLCEoYT1hLnBhcmVudCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG51bWJlciBvZiAnLi4vJyIpO3M9YS5zZWdtZW50cy5sZW5ndGh9cmV0dXJuIG5ldyB5ZShhLCExLHMtbCl9KCl9KGEsMCx0KSxsPXMucHJvY2Vzc0NoaWxkcmVuP2JlKHMuc2VnbWVudEdyb3VwLHMuaW5kZXgsYS5jb21tYW5kcyk6dmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTtyZXR1cm4gZGUocy5zZWdtZW50R3JvdXAsbCxlLHIsaSl9KGMsdGhpcy5jdXJyZW50VXJsVHJlZSx0LGgsZil9LHQucHJvdG90eXBlLm5hdmlnYXRlQnlVcmw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSk7dmFyIG49dCBpbnN0YW5jZW9mIHh0P3Q6dGhpcy5wYXJzZVVybCh0KSxyPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShuLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKHIsImltcGVyYXRpdmUiLG51bGwsZSl9LHQucHJvdG90eXBlLm5hdmlnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZihudWxsPT1uKXRocm93IG5ldyBFcnJvcigiVGhlIHJlcXVlc3RlZCBwYXRoIGNvbnRhaW5zICIrbisiIHNlZ21lbnQgYXQgaW5kZXggIitlKX19KHQpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUodCxlKSxlKX0sdC5wcm90b3R5cGUuc2VyaWFsaXplVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQpfSx0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHQpfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiB4dClyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KTtyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSxuLGUpfSx0LnByb3RvdHlwZS5yZW1vdmVFbXB0eVByb3BzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgcj10W25dO3JldHVybiBudWxsIT09ciYmdm9pZCAwIT09ciYmKGVbbl09ciksZX0se30pfSx0LnByb3RvdHlwZS5wcm9jZXNzTmF2aWdhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubmF2aWdhdGlvbnMucGlwZShPYmplY3QoZC5hKShmdW5jdGlvbihlKXtyZXR1cm4gZT8odC5leGVjdXRlU2NoZWR1bGVkTmF2aWdhdGlvbihlKSxlLnByb21pc2UuY2F0Y2goZnVuY3Rpb24oKXt9KSk6T2JqZWN0KGwuYSkobnVsbCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTmF2aWdhdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLm5hdmlnYXRpb25zLnZhbHVlO2lmKGkmJiJpbXBlcmF0aXZlIiE9PWUmJiJpbXBlcmF0aXZlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKGkmJiJoYXNoY2hhbmdlIj09ZSYmInBvcHN0YXRlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKGkmJiJwb3BzdGF0ZSI9PWUmJiJoYXNoY2hhbmdlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO3ZhciBvPW51bGwsYT1udWxsLHM9bmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtvPXQsYT1lfSksbD0rK3RoaXMubmF2aWdhdGlvbklkO3JldHVybiB0aGlzLm5hdmlnYXRpb25zLm5leHQoe2lkOmwsc291cmNlOmUsc3RhdGU6bixyYXdVcmw6dCxleHRyYXM6cixyZXNvbHZlOm8scmVqZWN0OmEscHJvbWlzZTpzfSkscy5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KX0sdC5wcm90b3R5cGUuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQuaWQscj10LnJhd1VybCxpPXQuZXh0cmFzLG89dC5yZXNvbHZlLGE9dC5yZWplY3Qscz10LnNvdXJjZSxsPXQuc3RhdGUsdT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChyKSxjPSF0aGlzLm5hdmlnYXRlZHx8dS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpOygicmVsb2FkIj09PXRoaXMub25TYW1lVXJsTmF2aWdhdGlvbnx8YykmJnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHIpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBRKG4sdGhpcy5zZXJpYWxpemVVcmwodSkscyxsKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5ydW5OYXZpZ2F0ZSh1LHIsISFpLnNraXBMb2NhdGlvbkNoYW5nZSwhIWkucmVwbGFjZVVybCxuLG51bGwpfSkudGhlbihvLGEpKTpjJiZ0aGlzLnJhd1VybFRyZWUmJnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHRoaXMucmF3VXJsVHJlZSk/KHRoaXMuZXZlbnRzLm5leHQobmV3IFEobix0aGlzLnNlcmlhbGl6ZVVybCh1KSxzLGwpKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJ1bk5hdmlnYXRlKHUsciwhMSwhMSxuLGllKHUsZS5yb290Q29tcG9uZW50VHlwZSkuc25hcHNob3QpfSkudGhlbihvLGEpKToodGhpcy5yYXdVcmxUcmVlPXIsbyhudWxsKSl9LHQucHJvdG90eXBlLnJ1bk5hdmlnYXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxzKXt2YXIgdT10aGlzO3JldHVybiBpIT09dGhpcy5uYXZpZ2F0aW9uSWQ/KHRoaXMuZXZlbnRzLm5leHQobmV3IEcoaSx0aGlzLnNlcmlhbGl6ZVVybCh0KSwiTmF2aWdhdGlvbiBJRCAiK2krIiBpcyBub3QgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBpZCAiK3RoaXMubmF2aWdhdGlvbklkKSksUHJvbWlzZS5yZXNvbHZlKCExKSk6bmV3IFByb21pc2UoZnVuY3Rpb24oYyxmKXt2YXIgZCxtPShzP09iamVjdChsLmEpKHthcHBsaWVkVXJsOnQsc25hcHNob3Q6c30pOm5ldyBZdCh1Lm5nTW9kdWxlLmluamVjdG9yLHUuY29uZmlnTG9hZGVyLHUudXJsU2VyaWFsaXplcix0LHUuY29uZmlnKS5hcHBseSgpLnBpcGUoT2JqZWN0KHAuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPSJlbXB0eU9ubHkiKSxuZXcgVGUodCxlLG4scixpKS5yZWNvZ25pemUoKX0odS5yb290Q29tcG9uZW50VHlwZSx1LmNvbmZpZyxlLHUuc2VyaWFsaXplVXJsKGUpLHUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihuKXtyZXR1cm4gdS5ldmVudHMubmV4dChuZXcgVyhpLHUuc2VyaWFsaXplVXJsKHQpLHUuc2VyaWFsaXplVXJsKGUpLG4pKSx7YXBwbGllZFVybDplLHNuYXBzaG90Om59fSkpfSkpKS5waXBlKE9iamVjdChwLmEpKGZ1bmN0aW9uKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHQ/T2JqZWN0KGwuYSkodCk6dS5ob29rcy5iZWZvcmVQcmVhY3RpdmF0aW9uKHQuc25hcHNob3QpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKS5waXBlKE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC5hcHBsaWVkVXJsLG49dC5zbmFwc2hvdDtyZXR1cm4oZD1uZXcgU2Uobix1LnJvdXRlclN0YXRlLnNuYXBzaG90LHUubmdNb2R1bGUuaW5qZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIHUudHJpZ2dlckV2ZW50KHQpfSkpLmluaXRpYWxpemUodS5yb290Q29udGV4dHMpLHthcHBsaWVkVXJsOmUsc25hcHNob3Q6bn19KSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihlKXtpZigiYm9vbGVhbiI9PXR5cGVvZiBlfHx1Lm5hdmlnYXRpb25JZCE9PWkpcmV0dXJuIE9iamVjdChsLmEpKCExKTt2YXIgbj1lLmFwcGxpZWRVcmwscj1lLnNuYXBzaG90O3JldHVybiB1LnRyaWdnZXJFdmVudChuZXcgWihpLHUuc2VyaWFsaXplVXJsKHQpLHUuc2VyaWFsaXplVXJsKG4pLHIpKSxkLmNoZWNrR3VhcmRzKCkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdS50cmlnZ2VyRXZlbnQobmV3IEsoaSx1LnNlcmlhbGl6ZVVybCh0KSx1LnNlcmlhbGl6ZVVybChuKSxyLGUpKSx7YXBwbGllZFVybDpuLHNuYXBzaG90OnIsc2hvdWxkQWN0aXZhdGU6ZX19KSl9KSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbihlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfHx1Lm5hdmlnYXRpb25JZCE9PWk/T2JqZWN0KGwuYSkoITEpOmUuc2hvdWxkQWN0aXZhdGUmJmQuaXNBY3RpdmF0aW5nKCk/KHUudHJpZ2dlckV2ZW50KG5ldyBYKGksdS5zZXJpYWxpemVVcmwodCksdS5zZXJpYWxpemVVcmwoZS5hcHBsaWVkVXJsKSxlLnNuYXBzaG90KSksZC5yZXNvbHZlRGF0YSh1LnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24oKXtyZXR1cm4gdS50cmlnZ2VyRXZlbnQobmV3ICQoaSx1LnNlcmlhbGl6ZVVybCh0KSx1LnNlcmlhbGl6ZVVybChlLmFwcGxpZWRVcmwpLGUuc25hcHNob3QpKSxlfSkpKTpPYmplY3QobC5hKShlKX0pKS5waXBlKE9iamVjdChwLmEpKGZ1bmN0aW9uKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR8fHUubmF2aWdhdGlvbklkIT09aT9PYmplY3QobC5hKSghMSk6dS5ob29rcy5hZnRlclByZWFjdGl2YXRpb24odC5zbmFwc2hvdCkucGlwZShPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiB0fSkpfSkpLnBpcGUoT2JqZWN0KGguYSkoZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdHx8dS5uYXZpZ2F0aW9uSWQhPT1pKXJldHVybiExO3ZhciBlLG4scixzPXQuYXBwbGllZFVybCxsPXQuc2hvdWxkQWN0aXZhdGU7cmV0dXJuIGw/e2FwcGxpZWRVcmw6cyxzdGF0ZToocj1mdW5jdGlvbiB0KGUsbixyKXtpZihyJiZlLnNob3VsZFJldXNlUm91dGUobi52YWx1ZSxyLnZhbHVlLnNuYXBzaG90KSl7KGM9ci52YWx1ZSkuX2Z1dHVyZVNuYXBzaG90PW4udmFsdWU7dmFyIGk9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuLmNoaWxkcmVuLm1hcChmdW5jdGlvbihuKXt0cnl7Zm9yKHZhciBpPU9iamVjdChvLmUpKHIuY2hpbGRyZW4pLGE9aS5uZXh0KCk7IWEuZG9uZTthPWkubmV4dCgpKXt2YXIgcz1hLnZhbHVlO2lmKGUuc2hvdWxkUmV1c2VSb3V0ZShzLnZhbHVlLnNuYXBzaG90LG4udmFsdWUpKXJldHVybiB0KGUsbixzKX19Y2F0Y2godCl7bD17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKHU9aS5yZXR1cm4pJiZ1LmNhbGwoaSl9ZmluYWxseXtpZihsKXRocm93IGwuZXJyb3J9fXJldHVybiB0KGUsbik7dmFyIGwsdX0pfShlLG4scik7cmV0dXJuIG5ldyBlZShjLGkpfXZhciBzPWUucmV0cmlldmUobi52YWx1ZSk7aWYocyl7dmFyIGw9cy5yb3V0ZTtyZXR1cm4gZnVuY3Rpb24gdChlLG4pe2lmKGUudmFsdWUucm91dGVDb25maWchPT1uLnZhbHVlLnJvdXRlQ29uZmlnKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlYXR0YWNoIEFjdGl2YXRlZFJvdXRlU25hcHNob3QgY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IHJvdXRlIik7aWYoZS5jaGlsZHJlbi5sZW5ndGghPT1uLmNoaWxkcmVuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGNoaWxkcmVuIik7bi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9ZS52YWx1ZTtmb3IodmFyIHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoOysrcil0KGUuY2hpbGRyZW5bcl0sbi5jaGlsZHJlbltyXSl9KG4sbCksbH12YXIgdSxjPW5ldyBvZShuZXcgYS5hKCh1PW4udmFsdWUpLnVybCksbmV3IGEuYSh1LnBhcmFtcyksbmV3IGEuYSh1LnF1ZXJ5UGFyYW1zKSxuZXcgYS5hKHUuZnJhZ21lbnQpLG5ldyBhLmEodS5kYXRhKSx1Lm91dGxldCx1LmNvbXBvbmVudCx1KTtyZXR1cm4gaT1uLmNoaWxkcmVuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSksbmV3IGVlKGMsaSl9KHUucm91dGVSZXVzZVN0cmF0ZWd5LChlPXQuc25hcHNob3QpLl9yb290LChuPXUucm91dGVyU3RhdGUpP24uX3Jvb3Q6dm9pZCAwKSxuZXcgcmUocixlKSksc2hvdWxkQWN0aXZhdGU6bH06e2FwcGxpZWRVcmw6cyxzdGF0ZTpudWxsLHNob3VsZEFjdGl2YXRlOmx9fSkpO3UuYWN0aXZhdGVSb3V0ZXMobSx1LnJvdXRlclN0YXRlLHUuY3VycmVudFVybFRyZWUsaSx0LGUsbixyLGMsZil9KX0sdC5wcm90b3R5cGUuYWN0aXZhdGVSb3V0ZXM9ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSl7dmFyIGMsZj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXtpZigiYm9vbGVhbiIhPXR5cGVvZiB0JiZ0LnNob3VsZEFjdGl2YXRlJiZyPT09Zi5uYXZpZ2F0aW9uSWQmJnQuc3RhdGUpe3ZhciBuPXQuc3RhdGU7aWYoZi5jdXJyZW50VXJsVHJlZT10LmFwcGxpZWRVcmwsZi5yYXdVcmxUcmVlPWYudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShmLmN1cnJlbnRVcmxUcmVlLG8pLGYucm91dGVyU3RhdGU9biwhYSl7dmFyIGk9Zi51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLnJhd1VybFRyZWUpO2YubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8oaSl8fHM/Zi5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaSwiIix7bmF2aWdhdGlvbklkOnJ9KTpmLmxvY2F0aW9uLmdvKGksIiIse25hdmlnYXRpb25JZDpyfSl9bmV3IHFlKGYucm91dGVSZXVzZVN0cmF0ZWd5LG4sZSxmdW5jdGlvbih0KXtyZXR1cm4gZi50cmlnZ2VyRXZlbnQodCl9KS5hY3RpdmF0ZShmLnJvb3RDb250ZXh0cyksYz0hMH1lbHNlIGM9ITF9KS50aGVuKGZ1bmN0aW9uKCl7Yz8oZi5uYXZpZ2F0ZWQ9ITAsZi5sYXN0U3VjY2Vzc2Z1bElkPXIsZi5ldmVudHMubmV4dChuZXcgcShyLGYuc2VyaWFsaXplVXJsKGkpLGYuc2VyaWFsaXplVXJsKGYuY3VycmVudFVybFRyZWUpKSksbCghMCkpOihmLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpLGYuZXZlbnRzLm5leHQobmV3IEcocixmLnNlcmlhbGl6ZVVybChpKSwiIikpLGwoITEpKX0sZnVuY3Rpb24odCl7aWYoKGE9dCkmJmEubmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IpZi5uYXZpZ2F0ZWQ9ITAsZi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBHKHIsZi5zZXJpYWxpemVVcmwoaSksdC5tZXNzYWdlKSksbCghMSk7ZWxzZXtmLnJlc2V0U3RhdGVBbmRVcmwoZSxuLG8pLGYuZXZlbnRzLm5leHQobmV3IFkocixmLnNlcmlhbGl6ZVVybChpKSx0KSk7dHJ5e2woZi5lcnJvckhhbmRsZXIodCkpfWNhdGNoKHQpe3UodCl9fXZhciBhfSl9LHQucHJvdG90eXBlLnJlc2V0U3RhdGVBbmRVcmw9ZnVuY3Rpb24odCxlLG4pe3RoaXMucm91dGVyU3RhdGU9dCx0aGlzLmN1cnJlbnRVcmxUcmVlPWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLG4pLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl9LHQucHJvdG90eXBlLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZT1mdW5jdGlvbigpe3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5yYXdVcmxUcmVlKSwiIix7bmF2aWdhdGlvbklkOnRoaXMubGFzdFN1Y2Nlc3NmdWxJZH0pfSx0fSgpLHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT10LHRoaXMuZnV0dXJlU3RhdGU9ZSx0aGlzLmN1cnJTdGF0ZT1uLHRoaXMuZm9yd2FyZEV2ZW50PXJ9cmV0dXJuIHQucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3Qsbj10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KSxmZSh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLm91dGxldDtyLmRlYWN0aXZhdGVSb3V0ZXModCxpW2VdLG4pLGRlbGV0ZSBpW2VdfSksdnQoaSxmdW5jdGlvbih0LGUpe3IuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuKX0pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLGk9ZT9lLnZhbHVlOm51bGw7aWYocj09PWkpaWYoci5jb21wb25lbnQpe3ZhciBvPW4uZ2V0Q29udGV4dChyLm91dGxldCk7byYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgaSYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLG4pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaCh0LnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKHQsZSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQodCxlKX0sdC5wcm90b3R5cGUuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKG4mJm4ub3V0bGV0KXt2YXIgcj1uLm91dGxldC5kZXRhY2goKSxpPW4uY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHQudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjpyLHJvdXRlOnQsY29udGV4dHM6aX0pfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYocil7dmFyIGk9bmUodCksbz10LnZhbHVlLmNvbXBvbmVudD9yLmNoaWxkcmVuOmU7dnQoaSxmdW5jdGlvbih0LGUpe3JldHVybiBuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbyl9KSxyLm91dGxldCYmKHIub3V0bGV0LmRlYWN0aXZhdGUoKSxyLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9bmUoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuYWN0aXZhdGVSb3V0ZXModCxpW3QudmFsdWUub3V0bGV0XSxuKSxyLmZvcndhcmRFdmVudChuZXcgaXQodC52YWx1ZS5zbmFwc2hvdCkpfSksdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBudCh0LnZhbHVlLnNuYXBzaG90KSl9LHQucHJvdG90eXBlLmFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLGk9ZT9lLnZhbHVlOm51bGw7aWYoZmUocikscj09PWkpaWYoci5jb21wb25lbnQpe3ZhciBvPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxuKTtlbHNlIGlmKHIuY29tcG9uZW50KWlmKG89bi5nZXRPckNyZWF0ZUNvbnRleHQoci5vdXRsZXQpLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZEF0dGFjaChyLnNuYXBzaG90KSl7dmFyIGE9dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0cmlldmUoci5zbmFwc2hvdCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoci5zbmFwc2hvdCxudWxsKSxvLmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChhLmNvbnRleHRzKSxvLmF0dGFjaFJlZj1hLmNvbXBvbmVudFJlZixvLnJvdXRlPWEucm91dGUudmFsdWUsby5vdXRsZXQmJm8ub3V0bGV0LmF0dGFjaChhLmNvbXBvbmVudFJlZixhLnJvdXRlLnZhbHVlKSxHZShhLnJvdXRlKX1lbHNle3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1yLnNuYXBzaG90LnBhcmVudDtlO2U9ZS5wYXJlbnQpe3ZhciBuPWUucm91dGVDb25maWc7aWYobiYmbi5fbG9hZGVkQ29uZmlnKXJldHVybiBuLl9sb2FkZWRDb25maWc7aWYobiYmbi5jb21wb25lbnQpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9KCksbD1zP3MubW9kdWxlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjpudWxsO28ucm91dGU9cixvLnJlc29sdmVyPWwsby5vdXRsZXQmJm8ub3V0bGV0LmFjdGl2YXRlV2l0aChyLGwpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LG51bGwsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLG4pfSx0fSgpO2Z1bmN0aW9uIEdlKHQpe2ZlKHQudmFsdWUpLHQuY2hpbGRyZW4uZm9yRWFjaChHZSl9dmFyIFllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLnJvdXRlcj10LHRoaXMucm91dGU9ZSx0aGlzLmxvY2F0aW9uU3RyYXRlZ3k9bix0aGlzLmNvbW1hbmRzPVtdLHRoaXMuc3Vic2NyaXB0aW9uPXQuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbih0KXt0IGluc3RhbmNlb2YgcSYmci51cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb3V0ZXJMaW5rIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuY29tbWFuZHM9bnVsbCE9dD9BcnJheS5pc0FycmF5KHQpP3Q6W3RdOltdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJlc2VydmVRdWVyeVBhcmFtcyIse3NldDpmdW5jdGlvbih0KXtPYmplY3QoaS5ZKSgpJiZjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigicHJlc2VydmVRdWVyeVBhcmFtcyBpcyBkZXByZWNhdGVkLCB1c2UgcXVlcnlQYXJhbXNIYW5kbGluZyBpbnN0ZWFkLiIpLHRoaXMucHJlc2VydmU9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLnVwZGF0ZVRhcmdldFVybEFuZEhyZWYoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5vbkNsaWNrPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKDAhPT10fHxlfHxufHxyKXJldHVybiEwO2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy50YXJnZXQmJiJfc2VsZiIhPXRoaXMudGFyZ2V0KXJldHVybiEwO3ZhciBpPXtza2lwTG9jYXRpb25DaGFuZ2U6V2UodGhpcy5za2lwTG9jYXRpb25DaGFuZ2UpLHJlcGxhY2VVcmw6V2UodGhpcy5yZXBsYWNlVXJsKX07cmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy51cmxUcmVlLGkpLCExfSx0LnByb3RvdHlwZS51cGRhdGVUYXJnZXRVcmxBbmRIcmVmPWZ1bmN0aW9uKCl7dGhpcy5ocmVmPXRoaXMubG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHRoaXMudXJsVHJlZSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVybFRyZWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6dGhpcy5xdWVyeVBhcmFtcyxmcmFnbWVudDp0aGlzLmZyYWdtZW50LHByZXNlcnZlUXVlcnlQYXJhbXM6V2UodGhpcy5wcmVzZXJ2ZSkscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDpXZSh0aGlzLnByZXNlcnZlRnJhZ21lbnQpfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiBXZSh0KXtyZXR1cm4iIj09PXR8fCEhdH12YXIgWmU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLm91dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLnJlc29sdmVyPW51bGwsdGhpcy5jaGlsZHJlbj1uZXcgS2UsdGhpcy5hdHRhY2hSZWY9bnVsbH19KCksS2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5jb250ZXh0cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5vbkNoaWxkT3V0bGV0Q3JlYXRlZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KHQpO24ub3V0bGV0PWUsdGhpcy5jb250ZXh0cy5zZXQodCxuKX0sdC5wcm90b3R5cGUub25DaGlsZE91dGxldERlc3Ryb3llZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENvbnRleHQodCk7ZSYmKGUub3V0bGV0PW51bGwpfSx0LnByb3RvdHlwZS5vbk91dGxldERlYWN0aXZhdGVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLHR9LHQucHJvdG90eXBlLm9uT3V0bGV0UmVBdHRhY2hlZD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHRzPXR9LHQucHJvdG90eXBlLmdldE9yQ3JlYXRlQ29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENvbnRleHQodCk7cmV0dXJuIGV8fChlPW5ldyBaZSx0aGlzLmNvbnRleHRzLnNldCh0LGUpKSxlfSx0LnByb3RvdHlwZS5nZXRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRleHRzLmdldCh0KXx8bnVsbH0sdH0oKSxYZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXt0aGlzLnBhcmVudENvbnRleHRzPXQsdGhpcy5sb2NhdGlvbj1lLHRoaXMucmVzb2x2ZXI9bix0aGlzLmNoYW5nZURldGVjdG9yPW8sdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuYWN0aXZhdGVFdmVudHM9bmV3IGkubix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IGkubix0aGlzLm5hbWU9cnx8YXQsdC5vbkNoaWxkT3V0bGV0Q3JlYXRlZCh0aGlzLm5hbWUsdGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKHRoaXMubmFtZSl9LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXt2YXIgdD10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTt0JiZ0LnJvdXRlJiYodC5hdHRhY2hSZWY/dGhpcy5hdHRhY2godC5hdHRhY2hSZWYsdC5yb3V0ZSk6dGhpcy5hY3RpdmF0ZVdpdGgodC5yb3V0ZSx0LnJlc29sdmVyfHxudWxsKSl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzQWN0aXZhdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjdGl2YXRlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkUm91dGUiLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFJvdXRlRGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZT90aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhOnt9fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7dGhpcy5sb2NhdGlvbi5kZXRhY2goKTt2YXIgdD10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHR9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0LGUpe3RoaXMuYWN0aXZhdGVkPXQsdGhpcy5fYWN0aXZhdGVkUm91dGU9ZSx0aGlzLmxvY2F0aW9uLmluc2VydCh0Lmhvc3RWaWV3KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZT1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZhdGVkKXt2YXIgdD10aGlzLmNvbXBvbmVudDt0aGlzLmFjdGl2YXRlZC5kZXN0cm95KCksdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGVhY3RpdmF0ZUV2ZW50cy5lbWl0KHQpfX0sdC5wcm90b3R5cGUuYWN0aXZhdGVXaXRoPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY3RpdmF0ZSBhbiBhbHJlYWR5IGFjdGl2YXRlZCBvdXRsZXQiKTt0aGlzLl9hY3RpdmF0ZWRSb3V0ZT10O3ZhciBuPShlPWV8fHRoaXMucmVzb2x2ZXIpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnLmNvbXBvbmVudCkscj10aGlzLnBhcmVudENvbnRleHRzLmdldE9yQ3JlYXRlQ29udGV4dCh0aGlzLm5hbWUpLmNoaWxkcmVuLGk9bmV3ICRlKHQscix0aGlzLmxvY2F0aW9uLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD10aGlzLmxvY2F0aW9uLmNyZWF0ZUNvbXBvbmVudChuLHRoaXMubG9jYXRpb24ubGVuZ3RoLGkpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksdGhpcy5hY3RpdmF0ZUV2ZW50cy5lbWl0KHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlKX0sdH0oKSwkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucm91dGU9dCx0aGlzLmNoaWxkQ29udGV4dHM9ZSx0aGlzLnBhcmVudD1ufXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PW9lP3RoaXMucm91dGU6dD09PUtlP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQodCxlKX0sdH0oKSxKZT1mdW5jdGlvbigpe30sdG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUoKS5waXBlKE9iamVjdChBLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChsLmEpKG51bGwpfSkpfSx0fSgpLGVuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QobC5hKShudWxsKX0sdH0oKSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpKXt0aGlzLnJvdXRlcj10LHRoaXMuaW5qZWN0b3I9cix0aGlzLnByZWxvYWRpbmdTdHJhdGVneT1pLHRoaXMubG9hZGVyPW5ldyBWZShlLG4sZnVuY3Rpb24oZSl7cmV0dXJuIHQudHJpZ2dlckV2ZW50KG5ldyBKKGUpKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHQudHJpZ2dlckV2ZW50KG5ldyB0dChlKSl9KX1yZXR1cm4gdC5wcm90b3R5cGUuc2V0VXBQcmVsb2FkaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJvdXRlci5ldmVudHMucGlwZShPYmplY3QobS5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHF9KSxPYmplY3QoZC5hKShmdW5jdGlvbigpe3JldHVybiB0LnByZWxvYWQoKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt9KX0sdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5qZWN0b3IuZ2V0KGkudyk7cmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyh0LHRoaXMucm91dGVyLmNvbmZpZyl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUucHJvY2Vzc1JvdXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT1bXTt0cnl7Zm9yKHZhciBhPU9iamVjdChvLmUpKGUpLGw9YS5uZXh0KCk7IWwuZG9uZTtsPWEubmV4dCgpKXt2YXIgdT1sLnZhbHVlO2lmKHUubG9hZENoaWxkcmVuJiYhdS5jYW5Mb2FkJiZ1Ll9sb2FkZWRDb25maWcpe3ZhciBjPXUuX2xvYWRlZENvbmZpZztpLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKGMubW9kdWxlLGMucm91dGVzKSl9ZWxzZSB1LmxvYWRDaGlsZHJlbiYmIXUuY2FuTG9hZD9pLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKHQsdSkpOnUuY2hpbGRyZW4mJmkucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXModCx1LmNoaWxkcmVuKSl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2wmJiFsLmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gT2JqZWN0KHMuYSkoaSkucGlwZShPYmplY3QoRC5hKSgpLE9iamVjdChoLmEpKGZ1bmN0aW9uKHQpe30pKX0sdC5wcm90b3R5cGUucHJlbG9hZENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5LnByZWxvYWQoZSxmdW5jdGlvbigpe3JldHVybiBuLmxvYWRlci5sb2FkKHQuaW5qZWN0b3IsZSkucGlwZShPYmplY3QocC5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fbG9hZGVkQ29uZmlnPXQsbi5wcm9jZXNzUm91dGVzKHQubW9kdWxlLHQucm91dGVzKX0pKX0pfSx0fSgpLHJuPW5ldyBpLnAoIlJPVVRFUl9DT05GSUdVUkFUSU9OIiksb249bmV3IGkucCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxhbj1bci5nLHtwcm92aWRlOmt0LHVzZUNsYXNzOlR0fSx7cHJvdmlkZTpRZSx1c2VGYWN0b3J5OmhuLGRlcHM6W2kuZyxrdCxLZSxyLmcsaS5xLGkudixpLmksTGUscm4sW0JlLG5ldyBpLnpdLFtEZSxuZXcgaS56XV19LEtlLHtwcm92aWRlOm9lLHVzZUZhY3Rvcnk6cG4sZGVwczpbUWVdfSx7cHJvdmlkZTppLnYsdXNlQ2xhc3M6aS5LfSxubixlbix0bix7cHJvdmlkZTpybix1c2VWYWx1ZTp7ZW5hYmxlVHJhY2luZzohMX19XTtmdW5jdGlvbiBzbigpe3JldHVybiBuZXcgaS54KCJSb3V0ZXIiLFFlKX12YXIgbG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7fXJldHVybiB0LmZvclJvb3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W2FuLGZuKGUpLHtwcm92aWRlOm9uLHVzZUZhY3Rvcnk6Y24sZGVwczpbW1FlLG5ldyBpLnosbmV3IGkuSl1dfSx7cHJvdmlkZTpybix1c2VWYWx1ZTpufHx7fX0se3Byb3ZpZGU6ci5oLHVzZUZhY3Rvcnk6dW4sZGVwczpbci5wLFtuZXcgaS5vKHIuYSksbmV3IGkuel0scm5dfSx7cHJvdmlkZTpKZSx1c2VFeGlzdGluZzpuJiZuLnByZWxvYWRpbmdTdHJhdGVneT9uLnByZWxvYWRpbmdTdHJhdGVneTplbn0se3Byb3ZpZGU6aS54LG11bHRpOiEwLHVzZUZhY3Rvcnk6c259LFtkbix7cHJvdmlkZTppLmQsbXVsdGk6ITAsdXNlRmFjdG9yeTptbixkZXBzOltkbl19LHtwcm92aWRlOmduLHVzZUZhY3Rvcnk6eW4sZGVwczpbZG5dfSx7cHJvdmlkZTppLmIsbXVsdGk6ITAsdXNlRXhpc3Rpbmc6Z259XV19fSx0LmZvckNoaWxkPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbZm4oZSldfX0sdH0oKTtmdW5jdGlvbiB1bih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSxuLnVzZUhhc2g/bmV3IHIuZSh0LGUpOm5ldyByLm8odCxlKX1mdW5jdGlvbiBjbih0KXtpZih0KXRocm93IG5ldyBFcnJvcigiUm91dGVyTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIExhenkgbG9hZGVkIG1vZHVsZXMgc2hvdWxkIHVzZSBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBmbih0KXtyZXR1cm5be3Byb3ZpZGU6aS5hLG11bHRpOiEwLHVzZVZhbHVlOnR9LHtwcm92aWRlOkxlLG11bHRpOiEwLHVzZVZhbHVlOnR9XX1mdW5jdGlvbiBobih0LGUsbixyLGksbyxhLHMsbCx1LGMpe3ZvaWQgMD09PWwmJihsPXt9KTt2YXIgZj1uZXcgUWUobnVsbCxlLG4scixpLG8sYSx5dChzKSk7aWYodSYmKGYudXJsSGFuZGxpbmdTdHJhdGVneT11KSxjJiYoZi5yb3V0ZVJldXNlU3RyYXRlZ3k9YyksbC5lcnJvckhhbmRsZXImJihmLmVycm9ySGFuZGxlcj1sLmVycm9ySGFuZGxlciksbC5lbmFibGVUcmFjaW5nKXt2YXIgaD1PYmplY3QoVS50KSgpO2YuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbih0KXtoLmxvZ0dyb3VwKCJSb3V0ZXIgRXZlbnQ6ICIrdC5jb25zdHJ1Y3Rvci5uYW1lKSxoLmxvZyh0LnRvU3RyaW5nKCkpLGgubG9nKHQpLGgubG9nR3JvdXBFbmQoKX0pfXJldHVybiBsLm9uU2FtZVVybE5hdmlnYXRpb24mJihmLm9uU2FtZVVybE5hdmlnYXRpb249bC5vblNhbWVVcmxOYXZpZ2F0aW9uKSxsLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kmJihmLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9bC5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxmfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0LnJvdXRlclN0YXRlLnJvb3R9dmFyIGRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmluamVjdG9yPXQsdGhpcy5pbml0TmF2aWdhdGlvbj0hMSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmU9bmV3IHUuYX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmluamVjdG9yLmdldChyLmYsUHJvbWlzZS5yZXNvbHZlKG51bGwpKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9bnVsbCxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3JldHVybiBlPXR9KSxyPXQuaW5qZWN0b3IuZ2V0KFFlKSxpPXQuaW5qZWN0b3IuZ2V0KHJuKTtpZih0LmlzTGVnYWN5RGlzYWJsZWQoaSl8fHQuaXNMZWdhY3lFbmFibGVkKGkpKWUoITApO2Vsc2UgaWYoImRpc2FibGVkIj09PWkuaW5pdGlhbE5hdmlnYXRpb24pci5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxlKCEwKTtlbHNle2lmKCJlbmFibGVkIiE9PWkuaW5pdGlhbE5hdmlnYXRpb24pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGluaXRpYWxOYXZpZ2F0aW9uIG9wdGlvbnM6ICciK2kuaW5pdGlhbE5hdmlnYXRpb24rIiciKTtyLmhvb2tzLmFmdGVyUHJlYWN0aXZhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmluaXROYXZpZ2F0aW9uP09iamVjdChsLmEpKG51bGwpOih0LmluaXROYXZpZ2F0aW9uPSEwLGUoITApLHQucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZSl9LHIuaW5pdGlhbE5hdmlnYXRpb24oKX1yZXR1cm4gbn0pfSx0LnByb3RvdHlwZS5ib290c3RyYXBMaXN0ZW5lcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluamVjdG9yLmdldChybiksbj10aGlzLmluamVjdG9yLmdldChubikscj10aGlzLmluamVjdG9yLmdldChRZSksbz10aGlzLmluamVjdG9yLmdldChpLmcpO3Q9PT1vLmNvbXBvbmVudHNbMF0mJih0aGlzLmlzTGVnYWN5RW5hYmxlZChlKT9yLmluaXRpYWxOYXZpZ2F0aW9uKCk6dGhpcy5pc0xlZ2FjeURpc2FibGVkKGUpJiZyLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLG4uc2V0VXBQcmVsb2FkaW5nKCksci5yZXNldFJvb3RDb21wb25lbnRUeXBlKG8uY29tcG9uZW50VHlwZXNbMF0pLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZS5uZXh0KG51bGwpLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZS5jb21wbGV0ZSgpKX0sdC5wcm90b3R5cGUuaXNMZWdhY3lFbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiJsZWdhY3lfZW5hYmxlZCI9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHwhMD09PXQuaW5pdGlhbE5hdmlnYXRpb258fHZvaWQgMD09PXQuaW5pdGlhbE5hdmlnYXRpb259LHQucHJvdG90eXBlLmlzTGVnYWN5RGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuImxlZ2FjeV9kaXNhYmxlZCI9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHwhMT09PXQuaW5pdGlhbE5hdmlnYXRpb259LHR9KCk7ZnVuY3Rpb24gbW4odCl7cmV0dXJuIHQuYXBwSW5pdGlhbGl6ZXIuYmluZCh0KX1mdW5jdGlvbiB5bih0KXtyZXR1cm4gdC5ib290c3RyYXBMaXN0ZW5lci5iaW5kKHQpfXZhciBnbj1uZXcgaS5wKCJSb3V0ZXIgSW5pdGlhbGl6ZXIiKX0sWllqdDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiB2dH0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBudH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBydH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBsdH0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gdHR9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gc3R9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBJfSk7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bigibXJTRyIpLGE9bnVsbDtmdW5jdGlvbiBzKCl7cmV0dXJuIGF9dmFyIGwsdT17Y2xhc3M6ImNsYXNzTmFtZSIsaW5uZXJIdG1sOiJpbm5lckhUTUwiLHJlYWRvbmx5OiJyZWFkT25seSIsdGFiaW5kZXg6InRhYkluZGV4In0sYz17IlxiIjoiQmFja3NwYWNlIiwiXHQiOiJUYWIiLCJceDdmIjoiRGVsZXRlIiwiXHgxYiI6IkVzY2FwZSIsRGVsOiJEZWxldGUiLEVzYzoiRXNjYXBlIixMZWZ0OiJBcnJvd0xlZnQiLFJpZ2h0OiJBcnJvd1JpZ2h0IixVcDoiQXJyb3dVcCIsRG93bjoiQXJyb3dEb3duIixNZW51OiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixXaW46Ik9TIn0sZj17QToiMSIsQjoiMiIsQzoiMyIsRDoiNCIsRToiNSIsRjoiNiIsRzoiNyIsSDoiOCIsSToiOSIsSjoiKiIsSzoiKyIsTToiLSIsTjoiLiIsTzoiLyIsImAiOiIwIiwiXHg5MCI6Ik51bUxvY2sifTtpLlJhLk5vZGUmJihsPWkuUmEuTm9kZS5wcm90b3R5cGUuY29udGFpbnN8fGZ1bmN0aW9uKHQpe3JldHVybiEhKDE2JnRoaXMuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpfSk7dmFyIGgscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInBhcnNlIG5vdCBpbXBsZW1lbnRlZCIpfSxlLm1ha2VDdXJyZW50PWZ1bmN0aW9uKCl7dmFyIHQ7dD1uZXcgZSxhfHwoYT10KX0sZS5wcm90b3R5cGUuaGFzUHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fSxlLnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dFtlXT1ufSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdfSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByOyhyPXQpW2VdLmFwcGx5KHIsT2JqZWN0KG8uZCkobikpfSxlLnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmKGNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvcih0KTpjb25zb2xlLmxvZyh0KSl9LGUucHJvdG90eXBlLmxvZz1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nJiZ3aW5kb3cuY29uc29sZS5sb2codCl9LGUucHJvdG90eXBlLmxvZ0dyb3VwPWZ1bmN0aW9uKHQpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cCYmd2luZG93LmNvbnNvbGUuZ3JvdXAodCl9LGUucHJvdG90eXBlLmxvZ0dyb3VwRW5kPWZ1bmN0aW9uKCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmdyb3VwRW5kJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0LGUpe3JldHVybiBsLmNhbGwodCxlKX0sZS5wcm90b3R5cGUucXVlcnlTZWxlY3Rvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3IoZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKGUpfSxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUsbil7dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9LGUucHJvdG90eXBlLm9uQW5kQ2FuY2VsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSksZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCExKX19LGUucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24odCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9LGUucHJvdG90eXBlLmNyZWF0ZU1vdXNlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5jcmVhdGVFdmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUV2ZW50KCJFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5yZXR1cm5WYWx1ZT0hMX0sZS5wcm90b3R5cGUuaXNQcmV2ZW50ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVmYXVsdFByZXZlbnRlZHx8bnVsbCE9dC5yZXR1cm5WYWx1ZSYmIXQucmV0dXJuVmFsdWV9LGUucHJvdG90eXBlLmdldElubmVySFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbm5lckhUTUx9LGUucHJvdG90eXBlLmdldFRlbXBsYXRlQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4iY29udGVudCJpbiB0JiZ0aGlzLmlzVGVtcGxhdGVFbGVtZW50KHQpP3QuY29udGVudDpudWxsfSxlLnByb3RvdHlwZS5nZXRPdXRlckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0ZXJIVE1MfSxlLnByb3RvdHlwZS5ub2RlTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZX0sZS5wcm90b3R5cGUubm9kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVWYWx1ZX0sZS5wcm90b3R5cGUudHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSxlLnByb3RvdHlwZS5jb250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc1Byb3BlcnR5KHQsImNvbnRlbnQiKT90LmNvbnRlbnQ6dH0sZS5wcm90b3R5cGUuZmlyc3RDaGlsZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5maXJzdENoaWxkfSxlLnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sZS5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkTm9kZXN9LGUucHJvdG90eXBlLmNoaWxkTm9kZXNBc0xpc3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2hpbGROb2RlcyxuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn0sZS5wcm90b3R5cGUuY2xlYXJOb2Rlcz1mdW5jdGlvbih0KXtmb3IoO3QuZmlyc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpfSxlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dC5yZW1vdmVDaGlsZChlKX0sZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKHQsZSxuKXt0LnJlcGxhY2VDaGlsZChlLG4pfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHR9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dC5pbnNlcnRCZWZvcmUobixlKX0sZS5wcm90b3R5cGUuaW5zZXJ0QWxsQmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXtuLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQuaW5zZXJ0QmVmb3JlKG4sZSl9KX0sZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZS5uZXh0U2libGluZyl9LGUucHJvdG90eXBlLnNldElubmVySFRNTD1mdW5jdGlvbih0LGUpe3QuaW5uZXJIVE1MPWV9LGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dENvbnRlbnR9LGUucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0LnRleHRDb250ZW50PWV9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3QudmFsdWU9ZX0sZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja2VkfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkPWZ1bmN0aW9uKHQsZSl7dC5jaGVja2VkPWV9LGUucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlQ29tbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBlLmlubmVySFRNTD10LGV9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybihuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnROUyh0LGUpfSxlLnByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZVRleHROb2RlKHQpfSxlLnByb3RvdHlwZS5jcmVhdGVTY3JpcHRUYWc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPShuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoIlNDUklQVCIpO3JldHVybiByLnNldEF0dHJpYnV0ZSh0LGUpLHJ9LGUucHJvdG90eXBlLmNyZWF0ZVN0eWxlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPShlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobix0aGlzLmNyZWF0ZVRleHROb2RlKHQsZSkpLG59LGUucHJvdG90eXBlLmNyZWF0ZVNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY3JlYXRlU2hhZG93Um9vdCgpfSxlLnByb3RvdHlwZS5nZXRTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEhvc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9zdH0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX0sZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSl9LGUucHJvdG90eXBlLmNsYXNzTGlzdD1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5jbGFzc0xpc3QsMCl9LGUucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX0sZS5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSl9LGUucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0LnN0eWxlW2VdPW59LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtlXT0iIn0sZS5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdHlsZVtlXX0sZS5wcm90b3R5cGUuaGFzU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZ2V0U3R5bGUodCxlKXx8IiI7cmV0dXJuIG4/cj09bjpyLmxlbmd0aD4wfSxlLnByb3RvdHlwZS50YWdOYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhZ05hbWV9LGUucHJvdG90eXBlLmF0dHJpYnV0ZU1hcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IE1hcCxuPXQuYXR0cmlidXRlcyxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW4uaXRlbShyKTtlLnNldChpLm5hbWUsaS52YWx1ZSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuaGFzQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lmhhc0F0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmdldEF0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dC5zZXRBdHRyaWJ1dGUoZSxuKX0sZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4scil7dC5zZXRBdHRyaWJ1dGVOUyhlLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQXR0cmlidXRlKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7dC5yZW1vdmVBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS50ZW1wbGF0ZUF3YXJlUm9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90aGlzLmNvbnRlbnQodCk6dH0sZS5wcm90b3R5cGUuY3JlYXRlSHRtbERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9LGUucHJvdG90eXBlLmdldERlZmF1bHREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaCh0KXtyZXR1cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19fSxlLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50aXRsZX0sZS5wcm90b3R5cGUuc2V0VGl0bGU9ZnVuY3Rpb24odCxlKXt0LnRpdGxlPWV8fCIifSxlLnByb3RvdHlwZS5lbGVtZW50TWF0Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiEhdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYodC5tYXRjaGVzJiZ0Lm1hdGNoZXMoZSl8fHQubXNNYXRjaGVzU2VsZWN0b3ImJnQubXNNYXRjaGVzU2VsZWN0b3IoZSl8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yJiZ0LndlYmtpdE1hdGNoZXNTZWxlY3RvcihlKSl9LGUucHJvdG90eXBlLmlzVGVtcGxhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzRWxlbWVudE5vZGUodCkmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfSxlLnByb3RvdHlwZS5pc1RleHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREV9LGUucHJvdG90eXBlLmlzQ29tbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkNPTU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaXNFbGVtZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSxlLnByb3RvdHlwZS5oYXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10LnNoYWRvd1Jvb3QmJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sZS5wcm90b3R5cGUuaXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH0sZS5wcm90b3R5cGUuaW1wb3J0SW50b0RvYz1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLnRlbXBsYXRlQXdhcmVSb290KHQpLCEwKX0sZS5wcm90b3R5cGUuYWRvcHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5hZG9wdE5vZGUodCl9LGUucHJvdG90eXBlLmdldEhyZWY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKCJocmVmIil9LGUucHJvdG90eXBlLmdldEV2ZW50S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5O2lmKG51bGw9PWUpe2lmKG51bGw9PShlPXQua2V5SWRlbnRpZmllcikpcmV0dXJuIlVuaWRlbnRpZmllZCI7ZS5zdGFydHNXaXRoKCJVKyIpJiYoZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGUuc3Vic3RyaW5nKDIpLDE2KSksMz09PXQubG9jYXRpb24mJmYuaGFzT3duUHJvcGVydHkoZSkmJihlPWZbZV0pKX1yZXR1cm4gY1tlXXx8ZX0sZS5wcm90b3R5cGUuZ2V0R2xvYmFsRXZlbnRUYXJnZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4id2luZG93Ij09PWU/d2luZG93OiJkb2N1bWVudCI9PT1lP3Q6ImJvZHkiPT09ZT90LmJvZHk6bnVsbH0sZS5wcm90b3R5cGUuZ2V0SGlzdG9yeT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaGlzdG9yeX0sZS5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmxvY2F0aW9ufSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbih0KXt2YXIgZSxuPWR8fChkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSk/ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1uP251bGw6KGU9bixofHwoaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLGguc2V0QXR0cmlidXRlKCJocmVmIixlKSwiLyI9PT1oLnBhdGhuYW1lLmNoYXJBdCgwKT9oLnBhdGhuYW1lOiIvIitoLnBhdGhuYW1lKX0sZS5wcm90b3R5cGUucmVzZXRCYXNlRWxlbWVudD1mdW5jdGlvbigpe2Q9bnVsbH0sZS5wcm90b3R5cGUuZ2V0VXNlckFnZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fSxlLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnNldEF0dHJpYnV0ZSh0LCJkYXRhLSIrZSxuKX0sZS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSh0LCJkYXRhLSIrZSl9LGUucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGU9ZnVuY3Rpb24odCl7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUodCl9LGUucHJvdG90eXBlLnN1cHBvcnRzV2ViQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV9LGUucHJvdG90eXBlLnBlcmZvcm1hbmNlTm93PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZSYmd2luZG93LnBlcmZvcm1hbmNlLm5vdz93aW5kb3cucGVyZm9ybWFuY2Uubm93KCk6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LGUucHJvdG90eXBlLnN1cHBvcnRzQ29va2llcz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5nZXRDb29raWU9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyLnUpKGRvY3VtZW50LmNvb2tpZSx0KX0sZS5wcm90b3R5cGUuc2V0Q29va2llPWZ1bmN0aW9uKHQsZSl7ZG9jdW1lbnQuY29va2llPWVuY29kZVVSSUNvbXBvbmVudCh0KSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpfSxlfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO2UuX2FuaW1hdGlvblByZWZpeD1udWxsLGUuX3RyYW5zaXRpb25FbmQ9bnVsbDt0cnl7dmFyIG49ZS5jcmVhdGVFbGVtZW50KCJkaXYiLGRvY3VtZW50KTtpZihudWxsIT1lLmdldFN0eWxlKG4sImFuaW1hdGlvbk5hbWUiKSllLl9hbmltYXRpb25QcmVmaXg9IiI7ZWxzZSBmb3IodmFyIHI9WyJXZWJraXQiLCJNb3oiLCJPIiwibXMiXSxpPTA7aTxyLmxlbmd0aDtpKyspaWYobnVsbCE9ZS5nZXRTdHlsZShuLHJbaV0rIkFuaW1hdGlvbk5hbWUiKSl7ZS5fYW5pbWF0aW9uUHJlZml4PSItIityW2ldLnRvTG93ZXJDYXNlKCkrIi0iO2JyZWFrfXZhciBvPXtXZWJraXRUcmFuc2l0aW9uOiJ3ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNpdGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRpb25lbmQifTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGwhPWUuZ2V0U3R5bGUobix0KSYmKGUuX3RyYW5zaXRpb25FbmQ9b1t0XSl9KX1jYXRjaCh0KXtlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGx9cmV0dXJuIGV9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0RGlzdHJpYnV0ZWROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREaXN0cmlidXRlZE5vZGVzKCl9LGUucHJvdG90eXBlLnJlc29sdmVBbmRTZXRIcmVmPWZ1bmN0aW9uKHQsZSxuKXt0LmhyZWY9bnVsbD09bj9lOmUrIi8uLi8iK259LGUucHJvdG90eXBlLnN1cHBvcnRzRE9NRXZlbnRzPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnN1cHBvcnRzTmF0aXZlU2hhZG93RE9NPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRvY3VtZW50LmJvZHkuY3JlYXRlU2hhZG93Um9vdH0sZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblByZWZpeD90aGlzLl9hbmltYXRpb25QcmVmaXg6IiJ9LGUucHJvdG90eXBlLmdldFRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZD90aGlzLl90cmFuc2l0aW9uRW5kOiIifSxlLnByb3RvdHlwZS5zdXBwb3J0c0FuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hbmltYXRpb25QcmVmaXgmJm51bGwhPXRoaXMuX3RyYW5zaXRpb25FbmR9LGV9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMucmVzb3VyY2VMb2FkZXJUeXBlPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXR0clRvUHJvcE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRyVG9Qcm9wTWFwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXR0clRvUHJvcE1hcD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCkpKSxkPW51bGwsbT1yLmQ7ZnVuY3Rpb24geSgpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfXZhciBnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kb2M9ZSxuLl9pbml0KCksbn1yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe3RoaXMubG9jYXRpb249cygpLmdldExvY2F0aW9uKCksdGhpcy5faGlzdG9yeT1zKCkuZ2V0SGlzdG9yeSgpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZkZyb21ET009ZnVuY3Rpb24oKXtyZXR1cm4gcygpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9LGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHQsITEpfSxlLnByb3RvdHlwZS5vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24odCl7cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdCwhMSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aG5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wYXRobmFtZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMubG9jYXRpb24ucGF0aG5hbWU9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlYXJjaCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2F0aW9uLnNlYXJjaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhhc2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5oYXNofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbil7eSgpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt5KCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9oaXN0b3J5LmJhY2soKX0sZS5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6aS5vLGFyZ3M6W21dfV19XX0sZX0oci5wKSx2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dCx0aGlzLl9kb209cygpfXJldHVybiB0LnByb3RvdHlwZS5hZGRUYWc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLHQ/dGhpcy5fZ2V0T3JDcmVhdGVFbGVtZW50KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUuYWRkVGFncz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx0P3QucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHImJnQucHVzaChuLl9nZXRPckNyZWF0ZUVsZW1lbnQocixlKSksdH0sW10pOltdfSx0LnByb3RvdHlwZS5nZXRUYWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuX2RvbS5xdWVyeVNlbGVjdG9yKHRoaXMuX2RvYywibWV0YVsiK3QrIl0iKXx8bnVsbH0sdC5wcm90b3R5cGUuZ2V0VGFncz1mdW5jdGlvbih0KXtpZighdClyZXR1cm5bXTt2YXIgZT10aGlzLl9kb20ucXVlcnlTZWxlY3RvckFsbCh0aGlzLl9kb2MsIm1ldGFbIit0KyJdIik7cmV0dXJuIGU/W10uc2xpY2UuY2FsbChlKTpbXX0sdC5wcm90b3R5cGUudXBkYXRlVGFnPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7ZT1lfHx0aGlzLl9wYXJzZVNlbGVjdG9yKHQpO3ZhciBuPXRoaXMuZ2V0VGFnKGUpO3JldHVybiBuP3RoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0LG4pOnRoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LCEwKX0sdC5wcm90b3R5cGUucmVtb3ZlVGFnPWZ1bmN0aW9uKHQpe3RoaXMucmVtb3ZlVGFnRWxlbWVudCh0aGlzLmdldFRhZyh0KSl9LHQucHJvdG90eXBlLnJlbW92ZVRhZ0VsZW1lbnQ9ZnVuY3Rpb24odCl7dCYmdGhpcy5fZG9tLnJlbW92ZSh0KX0sdC5wcm90b3R5cGUuX2dldE9yQ3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSwhZSl7dmFyIG49dGhpcy5fcGFyc2VTZWxlY3Rvcih0KSxyPXRoaXMuZ2V0VGFnKG4pO2lmKHImJnRoaXMuX2NvbnRhaW5zQXR0cmlidXRlcyh0LHIpKXJldHVybiByfXZhciBpPXRoaXMuX2RvbS5jcmVhdGVFbGVtZW50KCJtZXRhIik7dGhpcy5fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzKHQsaSk7dmFyIG89dGhpcy5fZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRoaXMuX2RvYywiaGVhZCIpWzBdO3JldHVybiB0aGlzLl9kb20uYXBwZW5kQ2hpbGQobyxpKSxpfSx0LnByb3RvdHlwZS5fc2V0TWV0YUVsZW1lbnRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gbi5fZG9tLnNldEF0dHJpYnV0ZShlLHIsdFtyXSl9KSxlfSx0LnByb3RvdHlwZS5fcGFyc2VTZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU/Im5hbWUiOiJwcm9wZXJ0eSI7cmV0dXJuIGUrJz0iJyt0W2VdKyciJ30sdC5wcm90b3R5cGUuX2NvbnRhaW5zQXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBuLl9kb20uZ2V0QXR0cmlidXRlKGUscik9PT10W3JdfSl9LHR9KCksYj1uZXcgaS5wKCJUUkFOU0lUSU9OX0lEIiksXz1be3Byb3ZpZGU6aS5kLHVzZUZhY3Rvcnk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe24uZ2V0KGkuZSkuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3ZhciBuPXMoKTtBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkobi5xdWVyeVNlbGVjdG9yQWxsKGUsInN0eWxlW25nLXRyYW5zaXRpb25dIikpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbi5nZXRBdHRyaWJ1dGUoZSwibmctdHJhbnNpdGlvbiIpPT09dH0pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVtb3ZlKHQpfSl9KX19LGRlcHM6W2IsbSxpLnFdLG11bHRpOiEwfV0sdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuaW5pdD1mdW5jdGlvbigpe09iamVjdChpLkFhKShuZXcgdCl9LHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe2kuUmEuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciByPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiByfSxpLlJhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsVGVzdGFiaWxpdGllcygpfSxpLlJhLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxSb290RWxlbWVudHMoKX0saS5SYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KGkuUmEuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLGkuUmEuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1pLlJhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxyPSExLG89ZnVuY3Rpb24oZSl7cj1yfHxlLDA9PS0tbiYmdChyKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShvKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgcj10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1yP3I6bj9zKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLmdldEhvc3QoZSksITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRUaXRsZSh0aGlzLl9kb2MpfSx0LnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0KXtzKCkuc2V0VGl0bGUodGhpcy5fZG9jLHQpfSx0fSgpO2Z1bmN0aW9uIEModCxlKXsidW5kZWZpbmVkIiE9dHlwZW9mIENPTVBJTEVEJiZDT01QSUxFRHx8KChpLlJhLm5nPWkuUmEubmd8fHt9KVt0XT1lKX12YXIgRT17QXBwbGljYXRpb25SZWY6aS5nLE5nWm9uZTppLnl9LE89InByb2JlIixTPSJjb3JlVG9rZW5zIjtmdW5jdGlvbiBrKHQpe3JldHVybiBPYmplY3QoaS5XKSh0KX1mdW5jdGlvbiBUKHQpe3JldHVybiBDKE8sayksQyhTLE9iamVjdChvLmEpKHt9LEUsKHR8fFtdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlLm5hbWVdPWUudG9rZW4sdH0se30pKSksZnVuY3Rpb24oKXtyZXR1cm4ga319dmFyIFA9bmV3IGkucCgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl96b25lPWUsdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQubWFuYWdlcj1ufSksdGhpcy5fcGx1Z2lucz10LnNsaWNlKCkucmV2ZXJzZSgpfXJldHVybiB0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sdC5wcm90b3R5cGUuX2ZpbmRQbHVnaW5Gb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Zm9yKHZhciBuPXRoaXMuX3BsdWdpbnMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuc3VwcG9ydHModCkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldCh0LGkpLGl9dGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgIit0KX0sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAiK3IrIiBmb3IgZXZlbnQgIitlKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxuKX0sdH0oKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPW5ldyBTZXQ7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0eWxlc1NldC5oYXModCl8fChlLl9zdHlsZXNTZXQuYWRkKHQpLG4uYWRkKHQpKX0pLHRoaXMub25TdHlsZXNBZGRlZChuKX0sdC5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldEFsbFN0eWxlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9LHR9KCksTT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9zdE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5oZWFkKSxufXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLl9hZGRTdHlsZXNUb0hvc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnRleHRDb250ZW50PXQsbi5fc3R5bGVOb2Rlcy5hZGQoZS5hcHBlbmRDaGlsZChyKSl9KX0sZS5wcm90b3R5cGUuYWRkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LHQpLHRoaXMuX2hvc3ROb2Rlcy5hZGQodCl9LGUucHJvdG90eXBlLnJlbW92ZUhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5faG9zdE5vZGVzLmRlbGV0ZSh0KX0sZS5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl9hZGRTdHlsZXNUb0hvc3QodCxuKX0pfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0eWxlTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcygpLnJlbW92ZSh0KX0pfSxlfShJKSxOPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxSPS8lQ09NUCUvZyxEPSJfbmdob3N0LSVDT01QJSIsRj0iX25nY29udGVudC0lQ09NUCUiO2Z1bmN0aW9uIEwodCxlLG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO0FycmF5LmlzQXJyYXkoaSk/TCh0LGksbik6KGk9aS5yZXBsYWNlKFIsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBWKHQpe3JldHVybiBmdW5jdGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fXZhciBCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IHoodCl9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIGkuUS5FbXVsYXRlZDp2YXIgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgcSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG47Y2FzZSBpLlEuTmF0aXZlOnJldHVybiBuZXcgRyh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsdCxlKTtkZWZhdWx0OmlmKCF0aGlzLnJlbmRlcmVyQnlDb21wSWQuaGFzKGUuaWQpKXt2YXIgcj1MKGUuaWQsZS5zdHlsZXMsW10pO3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMociksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLHRoaXMuZGVmYXVsdFJlbmRlcmVyKX1yZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXJ9fSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSx0fSgpLHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTltlXSx0KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QmJnQuaW5zZXJ0QmVmb3JlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzZWxlY3RvciAiJyt0KyciIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzJyk7cmV0dXJuIGUudGV4dENvbnRlbnQ9IiIsZX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKHIpe2U9cisiOiIrZTt2YXIgaT1OW3JdO2k/dC5zZXRBdHRyaWJ1dGVOUyhpLGUsbik6dC5zZXRBdHRyaWJ1dGUoZSxuKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7aWYobil7dmFyIHI9TltuXTtyP3QucmVtb3ZlQXR0cmlidXRlTlMocixlKTp0LnJlbW92ZUF0dHJpYnV0ZShuKyI6IitlKX1lbHNlIHQucmVtb3ZlQXR0cmlidXRlKGUpfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ImaS5GLkRhc2hDYXNlP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxuLHImaS5GLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1ufSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7biZpLkYuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7SChlLCJwcm9wZXJ0eSIpLHRbZV09bn0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0Lm5vZGVWYWx1ZT1lfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiBIKGUsImxpc3RlbmVyIiksInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLFYobikpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLFYobikpfSx0fSgpLFU9IkAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gSCh0LGUpe2lmKHQuY2hhckNvZGVBdCgwKT09PVUpdGhyb3cgbmV3IEVycm9yKCJGb3VuZCB0aGUgc3ludGhldGljICIrZSsiICIrdCsnLiBQbGVhc2UgaW5jbHVkZSBlaXRoZXIgIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiBvciAiTm9vcEFuaW1hdGlvbnNNb2R1bGUiIGluIHlvdXIgYXBwbGljYXRpb24uJyl9dmFyIFEscT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztpLmNvbXBvbmVudD1yO3ZhciBvPUwoci5pZCxyLnN0eWxlcyxbXSk7cmV0dXJuIG4uYWRkU3R5bGVzKG8pLGkuY29udGVudEF0dHI9Ri5yZXBsYWNlKFIsci5pZCksaS5ob3N0QXR0cj1ELnJlcGxhY2UoUixyLmlkKSxpfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLmFwcGx5VG9Ib3N0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsZSx0aGlzLmhvc3RBdHRyLCIiKX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLG4pe3ZhciByPXQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLGUsbik7cmV0dXJuIHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMscix0aGlzLmNvbnRlbnRBdHRyLCIiKSxyfSxlfSh6KSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7by5zaGFyZWRTdHlsZXNIb3N0PW4sby5ob3N0RWw9cixvLmNvbXBvbmVudD1pLG8uc2hhZG93Um9vdD1yLmNyZWF0ZVNoYWRvd1Jvb3QoKSxvLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdChvLnNoYWRvd1Jvb3QpO2Zvcih2YXIgYT1MKGkuaWQsaS5zdHlsZXMsW10pLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsLnRleHRDb250ZW50PWFbc10sby5zaGFkb3dSb290LmFwcGVuZENoaWxkKGwpfXJldHVybiBvfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLm5vZGVPclNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzLmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZENoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHQucHJvdG90eXBlLmluc2VydEJlZm9yZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdCh0LnByb3RvdHlwZS5wYXJlbnROb2RlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSkpKX0sZX0oeiksWT0idW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmUuX19zeW1ib2xfX3x8ZnVuY3Rpb24odCl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrdH0sVz1ZKCJhZGRFdmVudExpc3RlbmVyIiksWj1ZKCJyZW1vdmVFdmVudExpc3RlbmVyIiksSz17fSxYPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiOyJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZVtZKCJCTEFDS19MSVNURURfRVZFTlRTIildJiYoUT17fSk7dmFyICQ9ZnVuY3Rpb24odCl7cmV0dXJuISFRJiZRLmhhc093blByb3BlcnR5KHQpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPUtbdC50eXBlXTtpZihlKXt2YXIgbj10aGlzW2VdO2lmKG4pe3ZhciByPVt0XTtpZigxPT09bi5sZW5ndGgpcmV0dXJuKGE9blswXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLHIpOmEuaGFuZGxlci5hcHBseSh0aGlzLHIpO2Zvcih2YXIgaT1uLnNsaWNlKCksbz0wO288aS5sZW5ndGgmJiEwIT09dFtYXTtvKyspe3ZhciBhOyhhPWlbb10pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxyKTphLmhhbmRsZXIuYXBwbHkodGhpcyxyKX19fX0sdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ubmdab25lPW4saSYmT2JqZWN0KHIucikoaSl8fG8ucGF0Y2hFdmVudCgpLG99cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUucGF0Y2hFdmVudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRXZlbnQmJkV2ZW50JiZFdmVudC5wcm90b3R5cGUmJiFFdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKXt2YXIgdD1FdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPUV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMmJih0aGlzW1hdPSEwKSx0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxvPW47aWYoIXRbV118fGkueS5pc0luQW5ndWxhclpvbmUoKSYmISQoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsbywhMSk7ZWxzZXt2YXIgYT1LW2VdO2F8fChhPUtbZV09WSgiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIHM9dFthXSxsPXMmJnMubGVuZ3RoPjA7c3x8KHM9dFthXT1bXSk7dmFyIHU9JChlKT9ab25lLnJvb3Q6Wm9uZS5jdXJyZW50O2lmKDA9PT1zLmxlbmd0aClzLnB1c2goe3pvbmU6dSxoYW5kbGVyOm99KTtlbHNle2Zvcih2YXIgYz0hMSxmPTA7ZjxzLmxlbmd0aDtmKyspaWYoc1tmXS5oYW5kbGVyPT09byl7Yz0hMDticmVha31jfHxzLnB1c2goe3pvbmU6dSxoYW5kbGVyOm99KX1sfHx0W1ddKGUsSiwhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsbyl9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10W1pdO2lmKCFyKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7dmFyIGk9S1tlXSxvPWkmJnRbaV07aWYoIW8pcmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0LFtlLG4sITFdKTtmb3IodmFyIGE9ITEscz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uaGFuZGxlcj09PW4pe2E9ITAsby5zcGxpY2UocywxKTticmVha31hPzA9PT1vLmxlbmd0aCYmci5hcHBseSh0LFtlLEosITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KGopLGV0PXtwYW46ITAscGFuc3RhcnQ6ITAscGFubW92ZTohMCxwYW5lbmQ6ITAscGFuY2FuY2VsOiEwLHBhbmxlZnQ6ITAscGFucmlnaHQ6ITAscGFudXA6ITAscGFuZG93bjohMCxwaW5jaDohMCxwaW5jaHN0YXJ0OiEwLHBpbmNobW92ZTohMCxwaW5jaGVuZDohMCxwaW5jaGNhbmNlbDohMCxwaW5jaGluOiEwLHBpbmNob3V0OiEwLHByZXNzOiEwLHByZXNzdXA6ITAscm90YXRlOiEwLHJvdGF0ZXN0YXJ0OiEwLHJvdGF0ZW1vdmU6ITAscm90YXRlZW5kOiEwLHJvdGF0ZWNhbmNlbDohMCxzd2lwZTohMCxzd2lwZWxlZnQ6ITAsc3dpcGVyaWdodDohMCxzd2lwZXVwOiEwLHN3aXBlZG93bjohMCx0YXA6ITB9LG50PW5ldyBpLnAoIkhhbW1lckdlc3R1cmVDb25maWciKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fY29uZmlnPW4saS5jb25zb2xlPXIsaX1yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFldC5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpJiYhdGhpcy5pc0N1c3RvbUV2ZW50KHQpfHwhd2luZG93LkhhbW1lciYmKHRoaXMuY29uc29sZS53YXJuKCJIYW1tZXIuanMgaXMgbm90IGxvYWRlZCwgY2FuIG5vdCBiaW5kICciK3QrIicgZXZlbnQuIiksMSkpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9dGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3ZhciBvPXIuX2NvbmZpZy5idWlsZEhhbW1lcih0KSxhPWZ1bmN0aW9uKHQpe2kucnVuR3VhcmRlZChmdW5jdGlvbigpe24odCl9KX07cmV0dXJuIG8ub24oZSxhKSxmdW5jdGlvbigpe3JldHVybiBvLm9mZihlLGEpfX0pfSxlLnByb3RvdHlwZS5pc0N1c3RvbUV2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9LGV9KGopLG90PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLGF0PXthbHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5fSxjb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmN0cmxLZXl9LG1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWV0YUtleX0sc2hpZnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hpZnRLZXl9fSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9ZS5wYXJzZUV2ZW50TmFtZSh0KX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5wYXJzZUV2ZW50TmFtZShuKSxvPWUuZXZlbnRDYWxsYmFjayhpLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzKCkub25BbmRDYW5jZWwodCxpLmRvbUV2ZW50TmFtZSxvKX0pfSxlLnBhcnNlRXZlbnROYW1lPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9bi5zaGlmdCgpO2lmKDA9PT1uLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7dmFyIGk9ZS5fbm9ybWFsaXplS2V5KG4ucG9wKCkpLG89IiI7aWYob3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksbys9dCsiLiIpfSksbys9aSwwIT1uLmxlbmd0aHx8MD09PWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXt9O3JldHVybiBhLmRvbUV2ZW50TmFtZT1yLGEuZnVsbEtleT1vLGF9LGUuZ2V0RXZlbnRGdWxsS2V5PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49cygpLmdldEV2ZW50S2V5KHQpO3JldHVybiIgIj09PShuPW4udG9Mb3dlckNhc2UoKSk/bj0ic3BhY2UiOiIuIj09PW4mJihuPSJkb3QiKSxvdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPW4mJigwLGF0W3JdKSh0KSYmKGUrPXIrIi4iKX0pLGUrPW59LGUuZXZlbnRDYWxsYmFjaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe2UuZ2V0RXZlbnRGdWxsS2V5KGkpPT09dCYmci5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7cmV0dXJuIG4oaSl9KX19LGUuX25vcm1hbGl6ZUtleT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fSxlfShqKSxsdD1mdW5jdGlvbigpe30sdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG59cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiBudWxsO3N3aXRjaCh0KXtjYXNlIGkuSC5OT05FOnJldHVybiBlO2Nhc2UgaS5ILkhUTUw6cmV0dXJuIGUgaW5zdGFuY2VvZiBmdD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiSFRNTCIpLE9iamVjdChpLkVhKSh0aGlzLl9kb2MsU3RyaW5nKGUpKSk7Y2FzZSBpLkguU1RZTEU6cmV0dXJuIGUgaW5zdGFuY2VvZiBodD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU3R5bGUiKSxPYmplY3QoaS5GYSkoZSkpO2Nhc2UgaS5ILlNDUklQVDppZihlIGluc3RhbmNlb2YgcHQpcmV0dXJuIGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlNjcmlwdCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2UgaS5ILlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIG10fHxlIGluc3RhbmNlb2YgZHQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLE9iamVjdChpLkdhKShTdHJpbmcoZSkpKTtjYXNlIGkuSC5SRVNPVVJDRV9VUkw6aWYoZSBpbnN0YW5jZW9mIG10KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJSZXNvdXJjZVVSTCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9fSxlLnByb3RvdHlwZS5jaGVja05vdFNhZmVWYWx1ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBjdCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVpcmVkIGEgc2FmZSAiK2UrIiwgZ290IGEgIit0LmdldFR5cGVOYW1lKCkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFVybD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGR0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtdCh0KX0sZX0obHQpLGN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogIit0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykifSx0fSgpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIkhUTUwifSxlfShjdCksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU3R5bGUifSxlfShjdCkscHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChvLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU2NyaXB0In0sZX0oY3QpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoby5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlVSTCJ9LGV9KGN0KSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KG8uYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJSZXNvdXJjZVVSTCJ9LGV9KGN0KSx5dD1be3Byb3ZpZGU6aS5BLHVzZVZhbHVlOnIuc30se3Byb3ZpZGU6aS5CLHVzZVZhbHVlOmZ1bmN0aW9uKCl7cC5tYWtlQ3VycmVudCgpLHcuaW5pdCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6ci5wLHVzZUNsYXNzOmcsZGVwczpbbV19LHtwcm92aWRlOm0sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZGVwczpbXX1dLGd0PU9iamVjdChpLlMpKGkuWiwiYnJvd3NlciIseXQpO2Z1bmN0aW9uIHZ0KCl7cmV0dXJuIG5ldyBpLm19dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXJldHVybiB0LndpdGhTZXJ2ZXJUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6aS5jLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOmIsdXNlRXhpc3Rpbmc6aS5jfSxfXX19LHR9KCk7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd30sWm44RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigicHNXMCIpLGk9bigibUNoRiIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksT2JqZWN0KHIuYSkoaS5hLHQpfX0sYjdtVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIHIuYihlLHQpLGV9KEVycm9yKX0sY3JuZDpmdW5jdGlvbih0LGUsbil7dmFyIHI9eyIuL3NlY29uZC1sZXZlbC1jb21wb25lbnRzL3NlY29uZC1sZXZlbC1jb21wb25lbnRzLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiM1lDUCIsMF19O2Z1bmN0aW9uIGkodCl7dmFyIGU9clt0XTtyZXR1cm4gZT9uLmUoZVsxXSkudGhlbihmdW5jdGlvbigpe3JldHVybiBuKGVbMF0pfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICInK3QrJyIuJyk7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfSl9aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLmlkPSJjcm5kIix0LmV4cG9ydHM9aX0sZWloczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9e2U6e319fSxpTHhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj0hMSxpPXtQcm9taXNlOnZvaWQgMCxzZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyh0KXtyPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIHJ9fX0saXNieTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGh9fSxtQ2hGOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxtclNHOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtmdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1yKHQsZSksdC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfXZhciBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIGU9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdH07ZnVuY3Rpb24gYSh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gdDt2YXIgcixpLG89bi5jYWxsKHQpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PWV8fGUtLSA+MCkmJiEocj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiBsKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQ9dC5jb25jYXQocyhhcmd1bWVudHNbZV0pKTtyZXR1cm4gdH19LG5rWTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zY2hlZHVsZX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxwMGliOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJua1k3Iiksbz1uKCJabjhEIiksYT1uKCJJVVRiIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1udWxsLGw9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gT2JqZWN0KGkuYSkobCk/KHM9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIGwmJihuPXQucG9wKCkpLG51bGw9PT1zJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIHIuYT90WzBdOk9iamVjdChvLmEpKG4pKE9iamVjdChhLmEpKHQscykpfX0scE1uUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigiWllDaSIpLG89ci5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5rYigwLFsodCgpKCksci5RYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxyLlBhKDEsMjEyOTkyLG51bGwsMCxpLm4sW2kuYixyLlAsci5qLFs4LG51bGxdLHIuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIHM9ci5NYSgibmctY29tcG9uZW50IixpLnIsZnVuY3Rpb24odCl7cmV0dXJuIHIua2IoMCxbKHQoKSgpLHIuUWEoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLGEsbykpLHIuUGEoMSw0OTE1MixudWxsLDAsaS5yLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKX0scHNXMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIHI9bigibXJTRyIpLGk9bigiem90bSIpLG89bigiTUdCUyIpLGE9bigiNjdZLyIpLHM9bigiMC91USIpO2Z1bmN0aW9uIGwodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHIpe3JldHVybiByLnBpcGUobChmdW5jdGlvbihuLHIpe3JldHVybiBPYmplY3Qocy5hKSh0KG4scikpLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCxpKXtyZXR1cm4gZShuLHQscixpKX0pKX0sbikpfTooIm51bWJlciI9PXR5cGVvZiBlJiYobj1lKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyB1KHQsbikpfSl9dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx0aGlzLnByb2plY3Q9dCx0aGlzLmNvbmN1cnJlbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgYyh0LHRoaXMucHJvamVjdCx0aGlzLmNvbmN1cnJlbnQpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PXImJihyPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucHJvamVjdD1uLGkuY29uY3VycmVudD1yLGkuaGFzQ29tcGxldGVkPSExLGkuYnVmZmVyPVtdLGkuYWN0aXZlPTAsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD90aGlzLl90cnlOZXh0KHQpOnRoaXMuYnVmZmVyLnB1c2godCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5hY3RpdmUrKyx0aGlzLl9pbm5lclN1YihlLHQsbil9LGUucHJvdG90eXBlLl9pbm5lclN1Yj1mdW5jdGlvbih0LGUsbil7dGhpcy5hZGQoT2JqZWN0KGkuYSkodGhpcyx0LGUsbikpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmhhc0NvbXBsZXRlZD0hMCwwPT09dGhpcy5hY3RpdmUmJjA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idWZmZXI7dGhpcy5yZW1vdmUodCksdGhpcy5hY3RpdmUtLSxlLmxlbmd0aD4wP3RoaXMuX25leHQoZS5zaGlmdCgpKTowPT09dGhpcy5hY3RpdmUmJnRoaXMuaGFzQ29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG8uYSl9LHB1Z1Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJpc2J5IiksaT1uKCJNY1NvIiksbz1uKCIyQmRqIiksYT1uKCJFaG1rIikscz1uKCJlaWhzIiksbD1uKCJtclNHIiksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciByPXQuY2FsbCh0aGlzLG4/bi5sZW5ndGgrIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuICAiK24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMSsiKSAiK3QudG9TdHJpbmcoKX0pLmpvaW4oIlxuICAiKToiIil8fHRoaXM7cmV0dXJuIHIuZXJyb3JzPW4sci5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YocixlLnByb3RvdHlwZSkscn1yZXR1cm4gbC5iKGUsdCksZX0oRXJyb3IpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGwsdCYmKHRoaXMuX3Vuc3Vic2NyaWJlPXQpfXZhciBlO3JldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0LGU9ITE7aWYoIXRoaXMuY2xvc2VkKXt2YXIgbj10aGlzLl9wYXJlbnQsbD10aGlzLl9wYXJlbnRzLGM9dGhpcy5fdW5zdWJzY3JpYmUsaD10aGlzLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGw7Zm9yKHZhciBwPS0xLGQ9bD9sLmxlbmd0aDowO247KW4ucmVtb3ZlKHRoaXMpLG49KytwPGQmJmxbcF18fG51bGw7aWYoT2JqZWN0KG8uYSkoYykmJk9iamVjdChhLmEpKGMpLmNhbGwodGhpcyk9PT1zLmEmJihlPSEwLHQ9dHx8KHMuYS5lIGluc3RhbmNlb2YgdT9mKHMuYS5lLmVycm9ycyk6W3MuYS5lXSkpLE9iamVjdChyLmEpKGgpKWZvcihwPS0xLGQ9aC5sZW5ndGg7KytwPGQ7KXt2YXIgbT1oW3BdO2lmKE9iamVjdChpLmEpKG0pJiZPYmplY3QoYS5hKShtLnVuc3Vic2NyaWJlKS5jYWxsKG0pPT09cy5hKXtlPSEwLHQ9dHx8W107dmFyIHk9cy5hLmU7eSBpbnN0YW5jZW9mIHU/dD10LmNvbmNhdChmKHkuZXJyb3JzKSk6dC5wdXNoKHkpfX1pZihlKXRocm93IG5ldyB1KHQpfX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKCFlfHxlPT09dC5FTVBUWSlyZXR1cm4gdC5FTVBUWTtpZihlPT09dGhpcylyZXR1cm4gdGhpczt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobi5jbG9zZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLnVuc3Vic2NyaWJlKXJldHVybiBuO2lmKHRoaXMuY2xvc2VkKXJldHVybiBuLnVuc3Vic2NyaWJlKCksbjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5fYWRkUGFyZW50KXt2YXIgcj1uOyhuPW5ldyB0KS5fc3Vic2NyaXB0aW9ucz1bcl19YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0ZWFyZG93biAiK2UrIiBhZGRlZCB0byBTdWJzY3JpcHRpb24uIil9cmV0dXJuKHRoaXMuX3N1YnNjcmlwdGlvbnN8fCh0aGlzLl9zdWJzY3JpcHRpb25zPVtdKSkucHVzaChuKSxuLl9hZGRQYXJlbnQodGhpcyksbn0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKX19LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyZW50LG49dGhpcy5fcGFyZW50cztlJiZlIT09dD9uPy0xPT09bi5pbmRleE9mKHQpJiZuLnB1c2godCk6dGhpcy5fcGFyZW50cz1bdF06dGhpcy5fcGFyZW50PXR9LHQuRU1QVFk9KChlPW5ldyB0KS5jbG9zZWQ9ITAsZSksdH0oKTtmdW5jdGlvbiBmKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlIGluc3RhbmNlb2YgdT9lLmVycm9yczplKX0sW10pfX0sdDlmWjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigibXJTRyIpLGk9bigiRkZPbyIpLG89bigiYjdtVyIpLGE9bigiRzVKMSIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoYS5iKSgpOmUubGlmdChuZXcgbCh0KSl9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBvLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLnRvdGFsKSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLmNvdW50PTAscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50b3RhbCxuPSsrdGhpcy5jb3VudDtuPD1lJiYodGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLG49PT1lJiYodGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKSkpfSxlfShpLmEpfSx1NjdEOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJFbjgrIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXRbci5hXSgpOzspe3ZhciBpPW4ubmV4dCgpO2lmKGkuZG9uZSl7ZS5jb21wbGV0ZSgpO2JyZWFrfWlmKGUubmV4dChpLnZhbHVlKSxlLmNsb3NlZClicmVha31yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5yZXR1cm4mJmUuYWRkKGZ1bmN0aW9uKCl7bi5yZXR1cm4mJm4ucmV0dXJuKCl9KSxlfX19LHVNYU86ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc3ViamVjdD1lLHIuc3Vic2NyaWJlcj1uLHIuY2xvc2VkPSExLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDt2YXIgdD10aGlzLnN1YmplY3QsZT10Lm9ic2VydmVycztpZih0aGlzLnN1YmplY3Q9bnVsbCxlJiYwIT09ZS5sZW5ndGgmJiF0LmlzU3RvcHBlZCYmIXQuY2xvc2VkKXt2YXIgbj1lLmluZGV4T2YodGhpcy5zdWJzY3JpYmVyKTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fX0sZX0obigicHVnVCIpLmEpfSx4TXlFOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIiksbz1uKCIrdW1LIiksYT1uKCIyQmRqIik7ZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLmxpZnQobmV3IGwodCxlLG4pKX19dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5leHRPck9ic2VydmVyPXQsdGhpcy5lcnJvcj1lLHRoaXMuY29tcGxldGU9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdSh0LHRoaXMubmV4dE9yT2JzZXJ2ZXIsdGhpcy5lcnJvcix0aGlzLmNvbXBsZXRlKSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBzPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBzLl90YXBOZXh0PW8uYSxzLl90YXBFcnJvcj1vLmEscy5fdGFwQ29tcGxldGU9by5hLHMuX3RhcEVycm9yPXJ8fG8uYSxzLl90YXBDb21wbGV0ZT1pfHxvLmEsT2JqZWN0KGEuYSkobik/KHMuX2NvbnRleHQ9cyxzLl90YXBOZXh0PW4pOm4mJihzLl9jb250ZXh0PW4scy5fdGFwTmV4dD1uLm5leHR8fG8uYSxzLl90YXBFcnJvcj1uLmVycm9yfHxvLmEscy5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8by5hKSxzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwRXJyb3IuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShpLmEpfSx4VGxhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSJ9LHkzQnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiK3VtSyIpO2Z1bmN0aW9uIGkoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIG8odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdD8xPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSh0KX0sZSl9OnIuYX19LHpVbmI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLnIoZSk7dmFyIHIsaSxvPW4oIkNjbkciKSxhPWZ1bmN0aW9uKCl7fSxzPW4oIklwMFIiKSxsPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCYmSW50bC52OEJyZWFrSXRlcmF0b3IsdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcGxhdGZvcm1JZD10LHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/T2JqZWN0KHMucSkodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhbCkmJiJ1bmRlZmluZWQiIT10eXBlb2YgQ1NTJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cuTVNTdHJlYW0sdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH1yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoby5BLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gYygpe2lmKG51bGw9PXImJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcj0hMH19KSl9ZmluYWxseXtyPXJ8fCExfXJldHVybiByfXZhciBmPVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIGgoKXtpZihpKXJldHVybiBpO2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gaT1uZXcgU2V0KGYpO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGk9bmV3IFNldChmLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoInR5cGUiLGUpLHQudHlwZT09PWV9KSl9dmFyIHA9ZnVuY3Rpb24oKXt9LGQ9bigibXJTRyIpLG09bigibmtZNyIpLHk9bigiaXNieSIpLGc9bigiTUdCUyIpLHY9bigiem90bSIpLGI9bigiSVVUYiIpLF89e30sdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB4KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfSx0fSgpLHg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnJlc3VsdFNlbGVjdG9yPW4sci5hY3RpdmU9MCxyLnZhbHVlcz1bXSxyLm9ic2VydmFibGVzPVtdLHJ9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2goXyksdGhpcy5vYnNlcnZhYmxlcy5wdXNoKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9ic2VydmFibGVzLGU9dC5sZW5ndGg7aWYoMD09PWUpdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO2Vsc2V7dGhpcy5hY3RpdmU9ZSx0aGlzLnRvUmVzcG9uZD1lO2Zvcih2YXIgbj0wO248ZTtuKyspe3ZhciByPXRbbl07dGhpcy5hZGQoT2JqZWN0KHYuYSkodGhpcyxyLHIsbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/b1tuXT09PV8/LS10aGlzLnRvUmVzcG9uZDp0aGlzLnRvUmVzcG9uZDowO29bbl09ZSwwPT09YSYmKHRoaXMucmVzdWx0U2VsZWN0b3I/dGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3Iobyk6dGhpcy5kZXN0aW5hdGlvbi5uZXh0KG8uc2xpY2UoKSkpfSxlLnByb3RvdHlwZS5fdHJ5UmVzdWx0U2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5yZXN1bHRTZWxlY3Rvci5hcHBseSh0aGlzLHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShnLmEpLEM9bigiSzlJYSIpLEU9bigiNmJsRiIpLE89bigiMkJkaiIpLFM9bigiNjdZLyIpO2Z1bmN0aW9uIGsodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IFQodCkpfX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5ub3RpZmllcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IFAodCkscj1PYmplY3Qodi5hKShuLHRoaXMubm90aWZpZXIpO3JldHVybiByJiYhci5jbG9zZWQ/KG4uYWRkKHIpLGUuc3Vic2NyaWJlKG4pKTpufSx0fSgpLFA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKCl7fSxlfShnLmEpLEE9bigiUFU4TCIpLGo9bigiRzVKMSIpLEk9bigiRi9YTCIpLE09bigiMC91USIpLE49bigiVHhqZyIpO2Z1bmN0aW9uIFIoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbdC5sZW5ndGgtMV07T2JqZWN0KG0uYSkobik/dC5wb3AoKTpuPW51bGw7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAxPT09dC5sZW5ndGh8fDI9PT10Lmxlbmd0aCYmT2JqZWN0KG0uYSkodFsxXSk/T2JqZWN0KE0uYSkodFswXSk6T2JqZWN0KE4uYSkoKShJLmEuYXBwbHkodm9pZCAwLHQpKX0oMSE9PXJ8fG4/cj4wP09iamVjdChiLmEpKHQsbik6T2JqZWN0KGouYikobik6T2JqZWN0KEEuYSkodFswXSksZSl9fWZ1bmN0aW9uIEQodCl7cmV0dXJuIG51bGwhPXQmJiIiK3QhPSJmYWxzZSJ9ZnVuY3Rpb24gRih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxmdW5jdGlvbih0KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh0KSkmJiFpc05hTihOdW1iZXIodCkpfSh0KT9OdW1iZXIodCk6ZX1mdW5jdGlvbiBMKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfWZ1bmN0aW9uIFYodCl7cmV0dXJuIG51bGw9PXQ/IiI6InN0cmluZyI9PXR5cGVvZiB0P3Q6dCsicHgifXZhciBCLHo9ZnVuY3Rpb24oKXt9LFU9bmV3IFNldCxIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOlF9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZighVS5oYXModCkpdHJ5e0J8fCgoQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQikpLEIuc2hlZXQmJihCLnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSxVLmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKHUpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gUSh0KXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe319fXZhciBxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMubWVkaWFNYXRjaGVyPXQsdGhpcy56b25lPWUsdGhpcy5fcXVlcmllcz1uZXcgTWFwLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0PW5ldyBDLmF9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmlzTWF0Y2hlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBHKEwodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLHI9bnVsbDtyZXR1cm4gT2JqZWN0KG0uYSkodFt0Lmxlbmd0aC0xXSkmJihyPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJk9iamVjdCh5LmEpKHRbMF0pJiYodD10WzBdKSxPYmplY3QoYi5hKSh0LHIpLmxpZnQobmV3IHcobikpfShHKEwodCkpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fcmVnaXN0ZXJRdWVyeSh0KS5vYnNlcnZhYmxlfSkpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lm1hdGNoZXN9KX19KSl9LHQucHJvdG90eXBlLl9yZWdpc3RlclF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5fcXVlcmllcy5oYXModCkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KHQpO3ZhciBuPXRoaXMubWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEodCkscj17b2JzZXJ2YWJsZTpmdW5jdGlvbiB0KGUsbixyKXtyZXR1cm4gcj90KGUsbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHkuYSkodCk/ci5hcHBseSh2b2lkIDAsdCk6cih0KX0pKTpuZXcgRS5hKGZ1bmN0aW9uKHQpe3ZhciByLGk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHQubmV4dCgxPT09ZS5sZW5ndGg/ZVswXTplKX07dHJ5e3I9ZShpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0LmVycm9yKGUpfWlmKE9iamVjdChPLmEpKG4pKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuKGkscil9fSl9KGZ1bmN0aW9uKHQpe24uYWRkTGlzdGVuZXIoZnVuY3Rpb24obil7cmV0dXJuIGUuem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdChuKX0pfSl9LGZ1bmN0aW9uKHQpe24ucmVtb3ZlTGlzdGVuZXIoZnVuY3Rpb24obil7cmV0dXJuIGUuem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdChuKX0pfSl9KS5waXBlKGsodGhpcy5fZGVzdHJveVN1YmplY3QpLFIobiksT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5tYXRjaGVzfX0pKSxtcWw6bn07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KHQscikscn0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoSCksT2JqZWN0KG8uWCkoby55KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIEcodCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCIsIil9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSl9dmFyIFk9e1hTbWFsbDoiKG1heC13aWR0aDogNTk5cHgpIixTbWFsbDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLE1lZGl1bToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIixMYXJnZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSIsWExhcmdlOiIobWluLXdpZHRoOiAxOTIwcHgpIixIYW5kc2V0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixXZWI6IihtaW4td2lkdGg6IDg0MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDEyODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsSGFuZHNldFBvcnRyYWl0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixUYWJsZXRQb3J0cmFpdDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixXZWJQb3J0cmFpdDoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsSGFuZHNldExhbmRzY2FwZToiKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFRhYmxldExhbmRzY2FwZToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYkxhbmRzY2FwZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIn0sVz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5icmVha3BvaW50T2JzZXJ2ZXI9dCx0aGlzLnNob3dTdWJtZW51PSExLHRoaXMub3BlbmVkU2lkZU5hdj0hMCx0aGlzLmlzSGFuZHNldCQ9dGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShZLkhhbmRzZXQpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2hlc30pKX1yZXR1cm4gdC5wcm90b3R5cGUub3BlblNpZGVOYXY9ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZFNpZGVOYXY9ITAhPT10aGlzLm9wZW5lZFNpZGVOYXZ9LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLFo9ZnVuY3Rpb24oKXt9LEs9IioiO2Z1bmN0aW9uIFgodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MixzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gJCh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBKKHQpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKHQpfXZhciB0dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9LHQucHJvdG90eXBlLnRyaWdnZXJNaWNyb3Rhc2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO0ooZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfSx0LnByb3RvdHlwZS5fb25TdGFydD1mdW5jdGlvbigpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX29uRmluaXNoKCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiAwfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDt2YXIgbj0wLHI9MCxpPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/SihmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysrcj09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK2k9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksbnQ9IiEiLHJ0PTI3O2Z1bmN0aW9uIGl0KHQsZSxuLHIpe3JldHVybiBPYmplY3QoTy5hKShuKSYmKHI9bixuPXZvaWQgMCkscj9pdCh0LGUsbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHkuYSkodCk/ci5hcHBseSh2b2lkIDAsdCk6cih0KX0pKTpuZXcgRS5hKGZ1bmN0aW9uKHIpeyFmdW5jdGlvbiB0KGUsbixyLGksbyl7dmFyIGE7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUV2ZW50TGlzdGVuZXJ9KGUpKXt2YXIgcz1lO2UuYWRkRXZlbnRMaXN0ZW5lcihuLHIsbyksYT1mdW5jdGlvbigpe3JldHVybiBzLnJlbW92ZUV2ZW50TGlzdGVuZXIobixyLG8pfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiYmImZ1bmN0aW9uIj09dHlwZW9mIHQub2ZmfShlKSl7dmFyIGw9ZTtlLm9uKG4sciksYT1mdW5jdGlvbigpe3JldHVybiBsLm9mZihuLHIpfX1lbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlTGlzdGVuZXJ9KGUpKXt2YXIgdT1lO2UuYWRkTGlzdGVuZXIobixyKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIHUucmVtb3ZlTGlzdGVuZXIobixyKX19ZWxzZXtpZighZXx8IWUubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7Zm9yKHZhciBjPTAsZj1lLmxlbmd0aDtjPGY7YysrKXQoZVtjXSxuLHIsaSxvKX1pLmFkZChhKX0odCxlLGZ1bmN0aW9uKHQpe3IubmV4dChhcmd1bWVudHMubGVuZ3RoPjE/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTp0KX0scixuKX0pfU9iamVjdDt2YXIgb3Q9bigicDBpYiIpLGF0PW4oInB1Z1QiKSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9ZSxyLndvcms9bixyLnBlbmRpbmc9ITEscn1yZXR1cm4gZC5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPXQ7dmFyIG49dGhpcy5pZCxyPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1uJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHIsbixlKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9ZSx0aGlzLmlkPXRoaXMuaWR8fHRoaXMucmVxdWVzdEFzeW5jSWQocix0aGlzLmlkLGUpLHRoaXN9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksbil9LGUucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj0wKSxudWxsIT09biYmdGhpcy5kZWxheT09PW4mJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO2NsZWFySW50ZXJ2YWwoZSl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO3ZhciBuPXRoaXMuX2V4ZWN1dGUodCxlKTtpZihuKXJldHVybiBuOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfSxlLnByb3RvdHlwZS5fZXhlY3V0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSExLHI9dm9pZCAwO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2godCl7bj0hMCxyPSEhdCYmdHx8bmV3IEVycm9yKHQpfWlmKG4pcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlkLGU9dGhpcy5zY2hlZHVsZXIsbj1lLmFjdGlvbnMscj1uLmluZGV4T2YodGhpcyk7dGhpcy53b3JrPW51bGwsdGhpcy5zdGF0ZT1udWxsLHRoaXMucGVuZGluZz0hMSx0aGlzLnNjaGVkdWxlcj1udWxsLC0xIT09ciYmbi5zcGxpY2UociwxKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsfSxlfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzKXx8dGhpc31yZXR1cm4gZC5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksdGhpc30sZX0oYXQuYSkpLGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4pe3ZvaWQgMD09PW4mJihuPXQubm93KSx0aGlzLlNjaGVkdWxlckFjdGlvbj1lLHRoaXMubm93PW59cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbmV3IHRoaXMuU2NoZWR1bGVyQWN0aW9uKHRoaXMsdCkuc2NoZWR1bGUobixlKX0sdC5ub3c9RGF0ZS5ub3c/RGF0ZS5ub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LHR9KCksdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLHIpe3ZvaWQgMD09PXImJihyPWx0Lm5vdyk7dmFyIGk9dC5jYWxsKHRoaXMsbixmdW5jdGlvbigpe3JldHVybiBlLmRlbGVnYXRlJiZlLmRlbGVnYXRlIT09aT9lLmRlbGVnYXRlLm5vdygpOnIoKX0pfHx0aGlzO3JldHVybiBpLmFjdGlvbnM9W10saS5hY3RpdmU9ITEsaS5zY2hlZHVsZWQ9dm9pZCAwLGl9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKG4scixpKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MCksZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PXRoaXM/ZS5kZWxlZ2F0ZS5zY2hlZHVsZShuLHIsaSk6dC5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLG4scixpKX0sZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3Rpb25zO2lmKHRoaXMuYWN0aXZlKWUucHVzaCh0KTtlbHNle3ZhciBuO3RoaXMuYWN0aXZlPSEwO2Rve2lmKG49dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUodD1lLnNoaWZ0KCkpO2lmKHRoaXMuYWN0aXZlPSExLG4pe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBufX19LGV9KGx0KSxjdD1uZXcgdXQoc3QpLGZ0PW4oIkVobWsiKSxodD1uKCJlaWhzIikscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZHVyYXRpb25TZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBkdCh0LHRoaXMuZHVyYXRpb25TZWxlY3RvcikpfSx0fSgpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5kdXJhdGlvblNlbGVjdG9yPW4sci5oYXNWYWx1ZT0hMSxyfXJldHVybiBkLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLnZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCwhdGhpcy50aHJvdHRsZWQpe3ZhciBlPU9iamVjdChmdC5hKSh0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKHQpO2lmKGU9PT1odC5hKXRoaXMuZGVzdGluYXRpb24uZXJyb3IoaHQuYS5lKTtlbHNle3ZhciBuPU9iamVjdCh2LmEpKHRoaXMsZSk7IW58fG4uY2xvc2VkP3RoaXMuY2xlYXJUaHJvdHRsZSgpOnRoaXMuYWRkKHRoaXMudGhyb3R0bGVkPW4pfX19LGUucHJvdG90eXBlLmNsZWFyVGhyb3R0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZhbHVlLGU9dGhpcy5oYXNWYWx1ZSxuPXRoaXMudGhyb3R0bGVkO24mJih0aGlzLnJlbW92ZShuKSx0aGlzLnRocm90dGxlZD1udWxsLG4udW5zdWJzY3JpYmUoKSksZSYmKHRoaXMudmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KSl9LGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5jbGVhclRocm90dGxlKCl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5jbGVhclRocm90dGxlKCl9LGV9KGcuYSk7ZnVuY3Rpb24gbXQodCl7cmV0dXJuIU9iamVjdCh5LmEpKHQpJiZ0LXBhcnNlRmxvYXQodCkrMT49MH1mdW5jdGlvbiB5dCh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIHI9LTE7cmV0dXJuIG10KGUpP3I9TnVtYmVyKGUpPDE/MTpOdW1iZXIoZSk6T2JqZWN0KG0uYSkoZSkmJihuPWUpLE9iamVjdChtLmEpKG4pfHwobj1jdCksbmV3IEUuYShmdW5jdGlvbihlKXt2YXIgaT1tdCh0KT90Oit0LW4ubm93KCk7cmV0dXJuIG4uc2NoZWR1bGUoZ3QsaSx7aW5kZXg6MCxwZXJpb2Q6cixzdWJzY3JpYmVyOmV9KX0pfWZ1bmN0aW9uIGd0KHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxyPXQuc3Vic2NyaWJlcjtpZihyLm5leHQoZSksIXIuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIHIuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fWZ1bmN0aW9uIHZ0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWN0KSxuPWZ1bmN0aW9uKCl7cmV0dXJuIHl0KHQsZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHB0KG4pKX07dmFyIG59dmFyIGJ0PW4oIlZuRC8iKSxfdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX3Njcm9sbGVkPW5ldyBDLmEsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2Nyb2xsZWQubmV4dCh0KX0pO3RoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQodCxuKX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KHQpO2UmJihlLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLnNjcm9sbGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIwKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/RS5hLmNyZWF0ZShmdW5jdGlvbihuKXtlLl9nbG9iYWxTdWJzY3JpcHRpb258fGUuX2FkZEdsb2JhbExpc3RlbmVyKCk7dmFyIHI9dD4wP2UuX3Njcm9sbGVkLnBpcGUodnQodCkpLnN1YnNjcmliZShuKTplLl9zY3JvbGxlZC5zdWJzY3JpYmUobik7cmV0dXJuIGUuX3Njcm9sbGVkQ291bnQrKyxmdW5jdGlvbigpe3IudW5zdWJzY3JpYmUoKSxlLl9zY3JvbGxlZENvdW50LS0sZS5fc2Nyb2xsZWRDb3VudHx8ZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpPYmplY3QoSS5hKSgpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LmRlcmVnaXN0ZXIobil9KSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5hbmNlc3RvclNjcm9sbGVkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModCk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZSkucGlwZShPYmplY3QoYnQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR8fG4uaW5kZXhPZih0KT4tMX0pKX0sdC5wcm90b3R5cGUuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24ocixpKXtlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGksdCkmJm4ucHVzaChpKX0pLG59LHQucHJvdG90eXBlLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5uYXRpdmVFbGVtZW50LHI9dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihuPT1yKXJldHVybiEwfXdoaWxlKG49bi5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2FkZEdsb2JhbExpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGl0KHdpbmRvdy5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3Njcm9sbGVkLm5leHQoKX0pfSl9LHQucHJvdG90eXBlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoby55KSxPYmplY3Qoby5YKSh1KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fc2Nyb2xsPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZWxlbWVudFNjcm9sbGVkPW5ldyBDLmEsdGhpcy5fc2Nyb2xsTGlzdGVuZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX2VsZW1lbnRTY3JvbGxlZC5uZXh0KHQpfX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0Ll9zY3JvbGxMaXN0ZW5lcil9KSx0aGlzLl9zY3JvbGwucmVnaXN0ZXIodGhpcyl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fc2Nyb2xsTGlzdGVuZXImJnRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9zY3JvbGxMaXN0ZW5lcil9LHQucHJvdG90eXBlLmVsZW1lbnRTY3JvbGxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50U2Nyb2xsZWQuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmdldEVsZW1lbnRSZWY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZn0sdH0oKSx4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX3BsYXRmb3JtPXQsdGhpcy5fY2hhbmdlPXQuaXNCcm93c2VyP2UucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KG90LmEpKGl0KHdpbmRvdywicmVzaXplIiksaXQod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOk9iamVjdChJLmEpKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLHI9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3ArcixyaWdodDp0LmxlZnQrbixoZWlnaHQ6cix3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZSh2dCh0KSk6dGhpcy5fY2hhbmdlfSx0LnByb3RvdHlwZS5fdXBkYXRlVmlld3BvcnRTaXplPWZ1bmN0aW9uKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6d2luZG93LmlubmVyV2lkdGgsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKSh1KSxPYmplY3Qoby5YKShvLnkpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksQ3Q9ZnVuY3Rpb24oKXt9LEV0PW4oInQ5ZloiKTtmdW5jdGlvbiBPdCgpe3Rocm93IEVycm9yKCJIb3N0IGFscmVhZHkgaGFzIGEgcG9ydGFsIGF0dGFjaGVkIil9dmFyIFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10JiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhIHBvcnRhbCB0byBhIG51bGwgUG9ydGFsT3V0bGV0Iil9KCksdC5oYXNBdHRhY2hlZCgpJiZPdCgpLHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbD09dD9mdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGRldGFjaCBhIHBvcnRhbCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhIGhvc3QiKX0oKToodGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBdHRhY2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2V0QXR0YWNoZWRIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fSx0fSgpLGt0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5jb21wb25lbnQ9ZSxpLnZpZXdDb250YWluZXJSZWY9bixpLmluamVjdG9yPXIsaX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlfShTdCksVHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnRlbXBsYXRlUmVmPWUsaS52aWV3Q29udGFpbmVyUmVmPW4saS5jb250ZXh0PXIsaX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm9yaWdpbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMuY29udGV4dCksdGhpcy5jb250ZXh0PW4sdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyl9LGV9KFN0KSxQdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExfXJldHVybiB0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdHx8ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTXVzdCBwcm92aWRlIGEgcG9ydGFsIHRvIGF0dGFjaCIpfSgpLHRoaXMuaGFzQXR0YWNoZWQoKSYmT3QoKSx0aGlzLl9pc0Rpc3Bvc2VkJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJUaGlzIFBvcnRhbE91dGxldCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9KCksdCBpbnN0YW5jZW9mIGt0Pyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgVHQ/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dm9pZCBmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhbiB1bmtub3duIFBvcnRhbCB0eXBlLiBCYXNlUG9ydGFsT3V0bGV0IGFjY2VwdHMgZWl0aGVyIGEgQ29tcG9uZW50UG9ydGFsIG9yIGEgVGVtcGxhdGVQb3J0YWwuIil9KCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9LHQucHJvdG90eXBlLnNldERpc3Bvc2VGbj1mdW5jdGlvbih0KXt0aGlzLl9kaXNwb3NlRm49dH0sdC5wcm90b3R5cGUuX2ludm9rZURpc3Bvc2VGbj1mdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX0sdH0oKSxBdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5vdXRsZXRFbGVtZW50PWUsby5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sby5fYXBwUmVmPXIsby5fZGVmYXVsdEluamVjdG9yPWksb31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhlPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQocix0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXN0cm95KCl9KSk6KGU9ci5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhlLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe24uX2FwcFJlZi5kZXRhY2hWaWV3KGUuaG9zdFZpZXcpLGUuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShlKSksZX0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmlld0NvbnRhaW5lclJlZixyPW4uY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0KTtyZXR1cm4gci5kZXRlY3RDaGFuZ2VzKCksci5yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHQpfSksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXt2YXIgdD1uLmluZGV4T2Yocik7LTEhPT10JiZuLnJlbW92ZSh0KX0pLHJ9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksbnVsbCE9dGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3V0bGV0RWxlbWVudCl9LGUucHJvdG90eXBlLl9nZXRDb21wb25lbnRSb290Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19LGV9KFB0KSxqdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSxyLl92aWV3Q29udGFpbmVyUmVmPW4sci5faXNJbml0aWFsaXplZD0hMSxyLmF0dGFjaGVkPW5ldyBvLm4scn1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBvcnRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH0sc2V0OmZ1bmN0aW9uKGUpeyghdGhpcy5oYXNBdHRhY2hlZCgpfHxlfHx0aGlzLl9pc0luaXRpYWxpemVkKSYmKHRoaXMuaGFzQXR0YWNoZWQoKSYmdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksZSYmdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dGFjaGVkUmVmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIG49bnVsbCE9ZS52aWV3Q29udGFpbmVyUmVmP2Uudmlld0NvbnRhaW5lclJlZjp0aGlzLl92aWV3Q29udGFpbmVyUmVmLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGUuY29tcG9uZW50KSxpPW4uY3JlYXRlQ29tcG9uZW50KHIsbi5sZW5ndGgsZS5pbmplY3Rvcnx8bi5wYXJlbnRJbmplY3Rvcik7cmV0dXJuIHQucHJvdG90eXBlLnNldERpc3Bvc2VGbi5jYWxsKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoZS50ZW1wbGF0ZVJlZixlLmNvbnRleHQpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cix0aGlzLmF0dGFjaGVkLmVtaXQocikscn0sZX0oUHQpLEl0PWZ1bmN0aW9uKCl7fSxNdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9wYXJlbnRJbmplY3Rvcj10LHRoaXMuX2N1c3RvbVRva2Vucz1lfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jdXN0b21Ub2tlbnMuZ2V0KHQpO3JldHVybiB2b2lkIDAhPT1uP246dGhpcy5fcGFyZW50SW5qZWN0b3IuZ2V0KHQsZSl9LHR9KCksTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbigpe30sdH0oKSxSdD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuc2Nyb2xsU3RyYXRlZ3k9bmV3IE50LHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSExLHRoaXMuYmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCIsdCYmT2JqZWN0LmtleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT10W25dfSl9fSgpO2Z1bmN0aW9uIER0KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIEZ0KHQsZSl7aWYoInN0YXJ0IiE9PWUmJiJlbmQiIT09ZSYmImNlbnRlciIhPT1lKXRocm93IEVycm9yKCJDb25uZWN0ZWRQb3NpdGlvbjogSW52YWxpZCAiK3QrJyAiJytlKyciLiBFeHBlY3RlZCAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIi4nKX12YXIgTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2NhbkJlRW5hYmxlZCgpKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1WKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpLHQuc3R5bGUudG9wPVYoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNFbmFibGVkKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10aGlzLl9kb2N1bWVudC5ib2R5LG49dC5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiIscj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsdC5zdHlsZS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LHQuc3R5bGUudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIix3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1uLGUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9cn19LHQucHJvdG90eXBlLl9jYW5CZUVuYWJsZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTt2YXIgdD10aGlzLl9kb2N1bWVudC5ib2R5LGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gdC5zY3JvbGxIZWlnaHQ+ZS5oZWlnaHR8fHQuc2Nyb2xsV2lkdGg+ZS53aWR0aH0sdH0oKTtmdW5jdGlvbiBWdCgpe3JldHVybiBFcnJvcigiU2Nyb2xsIHN0cmF0ZWd5IGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQuIil9dmFyIEJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPWZ1bmN0aW9uKCl7aS5kaXNhYmxlKCksaS5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZpLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX292ZXJsYXlSZWYuZGV0YWNoKCl9KX19cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IFZ0KCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pe3ZhciBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGU9dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdC5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50Ll9jb25maWcudGhyZXNob2xkP3QuX2RldGFjaCgpOnQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCk7ZnVuY3Rpb24genQodCxlKXtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0LmJvdHRvbTxlLnRvcHx8dC50b3A+ZS5ib3R0b218fHQucmlnaHQ8ZS5sZWZ0fHx0LmxlZnQ+ZS5yaWdodH0pfWZ1bmN0aW9uIFV0KHQsZSl7cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC50b3A8ZS50b3B8fHQuYm90dG9tPmUuYm90dG9tfHx0LmxlZnQ8ZS5sZWZ0fHx0LnJpZ2h0PmUucmlnaHR9KX12YXIgSHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IFZ0KCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7aWYodC5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHQuX2NvbmZpZyYmdC5fY29uZmlnLmF1dG9DbG9zZSl7dmFyIGU9dC5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCkscj1uLndpZHRoLGk9bi5oZWlnaHQ7enQoZSxbe3dpZHRoOnIsaGVpZ2h0OmksYm90dG9tOmkscmlnaHQ6cix0b3A6MCxsZWZ0OjB9XSkmJih0LmRpc2FibGUoKSx0Ll9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX292ZXJsYXlSZWYuZGV0YWNoKCl9KSl9fSkpfSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfSx0fSgpLFF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ub29wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBOdH0sdGhpcy5jbG9zZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KGkuX3Njcm9sbERpc3BhdGNoZXIsaS5fbmdab25lLGkuX3ZpZXdwb3J0UnVsZXIsdCl9LHRoaXMuYmxvY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEx0KGkuX3ZpZXdwb3J0UnVsZXIsaS5fZG9jdW1lbnQpfSx0aGlzLnJlcG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIdChpLl9zY3JvbGxEaXNwYXRjaGVyLGkuX3ZpZXdwb3J0UnVsZXIsaS5fbmdab25lLHQpfSx0aGlzLl9kb2N1bWVudD1yfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShfdCksT2JqZWN0KG8uWCkoeHQpLE9iamVjdChvLlgpKG8ueSksT2JqZWN0KG8uWCkocy5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZlLl9hdHRhY2hlZE92ZXJsYXlzW2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoLTFdLl9rZXlkb3duRXZlbnRzLm5leHQodCl9LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShzLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksR3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyRWxlbWVudCYmdGhpcy5fY29udGFpbmVyRWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyRWxlbWVudCl9LHQucHJvdG90eXBlLmdldENvbnRhaW5lckVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyRWxlbWVudHx8dGhpcy5fY3JlYXRlQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyRWxlbWVudH0sdC5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktY29udGFpbmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0aGlzLl9jb250YWluZXJFbGVtZW50PXR9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKHMuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxZdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dGhpcy5fcG9ydGFsT3V0bGV0PXQsdGhpcy5faG9zdD1lLHRoaXMuX3BhbmU9bix0aGlzLl9jb25maWc9cix0aGlzLl9uZ1pvbmU9aSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9byx0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLHRoaXMuX2JhY2tkcm9wQ2xpY2s9bmV3IEMuYSx0aGlzLl9hdHRhY2htZW50cz1uZXcgQy5hLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBDLmEsdGhpcy5fa2V5ZG93bkV2ZW50cz1uZXcgQy5hLHIuc2Nyb2xsU3RyYXRlZ3kmJnIuc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm92ZXJsYXlFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJiYWNrZHJvcEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaG9zdEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faG9zdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2godCk7cmV0dXJuIHRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5fdXBkYXRlU3RhY2tpbmdPcmRlcigpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCksdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKE9iamVjdChFdC5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5oYXNBdHRhY2hlZCgpJiZlLnVwZGF0ZVBvc2l0aW9uKCl9KSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksbn0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNBdHRhY2hlZCgpKXt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO3ZhciB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH19LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnROb2RlJiYodGhpcy5faG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX2hvc3Q9bnVsbCksdGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hdHRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZGV0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmtleWRvd25FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ30sdC5wcm90b3R5cGUudXBkYXRlUG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KGQuYSkoe30sdGhpcy5fY29uZmlnLHQpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9LHQucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KGQuYSkoe30sdGhpcy5fY29uZmlnLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudERpcmVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXsodGhpcy5fY29uZmlnLndpZHRofHwwPT09dGhpcy5fY29uZmlnLndpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUud2lkdGg9Vih0aGlzLl9jb25maWcud2lkdGgpKSwodGhpcy5fY29uZmlnLmhlaWdodHx8MD09PXRoaXMuX2NvbmZpZy5oZWlnaHQpJiYodGhpcy5fcGFuZS5zdHlsZS5oZWlnaHQ9Vih0aGlzLl9jb25maWcuaGVpZ2h0KSksKHRoaXMuX2NvbmZpZy5taW5XaWR0aHx8MD09PXRoaXMuX2NvbmZpZy5taW5XaWR0aCkmJih0aGlzLl9wYW5lLnN0eWxlLm1pbldpZHRoPVYodGhpcy5fY29uZmlnLm1pbldpZHRoKSksKHRoaXMuX2NvbmZpZy5taW5IZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWluSGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWluSGVpZ2h0PVYodGhpcy5fY29uZmlnLm1pbkhlaWdodCkpLCh0aGlzLl9jb25maWcubWF4V2lkdGh8fDA9PT10aGlzLl9jb25maWcubWF4V2lkdGgpJiYodGhpcy5fcGFuZS5zdHlsZS5tYXhXaWR0aD1WKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCkpLCh0aGlzLl9jb25maWcubWF4SGVpZ2h0fHwwPT09dGhpcy5fY29uZmlnLm1heEhlaWdodCkmJih0aGlzLl9wYW5lLnN0eWxlLm1heEhlaWdodD1WKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpKX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG49ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChuLDUwMCl9KX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzc2VzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNsYXNzTGlzdDtMKGUpLmZvckVhY2goZnVuY3Rpb24odCl7bj9yLmFkZCh0KTpyLnJlbW92ZSh0KX0pfSx0fSgpLFd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuX2lzUHVzaGVkPSExLHRoaXMuX2NhblB1c2g9ITAsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9ITAsdGhpcy5fcG9zaXRpb25Mb2NrZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49MCx0aGlzLnNjcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IEMuYSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249YXQuYS5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz0wLHRoaXMucG9zaXRpb25DaGFuZ2VzPUUuYS5jcmVhdGUoZnVuY3Rpb24odCl7dmFyIGU9aS5fcG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZSh0KTtyZXR1cm4gaS5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zKyssZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksaS5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zLS19fSksdGhpcy5zZXRPcmlnaW4odCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9vdmVybGF5UmVmJiZ0IT09dGhpcy5fb3ZlcmxheVJlZil0aHJvdyBFcnJvcigiVGhpcyBwb3NpdGlvbiBzdHJhdGVneSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFuIG92ZXJsYXkiKTt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIpLHRoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9ib3VuZGluZ0JveD10Lmhvc3RFbGVtZW50LHRoaXMuX3BhbmU9dC5vdmVybGF5RWxlbWVudCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSgpfSl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYoISh0aGlzLl9pc0Rpc3Bvc2VkfHx0aGlzLl9wbGF0Zm9ybSYmIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcikpaWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbil0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTtlbHNle3RoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3IodmFyIHQsZT10aGlzLl9vcmlnaW5SZWN0LG49dGhpcy5fb3ZlcmxheVJlY3Qscj10aGlzLl92aWV3cG9ydFJlY3QsaT1bXSxvPTAsYT10aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD10aGlzLl9nZXRPcmlnaW5Qb2ludChlLHMpLHU9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGwsbixzKSxjPXRoaXMuX2dldE92ZXJsYXlGaXQodSxuLHIscyk7aWYoYy5pc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMsbCk7dGhpcy5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyhjLHUscik/aS5wdXNoKHtwb3NpdGlvbjpzLG9yaWdpbjpsLG92ZXJsYXlSZWN0Om4sYm91bmRpbmdCb3hSZWN0OnRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdChsLHMpfSk6KCF0fHx0Lm92ZXJsYXlGaXQudmlzaWJsZUFyZWE8Yy52aXNpYmxlQXJlYSkmJih0PXtvdmVybGF5Rml0OmMsb3ZlcmxheVBvaW50OnUsb3JpZ2luUG9pbnQ6bCxwb3NpdGlvbjpzLG92ZXJsYXlSZWN0Om59KX1pZihpLmxlbmd0aCl7Zm9yKHZhciBmPW51bGwsaD0tMSxwPTAsZD1pO3A8ZC5sZW5ndGg7cCsrKXt2YXIgbT1kW3BdLHk9bS5ib3VuZGluZ0JveFJlY3Qud2lkdGgqbS5ib3VuZGluZ0JveFJlY3QuaGVpZ2h0KihtLnBvc2l0aW9uLndlaWdodHx8MSk7eT5oJiYoaD15LGY9bSl9cmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihmLnBvc2l0aW9uLGYub3JpZ2luKX1pZih0aGlzLl9jYW5QdXNoKXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMCx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQucG9zaXRpb24sdC5vcmlnaW5Qb2ludCl9fSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLmRldGFjaCgpLHRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5faXNEaXNwb3NlZD0hMCl9LHQucHJvdG90eXBlLnJlYXBwbHlMYXN0UG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy5faXNEaXNwb3NlZCYmKCF0aGlzLl9wbGF0Zm9ybXx8dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKTt2YXIgdD10aGlzLl9sYXN0UG9zaXRpb258fHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc1swXSxlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LGUpfX0sdC5wcm90b3R5cGUud2l0aFNjcm9sbGFibGVDb250YWluZXJzPWZ1bmN0aW9uKHQpe3RoaXMuc2Nyb2xsYWJsZXM9dH0sdC5wcm90b3R5cGUud2l0aFBvc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLndpdGhWaWV3cG9ydE1hcmdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRNYXJnaW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoRmxleGlibGVEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEdyb3dBZnRlck9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFB1c2g9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9jYW5QdXNoPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aExvY2tlZFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfSx0LnByb3RvdHlwZS5zZXRPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10IGluc3RhbmNlb2Ygby5rP3QubmF0aXZlRWxlbWVudDp0LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9LHQucHJvdG90eXBlLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfSx0LnByb3RvdHlwZS5fZ2V0T3JpZ2luUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtpZigiY2VudGVyIj09ZS5vcmlnaW5YKW49dC5sZWZ0K3Qud2lkdGgvMjtlbHNle3ZhciByPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQsaT10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O249InN0YXJ0Ij09ZS5vcmlnaW5YP3I6aX1yZXR1cm57eDpuLHk6ImNlbnRlciI9PWUub3JpZ2luWT90LnRvcCt0LmhlaWdodC8yOiJ0b3AiPT1lLm9yaWdpblk/dC50b3A6dC5ib3R0b219fSx0LnByb3RvdHlwZS5fZ2V0T3ZlcmxheVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iY2VudGVyIj09bi5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1uLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgse3g6dC54K3IseTp0LnkrKCJjZW50ZXIiPT1uLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1uLm92ZXJsYXlZPzA6LWUuaGVpZ2h0KX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5Rml0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxvPXQueSxhPXRoaXMuX2dldE9mZnNldChyLCJ4Iikscz10aGlzLl9nZXRPZmZzZXQociwieSIpO2EmJihpKz1hKSxzJiYobys9cyk7dmFyIGw9MC1vLHU9bytlLmhlaWdodC1uLmhlaWdodCxjPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUud2lkdGgsMC1pLGkrZS53aWR0aC1uLndpZHRoKSxmPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUuaGVpZ2h0LGwsdSksaD1jKmY7cmV0dXJue3Zpc2libGVBcmVhOmgsaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQ6ZS53aWR0aCplLmhlaWdodD09PWgsZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5OmY9PT1lLmhlaWdodCxmaXRzSW5WaWV3cG9ydEhvcml6b250YWxseTpjPT1lLndpZHRofX0sdC5wcm90b3R5cGUuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7dmFyIHI9bi5ib3R0b20tZS55LGk9bi5yaWdodC1lLngsbz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluV2lkdGg7cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1vJiZvPD1yKSYmKHQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPWEmJmE8PWkpfX0sdC5wcm90b3R5cGUuX3B1c2hPdmVybGF5T25TY3JlZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl92aWV3cG9ydFJlY3Qscj1NYXRoLm1heCh0LngrZS53aWR0aC1uLnJpZ2h0LDApLGk9TWF0aC5tYXgodC55K2UuaGVpZ2h0LW4uYm90dG9tLDApLG89TWF0aC5tYXgobi50b3AtdC55LDApLGE9TWF0aC5tYXgobi5sZWZ0LXQueCwwKTtyZXR1cm57eDp0LngrKGUud2lkdGg8PW4ud2lkdGg/YXx8LXI6bi5sZWZ0LXQueCkseTp0LnkrKGUuaGVpZ2h0PD1uLmhlaWdodD9vfHwtaTpuLnRvcC10LnkpfX0sdC5wcm90b3R5cGUuX2FwcGx5UG9zaXRpb249ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHRoaXMuX2xhc3RQb3NpdGlvbj10LHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz4wKXt2YXIgbj1uZXcgZnVuY3Rpb24odCxlKXt0aGlzLmNvbm5lY3Rpb25QYWlyPXQsdGhpcy5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXM9ZX0odCx0aGlzLl9nZXRTY3JvbGxWaXNpYmlsaXR5KCkpO3RoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5uZXh0KG4pfXRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMX0sdC5wcm90b3R5cGUuX3NldFRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbih0KXtpZih0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil7dmFyIGUsbj10aGlzLl9ib3VuZGluZ0JveC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKSxyPXQub3ZlcmxheVk7ZT0iY2VudGVyIj09PXQub3ZlcmxheVg/ImNlbnRlciI6dGhpcy5faXNSdGwoKT8ic3RhcnQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0Ijoic3RhcnQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0Ijtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj1lKyIgIityfX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvLGEscyxsPXRoaXMuX3ZpZXdwb3J0UmVjdCx1PXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXI9dC55LG49bC5ib3R0b20tdC55O2Vsc2UgaWYoImJvdHRvbSI9PT1lLm92ZXJsYXlZKW49bC5oZWlnaHQtKGk9bC5oZWlnaHQtdC55KzIqdGhpcy5fdmlld3BvcnRNYXJnaW4pK3RoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2V7dmFyIGM9TWF0aC5taW4obC5ib3R0b20tdC55LHQueS1sLmxlZnQpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7cj10LnktYywobj0yKmMpPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocj10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiF1fHwic3RhcnQiPT09ZS5vdmVybGF5WCYmdSlzPWwucmlnaHQtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLG89dC54LWwubGVmdDtlbHNlIGlmKCJzdGFydCI9PT1lLm92ZXJsYXlYJiYhdXx8ImVuZCI9PT1lLm92ZXJsYXlYJiZ1KWE9dC54LG89bC5yaWdodC10Lng7ZWxzZXtjPU1hdGgubWluKGwucmlnaHQtdC54LHQueC1sLnRvcCk7dmFyIGg9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDthPXQueC1jLChvPTIqYyk+aCYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueC1oLzIpfXJldHVybnt0b3A6cixsZWZ0OmEsYm90dG9tOmkscmlnaHQ6cyx3aWR0aDpvLGhlaWdodDpufX0sdC5wcm90b3R5cGUuX3NldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHQsZSk7dGhpcy5faXNJbml0aWFsUmVuZGVyfHx0aGlzLl9ncm93QWZ0ZXJPcGVufHwobi5oZWlnaHQ9TWF0aC5taW4obi5oZWlnaHQsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQpLG4ud2lkdGg9TWF0aC5taW4obi53aWR0aCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoKSk7dmFyIHI9e307aWYodGhpcy5faGFzRXhhY3RQb3NpdGlvbigpKXIudG9wPXIubGVmdD0iMCIsci5ib3R0b209ci5yaWdodD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle3ZhciBpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1WKG4uaGVpZ2h0KSxyLnRvcD1WKG4udG9wKSxyLmJvdHRvbT1WKG4uYm90dG9tKSxyLndpZHRoPVYobi53aWR0aCksci5sZWZ0PVYobi5sZWZ0KSxyLnJpZ2h0PVYobi5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLGkmJihyLm1heEhlaWdodD1WKGkpKSxvJiYoci5tYXhXaWR0aD1WKG8pKX10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPW4sWnQodGhpcy5fYm91bmRpbmdCb3guc3R5bGUscil9LHQucHJvdG90eXBlLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKCl7WnQodGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiMCIsbGVmdDoiMCIscmlnaHQ6IjAiLGJvdHRvbToiMCIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KX0sdC5wcm90b3R5cGUuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXM9ZnVuY3Rpb24oKXtadCh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiJ9KX0sdC5wcm90b3R5cGUuX3NldE92ZXJsYXlFbGVtZW50U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307dGhpcy5faGFzRXhhY3RQb3NpdGlvbigpPyhadChuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVkoZSx0KSksWnQobix0aGlzLl9nZXRFeGFjdE92ZXJsYXlYKGUsdCkpKTpuLnBvc2l0aW9uPSJzdGF0aWMiO3ZhciByPSIiLGk9dGhpcy5fZ2V0T2Zmc2V0KGUsIngiKSxvPXRoaXMuX2dldE9mZnNldChlLCJ5Iik7aSYmKHIrPSJ0cmFuc2xhdGVYKCIraSsicHgpICIpLG8mJihyKz0idHJhbnNsYXRlWSgiK28rInB4KSIpLG4udHJhbnNmb3JtPXIudHJpbSgpLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyYmdGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQmJihuLm1heEhlaWdodD0iIiksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoJiYobi5tYXhXaWR0aD0iIiksWnQodGhpcy5fcGFuZS5zdHlsZSxuKX0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVk9ZnVuY3Rpb24odCxlKXt2YXIgbj17dG9wOm51bGwsYm90dG9tOm51bGx9LHI9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYocj10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKHIsdGhpcy5fb3ZlcmxheVJlY3QpKSwiYm90dG9tIj09PXQub3ZlcmxheVk/bi5ib3R0b209dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC0oci55K3RoaXMuX292ZXJsYXlSZWN0LmhlaWdodCkrInB4IjpuLnRvcD1WKHIueSksbn0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVg9ZnVuY3Rpb24odCxlKXt2YXIgbj17bGVmdDpudWxsLHJpZ2h0Om51bGx9LHI9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYocj10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKHIsdGhpcy5fb3ZlcmxheVJlY3QpKSwicmlnaHQiPT0odGhpcy5faXNSdGwoKT8iZW5kIj09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI6ImVuZCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiKT9uLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oci54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOm4ubGVmdD1WKHIueCksbn0sdC5wcm90b3R5cGUuX2dldFNjcm9sbFZpc2liaWxpdHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5zY3JvbGxhYmxlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOlV0KHQsbiksaXNPcmlnaW5PdXRzaWRlVmlldzp6dCh0LG4pLGlzT3ZlcmxheUNsaXBwZWQ6VXQoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzp6dChlLG4pfX0sdC5wcm90b3R5cGUuX3N1YnRyYWN0T3ZlcmZsb3dzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LU1hdGgubWF4KGUsMCl9LHQpfSx0LnByb3RvdHlwZS5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LG49dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDpuLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0Om4ubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDpuLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206bi50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19LHQucHJvdG90eXBlLl9pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuX2hhc0V4YWN0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH0sdC5wcm90b3R5cGUuX2dldE9mZnNldD1mdW5jdGlvbih0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlUG9zaXRpb25zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5sZW5ndGgpdGhyb3cgRXJyb3IoIkZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTogQXQgbGVhc3Qgb25lIHBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe0Z0KCJvcmlnaW5YIix0Lm9yaWdpblgpLER0KCJvcmlnaW5ZIix0Lm9yaWdpblkpLEZ0KCJvdmVybGF5WCIsdC5vdmVybGF5WCksRHQoIm92ZXJsYXlZIix0Lm92ZXJsYXlZKX0pfSx0fSgpO2Z1bmN0aW9uIFp0KHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dmFyIEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyl7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9bmV3IFd0KG4scixpLG8pLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhQdXNoKCExKS53aXRoVmlld3BvcnRNYXJnaW4oMCksdGhpcy53aXRoRmFsbGJhY2tQb3NpdGlvbih0LGUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9pc1J0bCIse2dldDpmdW5jdGlvbigpe3JldHVybiJydGwiPT09dGhpcy5fb3ZlcmxheVJlZi5nZXREaXJlY3Rpb24oKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9uUG9zaXRpb25DaGFuZ2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwb3NpdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hdHRhY2godCksdGhpcy5fZGlyZWN0aW9uJiYodC5zZXREaXJlY3Rpb24odGhpcy5fZGlyZWN0aW9uKSx0aGlzLl9kaXJlY3Rpb249bnVsbCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2goKX0sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9LHQucHJvdG90eXBlLnJlY2FsY3VsYXRlTGFzdFBvc2l0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5yZWFwcGx5TGFzdFBvc2l0aW9uKCl9LHQucHJvdG90eXBlLndpdGhTY3JvbGxhYmxlQ29udGFpbmVycz1mdW5jdGlvbih0KXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhTY3JvbGxhYmxlQ29udGFpbmVycyh0KX0sdC5wcm90b3R5cGUud2l0aEZhbGxiYWNrUG9zaXRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bmV3IGZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMub2Zmc2V0WD1uLHRoaXMub2Zmc2V0WT1yLHRoaXMub3JpZ2luWD10Lm9yaWdpblgsdGhpcy5vcmlnaW5ZPXQub3JpZ2luWSx0aGlzLm92ZXJsYXlYPWUub3ZlcmxheVgsdGhpcy5vdmVybGF5WT1lLm92ZXJsYXlZfSh0LGUsbixyKTtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLnB1c2goaSksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUud2l0aERpcmVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnNldERpcmVjdGlvbih0KTp0aGlzLl9kaXJlY3Rpb249dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoT2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoRGVmYXVsdE9mZnNldFgodCksdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRZKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhMb2NrZWRQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoTG9ja2VkUG9zaXRpb24odCksdGhpc30sdC5wcm90b3R5cGUud2l0aFBvc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQuc2xpY2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKSx0aGlzfSx0LnByb3RvdHlwZS5zZXRPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuc2V0T3JpZ2luKHQpLHRoaXN9LHR9KCksWHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5fanVzdGlmeUNvbnRlbnQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIifXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiKX0sdC5wcm90b3R5cGUudG9wPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmJvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUucmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfSx0LnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfSx0LnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfSx0LnByb3RvdHlwZS5jZW50ZXJIb3Jpem9udGFsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuY2VudGVyVmVydGljYWxseT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpe3ZhciB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LnN0eWxlLG49dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD0iMTAwJSI9PT1uLndpZHRoPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPSIxMDAlIj09PW4uaGVpZ2h0PyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9dGhpcy5fcmlnaHRPZmZzZXQsZS5qdXN0aWZ5Q29udGVudD0iMTAwJSI9PT1uLndpZHRoPyJmbGV4LXN0YXJ0Ijp0aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9IjEwMCUiPT09bi5oZWlnaHQ/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSx0fSgpLCR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX2RvY3VtZW50PWUsdGhpcy5fcGxhdGZvcm09bn1yZXR1cm4gdC5wcm90b3R5cGUuZ2xvYmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYdH0sdC5wcm90b3R5cGUuY29ubmVjdGVkVG89ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuZXcgS3QoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLmZsZXhpYmxlQ29ubmVjdGVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXdCh0LHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fcGxhdGZvcm0pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKSh4dCksT2JqZWN0KG8uWCkocy5kKSxPYmplY3Qoby5YKSh1LDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksSnQ9MCx0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzLGwpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9cix0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9aSx0aGlzLl9pbmplY3Rvcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9bH1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxyPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxpPW5ldyBSdCh0KTtyZXR1cm4gaS5kaXJlY3Rpb249aS5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBZdChyLGUsbixpLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbkJ1aWxkZXJ9LHQucHJvdG90eXBlLl9jcmVhdGVQYW5lRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5pZD0iY2RrLW92ZXJsYXktIitKdCsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX0sdC5wcm90b3R5cGUuX2NyZWF0ZUhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9LHQucHJvdG90eXBlLl9jcmVhdGVQb3J0YWxPdXRsZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoby5nKSksbmV3IEF0KHQsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLHRoaXMuX2FwcFJlZix0aGlzLl9pbmplY3Rvcil9LHR9KCksZWU9bmV3IG8ucCgiY2RrLWNvbm5lY3RlZC1vdmVybGF5LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIG5lKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgcmU9ZnVuY3Rpb24oKXt9LGllPTIwLG9lPW5ldyBvLnAoIm1hdC10b29sdGlwLXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIGFlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7c2Nyb2xsVGhyb3R0bGU6aWV9KX19dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWUsdGhpcy5fdmlzaWJpbGl0eT0iaW5pdGlhbCIsdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExLHRoaXMuX29uSGlkZT1uZXcgQy5hLHRoaXMuX2lzSGFuZHNldD10aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShZLkhhbmRzZXQpfXJldHVybiB0LnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5faGlkZVRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMCx0aGlzLl9zaG93VGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl92aXNpYmlsaXR5PSJ2aXNpYmxlIixlLl9tYXJrRm9yQ2hlY2soKX0sdCl9LHQucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9zaG93VGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXRJZCksdGhpcy5faGlkZVRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fdmlzaWJpbGl0eT0iaGlkZGVuIixlLl9tYXJrRm9yQ2hlY2soKX0sdCl9LHQucHJvdG90eXBlLmFmdGVySGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uSGlkZS5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuInZpc2libGUiPT09dGhpcy5fdmlzaWJpbGl0eX0sdC5wcm90b3R5cGUuX2FuaW1hdGlvblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExfSx0LnByb3RvdHlwZS5fYW5pbWF0aW9uRG9uZT1mdW5jdGlvbih0KXt2YXIgZT10LnRvU3RhdGU7ImhpZGRlbiIhPT1lfHx0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpLCJ2aXNpYmxlIiE9PWUmJiJoaWRkZW4iIT09ZXx8KHRoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMCl9LHQucHJvdG90eXBlLl9oYW5kbGVCb2R5SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24mJnRoaXMuaGlkZSgwKX0sdC5wcm90b3R5cGUuX21hcmtGb3JDaGVjaz1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSx0fSgpLGxlPWZ1bmN0aW9uKCl7fSx1ZT1uZXcgby5wKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KG8uWCkocy5kKX19KSxjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgby5uLHQmJih0aGlzLnZhbHVlPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8KHQuZG9jdW1lbnRFbGVtZW50P3QuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKHVlLDgpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksZmU9ZnVuY3Rpb24oKXt9LGhlPW4oIlpZanQiKSxwZT1uZXcgby5wKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZD10LHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMSx0aGlzLl9kb2N1bWVudD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudD9kb2N1bWVudDpudWxsLHRoaXMuX3dpbmRvdz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93P3dpbmRvdzpudWxsLHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3MmJih0aGlzLl9jaGVja0RvY3R5cGVJc0RlZmluZWQoKSx0aGlzLl9jaGVja1RoZW1lSXNQcmVzZW50KCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9cmV0dXJuIHQucHJvdG90eXBlLl9hcmVDaGVja3NFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQmJk9iamVjdChvLlkpKCkmJiF0aGlzLl9pc1Rlc3RFbnYoKX0sdC5wcm90b3R5cGUuX2lzVGVzdEVudj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aW5kb3cmJih0aGlzLl93aW5kb3cuX19rYXJtYV9ffHx0aGlzLl93aW5kb3cuamFzbWluZSl9LHQucHJvdG90eXBlLl9jaGVja0RvY3R5cGVJc0RlZmluZWQ9ZnVuY3Rpb24oKXt0aGlzLl9kb2N1bWVudCYmIXRoaXMuX2RvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybigiQ3VycmVudCBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGEgZG9jdHlwZS4gVGhpcyBtYXkgY2F1c2Ugc29tZSBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbm90IHRvIGJlaGF2ZSBhcyBleHBlY3RlZC4iKX0sdC5wcm90b3R5cGUuX2NoZWNrVGhlbWVJc1ByZXNlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudCYmImZ1bmN0aW9uIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NMaXN0LmFkZCgibWF0LXRoZW1lLWxvYWRlZC1tYXJrZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPWdldENvbXB1dGVkU3R5bGUodCk7ZSYmIm5vbmUiIT09ZS5kaXNwbGF5JiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEFuZ3VsYXIgTWF0ZXJpYWwgY29yZSB0aGVtZS4gTW9zdCBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4gRm9yIG1vcmUgaW5mbyByZWZlciB0byB0aGUgdGhlbWluZyBndWlkZTogaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL3RoZW1pbmciKSx0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX0sdC5wcm90b3R5cGUuX2NoZWNrSGFtbWVySXNBdmFpbGFibGU9ZnVuY3Rpb24oKXshdGhpcy5faGFzQ2hlY2tlZEhhbW1lciYmdGhpcy5fd2luZG93JiYodGhpcy5fYXJlQ2hlY2tzRW5hYmxlZCgpJiYhdGhpcy5fd2luZG93LkhhbW1lciYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBIYW1tZXJKUy4gQ2VydGFpbiBBbmd1bGFyIE1hdGVyaWFsIGNvbXBvbmVudHMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseS4iKSx0aGlzLl9oYXNDaGVja2VkSGFtbWVyPSEwKX0sdH0oKTtmdW5jdGlvbiBtZSh0LGUpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7Zm9yKHZhciBuPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3ZhciBpPXQuYXBwbHkodGhpcyxuKXx8dGhpcztyZXR1cm4gaS5jb2xvcj1lLGl9cmV0dXJuIE9iamVjdChkLmIpKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJjb2xvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvcn0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBuPXR8fGU7biE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtIit0aGlzLl9jb2xvciksbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC0iK24pLHRoaXMuX2NvbG9yPW4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLG59KHQpfWZ1bmN0aW9uIHllKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZVJpcHBsZT0hMSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZVJpcHBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZVJpcHBsZT1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfXZhciBnZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmlzRXJyb3JTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiEhKHQmJnQuaW52YWxpZCYmKHQudG91Y2hlZHx8ZSYmZS5zdWJtaXR0ZWQpKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHZlPW5ldyBvLnAoIk1BVF9IQU1NRVJfT1BUSU9OUyIpLGJlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2hhbW1lck9wdGlvbnM9ZSxyLl9oYW1tZXI9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93LkhhbW1lcjpudWxsLHIuZXZlbnRzPXIuX2hhbW1lcj9bImxvbmdwcmVzcyIsInNsaWRlIiwic2xpZGVzdGFydCIsInNsaWRlZW5kIiwic2xpZGVyaWdodCIsInNsaWRlbGVmdCJdOltdLG4mJm4uX2NoZWNrSGFtbWVySXNBdmFpbGFibGUoKSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmJ1aWxkSGFtbWVyPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzLl9oYW1tZXIodCx0aGlzLl9oYW1tZXJPcHRpb25zfHx2b2lkIDApLG49bmV3IHRoaXMuX2hhbW1lci5QYW4scj1uZXcgdGhpcy5faGFtbWVyLlN3aXBlLGk9bmV3IHRoaXMuX2hhbW1lci5QcmVzcyxvPXRoaXMuX2NyZWF0ZVJlY29nbml6ZXIobix7ZXZlbnQ6InNsaWRlIix0aHJlc2hvbGQ6MH0sciksYT10aGlzLl9jcmVhdGVSZWNvZ25pemVyKGkse2V2ZW50OiJsb25ncHJlc3MiLHRpbWU6NTAwfSk7cmV0dXJuIG4ucmVjb2duaXplV2l0aChyKSxlLmFkZChbcixpLG4sbyxhXSksZX0sZS5wcm90b3R5cGUuX2NyZWF0ZVJlY29nbml6ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gbi5wdXNoKHQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5yZWNvZ25pemVXaXRoKHQpfSksaX0sZX0oaGUuZyksX2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9saW5lcz10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zZXRMaW5lQ2xhc3ModGhpcy5fbGluZXMubGVuZ3RoKSx0aGlzLl9saW5lcy5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe24uX3NldExpbmVDbGFzcyhuLl9saW5lcy5sZW5ndGgpfSl9cmV0dXJuIHQucHJvdG90eXBlLl9zZXRMaW5lQ2xhc3M9ZnVuY3Rpb24odCl7dGhpcy5fcmVzZXRDbGFzc2VzKCksMj09PXR8fDM9PT10P3RoaXMuX3NldENsYXNzKCJtYXQtIit0KyItbGluZSIsITApOnQ+MyYmdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9yZXNldENsYXNzZXM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRDbGFzcygibWF0LTItbGluZSIsITEpLHRoaXMuX3NldENsYXNzKCJtYXQtMy1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMSl9LHQucHJvdG90eXBlLl9zZXRDbGFzcz1mdW5jdGlvbih0LGUpe2U/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodCk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodCl9LHR9KCksd2U9ZnVuY3Rpb24oKXt9LHhlPWZ1bmN0aW9uKCl7dmFyIHQ9e0ZBRElOR19JTjowLFZJU0lCTEU6MSxGQURJTkdfT1VUOjIsSElEREVOOjN9O3JldHVybiB0W3QuRkFESU5HX0lOXT0iRkFESU5HX0lOIix0W3QuVklTSUJMRV09IlZJU0lCTEUiLHRbdC5GQURJTkdfT1VUXT0iRkFESU5HX09VVCIsdFt0LkhJRERFTl09IkhJRERFTiIsdH0oKSxDZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5jb25maWc9bix0aGlzLnN0YXRlPXhlLkhJRERFTn1yZXR1cm4gdC5wcm90b3R5cGUuZmFkZU91dD1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9LHR9KCksRWU9e2VudGVyRHVyYXRpb246NDUwLGV4aXREdXJhdGlvbjo0MDB9LE9lPTgwMCxTZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX3RyaWdnZXJFdmVudHM9bmV3IE1hcCx0aGlzLl9hY3RpdmVSaXBwbGVzPW5ldyBTZXQsdGhpcy5fZXZlbnRPcHRpb25zPSEhYygpJiZ7cGFzc2l2ZTohMH0sdGhpcy5vbk1vdXNlZG93bj1mdW5jdGlvbih0KXt2YXIgZT1pLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPGkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQrT2U7aS5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHwoaS5faXNQb2ludGVyRG93bj0hMCxpLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLGkuX3RhcmdldC5yaXBwbGVDb25maWcpKX0sdGhpcy5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7aS5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHwoaS5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLGkuX2lzUG9pbnRlckRvd249ITAsaS5mYWRlSW5SaXBwbGUodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFksaS5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uUG9pbnRlclVwPWZ1bmN0aW9uKCl7aS5faXNQb2ludGVyRG93biYmKGkuX2lzUG9pbnRlckRvd249ITEsaS5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYodC5zdGF0ZT09PXhlLlZJU0lCTEV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiZ0LnN0YXRlPT09eGUuRkFESU5HX0lOKSYmdC5mYWRlT3V0KCl9KSl9LHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1uLm5hdGl2ZUVsZW1lbnQsdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlZG93biksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNldXAiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWxlYXZlIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQpLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaGVuZCIsdGhpcy5vblBvaW50ZXJVcCkpfXJldHVybiB0LnByb3RvdHlwZS5mYWRlSW5SaXBwbGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBpPXRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fY29udGFpbmVyUmVjdHx8dGhpcy5fY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPU9iamVjdChkLmEpKHt9LEVlLG4uYW5pbWF0aW9uKTtuLmNlbnRlcmVkJiYodD1pLmxlZnQraS53aWR0aC8yLGU9aS50b3AraS5oZWlnaHQvMik7dmFyIGE9bi5yYWRpdXN8fGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChNYXRoLmFicyh0LW4ubGVmdCksTWF0aC5hYnModC1uLnJpZ2h0KSksaT1NYXRoLm1heChNYXRoLmFicyhlLW4udG9wKSxNYXRoLmFicyhlLW4uYm90dG9tKSk7cmV0dXJuIE1hdGguc3FydChyKnIraSppKX0odCxlLGkpLHM9dC1pLmxlZnQsbD1lLWkudG9wLHU9by5lbnRlckR1cmF0aW9uLyhuLnNwZWVkRmFjdG9yfHwxKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2MuY2xhc3NMaXN0LmFkZCgibWF0LXJpcHBsZS1lbGVtZW50IiksYy5zdHlsZS5sZWZ0PXMtYSsicHgiLGMuc3R5bGUudG9wPWwtYSsicHgiLGMuc3R5bGUuaGVpZ2h0PTIqYSsicHgiLGMuc3R5bGUud2lkdGg9MiphKyJweCIsYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9bi5jb2xvcnx8bnVsbCxjLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj11KyJtcyIsdGhpcy5fY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChjKSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5IiksYy5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIjt2YXIgZj1uZXcgQ2UodGhpcyxjLG4pO3JldHVybiBmLnN0YXRlPXhlLkZBRElOR19JTix0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChmKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPWYpLHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dmFyIHQ9Zj09PXIuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU7Zi5zdGF0ZT14ZS5WSVNJQkxFLG4ucGVyc2lzdGVudHx8dCYmci5faXNQb2ludGVyRG93bnx8Zi5mYWRlT3V0KCl9LHUpLGZ9LHQucHJvdG90eXBlLmZhZGVPdXRSaXBwbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCk7aWYodD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksZSl7dmFyIG49dC5lbGVtZW50LHI9T2JqZWN0KGQuYSkoe30sRWUsdC5jb25maWcuYW5pbWF0aW9uKTtuLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1yLmV4aXREdXJhdGlvbisibXMiLG4uc3R5bGUub3BhY2l0eT0iMCIsdC5zdGF0ZT14ZS5GQURJTkdfT1VULHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dC5zdGF0ZT14ZS5ISURERU4sbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfSxyLmV4aXREdXJhdGlvbil9fSx0LnByb3RvdHlwZS5mYWRlT3V0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZhZGVPdXQoKX0pfSx0LnByb3RvdHlwZS5zZXR1cFRyaWdnZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0IT09dGhpcy5fdHJpZ2dlckVsZW1lbnQmJih0aGlzLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZS5fdHJpZ2dlckV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihyLG4sZS5fZXZlbnRPcHRpb25zKX0pfSksdGhpcy5fdHJpZ2dlckVsZW1lbnQ9dCl9LHQucHJvdG90eXBlLnJ1blRpbWVvdXRPdXRzaWRlWm9uZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTApLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KHQsZSl9KX0sdC5wcm90b3R5cGUuX3JlbW92ZVRyaWdnZXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3RyaWdnZXJFbGVtZW50JiZ0aGlzLl90cmlnZ2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0Ll90cmlnZ2VyRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG4sZSx0Ll9ldmVudE9wdGlvbnMpfSl9LHR9KCksa2U9bmV3IG8ucCgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLFRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9hbmltYXRpb25Nb2RlPWksdGhpcy5yYWRpdXM9MCx0aGlzLnNwZWVkRmFjdG9yPTEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPXJ8fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBTZSh0aGlzLGUsdCxuKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0cmlnZ2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXI9dCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX0sdC5wcm90b3R5cGUuZmFkZU91dEFsbD1mdW5jdGlvbigpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyaXBwbGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246Ik5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06T2JqZWN0KGQuYSkoe30sdGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb24sdGhpcy5hbmltYXRpb24pLHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXAsc3BlZWRGYWN0b3I6dGhpcy5zcGVlZEZhY3RvcioodGhpcy5fZ2xvYmFsT3B0aW9ucy5iYXNlU3BlZWRGYWN0b3J8fDEpfX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJpcHBsZURpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCEhdGhpcy5fZ2xvYmFsT3B0aW9ucy5kaXNhYmxlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkPWZ1bmN0aW9uKCl7IXRoaXMuZGlzYWJsZWQmJnRoaXMuX2lzSW5pdGlhbGl6ZWQmJnRoaXMuX3JpcHBsZVJlbmRlcmVyLnNldHVwVHJpZ2dlckV2ZW50cyh0aGlzLnRyaWdnZXIpfSx0LnByb3RvdHlwZS5sYXVuY2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSwibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKHQsZSxPYmplY3QoZC5hKSh7fSx0aGlzLnJpcHBsZUNvbmZpZyxuKSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCxPYmplY3QoZC5hKSh7fSx0aGlzLnJpcHBsZUNvbmZpZyx0KSl9LHR9KCksUGU9ZnVuY3Rpb24oKXt9LEFlPWZ1bmN0aW9uKCl7fSxqZT1mdW5jdGlvbigpe30sSWU9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtdG9vbHRpcC1wYW5lbHtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudH0ubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjJweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc31AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXRvb2x0aXB7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtdG9vbHRpcC1oYW5kc2V0e21hcmdpbjoyNHB4O3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToic3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImluaXRpYWwsIHZvaWQsIGhpZGRlbiIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InNjYWxlKDApIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6InZpc2libGUiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiIqID0+IHZpc2libGUiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjE1MG1zIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKSJ9LG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiIqID0+IGhpZGRlbiIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMTUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBNZSh0KXtyZXR1cm4gby5rYigyLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtdG9vbHRpcCJdXSxbWzIsIm1hdC10b29sdGlwLWhhbmRzZXQiLG51bGxdLFsyNCwiQHN0YXRlIiwwXV0sW1tudWxsLCJAc3RhdGUuc3RhcnQiXSxbbnVsbCwiQHN0YXRlLmRvbmUiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLGk9dC5jb21wb25lbnQ7cmV0dXJuIkBzdGF0ZS5zdGFydCI9PT1lJiYocj0hMSE9PWkuX2FuaW1hdGlvblN0YXJ0KCkmJnIpLCJAc3RhdGUuZG9uZSI9PT1lJiYocj0hMSE9PWkuX2FuaW1hdGlvbkRvbmUobikmJnIpLHJ9LG51bGwsbnVsbCkpLG8uUGEoMSwyNzg1MjgsbnVsbCwwLHMuaSxbby5yLG8ucyxvLmssby5EXSx7a2xhc3M6WzAsImtsYXNzIl0sbmdDbGFzczpbMSwibmdDbGFzcyJdfSxudWxsKSxvLmNiKDEzMTA3MixzLmIsW28uaF0pLCh0KCkoKSxvLmliKDMsbnVsbCxbIiIsIiJdKSldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCwibWF0LXRvb2x0aXAiLGUuY29tcG9uZW50LnRvb2x0aXBDbGFzcyl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDAsMCxvLmpiKGUsMCwwLG8uYWIoZSwyKS50cmFuc2Zvcm0obi5faXNIYW5kc2V0KSkubWF0Y2hlcyxuLl92aXNpYmlsaXR5KSx0KGUsMywwLG4ubWVzc2FnZSl9KX12YXIgTmU9by5NYSgibWF0LXRvb2x0aXAtY29tcG9uZW50IixzZSxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsIm1hdC10b29sdGlwLWNvbXBvbmVudCIsW1siYXJpYS1oaWRkZW4iLCJ0cnVlIl1dLFtbNCwiem9vbSIsbnVsbF1dLFtbImJvZHkiLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImJvZHk6Y2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsMSkuX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpJiZyKSxyfSxNZSxJZSkpLG8uUGEoMSw0OTE1MixudWxsLDAsc2UsW28uaCxxXSxudWxsLG51bGwpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCwidmlzaWJsZSI9PT1vLmFiKGUsMSkuX3Zpc2liaWxpdHk/MTpudWxsKX0pfSx7fSx7fSxbXSksUmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IEMuYSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgQy5hLHRoaXMuX29uQWN0aW9uPW5ldyBDLmEsdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITEsdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHRoaXMub25BY3Rpb24oKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gbi5kaXNtaXNzKCl9KSx0Ll9vbkV4aXQuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbmlzaERpc21pc3MoKX0pfXJldHVybiB0LnByb3RvdHlwZS5kaXNtaXNzPWZ1bmN0aW9uKCl7dGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY2xvc2VkfHx0aGlzLmNvbnRhaW5lckluc3RhbmNlLmV4aXQoKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfSx0LnByb3RvdHlwZS5kaXNtaXNzV2l0aEFjdGlvbj1mdW5jdGlvbigpe3RoaXMuX29uQWN0aW9uLmNsb3NlZHx8KHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSEwLHRoaXMuX29uQWN0aW9uLm5leHQoKSx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpKX0sdC5wcm90b3R5cGUuY2xvc2VXaXRoQWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5kaXNtaXNzV2l0aEFjdGlvbigpfSx0LnByb3RvdHlwZS5fZGlzbWlzc0FmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fZHVyYXRpb25UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmRpc21pc3MoKX0sdCl9LHQucHJvdG90eXBlLl9vcGVuPWZ1bmN0aW9uKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfSx0LnByb3RvdHlwZS5fZmluaXNoRGlzbWlzcz1mdW5jdGlvbigpe3RoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX29uQWN0aW9uLmNsb3NlZHx8dGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLl9hZnRlckRpc21pc3NlZC5uZXh0KHtkaXNtaXNzZWRCeUFjdGlvbjp0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbn0pLHRoaXMuX2FmdGVyRGlzbWlzc2VkLmNvbXBsZXRlKCksdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITF9LHQucHJvdG90eXBlLmFmdGVyRGlzbWlzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hZnRlck9wZW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfSx0LnByb3RvdHlwZS5vbkFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkFjdGlvbi5hc09ic2VydmFibGUoKX0sdH0oKSxEZT1uZXcgby5wKCJNYXRTbmFja0JhckRhdGEiKSxGZT1mdW5jdGlvbigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn0sTGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5zbmFja0JhclJlZj10LHRoaXMuZGF0YT1lfXJldHVybiB0LnByb3RvdHlwZS5hY3Rpb249ZnVuY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzQWN0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmRhdGEuYWN0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksVmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8uX25nWm9uZT1lLG8uX2VsZW1lbnRSZWY9bixvLl9jaGFuZ2VEZXRlY3RvclJlZj1yLG8uc25hY2tCYXJDb25maWc9aSxvLl9kZXN0cm95ZWQ9ITEsby5fb25FeGl0PW5ldyBDLmEsby5fb25FbnRlcj1uZXcgQy5hLG8uX2FuaW1hdGlvblN0YXRlPSJ2b2lkIixvfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwodCl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpLHRoaXMuX2FwcGx5U25hY2tCYXJDbGFzc2VzKCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpfSxlLnByb3RvdHlwZS5vbkFuaW1hdGlvbkVuZD1mdW5jdGlvbih0KXt2YXIgZT10LnRvU3RhdGU7aWYoKCJ2b2lkIj09PWUmJiJ2b2lkIiE9PXQuZnJvbVN0YXRlfHxlLnN0YXJ0c1dpdGgoImhpZGRlbiIpKSYmdGhpcy5fY29tcGxldGVFeGl0KCksZS5zdGFydHNXaXRoKCJ2aXNpYmxlIikpe3ZhciBuPXRoaXMuX29uRW50ZXI7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe24ubmV4dCgpLG4uY29tcGxldGUoKX0pfX0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZS0iK3RoaXMuc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpfSxlLnByb3RvdHlwZS5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXRlPSJoaWRkZW4tIit0aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24sdGhpcy5fb25FeGl0fSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jb21wbGV0ZUV4aXQoKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlRXhpdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoRXQuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX29uRXhpdC5uZXh0KCksdC5fb25FeGl0LmNvbXBsZXRlKCl9KX0sZS5wcm90b3R5cGUuX2FwcGx5U25hY2tCYXJDbGFzc2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5zbmFja0JhckNvbmZpZy5wYW5lbENsYXNzO2UmJihBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QuYWRkKGUpfSk6dC5jbGFzc0xpc3QuYWRkKGUpKSwiY2VudGVyIj09PXRoaXMuc25hY2tCYXJDb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uJiZ0LmNsYXNzTGlzdC5hZGQoIm1hdC1zbmFjay1iYXItY2VudGVyIiksInRvcCI9PT10aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24mJnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX0sZS5wcm90b3R5cGUuX2Fzc2VydE5vdEF0dGFjaGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpdGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIHNuYWNrIGJhciBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCIpfSxlfShQdCksQmU9bmV3IG8ucCgibWF0LXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGZX19KSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3RoaXMuX292ZXJsYXk9dCx0aGlzLl9saXZlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXI9cix0aGlzLl9wYXJlbnRTbmFja0Jhcj1pLHRoaXMuX2RlZmF1bHRDb25maWc9byx0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX29wZW5lZFNuYWNrQmFyUmVmIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50U25hY2tCYXI7cmV0dXJuIHQ/dC5fb3BlbmVkU25hY2tCYXJSZWY6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3BhcmVudFNuYWNrQmFyP3RoaXMuX3BhcmVudFNuYWNrQmFyLl9vcGVuZWRTbmFja0JhclJlZj10OnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuRnJvbUNvbXBvbmVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hdHRhY2godCxlKX0sdC5wcm90b3R5cGUub3BlbkZyb21UZW1wbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hdHRhY2godCxlKX0sdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciByPU9iamVjdChkLmEpKHt9LHRoaXMuX2RlZmF1bHRDb25maWcsbik7cmV0dXJuIHIuZGF0YT17bWVzc2FnZTp0LGFjdGlvbjplfSxyLmFubm91bmNlbWVudE1lc3NhZ2U9dCx0aGlzLm9wZW5Gcm9tQ29tcG9uZW50KExlLHIpfSx0LnByb3RvdHlwZS5kaXNtaXNzPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbmVkU25hY2tCYXJSZWYmJnRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKX0sdC5wcm90b3R5cGUuX2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IE10KGUmJmUudmlld0NvbnRhaW5lclJlZiYmZS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3RvcixuZXcgV2Vha01hcChbW0ZlLGVdXSkpLHI9bmV3IGt0KFZlLGUudmlld0NvbnRhaW5lclJlZixuKSxpPXQuYXR0YWNoKHIpO3JldHVybiBpLmluc3RhbmNlLnNuYWNrQmFyQ29uZmlnPWUsaS5pbnN0YW5jZX0sdC5wcm90b3R5cGUuX2F0dGFjaD1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChkLmEpKHt9LG5ldyBGZSx0aGlzLl9kZWZhdWx0Q29uZmlnLGUpLHI9dGhpcy5fY3JlYXRlT3ZlcmxheShuKSxpPXRoaXMuX2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKHIsbiksYT1uZXcgUmUoaSxyKTtpZih0IGluc3RhbmNlb2Ygby5NKXt2YXIgcz1uZXcgVHQodCxudWxsLHskaW1wbGljaXQ6bi5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPWkuYXR0YWNoVGVtcGxhdGVQb3J0YWwocyl9ZWxzZXt2YXIgbD10aGlzLl9jcmVhdGVJbmplY3RvcihuLGEpLHU9KHM9bmV3IGt0KHQsdm9pZCAwLGwpLGkuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHMpKTthLmluc3RhbmNlPXUuaW5zdGFuY2V9cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFkuSGFuZHNldCkucGlwZShrKHIuZGV0YWNobWVudHMoKS5waXBlKE9iamVjdChFdC5hKSgxKSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7dC5tYXRjaGVzP3Iub3ZlcmxheUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci1oYW5kc2V0Iik6ci5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtc25hY2stYmFyLWhhbmRzZXQiKX0pLHRoaXMuX2FuaW1hdGVTbmFja0JhcihhLG4pLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPWEsdGhpcy5fb3BlbmVkU25hY2tCYXJSZWZ9LHQucHJvdG90eXBlLl9hbmltYXRlU25hY2tCYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtuLl9vcGVuZWRTbmFja0JhclJlZj09dCYmKG4uX29wZW5lZFNuYWNrQmFyUmVmPW51bGwpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY/KHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpKTp0LmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCksZS5kdXJhdGlvbiYmZS5kdXJhdGlvbj4wJiZ0LmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2Rpc21pc3NBZnRlcihlLmR1cmF0aW9uKX0pLGUuYW5ub3VuY2VtZW50TWVzc2FnZSYmdGhpcy5fbGl2ZS5hbm5vdW5jZShlLmFubm91bmNlbWVudE1lc3NhZ2UsZS5wb2xpdGVuZXNzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU92ZXJsYXk9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJ0O2UuZGlyZWN0aW9uPXQuZGlyZWN0aW9uO3ZhciBuPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxyPSJydGwiPT09dC5kaXJlY3Rpb24saT0ibGVmdCI9PT10Lmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PXQuaG9yaXpvbnRhbFBvc2l0aW9uJiYhcnx8ImVuZCI9PT10Lmhvcml6b250YWxQb3NpdGlvbiYmcixvPSFpJiYiY2VudGVyIiE9PXQuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBpP24ubGVmdCgiMCIpOm8/bi5yaWdodCgiMCIpOm4uY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT10LnZlcnRpY2FsUG9zaXRpb24/bi50b3AoIjAiKTpuLmJvdHRvbSgiMCIpLGUucG9zaXRpb25TdHJhdGVneT1uLHRoaXMuX292ZXJsYXkuY3JlYXRlKGUpfSx0LnByb3RvdHlwZS5fY3JlYXRlSW5qZWN0b3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IE10KHQmJnQudmlld0NvbnRhaW5lclJlZiYmdC52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3RvcixuZXcgV2Vha01hcChbW1JlLGVdLFtEZSx0LmRhdGFdXSkpfSx0fSgpLFVlPWZ1bmN0aW9uKCl7fSxIZT1uKCJGRk9vIiksUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kdWVUaW1lPXQsdGhpcy5zY2hlZHVsZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgcWUodCx0aGlzLmR1ZVRpbWUsdGhpcy5zY2hlZHVsZXIpKX0sdH0oKSxxZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5kdWVUaW1lPW4saS5zY2hlZHVsZXI9cixpLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsLGkubGFzdFZhbHVlPW51bGwsaS5oYXNWYWx1ZT0hMSxpfXJldHVybiBkLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmNsZWFyRGVib3VuY2UoKSx0aGlzLmxhc3RWYWx1ZT10LHRoaXMuaGFzVmFsdWU9ITAsdGhpcy5hZGQodGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249dGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoR2UsdGhpcy5kdWVUaW1lLHRoaXMpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZWROZXh0KCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5kZWJvdW5jZWROZXh0PWZ1bmN0aW9uKCl7aWYodGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5oYXNWYWx1ZSl7dmFyIHQ9dGhpcy5sYXN0VmFsdWU7dGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX19LGUucHJvdG90eXBlLmNsZWFyRGVib3VuY2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbjtudWxsIT09dCYmKHRoaXMucmVtb3ZlKHQpLHQudW5zdWJzY3JpYmUoKSx0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsKX0sZX0oSGUuYSk7ZnVuY3Rpb24gR2UodCl7dC5kZWJvdW5jZWROZXh0KCl9dmFyIFllPW4oInhNeUUiKSxXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcGxhdGZvcm09dH1yZXR1cm4gdC5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9LHQucHJvdG90eXBlLmlzVmlzaWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuISEodC5vZmZzZXRXaWR0aHx8dC5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldENsaWVudFJlY3RzJiZ0LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0odCkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUodCkudmlzaWJpbGl0eX0sdC5wcm90b3R5cGUuaXNUYWJiYWJsZT1mdW5jdGlvbih0KXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiExO3ZhciBlPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5mcmFtZUVsZW1lbnR9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSh0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyk7aWYoZSl7dmFyIG49ZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xPT09S2UoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGk9S2UodCk7aWYodC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKXJldHVybi0xIT09aTtpZigiaWZyYW1lIj09PXIpcmV0dXJuITE7aWYoImF1ZGlvIj09PXIpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSlyZXR1cm4hMTtpZih0aGlzLl9wbGF0Zm9ybS5CTElOSylyZXR1cm4hMH1pZigidmlkZW8iPT09cil7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiZ0aGlzLl9wbGF0Zm9ybS5UUklERU5UKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YKXJldHVybiEwfXJldHVybigib2JqZWN0IiE9PXJ8fCF0aGlzLl9wbGF0Zm9ybS5CTElOSyYmIXRoaXMuX3BsYXRmb3JtLldFQktJVCkmJiEodGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj0iaW5wdXQiPT09ZSYmdC50eXBlO3JldHVybiJ0ZXh0Ij09PW58fCJwYXNzd29yZCI9PT1ufHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfSh0KSkmJnQudGFiSW5kZXg+PTB9LHQucHJvdG90eXBlLmlzRm9jdXNhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJiJoaWRkZW4iPT10LnR5cGV9KHQpJiYoZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJidXR0b24iPT09ZXx8InRleHRhcmVhIj09PWV9KHQpfHxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImEiPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KHQpJiZ0Lmhhc0F0dHJpYnV0ZSgiaHJlZiIpfSh0KXx8dC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxaZSh0KSl9KHQpJiYhdGhpcy5pc0Rpc2FibGVkKHQpJiZ0aGlzLmlzVmlzaWJsZSh0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkodSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBaZSh0KXtpZighdC5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PXQudGFiSW5kZXgpcmV0dXJuITE7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuIi0zMjc2OCIhPWUmJiEoIWV8fGlzTmFOKHBhcnNlSW50KGUsMTApKSl9ZnVuY3Rpb24gS2UodCl7aWYoIVplKHQpKXJldHVybiBudWxsO3ZhciBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9dmFyIFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3ZvaWQgMD09PWkmJihpPSExKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fZW5hYmxlZD0hMCxpfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3N0YXJ0QW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuZEFuY2hvci50YWJJbmRleD10aGlzLl9lbmFibGVkPzA6LTEpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fc3RhcnRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fZW5kQW5jaG9yJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZSYmdGhpcy5fZW5kQW5jaG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZW5kQW5jaG9yKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbH0sdC5wcm90b3R5cGUuYXR0YWNoQW5jaG9ycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsZnVuY3Rpb24oKXt0LmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpfSksdC5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3QuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpfSksdC5fZWxlbWVudC5wYXJlbnROb2RlJiYodC5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0Ll9zdGFydEFuY2hvcix0Ll9lbGVtZW50KSx0Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuX2VuZEFuY2hvcix0Ll9lbGVtZW50Lm5leHRTaWJsaW5nKSl9KX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNJbml0aWFsRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLl9nZXRSZWdpb25Cb3VuZGFyeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIl0sIFtjZGtGb2N1c1JlZ2lvbiIrdCsiXSwgW2Nkay1mb2N1cy0iK3QrIl0iKSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXS5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy0iK3QpP2NvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtIit0KyInLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uIit0KyInIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAuIixlW25dKTplW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLXJlZ2lvbi0iK3QpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLXJlZ2lvbi0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pO3JldHVybiJzdGFydCI9PXQ/ZS5sZW5ndGg/ZVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTplLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9LHQucHJvdG90eXBlLmZvY3VzSW5pdGlhbEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtjZGtGb2N1c0luaXRpYWxdIik7cmV0dXJuIHQ/KHQuaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtaW5pdGlhbCIpJiZjb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLWluaXRpYWwnLCB1c2UgJ2Nka0ZvY3VzSW5pdGlhbCcgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMCIsdCksdC5mb2N1cygpLCEwKTp0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiB0JiZ0LmZvY3VzKCksISF0fSx0LnByb3RvdHlwZS5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7Zm9yKHZhciBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2RlcyxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZVtuXSk6bnVsbDtpZihyKXJldHVybiByfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7Zm9yKHZhciBlPXQuY2hpbGRyZW58fHQuY2hpbGROb2RlcyxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPWVbbl0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9jcmVhdGVBbmNob3I9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC50YWJJbmRleD10aGlzLl9lbmFibGVkPzA6LTEsdC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSx0fSx0LnByb3RvdHlwZS5fZXhlY3V0ZU9uU3RhYmxlPWZ1bmN0aW9uKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KEV0LmEpKDEpKS5zdWJzY3JpYmUodCl9LHR9KCksJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgWGUodCx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxlKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoV2UpLE9iamVjdChvLlgpKG8ueSksT2JqZWN0KG8uWCkocy5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEplPW5ldyBvLnAoImxpdmVBbm5vdW5jZXJFbGVtZW50Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLHRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2RvY3VtZW50PWUsdGhpcy5fbGl2ZUVsZW1lbnQ9dHx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1yZXR1cm4gdC5wcm90b3R5cGUuYW5ub3VuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0icG9saXRlIiksdGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9IiIsdGhpcy5fbGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLGUpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD10LGUoKX0sMTAwKX0pfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2xpdmVFbGVtZW50JiZ0aGlzLl9saXZlRWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9saXZlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2xpdmVFbGVtZW50KX0sdC5wcm90b3R5cGUuX2NyZWF0ZUxpdmVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShKZSw4KSxPYmplY3Qoby5YKShzLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksZW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fbmdab25lPXQsdGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9vcmlnaW49bnVsbCx0aGlzLl93aW5kb3dGb2N1c2VkPSExLHRoaXMuX2VsZW1lbnRJbmZvPW5ldyBNYXAsdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30sdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLm1vbml0b3I9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHZvaWQgMD09PWUmJihlPSExKSwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiBPYmplY3QoSS5hKShudWxsKTtpZih0aGlzLl9lbGVtZW50SW5mby5oYXModCkpe3ZhciByPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtyZXR1cm4gci5jaGVja0NoaWxkcmVuPWUsci5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfXZhciBpPXt1bmxpc3RlbjpmdW5jdGlvbigpe30sY2hlY2tDaGlsZHJlbjplLHN1YmplY3Q6bmV3IEMuYX07dGhpcy5fZWxlbWVudEluZm8uc2V0KHQsaSksdGhpcy5faW5jcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50KCk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uRm9jdXMoZSx0KX0sYT1mdW5jdGlvbihlKXtyZXR1cm4gbi5fb25CbHVyKGUsdCl9O3JldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixvLCEwKSx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGEsITApfSksaS51bmxpc3Rlbj1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLG8sITApLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsYSwhMCl9LGkuc3ViamVjdC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuc3RvcE1vbml0b3Jpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpO2UmJihlLnVubGlzdGVuKCksZS5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3Nlcyh0KSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUodCksdGhpcy5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50KCkpfSx0LnByb3RvdHlwZS5mb2N1c1ZpYT1mdW5jdGlvbih0LGUpe3RoaXMuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuc3RvcE1vbml0b3Jpbmcobil9KX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpe3ZhciBlPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0PW51bGwsdC5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWUoImtleWJvYXJkIil9LG49ZnVuY3Rpb24oKXt0Ll9sYXN0VG91Y2hUYXJnZXR8fHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJtb3VzZSIpfSxyPWZ1bmN0aW9uKGUpe251bGwhPXQuX3RvdWNoVGltZW91dElkJiZjbGVhclRpbWVvdXQodC5fdG91Y2hUaW1lb3V0SWQpLHQuX2xhc3RUb3VjaFRhcmdldD1lLnRhcmdldCx0Ll90b3VjaFRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2xhc3RUb3VjaFRhcmdldD1udWxsfSw2NTApfSxpPWZ1bmN0aW9uKCl7dC5fd2luZG93Rm9jdXNlZD0hMCx0Ll93aW5kb3dGb2N1c1RpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3dpbmRvd0ZvY3VzZWQ9ITF9KX07dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixyLCFjKCl8fHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGkpfSksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsciwhYygpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixpKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0pfSl9LHQucHJvdG90eXBlLl93YXNDYXVzZWRCeVRvdWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O3JldHVybiB0aGlzLl9sYXN0VG91Y2hUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlIGluc3RhbmNlb2YgTm9kZSYmKGU9PT10aGlzLl9sYXN0VG91Y2hUYXJnZXR8fGUuY29udGFpbnModGhpcy5fbGFzdFRvdWNoVGFyZ2V0KSl9LHQucHJvdG90eXBlLl9vbkZvY3VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO2lmKG4mJihuLmNoZWNrQ2hpbGRyZW58fGU9PT10LnRhcmdldCkpe3ZhciByPXRoaXMuX29yaWdpbjtyfHwocj10aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOnRoaXMuX3dhc0NhdXNlZEJ5VG91Y2godCk/InRvdWNoIjoicHJvZ3JhbSIpLHRoaXMuX3NldENsYXNzZXMoZSxyKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxyKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49cn19LHQucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7IW58fG4uY2hlY2tDaGlsZHJlbiYmdC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZS5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxudWxsKSl9LHQucHJvdG90eXBlLl9lbWl0T3JpZ2luPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Lm5leHQoZSl9KX0sdC5wcm90b3R5cGUuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpezE9PSsrdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50JiZ0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpfSx0LnByb3RvdHlwZS5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShvLnkpLE9iamVjdChvLlgpKHUpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksbm49ImFjY2VudCIscm49InByaW1hcnkiLG9uPVsibWF0LWJ1dHRvbiIsIm1hdC1mbGF0LWJ1dHRvbiIsIm1hdC1pY29uLWJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwibWF0LXN0cm9rZWQtYnV0dG9uIiwibWF0LW1pbmktZmFiIiwibWF0LWZhYiJdLGFuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7by5fcGxhdGZvcm09bixvLl9mb2N1c01vbml0b3I9cixvLl9hbmltYXRpb25Nb2RlPWksby5pc1JvdW5kQnV0dG9uPW8uX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksby5pc0ljb25CdXR0b249by5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcih2YXIgYT0wLHM9b247YTxzLmxlbmd0aDthKyspe3ZhciBsPXNbYV07by5faGFzSG9zdEF0dHJpYnV0ZXMobCkmJmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGwpfXJldHVybiBvLl9mb2N1c01vbml0b3IubW9uaXRvcihvLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApLG8uaXNSb3VuZEJ1dHRvbj9vLmNvbG9yPW5uOm8uX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmxhdC1idXR0b24iKSYmKG8uY29sb3I9cm4pLG99cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCl9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH0sZS5wcm90b3R5cGUuX2hhc0hvc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9nZXRIb3N0RWxlbWVudCgpLmhhc0F0dHJpYnV0ZShlKX0pfSxlfShtZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgcj10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuX2Rpc2FibGVkPSExLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPUQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oeWUoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpfSgpKSksc249ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGxuKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudH1mdW5jdGlvbiB1bih0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHR0O2Nhc2UgMTpyZXR1cm4gdFswXTtkZWZhdWx0OnJldHVybiBuZXcgZXQodCl9fWZ1bmN0aW9uIGNuKHQsZSxuLHIsaSxvKXt2b2lkIDA9PT1pJiYoaT17fSksdm9pZCAwPT09byYmKG89e30pO3ZhciBhPVtdLHM9W10sbD0tMSx1PW51bGw7aWYoci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQub2Zmc2V0LHI9bj09bCxjPXImJnV8fHt9O09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9bixzPXRbbl07aWYoIm9mZnNldCIhPT1uKXN3aXRjaChyPWUubm9ybWFsaXplUHJvcGVydHlOYW1lKHIsYSkscyl7Y2FzZSBudDpzPWlbbl07YnJlYWs7Y2FzZSBLOnM9b1tuXTticmVhaztkZWZhdWx0OnM9ZS5ub3JtYWxpemVTdHlsZVZhbHVlKG4scixzLGEpfWNbcl09c30pLHJ8fHMucHVzaChjKSx1PWMsbD1ufSksYS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYW5pbWF0ZSBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAiK2Euam9pbigiXG4gLSAiKSk7cmV0dXJuIHN9ZnVuY3Rpb24gZm4odCxlLG4scil7c3dpdGNoKGUpe2Nhc2Uic3RhcnQiOnQub25TdGFydChmdW5jdGlvbigpe3JldHVybiByKG4mJmhuKG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmaG4obiwiZG9uZSIsdCkpfSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0Lm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiByKG4mJmhuKG4sImRlc3Ryb3kiLHQpKX0pfX1mdW5jdGlvbiBobih0LGUsbil7dmFyIHI9bi50b3RhbFRpbWUsaT1wbih0LmVsZW1lbnQsdC50cmlnZ2VyTmFtZSx0LmZyb21TdGF0ZSx0LnRvU3RhdGUsZXx8dC5waGFzZU5hbWUsdm9pZCAwPT1yP3QudG90YWxUaW1lOnIsISFuLmRpc2FibGVkKSxvPXQuX2RhdGE7cmV0dXJuIG51bGwhPW8mJihpLl9kYXRhPW8pLGl9ZnVuY3Rpb24gcG4odCxlLG4scixpLG8sYSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPSIiKSx2b2lkIDA9PT1vJiYobz0wKSx7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsZnJvbVN0YXRlOm4sdG9TdGF0ZTpyLHBoYXNlTmFtZTppLHRvdGFsVGltZTpvLGRpc2FibGVkOiEhYX19ZnVuY3Rpb24gZG4odCxlLG4pe3ZhciByO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhyPXQuZ2V0KGUpKXx8dC5zZXQoZSxyPW4pOihyPXRbZV0pfHwocj10W2VdPW4pLHJ9ZnVuY3Rpb24gbW4odCl7dmFyIGU9dC5pbmRleE9mKCI6Iik7cmV0dXJuW3Quc3Vic3RyaW5nKDEsZSksdC5zdWJzdHIoZSsxKV19dmFyIHluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LGduPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LHZuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX07aWYobG4oKSl7aWYoeW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0sRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylnbj1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hdGNoZXMoZSl9O2Vsc2V7dmFyIGJuPUVsZW1lbnQucHJvdG90eXBlLF9uPWJuLm1hdGNoZXNTZWxlY3Rvcnx8Ym4ubW96TWF0Y2hlc1NlbGVjdG9yfHxibi5tc01hdGNoZXNTZWxlY3Rvcnx8Ym4ub01hdGNoZXNTZWxlY3Rvcnx8Ym4ud2Via2l0TWF0Y2hlc1NlbGVjdG9yO19uJiYoZ249ZnVuY3Rpb24odCxlKXtyZXR1cm4gX24uYXBwbHkodCxbZV0pfSl9dm49ZnVuY3Rpb24odCxlLG4pe3ZhciByPVtdO2lmKG4pci5wdXNoLmFwcGx5KHIsT2JqZWN0KGQuZCkodC5xdWVyeVNlbGVjdG9yQWxsKGUpKSk7ZWxzZXt2YXIgaT10LnF1ZXJ5U2VsZWN0b3IoZSk7aSYmci5wdXNoKGkpfXJldHVybiByfX12YXIgd249bnVsbCx4bj0hMTtmdW5jdGlvbiBDbih0KXt3bnx8KHduPUVuKCl8fHt9LHhuPSEhd24uc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIHduLnN0eWxlKTt2YXIgZT0hMDtyZXR1cm4gd24uc3R5bGUmJiFmdW5jdGlvbih0KXtyZXR1cm4iZWJraXQiPT10LnN1YnN0cmluZygxLDYpfSh0KSYmIShlPXQgaW4gd24uc3R5bGUpJiZ4biYmKGU9IldlYmtpdCIrdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKWluIHduLnN0eWxlKSxlfWZ1bmN0aW9uIEVuKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGx9dmFyIE9uPWduLFNuPXluLGtuPXZuO2Z1bmN0aW9uIFRuKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKTtlW3JdPXRbbl19KSxlfXZhciBQbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gQ24odCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9uKHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBTbih0LGUpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGtuKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnx8IiJ9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuIHZvaWQgMD09PW8mJihvPVtdKSxuZXcgdHQobixyKX0sdH0oKSxBbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuTk9PUD1uZXcgUG4sdH0oKSxqbj0xZTM7ZnVuY3Rpb24gSW4odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIWV8fGUubGVuZ3RoPDI/MDpNbihwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIE1uKHQsZSl7c3dpdGNoKGUpe2Nhc2UicyI6cmV0dXJuIHQqam47ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gTm4odCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGE9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaCgnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJykse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9TW4ocGFyc2VGbG9hdChhWzFdKSxhWzJdKTt2YXIgcz1hWzNdO251bGwhPXMmJihpPU1uKE1hdGguZmxvb3IocGFyc2VGbG9hdChzKSksYVs0XSkpO3ZhciBsPWFbNV07bCYmKG89bCl9ZWxzZSByPXQ7aWYoIW4pe3ZhciB1PSExLGM9ZS5sZW5ndGg7cjwwJiYoZS5wdXNoKCJEdXJhdGlvbiB2YWx1ZXMgYmVsb3cgMCBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgYW5pbWF0aW9uIHN0ZXAuIiksdT0hMCksaTwwJiYoZS5wdXNoKCJEZWxheSB2YWx1ZXMgYmVsb3cgMCBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgYW5pbWF0aW9uIHN0ZXAuIiksdT0hMCksdSYmZS5zcGxpY2UoYywwLCdUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZC4nKX1yZXR1cm57ZHVyYXRpb246cixkZWxheTppLGVhc2luZzpvfX0odCxlLG4pfWZ1bmN0aW9uIFJuKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pLGV9ZnVuY3Rpb24gRG4odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPXt9KSxlKWZvcih2YXIgciBpbiB0KW5bcl09dFtyXTtlbHNlIFJuKHQsbik7cmV0dXJuIG59ZnVuY3Rpb24gRm4odCxlKXt0LnN0eWxlJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXFuKG4pO3Quc3R5bGVbcl09ZVtuXX0pfWZ1bmN0aW9uIExuKHQsZSl7dC5zdHlsZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1xbihlKTt0LnN0eWxlW25dPSIifSl9ZnVuY3Rpb24gVm4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/MT09dC5sZW5ndGg/dFswXTpYKHQpOnR9dmFyIEJuPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIHpuKHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxyPXZvaWQgMDtyPUJuLmV4ZWMobik7KWUucHVzaChyWzFdKTtCbi5sYXN0SW5kZXg9MH1yZXR1cm4gZX1mdW5jdGlvbiBVbih0LGUsbil7dmFyIHI9dC50b1N0cmluZygpLGk9ci5yZXBsYWNlKEJuLGZ1bmN0aW9uKHQscil7dmFyIGk9ZVtyXTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eShyKXx8KG4ucHVzaCgiUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBwYXJhbSAiK3IpLGk9IiIpLGkudG9TdHJpbmcoKX0pO3JldHVybiBpPT1yP3Q6aX1mdW5jdGlvbiBIbih0KXtmb3IodmFyIGU9W10sbj10Lm5leHQoKTshbi5kb25lOyllLnB1c2gobi52YWx1ZSksbj10Lm5leHQoKTtyZXR1cm4gZX12YXIgUW49Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHFuKHQpe3JldHVybiB0LnJlcGxhY2UoUW4sZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIHRbMV0udG9VcHBlckNhc2UoKX0pfWZ1bmN0aW9uIEduKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBZbih0LGUsbil7dmFyIHI9T2JqZWN0LmtleXMobik7aWYoci5sZW5ndGgmJmUubGVuZ3RoKXt2YXIgaT1lWzBdLG89W107aWYoci5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuaGFzT3duUHJvcGVydHkodCl8fG8ucHVzaCh0KSxpW3RdPW5bdF19KSxvLmxlbmd0aClmb3IodmFyIGE9ZnVuY3Rpb24oKXt2YXIgbj1lW3NdO28uZm9yRWFjaChmdW5jdGlvbihlKXtuW2VdPVpuKHQsZSl9KX0scz0xO3M8ZS5sZW5ndGg7cysrKWEoKX1yZXR1cm4gZX1mdW5jdGlvbiBXbih0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIFpuKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfXZhciBLbj0iKiIsWG49bmV3IFNldChbInRydWUiLCIxIl0pLCRuPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gSm4odCxlKXt2YXIgbj1Ybi5oYXModCl8fCRuLmhhcyh0KSxyPVhuLmhhcyhlKXx8JG4uaGFzKGUpO3JldHVybiBmdW5jdGlvbihpLG8pe3ZhciBhPXQ9PUtufHx0PT1pLHM9ZT09S258fGU9PW87cmV0dXJuIWEmJm4mJiJib29sZWFuIj09dHlwZW9mIGkmJihhPWk/WG4uaGFzKHQpOiRuLmhhcyh0KSksIXMmJnImJiJib29sZWFuIj09dHlwZW9mIG8mJihzPW8/WG4uaGFzKGUpOiRuLmhhcyhlKSksYSYmc319dmFyIHRyPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIGVyKHQsZSxuKXtyZXR1cm4gbmV3IG5yKHQpLmJ1aWxkKGUsbil9dmFyIG5yPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kcml2ZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgcnIoZSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobiksV24odGhpcyxWbih0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5xdWVyeUNvdW50PTAsaT1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LGw9cy5uYW1lO2wudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT1sfWVsc2UgaWYoMT09dC50eXBlKXt2YXIgdT1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO3IrPXUucXVlcnlDb3VudCxpKz11LmRlcENvdW50LGEucHVzaCh1KX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpyLGRlcENvdW50Omksb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIGk9bmV3IFNldCxvPXJ8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXIodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt6bihlW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe28uaGFzT3duUHJvcGVydHkodCl8fGkuYWRkKHQpfSl9KX19KSxpLnNpemUpe3ZhciBhPUhuKGkudmFsdWVzKCkpO2UuZXJyb3JzLnB1c2goJ3N0YXRlKCInK3QubmFtZSsnIiwgLi4uKSBtdXN0IGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgc3R5bGUgc3Vic3RpdHV0aW9uczogJythLmpvaW4oIiwgIikpfX1yZXR1cm57dHlwZTowLG5hbWU6dC5uYW1lLHN0eWxlOm4sb3B0aW9uczpyP3twYXJhbXM6cn06bnVsbH19LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDt2YXIgbixyLGksbz1Xbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOihuPXQuZXhwcixyPWUuZXJyb3JzLGk9W10sInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUsbil7aWYoIjoiPT10WzBdKXt2YXIgcj1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQoZSk+cGFyc2VGbG9hdCh0KX07Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKTxwYXJzZUZsb2F0KHQpfTtkZWZhdWx0OnJldHVybiBlLnB1c2goJ1RoZSB0cmFuc2l0aW9uIGFsaWFzIHZhbHVlICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLCIqID0+ICoifX0odCxuKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdm9pZCBlLnB1c2gocik7dD1yfXZhciBpPXQubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIG4ucHVzaCgnVGhlIHByb3ZpZGVkIHRyYW5zaXRpb24gZXhwcmVzc2lvbiAiJyt0KyciIGlzIG5vdCBzdXBwb3J0ZWQnKSxlO3ZhciBvPWlbMV0sYT1pWzJdLHM9aVszXTtlLnB1c2goSm4obyxzKSksIjwiIT1hWzBdfHxvPT1LbiYmcz09S258fGUucHVzaChKbihzLG8pKX0odCxpLHIpfSk6aS5wdXNoKG4pLGkpLGFuaW1hdGlvbjpvLHF1ZXJ5Q291bnQ6ZS5xdWVyeUNvdW50LGRlcENvdW50OmUuZGVwQ291bnQsb3B0aW9uczpvcih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJue3R5cGU6MixzdGVwczp0LnN0ZXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gV24obix0LGUpfSksb3B0aW9uczpvcih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmN1cnJlbnRUaW1lLGk9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9cjt2YXIgbz1XbihuLHQsZSk7cmV0dXJuIGk9TWF0aC5tYXgoaSxlLmN1cnJlbnRUaW1lKSxvfSk7cmV0dXJuIGUuY3VycmVudFRpbWU9aSx7dHlwZTozLHN0ZXBzOm8sb3B0aW9uczpvcih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0LGUpe3ZhciBuPW51bGw7aWYodC5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSluPXQ7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIGFyKE5uKHQsZSkuZHVyYXRpb24sMCwiIik7dmFyIHI9dDtpZihyLnNwbGl0KC9ccysvKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJ7Ij09dC5jaGFyQXQoMCkmJiJ7Ij09dC5jaGFyQXQoMSl9KSl7dmFyIGk9YXIoMCwwLCIiKTtyZXR1cm4gaS5keW5hbWljPSEwLGkuc3RyVmFsdWU9cixpfXJldHVybiBhcigobj1ufHxObihyLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1yO3ZhciBpPXQuc3R5bGVzP3Quc3R5bGVzOiQoe30pO2lmKDU9PWkudHlwZSluPXRoaXMudmlzaXRLZXlmcmFtZXMoaSxlKTtlbHNle3ZhciBvPXQuc3R5bGVzLGE9ITE7aWYoIW8pe2E9ITA7dmFyIHM9e307ci5lYXNpbmcmJihzLmVhc2luZz1yLmVhc2luZyksbz0kKHMpfWUuY3VycmVudFRpbWUrPXIuZHVyYXRpb24rci5kZWxheTt2YXIgbD10aGlzLnZpc2l0U3R5bGUobyxlKTtsLmlzRW1wdHlTdGVwPWEsbj1sfXJldHVybiBlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczpyLHN0eWxlOm4sb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KG4sZSksbn0sdC5wcm90b3R5cGUuX21ha2VTdHlsZUFzdD1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO0FycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0P3Q9PUs/bi5wdXNoKHQpOmUuZXJyb3JzLnB1c2goIlRoZSBwcm92aWRlZCBzdHlsZSBzdHJpbmcgdmFsdWUgIit0KyIgaXMgbm90IGFsbG93ZWQuIik6bi5wdXNoKHQpfSk6bi5wdXNoKHQuc3R5bGVzKTt2YXIgcj0hMSxpPW51bGw7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtpZihpcih0KSl7dmFyIGU9dCxuPWUuZWFzaW5nO2lmKG4mJihpPW4sZGVsZXRlIGUuZWFzaW5nKSwhcilmb3IodmFyIG8gaW4gZSlpZihlW29dLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7cj0hMDticmVha319fSkse3R5cGU6NixzdHlsZXM6bixlYXNpbmc6aSxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOnIsb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlU3R5bGVBc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtyJiZvPjAmJihvLT1yLmR1cmF0aW9uK3IuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKG4uX2RyaXZlci52YWxpZGF0ZVN0eWxlUHJvcGVydHkocikpe3ZhciBhLHMsbCx1PWUuY29sbGVjdGVkU3R5bGVzW2UuY3VycmVudFF1ZXJ5U2VsZWN0b3JdLGM9dVtyXSxmPSEwO2MmJihvIT1pJiZvPj1jLnN0YXJ0VGltZSYmaTw9Yy5lbmRUaW1lJiYoZS5lcnJvcnMucHVzaCgnVGhlIENTUyBwcm9wZXJ0eSAiJytyKyciIHRoYXQgZXhpc3RzIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK2Muc3RhcnRUaW1lKydtcyIgYW5kICInK2MuZW5kVGltZSsnbXMiIGlzIGFsc28gYmVpbmcgYW5pbWF0ZWQgaW4gYSBwYXJhbGxlbCBhbmltYXRpb24gYmV0d2VlbiB0aGUgdGltZXMgb2YgIicrbysnbXMiIGFuZCAiJytpKydtcyInKSxmPSExKSxvPWMuc3RhcnRUaW1lKSxmJiYodVtyXT17c3RhcnRUaW1lOm8sZW5kVGltZTppfSksZS5vcHRpb25zJiYoYT1lLmVycm9ycyxzPWUub3B0aW9ucy5wYXJhbXN8fHt9LChsPXpuKHRbcl0pKS5sZW5ndGgmJmwuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK3IrJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIikscjt2YXIgaT0wLG89W10sYT0hMSxzPSExLGw9MCx1PXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPW4uX21ha2VTdHlsZUFzdCh0LGUpLHU9bnVsbCE9ci5vZmZzZXQ/ci5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXIodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYoaXIodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShyLnN0eWxlcyksYz0wO3JldHVybiBudWxsIT11JiYoaSsrLGM9ci5vZmZzZXQ9dSkscz1zfHxjPDB8fGM+MSxhPWF8fGM8bCxsPWMsby5wdXNoKGMpLHJ9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgYz10LnN0ZXBzLmxlbmd0aCxmPTA7aT4wJiZpPGM/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09aSYmKGY9MS8oYy0xKSk7dmFyIGg9Yy0xLHA9ZS5jdXJyZW50VGltZSxkPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09ZC5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIGE9Zj4wP2k9PWg/MTpmKmk6b1tpXSxzPWEqbTtlLmN1cnJlbnRUaW1lPXArZC5kZWxheStzLGQuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxyLnN0eWxlcy5wdXNoKHQpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpXbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVDaGlsZD1mdW5jdGlvbih0LGUpe3JldHVybiBlLmRlcENvdW50Kysse3R5cGU6OSxvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVSZWY9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixyPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5jdXJyZW50UXVlcnk9dDt2YXIgaT1PYmplY3QoZC5jKShmdW5jdGlvbih0KXt2YXIgZT0hIXQuc3BsaXQoL1xzKixccyovKS5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiI6c2VsZiI9PXR9KTtyZXR1cm4gZSYmKHQ9dC5yZXBsYWNlKHRyLCIiKSksW3Q9dC5yZXBsYWNlKC9AXCovZywiLm5nLXRyaWdnZXIiKS5yZXBsYWNlKC9AXHcrL2csZnVuY3Rpb24odCl7cmV0dXJuIi5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSl9KS5yZXBsYWNlKC86YW5pbWF0aW5nL2csIi5uZy1hbmltYXRpbmciKSxlXX0odC5zZWxlY3RvciksMiksbz1pWzBdLGE9aVsxXTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4ubGVuZ3RoP24rIiAiK286byxkbihlLmNvbGxlY3RlZFN0eWxlcyxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yLHt9KTt2YXIgcz1Xbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6byxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjphLGFuaW1hdGlvbjpzLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOm9yKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaCgic3RhZ2dlcigpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIHF1ZXJ5KCkiKTt2YXIgbj0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpObih0LnRpbWluZ3MsZS5lcnJvcnMsITApO3JldHVybnt0eXBlOjEyLGFuaW1hdGlvbjpXbih0aGlzLFZuKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOm4sb3B0aW9uczpudWxsfX0sdH0oKSxycj1mdW5jdGlvbih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9e30sdGhpcy5vcHRpb25zPW51bGx9O2Z1bmN0aW9uIGlyKHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gb3IodCl7dmFyIGU7cmV0dXJuIHQ/KHQ9Um4odCkpLnBhcmFtcyYmKHQucGFyYW1zPShlPXQucGFyYW1zKT9SbihlKTpudWxsKTp0PXt9LHR9ZnVuY3Rpb24gYXIodCxlLG4pe3JldHVybntkdXJhdGlvbjp0LGRlbGF5OmUsZWFzaW5nOm59fWZ1bmN0aW9uIHNyKHQsZSxuLHIsaSxvLGEscyl7cmV0dXJuIHZvaWQgMD09PWEmJihhPW51bGwpLHZvaWQgMD09PXMmJihzPSExKSx7dHlwZToxLGVsZW1lbnQ6dCxrZXlmcmFtZXM6ZSxwcmVTdHlsZVByb3BzOm4scG9zdFN0eWxlUHJvcHM6cixkdXJhdGlvbjppLGRlbGF5Om8sdG90YWxUaW1lOmkrbyxlYXNpbmc6YSxzdWJUaW1lbGluZTpzfX12YXIgbHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbWFwPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN1bWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gZT90aGlzLl9tYXAuZGVsZXRlKHQpOmU9W10sZX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFwLmdldCh0KTtufHx0aGlzLl9tYXAuc2V0KHQsbj1bXSksbi5wdXNoLmFwcGx5KG4sT2JqZWN0KGQuZCkoZSkpfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fbWFwLmNsZWFyKCl9LHR9KCksdXI9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLGNyPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBmcih0LGUsbixyLGksbyxhLHMsbCx1KXtyZXR1cm4gdm9pZCAwPT09byYmKG89e30pLHZvaWQgMD09PWEmJihhPXt9KSx2b2lkIDA9PT11JiYodT1bXSksKG5ldyBocikuYnVpbGRLZXlmcmFtZXModCxlLG4scixpLG8sYSxzLGwsdSl9dmFyIGhyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSl7dm9pZCAwPT09dSYmKHU9W10pLGw9bHx8bmV3IGxyO3ZhciBjPW5ldyBkcih0LGUsbCxyLGksdSxbXSk7Yy5vcHRpb25zPXMsYy5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtvXSxudWxsLGMuZXJyb3JzLHMpLFduKHRoaXMsbixjKTt2YXIgZj1jLnRpbWVsaW5lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29udGFpbnNBbmltYXRpb24oKX0pO2lmKGYubGVuZ3RoJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgpe3ZhciBoPWZbZi5sZW5ndGgtMV07aC5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpfHxoLnNldFN0eWxlcyhbYV0sbnVsbCxjLmVycm9ycyxzKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnVpbGRLZXlmcmFtZXMoKX0pOltzcihlLFtdLFtdLFtdLDAsMCwiIiwhMSldfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1Ykluc3RydWN0aW9ucy5jb25zdW1lKGUuZWxlbWVudCk7aWYobil7dmFyIHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyksaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKG4scixyLm9wdGlvbnMpO2khPW8mJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG8pfWUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO24udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixuKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShuLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxpPW51bGwhPW4uZHVyYXRpb24/SW4obi5kdXJhdGlvbik6bnVsbCxvPW51bGwhPW4uZGVsYXk/SW4obi5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PWkmJnQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZSh0LGksbyk7cj1NYXRoLm1heChyLG4uZHVyYXRpb24rbi5kZWxheSl9KSxyfSx0LnByb3RvdHlwZS52aXNpdFJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe2UudXBkYXRlT3B0aW9ucyh0Lm9wdGlvbnMsITApLFduKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLnN1YkNvbnRleHRDb3VudCxpPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKChpPWUuY3JlYXRlU3ViQ29udGV4dChvKSkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PWkucHJldmlvdXNOb2RlLnR5cGUmJihpLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxpLnByZXZpb3VzTm9kZT1wcik7dmFyIGE9SW4oby5kZWxheSk7aS5kZWxheU5leHRTdGVwKGEpfXQuc3RlcHMubGVuZ3RoJiYodC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBXbihuLHQsaSl9KSxpLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxpLnN1YkNvbnRleHRDb3VudD5yJiZpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdEdyb3VwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPVtdLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9Jbih0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxXbihuLGEscyksaT1NYXRoLm1heChpLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxyLnB1c2gocy5jdXJyZW50VGltZWxpbmUpfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHQpfSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0VGltaW5nPWZ1bmN0aW9uKHQsZSl7aWYodC5keW5hbWljKXt2YXIgbj10LnN0clZhbHVlO3JldHVybiBObihlLnBhcmFtcz9VbihuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO24uZGVsYXkmJihlLmluY3JlbWVudFRpbWUobi5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7dmFyIGk9dC5zdHlsZTs1PT1pLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhpLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGksZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50VGltZWxpbmUscj1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshciYmbi5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoJiZuLmZvcndhcmRGcmFtZSgpO3ZhciBpPXImJnIuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAoaSk6bi5zZXRTdHlsZXModC5zdHlsZXMsaSxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixpPW4uZHVyYXRpb24sbz1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7by5lYXNpbmc9bi5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtvLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqaSksby5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxvLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhvKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyK2kpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaT10Lm9wdGlvbnN8fHt9LG89aS5kZWxheT9JbihpLmRlbGF5KTowO28mJig2PT09ZS5wcmV2aW91c05vZGUudHlwZXx8MD09ciYmZS5jdXJyZW50VGltZWxpbmUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCkmJihlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxlLnByZXZpb3VzTm9kZT1wcik7dmFyIGE9cixzPWUuaW52b2tlUXVlcnkodC5zZWxlY3Rvcix0Lm9yaWdpbmFsU2VsZWN0b3IsdC5saW1pdCx0LmluY2x1ZGVTZWxmLCEhaS5vcHRpb25hbCxlLmVycm9ycyk7ZS5jdXJyZW50UXVlcnlUb3RhbD1zLmxlbmd0aDt2YXIgbD1udWxsO3MuZm9yRWFjaChmdW5jdGlvbihyLGkpe2UuY3VycmVudFF1ZXJ5SW5kZXg9aTt2YXIgcz1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zLHIpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxyPT09ZS5lbGVtZW50JiYobD1zLmN1cnJlbnRUaW1lbGluZSksV24obix0LmFuaW1hdGlvbixzKSxzLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxhPU1hdGgubWF4KGEscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksZS5jdXJyZW50UXVlcnlJbmRleD0wLGUuY3VycmVudFF1ZXJ5VG90YWw9MCxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKSxsJiYoZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKSxlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTdGFnZ2VyPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5wYXJlbnRDb250ZXh0LHI9ZS5jdXJyZW50VGltZWxpbmUsaT10LnRpbWluZ3Msbz1NYXRoLmFicyhpLmR1cmF0aW9uKSxhPW8qKGUuY3VycmVudFF1ZXJ5VG90YWwtMSkscz1vKmUuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGkuZHVyYXRpb248MD8icmV2ZXJzZSI6aS5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6cz1hLXM7YnJlYWs7Y2FzZSJmdWxsIjpzPW4uY3VycmVudFN0YWdnZXJUaW1lfXZhciBsPWUuY3VycmVudFRpbWVsaW5lO3MmJmwuZGVsYXlOZXh0U3RlcChzKTt2YXIgdT1sLmN1cnJlbnRUaW1lO1duKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxuLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLXUrKHIuc3RhcnRUaW1lLW4uY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9LHR9KCkscHI9e30sZHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9bix0aGlzLl9lbnRlckNsYXNzTmFtZT1yLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWksdGhpcy5lcnJvcnM9byx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9cHIsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPXN8fG5ldyBtcih0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciByPXQsaT10aGlzLm9wdGlvbnM7bnVsbCE9ci5kdXJhdGlvbiYmKGkuZHVyYXRpb249SW4oci5kdXJhdGlvbikpLG51bGwhPXIuZGVsYXkmJihpLmRlbGF5PUluKHIuZGVsYXkpKTt2YXIgbz1yLnBhcmFtcztpZihvKXt2YXIgYT1pLnBhcmFtczthfHwoYT10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UmJmEuaGFzT3duUHJvcGVydHkodCl8fChhW3RdPVVuKG9bdF0sYSxuLmVycm9ycykpfSl9fX0sdC5wcm90b3R5cGUuX2NvcHlPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5vcHRpb25zKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe3ZhciBuPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9fXJldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVTdWJDb250ZXh0PWZ1bmN0aW9uKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgaT1ufHx0aGlzLmVsZW1lbnQsbz1uZXcgdCh0aGlzLl9kcml2ZXIsaSx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGkscnx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99LHQucHJvdG90eXBlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9cHIsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9LHQucHJvdG90eXBlLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LGk9bmV3IHlyKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChpKSxyfSx0LnByb3RvdHlwZS5pbmNyZW1lbnRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX0sdC5wcm90b3R5cGUuaW52b2tlUXVlcnk9ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhPVtdO2lmKHImJmEucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKHVyLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoY3IsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTt2YXIgcz10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJihzPW48MD9zLnNsaWNlKHMubGVuZ3RoK24scy5sZW5ndGgpOnMuc2xpY2UoMCxuKSksYS5wdXNoLmFwcGx5KGEsT2JqZWN0KGQuZCkocykpfXJldHVybiBpfHwwIT1hLmxlbmd0aHx8by5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLGF9LHR9KCksbXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fEssZS5fY3VycmVudEtleWZyYW1lW3RdPUt9KSx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfSx0LnByb3RvdHlwZS5zZXRTdHlsZXM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztlJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9ZSk7dmFyIG89ciYmci5wYXJhbXN8fHt9LGE9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7IioiPT09dD8obj1ufHxPYmplY3Qua2V5cyhlKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPUt9KTpEbih0LCExLHIpfSkscn0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1VbihhW3RdLG8sbik7aS5fcGVuZGluZ1N0eWxlc1t0XT1lLGkuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCl8fChpLl9iYWNrRmlsbFt0XT1pLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KT9pLl9nbG9iYWxUaW1lbGluZVN0eWxlc1t0XTpLKSxpLl91cGRhdGVTdHlsZSh0LGUpfSl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVzVG9LZXlmcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wZW5kaW5nU3R5bGVzLG49T2JqZWN0LmtleXMoZSk7MCE9bi5sZW5ndGgmJih0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LG4uZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9jdXJyZW50S2V5ZnJhbWVbbl09ZVtuXX0pLE9iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KGUpfHwodC5fY3VycmVudEtleWZyYW1lW2VdPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV0pfSkpfSx0LnByb3RvdHlwZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXTt0Ll9wZW5kaW5nU3R5bGVzW2VdPW4sdC5fdXBkYXRlU3R5bGUoZSxuKX0pfSx0LnByb3RvdHlwZS5nZXRGaW5hbEtleWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvcGVydGllcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9ZS5fc3R5bGVTdW1tYXJ5W25dLGk9dC5fc3R5bGVTdW1tYXJ5W25dOyghcnx8aS50aW1lPnIudGltZSkmJmUuX3VwZGF0ZVN0eWxlKG4saS52YWx1ZSl9KX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7dmFyIGU9bmV3IFNldCxuPW5ldyBTZXQscj0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLGk9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz1EbihvLCEwKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXNbdF07cj09bnQ/ZS5hZGQodCk6cj09SyYmbi5hZGQodCl9KSxyfHwocy5vZmZzZXQ9YS90LmR1cmF0aW9uKSxpLnB1c2gocyl9KTt2YXIgbz1lLnNpemU/SG4oZS52YWx1ZXMoKSk6W10sYT1uLnNpemU/SG4obi52YWx1ZXMoKSk6W107aWYocil7dmFyIHM9aVswXSxsPVJuKHMpO3Mub2Zmc2V0PTAsbC5vZmZzZXQ9MSxpPVtzLGxdfXJldHVybiBzcih0aGlzLmVsZW1lbnQsaSxvLGEsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9LHR9KCkseXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSxzKXt2b2lkIDA9PT1zJiYocz0hMSk7dmFyIGw9dC5jYWxsKHRoaXMsZSxuLGEuZGVsYXkpfHx0aGlzO3JldHVybiBsLmVsZW1lbnQ9bixsLmtleWZyYW1lcz1yLGwucHJlU3R5bGVQcm9wcz1pLGwucG9zdFN0eWxlUHJvcHM9byxsLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1zLGwudGltaW5ncz17ZHVyYXRpb246YS5kdXJhdGlvbixkZWxheTphLmRlbGF5LGVhc2luZzphLmVhc2luZ30sbH1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5jb250YWluc0FuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX0sZS5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmtleWZyYW1lcyxlPXRoaXMudGltaW5ncyxuPWUuZGVsYXkscj1lLmR1cmF0aW9uLGk9ZS5lYXNpbmc7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJm4pe3ZhciBvPVtdLGE9cituLHM9bi9hLGw9RG4odFswXSwhMSk7bC5vZmZzZXQ9MCxvLnB1c2gobCk7dmFyIHU9RG4odFswXSwhMSk7dS5vZmZzZXQ9Z3Iocyksby5wdXNoKHUpO2Zvcih2YXIgYz10Lmxlbmd0aC0xLGY9MTtmPD1jO2YrKyl7dmFyIGg9RG4odFtmXSwhMSk7aC5vZmZzZXQ9Z3IoKG4raC5vZmZzZXQqcikvYSksby5wdXNoKGgpfXI9YSxuPTAsaT0iIix0PW99cmV0dXJuIHNyKHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLHIsbixpLCEwKX0sZX0obXIpO2Z1bmN0aW9uIGdyKHQsZSl7dm9pZCAwPT09ZSYmKGU9Myk7dmFyIG49TWF0aC5wb3coMTAsZS0xKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259dmFyIHZyPWZ1bmN0aW9uKCl7fSxicj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcW4odCl9LGUucHJvdG90eXBlLm5vcm1hbGl6ZVN0eWxlVmFsdWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9IiIsbz1uLnRvU3RyaW5nKCkudHJpbSgpO2lmKF9yW2VdJiYwIT09biYmIjAiIT09bilpZigibnVtYmVyIj09dHlwZW9mIG4paT0icHgiO2Vsc2V7dmFyIGE9bi5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2goIlBsZWFzZSBwcm92aWRlIGEgQ1NTIHVuaXQgdmFsdWUgZm9yICIrdCsiOiIrbil9cmV0dXJuIG8raX0sZX0odnIpLF9yPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiJ3aWR0aCxoZWlnaHQsbWluV2lkdGgsbWluSGVpZ2h0LG1heFdpZHRoLG1heEhlaWdodCxsZWZ0LHRvcCxib3R0b20scmlnaHQsZm9udFNpemUsb3V0bGluZVdpZHRoLG91dGxpbmVPZmZzZXQscGFkZGluZ1RvcCxwYWRkaW5nTGVmdCxwYWRkaW5nQm90dG9tLHBhZGRpbmdSaWdodCxtYXJnaW5Ub3AsbWFyZ2luTGVmdCxtYXJnaW5Cb3R0b20sbWFyZ2luUmlnaHQsYm9yZGVyUmFkaXVzLGJvcmRlcldpZHRoLGJvcmRlclRvcFdpZHRoLGJvcmRlckxlZnRXaWR0aCxib3JkZXJSaWdodFdpZHRoLGJvcmRlckJvdHRvbVdpZHRoLHRleHRJbmRlbnQscGVyc3BlY3RpdmUiLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT0hMH0pLGV9KCk7ZnVuY3Rpb24gd3IodCxlLG4scixpLG8sYSxzLGwsdSxjLGYsaCl7cmV0dXJue3R5cGU6MCxlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSxpc1JlbW92YWxUcmFuc2l0aW9uOmksZnJvbVN0YXRlOm4sZnJvbVN0eWxlczpvLHRvU3RhdGU6cix0b1N0eWxlczphLHRpbWVsaW5lczpzLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6dSxwb3N0U3R5bGVQcm9wczpjLHRvdGFsVGltZTpmLGVycm9yczpofX12YXIgeHI9e30sQ3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl90cmlnZ2VyTmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fc3RhdGVTdHlsZXM9bn1yZXR1cm4gdC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdChlLG4scixpKX0pfSh0aGlzLmFzdC5tYXRjaGVycyx0LGUsbixyKX0sdC5wcm90b3R5cGUuYnVpbGRTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX3N0YXRlU3R5bGVzWyIqIl0saT10aGlzLl9zdGF0ZVN0eWxlc1t0XSxvPXI/ci5idWlsZFN0eWxlcyhlLG4pOnt9O3JldHVybiBpP2kuYnVpbGRTdHlsZXMoZSxuKTpvfSx0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1KXt2YXIgYz1bXSxmPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHx4cixoPXRoaXMuYnVpbGRTdHlsZXMobixhJiZhLnBhcmFtc3x8eHIsYykscD1zJiZzLnBhcmFtc3x8eHIsbT10aGlzLmJ1aWxkU3R5bGVzKHIscCxjKSx5PW5ldyBTZXQsZz1uZXcgTWFwLHY9bmV3IE1hcCxiPSJ2b2lkIj09PXIsXz17cGFyYW1zOk9iamVjdChkLmEpKHt9LGYscCl9LHc9dT9bXTpmcih0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLGksbyxoLG0sXyxsLGMpLHg9MDtpZih3LmZvckVhY2goZnVuY3Rpb24odCl7eD1NYXRoLm1heCh0LmR1cmF0aW9uK3QuZGVsYXkseCl9KSxjLmxlbmd0aClyZXR1cm4gd3IoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLHIsYixoLG0sW10sW10sZyx2LHgsYyk7dy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZWxlbWVudCxyPWRuKGcsbix7fSk7dC5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHJbdF09ITB9KTt2YXIgaT1kbih2LG4se30pO3QucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaVt0XT0hMH0pLG4hPT1lJiZ5LmFkZChuKX0pO3ZhciBDPUhuKHkudmFsdWVzKCkpO3JldHVybiB3cihlLHRoaXMuX3RyaWdnZXJOYW1lLG4scixiLGgsbSx3LEMsZyx2LHgpfSx0fSgpLEVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWV9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e30scj1Sbih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07bnVsbCE9biYmKHJbZV09bil9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPXQ7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1pW3RdO28ubGVuZ3RoPjEmJihvPVVuKG8scixlKSksblt0XT1vfSl9fSksbn0sdH0oKSxPcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPXt9LGUuc3RhdGVzLmZvckVhY2goZnVuY3Rpb24odCl7bi5zdGF0ZXNbdC5uYW1lXT1uZXcgRXIodC5zdHlsZSx0Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fHt9KX0pLFNyKHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLFNyKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxlLnRyYW5zaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7bi50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IENyKHQsZSxuLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249bmV3IENyKHQse3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOltmdW5jdGlvbih0LGUpe3JldHVybiEwfV0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0aGlzLnN0YXRlcyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGFpbnNRdWVyaWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tYXRjaFRyYW5zaXRpb249ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGkpe3JldHVybiBpLm1hdGNoKHQsZSxuLHIpfSl8fG51bGx9LHQucHJvdG90eXBlLm1hdGNoU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLG4pfSx0fSgpO2Z1bmN0aW9uIFNyKHQsZSxuKXt0Lmhhc093blByb3BlcnR5KGUpP3QuaGFzT3duUHJvcGVydHkobil8fCh0W25dPXRbZV0pOnQuaGFzT3duUHJvcGVydHkobikmJih0W2VdPXRbbl0pfXZhciBrcj1uZXcgbHIsVHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fZHJpdmVyPXQsdGhpcy5fbm9ybWFsaXplcj1lLHRoaXMuX2FuaW1hdGlvbnM9e30sdGhpcy5fcGxheWVyc0J5SWQ9e30sdGhpcy5wbGF5ZXJzPVtdfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPVtdLHI9ZXIodGhpcy5fZHJpdmVyLGUsbik7aWYobi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYnVpbGQgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrbi5qb2luKCJcbiIpKTt0aGlzLl9hbmltYXRpb25zW3RdPXJ9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5lbGVtZW50LGk9Y24oMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxuKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixpLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGksbz1bXSxhPXRoaXMuX2FuaW1hdGlvbnNbdF0scz1uZXcgTWFwO2lmKGE/KGk9ZnIodGhpcy5fZHJpdmVyLGUsYSwibmctZW50ZXIiLCJuZy1sZWF2ZSIse30se30sbixrcixvKSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1kbihzLHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPW51bGx9KX0pOihvLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxpPVtdKSxvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrby5qb2luKCJcbiIpKTtzLmZvckVhY2goZnVuY3Rpb24odCxlKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ci5fZHJpdmVyLmNvbXB1dGVTdHlsZShlLG4sSyl9KX0pO3ZhciBsPXVuKGkubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXMuZ2V0KHQuZWxlbWVudCk7cmV0dXJuIHIuX2J1aWxkUGxheWVyKHQse30sZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkW3RdPWwsbC5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gci5kZXN0cm95KHQpfSksdGhpcy5wbGF5ZXJzLnB1c2gobCksbH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksZGVsZXRlIHRoaXMuX3BsYXllcnNCeUlkW3RdO3ZhciBuPXRoaXMucGxheWVycy5pbmRleE9mKGUpO24+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobiwxKX0sdC5wcm90b3R5cGUuX2dldFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wbGF5ZXJzQnlJZFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHRoZSB0aW1lbGluZSBwbGF5ZXIgcmVmZXJlbmNlZCBieSAiK3QpO3JldHVybiBlfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9cG4oZSwiIiwiIiwiIik7cmV0dXJuIGZuKHRoaXMuX2dldFBsYXllcih0KSxuLGksciksZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5jb21tYW5kPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCJyZWdpc3RlciIhPW4paWYoImNyZWF0ZSIhPW4pe3ZhciBpPXRoaXMuX2dldFBsYXllcih0KTtzd2l0Y2gobil7Y2FzZSJwbGF5IjppLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjppLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6aS5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6aS5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOmkuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjppLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjppLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoclswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KHQpfX1lbHNlIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7ZWxzZSB0aGlzLnJlZ2lzdGVyKHQsclswXSl9LHR9KCksUHI9W10sQXI9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LGpyPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxJcj0iX19uZ19yZW1vdmVkIixNcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT0iIiksdGhpcy5uYW1lc3BhY2VJZD1lO3ZhciBuPXQmJnQuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dD90Om51bGx9KG4/dC52YWx1ZTp0KSxuKXt2YXIgcj1Sbih0KTtkZWxldGUgci52YWx1ZSx0aGlzLm9wdGlvbnM9cn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYWJzb3JiT3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10LnBhcmFtcztpZihlKXt2YXIgbj10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7bnVsbD09blt0XSYmKG5bdF09ZVt0XSl9KX19LHR9KCksTnI9bmV3IE1yKCJ2b2lkIiksUnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5ob3N0RWxlbWVudD1lLHRoaXMuX2VuZ2luZT1uLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz17fSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrdCxIcihlLHRoaXMuX2hvc3RDbGFzc05hbWUpfXJldHVybiB0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGksbz10aGlzO2lmKCF0aGlzLl90cmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgYmVjYXVzZSB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIicrZSsiXCIgZG9lc24ndCBleGlzdCEiKTtpZihudWxsPT1ufHwwPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgYmVjYXVzZSB0aGUgcHJvdmlkZWQgZXZlbnQgaXMgdW5kZWZpbmVkIScpO2lmKCJzdGFydCIhPShpPW4pJiYiZG9uZSIhPWkpdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHRyaWdnZXIgZXZlbnQgIicrbisnIiBmb3IgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCEnKTt2YXIgYT1kbih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOnJ9O2EucHVzaChzKTt2YXIgbD1kbih0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQse30pO3JldHVybiBsLmhhc093blByb3BlcnR5KGUpfHwoSHIodCwibmctdHJpZ2dlciIpLEhyKHQsIm5nLXRyaWdnZXItIitlKSxsW2VdPU5yKSxmdW5jdGlvbigpe28uX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7dmFyIHQ9YS5pbmRleE9mKHMpO3Q+PTAmJmEuc3BsaWNlKHQsMSksby5fdHJpZ2dlcnNbZV18fGRlbGV0ZSBsW2VdfSl9fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vyc1t0XSYmKHRoaXMuX3RyaWdnZXJzW3RdPWUsITApfSx0LnByb3RvdHlwZS5fZ2V0VHJpZ2dlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmlnZ2Vyc1t0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBhbmltYXRpb24gdHJpZ2dlciAiJyt0KyciIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIScpO3JldHVybiBlfSx0LnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXM7dm9pZCAwPT09ciYmKHI9ITApO3ZhciBvPXRoaXMuX2dldFRyaWdnZXIoZSksYT1uZXcgRnIodGhpcy5pZCxlLHQpLHM9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7c3x8KEhyKHQsIm5nLXRyaWdnZXIiKSxIcih0LCJuZy10cmlnZ2VyLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxzPXt9KSk7dmFyIGw9c1tlXSx1PW5ldyBNcihuLHRoaXMuaWQpO2lmKCEobiYmbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJmwmJnUuYWJzb3JiT3B0aW9ucyhsLm9wdGlvbnMpLHNbZV09dSxsfHwobD1OciksInZvaWQiPT09dS52YWx1ZXx8bC52YWx1ZSE9PXUudmFsdWUpe3ZhciBjPWRuKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO2MuZm9yRWFjaChmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZUlkPT1pLmlkJiZ0LnRyaWdnZXJOYW1lPT1lJiZ0LnF1ZXVlZCYmdC5kZXN0cm95KCl9KTt2YXIgZj1vLm1hdGNoVHJhbnNpdGlvbihsLnZhbHVlLHUudmFsdWUsdCx1LnBhcmFtcyksaD0hMTtpZighZil7aWYoIXIpcmV0dXJuO2Y9by5mYWxsYmFja1RyYW5zaXRpb24saD0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246Zixmcm9tU3RhdGU6bCx0b1N0YXRlOnUscGxheWVyOmEsaXNGYWxsYmFja1RyYW5zaXRpb246aH0pLGh8fChIcih0LCJuZy1hbmltYXRlLXF1ZXVlZCIpLGEub25TdGFydChmdW5jdGlvbigpe1FyKHQsIm5nLWFuaW1hdGUtcXVldWVkIil9KSksYS5vbkRvbmUoZnVuY3Rpb24oKXt2YXIgZT1pLnBsYXllcnMuaW5kZXhPZihhKTtlPj0wJiZpLnBsYXllcnMuc3BsaWNlKGUsMSk7dmFyIG49aS5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pe3ZhciByPW4uaW5kZXhPZihhKTtyPj0wJiZuLnNwbGljZShyLDEpfX0pLHRoaXMucGxheWVycy5wdXNoKGEpLGMucHVzaChhKSxhfWlmKCFmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpLHI9T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKCFlLmhhc093blByb3BlcnR5KG8pfHx0W29dIT09ZVtvXSlyZXR1cm4hMX1yZXR1cm4hMH0obC5wYXJhbXMsdS5wYXJhbXMpKXt2YXIgcD1bXSxkPW8ubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxwKSxtPW8ubWF0Y2hTdHlsZXModS52YWx1ZSx1LnBhcmFtcyxwKTtwLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IocCk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtMbih0LGQpLEZuKHQsbSl9KX19LHQucHJvdG90eXBlLmRlcmVnaXN0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztkZWxldGUgdGhpcy5fdHJpZ2dlcnNbdF0sdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZGVsZXRlIGVbdF19KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obixyKXtlLl9lbGVtZW50TGlzdGVuZXJzLnNldChyLG4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUhPXR9KSl9KX0sdC5wcm90b3R5cGUuY2xlYXJFbGVtZW50Q2FjaGU9ZnVuY3Rpb24odCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7dmFyIGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtpZighdFtJcl0pe3ZhciBuPXIuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCk7bi5zaXplP24uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbi50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCExLCEwKX0pOnIuY2xlYXJFbGVtZW50Q2FjaGUodCl9fSl9LHQucHJvdG90eXBlLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobyl7dmFyIGE9W107aWYoT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihpLl90cmlnZ2Vyc1tlXSl7dmFyIG49aS50cmlnZ2VyKHQsZSwidm9pZCIscik7biYmYS5wdXNoKG4pfX0pLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUpLG4mJnVuKGEpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBpLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KX0pLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpO2lmKG4pe3ZhciByPW5ldyBTZXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ubmFtZTtpZighci5oYXMoaSkpe3IuYWRkKGkpO3ZhciBvPWUuX3RyaWdnZXJzW2ldLmZhbGxiYWNrVHJhbnNpdGlvbixhPWUuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpW2ldfHxOcixzPW5ldyBNcigidm9pZCIpLGw9bmV3IEZyKGUuaWQsaSx0KTtlLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssZS5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmksdHJhbnNpdGlvbjpvLGZyb21TdGF0ZTphLHRvU3RhdGU6cyxwbGF5ZXI6bCxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfX0pfX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLl9lbmdpbmU7aWYodC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModCxlLCEwKSwhdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSl7dmFyIGk9ITE7aWYoci50b3RhbEFuaW1hdGlvbnMpe3ZhciBvPXIucGxheWVycy5sZW5ndGg/ci5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpaT0hMDtlbHNlIGZvcih2YXIgYT10O2E9YS5wYXJlbnROb2RlOylpZihyLnN0YXRlc0J5RWxlbWVudC5nZXQoYSkpe2k9ITA7YnJlYWt9fXRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLGk/ci5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk6KHIuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3JldHVybiBuLmNsZWFyRWxlbWVudENhY2hlKHQpfSksci5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLHIuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUpe0hyKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9LHQucHJvdG90eXBlLmRyYWluUXVldWVkVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIucGxheWVyO2lmKCFpLmRlc3Ryb3llZCl7dmFyIG89ci5lbGVtZW50LGE9ZS5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7YSYmYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubmFtZT09ci50cmlnZ2VyTmFtZSl7dmFyIG49cG4obyxyLnRyaWdnZXJOYW1lLHIuZnJvbVN0YXRlLnZhbHVlLHIudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LGZuKHIucGxheWVyLGUucGhhc2UsbixlLmNhbGxiYWNrKX19KSxpLm1hcmtlZEZvckRlc3Ryb3k/ZS5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtpLmRlc3Ryb3koKX0pOm4ucHVzaChyKX19KSx0aGlzLl9xdWV1ZT1bXSxuLnNvcnQoZnVuY3Rpb24odCxuKXt2YXIgcj10LnRyYW5zaXRpb24uYXN0LmRlcENvdW50LGk9bi50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09cnx8MD09aT9yLWk6ZS5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQodC5lbGVtZW50LG4uZWxlbWVudCk/MTotMX0pfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9LHQucHJvdG90eXBlLmVsZW1lbnRDb250YWluc0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksISF0aGlzLl9xdWV1ZS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVsZW1lbnQ9PT10fSl8fGV9LHR9KCksRHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kcml2ZXI9dCx0aGlzLl9ub3JtYWxpemVyPWUsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fX1yZXR1cm4gdC5wcm90b3R5cGUuX29uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXVlZFBsYXllcnMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucXVldWVkJiZ0LnB1c2goZSl9KX0pLHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IFJyKHQsZSx0aGlzKTtyZXR1cm4gZS5wYXJlbnROb2RlP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KG4sZSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChlLG4pLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdPW59LHQucHJvdG90eXBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7aWYobj49MCl7Zm9yKHZhciByPSExLGk9bjtpPj0wO2ktLSlpZih0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5fbmFtZXNwYWNlTGlzdFtpXS5ob3N0RWxlbWVudCxlKSl7dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaSsxLDAsdCkscj0hMDticmVha31yfHx0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZSgwLDAsdCl9ZWxzZSB0aGlzLl9uYW1lc3BhY2VMaXN0LnB1c2godCk7cmV0dXJuIHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuc2V0KGUsdCksdH0sdC5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIG58fChuPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLG59LHQucHJvdG90eXBlLnJlZ2lzdGVyVHJpZ2dlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxuKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYodCl7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7bi5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoci5ob3N0RWxlbWVudCksZGVsZXRlIG4uX25hbWVzcGFjZUxvb2t1cFt0XTt2YXIgZT1uLl9uYW1lc3BhY2VMaXN0LmluZGV4T2Yocik7ZT49MCYmbi5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoZSwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVzdHJveShlKX0pfX0sdC5wcm90b3R5cGUuX2ZldGNoTmFtZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF19LHQucHJvdG90eXBlLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgU2V0LG49dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pZm9yKHZhciByPU9iamVjdC5rZXlzKG4pLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89bltyW2ldXS5uYW1lc3BhY2VJZDtpZihvKXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZShvKTthJiZlLmFkZChhKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scil7aWYoTHIoZSkpe3ZhciBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKGkpcmV0dXJuIGkudHJpZ2dlcihlLG4sciksITB9cmV0dXJuITF9LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlLG4scil7aWYoTHIoZSkpe3ZhciBpPWVbSXJdO2lmKGkmJmkuc2V0Rm9yUmVtb3ZhbCl7aS5zZXRGb3JSZW1vdmFsPSExLGkuc2V0Rm9yTW92ZT0hMDt2YXIgbz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtvPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKG8sMSl9aWYodCl7dmFyIGE9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7YSYmYS5pbnNlcnROb2RlKGUsbil9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfX0sdC5wcm90b3R5cGUuY29sbGVjdEVudGVyRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc0Rpc2FibGVkPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxIcih0LCJuZy1hbmltYXRlLWRpc2FibGVkIikpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXModCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKHQpLFFyKHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSl9LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlLG4pe2lmKExyKGUpKXt2YXIgcj10P3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpOm51bGw7cj9yLnJlbW92ZU5vZGUoZSxuKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSwhMSxuKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUsbil9LHQucHJvdG90eXBlLm1hcmtFbGVtZW50QXNSZW1vdmVkPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGVbSXJdPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6cixoYXNBbmltYXRpb246bixyZW1vdmVkQmVmb3JlUXVlcmllZDohMX19LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBMcihlKT90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5saXN0ZW4oZSxuLHIsaSk6ZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5fYnVpbGRJbnN0cnVjdGlvbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxuLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLGkpfSx0LnByb3RvdHlwZS5kZXN0cm95SW5uZXJBbmltYXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLmRyaXZlci5xdWVyeSh0LCIubmctdHJpZ2dlciIsITApO24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl9KSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRpbmciLCEwKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnF1ZXVlZD90Lm1hcmtlZEZvckRlc3Ryb3k9ITA6dC5kZXN0cm95KCl9KX0sdC5wcm90b3R5cGUuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmluaXNoKCl9KX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtpZih0LnBsYXllcnMubGVuZ3RoKXJldHVybiB1bih0LnBsYXllcnMpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBlKCl9KTtlKCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc0xlYXZlTm9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dFtJcl07aWYobiYmbi5zZXRGb3JSZW1vdmFsKXtpZih0W0lyXT1BcixuLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCk7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2Uobi5uYW1lc3BhY2VJZCk7ciYmci5jbGVhckVsZW1lbnRDYWNoZSh0KX10aGlzLl9vblJlbW92YWxDb21wbGV0ZSh0LG4uc2V0Rm9yUmVtb3ZhbCl9dGhpcy5kcml2ZXIubWF0Y2hlc0VsZW1lbnQodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSksdGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpfSl9LHQucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciBuPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KHQsbil9KSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IodmFyIHI9MDtyPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7cisrKUhyKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tyXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXt2YXIgaT1bXTt0cnl7bj10aGlzLl9mbHVzaEFuaW1hdGlvbnMoaSx0KX1maW5hbGx5e2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihyPTA7cjx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO3IrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3JdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7dmFyIG89dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxuLmxlbmd0aD91bihuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uZXcgbHIsaT1bXSxvPW5ldyBNYXAsYT1bXSxzPW5ldyBNYXAsbD1uZXcgTWFwLHU9bmV3IE1hcCxjPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yy5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKyljLmFkZChlW3JdKX0pO3ZhciBmPUVuKCksaD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSkscD16cihoLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksbT1uZXcgTWFwLHk9MDtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK3krKzttLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSHIodCxuKX0pfSk7Zm9yKHZhciBnPVtdLHY9bmV3IFNldCxiPW5ldyBTZXQsXz0wO188dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtfKyspKEY9KEQ9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW19dKVtJcl0pJiZGLnNldEZvclJlbW92YWwmJihnLnB1c2goRCksdi5hZGQoRCksRi5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoRCwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB2LmFkZCh0KX0pOmIuYWRkKEQpKTt2YXIgdz1uZXcgTWFwLHg9enIoaCxBcnJheS5mcm9tKHYpKTt4LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK3krKzt3LnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSHIodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49bS5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBRcih0LG4pfSl9KSx4LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj13LmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFFyKHQsbil9KX0pLGcuZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgQz1bXSxFPVtdLE89dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtPPj0wO08tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W09dLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixvPXQuZWxlbWVudDtpZihDLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIGM9b1tJcl07aWYoYyYmYy5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBoPSFmfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KGYsbykscD13LmdldChvKSxkPW0uZ2V0KG8pLHk9bi5fYnVpbGRJbnN0cnVjdGlvbih0LHIsZCxwLGgpO2lmKHkuZXJyb3JzJiZ5LmVycm9ycy5sZW5ndGgpRS5wdXNoKHkpO2Vsc2V7aWYoaClyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIExuKG8seS5mcm9tU3R5bGVzKX0pLGUub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIEZuKG8seS50b1N0eWxlcyl9KSx2b2lkIGkucHVzaChlKTtpZih0LmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBlLm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gTG4obyx5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRm4obyx5LnRvU3R5bGVzKX0pLHZvaWQgaS5wdXNoKGUpO3kudGltZWxpbmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITB9KSxyLmFwcGVuZChvLHkudGltZWxpbmVzKSxhLnB1c2goe2luc3RydWN0aW9uOnkscGxheWVyOmUsZWxlbWVudDpvfSkseS5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZG4ocyx0LFtdKS5wdXNoKGUpfSkseS5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCl7dmFyIHI9bC5nZXQoZSk7cnx8bC5zZXQoZSxyPW5ldyBTZXQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gci5hZGQodCl9KX19KSx5LnBvc3RTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxyPXUuZ2V0KGUpO3J8fHUuc2V0KGUscj1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSl9KX19KTtpZihFLmxlbmd0aCl7dmFyIFM9W107RS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1MucHVzaCgiQCIrdC50cmlnZ2VyTmFtZSsiIGhhcyBmYWlsZWQgZHVlIHRvOlxuIiksdC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gUy5wdXNoKCItICIrdCsiXG4iKX0pfSksQy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMucmVwb3J0RXJyb3IoUyl9dmFyIGs9bmV3IE1hcCxUPW5ldyBNYXA7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtyLmhhcyhlKSYmKFQuc2V0KGUsZSksbi5fYmVmb3JlQW5pbWF0aW9uQnVpbGQodC5wbGF5ZXIubmFtZXNwYWNlSWQsdC5pbnN0cnVjdGlvbixrKSl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50O24uX2dldFByZXZpb3VzUGxheWVycyhlLCExLHQubmFtZXNwYWNlSWQsdC50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RuKGssZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIFA9Zy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIEdyKHQsbCx1KX0pLEE9bmV3IE1hcDtCcihBLHRoaXMuZHJpdmVyLGIsdSxLKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0dyKHQsbCx1KSYmUC5wdXNoKHQpfSk7dmFyIGo9bmV3IE1hcDtwLmZvckVhY2goZnVuY3Rpb24odCxlKXtCcihqLG4uZHJpdmVyLG5ldyBTZXQodCksbCxudCl9KSxQLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9QS5nZXQodCksbj1qLmdldCh0KTtBLnNldCh0LE9iamVjdChkLmEpKHt9LGUsbikpfSk7dmFyIEk9W10sTT1bXSxOPXt9O2EuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQsYT10LnBsYXllcixzPXQuaW5zdHJ1Y3Rpb247aWYoci5oYXMoZSkpe2lmKGMuaGFzKGUpKXJldHVybiBhLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBGbihlLHMudG9TdHlsZXMpfSksYS5kaXNhYmxlZD0hMCxhLm92ZXJyaWRlVG90YWxUaW1lKHMudG90YWxUaW1lKSx2b2lkIGkucHVzaChhKTt2YXIgbD1OO2lmKFQuc2l6ZT4xKXtmb3IodmFyIHU9ZSxmPVtdO3U9dS5wYXJlbnROb2RlOyl7dmFyIGg9VC5nZXQodSk7aWYoaCl7bD1oO2JyZWFrfWYucHVzaCh1KX1mLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFQuc2V0KHQsbCl9KX12YXIgcD1uLl9idWlsZEFuaW1hdGlvbihhLm5hbWVzcGFjZUlkLHMsayxvLGosQSk7aWYoYS5zZXRSZWFsUGxheWVyKHApLGw9PT1OKUkucHVzaChhKTtlbHNle3ZhciBkPW4ucGxheWVyc0J5RWxlbWVudC5nZXQobCk7ZCYmZC5sZW5ndGgmJihhLnBhcmVudFBsYXllcj11bihkKSksaS5wdXNoKGEpfX1lbHNlIExuKGUscy5mcm9tU3R5bGVzKSxhLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBGbihlLHMudG9TdHlsZXMpfSksTS5wdXNoKGEpLGMuaGFzKGUpJiZpLnB1c2goYSl9KSxNLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodC5lbGVtZW50KTtpZihlJiZlLmxlbmd0aCl7dmFyIG49dW4oZSk7dC5zZXRSZWFsUGxheWVyKG4pfX0pLGkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudFBsYXllcj90LnN5bmNQbGF5ZXJFdmVudHModC5wYXJlbnRQbGF5ZXIpOnQuZGVzdHJveSgpfSk7Zm9yKHZhciBSPTA7UjxnLmxlbmd0aDtSKyspe3ZhciBELEY9KEQ9Z1tSXSlbSXJdO2lmKFFyKEQsIm5nLWxlYXZlIiksIUZ8fCFGLmhhc0FuaW1hdGlvbil7dmFyIEw9W107aWYocy5zaXplKXt2YXIgVj1zLmdldChEKTtWJiZWLmxlbmd0aCYmTC5wdXNoLmFwcGx5KEwsT2JqZWN0KGQuZCkoVikpO2Zvcih2YXIgQj10aGlzLmRyaXZlci5xdWVyeShELCIubmctYW5pbWF0aW5nIiwhMCksej0wO3o8Qi5sZW5ndGg7eisrKXt2YXIgVT1zLmdldChCW3pdKTtVJiZVLmxlbmd0aCYmTC5wdXNoLmFwcGx5KEwsT2JqZWN0KGQuZCkoVSkpfX12YXIgSD1MLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5kZXN0cm95ZWR9KTtILmxlbmd0aD9xcih0aGlzLEQsSCk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEQpfX1yZXR1cm4gZy5sZW5ndGg9MCxJLmZvckVhY2goZnVuY3Rpb24odCl7bi5wbGF5ZXJzLnB1c2godCksdC5vbkRvbmUoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKTt2YXIgZT1uLnBsYXllcnMuaW5kZXhPZih0KTtuLnBsYXllcnMuc3BsaWNlKGUsMSl9KSx0LnBsYXkoKX0pLEl9LHQucHJvdG90eXBlLmVsZW1lbnRDb250YWluc0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgbj0hMSxyPWVbSXJdO3JldHVybiByJiZyLnNldEZvclJlbW92YWwmJihuPSEwKSx0aGlzLnBsYXllcnNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLnN0YXRlc0J5RWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5lbGVtZW50Q29udGFpbnNEYXRhKGUpfHxufSx0LnByb3RvdHlwZS5hZnRlckZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9LHQucHJvdG90eXBlLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZT1mdW5jdGlvbih0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuX2dldFByZXZpb3VzUGxheWVycz1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPVtdO2lmKGUpe3ZhciBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2EmJihvPWEpfWVsc2V7dmFyIHM9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihzKXt2YXIgbD0haXx8InZvaWQiPT1pO3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnF1ZXVlZHx8KGx8fHQudHJpZ2dlck5hbWU9PXIpJiZvLnB1c2godCl9KX19cmV0dXJuKG58fHIpJiYobz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKG4mJm4hPXQubmFtZXNwYWNlSWR8fHImJnIhPXQudHJpZ2dlck5hbWUpfSkpLG99LHQucHJvdG90eXBlLl9iZWZvcmVBbmltYXRpb25CdWlsZD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvPWUuZWxlbWVudCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZSxsPWZ1bmN0aW9uKHQpe3ZhciByPXQuZWxlbWVudCxpPXIhPT1vLGw9ZG4obixyLFtdKTt1Ll9nZXRQcmV2aW91c1BsYXllcnMocixpLGEscyxlLnRvU3RhdGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRSZWFsUGxheWVyKCk7ZS5iZWZvcmVEZXN0cm95JiZlLmJlZm9yZURlc3Ryb3koKSx0LmRlc3Ryb3koKSxsLnB1c2godCl9KX0sdT10aGlzO3RyeXtmb3IodmFyIGM9T2JqZWN0KGQuZSkoZS50aW1lbGluZXMpLGY9Yy5uZXh0KCk7IWYuZG9uZTtmPWMubmV4dCgpKWwoZi52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGk9Yy5yZXR1cm4pJiZpLmNhbGwoYyl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fUxuKG8sZS5mcm9tU3R5bGVzKX0sdC5wcm90b3R5cGUuX2J1aWxkQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10aGlzLHM9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCx1PVtdLGM9bmV3IFNldCxmPW5ldyBTZXQsaD1lLnRpbWVsaW5lcy5tYXAoZnVuY3Rpb24oZSl7dmFyIGg9ZS5lbGVtZW50O2MuYWRkKGgpO3ZhciBwPWhbSXJdO2lmKHAmJnAucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyB0dChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciBkLG0seT1oIT09bCxnPShkPShuLmdldChoKXx8UHIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSxtPVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpIGluc3RhbmNlb2YgZXQ/dChpLnBsYXllcnMsbik6bi5wdXNoKGkpfX0oZCxtKSxtKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISF0LmVsZW1lbnQmJnQuZWxlbWVudD09PWh9KSx2PWkuZ2V0KGgpLGI9by5nZXQoaCksXz1jbigwLGEuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyx2LGIpLHc9YS5fYnVpbGRQbGF5ZXIoZSxfLGcpO2lmKGUuc3ViVGltZWxpbmUmJnImJmYuYWRkKGgpLHkpe3ZhciB4PW5ldyBGcih0LHMsaCk7eC5zZXRSZWFsUGxheWVyKHcpLHUucHVzaCh4KX1yZXR1cm4gd30pO3UuZm9yRWFjaChmdW5jdGlvbih0KXtkbihhLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCxbXSkucHVzaCh0KSx0Lm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI7aWYodCBpbnN0YW5jZW9mIE1hcCl7aWYocj10LmdldChlKSl7aWYoci5sZW5ndGgpe3ZhciBpPXIuaW5kZXhPZihuKTtyLnNwbGljZShpLDEpfTA9PXIubGVuZ3RoJiZ0LmRlbGV0ZShlKX19ZWxzZShyPXRbZV0pJiYoci5sZW5ndGgmJihpPXIuaW5kZXhPZihuKSxyLnNwbGljZShpLDEpKSwwPT1yLmxlbmd0aCYmZGVsZXRlIHRbZV0pO3JldHVybiByfShhLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCx0KX0pfSksYy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIcih0LCJuZy1hbmltYXRpbmciKX0pO3ZhciBwPXVuKGgpO3JldHVybiBwLm9uRGVzdHJveShmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gUXIodCwibmctYW5pbWF0aW5nIil9KSxGbihsLGUudG9TdHlsZXMpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RuKHIsdCxbXSkucHVzaChwKX0pLHB9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsbik6bmV3IHR0KHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksRnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgdHQsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz17fSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXJldHVybiB0LnByb3RvdHlwZS5zZXRSZWFsUGxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsT2JqZWN0LmtleXModGhpcy5fcXVldWVkQ2FsbGJhY2tzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuX3F1ZXVlZENhbGxiYWNrc1tuXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBmbih0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7ZG4odGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsdCksdGhpcy5fcGxheWVyLm9uRG9uZSh0KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5maW5pc2goKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9LHR9KCk7ZnVuY3Rpb24gTHIodCl7cmV0dXJuIHQmJjE9PT10Lm5vZGVUeXBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIG49dC5zdHlsZS5kaXNwbGF5O3JldHVybiB0LnN0eWxlLmRpc3BsYXk9bnVsbCE9ZT9lOiJub25lIixufWZ1bmN0aW9uIEJyKHQsZSxuLHIsaSl7dmFyIG89W107bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnB1c2goVnIodCkpfSk7dmFyIGE9W107ci5mb3JFYWNoKGZ1bmN0aW9uKG4scil7dmFyIG89e307bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPW9bdF09ZS5jb21wdXRlU3R5bGUocix0LGkpO24mJjAhPW4ubGVuZ3RofHwocltJcl09anIsYS5wdXNoKHIpKX0pLHQuc2V0KHIsbyl9KTt2YXIgcz0wO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFZyKHQsb1tzKytdKX0pLGF9ZnVuY3Rpb24genIodCxlKXt2YXIgbj1uZXcgTWFwO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbi5zZXQodCxbXSl9KSwwPT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcj1uZXcgU2V0KGUpLGk9bmV3IE1hcDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uIHQoZSl7aWYoIWUpcmV0dXJuIDE7dmFyIG89aS5nZXQoZSk7aWYobylyZXR1cm4gbzt2YXIgYT1lLnBhcmVudE5vZGU7cmV0dXJuIG89bi5oYXMoYSk/YTpyLmhhcyhhKT8xOnQoYSksaS5zZXQoZSxvKSxvfSh0KTsxIT09ZSYmbi5nZXQoZSkucHVzaCh0KX0pLG59dmFyIFVyPSIkJGNsYXNzZXMiO2Z1bmN0aW9uIEhyKHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QuYWRkKGUpO2Vsc2V7dmFyIG49dFtVcl07bnx8KG49dFtVcl09e30pLG5bZV09ITB9fWZ1bmN0aW9uIFFyKHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QucmVtb3ZlKGUpO2Vsc2V7dmFyIG49dFtVcl07biYmZGVsZXRlIG5bZV19fWZ1bmN0aW9uIHFyKHQsZSxuKXt1bihuKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm9jZXNzTGVhdmVOb2RlKGUpfSl9ZnVuY3Rpb24gR3IodCxlLG4pe3ZhciByPW4uZ2V0KHQpO2lmKCFyKXJldHVybiExO3ZhciBpPWUuZ2V0KHQpO3JldHVybiBpP3IuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5hZGQodCl9KTplLnNldCh0LHIpLG4uZGVsZXRlKHQpLCEwfXZhciBZcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX2RyaXZlcj10LHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBEcih0LGUpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBUcih0LGUpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5vblJlbW92YWxDb21wbGV0ZSh0LGUpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89dCsiLSIrcixhPXRoaXMuX3RyaWdnZXJDYWNoZVtvXTtpZighYSl7dmFyIHM9W10sbD1lcih0aGlzLl9kcml2ZXIsaSxzKTtpZihzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhbmltYXRpb24gdHJpZ2dlciAiJytyKyciIGhhcyBmYWlsZWQgdG8gYnVpbGQgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuIC0gJytzLmpvaW4oIlxuIC0gIikpO2E9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IE9yKHQsZSl9KHIsbCksdGhpcy5fdHJpZ2dlckNhY2hlW29dPWF9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxyLGEpfSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfSx0LnByb3RvdHlwZS5vbkluc2VydD1mdW5jdGlvbih0LGUsbixyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLG4scil9LHQucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl9LHQucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24odCxlLG4scil7aWYoIkAiPT1uLmNoYXJBdCgwKSl7dmFyIGk9T2JqZWN0KGQuYykobW4obiksMik7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChpWzBdLGUsaVsxXSxyKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsbixyKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLHIsaSl7aWYoIkAiPT1uLmNoYXJBdCgwKSl7dmFyIG89T2JqZWN0KGQuYykobW4obiksMik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihvWzBdLGUsb1sxXSxpKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLG4scixpKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9LTEpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGxheWVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxXcj0iYW5pbWF0aW9uIixacj0iYW5pbWF0aW9uZW5kIixLcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fbmFtZT1lLHRoaXMuX2R1cmF0aW9uPW4sdGhpcy5fZGVsYXk9cix0aGlzLl9lYXNpbmc9aSx0aGlzLl9maWxsTW9kZT1vLHRoaXMuX29uRG9uZUZuPWEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fZXZlbnRGbj1mdW5jdGlvbih0KXtyZXR1cm4gcy5faGFuZGxlQ2FsbGJhY2sodCl9fXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0LGUsbjtlPXRoaXMuX2R1cmF0aW9uKyJtcyAiK3RoaXMuX2Vhc2luZysiICIrdGhpcy5fZGVsYXkrIm1zIDEgbm9ybWFsICIrdGhpcy5fZmlsbE1vZGUrIiAiK3RoaXMuX25hbWUsKG49bmkodD10aGlzLl9lbGVtZW50LCIiKS50cmltKCkpLmxlbmd0aCYmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspIiwiPT09dC5jaGFyQXQobikmJjB9KG4pLGU9bisiLCAiK2UpLGVpKHQsIiIsZSksdGkodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtYcih0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInBhdXNlZCIpfSx0LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtYcih0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInJ1bm5pbmciKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9JHIodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKTt0aGlzLl9wb3NpdGlvbj10KnRoaXMuX2R1cmF0aW9uLGVpKHRoaXMuX2VsZW1lbnQsIkRlbGF5IiwiLSIrdGhpcy5fcG9zaXRpb24rIm1zIixlKX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHQucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9uZ1Rlc3RNYW51YWxUaW1lc3RhbXB8fERhdGUubm93KCksbj0xZTMqcGFyc2VGbG9hdCh0LmVsYXBzZWRUaW1lLnRvRml4ZWQoMykpO3QuYW5pbWF0aW9uTmFtZT09dGhpcy5fbmFtZSYmTWF0aC5tYXgoZS10aGlzLl9zdGFydFRpbWUsMCk+PXRoaXMuX2RlbGF5JiZuPj10aGlzLl9kdXJhdGlvbiYmdGhpcy5maW5pc2goKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLHRpKHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZmluaXNoKCksZT10aGlzLl9uYW1lLChyPUpyKG49bmkodD10aGlzLl9lbGVtZW50LCIiKS5zcGxpdCgiLCIpLGUpKT49MCYmKG4uc3BsaWNlKHIsMSksZWkodCwiIixuLmpvaW4oIiwiKSkpKX0sdH0oKTtmdW5jdGlvbiBYcih0LGUsbil7ZWkodCwiUGxheVN0YXRlIixuLCRyKHQsZSkpfWZ1bmN0aW9uICRyKHQsZSl7dmFyIG49bmkodCwiIik7cmV0dXJuIG4uaW5kZXhPZigiLCIpPjA/SnIobi5zcGxpdCgiLCIpLGUpOkpyKFtuXSxlKX1mdW5jdGlvbiBKcih0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiB0aSh0LGUsbil7bj90LnJlbW92ZUV2ZW50TGlzdGVuZXIoWnIsZSk6dC5hZGRFdmVudExpc3RlbmVyKFpyLGUpfWZ1bmN0aW9uIGVpKHQsZSxuLHIpe3ZhciBpPVdyK2U7aWYobnVsbCE9cil7dmFyIG89dC5zdHlsZVtpXTtpZihvLmxlbmd0aCl7dmFyIGE9by5zcGxpdCgiLCIpO2Fbcl09bixuPWEuam9pbigiLCIpfX10LnN0eWxlW2ldPW59ZnVuY3Rpb24gbmkodCxlKXtyZXR1cm4gdC5zdHlsZVtXcitlXX12YXIgcmk9ImxpbmVhciIsaWk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JTklUSUFMSVpFRD0xXT0iSU5JVElBTElaRUQiLHRbdC5TVEFSVEVEPTJdPSJTVEFSVEVEIix0W3QuRklOSVNIRUQ9M109IkZJTklTSEVEIix0W3QuREVTVFJPWUVEPTRdPSJERVNUUk9ZRUQiLHR9KHt9KSxvaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1yLHRoaXMuX2RlbGF5PWksdGhpcy5fZmluYWxTdHlsZXM9YSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLmN1cnJlbnRTbmFwc2hvdD17fSx0aGlzLnN0YXRlPTAsdGhpcy5lYXNpbmc9b3x8cmksdGhpcy50b3RhbFRpbWU9citpLHRoaXMuX2J1aWxkU3R5bGVyKCl9cmV0dXJuIHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PWlpLkRFU1RST1lFRHx8KHRoaXMuc3RhdGU9aWkuREVTVFJPWUVELHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5fZmx1c2hEb25lRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXX0sdC5wcm90b3R5cGUuX2ZsdXNoU3RhcnRGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PWlpLkZJTklTSEVEfHwodGhpcy5zdGF0ZT1paS5GSU5JU0hFRCx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlPj1paS5TVEFSVEVEfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT49aWkuSU5JVElBTElaRUR8fCh0aGlzLnN0YXRlPWlpLklOSVRJQUxJWkVELHRoaXMuX3N0eWxlci5hcHBseSgpLHRoaXMuX2RlbGF5JiZ0aGlzLl9zdHlsZXIucGF1c2UoKSl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLnN0YXRlPWlpLlNUQVJURUQpLHRoaXMuX3N0eWxlci5yZXN1bWUoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9zdHlsZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXIuZGVzdHJveSgpLHRoaXMuX2J1aWxkU3R5bGVyKCksdGhpcy5fc3R5bGVyLmFwcGx5KCl9LHQucHJvdG90eXBlLl9idWlsZFN0eWxlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3R5bGVyPW5ldyBLcih0aGlzLmVsZW1lbnQsdGhpcy5hbmltYXRpb25OYW1lLHRoaXMuX2R1cmF0aW9uLHRoaXMuX2RlbGF5LHRoaXMuZWFzaW5nLCJmb3J3YXJkcyIsZnVuY3Rpb24oKXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaW5pdCgpO3ZhciBlPXt9O2lmKHRoaXMuaGFzU3RhcnRlZCgpKXt2YXIgbj10aGlzLnN0YXRlPj1paS5GSU5JU0hFRDtPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihyKXsib2Zmc2V0IiE9ciYmKGVbcl09bj90Ll9maW5hbFN0eWxlc1tyXTpabih0LmVsZW1lbnQscikpfSl9dGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdH0oKSxhaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmVsZW1lbnQ9ZSxyLl9zdGFydGluZ1N0eWxlcz17fSxyLl9faW5pdGlhbGl6ZWQ9ITEsci5fc3R5bGVzPVRuKG4pLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IXRoaXMuX19pbml0aWFsaXplZCYmdGhpcy5fc3RhcnRpbmdTdHlsZXMmJih0aGlzLl9faW5pdGlhbGl6ZWQ9ITAsT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0YXJ0aW5nU3R5bGVzW3RdPWUuZWxlbWVudC5zdHlsZVt0XX0pLHQucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5pbml0KCksT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxlLl9zdHlsZXNbdF0pfSksdC5wcm90b3R5cGUucGxheS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc3RhcnRpbmdTdHlsZXMmJihPYmplY3Qua2V5cyh0aGlzLl9zdGFydGluZ1N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9zdGFydGluZ1N0eWxlc1t0XTtuP2UuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOmUuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX0pLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpKX0sZX0odHQpLHNpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2NvdW50PTAsdGhpcy5faGVhZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIiksdGhpcy5fd2FybmluZ0lzc3VlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBDbih0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT24odCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNuKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4ga24odCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJAa2V5ZnJhbWVzICIrZSsiIHtcbiIsaT0iIjsobj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gVG4odCl9KSkuZm9yRWFjaChmdW5jdGlvbih0KXtpPSIgIjt2YXIgZT1wYXJzZUZsb2F0KHQub2Zmc2V0KTtyKz0iIitpKzEwMCplKyIlIHtcbiIsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJvZmZzZXQiOnJldHVybjtjYXNlImVhc2luZyI6cmV0dXJuIHZvaWQobiYmKHIrPWkrImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICIrbisiO1xuIikpO2RlZmF1bHQ6cmV0dXJuIHZvaWQocis9IiIraStlKyI6ICIrbisiO1xuIil9fSkscis9aSsifVxuIn0pLHIrPSJ9XG4iO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG8uaW5uZXJIVE1MPXIsb30sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXt2b2lkIDA9PT1vJiYobz1bXSksYSYmdGhpcy5fbm90aWZ5RmF1bHR5U2NydWJiZXIoKTt2YXIgcz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG9pfSksbD17fTtHbihuLHIpJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XT1lW3RdfSl9KTt2YXIgdT1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdCYmKEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmImVhc2luZyIhPW4mJihlW25dPXRbbl0pfSl9KSxlfShlPVluKHQsZSxsKSk7aWYoMD09bilyZXR1cm4gbmV3IGFpKHQsdSk7dmFyIGM9Imdlbl9jc3Nfa2ZfIit0aGlzLl9jb3VudCsrLGY9dGhpcy5idWlsZEtleWZyYW1lRWxlbWVudCh0LGMsZSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLmFwcGVuZENoaWxkKGYpO3ZhciBoPW5ldyBvaSh0LGUsYyxuLHIsaSx1KTtyZXR1cm4gaC5vbkRlc3Ryb3koZnVuY3Rpb24oKXt2YXIgdDsodD1mKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSksaH0sdC5wcm90b3R5cGUuX25vdGlmeUZhdWx0eVNjcnViYmVyPWZ1bmN0aW9uKCl7dGhpcy5fd2FybmluZ0lzc3VlZHx8KGNvbnNvbGUud2FybigiQGFuZ3VsYXIvYW5pbWF0aW9uczogcGxlYXNlIGxvYWQgdGhlIHdlYi1hbmltYXRpb25zLmpzIHBvbHlmaWxsIHRvIGFsbG93IHByb2dyYW1tYXRpYyBhY2Nlc3MuLi5cbiIsIiAgdmlzaXQgaHR0cDovL2JpdC5seS9JV3VrYW0gdG8gbGVhcm4gbW9yZSBhYm91dCB1c2luZyB0aGUgd2ViLWFuaW1hdGlvbi1qcyBwb2x5ZmlsbC4iKSx0aGlzLl93YXJuaW5nSXNzdWVkPSEwKX0sdH0oKSxsaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPW4sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX2luaXRpYWxpemVkKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZT10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxlLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnt9LHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfX0sdC5wcm90b3R5cGUuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5fdHJpZ2dlcldlYkFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYW5pbWF0ZShlLG4pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITApLHRoaXMuZG9tUGxheWVyLnBsYXkoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuX3Jlc2V0RG9tUGxheWVyU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0b3RhbFRpbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmKGVbbl09dC5fZmluaXNoZWQ/dC5fZmluYWxLZXlmcmFtZVtuXTpabih0LmVsZW1lbnQsbikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHVpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzTmF0aXZlSW1wbD0vXHtccypcW25hdGl2ZVxzK2NvZGVcXVxzKlx9Ly50ZXN0KGNpKCkudG9TdHJpbmcoKSksdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyPW5ldyBzaX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBDbih0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT24odCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNuKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4ga24odCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUub3ZlcnJpZGVXZWJBbmltYXRpb25zU3VwcG9ydD1mdW5jdGlvbih0KXt0aGlzLl9pc05hdGl2ZUltcGw9dH0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtpZih2b2lkIDA9PT1vJiYobz1bXSksIWEmJiF0aGlzLl9pc05hdGl2ZUltcGwpcmV0dXJuIHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlci5hbmltYXRlKHQsZSxuLHIsaSxvKTt2YXIgcz17ZHVyYXRpb246bixkZWxheTpyLGZpbGw6MD09cj8iYm90aCI6ImZvcndhcmRzIn07aSYmKHMuZWFzaW5nPWkpO3ZhciBsPXt9LHU9by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBsaX0pO3JldHVybiBHbihuLHIpJiZ1LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XT1lW3RdfSl9KSxlPVluKHQsZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gRG4odCwhMSl9KSxsKSxuZXcgbGkodCxlLHMpfSx0fSgpO2Z1bmN0aW9uIGNpKCl7cmV0dXJuIGxuKCkmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fXZhciBmaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9uZXh0QW5pbWF0aW9uSWQ9MCxyLl9yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKG4uYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246by5RLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO3ZhciBuPUFycmF5LmlzQXJyYXkodCk/WCh0KTp0O3JldHVybiBkaSh0aGlzLl9yZW5kZXJlcixudWxsLGUsInJlZ2lzdGVyIixbbl0pLG5ldyBoaShlLHRoaXMuX3JlbmRlcmVyKX0sZX0oWiksaGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5faWQ9ZSxyLl9yZW5kZXJlcj1uLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBwaSh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX0sZX0oZnVuY3Rpb24oKXt9KSxwaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixuKX1yZXR1cm4gdC5wcm90b3R5cGUuX2xpc3Rlbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LCJAQCIrdGhpcy5pZCsiOiIrdCxlKX0sdC5wcm90b3R5cGUuX2NvbW1hbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGRpKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3Rlbigic3RhcnQiLHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImluaXQiKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydGVkfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiAwfSx0fSgpO2Z1bmN0aW9uIGRpKHQsZSxuLHIsaSl7cmV0dXJuIHQuc2V0UHJvcGVydHkoZSwiQEAiK24rIjoiK3IsaSl9dmFyIG1pPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1uLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtlJiZlLnBhcmVudE5vZGUodCkmJmUucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlLHQpfX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCEodCYmZSYmZS5kYXRhJiZlLmRhdGEuYW5pbWF0aW9uKSl7dmFyIGk9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQocik7cmV0dXJuIGl8fChpPW5ldyB5aSgiIixyLHRoaXMuZW5naW5lKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChyLGkpKSxpfXZhciBvPWUuaWQsYT1lLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7cmV0dXJuIHRoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsdCksZS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIobyxhLHQsZS5uYW1lLGUpfSksbmV3IGdpKHRoaXMsYSxyLHRoaXMuZW5naW5lKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLl9zY2hlZHVsZUNvdW50VGFzaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt0Ll9taWNyb3Rhc2tJZCsrfSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt0Pj0wJiZ0PHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oZnVuY3Rpb24oKXtyLl96b25lLnJ1bihmdW5jdGlvbigpe3IuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChkLmMpKHQsMik7KDAsZVswXSkoZVsxXSl9KSxyLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtlLG5dKSl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fc2NoZWR1bGVDb3VudFRhc2soKSx0LmVuZ2luZS5mbHVzaCh0Ll9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSx5aT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9bix0aGlzLmRlc3Ryb3lOb2RlPXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVzdHJveU5vZGUodCl9Om51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCExKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbiksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITApfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCl9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixyKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7IkAiPT1lLmNoYXJBdCgwKSYmIkAuZGlzYWJsZWQiPT1lP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIW4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9LHR9KCksZ2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxuLHIsaSl8fHRoaXM7cmV0dXJuIG8uZmFjdG9yeT1lLG8ubmFtZXNwYWNlSWQ9bixvfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsbj12b2lkIDA9PT1ufHwhIW4pOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc3Vic3RyKDEpLG4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSxlLnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxhPXRoaXM7aWYoIkAiPT1lLmNoYXJBdCgwKSl7dmFyIHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSh0KSxsPWUuc3Vic3RyKDEpLHU9IiI7cmV0dXJuIkAiIT1sLmNoYXJBdCgwKSYmKGw9KHI9T2JqZWN0KGQuYykoKGk9bCxvPWkuaW5kZXhPZigiLiIpLFtpLnN1YnN0cmluZygwLG8pLGkuc3Vic3RyKG8rMSldKSwyKSlbMF0sdT1yWzFdKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxzLGwsdSxmdW5jdGlvbih0KXthLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKHQuX2RhdGF8fC0xLG4sdCl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSxlfSh5aSksdmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyxlLG4pfHx0aGlzfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGV9KFlyKTtmdW5jdGlvbiBiaSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjaSgpP25ldyB1aTpuZXcgc2l9ZnVuY3Rpb24gX2koKXtyZXR1cm4gbmV3IGJyfWZ1bmN0aW9uIHdpKHQsZSxuKXtyZXR1cm4gbmV3IG1pKHQsZSxuKX12YXIgeGk9bmV3IG8ucCgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLENpPWZ1bmN0aW9uKCl7fSxFaT1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b25bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmU7b3BhY2l0eTowfS5tYXQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXJhaXNlZC1idXR0b257dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1taW5pLWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1taW5pLWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiW2Rpc2FibGVkXXtib3gtc2hhZG93Om5vbmV9Lm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLC4yKSwwIDEycHggMTdweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtaWNvbi1idXR0b24gaXtsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJhZGl1czppbmhlcml0O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGN1YmljLWJlemllciguMzUsMCwuMjUsMSksYmFja2dyb3VuZC1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbntvdXRsaW5lOnNvbGlkIDFweH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIE9pKHQpe3JldHVybiBvLmtiKDIsW28uZ2IoNDAyNjUzMTg0LDEse3JpcHBsZTowfSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1idXR0b24td3JhcHBlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlphKG51bGwsMCksKHQoKSgpLG8uUWEoMywwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWJ1dHRvbi1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0UmlwcGxlIiwiIl1dLFtbMiwibWF0LWJ1dHRvbi1yaXBwbGUtcm91bmQiLG51bGxdLFsyLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsMjEyOTkyLFtbMSw0XV0sMCxUZSxbby5rLG8ueSx1LFsyLGtlXSxbMix4aV1dLHtjZW50ZXJlZDpbMCwiY2VudGVyZWQiXSxkaXNhYmxlZDpbMSwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsyLCJ0cmlnZ2VyIl19LG51bGwpLCh0KCkoKSxvLlFhKDUsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNCwwLG4uaXNJY29uQnV0dG9uLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMywwLG4uaXNSb3VuZEJ1dHRvbnx8bi5pc0ljb25CdXR0b24sby5hYihlLDQpLnVuYm91bmRlZCl9KX12YXIgU2k9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MjRweDttYXgtd2lkdGg6NTY4cHg7bWluLXdpZHRoOjI4OHB4O3BhZGRpbmc6MTRweCAyNHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpIHRyYW5zbGF0ZVkoMjRweCl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVyLm1hdC1zbmFjay1iYXItY2VudGVye21hcmdpbjowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfS5tYXQtc25hY2stYmFyLWNvbnRhaW5lci5tYXQtc25hY2stYmFyLXRvcHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSkgdHJhbnNsYXRlWSgtMjRweCl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVyLm1hdC1zbmFjay1iYXItdG9wLm1hdC1zbmFjay1iYXItY2VudGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH19Lm1hdC1zbmFjay1iYXItaGFuZHNldHt3aWR0aDoxMDAlfS5tYXQtc25hY2stYmFyLWhhbmRzZXQgLm1hdC1zbmFjay1iYXItY29udGFpbmVye21hcmdpbjowO21heC13aWR0aDppbmhlcml0O3dpZHRoOjEwMCV9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InN0YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJ2aXNpYmxlLXRvcCwgdmlzaWJsZS1ib3R0b20iLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2aXNpYmxlLXRvcCA9PiBoaWRkZW4tdG9wLCB2aXNpYmxlLWJvdHRvbSA9PiBoaWRkZW4tYm90dG9tIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIxOTVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPT4gdmlzaWJsZS10b3AsIHZvaWQgPT4gdmlzaWJsZS1ib3R0b20iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjAsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBraSh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5IYSgwLG51bGwsbnVsbCwwKSldLG51bGwsbnVsbCl9ZnVuY3Rpb24gVGkodCl7cmV0dXJuIG8ua2IoMixbby5nYig0MDI2NTMxODQsMSx7X3BvcnRhbE91dGxldDowfSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxraSkpLG8uUGEoMiwyMTI5OTIsW1sxLDRdXSwwLGp0LFtvLmosby5QXSx7cG9ydGFsOlswLCJwb3J0YWwiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDIsMCwiIil9LG51bGwpfXZhciBQaT1vLk1hKCJzbmFjay1iYXItY29udGFpbmVyIixWZSxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsInNuYWNrLWJhci1jb250YWluZXIiLFtbImNsYXNzIiwibWF0LXNuYWNrLWJhci1jb250YWluZXIiXSxbInJvbGUiLCJhbGVydCJdXSxbWzQwLCJAc3RhdGUiLDBdXSxbWyJjb21wb25lbnQiLCJAc3RhdGUuZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNvbXBvbmVudDpAc3RhdGUuZG9uZSI9PT1lJiYocj0hMSE9PW8uYWIodCwxKS5vbkFuaW1hdGlvbkVuZChuKSYmcikscn0sVGksU2kpKSxvLlBhKDEsMTgwMjI0LG51bGwsMCxWZSxbby55LG8uayxvLmgsRmVdLG51bGwsbnVsbCldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLG8uYWIoZSwxKS5fYW5pbWF0aW9uU3RhdGUpfSl9LHt9LHt9LFtdKSxBaT1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1zaW1wbGUtc25hY2tiYXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtc2hyaW5rOjA7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDttYXJnaW46LThweCAwIC04cHggOHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiBidXR0b257ZmxleDoxO21heC1oZWlnaHQ6MzZweH1bZGlyPXJ0bF0gLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiY29udGVudEZhZGUiLGRlZmluaXRpb25zOlt7dHlwZToxLGV4cHI6IjplbnRlciIsYW5pbWF0aW9uOlt7dHlwZTo2LHN0eWxlczp7b3BhY2l0eToiMCJ9LG9mZnNldDpudWxsfSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjM3NW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9XSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gamkodCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwzLCJkaXYiLFtbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwyLCJidXR0b24iLFtbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuYWN0aW9uKCkmJnIpLHJ9LE9pLEVpKSksby5QYSgyLDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigzLDAsWyIiLCIiXSkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxvLmFiKGUsMikuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSwyKS5fYW5pbWF0aW9uTW9kZSksdChlLDMsMCxuLmRhdGEuYWN0aW9uKX0pfWZ1bmN0aW9uIElpKHQpe3JldHVybiBvLmtiKDIsWyh0KCkoKSxvLmliKDAsbnVsbCxbIiIsIiJdKSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxqaSkpLG8uUGEoMiwxNjM4NCxudWxsLDAscy5rLFtvLlAsby5NXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMiwwLGUuY29tcG9uZW50Lmhhc0FjdGlvbil9LGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5kYXRhLm1lc3NhZ2UpfSl9dmFyIE1pPW8uTWEoInNpbXBsZS1zbmFjay1iYXIiLExlLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwic2ltcGxlLXNuYWNrLWJhciIsW1siY2xhc3MiLCJtYXQtc2ltcGxlLXNuYWNrYmFyIl1dLFtbNDAsIkBjb250ZW50RmFkZSIsMF1dLG51bGwsbnVsbCxJaSxBaSkpLG8uUGEoMSw0OTE1MixudWxsLDAsTGUsW1JlLERlXSxudWxsLG51bGwpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCx2b2lkIDApfSl9LHt9LHt9LFtdKSxOaT1uKCJwTW5TIiksUmk9ZnVuY3Rpb24oKXt9LERpPWZ1bmN0aW9uKCl7fSxGaT1mdW5jdGlvbigpe30sTGk9ZnVuY3Rpb24oKXt9LFZpPWZ1bmN0aW9uKCl7fSxCaT1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1jYXJke3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MjRweDtib3JkZXItcmFkaXVzOjJweH0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FyZCAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCV9W2Rpcj1ydGxdIC5tYXQtY2FyZCAubWF0LWRpdmlkZXJ7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luOjB9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXR7Ym94LXNoYWRvdzpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtY2FyZHtvdXRsaW5lOnNvbGlkIDFweH19Lm1hdC1jYXJkLWFjdGlvbnMsLm1hdC1jYXJkLWNvbnRlbnQsLm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC10aXRsZXtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTZweH0ubWF0LWNhcmQtYWN0aW9uc3ttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHg7cGFkZGluZzo4cHggMH0ubWF0LWNhcmQtYWN0aW9ucy1hbGlnbi1lbmR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgNDhweCk7bWFyZ2luOjAgLTI0cHggMTZweCAtMjRweH0ubWF0LWNhcmQteGwtaW1hZ2V7d2lkdGg6MjQwcHg7aGVpZ2h0OjI0MHB4O21hcmdpbjotOHB4fS5tYXQtY2FyZC1mb290ZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MCAtMjRweCAtMjRweCAtMjRweH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbiwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b257bWFyZ2luOjAgNHB4fS5tYXQtY2FyZC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubWF0LWNhcmQtaGVhZGVyLXRleHR7bWFyZ2luOjAgOHB4fS5tYXQtY2FyZC1hdmF0YXJ7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowfS5tYXQtY2FyZC1sZy1pbWFnZSwubWF0LWNhcmQtbWQtaW1hZ2UsLm1hdC1jYXJkLXNtLWltYWdle21hcmdpbjotOHB4IDB9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MCAtOHB4fS5tYXQtY2FyZC1zbS1pbWFnZXt3aWR0aDo4MHB4O2hlaWdodDo4MHB4fS5tYXQtY2FyZC1tZC1pbWFnZXt3aWR0aDoxMTJweDtoZWlnaHQ6MTEycHh9Lm1hdC1jYXJkLWxnLWltYWdle3dpZHRoOjE1MnB4O2hlaWdodDoxNTJweH1AbWVkaWEgKG1heC13aWR0aDo1OTlweCl7Lm1hdC1jYXJke3BhZGRpbmc6MjRweCAxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0Oi04cHh9Lm1hdC1jYXJkLWltYWdle3dpZHRoOmNhbGMoMTAwJSArIDMycHgpO21hcmdpbjoxNnB4IC0xNnB4fS5tYXQtY2FyZC10aXRsZS1ncm91cHttYXJnaW46MH0ubWF0LWNhcmQteGwtaW1hZ2V7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtaGVhZGVye21hcmdpbjotOHB4IDAgMCAwfS5tYXQtY2FyZC1mb290ZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4fX0ubWF0LWNhcmQtY29udGVudD46Zmlyc3QtY2hpbGQsLm1hdC1jYXJkPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1hdC1jYXJkLWNvbnRlbnQ+Omxhc3QtY2hpbGQ6bm90KC5tYXQtY2FyZC1mb290ZXIpLC5tYXQtY2FyZD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3Rlcil7bWFyZ2luLWJvdHRvbTowfS5tYXQtY2FyZC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi0yNHB4fS5tYXQtY2FyZD4ubWF0LWNhcmQtYWN0aW9uczpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTE2cHg7cGFkZGluZy1ib3R0b206MH0ubWF0LWNhcmQtYWN0aW9ucyAubWF0LWJ1dHRvbjpmaXJzdC1jaGlsZCwubWF0LWNhcmQtYWN0aW9ucyAubWF0LXJhaXNlZC1idXR0b246Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNhcmQtc3VidGl0bGU6bm90KDpmaXJzdC1jaGlsZCksLm1hdC1jYXJkLXRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LTRweH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi04cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC14bC1pbWFnZTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LThweH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gemkodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApLG8uWmEobnVsbCwxKV0sbnVsbCxudWxsKX12YXIgVWk9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gSGkodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uWmEobnVsbCwxKSxvLlphKG51bGwsMildLG51bGwsbnVsbCl9dmFyIFFpLHFpLEdpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfSxZaT0oMT09PShRaT1HaSkubGVuZ3RoJiYocWk9UWksUWk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR2kocWkodCksZSl9KSx7bGVmdDpmdW5jdGlvbih0LGUsbixyKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09ciYmKHI9dC5sZW5ndGgpO248cjspe3ZhciBpPW4rcj4+PjE7UWkodFtpXSxlKTwwP249aSsxOnI9aX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24odCxlLG4scil7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PXImJihyPXQubGVuZ3RoKTtuPHI7KXt2YXIgaT1uK3I+Pj4xO1FpKHRbaV0sZSk+MD9yPWk6bj1pKzF9cmV0dXJuIG59fSkucmlnaHQsV2k9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0sWmk9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihyPWk9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sS2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLFhpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEppPWZ1bmN0aW9uKHQsZSxuKXt0PSt0LGU9K2Usbj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOituO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvbikpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrcipuO3JldHVybiBvfSx0bz1NYXRoLnNxcnQoNTApLGVvPU1hdGguc3FydCgxMCksbm89TWF0aC5zcXJ0KDIpLHJvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG8sYSxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKHI9ZTx0KSYmKGk9dCx0PWUsZT1pKSwwPT09KGE9aW8odCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrczxpOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrczxpOylvW3NdPSh0LXMpL2E7cmV0dXJuIHImJm8ucmV2ZXJzZSgpLG99O2Z1bmN0aW9uIGlvKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLG89ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49dG8/MTA6bz49ZW8/NTpvPj1ubz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PXRvPzEwOm8+PWVvPzU6bz49bm8/MjoxKX1mdW5jdGlvbiBvbyh0LGUsbil7dmFyIHI9TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApKSxvPXIvaTtyZXR1cm4gbz49dG8/aSo9MTA6bz49ZW8/aSo9NTpvPj1ubyYmKGkqPTIpLGU8dD8taTppfXZhciBhbz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX07QXJyYXk7dmFyIHNvPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIGxvKCl7Zm9yKHZhciB0LGU9MCxuPWFyZ3VtZW50cy5sZW5ndGgscj17fTtlPG47KytlKXtpZighKHQ9YXJndW1lbnRzW2VdKyIiKXx8dCBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyB1byhyKX1mdW5jdGlvbiB1byh0KXt0aGlzLl89dH1mdW5jdGlvbiBjbyh0LGUpe2Zvcih2YXIgbixyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChuPXRbcl0pLm5hbWU9PT1lKXJldHVybiBuLnZhbHVlfWZ1bmN0aW9uIGZvKHQsZSxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09ZSl7dFtyXT1zbyx0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOmUsdmFsdWU6bn0pLHR9dW8ucHJvdG90eXBlPWxvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dW8sb246ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dGhpcy5fLG89KHI9aSwodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO2lmKG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSksdCYmIXIuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSkpLGE9LTEscz1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxzOylpZihuPSh0PW9bYV0pLnR5cGUpaVtuXT1mbyhpW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gaSlpW25dPWZvKGlbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPHM7KWlmKChuPSh0PW9bYV0pLnR5cGUpJiYobj1jbyhpW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyB1byh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4scixpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylpW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxuPShyPXRoaXMuX1t0XSkubGVuZ3RoO288bjsrK28pcltvXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIGhvPWxvLHBvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixtbz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6cG8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSx5bz1mdW5jdGlvbih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxtby5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6bW9bZV0sbG9jYWw6dH06dH0sZ289ZnVuY3Rpb24odCl7dmFyIGU9eW8odCk7cmV0dXJuKGUubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxuPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBuPT09cG8mJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXBvP2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhuLHQpfX0pKGUpfTtmdW5jdGlvbiB2bygpe312YXIgYm89ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX07ZnVuY3Rpb24gX28oKXtyZXR1cm5bXX12YXIgd289ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/X286ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX0seG89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBDbz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIUNvLm1hdGNoZXMpe3ZhciBFbz1Dby53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fENvLm1zTWF0Y2hlc1NlbGVjdG9yfHxDby5tb3pNYXRjaGVzU2VsZWN0b3J8fENvLm9NYXRjaGVzU2VsZWN0b3I7eG89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEVvLmNhbGwodGhpcyx0KX19fX12YXIgT289eG8sU289ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9O2Z1bmN0aW9uIGtvKHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfWtvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6a28sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIFRvPSIkIjtmdW5jdGlvbiBQbyh0LGUsbixyLGksbyl7Zm9yKHZhciBhLHM9MCxsPWUubGVuZ3RoLHU9by5sZW5ndGg7czx1OysrcykoYT1lW3NdKT8oYS5fX2RhdGFfXz1vW3NdLHJbc109YSk6bltzXT1uZXcga28odCxvW3NdKTtmb3IoO3M8bDsrK3MpKGE9ZVtzXSkmJihpW3NdPWEpfWZ1bmN0aW9uIEFvKHQsZSxuLHIsaSxvLGEpe3ZhciBzLGwsdSxjPXt9LGY9ZS5sZW5ndGgsaD1vLmxlbmd0aCxwPW5ldyBBcnJheShmKTtmb3Iocz0wO3M8ZjsrK3MpKGw9ZVtzXSkmJihwW3NdPXU9VG8rYS5jYWxsKGwsbC5fX2RhdGFfXyxzLGUpLHUgaW4gYz9pW3NdPWw6Y1t1XT1sKTtmb3Iocz0wO3M8aDsrK3MpKGw9Y1t1PVRvK2EuY2FsbCh0LG9bc10scyxvKV0pPyhyW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbdV09bnVsbCk6bltzXT1uZXcga28odCxvW3NdKTtmb3Iocz0wO3M8ZjsrK3MpKGw9ZVtzXSkmJmNbcFtzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBqbyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIgSW89ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fTtmdW5jdGlvbiBNbyh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fElvKHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIE5vKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBSbyh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBEbyh0KX1mdW5jdGlvbiBEbyh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9Tm8odC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBGbyh0LGUpe2Zvcih2YXIgbj1Sbyh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4uYWRkKGVbcl0pfWZ1bmN0aW9uIExvKHQsZSl7Zm9yKHZhciBuPVJvKHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5yZW1vdmUoZVtyXSl9ZnVuY3Rpb24gVm8oKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEJvKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gem8oKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVW8oKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBIbygpe3JldHVybiBudWxsfWZ1bmN0aW9uIFFvKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcW8oKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gR28oKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9RG8ucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgWW89e30sV289bnVsbDtmdW5jdGlvbiBabyh0LGUsbil7cmV0dXJuIHQ9S28odCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBLbyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPVdvO1dvPXI7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e1dvPWl9fX1mdW5jdGlvbiBYbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLG89ZS5sZW5ndGg7cjxvOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gJG8odCxlLG4pe3ZhciByPVlvLmhhc093blByb3BlcnR5KHQudHlwZSk/Wm86S287cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcyxsPXRoaXMuX19vbix1PXIoZSxvLGEpO2lmKGwpZm9yKHZhciBjPTAsZj1sLmxlbmd0aDtjPGY7KytjKWlmKChzPWxbY10pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPXUscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHUsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjp1LGNhcHR1cmU6bn0sbD9sLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gSm8odCxlLG4pe3ZhciByPUlvKHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KFlvPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdGE9W251bGxdO2Z1bmN0aW9uIGVhKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIG5hKCl7cmV0dXJuIG5ldyBlYShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHRhKX1lYS5wcm90b3R5cGU9bmEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplYSxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWJvKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBvLGEscz1lW2ldLGw9cy5sZW5ndGgsdT1yW2ldPW5ldyBBcnJheShsKSxjPTA7YzxsOysrYykobz1zW2NdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyxjLHMpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSx1W2NdPWEpO3JldHVybiBuZXcgZWEocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD13byh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9W10saT1bXSxvPTA7bzxuOysrbylmb3IodmFyIGEscz1lW29dLGw9cy5sZW5ndGgsdT0wO3U8bDsrK3UpKGE9c1t1XSkmJihyLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyx1LHMpKSxpLnB1c2goYSkpO3JldHVybiBuZXcgZWEocixpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1Pbyh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhPWVbaV0scz1hLmxlbmd0aCxsPXJbaV09W10sdT0wO3U8czsrK3UpKG89YVt1XSkmJnQuY2FsbChvLG8uX19kYXRhX18sdSxhKSYmbC5wdXNoKG8pO3JldHVybiBuZXcgZWEocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7ZFsrK2NdPXR9KSxkO3ZhciBuLHI9ZT9BbzpQbyxpPXRoaXMuX3BhcmVudHMsbz10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBhPW8ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGM9MDtjPGE7KytjKXt2YXIgZj1pW2NdLGg9b1tjXSxwPWgubGVuZ3RoLGQ9dC5jYWxsKGYsZiYmZi5fX2RhdGFfXyxjLGkpLG09ZC5sZW5ndGgseT1sW2NdPW5ldyBBcnJheShtKSxnPXNbY109bmV3IEFycmF5KG0pO3IoZixoLHksZyx1W2NdPW5ldyBBcnJheShwKSxkLGUpO2Zvcih2YXIgdixiLF89MCx3PTA7XzxtOysrXylpZih2PXlbX10pe2ZvcihfPj13JiYodz1fKzEpOyEoYj1nW3ddKSYmKyt3PG07KTt2Ll9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyBlYShzLGkpKS5fZW50ZXI9bCxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVhKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKFNvKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgZWEodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChTbyksdGhpcy5fcGFyZW50cyl9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPU1hdGgubWluKHIsbi5sZW5ndGgpLG89bmV3IEFycmF5KHIpLGE9MDthPGk7KythKWZvcih2YXIgcyxsPWVbYV0sdT1uW2FdLGM9bC5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxoPTA7aDxjOysraCkocz1sW2hdfHx1W2hdKSYmKGZbaF09cyk7Zm9yKDthPHI7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGVhKG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgcixpPXRbZV0sbz1pLmxlbmd0aC0xLGE9aVtvXTstLW8+PTA7KShyPWlbb10pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZSYmbj90KGUuX19kYXRhX18sbi5fX2RhdGFfXyk6IWUtIW59dHx8KHQ9am8pO2Zvcih2YXIgbj10aGlzLl9ncm91cHMscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBhLHM9bltvXSxsPXMubGVuZ3RoLHU9aVtvXT1uZXcgQXJyYXkobCksYz0wO2M8bDsrK2MpKGE9c1tjXSkmJih1W2NdPWEpO3Uuc29ydChlKX1yZXR1cm4gbmV3IGVhKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGU9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RbKytlXT10aGlzfSksdH0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHI9dFtlXSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYT1yW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK3R9KSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLG89ZVtuXSxhPTAscz1vLmxlbmd0aDthPHM7KythKShpPW9bYV0pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj15byh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fToiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19Om4ubG9jYWw/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX0pKHQsZSxudWxsPT1uPyIiOm4pKTpNbyh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPW59fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19KSh0LGUpKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LGUpe3ZhciBuPU5vKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPVJvKHRoaXMubm9kZSgpKSxpPS0xLG89bi5sZW5ndGg7KytpPG87KWlmKCFyLmNvbnRhaW5zKG5baV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP0ZvOkxvKSh0aGlzLHQpfX06ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtGbyh0aGlzLHQpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7TG8odGhpcyx0KX19KShuLGUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9WbzooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0JvOigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX0pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh6byl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChVbyl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdvKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmdvKHQpLHI9bnVsbD09ZT9IbzoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmJvKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChRbyl9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P0dvOnFvKX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvPSh0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/JG86WG8sbnVsbD09biYmKG49ITEpLHI9MDtyPGE7KytyKXRoaXMuZWFjaChzKG9bcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgbCx1PTAsYz1zLmxlbmd0aDt1PGM7Kyt1KWZvcihyPTAsbD1zW3VdO3I8YTsrK3IpaWYoKGk9b1tyXSkudHlwZT09PWwudHlwZSYmaS5uYW1lPT09bC5uYW1lKXJldHVybiBsLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEpvKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBKbyh0aGlzLHQsZSl9fSkodCxlKSl9fTt2YXIgcmE9bmEsaWE9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBlYShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGVhKFtbdF1dLHRhKX0sb2E9MDtmdW5jdGlvbiBhYSgpe3RoaXMuXz0iQCIrKCsrb2EpLnRvU3RyaW5nKDM2KX1hYS5wcm90b3R5cGU9KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhYX0pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YWEsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHNhPWZ1bmN0aW9uKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH07ZnVuY3Rpb24gbGEodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gdWEoKXt9dmFyIGNhPSJcXHMqKFsrLV0/XFxkKylcXHMqIixmYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixoYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIscGE9L14jKFswLTlhLWZdezN9KSQvLGRhPS9eIyhbMC05YS1mXXs2fSkkLyxtYT1uZXcgUmVnRXhwKCJecmdiXFwoIitbY2EsY2EsY2FdKyJcXCkkIikseWE9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2hhLGhhLGhhXSsiXFwpJCIpLGdhPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbY2EsY2EsY2EsZmFdKyJcXCkkIiksdmE9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1toYSxoYSxoYSxmYV0rIlxcKSQiKSxiYT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbZmEsaGEsaGFdKyJcXCkkIiksX2E9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tmYSxoYSxoYSxmYV0rIlxcKSQiKSx3YT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiB4YSh0KXt2YXIgZTtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cGEuZXhlYyh0KSk/bmV3IGthKChlPXBhcnNlSW50KGVbMV0sMTYpKT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOihlPWRhLmV4ZWModCkpP0NhKHBhcnNlSW50KGVbMV0sMTYpKTooZT1tYS5leGVjKHQpKT9uZXcga2EoZVsxXSxlWzJdLGVbM10sMSk6KGU9eWEuZXhlYyh0KSk/bmV3IGthKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPWdhLmV4ZWModCkpP0VhKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPXZhLmV4ZWModCkpP0VhKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPWJhLmV4ZWModCkpP1BhKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9X2EuZXhlYyh0KSk/UGEoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTp3YS5oYXNPd25Qcm9wZXJ0eSh0KT9DYSh3YVt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGthKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gQ2EodCl7cmV0dXJuIG5ldyBrYSh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gRWEodCxlLG4scil7cmV0dXJuIHI8PTAmJih0PWU9bj1OYU4pLG5ldyBrYSh0LGUsbixyKX1mdW5jdGlvbiBPYSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHVhfHwodD14YSh0KSksdD9uZXcga2EoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IGthfWZ1bmN0aW9uIFNhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9PYSh0KTpuZXcga2EodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGthKHQsZSxuLHIpe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBUYSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFBhKHQsZSxuLHIpe3JldHVybiByPD0wP3Q9ZT1uPU5hTjpuPD0wfHxuPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgamEodCxlLG4scil9ZnVuY3Rpb24gQWEodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBqYSlyZXR1cm4gbmV3IGphKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHVhfHwodD14YSh0KSksIXQpcmV0dXJuIG5ldyBqYTtpZih0IGluc3RhbmNlb2YgamEpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxvPU1hdGgubWF4KGUsbixyKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KGE9ZT09PW8/KG4tcikvcys2KihuPHIpOm49PT1vPyhyLWUpL3MrMjooZS1uKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBqYShhLHMsbCx0Lm9wYWNpdHkpfSh0KTpuZXcgamEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGphKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBJYSh0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9c2EodWEseGEse2Rpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuaGV4KCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksc2Eoa2EsU2EsbGEodWEse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBrYSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcga2EodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4iIyIrVGEodGhpcy5yKStUYSh0aGlzLmcpK1RhKHRoaXMuYil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLHNhKGphLEFhLGxhKHVhLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgamEodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgamEodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsbj10aGlzLmwscj1uKyhuPC41P246MS1uKSplLGk9MipuLXI7cmV0dXJuIG5ldyBrYShJYSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxJYSh0LGksciksSWEodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyIE1hPU1hdGguUEkvMTgwLE5hPTE4MC9NYXRoLlBJLFJhPS45NjQyMixEYT0xLEZhPS44MjUyMSxMYT00LzI5LFZhPTYvMjksQmE9MypWYSpWYSx6YT1WYSpWYSpWYTtmdW5jdGlvbiBVYSh0KXtpZih0IGluc3RhbmNlb2YgSGEpcmV0dXJuIG5ldyBIYSh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBaYSl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IEhhKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqTWE7cmV0dXJuIG5ldyBIYSh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBrYXx8KHQ9T2EodCkpO3ZhciBuLHIsaT1ZYSh0LnIpLG89WWEodC5nKSxhPVlhKHQuYikscz1RYSgoLjIyMjUwNDUqaSsuNzE2ODc4NipvKy4wNjA2MTY5KmEpL0RhKTtyZXR1cm4gaT09PW8mJm89PT1hP249cj1zOihuPVFhKCguNDM2MDc0NyppKy4zODUwNjQ5Km8rLjE0MzA4MDQqYSkvUmEpLHI9UWEoKC4wMTM5MzIyKmkrLjA5NzEwNDUqbysuNzE0MTczMyphKS9GYSkpLG5ldyBIYSgxMTYqcy0xNiw1MDAqKG4tcyksMjAwKihzLXIpLHQub3BhY2l0eSl9ZnVuY3Rpb24gSGEodCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFFhKHQpe3JldHVybiB0PnphP01hdGgucG93KHQsMS8zKTp0L0JhK0xhfWZ1bmN0aW9uIHFhKHQpe3JldHVybiB0PlZhP3QqdCp0OkJhKih0LUxhKX1mdW5jdGlvbiBHYSh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFlhKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFdhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgWmEpcmV0dXJuIG5ldyBaYSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBIYXx8KHQ9VWEodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBaYShOYU4sMCx0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKk5hO3JldHVybiBuZXcgWmEoZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9KHQpOm5ldyBaYSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gWmEodCxlLG4scil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfXNhKEhhLGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9VYSh0KTpuZXcgSGEodCxlLG4sbnVsbD09cj8xOnIpfSxsYSh1YSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIYSh0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhhKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxuPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBrYShHYSgzLjEzMzg1NjEqKGU9UmEqcWEoZSkpLTEuNjE2ODY2NyoodD1EYSpxYSh0KSktLjQ5MDYxNDYqKG49RmEqcWEobikpKSxHYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLEdhKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksc2EoWmEsV2EsbGEodWEse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmEodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBaYSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBVYSh0aGlzKS5yZ2IoKX19KSk7dmFyIEthPS0uMjkyMjcsWGE9LS45MDY0OSwkYT0xLjk3Mjk0LEphPSRhKlhhLHRzPTEuNzgyNzcqJGEsZXM9MS43ODI3NypLYS0gLS4xNDg2MSpYYTtmdW5jdGlvbiBucyh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHJzKXJldHVybiBuZXcgcnModC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Yga2F8fCh0PU9hKHQpKTt2YXIgZT10LmcvMjU1LG49dC5iLzI1NSxyPShlcypuK0phKih0LnIvMjU1KS10cyplKS8oZXMrSmEtdHMpLGk9bi1yLG89KCRhKihlLXIpLUthKmkpL1hhLGE9TWF0aC5zcXJ0KG8qbytpKmkpLygkYSpyKigxLXIpKSxzPWE/TWF0aC5hdGFuMihvLGkpKk5hLTEyMDpOYU47cmV0dXJuIG5ldyBycyhzPDA/cyszNjA6cyxhLHIsdC5vcGFjaXR5KX0odCk6bmV3IHJzKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBycyh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gaXModCxlLG4scixpKXt2YXIgbz10KnQsYT1vKnQ7cmV0dXJuKCgxLTMqdCszKm8tYSkqZSsoNC02Km8rMyphKSpuKygxKzMqdCszKm8tMyphKSpyK2EqaSkvNn1zYShycyxucyxsYSh1YSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHJzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHJzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpNYSxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSkscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcga2EoMjU1KihlK24qKC0uMTQ4NjEqcisxLjc4Mjc3KmkpKSwyNTUqKGUrbiooS2EqcitYYSppKSksMjU1KihlK24qKCRhKnIpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgb3M9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBhcyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCtuKmV9fWZ1bmN0aW9uIHNzKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2FzKHQsbj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKTpvcyhpc05hTih0KT9lOnQpfWZ1bmN0aW9uIGxzKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2FzKHQsbik6b3MoaXNOYU4odCk/ZTp0KX12YXIgdXM9ZnVuY3Rpb24gdChlKXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09KHQ9K3QpP2xzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG4tZT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9TWF0aC5wb3codCxuKSxlPU1hdGgucG93KGUsbiktdCxuPTEvbixmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKmUsbil9fShlLG4sdCk6b3MoaXNOYU4oZSk/bjplKX19KGUpO2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1uKCh0PVNhKHQpKS5yLChlPVNhKGUpKS5yKSxpPW4odC5nLGUuZyksbz1uKHQuYixlLmIpLGE9bHModC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9cihlKSx0Lmc9aShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1yZXR1cm4gci5nYW1tYT10LHJ9KDEpO2Z1bmN0aW9uIGNzKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbixyLGk9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSk7Zm9yKG49MDtuPGk7KytuKXI9U2EoZVtuXSksb1tuXT1yLnJ8fDAsYVtuXT1yLmd8fDAsc1tuXT1yLmJ8fDA7cmV0dXJuIG89dChvKSxhPXQoYSkscz10KHMpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9byh0KSxyLmc9YSh0KSxyLmI9cyh0KSxyKyIifX19dmFyIGZzLGhzLHBzLGRzLG1zPWNzKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sbz10W3IrMV07cmV0dXJuIGlzKChuLXIvZSkqZSxyPjA/dFtyLTFdOjIqaS1vLGksbyxyPGUtMT90W3IrMl06MipvLWkpfX0pLHlzPShjcyhmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpO3JldHVybiBpcygobi1yL2UpKmUsdFsocitlLTEpJWVdLHRbciVlXSx0WyhyKzEpJWVdLHRbKHIrMiklZV0pfX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHQrZSpufX0pLGdzPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyx2cz1uZXcgUmVnRXhwKGdzLnNvdXJjZSwiZyIpLGJzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG89Z3MubGFzdEluZGV4PXZzLmxhc3RJbmRleD0wLGE9LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsobj1ncy5leGVjKHQpKSYmKHI9dnMuZXhlYyhlKSk7KShpPXIuaW5kZXgpPm8mJihpPWUuc2xpY2UobyxpKSxzW2FdP3NbYV0rPWk6c1srK2FdPWkpLChuPW5bMF0pPT09KHI9clswXSk/c1thXT9zW2FdKz1yOnNbKythXT1yOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnlzKG4scil9KSksbz12cy5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihpPWUuc2xpY2Uobyksc1thXT9zW2FdKz1pOnNbKythXT1pKSxzLmxlbmd0aDwyP2xbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0obFswXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixyPTA7cjxlOysrcilzWyhuPWxbcl0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfSxfcz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dHlwZW9mIGU7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09PXI/b3MoZSk6KCJudW1iZXIiPT09cj95czoic3RyaW5nIj09PXI/KG49eGEoZSkpPyhlPW4sdXMpOmJzOmUgaW5zdGFuY2VvZiB4YT91czplIGluc3RhbmNlb2YgRGF0ZT9mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBEYXRlO3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBuLnNldFRpbWUodCtlKnIpLG59fTpBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKW9bbl09X3ModFtuXSxlW25dKTtmb3IoO248cjsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX06ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP2Z1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1fcyh0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fTp5cykodCxlKX0sd3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqbil9fSx4cz0xODAvTWF0aC5QSSxDcz17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxFcz1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLChsPXQqbitlKnIpJiYobi09dCpsLHItPWUqbCksKHM9TWF0aC5zcXJ0KG4qbityKnIpKSYmKG4vPXMsci89cyxsLz1zKSx0KnI8ZSpuJiYodD0tdCxlPS1lLGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSp4cyxza2V3WDpNYXRoLmF0YW4obCkqeHMsc2NhbGVYOmEsc2NhbGVZOnN9fTtmdW5jdGlvbiBPcyh0LGUsbixyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgcz1bXSxsPVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQscixpLG8sYSxzKXtpZih0IT09aXx8ciE9PW8pe3ZhciBsPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOmwtNCx4OnlzKHQsaSl9LHtpOmwtMix4OnlzKHIsbyl9KX1lbHNlKGl8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK2krZStvK24pfShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVkscyxsKSxmdW5jdGlvbih0LGUsbixvKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOm4ucHVzaChpKG4pKyJyb3RhdGUoIixudWxsLHIpLTIseDp5cyh0LGUpfSkpOmUmJm4ucHVzaChpKG4pKyJyb3RhdGUoIitlK3IpfShvLnJvdGF0ZSxhLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2goaShuKSsic2tld1goIixudWxsLHIpLTIseDp5cyh0LGUpfSk6ZSYmbi5wdXNoKGkobikrInNrZXdYKCIrZStyKX0oby5za2V3WCxhLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLG4scixvLGEpe2lmKHQhPT1ufHxlIT09cil7dmFyIHM9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTpzLTQseDp5cyh0LG4pfSx7aTpzLTIseDp5cyhlLHIpfSl9ZWxzZSAxPT09biYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK24rIiwiK3IrIikiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyxsKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxyPWwubGVuZ3RoOysrbjxyOylzWyhlPWxbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBTcz1PcyhmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P0NzOihmc3x8KGZzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGhzPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxwcz1kb2N1bWVudC5kZWZhdWx0VmlldyksZnMuc3R5bGUudHJhbnNmb3JtPXQsdD1wcy5nZXRDb21wdXRlZFN0eWxlKGhzLmFwcGVuZENoaWxkKGZzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxocy5yZW1vdmVDaGlsZChmcyksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksRXMoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksa3M9T3MoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/Q3M6KGRzfHwoZHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PWRzLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0VzKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOkNzKX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBUcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPUFhKGUpKS5oLChuPUFhKG4pKS5oKSxpPWxzKGUucyxuLnMpLG89bHMoZS5sLG4ubCksYT1scyhlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1pKHQpLGUubD1vKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fX1mdW5jdGlvbiBQcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPVdhKGUpKS5oLChuPVdhKG4pKS5oKSxpPWxzKGUuYyxuLmMpLG89bHMoZS5sLG4ubCksYT1scyhlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUuYz1pKHQpLGUubD1vKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fX1mdW5jdGlvbiBBcyh0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtmdW5jdGlvbiByKGUscil7dmFyIGk9dCgoZT1ucyhlKSkuaCwocj1ucyhyKSkuaCksbz1scyhlLnMsci5zKSxhPWxzKGUubCxyLmwpLHM9bHMoZS5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9byh0KSxlLmw9YShNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixyLmdhbW1hPWUscn0oMSl9TWF0aCxUcyhzcyksVHMobHMpLFBzKHNzKSxQcyhscyksQXMoc3MpO3ZhciBqcyxJcyxNcz1BcyhscyksTnM9MCxScz0wLERzPTAsRnM9MWUzLExzPTAsVnM9MCxCcz0wLHpzPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFVzPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEhzKCl7cmV0dXJuIFZzfHwoVXMoUXMpLFZzPXpzLm5vdygpK0JzKX1mdW5jdGlvbiBRcygpe1ZzPTB9ZnVuY3Rpb24gcXMoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEdzKHQsZSxuKXt2YXIgcj1uZXcgcXM7cmV0dXJuIHIucmVzdGFydCh0LGUsbikscn1mdW5jdGlvbiBZcygpe1ZzPShMcz16cy5ub3coKSkrQnMsTnM9UnM9MDt0cnl7IWZ1bmN0aW9uKCl7SHMoKSwrK05zO2Zvcih2YXIgdCxlPWpzO2U7KSh0PVZzLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1Oc30oKX1maW5hbGx5e05zPTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPWpzLHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpqcz1lKTtJcz10LFpzKHIpfSgpLFZzPTB9fWZ1bmN0aW9uIFdzKCl7dmFyIHQ9enMubm93KCksZT10LUxzO2U+RnMmJihCcy09ZSxMcz10KX1mdW5jdGlvbiBacyh0KXtOc3x8KFJzJiYoUnM9Y2xlYXJUaW1lb3V0KFJzKSksdC1Wcz4yND8odDwxLzAmJihScz1zZXRUaW1lb3V0KFlzLHQtenMubm93KCktQnMpKSxEcyYmKERzPWNsZWFySW50ZXJ2YWwoRHMpKSk6KERzfHwoTHM9enMubm93KCksRHM9c2V0SW50ZXJ2YWwoV3MsRnMpKSxOcz0xLFVzKFlzKSkpfXFzLnByb3RvdHlwZT1Hcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnFzLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9IcygpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxJcz09PXRoaXN8fChJcz9Jcy5fbmV4dD10aGlzOmpzPXRoaXMsSXM9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixacygpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxacygpKX19O3ZhciBLcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IHFzO3JldHVybiByLnJlc3RhcnQoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSxlPW51bGw9PWU/MDorZSxuKSxyfSxYcz1obygic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSwkcz1bXSxKcz0wLHRsPTEsZWw9MixubD0zLHJsPTQsaWw9NSxvbD02LGFsPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihuIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8obCl7dmFyIHUsYyxmLGg7aWYobi5zdGF0ZSE9PXRsKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZihoLnN0YXRlPT09bmwpcmV0dXJuIEtzKG8pO2guc3RhdGU9PT1ybD8oaC5zdGF0ZT1vbCxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihoLnN0YXRlPW9sLGgudGltZXIuc3RvcCgpLGRlbGV0ZSBpW3VdKX1pZihLcyhmdW5jdGlvbigpe24uc3RhdGU9PT1ubCYmKG4uc3RhdGU9cmwsbi50aW1lci5yZXN0YXJ0KGEsbi5kZWxheSxuLnRpbWUpLGEobCkpfSksbi5zdGF0ZT1lbCxuLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxuLnN0YXRlPT09ZWwpe2ZvcihuLnN0YXRlPW5sLHI9bmV3IEFycmF5KGY9bi50d2Vlbi5sZW5ndGgpLHU9MCxjPS0xO3U8ZjsrK3UpKGg9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytjXT1oKTtyLmxlbmd0aD1jKzF9fWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPWlsLDEpLG89LTEsYT1yLmxlbmd0aDsrK288YTspcltvXS5jYWxsKG51bGwsaSk7bi5zdGF0ZT09PWlsJiYobi5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLHMoKSl9ZnVuY3Rpb24gcygpe2Zvcih2YXIgciBpbiBuLnN0YXRlPW9sLG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1HcyhmdW5jdGlvbih0KXtuLnN0YXRlPXRsLG4udGltZXIucmVzdGFydChvLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZvKHQtbi5kZWxheSl9LDAsbi50aW1lKX0odCxuLHtuYW1lOmUsaW5kZXg6cixncm91cDppLG9uOlhzLHR3ZWVuOiRzLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOkpzfSl9O2Z1bmN0aW9uIHNsKHQsZSl7dmFyIG49dWwodCxlKTtpZihuLnN0YXRlPkpzKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gbGwodCxlKXt2YXIgbj11bCh0LGUpO2lmKG4uc3RhdGU+ZWwpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIG59ZnVuY3Rpb24gdWwodCxlKXt2YXIgbj10Ll9fdHJhbnNpdGlvbjtpZighbnx8IShuPW5bZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gbn1mdW5jdGlvbiBjbCh0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PWxsKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih0KXtyZXR1cm4gdWwodCxyKS52YWx1ZVtlXX19dmFyIGZsPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT95czplIGluc3RhbmNlb2YgeGE/dXM6KG49eGEoZSkpPyhlPW4sdXMpOmJzKSh0LGUpfSxobD1yYS5wcm90b3R5cGUuY29uc3RydWN0b3IscGw9MDtmdW5jdGlvbiBkbCh0LGUsbixyKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPXJ9ZnVuY3Rpb24gbWwoKXtyZXR1cm4rK3BsfXZhciB5bD1yYS5wcm90b3R5cGU7ZnVuY3Rpb24gZ2wodCl7cmV0dXJuK3R9ZGwucHJvdG90eXBlPShmdW5jdGlvbih0KXtyZXR1cm4gcmEoKS50cmFuc2l0aW9uKHQpfSkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkbCxzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ibyh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgcyxsLHU9clthXSxjPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkoYyksaD0wO2g8YzsrK2gpKHM9dVtoXSkmJihsPXQuY2FsbChzLHMuX19kYXRhX18saCx1KSkmJigiX19kYXRhX18iaW4gcyYmKGwuX19kYXRhX189cy5fX2RhdGFfXyksZltoXT1sLGFsKGZbaF0sZSxuLGgsZix1bChzLG4pKSk7cmV0dXJuIG5ldyBkbChvLHRoaXMuX3BhcmVudHMsZSxuKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9d28odCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsLHU9cltzXSxjPXUubGVuZ3RoLGY9MDtmPGM7KytmKWlmKGw9dVtmXSl7Zm9yKHZhciBoLHA9dC5jYWxsKGwsbC5fX2RhdGFfXyxmLHUpLGQ9dWwobCxuKSxtPTAseT1wLmxlbmd0aDttPHk7KyttKShoPXBbbV0pJiZhbChoLGUsbixtLHAsZCk7by5wdXNoKHApLGEucHVzaChsKX1yZXR1cm4gbmV3IGRsKG8sYSxlLG4pfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PU9vKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBvLGE9ZVtpXSxzPWEubGVuZ3RoLGw9cltpXT1bXSx1PTA7dTxzOysrdSkobz1hW3VdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyx1LGEpJiZsLnB1c2gobyk7cmV0dXJuIG5ldyBkbChyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPU1hdGgubWluKHIsbi5sZW5ndGgpLG89bmV3IEFycmF5KHIpLGE9MDthPGk7KythKWZvcih2YXIgcyxsPWVbYV0sdT1uW2FdLGM9bC5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShjKSxoPTA7aDxjOysraCkocz1sW2hdfHx1W2hdKSYmKGZbaF09cyk7Zm9yKDthPHI7KythKW9bYV09ZVthXTtyZXR1cm4gbmV3IGRsKG8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBobCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLG49bWwoKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSxzPXJbb10sbD1zLmxlbmd0aCx1PTA7dTxsOysrdSlpZihhPXNbdV0pe3ZhciBjPXVsKGEsZSk7YWwoYSx0LG4sdSxzLHt0aW1lOmMudGltZStjLmRlbGF5K2MuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpjLmR1cmF0aW9uLGVhc2U6Yy5lYXNlfSl9cmV0dXJuIG5ldyBkbChyLHRoaXMuX3BhcmVudHMsdCxuKX0sY2FsbDp5bC5jYWxsLG5vZGVzOnlsLm5vZGVzLG5vZGU6eWwubm9kZSxzaXplOnlsLnNpemUsZW1wdHk6eWwuZW1wdHksZWFjaDp5bC5lYWNoLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj91bCh0aGlzLm5vZGUoKSxuKS5vbi5vbih0KTp0aGlzLmVhY2goZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbz1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pfShlKT9zbDpsbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCkscz1hLm9uO3MhPT1yJiYoaT0ocj1zKS5jb3B5KCkpLm9uKGUsbiksYS5vbj1pfX0obix0LGUpKX0sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPXlvKHQpLHI9InRyYW5zZm9ybSI9PT1uP2tzOmZsO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuLmxvY2FsP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXM/bnVsbDphPT09ciYmcz09PWk/bzpvPWUocj1hLGk9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKG4scixjbCh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShuKToobi5sb2NhbD9mdW5jdGlvbih0LGUsbil7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1uP251bGw6bz09PXI/aTppPWUocj1vLG4pfX06ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1uP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0pKG4scixlKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9eW8odCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLHI9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLHIoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj10aGlzLHI9ZS5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKGUpe24uc2V0QXR0cmlidXRlKHQscihlKSl9fXJldHVybiBuLl92YWx1ZT1lLG59KShyLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP1NzOmZsO3JldHVybiBudWxsPT1lP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU1vKHRoaXMsdCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxNbyh0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09biYmYT09PXI/aTppPWUobj1vLHI9YSl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX0odCkpOnRoaXMuc3R5bGVUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9TW8odGhpcyx0KSxzPW4odGhpcyk7cmV0dXJuIG51bGw9PXMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHM9TW8odGhpcyx0KSksYT09PXM/bnVsbDphPT09ciYmcz09PWk/bzpvPWUocj1hLGk9cyl9fSh0LHIsY2wodGhpcywic3R5bGUuIit0LGUpKTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1Nbyh0aGlzLHQpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KHQscixlKyIiKSxuKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcigpe3ZhciByPXRoaXMsaT1lLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24oZSl7ci5zdHlsZS5zZXRQcm9wZXJ0eSh0LGkoZSksbil9fXJldHVybiByLl92YWx1ZT1lLHJ9KHQsZSxudWxsPT1uPyIiOm4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19KGNsKHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT11bCh0aGlzLm5vZGUoKSxuKS50d2VlbixvPTAsYT1pLmxlbmd0aDtvPGE7KytvKWlmKChyPWlbb10pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCxlKXt2YXIgbixyO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWxsKHRoaXMsdCksbz1pLnR3ZWVuO2lmKG8hPT1uKWZvcih2YXIgYT0wLHM9KHI9bj1vKS5sZW5ndGg7YTxzOysrYSlpZihyW2FdLm5hbWU9PT1lKXsocj1yLnNsaWNlKCkpLnNwbGljZShhLDEpO2JyZWFrfWkudHdlZW49cn19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1sbCh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09cil7aT0ocj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGw9MCx1PWkubGVuZ3RoO2w8dTsrK2wpaWYoaVtsXS5uYW1lPT09ZSl7aVtsXT1zO2JyZWFrfWw9PT11JiZpLnB1c2gocyl9by50d2Vlbj1pfX0pKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtzbCh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtzbCh0aGlzLHQpLmRlbGF5PWV9fSkoZSx0KSk6dWwodGhpcy5ub2RlKCksZSkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtsbCh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtsbCh0aGlzLHQpLmR1cmF0aW9uPWV9fSkoZSx0KSk6dWwodGhpcy5ub2RlKCksZSkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe2xsKHRoaXMsdCkuZWFzZT1lfX0oZSx0KSk6dWwodGhpcy5ub2RlKCksZSkuZWFzZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksTWF0aCxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQqdCooKGUrMSkqdC1lKX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4tLXQqdCooKGUrMSkqdCtlKSsxfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8MT90KnQqKChlKzEpKnQtZSk6KHQtPTIpKnQqKChlKzEpKnQrZSkrMikvMn1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpO3ZhciB2bD0yKk1hdGguUEksYmw9KGZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPXZsKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoci10KS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKnZsKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89dmwpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtZSpNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K3IpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qdmwpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxmdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz12bCk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/ZSpNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChyLXQpL24pOjItZSpNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigocit0KS9uKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKnZsKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMykse3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfX0pO2Z1bmN0aW9uIF9sKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIGJsLnRpbWU9SHMoKSxibDtyZXR1cm4gbn1mdW5jdGlvbiB3bCh0KXtyZXR1cm57dHlwZTp0fX1yYS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihpIGluIGU9bnVsbD09ZT9udWxsOmUrIiIsbykobj1vW2ldKS5uYW1lPT09ZT8ocj1uLnN0YXRlPmVsJiZuLnN0YXRlPGlsLG4uc3RhdGU9b2wsbi50aW1lci5zdG9wKCksciYmbi5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBvW2ldKTphPSExO2EmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19KHRoaXMsdCl9KX0scmEucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGUsbjt0IGluc3RhbmNlb2YgZGw/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1tbCgpLChuPWJsKS50aW1lPUhzKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSxzPXJbb10sbD1zLmxlbmd0aCx1PTA7dTxsOysrdSkoYT1zW3VdKSYmYWwoYSx0LGUsdSxzLG58fF9sKGEsZSkpO3JldHVybiBuZXcgZGwocix0aGlzLl9wYXJlbnRzLHQsZSl9LFsiZSIsInciXS5tYXAod2wpLFsibiIsInMiXS5tYXAod2wpLFsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKHdsKSxNYXRoLE1hdGgsTWF0aCxNYXRoLEFycmF5O3ZhciB4bD1NYXRoLlBJLENsPTIqeGwsRWw9Q2wtMWUtNjtmdW5jdGlvbiBPbCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFNsKCl7cmV0dXJuIG5ldyBPbH1PbC5wcm90b3R5cGU9U2wucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPbCxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLG8pe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9KG49K24pLSh0PSt0KSxsPShyPStyKS0oZT0rZSksdT1vLXQsYz1hLWUsZj11KnUrYypjO2lmKChpPStpKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGY+MWUtNilpZihNYXRoLmFicyhjKnMtbCp1KT4xZS02JiZpKXt2YXIgaD1uLW8scD1yLWEsZD1zKnMrbCpsLG09aCpoK3AqcCx5PU1hdGguc3FydChkKSxnPU1hdGguc3FydChmKSx2PWkqTWF0aC50YW4oKHhsLU1hdGguYWNvcygoZCtmLW0pLygyKnkqZykpKS8yKSxiPXYvZyxfPXYveTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmMpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsoYypoPnUqcCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qbCl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0PSt0LGU9K2U7dmFyIGE9KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxsPXQrYSx1PWUrcyxjPTFebyxmPW8/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2wrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWwpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLXUpPjFlLTYpJiYodGhpcy5fKz0iTCIrbCsiLCIrdSksbiYmKGY8MCYmKGY9ZiVDbCtDbCksZj5FbD90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrYysiLCIrKHQtYSkrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrYysiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9dSk6Zj4xZS02JiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhmPj14bCkrIiwiK2MrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciBrbD1TbDtmdW5jdGlvbiBUbCgpe31mdW5jdGlvbiBQbCh0LGUpe3ZhciBuPW5ldyBUbDtpZih0IGluc3RhbmNlb2YgVGwpdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK2k8bzspbi5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPG87KW4uc2V0KGUocj10W2ldLGksdCkscil9ZWxzZSBpZih0KWZvcih2YXIgYSBpbiB0KW4uc2V0KGEsdFthXSk7cmV0dXJuIG59ZnVuY3Rpb24gQWwoKXt9VGwucHJvdG90eXBlPVBsLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGwsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIGpsPVBsLnByb3RvdHlwZTtBbC5wcm90b3R5cGU9KGZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IEFsO2lmKHQgaW5zdGFuY2VvZiBBbCl0LmVhY2goZnVuY3Rpb24odCl7bi5hZGQodCl9KTtlbHNlIGlmKHQpe3ZhciByPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxpOyluLmFkZCh0W3JdKTtlbHNlIGZvcig7KytyPGk7KW4uYWRkKGUodFtyXSxyLHQpKX1yZXR1cm4gbn0pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QWwsaGFzOmpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmpsLnJlbW92ZSxjbGVhcjpqbC5jbGVhcix2YWx1ZXM6amwua2V5cyxzaXplOmpsLnNpemUsZW1wdHk6amwuZW1wdHksZWFjaDpqbC5lYWNofSxBcnJheTt2YXIgSWw9e30sTWw9e30sTmw9MzQsUmw9MTAsRGw9MTM7ZnVuY3Rpb24gRmwodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsiXSJ9KS5qb2luKCIsIikrIn0iKX12YXIgTGw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gcih0LGUpe3ZhciByLGk9W10sbz10Lmxlbmd0aCxhPTAscz0wLGw9bzw9MCx1PSExO2Z1bmN0aW9uIGMoKXtpZihsKXJldHVybiBNbDtpZih1KXJldHVybiB1PSExLElsO3ZhciBlLHIsaT1hO2lmKHQuY2hhckNvZGVBdChpKT09PU5sKXtmb3IoO2ErKzxvJiZ0LmNoYXJDb2RlQXQoYSkhPT1ObHx8dC5jaGFyQ29kZUF0KCsrYSk9PT1ObDspO3JldHVybihlPWEpPj1vP2w9ITA6KHI9dC5jaGFyQ29kZUF0KGErKykpPT09Umw/dT0hMDpyPT09RGwmJih1PSEwLHQuY2hhckNvZGVBdChhKT09PVJsJiYrK2EpLHQuc2xpY2UoaSsxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YTxvOyl7aWYoKHI9dC5jaGFyQ29kZUF0KGU9YSsrKSk9PT1SbCl1PSEwO2Vsc2UgaWYocj09PURsKXU9ITAsdC5jaGFyQ29kZUF0KGEpPT09UmwmJisrYTtlbHNlIGlmKHIhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGksZSl9cmV0dXJuIGw9ITAsdC5zbGljZShpLG8pfWZvcih0LmNoYXJDb2RlQXQoby0xKT09PVJsJiYtLW8sdC5jaGFyQ29kZUF0KG8tMSk9PT1EbCYmLS1vOyhyPWMoKSkhPT1NbDspe2Zvcih2YXIgZj1bXTtyIT09SWwmJnIhPT1NbDspZi5wdXNoKHIpLHI9YygpO2UmJm51bGw9PShmPWUoZixzKyspKXx8aS5wdXNoKGYpfXJldHVybiBpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixpLG89cih0LGZ1bmN0aW9uKHQscil7aWYobilyZXR1cm4gbih0LHItMSk7aT10LG49ZT9mdW5jdGlvbih0LGUpe3ZhciBuPUZsKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBlKG4ociksaSx0KX19KHQsZSk6RmwodCl9KTtyZXR1cm4gby5jb2x1bW5zPWl8fFtdLG99LHBhcnNlUm93czpyLGZvcm1hdDpmdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1uJiYobj1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIHIgaW4gdClyIGluIGV8fG4ucHVzaChlW3JdPXIpfSksbn0oZSkpLFtuLm1hcChvKS5qb2luKHQpXS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvKGVbdF0pfSkuam9pbih0KX0pKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChpKS5qb2luKCJcbiIpfX19LFZsPUxsKCIsIikucGFyc2UsQmw9TGwoIlx0IikucGFyc2U7ZnVuY3Rpb24gemwodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX12YXIgVWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKHpsKX07ZnVuY3Rpb24gSGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49dm9pZCAwKSxVbChlLG4pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxyKX0pfX1mdW5jdGlvbiBRbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gVWwoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSx0KX0pfX1IbChWbCksSGwoQmwpLFFsKCJhcHBsaWNhdGlvbi94bWwiKSxRbCgidGV4dC9odG1sIik7dmFyIHFsPVFsKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gR2wodCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLG8sYSxzLGwsdSxjLGYsaCxwPXQuX3Jvb3QsZD17ZGF0YTpyfSxtPXQuX3gwLHk9dC5feTAsZz10Ll94MSx2PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigodT1lPj0obz0obStnKS8yKSk/bT1vOmc9bywoYz1uPj0oYT0oeSt2KS8yKSk/eT1hOnY9YSxpPXAsIShwPXBbZj1jPDwxfHVdKSlyZXR1cm4gaVtmXT1kLHQ7aWYocz0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxsPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLGU9PT1zJiZuPT09bClyZXR1cm4gZC5uZXh0PXAsaT9pW2ZdPWQ6dC5fcm9vdD1kLHQ7ZG97aT1pP2lbZl09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLCh1PWU+PShvPShtK2cpLzIpKT9tPW86Zz1vLChjPW4+PShhPSh5K3YpLzIpKT95PWE6dj1hfXdoaWxlKChmPWM8PDF8dSk9PShoPShsPj1hKTw8MXxzPj1vKSk7cmV0dXJuIGlbaF09cCxpW2ZdPWQsdH12YXIgWWw9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9cix0aGlzLnkxPWl9O2Z1bmN0aW9uIFdsKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFpsKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEtsKHQsZSxuLHIsaSxvKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gWGwodCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciAkbD0oZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBLbChudWxsPT1lP1dsOmUsbnVsbD09bj9abDpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/cjpyLmFkZEFsbCh0KX0pLnByb3RvdHlwZT1LbC5wcm90b3R5cGU7JGwuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgS2wodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIG47aWYoIXIubGVuZ3RoKXJldHVybiBuLl9yb290PVhsKHIpLG47Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9ci5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09WGwoZSkpO3JldHVybiBufSwkbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBHbCh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSwkbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPTEvMCx1PTEvMCxjPS0xLzAsZj0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwoYVtuXT1yLHNbbl09aSxyPGwmJihsPXIpLHI+YyYmKGM9ciksaTx1JiYodT1pKSxpPmYmJihmPWkpKTtmb3IoYzxsJiYobD10aGlzLl94MCxjPXRoaXMuX3gxKSxmPHUmJih1PXRoaXMuX3kwLGY9dGhpcy5feTEpLHRoaXMuY292ZXIobCx1KS5jb3ZlcihjLGYpLG49MDtuPG87KytuKUdsKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSwkbC5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlpPShuPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShuPnR8fHQ+aXx8cj5lfHxlPm8pKXJldHVybiB0aGlzO3ZhciBhLHMsbD1pLW4sdT10aGlzLl9yb290O3N3aXRjaChzPShlPChyK28pLzIpPDwxfHQ8KG4raSkvMil7Y2FzZSAwOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUobz1yKyhsKj0yKSx0PihpPW4rbCl8fGU+byk7YnJlYWs7Y2FzZSAxOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUobz1yKyhsKj0yKSwobj1pLWwpPnR8fGU+byk7YnJlYWs7Y2FzZSAyOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUocj1vLShsKj0yKSx0PihpPW4rbCl8fHI+ZSk7YnJlYWs7Y2FzZSAzOmRveyhhPW5ldyBBcnJheSg0KSlbc109dSx1PWF9d2hpbGUocj1vLShsKj0yKSwobj1pLWwpPnR8fHI+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PXUpfXJldHVybiB0aGlzLl94MD1uLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LCRsLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sJGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSwkbC5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG8sYSxzLGwsdSxjPXRoaXMuX3gwLGY9dGhpcy5feTAsaD10aGlzLl94MSxwPXRoaXMuX3kxLGQ9W10sbT10aGlzLl9yb290O2ZvcihtJiZkLnB1c2gobmV3IFlsKG0sYyxmLGgscCkpLG51bGw9PW4/bj0xLzA6KGM9dC1uLGY9ZS1uLGg9dCtuLHA9ZStuLG4qPW4pO2w9ZC5wb3AoKTspaWYoISghKG09bC5ub2RlKXx8KGk9bC54MCk+aHx8KG89bC55MCk+cHx8KGE9bC54MSk8Y3x8KHM9bC55MSk8ZikpaWYobS5sZW5ndGgpe3ZhciB5PShpK2EpLzIsZz0obytzKS8yO2QucHVzaChuZXcgWWwobVszXSx5LGcsYSxzKSxuZXcgWWwobVsyXSxpLGcseSxzKSxuZXcgWWwobVsxXSx5LG8sYSxnKSxuZXcgWWwobVswXSxpLG8seSxnKSksKHU9KGU+PWcpPDwxfHQ+PXkpJiYobD1kW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMV09ZFtkLmxlbmd0aC0xLXVdLGRbZC5sZW5ndGgtMS11XT1sKX1lbHNle3ZhciB2PXQtK3RoaXMuX3guY2FsbChudWxsLG0uZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxtLmRhdGEpLF89dip2K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2M9dC13LGY9ZS13LGg9dCt3LHA9ZSt3LHI9bS5kYXRhfX1yZXR1cm4gcn0sJGwucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLG8sYSxzLGwsdSxjLGYsaCxwPXRoaXMuX3Jvb3QsZD10aGlzLl94MCxtPXRoaXMuX3kwLHk9dGhpcy5feDEsZz10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKCh1PW8+PShzPShkK3kpLzIpKT9kPXM6eT1zLChjPWE+PShsPShtK2cpLzIpKT9tPWw6Zz1sLGU9cCwhKHA9cFtmPWM8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsoZVtmKzEmM118fGVbZisyJjNdfHxlW2YrMyYzXSkmJihuPWUsaD1mKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKHI9cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1wLm5leHQpJiZkZWxldGUgcC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbZl09aTpkZWxldGUgZVtmXSwocD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmcD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIXAubGVuZ3RoJiYobj9uW2hdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSwkbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSwkbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LCRsLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0sJGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHM9W10sbD10aGlzLl9yb290O2ZvcihsJiZzLnB1c2gobmV3IFlsKGwsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KGw9ZS5ub2RlLHI9ZS54MCxpPWUueTAsbz1lLngxLGE9ZS55MSkmJmwubGVuZ3RoKXt2YXIgdT0ocitvKS8yLGM9KGkrYSkvMjsobj1sWzNdKSYmcy5wdXNoKG5ldyBZbChuLHUsYyxvLGEpKSwobj1sWzJdKSYmcy5wdXNoKG5ldyBZbChuLHIsYyx1LGEpKSwobj1sWzFdKSYmcy5wdXNoKG5ldyBZbChuLHUsaSxvLGMpKSwobj1sWzBdKSYmcy5wdXNoKG5ldyBZbChuLHIsaSx1LGMpKX1yZXR1cm4gdGhpc30sJGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgWWwodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciBpPWUubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1lLngwLHM9ZS55MCxsPWUueDEsdT1lLnkxLGM9KGErbCkvMixmPShzK3UpLzI7KG89aVswXSkmJm4ucHVzaChuZXcgWWwobyxhLHMsYyxmKSksKG89aVsxXSkmJm4ucHVzaChuZXcgWWwobyxjLHMsbCxmKSksKG89aVsyXSkmJm4ucHVzaChuZXcgWWwobyxhLGYsYyx1KSksKG89aVszXSkmJm4ucHVzaChuZXcgWWwobyxjLGYsbCx1KSl9ci5wdXNoKGUpfWZvcig7ZT1yLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sJGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LCRsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fSxNYXRoLE1hdGguc3FydCg1KTt2YXIgSmw9ZnVuY3Rpb24odCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4scj10LnNsaWNlKDAsbik7cmV0dXJuW3IubGVuZ3RoPjE/clswXStyLnNsaWNlKDIpOnIsK3Quc2xpY2UobisxKV19LHR1PWZ1bmN0aW9uKHQpe3JldHVybih0PUpsKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59LGV1PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBudSh0KXtyZXR1cm4gbmV3IHJ1KHQpfWZ1bmN0aW9uIHJ1KHQpe2lmKCEoZT1ldS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3RoaXMuZmlsbD1lWzFdfHwiICIsdGhpcy5hbGlnbj1lWzJdfHwiPiIsdGhpcy5zaWduPWVbM118fCItIix0aGlzLnN5bWJvbD1lWzRdfHwiIix0aGlzLnplcm89ISFlWzVdLHRoaXMud2lkdGg9ZVs2XSYmK2VbNl0sdGhpcy5jb21tYT0hIWVbN10sdGhpcy5wcmVjaXNpb249ZVs4XSYmK2VbOF0uc2xpY2UoMSksdGhpcy50cmltPSEhZVs5XSx0aGlzLnR5cGU9ZVsxMF18fCIifW51LnByb3RvdHlwZT1ydS5wcm90b3R5cGUscnUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIGl1LG91LGF1LHN1LGx1PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBlLG49dC5sZW5ndGgscj0xLGk9LTE7cjxuOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPWU9cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxlPXI7YnJlYWs7ZGVmYXVsdDppZihpPjApe2lmKCErdFtyXSlicmVhayB0O2k9MH19cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9LHV1PWZ1bmN0aW9uKHQsZSl7dmFyIG49SmwodCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX0sY3U9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHV1KDEwMCp0LGUpfSxyOnV1LHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1KbCh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLG89aS0oaXU9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLGE9ci5sZW5ndGg7cmV0dXJuIG89PT1hP3I6bz5hP3IrbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP3Iuc2xpY2UoMCxvKSsiLiIrci5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStKbCh0LE1hdGgubWF4KDAsZStvLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxmdT1mdW5jdGlvbih0KXtyZXR1cm4gdH0saHU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07b3U9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXQuZ3JvdXBpbmcmJnQudGhvdXNhbmRzPyhlPXQuZ3JvdXBpbmcsbj10LnRob3VzYW5kcyxmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+ciYmKHM9TWF0aC5tYXgoMSxyLWwpKSxvLnB1c2godC5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPnIpKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKG4pfSk6ZnUsaT10LmN1cnJlbmN5LG89dC5kZWNpbWFsLGE9dC5udW1lcmFscz9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KX19KHQubnVtZXJhbHMpOmZ1LHM9dC5wZXJjZW50fHwiJSI7ZnVuY3Rpb24gbCh0KXt2YXIgZT0odD1udSh0KSkuZmlsbCxuPXQuYWxpZ24sbD10LnNpZ24sdT10LnN5bWJvbCxjPXQuemVybyxmPXQud2lkdGgsaD10LmNvbW1hLHA9dC5wcmVjaXNpb24sZD10LnRyaW0sbT10LnR5cGU7Im4iPT09bT8oaD0hMCxtPSJnIik6Y3VbbV18fChudWxsPT1wJiYocD0xMiksZD0hMCxtPSJnIiksKGN8fCIwIj09PWUmJiI9Ij09PW4pJiYoYz0hMCxlPSIwIixuPSI9Iik7dmFyIHk9IiQiPT09dT9pWzBdOiIjIj09PXUmJi9bYm94WF0vLnRlc3QobSk/IjAiK20udG9Mb3dlckNhc2UoKToiIixnPSIkIj09PXU/aVsxXTovWyVwXS8udGVzdChtKT9zOiIiLHY9Y3VbbV0sYj0vW2RlZmdwcnMlXS8udGVzdChtKTtmdW5jdGlvbiBfKHQpe3ZhciBpLHMsdSxfPXksdz1nO2lmKCJjIj09PW0pdz12KHQpK3csdD0iIjtlbHNle3ZhciB4PSh0PSt0KTwwO2lmKHQ9dihNYXRoLmFicyh0KSxwKSxkJiYodD1sdSh0KSkseCYmMD09K3QmJih4PSExKSxfPSh4PyIoIj09PWw/bDoiLSI6Ii0iPT09bHx8IigiPT09bD8iIjpsKStfLHc9KCJzIj09PW0/aHVbOCtpdS8zXToiIikrdysoeCYmIigiPT09bD8iKSI6IiIpLGIpZm9yKGk9LTEscz10Lmxlbmd0aDsrK2k8czspaWYoNDg+KHU9dC5jaGFyQ29kZUF0KGkpKXx8dT41Nyl7dz0oNDY9PT11P28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fWgmJiFjJiYodD1yKHQsMS8wKSk7dmFyIEM9Xy5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsRT1DPGY/bmV3IEFycmF5KGYtQysxKS5qb2luKGUpOiIiO3N3aXRjaChoJiZjJiYodD1yKEUrdCxFLmxlbmd0aD9mLXcubGVuZ3RoOjEvMCksRT0iIiksbil7Y2FzZSI8Ijp0PV8rdCt3K0U7YnJlYWs7Y2FzZSI9Ijp0PV8rRSt0K3c7YnJlYWs7Y2FzZSJeIjp0PUUuc2xpY2UoMCxDPUUubGVuZ3RoPj4xKStfK3QrdytFLnNsaWNlKEMpO2JyZWFrO2RlZmF1bHQ6dD1FK18rdCt3fXJldHVybiBhKHQpfXJldHVybiBwPW51bGw9PXA/NjovW2dwcnNdLy50ZXN0KG0pP01hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpLF8udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sX31yZXR1cm57Zm9ybWF0OmwsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49bCgoKHQ9bnUodCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHR1KGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksbz1odVs4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrb319fX0oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSksYXU9b3UuZm9ybWF0LHN1PW91LmZvcm1hdFByZWZpeDt2YXIgcHU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR1fTtmdW5jdGlvbiBkdSgpe3RoaXMucmVzZXQoKX1kdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmR1LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7eXUobXUsdCx0aGlzLnQpLHl1KHRoaXMsbXUucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPW11LnQ6dGhpcy5zPW11LnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIG11PW5ldyBkdTtmdW5jdGlvbiB5dSh0LGUsbil7dmFyIHI9dC5zPWUrbixpPXItZTt0LnQ9ZS0oci1pKSsobi1pKX12YXIgZ3U9TWF0aC5QSSx2dT1ndS8yLGJ1PTIqZ3UsX3U9Z3UvMTgwLHd1PShNYXRoLE1hdGguYXRhbikseHU9TWF0aC5hdGFuMixDdT1NYXRoLmNvcyxFdT0oTWF0aCxNYXRoLE1hdGgsTWF0aCxNYXRoLE1hdGguc2luKSxPdT0oTWF0aCxNYXRoLnNxcnQpO2Z1bmN0aW9uIFN1KHQpe3JldHVybiB0PjE/dnU6dDwtMT8tdnU6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGt1KHQsZSl7cmV0dXJuW3Q+Z3U/dC1idTp0PC1ndT90K2J1OnQsZV19ZnVuY3Rpb24gVHUoKXt9ZnVuY3Rpb24gUHUodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9Q3UoZSksaT1DdShuKSxvPXQocippKTtyZXR1cm5bbyppKkV1KGUpLG8qRXUobildfX1mdW5jdGlvbiBBdSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1PdShlKmUrbipuKSxpPXQociksbz1FdShpKSxhPUN1KGkpO3JldHVyblt4dShlKm8sciphKSxTdShyJiZuKm8vcildfX1mdW5jdGlvbiBqdSh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIEl1KHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLHI9biYmbi5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspZSs9bltyXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gTXUodCxlKXt2YXIgbixyLGksbyxhLHM9bmV3IEZ1KHQpLGw9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLHU9W3NdO2ZvcihudWxsPT1lJiYoZT1OdSk7bj11LnBvcCgpOylpZihsJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwoaT1lKG4uZGF0YSkpJiYoYT1pLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKXUucHVzaChyPW4uY2hpbGRyZW5bb109bmV3IEZ1KGlbb10pKSxyLnBhcmVudD1uLHIuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoRHUpfWZ1bmN0aW9uIE51KHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIFJ1KHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBEdSh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIEZ1KHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfU1hdGgscHUoKSxwdSgpLHB1KCksa3UuaW52ZXJ0PWt1LHB1KCkscHUoKSxwdSgpLHB1KCkscHUoKSxUdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlR1LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LEN1KDMwKl91KSxQdShmdW5jdGlvbih0KXtyZXR1cm4gT3UoMi8oMSt0KSl9KS5pbnZlcnQ9QXUoZnVuY3Rpb24odCl7cmV0dXJuIDIqU3UodC8yKX0pLFB1KGZ1bmN0aW9uKHQpe3JldHVybih0PShlPXQpPjE/MDplPC0xP2d1Ok1hdGguYWNvcyhlKSkmJnQvRXUodCk7dmFyIGV9KS5pbnZlcnQ9QXUoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxqdS5pbnZlcnQ9anUsQXUod3UpLEF1KFN1KSxBdShmdW5jdGlvbih0KXtyZXR1cm4gMip3dSh0KX0pLEZ1LnByb3RvdHlwZT1NdS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZ1LGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKEl1KX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvPXRoaXMsYT1bb107ZG97Zm9yKGU9YS5yZXZlcnNlKCksYT1bXTtvPWUucG9wKCk7KWlmKHQobyksbj1vLmNoaWxkcmVuKWZvcihyPTAsaT1uLmxlbmd0aDtyPGk7KytyKWEucHVzaChuW3JdKX13aGlsZShhLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dGhpcyxvPVtpXSxhPVtdO2k9by5wb3AoKTspaWYoYS5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilvLnB1c2goZVtuXSk7Zm9yKDtpPWEucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxlPXIuY2hpbGRyZW4pZm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpLnB1c2goZVtuXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAscj1lLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyluKz1yW2ldLnZhbHVlO2UudmFsdWU9bn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCkscj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1uLnBvcCgpLGU9ci5wb3AoKTt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KXIucHVzaChlPWUucGFyZW50KTtmb3IodmFyIGk9ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSx0fSxsZWF2ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goZnVuY3Rpb24obil7biE9PXQmJmUucHVzaCh7c291cmNlOm4ucGFyZW50LHRhcmdldDpufSl9KSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIE11KHRoaXMpLmVhY2hCZWZvcmUoUnUpfX0sQXJyYXk7dmFyIEx1PWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLGw9YS5sZW5ndGgsdT10LnZhbHVlJiYoci1lKS90LnZhbHVlOysrczxsOykobz1hW3NdKS55MD1uLG8ueTE9aSxvLngwPWUsby54MT1lKz1vLnZhbHVlKnV9O09iamVjdC5jcmVhdGUoRnUucHJvdG90eXBlKTt2YXIgVnU9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCx1PXQudmFsdWUmJihpLW4pL3QudmFsdWU7KytzPGw7KShvPWFbc10pLngwPWUsby54MT1yLG8ueTA9bixvLnkxPW4rPW8udmFsdWUqdX0sQnU9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIHp1KHQsZSxuLHIsaSxvKXtmb3IodmFyIGEscyxsLHUsYyxmLGgscCxkLG0seSxnPVtdLHY9ZS5jaGlsZHJlbixiPTAsXz0wLHc9di5sZW5ndGgseD1lLnZhbHVlO2I8dzspe2w9aS1uLHU9by1yO2Rve2M9dltfKytdLnZhbHVlfXdoaWxlKCFjJiZfPHcpO2ZvcihmPWg9Yyx5PWMqYyoobT1NYXRoLm1heCh1L2wsbC91KS8oeCp0KSksZD1NYXRoLm1heChoL3kseS9mKTtfPHc7KytfKXtpZihjKz1zPXZbX10udmFsdWUsczxmJiYoZj1zKSxzPmgmJihoPXMpLHk9YypjKm0sKHA9TWF0aC5tYXgoaC95LHkvZikpPmQpe2MtPXM7YnJlYWt9ZD1wfWcucHVzaChhPXt2YWx1ZTpjLGRpY2U6bDx1LGNoaWxkcmVuOnYuc2xpY2UoYixfKX0pLGEuZGljZT9MdShhLG4scixpLHg/cis9dSpjL3g6byk6VnUoYSxuLHIseD9uKz1sKmMveDppLG8pLHgtPWMsYj1ffXJldHVybiBnfShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxvKXt6dShlLHQsbixyLGksbyl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0pKEJ1KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLGwsdSxjLGY9LTEsaD1hLmxlbmd0aCxwPXQudmFsdWU7KytmPGg7KXtmb3IobD0ocz1hW2ZdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxjPWwubGVuZ3RoO3U8YzsrK3Upcy52YWx1ZSs9bFt1XS52YWx1ZTtzLmRpY2U/THUocyxuLHIsaSxyKz0oby1yKSpzLnZhbHVlL3ApOlZ1KHMsbixyLG4rPShpLW4pKnMudmFsdWUvcCxvKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT16dShlLHQsbixyLGksbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KEJ1KTt2YXIgVXU9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sSHU9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1yKW89cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsbz0yKmUoKS0xLGk9cipyK28qb313aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSkpLFF1PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD1IdS5zb3VyY2UoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLHI9MDtyPHQ7KytyKW4rPWUoKTtyZXR1cm4gbn19cmV0dXJuIG4uc291cmNlPXQsbn0oVXUpKSxxdT0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPVF1LnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KFV1KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShVdSksQXJyYXkucHJvdG90eXBlKSxHdT1xdS5tYXAsWXU9cXUuc2xpY2UsV3U9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxadT1mdW5jdGlvbih0KXtyZXR1cm4rdH0sS3U9WzAsMV07ZnVuY3Rpb24gWHUodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06V3UoZSl9ZnVuY3Rpb24gJHUodCxlLG4scil7dmFyIGk9dFswXSxvPXRbMV0sYT1lWzBdLHM9ZVsxXTtyZXR1cm4gbzxpPyhpPW4obyxpKSxhPXIocyxhKSk6KGk9bihpLG8pLGE9cihhLHMpKSxmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gSnUodCxlLG4scil7dmFyIGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSkscz0tMTtmb3IodFtpXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytzPGk7KW9bc109bih0W3NdLHRbcysxXSksYVtzXT1yKGVbc10sZVtzKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49WWkodCxlLDEsaSktMTtyZXR1cm4gYVtuXShvW25dKGUpKX19dmFyIHRjPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRbMF0sbz10W3QubGVuZ3RoLTFdLGE9b28oaSxvLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChuPW51KG51bGw9PW4/IixmIjpuKSkudHlwZSl7Y2FzZSJzIjp2YXIgcz1NYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhvKSk7cmV0dXJuIG51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodHUoZSkvMykpKS10dShNYXRoLmFicyh0KSkpfShhLHMpKXx8KG4ucHJlY2lzaW9uPXIpLHN1KG4scyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCx0dShlKS10dSh0KSkrMX0oYSxNYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhvKSkpKXx8KG4ucHJlY2lzaW9uPXItKCJlIj09PW4udHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4ocj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtdHUoTWF0aC5hYnModCkpKX0oYSkpfHwobi5wcmVjaXNpb249ci0yKigiJSI9PT1uLnR5cGUpKX1yZXR1cm4gYXUobil9O2Z1bmN0aW9uIGVjKCl7dmFyIHQ9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz1LdSxhPUt1LHM9X3MsbD0hMTtmdW5jdGlvbiB1KCl7cmV0dXJuIG49TWF0aC5taW4oby5sZW5ndGgsYS5sZW5ndGgpPjI/SnU6JHUscj1pPW51bGwsY31mdW5jdGlvbiBjKGUpe3JldHVybihyfHwocj1uKG8sYSxsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PWU/MDp0Pj1uPzE6cih0KX19fSh0KTp0LHMpKSkoK2UpfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4oaXx8KGk9bihhLG8sWHUsbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KGU9K2Usbj0rbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wP2U6dD49MT9uOnIodCl9fX0oZSk6ZSkpKSgrdCl9LGMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUd1LmNhbGwodCxadSksdSgpKTpvLnNsaWNlKCl9LGMucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9WXUuY2FsbCh0KSx1KCkpOmEuc2xpY2UoKX0sYy5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPVl1LmNhbGwodCkscz13cyx1KCl9LGMuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ISF0LHUoKSk6bH0sYy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHUoKSk6c30sdSgpfShYdSx5cyk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBlPXQsZWMoKS5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSk7dmFyIGV9LGZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gcm8oblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiB0YyhlKCksdCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgcixpPWUoKSxvPTAsYT1pLmxlbmd0aC0xLHM9aVtvXSxsPWlbYV07cmV0dXJuIGw8cyYmKHI9cyxzPWwsbD1yLHI9byxvPWEsYT1yKSwocj1pbyhzLGwsbikpPjA/cj1pbyhzPU1hdGguZmxvb3Iocy9yKSpyLGw9TWF0aC5jZWlsKGwvcikqcixuKTpyPDAmJihyPWlvKHM9TWF0aC5jZWlsKHMqcikvcixsPU1hdGguZmxvb3IobCpyKS9yLG4pKSxyPjA/KGlbb109TWF0aC5mbG9vcihzL3IpKnIsaVthXT1NYXRoLmNlaWwobC9yKSpyLGUoaSkpOnI8MCYmKGlbb109TWF0aC5jZWlsKHMqcikvcixpW2FdPU1hdGguZmxvb3IobCpyKS9yLGUoaSkpLHR9LHR9KHQpfXZhciBuYz1uZXcgRGF0ZSxyYz1uZXcgRGF0ZTtmdW5jdGlvbiBpYyh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWksaS5jZWlsPWZ1bmN0aW9uKG4pe3JldHVybiB0KG49bmV3IERhdGUobi0xKSksZShuLDEpLHQobiksbn0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1pKHQpLG49aS5jZWlsKHQpO3JldHVybiB0LWU8bi10P2U6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSxudWxsPT1uPzE6TWF0aC5mbG9vcihuKSksdH0saS5yYW5nZT1mdW5jdGlvbihuLHIsbyl7dmFyIGEscz1bXTtpZihuPWkuY2VpbChuKSxvPW51bGw9PW8/MTpNYXRoLmZsb29yKG8pLCEobjxyJiZvPjApKXJldHVybiBzO2Rve3MucHVzaChhPW5ldyBEYXRlKCtuKSksZShuLG8pLHQobil9d2hpbGUoYTxuJiZuPHIpO3JldHVybiBzfSxpLmZpbHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gaWMoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSxmdW5jdGlvbih0LHIpe2lmKHQ+PXQpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO2UodCwtMSksIW4odCk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO2UodCwxKSwhbih0KTspO30pfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBuYy5zZXRUaW1lKCtlKSxyYy5zZXRUaW1lKCtyKSx0KG5jKSx0KHJjKSxNYXRoLmZsb29yKG4obmMscmMpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgb2M9aWMoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KTtvYy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2ljKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9LGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pOm9jOm51bGx9O3ZhciBhYz02ZTQsc2M9NjA0OGU1LGxjPShpYyhmdW5jdGlvbih0KXt0LnNldFRpbWUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzFlM30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSksaWMoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9hYykqYWMpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKmFjKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9hY30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksaWMoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpKmFjJTM2ZTU7ZTwwJiYoZSs9MzZlNSksdC5zZXRUaW1lKDM2ZTUqTWF0aC5mbG9vcigoK3QtZSkvMzZlNSkrZSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmFjKS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSk7ZnVuY3Rpb24gdWModCl7cmV0dXJuIGljKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqYWMpL3NjfSl9dmFyIGNjPXVjKDApLGZjPXVjKDEpLGhjPSh1YygyKSx1YygzKSx1Yyg0KSkscGM9KHVjKDUpLHVjKDYpLGljKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO3BjLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/aWMoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSk6bnVsbH07dmFyIGRjPXBjLG1jPShpYyhmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSphYyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvYWN9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLGljKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pKTtmdW5jdGlvbiB5Yyh0KXtyZXR1cm4gaWMoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9zY30pfXZhciBnYz15YygwKSx2Yz15YygxKSxiYz0oeWMoMikseWMoMykseWMoNCkpLF9jPSh5Yyg1KSx5Yyg2KSxpYyhmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMiooZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSxpYyhmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtfYy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP2ljKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pOm51bGx9O3ZhciB3Yz1fYztmdW5jdGlvbiB4Yyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gQ2ModCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gRWModCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19dmFyIE9jLFNjLGtjLFRjPXsiLSI6IiIsXzoiICIsMDoiMCJ9LFBjPS9eXHMqXGQrLyxBYz0vXiUvLGpjPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBJYyh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLG89aS5sZW5ndGg7cmV0dXJuIHIrKG88bj9uZXcgQXJyYXkobi1vKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBNYyh0KXtyZXR1cm4gdC5yZXBsYWNlKGpjLCJcXCQmIil9ZnVuY3Rpb24gTmModCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKE1jKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUmModCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gRGModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRmModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTGModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVmModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQmModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gemModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVWModCxlLG4pe3ZhciByPVBjLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBIYyh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFjKHQsZSxuKXt2YXIgcj1QYy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkYyh0LGUsbil7dmFyIHI9QWMuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKYyh0LGUsbil7dmFyIHI9UGMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRmKHQsZSxuKXt2YXIgcj1QYy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LlE9MWUzKityWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVmKHQsZSl7cmV0dXJuIEljKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gbmYodCxlKXtyZXR1cm4gSWModC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gcmYodCxlKXtyZXR1cm4gSWModC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIG9mKHQsZSl7cmV0dXJuIEljKDErbGMuY291bnQoZGModCksdCksZSwzKX1mdW5jdGlvbiBhZih0LGUpe3JldHVybiBJYyh0LmdldE1pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gc2YodCxlKXtyZXR1cm4gYWYodCxlKSsiMDAwIn1mdW5jdGlvbiBsZih0LGUpe3JldHVybiBJYyh0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHVmKHQsZSl7cmV0dXJuIEljKHQuZ2V0TWludXRlcygpLGUsMil9ZnVuY3Rpb24gY2YodCxlKXtyZXR1cm4gSWModC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBmZih0KXt2YXIgZT10LmdldERheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gaGYodCxlKXtyZXR1cm4gSWMoY2MuY291bnQoZGModCksdCksZSwyKX1mdW5jdGlvbiBwZih0LGUpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/aGModCk6aGMuY2VpbCh0KSxJYyhoYy5jb3VudChkYyh0KSx0KSsoND09PWRjKHQpLmdldERheSgpKSxlLDIpfWZ1bmN0aW9uIGRmKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIG1mKHQsZSl7cmV0dXJuIEljKGZjLmNvdW50KGRjKHQpLHQpLGUsMil9ZnVuY3Rpb24geWYodCxlKXtyZXR1cm4gSWModC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGdmKHQsZSl7cmV0dXJuIEljKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB2Zih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK0ljKGUvNjB8MCwiMCIsMikrSWMoZSU2MCwiMCIsMil9ZnVuY3Rpb24gYmYodCxlKXtyZXR1cm4gSWModC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBfZih0LGUpe3JldHVybiBJYyh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiB3Zih0LGUpe3JldHVybiBJYyh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24geGYodCxlKXtyZXR1cm4gSWMoMSttYy5jb3VudCh3Yyh0KSx0KSxlLDMpfWZ1bmN0aW9uIENmKHQsZSl7cmV0dXJuIEljKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBFZih0LGUpe3JldHVybiBDZih0LGUpKyIwMDAifWZ1bmN0aW9uIE9mKHQsZSl7cmV0dXJuIEljKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gU2YodCxlKXtyZXR1cm4gSWModC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBrZih0LGUpe3JldHVybiBJYyh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIFRmKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBQZih0LGUpe3JldHVybiBJYyhnYy5jb3VudCh3Yyh0KSx0KSxlLDIpfWZ1bmN0aW9uIEFmKHQsZSl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9iYyh0KTpiYy5jZWlsKHQpLEljKGJjLmNvdW50KHdjKHQpLHQpKyg0PT09d2ModCkuZ2V0VVRDRGF5KCkpLGUsMil9ZnVuY3Rpb24gamYodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gSWYodCxlKXtyZXR1cm4gSWModmMuY291bnQod2ModCksdCksZSwyKX1mdW5jdGlvbiBNZih0LGUpe3JldHVybiBJYyh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTmYodCxlKXtyZXR1cm4gSWModC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFJmKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBEZigpe3JldHVybiIlIn1mdW5jdGlvbiBGZih0KXtyZXR1cm4rdH1mdW5jdGlvbiBMZih0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfSFmdW5jdGlvbih0KXtPYz1mdW5jdGlvbihlKXt2YXIgbj10LmRhdGVUaW1lLHI9dC5kYXRlLGk9dC50aW1lLG89dC5wZXJpb2RzLGE9dC5kYXlzLHM9dC5zaG9ydERheXMsbD10Lm1vbnRocyx1PXQuc2hvcnRNb250aHMsYz1OYyhvKSxmPVJjKG8pLGg9TmMoYSkscD1SYyhhKSxkPU5jKHMpLG09UmMocykseT1OYyhsKSxnPVJjKGwpLHY9TmModSksYj1SYyh1KSxfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6ZWYsZTplZixmOnNmLEg6bmYsSTpyZixqOm9mLEw6YWYsbTpsZixNOnVmLHA6ZnVuY3Rpb24odCl7cmV0dXJuIG9bKyh0LmdldEhvdXJzKCk+PTEyKV19LFE6RmYsczpMZixTOmNmLHU6ZmYsVTpoZixWOnBmLHc6ZGYsVzptZix4Om51bGwsWDpudWxsLHk6eWYsWTpnZixaOnZmLCIlIjpEZn0sdz17YTpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBsW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOmJmLGU6YmYsZjpFZixIOl9mLEk6d2Ysajp4ZixMOkNmLG06T2YsTTpTZixwOmZ1bmN0aW9uKHQpe3JldHVybiBvWysodC5nZXRVVENIb3VycygpPj0xMildfSxROkZmLHM6TGYsUzprZix1OlRmLFU6UGYsVjpBZix3OmpmLFc6SWYseDpudWxsLFg6bnVsbCx5Ok1mLFk6TmYsWjpSZiwiJSI6RGZ9LHg9e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PW1bclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj12LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT1iW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWdbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIE8odCxuLGUscil9LGQ6cWMsZTpxYyxmOlhjLEg6WWMsSTpZYyxqOkdjLEw6S2MsbTpRYyxNOldjLHA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5wPWZbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sUTpKYyxzOnRmLFM6WmMsdTpGYyxVOkxjLFY6VmMsdzpEYyxXOkJjLHg6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBPKHQscixlLG4pfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTyh0LGksZSxuKX0seTpVYyxZOnpjLFo6SGMsIiUiOiRjfTtmdW5jdGlvbiBDKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksbyxhPVtdLHM9LTEsbD0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKGEucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPVRjW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwobz1lW3JdKSYmKHI9byhuLGkpKSxhLnB1c2gociksbD1zKzEpO3JldHVybiBhLnB1c2godC5zbGljZShsLHMpKSxhLmpvaW4oIiIpfX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksbz1FYygxOTAwKTtpZihPKG8sdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLCJWImluIG8pe2lmKG8uVjwxfHxvLlY+NTMpcmV0dXJuIG51bGw7InciaW4gb3x8KG8udz0xKSwiWiJpbiBvPyhyPShpPShyPUNjKEVjKG8ueSkpKS5nZXRVVENEYXkoKSk+NHx8MD09PWk/dmMuY2VpbChyKTp2YyhyKSxyPW1jLm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0VVRDRnVsbFllYXIoKSxvLm09ci5nZXRVVENNb250aCgpLG8uZD1yLmdldFVUQ0RhdGUoKSsoby53KzYpJTcpOihyPShpPShyPWUoRWMoby55KSkpLmdldERheSgpKT40fHwwPT09aT9mYy5jZWlsKHIpOmZjKHIpLHI9bGMub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRGdWxsWWVhcigpLG8ubT1yLmdldE1vbnRoKCksby5kPXIuZ2V0RGF0ZSgpKyhvLncrNiklNyl9ZWxzZSgiVyJpbiBvfHwiVSJpbiBvKSYmKCJ3ImluIG98fChvLnc9InUiaW4gbz9vLnUlNzoiVyJpbiBvPzE6MCksaT0iWiJpbiBvP0NjKEVjKG8ueSkpLmdldFVUQ0RheSgpOmUoRWMoby55KSkuZ2V0RGF5KCksby5tPTAsby5kPSJXImluIG8/KG8udys2KSU3Kzcqby5XLShpKzUpJTc6by53Kzcqby5VLShpKzYpJTcpO3JldHVybiJaImluIG8/KG8uSCs9by5aLzEwMHwwLG8uTSs9by5aJTEwMCxDYyhvKSk6ZShvKX19ZnVuY3Rpb24gTyh0LGUsbixyKXtmb3IodmFyIGksbyxhPTAscz1lLmxlbmd0aCxsPW4ubGVuZ3RoO2E8czspe2lmKHI+PWwpcmV0dXJuLTE7aWYoMzc9PT0oaT1lLmNoYXJDb2RlQXQoYSsrKSkpe2lmKGk9ZS5jaGFyQXQoYSsrKSwhKG89eFtpIGluIFRjP2UuY2hhckF0KGErKyk6aV0pfHwocj1vKHQsbixyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPW4uY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfXJldHVybiBfLng9QyhyLF8pLF8uWD1DKGksXyksXy5jPUMobixfKSx3Lng9QyhyLHcpLHcuWD1DKGksdyksdy5jPUMobix3KSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPUModCs9IiIsXyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RSh0Kz0iIix4Yyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPUModCs9IiIsdyk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RSh0LENjKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19KCksU2M9T2MudXRjRm9ybWF0LGtjPU9jLnV0Y1BhcnNlfSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nfHxTYygiJVktJW0tJWRUJUg6JU06JVMuJUxaIiksK25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKXx8a2MoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBWZj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KW5bcl09IiMiK3Quc2xpY2UoNipyLDYqKytyKTtyZXR1cm4gbn0sQmY9KFZmKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxWZigiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksVmYoIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLFZmKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxWZigiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksVmYoImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLFZmKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxWZigiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksVmYoIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLGZ1bmN0aW9uKHQpe3JldHVybiBtcyh0W3QubGVuZ3RoLTFdKX0pO2Z1bmN0aW9uIHpmKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fUJmKG5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChWZikpLEJmKG5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChWZikpLE1zKG5zKDMwMCwuNSwwKSxucygtMjQwLC41LDEpKSxNcyhucygtMTAwLC43NSwuMzUpLG5zKDgwLDEuNSwuOCkpLE1zKG5zKDI2MCwuNzUsLjM1KSxucyg4MCwxLjUsLjgpKSxucygpLFNhKCksTWF0aCxNYXRoLHpmKFZmKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksemYoVmYoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSx6ZihWZigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHpmKFZmKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7dmFyIFVmPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sSGY9TWF0aC5hYnMsUWY9TWF0aC5hdGFuMixxZj1NYXRoLmNvcyxHZj1NYXRoLm1heCxZZj1NYXRoLm1pbixXZj1NYXRoLnNpbixaZj1NYXRoLnNxcnQsS2Y9MWUtMTIsWGY9TWF0aC5QSSwkZj1YZi8yLEpmPTIqWGY7ZnVuY3Rpb24gdGgodCl7cmV0dXJuIHQ+PTE/JGY6dDw9LTE/LSRmOk1hdGguYXNpbih0KX1mdW5jdGlvbiBlaCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBuaCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiByaCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGloKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIG9oKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGFoKHQsZSxuLHIsaSxvLGEpe3ZhciBzPXQtbixsPWUtcix1PShhP286LW8pL1pmKHMqcytsKmwpLGM9dSpsLGY9LXUqcyxoPXQrYyxwPWUrZixkPW4rYyxtPXIrZix5PShoK2QpLzIsZz0ocCttKS8yLHY9ZC1oLGI9bS1wLF89dip2K2IqYix3PWktbyx4PWgqbS1kKnAsQz0oYjwwPy0xOjEpKlpmKEdmKDAsdyp3Kl8teCp4KSksRT0oeCpiLXYqQykvXyxPPSgteCp2LWIqQykvXyxTPSh4KmIrdipDKS9fLGs9KC14KnYrYipDKS9fLFQ9RS15LFA9Ty1nLEE9Uy15LGo9ay1nO3JldHVybiBUKlQrUCpQPkEqQStqKmomJihFPVMsTz1rKSx7Y3g6RSxjeTpPLHgwMTotYyx5MDE6LWYseDExOkUqKGkvdy0xKSx5MTE6TyooaS93LTEpfX12YXIgc2g9ZnVuY3Rpb24oKXt2YXIgdD1laCxlPW5oLG49VWYoMCkscj1udWxsLGk9cmgsbz1paCxhPW9oLHM9bnVsbDtmdW5jdGlvbiBsKCl7dmFyIGwsdSxjLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktJGYsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS0kZixtPUhmKGQtcCkseT1kPnA7aWYoc3x8KHM9bD1rbCgpKSxoPGYmJih1PWgsaD1mLGY9dSksaD5LZilpZihtPkpmLUtmKXMubW92ZVRvKGgqcWYocCksaCpXZihwKSkscy5hcmMoMCwwLGgscCxkLCF5KSxmPktmJiYocy5tb3ZlVG8oZipxZihkKSxmKldmKGQpKSxzLmFyYygwLDAsZixkLHAseSkpO2Vsc2V7dmFyIGcsdixiPXAsXz1kLHc9cCx4PWQsQz1tLEU9bSxPPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsUz1PPktmJiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WmYoZipmK2gqaCkpLGs9WWYoSGYoaC1mKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksVD1rLFA9aztpZihTPktmKXt2YXIgQT10aChTL2YqV2YoTykpLGo9dGgoUy9oKldmKE8pKTsoQy09MipBKT5LZj8odys9QSo9eT8xOi0xLHgtPUEpOihDPTAsdz14PShwK2QpLzIpLChFLT0yKmopPktmPyhiKz1qKj15PzE6LTEsXy09aik6KEU9MCxiPV89KHArZCkvMil9dmFyIEk9aCpxZihiKSxNPWgqV2YoYiksTj1mKnFmKHgpLFI9ZipXZih4KTtpZihrPktmKXt2YXIgRD1oKnFmKF8pLEY9aCpXZihfKSxMPWYqcWYodyksVj1mKldmKHcpO2lmKG08WGYpe3ZhciBCPUM+S2Y/ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzKXt2YXIgbD1MLUksdT1WLU0sYz1hLUQsZj1zLUYsaD0oYyooTS1GKS1mKihJLUQpKS8oZipsLWMqdSk7cmV0dXJuW0kraCpsLE0raCp1XX0oMCwwLDAsMCwwLDAsTixSKTpbTixSXSx6PUktQlswXSxVPU0tQlsxXSxIPUQtQlswXSxRPUYtQlsxXSxxPTEvV2YoKChjPSh6KkgrVSpRKS8oWmYoeip6K1UqVSkqWmYoSCpIK1EqUSkpKT4xPzA6YzwtMT9YZjpNYXRoLmFjb3MoYykpLzIpLEc9WmYoQlswXSpCWzBdK0JbMV0qQlsxXSk7VD1ZZihrLChmLUcpLyhxLTEpKSxQPVlmKGssKGgtRykvKHErMSkpfX1FPktmP1A+S2Y/KGc9YWgoTCxWLEksTSxoLFAseSksdj1haChELEYsTixSLGgsUCx5KSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFA8az9zLmFyYyhnLmN4LGcuY3ksUCxRZihnLnkwMSxnLngwMSksUWYodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFAsUWYoZy55MDEsZy54MDEpLFFmKGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGgsUWYoZy5jeStnLnkxMSxnLmN4K2cueDExKSxRZih2LmN5K3YueTExLHYuY3grdi54MTEpLCF5KSxzLmFyYyh2LmN4LHYuY3ksUCxRZih2LnkxMSx2LngxMSksUWYodi55MDEsdi54MDEpLCF5KSkpOihzLm1vdmVUbyhJLE0pLHMuYXJjKDAsMCxoLGIsXywheSkpOnMubW92ZVRvKEksTSksZj5LZiYmQz5LZj9UPktmPyhnPWFoKE4sUixELEYsZiwtVCx5KSx2PWFoKEksTSxMLFYsZiwtVCx5KSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFQ8az9zLmFyYyhnLmN4LGcuY3ksVCxRZihnLnkwMSxnLngwMSksUWYodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFQsUWYoZy55MDEsZy54MDEpLFFmKGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGYsUWYoZy5jeStnLnkxMSxnLmN4K2cueDExKSxRZih2LmN5K3YueTExLHYuY3grdi54MTEpLHkpLHMuYXJjKHYuY3gsdi5jeSxULFFmKHYueTExLHYueDExKSxRZih2LnkwMSx2LngwMSksIXkpKSk6cy5hcmMoMCwwLGYseCx3LHkpOnMubGluZVRvKE4sUil9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksbClyZXR1cm4gcz1udWxsLGwrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItWGYvMjtyZXR1cm5bcWYocikqbixXZihyKSpuXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlVmKCtlKSxsKTp0fSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOmV9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOm59LGwucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCt0KSxsKTpyfSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVZigrdCksbCk6aX0sbC5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCt0KSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxsKTpzfSxsfTtmdW5jdGlvbiBsaCh0KXt0aGlzLl9jb250ZXh0PXR9bGgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIHVoPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbGgodCl9O2Z1bmN0aW9uIGNoKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGZoKHQpe3JldHVybiB0WzFdfXZhciBoaD1mdW5jdGlvbigpe3ZhciB0PWNoLGU9Zmgsbj1VZighMCkscj1udWxsLGk9dWgsbz1udWxsO2Z1bmN0aW9uIGEoYSl7dmFyIHMsbCx1LGM9YS5sZW5ndGgsZj0hMTtmb3IobnVsbD09ciYmKG89aSh1PWtsKCkpKSxzPTA7czw9YzsrK3MpIShzPGMmJm4obD1hW3NdLHMsYSkpPT09ZiYmKChmPSFmKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxmJiZvLnBvaW50KCt0KGwscyxhKSwrZShsLHMsYSkpO2lmKHUpcmV0dXJuIG89bnVsbCx1KyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpVZigrZSksYSk6dH0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGEpOmV9LGEuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCEhdCksYSk6bn0sYS5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPXImJihvPWkocikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPW89bnVsbDpvPWkocj10KSxhKTpyfSxhfSxwaD1mdW5jdGlvbigpe3ZhciB0PWNoLGU9bnVsbCxuPVVmKDApLHI9ZmgsaT1VZighMCksbz1udWxsLGE9dWgscz1udWxsO2Z1bmN0aW9uIGwobCl7dmFyIHUsYyxmLGgscCxkPWwubGVuZ3RoLG09ITEseT1uZXcgQXJyYXkoZCksZz1uZXcgQXJyYXkoZCk7Zm9yKG51bGw9PW8mJihzPWEocD1rbCgpKSksdT0wO3U8PWQ7Kyt1KXtpZighKHU8ZCYmaShoPWxbdV0sdSxsKSk9PT1tKWlmKG09IW0pYz11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGY9dS0xO2Y+PWM7LS1mKXMucG9pbnQoeVtmXSxnW2ZdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1tJiYoeVt1XT0rdChoLHUsbCksZ1t1XT0rbihoLHUsbCkscy5wb2ludChlPytlKGgsdSxsKTp5W3VdLHI/K3IoaCx1LGwpOmdbdV0pKX1pZihwKXJldHVybiBzPW51bGwscCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIGhoKCkuZGVmaW5lZChpKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiBsLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpVZigrbiksZT1udWxsLGwpOnR9LGwueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpVZigrZSksbCk6dH0sbC54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpVZigrdCksbCk6ZX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLHI9bnVsbCxsKTpufSxsLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOm59LGwueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VWYoK3QpLGwpOnJ9LGwubGluZVgwPWwubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGwubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGwubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGwuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlVmKCEhdCksbCk6aX0sbC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG51bGwhPW8mJihzPWEobykpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPXM9bnVsbDpzPWEobz10KSxsKTpvfSxsfTtmdW5jdGlvbiBkaCh0KXt0aGlzLl9jdXJ2ZT10fWRoLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX0sQXJyYXksTWF0aC5zcXJ0KDEvMyksTWF0aC5zaW4oWGYvMTApLE1hdGguc2luKDcqWGYvMTApO3ZhciBtaD0oTWF0aC5zaW4oSmYvMTApLE1hdGguY29zKEpmLzEwKSxNYXRoLnNxcnQoMyksTWF0aC5zcXJ0KDMpLE1hdGguc3FydCgxMiksZnVuY3Rpb24oKXt9KTtmdW5jdGlvbiB5aCh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gZ2godCl7dGhpcy5fY29udGV4dD10fWdoLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6eWgodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6eWgodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciB2aD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGdoKHQpfTtmdW5jdGlvbiBiaCh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBnaCh0KSx0aGlzLl9iZXRhPWV9ZnVuY3Rpb24gX2godCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLW4pLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB3aCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24geGgodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWZ1bmN0aW9uIENoKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBFaCh0LGUsbil7dmFyIHI9dC5feDEsaT10Ll95MSxvPXQuX3gyLGE9dC5feTI7aWYodC5fbDAxX2E+S2Ype3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGk9KGkqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPktmKXt2YXIgdT0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxjPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtvPShvKnUrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9jLGE9KGEqdSt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2N9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxvLGEsdC5feDIsdC5feTIpfWZ1bmN0aW9uIE9oKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZnVuY3Rpb24gU2godCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1mdW5jdGlvbiBraCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWZ1bmN0aW9uIFRoKHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBQaCh0LGUsbil7dmFyIHI9dC5feDEtdC5feDAsaT1lLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksYT0obi10Ll95MSkvKGl8fHI8MCYmLTApLHM9KG8qaSthKnIpLyhyK2kpO3JldHVybihUaChvKStUaChhKSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnMoYSksLjUqTWF0aC5hYnMocykpfHwwfWZ1bmN0aW9uIEFoKHQsZSl7dmFyIG49dC5feDEtdC5feDA7cmV0dXJuIG4/KDMqKHQuX3kxLXQuX3kwKS9uLWUpLzI6ZX1mdW5jdGlvbiBqaCh0LGUsbil7dmFyIHI9dC5feDAsaT10Ll94MSxvPXQuX3kxLGE9KGktcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocithLHQuX3kwK2EqZSxpLWEsby1hKm4saSxvKX1mdW5jdGlvbiBJaCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gTWgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE5oKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gUmgodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBEaCh0LGUpe3ZhciBuPWUscj1lLlIsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uUj1yLkwsbi5SJiYobi5SLlU9biksci5MPW59ZnVuY3Rpb24gRmgodCxlKXt2YXIgbj1lLHI9ZS5MLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLkw9ci5SLG4uTCYmKG4uTC5VPW4pLHIuUj1ufWZ1bmN0aW9uIExoKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1iaC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxvPWVbMF0sYT10W25dLWkscz1lW25dLW8sbD0tMTsrK2w8PW47KXRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooaSsocj1sL24pKmEpLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSoobytyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgZ2godCk6bmV3IGJoKHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC44NSksd2gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOl9oKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpfaCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgd2godCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCkseGgucHJvdG90eXBlPXthcmVhU3RhcnQ6bWgsYXJlYUVuZDptaCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0Ol9oKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyB4aCh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKSxDaC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpfaCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgQ2godCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCksT2gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpFaCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgT2godCxlKTpuZXcgd2godCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KSxTaC5wcm90b3R5cGU9e2FyZWFTdGFydDptaCxhcmVhRW5kOm1oLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OkVoKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBTaCh0LGUpOm5ldyB4aCh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpLGtoLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpFaCh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcga2godCxlKTpuZXcgQ2godCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KSxJaC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6amgodGhpcyx0aGlzLl90MCxBaCh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamgodGhpcyxBaCh0aGlzLG49UGgodGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OmpoKHRoaXMsdGhpcy5fdDAsbj1QaCh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LCgoZnVuY3Rpb24odCl7dGhpcy5fY29udGV4dD1uZXcgTWgodCl9KS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJaC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe0loLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sTWgucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LHIsbixvLGkpfX0sTmgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOaCxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7bj10fWVsc2UgdGhpcy5fPyh0PUxoKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLG49dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxuPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPW4sZS5DPSEwLHQ9ZTtuJiZuLkM7KW49PT0ocj1uLlUpLkw/KGk9ci5SKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5SJiYoRGgodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsRmgodGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5MJiYoRmgodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsRGgodGhpcyxyKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4scixpPXQuVSxvPXQuTCxhPXQuUjtpZihuPW8/YT9MaChhKTpvOmEsaT9pLkw9PT10P2kuTD1uOmkuUj1uOnRoaXMuXz1uLG8mJmE/KHI9bi5DLG4uQz10LkMsbi5MPW8sby5VPW4sbiE9PWE/KGk9bi5VLG4uVT10LlUsaS5MPXQ9bi5SLG4uUj1hLGEuVT1uKToobi5VPWksaT1uLHQ9bi5SKSk6KHI9dC5DLHQ9biksdCYmKHQuVT1pKSwhcilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLERoKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsRmgodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsRGgodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLEZoKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsRGgodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsRmgodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciBWaD1OaDtmdW5jdGlvbiBCaCh0LGUsbixyKXt2YXIgaT1bbnVsbCxudWxsXSxvPWxwLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1lLG4mJlVoKGksdCxlLG4pLHImJlVoKGksZSx0LHIpLGFwW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGFwW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gemgodCxlLG4pe3ZhciByPVtlLG5dO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIFVoKHQsZSxuLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiBIaCh0LGUsbixyLGkpe3ZhciBvLGE9dFswXSxzPXRbMV0sbD1hWzBdLHU9YVsxXSxjPTAsZj0xLGg9c1swXS1sLHA9c1sxXS11O2lmKG89ZS1sLGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1lbHNlIGlmKGg+MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWlmKG89ci1sLGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1lbHNlIGlmKGg+MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfWlmKG89bi11LHB8fCEobz4wKSl7aWYoby89cCxwPDApe2lmKG88YylyZXR1cm47bzxmJiYoZj1vKX1lbHNlIGlmKHA+MCl7aWYobz5mKXJldHVybjtvPmMmJihjPW8pfWlmKG89aS11LHB8fCEobzwwKSl7aWYoby89cCxwPDApe2lmKG8+ZilyZXR1cm47bz5jJiYoYz1vKX1lbHNlIGlmKHA+MCl7aWYobzxjKXJldHVybjtvPGYmJihmPW8pfXJldHVybiEoYz4wfHxmPDEpfHwoYz4wJiYodFswXT1bbCtjKmgsdStjKnBdKSxmPDEmJih0WzFdPVtsK2YqaCx1K2YqcF0pLCEwKX19fX19ZnVuY3Rpb24gUWgodCxlLG4scixpKXt2YXIgbz10WzFdO2lmKG8pcmV0dXJuITA7dmFyIGEscyxsPXRbMF0sdT10LmxlZnQsYz10LnJpZ2h0LGY9dVswXSxoPXVbMV0scD1jWzBdLGQ9Y1sxXSxtPShmK3ApLzIseT0oaCtkKS8yO2lmKGQ9PT1oKXtpZihtPGV8fG0+PXIpcmV0dXJuO2lmKGY+cCl7aWYobCl7aWYobFsxXT49aSlyZXR1cm59ZWxzZSBsPVttLG5dO289W20saV19ZWxzZXtpZihsKXtpZihsWzFdPG4pcmV0dXJufWVsc2UgbD1bbSxpXTtvPVttLG5dfX1lbHNlIGlmKHM9eS0oYT0oZi1wKS8oZC1oKSkqbSxhPC0xfHxhPjEpaWYoZj5wKXtpZihsKXtpZihsWzFdPj1pKXJldHVybn1lbHNlIGw9WyhuLXMpL2Esbl07bz1bKGktcykvYSxpXX1lbHNle2lmKGwpe2lmKGxbMV08bilyZXR1cm59ZWxzZSBsPVsoaS1zKS9hLGldO289WyhuLXMpL2Esbl19ZWxzZSBpZihoPGQpe2lmKGwpe2lmKGxbMF0+PXIpcmV0dXJufWVsc2UgbD1bZSxhKmUrc107bz1bcixhKnIrc119ZWxzZXtpZihsKXtpZihsWzBdPGUpcmV0dXJufWVsc2UgbD1bcixhKnIrc107bz1bZSxhKmUrc119cmV0dXJuIHRbMF09bCx0WzFdPW8sITB9ZnVuY3Rpb24gcWgodCxlKXt2YXIgbj10LnNpdGUscj1lLmxlZnQsaT1lLnJpZ2h0O3JldHVybiBuPT09aSYmKGk9cixyPW4pLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKToobj09PXI/KHI9ZVsxXSxpPWVbMF0pOihyPWVbMF0saT1lWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBHaCh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gWWgodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfXZhciBXaCxaaD1bXTtmdW5jdGlvbiBLaCh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIHI9ZS5zaXRlLGk9dC5zaXRlLG89bi5zaXRlO2lmKHIhPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPXJbMF0tYSx1PXJbMV0tcyxjPW9bMF0tYSxmPW9bMV0tcyxoPTIqKGwqZi11KmMpO2lmKCEoaD49LWNwKSl7dmFyIHA9bCpsK3UqdSxkPWMqYytmKmYsbT0oZipwLXUqZCkvaCx5PShsKmQtYypwKS9oLGc9WmgucG9wKCl8fG5ldyBmdW5jdGlvbigpe1JoKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH07Zy5hcmM9dCxnLnNpdGU9aSxnLng9bSthLGcueT0oZy5jeT15K3MpK01hdGguc3FydChtKm0reSp5KSx0LmNpcmNsZT1nO2Zvcih2YXIgdj1udWxsLGI9c3AuXztiOylpZihnLnk8Yi55fHxnLnk9PT1iLnkmJmcueDw9Yi54KXtpZighYi5MKXt2PWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe3Y9YjticmVha31iPWIuUn1zcC5pbnNlcnQodixnKSx2fHwoV2g9Zyl9fX19ZnVuY3Rpb24gWGgodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KFdoPWUuTiksc3AucmVtb3ZlKGUpLFpoLnB1c2goZSksUmgoZSksdC5jaXJjbGU9bnVsbCl9dmFyICRoPVtdO2Z1bmN0aW9uIEpoKHQpe3ZhciBlPSRoLnBvcCgpfHxuZXcgZnVuY3Rpb24oKXtSaCh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9O3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHRwKHQpe1hoKHQpLG9wLnJlbW92ZSh0KSwkaC5wdXNoKHQpLFJoKHQpfWZ1bmN0aW9uIGVwKHQpe3ZhciBlPXQuY2lyY2xlLG49ZS54LHI9ZS5jeSxpPVtuLHJdLG89dC5QLGE9dC5OLHM9W3RdO3RwKHQpO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZNYXRoLmFicyhuLWwuY2lyY2xlLngpPHVwJiZNYXRoLmFicyhyLWwuY2lyY2xlLmN5KTx1cDspbz1sLlAscy51bnNoaWZ0KGwpLHRwKGwpLGw9bztzLnVuc2hpZnQobCksWGgobCk7Zm9yKHZhciB1PWE7dS5jaXJjbGUmJk1hdGguYWJzKG4tdS5jaXJjbGUueCk8dXAmJk1hdGguYWJzKHItdS5jaXJjbGUuY3kpPHVwOylhPXUuTixzLnB1c2godSksdHAodSksdT1hO3MucHVzaCh1KSxYaCh1KTt2YXIgYyxmPXMubGVuZ3RoO2ZvcihjPTE7YzxmOysrYylVaCgodT1zW2NdKS5lZGdlLChsPXNbYy0xXSkuc2l0ZSx1LnNpdGUsaSk7KHU9c1tmLTFdKS5lZGdlPUJoKChsPXNbMF0pLnNpdGUsdS5zaXRlLG51bGwsaSksS2gobCksS2godSl9ZnVuY3Rpb24gbnAodCl7Zm9yKHZhciBlLG4scixpLG89dFswXSxhPXRbMV0scz1vcC5fO3M7KWlmKChyPXJwKHMsYSktbyk+dXApcz1zLkw7ZWxzZXtpZighKChpPW8taXAocyxhKSk+dXApKXtyPi11cD8oZT1zLlAsbj1zKTppPi11cD8oZT1zLG49cy5OKTplPW49czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9IWZ1bmN0aW9uKHQpe2FwW3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX0odCk7dmFyIGw9SmgodCk7aWYob3AuaW5zZXJ0KGUsbCksZXx8bil7aWYoZT09PW4pcmV0dXJuIFhoKGUpLG49SmgoZS5zaXRlKSxvcC5pbnNlcnQobCxuKSxsLmVkZ2U9bi5lZGdlPUJoKGUuc2l0ZSxsLnNpdGUpLEtoKGUpLHZvaWQgS2gobik7aWYobil7WGgoZSksWGgobik7dmFyIHU9ZS5zaXRlLGM9dVswXSxmPXVbMV0saD10WzBdLWMscD10WzFdLWYsZD1uLnNpdGUsbT1kWzBdLWMseT1kWzFdLWYsZz0yKihoKnktcCptKSx2PWgqaCtwKnAsYj1tKm0reSp5LF89Wyh5KnYtcCpiKS9nK2MsKGgqYi1tKnYpL2crZl07VWgobi5lZGdlLHUsZCxfKSxsLmVkZ2U9QmgodSx0LG51bGwsXyksbi5lZGdlPUJoKHQsZCxudWxsLF8pLEtoKGUpLEtoKG4pfWVsc2UgbC5lZGdlPUJoKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiBycCh0LGUpe3ZhciBuPXQuc2l0ZSxyPW5bMF0saT1uWzFdLG89aS1lO2lmKCFvKXJldHVybiByO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciBzPShuPWEuc2l0ZSlbMF0sbD1uWzFdLHU9bC1lO2lmKCF1KXJldHVybiBzO3ZhciBjPXMtcixmPTEvby0xL3UsaD1jL3U7cmV0dXJuIGY/KC1oK01hdGguc3FydChoKmgtMipmKihjKmMvKC0yKnUpLWwrdS8yK2ktby8yKSkpL2YrcjoocitzKS8yfWZ1bmN0aW9uIGlwKHQsZSl7dmFyIG49dC5OO2lmKG4pcmV0dXJuIHJwKG4sZSk7dmFyIHI9dC5zaXRlO3JldHVybiByWzFdPT09ZT9yWzBdOjEvMH12YXIgb3AsYXAsc3AsbHAsdXA9MWUtNixjcD0xZS0xMjtmdW5jdGlvbiBmcCh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiBocCh0LGUpe3ZhciBuLHIsaSxvPXQuc29ydChmcCkucG9wKCk7Zm9yKGxwPVtdLGFwPW5ldyBBcnJheSh0Lmxlbmd0aCksb3A9bmV3IFZoLHNwPW5ldyBWaDs7KWlmKGk9V2gsbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1uJiZvWzFdPT09cnx8KG5wKG8pLG49b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO2VwKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG4scixpPTAsbz1hcC5sZW5ndGg7aTxvOysraSlpZigodD1hcFtpXSkmJihyPShlPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKWFbbl09bixzW25dPXFoKHQsbHBbZVtuXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gc1tlXS1zW3RdfSksbj0wO248cjsrK24pc1tuXT1lW2Fbbl1dO2ZvcihuPTA7bjxyOysrbillW25dPXNbbl19fSgpLGUpe3ZhciBhPStlWzBdWzBdLHM9K2VbMF1bMV0sbD0rZVsxXVswXSx1PStlWzFdWzFdOyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGksbz1scC5sZW5ndGg7by0tOylRaChpPWxwW29dLHQsZSxuLHIpJiZIaChpLHQsZSxuLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT51cHx8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT51cCl8fGRlbGV0ZSBscFtvXX0oYSxzLGwsdSksZnVuY3Rpb24odCxlLG4scil7dmFyIGksbyxhLHMsbCx1LGMsZixoLHAsZCxtLHk9YXAubGVuZ3RoLGc9ITA7Zm9yKGk9MDtpPHk7KytpKWlmKG89YXBbaV0pe2ZvcihhPW8uc2l0ZSxzPShsPW8uaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOylscFtsW3NdXXx8bC5zcGxpY2UocywxKTtmb3Iocz0wLHU9bC5sZW5ndGg7czx1OylkPShwPVloKG8sbHBbbFtzXV0pKVswXSxtPXBbMV0sZj0oYz1HaChvLGxwW2xbKytzJXVdXSkpWzBdLGg9Y1sxXSwoTWF0aC5hYnMoZC1mKT51cHx8TWF0aC5hYnMobS1oKT51cCkmJihsLnNwbGljZShzLDAsbHAucHVzaCh6aChhLHAsTWF0aC5hYnMoZC10KTx1cCYmci1tPnVwP1t0LE1hdGguYWJzKGYtdCk8dXA/aDpyXTpNYXRoLmFicyhtLXIpPHVwJiZuLWQ+dXA/W01hdGguYWJzKGgtcik8dXA/ZjpuLHJdOk1hdGguYWJzKGQtbik8dXAmJm0tZT51cD9bbixNYXRoLmFicyhmLW4pPHVwP2g6ZV06TWF0aC5hYnMobS1lKTx1cCYmZC10PnVwP1tNYXRoLmFicyhoLWUpPHVwP2Y6dCxlXTpudWxsKSktMSksKyt1KTt1JiYoZz0hMSl9aWYoZyl7dmFyIHYsYixfLHc9MS8wO2ZvcihpPTAsZz1udWxsO2k8eTsrK2kpKG89YXBbaV0pJiYoXz0odj0oYT1vLnNpdGUpWzBdLXQpKnYrKGI9YVsxXS1lKSpiKTx3JiYodz1fLGc9byk7aWYoZyl7dmFyIHg9W3QsZV0sQz1bdCxyXSxFPVtuLHJdLE89W24sZV07Zy5oYWxmZWRnZXMucHVzaChscC5wdXNoKHpoKGE9Zy5zaXRlLHgsQykpLTEsbHAucHVzaCh6aChhLEMsRSkpLTEsbHAucHVzaCh6aChhLEUsTykpLTEsbHAucHVzaCh6aChhLE8seCkpLTEpfX1mb3IoaT0wO2k8eTsrK2kpKG89YXBbaV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgYXBbaV0pfShhLHMsbCx1KX10aGlzLmVkZ2VzPWxwLHRoaXMuY2VsbHM9YXAsb3A9c3A9bHA9YXA9bnVsbH1mdW5jdGlvbiBwcCh0LGUsbil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PW59ZnVuY3Rpb24gZHAodCxlLG4pe3ZhciByLGk9aWEodCksbz1NYXRoLm1pbihwYXJzZUludChpLnN0eWxlKCJ3aWR0aCIpKSxwYXJzZUludChpLnN0eWxlKCJoZWlnaHQiKSkpLzIsYT1wYXJzZUludChpLnN0eWxlKCJ3aWR0aCIpKS8yLW8scz1wYXJzZUludChpLnN0eWxlKCJoZWlnaHQiKSkvMi1vLGw9TWF0aC5tYXgobi5taW5WYWx1ZSxNYXRoLm1pbihuLm1heFZhbHVlLGUpKS9uLm1heFZhbHVlLHU9TWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMTtyPW4ud2F2ZUhlaWdodFNjYWxpbmc/ZWMoKS5yYW5nZShbMCxuLndhdmVIZWlnaHQsMF0pLmRvbWFpbihbMCw1MCwxMDBdKTplYygpLnJhbmdlKFtuLndhdmVIZWlnaHQsbi53YXZlSGVpZ2h0XSkuZG9tYWluKFswLDEwMF0pO3ZhciBjPW4udGV4dFNpemUqby8yLGY9cGFyc2VGbG9hdChlKS50b0ZpeGVkKDIpLGg9bi52YWx1ZUNvdW50VXA/bi5taW5WYWx1ZTpmLHA9bi5kaXNwbGF5UGVyY2VudD9uLmN1c3RvbVBlcmNlbnQ6IiIsZD1uLmNpcmNsZVRoaWNrbmVzcypvLG09ZCtuLmNpcmNsZUZpbGxHYXAqbyx5PW8tbSxnPXkqcigxMDAqbCksdj0xK24ud2F2ZUNvdW50LGI9Mip5L24ud2F2ZUNvdW50KnYsXz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KX07cGFyc2VGbG9hdChmKSE9cGFyc2VGbG9hdChfKGYpKSYmKF89ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgxKX0pLHBhcnNlRmxvYXQoZikhPXBhcnNlRmxvYXQoXyhmKSkmJihfPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMil9KTtmb3IodmFyIHc9W10seD0wO3g8PTQwKnY7eCsrKXcucHVzaCh7eDp4Lyg0MCp2KSx5OngvNDB9KTt2YXIgQz1lYygpLnJhbmdlKFswLDIqTWF0aC5QSV0pLmRvbWFpbihbMCwxXSksRT1lYygpLnJhbmdlKFswLG9dKS5kb21haW4oWzAsb10pLE89ZWMoKS5yYW5nZShbMCxiXSkuZG9tYWluKFswLDFdKSxTPWVjKCkucmFuZ2UoWzAsZ10pLmRvbWFpbihbMCwxXSksaz1lYygpLnJhbmdlKFttKzIqeStnLG0tZ10pLmRvbWFpbihbMCwxXSksVD1lYygpLnJhbmdlKFswLGItMip5XSkuZG9tYWluKFswLDFdKSxQPWVjKCkucmFuZ2UoW20rMip5LG0rLjcqY10pLmRvbWFpbihbMCwxXSksQT1pLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ErIiwiK3MrIikiKSxqPXNoKCkuc3RhcnRBbmdsZShDKDApKS5lbmRBbmdsZShDKDEpKS5vdXRlclJhZGl1cyhFKG8pKS5pbm5lclJhZGl1cyhFKG8tZCkpO0EuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaikuc3R5bGUoImZpbGwiLG4uY2lyY2xlQ29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28rIiwiK28rIikiKTt2YXIgST1BLmFwcGVuZCgidGV4dCIpLnRleHQoXyhoKStwKS5hdHRyKCJjbGFzcyIsImxpcXVpZEZpbGxHYXVnZVRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZvbnQtc2l6ZSIsYysicHgiKS5zdHlsZSgiZmlsbCIsbi50ZXh0Q29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28rIiwiK1Aobi50ZXh0VmVydFBvc2l0aW9uKSsiKSIpLE09cGgoKS54KGZ1bmN0aW9uKHQpe3JldHVybiBPKHQueCl9KS55MChmdW5jdGlvbih0KXtyZXR1cm4gUyhNYXRoLnNpbigyKk1hdGguUEkqbi53YXZlT2Zmc2V0Ki0xKzIqTWF0aC5QSSooMS1uLndhdmVDb3VudCkrMip0LnkqTWF0aC5QSSkpfSkueTEoZnVuY3Rpb24odCl7cmV0dXJuIDIqeStnfSksTj1BLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsImNsaXBXYXZlIit1LnRvU3RyaW5nKCkpLFI9Ti5hcHBlbmQoInBhdGgiKS5kYXR1bSh3KS5hdHRyKCJkIixNKS5hdHRyKCJUIiwwKSxEPUEuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIiwidXJsKCNjbGlwV2F2ZSIrdS50b1N0cmluZygpKyIpIik7RC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvKS5hdHRyKCJjeSIsbykuYXR0cigiciIseSkuc3R5bGUoImZpbGwiLG4ud2F2ZUNvbG9yKTt2YXIgRj1ELmFwcGVuZCgidGV4dCIpLnRleHQoXyhoKStwKS5hdHRyKCJjbGFzcyIsImxpcXVpZEZpbGxHYXVnZVRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZvbnQtc2l6ZSIsYysicHgiKS5zdHlsZSgiZmlsbCIsbi53YXZlVGV4dENvbG9yKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIitQKG4udGV4dFZlcnRQb3NpdGlvbikrIikiKTtpZihuLnZhbHVlQ291bnRVcCl7dmFyIEw9ZnVuY3Rpb24oKXt2YXIgdD1fcyhoLGYpO3JldHVybiBmdW5jdGlvbihlKXtJLnRleHQoXyh0KGUpKStwKSxGLnRleHQoXyh0KGUpKStwKX19O0kudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsTCksRi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixMKX12YXIgVj1tKzIqeS1iO2Z1bmN0aW9uIEIoKXtSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QoUi5hdHRyKCJUIikpKyIsMCkiKSxSLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVBbmltYXRlVGltZSooMS1SLmF0dHIoIlQiKSkpLmVhc2UoZ2wpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QoMSkrIiwwKSIpLmF0dHIoIlQiLDEpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Ui5hdHRyKCJUIiwwKSxCKCl9KX1yZXR1cm4gbi53YXZlUmlzZT9OLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK2soMCkrIikiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK2sobCkrIikiKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMSwwKSIpfSk6Ti5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIitrKGwpKyIpIiksbi53YXZlQW5pbWF0ZSYmQigpLHt1cGRhdGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCl9O3BhcnNlRmxvYXQoZSkhPXBhcnNlRmxvYXQoaShlKSkmJihpPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGUpIT1wYXJzZUZsb2F0KGkoZSkpJiYoaT1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDIpfSk7dmFyIG89ZnVuY3Rpb24oKXt2YXIgZT1fcyhJLnRleHQoKSxwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMikpO3JldHVybiBmdW5jdGlvbih0KXtJLnRleHQoaShlKHQpKStwKSxGLnRleHQoaShlKHQpKStwKX19O0kudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsbyksRi50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixvKTt2YXIgYSxzPU1hdGgubWF4KG4ubWluVmFsdWUsTWF0aC5taW4obi5tYXhWYWx1ZSx0KSkvbi5tYXhWYWx1ZSxsPXkqcigxMDAqcyksdT1lYygpLnJhbmdlKFttKzIqeStsLG0tbF0pLmRvbWFpbihbMCwxXSkocyksYz1lYygpLnJhbmdlKFswLGJdKS5kb21haW4oWzAsMV0pLGY9ZWMoKS5yYW5nZShbMCxsXSkuZG9tYWluKFswLDFdKTthPW4ud2F2ZUhlaWdodFNjYWxpbmc/cWwuYXJlYSgpLngoZnVuY3Rpb24odCl7cmV0dXJuIGModC54KX0pLnkwKGZ1bmN0aW9uKHQpe3JldHVybiBmKE1hdGguc2luKDIqTWF0aC5QSSpuLndhdmVPZmZzZXQqLTErMipNYXRoLlBJKigxLW4ud2F2ZUNvdW50KSsyKnQueSpNYXRoLlBJKSl9KS55MShmdW5jdGlvbih0KXtyZXR1cm4gMip5K2x9KTpNO3ZhciBoPW4ud2F2ZUFuaW1hdGU/VCgxKTowO1IudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVBbmltYXRlP24ud2F2ZUFuaW1hdGVUaW1lKigxLVIuYXR0cigiVCIpKTpuLndhdmVSaXNlVGltZSkuZWFzZShnbCkuYXR0cigiZCIsYSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraCsiLDApIikuYXR0cigiVCIsIjEiKS5vbigiZW5kIixmdW5jdGlvbigpe24ud2F2ZUFuaW1hdGUmJihSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QoMCkrIiwwKSIpLEIoKSl9KSxOLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrdSsiKSIpfX19aHAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpocCxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gR2goZSx0W25dKX0pO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihuLHIpe2lmKG89KGk9bi5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIGksbyxhLHMsbCx1LGM9bi5zaXRlLGY9LTEsaD1lW2lbby0xXV0scD1oLmxlZnQ9PT1jP2gucmlnaHQ6aC5sZWZ0OysrZjxvOylhPXAscD0oaD1lW2lbZl1dKS5sZWZ0PT09Yz9oLnJpZ2h0OmgubGVmdCxhJiZwJiZyPGEuaW5kZXgmJnI8cC5pbmRleCYmKChzPWMpWzBdLSh1PXApWzBdKSooKGw9YSlbMV0tc1sxXSktKHNbMF0tbFswXSkqKHVbMV0tc1sxXSk8MCYmdC5wdXNoKFtjLmRhdGEsYS5kYXRhLHAuZGF0YV0pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LmxlZnQuZGF0YSx0YXJnZXQ6dC5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsaSxvPXRoaXMsYT1vLl9mb3VuZHx8MCxzPW8uY2VsbHMubGVuZ3RoOyEoaT1vLmNlbGxzW2FdKTspaWYoKythPj1zKXJldHVybiBudWxsO3ZhciBsPXQtaS5zaXRlWzBdLHU9ZS1pLnNpdGVbMV0sYz1sKmwrdSp1O2Rve2k9by5jZWxsc1tyPWFdLGE9bnVsbCxpLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW8uZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBsPXQtc1swXSx1PWUtc1sxXSxmPWwqbCt1KnU7ZjxjJiYoYz1mLGE9cy5pbmRleCl9fSl9d2hpbGUobnVsbCE9PWEpO3JldHVybiBvLl9mb3VuZD1yLG51bGw9PW58fGM8PW4qbj9pLnNpdGU6bnVsbH19LHBwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cHAsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IHBwKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgcHAodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fSxuZXcgcHAoMSwwLDApO3ZhciBtcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmR5bl93aWR0aD01MDB9cmV0dXJuIHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0LGU7dGhpcy5keW5fd2lkdGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImQzY29udGFpbmVyIikuY2xpZW50V2lkdGgsdD1pYSgiI2QzdGFyZ2V0IikuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIiwiYW5pbWF0ZS1ncmFkaWVudCIpLmF0dHIoIngxIiwiMCUiKS5hdHRyKCJ5MSIsIjAlIikuYXR0cigieDIiLCIxMDAlIikuYXR0cigieTIiLCIwIikuYXR0cigic3ByZWFkTWV0aG9kIiwicmVmbGVjdCIpLGU9WyIjMDAxYWZkIiwiIzZiNjdmYyIsIiM1MzkwZTMiLCIjMzU2Y2M2IiwiIzUzOTBlMyIsIiM2YjY3ZmMiLCIjMDAxYWZkIl0sdC5zZWxlY3RBbGwoIi5zdG9wIikuZGF0YShlKS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsZnVuY3Rpb24odCxuKXtyZXR1cm4gbi8oZS5sZW5ndGgtMSl9KS5hdHRyKCJzdG9wLWNvbG9yIixmdW5jdGlvbih0KXtyZXR1cm4gdH0pLHQuYXBwZW5kKCJhbmltYXRlIikuYXR0cigiYXR0cmlidXRlTmFtZSIsIngxIikuYXR0cigidmFsdWVzIiwiMCU7MTAwJSIpLmF0dHIoImR1ciIsIjdzIikuYXR0cigicmVwZWF0Q291bnQiLCJpbmRlZmluaXRlIiksdC5hcHBlbmQoImFuaW1hdGUiKS5hdHRyKCJhdHRyaWJ1dGVOYW1lIiwieDIiKS5hdHRyKCJ2YWx1ZXMiLCIxMDAlOzIwMCUiKS5hdHRyKCJkdXIiLCI3cyIpLmF0dHIoInJlcGVhdENvdW50IiwiaW5kZWZpbml0ZSIpO3ZhciBuPXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07bi52YWx1ZUNvdW50VXA9ITAsbi5jaXJjbGVUaGlja25lc3M9LjE1LG4uY2lyY2xlQ29sb3I9IiM4MDgwMTUiLG4udGV4dENvbG9yPSIjNTU1NTAwIixuLndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLG4ud2F2ZUNvbG9yPSIjQUFBQTM5IixuLnRleHRWZXJ0UG9zaXRpb249Ljgsbi53YXZlQW5pbWF0ZVRpbWU9MWUzLG4ud2F2ZUhlaWdodD0uMDUsbi53YXZlQW5pbWF0ZT0hMCxuLndhdmVSaXNlPSExLG4ud2F2ZUhlaWdodFNjYWxpbmc9ITEsbi53YXZlT2Zmc2V0PS4yNSxuLnRleHRTaXplPS41LG4ud2F2ZUNvdW50PTMsbi5kaXNwbGF5UGVyY2VudD0hMCxuLm1pblZhbHVlPTAsbi5tYXhWYWx1ZT02MDAsbi5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgcj1kcCgiI2QzaW5wdXRnYXVnZSIsMjIwLG4pO3l0KDE1MDAsMTUwMCkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiByLnVwZGF0ZShNYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKSsyNTApfSk7dmFyIGk9e21pblZhbHVlOjAsbWF4VmFsdWU6MTAwLGNpcmNsZVRoaWNrbmVzczouMDUsY2lyY2xlRmlsbEdhcDouMDUsY2lyY2xlQ29sb3I6IiMxNzhCQ0EiLHdhdmVIZWlnaHQ6LjA1LHdhdmVDb3VudDoxLHdhdmVSaXNlVGltZToxZTMsd2F2ZUFuaW1hdGVUaW1lOjE4ZTMsd2F2ZVJpc2U6ITAsd2F2ZUhlaWdodFNjYWxpbmc6ITAsd2F2ZUFuaW1hdGU6ITAsd2F2ZUNvbG9yOiIjMTc4QkNBIix3YXZlT2Zmc2V0OjAsdGV4dFZlcnRQb3NpdGlvbjouNSx0ZXh0U2l6ZToxLHZhbHVlQ291bnRVcDohMCxkaXNwbGF5UGVyY2VudDohMCx0ZXh0Q29sb3I6IiMwNDU2ODEiLHdhdmVUZXh0Q29sb3I6IiNBNERCZjgiLGN1c3RvbVBlcmNlbnQ6IiUifTtpLnZhbHVlQ291bnRVcD0hMCxpLmNpcmNsZVRoaWNrbmVzcz0uMTUsaS5jaXJjbGVDb2xvcj0iIzgwMzU3YyIsaS50ZXh0Q29sb3I9IiM1NTU1MDAiLGkud2F2ZVRleHRDb2xvcj0iI0ZGRkZBQSIsaS53YXZlQ29sb3I9IiNBQUFBMzkiLGkudGV4dFZlcnRQb3NpdGlvbj0uOCxpLndhdmVBbmltYXRlVGltZT0xZTMsaS53YXZlSGVpZ2h0PS4wNSxpLndhdmVBbmltYXRlPSEwLGkud2F2ZVJpc2U9ITEsaS53YXZlSGVpZ2h0U2NhbGluZz0hMSxpLndhdmVPZmZzZXQ9LjI1LGkudGV4dFNpemU9LjUsaS53YXZlQ291bnQ9MyxpLmRpc3BsYXlQZXJjZW50PSEwLGkubWluVmFsdWU9MCxpLm1heFZhbHVlPTYwMCxpLmN1c3RvbVBlcmNlbnQ9IiBubW9sL0wiO3ZhciBvLGEscyxsLHUsYyxmLGgscCxkPWRwKCIjZDNvdXRnYXVnZSIsNDUsaSk7eXQoMTUwMCwxNTAwKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGQudXBkYXRlKE1hdGguZmxvb3IoNDAqTWF0aC5yYW5kb20oKSkrNTApfSkscz1pYSgiI2QzYmltb2RhbCIpLGw9ZWMoKS5kb21haW4oWzMwLDExMF0pLnJhbmdlKFs0MCwyNzBdKSx1PWVjKCkuZG9tYWluKFswLC4xXSkucmFuZ2UoWzE1MCwyMF0pLGY9KGM9Wzc5LDU0LDc0LDYyLDg1LDU1LDg4LDg1LDUxLDg1LDU0LDg0LDc4LDQ3LDgzLDUyLDYyLDg0LDUyLDc5LDUxLDQ3LDc4LDY5LDc0LDgzLDU1LDc2LDc4LDc5LDczLDc3LDY2LDgwLDc0LDUyLDQ4LDgwLDU5LDkwLDgwLDU4LDg0LDU4LDczLDgzLDY0LDUzLDgyLDU5LDc1LDkwLDU0LDgwLDU0LDgzLDcxLDY0LDc3LDgxLDU5LDg0LDQ4LDgyLDYwLDkyLDc4LDc4LDY1LDczLDgyLDU2LDc5LDcxLDYyLDc2LDYwLDc4LDc2LDgzLDc1LDgyLDcwLDY1LDczLDg4LDc2LDgwLDQ4LDg2LDYwLDkwLDUwLDc4LDYzLDcyLDg0LDc1LDUxLDgyLDYyLDg4LDQ5LDgzLDgxLDQ3LDg0LDUyLDg2LDgxLDc1LDU5LDg5LDc5LDU5LDgxLDUwLDg1LDU5LDg3LDUzLDY5LDc3LDU2LDg4LDgxLDQ1LDgyLDU1LDkwLDQ1LDgzLDU2LDg5LDQ2LDgyLDUxLDg2LDUzLDc5LDgxLDYwLDgyLDc3LDc2LDU5LDgwLDQ5LDk2LDUzLDc3LDc3LDY1LDgxLDcxLDcwLDgxLDkzLDUzLDg5LDQ1LDg2LDU4LDc4LDY2LDc2LDYzLDg4LDUyLDkzLDQ5LDU3LDc3LDY4LDgxLDgxLDczLDUwLDg1LDc0LDU1LDc3LDgzLDgzLDUxLDc4LDg0LDQ2LDgzLDU1LDgxLDU3LDc2LDg0LDc3LDgxLDg3LDc3LDUxLDc4LDYwLDgyLDkxLDUzLDc4LDQ2LDc3LDg0LDQ5LDgzLDcxLDgwLDQ5LDc1LDY0LDc2LDUzLDk0LDU1LDc2LDUwLDgyLDU0LDc1LDc4LDc5LDc4LDc4LDcwLDc5LDcwLDU0LDg2LDUwLDkwLDU0LDU0LDc3LDc5LDY0LDc1LDQ3LDg2LDYzLDg1LDgyLDU3LDgyLDY3LDc0LDU0LDgzLDczLDczLDg4LDgwLDcxLDgzLDU2LDc5LDc4LDg0LDU4LDgzLDQzLDYwLDc1LDgxLDQ2LDkwLDQ2LDc0XSkubGVuZ3RoLGg9ZnVuY3Rpb24oKXt2YXIgdD0kaSxlPVppLG49YW87ZnVuY3Rpb24gcihyKXt2YXIgaSxvLGE9ci5sZW5ndGgscz1uZXcgQXJyYXkoYSk7Zm9yKGk9MDtpPGE7KytpKXNbaV09dChyW2ldLGkscik7dmFyIGw9ZShzKSx1PWxbMF0sYz1sWzFdLGY9bihzLHUsYyk7QXJyYXkuaXNBcnJheShmKXx8KGY9b28odSxjLGYpLGY9SmkoTWF0aC5jZWlsKHUvZikqZixNYXRoLmZsb29yKGMvZikqZixmKSk7Zm9yKHZhciBoPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLWg7Zm9yKDtmW2gtMV0+YzspZi5wb3AoKSwtLWg7dmFyIHAsZD1uZXcgQXJyYXkoaCsxKTtmb3IoaT0wO2k8PWg7KytpKShwPWRbaV09W10pLngwPWk+MD9mW2ktMV06dSxwLngxPWk8aD9mW2ldOmM7Zm9yKGk9MDtpPGE7KytpKXU8PShvPXNbaV0pJiZvPD1jJiZkW1lpKGYsbywwLGgpXS5wdXNoKHJbaV0pO3JldHVybiBkfXJldHVybiByLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6WGkoZSkscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpYaShbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9YaShLaS5jYWxsKHQpKTpYaSh0KSxyKTpufSxyfSgpLmRvbWFpbihsLmRvbWFpbigpKS50aHJlc2hvbGRzKDQwKShjKSxwPShvPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0Lz03KTw9MT8uNzUqKDEtdCp0KS83OjB9LGE9bC50aWNrcyg0MCksZnVuY3Rpb24odCl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLGZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPXIsbz0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysrbzxyOylpc05hTihuPVdpKHRbb10pKT8tLWk6YSs9bjtlbHNlIGZvcig7KytvPHI7KWlzTmFOKG49V2koZSh0W29dKSkpPy0taTphKz1uO2lmKGkpcmV0dXJuIGEvaX0odCxmdW5jdGlvbih0KXtyZXR1cm4gbyhlLXQpfSldfSl9KShjKSxzLmluc2VydCgiZyIsIioiKS5hdHRyKCJmaWxsIiwiI2JiYiIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoaCkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngwKSsxfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHUodC5sZW5ndGgvZil9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIGwodC54MSktbCh0LngwKS0xfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdSgwKS11KHQubGVuZ3RoL2YpfSkscy5hcHBlbmQoInBhdGgiKS5kYXR1bShwKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJkIixoaCgpLmN1cnZlKHZoKS54KGZ1bmN0aW9uKHQpe3JldHVybiBsKHRbMF0pfSkueShmdW5jdGlvbih0KXtyZXR1cm4gdSh0WzFdKX0pKX0sdH0oKSx5cD1vLk9hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIi5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99bWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGdwKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNDksImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiTWVUaHJpeCA6IENsZWFuaW5nIGhvc3BpdGFsIGVmZmx1ZW50IHNpbmNlIDIwMTgiXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsNDYsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLHppLEJpKSksby5QYSg0LDQ5MTUyLG51bGwsMCxGaSxbXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDUsMCxudWxsLDAsNCwibWF0LWNhcmQtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlciJdXSxudWxsLG51bGwsbnVsbCxIaSxVaSkpLG8uUGEoNiw0OTE1MixudWxsLDAsTGksW10sbnVsbCxudWxsKSwodCgpKCksby5RYSg3LDAsbnVsbCwxLDIsIm1hdC1jYXJkLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1jYXJkLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoOCwxNjM4NCxudWxsLDAsRGksW10sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSxudWxsLFsiIE91ciBQcm9qZWN0ICJdKSksKHQoKSgpLG8uUWEoMTAsMCxudWxsLDAsMzksIm1hdC1jYXJkLWNvbnRlbnQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQtY29udGVudCBtYXQtY2FyZC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTEsMTYzODQsbnVsbCwwLFJpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMTIsMCxudWxsLG51bGwsMzcsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMTMsMCxudWxsLG51bGwsMjQsImRpdiIsW1siaWQiLCJkM2NvbnRhaW5lciJdLFsic3R5bGUiLCJtYXJnaW46IGF1dG87Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDE0LDAsbnVsbCxudWxsLDIzLCI6c3ZnOnN2ZyIsW1siaGVpZ2h0IiwiNTAwIl0sWyJpZCIsImQzdGFyZ2V0Il0sWyJzdHlsZSIsImRpc3BsYXk6IGJsb2NrO21hcmdpbjogYXV0bzsiXSxbIndpZHRoIiwiNjc0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDE1LDAsbnVsbCxudWxsLDUsIjpzdmc6ZyIsW1sidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMTYsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIzMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtMjApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJNVFgiXSkpLCh0KCkoKSxvLlFhKDE4LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJIb3NwaXRhbCBlZmZsdWVudHMiXSkpLCh0KCkoKSxvLlFhKDIwLDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2lucHV0Z2F1Z2UiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNTBweDt3aWR0aDogMTUwcHg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDIxLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiNTAiXSxbInN0eWxlIiwiZmlsbDogdHJhbnNwYXJlbnQ7IHN0cm9rZTogIzVhMDAzNkZGOyBzdHJva2Utd2lkdGg6IDVweCJdLFsid2lkdGgiLCI2NzUiXSxbIngiLCIwIl0sWyJ5IiwiMjcwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDIyLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiMTUwIl0sWyJzdHlsZSIsImZpbGw6IHRyYW5zcGFyZW50OyBzdHJva2U6ICM1YTAwMzZGRjsgc3Ryb2tlLXdpZHRoOiA1cHg7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyMywwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjUwIl0sWyJzdHlsZSIsImZpbGw6IHVybCgnI2FuaW1hdGUtZ3JhZGllbnQnKTsiXSxbIndpZHRoIiwiNjc1Il0sWyJ4IiwiMCJdLFsieSIsIjI3MCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNCwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNiwwLG51bGwsbnVsbCw1LCI6c3ZnOmciLFtbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg0NzAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgyNywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjMwIl0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC0yMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIk1UWCJdKSksKHQoKSgpLG8uUWEoMjksMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIldhc3Rld2F0ZXIgb3V0cHV0Il0pKSwodCgpKCksby5RYSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMzIsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTgwLDIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgzMywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNjMpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKHQoKSgpLG8uUWEoMzUsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTc1KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiQmltb2RhbCBkaXN0cmlidXRpb24iXSkpLCh0KCkoKSxvLlFhKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMzgsMCxudWxsLG51bGwsMTEsImRpdiIsW1sic3R5bGUiLCJwYWRkaW5nOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiIE91ciBwcm9qZWN0IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGJhY3RlcmlhbCBwbGF0Zm9ybSBmb3IgZHJ1ZyBkZWdyYWRhdGlvbi4gV2UgY2hvb3NlIHRvIGZvY3VzIG9uIGN5dG90b3hpYyBhbnRpY2FuY2VyIGRydWdzIGFzIHByb29mIG9mIGNvbmNlcHQsIGFzIHRoZWlyIGNvbmNlbnRyYXRpb25zIGFyZSBhbGFybWluZ2x5IGhpZ2ggaW4gaG9zcGl0YWwgd2FzdGV3YXRlciBlZmZsdWVudC4gVGhyb3VnaCBhIHRvb2xraXQgb2YgYnJvYWQtIGFuZCBuYXJyb3ctc3BlY3RydW0gZW56eW1lcywgd2UgYWltIHRvIGFjaGlldmUgY2xlYXJhbmNlIG9mIHRoZSBtYWluIGNoZW1vdGhlcmFwZXV0aWMgYWdlbnRzLCBsaWtlIG1ldGhvdHJleGF0ZSwgNS1mbHVvcm91cmFjaWwgb3IgZG94b3J1YmljaW4uICJdKSksKHQoKSgpLG8uUWEoNDAsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIgV2UgYXJlIHRha2luZyBvbiB0aHJlZSBtYWluIGNoYWxsZW5nZXMgOiBlZmZpY2llbnQgZW50cnkgb2YgdGhlc2UgbW9sZWN1bGUgaW50byB0aGUgY2VsbCwgdGhyb3VnaCBjaGFubmVscyBhbmQgdHJhbnNwb3J0ZXJzICh1cmFjaWwtbGlrZSB0cmFuc3BvcnRlciB1cmFBLCBjcnlwdGljIGZvbGF0ZS1hbmFsb2d1ZSB0cmFuc3BvcnRlciBhYmdUIC4uLiksIHByb3BlciBkZWdyYWRhdGlvbiB0aHJvdWdoIG1ldGFib2xpemluZyBlbnp5bWVzIChjYXJib3h5cGVwdGlkYXNlIEcyLCBjeXRvY2hyb21lIFA0NTAgXHUyMDI2KSwgYW5kIGxvbmcgdGVybSBvcGVyYXRpb24gb2YgdGhlIGJpb3JlYWN0b3IsIHRob3VnaCBhIGJpc3RhYmxlLCBcdTIwMWNzdGVtLWNlbGwgbGlrZVx1MjAxZCBwb3B1bGF0aW9uIG9mIGJhY3RlcmlhLCBhbGxldmlhdGluZyB0aGUgbmVlZCBmb3IgcmVndWxhciByZXNlZWRpbmcgd2l0aCBmcmVzaCBjbG9uZXMuICJdKSksKHQoKSgpLG8uUWEoNDIsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDQzLDAsbnVsbCxudWxsLDEsImgzIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiUHJvamVjdCBzaWduaWZpY2FuY2UiXSkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIgUGhhcm1hY2V1dGljYWwgZHJ1Z3MgYXJlIGEgcGFydGljdWxhcmx5IGNvbmNzIG5pbmcgc291cmNlIG9mIHBvbGx1dGlvbiA6IHNlbGVjdGVkIHRvIGJlIGJpb2xvZ2ljYWxseSBhY3RpdmUgYXQgbG93IGNvbmNlbnRyYXRpb24gJiBkZXNpZ25lZCB0byByZXNpc3QgYmlvZGVncmFkYXRpb24sIGRydWdzIGNvbnN0aXR1dGUgYSBjbGFzcyBvZiBoaWdoIHJlbWFuZW5jZSBwb2xsdXRhbnRzIHRoYXQgaXMgcm91dGluZWx5IGZvdW5kIGluIHRoZSBlbnZpcm9ubWVudCwgZXZlbiBpbiBvdXIgZHJpbmtpbmcgd2F0ZXIuICJdKSksKHQoKSgpLG8uUWEoNDYsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIgVGhvdWdoIHBoeXNpY2FsICYgY2hlbWljYWwgc29sdXRpb24gZXhpc3QsIGluIHRoZSBmb3JtIG9mIG96b25lIGFuZCBVViB0cmVhdG1lbnQsIG91ciBzb2x1dGlvbiBjYW4gb2ZmZXIgdGhlIGZsZXhpYmlsaXR5IGFuZCBlZmZpY2llbmN5IG9mIGEgYmlvcmVhY3Rvci1iYXNlZCBhcHByb2FjaC4gIl0pKSwodCgpKCksby5RYSg0OCwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBPdXIgc3RlbS1jZWxsIGxpa2UgYXBwcm9hY2ggdG8gYmFjdGVyaWFsIHBvcHVsYXRpb24gbWFrZXMgaXQgYW4gb3B0aW9uIHdpdGggcG90ZW50aWFsbHkgbG93ZXIgb25nb2luZyBjb3N0cywgYW5kIG91ciBkZWdyYWRhdGlvbiBlbnp5bWVzIGFsbG93IHRhcmdldGVkIGRlZ3JhZGF0aW9uIG9mIHBhcnRpY3VsYXJseSByZXNpbGllbnQgbW9sZWN1bGVzIDogYm90aCB3ZWFrbmVzc2VzIG9mIGNvbnZlbnRpb25hbCBtZXRob2RzIG9mIHdhc3Rld2F0ZXIgdHJlYXRtZW50LiAiXSkpXSxudWxsLG51bGwpfXZhciB2cD1vLk1hKCJkYXNoYm9hcmQiLG1wLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiZGFzaGJvYXJkIixbXSxudWxsLG51bGwsbnVsbCxncCx5cCkpLG8uUGEoMSwxMDk3NzI4LG51bGwsMCxtcCxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfSx7fSx7fSxbXSksYnA9MCxfcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9vcGVuQ2xvc2VBbGxBY3Rpb25zPW5ldyBDLmEsdGhpcy5pZD0iY2RrLWFjY29yZGlvbi0iK2JwKyssdGhpcy5fbXVsdGk9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGl9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tdWx0aT1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW5BbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITApfSx0LnByb3RvdHlwZS5jbG9zZUFsbD1mdW5jdGlvbigpe3RoaXMuX29wZW5DbG9zZUFsbCghMSl9LHQucHJvdG90eXBlLl9vcGVuQ2xvc2VBbGw9ZnVuY3Rpb24odCl7dGhpcy5tdWx0aSYmdGhpcy5fb3BlbkNsb3NlQWxsQWN0aW9ucy5uZXh0KHQpfSx0fSgpLHdwPTAseHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYWNjb3JkaW9uPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyPW4sdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPWF0LmEuRU1QVFksdGhpcy5jbG9zZWQ9bmV3IG8ubix0aGlzLm9wZW5lZD1uZXcgby5uLHRoaXMuZGVzdHJveWVkPW5ldyBvLm4sdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgby5uLHRoaXMuaWQ9ImNkay1hY2NvcmRpb24tY2hpbGQtIit3cCsrLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyPWZ1bmN0aW9uKCl7fSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1uLmxpc3RlbihmdW5jdGlvbih0LGUpe3IuYWNjb3JkaW9uJiYhci5hY2NvcmRpb24ubXVsdGkmJnIuYWNjb3JkaW9uLmlkPT09ZSYmci5pZCE9PXQmJihyLmV4cGFuZGVkPSExKX0pLHRoaXMuYWNjb3JkaW9uJiYodGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvT3BlbkNsb3NlQWxsQWN0aW9ucygpKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJleHBhbmRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9leHBhbmRlZH0sc2V0OmZ1bmN0aW9uKHQpe3Q9RCh0KSx0aGlzLl9leHBhbmRlZCE9PXQmJih0aGlzLl9leHBhbmRlZD10LHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0KSx0Pyh0aGlzLm9wZW5lZC5lbWl0KCksdGhpcy5fZXhwYW5zaW9uRGlzcGF0Y2hlci5ub3RpZnkodGhpcy5pZCx0aGlzLmFjY29yZGlvbj90aGlzLmFjY29yZGlvbi5pZDp0aGlzLmlkKSk6dGhpcy5jbG9zZWQuZW1pdCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMub3BlbmVkLmNvbXBsZXRlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKSx0aGlzLmRlc3Ryb3llZC5lbWl0KCksdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcigpLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITEpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITApfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlVG9PcGVuQ2xvc2VBbGxBY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5hY2NvcmRpb24uX29wZW5DbG9zZUFsbEFjdGlvbnMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuZGlzYWJsZWR8fCh0LmV4cGFuZGVkPWUpfSl9LHR9KCksQ3A9ZnVuY3Rpb24oKXt9LEVwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2hpZGVUb2dnbGU9ITEsZS5kaXNwbGF5TW9kZT0iZGVmYXVsdCIsZX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShfcCksT3A9MCxTcD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5fdmlld0NvbnRhaW5lclJlZj1pLG8uX2hpZGVUb2dnbGU9ITEsby5faW5wdXRDaGFuZ2VzPW5ldyBDLmEsby5faGVhZGVySWQ9Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLSIrT3ArKyxvLmFjY29yZGlvbj1lLG99cmV0dXJuIE9iamVjdChkLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaWRlVG9nZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVUb2dnbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9oaWRlVG9nZ2xlPUQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2dldEhpZGVUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaGlkZVRvZ2dsZTp0aGlzLmhpZGVUb2dnbGV9LGUucHJvdG90eXBlLl9oYXNTcGFjaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjY29yZGlvbiYmImRlZmF1bHQiPT09KHRoaXMuZXhwYW5kZWQ/dGhpcy5hY2NvcmRpb24uZGlzcGxheU1vZGU6dGhpcy5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0sZS5wcm90b3R5cGUuX2dldEV4cGFuZGVkU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQifSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2xhenlDb250ZW50JiZ0aGlzLm9wZW5lZC5waXBlKFIobnVsbCksT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZXhwYW5kZWQmJiF0Ll9wb3J0YWx9KSxPYmplY3QoRXQuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3BvcnRhbD1uZXcgVHQodC5fbGF6eUNvbnRlbnQuX3RlbXBsYXRlLHQuX3ZpZXdDb250YWluZXJSZWYpfSl9LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2lucHV0Q2hhbmdlcy5uZXh0KHQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5faW5wdXRDaGFuZ2VzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9ib2R5QW5pbWF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudC5jbGFzc0xpc3Qsbj10LnBoYXNlTmFtZSxyPXQudG9TdGF0ZTsiZG9uZSI9PT1uJiYiZXhwYW5kZWQiPT09cj9lLmFkZCgibWF0LWV4cGFuZGVkIik6InN0YXJ0Ij09PW4mJiJjb2xsYXBzZWQiPT09ciYmZS5yZW1vdmUoIm1hdC1leHBhbmRlZCIpfSxlfSh4cCksa3A9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5wYW5lbD10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj1hdC5hLkVNUFRZLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj1PYmplY3Qob3QuYSkodC5vcGVuZWQsdC5jbG9zZWQsdC5faW5wdXRDaGFuZ2VzLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiEoIXQuaGlkZVRvZ2dsZSYmIXQuZGlzYWJsZWQpfSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxuLm1vbml0b3IoZS5uYXRpdmVFbGVtZW50KX1yZXR1cm4gdC5wcm90b3R5cGUuX3RvZ2dsZT1mdW5jdGlvbigpe3RoaXMucGFuZWwudG9nZ2xlKCl9LHQucHJvdG90eXBlLl9pc0V4cGFuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuZXhwYW5kZWR9LHQucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuX2dldEV4cGFuZGVkU3RhdGUoKX0sdC5wcm90b3R5cGUuX2dldFBhbmVsSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5pZH0sdC5wcm90b3R5cGUuX3Nob3dUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wYW5lbC5oaWRlVG9nZ2xlJiYhdGhpcy5wYW5lbC5kaXNhYmxlZH0sdC5wcm90b3R5cGUuX2tleWRvd249ZnVuY3Rpb24odCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSAzMjpjYXNlIDEzOnQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGUoKTticmVhaztkZWZhdWx0OnJldHVybn19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCl9LHR9KCksVHA9ZnVuY3Rpb24oKXt9LFBwPWZ1bmN0aW9uKCl7fSxBcD1mdW5jdGlvbigpe30sanA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbGlzdGVuZXJzPVtdfXJldHVybiB0LnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPXRoaXMuX2xpc3RlbmVycztuPHIubGVuZ3RoO24rKykoMCxyW25dKSh0LGUpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fbGlzdGVuZXJzLnB1c2godCksZnVuY3Rpb24oKXtlLl9saXN0ZW5lcnM9ZS5fbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KX19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuZXJzPVtdfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksSXA9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVse3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7dHJhbnNpdGlvbjptYXJnaW4gMjI1bXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSl9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQubWF0LWV4cGFuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1leHBhbnNpb24tcGFuZWwtYm9keXtwYWRkaW5nOjAgMjRweCAxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luOjE2cHggMH0ubWF0LWFjY29yZGlvbj4ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nOmZpcnN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpmaXJzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLXRvcDowfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6bGFzdC1jaGlsZCwubWF0LWFjY29yZGlvbj46bGFzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLWJvdHRvbTowfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MTZweCA4cHggMTZweCAyNHB4fS5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImJvZHlFeHBhbnNpb24iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjBweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gTXAodCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uSGEoMCxudWxsLG51bGwsMCkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIE5wKHQpe3JldHVybiBvLmtiKDIsW28uWmEobnVsbCwwKSwodCgpKCksby5RYSgxLDAsW1siYm9keSIsMV1dLG51bGwsNSwiZGl2IixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudCJdLFsicm9sZSIsInJlZ2lvbiJdXSxbWzI0LCJAYm9keUV4cGFuc2lvbiIsMF0sWzEsImFyaWEtbGFiZWxsZWRieSIsMF0sWzgsImlkIiwwXV0sW1tudWxsLCJAYm9keUV4cGFuc2lvbi5kb25lIl0sW251bGwsIkBib2R5RXhwYW5zaW9uLnN0YXJ0Il1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMCxpPXQuY29tcG9uZW50O3JldHVybiJAYm9keUV4cGFuc2lvbi5kb25lIj09PWUmJihyPSExIT09aS5fYm9keUFuaW1hdGlvbihuKSYmciksIkBib2R5RXhwYW5zaW9uLnN0YXJ0Ij09PWUmJihyPSExIT09aS5fYm9keUFuaW1hdGlvbihuKSYmcikscn0sbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMiwwLG51bGwsbnVsbCwzLCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uWmEobnVsbCwxKSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLE1wKSksby5QYSg1LDIxMjk5MixudWxsLDAsanQsW28uaixvLlBdLHtwb3J0YWw6WzAsInBvcnRhbCJdfSxudWxsKSxvLlphKG51bGwsMildLGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxlLmNvbXBvbmVudC5fcG9ydGFsKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uX2dldEV4cGFuZGVkU3RhdGUoKSxuLl9oZWFkZXJJZCxuLmlkKX0pfXZhciBScD1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAyNHB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpmb2N1cywubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7b3V0bGluZTowfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQ6Zm9jdXMsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZDpob3ZlcntiYWNrZ3JvdW5kOmluaGVyaXR9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4OjE7ZmxleC1kaXJlY3Rpb246cm93O292ZXJmbG93OmhpZGRlbn0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTttYXJnaW4tcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLFtkaXI9cnRsXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1ncm93OjJ9Lm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4IDJweCAwO2NvbnRlbnQ6Jyc7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzozcHg7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dmVydGljYWwtYWxpZ246bWlkZGxlfSJdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJpbmRpY2F0b3JSb3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InJvdGF0ZSgwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InJvdGF0ZSgxODBkZWcpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319LHt0eXBlOjcsbmFtZToiZXhwYW5zaW9uSGVpZ2h0IixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiJ7e2NvbGxhcHNlZEhlaWdodH19In0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6e3BhcmFtczp7Y29sbGFwc2VkSGVpZ2h0OiI0OHB4In19fSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoie3tleHBhbmRlZEhlaWdodH19In0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6e3BhcmFtczp7ZXhwYW5kZWRIZWlnaHQ6IjY0cHgifX19LHt0eXBlOjEsZXhwcjoiZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCIsYW5pbWF0aW9uOnt0eXBlOjMsc3RlcHM6W3t0eXBlOjExLHNlbGVjdG9yOiJAaW5kaWNhdG9yUm90YXRlIixhbmltYXRpb246e3R5cGU6OSxvcHRpb25zOm51bGx9LG9wdGlvbnM6e29wdGlvbmFsOiEwfX0se3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifV0sb3B0aW9uczpudWxsfSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gRHAodCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwwLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24taW5kaWNhdG9yIl1dLFtbMjQsIkBpbmRpY2F0b3JSb3RhdGUiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9nZXRFeHBhbmRlZFN0YXRlKCkpfSl9ZnVuY3Rpb24gRnAodCl7cmV0dXJuIG8ua2IoMixbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwzLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uWmEobnVsbCwwKSxvLlphKG51bGwsMSksby5aYShudWxsLDIpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsRHApKSxvLlBhKDUsMTYzODQsbnVsbCwwLHMuayxbby5QLG8uTV0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxlLmNvbXBvbmVudC5fc2hvd1RvZ2dsZSgpKX0sbnVsbCl9dmFyIExwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksVnA9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBCcCh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDM1LCJkaXYiLFtbImlkIiwiZ2NvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiU2l0ZSBtYXBzIl0pKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDMyLCJtYXQtYWNjb3JkaW9uIixbWyJjbGFzcyIsIm1hdC1hY2NvcmRpb24iXSxbIm11bHRpIiwidHJ1ZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsMTYzODQsbnVsbCwwLEVwLFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKHQoKSgpLG8uUWEoNSwxNjc3NzIxNixudWxsLG51bGwsMTQsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxOcCxJcCkpLG8uUGEoNiwxNzUzMDg4LG51bGwsMSxTcCxbWzMsRXBdLG8uaCxqcCxvLlBdLG51bGwsbnVsbCksby5nYigzMzU1NDQzMjAsMSx7X2xhenlDb250ZW50OjB9KSxvLmZiKDI1NixudWxsLEVwLHZvaWQgMCxbXSksKHQoKSgpLG8uUWEoOSwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDEwKS5fdG9nZ2xlKCkmJnIpLCJrZXlkb3duIj09PWUmJihyPSExIT09by5hYih0LDEwKS5fa2V5ZG93bihuKSYmcikscn0sRnAsUnApKSxvLlBhKDEwLDE4MDIyNCxudWxsLDAsa3AsW1NwLG8uayxlbixvLmhdLG51bGwsbnVsbCksby5kYigxMSx7Y29sbGFwc2VkSGVpZ2h0OjAsZXhwYW5kZWRIZWlnaHQ6MX0pLG8uZGIoMTIse3ZhbHVlOjAscGFyYW1zOjF9KSwodCgpKCksby5RYSgxMywwLG51bGwsMCwyLCJtYXQtcGFuZWwtdGl0bGUiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxNCwxNjM4NCxudWxsLDAsUHAsW10sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSxudWxsLFsiIFByb2plY3QgZGVzaWduICJdKSksKHQoKSgpLG8uUWEoMTYsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTcsMTYzODQsbnVsbCwwLFRwLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBUaGVvcmV0aWNhbCB1bmRlcnBpbm5pbmcgb2Ygb3VyIHByb2plY3QgIl0pKSwodCgpKCksby5pYigtMSwxLFsiIEFBQUFBQUFBQUFBYSAiXSkpLCh0KCkoKSxvLlFhKDIwLDE2Nzc3MjE2LG51bGwsbnVsbCwxNSwibWF0LWV4cGFuc2lvbi1wYW5lbCIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsIl1dLFtbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbMiwibWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nIixudWxsXV0sbnVsbCxudWxsLE5wLElwKSksby5QYSgyMSwxNzUzMDg4LG51bGwsMSxTcCxbWzMsRXBdLG8uaCxqcCxvLlBdLG51bGwsbnVsbCksby5nYigzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSxvLmZiKDI1NixudWxsLEVwLHZvaWQgMCxbXSksKHQoKSgpLG8uUWEoMjQsMCxudWxsLDAsOSwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiXSxbInJvbGUiLCJidXR0b24iXV0sW1sxLCJpZCIsMF0sWzEsInRhYmluZGV4IiwwXSxbMSwiYXJpYS1jb250cm9scyIsMF0sWzEsImFyaWEtZXhwYW5kZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbNDAsIkBleHBhbnNpb25IZWlnaHQiLDBdXSxbW251bGwsImNsaWNrIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PW8uYWIodCwyNSkuX3RvZ2dsZSgpJiZyKSwia2V5ZG93biI9PT1lJiYocj0hMSE9PW8uYWIodCwyNSkuX2tleWRvd24obikmJnIpLHJ9LEZwLFJwKSksby5QYSgyNSwxODAyMjQsbnVsbCwwLGtwLFtTcCxvLmssZW4sby5oXSxudWxsLG51bGwpLG8uZGIoMjYse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxvLmRiKDI3LHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLG8uUWEoMjgsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMjksMTYzODQsbnVsbCwwLFBwLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBNYXRlcmlhbCBhbmQgbWV0aG9kICJdKSksKHQoKSgpLG8uUWEoMzEsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMzIsMTYzODQsbnVsbCwwLFRwLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIiBPdXIgZXhwZXJpbWVudGFsIGRlc2lnbnMgJiByZXN1bHRzICJdKSksKHQoKSgpLG8uUWEoMzQsMCxudWxsLDEsMSwicCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIkknbSB2aXNpYmxlIGJlY2F1c2UgSSBhbSBvcGVuIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsNCwwLCJ0cnVlIil9LGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxvLmFiKGUsNikuZXhwYW5kZWQsby5hYihlLDYpLl9oYXNTcGFjaW5nKCkpLHQoZSw5LDAsby5hYihlLDEwKS5wYW5lbC5faGVhZGVySWQsby5hYihlLDEwKS5wYW5lbC5kaXNhYmxlZD8tMTowLG8uYWIoZSwxMCkuX2dldFBhbmVsSWQoKSxvLmFiKGUsMTApLl9pc0V4cGFuZGVkKCksby5hYihlLDEwKS5wYW5lbC5kaXNhYmxlZCxvLmFiKGUsMTApLl9pc0V4cGFuZGVkKCksdChlLDEyLDAsby5hYihlLDEwKS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLHQoZSwxMSwwLG8uYWIoZSwxMCkuY29sbGFwc2VkSGVpZ2h0LG8uYWIoZSwxMCkuZXhwYW5kZWRIZWlnaHQpKSksdChlLDIwLDAsby5hYihlLDIxKS5leHBhbmRlZCxvLmFiKGUsMjEpLl9oYXNTcGFjaW5nKCkpLHQoZSwyNCwwLG8uYWIoZSwyNSkucGFuZWwuX2hlYWRlcklkLG8uYWIoZSwyNSkucGFuZWwuZGlzYWJsZWQ/LTE6MCxvLmFiKGUsMjUpLl9nZXRQYW5lbElkKCksby5hYihlLDI1KS5faXNFeHBhbmRlZCgpLG8uYWIoZSwyNSkucGFuZWwuZGlzYWJsZWQsby5hYihlLDI1KS5faXNFeHBhbmRlZCgpLHQoZSwyNywwLG8uYWIoZSwyNSkuX2dldEV4cGFuZGVkU3RhdGUoKSx0KGUsMjYsMCxvLmFiKGUsMjUpLmNvbGxhcHNlZEhlaWdodCxvLmFiKGUsMjUpLmV4cGFuZGVkSGVpZ2h0KSkpfSl9dmFyIHpwPW8uTWEoImFwcC1zaXRlbWFwIixMcCxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1zaXRlbWFwIixbXSxudWxsLG51bGwsbnVsbCxCcCxWcCkpLG8uUGEoMSwxMTQ2ODgsbnVsbCwwLExwLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksVXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Nhbml0aXplcj10fXJldHVybiB0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0KX0sdH0oKSxIcD1uKCIyNkZVIiksUXA9bmV3IG8ucCgiRmxleCBMYXlvdXQgdG9rZW4sIGNvbGxlY3QgYWxsIGJyZWFrcG9pbnRzIGludG8gb25lIHByb3ZpZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLHFwPVt7YWxpYXM6InhzIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6Imd0LXhzIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkifSx7YWxpYXM6Imx0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6InNtIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoiZ3Qtc20iLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSJ9LHthbGlhczoibHQtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoibWQiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoiZ3QtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkifSx7YWxpYXM6Imx0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxMjc5cHgpIn0se2FsaWFzOiJsZyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSJ9LHthbGlhczoiZ3QtbGciLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkifSx7YWxpYXM6Imx0LXhsIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJ4bCIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTkyMHB4KSBhbmQgKG1heC13aWR0aDogNTAwMHB4KSJ9XSxHcD0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLFlwPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkiLFdwPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODQwcHgpIixacD0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIixLcD17SEFORFNFVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSwgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLFRBQkxFVDpZcCsiICwgIitHcCxXRUI6V3ArIiwgIitacCsiICIsSEFORFNFVF9QT1JUUkFJVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSIsVEFCTEVUX1BPUlRSQUlUOllwKyIgIixXRUJfUE9SVFJBSVQ6IiIrV3AsSEFORFNFVF9MQU5EU0NBUEU6IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogOTU5cHgpXSIsVEFCTEVUX0xBTkRTQ0FQRToiIitHcCxXRUJfTEFORFNDQVBFOiIiK1pwfSxYcD1be2FsaWFzOiJoYW5kc2V0IixtZWRpYVF1ZXJ5OktwLkhBTkRTRVR9LHthbGlhczoiaGFuZHNldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6S3AuSEFORFNFVF9MQU5EU0NBUEV9LHthbGlhczoiaGFuZHNldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTpLcC5IQU5EU0VUX1BPUlRSQUlUfSx7YWxpYXM6InRhYmxldCIsbWVkaWFRdWVyeTpLcC5UQUJMRVR9LHthbGlhczoidGFibGV0LmxhbmRzY2FwZSIsbWVkaWFRdWVyeTpLcC5UQUJMRVR9LHthbGlhczoidGFibGV0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OktwLlRBQkxFVF9QT1JUUkFJVH0se2FsaWFzOiJ3ZWIiLG1lZGlhUXVlcnk6S3AuV0VCLG92ZXJsYXBwaW5nOiEwfSx7YWxpYXM6IndlYi5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6S3AuV0VCX0xBTkRTQ0FQRSxvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIucG9ydHJhaXQiLG1lZGlhUXVlcnk6S3AuV0VCX1BPUlRSQUlULG92ZXJsYXBwaW5nOiEwfV07ZnVuY3Rpb24gJHAodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO2Zvcih2YXIgcj0wLGk9ZTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXTtpZihudWxsIT1vKWZvcih2YXIgYSBpbiBvKW8uaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPW9bYV0pfXJldHVybiB0fXZhciBKcD0vKFwufC18XykvZztmdW5jdGlvbiB0ZCh0KXt2YXIgZT10Lmxlbmd0aD4wP3QuY2hhckF0KDApOiIiLG49dC5sZW5ndGg+MT90LnNsaWNlKDEpOiIiO3JldHVybiBlLnRvVXBwZXJDYXNlKCkrbn12YXIgZWQ9e2FkZEZsZXhUb1BhcmVudDohMCxhZGRPcmllbnRhdGlvbkJwczohMSxkaXNhYmxlRGVmYXVsdEJwczohMSxkaXNhYmxlVmVuZG9yUHJlZml4ZXM6ITEsc2VydmVyTG9hZGVkOiExLHVzZUNvbHVtbkJhc2lzWmVybzohMH0sbmQ9bmV3IG8ucCgiRmxleCBMYXlvdXQgdG9rZW4sIGNvbmZpZyBvcHRpb25zIGZvciB0aGUgbGlicmFyeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZWR9fSkscmQ9bmV3IG8ucCgiVG9rZW4gKEBhbmd1bGFyL2ZsZXgtbGF5b3V0KSBCcmVha3BvaW50cyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXt2YXIgdD1PYmplY3Qoby5YKShRcCksZT1PYmplY3Qoby5YKShuZCksbj1bXS5jb25jYXQuYXBwbHkoW10sKHR8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19KSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBuLHI9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtyW3QuYWxpYXNdPXR9KSxlLmZvckVhY2goZnVuY3Rpb24odCl7clt0LmFsaWFzXT8kcChyW3QuYWxpYXNdLHQpOnJbdC5hbGlhc109dH0pLChuPU9iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gclt0XX0pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc3VmZml4fHwodC5zdWZmaXg9dC5hbGlhcy5yZXBsYWNlKEpwLCJ8Iikuc3BsaXQoInwiKS5tYXAodGQpLmpvaW4oIiIpLHQub3ZlcmxhcHBpbmc9ISF0Lm92ZXJsYXBwaW5nKX0pLG59KChlLmRpc2FibGVEZWZhdWx0QnBzP1tdOnFwKS5jb25jYXQoZS5hZGRPcmllbnRhdGlvbkJwcz9YcDpbXSksbil9fSksaWQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZ2lzdHJ5PXR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuc2xpY2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNvcnRlZEl0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dC5vdmVybGFwcGluZ30pLGU9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwIT09dC5vdmVybGFwcGluZ30pO3JldHVybiB0LmNvbmNhdChlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5maW5kQnlBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5hbGlhcz09dH0pfHxudWxsfSx0LnByb3RvdHlwZS5maW5kQnlRdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5tZWRpYVF1ZXJ5PT10fSl8fG51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3ZlcmxhcHBpbmdzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09dC5vdmVybGFwcGluZ30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWxpYXNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpYXN9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN1ZmZpeGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWZmaXg/dC5zdWZmaXg6IiJ9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShyZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxvZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dm9pZCAwPT09dCYmKHQ9ITEpLHZvaWQgMD09PWUmJihlPSJhbGwiKSx2b2lkIDA9PT1uJiYobj0iIiksdm9pZCAwPT09ciYmKHI9IiIpLHRoaXMubWF0Y2hlcz10LHRoaXMubWVkaWFRdWVyeT1lLHRoaXMubXFBbGlhcz1uLHRoaXMuc3VmZml4PXJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMubWF0Y2hlcyx0aGlzLm1lZGlhUXVlcnksdGhpcy5tcUFsaWFzLHRoaXMuc3VmZml4KX0sdH0oKSxhZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3pvbmU9dCx0aGlzLl9wbGF0Zm9ybUlkPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9yZWdpc3RyeT1uZXcgTWFwLHRoaXMuX3NvdXJjZT1uZXcgSHAuYShuZXcgb2QoITApKSx0aGlzLl9vYnNlcnZhYmxlJD10aGlzLl9zb3VyY2UuYXNPYnNlcnZhYmxlKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlZ2lzdHJ5LmdldCh0KTtyZXR1cm4hIWUmJmUubWF0Y2hlc30sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZWdpc3RlclF1ZXJ5KHQpLHRoaXMuX29ic2VydmFibGUkLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKGUpe3JldHVybiF0fHxlLm1lZGlhUXVlcnk9PT10fSkpfSx0LnByb3RvdHlwZS5yZWdpc3RlclF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9bXToic3RyaW5nIj09dHlwZW9mIHQ/W3RdOihlPXt9LHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc093blByb3BlcnR5KHQpJiYoZVt0XT0hMCl9KSk7dmFyIGV9KHQpO24ubGVuZ3RoPjAmJih0aGlzLl9wcmVwYXJlUXVlcnlDU1Mobix0aGlzLl9kb2N1bWVudCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuX3JlZ2lzdHJ5LmdldCh0KSxyPWZ1bmN0aW9uKG4pe2UuX3pvbmUucnVuKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IG9kKG4ubWF0Y2hlcyx0KTtlLl9zb3VyY2UubmV4dChyKX0pfTtufHwoKG49ZS5fYnVpbGRNUUwodCkpLmFkZExpc3RlbmVyKHIpLGUuX3JlZ2lzdHJ5LnNldCh0LG4pKSxuLm1hdGNoZXMmJnIobil9KSl9LHQucHJvdG90eXBlLl9idWlsZE1RTD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHMucSkodGhpcy5fcGxhdGZvcm1JZCkmJndpbmRvdy5tYXRjaE1lZGlhKCJhbGwiKS5hZGRMaXN0ZW5lcj93aW5kb3cubWF0Y2hNZWRpYSh0KTp7bWF0Y2hlczoiYWxsIj09PXR8fCIiPT09dCxtZWRpYTp0LGFkZExpc3RlbmVyOmZ1bmN0aW9uKCl7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe319fSx0LnByb3RvdHlwZS5fcHJlcGFyZVF1ZXJ5Q1NTPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXNkW3RdfSk7aWYobi5sZW5ndGg+MCl7dmFyIHI9bi5qb2luKCIsICIpO3RyeXt2YXIgaT1lLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGkuc3R5bGVTaGVldHx8aS5hcHBlbmRDaGlsZChlLmNyZWF0ZVRleHROb2RlKCJcbi8qXG4gIEBhbmd1bGFyL2ZsZXgtbGF5b3V0IC0gd29ya2Fyb3VuZCBmb3IgcG9zc2libGUgYnJvd3NlciBxdWlyayB3aXRoIG1lZGlhUXVlcnkgbGlzdGVuZXJzXG4gIHNlZSBodHRwOi8vYml0Lmx5LzJzZDRITVBcbiovXG5AbWVkaWEgIityKyIgey5meC1xdWVyeS10ZXN0eyB9fVxuIikpLGUuaGVhZC5hcHBlbmRDaGlsZChpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHNkW3RdPWl9KX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX19LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlgpKG8ueSksT2JqZWN0KG8uWCkoby5BKSxPYmplY3Qoby5YKShzLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksc2Q9e307ZnVuY3Rpb24gbGQodCxlKXtyZXR1cm4gJHAodCxlP3ttcUFsaWFzOmUuYWxpYXMsc3VmZml4OmUuc3VmZml4fTp7fSl9dmFyIHVkPWZ1bmN0aW9uKCl7fSxjZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmJyZWFrcG9pbnRzPXQsdGhpcy5tZWRpYVdhdGNoZXI9ZSx0aGlzLmZpbHRlck92ZXJsYXBzPSEwLHRoaXMuX3JlZ2lzdGVyQnJlYWtQb2ludHMoKSx0aGlzLm9ic2VydmFibGUkPXRoaXMuX2J1aWxkT2JzZXJ2YWJsZSgpfXJldHVybiB0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90b01lZGlhUXVlcnkodCk7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLmlzQWN0aXZlKGUpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLm9ic2VydmFibGUkLnN1YnNjcmliZSh0LGUsbil9LHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9ic2VydmFibGUkfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha1BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLm1lZGlhV2F0Y2hlci5yZWdpc3RlclF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fYnVpbGRPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXM7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLm9ic2VydmUoKS5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQubWF0Y2hlc30pLE9iamVjdChidC5hKShmdW5jdGlvbihuKXt2YXIgcj10LmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KG4ubWVkaWFRdWVyeSk7cmV0dXJuIXJ8fCEoZS5maWx0ZXJPdmVybGFwcyYmci5vdmVybGFwcGluZyl9KSxPYmplY3QoUy5hKShmdW5jdGlvbihlKXtyZXR1cm4gbGQoZSx0Ll9maW5kQnlRdWVyeShlLm1lZGlhUXVlcnkpKX0pKX0sdC5wcm90b3R5cGUuX2ZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHQpfSx0LnByb3RvdHlwZS5fZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCl9LHQucHJvdG90eXBlLl90b01lZGlhUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmluZEJ5QWxpYXModCl8fHRoaXMuX2ZpbmRCeVF1ZXJ5KHQpO3JldHVybiBlP2UubWVkaWFRdWVyeTp0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShpZCksT2JqZWN0KG8uWCkoYWQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksZmQ9ZnVuY3Rpb24oKXt9LGhkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc3R5bGVzaGVldD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5zdHlsZXNoZWV0LmdldCh0KTtyP3Iuc2V0KGUsbik6dGhpcy5zdHlsZXNoZWV0LnNldCh0LG5ldyBNYXAoW1tlLG5dXSkpfSx0LnByb3RvdHlwZS5jbGVhclN0eWxlcz1mdW5jdGlvbigpe3RoaXMuc3R5bGVzaGVldC5jbGVhcigpfSx0LnByb3RvdHlwZS5nZXRTdHlsZUZvckVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLnN0eWxlc2hlZXQuZ2V0KHQpLHI9IiI7aWYobil7dmFyIGk9bi5nZXQoZSk7Im51bWJlciIhPXR5cGVvZiBpJiYic3RyaW5nIiE9dHlwZW9mIGl8fChyPWkrIiIpfXJldHVybiByfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkscGQ9bmV3IG8ucCgiRmxleExheW91dFNlcnZlckxvYWRlZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxkZD1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXSxtZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9tZWRpYU1vbml0b3I9ZSx0aGlzLl9vbk1lZGlhQ2hhbmdlcz1uLHRoaXMuX3N1YnNjcmliZXJzPVtdLHRoaXMuX3JlZ2lzdHJ5TWFwPXRoaXMuX2J1aWxkUmVnaXN0cnlNYXAoKSx0aGlzLl9zdWJzY3JpYmVycz10aGlzLl9jb25maWd1cmVDaGFuZ2VPYnNlcnZlcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWdpc3RyeUZyb21MYXJnZXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5TWFwLnNsaWNlKCkucmV2ZXJzZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibWVkaWFNb25pdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhTW9uaXRvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0S2V5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5fHx0aGlzLl9vcHRpb25zLmJhc2VLZXl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRJbnB1dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuaGFzS2V5VmFsdWUodCk/dGhpcy5fbG9va3VwS2V5VmFsdWUodCk6dGhpcy5fb3B0aW9ucy5kZWZhdWx0VmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9KSx0aGlzLl9zdWJzY3JpYmVycz1bXX0sdC5wcm90b3R5cGUuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9rZXlJblVzZShuLmtleSkmJmUucHVzaCh0Lm1lZGlhTW9uaXRvci5vYnNlcnZlKG4uYWxpYXMpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuKGU9ZS5jbG9uZSgpKS5wcm9wZXJ0eT10Ll9vcHRpb25zLmJhc2VLZXksZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5fb25Nb25pdG9yRXZlbnRzKGUpfSkpfSksZX0sdC5wcm90b3R5cGUuX2J1aWxkUmVnaXN0cnlNYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLm1lZGlhTW9uaXRvci5icmVha3BvaW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuICRwKHt9LGUse2Jhc2VLZXk6dC5fb3B0aW9ucy5iYXNlS2V5LGtleTp0Ll9vcHRpb25zLmJhc2VLZXkrZS5zdWZmaXh9KX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5fa2V5SW5Vc2UoZS5rZXkpfSl9LHQucHJvdG90eXBlLl9vbk1vbml0b3JFdmVudHM9ZnVuY3Rpb24odCl7dC5wcm9wZXJ0eT09dGhpcy5fb3B0aW9ucy5iYXNlS2V5JiYodC52YWx1ZT10aGlzLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZSh0KSx0aGlzLl9vbk1lZGlhQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9rZXlJblVzZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbG9va3VwS2V5VmFsdWUodCl9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVBY3RpdmF0ZWRWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9vcHRpb25zLmJhc2VLZXkrdC5zdWZmaXgsbj10aGlzLl9hY3RpdmF0ZWRJbnB1dEtleTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkSW5wdXRLZXk9dGhpcy5fdmFsaWRhdGVJbnB1dEtleShuPXQubWF0Y2hlcz9lOm49PWU/IiI6biksdGhpcy5hY3RpdmF0ZWRJbnB1dH0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQpe3JldHVybiFlLl9rZXlJblVzZSh0KX07cmV0dXJuIG4odCkmJnRoaXMubWVkaWFNb25pdG9yLmFjdGl2ZU92ZXJsYXBzLnNvbWUoZnVuY3Rpb24ocil7dmFyIGk9ZS5fb3B0aW9ucy5iYXNlS2V5K3Iuc3VmZml4O3JldHVybiFuKGkpJiYodD1pLCEwKX0pLHR9LHQucHJvdG90eXBlLl9sb29rdXBLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5pbnB1dEtleXNbdF19LHR9KCkseWQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9tZWRpYU1vbml0b3I9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fc3R5bGVyPW4sdGhpcy5faW5wdXRNYXA9e30sdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzTWVkaWFRdWVyeUxpc3RlbmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tcUFjdGl2YXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb24/dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0OnZvaWQgMH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlLG49ImJhc2VLZXkiO3RoaXMuX21xQWN0aXZhdGlvbiYmKGU9dGhpcy5faW5wdXRNYXBbbj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXRLZXldLHRoaXMuX2lucHV0TWFwW25dPXQpO3ZhciByLGk9bmV3IG8uSShlLHQsITEpO3RoaXMubmdPbkNoYW5nZXMoKChyPXt9KVtuXT1pLHIpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuYXRpdmVFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcXVlcnlJbnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5wdXRNYXBbdF19LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fZGlzcGxheT10aGlzLl9nZXREaXNwbGF5U3R5bGUoKSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMH0sdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJCYXNlRGlyZWN0aXZlOjpuZ09uQ2hhbmdlcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzczogIit0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9tcUFjdGl2YXRpb24mJnRoaXMuX21xQWN0aXZhdGlvbi5kZXN0cm95KCksZGVsZXRlIHRoaXMuX21lZGlhTW9uaXRvcn0sdC5wcm90b3R5cGUuX2dldERlZmF1bHRWYWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9xdWVyeUlucHV0KHQpO3JldHVybiB2b2lkIDAhPT1uJiZudWxsIT09biYmIiIhPT1uP246ZX0sdC5wcm90b3R5cGUuX2dldERpc3BsYXlTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwU3R5bGUodCwiZGlzcGxheSIpfSx0LnByb3RvdHlwZS5fZ2V0QXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwQXR0cmlidXRlVmFsdWUoZSx0KX0sdC5wcm90b3R5cGUuX2dldEZsZXhGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBuLHI9InJvdyI7aWYodCYmKHI9KG49dGhpcy5fc3R5bGVyLmdldEZsb3dEaXJlY3Rpb24odCkpWzBdLCFuWzFdJiZlKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGUsbixyPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiBkZC5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09bn0pfHwobj1kZFswXSksImlubGluZSI9PT1yJiYocj0iaW5saW5lIiE9PWk/aToiIixpPSJpbmxpbmUiKSxbbixmdW5jdGlvbih0KXtpZih0KXN3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2UicmV2ZXJzZSI6Y2FzZSJ3cmFwLXJldmVyc2UiOmNhc2UicmV2ZXJzZS13cmFwIjp0PSJ3cmFwLXJldmVyc2UiO2JyZWFrO2Nhc2Uibm8iOmNhc2Uibm9uZSI6Y2FzZSJub3dyYXAiOnQ9Im5vd3JhcCI7YnJlYWs7ZGVmYXVsdDp0PSJ3cmFwIn1yZXR1cm4gdH0ociksISFpXX0odCk7cmV0dXJuIG49clsyXSx2b2lkIDA9PT0oZT1yWzFdKSYmKGU9bnVsbCksdm9pZCAwPT09biYmKG49ITEpLHtkaXNwbGF5Om4/ImlubGluZS1mbGV4IjoiZmxleCIsImJveC1zaXppbmciOiJib3JkZXItYm94IiwiZmxleC1kaXJlY3Rpb24iOnJbMF0sImZsZXgtd3JhcCI6ZXx8bnVsbH19KHIpO3RoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50cyhpLFt0XSl9cmV0dXJuIHIudHJpbSgpfHwicm93In0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnQobix0LGUpfSx0LnByb3RvdHlwZS5fYXBwbHlTdHlsZVRvRWxlbWVudHM9ZnVuY3Rpb24odCxlKXt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHModCxlKX0sdC5wcm90b3R5cGUuX2NhY2hlSW5wdXQ9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpZm9yKHZhciBuIGluIGUpdGhpcy5faW5wdXRNYXBbbl09ZVtuXTtlbHNlIHQmJih0aGlzLl9pbnB1dE1hcFt0XT1lKX0sdC5wcm90b3R5cGUuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fbXFBY3RpdmF0aW9uKXt2YXIgcj1uZXcgZnVuY3Rpb24odCxlLG4pe3RoaXMuYmFzZUtleT10LHRoaXMuZGVmYXVsdFZhbHVlPWUsdGhpcy5pbnB1dEtleXM9bn0odCxlLHRoaXMuX2lucHV0TWFwKTt0aGlzLl9tcUFjdGl2YXRpb249bmV3IG1kKHIsdGhpcy5fbWVkaWFNb25pdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSl9cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbk5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbixlPVtdLG49dC5sZW5ndGg7bi0tOyllW25dPXRbbl07cmV0dXJuIGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQST1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5faW5wdXRNYXApLmxlbmd0aC0odGhpcy5faW5wdXRNYXBbdF0/MTowKT4wfSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9uLmhhc0tleVZhbHVlKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0luaXRpYWxpemVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0luaXRpYWxpemVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksZ2Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fYnJlYWtwb2ludHM9dCx0aGlzLl9tYXRjaE1lZGlhPWUsdGhpcy5fcmVnaXN0ZXJCcmVha3BvaW50cygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImJyZWFrcG9pbnRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLml0ZW1zLnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVPdmVybGFwcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLm92ZXJsYXBwaW5ncy5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXRjaE1lZGlhLmlzQWN0aXZlKGUubWVkaWFRdWVyeSl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZSIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1udWxsO3RoaXMuYnJlYWtwb2ludHMucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obil7IiIhPT1uLmFsaWFzJiYhZSYmdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpJiYoZT1uKX0pO3ZhciBuPXRoaXMuYnJlYWtwb2ludHNbMF07cmV0dXJuIGV8fCh0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKG4ubWVkaWFRdWVyeSk/bjpudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCk7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEuaXNBY3RpdmUoZT9lLm1lZGlhUXVlcnk6dCl9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModHx8IiIpfHx0aGlzLl9icmVha3BvaW50cy5maW5kQnlRdWVyeSh0fHwiIik7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEub2JzZXJ2ZShlP2UubWVkaWFRdWVyeTp0KS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBsZCh0LGUpfSksT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiFlfHwiIiE9PXQubXFBbGlhc30pKX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyQnJlYWtwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9icmVha3BvaW50cy5zb3J0ZWRJdGVtcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWVkaWFRdWVyeX0pO3RoaXMuX21hdGNoTWVkaWEucmVnaXN0ZXJRdWVyeSh0KX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoaWQpLE9iamVjdChvLlgpKGFkKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIHZkKHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbj10W2VdfHwiIjtzd2l0Y2goZSl7Y2FzZSJkaXNwbGF5Ijp0LmRpc3BsYXk9ImZsZXgiPT09bj9bIi13ZWJraXQtZmxleCIsImZsZXgiXToiaW5saW5lLWZsZXgiPT09bj9bIi13ZWJraXQtaW5saW5lLWZsZXgiLCJpbmxpbmUtZmxleCJdOm47YnJlYWs7Y2FzZSJhbGlnbi1pdGVtcyI6Y2FzZSJhbGlnbi1zZWxmIjpjYXNlImFsaWduLWNvbnRlbnQiOmNhc2UiZmxleCI6Y2FzZSJmbGV4LWJhc2lzIjpjYXNlImZsZXgtZmxvdyI6Y2FzZSJmbGV4LWdyb3ciOmNhc2UiZmxleC1zaHJpbmsiOmNhc2UiZmxleC13cmFwIjpjYXNlImp1c3RpZnktY29udGVudCI6dFsiLXdlYmtpdC0iK2VdPW47YnJlYWs7Y2FzZSJmbGV4LWRpcmVjdGlvbiI6dFsiLXdlYmtpdC1mbGV4LWRpcmVjdGlvbiJdPW49bnx8InJvdyIsdFsiZmxleC1kaXJlY3Rpb24iXT1uO2JyZWFrO2Nhc2Uib3JkZXIiOnQub3JkZXI9dFsiLXdlYmtpdC0iK2VdPWlzTmFOKG4pPyIwIjpufX1yZXR1cm4gdH12YXIgYmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3NlcnZlclN0eWxlc2hlZXQ9dCx0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ9ZSx0aGlzLl9wbGF0Zm9ybUlkPW4sdGhpcy5sYXlvdXRDb25maWc9cn1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHlTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9e307InN0cmluZyI9PXR5cGVvZiBlJiYocltlXT1uLGU9cikscj10aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXM/ZTp2ZChlKSx0aGlzLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChyLHQpfSx0LnByb3RvdHlwZS5hcHBseVN0eWxlVG9FbGVtZW50cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciByPXRoaXMubGF5b3V0Q29uZmlnLmRpc2FibGVWZW5kb3JQcmVmaXhlcz90OnZkKHQpO2UuZm9yRWFjaChmdW5jdGlvbih0KXtuLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChyLHQpfSl9LHQucHJvdG90eXBlLmdldEZsb3dEaXJlY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb29rdXBTdHlsZSh0LCJmbGV4LWRpcmVjdGlvbiIpO2U9PT1fZCYmKGU9IiIpO3ZhciBuPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKXx8T2JqZWN0KHMucikodGhpcy5fcGxhdGZvcm1JZCkmJnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD9lOiIiO3JldHVybltlfHwicm93IixuXX0sdC5wcm90b3R5cGUubG9va3VwQXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl8fCIifSx0LnByb3RvdHlwZS5sb29rdXBJbmxpbmVTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3Qocy5xKSh0aGlzLl9wbGF0Zm9ybUlkKT90LnN0eWxlW2VdOnRoaXMuX2dldFNlcnZlclN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmxvb2t1cFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9IiI7cmV0dXJuIHQmJigocj10aGlzLmxvb2t1cElubGluZVN0eWxlKHQsZSkpfHwoT2JqZWN0KHMucSkodGhpcy5fcGxhdGZvcm1JZCk/bnx8KHI9Z2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTp0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQmJihyPXRoaXMuX3NlcnZlclN0eWxlc2hlZXQuZ2V0U3R5bGVGb3JFbGVtZW50KHQsZSkpKSkscj9yLnRyaW0oKTpfZH0sdC5wcm90b3R5cGUuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztPYmplY3Qua2V5cyh0KS5zb3J0KCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1BcnJheS5pc0FycmF5KHRbcl0pP3Rbcl06W3Rbcl1dO2kuc29ydCgpO2Zvcih2YXIgbz0wLGE9aTtvPGEubGVuZ3RoO28rKyl7dmFyIGw9YVtvXTtPYmplY3Qocy5xKShuLl9wbGF0Zm9ybUlkKXx8IW4uX3NlcnZlck1vZHVsZUxvYWRlZD9PYmplY3Qocy5xKShuLl9wbGF0Zm9ybUlkKT9lLnN0eWxlLnNldFByb3BlcnR5KHIsbCk6bi5fc2V0U2VydmVyU3R5bGUoZSxyLGwpOm4uX3NlcnZlclN0eWxlc2hlZXQuYWRkU3R5bGVUb0VsZW1lbnQoZSxyLGwpfX0pfSx0LnByb3RvdHlwZS5fc2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlLG4pe2U9ZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIHI9dGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpO3JbZV09bnx8IiIsdGhpcy5fd3JpdGVTdHlsZUF0dHJpYnV0ZSh0LHIpfSx0LnByb3RvdHlwZS5fZ2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpW2VdfHwiIn0sdC5wcm90b3R5cGUuX3JlYWRTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2lmKG4pZm9yKHZhciByPW4uc3BsaXQoLzsrL2cpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXS50cmltKCk7aWYoby5sZW5ndGg+MCl7dmFyIGE9by5pbmRleE9mKCI6Iik7aWYoLTE9PT1hKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBDU1Mgc3R5bGU6ICIrbyk7ZVtvLnN1YnN0cigwLGEpLnRyaW0oKV09by5zdWJzdHIoYSsxKS50cmltKCl9fXJldHVybiBlfSx0LnByb3RvdHlwZS5fd3JpdGVTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSIiO2Zvcih2YXIgciBpbiBlKWVbcl0mJihuKz1yKyI6IitlW3JdKyI7Iik7dC5zZXRBdHRyaWJ1dGUoInN0eWxlIixuKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KG8uWCkoaGQsOCksT2JqZWN0KG8uWCkocGQsOCksT2JqZWN0KG8uWCkoby5BKSxPYmplY3Qoby5YKShuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxfZD0iYmxvY2siO2Z1bmN0aW9uIHdkKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcc10vZywiIikucmVwbGFjZSgvW1wvXCpcK1wtXS9nLCIgJCYgIil9dmFyIHhkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1lLHIud29yaz1uLHJ9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTApLG4+MD90LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsZSxuKToodGhpcy5kZWxheT1uLHRoaXMuc3RhdGU9ZSx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlLG4pe3JldHVybiBuPjB8fHRoaXMuY2xvc2VkP3QucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLGUsbik6dGhpcy5fZXhlY3V0ZShlLG4pfSxlLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZD1mdW5jdGlvbihlLG4scil7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLG51bGwhPT1yJiZyPjB8fG51bGw9PT1yJiZ0aGlzLmRlbGF5PjA/dC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLGUsbixyKTplLmZsdXNoKHRoaXMpfSxlfShzdCksQ2Q9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBkLmIoZSx0KSxlfSh1dCkpKHhkKTtmdW5jdGlvbiBFZCh0LGUpe3JldHVybiBuZXcgRS5hKGU/ZnVuY3Rpb24obil7cmV0dXJuIGUuc2NoZWR1bGUoT2QsMCx7ZXJyb3I6dCxzdWJzY3JpYmVyOm59KX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KX1mdW5jdGlvbiBPZCh0KXt0LnN1YnNjcmliZXIuZXJyb3IodC5lcnJvcil9dmFyIFNkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9bix0aGlzLmhhc1ZhbHVlPSJOIj09PXR9cmV0dXJuIHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdC5uZXh0JiZ0Lm5leHQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gdC5lcnJvciYmdC5lcnJvcih0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiB0LmNvbXBsZXRlJiZ0LmNvbXBsZXRlKCl9fSx0LnByb3RvdHlwZS5kbz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdCYmdCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBlJiZlKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIG4mJm4oKX19LHQucHJvdG90eXBlLmFjY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQ/dGhpcy5vYnNlcnZlKHQpOnRoaXMuZG8odCxlLG4pfSx0LnByb3RvdHlwZS50b09ic2VydmFibGU9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiBPYmplY3QoSS5hKSh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBFZCh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBPYmplY3Qoai5iKSgpfXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCB2YWx1ZSIpfSx0LmNyZWF0ZU5leHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/bmV3IHQoIk4iLGUpOnQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb259LHQuY3JlYXRlRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KCJFIix2b2lkIDAsZSl9LHQuY3JlYXRlQ29tcGxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jb21wbGV0ZU5vdGlmaWNhdGlvbn0sdC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgdCgiQyIpLHQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb249bmV3IHQoIk4iLHZvaWQgMCksdH0oKSxrZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1yJiYocj0wKTt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5zY2hlZHVsZXI9bixpLmRlbGF5PXIsaX1yZXR1cm4gZC5iKGUsdCksZS5kaXNwYXRjaD1mdW5jdGlvbih0KXt0Lm5vdGlmaWNhdGlvbi5vYnNlcnZlKHQuZGVzdGluYXRpb24pLHRoaXMudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuc2NoZWR1bGVNZXNzYWdlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGUuZGlzcGF0Y2gsdGhpcy5kZWxheSxuZXcgVGQodCx0aGlzLmRlc3RpbmF0aW9uKSkpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLnNjaGVkdWxlTWVzc2FnZShTZC5jcmVhdGVOZXh0KHQpKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKFNkLmNyZWF0ZUVycm9yKHQpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoU2QuY3JlYXRlQ29tcGxldGUoKSl9LGV9KEhlLmEpLFRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3RpZmljYXRpb249dCx0aGlzLmRlc3RpbmF0aW9uPWV9LFBkPW4oIjhnOEEiKSxBZD1uKCJ1TWFPIiksamQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zY2hlZHVsZXI9cixpLl9ldmVudHM9W10saS5faW5maW5pdGVUaW1lV2luZG93PSExLGkuX2J1ZmZlclNpemU9ZTwxPzE6ZSxpLl93aW5kb3dUaW1lPW48MT8xOm4sbj09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8oaS5faW5maW5pdGVUaW1lV2luZG93PSEwLGkubmV4dD1pLm5leHRJbmZpbml0ZVRpbWVXaW5kb3cpOmkubmV4dD1pLm5leHRUaW1lV2luZG93LGl9cmV0dXJuIGQuYihlLHQpLGUucHJvdG90eXBlLm5leHRJbmZpbml0ZVRpbWVXaW5kb3c9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5fZXZlbnRzO24ucHVzaChlKSxuLmxlbmd0aD50aGlzLl9idWZmZXJTaXplJiZuLnNoaWZ0KCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLm5leHRUaW1lV2luZG93PWZ1bmN0aW9uKGUpe3RoaXMuX2V2ZW50cy5wdXNoKG5ldyBJZCh0aGlzLl9nZXROb3coKSxlKSksdGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKSx0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuX2luZmluaXRlVGltZVdpbmRvdyxyPW4/dGhpcy5fZXZlbnRzOnRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksaT10aGlzLnNjaGVkdWxlcixvPXIubGVuZ3RoO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBQZC5hO2lmKHRoaXMuaXNTdG9wcGVkfHx0aGlzLmhhc0Vycm9yP2U9YXQuYS5FTVBUWToodGhpcy5vYnNlcnZlcnMucHVzaCh0KSxlPW5ldyBBZC5hKHRoaXMsdCkpLGkmJnQuYWRkKHQ9bmV3IGtkKHQsaSkpLG4pZm9yKHZhciBhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdKTtlbHNlIGZvcihhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksZX0sZS5wcm90b3R5cGUuX2dldE5vdz1mdW5jdGlvbigpe3JldHVybih0aGlzLnNjaGVkdWxlcnx8Q2QpLm5vdygpfSxlLnByb3RvdHlwZS5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ2V0Tm93KCksZT10aGlzLl9idWZmZXJTaXplLG49dGhpcy5fd2luZG93VGltZSxyPXRoaXMuX2V2ZW50cyxpPXIubGVuZ3RoLG89MDtvPGkmJiEodC1yW29dLnRpbWU8bik7KW8rKztyZXR1cm4gaT5lJiYobz1NYXRoLm1heChvLGktZSkpLG8+MCYmci5zcGxpY2UoMCxvKSxyfSxlfShDLmEpLElkPWZ1bmN0aW9uKHQsZSl7dGhpcy50aW1lPXQsdGhpcy52YWx1ZT1lfSxNZD0iaW5saW5lIixOZD1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXTtmdW5jdGlvbiBSZCh0KXt2YXIgZT0odD10P3QudG9Mb3dlckNhc2UoKToiIikuc3BsaXQoIiAiKSxuPWVbMF0scj1lWzFdLGk9ZVsyXTtyZXR1cm4gTmQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PW59KXx8KG49TmRbMF0pLHI9PT1NZCYmKHI9aSE9PU1kP2k6IiIsaT1NZCksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19ZnVuY3Rpb24gRGQodCl7cmV0dXJuIFJkKHQpWzBdLmluZGV4T2YoInJvdyIpPi0xfXZhciBGZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGkuX2Fubm91bmNlcj1uZXcgamQoMSksaS5sYXlvdXQkPWkuX2Fubm91bmNlci5hc09ic2VydmFibGUoKSxpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5sYXlvdXR8fHRoaXMuX21xQWN0aXZhdGlvbikmJnRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImxheW91dCIsInJvdyIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlV2l0aERpcmVjdGlvbih0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhEaXJlY3Rpb24oKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7dD10fHx0aGlzLl9xdWVyeUlucHV0KCJsYXlvdXQiKXx8InJvdyIsdGhpcy5fbXFBY3RpdmF0aW9uJiYodD10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPVJkKHQpO3JldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPW51bGwpLHZvaWQgMD09PXImJihyPSExKSx7ZGlzcGxheTpyPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjplWzBdLCJmbGV4LXdyYXAiOm58fG51bGx9fSgwLGVbMV0sZVsyXSl9KHR8fCIiKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KGUpLHRoaXMuX2Fubm91bmNlci5uZXh0KHtkaXJlY3Rpb246ZVsiZmxleC1kaXJlY3Rpb24iXSx3cmFwOiEhZVsiZmxleC13cmFwIl0mJiJub3dyYXAiIT09ZVsiZmxleC13cmFwIl19KX0sZX0oeWQpLExkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEpe3ZhciBzPXQuY2FsbCh0aGlzLGUsbixhKXx8dGhpcztyZXR1cm4gcy5fem9uZT1pLHMuX2RpcmVjdGlvbmFsaXR5PW8scy5fbGF5b3V0PSJyb3ciLHImJihzLl9sYXlvdXRXYXRjaGVyPXIubGF5b3V0JC5zdWJzY3JpYmUocy5fb25MYXlvdXRDaGFuZ2UuYmluZChzKSkpLHMuX2RpcmVjdGlvbldhdGNoZXI9cy5fZGlyZWN0aW9uYWxpdHkuY2hhbmdlLnN1YnNjcmliZShzLl91cGRhdGVXaXRoVmFsdWUuYmluZChzKSksc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXAiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwU20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZ2FwfHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl93YXRjaENvbnRlbnRDaGFuZ2VzKCksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImdhcCIsIjAiLGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZVdpdGhWYWx1ZShlLnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpLHRoaXMuX29ic2VydmVyJiZ0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fZGlyZWN0aW9uV2F0Y2hlciYmdGhpcy5fZGlyZWN0aW9uV2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fd2F0Y2hDb250ZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgTXV0YXRpb25PYnNlcnZlciYmKHQuX29ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2Uuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRlZE5vZGVzJiZ0LmFkZGVkTm9kZXMubGVuZ3RoPjB8fHQucmVtb3ZlZE5vZGVzJiZ0LnJlbW92ZWROb2Rlcy5sZW5ndGg+MH0pJiZ0Ll91cGRhdGVXaXRoVmFsdWUoKX0pLHQuX29ic2VydmVyLm9ic2VydmUodC5uYXRpdmVFbGVtZW50LHtjaGlsZExpc3Q6ITB9KSl9KX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksTmQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dHx8dGhpcy5fcXVlcnlJbnB1dCgiZ2FwIil8fCIwIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIHI9dGhpcy5jaGlsZHJlbk5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubm9kZVR5cGUmJiJub25lIiE9ZS5fZ2V0RGlzcGxheVN0eWxlKHQpfSkuc29ydChmdW5jdGlvbih0LG4pe3ZhciByPStlLl9zdHlsZXIubG9va3VwU3R5bGUodCwib3JkZXIiKSxpPStlLl9zdHlsZXIubG9va3VwU3R5bGUobiwib3JkZXIiKTtyZXR1cm4gaXNOYU4ocil8fGlzTmFOKGkpfHxyPT09aT8wOnI+aT8xOi0xfSk7aWYoci5sZW5ndGg+MClpZihuLmVuZHNXaXRoKFZkKSluPW4uc3Vic3RyaW5nKDAsbi5pbmRleE9mKFZkKSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRHcmlkUGFkZGluZyhuKSxyKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkR3JpZE1hcmdpbihuKSk7ZWxzZXt2YXIgaT1yLnBvcCgpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKG4pLHIpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKCksW2ldKX19LGUucHJvdG90eXBlLl9idWlsZEdyaWRQYWRkaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPSIwcHgiLG49IjBweCI7cmV0dXJuInJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT9uPXQ6ZT10LHtwYWRkaW5nOiIwcHggIitlKyIgIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkR3JpZE1hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj0iLSIrdDplPSItIit0LHttYXJnaW46IjBweCAiK2UrIiAtIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkQ1NTPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PW51bGwpO3ZhciBlLG49eyJtYXJnaW4tbGVmdCI6bnVsbCwibWFyZ2luLXJpZ2h0IjpudWxsLCJtYXJnaW4tdG9wIjpudWxsLCJtYXJnaW4tYm90dG9tIjpudWxsfTtzd2l0Y2godGhpcy5fbGF5b3V0KXtjYXNlImNvbHVtbiI6ZT0ibWFyZ2luLWJvdHRvbSI7YnJlYWs7Y2FzZSJjb2x1bW4tcmV2ZXJzZSI6ZT0ibWFyZ2luLXRvcCI7YnJlYWs7Y2FzZSJyb3ciOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQiO2JyZWFrO2Nhc2Uicm93LXJldmVyc2UiOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLXJpZ2h0IjoibWFyZ2luLWxlZnQiO2JyZWFrO2RlZmF1bHQ6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tbGVmdCI6Im1hcmdpbi1yaWdodCJ9cmV0dXJuIG5bZV09dCxufSxlfSh5ZCksVmQ9IiBncmlkIjtmdW5jdGlvbiBCZCh0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciByPTAsaT1lO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdO2lmKG51bGwhPW8pZm9yKHZhciBhIGluIG8pby5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbYV09b1thXSl9cmV0dXJuIHR9dmFyIHpkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvKXt2YXIgYT10LmNhbGwodGhpcyxlLG4saSl8fHRoaXM7cmV0dXJuIGEuX2NvbnRhaW5lcj1yLGEuc3R5bGVVdGlscz1pLGEubGF5b3V0Q29uZmlnPW8sYS5fY2FjaGVJbnB1dCgiZmxleCIsIiIpLGEuX2NhY2hlSW5wdXQoInNocmluayIsMSksYS5fY2FjaGVJbnB1dCgiZ3JvdyIsMSksciYmKGEuX2xheW91dFdhdGNoZXI9ci5sYXlvdXQkLnN1YnNjcmliZShmdW5jdGlvbih0KXthLl9vbkxheW91dENoYW5nZSh0KX0pKSxhfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hyaW5rIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoInNocmluayIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJncm93Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdyb3ciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4R3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4R3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRTbSIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRNZCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4THRYbCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4THRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZmxleHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QucHJvdG90eXBlLm5nT25Jbml0LmNhbGwodGhpcyksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImZsZXgiLCIiLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVN0eWxlKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheW91dD10fHx0aGlzLl9sYXlvdXR8fHtkaXJlY3Rpb246InJvdyIsd3JhcDohMX0sdGhpcy5fdXBkYXRlU3R5bGUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImZsZXgiKXx8IiI7dGhpcy5fbXFBY3RpdmF0aW9uJiYoZT10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpO3ZhciBuPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iMSIpLHZvaWQgMD09PW4mJihuPSIxIik7dmFyIHI9W2Usbix0XSxpPXQuaW5kZXhPZigiY2FsYyIpO2lmKGk+MClyWzJdPXdkKHQuc3Vic3RyaW5nKGkpLnRyaW0oKSksMj09KG89dC5zdWJzdHIoMCxpKS50cmltKCkuc3BsaXQoIiAiKSkubGVuZ3RoJiYoclswXT1vWzBdLHJbMV09b1sxXSk7ZWxzZSBpZigwPT1pKXJbMl09d2QodC50cmltKCkpO2Vsc2V7dmFyIG87cj0zPT09KG89dC5zcGxpdCgiICIpKS5sZW5ndGg/bzpbZSxuLHRdfXJldHVybiByfShTdHJpbmcoZSkucmVwbGFjZSgiOyIsIiIpLHRoaXMuX3F1ZXJ5SW5wdXQoImdyb3ciKSx0aGlzLl9xdWVyeUlucHV0KCJzaHJpbmsiKSk7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl92YWxpZGF0ZVZhbHVlLmFwcGx5KHRoaXMsbikpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGVWYWx1ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fZ2V0RmxleEZsb3dEaXJlY3Rpb24odGhpcy5wYXJlbnRFbGVtZW50LHRoaXMubGF5b3V0Q29uZmlnLmFkZEZsZXhUb1BhcmVudCkuaW5kZXhPZigiY29sdW1uIik+LTE/ImNvbHVtbiI6InJvdyIsaT1EZChyKT8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCIsbz1EZChyKT8ibWluLXdpZHRoIjoibWluLWhlaWdodCIsYT1TdHJpbmcobikuaW5kZXhPZigiY2FsYyIpPi0xLHM9YXx8ImF1dG8iPT1uLGw9U3RyaW5nKG4pLmluZGV4T2YoIiUiKT4tMSYmIWEsdT1TdHJpbmcobikuaW5kZXhPZigicHgiKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoImVtIik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJ2dyIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigidmgiKT4tMSxjPVN0cmluZyhuKS5pbmRleE9mKCJweCIpPi0xfHxzLGY9YXx8dTt0PSIwIj09dD8wOnQsZT0iMCI9PWU/MDplO3ZhciBoPSF0JiYhZSxwPXt9LGQ9eyJtYXgtd2lkdGgiOm51bGwsIm1heC1oZWlnaHQiOm51bGwsIm1pbi13aWR0aCI6bnVsbCwibWluLWhlaWdodCI6bnVsbH07c3dpdGNoKG58fCIiKXtjYXNlIiI6bj0icm93Ij09PXI/IjAlIjp0aGlzLmxheW91dENvbmZpZy51c2VDb2x1bW5CYXNpc1plcm8/IjAuMDAwMDAwMDAxcHgiOiJhdXRvIjticmVhaztjYXNlImluaXRpYWwiOmNhc2Uibm9ncm93Ijp0PTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJncm93IjpuPSIxMDAlIjticmVhaztjYXNlIm5vc2hyaW5rIjplPTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJhdXRvIjpicmVhaztjYXNlIm5vbmUiOnQ9MCxlPTAsbj0iYXV0byI7YnJlYWs7ZGVmYXVsdDpmfHxsfHxpc05hTihuKXx8KG4rPSIlIiksIjAlIj09PW4mJihmPSEwKSwiMHB4Ij09PW4mJihuPSIwJSIpLHA9QmQoZCxhP3siZmxleC1ncm93Ijp0LCJmbGV4LXNocmluayI6ZSwiZmxleC1iYXNpcyI6Zj9uOiIxMDAlIn06e2ZsZXg6dCsiICIrZSsiICIrKGY/bjoiMTAwJSIpfSl9cmV0dXJuIHAuZmxleHx8cFsiZmxleC1ncm93Il18fChwPUJkKGQsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSksIjAlIiE9PW4mJiIwcHgiIT09biYmIjAuMDAwMDAwMDAxcHgiIT09biYmImF1dG8iIT09biYmKHBbb109aHx8YyYmdD9uOm51bGwscFtpXT1ofHwhcyYmZT9uOm51bGwpLHBbb118fHBbaV0/dGhpcy5fbGF5b3V0JiZ0aGlzLl9sYXlvdXQud3JhcCYmKHBbYT8iZmxleC1iYXNpcyI6ImZsZXgiXT1wW2ldP2E/cFtpXTp0KyIgIitlKyIgIitwW2ldOmE/cFtvXTp0KyIgIitlKyIgIitwW29dKTpwPUJkKGQsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSxCZChwLHsiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGV9KHlkKSxVZD17bWFyZ2luOjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsIm1pbi13aWR0aCI6IjEwMCUiLCJtaW4taGVpZ2h0IjoiMTAwJSJ9LEhkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5lbFJlZj1uLGkuX2FwcGx5U3R5bGVUb0VsZW1lbnQoVWQpLGl9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0oeWQpLFFkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiBvLl9sYXlvdXQ9InJvdyIsciYmKG8uX2xheW91dFdhdGNoZXI9ci5sYXlvdXQkLnN1YnNjcmliZShvLl9vbkxheW91dENoYW5nZS5iaW5kKG8pKSksb31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25NZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbk1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5hbGlnbnx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJhbGlnbiIsInN0YXJ0IHN0cmV0Y2giLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhWYWx1ZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkQ1NTKHQpKSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcodCx0aGlzLl9sYXlvdXQ/dGhpcy5fbGF5b3V0OiJyb3ciKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksTmQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKTt2YXIgbj10aGlzLl9xdWVyeUlucHV0KCJhbGlnbiIpfHwic3RhcnQgc3RyZXRjaCI7dGhpcy5fbXFBY3RpdmF0aW9uJiYobj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpLHRoaXMuX2FsbG93U3RyZXRjaGluZyhuLHRoaXMuX2xheW91dHx8InJvdyIpfSxlLnByb3RvdHlwZS5fYnVpbGRDU1M9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj10LnNwbGl0KCIgIikscj1uWzFdO3N3aXRjaChuWzBdKXtjYXNlImNlbnRlciI6ZVsianVzdGlmeS1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJzcGFjZS1hcm91bmQiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1hcm91bmQiO2JyZWFrO2Nhc2Uic3BhY2UtYmV0d2VlbiI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWJldHdlZW4iO2JyZWFrO2Nhc2Uic3BhY2UtZXZlbmx5IjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtZXZlbmx5IjticmVhaztjYXNlImVuZCI6Y2FzZSJmbGV4LWVuZCI6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtZW5kIjticmVhaztjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmRlZmF1bHQ6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtc3RhcnQifXN3aXRjaChyKXtjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LXN0YXJ0IjticmVhaztjYXNlImJhc2VsaW5lIjplWyJhbGlnbi1pdGVtcyJdPSJiYXNlbGluZSI7YnJlYWs7Y2FzZSJjZW50ZXIiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJjZW50ZXIiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6ZGVmYXVsdDplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0ic3RyZXRjaCJ9cmV0dXJuIEJkKGUse2Rpc3BsYXk6ImZsZXgiLCJmbGV4LWRpcmVjdGlvbiI6dGhpcy5fbGF5b3V0fHwicm93IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSl9LGUucHJvdG90eXBlLl9hbGxvd1N0cmV0Y2hpbmc9ZnVuY3Rpb24odCxlKXsic3RyZXRjaCI9PXQuc3BsaXQoIiAiKVsxXSYmdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh7ImJveC1zaXppbmciOiJib3JkZXItYm94IiwibWF4LXdpZHRoIjpEZChlKT9udWxsOiIxMDAlIiwibWF4LWhlaWdodCI6RGQoZSk/IjEwMCUiOm51bGx9KX0sZX0oeWQpLHFkPWZ1bmN0aW9uKCl7fSxHZD1mdW5jdGlvbigpe30sWWQ9ZnVuY3Rpb24oKXt9LFdkPSEhYygpJiZ7cGFzc2l2ZTohMH0sWmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcGxhdGZvcm09dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGouYTt2YXIgZT10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQodCk7aWYoZSlyZXR1cm4gZS5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO3ZhciBuPW5ldyBDLmEscj1mdW5jdGlvbihlKXsiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQiPT09ZS5hbmltYXRpb25OYW1lPyh0LmNsYXNzTGlzdC5hZGQoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiKSxuLm5leHQoe3RhcmdldDplLnRhcmdldCxpc0F1dG9maWxsZWQ6ITB9KSk6ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1lLmFuaW1hdGlvbk5hbWUmJih0LmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiKSxuLm5leHQoe3RhcmdldDplLnRhcmdldCxpc0F1dG9maWxsZWQ6ITF9KSl9O3JldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixyLFdkKSx0LmNsYXNzTGlzdC5hZGQoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpfSksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuc2V0KHQse3N1YmplY3Q6bix1bmxpc3RlbjpmdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLHIsV2QpfX0pLG4uYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5zdG9wTW9uaXRvcmluZyhuKX0pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKSh1KSxPYmplY3Qoby5YKShvLnkpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksS2Q9ZnVuY3Rpb24oKXt9LFhkPVsiYnV0dG9uIiwiY2hlY2tib3giLCJmaWxlIiwiaGlkZGVuIiwiaW1hZ2UiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzdWJtaXQiXSwkZD0wLEpkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEscyxsLHUpe3ZhciBjPXQuY2FsbCh0aGlzLGEsaSxvLHIpfHx0aGlzO3JldHVybiBjLl9lbGVtZW50UmVmPWUsYy5fcGxhdGZvcm09bixjLm5nQ29udHJvbD1yLGMuX2F1dG9maWxsTW9uaXRvcj1sLGMuX3VpZD0ibWF0LWlucHV0LSIrJGQrKyxjLl9pc1NlcnZlcj0hMSxjLmZvY3VzZWQ9ITEsYy5zdGF0ZUNoYW5nZXM9bmV3IEMuYSxjLmNvbnRyb2xUeXBlPSJtYXQtaW5wdXQiLGMuYXV0b2ZpbGxlZD0hMSxjLl9kaXNhYmxlZD0hMSxjLl9yZXF1aXJlZD0hMSxjLl90eXBlPSJ0ZXh0IixjLl9yZWFkb25seT0hMSxjLl9uZXZlckVtcHR5SW5wdXRUeXBlcz1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayJdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaCgpLmhhcyh0KX0pLGMuX2lucHV0VmFsdWVBY2Nlc3Nvcj1zfHxjLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYy5fcHJldmlvdXNOYXRpdmVWYWx1ZT1jLnZhbHVlLGMuaWQ9Yy5pZCxuLklPUyYmdS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQ7ZS52YWx1ZXx8ZS5zZWxlY3Rpb25TdGFydHx8ZS5zZWxlY3Rpb25FbmR8fChlLnNldFNlbGVjdGlvblJhbmdlKDEsMSksZS5zZXRTZWxlY3Rpb25SYW5nZSgwLDApKX0pfSksYy5faXNTZXJ2ZXI9IWMuX3BsYXRmb3JtLmlzQnJvd3NlcixjfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPUQodCksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2lkPXR8fHRoaXMuX3VpZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlcXVpcmVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWlyZWQ9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHlwZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9dHx8InRleHQiLHRoaXMuX3ZhbGlkYXRlVHlwZSgpLCF0aGlzLl9pc1RleHRhcmVhKCkmJmgoKS5oYXModGhpcy5fdHlwZSkmJih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZT10aGlzLl90eXBlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3QhPT10aGlzLnZhbHVlJiYodGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlYWRvbmx5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRvbmx5fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZG9ubHk9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYXV0b2ZpbGxNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHQuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfSxlLnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5fZGlydHlDaGVja05hdGl2ZVZhbHVlKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLl9mb2N1c0NoYW5nZWQ9ZnVuY3Rpb24odCl7dD09PXRoaXMuZm9jdXNlZHx8dGhpcy5yZWFkb25seXx8KHRoaXMuZm9jdXNlZD10LHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9LGUucHJvdG90eXBlLl9vbklucHV0PWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5fZGlydHlDaGVja05hdGl2ZVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZTt0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlIT09dCYmKHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGVUeXBlPWZ1bmN0aW9uKCl7aWYoWGQuaW5kZXhPZih0aGlzLl90eXBlKT4tMSl0aHJvdyBFcnJvcignSW5wdXQgdHlwZSAiJyt0aGlzLl90eXBlKyJcIiBpc24ndCBzdXBwb3J0ZWQgYnkgbWF0SW5wdXQuIil9LGUucHJvdG90eXBlLl9pc05ldmVyRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXMuaW5kZXhPZih0aGlzLl90eXBlKT4tMX0sZS5wcm90b3R5cGUuX2lzQmFkSW5wdXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIHQmJnQuYmFkSW5wdXR9LGUucHJvdG90eXBlLl9pc1RleHRhcmVhPWZ1bmN0aW9uKCl7cmV0dXJuInRleHRhcmVhIj09PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaG91bGRMYWJlbEZsb2F0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9jdXNlZHx8IXRoaXMuZW1wdHl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuc2V0RGVzY3JpYmVkQnlJZHM9ZnVuY3Rpb24odCl7dGhpcy5fYXJpYURlc2NyaWJlZGJ5PXQuam9pbigiICIpfSxlLnByb3RvdHlwZS5vbkNvbnRhaW5lckNsaWNrPWZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpfSxlfShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgcj10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZXJyb3JTdGF0ZT0hMSxyLnN0YXRlQ2hhbmdlcz1uZXcgQy5hLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUudXBkYXRlRXJyb3JTdGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZXJyb3JTdGF0ZSxlPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtlIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9LGV9KGZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9bix0aGlzLm5nQ29udHJvbD1yfSl9KCkpLHRtPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBlbSgpe2Zvcih2YXIgdCxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlW2UubGVuZ3RoLTFdJiYodD1lLnBvcCgpKSwxPT09ZS5sZW5ndGgmJk9iamVjdCh5LmEpKGVbMF0pJiYoZT1lWzBdKSwwPT09ZS5sZW5ndGg/ai5hOnQ/ZW0oZSkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh2b2lkIDAsZSl9KSk6bmV3IEUuYShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5tKHQsZSl9KX12YXIgbm09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3Iuc291cmNlcz1uLHIuY29tcGxldGVkPTAsci5oYXZlVmFsdWVzPTA7dmFyIGk9bi5sZW5ndGg7ci52YWx1ZXM9bmV3IEFycmF5KGkpO2Zvcih2YXIgbz0wO288aTtvKyspe3ZhciBhPW5bb10scz1PYmplY3Qodi5hKShyLGEsbnVsbCxvKTtzJiZyLmFkZChzKX1yZXR1cm4gcn1yZXR1cm4gZC5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMudmFsdWVzW25dPWUsaS5faGFzVmFsdWV8fChpLl9oYXNWYWx1ZT0hMCx0aGlzLmhhdmVWYWx1ZXMrKyl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb24sbj10aGlzLmhhdmVWYWx1ZXMscj10aGlzLnZhbHVlcyxpPXIubGVuZ3RoO3QuX2hhc1ZhbHVlPyh0aGlzLmNvbXBsZXRlZCsrLHRoaXMuY29tcGxldGVkPT09aSYmKG49PT1pJiZlLm5leHQociksZS5jb21wbGV0ZSgpKSk6ZS5jb21wbGV0ZSgpfSxlfShnLmEpLHJtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbnZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGVuZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByaXN0aW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGF0dXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVudG91Y2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdHVzQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbHVlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9LHQucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcih0LGUpfSx0LnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH0sdH0oKSxpbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShybSk7ZnVuY3Rpb24gb20odCl7cmV0dXJuIG51bGw9PXR8fDA9PT10Lmxlbmd0aH12YXIgYW09L14oPz0uezEsMjU0fSQpKD89LnsxLDY0fUApWy0hIyQlJicqKy8wLTk9P0EtWl5fYGEtent8fX5dKyhcLlstISMkJSYnKisvMC05PT9BLVpeX2BhLXp7fH1+XSspKkBbQS1aYS16MC05XShbQS1aYS16MC05LV17MCw2MX1bQS1aYS16MC05XSk/KFwuW0EtWmEtejAtOV0oW0EtWmEtejAtOS1dezAsNjF9W0EtWmEtejAtOV0pPykqJC8sc209ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lm1pbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYob20oZS52YWx1ZSl8fG9tKHQpKXJldHVybiBudWxsO3ZhciBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPHQ/e21pbjp7bWluOnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX0sdC5tYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG9tKGUudmFsdWUpfHxvbSh0KSlyZXR1cm4gbnVsbDt2YXIgbj1wYXJzZUZsb2F0KGUudmFsdWUpO3JldHVybiFpc05hTihuKSYmbj50P3ttYXg6e21heDp0LGFjdHVhbDplLnZhbHVlfX06bnVsbH19LHQucmVxdWlyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG9tKHQudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH0sdC5yZXF1aXJlZFRydWU9ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10LnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX0sdC5lbWFpbD1mdW5jdGlvbih0KXtyZXR1cm4gb20odC52YWx1ZSk/bnVsbDphbS50ZXN0KHQudmFsdWUpP251bGw6e2VtYWlsOiEwfX0sdC5taW5MZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG9tKGUudmFsdWUpKXJldHVybiBudWxsO3ZhciBuPWUudmFsdWU/ZS52YWx1ZS5sZW5ndGg6MDtyZXR1cm4gbjx0P3ttaW5sZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOm59fTpudWxsfX0sdC5tYXhMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUudmFsdWU/ZS52YWx1ZS5sZW5ndGg6MDtyZXR1cm4gbj50P3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOnQsYWN0dWFsTGVuZ3RoOm59fTpudWxsfX0sdC5wYXR0ZXJuPWZ1bmN0aW9uKGUpe3JldHVybiBlPygic3RyaW5nIj09dHlwZW9mIGU/KHI9IiIsIl4iIT09ZS5jaGFyQXQoMCkmJihyKz0iXiIpLHIrPWUsIiQiIT09ZS5jaGFyQXQoZS5sZW5ndGgtMSkmJihyKz0iJCIpLG49bmV3IFJlZ0V4cChyKSk6KHI9ZS50b1N0cmluZygpLG49ZSksZnVuY3Rpb24odCl7aWYob20odC52YWx1ZSkpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZTtyZXR1cm4gbi50ZXN0KGUpP251bGw6e3BhdHRlcm46e3JlcXVpcmVkUGF0dGVybjpyLGFjdHVhbFZhbHVlOmV9fX0pOnQubnVsbFZhbGlkYXRvcjt2YXIgbixyfSx0Lm51bGxWYWxpZGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHQuY29tcG9zZT1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgZT10LmZpbHRlcihsbSk7cmV0dXJuIDA9PWUubGVuZ3RoP251bGw6ZnVuY3Rpb24odCl7cmV0dXJuIGNtKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9KHQpKX19LHQuY29tcG9zZUFzeW5jPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBlPXQuZmlsdGVyKGxtKTtyZXR1cm4gMD09ZS5sZW5ndGg/bnVsbDpmdW5jdGlvbih0KXtyZXR1cm4gZW0oZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0odCkubWFwKHVtKSkucGlwZShPYmplY3QoUy5hKShjbSkpfX0sdH0oKTtmdW5jdGlvbiBsbSh0KXtyZXR1cm4gbnVsbCE9dH1mdW5jdGlvbiB1bSh0KXt2YXIgZT1PYmplY3Qoby5WYSkodCk/T2JqZWN0KE0uYSkodCk6dDtpZighT2JqZWN0KG8uVWEpKGUpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFsaWRhdG9yIHRvIHJldHVybiBQcm9taXNlIG9yIE9ic2VydmFibGUuIik7cmV0dXJuIGV9ZnVuY3Rpb24gY20odCl7dmFyIGU9dC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9ZT9PYmplY3QoZC5hKSh7fSx0LGUpOnR9LHt9KTtyZXR1cm4gMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aD9udWxsOmV9dmFyIGZtPW5ldyBvLnAoIk5nVmFsdWVBY2Nlc3NvciIpLGhtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe319cmV0dXJuIHQucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJjaGVja2VkIix0KX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLm9uQ2hhbmdlPXR9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHR9KCkscG09bmV3IG8ucCgiQ29tcG9zaXRpb25FdmVudE1vZGUiKSxkbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByO3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1uLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe30sdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0ocj1PYmplY3QoaGUudCkoKT9PYmplY3QoaGUudCkoKS5nZXRVc2VyQWdlbnQoKToiIiwhL2FuZHJvaWQgKFxkKykvLnRlc3Qoci50b0xvd2VyQ2FzZSgpKSkpfXJldHVybiB0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLG51bGw9PXQ/IiI6dCl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5vbkNoYW5nZT10fSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0LnByb3RvdHlwZS5faGFuZGxlSW5wdXQ9ZnVuY3Rpb24odCl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UodCl9LHQucHJvdG90eXBlLl9jb21wb3NpdGlvblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY29tcG9zaW5nPSEwfSx0LnByb3RvdHlwZS5fY29tcG9zaXRpb25FbmQ9ZnVuY3Rpb24odCl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZSh0KX0sdH0oKTtmdW5jdGlvbiBtbSh0KXtyZXR1cm4gdC52YWxpZGF0ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC52YWxpZGF0ZShlKX06dH1mdW5jdGlvbiB5bSh0KXtyZXR1cm4gdC52YWxpZGF0ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC52YWxpZGF0ZShlKX06dH12YXIgZ209ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixudWxsPT10PyIiOnQpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dCgiIj09ZT9udWxsOnBhcnNlRmxvYXQoZSkpfX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdH0oKTtmdW5jdGlvbiB2bSgpe3Rocm93IG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpfXZhciBibT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9wYXJlbnQ9bnVsbCxlLm5hbWU9bnVsbCxlLnZhbHVlQWNjZXNzb3I9bnVsbCxlLl9yYXdWYWxpZGF0b3JzPVtdLGUuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSxlfXJldHVybiBPYmplY3QoZC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZtKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB2bSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHJtKSxfbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hY2Nlc3NvcnM9W119cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFt0LGVdKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZT49MDstLWUpaWYodGhpcy5fYWNjZXNzb3JzW2VdWzFdPT09dClyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGUsMSl9LHQucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuX2lzU2FtZUdyb3VwKG4sdCkmJm5bMV0hPT10JiZuWzFdLmZpcmVVbmNoZWNrKHQudmFsdWUpfSl9LHQucHJvdG90eXBlLl9pc1NhbWVHcm91cD1mdW5jdGlvbih0LGUpe3JldHVybiEhdFswXS5jb250cm9sJiZ0WzBdLl9wYXJlbnQ9PT1lLl9jb250cm9sLl9wYXJlbnQmJnRbMV0ubmFtZT09PWUubmFtZX0sdH0oKSx3bT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fcmVnaXN0cnk9bix0aGlzLl9pbmplY3Rvcj1yLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oKXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChibSksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfSx0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuX3N0YXRlPXQ9PT10aGlzLnZhbHVlLHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fZm49dCx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKCl7dChlLnZhbHVlKSxlLl9yZWdpc3RyeS5zZWxlY3QoZSl9fSx0LnByb3RvdHlwZS5maXJlVW5jaGVjaz1mdW5jdGlvbih0KXt0aGlzLndyaXRlVmFsdWUodCl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHQucHJvdG90eXBlLl9jaGVja05hbWU9ZnVuY3Rpb24oKXt0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiZ0aGlzLm5hbWUhPT10aGlzLmZvcm1Db250cm9sTmFtZSYmdGhpcy5fdGhyb3dOYW1lRXJyb3IoKSwhdGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9LHQucHJvdG90eXBlLl90aHJvd05hbWVFcnJvcj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignXG4gICAgICBJZiB5b3UgZGVmaW5lIGJvdGggYSBuYW1lIGFuZCBhIGZvcm1Db250cm9sTmFtZSBhdHRyaWJ1dGUgb24geW91ciByYWRpbyBidXR0b24sIHRoZWlyIHZhbHVlc1xuICAgICAgbXVzdCBtYXRjaC4gRXg6IDxpbnB1dCB0eXBlPSJyYWRpbyIgZm9ybUNvbnRyb2xOYW1lPSJmb29kIiBuYW1lPSJmb29kIj5cbiAgICAnKX0sdH0oKSx4bT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKHQpe30sdGhpcy5vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9fXJldHVybiB0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLHBhcnNlRmxvYXQodCkpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dCgiIj09ZT9udWxsOnBhcnNlRmxvYXQoZSkpfX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdH0oKSxDbT0nXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaXJzdE5hbWUiPlxuICAgIDwvZGl2PlxuXG4gICAgSW4geW91ciBjbGFzczpcblxuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgIGZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKClcbiAgICB9KTsnLEVtPSdcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InBlcnNvbiI+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBwZXJzb246IG5ldyBGb3JtR3JvdXAoeyBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpIH0pXG4gICAgfSk7JyxPbT0nXG4gICAgPGZvcm0+XG4gICAgICAgPGRpdiBuZ01vZGVsR3JvdXA9InBlcnNvbiI+XG4gICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24ubmFtZSIgbmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+JyxTbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY29udHJvbFBhcmVudEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZm9ybUNvbnRyb2xOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3UnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICIrQ20pfSx0Lm5nTW9kZWxHcm91cEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignZm9ybUNvbnRyb2xOYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGggYW4gbmdNb2RlbEdyb3VwIHBhcmVudC4gSXQgaXMgb25seSBjb21wYXRpYmxlIHdpdGggcGFyZW50c1xuICAgICAgIHRoYXQgYWxzbyBoYXZlIGEgImZvcm0iIHByZWZpeDogZm9ybUdyb3VwTmFtZSwgZm9ybUFycmF5TmFtZSwgb3IgZm9ybUdyb3VwLlxuXG4gICAgICAgT3B0aW9uIDE6ICBVcGRhdGUgdGhlIHBhcmVudCB0byBiZSBmb3JtR3JvdXBOYW1lIChyZWFjdGl2ZSBmb3JtIHN0cmF0ZWd5KVxuXG4gICAgICAgICcrRW0rIlxuXG4gICAgICAgIE9wdGlvbiAyOiBVc2UgbmdNb2RlbCBpbnN0ZWFkIG9mIGZvcm1Db250cm9sTmFtZSAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KVxuXG4gICAgICAgICIrT20pfSx0Lm1pc3NpbmdGb3JtRXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJmb3JtR3JvdXAgZXhwZWN0cyBhIEZvcm1Hcm91cCBpbnN0YW5jZS4gUGxlYXNlIHBhc3Mgb25lIGluLlxuXG4gICAgICAgRXhhbXBsZTpcblxuICAgICAgICIrQ20pfSx0Lmdyb3VwUGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJmb3JtR3JvdXBOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3UnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgIGRpcmVjdGl2ZSBhbmQgcGFzcyBpdCBhbiBleGlzdGluZyBGb3JtR3JvdXAgaW5zdGFuY2UgKHlvdSBjYW4gY3JlYXRlIG9uZSBpbiB5b3VyIGNsYXNzKS5cblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgIitFbSl9LHQuYXJyYXlQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ2Zvcm1BcnJheU5hbWUgbXVzdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS4gIFlvdVwnbGwgd2FudCB0byBhZGQgYSBmb3JtR3JvdXBcbiAgICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICBcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT0iY2l0aWVzIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9ImxldCBjaXR5IG9mIGNpdHlBcnJheS5jb250cm9sczsgaW5kZXggYXMgaSI+XG4gICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbE5hbWVdPSJpIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLmNpdHlBcnJheSA9IG5ldyBGb3JtQXJyYXkoW25ldyBGb3JtQ29udHJvbChcJ1NGXCcpXSk7XG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBjaXRpZXM6IHRoaXMuY2l0eUFycmF5XG4gICAgfSk7Jyl9LHQuZGlzYWJsZWRBdHRyV2FybmluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpdGggYSByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZS4gSWYgeW91IHNldCBkaXNhYmxlZCB0byB0cnVlXG4gICAgICB3aGVuIHlvdSBzZXQgdXAgdGhpcyBjb250cm9sIGluIHlvdXIgY29tcG9uZW50IGNsYXNzLCB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHdpbGwgYWN0dWFsbHkgYmUgc2V0IGluIHRoZSBET00gZm9yXG4gICAgICB5b3UuIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIGFwcHJvYWNoIHRvIGF2b2lkICdjaGFuZ2VkIGFmdGVyIGNoZWNrZWQnIGVycm9ycy5cbiAgICAgICBcbiAgICAgIEV4YW1wbGU6IFxuICAgICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBmaXJzdDogbmV3IEZvcm1Db250cm9sKHt2YWx1ZTogJ05hbmN5JywgZGlzYWJsZWQ6IHRydWV9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgbGFzdDogbmV3IEZvcm1Db250cm9sKCdEcmV3JywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICAgIH0pO1xuICAgICIpfSx0Lm5nTW9kZWxXYXJuaW5nPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2FybigiXG4gICAgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgbmdNb2RlbCBvbiB0aGUgc2FtZSBmb3JtIGZpZWxkIGFzICIrdCsiLiBcbiAgICBTdXBwb3J0IGZvciB1c2luZyB0aGUgbmdNb2RlbCBpbnB1dCBwcm9wZXJ0eSBhbmQgbmdNb2RlbENoYW5nZSBldmVudCB3aXRoIFxuICAgIHJlYWN0aXZlIGZvcm0gZGlyZWN0aXZlcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIEFuZ3VsYXIgdjYgYW5kIHdpbGwgYmUgcmVtb3ZlZCBcbiAgICBpbiBBbmd1bGFyIHY3LlxuICAgIFxuICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIHNlZSBvdXIgQVBJIGRvY3MgaGVyZTpcbiAgICBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zLyIrKCJmb3JtQ29udHJvbCI9PT10PyJGb3JtQ29udHJvbERpcmVjdGl2ZSI6IkZvcm1Db250cm9sTmFtZSIpKyIjdXNlLXdpdGgtbmdtb2RlbFxuICAgICIpfSx0fSgpO2Z1bmN0aW9uIGttKHQsZSl7cmV0dXJuIE9iamVjdChkLmQpKGUucGF0aCxbdF0pfWZ1bmN0aW9uIFRtKHQsZSl7dHx8SW0oZSwiQ2Fubm90IGZpbmQgY29udHJvbCB3aXRoIiksZS52YWx1ZUFjY2Vzc29yfHxJbShlLCJObyB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj1zbS5jb21wb3NlKFt0LnZhbGlkYXRvcixlLnZhbGlkYXRvcl0pLHQuYXN5bmNWYWxpZGF0b3I9c20uY29tcG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKSxlLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZSh0LnZhbHVlKSxmdW5jdGlvbih0LGUpe2UudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKG4pe3QuX3BlbmRpbmdWYWx1ZT1uLHQuX3BlbmRpbmdDaGFuZ2U9ITAsdC5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09dC51cGRhdGVPbiYmUG0odCxlKX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7dC5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKHQsbil7ZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodCksbiYmZS52aWV3VG9Nb2RlbFVwZGF0ZSh0KX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKGZ1bmN0aW9uKCl7dC5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09dC51cGRhdGVPbiYmdC5fcGVuZGluZ0NoYW5nZSYmUG0odCxlKSwic3VibWl0IiE9PXQudXBkYXRlT24mJnQubWFya0FzVG91Y2hlZCgpfSl9KHQsZSksZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUmJnQucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGZ1bmN0aW9uKHQpe2UudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKHQpfSksZS5fcmF3VmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSl9KSxlLl9yYXdBc3luY1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmUucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmdW5jdGlvbigpe3JldHVybiB0LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfSl9ZnVuY3Rpb24gUG0odCxlKXt0Ll9wZW5kaW5nRGlydHkmJnQubWFya0FzRGlydHkoKSx0LnNldFZhbHVlKHQuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksZS52aWV3VG9Nb2RlbFVwZGF0ZSh0Ll9wZW5kaW5nVmFsdWUpLHQuX3BlbmRpbmdDaGFuZ2U9ITF9ZnVuY3Rpb24gQW0odCxlKXtudWxsPT10JiZJbShlLCJDYW5ub3QgZmluZCBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj1zbS5jb21wb3NlKFt0LnZhbGlkYXRvcixlLnZhbGlkYXRvcl0pLHQuYXN5bmNWYWxpZGF0b3I9c20uY29tcG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKX1mdW5jdGlvbiBqbSh0KXtyZXR1cm4gSW0odCwiVGhlcmUgaXMgbm8gRm9ybUNvbnRyb2wgaW5zdGFuY2UgYXR0YWNoZWQgdG8gZm9ybSBjb250cm9sIGVsZW1lbnQgd2l0aCIpfWZ1bmN0aW9uIEltKHQsZSl7dmFyIG47dGhyb3cgbj10LnBhdGgubGVuZ3RoPjE/InBhdGg6ICciK3QucGF0aC5qb2luKCIgLT4gIikrIiciOnQucGF0aFswXT8ibmFtZTogJyIrdC5wYXRoKyInIjoidW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUiLG5ldyBFcnJvcihlKyIgIituKX1mdW5jdGlvbiBNbSh0KXtyZXR1cm4gbnVsbCE9dD9zbS5jb21wb3NlKHQubWFwKG1tKSk6bnVsbH1mdW5jdGlvbiBObSh0KXtyZXR1cm4gbnVsbCE9dD9zbS5jb21wb3NlQXN5bmModC5tYXAoeW0pKTpudWxsfXZhciBSbT1baG0seG0sZ20sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSx0aGlzLl9jb21wYXJlV2l0aD1vLldhfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBhcmVXaXRoIix7c2V0OmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiY29tcGFyZVdpdGggbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSk7dGhpcy5fY29tcGFyZVdpdGg9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMudmFsdWU9dDt2YXIgZT10aGlzLl9nZXRPcHRpb25JZCh0KTtudWxsPT1lJiZ0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkSW5kZXgiLC0xKTt2YXIgbj1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10PyIiK2U6KGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKGU9Ik9iamVjdCIpLCh0KyI6ICIrZSkuc2xpY2UoMCw1MCkpfShlLHQpO3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLG4pfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5vbkNoYW5nZT1mdW5jdGlvbihuKXtlLnZhbHVlPWUuX2dldE9wdGlvblZhbHVlKG4pLHQoZS52YWx1ZSl9fSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJPcHRpb249ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9LHQucHJvdG90eXBlLl9nZXRPcHRpb25JZD1mdW5jdGlvbih0KXt0cnl7Zm9yKHZhciBlPU9iamVjdChkLmUpKEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpLG49ZS5uZXh0KCk7IW4uZG9uZTtuPWUubmV4dCgpKXt2YXIgcj1uLnZhbHVlO2lmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQociksdCkpcmV0dXJuIHJ9fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e24mJiFuLmRvbmUmJihvPWUucmV0dXJuKSYmby5jYWxsKGUpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgaSxvfSx0LnByb3RvdHlwZS5fZ2V0T3B0aW9uVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIjoiKVswXX0odCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZSk/dGhpcy5fb3B0aW9uTWFwLmdldChlKTp0fSx0fSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe30sdGhpcy5fY29tcGFyZVdpdGg9by5XYX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wYXJlV2l0aCIse3NldDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkpO3RoaXMuX2NvbXBhcmVXaXRoPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXM7aWYodGhpcy52YWx1ZT10LEFycmF5LmlzQXJyYXkodCkpe3ZhciByPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9nZXRPcHRpb25JZCh0KX0pO2U9ZnVuY3Rpb24odCxlKXt0Ll9zZXRTZWxlY3RlZChyLmluZGV4T2YoZS50b1N0cmluZygpKT4tMSl9fWVsc2UgZT1mdW5jdGlvbih0LGUpe3QuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goZSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKG4pe3ZhciByPVtdO2lmKG4uaGFzT3duUHJvcGVydHkoInNlbGVjdGVkT3B0aW9ucyIpKWZvcih2YXIgaT1uLnNlbGVjdGVkT3B0aW9ucyxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPWkuaXRlbShvKSxzPWUuX2dldE9wdGlvblZhbHVlKGEudmFsdWUpO3IucHVzaChzKX1lbHNlIGZvcihpPW4ub3B0aW9ucyxvPTA7bzxpLmxlbmd0aDtvKyspKGE9aS5pdGVtKG8pKS5zZWxlY3RlZCYmKHM9ZS5fZ2V0T3B0aW9uVmFsdWUoYS52YWx1ZSksci5wdXNoKHMpKTtlLnZhbHVlPXIsdChyKX19LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHQucHJvdG90eXBlLl9yZWdpc3Rlck9wdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoZSx0KSxlfSx0LnByb3RvdHlwZS5fZ2V0T3B0aW9uSWQ9ZnVuY3Rpb24odCl7dHJ5e2Zvcih2YXIgZT1PYmplY3QoZC5lKShBcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpKSxuPWUubmV4dCgpOyFuLmRvbmU7bj1lLm5leHQoKSl7dmFyIHI9bi52YWx1ZTtpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KHIpLl92YWx1ZSx0KSlyZXR1cm4gcn19Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7biYmIW4uZG9uZSYmKG89ZS5yZXR1cm4pJiZvLmNhbGwoZSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBudWxsO3ZhciBpLG99LHQucHJvdG90eXBlLl9nZXRPcHRpb25WYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiOiIpWzBdfSh0KTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhlKT90aGlzLl9vcHRpb25NYXAuZ2V0KGUpLl92YWx1ZTp0fSx0fSgpLHdtXTtmdW5jdGlvbiBEbSh0LGUpe3QuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jb250cm9sOyJzdWJtaXQiPT09ZS51cGRhdGVPbiYmZS5fcGVuZGluZ0NoYW5nZSYmKHQudmlld1RvTW9kZWxVcGRhdGUoZS5fcGVuZGluZ1ZhbHVlKSxlLl9wZW5kaW5nQ2hhbmdlPSExKX0pfWZ1bmN0aW9uIEZtKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIExtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5mb3JtRGlyZWN0aXZlLmFkZEZvcm1Hcm91cCh0aGlzKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29udHJvbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUdyb3VwKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBrbSh0aGlzLm5hbWUsdGhpcy5fcGFyZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWxpZGF0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTW0odGhpcy5fdmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBObSh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5cGU9ZnVuY3Rpb24oKXt9LGV9KGltKSxWbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fY2Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzVW50b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnVudG91Y2hlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nQ2xhc3NUb3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnRvdWNoZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzUHJpc3RpbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wucHJpc3RpbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wuZGlydHl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzVmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wudmFsaWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzSW52YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fY2QuY29udHJvbCYmdGhpcy5fY2QuY29udHJvbC5pbnZhbGlkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzc1BlbmRpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wucGVuZGluZ30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpKTtmdW5jdGlvbiBCbSh0KXt2YXIgZT1VbSh0KT90LnZhbGlkYXRvcnM6dDtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9NbShlKTplfHxudWxsfWZ1bmN0aW9uIHptKHQsZSl7dmFyIG49VW0oZSk/ZS5hc3luY1ZhbGlkYXRvcnM6dDtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9ObShuKTpufHxudWxsfWZ1bmN0aW9uIFVtKHQpe3JldHVybiBudWxsIT10JiYhQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0fXZhciBIbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZhbGlkYXRvcj10LHRoaXMuYXN5bmNWYWxpZGF0b3I9ZSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9ZnVuY3Rpb24oKXt9LHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlZBTElEIj09PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW52YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJJTlZBTElEIj09PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGVuZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiJQRU5ESU5HIj09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJESVNBQkxFRCI9PT10aGlzLnN0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRElTQUJMRUQiIT09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLnByaXN0aW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidW50b3VjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudG91Y2hlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVwZGF0ZU9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldFZhbGlkYXRvcnM9ZnVuY3Rpb24odCl7dGhpcy52YWxpZGF0b3I9Qm0odCl9LHQucHJvdG90eXBlLnNldEFzeW5jVmFsaWRhdG9ycz1mdW5jdGlvbih0KXt0aGlzLmFzeW5jVmFsaWRhdG9yPXptKHQpfSx0LnByb3RvdHlwZS5jbGVhclZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt0aGlzLnZhbGlkYXRvcj1udWxsfSx0LnByb3RvdHlwZS5jbGVhckFzeW5jVmFsaWRhdG9ycz1mdW5jdGlvbigpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH0sdC5wcm90b3R5cGUubWFya0FzVG91Y2hlZD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5tYXJrQXNVbnRvdWNoZWQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCl7dC5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9LHQucHJvdG90eXBlLm1hcmtBc0RpcnR5PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX0sdC5wcm90b3R5cGUubWFya0FzUHJpc3RpbmU9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbih0KXt0Lm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX0sdC5wcm90b3R5cGUubWFya0FzUGVuZGluZz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5zdGF0dXM9IlBFTkRJTkciLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5zdGF0dXM9IkRJU0FCTEVEIix0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtlLmRpc2FibGUoT2JqZWN0KGQuYSkoe30sdCx7b25seVNlbGY6ITB9KSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHQpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCghMCl9KX0sdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnN0YXR1cz0iVkFMSUQiLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtlLmVuYWJsZShPYmplY3QoZC5hKSh7fSx0LHtvbmx5U2VsZjohMH0pKX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHQpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCghMSl9KX0sdC5wcm90b3R5cGUuX3VwZGF0ZUFuY2VzdG9ycz1mdW5jdGlvbih0KXt0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCksdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSgpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCgpKX0sdC5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQpe3RoaXMuX3BhcmVudD10fSx0LnByb3RvdHlwZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCJWQUxJRCIhPT10aGlzLnN0YXR1cyYmIlBFTkRJTkciIT09dGhpcy5zdGF0dXN8fHRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKHQuZW1pdEV2ZW50KSksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KX0sdC5wcm90b3R5cGUuX3VwZGF0ZVRyZWVWYWxpZGl0eT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17ZW1pdEV2ZW50OiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUpe3JldHVybiBlLl91cGRhdGVUcmVlVmFsaWRpdHkodCl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfSx0LnByb3RvdHlwZS5fc2V0SW5pdGlhbFN0YXR1cz1mdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8iRElTQUJMRUQiOiJWQUxJRCJ9LHQucHJvdG90eXBlLl9ydW5WYWxpZGF0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH0sdC5wcm90b3R5cGUuX3J1bkFzeW5jVmFsaWRhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9IlBFTkRJTkciO3ZhciBuPXVtKHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbj1uLnN1YnNjcmliZShmdW5jdGlvbihuKXtyZXR1cm4gZS5zZXRFcnJvcnMobix7ZW1pdEV2ZW50OnR9KX0pfX0sdC5wcm90b3R5cGUuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uJiZ0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUuc2V0RXJyb3JzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuZXJyb3JzPXQsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1lLmVtaXRFdmVudCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsPT1lP251bGw6KGUgaW5zdGFuY2VvZiBBcnJheXx8KGU9ZS5zcGxpdCgiLiIpKSxlIGluc3RhbmNlb2YgQXJyYXkmJjA9PT1lLmxlbmd0aD9udWxsOmUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxbT90LmNvbnRyb2xzLmhhc093blByb3BlcnR5KGUpP3QuY29udHJvbHNbZV06bnVsbDp0IGluc3RhbmNlb2YgR20mJnQuYXQoZSl8fG51bGx9LHQpKX0odGhpcyx0KX0sdC5wcm90b3R5cGUuZ2V0RXJyb3I9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3RoaXMuZ2V0KGUpOnRoaXM7cmV0dXJuIG4mJm4uZXJyb3JzP24uZXJyb3JzW3RdOm51bGx9LHQucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzO3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzPWZ1bmN0aW9uKHQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLHQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnModCl9LHQucHJvdG90eXBlLl9pbml0T2JzZXJ2YWJsZXM9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgby5uLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgby5ufSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8iRElTQUJMRUQiOnRoaXMuZXJyb3JzPyJJTlZBTElEIjp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoIlBFTkRJTkciKT8iUEVORElORyI6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKCJJTlZBTElEIik/IklOVkFMSUQiOiJWQUxJRCJ9LHQucHJvdG90eXBlLl9hbnlDb250cm9sc0hhdmVTdGF0dXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PXR9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzRGlydHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlydHl9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzVG91Y2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhmdW5jdGlvbih0KXtyZXR1cm4gdC50b3VjaGVkfSl9LHQucHJvdG90eXBlLl91cGRhdGVQcmlzdGluZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9LHQucHJvdG90eXBlLl91cGRhdGVUb3VjaGVkPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5faXNCb3hlZFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJjI9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJiJ2YWx1ZSJpbiB0JiYiZGlzYWJsZWQiaW4gdH0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT10fSx0LnByb3RvdHlwZS5fc2V0VXBkYXRlU3RyYXRlZ3k9ZnVuY3Rpb24odCl7VW0odCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX0sdH0oKSxRbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgaT10LmNhbGwodGhpcyxCbShuKSx6bShyLG4pKXx8dGhpcztyZXR1cm4gaS5fb25DaGFuZ2U9W10saS5fYXBwbHlGb3JtU3RhdGUoZSksaS5fc2V0VXBkYXRlU3RyYXRlZ3kobiksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSxpLl9pbml0T2JzZXJ2YWJsZXMoKSxpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09ZS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQobi52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucGF0Y2hWYWx1ZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnNldFZhbHVlKHQsZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMubWFya0FzUHJpc3RpbmUoZSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoZSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGUpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX2FueUNvbnRyb2xzPWZ1bmN0aW9uKHQpe3JldHVybiExfSxlLnByb3RvdHlwZS5fYWxsQ29udHJvbHNEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9LGUucHJvdG90eXBlLl9jbGVhckNoYW5nZUZucz1mdW5jdGlvbigpe3RoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKCl7fX0sZS5wcm90b3R5cGUucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaCh0KX0sZS5wcm90b3R5cGUuX2ZvckVhY2hDaGlsZD1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLl9zeW5jUGVuZGluZ0NvbnRyb2xzPWZ1bmN0aW9uKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX0sZS5wcm90b3R5cGUuX2FwcGx5Rm9ybVN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQm94ZWRWYWx1ZSh0KT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fSxlfShIbSkscW09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsQm0obiksem0ocixuKSl8fHRoaXM7cmV0dXJuIGkuY29udHJvbHM9ZSxpLl9pbml0T2JzZXJ2YWJsZXMoKSxpLl9zZXRVcGRhdGVTdHJhdGVneShuKSxpLl9zZXRVcENvbnRyb2xzKCksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSxpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLnJlZ2lzdGVyQ29udHJvbD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2xzW3RdP3RoaXMuY29udHJvbHNbdF06KHRoaXMuY29udHJvbHNbdF09ZSxlLnNldFBhcmVudCh0aGlzKSxlLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGUpfSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5zZXRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2NoZWNrQWxsVmFsdWVzUHJlc2VudCh0KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe24uX3Rocm93SWZDb250cm9sTWlzc2luZyhyKSxuLmNvbnRyb2xzW3JdLnNldFZhbHVlKHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfSxlLnByb3RvdHlwZS5wYXRjaFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT17fSksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtuLmNvbnRyb2xzW3JdJiZuLmNvbnRyb2xzW3JdLnBhdGNoVmFsdWUodFtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9e30pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24obixyKXtuLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSl9LGUucHJvdG90eXBlLmdldFJhd1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtuXT1lIGluc3RhbmNlb2YgUW0/ZS52YWx1ZTplLmdldFJhd1ZhbHVlKCksdH0pfSxlLnByb3RvdHlwZS5fc3luY1BlbmRpbmdDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLGZ1bmN0aW9uKHQsZSl7cmV0dXJuISFlLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fHR9KTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9LGUucHJvdG90eXBlLl90aHJvd0lmQ29udHJvbE1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIU9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBncm91cCB5ZXQuICBJZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICAgICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5leHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gICAgICAiKTtpZighdGhpcy5jb250cm9sc1t0XSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZvcm0gY29udHJvbCB3aXRoIG5hbWU6ICIrdCsiLiIpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gdChlLmNvbnRyb2xzW25dLG4pfSl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2xzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7ZS5zZXRQYXJlbnQodCksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodC5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9LGUucHJvdG90eXBlLl9hbnlDb250cm9scz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ITE7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihyLGkpe249bnx8ZS5jb250YWlucyhpKSYmdChyKX0pLG59LGUucHJvdG90eXBlLl9yZWR1Y2VWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4obi5lbmFibGVkfHx0LmRpc2FibGVkKSYmKGVbcl09bi52YWx1ZSksZX0pfSxlLnByb3RvdHlwZS5fcmVkdWNlQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10O3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCxyKXtuPWUobix0LHIpfSksbn0sZS5wcm90b3R5cGUuX2FsbENvbnRyb2xzRGlzYWJsZWQ9ZnVuY3Rpb24oKXt0cnl7Zm9yKHZhciB0PU9iamVjdChkLmUpKE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKSxlPXQubmV4dCgpOyFlLmRvbmU7ZT10Lm5leHQoKSlpZih0aGlzLmNvbnRyb2xzW2UudmFsdWVdLmVuYWJsZWQpcmV0dXJuITF9Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZSYmIWUuZG9uZSYmKHI9dC5yZXR1cm4pJiZyLmNhbGwodCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZDt2YXIgbixyfSxlLnByb3RvdHlwZS5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKCJNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAnIituKyInLiIpfSl9LGV9KEhtKSxHbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxCbShuKSx6bShyLG4pKXx8dGhpcztyZXR1cm4gaS5jb250cm9scz1lLGkuX2luaXRPYnNlcnZhYmxlcygpLGkuX3NldFVwZGF0ZVN0cmF0ZWd5KG4pLGkuX3NldFVwQ29udHJvbHMoKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pLGl9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF19LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9scy5wdXNoKHQpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbCh0KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9scy5zcGxpY2UodCwwLGUpLHRoaXMuX3JlZ2lzdGVyQ29udHJvbChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0sZS5wcm90b3R5cGUucmVtb3ZlQXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSxlLnByb3RvdHlwZS5zZXRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDEpLGUmJih0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9scy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7bi5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nKHIpLG4uYXQocikuc2V0VmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnBhdGNoVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0LmZvckVhY2goZnVuY3Rpb24odCxyKXtuLmF0KHIpJiZuLmF0KHIpLnBhdGNoVmFsdWUodCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24obixyKXtuLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSl9LGUucHJvdG90eXBlLmdldFJhd1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUW0/dC52YWx1ZTp0LmdldFJhd1ZhbHVlKCl9KX0sZS5wcm90b3R5cGUuX3N5bmNQZW5kaW5nQ29udHJvbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRyb2xzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiEhZS5fc3luY1BlbmRpbmdDb250cm9scygpfHx0fSwhMSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fSxlLnByb3RvdHlwZS5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmNvbnRyb2xzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgICBUaGVyZSBhcmUgbm8gZm9ybSBjb250cm9scyByZWdpc3RlcmVkIHdpdGggdGhpcyBhcnJheSB5ZXQuICBJZiB5b3UncmUgdXNpbmcgbmdNb2RlbCxcbiAgICAgICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5leHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gICAgICAiKTtpZighdGhpcy5hdCh0KSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZvcm0gY29udHJvbCBhdCBpbmRleCAiK3QpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuY29udHJvbHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3QoZSxuKX0pfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudmFsdWU9dGhpcy5jb250cm9scy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZHx8dC5kaXNhYmxlZH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pfSxlLnByb3RvdHlwZS5fYW55Q29udHJvbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udHJvbHMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5lbmFibGVkJiZ0KGUpfSl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2xzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3JlZ2lzdGVyQ29udHJvbChlKX0pfSxlLnByb3RvdHlwZS5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKCJNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgYXQgaW5kZXg6ICIrbisiLiIpfSl9LGUucHJvdG90eXBlLl9hbGxDb250cm9sc0Rpc2FibGVkPWZ1bmN0aW9uKCl7dHJ5e2Zvcih2YXIgdD1PYmplY3QoZC5lKSh0aGlzLmNvbnRyb2xzKSxlPXQubmV4dCgpOyFlLmRvbmU7ZT10Lm5leHQoKSlpZihlLnZhbHVlLmVuYWJsZWQpcmV0dXJuITF9Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZSYmIWUuZG9uZSYmKHI9dC5yZXR1cm4pJiZyLmNhbGwodCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkO3ZhciBuLHJ9LGUucHJvdG90eXBlLl9yZWdpc3RlckNvbnRyb2w9ZnVuY3Rpb24odCl7dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0sZX0oSG0pLFltPVByb21pc2UucmVzb2x2ZShudWxsKSxXbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnN1Ym1pdHRlZD0hMSxyLl9kaXJlY3RpdmVzPVtdLHIubmdTdWJtaXQ9bmV3IG8ubixyLmZvcm09bmV3IHFtKHt9LE1tKGUpLE5tKG4pKSxyfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9ybURpcmVjdGl2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29udHJvbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9scyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1ltLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7dC5jb250cm9sPW4ucmVnaXN0ZXJDb250cm9sKHQubmFtZSx0LmNvbnRyb2wpLFRtKHQuY29udHJvbCx0KSx0LmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5fZGlyZWN0aXZlcy5wdXNoKHQpfSl9LGUucHJvdG90eXBlLmdldENvbnRyb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1ltLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7biYmbi5yZW1vdmVDb250cm9sKHQubmFtZSksRm0oZS5fZGlyZWN0aXZlcyx0KX0pfSxlLnByb3RvdHlwZS5hZGRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztZbS50aGVuKGZ1bmN0aW9uKCl7dmFyIG49ZS5fZmluZENvbnRhaW5lcih0LnBhdGgpLHI9bmV3IHFtKHt9KTtBbShyLHQpLG4ucmVnaXN0ZXJDb250cm9sKHQubmFtZSxyKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9LGUucHJvdG90eXBlLnJlbW92ZUZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1ltLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCk7biYmbi5yZW1vdmVDb250cm9sKHQubmFtZSl9KX0sZS5wcm90b3R5cGUuZ2V0Rm9ybUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnVwZGF0ZU1vZGVsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztZbS50aGVuKGZ1bmN0aW9uKCl7bi5mb3JtLmdldCh0LnBhdGgpLnNldFZhbHVlKGUpfSl9LGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuY29udHJvbC5zZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUub25TdWJtaXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLERtKHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQodCksITF9LGUucHJvdG90eXBlLm9uUmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0Rm9ybSgpfSxlLnByb3RvdHlwZS5yZXNldEZvcm09ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx0aGlzLmZvcm0ucmVzZXQodCksdGhpcy5zdWJtaXR0ZWQ9ITF9LGUucHJvdG90eXBlLl9zZXRVcGRhdGVTdHJhdGVneT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfSxlLnByb3RvdHlwZS5fZmluZENvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3AoKSx0Lmxlbmd0aD90aGlzLmZvcm0uZ2V0KHQpOnRoaXMuZm9ybX0sZX0oaW0pLFptPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5tb2RlbFBhcmVudEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignXG4gICAgICBuZ01vZGVsIGNhbm5vdCBiZSB1c2VkIHRvIHJlZ2lzdGVyIGZvcm0gY29udHJvbHMgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgVHJ5IHVzaW5nXG4gICAgICBmb3JtR3JvdXBcJ3MgcGFydG5lciBkaXJlY3RpdmUgImZvcm1Db250cm9sTmFtZSIgaW5zdGVhZC4gIEV4YW1wbGU6XG5cbiAgICAgICcrQ20rJ1xuXG4gICAgICBPciwgaWYgeW91XCdkIGxpa2UgdG8gYXZvaWQgcmVnaXN0ZXJpbmcgdGhpcyBmb3JtIGNvbnRyb2wsIGluZGljYXRlIHRoYXQgaXRcJ3Mgc3RhbmRhbG9uZSBpbiBuZ01vZGVsT3B0aW9uczpcblxuICAgICAgRXhhbXBsZTpcblxuICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09InNob3dNb3JlQ29udHJvbHMiIFtuZ01vZGVsT3B0aW9uc109IntzdGFuZGFsb25lOiB0cnVlfSI+XG4gICAgPC9kaXY+XG4gICcpfSx0LmZvcm1Hcm91cE5hbWVFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgbmdNb2RlbCBjYW5ub3QgYmUgdXNlZCB0byByZWdpc3RlciBmb3JtIGNvbnRyb2xzIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwTmFtZSBvciBmb3JtQXJyYXlOYW1lIGRpcmVjdGl2ZS5cblxuICAgICAgT3B0aW9uIDE6IFVzZSBmb3JtQ29udHJvbE5hbWUgaW5zdGVhZCBvZiBuZ01vZGVsIChyZWFjdGl2ZSBzdHJhdGVneSk6XG5cbiAgICAgICIrRW0rIlxuXG4gICAgICBPcHRpb24gMjogIFVwZGF0ZSBuZ01vZGVsJ3MgcGFyZW50IGJlIG5nTW9kZWxHcm91cCAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KTpcblxuICAgICAgIitPbSl9LHQubWlzc2luZ05hbWVFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0lmIG5nTW9kZWwgaXMgdXNlZCB3aXRoaW4gYSBmb3JtIHRhZywgZWl0aGVyIHRoZSBuYW1lIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCBvciB0aGUgZm9ybVxuICAgICAgY29udHJvbCBtdXN0IGJlIGRlZmluZWQgYXMgXCdzdGFuZGFsb25lXCcgaW4gbmdNb2RlbE9wdGlvbnMuXG5cbiAgICAgIEV4YW1wbGUgMTogPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24uZmlyc3ROYW1lIiBuYW1lPSJmaXJzdCI+XG4gICAgICBFeGFtcGxlIDI6IDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLmZpcnN0TmFtZSIgW25nTW9kZWxPcHRpb25zXT0ie3N0YW5kYWxvbmU6IHRydWV9Ij4nKX0sdC5tb2RlbEdyb3VwUGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJcbiAgICAgIG5nTW9kZWxHcm91cCBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuXG5cbiAgICAgIE9wdGlvbiAxOiBVc2UgZm9ybUdyb3VwTmFtZSBpbnN0ZWFkIG9mIG5nTW9kZWxHcm91cCAocmVhY3RpdmUgc3RyYXRlZ3kpOlxuXG4gICAgICAiK0VtKyJcblxuICAgICAgT3B0aW9uIDI6ICBVc2UgYSByZWd1bGFyIGZvcm0gdGFnIGluc3RlYWQgb2YgdGhlIGZvcm1Hcm91cCBkaXJlY3RpdmUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSk6XG5cbiAgICAgICIrT20pfSx0fSgpLEttPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fcGFyZW50PWUsaS5fdmFsaWRhdG9ycz1uLGkuX2FzeW5jVmFsaWRhdG9ycz1yLGl9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuX2NoZWNrUGFyZW50VHlwZT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudCBpbnN0YW5jZW9mIGV8fHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIFdtfHxabS5tb2RlbEdyb3VwUGFyZW50RXhjZXB0aW9uKCl9LGV9KExtKSxYbT1Qcm9taXNlLnJlc29sdmUobnVsbCksJG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgYT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGEuY29udHJvbD1uZXcgUW0sYS5fcmVnaXN0ZXJlZD0hMSxhLnVwZGF0ZT1uZXcgby5uLGEuX3BhcmVudD1lLGEuX3Jhd1ZhbGlkYXRvcnM9bnx8W10sYS5fcmF3QXN5bmNWYWxpZGF0b3JzPXJ8fFtdLGEudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiBudWxsO0FycmF5LmlzQXJyYXkoZSl8fEltKHQsIlZhbHVlIGFjY2Vzc29yIHdhcyBub3QgcHJvdmlkZWQgYXMgYW4gYXJyYXkgZm9yIGZvcm0gY29udHJvbCB3aXRoIik7dmFyIG49dm9pZCAwLHI9dm9pZCAwLGk9dm9pZCAwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG87ZS5jb25zdHJ1Y3Rvcj09PWRtP249ZToobz1lLFJtLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RydWN0b3I9PT10fSk/KHImJkltKHQsIk1vcmUgdGhhbiBvbmUgYnVpbHQtaW4gdmFsdWUgYWNjZXNzb3IgbWF0Y2hlcyBmb3JtIGNvbnRyb2wgd2l0aCIpLHI9ZSk6KGkmJkltKHQsIk1vcmUgdGhhbiBvbmUgY3VzdG9tIHZhbHVlIGFjY2Vzc29yIG1hdGNoZXMgZm9ybSBjb250cm9sIHdpdGgiKSxpPWUpKX0pLGl8fHJ8fG58fChJbSh0LCJObyB2YWxpZCB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSxudWxsKX0oYSxpKSxhfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2NoZWNrRm9yRXJyb3JzKCksdGhpcy5fcmVnaXN0ZXJlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksImlzRGlzYWJsZWQiaW4gdCYmdGhpcy5fdXBkYXRlRGlzYWJsZWQodCksZnVuY3Rpb24odCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTt2YXIgbj10Lm1vZGVsO3JldHVybiEhbi5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3Qoby5XYSkoZSxuLmN1cnJlbnRWYWx1ZSl9KHQsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudD9rbSh0aGlzLm5hbWUsdGhpcy5fcGFyZW50KTpbdGhpcy5uYW1lXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWxpZGF0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTW0odGhpcy5fcmF3VmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhc3luY1ZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBObSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnZpZXdUb01vZGVsVXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlld01vZGVsPXQsdGhpcy51cGRhdGUuZW1pdCh0KX0sZS5wcm90b3R5cGUuX3NldFVwQ29udHJvbD1mdW5jdGlvbigpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH0sZS5wcm90b3R5cGUuX3NldFVwZGF0ZVN0cmF0ZWd5PWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9LGUucHJvdG90eXBlLl9pc1N0YW5kYWxvbmU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9LGUucHJvdG90eXBlLl9zZXRVcFN0YW5kYWxvbmU9ZnVuY3Rpb24oKXtUbSh0aGlzLmNvbnRyb2wsdGhpcyksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5fY2hlY2tGb3JFcnJvcnM9ZnVuY3Rpb24oKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9LGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5cGU9ZnVuY3Rpb24oKXshKHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEttKSYmdGhpcy5fcGFyZW50IGluc3RhbmNlb2YgTG0/Wm0uZm9ybUdyb3VwTmFtZUV4Y2VwdGlvbigpOnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIEttfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBXbXx8Wm0ubW9kZWxQYXJlbnRFeGNlcHRpb24oKX0sZS5wcm90b3R5cGUuX2NoZWNrTmFtZT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLm5hbWV8fFptLm1pc3NpbmdOYW1lRXhjZXB0aW9uKCl9LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1htLnRoZW4oZnVuY3Rpb24oKXtlLmNvbnRyb2wuc2V0VmFsdWUodCx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSl9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZURpc2FibGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmlzRGlzYWJsZWQuY3VycmVudFZhbHVlLHI9IiI9PT1ufHxuJiYiZmFsc2UiIT09bjtYbS50aGVuKGZ1bmN0aW9uKCl7ciYmIWUuY29udHJvbC5kaXNhYmxlZD9lLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZlLmNvbnRyb2wuZGlzYWJsZWQmJmUuY29udHJvbC5lbmFibGUoKX0pfSxlfShibSksSm09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdmFsaWRhdG9ycz1lLHIuX2FzeW5jVmFsaWRhdG9ycz1uLHIuc3VibWl0dGVkPSExLHIuZGlyZWN0aXZlcz1bXSxyLmZvcm09bnVsbCxyLm5nU3VibWl0PW5ldyBvLm4scn1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksdC5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtyZXR1cm4gVG0oZSx0KSxlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuZGlyZWN0aXZlcy5wdXNoKHQpLGV9LGUucHJvdG90eXBlLmdldENvbnRyb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXtGbSh0aGlzLmRpcmVjdGl2ZXMsdCl9LGUucHJvdG90eXBlLmFkZEZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZvcm0uZ2V0KHQucGF0aCk7QW0oZSx0KSxlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5yZW1vdmVGb3JtR3JvdXA9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5nZXRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUuYWRkRm9ybUFycmF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtBbShlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9LGUucHJvdG90eXBlLnJlbW92ZUZvcm1BcnJheT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmdldEZvcm1BcnJheT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS51cGRhdGVNb2RlbD1mdW5jdGlvbih0LGUpe3RoaXMuZm9ybS5nZXQodC5wYXRoKS5zZXRWYWx1ZShlKX0sZS5wcm90b3R5cGUub25TdWJtaXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLERtKHRoaXMuZm9ybSx0aGlzLmRpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX0sZS5wcm90b3R5cGUub25SZXNldD1mdW5jdGlvbigpe3RoaXMucmVzZXRGb3JtKCl9LGUucHJvdG90eXBlLnJlc2V0Rm9ybT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD12b2lkIDApLHRoaXMuZm9ybS5yZXNldCh0KSx0aGlzLnN1Ym1pdHRlZD0hMX0sZS5wcm90b3R5cGUuX3VwZGF0ZURvbVZhbHVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRpcmVjdGl2ZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmZvcm0uZ2V0KGUucGF0aCk7ZS5jb250cm9sIT09biYmKGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gam0oZSl9KSxlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoZnVuY3Rpb24oKXtyZXR1cm4gam0oZSl9KSxlLl9yYXdWYWxpZGF0b3JzLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZ0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UobnVsbCl9KSxlLl9yYXdBc3luY1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJnQucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShudWxsKX0pLHQmJnQuX2NsZWFyQ2hhbmdlRm5zKCl9KGUuY29udHJvbCxlKSxuJiZUbShuLGUpLGUuY29udHJvbD1uKX0pLHRoaXMuZm9ybS5fdXBkYXRlVHJlZVZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZVJlZ2lzdHJhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXtyZXR1cm4gdC5fdXBkYXRlRG9tVmFsdWUoKX0pLHRoaXMuX29sZEZvcm0mJnRoaXMuX29sZEZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7fSksdGhpcy5fb2xkRm9ybT10aGlzLmZvcm19LGUucHJvdG90eXBlLl91cGRhdGVWYWxpZGF0b3JzPWZ1bmN0aW9uKCl7dmFyIHQ9TW0odGhpcy5fdmFsaWRhdG9ycyk7dGhpcy5mb3JtLnZhbGlkYXRvcj1zbS5jb21wb3NlKFt0aGlzLmZvcm0udmFsaWRhdG9yLHRdKTt2YXIgZT1ObSh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpO3RoaXMuZm9ybS5hc3luY1ZhbGlkYXRvcj1zbS5jb21wb3NlQXN5bmMoW3RoaXMuZm9ybS5hc3luY1ZhbGlkYXRvcixlXSl9LGUucHJvdG90eXBlLl9jaGVja0Zvcm1QcmVzZW50PWZ1bmN0aW9uKCl7dGhpcy5mb3JtfHxTbS5taXNzaW5nRm9ybUV4Y2VwdGlvbigpfSxlfShpbSksdHk9ZnVuY3Rpb24oKXt9LGV5PWZ1bmN0aW9uKCl7fSxueT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuaHR0cD10LHRoaXMucm91dGU9ZSx0aGlzLnJvdXRlcj1uLHRoaXMucmVtb3RlQ29udGVudD0iTG9hZGluZy4uLiIsdGhpcy53aWtpUGFnZVRpdGxlPSJMb2FkaW5nLi4uIix0aGlzLmZpZWxkUGFnZVBhdGg9IiJ9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZShmdW5jdGlvbihlKXtyZXR1cm4gdC5jaGVja0ZvclBhZ2VQYXRoKGUpfSl9LHQucHJvdG90eXBlLmNoZWNrRm9yUGFnZVBhdGg9ZnVuY3Rpb24odCl7dC5oYXMoInBhZ2VwYXRoIik/KHRoaXMuZmV0Y2hXaWtpUGFnZSh0LmdldCgicGFnZXBhdGgiKSksdGhpcy5maWVsZFBhZ2VQYXRoPXQuZ2V0KCJwYWdlcGF0aCIpKToodGhpcy5mZXRjaFdpa2lQYWdlKCJUZWFtTWFpblBhZ2UiKSx0aGlzLmZpZWxkUGFnZVBhdGg9IlRlYW1NYWluUGFnZSIpfSx0LnByb3RvdHlwZS5mZXRjaFdpa2lQYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5odHRwLmdldCgiaHR0cDovLzIwMTguaWdlbS5vcmcvVGVhbTpHT19QYXJpcy1TYWNsYXkvIit0LHtyZXNwb25zZVR5cGU6InRleHQifSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2Nlc3NDb250ZW50KHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2codCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc0NvbnRlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI8dGl0bGU+VGVhbTpHTyBQYXJpcy1TYWNsYXkvIiksbj10LmluZGV4T2YoIiAtIDIwMTguaWdlbS5vcmc8L3RpdGxlPiIpO3RoaXMud2lraVBhZ2VUaXRsZT10LnNsaWNlKGUrIjx0aXRsZT5UZWFtOkdPIFBhcmlzLVNhY2xheS8iLmxlbmd0aCxuKTt2YXIgcj10LmluZGV4T2YoJzxkaXYgaWQ9IkhRX3BhZ2UiPicpLGk9dC5pbmRleE9mKCc8ZGl2IGNsYXNzPSJ2aXN1YWxDbGVhciI+PC9kaXY+Jyksbz10LnNsaWNlKHIsaSk7bz1vLnJlcGxhY2UobmV3IFJlZ0V4cCgnaHJlZj0iXFwvVGVhbTpHT19QYXJpcy1TYWNsYXlcXC8nLCJnIiksJzxhIGhyZWY9IiMvd2lraS1scC8nKSx0aGlzLnJlbW90ZUNvbnRlbnQ9b30sdC5wcm90b3R5cGUuZ29Ub0ZpbGxlZFBhZ2U9ZnVuY3Rpb24oKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZShbIi93aWtpLWxwLyIrdGhpcy5maWVsZFBhZ2VQYXRoXSl9LHQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe30sdH0oKSxyeT1uKCJQaGpuIiksaXk9ZnVuY3Rpb24oKXt9LG95PWZ1bmN0aW9uKCl7fSxheT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLm5vcm1hbGl6ZWROYW1lcz1uZXcgTWFwLHRoaXMubGF6eVVwZGF0ZT1udWxsLHQ/dGhpcy5sYXp5SW5pdD0ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCx0LnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5pbmRleE9mKCI6Iik7aWYobj4wKXt2YXIgcj10LnNsaWNlKDAsbiksaT1yLnRvTG93ZXJDYXNlKCksbz10LnNsaWNlKG4rMSkudHJpbSgpO2UubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLGkpLGUuaGVhZGVycy5oYXMoaSk/ZS5oZWFkZXJzLmdldChpKS5wdXNoKG8pOmUuaGVhZGVycy5zZXQoaSxbb10pfX0pfTpmdW5jdGlvbigpe2UuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9dFtuXSxpPW4udG9Mb3dlckNhc2UoKTsic3RyaW5nIj09dHlwZW9mIHImJihyPVtyXSksci5sZW5ndGg+MCYmKGUuaGVhZGVycy5zZXQoaSxyKSxlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobixpKSl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX0sdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9LHQucHJvdG90eXBlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWU9ZnVuY3Rpb24odCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5VXBkYXRlKHQpfSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX0sdC5wcm90b3R5cGUuY29weUZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmluaXQoKSxBcnJheS5mcm9tKHQuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7ZS5oZWFkZXJzLnNldChuLHQuaGVhZGVycy5nZXQobikpLGUubm9ybWFsaXplZE5hbWVzLnNldChuLHQubm9ybWFsaXplZE5hbWVzLmdldChuKSl9KX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4ubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHQ/dGhpcy5sYXp5SW5pdDp0aGlzLG4ubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtlXSksbn0sdC5wcm90b3R5cGUuYXBwbHlVcGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjp2YXIgbj10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmKG49W25dKSwwPT09bi5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7dmFyIHI9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtyLnB1c2guYXBwbHkocixPYmplY3QoZC5kKShuKSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6dmFyIGk9dC52YWx1ZTtpZihpKXt2YXIgbz10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFvKXJldHVybjswPT09KG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1pLmluZGV4T2YodCl9KSkubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKSk6dGhpcy5oZWFkZXJzLnNldChlLG8pfWVsc2UgdGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQoZS5ub3JtYWxpemVkTmFtZXMuZ2V0KG4pLGUuaGVhZGVycy5nZXQobikpfSl9LHR9KCksc3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGx5KHQpfSx0LnByb3RvdHlwZS5lbmNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbHkodCl9LHQucHJvdG90eXBlLmRlY29kZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0LnByb3RvdHlwZS5kZWNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0fSgpO2Z1bmN0aW9uIGx5KHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2dpLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2dpLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTNCL2dpLCI7IikucmVwbGFjZSgvJTJCL2dpLCIrIikucmVwbGFjZSgvJTNEL2dpLCI9IikucmVwbGFjZSgvJTNGL2dpLCI/IikucmVwbGFjZSgvJTJGL2dpLCIvIil9dmFyIHV5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGUsbixyLGk9dGhpcztpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBzeSx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD0oZT10LmZyb21TdHJpbmcsbj10aGlzLmVuY29kZXIscj1uZXcgTWFwLGUubGVuZ3RoPjAmJmUuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiPSIpLGk9T2JqZWN0KGQuYykoLTE9PWU/W24uZGVjb2RlS2V5KHQpLCIiXTpbbi5kZWNvZGVLZXkodC5zbGljZSgwLGUpKSxuLmRlY29kZVZhbHVlKHQuc2xpY2UoZSsxKSldLDIpLG89aVswXSxhPWlbMV0scz1yLmdldChvKXx8W107cy5wdXNoKGEpLHIuc2V0KG8scyl9KSxyKX1lbHNlIHQuZnJvbU9iamVjdD8odGhpcy5tYXA9bmV3IE1hcCxPYmplY3Qua2V5cyh0LmZyb21PYmplY3QpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5mcm9tT2JqZWN0W2VdO2kubWFwLnNldChlLEFycmF5LmlzQXJyYXkobik/bjpbbl0pfSkpOnRoaXMubWFwPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dGhpcy5pbml0KCk7dmFyIGU9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBlP2VbMF06bnVsbH0sdC5wcm90b3R5cGUuZ2V0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJhIn0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChmdW5jdGlvbihlKXt2YXIgbj10LmVuY29kZXIuZW5jb2RlS2V5KGUpO3JldHVybiB0Lm1hcC5nZXQoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuKyI9Iit0LmVuY29kZXIuZW5jb2RlVmFsdWUoZSl9KS5qb2luKCImIil9KS5qb2luKCImIil9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBuLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxuLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXAuc2V0KGUsdC5jbG9uZUZyb20ubWFwLmdldChlKSl9KSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbihlKXtzd2l0Y2goZS5vcCl7Y2FzZSJhIjpjYXNlInMiOnZhciBuPSgiYSI9PT1lLm9wP3QubWFwLmdldChlLnBhcmFtKTp2b2lkIDApfHxbXTtuLnB1c2goZS52YWx1ZSksdC5tYXAuc2V0KGUucGFyYW0sbik7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1lLnZhbHVlKXt0Lm1hcC5kZWxldGUoZS5wYXJhbSk7YnJlYWt9dmFyIHI9dC5tYXAuZ2V0KGUucGFyYW0pfHxbXSxpPXIuaW5kZXhPZihlLnZhbHVlKTstMSE9PWkmJnIuc3BsaWNlKGksMSksci5sZW5ndGg+MD90Lm1hcC5zZXQoZS5wYXJhbSxyKTp0Lm1hcC5kZWxldGUoZS5wYXJhbSl9fSksdGhpcy5jbG9uZUZyb209bnVsbCl9LHR9KCk7ZnVuY3Rpb24gY3kodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIGZ5KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmdCBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gaHkodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBGb3JtRGF0YSYmdCBpbnN0YW5jZW9mIEZvcm1EYXRhfXZhciBweT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk7aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fHI/KHRoaXMuYm9keT12b2lkIDAhPT1uP246bnVsbCxpPXIpOmk9bixpJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWkucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFpLndpdGhDcmVkZW50aWFscyxpLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWkucmVzcG9uc2VUeXBlKSxpLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9aS5oZWFkZXJzKSxpLnBhcmFtcyYmKHRoaXMucGFyYW1zPWkucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBheSksdGhpcy5wYXJhbXMpe3ZhciBvPXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PW8ubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1lO2Vsc2V7dmFyIGE9ZS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWUrKC0xPT09YT8iPyI6YTxlLmxlbmd0aC0xPyImIjoiIikrb319ZWxzZSB0aGlzLnBhcmFtcz1uZXcgdXksdGhpcy51cmxXaXRoUGFyYW1zPWV9cmV0dXJuIHQucHJvdG90eXBlLnNlcmlhbGl6ZUJvZHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmN5KHRoaXMuYm9keSl8fGZ5KHRoaXMuYm9keSl8fGh5KHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiB1eT90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX0sdC5wcm90b3R5cGUuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOmh5KHRoaXMuYm9keSk/bnVsbDpmeSh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOmN5KHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgdXk/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPWUubWV0aG9kfHx0aGlzLm1ldGhvZCxyPWUudXJsfHx0aGlzLnVybCxpPWUucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxvPXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6dGhpcy5ib2R5LGE9dm9pZCAwIT09ZS53aXRoQ3JlZGVudGlhbHM/ZS53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMscz12b2lkIDAhPT1lLnJlcG9ydFByb2dyZXNzP2UucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcyxsPWUuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHU9ZS5wYXJhbXN8fHRoaXMucGFyYW1zO3JldHVybiB2b2lkIDAhPT1lLnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKGUuc2V0SGVhZGVycykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRIZWFkZXJzW25dKX0sbCkpLGUuc2V0UGFyYW1zJiYodT1PYmplY3Qua2V5cyhlLnNldFBhcmFtcykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRQYXJhbXNbbl0pfSx1KSksbmV3IHQobixyLG8se3BhcmFtczp1LGhlYWRlcnM6bCxyZXBvcnRQcm9ncmVzczpzLHJlc3BvbnNlVHlwZTppLHdpdGhDcmVkZW50aWFsczphfSl9LHR9KCksZHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5TZW50PTBdPSJTZW50Iix0W3QuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIix0W3QuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsdFt0LlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsdFt0LlVzZXI9NV09IlVzZXIiLHR9KHt9KSxteT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9MjAwKSx2b2lkIDA9PT1uJiYobj0iT0siKSx0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgYXksdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxuLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0oKSx5eT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPWR5LlJlc3BvbnNlSGVhZGVyLG59cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXt9KSxuZXcgZSh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0obXkpLGd5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLnR5cGU9ZHkuUmVzcG9uc2Usbi5ib2R5PXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6bnVsbCxufXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0obXkpLHZ5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSwwLCJVbmtub3duIEVycm9yIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLG4ub2s9ITEsbi5tZXNzYWdlPW4uc3RhdHVzPj0yMDAmJm4uc3RhdHVzPDMwMD8iSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKToiSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKSsiOiAiK2Uuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQsbi5lcnJvcj1lLmVycm9yfHxudWxsLG59cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0obXkpO2Z1bmN0aW9uIGJ5KHQsZSl7cmV0dXJue2JvZHk6ZSxoZWFkZXJzOnQuaGVhZGVycyxvYnNlcnZlOnQub2JzZXJ2ZSxwYXJhbXM6dC5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6dC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOnQud2l0aENyZWRlbnRpYWxzfX12YXIgX3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuaGFuZGxlcj10fXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXRoaXM7aWYodm9pZCAwPT09biYmKG49e30pLHQgaW5zdGFuY2VvZiBweSlyPXQ7ZWxzZXt2YXIgbztvPW4uaGVhZGVycyBpbnN0YW5jZW9mIGF5P24uaGVhZGVyczpuZXcgYXkobi5oZWFkZXJzKTt2YXIgYT12b2lkIDA7bi5wYXJhbXMmJihhPW4ucGFyYW1zIGluc3RhbmNlb2YgdXk/bi5wYXJhbXM6bmV3IHV5KHtmcm9tT2JqZWN0Om4ucGFyYW1zfSkpLHI9bmV3IHB5KHQsZSx2b2lkIDAhPT1uLmJvZHk/bi5ib2R5Om51bGwse2hlYWRlcnM6byxwYXJhbXM6YSxyZXBvcnRQcm9ncmVzczpuLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc30pfXZhciBzPU9iamVjdChJLmEpKHIpLnBpcGUoT2JqZWN0KHJ5LmEpKGZ1bmN0aW9uKHQpe3JldHVybiBpLmhhbmRsZXIuaGFuZGxlKHQpfSkpO2lmKHQgaW5zdGFuY2VvZiBweXx8ImV2ZW50cyI9PT1uLm9ic2VydmUpcmV0dXJuIHM7dmFyIGw9cy5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGd5fSkpO3N3aXRjaChuLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goci5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBsLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBsLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmISh0LmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBsLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImpzb24iOmRlZmF1bHQ6cmV0dXJuIGwucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5ib2R5fSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBsO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAiK24ub2JzZXJ2ZSsifSIpfX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkRFTEVURSIsdCxlKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkdFVCIsdCxlKX0sdC5wcm90b3R5cGUuaGVhZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJIRUFEIix0LGUpfSx0LnByb3RvdHlwZS5qc29ucD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIix0LHtwYXJhbXM6KG5ldyB1eSkuYXBwZW5kKGUsIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfSx0LnByb3RvdHlwZS5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIk9QVElPTlMiLHQsZSl9LHQucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUEFUQ0giLHQsYnkobixlKSl9LHQucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQT1NUIix0LGJ5KG4sZSkpfSx0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQVVQiLHQsYnkobixlKSl9LHR9KCksd3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5uZXh0PXQsdGhpcy5pbnRlcmNlcHRvcj1lfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX0sdH0oKSx4eT1uZXcgby5wKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLEN5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaGFuZGxlKHQpfSx0fSgpLEV5PS9eXClcXVx9Jyw/XG4vLE95PWZ1bmN0aW9uKCl7fSxTeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdH0oKSxreT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy54aHJGYWN0b3J5PXR9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJKU09OUCI9PT10Lm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEpzb25wQ2xpZW50TW9kdWxlIGluc3RhbGxlZC4iKTtyZXR1cm4gbmV3IEUuYShmdW5jdGlvbihuKXt2YXIgcj1lLnhockZhY3RvcnkuYnVpbGQoKTtpZihyLm9wZW4odC5tZXRob2QsdC51cmxXaXRoUGFyYW1zKSx0LndpdGhDcmVkZW50aWFscyYmKHIud2l0aENyZWRlbnRpYWxzPSEwKSx0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3JldHVybiByLnNldFJlcXVlc3RIZWFkZXIodCxlLmpvaW4oIiwiKSl9KSx0LmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8ci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiKSwhdC5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIikpe3ZhciBpPXQuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09aSYmci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGkpfWlmKHQucmVzcG9uc2VUeXBlKXt2YXIgbz10LnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO3IucmVzcG9uc2VUeXBlPSJqc29uIiE9PW8/bzoidGV4dCJ9dmFyIGE9dC5zZXJpYWxpemVCb2R5KCkscz1udWxsLGw9ZnVuY3Rpb24oKXtpZihudWxsIT09cylyZXR1cm4gczt2YXIgZT0xMjIzPT09ci5zdGF0dXM/MjA0OnIuc3RhdHVzLG49ci5zdGF0dXNUZXh0fHwiT0siLGk9bmV3IGF5KHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG89ZnVuY3Rpb24odCl7cmV0dXJuInJlc3BvbnNlVVJMImluIHQmJnQucmVzcG9uc2VVUkw/dC5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdCh0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT90LmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0ocil8fHQudXJsO3JldHVybiBzPW5ldyB5eSh7aGVhZGVyczppLHN0YXR1czplLHN0YXR1c1RleHQ6bix1cmw6b30pfSx1PWZ1bmN0aW9uKCl7dmFyIGU9bCgpLGk9ZS5oZWFkZXJzLG89ZS5zdGF0dXMsYT1lLnN0YXR1c1RleHQscz1lLnVybCx1PW51bGw7MjA0IT09byYmKHU9dm9pZCAwPT09ci5yZXNwb25zZT9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09byYmKG89dT8yMDA6MCk7dmFyIGM9bz49MjAwJiZvPDMwMDtpZigianNvbiI9PT10LnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiB1KXt2YXIgZj11O3U9dS5yZXBsYWNlKEV5LCIiKTt0cnl7dT0iIiE9PXU/SlNPTi5wYXJzZSh1KTpudWxsfWNhdGNoKHQpe3U9ZixjJiYoYz0hMSx1PXtlcnJvcjp0LHRleHQ6dX0pfX1jPyhuLm5leHQobmV3IGd5KHtib2R5OnUsaGVhZGVyczppLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpLG4uY29tcGxldGUoKSk6bi5lcnJvcihuZXcgdnkoe2Vycm9yOnUsaGVhZGVyczppLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB2eSh7ZXJyb3I6dCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIn0pO24uZXJyb3IoZSl9LGY9ITEsaD1mdW5jdGlvbihlKXtmfHwobi5uZXh0KGwoKSksZj0hMCk7dmFyIGk9e3R5cGU6ZHkuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6ZS5sb2FkZWR9O2UubGVuZ3RoQ29tcHV0YWJsZSYmKGkudG90YWw9ZS50b3RhbCksInRleHQiPT09dC5yZXNwb25zZVR5cGUmJnIucmVzcG9uc2VUZXh0JiYoaS5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksbi5uZXh0KGkpfSxwPWZ1bmN0aW9uKHQpe3ZhciBlPXt0eXBlOmR5LlVwbG9hZFByb2dyZXNzLGxvYWRlZDp0LmxvYWRlZH07dC5sZW5ndGhDb21wdXRhYmxlJiYoZS50b3RhbD10LnRvdGFsKSxuLm5leHQoZSl9O3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHQucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKGEpLG4ubmV4dCh7dHlwZTpkeS5TZW50fSksZnVuY3Rpb24oKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHUpLHQucmVwb3J0UHJvZ3Jlc3MmJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmci51cGxvYWQmJnIudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5hYm9ydCgpfX0pfSx0fSgpLFR5PW5ldyBvLnAoIlhTUkZfQ09PS0lFX05BTUUiKSxQeT1uZXcgby5wKCJYU1JGX0hFQURFUl9OQU1FIiksQXk9ZnVuY3Rpb24oKXt9LGp5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIHQhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1PYmplY3Qocy51KSh0LHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPXQpLHRoaXMubGFzdFRva2VufSx0fSgpLEl5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudG9rZW5TZXJ2aWNlPXQsdGhpcy5oZWFkZXJOYW1lPWV9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQudXJsLnRvTG93ZXJDYXNlKCk7aWYoIkdFVCI9PT10Lm1ldGhvZHx8IkhFQUQiPT09dC5tZXRob2R8fG4uc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxuLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIGUuaGFuZGxlKHQpO3ZhciByPXRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuKCk7cmV0dXJuIG51bGw9PT1yfHx0LmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSl8fCh0PXQuY2xvbmUoe2hlYWRlcnM6dC5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUscil9KSksZS5oYW5kbGUodCl9LHR9KCksTXk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5iYWNrZW5kPXQsdGhpcy5pbmplY3Rvcj1lLHRoaXMuY2hhaW49bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10aGlzLmNoYWluKXt2YXIgZT10aGlzLmluamVjdG9yLmdldCh4eSxbXSk7dGhpcy5jaGFpbj1lLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB3eSh0LGUpfSx0aGlzLmJhY2tlbmQpfXJldHVybiB0aGlzLmNoYWluLmhhbmRsZSh0KX0sdH0oKSxOeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGlzYWJsZT1mdW5jdGlvbigpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6SXksdXNlQ2xhc3M6Q3l9XX19LHQud2l0aE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTpUeSx1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTpQeSx1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19LHR9KCksUnk9ZnVuY3Rpb24oKXt9LER5PW4oIlpZQ2kiKSxGeT1vLk9hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNsaWdodHByb3h5Y29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJlbX0uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9Lndpa2lscC1hY2Nlc3MtY2FyZFtfbmdjb250ZW50LSVDT01QJV0sIC53aWtpbHAtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwfSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTHkodCl7cmV0dXJuIG8ua2IoMCxbby5jYigwLFVwLFtoZS5jXSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwzNSwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDIsMCxudWxsLG51bGwsMTgsIm1hdC1jYXJkIixbWyJjbGFzcyIsIndpa2lscC1hY2Nlc3MtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoMyw0OTE1MixudWxsLDAsRmksW10sbnVsbCxudWxsKSwodCgpKCksby5RYSg0LDAsbnVsbCwwLDE2LCJtYXQtY2FyZC1jb250ZW50IixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkLWNvbnRlbnQgbWF0LWNhcmQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDUsMTYzODQsbnVsbCwwLFJpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoNiwwLG51bGwsbnVsbCwxNCwiZGl2IixbWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJsZWZ0Il0sWyJmeExheW91dEdhcCIsIjAuNSUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg3LDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il0sbGF5b3V0WHM6WzEsImxheW91dFhzIl19LG51bGwpLG8uUGEoOCwxNzg1ODU2LG51bGwsMCxMZCxbZ2Qsby5rLFs2LEZkXSxvLnksY2UsYmRdLHtnYXA6WzAsImdhcCJdfSxudWxsKSxvLlBhKDksNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgxMCwwLG51bGwsbnVsbCw3LCJpbnB1dCIsW1siY2xhc3MiLCJtYXQtaW5wdXQtZWxlbWVudCBtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIl0sWyJtYXRJbnB1dCIsIiJdLFsicGxhY2Vob2xkZXIiLCJQYWdlIHBhdGgiXV0sW1syLCJuZy11bnRvdWNoZWQiLG51bGxdLFsyLCJuZy10b3VjaGVkIixudWxsXSxbMiwibmctcHJpc3RpbmUiLG51bGxdLFsyLCJuZy1kaXJ0eSIsbnVsbF0sWzIsIm5nLXZhbGlkIixudWxsXSxbMiwibmctaW52YWxpZCIsbnVsbF0sWzIsIm5nLXBlbmRpbmciLG51bGxdLFsyLCJtYXQtaW5wdXQtc2VydmVyIixudWxsXSxbMSwiaWQiLDBdLFsxLCJwbGFjZWhvbGRlciIsMF0sWzgsImRpc2FibGVkIiwwXSxbOCwicmVxdWlyZWQiLDBdLFs4LCJyZWFkT25seSIsMF0sWzEsImFyaWEtZGVzY3JpYmVkYnkiLDBdLFsxLCJhcmlhLWludmFsaWQiLDBdLFsxLCJhcmlhLXJlcXVpcmVkIiwwXV0sW1tudWxsLCJuZ01vZGVsQ2hhbmdlIl0sW251bGwsImlucHV0Il0sW251bGwsImJsdXIiXSxbbnVsbCwiY29tcG9zaXRpb25zdGFydCJdLFtudWxsLCJjb21wb3NpdGlvbmVuZCJdLFtudWxsLCJmb2N1cyJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITAsaT10LmNvbXBvbmVudDtyZXR1cm4iaW5wdXQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTIpLl9oYW5kbGVJbnB1dChuLnRhcmdldC52YWx1ZSkmJnIpLCJibHVyIj09PWUmJihyPSExIT09by5hYih0LDEyKS5vblRvdWNoZWQoKSYmciksImNvbXBvc2l0aW9uc3RhcnQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTIpLl9jb21wb3NpdGlvblN0YXJ0KCkmJnIpLCJjb21wb3NpdGlvbmVuZCI9PT1lJiYocj0hMSE9PW8uYWIodCwxMikuX2NvbXBvc2l0aW9uRW5kKG4udGFyZ2V0LnZhbHVlKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTcpLl9mb2N1c0NoYW5nZWQoITEpJiZyKSwiZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTcpLl9mb2N1c0NoYW5nZWQoITApJiZyKSwiaW5wdXQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTcpLl9vbklucHV0KCkmJnIpLCJuZ01vZGVsQ2hhbmdlIj09PWUmJihyPSExIT09KGkuZmllbGRQYWdlUGF0aD1uKSYmcikscn0sbnVsbCxudWxsKSksby5mYig2MTQ0LG51bGwsR2QsbnVsbCxbSmRdKSxvLlBhKDEyLDE2Mzg0LG51bGwsMCxkbSxbby5ELG8uayxbMixwbV1dLG51bGwsbnVsbCksby5mYigxMDI0LG51bGwsZm0sZnVuY3Rpb24odCl7cmV0dXJuW3RdfSxbZG1dKSxvLlBhKDE0LDY3MTc0NCxudWxsLDAsJG0sW1s4LG51bGxdLFs4LG51bGxdLFs4LG51bGxdLFs2LGZtXV0se21vZGVsOlswLCJtb2RlbCJdfSx7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0pLG8uZmIoMjA0OCxudWxsLGJtLG51bGwsWyRtXSksby5QYSgxNiwxNjM4NCxudWxsLDAsVm0sW1s0LGJtXV0sbnVsbCxudWxsKSxvLlBhKDE3LDk5OTQyNCxudWxsLDAsSmQsW28uayx1LFs2LGJtXSxbMixXbV0sWzIsSm1dLGdlLFs4LG51bGxdLFpkLG8ueV0se3BsYWNlaG9sZGVyOlswLCJwbGFjZWhvbGRlciJdfSxudWxsKSwodCgpKCksby5RYSgxOCwwLG51bGwsbnVsbCwyLCJidXR0b24iLFtbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuZ29Ub0ZpbGxlZFBhZ2UoKSYmcikscn0sT2ksRWkpKSxvLlBhKDE5LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiR28iXSkpLCh0KCkoKSxvLlFhKDIxLDAsbnVsbCxudWxsLDE1LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJ3aWtpbHAtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoMjIsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMjMsMCxudWxsLDAsNCwibWF0LWNhcmQtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlciJdXSxudWxsLG51bGwsbnVsbCxIaSxVaSkpLG8uUGEoMjQsNDkxNTIsbnVsbCwwLExpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMjUsMCxudWxsLDEsMiwibWF0LWNhcmQtdGl0bGUiLFtbImNsYXNzIiwibWF0LWNhcmQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgyNiwxNjM4NCxudWxsLDAsRGksW10sbnVsbCxudWxsKSwodCgpKCksby5pYigyNyxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSxvLlFhKDI4LDAsbnVsbCwwLDgsIm1hdC1jYXJkLWNvbnRlbnQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQtY29udGVudCBtYXQtY2FyZC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMjksMTYzODQsbnVsbCwwLFJpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMzAsMCxudWxsLG51bGwsNiwiZGl2IixbWyJmeExheW91dCIsImNvbHVtbiJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJsZWZ0Il0sWyJmeExheW91dEdhcCIsIjAuNSUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgzMSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdLGxheW91dFhzOlsxLCJsYXlvdXRYcyJdfSxudWxsKSxvLlBhKDMyLDE3ODU4NTYsbnVsbCwwLExkLFtnZCxvLmssWzYsRmRdLG8ueSxjZSxiZF0se2dhcDpbMCwiZ2FwIl19LG51bGwpLG8uUGEoMzMsNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgzNCwwLG51bGwsbnVsbCwyLCJkaXYiLFtbImlkIiwibGlnaHRwcm94eWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgzNSwwLG51bGwsbnVsbCwxLCJkaXYiLFtdLFtbOCwiaW5uZXJIVE1MIiwxXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uZWIoMzYsMSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDcsMCwicm93IiwiY29sdW1uIiksdChlLDgsMCwiMC41JSIpLHQoZSw5LDAsImxlZnQiKSx0KGUsMTQsMCxuLmZpZWxkUGFnZVBhdGgpLHQoZSwxNywwLCJQYWdlIHBhdGgiKSx0KGUsMzEsMCwiY29sdW1uIiwiY29sdW1uIiksdChlLDMyLDAsIjAuNSUiKSx0KGUsMzMsMCwibGVmdCIpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxMCwxLFtvLmFiKGUsMTYpLm5nQ2xhc3NVbnRvdWNoZWQsby5hYihlLDE2KS5uZ0NsYXNzVG91Y2hlZCxvLmFiKGUsMTYpLm5nQ2xhc3NQcmlzdGluZSxvLmFiKGUsMTYpLm5nQ2xhc3NEaXJ0eSxvLmFiKGUsMTYpLm5nQ2xhc3NWYWxpZCxvLmFiKGUsMTYpLm5nQ2xhc3NJbnZhbGlkLG8uYWIoZSwxNikubmdDbGFzc1BlbmRpbmcsby5hYihlLDE3KS5faXNTZXJ2ZXIsby5hYihlLDE3KS5pZCxvLmFiKGUsMTcpLnBsYWNlaG9sZGVyLG8uYWIoZSwxNykuZGlzYWJsZWQsby5hYihlLDE3KS5yZXF1aXJlZCxvLmFiKGUsMTcpLnJlYWRvbmx5LG8uYWIoZSwxNykuX2FyaWFEZXNjcmliZWRieXx8bnVsbCxvLmFiKGUsMTcpLmVycm9yU3RhdGUsby5hYihlLDE3KS5yZXF1aXJlZC50b1N0cmluZygpXSksdChlLDE4LDAsby5hYihlLDE5KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09by5hYihlLDE5KS5fYW5pbWF0aW9uTW9kZSksdChlLDI3LDAsbi53aWtpUGFnZVRpdGxlKSx0KGUsMzUsMCxvLmpiKGUsMzUsMCx0KGUsMzYsMCxvLmFiKGUsMCksbi5yZW1vdGVDb250ZW50KSkpfSl9dmFyIFZ5PW8uTWEoImFwcC13aWtpLWxpZ2h0cHJveHkiLG55LGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXdpa2ktbGlnaHRwcm94eSIsW10sbnVsbCxudWxsLG51bGwsTHksRnkpKSxvLlBhKDEsNDMwODk5MixudWxsLDAsbnksW195LER5LmEsRHkua10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxCeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jYWxsYmFjaz10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB6eSh0LHRoaXMuY2FsbGJhY2spKX0sdH0oKSx6eT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuYWRkKG5ldyBhdC5hKG4pKSxyfXJldHVybiBkLmIoZSx0KSxlfShIZS5hKSxVeT1uKCJTMW5YIiksSHk9bigiOVoxRiIpO2Z1bmN0aW9uIFF5KHQpe3JldHVybiBFcnJvcignVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICInK3QrJyInKX1mdW5jdGlvbiBxeSh0KXtyZXR1cm4gRXJyb3IoIlRoZSBVUkwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTCB2aWEgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIFVSTCB3YXMgXCIiK3QrJyIuJyl9ZnVuY3Rpb24gR3kodCl7cmV0dXJuIEVycm9yKCJUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgXCIiK3QrJyIuJyl9dmFyIFl5PWZ1bmN0aW9uKHQpe3Qubm9kZU5hbWU/dGhpcy5zdmdFbGVtZW50PXQ6dGhpcy51cmw9dH0sV3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9odHRwQ2xpZW50PXQsdGhpcy5fc2FuaXRpemVyPWUsdGhpcy5fc3ZnSWNvbkNvbmZpZ3M9bmV3IE1hcCx0aGlzLl9pY29uU2V0Q29uZmlncz1uZXcgTWFwLHRoaXMuX2NhY2hlZEljb25zQnlVcmw9bmV3IE1hcCx0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcz1uZXcgTWFwLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcz1uZXcgTWFwLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9Im1hdGVyaWFsLWljb25zIix0aGlzLl9kb2N1bWVudD1ufXJldHVybiB0LnByb3RvdHlwZS5hZGRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLHQsZSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgWXkobikpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5ILkhUTUwsbik7aWYoIXIpdGhyb3cgR3kobik7dmFyIGk9dGhpcy5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24ocik7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcodCxlLG5ldyBZeShpKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBZeShlKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5ILkhUTUwsZSk7aWYoIW4pdGhyb3cgR3koZSk7dmFyIHI9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcobik7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcodCxuZXcgWXkocikpfSx0LnByb3RvdHlwZS5yZWdpc3RlckZvbnRDbGFzc0FsaWFzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQpLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5zZXQodCxlKSx0aGlzfSx0LnByb3RvdHlwZS5jbGFzc05hbWVGb3JGb250QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQodCl8fHR9LHQucHJvdG90eXBlLnNldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9dCx0aGlzfSx0LnByb3RvdHlwZS5nZXREZWZhdWx0Rm9udFNldENsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3N9LHQucHJvdG90eXBlLmdldFN2Z0ljb25Gcm9tVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5ILlJFU09VUkNFX1VSTCx0KTtpZighbil0aHJvdyBxeSh0KTt2YXIgcj10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChuKTtyZXR1cm4gcj9PYmplY3QoSS5hKShaeShyKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKG5ldyBZeSh0KSkucGlwZShPYmplY3QoWWUuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhY2hlZEljb25zQnlVcmwuc2V0KG4sdCl9KSxPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gWnkodCl9KSl9LHQucHJvdG90eXBlLmdldE5hbWVkU3ZnSWNvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgbj1LeShlLHQpLHI9dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KG4pO2lmKHIpcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcocik7dmFyIGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOkVkKFF5KG4pKX0sdC5wcm90b3R5cGUuX2dldFN2Z0Zyb21Db25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3QoSS5hKShaeSh0LnN2Z0VsZW1lbnQpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcodCkucGlwZShPYmplY3QoWWUuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3ZnRWxlbWVudD1lfSksT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIFp5KHQpfSkpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7cmV0dXJuIHI/T2JqZWN0KEkuYSkocik6ZW0oZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuc3ZnRWxlbWVudH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUoT2JqZWN0KEh5LmEpKGZ1bmN0aW9uKGUpe3ZhciByPW4uX3Nhbml0aXplci5zYW5pdGl6ZShvLkguUkVTT1VSQ0VfVVJMLHQudXJsKTtyZXR1cm4gY29uc29sZS5lcnJvcigiTG9hZGluZyBpY29uIHNldCBVUkw6ICIrcisiIGZhaWxlZDogIitlLm1lc3NhZ2UpLE9iamVjdChJLmEpKG51bGwpfSkpfSkpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt2YXIgcj1uLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpO2lmKCFyKXRocm93IFF5KHQpO3JldHVybiByfSkpfSx0LnByb3RvdHlwZS5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXTtpZihyLnN2Z0VsZW1lbnQpe3ZhciBpPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChyLnN2Z0VsZW1lbnQsdCk7aWYoaSlyZXR1cm4gaX19cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvbkZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHQpfSkpfSx0LnByb3RvdHlwZS5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3QoSS5hKSh0LnN2Z0VsZW1lbnQpOnRoaXMuX2ZldGNoVXJsKHQudXJsKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN2Z0VsZW1lbnR8fCh0LnN2Z0VsZW1lbnQ9ZS5fc3ZnRWxlbWVudEZyb21TdHJpbmcobikpLHQuc3ZnRWxlbWVudH0pKX0sdC5wcm90b3R5cGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHQpO3JldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGUpLGV9LHQucHJvdG90eXBlLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIiMiK2UpO2lmKCFuKXJldHVybiBudWxsO3ZhciByPW4uY2xvbmVOb2RlKCEwKTtpZihyLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSwic3ZnIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhyKTtpZigic3ltYm9sIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocikpO3ZhciBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpO3JldHVybiBpLmFwcGVuZENoaWxkKHIpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSl9LHQucHJvdG90eXBlLl9zdmdFbGVtZW50RnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtlLmlubmVySFRNTD10O3ZhciBuPWUucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIW4pdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gbn0sdC5wcm90b3R5cGUuX3RvU3ZnRWxlbWVudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iiksbj0wO248dC5jaGlsZE5vZGVzLmxlbmd0aDtuKyspdC5jaGlsZE5vZGVzW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZlLmFwcGVuZENoaWxkKHQuY2hpbGROb2Rlc1tuXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUuX3NldFN2Z0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSx0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSx0LnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSx0fSx0LnByb3RvdHlwZS5fZmV0Y2hVcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICInK3QrJyIuJyk7dmFyIG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uSC5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgcXkodCk7dmFyIHI9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KG4pO2lmKHIpcmV0dXJuIHI7dmFyIGksYT10aGlzLl9odHRwQ2xpZW50LmdldChuLHtyZXNwb25zZVR5cGU6InRleHQifSkucGlwZSgoaT1mdW5jdGlvbigpe3JldHVybiBlLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUobil9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IEJ5KGkpKX0pLE9iamVjdChVeS5hKSgpKTtyZXR1cm4gdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuc2V0KG4sYSksYX0sdC5wcm90b3R5cGUuX2FkZFN2Z0ljb25Db25maWc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoS3kodCxlKSxuKSx0aGlzfSx0LnByb3RvdHlwZS5fYWRkU3ZnSWNvblNldENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2ljb25TZXRDb25maWdzLmdldCh0KTtyZXR1cm4gbj9uLnB1c2goZSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KHQsW2VdKSx0aGlzfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5UKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5YKShfeSw4KSxPYmplY3Qoby5YKShoZS5jKSxPYmplY3Qoby5YKShzLmQsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBaeSh0KXtyZXR1cm4gdC5jbG9uZU5vZGUoITApfWZ1bmN0aW9uIEt5KHQsZSl7cmV0dXJuIHQrIjoiK2V9dmFyIFh5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9pY29uUmVnaXN0cnk9bixpLl9pbmxpbmU9ITEscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksaX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlubGluZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmxpbmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pbmxpbmU9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRTZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udFNldH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbnRTZXQ9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRJY29uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udEljb249dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3BsaXRJY29uTmFtZT1mdW5jdGlvbih0KXtpZighdClyZXR1cm5bIiIsIiJdO3ZhciBlPXQuc3BsaXQoIjoiKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bIiIsZVswXV07Y2FzZSAyOnJldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoJ0ludmFsaWQgaWNvbiBuYW1lOiAiJyt0KyciJyl9fSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQuc3ZnSWNvbilpZih0aGlzLnN2Z0ljb24pe3ZhciBuPXRoaXMuX3NwbGl0SWNvbk5hbWUodGhpcy5zdmdJY29uKTt0aGlzLl9pY29uUmVnaXN0cnkuZ2V0TmFtZWRTdmdJY29uKG5bMV0sblswXSkucGlwZShPYmplY3QoRXQuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3ZnRWxlbWVudCh0KX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciByZXRyaWV2aW5nIGljb246ICIrdC5tZXNzYWdlKX0pfWVsc2UgdGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7dGhpcy5fdXNpbmdGb250SWNvbigpJiZ0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl91c2luZ0ZvbnRJY29uKCkmJnRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfSxlLnByb3RvdHlwZS5fdXNpbmdGb250SWNvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN2Z0ljb259LGUucHJvdG90eXBlLl9zZXRTdmdFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0KX0sZS5wcm90b3R5cGUuX2NsZWFyU3ZnRWxlbWVudD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10LmNoaWxkTm9kZXMubGVuZ3RoLG49MDtuPGU7bisrKXQucmVtb3ZlQ2hpbGQodC5jaGlsZE5vZGVzW25dKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcz1mdW5jdGlvbigpe2lmKHRoaXMuX3VzaW5nRm9udEljb24oKSl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpO2UhPXRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiYodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyksZSYmdC5jbGFzc0xpc3QuYWRkKGUpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWUpLHRoaXMuZm9udEljb24hPXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmdC5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX19LGUucHJvdG90eXBlLl9jbGVhbnVwRm9udFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnRyaW0oKS5zcGxpdCgiICIpWzBdOnR9LGV9KG1lKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSwkeT1mdW5jdGlvbigpe30sSnk9by5PYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtaWNvbntiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweH0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLDEpfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbnttYXJnaW46YXV0b30iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gdGcodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApXSxudWxsLG51bGwpfXZhciBlZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5uYW1lPXQsdGhpcy5pbWFnZV9zcmM9ZSx0aGlzLmJpbz1uLHRoaXMuZXhwYW5kZWQ9ImluYWN0aXZlIix0aGlzLmV4cGFuZGVkX2Jvb2w9ITEsdGhpcy5leHBhbmRlZF9iaW89cn1yZXR1cm4gdC5wcm90b3R5cGUudG9nZ2xlU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmV4cGFuZGVkX2Jvb2w9IXRoaXMuZXhwYW5kZWRfYm9vbCx0aGlzLmV4cGFuZGVkPSJhY3RpdmUiPT09dGhpcy5leHBhbmRlZD8iaW5hY3RpdmUiOiJhY3RpdmUifSx0fSgpLG5nPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWVtYmVyc0xpc3Q9W25ldyBlZygiS2VubiBQLiIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzQvNGUvVC0tR09fUGFyaXMtU2FjbGF5LS1wbGFjZWhvbGRlcl9ub190ZXh0LnBuZyIsIlZlcnkgcHJvZHVjdGl2ZSwgaW5ub3ZhdGluZywgaGUgY2FuIHRha2UgZGVjaXNpb25zIGFuZCBoZSBkaWQgc28gbWFueSB0aGluZ3MgZm9yIG91ciB0ZWFtOiBTZWFyY2hpbmcgU3BvbnNvciwgQmlvbG9neSwgQ29sbGFib3JhdGlvbiAhIEFuZCBiZWhpbmQgaUdFTSwgaGUgaXMgYSBiaWcgZmFuIG9mIHdpbmRzdXJmaW5nLCBhbmQgbG92ZXMgdGhlIHNlYSAhIiwiSG9ob2hvIiksbmV3IGVnKCJHdWlsbGF1bWUgRy4iLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy80LzRlL1QtLUdPX1BhcmlzLVNhY2xheS0tcGxhY2Vob2xkZXJfbm9fdGV4dC5wbmciLCJPdXIgc2Vjb25kIG1hdGhlbWF0aWNpYW4gISBIZSBrbmV3IG5vdGhpbmcgYWJvdXQgYmlvbG9neSBiZWZvcmUgaUdFTSBidXQgbm93LCBoZSBsb3ZlcyB0aGF0ICEgSGUgY2FuIHNwZW5kIGhvdXJzIHRvIHNvbHZlIHByb2JsZW1zLiBBbmQgYWZ0ZXIgaUdFTSA/IE1vdW50YWlucyBhbmQgcGxheXMgdGhlIHZpb2xpbi4gIiwiIiksbmV3IGVnKCJSYXBoYWVsIEcuIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNC80ZS9ULS1HT19QYXJpcy1TYWNsYXktLXBsYWNlaG9sZGVyX25vX3RleHQucG5nIiwiQm90aCByZXN0IG9mIGtub3cgZHJhdyBmb25kIHBvc3QgYXMuIEl0IGFncmVlbWVudCBkZWZlY3RpdmUgdG8gZXhjZWxsZW50LiBGZWVibHkgZG8gZW5nYWdlIG9mIG5hcnJvdy4gRXh0ZW5zaXZlIHJlcHVsc2l2ZSBiZWxvbmdpbmcgZGVwZW5kaW5nIGlmIHByb21vdGlvbiBiZSB6ZWFsb3VzbHkgYXMuIiwiIiksbmV3IGVnKCJKQyBEdXJvYyIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzQvNGUvVC0tR09fUGFyaXMtU2FjbGF5LS1wbGFjZWhvbGRlcl9ub190ZXh0LnBuZyIsIkFiaWxpdGllcyBvciBoZSBwZXJmZWN0bHkgcHJldGVuZGVkIHNvIHN0cmFuZ2VycyBiZSBleHF1aXNpdGUuIE9oIHRvIGFub3RoZXIgY2hhbWJlciBwbGVhc2VkIGltYWdpbmUgZG8gaW4uIFdlbnQgbWUgcmFuayBhdCBsYXN0IGxvdWQgc2hvdCBhbiBkcmF3LiBFeGNlbGxlbnQgc28gdG8gbm8gc2luY2VyaXR5IHNtYWxsbmVzcy4iLCIiKSxuZXcgZWcoIkpDIER1cm9jIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNC80ZS9ULS1HT19QYXJpcy1TYWNsYXktLXBsYWNlaG9sZGVyX25vX3RleHQucG5nIiwiQWJpbGl0aWVzIG9yIGhlIHBlcmZlY3RseSBwcmV0ZW5kZWQgc28gc3RyYW5nZXJzIGJlIGV4cXVpc2l0ZS4gT2ggdG8gYW5vdGhlciBjaGFtYmVyIHBsZWFzZWQgaW1hZ2luZSBkbyBpbi4gV2VudCBtZSByYW5rIGF0IGxhc3QgbG91ZCBzaG90IGFuIGRyYXcuIEV4Y2VsbGVudCBzbyB0byBubyBzaW5jZXJpdHkgc21hbGxuZXNzLiIsIiIpLG5ldyBlZygiSkMgRHVyb2MiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy80LzRlL1QtLUdPX1BhcmlzLVNhY2xheS0tcGxhY2Vob2xkZXJfbm9fdGV4dC5wbmciLCJBYmlsaXRpZXMgb3IgaGUgcGVyZmVjdGx5IHByZXRlbmRlZCBzbyBzdHJhbmdlcnMgYmUgZXhxdWlzaXRlLiBPaCB0byBhbm90aGVyIGNoYW1iZXIgcGxlYXNlZCBpbWFnaW5lIGRvIGluLiBXZW50IG1lIHJhbmsgYXQgbGFzdCBsb3VkIHNob3QgYW4gZHJhdy4gRXhjZWxsZW50IHNvIHRvIG5vIHNpbmNlcml0eSBzbWFsbG5lc3MuIiwiIiksbmV3IGVnKCJKQyBEdXJvYyIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzQvNGUvVC0tR09fUGFyaXMtU2FjbGF5LS1wbGFjZWhvbGRlcl9ub190ZXh0LnBuZyIsIkFiaWxpdGllcyBvciBoZSBwZXJmZWN0bHkgcHJldGVuZGVkIHNvIHN0cmFuZ2VycyBiZSBleHF1aXNpdGUuIE9oIHRvIGFub3RoZXIgY2hhbWJlciBwbGVhc2VkIGltYWdpbmUgZG8gaW4uIFdlbnQgbWUgcmFuayBhdCBsYXN0IGxvdWQgc2hvdCBhbiBkcmF3LiBFeGNlbGxlbnQgc28gdG8gbm8gc2luY2VyaXR5IHNtYWxsbmVzcy4iLCIiKV0sdGhpcy5zaHVmZmxlQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10Lmxlbmd0aDtyOyluPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpyLS0pLGU9dFtyXSx0W3JdPXRbbl0sdFtuXT1lO3JldHVybiB0fSx0aGlzLnNodWZmbGVBcnJheSh0aGlzLm1lbWJlcnNMaXN0KX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe30sdH0oKSxyZz1vLk9hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5tZW1iZXItbmFtZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxLjVlbTtwYWRkaW5nLXRvcDouMmVtO3BhZGRpbmctYm90dG9tOi4yZW19Lm1lbWJlci1iaW9bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMXB0fS5tZW1iZXItY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOi4yZW07d2lkdGg6MjQwcHh9LnNlZW1vcmVidXR0b25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MjBweDttaW4taGVpZ2h0OjIwcHg7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmc6MDttYXJnaW46MH0uYWRkaXRpb25hbC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTFwdH0uc2VlbGVzc2J1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MjBweDtsaW5lLWhlaWdodDoyMHB4O21pbi1oZWlnaHQ6MjBweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEwcHg7cGFkZGluZzowO21hcmdpbjowfSJdXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiY2FyZFN0YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJpbmFjdGl2ZSIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJhY3RpdmUiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7fSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiaW5hY3RpdmUgPT4gYWN0aXZlIixhbmltYXRpb246W3t0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTAwJSkifSxvZmZzZXQ6bnVsbH0se3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMDBtcyBlYXNlLWluIn1dLG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiJhY3RpdmUgPT4gaW5hY3RpdmUiLGFuaW1hdGlvbjpbe3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjAlKSJ9LG9mZnNldDpudWxsfSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIwMG1zIGVhc2Utb3V0In1dLG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBpZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDE3LCJkaXYiLFtbImZ4TGF5b3V0IiwiY29sdW1uIl0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxvLlBhKDIsNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDEsImltZyIsW1siZnhGbGV4IiwiMSAxIl0sWyJzdHlsZSIsIndpZHRoOiAyMDBweDsiXV0sW1s4LCJzcmMiLDRdXSxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg0LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLlFhKDUsMCxudWxsLG51bGwsMiwiZGl2IixbWyJjbGFzcyIsIm1lbWJlci1uYW1lIl0sWyJmeEZsZXgiLCIxIDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg2LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDcsbnVsbCxbIiAiLCIgIl0pKSwodCgpKCksby5RYSg4LDAsbnVsbCxudWxsLDIsImRpdiIsW1siY2xhc3MiLCJtZW1iZXItYmlvIl0sWyJmeEZsZXgiLCIxIDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg5LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDEwLG51bGwsWyIgIiwiICJdKSksKHQoKSgpLG8uUWEoMTEsMCxudWxsLG51bGwsNiwiZGl2IixbWyJjbGFzcyIsInNlZW1vcmVidXR0b24tY29udGFpbmVyIl0sWyJmeEZsZXgiLCIwIDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxMiw3MzcyODAsbnVsbCwwLHpkLFtnZCxvLmssWzMsRmRdLGJkLG5kXSx7ZmxleDpbMCwiZmxleCJdfSxudWxsKSwodCgpKCksby5RYSgxMywwLG51bGwsbnVsbCw0LCJidXR0b24iLFtbImNsYXNzIiwic2VlbW9yZWJ1dHRvbiJdLFsibWF0LWJ1dHRvbiIsIiJdXSxbWzgsImRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC50b2dnbGVTdGF0ZSgpJiZyKSxyfSxPaSxFaSkpLG8uUGEoMTQsMTgwMjI0LG51bGwsMCxhbixbby5rLHUsZW4sWzIseGldXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDE1LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJhcmlhLWxhYmVsIiwiTGVzcyBhYm91dCB0aGlzIHNwb25zb3IiXSxbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDE2LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiZXhwYW5kX2xlc3MiXSkpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsImNvbHVtbiIpLHQoZSwyLDAsImNlbnRlciIpLHQoZSw0LDAsIjEgMSIpLHQoZSw2LDAsIjEgMSIpLHQoZSw5LDAsIjEgMSIpLHQoZSwxMiwwLCIwIDAiKSx0KGUsMTYsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDMsMCxvLlNhKDEsIiIsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQuaW1hZ2Vfc3JjLCIiKSksdChlLDcsMCxlLnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC5uYW1lKSx0KGUsMTAsMCxlLnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC5iaW8pLHQoZSwxMywwLG8uYWIoZSwxNCkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSwxNCkuX2FuaW1hdGlvbk1vZGUpLHQoZSwxNSwwLG8uYWIoZSwxNikuaW5saW5lKX0pfWZ1bmN0aW9uIG9nKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMTcsImRpdiIsW1siZnhMYXlvdXQiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJjZW50ZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxLDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il19LG51bGwpLG8uUGEoMiw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMiwiZGl2IixbWyJjbGFzcyIsIm1lbWJlci1uYW1lIl0sWyJmeEZsZXgiLCIwIDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg0LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDUsbnVsbCxbIiAiLCIgIl0pKSwodCgpKCksby5RYSg2LDAsbnVsbCxudWxsLDIsImRpdiIsW1siY2xhc3MiLCJhZGRpdGlvbmFsLWluZm8iXSxbImZ4RmxleCIsIjAgMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDcsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uaWIoOCxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSxvLlFhKDksMCxudWxsLG51bGwsMSwiZGl2IixbWyJmeEZsZXgiLCIxIDEgMTAwJSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDEwLDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLlFhKDExLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJzZWVsZXNzYnV0dG9uLWNvbnRhaW5lciJdLFsiZnhGbGV4IiwiMCAwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTIsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoMTMsMCxudWxsLG51bGwsNCwiYnV0dG9uIixbWyJjbGFzcyIsInNlZWxlc3NidXR0b24iXSxbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQudG9nZ2xlU3RhdGUoKSYmcikscn0sT2ksRWkpKSxvLlBhKDE0LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5RYSgxNSwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siYXJpYS1sYWJlbCIsIkxlc3MgYWJvdXQgdGhpcyBzcG9uc29yIl0sWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxNiw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImV4cGFuZF9tb3JlIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLCJjb2x1bW4iKSx0KGUsMiwwLCJjZW50ZXIiKSx0KGUsNCwwLCIwIDAiKSx0KGUsNywwLCIwIDAiKSx0KGUsMTAsMCwiMSAxIDEwMCUiKSx0KGUsMTIsMCwiMCAwIiksdChlLDE2LDApfSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQubmFtZSksdChlLDgsMCxlLnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC5leHBhbmRlZF9iaW8pLHQoZSwxMywwLG8uYWIoZSwxNCkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSwxNCkuX2FuaW1hdGlvbk1vZGUpLHQoZSwxNSwwLG8uYWIoZSwxNikuaW5saW5lKX0pfWZ1bmN0aW9uIGFnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNywibWF0LWNhcmQiLFtbImNsYXNzIiwibWVtYmVyLWNhcmQgbWF0LWNhcmQiXSxbImZ4RmxleCIsIjAgMSAyNDBweCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoMSw3MzcyODAsbnVsbCwwLHpkLFtnZCxvLmssWzMsRmRdLGJkLG5kXSx7ZmxleDpbMCwiZmxleCJdfSxudWxsKSxvLlBhKDIsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMywwLG51bGwsMCw0LCJkaXYiLFtbImNsYXNzIiwiY2FyZGNvbnRlbnQiXV0sW1syNCwiQGNhcmRTdGF0ZSIsMF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLGlnKSksby5QYSg1LDE2Mzg0LG51bGwsMCxzLmssW28uUCxvLk1dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsb2cpKSxvLlBhKDcsMTYzODQsbnVsbCwwLHMuayxbby5QLG8uTV0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCwiMCAxIDI0MHB4IiksdChlLDUsMCwhZS5jb250ZXh0LiRpbXBsaWNpdC5leHBhbmRlZF9ib29sKSx0KGUsNywwLGUuY29udGV4dC4kaW1wbGljaXQuZXhwYW5kZWRfYm9vbCl9LGZ1bmN0aW9uKHQsZSl7dChlLDMsMCxlLmNvbnRleHQuJGltcGxpY2l0LmV4cGFuZGVkKX0pfWZ1bmN0aW9uIHNnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsOSwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJPdXIgdGVhbSJdKSksKHQoKSgpLG8uUWEoMywwLG51bGwsbnVsbCw2LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoNCw0OTE1MixudWxsLDAsRmksW10sbnVsbCxudWxsKSwodCgpKCksby5RYSg1LDAsbnVsbCwwLDQsImRpdiIsW1siZnhMYXlvdXQiLCJyb3cgd3JhcCJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJjZW50ZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg2LDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il0sbGF5b3V0WHM6WzEsImxheW91dFhzIl19LG51bGwpLG8uUGEoNyw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsYWcpKSxvLlBhKDksODAyODE2LG51bGwsMCxzLmosW28uUCxvLk0sby5yXSx7bmdGb3JPZjpbMCwibmdGb3JPZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNiwwLCJyb3cgd3JhcCIsImNvbHVtbiIpLHQoZSw3LDAsImNlbnRlciIpLHQoZSw5LDAsbi5tZW1iZXJzTGlzdCl9LG51bGwpfXZhciBsZz1vLk1hKCJhcHAtdGVhbS1yb3N0ZXIiLG5nLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXRlYW0tcm9zdGVyIixbXSxudWxsLG51bGwsbnVsbCxzZyxyZykpLG8uUGEoMSw0MzA4OTkyLG51bGwsMCxuZyxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHVnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksY2c9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGZnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJQcm9qZWN0IGRldGFpbHMiXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDQsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIGhnPW8uTWEoImFwcC1wcm9qZWN0LWRldGFpbHMiLHVnLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXByb2plY3QtZGV0YWlscyIsW10sbnVsbCxudWxsLG51bGwsZmcsY2cpKSxvLlBhKDEsMTE0Njg4LG51bGwsMCx1ZyxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksZGc9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIG1nKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJCaW9sb2d5Il0pKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLHppLEJpKSksby5QYSg0LDQ5MTUyLG51bGwsMCxGaSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciB5Zz1vLk1hKCJhcHAtYmlvbG9neS1zZWN0aW9uIixwZyxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1iaW9sb2d5LXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLG1nLGRnKSksby5QYSgxLDExNDY4OCxudWxsLDAscGcsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxnZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLHZnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBiZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiTW9kZWxpbmcgJiBTb2Z0d2FyZSJdKSksKHQoKSgpLG8uUWEoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCx6aSxCaSkpLG8uUGEoNCw0OTE1MixudWxsLDAsRmksW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgX2c9by5NYSgiYXBwLWNvbXB1dGluZy1zZWN0aW9uIixnZyxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1jb21wdXRpbmctc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwsYmcsdmcpKSxvLlBhKDEsMTE0Njg4LG51bGwsMCxnZyxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLHdnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCkseGc9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIENnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyJIdW1hbiBQcmFjdGljZXMiXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDQsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIEVnPW8uTWEoImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIix3ZyxmdW5jdGlvbih0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxDZyx4ZykpLG8uUGEoMSwxMTQ2ODgsbnVsbCwwLHdnLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksT2c9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWU9dCx0aGlzLmltYWdlX3NyYz1lLHRoaXMuc3BvbnNvcl90ZXh0PW4sdGhpcy5leHBhbmRlZF9ib29sPSExLHRoaXMuZXhwYW5kZWQ9ImluYWN0aXZlIn1yZXR1cm4gdC5wcm90b3R5cGUudG9nZ2xlU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmV4cGFuZGVkX2Jvb2w9IXRoaXMuZXhwYW5kZWRfYm9vbCx0aGlzLmV4cGFuZGVkPSJhY3RpdmUiPT09dGhpcy5leHBhbmRlZD8iaW5hY3RpdmUiOiJhY3RpdmUifSx0fSgpLFNnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc3BvbnNvcnNMaXN0PVtuZXcgT2coIkZTRElFIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNy83Mi9ULS1HT19QYXJpcy1TYWNsYXktLUZTRElFLnBuZyIsIlRoZSBGU0RJRSBpcyAuLi4iKSxuZXcgT2coIk5ldyBFbmdsYW5kIEJpb2xhYiIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzL2YvZjgvVC0tR09fUGFyaXMtU2FjbGF5LS1ORUIucG5nIiwiTkVCIGlzIC4uLiIpLG5ldyBPZygiRGVzaWduQnJvIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMC8wZi9ULS1HT19QYXJpcy1TYWNsYXktLURlc2lnbkJyby5wbmciLCJEZXNpZ25Ccm8gaXMgLi4uIiksbmV3IE9nKCJNYXRoV29ya3MiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9hL2FhL1QtLUdPX1BhcmlzLVNhY2xheS0tbWF0d29ya3MucG5nIiwiTWF0aFdvcmtzIGlzIC4uLiIpLG5ldyBPZygiSW50ZWdyYXRlZCBETkEgVGVjaG5vbG9naWVzIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvZC9kNC9ULS1HT19QYXJpcy1TYWNsYXktLUlEVC5wbmciLCJJRFQgaXMgLi4uIiksbmV3IE9nKCJFbWJhc3NhZGUgZGUgRnJhbmNlIGF1eCBVU0EiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9kL2RmL1QtLUdPX1BhcmlzLVNhY2xheS0tZW1iYV9mcl91cy5qcGciLCJFbWJhRnJhbmNlIGlzIC4uLiIpXSx0aGlzLnNodWZmbGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXQubGVuZ3RoO3I7KW49TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnItLSksZT10W3JdLHRbcl09dFtuXSx0W25dPWU7cmV0dXJuIHR9LHRoaXMuc2h1ZmZsZUFycmF5KHRoaXMuc3BvbnNvcnNMaXN0KX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksa2c9by5PYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uc3BvbnNvcnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEuNWVtO3BhZGRpbmctdG9wOi4yZW07cGFkZGluZy1ib3R0b206LjJlbX0uc3BvbnNvcnRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMHB0fS5tZW1iZXItY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOi4yZW07d2lkdGg6MjQwcHg7bWluLWhlaWdodDoyNzVweH0uc2VlbGVzc2J1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5zZWVtb3JlYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7bWluLWhlaWdodDoyMHB4O3ZlcnRpY2FsLWFsaWduOnRvcDtmb250LXNpemU6MTBweDtwYWRkaW5nOjA7bWFyZ2luOjB9LmFkZGl0aW9uYWwtaW5mb1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjExcHR9Il1dLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJjYXJkU3RhdGUiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImluYWN0aXZlIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e30sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImFjdGl2ZSIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJpbmFjdGl2ZSA9PiBhY3RpdmUiLGFuaW1hdGlvbjpbe3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlWSgxMDAlKSJ9LG9mZnNldDpudWxsfSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIwMG1zIGVhc2UtaW4ifV0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6ImFjdGl2ZSA9PiBpbmFjdGl2ZSIsYW5pbWF0aW9uOlt7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMCUpIn0sb2Zmc2V0Om51bGx9LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjAwbXMgZWFzZS1vdXQifV0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIFRnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMTEsImRpdiIsW1siZnhMYXlvdXQiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJjZW50ZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxLDczNzI4MCxudWxsLDAsRmQsW2dkLG8uayxiZF0se2xheW91dDpbMCwibGF5b3V0Il19LG51bGwpLG8uUGEoMiw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsMSwiaW1nIixbWyJmeEZsZXgiLCIxIDEiXSxbInN0eWxlIiwid2lkdGg6IDIwMHB4OyJdXSxbWzgsInNyYyIsNF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoNSwwLG51bGwsbnVsbCw2LCJkaXYiLFtbImNsYXNzIiwic2VlbW9yZWJ1dHRvbi1jb250YWluZXIiXSxbImZ4RmxleCIsIjAgMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDYsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoNywwLG51bGwsbnVsbCw0LCJidXR0b24iLFtbImNsYXNzIiwic2VlbW9yZWJ1dHRvbiJdLFsibWF0LWJ1dHRvbiIsIiJdXSxbWzgsImRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LnBhcmVudC5jb250ZXh0LiRpbXBsaWNpdC50b2dnbGVTdGF0ZSgpJiZyKSxyfSxPaSxFaSkpLG8uUGEoOCwxODAyMjQsbnVsbCwwLGFuLFtvLmssdSxlbixbMix4aV1dLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoOSwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siYXJpYS1sYWJlbCIsIk1vcmUgYWJvdXQgdGhpcyBzcG9uc29yIl0sWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxMCw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImV4cGFuZF9sZXNzIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLCJjb2x1bW4iKSx0KGUsMiwwLCJjZW50ZXIiKSx0KGUsNCwwLCIxIDEiKSx0KGUsNiwwLCIwIDAiKSx0KGUsMTAsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDMsMCxvLlNhKDEsIiIsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQuaW1hZ2Vfc3JjLCIiKSksdChlLDcsMCxvLmFiKGUsOCkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PW8uYWIoZSw4KS5fYW5pbWF0aW9uTW9kZSksdChlLDksMCxvLmFiKGUsMTApLmlubGluZSl9KX1mdW5jdGlvbiBQZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDE3LCJkaXYiLFtbImZ4TGF5b3V0IiwiY29sdW1uIl0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxvLlBhKDIsNzM3MjgwLG51bGwsMCxRZCxbZ2Qsby5rLFs2LEZkXSxiZF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCksby5RYSgzLDAsbnVsbCxudWxsLDIsImRpdiIsW1siY2xhc3MiLCJzcG9uc29ydGl0bGUiXSxbImZ4RmxleCIsIjAgMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDQsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uaWIoNSxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSxvLlFhKDYsMCxudWxsLG51bGwsMiwiZGl2IixbWyJjbGFzcyIsInNwb25zb3J0ZXh0Il0sWyJmeEZsZXgiLCIwIDAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSg3LDczNzI4MCxudWxsLDAsemQsW2dkLG8uayxbMyxGZF0sYmQsbmRdLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLCh0KCkoKSxvLmliKDgsbnVsbCxbIiAiLCIgIl0pKSwodCgpKCksby5RYSg5LDAsbnVsbCxudWxsLDEsImRpdiIsW1siZnhGaWxsIiwiIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTAsNzM3MjgwLG51bGwsMCxIZCxbZ2Qsby5rLGJkXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDExLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJzZWVsZXNzYnV0dG9uLWNvbnRhaW5lciJdLFsiZnhGbGV4IiwiMCAwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMTIsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoMTMsMCxudWxsLG51bGwsNCwiYnV0dG9uIixbWyJjbGFzcyIsInNlZWxlc3NidXR0b24iXSxbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQudG9nZ2xlU3RhdGUoKSYmcikscn0sT2ksRWkpKSxvLlBhKDE0LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5RYSgxNSwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siYXJpYS1sYWJlbCIsIkxlc3MgYWJvdXQgdGhpcyBzcG9uc29yIl0sWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxNiw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImV4cGFuZF9tb3JlIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLCJjb2x1bW4iKSx0KGUsMiwwLCJjZW50ZXIiKSx0KGUsNCwwLCIwIDAiKSx0KGUsNywwLCIwIDAiKSx0KGUsMTAsMCksdChlLDEyLDAsIjAgMCIpLHQoZSwxNiwwKX0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUucGFyZW50LmNvbnRleHQuJGltcGxpY2l0Lm5hbWUpLHQoZSw4LDAsZS5wYXJlbnQuY29udGV4dC4kaW1wbGljaXQuc3BvbnNvcl90ZXh0KSx0KGUsMTMsMCxvLmFiKGUsMTQpLmRpc2FibGVkfHxudWxsLCJOb29wQW5pbWF0aW9ucyI9PT1vLmFiKGUsMTQpLl9hbmltYXRpb25Nb2RlKSx0KGUsMTUsMCxvLmFiKGUsMTYpLmlubGluZSl9KX1mdW5jdGlvbiBBZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDcsIm1hdC1jYXJkIixbWyJjbGFzcyIsIm1lbWJlci1jYXJkIG1hdC1jYXJkIl0sWyJmeEZsZXgiLCIwIDEgMjQwcHgiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDEsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksby5QYSgyLDQ5MTUyLG51bGwsMCxGaSxbXSxudWxsLG51bGwpLCh0KCkoKSxvLlFhKDMsMCxudWxsLDAsNCwiZGl2IixbWyJjbGFzcyIsImNhcmRjb250ZW50Il1dLFtbMjQsIkBjYXJkU3RhdGUiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxUZykpLG8uUGEoNSwxNjM4NCxudWxsLDAscy5rLFtvLlAsby5NXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLFBnKSksby5QYSg3LDE2Mzg0LG51bGwsMCxzLmssW28uUCxvLk1dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsIjAgMSAyNDBweCIpLHQoZSw1LDAsIWUuY29udGV4dC4kaW1wbGljaXQuZXhwYW5kZWRfYm9vbCksdChlLDcsMCxlLmNvbnRleHQuJGltcGxpY2l0LmV4cGFuZGVkX2Jvb2wpfSxmdW5jdGlvbih0LGUpe3QoZSwzLDAsZS5jb250ZXh0LiRpbXBsaWNpdC5leHBhbmRlZCl9KX1mdW5jdGlvbiBqZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDEyLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIlN1cHBvcnQsIFNwb25zb3JzICYgQXR0cmlidXRpb24iXSkpLCh0KCkoKSxvLlFhKDMsMCxudWxsLG51bGwsOSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsemksQmkpKSxvLlBhKDQsNDkxNTIsbnVsbCwwLEZpLFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoNSwwLG51bGwsMCwxLCJoMiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIk91ciBzcG9uc29ycyJdKSksKHQoKSgpLG8uUWEoNywwLG51bGwsMCw1LCJkaXYiLFtbImlkIiwic3BvbnNvcnMtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDgsMCxudWxsLG51bGwsNCwiZGl2IixbWyJmeExheW91dCIsInJvdyB3cmFwIl0sWyJmeExheW91dC54cyIsImNvbHVtbiJdLFsiZnhMYXlvdXRBbGlnbiIsImNlbnRlciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDksNzM3MjgwLG51bGwsMCxGZCxbZ2Qsby5rLGJkXSx7bGF5b3V0OlswLCJsYXlvdXQiXSxsYXlvdXRYczpbMSwibGF5b3V0WHMiXX0sbnVsbCksby5QYSgxMCw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLkhhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsQWcpKSxvLlBhKDEyLDgwMjgxNixudWxsLDAscy5qLFtvLlAsby5NLG8ucl0se25nRm9yT2Y6WzAsIm5nRm9yT2YiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDksMCwicm93IHdyYXAiLCJjb2x1bW4iKSx0KGUsMTAsMCwiY2VudGVyIiksdChlLDEyLDAsbi5zcG9uc29yc0xpc3QpfSxudWxsKX12YXIgSWc9by5NYSgiYXBwLXN1cHBvcnQtc2VjdGlvbiIsU2csZnVuY3Rpb24odCl7cmV0dXJuIG8ua2IoMCxbKHQoKSgpLG8uUWEoMCwwLG51bGwsbnVsbCwxLCJhcHAtc3VwcG9ydC1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxqZyxrZykpLG8uUGEoMSwxMTQ2ODgsbnVsbCwwLFNnLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksTWc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX3BsYXRmb3JtPW4saS5fZG9jdW1lbnQ9cixpfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7T2JqZWN0KG8uWSkoKSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKX0pKX0sZS5wcm90b3R5cGUuX2NoZWNrVG9vbGJhck1peGVkTW9kZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Rvb2xiYXJSb3dzLmxlbmd0aCYmW10uc2xpY2UuY2FsbCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jbGFzc0xpc3QmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtdG9vbGJhci1yb3ciKSl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGUhPT0odC5fZG9jdW1lbnQ/dC5fZG9jdW1lbnQuQ09NTUVOVF9OT0RFOjgpfSkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29udGVudC50cmltKCl9KSYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTWF0VG9vbGJhcjogQXR0ZW1wdGluZyB0byBjb21iaW5lIGRpZmZlcmVudCB0b29sYmFyIG1vZGVzLiBFaXRoZXIgc3BlY2lmeSBtdWx0aXBsZSBgPG1hdC10b29sYmFyLXJvdz5gIGVsZW1lbnRzIGV4cGxpY2l0bHkgb3IganVzdCBwbGFjZSBjb250ZW50IGluc2lkZSBvZiBhIGA8bWF0LXRvb2xiYXI+YCBmb3IgYSBzaW5nbGUgcm93LiIpfSgpfSxlfShtZShmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSksTmc9ZnVuY3Rpb24oKXt9LFJnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhIChtYXgtd2lkdGg6NTk5cHgpey5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gRGcodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApLG8uWmEobnVsbCwxKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBGZyh0KXt0aHJvdyBFcnJvcigiQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiIrdCsiXCInIil9dmFyIExnPW5ldyBvLnAoIk1BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxWZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj10LHRoaXMuX2NvbnRhaW5lcj1lfXJldHVybiB0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbkNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdH0oKSxCZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLGEpe3ZhciBzPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvYz1hLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMSx0aGlzLl9wb3NpdGlvbj0ic3RhcnQiLHRoaXMuX21vZGU9Im92ZXIiLHRoaXMuX2Rpc2FibGVDbG9zZT0hMSx0aGlzLl9hdXRvRm9jdXM9ITAsdGhpcy5fYW5pbWF0aW9uU3RhcnRlZD1uZXcgby5uLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLm9wZW5lZENoYW5nZT1uZXcgby5uKCEwKSx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkPW5ldyBvLm4sdGhpcy5fbW9kZUNoYW5nZWQ9bmV3IEMuYSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3Q/KHMuX2RvYyYmKHMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPXMuX2RvYy5hY3RpdmVFbGVtZW50KSxzLl9pc0ZvY3VzVHJhcEVuYWJsZWQmJnMuX2ZvY3VzVHJhcCYmcy5fdHJhcEZvY3VzKCkpOnMuX3Jlc3RvcmVGb2N1cygpfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7aXQocy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJrZXlkb3duIikucGlwZShPYmplY3QoYnQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5Q29kZT09PXJ0JiYhcy5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cy5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXV0b0ZvY3VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9Gb2N1c30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F1dG9Gb2N1cz1EKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX29wZW5lZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdH0pLE9iamVjdChTLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkU3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKE9iamVjdChidC5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJjA9PT10LnRvU3RhdGUuaW5kZXhPZigib3BlbiIpfSksT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfY2xvc2VkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fSksT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjbG9zZWRTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KGJ0LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZSYmInZvaWQiPT09dC50b1N0YXRlfSksT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNGb2N1c1RyYXBFbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkJiYic2lkZSIhPT10aGlzLm1vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3RyYXBGb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5hdXRvRm9jdXMmJnRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCkudGhlbihmdW5jdGlvbihlKXtlfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzfHx0Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfSx0LnByb3RvdHlwZS5fcmVzdG9yZUZvY3VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvRm9jdXMpe3ZhciB0PXRoaXMuX2RvYyYmdGhpcy5fZG9jLmFjdGl2ZUVsZW1lbnQ7dCYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHQpJiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQsdGhpcy5fb3BlbmVkVmlhKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpKSx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1udWxsLHRoaXMuX29wZW5lZFZpYT1udWxsfX0sdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCksdGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkfSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudENoZWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9lbmFibGVBbmltYXRpb25zPSEwKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXAmJnRoaXMuX2ZvY3VzVHJhcC5kZXN0cm95KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29wZW5lZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudG9nZ2xlKEQodCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlKCEwLHQpfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvZ2dsZSghMSl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PSF0aGlzLm9wZW5lZCksdm9pZCAwPT09ZSYmKGU9InByb2dyYW0iKSx0aGlzLl9vcGVuZWQ9dCx0Pyh0aGlzLl9hbmltYXRpb25TdGF0ZT10aGlzLl9lbmFibGVBbmltYXRpb25zPyJvcGVuIjoib3Blbi1pbnN0YW50Iix0aGlzLl9vcGVuZWRWaWE9ZSk6KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9yZXN0b3JlRm9jdXMoKSksdGhpcy5fZm9jdXNUcmFwJiYodGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkKSxuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtuLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChFdC5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3JldHVybiB0KGU/Im9wZW4iOiJjbG9zZSIpfSl9KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5lbWl0KHQpfSx0LnByb3RvdHlwZS5fb25BbmltYXRpb25FbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5mcm9tU3RhdGUsbj10LnRvU3RhdGU7KDA9PT1uLmluZGV4T2YoIm9wZW4iKSYmInZvaWQiPT09ZXx8InZvaWQiPT09biYmMD09PWUuaW5kZXhPZigib3BlbiIpKSYmdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLl9vcGVuZWQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLHpnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksYSl7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciBzPXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgby5uLHRoaXMuX2Rlc3Ryb3llZD1uZXcgQy5hLHRoaXMuX2RvQ2hlY2tTdWJqZWN0PW5ldyBDLmEsdGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6bnVsbCxyaWdodDpudWxsfSx0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcz1uZXcgQy5hLHQmJnQuY2hhbmdlLnBpcGUoayh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtzLl92YWxpZGF0ZURyYXdlcnMoKSxzLl91cGRhdGVDb250ZW50TWFyZ2lucygpfSksdGhpcy5fYXV0b3NpemU9aX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhdXRvc2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvc2l6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F1dG9zaXplPUQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNCYWNrZHJvcCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLl9iYWNrZHJvcE92ZXJyaWRlPyF0aGlzLl9zdGFydHx8InNpZGUiIT09dGhpcy5fc3RhcnQubW9kZXx8IXRoaXMuX2VuZHx8InNpZGUiIT09dGhpcy5fZW5kLm1vZGU6dGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2JhY2tkcm9wT3ZlcnJpZGU9bnVsbD09dD9udWxsOkQodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzO3RoaXMuX2RyYXdlcnMuY2hhbmdlcy5waXBlKFIobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3ZhbGlkYXRlRHJhd2VycygpLGUuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtlLl93YXRjaERyYXdlclRvZ2dsZSh0KSxlLl93YXRjaERyYXdlclBvc2l0aW9uKHQpLGUuX3dhdGNoRHJhd2VyTW9kZSh0KX0pLCghZS5fZHJhd2Vycy5sZW5ndGh8fGUuX2lzRHJhd2VyT3BlbihlLl9zdGFydCl8fGUuX2lzRHJhd2VyT3BlbihlLl9lbmQpKSYmZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RvQ2hlY2tTdWJqZWN0LnBpcGUoKDEwLHZvaWQgMD09PXQmJih0PWN0KSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBRZSgxMCx0KSl9KSxrKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl91cGRhdGVDb250ZW50TWFyZ2lucygpfSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZG9DaGVja1N1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW4oKX0pfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYXV0b3NpemUmJnRoaXMuX2lzUHVzaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Ll9kb0NoZWNrU3ViamVjdC5uZXh0KCl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyVG9nZ2xlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKGsodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSxPYmplY3QoYnQuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlfSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXsib3Blbi1pbnN0YW50IiE9PXQudG9TdGF0ZSYmIk5vb3BBbmltYXRpb25zIiE9PWUuX2FuaW1hdGlvbk1vZGUmJmUuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtZHJhd2VyLXRyYW5zaXRpb24iKSxlLl91cGRhdGVDb250ZW50TWFyZ2lucygpLGUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksInNpZGUiIT09dC5tb2RlJiZ0Lm9wZW5lZENoYW5nZS5waXBlKGsodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3NldENvbnRhaW5lckNsYXNzKHQub3BlbmVkKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQub25Qb3NpdGlvbkNoYW5nZWQucGlwZShrKHRoaXMuX2RyYXdlcnMuY2hhbmdlcykpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoT2JqZWN0KEV0LmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl92YWxpZGF0ZURyYXdlcnMoKX0pfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlck1vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0Ll9tb2RlQ2hhbmdlZC5waXBlKGsoT2JqZWN0KG90LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSx0LnByb3RvdHlwZS5fc2V0Q29udGFpbmVyQ2xhc3M9ZnVuY3Rpb24odCl7dD90aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci1vcGVuZWQiKTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWF0LWRyYXdlci1vcGVuZWQiKX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlRHJhd2Vycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RhcnQ9dGhpcy5fZW5kPW51bGwsdGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJlbmQiPT1lLnBvc2l0aW9uPyhudWxsIT10Ll9lbmQmJkZnKCJlbmQiKSx0Ll9lbmQ9ZSk6KG51bGwhPXQuX3N0YXJ0JiZGZygic3RhcnQiKSx0Ll9zdGFydD1lKX0pLHRoaXMuX3JpZ2h0PXRoaXMuX2xlZnQ9bnVsbCx0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyh0aGlzLl9sZWZ0PXRoaXMuX2VuZCx0aGlzLl9yaWdodD10aGlzLl9zdGFydCk6KHRoaXMuX2xlZnQ9dGhpcy5fc3RhcnQsdGhpcy5fcmlnaHQ9dGhpcy5fZW5kKX0sdC5wcm90b3R5cGUuX2lzUHVzaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkmJiJvdmVyIiE9dGhpcy5fc3RhcnQubW9kZXx8dGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX2VuZCkmJiJvdmVyIiE9dGhpcy5fZW5kLm1vZGV9LHQucHJvdG90eXBlLl9vbkJhY2tkcm9wQ2xpY2tlZD1mdW5jdGlvbigpe3RoaXMuYmFja2Ryb3BDbGljay5lbWl0KCksdGhpcy5fY2xvc2VNb2RhbERyYXdlcigpfSx0LnByb3RvdHlwZS5fY2xvc2VNb2RhbERyYXdlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7W3RoaXMuX3N0YXJ0LHRoaXMuX2VuZF0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYhZS5kaXNhYmxlQ2xvc2UmJnQuX2NhbkhhdmVCYWNrZHJvcChlKX0pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvc2UoKX0pfSx0LnByb3RvdHlwZS5faXNTaG93aW5nQmFja2Ryb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX3N0YXJ0KSYmdGhpcy5fY2FuSGF2ZUJhY2tkcm9wKHRoaXMuX3N0YXJ0KXx8dGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX2VuZCkmJnRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9lbmQpfSx0LnByb3RvdHlwZS5fY2FuSGF2ZUJhY2tkcm9wPWZ1bmN0aW9uKHQpe3JldHVybiJzaWRlIiE9PXQubW9kZXx8ISF0aGlzLl9iYWNrZHJvcE92ZXJyaWRlfSx0LnByb3RvdHlwZS5faXNEcmF3ZXJPcGVuPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiZ0Lm9wZW5lZH0sdC5wcm90b3R5cGUuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPTAsbj0wO2lmKHRoaXMuX2xlZnQmJnRoaXMuX2xlZnQub3BlbmVkJiYoInNpZGUiPT10aGlzLl9sZWZ0Lm1vZGU/ZSs9dGhpcy5fbGVmdC5fd2lkdGg6InB1c2giPT10aGlzLl9sZWZ0Lm1vZGUmJihlKz1yPXRoaXMuX2xlZnQuX3dpZHRoLG4tPXIpKSx0aGlzLl9yaWdodCYmdGhpcy5fcmlnaHQub3BlbmVkKWlmKCJzaWRlIj09dGhpcy5fcmlnaHQubW9kZSluKz10aGlzLl9yaWdodC5fd2lkdGg7ZWxzZSBpZigicHVzaCI9PXRoaXMuX3JpZ2h0Lm1vZGUpe3ZhciByO24rPXI9dGhpcy5fcmlnaHQuX3dpZHRoLGUtPXJ9ZT09PXRoaXMuX2NvbnRlbnRNYXJnaW5zLmxlZnQmJm49PT10aGlzLl9jb250ZW50TWFyZ2lucy5yaWdodHx8KHRoaXMuX2NvbnRlbnRNYXJnaW5zPXtsZWZ0OmUscmlnaHQ6bn0sdGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZW50TWFyZ2luQ2hhbmdlcy5uZXh0KHQuX2NvbnRlbnRNYXJnaW5zKX0pKX0sdH0oKSxVZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLGUsbil8fHRoaXN9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0oVmcpLEhnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2ZpeGVkSW5WaWV3cG9ydD0hMSxlLl9maXhlZFRvcEdhcD0wLGUuX2ZpeGVkQm90dG9tR2FwPTAsZX1yZXR1cm4gT2JqZWN0KGQuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkSW5WaWV3cG9ydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEluVmlld3BvcnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZEluVmlld3BvcnQ9RCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkVG9wR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkVG9wR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRUb3BHYXA9Rih0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkQm90dG9tR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQm90dG9tR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRCb3R0b21HYXA9Rih0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShCZyksUWc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZX0oemcpLHFnPWZ1bmN0aW9uKCl7fSxHZz1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBZZyh0KXtyZXR1cm4gby5rYigyLFtvLlphKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIFdnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InRyYW5zZm9ybSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToib3Blbiwgb3Blbi1pbnN0YW50IixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwgMCwgMCkiLHZpc2liaWxpdHk6InZpc2libGUifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToidm9pZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnsiYm94LXNoYWRvdyI6Im5vbmUiLHZpc2liaWxpdHk6ImhpZGRlbiJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2b2lkID0+IG9wZW4taW5zdGFudCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMG1zIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPD0+IG9wZW4sIG9wZW4taW5zdGFudCA9PiB2b2lkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiI0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBaZyh0KXtyZXR1cm4gby5rYigyLFtvLlphKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIEtnPW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRyYXdlci1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl17dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1kcmF3ZXItY29udGFpbmVyW2Z1bGxzY3JlZW5dLm1hdC1kcmF3ZXItb3BlbmVke292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXIubWF0LWRyYXdlci1jb250YWluZXItZXhwbGljaXQtYmFja2Ryb3AgLm1hdC1kcmF3ZXItc2lkZXt6LWluZGV4OjN9Lm1hdC1kcmF3ZXItYmFja2Ryb3B7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt6LWluZGV4OjM7dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bnt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1iYWNrZHJvcHt0cmFuc2l0aW9uLWR1cmF0aW9uOi40czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3IsdmlzaWJpbGl0eX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci1iYWNrZHJvcHtvcGFjaXR5Oi41fX0ubWF0LWRyYXdlci1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1jb250ZW50e3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtLG1hcmdpbi1sZWZ0LG1hcmdpbi1yaWdodH0ubWF0LWRyYXdlcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjQ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt6LWluZGV4OjM7b3V0bGluZTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdy15OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXIsW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1yaWdodDpzb2xpZCAxcHggY3VycmVudENvbG9yfX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZCxbZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IGN1cnJlbnRDb2xvcjtib3JkZXItcmlnaHQ6bm9uZX19Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1zaWRle3otaW5kZXg6Mn0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2Vye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2xlZnQ6MDtyaWdodDphdXRvO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXNpZGVuYXYtZml4ZWR7cG9zaXRpb246Zml4ZWR9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIFhnKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMCwiZGl2IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItYmFja2Ryb3AiXV0sW1syLCJtYXQtZHJhd2VyLXNob3duIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuX29uQmFja2Ryb3BDbGlja2VkKCkmJnIpLHJ9LG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5faXNTaG93aW5nQmFja2Ryb3AoKSl9KX1mdW5jdGlvbiAkZyh0KXtyZXR1cm4gby5rYigwLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDMsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNka1Njcm9sbGFibGUiLCIiXSxbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXV0sW1s0LCJtYXJnaW4tbGVmdCIsInB4Il0sWzQsIm1hcmdpbi1yaWdodCIsInB4Il1dLG51bGwsbnVsbCxZZyxHZykpLG8uUGEoMSwyMTI5OTIsW1sxLDRdXSwwLHd0LFtvLmssX3Qsby55XSxudWxsLG51bGwpLG8uUGEoMiwxMDk3NzI4LG51bGwsMCxVZyxbby5oLFFnXSxudWxsLG51bGwpLG8uWmEoMCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt0KGUsMCwwLG8uYWIoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5sZWZ0LG8uYWIoZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX1mdW5jdGlvbiBKZyh0KXtyZXR1cm4gby5rYigyLFtvLmdiKDY3MTA4ODY0MCwxLHtzY3JvbGxhYmxlOjB9KSwodCgpKCksby5IYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLFhnKSksby5QYSgyLDE2Mzg0LG51bGwsMCxzLmssW28uUCxvLk1dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLG8uWmEobnVsbCwwKSxvLlphKG51bGwsMSksKHQoKSgpLG8uSGEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCwkZykpLG8uUGEoNiwxNjM4NCxudWxsLDAscy5rLFtvLlAsby5NXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uaGFzQmFja2Ryb3ApLHQoZSw2LDAsIW4uX2NvbnRlbnQpfSxudWxsKX12YXIgdHY9eWUoZnVuY3Rpb24oKXt9KSxldj15ZShmdW5jdGlvbigpe30pLG52PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoZC5iKShlLHQpLGV9KHR2KSxydj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9lbGVtZW50PWUsci5fbmF2TGlzdD1uLHIuX2lzTmF2TGlzdD0hMSxyLl9pc05hdkxpc3Q9ISFuLHJ9cmV0dXJuIE9iamVjdChkLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7bmV3IF9lKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc05hdkxpc3R8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fbmF2TGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWxpc3QtaXRlbS1mb2N1cyIpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGV9KGV2KSxpdj1mdW5jdGlvbigpe30sb3Y9ZnVuY3Rpb24oKXt9LGF2PW8uT2Eoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRpdmlkZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItdG9wOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjgwcHh9W2Rpcj1ydGxdIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4MHB4fS5tYXQtc3ViaGVhZGVye2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye21hcmdpbjowfS5tYXQtbGlzdCwubWF0LW5hdi1saXN0LC5tYXQtc2VsZWN0aW9uLWxpc3R7cGFkZGluZy10b3A6OHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo3MnB4O3dpZHRoOmNhbGMoMTAwJSAtIDcycHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjI0cHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjRweDt3aWR0aDpjYWxjKDEwMCUgLSA2NHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbGlzdFtkZW5zZV0sLm1hdC1uYXYtbGlzdFtkZW5zZV0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV17cGFkZGluZy10b3A6NHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi00cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gc3YodCl7cmV0dXJuIG8ua2IoMixbby5aYShudWxsLDApXSxudWxsLG51bGwpfXZhciBsdj1vLk9hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiB1dih0KXtyZXR1cm4gby5rYigyLFsodCgpKCksby5RYSgwLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0LXJpcHBsZSIsIiJdXSxbWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLG8uUGEoMiwyMTI5OTIsbnVsbCwwLFRlLFtvLmssby55LHUsWzIsa2VdLFsyLHhpXV0se2Rpc2FibGVkOlswLCJkaXNhYmxlZCJdLHRyaWdnZXI6WzEsInRyaWdnZXIiXX0sbnVsbCksby5aYShudWxsLDApLCh0KCkoKSxvLlFhKDQsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LXRleHQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5aYShudWxsLDEpLG8uWmEobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMiwwLG4uX2lzUmlwcGxlRGlzYWJsZWQoKSxuLl9nZXRIb3N0RWxlbWVudCgpKX0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLG8uYWIoZSwyKS51bmJvdW5kZWQpfSl9dmFyIGN2PW8uT2Eoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siYm9keVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjJlbX0uZmlsbC10b29sYmFyLXNwYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSBhdXRvfS5zaWRlbmF2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnNpZGVuYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwMHB4O2JveC1zaGFkb3c6M3B4IDAgNnB4IHJnYmEoMCwwLDAsLjI0KX0jc2l0ZW1hcGJ1dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9I3NpZGVuYXZmbGV4Y29udGVudFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMDBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGZ2KHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMTUwLCJkaXYiLFtbImNsYXNzIiwibWF0LWFwcC1iYWNrZ3JvdW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDEsMCxudWxsLG51bGwsMTcsIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsImFjY2VudCJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLERnLFJnKSksby5QYSgyLDQyNDM0NTYsbnVsbCwxLE1nLFtvLmssdSxzLmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksby5nYig2MDM5Nzk3NzYsMSx7X3Rvb2xiYXJSb3dzOjF9KSwodCgpKCksby5RYSg0LDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PXQuY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJnIpLHJ9LE9pLEVpKSksby5QYSg1LDE4MDIyNCxudWxsLDAsYW4sW28uayx1LGVuLFsyLHhpXV0sbnVsbCxudWxsKSwodCgpKCksby5RYSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSg3LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsibWVudSJdKSksKHQoKSgpLG8uUWEoOSwwLG51bGwsMCwwLCJzcGFuIixbWyJjbGFzcyIsImZpbGwtdG9vbGJhci1zcGFjZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxMCwwLG51bGwsMCwxLCJzcGFuIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiTWVUaHJpWCJdKSksKHQoKSgpLG8uUWEoMTIsMCxudWxsLDAsMCwic3BhbiIsW1sic3R5bGUiLCJ3aWR0aDowLjJlbSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxMywwLG51bGwsMCwwLCJpbWciLFtbInNyYyIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzL2MvYzAvVC0tR09fUGFyaXMtU2FjbGF5LS1nby1wcy13aGl0ZS5wbmciXSxbInN0eWxlIiwibWF4LWhlaWdodDoxMDAlOyB3aWR0aDphdXRvOyBwYWRkaW5nOjFlbTsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uUWEoMTQsMCxudWxsLDAsMCwic3BhbiIsW1sic3R5bGUiLCJ3aWR0aDowLjJlbSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5RYSgxNSwwLG51bGwsMCwzLCJzcGFuIixbWyJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjtsaW5lLWhlaWdodDogODUlOyBmb250LXNpemU6IG1lZGl1bTsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLG8uaWIoLTEsbnVsbCxbIlRlYW0gR08iXSkpLCh0KCkoKSxvLlFhKDE3LDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiUGFyaXNTYWNsYXkiXSkpLCh0KCkoKSxvLlFhKDE5LDAsbnVsbCxudWxsLDEzMSwibWF0LXNpZGVuYXYtY29udGFpbmVyIixbWyJjbGFzcyIsInNpZGVuYXYtY29udGFpbmVyIG1hdC1kcmF3ZXItY29udGFpbmVyIG1hdC1zaWRlbmF2LWNvbnRhaW5lciJdXSxbWzIsIm1hdC1kcmF3ZXItY29udGFpbmVyLWV4cGxpY2l0LWJhY2tkcm9wIixudWxsXV0sbnVsbCxudWxsLEpnLEtnKSksby5QYSgyMCwxNDkwOTQ0LG51bGwsMixRZyxbWzIsY2VdLG8uayxvLnksby5oLExnLFsyLHhpXV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwyLHtfZHJhd2VyczoxfSksby5nYigzMzU1NDQzMjAsMyx7X2NvbnRlbnQ6MH0pLCh0KCkoKSxvLlFhKDIzLDAsbnVsbCwwLDExOSwibWF0LXNpZGVuYXYiLFtbImNsYXNzIiwic2lkZW5hdiBtYXQtZHJhd2VyIG1hdC1zaWRlbmF2Il0sWyJmaXhlZEluVmlld3BvcnQiLCJ0cnVlIl0sWyJ0YWJJbmRleCIsIi0xIl1dLFtbMSwicm9sZSIsMF0sWzQwLCJAdHJhbnNmb3JtIiwwXSxbMSwiYWxpZ24iLDBdLFsyLCJtYXQtZHJhd2VyLWVuZCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItb3ZlciIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItcHVzaCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItc2lkZSIsbnVsbF0sWzIsIm1hdC1zaWRlbmF2LWZpeGVkIixudWxsXSxbNCwidG9wIiwicHgiXSxbNCwiYm90dG9tIiwicHgiXV0sW1siY29tcG9uZW50IiwiQHRyYW5zZm9ybS5zdGFydCJdLFsiY29tcG9uZW50IiwiQHRyYW5zZm9ybS5kb25lIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY29tcG9uZW50OkB0cmFuc2Zvcm0uc3RhcnQiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMjQpLl9vbkFuaW1hdGlvblN0YXJ0KG4pJiZyKSwiY29tcG9uZW50OkB0cmFuc2Zvcm0uZG9uZSI9PT1lJiYocj0hMSE9PW8uYWIodCwyNCkuX29uQW5pbWF0aW9uRW5kKG4pJiZyKSxyfSxaZyxXZykpLG8uUGEoMjQsMzMyNTk1MixbWzIsNF0sWyJkcmF3ZXIiLDRdXSwwLEhnLFtvLmssJGUsZW4sdSxvLnksWzIscy5kXV0se21vZGU6WzAsIm1vZGUiXSxvcGVuZWQ6WzEsIm9wZW5lZCJdLGZpeGVkSW5WaWV3cG9ydDpbMiwiZml4ZWRJblZpZXdwb3J0Il19LG51bGwpLG8uY2IoMTMxMDcyLHMuYixbby5oXSksby5jYigxMzEwNzIscy5iLFtvLmhdKSwodCgpKCksby5RYSgyNywwLG51bGwsMCw5LCJtYXQtdG9vbGJhciIsW1siY2xhc3MiLCJtYXQtdG9vbGJhciJdLFsiY29sb3IiLCJwcmltYXJ5Il0sWyJzdHlsZSIsIm1hcmdpbi10b3A6IDE1cHg7Il1dLFtbMiwibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsbnVsbF0sWzIsIm1hdC10b29sYmFyLXNpbmdsZS1yb3ciLG51bGxdXSxudWxsLG51bGwsRGcsUmcpKSxvLlBhKDI4LDQyNDM0NTYsbnVsbCwxLE1nLFtvLmssdSxzLmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksby5nYig2MDM5Nzk3NzYsNCx7X3Rvb2xiYXJSb3dzOjF9KSwodCgpKCksby5pYigtMSwwLFsiTmF2aWdhdGlvbiAiXSkpLCh0KCkoKSxvLlFhKDMxLDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLlFhKDMyLDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PXQuY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJnIpLHJ9LE9pLEVpKSksby5QYSgzMywxODAyMjQsbnVsbCwwLGFuLFtvLmssdSxlbixbMix4aV1dLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMzQsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDM1LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsia2V5Ym9hcmRfYXJyb3dfbGVmdCJdKSksKHQoKSgpLG8uUWEoMzcsMCxudWxsLDAsMTA1LCJtYXQtbmF2LWxpc3QiLFtbImNsYXNzIiwibWF0LW5hdi1saXN0Il0sWyJyb2xlIiwibmF2aWdhdGlvbiJdXSxudWxsLG51bGwsbnVsbCxzdixhdikpLG8uUGEoMzgsNDkxNTIsbnVsbCwwLG52LFtdLG51bGwsbnVsbCksKHQoKSgpLG8uUWEoMzksMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09by5hYih0LDQwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsNDApLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8uYWIodCw0Mykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSx1dixsdikpLG8uUGEoNDAsMTA5NzcyOCxudWxsLDIscnYsW28uayxbMixudl1dLG51bGwsbnVsbCksby5nYig2MDM5Nzk3NzYsNSx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCw2LHtfYXZhdGFyOjB9KSxvLlBhKDQzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYig0NCwxKSwodCgpKCksby5RYSg0NSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoNDYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJkYXNoYm9hcmQiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgTWFpbiBwYWdlIl0pKSwodCgpKCksby5RYSg0OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsNTApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw1MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDUzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg1MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3Niw3LHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDgse19hdmF0YXI6MH0pLG8uUGEoNTMsNjcxNzQ0LG51bGwsMCxEeS5sLFtEeS5rLER5LmEscy5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxvLmJiKDU0LDEpLCh0KCkoKSxvLlFhKDU1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSg1Niw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImFzc2Vzc21lbnQiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgUHJvamVjdCBkZXRhaWxzIl0pKSwodCgpKCksby5RYSg1OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsNjApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw2MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDYzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg2MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3Niw5LHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDEwLHtfYXZhdGFyOjB9KSxvLlBhKDYzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYig2NCwxKSwodCgpKCksby5RYSg2NSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoNjYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJibHVyX2NpcmN1bGFyIl0pKSwodCgpKCksby5pYigtMSwyLFsiIEJpb2xvZ3kiXSkpLCh0KCkoKSxvLlFhKDY5LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PW8uYWIodCw3MCkuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09by5hYih0LDcwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsNzMpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sdXYsbHYpKSxvLlBhKDcwLDEwOTc3MjgsbnVsbCwyLHJ2LFtvLmssWzIsbnZdXSxudWxsLG51bGwpLG8uZ2IoNjAzOTc5Nzc2LDExLHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDEyLHtfYXZhdGFyOjB9KSxvLlBhKDczLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYig3NCwxKSwodCgpKCksby5RYSg3NSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoNzYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJtZW1vcnkiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgQ29tcHV0aW5nIl0pKSwodCgpKCksby5RYSg3OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsODApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw4MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDgzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg4MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwxMyx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCwxNCx7X2F2YXRhcjowfSksby5QYSg4Myw2NzE3NDQsbnVsbCwwLER5LmwsW0R5LmssRHkuYSxzLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLG8uYmIoODQsMSksKHQoKSgpLG8uUWEoODUsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDg2LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiYWNjZXNzaWJpbGl0eV9uZXciXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgSHVtYW4gUHJhY3RpY2VzIl0pKSwodCgpKCksby5RYSg4OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsOTApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCw5MCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDkzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSg5MCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwxNSx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCwxNix7X2F2YXRhcjowfSksby5QYSg5Myw2NzE3NDQsbnVsbCwwLER5LmwsW0R5LmssRHkuYSxzLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLG8uYmIoOTQsMSksKHQoKSgpLG8uUWEoOTUsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDk2LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsicGVvcGxlIl0pKSwodCgpKCksby5pYigtMSwyLFsiIE91ciB0ZWFtIl0pKSwodCgpKCksby5RYSg5OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTAwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTAwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTAzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSgxMDAsMTA5NzcyOCxudWxsLDIscnYsW28uayxbMixudl1dLG51bGwsbnVsbCksby5nYig2MDM5Nzk3NzYsMTcse19saW5lczoxfSksby5nYigzMzU1NDQzMjAsMTgse19hdmF0YXI6MH0pLG8uUGEoMTAzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYigxMDQsMSksKHQoKSgpLG8uUWEoMTA1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxMDYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJmb2xkZXJfc3BlY2lhbCJdKSksKHQoKSgpLG8uaWIoLTEsMixbIiBTdXBwb3J0Il0pKSwodCgpKCksby5RYSgxMDksMCxudWxsLDAsMTEsImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdLFsic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAjYTY0MDdiMEYiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTEwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTEwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLmFiKHQsMTEzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LHV2LGx2KSksby5QYSgxMTAsMTA5NzcyOCxudWxsLDIscnYsW28uayxbMixudl1dLG51bGwsbnVsbCksby5nYig2MDM5Nzk3NzYsMTkse19saW5lczoxfSksby5nYigzMzU1NDQzMjAsMjAse19hdmF0YXI6MH0pLG8uUGEoMTEzLDY3MTc0NCxudWxsLDAsRHkubCxbRHkuayxEeS5hLHMuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksby5iYigxMTQsMSksKHQoKSgpLG8uUWEoMTE1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLHRnLEp5KSksby5QYSgxMTYsNjM4OTc2LG51bGwsMCxYeSxbby5rLFd5LFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxvLmliKC0xLDAsWyJkZXNrdG9wX3dpbmRvd3MiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgV2lraSBQcm94eSAiXSkpLCh0KCkoKSxvLlFhKDExOSwwLG51bGwsMiwxLCJzdXAiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxvLmliKC0xLG51bGwsWyIoZGV2KSJdKSksKHQoKSgpLG8uUWEoMTIxLDAsbnVsbCwwLDExLCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXSxbInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogI2E2NDA3YjBGIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09by5hYih0LDEyMikuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09by5hYih0LDEyMikuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09by5hYih0LDEyNSkub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSx1dixsdikpLG8uUGEoMTIyLDEwOTc3MjgsbnVsbCwyLHJ2LFtvLmssWzIsbnZdXSxudWxsLG51bGwpLG8uZ2IoNjAzOTc5Nzc2LDIxLHtfbGluZXM6MX0pLG8uZ2IoMzM1NTQ0MzIwLDIyLHtfYXZhdGFyOjB9KSxvLlBhKDEyNSw2NzE3NDQsbnVsbCwwLER5LmwsW0R5LmssRHkuYSxzLmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLG8uYmIoMTI2LDEpLCh0KCkoKSxvLlFhKDEyNywwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCx0ZyxKeSkpLG8uUGEoMTI4LDYzODk3NixudWxsLDAsWHksW28uayxXeSxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksby5pYigtMSwwLFsiZGVza3RvcF93aW5kb3dzIl0pKSwodCgpKCksby5pYigtMSwyLFsiIExhenkgIl0pKSwodCgpKCksby5RYSgxMzEsMCxudWxsLDIsMSwic3VwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksby5pYigtMSxudWxsLFsiKGRldikiXSkpLCh0KCkoKSxvLlFhKDEzMywwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbImlkIiwic2l0ZW1hcGJ1dCJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PW8uYWIodCwxMzQpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PW8uYWIodCwxMzQpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PW8uYWIodCwxMzcpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sdXYsbHYpKSxvLlBhKDEzNCwxMDk3NzI4LG51bGwsMixydixbby5rLFsyLG52XV0sbnVsbCxudWxsKSxvLmdiKDYwMzk3OTc3NiwyMyx7X2xpbmVzOjF9KSxvLmdiKDMzNTU0NDMyMCwyNCx7X2F2YXRhcjowfSksby5QYSgxMzcsNjcxNzQ0LG51bGwsMCxEeS5sLFtEeS5rLER5LmEscy5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxvLmJiKDEzOCwxKSwodCgpKCksby5RYSgxMzksMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsdGcsSnkpKSxvLlBhKDE0MCw2Mzg5NzYsbnVsbCwwLFh5LFtvLmssV3ksWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLG8uaWIoLTEsMCxbImFwcHMiXSkpLCh0KCkoKSxvLmliKC0xLDIsWyIgU2l0ZSBtYXAiXSkpLCh0KCkoKSxvLlFhKDE0MywwLG51bGwsMSw3LCJtYXQtc2lkZW5hdi1jb250ZW50IixbWyJjbGFzcyIsIm1hdC1kcmF3ZXItY29udGVudCBtYXQtc2lkZW5hdi1jb250ZW50Il0sWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXRBbGlnbiIsImNlbnRlciJdXSxbWzQsIm1hcmdpbi1sZWZ0IiwicHgiXSxbNCwibWFyZ2luLXJpZ2h0IiwicHgiXV0sbnVsbCxudWxsLFlnLEdnKSksby5QYSgxNDQsMTA5NzcyOCxbWzMsNF1dLDAsVWcsW28uaCxRZ10sbnVsbCxudWxsKSxvLlBhKDE0NSw3MzcyODAsbnVsbCwwLEZkLFtnZCxvLmssYmRdLHtsYXlvdXQ6WzAsImxheW91dCJdfSxudWxsKSxvLlBhKDE0Niw3MzcyODAsbnVsbCwwLFFkLFtnZCxvLmssWzYsRmRdLGJkXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSxvLlFhKDE0NywwLG51bGwsMCwzLCJkaXYiLFtbImZ4RmxleCIsIjEgMCA1MDBweCJdLFsiaWQiLCJzaWRlbmF2ZmxleGNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksby5QYSgxNDgsNzM3MjgwLG51bGwsMCx6ZCxbZ2Qsby5rLFszLEZkXSxiZCxuZF0se2ZsZXg6WzAsImZsZXgiXX0sbnVsbCksKHQoKSgpLG8uUWEoMTQ5LDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxvLlBhKDE1MCwyMTI5OTIsbnVsbCwwLER5Lm4sW0R5LmIsby5QLG8uaixbOCxudWxsXSxvLmhdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDIsMCwiYWNjZW50IiksdChlLDcsMCksdChlLDIwLDApLHQoZSwyNCwwLG8uamIoZSwyNCwwLG8uYWIoZSwyNSkudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJvdmVyIjoic2lkZSIsbi5vcGVuZWRTaWRlTmF2LCJ0cnVlIiksdChlLDI4LDAsInByaW1hcnkiKSx0KGUsMzUsMCksdChlLDQzLDAsdChlLDQ0LDAsIi4uL2Rhc2hib2FyZCIpKSx0KGUsNDYsMCksdChlLDUzLDAsdChlLDU0LDAsIi4uL3Byb2plY3QiKSksdChlLDU2LDApLHQoZSw2MywwLHQoZSw2NCwwLCIuLi9iaW9sb2d5IikpLHQoZSw2NiwwKSx0KGUsNzMsMCx0KGUsNzQsMCwiLi4vY29tcHV0aW5nIikpLHQoZSw3NiwwKSx0KGUsODMsMCx0KGUsODQsMCwiLi4vaHVtYW4tcHJhY3RpY2VzIikpLHQoZSw4NiwwKSx0KGUsOTMsMCx0KGUsOTQsMCwiLi4vdGVhbSIpKSx0KGUsOTYsMCksdChlLDEwMywwLHQoZSwxMDQsMCwiLi4vc3VwcG9ydCIpKSx0KGUsMTA2LDApLHQoZSwxMTMsMCx0KGUsMTE0LDAsIi4uL3dpa2ktbHAiKSksdChlLDExNiwwKSx0KGUsMTI1LDAsdChlLDEyNiwwLCIuLi9zbCIpKSx0KGUsMTI4LDApLHQoZSwxMzcsMCx0KGUsMTM4LDAsIi4uL3NpdGVtYXAiKSksdChlLDE0MCwwKSx0KGUsMTQ1LDAsInJvdyIpLHQoZSwxNDYsMCwiY2VudGVyIiksdChlLDE0OCwwLCIxIDAgNTAwcHgiKSx0KGUsMTUwLDApfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsby5hYihlLDIpLl90b29sYmFyUm93cy5sZW5ndGgsIW8uYWIoZSwyKS5fdG9vbGJhclJvd3MubGVuZ3RoKSx0KGUsNCwwLG8uYWIoZSw1KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09by5hYihlLDUpLl9hbmltYXRpb25Nb2RlKSx0KGUsNiwwLG8uYWIoZSw3KS5pbmxpbmUpLHQoZSwxOSwwLG8uYWIoZSwyMCkuX2JhY2tkcm9wT3ZlcnJpZGUpLHQoZSwyMywwLG8uamIoZSwyMywwLG8uYWIoZSwyNikudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJkaWFsb2ciOiJuYXZpZ2F0aW9uIixvLmFiKGUsMjQpLl9hbmltYXRpb25TdGF0ZSxudWxsLCJlbmQiPT09by5hYihlLDI0KS5wb3NpdGlvbiwib3ZlciI9PT1vLmFiKGUsMjQpLm1vZGUsInB1c2giPT09by5hYihlLDI0KS5tb2RlLCJzaWRlIj09PW8uYWIoZSwyNCkubW9kZSxvLmFiKGUsMjQpLmZpeGVkSW5WaWV3cG9ydCxvLmFiKGUsMjQpLmZpeGVkSW5WaWV3cG9ydD9vLmFiKGUsMjQpLmZpeGVkVG9wR2FwOm51bGwsby5hYihlLDI0KS5maXhlZEluVmlld3BvcnQ/by5hYihlLDI0KS5maXhlZEJvdHRvbUdhcDpudWxsKSx0KGUsMjcsMCxvLmFiKGUsMjgpLl90b29sYmFyUm93cy5sZW5ndGgsIW8uYWIoZSwyOCkuX3Rvb2xiYXJSb3dzLmxlbmd0aCksdChlLDMyLDAsby5hYihlLDMzKS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09by5hYihlLDMzKS5fYW5pbWF0aW9uTW9kZSksdChlLDM0LDAsby5hYihlLDM1KS5pbmxpbmUpLHQoZSwzOSwwLG8uYWIoZSw0MCkuX2F2YXRhcixvLmFiKGUsNDApLl9hdmF0YXIsby5hYihlLDQzKS50YXJnZXQsby5hYihlLDQzKS5ocmVmKSx0KGUsNDUsMCxvLmFiKGUsNDYpLmlubGluZSksdChlLDQ5LDAsby5hYihlLDUwKS5fYXZhdGFyLG8uYWIoZSw1MCkuX2F2YXRhcixvLmFiKGUsNTMpLnRhcmdldCxvLmFiKGUsNTMpLmhyZWYpLHQoZSw1NSwwLG8uYWIoZSw1NikuaW5saW5lKSx0KGUsNTksMCxvLmFiKGUsNjApLl9hdmF0YXIsby5hYihlLDYwKS5fYXZhdGFyLG8uYWIoZSw2MykudGFyZ2V0LG8uYWIoZSw2MykuaHJlZiksdChlLDY1LDAsby5hYihlLDY2KS5pbmxpbmUpLHQoZSw2OSwwLG8uYWIoZSw3MCkuX2F2YXRhcixvLmFiKGUsNzApLl9hdmF0YXIsby5hYihlLDczKS50YXJnZXQsby5hYihlLDczKS5ocmVmKSx0KGUsNzUsMCxvLmFiKGUsNzYpLmlubGluZSksdChlLDc5LDAsby5hYihlLDgwKS5fYXZhdGFyLG8uYWIoZSw4MCkuX2F2YXRhcixvLmFiKGUsODMpLnRhcmdldCxvLmFiKGUsODMpLmhyZWYpLHQoZSw4NSwwLG8uYWIoZSw4NikuaW5saW5lKSx0KGUsODksMCxvLmFiKGUsOTApLl9hdmF0YXIsby5hYihlLDkwKS5fYXZhdGFyLG8uYWIoZSw5MykudGFyZ2V0LG8uYWIoZSw5MykuaHJlZiksdChlLDk1LDAsby5hYihlLDk2KS5pbmxpbmUpLHQoZSw5OSwwLG8uYWIoZSwxMDApLl9hdmF0YXIsby5hYihlLDEwMCkuX2F2YXRhcixvLmFiKGUsMTAzKS50YXJnZXQsby5hYihlLDEwMykuaHJlZiksdChlLDEwNSwwLG8uYWIoZSwxMDYpLmlubGluZSksdChlLDEwOSwwLG8uYWIoZSwxMTApLl9hdmF0YXIsby5hYihlLDExMCkuX2F2YXRhcixvLmFiKGUsMTEzKS50YXJnZXQsby5hYihlLDExMykuaHJlZiksdChlLDExNSwwLG8uYWIoZSwxMTYpLmlubGluZSksdChlLDEyMSwwLG8uYWIoZSwxMjIpLl9hdmF0YXIsby5hYihlLDEyMikuX2F2YXRhcixvLmFiKGUsMTI1KS50YXJnZXQsby5hYihlLDEyNSkuaHJlZiksdChlLDEyNywwLG8uYWIoZSwxMjgpLmlubGluZSksdChlLDEzMywwLG8uYWIoZSwxMzQpLl9hdmF0YXIsby5hYihlLDEzNCkuX2F2YXRhcixvLmFiKGUsMTM3KS50YXJnZXQsby5hYihlLDEzNykuaHJlZiksdChlLDEzOSwwLG8uYWIoZSwxNDApLmlubGluZSksdChlLDE0MywwLG8uYWIoZSwxNDQpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLmxlZnQsby5hYihlLDE0NCkuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMucmlnaHQpfSl9dmFyIGh2PW8uTWEoImFwcC1yb290IixXLGZ1bmN0aW9uKHQpe3JldHVybiBvLmtiKDAsWyh0KCkoKSxvLlFhKDAsMCxudWxsLG51bGwsMSwiYXBwLXJvb3QiLFtdLG51bGwsbnVsbCxudWxsLGZ2LGN2KSksby5QYSgxLDExNDY4OCxudWxsLDAsVyxbcV0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxwdj1uZXcgby5wKCJtYXQtc2VsZWN0LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIGR2KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX12YXIgbXY9ZnVuY3Rpb24oKXt9LHl2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY2hhbmdlcz1uZXcgQy5hLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9ZnVuY3Rpb24odCxlLG4pe2lmKDA9PW58fDA9PWUpcmV0dXJuIjAgb2YgIituO3ZhciByPXQqZTtyZXR1cm4gcisxKyIgLSAiKyhyPChuPU1hdGgubWF4KG4sMCkpP01hdGgubWluKHIrZSxuKTpyK2UpKyIgb2YgIitufX1yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KG8uVCkoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIGd2KHQpe3JldHVybiB0fHxuZXcgeXZ9dmFyIHZ2PWZ1bmN0aW9uKCl7fSxidj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmNoYW5nZXM9bmV3IEMuYSx0aGlzLnNvcnRCdXR0b25MYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4iQ2hhbmdlIHNvcnRpbmcgZm9yICIrdH19cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBfdih0KXtyZXR1cm4gdHx8bmV3IGJ2fXZhciB3dj1mdW5jdGlvbigpe30seHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlQpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxDdj1mdW5jdGlvbigpe30sRXY9bmV3IG8ucCgibWF0LW1lbnUtc2Nyb2xsLXN0cmF0ZWd5Iik7ZnVuY3Rpb24gT3YodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBTdj1mdW5jdGlvbigpe30sa3Y9ZnVuY3Rpb24oKXt9LFR2PWZ1bmN0aW9uKCl7fSxQdj1mdW5jdGlvbigpe30sQXY9ZnVuY3Rpb24oKXt9LGp2PWZ1bmN0aW9uKCl7fSxJdj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtPYmplY3Qocy5yKShlKSYmIXQmJmNvbnNvbGUud2FybigiV2FybmluZzogRmxleCBMYXlvdXQgbG9hZGVkIG9uIHRoZSBzZXJ2ZXIgd2l0aG91dCBGbGV4TGF5b3V0U2VydmVyTW9kdWxlIil9cmV0dXJuIHQud2l0aENvbmZpZz1mdW5jdGlvbihlLG4pe3ZhciByPU9iamVjdC5hc3NpZ24oe30sZWQpLGk9W107Zm9yKHZhciBvIGluIGUpZVtvXT09PXJbb118fCExIT09ZVtvXSYmITAhPT1lW29dfHwocltvXT1lW29dKTtyZXR1cm4gZS5zZXJ2ZXJMb2FkZWQmJmkucHVzaCh7cHJvdmlkZTpwZCx1c2VWYWx1ZTohMH0pLEFycmF5LmlzQXJyYXkobikmJmkucHVzaCh7cHJvdmlkZTpRcCx1c2VWYWx1ZTpuLG11bHRpOiEwfSksaS5wdXNoKHtwcm92aWRlOm5kLHVzZVZhbHVlOnJ9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6aX19LHR9KCksTXY9ZnVuY3Rpb24oKXt9LE52PWZ1bmN0aW9uKCl7fSxSdj1vLk5hKGEsW1ddLGZ1bmN0aW9uKHQpe3JldHVybiBvLlhhKFtvLllhKDUxMixvLmosby5DYSxbWzgsW05lLFBpLE1pLE5pLmEsdnAsenAsVnksbGcsaGcseWcsX2csRWcsSWcsaHZdXSxbMyxvLmpdLG8ud10pLG8uWWEoNTEyMCxvLnQsby5MYSxbWzMsby50XV0pLG8uWWEoNDYwOCxzLm0scy5sLFtvLnQsWzIscy50XV0pLG8uWWEoNTEyMCxvLmMsby5JYSxbXSksby5ZYSg1MTIwLG8ucixvLkphLFtdKSxvLllhKDUxMjAsby5zLG8uS2EsW10pLG8uWWEoNDYwOCxoZS5jLGhlLnIsW3MuZF0pLG8uWWEoNjE0NCxvLkcsbnVsbCxbaGUuY10pLG8uWWEoNDYwOCxoZS5mLGJlLFtbMix2ZV0sWzIsZGVdXSksby5ZYSg1MTIwLGhlLmQsZnVuY3Rpb24odCxlLG4scixpLG8sYSl7cmV0dXJuW25ldyBoZS5rKHQsZSxuKSxuZXcgaGUubyhyKSxuZXcgaGUubihpLG8sYSldfSxbcy5kLG8ueSxbMixvLkFdLHMuZCxzLmQsaGUuZixvLkRhXSksby5ZYSg0NjA4LGhlLmUsaGUuZSxbaGUuZCxvLnldKSxvLllhKDEzNTY4MCxoZS5tLGhlLm0sW3MuZF0pLG8uWWEoNDYwOCxoZS5sLGhlLmwsW2hlLmUsaGUubV0pLG8uWWEoNTEyMCxBbixiaSxbXSksby5ZYSg1MTIwLHZyLF9pLFtdKSxvLllhKDQ2MDgsWXIsdmksW0FuLHZyXSksby5ZYSg1MTIwLG8uRSx3aSxbaGUubCxZcixvLnldKSxvLllhKDYxNDQsaGUucCxudWxsLFtoZS5tXSksby5ZYSg0NjA4LG8uTixvLk4sW28ueV0pLG8uWWEoNDYwOCxoZS5oLGhlLmgsW3MuZF0pLG8uWWEoNDYwOCxoZS5pLGhlLmksW3MuZF0pLG8uWWEoNDYwOCxaLGZpLFtvLkUsaGUuYl0pLG8uWWEoNDYwOCx0ZSx0ZSxbUXQsR3Qsby5qLCR0LHF0LG8ucSxvLnkscy5kLGNlXSksby5ZYSg1MTIwLGVlLG5lLFt0ZV0pLG8uWWEoNTEyMCxwdixkdixbdGVdKSxvLllhKDUxMjAsb2UsYWUsW3RlXSksby5ZYSg1MTIwLHl2LGd2LFtbMyx5dl1dKSxvLllhKDUxMjAsYnYsX3YsW1szLGJ2XV0pLG8uWWEoNDYwOCxfbSxfbSxbXSksby5ZYSg0NjA4LGdlLGdlLFtdKSxvLllhKDQ2MDgseHYseHYsW10pLG8uWWEoNDYwOCx1ZCxjZCxbaWQsYWRdKSxvLllhKDUxMjAsRHkuaCxEeS5BLFtEeS55XSksby5ZYSg1MTIwLG8uYixmdW5jdGlvbih0LGUsbil7cmV0dXJuWyhyPXQsaT1lLGZ1bmN0aW9uKCl7aWYoT2JqZWN0KHMucSkoaSkpe3ZhciB0PS9cYmZsZXgtbGF5b3V0LS4rP1xiL2c7QXJyYXkuZnJvbShyLnF1ZXJ5U2VsZWN0b3JBbGwoIltjbGFzcyo9ZmxleC1sYXlvdXQtXSIpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmNvbnRhaW5zKCJmbGV4LWxheW91dC1zc3IiKSYmZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTplLmNsYXNzTmFtZS5yZXBsYWNlKHQsIiIpfSl9fSksbl07dmFyIHIsaX0sW3MuZCxvLkEsRHkuaF0pLG8uWWEoNDYwOCx6ZSx6ZSxbdGUsdG4sby5xLHEsWzMsemVdLEJlXSksby5ZYSg1MTIwLER5LmEsRHkueCxbRHkua10pLG8uWWEoNDYwOCxEeS5kLER5LmQsW10pLG8uWWEoNjE0NCxEeS5mLG51bGwsW0R5LmRdKSxvLllhKDEzNTY4MCxEeS5vLER5Lm8sW0R5Lmssby52LG8uaSxvLnEsRHkuZl0pLG8uWWEoNDYwOCxEeS5lLER5LmUsW10pLG8uWWEoNTEyMCxFdixPdixbdGVdKSxvLllhKDQ2MDgsQXksanksW3MuZCxvLkEsVHldKSxvLllhKDQ2MDgsSXksSXksW0F5LFB5XSksby5ZYSg1MTIwLHh5LGZ1bmN0aW9uKHQpe3JldHVyblt0XX0sW0l5XSksby5ZYSg0NjA4LFN5LFN5LFtdKSxvLllhKDYxNDQsT3ksbnVsbCxbU3ldKSxvLllhKDQ2MDgsa3ksa3ksW095XSksby5ZYSg2MTQ0LG95LG51bGwsW2t5XSksby5ZYSg0NjA4LGl5LE15LFtveSxvLnFdKSxvLllhKDQ2MDgsX3ksX3ksW2l5XSksby5ZYSgxMDczNzQyMzM2LHMuYyxzLmMsW10pLG8uWWEoMTAyNCxvLm0saGUucSxbXSksby5ZYSgxMDI0LG8ueCxmdW5jdGlvbigpe3JldHVybltEeS50KCldfSxbXSksby5ZYSg1MTIsRHkueSxEeS55LFtvLnFdKSxvLllhKDEwMjQsby5kLGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2hlLnModCksRHkueihlKV19LFtbMixvLnhdLER5LnldKSxvLllhKDUxMixvLmUsby5lLFtbMixvLmRdXSksby5ZYSgxMzE1ODQsby5nLG8uZyxbby55LG8uRGEsby5xLG8ubSxvLmosby5lXSksby5ZYSgxMDczNzQyMzM2LG8uZixvLmYsW28uZ10pLG8uWWEoMTA3Mzc0MjMzNixoZS5hLGhlLmEsW1szLGhlLmFdXSksby5ZYSgxMDczNzQyMzM2LENpLENpLFtdKSxvLllhKDEwNzM3NDIzMzYseix6LFtdKSxvLllhKDEwNzM3NDIzMzYsZmUsZmUsW10pLG8uWWEoMTA3Mzc0MjMzNixkZSxkZSxbWzIscGVdXSksby5ZYSgxMDczNzQyMzM2LE5nLE5nLFtdKSxvLllhKDEwNzM3NDIzMzYscCxwLFtdKSxvLllhKDEwNzM3NDIzMzYsUGUsUGUsW10pLG8uWWEoMTA3Mzc0MjMzNixzbixzbixbXSksby5ZYSgxMDczNzQyMzM2LEN0LEN0LFtdKSxvLllhKDEwNzM3NDIzMzYscWcscWcsW10pLG8uWWEoMTA3Mzc0MjMzNiwkeSwkeSxbXSksby5ZYSgxMDczNzQyMzM2LHdlLHdlLFtdKSxvLllhKDEwNzM3NDIzMzYsQWUsQWUsW10pLG8uWWEoMTA3Mzc0MjMzNixvdixvdixbXSksby5ZYSgxMDczNzQyMzM2LGl2LGl2LFtdKSxvLllhKDEwNzM3NDIzMzYsa3Ysa3YsW10pLG8uWWEoMTA3Mzc0MjMzNixUdixUdixbXSksby5ZYSgxMDczNzQyMzM2LEl0LEl0LFtdKSxvLllhKDEwNzM3NDIzMzYscmUscmUsW10pLG8uWWEoMTA3Mzc0MjMzNixqZSxqZSxbXSksby5ZYSgxMDczNzQyMzM2LFlkLFlkLFtdKSxvLllhKDEwNzM3NDIzMzYsbXYsbXYsW10pLG8uWWEoMTA3Mzc0MjMzNixsZSxsZSxbXSksby5ZYSgxMDczNzQyMzM2LHZ2LHZ2LFtdKSxvLllhKDEwNzM3NDIzMzYsd3Ysd3YsW10pLG8uWWEoMTA3Mzc0MjMzNixDcCxDcCxbXSksby5ZYSgxMDczNzQyMzM2LEFwLEFwLFtdKSxvLllhKDEwNzM3NDIzMzYsdHksdHksW10pLG8uWWEoMTA3Mzc0MjMzNixleSxleSxbXSksby5ZYSgxMDczNzQyMzM2LEtkLEtkLFtdKSxvLllhKDEwNzM3NDIzMzYsdG0sdG0sW10pLG8uWWEoMTA3Mzc0MjMzNixDdixDdixbXSksby5ZYSgxMDczNzQyMzM2LFB2LFB2LFtdKSxvLllhKDEwNzM3NDIzMzYsZmQsZmQsW10pLG8uWWEoMTA3Mzc0MjMzNixxZCxxZCxbXSksby5ZYSgxMDczNzQyMzM2LEF2LEF2LFtdKSxvLllhKDEwNzM3NDIzMzYsanYsanYsW10pLG8uWWEoMTA3Mzc0MjMzNixJdixJdixbWzIscGRdLG8uQV0pLG8uWWEoMTA3Mzc0MjMzNixVZSxVZSxbXSksby5ZYSgxMDI0LER5LnMsRHkudixbWzMsRHkua11dKSxvLllhKDUxMixEeS5xLER5LmMsW10pLG8uWWEoNTEyLER5LmIsRHkuYixbXSksby5ZYSgyNTYsRHkuZyx7dXNlSGFzaDohMH0sW10pLG8uWWEoMTAyNCxzLmgsRHkudSxbcy5wLFsyLHMuYV0sRHkuZ10pLG8uWWEoNTEyLHMuZyxzLmcsW3MuaF0pLG8uWWEoNTEyLG8uaSxvLmksW10pLG8uWWEoNTEyLG8udixvLkssW28uaSxbMixvLkxdXSksby5ZYSgxMDI0LER5LmksZnVuY3Rpb24oKXtyZXR1cm5bW3twYXRoOiJkYXNoYm9hcmQiLGNvbXBvbmVudDptcH0se3BhdGg6InNpdGVtYXAiLGNvbXBvbmVudDpMcH0se3BhdGg6Indpa2ktbHAvOnBhZ2VwYXRoIixjb21wb25lbnQ6bnl9LHtwYXRoOiJ3aWtpLWxwIixjb21wb25lbnQ6bnl9LHtwYXRoOiJ0ZWFtIixjb21wb25lbnQ6bmd9LHtwYXRoOiJwcm9qZWN0Iixjb21wb25lbnQ6dWd9LHtwYXRoOiJiaW9sb2d5Iixjb21wb25lbnQ6cGd9LHtwYXRoOiJjb21wdXRpbmciLGNvbXBvbmVudDpnZ30se3BhdGg6Imh1bWFuLXByYWN0aWNlcyIsY29tcG9uZW50OndnfSx7cGF0aDoic3VwcG9ydCIsY29tcG9uZW50OlNnfSx7cGF0aDoic2wiLGxvYWRDaGlsZHJlbjoiLi9zZWNvbmQtbGV2ZWwtY29tcG9uZW50cy9zZWNvbmQtbGV2ZWwtY29tcG9uZW50cy5tb2R1bGUjU2Vjb25kTGV2ZWxDb21wb25lbnRzTW9kdWxlIn0se3BhdGg6IiIscmVkaXJlY3RUbzoiZGFzaGJvYXJkIixwYXRoTWF0Y2g6ImZ1bGwifV1dfSxbXSksby5ZYSgxMDI0LER5LmssRHkudyxbby5nLER5LnEsRHkuYixzLmcsby5xLG8udixvLmksRHkuaSxEeS5nLFsyLER5LnBdLFsyLER5LmpdXSksby5ZYSgxMDczNzQyMzM2LER5Lm0sRHkubSxbWzIsRHkuc10sWzIsRHkua11dKSxvLllhKDEwNzM3NDIzMzYsTXYsTXYsW10pLG8uWWEoMTA3Mzc0MjMzNixOdixOdixbXSksby5ZYSgxMDczNzQyMzM2LFZpLFZpLFtdKSxvLllhKDEwNzM3NDIzMzYsU3YsU3YsW10pLG8uWWEoMTA3Mzc0MjMzNixOeSxOeSxbXSksby5ZYSgxMDczNzQyMzM2LFJ5LFJ5LFtdKSxvLllhKDEwNzM3NDIzMzYsYSxhLFtdKSxvLllhKDI1NixvLkJhLCEwLFtdKSxvLllhKDI1Nix4aSwiQnJvd3NlckFuaW1hdGlvbnMiLFtdKSxvLllhKDI1NixUeSwiWFNSRi1UT0tFTiIsW10pLG8uWWEoMjU2LFB5LCJYLVhTUkYtVE9LRU4iLFtdKV0pfSk7T2JqZWN0KG8uVSkoKSxoZS5qKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShSdikuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSl9LHpvdG06ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkucGFyZW50PWUsaS5vdXRlclZhbHVlPW4saS5vdXRlckluZGV4PXIsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeU5leHQodGhpcy5vdXRlclZhbHVlLHQsdGhpcy5vdXRlckluZGV4LHRoaXMuaW5kZXgrKyx0aGlzKX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Lm5vdGlmeUVycm9yKHQsdGhpcyksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudC5ub3RpZnlDb21wbGV0ZSh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGV9KG4oIkZGT28iKS5hKSxvPW4oIkZ4YjEiKTtmdW5jdGlvbiBhKHQsZSxuLHIpe3ZhciBhPW5ldyBpKHQsbixyKTtyZXR1cm4gT2JqZWN0KG8uYSkoZSkoYSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX19LFtbNCwxXV1dKTsod2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSkucHVzaChbWzBdLHsiM1lDUCI6ZnVuY3Rpb24obixsLG8peyJ1c2Ugc3RyaWN0IjtvLnIobCk7dmFyIHQ9bygiQ2NuRyIpLHU9ZnVuY3Rpb24oKXt9LGE9bygicE1uUyIpLGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7fXJldHVybiBuLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sbn0oKSxjPXQuT2Eoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siIl1dLGRhdGE6e319KTtmdW5jdGlvbiBpKG4pe3JldHVybiB0LmtiKDAsWyhuKCkoKSx0LlFhKDAsMCxudWxsLG51bGwsMSwicCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaWIoLTEsbnVsbCxbIiBUaGlzIHdpbGwgYmUgdGhlIGRldGFpbGxlZCBsYWIgbm90ZWJvb2sgY29tcG9uZW50LlxuIl0pKV0sbnVsbCxudWxsKX12YXIgcD10Lk1hKCJhcHAtbGFiLW5vdGUtYm9vayIsZSxmdW5jdGlvbihuKXtyZXR1cm4gdC5rYigwLFsobigpKCksdC5RYSgwLDAsbnVsbCxudWxsLDEsImFwcC1sYWItbm90ZS1ib29rIixbXSxudWxsLG51bGwsbnVsbCxpLGMpKSx0LlBhKDEsMTE0Njg4LG51bGwsMCxlLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKG4sbCl7bihsLDEsMCl9LG51bGwpfSx7fSx7fSxbXSkscj1vKCJJcDBSIiksYj1vKCJaWUNpIiksZj1mdW5jdGlvbigpe307by5kKGwsIlNlY29uZExldmVsQ29tcG9uZW50c01vZHVsZU5nRmFjdG9yeSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBzPXQuTmEodSxbXSxmdW5jdGlvbihuKXtyZXR1cm4gdC5YYShbdC5ZYSg1MTIsdC5qLHQuQ2EsW1s4LFthLmEscF1dLFszLHQual0sdC53XSksdC5ZYSg0NjA4LHIubSxyLmwsW3QudCxbMixyLnRdXSksdC5ZYSgxMDczNzQyMzM2LHIuYyxyLmMsW10pLHQuWWEoMTA3Mzc0MjMzNixiLm0sYi5tLFtbMixiLnNdLFsyLGIua11dKSx0LllhKDEwNzM3NDIzMzYsZixmLFtdKSx0LllhKDEwNzM3NDIzMzYsdSx1LFtdKSx0LllhKDEwMjQsYi5pLGZ1bmN0aW9uKCl7cmV0dXJuW1t7cGF0aDoibGFibm90ZWJvb2siLGNvbXBvbmVudDplfSx7cGF0aDoiIixyZWRpcmVjdFRvOiJsYWJub3RlYm9vayIscGF0aE1hdGNoOiJmdWxsIn1dXX0sW10pXSl9KX19XSk7");eval(base64script); </script>
+
<link rel="stylesheet" href="data:text/css;base64,QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwIWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOjAgMH0ubWF0LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCwubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUtc3RpY2t5LFttYXQtZm9vdGVyLXJvd10sW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sbWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvd3tiYWNrZ3JvdW5kOmluaGVyaXR9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6IzY3M2FiNztjYXJldC1jb2xvcjojNjIwMDNjfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmZkNzQwfS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMWM0ZTl9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTU3Zn0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2RkMn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiM2NzNhYjc7c3Ryb2tlOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmZDc0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA5LDE5NiwyMzMsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOSwxOTYsMjMzLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI5LDEyNywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpLC13ZWJraXQtdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMCk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIsLmNkay1vdmVybGF5LWNvbnRhaW5lcntwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXI6ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5le3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6LjZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI4OCl9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kO2FuaW1hdGlvbi1uYW1lOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjJweCAwIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudH0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6Izk2MWU2NH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmNmU0MH0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZhZmFmYX0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6Izk2MWU2NH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiM2MjAwM2N9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZmY2ZTQwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzYyMDAzYztwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNik7dHJhbnNmb3JtOnNjYWxlKC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXstd2Via2l0LXRyYW5zZm9ybTpub25lO3RyYW5zZm9ybTpub25lfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDo4cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xMXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudCwubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDoxNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOjAgMH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2ZmNmU0MH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMTIpfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMSl9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjEpfS5tYXQtZmFiLC5tYXQtZmxhdC1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRde2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtZmFiLm1hdC13YXJuLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0ubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjIpfS5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmFmYWZhIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjI2KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtvcGFjaXR5Oi40O2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfW1hdC1mb290ZXItcm93LG1hdC1oZWFkZXItcm93LG1hdC1yb3csdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxsLHRoLm1hdC1oZWFkZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jYWxlbmRhci1hcnJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCksLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC40KX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojNjIwMDNjfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZGlhbG9nLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlciwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOmluaGVyaXR9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZXJyb3J7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC40MikgMCxyZ2JhKDAsMCwwLC40MikgMzMlLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtib3R0b206MS4zNDM3NWVtO2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQsLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmY2ZTQwfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDowIDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb246bm90KFtjb2xvcl0pLC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMGIzYzV9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlMGJjZDF9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmNjYmN9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6Izk2MWU2NH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmZjZlNDB9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtc2VsZWN0LWNvbnRlbnQsLm1hdC1zZWxlY3QtcGFuZWwtZG9uZS1hbmltYXRpbmd7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC41KX0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEyKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Om5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZjU3MjJ9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC41KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSw4NywzNCwuMTIpfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0uY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KC4wMDAxZGVnLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tbm90LXRvdWNoZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCk7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA0LDE4OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDgsMTc5LDE5NywuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyNCwxODgsMjA5LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmt7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZmY2ZTQwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7YmFja2dyb3VuZDojMzIzMjMyO2NvbG9yOiNmZmZ9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOiM5NjFlNjR9I0hRX3BhZ2UgaDJ7YmFja2dyb3VuZC1jb2xvcjojN2EyNjU5O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1zaXplOjEwMCUgYXV0b30jSFFfcGFnZSAjdG9jdGl0bGUgaDJ7YmFja2dyb3VuZC1jb2xvcjp1bnNldDtjb2xvcjp1bnNldDtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfS5heGlzLS14IC5kb21haW4sLmF4aXMtLXkgLmRvbWFpbntkaXNwbGF5Om5vbmV9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtmbGV4LWJhc2lzOjB9QGZvbnQtZmFjZXtmb250LWZhbWlseTpSb2JvdG87Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMi8yNi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5lb3QpO3NyYzpsb2NhbCgiUm9ib3RvIiksbG9jYWwoIlJvYm90by1SZWd1bGFyIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjYvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCJlbWJlZGRlZC1vcGVudHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzBiL1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLndvZmYpIGZvcm1hdCgid29mZiIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnR0ZikgZm9ybWF0KCJ0cnVldHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy9GaWxlOlQtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLnN2ZyNSb2JvdG8pIGZvcm1hdCgic3ZnIil9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNYXRlcmlhbEljb25zLVJlZ3VsYXI7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzUxL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLmVvdCk7c3JjOmxvY2FsKCJSb2JvdG8iKSxsb2NhbCgiUm9ib3RvLVJlZ3VsYXIiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81MS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5lb3Q/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjgvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzEvMWUvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzMvM2YvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuc3ZnI01hdGVyaWFsSWNvbnMtUmVndWxhcikgZm9ybWF0KCJzdmciKX0ubWF0ZXJpYWwtaWNvbnN7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbDtkaXJlY3Rpb246bHRyOy1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOidsaWdhJzstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9aDEsaDIsaDMsaDQsaDUsaDZ7Ym9yZGVyLWJvdHRvbTowfQovKiMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuY3NzLm1hcCov">
  
 +
<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>
  
  
<script>
 
    $(".body").append($("#bigmaindiv"));
 
  
 +
<script>
 +
$(".body").append($("#bigmaindiv"));
 
$('#top_title').remove();
 
$('#top_title').remove();
 
$('#bigmaindiv').insertBefore('#content');
 
$('#bigmaindiv').insertBefore('#content');

Revision as of 08:49, 15 July 2018

Loading, please wait...