Line 1: | Line 1: | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<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"> | ||
+ | |||
+ | <base href="https://2018.igem.org/Team:GO_Paris-Saclay"> | ||
+ | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
− | |||
− | |||
− | |||
− | + | <div id="bigmaindiv"> | |
− | < | + | <app-root></app-root> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | < | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | </ | + | |
</div> | </div> | ||
+ | <link rel="stylesheet" href="data:text/css;base64,Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojNjczYWI3O2NhcmV0LWNvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZmQ3NDB9Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QxYzRlOX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNTdmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZjZGQyfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6IzY3M2FiNztzdHJva2U6IzYyMDAzY30ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmZkNzQwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjdlbTt0b3A6Y2FsYygxMDAlIC0gMS42NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0uNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NWVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzNCV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NWVtKSBzY2FsZSguNzUpO3dpZHRoOjEzMy4zMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZ3JpZC10aWxlLWZvb3RlciwubWF0LWdyaWQtdGlsZS1oZWFkZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9uLC5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo5cHg7cGFkZGluZy1ib3R0b206OXB4fS5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbn1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSwtd2Via2l0LXRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwKTt0cmFuc2Zvcm06c2NhbGUoMCl9LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciwuY2RrLW92ZXJsYXktY29udGFpbmVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjg4KX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydDthbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydH0uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5ne2hlaWdodDphdXRvIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MnB4IDAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ghaW1wb3J0YW50fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6IzYyMDAzY30ubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojOTYxZTY0fS5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmY2ZTQwfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojZmFmYWZhfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojOTYxZTY0fS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6IzYyMDAzY30ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZmNmU0MH0ubWF0LWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYmFkZ2UtaGlkZGVuIC5tYXQtYmFkZ2UtY29udGVudHtkaXNwbGF5Om5vbmV9Lm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNjIwMDNjO3Bvc2l0aW9uOmFic29sdXRlO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQsLXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC42KTt0cmFuc2Zvcm06c2NhbGUoLjYpO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztwb2ludGVyLWV2ZW50czpub25lfS5tYXQtYmFkZ2UtY29udGVudC5tYXQtYmFkZ2UtYWN0aXZley13ZWJraXQtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDo4cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDoxMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3Jle21hcmdpbi1sZWZ0OjE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmV7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXJ7bWFyZ2luLXJpZ2h0OjE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlcnttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6MCAwfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4xMil9Lm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4xMil9Lm1hdC1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xKX0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEpfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMSl9Lm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LW1pbmktZmFiLC5tYXQtcmFpc2VkLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mYWIubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1mYWIubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtZmFiLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17Y29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1mYWIubWF0LXdhcm4sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMil9Lm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMil9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmFmYWZhfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmYWZhZmEhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94Om5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yNil9Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2M7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7b3BhY2l0eTouNDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9bWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvdyx0ZC5tYXQtY2VsbCx0ZC5tYXQtZm9vdGVyLWNlbGwsdGgubWF0LWhlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNhbGVuZGFyLWFycm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24sLm1hdC1kYXRlcGlja2VyLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpLC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiM2MjAwM2N9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1oaW50e2NvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1lcnJvcntjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNDIpIDAscmdiYSgwLDAsMCwuNDIpIDMzJSx0cmFuc3BhcmVudCAwKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2JvdHRvbToxLjM0Mzc1ZW07Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojNjIwMDNjfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjZlNDB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWxpc3QtaXRlbS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLWZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOjAgMDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbjpub3QoW2NvbG9yXSksLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyOjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZDBiM2M1fS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZTBiY2QxfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZjY2JjfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojOTYxZTY0fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2ZmNmU0MH0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MjAwM2N9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY2ZTQwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4yNil9Lm1hdC1zZWxlY3QtY29udGVudCwubWF0LXNlbGVjdC1wYW5lbC1kb25lLWFuaW1hdGluZ3tiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjIwMDNjfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvdywubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnk6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4xMil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmNTcyMn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsODcsMzQsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC4xMil9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxse2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjIpfS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDAsMCwwLC43KSxyZ2JhKDAsMCwwLC43KSAycHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoLjAwMDFkZWcscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1ub3QtdG91Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOCwxNzksMTk3LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWw6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyMjQsMTg4LDIwOSwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDQsMTg4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluazpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIwOCwxNzksMTk3LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1cywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbDpub3QoLm1hdC10YWItZGlzYWJsZWQpOmZvY3VzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjI0LDE4OCwyMDksLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmtzLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsOm5vdCgubWF0LXRhYi1kaXNhYmxlZCk6Zm9jdXMsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbms6bm90KC5tYXQtdGFiLWRpc2FibGVkKTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNCwxODgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3MsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGlua3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC10b29sYmFye2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6Izk2MWU2NDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjppbmhlcml0fS5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiMzMjMyMzI7Y29sb3I6I2ZmZn0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6Izk2MWU2NH0jSFFfcGFnZSBoMntiYWNrZ3JvdW5kLWNvbG9yOiM3YTI2NTk7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLXNpemU6MTAwJSBhdXRvfSNIUV9wYWdlICN0b2N0aXRsZSBoMntiYWNrZ3JvdW5kLWNvbG9yOnVuc2V0O2NvbG9yOnVuc2V0O2JhY2tncm91bmQtc2l6ZToxMDAlIGF1dG99LmF4aXMtLXggLmRvbWFpbiwuYXhpcy0teSAuZG9tYWlue2Rpc3BsYXk6bm9uZX0="> | ||
− | |||
− | |||
− | |||
+ | <script>var base64script = atob("IWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0LHAsYz1lWzBdLGE9ZVsxXSxmPWVbMl0sbD0wLHM9W107bDxjLmxlbmd0aDtsKyspb1twPWNbbF1dJiZzLnB1c2gob1twXVswXSksb1twXT0wO2Zvcih0IGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsdCkmJihyW3RdPWFbdF0pO2ZvcihpJiZpKGUpO3MubGVuZ3RoOylzLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsZnx8W10pLG4oKX1mdW5jdGlvbiBuKCl7Zm9yKHZhciByLGU9MDtlPHUubGVuZ3RoO2UrKyl7Zm9yKHZhciBuPXVbZV0sdD0hMCxjPTE7YzxuLmxlbmd0aDtjKyspMCE9PW9bbltjXV0mJih0PSExKTt0JiYodS5zcGxpY2UoZS0tLDEpLHI9cChwLnM9blswXSkpfXJldHVybiByfXZhciB0PXt9LG89ezA6MH0sdT1bXTtmdW5jdGlvbiBwKGUpe2lmKHRbZV0pcmV0dXJuIHRbZV0uZXhwb3J0czt2YXIgbj10W2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcltlXS5jYWxsKG4uZXhwb3J0cyxuLG4uZXhwb3J0cyxwKSxuLmw9ITAsbi5leHBvcnRzfXAubT1yLHAuYz10LHAuZD1mdW5jdGlvbihyLGUsbil7cC5vKHIsZSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHAucj1mdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LHAubj1mdW5jdGlvbihyKXt2YXIgZT1yJiZyLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiByfTtyZXR1cm4gcC5kKGUsImEiLGUpLGV9LHAubz1mdW5jdGlvbihyLGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixlKX0scC5wPSIiO3ZhciBjPXdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10sYT1jLnB1c2guYmluZChjKTtjLnB1c2g9ZSxjPWMuc2xpY2UoKTtmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyllKGNbZl0pO3ZhciBpPWE7bigpfShbXSk7KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1syXSx7IityTHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIikuZG9jdW1lbnQ7ZS5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSwiMC9SNCI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sIjBUV3AiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGUpe3ZhciB0PWUucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbihlKXt0JiZ0Lm1hcmsmJnQubWFyayhlKX1mdW5jdGlvbiByKGUsbil7dCYmdC5tZWFzdXJlJiZ0Lm1lYXN1cmUoZSxuKX1pZihuKCJab25lIiksZS5ab25lKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTt2YXIgbyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3RoaXMuX3Byb3BlcnRpZXM9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uYW1lPXQ/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+dTspcihjLG49dFt1KytdKSYmKH5pKHMsbil8fHMucHVzaChuKSk7cmV0dXJuIHN9fSwienErQyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5tYXAsYz1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6aShhcmd1bWVudHNbMl0pLHI9YShvKHQpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIHU9Yy5nZXQodCk7cmV0dXJuIHUuZGVsZXRlKG4pLCEhdS5zaXplfHxjLmRlbGV0ZSh0KX19KX19LFtbMywwXV1dKTsod2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSkucHVzaChbWzNdLHs0OmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9bigielVuYiIpfSxjcm5kOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICInK3QrJyIuJyk7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfSl9bi5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuW119LG4ucmVzb2x2ZT1uLHQuZXhwb3J0cz1uLG4uaWQ9ImNybmQifSx6VW5iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciByPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9fHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pfTtmdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1yKHQsZSksdC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToobi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IG4pfXZhciBvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIGU9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdH07ZnVuY3Rpb24gYSh0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl0sbj0wO3JldHVybiBlP2UuY2FsbCh0KTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiB0JiZuPj10Lmxlbmd0aCYmKHQ9dm9pZCAwKSx7dmFsdWU6dCYmdFtuKytdLGRvbmU6IXR9fX19ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gdDt2YXIgcixpLG89bi5jYWxsKHQpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PWV8fGUtLSA+MCkmJiEocj1vLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiBsKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQ9dC5jb25jYXQocyhhcmd1bWVudHNbZV0pKTtyZXR1cm4gdH1mdW5jdGlvbiB1KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fXZhciBjPSExLGg9e1Byb21pc2U6dm9pZCAwLHNldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKHQpe2M9dH0sZ2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcoKXtyZXR1cm4gY319O2Z1bmN0aW9uIGYodCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9KX12YXIgcD17Y2xvc2VkOiEwLG5leHQ6ZnVuY3Rpb24odCl7fSxlcnJvcjpmdW5jdGlvbih0KXtpZihoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtmKHQpfSxjb21wbGV0ZTpmdW5jdGlvbigpe319LGQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGh9O2Z1bmN0aW9uIG0odCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgeSxnPXtlOnt9fTtmdW5jdGlvbiB2KCl7dHJ5e3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaCh0KXtyZXR1cm4gZy5lPXQsZ319ZnVuY3Rpb24gXyh0KXtyZXR1cm4geT10LHZ9dmFyIGI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXt2YXIgcj10LmNhbGwodGhpcyxuP24ubGVuZ3RoKyIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiAgIituLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlKzErIikgIit0LnRvU3RyaW5nKCl9KS5qb2luKCJcbiAgIik6IiIpfHx0aGlzO3JldHVybiByLmVycm9ycz1uLHIubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsZS5wcm90b3R5cGUpLHJ9cmV0dXJuIGkoZSx0KSxlfShFcnJvciksdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbCx0JiYodGhpcy5fdW5zdWJzY3JpYmU9dCl9dmFyIGU7cmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQsZT0hMTtpZighdGhpcy5jbG9zZWQpe3ZhciBuPXRoaXMuX3BhcmVudCxyPXRoaXMuX3BhcmVudHMsaT10aGlzLl91bnN1YnNjcmliZSxvPXRoaXMuX3N1YnNjcmlwdGlvbnM7dGhpcy5jbG9zZWQ9ITAsdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbnM9bnVsbDtmb3IodmFyIGE9LTEscz1yP3IubGVuZ3RoOjA7bjspbi5yZW1vdmUodGhpcyksbj0rK2E8cyYmclthXXx8bnVsbDtpZih1KGkpJiZfKGkpLmNhbGwodGhpcyk9PT1nJiYoZT0hMCx0PXR8fChnLmUgaW5zdGFuY2VvZiBiP3goZy5lLmVycm9ycyk6W2cuZV0pKSxkKG8pKWZvcihhPS0xLHM9by5sZW5ndGg7KythPHM7KXt2YXIgbD1vW2FdO2lmKG0obCkmJl8obC51bnN1YnNjcmliZSkuY2FsbChsKT09PWcpe2U9ITAsdD10fHxbXTt2YXIgYz1nLmU7YyBpbnN0YW5jZW9mIGI/dD10LmNvbmNhdCh4KGMuZXJyb3JzKSk6dC5wdXNoKGMpfX1pZihlKXRocm93IG5ldyBiKHQpfX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKCFlfHxlPT09dC5FTVBUWSlyZXR1cm4gdC5FTVBUWTtpZihlPT09dGhpcylyZXR1cm4gdGhpczt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobi5jbG9zZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLnVuc3Vic2NyaWJlKXJldHVybiBuO2lmKHRoaXMuY2xvc2VkKXJldHVybiBuLnVuc3Vic2NyaWJlKCksbjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5fYWRkUGFyZW50KXt2YXIgcj1uOyhuPW5ldyB0KS5fc3Vic2NyaXB0aW9ucz1bcl19YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0ZWFyZG93biAiK2UrIiBhZGRlZCB0byBTdWJzY3JpcHRpb24uIil9cmV0dXJuKHRoaXMuX3N1YnNjcmlwdGlvbnN8fCh0aGlzLl9zdWJzY3JpcHRpb25zPVtdKSkucHVzaChuKSxuLl9hZGRQYXJlbnQodGhpcyksbn0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKX19LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyZW50LG49dGhpcy5fcGFyZW50cztlJiZlIT09dD9uPy0xPT09bi5pbmRleE9mKHQpJiZuLnB1c2godCk6dGhpcy5fcGFyZW50cz1bdF06dGhpcy5fcGFyZW50PXR9LHQuRU1QVFk9KChlPW5ldyB0KS5jbG9zZWQ9ITAsZSksdH0oKTtmdW5jdGlvbiB4KHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlIGluc3RhbmNlb2YgYj9lLmVycm9yczplKX0sW10pfXZhciBDPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoInJ4U3Vic2NyaWJlciIpOiJAQHJ4U3Vic2NyaWJlciIsRT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaSxvPXQuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2goby5zeW5jRXJyb3JWYWx1ZT1udWxsLG8uc3luY0Vycm9yVGhyb3duPSExLG8uc3luY0Vycm9yVGhyb3dhYmxlPSExLG8uaXNTdG9wcGVkPSExLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpvLmRlc3RpbmF0aW9uPXA7YnJlYWs7Y2FzZSAxOmlmKCFlKXtvLmRlc3RpbmF0aW9uPXA7YnJlYWt9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZigoaT1lKWluc3RhbmNlb2YgRXx8InN5bmNFcnJvclRocm93YWJsZSJpbiBpJiZpW0NdKXt2YXIgYT1lW0NdKCk7by5zeW5jRXJyb3JUaHJvd2FibGU9YS5zeW5jRXJyb3JUaHJvd2FibGUsby5kZXN0aW5hdGlvbj1hLGEuYWRkKG8pfWVsc2Ugby5zeW5jRXJyb3JUaHJvd2FibGU9ITAsby5kZXN0aW5hdGlvbj1uZXcgUyhvLGUpO2JyZWFrfWRlZmF1bHQ6by5zeW5jRXJyb3JUaHJvd2FibGU9ITAsby5kZXN0aW5hdGlvbj1uZXcgUyhvLGUsbixyKX1yZXR1cm4gb31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlW0NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT1uZXcgZSh0LG4scik7cmV0dXJuIGkuc3luY0Vycm9yVGhyb3dhYmxlPSExLGl9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc1N0b3BwZWR8fHRoaXMuX25leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZUFuZFJlY3ljbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnQsZT10aGlzLl9wYXJlbnRzO3JldHVybiB0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9wYXJlbnRzPW51bGwsdGhpcy51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkPSExLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuX3BhcmVudD10LHRoaXMuX3BhcmVudHM9ZSx0aGlzfSxlfSh3KSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG8sYT10LmNhbGwodGhpcyl8fHRoaXM7YS5fcGFyZW50U3Vic2NyaWJlcj1lO3ZhciBzPWE7cmV0dXJuIHUobik/bz1uOm4mJihvPW4ubmV4dCxyPW4uZXJyb3IsaT1uLmNvbXBsZXRlLG4hPT1wJiYodSgocz1PYmplY3QuY3JlYXRlKG4pKS51bnN1YnNjcmliZSkmJmEuYWRkKHMudW5zdWJzY3JpYmUuYmluZChzKSkscy51bnN1YnNjcmliZT1hLnVuc3Vic2NyaWJlLmJpbmQoYSkpKSxhLl9jb250ZXh0PXMsYS5fbmV4dD1vLGEuX2Vycm9yPXIsYS5fY29tcGxldGU9aSxhfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQmJnRoaXMuX25leHQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7aC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX25leHQsdCkmJnRoaXMudW5zdWJzY3JpYmUoKTp0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9uZXh0LHQpfX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgZT10aGlzLl9wYXJlbnRTdWJzY3JpYmVyLG49aC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nO2lmKHRoaXMuX2Vycm9yKW4mJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZSBpZihlLnN5bmNFcnJvclRocm93YWJsZSluPyhlLnN5bmNFcnJvclZhbHVlPXQsZS5zeW5jRXJyb3JUaHJvd249ITApOmYodCksdGhpcy51bnN1YnNjcmliZSgpO2Vsc2V7aWYodGhpcy51bnN1YnNjcmliZSgpLG4pdGhyb3cgdDtmKHQpfX19LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7aWYodGhpcy5fY29tcGxldGUpe3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbXBsZXRlLmNhbGwodC5fY29udGV4dCl9O2gudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZS5zeW5jRXJyb3JUaHJvd2FibGU/KHRoaXMuX190cnlPclNldEVycm9yKGUsbiksdGhpcy51bnN1YnNjcmliZSgpKToodGhpcy5fX3RyeU9yVW5zdWIobiksdGhpcy51bnN1YnNjcmliZSgpKX1lbHNlIHRoaXMudW5zdWJzY3JpYmUoKX19LGUucHJvdG90eXBlLl9fdHJ5T3JVbnN1Yj1mdW5jdGlvbih0LGUpe3RyeXt0LmNhbGwodGhpcy5fY29udGV4dCxlKX1jYXRjaCh0KXtpZih0aGlzLnVuc3Vic2NyaWJlKCksaC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7Zih0KX19LGUucHJvdG90eXBlLl9fdHJ5T3JTZXRFcnJvcj1mdW5jdGlvbih0LGUsbil7aWYoIWgudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyBuZXcgRXJyb3IoImJhZCBjYWxsIik7dHJ5e2UuY2FsbCh0aGlzLl9jb250ZXh0LG4pfWNhdGNoKGUpe3JldHVybiBoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/KHQuc3luY0Vycm9yVmFsdWU9ZSx0LnN5bmNFcnJvclRocm93bj0hMCwhMCk6KGYoZSksITApfXJldHVybiExfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO3RoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9wYXJlbnRTdWJzY3JpYmVyPW51bGwsdC51bnN1YnNjcmliZSgpfSxlfShFKSxrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBUKCl7fWZ1bmN0aW9uIEEoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIFAodCl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdD8xPT09dC5sZW5ndGg/dFswXTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSh0KX0sZSl9OlR9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9cmV0dXJuIHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc291cmNlPXRoaXMsbi5vcGVyYXRvcj1lLG59LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5vcGVyYXRvcixpPWZ1bmN0aW9uKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2YgRSlyZXR1cm4gdDtpZih0W0NdKXJldHVybiB0W0NdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IEUodCxlLG4pOm5ldyBFKHApfSh0LGUsbik7aWYocj9yLmNhbGwoaSx0aGlzLnNvdXJjZSk6aS5hZGQodGhpcy5zb3VyY2V8fGgudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmIWkuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX3N1YnNjcmliZShpKTp0aGlzLl90cnlTdWJzY3JpYmUoaSkpLGgudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmaS5zeW5jRXJyb3JUaHJvd2FibGUmJihpLnN5bmNFcnJvclRocm93YWJsZT0hMSxpLnN5bmNFcnJvclRocm93bikpdGhyb3cgaS5zeW5jRXJyb3JWYWx1ZTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KX1jYXRjaChlKXtoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLHQuZXJyb3IoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9SShlKSkoZnVuY3Rpb24oZSxyKXt2YXIgaTtpPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3RyeXt0KGUpfWNhdGNoKHQpe3IodCksaSYmaS51bnN1YnNjcmliZSgpfX0scixlKX0pfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc291cmNlO3JldHVybiBlJiZlLnN1YnNjcmliZSh0KX0sdC5wcm90b3R5cGVba109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMD09PXQubGVuZ3RoP3RoaXM6UCh0KSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyh0PUkodCkpKGZ1bmN0aW9uKHQsbil7dmFyIHI7ZS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0sZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHQocil9KX0pfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gSSh0KXtpZih0fHwodD1oLlByb21pc2V8fFByb21pc2UpLCF0KXRocm93IG5ldyBFcnJvcigibm8gUHJvbWlzZSBpbXBsIGZvdW5kIik7cmV0dXJuIHR9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc2NoZWR1bGV9dmFyIE49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnBhcmVudD1lLGkub3V0ZXJWYWx1ZT1uLGkub3V0ZXJJbmRleD1yLGkuaW5kZXg9MCxpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5RXJyb3IodCx0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMucGFyZW50Lm5vdGlmeUNvbXBsZXRlKHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZX0oRSksUj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHImJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY2xvc2VkfHxlLmNvbXBsZXRlKCl9fSxEPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC50aGVuKGZ1bmN0aW9uKHQpe2UuY2xvc2VkfHwoZS5uZXh0KHQpLGUuY29tcGxldGUoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiBlLmVycm9yKHQpfSkudGhlbihudWxsLGYpLGV9fSxMPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCksaj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXRbTF0oKTs7KXt2YXIgcj1uLm5leHQoKTtpZihyLmRvbmUpe2UuY29tcGxldGUoKTticmVha31pZihlLm5leHQoci52YWx1ZSksZS5jbG9zZWQpYnJlYWt9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4ucmV0dXJuJiZlLmFkZChmdW5jdGlvbigpe24ucmV0dXJuJiZuLnJldHVybigpfSksZX19LEY9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRba10oKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5zdWJzY3JpYmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKTtyZXR1cm4gbi5zdWJzY3JpYmUoZSl9fSxWPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgdH07ZnVuY3Rpb24gQih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3Vic2NyaWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufXZhciB6PWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBPKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5faXNTY2FsYXI/KGUubmV4dCh0LnZhbHVlKSx2b2lkIGUuY29tcGxldGUoKSk6dC5zdWJzY3JpYmUoZSl9O2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2tdKXJldHVybiBGKHQpO2lmKFYodCkpcmV0dXJuIFIodCk7aWYoQih0KSlyZXR1cm4gRCh0KTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtMXSlyZXR1cm4gaih0KTt2YXIgZT1tKHQpPyJhbiBpbnZhbGlkIG9iamVjdCI6IiciK3QrIiciO3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBwcm92aWRlZCAiK2UrIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBBcnJheSwgb3IgSXRlcmFibGUuIil9O2Z1bmN0aW9uIFUodCxlLG4scil7dmFyIGk9bmV3IE4odCxuLHIpO3JldHVybiB6KGUpKGkpfXZhciBIPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5RXJyb3I9ZnVuY3Rpb24odCxlKXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KEUpO2Z1bmN0aW9uIHEodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uIEFyZSB5b3UgbG9va2luZyBmb3IgYG1hcFRvKClgPyIpO3JldHVybiBuLmxpZnQobmV3IEcodCxlKSl9fXZhciBHPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucHJvamVjdD10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBXKHQsdGhpcy5wcm9qZWN0LHRoaXMudGhpc0FyZykpfSx0fSgpLFc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucHJvamVjdD1uLGkuY291bnQ9MCxpLnRoaXNBcmc9cnx8aSxpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcm9qZWN0LmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5jb3VudCsrKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oRSk7ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBuZXcgTyhlP2Z1bmN0aW9uKG4pe3ZhciByPW5ldyB3LGk9MDtyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe2khPT10Lmxlbmd0aD8obi5uZXh0KHRbaSsrXSksbi5jbG9zZWR8fHIuYWRkKHRoaXMuc2NoZWR1bGUoKSkpOm4uY29tcGxldGUoKX0pKSxyfTpSKHQpKX1mdW5jdGlvbiBLKHQsZSl7aWYoIWUpcmV0dXJuIHQgaW5zdGFuY2VvZiBPP3Q6bmV3IE8oeih0KSk7aWYobnVsbCE9dCl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2tdfSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IE8oZT9mdW5jdGlvbihuKXt2YXIgcj1uZXcgdztyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3ZhciBpPXRba10oKTtyLmFkZChpLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKX0sZXJyb3I6ZnVuY3Rpb24odCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmVycm9yKHQpfSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfX0pKX0pKSxyfTpGKHQpKX0odCxlKTtpZihCKHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgTyhlP2Z1bmN0aW9uKG4pe3ZhciByPW5ldyB3O3JldHVybiByLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7bi5uZXh0KHQpLHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5jb21wbGV0ZSgpfSkpfSkpfSxmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9KX0pKSxyfTpEKHQpKX0odCxlKTtpZihWKHQpKXJldHVybiBRKHQsZSk7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W0xdfSh0KXx8InN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IE8oZT9mdW5jdGlvbihuKXt2YXIgcixpPW5ldyB3O3JldHVybiBpLmFkZChmdW5jdGlvbigpe3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByLnJldHVybiYmci5yZXR1cm4oKX0pLGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyPXRbTF0oKSxpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7aWYoIW4uY2xvc2VkKXt2YXIgdCxlO3RyeXt2YXIgaT1yLm5leHQoKTt0PWkudmFsdWUsZT1pLmRvbmV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgbi5lcnJvcih0KX1lP24uY29tcGxldGUoKToobi5uZXh0KHQpLHRoaXMuc2NoZWR1bGUoKSl9fSkpfSkpLGl9OmoodCkpfSh0LGUpfXRocm93IG5ldyBUeXBlRXJyb3IoKG51bGwhPT10JiZ0eXBlb2YgdHx8dCkrIiBpcyBub3Qgb2JzZXJ2YWJsZSIpfWZ1bmN0aW9uIFoodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHIpe3JldHVybiByLnBpcGUoWihmdW5jdGlvbihuLHIpe3JldHVybiBLKHQobixyKSkucGlwZShxKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUobix0LHIsaSl9KSl9LG4pKX06KCJudW1iZXIiPT10eXBlb2YgZSYmKG49ZSksZnVuY3Rpb24oZSl7cmV0dXJuIGUubGlmdChuZXcgWSh0LG4pKX0pfXZhciBZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PWUmJihlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksdGhpcy5wcm9qZWN0PXQsdGhpcy5jb25jdXJyZW50PWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IFgodCx0aGlzLnByb2plY3QsdGhpcy5jb25jdXJyZW50KSl9LHR9KCksWD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1yJiYocj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnByb2plY3Q9bixpLmNvbmN1cnJlbnQ9cixpLmhhc0NvbXBsZXRlZD0hMSxpLmJ1ZmZlcj1bXSxpLmFjdGl2ZT0wLGkuaW5kZXg9MCxpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU8dGhpcy5jb25jdXJyZW50P3RoaXMuX3RyeU5leHQodCk6dGhpcy5idWZmZXIucHVzaCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5wcm9qZWN0KHQsbil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmFjdGl2ZSsrLHRoaXMuX2lubmVyU3ViKGUsdCxuKX0sZS5wcm90b3R5cGUuX2lubmVyU3ViPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmFkZChVKHRoaXMsdCxlLG4pKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5oYXNDb21wbGV0ZWQ9ITAsMD09PXRoaXMuYWN0aXZlJiYwPT09dGhpcy5idWZmZXIubGVuZ3RoJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYnVmZmVyO3RoaXMucmVtb3ZlKHQpLHRoaXMuYWN0aXZlLS0sZS5sZW5ndGg+MD90aGlzLl9uZXh0KGUuc2hpZnQoKSk6MD09PXRoaXMuYWN0aXZlJiZ0aGlzLmhhc0NvbXBsZXRlZCYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShIKTtmdW5jdGlvbiAkKHQpe3JldHVybiB0fWZ1bmN0aW9uIEoodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksWigkLHQpfWZ1bmN0aW9uIHR0KCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyPW51bGwsaT10W3QubGVuZ3RoLTFdO3JldHVybiBNKGkpPyhyPXQucG9wKCksdC5sZW5ndGg+MSYmIm51bWJlciI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSk6Im51bWJlciI9PXR5cGVvZiBpJiYobj10LnBvcCgpKSxudWxsPT09ciYmMT09PXQubGVuZ3RoJiZ0WzBdaW5zdGFuY2VvZiBPP3RbMF06SihuKShRKHQscikpfXZhciBldD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsIm9iamVjdCB1bnN1YnNjcmliZWQiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIGkoZSx0KSxlfShFcnJvciksbnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5zdWJqZWN0PWUsci5zdWJzY3JpYmVyPW4sci5jbG9zZWQ9ITEscn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDt2YXIgdD10aGlzLnN1YmplY3QsZT10Lm9ic2VydmVycztpZih0aGlzLnN1YmplY3Q9bnVsbCxlJiYwIT09ZS5sZW5ndGgmJiF0LmlzU3RvcHBlZCYmIXQuY2xvc2VkKXt2YXIgbj1lLmluZGV4T2YodGhpcy5zdWJzY3JpYmVyKTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fX0sZX0odykscnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi5kZXN0aW5hdGlvbj1lLG59cmV0dXJuIGkoZSx0KSxlfShFKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBlLm9ic2VydmVycz1bXSxlLmNsb3NlZD0hMSxlLmlzU3RvcHBlZD0hMSxlLmhhc0Vycm9yPSExLGUudGhyb3duRXJyb3I9bnVsbCxlfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGVbQ109ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ0KHRoaXMpfSxlLnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvdCh0aGlzLHRoaXMpO3JldHVybiBlLm9wZXJhdG9yPXQsZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgZXQ7aWYoIXRoaXMuaXNTdG9wcGVkKWZvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGljZSgpLGk9MDtpPG47aSsrKXJbaV0ubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IGV0O3RoaXMuaGFzRXJyb3I9ITAsdGhpcy50aHJvd25FcnJvcj10LHRoaXMuaXNTdG9wcGVkPSEwO2Zvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGljZSgpLGk9MDtpPG47aSsrKXJbaV0uZXJyb3IodCk7dGhpcy5vYnNlcnZlcnMubGVuZ3RoPTB9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IGV0O3RoaXMuaXNTdG9wcGVkPSEwO2Zvcih2YXIgdD10aGlzLm9ic2VydmVycyxlPXQubGVuZ3RoLG49dC5zbGljZSgpLHI9MDtyPGU7cisrKW5bcl0uY29tcGxldGUoKTt0aGlzLm9ic2VydmVycy5sZW5ndGg9MH0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz1udWxsfSxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBldDtyZXR1cm4gdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IGV0O3JldHVybiB0aGlzLmhhc0Vycm9yPyh0LmVycm9yKHRoaXMudGhyb3duRXJyb3IpLHcuRU1QVFkpOnRoaXMuaXNTdG9wcGVkPyh0LmNvbXBsZXRlKCksdy5FTVBUWSk6KHRoaXMub2JzZXJ2ZXJzLnB1c2godCksbmV3IG50KHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgTztyZXR1cm4gdC5zb3VyY2U9dGhpcyx0fSxlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgb3QodCxlKX0sZX0oTyksb3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5kZXN0aW5hdGlvbj1lLHIuc291cmNlPW4scn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbjtlJiZlLm5leHQmJmUubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbjtlJiZlLmVycm9yJiZ0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVzdGluYXRpb247dCYmdC5jb21wbGV0ZSYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZT90aGlzLnNvdXJjZS5zdWJzY3JpYmUodCk6dy5FTVBUWX0sZX0oaXQpO2Z1bmN0aW9uIGF0KCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHN0KHQpKX19dmFyIHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNvbm5lY3RhYmxlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNvbm5lY3RhYmxlO24uX3JlZkNvdW50Kys7dmFyIHI9bmV3IGx0KHQsbiksaT1lLnN1YnNjcmliZShyKTtyZXR1cm4gci5jbG9zZWR8fChyLmNvbm5lY3Rpb249bi5jb25uZWN0KCkpLGl9LHR9KCksbHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmNvbm5lY3RhYmxlPW4scn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29ubmVjdGFibGU7aWYodCl7dGhpcy5jb25uZWN0YWJsZT1udWxsO3ZhciBlPXQuX3JlZkNvdW50O2lmKGU8PTApdGhpcy5jb25uZWN0aW9uPW51bGw7ZWxzZSBpZih0Ll9yZWZDb3VudD1lLTEsZT4xKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2V7dmFyIG49dGhpcy5jb25uZWN0aW9uLHI9dC5fY29ubmVjdGlvbjt0aGlzLmNvbm5lY3Rpb249bnVsbCwhcnx8biYmciE9PW58fHIudW5zdWJzY3JpYmUoKX19ZWxzZSB0aGlzLmNvbm5lY3Rpb249bnVsbH0sZX0oRSksdXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5zb3VyY2U9ZSxyLnN1YmplY3RGYWN0b3J5PW4sci5fcmVmQ291bnQ9MCxyLl9pc0NvbXBsZXRlPSExLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9LGUucHJvdG90eXBlLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdWJqZWN0O3JldHVybiB0JiYhdC5pc1N0b3BwZWR8fCh0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH0sZS5wcm90b3R5cGUuY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Nvbm5lY3Rpb247cmV0dXJuIHR8fCh0aGlzLl9pc0NvbXBsZXRlPSExLCh0PXRoaXMuX2Nvbm5lY3Rpb249bmV3IHcpLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUobmV3IGh0KHRoaXMuZ2V0U3ViamVjdCgpLHRoaXMpKSksdC5jbG9zZWQ/KHRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0PXcuRU1QVFkpOnRoaXMuX2Nvbm5lY3Rpb249dCksdH0sZS5wcm90b3R5cGUucmVmQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYXQoKSh0aGlzKX0sZX0oTykucHJvdG90eXBlLGN0PXtvcGVyYXRvcjp7dmFsdWU6bnVsbH0sX3JlZkNvdW50Ont2YWx1ZTowLHdyaXRhYmxlOiEwfSxfc3ViamVjdDp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX2Nvbm5lY3Rpb246e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9zdWJzY3JpYmU6e3ZhbHVlOnV0Ll9zdWJzY3JpYmV9LF9pc0NvbXBsZXRlOnt2YWx1ZTp1dC5faXNDb21wbGV0ZSx3cml0YWJsZTohMH0sZ2V0U3ViamVjdDp7dmFsdWU6dXQuZ2V0U3ViamVjdH0sY29ubmVjdDp7dmFsdWU6dXQuY29ubmVjdH0scmVmQ291bnQ6e3ZhbHVlOnV0LnJlZkNvdW50fX0saHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmNvbm5lY3RhYmxlPW4scn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbihlKXt0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY29ubmVjdGFibGUuX2lzQ29tcGxldGU9ITAsdGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7dmFyIGU9dC5fY29ubmVjdGlvbjt0Ll9yZWZDb3VudD0wLHQuX3N1YmplY3Q9bnVsbCx0Ll9jb25uZWN0aW9uPW51bGwsZSYmZS51bnN1YnNjcmliZSgpfX0sZX0ocnQpO2Z1bmN0aW9uIGZ0KCl7cmV0dXJuIG5ldyBpdH1mdW5jdGlvbiBwdCgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYXQoKSgoZT1mdCxmdW5jdGlvbih0KXt2YXIgbjtuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LGN0KTtyZXR1cm4gci5zb3VyY2U9dCxyLnN1YmplY3RGYWN0b3J5PW4scn0pKHQpKTt2YXIgZX19ZnVuY3Rpb24gZHQodCl7cmV0dXJue3Byb3ZpZGVkSW46dC5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6dC5mYWN0b3J5LHZhbHVlOnZvaWQgMH19dmFyIG10PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2Rlc2M9dCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5uZ0luamVjdGFibGVEZWY9dm9pZCAwIT09ZT9kdCh7cHJvdmlkZWRJbjplLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmUuZmFjdG9yeX0pOnZvaWQgMH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iSW5qZWN0aW9uVG9rZW4gIit0aGlzLl9kZXNjfSx0fSgpLHl0PSJfX3BhcmFtZXRlcnNfXyI7ZnVuY3Rpb24gZ3QodCxlLG4pe3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtpZih0KXt2YXIgcj10LmFwcGx5KHZvaWQgMCxsKGUpKTtmb3IodmFyIGkgaW4gcil0aGlzW2ldPXJbaV19fX0oZSk7ZnVuY3Rpb24gaSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtpZih0aGlzIGluc3RhbmNlb2YgaSlyZXR1cm4gci5hcHBseSh0aGlzLHQpLHRoaXM7dmFyIG4sbz1uZXcoKG49aSkuYmluZC5hcHBseShuLGwoW3ZvaWQgMF0sdCkpKTtyZXR1cm4gYS5hbm5vdGF0aW9uPW8sYTtmdW5jdGlvbiBhKHQsZSxuKXtmb3IodmFyIHI9dC5oYXNPd25Qcm9wZXJ0eSh5dCk/dFt5dF06T2JqZWN0LmRlZmluZVByb3BlcnR5KHQseXQse3ZhbHVlOltdfSlbeXRdO3IubGVuZ3RoPD1uOylyLnB1c2gobnVsbCk7cmV0dXJuKHJbbl09cltuXXx8W10pLnB1c2gobyksdH19cmV0dXJuIG4mJihpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSksaS5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9dCxpLmFubm90YXRpb25DbHM9aSxpfXZhciB2dD1uZXcgbXQoIkFuYWx5emVGb3JFbnRyeUNvbXBvbmVudHMiKTtGdW5jdGlvbjt2YXIgX3Q9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdyxidD0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZix3dD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLHh0PV90fHx3dHx8YnQsQ3Q9UHJvbWlzZS5yZXNvbHZlKDApLEV0PW51bGw7ZnVuY3Rpb24gU3QoKXtpZighRXQpe3ZhciB0PXh0LlN5bWJvbDtpZih0JiZ0Lml0ZXJhdG9yKUV0PXQuaXRlcmF0b3I7ZWxzZSBmb3IodmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTWFwLnByb3RvdHlwZSksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgcj1lW25dOyJlbnRyaWVzIiE9PXImJiJzaXplIiE9PXImJk1hcC5wcm90b3R5cGVbcl09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJihFdD1yKX19cmV0dXJuIEV0fWZ1bmN0aW9uIGt0KHQpeyJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZT9DdC50aGVuKGZ1bmN0aW9uKCl7dCYmdC5hcHBseShudWxsLG51bGwpfSk6Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJzY2hlZHVsZU1pY3JvdGFzayIsdCl9ZnVuY3Rpb24gVHQodCxlKXtyZXR1cm4gdD09PWV8fCJudW1iZXIiPT10eXBlb2YgdCYmIm51bWJlciI9PXR5cGVvZiBlJiZpc05hTih0KSYmaXNOYU4oZSl9ZnVuY3Rpb24gQXQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHQgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iWyIrdC5tYXAoQXQpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PXQpcmV0dXJuIiIrdDtpZih0Lm92ZXJyaWRkZW5OYW1lKXJldHVybiIiK3Qub3ZlcnJpZGRlbk5hbWU7aWYodC5uYW1lKXJldHVybiIiK3QubmFtZTt2YXIgZT10LnRvU3RyaW5nKCk7aWYobnVsbD09ZSlyZXR1cm4iIitlO3ZhciBuPWUuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PW4/ZTplLnN1YnN0cmluZygwLG4pfWZ1bmN0aW9uIFB0KHQpe3JldHVybiB0Ll9fZm9yd2FyZF9yZWZfXz1QdCx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEF0KHRoaXMoKSl9LHR9ZnVuY3Rpb24gT3QodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuaGFzT3duUHJvcGVydHkoIl9fZm9yd2FyZF9yZWZfXyIpJiZ0Ll9fZm9yd2FyZF9yZWZfXz09PVB0P3QoKTp0fXZhciBJdD1ndCgiSW5qZWN0IixmdW5jdGlvbih0KXtyZXR1cm57dG9rZW46dH19KSxNdD1ndCgiT3B0aW9uYWwiKSxOdD1ndCgiU2VsZiIpLFJ0PWd0KCJTa2lwU2VsZiIpLER0PSJfX3NvdXJjZSIsTHQ9bmV3IE9iamVjdCxqdD1uZXcgbXQoIklOSkVDVE9SIiksRnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT1MdCksZT09PUx0KXRocm93IG5ldyBFcnJvcigiTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAiK0F0KHQpKyIhIik7cmV0dXJuIGV9LHR9KCksVnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP25ldyBadCh0LGUpOm5ldyBadCh0LnByb3ZpZGVycyx0LnBhcmVudCx0Lm5hbWV8fG51bGwpfSx0LlRIUk9XX0lGX05PVF9GT1VORD1MdCx0Lk5VTEw9bmV3IEZ0LHQubmdJbmplY3RhYmxlRGVmPWR0KHtwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZWUoanQpfX0pLHR9KCksQnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHp0PVtdLFV0PUJ0LEh0PWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyl9LHF0PXt9LEd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHRbZV09PT1xdClyZXR1cm4gZTt0aHJvdyBFcnJvcigiIXByb3AiKX0oe3Byb3ZpZGU6U3RyaW5nLHVzZVZhbHVlOnF0fSksV3Q9VnQuTlVMTCxRdD0vXG4vZ20sS3Q9Ilx1MDI3NSIsWnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1lJiYoZT1XdCksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1uO3ZhciByPXRoaXMuX3JlY29yZHM9bmV3IE1hcDtyLnNldChWdCx7dG9rZW46VnQsZm46QnQsZGVwczp6dCx2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLHIuc2V0KGp0LHt0b2tlbjpqdCxmbjpCdCxkZXBzOnp0LHZhbHVlOnRoaXMsdXNlTmV3OiExfSksZnVuY3Rpb24gdChlLG4pe2lmKG4paWYoKG49T3QobikpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0KGUsbltyXSk7ZWxzZXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil0aHJvdyAkdCgiRnVuY3Rpb24vQ2xhc3Mgbm90IHN1cHBvcnRlZCIsbik7aWYoIW58fCJvYmplY3QiIT10eXBlb2Ygbnx8IW4ucHJvdmlkZSl0aHJvdyAkdCgiVW5leHBlY3RlZCBwcm92aWRlciIsbik7dmFyIGk9T3Qobi5wcm92aWRlKSxvPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXp0LG49dC5kZXBzO2lmKG4mJm4ubGVuZ3RoKXtlPVtdO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT02O2lmKChsPU90KG5bcl0pKWluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBvPTAsYT1sO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3MgaW5zdGFuY2VvZiBNdHx8cz09TXQ/aXw9MTpzIGluc3RhbmNlb2YgUnR8fHM9PVJ0P2kmPS0zOnMgaW5zdGFuY2VvZiBOdHx8cz09TnQ/aSY9LTU6bD1zIGluc3RhbmNlb2YgSXQ/cy50b2tlbjpPdChzKX1lLnB1c2goe3Rva2VuOmwsb3B0aW9uczppfSl9fWVsc2UgaWYodC51c2VFeGlzdGluZyl7dmFyIGw7ZT1be3Rva2VuOmw9T3QodC51c2VFeGlzdGluZyksb3B0aW9uczo2fV19ZWxzZSBpZighKG58fEd0IGluIHQpKXRocm93ICR0KCInZGVwcycgcmVxdWlyZWQiLHQpO3JldHVybiBlfSh0KSxuPUJ0LHI9enQsaT0hMSxvPU90KHQucHJvdmlkZSk7aWYoR3QgaW4gdClyPXQudXNlVmFsdWU7ZWxzZSBpZih0LnVzZUZhY3Rvcnkpbj10LnVzZUZhY3Rvcnk7ZWxzZSBpZih0LnVzZUV4aXN0aW5nKTtlbHNlIGlmKHQudXNlQ2xhc3MpaT0hMCxuPU90KHQudXNlQ2xhc3MpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgJHQoIlN0YXRpY1Byb3ZpZGVyIGRvZXMgbm90IGhhdmUgW3VzZVZhbHVlfHVzZUZhY3Rvcnl8dXNlRXhpc3Rpbmd8dXNlQ2xhc3NdIG9yIFtwcm92aWRlXSBpcyBub3QgbmV3YWJsZSIsdCk7aT0hMCxuPW99cmV0dXJue2RlcHM6ZSxmbjpuLHVzZU5ldzppLHZhbHVlOnJ9fShuKTtpZighMD09PW4ubXVsdGkpe3ZhciBhPWUuZ2V0KGkpO2lmKGEpe2lmKGEuZm4hPT1IdCl0aHJvdyBZdChpKX1lbHNlIGUuc2V0KGksYT17dG9rZW46bi5wcm92aWRlLGRlcHM6W10sdXNlTmV3OiExLGZuOkh0LHZhbHVlOnp0fSk7YS5kZXBzLnB1c2goe3Rva2VuOmk9bixvcHRpb25zOjZ9KX12YXIgcz1lLmdldChpKTtpZihzJiZzLmZuPT1IdCl0aHJvdyBZdChpKTtlLnNldChpLG8pfX0ocix0KX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgcj10aGlzLl9yZWNvcmRzLmdldCh0KTt0cnl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLHIsaSxvLGEpe3RyeXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIsaSxvLGEpe3ZhciBzLHU7aWYoIW58fDQmYSkyJmF8fChzPWkuZ2V0KGUsbywwKSk7ZWxzZXtpZigocz1uLnZhbHVlKT09VXQpdGhyb3cgRXJyb3IoS3QrIkNpcmN1bGFyIGRlcGVuZGVuY3kiKTtpZihzPT09enQpe24udmFsdWU9VXQ7dmFyIGM9bi51c2VOZXcsaD1uLmZuLGY9bi5kZXBzLHA9enQ7aWYoZi5sZW5ndGgpe3A9W107Zm9yKHZhciBkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBtPWZbZF0seT1tLm9wdGlvbnMsZz0yJnk/ci5nZXQobS50b2tlbik6dm9pZCAwO3AucHVzaCh0KG0udG9rZW4sZyxyLGd8fDQmeT9pOld0LDEmeT9udWxsOlZ0LlRIUk9XX0lGX05PVF9GT1VORCwwKSl9fW4udmFsdWU9cz1jP25ldygodT1oKS5iaW5kLmFwcGx5KHUsbChbdm9pZCAwXSxwKSkpOmguYXBwbHkodm9pZCAwLHApfX1yZXR1cm4gc30oZSxuLHIsaSxvLGEpfWNhdGNoKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQpKSwodC5uZ1RlbXBUb2tlblBhdGg9dC5uZ1RlbXBUb2tlblBhdGh8fFtdKS51bnNoaWZ0KGUpLG4mJm4udmFsdWU9PVV0JiYobi52YWx1ZT16dCksdH19KHQscix0aGlzLl9yZWNvcmRzLHRoaXMucGFyZW50LGUsbil9Y2F0Y2goZSl7dmFyIGk9ZS5uZ1RlbXBUb2tlblBhdGg7dGhyb3cgdFtEdF0mJmkudW5zaGlmdCh0W0R0XSksZS5tZXNzYWdlPVh0KCJcbiIrZS5tZXNzYWdlLGksdGhpcy5zb3VyY2UpLGUubmdUb2tlblBhdGg9aSxlLm5nVGVtcFRva2VuUGF0aD1udWxsLGV9fSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9yZWNvcmRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wdXNoKEF0KG4pKX0pLCJTdGF0aWNJbmplY3RvclsiK3Quam9pbigiLCAiKSsiXSJ9LHR9KCk7ZnVuY3Rpb24gWXQodCl7cmV0dXJuICR0KCJDYW5ub3QgbWl4IG11bHRpIHByb3ZpZGVycyBhbmQgcmVndWxhciBwcm92aWRlcnMiLHQpfWZ1bmN0aW9uIFh0KHQsZSxuKXt2b2lkIDA9PT1uJiYobj1udWxsKSx0PXQmJiJcbiI9PT10LmNoYXJBdCgwKSYmdC5jaGFyQXQoMSk9PUt0P3Quc3Vic3RyKDIpOnQ7dmFyIHI9QXQoZSk7aWYoZSBpbnN0YW5jZW9mIEFycmF5KXI9ZS5tYXAoQXQpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl7dmFyIGk9W107Zm9yKHZhciBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIGE9ZVtvXTtpLnB1c2gobysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpBdChhKSkpfXI9InsiK2kuam9pbigiLCAiKSsifSJ9cmV0dXJuIlN0YXRpY0luamVjdG9yRXJyb3IiKyhuPyIoIituKyIpIjoiIikrIlsiK3IrIl06ICIrdC5yZXBsYWNlKFF0LCJcbiAgIil9ZnVuY3Rpb24gJHQodCxlKXtyZXR1cm4gbmV3IEVycm9yKFh0KHQsZSkpfXZhciBKdD12b2lkIDA7ZnVuY3Rpb24gdGUodCl7dmFyIGU9SnQ7cmV0dXJuIEp0PXQsZX1mdW5jdGlvbiBlZSh0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PUp0KXRocm93IG5ldyBFcnJvcigiaW5qZWN0KCkgbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBpbmplY3Rpb24gY29udGV4dCIpO2lmKG51bGw9PT1KdCl7dmFyIG49dC5uZ0luamVjdGFibGVEZWY7aWYobiYmInJvb3QiPT1uLnByb3ZpZGVkSW4pcmV0dXJuIHZvaWQgMD09PW4udmFsdWU/bi52YWx1ZT1uLmZhY3RvcnkoKTpuLnZhbHVlO3Rocm93IG5ldyBFcnJvcigiSW5qZWN0b3I6IE5PVF9GT1VORCBbIitBdCh0KSsiXSIpfXJldHVybiBKdC5nZXQodCw4JmU/bnVsbDp2b2lkIDAsZSl9U3RyaW5nO3ZhciBuZT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsdFt0Lk5hdGl2ZT0xXT0iTmF0aXZlIix0W3QuTm9uZT0yXT0iTm9uZSIsdH0oe30pLHJlPW5ldyBmdW5jdGlvbih0KXt0aGlzLmZ1bGw9IjYuMC41Iix0aGlzLm1ham9yPSI2LjAuNSIuc3BsaXQoIi4iKVswXSx0aGlzLm1pbm9yPSI2LjAuNSIuc3BsaXQoIi4iKVsxXSx0aGlzLnBhdGNoPSI2LjAuNSIuc3BsaXQoIi4iKS5zbGljZSgyKS5qb2luKCIuIil9KCI2LjAuNSIpLGllPSJuZ0RlYnVnQ29udGV4dCIsb2U9Im5nT3JpZ2luYWxFcnJvciIsYWU9Im5nRXJyb3JMb2dnZXIiO2Z1bmN0aW9uIHNlKHQpe3JldHVybiB0W2llXX1mdW5jdGlvbiBsZSh0KXtyZXR1cm4gdFtvZV19ZnVuY3Rpb24gdWUodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LGwoZSkpfXZhciBjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9jb25zb2xlPWNvbnNvbGV9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpLG49dGhpcy5fZmluZENvbnRleHQodCkscj1mdW5jdGlvbih0KXtyZXR1cm4gdFthZV18fHVlfSh0KTtyKHRoaXMuX2NvbnNvbGUsIkVSUk9SIix0KSxlJiZyKHRoaXMuX2NvbnNvbGUsIk9SSUdJTkFMIEVSUk9SIixlKSxuJiZyKHRoaXMuX2NvbnNvbGUsIkVSUk9SIENPTlRFWFQiLG4pfSx0LnByb3RvdHlwZS5fZmluZENvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/c2UodCk/c2UodCk6dGhpcy5fZmluZENvbnRleHQobGUodCkpOm51bGx9LHQucHJvdG90eXBlLl9maW5kT3JpZ2luYWxFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bGUodCk7ZSYmbGUoZSk7KWU9bGUoZSk7cmV0dXJuIGV9LHR9KCksaGU9bmV3IG10KCJUaGUgcHJlc2VuY2Ugb2YgdGhpcyB0b2tlbiBtYXJrcyBhbiBpbmplY3RvciBhcyBiZWluZyB0aGUgcm9vdCBpbmplY3Rvci4iKTtmdW5jdGlvbiBmZSh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gcGUodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIGRlPW5ldyBtdCgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLmFwcEluaXRzPXQsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe2UucmVzb2x2ZT10LGUucmVqZWN0PW59KX1yZXR1cm4gdC5wcm90b3R5cGUucnVuSW5pdGlhbGl6ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pbml0aWFsaXplZCl7dmFyIGU9W10sbj1mdW5jdGlvbigpe3QuZG9uZT0hMCx0LnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IodmFyIHI9MDtyPHRoaXMuYXBwSW5pdHMubGVuZ3RoO3IrKyl7dmFyIGk9dGhpcy5hcHBJbml0c1tyXSgpO2ZlKGkpJiZlLnB1c2goaSl9UHJvbWlzZS5hbGwoZSkudGhlbihmdW5jdGlvbigpe24oKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3QucmVqZWN0KGUpfSksMD09PWUubGVuZ3RoJiZuKCksdGhpcy5pbml0aWFsaXplZD0hMH19LHR9KCkseWU9bmV3IG10KCJBcHBJZCIpO2Z1bmN0aW9uIGdlKCl7cmV0dXJuIiIrdmUoKSt2ZSgpK3ZlKCl9ZnVuY3Rpb24gdmUoKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg5NytNYXRoLmZsb29yKDI1Kk1hdGgucmFuZG9tKCkpKX12YXIgX2U9bmV3IG10KCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLGJlPW5ldyBtdCgiUGxhdGZvcm0gSUQiKSx3ZT1uZXcgbXQoImFwcEJvb3RzdHJhcExpc3RlbmVyIikseGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7Y29uc29sZS5sb2codCl9LHQucHJvdG90eXBlLndhcm49ZnVuY3Rpb24odCl7Y29uc29sZS53YXJuKHQpfSx0fSgpO2Z1bmN0aW9uIENlKCl7dGhyb3cgbmV3IEVycm9yKCJSdW50aW1lIGNvbXBpbGVyIGlzIG5vdCBsb2FkZWQiKX12YXIgRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlU3luYz1mdW5jdGlvbih0KXt0aHJvdyBDZSgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQXN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgQ2UoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jPWZ1bmN0aW9uKHQpe3Rocm93IENlKCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgQ2UoKX0sdC5wcm90b3R5cGUuY2xlYXJDYWNoZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2xlYXJDYWNoZUZvcj1mdW5jdGlvbih0KXt9LHR9KCksU2U9ZnVuY3Rpb24oKXt9LGtlPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBUZSh0KXt2YXIgZT1FcnJvcigiTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICIrQXQodCkrIi4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz8iKTtyZXR1cm4gZVtPZV09dCxlfXZhciBBZSxQZSxPZT0ibmdDb21wb25lbnQiLEllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dGhyb3cgVGUodCl9LHR9KCksTWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5VTEw9bmV3IEllLHR9KCksTmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uZ01vZHVsZT1uLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO3RoaXMuX2ZhY3Rvcmllcy5zZXQoaS5jb21wb25lbnRUeXBlLGkpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtpZighZSYmdGhpcy5fcGFyZW50JiYoZT10aGlzLl9wYXJlbnQucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCkpLCFlKXRocm93IFRlKHQpO3JldHVybiBuZXcgUmUoZSx0aGlzLl9uZ01vZHVsZSl9LHR9KCksUmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5mYWN0b3J5PWUsci5uZ01vZHVsZT1uLHIuc2VsZWN0b3I9ZS5zZWxlY3RvcixyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlLHIubmdDb250ZW50U2VsZWN0b3JzPWUubmdDb250ZW50U2VsZWN0b3JzLHIuaW5wdXRzPWUuaW5wdXRzLHIub3V0cHV0cz1lLm91dHB1dHMscn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdGhpcy5mYWN0b3J5LmNyZWF0ZSh0LGUsbixyfHx0aGlzLm5nTW9kdWxlKX0sZX0oa2UpLERlPWZ1bmN0aW9uKCl7fSxMZT1mdW5jdGlvbigpe30samU9ZnVuY3Rpb24oKXt2YXIgdD14dC53dGY7cmV0dXJuISghdHx8IShBZT10LnRyYWNlKXx8KFBlPUFlLmV2ZW50cywwKSl9KCk7ZnVuY3Rpb24gRmUodCxlKXtyZXR1cm4gbnVsbH12YXIgVmU9amU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCksUGUuY3JlYXRlU2NvcGUodCxlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gRmV9LEJlPWplP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEFlLmxlYXZlU2NvcGUodCxlKSxlfTpmdW5jdGlvbih0LGUpe3JldHVybiBlfSx6ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX19pc0FzeW5jPWUsbn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlLG4scil7dmFyIGksbz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sYT1mdW5jdGlvbigpe3JldHVybiBudWxsfTtlJiYib2JqZWN0Ij09dHlwZW9mIGU/KGk9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLm5leHQodCl9KX06ZnVuY3Rpb24odCl7ZS5uZXh0KHQpfSxlLmVycm9yJiYobz10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZXJyb3IodCl9KX06ZnVuY3Rpb24odCl7ZS5lcnJvcih0KX0pLGUuY29tcGxldGUmJihhPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmNvbXBsZXRlKCl9KX06ZnVuY3Rpb24oKXtlLmNvbXBsZXRlKCl9KSk6KGk9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlKHQpfSl9OmZ1bmN0aW9uKHQpe2UodCl9LG4mJihvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbih0KX0pfTpmdW5jdGlvbih0KXtuKHQpfSksciYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHIoKX0pfTpmdW5jdGlvbigpe3IoKX0pKTt2YXIgcz10LnByb3RvdHlwZS5zdWJzY3JpYmUuY2FsbCh0aGlzLGksbyxhKTtyZXR1cm4gZSBpbnN0YW5jZW9mIHcmJmUuYWRkKHMpLHN9LGV9KGl0KSxVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGUsbj10LmVuYWJsZUxvbmdTdGFja1RyYWNlLHI9dm9pZCAwIT09biYmbjtpZih0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IHplKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IHplKCExKSx0aGlzLm9uU3RhYmxlPW5ldyB6ZSghMSksdGhpcy5vbkVycm9yPW5ldyB6ZSghMSksInVuZGVmaW5lZCI9PXR5cGVvZiBab25lKXRocm93IG5ldyBFcnJvcigiSW4gdGhpcyBjb25maWd1cmF0aW9uIEFuZ3VsYXIgcmVxdWlyZXMgWm9uZS5qcyIpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKSx0aGlzLl9uZXN0aW5nPTAsdGhpcy5fb3V0ZXI9dGhpcy5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUud3RmWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKFpvbmUud3RmWm9uZVNwZWMpKSxab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLHImJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjKSksKGU9dGhpcykuX2lubmVyPWUuX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazpmdW5jdGlvbih0LG4scixpLG8sYSl7dHJ5e3JldHVybiBXZShlKSx0Lmludm9rZVRhc2socixpLG8sYSl9ZmluYWxseXtRZShlKX19LG9uSW52b2tlOmZ1bmN0aW9uKHQsbixyLGksbyxhLHMpe3RyeXtyZXR1cm4gV2UoZSksdC5pbnZva2UocixpLG8sYSxzKX1maW5hbGx5e1FlKGUpfX0sb25IYXNUYXNrOmZ1bmN0aW9uKHQsbixyLGkpe3QuaGFzVGFzayhyLGkpLG49PT1yJiYoIm1pY3JvVGFzayI9PWkuY2hhbmdlPyhlLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPWkubWljcm9UYXNrLEdlKGUpKToibWFjcm9UYXNrIj09aS5jaGFuZ2UmJihlLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWkubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIHQuaGFuZGxlRXJyb3IocixpKSxlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGUub25FcnJvci5lbWl0KGkpfSksITF9fSl9cmV0dXJuIHQuaXNJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7cmV0dXJuITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9LHQuYXNzZXJ0SW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe2lmKCF0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdG8gYmUgaW4gQW5ndWxhciBab25lLCBidXQgaXQgaXMgbm90ISIpfSx0LmFzc2VydE5vdEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZih0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdG8gbm90IGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzISIpfSx0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW4odCxlLG4pfSx0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuX2lubmVyLG89aS5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LHFlLEhlLEhlKTt0cnl7cmV0dXJuIGkucnVuVGFzayhvLGUsbil9ZmluYWxseXtpLmNhbmNlbFRhc2sobyl9fSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsbil9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vdXRlci5ydW4odCl9LHR9KCk7ZnVuY3Rpb24gSGUoKXt9dmFyIHFlPXt9O2Z1bmN0aW9uIEdlKHQpe2lmKDA9PXQuX25lc3RpbmcmJiF0Lmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhdC5pc1N0YWJsZSl0cnl7dC5fbmVzdGluZysrLHQub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYodC5fbmVzdGluZy0tLCF0Lmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXt0LnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQub25TdGFibGUuZW1pdChudWxsKX0pfWZpbmFsbHl7dC5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIFdlKHQpe3QuX25lc3RpbmcrKyx0LmlzU3RhYmxlJiYodC5pc1N0YWJsZT0hMSx0Lm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gUWUodCl7dC5fbmVzdGluZy0tLEdlKHQpfXZhciBLZSxaZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IHplLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgemUsdGhpcy5vblN0YWJsZT1uZXcgemUsdGhpcy5vbkVycm9yPW5ldyB6ZX1yZXR1cm4gdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdC5wcm90b3R5cGUucnVuT3V0c2lkZUFuZ3VsYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0fSgpLFllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX25nWm9uZT10LHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9kaWRXb3JrPSExLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSx0LnJ1bihmdW5jdGlvbigpe2UudGFza1RyYWNraW5nWm9uZT1ab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9KX1yZXR1cm4gdC5wcm90b3R5cGUuX3dhdGNoQW5ndWxhckV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7dC5fZGlkV29yaz0hMCx0Ll9pc1pvbmVTdGFibGU9ITF9fSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe1VlLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxrdChmdW5jdGlvbigpe3QuX2lzWm9uZVN0YWJsZT0hMCx0Ll9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfSx0LnByb3RvdHlwZS5pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuaXNTdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfSx0LnByb3RvdHlwZS5fcnVuQ2FsbGJhY2tzSWZSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5pc1N0YWJsZSgpKWt0KGZ1bmN0aW9uKCl7Zm9yKDswIT09dC5fY2FsbGJhY2tzLmxlbmd0aDspe3ZhciBlPXQuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLGUuZG9uZUNiKHQuX2RpZFdvcmspfXQuX2RpZFdvcms9ITF9KTtlbHNle3ZhciBlPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQudXBkYXRlQ2J8fCF0LnVwZGF0ZUNiKGUpfHwoY2xlYXJUaW1lb3V0KHQudGltZW91dElkKSwhMSl9KSx0aGlzLl9kaWRXb3JrPSEwfX0sdC5wcm90b3R5cGUuZ2V0UGVuZGluZ1Rhc2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LnNvdXJjZSxpc1BlcmlvZGljOnQuZGF0YS5pc1BlcmlvZGljLGRlbGF5OnQuZGF0YS5kZWxheSxjcmVhdGlvbkxvY2F0aW9uOnQuY3JlYXRpb25Mb2NhdGlvbix4aHI6dC5kYXRhLnRhcmdldH19KTpbXX0sdC5wcm90b3R5cGUuYWRkQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT0tMTtlJiZlPjAmJihpPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLl9jYWxsYmFja3M9ci5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50aW1lb3V0SWQhPT1pfSksdChyLl9kaWRXb3JrLHIuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxlKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjp0LHRpbWVvdXRJZDppLHVwZGF0ZUNiOm59KX0sdC5wcm90b3R5cGUud2hlblN0YWJsZT1mdW5jdGlvbih0LGUsbil7aWYobiYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvZGlzdC90YXNrLXRyYWNraW5nLmpzIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayh0LGUsbiksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuZmluZFByb3ZpZGVycz1mdW5jdGlvbih0LGUsbil7cmV0dXJuW119LHR9KCksWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXAsJGUuYWRkVG9XaW5kb3codGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyQXBwbGljYXRpb249ZnVuY3Rpb24odCxlKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KHQsZSl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHQpfSx0LnByb3RvdHlwZS51bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9LHQucHJvdG90eXBlLmdldFRlc3RhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KHQpfHxudWxsfSx0LnByb3RvdHlwZS5nZXRBbGxUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsUm9vdEVsZW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMCksJGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsdCxlKX0sdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfSx0fSgpLCRlPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnVsbH0sdH0oKSksSmU9ITAsdG49ITEsZW49bmV3IG10KCJBbGxvd011bHRpcGxlVG9rZW4iKTtmdW5jdGlvbiBubigpe3JldHVybiB0bj0hMCxKZX12YXIgcm49ZnVuY3Rpb24odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnRva2VuPWV9O2Z1bmN0aW9uIG9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1bXSk7dmFyIHI9IlBsYXRmb3JtOiAiK2UsaT1uZXcgbXQocik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgbz1hbigpO2lmKCFvfHxvLmluamVjdG9yLmdldChlbiwhMSkpaWYodCl0KG4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSkpO2Vsc2V7dmFyIGE9bi5jb25jYXQoZSkuY29uY2F0KHtwcm92aWRlOmksdXNlVmFsdWU6ITB9KTshZnVuY3Rpb24odCl7aWYoS2UmJiFLZS5kZXN0cm95ZWQmJiFLZS5pbmplY3Rvci5nZXQoZW4sITEpKXRocm93IG5ldyBFcnJvcigiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBsYXRmb3JtLiBEZXN0cm95IHRoZSBwcmV2aW91cyBvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS4iKTtLZT10LmdldChzbik7dmFyIGU9dC5nZXQoX2UsbnVsbCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX0oVnQuY3JlYXRlKHtwcm92aWRlcnM6YSxuYW1lOnJ9KSl9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWFuKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0oaSl9fWZ1bmN0aW9uIGFuKCl7cmV0dXJuIEtlJiYhS2UuZGVzdHJveWVkP0tlOm51bGx9dmFyIHNuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pbmplY3Rvcj10LHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT0ibm9vcCI9PT0obj1lP2Uubmdab25lOnZvaWQgMCk/bmV3IFplOigiem9uZS5qcyI9PT1uP3ZvaWQgMDpuKXx8bmV3IFVlKHtlbmFibGVMb25nU3RhY2tUcmFjZTpubigpfSksbz1be3Byb3ZpZGU6VWUsdXNlVmFsdWU6aX1dO3JldHVybiBpLnJ1bihmdW5jdGlvbigpe3ZhciBlPVZ0LmNyZWF0ZSh7cHJvdmlkZXJzOm8scGFyZW50OnIuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG49dC5jcmVhdGUoZSksYT1uLmluamVjdG9yLmdldChjZSxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gbi5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gY24oci5fbW9kdWxlcyxuKX0pLGkucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXthLmhhbmRsZUVycm9yKHQpfX0pfSksZnVuY3Rpb24odCxlLGkpe3RyeXt2YXIgbz0oKGE9bi5pbmplY3Rvci5nZXQobWUpKS5ydW5Jbml0aWFsaXplcnMoKSxhLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gci5fbW9kdWxlRG9Cb290c3RyYXAobiksbn0pKTtyZXR1cm4gZmUobyk/by5jYXRjaChmdW5jdGlvbihuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufSk6b31jYXRjaChuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufXZhciBhfShhLGkpfSl9LHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciByPXRoaXMuaW5qZWN0b3IuZ2V0KFNlKSxpPWxuKHt9LGUpO3JldHVybiByLmNyZWF0ZUNvbXBpbGVyKFtpXSkuY29tcGlsZU1vZHVsZUFzeW5jKHQpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIG4uYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSh0LGkpfSl9LHQucHJvdG90eXBlLl9tb2R1bGVEb0Jvb3RzdHJhcD1mdW5jdGlvbih0KXt2YXIgZT10LmluamVjdG9yLmdldCh1bik7aWYodC5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCl0Ll9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuYm9vdHN0cmFwKHQpfSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcigiVGhlIG1vZHVsZSAiK0F0KHQuaW5zdGFuY2UuY29uc3RydWN0b3IpKycgd2FzIGJvb3RzdHJhcHBlZCwgYnV0IGl0IGRvZXMgbm90IGRlY2xhcmUgIkBOZ01vZHVsZS5ib290c3RyYXAiIGNvbXBvbmVudHMgbm9yIGEgIm5nRG9Cb290c3RyYXAiIG1ldGhvZC4gUGxlYXNlIGRlZmluZSBvbmUgb2YgdGhlc2UuJyk7dC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGUpfXRoaXMuX21vZHVsZXMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIHBsYXRmb3JtIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkISIpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fZGVzdHJveWVkPSEwfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiBsbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UucmVkdWNlKGxuLHQpOm8oe30sdCxlKX12YXIgdW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvKXt2YXIgYT10aGlzO3RoaXMuX3pvbmU9dCx0aGlzLl9jb25zb2xlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9leGNlcHRpb25IYW5kbGVyPXIsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWksdGhpcy5faW5pdFN0YXR1cz1vLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl92aWV3cz1bXSx0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPW5uKCksdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe2EuX3pvbmUucnVuKGZ1bmN0aW9uKCl7YS50aWNrKCl9KX19KTt2YXIgcz1uZXcgTyhmdW5jdGlvbih0KXthLl9zdGFibGU9YS5fem9uZS5pc1N0YWJsZSYmIWEuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFhLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzLGEuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Lm5leHQoYS5fc3RhYmxlKSx0LmNvbXBsZXRlKCl9KX0pLGw9bmV3IE8oZnVuY3Rpb24odCl7dmFyIGU7YS5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2U9YS5fem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtVZS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksa3QoZnVuY3Rpb24oKXthLl9zdGFibGV8fGEuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N8fGEuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3N8fChhLl9zdGFibGU9ITAsdC5uZXh0KCEwKSl9KX0pfSk7dmFyIG49YS5fem9uZS5vblVuc3RhYmxlLnN1YnNjcmliZShmdW5jdGlvbigpe1VlLmFzc2VydEluQW5ndWxhclpvbmUoKSxhLl9zdGFibGUmJihhLl9zdGFibGU9ITEsYS5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dCghMSl9KSl9KTtyZXR1cm4gZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksbi51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9dHQocyxsLnBpcGUocHQoKSkpfXJldHVybiB0LnByb3RvdHlwZS5ib290c3RyYXA9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXM7aWYoIXRoaXMuX2luaXRTdGF0dXMuZG9uZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBib290c3RyYXAgYXMgdGhlcmUgYXJlIHN0aWxsIGFzeW5jaHJvbm91cyBpbml0aWFsaXplcnMgcnVubmluZy4gQm9vdHN0cmFwIGNvbXBvbmVudHMgaW4gdGhlIGBuZ0RvQm9vdHN0cmFwYCBtZXRob2Qgb2YgdGhlIHJvb3QgbW9kdWxlLiIpO249dCBpbnN0YW5jZW9mIGtlP3Q6dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpLHRoaXMuY29tcG9uZW50VHlwZXMucHVzaChuLmNvbXBvbmVudFR5cGUpO3ZhciBpPW4gaW5zdGFuY2VvZiBSZT9udWxsOnRoaXMuX2luamVjdG9yLmdldChEZSksbz1uLmNyZWF0ZShWdC5OVUxMLFtdLGV8fG4uc2VsZWN0b3IsaSk7by5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyLl91bmxvYWRDb21wb25lbnQobyl9KTt2YXIgYT1vLmluamVjdG9yLmdldChZZSxudWxsKTtyZXR1cm4gYSYmby5pbmplY3Rvci5nZXQoWGUpLnJlZ2lzdGVyQXBwbGljYXRpb24oby5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LGEpLHRoaXMuX2xvYWRDb21wb25lbnQobyksbm4oKSYmdGhpcy5fY29uc29sZS5sb2coIkFuZ3VsYXIgaXMgcnVubmluZyBpbiB0aGUgZGV2ZWxvcG1lbnQgbW9kZS4gQ2FsbCBlbmFibGVQcm9kTW9kZSgpIHRvIGVuYWJsZSB0aGUgcHJvZHVjdGlvbiBtb2RlLiIpLG99LHQucHJvdG90eXBlLnRpY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBFcnJvcigiQXBwbGljYXRpb25SZWYudGljayBpcyBjYWxsZWQgcmVjdXJzaXZlbHkiKTt2YXIgbj10Ll90aWNrU2NvcGUoKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITAsdGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzJiZ0aGlzLl92aWV3cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNoZWNrTm9DaGFuZ2VzKCl9KX1jYXRjaCh0KXt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2V4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXJyb3IodCl9KX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExLEJlKG4pfX0sdC5wcm90b3R5cGUuYXR0YWNoVmlldz1mdW5jdGlvbih0KXt2YXIgZT10O3RoaXMuX3ZpZXdzLnB1c2goZSksZS5hdHRhY2hUb0FwcFJlZih0aGlzKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXt2YXIgZT10O2NuKHRoaXMuX3ZpZXdzLGUpLGUuZGV0YWNoRnJvbUFwcFJlZigpfSx0LnByb3RvdHlwZS5fbG9hZENvbXBvbmVudD1mdW5jdGlvbih0KXt0aGlzLmF0dGFjaFZpZXcodC5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2godCksdGhpcy5faW5qZWN0b3IuZ2V0KHdlLFtdKS5jb25jYXQodGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9LHQucHJvdG90eXBlLl91bmxvYWRDb21wb25lbnQ9ZnVuY3Rpb24odCl7dGhpcy5kZXRhY2hWaWV3KHQuaG9zdFZpZXcpLGNuKHRoaXMuY29tcG9uZW50cyx0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmlld0NvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll90aWNrU2NvcGU9VmUoIkFwcGxpY2F0aW9uUmVmI3RpY2soKSIpLHR9KCk7ZnVuY3Rpb24gY24odCxlKXt2YXIgbj10LmluZGV4T2YoZSk7bj4tMSYmdC5zcGxpY2UobiwxKX12YXIgaG49ZnVuY3Rpb24oKXt9LGZuPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLHRbdC5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLHR9KHt9KSxwbj1mdW5jdGlvbigpe30sZG49ZnVuY3Rpb24odCl7dGhpcy5uYXRpdmVFbGVtZW50PXR9LG1uPWZ1bmN0aW9uKCl7fSx5bj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5jaGFuZ2VzPW5ldyB6ZSx0aGlzLmxlbmd0aD0wfXJldHVybiB0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfSx0LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKHQpfSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9LHQucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaCh0KX0sdC5wcm90b3R5cGUuc29tZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX0sdC5wcm90b3R5cGVbU3QoKV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTdCgpXSgpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgcj1BcnJheS5pc0FycmF5KG4pP3Qobik6bjtyZXR1cm4gZS5jb25jYXQocil9LFtdKX0odCksdGhpcy5kaXJ0eT0hMSx0aGlzLmxlbmd0aD10aGlzLl9yZXN1bHRzLmxlbmd0aCx0aGlzLmxhc3Q9dGhpcy5fcmVzdWx0c1t0aGlzLmxlbmd0aC0xXSx0aGlzLmZpcnN0PXRoaXMuX3Jlc3VsdHNbMF19LHQucHJvdG90eXBlLm5vdGlmeU9uQ2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuY2hhbmdlcy5lbWl0KHRoaXMpfSx0LnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX0sdH0oKSxnbj1mdW5jdGlvbigpe30sdm49e2ZhY3RvcnlQYXRoUHJlZml4OiIiLGZhY3RvcnlQYXRoU3VmZml4OiIubmdmYWN0b3J5In0sX249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY29tcGlsZXI9dCx0aGlzLl9jb25maWc9ZXx8dm59cmV0dXJuIHQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbXBpbGVyIGluc3RhbmNlb2YgRWU/dGhpcy5sb2FkRmFjdG9yeSh0KTp0aGlzLmxvYWRBbmRDb21waWxlKHQpfSx0LnByb3RvdHlwZS5sb2FkQW5kQ29tcGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9cyh0LnNwbGl0KCIjIiksMiksaT1yWzBdLG89clsxXTtyZXR1cm4gdm9pZCAwPT09byYmKG89ImRlZmF1bHQiKSxuKCJjcm5kIikoaSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdFtvXX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGJuKHQsaSxvKX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyh0KX0pfSx0LnByb3RvdHlwZS5sb2FkRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT1zKHQuc3BsaXQoIiMiKSwyKSxyPWVbMF0saT1lWzFdLG89Ik5nRmFjdG9yeSI7cmV0dXJuIHZvaWQgMD09PWkmJihpPSJkZWZhdWx0IixvPSIiKSxuKCJjcm5kIikodGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoUHJlZml4K3IrdGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoU3VmZml4KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W2krb119KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBibih0LHIsaSl9KX0sdH0oKTtmdW5jdGlvbiBibih0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCAnIituKyInIGluICciK2UrIiciKTtyZXR1cm4gdH12YXIgd249ZnVuY3Rpb24oKXt9LHhuPWZ1bmN0aW9uKCl7fSxDbj1mdW5jdGlvbigpe30sRW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9kZWJ1Z0NvbnRleHQ9bix0aGlzLm5hdGl2ZU5vZGU9dCxlJiZlIGluc3RhbmNlb2YgU24/ZS5hZGRDaGlsZCh0aGlzKTp0aGlzLnBhcmVudD1udWxsLHRoaXMubGlzdGVuZXJzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLFNuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5wcm9wZXJ0aWVzPXt9LGkuYXR0cmlidXRlcz17fSxpLmNsYXNzZXM9e30saS5zdHlsZXM9e30saS5jaGlsZE5vZGVzPVtdLGkubmF0aXZlRWxlbWVudD1lLGl9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbih0KXt0JiYodGhpcy5jaGlsZE5vZGVzLnB1c2godCksdC5wYXJlbnQ9dGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShlLDEpKX0sZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGRyZW5BZnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcyxpPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09aSYmKChuPXRoaXMuY2hpbGROb2Rlcykuc3BsaWNlLmFwcGx5KG4sbChbaSsxLDBdLGUpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnQmJnQucGFyZW50LnJlbW92ZUNoaWxkKHQpLHQucGFyZW50PXJ9KSl9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xPT09bj90aGlzLmFkZENoaWxkKGUpOihlLnBhcmVudCYmZS5wYXJlbnQucmVtb3ZlQ2hpbGQoZSksZS5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKG4sMCxlKSl9LGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5QWxsKHQpWzBdfHxudWxsfSxlLnByb3RvdHlwZS5xdWVyeUFsbD1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gZnVuY3Rpb24gdChlLG4scil7ZS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIFNuJiYobihlKSYmci5wdXNoKGUpLHQoZSxuLHIpKX0pfSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gZnVuY3Rpb24gdChlLG4scil7ZSBpbnN0YW5jZW9mIFNuJiZlLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXtuKGUpJiZyLnB1c2goZSksZSBpbnN0YW5jZW9mIFNuJiZ0KGUsbixyKX0pfSh0aGlzLHQsZSksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnRyaWdnZXJFdmVudEhhbmRsZXI9ZnVuY3Rpb24odCxlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ubmFtZT09dCYmbi5jYWxsYmFjayhlKX0pfSxlfShFbiksa249bmV3IE1hcDtmdW5jdGlvbiBUbih0KXtyZXR1cm4ga24uZ2V0KHQpfHxudWxsfWZ1bmN0aW9uIEFuKHQpe2tuLnNldCh0Lm5hdGl2ZU5vZGUsdCl9ZnVuY3Rpb24gUG4odCxlKXt2YXIgbj1Nbih0KSxyPU1uKGUpO3JldHVybiBuJiZyP2Z1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9dFtTdCgpXSgpLGk9ZVtTdCgpXSgpOzspe3ZhciBvPXIubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lJiZhLmRvbmUpcmV0dXJuITA7aWYoby5kb25lfHxhLmRvbmUpcmV0dXJuITE7aWYoIW4oby52YWx1ZSxhLnZhbHVlKSlyZXR1cm4hMX19KHQsZSxQbik6IShufHwhdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8cnx8IWV8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpfHxUdCh0LGUpfXZhciBPbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy53cmFwcGVkPXR9cmV0dXJuIHQud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHQudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmlzV3JhcHBlZChlKT9lLndyYXBwZWQ6ZX0sdC5pc1dyYXBwZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fSx0fSgpLEluPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59cmV0dXJuIHQucHJvdG90eXBlLmlzRmlyc3RDaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX0sdH0oKTtmdW5jdGlvbiBNbih0KXtyZXR1cm4hIU5uKHQpJiYoQXJyYXkuaXNBcnJheSh0KXx8ISh0IGluc3RhbmNlb2YgTWFwKSYmU3QoKWluIHQpfWZ1bmN0aW9uIE5uKHQpe3JldHVybiBudWxsIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0fHwib2JqZWN0Ij09dHlwZW9mIHQpfXZhciBSbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBNbih0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTG4odCl9LHR9KCksRG49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0sTG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxEbn1yZXR1cm4gdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoT3BlcmF0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9pdEhlYWQsbj10aGlzLl9yZW1vdmFsc0hlYWQscj0wLGk9bnVsbDtlfHxuOyl7dmFyIG89IW58fGUmJmUuY3VycmVudEluZGV4PEJuKG4scixpKT9lOm4sYT1CbihvLHIsaSkscz1vLmN1cnJlbnRJbmRleDtpZihvPT09bilyLS0sbj1uLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1vLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7aXx8KGk9W10pO3ZhciBsPWEtcix1PXMtcjtpZihsIT11KXtmb3IodmFyIGM9MDtjPGw7YysrKXt2YXIgaD1jPGkubGVuZ3RoP2lbY106aVtjXT0wLGY9aCtjO3U8PWYmJmY8bCYmKGlbY109aCsxKX1pW28ucHJldmlvdXNJbmRleF09dS1sfX1hIT09cyYmdChvLGEscyl9fSx0LnByb3RvdHlwZS5mb3JFYWNoUHJldmlvdXNJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoTW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaElkZW50aXR5Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0SWRlbnRpdHlDaGFuZ2UpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZihudWxsPT10JiYodD1bXSksIU1uKHQpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyIrQXQodCkrIicuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWQiKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuLHIsaSxvPXRoaXMuX2l0SGVhZCxhPSExO2lmKEFycmF5LmlzQXJyYXkodCkpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO2Zvcih2YXIgcz0wO3M8dGhpcy5sZW5ndGg7cysrKWk9dGhpcy5fdHJhY2tCeUZuKHMscj10W3NdKSxudWxsIT09byYmVHQoby50cmFja0J5SWQsaSk/KGEmJihvPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8scixpLHMpKSxUdChvLml0ZW0scil8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKG8scikpOihvPXRoaXMuX21pc21hdGNoKG8scixpLHMpLGE9ITApLG89by5fbmV4dH1lbHNlIG49MCxmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dKTtlbHNlIGZvcih2YXIgcj10W1N0KCldKCksaT12b2lkIDA7IShpPXIubmV4dCgpKS5kb25lOyllKGkudmFsdWUpfSh0LGZ1bmN0aW9uKHQpe2k9ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PW8mJlR0KG8udHJhY2tCeUlkLGkpPyhhJiYobz1lLl92ZXJpZnlSZWluc2VydGlvbihvLHQsaSxuKSksVHQoby5pdGVtLHQpfHxlLl9hZGRJZGVudGl0eUNoYW5nZShvLHQpKToobz1lLl9taXNtYXRjaChvLHQsaSxuKSxhPSEwKSxvPW8uX25leHQsbisrfSksdGhpcy5sZW5ndGg9bjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUobyksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2lmKHRoaXMuaXNEaXJ0eSl7dmFyIHQ9dm9pZCAwLGU9dm9pZCAwO2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9ZSl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXgsZT10Ll9uZXh0TW92ZWQ7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19LHQucHJvdG90eXBlLl9taXNtYXRjaD1mdW5jdGlvbih0LGUsbixyKXt2YXIgaTtyZXR1cm4gbnVsbD09PXQ/aT10aGlzLl9pdFRhaWw6KGk9dC5fcHJldix0aGlzLl9yZW1vdmUodCkpLG51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KG4scikpPyhUdCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsaSxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyhUdCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LGkscikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IGpuKGUsbiksaSxyKSx0fSx0LnByb3RvdHlwZS5fdmVyaWZ5UmVpbnNlcnRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKTtyZXR1cm4gbnVsbCE9PWk/dD10aGlzLl9yZWluc2VydEFmdGVyKGksdC5fcHJldixyKTp0LmN1cnJlbnRJbmRleCE9ciYmKHQuY3VycmVudEluZGV4PXIsdGhpcy5fYWRkVG9Nb3Zlcyh0LHIpKSx0fSx0LnByb3RvdHlwZS5fdHJ1bmNhdGU9ZnVuY3Rpb24odCl7Zm9yKDtudWxsIT09dDspe3ZhciBlPXQuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpLHQ9ZX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX0sdC5wcm90b3R5cGUuX3JlaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIHI9dC5fcHJldlJlbW92ZWQsaT10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPWk6ci5fbmV4dFJlbW92ZWQ9aSxudWxsPT09aT90aGlzLl9yZW1vdmFsc1RhaWw9cjppLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX21vdmVBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3VubGluayh0KSx0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zlcyh0LG4pLHR9LHQucHJvdG90eXBlLl9hZGRBZnRlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fSx0LnByb3RvdHlwZS5faW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBWbiksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bix0fSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSl9LHQucHJvdG90eXBlLl91bmxpbms9ZnVuY3Rpb24odCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHQpO3ZhciBlPXQuX3ByZXYsbj10Ll9uZXh0O3JldHVybiBudWxsPT09ZT90aGlzLl9pdEhlYWQ9bjplLl9uZXh0PW4sbnVsbD09PW4/dGhpcy5faXRUYWlsPWU6bi5fcHJldj1lLHR9LHQucHJvdG90eXBlLl9hZGRUb01vdmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWU/dDoodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNIZWFkPXQ6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9dCx0KX0sdC5wcm90b3R5cGUuX2FkZFRvUmVtb3ZhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IFZuKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fSx0LnByb3RvdHlwZS5fYWRkSWRlbnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH0sdH0oKSxqbj1mdW5jdGlvbih0LGUpe3RoaXMuaXRlbT10LHRoaXMudHJhY2tCeUlkPWUsdGhpcy5jdXJyZW50SW5kZXg9bnVsbCx0aGlzLnByZXZpb3VzSW5kZXg9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXZEdXA9bnVsbCx0aGlzLl9uZXh0RHVwPW51bGwsdGhpcy5fcHJldlJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRNb3ZlZD1udWxsLHRoaXMuX25leHRJZGVudGl0eUNoYW5nZT1udWxsfSxGbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfXJldHVybiB0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD10LHQuX25leHREdXA9bnVsbCx0Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPXQsdC5fcHJldkR1cD10aGlzLl90YWlsLHQuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPXQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtmb3Iobj10aGlzLl9oZWFkO251bGwhPT1uO249bi5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PW4uY3VycmVudEluZGV4KSYmVHQobi50cmFja0J5SWQsdCkpcmV0dXJuIG47cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcmV2RHVwLG49dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1uOmUuX25leHREdXA9bixudWxsPT09bj90aGlzLl90YWlsPWU6bi5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfSx0fSgpLFZuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWFwPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYWNrQnlJZCxuPXRoaXMubWFwLmdldChlKTtufHwobj1uZXcgRm4sdGhpcy5tYXAuc2V0KGUsbikpLG4uYWRkKHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG4/bi5nZXQodCxlKTpudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChlKS5yZW1vdmUodCkmJnRoaXMubWFwLmRlbGV0ZShlKSx0fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRW1wdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubWFwLnNpemV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcC5jbGVhcigpfSx0fSgpO2Z1bmN0aW9uIEJuKHQsZSxuKXt2YXIgcj10LnByZXZpb3VzSW5kZXg7aWYobnVsbD09PXIpcmV0dXJuIHI7dmFyIGk9MDtyZXR1cm4gbiYmcjxuLmxlbmd0aCYmKGk9bltyXSkscitlK2l9dmFyIHpuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXB8fE5uKHQpfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVufSx0fSgpLFVuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3JlY29yZHM9bmV3IE1hcCx0aGlzLl9tYXBIZWFkPW51bGwsdGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9wcmV2aW91c01hcEhlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaENoYW5nZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dENoYW5nZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKCEodCBpbnN0YW5jZW9mIE1hcHx8Tm4odCkpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyIrQXQodCkrIicuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZCIpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG49dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCxmdW5jdGlvbih0LHIpe2lmKG4mJm4ua2V5PT09cillLl9tYXliZUFkZFRvQ2hhbmdlcyhuLHQpLGUuX2FwcGVuZEFmdGVyPW4sbj1uLl9uZXh0O2Vsc2V7dmFyIGk9ZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocix0KTtuPWUuX2luc2VydEJlZm9yZU9yQXBwZW5kKG4saSl9fSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsaT1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1pKSxpJiYoaS5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIG89bmV3IEhuKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG8pLG8uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobyksb30sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXtUdChlLHQuY3VycmVudFZhbHVlKXx8KHQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZSx0LmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9hZGRUb0FkZGl0aW9ucz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX0sdC5wcm90b3R5cGUuX2FkZFRvQ2hhbmdlcz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9LHQucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dCBpbnN0YW5jZW9mIE1hcD90LmZvckVhY2goZSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZSh0W25dLG4pfSl9LHR9KCksSG49ZnVuY3Rpb24odCl7dGhpcy5rZXk9dCx0aGlzLnByZXZpb3VzVmFsdWU9bnVsbCx0aGlzLmN1cnJlbnRWYWx1ZT1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0Q2hhbmdlZD1udWxsfSxxbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5mYWN0b3JpZXM9dH1yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24oZSxuKXtpZihudWxsIT1uKXt2YXIgcj1uLmZhY3Rvcmllcy5zbGljZSgpO2U9ZS5jb25jYXQocil9cmV0dXJuIG5ldyB0KGUpfSx0LmV4dGVuZD1mdW5jdGlvbihlKXtyZXR1cm57cHJvdmlkZTp0LHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZXh0ZW5kIEl0ZXJhYmxlRGlmZmVycyB3aXRob3V0IGEgcGFyZW50IGluamVjdG9yIik7cmV0dXJuIHQuY3JlYXRlKGUsbil9LGRlcHM6W1t0LG5ldyBSdCxuZXcgTXRdXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYobnVsbCE9bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAnIisoKGU9dCkubmFtZXx8dHlwZW9mIGUpKyInIil9LHQubmdJbmplY3RhYmxlRGVmPWR0KHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KFtuZXcgUm5dKX19KSx0fSgpLEduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgS2V5VmFsdWVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IFJ0LG5ldyBNdF1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIiciKX0sdH0oKSxXbj1bbmV3IHpuXSxRbj1uZXcgcW4oW25ldyBSbl0pLEtuPW5ldyBHbihXbiksWm49b24obnVsbCwiY29yZSIsW3twcm92aWRlOmJlLHVzZVZhbHVlOiJ1bmtub3duIn0se3Byb3ZpZGU6c24sZGVwczpbVnRdfSx7cHJvdmlkZTpYZSxkZXBzOltdfSx7cHJvdmlkZTp4ZSxkZXBzOltdfV0pLFluPW5ldyBtdCgiTG9jYWxlSWQiKTtmdW5jdGlvbiBYbigpe3JldHVybiBRbn1mdW5jdGlvbiAkbigpe3JldHVybiBLbn1mdW5jdGlvbiBKbih0KXtyZXR1cm4gdHx8ImVuLVVTIn12YXIgdHI9ZnVuY3Rpb24odCl7fSxlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy5kZWZhdWx0RG9jPXQsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpLHRoaXMuaW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0RG9jdW1lbnQuYm9keSxudWxsPT10aGlzLmluZXJ0Qm9keUVsZW1lbnQpe3ZhciBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpLHRoaXMuaW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpLGUuYXBwZW5kQ2hpbGQodGhpcy5pbmVydEJvZHlFbGVtZW50KX10aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPSc8c3ZnPjxnIG9ubG9hZD0idGhpcy5wYXJlbnROb2RlLnJlbW92ZSgpIj48L2c+PC9zdmc+JywhdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3J8fHRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJzdmciKT8odGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48cD48c3R5bGU+PGltZyBzcmM9Ijwvc3R5bGU+PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpLy8iPicsdGhpcy5nZXRJbmVydEJvZHlFbGVtZW50PXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yJiZ0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIGltZyIpJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4hIXdpbmRvdy5ET01QYXJzZXJ9Y2F0Y2godCl7cmV0dXJuITF9fSgpP3RoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI6dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X0luZXJ0RG9jdW1lbnQpOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfWEhSfXJldHVybiB0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X1hIUj1mdW5jdGlvbih0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdCsiPC9ib2R5PiI7dHJ5e3Q9ZW5jb2RlVVJJKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfXZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtlLnJlc3BvbnNlVHlwZT0iZG9jdW1lbnQiLGUub3BlbigiR0VUIiwiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwiK3QsITEpLGUuc2VuZChudWxsKTt2YXIgbj1lLnJlc3BvbnNlLmJvZHk7cmV0dXJuIG4ucmVtb3ZlQ2hpbGQobi5maXJzdENoaWxkKSxufSx0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X0RPTVBhcnNlcj1mdW5jdGlvbih0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdCsiPC9ib2R5PiI7dHJ5e3ZhciBlPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQvaHRtbCIpLmJvZHk7cmV0dXJuIGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlfWNhdGNoKHQpe3JldHVybiBudWxsfX0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiJjb250ZW50ImluIGU/KGUuaW5uZXJIVE1MPXQsZSk6KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9dCx0aGlzLmRlZmF1bHREb2MuZG9jdW1lbnRNb2RlJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyh0aGlzLmluZXJ0Qm9keUVsZW1lbnQpLHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9LHQucHJvdG90eXBlLnN0cmlwQ3VzdG9tTnNBdHRycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5hdHRyaWJ1dGVzLG49ZS5sZW5ndGgtMTswPG47bi0tKXt2YXIgcj1lLml0ZW0obikubmFtZTsieG1sbnM6bnMxIiE9PXImJjAhPT1yLmluZGV4T2YoIm5zMToiKXx8dC5yZW1vdmVBdHRyaWJ1dGUocil9Zm9yKHZhciBpPXQuZmlyc3RDaGlsZDtpOylpLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGk9aS5uZXh0U2libGluZ30sdH0oKSxucj0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpLHJyPS9eZGF0YTooPzppbWFnZVwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1wvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFthLXowLTkrXC9dKz0qJC9pO2Z1bmN0aW9uIGlyKHQpe3JldHVybih0PVN0cmluZyh0KSkubWF0Y2gobnIpfHx0Lm1hdGNoKHJyKT90OihubigpJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgdW5zYWZlIFVSTCB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKSwidW5zYWZlOiIrdCl9ZnVuY3Rpb24gb3IodCl7dmFyIGUsbixyPXt9O3RyeXtmb3IodmFyIGk9YSh0LnNwbGl0KCIsIikpLG89aS5uZXh0KCk7IW8uZG9uZTtvPWkubmV4dCgpKXJbby52YWx1ZV09ITB9Y2F0Y2godCl7ZT17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihlKXRocm93IGUuZXJyb3J9fXJldHVybiByfWZ1bmN0aW9uIGFyKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuLHIsaT17fTt0cnl7Zm9yKHZhciBvPWEodCkscz1vLm5leHQoKTshcy5kb25lO3M9by5uZXh0KCkpe3ZhciBsPXMudmFsdWU7Zm9yKHZhciB1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmKGlbdV09ITApfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYocj1vLnJldHVybikmJnIuY2FsbChvKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIGl9dmFyIHNyLGxyPW9yKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksdXI9b3IoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxjcj1vcigicnAscnQiKSxocj1hcihjcix1ciksZnI9YXIobHIsYXIodXIsb3IoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLGFyKGNyLG9yKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksaHIpLHByPW9yKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxkcj1vcigic3Jjc2V0IiksbXI9YXIocHIsZHIsb3IoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIikpLHlyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZUNoaWxkcmVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZpcnN0Q2hpbGQ7ZTspaWYoZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP3RoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTt2YXIgbj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKG4pe2U9bjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9LHQucHJvdG90eXBlLnN0YXJ0RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoZnIuaGFzT3duUHJvcGVydHkoZSkpe3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2Zvcih2YXIgbixyPXQuYXR0cmlidXRlcyxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXIuaXRlbShpKSxhPW8ubmFtZSxzPWEudG9Mb3dlckNhc2UoKTtpZihtci5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIGw9by52YWx1ZTtwcltzXSYmKGw9aXIobCkpLGRyW3NdJiYobj1sLGw9KG49U3RyaW5nKG4pKS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaXIodC50cmltKCkpfSkuam9pbigiLCAiKSksdGhpcy5idWYucHVzaCgiICIsYSwnPSInLF9yKGwpLCciJyl9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH10aGlzLmJ1Zi5wdXNoKCI+Iil9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH0sdC5wcm90b3R5cGUuZW5kRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7ZnIuaGFzT3duUHJvcGVydHkoZSkmJiFsci5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfSx0LnByb3RvdHlwZS5jaGFycz1mdW5jdGlvbih0KXt0aGlzLmJ1Zi5wdXNoKF9yKHQpKX0sdC5wcm90b3R5cGUuY2hlY2tDbG9iYmVyZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogIit0Lm91dGVySFRNTCk7cmV0dXJuIGV9LHR9KCksZ3I9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLHZyPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBfcih0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShncixmdW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNoYXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKHZyLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIGJyKHQpe3JldHVybiJjb250ZW50ImluIHQmJmZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfSh0KT90LmNvbnRlbnQ6bnVsbH12YXIgd3I9bmV3IFJlZ0V4cCgiXihbLSwuXCInJV8hIyBhLXpBLVowLTldK3woPzooPzptYXRyaXh8dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxza2V3fHBlcnNwZWN0aXZlKSg/Olh8WXwzZCk/fCg/OnJnYnxoc2wpYT98KD86cmVwZWF0aW5nLSk/KD86bGluZWFyfHJhZGlhbCktZ3JhZGllbnR8KD86Y2FsY3xhdHRyKSlcXChbLTAtOS4lLCAjYS16QS1aXStcXCkpJCIsImciKSx4cj0vXnVybFwoKFteKV0rKVwpJC8sQ3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5OT05FPTBdPSJOT05FIix0W3QuSFRNTD0xXT0iSFRNTCIsdFt0LlNUWUxFPTJdPSJTVFlMRSIsdFt0LlNDUklQVD0zXT0iU0NSSVBUIix0W3QuVVJMPTRdPSJVUkwiLHRbdC5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsdH0oe30pLEVyPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBTcih0LGUsbil7dmFyIHI9dC5zdGF0ZSxpPTE3OTImcjtyZXR1cm4gaT09PWU/KHQuc3RhdGU9LTE3OTMmcnxuLHQuaW5pdEluZGV4PS0xLCEwKTppPT09bn1mdW5jdGlvbiBrcih0LGUsbil7cmV0dXJuKDE3OTImdC5zdGF0ZSk9PT1lJiZ0LmluaXRJbmRleDw9biYmKHQuaW5pdEluZGV4PW4rMSwhMCl9ZnVuY3Rpb24gVHIodCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBBcih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIFByKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBJcih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfXZhciBNcj17c2V0Q3VycmVudE5vZGU6dm9pZCAwLGNyZWF0ZVJvb3RWaWV3OnZvaWQgMCxjcmVhdGVFbWJlZGRlZFZpZXc6dm9pZCAwLGNyZWF0ZUNvbXBvbmVudFZpZXc6dm9pZCAwLGNyZWF0ZU5nTW9kdWxlUmVmOnZvaWQgMCxvdmVycmlkZVByb3ZpZGVyOnZvaWQgMCxvdmVycmlkZUNvbXBvbmVudFZpZXc6dm9pZCAwLGNsZWFyT3ZlcnJpZGVzOnZvaWQgMCxjaGVja0FuZFVwZGF0ZVZpZXc6dm9pZCAwLGNoZWNrTm9DaGFuZ2VzVmlldzp2b2lkIDAsZGVzdHJveVZpZXc6dm9pZCAwLHJlc29sdmVEZXA6dm9pZCAwLGNyZWF0ZURlYnVnQ29udGV4dDp2b2lkIDAsaGFuZGxlRXZlbnQ6dm9pZCAwLHVwZGF0ZURpcmVjdGl2ZXM6dm9pZCAwLHVwZGF0ZVJlbmRlcmVyOnZvaWQgMCxkaXJ0eVBhcmVudFF1ZXJpZXM6dm9pZCAwfTtmdW5jdGlvbiBOcih0LGUsbixyKXt2YXIgaT0iRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWU6ICciK2UrIicuIEN1cnJlbnQgdmFsdWU6ICciK24rIicuIjtyZXR1cm4gciYmKGkrPSIgSXQgc2VlbXMgbGlrZSB0aGUgdmlldyBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGl0cyBwYXJlbnQgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gZGlydHkgY2hlY2tlZC4gSGFzIGl0IGJlZW4gY3JlYXRlZCBpbiBhIGNoYW5nZSBkZXRlY3Rpb24gaG9vayA/IiksZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRXJyb3IodCk7cmV0dXJuIFJyKG4sZSksbn0oaSx0KX1mdW5jdGlvbiBScih0LGUpe3RbaWVdPWUsdFthZV09ZS5sb2dFcnJvci5iaW5kKGUpfWZ1bmN0aW9uIERyKHQpe3JldHVybiBuZXcgRXJyb3IoIlZpZXdEZXN0cm95ZWRFcnJvcjogQXR0ZW1wdCB0byB1c2UgYSBkZXN0cm95ZWQgdmlldzogIit0KX12YXIgTHI9ZnVuY3Rpb24oKXt9LGpyPW5ldyBNYXA7ZnVuY3Rpb24gRnIodCl7dmFyIGU9anIuZ2V0KHQpO3JldHVybiBlfHwoZT1BdCh0KSsiXyIranIuc2l6ZSxqci5zZXQodCxlKSksZX1mdW5jdGlvbiBWcih0LGUsbixyKXtpZihPbi5pc1dyYXBwZWQocikpe3I9T24udW53cmFwKHIpO3ZhciBpPXQuZGVmLm5vZGVzW2VdLmJpbmRpbmdJbmRleCtuLG89T24udW53cmFwKHQub2xkVmFsdWVzW2ldKTt0Lm9sZFZhbHVlc1tpXT1uZXcgT24obyl9cmV0dXJuIHJ9dmFyIEJyPSIkJHVuZGVmaW5lZCIsenI9IiQkZW1wdHkiO2Z1bmN0aW9uIFVyKHQpe3JldHVybntpZDpCcixzdHlsZXM6dC5zdHlsZXMsZW5jYXBzdWxhdGlvbjp0LmVuY2Fwc3VsYXRpb24sZGF0YTp0LmRhdGF9fXZhciBIcj0wO2Z1bmN0aW9uIHFyKHQsZSxuLHIpe3JldHVybiEoISgyJnQuc3RhdGUpJiZUdCh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gR3IodCxlLG4scil7cmV0dXJuISFxcih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIFdyKHQsZSxuLHIpe3ZhciBpPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IVBuKGkscikpe3ZhciBvPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBOcihNci5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksbysiOiAiK2ksbysiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBRcih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIEtyKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiBacih0LGUsbixyKXt0cnl7cmV0dXJuIFFyKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP0FyKHQsZSkuY29tcG9uZW50Vmlldzp0KSxNci5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChlKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gdC5wYXJlbnQ/QXIodC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiBYcih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uICRyKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIEFyKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBUcih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiBKcih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIHRpKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGVpKHQpe3JldHVybiAxPDx0JTMyfWZ1bmN0aW9uIG5pKHQpe3ZhciBlPXt9LG49MCxyPXt9O3JldHVybiB0JiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9cyh0LDIpLG89aVswXSxhPWlbMV07Im51bWJlciI9PXR5cGVvZiBvPyhlW29dPWEsbnw9ZWkobykpOnJbb109YX0pLHttYXRjaGVkUXVlcmllczplLHJlZmVyZW5jZXM6cixtYXRjaGVkUXVlcnlJZHM6bn19ZnVuY3Rpb24gcmkodCxlKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIG4scixpO3JldHVybiBBcnJheS5pc0FycmF5KHQpPyhyPShpPXModCwyKSlbMF0sbj1pWzFdKToocj0wLG49dCksbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBufHwib2JqZWN0Ij09dHlwZW9mIG4pJiZlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobixEdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSx7ZmxhZ3M6cix0b2tlbjpuLHRva2VuS2V5OkZyKG4pfX0pfWZ1bmN0aW9uIGlpKHQsZSxuKXt2YXIgcj1uLnJlbmRlclBhcmVudDtyZXR1cm4gcj8wPT0oMSZyLmZsYWdzKXx8MD09KDMzNTU0NDMyJnIuZmxhZ3MpfHxyLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlJiZyLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlLmVuY2Fwc3VsYXRpb249PT1uZS5OYXRpdmU/QXIodCxuLnJlbmRlclBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ6dm9pZCAwOmV9dmFyIG9pPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGFpKHQpe3ZhciBlPW9pLmdldCh0KTtyZXR1cm4gZXx8KChlPXQoZnVuY3Rpb24oKXtyZXR1cm4gTHJ9KSkuZmFjdG9yeT10LG9pLnNldCh0LGUpKSxlfWZ1bmN0aW9uIHNpKHQsZSxuLHIsaSl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZSgkcih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSxsaSh0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsaSl9ZnVuY3Rpb24gbGkodCxlLG4scixpLG8sYSl7Zm9yKHZhciBzPW47czw9cjtzKyspe3ZhciBsPXQuZGVmLm5vZGVzW3NdOzExJmwuZmxhZ3MmJmNpKHQsbCxlLGksbyxhKSxzKz1sLmNoaWxkQ291bnR9fWZ1bmN0aW9uIHVpKHQsZSxuLHIsaSxvKXtmb3IodmFyIGE9dDthJiYhSnIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciBzPWEucGFyZW50LGw9WHIoYSksdT1sLm5vZGVJbmRleCtsLmNoaWxkQ291bnQsYz1sLm5vZGVJbmRleCsxO2M8PXU7YysrKXt2YXIgaD1zLmRlZi5ub2Rlc1tjXTtoLm5nQ29udGVudEluZGV4PT09ZSYmY2kocyxoLG4scixpLG8pLGMrPWguY2hpbGRDb3VudH1pZighcy5wYXJlbnQpe3ZhciBmPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGYpZm9yKGM9MDtjPGYubGVuZ3RoO2MrKyloaSh0LGZbY10sbixyLGksbyl9fWZ1bmN0aW9uIGNpKHQsZSxuLHIsaSxvKXtpZig4JmUuZmxhZ3MpdWkodCxlLm5nQ29udGVudC5pbmRleCxuLHIsaSxvKTtlbHNle3ZhciBhPSRyKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmaGkodCxhLG4scixpLG8pLDMyJmUuYmluZGluZ0ZsYWdzJiZoaShBcih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLGksbykpOmhpKHQsYSxuLHIsaSxvKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgcz1Bcih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGw9MDtsPHMubGVuZ3RoO2wrKylzaShzW2xdLG4scixpLG8pOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZsaSh0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixpLG8pfX1mdW5jdGlvbiBoaSh0LGUsbixyLGksbyl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLGkpO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOm8ucHVzaChlKX19dmFyIGZpPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIHBpKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2goZmkpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiBkaSh0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX1mdW5jdGlvbiBtaSh0LGUsbixyLGksbyl7dHw9MTt2YXIgYT1uaShlKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxmbGFnczp0LGNoZWNrSW5kZXg6LTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6YS5tYXRjaGVkUXVlcmllcyxtYXRjaGVkUXVlcnlJZHM6YS5tYXRjaGVkUXVlcnlJZHMscmVmZXJlbmNlczphLnJlZmVyZW5jZXMsbmdDb250ZW50SW5kZXg6bixjaGlsZENvdW50OnIsYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50OntuczpudWxsLG5hbWU6bnVsbCxhdHRyczpudWxsLHRlbXBsYXRlOm8/YWkobyk6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6bnVsbCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDppfHxMcn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24geWkodCxlLG4scixpLG8sYSxsLHUsYyxoLGYpe3ZvaWQgMD09PWEmJihhPVtdKSxjfHwoYz1Mcik7dmFyIHA9bmkobiksZD1wLm1hdGNoZWRRdWVyaWVzLG09cC5yZWZlcmVuY2VzLHk9cC5tYXRjaGVkUXVlcnlJZHMsZz1udWxsLHY9bnVsbDtvJiYoZz0oST1zKHBpKG8pLDIpKVswXSx2PUlbMV0pLGw9bHx8W107Zm9yKHZhciBfPW5ldyBBcnJheShsLmxlbmd0aCksYj0wO2I8bC5sZW5ndGg7YisrKXt2YXIgdz1zKGxbYl0sMykseD13WzBdLEM9d1syXSxFPXMocGkod1sxXSksMiksUz1FWzBdLGs9RVsxXSxUPXZvaWQgMCxBPXZvaWQgMDtzd2l0Y2goMTUmeCl7Y2FzZSA0OkE9QzticmVhaztjYXNlIDE6Y2FzZSA4OlQ9Q31fW2JdPXtmbGFnczp4LG5zOlMsbmFtZTprLG5vbk1pbmlmaWVkTmFtZTprLHNlY3VyaXR5Q29udGV4dDpULHN1ZmZpeDpBfX11PXV8fFtdO3ZhciBQPW5ldyBBcnJheSh1Lmxlbmd0aCk7Zm9yKGI9MDtiPHUubGVuZ3RoO2IrKyl7dmFyIE89cyh1W2JdLDIpO1BbYl09e3R5cGU6MCx0YXJnZXQ6T1swXSxldmVudE5hbWU6T1sxXSxwcm9wTmFtZTpudWxsfX12YXIgSSxNPShhPWF8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9cyh0LDIpLG49ZVsxXSxyPXMocGkoZVswXSksMik7cmV0dXJuW3JbMF0sclsxXSxuXX0pO3JldHVybiBmPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT1Ccil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1uZS5Ob25lfHx0LnN0eWxlcy5sZW5ndGh8fE9iamVjdC5rZXlzKHQuZGF0YSkubGVuZ3RoO3QuaWQ9ZT8iYyIrSHIrKzp6cn1yZXR1cm4gdCYmdC5pZD09PXpyJiYodD1udWxsKSx0fHxudWxsfShmKSxoJiYoZXw9MzM1NTQ0MzIpLHtub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6dCxmbGFnczplfD0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmQsbWF0Y2hlZFF1ZXJ5SWRzOnkscmVmZXJlbmNlczptLG5nQ29udGVudEluZGV4OnIsY2hpbGRDb3VudDppLGJpbmRpbmdzOl8sYmluZGluZ0ZsYWdzOmRpKF8pLG91dHB1dHM6UCxlbGVtZW50OntuczpnLG5hbWU6dixhdHRyczpNLHRlbXBsYXRlOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Omh8fG51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOmYscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6Y3x8THJ9LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGdpKHQsZSxuKXt2YXIgcixpPW4uZWxlbWVudCxvPXQucm9vdC5zZWxlY3Rvck9yTm9kZSxhPXQucmVuZGVyZXI7aWYodC5wYXJlbnR8fCFvKXtyPWkubmFtZT9hLmNyZWF0ZUVsZW1lbnQoaS5uYW1lLGkubnMpOmEuY3JlYXRlQ29tbWVudCgiIik7dmFyIGw9aWkodCxlLG4pO2wmJmEuYXBwZW5kQ2hpbGQobCxyKX1lbHNlIHI9YS5zZWxlY3RSb290RWxlbWVudChvKTtpZihpLmF0dHJzKWZvcih2YXIgdT0wO3U8aS5hdHRycy5sZW5ndGg7dSsrKXt2YXIgYz1zKGkuYXR0cnNbdV0sMyk7YS5zZXRBdHRyaWJ1dGUocixjWzFdLGNbMl0sY1swXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gdmkodCxlLG4scil7Zm9yKHZhciBpPTA7aTxuLm91dHB1dHMubGVuZ3RoO2krKyl7dmFyIG89bi5vdXRwdXRzW2ldLGE9X2kodCxuLm5vZGVJbmRleCwoaD1vLmV2ZW50TmFtZSwoYz1vLnRhcmdldCk/YysiOiIraDpoKSkscz1vLnRhcmdldCxsPXQ7ImNvbXBvbmVudCI9PT1vLnRhcmdldCYmKHM9bnVsbCxsPWUpO3ZhciB1PWwucmVuZGVyZXIubGlzdGVuKHN8fHIsby5ldmVudE5hbWUsYSk7dC5kaXNwb3NhYmxlc1tuLm91dHB1dEluZGV4K2ldPXV9dmFyIGMsaH1mdW5jdGlvbiBfaSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBacih0LGUsbixyKX19ZnVuY3Rpb24gYmkodCxlLG4scil7aWYoIUdyKHQsZSxuLHIpKXJldHVybiExO3ZhciBpPWUuYmluZGluZ3Nbbl0sbz1Bcih0LGUubm9kZUluZGV4KSxhPW8ucmVuZGVyRWxlbWVudCxzPWkubmFtZTtzd2l0Y2goMTUmaS5mbGFncyl7Y2FzZSAxOiFmdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9ZS5zZWN1cml0eUNvbnRleHQscz1hP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoYSxvKTpvO3M9bnVsbCE9cz9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgbD10LnJlbmRlcmVyO251bGwhPW8/bC5zZXRBdHRyaWJ1dGUobixpLHMscik6bC5yZW1vdmVBdHRyaWJ1dGUobixpLHIpfSh0LGksYSxpLm5zLHMscik7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnJlbmRlcmVyO3I/aS5hZGRDbGFzcyhlLG4pOmkucmVtb3ZlQ2xhc3MoZSxuKX0odCxhLHMscik7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoQ3IuU1RZTEUsaSk7aWYobnVsbCE9byl7bz1vLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9YSYmKG8rPWEpfWVsc2Ugbz1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9bz9zLnNldFN0eWxlKG4scixvKTpzLnJlbW92ZVN0eWxlKG4scil9KHQsaSxhLHMscik7YnJlYWs7Y2FzZSA4OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPWUuc2VjdXJpdHlDb250ZXh0LGE9bz90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKG8saSk6aTt0LnJlbmRlcmVyLnNldFByb3BlcnR5KG4scixhKX0oMzM1NTQ0MzImZS5mbGFncyYmMzImaS5mbGFncz9vLmNvbXBvbmVudFZpZXc6dCxpLGEscyxyKX1yZXR1cm4hMH12YXIgd2k9bmV3IE9iamVjdCx4aT1GcihWdCksQ2k9RnIoanQpLEVpPUZyKERlKTtmdW5jdGlvbiBTaSh0LGUsbixyKXtyZXR1cm4gbj1PdChuKSx7aW5kZXg6LTEsZGVwczpyaShyLEF0KGUpKSxmbGFnczp0LHRva2VuOmUsdmFsdWU6bn19ZnVuY3Rpb24ga2kodCxlLG4pe3ZvaWQgMD09PW4mJihuPVZ0LlRIUk9XX0lGX05PVF9GT1VORCk7dmFyIHIsaSxvPXRlKHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIHhpOmNhc2UgQ2k6Y2FzZSBFaTpyZXR1cm4gdH12YXIgcz10Ll9kZWYucHJvdmlkZXJzQnlLZXlbYV07aWYocyl7dmFyIGw9dC5fcHJvdmlkZXJzW3MuaW5kZXhdO3JldHVybiB2b2lkIDA9PT1sJiYobD10Ll9wcm92aWRlcnNbcy5pbmRleF09VGkodCxzKSksbD09PXdpP3ZvaWQgMDpsfWlmKGUudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYocj10LG51bGwhPShpPWUudG9rZW4ubmdJbmplY3RhYmxlRGVmKS5wcm92aWRlZEluJiYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fZGVmLm1vZHVsZXMuaW5kZXhPZihpLnByb3ZpZGVkSW4pPi0xfShyKXx8InJvb3QiPT09aS5wcm92aWRlZEluJiZyLl9kZWYuaXNSb290KSkpe3ZhciB1PXQuX3Byb3ZpZGVycy5sZW5ndGg7cmV0dXJuIHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTplLnRva2VuLm5nSW5qZWN0YWJsZURlZi5mYWN0b3J5LGRlcHM6W10saW5kZXg6dSx0b2tlbjplLnRva2VufSx0Ll9wcm92aWRlcnNbdV09d2ksdC5fcHJvdmlkZXJzW3VdPVRpKHQsdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldKX1yZXR1cm4gdC5fcGFyZW50LmdldChlLnRva2VuLG4pfWZpbmFsbHl7dGUobyl9fWZ1bmN0aW9uIFRpKHQsZSl7dmFyIG47c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDUxMjpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uLmxlbmd0aDtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKGtpKHQsblswXSkpO2Nhc2UgMjpyZXR1cm4gbmV3IGUoa2kodCxuWzBdKSxraSh0LG5bMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyBlKGtpKHQsblswXSksa2kodCxuWzFdKSxraSh0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspaVtvXT1raSh0LG5bb10pO3JldHVybiBuZXcoZS5iaW5kLmFwcGx5KGUsbChbdm9pZCAwXSxpKSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAxMDI0Om49ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4ubGVuZ3RoO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIGUoKTtjYXNlIDE6cmV0dXJuIGUoa2kodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBlKGtpKHQsblswXSksa2kodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBlKGtpKHQsblswXSksa2kodCxuWzFdKSxraSh0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgaT1BcnJheShyKSxvPTA7bzxyO28rKylpW29dPWtpKHQsbltvXSk7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGwoaSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAyMDQ4Om49a2kodCxlLmRlcHNbMF0pO2JyZWFrO2Nhc2UgMjU2Om49ZS52YWx1ZX1yZXR1cm4gbj09PXdpfHxudWxsPT1ufHwib2JqZWN0IiE9dHlwZW9mIG58fDEzMTA3MiZlLmZsYWdzfHwiZnVuY3Rpb24iIT10eXBlb2Ygbi5uZ09uRGVzdHJveXx8KGUuZmxhZ3N8PTEzMTA3Miksdm9pZCAwPT09bj93aTpufWZ1bmN0aW9uIEFpKHQsZSl7dmFyIG49dC52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzO2lmKChudWxsPT1lfHxlPj1uLmxlbmd0aCkmJihlPW4ubGVuZ3RoLTEpLGU8MClyZXR1cm4gbnVsbDt2YXIgcj1uW2VdO3JldHVybiByLnZpZXdDb250YWluZXJQYXJlbnQ9bnVsbCxNaShuLGUpLE1yLmRpcnR5UGFyZW50UXVlcmllcyhyKSxPaShyKSxyfWZ1bmN0aW9uIFBpKHQsZSxuKXt2YXIgcj1lPyRyKGUsZS5kZWYubGFzdFJlbmRlclJvb3ROb2RlKTp0LnJlbmRlckVsZW1lbnQ7c2kobiwyLG4ucmVuZGVyZXIucGFyZW50Tm9kZShyKSxuLnJlbmRlcmVyLm5leHRTaWJsaW5nKHIpLHZvaWQgMCl9ZnVuY3Rpb24gT2kodCl7c2kodCwzLG51bGwsbnVsbCx2b2lkIDApfWZ1bmN0aW9uIElpKHQsZSxuKXtlPj10Lmxlbmd0aD90LnB1c2gobik6dC5zcGxpY2UoZSwwLG4pfWZ1bmN0aW9uIE1pKHQsZSl7ZT49dC5sZW5ndGgtMT90LnBvcCgpOnQuc3BsaWNlKGUsMSl9dmFyIE5pPW5ldyBPYmplY3Q7ZnVuY3Rpb24gUmkodCxlLG4scixpLG8pe3JldHVybiBuZXcgRGkodCxlLG4scixpLG8pfXZhciBEaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhKXt2YXIgcz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHMuc2VsZWN0b3I9ZSxzLmNvbXBvbmVudFR5cGU9bixzLl9pbnB1dHM9aSxzLl9vdXRwdXRzPW8scy5uZ0NvbnRlbnRTZWxlY3RvcnM9YSxzLnZpZXdEZWZGYWN0b3J5PXIsc31yZXR1cm4gaShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5wdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLl9pbnB1dHM7Zm9yKHZhciBuIGluIGUpdC5wdXNoKHtwcm9wTmFtZTpuLHRlbXBsYXRlTmFtZTplW25dfSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvdXRwdXRzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX291dHB1dHMpdC5wdXNoKHtwcm9wTmFtZTplLHRlbXBsYXRlTmFtZTp0aGlzLl9vdXRwdXRzW2VdfSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCFyKXRocm93IG5ldyBFcnJvcigibmdNb2R1bGUgc2hvdWxkIGJlIHByb3ZpZGVkIik7dmFyIGk9YWkodGhpcy52aWV3RGVmRmFjdG9yeSksbz1pLm5vZGVzWzBdLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIubm9kZUluZGV4LGE9TXIuY3JlYXRlUm9vdFZpZXcodCxlfHxbXSxuLGkscixOaSkscz1QcihhLG8pLmluc3RhbmNlO3JldHVybiBuJiZhLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShBcihhLDApLnJlbmRlckVsZW1lbnQsIm5nLXZlcnNpb24iLHJlLmZ1bGwpLG5ldyBMaShhLG5ldyBCaShhKSxzKX0sZX0oa2UpLExpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fdmlldz1lLGkuX3ZpZXdSZWY9bixpLl9jb21wb25lbnQ9cixpLl9lbERlZj1pLl92aWV3LmRlZi5ub2Rlc1swXSxpLmhvc3RWaWV3PW4saS5jaGFuZ2VEZXRlY3RvclJlZj1uLGkuaW5zdGFuY2U9cixpfXJldHVybiBpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsb2NhdGlvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgZG4oQXIodGhpcy5fdmlldyx0aGlzLl9lbERlZi5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFpKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY29tcG9uZW50VHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnQuY29uc3RydWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdSZWYuZGVzdHJveSgpfSxlLnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fdmlld1JlZi5vbkRlc3Ryb3kodCl9LGV9KGZ1bmN0aW9uKCl7fSk7ZnVuY3Rpb24gamkodCxlLG4pe3JldHVybiBuZXcgRmkodCxlLG4pfXZhciBGaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXc9dCx0aGlzLl9lbERlZj1lLHRoaXMuX2RhdGE9bix0aGlzLl9lbWJlZGRlZFZpZXdzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRuKHRoaXMuX2RhdGEucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgcWkodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRJbmplY3RvciIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92aWV3LGU9dGhpcy5fZWxEZWYucGFyZW50OyFlJiZ0OyllPVhyKHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHQ/bmV3IHFpKHQsZSk6bmV3IHFpKHRoaXMuX3ZpZXcsbnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIGU9QWkodGhpcy5fZGF0YSx0KTtNci5kZXN0cm95VmlldyhlKX19LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9lbWJlZGRlZFZpZXdzW3RdO2lmKGUpe3ZhciBuPW5ldyBCaShlKTtyZXR1cm4gbi5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksbn1yZXR1cm4gbnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSk7cmV0dXJuIHRoaXMuaW5zZXJ0KHIsbikscn0sdC5wcm90b3R5cGUuY3JlYXRlQ29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89bnx8dGhpcy5wYXJlbnRJbmplY3RvcjtpfHx0IGluc3RhbmNlb2YgUmV8fChpPW8uZ2V0KERlKSk7dmFyIGE9dC5jcmVhdGUobyxyLHZvaWQgMCxpKTtyZXR1cm4gdGhpcy5pbnNlcnQoYS5ob3N0VmlldyxlKSxhfSx0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4scixpLG8sYT10O3JldHVybiBpPWEuX3ZpZXcsbz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLG51bGwhPT0ocj1lKSYmdm9pZCAwIT09cnx8KHI9by5sZW5ndGgpLGkudmlld0NvbnRhaW5lclBhcmVudD10aGlzLl92aWV3LElpKG8scixpKSxmdW5jdGlvbih0LGUpe3ZhciBuPVlyKGUpO2lmKG4mJm4hPT10JiYhKDE2JmUuc3RhdGUpKXtlLnN0YXRlfD0xNjt2YXIgcj1uLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztyfHwocj1uLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cz1bXSksci5wdXNoKGUpLGZ1bmN0aW9uKHQsbil7aWYoISg0Jm4uZmxhZ3MpKXtlLnBhcmVudC5kZWYubm9kZUZsYWdzfD00LG4uZmxhZ3N8PTQ7Zm9yKHZhciByPW4ucGFyZW50O3I7KXIuY2hpbGRGbGFnc3w9NCxyPXIucGFyZW50fX0oMCxlLnBhcmVudE5vZGVEZWYpfX0obixpKSxNci5kaXJ0eVBhcmVudFF1ZXJpZXMoaSksUGkobixyPjA/b1tyLTFdOm51bGwsaSksYS5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksdH0sdC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1vdmUgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4scixpLG8sYSxzPXRoaXMuX2VtYmVkZGVkVmlld3MuaW5kZXhPZih0Ll92aWV3KTtyZXR1cm4gaT1lLGE9KG89KG49dGhpcy5fZGF0YSkudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cylbcj1zXSxNaShvLHIpLG51bGw9PWkmJihpPW8ubGVuZ3RoKSxJaShvLGksYSksTXIuZGlydHlQYXJlbnRRdWVyaWVzKGEpLE9pKGEpLFBpKG4saT4wP29baS0xXTpudWxsLGEpLHR9LHQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VtYmVkZGVkVmlld3MuaW5kZXhPZih0Ll92aWV3KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPUFpKHRoaXMuX2RhdGEsdCk7ZSYmTXIuZGVzdHJveVZpZXcoZSl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbih0KXt2YXIgZT1BaSh0aGlzLl9kYXRhLHQpO3JldHVybiBlP25ldyBCaShlKTpudWxsfSx0fSgpO2Z1bmN0aW9uIFZpKHQpe3JldHVybiBuZXcgQmkodCl9dmFyIEJpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl92aWV3PXQsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1udWxsLHRoaXMuX2FwcFJlZj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3ROb2RlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiBzaSh0aGlzLl92aWV3LDAsdm9pZCAwLHZvaWQgMCx0PVtdKSx0O3ZhciB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29udGV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9KDEyOCZ0aGlzLl92aWV3LnN0YXRlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tYXJrRm9yQ2hlY2s9ZnVuY3Rpb24oKXtRcih0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5zdGF0ZSY9LTV9LHQucHJvdG90eXBlLmRldGVjdENoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl92aWV3LnJvb3QucmVuZGVyZXJGYWN0b3J5O3QuYmVnaW4mJnQuYmVnaW4oKTt0cnl7TXIuY2hlY2tBbmRVcGRhdGVWaWV3KHRoaXMuX3ZpZXcpfWZpbmFsbHl7dC5lbmQmJnQuZW5kKCl9fSx0LnByb3RvdHlwZS5jaGVja05vQ2hhbmdlcz1mdW5jdGlvbigpe01yLmNoZWNrTm9DaGFuZ2VzVmlldyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlfD00fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fdmlldy5kaXNwb3NhYmxlc3x8KHRoaXMuX3ZpZXcuZGlzcG9zYWJsZXM9W10pLHRoaXMuX3ZpZXcuZGlzcG9zYWJsZXMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2FwcFJlZj90aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTp0aGlzLl92aWV3Q29udGFpbmVyUmVmJiZ0aGlzLl92aWV3Q29udGFpbmVyUmVmLmRldGFjaCh0aGlzLl92aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcykpLE1yLmRlc3Ryb3lWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2hGcm9tQXBwUmVmPWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmPW51bGwsT2kodGhpcy5fdmlldyksTXIuZGlydHlQYXJlbnRRdWVyaWVzKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5hdHRhY2hUb0FwcFJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl92aWV3Q29udGFpbmVyUmVmKXRocm93IG5ldyBFcnJvcigiVGhpcyB2aWV3IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBWaWV3Q29udGFpbmVyISIpO3RoaXMuX2FwcFJlZj10fSx0LnByb3RvdHlwZS5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWY9ZnVuY3Rpb24odCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBFcnJvcigiVGhpcyB2aWV3IGlzIGFscmVhZHkgYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIEFwcGxpY2F0aW9uUmVmISIpO3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dH0sdH0oKTtmdW5jdGlvbiB6aSh0LGUpe3JldHVybiBuZXcgVWkodCxlKX12YXIgVWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGFyZW50Vmlldz1lLHIuX2RlZj1uLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCaShNci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYsdGhpcy5fZGVmLmVsZW1lbnQudGVtcGxhdGUsdCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVsZW1lbnRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRuKEFyKHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0od24pO2Z1bmN0aW9uIEhpKHQsZSl7cmV0dXJuIG5ldyBxaSh0LGUpfXZhciBxaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLmVsRGVmPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1WdC5USFJPV19JRl9OT1RfRk9VTkQpLE1yLnJlc29sdmVEZXAodGhpcy52aWV3LHRoaXMuZWxEZWYsISF0aGlzLmVsRGVmJiYwIT0oMzM1NTQ0MzImdGhpcy5lbERlZi5mbGFncykse2ZsYWdzOjAsdG9rZW46dCx0b2tlbktleTpGcih0KX0sZSl9LHR9KCk7ZnVuY3Rpb24gR2kodCxlKXt2YXIgbj10LmRlZi5ub2Rlc1tlXTtpZigxJm4uZmxhZ3Mpe3ZhciByPUFyKHQsbi5ub2RlSW5kZXgpO3JldHVybiBuLmVsZW1lbnQudGVtcGxhdGU/ci50ZW1wbGF0ZTpyLnJlbmRlckVsZW1lbnR9aWYoMiZuLmZsYWdzKXJldHVybiBUcih0LG4ubm9kZUluZGV4KS5yZW5kZXJUZXh0O2lmKDIwMjQwJm4uZmxhZ3MpcmV0dXJuIFByKHQsbi5ub2RlSW5kZXgpLmluc3RhbmNlO3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBzdGF0ZTogcmVhZCBub2RlVmFsdWUgZm9yIG5vZGUgaW5kZXggIitlKX1mdW5jdGlvbiBXaSh0KXtyZXR1cm4gbmV3IFFpKHQucmVuZGVyZXIpfXZhciBRaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10fXJldHVybiB0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXMocGkoZSksMikscj10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQoblsxXSxuWzBdKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LHIpLHJ9LHQucHJvdG90eXBlLmNyZWF0ZVZpZXdSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVUZW1wbGF0ZUFuY2hvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChlKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LG4pLG59LHQucHJvdG90eXBlLnByb2plY3ROb2Rlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlW25dKX0sdC5wcm90b3R5cGUuYXR0YWNoVmlld0FmdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KSxyPXRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCksaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKG4sZVtpXSxyKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXSxyPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShuKTt0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHIsbil9fSx0LnByb3RvdHlwZS5kZXN0cm95Vmlldz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUoZVtuXSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuR2xvYmFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1zKHBpKGUpLDIpLGk9clswXSxvPXJbMV07bnVsbCE9bj90aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LG8sbixpKTp0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LG8saSl9LHQucHJvdG90eXBlLnNldEJpbmRpbmdEZWJ1Z0luZm89ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuc2V0RWxlbWVudENsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKTp0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldEVsZW1lbnRTdHlsZT1mdW5jdGlvbih0LGUsbil7bnVsbCE9bj90aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuKTp0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmludm9rZUVsZW1lbnRNZXRob2Q9ZnVuY3Rpb24odCxlLG4pe3RbZV0uYXBwbHkodCxuKX0sdC5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVuZGVyZXIuYW5pbWF0ZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkISIpfSx0fSgpO2Z1bmN0aW9uIEtpKHQsZSxuLHIpe3JldHVybiBuZXcgWmkodCxlLG4scil9dmFyIFppPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9tb2R1bGVUeXBlPXQsdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1uLHRoaXMuX2RlZj1yLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuaW5qZWN0b3I9dGhpcyxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZGVmLG49dC5fcHJvdmlkZXJzPW5ldyBBcnJheShlLnByb3ZpZGVycy5sZW5ndGgpLHI9MDtyPGUucHJvdmlkZXJzLmxlbmd0aDtyKyspe3ZhciBpPWUucHJvdmlkZXJzW3JdOzQwOTYmaS5mbGFnc3x8dm9pZCAwPT09bltyXSYmKG5bcl09VGkodCxpKSl9fSh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT1WdC5USFJPV19JRl9OT1RfRk9VTkQpLHZvaWQgMD09PW4mJihuPTApO3ZhciByPTA7cmV0dXJuIDQmbj9yfD0xOjImbiYmKHJ8PTQpLGtpKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6RnIodCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoTWUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIrQXQodGhpcy5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrIiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4iKTt0aGlzLl9kZXN0cm95ZWQ9ITAsZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5fZGVmLHI9bmV3IFNldCxpPTA7aTxuLnByb3ZpZGVycy5sZW5ndGg7aSsrKWlmKDEzMTA3MiZuLnByb3ZpZGVyc1tpXS5mbGFncyl7dmFyIG89dC5fcHJvdmlkZXJzW2ldO2lmKG8mJm8hPT13aSl7dmFyIGE9by5uZ09uRGVzdHJveTsiZnVuY3Rpb24iIT10eXBlb2YgYXx8ci5oYXMobyl8fChhLmFwcGx5KG8pLHIuYWRkKG8pKX19fSh0aGlzKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKHQpfSx0fSgpLFlpPUZyKGZ1bmN0aW9uKCl7fSksWGk9RnIocG4pLCRpPUZyKGRuKSxKaT1Gcih4biksdG89RnIod24pLGVvPUZyKENuKSxubz1GcihWdCkscm89RnIoanQpO2Z1bmN0aW9uIGlvKHQsZSxuLHIsaSxvLGEsbCl7dmFyIHU9W107aWYoYSlmb3IodmFyIGMgaW4gYSl7dmFyIGg9cyhhW2NdLDIpO3VbaFswXV09e2ZsYWdzOjgsbmFtZTpjLG5vbk1pbmlmaWVkTmFtZTpoWzFdLG5zOm51bGwsc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om51bGx9fXZhciBmPVtdO2lmKGwpZm9yKHZhciBwIGluIGwpZi5wdXNoKHt0eXBlOjEscHJvcE5hbWU6cCx0YXJnZXQ6bnVsbCxldmVudE5hbWU6bFtwXX0pO3JldHVybiBzbyh0LGV8PTE2Mzg0LG4scixpLGksbyx1LGYpfWZ1bmN0aW9uIG9vKHQsZSxuKXtyZXR1cm4gc28oLTEsdHw9MTYsbnVsbCwwLGUsZSxuKX1mdW5jdGlvbiBhbyh0LGUsbixyLGkpe3JldHVybiBzbygtMSx0LGUsMCxuLHIsaSl9ZnVuY3Rpb24gc28odCxlLG4scixpLG8sYSxzLGwpe3ZhciB1PW5pKG4pLGM9dS5tYXRjaGVkUXVlcmllcyxoPXUucmVmZXJlbmNlcyxmPXUubWF0Y2hlZFF1ZXJ5SWRzO2x8fChsPVtdKSxzfHwocz1bXSksbz1PdChvKTt2YXIgcD1yaShhLEF0KGkpKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpjLG1hdGNoZWRRdWVyeUlkczpmLHJlZmVyZW5jZXM6aCxuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OnIsYmluZGluZ3M6cyxiaW5kaW5nRmxhZ3M6ZGkocyksb3V0cHV0czpsLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjp7dG9rZW46aSx2YWx1ZTpvLGRlcHM6cH0sdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGxvKHQsZSl7cmV0dXJuIGZvKHQsZSl9ZnVuY3Rpb24gdW8odCxlKXtmb3IodmFyIG49dDtuLnBhcmVudCYmIUpyKG4pOyluPW4ucGFyZW50O3JldHVybiBwbyhuLnBhcmVudCxYcihuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gY28odCxlKXt2YXIgbj1wbyh0LGUucGFyZW50LCgzMjc2OCZlLmZsYWdzKT4wLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKTtpZihlLm91dHB1dHMubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5vdXRwdXRzLmxlbmd0aDtyKyspe3ZhciBpPWUub3V0cHV0c1tyXSxvPW5baS5wcm9wTmFtZV0uc3Vic2NyaWJlKGhvKHQsZS5wYXJlbnQubm9kZUluZGV4LGkuZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxlc1tlLm91dHB1dEluZGV4K3JdPW8udW5zdWJzY3JpYmUuYmluZChvKX1yZXR1cm4gbn1mdW5jdGlvbiBobyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBacih0LGUsbixyKX19ZnVuY3Rpb24gZm8odCxlKXt2YXIgbj0oODE5MiZlLmZsYWdzKT4wLHI9ZS5wcm92aWRlcjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOnJldHVybiBwbyh0LGUucGFyZW50LG4sci52YWx1ZSxyLmRlcHMpO2Nhc2UgMTAyNDpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1pLmxlbmd0aDtzd2l0Y2gobyl7Y2FzZSAwOnJldHVybiByKCk7Y2FzZSAxOnJldHVybiByKHlvKHQsZSxuLGlbMF0pKTtjYXNlIDI6cmV0dXJuIHIoeW8odCxlLG4saVswXSkseW8odCxlLG4saVsxXSkpO2Nhc2UgMzpyZXR1cm4gcih5byh0LGUsbixpWzBdKSx5byh0LGUsbixpWzFdKSx5byh0LGUsbixpWzJdKSk7ZGVmYXVsdDpmb3IodmFyIGE9QXJyYXkobykscz0wO3M8bztzKyspYVtzXT15byh0LGUsbixpW3NdKTtyZXR1cm4gci5hcHBseSh2b2lkIDAsbChhKSl9fSh0LGUucGFyZW50LG4sci52YWx1ZSxyLmRlcHMpO2Nhc2UgMjA0ODpyZXR1cm4geW8odCxlLnBhcmVudCxuLHIuZGVwc1swXSk7Y2FzZSAyNTY6cmV0dXJuIHIudmFsdWV9fWZ1bmN0aW9uIHBvKHQsZSxuLHIsaSl7dmFyIG89aS5sZW5ndGg7c3dpdGNoKG8pe2Nhc2UgMDpyZXR1cm4gbmV3IHI7Y2FzZSAxOnJldHVybiBuZXcgcih5byh0LGUsbixpWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgcih5byh0LGUsbixpWzBdKSx5byh0LGUsbixpWzFdKSk7Y2FzZSAzOnJldHVybiBuZXcgcih5byh0LGUsbixpWzBdKSx5byh0LGUsbixpWzFdKSx5byh0LGUsbixpWzJdKSk7ZGVmYXVsdDpmb3IodmFyIGE9bmV3IEFycmF5KG8pLHM9MDtzPG87cysrKWFbc109eW8odCxlLG4saVtzXSk7cmV0dXJuIG5ldyhyLmJpbmQuYXBwbHkocixsKFt2b2lkIDBdLGEpKSl9fXZhciBtbz17fTtmdW5jdGlvbiB5byh0LGUsbixyLGkpe2lmKHZvaWQgMD09PWkmJihpPVZ0LlRIUk9XX0lGX05PVF9GT1VORCksOCZyLmZsYWdzKXJldHVybiByLnRva2VuO3ZhciBvPXQ7MiZyLmZsYWdzJiYoaT1udWxsKTt2YXIgYT1yLnRva2VuS2V5O2E9PT1lbyYmKG49ISghZXx8IWUuZWxlbWVudC5jb21wb25lbnRWaWV3KSksZSYmMSZyLmZsYWdzJiYobj0hMSxlPWUucGFyZW50KTtmb3IodmFyIHM9dDtzOyl7aWYoZSlzd2l0Y2goYSl7Y2FzZSBZaTpyZXR1cm4gV2koZ28ocyxlLG4pKTtjYXNlIFhpOnJldHVybiBnbyhzLGUsbikucmVuZGVyZXI7Y2FzZSAkaTpyZXR1cm4gbmV3IGRuKEFyKHMsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Nhc2UgSmk6cmV0dXJuIEFyKHMsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXI7Y2FzZSB0bzppZihlLmVsZW1lbnQudGVtcGxhdGUpcmV0dXJuIEFyKHMsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2JyZWFrO2Nhc2UgZW86cmV0dXJuIFZpKGdvKHMsZSxuKSk7Y2FzZSBubzpjYXNlIHJvOnJldHVybiBIaShzLGUpO2RlZmF1bHQ6dmFyIGw9KG4/ZS5lbGVtZW50LmFsbFByb3ZpZGVyczplLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKVthXTtpZihsKXt2YXIgdT1QcihzLGwubm9kZUluZGV4KTtyZXR1cm4gdXx8KHU9e2luc3RhbmNlOmZvKHMsbCl9LHMubm9kZXNbbC5ub2RlSW5kZXhdPXUpLHUuaW5zdGFuY2V9fW49SnIocyksZT1YcihzKSxzPXMucGFyZW50LDQmci5mbGFncyYmKHM9bnVsbCl9dmFyIGM9by5yb290LmluamVjdG9yLmdldChyLnRva2VuLG1vKTtyZXR1cm4gYyE9PW1vfHxpPT09bW8/YzpvLnJvb3QubmdNb2R1bGUuaW5qZWN0b3IuZ2V0KHIudG9rZW4saSl9ZnVuY3Rpb24gZ28odCxlLG4pe3ZhciByO2lmKG4pcj1Bcih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3O2Vsc2UgZm9yKHI9dDtyLnBhcmVudCYmIUpyKHIpOylyPXIucGFyZW50O3JldHVybiByfWZ1bmN0aW9uIHZvKHQsZSxuLHIsaSxvKXtpZigzMjc2OCZuLmZsYWdzKXt2YXIgYT1Bcih0LG4ucGFyZW50Lm5vZGVJbmRleCkuY29tcG9uZW50VmlldzsyJmEuZGVmLmZsYWdzJiYoYS5zdGF0ZXw9OCl9aWYoZS5pbnN0YW5jZVtuLmJpbmRpbmdzW3JdLm5hbWVdPWksNTI0Mjg4Jm4uZmxhZ3Mpe289b3x8e307dmFyIHM9T24udW53cmFwKHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdKTtvW24uYmluZGluZ3Nbcl0ubm9uTWluaWZpZWROYW1lXT1uZXcgSW4ocyxpLDAhPSgyJnQuc3RhdGUpKX1yZXR1cm4gdC5vbGRWYWx1ZXNbbi5iaW5kaW5nSW5kZXgrcl09aSxvfWZ1bmN0aW9uIF9vKHQsZSl7aWYodC5kZWYubm9kZUZsYWdzJmUpZm9yKHZhciBuPXQuZGVmLm5vZGVzLHI9MCxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV0sYT1vLnBhcmVudDtmb3IoIWEmJm8uZmxhZ3MmZSYmd28odCxpLG8uZmxhZ3MmZSxyKyspLDA9PShvLmNoaWxkRmxhZ3MmZSkmJihpKz1vLmNoaWxkQ291bnQpO2EmJjEmYS5mbGFncyYmaT09PWEubm9kZUluZGV4K2EuY2hpbGRDb3VudDspYS5kaXJlY3RDaGlsZEZsYWdzJmUmJihyPWJvKHQsYSxlLHIpKSxhPWEucGFyZW50fX1mdW5jdGlvbiBibyh0LGUsbixyKXtmb3IodmFyIGk9ZS5ub2RlSW5kZXgrMTtpPD1lLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ7aSsrKXt2YXIgbz10LmRlZi5ub2Rlc1tpXTtvLmZsYWdzJm4mJndvKHQsaSxvLmZsYWdzJm4scisrKSxpKz1vLmNoaWxkQ291bnR9cmV0dXJuIHJ9ZnVuY3Rpb24gd28odCxlLG4scil7dmFyIGk9UHIodCxlKTtpZihpKXt2YXIgbz1pLmluc3RhbmNlO28mJihNci5zZXRDdXJyZW50Tm9kZSh0LGUpLDEwNDg1NzYmbiYma3IodCw1MTIscikmJm8ubmdBZnRlckNvbnRlbnRJbml0KCksMjA5NzE1MiZuJiZvLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpLDQxOTQzMDQmbiYma3IodCw3NjgscikmJm8ubmdBZnRlclZpZXdJbml0KCksODM4ODYwOCZuJiZvLm5nQWZ0ZXJWaWV3Q2hlY2tlZCgpLDEzMTA3MiZuJiZvLm5nT25EZXN0cm95KCkpfX1mdW5jdGlvbiB4byh0LGUsbil7dmFyIHI9W107Zm9yKHZhciBpIGluIG4pci5wdXNoKHtwcm9wTmFtZTppLGJpbmRpbmdUeXBlOm5baV19KTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4Oi0xLGZsYWdzOnQsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbmdDb250ZW50SW5kZXg6LTEsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxjaGlsZENvdW50OjAsYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6e2lkOmUsZmlsdGVySWQ6ZWkoZSksYmluZGluZ3M6cn0sbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIENvKHQpe2Zvcih2YXIgZT10LmRlZi5ub2RlTWF0Y2hlZFF1ZXJpZXM7dC5wYXJlbnQmJnRpKHQpOyl7dmFyIG49dC5wYXJlbnROb2RlRGVmO3Q9dC5wYXJlbnQ7Zm9yKHZhciByPW4ubm9kZUluZGV4K24uY2hpbGRDb3VudCxpPTA7aTw9cjtpKyspNjcxMDg4NjQmKG89dC5kZWYubm9kZXNbaV0pLmZsYWdzJiY1MzY4NzA5MTImby5mbGFncyYmKG8ucXVlcnkuZmlsdGVySWQmZSk9PT1vLnF1ZXJ5LmZpbHRlcklkJiZJcih0LGkpLnNldERpcnR5KCksISgxJm8uZmxhZ3MmJmkrby5jaGlsZENvdW50PG4ubm9kZUluZGV4KSYmNjcxMDg4NjQmby5jaGlsZEZsYWdzJiY1MzY4NzA5MTImby5jaGlsZEZsYWdzfHwoaSs9by5jaGlsZENvdW50KX1pZigxMzQyMTc3MjgmdC5kZWYubm9kZUZsYWdzKWZvcihpPTA7aTx0LmRlZi5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgbzsxMzQyMTc3MjgmKG89dC5kZWYubm9kZXNbaV0pLmZsYWdzJiY1MzY4NzA5MTImby5mbGFncyYmSXIodCxpKS5zZXREaXJ0eSgpLGkrPW8uY2hpbGRDb3VudH19ZnVuY3Rpb24gRW8odCxlKXt2YXIgbj1Jcih0LGUubm9kZUluZGV4KTtpZihuLmRpcnR5KXt2YXIgcixpPXZvaWQgMDtpZig2NzEwODg2NCZlLmZsYWdzKXt2YXIgbz1lLnBhcmVudC5wYXJlbnQ7aT1Tbyh0LG8ubm9kZUluZGV4LG8ubm9kZUluZGV4K28uY2hpbGRDb3VudCxlLnF1ZXJ5LFtdKSxyPVByKHQsZS5wYXJlbnQubm9kZUluZGV4KS5pbnN0YW5jZX1lbHNlIDEzNDIxNzcyOCZlLmZsYWdzJiYoaT1Tbyh0LDAsdC5kZWYubm9kZXMubGVuZ3RoLTEsZS5xdWVyeSxbXSkscj10LmNvbXBvbmVudCk7bi5yZXNldChpKTtmb3IodmFyIGE9ZS5xdWVyeS5iaW5kaW5ncyxzPSExLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxjPXZvaWQgMDtzd2l0Y2godS5iaW5kaW5nVHlwZSl7Y2FzZSAwOmM9bi5maXJzdDticmVhaztjYXNlIDE6Yz1uLHM9ITB9clt1LnByb3BOYW1lXT1jfXMmJm4ubm90aWZ5T25DaGFuZ2VzKCl9fWZ1bmN0aW9uIFNvKHQsZSxuLHIsaSl7Zm9yKHZhciBvPWU7bzw9bjtvKyspe3ZhciBhPXQuZGVmLm5vZGVzW29dLHM9YS5tYXRjaGVkUXVlcmllc1tyLmlkXTtpZihudWxsIT1zJiZpLnB1c2goa28odCxhLHMpKSwxJmEuZmxhZ3MmJmEuZWxlbWVudC50ZW1wbGF0ZSYmKGEuZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkKXt2YXIgbD1Bcih0LG8pO2lmKChhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmci5maWx0ZXJJZCk9PT1yLmZpbHRlcklkJiYoU28odCxvKzEsbythLmNoaWxkQ291bnQscixpKSxvKz1hLmNoaWxkQ291bnQpLDE2Nzc3MjE2JmEuZmxhZ3MpZm9yKHZhciB1PWwudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxjPTA7Yzx1Lmxlbmd0aDtjKyspe3ZhciBoPXVbY10sZj1ZcihoKTtmJiZmPT09bCYmU28oaCwwLGguZGVmLm5vZGVzLmxlbmd0aC0xLHIsaSl9dmFyIHA9bC50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYocClmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXt2YXIgZD1wW2NdO1NvKGQsMCxkLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLGkpfX0oYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpIT09ci5maWx0ZXJJZCYmKG8rPWEuY2hpbGRDb3VudCl9cmV0dXJuIGl9ZnVuY3Rpb24ga28odCxlLG4pe2lmKG51bGwhPW4pc3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gQXIodCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtjYXNlIDA6cmV0dXJuIG5ldyBkbihBcih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIDI6cmV0dXJuIEFyKHQsZS5ub2RlSW5kZXgpLnRlbXBsYXRlO2Nhc2UgMzpyZXR1cm4gQXIodCxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIDQ6cmV0dXJuIFByKHQsZS5ub2RlSW5kZXgpLmluc3RhbmNlfX1mdW5jdGlvbiBUbyh0LGUpe3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6LTEsZmxhZ3M6OCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OnQsY2hpbGRDb3VudDowLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50OntpbmRleDplfX19ZnVuY3Rpb24gQW8odCxlLG4pe3ZhciByPWlpKHQsZSxuKTtyJiZ1aSh0LG4ubmdDb250ZW50LmluZGV4LDEscixudWxsLHZvaWQgMCl9ZnVuY3Rpb24gUG8odCxlKXtyZXR1cm4gSW8oMzIsdCxuZXcgQXJyYXkoZSkpfWZ1bmN0aW9uIE9vKHQsZSl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspe3ZhciBhPW5bb107aVtlW2FdXT1hfXJldHVybiBJbyg2NCx0LGkpfWZ1bmN0aW9uIElvKHQsZSxuKXtmb3IodmFyIHI9bmV3IEFycmF5KG4ubGVuZ3RoKSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV07cltpXT17ZmxhZ3M6OCxuYW1lOm8sbnM6bnVsbCxub25NaW5pZmllZE5hbWU6byxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDplLGZsYWdzOnQsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OjAsYmluZGluZ3M6cixiaW5kaW5nRmxhZ3M6ZGkociksb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gTW8odCxlLG4pe2Zvcih2YXIgcj1uZXcgQXJyYXkobi5sZW5ndGgtMSksaT0xO2k8bi5sZW5ndGg7aSsrKXJbaS0xXT17ZmxhZ3M6OCxuYW1lOm51bGwsbnM6bnVsbCxub25NaW5pZmllZE5hbWU6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bltpXX07cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOjIsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDplLGNoaWxkQ291bnQ6MCxiaW5kaW5nczpyLGJpbmRpbmdGbGFnczo4LG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDp7cHJlZml4Om5bMF19LHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIE5vKHQsZSxuKXt2YXIgcixpPXQucmVuZGVyZXI7cj1pLmNyZWF0ZVRleHQobi50ZXh0LnByZWZpeCk7dmFyIG89aWkodCxlLG4pO3JldHVybiBvJiZpLmFwcGVuZENoaWxkKG8scikse3JlbmRlclRleHQ6cn19ZnVuY3Rpb24gUm8odCxlKXtyZXR1cm4obnVsbCE9dD90LnRvU3RyaW5nKCk6IiIpK2Uuc3VmZml4fWZ1bmN0aW9uIERvKHQsZSxuLHIpe2Zvcih2YXIgaT0wLG89MCxhPTAscz0wLGw9MCx1PW51bGwsYz1udWxsLGg9ITEsZj0hMSxwPW51bGwsZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgbT1lW2RdO2lmKG0ubm9kZUluZGV4PWQsbS5wYXJlbnQ9dSxtLmJpbmRpbmdJbmRleD1pLG0ub3V0cHV0SW5kZXg9byxtLnJlbmRlclBhcmVudD1jLGF8PW0uZmxhZ3MsbHw9bS5tYXRjaGVkUXVlcnlJZHMsbS5lbGVtZW50KXt2YXIgeT1tLmVsZW1lbnQ7eS5wdWJsaWNQcm92aWRlcnM9dT91LmVsZW1lbnQucHVibGljUHJvdmlkZXJzOk9iamVjdC5jcmVhdGUobnVsbCkseS5hbGxQcm92aWRlcnM9eS5wdWJsaWNQcm92aWRlcnMsaD0hMSxmPSExLG0uZWxlbWVudC50ZW1wbGF0ZSYmKGx8PW0uZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMpfWlmKGpvKHUsbSxlLmxlbmd0aCksaSs9bS5iaW5kaW5ncy5sZW5ndGgsbys9bS5vdXRwdXRzLmxlbmd0aCwhYyYmMyZtLmZsYWdzJiYocD1tKSwyMDIyNCZtLmZsYWdzKXtofHwoaD0hMCx1LmVsZW1lbnQucHVibGljUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUodS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycyksdS5lbGVtZW50LmFsbFByb3ZpZGVycz11LmVsZW1lbnQucHVibGljUHJvdmlkZXJzKTt2YXIgZz0wIT0oMzI3NjgmbS5mbGFncyk7MD09KDgxOTImbS5mbGFncyl8fGc/dS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVyc1tGcihtLnByb3ZpZGVyLnRva2VuKV09bTooZnx8KGY9ITAsdS5lbGVtZW50LmFsbFByb3ZpZGVycz1PYmplY3QuY3JlYXRlKHUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpKSx1LmVsZW1lbnQuYWxsUHJvdmlkZXJzW0ZyKG0ucHJvdmlkZXIudG9rZW4pXT1tKSxnJiYodS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyPW0pfWlmKHU/KHUuY2hpbGRGbGFnc3w9bS5mbGFncyx1LmRpcmVjdENoaWxkRmxhZ3N8PW0uZmxhZ3MsdS5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQmJm0uZWxlbWVudC50ZW1wbGF0ZSYmKHUuY2hpbGRNYXRjaGVkUXVlcmllc3w9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcykpOnN8PW0uZmxhZ3MsbS5jaGlsZENvdW50PjApdT1tLExvKG0pfHwoYz1tKTtlbHNlIGZvcig7dSYmZD09PXUubm9kZUluZGV4K3UuY2hpbGRDb3VudDspe3ZhciB2PXUucGFyZW50O3YmJih2LmNoaWxkRmxhZ3N8PXUuY2hpbGRGbGFncyx2LmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PXUuY2hpbGRNYXRjaGVkUXVlcmllcyksYz0odT12KSYmTG8odSk/dS5yZW5kZXJQYXJlbnQ6dX19cmV0dXJue2ZhY3Rvcnk6bnVsbCxub2RlRmxhZ3M6YSxyb290Tm9kZUZsYWdzOnMsbm9kZU1hdGNoZWRRdWVyaWVzOmwsZmxhZ3M6dCxub2RlczplLHVwZGF0ZURpcmVjdGl2ZXM6bnx8THIsdXBkYXRlUmVuZGVyZXI6cnx8THIsaGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIGVbbl0uZWxlbWVudC5oYW5kbGVFdmVudCh0LHIsaSl9LGJpbmRpbmdDb3VudDppLG91dHB1dENvdW50Om8sbGFzdFJlbmRlclJvb3ROb2RlOnB9fWZ1bmN0aW9uIExvKHQpe3JldHVybiAwIT0oMSZ0LmZsYWdzKSYmbnVsbD09PXQuZWxlbWVudC5uYW1lfWZ1bmN0aW9uIGpvKHQsZSxuKXt2YXIgcj1lLmVsZW1lbnQmJmUuZWxlbWVudC50ZW1wbGF0ZTtpZihyKXtpZighci5sYXN0UmVuZGVyUm9vdE5vZGUpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBFbWJlZGRlZCB0ZW1wbGF0ZXMgd2l0aG91dCBub2RlcyBhcmUgbm90IGFsbG93ZWQhIik7aWYoci5sYXN0UmVuZGVyUm9vdE5vZGUmJjE2Nzc3MjE2JnIubGFzdFJlbmRlclJvb3ROb2RlLmZsYWdzKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogTGFzdCByb290IG5vZGUgb2YgYSB0ZW1wbGF0ZSBjYW4ndCBoYXZlIGVtYmVkZGVkIHZpZXdzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9aWYoMjAyMjQmZS5mbGFncyYmMD09KDEmKHQ/dC5mbGFnczowKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBTdGF0aWNQcm92aWRlci9EaXJlY3RpdmUgbm9kZXMgbmVlZCB0byBiZSBjaGlsZHJlbiBvZiBlbGVtZW50cyBvciBhbmNob3JzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIik7aWYoZS5xdWVyeSl7aWYoNjcxMDg4NjQmZS5mbGFncyYmKCF0fHwwPT0oMTYzODQmdC5mbGFncykpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogQ29udGVudCBRdWVyeSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGRpcmVjdGl2ZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZigxMzQyMTc3MjgmZS5mbGFncyYmdCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFZpZXcgUXVlcnkgbm9kZXMgaGF2ZSB0byBiZSB0b3AgbGV2ZWwgbm9kZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZihlLmNoaWxkQ291bnQpe3ZhciBpPXQ/dC5ub2RlSW5kZXgrdC5jaGlsZENvdW50Om4tMTtpZihlLm5vZGVJbmRleDw9aSYmZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50PmkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBjaGlsZENvdW50IG9mIG5vZGUgbGVhZHMgb3V0c2lkZSBvZiBwYXJlbnQsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX19ZnVuY3Rpb24gRm8odCxlLG4scil7dmFyIGk9em8odC5yb290LHQucmVuZGVyZXIsdCxlLG4pO3JldHVybiBVbyhpLHQuY29tcG9uZW50LHIpLEhvKGkpLGl9ZnVuY3Rpb24gVm8odCxlLG4pe3ZhciByPXpvKHQsdC5yZW5kZXJlcixudWxsLG51bGwsZSk7cmV0dXJuIFVvKHIsbixuKSxIbyhyKSxyfWZ1bmN0aW9uIEJvKHQsZSxuLHIpe3ZhciBpLG89ZS5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZTtyZXR1cm4gaT1vP3Qucm9vdC5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIocixvKTp0LnJvb3QucmVuZGVyZXIsem8odC5yb290LGksdCxlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIsbil9ZnVuY3Rpb24gem8odCxlLG4scixpKXt2YXIgbz1uZXcgQXJyYXkoaS5ub2Rlcy5sZW5ndGgpLGE9aS5vdXRwdXRDb3VudD9uZXcgQXJyYXkoaS5vdXRwdXRDb3VudCk6bnVsbDtyZXR1cm57ZGVmOmkscGFyZW50Om4sdmlld0NvbnRhaW5lclBhcmVudDpudWxsLHBhcmVudE5vZGVEZWY6cixjb250ZXh0Om51bGwsY29tcG9uZW50Om51bGwsbm9kZXM6byxzdGF0ZToxMyxyb290OnQscmVuZGVyZXI6ZSxvbGRWYWx1ZXM6bmV3IEFycmF5KGkuYmluZGluZ0NvdW50KSxkaXNwb3NhYmxlczphLGluaXRJbmRleDotMX19ZnVuY3Rpb24gVW8odCxlLG4pe3QuY29tcG9uZW50PWUsdC5jb250ZXh0PW59ZnVuY3Rpb24gSG8odCl7dmFyIGU7SnIodCkmJihlPUFyKHQucGFyZW50LHQucGFyZW50Tm9kZURlZi5wYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtmb3IodmFyIG49dC5kZWYscj10Lm5vZGVzLGk9MDtpPG4ubm9kZXMubGVuZ3RoO2krKyl7dmFyIG89bi5ub2Rlc1tpXTtNci5zZXRDdXJyZW50Tm9kZSh0LGkpO3ZhciBhPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3Jm8uZmxhZ3Mpe2Nhc2UgMTp2YXIgcz1naSh0LGUsbyksbD12b2lkIDA7aWYoMzM1NTQ0MzImby5mbGFncyl7dmFyIHU9YWkoby5lbGVtZW50LmNvbXBvbmVudFZpZXcpO2w9TXIuY3JlYXRlQ29tcG9uZW50Vmlldyh0LG8sdSxzKX12aSh0LGwsbyxzKSxhPXtyZW5kZXJFbGVtZW50OnMsY29tcG9uZW50VmlldzpsLHZpZXdDb250YWluZXI6bnVsbCx0ZW1wbGF0ZTpvLmVsZW1lbnQudGVtcGxhdGU/emkodCxvKTp2b2lkIDB9LDE2Nzc3MjE2Jm8uZmxhZ3MmJihhLnZpZXdDb250YWluZXI9amkodCxvLGEpKTticmVhaztjYXNlIDI6YT1Obyh0LGUsbyk7YnJlYWs7Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDI1NjooYT1yW2ldKXx8NDA5NiZvLmZsYWdzfHwoYT17aW5zdGFuY2U6bG8odCxvKX0pO2JyZWFrO2Nhc2UgMTY6YT17aW5zdGFuY2U6dW8odCxvKX07YnJlYWs7Y2FzZSAxNjM4NDooYT1yW2ldKXx8KGE9e2luc3RhbmNlOmNvKHQsbyl9KSwzMjc2OCZvLmZsYWdzJiZVbyhBcih0LG8ucGFyZW50Lm5vZGVJbmRleCkuY29tcG9uZW50VmlldyxhLmluc3RhbmNlLGEuaW5zdGFuY2UpO2JyZWFrO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODphPXt2YWx1ZTp2b2lkIDB9O2JyZWFrO2Nhc2UgNjcxMDg4NjQ6Y2FzZSAxMzQyMTc3Mjg6YT1uZXcgeW47YnJlYWs7Y2FzZSA4OkFvKHQsZSxvKSxhPXZvaWQgMH1yW2ldPWF9JG8odCxYby5DcmVhdGVWaWV3Tm9kZXMpLG5hKHQsMjAxMzI2NTkyLDI2ODQzNTQ1NiwwKX1mdW5jdGlvbiBxbyh0KXtRbyh0KSxNci51cGRhdGVEaXJlY3RpdmVzKHQsMSksSm8odCxYby5DaGVja05vQ2hhbmdlcyksTXIudXBkYXRlUmVuZGVyZXIodCwxKSwkbyh0LFhvLkNoZWNrTm9DaGFuZ2VzKSx0LnN0YXRlJj0tOTd9ZnVuY3Rpb24gR28odCl7MSZ0LnN0YXRlPyh0LnN0YXRlJj0tMix0LnN0YXRlfD0yKTp0LnN0YXRlJj0tMyxTcih0LDAsMjU2KSxRbyh0KSxNci51cGRhdGVEaXJlY3RpdmVzKHQsMCksSm8odCxYby5DaGVja0FuZFVwZGF0ZSksbmEodCw2NzEwODg2NCw1MzY4NzA5MTIsMCk7dmFyIGU9U3IodCwyNTYsNTEyKTtfbyh0LDIwOTcxNTJ8KGU/MTA0ODU3NjowKSksTXIudXBkYXRlUmVuZGVyZXIodCwwKSwkbyh0LFhvLkNoZWNrQW5kVXBkYXRlKSxuYSh0LDEzNDIxNzcyOCw1MzY4NzA5MTIsMCksX28odCw4Mzg4NjA4fCgoZT1Tcih0LDUxMiw3NjgpKT80MTk0MzA0OjApKSwyJnQuZGVmLmZsYWdzJiYodC5zdGF0ZSY9LTkpLHQuc3RhdGUmPS05NyxTcih0LDc2OCwxMDI0KX1mdW5jdGlvbiBXbyh0LGUsbixyLGksbyxhLHMsdSxjLGgsZixwKXtyZXR1cm4gMD09PW4/ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLGwsdSxjLGgpe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1LGMsaCl7dmFyIGY9ZS5iaW5kaW5ncy5sZW5ndGgscD0hMTtyZXR1cm4gZj4wJiZiaSh0LGUsMCxuKSYmKHA9ITApLGY+MSYmYmkodCxlLDEscikmJihwPSEwKSxmPjImJmJpKHQsZSwyLGkpJiYocD0hMCksZj4zJiZiaSh0LGUsMyxvKSYmKHA9ITApLGY+NCYmYmkodCxlLDQsYSkmJihwPSEwKSxmPjUmJmJpKHQsZSw1LHMpJiYocD0hMCksZj42JiZiaSh0LGUsNixsKSYmKHA9ITApLGY+NyYmYmkodCxlLDcsdSkmJihwPSEwKSxmPjgmJmJpKHQsZSw4LGMpJiYocD0hMCksZj45JiZiaSh0LGUsOSxoKSYmKHA9ITApLHB9KHQsZSxuLHIsaSxvLGEscyxsLHUsYyxoKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxoKXt2YXIgZj0hMSxwPWUuYmluZGluZ3MsZD1wLmxlbmd0aDtpZihkPjAmJkdyKHQsZSwwLG4pJiYoZj0hMCksZD4xJiZHcih0LGUsMSxyKSYmKGY9ITApLGQ+MiYmR3IodCxlLDIsaSkmJihmPSEwKSxkPjMmJkdyKHQsZSwzLG8pJiYoZj0hMCksZD40JiZHcih0LGUsNCxhKSYmKGY9ITApLGQ+NSYmR3IodCxlLDUscykmJihmPSEwKSxkPjYmJkdyKHQsZSw2LGwpJiYoZj0hMCksZD43JiZHcih0LGUsNyx1KSYmKGY9ITApLGQ+OCYmR3IodCxlLDgsYykmJihmPSEwKSxkPjkmJkdyKHQsZSw5LGgpJiYoZj0hMCksZil7dmFyIG09ZS50ZXh0LnByZWZpeDtkPjAmJihtKz1SbyhuLHBbMF0pKSxkPjEmJihtKz1SbyhyLHBbMV0pKSxkPjImJihtKz1SbyhpLHBbMl0pKSxkPjMmJihtKz1SbyhvLHBbM10pKSxkPjQmJihtKz1SbyhhLHBbNF0pKSxkPjUmJihtKz1SbyhzLHBbNV0pKSxkPjYmJihtKz1SbyhsLHBbNl0pKSxkPjcmJihtKz1Sbyh1LHBbN10pKSxkPjgmJihtKz1SbyhjLHBbOF0pKSxkPjkmJihtKz1SbyhoLHBbOV0pKTt2YXIgeT1Ucih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUoeSxtKX1yZXR1cm4gZn0odCxlLG4scixpLG8sYSxzLGwsdSxjLGgpO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxoKXt2YXIgZj1Qcih0LGUubm9kZUluZGV4KSxwPWYuaW5zdGFuY2UsZD0hMSxtPXZvaWQgMCx5PWUuYmluZGluZ3MubGVuZ3RoO3JldHVybiB5PjAmJnFyKHQsZSwwLG4pJiYoZD0hMCxtPXZvKHQsZixlLDAsbixtKSkseT4xJiZxcih0LGUsMSxyKSYmKGQ9ITAsbT12byh0LGYsZSwxLHIsbSkpLHk+MiYmcXIodCxlLDIsaSkmJihkPSEwLG09dm8odCxmLGUsMixpLG0pKSx5PjMmJnFyKHQsZSwzLG8pJiYoZD0hMCxtPXZvKHQsZixlLDMsbyxtKSkseT40JiZxcih0LGUsNCxhKSYmKGQ9ITAsbT12byh0LGYsZSw0LGEsbSkpLHk+NSYmcXIodCxlLDUscykmJihkPSEwLG09dm8odCxmLGUsNSxzLG0pKSx5PjYmJnFyKHQsZSw2LGwpJiYoZD0hMCxtPXZvKHQsZixlLDYsbCxtKSkseT43JiZxcih0LGUsNyx1KSYmKGQ9ITAsbT12byh0LGYsZSw3LHUsbSkpLHk+OCYmcXIodCxlLDgsYykmJihkPSEwLG09dm8odCxmLGUsOCxjLG0pKSx5PjkmJnFyKHQsZSw5LGgpJiYoZD0hMCxtPXZvKHQsZixlLDksaCxtKSksbSYmcC5uZ09uQ2hhbmdlcyhtKSw2NTUzNiZlLmZsYWdzJiZrcih0LDI1NixlLm5vZGVJbmRleCkmJnAubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmcC5uZ0RvQ2hlY2soKSxkfSh0LGUsbixyLGksbyxhLHMsbCx1LGMsaCk7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1LGMsaCl7dmFyIGY9ZS5iaW5kaW5ncyxwPSExLGQ9Zi5sZW5ndGg7aWYoZD4wJiZHcih0LGUsMCxuKSYmKHA9ITApLGQ+MSYmR3IodCxlLDEscikmJihwPSEwKSxkPjImJkdyKHQsZSwyLGkpJiYocD0hMCksZD4zJiZHcih0LGUsMyxvKSYmKHA9ITApLGQ+NCYmR3IodCxlLDQsYSkmJihwPSEwKSxkPjUmJkdyKHQsZSw1LHMpJiYocD0hMCksZD42JiZHcih0LGUsNixsKSYmKHA9ITApLGQ+NyYmR3IodCxlLDcsdSkmJihwPSEwKSxkPjgmJkdyKHQsZSw4LGMpJiYocD0hMCksZD45JiZHcih0LGUsOSxoKSYmKHA9ITApLHApe3ZhciBtPU9yKHQsZS5ub2RlSW5kZXgpLHk9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjp5PW5ldyBBcnJheShmLmxlbmd0aCksZD4wJiYoeVswXT1uKSxkPjEmJih5WzFdPXIpLGQ+MiYmKHlbMl09aSksZD4zJiYoeVszXT1vKSxkPjQmJih5WzRdPWEpLGQ+NSYmKHlbNV09cyksZD42JiYoeVs2XT1sKSxkPjcmJih5WzddPXUpLGQ+OCYmKHlbOF09YyksZD45JiYoeVs5XT1oKTticmVhaztjYXNlIDY0Onk9e30sZD4wJiYoeVtmWzBdLm5hbWVdPW4pLGQ+MSYmKHlbZlsxXS5uYW1lXT1yKSxkPjImJih5W2ZbMl0ubmFtZV09aSksZD4zJiYoeVtmWzNdLm5hbWVdPW8pLGQ+NCYmKHlbZls0XS5uYW1lXT1hKSxkPjUmJih5W2ZbNV0ubmFtZV09cyksZD42JiYoeVtmWzZdLm5hbWVdPWwpLGQ+NyYmKHlbZls3XS5uYW1lXT11KSxkPjgmJih5W2ZbOF0ubmFtZV09YyksZD45JiYoeVtmWzldLm5hbWVdPWgpO2JyZWFrO2Nhc2UgMTI4OnZhciBnPW47c3dpdGNoKGQpe2Nhc2UgMTp5PWcudHJhbnNmb3JtKG4pO2JyZWFrO2Nhc2UgMjp5PWcudHJhbnNmb3JtKHIpO2JyZWFrO2Nhc2UgMzp5PWcudHJhbnNmb3JtKHIsaSk7YnJlYWs7Y2FzZSA0Onk9Zy50cmFuc2Zvcm0ocixpLG8pO2JyZWFrO2Nhc2UgNTp5PWcudHJhbnNmb3JtKHIsaSxvLGEpO2JyZWFrO2Nhc2UgNjp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyk7YnJlYWs7Y2FzZSA3Onk9Zy50cmFuc2Zvcm0ocixpLG8sYSxzLGwpO2JyZWFrO2Nhc2UgODp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyxsLHUpO2JyZWFrO2Nhc2UgOTp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyxsLHUsYyk7YnJlYWs7Y2FzZSAxMDp5PWcudHJhbnNmb3JtKHIsaSxvLGEscyxsLHUsYyxoKX19bS52YWx1ZT15fXJldHVybiBwfSh0LGUsbixyLGksbyxhLHMsbCx1LGMsaCk7ZGVmYXVsdDp0aHJvdyJ1bnJlYWNoYWJsZSJ9fSh0LGUscixpLG8sYSxzLHUsYyxoLGYscCk6ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPSExLGk9MDtpPG4ubGVuZ3RoO2krKyliaSh0LGUsaSxuW2ldKSYmKHI9ITApO3JldHVybiByfSh0LGUsbik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPWUuYmluZGluZ3MsaT0hMSxvPTA7bzxuLmxlbmd0aDtvKyspR3IodCxlLG8sbltvXSkmJihpPSEwKTtpZihpKXt2YXIgYT0iIjtmb3Iobz0wO288bi5sZW5ndGg7bysrKWErPVJvKG5bb10scltvXSk7YT1lLnRleHQucHJlZml4K2E7dmFyIHM9VHIodCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHMsYSl9cmV0dXJuIGl9KHQsZSxuKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPVByKHQsZS5ub2RlSW5kZXgpLGk9ci5pbnN0YW5jZSxvPSExLGE9dm9pZCAwLHM9MDtzPG4ubGVuZ3RoO3MrKylxcih0LGUscyxuW3NdKSYmKG89ITAsYT12byh0LHIsZSxzLG5bc10sYSkpO3JldHVybiBhJiZpLm5nT25DaGFuZ2VzKGEpLDY1NTM2JmUuZmxhZ3MmJmtyKHQsMjU2LGUubm9kZUluZGV4KSYmaS5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZpLm5nRG9DaGVjaygpLG99KHQsZSxuKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ZS5iaW5kaW5ncyxpPSExLG89MDtvPG4ubGVuZ3RoO28rKylHcih0LGUsbyxuW29dKSYmKGk9ITApO2lmKGkpe3ZhciBhPU9yKHQsZS5ub2RlSW5kZXgpLHM9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjpzPW47YnJlYWs7Y2FzZSA2NDpmb3Iocz17fSxvPTA7bzxuLmxlbmd0aDtvKyspc1tyW29dLm5hbWVdPW5bb107YnJlYWs7Y2FzZSAxMjg6dmFyIHU9blswXSxjPW4uc2xpY2UoMSk7cz11LnRyYW5zZm9ybS5hcHBseSh1LGwoYykpfWEudmFsdWU9c31yZXR1cm4gaX0odCxlLG4pO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLHIpfWZ1bmN0aW9uIFFvKHQpe3ZhciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPWUubm9kZXNbbl07aWYoNCZyLmZsYWdzKXt2YXIgaT1Bcih0LG4pLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pW29dO2Euc3RhdGV8PTMyLEtyKGEsdCl9fWVsc2UgMD09KDQmci5jaGlsZEZsYWdzKSYmKG4rPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIEtvKHQsZSxuLHIsaSxvLGEscyxsLHUsYyxoLGYpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1LGMsaCl7dmFyIGY9ZS5iaW5kaW5ncy5sZW5ndGg7Zj4wJiZXcih0LGUsMCxuKSxmPjEmJldyKHQsZSwxLHIpLGY+MiYmV3IodCxlLDIsaSksZj4zJiZXcih0LGUsMyxvKSxmPjQmJldyKHQsZSw0LGEpLGY+NSYmV3IodCxlLDUscyksZj42JiZXcih0LGUsNixsKSxmPjcmJldyKHQsZSw3LHUpLGY+OCYmV3IodCxlLDgsYyksZj45JiZXcih0LGUsOSxoKX0odCxlLHIsaSxvLGEscyxsLHUsYyxoLGYpOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKylXcih0LGUscixuW3JdKX0odCxlLHIpLCExfWZ1bmN0aW9uIFpvKHQsZSl7aWYoSXIodCxlLm5vZGVJbmRleCkuZGlydHkpdGhyb3cgTnIoTXIuY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBub3QgZGlydHkiLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBkaXJ0eSIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIFlvKHQpe2lmKCEoMTI4JnQuc3RhdGUpKXtpZihKbyh0LFhvLkRlc3Ryb3kpLCRvKHQsWG8uRGVzdHJveSksX28odCwxMzEwNzIpLHQuZGlzcG9zYWJsZXMpZm9yKHZhciBlPTA7ZTx0LmRpc3Bvc2FibGVzLmxlbmd0aDtlKyspdC5kaXNwb3NhYmxlc1tlXSgpOyFmdW5jdGlvbih0KXtpZigxNiZ0LnN0YXRlKXt2YXIgZT1Zcih0KTtpZihlKXt2YXIgbj1lLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztuJiYoTWkobixuLmluZGV4T2YodCkpLE1yLmRpcnR5UGFyZW50UXVlcmllcyh0KSl9fX0odCksdC5yZW5kZXJlci5kZXN0cm95Tm9kZSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07MSZyLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoQXIodCxuKS5yZW5kZXJFbGVtZW50KToyJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShUcih0LG4pLnJlbmRlclRleHQpOig2NzEwODg2NCZyLmZsYWdzfHwxMzQyMTc3Mjgmci5mbGFncykmJklyKHQsbikuZGVzdHJveSgpfX0odCksSnIodCkmJnQucmVuZGVyZXIuZGVzdHJveSgpLHQuc3RhdGV8PTEyOH19dmFyIFhvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kiLHR9KHt9KTtmdW5jdGlvbiAkbyh0LGUpe3ZhciBuPXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT1uLm5vZGVzW3JdOzMzNTU0NDMyJmkuZmxhZ3M/dGEoQXIodCxyKS5jb21wb25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZpLmNoaWxkRmxhZ3MpJiYocis9aS5jaGlsZENvdW50KX19ZnVuY3Rpb24gSm8odCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylmb3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIGk9bi5ub2Rlc1tyXTtpZigxNjc3NzIxNiZpLmZsYWdzKWZvcih2YXIgbz1Bcih0LHIpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYT0wO2E8by5sZW5ndGg7YSsrKXRhKG9bYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmaS5jaGlsZEZsYWdzKSYmKHIrPWkuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIHRhKHQsZSl7dmFyIG49dC5zdGF0ZTtzd2l0Y2goZSl7Y2FzZSBYby5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9xbyh0KTo2NCZuJiZlYSh0LFhvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIFhvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/cW8odCk6NjQmbiYmZWEodCxlKSk7YnJlYWs7Y2FzZSBYby5DaGVja0FuZFVwZGF0ZTowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9Hbyh0KTo2NCZuJiZlYSh0LFhvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIFhvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/R28odCk6NjQmbiYmZWEodCxlKSk7YnJlYWs7Y2FzZSBYby5EZXN0cm95OllvKHQpO2JyZWFrO2Nhc2UgWG8uQ3JlYXRlVmlld05vZGVzOkhvKHQpfX1mdW5jdGlvbiBlYSh0LGUpe0pvKHQsZSksJG8odCxlKX1mdW5jdGlvbiBuYSh0LGUsbixyKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciBpPXQuZGVmLm5vZGVzLmxlbmd0aCxvPTA7bzxpO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb107aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dpdGNoKE1yLnNldEN1cnJlbnROb2RlKHQsYS5ub2RlSW5kZXgpLHIpe2Nhc2UgMDpFbyh0LGEpO2JyZWFrO2Nhc2UgMTpabyh0LGEpfWEuY2hpbGRGbGFncyZlJiZhLmNoaWxkRmxhZ3Mmbnx8KG8rPWEuY2hpbGRDb3VudCl9fXZhciByYT0hMTtmdW5jdGlvbiBpYSh0LGUsbixyLGksbyl7cmV0dXJuIFZvKGFhKHQsaSxpLmluamVjdG9yLmdldChobiksZSxuKSxyLG8pfWZ1bmN0aW9uIG9hKHQsZSxuLHIsaSxvKXt2YXIgYT1pLmluamVjdG9yLmdldChobikscz1hYSh0LGksbmV3IEJhKGEpLGUsbiksbD15YShyKTtyZXR1cm4gRmEoU2EuY3JlYXRlLFZvLG51bGwsW3MsbCxvXSl9ZnVuY3Rpb24gYWEodCxlLG4scixpKXt2YXIgbz1lLmluamVjdG9yLmdldChFciksYT1lLmluamVjdG9yLmdldChjZSk7cmV0dXJue25nTW9kdWxlOmUsaW5qZWN0b3I6dCxwcm9qZWN0YWJsZU5vZGVzOnIsc2VsZWN0b3JPck5vZGU6aSxzYW5pdGl6ZXI6byxyZW5kZXJlckZhY3Rvcnk6bixyZW5kZXJlcjpuLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCksZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIHNhKHQsZSxuLHIpe3ZhciBpPXlhKG4pO3JldHVybiBGYShTYS5jcmVhdGUsRm8sbnVsbCxbdCxlLGkscl0pfWZ1bmN0aW9uIGxhKHQsZSxuLHIpe3JldHVybiBuPWZhLmdldChlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIucHJvdmlkZXIudG9rZW4pfHx5YShuKSxGYShTYS5jcmVhdGUsQm8sbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIHVhKHQsZSxuLHIpe3JldHVybiBLaSh0LGUsbixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT0hMSxuPSExO3JldHVybiAwPT09Y2Euc2l6ZT97aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufToodC5wcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1jYS5nZXQodC50b2tlbik7Mzg0MCZ0LmZsYWdzJiZyJiYoZT0hMCxuPW58fHIuZGVwcmVjYXRlZEJlaGF2aW9yKX0pLHQubW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2hhLmZvckVhY2goZnVuY3Rpb24ocixpKXtpLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluPT09dCYmKGU9ITAsbj1ufHxyLmRlcHJlY2F0ZWRCZWhhdmlvcil9KX0pLHtoYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59KX0odCksbj1lLmhhc0RlcHJlY2F0ZWRPdmVycmlkZXM7cmV0dXJuIGUuaGFzT3ZlcnJpZGVzPyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQucHJvdmlkZXJzLmxlbmd0aDtlKyspe3ZhciByPXQucHJvdmlkZXJzW2VdO24mJihyLmZsYWdzfD00MDk2KTt2YXIgaT1jYS5nZXQoci50b2tlbik7aSYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xpLmZsYWdzLHIuZGVwcz1yaShpLmRlcHMpLHIudmFsdWU9aS52YWx1ZSl9aWYoaGEuc2l6ZT4wKXt2YXIgbz1uZXcgU2V0KHQubW9kdWxlcyk7aGEuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG8uaGFzKHIubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4pKXt2YXIgaT17dG9rZW46cixmbGFnczplLmZsYWdzfChuPzQwOTY6MCksZGVwczpyaShlLmRlcHMpLHZhbHVlOmUudmFsdWUsaW5kZXg6dC5wcm92aWRlcnMubGVuZ3RofTt0LnByb3ZpZGVycy5wdXNoKGkpLHQucHJvdmlkZXJzQnlLZXlbRnIocildPWl9fSl9fSh0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBMcn0pKSx0KTp0fShyKSl9dmFyIGNhPW5ldyBNYXAsaGE9bmV3IE1hcCxmYT1uZXcgTWFwO2Z1bmN0aW9uIHBhKHQpe2NhLnNldCh0LnRva2VuLHQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuJiZ0LnRva2VuLm5nSW5qZWN0YWJsZURlZiYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9rZW4ubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4mJmhhLnNldCh0LnRva2VuLHQpfWZ1bmN0aW9uIGRhKHQsZSl7dmFyIG49YWkoYWkoZS52aWV3RGVmRmFjdG9yeSkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRWaWV3KTtmYS5zZXQodCxuKX1mdW5jdGlvbiBtYSgpe2NhLmNsZWFyKCksaGEuY2xlYXIoKSxmYS5jbGVhcigpfWZ1bmN0aW9uIHlhKHQpe2lmKDA9PT1jYS5zaXplKXJldHVybiB0O3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPW51bGwscj0wO3I8dC5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT10Lm5vZGVzW3JdOzEmaS5mbGFncyYmKG49aSksbiYmMzg0MCZpLmZsYWdzJiZjYS5oYXMoaS5wcm92aWRlci50b2tlbikmJihlLnB1c2gobi5ub2RlSW5kZXgpLG49bnVsbCl9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBMcn0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIodCxlW25dKTtyZXR1cm4gdDtmdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuPWUrMTtuPHQubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5ub2Rlc1tuXTtpZigxJnIuZmxhZ3MpcmV0dXJuO2lmKDM4NDAmci5mbGFncyl7dmFyIGk9ci5wcm92aWRlcixvPWNhLmdldChpLnRva2VuKTtvJiYoci5mbGFncz0tMzg0MSZyLmZsYWdzfG8uZmxhZ3MsaS5kZXBzPXJpKG8uZGVwcyksaS52YWx1ZT1vLnZhbHVlKX19fX1mdW5jdGlvbiBnYSh0LGUsbixyLGksbyxhLHMsbCx1LGMsaCxmKXt2YXIgcD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gV28odCxwLG4scixpLG8sYSxzLGwsdSxjLGgsZiksMjI0JnAuZmxhZ3M/T3IodCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rpb24gdmEodCxlLG4scixpLG8sYSxzLGwsdSxjLGgsZil7dmFyIHA9dC5kZWYubm9kZXNbZV07cmV0dXJuIEtvKHQscCxuLHIsaSxvLGEscyxsLHUsYyxoLGYpLDIyNCZwLmZsYWdzP09yKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIF9hKHQpe3JldHVybiBGYShTYS5kZXRlY3RDaGFuZ2VzLEdvLG51bGwsW3RdKX1mdW5jdGlvbiBiYSh0KXtyZXR1cm4gRmEoU2EuY2hlY2tOb0NoYW5nZXMscW8sbnVsbCxbdF0pfWZ1bmN0aW9uIHdhKHQpe3JldHVybiBGYShTYS5kZXN0cm95LFlvLG51bGwsW3RdKX12YXIgeGEsQ2EsRWEsU2E9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5jcmVhdGU9MF09ImNyZWF0ZSIsdFt0LmRldGVjdENoYW5nZXM9MV09ImRldGVjdENoYW5nZXMiLHRbdC5jaGVja05vQ2hhbmdlcz0yXT0iY2hlY2tOb0NoYW5nZXMiLHRbdC5kZXN0cm95PTNdPSJkZXN0cm95Iix0W3QuaGFuZGxlRXZlbnQ9NF09ImhhbmRsZUV2ZW50Iix0fSh7fSk7ZnVuY3Rpb24ga2EodCxlKXtDYT10LEVhPWV9ZnVuY3Rpb24gVGEodCxlLG4scil7cmV0dXJuIGthKHQsZSksRmEoU2EuaGFuZGxlRXZlbnQsdC5kZWYuaGFuZGxlRXZlbnQsbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIEFhKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRHIoU2FbeGFdKTtyZXR1cm4ga2EodCxSYSh0LDApKSx0LmRlZi51cGRhdGVEaXJlY3RpdmVzKGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9W10sbz0zO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTNdPWFyZ3VtZW50c1tvXTt2YXIgYT10LmRlZi5ub2Rlc1tuXTtyZXR1cm4gMD09PWU/T2EodCxhLHIsaSk6SWEodCxhLHIsaSksMTYzODQmYS5mbGFncyYma2EodCxSYSh0LG4pKSwyMjQmYS5mbGFncz9Pcih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIFBhKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRHIoU2FbeGFdKTtyZXR1cm4ga2EodCxEYSh0LDApKSx0LmRlZi51cGRhdGVSZW5kZXJlcihmdW5jdGlvbih0LG4scil7Zm9yKHZhciBpPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWlbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP09hKHQsYSxyLGkpOklhKHQsYSxyLGkpLDMmYS5mbGFncyYma2EodCxEYSh0LG4pKSwyMjQmYS5mbGFncz9Pcih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIE9hKHQsZSxuLHIpe2lmKFdvLmFwcGx5KHZvaWQgMCxsKFt0LGUsbl0scikpKXt2YXIgaT0xPT09bj9yWzBdOnI7aWYoMTYzODQmZS5mbGFncyl7Zm9yKHZhciBvPXt9LGE9MDthPGUuYmluZGluZ3MubGVuZ3RoO2ErKyl7dmFyIHM9ZS5iaW5kaW5nc1thXSx1PWlbYV07OCZzLmZsYWdzJiYob1socD1zLm5vbk1pbmlmaWVkTmFtZSwibmctcmVmbGVjdC0iKyhwPXAucmVwbGFjZSgvWyRAXS9nLCJfIikucmVwbGFjZShNYSxmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4iLSIrdFsxXS50b0xvd2VyQ2FzZSgpfSkpKV09TmEodSkpfXZhciBjPWUucGFyZW50LGg9QXIodCxjLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtpZihjLmVsZW1lbnQubmFtZSlmb3IodmFyIGYgaW4gbyludWxsIT0odT1vW2ZdKT90LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLGYsdSk6dC5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoaCxmKTtlbHNlIHQucmVuZGVyZXIuc2V0VmFsdWUoaCwiYmluZGluZ3M9IitKU09OLnN0cmluZ2lmeShvLG51bGwsMikpfX12YXIgcH1mdW5jdGlvbiBJYSh0LGUsbixyKXtLby5hcHBseSh2b2lkIDAsbChbdCxlLG5dLHIpKX12YXIgTWE9LyhbQS1aXSkvZztmdW5jdGlvbiBOYSh0KXt0cnl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpLnNsaWNlKDAsMzApOnR9Y2F0Y2godCl7cmV0dXJuIltFUlJPUl0gRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBzZXJpYWxpemUgdGhlIHZhbHVlIn19ZnVuY3Rpb24gUmEodCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dO2lmKDE2Mzg0JnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIERhKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTtpZigzJnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfXZhciBMYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLm5vZGVJbmRleD1lLG51bGw9PWUmJih0aGlzLm5vZGVJbmRleD1lPTApLHRoaXMubm9kZURlZj10LmRlZi5ub2Rlc1tlXTtmb3IodmFyIG49dGhpcy5ub2RlRGVmLHI9dDtuJiYwPT0oMSZuLmZsYWdzKTspbj1uLnBhcmVudDtpZighbilmb3IoOyFuJiZyOyluPVhyKHIpLHI9ci5wYXJlbnQ7dGhpcy5lbERlZj1uLHRoaXMuZWxWaWV3PXJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxPckNvbXBWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFyKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYubm9kZUluZGV4KS5jb21wb25lbnRWaWV3fHx0aGlzLnZpZXd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuZWxEZWYpZm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJnQucHVzaChuLnByb3ZpZGVyLnRva2VuKSxlKz1uLmNoaWxkQ291bnR9cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5lbERlZil7amEodGhpcy5lbFZpZXcsdGhpcy5lbERlZix0KTtmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmamEodGhpcy5lbFZpZXcsbix0KSxlKz1uLmNoaWxkQ291bnR9fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50UmVuZGVyRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe2Zvcig7dCYmIUpyKHQpOyl0PXQucGFyZW50O3JldHVybiB0LnBhcmVudD9Bcih0LnBhcmVudCxYcih0KS5ub2RlSW5kZXgpOm51bGx9KHRoaXMuZWxPckNvbXBWaWV3KTtyZXR1cm4gdD90LnJlbmRlckVsZW1lbnQ6dm9pZCAwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVuZGVyTm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiAyJnRoaXMubm9kZURlZi5mbGFncz8kcih0aGlzLnZpZXcsdGhpcy5ub2RlRGVmKTokcih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07MiZ0aGlzLm5vZGVEZWYuZmxhZ3M/KGU9dGhpcy52aWV3LmRlZixuPXRoaXMubm9kZURlZi5ub2RlSW5kZXgpOihlPXRoaXMuZWxWaWV3LmRlZixuPXRoaXMuZWxEZWYubm9kZUluZGV4KTt2YXIgbz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPTA7cjw9ZTtyKyspMyZ0Lm5vZGVzW3JdLmZsYWdzJiZuKys7cmV0dXJuIG59KGUsbiksYT0tMTtlLmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4rK2E9PT1vPyhlPXQuZXJyb3IpLmJpbmQuYXBwbHkoZSxsKFt0XSxyKSk6THI7dmFyIGV9KSxhPG8mJih0LmVycm9yKCJJbGxlZ2FsIHN0YXRlOiB0aGUgVmlld0RlZmluaXRpb25GYWN0b3J5IGRpZCBub3QgY2FsbCB0aGUgbG9nZ2VyISIpLHQuZXJyb3IuYXBwbHkodCxsKHIpKSl9LHR9KCk7ZnVuY3Rpb24gamEodCxlLG4pe2Zvcih2YXIgciBpbiBlLnJlZmVyZW5jZXMpbltyXT1rbyh0LGUsZS5yZWZlcmVuY2VzW3JdKX1mdW5jdGlvbiBGYSh0LGUsbixyKXt2YXIgaT14YSxvPUNhLGE9RWE7dHJ5e3hhPXQ7dmFyIHM9ZS5hcHBseShuLHIpO3JldHVybiBDYT1vLEVhPWEseGE9aSxzfWNhdGNoKHQpe2lmKHNlKHQpfHwhQ2EpdGhyb3cgdDt0aHJvdyBmdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3J8fCh0PW5ldyBFcnJvcih0LnRvU3RyaW5nKCkpKSxScih0LGUpLHR9KHQsVmEoKSl9fWZ1bmN0aW9uIFZhKCl7cmV0dXJuIENhP25ldyBMYShDYSxFYSk6bnVsbH12YXIgQmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHphKHRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIodCxlKSl9LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZT90aGlzLmRlbGVnYXRlLndoZW5SZW5kZXJpbmdEb25lKCk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfSx0fSgpLHphPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXQsdGhpcy5kYXRhPXRoaXMuZGVsZWdhdGUuZGF0YX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveU5vZGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe2tuLmRlbGV0ZSh0Lm5hdGl2ZU5vZGUpfShUbih0KSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSYmdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSkscj1WYSgpO2lmKHIpe3ZhciBpPW5ldyBTbihuLG51bGwscik7aS5uYW1lPXQsQW4oaSl9cmV0dXJuIG59LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpLG49VmEoKTtyZXR1cm4gbiYmQW4obmV3IEVuKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCksbj1WYSgpO3JldHVybiBuJiZBbihuZXcgRW4oZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPVRuKHQpLHI9VG4oZSk7biYmciYmbiBpbnN0YW5jZW9mIFNuJiZuLmFkZENoaWxkKHIpLHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1Ubih0KSxpPVRuKGUpLG89VG4obik7ciYmaSYmciBpbnN0YW5jZW9mIFNuJiZyLmluc2VydEJlZm9yZShvLGkpLHRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1Ubih0KSxyPVRuKGUpO24mJnImJm4gaW5zdGFuY2VvZiBTbiYmbi5yZW1vdmVDaGlsZChyKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHQsZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCksbj1WYSgpO3JldHVybiBuJiZBbihuZXcgU24oZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9VG4odCk7aSYmaSBpbnN0YW5jZW9mIFNuJiYoaS5hdHRyaWJ1dGVzW3I/cisiOiIrZTplXT1uKSx0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1Ubih0KTtyJiZyIGluc3RhbmNlb2YgU24mJihyLmF0dHJpYnV0ZXNbbj9uKyI6IitlOmVdPW51bGwpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1Ubih0KTtuJiZuIGluc3RhbmNlb2YgU24mJihuLmNsYXNzZXNbZV09ITApLHRoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1Ubih0KTtuJiZuIGluc3RhbmNlb2YgU24mJihuLmNsYXNzZXNbZV09ITEpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9VG4odCk7aSYmaSBpbnN0YW5jZW9mIFNuJiYoaS5zdHlsZXNbZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVRuKHQpO3ImJnIgaW5zdGFuY2VvZiBTbiYmKHIuc3R5bGVzW2VdPW51bGwpLHRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dmFyIHI9VG4odCk7ciYmciBpbnN0YW5jZW9mIFNuJiYoci5wcm9wZXJ0aWVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIHI9VG4odCk7ciYmci5saXN0ZW5lcnMucHVzaChuZXcgZnVuY3Rpb24odCxlKXt0aGlzLm5hbWU9dCx0aGlzLmNhbGxiYWNrPWV9KGUsbikpfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdH0oKSxVYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkubW9kdWxlVHlwZT1lLGkuX2Jvb3RzdHJhcENvbXBvbmVudHM9bixpLl9uZ01vZHVsZURlZkZhY3Rvcnk9cixpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbigpe2lmKCFyYSl7cmE9ITA7dmFyIHQ9bm4oKT97c2V0Q3VycmVudE5vZGU6a2EsY3JlYXRlUm9vdFZpZXc6b2EsY3JlYXRlRW1iZWRkZWRWaWV3OnNhLGNyZWF0ZUNvbXBvbmVudFZpZXc6bGEsY3JlYXRlTmdNb2R1bGVSZWY6dWEsb3ZlcnJpZGVQcm92aWRlcjpwYSxvdmVycmlkZUNvbXBvbmVudFZpZXc6ZGEsY2xlYXJPdmVycmlkZXM6bWEsY2hlY2tBbmRVcGRhdGVWaWV3Ol9hLGNoZWNrTm9DaGFuZ2VzVmlldzpiYSxkZXN0cm95Vmlldzp3YSxjcmVhdGVEZWJ1Z0NvbnRleHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IExhKHQsZSl9LGhhbmRsZUV2ZW50OlRhLHVwZGF0ZURpcmVjdGl2ZXM6QWEsdXBkYXRlUmVuZGVyZXI6UGF9OntzZXRDdXJyZW50Tm9kZTpmdW5jdGlvbigpe30sY3JlYXRlUm9vdFZpZXc6aWEsY3JlYXRlRW1iZWRkZWRWaWV3OkZvLGNyZWF0ZUNvbXBvbmVudFZpZXc6Qm8sY3JlYXRlTmdNb2R1bGVSZWY6S2ksb3ZlcnJpZGVQcm92aWRlcjpMcixvdmVycmlkZUNvbXBvbmVudFZpZXc6THIsY2xlYXJPdmVycmlkZXM6THIsY2hlY2tBbmRVcGRhdGVWaWV3OkdvLGNoZWNrTm9DaGFuZ2VzVmlldzpxbyxkZXN0cm95VmlldzpZbyxjcmVhdGVEZWJ1Z0NvbnRleHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IExhKHQsZSl9LGhhbmRsZUV2ZW50OmZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0LmRlZi5oYW5kbGVFdmVudCh0LGUsbixyKX0sdXBkYXRlRGlyZWN0aXZlczpmdW5jdGlvbih0LGUpe3JldHVybiB0LmRlZi51cGRhdGVEaXJlY3RpdmVzKDA9PT1lP2dhOnZhLHQpfSx1cGRhdGVSZW5kZXJlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmRlZi51cGRhdGVSZW5kZXJlcigwPT09ZT9nYTp2YSx0KX19O01yLnNldEN1cnJlbnROb2RlPXQuc2V0Q3VycmVudE5vZGUsTXIuY3JlYXRlUm9vdFZpZXc9dC5jcmVhdGVSb290VmlldyxNci5jcmVhdGVFbWJlZGRlZFZpZXc9dC5jcmVhdGVFbWJlZGRlZFZpZXcsTXIuY3JlYXRlQ29tcG9uZW50Vmlldz10LmNyZWF0ZUNvbXBvbmVudFZpZXcsTXIuY3JlYXRlTmdNb2R1bGVSZWY9dC5jcmVhdGVOZ01vZHVsZVJlZixNci5vdmVycmlkZVByb3ZpZGVyPXQub3ZlcnJpZGVQcm92aWRlcixNci5vdmVycmlkZUNvbXBvbmVudFZpZXc9dC5vdmVycmlkZUNvbXBvbmVudFZpZXcsTXIuY2xlYXJPdmVycmlkZXM9dC5jbGVhck92ZXJyaWRlcyxNci5jaGVja0FuZFVwZGF0ZVZpZXc9dC5jaGVja0FuZFVwZGF0ZVZpZXcsTXIuY2hlY2tOb0NoYW5nZXNWaWV3PXQuY2hlY2tOb0NoYW5nZXNWaWV3LE1yLmRlc3Ryb3lWaWV3PXQuZGVzdHJveVZpZXcsTXIucmVzb2x2ZURlcD15byxNci5jcmVhdGVEZWJ1Z0NvbnRleHQ9dC5jcmVhdGVEZWJ1Z0NvbnRleHQsTXIuaGFuZGxlRXZlbnQ9dC5oYW5kbGVFdmVudCxNci51cGRhdGVEaXJlY3RpdmVzPXQudXBkYXRlRGlyZWN0aXZlcyxNci51cGRhdGVSZW5kZXJlcj10LnVwZGF0ZVJlbmRlcmVyLE1yLmRpcnR5UGFyZW50UXVlcmllcz1Db319KCk7dmFyIGU9YWkodGhpcy5fbmdNb2R1bGVEZWZGYWN0b3J5KTtyZXR1cm4gTXIuY3JlYXRlTmdNb2R1bGVSZWYodGhpcy5tb2R1bGVUeXBlLHR8fFZ0Lk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0oTGUpO2Z1bmN0aW9uIEhhKHQsZSxuKXt0IT1lJiZXYShuKX1mdW5jdGlvbiBxYSh0LGUpe251bGwhPXQmJldhKGUpfWZ1bmN0aW9uIEdhKHQsZSl7bnVsbD09dCYmV2EoZSl9ZnVuY3Rpb24gV2EodCl7dGhyb3cgbmV3IEVycm9yKCJBU1NFUlRJT04gRVJST1I6ICIrdCl9ZnVuY3Rpb24gUWEodCxlLG4scil7dmFyIGk9cj9lOm47aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTIpZVtuKzFdLmNhbGwodFtlW25dXSl9KHQsaSl9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGUmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5uZ0Rldk1vZGU9ITApLCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKHNlbGYubmdEZXZNb2RlPSEwKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmKGdsb2JhbC5uZ0Rldk1vZGU9ITApKTt2YXIgS2EsWmEsWWEsWGEsJGEsSmEsdHMsZXMsbnMscnMsaXM9Il9fbmdIb3N0TE5vZGVfXyIsb3M9UHJvbWlzZS5yZXNvbHZlKG51bGwpLGFzPVswLDBdLHNzPW51bGwsbHM9ITE7ZnVuY3Rpb24gdXModCxlKXt2YXIgbj1zcztyZXR1cm4gZXM9dCYmdC5kYXRhLG5zPXQmJnQuZGlyZWN0aXZlcywkYT10JiZ0LnRWaWV3LmRhdGEsdHM9dCYmMT09KDEmdC5mbGFncyksS2E9dCYmdC5yZW5kZXJlcix0JiZ0LmJpbmRpbmdJbmRleDwwJiYodC5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nU3RhcnRJbmRleCksbnVsbCE9ZSYmKFlhPWUsWGE9ITApLHNzPXQsSmE9dCYmdC5xdWVyaWVzLG59ZnVuY3Rpb24gY3ModCl7bHN8fFFhKG5zLHNzLnRWaWV3LnZpZXdIb29rcyxzcy50Vmlldy52aWV3Q2hlY2tIb29rcyx0cyksc3MuZmxhZ3MmPS02LHNzLmxpZmVjeWNsZVN0YWdlPTEsc3MuYmluZGluZ0luZGV4PS0xLHVzKHQsbnVsbCl9ZnVuY3Rpb24gaHMoKXtwcygpO3ZhciB0PXNzLnRWaWV3O3QuZmlyc3RUZW1wbGF0ZVBhc3M9ITEsZnModC5ob3N0QmluZGluZ3MpLGZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpZm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXlzKHRbZV0sdFtlKzFdKX0odC5jb21wb25lbnRzKX1mdW5jdGlvbiBmcyh0KXtpZihudWxsIT10KWZvcih2YXIgZT1zcy50Vmlldy5kaXJlY3RpdmVzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl0saT1lW3JdO2kuaG9zdEJpbmRpbmdzJiZpLmhvc3RCaW5kaW5ncyhyLHRbbisxXSl9fWZ1bmN0aW9uIHBzKCl7aWYoIWxzKXt2YXIgdD1zcy50VmlldzsoZnVuY3Rpb24odCxlLG4pezE9PT10LmxpZmVjeWNsZVN0YWdlJiYoUWEodC5kaXJlY3RpdmVzLGUuaW5pdEhvb2tzLGUuY2hlY2tIb29rcyxuKSx0LmxpZmVjeWNsZVN0YWdlPTIpfSkoc3MsdCx0cyksUWEobnMsdC5jb250ZW50SG9va3MsdC5jb250ZW50Q2hlY2tIb29rcyx0cyl9fWZ1bmN0aW9uIGRzKHQsZSxuLHIsaSxvKXt2YXIgYSxzLGwsdSxjLGgsZixwLGQsbT1YYSx5PVlhO3RyeXtYYT0hMCxZYT1udWxsO3ZhciBnPTI7bnVsbD09dCYmKHM9bnVsbCxsPTIsdT1udWxsLGM9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybntwYXJlbnQ6c3MsaWQ6LTEsZmxhZ3M6MTEsbm9kZTpudWxsLGRhdGE6W10sZGlyZWN0aXZlczpudWxsLHRWaWV3Om4sY2xlYW51cDpudWxsLHJlbmRlcmVyOmUsY2hpbGQ6bnVsbCx0YWlsOm51bGwsbmV4dDpudWxsLGJpbmRpbmdTdGFydEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSx0ZW1wbGF0ZTpyLGNvbnRleHQ6aSxkeW5hbWljVmlld0NvdW50OjAsbGlmZWN5Y2xlU3RhZ2U6MSxxdWVyaWVzOm51bGwsaW5qZWN0b3I6c3MmJnNzLmluamVjdG9yfX0oMCxyLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5uZ1ByaXZhdGVEYXRhfHwodC5uZ1ByaXZhdGVEYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6W10sZGlyZWN0aXZlczpudWxsLGZpcnN0VGVtcGxhdGVQYXNzOiEwLGluaXRIb29rczpudWxsLGNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwscGlwZURlc3Ryb3lIb29rczpudWxsLGhvc3RCaW5kaW5nczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCxwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUsY3VycmVudE1hdGNoZXM6bnVsbH19KGUsbikpfShlLGl8fG51bGwsb3x8bnVsbCksZSxuKSxoPVhhP1lhOllhJiZZYS5wYXJlbnQsZj0oWGE/SmE6WWEmJllhLnF1ZXJpZXMpfHxoJiZoLnF1ZXJpZXMmJmgucXVlcmllcy5jaGlsZCgpLGQ9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybnt0eXBlOnQsbmF0aXZlOnIsdmlldzplLHBhcmVudDpuLGNoaWxkOm51bGwsbmV4dDpudWxsLG5vZGVJbmplY3RvcjpuP24ubm9kZUluamVjdG9yOm51bGwsZGF0YTppLHF1ZXJpZXM6byx0Tm9kZTpudWxsLHBOZXh0T3JQYXJlbnQ6bnVsbCxkeW5hbWljTENvbnRhaW5lck5vZGU6bnVsbH19KGwsc3MsaCx1LChwPW51bGwhPWMpP2M6bnVsbCxmKSwyPT0oMiZsKSYmcCYmKG5nRGV2TW9kZSYmcWEoYy5ub2RlLCJMVmlldy5ub2RlIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksYy5ub2RlPWQpLG51bGwhPXMmJihuZ0Rldk1vZGUmJmZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9ZXMpLEhhKGUubGVuZ3RoLHQsImluZGV4ICIrdCsiIGV4cGVjdGVkIHRvIGJlIGF0IHRoZSBlbmQgb2YgYXJyIChsZW5ndGggIitlLmxlbmd0aCsiKSIpfShzKSxlc1tzXT1kLHM+PSRhLmxlbmd0aD8kYVtzXT1udWxsOmQudE5vZGU9JGFbc10sWGE/KEphPW51bGwsWWEudmlldyE9PXNzJiYyIT09WWEudHlwZXx8KG5nRGV2TW9kZSYmcWEoWWEuY2hpbGQsInByZXZpb3VzT3JQYXJlbnROb2RlJ3MgY2hpbGQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0LiIpLFlhLmNoaWxkPWQpKTpZYSYmKG5nRGV2TW9kZSYmcWEoWWEubmV4dCwicHJldmlvdXNPclBhcmVudE5vZGUncyBuZXh0IHByb3BlcnR5IHNob3VsZCBub3QgaGF2ZSBiZWVuIHNldCAiK3MrIi4iKSxZYS5uZXh0PWQsWWEuZHluYW1pY0xDb250YWluZXJOb2RlJiYoWWEuZHluYW1pY0xDb250YWluZXJOb2RlLm5leHQ9ZCkpKSxZYT1kLFhhPSEwLHQ9ZCxnPTEpLGE9dXModC5kYXRhLHQpLGUoZyxuKSxocygpLG1zKCl9ZmluYWxseXtjcyhhKSxYYT1tLFlhPXl9cmV0dXJuIHR9ZnVuY3Rpb24gbXMoKXtmb3IodmFyIHQ9c3MuY2hpbGQ7bnVsbCE9PXQ7dD10Lm5leHQpaWYoMCE9PXQuZHluYW1pY1ZpZXdDb3VudCYmdC52aWV3cylmb3IodmFyIGU9dCxuPTA7bjxlLnZpZXdzLmxlbmd0aDtuKyspe3ZhciByPWUudmlld3Nbbl07ZHMocixyLmRhdGEudGVtcGxhdGUsci5kYXRhLmNvbnRleHQsS2EpfX1mdW5jdGlvbiB5cyh0LGUpe25nRGV2TW9kZSYmX3MoZSk7dmFyIG4scixpPWVzW2VdO25nRGV2TW9kZSYmKHI9MyxHYShuPWksInNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIG5vZGUiKSxIYShuLnR5cGUsciwic2hvdWxkIGJlIGEgIitmdW5jdGlvbih0KXtyZXR1cm4gMT09dD8iUHJvamVjdGlvbiI6MD09dD8iQ29udGFpbmVyIjoyPT10PyJWaWV3IjozPT10PyJFbGVtZW50IjoiPHVua25vd24+In0ocikpKSxuZ0Rldk1vZGUmJkdhKGkuZGF0YSwiQ29tcG9uZW50J3MgaG9zdCBub2RlIHNob3VsZCBoYXZlIGFuIExWaWV3IGF0dGFjaGVkLiIpO3ZhciBvLGE9aS5kYXRhOzg9PSg4JmEuZmxhZ3MpJiY2JmEuZmxhZ3MmJihuZ0Rldk1vZGUmJl9zKHQsbnMpLHZzKGEsaSxzcy50Vmlldy5kaXJlY3RpdmVzW3RdLChvPW5zW3RdLEFycmF5LmlzQXJyYXkobyk/b1swXTpvKSkpfWZ1bmN0aW9uIGdzKHQpe3ZhciBlPWJzKHQpO25nRGV2TW9kZSYmR2EoZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLHZzKGUuZGF0YSxlLGUudmlldy50Vmlldy5kaXJlY3RpdmVzW2UudE5vZGUuZmxhZ3M+PjEzXSx0KX1mdW5jdGlvbiB2cyh0LGUsbixyKXt2YXIgaT11cyh0LGUpLG89bi50ZW1wbGF0ZTt0cnl7bygxJnQuZmxhZ3M/MzoyLHIpLGhzKCksbXMoKX1maW5hbGx5e2NzKGkpfX1mdW5jdGlvbiBfcyh0LGUpe251bGw9PWUmJihlPWVzKSx0Pj0oZT9lLmxlbmd0aDowKSYmV2EoImluZGV4IGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgZGF0YSBpbmRleCIpfWZ1bmN0aW9uIGJzKHQpe25nRGV2TW9kZSYmR2EodCwiZXhwZWN0aW5nIGNvbXBvbmVudCBnb3QgbnVsbCIpO3ZhciBlPXRbaXNdO3JldHVybiBuZ0Rldk1vZGUmJkdhKHQsIm9iamVjdCBpcyBub3QgYSBjb21wb25lbnQiKSxlfWkoZnVuY3Rpb24odCxlLG4pe3ZhciByPXJzLmNhbGwodGhpcyx0LmRhdGEsbil8fHRoaXM7cmV0dXJuIHIuX2xWaWV3Tm9kZT10LHJ9LHJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXc9dCx0aGlzLmNvbnRleHQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldENvbXBvbmVudENvbnRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92aWV3PXQsdGhpcy5jb250ZXh0PWV9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9dDtudWxsIT1lLnBhcmVudDspZS5mbGFnc3w9NCxlPWUucGFyZW50O3ZhciBuLHI7ZS5mbGFnc3w9NCxuZ0Rldk1vZGUmJkdhKGUuY29udGV4dCwicm9vdENvbnRleHQiKSwobj1lLmNvbnRleHQpLmNsZWFuPT1vcyYmKG4uY2xlYW49bmV3IFByb21pc2UoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0pLG4uc2NoZWR1bGVyKGZ1bmN0aW9uKCl7dmFyIHQsZTtlPWJzKCh0PWZ1bmN0aW9uKHQpe25nRGV2TW9kZSYmR2EodCwiY29tcG9uZW50Iik7Zm9yKHZhciBlPWJzKHQpLnZpZXc7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9KG4uY29tcG9uZW50KSkuY29udGV4dC5jb21wb25lbnQpLG5nRGV2TW9kZSYmR2EoZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLGZ1bmN0aW9uKG4scixpLG8pe3ZhciBhPXVzKHQsZSk7dHJ5e1phLmJlZ2luJiZaYS5iZWdpbigpLHBzKCksZnMoYXMpLHlzKDAsMCl9ZmluYWxseXtaYS5lbmQmJlphLmVuZCgpLGNzKGEpfX0oKSxyKG51bGwpLG4uY2xlYW49b3N9KSl9KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzJj0tOX0sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzfD04fSx0LnByb3RvdHlwZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7Z3ModGhpcy5jb250ZXh0KX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7bHM9ITA7dHJ5e2dzKHQpfWZpbmFsbHl7bHM9ITF9fSh0aGlzLmNvbnRleHQpfSx0fSgpKTt2YXIgd3M9ZnVuY3Rpb24oKXt9LHhzPWZ1bmN0aW9uKCl7fSxDcz1uZXcgbXQoIkxvY2F0aW9uIEluaXRpYWxpemVkIiksRXM9ZnVuY3Rpb24oKXt9LFNzPW5ldyBtdCgiYXBwQmFzZUhyZWYiKSxrcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49dGhpczt0aGlzLl9zdWJqZWN0PW5ldyB6ZSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5PWU7dmFyIHI9dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VIcmVmPXQuc3RyaXBUcmFpbGluZ1NsYXNoKFRzKHIpKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5Lm9uUG9wU3RhdGUoZnVuY3Rpb24odCl7bi5fc3ViamVjdC5lbWl0KHt1cmw6bi5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSl9cmV0dXJuIHQucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLm5vcm1hbGl6ZSh0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnBhdGgodCkpfSx0LnByb3RvdHlwZS5pc0N1cnJlbnRQYXRoRXF1YWxUbz1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0iIiksdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrdC5ub3JtYWxpemVRdWVyeVBhcmFtcyhuKSl9LHQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZS5zdGFydHNXaXRoKHQpP2Uuc3Vic3RyaW5nKHQubGVuZ3RoKTplfSh0aGlzLl9iYXNlSHJlZixUcyhlKSkpfSx0LnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiIvIiE9PXRbMF0mJih0PSIvIit0KSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybCh0KX0sdC5wcm90b3R5cGUuZ289ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnB1c2hTdGF0ZShuLCIiLHQsZSl9LHQucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucmVwbGFjZVN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZm9yd2FyZCgpfSx0LnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5iYWNrKCl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OnQsZXJyb3I6ZSxjb21wbGV0ZTpufSl9LHQubm9ybWFsaXplUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI/IiE9PXRbMF0/Ij8iK3Q6dH0sdC5qb2luV2l0aFNsYXNoPWZ1bmN0aW9uKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX0sdC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvI3xcP3wkLyksbj1lJiZlLmluZGV4fHx0Lmxlbmd0aDtyZXR1cm4gdC5zbGljZSgwLG4tKCIvIj09PXRbbi0xXT8xOjApKSt0LnNsaWNlKG4pfSx0fSgpO2Z1bmN0aW9uIFRzKHQpe3JldHVybiB0LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgQXM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGxhdGZvcm1Mb2NhdGlvbj1lLHIuX2Jhc2VIcmVmPSIiLG51bGwhPW4mJihyLl9iYXNlSHJlZj1uKSxyfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygxKTplfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7dmFyIGU9a3Muam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KTtyZXR1cm4gZS5sZW5ndGg+MD8iIyIrZTplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitrcy5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09aS5sZW5ndGgmJihpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4ra3Mubm9ybWFsaXplUXVlcnlQYXJhbXMocikpOzA9PWkubGVuZ3RoJiYoaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsaSl9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShFcyksUHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbD09biYmKG49ci5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2UgaHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRva2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7cmV0dXJuIHIuX2Jhc2VIcmVmPW4scn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBrcy5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK2tzLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxuPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmdD8iIitlK246ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4ra3Mubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4ra3Mubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxpKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KEVzKSxPcz1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLHZvaWQgMF0sW1siQU0iLCJQTSJdLHZvaWQgMCx2b2lkIDBdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLHZvaWQgMCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sdm9pZCAwLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsdm9pZCAwLCJ7MX0gJ2F0JyB7MH0iLHZvaWQgMF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCIkIiwiVVMgRG9sbGFyIix7fSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKE1hdGguYWJzKHQpKSxuPXQudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1lJiYwPT09bj8xOjV9XSxJcz17fSxNcz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Llplcm89MF09Ilplcm8iLHRbdC5PbmU9MV09Ik9uZSIsdFt0LlR3bz0yXT0iVHdvIix0W3QuRmV3PTNdPSJGZXciLHRbdC5NYW55PTRdPSJNYW55Iix0W3QuT3RoZXI9NV09Ik90aGVyIix0fSh7fSksTnM9bmV3IG10KCJVc2VWNFBsdXJhbHMiKSxScz1mdW5jdGlvbigpe30sRHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5sb2NhbGU9ZSxyLmRlcHJlY2F0ZWRQbHVyYWxGbj1uLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbj90aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbihlfHx0aGlzLmxvY2FsZSx0KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLG49SXNbZV07aWYobilyZXR1cm4gbjt2YXIgcj1lLnNwbGl0KCItIilbMF07aWYobj1Jc1tyXSlyZXR1cm4gbjtpZigiZW4iPT09cilyZXR1cm4gT3M7dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICInK3QrJyIuJyl9KHQpWzE4XX0oZXx8dGhpcy5sb2NhbGUpKHQpKXtjYXNlIE1zLlplcm86cmV0dXJuInplcm8iO2Nhc2UgTXMuT25lOnJldHVybiJvbmUiO2Nhc2UgTXMuVHdvOnJldHVybiJ0d28iO2Nhc2UgTXMuRmV3OnJldHVybiJmZXciO2Nhc2UgTXMuTWFueTpyZXR1cm4ibWFueSI7ZGVmYXVsdDpyZXR1cm4ib3RoZXIifX0sZX0oUnMpO2Z1bmN0aW9uIExzKHQsZSl7ZT1lbmNvZGVVUklDb21wb25lbnQoZSk7dHJ5e2Zvcih2YXIgbj1hKHQuc3BsaXQoIjsiKSkscj1uLm5leHQoKTshci5kb25lO3I9bi5uZXh0KCkpe3ZhciBpPXIudmFsdWUsbz1pLmluZGV4T2YoIj0iKSxsPXMoLTE9PW8/W2ksIiJdOltpLnNsaWNlKDAsbyksaS5zbGljZShvKzEpXSwyKSx1PWxbMV07aWYobFswXS50cmltKCk9PT1lKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQodSl9fWNhdGNoKHQpe2M9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihoPW4ucmV0dXJuKSYmaC5jYWxsKG4pfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgYyxofXZhciBqcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5faXRlcmFibGVEaWZmZXJzPXQsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWUsdGhpcy5fbmdFbD1uLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5faW5pdGlhbENsYXNzZXM9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2xhc3MiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nQ2xhc3MiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5fcmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOnQsdGhpcy5fcmF3Q2xhc3MmJihNbih0aGlzLl9yYXdDbGFzcyk/dGhpcy5faXRlcmFibGVEaWZmZXI9dGhpcy5faXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpOnRoaXMuX2tleVZhbHVlRGlmZmVyPXRoaXMuX2tleVZhbHVlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5faXRlcmFibGVEaWZmZXIpe3ZhciB0PXRoaXMuX2l0ZXJhYmxlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO3QmJnRoaXMuX2FwcGx5SXRlcmFibGVDaGFuZ2VzKHQpfWVsc2UgaWYodGhpcy5fa2V5VmFsdWVEaWZmZXIpe3ZhciBlPXRoaXMuX2tleVZhbHVlRGlmZmVyLmRpZmYodGhpcy5fcmF3Q2xhc3MpO2UmJnRoaXMuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzKGUpfX0sdC5wcm90b3R5cGUuX2FwcGx5S2V5VmFsdWVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7dC5wcmV2aW91c1ZhbHVlJiZlLl90b2dnbGVDbGFzcyh0LmtleSwhMSl9KX0sdC5wcm90b3R5cGUuX2FwcGx5SXRlcmFibGVDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5pdGVtKXRocm93IG5ldyBFcnJvcigiTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAiK0F0KHQuaXRlbSkpO2UuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMCl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5pdGVtLCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCEwKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKG4sISF0W25dKX0pKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMSl9KSl9LHQucHJvdG90eXBlLl90b2dnbGVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7KHQ9dC50cmltKCkpJiZ0LnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbih0KXtlP24uX3JlbmRlcmVyLmFkZENsYXNzKG4uX25nRWwubmF0aXZlRWxlbWVudCx0KTpuLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCl9KX0sdH0oKSxGcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fY29udGV4dD1uZXcgVnMsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWYiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPXQsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJZlRoZW4iLHtzZXQ6ZnVuY3Rpb24odCl7QnMoIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZFbHNlIix7c2V0OmZ1bmN0aW9uKHQpe0JzKCJuZ0lmRWxzZSIsdCksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPXQsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3VwZGF0ZVZpZXc9ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSl9LHR9KCksVnM9ZnVuY3Rpb24oKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfTtmdW5jdGlvbiBCcyh0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICciK0F0KGUpKyInLiIpfXZhciB6cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVN1YnNjcmlwdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDplLGVycm9yOmZ1bmN0aW9uKHQpe3Rocm93IHR9fSl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dC51bnN1YnNjcmliZSgpfSx0fSgpLFVzPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVN1YnNjcmlwdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxmdW5jdGlvbih0KXt0aHJvdyB0fSl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7fSx0fSgpKSxIcz1uZXcgenMscXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZj10LHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsLHRoaXMuX3N0cmF0ZWd5PW51bGx9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCl9LHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2JqP3QhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybSh0KSk6dGhpcy5fbGF0ZXN0VmFsdWU9PT10aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlP3RoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU6KHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9dGhpcy5fbGF0ZXN0VmFsdWUsT24ud3JhcCh0aGlzLl9sYXRlc3RWYWx1ZSkpOih0JiZ0aGlzLl9zdWJzY3JpYmUodCksdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT10aGlzLl9sYXRlc3RWYWx1ZSx0aGlzLl9sYXRlc3RWYWx1ZSl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9vYmo9dCx0aGlzLl9zdHJhdGVneT10aGlzLl9zZWxlY3RTdHJhdGVneSh0KSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKHQsZnVuY3Rpb24obil7cmV0dXJuIGUuX3VwZGF0ZUxhdGVzdFZhbHVlKHQsbil9KX0sdC5wcm90b3R5cGUuX3NlbGVjdFN0cmF0ZWd5PWZ1bmN0aW9uKGUpe2lmKGZlKGUpKXJldHVybiBVcztpZihwZShlKSlyZXR1cm4gSHM7dGhyb3cgRXJyb3IoIkludmFsaWRQaXBlQXJndW1lbnQ6ICciK2UrIicgZm9yIHBpcGUgJyIrQXQodCkrIiciKX0sdC5wcm90b3R5cGUuX2Rpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9LHQucHJvdG90eXBlLl91cGRhdGVMYXRlc3RWYWx1ZT1mdW5jdGlvbih0LGUpe3Q9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1lLHRoaXMuX3JlZi5tYXJrRm9yQ2hlY2soKSl9LHR9KCksR3M9ZnVuY3Rpb24oKXt9LFdzPW5ldyBtdCgiRG9jdW1lbnRUb2tlbiIpLFFzPSJicm93c2VyIixLcz0ic2VydmVyIjtmdW5jdGlvbiBacyh0KXtyZXR1cm4gdD09PVFzfWZ1bmN0aW9uIFlzKHQpe3JldHVybiB0PT09S3N9dmFyIFhzLCRzLEpzPSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCYmSW50bC52OEJyZWFrSXRlcmF0b3IsdGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3BsYXRmb3JtSWQ9dCx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP1pzKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIUpzKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShiZSw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIGVsKCl7aWYobnVsbD09WHMmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHM9ITB9fSkpfWZpbmFsbHl7WHM9WHN8fCExfXJldHVybiBYc312YXIgbmw9WyJjb2xvciIsImJ1dHRvbiIsImNoZWNrYm94IiwiZGF0ZSIsImRhdGV0aW1lLWxvY2FsIiwiZW1haWwiLCJmaWxlIiwiaGlkZGVuIiwiaW1hZ2UiLCJtb250aCIsIm51bWJlciIsInBhc3N3b3JkIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic2VhcmNoIiwic3VibWl0IiwidGVsIiwidGV4dCIsInRpbWUiLCJ1cmwiLCJ3ZWVrIl07ZnVuY3Rpb24gcmwoKXtpZigkcylyZXR1cm4gJHM7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiAkcz1uZXcgU2V0KG5sKTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiAkcz1uZXcgU2V0KG5sLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoInR5cGUiLGUpLHQudHlwZT09PWV9KSl9dmFyIGlsPWZ1bmN0aW9uKCl7fSxvbD17fSxhbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yZXN1bHRTZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzbCh0LHRoaXMucmVzdWx0U2VsZWN0b3IpKX0sdH0oKSxzbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucmVzdWx0U2VsZWN0b3I9bixyLmFjdGl2ZT0wLHIudmFsdWVzPVtdLHIub2JzZXJ2YWJsZXM9W10scn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2gob2wpLHRoaXMub2JzZXJ2YWJsZXMucHVzaCh0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vYnNlcnZhYmxlcyxlPXQubGVuZ3RoO2lmKDA9PT1lKXRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtlbHNle3RoaXMuYWN0aXZlPWUsdGhpcy50b1Jlc3BvbmQ9ZTtmb3IodmFyIG49MDtuPGU7bisrKXt2YXIgcj10W25dO3RoaXMuYWRkKFUodGhpcyxyLHIsbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/b1tuXT09PW9sPy0tdGhpcy50b1Jlc3BvbmQ6dGhpcy50b1Jlc3BvbmQ6MDtvW25dPWUsMD09PWEmJih0aGlzLnJlc3VsdFNlbGVjdG9yP3RoaXMuX3RyeVJlc3VsdFNlbGVjdG9yKG8pOnRoaXMuZGVzdGluYXRpb24ubmV4dChvLnNsaWNlKCkpKX0sZS5wcm90b3R5cGUuX3RyeVJlc3VsdFNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucmVzdWx0U2VsZWN0b3IuYXBwbHkodGhpcyx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oSCk7ZnVuY3Rpb24gbGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IHVsKHQpKX19dmFyIHVsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLm5vdGlmaWVyPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgY2wodCkscj1VKG4sdGhpcy5ub3RpZmllcik7cmV0dXJuIHImJiFyLmNsb3NlZD8obi5hZGQociksZS5zdWJzY3JpYmUobikpOm59LHR9KCksY2w9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSl8fHRoaXN9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe30sZX0oSCk7ZnVuY3Rpb24gaGwodCl7dmFyIGU9bmV3IE8oZnVuY3Rpb24oZSl7ZS5uZXh0KHQpLGUuY29tcGxldGUoKX0pO3JldHVybiBlLl9pc1NjYWxhcj0hMCxlLnZhbHVlPXQsZX12YXIgZmw9bmV3IE8oZnVuY3Rpb24odCl7cmV0dXJuIHQuY29tcGxldGUoKX0pO2Z1bmN0aW9uIHBsKHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgTyhmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBlLmNvbXBsZXRlKCl9KX0pfSh0KTpmbH1mdW5jdGlvbiBkbCgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3N3aXRjaChNKG4pP3QucG9wKCk6bj12b2lkIDAsdC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcGwobik7Y2FzZSAxOnJldHVybiBuP1EodCxuKTpobCh0WzBdKTtkZWZhdWx0OnJldHVybiBRKHQsbil9fWZ1bmN0aW9uIG1sKCl7cmV0dXJuIEooMSl9ZnVuY3Rpb24geWwoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbdC5sZW5ndGgtMV07TShuKT90LnBvcCgpOm49bnVsbDt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIDE9PT10Lmxlbmd0aHx8Mj09PXQubGVuZ3RoJiZNKHRbMV0pP0sodFswXSk6bWwoKShkbC5hcHBseSh2b2lkIDAsdCkpfSgxIT09cnx8bj9yPjA/USh0LG4pOnBsKG4pOmhsKHRbMF0pLGUpfX1mdW5jdGlvbiBnbCh0KXtyZXR1cm4gbnVsbCE9dCYmIiIrdCE9ImZhbHNlIn1mdW5jdGlvbiB2bCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSxmdW5jdGlvbih0KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh0KSkmJiFpc05hTihOdW1iZXIodCkpfSh0KT9OdW1iZXIodCk6ZX1mdW5jdGlvbiBfbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Olt0XX1mdW5jdGlvbiBibCh0KXtyZXR1cm4gbnVsbD09dD8iIjoic3RyaW5nIj09dHlwZW9mIHQ/dDp0KyJweCJ9dmFyIHdsLHhsPWZ1bmN0aW9uKCl7fSxDbD1uZXcgU2V0LEVsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOlNsfXJldHVybiB0LnByb3RvdHlwZS5tYXRjaE1lZGlhPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBsYXRmb3JtLldFQktJVCYmZnVuY3Rpb24odCl7aWYoIUNsLmhhcyh0KSl0cnl7d2x8fCgod2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHdsKSksd2wuc2hlZXQmJih3bC5zaGVldC5pbnNlcnRSdWxlKCJAbWVkaWEgIit0KyIgey5meC1xdWVyeS10ZXN0eyB9fSIsMCksQ2wuYWRkKHQpKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0odCksdGhpcy5fbWF0Y2hNZWRpYSh0KX0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUodGwpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gU2wodCl7cmV0dXJue21hdGNoZXM6ImFsbCI9PT10fHwiIj09PXQsbWVkaWE6dCxhZGRMaXN0ZW5lcjpmdW5jdGlvbigpe30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oKXt9fX12YXIga2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5tZWRpYU1hdGNoZXI9dCx0aGlzLnpvbmU9ZSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IGl0fXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3lTdWJqZWN0Lm5leHQoKSx0aGlzLl9kZXN0cm95U3ViamVjdC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5pc01hdGNoZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gVGwoX2wodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLHI9bnVsbDtyZXR1cm4gTSh0W3QubGVuZ3RoLTFdKSYmKHI9dC5wb3AoKSksImZ1bmN0aW9uIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpLDE9PT10Lmxlbmd0aCYmZCh0WzBdKSYmKHQ9dFswXSksUSh0LHIpLmxpZnQobmV3IGFsKG4pKX0oVGwoX2wodCkpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5fcmVnaXN0ZXJRdWVyeSh0KS5vYnNlcnZhYmxlfSkpLnBpcGUocShmdW5jdGlvbih0KXtyZXR1cm57bWF0Y2hlczp0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubWF0Y2hlc30pfX0pKX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLl9xdWVyaWVzLmhhcyh0KSlyZXR1cm4gdGhpcy5fcXVlcmllcy5nZXQodCk7dmFyIG49dGhpcy5tZWRpYU1hdGNoZXIubWF0Y2hNZWRpYSh0KSxyPXtvYnNlcnZhYmxlOmZ1bmN0aW9uIHQoZSxuLHIpe3JldHVybiByP3QoZSxuKS5waXBlKHEoZnVuY3Rpb24odCl7cmV0dXJuIGQodCk/ci5hcHBseSh2b2lkIDAsdCk6cih0KX0pKTpuZXcgTyhmdW5jdGlvbih0KXt2YXIgcixpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0Lm5leHQoMT09PWUubGVuZ3RoP2VbMF06ZSl9O3RyeXtyPWUoaSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX1pZih1KG4pKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuKGkscil9fSl9KGZ1bmN0aW9uKHQpe24uYWRkTGlzdGVuZXIoZnVuY3Rpb24obil7cmV0dXJuIGUuem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdChuKX0pfSl9LGZ1bmN0aW9uKHQpe24ucmVtb3ZlTGlzdGVuZXIoZnVuY3Rpb24obil7cmV0dXJuIGUuem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdChuKX0pfSl9KS5waXBlKGxsKHRoaXMuX2Rlc3Ryb3lTdWJqZWN0KSx5bChuKSxxKGZ1bmN0aW9uKHQpe3JldHVybnttYXRjaGVzOnQubWF0Y2hlc319KSksbXFsOm59O3JldHVybiB0aGlzLl9xdWVyaWVzLnNldCh0LHIpLHJ9LHQubmdJbmplY3RhYmxlRGVmPWR0KHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KGVlKEVsKSxlZShVZSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBUbCh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIiwiKX0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50cmltKCl9KX12YXIgQWw9e1hTbWFsbDoiKG1heC13aWR0aDogNTk5cHgpIixTbWFsbDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLE1lZGl1bToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIixMYXJnZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSIsWExhcmdlOiIobWluLXdpZHRoOiAxOTIwcHgpIixIYW5kc2V0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixXZWI6IihtaW4td2lkdGg6IDg0MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDEyODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsSGFuZHNldFBvcnRyYWl0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixUYWJsZXRQb3J0cmFpdDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixXZWJQb3J0cmFpdDoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsSGFuZHNldExhbmRzY2FwZToiKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFRhYmxldExhbmRzY2FwZToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYkxhbmRzY2FwZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIn0sUGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuYnJlYWtwb2ludE9ic2VydmVyPXQsdGhpcy5vcGVuZWRTaWRlTmF2PSEwLHRoaXMuaXNIYW5kc2V0JD10aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKEFsLkhhbmRzZXQpLnBpcGUocShmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaGVzfSkpfXJldHVybiB0LnByb3RvdHlwZS5vcGVuU2lkZU5hdj1mdW5jdGlvbigpe3RoaXMub3BlbmVkU2lkZU5hdj0hMCE9PXRoaXMub3BlbmVkU2lkZU5hdn0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksT2w9ZnVuY3Rpb24oKXt9LElsPSIqIjtmdW5jdGlvbiBNbCh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1udWxsKSx7dHlwZToyLHN0ZXBzOnQsb3B0aW9uczplfX1mdW5jdGlvbiBObCh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBSbCh0KXtQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbih0KX12YXIgRGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9dCtlfXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS50cmlnZ2VyTWljcm90YXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztSbChmdW5jdGlvbigpe3JldHVybiB0Ll9vbkZpbmlzaCgpfSl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fb25GaW5pc2goKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRGVzdHJveUZucz1bXSl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksZS5sZW5ndGg9MH0sdH0oKSxMbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT0wLHRoaXMucGxheWVycz10O3ZhciBuPTAscj0wLGk9MCxvPXRoaXMucGxheWVycy5sZW5ndGg7MD09bz9SbChmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysrcj09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK2k9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksamw9IiEiLEZsPTI3O2Z1bmN0aW9uIFZsKHQsZSxuLHIpe3JldHVybiB1KG4pJiYocj1uLG49dm9pZCAwKSxyP1ZsKHQsZSxuKS5waXBlKHEoZnVuY3Rpb24odCl7cmV0dXJuIGQodCk/ci5hcHBseSh2b2lkIDAsdCk6cih0KX0pKTpuZXcgTyhmdW5jdGlvbihyKXshZnVuY3Rpb24gdChlLG4scixpLG8pe3ZhciBhO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVFdmVudExpc3RlbmVyfShlKSl7dmFyIHM9ZTtlLmFkZEV2ZW50TGlzdGVuZXIobixyLG8pLGE9ZnVuY3Rpb24oKXtyZXR1cm4gcy5yZW1vdmVFdmVudExpc3RlbmVyKG4scixvKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub24mJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9mZn0oZSkpe3ZhciBsPWU7ZS5vbihuLHIpLGE9ZnVuY3Rpb24oKXtyZXR1cm4gbC5vZmYobixyKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWRkTGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUxpc3RlbmVyfShlKSl7dmFyIHU9ZTtlLmFkZExpc3RlbmVyKG4sciksYT1mdW5jdGlvbigpe3JldHVybiB1LnJlbW92ZUxpc3RlbmVyKG4scil9fWVsc2V7aWYoIWV8fCFlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO2Zvcih2YXIgYz0wLGg9ZS5sZW5ndGg7YzxoO2MrKyl0KGVbY10sbixyLGksbyl9aS5hZGQoYSl9KHQsZSxmdW5jdGlvbih0KXtyLm5leHQoYXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk6dCl9LHIsbil9KX1PYmplY3Q7dmFyIEJsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1lLHIud29yaz1uLHIucGVuZGluZz0hMSxyfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPXQ7dmFyIG49dGhpcy5pZCxyPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1uJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHIsbixlKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9ZSx0aGlzLmlkPXRoaXMuaWR8fHRoaXMucmVxdWVzdEFzeW5jSWQocix0aGlzLmlkLGUpLHRoaXN9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksbil9LGUucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj0wKSxudWxsIT09biYmdGhpcy5kZWxheT09PW4mJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO2NsZWFySW50ZXJ2YWwoZSl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO3ZhciBuPXRoaXMuX2V4ZWN1dGUodCxlKTtpZihuKXJldHVybiBuOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfSxlLnByb3RvdHlwZS5fZXhlY3V0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSExLHI9dm9pZCAwO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2godCl7bj0hMCxyPSEhdCYmdHx8bmV3IEVycm9yKHQpfWlmKG4pcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlkLGU9dGhpcy5zY2hlZHVsZXIsbj1lLmFjdGlvbnMscj1uLmluZGV4T2YodGhpcyk7dGhpcy53b3JrPW51bGwsdGhpcy5zdGF0ZT1udWxsLHRoaXMucGVuZGluZz0hMSx0aGlzLnNjaGVkdWxlcj1udWxsLC0xIT09ciYmbi5zcGxpY2UociwxKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsfSxlfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzKXx8dGhpc31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHRoaXN9LGV9KHcpKSx6bD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxuKXt2b2lkIDA9PT1uJiYobj10Lm5vdyksdGhpcy5TY2hlZHVsZXJBY3Rpb249ZSx0aGlzLm5vdz1ufXJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLG5ldyB0aGlzLlNjaGVkdWxlckFjdGlvbih0aGlzLHQpLnNjaGVkdWxlKG4sZSl9LHQubm93PURhdGUubm93P0RhdGUubm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSx0fSgpLFVsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixyKXt2b2lkIDA9PT1yJiYocj16bC5ub3cpO3ZhciBpPXQuY2FsbCh0aGlzLG4sZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PWk/ZS5kZWxlZ2F0ZS5ub3coKTpyKCl9KXx8dGhpcztyZXR1cm4gaS5hY3Rpb25zPVtdLGkuYWN0aXZlPSExLGkuc2NoZWR1bGVkPXZvaWQgMCxpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24obixyLGkpe3JldHVybiB2b2lkIDA9PT1yJiYocj0wKSxlLmRlbGVnYXRlJiZlLmRlbGVnYXRlIT09dGhpcz9lLmRlbGVnYXRlLnNjaGVkdWxlKG4scixpKTp0LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsbixyLGkpfSxlLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGlvbnM7aWYodGhpcy5hY3RpdmUpZS5wdXNoKHQpO2Vsc2V7dmFyIG47dGhpcy5hY3RpdmU9ITA7ZG97aWYobj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5hY3RpdmU9ITEsbil7Zm9yKDt0PWUuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IG59fX0sZX0oemwpLEhsPW5ldyBVbChCbCkscWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZHVyYXRpb25TZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBHbCh0LHRoaXMuZHVyYXRpb25TZWxlY3RvcikpfSx0fSgpLEdsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5kdXJhdGlvblNlbGVjdG9yPW4sci5oYXNWYWx1ZT0hMSxyfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy52YWx1ZT10LHRoaXMuaGFzVmFsdWU9ITAsIXRoaXMudGhyb3R0bGVkKXt2YXIgZT1fKHRoaXMuZHVyYXRpb25TZWxlY3RvcikodCk7aWYoZT09PWcpdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihnLmUpO2Vsc2V7dmFyIG49VSh0aGlzLGUpOyFufHxuLmNsb3NlZD90aGlzLmNsZWFyVGhyb3R0bGUoKTp0aGlzLmFkZCh0aGlzLnRocm90dGxlZD1uKX19fSxlLnByb3RvdHlwZS5jbGVhclRocm90dGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZSxlPXRoaXMuaGFzVmFsdWUsbj10aGlzLnRocm90dGxlZDtuJiYodGhpcy5yZW1vdmUobiksdGhpcy50aHJvdHRsZWQ9bnVsbCxuLnVuc3Vic2NyaWJlKCkpLGUmJih0aGlzLnZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCkpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuY2xlYXJUaHJvdHRsZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY2xlYXJUaHJvdHRsZSgpfSxlfShIKTtmdW5jdGlvbiBXbCh0KXtyZXR1cm4hZCh0KSYmdC1wYXJzZUZsb2F0KHQpKzE+PTB9ZnVuY3Rpb24gUWwodCxlLG4pe3ZvaWQgMD09PXQmJih0PTApO3ZhciByPS0xO3JldHVybiBXbChlKT9yPU51bWJlcihlKTwxPzE6TnVtYmVyKGUpOk0oZSkmJihuPWUpLE0obil8fChuPUhsKSxuZXcgTyhmdW5jdGlvbihlKXt2YXIgaT1XbCh0KT90Oit0LW4ubm93KCk7cmV0dXJuIG4uc2NoZWR1bGUoS2wsaSx7aW5kZXg6MCxwZXJpb2Q6cixzdWJzY3JpYmVyOmV9KX0pfWZ1bmN0aW9uIEtsKHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxyPXQuc3Vic2NyaWJlcjtpZihyLm5leHQoZSksIXIuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIHIuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fWZ1bmN0aW9uIFpsKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPUhsKSxuPWZ1bmN0aW9uKCl7cmV0dXJuIFFsKHQsZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IHFsKG4pKX07dmFyIG59ZnVuY3Rpb24gWWwodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgWGwodCxlKSl9fXZhciBYbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyAkbCh0LHRoaXMucHJlZGljYXRlLHRoaXMudGhpc0FyZykpfSx0fSgpLCRsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnByZWRpY2F0ZT1uLGkudGhpc0FyZz1yLGkuY291bnQ9MCxpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlfShFKSxKbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX3Njcm9sbGVkPW5ldyBpdCx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl9zY3JvbGxlZC5uZXh0KHQpfSk7dGhpcy5zY3JvbGxDb250YWluZXJzLnNldCh0LG4pfSx0LnByb3RvdHlwZS5kZXJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQodCk7ZSYmKGUudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuc2Nyb2xsZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9PLmNyZWF0ZShmdW5jdGlvbihuKXtlLl9nbG9iYWxTdWJzY3JpcHRpb258fGUuX2FkZEdsb2JhbExpc3RlbmVyKCk7dmFyIHI9dD4wP2UuX3Njcm9sbGVkLnBpcGUoWmwodCkpLnN1YnNjcmliZShuKTplLl9zY3JvbGxlZC5zdWJzY3JpYmUobik7cmV0dXJuIGUuX3Njcm9sbGVkQ291bnQrKyxmdW5jdGlvbigpe3IudW5zdWJzY3JpYmUoKSxlLl9zY3JvbGxlZENvdW50LS0sZS5fc2Nyb2xsZWRDb3VudHx8ZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpkbCgpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LmRlcmVnaXN0ZXIobil9KSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5hbmNlc3RvclNjcm9sbGVkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModCk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZSkucGlwZShZbChmdW5jdGlvbih0KXtyZXR1cm4hdHx8bi5pbmRleE9mKHQpPi0xfSkpfSx0LnByb3RvdHlwZS5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbihyLGkpe2UuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoaSx0KSYmbi5wdXNoKGkpfSksbn0sdC5wcm90b3R5cGUuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLm5hdGl2ZUVsZW1lbnQscj10LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKG49PXIpcmV0dXJuITB9d2hpbGUobj1uLnBhcmVudEVsZW1lbnQpO3JldHVybiExfSx0LnByb3RvdHlwZS5fYWRkR2xvYmFsTGlzdGVuZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gVmwod2luZG93LmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5fc2Nyb2xsZWQubmV4dCgpfSl9KX0sdC5wcm90b3R5cGUuX3JlbW92ZUdsb2JhbExpc3RlbmVyPWZ1bmN0aW9uKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShVZSksZWUodGwpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksdHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9zY3JvbGw9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IGl0LHRoaXMuX3Njcm9sbExpc3RlbmVyPWZ1bmN0aW9uKHQpe3JldHVybiByLl9lbGVtZW50U2Nyb2xsZWQubmV4dCh0KX19cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdC5fc2Nyb2xsTGlzdGVuZXIpfSksdGhpcy5fc2Nyb2xsLnJlZ2lzdGVyKHRoaXMpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3Njcm9sbExpc3RlbmVyJiZ0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fc2Nyb2xsTGlzdGVuZXIpfSx0LnByb3RvdHlwZS5lbGVtZW50U2Nyb2xsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5nZXRFbGVtZW50UmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWZ9LHR9KCksZXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX2NoYW5nZT10LmlzQnJvd3Nlcj9lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHR0KFZsKHdpbmRvdywicmVzaXplIiksVmwod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOmRsKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLHI9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3ArcixyaWdodDp0LmxlZnQrbixoZWlnaHQ6cix3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZShabCh0KSk6dGhpcy5fY2hhbmdlfSx0LnByb3RvdHlwZS5fdXBkYXRlVmlld3BvcnRTaXplPWZ1bmN0aW9uKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6d2luZG93LmlubmVyV2lkdGgsaGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZSh0bCksZWUoVWUpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksbnU9ZnVuY3Rpb24oKXt9LHJ1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcywiYXJndW1lbnQgb3V0IG9mIHJhbmdlIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiBpKGUsdCksZX0oRXJyb3IpO2Z1bmN0aW9uIGl1KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/cGwoKTplLmxpZnQobmV3IG91KHQpKX19dmFyIG91PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBydX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgYXUodCx0aGlzLnRvdGFsKSl9LHR9KCksYXU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnRvdGFsPW4sci5jb3VudD0wLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRvdGFsLG49Kyt0aGlzLmNvdW50O248PWUmJih0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksbj09PWUmJih0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpKSl9LGV9KEUpO2Z1bmN0aW9uIHN1KCl7dGhyb3cgRXJyb3IoIkhvc3QgYWxyZWFkeSBoYXMgYSBwb3J0YWwgYXR0YWNoZWQiKX12YXIgbHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQmJmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gYXR0YWNoIGEgcG9ydGFsIHRvIGEgbnVsbCBQb3J0YWxPdXRsZXQiKX0oKSx0Lmhhc0F0dGFjaGVkKCkmJnN1KCksdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2F0dGFjaGVkSG9zdDtudWxsPT10P2Z1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZGV0YWNoIGEgcG9ydGFsIHRoYXQgaXMgbm90IGF0dGFjaGVkIHRvIGEgaG9zdCIpfSgpOih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0F0dGFjaGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuX2F0dGFjaGVkSG9zdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZXRBdHRhY2hlZEhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5fYXR0YWNoZWRIb3N0PXR9LHR9KCksdXU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmNvbXBvbmVudD1lLGkudmlld0NvbnRhaW5lclJlZj1uLGkuaW5qZWN0b3I9cixpfXJldHVybiBpKGUsdCksZX0obHUpLGN1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS50ZW1wbGF0ZVJlZj1lLGkudmlld0NvbnRhaW5lclJlZj1uLGkuY29udGV4dD1yLGl9cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm9yaWdpbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMuY29udGV4dCksdGhpcy5jb250ZXh0PW4sdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyl9LGV9KGx1KSxodT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExfXJldHVybiB0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdHx8ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTXVzdCBwcm92aWRlIGEgcG9ydGFsIHRvIGF0dGFjaCIpfSgpLHRoaXMuaGFzQXR0YWNoZWQoKSYmc3UoKSx0aGlzLl9pc0Rpc3Bvc2VkJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJUaGlzIFBvcnRhbE91dGxldCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9KCksdCBpbnN0YW5jZW9mIHV1Pyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgY3U/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dm9pZCBmdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGF0dGFjaCBhbiB1bmtub3duIFBvcnRhbCB0eXBlLiBCYXNlUG9ydGFsT3V0bGV0IGFjY2VwdHMgZWl0aGVyIGEgQ29tcG9uZW50UG9ydGFsIG9yIGEgVGVtcGxhdGVQb3J0YWwuIil9KCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9LHQucHJvdG90eXBlLnNldERpc3Bvc2VGbj1mdW5jdGlvbih0KXt0aGlzLl9kaXNwb3NlRm49dH0sdC5wcm90b3R5cGUuX2ludm9rZURpc3Bvc2VGbj1mdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX0sdH0oKSxmdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5vdXRsZXRFbGVtZW50PWUsby5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sby5fYXBwUmVmPXIsby5fZGVmYXVsdEluamVjdG9yPWksb31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMscj10aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5jb21wb25lbnQpO3JldHVybiB0LnZpZXdDb250YWluZXJSZWY/KGU9dC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChyLHQudmlld0NvbnRhaW5lclJlZi5sZW5ndGgsdC5pbmplY3Rvcnx8dC52aWV3Q29udGFpbmVyUmVmLnBhcmVudEluamVjdG9yKSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe3JldHVybiBlLmRlc3Ryb3koKX0pKTooZT1yLmNyZWF0ZSh0LmluamVjdG9yfHx0aGlzLl9kZWZhdWx0SW5qZWN0b3IpLHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMuc2V0RGlzcG9zZUZuKGZ1bmN0aW9uKCl7bi5fYXBwUmVmLmRldGFjaFZpZXcoZS5ob3N0VmlldyksZS5kZXN0cm95KCl9KSksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2dldENvbXBvbmVudFJvb3ROb2RlKGUpKSxlfSxlLnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC52aWV3Q29udGFpbmVyUmVmLHI9bi5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQpO3JldHVybiByLmRldGVjdENoYW5nZXMoKSxyLnJvb3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe3ZhciB0PW4uaW5kZXhPZihyKTstMSE9PXQmJm4ucmVtb3ZlKHQpfSkscn0sZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKSxudWxsIT10aGlzLm91dGxldEVsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5vdXRsZXRFbGVtZW50KX0sZS5wcm90b3R5cGUuX2dldENvbXBvbmVudFJvb3ROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX0sZX0oaHUpLHB1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHIuX3ZpZXdDb250YWluZXJSZWY9bixyLl9pc0luaXRpYWxpemVkPSExLHIuYXR0YWNoZWQ9bmV3IHplLHJ9cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBvcnRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH0sc2V0OmZ1bmN0aW9uKGUpeyghdGhpcy5oYXNBdHRhY2hlZCgpfHxlfHx0aGlzLl9pc0luaXRpYWxpemVkKSYmKHRoaXMuaGFzQXR0YWNoZWQoKSYmdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksZSYmdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dGFjaGVkUmVmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIG49bnVsbCE9ZS52aWV3Q29udGFpbmVyUmVmP2Uudmlld0NvbnRhaW5lclJlZjp0aGlzLl92aWV3Q29udGFpbmVyUmVmLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGUuY29tcG9uZW50KSxpPW4uY3JlYXRlQ29tcG9uZW50KHIsbi5sZW5ndGgsZS5pbmplY3Rvcnx8bi5wYXJlbnRJbmplY3Rvcik7cmV0dXJuIHQucHJvdG90eXBlLnNldERpc3Bvc2VGbi5jYWxsKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7ZS5zZXRBdHRhY2hlZEhvc3QodGhpcyk7dmFyIHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoZS50ZW1wbGF0ZVJlZixlLmNvbnRleHQpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0pLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cix0aGlzLmF0dGFjaGVkLmVtaXQocikscn0sZX0oaHUpLGR1PWZ1bmN0aW9uKCl7fSxtdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9wYXJlbnRJbmplY3Rvcj10LHRoaXMuX2N1c3RvbVRva2Vucz1lfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jdXN0b21Ub2tlbnMuZ2V0KHQpO3JldHVybiB2b2lkIDAhPT1uP246dGhpcy5fcGFyZW50SW5qZWN0b3IuZ2V0KHQsZSl9LHR9KCkseXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbigpe30sdH0oKSxndT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuc2Nyb2xsU3RyYXRlZ3k9bmV3IHl1LHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSExLHRoaXMuYmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCIsdCYmT2JqZWN0LmtleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT10W25dfSl9fSgpO2Z1bmN0aW9uIHZ1KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIF91KHQsZSl7aWYoInN0YXJ0IiE9PWUmJiJlbmQiIT09ZSYmImNlbnRlciIhPT1lKXRocm93IEVycm9yKCJDb25uZWN0ZWRQb3NpdGlvbjogSW52YWxpZCAiK3QrJyAiJytlKyciLiBFeHBlY3RlZCAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIi4nKX12YXIgYnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2NhbkJlRW5hYmxlZCgpKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1ibCgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD1ibCgtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9pc0VuYWJsZWQpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlPXRoaXMuX2RvY3VtZW50LmJvZHksbj10LnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIixyPWUuc3R5bGUuc2Nyb2xsQmVoYXZpb3J8fCIiO3RoaXMuX2lzRW5hYmxlZD0hMSx0LnN0eWxlLmxlZnQ9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQsdC5zdHlsZS50b3A9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcCx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPWUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iLHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPW4sZS5zdHlsZS5zY3JvbGxCZWhhdmlvcj1yfX0sdC5wcm90b3R5cGUuX2NhbkJlRW5hYmxlZD1mdW5jdGlvbigpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO3ZhciB0PXRoaXMuX2RvY3VtZW50LmJvZHksZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiB0LnNjcm9sbEhlaWdodD5lLmhlaWdodHx8dC5zY3JvbGxXaWR0aD5lLndpZHRofSx0fSgpO2Z1bmN0aW9uIHd1KCl7cmV0dXJuIEVycm9yKCJTY3JvbGwgc3RyYXRlZ3kgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZC4iKX12YXIgeHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX25nWm9uZT1lLHRoaXMuX3ZpZXdwb3J0UnVsZXI9bix0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9kZXRhY2g9ZnVuY3Rpb24oKXtpLmRpc2FibGUoKSxpLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJmkuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gaS5fb3ZlcmxheVJlZi5kZXRhY2goKX0pfX1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX292ZXJsYXlSZWYpdGhyb3cgd3UoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbil7dmFyIGU9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgwKTt0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ+MT8odGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcCx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgZT10Ll92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3A7TWF0aC5hYnMoZS10Ll9pbml0aWFsU2Nyb2xsUG9zaXRpb24pPnQuX2NvbmZpZy50aHJlc2hvbGQ/dC5fZGV0YWNoKCk6dC5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1lLnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX0sdH0oKTtmdW5jdGlvbiBDdSh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYm90dG9tPGUudG9wfHx0LnRvcD5lLmJvdHRvbXx8dC5yaWdodDxlLmxlZnR8fHQubGVmdD5lLnJpZ2h0fSl9ZnVuY3Rpb24gRXUodCxlKXtyZXR1cm4gZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0LnRvcDxlLnRvcHx8dC5ib3R0b20+ZS5ib3R0b218fHQubGVmdDxlLmxlZnR8fHQucmlnaHQ+ZS5yaWdodH0pfXZhciBTdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX292ZXJsYXlSZWYpdGhyb3cgd3UoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9ufHwodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQodGhpcy5fY29uZmlnP3RoaXMuX2NvbmZpZy5zY3JvbGxUaHJvdHRsZTowKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZih0Ll9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdC5fY29uZmlnJiZ0Ll9jb25maWcuYXV0b0Nsb3NlKXt2YXIgZT10Ll9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxyPW4ud2lkdGgsaT1uLmhlaWdodDtDdShlLFt7d2lkdGg6cixoZWlnaHQ6aSxib3R0b206aSxyaWdodDpyLHRvcDowLGxlZnQ6MH1dKSYmKHQuZGlzYWJsZSgpLHQuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fb3ZlcmxheVJlZi5kZXRhY2goKX0pKX19KSl9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCksa3U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLm5vb3A9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHl1fSx0aGlzLmNsb3NlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeHUoaS5fc2Nyb2xsRGlzcGF0Y2hlcixpLl9uZ1pvbmUsaS5fdmlld3BvcnRSdWxlcix0KX0sdGhpcy5ibG9jaz1mdW5jdGlvbigpe3JldHVybiBuZXcgYnUoaS5fdmlld3BvcnRSdWxlcixpLl9kb2N1bWVudCl9LHRoaXMucmVwb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFN1KGkuX3Njcm9sbERpc3BhdGNoZXIsaS5fdmlld3BvcnRSdWxlcixpLl9uZ1pvbmUsdCl9LHRoaXMuX2RvY3VtZW50PXJ9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPWR0KHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KGVlKEpsKSxlZShldSksZWUoVWUpLGVlKFdzKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFR1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZlLl9hdHRhY2hlZE92ZXJsYXlzW2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoLTFdLl9rZXlkb3duRXZlbnRzLm5leHQodCl9LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShXcykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxBdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jdW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2NvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX0sdC5wcm90b3R5cGUuZ2V0Q29udGFpbmVyRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fSx0LnByb3RvdHlwZS5fY3JlYXRlQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb250YWluZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9dH0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUoV3MpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksUHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fbmdab25lPWksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPW8sdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyBpdCx0aGlzLl9hdHRhY2htZW50cz1uZXcgaXQsdGhpcy5fZGV0YWNobWVudHM9bmV3IGl0LHRoaXMuX2tleWRvd25FdmVudHM9bmV3IGl0LHIuc2Nyb2xsU3RyYXRlZ3kmJnIuc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm92ZXJsYXlFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJiYWNrZHJvcEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaG9zdEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faG9zdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2godCk7cmV0dXJuIHRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5fdXBkYXRlU3RhY2tpbmdPcmRlcigpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCksdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKGl1KDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLmhhc0F0dGFjaGVkKCkmJmUudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSxufSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0F0dGFjaGVkKCkpe3RoaXMuZGV0YWNoQmFja2Ryb3AoKSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCExKSx0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoJiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5kZXRhY2goKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCk7dmFyIHQ9dGhpcy5fcG9ydGFsT3V0bGV0LmRldGFjaCgpO3JldHVybiB0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0fX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaGFzQXR0YWNoZWQoKTt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneSYmdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5LmRpc2FibGUoKSx0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9wb3J0YWxPdXRsZXQuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaG1lbnRzLmNvbXBsZXRlKCksdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpLHRoaXMuX2tleWRvd25FdmVudHMuY29tcGxldGUoKSx0aGlzLl9ob3N0JiZ0aGlzLl9ob3N0LnBhcmVudE5vZGUmJih0aGlzLl9ob3N0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5faG9zdCksdGhpcy5faG9zdD1udWxsKSx0aGlzLl9wYW5lPW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmhhc0F0dGFjaGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfSx0LnByb3RvdHlwZS5iYWNrZHJvcENsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wQ2xpY2suYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmF0dGFjaG1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5kZXRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUua2V5ZG93bkV2ZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlkb3duRXZlbnRzLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29uZmlnfSx0LnByb3RvdHlwZS51cGRhdGVQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneS5hcHBseSgpfSx0LnByb3RvdHlwZS51cGRhdGVTaXplPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbmZpZz1vKHt9LHRoaXMuX2NvbmZpZyx0KSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfSx0LnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24odCl7dGhpcy5fY29uZmlnPW8oe30sdGhpcy5fY29uZmlnLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudERpcmVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXsodGhpcy5fY29uZmlnLndpZHRofHwwPT09dGhpcy5fY29uZmlnLndpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUud2lkdGg9YmwodGhpcy5fY29uZmlnLndpZHRoKSksKHRoaXMuX2NvbmZpZy5oZWlnaHR8fDA9PT10aGlzLl9jb25maWcuaGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUuaGVpZ2h0PWJsKHRoaXMuX2NvbmZpZy5oZWlnaHQpKSwodGhpcy5fY29uZmlnLm1pbldpZHRofHwwPT09dGhpcy5fY29uZmlnLm1pbldpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWluV2lkdGg9YmwodGhpcy5fY29uZmlnLm1pbldpZHRoKSksKHRoaXMuX2NvbmZpZy5taW5IZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWluSGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWluSGVpZ2h0PWJsKHRoaXMuX2NvbmZpZy5taW5IZWlnaHQpKSwodGhpcy5fY29uZmlnLm1heFdpZHRofHwwPT09dGhpcy5fY29uZmlnLm1heFdpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4V2lkdGg9YmwodGhpcy5fY29uZmlnLm1heFdpZHRoKSksKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWF4SGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4SGVpZ2h0PWJsKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpKX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG49ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChuLDUwMCl9KX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzc2VzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNsYXNzTGlzdDtfbChlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24/ci5hZGQodCk6ci5yZW1vdmUodCl9KX0sdH0oKSxPdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5zY3JvbGxhYmxlcz1bXSx0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25DaGFuZ2VzPW5ldyBpdCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dy5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz0wLHRoaXMucG9zaXRpb25DaGFuZ2VzPU8uY3JlYXRlKGZ1bmN0aW9uKHQpe3ZhciBlPWkuX3Bvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUodCk7cmV0dXJuIGkuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucysrLGZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZSgpLGkuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucy0tfX0pLHRoaXMuc2V0T3JpZ2luKHQpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBvc2l0aW9ucyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5fb3ZlcmxheVJlZiYmdCE9PXRoaXMuX292ZXJsYXlSZWYpdGhyb3cgRXJyb3IoIlRoaXMgcG9zaXRpb24gc3RyYXRlZ3kgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhbiBvdmVybGF5Iik7dGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3giKSx0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fYm91bmRpbmdCb3g9dC5ob3N0RWxlbWVudCx0aGlzLl9wYW5lPXQub3ZlcmxheUVsZW1lbnQsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkoKX0pfSx0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe2lmKCEodGhpcy5faXNEaXNwb3NlZHx8dGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpKWlmKCF0aGlzLl9pc0luaXRpYWxSZW5kZXImJnRoaXMuX3Bvc2l0aW9uTG9ja2VkJiZ0aGlzLl9sYXN0UG9zaXRpb24pdGhpcy5yZWFwcGx5TGFzdFBvc2l0aW9uKCk7ZWxzZXt0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX29yaWdpblJlY3Q9dGhpcy5fb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zm9yKHZhciB0LGU9dGhpcy5fb3JpZ2luUmVjdCxuPXRoaXMuX292ZXJsYXlSZWN0LHI9dGhpcy5fdmlld3BvcnRSZWN0LGk9W10sbz0wLGE9dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9dGhpcy5fZ2V0T3JpZ2luUG9pbnQoZSxzKSx1PXRoaXMuX2dldE92ZXJsYXlQb2ludChsLG4scyksYz10aGlzLl9nZXRPdmVybGF5Rml0KHUsbixyLHMpO2lmKGMuaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihzLGwpO3RoaXMuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnMoYyx1LHIpP2kucHVzaCh7cG9zaXRpb246cyxvcmlnaW46bCxvdmVybGF5UmVjdDpuLGJvdW5kaW5nQm94UmVjdDp0aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QobCxzKX0pOighdHx8dC5vdmVybGF5Rml0LnZpc2libGVBcmVhPGMudmlzaWJsZUFyZWEpJiYodD17b3ZlcmxheUZpdDpjLG92ZXJsYXlQb2ludDp1LG9yaWdpblBvaW50OmwscG9zaXRpb246cyxvdmVybGF5UmVjdDpufSl9aWYoaS5sZW5ndGgpe2Zvcih2YXIgaD1udWxsLGY9LTEscD0wLGQ9aTtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXSx5PW0uYm91bmRpbmdCb3hSZWN0LndpZHRoKm0uYm91bmRpbmdCb3hSZWN0LmhlaWdodCoobS5wb3NpdGlvbi53ZWlnaHR8fDEpO3k+ZiYmKGY9eSxoPW0pfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oaC5wb3NpdGlvbixoLm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHQucG9zaXRpb24sdC5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbih0LnBvc2l0aW9uLHQub3JpZ2luUG9pbnQpfX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5kZXRhY2goKSx0aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2lzRGlzcG9zZWQ9ITApfSx0LnByb3RvdHlwZS5yZWFwcGx5TGFzdFBvc2l0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2lzRGlzcG9zZWQmJighdGhpcy5fcGxhdGZvcm18fHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcikpe3RoaXMuX29yaWdpblJlY3Q9dGhpcy5fb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCk7dmFyIHQ9dGhpcy5fbGFzdFBvc2l0aW9ufHx0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnNbMF0sZT10aGlzLl9nZXRPcmlnaW5Qb2ludCh0aGlzLl9vcmlnaW5SZWN0LHQpO3RoaXMuX2FwcGx5UG9zaXRpb24odCxlKX19LHQucHJvdG90eXBlLndpdGhTY3JvbGxhYmxlQ29udGFpbmVycz1mdW5jdGlvbih0KXt0aGlzLnNjcm9sbGFibGVzPXR9LHQucHJvdG90eXBlLndpdGhQb3NpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LC0xPT09dC5pbmRleE9mKHRoaXMuX2xhc3RQb3NpdGlvbikmJih0aGlzLl9sYXN0UG9zaXRpb249bnVsbCksdGhpcy5fdmFsaWRhdGVQb3NpdGlvbnMoKSx0aGlzfSx0LnByb3RvdHlwZS53aXRoVmlld3BvcnRNYXJnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aEZsZXhpYmxlRGltZW5zaW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz10LHRoaXN9LHQucHJvdG90eXBlLndpdGhHcm93QWZ0ZXJPcGVuPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fZ3Jvd0FmdGVyT3Blbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhQdXNoPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fY2FuUHVzaD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhMb2NrZWRQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPXQsdGhpc30sdC5wcm90b3R5cGUuc2V0T3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCBpbnN0YW5jZW9mIGRuP3QubmF0aXZlRWxlbWVudDp0LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9LHQucHJvdG90eXBlLndpdGhEZWZhdWx0T2Zmc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9LHQucHJvdG90eXBlLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I9dCx0aGlzfSx0LnByb3RvdHlwZS5fZ2V0T3JpZ2luUG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtpZigiY2VudGVyIj09ZS5vcmlnaW5YKW49dC5sZWZ0K3Qud2lkdGgvMjtlbHNle3ZhciByPXRoaXMuX2lzUnRsKCk/dC5yaWdodDp0LmxlZnQsaT10aGlzLl9pc1J0bCgpP3QubGVmdDp0LnJpZ2h0O249InN0YXJ0Ij09ZS5vcmlnaW5YP3I6aX1yZXR1cm57eDpuLHk6ImNlbnRlciI9PWUub3JpZ2luWT90LnRvcCt0LmhlaWdodC8yOiJ0b3AiPT1lLm9yaWdpblk/dC50b3A6dC5ib3R0b219fSx0LnByb3RvdHlwZS5fZ2V0T3ZlcmxheVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iY2VudGVyIj09bi5vdmVybGF5WD8tZS53aWR0aC8yOiJzdGFydCI9PT1uLm92ZXJsYXlYP3RoaXMuX2lzUnRsKCk/LWUud2lkdGg6MDp0aGlzLl9pc1J0bCgpPzA6LWUud2lkdGgse3g6dC54K3IseTp0LnkrKCJjZW50ZXIiPT1uLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1uLm92ZXJsYXlZPzA6LWUuaGVpZ2h0KX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5Rml0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxvPXQueSxhPXRoaXMuX2dldE9mZnNldChyLCJ4Iikscz10aGlzLl9nZXRPZmZzZXQociwieSIpO2EmJihpKz1hKSxzJiYobys9cyk7dmFyIGw9MC1vLHU9bytlLmhlaWdodC1uLmhlaWdodCxjPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUud2lkdGgsMC1pLGkrZS53aWR0aC1uLndpZHRoKSxoPXRoaXMuX3N1YnRyYWN0T3ZlcmZsb3dzKGUuaGVpZ2h0LGwsdSksZj1jKmg7cmV0dXJue3Zpc2libGVBcmVhOmYsaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQ6ZS53aWR0aCplLmhlaWdodD09PWYsZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5Omg9PT1lLmhlaWdodCxmaXRzSW5WaWV3cG9ydEhvcml6b250YWxseTpjPT1lLndpZHRofX0sdC5wcm90b3R5cGUuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4pe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7dmFyIHI9bi5ib3R0b20tZS55LGk9bi5yaWdodC1lLngsbz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCxhPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluV2lkdGg7cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1vJiZvPD1yKSYmKHQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPWEmJmE8PWkpfX0sdC5wcm90b3R5cGUuX3B1c2hPdmVybGF5T25TY3JlZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl92aWV3cG9ydFJlY3Qscj1NYXRoLm1heCh0LngrZS53aWR0aC1uLnJpZ2h0LDApLGk9TWF0aC5tYXgodC55K2UuaGVpZ2h0LW4uYm90dG9tLDApLG89TWF0aC5tYXgobi50b3AtdC55LDApLGE9TWF0aC5tYXgobi5sZWZ0LXQueCwwKTtyZXR1cm57eDp0LngrKGUud2lkdGg8PW4ud2lkdGg/YXx8LXI6bi5sZWZ0LXQueCkseTp0LnkrKGUuaGVpZ2h0PD1uLmhlaWdodD9vfHwtaTpuLnRvcC10LnkpfX0sdC5wcm90b3R5cGUuX2FwcGx5UG9zaXRpb249ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHRoaXMuX2xhc3RQb3NpdGlvbj10LHRoaXMuX3Bvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9ucz4wKXt2YXIgbj1uZXcgZnVuY3Rpb24odCxlKXt0aGlzLmNvbm5lY3Rpb25QYWlyPXQsdGhpcy5zY3JvbGxhYmxlVmlld1Byb3BlcnRpZXM9ZX0odCx0aGlzLl9nZXRTY3JvbGxWaXNpYmlsaXR5KCkpO3RoaXMuX3Bvc2l0aW9uQ2hhbmdlcy5uZXh0KG4pfXRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMX0sdC5wcm90b3R5cGUuX3NldFRyYW5zZm9ybU9yaWdpbj1mdW5jdGlvbih0KXtpZih0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil7dmFyIGUsbj10aGlzLl9ib3VuZGluZ0JveC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKSxyPXQub3ZlcmxheVk7ZT0iY2VudGVyIj09PXQub3ZlcmxheVg/ImNlbnRlciI6dGhpcy5faXNSdGwoKT8ic3RhcnQiPT09dC5vdmVybGF5WD8icmlnaHQiOiJsZWZ0Ijoic3RhcnQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0Ijtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj1lKyIgIityfX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvLGEscyxsPXRoaXMuX3ZpZXdwb3J0UmVjdCx1PXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXI9dC55LG49bC5ib3R0b20tdC55O2Vsc2UgaWYoImJvdHRvbSI9PT1lLm92ZXJsYXlZKW49bC5oZWlnaHQtKGk9bC5oZWlnaHQtdC55KzIqdGhpcy5fdmlld3BvcnRNYXJnaW4pK3RoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2V7dmFyIGM9TWF0aC5taW4obC5ib3R0b20tdC55LHQueS1sLmxlZnQpLGg9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7cj10LnktYywobj0yKmMpPmgmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocj10LnktaC8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiF1fHwic3RhcnQiPT09ZS5vdmVybGF5WCYmdSlzPWwucmlnaHQtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLG89dC54LWwubGVmdDtlbHNlIGlmKCJzdGFydCI9PT1lLm92ZXJsYXlYJiYhdXx8ImVuZCI9PT1lLm92ZXJsYXlYJiZ1KWE9dC54LG89bC5yaWdodC10Lng7ZWxzZXtjPU1hdGgubWluKGwucmlnaHQtdC54LHQueC1sLnRvcCk7dmFyIGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDthPXQueC1jLChvPTIqYyk+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihhPXQueC1mLzIpfXJldHVybnt0b3A6cixsZWZ0OmEsYm90dG9tOmkscmlnaHQ6cyx3aWR0aDpvLGhlaWdodDpufX0sdC5wcm90b3R5cGUuX3NldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHQsZSk7dGhpcy5faXNJbml0aWFsUmVuZGVyfHx0aGlzLl9ncm93QWZ0ZXJPcGVufHwobi5oZWlnaHQ9TWF0aC5taW4obi5oZWlnaHQsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQpLG4ud2lkdGg9TWF0aC5taW4obi53aWR0aCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoKSk7dmFyIHI9e307aWYodGhpcy5faGFzRXhhY3RQb3NpdGlvbigpKXIudG9wPXIubGVmdD0iMCIsci5ib3R0b209ci5yaWdodD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle3ZhciBpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1ibChuLmhlaWdodCksci50b3A9Ymwobi50b3ApLHIuYm90dG9tPWJsKG4uYm90dG9tKSxyLndpZHRoPWJsKG4ud2lkdGgpLHIubGVmdD1ibChuLmxlZnQpLHIucmlnaHQ9Ymwobi5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLGkmJihyLm1heEhlaWdodD1ibChpKSksbyYmKHIubWF4V2lkdGg9YmwobykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9bixJdSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX0sdC5wcm90b3R5cGUuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXM9ZnVuY3Rpb24oKXtJdSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIwIixsZWZ0OiIwIixyaWdodDoiMCIsYm90dG9tOiIwIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pfSx0LnByb3RvdHlwZS5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbigpe0l1KHRoaXMuX3BhbmUuc3R5bGUse3RvcDoiIixsZWZ0OiIiLGJvdHRvbToiIixyaWdodDoiIixwb3NpdGlvbjoiIn0pfSx0LnByb3RvdHlwZS5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTt0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCk/KEl1KG4sdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQpKSxJdShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVgoZSx0KSkpOm4ucG9zaXRpb249InN0YXRpYyI7dmFyIHI9IiIsaT10aGlzLl9nZXRPZmZzZXQoZSwieCIpLG89dGhpcy5fZ2V0T2Zmc2V0KGUsInkiKTtpJiYocis9InRyYW5zbGF0ZVgoIitpKyJweCkgIiksbyYmKHIrPSJ0cmFuc2xhdGVZKCIrbysicHgpIiksbi50cmFuc2Zvcm09ci50cmltKCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heEhlaWdodCYmKG4ubWF4SGVpZ2h0PSIiKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMmJnRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4V2lkdGgmJihuLm1heFdpZHRoPSIiKSxJdSh0aGlzLl9wYW5lLnN0eWxlLG4pfSx0LnByb3RvdHlwZS5fZ2V0RXhhY3RPdmVybGF5WT1mdW5jdGlvbih0LGUpe3ZhciBuPXt0b3A6bnVsbCxib3R0b206bnVsbH0scj10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihyPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4ocix0aGlzLl9vdmVybGF5UmVjdCkpLCJib3R0b20iPT09dC5vdmVybGF5WT9uLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShyLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOm4udG9wPWJsKHIueSksbn0sdC5wcm90b3R5cGUuX2dldEV4YWN0T3ZlcmxheVg9ZnVuY3Rpb24odCxlKXt2YXIgbj17bGVmdDpudWxsLHJpZ2h0Om51bGx9LHI9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYocj10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKHIsdGhpcy5fb3ZlcmxheVJlY3QpKSwicmlnaHQiPT0odGhpcy5faXNSdGwoKT8iZW5kIj09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI6ImVuZCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiKT9uLnJpZ2h0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC0oci54K3RoaXMuX292ZXJsYXlSZWN0LndpZHRoKSsicHgiOm4ubGVmdD1ibChyLngpLG59LHQucHJvdG90eXBlLl9nZXRTY3JvbGxWaXNpYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuc2Nyb2xsYWJsZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSk7cmV0dXJue2lzT3JpZ2luQ2xpcHBlZDpFdSh0LG4pLGlzT3JpZ2luT3V0c2lkZVZpZXc6Q3UodCxuKSxpc092ZXJsYXlDbGlwcGVkOkV1KGUsbiksaXNPdmVybGF5T3V0c2lkZVZpZXc6Q3UoZSxuKX19LHQucHJvdG90eXBlLl9zdWJ0cmFjdE92ZXJmbG93cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1NYXRoLm1heChlLDApfSx0KX0sdC5wcm90b3R5cGUuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGU9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxuPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt0b3A6bi50b3ArdGhpcy5fdmlld3BvcnRNYXJnaW4sbGVmdDpuLmxlZnQrdGhpcy5fdmlld3BvcnRNYXJnaW4scmlnaHQ6bi5sZWZ0K3QtdGhpcy5fdmlld3BvcnRNYXJnaW4sYm90dG9tOm4udG9wK2UtdGhpcy5fdmlld3BvcnRNYXJnaW4sd2lkdGg6dC0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLGhlaWdodDplLTIqdGhpcy5fdmlld3BvcnRNYXJnaW59fSx0LnByb3RvdHlwZS5faXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9LHQucHJvdG90eXBlLl9oYXNFeGFjdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9LHQucHJvdG90eXBlLl9nZXRPZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4ieCI9PT1lP251bGw9PXQub2Zmc2V0WD90aGlzLl9vZmZzZXRYOnQub2Zmc2V0WDpudWxsPT10Lm9mZnNldFk/dGhpcy5fb2Zmc2V0WTp0Lm9mZnNldFl9LHQucHJvdG90eXBlLl92YWxpZGF0ZVBvc2l0aW9ucz1mdW5jdGlvbigpe2lmKCF0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMubGVuZ3RoKXRocm93IEVycm9yKCJGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k6IEF0IGxlYXN0IG9uZSBwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTt0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMuZm9yRWFjaChmdW5jdGlvbih0KXtfdSgib3JpZ2luWCIsdC5vcmlnaW5YKSx2dSgib3JpZ2luWSIsdC5vcmlnaW5ZKSxfdSgib3ZlcmxheVgiLHQub3ZlcmxheVgpLHZ1KCJvdmVybGF5WSIsdC5vdmVybGF5WSl9KX0sdH0oKTtmdW5jdGlvbiBJdSh0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0W25dPWVbbl0pO3JldHVybiB0fXZhciBNdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3RoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PW5ldyBPdShuLHIsaSxvKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSkud2l0aFZpZXdwb3J0TWFyZ2luKDApLHRoaXMud2l0aEZhbGxiYWNrUG9zaXRpb24odCxlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNSdGwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvblBvc2l0aW9uQ2hhbmdlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHQpLHRoaXMuX2RpcmVjdGlvbiYmKHQuc2V0RGlyZWN0aW9uKHRoaXMuX2RpcmVjdGlvbiksdGhpcy5fZGlyZWN0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfSx0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpfSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl9LHQucHJvdG90eXBlLndpdGhGYWxsYmFja1Bvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW5ldyBmdW5jdGlvbih0LGUsbixyKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9cix0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX0odCxlLG4scik7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5wdXNoKGkpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9LHQucHJvdG90eXBlLndpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5zZXREaXJlY3Rpb24odCk6dGhpcy5fZGlyZWN0aW9uPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRYKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WSh0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhQb3NpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LnNsaWNlKCksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUuc2V0T3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0KSx0aGlzfSx0fSgpLE51PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX2p1c3RpZnlDb250ZW50PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIn1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3dpZHRoJiYhZS53aWR0aCYmdC51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl93aWR0aH0pLHRoaXMuX2hlaWdodCYmIWUuaGVpZ2h0JiZ0LnVwZGF0ZVNpemUoe2hlaWdodDp0aGlzLl9oZWlnaHR9KSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIil9LHQucHJvdG90eXBlLnRvcD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfSx0LnByb3RvdHlwZS5sZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fcmlnaHRPZmZzZXQ9IiIsdGhpcy5fbGVmdE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LXN0YXJ0Iix0aGlzfSx0LnByb3RvdHlwZS5ib3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9LHQucHJvdG90eXBlLnJpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fbGVmdE9mZnNldD0iIix0aGlzLl9yaWdodE9mZnNldD10LHRoaXMuX2p1c3RpZnlDb250ZW50PSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dH0pOnRoaXMuX3dpZHRoPXQsdGhpc30sdC5wcm90b3R5cGUuaGVpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe2hlaWdodDp0fSk6dGhpcy5faGVpZ2h0PXQsdGhpc30sdC5wcm90b3R5cGUuY2VudGVySG9yaXpvbnRhbGx5PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5sZWZ0KHQpLHRoaXMuX2p1c3RpZnlDb250ZW50PSJjZW50ZXIiLHRoaXN9LHQucHJvdG90eXBlLmNlbnRlclZlcnRpY2FsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYodGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXt2YXIgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxuPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCk7dC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9IjEwMCUiPT09bi53aWR0aD8iMCI6dGhpcy5fbGVmdE9mZnNldCx0Lm1hcmdpblRvcD0iMTAwJSI9PT1uLmhlaWdodD8iMCI6dGhpcy5fdG9wT2Zmc2V0LHQubWFyZ2luQm90dG9tPXRoaXMuX2JvdHRvbU9mZnNldCx0Lm1hcmdpblJpZ2h0PXRoaXMuX3JpZ2h0T2Zmc2V0LGUuanVzdGlmeUNvbnRlbnQ9IjEwMCUiPT09bi53aWR0aD8iZmxleC1zdGFydCI6dGhpcy5fanVzdGlmeUNvbnRlbnQsZS5hbGlnbkl0ZW1zPSIxMDAlIj09PW4uaGVpZ2h0PyJmbGV4LXN0YXJ0Ijp0aGlzLl9hbGlnbkl0ZW1zfX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sdH0oKSxSdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX3BsYXRmb3JtPW59cmV0dXJuIHQucHJvdG90eXBlLmdsb2JhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgTnV9LHQucHJvdG90eXBlLmNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IE11KGUsbix0LHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQpfSx0LnByb3RvdHlwZS5mbGV4aWJsZUNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgT3UodCx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtKX0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUoZXUpLGVlKFdzKSxlZSh0bCw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLER1PTAsTHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyxsKXt0aGlzLnNjcm9sbFN0cmF0ZWdpZXM9dCx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWUsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sdGhpcy5fcG9zaXRpb25CdWlsZGVyPXIsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPWksdGhpcy5faW5qZWN0b3I9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9kb2N1bWVudD1zLHRoaXMuX2RpcmVjdGlvbmFsaXR5PWx9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9jcmVhdGVIb3N0RWxlbWVudCgpLG49dGhpcy5fY3JlYXRlUGFuZUVsZW1lbnQoZSkscj10aGlzLl9jcmVhdGVQb3J0YWxPdXRsZXQobiksaT1uZXcgZ3UodCk7cmV0dXJuIGkuZGlyZWN0aW9uPWkuZGlyZWN0aW9ufHx0aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZSxuZXcgUHUocixlLG4saSx0aGlzLl9uZ1pvbmUsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLHRoaXMuX2RvY3VtZW50KX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfSx0LnByb3RvdHlwZS5fY3JlYXRlUGFuZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuaWQ9ImNkay1vdmVybGF5LSIrRHUrKyxlLmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LXBhbmUiKSx0LmFwcGVuZENoaWxkKGUpLGV9LHQucHJvdG90eXBlLl9jcmVhdGVIb3N0RWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZCh0KSx0fSx0LnByb3RvdHlwZS5fY3JlYXRlUG9ydGFsT3V0bGV0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcHBSZWZ8fCh0aGlzLl9hcHBSZWY9dGhpcy5faW5qZWN0b3IuZ2V0KHVuKSksbmV3IGZ1KHQsdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLHRoaXMuX2FwcFJlZix0aGlzLl9pbmplY3Rvcil9LHR9KCksanU9bmV3IG10KCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iik7ZnVuY3Rpb24gRnUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBWdT1mdW5jdGlvbigpe30sQnU9MjAsenU9bmV3IG10KCJtYXQtdG9vbHRpcC1zY3JvbGwtc3RyYXRlZ3kiKTtmdW5jdGlvbiBVdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oe3Njcm9sbFRocm90dGxlOkJ1fSl9fXZhciBIdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj10LHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1lLHRoaXMuX3Zpc2liaWxpdHk9ImluaXRpYWwiLHRoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMSx0aGlzLl9vbkhpZGU9bmV3IGl0LHRoaXMuX2lzSGFuZHNldD10aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShBbC5IYW5kc2V0KX1yZXR1cm4gdC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2hpZGVUaW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITAsdGhpcy5fc2hvd1RpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fdmlzaWJpbGl0eT0idmlzaWJsZSIsZS5fbWFya0ZvckNoZWNrKCl9LHQpfSx0LnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fc2hvd1RpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLHRoaXMuX2hpZGVUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX3Zpc2liaWxpdHk9ImhpZGRlbiIsZS5fbWFya0ZvckNoZWNrKCl9LHQpfSx0LnByb3RvdHlwZS5hZnRlckhpZGRlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkhpZGUuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmlzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiJ2aXNpYmxlIj09PXRoaXMuX3Zpc2liaWxpdHl9LHQucHJvdG90eXBlLl9hbmltYXRpb25TdGFydD1mdW5jdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMX0sdC5wcm90b3R5cGUuX2FuaW1hdGlvbkRvbmU9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0YXRlOyJoaWRkZW4iIT09ZXx8dGhpcy5pc1Zpc2libGUoKXx8dGhpcy5fb25IaWRlLm5leHQoKSwidmlzaWJsZSIhPT1lJiYiaGlkZGVuIiE9PWV8fCh0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITApfSx0LnByb3RvdHlwZS5faGFuZGxlQm9keUludGVyYWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fY2xvc2VPbkludGVyYWN0aW9uJiZ0aGlzLmhpZGUoMCl9LHQucHJvdG90eXBlLl9tYXJrRm9yQ2hlY2s9ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0sdH0oKSxxdT1mdW5jdGlvbigpe30sR3U9bmV3IG10KCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZWUoV3MpfX0pLFd1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdlPW5ldyB6ZSx0JiYodGhpcy52YWx1ZT0odC5ib2R5P3QuYm9keS5kaXI6bnVsbCl8fCh0LmRvY3VtZW50RWxlbWVudD90LmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShHdSw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFF1PWZ1bmN0aW9uKCl7fSxLdT1udWxsO2Z1bmN0aW9uIFp1KCl7cmV0dXJuIEt1fXZhciBZdSxYdT17Y2xhc3M6ImNsYXNzTmFtZSIsaW5uZXJIdG1sOiJpbm5lckhUTUwiLHJlYWRvbmx5OiJyZWFkT25seSIsdGFiaW5kZXg6InRhYkluZGV4In0sJHU9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LEp1PXtBOiIxIixCOiIyIixDOiIzIixEOiI0IixFOiI1IixGOiI2IixHOiI3IixIOiI4IixJOiI5IixKOiIqIixLOiIrIixNOiItIixOOiIuIixPOiIvIiwiYCI6IjAiLCJceDkwIjoiTnVtTG9jayJ9O3h0Lk5vZGUmJihZdT14dC5Ob2RlLnByb3RvdHlwZS5jb250YWluc3x8ZnVuY3Rpb24odCl7cmV0dXJuISEoMTYmdGhpcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSl9KTt2YXIgdGMsZWM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInBhcnNlIG5vdCBpbXBsZW1lbnRlZCIpfSxlLm1ha2VDdXJyZW50PWZ1bmN0aW9uKCl7dmFyIHQ7dD1uZXcgZSxLdXx8KEt1PXQpfSxlLnByb3RvdHlwZS5oYXNQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHR9LGUucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt0W2VdPW59LGUucHJvdG90eXBlLmdldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV19LGUucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbih0LGUsbil7dmFyIHI7KHI9dClbZV0uYXBwbHkocixsKG4pKX0sZS5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJihjb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IodCk6Y29uc29sZS5sb2codCkpfSxlLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cD1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cEVuZD1mdW5jdGlvbigpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCYmd2luZG93LmNvbnNvbGUuZ3JvdXBFbmQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRyVG9Qcm9wTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFh1fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFl1LmNhbGwodCxlKX0sZS5wcm90b3R5cGUucXVlcnlTZWxlY3Rvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3IoZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKGUpfSxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUsbil7dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9LGUucHJvdG90eXBlLm9uQW5kQ2FuY2VsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSksZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCExKX19LGUucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24odCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9LGUucHJvdG90eXBlLmNyZWF0ZU1vdXNlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5jcmVhdGVFdmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUV2ZW50KCJFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCEwKSxlfSxlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5yZXR1cm5WYWx1ZT0hMX0sZS5wcm90b3R5cGUuaXNQcmV2ZW50ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVmYXVsdFByZXZlbnRlZHx8bnVsbCE9dC5yZXR1cm5WYWx1ZSYmIXQucmV0dXJuVmFsdWV9LGUucHJvdG90eXBlLmdldElubmVySFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbm5lckhUTUx9LGUucHJvdG90eXBlLmdldFRlbXBsYXRlQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4iY29udGVudCJpbiB0JiZ0aGlzLmlzVGVtcGxhdGVFbGVtZW50KHQpP3QuY29udGVudDpudWxsfSxlLnByb3RvdHlwZS5nZXRPdXRlckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0ZXJIVE1MfSxlLnByb3RvdHlwZS5ub2RlTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZX0sZS5wcm90b3R5cGUubm9kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVWYWx1ZX0sZS5wcm90b3R5cGUudHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSxlLnByb3RvdHlwZS5jb250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc1Byb3BlcnR5KHQsImNvbnRlbnQiKT90LmNvbnRlbnQ6dH0sZS5wcm90b3R5cGUuZmlyc3RDaGlsZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5maXJzdENoaWxkfSxlLnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sZS5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkTm9kZXN9LGUucHJvdG90eXBlLmNoaWxkTm9kZXNBc0xpc3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2hpbGROb2RlcyxuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn0sZS5wcm90b3R5cGUuY2xlYXJOb2Rlcz1mdW5jdGlvbih0KXtmb3IoO3QuZmlyc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpfSxlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dC5yZW1vdmVDaGlsZChlKX0sZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKHQsZSxuKXt0LnJlcGxhY2VDaGlsZChlLG4pfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHR9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dC5pbnNlcnRCZWZvcmUobixlKX0sZS5wcm90b3R5cGUuaW5zZXJ0QWxsQmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXtuLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQuaW5zZXJ0QmVmb3JlKG4sZSl9KX0sZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZS5uZXh0U2libGluZyl9LGUucHJvdG90eXBlLnNldElubmVySFRNTD1mdW5jdGlvbih0LGUpe3QuaW5uZXJIVE1MPWV9LGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dENvbnRlbnR9LGUucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0LnRleHRDb250ZW50PWV9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3QudmFsdWU9ZX0sZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja2VkfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkPWZ1bmN0aW9uKHQsZSl7dC5jaGVja2VkPWV9LGUucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlQ29tbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBlLmlubmVySFRNTD10LGV9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybihuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnROUyh0LGUpfSxlLnByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZVRleHROb2RlKHQpfSxlLnByb3RvdHlwZS5jcmVhdGVTY3JpcHRUYWc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPShuPW58fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoIlNDUklQVCIpO3JldHVybiByLnNldEF0dHJpYnV0ZSh0LGUpLHJ9LGUucHJvdG90eXBlLmNyZWF0ZVN0eWxlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPShlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobix0aGlzLmNyZWF0ZVRleHROb2RlKHQsZSkpLG59LGUucHJvdG90eXBlLmNyZWF0ZVNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY3JlYXRlU2hhZG93Um9vdCgpfSxlLnByb3RvdHlwZS5nZXRTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEhvc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9zdH0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX0sZS5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSl9LGUucHJvdG90eXBlLmNsYXNzTGlzdD1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5jbGFzc0xpc3QsMCl9LGUucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX0sZS5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSl9LGUucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0LnN0eWxlW2VdPW59LGUucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtlXT0iIn0sZS5wcm90b3R5cGUuZ2V0U3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdHlsZVtlXX0sZS5wcm90b3R5cGUuaGFzU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZ2V0U3R5bGUodCxlKXx8IiI7cmV0dXJuIG4/cj09bjpyLmxlbmd0aD4wfSxlLnByb3RvdHlwZS50YWdOYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhZ05hbWV9LGUucHJvdG90eXBlLmF0dHJpYnV0ZU1hcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IE1hcCxuPXQuYXR0cmlidXRlcyxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW4uaXRlbShyKTtlLnNldChpLm5hbWUsaS52YWx1ZSl9cmV0dXJuIGV9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmhhc0F0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuaGFzQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lmhhc0F0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmdldEF0dHJpYnV0ZU5TKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dC5zZXRBdHRyaWJ1dGUoZSxuKX0sZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4scil7dC5zZXRBdHRyaWJ1dGVOUyhlLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQXR0cmlidXRlKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUsbil7dC5yZW1vdmVBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS50ZW1wbGF0ZUF3YXJlUm9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90aGlzLmNvbnRlbnQodCk6dH0sZS5wcm90b3R5cGUuY3JlYXRlSHRtbERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9LGUucHJvdG90eXBlLmdldERlZmF1bHREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaCh0KXtyZXR1cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19fSxlLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50aXRsZX0sZS5wcm90b3R5cGUuc2V0VGl0bGU9ZnVuY3Rpb24odCxlKXt0LnRpdGxlPWV8fCIifSxlLnByb3RvdHlwZS5lbGVtZW50TWF0Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiEhdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYodC5tYXRjaGVzJiZ0Lm1hdGNoZXMoZSl8fHQubXNNYXRjaGVzU2VsZWN0b3ImJnQubXNNYXRjaGVzU2VsZWN0b3IoZSl8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yJiZ0LndlYmtpdE1hdGNoZXNTZWxlY3RvcihlKSl9LGUucHJvdG90eXBlLmlzVGVtcGxhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzRWxlbWVudE5vZGUodCkmJiJURU1QTEFURSI9PT10Lm5vZGVOYW1lfSxlLnByb3RvdHlwZS5pc1RleHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREV9LGUucHJvdG90eXBlLmlzQ29tbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkNPTU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaXNFbGVtZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSxlLnByb3RvdHlwZS5oYXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10LnNoYWRvd1Jvb3QmJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sZS5wcm90b3R5cGUuaXNTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH0sZS5wcm90b3R5cGUuaW1wb3J0SW50b0RvYz1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLnRlbXBsYXRlQXdhcmVSb290KHQpLCEwKX0sZS5wcm90b3R5cGUuYWRvcHROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5hZG9wdE5vZGUodCl9LGUucHJvdG90eXBlLmdldEhyZWY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKCJocmVmIil9LGUucHJvdG90eXBlLmdldEV2ZW50S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5O2lmKG51bGw9PWUpe2lmKG51bGw9PShlPXQua2V5SWRlbnRpZmllcikpcmV0dXJuIlVuaWRlbnRpZmllZCI7ZS5zdGFydHNXaXRoKCJVKyIpJiYoZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGUuc3Vic3RyaW5nKDIpLDE2KSksMz09PXQubG9jYXRpb24mJkp1Lmhhc093blByb3BlcnR5KGUpJiYoZT1KdVtlXSkpfXJldHVybiAkdVtlXXx8ZX0sZS5wcm90b3R5cGUuZ2V0R2xvYmFsRXZlbnRUYXJnZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4id2luZG93Ij09PWU/d2luZG93OiJkb2N1bWVudCI9PT1lP3Q6ImJvZHkiPT09ZT90LmJvZHk6bnVsbH0sZS5wcm90b3R5cGUuZ2V0SGlzdG9yeT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuaGlzdG9yeX0sZS5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmxvY2F0aW9ufSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbih0KXt2YXIgZSxuPW5jfHwobmM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpKT9uYy5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1uP251bGw6KGU9bix0Y3x8KHRjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksdGMuc2V0QXR0cmlidXRlKCJocmVmIixlKSwiLyI9PT10Yy5wYXRobmFtZS5jaGFyQXQoMCk/dGMucGF0aG5hbWU6Ii8iK3RjLnBhdGhuYW1lKX0sZS5wcm90b3R5cGUucmVzZXRCYXNlRWxlbWVudD1mdW5jdGlvbigpe25jPW51bGx9LGUucHJvdG90eXBlLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH0sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2Usbil9LGUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2UpfSxlLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHQpfSxlLnByb3RvdHlwZS5zdXBwb3J0c1dlYkFuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlfSxlLnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdygpOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5zdXBwb3J0c0Nvb2tpZXM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0Q29va2llPWZ1bmN0aW9uKHQpe3JldHVybiBMcyhkb2N1bWVudC5jb29raWUsdCl9LGUucHJvdG90eXBlLnNldENvb2tpZT1mdW5jdGlvbih0LGUpe2RvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklDb21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0sZX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGw7dHJ5e3ZhciBuPWUuY3JlYXRlRWxlbWVudCgiZGl2Iixkb2N1bWVudCk7aWYobnVsbCE9ZS5nZXRTdHlsZShuLCJhbmltYXRpb25OYW1lIikpZS5fYW5pbWF0aW9uUHJlZml4PSIiO2Vsc2UgZm9yKHZhciByPVsiV2Via2l0IiwiTW96IiwiTyIsIm1zIl0saT0wO2k8ci5sZW5ndGg7aSsrKWlmKG51bGwhPWUuZ2V0U3R5bGUobixyW2ldKyJBbmltYXRpb25OYW1lIikpe2UuX2FuaW1hdGlvblByZWZpeD0iLSIrcltpXS50b0xvd2VyQ2FzZSgpKyItIjticmVha312YXIgbz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtudWxsIT1lLmdldFN0eWxlKG4sdCkmJihlLl90cmFuc2l0aW9uRW5kPW9bdF0pfSl9Y2F0Y2godCl7ZS5fYW5pbWF0aW9uUHJlZml4PW51bGwsZS5fdHJhbnNpdGlvbkVuZD1udWxsfXJldHVybiBlfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuZ2V0RGlzdHJpYnV0ZWROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREaXN0cmlidXRlZE5vZGVzKCl9LGUucHJvdG90eXBlLnJlc29sdmVBbmRTZXRIcmVmPWZ1bmN0aW9uKHQsZSxuKXt0LmhyZWY9bnVsbD09bj9lOmUrIi8uLi8iK259LGUucHJvdG90eXBlLnN1cHBvcnRzRE9NRXZlbnRzPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnN1cHBvcnRzTmF0aXZlU2hhZG93RE9NPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRvY3VtZW50LmJvZHkuY3JlYXRlU2hhZG93Um9vdH0sZS5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uUHJlZml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblByZWZpeD90aGlzLl9hbmltYXRpb25QcmVmaXg6IiJ9LGUucHJvdG90eXBlLmdldFRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZD90aGlzLl90cmFuc2l0aW9uRW5kOiIifSxlLnByb3RvdHlwZS5zdXBwb3J0c0FuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hbmltYXRpb25QcmVmaXgmJm51bGwhPXRoaXMuX3RyYW5zaXRpb25FbmR9LGV9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMucmVzb3VyY2VMb2FkZXJUeXBlPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXR0clRvUHJvcE1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRyVG9Qcm9wTWFwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXR0clRvUHJvcE1hcD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCkpKSxuYz1udWxsLHJjPVdzO2Z1bmN0aW9uIGljKCl7cmV0dXJuISF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGV9dmFyIG9jPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kb2M9ZSxuLl9pbml0KCksbn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7dGhpcy5sb2NhdGlvbj1adSgpLmdldExvY2F0aW9uKCksdGhpcy5faGlzdG9yeT1adSgpLmdldEhpc3RvcnkoKX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWZGcm9tRE9NPWZ1bmN0aW9uKCl7cmV0dXJuIFp1KCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX0sZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXtadSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93IikuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHQsITEpfSxlLnByb3RvdHlwZS5vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24odCl7WnUoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQsITEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGhuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aG5hbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWFyY2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoYXNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4pe2ljKCk/dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4pe2ljKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUodCxlLG4pOnRoaXMubG9jYXRpb24uaGFzaD1ufSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9oaXN0b3J5LmJhY2soKX0sZS5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVyblt7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6SXQsYXJnczpbcmNdfV19XX0sZX0oeHMpLGFjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dCx0aGlzLl9kb209WnUoKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkVGFnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9LHQucHJvdG90eXBlLmFkZFRhZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksdD90LnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiByJiZ0LnB1c2gobi5fZ2V0T3JDcmVhdGVFbGVtZW50KHIsZSkpLHR9LFtdKTpbXX0sdC5wcm90b3R5cGUuZ2V0VGFnPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLl9kb20ucXVlcnlTZWxlY3Rvcih0aGlzLl9kb2MsIm1ldGFbIit0KyJdIil8fG51bGx9LHQucHJvdG90eXBlLmdldFRhZ3M9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuW107dmFyIGU9dGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fZG9jLCJtZXRhWyIrdCsiXSIpO3JldHVybiBlP1tdLnNsaWNlLmNhbGwoZSk6W119LHQucHJvdG90eXBlLnVwZGF0ZVRhZz1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2U9ZXx8dGhpcy5fcGFyc2VTZWxlY3Rvcih0KTt2YXIgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZVRhZz1mdW5jdGlvbih0KXt0aGlzLnJlbW92ZVRhZ0VsZW1lbnQodGhpcy5nZXRUYWcodCkpfSx0LnByb3RvdHlwZS5yZW1vdmVUYWdFbGVtZW50PWZ1bmN0aW9uKHQpe3QmJnRoaXMuX2RvbS5yZW1vdmUodCl9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksIWUpe3ZhciBuPXRoaXMuX3BhcnNlU2VsZWN0b3IodCkscj10aGlzLmdldFRhZyhuKTtpZihyJiZ0aGlzLl9jb250YWluc0F0dHJpYnV0ZXModCxyKSlyZXR1cm4gcn12YXIgaT10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3RoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0LGkpO3ZhciBvPXRoaXMuX2RvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0aGlzLl9kb2MsImhlYWQiKVswXTtyZXR1cm4gdGhpcy5fZG9tLmFwcGVuZENoaWxkKG8saSksaX0sdC5wcm90b3R5cGUuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIG4uX2RvbS5zZXRBdHRyaWJ1dGUoZSxyLHRbcl0pfSksZX0sdC5wcm90b3R5cGUuX3BhcnNlU2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lPyJuYW1lIjoicHJvcGVydHkiO3JldHVybiBlKyc9IicrdFtlXSsnIid9LHQucHJvdG90eXBlLl9jb250YWluc0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0KS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gbi5fZG9tLmdldEF0dHJpYnV0ZShlLHIpPT09dFtyXX0pfSx0fSgpLHNjPW5ldyBtdCgiVFJBTlNJVElPTl9JRCIpLGxjPVt7cHJvdmlkZTpkZSx1c2VGYWN0b3J5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXtuLmdldChtZSkuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3ZhciBuPVp1KCk7QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KG4ucXVlcnlTZWxlY3RvckFsbChlLCJzdHlsZVtuZy10cmFuc2l0aW9uXSIpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZ2V0QXR0cmlidXRlKGUsIm5nLXRyYW5zaXRpb24iKT09PXR9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJlbW92ZSh0KX0pfSl9fSxkZXBzOltzYyxyYyxWdF0sbXVsdGk6ITB9XSx1Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuaW5pdD1mdW5jdGlvbigpe3ZhciBlO2U9bmV3IHQsJGU9ZX0sdC5wcm90b3R5cGUuYWRkVG9XaW5kb3c9ZnVuY3Rpb24odCl7eHQuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciByPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiByfSx4dC5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcz1mdW5jdGlvbigpe3JldHVybiB0LmdldEFsbFRlc3RhYmlsaXRpZXMoKX0seHQuZ2V0QWxsQW5ndWxhclJvb3RFbGVtZW50cz1mdW5jdGlvbigpe3JldHVybiB0LmdldEFsbFJvb3RFbGVtZW50cygpfSx4dC5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KHh0LmZyYW1ld29ya1N0YWJpbGl6ZXJzPVtdKSx4dC5mcmFtZXdvcmtTdGFiaWxpemVycy5wdXNoKGZ1bmN0aW9uKHQpe3ZhciBlPXh0LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxyPSExLGk9ZnVuY3Rpb24oZSl7cj1yfHxlLDA9PS0tbiYmdChyKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShpKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgcj10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1yP3I6bj9adSgpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LFp1KCkuZ2V0SG9zdChlKSwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxadSgpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCksY2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RvYz10fXJldHVybiB0LnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3JldHVybiBadSgpLmdldFRpdGxlKHRoaXMuX2RvYyl9LHQucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKHQpe1p1KCkuc2V0VGl0bGUodGhpcy5fZG9jLHQpfSx0fSgpO2Z1bmN0aW9uIGhjKHQsZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBDT01QSUxFRCYmQ09NUElMRUR8fCgoeHQubmc9eHQubmd8fHt9KVt0XT1lKX12YXIgZmM9e0FwcGxpY2F0aW9uUmVmOnVuLE5nWm9uZTpVZX07ZnVuY3Rpb24gcGModCl7cmV0dXJuIFRuKHQpfXZhciBkYz1uZXcgbXQoIkV2ZW50TWFuYWdlclBsdWdpbnMiKSxtYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX3pvbmU9ZSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYW5hZ2VyPW59KSx0aGlzLl9wbHVnaW5zPXQuc2xpY2UoKS5yZXZlcnNlKCl9cmV0dXJuIHQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGUpLmFkZEV2ZW50TGlzdGVuZXIodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRHbG9iYWxFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuZ2V0Wm9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSx0LnByb3RvdHlwZS5fZmluZFBsdWdpbkZvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQodCk7aWYoZSlyZXR1cm4gZTtmb3IodmFyIG49dGhpcy5fcGx1Z2lucyxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07aWYoaS5zdXBwb3J0cyh0KSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KHQsaSksaX10aHJvdyBuZXcgRXJyb3IoIk5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAiK3QpfSx0fSgpLHljPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9WnUoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsdCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgIityKyIgZm9yIGV2ZW50ICIrZSk7cmV0dXJuIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLGUsbil9LHR9KCksZ2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fc3R5bGVzU2V0PW5ldyBTZXR9cmV0dXJuIHQucHJvdG90eXBlLmFkZFN0eWxlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49bmV3IFNldDt0LmZvckVhY2goZnVuY3Rpb24odCl7ZS5fc3R5bGVzU2V0Lmhhcyh0KXx8KGUuX3N0eWxlc1NldC5hZGQodCksbi5hZGQodCkpfSksdGhpcy5vblN0eWxlc0FkZGVkKG4pfSx0LnByb3RvdHlwZS5vblN0eWxlc0FkZGVkPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0QWxsU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fc3R5bGVzU2V0KX0sdH0oKSx2Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9zdE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5oZWFkKSxufXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuX2FkZFN0eWxlc1RvSG9zdD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uX2RvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3IudGV4dENvbnRlbnQ9dCxuLl9zdHlsZU5vZGVzLmFkZChlLmFwcGVuZENoaWxkKHIpKX0pfSxlLnByb3RvdHlwZS5hZGRIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2FkZFN0eWxlc1RvSG9zdCh0aGlzLl9zdHlsZXNTZXQsdCksdGhpcy5faG9zdE5vZGVzLmFkZCh0KX0sZS5wcm90b3R5cGUucmVtb3ZlSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9ob3N0Tm9kZXMuZGVsZXRlKHQpfSxlLnByb3RvdHlwZS5vblN0eWxlc0FkZGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5faG9zdE5vZGVzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUuX2FkZFN0eWxlc1RvSG9zdCh0LG4pfSl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVOb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBadSgpLnJlbW92ZSh0KX0pfSxlfShnYyksX2M9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LGJjPS8lQ09NUCUvZyx3Yz0iX25naG9zdC0lQ09NUCUiLHhjPSJfbmdjb250ZW50LSVDT01QJSI7ZnVuY3Rpb24gQ2ModCxlLG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO0FycmF5LmlzQXJyYXkoaSk/Q2ModCxpLG4pOihpPWkucmVwbGFjZShiYyx0KSxuLnB1c2goaSkpfXJldHVybiBufWZ1bmN0aW9uIEVjKHQpe3JldHVybiBmdW5jdGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fXZhciBTYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMucmVuZGVyZXJCeUNvbXBJZD1uZXcgTWFwLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5ldyBrYyh0KX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXtpZighdHx8IWUpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO3N3aXRjaChlLmVuY2Fwc3VsYXRpb24pe2Nhc2UgbmUuRW11bGF0ZWQ6dmFyIG49dGhpcy5yZW5kZXJlckJ5Q29tcElkLmdldChlLmlkKTtyZXR1cm4gbnx8KG49bmV3IE9jKHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMuc2hhcmVkU3R5bGVzSG9zdCxlKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGUuaWQsbikpLG4uYXBwbHlUb0hvc3QodCksbjtjYXNlIG5lLk5hdGl2ZTpyZXR1cm4gbmV3IEljKHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMuc2hhcmVkU3R5bGVzSG9zdCx0LGUpO2RlZmF1bHQ6aWYoIXRoaXMucmVuZGVyZXJCeUNvbXBJZC5oYXMoZS5pZCkpe3ZhciByPUNjKGUuaWQsZS5zdHlsZXMsW10pO3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMociksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLHRoaXMuZGVmYXVsdFJlbmRlcmVyKX1yZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXJ9fSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSx0fSgpLGtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKF9jW2VdLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3QuYXBwZW5kQ2hpbGQoZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dCYmdC5pbnNlcnRCZWZvcmUoZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0JiZ0LnJlbW92ZUNoaWxkKGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT0ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0O2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHNlbGVjdG9yICInK3QrJyIgZGlkIG5vdCBtYXRjaCBhbnkgZWxlbWVudHMnKTtyZXR1cm4gZS50ZXh0Q29udGVudD0iIixlfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGV9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7aWYocil7ZT1yKyI6IitlO3ZhciBpPV9jW3JdO2k/dC5zZXRBdHRyaWJ1dGVOUyhpLGUsbik6dC5zZXRBdHRyaWJ1dGUoZSxuKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7aWYobil7dmFyIHI9X2Nbbl07cj90LnJlbW92ZUF0dHJpYnV0ZU5TKHIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUobisiOiIrZSl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixyKXtyJmZuLkRhc2hDYXNlP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxuLHImZm4uSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPW59LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtuJmZuLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe0FjKGUsInByb3BlcnR5IiksdFtlXT1ufSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3Qubm9kZVZhbHVlPWV9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEFjKGUsImxpc3RlbmVyIiksInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLEVjKG4pKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxFYyhuKSl9LHR9KCksVGM9IkAiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gQWModCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1UYyl0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIHRoZSBzeW50aGV0aWMgIitlKyIgIit0KycuIFBsZWFzZSBpbmNsdWRlIGVpdGhlciAiQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUiIG9yICJOb29wQW5pbWF0aW9uc01vZHVsZSIgaW4geW91ciBhcHBsaWNhdGlvbi4nKX12YXIgUGMsT2M9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7aS5jb21wb25lbnQ9cjt2YXIgbz1DYyhyLmlkLHIuc3R5bGVzLFtdKTtyZXR1cm4gbi5hZGRTdHlsZXMobyksaS5jb250ZW50QXR0cj14Yy5yZXBsYWNlKGJjLHIuaWQpLGkuaG9zdEF0dHI9d2MucmVwbGFjZShiYyxyLmlkKSxpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuYXBwbHlUb0hvc3Q9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcyxlLHRoaXMuaG9zdEF0dHIsIiIpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsbil7dmFyIHI9dC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudC5jYWxsKHRoaXMsZSxuKTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcyxyLHRoaXMuY29udGVudEF0dHIsIiIpLHJ9LGV9KGtjKSxJYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO28uc2hhcmVkU3R5bGVzSG9zdD1uLG8uaG9zdEVsPXIsby5jb21wb25lbnQ9aSxvLnNoYWRvd1Jvb3Q9ci5jcmVhdGVTaGFkb3dSb290KCksby5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3Qoby5zaGFkb3dSb290KTtmb3IodmFyIGE9Q2MoaS5pZCxpLnN0eWxlcyxbXSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2wudGV4dENvbnRlbnQ9YVtzXSxvLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQobCl9cmV0dXJuIG99cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5ub2RlT3JTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfSxlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbihlLG4pe3JldHVybiB0LnByb3RvdHlwZS5hcHBlbmRDaGlsZC5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4pfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmUuY2FsbCh0aGlzLHRoaXMubm9kZU9yU2hhZG93Um9vdChlKSxuLHIpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihlLG4pe3JldHVybiB0LnByb3RvdHlwZS5yZW1vdmVDaGlsZC5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4pfSxlLnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3QodC5wcm90b3R5cGUucGFyZW50Tm9kZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpKSl9LGV9KGtjKSxNYz0idW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmUuX19zeW1ib2xfX3x8ZnVuY3Rpb24odCl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrdH0sTmM9TWMoImFkZEV2ZW50TGlzdGVuZXIiKSxSYz1NYygicmVtb3ZlRXZlbnRMaXN0ZW5lciIpLERjPXt9LExjPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiOyJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZVtNYygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSYmKFBjPXt9KTt2YXIgamM9ZnVuY3Rpb24odCl7cmV0dXJuISFQYyYmUGMuaGFzT3duUHJvcGVydHkodCl9LEZjPWZ1bmN0aW9uKHQpe3ZhciBlPURjW3QudHlwZV07aWYoZSl7dmFyIG49dGhpc1tlXTtpZihuKXt2YXIgcj1bdF07aWYoMT09PW4ubGVuZ3RoKXJldHVybihhPW5bMF0pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxyKTphLmhhbmRsZXIuYXBwbHkodGhpcyxyKTtmb3IodmFyIGk9bi5zbGljZSgpLG89MDtvPGkubGVuZ3RoJiYhMCE9PXRbTGNdO28rKyl7dmFyIGE7KGE9aVtvXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLHIpOmEuaGFuZGxlci5hcHBseSh0aGlzLHIpfX19fSxWYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5uZ1pvbmU9bixyJiZZcyhyKXx8aS5wYXRjaEV2ZW50KCksaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnBhdGNoRXZlbnQ9ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEV2ZW50JiZFdmVudCYmRXZlbnQucHJvdG90eXBlJiYhRXZlbnQucHJvdG90eXBlLl9fem9uZV9zeW1ib2xfX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbil7dmFyIHQ9RXZlbnQucHJvdG90eXBlLl9fem9uZV9zeW1ib2xfX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1FdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO0V2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0aGlzJiYodGhpc1tMY109ITApLHQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LGUucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEwfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9bjtpZighdFtOY118fFVlLmlzSW5Bbmd1bGFyWm9uZSgpJiYhamMoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSk7ZWxzZXt2YXIgbz1EY1tlXTtvfHwobz1EY1tlXT1NYygiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIGE9dFtvXSxzPWEmJmEubGVuZ3RoPjA7YXx8KGE9dFtvXT1bXSk7dmFyIGw9amMoZSk/Wm9uZS5yb290OlpvbmUuY3VycmVudDtpZigwPT09YS5sZW5ndGgpYS5wdXNoKHt6b25lOmwsaGFuZGxlcjppfSk7ZWxzZXtmb3IodmFyIHU9ITEsYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10uaGFuZGxlcj09PWkpe3U9ITA7YnJlYWt9dXx8YS5wdXNoKHt6b25lOmwsaGFuZGxlcjppfSl9c3x8dFtOY10oZSxGYywhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSl9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10W1JjXTtpZighcilyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHQsW2UsbiwhMV0pO3ZhciBpPURjW2VdLG89aSYmdFtpXTtpZighbylyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHQsW2UsbiwhMV0pO2Zvcih2YXIgYT0hMSxzPTA7czxvLmxlbmd0aDtzKyspaWYob1tzXS5oYW5kbGVyPT09bil7YT0hMCxvLnNwbGljZShzLDEpO2JyZWFrfWE/MD09PW8ubGVuZ3RoJiZyLmFwcGx5KHQsW2UsRmMsITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KHljKSxCYz17cGFuOiEwLHBhbnN0YXJ0OiEwLHBhbm1vdmU6ITAscGFuZW5kOiEwLHBhbmNhbmNlbDohMCxwYW5sZWZ0OiEwLHBhbnJpZ2h0OiEwLHBhbnVwOiEwLHBhbmRvd246ITAscGluY2g6ITAscGluY2hzdGFydDohMCxwaW5jaG1vdmU6ITAscGluY2hlbmQ6ITAscGluY2hjYW5jZWw6ITAscGluY2hpbjohMCxwaW5jaG91dDohMCxwcmVzczohMCxwcmVzc3VwOiEwLHJvdGF0ZTohMCxyb3RhdGVzdGFydDohMCxyb3RhdGVtb3ZlOiEwLHJvdGF0ZWVuZDohMCxyb3RhdGVjYW5jZWw6ITAsc3dpcGU6ITAsc3dpcGVsZWZ0OiEwLHN3aXBlcmlnaHQ6ITAsc3dpcGV1cDohMCxzd2lwZWRvd246ITAsdGFwOiEwfSx6Yz1uZXcgbXQoIkhhbW1lckdlc3R1cmVDb25maWciKSxVYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxIYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fY29uZmlnPW4saS5jb25zb2xlPXIsaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEoIUJjLmhhc093blByb3BlcnR5KHQudG9Mb3dlckNhc2UoKSkmJiF0aGlzLmlzQ3VzdG9tRXZlbnQodCl8fCF3aW5kb3cuSGFtbWVyJiYodGhpcy5jb25zb2xlLndhcm4oIkhhbW1lci5qcyBpcyBub3QgbG9hZGVkLCBjYW4gbm90IGJpbmQgJyIrdCsiJyBldmVudC4iKSwxKSl9LGUucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT10aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpO3JldHVybiBlPWUudG9Mb3dlckNhc2UoKSxpLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dmFyIG89ci5fY29uZmlnLmJ1aWxkSGFtbWVyKHQpLGE9ZnVuY3Rpb24odCl7aS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7bih0KX0pfTtyZXR1cm4gby5vbihlLGEpLGZ1bmN0aW9uKCl7cmV0dXJuIG8ub2ZmKGUsYSl9fSl9LGUucHJvdG90eXBlLmlzQ3VzdG9tRXZlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5ldmVudHMuaW5kZXhPZih0KT4tMX0sZX0oeWMpLHFjPVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLEdjPXthbHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5fSxjb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmN0cmxLZXl9LG1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWV0YUtleX0sc2hpZnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hpZnRLZXl9fSxXYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT1lLnBhcnNlRXZlbnROYW1lKHQpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT1lLnBhcnNlRXZlbnROYW1lKG4pLG89ZS5ldmVudENhbGxiYWNrKGkuZnVsbEtleSxyLHRoaXMubWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIFp1KCkub25BbmRDYW5jZWwodCxpLmRvbUV2ZW50TmFtZSxvKX0pfSxlLnBhcnNlRXZlbnROYW1lPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9bi5zaGlmdCgpO2lmKDA9PT1uLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7dmFyIGk9ZS5fbm9ybWFsaXplS2V5KG4ucG9wKCkpLG89IiI7aWYocWMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksbys9dCsiLiIpfSksbys9aSwwIT1uLmxlbmd0aHx8MD09PWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXt9O3JldHVybiBhLmRvbUV2ZW50TmFtZT1yLGEuZnVsbEtleT1vLGF9LGUuZ2V0RXZlbnRGdWxsS2V5PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49WnUoKS5nZXRFdmVudEtleSh0KTtyZXR1cm4iICI9PT0obj1uLnRvTG93ZXJDYXNlKCkpP249InNwYWNlIjoiLiI9PT1uJiYobj0iZG90IikscWMuZm9yRWFjaChmdW5jdGlvbihyKXtyIT1uJiYoMCxHY1tyXSkodCkmJihlKz1yKyIuIil9KSxlKz1ufSxlLmV2ZW50Q2FsbGJhY2s9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBmdW5jdGlvbihpKXtlLmdldEV2ZW50RnVsbEtleShpKT09PXQmJnIucnVuR3VhcmRlZChmdW5jdGlvbigpe3JldHVybiBuKGkpfSl9fSxlLl9ub3JtYWxpemVLZXk9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiZXNjIjpyZXR1cm4iZXNjYXBlIjtkZWZhdWx0OnJldHVybiB0fX0sZX0oeWMpLFFjPWZ1bmN0aW9uKCl7fSxLYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnNhbml0aXplPWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtzd2l0Y2godCl7Y2FzZSBDci5OT05FOnJldHVybiBlO2Nhc2UgQ3IuSFRNTDpyZXR1cm4gZSBpbnN0YW5jZW9mIFljP2UuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eToodGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJIVE1MIiksZnVuY3Rpb24odCxlKXt2YXIgbj1udWxsO3RyeXtzcj1zcnx8bmV3IGVyKHQpO3ZhciByPWU/U3RyaW5nKGUpOiIiO249c3IuZ2V0SW5lcnRCb2R5RWxlbWVudChyKTt2YXIgaT01LG89cjtkb3tpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aS0tLHI9byxvPW4uaW5uZXJIVE1MLG49c3IuZ2V0SW5lcnRCb2R5RWxlbWVudChyKX13aGlsZShyIT09byk7dmFyIGE9bmV3IHlyLHM9YS5zYW5pdGl6ZUNoaWxkcmVuKGJyKG4pfHxuKTtyZXR1cm4gbm4oKSYmYS5zYW5pdGl6ZWRTb21ldGhpbmcmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyBIVE1MIHN0cmlwcGVkIHNvbWUgY29udGVudCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksc31maW5hbGx5e2lmKG4pZm9yKHZhciBsPWJyKG4pfHxuO2wuZmlyc3RDaGlsZDspbC5yZW1vdmVDaGlsZChsLmZpcnN0Q2hpbGQpfX0odGhpcy5fZG9jLFN0cmluZyhlKSkpO2Nhc2UgQ3IuU1RZTEU6cmV0dXJuIGUgaW5zdGFuY2VvZiBYYz9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU3R5bGUiKSxmdW5jdGlvbih0KXtpZighKHQ9U3RyaW5nKHQpLnRyaW0oKSkpcmV0dXJuIiI7dmFyIGU9dC5tYXRjaCh4cik7cmV0dXJuIGUmJmlyKGVbMV0pPT09ZVsxXXx8dC5tYXRjaCh3cikmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dC5jaGFyQXQocik7IiciPT09aSYmbj9lPSFlOiciJz09PWkmJmUmJihuPSFuKX1yZXR1cm4gZSYmbn0odCk/dDoobm4oKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBzdHlsZSB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksInVuc2FmZSIpfShlKSk7Y2FzZSBDci5TQ1JJUFQ6aWYoZSBpbnN0YW5jZW9mICRjKXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJTY3JpcHQiKSxuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgc2NyaXB0IGNvbnRleHQiKTtjYXNlIENyLlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIHRofHxlIGluc3RhbmNlb2YgSmM/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLGlyKFN0cmluZyhlKSkpO2Nhc2UgQ3IuUkVTT1VSQ0VfVVJMOmlmKGUgaW5zdGFuY2VvZiB0aClyZXR1cm4gZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5O3Rocm93IHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiUmVzb3VyY2VVUkwiKSxuZXcgRXJyb3IoInVuc2FmZSB2YWx1ZSB1c2VkIGluIGEgcmVzb3VyY2UgVVJMIGNvbnRleHQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKSIpfX0sZS5wcm90b3R5cGUuY2hlY2tOb3RTYWZlVmFsdWU9ZnVuY3Rpb24odCxlKXtpZih0IGluc3RhbmNlb2YgWmMpdGhyb3cgbmV3IEVycm9yKCJSZXF1aXJlZCBhIHNhZmUgIitlKyIsIGdvdCBhICIrdC5nZXRUeXBlTmFtZSgpKyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWWModCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFhjKHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgJGModCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKYyh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdGgodCl9LGV9KFFjKSxaYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICIrdGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIn0sdH0oKSxZYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIkhUTUwifSxlfShaYyksWGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJTdHlsZSJ9LGV9KFpjKSwkYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlNjcmlwdCJ9LGV9KFpjKSxKYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlVSTCJ9LGV9KFpjKSx0aD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc291cmNlVVJMIn0sZX0oWmMpLGVoPW9uKFpuLCJicm93c2VyIixbe3Byb3ZpZGU6YmUsdXNlVmFsdWU6UXN9LHtwcm92aWRlOl9lLHVzZVZhbHVlOmZ1bmN0aW9uKCl7ZWMubWFrZUN1cnJlbnQoKSx1Yy5pbml0KCl9LG11bHRpOiEwfSx7cHJvdmlkZTp4cyx1c2VDbGFzczpvYyxkZXBzOltyY119LHtwcm92aWRlOnJjLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGRlcHM6W119XSk7ZnVuY3Rpb24gbmgoKXtyZXR1cm4gbmV3IGNlfXZhciByaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodCl0aHJvdyBuZXcgRXJyb3IoIkJyb3dzZXJNb2R1bGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuIElmIHlvdSBuZWVkIGFjY2VzcyB0byBjb21tb24gZGlyZWN0aXZlcyBzdWNoIGFzIE5nSWYgYW5kIE5nRm9yIGZyb20gYSBsYXp5IGxvYWRlZCBtb2R1bGUsIGltcG9ydCBDb21tb25Nb2R1bGUgaW5zdGVhZC4iKX1yZXR1cm4gdC53aXRoU2VydmVyVHJhbnNpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W3twcm92aWRlOnllLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOnNjLHVzZUV4aXN0aW5nOnllfSxsY119fSx0fSgpOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c7dmFyIGloPW5ldyBtdCgibWF0LXNhbml0eS1jaGVja3MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksb2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQ9dCx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLHRoaXMuX2hhc0NoZWNrZWRIYW1tZXI9ITEsdGhpcy5fZG9jdW1lbnQ9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQ/ZG9jdW1lbnQ6bnVsbCx0aGlzLl93aW5kb3c9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdz93aW5kb3c6bnVsbCx0aGlzLl9hcmVDaGVja3NFbmFibGVkKCkmJiF0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzJiYodGhpcy5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkKCksdGhpcy5fY2hlY2tUaGVtZUlzUHJlc2VudCgpLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITApfXJldHVybiB0LnByb3RvdHlwZS5fYXJlQ2hlY2tzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zYW5pdHlDaGVja3NFbmFibGVkJiZubigpJiYhdGhpcy5faXNUZXN0RW52KCl9LHQucHJvdG90eXBlLl9pc1Rlc3RFbnY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2luZG93JiYodGhpcy5fd2luZG93Ll9fa2FybWFfX3x8dGhpcy5fd2luZG93Lmphc21pbmUpfSx0LnByb3RvdHlwZS5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkPWZ1bmN0aW9uKCl7dGhpcy5fZG9jdW1lbnQmJiF0aGlzLl9kb2N1bWVudC5kb2N0eXBlJiZjb25zb2xlLndhcm4oIkN1cnJlbnQgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIGRvY3R5cGUuIFRoaXMgbWF5IGNhdXNlIHNvbWUgQW5ndWxhciBNYXRlcmlhbCBjb21wb25lbnRzIG5vdCB0byBiZWhhdmUgYXMgZXhwZWN0ZWQuIil9LHQucHJvdG90eXBlLl9jaGVja1RoZW1lSXNQcmVzZW50PWZ1bmN0aW9uKCl7aWYodGhpcy5fZG9jdW1lbnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBnZXRDb21wdXRlZFN0eWxlKXt2YXIgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTGlzdC5hZGQoIm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTt2YXIgZT1nZXRDb21wdXRlZFN0eWxlKHQpO2UmJiJub25lIiE9PWUuZGlzcGxheSYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBBbmd1bGFyIE1hdGVyaWFsIGNvcmUgdGhlbWUuIE1vc3QgTWF0ZXJpYWwgY29tcG9uZW50cyBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIEZvciBtb3JlIGluZm8gcmVmZXIgdG8gdGhlIHRoZW1pbmcgZ3VpZGU6IGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS90aGVtaW5nIiksdGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19LHQucHJvdG90eXBlLl9jaGVja0hhbW1lcklzQXZhaWxhYmxlPWZ1bmN0aW9uKCl7IXRoaXMuX2hhc0NoZWNrZWRIYW1tZXImJnRoaXMuX3dpbmRvdyYmKHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX3dpbmRvdy5IYW1tZXImJmNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgSGFtbWVySlMuIENlcnRhaW4gQW5ndWxhciBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBjb3JyZWN0bHkuIiksdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMCl9LHR9KCk7ZnVuY3Rpb24gYWgodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe2Zvcih2YXIgbj1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgaT10LmFwcGx5KHRoaXMsbil8fHRoaXM7cmV0dXJuIGkuY29sb3I9ZSxpfXJldHVybiBpKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJjb2xvciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvcn0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBuPXR8fGU7biE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtIit0aGlzLl9jb2xvciksbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC0iK24pLHRoaXMuX2NvbG9yPW4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLG59KHQpfWZ1bmN0aW9uIHNoKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZVJpcHBsZT0hMSxyfXJldHVybiBpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlUmlwcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPWdsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfXZhciBsaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmlzRXJyb3JTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiEhKHQmJnQuaW52YWxpZCYmKHQudG91Y2hlZHx8ZSYmZS5zdWJtaXR0ZWQpKX0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHVoPW5ldyBtdCgiTUFUX0hBTU1FUl9PUFRJT05TIiksY2g9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5faGFtbWVyT3B0aW9ucz1lLHIuX2hhbW1lcj0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3cuSGFtbWVyOm51bGwsci5ldmVudHM9ci5faGFtbWVyP1sibG9uZ3ByZXNzIiwic2xpZGUiLCJzbGlkZXN0YXJ0Iiwic2xpZGVlbmQiLCJzbGlkZXJpZ2h0Iiwic2xpZGVsZWZ0Il06W10sbiYmbi5fY2hlY2tIYW1tZXJJc0F2YWlsYWJsZSgpLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5idWlsZEhhbW1lcj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdGhpcy5faGFtbWVyKHQsdGhpcy5faGFtbWVyT3B0aW9uc3x8dm9pZCAwKSxuPW5ldyB0aGlzLl9oYW1tZXIuUGFuLHI9bmV3IHRoaXMuX2hhbW1lci5Td2lwZSxpPW5ldyB0aGlzLl9oYW1tZXIuUHJlc3Msbz10aGlzLl9jcmVhdGVSZWNvZ25pemVyKG4se2V2ZW50OiJzbGlkZSIsdGhyZXNob2xkOjB9LHIpLGE9dGhpcy5fY3JlYXRlUmVjb2duaXplcihpLHtldmVudDoibG9uZ3ByZXNzIix0aW1lOjUwMH0pO3JldHVybiBuLnJlY29nbml6ZVdpdGgociksZS5hZGQoW3IsaSxuLG8sYV0pLGV9LGUucHJvdG90eXBlLl9jcmVhdGVSZWNvZ25pemVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIG4ucHVzaCh0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkucmVjb2duaXplV2l0aCh0KX0pLGl9LGV9KFVjKSxoaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX2xpbmVzPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX3NldExpbmVDbGFzcyh0aGlzLl9saW5lcy5sZW5ndGgpLHRoaXMuX2xpbmVzLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7bi5fc2V0TGluZUNsYXNzKG4uX2xpbmVzLmxlbmd0aCl9KX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldExpbmVDbGFzcz1mdW5jdGlvbih0KXt0aGlzLl9yZXNldENsYXNzZXMoKSwyPT09dHx8Mz09PXQ/dGhpcy5fc2V0Q2xhc3MoIm1hdC0iK3QrIi1saW5lIiwhMCk6dD4zJiZ0aGlzLl9zZXRDbGFzcygibWF0LW11bHRpLWxpbmUiLCEwKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3RoaXMuX3NldENsYXNzKCJtYXQtMi1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC0zLWxpbmUiLCExKSx0aGlzLl9zZXRDbGFzcygibWF0LW11bHRpLWxpbmUiLCExKX0sdC5wcm90b3R5cGUuX3NldENsYXNzPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0KX0sdH0oKSxmaD1mdW5jdGlvbigpe30scGg9ZnVuY3Rpb24oKXt2YXIgdD17RkFESU5HX0lOOjAsVklTSUJMRToxLEZBRElOR19PVVQ6MixISURERU46M307cmV0dXJuIHRbdC5GQURJTkdfSU5dPSJGQURJTkdfSU4iLHRbdC5WSVNJQkxFXT0iVklTSUJMRSIsdFt0LkZBRElOR19PVVRdPSJGQURJTkdfT1VUIix0W3QuSElEREVOXT0iSElEREVOIix0fSgpLGRoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbmZpZz1uLHRoaXMuc3RhdGU9cGguSElEREVOfXJldHVybiB0LnByb3RvdHlwZS5mYWRlT3V0PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuZmFkZU91dFJpcHBsZSh0aGlzKX0sdH0oKSxtaD17ZW50ZXJEdXJhdGlvbjo0NTAsZXhpdER1cmF0aW9uOjQwMH0seWg9ODAwLGdoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3RhcmdldD10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fdHJpZ2dlckV2ZW50cz1uZXcgTWFwLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IFNldCx0aGlzLl9ldmVudE9wdGlvbnM9ISFlbCgpJiZ7cGFzc2l2ZTohMH0sdGhpcy5vbk1vdXNlZG93bj1mdW5jdGlvbih0KXt2YXIgZT1pLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPGkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQreWg7aS5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHwoaS5faXNQb2ludGVyRG93bj0hMCxpLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLGkuX3RhcmdldC5yaXBwbGVDb25maWcpKX0sdGhpcy5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7aS5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHwoaS5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLGkuX2lzUG9pbnRlckRvd249ITAsaS5mYWRlSW5SaXBwbGUodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFksaS5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uUG9pbnRlclVwPWZ1bmN0aW9uKCl7aS5faXNQb2ludGVyRG93biYmKGkuX2lzUG9pbnRlckRvd249ITEsaS5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYodC5zdGF0ZT09PXBoLlZJU0lCTEV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiZ0LnN0YXRlPT09cGguRkFESU5HX0lOKSYmdC5mYWRlT3V0KCl9KSl9LHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1uLm5hdGl2ZUVsZW1lbnQsdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlZG93biksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNldXAiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWxlYXZlIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQpLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaGVuZCIsdGhpcy5vblBvaW50ZXJVcCkpfXJldHVybiB0LnByb3RvdHlwZS5mYWRlSW5SaXBwbGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBpPXRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fY29udGFpbmVyUmVjdHx8dGhpcy5fY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPW8oe30sbWgsbi5hbmltYXRpb24pO24uY2VudGVyZWQmJih0PWkubGVmdCtpLndpZHRoLzIsZT1pLnRvcCtpLmhlaWdodC8yKTt2YXIgcz1uLnJhZGl1c3x8ZnVuY3Rpb24odCxlLG4pe3ZhciByPU1hdGgubWF4KE1hdGguYWJzKHQtbi5sZWZ0KSxNYXRoLmFicyh0LW4ucmlnaHQpKSxpPU1hdGgubWF4KE1hdGguYWJzKGUtbi50b3ApLE1hdGguYWJzKGUtbi5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KHIqcitpKmkpfSh0LGUsaSksbD10LWkubGVmdCx1PWUtaS50b3AsYz1hLmVudGVyRHVyYXRpb24vKG4uc3BlZWRGYWN0b3J8fDEpLGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aC5jbGFzc0xpc3QuYWRkKCJtYXQtcmlwcGxlLWVsZW1lbnQiKSxoLnN0eWxlLmxlZnQ9bC1zKyJweCIsaC5zdHlsZS50b3A9dS1zKyJweCIsaC5zdHlsZS5oZWlnaHQ9MipzKyJweCIsaC5zdHlsZS53aWR0aD0yKnMrInB4IixoLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLmNvbG9yfHxudWxsLGguc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWMrIm1zIix0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGgpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGgpLmdldFByb3BlcnR5VmFsdWUoIm9wYWNpdHkiKSxoLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUoMSkiO3ZhciBmPW5ldyBkaCh0aGlzLGgsbik7cmV0dXJuIGYuc3RhdGU9cGguRkFESU5HX0lOLHRoaXMuX2FjdGl2ZVJpcHBsZXMuYWRkKGYpLG4ucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9ZiksdGhpcy5ydW5UaW1lb3V0T3V0c2lkZVpvbmUoZnVuY3Rpb24oKXt2YXIgdD1mPT09ci5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZTtmLnN0YXRlPXBoLlZJU0lCTEUsbi5wZXJzaXN0ZW50fHx0JiZyLl9pc1BvaW50ZXJEb3dufHxmLmZhZGVPdXQoKX0sYyksZn0sdC5wcm90b3R5cGUuZmFkZU91dFJpcHBsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVSaXBwbGVzLmRlbGV0ZSh0KTtpZih0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSxlKXt2YXIgbj10LmVsZW1lbnQscj1vKHt9LG1oLHQuY29uZmlnLmFuaW1hdGlvbik7bi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249ci5leGl0RHVyYXRpb24rIm1zIixuLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9cGguRkFESU5HX09VVCx0aGlzLnJ1blRpbWVvdXRPdXRzaWRlWm9uZShmdW5jdGlvbigpe3Quc3RhdGU9cGguSElEREVOLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0sci5leGl0RHVyYXRpb24pfX0sdC5wcm90b3R5cGUuZmFkZU91dEFsbD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZVJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5mYWRlT3V0KCl9KX0sdC5wcm90b3R5cGUuc2V0dXBUcmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdCE9PXRoaXMuX3RyaWdnZXJFbGVtZW50JiYodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2UuX3RyaWdnZXJFdmVudHMuZm9yRWFjaChmdW5jdGlvbihuLHIpe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIocixuLGUuX2V2ZW50T3B0aW9ucyl9KX0pLHRoaXMuX3RyaWdnZXJFbGVtZW50PXQpfSx0LnByb3RvdHlwZS5ydW5UaW1lb3V0T3V0c2lkZVpvbmU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dCh0LGUpfSl9LHQucHJvdG90eXBlLl9yZW1vdmVUcmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90cmlnZ2VyRWxlbWVudCYmdGhpcy5fdHJpZ2dlckV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dC5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGUsdC5fZXZlbnRPcHRpb25zKX0pfSx0fSgpLHZoPW5ldyBtdCgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLF9oPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9hbmltYXRpb25Nb2RlPWksdGhpcy5yYWRpdXM9MCx0aGlzLnNwZWVkRmFjdG9yPTEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPXJ8fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBnaCh0aGlzLGUsdCxuKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0cmlnZ2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXI9dCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX0sdC5wcm90b3R5cGUuZmFkZU91dEFsbD1mdW5jdGlvbigpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyaXBwbGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246Ik5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06byh7fSx0aGlzLl9nbG9iYWxPcHRpb25zLmFuaW1hdGlvbix0aGlzLmFuaW1hdGlvbiksdGVybWluYXRlT25Qb2ludGVyVXA6dGhpcy5fZ2xvYmFsT3B0aW9ucy50ZXJtaW5hdGVPblBvaW50ZXJVcCxzcGVlZEZhY3Rvcjp0aGlzLnNwZWVkRmFjdG9yKih0aGlzLl9nbG9iYWxPcHRpb25zLmJhc2VTcGVlZEZhY3Rvcnx8MSl9fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmlwcGxlRGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQ9ZnVuY3Rpb24oKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9LHQucHJvdG90eXBlLmxhdW5jaD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLCJudW1iZXIiPT10eXBlb2YgdD90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUodCxlLG8oe30sdGhpcy5yaXBwbGVDb25maWcsbikpOnRoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSgwLDAsbyh7fSx0aGlzLnJpcHBsZUNvbmZpZyx0KSl9LHR9KCksYmg9ZnVuY3Rpb24oKXt9LHdoPWZ1bmN0aW9uKCl7fSx4aD1mdW5jdGlvbigpe30sQ2g9VXIoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LXRvb2x0aXAtcGFuZWx7cG9pbnRlci1ldmVudHM6bm9uZSFpbXBvcnRhbnR9Lm1hdC10b29sdGlwe2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoycHg7bWFyZ2luOjE0cHg7bWF4LXdpZHRoOjI1MHB4O3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC10b29sdGlwe291dGxpbmU6c29saWQgMXB4fX0ubWF0LXRvb2x0aXAtaGFuZHNldHttYXJnaW46MjRweDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InN0YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJpbml0aWFsLCB2b2lkLCBoaWRkZW4iLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJzY2FsZSgwKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJ2aXNpYmxlIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToic2NhbGUoMSkifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiKiA9PiB2aXNpYmxlIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIxNTBtcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSkifSxvcHRpb25zOm51bGx9LHt0eXBlOjEsZXhwcjoiKiA9PiBoaWRkZW4iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjE1MG1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gRWgodCl7cmV0dXJuIERvKDIsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtdG9vbHRpcCJdXSxbWzIsIm1hdC10b29sdGlwLWhhbmRzZXQiLG51bGxdLFsyNCwiQHN0YXRlIiwwXV0sW1tudWxsLCJAc3RhdGUuc3RhcnQiXSxbbnVsbCwiQHN0YXRlLmRvbmUiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLGk9dC5jb21wb25lbnQ7cmV0dXJuIkBzdGF0ZS5zdGFydCI9PT1lJiYocj0hMSE9PWkuX2FuaW1hdGlvblN0YXJ0KCkmJnIpLCJAc3RhdGUuZG9uZSI9PT1lJiYocj0hMSE9PWkuX2FuaW1hdGlvbkRvbmUobikmJnIpLHJ9LG51bGwsbnVsbCkpLGlvKDEsMjc4NTI4LG51bGwsMCxqcyxbcW4sR24sZG4scG5dLHtrbGFzczpbMCwia2xhc3MiXSxuZ0NsYXNzOlsxLCJuZ0NsYXNzIl19LG51bGwpLG9vKDEzMTA3MixxcyxbQ25dKSwodCgpKCksTW8oMyxudWxsLFsiIiwiIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwLCJtYXQtdG9vbHRpcCIsZS5jb21wb25lbnQudG9vbHRpcENsYXNzKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLFZyKGUsMCwwLEdpKGUsMikudHJhbnNmb3JtKG4uX2lzSGFuZHNldCkpLm1hdGNoZXMsbi5fdmlzaWJpbGl0eSksdChlLDMsMCxuLm1lc3NhZ2UpfSl9dmFyIFNoPVJpKCJtYXQtdG9vbHRpcC1jb21wb25lbnQiLEh1LGZ1bmN0aW9uKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwxLCJtYXQtdG9vbHRpcC1jb21wb25lbnQiLFtbImFyaWEtaGlkZGVuIiwidHJ1ZSJdXSxbWzQsInpvb20iLG51bGxdXSxbWyJib2R5IiwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJib2R5OmNsaWNrIj09PWUmJihyPSExIT09R2kodCwxKS5faGFuZGxlQm9keUludGVyYWN0aW9uKCkmJnIpLHJ9LEVoLENoKSksaW8oMSw0OTE1MixudWxsLDAsSHUsW0NuLGtsXSxudWxsLG51bGwpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCwidmlzaWJsZSI9PT1HaShlLDEpLl92aXNpYmlsaXR5PzE6bnVsbCl9KX0se30se30sW10pLGtoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBpdCx0aGlzLl9hZnRlck9wZW5lZD1uZXcgaXQsdGhpcy5fb25BY3Rpb249bmV3IGl0LHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0aGlzLm9uQWN0aW9uKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGlzbWlzcygpfSksdC5fb25FeGl0LnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBuLl9maW5pc2hEaXNtaXNzKCl9KX1yZXR1cm4gdC5wcm90b3R5cGUuZGlzbWlzcz1mdW5jdGlvbigpe3RoaXMuX2FmdGVyRGlzbWlzc2VkLmNsb3NlZHx8dGhpcy5jb250YWluZXJJbnN0YW5jZS5leGl0KCksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX0sdC5wcm90b3R5cGUuZGlzbWlzc1dpdGhBY3Rpb249ZnVuY3Rpb24oKXt0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fCh0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMCx0aGlzLl9vbkFjdGlvbi5uZXh0KCksdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSl9LHQucHJvdG90eXBlLmNsb3NlV2l0aEFjdGlvbj1mdW5jdGlvbigpe3RoaXMuZGlzbWlzc1dpdGhBY3Rpb24oKX0sdC5wcm90b3R5cGUuX2Rpc21pc3NBZnRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2R1cmF0aW9uVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5kaXNtaXNzKCl9LHQpfSx0LnByb3RvdHlwZS5fb3Blbj1mdW5jdGlvbigpe3RoaXMuX2FmdGVyT3BlbmVkLmNsb3NlZHx8KHRoaXMuX2FmdGVyT3BlbmVkLm5leHQoKSx0aGlzLl9hZnRlck9wZW5lZC5jb21wbGV0ZSgpKX0sdC5wcm90b3R5cGUuX2ZpbmlzaERpc21pc3M9ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQubmV4dCh7ZGlzbWlzc2VkQnlBY3Rpb246dGhpcy5fZGlzbWlzc2VkQnlBY3Rpb259KSx0aGlzLl9hZnRlckRpc21pc3NlZC5jb21wbGV0ZSgpLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExfSx0LnByb3RvdHlwZS5hZnRlckRpc21pc3NlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuYWZ0ZXJPcGVuZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXJJbnN0YW5jZS5fb25FbnRlcn0sdC5wcm90b3R5cGUub25BY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25BY3Rpb24uYXNPYnNlcnZhYmxlKCl9LHR9KCksVGg9bmV3IG10KCJNYXRTbmFja0JhckRhdGEiKSxBaD1mdW5jdGlvbigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn0sUGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5zbmFja0JhclJlZj10LHRoaXMuZGF0YT1lfXJldHVybiB0LnByb3RvdHlwZS5hY3Rpb249ZnVuY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzQWN0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmRhdGEuYWN0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksT2g9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8uX25nWm9uZT1lLG8uX2VsZW1lbnRSZWY9bixvLl9jaGFuZ2VEZXRlY3RvclJlZj1yLG8uc25hY2tCYXJDb25maWc9aSxvLl9kZXN0cm95ZWQ9ITEsby5fb25FeGl0PW5ldyBpdCxvLl9vbkVudGVyPW5ldyBpdCxvLl9hbmltYXRpb25TdGF0ZT0idm9pZCIsb31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKSx0aGlzLl9hcHBseVNuYWNrQmFyQ2xhc3NlcygpLHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwodCl9LGUucHJvdG90eXBlLmF0dGFjaFRlbXBsYXRlUG9ydGFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpLHRoaXMuX2FwcGx5U25hY2tCYXJDbGFzc2VzKCksdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpfSxlLnByb3RvdHlwZS5vbkFuaW1hdGlvbkVuZD1mdW5jdGlvbih0KXt2YXIgZT10LnRvU3RhdGU7aWYoKCJ2b2lkIj09PWUmJiJ2b2lkIiE9PXQuZnJvbVN0YXRlfHxlLnN0YXJ0c1dpdGgoImhpZGRlbiIpKSYmdGhpcy5fY29tcGxldGVFeGl0KCksZS5zdGFydHNXaXRoKCJ2aXNpYmxlIikpe3ZhciBuPXRoaXMuX29uRW50ZXI7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe24ubmV4dCgpLG4uY29tcGxldGUoKX0pfX0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZS0iK3RoaXMuc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpfSxlLnByb3RvdHlwZS5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXRlPSJoaWRkZW4tIit0aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24sdGhpcy5fb25FeGl0fSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jb21wbGV0ZUV4aXQoKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlRXhpdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkuYXNPYnNlcnZhYmxlKCkucGlwZShpdSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fb25FeGl0Lm5leHQoKSx0Ll9vbkV4aXQuY29tcGxldGUoKX0pfSxlLnByb3RvdHlwZS5fYXBwbHlTbmFja0JhckNsYXNzZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLnNuYWNrQmFyQ29uZmlnLnBhbmVsQ2xhc3M7ZSYmKEFycmF5LmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTp0LmNsYXNzTGlzdC5hZGQoZSkpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci1jZW50ZXIiKSwidG9wIj09PXRoaXMuc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbiYmdC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLXRvcCIpfSxlLnByb3RvdHlwZS5fYXNzZXJ0Tm90QXR0YWNoZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSl0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggc25hY2sgYmFyIGNvbnRlbnQgYWZ0ZXIgY29udGVudCBpcyBhbHJlYWR5IGF0dGFjaGVkIil9LGV9KGh1KSxJaD1uZXcgbXQoIm1hdC1zbmFjay1iYXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQWh9fSksTWg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvKXt0aGlzLl9vdmVybGF5PXQsdGhpcy5fbGl2ZT1lLHRoaXMuX2luamVjdG9yPW4sdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPXIsdGhpcy5fcGFyZW50U25hY2tCYXI9aSx0aGlzLl9kZWZhdWx0Q29uZmlnPW8sdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9vcGVuZWRTbmFja0JhclJlZiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudFNuYWNrQmFyO3JldHVybiB0P3QuX29wZW5lZFNuYWNrQmFyUmVmOnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWx9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9wYXJlbnRTbmFja0Jhcj90aGlzLl9wYXJlbnRTbmFja0Jhci5fb3BlbmVkU25hY2tCYXJSZWY9dDp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUub3BlbkZyb21Db21wb25lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYXR0YWNoKHQsZSl9LHQucHJvdG90eXBlLm9wZW5Gcm9tVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYXR0YWNoKHQsZSl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgcj1vKHt9LHRoaXMuX2RlZmF1bHRDb25maWcsbik7cmV0dXJuIHIuZGF0YT17bWVzc2FnZTp0LGFjdGlvbjplfSxyLmFubm91bmNlbWVudE1lc3NhZ2U9dCx0aGlzLm9wZW5Gcm9tQ29tcG9uZW50KFBoLHIpfSx0LnByb3RvdHlwZS5kaXNtaXNzPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbmVkU25hY2tCYXJSZWYmJnRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKX0sdC5wcm90b3R5cGUuX2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IG11KGUmJmUudmlld0NvbnRhaW5lclJlZiYmZS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3RvcixuZXcgV2Vha01hcChbW0FoLGVdXSkpLHI9bmV3IHV1KE9oLGUudmlld0NvbnRhaW5lclJlZixuKSxpPXQuYXR0YWNoKHIpO3JldHVybiBpLmluc3RhbmNlLnNuYWNrQmFyQ29uZmlnPWUsaS5pbnN0YW5jZX0sdC5wcm90b3R5cGUuX2F0dGFjaD1mdW5jdGlvbih0LGUpe3ZhciBuPW8oe30sbmV3IEFoLHRoaXMuX2RlZmF1bHRDb25maWcsZSkscj10aGlzLl9jcmVhdGVPdmVybGF5KG4pLGk9dGhpcy5fYXR0YWNoU25hY2tCYXJDb250YWluZXIocixuKSxhPW5ldyBraChpLHIpO2lmKHQgaW5zdGFuY2VvZiB3bil7dmFyIHM9bmV3IGN1KHQsbnVsbCx7JGltcGxpY2l0Om4uZGF0YSxzbmFja0JhclJlZjphfSk7YS5pbnN0YW5jZT1pLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHMpfWVsc2V7dmFyIGw9dGhpcy5fY3JlYXRlSW5qZWN0b3IobixhKSx1PShzPW5ldyB1dSh0LHZvaWQgMCxsKSxpLmF0dGFjaENvbXBvbmVudFBvcnRhbChzKSk7YS5pbnN0YW5jZT11Lmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShBbC5IYW5kc2V0KS5waXBlKGxsKHIuZGV0YWNobWVudHMoKS5waXBlKGl1KDEpKSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXt0Lm1hdGNoZXM/ci5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLWhhbmRzZXQiKTpyLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1zbmFjay1iYXItaGFuZHNldCIpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKGEsbiksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9YSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn0sdC5wcm90b3R5cGUuX2FuaW1hdGVTbmFja0Jhcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dC5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZShmdW5jdGlvbigpe24uX29wZW5lZFNuYWNrQmFyUmVmPT10JiYobi5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt0LmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOnQuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxlLmR1cmF0aW9uJiZlLmR1cmF0aW9uPjAmJnQuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5fZGlzbWlzc0FmdGVyKGUuZHVyYXRpb24pfSksZS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmFubm91bmNlKGUuYW5ub3VuY2VtZW50TWVzc2FnZSxlLnBvbGl0ZW5lc3MpfSx0LnByb3RvdHlwZS5fY3JlYXRlT3ZlcmxheT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgZ3U7ZS5kaXJlY3Rpb249dC5kaXJlY3Rpb247dmFyIG49dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLHI9InJ0bCI9PT10LmRpcmVjdGlvbixpPSJsZWZ0Ij09PXQuaG9yaXpvbnRhbFBvc2l0aW9ufHwic3RhcnQiPT09dC5ob3Jpem9udGFsUG9zaXRpb24mJiFyfHwiZW5kIj09PXQuaG9yaXpvbnRhbFBvc2l0aW9uJiZyLG89IWkmJiJjZW50ZXIiIT09dC5ob3Jpem9udGFsUG9zaXRpb247cmV0dXJuIGk/bi5sZWZ0KCIwIik6bz9uLnJpZ2h0KCIwIik6bi5jZW50ZXJIb3Jpem9udGFsbHkoKSwidG9wIj09PXQudmVydGljYWxQb3NpdGlvbj9uLnRvcCgiMCIpOm4uYm90dG9tKCIwIiksZS5wb3NpdGlvblN0cmF0ZWd5PW4sdGhpcy5fb3ZlcmxheS5jcmVhdGUoZSl9LHQucHJvdG90eXBlLl9jcmVhdGVJbmplY3Rvcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbXUodCYmdC52aWV3Q29udGFpbmVyUmVmJiZ0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLG5ldyBXZWFrTWFwKFtba2gsZV0sW1RoLHQuZGF0YV1dKSl9LHR9KCksTmg9ZnVuY3Rpb24oKXt9LFJoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZHVlVGltZT10LHRoaXMuc2NoZWR1bGVyPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IERoKHQsdGhpcy5kdWVUaW1lLHRoaXMuc2NoZWR1bGVyKSl9LHR9KCksRGg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuZHVlVGltZT1uLGkuc2NoZWR1bGVyPXIsaS5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCxpLmxhc3RWYWx1ZT1udWxsLGkuaGFzVmFsdWU9ITEsaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMubGFzdFZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCx0aGlzLmFkZCh0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj10aGlzLnNjaGVkdWxlci5zY2hlZHVsZShMaCx0aGlzLmR1ZVRpbWUsdGhpcykpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlZE5leHQoKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLmRlYm91bmNlZE5leHQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNsZWFyRGVib3VuY2UoKSx0aGlzLmhhc1ZhbHVlKXt2YXIgdD10aGlzLmxhc3RWYWx1ZTt0aGlzLmxhc3RWYWx1ZT1udWxsLHRoaXMuaGFzVmFsdWU9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfX0sZS5wcm90b3R5cGUuY2xlYXJEZWJvdW5jZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uO251bGwhPT10JiYodGhpcy5yZW1vdmUodCksdC51bnN1YnNjcmliZSgpLHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwpfSxlfShFKTtmdW5jdGlvbiBMaCh0KXt0LmRlYm91bmNlZE5leHQoKX1mdW5jdGlvbiBqaCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLmxpZnQobmV3IEZoKHQsZSxuKSl9fXZhciBGaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmV4dE9yT2JzZXJ2ZXI9dCx0aGlzLmVycm9yPWUsdGhpcy5jb21wbGV0ZT1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBWaCh0LHRoaXMubmV4dE9yT2JzZXJ2ZXIsdGhpcy5lcnJvcix0aGlzLmNvbXBsZXRlKSl9LHR9KCksVmg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5fdGFwTmV4dD1ULG8uX3RhcEVycm9yPVQsby5fdGFwQ29tcGxldGU9VCxvLl90YXBFcnJvcj1yfHxULG8uX3RhcENvbXBsZXRlPWl8fFQsdShuKT8oby5fY29udGV4dD1vLG8uX3RhcE5leHQ9bik6biYmKG8uX2NvbnRleHQ9bixvLl90YXBOZXh0PW4ubmV4dHx8VCxvLl90YXBFcnJvcj1uLmVycm9yfHxULG8uX3RhcENvbXBsZXRlPW4uY29tcGxldGV8fFQpLG99cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwRXJyb3IuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShFKSxCaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcGxhdGZvcm09dH1yZXR1cm4gdC5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9LHQucHJvdG90eXBlLmlzVmlzaWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuISEodC5vZmZzZXRXaWR0aHx8dC5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldENsaWVudFJlY3RzJiZ0LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0odCkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUodCkudmlzaWJpbGl0eX0sdC5wcm90b3R5cGUuaXNUYWJiYWJsZT1mdW5jdGlvbih0KXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiExO3ZhciBlPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5mcmFtZUVsZW1lbnR9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSh0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyk7aWYoZSl7dmFyIG49ZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xPT09VWgoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGk9VWgodCk7aWYodC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKXJldHVybi0xIT09aTtpZigiaWZyYW1lIj09PXIpcmV0dXJuITE7aWYoImF1ZGlvIj09PXIpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSlyZXR1cm4hMTtpZih0aGlzLl9wbGF0Zm9ybS5CTElOSylyZXR1cm4hMH1pZigidmlkZW8iPT09cil7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiZ0aGlzLl9wbGF0Zm9ybS5UUklERU5UKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YKXJldHVybiEwfXJldHVybigib2JqZWN0IiE9PXJ8fCF0aGlzLl9wbGF0Zm9ybS5CTElOSyYmIXRoaXMuX3BsYXRmb3JtLldFQktJVCkmJiEodGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj0iaW5wdXQiPT09ZSYmdC50eXBlO3JldHVybiJ0ZXh0Ij09PW58fCJwYXNzd29yZCI9PT1ufHwic2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfSh0KSkmJnQudGFiSW5kZXg+PTB9LHQucHJvdG90eXBlLmlzRm9jdXNhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJiJoaWRkZW4iPT10LnR5cGV9KHQpJiYoZnVuY3Rpb24odCl7dmFyIGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJidXR0b24iPT09ZXx8InRleHRhcmVhIj09PWV9KHQpfHxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImEiPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KHQpJiZ0Lmhhc0F0dHJpYnV0ZSgiaHJlZiIpfSh0KXx8dC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHx6aCh0KSl9KHQpJiYhdGhpcy5pc0Rpc2FibGVkKHQpJiZ0aGlzLmlzVmlzaWJsZSh0KX0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUodGwpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gemgodCl7aWYoIXQuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT10LnRhYkluZGV4KXJldHVybiExO3ZhciBlPXQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiItMzI3NjgiIT1lJiYhKCFlfHxpc05hTihwYXJzZUludChlLDEwKSkpfWZ1bmN0aW9uIFVoKHQpe2lmKCF6aCh0KSlyZXR1cm4gbnVsbDt2YXIgZT1wYXJzZUludCh0LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTihlKT8tMTplfXZhciBIaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpKXt2b2lkIDA9PT1pJiYoaT0hMSksdGhpcy5fZWxlbWVudD10LHRoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9kb2N1bWVudD1yLHRoaXMuX2VuYWJsZWQ9ITAsaXx8dGhpcy5hdHRhY2hBbmNob3JzKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZW5hYmxlZD10LHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl9zdGFydEFuY2hvci50YWJJbmRleD10aGlzLl9lbmRBbmNob3IudGFiSW5kZXg9dGhpcy5fZW5hYmxlZD8wOi0xKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX3N0YXJ0QW5jaG9yLnBhcmVudE5vZGUmJnRoaXMuX3N0YXJ0QW5jaG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX2VuZEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yLnBhcmVudE5vZGUmJnRoaXMuX2VuZEFuY2hvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VuZEFuY2hvciksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5jaG9yPW51bGx9LHQucHJvdG90eXBlLmF0dGFjaEFuY2hvcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCkpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGZ1bmN0aW9uKCl7dC5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKX0pLHQuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsZnVuY3Rpb24oKXt0LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKX0pLHQuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHQuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodC5fc3RhcnRBbmNob3IsdC5fZWxlbWVudCksdC5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0Ll9lbmRBbmNob3IsdC5fZWxlbWVudC5uZXh0U2libGluZykpfSl9LHQucHJvdG90eXBlLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0Ll9leGVjdXRlT25TdGFibGUoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmZvY3VzSW5pdGlhbEVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKSl9KX0pfSx0LnByb3RvdHlwZS5fZ2V0UmVnaW9uQm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2Nkay1mb2N1cy1yZWdpb24tIit0KyJdLCBbY2RrRm9jdXNSZWdpb24iK3QrIl0sIFtjZGstZm9jdXMtIit0KyJdIiksbj0wO248ZS5sZW5ndGg7bisrKWVbbl0uaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtIit0KT9jb25zb2xlLndhcm4oIkZvdW5kIHVzZSBvZiBkZXByZWNhdGVkIGF0dHJpYnV0ZSAnY2RrLWZvY3VzLSIrdCsiJywgdXNlICdjZGtGb2N1c1JlZ2lvbiIrdCsiJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wLiIsZVtuXSk6ZVtuXS5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy1yZWdpb24tIit0KSYmY29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy1yZWdpb24tIit0KyInLCB1c2UgJ2Nka0ZvY3VzUmVnaW9uIit0KyInIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAuIixlW25dKTtyZXR1cm4ic3RhcnQiPT10P2UubGVuZ3RoP2VbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfSx0LnByb3RvdHlwZS5mb2N1c0luaXRpYWxFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO3JldHVybiB0Pyh0Lmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLWluaXRpYWwiKSYmY29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy1pbml0aWFsJywgdXNlICdjZGtGb2N1c0luaXRpYWwnIGluc3RlYWQuIFRoZSBkZXByZWNhdGVkIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gNy4wLjAiLHQpLHQuZm9jdXMoKSwhMCk6dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl9LHQucHJvdG90eXBlLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH0sdC5wcm90b3R5cGUuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoImVuZCIpO3JldHVybiB0JiZ0LmZvY3VzKCksISF0fSx0LnByb3RvdHlwZS5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2Zvcih2YXIgZT10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXMsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGVbbl0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2Zvcih2YXIgZT10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXMsbj1lLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgcj1lW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQoZVtuXSk6bnVsbDtpZihyKXJldHVybiByfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fY3JlYXRlQW5jaG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQudGFiSW5kZXg9dGhpcy5fZW5hYmxlZD8wOi0xLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdH0sdC5wcm90b3R5cGUuX2V4ZWN1dGVPblN0YWJsZT1mdW5jdGlvbih0KXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/dCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKGl1KDEpKS5zdWJzY3JpYmUodCl9LHR9KCkscWg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgSGgodCx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxlKX0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUoQmgpLGVlKFVlKSxlZShXcykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxHaD1uZXcgbXQoImxpdmVBbm5vdW5jZXJFbGVtZW50Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLFdoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2RvY3VtZW50PWUsdGhpcy5fbGl2ZUVsZW1lbnQ9dHx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1yZXR1cm4gdC5wcm90b3R5cGUuYW5ub3VuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0icG9saXRlIiksdGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9IiIsdGhpcy5fbGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLGUpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD10LGUoKX0sMTAwKX0pfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2xpdmVFbGVtZW50JiZ0aGlzLl9saXZlRWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9saXZlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2xpdmVFbGVtZW50KX0sdC5wcm90b3R5cGUuX2NyZWF0ZUxpdmVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShHaCw4KSxlZShXcykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxRaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7fSx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MH1yZXR1cm4gdC5wcm90b3R5cGUubW9uaXRvcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYodm9pZCAwPT09ZSYmKGU9ITEpLCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGRsKG51bGwpO2lmKHRoaXMuX2VsZW1lbnRJbmZvLmhhcyh0KSl7dmFyIHI9dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpO3JldHVybiByLmNoZWNrQ2hpbGRyZW49ZSxyLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9dmFyIGk9e3VubGlzdGVuOmZ1bmN0aW9uKCl7fSxjaGVja0NoaWxkcmVuOmUsc3ViamVjdDpuZXcgaXR9O3RoaXMuX2VsZW1lbnRJbmZvLnNldCh0LGkpLHRoaXMuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBuLl9vbkZvY3VzKGUsdCl9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uQmx1cihlLHQpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsbywhMCksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixhLCEwKX0pLGkudW5saXN0ZW49ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixvLCEwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGEsITApfSxpLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXModCksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKHQpLHRoaXMuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpKX0sdC5wcm90b3R5cGUuZm9jdXNWaWE9ZnVuY3Rpb24odCxlKXt0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnN0b3BNb25pdG9yaW5nKG4pfSl9LHQucHJvdG90eXBlLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXt2YXIgZT1mdW5jdGlvbigpe3QuX2xhc3RUb3VjaFRhcmdldD1udWxsLHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSxuPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0fHx0Ll9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSgibW91c2UiKX0scj1mdW5jdGlvbihlKXtudWxsIT10Ll90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHQuX3RvdWNoVGltZW91dElkKSx0Ll9sYXN0VG91Y2hUYXJnZXQ9ZS50YXJnZXQsdC5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9sYXN0VG91Y2hUYXJnZXQ9bnVsbH0sNjUwKX0saT1mdW5jdGlvbigpe3QuX3dpbmRvd0ZvY3VzZWQ9ITAsdC5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll93aW5kb3dGb2N1c2VkPSExfSl9O3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsciwhZWwoKXx8e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsaSl9KSx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixyLCFlbCgpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixpKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0pfSl9LHQucHJvdG90eXBlLl93YXNDYXVzZWRCeVRvdWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O3JldHVybiB0aGlzLl9sYXN0VG91Y2hUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlIGluc3RhbmNlb2YgTm9kZSYmKGU9PT10aGlzLl9sYXN0VG91Y2hUYXJnZXR8fGUuY29udGFpbnModGhpcy5fbGFzdFRvdWNoVGFyZ2V0KSl9LHQucHJvdG90eXBlLl9vbkZvY3VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO2lmKG4mJihuLmNoZWNrQ2hpbGRyZW58fGU9PT10LnRhcmdldCkpe3ZhciByPXRoaXMuX29yaWdpbjtyfHwocj10aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOnRoaXMuX3dhc0NhdXNlZEJ5VG91Y2godCk/InRvdWNoIjoicHJvZ3JhbSIpLHRoaXMuX3NldENsYXNzZXMoZSxyKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxyKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49cn19LHQucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7IW58fG4uY2hlY2tDaGlsZHJlbiYmdC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZS5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxudWxsKSl9LHQucHJvdG90eXBlLl9lbWl0T3JpZ2luPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Lm5leHQoZSl9KX0sdC5wcm90b3R5cGUuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpezE9PSsrdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50JiZ0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpfSx0LnByb3RvdHlwZS5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30pfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShVZSksZWUodGwpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksS2g9ImFjY2VudCIsWmg9InByaW1hcnkiLFloPVsibWF0LWJ1dHRvbiIsIm1hdC1mbGF0LWJ1dHRvbiIsIm1hdC1pY29uLWJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwibWF0LXN0cm9rZWQtYnV0dG9uIiwibWF0LW1pbmktZmFiIiwibWF0LWZhYiJdLFhoPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7by5fcGxhdGZvcm09bixvLl9mb2N1c01vbml0b3I9cixvLl9hbmltYXRpb25Nb2RlPWksby5pc1JvdW5kQnV0dG9uPW8uX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmFiIiwibWF0LW1pbmktZmFiIiksby5pc0ljb25CdXR0b249by5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1pY29uLWJ1dHRvbiIpO2Zvcih2YXIgYT0wLHM9WWg7YTxzLmxlbmd0aDthKyspe3ZhciBsPXNbYV07by5faGFzSG9zdEF0dHJpYnV0ZXMobCkmJmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGwpfXJldHVybiBvLl9mb2N1c01vbml0b3IubW9uaXRvcihvLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApLG8uaXNSb3VuZEJ1dHRvbj9vLmNvbG9yPUtoOm8uX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmxhdC1idXR0b24iKSYmKG8uY29sb3I9WmgpLG99cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZS5wcm90b3R5cGUuX2lzUmlwcGxlRGlzYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5faGFzSG9zdEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2dldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKGUpfSl9LGV9KGFoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZWQ9ITEscn1yZXR1cm4gaShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1nbCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShzaChmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSl9KCkpKSwkaD1mdW5jdGlvbigpe307ZnVuY3Rpb24gSmgoKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LmRvY3VtZW50fWZ1bmN0aW9uIHRmKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgRGw7Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBMbCh0KX19ZnVuY3Rpb24gZWYodCxlLG4scixpLG8pe3ZvaWQgMD09PWkmJihpPXt9KSx2b2lkIDA9PT1vJiYobz17fSk7dmFyIGE9W10scz1bXSxsPS0xLHU9bnVsbDtpZihyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5vZmZzZXQscj1uPT1sLGM9ciYmdXx8e307T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1uLHM9dFtuXTtpZigib2Zmc2V0IiE9PW4pc3dpdGNoKHI9ZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWUocixhKSxzKXtjYXNlIGpsOnM9aVtuXTticmVhaztjYXNlIElsOnM9b1tuXTticmVhaztkZWZhdWx0OnM9ZS5ub3JtYWxpemVTdHlsZVZhbHVlKG4scixzLGEpfWNbcl09c30pLHJ8fHMucHVzaChjKSx1PWMsbD1ufSksYS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYW5pbWF0ZSBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAiK2Euam9pbigiXG4gLSAiKSk7cmV0dXJuIHN9ZnVuY3Rpb24gbmYodCxlLG4scil7c3dpdGNoKGUpe2Nhc2Uic3RhcnQiOnQub25TdGFydChmdW5jdGlvbigpe3JldHVybiByKG4mJnJmKG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIobiYmcmYobiwiZG9uZSIsdCkpfSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0Lm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiByKG4mJnJmKG4sImRlc3Ryb3kiLHQpKX0pfX1mdW5jdGlvbiByZih0LGUsbil7dmFyIHI9bi50b3RhbFRpbWUsaT1vZih0LmVsZW1lbnQsdC50cmlnZ2VyTmFtZSx0LmZyb21TdGF0ZSx0LnRvU3RhdGUsZXx8dC5waGFzZU5hbWUsdm9pZCAwPT1yP3QudG90YWxUaW1lOnIsISFuLmRpc2FibGVkKSxvPXQuX2RhdGE7cmV0dXJuIG51bGwhPW8mJihpLl9kYXRhPW8pLGl9ZnVuY3Rpb24gb2YodCxlLG4scixpLG8sYSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPSIiKSx2b2lkIDA9PT1vJiYobz0wKSx7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsZnJvbVN0YXRlOm4sdG9TdGF0ZTpyLHBoYXNlTmFtZTppLHRvdGFsVGltZTpvLGRpc2FibGVkOiEhYX19ZnVuY3Rpb24gYWYodCxlLG4pe3ZhciByO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhyPXQuZ2V0KGUpKXx8dC5zZXQoZSxyPW4pOihyPXRbZV0pfHwocj10W2VdPW4pLHJ9ZnVuY3Rpb24gc2YodCl7dmFyIGU9dC5pbmRleE9mKCI6Iik7cmV0dXJuW3Quc3Vic3RyaW5nKDEsZSksdC5zdWJzdHIoZSsxKV19dmFyIGxmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LHVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LGNmPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX07aWYoSmgoKSl7aWYobGY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0sRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyl1Zj1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hdGNoZXMoZSl9O2Vsc2V7dmFyIGhmPUVsZW1lbnQucHJvdG90eXBlLGZmPWhmLm1hdGNoZXNTZWxlY3Rvcnx8aGYubW96TWF0Y2hlc1NlbGVjdG9yfHxoZi5tc01hdGNoZXNTZWxlY3Rvcnx8aGYub01hdGNoZXNTZWxlY3Rvcnx8aGYud2Via2l0TWF0Y2hlc1NlbGVjdG9yO2ZmJiYodWY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmYuYXBwbHkodCxbZV0pfSl9Y2Y9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVtdO2lmKG4pci5wdXNoLmFwcGx5KHIsbCh0LnF1ZXJ5U2VsZWN0b3JBbGwoZSkpKTtlbHNle3ZhciBpPXQucXVlcnlTZWxlY3RvcihlKTtpJiZyLnB1c2goaSl9cmV0dXJuIHJ9fXZhciBwZj1udWxsLGRmPSExO2Z1bmN0aW9uIG1mKHQpe3BmfHwocGY9eWYoKXx8e30sZGY9ISFwZi5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gcGYuc3R5bGUpO3ZhciBlPSEwO3JldHVybiBwZi5zdHlsZSYmIWZ1bmN0aW9uKHQpe3JldHVybiJlYmtpdCI9PXQuc3Vic3RyaW5nKDEsNil9KHQpJiYhKGU9dCBpbiBwZi5zdHlsZSkmJmRmJiYoZT0iV2Via2l0Iit0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpaW4gcGYuc3R5bGUpLGV9ZnVuY3Rpb24geWYoKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmJvZHk6bnVsbH12YXIgZ2Y9dWYsdmY9bGYsX2Y9Y2Y7ZnVuY3Rpb24gYmYodCl7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9bi5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpO2Vbcl09dFtuXX0pLGV9dmFyIHdmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBtZih0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZ2YodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZmKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gX2YodCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBufHwiIn0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtyZXR1cm4gdm9pZCAwPT09byYmKG89W10pLG5ldyBEbChuLHIpfSx0fSgpLHhmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5OT09QPW5ldyB3Zix0fSgpLENmPTFlMztmdW5jdGlvbiBFZih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hZXx8ZS5sZW5ndGg8Mj8wOlNmKHBhcnNlRmxvYXQoZVsxXSksZVsyXSl9ZnVuY3Rpb24gU2YodCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gdCpDZjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBrZih0LGUsbil7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/dDpmdW5jdGlvbih0LGUsbil7dmFyIHIsaT0wLG89IiI7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgYT10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09YSlyZXR1cm4gZS5wdXNoKCdUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZC4nKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07cj1TZihwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO3ZhciBzPWFbM107bnVsbCE9cyYmKGk9U2YoTWF0aC5mbG9vcihwYXJzZUZsb2F0KHMpKSxhWzRdKSk7dmFyIGw9YVs1XTtsJiYobz1sKX1lbHNlIHI9dDtpZighbil7dmFyIHU9ITEsYz1lLmxlbmd0aDtyPDAmJihlLnB1c2goIkR1cmF0aW9uIHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSx1PSEwKSxpPDAmJihlLnB1c2goIkRlbGF5IHZhbHVlcyBiZWxvdyAwIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBhbmltYXRpb24gc3RlcC4iKSx1PSEwKSx1JiZlLnNwbGljZShjLDAsJ1RoZSBwcm92aWRlZCB0aW1pbmcgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkLicpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5OmksZWFzaW5nOm99fSh0LGUsbil9ZnVuY3Rpb24gVGYodCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7ZVtuXT10W25dfSksZX1mdW5jdGlvbiBBZih0LGUsbil7aWYodm9pZCAwPT09biYmKG49e30pLGUpZm9yKHZhciByIGluIHQpbltyXT10W3JdO2Vsc2UgVGYodCxuKTtyZXR1cm4gbn1mdW5jdGlvbiBQZih0LGUpe3Quc3R5bGUmJk9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9amYobik7dC5zdHlsZVtyXT1lW25dfSl9ZnVuY3Rpb24gT2YodCxlKXt0LnN0eWxlJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWpmKGUpO3Quc3R5bGVbbl09IiJ9KX1mdW5jdGlvbiBJZih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8xPT10Lmxlbmd0aD90WzBdOk1sKHQpOnR9dmFyIE1mPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIE5mKHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxyPXZvaWQgMDtyPU1mLmV4ZWMobik7KWUucHVzaChyWzFdKTtNZi5sYXN0SW5kZXg9MH1yZXR1cm4gZX1mdW5jdGlvbiBSZih0LGUsbil7dmFyIHI9dC50b1N0cmluZygpLGk9ci5yZXBsYWNlKE1mLGZ1bmN0aW9uKHQscil7dmFyIGk9ZVtyXTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eShyKXx8KG4ucHVzaCgiUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBwYXJhbSAiK3IpLGk9IiIpLGkudG9TdHJpbmcoKX0pO3JldHVybiBpPT1yP3Q6aX1mdW5jdGlvbiBEZih0KXtmb3IodmFyIGU9W10sbj10Lm5leHQoKTshbi5kb25lOyllLnB1c2gobi52YWx1ZSksbj10Lm5leHQoKTtyZXR1cm4gZX12YXIgTGY9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIGpmKHQpe3JldHVybiB0LnJlcGxhY2UoTGYsZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIHRbMV0udG9VcHBlckNhc2UoKX0pfWZ1bmN0aW9uIEZmKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBWZih0LGUsbil7dmFyIHI9T2JqZWN0LmtleXMobik7aWYoci5sZW5ndGgmJmUubGVuZ3RoKXt2YXIgaT1lWzBdLG89W107aWYoci5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kuaGFzT3duUHJvcGVydHkodCl8fG8ucHVzaCh0KSxpW3RdPW5bdF19KSxvLmxlbmd0aClmb3IodmFyIGE9ZnVuY3Rpb24oKXt2YXIgbj1lW3NdO28uZm9yRWFjaChmdW5jdGlvbihlKXtuW2VdPXpmKHQsZSl9KX0scz0xO3M8ZS5sZW5ndGg7cysrKWEoKX1yZXR1cm4gZX1mdW5jdGlvbiBCZih0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIHpmKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfXZhciBVZj0iKiIsSGY9bmV3IFNldChbInRydWUiLCIxIl0pLHFmPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gR2YodCxlKXt2YXIgbj1IZi5oYXModCl8fHFmLmhhcyh0KSxyPUhmLmhhcyhlKXx8cWYuaGFzKGUpO3JldHVybiBmdW5jdGlvbihpLG8pe3ZhciBhPXQ9PVVmfHx0PT1pLHM9ZT09VWZ8fGU9PW87cmV0dXJuIWEmJm4mJiJib29sZWFuIj09dHlwZW9mIGkmJihhPWk/SGYuaGFzKHQpOnFmLmhhcyh0KSksIXMmJnImJiJib29sZWFuIj09dHlwZW9mIG8mJihzPW8/SGYuaGFzKGUpOnFmLmhhcyhlKSksYSYmc319dmFyIFdmPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIFFmKHQsZSxuKXtyZXR1cm4gbmV3IEtmKHQpLmJ1aWxkKGUsbil9dmFyIEtmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kcml2ZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgWmYoZSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobiksQmYodGhpcyxJZih0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5xdWVyeUNvdW50PTAsaT1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LGw9cy5uYW1lO2wudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT1sfWVsc2UgaWYoMT09dC50eXBlKXt2YXIgdT1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO3IrPXUucXVlcnlDb3VudCxpKz11LmRlcENvdW50LGEucHVzaCh1KX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDpyLGRlcENvdW50Omksb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIGk9bmV3IFNldCxvPXJ8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYoWWYodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtOZihlW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe28uaGFzT3duUHJvcGVydHkodCl8fGkuYWRkKHQpfSl9KX19KSxpLnNpemUpe3ZhciBhPURmKGkudmFsdWVzKCkpO2UuZXJyb3JzLnB1c2goJ3N0YXRlKCInK3QubmFtZSsnIiwgLi4uKSBtdXN0IGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgc3R5bGUgc3Vic3RpdHV0aW9uczogJythLmpvaW4oIiwgIikpfX1yZXR1cm57dHlwZTowLG5hbWU6dC5uYW1lLHN0eWxlOm4sb3B0aW9uczpyP3twYXJhbXM6cn06bnVsbH19LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDt2YXIgbixyLGksbz1CZih0aGlzLElmKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOihuPXQuZXhwcixyPWUuZXJyb3JzLGk9W10sInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUsbil7aWYoIjoiPT10WzBdKXt2YXIgcj1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQoZSk+cGFyc2VGbG9hdCh0KX07Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKTxwYXJzZUZsb2F0KHQpfTtkZWZhdWx0OnJldHVybiBlLnB1c2goJ1RoZSB0cmFuc2l0aW9uIGFsaWFzIHZhbHVlICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLCIqID0+ICoifX0odCxuKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdm9pZCBlLnB1c2gocik7dD1yfXZhciBpPXQubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIG4ucHVzaCgnVGhlIHByb3ZpZGVkIHRyYW5zaXRpb24gZXhwcmVzc2lvbiAiJyt0KyciIGlzIG5vdCBzdXBwb3J0ZWQnKSxlO3ZhciBvPWlbMV0sYT1pWzJdLHM9aVszXTtlLnB1c2goR2YobyxzKSksIjwiIT1hWzBdfHxvPT1VZiYmcz09VWZ8fGUucHVzaChHZihzLG8pKX0odCxpLHIpfSk6aS5wdXNoKG4pLGkpLGFuaW1hdGlvbjpvLHF1ZXJ5Q291bnQ6ZS5xdWVyeUNvdW50LGRlcENvdW50OmUuZGVwQ291bnQsb3B0aW9uczpYZih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJue3R5cGU6MixzdGVwczp0LnN0ZXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQmYobix0LGUpfSksb3B0aW9uczpYZih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmN1cnJlbnRUaW1lLGk9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9cjt2YXIgbz1CZihuLHQsZSk7cmV0dXJuIGk9TWF0aC5tYXgoaSxlLmN1cnJlbnRUaW1lKSxvfSk7cmV0dXJuIGUuY3VycmVudFRpbWU9aSx7dHlwZTozLHN0ZXBzOm8sb3B0aW9uczpYZih0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0LGUpe3ZhciBuPW51bGw7aWYodC5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSluPXQ7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuICRmKGtmKHQsZSkuZHVyYXRpb24sMCwiIik7dmFyIHI9dDtpZihyLnNwbGl0KC9ccysvKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJ7Ij09dC5jaGFyQXQoMCkmJiJ7Ij09dC5jaGFyQXQoMSl9KSl7dmFyIGk9JGYoMCwwLCIiKTtyZXR1cm4gaS5keW5hbWljPSEwLGkuc3RyVmFsdWU9cixpfXJldHVybiAkZigobj1ufHxrZihyLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1yO3ZhciBpPXQuc3R5bGVzP3Quc3R5bGVzOk5sKHt9KTtpZig1PT1pLnR5cGUpbj10aGlzLnZpc2l0S2V5ZnJhbWVzKGksZSk7ZWxzZXt2YXIgbz10LnN0eWxlcyxhPSExO2lmKCFvKXthPSEwO3ZhciBzPXt9O3IuZWFzaW5nJiYocy5lYXNpbmc9ci5lYXNpbmcpLG89Tmwocyl9ZS5jdXJyZW50VGltZSs9ci5kdXJhdGlvbityLmRlbGF5O3ZhciBsPXRoaXMudmlzaXRTdHlsZShvLGUpO2wuaXNFbXB0eVN0ZXA9YSxuPWx9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOnIsc3R5bGU6bixvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufSx0LnByb3RvdHlwZS5fbWFrZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49W107QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQ/dD09SWw/bi5wdXNoKHQpOmUuZXJyb3JzLnB1c2goIlRoZSBwcm92aWRlZCBzdHlsZSBzdHJpbmcgdmFsdWUgIit0KyIgaXMgbm90IGFsbG93ZWQuIik6bi5wdXNoKHQpfSk6bi5wdXNoKHQuc3R5bGVzKTt2YXIgcj0hMSxpPW51bGw7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtpZihZZih0KSl7dmFyIGU9dCxuPWUuZWFzaW5nO2lmKG4mJihpPW4sZGVsZXRlIGUuZWFzaW5nKSwhcilmb3IodmFyIG8gaW4gZSlpZihlW29dLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7cj0hMDticmVha319fSkse3R5cGU6NixzdHlsZXM6bixlYXNpbmc6aSxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOnIsb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlU3R5bGVBc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtyJiZvPjAmJihvLT1yLmR1cmF0aW9uK3IuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKG4uX2RyaXZlci52YWxpZGF0ZVN0eWxlUHJvcGVydHkocikpe3ZhciBhLHMsbCx1PWUuY29sbGVjdGVkU3R5bGVzW2UuY3VycmVudFF1ZXJ5U2VsZWN0b3JdLGM9dVtyXSxoPSEwO2MmJihvIT1pJiZvPj1jLnN0YXJ0VGltZSYmaTw9Yy5lbmRUaW1lJiYoZS5lcnJvcnMucHVzaCgnVGhlIENTUyBwcm9wZXJ0eSAiJytyKyciIHRoYXQgZXhpc3RzIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK2Muc3RhcnRUaW1lKydtcyIgYW5kICInK2MuZW5kVGltZSsnbXMiIGlzIGFsc28gYmVpbmcgYW5pbWF0ZWQgaW4gYSBwYXJhbGxlbCBhbmltYXRpb24gYmV0d2VlbiB0aGUgdGltZXMgb2YgIicrbysnbXMiIGFuZCAiJytpKydtcyInKSxoPSExKSxvPWMuc3RhcnRUaW1lKSxoJiYodVtyXT17c3RhcnRUaW1lOm8sZW5kVGltZTppfSksZS5vcHRpb25zJiYoYT1lLmVycm9ycyxzPWUub3B0aW9ucy5wYXJhbXN8fHt9LChsPU5mKHRbcl0pKS5sZW5ndGgmJmwuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK3IrJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIikscjt2YXIgaT0wLG89W10sYT0hMSxzPSExLGw9MCx1PXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPW4uX21ha2VTdHlsZUFzdCh0LGUpLHU9bnVsbCE9ci5vZmZzZXQ/ci5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoWWYodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYoWWYodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShyLnN0eWxlcyksYz0wO3JldHVybiBudWxsIT11JiYoaSsrLGM9ci5vZmZzZXQ9dSkscz1zfHxjPDB8fGM+MSxhPWF8fGM8bCxsPWMsby5wdXNoKGMpLHJ9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgYz10LnN0ZXBzLmxlbmd0aCxoPTA7aT4wJiZpPGM/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09aSYmKGg9MS8oYy0xKSk7dmFyIGY9Yy0xLHA9ZS5jdXJyZW50VGltZSxkPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09ZC5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIGE9aD4wP2k9PWY/MTpoKmk6b1tpXSxzPWEqbTtlLmN1cnJlbnRUaW1lPXArZC5kZWxheStzLGQuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxyLnN0eWxlcy5wdXNoKHQpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpCZih0aGlzLElmKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOlhmKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVDaGlsZD1mdW5jdGlvbih0LGUpe3JldHVybiBlLmRlcENvdW50Kysse3R5cGU6OSxvcHRpb25zOlhmKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVSZWY9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOlhmKHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixyPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5jdXJyZW50UXVlcnk9dDt2YXIgaT1zKGZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIjpzZWxmIj09dH0pO3JldHVybiBlJiYodD10LnJlcGxhY2UoV2YsIiIpKSxbdD10LnJlcGxhY2UoL0BcKi9nLCIubmctdHJpZ2dlciIpLnJlcGxhY2UoL0BcdysvZyxmdW5jdGlvbih0KXtyZXR1cm4iLm5nLXRyaWdnZXItIit0LnN1YnN0cigxKX0pLnJlcGxhY2UoLzphbmltYXRpbmcvZywiLm5nLWFuaW1hdGluZyIpLGVdfSh0LnNlbGVjdG9yKSwyKSxvPWlbMF0sYT1pWzFdO2UuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bi5sZW5ndGg/bisiICIrbzpvLGFmKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3Ise30pO3ZhciBsPUJmKHRoaXMsSWYodC5hbmltYXRpb24pLGUpO3JldHVybiBlLmN1cnJlbnRRdWVyeT1udWxsLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bix7dHlwZToxMSxzZWxlY3RvcjpvLGxpbWl0OnIubGltaXR8fDAsb3B0aW9uYWw6ISFyLm9wdGlvbmFsLGluY2x1ZGVTZWxmOmEsYW5pbWF0aW9uOmwsb3JpZ2luYWxTZWxlY3Rvcjp0LnNlbGVjdG9yLG9wdGlvbnM6WGYodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKCJzdGFnZ2VyKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgcXVlcnkoKSIpO3ZhciBuPSJmdWxsIj09PXQudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OmtmKHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOkJmKHRoaXMsSWYodC5hbmltYXRpb24pLGUpLHRpbWluZ3M6bixvcHRpb25zOm51bGx9fSx0fSgpLFpmPWZ1bmN0aW9uKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz17fSx0aGlzLm9wdGlvbnM9bnVsbH07ZnVuY3Rpb24gWWYodCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiBYZih0KXt2YXIgZTtyZXR1cm4gdD8odD1UZih0KSkucGFyYW1zJiYodC5wYXJhbXM9KGU9dC5wYXJhbXMpP1RmKGUpOm51bGwpOnQ9e30sdH1mdW5jdGlvbiAkZih0LGUsbil7cmV0dXJue2R1cmF0aW9uOnQsZGVsYXk6ZSxlYXNpbmc6bn19ZnVuY3Rpb24gSmYodCxlLG4scixpLG8sYSxzKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9bnVsbCksdm9pZCAwPT09cyYmKHM9ITEpLHt0eXBlOjEsZWxlbWVudDp0LGtleWZyYW1lczplLHByZVN0eWxlUHJvcHM6bixwb3N0U3R5bGVQcm9wczpyLGR1cmF0aW9uOmksZGVsYXk6byx0b3RhbFRpbWU6aStvLGVhc2luZzphLHN1YlRpbWVsaW5lOnN9fXZhciB0cD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9tYXA9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUuY29uc3VtZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBlP3RoaXMuX21hcC5kZWxldGUodCk6ZT1bXSxlfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9tYXAuZ2V0KHQpO258fHRoaXMuX21hcC5zZXQodCxuPVtdKSxuLnB1c2guYXBwbHkobixsKGUpKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX21hcC5jbGVhcigpfSx0fSgpLGVwPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxucD1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gcnAodCxlLG4scixpLG8sYSxzLGwsdSl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSksdm9pZCAwPT09dSYmKHU9W10pLChuZXcgaXApLmJ1aWxkS2V5ZnJhbWVzKHQsZSxuLHIsaSxvLGEscyxsLHUpfXZhciBpcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyxsLHUpe3ZvaWQgMD09PXUmJih1PVtdKSxsPWx8fG5ldyB0cDt2YXIgYz1uZXcgYXAodCxlLGwscixpLHUsW10pO2Mub3B0aW9ucz1zLGMuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbb10sbnVsbCxjLmVycm9ycyxzKSxCZih0aGlzLG4sYyk7dmFyIGg9Yy50aW1lbGluZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbnRhaW5zQW5pbWF0aW9uKCl9KTtpZihoLmxlbmd0aCYmT2JqZWN0LmtleXMoYSkubGVuZ3RoKXt2YXIgZj1oW2gubGVuZ3RoLTFdO2YuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXx8Zi5zZXRTdHlsZXMoW2FdLG51bGwsYy5lcnJvcnMscyl9cmV0dXJuIGgubGVuZ3RoP2gubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJ1aWxkS2V5ZnJhbWVzKCl9KTpbSmYoZSxbXSxbXSxbXSwwLDAsIiIsITEpXX0sdC5wcm90b3R5cGUudmlzaXRUcmlnZ2VyPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS52aXNpdFN0YXRlPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS52aXNpdFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdWJJbnN0cnVjdGlvbnMuY29uc3VtZShlLmVsZW1lbnQpO2lmKG4pe3ZhciByPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhuLHIsci5vcHRpb25zKTtpIT1vJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShvKX1lLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVSZWY9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtuLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sbiksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobi5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLl92aXNpdFN1Ykluc3RydWN0aW9ucz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaT1udWxsIT1uLmR1cmF0aW9uP0VmKG4uZHVyYXRpb24pOm51bGwsbz1udWxsIT1uLmRlbGF5P0VmKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1pJiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxpLG8pO3I9TWF0aC5tYXgocixuLmR1cmF0aW9uK24uZGVsYXkpfSkscn0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxCZih0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U2VxdWVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5zdWJDb250ZXh0Q291bnQsaT1lLG89dC5vcHRpb25zO2lmKG8mJihvLnBhcmFtc3x8by5kZWxheSkmJigoaT1lLmNyZWF0ZVN1YkNvbnRleHQobykpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPW8uZGVsYXkpKXs2PT1pLnByZXZpb3VzTm9kZS50eXBlJiYoaS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaS5wcmV2aW91c05vZGU9b3ApO3ZhciBhPUVmKG8uZGVsYXkpO2kuZGVsYXlOZXh0U3RlcChhKX10LnN0ZXBzLmxlbmd0aCYmKHQuc3RlcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gQmYobix0LGkpfSksaS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaS5zdWJDb250ZXh0Q291bnQ+ciYmaS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1bXSxpPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/RWYodC5vcHRpb25zLmRlbGF5KTowO3Quc3RlcHMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgcz1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtvJiZzLmRlbGF5TmV4dFN0ZXAobyksQmYobixhLHMpLGk9TWF0aC5tYXgoaSxzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksci5wdXNoKHMuY3VycmVudFRpbWVsaW5lKX0pLHIuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KX0pLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLl92aXNpdFRpbWluZz1mdW5jdGlvbih0LGUpe2lmKHQuZHluYW1pYyl7dmFyIG49dC5zdHJWYWx1ZTtyZXR1cm4ga2YoZS5wYXJhbXM/UmYobixlLnBhcmFtcyxlLmVycm9ycyk6bixlLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOnQuZHVyYXRpb24sZGVsYXk6dC5kZWxheSxlYXNpbmc6dC5lYXNpbmd9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSkscj1lLmN1cnJlbnRUaW1lbGluZTtuLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKG4uZGVsYXkpLHIuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO3ZhciBpPXQuc3R5bGU7NT09aS50eXBlP3RoaXMudmlzaXRLZXlmcmFtZXMoaSxlKTooZS5pbmNyZW1lbnRUaW1lKG4uZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShpLGUpLHIuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudFRpbWVsaW5lLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IXImJm4uZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aCYmbi5mb3J3YXJkRnJhbWUoKTt2YXIgaT1yJiZyLmVhc2luZ3x8dC5lYXNpbmc7dC5pc0VtcHR5U3RlcD9uLmFwcGx5RW1wdHlTdGVwKGkpOm4uc2V0U3R5bGVzKHQuc3R5bGVzLGksZS5lcnJvcnMsZS5vcHRpb25zKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdEtleWZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24saT1uLmR1cmF0aW9uLG89ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO28uZWFzaW5nPW4uZWFzaW5nLHQuc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7by5mb3J3YXJkVGltZSgodC5vZmZzZXR8fDApKmkpLG8uc2V0U3R5bGVzKHQuc3R5bGVzLHQuZWFzaW5nLGUuZXJyb3JzLGUub3B0aW9ucyksby5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobyksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocitpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGk9dC5vcHRpb25zfHx7fSxvPWkuZGVsYXk/RWYoaS5kZWxheSk6MDtvJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PXImJmUuY3VycmVudFRpbWVsaW5lLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGgpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9b3ApO3ZhciBhPXIscz1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIWkub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9cy5sZW5ndGg7dmFyIGw9bnVsbDtzLmZvckVhY2goZnVuY3Rpb24ocixpKXtlLmN1cnJlbnRRdWVyeUluZGV4PWk7dmFyIHM9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxyKTtvJiZzLmRlbGF5TmV4dFN0ZXAobykscj09PWUuZWxlbWVudCYmKGw9cy5jdXJyZW50VGltZWxpbmUpLEJmKG4sdC5hbmltYXRpb24scykscy5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSksbCYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuPWUucGFyZW50Q29udGV4dCxyPWUuY3VycmVudFRpbWVsaW5lLGk9dC50aW1pbmdzLG89TWF0aC5hYnMoaS5kdXJhdGlvbiksYT1vKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLHM9byplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChpLmR1cmF0aW9uPDA/InJldmVyc2UiOmkuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9YS1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX12YXIgbD1lLmN1cnJlbnRUaW1lbGluZTtzJiZsLmRlbGF5TmV4dFN0ZXAocyk7dmFyIHU9bC5jdXJyZW50VGltZTtCZih0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXQsbi5jdXJyZW50U3RhZ2dlclRpbWU9ci5jdXJyZW50VGltZS11KyhyLnN0YXJ0VGltZS1uLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfSx0fSgpLG9wPXt9LGFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPW4sdGhpcy5fZW50ZXJDbGFzc05hbWU9cix0aGlzLl9sZWF2ZUNsYXNzTmFtZT1pLHRoaXMuZXJyb3JzPW8sdGhpcy50aW1lbGluZXM9YSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPW9wLHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1zfHxuZXcgc3AodGhpcy5fZHJpdmVyLGUsMCksYS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS51cGRhdGVPcHRpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih0KXt2YXIgcj10LGk9dGhpcy5vcHRpb25zO251bGwhPXIuZHVyYXRpb24mJihpLmR1cmF0aW9uPUVmKHIuZHVyYXRpb24pKSxudWxsIT1yLmRlbGF5JiYoaS5kZWxheT1FZihyLmRlbGF5KSk7dmFyIG89ci5wYXJhbXM7aWYobyl7dmFyIGE9aS5wYXJhbXM7YXx8KGE9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtlJiZhLmhhc093blByb3BlcnR5KHQpfHwoYVt0XT1SZihvW3RdLGEsbi5lcnJvcnMpKX0pfX19LHQucHJvdG90eXBlLl9jb3B5T3B0aW9ucz1mdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMub3B0aW9ucyl7dmFyIGU9dGhpcy5vcHRpb25zLnBhcmFtcztpZihlKXt2YXIgbj10LnBhcmFtcz17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09ZVt0XX0pfX1yZXR1cm4gdH0sdC5wcm90b3R5cGUuY3JlYXRlU3ViQ29udGV4dD1mdW5jdGlvbihlLG4scil7dm9pZCAwPT09ZSYmKGU9bnVsbCk7dmFyIGk9bnx8dGhpcy5lbGVtZW50LG89bmV3IHQodGhpcy5fZHJpdmVyLGksdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhpLHJ8fDApKTtyZXR1cm4gby5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsby5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3Msby5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksby51cGRhdGVPcHRpb25zKGUpLG8uY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxvLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsby5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxvfSx0LnByb3RvdHlwZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPW9wLHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LHQpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfSx0LnByb3RvdHlwZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXtkdXJhdGlvbjpudWxsIT1lP2U6dC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsobnVsbCE9bj9uOjApK3QuZGVsYXksZWFzaW5nOiIifSxpPW5ldyBscCh0aGlzLl9kcml2ZXIsdC5lbGVtZW50LHQua2V5ZnJhbWVzLHQucHJlU3R5bGVQcm9wcyx0LnBvc3RTdHlsZVByb3BzLHIsdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goaSkscn0sdC5wcm90b3R5cGUuaW5jcmVtZW50VGltZT1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbit0KX0sdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9LHQucHJvdG90eXBlLmludm9rZVF1ZXJ5PWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT1bXTtpZihyJiZhLnB1c2godGhpcy5lbGVtZW50KSx0Lmxlbmd0aD4wKXt0PSh0PXQucmVwbGFjZShlcCwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKG5wLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7dmFyIHM9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCx0LDEhPW4pOzAhPT1uJiYocz1uPDA/cy5zbGljZShzLmxlbmd0aCtuLHMubGVuZ3RoKTpzLnNsaWNlKDAsbikpLGEucHVzaC5hcHBseShhLGwocykpfXJldHVybiBpfHwwIT1hLmxlbmd0aHx8by5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLGF9LHR9KCksc3A9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fElsLGUuX2N1cnJlbnRLZXlmcmFtZVt0XT1JbH0pLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9LHQucHJvdG90eXBlLnNldFN0eWxlcz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzO2UmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lLmVhc2luZz1lKTt2YXIgbz1yJiZyLnBhcmFtc3x8e30sYT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXsiKiI9PT10PyhuPW58fE9iamVjdC5rZXlzKGUpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09SWx9KTpBZih0LCExLHIpfSkscn0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1SZihhW3RdLG8sbik7aS5fcGVuZGluZ1N0eWxlc1t0XT1lLGkuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCl8fChpLl9iYWNrRmlsbFt0XT1pLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KT9pLl9nbG9iYWxUaW1lbGluZVN0eWxlc1t0XTpJbCksaS5fdXBkYXRlU3R5bGUodCxlKX0pfSx0LnByb3RvdHlwZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fcGVuZGluZ1N0eWxlcyxuPU9iamVjdC5rZXlzKGUpOzAhPW4ubGVuZ3RoJiYodGhpcy5fcGVuZGluZ1N0eWxlcz17fSxuLmZvckVhY2goZnVuY3Rpb24obil7dC5fY3VycmVudEtleWZyYW1lW25dPWVbbl19KSxPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuX2N1cnJlbnRLZXlmcmFtZS5oYXNPd25Qcm9wZXJ0eShlKXx8KHQuX2N1cnJlbnRLZXlmcmFtZVtlXT10Ll9sb2NhbFRpbWVsaW5lU3R5bGVzW2VdKX0pKX0sdC5wcm90b3R5cGUuc25hcHNob3RDdXJyZW50U3R5bGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztPYmplY3Qua2V5cyh0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV07dC5fcGVuZGluZ1N0eWxlc1tlXT1uLHQuX3VwZGF0ZVN0eWxlKGUsbil9KX0sdC5wcm90b3R5cGUuZ2V0RmluYWxLZXlmcmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3BlcnRpZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKXQucHVzaChlKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7T2JqZWN0LmtleXModC5fc3R5bGVTdW1tYXJ5KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWUuX3N0eWxlU3VtbWFyeVtuXSxpPXQuX3N0eWxlU3VtbWFyeVtuXTsoIXJ8fGkudGltZT5yLnRpbWUpJiZlLl91cGRhdGVTdHlsZShuLGkudmFsdWUpfSl9LHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO3ZhciBlPW5ldyBTZXQsbj1uZXcgU2V0LHI9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbixpPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7dmFyIHM9QWYobywhMCk7T2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1zW3RdO3I9PWpsP2UuYWRkKHQpOnI9PUlsJiZuLmFkZCh0KX0pLHJ8fChzLm9mZnNldD1hL3QuZHVyYXRpb24pLGkucHVzaChzKX0pO3ZhciBvPWUuc2l6ZT9EZihlLnZhbHVlcygpKTpbXSxhPW4uc2l6ZT9EZihuLnZhbHVlcygpKTpbXTtpZihyKXt2YXIgcz1pWzBdLGw9VGYocyk7cy5vZmZzZXQ9MCxsLm9mZnNldD0xLGk9W3MsbF19cmV0dXJuIEpmKHRoaXMuZWxlbWVudCxpLG8sYSx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX0sdH0oKSxscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhLHMpe3ZvaWQgMD09PXMmJihzPSExKTt2YXIgbD10LmNhbGwodGhpcyxlLG4sYS5kZWxheSl8fHRoaXM7cmV0dXJuIGwuZWxlbWVudD1uLGwua2V5ZnJhbWVzPXIsbC5wcmVTdHlsZVByb3BzPWksbC5wb3N0U3R5bGVQcm9wcz1vLGwuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPXMsbC50aW1pbmdzPXtkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzaW5nOmEuZWFzaW5nfSxsfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuY29udGFpbnNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9LGUucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5rZXlmcmFtZXMsZT10aGlzLnRpbWluZ3Msbj1lLmRlbGF5LHI9ZS5kdXJhdGlvbixpPWUuZWFzaW5nO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZuKXt2YXIgbz1bXSxhPXIrbixzPW4vYSxsPUFmKHRbMF0sITEpO2wub2Zmc2V0PTAsby5wdXNoKGwpO3ZhciB1PUFmKHRbMF0sITEpO3Uub2Zmc2V0PXVwKHMpLG8ucHVzaCh1KTtmb3IodmFyIGM9dC5sZW5ndGgtMSxoPTE7aDw9YztoKyspe3ZhciBmPUFmKHRbaF0sITEpO2Yub2Zmc2V0PXVwKChuK2Yub2Zmc2V0KnIpL2EpLG8ucHVzaChmKX1yPWEsbj0wLGk9IiIsdD1vfXJldHVybiBKZih0aGlzLmVsZW1lbnQsdCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxyLG4saSwhMCl9LGV9KHNwKTtmdW5jdGlvbiB1cCh0LGUpe3ZvaWQgMD09PWUmJihlPTMpO3ZhciBuPU1hdGgucG93KDEwLGUtMSk7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufXZhciBjcD1mdW5jdGlvbigpe30saHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gamYodCl9LGUucHJvdG90eXBlLm5vcm1hbGl6ZVN0eWxlVmFsdWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9IiIsbz1uLnRvU3RyaW5nKCkudHJpbSgpO2lmKGZwW2VdJiYwIT09biYmIjAiIT09bilpZigibnVtYmVyIj09dHlwZW9mIG4paT0icHgiO2Vsc2V7dmFyIGE9bi5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2goIlBsZWFzZSBwcm92aWRlIGEgQ1NTIHVuaXQgdmFsdWUgZm9yICIrdCsiOiIrbil9cmV0dXJuIG8raX0sZX0oY3ApLGZwPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiJ3aWR0aCxoZWlnaHQsbWluV2lkdGgsbWluSGVpZ2h0LG1heFdpZHRoLG1heEhlaWdodCxsZWZ0LHRvcCxib3R0b20scmlnaHQsZm9udFNpemUsb3V0bGluZVdpZHRoLG91dGxpbmVPZmZzZXQscGFkZGluZ1RvcCxwYWRkaW5nTGVmdCxwYWRkaW5nQm90dG9tLHBhZGRpbmdSaWdodCxtYXJnaW5Ub3AsbWFyZ2luTGVmdCxtYXJnaW5Cb3R0b20sbWFyZ2luUmlnaHQsYm9yZGVyUmFkaXVzLGJvcmRlcldpZHRoLGJvcmRlclRvcFdpZHRoLGJvcmRlckxlZnRXaWR0aCxib3JkZXJSaWdodFdpZHRoLGJvcmRlckJvdHRvbVdpZHRoLHRleHRJbmRlbnQscGVyc3BlY3RpdmUiLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT0hMH0pLGV9KCk7ZnVuY3Rpb24gcHAodCxlLG4scixpLG8sYSxzLGwsdSxjLGgsZil7cmV0dXJue3R5cGU6MCxlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSxpc1JlbW92YWxUcmFuc2l0aW9uOmksZnJvbVN0YXRlOm4sZnJvbVN0eWxlczpvLHRvU3RhdGU6cix0b1N0eWxlczphLHRpbWVsaW5lczpzLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6dSxwb3N0U3R5bGVQcm9wczpjLHRvdGFsVGltZTpoLGVycm9yczpmfX12YXIgZHA9e30sbXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl90cmlnZ2VyTmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fc3RhdGVTdHlsZXM9bn1yZXR1cm4gdC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdChlLG4scixpKX0pfSh0aGlzLmFzdC5tYXRjaGVycyx0LGUsbixyKX0sdC5wcm90b3R5cGUuYnVpbGRTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX3N0YXRlU3R5bGVzWyIqIl0saT10aGlzLl9zdGF0ZVN0eWxlc1t0XSxvPXI/ci5idWlsZFN0eWxlcyhlLG4pOnt9O3JldHVybiBpP2kuYnVpbGRTdHlsZXMoZSxuKTpvfSx0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUsbixyLGksYSxzLGwsdSxjKXt2YXIgaD1bXSxmPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHxkcCxwPXRoaXMuYnVpbGRTdHlsZXMobixzJiZzLnBhcmFtc3x8ZHAsaCksZD1sJiZsLnBhcmFtc3x8ZHAsbT10aGlzLmJ1aWxkU3R5bGVzKHIsZCxoKSx5PW5ldyBTZXQsZz1uZXcgTWFwLHY9bmV3IE1hcCxfPSJ2b2lkIj09PXIsYj17cGFyYW1zOm8oe30sZixkKX0sdz1jP1tdOnJwKHQsZSx0aGlzLmFzdC5hbmltYXRpb24saSxhLHAsbSxiLHUsaCkseD0wO2lmKHcuZm9yRWFjaChmdW5jdGlvbih0KXt4PU1hdGgubWF4KHQuZHVyYXRpb24rdC5kZWxheSx4KX0pLGgubGVuZ3RoKXJldHVybiBwcChlLHRoaXMuX3RyaWdnZXJOYW1lLG4scixfLHAsbSxbXSxbXSxnLHYseCxoKTt3LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5lbGVtZW50LHI9YWYoZyxuLHt9KTt0LnByZVN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gclt0XT0hMH0pO3ZhciBpPWFmKHYsbix7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdPSEwfSksbiE9PWUmJnkuYWRkKG4pfSk7dmFyIEM9RGYoeS52YWx1ZXMoKSk7cmV0dXJuIHBwKGUsdGhpcy5fdHJpZ2dlck5hbWUsbixyLF8scCxtLHcsQyxnLHYseCl9LHR9KCkseXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5zdHlsZXM9dCx0aGlzLmRlZmF1bHRQYXJhbXM9ZX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fSxyPVRmKHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtudWxsIT1uJiYocltlXT1uKX0pLHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIGk9dDtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWlbdF07by5sZW5ndGg+MSYmKG89UmYobyxyLGUpKSxuW3RdPW99KX19KSxufSx0fSgpLGdwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9e30sZS5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnN0YXRlc1t0Lm5hbWVdPW5ldyB5cCh0LnN0eWxlLHQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8e30pfSksdnAodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksdnAodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtuLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgbXAodCxlLG4uc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1uZXcgbXAodCx7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuITB9XSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHRoaXMuc3RhdGVzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250YWluc1F1ZXJpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hdGNoVHJhbnNpdGlvbj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24oaSl7cmV0dXJuIGkubWF0Y2godCxlLG4scil9KXx8bnVsbH0sdC5wcm90b3R5cGUubWF0Y2hTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsbil9LHR9KCk7ZnVuY3Rpb24gdnAodCxlLG4pe3QuaGFzT3duUHJvcGVydHkoZSk/dC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09dFtlXSk6dC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZV09dFtuXSl9dmFyIF9wPW5ldyB0cCxicD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9kcml2ZXI9dCx0aGlzLl9ub3JtYWxpemVyPWUsdGhpcy5fYW5pbWF0aW9ucz17fSx0aGlzLl9wbGF5ZXJzQnlJZD17fSx0aGlzLnBsYXllcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W10scj1RZih0aGlzLl9kcml2ZXIsZSxuKTtpZihuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBidWlsZCB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIituLmpvaW4oIlxuIikpO3RoaXMuX2FuaW1hdGlvbnNbdF09cn0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmVsZW1lbnQsaT1lZigwLHRoaXMuX25vcm1hbGl6ZXIsMCx0LmtleWZyYW1lcyxlLG4pO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShyLGksdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLFtdLCEwKX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaSxvPVtdLGE9dGhpcy5fYW5pbWF0aW9uc1t0XSxzPW5ldyBNYXA7aWYoYT8oaT1ycCh0aGlzLl9kcml2ZXIsZSxhLCJuZy1lbnRlciIsIm5nLWxlYXZlIix7fSx7fSxuLF9wLG8pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFmKHMsdC5lbGVtZW50LHt9KTt0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09bnVsbH0pfSk6KG8ucHVzaCgiVGhlIHJlcXVlc3RlZCBhbmltYXRpb24gZG9lc24ndCBleGlzdCBvciBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCIpLGk9W10pLG8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIitvLmpvaW4oIlxuIikpO3MuZm9yRWFjaChmdW5jdGlvbih0LGUpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1yLl9kcml2ZXIuY29tcHV0ZVN0eWxlKGUsbixJbCl9KX0pO3ZhciBsPXRmKGkubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXMuZ2V0KHQuZWxlbWVudCk7cmV0dXJuIHIuX2J1aWxkUGxheWVyKHQse30sZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkW3RdPWwsbC5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gci5kZXN0cm95KHQpfSksdGhpcy5wbGF5ZXJzLnB1c2gobCksbH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksZGVsZXRlIHRoaXMuX3BsYXllcnNCeUlkW3RdO3ZhciBuPXRoaXMucGxheWVycy5pbmRleE9mKGUpO24+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobiwxKX0sdC5wcm90b3R5cGUuX2dldFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wbGF5ZXJzQnlJZFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHRoZSB0aW1lbGluZSBwbGF5ZXIgcmVmZXJlbmNlZCBieSAiK3QpO3JldHVybiBlfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9b2YoZSwiIiwiIiwiIik7cmV0dXJuIG5mKHRoaXMuX2dldFBsYXllcih0KSxuLGksciksZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5jb21tYW5kPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCJyZWdpc3RlciIhPW4paWYoImNyZWF0ZSIhPW4pe3ZhciBpPXRoaXMuX2dldFBsYXllcih0KTtzd2l0Y2gobil7Y2FzZSJwbGF5IjppLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjppLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6aS5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6aS5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOmkuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjppLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjppLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoclswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KHQpfX1lbHNlIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7ZWxzZSB0aGlzLnJlZ2lzdGVyKHQsclswXSl9LHR9KCksd3A9W10seHA9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LENwPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxFcD0iX19uZ19yZW1vdmVkIixTcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2b2lkIDA9PT1lJiYoZT0iIiksdGhpcy5uYW1lc3BhY2VJZD1lO3ZhciBuPXQmJnQuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dD90Om51bGx9KG4/dC52YWx1ZTp0KSxuKXt2YXIgcj1UZih0KTtkZWxldGUgci52YWx1ZSx0aGlzLm9wdGlvbnM9cn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYWJzb3JiT3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10LnBhcmFtcztpZihlKXt2YXIgbj10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7bnVsbD09blt0XSYmKG5bdF09ZVt0XSl9KX19LHR9KCksa3A9bmV3IFNwKCJ2b2lkIiksVHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5ob3N0RWxlbWVudD1lLHRoaXMuX2VuZ2luZT1uLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz17fSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrdCxEcChlLHRoaXMuX2hvc3RDbGFzc05hbWUpfXJldHVybiB0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGksbz10aGlzO2lmKCF0aGlzLl90cmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgYmVjYXVzZSB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIicrZSsiXCIgZG9lc24ndCBleGlzdCEiKTtpZihudWxsPT1ufHwwPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgYmVjYXVzZSB0aGUgcHJvdmlkZWQgZXZlbnQgaXMgdW5kZWZpbmVkIScpO2lmKCJzdGFydCIhPShpPW4pJiYiZG9uZSIhPWkpdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHRyaWdnZXIgZXZlbnQgIicrbisnIiBmb3IgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCEnKTt2YXIgYT1hZih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOnJ9O2EucHVzaChzKTt2YXIgbD1hZih0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQse30pO3JldHVybiBsLmhhc093blByb3BlcnR5KGUpfHwoRHAodCwibmctdHJpZ2dlciIpLERwKHQsIm5nLXRyaWdnZXItIitlKSxsW2VdPWtwKSxmdW5jdGlvbigpe28uX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7dmFyIHQ9YS5pbmRleE9mKHMpO3Q+PTAmJmEuc3BsaWNlKHQsMSksby5fdHJpZ2dlcnNbZV18fGRlbGV0ZSBsW2VdfSl9fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vyc1t0XSYmKHRoaXMuX3RyaWdnZXJzW3RdPWUsITApfSx0LnByb3RvdHlwZS5fZ2V0VHJpZ2dlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmlnZ2Vyc1t0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBhbmltYXRpb24gdHJpZ2dlciAiJyt0KyciIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIScpO3JldHVybiBlfSx0LnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXM7dm9pZCAwPT09ciYmKHI9ITApO3ZhciBvPXRoaXMuX2dldFRyaWdnZXIoZSksYT1uZXcgUHAodGhpcy5pZCxlLHQpLHM9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7c3x8KERwKHQsIm5nLXRyaWdnZXIiKSxEcCh0LCJuZy10cmlnZ2VyLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxzPXt9KSk7dmFyIGw9c1tlXSx1PW5ldyBTcChuLHRoaXMuaWQpO2lmKCEobiYmbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJmwmJnUuYWJzb3JiT3B0aW9ucyhsLm9wdGlvbnMpLHNbZV09dSxsfHwobD1rcCksInZvaWQiPT09dS52YWx1ZXx8bC52YWx1ZSE9PXUudmFsdWUpe3ZhciBjPWFmKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO2MuZm9yRWFjaChmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZUlkPT1pLmlkJiZ0LnRyaWdnZXJOYW1lPT1lJiZ0LnF1ZXVlZCYmdC5kZXN0cm95KCl9KTt2YXIgaD1vLm1hdGNoVHJhbnNpdGlvbihsLnZhbHVlLHUudmFsdWUsdCx1LnBhcmFtcyksZj0hMTtpZighaCl7aWYoIXIpcmV0dXJuO2g9by5mYWxsYmFja1RyYW5zaXRpb24sZj0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246aCxmcm9tU3RhdGU6bCx0b1N0YXRlOnUscGxheWVyOmEsaXNGYWxsYmFja1RyYW5zaXRpb246Zn0pLGZ8fChEcCh0LCJuZy1hbmltYXRlLXF1ZXVlZCIpLGEub25TdGFydChmdW5jdGlvbigpe0xwKHQsIm5nLWFuaW1hdGUtcXVldWVkIil9KSksYS5vbkRvbmUoZnVuY3Rpb24oKXt2YXIgZT1pLnBsYXllcnMuaW5kZXhPZihhKTtlPj0wJiZpLnBsYXllcnMuc3BsaWNlKGUsMSk7dmFyIG49aS5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pe3ZhciByPW4uaW5kZXhPZihhKTtyPj0wJiZuLnNwbGljZShyLDEpfX0pLHRoaXMucGxheWVycy5wdXNoKGEpLGMucHVzaChhKSxhfWlmKCFmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpLHI9T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKCFlLmhhc093blByb3BlcnR5KG8pfHx0W29dIT09ZVtvXSlyZXR1cm4hMX1yZXR1cm4hMH0obC5wYXJhbXMsdS5wYXJhbXMpKXt2YXIgcD1bXSxkPW8ubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxwKSxtPW8ubWF0Y2hTdHlsZXModS52YWx1ZSx1LnBhcmFtcyxwKTtwLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IocCk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtPZih0LGQpLFBmKHQsbSl9KX19LHQucHJvdG90eXBlLmRlcmVnaXN0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztkZWxldGUgdGhpcy5fdHJpZ2dlcnNbdF0sdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7ZGVsZXRlIGVbdF19KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obixyKXtlLl9lbGVtZW50TGlzdGVuZXJzLnNldChyLG4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUhPXR9KSl9KX0sdC5wcm90b3R5cGUuY2xlYXJFbGVtZW50Q2FjaGU9ZnVuY3Rpb24odCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7dmFyIGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKHQpKX0sdC5wcm90b3R5cGUuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtpZighdFtFcF0pe3ZhciBuPXIuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCk7bi5zaXplP24uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gbi50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCExLCEwKX0pOnIuY2xlYXJFbGVtZW50Q2FjaGUodCl9fSl9LHQucHJvdG90eXBlLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLG89dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobyl7dmFyIGE9W107aWYoT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihpLl90cmlnZ2Vyc1tlXSl7dmFyIG49aS50cmlnZ2VyKHQsZSwidm9pZCIscik7biYmYS5wdXNoKG4pfX0pLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUpLG4mJnRmKGEpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBpLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KX0pLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpO2lmKG4pe3ZhciByPW5ldyBTZXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ubmFtZTtpZighci5oYXMoaSkpe3IuYWRkKGkpO3ZhciBvPWUuX3RyaWdnZXJzW2ldLmZhbGxiYWNrVHJhbnNpdGlvbixhPWUuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpW2ldfHxrcCxzPW5ldyBTcCgidm9pZCIpLGw9bmV3IFBwKGUuaWQsaSx0KTtlLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssZS5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmksdHJhbnNpdGlvbjpvLGZyb21TdGF0ZTphLHRvU3RhdGU6cyxwbGF5ZXI6bCxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfX0pfX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLl9lbmdpbmU7aWYodC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModCxlLCEwKSwhdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSl7dmFyIGk9ITE7aWYoci50b3RhbEFuaW1hdGlvbnMpe3ZhciBvPXIucGxheWVycy5sZW5ndGg/ci5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpaT0hMDtlbHNlIGZvcih2YXIgYT10O2E9YS5wYXJlbnROb2RlOylpZihyLnN0YXRlc0J5RWxlbWVudC5nZXQoYSkpe2k9ITA7YnJlYWt9fXRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLGk/ci5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk6KHIuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3JldHVybiBuLmNsZWFyRWxlbWVudENhY2hlKHQpfSksci5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLHIuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUpe0RwKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9LHQucHJvdG90eXBlLmRyYWluUXVldWVkVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIucGxheWVyO2lmKCFpLmRlc3Ryb3llZCl7dmFyIG89ci5lbGVtZW50LGE9ZS5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7YSYmYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubmFtZT09ci50cmlnZ2VyTmFtZSl7dmFyIG49b2YobyxyLnRyaWdnZXJOYW1lLHIuZnJvbVN0YXRlLnZhbHVlLHIudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LG5mKHIucGxheWVyLGUucGhhc2UsbixlLmNhbGxiYWNrKX19KSxpLm1hcmtlZEZvckRlc3Ryb3k/ZS5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtpLmRlc3Ryb3koKX0pOm4ucHVzaChyKX19KSx0aGlzLl9xdWV1ZT1bXSxuLnNvcnQoZnVuY3Rpb24odCxuKXt2YXIgcj10LnRyYW5zaXRpb24uYXN0LmRlcENvdW50LGk9bi50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09cnx8MD09aT9yLWk6ZS5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQodC5lbGVtZW50LG4uZWxlbWVudCk/MTotMX0pfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9LHQucHJvdG90eXBlLmVsZW1lbnRDb250YWluc0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksISF0aGlzLl9xdWV1ZS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVsZW1lbnQ9PT10fSl8fGV9LHR9KCksQXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kcml2ZXI9dCx0aGlzLl9ub3JtYWxpemVyPWUsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fX1yZXR1cm4gdC5wcm90b3R5cGUuX29uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXVlZFBsYXllcnMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucXVldWVkJiZ0LnB1c2goZSl9KX0pLHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IFRwKHQsZSx0aGlzKTtyZXR1cm4gZS5wYXJlbnROb2RlP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KG4sZSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChlLG4pLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdPW59LHQucHJvdG90eXBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7aWYobj49MCl7Zm9yKHZhciByPSExLGk9bjtpPj0wO2ktLSlpZih0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5fbmFtZXNwYWNlTGlzdFtpXS5ob3N0RWxlbWVudCxlKSl7dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaSsxLDAsdCkscj0hMDticmVha31yfHx0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZSgwLDAsdCl9ZWxzZSB0aGlzLl9uYW1lc3BhY2VMaXN0LnB1c2godCk7cmV0dXJuIHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuc2V0KGUsdCksdH0sdC5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIG58fChuPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLG59LHQucHJvdG90eXBlLnJlZ2lzdGVyVHJpZ2dlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxuKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYodCl7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7bi5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoci5ob3N0RWxlbWVudCksZGVsZXRlIG4uX25hbWVzcGFjZUxvb2t1cFt0XTt2YXIgZT1uLl9uYW1lc3BhY2VMaXN0LmluZGV4T2Yocik7ZT49MCYmbi5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoZSwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVzdHJveShlKX0pfX0sdC5wcm90b3R5cGUuX2ZldGNoTmFtZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF19LHQucHJvdG90eXBlLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgU2V0LG49dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pZm9yKHZhciByPU9iamVjdC5rZXlzKG4pLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89bltyW2ldXS5uYW1lc3BhY2VJZDtpZihvKXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZShvKTthJiZlLmFkZChhKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4scil7aWYoT3AoZSkpe3ZhciBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKGkpcmV0dXJuIGkudHJpZ2dlcihlLG4sciksITB9cmV0dXJuITF9LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlLG4scil7aWYoT3AoZSkpe3ZhciBpPWVbRXBdO2lmKGkmJmkuc2V0Rm9yUmVtb3ZhbCl7aS5zZXRGb3JSZW1vdmFsPSExLGkuc2V0Rm9yTW92ZT0hMDt2YXIgbz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtvPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKG8sMSl9aWYodCl7dmFyIGE9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7YSYmYS5pbnNlcnROb2RlKGUsbil9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfX0sdC5wcm90b3R5cGUuY29sbGVjdEVudGVyRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc0Rpc2FibGVkPWZ1bmN0aW9uKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxEcCh0LCJuZy1hbmltYXRlLWRpc2FibGVkIikpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXModCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKHQpLExwKHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSl9LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlLG4pe2lmKE9wKGUpKXt2YXIgcj10P3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpOm51bGw7cj9yLnJlbW92ZU5vZGUoZSxuKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSwhMSxuKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUsbil9LHQucHJvdG90eXBlLm1hcmtFbGVtZW50QXNSZW1vdmVkPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGVbRXBdPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6cixoYXNBbmltYXRpb246bixyZW1vdmVkQmVmb3JlUXVlcmllZDohMX19LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBPcChlKT90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5saXN0ZW4oZSxuLHIsaSk6ZnVuY3Rpb24oKXt9fSx0LnByb3RvdHlwZS5fYnVpbGRJbnN0cnVjdGlvbj1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxuLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLGkpfSx0LnByb3RvdHlwZS5kZXN0cm95SW5uZXJBbmltYXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLmRyaXZlci5xdWVyeSh0LCIubmctdHJpZ2dlciIsITApO24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl9KSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRpbmciLCEwKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnF1ZXVlZD90Lm1hcmtlZEZvckRlc3Ryb3k9ITA6dC5kZXN0cm95KCl9KX0sdC5wcm90b3R5cGUuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmluaXNoKCl9KX0sdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtpZih0LnBsYXllcnMubGVuZ3RoKXJldHVybiB0Zih0LnBsYXllcnMpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBlKCl9KTtlKCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc0xlYXZlTm9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dFtFcF07aWYobiYmbi5zZXRGb3JSZW1vdmFsKXtpZih0W0VwXT14cCxuLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCk7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2Uobi5uYW1lc3BhY2VJZCk7ciYmci5jbGVhckVsZW1lbnRDYWNoZSh0KX10aGlzLl9vblJlbW92YWxDb21wbGV0ZSh0LG4uc2V0Rm9yUmVtb3ZhbCl9dGhpcy5kcml2ZXIubWF0Y2hlc0VsZW1lbnQodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSksdGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpfSl9LHQucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciBuPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KHQsbil9KSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IodmFyIHI9MDtyPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7cisrKURwKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tyXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXt2YXIgaT1bXTt0cnl7bj10aGlzLl9mbHVzaEFuaW1hdGlvbnMoaSx0KX1maW5hbGx5e2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihyPTA7cjx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO3IrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3JdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7dmFyIG89dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxuLmxlbmd0aD90ZihuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uZXcgdHAsaT1bXSxhPW5ldyBNYXAscz1bXSx1PW5ldyBNYXAsYz1uZXcgTWFwLGg9bmV3IE1hcCxmPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Zi5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLHI9MDtyPGUubGVuZ3RoO3IrKylmLmFkZChlW3JdKX0pO3ZhciBwPXlmKCksZD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksbT1OcChkLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cykseT1uZXcgTWFwLGc9MDttLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK2crKzt5LnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gRHAodCxuKX0pfSk7Zm9yKHZhciB2PVtdLF89bmV3IFNldCxiPW5ldyBTZXQsdz0wO3c8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDt3KyspKEY9KGo9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3ddKVtFcF0pJiZGLnNldEZvclJlbW92YWwmJih2LnB1c2goaiksXy5hZGQoaiksRi5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoaiwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBfLmFkZCh0KX0pOmIuYWRkKGopKTt2YXIgeD1uZXcgTWFwLEM9TnAoZCxBcnJheS5mcm9tKF8pKTtDLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK2crKzt4LnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gRHAodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7bS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49eS5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBMcCh0LG4pfSl9KSxDLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj14LmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIExwKHQsbil9KX0pLHYuZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgRT1bXSxTPVtdLGs9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtrPj0wO2stLSl0aGlzLl9uYW1lc3BhY2VMaXN0W2tdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixvPXQuZWxlbWVudDtpZihFLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIGE9b1tFcF07aWYoYSYmYS5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBsPSFwfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KHAsbyksZj14LmdldChvKSxkPXkuZ2V0KG8pLG09bi5fYnVpbGRJbnN0cnVjdGlvbih0LHIsZCxmLGwpO2lmKG0uZXJyb3JzJiZtLmVycm9ycy5sZW5ndGgpUy5wdXNoKG0pO2Vsc2V7aWYobClyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIE9mKG8sbS5mcm9tU3R5bGVzKX0pLGUub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIFBmKG8sbS50b1N0eWxlcyl9KSx2b2lkIGkucHVzaChlKTtpZih0LmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBlLm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gT2YobyxtLmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gUGYobyxtLnRvU3R5bGVzKX0pLHZvaWQgaS5wdXNoKGUpO20udGltZWxpbmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITB9KSxyLmFwcGVuZChvLG0udGltZWxpbmVzKSxzLnB1c2goe2luc3RydWN0aW9uOm0scGxheWVyOmUsZWxlbWVudDpvfSksbS5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gYWYodSx0LFtdKS5wdXNoKGUpfSksbS5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCl7dmFyIHI9Yy5nZXQoZSk7cnx8Yy5zZXQoZSxyPW5ldyBTZXQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gci5hZGQodCl9KX19KSxtLnBvc3RTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxyPWguZ2V0KGUpO3J8fGguc2V0KGUscj1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSl9KX19KTtpZihTLmxlbmd0aCl7dmFyIFQ9W107Uy5mb3JFYWNoKGZ1bmN0aW9uKHQpe1QucHVzaCgiQCIrdC50cmlnZ2VyTmFtZSsiIGhhcyBmYWlsZWQgZHVlIHRvOlxuIiksdC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVC5wdXNoKCItICIrdCsiXG4iKX0pfSksRS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMucmVwb3J0RXJyb3IoVCl9dmFyIEE9bmV3IE1hcCxQPW5ldyBNYXA7cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtyLmhhcyhlKSYmKFAuc2V0KGUsZSksbi5fYmVmb3JlQW5pbWF0aW9uQnVpbGQodC5wbGF5ZXIubmFtZXNwYWNlSWQsdC5pbnN0cnVjdGlvbixBKSl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50O24uX2dldFByZXZpb3VzUGxheWVycyhlLCExLHQubmFtZXNwYWNlSWQsdC50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FmKEEsZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIE89di5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIEZwKHQsYyxoKX0pLEk9bmV3IE1hcDtNcChJLHRoaXMuZHJpdmVyLGIsaCxJbCkuZm9yRWFjaChmdW5jdGlvbih0KXtGcCh0LGMsaCkmJk8ucHVzaCh0KX0pO3ZhciBNPW5ldyBNYXA7bS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7TXAoTSxuLmRyaXZlcixuZXcgU2V0KHQpLGMsamwpfSksTy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUkuZ2V0KHQpLG49TS5nZXQodCk7SS5zZXQodCxvKHt9LGUsbikpfSk7dmFyIE49W10sUj1bXSxEPXt9O3MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQsbz10LnBsYXllcixzPXQuaW5zdHJ1Y3Rpb247aWYoci5oYXMoZSkpe2lmKGYuaGFzKGUpKXJldHVybiBvLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBQZihlLHMudG9TdHlsZXMpfSksby5kaXNhYmxlZD0hMCxvLm92ZXJyaWRlVG90YWxUaW1lKHMudG90YWxUaW1lKSx2b2lkIGkucHVzaChvKTt2YXIgbD1EO2lmKFAuc2l6ZT4xKXtmb3IodmFyIHU9ZSxjPVtdO3U9dS5wYXJlbnROb2RlOyl7dmFyIGg9UC5nZXQodSk7aWYoaCl7bD1oO2JyZWFrfWMucHVzaCh1KX1jLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFAuc2V0KHQsbCl9KX12YXIgcD1uLl9idWlsZEFuaW1hdGlvbihvLm5hbWVzcGFjZUlkLHMsQSxhLE0sSSk7aWYoby5zZXRSZWFsUGxheWVyKHApLGw9PT1EKU4ucHVzaChvKTtlbHNle3ZhciBkPW4ucGxheWVyc0J5RWxlbWVudC5nZXQobCk7ZCYmZC5sZW5ndGgmJihvLnBhcmVudFBsYXllcj10ZihkKSksaS5wdXNoKG8pfX1lbHNlIE9mKGUscy5mcm9tU3R5bGVzKSxvLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBQZihlLHMudG9TdHlsZXMpfSksUi5wdXNoKG8pLGYuaGFzKGUpJiZpLnB1c2gobyl9KSxSLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9YS5nZXQodC5lbGVtZW50KTtpZihlJiZlLmxlbmd0aCl7dmFyIG49dGYoZSk7dC5zZXRSZWFsUGxheWVyKG4pfX0pLGkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudFBsYXllcj90LnN5bmNQbGF5ZXJFdmVudHModC5wYXJlbnRQbGF5ZXIpOnQuZGVzdHJveSgpfSk7Zm9yKHZhciBMPTA7TDx2Lmxlbmd0aDtMKyspe3ZhciBqLEY9KGo9dltMXSlbRXBdO2lmKExwKGosIm5nLWxlYXZlIiksIUZ8fCFGLmhhc0FuaW1hdGlvbil7dmFyIFY9W107aWYodS5zaXplKXt2YXIgQj11LmdldChqKTtCJiZCLmxlbmd0aCYmVi5wdXNoLmFwcGx5KFYsbChCKSk7Zm9yKHZhciB6PXRoaXMuZHJpdmVyLnF1ZXJ5KGosIi5uZy1hbmltYXRpbmciLCEwKSxVPTA7VTx6Lmxlbmd0aDtVKyspe3ZhciBIPXUuZ2V0KHpbVV0pO0gmJkgubGVuZ3RoJiZWLnB1c2guYXBwbHkoVixsKEgpKX19dmFyIHE9Vi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZGVzdHJveWVkfSk7cS5sZW5ndGg/anAodGhpcyxqLHEpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShqKX19cmV0dXJuIHYubGVuZ3RoPTAsTi5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucGxheWVycy5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7dC5kZXN0cm95KCk7dmFyIGU9bi5wbGF5ZXJzLmluZGV4T2YodCk7bi5wbGF5ZXJzLnNwbGljZShlLDEpfSksdC5wbGF5KCl9KSxOfSx0LnByb3RvdHlwZS5lbGVtZW50Q29udGFpbnNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEscj1lW0VwXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8bn0sdC5wcm90b3R5cGUuYWZ0ZXJGbHVzaD1mdW5jdGlvbih0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9nZXRQcmV2aW91c1BsYXllcnM9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1bXTtpZihlKXt2YXIgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYobz1hKX1lbHNle3ZhciBzPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYocyl7dmFyIGw9IWl8fCJ2b2lkIj09aTtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5xdWV1ZWR8fChsfHx0LnRyaWdnZXJOYW1lPT1yKSYmby5wdXNoKHQpfSl9fXJldHVybihufHxyKSYmKG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIShuJiZuIT10Lm5hbWVzcGFjZUlkfHxyJiZyIT10LnRyaWdnZXJOYW1lKX0pKSxvfSx0LnByb3RvdHlwZS5fYmVmb3JlQW5pbWF0aW9uQnVpbGQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbz1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsbD1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWUsdT1mdW5jdGlvbih0KXt2YXIgcj10LmVsZW1lbnQsaT1yIT09byxhPWFmKG4scixbXSk7Yy5fZ2V0UHJldmlvdXNQbGF5ZXJzKHIsaSxzLGwsZS50b1N0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0UmVhbFBsYXllcigpO2UuYmVmb3JlRGVzdHJveSYmZS5iZWZvcmVEZXN0cm95KCksdC5kZXN0cm95KCksYS5wdXNoKHQpfSl9LGM9dGhpczt0cnl7Zm9yKHZhciBoPWEoZS50aW1lbGluZXMpLGY9aC5uZXh0KCk7IWYuZG9uZTtmPWgubmV4dCgpKXUoZi52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZiYmIWYuZG9uZSYmKGk9aC5yZXR1cm4pJiZpLmNhbGwoaCl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fU9mKG8sZS5mcm9tU3R5bGVzKX0sdC5wcm90b3R5cGUuX2J1aWxkQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10aGlzLHM9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCx1PVtdLGM9bmV3IFNldCxoPW5ldyBTZXQsZj1lLnRpbWVsaW5lcy5tYXAoZnVuY3Rpb24oZSl7dmFyIGY9ZS5lbGVtZW50O2MuYWRkKGYpO3ZhciBwPWZbRXBdO2lmKHAmJnAucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBEbChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciBkLG0seT1mIT09bCxnPShkPShuLmdldChmKXx8d3ApLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSxtPVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpIGluc3RhbmNlb2YgTGw/dChpLnBsYXllcnMsbik6bi5wdXNoKGkpfX0oZCxtKSxtKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISF0LmVsZW1lbnQmJnQuZWxlbWVudD09PWZ9KSx2PWkuZ2V0KGYpLF89by5nZXQoZiksYj1lZigwLGEuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyx2LF8pLHc9YS5fYnVpbGRQbGF5ZXIoZSxiLGcpO2lmKGUuc3ViVGltZWxpbmUmJnImJmguYWRkKGYpLHkpe3ZhciB4PW5ldyBQcCh0LHMsZik7eC5zZXRSZWFsUGxheWVyKHcpLHUucHVzaCh4KX1yZXR1cm4gd30pO3UuZm9yRWFjaChmdW5jdGlvbih0KXthZihhLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCxbXSkucHVzaCh0KSx0Lm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI7aWYodCBpbnN0YW5jZW9mIE1hcCl7aWYocj10LmdldChlKSl7aWYoci5sZW5ndGgpe3ZhciBpPXIuaW5kZXhPZihuKTtyLnNwbGljZShpLDEpfTA9PXIubGVuZ3RoJiZ0LmRlbGV0ZShlKX19ZWxzZShyPXRbZV0pJiYoci5sZW5ndGgmJihpPXIuaW5kZXhPZihuKSxyLnNwbGljZShpLDEpKSwwPT1yLmxlbmd0aCYmZGVsZXRlIHRbZV0pO3JldHVybiByfShhLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LHQuZWxlbWVudCx0KX0pfSksYy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBEcCh0LCJuZy1hbmltYXRpbmciKX0pO3ZhciBwPXRmKGYpO3JldHVybiBwLm9uRGVzdHJveShmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gTHAodCwibmctYW5pbWF0aW5nIil9KSxQZihsLGUudG9TdHlsZXMpfSksaC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FmKHIsdCxbXSkucHVzaChwKX0pLHB9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsbik6bmV3IERsKHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksUHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgRGwsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz17fSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXJldHVybiB0LnByb3RvdHlwZS5zZXRSZWFsUGxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsT2JqZWN0LmtleXModGhpcy5fcXVldWVkQ2FsbGJhY2tzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuX3F1ZXVlZENhbGxiYWNrc1tuXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuZih0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7YWYodGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsdCksdGhpcy5fcGxheWVyLm9uRG9uZSh0KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5maW5pc2goKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9LHR9KCk7ZnVuY3Rpb24gT3AodCl7cmV0dXJuIHQmJjE9PT10Lm5vZGVUeXBlfWZ1bmN0aW9uIElwKHQsZSl7dmFyIG49dC5zdHlsZS5kaXNwbGF5O3JldHVybiB0LnN0eWxlLmRpc3BsYXk9bnVsbCE9ZT9lOiJub25lIixufWZ1bmN0aW9uIE1wKHQsZSxuLHIsaSl7dmFyIG89W107bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnB1c2goSXAodCkpfSk7dmFyIGE9W107ci5mb3JFYWNoKGZ1bmN0aW9uKG4scil7dmFyIG89e307bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPW9bdF09ZS5jb21wdXRlU3R5bGUocix0LGkpO24mJjAhPW4ubGVuZ3RofHwocltFcF09Q3AsYS5wdXNoKHIpKX0pLHQuc2V0KHIsbyl9KTt2YXIgcz0wO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIElwKHQsb1tzKytdKX0pLGF9ZnVuY3Rpb24gTnAodCxlKXt2YXIgbj1uZXcgTWFwO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbi5zZXQodCxbXSl9KSwwPT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcj1uZXcgU2V0KGUpLGk9bmV3IE1hcDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uIHQoZSl7aWYoIWUpcmV0dXJuIDE7dmFyIG89aS5nZXQoZSk7aWYobylyZXR1cm4gbzt2YXIgYT1lLnBhcmVudE5vZGU7cmV0dXJuIG89bi5oYXMoYSk/YTpyLmhhcyhhKT8xOnQoYSksaS5zZXQoZSxvKSxvfSh0KTsxIT09ZSYmbi5nZXQoZSkucHVzaCh0KX0pLG59dmFyIFJwPSIkJGNsYXNzZXMiO2Z1bmN0aW9uIERwKHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QuYWRkKGUpO2Vsc2V7dmFyIG49dFtScF07bnx8KG49dFtScF09e30pLG5bZV09ITB9fWZ1bmN0aW9uIExwKHQsZSl7aWYodC5jbGFzc0xpc3QpdC5jbGFzc0xpc3QucmVtb3ZlKGUpO2Vsc2V7dmFyIG49dFtScF07biYmZGVsZXRlIG5bZV19fWZ1bmN0aW9uIGpwKHQsZSxuKXt0ZihuKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm9jZXNzTGVhdmVOb2RlKGUpfSl9ZnVuY3Rpb24gRnAodCxlLG4pe3ZhciByPW4uZ2V0KHQpO2lmKCFyKXJldHVybiExO3ZhciBpPWUuZ2V0KHQpO3JldHVybiBpP3IuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5hZGQodCl9KTplLnNldCh0LHIpLG4uZGVsZXRlKHQpLCEwfXZhciBWcD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbj10aGlzO3RoaXMuX2RyaXZlcj10LHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBBcCh0LGUpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBicCh0LGUpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5vblJlbW92YWxDb21wbGV0ZSh0LGUpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89dCsiLSIrcixhPXRoaXMuX3RyaWdnZXJDYWNoZVtvXTtpZighYSl7dmFyIHM9W10sbD1RZih0aGlzLl9kcml2ZXIsaSxzKTtpZihzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhbmltYXRpb24gdHJpZ2dlciAiJytyKyciIGhhcyBmYWlsZWQgdG8gYnVpbGQgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuIC0gJytzLmpvaW4oIlxuIC0gIikpO2E9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGdwKHQsZSl9KHIsbCksdGhpcy5fdHJpZ2dlckNhY2hlW29dPWF9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxyLGEpfSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfSx0LnByb3RvdHlwZS5vbkluc2VydD1mdW5jdGlvbih0LGUsbixyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLG4scil9LHQucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl9LHQucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24odCxlLG4scil7aWYoIkAiPT1uLmNoYXJBdCgwKSl7dmFyIGk9cyhzZihuKSwyKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKGlbMF0sZSxpWzFdLHIpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKHQsZSxuLHIpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scixpKXtpZigiQCI9PW4uY2hhckF0KDApKXt2YXIgbz1zKHNmKG4pLDIpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4ob1swXSxlLG9bMV0saSl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxuLHIsaSl9LHQucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PS0xKSx0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBsYXllcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLmNvbmNhdCh0aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9LHR9KCksQnA9ImFuaW1hdGlvbiIsenA9ImFuaW1hdGlvbmVuZCIsVXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3ZhciBzPXRoaXM7dGhpcy5fZWxlbWVudD10LHRoaXMuX25hbWU9ZSx0aGlzLl9kdXJhdGlvbj1uLHRoaXMuX2RlbGF5PXIsdGhpcy5fZWFzaW5nPWksdGhpcy5fZmlsbE1vZGU9byx0aGlzLl9vbkRvbmVGbj1hLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9zdGFydFRpbWU9MCx0aGlzLl9wb3NpdGlvbj0wLHRoaXMuX2V2ZW50Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHMuX2hhbmRsZUNhbGxiYWNrKHQpfX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG47ZT10aGlzLl9kdXJhdGlvbisibXMgIit0aGlzLl9lYXNpbmcrIiAiK3RoaXMuX2RlbGF5KyJtcyAxIG5vcm1hbCAiK3RoaXMuX2ZpbGxNb2RlKyIgIit0aGlzLl9uYW1lLChuPUtwKHQ9dGhpcy5fZWxlbWVudCwiIikudHJpbSgpKS5sZW5ndGgmJihmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKSIsIj09PXQuY2hhckF0KG4pJiYwfShuKSxlPW4rIiwgIitlKSxRcCh0LCIiLGUpLFdwKHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMSksdGhpcy5fc3RhcnRUaW1lPURhdGUubm93KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7SHAodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lLCJwYXVzZWQiKX0sdC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7SHAodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lLCJydW5uaW5nIil9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXFwKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmFtZSk7dGhpcy5fcG9zaXRpb249dCp0aGlzLl9kdXJhdGlvbixRcCh0aGlzLl9lbGVtZW50LCJEZWxheSIsIi0iK3RoaXMuX3Bvc2l0aW9uKyJtcyIsZSl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufSx0LnByb3RvdHlwZS5faGFuZGxlQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5fbmdUZXN0TWFudWFsVGltZXN0YW1wfHxEYXRlLm5vdygpLG49MWUzKnBhcnNlRmxvYXQodC5lbGFwc2VkVGltZS50b0ZpeGVkKDMpKTt0LmFuaW1hdGlvbk5hbWU9PXRoaXMuX25hbWUmJk1hdGgubWF4KGUtdGhpcy5fc3RhcnRUaW1lLDApPj10aGlzLl9kZWxheSYmbj49dGhpcy5fZHVyYXRpb24mJnRoaXMuZmluaXNoKCl9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm4oKSxXcCh0aGlzLl9lbGVtZW50LHRoaXMuX2V2ZW50Rm4sITApKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0LGUsbixyO3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmZpbmlzaCgpLGU9dGhpcy5fbmFtZSwocj1HcChuPUtwKHQ9dGhpcy5fZWxlbWVudCwiIikuc3BsaXQoIiwiKSxlKSk+PTAmJihuLnNwbGljZShyLDEpLFFwKHQsIiIsbi5qb2luKCIsIikpKSl9LHR9KCk7ZnVuY3Rpb24gSHAodCxlLG4pe1FwKHQsIlBsYXlTdGF0ZSIsbixxcCh0LGUpKX1mdW5jdGlvbiBxcCh0LGUpe3ZhciBuPUtwKHQsIiIpO3JldHVybiBuLmluZGV4T2YoIiwiKT4wP0dwKG4uc3BsaXQoIiwiKSxlKTpHcChbbl0sZSl9ZnVuY3Rpb24gR3AodCxlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gV3AodCxlLG4pe24/dC5yZW1vdmVFdmVudExpc3RlbmVyKHpwLGUpOnQuYWRkRXZlbnRMaXN0ZW5lcih6cCxlKX1mdW5jdGlvbiBRcCh0LGUsbixyKXt2YXIgaT1CcCtlO2lmKG51bGwhPXIpe3ZhciBvPXQuc3R5bGVbaV07aWYoby5sZW5ndGgpe3ZhciBhPW8uc3BsaXQoIiwiKTthW3JdPW4sbj1hLmpvaW4oIiwiKX19dC5zdHlsZVtpXT1ufWZ1bmN0aW9uIEtwKHQsZSl7cmV0dXJuIHQuc3R5bGVbQnArZV19dmFyIFpwPSJsaW5lYXIiLFlwPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuSU5JVElBTElaRUQ9MV09IklOSVRJQUxJWkVEIix0W3QuU1RBUlRFRD0yXT0iU1RBUlRFRCIsdFt0LkZJTklTSEVEPTNdPSJGSU5JU0hFRCIsdFt0LkRFU1RST1lFRD00XT0iREVTVFJPWUVEIix0fSh7fSksWHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5hbmltYXRpb25OYW1lPW4sdGhpcy5fZHVyYXRpb249cix0aGlzLl9kZWxheT1pLHRoaXMuX2ZpbmFsU3R5bGVzPWEsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5zdGF0ZT0wLHRoaXMuZWFzaW5nPW98fFpwLHRoaXMudG90YWxUaW1lPXIraSx0aGlzLl9idWlsZFN0eWxlcigpfXJldHVybiB0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLnN0YXRlPj1ZcC5ERVNUUk9ZRUR8fCh0aGlzLnN0YXRlPVlwLkRFU1RST1lFRCx0aGlzLl9zdHlsZXIuZGVzdHJveSgpLHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLl9mbHVzaERvbmVGbnMoKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuX2ZsdXNoRG9uZUZucz1mdW5jdGlvbigpe3RoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W119LHQucHJvdG90eXBlLl9mbHVzaFN0YXJ0Rm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLnN0YXRlPj1ZcC5GSU5JU0hFRHx8KHRoaXMuc3RhdGU9WXAuRklOSVNIRUQsdGhpcy5fc3R5bGVyLmZpbmlzaCgpLHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLl9mbHVzaERvbmVGbnMoKSl9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX3N0eWxlci5zZXRQb3NpdGlvbih0KX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3R5bGVyLmdldFBvc2l0aW9uKCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZT49WXAuU1RBUlRFRH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuc3RhdGU+PVlwLklOSVRJQUxJWkVEfHwodGhpcy5zdGF0ZT1ZcC5JTklUSUFMSVpFRCx0aGlzLl9zdHlsZXIuYXBwbHkoKSx0aGlzLl9kZWxheSYmdGhpcy5fc3R5bGVyLnBhdXNlKCkpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5zdGF0ZT1ZcC5TVEFSVEVEKSx0aGlzLl9zdHlsZXIucmVzdW1lKCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fc3R5bGVyLnBhdXNlKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVyLmRlc3Ryb3koKSx0aGlzLl9idWlsZFN0eWxlcigpLHRoaXMuX3N0eWxlci5hcHBseSgpfSx0LnByb3RvdHlwZS5fYnVpbGRTdHlsZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0eWxlcj1uZXcgVXAodGhpcy5lbGVtZW50LHRoaXMuYW5pbWF0aW9uTmFtZSx0aGlzLl9kdXJhdGlvbix0aGlzLl9kZWxheSx0aGlzLmVhc2luZywiZm9yd2FyZHMiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZmluaXNoKCl9KX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmluaXQoKTt2YXIgZT17fTtpZih0aGlzLmhhc1N0YXJ0ZWQoKSl7dmFyIG49dGhpcy5zdGF0ZT49WXAuRklOSVNIRUQ7T2JqZWN0LmtleXModGhpcy5fZmluYWxTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24ocil7Im9mZnNldCIhPXImJihlW3JdPW4/dC5fZmluYWxTdHlsZXNbcl06emYodC5lbGVtZW50LHIpKX0pfXRoaXMuY3VycmVudFNuYXBzaG90PWV9LHR9KCksJHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5lbGVtZW50PWUsci5fc3RhcnRpbmdTdHlsZXM9e30sci5fX2luaXRpYWxpemVkPSExLHIuX3N0eWxlcz1iZihuKSxyfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IXRoaXMuX19pbml0aWFsaXplZCYmdGhpcy5fc3RhcnRpbmdTdHlsZXMmJih0aGlzLl9faW5pdGlhbGl6ZWQ9ITAsT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0YXJ0aW5nU3R5bGVzW3RdPWUuZWxlbWVudC5zdHlsZVt0XX0pLHQucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5pbml0KCksT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxlLl9zdHlsZXNbdF0pfSksdC5wcm90b3R5cGUucGxheS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc3RhcnRpbmdTdHlsZXMmJihPYmplY3Qua2V5cyh0aGlzLl9zdGFydGluZ1N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9zdGFydGluZ1N0eWxlc1t0XTtuP2UuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOmUuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX0pLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpKX0sZX0oRGwpLEpwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2NvdW50PTAsdGhpcy5faGVhZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIiksdGhpcy5fd2FybmluZ0lzc3VlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBtZih0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZ2YodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZmKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gX2YodCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJAa2V5ZnJhbWVzICIrZSsiIHtcbiIsaT0iIjsobj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gYmYodCl9KSkuZm9yRWFjaChmdW5jdGlvbih0KXtpPSIgIjt2YXIgZT1wYXJzZUZsb2F0KHQub2Zmc2V0KTtyKz0iIitpKzEwMCplKyIlIHtcbiIsaSs9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJvZmZzZXQiOnJldHVybjtjYXNlImVhc2luZyI6cmV0dXJuIHZvaWQobiYmKHIrPWkrImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICIrbisiO1xuIikpO2RlZmF1bHQ6cmV0dXJuIHZvaWQocis9IiIraStlKyI6ICIrbisiO1xuIil9fSkscis9aSsifVxuIn0pLHIrPSJ9XG4iO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG8uaW5uZXJIVE1MPXIsb30sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXt2b2lkIDA9PT1vJiYobz1bXSksYSYmdGhpcy5fbm90aWZ5RmF1bHR5U2NydWJiZXIoKTt2YXIgcz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFhwfSksbD17fTtGZihuLHIpJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XT1lW3RdfSl9KTt2YXIgdT1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdCYmKEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmImVhc2luZyIhPW4mJihlW25dPXRbbl0pfSl9KSxlfShlPVZmKHQsZSxsKSk7aWYoMD09bilyZXR1cm4gbmV3ICRwKHQsdSk7dmFyIGM9Imdlbl9jc3Nfa2ZfIit0aGlzLl9jb3VudCsrLGg9dGhpcy5idWlsZEtleWZyYW1lRWxlbWVudCh0LGMsZSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLmFwcGVuZENoaWxkKGgpO3ZhciBmPW5ldyBYcCh0LGUsYyxuLHIsaSx1KTtyZXR1cm4gZi5vbkRlc3Ryb3koZnVuY3Rpb24oKXt2YXIgdDsodD1oKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSksZn0sdC5wcm90b3R5cGUuX25vdGlmeUZhdWx0eVNjcnViYmVyPWZ1bmN0aW9uKCl7dGhpcy5fd2FybmluZ0lzc3VlZHx8KGNvbnNvbGUud2FybigiQGFuZ3VsYXIvYW5pbWF0aW9uczogcGxlYXNlIGxvYWQgdGhlIHdlYi1hbmltYXRpb25zLmpzIHBvbHlmaWxsIHRvIGFsbG93IHByb2dyYW1tYXRpYyBhY2Nlc3MuLi5cbiIsIiAgdmlzaXQgaHR0cDovL2JpdC5seS9JV3VrYW0gdG8gbGVhcm4gbW9yZSBhYm91dCB1c2luZyB0aGUgd2ViLWFuaW1hdGlvbi1qcyBwb2x5ZmlsbC4iKSx0aGlzLl93YXJuaW5nSXNzdWVkPSEwKX0sdH0oKSx0ZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPW4sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX2luaXRpYWxpemVkKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZT10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxlLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnt9LHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfX0sdC5wcm90b3R5cGUuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5fdHJpZ2dlcldlYkFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYW5pbWF0ZShlLG4pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITApLHRoaXMuZG9tUGxheWVyLnBsYXkoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuX3Jlc2V0RG9tUGxheWVyU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0b3RhbFRpbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmKGVbbl09dC5fZmluaXNoZWQ/dC5fZmluYWxLZXlmcmFtZVtuXTp6Zih0LmVsZW1lbnQsbikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLGVkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzTmF0aXZlSW1wbD0vXHtccypcW25hdGl2ZVxzK2NvZGVcXVxzKlx9Ly50ZXN0KG5kKCkudG9TdHJpbmcoKSksdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyPW5ldyBKcH1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiBtZih0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZ2YodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZmKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gX2YodCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUub3ZlcnJpZGVXZWJBbmltYXRpb25zU3VwcG9ydD1mdW5jdGlvbih0KXt0aGlzLl9pc05hdGl2ZUltcGw9dH0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtpZih2b2lkIDA9PT1vJiYobz1bXSksIWEmJiF0aGlzLl9pc05hdGl2ZUltcGwpcmV0dXJuIHRoaXMuX2Nzc0tleWZyYW1lc0RyaXZlci5hbmltYXRlKHQsZSxuLHIsaSxvKTt2YXIgcz17ZHVyYXRpb246bixkZWxheTpyLGZpbGw6MD09cj8iYm90aCI6ImZvcndhcmRzIn07aSYmKHMuZWFzaW5nPWkpO3ZhciBsPXt9LHU9by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0ZH0pO3JldHVybiBGZihuLHIpJiZ1LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XT1lW3RdfSl9KSxlPVZmKHQsZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQWYodCwhMSl9KSxsKSxuZXcgdGQodCxlLHMpfSx0fSgpO2Z1bmN0aW9uIG5kKCl7cmV0dXJuIEpoKCkmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fXZhciByZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9uZXh0QW5pbWF0aW9uSWQ9MCxyLl9yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKG4uYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246bmUuTm9uZSxzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOltdfX0pLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uZXh0QW5pbWF0aW9uSWQudG9TdHJpbmcoKTt0aGlzLl9uZXh0QW5pbWF0aW9uSWQrKzt2YXIgbj1BcnJheS5pc0FycmF5KHQpP01sKHQpOnQ7cmV0dXJuIGFkKHRoaXMuX3JlbmRlcmVyLG51bGwsZSwicmVnaXN0ZXIiLFtuXSksbmV3IGlkKGUsdGhpcy5fcmVuZGVyZXIpfSxlfShPbCksaWQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5faWQ9ZSxyLl9yZW5kZXJlcj1uLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG9kKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfSxlfShmdW5jdGlvbigpe30pLG9kPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9cix0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLG4pfXJldHVybiB0LnByb3RvdHlwZS5fbGlzdGVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsIkBAIit0aGlzLmlkKyI6Iit0LGUpfSx0LnByb3RvdHlwZS5fY29tbWFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gYWQodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsdCxlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsdCl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHR9KCk7ZnVuY3Rpb24gYWQodCxlLG4scixpKXtyZXR1cm4gdC5zZXRQcm9wZXJ0eShlLCJAQCIrbisiOiIrcixpKX12YXIgc2Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRlbGVnYXRlPXQsdGhpcy5lbmdpbmU9ZSx0aGlzLl96b25lPW4sdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLHRoaXMucHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoMCksZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe2UmJmUucGFyZW50Tm9kZSh0KSYmZS5yZW1vdmVDaGlsZCh0LnBhcmVudE5vZGUsdCl9fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSk7aWYoISh0JiZlJiZlLmRhdGEmJmUuZGF0YS5hbmltYXRpb24pKXt2YXIgaT10aGlzLl9yZW5kZXJlckNhY2hlLmdldChyKTtyZXR1cm4gaXx8KGk9bmV3IGxkKCIiLHIsdGhpcy5lbmdpbmUpLHRoaXMuX3JlbmRlcmVyQ2FjaGUuc2V0KHIsaSkpLGl9dmFyIG89ZS5pZCxhPWUuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDtyZXR1cm4gdGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIoYSx0KSxlLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG4uZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihvLGEsdCxlLm5hbWUsZSl9KSxuZXcgdWQodGhpcyxhLHIsdGhpcy5lbmdpbmUpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuX3NjaGVkdWxlQ291bnRUYXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbigpe3QuX21pY3JvdGFza0lkKyt9KX0sdC5wcm90b3R5cGUuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3Q+PTAmJnQ8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gZShuKX0pOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbihmdW5jdGlvbigpe3IuX3pvbmUucnVuKGZ1bmN0aW9uKCl7ci5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9cyh0LDIpOygwLGVbMF0pKGVbMV0pfSksci5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbZSxuXSkpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3NjaGVkdWxlQ291bnRUYXNrKCksdC5lbmdpbmUuZmx1c2godC5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9LHR9KCksbGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPW4sdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lOb2RlKHQpfTpudWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLG4pLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCEwKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGUsdGhpcy5kZWxlZ2F0ZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfSx0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4peyJAIj09ZS5jaGFyQXQoMCkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsISFuKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUuZGlzYWJsZUFuaW1hdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyh0LGUpfSx0fSgpLHVkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsbixyLGkpfHx0aGlzO3JldHVybiBvLmZhY3Rvcnk9ZSxvLm5hbWVzcGFjZUlkPW4sb31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJiJALmRpc2FibGVkIj09ZT90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsbj12b2lkIDA9PT1ufHwhIW4pOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc3Vic3RyKDEpLG4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSxlLnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxhPXRoaXM7aWYoIkAiPT1lLmNoYXJBdCgwKSl7dmFyIGw9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIHR9fSh0KSx1PWUuc3Vic3RyKDEpLGM9IiI7cmV0dXJuIkAiIT11LmNoYXJBdCgwKSYmKHU9KHI9cygoaT11LG89aS5pbmRleE9mKCIuIiksW2kuc3Vic3RyaW5nKDAsbyksaS5zdWJzdHIobysxKV0pLDIpKVswXSxjPXJbMV0pLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLGwsdSxjLGZ1bmN0aW9uKHQpe2EuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2sodC5fZGF0YXx8LTEsbix0KX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LGV9KGxkKSxjZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLGUsbil8fHRoaXN9cmV0dXJuIGkoZSx0KSxlfShWcCk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbmQoKT9uZXcgZWQ6bmV3IEpwfWZ1bmN0aW9uIGZkKCl7cmV0dXJuIG5ldyBocH1mdW5jdGlvbiBwZCh0LGUsbil7cmV0dXJuIG5ldyBzZCh0LGUsbil9dmFyIGRkPW5ldyBtdCgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpLG1kPWZ1bmN0aW9uKCl7fSx5ZD1Vcih7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSwubWF0LXN0cm9rZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lO29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3ZlciAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpfS5tYXQtcmFpc2VkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1yYWlzZWQtYnV0dG9ue3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LXJhaXNlZC1idXR0b246bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtib3gtc2hhZG93Om5vbmV9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDAgMCAwIHJnYmEoMCwwLDAsLjIpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTQpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDAgMCAwIHJnYmEoMCwwLDAsLjIpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTQpLDAgMCAwIDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1mYWJbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLm1hdC1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiW2Rpc2FibGVkXXtib3gtc2hhZG93Om5vbmV9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzoxNnB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1pbmktZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjg4cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1taW5pLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtbWluaS1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4yKSwwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMTIpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtbWluaS1mYWJ7dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYltkaXNhYmxlZF17Ym94LXNoYWRvdzpub25lfS5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDZweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDE4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWljb24tYnV0dG9uIGl7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpLGJhY2tncm91bmQtY29sb3IgLjJzIGN1YmljLWJlemllciguMzUsMCwuMjUsMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX19Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b257b3V0bGluZTpzb2xpZCAxcHh9fSJdLGRhdGE6e319KTtmdW5jdGlvbiBnZCh0KXtyZXR1cm4gRG8oMixbeG8oNDAyNjUzMTg0LDEse3JpcHBsZTowfSksKHQoKSgpLHlpKDEsMCxudWxsLG51bGwsMSwic3BhbiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXdyYXBwZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksVG8obnVsbCwwKSwodCgpKCkseWkoMywwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWJ1dHRvbi1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0UmlwcGxlIiwiIl1dLFtbMiwibWF0LWJ1dHRvbi1yaXBwbGUtcm91bmQiLG51bGxdLFsyLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxpbyg0LDIxMjk5MixbWzEsNF1dLDAsX2gsW2RuLFVlLHRsLFsyLHZoXSxbMixkZF1dLHtjZW50ZXJlZDpbMCwiY2VudGVyZWQiXSxkaXNhYmxlZDpbMSwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsyLCJ0cmlnZ2VyIl19LG51bGwpLCh0KCkoKSx5aSg1LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDQsMCxuLmlzSWNvbkJ1dHRvbixuLl9pc1JpcHBsZURpc2FibGVkKCksbi5fZ2V0SG9zdEVsZW1lbnQoKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDMsMCxuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uLEdpKGUsNCkudW5ib3VuZGVkKX0pfXZhciB2ZD1Vcih7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MjRweDttYXgtd2lkdGg6NTY4cHg7bWluLXdpZHRoOjI4OHB4O3BhZGRpbmc6MTRweCAyNHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpIHRyYW5zbGF0ZVkoMjRweCl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVyLm1hdC1zbmFjay1iYXItY2VudGVye21hcmdpbjowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfS5tYXQtc25hY2stYmFyLWNvbnRhaW5lci5tYXQtc25hY2stYmFyLXRvcHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSkgdHJhbnNsYXRlWSgtMjRweCl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVyLm1hdC1zbmFjay1iYXItdG9wLm1hdC1zbmFjay1iYXItY2VudGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH19Lm1hdC1zbmFjay1iYXItaGFuZHNldHt3aWR0aDoxMDAlfS5tYXQtc25hY2stYmFyLWhhbmRzZXQgLm1hdC1zbmFjay1iYXItY29udGFpbmVye21hcmdpbjowO21heC13aWR0aDppbmhlcml0O3dpZHRoOjEwMCV9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InN0YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJ2aXNpYmxlLXRvcCwgdmlzaWJsZS1ib3R0b20iLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2aXNpYmxlLXRvcCA9PiBoaWRkZW4tdG9wLCB2aXNpYmxlLWJvdHRvbSA9PiBoaWRkZW4tYm90dG9tIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIxOTVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPT4gdmlzaWJsZS10b3AsIHZvaWQgPT4gdmlzaWJsZS1ib3R0b20iLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjAsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBfZCh0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLG1pKDAsbnVsbCxudWxsLDApKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBiZCh0KXtyZXR1cm4gRG8oMixbeG8oNDAyNjUzMTg0LDEse19wb3J0YWxPdXRsZXQ6MH0pLCh0KCkoKSxtaSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLF9kKSksaW8oMiwyMTI5OTIsW1sxLDRdXSwwLHB1LFtNZSx4bl0se3BvcnRhbDpbMCwicG9ydGFsIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwyLDAsIiIpfSxudWxsKX12YXIgd2Q9UmkoInNuYWNrLWJhci1jb250YWluZXIiLE9oLGZ1bmN0aW9uKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwxLCJzbmFjay1iYXItY29udGFpbmVyIixbWyJjbGFzcyIsIm1hdC1zbmFjay1iYXItY29udGFpbmVyIl0sWyJyb2xlIiwiYWxlcnQiXV0sW1s0MCwiQHN0YXRlIiwwXV0sW1siY29tcG9uZW50IiwiQHN0YXRlLmRvbmUiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjb21wb25lbnQ6QHN0YXRlLmRvbmUiPT09ZSYmKHI9ITEhPT1HaSh0LDEpLm9uQW5pbWF0aW9uRW5kKG4pJiZyKSxyfSxiZCx2ZCkpLGlvKDEsMTgwMjI0LG51bGwsMCxPaCxbVWUsZG4sQ24sQWhdLG51bGwsbnVsbCldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLEdpKGUsMSkuX2FuaW1hdGlvblN0YXRlKX0pfSx7fSx7fSxbXSkseGQ9VXIoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LXNpbXBsZS1zbmFja2JhcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGluZS1oZWlnaHQ6MjBweDtvcGFjaXR5OjF9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1zaHJpbms6MDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO21hcmdpbjotOHB4IDAgLThweCA4cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIGJ1dHRvbntmbGV4OjE7bWF4LWhlaWdodDozNnB4fVtkaXI9cnRsXSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fSJdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJjb250ZW50RmFkZSIsZGVmaW5pdGlvbnM6W3t0eXBlOjEsZXhwcjoiOmVudGVyIixhbmltYXRpb246W3t0eXBlOjYsc3R5bGVzOntvcGFjaXR5OiIwIn0sb2Zmc2V0Om51bGx9LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMzc1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn1dLG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBDZCh0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsMywiZGl2IixbWyJjbGFzcyIsIm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgxLDAsbnVsbCxudWxsLDIsImJ1dHRvbiIsW1sibWF0LWJ1dHRvbiIsIiJdXSxbWzgsImRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LmNvbXBvbmVudC5hY3Rpb24oKSYmcikscn0sZ2QseWQpKSxpbygyLDE4MDIyNCxudWxsLDAsWGgsW2RuLHRsLFFoLFsyLGRkXV0sbnVsbCxudWxsKSwodCgpKCksTW8oMywwLFsiIiwiIl0pKV0sbnVsbCxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsR2koZSwyKS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09R2koZSwyKS5fYW5pbWF0aW9uTW9kZSksdChlLDMsMCxuLmRhdGEuYWN0aW9uKX0pfWZ1bmN0aW9uIEVkKHQpe3JldHVybiBEbygyLFsodCgpKCksTW8oMCxudWxsLFsiIiwiIl0pKSwodCgpKCksbWkoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxDZCkpLGlvKDIsMTYzODQsbnVsbCwwLEZzLFt4bix3bl0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDIsMCxlLmNvbXBvbmVudC5oYXNBY3Rpb24pfSxmdW5jdGlvbih0LGUpe3QoZSwwLDAsZS5jb21wb25lbnQuZGF0YS5tZXNzYWdlKX0pfXZhciBTZD1SaSgic2ltcGxlLXNuYWNrLWJhciIsUGgsZnVuY3Rpb24odCl7cmV0dXJuIERvKDAsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDEsInNpbXBsZS1zbmFjay1iYXIiLFtbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2JhciJdXSxbWzQwLCJAY29udGVudEZhZGUiLDBdXSxudWxsLG51bGwsRWQseGQpKSxpbygxLDQ5MTUyLG51bGwsMCxQaCxba2gsVGhdLG51bGwsbnVsbCldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLHZvaWQgMCl9KX0se30se30sW10pLGtkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl92YWx1ZT1lLG59cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3ZhciBuPXQucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLGUpO3JldHVybiBuJiYhbi5jbG9zZWQmJmUubmV4dCh0aGlzLl92YWx1ZSksbn0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0Vycm9yKXRocm93IHRoaXMudGhyb3duRXJyb3I7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IGV0O3JldHVybiB0aGlzLl92YWx1ZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1lKX0sZX0oaXQpLFRkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcywibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJFbXB0eUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gaShlLHQpLGV9KEVycm9yKTtmdW5jdGlvbiBBZCh0LGUpe3JldHVybiBaKHQsZSwxKX1mdW5jdGlvbiBQZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10P3BsKCk6ZS5saWZ0KG5ldyBPZCh0KSl9fXZhciBPZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgcnV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IElkKHQsdGhpcy50b3RhbCkpfSx0fSgpLElkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci50b3RhbD1uLHIucmluZz1uZXcgQXJyYXksci5jb3VudD0wLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJpbmcsbj10aGlzLnRvdGFsLHI9dGhpcy5jb3VudCsrO2UubGVuZ3RoPG4/ZS5wdXNoKHQpOmVbciVuXT10fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uLGU9dGhpcy5jb3VudDtpZihlPjApZm9yKHZhciBuPXRoaXMuY291bnQ+PXRoaXMudG90YWw/dGhpcy50b3RhbDp0aGlzLmNvdW50LHI9dGhpcy5yaW5nLGk9MDtpPG47aSsrKXt2YXIgbz1lKyslbjt0Lm5leHQocltvXSl9dC5jb21wbGV0ZSgpfSxlfShFKSxNZD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9TmQpLGpoKHtoYXNWYWx1ZTohMSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5oYXNWYWx1ZT0hMH0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNWYWx1ZSl0aHJvdyB0KCl9fSl9O2Z1bmN0aW9uIE5kKCl7cmV0dXJuIG5ldyBUZH1mdW5jdGlvbiBSZCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksZnVuY3Rpb24oZSl7cmV0dXJuIGUubGlmdChuZXcgRGQodCkpfX12YXIgRGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IExkKHQsdGhpcy5kZWZhdWx0VmFsdWUpKX0sdH0oKSxMZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZGVmYXVsdFZhbHVlPW4sci5pc0VtcHR5PSEwLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmlzRW1wdHk9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkmJnRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShFKTtmdW5jdGlvbiBqZCh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9ZbChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pOiQsUGQoMSksbj9SZChlKTpNZChmdW5jdGlvbigpe3JldHVybiBuZXcgVGR9KSl9fWZ1bmN0aW9uIEZkKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgVmQodCkscj1lLmxpZnQobik7cmV0dXJuIG4uY2F1Z2h0PXJ9fXZhciBWZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zZWxlY3Rvcj10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBCZCh0LHRoaXMuc2VsZWN0b3IsdGhpcy5jYXVnaHQpKX0sdH0oKSxCZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5zZWxlY3Rvcj1uLGkuY2F1Z2h0PXIsaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIG49dm9pZCAwO3RyeXtuPXRoaXMuc2VsZWN0b3IoZSx0aGlzLmNhdWdodCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLGUpfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpLHRoaXMuYWRkKFUodGhpcyxuKSl9fSxlfShIKTtmdW5jdGlvbiB6ZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBVZCh0LGUsbikpfX12YXIgVWQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lLHRoaXMuc291cmNlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEhkKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnLHRoaXMuc291cmNlKSl9LHR9KCksSGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5wcmVkaWNhdGU9bixvLnRoaXNBcmc9cixvLnNvdXJjZT1pLG8uaW5kZXg9MCxvLnRoaXNBcmc9cnx8byxvfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9ITE7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmluZGV4KyssdGhpcy5zb3VyY2UpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZXx8dGhpcy5ub3RpZnlDb21wbGV0ZSghMSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMubm90aWZ5Q29tcGxldGUoITApfSxlfShFKTtmdW5jdGlvbiBxZCh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9ZbChmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pOiQsaXUoMSksbj9SZChlKTpNZChmdW5jdGlvbigpe3JldHVybiBuZXcgVGR9KSl9fWZ1bmN0aW9uIEdkKHQsZSl7dmFyIG49ITE7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTImJihuPSEwKSxmdW5jdGlvbihyKXtyZXR1cm4gci5saWZ0KG5ldyBXZCh0LGUsbikpfX12YXIgV2Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSksdGhpcy5hY2N1bXVsYXRvcj10LHRoaXMuc2VlZD1lLHRoaXMuaGFzU2VlZD1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBRZCh0LHRoaXMuYWNjdW11bGF0b3IsdGhpcy5zZWVkLHRoaXMuaGFzU2VlZCkpfSx0fSgpLFFkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8uYWNjdW11bGF0b3I9bixvLl9zZWVkPXIsby5oYXNTZWVkPWksby5pbmRleD0wLG99cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuaGFzU2VlZD0hMCx0aGlzLl9zZWVkPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXNTZWVkKXJldHVybiB0aGlzLl90cnlOZXh0KHQpO3RoaXMuc2VlZD10LHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX3RyeU5leHQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmluZGV4Kys7dHJ5e2U9dGhpcy5hY2N1bXVsYXRvcih0aGlzLnNlZWQsdCxuKX1jYXRjaCh0KXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuc2VlZD1lLHRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oRSksS2Q9ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQsdGhpcy51cmw9ZX0sWmQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2b2lkIDA9PT1yJiYocj0iaW1wZXJhdGl2ZSIpLHZvaWQgMD09PWkmJihpPW51bGwpO3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8ubmF2aWdhdGlvblRyaWdnZXI9cixvLnJlc3RvcmVkU3RhdGU9aSxvfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvblN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShLZCksWWQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gaS51cmxBZnRlclJlZGlyZWN0cz1yLGl9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicpIn0sZX0oS2QpLFhkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkucmVhc29uPXIsaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25DYW5jZWwoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInKSJ9LGV9KEtkKSwkZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLmVycm9yPXIsaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FcnJvcihpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIGVycm9yOiAiK3RoaXMuZXJyb3IrIikifSxlfShLZCksSmQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZXNSZWNvZ25pemVkKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShLZCksdG09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja1N0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShLZCksZW09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8pe3ZhciBhPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGEudXJsQWZ0ZXJSZWRpcmVjdHM9cixhLnN0YXRlPWksYS5zaG91bGRBY3RpdmF0ZT1vLGF9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja0VuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIsIHNob3VsZEFjdGl2YXRlOiAiK3RoaXMuc2hvdWxkQWN0aXZhdGUrIikifSxlfShLZCksbm09ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSZXNvbHZlU3RhcnQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEtkKSxybT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVFbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEtkKSxpbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yb3V0ZT10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZUNvbmZpZ0xvYWRTdGFydChwYXRoOiAiK3RoaXMucm91dGUucGF0aCsiKSJ9LHR9KCksb209ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMucm91dGU9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICIrdGhpcy5yb3V0ZS5wYXRoKyIpIn0sdH0oKSxhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxzbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksbG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLHVtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkFjdGl2YXRpb25FbmQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksY209ZnVuY3Rpb24oKXt9LGhtPSJwcmltYXJ5IixmbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5wYXJhbXM9dHx8e319cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wYXJhbXMuaGFzT3duUHJvcGVydHkodCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZVswXTplfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7aWYodGhpcy5oYXModCkpe3ZhciBlPXRoaXMucGFyYW1zW3RdO3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfXJldHVybltdfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtleXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gcG0odCl7cmV0dXJuIG5ldyBmbSh0KX1mdW5jdGlvbiBkbSh0LGUsbil7dmFyIHI9bi5wYXRoLnNwbGl0KCIvIik7aWYoci5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoImZ1bGwiPT09bi5wYXRoTWF0Y2gmJihlLmhhc0NoaWxkcmVuKCl8fHIubGVuZ3RoPHQubGVuZ3RoKSlyZXR1cm4gbnVsbDtmb3IodmFyIGk9e30sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgYT1yW29dLHM9dFtvXTtpZihhLnN0YXJ0c1dpdGgoIjoiKSlpW2Euc3Vic3RyaW5nKDEpXT1zO2Vsc2UgaWYoYSE9PXMucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6dC5zbGljZSgwLHIubGVuZ3RoKSxwb3NQYXJhbXM6aX19dmFyIG1tPWZ1bmN0aW9uKHQsZSl7dGhpcy5yb3V0ZXM9dCx0aGlzLm1vZHVsZT1lfTtmdW5jdGlvbiB5bSh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtnbShyLHZtKGUscikpfX1mdW5jdGlvbiBnbSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiXG4gICAgICBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogRW5jb3VudGVyZWQgdW5kZWZpbmVkIHJvdXRlLlxuICAgICAgVGhlIHJlYXNvbiBtaWdodCBiZSBhbiBleHRyYSBjb21tYS5cblxuICAgICAgRXhhbXBsZTpcbiAgICAgIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgICAgICB7IHBhdGg6ICcnLCByZWRpcmVjdFRvOiAnL2Rhc2hib2FyZCcsIHBhdGhNYXRjaDogJ2Z1bGwnIH0sXG4gICAgICAgIHsgcGF0aDogJ2Rhc2hib2FyZCcsICBjb21wb25lbnQ6IERhc2hib2FyZENvbXBvbmVudCB9LCwgPDwgdHdvIGNvbW1hc1xuICAgICAgICB7IHBhdGg6ICdkZXRhaWwvOmlkJywgY29tcG9uZW50OiBIZXJvRGV0YWlsQ29tcG9uZW50IH1cbiAgICAgIF07XG4gICAgIik7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBBcnJheSBjYW5ub3QgYmUgc3BlY2lmaWVkIik7aWYoIXQuY29tcG9uZW50JiYhdC5jaGlsZHJlbiYmIXQubG9hZENoaWxkcmVuJiZ0Lm91dGxldCYmdC5vdXRsZXQhPT1obSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBhIGNvbXBvbmVudGxlc3Mgcm91dGUgd2l0aG91dCBjaGlsZHJlbiBvciBsb2FkQ2hpbGRyZW4gY2Fubm90IGhhdmUgYSBuYW1lZCBvdXRsZXQgc2V0Iik7aWYodC5yZWRpcmVjdFRvJiZ0LmNoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5yZWRpcmVjdFRvJiZ0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LmNoaWxkcmVuJiZ0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBjaGlsZHJlbiBhbmQgbG9hZENoaWxkcmVuIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodC5yZWRpcmVjdFRvJiZ0LmNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByZWRpcmVjdFRvIGFuZCBjb21wb25lbnQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnBhdGgmJnQubWF0Y2hlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoIGFuZCBtYXRjaGVyIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7aWYodm9pZCAwPT09dC5yZWRpcmVjdFRvJiYhdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJy4gT25lIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBiZSBwcm92aWRlZDogY29tcG9uZW50LCByZWRpcmVjdFRvLCBjaGlsZHJlbiBvciBsb2FkQ2hpbGRyZW4iKTtpZih2b2lkIDA9PT10LnBhdGgmJnZvaWQgMD09PXQubWF0Y2hlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiByb3V0ZXMgbXVzdCBoYXZlIGVpdGhlciBhIHBhdGggb3IgYSBtYXRjaGVyIHNwZWNpZmllZCIpO2lmKCJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYiLyI9PT10LnBhdGguY2hhckF0KDApKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggY2Fubm90IHN0YXJ0IHdpdGggYSBzbGFzaCIpO2lmKCIiPT09dC5wYXRoJiZ2b2lkIDAhPT10LnJlZGlyZWN0VG8mJnZvaWQgMD09PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICd7cGF0aDogXCIiK2UrJyIsIHJlZGlyZWN0VG86ICInK3QucmVkaXJlY3RUbysiXCJ9JzogcGxlYXNlIHByb3ZpZGUgJ3BhdGhNYXRjaCcuIFRoZSBkZWZhdWx0IHZhbHVlIG9mICdwYXRoTWF0Y2gnIGlzICdwcmVmaXgnLCBidXQgb2Z0ZW4gdGhlIGludGVudCBpcyB0byB1c2UgJ2Z1bGwnLiIpO2lmKHZvaWQgMCE9PXQucGF0aE1hdGNoJiYiZnVsbCIhPT10LnBhdGhNYXRjaCYmInByZWZpeCIhPT10LnBhdGhNYXRjaCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBwYXRoTWF0Y2ggY2FuIG9ubHkgYmUgc2V0IHRvICdwcmVmaXgnIG9yICdmdWxsJyIpO3QuY2hpbGRyZW4mJnltKHQuY2hpbGRyZW4sZSl9ZnVuY3Rpb24gdm0odCxlKXtyZXR1cm4gZT90fHxlLnBhdGg/dCYmIWUucGF0aD90KyIvIjohdCYmZS5wYXRoP2UucGF0aDp0KyIvIitlLnBhdGg6IiI6dH1mdW5jdGlvbiBfbSh0KXt2YXIgZT10LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLm1hcChfbSksbj1lP28oe30sdCx7Y2hpbGRyZW46ZX0pOm8oe30sdCk7cmV0dXJuIW4uY29tcG9uZW50JiYoZXx8bi5sb2FkQ2hpbGRyZW4pJiZuLm91dGxldCYmbi5vdXRsZXQhPT1obSYmKG4uY29tcG9uZW50PWNtKSxufWZ1bmN0aW9uIGJtKHQsZSl7dmFyIG4scj1PYmplY3Qua2V5cyh0KSxpPU9iamVjdC5rZXlzKGUpO2lmKHIubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZih0W249cltvXV0hPT1lW25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHdtKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpfWZ1bmN0aW9uIHhtKHQpe3JldHVybiB0Lmxlbmd0aD4wP3RbdC5sZW5ndGgtMV06bnVsbH1mdW5jdGlvbiBDbSh0LGUpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmUodFtuXSxuKX1mdW5jdGlvbiBFbSh0KXtyZXR1cm4gdC5waXBlKEooKSx6ZChmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9ZnVuY3Rpb24gU20odCl7cmV0dXJuIHBlKHQpP3Q6ZmUodCk/SyhQcm9taXNlLnJlc29sdmUodCkpOmRsKHQpfWZ1bmN0aW9uIGttKHQsZSxuKXtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe3JldHVybiBibSh0LGUpfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7aWYoIU9tKGUuc2VnbWVudHMsbi5zZWdtZW50cykpcmV0dXJuITE7aWYoZS5udW1iZXJPZkNoaWxkcmVuIT09bi5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcih2YXIgciBpbiBuLmNoaWxkcmVuKXtpZighZS5jaGlsZHJlbltyXSlyZXR1cm4hMTtpZighdChlLmNoaWxkcmVuW3JdLG4uY2hpbGRyZW5bcl0pKXJldHVybiExfXJldHVybiEwfSh0LnJvb3QsZS5yb290KTpmdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5sZW5ndGg8PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmT2JqZWN0LmtleXMoZSkuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIGVbbl09PT10W25dfSl9KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcykmJmZ1bmN0aW9uIHQoZSxuKXtyZXR1cm4gZnVuY3Rpb24gZShuLHIsaSl7aWYobi5zZWdtZW50cy5sZW5ndGg+aS5sZW5ndGgpcmV0dXJuISFPbShhPW4uc2VnbWVudHMuc2xpY2UoMCxpLmxlbmd0aCksaSkmJiFyLmhhc0NoaWxkcmVuKCk7aWYobi5zZWdtZW50cy5sZW5ndGg9PT1pLmxlbmd0aCl7aWYoIU9tKG4uc2VnbWVudHMsaSkpcmV0dXJuITE7Zm9yKHZhciBvIGluIHIuY2hpbGRyZW4pe2lmKCFuLmNoaWxkcmVuW29dKXJldHVybiExO2lmKCF0KG4uY2hpbGRyZW5bb10sci5jaGlsZHJlbltvXSkpcmV0dXJuITF9cmV0dXJuITB9dmFyIGE9aS5zbGljZSgwLG4uc2VnbWVudHMubGVuZ3RoKSxzPWkuc2xpY2Uobi5zZWdtZW50cy5sZW5ndGgpO3JldHVybiEhT20obi5zZWdtZW50cyxhKSYmISFuLmNoaWxkcmVuW2htXSYmZShuLmNoaWxkcmVuW2htXSxyLHMpfShlLG4sbi5zZWdtZW50cyl9KHQucm9vdCxlLnJvb3QpfXZhciBUbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucm9vdD10LHRoaXMucXVlcnlQYXJhbXM9ZSx0aGlzLmZyYWdtZW50PW59cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD1wbSh0aGlzLnF1ZXJ5UGFyYW1zKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBSbS5zZXJpYWxpemUodGhpcyl9LHR9KCksQW09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLnNlZ21lbnRzPXQsdGhpcy5jaGlsZHJlbj1lLHRoaXMucGFyZW50PW51bGwsQ20oZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LnBhcmVudD1ufSl9cmV0dXJuIHQucHJvdG90eXBlLmhhc0NoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnVtYmVyT2ZDaGlsZHJlbj4wfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm51bWJlck9mQ2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIERtKHRoaXMpfSx0fSgpLFBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucGF0aD10LHRoaXMucGFyYW1ldGVycz1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtZXRlck1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9cG0odGhpcy5wYXJhbWV0ZXJzKSksdGhpcy5fcGFyYW1ldGVyTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHptKHRoaXMpfSx0fSgpO2Z1bmN0aW9uIE9tKHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5wYXRoPT09ZVtuXS5wYXRofSl9ZnVuY3Rpb24gSW0odCxlKXt2YXIgbj1bXTtyZXR1cm4gQ20odC5jaGlsZHJlbixmdW5jdGlvbih0LHIpe3I9PT1obSYmKG49bi5jb25jYXQoZSh0LHIpKSl9KSxDbSh0LmNoaWxkcmVuLGZ1bmN0aW9uKHQscil7ciE9PWhtJiYobj1uLmNvbmNhdChlKHQscikpKX0pLG59dmFyIE1tPWZ1bmN0aW9uKCl7fSxObT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBXbSh0KTtyZXR1cm4gbmV3IFRtKGUucGFyc2VSb290U2VnbWVudCgpLGUucGFyc2VRdWVyeVBhcmFtcygpLGUucGFyc2VGcmFnbWVudCgpKX0sdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlLG47cmV0dXJuIi8iK2Z1bmN0aW9uIHQoZSxuKXtpZighZS5oYXNDaGlsZHJlbigpKXJldHVybiBEbShlKTtpZihuKXt2YXIgcj1lLmNoaWxkcmVuW2htXT90KGUuY2hpbGRyZW5baG1dLCExKToiIixpPVtdO3JldHVybiBDbShlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbil7biE9PWhtJiZpLnB1c2gobisiOiIrdChlLCExKSl9KSxpLmxlbmd0aD4wP3IrIigiK2kuam9pbigiLy8iKSsiKSI6cn12YXIgbz1JbShlLGZ1bmN0aW9uKG4scil7cmV0dXJuIHI9PT1obT9bdChlLmNoaWxkcmVuW2htXSwhMSldOltyKyI6Iit0KG4sITEpXX0pO3JldHVybiBEbShlKSsiLygiK28uam9pbigiLy8iKSsiKSJ9KHQucm9vdCwhMCkrKGU9dC5xdWVyeVBhcmFtcywobj1PYmplY3Qua2V5cyhlKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49ZVt0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gam0odCkrIj0iK2ptKGUpfSkuam9pbigiJiIpOmptKHQpKyI9IitqbShuKX0pKS5sZW5ndGg/Ij8iK24uam9pbigiJiIpOiIiKSsoInN0cmluZyI9PXR5cGVvZiB0LmZyYWdtZW50PyIjIitlbmNvZGVVUkkodC5mcmFnbWVudCk6IiIpfSx0fSgpLFJtPW5ldyBObTtmdW5jdGlvbiBEbSh0KXtyZXR1cm4gdC5zZWdtZW50cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHptKHQpfSkuam9pbigiLyIpfWZ1bmN0aW9uIExtKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2csIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpfWZ1bmN0aW9uIGptKHQpe3JldHVybiBMbSh0KS5yZXBsYWNlKC8lM0IvZ2ksIjsiKX1mdW5jdGlvbiBGbSh0KXtyZXR1cm4gTG0odCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gVm0odCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1mdW5jdGlvbiBCbSh0KXtyZXR1cm4gVm0odC5yZXBsYWNlKC9cKy9nLCIlMjAiKSl9ZnVuY3Rpb24gem0odCl7cmV0dXJuIiIrRm0odC5wYXRoKSsoZT10LnBhcmFtZXRlcnMsT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiI7IitGbSh0KSsiPSIrRm0oZVt0XSl9KS5qb2luKCIiKSk7dmFyIGV9dmFyIFVtPS9eW15cLygpPzs9I10rLztmdW5jdGlvbiBIbSh0KXt2YXIgZT10Lm1hdGNoKFVtKTtyZXR1cm4gZT9lWzBdOiIifXZhciBxbT0vXltePT8mI10rLyxHbT0vXltePyYjXSsvLFdtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnVybD10LHRoaXMucmVtYWluaW5nPXR9cmV0dXJuIHQucHJvdG90eXBlLnBhcnNlUm9vdFNlZ21lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgQW0oW10se30pOm5ldyBBbShbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9LHQucHJvdG90eXBlLnBhcnNlUXVlcnlQYXJhbXM9ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPyIpKWRve3RoaXMucGFyc2VRdWVyeVBhcmFtKHQpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsKCImIikpO3JldHVybiB0fSx0LnByb3RvdHlwZS5wYXJzZUZyYWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfSx0LnByb3RvdHlwZS5wYXJzZUNoaWxkcmVuPWZ1bmN0aW9uKCl7aWYoIiI9PT10aGlzLnJlbWFpbmluZylyZXR1cm57fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpO3ZhciB0PVtdO2Zvcih0aGlzLnBlZWtTdGFydHNXaXRoKCIoIil8fHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKTspdGhpcy5jYXB0dXJlKCIvIiksdC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3ZhciBlPXt9O3RoaXMucGVla1N0YXJ0c1dpdGgoIi8oIikmJih0aGlzLmNhcHR1cmUoIi8iKSxlPXRoaXMucGFyc2VQYXJlbnMoITApKTt2YXIgbj17fTtyZXR1cm4gdGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpJiYobj10aGlzLnBhcnNlUGFyZW5zKCExKSksKHQubGVuZ3RoPjB8fE9iamVjdC5rZXlzKGUpLmxlbmd0aD4wKSYmKG5baG1dPW5ldyBBbSh0LGUpKSxufSx0LnByb3RvdHlwZS5wYXJzZVNlZ21lbnQ9ZnVuY3Rpb24oKXt2YXIgdD1IbSh0aGlzLnJlbWFpbmluZyk7aWYoIiI9PT10JiZ0aGlzLnBlZWtTdGFydHNXaXRoKCI7IikpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBwYXRoIHVybCBzZWdtZW50IGNhbm5vdCBoYXZlIHBhcmFtZXRlcnM6ICciK3RoaXMucmVtYWluaW5nKyInLiIpO3JldHVybiB0aGlzLmNhcHR1cmUodCksbmV3IFBtKFZtKHQpLHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKSl9LHQucHJvdG90eXBlLnBhcnNlTWF0cml4UGFyYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCI7Iik7KXRoaXMucGFyc2VQYXJhbSh0KTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VQYXJhbT1mdW5jdGlvbih0KXt2YXIgZT1IbSh0aGlzLnJlbWFpbmluZyk7aWYoZSl7dGhpcy5jYXB0dXJlKGUpO3ZhciBuPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciByPUhtKHRoaXMucmVtYWluaW5nKTtyJiZ0aGlzLmNhcHR1cmUobj1yKX10W1ZtKGUpXT1WbShuKX19LHQucHJvdG90eXBlLnBhcnNlUXVlcnlQYXJhbT1mdW5jdGlvbih0KXt2YXIgZSxuPShlPXRoaXMucmVtYWluaW5nLm1hdGNoKHFtKSk/ZVswXToiIjtpZihuKXt0aGlzLmNhcHR1cmUobik7dmFyIHI9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChHbSk7cmV0dXJuIGU/ZVswXToiIn0odGhpcy5yZW1haW5pbmcpO2kmJnRoaXMuY2FwdHVyZShyPWkpfXZhciBvPUJtKG4pLGE9Qm0ocik7aWYodC5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIHM9dFtvXTtBcnJheS5pc0FycmF5KHMpfHwodFtvXT1zPVtzXSkscy5wdXNoKGEpfWVsc2UgdFtvXT1hfX0sdC5wcm90b3R5cGUucGFyc2VQYXJlbnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe3ZhciBuPUhtKHRoaXMucmVtYWluaW5nKSxyPXRoaXMucmVtYWluaW5nW24ubGVuZ3RoXTtpZigiLyIhPT1yJiYiKSIhPT1yJiYiOyIhPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBhcnNlIHVybCAnIit0aGlzLnVybCsiJyIpO3ZhciBpPXZvaWQgMDtuLmluZGV4T2YoIjoiKT4tMT8oaT1uLnN1YnN0cigwLG4uaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoaSksdGhpcy5jYXB0dXJlKCI6IikpOnQmJihpPWhtKTt2YXIgbz10aGlzLnBhcnNlQ2hpbGRyZW4oKTtlW2ldPTE9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGg/b1tobV06bmV3IEFtKFtdLG8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBlfSx0LnByb3RvdHlwZS5wZWVrU3RhcnRzV2l0aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aCh0KX0sdC5wcm90b3R5cGUuY29uc3VtZU9wdGlvbmFsPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aCh0KSYmKHRoaXMucmVtYWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyh0Lmxlbmd0aCksITApfSx0LnByb3RvdHlwZS5jYXB0dXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmNvbnN1bWVPcHRpb25hbCh0KSl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICInK3QrJyIuJyl9LHR9KCksUW09ZnVuY3Rpb24odCl7dGhpcy5zZWdtZW50R3JvdXA9dHx8bnVsbH0sS209ZnVuY3Rpb24odCl7dGhpcy51cmxUcmVlPXR9O2Z1bmN0aW9uIFptKHQpe3JldHVybiBuZXcgTyhmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgUW0odCkpfSl9ZnVuY3Rpb24gWW0odCl7cmV0dXJuIG5ldyBPKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBLbSh0KSl9KX1mdW5jdGlvbiBYbSh0KXtyZXR1cm4gbmV3IE8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEVycm9yKCJPbmx5IGFic29sdXRlIHJlZGlyZWN0cyBjYW4gaGF2ZSBuYW1lZCBvdXRsZXRzLiByZWRpcmVjdFRvOiAnIit0KyInIikpfSl9dmFyICRtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMuY29uZmlnTG9hZGVyPWUsdGhpcy51cmxTZXJpYWxpemVyPW4sdGhpcy51cmxUcmVlPXIsdGhpcy5jb25maWc9aSx0aGlzLmFsbG93UmVkaXJlY3RzPSEwLHRoaXMubmdNb2R1bGU9dC5nZXQoRGUpfXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuZXhwYW5kU2VnbWVudEdyb3VwKHRoaXMubmdNb2R1bGUsdGhpcy5jb25maWcsdGhpcy51cmxUcmVlLnJvb3QsaG0pLnBpcGUocShmdW5jdGlvbihlKXtyZXR1cm4gdC5jcmVhdGVVcmxUcmVlKGUsdC51cmxUcmVlLnF1ZXJ5UGFyYW1zLHQudXJsVHJlZS5mcmFnbWVudCl9KSkucGlwZShGZChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgS20pcmV0dXJuIHQuYWxsb3dSZWRpcmVjdHM9ITEsdC5tYXRjaChlLnVybFRyZWUpO2lmKGUgaW5zdGFuY2VvZiBRbSl0aHJvdyB0Lm5vTWF0Y2hFcnJvcihlKTt0aHJvdyBlfSkpfSx0LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHQucm9vdCxobSkucGlwZShxKGZ1bmN0aW9uKG4pe3JldHVybiBlLmNyZWF0ZVVybFRyZWUobix0LnF1ZXJ5UGFyYW1zLHQuZnJhZ21lbnQpfSkpLnBpcGUoRmQoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFFtKXRocm93IGUubm9NYXRjaEVycm9yKHQpO3Rocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTWF0Y2hFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKCJDYW5ub3QgbWF0Y2ggYW55IHJvdXRlcy4gVVJMIFNlZ21lbnQ6ICciK3Quc2VnbWVudEdyb3VwKyInIil9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5zZWdtZW50cy5sZW5ndGg+MD9uZXcgQW0oW10sKChyPXt9KVtobV09dCxyKSk6dDtyZXR1cm4gbmV3IFRtKGksZSxuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAwPT09bi5zZWdtZW50cy5sZW5ndGgmJm4uaGFzQ2hpbGRyZW4oKT90aGlzLmV4cGFuZENoaWxkcmVuKHQsZSxuKS5waXBlKHEoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBbShbXSx0KX0pKTp0aGlzLmV4cGFuZFNlZ21lbnQodCxuLGUsbi5zZWdtZW50cyxyLCEwKX0sdC5wcm90b3R5cGUuZXhwYW5kQ2hpbGRyZW49ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYoMD09PU9iamVjdC5rZXlzKG4pLmxlbmd0aClyZXR1cm4gZGwoe30pO3ZhciBvPVtdLGE9W10scz17fTtyZXR1cm4gQ20obixmdW5jdGlvbihuLGkpe3ZhciBsLHUsYz0obD1pLHU9bixyLmV4cGFuZFNlZ21lbnRHcm91cCh0LGUsdSxsKSkucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiBzW2ldPXR9KSk7aT09PWhtP28ucHVzaChjKTphLnB1c2goYyl9KSxkbC5hcHBseShudWxsLG8uY29uY2F0KGEpKS5waXBlKG1sKCksamQoKSxxKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSl9KG4uY2hpbGRyZW4pfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYT10aGlzO3JldHVybiBkbC5hcHBseSh2b2lkIDAsbChuKSkucGlwZShxKGZ1bmN0aW9uKHMpe3JldHVybiBhLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGUodCxlLG4scyxyLGksbykucGlwZShGZChmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgUW0pcmV0dXJuIGRsKG51bGwpO3Rocm93IHR9KSl9KSxtbCgpLHFkKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLEZkKGZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIFRkfHwiRW1wdHlFcnJvciI9PT10Lm5hbWUpe2lmKGEubm9MZWZ0b3ZlcnNJblVybChlLHIsaSkpcmV0dXJuIGRsKG5ldyBBbShbXSx7fSkpO3Rocm93IG5ldyBRbShlKX10aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub0xlZnRvdmVyc0luVXJsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUubGVuZ3RoJiYhdC5jaGlsZHJlbltuXX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtyZXR1cm4gbnkocikhPT1vP1ptKGUpOnZvaWQgMD09PXIucmVkaXJlY3RUbz90aGlzLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUscixpKTphJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixpLG8pOlptKGUpfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLGksbyl7cmV0dXJuIioqIj09PXIucGF0aD90aGlzLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxuLHIsbyk6dGhpcy5leHBhbmRSZWd1bGFyU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixpLG8pfSx0LnByb3RvdHlwZS5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhbXSxuLnJlZGlyZWN0VG8se30pO3JldHVybiBuLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP1ltKG8pOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKG4sbykucGlwZShaKGZ1bmN0aW9uKG4pe3ZhciBvPW5ldyBBbShuLHt9KTtyZXR1cm4gaS5leHBhbmRTZWdtZW50KHQsbyxlLG4sciwhMSl9KSl9LHQucHJvdG90eXBlLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9dGhpcyxzPUptKGUscixpKSxsPXMuY29uc3VtZWRTZWdtZW50cyx1PXMubGFzdENoaWxkLGM9cy5wb3NpdGlvbmFsUGFyYW1TZWdtZW50cztpZighcy5tYXRjaGVkKXJldHVybiBabShlKTt2YXIgaD10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhsLHIucmVkaXJlY3RUbyxjKTtyZXR1cm4gci5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9ZbShoKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhyLGgpLnBpcGUoWihmdW5jdGlvbihyKXtyZXR1cm4gYS5leHBhbmRTZWdtZW50KHQsZSxuLHIuY29uY2F0KGkuc2xpY2UodSkpLG8sITEpfSkpfSx0LnByb3RvdHlwZS5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztpZigiKioiPT09bi5wYXRoKXJldHVybiBuLmxvYWRDaGlsZHJlbj90aGlzLmNvbmZpZ0xvYWRlci5sb2FkKHQuaW5qZWN0b3IsbikucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9sb2FkZWRDb25maWc9dCxuZXcgQW0ocix7fSl9KSk6ZGwobmV3IEFtKHIse30pKTt2YXIgcz1KbShlLG4sciksbD1zLmNvbnN1bWVkU2VnbWVudHMsdT1zLmxhc3RDaGlsZDtpZighcy5tYXRjaGVkKXJldHVybiBabShlKTt2YXIgYz1yLnNsaWNlKHUpO3JldHVybiB0aGlzLmdldENoaWxkQ29uZmlnKHQsbikucGlwZShaKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLHI9dC5yb3V0ZXMscz1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIGV5KHQsZSxuKSYmbnkobikhPT1obX0pfSh0LG4pP3tzZWdtZW50R3JvdXA6dHkobmV3IEFtKGUsZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9e307aVtobV09ZTt0cnl7Zm9yKHZhciBvPWEodCkscz1vLm5leHQoKTshcy5kb25lO3M9by5uZXh0KCkpe3ZhciBsPXMudmFsdWU7IiI9PT1sLnBhdGgmJm55KGwpIT09aG0mJihpW255KGwpXT1uZXcgQW0oW10se30pKX19Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKHI9by5yZXR1cm4pJiZyLmNhbGwobyl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBpfShyLG5ldyBBbShuLHQuY2hpbGRyZW4pKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09bi5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBleSh0LGUsbil9KX0odCxuKT97c2VnbWVudEdyb3VwOnR5KG5ldyBBbSh0LnNlZ21lbnRzLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLHMsbD17fTt0cnl7Zm9yKHZhciB1PWEobiksYz11Lm5leHQoKTshYy5kb25lO2M9dS5uZXh0KCkpe3ZhciBoPWMudmFsdWU7ZXkodCxlLGgpJiYhcltueShoKV0mJihsW255KGgpXT1uZXcgQW0oW10se30pKX19Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YyYmIWMuZG9uZSYmKHM9dS5yZXR1cm4pJiZzLmNhbGwodSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBvKHt9LHIsbCl9KHQsbixyLHQuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6bn06e3NlZ21lbnRHcm91cDp0LHNsaWNlZFNlZ21lbnRzOm59fShlLGwsYyxyKSx1PXMuc2VnbWVudEdyb3VwLGg9cy5zbGljZWRTZWdtZW50cztyZXR1cm4gMD09PWgubGVuZ3RoJiZ1Lmhhc0NoaWxkcmVuKCk/aS5leHBhbmRDaGlsZHJlbihuLHIsdSkucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQW0obCx0KX0pKTowPT09ci5sZW5ndGgmJjA9PT1oLmxlbmd0aD9kbChuZXcgQW0obCx7fSkpOmkuZXhwYW5kU2VnbWVudChuLHUscixoLGhtLCEwKS5waXBlKHEoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBbShsLmNvbmNhdCh0LnNlZ21lbnRzKSx0LmNoaWxkcmVuKX0pKX0pKX0sdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBlLmNoaWxkcmVuP2RsKG5ldyBtbShlLmNoaWxkcmVuLHQpKTplLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1lLl9sb2FkZWRDb25maWc/ZGwoZS5fbG9hZGVkQ29uZmlnKTpmdW5jdGlvbih0LGUpe3ZhciBuPWUuY2FuTG9hZDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP0VtKEsobikucGlwZShxKGZ1bmN0aW9uKG4pe3ZhciByPXQuZ2V0KG4pO3JldHVybiBTbShyLmNhbkxvYWQ/ci5jYW5Mb2FkKGUpOnIoZSkpfSkpKTpkbCghMCl9KHQuaW5qZWN0b3IsZSkucGlwZShaKGZ1bmN0aW9uKHIpe3JldHVybiByP24uY29uZmlnTG9hZGVyLmxvYWQodC5pbmplY3RvcixlKS5waXBlKHEoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKCgobj1FcnJvcigiTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiBDYW5ub3QgbG9hZCBjaGlsZHJlbiBiZWNhdXNlIHRoZSBndWFyZCBvZiB0aGUgcm91dGUgXCJwYXRoOiAnIit0LnBhdGgrIidcIiByZXR1cm5lZCBmYWxzZSIpKS5uZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcj0hMCxuKSk7dmFyIG59KX0oZSl9KSk6ZGwobmV3IG1tKFtdLHQpKX0sdC5wcm90b3R5cGUubGluZXJhbGl6ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLHI9ZS5yb290Ozspe2lmKG49bi5jb25jYXQoci5zZWdtZW50cyksMD09PXIubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gZGwobik7aWYoci5udW1iZXJPZkNoaWxkcmVuPjF8fCFyLmNoaWxkcmVuW2htXSlyZXR1cm4gWG0odC5yZWRpcmVjdFRvKTtyPXIuY2hpbGRyZW5baG1dfX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENvbW1hbmRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWUoZSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoZSksdCxuKX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENyZWF0cmVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKHQsZS5yb290LG4scik7cmV0dXJuIG5ldyBUbShpLHRoaXMuY3JlYXRlUXVlcnlQYXJhbXMoZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQpfSx0LnByb3RvdHlwZS5jcmVhdGVRdWVyeVBhcmFtcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBDbSh0LGZ1bmN0aW9uKHQscil7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0LnN0YXJ0c1dpdGgoIjoiKSl7dmFyIGk9dC5zdWJzdHJpbmcoMSk7bltyXT1lW2ldfWVsc2UgbltyXT10fSksbn0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz10aGlzLmNyZWF0ZVNlZ21lbnRzKHQsZS5zZWdtZW50cyxuLHIpLGE9e307cmV0dXJuIENtKGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXthW29dPWkuY3JlYXRlU2VnbWVudEdyb3VwKHQsZSxuLHIpfSksbmV3IEFtKG8sYSl9LHQucHJvdG90eXBlLmNyZWF0ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXM7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBhdGguc3RhcnRzV2l0aCgiOiIpP2kuZmluZFBvc1BhcmFtKHQsZSxyKTppLmZpbmRPclJldHVybihlLG4pfSl9LHQucHJvdG90eXBlLmZpbmRQb3NQYXJhbT1mdW5jdGlvbih0LGUsbil7dmFyIHI9bltlLnBhdGguc3Vic3RyaW5nKDEpXTtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWRpcmVjdCB0byAnIit0KyInLiBDYW5ub3QgZmluZCAnIitlLnBhdGgrIicuIik7cmV0dXJuIHJ9LHQucHJvdG90eXBlLmZpbmRPclJldHVybj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT0wO3RyeXtmb3IodmFyIG89YShlKSxzPW8ubmV4dCgpOyFzLmRvbmU7cz1vLm5leHQoKSl7dmFyIGw9cy52YWx1ZTtpZihsLnBhdGg9PT10LnBhdGgpcmV0dXJuIGUuc3BsaWNlKGkpLGw7aSsrfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYocj1vLnJldHVybikmJnIuY2FsbChvKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gSm0odCxlLG4pe2lmKCIiPT09ZS5wYXRoKXJldHVybiJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKT97bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTt2YXIgcj0oZS5tYXRjaGVyfHxkbSkobix0LGUpO3JldHVybiByP3ttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6ci5jb25zdW1lZCxsYXN0Q2hpbGQ6ci5jb25zdW1lZC5sZW5ndGgscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6ci5wb3NQYXJhbXN9OnttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319fWZ1bmN0aW9uIHR5KHQpe2lmKDE9PT10Lm51bWJlck9mQ2hpbGRyZW4mJnQuY2hpbGRyZW5baG1dKXt2YXIgZT10LmNoaWxkcmVuW2htXTtyZXR1cm4gbmV3IEFtKHQuc2VnbWVudHMuY29uY2F0KGUuc2VnbWVudHMpLGUuY2hpbGRyZW4pfXJldHVybiB0fWZ1bmN0aW9uIGV5KHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDAhPT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gbnkodCl7cmV0dXJuIHQub3V0bGV0fHxobX12YXIgcnk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Jvb3Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGF0aEZyb21Sb290KHQpO3JldHVybiBlLmxlbmd0aD4xP2VbZS5sZW5ndGgtMl06bnVsbH0sdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9aXkodCx0aGlzLl9yb290KTtyZXR1cm4gZT9lLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOltdfSx0LnByb3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPWl5KHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUmJmUuY2hpbGRyZW4ubGVuZ3RoPjA/ZS5jaGlsZHJlblswXS52YWx1ZTpudWxsfSx0LnByb3RvdHlwZS5zaWJsaW5ncz1mdW5jdGlvbih0KXt2YXIgZT1veSh0LHRoaXMuX3Jvb3QpO3JldHVybiBlLmxlbmd0aDwyP1tdOmVbZS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfSx0LnByb3RvdHlwZS5wYXRoRnJvbVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG95KHQsdGhpcy5fcm9vdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LHR9KCk7ZnVuY3Rpb24gaXkodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm4gZTt0cnl7Zm9yKHZhciBuPWEoZS5jaGlsZHJlbikscj1uLm5leHQoKTshci5kb25lO3I9bi5uZXh0KCkpe3ZhciBpPWl5KHQsci52YWx1ZSk7aWYoaSlyZXR1cm4gaX19Y2F0Y2godCl7bz17ZXJyb3I6dH19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKHM9bi5yZXR1cm4pJiZzLmNhbGwobil9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBudWxsO3ZhciBvLHN9ZnVuY3Rpb24gb3kodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm5bZV07dHJ5e2Zvcih2YXIgbj1hKGUuY2hpbGRyZW4pLHI9bi5uZXh0KCk7IXIuZG9uZTtyPW4ubmV4dCgpKXt2YXIgaT1veSh0LHIudmFsdWUpO2lmKGkubGVuZ3RoKXJldHVybiBpLnVuc2hpZnQoZSksaX19Y2F0Y2godCl7bz17ZXJyb3I6dH19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKHM9bi5yZXR1cm4pJiZzLmNhbGwobil9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybltdO3ZhciBvLHN9dmFyIGF5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmFsdWU9dCx0aGlzLmNoaWxkcmVuPWV9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlRyZWVOb2RlKCIrdGhpcy52YWx1ZSsiKSJ9LHR9KCk7ZnVuY3Rpb24gc3kodCl7dmFyIGU9e307cmV0dXJuIHQmJnQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0LnZhbHVlLm91dGxldF09dH0pLGV9dmFyIGx5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5zbmFwc2hvdD1uLGR5KHIsZSkscn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX0sZX0ocnkpO2Z1bmN0aW9uIHV5KHQsZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgZnkoW10se30se30sIiIse30saG0sZSxudWxsLHQucm9vdCwtMSx7fSk7cmV0dXJuIG5ldyBweSgiIixuZXcgYXkobixbXSkpfSh0LGUpLHI9bmV3IGtkKFtuZXcgUG0oIiIse30pXSksaT1uZXcga2Qoe30pLG89bmV3IGtkKHt9KSxhPW5ldyBrZCh7fSkscz1uZXcga2QoIiIpLGw9bmV3IGN5KHIsaSxhLHMsbyxobSxlLG4ucm9vdCk7cmV0dXJuIGwuc25hcHNob3Q9bi5yb290LG5ldyBseShuZXcgYXkobCxbXSksbil9dmFyIGN5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1yLHRoaXMuZGF0YT1pLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLl9mdXR1cmVTbmFwc2hvdD1zfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvdXRlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiBwbSh0KX0pKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXRoaXMucXVlcnlQYXJhbXMucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiBwbSh0KX0pKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKToiRnV0dXJlKCIrdGhpcy5fZnV0dXJlU25hcHNob3QrIikifSx0fSgpO2Z1bmN0aW9uIGh5KHQsZSl7dm9pZCAwPT09ZSYmKGU9ImVtcHR5T25seSIpO3ZhciBuPXQucGF0aEZyb21Sb290LHI9MDtpZigiYWx3YXlzIiE9PWUpZm9yKHI9bi5sZW5ndGgtMTtyPj0xOyl7dmFyIGk9bltyXSxhPW5bci0xXTtpZihpLnJvdXRlQ29uZmlnJiYiIj09PWkucm91dGVDb25maWcucGF0aClyLS07ZWxzZXtpZihhLmNvbXBvbmVudClicmVhaztyLS19fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm57cGFyYW1zOm8oe30sdC5wYXJhbXMsZS5wYXJhbXMpLGRhdGE6byh7fSx0LmRhdGEsZS5kYXRhKSxyZXNvbHZlOm8oe30sdC5yZXNvbHZlLGUuX3Jlc29sdmVkRGF0YSl9fSx7cGFyYW1zOnt9LGRhdGE6e30scmVzb2x2ZTp7fX0pfShuLnNsaWNlKHIpKX12YXIgZnk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyxsLHUsYyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PXIsdGhpcy5kYXRhPWksdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMucm91dGVDb25maWc9cyx0aGlzLl91cmxTZWdtZW50PWwsdGhpcy5fbGFzdFBhdGhJbmRleD11LHRoaXMuX3Jlc29sdmU9Y31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1wbSh0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVlcnlQYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD1wbSh0aGlzLnF1ZXJ5UGFyYW1zKSksdGhpcy5fcXVlcnlQYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZSh1cmw6JyIrdGhpcy51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIikrIicsIHBhdGg6JyIrKHRoaXMucm91dGVDb25maWc/dGhpcy5yb3V0ZUNvbmZpZy5wYXRoOiIiKSsiJykifSx0fSgpLHB5PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxuKXx8dGhpcztyZXR1cm4gci51cmw9ZSxkeShyLG4pLHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBteSh0aGlzLl9yb290KX0sZX0ocnkpO2Z1bmN0aW9uIGR5KHQsZSl7ZS52YWx1ZS5fcm91dGVyU3RhdGU9dCxlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGR5KHQsZSl9KX1mdW5jdGlvbiBteSh0KXt2YXIgZT10LmNoaWxkcmVuLmxlbmd0aD4wPyIgeyAiK3QuY2hpbGRyZW4ubWFwKG15KS5qb2luKCIsICIpKyIgfSAiOiIiO3JldHVybiIiK3QudmFsdWUrZX1mdW5jdGlvbiB5eSh0KXtpZih0LnNuYXBzaG90KXt2YXIgZT10LnNuYXBzaG90LG49dC5fZnV0dXJlU25hcHNob3Q7dC5zbmFwc2hvdD1uLGJtKGUucXVlcnlQYXJhbXMsbi5xdWVyeVBhcmFtcyl8fHQucXVlcnlQYXJhbXMubmV4dChuLnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50IT09bi5mcmFnbWVudCYmdC5mcmFnbWVudC5uZXh0KG4uZnJhZ21lbnQpLGJtKGUucGFyYW1zLG4ucGFyYW1zKXx8dC5wYXJhbXMubmV4dChuLnBhcmFtcyksZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKCFibSh0W25dLGVbbl0pKXJldHVybiExO3JldHVybiEwfShlLnVybCxuLnVybCl8fHQudXJsLm5leHQobi51cmwpLGJtKGUuZGF0YSxuLmRhdGEpfHx0LmRhdGEubmV4dChuLmRhdGEpfWVsc2UgdC5zbmFwc2hvdD10Ll9mdXR1cmVTbmFwc2hvdCx0LmRhdGEubmV4dCh0Ll9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBneSh0LGUpe3ZhciBuLHI7cmV0dXJuIGJtKHQucGFyYW1zLGUucGFyYW1zKSYmT20obj10LnVybCxyPWUudXJsKSYmbi5ldmVyeShmdW5jdGlvbih0LGUpe3JldHVybiBibSh0LnBhcmFtZXRlcnMscltlXS5wYXJhbWV0ZXJzKX0pJiYhKCF0LnBhcmVudCE9IWUucGFyZW50KSYmKCF0LnBhcmVudHx8Z3kodC5wYXJlbnQsZS5wYXJlbnQpKX1mdW5jdGlvbiB2eSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJiF0Lm91dGxldHMmJiF0LnNlZ21lbnRQYXRofWZ1bmN0aW9uIF95KHQsZSxuLHIsaSl7dmFyIG89e307cmV0dXJuIHImJkNtKHIsZnVuY3Rpb24odCxlKXtvW2VdPUFycmF5LmlzQXJyYXkodCk/dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiIrdH0pOiIiK3R9KSxuZXcgVG0obi5yb290PT09dD9lOmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpPXt9O3JldHVybiBDbShlLmNoaWxkcmVuLGZ1bmN0aW9uKGUsbyl7aVtvXT1lPT09bj9yOnQoZSxuLHIpfSksbmV3IEFtKGUuc2VnbWVudHMsaSl9KG4ucm9vdCx0LGUpLG8saSl9dmFyIGJ5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7aWYodGhpcy5pc0Fic29sdXRlPXQsdGhpcy5udW1iZXJPZkRvdWJsZURvdHM9ZSx0aGlzLmNvbW1hbmRzPW4sdCYmbi5sZW5ndGg+MCYmdnkoblswXSkpdGhyb3cgbmV3IEVycm9yKCJSb290IHNlZ21lbnQgY2Fubm90IGhhdmUgbWF0cml4IHBhcmFtZXRlcnMiKTt2YXIgcj1uLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHN9KTtpZihyJiZyIT09eG0obikpdGhyb3cgbmV3IEVycm9yKCJ7b3V0bGV0czp7fX0gaGFzIHRvIGJlIHRoZSBsYXN0IGNvbW1hbmQiKX1yZXR1cm4gdC5wcm90b3R5cGUudG9Sb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19LHR9KCksd3k9ZnVuY3Rpb24odCxlLG4pe3RoaXMuc2VnbWVudEdyb3VwPXQsdGhpcy5wcm9jZXNzQ2hpbGRyZW49ZSx0aGlzLmluZGV4PW59O2Z1bmN0aW9uIHh5KHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmdC5vdXRsZXRzP3Qub3V0bGV0c1tobV06IiIrdH1mdW5jdGlvbiBDeSh0LGUsbil7aWYodHx8KHQ9bmV3IEFtKFtdLHt9KSksMD09PXQuc2VnbWVudHMubGVuZ3RoJiZ0Lmhhc0NoaWxkcmVuKCkpcmV0dXJuIEV5KHQsZSxuKTt2YXIgcj1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPTAsaT1lLG89e21hdGNoOiExLHBhdGhJbmRleDowLGNvbW1hbmRJbmRleDowfTtpPHQuc2VnbWVudHMubGVuZ3RoOyl7aWYocj49bi5sZW5ndGgpcmV0dXJuIG87dmFyIGE9dC5zZWdtZW50c1tpXSxzPXh5KG5bcl0pLGw9cjxuLmxlbmd0aC0xP25bcisxXTpudWxsO2lmKGk+MCYmdm9pZCAwPT09cylicmVhaztpZihzJiZsJiYib2JqZWN0Ij09dHlwZW9mIGwmJnZvaWQgMD09PWwub3V0bGV0cyl7aWYoIUF5KHMsbCxhKSlyZXR1cm4gbztyKz0yfWVsc2V7aWYoIUF5KHMse30sYSkpcmV0dXJuIG87cisrfWkrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmksY29tbWFuZEluZGV4OnJ9fSh0LGUsbiksaT1uLnNsaWNlKHIuY29tbWFuZEluZGV4KTtpZihyLm1hdGNoJiZyLnBhdGhJbmRleDx0LnNlZ21lbnRzLmxlbmd0aCl7dmFyIG89bmV3IEFtKHQuc2VnbWVudHMuc2xpY2UoMCxyLnBhdGhJbmRleCkse30pO3JldHVybiBvLmNoaWxkcmVuW2htXT1uZXcgQW0odC5zZWdtZW50cy5zbGljZShyLnBhdGhJbmRleCksdC5jaGlsZHJlbiksRXkobywwLGkpfXJldHVybiByLm1hdGNoJiYwPT09aS5sZW5ndGg/bmV3IEFtKHQuc2VnbWVudHMse30pOnIubWF0Y2gmJiF0Lmhhc0NoaWxkcmVuKCk/U3kodCxlLG4pOnIubWF0Y2g/RXkodCwwLGkpOlN5KHQsZSxuKX1mdW5jdGlvbiBFeSh0LGUsbil7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBuZXcgQW0odC5zZWdtZW50cyx7fSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0WzBdPygoZT17fSlbaG1dPXQsZSk6dm9pZCAwPT09dFswXS5vdXRsZXRzPygobj17fSlbaG1dPXQsbik6dFswXS5vdXRsZXRzO3ZhciBlLG59KG4pLGk9e307cmV0dXJuIENtKHIsZnVuY3Rpb24obixyKXtudWxsIT09biYmKGlbcl09Q3kodC5jaGlsZHJlbltyXSxlLG4pKX0pLENtKHQuY2hpbGRyZW4sZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1yW2VdJiYoaVtlXT10KX0pLG5ldyBBbSh0LnNlZ21lbnRzLGkpfWZ1bmN0aW9uIFN5KHQsZSxuKXtmb3IodmFyIHI9dC5zZWdtZW50cy5zbGljZSgwLGUpLGk9MDtpPG4ubGVuZ3RoOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBuW2ldJiZ2b2lkIDAhPT1uW2ldLm91dGxldHMpe3ZhciBvPWt5KG5baV0ub3V0bGV0cyk7cmV0dXJuIG5ldyBBbShyLG8pfWlmKDA9PT1pJiZ2eShuWzBdKSlyLnB1c2gobmV3IFBtKHQuc2VnbWVudHNbZV0ucGF0aCxuWzBdKSksaSsrO2Vsc2V7dmFyIGE9eHkobltpXSkscz1pPG4ubGVuZ3RoLTE/bltpKzFdOm51bGw7YSYmcyYmdnkocyk/KHIucHVzaChuZXcgUG0oYSxUeShzKSkpLGkrPTIpOihyLnB1c2gobmV3IFBtKGEse30pKSxpKyspfX1yZXR1cm4gbmV3IEFtKHIse30pfWZ1bmN0aW9uIGt5KHQpe3ZhciBlPXt9O3JldHVybiBDbSh0LGZ1bmN0aW9uKHQsbil7bnVsbCE9PXQmJihlW25dPVN5KG5ldyBBbShbXSx7fSksMCx0KSl9KSxlfWZ1bmN0aW9uIFR5KHQpe3ZhciBlPXt9O3JldHVybiBDbSh0LGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbbl09IiIrdH0pLGV9ZnVuY3Rpb24gQXkodCxlLG4pe3JldHVybiB0PT1uLnBhdGgmJmJtKGUsbi5wYXJhbWV0ZXJzKX12YXIgUHk9ZnVuY3Rpb24odCl7dGhpcy5wYXRoPXQsdGhpcy5yb3V0ZT10aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aC0xXX0sT3k9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXBvbmVudD10LHRoaXMucm91dGU9ZX0sSXk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuZnV0dXJlPXQsdGhpcy5jdXJyPWUsdGhpcy5tb2R1bGVJbmplY3Rvcj1uLHRoaXMuZm9yd2FyZEV2ZW50PXIsdGhpcy5jYW5BY3RpdmF0ZUNoZWNrcz1bXSx0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3M9W119cmV0dXJuIHQucHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mdXR1cmUuX3Jvb3Q7dGhpcy5zZXR1cENoaWxkUm91dGVHdWFyZHMoZSx0aGlzLmN1cnI/dGhpcy5jdXJyLl9yb290Om51bGwsdCxbZS52YWx1ZV0pfSx0LnByb3RvdHlwZS5jaGVja0d1YXJkcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaXNEZWFjdGl2YXRpbmcoKXx8dGhpcy5pc0FjdGl2YXRpbmcoKT90aGlzLnJ1bkNhbkRlYWN0aXZhdGVDaGVja3MoKS5waXBlKFooZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5ydW5DYW5BY3RpdmF0ZUNoZWNrcygpOmRsKCExKX0pKTpkbCghMCl9LHQucHJvdG90eXBlLnJlc29sdmVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaXNBY3RpdmF0aW5nKCk/Syh0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzKS5waXBlKEFkKGZ1bmN0aW9uKG4pe3JldHVybiBlLnJ1blJlc29sdmUobi5yb3V0ZSx0KX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTI/ZnVuY3Rpb24obil7cmV0dXJuIEEoR2QodCxlKSxQZCgxKSxSZChlKSkobil9OmZ1bmN0aW9uKGUpe3JldHVybiBBKEdkKGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdChlLG4scisxKX0pLFBkKDEpKShlKX19KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KSk6ZGwobnVsbCl9LHQucHJvdG90eXBlLmlzRGVhY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5pc0FjdGl2YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuY2FuQWN0aXZhdGVDaGVja3MubGVuZ3RofSx0LnByb3RvdHlwZS5zZXR1cENoaWxkUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXN5KGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtpLnNldHVwUm91dGVHdWFyZHModCxvW3QudmFsdWUub3V0bGV0XSxuLHIuY29uY2F0KFt0LnZhbHVlXSkpLGRlbGV0ZSBvW3QudmFsdWUub3V0bGV0XX0pLENtKG8sZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4uZ2V0Q29udGV4dChlKSl9KX0sdC5wcm90b3R5cGUuc2V0dXBSb3V0ZUd1YXJkcz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnZhbHVlLG89ZT9lLnZhbHVlOm51bGwsYT1uP24uZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk6bnVsbDtpZihvJiZpLnJvdXRlQ29uZmlnPT09by5yb3V0ZUNvbmZpZyl7dmFyIHM9dGhpcy5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnMobyxpLGkucm91dGVDb25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtzP3RoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgUHkocikpOihpLmRhdGE9by5kYXRhLGkuX3Jlc29sdmVkRGF0YT1vLl9yZXNvbHZlZERhdGEpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsZSxpLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLHIpLHMmJnRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBPeShhLm91dGxldC5jb21wb25lbnQsbykpfWVsc2UgbyYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLGEpLHRoaXMuY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgUHkocikpLHRoaXMuc2V0dXBDaGlsZFJvdXRlR3VhcmRzKHQsbnVsbCxpLmNvbXBvbmVudD9hP2EuY2hpbGRyZW46bnVsbDpuLHIpfSx0LnByb3RvdHlwZS5zaG91bGRSdW5HdWFyZHNBbmRSZXNvbHZlcnM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChuKXtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hZ3kodCxlKXx8IWJtKHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcyk7Y2FzZSJwYXJhbXNDaGFuZ2UiOmRlZmF1bHQ6cmV0dXJuIWd5KHQsZSl9fSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1zeSh0KSxpPXQudmFsdWU7Q20ocixmdW5jdGlvbih0LHIpe24uZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxpLmNvbXBvbmVudD9lP2UuY2hpbGRyZW4uZ2V0Q29udGV4dChyKTpudWxsOmUpfSksdGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IE95KGkuY29tcG9uZW50JiZlJiZlLm91dGxldCYmZS5vdXRsZXQuaXNBY3RpdmF0ZWQ/ZS5vdXRsZXQuY29tcG9uZW50Om51bGwsaSkpfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gSyh0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MpLnBpcGUoWihmdW5jdGlvbihlKXtyZXR1cm4gdC5ydW5DYW5EZWFjdGl2YXRlKGUuY29tcG9uZW50LGUucm91dGUpfSksemQoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5ydW5DYW5BY3RpdmF0ZUNoZWNrcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIEsodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShBZChmdW5jdGlvbihlKXtyZXR1cm4gRW0oSyhbdC5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZS5wYXJlbnQpLHQuZmlyZUFjdGl2YXRpb25TdGFydChlLnJvdXRlKSx0LnJ1bkNhbkFjdGl2YXRlQ2hpbGQoZS5wYXRoKSx0LnJ1bkNhbkFjdGl2YXRlKGUucm91dGUpXSkpfSksemQoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5maXJlQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBsbSh0KSksZGwoITApfSx0LnByb3RvdHlwZS5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IGFtKHQpKSxkbCghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP0VtKEsobikucGlwZShxKGZ1bmN0aW9uKG4pe3ZhciByPWUuZ2V0VG9rZW4obix0KTtyZXR1cm4gU20oci5jYW5BY3RpdmF0ZT9yLmNhbkFjdGl2YXRlKHQsZS5mdXR1cmUpOnIodCxlLmZ1dHVyZSkpLnBpcGUocWQoKSl9KSkpOmRsKCEwKX0sdC5wcm90b3R5cGUucnVuQ2FuQWN0aXZhdGVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dFt0Lmxlbmd0aC0xXTtyZXR1cm4gRW0oSyh0LnNsaWNlKDAsdC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZCh0KX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXR9KSkucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiBFbShLKHQuZ3VhcmRzKS5waXBlKHEoZnVuY3Rpb24ocil7dmFyIGk9ZS5nZXRUb2tlbihyLHQubm9kZSk7cmV0dXJuIFNtKGkuY2FuQWN0aXZhdGVDaGlsZD9pLmNhbkFjdGl2YXRlQ2hpbGQobixlLmZ1dHVyZSk6aShuLGUuZnV0dXJlKSkucGlwZShxZCgpKX0pKSl9KSkpfSx0LnByb3RvdHlwZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZDpudWxsO3JldHVybiBlJiYwIT09ZS5sZW5ndGg/e25vZGU6dCxndWFyZHM6ZX06bnVsbH0sdC5wcm90b3R5cGUucnVuQ2FuRGVhY3RpdmF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lJiZlLnJvdXRlQ29uZmlnP2Uucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiByJiYwIT09ci5sZW5ndGg/SyhyKS5waXBlKFooZnVuY3Rpb24ocil7dmFyIGk9bi5nZXRUb2tlbihyLGUpO3JldHVybiBTbShpLmNhbkRlYWN0aXZhdGU/aS5jYW5EZWFjdGl2YXRlKHQsZSxuLmN1cnIsbi5mdXR1cmUpOmkodCxlLG4uY3VycixuLmZ1dHVyZSkpLnBpcGUocWQoKSl9KSkucGlwZSh6ZChmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSk6ZGwoITApfSx0LnByb3RvdHlwZS5ydW5SZXNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVzb2x2ZU5vZGUodC5fcmVzb2x2ZSx0KS5waXBlKHEoZnVuY3Rpb24obil7cmV0dXJuIHQuX3Jlc29sdmVkRGF0YT1uLHQuZGF0YT1vKHt9LHQuZGF0YSxoeSh0LGUpLnJlc29sdmUpLG51bGx9KSl9LHQucHJvdG90eXBlLnJlc29sdmVOb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPU9iamVjdC5rZXlzKHQpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gZGwoe30pO2lmKDE9PT1yLmxlbmd0aCl7dmFyIGk9clswXTtyZXR1cm4gdGhpcy5nZXRSZXNvbHZlcih0W2ldLGUpLnBpcGUocShmdW5jdGlvbih0KXtyZXR1cm4oZT17fSlbaV09dCxlO3ZhciBlfSkpfXZhciBvPXt9O3JldHVybiBLKHIpLnBpcGUoWihmdW5jdGlvbihyKXtyZXR1cm4gbi5nZXRSZXNvbHZlcih0W3JdLGUpLnBpcGUocShmdW5jdGlvbih0KXtyZXR1cm4gb1tyXT10LHR9KSl9KSkucGlwZShqZCgpLHEoZnVuY3Rpb24oKXtyZXR1cm4gb30pKX0sdC5wcm90b3R5cGUuZ2V0UmVzb2x2ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldFRva2VuKHQsZSk7cmV0dXJuIFNtKG4ucmVzb2x2ZT9uLnJlc29sdmUoZSx0aGlzLmZ1dHVyZSk6bihlLHRoaXMuZnV0dXJlKSl9LHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZ31yZXR1cm4gbnVsbH0oZSk7cmV0dXJuKG4/bi5tb2R1bGUuaW5qZWN0b3I6dGhpcy5tb2R1bGVJbmplY3RvcikuZ2V0KHQpfSx0fSgpLE15PWZ1bmN0aW9uKCl7fSxOeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpKXt0aGlzLnJvb3RDb21wb25lbnRUeXBlPXQsdGhpcy5jb25maWc9ZSx0aGlzLnVybFRyZWU9bix0aGlzLnVybD1yLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT1pfXJldHVybiB0LnByb3RvdHlwZS5yZWNvZ25pemU9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9THkodGhpcy51cmxUcmVlLnJvb3QsW10sW10sdGhpcy5jb25maWcpLnNlZ21lbnRHcm91cCxlPXRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0aGlzLmNvbmZpZyx0LGhtKSxuPW5ldyBmeShbXSxPYmplY3QuZnJlZXplKHt9KSxPYmplY3QuZnJlZXplKG8oe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGhtLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx0aGlzLnVybFRyZWUucm9vdCwtMSx7fSkscj1uZXcgYXkobixlKSxpPW5ldyBweSh0aGlzLnVybCxyKTtyZXR1cm4gdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShpLl9yb290KSxkbChpKX1jYXRjaCh0KXtyZXR1cm4gbmV3IE8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KX19LHQucHJvdG90eXBlLmluaGVyaXRQYXJhbXNBbmREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnZhbHVlLHI9aHkobix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpO24ucGFyYW1zPU9iamVjdC5mcmVlemUoci5wYXJhbXMpLG4uZGF0YT1PYmplY3QuZnJlZXplKHIuZGF0YSksdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluaGVyaXRQYXJhbXNBbmREYXRhKHQpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5zZWdtZW50cy5sZW5ndGgmJmUuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbih0LGUpOnRoaXMucHJvY2Vzc1NlZ21lbnQodCxlLGUuc2VnbWVudHMsbil9LHQucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcyxpPUltKGUsZnVuY3Rpb24oZSxuKXtyZXR1cm4gci5wcm9jZXNzU2VnbWVudEdyb3VwKHQsZSxuKX0pO3JldHVybiBuPXt9LGkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uW3QudmFsdWUub3V0bGV0XTtpZihlKXt2YXIgcj1lLnVybC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoKX0pLmpvaW4oIi8iKSxpPXQudmFsdWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpO3Rocm93IG5ldyBFcnJvcigiVHdvIHNlZ21lbnRzIGNhbm5vdCBoYXZlIHRoZSBzYW1lIG91dGxldCBuYW1lOiAnIityKyInIGFuZCAnIitpKyInLiIpfW5bdC52YWx1ZS5vdXRsZXRdPXQudmFsdWV9KSxpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC52YWx1ZS5vdXRsZXQ9PT1obT8tMTplLnZhbHVlLm91dGxldD09PWhtPzE6dC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShlLnZhbHVlLm91dGxldCl9KSxpfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudD1mdW5jdGlvbih0LGUsbixyKXt0cnl7Zm9yKHZhciBpPWEodCksbz1pLm5leHQoKTshby5kb25lO289aS5uZXh0KCkpe3ZhciBzPW8udmFsdWU7dHJ5e3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKHMsZSxuLHIpfWNhdGNoKHQpe2lmKCEodCBpbnN0YW5jZW9mIE15KSl0aHJvdyB0fX19Y2F0Y2godCl7bD17ZXJyb3I6dH19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKHU9aS5yZXR1cm4pJiZ1LmNhbGwoaSl9ZmluYWxseXtpZihsKXRocm93IGwuZXJyb3J9fWlmKHRoaXMubm9MZWZ0b3ZlcnNJblVybChlLG4scikpcmV0dXJuW107dGhyb3cgbmV3IE15O3ZhciBsLHV9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyKXtpZih0LnJlZGlyZWN0VG8pdGhyb3cgbmV3IE15O2lmKCh0Lm91dGxldHx8aG0pIT09cil0aHJvdyBuZXcgTXk7dmFyIGksYT1bXSxzPVtdO2lmKCIqKiI9PT10LnBhdGgpe3ZhciBsPW4ubGVuZ3RoPjA/eG0obikucGFyYW1ldGVyczp7fTtpPW5ldyBmeShuLGwsT2JqZWN0LmZyZWV6ZShvKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxWeSh0KSxyLHQuY29tcG9uZW50LHQsUnkoZSksRHkoZSkrbi5sZW5ndGgsQnkodCkpfWVsc2V7dmFyIHU9ZnVuY3Rpb24odCxlLG4pe2lmKCIiPT09ZS5wYXRoKXtpZigiZnVsbCI9PT1lLnBhdGhNYXRjaCYmKHQuaGFzQ2hpbGRyZW4oKXx8bi5sZW5ndGg+MCkpdGhyb3cgbmV3IE15O3JldHVybntjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBhcmFtZXRlcnM6e319fXZhciByPShlLm1hdGNoZXJ8fGRtKShuLHQsZSk7aWYoIXIpdGhyb3cgbmV3IE15O3ZhciBpPXt9O0NtKHIucG9zUGFyYW1zLGZ1bmN0aW9uKHQsZSl7aVtlXT10LnBhdGh9KTt2YXIgYT1yLmNvbnN1bWVkLmxlbmd0aD4wP28oe30saSxyLmNvbnN1bWVkW3IuY29uc3VtZWQubGVuZ3RoLTFdLnBhcmFtZXRlcnMpOmk7cmV0dXJue2NvbnN1bWVkU2VnbWVudHM6ci5jb25zdW1lZCxsYXN0Q2hpbGQ6ci5jb25zdW1lZC5sZW5ndGgscGFyYW1ldGVyczphfX0oZSx0LG4pO2E9dS5jb25zdW1lZFNlZ21lbnRzLHM9bi5zbGljZSh1Lmxhc3RDaGlsZCksaT1uZXcgZnkoYSx1LnBhcmFtZXRlcnMsT2JqZWN0LmZyZWV6ZShvKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxWeSh0KSxyLHQuY29tcG9uZW50LHQsUnkoZSksRHkoZSkrYS5sZW5ndGgsQnkodCkpfXZhciBjPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkcmVuP3QuY2hpbGRyZW46dC5sb2FkQ2hpbGRyZW4/dC5fbG9hZGVkQ29uZmlnLnJvdXRlczpbXX0odCksaD1MeShlLGEscyxjKSxmPWguc2VnbWVudEdyb3VwLHA9aC5zbGljZWRTZWdtZW50cztpZigwPT09cC5sZW5ndGgmJmYuaGFzQ2hpbGRyZW4oKSl7dmFyIGQ9dGhpcy5wcm9jZXNzQ2hpbGRyZW4oYyxmKTtyZXR1cm5bbmV3IGF5KGksZCldfWlmKDA9PT1jLmxlbmd0aCYmMD09PXAubGVuZ3RoKXJldHVybltuZXcgYXkoaSxbXSldO3ZhciBtPXRoaXMucHJvY2Vzc1NlZ21lbnQoYyxmLHAsaG0pO3JldHVybltuZXcgYXkoaSxtKV19LHR9KCk7ZnVuY3Rpb24gUnkodCl7Zm9yKHZhciBlPXQ7ZS5fc291cmNlU2VnbWVudDspZT1lLl9zb3VyY2VTZWdtZW50O3JldHVybiBlfWZ1bmN0aW9uIER5KHQpe2Zvcih2YXIgZT10LG49ZS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtlLl9zb3VyY2VTZWdtZW50OyluKz0oZT1lLl9zb3VyY2VTZWdtZW50KS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtyZXR1cm4gbi0xfWZ1bmN0aW9uIEx5KHQsZSxuLHIpe2lmKG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBqeSh0LGUsbikmJkZ5KG4pIT09aG19KX0odCxuKSl7dmFyIGk9bmV3IEFtKGUsZnVuY3Rpb24odCxlLG4scil7dmFyIGksbyxzPXt9O3NbaG1dPXIsci5fc291cmNlU2VnbWVudD10LHIuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoO3RyeXtmb3IodmFyIGw9YShuKSx1PWwubmV4dCgpOyF1LmRvbmU7dT1sLm5leHQoKSl7dmFyIGM9dS52YWx1ZTtpZigiIj09PWMucGF0aCYmRnkoYykhPT1obSl7dmFyIGg9bmV3IEFtKFtdLHt9KTtoLl9zb3VyY2VTZWdtZW50PXQsaC5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgsc1tGeShjKV09aH19fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihvPWwucmV0dXJuKSYmby5jYWxsKGwpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gc30odCxlLHIsbmV3IEFtKG4sdC5jaGlsZHJlbikpKTtyZXR1cm4gaS5fc291cmNlU2VnbWVudD10LGkuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHtzZWdtZW50R3JvdXA6aSxzbGljZWRTZWdtZW50czpbXX19aWYoMD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gankodCxlLG4pfSl9KHQsbikpe3ZhciBzPW5ldyBBbSh0LnNlZ21lbnRzLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLHMsbD17fTt0cnl7Zm9yKHZhciB1PWEobiksYz11Lm5leHQoKTshYy5kb25lO2M9dS5uZXh0KCkpe3ZhciBoPWMudmFsdWU7aWYoankodCxlLGgpJiYhcltGeShoKV0pe3ZhciBmPW5ldyBBbShbXSx7fSk7Zi5fc291cmNlU2VnbWVudD10LGYuX3NlZ21lbnRJbmRleFNoaWZ0PXQuc2VnbWVudHMubGVuZ3RoLGxbRnkoaCldPWZ9fX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtjJiYhYy5kb25lJiYocz11LnJldHVybikmJnMuY2FsbCh1KX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIG8oe30scixsKX0odCxuLHIsdC5jaGlsZHJlbikpO3JldHVybiBzLl9zb3VyY2VTZWdtZW50PXQscy5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpzLHNsaWNlZFNlZ21lbnRzOm59fXZhciBsPW5ldyBBbSh0LnNlZ21lbnRzLHQuY2hpbGRyZW4pO3JldHVybiBsLl9zb3VyY2VTZWdtZW50PXQsbC5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpsLHNsaWNlZFNlZ21lbnRzOm59fWZ1bmN0aW9uIGp5KHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDA9PT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gRnkodCl7cmV0dXJuIHQub3V0bGV0fHxobX1mdW5jdGlvbiBWeSh0KXtyZXR1cm4gdC5kYXRhfHx7fX1mdW5jdGlvbiBCeSh0KXtyZXR1cm4gdC5yZXNvbHZlfHx7fX12YXIgenk9ZnVuY3Rpb24oKXt9LFV5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5zdG9yZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuc2hvdWxkQXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5yZXRyaWV2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuc2hvdWxkUmV1c2VSb3V0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJvdXRlQ29uZmlnPT09ZS5yb3V0ZUNvbmZpZ30sdH0oKSxIeT1uZXcgbXQoIlJPVVRFUyIpLHF5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLmxvYWRlcj10LHRoaXMuY29tcGlsZXI9ZSx0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXI9bix0aGlzLm9uTG9hZEVuZExpc3RlbmVyPXJ9cmV0dXJuIHQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihlKSx0aGlzLmxvYWRNb2R1bGVGYWN0b3J5KGUubG9hZENoaWxkcmVuKS5waXBlKHEoZnVuY3Rpb24ocil7bi5vbkxvYWRFbmRMaXN0ZW5lciYmbi5vbkxvYWRFbmRMaXN0ZW5lcihlKTt2YXIgaT1yLmNyZWF0ZSh0KTtyZXR1cm4gbmV3IG1tKHdtKGkuaW5qZWN0b3IuZ2V0KEh5KSkubWFwKF9tKSxpKX0pKX0sdC5wcm90b3R5cGUubG9hZE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/Syh0aGlzLmxvYWRlci5sb2FkKHQpKTpTbSh0KCkpLnBpcGUoWihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIExlP2RsKHQpOksoZS5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCkpfSkpfSx0fSgpLEd5PWZ1bmN0aW9uKCl7fSxXeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZFByb2Nlc3NVcmw9ZnVuY3Rpb24odCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmV4dHJhY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gUXkodCl7dGhyb3cgdH1mdW5jdGlvbiBLeSh0KXtyZXR1cm4gZGwobnVsbCl9dmFyIFp5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMpe3ZhciBsPXRoaXM7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMudXJsU2VyaWFsaXplcj1lLHRoaXMucm9vdENvbnRleHRzPW4sdGhpcy5sb2NhdGlvbj1yLHRoaXMuY29uZmlnPXMsdGhpcy5uYXZpZ2F0aW9ucz1uZXcga2QobnVsbCksdGhpcy5uYXZpZ2F0aW9uSWQ9MCx0aGlzLmV2ZW50cz1uZXcgaXQsdGhpcy5lcnJvckhhbmRsZXI9UXksdGhpcy5uYXZpZ2F0ZWQ9ITEsdGhpcy5sYXN0U3VjY2Vzc2Z1bElkPS0xLHRoaXMuaG9va3M9e2JlZm9yZVByZWFjdGl2YXRpb246S3ksYWZ0ZXJQcmVhY3RpdmF0aW9uOkt5fSx0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9bmV3IFd5LHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5PW5ldyBVeSx0aGlzLm9uU2FtZVVybE5hdmlnYXRpb249Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PSJlbXB0eU9ubHkiLHRoaXMubmdNb2R1bGU9aS5nZXQoRGUpLHRoaXMucmVzZXRDb25maWcocyksdGhpcy5jdXJyZW50VXJsVHJlZT1uZXcgVG0obmV3IEFtKFtdLHt9KSx7fSxudWxsKSx0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmNvbmZpZ0xvYWRlcj1uZXcgcXkobyxhLGZ1bmN0aW9uKHQpe3JldHVybiBsLnRyaWdnZXJFdmVudChuZXcgaW0odCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gbC50cmlnZ2VyRXZlbnQobmV3IG9tKHQpKX0pLHRoaXMucm91dGVyU3RhdGU9dXkodGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLnJvb3RDb21wb25lbnRUeXBlKSx0aGlzLnByb2Nlc3NOYXZpZ2F0aW9ucygpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldFJvb3RDb21wb25lbnRUeXBlPWZ1bmN0aW9uKHQpe3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLnJvdXRlclN0YXRlLnJvb3QuY29tcG9uZW50PXRoaXMucm9vdENvbXBvbmVudFR5cGV9LHQucHJvdG90eXBlLmluaXRpYWxOYXZpZ2F0aW9uPWZ1bmN0aW9uKCl7dGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSwwPT09dGhpcy5uYXZpZ2F0aW9uSWQmJnRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmxvY2F0aW9uLnBhdGgoITApLHtyZXBsYWNlVXJsOiEwfSl9LHQucHJvdG90eXBlLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbnx8KHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249dGhpcy5sb2NhdGlvbi5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dmFyIG49dC51cmxTZXJpYWxpemVyLnBhcnNlKGUudXJsKSxyPSJwb3BzdGF0ZSI9PT1lLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSIsaT1lLnN0YXRlJiZlLnN0YXRlLm5hdmlnYXRpb25JZD97bmF2aWdhdGlvbklkOmUuc3RhdGUubmF2aWdhdGlvbklkfTpudWxsO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjaGVkdWxlTmF2aWdhdGlvbihuLHIsaSx7cmVwbGFjZVVybDohMH0pfSwwKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuZXZlbnRzLm5leHQodCl9LHQucHJvdG90eXBlLnJlc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3ltKHQpLHRoaXMuY29uZmlnPXQubWFwKF9tKSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTF9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249bnVsbCl9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5yZWxhdGl2ZVRvLHI9ZS5xdWVyeVBhcmFtcyxpPWUuZnJhZ21lbnQsYT1lLnByZXNlcnZlUXVlcnlQYXJhbXMscz1lLnF1ZXJ5UGFyYW1zSGFuZGxpbmcsdT1lLnByZXNlcnZlRnJhZ21lbnQ7bm4oKSYmYSYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKTt2YXIgYz1ufHx0aGlzLnJvdXRlclN0YXRlLnJvb3QsaD11P3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6aSxmPW51bGw7aWYocylzd2l0Y2gocyl7Y2FzZSJtZXJnZSI6Zj1vKHt9LHRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMscik7YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6Zj10aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zO2JyZWFrO2RlZmF1bHQ6Zj1yfHxudWxsfWVsc2UgZj1hP3RoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXM6cnx8bnVsbDtyZXR1cm4gbnVsbCE9PWYmJihmPXRoaXMucmVtb3ZlRW1wdHlQcm9wcyhmKSksZnVuY3Rpb24odCxlLG4scixpKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIF95KGUucm9vdCxlLnJvb3QsZSxyLGkpO3ZhciBvPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdFswXSYmMT09PXQubGVuZ3RoJiYiLyI9PT10WzBdKXJldHVybiBuZXcgYnkoITAsMCx0KTt2YXIgZT0wLG49ITEscj10LnJlZHVjZShmdW5jdGlvbih0LHIsaSl7aWYoIm9iamVjdCI9PXR5cGVvZiByJiZudWxsIT1yKXtpZihyLm91dGxldHMpe3ZhciBvPXt9O3JldHVybiBDbShyLm91dGxldHMsZnVuY3Rpb24odCxlKXtvW2VdPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KCIvIik6dH0pLGwodCxbe291dGxldHM6b31dKX1pZihyLnNlZ21lbnRQYXRoKXJldHVybiBsKHQsW3Iuc2VnbWVudFBhdGhdKX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHI/bCh0LFtyXSk6MD09PWk/KHIuc3BsaXQoIi8iKS5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7MD09aSYmIi4iPT09cnx8KDA9PWkmJiIiPT09cj9uPSEwOiIuLiI9PT1yP2UrKzoiIiE9ciYmdC5wdXNoKHIpKX0pLHQpOmwodCxbcl0pfSxbXSk7cmV0dXJuIG5ldyBieShuLGUscil9KG4pO2lmKG8udG9Sb290KCkpcmV0dXJuIF95KGUucm9vdCxuZXcgQW0oW10se30pLGUscixpKTt2YXIgYT1mdW5jdGlvbih0LG4scil7aWYodC5pc0Fic29sdXRlKXJldHVybiBuZXcgd3koZS5yb290LCEwLDApO2lmKC0xPT09ci5zbmFwc2hvdC5fbGFzdFBhdGhJbmRleClyZXR1cm4gbmV3IHd5KHIuc25hcHNob3QuX3VybFNlZ21lbnQsITAsMCk7dmFyIGk9dnkodC5jb21tYW5kc1swXSk/MDoxO3JldHVybiBmdW5jdGlvbihlLG4sbyl7Zm9yKHZhciBhPXIuc25hcHNob3QuX3VybFNlZ21lbnQscz1yLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4K2ksbD10Lm51bWJlck9mRG91YmxlRG90cztsPnM7KXtpZihsLT1zLCEoYT1hLnBhcmVudCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG51bWJlciBvZiAnLi4vJyIpO3M9YS5zZWdtZW50cy5sZW5ndGh9cmV0dXJuIG5ldyB3eShhLCExLHMtbCl9KCl9KG8sMCx0KSxzPWEucHJvY2Vzc0NoaWxkcmVuP0V5KGEuc2VnbWVudEdyb3VwLGEuaW5kZXgsby5jb21tYW5kcyk6Q3koYS5zZWdtZW50R3JvdXAsYS5pbmRleCxvLmNvbW1hbmRzKTtyZXR1cm4gX3koYS5zZWdtZW50R3JvdXAscyxlLHIsaSl9KGMsdGhpcy5jdXJyZW50VXJsVHJlZSx0LGYsaCl9LHQucHJvdG90eXBlLm5hdmlnYXRlQnlVcmw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSk7dmFyIG49dCBpbnN0YW5jZW9mIFRtP3Q6dGhpcy5wYXJzZVVybCh0KSxyPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShuLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKHIsImltcGVyYXRpdmUiLG51bGwsZSl9LHQucHJvdG90eXBlLm5hdmlnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZihudWxsPT1uKXRocm93IG5ldyBFcnJvcigiVGhlIHJlcXVlc3RlZCBwYXRoIGNvbnRhaW5zICIrbisiIHNlZ21lbnQgYXQgaW5kZXggIitlKX19KHQpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUodCxlKSxlKX0sdC5wcm90b3R5cGUuc2VyaWFsaXplVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHQpfSx0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHQpfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBUbSlyZXR1cm4ga20odGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KTtyZXR1cm4ga20odGhpcy5jdXJyZW50VXJsVHJlZSxuLGUpfSx0LnByb3RvdHlwZS5yZW1vdmVFbXB0eVByb3BzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgcj10W25dO3JldHVybiBudWxsIT09ciYmdm9pZCAwIT09ciYmKGVbbl09ciksZX0se30pfSx0LnByb3RvdHlwZS5wcm9jZXNzTmF2aWdhdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubmF2aWdhdGlvbnMucGlwZShBZChmdW5jdGlvbihlKXtyZXR1cm4gZT8odC5leGVjdXRlU2NoZWR1bGVkTmF2aWdhdGlvbihlKSxlLnByb21pc2UuY2F0Y2goZnVuY3Rpb24oKXt9KSk6ZGwobnVsbCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTmF2aWdhdGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLm5hdmlnYXRpb25zLnZhbHVlO2lmKGkmJiJpbXBlcmF0aXZlIiE9PWUmJiJpbXBlcmF0aXZlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKGkmJiJoYXNoY2hhbmdlIj09ZSYmInBvcHN0YXRlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2lmKGkmJiJwb3BzdGF0ZSI9PWUmJiJoYXNoY2hhbmdlIj09PWkuc291cmNlJiZpLnJhd1VybC50b1N0cmluZygpPT09dC50b1N0cmluZygpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO3ZhciBvPW51bGwsYT1udWxsLHM9bmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtvPXQsYT1lfSksbD0rK3RoaXMubmF2aWdhdGlvbklkO3JldHVybiB0aGlzLm5hdmlnYXRpb25zLm5leHQoe2lkOmwsc291cmNlOmUsc3RhdGU6bixyYXdVcmw6dCxleHRyYXM6cixyZXNvbHZlOm8scmVqZWN0OmEscHJvbWlzZTpzfSkscy5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KX0sdC5wcm90b3R5cGUuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQuaWQscj10LnJhd1VybCxpPXQuZXh0cmFzLG89dC5yZXNvbHZlLGE9dC5yZWplY3Qscz10LnNvdXJjZSxsPXQuc3RhdGUsdT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChyKSxjPSF0aGlzLm5hdmlnYXRlZHx8dS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpOygicmVsb2FkIj09PXRoaXMub25TYW1lVXJsTmF2aWdhdGlvbnx8YykmJnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKHIpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBaZChuLHRoaXMuc2VyaWFsaXplVXJsKHUpLHMsbCkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUodSxyLCEhaS5za2lwTG9jYXRpb25DaGFuZ2UsISFpLnJlcGxhY2VVcmwsbixudWxsKX0pLnRoZW4obyxhKSk6YyYmdGhpcy5yYXdVcmxUcmVlJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybCh0aGlzLnJhd1VybFRyZWUpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBaZChuLHRoaXMuc2VyaWFsaXplVXJsKHUpLHMsbCkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUodSxyLCExLCExLG4sdXkodSxlLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdCl9KS50aGVuKG8sYSkpOih0aGlzLnJhd1VybFRyZWU9cixvKG51bGwpKX0sdC5wcm90b3R5cGUucnVuTmF2aWdhdGU9ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBzPXRoaXM7cmV0dXJuIGkhPT10aGlzLm5hdmlnYXRpb25JZD8odGhpcy5ldmVudHMubmV4dChuZXcgWGQoaSx0aGlzLnNlcmlhbGl6ZVVybCh0KSwiTmF2aWdhdGlvbiBJRCAiK2krIiBpcyBub3QgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBpZCAiK3RoaXMubmF2aWdhdGlvbklkKSksUHJvbWlzZS5yZXNvbHZlKCExKSk6bmV3IFByb21pc2UoZnVuY3Rpb24obCx1KXt2YXIgYyxoPShvP2RsKHthcHBsaWVkVXJsOnQsc25hcHNob3Q6b30pOm5ldyAkbShzLm5nTW9kdWxlLmluamVjdG9yLHMuY29uZmlnTG9hZGVyLHMudXJsU2VyaWFsaXplcix0LHMuY29uZmlnKS5hcHBseSgpLnBpcGUoWihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9ImVtcHR5T25seSIpLG5ldyBOeSh0LGUsbixyLGkpLnJlY29nbml6ZSgpfShzLnJvb3RDb21wb25lbnRUeXBlLHMuY29uZmlnLGUscy5zZXJpYWxpemVVcmwoZSkscy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KS5waXBlKHEoZnVuY3Rpb24obil7cmV0dXJuIHMuZXZlbnRzLm5leHQobmV3IEpkKGkscy5zZXJpYWxpemVVcmwodCkscy5zZXJpYWxpemVVcmwoZSksbikpLHthcHBsaWVkVXJsOmUsc25hcHNob3Q6bn19KSl9KSkpLnBpcGUoWihmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0P2RsKHQpOnMuaG9va3MuYmVmb3JlUHJlYWN0aXZhdGlvbih0LnNuYXBzaG90KS5waXBlKHEoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKS5waXBlKHEoZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LmFwcGxpZWRVcmwsbj10LnNuYXBzaG90O3JldHVybihjPW5ldyBJeShuLHMucm91dGVyU3RhdGUuc25hcHNob3Qscy5uZ01vZHVsZS5pbmplY3RvcixmdW5jdGlvbih0KXtyZXR1cm4gcy50cmlnZ2VyRXZlbnQodCl9KSkuaW5pdGlhbGl6ZShzLnJvb3RDb250ZXh0cykse2FwcGxpZWRVcmw6ZSxzbmFwc2hvdDpufX0pKS5waXBlKFooZnVuY3Rpb24oZSl7aWYoImJvb2xlYW4iPT10eXBlb2YgZXx8cy5uYXZpZ2F0aW9uSWQhPT1pKXJldHVybiBkbCghMSk7dmFyIG49ZS5hcHBsaWVkVXJsLHI9ZS5zbmFwc2hvdDtyZXR1cm4gcy50cmlnZ2VyRXZlbnQobmV3IHRtKGkscy5zZXJpYWxpemVVcmwodCkscy5zZXJpYWxpemVVcmwobikscikpLGMuY2hlY2tHdWFyZHMoKS5waXBlKHEoZnVuY3Rpb24oZSl7cmV0dXJuIHMudHJpZ2dlckV2ZW50KG5ldyBlbShpLHMuc2VyaWFsaXplVXJsKHQpLHMuc2VyaWFsaXplVXJsKG4pLHIsZSkpLHthcHBsaWVkVXJsOm4sc25hcHNob3Q6cixzaG91bGRBY3RpdmF0ZTplfX0pKX0pKS5waXBlKFooZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZXx8cy5uYXZpZ2F0aW9uSWQhPT1pP2RsKCExKTplLnNob3VsZEFjdGl2YXRlJiZjLmlzQWN0aXZhdGluZygpPyhzLnRyaWdnZXJFdmVudChuZXcgbm0oaSxzLnNlcmlhbGl6ZVVybCh0KSxzLnNlcmlhbGl6ZVVybChlLmFwcGxpZWRVcmwpLGUuc25hcHNob3QpKSxjLnJlc29sdmVEYXRhKHMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSkucGlwZShxKGZ1bmN0aW9uKCl7cmV0dXJuIHMudHJpZ2dlckV2ZW50KG5ldyBybShpLHMuc2VyaWFsaXplVXJsKHQpLHMuc2VyaWFsaXplVXJsKGUuYXBwbGllZFVybCksZS5zbmFwc2hvdCkpLGV9KSkpOmRsKGUpfSkpLnBpcGUoWihmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fHxzLm5hdmlnYXRpb25JZCE9PWk/ZGwoITEpOnMuaG9va3MuYWZ0ZXJQcmVhY3RpdmF0aW9uKHQuc25hcHNob3QpLnBpcGUocShmdW5jdGlvbigpe3JldHVybiB0fSkpfSkpLnBpcGUocShmdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PXR5cGVvZiB0fHxzLm5hdmlnYXRpb25JZCE9PWkpcmV0dXJuITE7dmFyIGUsbixyLG89dC5hcHBsaWVkVXJsLGw9dC5zaG91bGRBY3RpdmF0ZTtyZXR1cm4gbD97YXBwbGllZFVybDpvLHN0YXRlOihyPWZ1bmN0aW9uIHQoZSxuLHIpe2lmKHImJmUuc2hvdWxkUmV1c2VSb3V0ZShuLnZhbHVlLHIudmFsdWUuc25hcHNob3QpKXsodT1yLnZhbHVlKS5fZnV0dXJlU25hcHNob3Q9bi52YWx1ZTt2YXIgaT1mdW5jdGlvbihlLG4scil7cmV0dXJuIG4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG4pe3RyeXtmb3IodmFyIGk9YShyLmNoaWxkcmVuKSxvPWkubmV4dCgpOyFvLmRvbmU7bz1pLm5leHQoKSl7dmFyIHM9by52YWx1ZTtpZihlLnNob3VsZFJldXNlUm91dGUocy52YWx1ZS5zbmFwc2hvdCxuLnZhbHVlKSlyZXR1cm4gdChlLG4scyl9fWNhdGNoKHQpe2w9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e28mJiFvLmRvbmUmJih1PWkucmV0dXJuKSYmdS5jYWxsKGkpfWZpbmFsbHl7aWYobCl0aHJvdyBsLmVycm9yfX1yZXR1cm4gdChlLG4pO3ZhciBsLHV9KX0oZSxuLHIpO3JldHVybiBuZXcgYXkodSxpKX12YXIgbz1lLnJldHJpZXZlKG4udmFsdWUpO2lmKG8pe3ZhciBzPW8ucm91dGU7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZihlLnZhbHVlLnJvdXRlQ29uZmlnIT09bi52YWx1ZS5yb3V0ZUNvbmZpZyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGNyZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCByb3V0ZSIpO2lmKGUuY2hpbGRyZW4ubGVuZ3RoIT09bi5jaGlsZHJlbi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhdHRhY2ggQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB3aXRoIGEgZGlmZmVyZW50IG51bWJlciBvZiBjaGlsZHJlbiIpO24udmFsdWUuX2Z1dHVyZVNuYXBzaG90PWUudmFsdWU7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDsrK3IpdChlLmNoaWxkcmVuW3JdLG4uY2hpbGRyZW5bcl0pfShuLHMpLHN9dmFyIGwsdT1uZXcgY3kobmV3IGtkKChsPW4udmFsdWUpLnVybCksbmV3IGtkKGwucGFyYW1zKSxuZXcga2QobC5xdWVyeVBhcmFtcyksbmV3IGtkKGwuZnJhZ21lbnQpLG5ldyBrZChsLmRhdGEpLGwub3V0bGV0LGwuY29tcG9uZW50LGwpO3JldHVybiBpPW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9KSxuZXcgYXkodSxpKX0ocy5yb3V0ZVJldXNlU3RyYXRlZ3ksKGU9dC5zbmFwc2hvdCkuX3Jvb3QsKG49cy5yb3V0ZXJTdGF0ZSk/bi5fcm9vdDp2b2lkIDApLG5ldyBseShyLGUpKSxzaG91bGRBY3RpdmF0ZTpsfTp7YXBwbGllZFVybDpvLHN0YXRlOm51bGwsc2hvdWxkQWN0aXZhdGU6bH19KSk7cy5hY3RpdmF0ZVJvdXRlcyhoLHMucm91dGVyU3RhdGUscy5jdXJyZW50VXJsVHJlZSxpLHQsZSxuLHIsbCx1KX0pfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsbCx1KXt2YXIgYyxoPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIiE9dHlwZW9mIHQmJnQuc2hvdWxkQWN0aXZhdGUmJnI9PT1oLm5hdmlnYXRpb25JZCYmdC5zdGF0ZSl7dmFyIG49dC5zdGF0ZTtpZihoLmN1cnJlbnRVcmxUcmVlPXQuYXBwbGllZFVybCxoLnJhd1VybFRyZWU9aC51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGguY3VycmVudFVybFRyZWUsbyksaC5yb3V0ZXJTdGF0ZT1uLCFhKXt2YXIgaT1oLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGgucmF3VXJsVHJlZSk7aC5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhpKXx8cz9oLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShpLCIiLHtuYXZpZ2F0aW9uSWQ6cn0pOmgubG9jYXRpb24uZ28oaSwiIix7bmF2aWdhdGlvbklkOnJ9KX1uZXcgWXkoaC5yb3V0ZVJldXNlU3RyYXRlZ3ksbixlLGZ1bmN0aW9uKHQpe3JldHVybiBoLnRyaWdnZXJFdmVudCh0KX0pLmFjdGl2YXRlKGgucm9vdENvbnRleHRzKSxjPSEwfWVsc2UgYz0hMX0pLnRoZW4oZnVuY3Rpb24oKXtjPyhoLm5hdmlnYXRlZD0hMCxoLmxhc3RTdWNjZXNzZnVsSWQ9cixoLmV2ZW50cy5uZXh0KG5ldyBZZChyLGguc2VyaWFsaXplVXJsKGkpLGguc2VyaWFsaXplVXJsKGguY3VycmVudFVybFRyZWUpKSksbCghMCkpOihoLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpLGguZXZlbnRzLm5leHQobmV3IFhkKHIsaC5zZXJpYWxpemVVcmwoaSksIiIpKSxsKCExKSl9LGZ1bmN0aW9uKHQpe2lmKChhPXQpJiZhLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKWgubmF2aWdhdGVkPSEwLGgucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksaC5ldmVudHMubmV4dChuZXcgWGQocixoLnNlcmlhbGl6ZVVybChpKSx0Lm1lc3NhZ2UpKSxsKCExKTtlbHNle2gucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksaC5ldmVudHMubmV4dChuZXcgJGQocixoLnNlcmlhbGl6ZVVybChpKSx0KSk7dHJ5e2woaC5lcnJvckhhbmRsZXIodCkpfWNhdGNoKHQpe3UodCl9fXZhciBhfSl9LHQucHJvdG90eXBlLnJlc2V0U3RhdGVBbmRVcmw9ZnVuY3Rpb24odCxlLG4pe3RoaXMucm91dGVyU3RhdGU9dCx0aGlzLmN1cnJlbnRVcmxUcmVlPWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLG4pLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl9LHQucHJvdG90eXBlLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZT1mdW5jdGlvbigpe3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5yYXdVcmxUcmVlKSwiIix7bmF2aWdhdGlvbklkOnRoaXMubGFzdFN1Y2Nlc3NmdWxJZH0pfSx0fSgpLFl5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT10LHRoaXMuZnV0dXJlU3RhdGU9ZSx0aGlzLmN1cnJTdGF0ZT1uLHRoaXMuZm9yd2FyZEV2ZW50PXJ9cmV0dXJuIHQucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3Qsbj10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KSx5eSh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPXN5KGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLm91dGxldDtyLmRlYWN0aXZhdGVSb3V0ZXModCxpW2VdLG4pLGRlbGV0ZSBpW2VdfSksQ20oaSxmdW5jdGlvbih0LGUpe3IuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuKX0pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLGk9ZT9lLnZhbHVlOm51bGw7aWYocj09PWkpaWYoci5jb21wb25lbnQpe3ZhciBvPW4uZ2V0Q29udGV4dChyLm91dGxldCk7byYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgaSYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLG4pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaCh0LnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKHQsZSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQodCxlKX0sdC5wcm90b3R5cGUuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKG4mJm4ub3V0bGV0KXt2YXIgcj1uLm91dGxldC5kZXRhY2goKSxpPW4uY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHQudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjpyLHJvdXRlOnQsY29udGV4dHM6aX0pfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYocil7dmFyIGk9c3kodCksbz10LnZhbHVlLmNvbXBvbmVudD9yLmNoaWxkcmVuOmU7Q20oaSxmdW5jdGlvbih0LGUpe3JldHVybiBuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbyl9KSxyLm91dGxldCYmKHIub3V0bGV0LmRlYWN0aXZhdGUoKSxyLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9c3koZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuYWN0aXZhdGVSb3V0ZXModCxpW3QudmFsdWUub3V0bGV0XSxuKSxyLmZvcndhcmRFdmVudChuZXcgdW0odC52YWx1ZS5zbmFwc2hvdCkpfSksdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBzbSh0LnZhbHVlLnNuYXBzaG90KSl9LHQucHJvdG90eXBlLmFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLGk9ZT9lLnZhbHVlOm51bGw7aWYoeXkocikscj09PWkpaWYoci5jb21wb25lbnQpe3ZhciBvPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxuKTtlbHNlIGlmKHIuY29tcG9uZW50KWlmKG89bi5nZXRPckNyZWF0ZUNvbnRleHQoci5vdXRsZXQpLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZEF0dGFjaChyLnNuYXBzaG90KSl7dmFyIGE9dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0cmlldmUoci5zbmFwc2hvdCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoci5zbmFwc2hvdCxudWxsKSxvLmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChhLmNvbnRleHRzKSxvLmF0dGFjaFJlZj1hLmNvbXBvbmVudFJlZixvLnJvdXRlPWEucm91dGUudmFsdWUsby5vdXRsZXQmJm8ub3V0bGV0LmF0dGFjaChhLmNvbXBvbmVudFJlZixhLnJvdXRlLnZhbHVlKSxYeShhLnJvdXRlKX1lbHNle3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1yLnNuYXBzaG90LnBhcmVudDtlO2U9ZS5wYXJlbnQpe3ZhciBuPWUucm91dGVDb25maWc7aWYobiYmbi5fbG9hZGVkQ29uZmlnKXJldHVybiBuLl9sb2FkZWRDb25maWc7aWYobiYmbi5jb21wb25lbnQpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9KCksbD1zP3MubW9kdWxlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjpudWxsO28ucm91dGU9cixvLnJlc29sdmVyPWwsby5vdXRsZXQmJm8ub3V0bGV0LmFjdGl2YXRlV2l0aChyLGwpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LG51bGwsby5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLG4pfSx0fSgpO2Z1bmN0aW9uIFh5KHQpe3l5KHQudmFsdWUpLHQuY2hpbGRyZW4uZm9yRWFjaChYeSl9dmFyICR5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLnJvdXRlcj10LHRoaXMucm91dGU9ZSx0aGlzLmxvY2F0aW9uU3RyYXRlZ3k9bix0aGlzLmNvbW1hbmRzPVtdLHRoaXMuc3Vic2NyaXB0aW9uPXQuZXZlbnRzLnN1YnNjcmliZShmdW5jdGlvbih0KXt0IGluc3RhbmNlb2YgWWQmJnIudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVyTGluayIse3NldDpmdW5jdGlvbih0KXt0aGlzLmNvbW1hbmRzPW51bGwhPXQ/QXJyYXkuaXNBcnJheSh0KT90Olt0XTpbXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByZXNlcnZlUXVlcnlQYXJhbXMiLHtzZXQ6ZnVuY3Rpb24odCl7bm4oKSYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKSx0aGlzLnByZXNlcnZlPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy51cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbih0LGUsbixyKXtpZigwIT09dHx8ZXx8bnx8cilyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldClyZXR1cm4hMDt2YXIgaT17c2tpcExvY2F0aW9uQ2hhbmdlOkp5KHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlKSxyZXBsYWNlVXJsOkp5KHRoaXMucmVwbGFjZVVybCl9O3JldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMudXJsVHJlZSxpKSwhMX0sdC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZj1mdW5jdGlvbigpe3RoaXMuaHJlZj10aGlzLmxvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmxUcmVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5jb21tYW5kcyx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxwcmVzZXJ2ZVF1ZXJ5UGFyYW1zOkp5KHRoaXMucHJlc2VydmUpLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6dGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nLHByZXNlcnZlRnJhZ21lbnQ6SnkodGhpcy5wcmVzZXJ2ZUZyYWdtZW50KX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gSnkodCl7cmV0dXJuIiI9PT10fHwhIXR9dmFyIHRnPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vdXRsZXQ9bnVsbCx0aGlzLnJvdXRlPW51bGwsdGhpcy5yZXNvbHZlcj1udWxsLHRoaXMuY2hpbGRyZW49bmV3IGVnLHRoaXMuYXR0YWNoUmVmPW51bGx9fSgpLGVnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUub25DaGlsZE91dGxldENyZWF0ZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldE9yQ3JlYXRlQ29udGV4dCh0KTtuLm91dGxldD1lLHRoaXMuY29udGV4dHMuc2V0KHQsbil9LHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO2UmJihlLm91dGxldD1udWxsKX0sdC5wcm90b3R5cGUub25PdXRsZXREZWFjdGl2YXRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCx0fSx0LnByb3RvdHlwZS5vbk91dGxldFJlQXR0YWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0cz10fSx0LnByb3RvdHlwZS5nZXRPckNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO3JldHVybiBlfHwoZT1uZXcgdGcsdGhpcy5jb250ZXh0cy5zZXQodCxlKSksZX0sdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQodCl8fG51bGx9LHR9KCksbmc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5wYXJlbnRDb250ZXh0cz10LHRoaXMubG9jYXRpb249ZSx0aGlzLnJlc29sdmVyPW4sdGhpcy5jaGFuZ2VEZXRlY3Rvcj1pLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyB6ZSx0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IHplLHRoaXMubmFtZT1yfHxobSx0Lm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKX0sdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dCh0aGlzLm5hbWUpO3QmJnQucm91dGUmJih0LmF0dGFjaFJlZj90aGlzLmF0dGFjaCh0LmF0dGFjaFJlZix0LnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aCh0LnJvdXRlLHQucmVzb2x2ZXJ8fG51bGwpKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBY3RpdmF0ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2V9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZSIse2dldDpmdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgRXJyb3IoIk91dGxldCBpcyBub3QgYWN0aXZhdGVkIik7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkUm91dGVEYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTt0aGlzLmxvY2F0aW9uLmRldGFjaCgpO3ZhciB0PXRoaXMuYWN0aXZhdGVkO3JldHVybiB0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdH0sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQsZSl7dGhpcy5hY3RpdmF0ZWQ9dCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1lLHRoaXMubG9jYXRpb24uaW5zZXJ0KHQuaG9zdFZpZXcpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmF0ZWQpe3ZhciB0PXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZWFjdGl2YXRlRXZlbnRzLmVtaXQodCl9fSx0LnByb3RvdHlwZS5hY3RpdmF0ZVdpdGg9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzQWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjdGl2YXRlIGFuIGFscmVhZHkgYWN0aXZhdGVkIG91dGxldCIpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPXQ7dmFyIG49KGU9ZXx8dGhpcy5yZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodC5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWcuY29tcG9uZW50KSxyPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4saT1uZXcgcmcodCxyLHRoaXMubG9jYXRpb24uaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPXRoaXMubG9jYXRpb24uY3JlYXRlQ29tcG9uZW50KG4sdGhpcy5sb2NhdGlvbi5sZW5ndGgsaSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfSx0fSgpLHJnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5yb3V0ZT10LHRoaXMuY2hpbGRDb250ZXh0cz1lLHRoaXMucGFyZW50PW59cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09Y3k/dGhpcy5yb3V0ZTp0PT09ZWc/dGhpcy5jaGlsZENvbnRleHRzOnRoaXMucGFyZW50LmdldCh0LGUpfSx0fSgpLGlnPWZ1bmN0aW9uKCl7fSxvZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSgpLnBpcGUoRmQoZnVuY3Rpb24oKXtyZXR1cm4gZGwobnVsbCl9KSl9LHR9KCksYWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wcmVsb2FkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRsKG51bGwpfSx0fSgpLHNnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMucm91dGVyPXQsdGhpcy5pbmplY3Rvcj1yLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWksdGhpcy5sb2FkZXI9bmV3IHF5KGUsbixmdW5jdGlvbihlKXtyZXR1cm4gdC50cmlnZ2VyRXZlbnQobmV3IGltKGUpKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHQudHJpZ2dlckV2ZW50KG5ldyBvbShlKSl9KX1yZXR1cm4gdC5wcm90b3R5cGUuc2V0VXBQcmVsb2FkaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJvdXRlci5ldmVudHMucGlwZShZbChmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFlkfSksQWQoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmVsb2FkKCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluamVjdG9yLmdldChEZSk7cmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyh0LHRoaXMucm91dGVyLmNvbmZpZyl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUucHJvY2Vzc1JvdXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT1bXTt0cnl7Zm9yKHZhciBvPWEoZSkscz1vLm5leHQoKTshcy5kb25lO3M9by5uZXh0KCkpe3ZhciBsPXMudmFsdWU7aWYobC5sb2FkQ2hpbGRyZW4mJiFsLmNhbkxvYWQmJmwuX2xvYWRlZENvbmZpZyl7dmFyIHU9bC5fbG9hZGVkQ29uZmlnO2kucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXModS5tb2R1bGUsdS5yb3V0ZXMpKX1lbHNlIGwubG9hZENoaWxkcmVuJiYhbC5jYW5Mb2FkP2kucHVzaCh0aGlzLnByZWxvYWRDb25maWcodCxsKSk6bC5jaGlsZHJlbiYmaS5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyh0LGwuY2hpbGRyZW4pKX19Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKHI9by5yZXR1cm4pJiZyLmNhbGwobyl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBLKGkpLnBpcGUoSigpLHEoZnVuY3Rpb24odCl7fSkpfSx0LnByb3RvdHlwZS5wcmVsb2FkQ29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChlLGZ1bmN0aW9uKCl7cmV0dXJuIG4ubG9hZGVyLmxvYWQodC5pbmplY3RvcixlKS5waXBlKFooZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LG4ucHJvY2Vzc1JvdXRlcyh0Lm1vZHVsZSx0LnJvdXRlcyl9KSl9KX0sdH0oKSxsZz1uZXcgbXQoIlJPVVRFUl9DT05GSUdVUkFUSU9OIiksdWc9bmV3IG10KCJST1VURVJfRk9SUk9PVF9HVUFSRCIpLGNnPVtrcyx7cHJvdmlkZTpNbSx1c2VDbGFzczpObX0se3Byb3ZpZGU6WnksdXNlRmFjdG9yeTp5ZyxkZXBzOlt1bixNbSxlZyxrcyxWdCxtbixFZSxIeSxsZyxbR3ksbmV3IE10XSxbenksbmV3IE10XV19LGVnLHtwcm92aWRlOmN5LHVzZUZhY3Rvcnk6Z2csZGVwczpbWnldfSx7cHJvdmlkZTptbix1c2VDbGFzczpfbn0sc2csYWcsb2cse3Byb3ZpZGU6bGcsdXNlVmFsdWU6e2VuYWJsZVRyYWNpbmc6ITF9fV07ZnVuY3Rpb24gaGcoKXtyZXR1cm4gbmV3IHJuKCJSb3V0ZXIiLFp5KX12YXIgZmc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7fXJldHVybiB0LmZvclJvb3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W2NnLG1nKGUpLHtwcm92aWRlOnVnLHVzZUZhY3Rvcnk6ZGcsZGVwczpbW1p5LG5ldyBNdCxuZXcgUnRdXX0se3Byb3ZpZGU6bGcsdXNlVmFsdWU6bnx8e319LHtwcm92aWRlOkVzLHVzZUZhY3Rvcnk6cGcsZGVwczpbeHMsW25ldyBJdChTcyksbmV3IE10XSxsZ119LHtwcm92aWRlOmlnLHVzZUV4aXN0aW5nOm4mJm4ucHJlbG9hZGluZ1N0cmF0ZWd5P24ucHJlbG9hZGluZ1N0cmF0ZWd5OmFnfSx7cHJvdmlkZTpybixtdWx0aTohMCx1c2VGYWN0b3J5OmhnfSxbdmcse3Byb3ZpZGU6ZGUsbXVsdGk6ITAsdXNlRmFjdG9yeTpfZyxkZXBzOlt2Z119LHtwcm92aWRlOndnLHVzZUZhY3Rvcnk6YmcsZGVwczpbdmddfSx7cHJvdmlkZTp3ZSxtdWx0aTohMCx1c2VFeGlzdGluZzp3Z31dXX19LHQuZm9yQ2hpbGQ9ZnVuY3Rpb24oZSl7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOlttZyhlKV19fSx0fSgpO2Z1bmN0aW9uIHBnKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLG4udXNlSGFzaD9uZXcgQXModCxlKTpuZXcgUHModCxlKX1mdW5jdGlvbiBkZyh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiUm91dGVyTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIExhenkgbG9hZGVkIG1vZHVsZXMgc2hvdWxkIHVzZSBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoKSBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBtZyh0KXtyZXR1cm5be3Byb3ZpZGU6dnQsbXVsdGk6ITAsdXNlVmFsdWU6dH0se3Byb3ZpZGU6SHksbXVsdGk6ITAsdXNlVmFsdWU6dH1dfWZ1bmN0aW9uIHlnKHQsZSxuLHIsaSxvLGEscyxsLHUsYyl7dm9pZCAwPT09bCYmKGw9e30pO3ZhciBoPW5ldyBaeShudWxsLGUsbixyLGksbyxhLHdtKHMpKTtpZih1JiYoaC51cmxIYW5kbGluZ1N0cmF0ZWd5PXUpLGMmJihoLnJvdXRlUmV1c2VTdHJhdGVneT1jKSxsLmVycm9ySGFuZGxlciYmKGguZXJyb3JIYW5kbGVyPWwuZXJyb3JIYW5kbGVyKSxsLmVuYWJsZVRyYWNpbmcpe3ZhciBmPVp1KCk7aC5ldmVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2YubG9nR3JvdXAoIlJvdXRlciBFdmVudDogIit0LmNvbnN0cnVjdG9yLm5hbWUpLGYubG9nKHQudG9TdHJpbmcoKSksZi5sb2codCksZi5sb2dHcm91cEVuZCgpfSl9cmV0dXJuIGwub25TYW1lVXJsTmF2aWdhdGlvbiYmKGgub25TYW1lVXJsTmF2aWdhdGlvbj1sLm9uU2FtZVVybE5hdmlnYXRpb24pLGwucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSYmKGgucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT1sLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLGh9ZnVuY3Rpb24gZ2codCl7cmV0dXJuIHQucm91dGVyU3RhdGUucm9vdH12YXIgdmc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuaW5qZWN0b3I9dCx0aGlzLmluaXROYXZpZ2F0aW9uPSExLHRoaXMucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZT1uZXcgaXR9cmV0dXJuIHQucHJvdG90eXBlLmFwcEluaXRpYWxpemVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoQ3MsUHJvbWlzZS5yZXNvbHZlKG51bGwpKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU9bnVsbCxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3JldHVybiBlPXR9KSxyPXQuaW5qZWN0b3IuZ2V0KFp5KSxpPXQuaW5qZWN0b3IuZ2V0KGxnKTtpZih0LmlzTGVnYWN5RGlzYWJsZWQoaSl8fHQuaXNMZWdhY3lFbmFibGVkKGkpKWUoITApO2Vsc2UgaWYoImRpc2FibGVkIj09PWkuaW5pdGlhbE5hdmlnYXRpb24pci5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxlKCEwKTtlbHNle2lmKCJlbmFibGVkIiE9PWkuaW5pdGlhbE5hdmlnYXRpb24pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGluaXRpYWxOYXZpZ2F0aW9uIG9wdGlvbnM6ICciK2kuaW5pdGlhbE5hdmlnYXRpb24rIiciKTtyLmhvb2tzLmFmdGVyUHJlYWN0aXZhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmluaXROYXZpZ2F0aW9uP2RsKG51bGwpOih0LmluaXROYXZpZ2F0aW9uPSEwLGUoITApLHQucmVzdWx0T2ZQcmVhY3RpdmF0aW9uRG9uZSl9LHIuaW5pdGlhbE5hdmlnYXRpb24oKX1yZXR1cm4gbn0pfSx0LnByb3RvdHlwZS5ib290c3RyYXBMaXN0ZW5lcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluamVjdG9yLmdldChsZyksbj10aGlzLmluamVjdG9yLmdldChzZykscj10aGlzLmluamVjdG9yLmdldChaeSksaT10aGlzLmluamVjdG9yLmdldCh1bik7dD09PWkuY29tcG9uZW50c1swXSYmKHRoaXMuaXNMZWdhY3lFbmFibGVkKGUpP3IuaW5pdGlhbE5hdmlnYXRpb24oKTp0aGlzLmlzTGVnYWN5RGlzYWJsZWQoZSkmJnIuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksbi5zZXRVcFByZWxvYWRpbmcoKSxyLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoaS5jb21wb25lbnRUeXBlc1swXSksdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lLm5leHQobnVsbCksdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lLmNvbXBsZXRlKCkpfSx0LnByb3RvdHlwZS5pc0xlZ2FjeUVuYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuImxlZ2FjeV9lbmFibGVkIj09PXQuaW5pdGlhbE5hdmlnYXRpb258fCEwPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8dm9pZCAwPT09dC5pbml0aWFsTmF2aWdhdGlvbn0sdC5wcm90b3R5cGUuaXNMZWdhY3lEaXNhYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4ibGVnYWN5X2Rpc2FibGVkIj09PXQuaW5pdGlhbE5hdmlnYXRpb258fCExPT09dC5pbml0aWFsTmF2aWdhdGlvbn0sdH0oKTtmdW5jdGlvbiBfZyh0KXtyZXR1cm4gdC5hcHBJbml0aWFsaXplci5iaW5kKHQpfWZ1bmN0aW9uIGJnKHQpe3JldHVybiB0LmJvb3RzdHJhcExpc3RlbmVyLmJpbmQodCl9dmFyIHdnPW5ldyBtdCgiUm91dGVyIEluaXRpYWxpemVyIikseGc9VXIoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIENnKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwxNjc3NzIxNixudWxsLG51bGwsMSwicm91dGVyLW91dGxldCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oMSwyMTI5OTIsbnVsbCwwLG5nLFtlZyx4bixNZSxbOCxudWxsXSxDbl0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIEVnPVJpKCJuZy1jb21wb25lbnQiLGNtLGZ1bmN0aW9uKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLENnLHhnKSksaW8oMSw0OTE1MixudWxsLDAsY20sW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX0se30se30sW10pLFNnPWZ1bmN0aW9uKCl7fSxrZz1mdW5jdGlvbigpe30sVGc9ZnVuY3Rpb24oKXt9LEFnPWZ1bmN0aW9uKCl7fSxQZz1mdW5jdGlvbigpe30sT2c9VXIoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWNhcmR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7d2lkdGg6MTAwJX1bZGlyPXJ0bF0gLm1hdC1jYXJkIC5tYXQtZGl2aWRlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWNhcmQgLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOnN0YXRpYzttYXJnaW46MH0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jYXJke291dGxpbmU6c29saWQgMXB4fX0ubWF0LWNhcmQtYWN0aW9ucywubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLXRpdGxle2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi0xNnB4O21hcmdpbi1yaWdodDotMTZweDtwYWRkaW5nOjhweCAwfS5tYXQtY2FyZC1hY3Rpb25zLWFsaWduLWVuZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtY2FyZC1pbWFnZXt3aWR0aDpjYWxjKDEwMCUgKyA0OHB4KTttYXJnaW46MCAtMjRweCAxNnB4IC0yNHB4fS5tYXQtY2FyZC14bC1pbWFnZXt3aWR0aDoyNDBweDtoZWlnaHQ6MjQwcHg7bWFyZ2luOi04cHh9Lm1hdC1jYXJkLWZvb3RlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4IC0yNHB4IC0yNHB4fS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbnttYXJnaW46MCA0cHh9Lm1hdC1jYXJkLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tYXQtY2FyZC1oZWFkZXItdGV4dHttYXJnaW46MCA4cHh9Lm1hdC1jYXJkLWF2YXRhcntoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Lm1hdC1jYXJkLWxnLWltYWdlLC5tYXQtY2FyZC1tZC1pbWFnZSwubWF0LWNhcmQtc20taW1hZ2V7bWFyZ2luOi04cHggMH0ubWF0LWNhcmQtdGl0bGUtZ3JvdXB7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbjowIC04cHh9Lm1hdC1jYXJkLXNtLWltYWdle3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHh9Lm1hdC1jYXJkLW1kLWltYWdle3dpZHRoOjExMnB4O2hlaWdodDoxMTJweH0ubWF0LWNhcmQtbGctaW1hZ2V7d2lkdGg6MTUycHg7aGVpZ2h0OjE1MnB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LWNhcmR7cGFkZGluZzoyNHB4IDE2cHh9Lm1hdC1jYXJkLWFjdGlvbnN7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgMzJweCk7bWFyZ2luOjE2cHggLTE2cHh9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe21hcmdpbjowfS5tYXQtY2FyZC14bC1pbWFnZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1oZWFkZXJ7bWFyZ2luOi04cHggMCAwIDB9Lm1hdC1jYXJkLWZvb3RlcnttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHh9fS5tYXQtY2FyZC1jb250ZW50PjpmaXJzdC1jaGlsZCwubWF0LWNhcmQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubWF0LWNhcmQtY29udGVudD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3RlciksLm1hdC1jYXJkPjpsYXN0LWNoaWxkOm5vdCgubWF0LWNhcmQtZm9vdGVyKXttYXJnaW4tYm90dG9tOjB9Lm1hdC1jYXJkLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTI0cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC1hY3Rpb25zOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMTZweDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uOmZpcnN0LWNoaWxkLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKSwubWF0LWNhcmQtdGl0bGU6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDotNHB4fS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXN1YnRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotOHB4fSJdLGRhdGE6e319KTtmdW5jdGlvbiBJZyh0KXtyZXR1cm4gRG8oMixbVG8obnVsbCwwKSxUbyhudWxsLDEpXSxudWxsLG51bGwpfXZhciBNZz1Vcih7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTmcodCl7cmV0dXJuIERvKDIsW1RvKG51bGwsMCksKHQoKSgpLHlpKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLFRvKG51bGwsMSksVG8obnVsbCwyKV0sbnVsbCxudWxsKX12YXIgUmcsRGcsTGc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59LGpnPSgxPT09KFJnPUxnKS5sZW5ndGgmJihEZz1SZyxSZz1mdW5jdGlvbih0LGUpe3JldHVybiBMZyhEZyh0KSxlKX0pLHtsZWZ0OmZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihudWxsPT1uJiYobj0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7bjxyOyl7dmFyIGk9bityPj4+MTtSZyh0W2ldLGUpPDA/bj1pKzE6cj1pfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LGUsbixyKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09ciYmKHI9dC5sZW5ndGgpO248cjspe3ZhciBpPW4rcj4+PjE7UmcodFtpXSxlKT4wP3I9aTpuPWkrMX1yZXR1cm4gbn19KS5yaWdodCxGZz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fSxWZz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9aT1uOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZSBmb3IoOysrYTxvOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9aT1uOysrYTxvOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpO3JldHVybltyLGldfSxCZz1BcnJheS5wcm90b3R5cGUuc2xpY2Usemc9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxVZz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sSGc9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkoaSk7KytyPGk7KW9bcl09dCtyKm47cmV0dXJuIG99LHFnPU1hdGguc3FydCg1MCksR2c9TWF0aC5zcXJ0KDEwKSxXZz1NYXRoLnNxcnQoMiksUWc9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxhLHM9LTE7aWYobj0rbiwodD0rdCk9PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0oYT1LZyh0LGUsbikpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLGU9TWF0aC5mbG9vcihlL2EpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KW9bc109KHQrcykqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxlPU1hdGguY2VpbChlKmEpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KW9bc109KHQtcykvYTtyZXR1cm4gciYmby5yZXZlcnNlKCksb307ZnVuY3Rpb24gS2codCxlLG4pe3ZhciByPShlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCksbz1yL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1xZz8xMDpvPj1HZz81Om8+PVdnPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cWc/MTA6bz49R2c/NTpvPj1XZz8yOjEpfWZ1bmN0aW9uIFpnKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLG89ci9pO3JldHVybiBvPj1xZz9pKj0xMDpvPj1HZz9pKj01Om8+PVdnJiYoaSo9MiksZTx0Py1pOml9dmFyIFlnPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfTtBcnJheTt2YXIgWGc9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gJGcoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IEpnKHIpfWZ1bmN0aW9uIEpnKHQpe3RoaXMuXz10fWZ1bmN0aW9uIHR2KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gZXYodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPVhnLHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1KZy5wcm90b3R5cGU9JGcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKZyxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10aGlzLl8sbz0ocj1pLCh0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhci5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KSksYT0tMSxzPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHM7KWlmKG49KHQ9b1thXSkudHlwZSlpW25dPWV2KGlbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiBpKWlbbl09ZXYoaVtuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8czspaWYoKG49KHQ9b1thXSkudHlwZSkmJihuPXR2KGlbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IEpnKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixyLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKWlbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KHI9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylyW29dLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgbnY9JGcscnY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGl2PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpydix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LG92PWZ1bmN0aW9uKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLGl2Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTppdltlXSxsb2NhbDp0fTp0fSxhdj1mdW5jdGlvbih0KXt2YXIgZT1vdih0KTtyZXR1cm4oZS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1ydiYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cnY/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fSkoZSl9O2Z1bmN0aW9uIHN2KCl7fXZhciBsdj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9zdjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fTtmdW5jdGlvbiB1digpe3JldHVybltdfXZhciBjdj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD91djpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxodj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl7dmFyIGZ2PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZighZnYubWF0Y2hlcyl7dmFyIHB2PWZ2LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8ZnYubXNNYXRjaGVzU2VsZWN0b3J8fGZ2Lm1vek1hdGNoZXNTZWxlY3Rvcnx8ZnYub01hdGNoZXNTZWxlY3Rvcjtodj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcHYuY2FsbCh0aGlzLHQpfX19fXZhciBkdj1odixtdj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX07ZnVuY3Rpb24geXYodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9eXYucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5dixhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgZ3Y9IiQiO2Z1bmN0aW9uIHZ2KHQsZSxuLHIsaSxvKXtmb3IodmFyIGEscz0wLGw9ZS5sZW5ndGgsdT1vLmxlbmd0aDtzPHU7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10scltzXT1hKTpuW3NdPW5ldyB5dih0LG9bc10pO2Zvcig7czxsOysrcykoYT1lW3NdKSYmKGlbc109YSl9ZnVuY3Rpb24gX3YodCxlLG4scixpLG8sYSl7dmFyIHMsbCx1LGM9e30saD1lLmxlbmd0aCxmPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmKHBbc109dT1ndithLmNhbGwobCxsLl9fZGF0YV9fLHMsZSksdSBpbiBjP2lbc109bDpjW3VdPWwpO2ZvcihzPTA7czxmOysrcykobD1jW3U9Z3YrYS5jYWxsKHQsb1tzXSxzLG8pXSk/KHJbc109bCxsLl9fZGF0YV9fPW9bc10sY1t1XT1udWxsKTpuW3NdPW5ldyB5dih0LG9bc10pO2ZvcihzPTA7czxoOysrcykobD1lW3NdKSYmY1twW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIGJ2KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciB3dj1mdW5jdGlvbih0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9O2Z1bmN0aW9uIHh2KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8d3YodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gQ3YodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEV2KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFN2KHQpfWZ1bmN0aW9uIFN2KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1Ddih0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIGt2KHQsZSl7Zm9yKHZhciBuPUV2KHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gVHYodCxlKXtmb3IodmFyIG49RXYodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiBBdigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gUHYoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBPdigpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBJdigpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE12KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTnYoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBSdigpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCExKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBEdigpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCEwKSx0aGlzLm5leHRTaWJsaW5nKX1Tdi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBMdj17fSxqdj1udWxsO2Z1bmN0aW9uIEZ2KHQsZSxuKXtyZXR1cm4gdD1Wdih0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFZ2KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9anY7anY9cjt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7anY9aX19fWZ1bmN0aW9uIEJ2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsbz1lLmxlbmd0aDtyPG87KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiB6dih0LGUsbil7dmFyIHI9THYuaGFzT3duUHJvcGVydHkodC50eXBlKT9GdjpWdjtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzLGw9dGhpcy5fX29uLHU9cihlLG8sYSk7aWYobClmb3IodmFyIGM9MCxoPWwubGVuZ3RoO2M8aDsrK2MpaWYoKHM9bFtjXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9dSxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsdSxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOnUsY2FwdHVyZTpufSxsP2wucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiBVdih0LGUsbil7dmFyIHI9d3YodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoTHY9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBIdj1bbnVsbF07ZnVuY3Rpb24gcXYodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gR3YoKXtyZXR1cm4gbmV3IHF2KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSHYpfXF2LnByb3RvdHlwZT1Hdi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnF2LHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bHYodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIG8sYSxzPWVbaV0sbD1zLmxlbmd0aCx1PXJbaV09bmV3IEFycmF5KGwpLGM9MDtjPGw7KytjKShvPXNbY10pJiYoYT10LmNhbGwobyxvLl9fZGF0YV9fLGMscykpJiYoIl9fZGF0YV9fImluIG8mJihhLl9fZGF0YV9fPW8uX19kYXRhX18pLHVbY109YSk7cmV0dXJuIG5ldyBxdihyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWN2KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1bXSxpPVtdLG89MDtvPG47KytvKWZvcih2YXIgYSxzPWVbb10sbD1zLmxlbmd0aCx1PTA7dTxsOysrdSkoYT1zW3VdKSYmKHIucHVzaCh0LmNhbGwoYSxhLl9fZGF0YV9fLHUscykpLGkucHVzaChhKSk7cmV0dXJuIG5ldyBxdihyLGkpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWR2KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBvLGE9ZVtpXSxzPWEubGVuZ3RoLGw9cltpXT1bXSx1PTA7dTxzOysrdSkobz1hW3VdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyx1LGEpJiZsLnB1c2gobyk7cmV0dXJuIG5ldyBxdihyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIGQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbih0KXtkWysrY109dH0pLGQ7dmFyIG4scj1lP192OnZ2LGk9dGhpcy5fcGFyZW50cyxvPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKG49dCx0PWZ1bmN0aW9uKCl7cmV0dXJuIG59KTtmb3IodmFyIGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksYz0wO2M8YTsrK2Mpe3ZhciBoPWlbY10sZj1vW2NdLHA9Zi5sZW5ndGgsZD10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLGMsaSksbT1kLmxlbmd0aCx5PWxbY109bmV3IEFycmF5KG0pLGc9c1tjXT1uZXcgQXJyYXkobSk7cihoLGYseSxnLHVbY109bmV3IEFycmF5KHApLGQsZSk7Zm9yKHZhciB2LF8sYj0wLHc9MDtiPG07KytiKWlmKHY9eVtiXSl7Zm9yKGI+PXcmJih3PWIrMSk7IShfPWdbd10pJiYrK3c8bTspO3YuX25leHQ9X3x8bnVsbH19cmV0dXJuKHM9bmV3IHF2KHMsaSkpLl9lbnRlcj1sLHMuX2V4aXQ9dSxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgcXYodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobXYpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxdih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKG12KSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9TWF0aC5taW4ocixuLmxlbmd0aCksbz1uZXcgQXJyYXkociksYT0wO2E8aTsrK2EpZm9yKHZhciBzLGw9ZVthXSx1PW5bYV0sYz1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KGMpLGY9MDtmPGM7KytmKShzPWxbZl18fHVbZl0pJiYoaFtmXT1zKTtmb3IoO2E8cjsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgcXYobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciByLGk9dFtlXSxvPWkubGVuZ3RoLTEsYT1pW29dOy0tbz49MDspKHI9aVtvXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1idik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXtmb3IodmFyIGEscz1uW29dLGw9cy5sZW5ndGgsdT1pW29dPW5ldyBBcnJheShsKSxjPTA7YzxsOysrYykoYT1zW2NdKSYmKHVbY109YSk7dS5zb3J0KGUpfXJldHVybiBuZXcgcXYoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSx0fSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgcj10W2VdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPXJbaV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrdH0pLHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKGk9b1thXSkmJnQuY2FsbChpLGkuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPW92KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnIuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX06bi5sb2NhbD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX0pKG4sZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fSkodCxlLG51bGw9PW4/IiI6bikpOnh2KHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX0pKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49Q3YodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9RXYodGhpcy5ub2RlKCkpLGk9LTEsbz1uLmxlbmd0aDsrK2k8bzspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/a3Y6VHYpKHRoaXMsdCl9fTplP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2t2KHRoaXMsdCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtUdih0aGlzLHQpfX0pKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0F2OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/UHY6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKE92KX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEl2KX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YXYodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YXYodCkscj1udWxsPT1lP012OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6bHYoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKE52KX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/RHY6UnYpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG89KHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT96djpCdixudWxsPT1uJiYobj0hMSkscj0wO3I8YTsrK3IpdGhpcy5lYWNoKHMob1tyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBsLHU9MCxjPXMubGVuZ3RoO3U8YzsrK3UpZm9yKHI9MCxsPXNbdV07cjxhOysrcilpZigoaT1vW3JdKS50eXBlPT09bC50eXBlJiZpLm5hbWU9PT1sLm5hbWUpcmV0dXJuIGwudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVXYodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFV2KHRoaXMsdCxlKX19KSh0LGUpKX19O3ZhciBXdj1HdixRdj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IHF2KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgcXYoW1t0XV0sSHYpfSxLdj0wO2Z1bmN0aW9uIFp2KCl7dGhpcy5fPSJAIisoKytLdikudG9TdHJpbmcoMzYpfVp2LnByb3RvdHlwZT0oZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFp2fSkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpadixnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgWXY9ZnVuY3Rpb24odCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fTtmdW5jdGlvbiBYdih0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiAkdigpe312YXIgSnY9IlxccyooWystXT9cXGQrKVxccyoiLHRfPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGVfPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixuXz0vXiMoWzAtOWEtZl17M30pJC8scl89L14jKFswLTlhLWZdezZ9KSQvLGlfPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tKdixKdixKdl0rIlxcKSQiKSxvXz1uZXcgUmVnRXhwKCJecmdiXFwoIitbZV8sZV8sZV9dKyJcXCkkIiksYV89bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tKdixKdixKdix0X10rIlxcKSQiKSxzXz1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2VfLGVfLGVfLHRfXSsiXFwpJCIpLGxfPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t0XyxlXyxlX10rIlxcKSQiKSx1Xz1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3RfLGVfLGVfLHRfXSsiXFwpJCIpLGNfPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGhfKHQpe3ZhciBlO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1uXy5leGVjKHQpKT9uZXcgeV8oKGU9cGFyc2VJbnQoZVsxXSwxNikpPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6KGU9cl8uZXhlYyh0KSk/Zl8ocGFyc2VJbnQoZVsxXSwxNikpOihlPWlfLmV4ZWModCkpP25ldyB5XyhlWzFdLGVbMl0sZVszXSwxKTooZT1vXy5leGVjKHQpKT9uZXcgeV8oMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9YV8uZXhlYyh0KSk/cF8oZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9c18uZXhlYyh0KSk/cF8oMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9bF8uZXhlYyh0KSk/dl8oZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT11Xy5leGVjKHQpKT92XyhlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOmNfLmhhc093blByb3BlcnR5KHQpP2ZfKGNfW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgeV8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBmXyh0KXtyZXR1cm4gbmV3IHlfKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBwXyh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IHlfKHQsZSxuLHIpfWZ1bmN0aW9uIGRfKHQpe3JldHVybiB0IGluc3RhbmNlb2YgJHZ8fCh0PWhfKHQpKSx0P25ldyB5XygodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgeV99ZnVuY3Rpb24gbV8odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2RfKHQpOm5ldyB5Xyh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24geV8odCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIGdfKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gdl8odCxlLG4scil7cmV0dXJuIHI8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBiXyh0LGUsbixyKX1mdW5jdGlvbiBfXyh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIGJfKXJldHVybiBuZXcgYl8odC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgJHZ8fCh0PWhfKHQpKSwhdClyZXR1cm4gbmV3IGJfO2lmKHQgaW5zdGFuY2VvZiBiXylyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4oZSxuLHIpLG89TWF0aC5tYXgoZSxuLHIpLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1yKS9zKzYqKG48cik6bj09PW8/KHItZSkvcysyOihlLW4pL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IGJfKGEscyxsLHQub3BhY2l0eSl9KHQpOm5ldyBiXyh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gYl8odCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHdfKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1ZdigkdixoXyx7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn19KSxZdih5XyxtXyxYdigkdix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHlfKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyB5Xyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpmdW5jdGlvbigpe3JldHVybiIjIitnXyh0aGlzLnIpK2dfKHRoaXMuZykrZ18odGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksWXYoYl8sX18sWHYoJHYse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBiXyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBiXyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IHlfKHdfKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLHdfKHQsaSxyKSx3Xyh0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgeF89TWF0aC5QSS8xODAsQ189MTgwL01hdGguUEksRV89Ljk2NDIyLFNfPTEsa189LjgyNTIxLFRfPTQvMjksQV89Ni8yOSxQXz0zKkFfKkFfLE9fPUFfKkFfKkFfO2Z1bmN0aW9uIElfKHQpe2lmKHQgaW5zdGFuY2VvZiBNXylyZXR1cm4gbmV3IE1fKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEZfKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgTV8odC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp4XztyZXR1cm4gbmV3IE1fKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIHlffHwodD1kXyh0KSk7dmFyIG4scixpPUxfKHQuciksbz1MXyh0LmcpLGE9TF8odC5iKSxzPU5fKCguMjIyNTA0NSppKy43MTY4Nzg2Km8rLjA2MDYxNjkqYSkvU18pO3JldHVybiBpPT09byYmbz09PWE/bj1yPXM6KG49Tl8oKC40MzYwNzQ3KmkrLjM4NTA2NDkqbysuMTQzMDgwNCphKS9FXykscj1OXygoLjAxMzkzMjIqaSsuMDk3MTA0NSpvKy43MTQxNzMzKmEpL2tfKSksbmV3IE1fKDExNipzLTE2LDUwMCoobi1zKSwyMDAqKHMtciksdC5vcGFjaXR5KX1mdW5jdGlvbiBNXyh0LGUsbixyKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gTl8odCl7cmV0dXJuIHQ+T18/TWF0aC5wb3codCwxLzMpOnQvUF8rVF99ZnVuY3Rpb24gUl8odCl7cmV0dXJuIHQ+QV8/dCp0KnQ6UF8qKHQtVF8pfWZ1bmN0aW9uIERfKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gTF8odCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gal8odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBGXylyZXR1cm4gbmV3IEZfKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE1ffHwodD1JXyh0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IEZfKE5hTiwwLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqQ187cmV0dXJuIG5ldyBGXyhlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX0odCk6bmV3IEZfKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBGXyh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9WXYoTV8sZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0lfKHQpOm5ldyBNXyh0LGUsbixudWxsPT1yPzE6cil9LFh2KCR2LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE1fKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTV8odGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHlfKERfKDMuMTMzODU2MSooZT1FXypSXyhlKSktMS42MTY4NjY3Kih0PVNfKlJfKHQpKS0uNDkwNjE0Nioobj1rXypSXyhuKSkpLERfKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqbiksRF8oLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypuKSx0aGlzLm9wYWNpdHkpfX0pKSxZdihGXyxqXyxYdigkdix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGXyh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEZfKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIElfKHRoaXMpLnJnYigpfX0pKTt2YXIgVl89LS4yOTIyNyxCXz0tLjkwNjQ5LHpfPTEuOTcyOTQsVV89el8qQl8sSF89MS43ODI3Nyp6XyxxXz0xLjc4Mjc3KlZfLSAtLjE0ODYxKkJfO2Z1bmN0aW9uIEdfKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgV18pcmV0dXJuIG5ldyBXXyh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiB5X3x8KHQ9ZF8odCkpO3ZhciBlPXQuZy8yNTUsbj10LmIvMjU1LHI9KHFfKm4rVV8qKHQuci8yNTUpLUhfKmUpLyhxXytVXy1IXyksaT1uLXIsbz0oel8qKGUtciktVl8qaSkvQl8sYT1NYXRoLnNxcnQobypvK2kqaSkvKHpfKnIqKDEtcikpLHM9YT9NYXRoLmF0YW4yKG8saSkqQ18tMTIwOk5hTjtyZXR1cm4gbmV3IFdfKHM8MD9zKzM2MDpzLGEscix0Lm9wYWNpdHkpfSh0KTpuZXcgV18odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFdfKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBRXyh0LGUsbixyLGkpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSplKyg0LTYqbyszKmEpKm4rKDErMyp0KzMqby0zKmEpKnIrYSppKS82fVl2KFdfLEdfLFh2KCR2LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgV18odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgV18odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKnhfLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyB5XygyNTUqKGUrbiooLS4xNDg2MSpyKzEuNzgyNzcqaSkpLDI1NSooZStuKihWXypyK0JfKmkpKSwyNTUqKGUrbiooel8qcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBLXz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIFpfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gWV8odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/Wl8odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOktfKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gWF8odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/Wl8odCxuKTpLXyhpc05hTih0KT9lOnQpfXZhciAkXz1mdW5jdGlvbiB0KGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0odD0rdCk/WF86ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqZSxuKX19KGUsbix0KTpLXyhpc05hTihlKT9uOmUpfX0oZSk7ZnVuY3Rpb24gcih0LGUpe3ZhciByPW4oKHQ9bV8odCkpLnIsKGU9bV8oZSkpLnIpLGk9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT1YXyh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1yKGUpLHQuZz1pKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gSl8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLHIsaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pcj1tXyhlW25dKSxvW25dPXIucnx8MCxhW25dPXIuZ3x8MCxzW25dPXIuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSxzPXQocyksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1vKHQpLHIuZz1hKHQpLHIuYj1zKHQpLHIrIiJ9fX12YXIgdGIsZWIsbmIscmIsaWI9Sl8oZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFtyXSxvPXRbcisxXTtyZXR1cm4gUV8oKG4tci9lKSplLHI+MD90W3ItMV06MippLW8saSxvLHI8ZS0xP3RbcisyXToyKm8taSl9fSksb2I9KEpfKGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSk7cmV0dXJuIFFfKChuLXIvZSkqZSx0WyhyK2UtMSklZV0sdFtyJWVdLHRbKHIrMSklZV0sdFsocisyKSVlXSl9fSksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gdCtlKm59fSksYWI9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHNiPW5ldyBSZWdFeHAoYWIuc291cmNlLCJnIiksbGI9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz1hYi5sYXN0SW5kZXg9c2IubGFzdEluZGV4PTAsYT0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhuPWFiLmV4ZWModCkpJiYocj1zYi5leGVjKGUpKTspKGk9ci5pbmRleCk+byYmKGk9ZS5zbGljZShvLGkpLHNbYV0/c1thXSs9aTpzWysrYV09aSksKG49blswXSk9PT0ocj1yWzBdKT9zW2FdP3NbYV0rPXI6c1srK2FdPXI6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6b2IobixyKX0pKSxvPXNiLmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKGk9ZS5zbGljZShvKSxzW2FdP3NbYV0rPWk6c1srK2FdPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49bFtyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LHViPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9LXyhlKTooIm51bWJlciI9PT1yP29iOiJzdHJpbmciPT09cj8obj1oXyhlKSk/KGU9biwkXyk6bGI6ZSBpbnN0YW5jZW9mIGhfPyRfOmUgaW5zdGFuY2VvZiBEYXRlP2Z1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIG4uc2V0VGltZSh0K2Uqciksbn19OkFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24odCxlKXt2YXIgbixyPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4ocix0Lmxlbmd0aCk6MCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShyKTtmb3Iobj0wO248aTsrK24pb1tuXT11Yih0W25dLGVbbl0pO2Zvcig7bjxyOysrbilhW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuPTA7bjxpOysrbilhW25dPW9bbl0odCk7cmV0dXJuIGF9fToiZnVuY3Rpb24iIT10eXBlb2YgZS52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ3x8aXNOYU4oZSk/ZnVuY3Rpb24odCxlKXt2YXIgbixyPXt9LGk9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9yW25dPXViKHRbbl0sZVtuXSk6aVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiByKWlbbl09cltuXSh0KTtyZXR1cm4gaX19Om9iKSh0LGUpfSxjYj1mdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQrZSpuKX19LGhiPTE4MC9NYXRoLlBJLGZiPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LHBiPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKGw9dCpuK2UqcikmJihuLT10Kmwsci09ZSpsKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGwvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKmhiLHNrZXdYOk1hdGguYXRhbihsKSpoYixzY2FsZVg6YSxzY2FsZVk6c319O2Z1bmN0aW9uIGRiKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLGw9W107cmV0dXJuIG89dChvKSxhPXQoYSksZnVuY3Rpb24odCxyLGksbyxhLHMpe2lmKHQhPT1pfHxyIT09byl7dmFyIGw9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6bC00LHg6b2IodCxpKX0se2k6bC0yLHg6b2IocixvKX0pfWVsc2UoaXx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIraStlK28rbil9KG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLGwpLGZ1bmN0aW9uKHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4Om9iKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KG8ucm90YXRlLGEucm90YXRlLHMsbCksZnVuY3Rpb24odCxlLG4sbyl7dCE9PWU/by5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4Om9iKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShvLnNrZXdYLGEuc2tld1gscyxsKSxmdW5jdGlvbih0LGUsbixyLG8sYSl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1vLnB1c2goaShvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4Om9iKHQsbil9LHtpOnMtMix4Om9iKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8by5wdXNoKGkobykrInNjYWxlKCIrbisiLCIrcisiKSIpfShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLGwpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9bC5sZW5ndGg7KytuPHI7KXNbKGU9bFtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIG1iPWRiKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIj09PXQ/ZmI6KHRifHwodGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksZWI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG5iPWRvY3VtZW50LmRlZmF1bHRWaWV3KSx0Yi5zdHlsZS50cmFuc2Zvcm09dCx0PW5iLmdldENvbXB1dGVkU3R5bGUoZWIuYXBwZW5kQ2hpbGQodGIpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGViLnJlbW92ZUNoaWxkKHRiKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxwYigrdFswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSwicHgsICIsInB4KSIsImRlZykiKSx5Yj1kYihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9mYjoocmJ8fChyYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxyYi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9cmIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/cGIoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6ZmIpfSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIGdiKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9X18oZSkpLmgsKG49X18obikpLmgpLGk9WF8oZS5zLG4ucyksbz1YXyhlLmwsbi5sKSxhPVhfKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPWkodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fWZ1bmN0aW9uIHZiKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9al8oZSkpLmgsKG49al8obikpLmgpLGk9WF8oZS5jLG4uYyksbz1YXyhlLmwsbi5sKSxhPVhfKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fWZ1bmN0aW9uIF9iKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIHIoZSxyKXt2YXIgaT10KChlPUdfKGUpKS5oLChyPUdfKHIpKS5oKSxvPVhfKGUucyxyLnMpLGE9WF8oZS5sLHIubCkscz1YXyhlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1vKHQpLGUubD1hKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLHIuZ2FtbWE9ZSxyfSgxKX1NYXRoLGdiKFlfKSxnYihYXyksdmIoWV8pLHZiKFhfKSxfYihZXyk7dmFyIGJiLHdiLHhiPV9iKFhfKSxDYj0wLEViPTAsU2I9MCxrYj0xZTMsVGI9MCxBYj0wLFBiPTAsT2I9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsSWI9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gTWIoKXtyZXR1cm4gQWJ8fChJYihOYiksQWI9T2Iubm93KCkrUGIpfWZ1bmN0aW9uIE5iKCl7QWI9MH1mdW5jdGlvbiBSYigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gRGIodCxlLG4pe3ZhciByPW5ldyBSYjtyZXR1cm4gci5yZXN0YXJ0KHQsZSxuKSxyfWZ1bmN0aW9uIExiKCl7QWI9KFRiPU9iLm5vdygpKStQYixDYj1FYj0wO3RyeXshZnVuY3Rpb24oKXtNYigpLCsrQ2I7Zm9yKHZhciB0LGU9YmI7ZTspKHQ9QWItZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUNifSgpfWZpbmFsbHl7Q2I9MCxmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG49YmIscj0xLzA7bjspbi5fY2FsbD8ocj5uLl90aW1lJiYocj1uLl90aW1lKSx0PW4sbj1uLl9uZXh0KTooZT1uLl9uZXh0LG4uX25leHQ9bnVsbCxuPXQ/dC5fbmV4dD1lOmJiPWUpO3diPXQsRmIocil9KCksQWI9MH19ZnVuY3Rpb24gamIoKXt2YXIgdD1PYi5ub3coKSxlPXQtVGI7ZT5rYiYmKFBiLT1lLFRiPXQpfWZ1bmN0aW9uIEZiKHQpe0NifHwoRWImJihFYj1jbGVhclRpbWVvdXQoRWIpKSx0LUFiPjI0Pyh0PDEvMCYmKEViPXNldFRpbWVvdXQoTGIsdC1PYi5ub3coKS1QYikpLFNiJiYoU2I9Y2xlYXJJbnRlcnZhbChTYikpKTooU2J8fChUYj1PYi5ub3coKSxTYj1zZXRJbnRlcnZhbChqYixrYikpLENiPTEsSWIoTGIpKSl9UmIucHJvdG90eXBlPURiLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UmIscmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP01iKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fHdiPT09dGhpc3x8KHdiP3diLl9uZXh0PXRoaXM6YmI9dGhpcyx3Yj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLEZiKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEZiKCkpfX07dmFyIFZiPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgUmI7cmV0dXJuIHIucmVzdGFydChmdW5jdGlvbihuKXtyLnN0b3AoKSx0KG4rZSl9LGU9bnVsbD09ZT8wOitlLG4pLHJ9LEJiPW52KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLHpiPVtdLFViPTAsSGI9MSxxYj0yLEdiPTMsV2I9NCxRYj01LEtiPTYsWmI9ZnVuY3Rpb24odCxlLG4scixpLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhsKXt2YXIgdSxjLGgsZjtpZihuLnN0YXRlIT09SGIpcmV0dXJuIHMoKTtmb3IodSBpbiBpKWlmKChmPWlbdV0pLm5hbWU9PT1uLm5hbWUpe2lmKGYuc3RhdGU9PT1HYilyZXR1cm4gVmIobyk7Zi5zdGF0ZT09PVdiPyhmLnN0YXRlPUtiLGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8ZSYmKGYuc3RhdGU9S2IsZi50aW1lci5zdG9wKCksZGVsZXRlIGlbdV0pfWlmKFZiKGZ1bmN0aW9uKCl7bi5zdGF0ZT09PUdiJiYobi5zdGF0ZT1XYixuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksYShsKSl9KSxuLnN0YXRlPXFiLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLG4uc3RhdGU9PT1xYil7Zm9yKG4uc3RhdGU9R2Iscj1uZXcgQXJyYXkoaD1uLnR3ZWVuLmxlbmd0aCksdT0wLGM9LTE7dTxoOysrdSkoZj1uLnR3ZWVuW3VdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYoclsrK2NdPWYpO3IubGVuZ3RoPWMrMX19ZnVuY3Rpb24gYShlKXtmb3IodmFyIGk9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9UWIsMSksbz0tMSxhPXIubGVuZ3RoOysrbzxhOylyW29dLmNhbGwobnVsbCxpKTtuLnN0YXRlPT09UWImJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciByIGluIG4uc3RhdGU9S2Isbi50aW1lci5zdG9wKCksZGVsZXRlIGlbZV0saSlyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufWlbZV09bixuLnRpbWVyPURiKGZ1bmN0aW9uKHQpe24uc3RhdGU9SGIsbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0sMCxuLnRpbWUpfSh0LG4se25hbWU6ZSxpbmRleDpyLGdyb3VwOmksb246QmIsdHdlZW46emIsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWJ9KX07ZnVuY3Rpb24gWWIodCxlKXt2YXIgbj0kYih0LGUpO2lmKG4uc3RhdGU+VWIpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBYYih0LGUpe3ZhciBuPSRiKHQsZSk7aWYobi5zdGF0ZT5xYil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiAkYih0LGUpe3ZhciBuPXQuX190cmFuc2l0aW9uO2lmKCFufHwhKG49bltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBufWZ1bmN0aW9uIEpiKHQsZSxuKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9WGIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtlXT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiAkYih0LHIpLnZhbHVlW2VdfX12YXIgdHc9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP29iOmUgaW5zdGFuY2VvZiBoXz8kXzoobj1oXyhlKSk/KGU9biwkXyk6bGIpKHQsZSl9LGV3PVd2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcixudz0wO2Z1bmN0aW9uIHJ3KHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBpdygpe3JldHVybisrbnd9dmFyIG93PVd2LnByb3RvdHlwZTtmdW5jdGlvbiBhdyh0KXtyZXR1cm4rdH1ydy5wcm90b3R5cGU9KGZ1bmN0aW9uKHQpe3JldHVybiBXdigpLnRyYW5zaXRpb24odCl9KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJ3LHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWx2KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzLGwsdT1yW2FdLGM9dS5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheShjKSxmPTA7ZjxjOysrZikocz11W2ZdKSYmKGw9dC5jYWxsKHMscy5fX2RhdGFfXyxmLHUpKSYmKCJfX2RhdGFfXyJpbiBzJiYobC5fX2RhdGFfXz1zLl9fZGF0YV9fKSxoW2ZdPWwsWmIoaFtmXSxlLG4sZixoLCRiKHMsbikpKTtyZXR1cm4gbmV3IHJ3KG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdih0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGwsdT1yW3NdLGM9dS5sZW5ndGgsaD0wO2g8YzsrK2gpaWYobD11W2hdKXtmb3IodmFyIGYscD10LmNhbGwobCxsLl9fZGF0YV9fLGgsdSksZD0kYihsLG4pLG09MCx5PXAubGVuZ3RoO208eTsrK20pKGY9cFttXSkmJlpiKGYsZSxuLG0scCxkKTtvLnB1c2gocCksYS5wdXNoKGwpfXJldHVybiBuZXcgcncobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZHYodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIG8sYT1lW2ldLHM9YS5sZW5ndGgsbD1yW2ldPVtdLHU9MDt1PHM7Kyt1KShvPWFbdV0pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLHUsYSkmJmwucHVzaChvKTtyZXR1cm4gbmV3IHJ3KHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9TWF0aC5taW4ocixuLmxlbmd0aCksbz1uZXcgQXJyYXkociksYT0wO2E8aTsrK2EpZm9yKHZhciBzLGw9ZVthXSx1PW5bYV0sYz1sLmxlbmd0aCxoPW9bYV09bmV3IEFycmF5KGMpLGY9MDtmPGM7KytmKShzPWxbZl18fHVbZl0pJiYoaFtmXT1zKTtmb3IoO2E8cjsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgcncobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGV3KHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1pdygpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHM9cltvXSxsPXMubGVuZ3RoLHU9MDt1PGw7Kyt1KWlmKGE9c1t1XSl7dmFyIGM9JGIoYSxlKTtaYihhLHQsbix1LHMse3RpbWU6Yy50aW1lK2MuZGVsYXkrYy5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmMuZHVyYXRpb24sZWFzZTpjLmVhc2V9KX1yZXR1cm4gbmV3IHJ3KHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOm93LmNhbGwsbm9kZXM6b3cubm9kZXMsbm9kZTpvdy5ub2RlLHNpemU6b3cuc2l6ZSxlbXB0eTpvdy5lbXB0eSxlYWNoOm93LmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyRiKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KGUpP1liOlhiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyx0KSxzPWEub247cyE9PXImJihpPShyPXMpLmNvcHkoKSkub24oZSxuKSxhLm9uPWl9fShuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49b3YodCkscj0idHJhbnNmb3JtIj09PW4/eWI6dHc7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09cz9udWxsOmE9PT1yJiZzPT09aT9vOm89ZShyPWEsaT1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9bih0aGlzKTtpZihudWxsIT1zKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PXM/bnVsbDphPT09ciYmcz09PWk/bzpvPWUocj1hLGk9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkobixyLEpiKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKG4pOihuLmxvY2FsP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PW4/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSkobixyLGUrIiIpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgcj1vdih0KTtyZXR1cm4gdGhpcy50d2VlbihuLChyLmxvY2FsP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciBuPXRoaXMscj1lLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24oZSl7bi5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscihlKSl9fXJldHVybiBuLl92YWx1ZT1lLG59OmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciBuPXRoaXMscj1lLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24oZSl7bi5zZXRBdHRyaWJ1dGUodCxyKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn0pKHIsZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/bWI6dHc7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89eHYodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLHh2KHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1uJiZhPT09cj9pOmk9ZShuPW8scj1hKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT14dih0aGlzLHQpLHM9bih0aGlzKTtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCkscz14dih0aGlzLHQpKSxhPT09cz9udWxsOmE9PT1yJiZzPT09aT9vOm89ZShyPWEsaT1zKX19KHQscixKYih0aGlzLCJzdHlsZS4iK3QsZSkpOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXh2KHRoaXMsdCk7cmV0dXJuIG89PT1uP251bGw6bz09PXI/aTppPWUocj1vLG4pfX0odCxyLGUrIiIpLG4pfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLGZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPWUuYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihlKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShlKSxuKX19cmV0dXJuIHIuX3ZhbHVlPWUscn0odCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oSmIodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKHQ9dGhpcy5faWQsZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pKTt2YXIgdH0sdHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPSRiKHRoaXMubm9kZSgpLG4pLnR3ZWVuLG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoKHI9aVtvXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0LGUpe3ZhciBuLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9WGIodGhpcyx0KSxvPWkudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0ocj1uPW8pLmxlbmd0aDthPHM7KythKWlmKHJbYV0ubmFtZT09PWUpeyhyPXIuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9aS50d2Vlbj1yfX06ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVhiKHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1yKXtpPShyPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sbD0wLHU9aS5sZW5ndGg7bDx1OysrbClpZihpW2xdLm5hbWU9PT1lKXtpW2xdPXM7YnJlYWt9bD09PXUmJmkucHVzaChzKX1vLnR3ZWVuPWl9fSkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe1liKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe1liKHRoaXMsdCkuZGVsYXk9ZX19KShlLHQpKTokYih0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe1hiKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe1hiKHRoaXMsdCkuZHVyYXRpb249ZX19KShlLHQpKTokYih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7WGIodGhpcyx0KS5lYXNlPWV9fShlLHQpKTokYih0aGlzLm5vZGUoKSxlKS5lYXNlfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxNYXRoLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybi0tdCp0KigoZSsxKSp0K2UpKzF9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKGUrMSkqdC1lKToodC09MikqdCooKGUrMSkqdCtlKSsyKS8yfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCk7dmFyIHN3PTIqTWF0aC5QSSxsdz0oZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89c3cpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUqTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qc3cpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxmdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1zdyk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipzdyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLGZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPXN3KTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL24pKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qc3cpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSx7dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9fSk7ZnVuY3Rpb24gdXcodCxlKXtmb3IodmFyIG47IShuPXQuX190cmFuc2l0aW9uKXx8IShuPW5bZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm4gbHcudGltZT1NYigpLGx3O3JldHVybiBufWZ1bmN0aW9uIGN3KHQpe3JldHVybnt0eXBlOnR9fVd2LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKGkgaW4gZT1udWxsPT1lP251bGw6ZSsiIixvKShuPW9baV0pLm5hbWU9PT1lPyhyPW4uc3RhdGU+cWImJm4uc3RhdGU8UWIsbi5zdGF0ZT1LYixuLnRpbWVyLnN0b3AoKSxyJiZuLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9baV0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX0odGhpcyx0KX0pfSxXdi5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBydz8oZT10Ll9pZCx0PXQuX25hbWUpOihlPWl3KCksKG49bHcpLnRpbWU9TWIoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHM9cltvXSxsPXMubGVuZ3RoLHU9MDt1PGw7Kyt1KShhPXNbdV0pJiZaYihhLHQsZSx1LHMsbnx8dXcoYSxlKSk7cmV0dXJuIG5ldyBydyhyLHRoaXMuX3BhcmVudHMsdCxlKX0sWyJlIiwidyJdLm1hcChjdyksWyJuIiwicyJdLm1hcChjdyksWyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoY3cpLE1hdGgsTWF0aCxNYXRoLE1hdGgsQXJyYXk7dmFyIGh3PU1hdGguUEksZnc9Mipodyxwdz1mdy0xZS02O2Z1bmN0aW9uIGR3KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gbXcoKXtyZXR1cm4gbmV3IGR3fWR3LnByb3RvdHlwZT1tdy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmR3LG1vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArZSsiLCIrKHRoaXMuX3gxPStuKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArbisiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz0obj0rbiktKHQ9K3QpLGw9KHI9K3IpLShlPStlKSx1PW8tdCxjPWEtZSxoPXUqdStjKmM7aWYoKGk9K2kpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2UgaWYoaD4xZS02KWlmKE1hdGguYWJzKGMqcy1sKnUpPjFlLTYmJmkpe3ZhciBmPW4tbyxwPXItYSxkPXMqcytsKmwsbT1mKmYrcCpwLHk9TWF0aC5zcXJ0KGQpLGc9TWF0aC5zcXJ0KGgpLHY9aSpNYXRoLnRhbigoaHctTWF0aC5hY29zKChkK2gtbSkvKDIqeSpnKSkpLzIpLF89di9nLGI9di95O01hdGguYWJzKF8tMSk+MWUtNiYmKHRoaXMuXys9IkwiKyh0K18qdSkrIiwiKyhlK18qYykpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhjKmY+dSpwKSsiLCIrKHRoaXMuX3gxPXQrYipzKSsiLCIrKHRoaXMuX3kxPWUrYipsKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpfSxhcmM6ZnVuY3Rpb24odCxlLG4scixpLG8pe3Q9K3QsZT0rZTt2YXIgYT0obj0rbikqTWF0aC5jb3Mocikscz1uKk1hdGguc2luKHIpLGw9dCthLHU9ZStzLGM9MV5vLGg9bz9yLWk6aS1yO2lmKG48MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIituKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrbCsiLCIrdTooTWF0aC5hYnModGhpcy5feDEtbCk+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtdSk+MWUtNikmJih0aGlzLl8rPSJMIitsKyIsIit1KSxuJiYoaDwwJiYoaD1oJWZ3K2Z3KSxoPnB3P3RoaXMuXys9IkEiK24rIiwiK24rIiwwLDEsIitjKyIsIisodC1hKSsiLCIrKGUtcykrIkEiK24rIiwiK24rIiwwLDEsIitjKyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT11KTpoPjFlLTYmJih0aGlzLl8rPSJBIituKyIsIituKyIsMCwiKyArKGg+PWh3KSsiLCIrYysiLCIrKHRoaXMuX3gxPXQrbipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1lK24qTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtuKyJ2IisgK3IrImgiKy1uKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHl3PW13O2Z1bmN0aW9uIGd3KCl7fWZ1bmN0aW9uIHZ3KHQsZSl7dmFyIG49bmV3IGd3O2lmKHQgaW5zdGFuY2VvZiBndyl0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLG89dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxvOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8bzspbi5zZXQoZShyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpbi5zZXQoYSx0W2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBfdygpe31ndy5wcm90b3R5cGU9dncucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpndyxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgYnc9dncucHJvdG90eXBlO193LnByb3RvdHlwZT0oZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgX3c7aWYodCBpbnN0YW5jZW9mIF93KXQuZWFjaChmdW5jdGlvbih0KXtuLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPGk7KW4uYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspbi5hZGQoZSh0W3JdLHIsdCkpfXJldHVybiBufSkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpfdyxoYXM6YncuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6YncucmVtb3ZlLGNsZWFyOmJ3LmNsZWFyLHZhbHVlczpidy5rZXlzLHNpemU6Yncuc2l6ZSxlbXB0eTpidy5lbXB0eSxlYWNoOmJ3LmVhY2h9LEFycmF5O3ZhciB3dz17fSx4dz17fSxDdz0zNCxFdz0xMCxTdz0xMztmdW5jdGlvbiBrdyh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyJdIn0pLmpvaW4oIiwiKSsifSIpfXZhciBUdz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxvPXQubGVuZ3RoLGE9MCxzPTAsbD1vPD0wLHU9ITE7ZnVuY3Rpb24gYygpe2lmKGwpcmV0dXJuIHh3O2lmKHUpcmV0dXJuIHU9ITEsd3c7dmFyIGUscixpPWE7aWYodC5jaGFyQ29kZUF0KGkpPT09Q3cpe2Zvcig7YSsrPG8mJnQuY2hhckNvZGVBdChhKSE9PUN3fHx0LmNoYXJDb2RlQXQoKythKT09PUN3Oyk7cmV0dXJuKGU9YSk+PW8/bD0hMDoocj10LmNoYXJDb2RlQXQoYSsrKSk9PT1Fdz91PSEwOnI9PT1TdyYmKHU9ITAsdC5jaGFyQ29kZUF0KGEpPT09RXcmJisrYSksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDthPG87KXtpZigocj10LmNoYXJDb2RlQXQoZT1hKyspKT09PUV3KXU9ITA7ZWxzZSBpZihyPT09U3cpdT0hMCx0LmNoYXJDb2RlQXQoYSk9PT1FdyYmKythO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gbD0hMCx0LnNsaWNlKGksbyl9Zm9yKHQuY2hhckNvZGVBdChvLTEpPT09RXcmJi0tbyx0LmNoYXJDb2RlQXQoby0xKT09PVN3JiYtLW87KHI9YygpKSE9PXh3Oyl7Zm9yKHZhciBoPVtdO3IhPT13dyYmciE9PXh3OyloLnB1c2gocikscj1jKCk7ZSYmbnVsbD09KGg9ZShoLHMrKykpfHxpLnB1c2goaCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOmUudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LGUpe3ZhciBuLGksbz1yKHQsZnVuY3Rpb24odCxyKXtpZihuKXJldHVybiBuKHQsci0xKTtpPXQsbj1lP2Z1bmN0aW9uKHQsZSl7dmFyIG49a3codCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGUobihyKSxpLHQpfX0odCxlKTprdyh0KX0pO3JldHVybiBvLmNvbHVtbnM9aXx8W10sb30scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gZXx8bi5wdXNoKGVbcl09cil9KSxufShlKSksW24ubWFwKG8pLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGkpLmpvaW4oIlxuIil9fX0sQXc9VHcoIiwiKS5wYXJzZSxQdz1UdygiXHQiKS5wYXJzZTtmdW5jdGlvbiBPdyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfXZhciBJdz1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oT3cpfTtmdW5jdGlvbiBNdyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApLEl3KGUsbikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSl9fWZ1bmN0aW9uIE53KHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBJdyhlLG4pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpfSl9fU13KEF3KSxNdyhQdyksTncoImFwcGxpY2F0aW9uL3htbCIpLE53KCJ0ZXh0L2h0bWwiKTt2YXIgUnc9TncoImltYWdlL3N2Zyt4bWwiKTtmdW5jdGlvbiBEdyh0LGUsbixyKXtpZihpc05hTihlKXx8aXNOYU4obikpcmV0dXJuIHQ7dmFyIGksbyxhLHMsbCx1LGMsaCxmLHA9dC5fcm9vdCxkPXtkYXRhOnJ9LG09dC5feDAseT10Ll95MCxnPXQuX3gxLHY9dC5feTE7aWYoIXApcmV0dXJuIHQuX3Jvb3Q9ZCx0O2Zvcig7cC5sZW5ndGg7KWlmKCh1PWU+PShvPShtK2cpLzIpKT9tPW86Zz1vLChjPW4+PShhPSh5K3YpLzIpKT95PWE6dj1hLGk9cCwhKHA9cFtoPWM8PDF8dV0pKXJldHVybiBpW2hdPWQsdDtpZihzPSt0Ll94LmNhbGwobnVsbCxwLmRhdGEpLGw9K3QuX3kuY2FsbChudWxsLHAuZGF0YSksZT09PXMmJm49PT1sKXJldHVybiBkLm5leHQ9cCxpP2lbaF09ZDp0Ll9yb290PWQsdDtkb3tpPWk/aVtoXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKHU9ZT49KG89KG0rZykvMikpP209bzpnPW8sKGM9bj49KGE9KHkrdikvMikpP3k9YTp2PWF9d2hpbGUoKGg9Yzw8MXx1KT09KGY9KGw+PWEpPDwxfHM+PW8pKTtyZXR1cm4gaVtmXT1wLGlbaF09ZCx0fXZhciBMdz1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1yLHRoaXMueTE9aX07ZnVuY3Rpb24gancodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gRncodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gVncodCxlLG4scixpLG8pe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBCdyh0KXtmb3IodmFyIGU9e2RhdGE6dC5kYXRhfSxuPWU7dD10Lm5leHQ7KW49bi5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIGV9dmFyIHp3PShmdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IFZ3KG51bGw9PWU/anc6ZSxudWxsPT1uP0Z3Om4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfSkucHJvdG90eXBlPVZ3LnByb3RvdHlwZTt6dy5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5ldyBWdyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gbjtpZighci5sZW5ndGgpcmV0dXJuIG4uX3Jvb3Q9Qncociksbjtmb3IodD1be3NvdXJjZTpyLHRhcmdldDpuLl9yb290PW5ldyBBcnJheSg0KX1dO3I9dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1yLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpyLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpyLnRhcmdldFtpXT1CdyhlKSk7cmV0dXJuIG59LHp3LmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIER3KHRoaXMuY292ZXIoZSxuKSxlLG4sdCl9LHp3LmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvPXQubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9MS8wLHU9MS8wLGM9LTEvMCxoPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKHI9K3RoaXMuX3guY2FsbChudWxsLGU9dFtuXSkpfHxpc05hTihpPSt0aGlzLl95LmNhbGwobnVsbCxlKSl8fChhW25dPXIsc1tuXT1pLHI8bCYmKGw9cikscj5jJiYoYz1yKSxpPHUmJih1PWkpLGk+aCYmKGg9aSkpO2ZvcihjPGwmJihsPXRoaXMuX3gwLGM9dGhpcy5feDEpLGg8dSYmKHU9dGhpcy5feTAsaD10aGlzLl95MSksdGhpcy5jb3ZlcihsLHUpLmNvdmVyKGMsaCksbj0wO248bzsrK24pRHcodGhpcyxhW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LHp3LmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKG4pKWk9KG49TWF0aC5mbG9vcih0KSkrMSxvPShyPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtpZighKG4+dHx8dD5pfHxyPmV8fGU+bykpcmV0dXJuIHRoaXM7dmFyIGEscyxsPWktbix1PXRoaXMuX3Jvb3Q7c3dpdGNoKHM9KGU8KHIrbykvMik8PDF8dDwobitpKS8yKXtjYXNlIDA6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT11LHU9YX13aGlsZShvPXIrKGwqPTIpLHQ+KGk9bitsKXx8ZT5vKTticmVhaztjYXNlIDE6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT11LHU9YX13aGlsZShvPXIrKGwqPTIpLChuPWktbCk+dHx8ZT5vKTticmVhaztjYXNlIDI6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT11LHU9YX13aGlsZShyPW8tKGwqPTIpLHQ+KGk9bitsKXx8cj5lKTticmVhaztjYXNlIDM6ZG97KGE9bmV3IEFycmF5KDQpKVtzXT11LHU9YX13aGlsZShyPW8tKGwqPTIpLChuPWktbCk+dHx8cj5lKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9dSl9cmV0dXJuIHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc30sencuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSx0fSx6dy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LHp3LmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbyxhLHMsbCx1LGM9dGhpcy5feDAsaD10aGlzLl95MCxmPXRoaXMuX3gxLHA9dGhpcy5feTEsZD1bXSxtPXRoaXMuX3Jvb3Q7Zm9yKG0mJmQucHVzaChuZXcgTHcobSxjLGgsZixwKSksbnVsbD09bj9uPTEvMDooYz10LW4saD1lLW4sZj10K24scD1lK24sbio9bik7bD1kLnBvcCgpOylpZighKCEobT1sLm5vZGUpfHwoaT1sLngwKT5mfHwobz1sLnkwKT5wfHwoYT1sLngxKTxjfHwocz1sLnkxKTxoKSlpZihtLmxlbmd0aCl7dmFyIHk9KGkrYSkvMixnPShvK3MpLzI7ZC5wdXNoKG5ldyBMdyhtWzNdLHksZyxhLHMpLG5ldyBMdyhtWzJdLGksZyx5LHMpLG5ldyBMdyhtWzFdLHksbyxhLGcpLG5ldyBMdyhtWzBdLGksbyx5LGcpKSwodT0oZT49Zyk8PDF8dD49eSkmJihsPWRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0xXT1kW2QubGVuZ3RoLTEtdV0sZFtkLmxlbmd0aC0xLXVdPWwpfWVsc2V7dmFyIHY9dC0rdGhpcy5feC5jYWxsKG51bGwsbS5kYXRhKSxfPWUtK3RoaXMuX3kuY2FsbChudWxsLG0uZGF0YSksYj12KnYrXypfO2lmKGI8bil7dmFyIHc9TWF0aC5zcXJ0KG49Yik7Yz10LXcsaD1lLXcsZj10K3cscD1lK3cscj1tLmRhdGF9fXJldHVybiByfSx6dy5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUsbixyLGksbyxhLHMsbCx1LGMsaCxmLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLG09dGhpcy5feTAseT10aGlzLl94MSxnPXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKHU9bz49KHM9KGQreSkvMikpP2Q9czp5PXMsKGM9YT49KGw9KG0rZykvMikpP209bDpnPWwsZT1wLCEocD1wW2g9Yzw8MXx1XSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKG49ZSxmPWgpfWZvcig7cC5kYXRhIT09dDspaWYocj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOmU/KGk/ZVtoXT1pOmRlbGV0ZSBlW2hdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihuP25bZl09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LHp3LnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LHp3LnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sencuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRveysrdH13aGlsZShlPWUubmV4dCl9KSx0fSx6dy52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscz1bXSxsPXRoaXMuX3Jvb3Q7Zm9yKGwmJnMucHVzaChuZXcgTHcobCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQobD1lLm5vZGUscj1lLngwLGk9ZS55MCxvPWUueDEsYT1lLnkxKSYmbC5sZW5ndGgpe3ZhciB1PShyK28pLzIsYz0oaSthKS8yOyhuPWxbM10pJiZzLnB1c2gobmV3IEx3KG4sdSxjLG8sYSkpLChuPWxbMl0pJiZzLnB1c2gobmV3IEx3KG4scixjLHUsYSkpLChuPWxbMV0pJiZzLnB1c2gobmV3IEx3KG4sdSxpLG8sYykpLChuPWxbMF0pJiZzLnB1c2gobmV3IEx3KG4scixpLHUsYykpfXJldHVybiB0aGlzfSx6dy52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10scj1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBMdyh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgbyxhPWUueDAscz1lLnkwLGw9ZS54MSx1PWUueTEsYz0oYStsKS8yLGg9KHMrdSkvMjsobz1pWzBdKSYmbi5wdXNoKG5ldyBMdyhvLGEscyxjLGgpKSwobz1pWzFdKSYmbi5wdXNoKG5ldyBMdyhvLGMscyxsLGgpKSwobz1pWzJdKSYmbi5wdXNoKG5ldyBMdyhvLGEsaCxjLHUpKSwobz1pWzNdKSYmbi5wdXNoKG5ldyBMdyhvLGMsaCxsLHUpKX1yLnB1c2goZSl9Zm9yKDtlPXIucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSx6dy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sencueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LE1hdGgsTWF0aC5zcXJ0KDUpO3ZhciBVdz1mdW5jdGlvbih0LGUpe2lmKChuPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgbixyPXQuc2xpY2UoMCxuKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShuKzEpXX0sSHc9ZnVuY3Rpb24odCl7cmV0dXJuKHQ9VXcoTWF0aC5hYnModCkpKT90WzFdOk5hTn0scXc9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtXCggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEd3KHQpe3JldHVybiBuZXcgV3codCl9ZnVuY3Rpb24gV3codCl7aWYoIShlPXF3LmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7dGhpcy5maWxsPWVbMV18fCIgIix0aGlzLmFsaWduPWVbMl18fCI+Iix0aGlzLnNpZ249ZVszXXx8Ii0iLHRoaXMuc3ltYm9sPWVbNF18fCIiLHRoaXMuemVybz0hIWVbNV0sdGhpcy53aWR0aD1lWzZdJiYrZVs2XSx0aGlzLmNvbW1hPSEhZVs3XSx0aGlzLnByZWNpc2lvbj1lWzhdJiYrZVs4XS5zbGljZSgxKSx0aGlzLnRyaW09ISFlWzldLHRoaXMudHlwZT1lWzEwXXx8IiJ9R3cucHJvdG90eXBlPVd3LnByb3RvdHlwZSxXdy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgUXcsS3csWncsWXcsWHc9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKGk+MCl7aWYoISt0W3JdKWJyZWFrIHQ7aT0wfX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0sJHc9ZnVuY3Rpb24odCxlKXt2YXIgbj1Vdyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfSxKdz17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gJHcoMTAwKnQsZSl9LHI6JHcsczpmdW5jdGlvbih0LGUpe3ZhciBuPVV3KHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV0sbz1pLShRdz0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsYT1yLmxlbmd0aDtyZXR1cm4gbz09PWE/cjpvPmE/cituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/ci5zbGljZSgwLG8pKyIuIityLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK1V3KHQsTWF0aC5tYXgoMCxlK28tMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19LHR4PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxleD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtLdz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KGU9dC5ncm91cGluZyxuPXQudGhvdXNhbmRzLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5yJiYocz1NYXRoLm1heCgxLHItbCkpLG8ucHVzaCh0LnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+cikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4obil9KTp0eCxpPXQuY3VycmVuY3ksbz10LmRlY2ltYWwsYT10Lm51bWVyYWxzP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pfX0odC5udW1lcmFscyk6dHgscz10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiBsKHQpe3ZhciBlPSh0PUd3KHQpKS5maWxsLG49dC5hbGlnbixsPXQuc2lnbix1PXQuc3ltYm9sLGM9dC56ZXJvLGg9dC53aWR0aCxmPXQuY29tbWEscD10LnByZWNpc2lvbixkPXQudHJpbSxtPXQudHlwZTsibiI9PT1tPyhmPSEwLG09ImciKTpKd1ttXXx8KG51bGw9PXAmJihwPTEyKSxkPSEwLG09ImciKSwoY3x8IjAiPT09ZSYmIj0iPT09bikmJihjPSEwLGU9IjAiLG49Ij0iKTt2YXIgeT0iJCI9PT11P2lbMF06IiMiPT09dSYmL1tib3hYXS8udGVzdChtKT8iMCIrbS50b0xvd2VyQ2FzZSgpOiIiLGc9IiQiPT09dT9pWzFdOi9bJXBdLy50ZXN0KG0pP3M6IiIsdj1Kd1ttXSxfPS9bZGVmZ3BycyVdLy50ZXN0KG0pO2Z1bmN0aW9uIGIodCl7dmFyIGkscyx1LGI9eSx3PWc7aWYoImMiPT09bSl3PXYodCkrdyx0PSIiO2Vsc2V7dmFyIHg9KHQ9K3QpPDA7aWYodD12KE1hdGguYWJzKHQpLHApLGQmJih0PVh3KHQpKSx4JiYwPT0rdCYmKHg9ITEpLGI9KHg/IigiPT09bD9sOiItIjoiLSI9PT1sfHwiKCI9PT1sPyIiOmwpK2Isdz0oInMiPT09bT9leFs4K1F3LzNdOiIiKSt3Kyh4JiYiKCI9PT1sPyIpIjoiIiksXylmb3IoaT0tMSxzPXQubGVuZ3RoOysraTxzOylpZig0OD4odT10LmNoYXJDb2RlQXQoaSkpfHx1PjU3KXt3PSg0Nj09PXU/byt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkrdyx0PXQuc2xpY2UoMCxpKTticmVha319ZiYmIWMmJih0PXIodCwxLzApKTt2YXIgQz1iLmxlbmd0aCt0Lmxlbmd0aCt3Lmxlbmd0aCxFPUM8aD9uZXcgQXJyYXkoaC1DKzEpLmpvaW4oZSk6IiI7c3dpdGNoKGYmJmMmJih0PXIoRSt0LEUubGVuZ3RoP2gtdy5sZW5ndGg6MS8wKSxFPSIiKSxuKXtjYXNlIjwiOnQ9Yit0K3crRTticmVhaztjYXNlIj0iOnQ9YitFK3QrdzticmVhaztjYXNlIl4iOnQ9RS5zbGljZSgwLEM9RS5sZW5ndGg+PjEpK2IrdCt3K0Uuc2xpY2UoQyk7YnJlYWs7ZGVmYXVsdDp0PUUrYit0K3d9cmV0dXJuIGEodCl9cmV0dXJuIHA9bnVsbD09cD82Oi9bZ3Byc10vLnRlc3QobSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwKSksYi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxifXJldHVybntmb3JtYXQ6bCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxlKXt2YXIgbj1sKCgodD1Hdyh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoSHcoZSkvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPWV4Wzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4oaSp0KStvfX19fSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KSxadz1Ldy5mb3JtYXQsWXc9S3cuZm9ybWF0UHJlZml4O3ZhciBueD1mdW5jdGlvbigpe3JldHVybiBuZXcgcnh9O2Z1bmN0aW9uIHJ4KCl7dGhpcy5yZXNldCgpfXJ4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cngscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtveChpeCx0LHRoaXMudCksb3godGhpcyxpeC5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9aXgudDp0aGlzLnM9aXgudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgaXg9bmV3IHJ4O2Z1bmN0aW9uIG94KHQsZSxuKXt2YXIgcj10LnM9ZStuLGk9ci1lO3QudD1lLShyLWkpKyhuLWkpfXZhciBheD1NYXRoLlBJLHN4PWF4LzIsbHg9MipheCx1eD1heC8xODAsY3g9KE1hdGgsTWF0aC5hdGFuKSxoeD1NYXRoLmF0YW4yLGZ4PU1hdGguY29zLHB4PShNYXRoLE1hdGgsTWF0aCxNYXRoLE1hdGgsTWF0aC5zaW4pLGR4PShNYXRoLE1hdGguc3FydCk7ZnVuY3Rpb24gbXgodCl7cmV0dXJuIHQ+MT9zeDp0PC0xPy1zeDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24geXgodCxlKXtyZXR1cm5bdD5heD90LWx4OnQ8LWF4P3QrbHg6dCxlXX1mdW5jdGlvbiBneCgpe31mdW5jdGlvbiB2eCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1meChlKSxpPWZ4KG4pLG89dChyKmkpO3JldHVybltvKmkqcHgoZSksbypweChuKV19fWZ1bmN0aW9uIF94KHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPWR4KGUqZStuKm4pLGk9dChyKSxvPXB4KGkpLGE9ZngoaSk7cmV0dXJuW2h4KGUqbyxyKmEpLG14KHImJm4qby9yKV19fWZ1bmN0aW9uIGJ4KHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gd3godCl7dmFyIGU9MCxuPXQuY2hpbGRyZW4scj1uJiZuLmxlbmd0aDtpZihyKWZvcig7LS1yPj0wOyllKz1uW3JdLnZhbHVlO2Vsc2UgZT0xO3QudmFsdWU9ZX1mdW5jdGlvbiB4eCh0LGUpe3ZhciBuLHIsaSxvLGEscz1uZXcga3godCksbD0rdC52YWx1ZSYmKHMudmFsdWU9dC52YWx1ZSksdT1bc107Zm9yKG51bGw9PWUmJihlPUN4KTtuPXUucG9wKCk7KWlmKGwmJihuLnZhbHVlPStuLmRhdGEudmFsdWUpLChpPWUobi5kYXRhKSkmJihhPWkubGVuZ3RoKSlmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkoYSksbz1hLTE7bz49MDstLW8pdS5wdXNoKHI9bi5jaGlsZHJlbltvXT1uZXcga3goaVtvXSkpLHIucGFyZW50PW4sci5kZXB0aD1uLmRlcHRoKzE7cmV0dXJuIHMuZWFjaEJlZm9yZShTeCl9ZnVuY3Rpb24gQ3godCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gRXgodCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIFN4KHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24ga3godCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9TWF0aCxueCgpLG54KCksbngoKSx5eC5pbnZlcnQ9eXgsbngoKSxueCgpLG54KCksbngoKSxueCgpLGd4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3gscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0sZngoMzAqdXgpLHZ4KGZ1bmN0aW9uKHQpe3JldHVybiBkeCgyLygxK3QpKX0pLmludmVydD1feChmdW5jdGlvbih0KXtyZXR1cm4gMipteCh0LzIpfSksdngoZnVuY3Rpb24odCl7cmV0dXJuKHQ9KGU9dCk+MT8wOmU8LTE/YXg6TWF0aC5hY29zKGUpKSYmdC9weCh0KTt2YXIgZX0pLmludmVydD1feChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLGJ4LmludmVydD1ieCxfeChjeCksX3gobXgpLF94KGZ1bmN0aW9uKHQpe3JldHVybiAyKmN4KHQpfSksa3gucHJvdG90eXBlPXh4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6a3gsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIod3gpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG89dGhpcyxhPVtvXTtkb3tmb3IoZT1hLnJldmVyc2UoKSxhPVtdO289ZS5wb3AoKTspaWYodChvKSxuPW8uY2hpbGRyZW4pZm9yKHI9MCxpPW4ubGVuZ3RoO3I8aTsrK3IpYS5wdXNoKG5bcl0pfXdoaWxlKGEubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaT10aGlzLG89W2ldLGE9W107aT1vLnBvcCgpOylpZihhLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKW8ucHVzaChlW25dKTtmb3IoO2k9YS5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXRoaXMsaT1bcl07cj1pLnBvcCgpOylpZih0KHIpLGU9ci5jaGlsZHJlbilmb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWkucHVzaChlW25dKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxyPWUuY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KW4rPXJbaV0udmFsdWU7ZS52YWx1ZT1ufSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxyPWUuYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PW4ucG9wKCksZT1yLnBvcCgpO3Q9PT1lOylpPXQsdD1uLnBvcCgpLGU9ci5wb3AoKTtyZXR1cm4gaX0oZSx0KSxyPVtlXTtlIT09bjspci5wdXNoKGU9ZS5wYXJlbnQpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihuKXtuIT09dCYmZS5wdXNoKHtzb3VyY2U6bi5wYXJlbnQsdGFyZ2V0Om59KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4geHgodGhpcykuZWFjaEJlZm9yZShFeCl9fSxBcnJheTt2YXIgVHg9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsbD1hLmxlbmd0aCx1PXQudmFsdWUmJihyLWUpL3QudmFsdWU7KytzPGw7KShvPWFbc10pLnkwPW4sby55MT1pLG8ueDA9ZSxvLngxPWUrPW8udmFsdWUqdX07T2JqZWN0LmNyZWF0ZShreC5wcm90b3R5cGUpO3ZhciBBeD1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSxsPWEubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8bDspKG89YVtzXSkueDA9ZSxvLngxPXIsby55MD1uLG8ueTE9bis9by52YWx1ZSp1fSxQeD0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gT3godCxlLG4scixpLG8pe2Zvcih2YXIgYSxzLGwsdSxjLGgsZixwLGQsbSx5LGc9W10sdj1lLmNoaWxkcmVuLF89MCxiPTAsdz12Lmxlbmd0aCx4PWUudmFsdWU7Xzx3Oyl7bD1pLW4sdT1vLXI7ZG97Yz12W2IrK10udmFsdWV9d2hpbGUoIWMmJmI8dyk7Zm9yKGg9Zj1jLHk9YypjKihtPU1hdGgubWF4KHUvbCxsL3UpLyh4KnQpKSxkPU1hdGgubWF4KGYveSx5L2gpO2I8dzsrK2Ipe2lmKGMrPXM9dltiXS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cykseT1jKmMqbSwocD1NYXRoLm1heChmL3kseS9oKSk+ZCl7Yy09czticmVha31kPXB9Zy5wdXNoKGE9e3ZhbHVlOmMsZGljZTpsPHUsY2hpbGRyZW46di5zbGljZShfLGIpfSksYS5kaWNlP1R4KGEsbixyLGkseD9yKz11KmMveDpvKTpBeChhLG4scix4P24rPWwqYy94OmksbykseC09YyxfPWJ9cmV0dXJuIGd9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLG8pe094KGUsdCxuLHIsaSxvKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSkoUHgpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLG8pe2lmKChhPXQuX3NxdWFyaWZ5KSYmYS5yYXRpbz09PWUpZm9yKHZhciBhLHMsbCx1LGMsaD0tMSxmPWEubGVuZ3RoLHA9dC52YWx1ZTsrK2g8Zjspe2ZvcihsPShzPWFbaF0pLmNoaWxkcmVuLHU9cy52YWx1ZT0wLGM9bC5sZW5ndGg7dTxjOysrdSlzLnZhbHVlKz1sW3VdLnZhbHVlO3MuZGljZT9UeChzLG4scixpLHIrPShvLXIpKnMudmFsdWUvcCk6QXgocyxuLHIsbis9KGktbikqcy52YWx1ZS9wLG8pLHAtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1hPU94KGUsdCxuLHIsaSxvKSxhLnJhdGlvPWV9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oUHgpO3ZhciBJeD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfSxNeD0oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhuPXQsdD0wKTpuLT10LGZ1bmN0aW9uKCl7cmV0dXJuIGUoKSpuK3R9fXJldHVybiBuLnNvdXJjZT10LG59KEl4KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXt2YXIgcixpO3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbixmdW5jdGlvbigpe3ZhciBvO2lmKG51bGwhPXIpbz1yLHI9bnVsbDtlbHNlIGRve3I9MiplKCktMSxvPTIqZSgpLTEsaT1yKnIrbypvfXdoaWxlKCFpfHxpPjEpO3JldHVybiB0K24qbypNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fXJldHVybiBuLnNvdXJjZT10LG59KEl4KSksTng9KGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbigpe3ZhciB0PU14LnNvdXJjZShlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KEl4KSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAscj0wO3I8dDsrK3Ipbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufShJeCkpLFJ4PShmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49Tnguc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oSXgpLGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KEl4KSxBcnJheS5wcm90b3R5cGUpLER4PVJ4Lm1hcCxMeD1SeC5zbGljZSxqeD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LEZ4PWZ1bmN0aW9uKHQpe3JldHVybit0fSxWeD1bMCwxXTtmdW5jdGlvbiBCeCh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfTpqeChlKX1mdW5jdGlvbiB6eCh0LGUsbixyKXt2YXIgaT10WzBdLG89dFsxXSxhPWVbMF0scz1lWzFdO3JldHVybiBvPGk/KGk9bihvLGkpLGE9cihzLGEpKTooaT1uKGksbyksYT1yKGEscykpLGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiBVeCh0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSxzPS0xO2Zvcih0W2ldPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8aTspb1tzXT1uKHRbc10sdFtzKzFdKSxhW3NdPXIoZVtzXSxlW3MrMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1qZyh0LGUsMSxpKS0xO3JldHVybiBhW25dKG9bbl0oZSkpfX12YXIgSHg9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dFswXSxvPXRbdC5sZW5ndGgtMV0sYT1aZyhpLG8sbnVsbD09ZT8xMDplKTtzd2l0Y2goKG49R3cobnVsbD09bj8iLGYiOm4pKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKTtyZXR1cm4gbnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihIdyhlKS8zKSkpLUh3KE1hdGguYWJzKHQpKSl9KGEscykpfHwobi5wcmVjaXNpb249ciksWXcobixzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4ocj1mdW5jdGlvbih0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLEh3KGUpLUh3KHQpKSsxfShhLE1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKSkpfHwobi5wcmVjaXNpb249ci0oImUiPT09bi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1IdyhNYXRoLmFicyh0KSkpfShhKSl8fChuLnByZWNpc2lvbj1yLTIqKCIlIj09PW4udHlwZSkpfXJldHVybiBadyhuKX07ZnVuY3Rpb24gcXgoKXt2YXIgdD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPVZ4LGE9Vngscz11YixsPSExO2Z1bmN0aW9uIHUoKXtyZXR1cm4gbj1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj9VeDp6eCxyPWk9bnVsbCxjfWZ1bmN0aW9uIGMoZSl7cmV0dXJuKHJ8fChyPW4obyxhLGw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dChlPStlLG49K24pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9ZT8wOnQ+PW4/MTpyKHQpfX19KHQpOnQscykpKSgrZSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihpfHwoaT1uKGEsbyxCeCxsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/ZTp0Pj0xP246cih0KX19fShlKTplKSkpKCt0KX0sYy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RHguY2FsbCh0LEZ4KSx1KCkpOm8uc2xpY2UoKX0sYy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1MeC5jYWxsKHQpLHUoKSk6YS5zbGljZSgpfSxjLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9THguY2FsbCh0KSxzPWNiLHUoKX0sYy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0hIXQsdSgpKTpsfSxjLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsdSgpKTpzfSx1KCl9KEJ4LG9iKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGU9dCxxeCgpLmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKTt2YXIgZX0sZnVuY3Rpb24odCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBRZyhuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEh4KGUoKSx0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGk9ZSgpLG89MCxhPWkubGVuZ3RoLTEscz1pW29dLGw9aVthXTtyZXR1cm4gbDxzJiYocj1zLHM9bCxsPXIscj1vLG89YSxhPXIpLChyPUtnKHMsbCxuKSk+MD9yPUtnKHM9TWF0aC5mbG9vcihzL3IpKnIsbD1NYXRoLmNlaWwobC9yKSpyLG4pOnI8MCYmKHI9S2cocz1NYXRoLmNlaWwocypyKS9yLGw9TWF0aC5mbG9vcihsKnIpL3IsbikpLHI+MD8oaVtvXT1NYXRoLmZsb29yKHMvcikqcixpW2FdPU1hdGguY2VpbChsL3IpKnIsZShpKSk6cjwwJiYoaVtvXT1NYXRoLmNlaWwocypyKS9yLGlbYV09TWF0aC5mbG9vcihsKnIpL3IsZShpKSksdH0sdH0odCl9dmFyIEd4PW5ldyBEYXRlLFd4PW5ldyBEYXRlO2Z1bmN0aW9uIFF4KHQsZSxuLHIpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIGkuZmxvb3I9aSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixvKXt2YXIgYSxzPVtdO2lmKG49aS5jZWlsKG4pLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShuPHImJm8+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKGE9bmV3IERhdGUoK24pKSxlKG4sbyksdChuKX13aGlsZShhPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBReChmdW5jdGlvbihlKXtpZihlPj1lKWZvcig7dChlKSwhbihlKTspZS5zZXRUaW1lKGUtMSl9LGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSl9LG4mJihpLmNvdW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIEd4LnNldFRpbWUoK2UpLFd4LnNldFRpbWUoK3IpLHQoR3gpLHQoV3gpLE1hdGguZmxvb3IobihHeCxXeCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/aS5maWx0ZXIocj9mdW5jdGlvbihlKXtyZXR1cm4gcihlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gaS5jb3VudCgwLGUpJXQ9PTB9KTppOm51bGx9KSxpfXZhciBLeD1ReChmdW5jdGlvbigpe30sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0pO0t4LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/UXgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0sZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0sZnVuY3Rpb24oZSxuKXtyZXR1cm4obi1lKS90fSk6S3g6bnVsbH07dmFyIFp4PTZlNCxZeD02MDQ4ZTUsWHg9KFF4KGZ1bmN0aW9uKHQpe3Quc2V0VGltZSgxZTMqTWF0aC5mbG9vcih0LzFlMykpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCsxZTMqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSxReChmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L1p4KSpaeCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqWngpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL1p4fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxReChmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkqWnglMzZlNTtlPDAmJihlKz0zNmU1KSx0LnNldFRpbWUoMzZlNSpNYXRoLmZsb29yKCgrdC1lKS8zNmU1KStlKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksUXgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqWngpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKTtmdW5jdGlvbiAkeCh0KXtyZXR1cm4gUXgoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpaeCkvWXh9KX12YXIgSng9JHgoMCksdEM9JHgoMSksZUM9KCR4KDIpLCR4KDMpLCR4KDQpKSxuQz0oJHgoNSksJHgoNiksUXgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksUXgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7bkMuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9ReChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KTpudWxsfTt2YXIgckM9bkMsaUM9KFF4KGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKlp4KX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9aeH0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSksUXgoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSksUXgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpO2Z1bmN0aW9uIG9DKHQpe3JldHVybiBReChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL1l4fSl9dmFyIGFDPW9DKDApLHNDPW9DKDEpLGxDPShvQygyKSxvQygzKSxvQyg0KSksdUM9KG9DKDUpLG9DKDYpLFF4KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLFF4KGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO3VDLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/UXgoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSk6bnVsbH07dmFyIGNDPXVDO2Z1bmN0aW9uIGhDKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBmQyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBwQyh0KXtyZXR1cm57eTp0LG06MCxkOjEsSDowLE06MCxTOjAsTDowfX12YXIgZEMsbUMseUMsZ0M9eyItIjoiIixfOiIgIiwwOiIwIn0sdkM9L15ccypcZCsvLF9DPS9eJS8sYkM9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIHdDKHQsZSxuKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gcisobzxuP25ldyBBcnJheShuLW8rMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHhDKHQpe3JldHVybiB0LnJlcGxhY2UoYkMsIlxcJCYiKX1mdW5jdGlvbiBDQyh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoeEMpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBFQyh0KXtmb3IodmFyIGU9e30sbj0tMSxyPXQubGVuZ3RoOysrbjxyOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiBTQyh0LGUsbil7dmFyIHI9dkMuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrQyh0LGUsbil7dmFyIHI9dkMuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/KHQudT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUQyh0LGUsbil7dmFyIHI9dkMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBQyh0LGUsbil7dmFyIHI9dkMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQQyh0LGUsbil7dmFyIHI9dkMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPQyh0LGUsbil7dmFyIHI9dkMuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIHI/KHQueT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJQyh0LGUsbil7dmFyIHI9dkMuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1DKHQsZSxuKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTkModCxlLG4pe3ZhciByPXZDLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lm09clswXS0xLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpDKHQsZSxuKXt2YXIgcj1fQy5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj9uK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFVDKHQsZSxuKXt2YXIgcj12Qy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LlE9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSEModCxlLG4pe3ZhciByPXZDLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQuUT0xZTMqK3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcUModCxlKXtyZXR1cm4gd0ModC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBHQyh0LGUpe3JldHVybiB3Qyh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBXQyh0LGUpe3JldHVybiB3Qyh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gUUModCxlKXtyZXR1cm4gd0MoMStYeC5jb3VudChyQyh0KSx0KSxlLDMpfWZ1bmN0aW9uIEtDKHQsZSl7cmV0dXJuIHdDKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBaQyh0LGUpe3JldHVybiBLQyh0LGUpKyIwMDAifWZ1bmN0aW9uIFlDKHQsZSl7cmV0dXJuIHdDKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gWEModCxlKXtyZXR1cm4gd0ModC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiAkQyh0LGUpe3JldHVybiB3Qyh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIEpDKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiB0RSh0LGUpe3JldHVybiB3QyhKeC5jb3VudChyQyh0KSx0KSxlLDIpfWZ1bmN0aW9uIGVFKHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9lQyh0KTplQy5jZWlsKHQpLHdDKGVDLmNvdW50KHJDKHQpLHQpKyg0PT09ckModCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gbkUodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gckUodCxlKXtyZXR1cm4gd0ModEMuY291bnQockModCksdCksZSwyKX1mdW5jdGlvbiBpRSh0LGUpe3JldHVybiB3Qyh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gb0UodCxlKXtyZXR1cm4gd0ModC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIGFFKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrd0MoZS82MHwwLCIwIiwyKSt3QyhlJTYwLCIwIiwyKX1mdW5jdGlvbiBzRSh0LGUpe3JldHVybiB3Qyh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIGxFKHQsZSl7cmV0dXJuIHdDKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIHVFKHQsZSl7cmV0dXJuIHdDKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBjRSh0LGUpe3JldHVybiB3QygxK2lDLmNvdW50KGNDKHQpLHQpLGUsMyl9ZnVuY3Rpb24gaEUodCxlKXtyZXR1cm4gd0ModC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGZFKHQsZSl7cmV0dXJuIGhFKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gcEUodCxlKXtyZXR1cm4gd0ModC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBkRSh0LGUpe3JldHVybiB3Qyh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIG1FKHQsZSl7cmV0dXJuIHdDKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24geUUodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGdFKHQsZSl7cmV0dXJuIHdDKGFDLmNvdW50KGNDKHQpLHQpLGUsMil9ZnVuY3Rpb24gdkUodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP2xDKHQpOmxDLmNlaWwodCksd0MobEMuY291bnQoY0ModCksdCkrKDQ9PT1jQyh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBfRSh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBiRSh0LGUpe3JldHVybiB3QyhzQy5jb3VudChjQyh0KSx0KSxlLDIpfWZ1bmN0aW9uIHdFKHQsZSl7cmV0dXJuIHdDKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiB4RSh0LGUpe3JldHVybiB3Qyh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gQ0UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEVFKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFNFKHQpe3JldHVybit0fWZ1bmN0aW9uIGtFKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9IWZ1bmN0aW9uKHQpe2RDPWZ1bmN0aW9uKGUpe3ZhciBuPXQuZGF0ZVRpbWUscj10LmRhdGUsaT10LnRpbWUsbz10LnBlcmlvZHMsYT10LmRheXMscz10LnNob3J0RGF5cyxsPXQubW9udGhzLHU9dC5zaG9ydE1vbnRocyxjPUNDKG8pLGg9RUMobyksZj1DQyhhKSxwPUVDKGEpLGQ9Q0MocyksbT1FQyhzKSx5PUNDKGwpLGc9RUMobCksdj1DQyh1KSxfPUVDKHUpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxjOm51bGwsZDpxQyxlOnFDLGY6WkMsSDpHQyxJOldDLGo6UUMsTDpLQyxtOllDLE06WEMscDpmdW5jdGlvbih0KXtyZXR1cm4gb1srKHQuZ2V0SG91cnMoKT49MTIpXX0sUTpTRSxzOmtFLFM6JEMsdTpKQyxVOnRFLFY6ZUUsdzpuRSxXOnJFLHg6bnVsbCxYOm51bGwseTppRSxZOm9FLFo6YUUsIiUiOkVFfSx3PXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6c0UsZTpzRSxmOmZFLEg6bEUsSTp1RSxqOmNFLEw6aEUsbTpwRSxNOmRFLHA6ZnVuY3Rpb24odCl7cmV0dXJuIG9bKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6U0UsczprRSxTOm1FLHU6eUUsVTpnRSxWOnZFLHc6X0UsVzpiRSx4Om51bGwsWDpudWxsLHk6d0UsWTp4RSxaOkNFLCIlIjpFRX0seD17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9bVtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1mLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1wW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPV9bclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9eS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUyh0LG4sZSxyKX0sZDpSQyxlOlJDLGY6QkMsSDpMQyxJOkxDLGo6REMsTDpWQyxtOk5DLE06akMscDpmdW5jdGlvbih0LGUsbil7dmFyIHI9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnA9aFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxROlVDLHM6SEMsUzpGQyx1OmtDLFU6VEMsVjpBQyx3OlNDLFc6UEMseDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIFModCxyLGUsbil9LFg6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBTKHQsaSxlLG4pfSx5OklDLFk6T0MsWjpNQywiJSI6ekN9O2Z1bmN0aW9uIEModCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvLGE9W10scz0tMSxsPTAsdT10Lmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KytzPHU7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoYS5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KGk9Z0Nbcj10LmNoYXJBdCgrK3MpXSk/cj10LmNoYXJBdCgrK3MpOmk9ImUiPT09cj8iICI6IjAiLChvPWVbcl0pJiYocj1vKG4saSkpLGEucHVzaChyKSxsPXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGwscykpLGEuam9pbigiIil9fWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvPXBDKDE5MDApO2lmKFMobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KHI9KGk9KHI9ZkMocEMoby55KSkpLmdldFVUQ0RheSgpKT40fHwwPT09aT9zQy5jZWlsKHIpOnNDKHIpLHI9aUMub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRVVENGdWxsWWVhcigpLG8ubT1yLmdldFVUQ01vbnRoKCksby5kPXIuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KHI9KGk9KHI9ZShwQyhvLnkpKSkuZ2V0RGF5KCkpPjR8fDA9PT1pP3RDLmNlaWwocik6dEMocikscj1YeC5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldEZ1bGxZZWFyKCksby5tPXIuZ2V0TW9udGgoKSxvLmQ9ci5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxpPSJaImluIG8/ZkMocEMoby55KSkuZ2V0VVRDRGF5KCk6ZShwQyhvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKGkrNSklNzpvLncrNypvLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLGZDKG8pKTplKG8pfX1mdW5jdGlvbiBTKHQsZSxuLHIpe2Zvcih2YXIgaSxvLGE9MCxzPWUubGVuZ3RoLGw9bi5sZW5ndGg7YTxzOyl7aWYocj49bClyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChhKyspKSl7aWYoaT1lLmNoYXJBdChhKyspLCEobz14W2kgaW4gZ0M/ZS5jaGFyQXQoYSsrKTppXSl8fChyPW8odCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD1DKHIsYiksYi5YPUMoaSxiKSxiLmM9QyhuLGIpLHcueD1DKHIsdyksdy5YPUMoaSx3KSx3LmM9QyhuLHcpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9Qyh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1FKHQrPSIiLGhDKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9Qyh0Kz0iIix3KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1FKHQsZkMpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX0oKSxtQz1kQy51dGNGb3JtYXQseUM9ZEMudXRjUGFyc2V9KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSksRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmd8fG1DKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKSwrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpfHx5QygiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIFRFPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufSxBRT0oVEUoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLFRFKCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKSxURSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2IiksVEUoImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOCIpLFRFKCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKSxURSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIiksVEUoImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OSIpLFRFKCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKSxURSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIiksZnVuY3Rpb24odCl7cmV0dXJuIGliKHRbdC5sZW5ndGgtMV0pfSk7ZnVuY3Rpb24gUEUodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19QUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZDhiMzY1ZjVmNWY1NWFiNGFjIiwiYTY2MTFhZGZjMjdkODBjZGMxMDE4NTcxIiwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxIiwiOGM1MTBhZDhiMzY1ZjZlOGMzYzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhZDhiMzY1ZjZlOGMzZjVmNWY1YzdlYWU1NWFiNGFjMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIiwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiYWY4ZGMzZjdmN2Y3N2ZiZjdiIiwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3IiwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiOTk4ZWMzZjdmN2Y3ZjFhMzQwIiwiNWUzYzk5YjJhYmQyZmRiODYzZTY2MTAxIiwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxIiwiNTQyNzg4OTk4ZWMzZDhkYWViZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4OTk4ZWMzZDhkYWViZjdmN2Y3ZmVlMGI2ZjFhMzQwYjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IiwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZjdmN2Y3NjdhOWNmIiwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwIiwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFiZmRiIiwiZDcxOTFjZmRhZTYxYWJkOWU5MmM3YmI2IiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkOWU5MmM3YmI2IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZmM4ZDU5ZmVlMDkwZmZmZmJmZTBmM2Y4OTFiZmRiNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFjZjYwIiwiZDcxOTFjZmRhZTYxYTZkOTZhMWE5NjQxIiwiZDcxOTFjZmRhZTYxZmZmZmJmYTZkOTZhMWE5NjQxIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZmZmZmJmZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWY5OTlkOGM5MmNhMjVmIiwiZWRmOGZiYjJlMmUyNjZjMmE0MjM4YjQ1IiwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0MmNhMjVmMDA2ZDJjIiwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0IiwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZTBlY2Y0OWViY2RhODg1NmE3IiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg0MTlkIiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkODEwZjdjNGQwMDRiIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlOGM4ZmRiYjg0ZTM0YTMzIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZDczMDFmIiwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZTM0YTMzYjMwMDAwIiwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwIiwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmYjMwMDAwN2YwMDAwIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlMmYwYTZiZGRiMWM5MDk5IiwiZjZlZmY3YmRjOWUxNjdhOWNmMDI4MThhIiwiZjZlZmY3YmRjOWUxNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2YzU5MDE0NjM2IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZTdlMWVmYzk5NGM3ZGQxYzc3IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwY2UxMjU2IiwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZGQxYzc3OTgwMDQzIiwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmIiwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTgwMDQzNjcwMDFmIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmRlMGRkZmE5ZmI1YzUxYjhhIiwiZmVlYmUyZmJiNGI5Zjc2OGExYWUwMTdlIiwiZmVlYmUyZmJiNGI5Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3NDkwMDZhIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZjdmY2I5YWRkZDhlMzFhMzU0IiwiZmZmZmNjYzJlNjk5NzhjNjc5MjM4NDQzIiwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5MzFhMzU0MDA2ODM3IiwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyIiwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA2ODM3MDA0NTI5IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmZmN2JjZmVjNDRmZDk1ZjBlIiwiZmZmZmQ0ZmVkOThlZmU5OTI5Y2M0YzAyIiwiZmZmZmQ0ZmVkOThlZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOTkzNDA0NjYyNTA2IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZGVlYmY3OWVjYWUxMzE4MmJkIiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1IiwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljIiwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0IiwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWUwYTFkOTliMzFhMzU0IiwiZWRmOGU5YmFlNGIzNzRjNDc2MjM4YjQ1IiwiZWRmOGU5YmFlNGIzNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZWZlZGY1YmNiZGRjNzU2YmIxIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NmE1MWEzIiwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4NzU2YmIxNTQyNzhmIiwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2IiwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNTQyNzhmM2YwMDdkIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlMGQyZmM5MjcyZGUyZDI2IiwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkIiwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkIikubWFwKFRFKSksQUUobmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKFRFKSkseGIoR18oMzAwLC41LDApLEdfKC0yNDAsLjUsMSkpLHhiKEdfKC0xMDAsLjc1LC4zNSksR18oODAsMS41LC44KSkseGIoR18oMjYwLC43NSwuMzUpLEdfKDgwLDEuNSwuOCkpLEdfKCksbV8oKSxNYXRoLE1hdGgsUEUoVEUoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxQRShURSgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLFBFKFRFKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksUEUoVEUoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKTt2YXIgT0U9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxJRT1NYXRoLmFicyxNRT1NYXRoLmF0YW4yLE5FPU1hdGguY29zLFJFPU1hdGgubWF4LERFPU1hdGgubWluLExFPU1hdGguc2luLGpFPU1hdGguc3FydCxGRT0xZS0xMixWRT1NYXRoLlBJLEJFPVZFLzIsekU9MipWRTtmdW5jdGlvbiBVRSh0KXtyZXR1cm4gdD49MT9CRTp0PD0tMT8tQkU6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIEhFKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIHFFKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIEdFKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gV0UodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gUUUodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gS0UodCxlLG4scixpLG8sYSl7dmFyIHM9dC1uLGw9ZS1yLHU9KGE/bzotbykvakUocypzK2wqbCksYz11KmwsaD0tdSpzLGY9dCtjLHA9ZStoLGQ9bitjLG09citoLHk9KGYrZCkvMixnPShwK20pLzIsdj1kLWYsXz1tLXAsYj12KnYrXypfLHc9aS1vLHg9ZiptLWQqcCxDPShfPDA/LTE6MSkqakUoUkUoMCx3KncqYi14KngpKSxFPSh4Kl8tdipDKS9iLFM9KC14KnYtXypDKS9iLGs9KHgqXyt2KkMpL2IsVD0oLXgqditfKkMpL2IsQT1FLXksUD1TLWcsTz1rLXksST1ULWc7cmV0dXJuIEEqQStQKlA+TypPK0kqSSYmKEU9ayxTPVQpLHtjeDpFLGN5OlMseDAxOi1jLHkwMTotaCx4MTE6RSooaS93LTEpLHkxMTpTKihpL3ctMSl9fXZhciBaRT1mdW5jdGlvbigpe3ZhciB0PUhFLGU9cUUsbj1PRSgwKSxyPW51bGwsaT1HRSxvPVdFLGE9UUUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgbCx1LGMsaD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1CRSxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUJFLG09SUUoZC1wKSx5PWQ+cDtpZihzfHwocz1sPXl3KCkpLGY8aCYmKHU9ZixmPWgsaD11KSxmPkZFKWlmKG0+ekUtRkUpcy5tb3ZlVG8oZipORShwKSxmKkxFKHApKSxzLmFyYygwLDAsZixwLGQsIXkpLGg+RkUmJihzLm1vdmVUbyhoKk5FKGQpLGgqTEUoZCkpLHMuYXJjKDAsMCxoLGQscCx5KSk7ZWxzZXt2YXIgZyx2LF89cCxiPWQsdz1wLHg9ZCxDPW0sRT1tLFM9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixrPVM+RkUmJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpqRShoKmgrZipmKSksVD1ERShJRShmLWgpLzIsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxBPVQsUD1UO2lmKGs+RkUpe3ZhciBPPVVFKGsvaCpMRShTKSksST1VRShrL2YqTEUoUykpOyhDLT0yKk8pPkZFPyh3Kz1PKj15PzE6LTEseC09Tyk6KEM9MCx3PXg9KHArZCkvMiksKEUtPTIqSSk+RkU/KF8rPUkqPXk/MTotMSxiLT1JKTooRT0wLF89Yj0ocCtkKS8yKX12YXIgTT1mKk5FKF8pLE49ZipMRShfKSxSPWgqTkUoeCksRD1oKkxFKHgpO2lmKFQ+RkUpe3ZhciBMPWYqTkUoYiksaj1mKkxFKGIpLEY9aCpORSh3KSxWPWgqTEUodyk7aWYobTxWRSl7dmFyIEI9Qz5GRT9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMpe3ZhciBsPUYtTSx1PVYtTixjPWEtTCxoPXMtaixmPShjKihOLWopLWgqKE0tTCkpLyhoKmwtYyp1KTtyZXR1cm5bTStmKmwsTitmKnVdfSgwLDAsMCwwLDAsMCxSLEQpOltSLERdLHo9TS1CWzBdLFU9Ti1CWzFdLEg9TC1CWzBdLHE9ai1CWzFdLEc9MS9MRSgoKGM9KHoqSCtVKnEpLyhqRSh6KnorVSpVKSpqRShIKkgrcSpxKSkpPjE/MDpjPC0xP1ZFOk1hdGguYWNvcyhjKSkvMiksVz1qRShCWzBdKkJbMF0rQlsxXSpCWzFdKTtBPURFKFQsKGgtVykvKEctMSkpLFA9REUoVCwoZi1XKS8oRysxKSl9fUU+RkU/UD5GRT8oZz1LRShGLFYsTSxOLGYsUCx5KSx2PUtFKEwsaixSLEQsZixQLHkpLHMubW92ZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksUDxUP3MuYXJjKGcuY3gsZy5jeSxQLE1FKGcueTAxLGcueDAxKSxNRSh2LnkwMSx2LngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksUCxNRShnLnkwMSxnLngwMSksTUUoZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsZixNRShnLmN5K2cueTExLGcuY3grZy54MTEpLE1FKHYuY3krdi55MTEsdi5jeCt2LngxMSksIXkpLHMuYXJjKHYuY3gsdi5jeSxQLE1FKHYueTExLHYueDExKSxNRSh2LnkwMSx2LngwMSksIXkpKSk6KHMubW92ZVRvKE0sTikscy5hcmMoMCwwLGYsXyxiLCF5KSk6cy5tb3ZlVG8oTSxOKSxoPkZFJiZDPkZFP0E+RkU/KGc9S0UoUixELEwsaixoLC1BLHkpLHY9S0UoTSxOLEYsVixoLC1BLHkpLHMubGluZVRvKGcuY3grZy54MDEsZy5jeStnLnkwMSksQTxUP3MuYXJjKGcuY3gsZy5jeSxBLE1FKGcueTAxLGcueDAxKSxNRSh2LnkwMSx2LngwMSksIXkpOihzLmFyYyhnLmN4LGcuY3ksQSxNRShnLnkwMSxnLngwMSksTUUoZy55MTEsZy54MTEpLCF5KSxzLmFyYygwLDAsaCxNRShnLmN5K2cueTExLGcuY3grZy54MTEpLE1FKHYuY3krdi55MTEsdi5jeCt2LngxMSkseSkscy5hcmModi5jeCx2LmN5LEEsTUUodi55MTEsdi54MTEpLE1FKHYueTAxLHYueDAxKSwheSkpKTpzLmFyYygwLDAsaCx4LHcseSk6cy5saW5lVG8oUixEKX1lbHNlIHMubW92ZVRvKDAsMCk7aWYocy5jbG9zZVBhdGgoKSxsKXJldHVybiBzPW51bGwsbCsiInx8bnVsbH1yZXR1cm4gbC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1WRS8yO3JldHVybltORShyKSpuLExFKHIpKm5dfSxsLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6T0UoK2UpLGwpOnR9LGwub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPRSgrdCksbCk6ZX0sbC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPRSgrdCksbCk6bn0sbC5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T0UoK3QpLGwpOnJ9LGwuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9FKCt0KSxsKTppfSxsLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T0UoK3QpLGwpOm99LGwucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPRSgrdCksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9O2Z1bmN0aW9uIFlFKHQpe3RoaXMuX2NvbnRleHQ9dH1ZRS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgWEU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBZRSh0KX07ZnVuY3Rpb24gJEUodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gSkUodCl7cmV0dXJuIHRbMV19dmFyIHRTPWZ1bmN0aW9uKCl7dmFyIHQ9JEUsZT1KRSxuPU9FKCEwKSxyPW51bGwsaT1YRSxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgcyxsLHUsYz1hLmxlbmd0aCxoPSExO2ZvcihudWxsPT1yJiYobz1pKHU9eXcoKSkpLHM9MDtzPD1jOysrcykhKHM8YyYmbihsPWFbc10scyxhKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK3QobCxzLGEpLCtlKGwscyxhKSk7aWYodSlyZXR1cm4gbz1udWxsLHUrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9FKCtlKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPRSgrdCksYSk6ZX0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T0UoISF0KSxhKTpufSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKG89aShyKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bz1udWxsOm89aShyPXQpLGEpOnJ9LGF9LGVTPWZ1bmN0aW9uKCl7dmFyIHQ9JEUsZT1udWxsLG49T0UoMCkscj1KRSxpPU9FKCEwKSxvPW51bGwsYT1YRSxzPW51bGw7ZnVuY3Rpb24gbChsKXt2YXIgdSxjLGgsZixwLGQ9bC5sZW5ndGgsbT0hMSx5PW5ldyBBcnJheShkKSxnPW5ldyBBcnJheShkKTtmb3IobnVsbD09byYmKHM9YShwPXl3KCkpKSx1PTA7dTw9ZDsrK3Upe2lmKCEodTxkJiZpKGY9bFt1XSx1LGwpKT09PW0paWYobT0hbSljPXUscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCksaD11LTE7aD49YzstLWgpcy5wb2ludCh5W2hdLGdbaF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfW0mJih5W3VdPSt0KGYsdSxsKSxnW3VdPStuKGYsdSxsKSxzLnBvaW50KGU/K2UoZix1LGwpOnlbdV0scj8rcihmLHUsbCk6Z1t1XSkpfWlmKHApcmV0dXJuIHM9bnVsbCxwKyIifHxudWxsfWZ1bmN0aW9uIHUoKXtyZXR1cm4gdFMoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOk9FKCtuKSxlPW51bGwsbCk6dH0sbC54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOk9FKCtlKSxsKTp0fSxsLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9FKCt0KSxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPRSgrdCkscj1udWxsLGwpOm59LGwueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPRSgrdCksbCk6bn0sbC55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPRSgrdCksbCk6cn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpLngodCkueShuKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpLngodCkueShyKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpLngoZSkueShuKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6T0UoISF0KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbnVsbCE9byYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P289cz1udWxsOnM9YShvPXQpLGwpOm99LGx9O2Z1bmN0aW9uIG5TKHQpe3RoaXMuX2N1cnZlPXR9blMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fSxBcnJheSxNYXRoLnNxcnQoMS8zKSxNYXRoLnNpbihWRS8xMCksTWF0aC5zaW4oNypWRS8xMCk7dmFyIHJTPShNYXRoLnNpbih6RS8xMCksTWF0aC5jb3MoekUvMTApLE1hdGguc3FydCgzKSxNYXRoLnNxcnQoMyksTWF0aC5zcXJ0KDEyKSxmdW5jdGlvbigpe30pO2Z1bmN0aW9uIGlTKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStuKS82KX1mdW5jdGlvbiBvUyh0KXt0aGlzLl9jb250ZXh0PXR9b1MucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzppUyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDppUyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIGFTPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb1ModCl9O2Z1bmN0aW9uIHNTKHQsZSl7dGhpcy5fYmFzaXM9bmV3IG9TKHQpLHRoaXMuX2JldGE9ZX1mdW5jdGlvbiBsUyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtbiksdC5feDIsdC5feTIpfWZ1bmN0aW9uIHVTKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1mdW5jdGlvbiBjUyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9ZnVuY3Rpb24gaFModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWZ1bmN0aW9uIGZTKHQsZSxuKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsYT10Ll95MjtpZih0Ll9sMDFfYT5GRSl7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+RkUpe3ZhciB1PTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qdSt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2MsYT0oYSp1K3QuX3kxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvY310Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sYSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gcFModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1mdW5jdGlvbiBkUyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfWZ1bmN0aW9uIG1TKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9ZnVuY3Rpb24geVModCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIGdTKHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsbz0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxhPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0obyppK2EqcikvKHIraSk7cmV0dXJuKHlTKG8pK3lTKGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gdlModCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIF9TKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3gxLG89dC5feTEsYT0oaS1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK2EsdC5feTArYSplLGktYSxvLWEqbixpLG8pfWZ1bmN0aW9uIGJTKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB3Uyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24geFMoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBDUyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIEVTKHQsZSl7dmFyIG49ZSxyPWUuUixpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5SPXIuTCxuLlImJihuLlIuVT1uKSxyLkw9bn1mdW5jdGlvbiBTUyh0LGUpe3ZhciBuPWUscj1lLkwsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24ga1ModCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fXNTLnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aC0xO2lmKG4+MClmb3IodmFyIHIsaT10WzBdLG89ZVswXSxhPXRbbl0taSxzPWVbbl0tbyxsPS0xOysrbDw9bjspdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2xdKygxLXRoaXMuX2JldGEpKihpKyhyPWwvbikqYSksdGhpcy5fYmV0YSplW2xdKygxLXRoaXMuX2JldGEpKihvK3IqcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDE9PT1lP25ldyBvUyh0KTpuZXcgc1ModCxlKX1yZXR1cm4gbi5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjg1KSx1Uy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6bFModGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OmxTKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyB1Uyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKSxjUy5wcm90b3R5cGU9e2FyZWFTdGFydDpyUyxhcmVhRW5kOnJTLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6bFModGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19LGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IGNTKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApLGhTLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmxTKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBoUyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKSxwUy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OmZTKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBwUyh0LGUpOm5ldyB1Uyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpLGRTLnByb3RvdHlwZT17YXJlYVN0YXJ0OnJTLGFyZWFFbmQ6clMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6ZlModGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fSxmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IGRTKHQsZSk6bmV3IGNTKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSksbVMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmZTKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX0sZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBtUyh0LGUpOm5ldyBoUyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpLGJTLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpfUyh0aGlzLHRoaXMuX3QwLHZTKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxfUyh0aGlzLHZTKHRoaXMsbj1nUyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6X1ModGhpcyx0aGlzLl90MCxuPWdTKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKChmdW5jdGlvbih0KXt0aGlzLl9jb250ZXh0PW5ldyB3Uyh0KX0pLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGJTLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7YlMucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSx3Uy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLG8saSl9fSx4Uy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhTLGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtuPXR9ZWxzZSB0aGlzLl8/KHQ9a1ModGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUsbj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLG49bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9bixlLkM9ITAsdD1lO24mJm4uQzspbj09PShyPW4uVSkuTD8oaT1yLlIpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLlImJihFUyh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCxTUyh0aGlzLHIpKTooaT1yLkwpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLkwmJihTUyh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCxFUyh0aGlzLHIpKSxuPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUsbixyLGk9dC5VLG89dC5MLGE9dC5SO2lmKG49bz9hP2tTKGEpOm86YSxpP2kuTD09PXQ/aS5MPW46aS5SPW46dGhpcy5fPW4sbyYmYT8ocj1uLkMsbi5DPXQuQyxuLkw9byxvLlU9bixuIT09YT8oaT1uLlUsbi5VPXQuVSxpLkw9dD1uLlIsbi5SPWEsYS5VPW4pOihuLlU9aSxpPW4sdD1uLlIpKToocj10LkMsdD1uKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsRVModGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxTUyh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxFUyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsU1ModGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxFUyh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxTUyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIFRTPXhTO2Z1bmN0aW9uIEFTKHQsZSxuLHIpe3ZhciBpPVtudWxsLG51bGxdLG89WVMucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9dCxpLnJpZ2h0PWUsbiYmT1MoaSx0LGUsbiksciYmT1MoaSxlLHQsciksS1NbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksS1NbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBQUyh0LGUsbil7dmFyIHI9W2Usbl07cmV0dXJuIHIubGVmdD10LHJ9ZnVuY3Rpb24gT1ModCxlLG4scil7dFswXXx8dFsxXT90LmxlZnQ9PT1uP3RbMV09cjp0WzBdPXI6KHRbMF09cix0LmxlZnQ9ZSx0LnJpZ2h0PW4pfWZ1bmN0aW9uIElTKHQsZSxuLHIsaSl7dmFyIG8sYT10WzBdLHM9dFsxXSxsPWFbMF0sdT1hWzFdLGM9MCxoPTEsZj1zWzBdLWwscD1zWzFdLXU7aWYobz1lLWwsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzxjKXJldHVybjtvPGgmJihoPW8pfWVsc2UgaWYoZj4wKXtpZihvPmgpcmV0dXJuO28+YyYmKGM9byl9aWYobz1yLWwsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz5oKXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoZj4wKXtpZihvPGMpcmV0dXJuO288aCYmKGg9byl9aWYobz1uLXUscHx8IShvPjApKXtpZihvLz1wLHA8MCl7aWYobzxjKXJldHVybjtvPGgmJihoPW8pfWVsc2UgaWYocD4wKXtpZihvPmgpcmV0dXJuO28+YyYmKGM9byl9aWYobz1pLXUscHx8IShvPDApKXtpZihvLz1wLHA8MCl7aWYobz5oKXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYocD4wKXtpZihvPGMpcmV0dXJuO288aCYmKGg9byl9cmV0dXJuIShjPjB8fGg8MSl8fChjPjAmJih0WzBdPVtsK2MqZix1K2MqcF0pLGg8MSYmKHRbMV09W2wraCpmLHUraCpwXSksITApfX19fX1mdW5jdGlvbiBNUyh0LGUsbixyLGkpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSxzLGw9dFswXSx1PXQubGVmdCxjPXQucmlnaHQsaD11WzBdLGY9dVsxXSxwPWNbMF0sZD1jWzFdLG09KGgrcCkvMix5PShmK2QpLzI7aWYoZD09PWYpe2lmKG08ZXx8bT49cilyZXR1cm47aWYoaD5wKXtpZihsKXtpZihsWzFdPj1pKXJldHVybn1lbHNlIGw9W20sbl07bz1bbSxpXX1lbHNle2lmKGwpe2lmKGxbMV08bilyZXR1cm59ZWxzZSBsPVttLGldO289W20sbl19fWVsc2UgaWYocz15LShhPShoLXApLyhkLWYpKSptLGE8LTF8fGE+MSlpZihoPnApe2lmKGwpe2lmKGxbMV0+PWkpcmV0dXJufWVsc2UgbD1bKG4tcykvYSxuXTtvPVsoaS1zKS9hLGldfWVsc2V7aWYobCl7aWYobFsxXTxuKXJldHVybn1lbHNlIGw9WyhpLXMpL2EsaV07bz1bKG4tcykvYSxuXX1lbHNlIGlmKGY8ZCl7aWYobCl7aWYobFswXT49cilyZXR1cm59ZWxzZSBsPVtlLGEqZStzXTtvPVtyLGEqcitzXX1lbHNle2lmKGwpe2lmKGxbMF08ZSlyZXR1cm59ZWxzZSBsPVtyLGEqcitzXTtvPVtlLGEqZStzXX1yZXR1cm4gdFswXT1sLHRbMV09bywhMH1mdW5jdGlvbiBOUyh0LGUpe3ZhciBuPXQuc2l0ZSxyPWUubGVmdCxpPWUucmlnaHQ7cmV0dXJuIG49PT1pJiYoaT1yLHI9biksaT9NYXRoLmF0YW4yKGlbMV0tclsxXSxpWzBdLXJbMF0pOihuPT09cj8ocj1lWzFdLGk9ZVswXSk6KHI9ZVswXSxpPWVbMV0pLE1hdGguYXRhbjIoclswXS1pWzBdLGlbMV0tclsxXSkpfWZ1bmN0aW9uIFJTKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiBEUyh0LGUpe3JldHVybiBlWysoZS5sZWZ0PT09dC5zaXRlKV19dmFyIExTLGpTPVtdO2Z1bmN0aW9uIEZTKHQpe3ZhciBlPXQuUCxuPXQuTjtpZihlJiZuKXt2YXIgcj1lLnNpdGUsaT10LnNpdGUsbz1uLnNpdGU7aWYociE9PW8pe3ZhciBhPWlbMF0scz1pWzFdLGw9clswXS1hLHU9clsxXS1zLGM9b1swXS1hLGg9b1sxXS1zLGY9MioobCpoLXUqYyk7aWYoIShmPj0tJFMpKXt2YXIgcD1sKmwrdSp1LGQ9YypjK2gqaCxtPShoKnAtdSpkKS9mLHk9KGwqZC1jKnApL2YsZz1qUy5wb3AoKXx8bmV3IGZ1bmN0aW9uKCl7Q1ModGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfTtnLmFyYz10LGcuc2l0ZT1pLGcueD1tK2EsZy55PShnLmN5PXkrcykrTWF0aC5zcXJ0KG0qbSt5KnkpLHQuY2lyY2xlPWc7Zm9yKHZhciB2PW51bGwsXz1aUy5fO187KWlmKGcueTxfLnl8fGcueT09PV8ueSYmZy54PD1fLngpe2lmKCFfLkwpe3Y9Xy5QO2JyZWFrfV89Xy5MfWVsc2V7aWYoIV8uUil7dj1fO2JyZWFrfV89Xy5SfVpTLmluc2VydCh2LGcpLHZ8fChMUz1nKX19fX1mdW5jdGlvbiBWUyh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoTFM9ZS5OKSxaUy5yZW1vdmUoZSksalMucHVzaChlKSxDUyhlKSx0LmNpcmNsZT1udWxsKX12YXIgQlM9W107ZnVuY3Rpb24gelModCl7dmFyIGU9QlMucG9wKCl8fG5ldyBmdW5jdGlvbigpe0NTKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH07cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gVVModCl7VlModCksUVMucmVtb3ZlKHQpLEJTLnB1c2godCksQ1ModCl9ZnVuY3Rpb24gSFModCl7dmFyIGU9dC5jaXJjbGUsbj1lLngscj1lLmN5LGk9W24scl0sbz10LlAsYT10Lk4scz1bdF07VVModCk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKG4tbC5jaXJjbGUueCk8WFMmJk1hdGguYWJzKHItbC5jaXJjbGUuY3kpPFhTOylvPWwuUCxzLnVuc2hpZnQobCksVVMobCksbD1vO3MudW5zaGlmdChsKSxWUyhsKTtmb3IodmFyIHU9YTt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxYUyYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8WFM7KWE9dS5OLHMucHVzaCh1KSxVUyh1KSx1PWE7cy5wdXNoKHUpLFZTKHUpO3ZhciBjLGg9cy5sZW5ndGg7Zm9yKGM9MTtjPGg7KytjKU9TKCh1PXNbY10pLmVkZ2UsKGw9c1tjLTFdKS5zaXRlLHUuc2l0ZSxpKTsodT1zW2gtMV0pLmVkZ2U9QVMoKGw9c1swXSkuc2l0ZSx1LnNpdGUsbnVsbCxpKSxGUyhsKSxGUyh1KX1mdW5jdGlvbiBxUyh0KXtmb3IodmFyIGUsbixyLGksbz10WzBdLGE9dFsxXSxzPVFTLl87czspaWYoKHI9R1MocyxhKS1vKT5YUylzPXMuTDtlbHNle2lmKCEoKGk9by1XUyhzLGEpKT5YUykpe3I+LVhTPyhlPXMuUCxuPXMpOmk+LVhTPyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7S1NbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgbD16Uyh0KTtpZihRUy5pbnNlcnQoZSxsKSxlfHxuKXtpZihlPT09bilyZXR1cm4gVlMoZSksbj16UyhlLnNpdGUpLFFTLmluc2VydChsLG4pLGwuZWRnZT1uLmVkZ2U9QVMoZS5zaXRlLGwuc2l0ZSksRlMoZSksdm9pZCBGUyhuKTtpZihuKXtWUyhlKSxWUyhuKTt2YXIgdT1lLnNpdGUsYz11WzBdLGg9dVsxXSxmPXRbMF0tYyxwPXRbMV0taCxkPW4uc2l0ZSxtPWRbMF0tYyx5PWRbMV0taCxnPTIqKGYqeS1wKm0pLHY9ZipmK3AqcCxfPW0qbSt5KnksYj1bKHkqdi1wKl8pL2crYywoZipfLW0qdikvZytoXTtPUyhuLmVkZ2UsdSxkLGIpLGwuZWRnZT1BUyh1LHQsbnVsbCxiKSxuLmVkZ2U9QVModCxkLG51bGwsYiksRlMoZSksRlMobil9ZWxzZSBsLmVkZ2U9QVMoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIEdTKHQsZSl7dmFyIG49dC5zaXRlLHI9blswXSxpPW5bMV0sbz1pLWU7aWYoIW8pcmV0dXJuIHI7dmFyIGE9dC5QO2lmKCFhKXJldHVybi0xLzA7dmFyIHM9KG49YS5zaXRlKVswXSxsPW5bMV0sdT1sLWU7aWYoIXUpcmV0dXJuIHM7dmFyIGM9cy1yLGg9MS9vLTEvdSxmPWMvdTtyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKGMqYy8oLTIqdSktbCt1LzIraS1vLzIpKSkvaCtyOihyK3MpLzJ9ZnVuY3Rpb24gV1ModCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gR1MobixlKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1lP3JbMF06MS8wfXZhciBRUyxLUyxaUyxZUyxYUz0xZS02LCRTPTFlLTEyO2Z1bmN0aW9uIEpTKHQsZSl7cmV0dXJuIGVbMV0tdFsxXXx8ZVswXS10WzBdfWZ1bmN0aW9uIHRrKHQsZSl7dmFyIG4scixpLG89dC5zb3J0KEpTKS5wb3AoKTtmb3IoWVM9W10sS1M9bmV3IEFycmF5KHQubGVuZ3RoKSxRUz1uZXcgVFMsWlM9bmV3IFRTOzspaWYoaT1MUyxvJiYoIWl8fG9bMV08aS55fHxvWzFdPT09aS55JiZvWzBdPGkueCkpb1swXT09PW4mJm9bMV09PT1yfHwocVMobyksbj1vWzBdLHI9b1sxXSksbz10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7SFMoaS5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbixyLGk9MCxvPUtTLmxlbmd0aDtpPG87KytpKWlmKCh0PUtTW2ldKSYmKHI9KGU9dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24pYVtuXT1uLHNbbl09TlModCxZU1tlW25dXSk7Zm9yKGEuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSxuPTA7bjxyOysrbilzW25dPWVbYVtuXV07Zm9yKG49MDtuPHI7KytuKWVbbl09c1tuXX19KCksZSl7dmFyIGE9K2VbMF1bMF0scz0rZVswXVsxXSxsPStlWzFdWzBdLHU9K2VbMV1bMV07IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaSxvPVlTLmxlbmd0aDtvLS07KU1TKGk9WVNbb10sdCxlLG4scikmJklTKGksdCxlLG4scikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPlhTfHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPlhTKXx8ZGVsZXRlIFlTW29dfShhLHMsbCx1KSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvLGEscyxsLHUsYyxoLGYscCxkLG0seT1LUy5sZW5ndGgsZz0hMDtmb3IoaT0wO2k8eTsrK2kpaWYobz1LU1tpXSl7Zm9yKGE9by5zaXRlLHM9KGw9by5oYWxmZWRnZXMpLmxlbmd0aDtzLS07KVlTW2xbc11dfHxsLnNwbGljZShzLDEpO2ZvcihzPTAsdT1sLmxlbmd0aDtzPHU7KWQ9KHA9RFMobyxZU1tsW3NdXSkpWzBdLG09cFsxXSxoPShjPVJTKG8sWVNbbFsrK3MldV1dKSlbMF0sZj1jWzFdLChNYXRoLmFicyhkLWgpPlhTfHxNYXRoLmFicyhtLWYpPlhTKSYmKGwuc3BsaWNlKHMsMCxZUy5wdXNoKFBTKGEscCxNYXRoLmFicyhkLXQpPFhTJiZyLW0+WFM/W3QsTWF0aC5hYnMoaC10KTxYUz9mOnJdOk1hdGguYWJzKG0tcik8WFMmJm4tZD5YUz9bTWF0aC5hYnMoZi1yKTxYUz9oOm4scl06TWF0aC5hYnMoZC1uKTxYUyYmbS1lPlhTP1tuLE1hdGguYWJzKGgtbik8WFM/ZjplXTpNYXRoLmFicyhtLWUpPFhTJiZkLXQ+WFM/W01hdGguYWJzKGYtZSk8WFM/aDp0LGVdOm51bGwpKS0xKSwrK3UpO3UmJihnPSExKX1pZihnKXt2YXIgdixfLGIsdz0xLzA7Zm9yKGk9MCxnPW51bGw7aTx5OysraSkobz1LU1tpXSkmJihiPSh2PShhPW8uc2l0ZSlbMF0tdCkqdisoXz1hWzFdLWUpKl8pPHcmJih3PWIsZz1vKTtpZihnKXt2YXIgeD1bdCxlXSxDPVt0LHJdLEU9W24scl0sUz1bbixlXTtnLmhhbGZlZGdlcy5wdXNoKFlTLnB1c2goUFMoYT1nLnNpdGUseCxDKSktMSxZUy5wdXNoKFBTKGEsQyxFKSktMSxZUy5wdXNoKFBTKGEsRSxTKSktMSxZUy5wdXNoKFBTKGEsUyx4KSktMSl9fWZvcihpPTA7aTx5OysraSkobz1LU1tpXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBLU1tpXSl9KGEscyxsLHUpfXRoaXMuZWRnZXM9WVMsdGhpcy5jZWxscz1LUyxRUz1aUz1ZUz1LUz1udWxsfWZ1bmN0aW9uIGVrKHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn1mdW5jdGlvbiBuayh0LGUsbil7dmFyIHIsaT1Rdih0KSxvPU1hdGgubWluKHBhcnNlSW50KGkuc3R5bGUoIndpZHRoIikpLHBhcnNlSW50KGkuc3R5bGUoImhlaWdodCIpKSkvMixhPXBhcnNlSW50KGkuc3R5bGUoIndpZHRoIikpLzItbyxzPXBhcnNlSW50KGkuc3R5bGUoImhlaWdodCIpKS8yLW8sbD1NYXRoLm1heChuLm1pblZhbHVlLE1hdGgubWluKG4ubWF4VmFsdWUsZSkpL24ubWF4VmFsdWUsdT1NYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKSsxO3I9bi53YXZlSGVpZ2h0U2NhbGluZz9xeCgpLnJhbmdlKFswLG4ud2F2ZUhlaWdodCwwXSkuZG9tYWluKFswLDUwLDEwMF0pOnF4KCkucmFuZ2UoW24ud2F2ZUhlaWdodCxuLndhdmVIZWlnaHRdKS5kb21haW4oWzAsMTAwXSk7dmFyIGM9bi50ZXh0U2l6ZSpvLzIsaD1wYXJzZUZsb2F0KGUpLnRvRml4ZWQoMiksZj1uLnZhbHVlQ291bnRVcD9uLm1pblZhbHVlOmgscD1uLmRpc3BsYXlQZXJjZW50P24uY3VzdG9tUGVyY2VudDoiIixkPW4uY2lyY2xlVGhpY2tuZXNzKm8sbT1kK24uY2lyY2xlRmlsbEdhcCpvLHk9by1tLGc9eSpyKDEwMCpsKSx2PTErbi53YXZlQ291bnQsXz0yKnkvbi53YXZlQ291bnQqdixiPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpfTtwYXJzZUZsb2F0KGgpIT1wYXJzZUZsb2F0KGIoaCkpJiYoYj1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KS50b0ZpeGVkKDEpfSkscGFyc2VGbG9hdChoKSE9cGFyc2VGbG9hdChiKGgpKSYmKGI9ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgyKX0pO2Zvcih2YXIgdz1bXSx4PTA7eDw9NDAqdjt4Kyspdy5wdXNoKHt4OngvKDQwKnYpLHk6eC80MH0pO3ZhciBDPXF4KCkucmFuZ2UoWzAsMipNYXRoLlBJXSkuZG9tYWluKFswLDFdKSxFPXF4KCkucmFuZ2UoWzAsb10pLmRvbWFpbihbMCxvXSksUz1xeCgpLnJhbmdlKFswLF9dKS5kb21haW4oWzAsMV0pLGs9cXgoKS5yYW5nZShbMCxnXSkuZG9tYWluKFswLDFdKSxUPXF4KCkucmFuZ2UoW20rMip5K2csbS1nXSkuZG9tYWluKFswLDFdKSxBPXF4KCkucmFuZ2UoWzAsXy0yKnldKS5kb21haW4oWzAsMV0pLFA9cXgoKS5yYW5nZShbbSsyKnksbSsuNypjXSkuZG9tYWluKFswLDFdKSxPPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYSsiLCIrcysiKSIpLEk9WkUoKS5zdGFydEFuZ2xlKEMoMCkpLmVuZEFuZ2xlKEMoMSkpLm91dGVyUmFkaXVzKEUobykpLmlubmVyUmFkaXVzKEUoby1kKSk7Ty5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixJKS5zdHlsZSgiZmlsbCIsbi5jaXJjbGVDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrbysiKSIpO3ZhciBNPU8uYXBwZW5kKCJ0ZXh0IikudGV4dChiKGYpK3ApLmF0dHIoImNsYXNzIiwibGlxdWlkRmlsbEdhdWdlVGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZm9udC1zaXplIixjKyJweCIpLnN0eWxlKCJmaWxsIixuLnRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrUChuLnRleHRWZXJ0UG9zaXRpb24pKyIpIiksTj1lUygpLngoZnVuY3Rpb24odCl7cmV0dXJuIFModC54KX0pLnkwKGZ1bmN0aW9uKHQpe3JldHVybiBrKE1hdGguc2luKDIqTWF0aC5QSSpuLndhdmVPZmZzZXQqLTErMipNYXRoLlBJKigxLW4ud2F2ZUNvdW50KSsyKnQueSpNYXRoLlBJKSl9KS55MShmdW5jdGlvbih0KXtyZXR1cm4gMip5K2d9KSxSPU8uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwiY2xpcFdhdmUiK3UudG9TdHJpbmcoKSksRD1SLmFwcGVuZCgicGF0aCIpLmRhdHVtKHcpLmF0dHIoImQiLE4pLmF0dHIoIlQiLDApLEw9Ty5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLCJ1cmwoI2NsaXBXYXZlIit1LnRvU3RyaW5nKCkrIikiKTtMLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLG8pLmF0dHIoImN5IixvKS5hdHRyKCJyIix5KS5zdHlsZSgiZmlsbCIsbi53YXZlQ29sb3IpO3ZhciBqPUwuYXBwZW5kKCJ0ZXh0IikudGV4dChiKGYpK3ApLmF0dHIoImNsYXNzIiwibGlxdWlkRmlsbEdhdWdlVGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZm9udC1zaXplIixjKyJweCIpLnN0eWxlKCJmaWxsIixuLndhdmVUZXh0Q29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28rIiwiK1Aobi50ZXh0VmVydFBvc2l0aW9uKSsiKSIpO2lmKG4udmFsdWVDb3VudFVwKXt2YXIgRj1mdW5jdGlvbigpe3ZhciB0PXViKGYsaCk7cmV0dXJuIGZ1bmN0aW9uKGUpe00udGV4dChiKHQoZSkpK3ApLGoudGV4dChiKHQoZSkpK3ApfX07TS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixGKSxqLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLEYpfXZhciBWPW0rMip5LV87ZnVuY3Rpb24gQigpe0QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQShELmF0dHIoIlQiKSkrIiwwKSIpLEQudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZUFuaW1hdGVUaW1lKigxLUQuYXR0cigiVCIpKSkuZWFzZShhdykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQSgxKSsiLDApIikuYXR0cigiVCIsMSkub24oImVuZCIsZnVuY3Rpb24oKXtELmF0dHIoIlQiLDApLEIoKX0pfXJldHVybiBuLndhdmVSaXNlP1IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrVCgwKSsiKSIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVisiLCIrVChsKSsiKSIpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxLDApIil9KTpSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1YrIiwiK1QobCkrIikiKSxuLndhdmVBbmltYXRlJiZCKCkse3VwZGF0ZSh0KXt2YXIgZT1wYXJzZUZsb2F0KHQpLnRvRml4ZWQoMiksaT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KX07cGFyc2VGbG9hdChlKSE9cGFyc2VGbG9hdChpKGUpKSYmKGk9ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCkudG9GaXhlZCgxKX0pLHBhcnNlRmxvYXQoZSkhPXBhcnNlRmxvYXQoaShlKSkmJihpPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpLnRvRml4ZWQoMil9KTt2YXIgbz1mdW5jdGlvbigpe3ZhciBlPXViKE0udGV4dCgpLHBhcnNlRmxvYXQodCkudG9GaXhlZCgyKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe00udGV4dChpKGUodCkpK3ApLGoudGV4dChpKGUodCkpK3ApfX07TS50cmFuc2l0aW9uKCkuZHVyYXRpb24obi53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixvKSxqLnRyYW5zaXRpb24oKS5kdXJhdGlvbihuLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLG8pO3ZhciBhLHM9TWF0aC5tYXgobi5taW5WYWx1ZSxNYXRoLm1pbihuLm1heFZhbHVlLHQpKS9uLm1heFZhbHVlLGw9eSpyKDEwMCpzKSx1PXF4KCkucmFuZ2UoW20rMip5K2wsbS1sXSkuZG9tYWluKFswLDFdKShzKSxjPXF4KCkucmFuZ2UoWzAsX10pLmRvbWFpbihbMCwxXSksaD1xeCgpLnJhbmdlKFswLGxdKS5kb21haW4oWzAsMV0pO2E9bi53YXZlSGVpZ2h0U2NhbGluZz9Sdy5hcmVhKCkueChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LngpfSkueTAoZnVuY3Rpb24odCl7cmV0dXJuIGgoTWF0aC5zaW4oMipNYXRoLlBJKm4ud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtbi53YXZlQ291bnQpKzIqdC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKHQpe3JldHVybiAyKnkrbH0pOk47dmFyIGY9bi53YXZlQW5pbWF0ZT9BKDEpOjA7RC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZUFuaW1hdGU/bi53YXZlQW5pbWF0ZVRpbWUqKDEtRC5hdHRyKCJUIikpOm4ud2F2ZVJpc2VUaW1lKS5lYXNlKGF3KS5hdHRyKCJkIixhKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmKyIsMCkiKS5hdHRyKCJUIiwiMSIpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7bi53YXZlQW5pbWF0ZSYmKEQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQSgwKSsiLDApIiksQigpKX0pLFIudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4ud2F2ZVJpc2VUaW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIsIit1KyIpIil9fX10ay5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnRrLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24oZSl7dmFyIG49ZS5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBSUyhlLHRbbl0pfSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7aWYobz0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxvLGEscyxsLHUsYz1uLnNpdGUsaD0tMSxmPWVbaVtvLTFdXSxwPWYubGVmdD09PWM/Zi5yaWdodDpmLmxlZnQ7KytoPG87KWE9cCxwPShmPWVbaVtoXV0pLmxlZnQ9PT1jP2YucmlnaHQ6Zi5sZWZ0LGEmJnAmJnI8YS5pbmRleCYmcjxwLmluZGV4JiYoKHM9YylbMF0tKHU9cClbMF0pKigobD1hKVsxXS1zWzFdKS0oc1swXS1sWzBdKSoodVsxXS1zWzFdKTwwJiZ0LnB1c2goW2MuZGF0YSxhLmRhdGEscC5kYXRhXSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHM9by5jZWxscy5sZW5ndGg7IShpPW8uY2VsbHNbYV0pOylpZigrK2E+PXMpcmV0dXJuIG51bGw7dmFyIGw9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxjPWwqbCt1KnU7ZG97aT1vLmNlbGxzW3I9YV0sYT1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9by5lZGdlc1tuXSxzPXIubGVmdDtpZihzIT09aS5zaXRlJiZzfHwocz1yLnJpZ2h0KSl7dmFyIGw9dC1zWzBdLHU9ZS1zWzFdLGg9bCpsK3UqdTtoPGMmJihjPWgsYT1zLmluZGV4KX19KX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPXIsbnVsbD09bnx8Yzw9bipuP2kuc2l0ZTpudWxsfX0sZWsucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplayxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgZWsodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dCYwPT09ZT90aGlzOm5ldyBlayh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19LG5ldyBlaygxLDAsMCk7dmFyIHJrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZHluX3dpZHRoPTUwMH1yZXR1cm4gdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQsZTt0aGlzLmR5bl93aWR0aD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZDNjb250YWluZXIiKS5jbGllbnRXaWR0aCx0PVF2KCIjZDN0YXJnZXQiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLCJhbmltYXRlLWdyYWRpZW50IikuYXR0cigieDEiLCIwJSIpLmF0dHIoInkxIiwiMCUiKS5hdHRyKCJ4MiIsIjEwMCUiKS5hdHRyKCJ5MiIsIjAiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJyZWZsZWN0IiksZT1bIiMwMDFhZmQiLCIjNmI2N2ZjIiwiIzUzOTBlMyIsIiMzNTZjYzYiLCIjNTM5MGUzIiwiIzZiNjdmYyIsIiMwMDFhZmQiXSx0LnNlbGVjdEFsbCgiLnN0b3AiKS5kYXRhKGUpLmVudGVyKCkuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixmdW5jdGlvbih0LG4pe3JldHVybiBuLyhlLmxlbmd0aC0xKX0pLmF0dHIoInN0b3AtY29sb3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSksdC5hcHBlbmQoImFuaW1hdGUiKS5hdHRyKCJhdHRyaWJ1dGVOYW1lIiwieDEiKS5hdHRyKCJ2YWx1ZXMiLCIwJTsxMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKSx0LmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MiIpLmF0dHIoInZhbHVlcyIsIjEwMCU7MjAwJSIpLmF0dHIoImR1ciIsIjdzIikuYXR0cigicmVwZWF0Q291bnQiLCJpbmRlZmluaXRlIik7dmFyIG49e21pblZhbHVlOjAsbWF4VmFsdWU6MTAwLGNpcmNsZVRoaWNrbmVzczouMDUsY2lyY2xlRmlsbEdhcDouMDUsY2lyY2xlQ29sb3I6IiMxNzhCQ0EiLHdhdmVIZWlnaHQ6LjA1LHdhdmVDb3VudDoxLHdhdmVSaXNlVGltZToxZTMsd2F2ZUFuaW1hdGVUaW1lOjE4ZTMsd2F2ZVJpc2U6ITAsd2F2ZUhlaWdodFNjYWxpbmc6ITAsd2F2ZUFuaW1hdGU6ITAsd2F2ZUNvbG9yOiIjMTc4QkNBIix3YXZlT2Zmc2V0OjAsdGV4dFZlcnRQb3NpdGlvbjouNSx0ZXh0U2l6ZToxLHZhbHVlQ291bnRVcDohMCxkaXNwbGF5UGVyY2VudDohMCx0ZXh0Q29sb3I6IiMwNDU2ODEiLHdhdmVUZXh0Q29sb3I6IiNBNERCZjgiLGN1c3RvbVBlcmNlbnQ6IiUifTtuLnZhbHVlQ291bnRVcD0hMCxuLmNpcmNsZVRoaWNrbmVzcz0uMTUsbi5jaXJjbGVDb2xvcj0iIzgwODAxNSIsbi50ZXh0Q29sb3I9IiM1NTU1MDAiLG4ud2F2ZVRleHRDb2xvcj0iI0ZGRkZBQSIsbi53YXZlQ29sb3I9IiNBQUFBMzkiLG4udGV4dFZlcnRQb3NpdGlvbj0uOCxuLndhdmVBbmltYXRlVGltZT0xZTMsbi53YXZlSGVpZ2h0PS4wNSxuLndhdmVBbmltYXRlPSEwLG4ud2F2ZVJpc2U9ITEsbi53YXZlSGVpZ2h0U2NhbGluZz0hMSxuLndhdmVPZmZzZXQ9LjI1LG4udGV4dFNpemU9LjUsbi53YXZlQ291bnQ9MyxuLmRpc3BsYXlQZXJjZW50PSEwLG4ubWluVmFsdWU9MCxuLm1heFZhbHVlPTYwMCxuLmN1c3RvbVBlcmNlbnQ9IiBubW9sL0wiO3ZhciByPW5rKCIjZDNpbnB1dGdhdWdlIiwyMjAsbik7UWwoMTUwMCwxNTAwKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIHIudXBkYXRlKE1hdGguZmxvb3IoMTAwKk1hdGgucmFuZG9tKCkpKzI1MCl9KTt2YXIgaT17bWluVmFsdWU6MCxtYXhWYWx1ZToxMDAsY2lyY2xlVGhpY2tuZXNzOi4wNSxjaXJjbGVGaWxsR2FwOi4wNSxjaXJjbGVDb2xvcjoiIzE3OEJDQSIsd2F2ZUhlaWdodDouMDUsd2F2ZUNvdW50OjEsd2F2ZVJpc2VUaW1lOjFlMyx3YXZlQW5pbWF0ZVRpbWU6MThlMyx3YXZlUmlzZTohMCx3YXZlSGVpZ2h0U2NhbGluZzohMCx3YXZlQW5pbWF0ZTohMCx3YXZlQ29sb3I6IiMxNzhCQ0EiLHdhdmVPZmZzZXQ6MCx0ZXh0VmVydFBvc2l0aW9uOi41LHRleHRTaXplOjEsdmFsdWVDb3VudFVwOiEwLGRpc3BsYXlQZXJjZW50OiEwLHRleHRDb2xvcjoiIzA0NTY4MSIsd2F2ZVRleHRDb2xvcjoiI0E0REJmOCIsY3VzdG9tUGVyY2VudDoiJSJ9O2kudmFsdWVDb3VudFVwPSEwLGkuY2lyY2xlVGhpY2tuZXNzPS4xNSxpLmNpcmNsZUNvbG9yPSIjODAzNTdjIixpLnRleHRDb2xvcj0iIzU1NTUwMCIsaS53YXZlVGV4dENvbG9yPSIjRkZGRkFBIixpLndhdmVDb2xvcj0iI0FBQUEzOSIsaS50ZXh0VmVydFBvc2l0aW9uPS44LGkud2F2ZUFuaW1hdGVUaW1lPTFlMyxpLndhdmVIZWlnaHQ9LjA1LGkud2F2ZUFuaW1hdGU9ITAsaS53YXZlUmlzZT0hMSxpLndhdmVIZWlnaHRTY2FsaW5nPSExLGkud2F2ZU9mZnNldD0uMjUsaS50ZXh0U2l6ZT0uNSxpLndhdmVDb3VudD0zLGkuZGlzcGxheVBlcmNlbnQ9ITAsaS5taW5WYWx1ZT0wLGkubWF4VmFsdWU9NjAwLGkuY3VzdG9tUGVyY2VudD0iIG5tb2wvTCI7dmFyIG8sYSxzLGwsdSxjLGgsZixwLGQ9bmsoIiNkM291dGdhdWdlIiw0NSxpKTtRbCgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZC51cGRhdGUoTWF0aC5mbG9vcig0MCpNYXRoLnJhbmRvbSgpKSs1MCl9KSxzPVF2KCIjZDNiaW1vZGFsIiksbD1xeCgpLmRvbWFpbihbMzAsMTEwXSkucmFuZ2UoWzQwLDI3MF0pLHU9cXgoKS5kb21haW4oWzAsLjFdKS5yYW5nZShbMTUwLDIwXSksaD0oYz1bNzksNTQsNzQsNjIsODUsNTUsODgsODUsNTEsODUsNTQsODQsNzgsNDcsODMsNTIsNjIsODQsNTIsNzksNTEsNDcsNzgsNjksNzQsODMsNTUsNzYsNzgsNzksNzMsNzcsNjYsODAsNzQsNTIsNDgsODAsNTksOTAsODAsNTgsODQsNTgsNzMsODMsNjQsNTMsODIsNTksNzUsOTAsNTQsODAsNTQsODMsNzEsNjQsNzcsODEsNTksODQsNDgsODIsNjAsOTIsNzgsNzgsNjUsNzMsODIsNTYsNzksNzEsNjIsNzYsNjAsNzgsNzYsODMsNzUsODIsNzAsNjUsNzMsODgsNzYsODAsNDgsODYsNjAsOTAsNTAsNzgsNjMsNzIsODQsNzUsNTEsODIsNjIsODgsNDksODMsODEsNDcsODQsNTIsODYsODEsNzUsNTksODksNzksNTksODEsNTAsODUsNTksODcsNTMsNjksNzcsNTYsODgsODEsNDUsODIsNTUsOTAsNDUsODMsNTYsODksNDYsODIsNTEsODYsNTMsNzksODEsNjAsODIsNzcsNzYsNTksODAsNDksOTYsNTMsNzcsNzcsNjUsODEsNzEsNzAsODEsOTMsNTMsODksNDUsODYsNTgsNzgsNjYsNzYsNjMsODgsNTIsOTMsNDksNTcsNzcsNjgsODEsODEsNzMsNTAsODUsNzQsNTUsNzcsODMsODMsNTEsNzgsODQsNDYsODMsNTUsODEsNTcsNzYsODQsNzcsODEsODcsNzcsNTEsNzgsNjAsODIsOTEsNTMsNzgsNDYsNzcsODQsNDksODMsNzEsODAsNDksNzUsNjQsNzYsNTMsOTQsNTUsNzYsNTAsODIsNTQsNzUsNzgsNzksNzgsNzgsNzAsNzksNzAsNTQsODYsNTAsOTAsNTQsNTQsNzcsNzksNjQsNzUsNDcsODYsNjMsODUsODIsNTcsODIsNjcsNzQsNTQsODMsNzMsNzMsODgsODAsNzEsODMsNTYsNzksNzgsODQsNTgsODMsNDMsNjAsNzUsODEsNDYsOTAsNDYsNzRdKS5sZW5ndGgsZj1mdW5jdGlvbigpe3ZhciB0PVVnLGU9Vmcsbj1ZZztmdW5jdGlvbiByKHIpe3ZhciBpLG8sYT1yLmxlbmd0aCxzPW5ldyBBcnJheShhKTtmb3IoaT0wO2k8YTsrK2kpc1tpXT10KHJbaV0saSxyKTt2YXIgbD1lKHMpLHU9bFswXSxjPWxbMV0saD1uKHMsdSxjKTtBcnJheS5pc0FycmF5KGgpfHwoaD1aZyh1LGMsaCksaD1IZyhNYXRoLmNlaWwodS9oKSpoLE1hdGguZmxvb3IoYy9oKSpoLGgpKTtmb3IodmFyIGY9aC5sZW5ndGg7aFswXTw9dTspaC5zaGlmdCgpLC0tZjtmb3IoO2hbZi0xXT5jOyloLnBvcCgpLC0tZjt2YXIgcCxkPW5ldyBBcnJheShmKzEpO2ZvcihpPTA7aTw9ZjsrK2kpKHA9ZFtpXT1bXSkueDA9aT4wP2hbaS0xXTp1LHAueDE9aTxmP2hbaV06Yztmb3IoaT0wO2k8YTsrK2kpdTw9KG89c1tpXSkmJm88PWMmJmRbamcoaCxvLDAsZildLnB1c2gocltpXSk7cmV0dXJuIGR9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp6ZyhlKSxyKTp0fSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnpnKFt0WzBdLHRbMV1dKSxyKTplfSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP3pnKEJnLmNhbGwodCkpOnpnKHQpLHIpOm59LHJ9KCkuZG9tYWluKGwuZG9tYWluKCkpLnRocmVzaG9sZHMoNDApKGMpLHA9KG89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQvPTcpPD0xPy43NSooMS10KnQpLzc6MH0sYT1sLnRpY2tzKDQwKSxmdW5jdGlvbih0KXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixvPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytvPHI7KWlzTmFOKG49RmcodFtvXSkpPy0taTphKz1uO2Vsc2UgZm9yKDsrK288cjspaXNOYU4obj1GZyhlKHRbb10pKSk/LS1pOmErPW47aWYoaSlyZXR1cm4gYS9pfSh0LGZ1bmN0aW9uKHQpe3JldHVybiBvKGUtdCl9KV19KX0pKGMpLHMuaW5zZXJ0KCJnIiwiKiIpLmF0dHIoImZpbGwiLCIjYmJiIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShmKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiBsKHQueDApKzF9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdSh0Lmxlbmd0aC9oKX0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngxKS1sKHQueDApLTF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB1KDApLXUodC5sZW5ndGgvaCl9KSxzLmFwcGVuZCgicGF0aCIpLmRhdHVtKHApLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoImQiLHRTKCkuY3VydmUoYVMpLngoZnVuY3Rpb24odCl7cmV0dXJuIGwodFswXSl9KS55KGZ1bmN0aW9uKHQpe3JldHVybiB1KHRbMV0pfSkpfSx0fSgpLGlrPVVyKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIi5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99bWF0LWNhcmQtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIG9rKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCw0OSwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIk1lVGhyaXggOiBDbGVhbmluZyBob3NwaXRhbCBlZmZsdWVudCBzaW5jZSAyMDE4Il0pKSwodCgpKCkseWkoMywwLG51bGwsbnVsbCw0NiwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsSWcsT2cpKSxpbyg0LDQ5MTUyLG51bGwsMCxUZyxbXSxudWxsLG51bGwpLCh0KCkoKSx5aSg1LDAsbnVsbCwwLDQsIm1hdC1jYXJkLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtY2FyZC1oZWFkZXIiXV0sbnVsbCxudWxsLG51bGwsTmcsTWcpKSxpbyg2LDQ5MTUyLG51bGwsMCxBZyxbXSxudWxsLG51bGwpLCh0KCkoKSx5aSg3LDAsbnVsbCwxLDIsIm1hdC1jYXJkLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1jYXJkLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDgsMTYzODQsbnVsbCwwLGtnLFtdLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLG51bGwsWyIgT3VyIFByb2plY3QgIl0pKSwodCgpKCkseWkoMTAsMCxudWxsLDAsMzksIm1hdC1jYXJkLWNvbnRlbnQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQtY29udGVudCBtYXQtY2FyZC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDExLDE2Mzg0LG51bGwsMCxTZyxbXSxudWxsLG51bGwpLCh0KCkoKSx5aSgxMiwwLG51bGwsbnVsbCwzNywiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMTMsMCxudWxsLG51bGwsMjQsImRpdiIsW1siaWQiLCJkM2NvbnRhaW5lciJdLFsic3R5bGUiLCJtYXJnaW46IGF1dG87Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgxNCwwLG51bGwsbnVsbCwyMywiOnN2ZzpzdmciLFtbImhlaWdodCIsIjUwMCJdLFsiaWQiLCJkM3RhcmdldCJdLFsic3R5bGUiLCJkaXNwbGF5OiBibG9jazttYXJnaW46IGF1dG87Il0sWyJ3aWR0aCIsIjY3NCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMTUsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMTYsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIzMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtMjApIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiTVRYIl0pKSwodCgpKCkseWkoMTgsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyJIb3NwaXRhbCBlZmZsdWVudHMiXSkpLCh0KCkoKSx5aSgyMCwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNpbnB1dGdhdWdlIl0sWyJzdHlsZSIsImhlaWdodDogMTUwcHg7d2lkdGg6IDE1MHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMjEsMCxudWxsLG51bGwsMCwiOnN2ZzpyZWN0IixbWyJoZWlnaHQiLCI1MCJdLFsic3R5bGUiLCJmaWxsOiB0cmFuc3BhcmVudDsgc3Ryb2tlOiAjNWEwMDM2RkY7IHN0cm9rZS13aWR0aDogNXB4Il0sWyJ3aWR0aCIsIjY3NSJdLFsieCIsIjAiXSxbInkiLCIyNzAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDIyLDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiMTUwIl0sWyJzdHlsZSIsImZpbGw6IHRyYW5zcGFyZW50OyBzdHJva2U6ICM1YTAwMzZGRjsgc3Ryb2tlLXdpZHRoOiA1cHg7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMjMsMCxudWxsLG51bGwsMCwiOnN2ZzpyZWN0IixbWyJoZWlnaHQiLCI1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjY3NSJdLFsieCIsIjAiXSxbInkiLCIyNzAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDI0LDAsbnVsbCxudWxsLDAsIjpzdmc6cmVjdCIsW1siaGVpZ2h0IiwiMTUwIl0sWyJzdHlsZSIsImZpbGw6IHVybCgnI2FuaW1hdGUtZ3JhZGllbnQnKTsiXSxbIndpZHRoIiwiMTUwIl0sWyJ4IiwiMjUwIl0sWyJ5IiwiMjAwIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOnJlY3QiLFtbImhlaWdodCIsIjE1MCJdLFsic3R5bGUiLCJmaWxsOiB1cmwoJyNhbmltYXRlLWdyYWRpZW50Jyk7Il0sWyJ3aWR0aCIsIjE1MCJdLFsieCIsIjI1MCJdLFsieSIsIjIwMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMjYsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNDcwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDI3LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMzAiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIk1UWCJdKSksKHQoKSgpLHlpKDI5LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNzAsLTUpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiV2FzdGV3YXRlciBvdXRwdXQiXSkpLCh0KCkoKSx5aSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDMyLDAsbnVsbCxudWxsLDUsIjpzdmc6ZyIsW1sidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE4MCwyMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDMzLDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTUiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQ1LDE2MykiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKHQoKSgpLHlpKDM1LDAsbnVsbCxudWxsLDEsIjpzdmc6dGV4dCIsW1siZm9udC1zaXplIiwiMTAiXSxbInRleHQtYW5jaG9yIiwibWlkZGxlIl0sWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQ1LDE3NSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyJCaW1vZGFsIGRpc3RyaWJ1dGlvbiJdKSksKHQoKSgpLHlpKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDM4LDAsbnVsbCxudWxsLDExLCJkaXYiLFtbInN0eWxlIiwicGFkZGluZzogMTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyIgT3VyIHByb2plY3QgaXMgYSBnZW5lcmFsIHB1cnBvc2UgYmFjdGVyaWFsIHBsYXRmb3JtIGZvciBkcnVnIGRlZ3JhZGF0aW9uLiBXZSBjaG9vc2UgdG8gZm9jdXMgb24gY3l0b3RveGljIGFudGljYW5jZXIgZHJ1Z3MgYXMgcHJvb2Ygb2YgY29uY2VwdCwgYXMgdGhlaXIgY29uY2VudHJhdGlvbnMgYXJlIGFsYXJtaW5nbHkgaGlnaCBpbiBob3NwaXRhbCB3YXN0ZXdhdGVyIGVmZmx1ZW50LiBUaHJvdWdoIGEgdG9vbGtpdCBvZiBicm9hZC0gYW5kIG5hcnJvdy1zcGVjdHJ1bSBlbnp5bWVzLCB3ZSBhaW0gdG8gYWNoaWV2ZSBjbGVhcmFuY2Ugb2YgdGhlIG1haW4gY2hlbW90aGVyYXBldXRpYyBhZ2VudHMsIGxpa2UgbWV0aG90cmV4YXRlLCA1LWZsdW9yb3VyYWNpbCBvciBkb3hvcnViaWNpbi4gIl0pKSwodCgpKCkseWkoNDAsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiIFdlIGFyZSB0YWtpbmcgb24gdGhyZWUgbWFpbiBjaGFsbGVuZ2VzIDogZWZmaWNpZW50IGVudHJ5IG9mIHRoZXNlIG1vbGVjdWxlIGludG8gdGhlIGNlbGwsIHRocm91Z2ggY2hhbm5lbHMgYW5kIHRyYW5zcG9ydGVycyAodXJhY2lsLWxpa2UgdHJhbnNwb3J0ZXIgdXJhQSwgY3J5cHRpYyBmb2xhdGUtYW5hbG9ndWUgdHJhbnNwb3J0ZXIgYWJnVCAuLi4pLCBwcm9wZXIgZGVncmFkYXRpb24gdGhyb3VnaCBtZXRhYm9saXppbmcgZW56eW1lcyAoY2FyYm94eXBlcHRpZGFzZSBHMiwgY3l0b2Nocm9tZSBQNDUwIFx1MjAyNiksIGFuZCBsb25nIHRlcm0gb3BlcmF0aW9uIG9mIHRoZSBiaW9yZWFjdG9yLCB0aG91Z2ggYSBiaXN0YWJsZSwgXHUyMDFjc3RlbS1jZWxsIGxpa2VcdTIwMWQgcG9wdWxhdGlvbiBvZiBiYWN0ZXJpYSwgYWxsZXZpYXRpbmcgdGhlIG5lZWQgZm9yIHJlZ3VsYXIgcmVzZWVkaW5nIHdpdGggZnJlc2ggY2xvbmVzLiAiXSkpLCh0KCkoKSx5aSg0MiwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDQzLDAsbnVsbCxudWxsLDEsImgzIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIlByb2plY3Qgc2lnbmlmaWNhbmNlIl0pKSwodCgpKCksTW8oLTEsbnVsbCxbIiBQaGFybWFjZXV0aWNhbCBkcnVncyBhcmUgYSBwYXJ0aWN1bGFybHkgY29uY3MgbmluZyBzb3VyY2Ugb2YgcG9sbHV0aW9uIDogc2VsZWN0ZWQgdG8gYmUgYmlvbG9naWNhbGx5IGFjdGl2ZSBhdCBsb3cgY29uY2VudHJhdGlvbiAmIGRlc2lnbmVkIHRvIHJlc2lzdCBiaW9kZWdyYWRhdGlvbiwgZHJ1Z3MgY29uc3RpdHV0ZSBhIGNsYXNzIG9mIGhpZ2ggcmVtYW5lbmNlIHBvbGx1dGFudHMgdGhhdCBpcyByb3V0aW5lbHkgZm91bmQgaW4gdGhlIGVudmlyb25tZW50LCBldmVuIGluIG91ciBkcmlua2luZyB3YXRlci4gIl0pKSwodCgpKCkseWkoNDYsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiIFRob3VnaCBwaHlzaWNhbCAmIGNoZW1pY2FsIHNvbHV0aW9uIGV4aXN0LCBpbiB0aGUgZm9ybSBvZiBvem9uZSBhbmQgVVYgdHJlYXRtZW50LCBvdXIgc29sdXRpb24gY2FuIG9mZmVyIHRoZSBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeSBvZiBhIGJpb3JlYWN0b3ItYmFzZWQgYXBwcm9hY2guICJdKSksKHQoKSgpLHlpKDQ4LDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIiBPdXIgc3RlbS1jZWxsIGxpa2UgYXBwcm9hY2ggdG8gYmFjdGVyaWFsIHBvcHVsYXRpb24gbWFrZXMgaXQgYW4gb3B0aW9uIHdpdGggcG90ZW50aWFsbHkgbG93ZXIgb25nb2luZyBjb3N0cywgYW5kIG91ciBkZWdyYWRhdGlvbiBlbnp5bWVzIGFsbG93IHRhcmdldGVkIGRlZ3JhZGF0aW9uIG9mIHBhcnRpY3VsYXJseSByZXNpbGllbnQgbW9sZWN1bGVzIDogYm90aCB3ZWFrbmVzc2VzIG9mIGNvbnZlbnRpb25hbCBtZXRob2RzIG9mIHdhc3Rld2F0ZXIgdHJlYXRtZW50LiAiXSkpXSxudWxsLG51bGwpfXZhciBhaz1SaSgiZGFzaGJvYXJkIixyayxmdW5jdGlvbih0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsMSwiZGFzaGJvYXJkIixbXSxudWxsLG51bGwsbnVsbCxvayxpaykpLGlvKDEsMTA5NzcyOCxudWxsLDAscmssW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX0se30se30sW10pLHNrPTAsbGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fb3BlbkNsb3NlQWxsQWN0aW9ucz1uZXcgaXQsdGhpcy5pZD0iY2RrLWFjY29yZGlvbi0iK3NrKyssdGhpcy5fbXVsdGk9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGl9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tdWx0aT1nbCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuQWxsPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbkNsb3NlQWxsKCEwKX0sdC5wcm90b3R5cGUuY2xvc2VBbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITEpfSx0LnByb3RvdHlwZS5fb3BlbkNsb3NlQWxsPWZ1bmN0aW9uKHQpe3RoaXMubXVsdGkmJnRoaXMuX29wZW5DbG9zZUFsbEFjdGlvbnMubmV4dCh0KX0sdH0oKSx1az0wLGNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dmFyIHI9dGhpczt0aGlzLmFjY29yZGlvbj10LHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZXhwYW5zaW9uRGlzcGF0Y2hlcj1uLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbj13LkVNUFRZLHRoaXMuY2xvc2VkPW5ldyB6ZSx0aGlzLm9wZW5lZD1uZXcgemUsdGhpcy5kZXN0cm95ZWQ9bmV3IHplLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IHplLHRoaXMuaWQ9ImNkay1hY2NvcmRpb24tY2hpbGQtIit1aysrLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyPWZ1bmN0aW9uKCl7fSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1uLmxpc3RlbihmdW5jdGlvbih0LGUpe3IuYWNjb3JkaW9uJiYhci5hY2NvcmRpb24ubXVsdGkmJnIuYWNjb3JkaW9uLmlkPT09ZSYmci5pZCE9PXQmJihyLmV4cGFuZGVkPSExKX0pLHRoaXMuYWNjb3JkaW9uJiYodGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvT3BlbkNsb3NlQWxsQWN0aW9ucygpKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJleHBhbmRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9leHBhbmRlZH0sc2V0OmZ1bmN0aW9uKHQpe3Q9Z2wodCksdGhpcy5fZXhwYW5kZWQhPT10JiYodGhpcy5fZXhwYW5kZWQ9dCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodCksdD8odGhpcy5vcGVuZWQuZW1pdCgpLHRoaXMuX2V4cGFuc2lvbkRpc3BhdGNoZXIubm90aWZ5KHRoaXMuaWQsdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaWQ6dGhpcy5pZCkpOnRoaXMuY2xvc2VkLmVtaXQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPWdsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQuY29tcGxldGUoKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuZGVzdHJveWVkLmVtaXQoKSx0aGlzLmRlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyKCksdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkKX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMSl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMCl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmVUb09wZW5DbG9zZUFsbEFjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmFjY29yZGlvbi5fb3BlbkNsb3NlQWxsQWN0aW9ucy5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5kaXNhYmxlZHx8KHQuZXhwYW5kZWQ9ZSl9KX0sdH0oKSxoaz1mdW5jdGlvbigpe30sZms9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5faGlkZVRvZ2dsZT0hMSxlLmRpc3BsYXlNb2RlPSJkZWZhdWx0IixlfXJldHVybiBpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaWRlVG9nZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVUb2dnbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9oaWRlVG9nZ2xlPWdsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KGxrKSxwaz0wLGRrPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuLHIpfHx0aGlzO3JldHVybiBvLl92aWV3Q29udGFpbmVyUmVmPWksby5faGlkZVRvZ2dsZT0hMSxvLl9pbnB1dENoYW5nZXM9bmV3IGl0LG8uX2hlYWRlcklkPSJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci0iK3BrKyssby5hY2NvcmRpb249ZSxvfXJldHVybiBpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoaWRlVG9nZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpZGVUb2dnbGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9oaWRlVG9nZ2xlPWdsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9nZXRIaWRlVG9nZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWNjb3JkaW9uP3RoaXMuYWNjb3JkaW9uLmhpZGVUb2dnbGU6dGhpcy5oaWRlVG9nZ2xlfSxlLnByb3RvdHlwZS5faGFzU3BhY2luZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY2NvcmRpb24mJiJkZWZhdWx0Ij09PSh0aGlzLmV4cGFuZGVkP3RoaXMuYWNjb3JkaW9uLmRpc3BsYXlNb2RlOnRoaXMuX2dldEV4cGFuZGVkU3RhdGUoKSl9LGUucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIn0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9sYXp5Q29udGVudCYmdGhpcy5vcGVuZWQucGlwZSh5bChudWxsKSxZbChmdW5jdGlvbigpe3JldHVybiB0LmV4cGFuZGVkJiYhdC5fcG9ydGFsfSksaXUoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3BvcnRhbD1uZXcgY3UodC5fbGF6eUNvbnRlbnQuX3RlbXBsYXRlLHQuX3ZpZXdDb250YWluZXJSZWYpfSl9LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2lucHV0Q2hhbmdlcy5uZXh0KHQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5faW5wdXRDaGFuZ2VzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9ib2R5QW5pbWF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudC5jbGFzc0xpc3Qsbj10LnBoYXNlTmFtZSxyPXQudG9TdGF0ZTsiZG9uZSI9PT1uJiYiZXhwYW5kZWQiPT09cj9lLmFkZCgibWF0LWV4cGFuZGVkIik6InN0YXJ0Ij09PW4mJiJjb2xsYXBzZWQiPT09ciYmZS5yZW1vdmUoIm1hdC1leHBhbmRlZCIpfSxlfShjayksbWs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5wYW5lbD10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj13LkVNUFRZLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj10dCh0Lm9wZW5lZCx0LmNsb3NlZCx0Ll9pbnB1dENoYW5nZXMucGlwZShZbChmdW5jdGlvbih0KXtyZXR1cm4hKCF0LmhpZGVUb2dnbGUmJiF0LmRpc2FibGVkKX0pKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksbi5tb25pdG9yKGUubmF0aXZlRWxlbWVudCl9cmV0dXJuIHQucHJvdG90eXBlLl90b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLnBhbmVsLnRvZ2dsZSgpfSx0LnByb3RvdHlwZS5faXNFeHBhbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLmV4cGFuZGVkfSx0LnByb3RvdHlwZS5fZ2V0RXhwYW5kZWRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLl9nZXRFeHBhbmRlZFN0YXRlKCl9LHQucHJvdG90eXBlLl9nZXRQYW5lbElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuaWR9LHQucHJvdG90eXBlLl9zaG93VG9nZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucGFuZWwuaGlkZVRvZ2dsZSYmIXRoaXMucGFuZWwuZGlzYWJsZWR9LHQucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgMzI6Y2FzZSAxMzp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlKCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpfSx0fSgpLHlrPWZ1bmN0aW9uKCl7fSxnaz1mdW5jdGlvbigpe30sdms9ZnVuY3Rpb24oKXt9LF9rPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2xpc3RlbmVycz1bXX1yZXR1cm4gdC5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj10aGlzLl9saXN0ZW5lcnM7bjxyLmxlbmd0aDtuKyspKDAscltuXSkodCxlKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2xpc3RlbmVycy5wdXNoKHQpLGZ1bmN0aW9uKCl7ZS5fbGlzdGVuZXJzPWUuX2xpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQhPT1lfSl9fSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2xpc3RlbmVycz1bXX0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLGJrPVVyKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1leHBhbnNpb24tcGFuZWx7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDt0cmFuc2l0aW9uOm1hcmdpbiAyMjVtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudC5tYXQtZXhwYW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1ib2R5e3BhZGRpbmc6MCAyNHB4IDE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW46MTZweCAwfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6Zmlyc3QtY2hpbGQsLm1hdC1hY2NvcmRpb24+OmZpcnN0LWNoaWxkOm5vdCgubWF0LWV4cGFuc2lvbi1wYW5lbCkgLm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW4tdG9wOjB9Lm1hdC1hY2NvcmRpb24+Lm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZzpsYXN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpsYXN0LWNoaWxkOm5vdCgubWF0LWV4cGFuc2lvbi1wYW5lbCkgLm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZ3ttYXJnaW4tYm90dG9tOjB9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzoxNnB4IDhweCAxNnB4IDI0cHh9Lm1hdC1hY3Rpb24tcm93IGJ1dHRvbi5tYXQtYnV0dG9ue21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1hY3Rpb24tcm93IGJ1dHRvbi5tYXQtYnV0dG9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiYm9keUV4cGFuc2lvbiIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiMHB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiIqIix2aXNpYmlsaXR5OiJ2aXNpYmxlIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiB3ayh0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLG1pKDAsbnVsbCxudWxsLDApKV0sbnVsbCxudWxsKX1mdW5jdGlvbiB4ayh0KXtyZXR1cm4gRG8oMixbVG8obnVsbCwwKSwodCgpKCkseWkoMSwwLFtbImJvZHkiLDFdXSxudWxsLDUsImRpdiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQiXSxbInJvbGUiLCJyZWdpb24iXV0sW1syNCwiQGJvZHlFeHBhbnNpb24iLDBdLFsxLCJhcmlhLWxhYmVsbGVkYnkiLDBdLFs4LCJpZCIsMF1dLFtbbnVsbCwiQGJvZHlFeHBhbnNpb24uZG9uZSJdLFtudWxsLCJAYm9keUV4cGFuc2lvbi5zdGFydCJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITAsaT10LmNvbXBvbmVudDtyZXR1cm4iQGJvZHlFeHBhbnNpb24uZG9uZSI9PT1lJiYocj0hMSE9PWkuX2JvZHlBbmltYXRpb24obikmJnIpLCJAYm9keUV4cGFuc2lvbi5zdGFydCI9PT1lJiYocj0hMSE9PWkuX2JvZHlBbmltYXRpb24obikmJnIpLHJ9LG51bGwsbnVsbCkpLCh0KCkoKSx5aSgyLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksVG8obnVsbCwxKSwodCgpKCksbWkoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCx3aykpLGlvKDUsMjEyOTkyLG51bGwsMCxwdSxbTWUseG5dLHtwb3J0YWw6WzAsInBvcnRhbCJdfSxudWxsKSxUbyhudWxsLDIpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3BvcnRhbCl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEsMCxuLl9nZXRFeHBhbmRlZFN0YXRlKCksbi5faGVhZGVySWQsbi5pZCl9KX12YXIgQ2s9VXIoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDI0cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntvdXRsaW5lOjB9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZDpmb2N1cywubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmhvdmVye2JhY2tncm91bmQ6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtjdXJzb3I6cG9pbnRlcn0ubWF0LWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpyb3c7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO21hcmdpbi1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sW2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntmbGV4LWdyb3c6Mn0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAycHggMnB4IDA7Y29udGVudDonJztkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjNweDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImluZGljYXRvclJvdGF0ZSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDBkZWcpIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToicm90YXRlKDE4MGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX0se3R5cGU6NyxuYW1lOiJleHBhbnNpb25IZWlnaHQiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7Y29sbGFwc2VkSGVpZ2h0fX0ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp7cGFyYW1zOntjb2xsYXBzZWRIZWlnaHQ6IjQ4cHgifX19LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OiJ7e2V4cGFuZGVkSGVpZ2h0fX0ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp7cGFyYW1zOntleHBhbmRlZEhlaWdodDoiNjRweCJ9fX0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6MyxzdGVwczpbe3R5cGU6MTEsc2VsZWN0b3I6IkBpbmRpY2F0b3JSb3RhdGUiLGFuaW1hdGlvbjp7dHlwZTo5LG9wdGlvbnM6bnVsbH0sb3B0aW9uczp7b3B0aW9uYWw6ITB9fSx7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjIyNW1zIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSJ9XSxvcHRpb25zOm51bGx9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBFayh0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsMCwic3BhbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLWluZGljYXRvciJdXSxbWzI0LCJAaW5kaWNhdG9yUm90YXRlIiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpXSxudWxsLGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxlLmNvbXBvbmVudC5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0pfWZ1bmN0aW9uIFNrKHQpe3JldHVybiBEbygyLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwzLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1jb250ZW50Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLFRvKG51bGwsMCksVG8obnVsbCwxKSxUbyhudWxsLDIpLCh0KCkoKSxtaSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLEVrKSksaW8oNSwxNjM4NCxudWxsLDAsRnMsW3huLHduXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUuY29tcG9uZW50Ll9zaG93VG9nZ2xlKCkpfSxudWxsKX12YXIga2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxUaz1Vcih7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBBayh0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsMzUsImRpdiIsW1siaWQiLCJnY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIlNpdGUgbWFwcyJdKSksKHQoKSgpLHlpKDMsMCxudWxsLG51bGwsMzIsIm1hdC1hY2NvcmRpb24iLFtbImNsYXNzIiwibWF0LWFjY29yZGlvbiJdLFsibXVsdGkiLCJ0cnVlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDQsMTYzODQsbnVsbCwwLGZrLFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKHQoKSgpLHlpKDUsMTY3NzcyMTYsbnVsbCxudWxsLDE0LCJtYXQtZXhwYW5zaW9uLXBhbmVsIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwiXV0sW1syLCJtYXQtZXhwYW5kZWQiLG51bGxdLFsyLCJtYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmciLG51bGxdXSxudWxsLG51bGwseGssYmspKSxpbyg2LDE3NTMwODgsbnVsbCwxLGRrLFtbMyxma10sQ24sX2sseG5dLG51bGwsbnVsbCkseG8oMzM1NTQ0MzIwLDEse19sYXp5Q29udGVudDowfSksYW8oMjU2LG51bGwsZmssdm9pZCAwLFtdKSwodCgpKCkseWkoOSwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09R2kodCwxMCkuX3RvZ2dsZSgpJiZyKSwia2V5ZG93biI9PT1lJiYocj0hMSE9PUdpKHQsMTApLl9rZXlkb3duKG4pJiZyKSxyfSxTayxDaykpLGlvKDEwLDE4MDIyNCxudWxsLDAsbWssW2RrLGRuLFFoLENuXSxudWxsLG51bGwpLE9vKDExLHtjb2xsYXBzZWRIZWlnaHQ6MCxleHBhbmRlZEhlaWdodDoxfSksT28oMTIse3ZhbHVlOjAscGFyYW1zOjF9KSwodCgpKCkseWkoMTMsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDE0LDE2Mzg0LG51bGwsMCxnayxbXSxudWxsLG51bGwpLCh0KCkoKSxNbygtMSxudWxsLFsiIFByb2plY3QgZGVzaWduICJdKSksKHQoKSgpLHlpKDE2LDAsbnVsbCwxLDIsIm1hdC1wYW5lbC1kZXNjcmlwdGlvbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpbygxNywxNjM4NCxudWxsLDAseWssW10sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsbnVsbCxbIiBUaGVvcmV0aWNhbCB1bmRlcnBpbm5pbmcgb2Ygb3VyIHByb2plY3QgIl0pKSwodCgpKCksTW8oLTEsMSxbIiBBQUFBQUFBQUFBQWEgIl0pKSwodCgpKCkseWkoMjAsMTY3NzcyMTYsbnVsbCxudWxsLDE1LCJtYXQtZXhwYW5zaW9uLXBhbmVsIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwiXV0sW1syLCJtYXQtZXhwYW5kZWQiLG51bGxdLFsyLCJtYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmciLG51bGxdXSxudWxsLG51bGwseGssYmspKSxpbygyMSwxNzUzMDg4LG51bGwsMSxkayxbWzMsZmtdLENuLF9rLHhuXSxudWxsLG51bGwpLHhvKDMzNTU0NDMyMCwyLHtfbGF6eUNvbnRlbnQ6MH0pLGFvKDI1NixudWxsLGZrLHZvaWQgMCxbXSksKHQoKSgpLHlpKDI0LDAsbnVsbCwwLDksIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIl0sWyJyb2xlIiwiYnV0dG9uIl1dLFtbMSwiaWQiLDBdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtY29udHJvbHMiLDBdLFsxLCJhcmlhLWV4cGFuZGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzQwLCJAZXhwYW5zaW9uSGVpZ2h0IiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT1HaSh0LDI1KS5fdG9nZ2xlKCkmJnIpLCJrZXlkb3duIj09PWUmJihyPSExIT09R2kodCwyNSkuX2tleWRvd24obikmJnIpLHJ9LFNrLENrKSksaW8oMjUsMTgwMjI0LG51bGwsMCxtayxbZGssZG4sUWgsQ25dLG51bGwsbnVsbCksT28oMjYse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSxPbygyNyx7dmFsdWU6MCxwYXJhbXM6MX0pLCh0KCkoKSx5aSgyOCwwLG51bGwsMCwyLCJtYXQtcGFuZWwtdGl0bGUiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oMjksMTYzODQsbnVsbCwwLGdrLFtdLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLG51bGwsWyIgTWF0ZXJpYWwgYW5kIG1ldGhvZCAiXSkpLCh0KCkoKSx5aSgzMSwwLG51bGwsMSwyLCJtYXQtcGFuZWwtZGVzY3JpcHRpb24iLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oMzIsMTYzODQsbnVsbCwwLHlrLFtdLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLG51bGwsWyIgT3VyIGV4cGVyaW1lbnRhbCBkZXNpZ25zICYgcmVzdWx0cyAiXSkpLCh0KCkoKSx5aSgzNCwwLG51bGwsMSwxLCJwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIkknbSB2aXNpYmxlIGJlY2F1c2UgSSBhbSBvcGVuIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsNCwwLCJ0cnVlIil9LGZ1bmN0aW9uKHQsZSl7dChlLDUsMCxHaShlLDYpLmV4cGFuZGVkLEdpKGUsNikuX2hhc1NwYWNpbmcoKSksdChlLDksMCxHaShlLDEwKS5wYW5lbC5faGVhZGVySWQsR2koZSwxMCkucGFuZWwuZGlzYWJsZWQ/LTE6MCxHaShlLDEwKS5fZ2V0UGFuZWxJZCgpLEdpKGUsMTApLl9pc0V4cGFuZGVkKCksR2koZSwxMCkucGFuZWwuZGlzYWJsZWQsR2koZSwxMCkuX2lzRXhwYW5kZWQoKSx0KGUsMTIsMCxHaShlLDEwKS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLHQoZSwxMSwwLEdpKGUsMTApLmNvbGxhcHNlZEhlaWdodCxHaShlLDEwKS5leHBhbmRlZEhlaWdodCkpKSx0KGUsMjAsMCxHaShlLDIxKS5leHBhbmRlZCxHaShlLDIxKS5faGFzU3BhY2luZygpKSx0KGUsMjQsMCxHaShlLDI1KS5wYW5lbC5faGVhZGVySWQsR2koZSwyNSkucGFuZWwuZGlzYWJsZWQ/LTE6MCxHaShlLDI1KS5fZ2V0UGFuZWxJZCgpLEdpKGUsMjUpLl9pc0V4cGFuZGVkKCksR2koZSwyNSkucGFuZWwuZGlzYWJsZWQsR2koZSwyNSkuX2lzRXhwYW5kZWQoKSx0KGUsMjcsMCxHaShlLDI1KS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLHQoZSwyNiwwLEdpKGUsMjUpLmNvbGxhcHNlZEhlaWdodCxHaShlLDI1KS5leHBhbmRlZEhlaWdodCkpKX0pfXZhciBQaz1SaSgiYXBwLXNpdGVtYXAiLGtrLGZ1bmN0aW9uKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwxLCJhcHAtc2l0ZW1hcCIsW10sbnVsbCxudWxsLG51bGwsQWssVGspKSxpbygxLDExNDY4OCxudWxsLDAsa2ssW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxPaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fc2FuaXRpemVyPXR9cmV0dXJuIHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHQpfSx0fSgpLElrPW5ldyBtdCgiRmxleCBMYXlvdXQgdG9rZW4sIGNvbGxlY3QgYWxsIGJyZWFrcG9pbnRzIGludG8gb25lIHByb3ZpZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLE1rPVt7YWxpYXM6InhzIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6Imd0LXhzIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkifSx7YWxpYXM6Imx0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA1OTlweCkifSx7YWxpYXM6InNtIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoiZ3Qtc20iLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSJ9LHthbGlhczoibHQtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDk1OXB4KSJ9LHthbGlhczoibWQiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoiZ3QtbWQiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkifSx7YWxpYXM6Imx0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxMjc5cHgpIn0se2FsaWFzOiJsZyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSJ9LHthbGlhczoiZ3QtbGciLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkifSx7YWxpYXM6Imx0LXhsIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJ4bCIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTkyMHB4KSBhbmQgKG1heC13aWR0aDogNTAwMHB4KSJ9XSxOaz0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLFJrPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkiLERrPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogODQwcHgpIixMaz0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIixqaz17SEFORFNFVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSwgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLFRBQkxFVDpSaysiICwgIitOayxXRUI6RGsrIiwgIitMaysiICIsSEFORFNFVF9QT1JUUkFJVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSIsVEFCTEVUX1BPUlRSQUlUOlJrKyIgIixXRUJfUE9SVFJBSVQ6IiIrRGssSEFORFNFVF9MQU5EU0NBUEU6IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogOTU5cHgpXSIsVEFCTEVUX0xBTkRTQ0FQRToiIitOayxXRUJfTEFORFNDQVBFOiIiK0xrfSxGaz1be2FsaWFzOiJoYW5kc2V0IixtZWRpYVF1ZXJ5OmprLkhBTkRTRVR9LHthbGlhczoiaGFuZHNldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6amsuSEFORFNFVF9MQU5EU0NBUEV9LHthbGlhczoiaGFuZHNldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTpqay5IQU5EU0VUX1BPUlRSQUlUfSx7YWxpYXM6InRhYmxldCIsbWVkaWFRdWVyeTpqay5UQUJMRVR9LHthbGlhczoidGFibGV0LmxhbmRzY2FwZSIsbWVkaWFRdWVyeTpqay5UQUJMRVR9LHthbGlhczoidGFibGV0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OmprLlRBQkxFVF9QT1JUUkFJVH0se2FsaWFzOiJ3ZWIiLG1lZGlhUXVlcnk6amsuV0VCLG92ZXJsYXBwaW5nOiEwfSx7YWxpYXM6IndlYi5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6amsuV0VCX0xBTkRTQ0FQRSxvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIucG9ydHJhaXQiLG1lZGlhUXVlcnk6amsuV0VCX1BPUlRSQUlULG92ZXJsYXBwaW5nOiEwfV07ZnVuY3Rpb24gVmsodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO2Zvcih2YXIgcj0wLGk9ZTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXTtpZihudWxsIT1vKWZvcih2YXIgYSBpbiBvKW8uaGFzT3duUHJvcGVydHkoYSkmJih0W2FdPW9bYV0pfXJldHVybiB0fXZhciBCaz0vKFwufC18XykvZztmdW5jdGlvbiB6ayh0KXt2YXIgZT10Lmxlbmd0aD4wP3QuY2hhckF0KDApOiIiLG49dC5sZW5ndGg+MT90LnNsaWNlKDEpOiIiO3JldHVybiBlLnRvVXBwZXJDYXNlKCkrbn12YXIgVWs9e2FkZEZsZXhUb1BhcmVudDohMCxhZGRPcmllbnRhdGlvbkJwczohMSxkaXNhYmxlRGVmYXVsdEJwczohMSxkaXNhYmxlVmVuZG9yUHJlZml4ZXM6ITEsc2VydmVyTG9hZGVkOiExLHVzZUNvbHVtbkJhc2lzWmVybzohMH0sSGs9bmV3IG10KCJGbGV4IExheW91dCB0b2tlbiwgY29uZmlnIG9wdGlvbnMgZm9yIHRoZSBsaWJyYXJ5Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBVa319KSxxaz1uZXcgbXQoIlRva2VuIChAYW5ndWxhci9mbGV4LWxheW91dCkgQnJlYWtwb2ludHMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7dmFyIHQ9ZWUoSWspLGU9ZWUoSGspLG49W10uY29uY2F0LmFwcGx5KFtdLCh0fHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfSkpO3JldHVybiBmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgbixyPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7clt0LmFsaWFzXT10fSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdC5hbGlhc10/Vmsoclt0LmFsaWFzXSx0KTpyW3QuYWxpYXNdPXR9KSwobj1PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnN1ZmZpeHx8KHQuc3VmZml4PXQuYWxpYXMucmVwbGFjZShCaywifCIpLnNwbGl0KCJ8IikubWFwKHprKS5qb2luKCIiKSx0Lm92ZXJsYXBwaW5nPSEhdC5vdmVybGFwcGluZyl9KSxufSgoZS5kaXNhYmxlRGVmYXVsdEJwcz9bXTpNaykuY29uY2F0KGUuYWRkT3JpZW50YXRpb25CcHM/Rms6W10pLG4pfX0pLEdrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWdpc3RyeT10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIml0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzb3J0ZWRJdGVtcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQub3ZlcmxhcHBpbmd9KSxlPXRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hMCE9PXQub3ZlcmxhcHBpbmd9KTtyZXR1cm4gdC5jb25jYXQoZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZmluZEJ5QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWxpYXM9PXR9KXx8bnVsbH0sdC5wcm90b3R5cGUuZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWVkaWFRdWVyeT09dH0pfHxudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm92ZXJsYXBwaW5ncyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIDE9PXQub3ZlcmxhcHBpbmd9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFsaWFzZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFsaWFzfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdWZmaXhlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VmZml4P3Quc3VmZml4OiIifSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUocWspKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksV2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1lJiYoZT0iYWxsIiksdm9pZCAwPT09biYmKG49IiIpLHZvaWQgMD09PXImJihyPSIiKSx0aGlzLm1hdGNoZXM9dCx0aGlzLm1lZGlhUXVlcnk9ZSx0aGlzLm1xQWxpYXM9bix0aGlzLnN1ZmZpeD1yfXJldHVybiB0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLm1hdGNoZXMsdGhpcy5tZWRpYVF1ZXJ5LHRoaXMubXFBbGlhcyx0aGlzLnN1ZmZpeCl9LHR9KCksUWs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl96b25lPXQsdGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuX2RvY3VtZW50PW4sdGhpcy5fcmVnaXN0cnk9bmV3IE1hcCx0aGlzLl9zb3VyY2U9bmV3IGtkKG5ldyBXayghMCkpLHRoaXMuX29ic2VydmFibGUkPXRoaXMuX3NvdXJjZS5hc09ic2VydmFibGUoKX1yZXR1cm4gdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVnaXN0cnkuZ2V0KHQpO3JldHVybiEhZSYmZS5tYXRjaGVzfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLnJlZ2lzdGVyUXVlcnkodCksdGhpcy5fb2JzZXJ2YWJsZSQucGlwZShZbChmdW5jdGlvbihlKXtyZXR1cm4hdHx8ZS5tZWRpYVF1ZXJ5PT09dH0pKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/W106InN0cmluZyI9PXR5cGVvZiB0P1t0XTooZT17fSx0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKGVbdF09ITApfSkpO3ZhciBlfSh0KTtuLmxlbmd0aD4wJiYodGhpcy5fcHJlcGFyZVF1ZXJ5Q1NTKG4sdGhpcy5fZG9jdW1lbnQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9yZWdpc3RyeS5nZXQodCkscj1mdW5jdGlvbihuKXtlLl96b25lLnJ1bihmdW5jdGlvbigpe3ZhciByPW5ldyBXayhuLm1hdGNoZXMsdCk7ZS5fc291cmNlLm5leHQocil9KX07bnx8KChuPWUuX2J1aWxkTVFMKHQpKS5hZGRMaXN0ZW5lcihyKSxlLl9yZWdpc3RyeS5zZXQodCxuKSksbi5tYXRjaGVzJiZyKG4pfSkpfSx0LnByb3RvdHlwZS5fYnVpbGRNUUw9ZnVuY3Rpb24odCl7cmV0dXJuIFpzKHRoaXMuX3BsYXRmb3JtSWQpJiZ3aW5kb3cubWF0Y2hNZWRpYSgiYWxsIikuYWRkTGlzdGVuZXI/d2luZG93Lm1hdGNoTWVkaWEodCk6e21hdGNoZXM6ImFsbCI9PT10fHwiIj09PXQsbWVkaWE6dCxhZGRMaXN0ZW5lcjpmdW5jdGlvbigpe30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oKXt9fX0sdC5wcm90b3R5cGUuX3ByZXBhcmVRdWVyeUNTUz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFLa1t0XX0pO2lmKG4ubGVuZ3RoPjApe3ZhciByPW4uam9pbigiLCAiKTt0cnl7dmFyIGk9ZS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxpLnN0eWxlU2hlZXR8fGkuYXBwZW5kQ2hpbGQoZS5jcmVhdGVUZXh0Tm9kZSgiXG4vKlxuICBAYW5ndWxhci9mbGV4LWxheW91dCAtIHdvcmthcm91bmQgZm9yIHBvc3NpYmxlIGJyb3dzZXIgcXVpcmsgd2l0aCBtZWRpYVF1ZXJ5IGxpc3RlbmVyc1xuICBzZWUgaHR0cDovL2JpdC5seS8yc2Q0SE1QXG4qL1xuQG1lZGlhICIrcisiIHsuZngtcXVlcnktdGVzdHsgfX1cbiIpKSxlLmhlYWQuYXBwZW5kQ2hpbGQoaSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBLa1t0XT1pfSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19fSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShVZSksZWUoYmUpLGVlKFdzKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEtrPXt9O2Z1bmN0aW9uIFprKHQsZSl7cmV0dXJuIFZrKHQsZT97bXFBbGlhczplLmFsaWFzLHN1ZmZpeDplLnN1ZmZpeH06e30pfXZhciBZaz1mdW5jdGlvbigpe30sWGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5icmVha3BvaW50cz10LHRoaXMubWVkaWFXYXRjaGVyPWUsdGhpcy5maWx0ZXJPdmVybGFwcz0hMCx0aGlzLl9yZWdpc3RlckJyZWFrUG9pbnRzKCksdGhpcy5vYnNlcnZhYmxlJD10aGlzLl9idWlsZE9ic2VydmFibGUoKX1yZXR1cm4gdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdG9NZWRpYVF1ZXJ5KHQpO3JldHVybiB0aGlzLm1lZGlhV2F0Y2hlci5pc0FjdGl2ZShlKX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlJC5zdWJzY3JpYmUodCxlLG4pfSx0LnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlJH0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyQnJlYWtQb2ludHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJyZWFrcG9pbnRzLnNvcnRlZEl0ZW1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tZWRpYVF1ZXJ5fSk7dGhpcy5tZWRpYVdhdGNoZXIucmVnaXN0ZXJRdWVyeSh0KX0sdC5wcm90b3R5cGUuX2J1aWxkT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzO3JldHVybiB0aGlzLm1lZGlhV2F0Y2hlci5vYnNlcnZlKCkucGlwZShZbChmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQubWF0Y2hlc30pLFlsKGZ1bmN0aW9uKG4pe3ZhciByPXQuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkobi5tZWRpYVF1ZXJ5KTtyZXR1cm4hcnx8IShlLmZpbHRlck92ZXJsYXBzJiZyLm92ZXJsYXBwaW5nKX0pLHEoZnVuY3Rpb24oZSl7cmV0dXJuIFprKGUsdC5fZmluZEJ5UXVlcnkoZS5tZWRpYVF1ZXJ5KSl9KSl9LHQucHJvdG90eXBlLl9maW5kQnlBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KX0sdC5wcm90b3R5cGUuX2ZpbmRCeVF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fdG9NZWRpYVF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZpbmRCeUFsaWFzKHQpfHx0aGlzLl9maW5kQnlRdWVyeSh0KTtyZXR1cm4gZT9lLm1lZGlhUXVlcnk6dH0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUoR2spLGVlKFFrKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLCRrPWZ1bmN0aW9uKCl7fSxKaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnN0eWxlc2hlZXQ9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuc3R5bGVzaGVldC5nZXQodCk7cj9yLnNldChlLG4pOnRoaXMuc3R5bGVzaGVldC5zZXQodCxuZXcgTWFwKFtbZSxuXV0pKX0sdC5wcm90b3R5cGUuY2xlYXJTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlc2hlZXQuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0U3R5bGVGb3JFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5zdHlsZXNoZWV0LmdldCh0KSxyPSIiO2lmKG4pe3ZhciBpPW4uZ2V0KGUpOyJudW1iZXIiIT10eXBlb2YgaSYmInN0cmluZyIhPXR5cGVvZiBpfHwocj1pKyIiKX1yZXR1cm4gcn0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHR9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHRUPW5ldyBtdCgiRmxleExheW91dFNlcnZlckxvYWRlZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxlVD1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXSxuVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9tZWRpYU1vbml0b3I9ZSx0aGlzLl9vbk1lZGlhQ2hhbmdlcz1uLHRoaXMuX3N1YnNjcmliZXJzPVtdLHRoaXMuX3JlZ2lzdHJ5TWFwPXRoaXMuX2J1aWxkUmVnaXN0cnlNYXAoKSx0aGlzLl9zdWJzY3JpYmVycz10aGlzLl9jb25maWd1cmVDaGFuZ2VPYnNlcnZlcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWdpc3RyeUZyb21MYXJnZXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5TWFwLnNsaWNlKCkucmV2ZXJzZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibWVkaWFNb25pdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhTW9uaXRvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0S2V5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5fHx0aGlzLl9vcHRpb25zLmJhc2VLZXl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRJbnB1dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuaGFzS2V5VmFsdWUodCk/dGhpcy5fbG9va3VwS2V5VmFsdWUodCk6dGhpcy5fb3B0aW9ucy5kZWZhdWx0VmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9KSx0aGlzLl9zdWJzY3JpYmVycz1bXX0sdC5wcm90b3R5cGUuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9rZXlJblVzZShuLmtleSkmJmUucHVzaCh0Lm1lZGlhTW9uaXRvci5vYnNlcnZlKG4uYWxpYXMpLnBpcGUocShmdW5jdGlvbihlKXtyZXR1cm4oZT1lLmNsb25lKCkpLnByb3BlcnR5PXQuX29wdGlvbnMuYmFzZUtleSxlfSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXt0Ll9vbk1vbml0b3JFdmVudHMoZSl9KSl9KSxlfSx0LnByb3RvdHlwZS5fYnVpbGRSZWdpc3RyeU1hcD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMubWVkaWFNb25pdG9yLmJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gVmsoe30sZSx7YmFzZUtleTp0Ll9vcHRpb25zLmJhc2VLZXksa2V5OnQuX29wdGlvbnMuYmFzZUtleStlLnN1ZmZpeH0pfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9rZXlJblVzZShlLmtleSl9KX0sdC5wcm90b3R5cGUuX29uTW9uaXRvckV2ZW50cz1mdW5jdGlvbih0KXt0LnByb3BlcnR5PT10aGlzLl9vcHRpb25zLmJhc2VLZXkmJih0LnZhbHVlPXRoaXMuX2NhbGN1bGF0ZUFjdGl2YXRlZFZhbHVlKHQpLHRoaXMuX29uTWVkaWFDaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2tleUluVXNlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLl9sb29rdXBLZXlWYWx1ZSh0KX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUFjdGl2YXRlZFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX29wdGlvbnMuYmFzZUtleSt0LnN1ZmZpeCxuPXRoaXMuX2FjdGl2YXRlZElucHV0S2V5O3JldHVybiB0aGlzLl9hY3RpdmF0ZWRJbnB1dEtleT10aGlzLl92YWxpZGF0ZUlucHV0S2V5KG49dC5tYXRjaGVzP2U6bj09ZT8iIjpuKSx0aGlzLmFjdGl2YXRlZElucHV0fSx0LnByb3RvdHlwZS5fdmFsaWRhdGVJbnB1dEtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24odCl7cmV0dXJuIWUuX2tleUluVXNlKHQpfTtyZXR1cm4gbih0KSYmdGhpcy5tZWRpYU1vbml0b3IuYWN0aXZlT3ZlcmxhcHMuc29tZShmdW5jdGlvbihyKXt2YXIgaT1lLl9vcHRpb25zLmJhc2VLZXkrci5zdWZmaXg7cmV0dXJuIW4oaSkmJih0PWksITApfSksdH0sdC5wcm90b3R5cGUuX2xvb2t1cEtleVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vcHRpb25zLmlucHV0S2V5c1t0XX0sdH0oKSxyVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX21lZGlhTW9uaXRvcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9zdHlsZXI9bix0aGlzLl9pbnB1dE1hcD17fSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNNZWRpYVF1ZXJ5TGlzdGVuZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21xQWN0aXZhdGlvbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbj90aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQ6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsbj0iYmFzZUtleSI7dGhpcy5fbXFBY3RpdmF0aW9uJiYoZT10aGlzLl9pbnB1dE1hcFtuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dEtleV0sdGhpcy5faW5wdXRNYXBbbl09dCk7dmFyIHIsaT1uZXcgSW4oZSx0LCExKTt0aGlzLm5nT25DaGFuZ2VzKCgocj17fSlbbl09aSxyKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmF0aXZlRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3F1ZXJ5SW5wdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lucHV0TWFwW3RdfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2Rpc3BsYXk9dGhpcy5fZ2V0RGlzcGxheVN0eWxlKCksdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITB9LHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiQmFzZURpcmVjdGl2ZTo6bmdPbkNoYW5nZXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3M6ICIrdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbXFBY3RpdmF0aW9uJiZ0aGlzLl9tcUFjdGl2YXRpb24uZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9tZWRpYU1vbml0b3J9LHQucHJvdG90eXBlLl9nZXREZWZhdWx0VmFsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fcXVlcnlJbnB1dCh0KTtyZXR1cm4gdm9pZCAwIT09biYmbnVsbCE9PW4mJiIiIT09bj9uOmV9LHQucHJvdG90eXBlLl9nZXREaXNwbGF5U3R5bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmxvb2t1cFN0eWxlKHQsImRpc3BsYXkiKX0sdC5wcm90b3R5cGUuX2dldEF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmxvb2t1cEF0dHJpYnV0ZVZhbHVlKGUsdCl9LHQucHJvdG90eXBlLl9nZXRGbGV4Rmxvd0RpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbixyPSJyb3ciO2lmKHQmJihyPShuPXRoaXMuX3N0eWxlci5nZXRGbG93RGlyZWN0aW9uKHQpKVswXSwhblsxXSYmZSkpe3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1mdW5jdGlvbih0KXt2YXIgZT0odD10P3QudG9Mb3dlckNhc2UoKToiIikuc3BsaXQoIiAiKSxuPWVbMF0scj1lWzFdLGk9ZVsyXTtyZXR1cm4gZVQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PW59KXx8KG49ZVRbMF0pLCJpbmxpbmUiPT09ciYmKHI9ImlubGluZSIhPT1pP2k6IiIsaT0iaW5saW5lIiksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19KHQpO3JldHVybiBuPXJbMl0sdm9pZCAwPT09KGU9clsxXSkmJihlPW51bGwpLHZvaWQgMD09PW4mJihuPSExKSx7ZGlzcGxheTpuPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjpyWzBdLCJmbGV4LXdyYXAiOmV8fG51bGx9fShyKTt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHMoaSxbdF0pfXJldHVybiByLnRyaW0oKXx8InJvdyJ9LHQucHJvdG90eXBlLl9hcHBseVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50KG4sdCxlKX0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnRzKHQsZSl9LHQucHJvdG90eXBlLl9jYWNoZUlucHV0PWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbiBpbiBlKXRoaXMuX2lucHV0TWFwW25dPWVbbl07ZWxzZSB0JiYodGhpcy5faW5wdXRNYXBbdF09ZSl9LHQucHJvdG90eXBlLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcz1mdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuX21xQWN0aXZhdGlvbil7dmFyIHI9bmV3IGZ1bmN0aW9uKHQsZSxuKXt0aGlzLmJhc2VLZXk9dCx0aGlzLmRlZmF1bHRWYWx1ZT1lLHRoaXMuaW5wdXRLZXlzPW59KHQsZSx0aGlzLl9pbnB1dE1hcCk7dGhpcy5fbXFBY3RpdmF0aW9uPW5ldyBuVChyLHRoaXMuX21lZGlhTW9uaXRvcixmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pfXJldHVybiB0aGlzLl9tcUFjdGl2YXRpb259LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW5Ob2RlcyIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4sZT1bXSxuPXQubGVuZ3RoO24tLTspZVtuXT10W25dO3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEk9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2lucHV0TWFwKS5sZW5ndGgtKHRoaXMuX2lucHV0TWFwW3RdPzE6MCk+MH0sdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbi5oYXNLZXlWYWx1ZSh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNJbml0aWFsaXplZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNJbml0aWFsaXplZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLGlUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2JyZWFrcG9pbnRzPXQsdGhpcy5fbWF0Y2hNZWRpYT1lLHRoaXMuX3JlZ2lzdGVyQnJlYWtwb2ludHMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJicmVha3BvaW50cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9icmVha3BvaW50cy5pdGVtcy5zbGljZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlT3ZlcmxhcHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9icmVha3BvaW50cy5vdmVybGFwcGluZ3MucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShlLm1lZGlhUXVlcnkpfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9bnVsbDt0aGlzLmJyZWFrcG9pbnRzLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKG4peyIiIT09bi5hbGlhcyYmIWUmJnQuX21hdGNoTWVkaWEuaXNBY3RpdmUobi5tZWRpYVF1ZXJ5KSYmKGU9bil9KTt2YXIgbj10aGlzLmJyZWFrcG9pbnRzWzBdO3JldHVybiBlfHwodGhpcy5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpP246bnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModCl8fHRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHQpO3JldHVybiB0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKGU/ZS5tZWRpYVF1ZXJ5OnQpfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHR8fCIiKXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodHx8IiIpO3JldHVybiB0aGlzLl9tYXRjaE1lZGlhLm9ic2VydmUoZT9lLm1lZGlhUXVlcnk6dCkucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiBaayh0LGUpfSksWWwoZnVuY3Rpb24odCl7cmV0dXJuIWV8fCIiIT09dC5tcUFsaWFzfSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha3BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2JyZWFrcG9pbnRzLnNvcnRlZEl0ZW1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tZWRpYVF1ZXJ5fSk7dGhpcy5fbWF0Y2hNZWRpYS5yZWdpc3RlclF1ZXJ5KHQpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShHayksZWUoUWspKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24gb1QodCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuPXRbZV18fCIiO3N3aXRjaChlKXtjYXNlImRpc3BsYXkiOnQuZGlzcGxheT0iZmxleCI9PT1uP1siLXdlYmtpdC1mbGV4IiwiZmxleCJdOiJpbmxpbmUtZmxleCI9PT1uP1siLXdlYmtpdC1pbmxpbmUtZmxleCIsImlubGluZS1mbGV4Il06bjticmVhaztjYXNlImFsaWduLWl0ZW1zIjpjYXNlImFsaWduLXNlbGYiOmNhc2UiYWxpZ24tY29udGVudCI6Y2FzZSJmbGV4IjpjYXNlImZsZXgtYmFzaXMiOmNhc2UiZmxleC1mbG93IjpjYXNlImZsZXgtZ3JvdyI6Y2FzZSJmbGV4LXNocmluayI6Y2FzZSJmbGV4LXdyYXAiOmNhc2UianVzdGlmeS1jb250ZW50Ijp0WyItd2Via2l0LSIrZV09bjticmVhaztjYXNlImZsZXgtZGlyZWN0aW9uIjp0WyItd2Via2l0LWZsZXgtZGlyZWN0aW9uIl09bj1ufHwicm93Iix0WyJmbGV4LWRpcmVjdGlvbiJdPW47YnJlYWs7Y2FzZSJvcmRlciI6dC5vcmRlcj10WyItd2Via2l0LSIrZV09aXNOYU4obik/IjAiOm59fXJldHVybiB0fXZhciBhVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fc2VydmVyU3R5bGVzaGVldD10LHRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD1lLHRoaXMuX3BsYXRmb3JtSWQ9bix0aGlzLmxheW91dENvbmZpZz1yfXJldHVybiB0LnByb3RvdHlwZS5hcHBseVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fTsic3RyaW5nIj09dHlwZW9mIGUmJihyW2VdPW4sZT1yKSxyPXRoaXMubGF5b3V0Q29uZmlnLmRpc2FibGVWZW5kb3JQcmVmaXhlcz9lOm9UKGUpLHRoaXMuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KHIsdCl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5sYXlvdXRDb25maWcuZGlzYWJsZVZlbmRvclByZWZpeGVzP3Q6b1QodCk7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KHIsdCl9KX0sdC5wcm90b3R5cGUuZ2V0Rmxvd0RpcmVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvb2t1cFN0eWxlKHQsImZsZXgtZGlyZWN0aW9uIik7ZT09PXNUJiYoZT0iIik7dmFyIG49dGhpcy5sb29rdXBJbmxpbmVTdHlsZSh0LCJmbGV4LWRpcmVjdGlvbiIpfHxZcyh0aGlzLl9wbGF0Zm9ybUlkKSYmdGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkP2U6IiI7cmV0dXJuW2V8fCJyb3ciLG5dfSx0LnByb3RvdHlwZS5sb29rdXBBdHRyaWJ1dGVWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEF0dHJpYnV0ZShlKXx8IiJ9LHQucHJvdG90eXBlLmxvb2t1cElubGluZVN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFpzKHRoaXMuX3BsYXRmb3JtSWQpP3Quc3R5bGVbZV06dGhpcy5fZ2V0U2VydmVyU3R5bGUodCxlKX0sdC5wcm90b3R5cGUubG9va3VwU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgcj0iIjtyZXR1cm4gdCYmKChyPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCxlKSl8fChacyh0aGlzLl9wbGF0Zm9ybUlkKT9ufHwocj1nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSkpOnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZCYmKHI9dGhpcy5fc2VydmVyU3R5bGVzaGVldC5nZXRTdHlsZUZvckVsZW1lbnQodCxlKSkpKSxyP3IudHJpbSgpOnNUfSx0LnByb3RvdHlwZS5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO09iamVjdC5rZXlzKHQpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPUFycmF5LmlzQXJyYXkodFtyXSk/dFtyXTpbdFtyXV07aS5zb3J0KCk7Zm9yKHZhciBvPTAsYT1pO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO1pzKG4uX3BsYXRmb3JtSWQpfHwhbi5fc2VydmVyTW9kdWxlTG9hZGVkP1pzKG4uX3BsYXRmb3JtSWQpP2Uuc3R5bGUuc2V0UHJvcGVydHkocixzKTpuLl9zZXRTZXJ2ZXJTdHlsZShlLHIscyk6bi5fc2VydmVyU3R5bGVzaGVldC5hZGRTdHlsZVRvRWxlbWVudChlLHIscyl9fSl9LHQucHJvdG90eXBlLl9zZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUsbil7ZT1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKTt2YXIgcj10aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodCk7cltlXT1ufHwiIix0aGlzLl93cml0ZVN0eWxlQXR0cmlidXRlKHQscil9LHQucHJvdG90eXBlLl9nZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodClbZV18fCIifSx0LnByb3RvdHlwZS5fcmVhZFN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49dC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7aWYobilmb3IodmFyIHI9bi5zcGxpdCgvOysvZyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldLnRyaW0oKTtpZihvLmxlbmd0aD4wKXt2YXIgYT1vLmluZGV4T2YoIjoiKTtpZigtMT09PWEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIENTUyBzdHlsZTogIitvKTtlW28uc3Vic3RyKDAsYSkudHJpbSgpXT1vLnN1YnN0cihhKzEpLnRyaW0oKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLl93cml0ZVN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49IiI7Zm9yKHZhciByIGluIGUpZVtyXSYmKG4rPXIrIjoiK2Vbcl0rIjsiKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLG4pfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChlZShKayw4KSxlZSh0VCw4KSxlZShiZSksZWUoSGspKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksc1Q9ImJsb2NrIixsVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9ZSxyLndvcms9bixyfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksbj4wP3QucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxlLG4pOih0aGlzLmRlbGF5PW4sdGhpcy5zdGF0ZT1lLHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpLHRoaXMpfSxlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4+MHx8dGhpcy5jbG9zZWQ/dC5wcm90b3R5cGUuZXhlY3V0ZS5jYWxsKHRoaXMsZSxuKTp0aGlzLl9leGVjdXRlKGUsbil9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MCksbnVsbCE9PXImJnI+MHx8bnVsbD09PXImJnRoaXMuZGVsYXk+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsZSxuLHIpOmUuZmx1c2godGhpcyl9LGV9KEJsKSx1VD1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkoZSx0KSxlfShVbCkpKGxUKTtmdW5jdGlvbiBjVCh0LGUpe3JldHVybiBuZXcgTyhlP2Z1bmN0aW9uKG4pe3JldHVybiBlLnNjaGVkdWxlKGhULDAse2Vycm9yOnQsc3Vic2NyaWJlcjpufSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKHQpfSl9ZnVuY3Rpb24gaFQodCl7dC5zdWJzY3JpYmVyLmVycm9yKHQuZXJyb3IpfXZhciBmVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPW4sdGhpcy5oYXNWYWx1ZT0iTiI9PT10fXJldHVybiB0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQubmV4dCYmdC5uZXh0KHRoaXMudmFsdWUpO2Nhc2UiRSI6cmV0dXJuIHQuZXJyb3ImJnQuZXJyb3IodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gdC5jb21wbGV0ZSYmdC5jb21wbGV0ZSgpfX0sdC5wcm90b3R5cGUuZG89ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCh0aGlzLmtpbmQpe2Nhc2UiTiI6cmV0dXJuIHQmJnQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gZSYmZSh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBuJiZuKCl9fSx0LnByb3RvdHlwZS5hY2NlcHQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0P3RoaXMub2JzZXJ2ZSh0KTp0aGlzLmRvKHQsZSxuKX0sdC5wcm90b3R5cGUudG9PYnNlcnZhYmxlPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gZGwodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gY1QodGhpcy5lcnJvcik7Y2FzZSJDIjpyZXR1cm4gcGwoKX10aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgdmFsdWUiKX0sdC5jcmVhdGVOZXh0PWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lP25ldyB0KCJOIixlKTp0LnVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9ufSx0LmNyZWF0ZUVycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdCgiRSIsdm9pZCAwLGUpfSx0LmNyZWF0ZUNvbXBsZXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY29tcGxldGVOb3RpZmljYXRpb259LHQuY29tcGxldGVOb3RpZmljYXRpb249bmV3IHQoIkMiKSx0LnVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9uPW5ldyB0KCJOIix2b2lkIDApLHR9KCkscFQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ciYmKHI9MCk7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPW4saS5kZWxheT1yLGl9cmV0dXJuIGkoZSx0KSxlLmRpc3BhdGNoPWZ1bmN0aW9uKHQpe3Qubm90aWZpY2F0aW9uLm9ic2VydmUodC5kZXN0aW5hdGlvbiksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5zY2hlZHVsZU1lc3NhZ2U9ZnVuY3Rpb24odCl7dGhpcy5hZGQodGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoZS5kaXNwYXRjaCx0aGlzLmRlbGF5LG5ldyBkVCh0LHRoaXMuZGVzdGluYXRpb24pKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuc2NoZWR1bGVNZXNzYWdlKGZULmNyZWF0ZU5leHQodCkpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UoZlQuY3JlYXRlRXJyb3IodCkpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLnNjaGVkdWxlTWVzc2FnZShmVC5jcmVhdGVDb21wbGV0ZSgpKX0sZX0oRSksZFQ9ZnVuY3Rpb24odCxlKXt0aGlzLm5vdGlmaWNhdGlvbj10LHRoaXMuZGVzdGluYXRpb249ZX0sbVQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zY2hlZHVsZXI9cixpLl9ldmVudHM9W10saS5faW5maW5pdGVUaW1lV2luZG93PSExLGkuX2J1ZmZlclNpemU9ZTwxPzE6ZSxpLl93aW5kb3dUaW1lPW48MT8xOm4sbj09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8oaS5faW5maW5pdGVUaW1lV2luZG93PSEwLGkubmV4dD1pLm5leHRJbmZpbml0ZVRpbWVXaW5kb3cpOmkubmV4dD1pLm5leHRUaW1lV2luZG93LGl9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5uZXh0SW5maW5pdGVUaW1lV2luZG93PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMuX2V2ZW50cztuLnB1c2goZSksbi5sZW5ndGg+dGhpcy5fYnVmZmVyU2l6ZSYmbi5zaGlmdCgpLHQucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5uZXh0VGltZVdpbmRvdz1mdW5jdGlvbihlKXt0aGlzLl9ldmVudHMucHVzaChuZXcgeVQodGhpcy5fZ2V0Tm93KCksZSkpLHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cscj1uP3RoaXMuX2V2ZW50czp0aGlzLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cygpLGk9dGhpcy5zY2hlZHVsZXIsbz1yLmxlbmd0aDtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgZXQ7aWYodGhpcy5pc1N0b3BwZWR8fHRoaXMuaGFzRXJyb3I/ZT13LkVNUFRZOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLGU9bmV3IG50KHRoaXMsdCkpLGkmJnQuYWRkKHQ9bmV3IHBUKHQsaSkpLG4pZm9yKHZhciBhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdKTtlbHNlIGZvcihhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksZX0sZS5wcm90b3R5cGUuX2dldE5vdz1mdW5jdGlvbigpe3JldHVybih0aGlzLnNjaGVkdWxlcnx8dVQpLm5vdygpfSxlLnByb3RvdHlwZS5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ2V0Tm93KCksZT10aGlzLl9idWZmZXJTaXplLG49dGhpcy5fd2luZG93VGltZSxyPXRoaXMuX2V2ZW50cyxpPXIubGVuZ3RoLG89MDtvPGkmJiEodC1yW29dLnRpbWU8bik7KW8rKztyZXR1cm4gaT5lJiYobz1NYXRoLm1heChvLGktZSkpLG8+MCYmci5zcGxpY2UoMCxvKSxyfSxlfShpdCkseVQ9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbWU9dCx0aGlzLnZhbHVlPWV9LGdUPSJpbmxpbmUiLHZUPVsicm93IiwiY29sdW1uIiwicm93LXJldmVyc2UiLCJjb2x1bW4tcmV2ZXJzZSJdO2Z1bmN0aW9uIF9UKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiB2VC5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09bn0pfHwobj12VFswXSkscj09PWdUJiYocj1pIT09Z1Q/aToiIixpPWdUKSxbbixmdW5jdGlvbih0KXtpZih0KXN3aXRjaCh0LnRvTG93ZXJDYXNlKCkpe2Nhc2UicmV2ZXJzZSI6Y2FzZSJ3cmFwLXJldmVyc2UiOmNhc2UicmV2ZXJzZS13cmFwIjp0PSJ3cmFwLXJldmVyc2UiO2JyZWFrO2Nhc2Uibm8iOmNhc2Uibm9uZSI6Y2FzZSJub3dyYXAiOnQ9Im5vd3JhcCI7YnJlYWs7ZGVmYXVsdDp0PSJ3cmFwIn1yZXR1cm4gdH0ociksISFpXX1mdW5jdGlvbiBiVCh0KXtyZXR1cm4gX1QodClbMF0uaW5kZXhPZigicm93Iik+LTF9dmFyIHdUPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5fYW5ub3VuY2VyPW5ldyBtVCgxKSxpLmxheW91dCQ9aS5fYW5ub3VuY2VyLmFzT2JzZXJ2YWJsZSgpLGl9cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0WHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0TWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0TGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQubGF5b3V0fHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoRGlyZWN0aW9uKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJsYXlvdXQiLCJyb3ciLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhEaXJlY3Rpb24odC52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoRGlyZWN0aW9uKCl9LGUucHJvdG90eXBlLl91cGRhdGVXaXRoRGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgibGF5b3V0Iil8fCJyb3ciLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KTt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1fVCh0KTtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj0hMSkse2Rpc3BsYXk6cj8iaW5saW5lLWZsZXgiOiJmbGV4IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJmbGV4LWRpcmVjdGlvbiI6ZVswXSwiZmxleC13cmFwIjpufHxudWxsfX0oMCxlWzFdLGVbMl0pfSh0fHwiIik7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudChlKSx0aGlzLl9hbm5vdW5jZXIubmV4dCh7ZGlyZWN0aW9uOmVbImZsZXgtZGlyZWN0aW9uIl0sd3JhcDohIWVbImZsZXgtd3JhcCJdJiYibm93cmFwIiE9PWVbImZsZXgtd3JhcCJdfSl9LGV9KHJUKSx4VD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhKXt2YXIgcz10LmNhbGwodGhpcyxlLG4sYSl8fHRoaXM7cmV0dXJuIHMuX3pvbmU9aSxzLl9kaXJlY3Rpb25hbGl0eT1vLHMuX2xheW91dD0icm93IixyJiYocy5fbGF5b3V0V2F0Y2hlcj1yLmxheW91dCQuc3Vic2NyaWJlKHMuX29uTGF5b3V0Q2hhbmdlLmJpbmQocykpKSxzLl9kaXJlY3Rpb25XYXRjaGVyPXMuX2RpcmVjdGlvbmFsaXR5LmNoYW5nZS5zdWJzY3JpYmUocy5fdXBkYXRlV2l0aFZhbHVlLmJpbmQocykpLHN9cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXAiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWHMiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwU20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTWQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTGciLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwWGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RYcyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRTbSIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRMZyIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRYbCIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7KG51bGwhPXQuZ2FwfHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl93YXRjaENvbnRlbnRDaGFuZ2VzKCksdGhpcy5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXMoImdhcCIsIjAiLGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZVdpdGhWYWx1ZShlLnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpLHRoaXMuX29ic2VydmVyJiZ0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5fZGlyZWN0aW9uV2F0Y2hlciYmdGhpcy5fZGlyZWN0aW9uV2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fd2F0Y2hDb250ZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpeyJ1bmRlZmluZWQiIT10eXBlb2YgTXV0YXRpb25PYnNlcnZlciYmKHQuX29ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2Uuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRlZE5vZGVzJiZ0LmFkZGVkTm9kZXMubGVuZ3RoPjB8fHQucmVtb3ZlZE5vZGVzJiZ0LnJlbW92ZWROb2Rlcy5sZW5ndGg+MH0pJiZ0Ll91cGRhdGVXaXRoVmFsdWUoKX0pLHQuX29ic2VydmVyLm9ic2VydmUodC5uYXRpdmVFbGVtZW50LHtjaGlsZExpc3Q6ITB9KSl9KX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksdlQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dHx8dGhpcy5fcXVlcnlJbnB1dCgiZ2FwIil8fCIwIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIHI9dGhpcy5jaGlsZHJlbk5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubm9kZVR5cGUmJiJub25lIiE9ZS5fZ2V0RGlzcGxheVN0eWxlKHQpfSkuc29ydChmdW5jdGlvbih0LG4pe3ZhciByPStlLl9zdHlsZXIubG9va3VwU3R5bGUodCwib3JkZXIiKSxpPStlLl9zdHlsZXIubG9va3VwU3R5bGUobiwib3JkZXIiKTtyZXR1cm4gaXNOYU4ocil8fGlzTmFOKGkpfHxyPT09aT8wOnI+aT8xOi0xfSk7aWYoci5sZW5ndGg+MClpZihuLmVuZHNXaXRoKENUKSluPW4uc3Vic3RyaW5nKDAsbi5pbmRleE9mKENUKSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudHModGhpcy5fYnVpbGRHcmlkUGFkZGluZyhuKSxyKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkR3JpZE1hcmdpbihuKSk7ZWxzZXt2YXIgaT1yLnBvcCgpO3RoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKG4pLHIpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkQ1NTKCksW2ldKX19LGUucHJvdG90eXBlLl9idWlsZEdyaWRQYWRkaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPSIwcHgiLG49IjBweCI7cmV0dXJuInJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT9uPXQ6ZT10LHtwYWRkaW5nOiIwcHggIitlKyIgIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkR3JpZE1hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj0iLSIrdDplPSItIit0LHttYXJnaW46IjBweCAiK2UrIiAtIit0KyIgIitufX0sZS5wcm90b3R5cGUuX2J1aWxkQ1NTPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PW51bGwpO3ZhciBlLG49eyJtYXJnaW4tbGVmdCI6bnVsbCwibWFyZ2luLXJpZ2h0IjpudWxsLCJtYXJnaW4tdG9wIjpudWxsLCJtYXJnaW4tYm90dG9tIjpudWxsfTtzd2l0Y2godGhpcy5fbGF5b3V0KXtjYXNlImNvbHVtbiI6ZT0ibWFyZ2luLWJvdHRvbSI7YnJlYWs7Y2FzZSJjb2x1bW4tcmV2ZXJzZSI6ZT0ibWFyZ2luLXRvcCI7YnJlYWs7Y2FzZSJyb3ciOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQiO2JyZWFrO2Nhc2Uicm93LXJldmVyc2UiOmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLXJpZ2h0IjoibWFyZ2luLWxlZnQiO2JyZWFrO2RlZmF1bHQ6ZT0icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlPyJtYXJnaW4tbGVmdCI6Im1hcmdpbi1yaWdodCJ9cmV0dXJuIG5bZV09dCxufSxlfShyVCksQ1Q9IiBncmlkIixFVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixpKXx8dGhpcztyZXR1cm4gby5fbGF5b3V0PSJyb3ciLHImJihvLl9sYXlvdXRXYXRjaGVyPXIubGF5b3V0JC5zdWJzY3JpYmUoby5fb25MYXlvdXRDaGFuZ2UuYmluZChvKSkpLG99cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25NZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbk1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5hbGlnbnx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJhbGlnbiIsInN0YXJ0IHN0cmV0Y2giLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhWYWx1ZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkQ1NTKHQpKSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcodCx0aGlzLl9sYXlvdXQ/dGhpcy5fbGF5b3V0OiJyb3ciKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksdlQuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKTt2YXIgbj10aGlzLl9xdWVyeUlucHV0KCJhbGlnbiIpfHwic3RhcnQgc3RyZXRjaCI7dGhpcy5fbXFBY3RpdmF0aW9uJiYobj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXQpLHRoaXMuX2FsbG93U3RyZXRjaGluZyhuLHRoaXMuX2xheW91dHx8InJvdyIpfSxlLnByb3RvdHlwZS5fYnVpbGRDU1M9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj10LnNwbGl0KCIgIikscj1uWzFdO3N3aXRjaChuWzBdKXtjYXNlImNlbnRlciI6ZVsianVzdGlmeS1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJzcGFjZS1hcm91bmQiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1hcm91bmQiO2JyZWFrO2Nhc2Uic3BhY2UtYmV0d2VlbiI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWJldHdlZW4iO2JyZWFrO2Nhc2Uic3BhY2UtZXZlbmx5IjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtZXZlbmx5IjticmVhaztjYXNlImVuZCI6Y2FzZSJmbGV4LWVuZCI6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtZW5kIjticmVhaztjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmRlZmF1bHQ6ZVsianVzdGlmeS1jb250ZW50Il09ImZsZXgtc3RhcnQifXN3aXRjaChyKXtjYXNlInN0YXJ0IjpjYXNlImZsZXgtc3RhcnQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LXN0YXJ0IjticmVhaztjYXNlImJhc2VsaW5lIjplWyJhbGlnbi1pdGVtcyJdPSJiYXNlbGluZSI7YnJlYWs7Y2FzZSJjZW50ZXIiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJjZW50ZXIiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6ZGVmYXVsdDplWyJhbGlnbi1pdGVtcyJdPWVbImFsaWduLWNvbnRlbnQiXT0ic3RyZXRjaCJ9cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIHI9MCxpPWU7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl07aWYobnVsbCE9bylmb3IodmFyIGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYodFthXT1vW2FdKX1yZXR1cm4gdH0oZSx7ZGlzcGxheToiZmxleCIsImZsZXgtZGlyZWN0aW9uIjp0aGlzLl9sYXlvdXR8fCJyb3ciLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KX0sZS5wcm90b3R5cGUuX2FsbG93U3RyZXRjaGluZz1mdW5jdGlvbih0LGUpeyJzdHJldGNoIj09dC5zcGxpdCgiICIpWzFdJiZ0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHsiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJtYXgtd2lkdGgiOmJUKGUpP251bGw6IjEwMCUiLCJtYXgtaGVpZ2h0IjpiVChlKT8iMTAwJSI6bnVsbH0pfSxlfShyVCksU1Q9ZnVuY3Rpb24oKXt9LGtUPWZ1bmN0aW9uKCl7fSxUVD1mdW5jdGlvbigpe30sQVQ9ISFlbCgpJiZ7cGFzc2l2ZTohMH0sUFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcGxhdGZvcm09dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGZsO3ZhciBlPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldCh0KTtpZihlKXJldHVybiBlLnN1YmplY3QuYXNPYnNlcnZhYmxlKCk7dmFyIG49bmV3IGl0LHI9ZnVuY3Rpb24oZSl7ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0Ij09PWUuYW5pbWF0aW9uTmFtZT8odC5jbGFzc0xpc3QuYWRkKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksbi5uZXh0KHt0YXJnZXQ6ZS50YXJnZXQsaXNBdXRvZmlsbGVkOiEwfSkpOiJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQiPT09ZS5hbmltYXRpb25OYW1lJiYodC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksbi5uZXh0KHt0YXJnZXQ6ZS50YXJnZXQsaXNBdXRvZmlsbGVkOiExfSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIscixBVCksdC5jbGFzc0xpc3QuYWRkKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQiKX0pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLnNldCh0LHtzdWJqZWN0Om4sdW5saXN0ZW46ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixyLEFUKX19KSxuLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5zdG9wTW9uaXRvcmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQodCk7ZSYmKGUudW5saXN0ZW4oKSxlLnN1YmplY3QuY29tcGxldGUoKSx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuc3RvcE1vbml0b3Jpbmcobil9KX0sdC5uZ0luamVjdGFibGVEZWY9ZHQoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoZWUodGwpLGVlKFVlKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLE9UPWZ1bmN0aW9uKCl7fSxJVD1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0sTVQ9MCxOVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhLHMsbCx1KXt2YXIgYz10LmNhbGwodGhpcyxhLGksbyxyKXx8dGhpcztyZXR1cm4gYy5fZWxlbWVudFJlZj1lLGMuX3BsYXRmb3JtPW4sYy5uZ0NvbnRyb2w9cixjLl9hdXRvZmlsbE1vbml0b3I9bCxjLl91aWQ9Im1hdC1pbnB1dC0iK01UKyssYy5faXNTZXJ2ZXI9ITEsYy5mb2N1c2VkPSExLGMuc3RhdGVDaGFuZ2VzPW5ldyBpdCxjLmNvbnRyb2xUeXBlPSJtYXQtaW5wdXQiLGMuYXV0b2ZpbGxlZD0hMSxjLl9kaXNhYmxlZD0hMSxjLl9yZXF1aXJlZD0hMSxjLl90eXBlPSJ0ZXh0IixjLl9yZWFkb25seT0hMSxjLl9uZXZlckVtcHR5SW5wdXRUeXBlcz1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayJdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gcmwoKS5oYXModCl9KSxjLl9pbnB1dFZhbHVlQWNjZXNzb3I9c3x8Yy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9Yy52YWx1ZSxjLmlkPWMuaWQsbi5JT1MmJnUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O2UudmFsdWV8fGUuc2VsZWN0aW9uU3RhcnR8fGUuc2VsZWN0aW9uRW5kfHwoZS5zZXRTZWxlY3Rpb25SYW5nZSgxLDEpLGUuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKSl9KX0pLGMuX2lzU2VydmVyPSFjLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsY31yZXR1cm4gaShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPWdsKHQpLHRoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pZD10fHx0aGlzLl91aWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJyZXF1aXJlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXF1aXJlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlcXVpcmVkPWdsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90eXBlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdHlwZT10fHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEoKSYmcmwoKS5oYXModGhpcy5fdHlwZSkmJih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZT10aGlzLl90eXBlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQpe3QhPT10aGlzLnZhbHVlJiYodGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInJlYWRvbmx5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRvbmx5fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZG9ubHk9Z2wodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2F1dG9maWxsTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuYXV0b2ZpbGxlZD1lLmlzQXV0b2ZpbGxlZCx0LnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX0sZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9hdXRvZmlsbE1vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KX0sZS5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dGhpcy5uZ0NvbnRyb2wmJnRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLHRoaXMuX2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfSxlLnByb3RvdHlwZS5fZm9jdXNDaGFuZ2VkPWZ1bmN0aW9uKHQpe3Q9PT10aGlzLmZvY3VzZWR8fHRoaXMucmVhZG9ubHl8fCh0aGlzLmZvY3VzZWQ9dCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfSxlLnByb3RvdHlwZS5fb25JbnB1dD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmFsdWU7dGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZSE9PXQmJih0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlVHlwZT1mdW5jdGlvbigpe2lmKElULmluZGV4T2YodGhpcy5fdHlwZSk+LTEpdGhyb3cgRXJyb3IoJ0lucHV0IHR5cGUgIicrdGhpcy5fdHlwZSsiXCIgaXNuJ3Qgc3VwcG9ydGVkIGJ5IG1hdElucHV0LiIpfSxlLnByb3RvdHlwZS5faXNOZXZlckVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSk+LTF9LGUucHJvdG90eXBlLl9pc0JhZElucHV0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiB0JiZ0LmJhZElucHV0fSxlLnByb3RvdHlwZS5faXNUZXh0YXJlYT1mdW5jdGlvbigpe3JldHVybiJ0ZXh0YXJlYSI9PT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlbXB0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2hvdWxkTGFiZWxGbG9hdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvY3VzZWR8fCF0aGlzLmVtcHR5fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnNldERlc2NyaWJlZEJ5SWRzPWZ1bmN0aW9uKHQpe3RoaXMuX2FyaWFEZXNjcmliZWRieT10LmpvaW4oIiAiKX0sZS5wcm90b3R5cGUub25Db250YWluZXJDbGljaz1mdW5jdGlvbigpe3RoaXMuZm9jdXMoKX0sZX0oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dmFyIHI9dC5hcHBseSh0aGlzLGUpfHx0aGlzO3JldHVybiByLmVycm9yU3RhdGU9ITEsci5zdGF0ZUNoYW5nZXM9bmV3IGl0LHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS51cGRhdGVFcnJvclN0YXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lcnJvclN0YXRlLGU9KHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXJ8fHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcikuaXNFcnJvclN0YXRlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLmNvbnRyb2w6bnVsbCx0aGlzLl9wYXJlbnRGb3JtR3JvdXB8fHRoaXMuX3BhcmVudEZvcm0pO2UhPT10JiYodGhpcy5lcnJvclN0YXRlPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX0sZX0oZnVuY3Rpb24odCxlLG4scil7dGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyPXQsdGhpcy5fcGFyZW50Rm9ybT1lLHRoaXMuX3BhcmVudEZvcm1Hcm91cD1uLHRoaXMubmdDb250cm9sPXJ9KX0oKSksUlQ9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIERUKCl7Zm9yKHZhciB0LGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGVbZS5sZW5ndGgtMV0mJih0PWUucG9wKCkpLDE9PT1lLmxlbmd0aCYmZChlWzBdKSYmKGU9ZVswXSksMD09PWUubGVuZ3RoP2ZsOnQ/RFQoZSkucGlwZShxKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHZvaWQgMCxlKX0pKTpuZXcgTyhmdW5jdGlvbih0KXtyZXR1cm4gbmV3IExUKHQsZSl9KX12YXIgTFQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3Iuc291cmNlcz1uLHIuY29tcGxldGVkPTAsci5oYXZlVmFsdWVzPTA7dmFyIGk9bi5sZW5ndGg7ci52YWx1ZXM9bmV3IEFycmF5KGkpO2Zvcih2YXIgbz0wO288aTtvKyspe3ZhciBhPVUocixuW29dLG51bGwsbyk7YSYmci5hZGQoYSl9cmV0dXJuIHJ9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy52YWx1ZXNbbl09ZSxpLl9oYXNWYWx1ZXx8KGkuX2hhc1ZhbHVlPSEwLHRoaXMuaGF2ZVZhbHVlcysrKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbixuPXRoaXMuaGF2ZVZhbHVlcyxyPXRoaXMudmFsdWVzLGk9ci5sZW5ndGg7dC5faGFzVmFsdWU/KHRoaXMuY29tcGxldGVkKyssdGhpcy5jb21wbGV0ZWQ9PT1pJiYobj09PWkmJmUubmV4dChyKSxlLmNvbXBsZXRlKCkpKTplLmNvbXBsZXRlKCl9LGV9KEgpLGpUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbnZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGVuZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByaXN0aW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRvdWNoZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGF0dXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVudG91Y2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdHVzQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZhbHVlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9LHQucHJvdG90eXBlLmhhc0Vycm9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcih0LGUpfSx0LnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH0sdH0oKSxGVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9ybURpcmVjdGl2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KGpUKTtmdW5jdGlvbiBWVCh0KXtyZXR1cm4gbnVsbD09dHx8MD09PXQubGVuZ3RofXZhciBCVD0vXig/PS57MSwyNTR9JCkoPz0uezEsNjR9QClbLSEjJCUmJyorLzAtOT0/QS1aXl9gYS16e3x9fl0rKFwuWy0hIyQlJicqKy8wLTk9P0EtWl5fYGEtent8fX5dKykqQFtBLVphLXowLTldKFtBLVphLXowLTktXXswLDYxfVtBLVphLXowLTldKT8oXC5bQS1aYS16MC05XShbQS1aYS16MC05LV17MCw2MX1bQS1aYS16MC05XSk/KSokLyx6VD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQubWluPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihWVChlLnZhbHVlKXx8VlQodCkpcmV0dXJuIG51bGw7dmFyIG49cGFyc2VGbG9hdChlLnZhbHVlKTtyZXR1cm4haXNOYU4obikmJm48dD97bWluOnttaW46dCxhY3R1YWw6ZS52YWx1ZX19Om51bGx9fSx0Lm1heD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoVlQoZS52YWx1ZSl8fFZUKHQpKXJldHVybiBudWxsO3ZhciBuPXBhcnNlRmxvYXQoZS52YWx1ZSk7cmV0dXJuIWlzTmFOKG4pJiZuPnQ/e21heDp7bWF4OnQsYWN0dWFsOmUudmFsdWV9fTpudWxsfX0sdC5yZXF1aXJlZD1mdW5jdGlvbih0KXtyZXR1cm4gVlQodC52YWx1ZSk/e3JlcXVpcmVkOiEwfTpudWxsfSx0LnJlcXVpcmVkVHJ1ZT1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXQudmFsdWU/bnVsbDp7cmVxdWlyZWQ6ITB9fSx0LmVtYWlsPWZ1bmN0aW9uKHQpe3JldHVybiBWVCh0LnZhbHVlKT9udWxsOkJULnRlc3QodC52YWx1ZSk/bnVsbDp7ZW1haWw6ITB9fSx0Lm1pbkxlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoVlQoZS52YWx1ZSkpcmV0dXJuIG51bGw7dmFyIG49ZS52YWx1ZT9lLnZhbHVlLmxlbmd0aDowO3JldHVybiBuPHQ/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6dCxhY3R1YWxMZW5ndGg6bn19Om51bGx9fSx0Lm1heExlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS52YWx1ZT9lLnZhbHVlLmxlbmd0aDowO3JldHVybiBuPnQ/e21heGxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6dCxhY3R1YWxMZW5ndGg6bn19Om51bGx9fSx0LnBhdHRlcm49ZnVuY3Rpb24oZSl7cmV0dXJuIGU/KCJzdHJpbmciPT10eXBlb2YgZT8ocj0iIiwiXiIhPT1lLmNoYXJBdCgwKSYmKHIrPSJeIikscis9ZSwiJCIhPT1lLmNoYXJBdChlLmxlbmd0aC0xKSYmKHIrPSIkIiksbj1uZXcgUmVnRXhwKHIpKToocj1lLnRvU3RyaW5nKCksbj1lKSxmdW5jdGlvbih0KXtpZihWVCh0LnZhbHVlKSlyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlO3JldHVybiBuLnRlc3QoZSk/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOnIsYWN0dWFsVmFsdWU6ZX19fSk6dC5udWxsVmFsaWRhdG9yO3ZhciBuLHJ9LHQubnVsbFZhbGlkYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5jb21wb3NlPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBlPXQuZmlsdGVyKFVUKTtyZXR1cm4gMD09ZS5sZW5ndGg/bnVsbDpmdW5jdGlvbih0KXtyZXR1cm4gcVQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0odCkpfX0sdC5jb21wb3NlQXN5bmM9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIGU9dC5maWx0ZXIoVVQpO3JldHVybiAwPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKHQpe3JldHVybiBEVChmdW5jdGlvbih0LG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfSh0KS5tYXAoSFQpKS5waXBlKHEocVQpKX19LHR9KCk7ZnVuY3Rpb24gVVQodCl7cmV0dXJuIG51bGwhPXR9ZnVuY3Rpb24gSFQodCl7dmFyIGU9ZmUodCk/Syh0KTp0O2lmKCFwZShlKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhbGlkYXRvciB0byByZXR1cm4gUHJvbWlzZSBvciBPYnNlcnZhYmxlLiIpO3JldHVybiBlfWZ1bmN0aW9uIHFUKHQpe3ZhciBlPXQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPWU/byh7fSx0LGUpOnR9LHt9KTtyZXR1cm4gMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aD9udWxsOmV9dmFyIEdUPW5ldyBtdCgiTmdWYWx1ZUFjY2Vzc29yIiksV1Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImNoZWNrZWQiLHQpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMub25DaGFuZ2U9dH0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdH0oKSxRVD1uZXcgbXQoIkNvbXBvc2l0aW9uRXZlbnRNb2RlIiksS1Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcjt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9bix0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKHQpe30sdGhpcy5vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9LHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9KHI9WnUoKT9adSgpLmdldFVzZXJBZ2VudCgpOiIiLCEvYW5kcm9pZCAoXGQrKS8udGVzdChyLnRvTG93ZXJDYXNlKCkpKSl9cmV0dXJuIHQucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsbnVsbD09dD8iIjp0KX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLm9uQ2hhbmdlPXR9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHQucHJvdG90eXBlLl9oYW5kbGVJbnB1dD1mdW5jdGlvbih0KXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZSh0KX0sdC5wcm90b3R5cGUuX2NvbXBvc2l0aW9uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21wb3Npbmc9ITB9LHQucHJvdG90eXBlLl9jb21wb3NpdGlvbkVuZD1mdW5jdGlvbih0KXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKHQpfSx0fSgpO2Z1bmN0aW9uIFpUKHQpe3JldHVybiB0LnZhbGlkYXRlP2Z1bmN0aW9uKGUpe3JldHVybiB0LnZhbGlkYXRlKGUpfTp0fWZ1bmN0aW9uIFlUKHQpe3JldHVybiB0LnZhbGlkYXRlP2Z1bmN0aW9uKGUpe3JldHVybiB0LnZhbGlkYXRlKGUpfTp0fXZhciBYVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKHQpe30sdGhpcy5vblRvdWNoZWQ9ZnVuY3Rpb24oKXt9fXJldHVybiB0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwidmFsdWUiLG51bGw9PXQ/IiI6dCl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5vbkNoYW5nZT1mdW5jdGlvbihlKXt0KCIiPT1lP251bGw6cGFyc2VGbG9hdChlKSl9fSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0fSgpO2Z1bmN0aW9uICRUKCl7dGhyb3cgbmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIil9dmFyIEpUPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX3BhcmVudD1udWxsLGUubmFtZT1udWxsLGUudmFsdWVBY2Nlc3Nvcj1udWxsLGUuX3Jhd1ZhbGlkYXRvcnM9W10sZS5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLGV9cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiAkVCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYXN5bmNWYWxpZGF0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJFQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShqVCksdEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fYWNjZXNzb3JzPVtdfXJldHVybiB0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbdCxlXSl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2U+PTA7LS1lKWlmKHRoaXMuX2FjY2Vzc29yc1tlXVsxXT09PXQpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShlLDEpfSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChmdW5jdGlvbihuKXtlLl9pc1NhbWVHcm91cChuLHQpJiZuWzFdIT09dCYmblsxXS5maXJlVW5jaGVjayh0LnZhbHVlKX0pfSx0LnByb3RvdHlwZS5faXNTYW1lR3JvdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRbMF0uY29udHJvbCYmdFswXS5fcGFyZW50PT09ZS5fY29udHJvbC5fcGFyZW50JiZ0WzFdLm5hbWU9PT1lLm5hbWV9LHR9KCksZUE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3JlZ2lzdHJ5PW4sdGhpcy5faW5qZWN0b3I9cix0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe319cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoSlQpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3JlZ2lzdHJ5LnJlbW92ZSh0aGlzKX0sdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLl9zdGF0ZT10PT09dGhpcy52YWx1ZSx0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImNoZWNrZWQiLHRoaXMuX3N0YXRlKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2ZuPXQsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbigpe3QoZS52YWx1ZSksZS5fcmVnaXN0cnkuc2VsZWN0KGUpfX0sdC5wcm90b3R5cGUuZmlyZVVuY2hlY2s9ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhbHVlKHQpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0LnByb3RvdHlwZS5fY2hlY2tOYW1lPWZ1bmN0aW9uKCl7dGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmdGhpcy5uYW1lIT09dGhpcy5mb3JtQ29udHJvbE5hbWUmJnRoaXMuX3Rocm93TmFtZUVycm9yKCksIXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfSx0LnByb3RvdHlwZS5fdGhyb3dOYW1lRXJyb3I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ1xuICAgICAgSWYgeW91IGRlZmluZSBib3RoIGEgbmFtZSBhbmQgYSBmb3JtQ29udHJvbE5hbWUgYXR0cmlidXRlIG9uIHlvdXIgcmFkaW8gYnV0dG9uLCB0aGVpciB2YWx1ZXNcbiAgICAgIG11c3QgbWF0Y2guIEV4OiA8aW5wdXQgdHlwZT0icmFkaW8iIGZvcm1Db250cm9sTmFtZT0iZm9vZCIgbmFtZT0iZm9vZCI+XG4gICAgJyl9LHR9KCksbkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fX1yZXR1cm4gdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixwYXJzZUZsb2F0KHQpKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3QoIiI9PWU/bnVsbDpwYXJzZUZsb2F0KGUpKX19LHQucHJvdG90eXBlLnJlZ2lzdGVyT25Ub3VjaGVkPWZ1bmN0aW9uKHQpe3RoaXMub25Ub3VjaGVkPXR9LHQucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsdCl9LHR9KCksckE9J1xuICAgIDxkaXYgW2Zvcm1Hcm91cF09Im15R3JvdXAiPlxuICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT0iZmlyc3ROYW1lIj5cbiAgICA8L2Rpdj5cblxuICAgIEluIHlvdXIgY2xhc3M6XG5cbiAgICB0aGlzLm15R3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICBmaXJzdE5hbWU6IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7JyxpQT0nXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5teUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgcGVyc29uOiBuZXcgRm9ybUdyb3VwKHsgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woKSB9KVxuICAgIH0pOycsb0E9J1xuICAgIDxmb3JtPlxuICAgICAgIDxkaXYgbmdNb2RlbEdyb3VwPSJwZXJzb24iPlxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT0icGVyc29uLm5hbWUiIG5hbWU9ImZpcnN0TmFtZSI+XG4gICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPicsYUE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmNvbnRyb2xQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImZvcm1Db250cm9sTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICBFeGFtcGxlOlxuXG4gICAgICAiK3JBKX0sdC5uZ01vZGVsR3JvdXBFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ2Zvcm1Db250cm9sTmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRoIGFuIG5nTW9kZWxHcm91cCBwYXJlbnQuIEl0IGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIHBhcmVudHNcbiAgICAgICB0aGF0IGFsc28gaGF2ZSBhICJmb3JtIiBwcmVmaXg6IGZvcm1Hcm91cE5hbWUsIGZvcm1BcnJheU5hbWUsIG9yIGZvcm1Hcm91cC5cblxuICAgICAgIE9wdGlvbiAxOiAgVXBkYXRlIHRoZSBwYXJlbnQgdG8gYmUgZm9ybUdyb3VwTmFtZSAocmVhY3RpdmUgZm9ybSBzdHJhdGVneSlcblxuICAgICAgICAnK2lBKyJcblxuICAgICAgICBPcHRpb24gMjogVXNlIG5nTW9kZWwgaW5zdGVhZCBvZiBmb3JtQ29udHJvbE5hbWUgKHRlbXBsYXRlLWRyaXZlbiBzdHJhdGVneSlcblxuICAgICAgICAiK29BKX0sdC5taXNzaW5nRm9ybUV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZm9ybUdyb3VwIGV4cGVjdHMgYSBGb3JtR3JvdXAgaW5zdGFuY2UuIFBsZWFzZSBwYXNzIG9uZSBpbi5cblxuICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAiK3JBKX0sdC5ncm91cFBhcmVudEV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiZm9ybUdyb3VwTmFtZSBtdXN0IGJlIHVzZWQgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXAgZGlyZWN0aXZlLiAgWW91J2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICBkaXJlY3RpdmUgYW5kIHBhc3MgaXQgYW4gZXhpc3RpbmcgRm9ybUdyb3VwIGluc3RhbmNlICh5b3UgY2FuIGNyZWF0ZSBvbmUgaW4geW91ciBjbGFzcykuXG5cbiAgICAgIEV4YW1wbGU6XG5cbiAgICAgICIraUEpfSx0LmFycmF5UGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdmb3JtQXJyYXlOYW1lIG11c3QgYmUgdXNlZCB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBZb3VcJ2xsIHdhbnQgdG8gYWRkIGEgZm9ybUdyb3VwXG4gICAgICAgZGlyZWN0aXZlIGFuZCBwYXNzIGl0IGFuIGV4aXN0aW5nIEZvcm1Hcm91cCBpbnN0YW5jZSAoeW91IGNhbiBjcmVhdGUgb25lIGluIHlvdXIgY2xhc3MpLlxuXG4gICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgXG4gICAgPGRpdiBbZm9ybUdyb3VwXT0ibXlHcm91cCI+XG4gICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9ImNpdGllcyI+XG4gICAgICAgIDxkaXYgKm5nRm9yPSJsZXQgY2l0eSBvZiBjaXR5QXJyYXkuY29udHJvbHM7IGluZGV4IGFzIGkiPlxuICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT0iaSI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBJbiB5b3VyIGNsYXNzOlxuXG4gICAgdGhpcy5jaXR5QXJyYXkgPSBuZXcgRm9ybUFycmF5KFtuZXcgRm9ybUNvbnRyb2woXCdTRlwnKV0pO1xuICAgIHRoaXMubXlHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgY2l0aWVzOiB0aGlzLmNpdHlBcnJheVxuICAgIH0pOycpfSx0LmRpc2FibGVkQXR0cldhcm5pbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSB3aXRoIGEgcmVhY3RpdmUgZm9ybSBkaXJlY3RpdmUuIElmIHlvdSBzZXQgZGlzYWJsZWQgdG8gdHJ1ZVxuICAgICAgd2hlbiB5b3Ugc2V0IHVwIHRoaXMgY29udHJvbCBpbiB5b3VyIGNvbXBvbmVudCBjbGFzcywgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSB3aWxsIGFjdHVhbGx5IGJlIHNldCBpbiB0aGUgRE9NIGZvclxuICAgICAgeW91LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBhcHByb2FjaCB0byBhdm9pZCAnY2hhbmdlZCBhZnRlciBjaGVja2VkJyBlcnJvcnMuXG4gICAgICAgXG4gICAgICBFeGFtcGxlOiBcbiAgICAgIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgZmlyc3Q6IG5ldyBGb3JtQ29udHJvbCh7dmFsdWU6ICdOYW5jeScsIGRpc2FibGVkOiB0cnVlfSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIGxhc3Q6IG5ldyBGb3JtQ29udHJvbCgnRHJldycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgICB9KTtcbiAgICAiKX0sdC5uZ01vZGVsV2FybmluZz1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4oIlxuICAgIEl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIG5nTW9kZWwgb24gdGhlIHNhbWUgZm9ybSBmaWVsZCBhcyAiK3QrIi4gXG4gICAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIG5nTW9kZWwgaW5wdXQgcHJvcGVydHkgYW5kIG5nTW9kZWxDaGFuZ2UgZXZlbnQgd2l0aCBcbiAgICByZWFjdGl2ZSBmb3JtIGRpcmVjdGl2ZXMgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBBbmd1bGFyIHY2IGFuZCB3aWxsIGJlIHJlbW92ZWQgXG4gICAgaW4gQW5ndWxhciB2Ny5cbiAgICBcbiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBzZWUgb3VyIEFQSSBkb2NzIGhlcmU6XG4gICAgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy8iKygiZm9ybUNvbnRyb2wiPT09dD8iRm9ybUNvbnRyb2xEaXJlY3RpdmUiOiJGb3JtQ29udHJvbE5hbWUiKSsiI3VzZS13aXRoLW5nbW9kZWxcbiAgICAiKX0sdH0oKTtmdW5jdGlvbiBzQSh0LGUpe3JldHVybiBsKGUucGF0aCxbdF0pfWZ1bmN0aW9uIGxBKHQsZSl7dHx8ZkEoZSwiQ2Fubm90IGZpbmQgY29udHJvbCB3aXRoIiksZS52YWx1ZUFjY2Vzc29yfHxmQShlLCJObyB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj16VC5jb21wb3NlKFt0LnZhbGlkYXRvcixlLnZhbGlkYXRvcl0pLHQuYXN5bmNWYWxpZGF0b3I9elQuY29tcG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKSxlLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZSh0LnZhbHVlKSxmdW5jdGlvbih0LGUpe2UudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKG4pe3QuX3BlbmRpbmdWYWx1ZT1uLHQuX3BlbmRpbmdDaGFuZ2U9ITAsdC5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09dC51cGRhdGVPbiYmdUEodCxlKX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7dC5yZWdpc3Rlck9uQ2hhbmdlKGZ1bmN0aW9uKHQsbil7ZS52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUodCksbiYmZS52aWV3VG9Nb2RlbFVwZGF0ZSh0KX0pfSh0LGUpLGZ1bmN0aW9uKHQsZSl7ZS52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKGZ1bmN0aW9uKCl7dC5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09dC51cGRhdGVPbiYmdC5fcGVuZGluZ0NoYW5nZSYmdUEodCxlKSwic3VibWl0IiE9PXQudXBkYXRlT24mJnQubWFya0FzVG91Y2hlZCgpfSl9KHQsZSksZS52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUmJnQucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGZ1bmN0aW9uKHQpe2UudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKHQpfSksZS5fcmF3VmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZ1bmN0aW9uKCl7cmV0dXJuIHQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSl9KSxlLl9yYXdBc3luY1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmUucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmdW5jdGlvbigpe3JldHVybiB0LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfSl9ZnVuY3Rpb24gdUEodCxlKXt0Ll9wZW5kaW5nRGlydHkmJnQubWFya0FzRGlydHkoKSx0LnNldFZhbHVlKHQuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksZS52aWV3VG9Nb2RlbFVwZGF0ZSh0Ll9wZW5kaW5nVmFsdWUpLHQuX3BlbmRpbmdDaGFuZ2U9ITF9ZnVuY3Rpb24gY0EodCxlKXtudWxsPT10JiZmQShlLCJDYW5ub3QgZmluZCBjb250cm9sIHdpdGgiKSx0LnZhbGlkYXRvcj16VC5jb21wb3NlKFt0LnZhbGlkYXRvcixlLnZhbGlkYXRvcl0pLHQuYXN5bmNWYWxpZGF0b3I9elQuY29tcG9zZUFzeW5jKFt0LmFzeW5jVmFsaWRhdG9yLGUuYXN5bmNWYWxpZGF0b3JdKX1mdW5jdGlvbiBoQSh0KXtyZXR1cm4gZkEodCwiVGhlcmUgaXMgbm8gRm9ybUNvbnRyb2wgaW5zdGFuY2UgYXR0YWNoZWQgdG8gZm9ybSBjb250cm9sIGVsZW1lbnQgd2l0aCIpfWZ1bmN0aW9uIGZBKHQsZSl7dmFyIG47dGhyb3cgbj10LnBhdGgubGVuZ3RoPjE/InBhdGg6ICciK3QucGF0aC5qb2luKCIgLT4gIikrIiciOnQucGF0aFswXT8ibmFtZTogJyIrdC5wYXRoKyInIjoidW5zcGVjaWZpZWQgbmFtZSBhdHRyaWJ1dGUiLG5ldyBFcnJvcihlKyIgIituKX1mdW5jdGlvbiBwQSh0KXtyZXR1cm4gbnVsbCE9dD96VC5jb21wb3NlKHQubWFwKFpUKSk6bnVsbH1mdW5jdGlvbiBkQSh0KXtyZXR1cm4gbnVsbCE9dD96VC5jb21wb3NlQXN5bmModC5tYXAoWVQpKTpudWxsfXZhciBtQT1bV1QsbkEsWFQsZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHRoaXMub25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSx0aGlzLl9jb21wYXJlV2l0aD1UdH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wYXJlV2l0aCIse3NldDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImNvbXBhcmVXaXRoIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkpO3RoaXMuX2NvbXBhcmVXaXRoPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUud3JpdGVWYWx1ZT1mdW5jdGlvbih0KXt0aGlzLnZhbHVlPXQ7dmFyIGU9dGhpcy5fZ2V0T3B0aW9uSWQodCk7bnVsbD09ZSYmdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZEluZGV4IiwtMSk7dmFyIG49ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD8iIitlOihlJiYib2JqZWN0Ij09dHlwZW9mIGUmJihlPSJPYmplY3QiKSwodCsiOiAiK2UpLnNsaWNlKDAsNTApKX0oZSx0KTt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixuKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMub25DaGFuZ2U9ZnVuY3Rpb24obil7ZS52YWx1ZT1lLl9nZXRPcHRpb25WYWx1ZShuKSx0KGUudmFsdWUpfX0sdC5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5vblRvdWNoZWQ9dH0sdC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIix0KX0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyT3B0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpfSx0LnByb3RvdHlwZS5fZ2V0T3B0aW9uSWQ9ZnVuY3Rpb24odCl7dHJ5e2Zvcih2YXIgZT1hKEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpLG49ZS5uZXh0KCk7IW4uZG9uZTtuPWUubmV4dCgpKXt2YXIgcj1uLnZhbHVlO2lmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQociksdCkpcmV0dXJuIHJ9fWNhdGNoKHQpe2k9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e24mJiFuLmRvbmUmJihvPWUucmV0dXJuKSYmby5jYWxsKGUpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgaSxvfSx0LnByb3RvdHlwZS5fZ2V0T3B0aW9uVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIjoiKVswXX0odCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZSk/dGhpcy5fb3B0aW9uTWFwLmdldChlKTp0fSx0fSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24odCl7fSx0aGlzLm9uVG91Y2hlZD1mdW5jdGlvbigpe30sdGhpcy5fY29tcGFyZVdpdGg9VHR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcGFyZVdpdGgiLHtzZXQ6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJjb21wYXJlV2l0aCBtdXN0IGJlIGEgZnVuY3Rpb24sIGJ1dCByZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KHQpKTt0aGlzLl9jb21wYXJlV2l0aD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzO2lmKHRoaXMudmFsdWU9dCxBcnJheS5pc0FycmF5KHQpKXt2YXIgcj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5fZ2V0T3B0aW9uSWQodCl9KTtlPWZ1bmN0aW9uKHQsZSl7dC5fc2V0U2VsZWN0ZWQoci5pbmRleE9mKGUudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGU9ZnVuY3Rpb24odCxlKXt0Ll9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGUpfSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5vbkNoYW5nZT1mdW5jdGlvbihuKXt2YXIgcj1bXTtpZihuLmhhc093blByb3BlcnR5KCJzZWxlY3RlZE9wdGlvbnMiKSlmb3IodmFyIGk9bi5zZWxlY3RlZE9wdGlvbnMsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pLml0ZW0obykscz1lLl9nZXRPcHRpb25WYWx1ZShhLnZhbHVlKTtyLnB1c2gocyl9ZWxzZSBmb3IoaT1uLm9wdGlvbnMsbz0wO288aS5sZW5ndGg7bysrKShhPWkuaXRlbShvKSkuc2VsZWN0ZWQmJihzPWUuX2dldE9wdGlvblZhbHVlKGEudmFsdWUpLHIucHVzaChzKSk7ZS52YWx1ZT1yLHQocil9fSx0LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZD1mdW5jdGlvbih0KXt0aGlzLm9uVG91Y2hlZD10fSx0LnByb3RvdHlwZS5zZXREaXNhYmxlZFN0YXRlPWZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLHQpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJPcHRpb249ZnVuY3Rpb24odCl7dmFyIGU9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGUsdCksZX0sdC5wcm90b3R5cGUuX2dldE9wdGlvbklkPWZ1bmN0aW9uKHQpe3RyeXtmb3IodmFyIGU9YShBcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpKSxuPWUubmV4dCgpOyFuLmRvbmU7bj1lLm5leHQoKSl7dmFyIHI9bi52YWx1ZTtpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KHIpLl92YWx1ZSx0KSlyZXR1cm4gcn19Y2F0Y2godCl7aT17ZXJyb3I6dH19ZmluYWxseXt0cnl7biYmIW4uZG9uZSYmKG89ZS5yZXR1cm4pJiZvLmNhbGwoZSl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBudWxsO3ZhciBpLG99LHQucHJvdG90eXBlLl9nZXRPcHRpb25WYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgiOiIpWzBdfSh0KTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhlKT90aGlzLl9vcHRpb25NYXAuZ2V0KGUpLl92YWx1ZTp0fSx0fSgpLGVBXTtmdW5jdGlvbiB5QSh0LGUpe3QuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jb250cm9sOyJzdWJtaXQiPT09ZS51cGRhdGVPbiYmZS5fcGVuZGluZ0NoYW5nZSYmKHQudmlld1RvTW9kZWxVcGRhdGUoZS5fcGVuZGluZ1ZhbHVlKSxlLl9wZW5kaW5nQ2hhbmdlPSExKX0pfWZ1bmN0aW9uIGdBKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIHZBPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUdyb3VwKHRoaXMpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUZvcm1Hcm91cCh0aGlzKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtR3JvdXAodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHNBKHRoaXMubmFtZSx0aGlzLl9wYXJlbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9ybURpcmVjdGl2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZhbGlkYXRvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBwQSh0aGlzLl92YWxpZGF0b3JzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFzeW5jVmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGRBKHRoaXMuX2FzeW5jVmFsaWRhdG9ycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2NoZWNrUGFyZW50VHlwZT1mdW5jdGlvbigpe30sZX0oRlQpLF9BPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlzfXJldHVybiBpKGUsdCksZX0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2NkPXR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzc1VudG91Y2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fY2QuY29udHJvbCYmdGhpcy5fY2QuY29udHJvbC51bnRvdWNoZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzVG91Y2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fY2QuY29udHJvbCYmdGhpcy5fY2QuY29udHJvbC50b3VjaGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzc1ByaXN0aW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnByaXN0aW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLmRpcnR5fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzc1ZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnZhbGlkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdDbGFzc0ludmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2NkLmNvbnRyb2wmJnRoaXMuX2NkLmNvbnRyb2wuaW52YWxpZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nQ2xhc3NQZW5kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9jZC5jb250cm9sJiZ0aGlzLl9jZC5jb250cm9sLnBlbmRpbmd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSk7ZnVuY3Rpb24gYkEodCl7dmFyIGU9eEEodCk/dC52YWxpZGF0b3JzOnQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/cEEoZSk6ZXx8bnVsbH1mdW5jdGlvbiB3QSh0LGUpe3ZhciBuPXhBKGUpP2UuYXN5bmNWYWxpZGF0b3JzOnQ7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/ZEEobik6bnx8bnVsbH1mdW5jdGlvbiB4QSh0KXtyZXR1cm4gbnVsbCE9dCYmIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgQ0E9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52YWxpZGF0b3I9dCx0aGlzLmFzeW5jVmFsaWRhdG9yPWUsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKCl7fSx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiJWQUxJRCI9PT10aGlzLnN0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImludmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iSU5WQUxJRCI9PT10aGlzLnN0YXR1c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBlbmRpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iUEVORElORyI9PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRElTQUJMRUQiPT09dGhpcy5zdGF0dXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkRJU0FCTEVEIiE9PXRoaXMuc3RhdHVzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wcmlzdGluZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInVudG91Y2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLnRvdWNoZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cGRhdGVPbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZXRWYWxpZGF0b3JzPWZ1bmN0aW9uKHQpe3RoaXMudmFsaWRhdG9yPWJBKHQpfSx0LnByb3RvdHlwZS5zZXRBc3luY1ZhbGlkYXRvcnM9ZnVuY3Rpb24odCl7dGhpcy5hc3luY1ZhbGlkYXRvcj13QSh0KX0sdC5wcm90b3R5cGUuY2xlYXJWYWxpZGF0b3JzPWZ1bmN0aW9uKCl7dGhpcy52YWxpZGF0b3I9bnVsbH0sdC5wcm90b3R5cGUuY2xlYXJBc3luY1ZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9LHQucHJvdG90eXBlLm1hcmtBc1RvdWNoZWQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMudG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh0KX0sdC5wcm90b3R5cGUubWFya0FzVW50b3VjaGVkPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKHQpe3QubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5tYXJrQXNEaXJ0eT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9LHQucHJvdG90eXBlLm1hcmtBc1ByaXN0aW5lPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24odCl7dC5tYXJrQXNQcmlzdGluZSh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9LHQucHJvdG90eXBlLm1hcmtBc1BlbmRpbmc9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuc3RhdHVzPSJQRU5ESU5HIiwhMSE9PXQuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcodCl9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuc3RhdHVzPSJESVNBQkxFRCIsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7ZS5kaXNhYmxlKG8oe30sdCx7b25seVNlbGY6ITB9KSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHQpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCghMCl9KX0sdC5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnN0YXR1cz0iVkFMSUQiLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtlLmVuYWJsZShvKHt9LHQse29ubHlTZWxmOiEwfSkpfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnModCksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCExKX0pfSx0LnByb3RvdHlwZS5fdXBkYXRlQW5jZXN0b3JzPWZ1bmN0aW9uKHQpe3RoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfSx0LnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCl7dGhpcy5fcGFyZW50PXR9LHQucHJvdG90eXBlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHk9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pLHRoaXMuX3NldEluaXRpYWxTdGF0dXMoKSx0aGlzLl91cGRhdGVWYWx1ZSgpLHRoaXMuZW5hYmxlZCYmKHRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCksdGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksIlZBTElEIiE9PXRoaXMuc3RhdHVzJiYiUEVORElORyIhPT10aGlzLnN0YXR1c3x8dGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfSx0LnByb3RvdHlwZS5fdXBkYXRlVHJlZVZhbGlkaXR5PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXtlbWl0RXZlbnQ6ITB9KSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSl9LHQucHJvdG90eXBlLl9zZXRJbml0aWFsU3RhdHVzPWZ1bmN0aW9uKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpPyJESVNBQkxFRCI6IlZBTElEIn0sdC5wcm90b3R5cGUuX3J1blZhbGlkYXRvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpudWxsfSx0LnByb3RvdHlwZS5fcnVuQXN5bmNWYWxpZGF0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz0iUEVORElORyI7dmFyIG49SFQodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKG4pe3JldHVybiBlLnNldEVycm9ycyhuLHtlbWl0RXZlbnQ6dH0pfSl9fSx0LnByb3RvdHlwZS5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb249ZnVuY3Rpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24mJnRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5zZXRFcnJvcnM9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuIG51bGw9PWU/bnVsbDooZSBpbnN0YW5jZW9mIEFycmF5fHwoZT1lLnNwbGl0KCIuIikpLGUgaW5zdGFuY2VvZiBBcnJheSYmMD09PWUubGVuZ3RoP251bGw6ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIFNBP3QuY29udHJvbHMuaGFzT3duUHJvcGVydHkoZSk/dC5jb250cm9sc1tlXTpudWxsOnQgaW5zdGFuY2VvZiBrQSYmdC5hdChlKXx8bnVsbH0sdCkpfSh0aGlzLHQpfSx0LnByb3RvdHlwZS5nZXRFcnJvcj1mdW5jdGlvbih0LGUpe3ZhciBuPWU/dGhpcy5nZXQoZSk6dGhpcztyZXR1cm4gbiYmbi5lcnJvcnM/bi5lcnJvcnNbdF06bnVsbH0sdC5wcm90b3R5cGUuaGFzRXJyb3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IodCxlKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdXBkYXRlQ29udHJvbHNFcnJvcnM9ZnVuY3Rpb24odCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX0sdC5wcm90b3R5cGUuX2luaXRPYnNlcnZhYmxlcz1mdW5jdGlvbigpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyB6ZSx0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IHplfSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlU3RhdHVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8iRElTQUJMRUQiOnRoaXMuZXJyb3JzPyJJTlZBTElEIjp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoIlBFTkRJTkciKT8iUEVORElORyI6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKCJJTlZBTElEIik/IklOVkFMSUQiOiJWQUxJRCJ9LHQucHJvdG90eXBlLl9hbnlDb250cm9sc0hhdmVTdGF0dXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PXR9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzRGlydHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlydHl9KX0sdC5wcm90b3R5cGUuX2FueUNvbnRyb2xzVG91Y2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhmdW5jdGlvbih0KXtyZXR1cm4gdC50b3VjaGVkfSl9LHQucHJvdG90eXBlLl91cGRhdGVQcmlzdGluZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9LHQucHJvdG90eXBlLl91cGRhdGVUb3VjaGVkPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXt9KSx0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfSx0LnByb3RvdHlwZS5faXNCb3hlZFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJjI9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJiJ2YWx1ZSJpbiB0JiYiZGlzYWJsZWQiaW4gdH0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKHQpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT10fSx0LnByb3RvdHlwZS5fc2V0VXBkYXRlU3RyYXRlZ3k9ZnVuY3Rpb24odCl7eEEodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX0sdH0oKSxFQT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgaT10LmNhbGwodGhpcyxiQShuKSx3QShyLG4pKXx8dGhpcztyZXR1cm4gaS5fb25DaGFuZ2U9W10saS5fYXBwbHlGb3JtU3RhdGUoZSksaS5fc2V0VXBkYXRlU3RyYXRlZ3kobiksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSxpLl9pbml0T2JzZXJ2YWJsZXMoKSxpfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LHRoaXMuX29uQ2hhbmdlLmxlbmd0aCYmITEhPT1lLmVtaXRNb2RlbFRvVmlld0NoYW5nZSYmdGhpcy5fb25DaGFuZ2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdChuLnZhbHVlLCExIT09ZS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfSxlLnByb3RvdHlwZS5wYXRjaFZhbHVlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuc2V0VmFsdWUodCxlKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD1udWxsKSx2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fYXBwbHlGb3JtU3RhdGUodCksdGhpcy5tYXJrQXNQcmlzdGluZShlKSx0aGlzLm1hcmtBc1VudG91Y2hlZChlKSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsZSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX0sZS5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5fYW55Q29udHJvbHM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGUucHJvdG90eXBlLl9hbGxDb250cm9sc0Rpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR9LGUucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25DaGFuZ2UucHVzaCh0KX0sZS5wcm90b3R5cGUuX2NsZWFyQ2hhbmdlRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9ZnVuY3Rpb24oKXt9fSxlLnByb3RvdHlwZS5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfSxlLnByb3RvdHlwZS5fZm9yRWFjaENoaWxkPWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuX3N5bmNQZW5kaW5nQ29udHJvbHM9ZnVuY3Rpb24oKXtyZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMuX3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVkJiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3BlbmRpbmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksMCkpfSxlLnByb3RvdHlwZS5fYXBwbHlGb3JtU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5faXNCb3hlZFZhbHVlKHQpPyh0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LnZhbHVlLHQuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlzLmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXR9LGV9KENBKSxTQT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxiQShuKSx3QShyLG4pKXx8dGhpcztyZXR1cm4gaS5jb250cm9scz1lLGkuX2luaXRPYnNlcnZhYmxlcygpLGkuX3NldFVwZGF0ZVN0cmF0ZWd5KG4pLGkuX3NldFVwQ29udHJvbHMoKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pLGl9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5yZWdpc3RlckNvbnRyb2w9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XT90aGlzLmNvbnRyb2xzW3RdOih0aGlzLmNvbnRyb2xzW3RdPWUsZS5zZXRQYXJlbnQodGhpcyksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxlKX0sZS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbih0LGUpe3RoaXMucmVnaXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9LGUucHJvdG90eXBlLnJlbW92ZUNvbnRyb2w9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuc2V0Q29udHJvbD1mdW5jdGlvbih0LGUpe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGZ1bmN0aW9uKCl7fSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sZSYmdGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQodCksT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtuLl90aHJvd0lmQ29udHJvbE1pc3Npbmcociksbi5jb250cm9sc1tyXS5zZXRWYWx1ZSh0W3JdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucGF0Y2hWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7bi5jb250cm9sc1tyXSYmbi5jb250cm9sc1tyXS5wYXRjaFZhbHVlKHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PXt9KSx2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKG4scil7bi5yZXNldCh0W3JdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSx0aGlzLl91cGRhdGVQcmlzdGluZShlKSx0aGlzLl91cGRhdGVUb3VjaGVkKGUpfSxlLnByb3RvdHlwZS5nZXRSYXdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbbl09ZSBpbnN0YW5jZW9mIEVBP2UudmFsdWU6ZS5nZXRSYXdWYWx1ZSgpLHR9KX0sZS5wcm90b3R5cGUuX3N5bmNQZW5kaW5nQ29udHJvbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSxmdW5jdGlvbih0LGUpe3JldHVybiEhZS5fc3luY1BlbmRpbmdDb250cm9scygpfHx0fSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fSxlLnByb3RvdHlwZS5fdGhyb3dJZkNvbnRyb2xNaXNzaW5nPWZ1bmN0aW9uKHQpe2lmKCFPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgICAgVGhlcmUgYXJlIG5vIGZvcm0gY29udHJvbHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgZ3JvdXAgeWV0LiAgSWYgeW91J3JlIHVzaW5nIG5nTW9kZWwsXG4gICAgICAgIHlvdSBtYXkgd2FudCB0byBjaGVjayBuZXh0IHRpY2sgKGUuZy4gdXNlIHNldFRpbWVvdXQpLlxuICAgICAgIik7aWYoIXRoaXMuY29udHJvbHNbdF0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAiK3QrIi4iKX0sZS5wcm90b3R5cGUuX2ZvckVhY2hDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQoZS5jb250cm9sc1tuXSxuKX0pfSxlLnByb3RvdHlwZS5fc2V0VXBDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUpe2Uuc2V0UGFyZW50KHQpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHQuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX0sZS5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfSxlLnByb3RvdHlwZS5fYW55Q29udHJvbHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPSExO3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24ocixpKXtuPW58fGUuY29udGFpbnMoaSkmJnQocil9KSxufSxlLnByb3RvdHlwZS5fcmVkdWNlVmFsdWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSxmdW5jdGlvbihlLG4scil7cmV0dXJuKG4uZW5hYmxlZHx8dC5kaXNhYmxlZCkmJihlW3JdPW4udmFsdWUpLGV9KX0sZS5wcm90b3R5cGUuX3JlZHVjZUNoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKHQscil7bj1lKG4sdCxyKX0pLG59LGUucHJvdG90eXBlLl9hbGxDb250cm9sc0Rpc2FibGVkPWZ1bmN0aW9uKCl7dHJ5e2Zvcih2YXIgdD1hKE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKSxlPXQubmV4dCgpOyFlLmRvbmU7ZT10Lm5leHQoKSlpZih0aGlzLmNvbnRyb2xzW2UudmFsdWVdLmVuYWJsZWQpcmV0dXJuITF9Y2F0Y2godCl7bj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZSYmIWUuZG9uZSYmKHI9dC5yZXR1cm4pJiZyLmNhbGwodCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZDt2YXIgbixyfSxlLnByb3RvdHlwZS5fY2hlY2tBbGxWYWx1ZXNQcmVzZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PXRbbl0pdGhyb3cgbmV3IEVycm9yKCJNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lOiAnIituKyInLiIpfSl9LGV9KENBKSxrQT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxiQShuKSx3QShyLG4pKXx8dGhpcztyZXR1cm4gaS5jb250cm9scz1lLGkuX2luaXRPYnNlcnZhYmxlcygpLGkuX3NldFVwZGF0ZVN0cmF0ZWd5KG4pLGkuX3NldFVwQ29udHJvbHMoKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pLGl9cmV0dXJuIGkoZSx0KSxlLnByb3RvdHlwZS5hdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzLnB1c2godCksdGhpcy5fcmVnaXN0ZXJDb250cm9sKHQpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRyb2xzLnNwbGljZSh0LDAsZSksdGhpcy5fcmVnaXN0ZXJDb250cm9sKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSxlLnByb3RvdHlwZS5yZW1vdmVBdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9LGUucHJvdG90eXBlLnNldENvbnRyb2w9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe30pLHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMSksZSYmKHRoaXMuY29udHJvbHMuc3BsaWNlKHQsMCxlKSx0aGlzLl9yZWdpc3RlckNvbnRyb2woZSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2xzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2NoZWNrQWxsVmFsdWVzUHJlc2VudCh0KSx0LmZvckVhY2goZnVuY3Rpb24odCxyKXtuLl90aHJvd0lmQ29udHJvbE1pc3Npbmcociksbi5hdChyKS5zZXRWYWx1ZSh0LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucGF0Y2hWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe24uYXQocikmJm4uYXQocikucGF0Y2hWYWx1ZSh0LHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihuLHIpe24ucmVzZXQodFtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKX0sZS5wcm90b3R5cGUuZ2V0UmF3VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250cm9scy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFQT90LnZhbHVlOnQuZ2V0UmF3VmFsdWUoKX0pfSxlLnByb3RvdHlwZS5fc3luY1BlbmRpbmdDb250cm9scz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udHJvbHMucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuISFlLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fHR9LCExKTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9LGUucHJvdG90eXBlLl90aHJvd0lmQ29udHJvbE1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIXRoaXMuY29udHJvbHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiXG4gICAgICAgIFRoZXJlIGFyZSBubyBmb3JtIGNvbnRyb2xzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGFycmF5IHlldC4gIElmIHlvdSdyZSB1c2luZyBuZ01vZGVsLFxuICAgICAgICB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgbmV4dCB0aWNrIChlLmcuIHVzZSBzZXRUaW1lb3V0KS5cbiAgICAgICIpO2lmKCF0aGlzLmF0KHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZm9ybSBjb250cm9sIGF0IGluZGV4ICIrdCl9LGUucHJvdG90eXBlLl9mb3JFYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9scy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dChlLG4pfSl9LGUucHJvdG90eXBlLl91cGRhdGVWYWx1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy52YWx1ZT10aGlzLmNvbnRyb2xzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5lbmFibGVkfHx0LmRpc2FibGVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LGUucHJvdG90eXBlLl9hbnlDb250cm9scz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250cm9scy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVuYWJsZWQmJnQoZSl9KX0sZS5wcm90b3R5cGUuX3NldFVwQ29udHJvbHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihlKXtyZXR1cm4gdC5fcmVnaXN0ZXJDb250cm9sKGUpfSl9LGUucHJvdG90eXBlLl9jaGVja0FsbFZhbHVlc1ByZXNlbnQ9ZnVuY3Rpb24odCl7dGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGUsbil7aWYodm9pZCAwPT09dFtuXSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3VwcGx5IGEgdmFsdWUgZm9yIGZvcm0gY29udHJvbCBhdCBpbmRleDogIituKyIuIil9KX0sZS5wcm90b3R5cGUuX2FsbENvbnRyb2xzRGlzYWJsZWQ9ZnVuY3Rpb24oKXt0cnl7Zm9yKHZhciB0PWEodGhpcy5jb250cm9scyksZT10Lm5leHQoKTshZS5kb25lO2U9dC5uZXh0KCkpaWYoZS52YWx1ZS5lbmFibGVkKXJldHVybiExfWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2UmJiFlLmRvbmUmJihyPXQucmV0dXJuKSYmci5jYWxsKHQpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gdGhpcy5jb250cm9scy5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZDt2YXIgbixyfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJDb250cm9sPWZ1bmN0aW9uKHQpe3Quc2V0UGFyZW50KHRoaXMpLHQuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9LGV9KENBKSxUQT1Qcm9taXNlLnJlc29sdmUobnVsbCksQUE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5zdWJtaXR0ZWQ9ITEsci5fZGlyZWN0aXZlcz1bXSxyLm5nU3VibWl0PW5ldyB6ZSxyLmZvcm09bmV3IFNBKHt9LHBBKGUpLGRBKG4pKSxyfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0PWZ1bmN0aW9uKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb250cm9sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRyb2xzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7VEEudGhlbihmdW5jdGlvbigpe3ZhciBuPWUuX2ZpbmRDb250YWluZXIodC5wYXRoKTt0LmNvbnRyb2w9bi5yZWdpc3RlckNvbnRyb2wodC5uYW1lLHQuY29udHJvbCksbEEodC5jb250cm9sLHQpLHQuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLl9kaXJlY3RpdmVzLnB1c2godCl9KX0sZS5wcm90b3R5cGUuZ2V0Q29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7VEEudGhlbihmdW5jdGlvbigpe3ZhciBuPWUuX2ZpbmRDb250YWluZXIodC5wYXRoKTtuJiZuLnJlbW92ZUNvbnRyb2wodC5uYW1lKSxnQShlLl9kaXJlY3RpdmVzLHQpfSl9LGUucHJvdG90eXBlLmFkZEZvcm1Hcm91cD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO1RBLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1lLl9maW5kQ29udGFpbmVyKHQucGF0aCkscj1uZXcgU0Eoe30pO2NBKHIsdCksbi5yZWdpc3RlckNvbnRyb2wodC5uYW1lLHIpLHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KX0sZS5wcm90b3R5cGUucmVtb3ZlRm9ybUdyb3VwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7VEEudGhlbihmdW5jdGlvbigpe3ZhciBuPWUuX2ZpbmRDb250YWluZXIodC5wYXRoKTtuJiZuLnJlbW92ZUNvbnRyb2wodC5uYW1lKX0pfSxlLnByb3RvdHlwZS5nZXRGb3JtR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZm9ybS5nZXQodC5wYXRoKX0sZS5wcm90b3R5cGUudXBkYXRlTW9kZWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO1RBLnRoZW4oZnVuY3Rpb24oKXtuLmZvcm0uZ2V0KHQucGF0aCkuc2V0VmFsdWUoZSl9KX0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5jb250cm9sLnNldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5vblN1Ym1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAseUEodGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJtaXQuZW1pdCh0KSwhMX0sZS5wcm90b3R5cGUub25SZXNldD1mdW5jdGlvbigpe3RoaXMucmVzZXRGb3JtKCl9LGUucHJvdG90eXBlLnJlc2V0Rm9ybT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD12b2lkIDApLHRoaXMuZm9ybS5yZXNldCh0KSx0aGlzLnN1Ym1pdHRlZD0hMX0sZS5wcm90b3R5cGUuX3NldFVwZGF0ZVN0cmF0ZWd5PWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9LGUucHJvdG90eXBlLl9maW5kQ29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcCgpLHQubGVuZ3RoP3RoaXMuZm9ybS5nZXQodCk6dGhpcy5mb3JtfSxlfShGVCksUEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lm1vZGVsUGFyZW50RXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCdcbiAgICAgIG5nTW9kZWwgY2Fubm90IGJlIHVzZWQgdG8gcmVnaXN0ZXIgZm9ybSBjb250cm9scyB3aXRoIGEgcGFyZW50IGZvcm1Hcm91cCBkaXJlY3RpdmUuICBUcnkgdXNpbmdcbiAgICAgIGZvcm1Hcm91cFwncyBwYXJ0bmVyIGRpcmVjdGl2ZSAiZm9ybUNvbnRyb2xOYW1lIiBpbnN0ZWFkLiAgRXhhbXBsZTpcblxuICAgICAgJytyQSsnXG5cbiAgICAgIE9yLCBpZiB5b3VcJ2QgbGlrZSB0byBhdm9pZCByZWdpc3RlcmluZyB0aGlzIGZvcm0gY29udHJvbCwgaW5kaWNhdGUgdGhhdCBpdFwncyBzdGFuZGFsb25lIGluIG5nTW9kZWxPcHRpb25zOlxuXG4gICAgICBFeGFtcGxlOlxuXG4gICAgICBcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPSJteUdyb3VwIj5cbiAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaXJzdE5hbWUiPlxuICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT0ic2hvd01vcmVDb250cm9scyIgW25nTW9kZWxPcHRpb25zXT0ie3N0YW5kYWxvbmU6IHRydWV9Ij5cbiAgICA8L2Rpdj5cbiAgJyl9LHQuZm9ybUdyb3VwTmFtZUV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiXG4gICAgICBuZ01vZGVsIGNhbm5vdCBiZSB1c2VkIHRvIHJlZ2lzdGVyIGZvcm0gY29udHJvbHMgd2l0aCBhIHBhcmVudCBmb3JtR3JvdXBOYW1lIG9yIGZvcm1BcnJheU5hbWUgZGlyZWN0aXZlLlxuXG4gICAgICBPcHRpb24gMTogVXNlIGZvcm1Db250cm9sTmFtZSBpbnN0ZWFkIG9mIG5nTW9kZWwgKHJlYWN0aXZlIHN0cmF0ZWd5KTpcblxuICAgICAgIitpQSsiXG5cbiAgICAgIE9wdGlvbiAyOiAgVXBkYXRlIG5nTW9kZWwncyBwYXJlbnQgYmUgbmdNb2RlbEdyb3VwICh0ZW1wbGF0ZS1kcml2ZW4gc3RyYXRlZ3kpOlxuXG4gICAgICAiK29BKX0sdC5taXNzaW5nTmFtZUV4Y2VwdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignSWYgbmdNb2RlbCBpcyB1c2VkIHdpdGhpbiBhIGZvcm0gdGFnLCBlaXRoZXIgdGhlIG5hbWUgYXR0cmlidXRlIG11c3QgYmUgc2V0IG9yIHRoZSBmb3JtXG4gICAgICBjb250cm9sIG11c3QgYmUgZGVmaW5lZCBhcyBcJ3N0YW5kYWxvbmVcJyBpbiBuZ01vZGVsT3B0aW9ucy5cblxuICAgICAgRXhhbXBsZSAxOiA8aW5wdXQgWyhuZ01vZGVsKV09InBlcnNvbi5maXJzdE5hbWUiIG5hbWU9ImZpcnN0Ij5cbiAgICAgIEV4YW1wbGUgMjogPGlucHV0IFsobmdNb2RlbCldPSJwZXJzb24uZmlyc3ROYW1lIiBbbmdNb2RlbE9wdGlvbnNdPSJ7c3RhbmRhbG9uZTogdHJ1ZX0iPicpfSx0Lm1vZGVsR3JvdXBQYXJlbnRFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlxuICAgICAgbmdNb2RlbEdyb3VwIGNhbm5vdCBiZSB1c2VkIHdpdGggYSBwYXJlbnQgZm9ybUdyb3VwIGRpcmVjdGl2ZS5cblxuICAgICAgT3B0aW9uIDE6IFVzZSBmb3JtR3JvdXBOYW1lIGluc3RlYWQgb2YgbmdNb2RlbEdyb3VwIChyZWFjdGl2ZSBzdHJhdGVneSk6XG5cbiAgICAgICIraUErIlxuXG4gICAgICBPcHRpb24gMjogIFVzZSBhIHJlZ3VsYXIgZm9ybSB0YWcgaW5zdGVhZCBvZiB0aGUgZm9ybUdyb3VwIGRpcmVjdGl2ZSAodGVtcGxhdGUtZHJpdmVuIHN0cmF0ZWd5KTpcblxuICAgICAgIitvQSl9LHR9KCksT0E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl9wYXJlbnQ9ZSxpLl92YWxpZGF0b3JzPW4saS5fYXN5bmNWYWxpZGF0b3JzPXIsaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLl9jaGVja1BhcmVudFR5cGU9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBlfHx0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBBQXx8UEEubW9kZWxHcm91cFBhcmVudEV4Y2VwdGlvbigpfSxlfSh2QSksSUE9UHJvbWlzZS5yZXNvbHZlKG51bGwpLE1BPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBvLmNvbnRyb2w9bmV3IEVBLG8uX3JlZ2lzdGVyZWQ9ITEsby51cGRhdGU9bmV3IHplLG8uX3BhcmVudD1lLG8uX3Jhd1ZhbGlkYXRvcnM9bnx8W10sby5fcmF3QXN5bmNWYWxpZGF0b3JzPXJ8fFtdLG8udmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiBudWxsO0FycmF5LmlzQXJyYXkoZSl8fGZBKHQsIlZhbHVlIGFjY2Vzc29yIHdhcyBub3QgcHJvdmlkZWQgYXMgYW4gYXJyYXkgZm9yIGZvcm0gY29udHJvbCB3aXRoIik7dmFyIG49dm9pZCAwLHI9dm9pZCAwLGk9dm9pZCAwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG87ZS5jb25zdHJ1Y3Rvcj09PUtUP249ZToobz1lLG1BLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RydWN0b3I9PT10fSk/KHImJmZBKHQsIk1vcmUgdGhhbiBvbmUgYnVpbHQtaW4gdmFsdWUgYWNjZXNzb3IgbWF0Y2hlcyBmb3JtIGNvbnRyb2wgd2l0aCIpLHI9ZSk6KGkmJmZBKHQsIk1vcmUgdGhhbiBvbmUgY3VzdG9tIHZhbHVlIGFjY2Vzc29yIG1hdGNoZXMgZm9ybSBjb250cm9sIHdpdGgiKSxpPWUpKX0pLGl8fHJ8fG58fChmQSh0LCJObyB2YWxpZCB2YWx1ZSBhY2Nlc3NvciBmb3IgZm9ybSBjb250cm9sIHdpdGgiKSxudWxsKX0obyxpKSxvfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy5fY2hlY2tGb3JFcnJvcnMoKSx0aGlzLl9yZWdpc3RlcmVkfHx0aGlzLl9zZXRVcENvbnRyb2woKSwiaXNEaXNhYmxlZCJpbiB0JiZ0aGlzLl91cGRhdGVEaXNhYmxlZCh0KSxmdW5jdGlvbih0LGUpe2lmKCF0Lmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO3ZhciBuPXQubW9kZWw7cmV0dXJuISFuLmlzRmlyc3RDaGFuZ2UoKXx8IVR0KGUsbi5jdXJyZW50VmFsdWUpfSh0LHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnQ/c0EodGhpcy5uYW1lLHRoaXMuX3BhcmVudCk6W3RoaXMubmFtZV19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb3JtRGlyZWN0aXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsaWRhdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHBBKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYXN5bmNWYWxpZGF0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZEEodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS52aWV3VG9Nb2RlbFVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnZpZXdNb2RlbD10LHRoaXMudXBkYXRlLmVtaXQodCl9LGUucHJvdG90eXBlLl9zZXRVcENvbnRyb2w9ZnVuY3Rpb24oKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9LGUucHJvdG90eXBlLl9zZXRVcGRhdGVTdHJhdGVneT1mdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfSxlLnByb3RvdHlwZS5faXNTdGFuZGFsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfSxlLnByb3RvdHlwZS5fc2V0VXBTdGFuZGFsb25lPWZ1bmN0aW9uKCl7bEEodGhpcy5jb250cm9sLHRoaXMpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0sZS5wcm90b3R5cGUuX2NoZWNrRm9yRXJyb3JzPWZ1bmN0aW9uKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfSxlLnByb3RvdHlwZS5fY2hlY2tQYXJlbnRUeXBlPWZ1bmN0aW9uKCl7ISh0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBPQSkmJnRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIHZBP1BBLmZvcm1Hcm91cE5hbWVFeGNlcHRpb24oKTp0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBPQXx8dGhpcy5fcGFyZW50IGluc3RhbmNlb2YgQUF8fFBBLm1vZGVsUGFyZW50RXhjZXB0aW9uKCl9LGUucHJvdG90eXBlLl9jaGVja05hbWU9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5uYW1lfHxQQS5taXNzaW5nTmFtZUV4Y2VwdGlvbigpfSxlLnByb3RvdHlwZS5fdXBkYXRlVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztJQS50aGVuKGZ1bmN0aW9uKCl7ZS5jb250cm9sLnNldFZhbHVlKHQse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pfSl9LGUucHJvdG90eXBlLl91cGRhdGVEaXNhYmxlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPSIiPT09bnx8biYmImZhbHNlIiE9PW47SUEudGhlbihmdW5jdGlvbigpe3ImJiFlLmNvbnRyb2wuZGlzYWJsZWQ/ZS5jb250cm9sLmRpc2FibGUoKTohciYmZS5jb250cm9sLmRpc2FibGVkJiZlLmNvbnRyb2wuZW5hYmxlKCl9KX0sZX0oSlQpLE5BPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3ZhbGlkYXRvcnM9ZSxyLl9hc3luY1ZhbGlkYXRvcnM9bixyLnN1Ym1pdHRlZD0hMSxyLmRpcmVjdGl2ZXM9W10sci5mb3JtPW51bGwsci5uZ1N1Ym1pdD1uZXcgemUscn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2NoZWNrRm9ybVByZXNlbnQoKSx0Lmhhc093blByb3BlcnR5KCJmb3JtIikmJih0aGlzLl91cGRhdGVWYWxpZGF0b3JzKCksdGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLl91cGRhdGVSZWdpc3RyYXRpb25zKCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvcm1EaXJlY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbnRyb2wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb3JtLmdldCh0LnBhdGgpO3JldHVybiBsQShlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2godCksZX0sZS5wcm90b3R5cGUuZ2V0Q29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKHQpe2dBKHRoaXMuZGlyZWN0aXZlcyx0KX0sZS5wcm90b3R5cGUuYWRkRm9ybUdyb3VwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9ybS5nZXQodC5wYXRoKTtjQShlLHQpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9LGUucHJvdG90eXBlLnJlbW92ZUZvcm1Hcm91cD1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmdldEZvcm1Hcm91cD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mb3JtLmdldCh0LnBhdGgpfSxlLnByb3RvdHlwZS5hZGRGb3JtQXJyYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mb3JtLmdldCh0LnBhdGgpO2NBKGUsdCksZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0sZS5wcm90b3R5cGUucmVtb3ZlRm9ybUFycmF5PWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuZ2V0Rm9ybUFycmF5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZvcm0uZ2V0KHQucGF0aCl9LGUucHJvdG90eXBlLnVwZGF0ZU1vZGVsPWZ1bmN0aW9uKHQsZSl7dGhpcy5mb3JtLmdldCh0LnBhdGgpLnNldFZhbHVlKGUpfSxlLnByb3RvdHlwZS5vblN1Ym1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAseUEodGhpcy5mb3JtLHRoaXMuZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KHQpLCExfSxlLnByb3RvdHlwZS5vblJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldEZvcm0oKX0sZS5wcm90b3R5cGUucmVzZXRGb3JtPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCksdGhpcy5mb3JtLnJlc2V0KHQpLHRoaXMuc3VibWl0dGVkPSExfSxlLnByb3RvdHlwZS5fdXBkYXRlRG9tVmFsdWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZm9ybS5nZXQoZS5wYXRoKTtlLmNvbnRyb2whPT1uJiYoZnVuY3Rpb24odCxlKXtlLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShmdW5jdGlvbigpe3JldHVybiBoQShlKX0pLGUudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChmdW5jdGlvbigpe3JldHVybiBoQShlKX0pLGUuX3Jhd1ZhbGlkYXRvcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJnQucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShudWxsKX0pLGUuX3Jhd0FzeW5jVmFsaWRhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmdC5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKG51bGwpfSksdCYmdC5fY2xlYXJDaGFuZ2VGbnMoKX0oZS5jb250cm9sLGUpLG4mJmxBKG4sZSksZS5jb250cm9sPW4pfSksdGhpcy5mb3JtLl91cGRhdGVUcmVlVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSxlLnByb3RvdHlwZS5fdXBkYXRlUmVnaXN0cmF0aW9ucz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShmdW5jdGlvbigpe3JldHVybiB0Ll91cGRhdGVEb21WYWx1ZSgpfSksdGhpcy5fb2xkRm9ybSYmdGhpcy5fb2xkRm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoZnVuY3Rpb24oKXt9KSx0aGlzLl9vbGRGb3JtPXRoaXMuZm9ybX0sZS5wcm90b3R5cGUuX3VwZGF0ZVZhbGlkYXRvcnM9ZnVuY3Rpb24oKXt2YXIgdD1wQSh0aGlzLl92YWxpZGF0b3JzKTt0aGlzLmZvcm0udmFsaWRhdG9yPXpULmNvbXBvc2UoW3RoaXMuZm9ybS52YWxpZGF0b3IsdF0pO3ZhciBlPWRBKHRoaXMuX2FzeW5jVmFsaWRhdG9ycyk7dGhpcy5mb3JtLmFzeW5jVmFsaWRhdG9yPXpULmNvbXBvc2VBc3luYyhbdGhpcy5mb3JtLmFzeW5jVmFsaWRhdG9yLGVdKX0sZS5wcm90b3R5cGUuX2NoZWNrRm9ybVByZXNlbnQ9ZnVuY3Rpb24oKXt0aGlzLmZvcm18fGFBLm1pc3NpbmdGb3JtRXhjZXB0aW9uKCl9LGV9KEZUKSxSQT1mdW5jdGlvbigpe30sREE9ZnVuY3Rpb24oKXt9LExBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5odHRwPXQsdGhpcy5yb3V0ZT1lLHRoaXMucm91dGVyPW4sdGhpcy5yZW1vdGVDb250ZW50PSJMb2FkaW5nLi4uIix0aGlzLndpa2lQYWdlVGl0bGU9IkxvYWRpbmcuLi4iLHRoaXMuZmllbGRQYWdlUGF0aD0iIn1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMucm91dGUucGFyYW1NYXAuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNoZWNrRm9yUGFnZVBhdGgoZSl9KX0sdC5wcm90b3R5cGUuY2hlY2tGb3JQYWdlUGF0aD1mdW5jdGlvbih0KXt0LmhhcygicGFnZXBhdGgiKT8odGhpcy5mZXRjaFdpa2lQYWdlKHQuZ2V0KCJwYWdlcGF0aCIpKSx0aGlzLmZpZWxkUGFnZVBhdGg9dC5nZXQoInBhZ2VwYXRoIikpOih0aGlzLmZldGNoV2lraVBhZ2UoIlRlYW1NYWluUGFnZSIpLHRoaXMuZmllbGRQYWdlUGF0aD0iVGVhbU1haW5QYWdlIil9LHQucHJvdG90eXBlLmZldGNoV2lraVBhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmh0dHAuZ2V0KCJodHRwOi8vMjAxOC5pZ2VtLm9yZy9UZWFtOkdPX1BhcmlzLVNhY2xheS8iK3Qse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGUucHJvY2Vzc0NvbnRlbnQodCl9LGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLmxvZyh0KX0pfSx0LnByb3RvdHlwZS5wcm9jZXNzQ29udGVudD1mdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIjx0aXRsZT5UZWFtOkdPIFBhcmlzLVNhY2xheS8iKSxuPXQuaW5kZXhPZigiIC0gMjAxOC5pZ2VtLm9yZzwvdGl0bGU+Iik7dGhpcy53aWtpUGFnZVRpdGxlPXQuc2xpY2UoZSsiPHRpdGxlPlRlYW06R08gUGFyaXMtU2FjbGF5LyIubGVuZ3RoLG4pO3ZhciByPXQuaW5kZXhPZignPGRpdiBpZD0iSFFfcGFnZSI+JyksaT10LmluZGV4T2YoJzxkaXYgY2xhc3M9InZpc3VhbENsZWFyIj48L2Rpdj4nKSxvPXQuc2xpY2UocixpKTtvPW8ucmVwbGFjZShuZXcgUmVnRXhwKCdocmVmPSJcXC9UZWFtOkdPX1BhcmlzLVNhY2xheVxcLycsImciKSwnPGEgaHJlZj0iIy93aWtpLWxwLycpLHRoaXMucmVtb3RlQ29udGVudD1vfSx0LnByb3RvdHlwZS5nb1RvRmlsbGVkUGFnZT1mdW5jdGlvbigpe3RoaXMucm91dGVyLm5hdmlnYXRlKFsiL3dpa2ktbHAvIit0aGlzLmZpZWxkUGFnZVBhdGhdKX0sdC5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0PWZ1bmN0aW9uKCl7fSx0fSgpLGpBPWZ1bmN0aW9uKCl7fSxGQT1mdW5jdGlvbigpe30sVkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCx0P3RoaXMubGF6eUluaXQ9InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7ZS5oZWFkZXJzPW5ldyBNYXAsdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5kZXhPZigiOiIpO2lmKG4+MCl7dmFyIHI9dC5zbGljZSgwLG4pLGk9ci50b0xvd2VyQ2FzZSgpLG89dC5zbGljZShuKzEpLnRyaW0oKTtlLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUocixpKSxlLmhlYWRlcnMuaGFzKGkpP2UuaGVhZGVycy5nZXQoaSkucHVzaChvKTplLmhlYWRlcnMuc2V0KGksW29dKX19KX06ZnVuY3Rpb24oKXtlLmhlYWRlcnM9bmV3IE1hcCxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl0saT1uLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiByJiYocj1bcl0pLHIubGVuZ3RoPjAmJihlLmhlYWRlcnMuc2V0KGksciksZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lKG4saSkpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3RoaXMuaW5pdCgpO3ZhciBlPXRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lWzBdOm51bGx9LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfSx0LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImEifSl9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX0sdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfSx0LnByb3RvdHlwZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lPWZ1bmN0aW9uKHQsZSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGUpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoZSx0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseVVwZGF0ZSh0KX0pLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9LHQucHJvdG90eXBlLmNvcHlGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuaGVhZGVycy5zZXQobix0LmhlYWRlcnMuZ2V0KG4pKSxlLm5vcm1hbGl6ZWROYW1lcy5zZXQobix0Lm5vcm1hbGl6ZWROYW1lcy5nZXQobikpfSl9LHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLmxhenlJbml0PXRoaXMubGF6eUluaXQmJnRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiB0P3RoaXMubGF6eUluaXQ6dGhpcyxuLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbZV0pLG59LHQucHJvdG90eXBlLmFwcGx5VXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6dmFyIG49dC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIG4mJihuPVtuXSksMD09PW4ubGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUodC5uYW1lLGUpO3ZhciByPSgiYSI9PT10Lm9wP3RoaXMuaGVhZGVycy5nZXQoZSk6dm9pZCAwKXx8W107ci5wdXNoLmFwcGx5KHIsbChuKSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6dmFyIGk9dC52YWx1ZTtpZihpKXt2YXIgbz10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFvKXJldHVybjswPT09KG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT1pLmluZGV4T2YodCl9KSkubGVuZ3RoPyh0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKSk6dGhpcy5oZWFkZXJzLnNldChlLG8pfWVsc2UgdGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHQoZS5ub3JtYWxpemVkTmFtZXMuZ2V0KG4pLGUuaGVhZGVycy5nZXQobikpfSl9LHR9KCksQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5lbmNvZGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIHpBKHQpfSx0LnByb3RvdHlwZS5lbmNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gekEodCl9LHQucHJvdG90eXBlLmRlY29kZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0LnByb3RvdHlwZS5kZWNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfSx0fSgpO2Z1bmN0aW9uIHpBKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJTQwL2dpLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2dpLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTNCL2dpLCI7IikucmVwbGFjZSgvJTJCL2dpLCIrIikucmVwbGFjZSgvJTNEL2dpLCI9IikucmVwbGFjZSgvJTNGL2dpLCI/IikucmVwbGFjZSgvJTJGL2dpLCIvIil9dmFyIFVBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGUsbixyLGk9dGhpcztpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBCQSx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD0oZT10LmZyb21TdHJpbmcsbj10aGlzLmVuY29kZXIscj1uZXcgTWFwLGUubGVuZ3RoPjAmJmUuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiPSIpLGk9cygtMT09ZT9bbi5kZWNvZGVLZXkodCksIiJdOltuLmRlY29kZUtleSh0LnNsaWNlKDAsZSkpLG4uZGVjb2RlVmFsdWUodC5zbGljZShlKzEpKV0sMiksbz1pWzBdLGE9aVsxXSxsPXIuZ2V0KG8pfHxbXTtsLnB1c2goYSksci5zZXQobyxsKX0pLHIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmZyb21PYmplY3RbZV07aS5tYXAuc2V0KGUsQXJyYXkuaXNBcnJheShuKT9uOltuXSl9KSk6dGhpcy5tYXA9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt0aGlzLmluaXQoKTt2YXIgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldCh0KXx8bnVsbH0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6InMifSl9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZW5jb2Rlci5lbmNvZGVLZXkoZSk7cmV0dXJuIHQubWFwLmdldChlKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4rIj0iK3QuZW5jb2Rlci5lbmNvZGVWYWx1ZShlKX0pLmpvaW4oIiYiKX0pLmpvaW4oIiYiKX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQoe2VuY29kZXI6dGhpcy5lbmNvZGVyfSk7cmV0dXJuIG4uY2xvbmVGcm9tPXRoaXMuY2xvbmVGcm9tfHx0aGlzLG4udXBkYXRlcz0odGhpcy51cGRhdGVzfHxbXSkuY29uY2F0KFtlXSksbn0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm1hcC5zZXQoZSx0LmNsb25lRnJvbS5tYXAuZ2V0KGUpKX0pLHRoaXMudXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3N3aXRjaChlLm9wKXtjYXNlImEiOmNhc2UicyI6dmFyIG49KCJhIj09PWUub3A/dC5tYXAuZ2V0KGUucGFyYW0pOnZvaWQgMCl8fFtdO24ucHVzaChlLnZhbHVlKSx0Lm1hcC5zZXQoZS5wYXJhbSxuKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PWUudmFsdWUpe3QubWFwLmRlbGV0ZShlLnBhcmFtKTticmVha312YXIgcj10Lm1hcC5nZXQoZS5wYXJhbSl8fFtdLGk9ci5pbmRleE9mKGUudmFsdWUpOy0xIT09aSYmci5zcGxpY2UoaSwxKSxyLmxlbmd0aD4wP3QubWFwLnNldChlLnBhcmFtLHIpOnQubWFwLmRlbGV0ZShlLnBhcmFtKX19KSx0aGlzLmNsb25lRnJvbT1udWxsKX0sdH0oKTtmdW5jdGlvbiBIQSh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gcUEodCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZ0IGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBHQSh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZ0IGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIFdBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaTtpZih0aGlzLnVybD1lLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPXQudG9VcHBlckNhc2UoKSxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8cj8odGhpcy5ib2R5PXZvaWQgMCE9PW4/bjpudWxsLGk9cik6aT1uLGkmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhaS5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIWkud2l0aENyZWRlbnRpYWxzLGkucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9aS5yZXNwb25zZVR5cGUpLGkuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1pLmhlYWRlcnMpLGkucGFyYW1zJiYodGhpcy5wYXJhbXM9aS5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IFZBKSx0aGlzLnBhcmFtcyl7dmFyIG89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09by5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXt2YXIgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStvfX1lbHNlIHRoaXMucGFyYW1zPW5ldyBVQSx0aGlzLnVybFdpdGhQYXJhbXM9ZX1yZXR1cm4gdC5wcm90b3R5cGUuc2VyaWFsaXplQm9keT1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6SEEodGhpcy5ib2R5KXx8cUEodGhpcy5ib2R5KXx8R0EodGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIFVBP3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfSx0LnByb3RvdHlwZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6R0EodGhpcy5ib2R5KT9udWxsOnFBKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6SEEodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiBVQT8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpPyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5tZXRob2R8fHRoaXMubWV0aG9kLHI9ZS51cmx8fHRoaXMudXJsLGk9ZS5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLG89dm9pZCAwIT09ZS5ib2R5P2UuYm9keTp0aGlzLmJvZHksYT12b2lkIDAhPT1lLndpdGhDcmVkZW50aWFscz9lLndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxzPXZvaWQgMCE9PWUucmVwb3J0UHJvZ3Jlc3M/ZS5yZXBvcnRQcm9ncmVzczp0aGlzLnJlcG9ydFByb2dyZXNzLGw9ZS5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsdT1lLnBhcmFtc3x8dGhpcy5wYXJhbXM7cmV0dXJuIHZvaWQgMCE9PWUuc2V0SGVhZGVycyYmKGw9T2JqZWN0LmtleXMoZS5zZXRIZWFkZXJzKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldEhlYWRlcnNbbl0pfSxsKSksZS5zZXRQYXJhbXMmJih1PU9iamVjdC5rZXlzKGUuc2V0UGFyYW1zKS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5zZXQobixlLnNldFBhcmFtc1tuXSl9LHUpKSxuZXcgdChuLHIsbyx7cGFyYW1zOnUsaGVhZGVyczpsLHJlcG9ydFByb2dyZXNzOnMscmVzcG9uc2VUeXBlOmksd2l0aENyZWRlbnRpYWxzOmF9KX0sdH0oKSxRQT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LlNlbnQ9MF09IlNlbnQiLHRbdC5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLHRbdC5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2U9NF09IlJlc3BvbnNlIix0W3QuVXNlcj01XT0iVXNlciIsdH0oe30pLEtBPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0yMDApLHZvaWQgMD09PW4mJihuPSJPSyIpLHRoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBWQSx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fG4sdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fSgpLFpBPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLnR5cGU9UUEuUmVzcG9uc2VIZWFkZXIsbn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9LGV9KEtBKSxZQT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gbi50eXBlPVFBLlJlc3BvbnNlLG4uYm9keT12b2lkIDAhPT1lLmJvZHk/ZS5ib2R5Om51bGwsbn1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX0sZX0oS0EpLFhBPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSwwLCJVbmtub3duIEVycm9yIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLG4ub2s9ITEsbi5tZXNzYWdlPW4uc3RhdHVzPj0yMDAmJm4uc3RhdHVzPDMwMD8iSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKToiSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAiKyhlLnVybHx8Iih1bmtub3duIHVybCkiKSsiOiAiK2Uuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQsbi5lcnJvcj1lLmVycm9yfHxudWxsLG59cmV0dXJuIGkoZSx0KSxlfShLQSk7ZnVuY3Rpb24gJEEodCxlKXtyZXR1cm57Ym9keTplLGhlYWRlcnM6dC5oZWFkZXJzLG9ic2VydmU6dC5vYnNlcnZlLHBhcmFtczp0LnBhcmFtcyxyZXBvcnRQcm9ncmVzczp0LnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6dC53aXRoQ3JlZGVudGlhbHN9fXZhciBKQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5oYW5kbGVyPXR9cmV0dXJuIHQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dGhpcztpZih2b2lkIDA9PT1uJiYobj17fSksdCBpbnN0YW5jZW9mIFdBKXI9dDtlbHNle3ZhciBvO289bi5oZWFkZXJzIGluc3RhbmNlb2YgVkE/bi5oZWFkZXJzOm5ldyBWQShuLmhlYWRlcnMpO3ZhciBhPXZvaWQgMDtuLnBhcmFtcyYmKGE9bi5wYXJhbXMgaW5zdGFuY2VvZiBVQT9uLnBhcmFtczpuZXcgVUEoe2Zyb21PYmplY3Q6bi5wYXJhbXN9KSkscj1uZXcgV0EodCxlLHZvaWQgMCE9PW4uYm9keT9uLmJvZHk6bnVsbCx7aGVhZGVyczpvLHBhcmFtczphLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfSl9dmFyIHM9ZGwocikucGlwZShBZChmdW5jdGlvbih0KXtyZXR1cm4gaS5oYW5kbGVyLmhhbmRsZSh0KX0pKTtpZih0IGluc3RhbmNlb2YgV0F8fCJldmVudHMiPT09bi5vYnNlcnZlKXJldHVybiBzO3ZhciBsPXMucGlwZShZbChmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFlBfSkpO3N3aXRjaChuLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goci5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBsLnBpcGUocShmdW5jdGlvbih0KXtpZihudWxsIT09dC5ib2R5JiYhKHQuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhbiBBcnJheUJ1ZmZlci4iKTtyZXR1cm4gdC5ib2R5fSkpO2Nhc2UiYmxvYiI6cmV0dXJuIGwucGlwZShxKGZ1bmN0aW9uKHQpe2lmKG51bGwhPT10LmJvZHkmJiEodC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiB0LmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gbC5waXBlKHEoZnVuY3Rpb24odCl7aWYobnVsbCE9PXQuYm9keSYmInN0cmluZyIhPXR5cGVvZiB0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIHQuYm9keX0pKTtjYXNlImpzb24iOmRlZmF1bHQ6cmV0dXJuIGwucGlwZShxKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJvZHl9KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGw7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICIrbi5vYnNlcnZlKyJ9Iil9fSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiREVMRVRFIix0LGUpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiR0VUIix0LGUpfSx0LnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIkhFQUQiLHQsZSl9LHQucHJvdG90eXBlLmpzb25wPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLHQse3BhcmFtczoobmV3IFVBKS5hcHBlbmQoZSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9LHQucHJvdG90eXBlLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsdCxlKX0sdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksdGhpcy5yZXF1ZXN0KCJQQVRDSCIsdCwkQShuLGUpKX0sdC5wcm90b3R5cGUucG9zdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBPU1QiLHQsJEEobixlKSl9LHQucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBVVCIsdCwkQShuLGUpKX0sdH0oKSx0UD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLm5leHQ9dCx0aGlzLmludGVyY2VwdG9yPWV9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5pbnRlcmNlcHQodCx0aGlzLm5leHQpfSx0fSgpLGVQPW5ldyBtdCgiSFRUUF9JTlRFUkNFUFRPUlMiKSxuUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3JldHVybiBlLmhhbmRsZSh0KX0sdH0oKSxyUD0vXlwpXF1cfScsP1xuLyxpUD1mdW5jdGlvbigpe30sb1A9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9LHR9KCksYVA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMueGhyRmFjdG9yeT10fXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigiSlNPTlAiPT09dC5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBKc29ucENsaWVudE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBPKGZ1bmN0aW9uKG4pe3ZhciByPWUueGhyRmFjdG9yeS5idWlsZCgpO2lmKHIub3Blbih0Lm1ldGhvZCx0LnVybFdpdGhQYXJhbXMpLHQud2l0aENyZWRlbnRpYWxzJiYoci53aXRoQ3JlZGVudGlhbHM9ITApLHQuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuc2V0UmVxdWVzdEhlYWRlcih0LGUuam9pbigiLCIpKX0pLHQuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCF0LmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7dmFyIGk9dC5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1pJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaSl9aWYodC5yZXNwb25zZVR5cGUpe3ZhciBvPXQucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7ci5yZXNwb25zZVR5cGU9Impzb24iIT09bz9vOiJ0ZXh0In12YXIgYT10LnNlcmlhbGl6ZUJvZHkoKSxzPW51bGwsbD1mdW5jdGlvbigpe2lmKG51bGwhPT1zKXJldHVybiBzO3ZhciBlPTEyMjM9PT1yLnN0YXR1cz8yMDQ6ci5zdGF0dXMsbj1yLnN0YXR1c1RleHR8fCJPSyIsaT1uZXcgVkEoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbz1mdW5jdGlvbih0KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gdCYmdC5yZXNwb25zZVVSTD90LnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KHQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP3QuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShyKXx8dC51cmw7cmV0dXJuIHM9bmV3IFpBKHtoZWFkZXJzOmksc3RhdHVzOmUsc3RhdHVzVGV4dDpuLHVybDpvfSl9LHU9ZnVuY3Rpb24oKXt2YXIgZT1sKCksaT1lLmhlYWRlcnMsbz1lLnN0YXR1cyxhPWUuc3RhdHVzVGV4dCxzPWUudXJsLHU9bnVsbDsyMDQhPT1vJiYodT12b2lkIDA9PT1yLnJlc3BvbnNlP3IucmVzcG9uc2VUZXh0OnIucmVzcG9uc2UpLDA9PT1vJiYobz11PzIwMDowKTt2YXIgYz1vPj0yMDAmJm88MzAwO2lmKCJqc29uIj09PXQucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIHUpe3ZhciBoPXU7dT11LnJlcGxhY2UoclAsIiIpO3RyeXt1PSIiIT09dT9KU09OLnBhcnNlKHUpOm51bGx9Y2F0Y2godCl7dT1oLGMmJihjPSExLHU9e2Vycm9yOnQsdGV4dDp1fSl9fWM/KG4ubmV4dChuZXcgWUEoe2JvZHk6dSxoZWFkZXJzOmksc3RhdHVzOm8sc3RhdHVzVGV4dDphLHVybDpzfHx2b2lkIDB9KSksbi5jb21wbGV0ZSgpKTpuLmVycm9yKG5ldyBYQSh7ZXJyb3I6dSxoZWFkZXJzOmksc3RhdHVzOm8sc3RhdHVzVGV4dDphLHVybDpzfHx2b2lkIDB9KSl9LGM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFhBKHtlcnJvcjp0LHN0YXR1czpyLnN0YXR1c3x8MCxzdGF0dXNUZXh0OnIuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IifSk7bi5lcnJvcihlKX0saD0hMSxmPWZ1bmN0aW9uKGUpe2h8fChuLm5leHQobCgpKSxoPSEwKTt2YXIgaT17dHlwZTpRQS5Eb3dubG9hZFByb2dyZXNzLGxvYWRlZDplLmxvYWRlZH07ZS5sZW5ndGhDb21wdXRhYmxlJiYoaS50b3RhbD1lLnRvdGFsKSwidGV4dCI9PT10LnJlc3BvbnNlVHlwZSYmci5yZXNwb25zZVRleHQmJihpLnBhcnRpYWxUZXh0PXIucmVzcG9uc2VUZXh0KSxuLm5leHQoaSl9LHA9ZnVuY3Rpb24odCl7dmFyIGU9e3R5cGU6UUEuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOnQubG9hZGVkfTt0Lmxlbmd0aENvbXB1dGFibGUmJihlLnRvdGFsPXQudG90YWwpLG4ubmV4dChlKX07cmV0dXJuIHIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdSksci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYyksdC5yZXBvcnRQcm9ncmVzcyYmKHIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpLG51bGwhPT1hJiZyLnVwbG9hZCYmci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnNlbmQoYSksbi5uZXh0KHt0eXBlOlFBLlNlbnR9KSxmdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdSksdC5yZXBvcnRQcm9ncmVzcyYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpLG51bGwhPT1hJiZyLnVwbG9hZCYmci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLmFib3J0KCl9fSl9LHR9KCksc1A9bmV3IG10KCJYU1JGX0NPT0tJRV9OQU1FIiksbFA9bmV3IG10KCJYU1JGX0hFQURFUl9OQU1FIiksdVA9ZnVuY3Rpb24oKXt9LGNQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kb2M9dCx0aGlzLnBsYXRmb3JtPWUsdGhpcy5jb29raWVOYW1lPW4sdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9cmV0dXJuIHQucHJvdG90eXBlLmdldFRva2VuPWZ1bmN0aW9uKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIHQhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1Mcyh0LHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPXQpLHRoaXMubGFzdFRva2VufSx0fSgpLGhQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudG9rZW5TZXJ2aWNlPXQsdGhpcy5oZWFkZXJOYW1lPWV9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQudXJsLnRvTG93ZXJDYXNlKCk7aWYoIkdFVCI9PT10Lm1ldGhvZHx8IkhFQUQiPT09dC5tZXRob2R8fG4uc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxuLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIGUuaGFuZGxlKHQpO3ZhciByPXRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuKCk7cmV0dXJuIG51bGw9PT1yfHx0LmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSl8fCh0PXQuY2xvbmUoe2hlYWRlcnM6dC5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUscil9KSksZS5oYW5kbGUodCl9LHR9KCksZlA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5iYWNrZW5kPXQsdGhpcy5pbmplY3Rvcj1lLHRoaXMuY2hhaW49bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10aGlzLmNoYWluKXt2YXIgZT10aGlzLmluamVjdG9yLmdldChlUCxbXSk7dGhpcy5jaGFpbj1lLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB0UCh0LGUpfSx0aGlzLmJhY2tlbmQpfXJldHVybiB0aGlzLmNoYWluLmhhbmRsZSh0KX0sdH0oKSxwUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuZGlzYWJsZT1mdW5jdGlvbigpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6aFAsdXNlQ2xhc3M6blB9XX19LHQud2l0aE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTpzUCx1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTpsUCx1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19LHR9KCksZFA9ZnVuY3Rpb24oKXt9LG1QPVVyKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNsaWdodHByb3h5Y29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJlbX0uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9Lndpa2lscC1hY2Nlc3MtY2FyZFtfbmdjb250ZW50LSVDT01QJV0sIC53aWtpbHAtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwfSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24geVAodCl7cmV0dXJuIERvKDAsW29vKDAsT2ssW1FjXSksKHQoKSgpLHlpKDEsMCxudWxsLG51bGwsMzUsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMiwwLG51bGwsbnVsbCwxOCwibWF0LWNhcmQiLFtbImNsYXNzIiwid2lraWxwLWFjY2Vzcy1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLElnLE9nKSksaW8oMyw0OTE1MixudWxsLDAsVGcsW10sbnVsbCxudWxsKSwodCgpKCkseWkoNCwwLG51bGwsMCwxNiwibWF0LWNhcmQtY29udGVudCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZC1jb250ZW50IG1hdC1jYXJkLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oNSwxNjM4NCxudWxsLDAsU2csW10sbnVsbCxudWxsKSwodCgpKCkseWkoNiwwLG51bGwsbnVsbCwxNCwiZGl2IixbWyJmeExheW91dCIsInJvdyJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJsZWZ0Il0sWyJmeExheW91dEdhcCIsIjAuNSUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oNyw3MzcyODAsbnVsbCwwLHdULFtpVCxkbixhVF0se2xheW91dDpbMCwibGF5b3V0Il0sbGF5b3V0WHM6WzEsImxheW91dFhzIl19LG51bGwpLGlvKDgsMTc4NTg1NixudWxsLDAseFQsW2lULGRuLFs2LHdUXSxVZSxXdSxhVF0se2dhcDpbMCwiZ2FwIl19LG51bGwpLGlvKDksNzM3MjgwLG51bGwsMCxFVCxbaVQsZG4sWzYsd1RdLGFUXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSx5aSgxMCwwLG51bGwsbnVsbCw3LCJpbnB1dCIsW1siY2xhc3MiLCJtYXQtaW5wdXQtZWxlbWVudCBtYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sIl0sWyJtYXRJbnB1dCIsIiJdLFsicGxhY2Vob2xkZXIiLCJQYWdlIHBhdGgiXV0sW1syLCJuZy11bnRvdWNoZWQiLG51bGxdLFsyLCJuZy10b3VjaGVkIixudWxsXSxbMiwibmctcHJpc3RpbmUiLG51bGxdLFsyLCJuZy1kaXJ0eSIsbnVsbF0sWzIsIm5nLXZhbGlkIixudWxsXSxbMiwibmctaW52YWxpZCIsbnVsbF0sWzIsIm5nLXBlbmRpbmciLG51bGxdLFsyLCJtYXQtaW5wdXQtc2VydmVyIixudWxsXSxbMSwiaWQiLDBdLFsxLCJwbGFjZWhvbGRlciIsMF0sWzgsImRpc2FibGVkIiwwXSxbOCwicmVxdWlyZWQiLDBdLFs4LCJyZWFkT25seSIsMF0sWzEsImFyaWEtZGVzY3JpYmVkYnkiLDBdLFsxLCJhcmlhLWludmFsaWQiLDBdLFsxLCJhcmlhLXJlcXVpcmVkIiwwXV0sW1tudWxsLCJuZ01vZGVsQ2hhbmdlIl0sW251bGwsImlucHV0Il0sW251bGwsImJsdXIiXSxbbnVsbCwiY29tcG9zaXRpb25zdGFydCJdLFtudWxsLCJjb21wb3NpdGlvbmVuZCJdLFtudWxsLCJmb2N1cyJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITAsaT10LmNvbXBvbmVudDtyZXR1cm4iaW5wdXQiPT09ZSYmKHI9ITEhPT1HaSh0LDEyKS5faGFuZGxlSW5wdXQobi50YXJnZXQudmFsdWUpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PUdpKHQsMTIpLm9uVG91Y2hlZCgpJiZyKSwiY29tcG9zaXRpb25zdGFydCI9PT1lJiYocj0hMSE9PUdpKHQsMTIpLl9jb21wb3NpdGlvblN0YXJ0KCkmJnIpLCJjb21wb3NpdGlvbmVuZCI9PT1lJiYocj0hMSE9PUdpKHQsMTIpLl9jb21wb3NpdGlvbkVuZChuLnRhcmdldC52YWx1ZSkmJnIpLCJibHVyIj09PWUmJihyPSExIT09R2kodCwxNykuX2ZvY3VzQ2hhbmdlZCghMSkmJnIpLCJmb2N1cyI9PT1lJiYocj0hMSE9PUdpKHQsMTcpLl9mb2N1c0NoYW5nZWQoITApJiZyKSwiaW5wdXQiPT09ZSYmKHI9ITEhPT1HaSh0LDE3KS5fb25JbnB1dCgpJiZyKSwibmdNb2RlbENoYW5nZSI9PT1lJiYocj0hMSE9PShpLmZpZWxkUGFnZVBhdGg9bikmJnIpLHJ9LG51bGwsbnVsbCkpLGFvKDYxNDQsbnVsbCxrVCxudWxsLFtOVF0pLGlvKDEyLDE2Mzg0LG51bGwsMCxLVCxbcG4sZG4sWzIsUVRdXSxudWxsLG51bGwpLGFvKDEwMjQsbnVsbCxHVCxmdW5jdGlvbih0KXtyZXR1cm5bdF19LFtLVF0pLGlvKDE0LDY3MTc0NCxudWxsLDAsTUEsW1s4LG51bGxdLFs4LG51bGxdLFs4LG51bGxdLFs2LEdUXV0se21vZGVsOlswLCJtb2RlbCJdfSx7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0pLGFvKDIwNDgsbnVsbCxKVCxudWxsLFtNQV0pLGlvKDE2LDE2Mzg0LG51bGwsMCxfQSxbWzQsSlRdXSxudWxsLG51bGwpLGlvKDE3LDk5OTQyNCxudWxsLDAsTlQsW2RuLHRsLFs2LEpUXSxbMixBQV0sWzIsTkFdLGxoLFs4LG51bGxdLFBULFVlXSx7cGxhY2Vob2xkZXI6WzAsInBsYWNlaG9sZGVyIl19LG51bGwpLCh0KCkoKSx5aSgxOCwwLG51bGwsbnVsbCwyLCJidXR0b24iLFtbIm1hdC1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQuZ29Ub0ZpbGxlZFBhZ2UoKSYmcikscn0sZ2QseWQpKSxpbygxOSwxODAyMjQsbnVsbCwwLFhoLFtkbix0bCxRaCxbMixkZF1dLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLDAsWyJHbyJdKSksKHQoKSgpLHlpKDIxLDAsbnVsbCxudWxsLDE1LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJ3aWtpbHAtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxJZyxPZykpLGlvKDIyLDQ5MTUyLG51bGwsMCxUZyxbXSxudWxsLG51bGwpLCh0KCkoKSx5aSgyMywwLG51bGwsMCw0LCJtYXQtY2FyZC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWNhcmQtaGVhZGVyIl1dLG51bGwsbnVsbCxudWxsLE5nLE1nKSksaW8oMjQsNDkxNTIsbnVsbCwwLEFnLFtdLG51bGwsbnVsbCksKHQoKSgpLHlpKDI1LDAsbnVsbCwxLDIsIm1hdC1jYXJkLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1jYXJkLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDI2LDE2Mzg0LG51bGwsMCxrZyxbXSxudWxsLG51bGwpLCh0KCkoKSxNbygyNyxudWxsLFsiICIsIiAiXSkpLCh0KCkoKSx5aSgyOCwwLG51bGwsMCw4LCJtYXQtY2FyZC1jb250ZW50IixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkLWNvbnRlbnQgbWF0LWNhcmQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpbygyOSwxNjM4NCxudWxsLDAsU2csW10sbnVsbCxudWxsKSwodCgpKCkseWkoMzAsMCxudWxsLG51bGwsNiwiZGl2IixbWyJmeExheW91dCIsImNvbHVtbiJdLFsiZnhMYXlvdXQueHMiLCJjb2x1bW4iXSxbImZ4TGF5b3V0QWxpZ24iLCJsZWZ0Il0sWyJmeExheW91dEdhcCIsIjAuNSUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oMzEsNzM3MjgwLG51bGwsMCx3VCxbaVQsZG4sYVRdLHtsYXlvdXQ6WzAsImxheW91dCJdLGxheW91dFhzOlsxLCJsYXlvdXRYcyJdfSxudWxsKSxpbygzMiwxNzg1ODU2LG51bGwsMCx4VCxbaVQsZG4sWzYsd1RdLFVlLFd1LGFUXSx7Z2FwOlswLCJnYXAiXX0sbnVsbCksaW8oMzMsNzM3MjgwLG51bGwsMCxFVCxbaVQsZG4sWzYsd1RdLGFUXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSx5aSgzNCwwLG51bGwsbnVsbCwyLCJkaXYiLFtbImlkIiwibGlnaHRwcm94eWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMzUsMCxudWxsLG51bGwsMSwiZGl2IixbXSxbWzgsImlubmVySFRNTCIsMV1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxJbygxMjgsMzYsbmV3IEFycmF5KDIpKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsNywwLCJyb3ciLCJjb2x1bW4iKSx0KGUsOCwwLCIwLjUlIiksdChlLDksMCwibGVmdCIpLHQoZSwxNCwwLG4uZmllbGRQYWdlUGF0aCksdChlLDE3LDAsIlBhZ2UgcGF0aCIpLHQoZSwzMSwwLCJjb2x1bW4iLCJjb2x1bW4iKSx0KGUsMzIsMCwiMC41JSIpLHQoZSwzMywwLCJsZWZ0Iil9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDEwLDEsW0dpKGUsMTYpLm5nQ2xhc3NVbnRvdWNoZWQsR2koZSwxNikubmdDbGFzc1RvdWNoZWQsR2koZSwxNikubmdDbGFzc1ByaXN0aW5lLEdpKGUsMTYpLm5nQ2xhc3NEaXJ0eSxHaShlLDE2KS5uZ0NsYXNzVmFsaWQsR2koZSwxNikubmdDbGFzc0ludmFsaWQsR2koZSwxNikubmdDbGFzc1BlbmRpbmcsR2koZSwxNykuX2lzU2VydmVyLEdpKGUsMTcpLmlkLEdpKGUsMTcpLnBsYWNlaG9sZGVyLEdpKGUsMTcpLmRpc2FibGVkLEdpKGUsMTcpLnJlcXVpcmVkLEdpKGUsMTcpLnJlYWRvbmx5LEdpKGUsMTcpLl9hcmlhRGVzY3JpYmVkYnl8fG51bGwsR2koZSwxNykuZXJyb3JTdGF0ZSxHaShlLDE3KS5yZXF1aXJlZC50b1N0cmluZygpXSksdChlLDE4LDAsR2koZSwxOSkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PUdpKGUsMTkpLl9hbmltYXRpb25Nb2RlKSx0KGUsMjcsMCxuLndpa2lQYWdlVGl0bGUpLHQoZSwzNSwwLFZyKGUsMzUsMCx0KGUsMzYsMCxHaShlLDApLG4ucmVtb3RlQ29udGVudCkpKX0pfXZhciBnUD1SaSgiYXBwLXdpa2ktbGlnaHRwcm94eSIsTEEsZnVuY3Rpb24odCl7cmV0dXJuIERvKDAsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDEsImFwcC13aWtpLWxpZ2h0cHJveHkiLFtdLG51bGwsbnVsbCxudWxsLHlQLG1QKSksaW8oMSw0MzA4OTkyLG51bGwsMCxMQSxbSkEsY3ksWnldLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksdlA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5maXJzdFBhbmVsT3Blbj0hMH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLmZpcnN0UGFuZWxPcGVuPSEwfSx0fSgpLF9QPVVyKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYlAodCl7cmV0dXJuIERvKDAsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDUwLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiT3VyIHRlYW0iXSkpLCh0KCkoKSx5aSgzLDAsbnVsbCxudWxsLDQ3LCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxJZyxPZykpLGlvKDQsNDkxNTIsbnVsbCwwLFRnLFtdLG51bGwsbnVsbCksKHQoKSgpLHlpKDUsMCxudWxsLDAsNDUsIm1hdC1hY2NvcmRpb24iLFtbImNsYXNzIiwibWF0LWFjY29yZGlvbiJdLFsibXVsdGkiLCJ0cnVlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDYsMTYzODQsbnVsbCwwLGZrLFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKHQoKSgpLHlpKDcsMTY3NzcyMTYsbnVsbCxudWxsLDIxLCJtYXQtZXhwYW5zaW9uLXBhbmVsIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwiXV0sW1syLCJtYXQtZXhwYW5kZWQiLG51bGxdLFsyLCJtYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmciLG51bGxdXSxudWxsLG51bGwseGssYmspKSxpbyg4LDE3NTMwODgsbnVsbCwxLGRrLFtbMyxma10sQ24sX2sseG5dLHtleHBhbmRlZDpbMCwiZXhwYW5kZWQiXX0sbnVsbCkseG8oMzM1NTQ0MzIwLDEse19sYXp5Q29udGVudDowfSksYW8oMjU2LG51bGwsZmssdm9pZCAwLFtdKSwodCgpKCkseWkoMTEsMCxudWxsLDAsOSwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiXSxbInJvbGUiLCJidXR0b24iXV0sW1sxLCJpZCIsMF0sWzEsInRhYmluZGV4IiwwXSxbMSwiYXJpYS1jb250cm9scyIsMF0sWzEsImFyaWEtZXhwYW5kZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbNDAsIkBleHBhbnNpb25IZWlnaHQiLDBdXSxbW251bGwsImNsaWNrIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PUdpKHQsMTIpLl90b2dnbGUoKSYmciksImtleWRvd24iPT09ZSYmKHI9ITEhPT1HaSh0LDEyKS5fa2V5ZG93bihuKSYmcikscn0sU2ssQ2spKSxpbygxMiwxODAyMjQsbnVsbCwwLG1rLFtkayxkbixRaCxDbl0sbnVsbCxudWxsKSxPbygxMyx7Y29sbGFwc2VkSGVpZ2h0OjAsZXhwYW5kZWRIZWlnaHQ6MX0pLE9vKDE0LHt2YWx1ZTowLHBhcmFtczoxfSksKHQoKSgpLHlpKDE1LDAsbnVsbCwwLDIsIm1hdC1wYW5lbC10aXRsZSIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpbygxNiwxNjM4NCxudWxsLDAsZ2ssW10sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsbnVsbCxbIiBKb2huIFNtaXRoICJdKSksKHQoKSgpLHlpKDE4LDAsbnVsbCwxLDIsIm1hdC1wYW5lbC1kZXNjcmlwdGlvbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpbygxOSwxNjM4NCxudWxsLDAseWssW10sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsbnVsbCxbIiBDRU8gb2YgTWVUaHJpWCAiXSkpLCh0KCkoKSx5aSgyMSwwLG51bGwsMSw3LCJkaXYiLFtbImZ4TGF5b3V0Iiwicm93Il0sWyJmeExheW91dC54cyIsImNvbHVtbiJdLFsiZnhMYXlvdXRBbGlnbiIsImxlZnQiXSxbImZ4TGF5b3V0R2FwIiwiMC41JSJdLFsiZnhMYXlvdXRXcmFwIiwiIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDIyLDczNzI4MCxudWxsLDAsd1QsW2lULGRuLGFUXSx7bGF5b3V0OlswLCJsYXlvdXQiXSxsYXlvdXRYczpbMSwibGF5b3V0WHMiXX0sbnVsbCksaW8oMjMsMTc4NTg1NixudWxsLDAseFQsW2lULGRuLFs2LHdUXSxVZSxXdSxhVF0se2dhcDpbMCwiZ2FwIl19LG51bGwpLGlvKDI0LDczNzI4MCxudWxsLDAsRVQsW2lULGRuLFs2LHdUXSxhVF0se2FsaWduOlswLCJhbGlnbiJdfSxudWxsKSwodCgpKCkseWkoMjUsMCxudWxsLG51bGwsMSwiZGl2IixbWyJzdHlsZSIsIm1heC13aWR0aDogMzAlO21heC1oZWlnaHQ6IDEwMCU7bWFyZ2luIDogMTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDI2LDAsbnVsbCxudWxsLDAsImltZyIsW1sic3JjIiwiYXNzZXRzL2Nlby5qcGciXSxbInN0eWxlIiwibWF4LXdpZHRoOiAxMDAlO21heC1oZWlnaHQ6IDEwMCUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDI3LDAsbnVsbCxudWxsLDEsImRpdiIsW1sic3R5bGUiLCJwYWRkaW5nOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIiBJIGFtIHRoZSBDRU8uIEkgcnVuIHRoaW5ncyB5b3Uga25vdyAhICJdKSksKHQoKSgpLHlpKDI5LDE2Nzc3MjE2LG51bGwsbnVsbCwyMSwibWF0LWV4cGFuc2lvbi1wYW5lbCIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsIl1dLFtbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbMiwibWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nIixudWxsXV0sbnVsbCxudWxsLHhrLGJrKSksaW8oMzAsMTc1MzA4OCxudWxsLDEsZGssW1szLGZrXSxDbixfayx4bl0sbnVsbCxudWxsKSx4bygzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSxhbygyNTYsbnVsbCxmayx2b2lkIDAsW10pLCh0KCkoKSx5aSgzMywwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09R2kodCwzNCkuX3RvZ2dsZSgpJiZyKSwia2V5ZG93biI9PT1lJiYocj0hMSE9PUdpKHQsMzQpLl9rZXlkb3duKG4pJiZyKSxyfSxTayxDaykpLGlvKDM0LDE4MDIyNCxudWxsLDAsbWssW2RrLGRuLFFoLENuXSxudWxsLG51bGwpLE9vKDM1LHtjb2xsYXBzZWRIZWlnaHQ6MCxleHBhbmRlZEhlaWdodDoxfSksT28oMzYse3ZhbHVlOjAscGFyYW1zOjF9KSwodCgpKCkseWkoMzcsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGlvKDM4LDE2Mzg0LG51bGwsMCxnayxbXSxudWxsLG51bGwpLCh0KCkoKSxNbygtMSxudWxsLFsiIEplYW4gRHVwb250ICJdKSksKHQoKSgpLHlpKDQwLDAsbnVsbCwxLDIsIm1hdC1wYW5lbC1kZXNjcmlwdGlvbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpbyg0MSwxNjM4NCxudWxsLDAseWssW10sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsbnVsbCxbIiBPdmVyd29ya2VkIHRlYW0gbWVtYmVyICJdKSksKHQoKSgpLHlpKDQzLDAsbnVsbCwxLDcsImRpdiIsW1siZnhMYXlvdXQiLCJyb3ciXSxbImZ4TGF5b3V0LnhzIiwiY29sdW1uIl0sWyJmeExheW91dEFsaWduIiwibGVmdCJdLFsiZnhMYXlvdXRHYXAiLCIwLjUlIl0sWyJmeExheW91dFdyYXAiLCIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oNDQsNzM3MjgwLG51bGwsMCx3VCxbaVQsZG4sYVRdLHtsYXlvdXQ6WzAsImxheW91dCJdLGxheW91dFhzOlsxLCJsYXlvdXRYcyJdfSxudWxsKSxpbyg0NSwxNzg1ODU2LG51bGwsMCx4VCxbaVQsZG4sWzYsd1RdLFVlLFd1LGFUXSx7Z2FwOlswLCJnYXAiXX0sbnVsbCksaW8oNDYsNzM3MjgwLG51bGwsMCxFVCxbaVQsZG4sWzYsd1RdLGFUXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLCh0KCkoKSx5aSg0NywwLG51bGwsbnVsbCwxLCJkaXYiLFtbInN0eWxlIiwibWF4LXdpZHRoOiAzMCU7bWF4LWhlaWdodDogMTAwJTttYXJnaW4gOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoNDgsMCxudWxsLG51bGwsMCwiaW1nIixbWyJzcmMiLCJhc3NldHMvdGlyZWQuanBnIl0sWyJzdHlsZSIsIm1heC13aWR0aDogMTAwJTttYXgtaGVpZ2h0OiAxMDAlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSg0OSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbInN0eWxlIiwicGFkZGluZzogMTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyIgSHVoLCB3aGF0J3MgSUdFTSA/ICJdKSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDYsMCwidHJ1ZSIpLHQoZSw4LDAsbi5maXJzdFBhbmVsT3BlbiksdChlLDIyLDAsInJvdyIsImNvbHVtbiIpLHQoZSwyMywwLCIwLjUlIiksdChlLDI0LDAsImxlZnQiKSx0KGUsNDQsMCwicm93IiwiY29sdW1uIiksdChlLDQ1LDAsIjAuNSUiKSx0KGUsNDYsMCwibGVmdCIpfSxmdW5jdGlvbih0LGUpe3QoZSw3LDAsR2koZSw4KS5leHBhbmRlZCxHaShlLDgpLl9oYXNTcGFjaW5nKCkpLHQoZSwxMSwwLEdpKGUsMTIpLnBhbmVsLl9oZWFkZXJJZCxHaShlLDEyKS5wYW5lbC5kaXNhYmxlZD8tMTowLEdpKGUsMTIpLl9nZXRQYW5lbElkKCksR2koZSwxMikuX2lzRXhwYW5kZWQoKSxHaShlLDEyKS5wYW5lbC5kaXNhYmxlZCxHaShlLDEyKS5faXNFeHBhbmRlZCgpLHQoZSwxNCwwLEdpKGUsMTIpLl9nZXRFeHBhbmRlZFN0YXRlKCksdChlLDEzLDAsR2koZSwxMikuY29sbGFwc2VkSGVpZ2h0LEdpKGUsMTIpLmV4cGFuZGVkSGVpZ2h0KSkpLHQoZSwyOSwwLEdpKGUsMzApLmV4cGFuZGVkLEdpKGUsMzApLl9oYXNTcGFjaW5nKCkpLHQoZSwzMywwLEdpKGUsMzQpLnBhbmVsLl9oZWFkZXJJZCxHaShlLDM0KS5wYW5lbC5kaXNhYmxlZD8tMTowLEdpKGUsMzQpLl9nZXRQYW5lbElkKCksR2koZSwzNCkuX2lzRXhwYW5kZWQoKSxHaShlLDM0KS5wYW5lbC5kaXNhYmxlZCxHaShlLDM0KS5faXNFeHBhbmRlZCgpLHQoZSwzNiwwLEdpKGUsMzQpLl9nZXRFeHBhbmRlZFN0YXRlKCksdChlLDM1LDAsR2koZSwzNCkuY29sbGFwc2VkSGVpZ2h0LEdpKGUsMzQpLmV4cGFuZGVkSGVpZ2h0KSkpfSl9dmFyIHdQPVJpKCJhcHAtdGVhbS1yb3N0ZXIiLHZQLGZ1bmN0aW9uKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwxLCJhcHAtdGVhbS1yb3N0ZXIiLFtdLG51bGwsbnVsbCxudWxsLGJQLF9QKSksaW8oMSwxMTQ2ODgsbnVsbCwwLHZQLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSkseFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxDUD1Vcih7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIEVQKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiUHJvamVjdCBkZXRhaWxzIl0pKSwodCgpKCkseWkoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxJZyxPZykpLGlvKDQsNDkxNTIsbnVsbCwwLFRnLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIFNQPVJpKCJhcHAtcHJvamVjdC1kZXRhaWxzIix4UCxmdW5jdGlvbih0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsMSwiYXBwLXByb2plY3QtZGV0YWlscyIsW10sbnVsbCxudWxsLG51bGwsRVAsQ1ApKSxpbygxLDExNDY4OCxudWxsLDAseFAsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxrUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLFRQPVVyKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gQVAodCl7cmV0dXJuIERvKDAsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyJCaW9sb2d5Il0pKSwodCgpKCkseWkoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxJZyxPZykpLGlvKDQsNDkxNTIsbnVsbCwwLFRnLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIFBQPVJpKCJhcHAtYmlvbG9neS1zZWN0aW9uIixrUCxmdW5jdGlvbih0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsMSwiYXBwLWJpb2xvZ3ktc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwsQVAsVFApKSxpbygxLDExNDY4OCxudWxsLDAsa1AsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxPUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSx0fSgpLElQPVVyKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTVAodCl7cmV0dXJuIERvKDAsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyJNb2RlbGluZyAmIFNvZnR3YXJlIl0pKSwodCgpKCkseWkoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxJZyxPZykpLGlvKDQsNDkxNTIsbnVsbCwwLFRnLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIE5QPVJpKCJhcHAtY29tcHV0aW5nLXNlY3Rpb24iLE9QLGZ1bmN0aW9uKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwxLCJhcHAtY29tcHV0aW5nLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLE1QLElQKSksaW8oMSwxMTQ2ODgsbnVsbCwwLE9QLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksUlA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sdH0oKSxEUD1Vcih7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIExQKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiSHVtYW4gUHJhY3RpY2VzIl0pKSwodCgpKCkseWkoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxJZyxPZykpLGlvKDQsNDkxNTIsbnVsbCwwLFRnLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIGpQPVJpKCJhcHAtaHVtYW4tcHJhY3RpY2Utc2VjdGlvbiIsUlAsZnVuY3Rpb24odCl7cmV0dXJuIERvKDAsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDEsImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxMUCxEUCkpLGlvKDEsMTE0Njg4LG51bGwsMCxSUCxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLEZQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LHR9KCksVlA9VXIoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBCUCh0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIlNwb25zb3JzICYgQXR0cmlidXRpb24iXSkpLCh0KCkoKSx5aSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLElnLE9nKSksaW8oNCw0OTE1MixudWxsLDAsVGcsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgelA9UmkoImFwcC1zdXBwb3J0LXNlY3Rpb24iLEZQLGZ1bmN0aW9uKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwxLCJhcHAtc3VwcG9ydC1zZWN0aW9uIixbXSxudWxsLG51bGwsbnVsbCxCUCxWUCkpLGlvKDEsMTE0Njg4LG51bGwsMCxGUCxbXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxudWxsKX0se30se30sW10pLFVQPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9wbGF0Zm9ybT1uLGkuX2RvY3VtZW50PXIsaX1yZXR1cm4gaShlLHQpLGUucHJvdG90eXBlLm5nQWZ0ZXJWaWV3SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7bm4oKSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKX0pKX0sZS5wcm90b3R5cGUuX2NoZWNrVG9vbGJhck1peGVkTW9kZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3Rvb2xiYXJSb3dzLmxlbmd0aCYmW10uc2xpY2UuY2FsbCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jbGFzc0xpc3QmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtdG9vbGJhci1yb3ciKSl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGUhPT0odC5fZG9jdW1lbnQ/dC5fZG9jdW1lbnQuQ09NTUVOVF9OT0RFOjgpfSkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29udGVudC50cmltKCl9KSYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiTWF0VG9vbGJhcjogQXR0ZW1wdGluZyB0byBjb21iaW5lIGRpZmZlcmVudCB0b29sYmFyIG1vZGVzLiBFaXRoZXIgc3BlY2lmeSBtdWx0aXBsZSBgPG1hdC10b29sYmFyLXJvdz5gIGVsZW1lbnRzIGV4cGxpY2l0bHkgb3IganVzdCBwbGFjZSBjb250ZW50IGluc2lkZSBvZiBhIGA8bWF0LXRvb2xiYXI+YCBmb3IgYSBzaW5nbGUgcm93LiIpfSgpfSxlfShhaChmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSksSFA9ZnVuY3Rpb24oKXt9LHFQPVVyKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC10b29sYmFye291dGxpbmU6c29saWQgMXB4fX0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIEdQKHQpe3JldHVybiBEbygyLFtUbyhudWxsLDApLFRvKG51bGwsMSldLG51bGwsbnVsbCl9dmFyIFdQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNhbGxiYWNrPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IFFQKHQsdGhpcy5jYWxsYmFjaykpfSx0fSgpLFFQPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5hZGQobmV3IHcobikpLHJ9cmV0dXJuIGkoZSx0KSxlfShFKTtmdW5jdGlvbiBLUCh0KXtyZXR1cm4gRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGljb24gd2l0aCB0aGUgbmFtZSAiJyt0KyciJyl9ZnVuY3Rpb24gWlAodCl7cmV0dXJuIEVycm9yKCJUaGUgVVJMIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgYSByZXNvdXJjZSBVUkwgdmlhIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBVUkwgd2FzIFwiIit0KyciLicpfWZ1bmN0aW9uIFlQKHQpe3JldHVybiBFcnJvcigiVGhlIGxpdGVyYWwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBzYWZlIEhUTUwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIGxpdGVyYWwgd2FzIFwiIit0KyciLicpfXZhciBYUD1mdW5jdGlvbih0KXt0Lm5vZGVOYW1lP3RoaXMuc3ZnRWxlbWVudD10OnRoaXMudXJsPXR9LCRQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5faHR0cENsaWVudD10LHRoaXMuX3Nhbml0aXplcj1lLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPSJtYXRlcmlhbC1pY29ucyIsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3ZnSWNvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uTGl0ZXJhbD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCxlKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3IFhQKG4pKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKENyLkhUTUwsbik7aWYoIXIpdGhyb3cgWVAobik7dmFyIGk9dGhpcy5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24ocik7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcodCxlLG5ldyBYUChpKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBYUChlKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoQ3IuSFRNTCxlKTtpZighbil0aHJvdyBZUChlKTt2YXIgcj10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhuKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBYUChyKSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyRm9udENsYXNzQWxpYXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dCksdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLnNldCh0LGUpLHRoaXN9LHQucHJvdG90eXBlLmNsYXNzTmFtZUZvckZvbnRBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLmdldCh0KXx8dH0sdC5wcm90b3R5cGUuc2V0RGVmYXVsdEZvbnRTZXRDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz10LHRoaXN9LHQucHJvdG90eXBlLmdldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzc30sdC5wcm90b3R5cGUuZ2V0U3ZnSWNvbkZyb21Vcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShDci5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgWlAodCk7dmFyIHI9dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5nZXQobik7cmV0dXJuIHI/ZGwoSlAocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgWFAodCkpLnBpcGUoamgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhY2hlZEljb25zQnlVcmwuc2V0KG4sdCl9KSxxKGZ1bmN0aW9uKHQpe3JldHVybiBKUCh0KX0pKX0sdC5wcm90b3R5cGUuZ2V0TmFtZWRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciBuPXRPKGUsdCkscj10aGlzLl9zdmdJY29uQ29uZmlncy5nZXQobik7aWYocilyZXR1cm4gdGhpcy5fZ2V0U3ZnRnJvbUNvbmZpZyhyKTt2YXIgaT10aGlzLl9pY29uU2V0Q29uZmlncy5nZXQoZSk7cmV0dXJuIGk/dGhpcy5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzKHQsaSk6Y1QoS1AobikpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdFbGVtZW50P2RsKEpQKHQuc3ZnRWxlbWVudCkpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyh0KS5waXBlKGpoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnN2Z0VsZW1lbnQ9ZX0pLHEoZnVuY3Rpb24odCl7cmV0dXJuIEpQKHQpfSkpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7cmV0dXJuIHI/ZGwocik6RFQoZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuc3ZnRWxlbWVudH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUoRmQoZnVuY3Rpb24oZSl7dmFyIHI9bi5fc2FuaXRpemVyLnNhbml0aXplKENyLlJFU09VUkNFX1VSTCx0LnVybCk7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxvYWRpbmcgaWNvbiBzZXQgVVJMOiAiK3IrIiBmYWlsZWQ6ICIrZS5tZXNzYWdlKSxkbChudWxsKX0pKX0pKS5waXBlKHEoZnVuY3Rpb24oKXt2YXIgcj1uLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldCh0LGUpO2lmKCFyKXRocm93IEtQKHQpO3JldHVybiByfSkpfSx0LnByb3RvdHlwZS5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXTtpZihyLnN2Z0VsZW1lbnQpe3ZhciBpPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChyLnN2Z0VsZW1lbnQsdCk7aWYoaSlyZXR1cm4gaX19cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvbkZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUocShmdW5jdGlvbih0KXtyZXR1cm4gZS5fY3JlYXRlU3ZnRWxlbWVudEZvclNpbmdsZUljb24odCl9KSl9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdC5zdmdFbGVtZW50P2RsKHQuc3ZnRWxlbWVudCk6dGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUocShmdW5jdGlvbihuKXtyZXR1cm4gdC5zdmdFbGVtZW50fHwodC5zdmdFbGVtZW50PWUuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKG4pKSx0LnN2Z0VsZW1lbnR9KSl9LHQucHJvdG90eXBlLl9jcmVhdGVTdmdFbGVtZW50Rm9yU2luZ2xlSWNvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyh0KTtyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhlKSxlfSx0LnByb3RvdHlwZS5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5xdWVyeVNlbGVjdG9yKCIjIitlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgcj1uLmNsb25lTm9kZSghMCk7aWYoci5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMocik7aWYoInN5bWJvbCI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KHIpKTt2YXIgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZygiPHN2Zz48L3N2Zz4iKTtyZXR1cm4gaS5hcHBlbmRDaGlsZChyKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGkpfSx0LnByb3RvdHlwZS5fc3ZnRWxlbWVudEZyb21TdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7ZS5pbm5lckhUTUw9dDt2YXIgbj1lLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFuKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIG59LHQucHJvdG90eXBlLl90b1N2Z0VsZW1lbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpLG49MDtuPHQuY2hpbGROb2Rlcy5sZW5ndGg7bisrKXQuY2hpbGROb2Rlc1tuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmZS5hcHBlbmRDaGlsZCh0LmNoaWxkTm9kZXNbbl0uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGV9LHQucHJvdG90eXBlLl9zZXRTdmdBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZml0IiwiIiksdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiksdC5zZXRBdHRyaWJ1dGUoImZvY3VzYWJsZSIsImZhbHNlIiksdH0sdC5wcm90b3R5cGUuX2ZldGNoVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuX2h0dHBDbGllbnQpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIEh0dHBDbGllbnQgcHJvdmlkZXIgZm9yIHVzZSB3aXRoIEFuZ3VsYXIgTWF0ZXJpYWwgaWNvbnMuIFBsZWFzZSBpbmNsdWRlIHRoZSBIdHRwQ2xpZW50TW9kdWxlIGZyb20gQGFuZ3VsYXIvY29tbW9uL2h0dHAgaW4geW91ciBhcHAgaW1wb3J0cy4iKTtpZihudWxsPT10KXRocm93IEVycm9yKCdDYW5ub3QgZmV0Y2ggaWNvbiBmcm9tIFVSTCAiJyt0KyciLicpO3ZhciBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShDci5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgWlAodCk7dmFyIHI9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KG4pO2lmKHIpcmV0dXJuIHI7dmFyIGksbz10aGlzLl9odHRwQ2xpZW50LmdldChuLHtyZXNwb25zZVR5cGU6InRleHQifSkucGlwZSgoaT1mdW5jdGlvbigpe3JldHVybiBlLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUobil9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IFdQKGkpKX0pLHB0KCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQobixvKSxvfSx0LnByb3RvdHlwZS5fYWRkU3ZnSWNvbkNvbmZpZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldCh0Tyh0LGUpLG4pLHRoaXN9LHQucHJvdG90eXBlLl9hZGRTdmdJY29uU2V0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KHQpO3JldHVybiBuP24ucHVzaChlKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQodCxbZV0pLHRoaXN9LHQubmdJbmplY3RhYmxlRGVmPWR0KHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KGVlKEpBLDgpLGVlKFFjKSxlZShXcyw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIEpQKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gdE8odCxlKXtyZXR1cm4gdCsiOiIrZX12YXIgZU89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX2ljb25SZWdpc3RyeT1uLGkuX2lubGluZT0hMSxyfHxlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpfXJldHVybiBpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmxpbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5saW5lfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faW5saW5lPWdsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udFNldCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250U2V0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udFNldD10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZm9udEljb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udEljb259LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb250SWNvbj10aGlzLl9jbGVhbnVwRm9udFZhbHVlKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zcGxpdEljb25OYW1lPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVyblsiIiwiIl07dmFyIGU9dC5zcGxpdCgiOiIpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixlWzBdXTtjYXNlIDI6cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcignSW52YWxpZCBpY29uIG5hbWU6ICInK3QrJyInKX19LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodC5zdmdJY29uKWlmKHRoaXMuc3ZnSWNvbil7dmFyIG49dGhpcy5fc3BsaXRJY29uTmFtZSh0aGlzLnN2Z0ljb24pO3RoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24oblsxXSxuWzBdKS5waXBlKGl1KDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN2Z0VsZW1lbnQodCl9LGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLmxvZygiRXJyb3IgcmV0cmlldmluZyBpY29uOiAiK3QubWVzc2FnZSl9KX1lbHNlIHRoaXMuX2NsZWFyU3ZnRWxlbWVudCgpO3RoaXMuX3VzaW5nRm9udEljb24oKSYmdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fdXNpbmdGb250SWNvbigpJiZ0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX0sZS5wcm90b3R5cGUuX3VzaW5nRm9udEljb249ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zdmdJY29ufSxlLnByb3RvdHlwZS5fc2V0U3ZnRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9LGUucHJvdG90eXBlLl9jbGVhclN2Z0VsZW1lbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dC5jaGlsZE5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl0LnJlbW92ZUNoaWxkKHQuY2hpbGROb2Rlc1tuXSl9LGUucHJvdG90eXBlLl91cGRhdGVGb250SWNvbkNsYXNzZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl91c2luZ0ZvbnRJY29uKCkpe3ZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKTtlIT10aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiZ0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MpLGUmJnQuY2xhc3NMaXN0LmFkZChlKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1lKSx0aGlzLmZvbnRJY29uIT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJih0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MpLHRoaXMuZm9udEljb24mJnQuY2xhc3NMaXN0LmFkZCh0aGlzLmZvbnRJY29uKSx0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3M9dGhpcy5mb250SWNvbil9fSxlLnByb3RvdHlwZS5fY2xlYW51cEZvbnRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC50cmltKCkuc3BsaXQoIiAiKVswXTp0fSxlfShhaChmdW5jdGlvbih0KXt0aGlzLl9lbGVtZW50UmVmPXR9KSksbk89ZnVuY3Rpb24oKXt9LHJPPVVyKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1pY29ue2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4fS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGRhdGE6e319KTtmdW5jdGlvbiBpTyh0KXtyZXR1cm4gRG8oMixbVG8obnVsbCwwKV0sbnVsbCxudWxsKX1mdW5jdGlvbiBvTyh0KXt0aHJvdyBFcnJvcigiQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiIrdCsiXCInIil9dmFyIGFPPW5ldyBtdCgiTUFUX0RSQVdFUl9ERUZBVUxUX0FVVE9TSVpFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiExfX0pLHNPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fY29udGFpbmVyPWV9cmV0dXJuIHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29udGFpbmVyLl9jb250ZW50TWFyZ2luQ2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXt0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSx0fSgpLGxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyl7dmFyIGE9dGhpczt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fZm9jdXNUcmFwRmFjdG9yeT1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1uLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fbmdab25lPWksdGhpcy5fZG9jPW8sdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQ9bnVsbCx0aGlzLl9lbmFibGVBbmltYXRpb25zPSExLHRoaXMuX3Bvc2l0aW9uPSJzdGFydCIsdGhpcy5fbW9kZT0ib3ZlciIsdGhpcy5fZGlzYWJsZUNsb3NlPSExLHRoaXMuX2F1dG9Gb2N1cz0hMCx0aGlzLl9hbmltYXRpb25TdGFydGVkPW5ldyB6ZSx0aGlzLl9hbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IHplKCEwKSx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkPW5ldyB6ZSx0aGlzLl9tb2RlQ2hhbmdlZD1uZXcgaXQsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXt0PyhhLl9kb2MmJihhLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1hLl9kb2MuYWN0aXZlRWxlbWVudCksYS5faXNGb2N1c1RyYXBFbmFibGVkJiZhLl9mb2N1c1RyYXAmJmEuX3RyYXBGb2N1cygpKTphLl9yZXN0b3JlRm9jdXMoKX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe1ZsKGEuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwia2V5ZG93biIpLnBpcGUoWWwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5Q29kZT09PUZsJiYhYS5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBhLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7YS5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1nbCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9Gb2N1cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRm9jdXN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvRm9jdXM9Z2wodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfb3BlbmVkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoWWwoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxxKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkU3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKFlsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZSYmMD09PXQudG9TdGF0ZS5pbmRleE9mKCJvcGVuIil9KSxxKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2Nsb3NlZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZENoYW5nZS5waXBlKFlsKGZ1bmN0aW9uKHQpe3JldHVybiF0fSkscShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNsb3NlZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShZbChmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJiJ2b2lkIj09PXQudG9TdGF0ZX0pLHEoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNGb2N1c1RyYXBFbmFibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkJiYic2lkZSIhPT10aGlzLm1vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3RyYXBGb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5hdXRvRm9jdXMmJnRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCkudGhlbihmdW5jdGlvbihlKXtlfHwiZnVuY3Rpb24iIT10eXBlb2YgdC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzfHx0Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfSx0LnByb3RvdHlwZS5fcmVzdG9yZUZvY3VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvRm9jdXMpe3ZhciB0PXRoaXMuX2RvYyYmdGhpcy5fZG9jLmFjdGl2ZUVsZW1lbnQ7dCYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHQpJiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQsdGhpcy5fb3BlbmVkVmlhKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpKSx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1udWxsLHRoaXMuX29wZW5lZFZpYT1udWxsfX0sdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCksdGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkfSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudENoZWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9lbmFibGVBbmltYXRpb25zPSEwKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXAmJnRoaXMuX2ZvY3VzVHJhcC5kZXN0cm95KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3BlbmVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29wZW5lZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudG9nZ2xlKGdsKHQpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRvZ2dsZSghMCx0KX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2dnbGUoITEpfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT10JiYodD0hdGhpcy5vcGVuZWQpLHZvaWQgMD09PWUmJihlPSJwcm9ncmFtIiksdGhpcy5fb3BlbmVkPXQsdD8odGhpcy5fYW5pbWF0aW9uU3RhdGU9dGhpcy5fZW5hYmxlQW5pbWF0aW9ucz8ib3BlbiI6Im9wZW4taW5zdGFudCIsdGhpcy5fb3BlbmVkVmlhPWUpOih0aGlzLl9hbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5fcmVzdG9yZUZvY3VzKCkpLHRoaXMuX2ZvY3VzVHJhcCYmKHRoaXMuX2ZvY3VzVHJhcC5lbmFibGVkPXRoaXMuX2lzRm9jdXNUcmFwRW5hYmxlZCksbmV3IFByb21pc2UoZnVuY3Rpb24odCl7bi5vcGVuZWRDaGFuZ2UucGlwZShpdSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3JldHVybiB0KGU/Im9wZW4iOiJjbG9zZSIpfSl9KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5lbWl0KHQpfSx0LnByb3RvdHlwZS5fb25BbmltYXRpb25FbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5mcm9tU3RhdGUsbj10LnRvU3RhdGU7KDA9PT1uLmluZGV4T2YoIm9wZW4iKSYmInZvaWQiPT09ZXx8InZvaWQiPT09biYmMD09PWUuaW5kZXhPZigib3BlbiIpKSYmdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLl9vcGVuZWQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93aWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLHVPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyl7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciBhPXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1vLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgemUsdGhpcy5fZGVzdHJveWVkPW5ldyBpdCx0aGlzLl9kb0NoZWNrU3ViamVjdD1uZXcgaXQsdGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6bnVsbCxyaWdodDpudWxsfSx0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcz1uZXcgaXQsdCYmdC5jaGFuZ2UucGlwZShsbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXthLl92YWxpZGF0ZURyYXdlcnMoKSxhLl91cGRhdGVDb250ZW50TWFyZ2lucygpfSksdGhpcy5fYXV0b3NpemU9aX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhdXRvc2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvc2l6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F1dG9zaXplPWdsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzQmFja2Ryb3AiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fYmFja2Ryb3BPdmVycmlkZT8hdGhpcy5fc3RhcnR8fCJzaWRlIiE9PXRoaXMuX3N0YXJ0Lm1vZGV8fCF0aGlzLl9lbmR8fCJzaWRlIiE9PXRoaXMuX2VuZC5tb2RlOnRoaXMuX2JhY2tkcm9wT3ZlcnJpZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9iYWNrZHJvcE92ZXJyaWRlPW51bGw9PXQ/bnVsbDpnbCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXM7dGhpcy5fZHJhd2Vycy5jaGFuZ2VzLnBpcGUoeWwobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3ZhbGlkYXRlRHJhd2VycygpLGUuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtlLl93YXRjaERyYXdlclRvZ2dsZSh0KSxlLl93YXRjaERyYXdlclBvc2l0aW9uKHQpLGUuX3dhdGNoRHJhd2VyTW9kZSh0KX0pLCghZS5fZHJhd2Vycy5sZW5ndGh8fGUuX2lzRHJhd2VyT3BlbihlLl9zdGFydCl8fGUuX2lzRHJhd2VyT3BlbihlLl9lbmQpKSYmZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RvQ2hlY2tTdWJqZWN0LnBpcGUoKDEwLHZvaWQgMD09PXQmJih0PUhsKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBSaCgxMCx0KSl9KSxsbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKX0pfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2RvQ2hlY2tTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX0sdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3RoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGVuKCl9KX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9kcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xvc2UoKX0pfSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2F1dG9zaXplJiZ0aGlzLl9pc1B1c2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5fZG9DaGVja1N1YmplY3QubmV4dCgpfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlclRvZ2dsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShsbCh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpLFlsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb21TdGF0ZSE9PXQudG9TdGF0ZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Im9wZW4taW5zdGFudCIhPT10LnRvU3RhdGUmJiJOb29wQW5pbWF0aW9ucyIhPT1lLl9hbmltYXRpb25Nb2RlJiZlLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci10cmFuc2l0aW9uIiksZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLCJzaWRlIiE9PXQubW9kZSYmdC5vcGVuZWRDaGFuZ2UucGlwZShsbCh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2V0Q29udGFpbmVyQ2xhc3ModC5vcGVuZWQpfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlclBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdC5vblBvc2l0aW9uQ2hhbmdlZC5waXBlKGxsKHRoaXMuX2RyYXdlcnMuY2hhbmdlcykpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoaXUoMSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3ZhbGlkYXRlRHJhd2VycygpfSl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyTW9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQuX21vZGVDaGFuZ2VkLnBpcGUobGwodHQodGhpcy5fZHJhd2Vycy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl91cGRhdGVDb250ZW50TWFyZ2lucygpLGUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9LHQucHJvdG90eXBlLl9zZXRDb250YWluZXJDbGFzcz1mdW5jdGlvbih0KXt0P3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtZHJhd2VyLW9wZW5lZCIpOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtZHJhd2VyLW9wZW5lZCIpfSx0LnByb3RvdHlwZS5fdmFsaWRhdGVEcmF3ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGFydD10aGlzLl9lbmQ9bnVsbCx0aGlzLl9kcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7ImVuZCI9PWUucG9zaXRpb24/KG51bGwhPXQuX2VuZCYmb08oImVuZCIpLHQuX2VuZD1lKToobnVsbCE9dC5fc3RhcnQmJm9PKCJzdGFydCIpLHQuX3N0YXJ0PWUpfSksdGhpcy5fcmlnaHQ9dGhpcy5fbGVmdD1udWxsLHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/KHRoaXMuX2xlZnQ9dGhpcy5fZW5kLHRoaXMuX3JpZ2h0PXRoaXMuX3N0YXJ0KToodGhpcy5fbGVmdD10aGlzLl9zdGFydCx0aGlzLl9yaWdodD10aGlzLl9lbmQpfSx0LnByb3RvdHlwZS5faXNQdXNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX3N0YXJ0KSYmIm92ZXIiIT10aGlzLl9zdGFydC5tb2RlfHx0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fZW5kKSYmIm92ZXIiIT10aGlzLl9lbmQubW9kZX0sdC5wcm90b3R5cGUuX29uQmFja2Ryb3BDbGlja2VkPWZ1bmN0aW9uKCl7dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoKSx0aGlzLl9jbG9zZU1vZGFsRHJhd2VyKCl9LHQucHJvdG90eXBlLl9jbG9zZU1vZGFsRHJhd2VyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztbdGhpcy5fc3RhcnQsdGhpcy5fZW5kXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiFlLmRpc2FibGVDbG9zZSYmdC5fY2FuSGF2ZUJhY2tkcm9wKGUpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLl9pc1Nob3dpbmdCYWNrZHJvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fc3RhcnQpfHx0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fZW5kKSYmdGhpcy5fY2FuSGF2ZUJhY2tkcm9wKHRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9jYW5IYXZlQmFja2Ryb3A9ZnVuY3Rpb24odCl7cmV0dXJuInNpZGUiIT09dC5tb2RlfHwhIXRoaXMuX2JhY2tkcm9wT3ZlcnJpZGV9LHQucHJvdG90eXBlLl9pc0RyYXdlck9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJnQub3BlbmVkfSx0LnByb3RvdHlwZS5fdXBkYXRlQ29udGVudE1hcmdpbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9MCxuPTA7aWYodGhpcy5fbGVmdCYmdGhpcy5fbGVmdC5vcGVuZWQmJigic2lkZSI9PXRoaXMuX2xlZnQubW9kZT9lKz10aGlzLl9sZWZ0Ll93aWR0aDoicHVzaCI9PXRoaXMuX2xlZnQubW9kZSYmKGUrPXI9dGhpcy5fbGVmdC5fd2lkdGgsbi09cikpLHRoaXMuX3JpZ2h0JiZ0aGlzLl9yaWdodC5vcGVuZWQpaWYoInNpZGUiPT10aGlzLl9yaWdodC5tb2RlKW4rPXRoaXMuX3JpZ2h0Ll93aWR0aDtlbHNlIGlmKCJwdXNoIj09dGhpcy5fcmlnaHQubW9kZSl7dmFyIHI7bis9cj10aGlzLl9yaWdodC5fd2lkdGgsZS09cn1lPT09dGhpcy5fY29udGVudE1hcmdpbnMubGVmdCYmbj09PXRoaXMuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0fHwodGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6ZSxyaWdodDpufSx0aGlzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbnRlbnRNYXJnaW5DaGFuZ2VzLm5leHQodC5fY29udGVudE1hcmdpbnMpfSkpfSx0fSgpLGNPPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxuKXx8dGhpc31yZXR1cm4gaShlLHQpLGV9KHNPKSxoTz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9maXhlZEluVmlld3BvcnQ9ITEsZS5fZml4ZWRUb3BHYXA9MCxlLl9maXhlZEJvdHRvbUdhcD0wLGV9cmV0dXJuIGkoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkSW5WaWV3cG9ydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEluVmlld3BvcnR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZEluVmlld3BvcnQ9Z2wodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZFRvcEdhcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZFRvcEdhcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkVG9wR2FwPXZsKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRCb3R0b21HYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRCb3R0b21HYXB9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZEJvdHRvbUdhcD12bCh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShsTyksZk89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkoZSx0KSxlfSh1TykscE89ZnVuY3Rpb24oKXt9LGRPPVVyKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiBtTyh0KXtyZXR1cm4gRG8oMixbVG8obnVsbCwwKV0sbnVsbCxudWxsKX12YXIgeU89VXIoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InRyYW5zZm9ybSIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToib3Blbiwgb3Blbi1pbnN0YW50IixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMCwgMCwgMCkiLHZpc2liaWxpdHk6InZpc2libGUifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToidm9pZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnsiYm94LXNoYWRvdyI6Im5vbmUiLHZpc2liaWxpdHk6ImhpZGRlbiJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJ2b2lkID0+IG9wZW4taW5zdGFudCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMG1zIn0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InZvaWQgPD0+IG9wZW4sIG9wZW4taW5zdGFudCA9PiB2b2lkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiI0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSJ9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiBnTyh0KXtyZXR1cm4gRG8oMixbVG8obnVsbCwwKV0sbnVsbCxudWxsKX12YXIgdk89VXIoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRyYXdlci1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl17dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1kcmF3ZXItY29udGFpbmVyW2Z1bGxzY3JlZW5dLm1hdC1kcmF3ZXItb3BlbmVke292ZXJmbG93OmhpZGRlbn0ubWF0LWRyYXdlci1jb250YWluZXIubWF0LWRyYXdlci1jb250YWluZXItZXhwbGljaXQtYmFja2Ryb3AgLm1hdC1kcmF3ZXItc2lkZXt6LWluZGV4OjN9Lm1hdC1kcmF3ZXItYmFja2Ryb3B7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt6LWluZGV4OjM7dmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bnt2aXNpYmlsaXR5OnZpc2libGV9Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1iYWNrZHJvcHt0cmFuc2l0aW9uLWR1cmF0aW9uOi40czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3IsdmlzaWJpbGl0eX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci1iYWNrZHJvcHtvcGFjaXR5Oi41fX0ubWF0LWRyYXdlci1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC1kcmF3ZXItdHJhbnNpdGlvbiAubWF0LWRyYXdlci1jb250ZW50e3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtLG1hcmdpbi1sZWZ0LG1hcmdpbi1yaWdodH0ubWF0LWRyYXdlcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjQ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt6LWluZGV4OjM7b3V0bGluZTowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdy15OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1kcmF3ZXIsW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1yaWdodDpzb2xpZCAxcHggY3VycmVudENvbG9yfX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZCxbZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IGN1cnJlbnRDb2xvcjtib3JkZXItcmlnaHQ6bm9uZX19Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1zaWRle3otaW5kZXg6Mn0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLWVuZHtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2Vye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCl9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke2xlZnQ6MDtyaWdodDphdXRvO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXNpZGVuYXYtZml4ZWR7cG9zaXRpb246Zml4ZWR9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIF9PKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwwLCJkaXYiLFtbImNsYXNzIiwibWF0LWRyYXdlci1iYWNrZHJvcCJdXSxbWzIsIm1hdC1kcmF3ZXItc2hvd24iLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LmNvbXBvbmVudC5fb25CYWNrZHJvcENsaWNrZWQoKSYmcikscn0sbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9pc1Nob3dpbmdCYWNrZHJvcCgpKX0pfWZ1bmN0aW9uIGJPKHQpe3JldHVybiBEbygwLFsodCgpKCkseWkoMCwwLG51bGwsbnVsbCwzLCJtYXQtc2lkZW5hdi1jb250ZW50IixbWyJjZGtTY3JvbGxhYmxlIiwiIl0sWyJjbGFzcyIsIm1hdC1kcmF3ZXItY29udGVudCBtYXQtc2lkZW5hdi1jb250ZW50Il1dLFtbNCwibWFyZ2luLWxlZnQiLCJweCJdLFs0LCJtYXJnaW4tcmlnaHQiLCJweCJdXSxudWxsLG51bGwsbU8sZE8pKSxpbygxLDIxMjk5MixbWzEsNF1dLDAsdHUsW2RuLEpsLFVlXSxudWxsLG51bGwpLGlvKDIsMTA5NzcyOCxudWxsLDAsY08sW0NuLGZPXSxudWxsLG51bGwpLFRvKDAsMildLGZ1bmN0aW9uKHQsZSl7dChlLDEsMCl9LGZ1bmN0aW9uKHQsZSl7dChlLDAsMCxHaShlLDIpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLmxlZnQsR2koZSwyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX1mdW5jdGlvbiB3Tyh0KXtyZXR1cm4gRG8oMixbeG8oNjcxMDg4NjQwLDEse3Njcm9sbGFibGU6MH0pLCh0KCkoKSxtaSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLF9PKSksaW8oMiwxNjM4NCxudWxsLDAsRnMsW3huLHduXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSxUbyhudWxsLDApLFRvKG51bGwsMSksKHQoKSgpLG1pKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsYk8pKSxpbyg2LDE2Mzg0LG51bGwsMCxGcyxbeG4sd25dLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5oYXNCYWNrZHJvcCksdChlLDYsMCwhbi5fY29udGVudCl9LG51bGwpfXZhciB4Tz1zaChmdW5jdGlvbigpe30pLENPPXNoKGZ1bmN0aW9uKCl7fSksRU89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkoZSx0KSxlfSh4TyksU089ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZWxlbWVudD1lLHIuX25hdkxpc3Q9bixyLl9pc05hdkxpc3Q9ITEsci5faXNOYXZMaXN0PSEhbixyfXJldHVybiBpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7bmV3IGhoKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc05hdkxpc3R8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fbmF2TGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWxpc3QtaXRlbS1mb2N1cyIpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGV9KENPKSxrTz1mdW5jdGlvbigpe30sVE89ZnVuY3Rpb24oKXt9LEFPPVVyKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1kaXZpZGVye2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXRvcDowO2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo4MHB4fVtkaXI9cnRsXSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6ODBweH0ubWF0LXN1YmhlYWRlcntkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTZweDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcnttYXJnaW46MH0ubWF0LWxpc3QsLm1hdC1uYXYtbGlzdCwubWF0LXNlbGVjdGlvbi1saXN0e3BhZGRpbmctdG9wOjhweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb257ZGlzcGxheTpibG9jaztoZWlnaHQ6NDhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNnB4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFye2hlaWdodDo1NnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZXtoZWlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmV7aGVpZ2h0Ojg4cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5le2hlaWdodDphdXRvfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0Pip7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6aW5oZXJpdH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFye2ZsZXgtc2hyaW5rOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NzJweDt3aWR0aDpjYWxjKDEwMCUgLSA3MnB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb257ZmxleC1zaHJpbms6MDt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzo0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY0cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjRweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO21hcmdpbjowfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWxpc3RbZGVuc2VdLC5tYXQtbmF2LWxpc3RbZGVuc2VdLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2Vde3BhZGRpbmctdG9wOjRweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6NzZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2OHB4O3dpZHRoOmNhbGMoMTAwJSAtIDY4cHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Zm9udC1zaXplOjIwcHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjBweDt3aWR0aDpjYWxjKDEwMCUgLSA2MHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjBweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbmF2LWxpc3QgYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0fS5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW17Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5tYXQtbGlzdC1vcHRpb246bm90KC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIFBPKHQpe3JldHVybiBEbygyLFtUbyhudWxsLDApXSxudWxsLG51bGwpfXZhciBPTz1Vcih7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gSU8odCl7cmV0dXJuIERvKDIsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0tcmlwcGxlIG1hdC1yaXBwbGUiXSxbIm1hdC1yaXBwbGUiLCIiXV0sW1syLCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsbnVsbF1dLG51bGwsbnVsbCxudWxsLG51bGwpKSxpbygyLDIxMjk5MixudWxsLDAsX2gsW2RuLFVlLHRsLFsyLHZoXSxbMixkZF1dLHtkaXNhYmxlZDpbMCwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsxLCJ0cmlnZ2VyIl19LG51bGwpLFRvKG51bGwsMCksKHQoKSgpLHlpKDQsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1saXN0LXRleHQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksVG8obnVsbCwxKSxUbyhudWxsLDIpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsR2koZSwyKS51bmJvdW5kZWQpfSl9dmFyIE1PPVVyKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbImJvZHlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyZW19LmZpbGwtdG9vbGJhci1zcGFjZVtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgYXV0b30uc2lkZW5hdi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5zaWRlbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMDBweDtib3gtc2hhZG93OjNweCAwIDZweCByZ2JhKDAsMCwwLC4yNCl9I3NpdGVtYXBidXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3dpZHRoOjEwMCV9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTk8odCl7cmV0dXJuIERvKDAsWyh0KCkoKSx5aSgwLDAsbnVsbCxudWxsLDEzNCwiZGl2IixbWyJjbGFzcyIsIm1hdC1hcHAtYmFja2dyb3VuZCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMSwwLG51bGwsbnVsbCwxNywibWF0LXRvb2xiYXIiLFtbImNsYXNzIiwibWF0LXRvb2xiYXIiXSxbImNvbG9yIiwiYWNjZW50Il1dLFtbMiwibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsbnVsbF0sWzIsIm1hdC10b29sYmFyLXNpbmdsZS1yb3ciLG51bGxdXSxudWxsLG51bGwsR1AscVApKSxpbygyLDQyNDM0NTYsbnVsbCwxLFVQLFtkbix0bCxXc10se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSx4byg2MDM5Nzk3NzYsMSx7X3Rvb2xiYXJSb3dzOjF9KSwodCgpKCkseWkoNCwwLG51bGwsMCw0LCJidXR0b24iLFtbIm1hdC1pY29uLWJ1dHRvbiIsIiJdXSxbWzgsImRpc2FibGVkIiwwXSxbMiwiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLG51bGxdXSxbW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iY2xpY2siPT09ZSYmKHI9ITEhPT10LmNvbXBvbmVudC5vcGVuU2lkZU5hdigpJiZyKSxyfSxnZCx5ZCkpLGlvKDUsMTgwMjI0LG51bGwsMCxYaCxbZG4sdGwsUWgsWzIsZGRdXSxudWxsLG51bGwpLCh0KCkoKSx5aSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGlPLHJPKSksaW8oNyw2Mzg5NzYsbnVsbCwwLGVPLFtkbiwkUCxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsMCxbIm1lbnUiXSkpLCh0KCkoKSx5aSg5LDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgxMCwwLG51bGwsMCwxLCJzcGFuIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIk1lVGhyaVgiXSkpLCh0KCkoKSx5aSgxMiwwLG51bGwsMCwwLCJzcGFuIixbWyJzdHlsZSIsIndpZHRoOjAuMmVtIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSx5aSgxMywwLG51bGwsMCwwLCJpbWciLFtbInNyYyIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzL2MvYzAvVC0tR09fUGFyaXMtU2FjbGF5LS1nby1wcy13aGl0ZS5wbmciXSxbInN0eWxlIiwibWF4LWhlaWdodDoxMDAlOyB3aWR0aDphdXRvOyBwYWRkaW5nOjFlbTsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDE0LDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHlpKDE1LDAsbnVsbCwwLDMsInNwYW4iLFtbInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO2xpbmUtaGVpZ2h0OiA4NSU7IGZvbnQtc2l6ZTogbWVkaXVtOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCksTW8oLTEsbnVsbCxbIlRlYW0gR08iXSkpLCh0KCkoKSx5aSgxNywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLE1vKC0xLG51bGwsWyJQYXJpc1NhY2xheSJdKSksKHQoKSgpLHlpKDE5LDAsbnVsbCxudWxsLDExNSwibWF0LXNpZGVuYXYtY29udGFpbmVyIixbWyJjbGFzcyIsInNpZGVuYXYtY29udGFpbmVyIG1hdC1kcmF3ZXItY29udGFpbmVyIG1hdC1zaWRlbmF2LWNvbnRhaW5lciJdXSxbWzIsIm1hdC1kcmF3ZXItY29udGFpbmVyLWV4cGxpY2l0LWJhY2tkcm9wIixudWxsXV0sbnVsbCxudWxsLHdPLHZPKSksaW8oMjAsMTQ5MDk0NCxudWxsLDIsZk8sW1syLFd1XSxkbixVZSxDbixhTyxbMixkZF1dLG51bGwsbnVsbCkseG8oNjAzOTc5Nzc2LDIse19kcmF3ZXJzOjF9KSx4bygzMzU1NDQzMjAsMyx7X2NvbnRlbnQ6MH0pLCh0KCkoKSx5aSgyMywwLG51bGwsMCwxMDcsIm1hdC1zaWRlbmF2IixbWyJjbGFzcyIsInNpZGVuYXYgbWF0LWRyYXdlciBtYXQtc2lkZW5hdiJdLFsiZml4ZWRJblZpZXdwb3J0IiwidHJ1ZSJdLFsidGFiSW5kZXgiLCItMSJdXSxbWzEsInJvbGUiLDBdLFs0MCwiQHRyYW5zZm9ybSIsMF0sWzEsImFsaWduIiwwXSxbMiwibWF0LWRyYXdlci1lbmQiLG51bGxdLFsyLCJtYXQtZHJhd2VyLW92ZXIiLG51bGxdLFsyLCJtYXQtZHJhd2VyLXB1c2giLG51bGxdLFsyLCJtYXQtZHJhd2VyLXNpZGUiLG51bGxdLFsyLCJtYXQtc2lkZW5hdi1maXhlZCIsbnVsbF0sWzQsInRvcCIsInB4Il0sWzQsImJvdHRvbSIsInB4Il1dLFtbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uc3RhcnQiXSxbImNvbXBvbmVudCIsIkB0cmFuc2Zvcm0uZG9uZSJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNvbXBvbmVudDpAdHJhbnNmb3JtLnN0YXJ0Ij09PWUmJihyPSExIT09R2kodCwyNCkuX29uQW5pbWF0aW9uU3RhcnQobikmJnIpLCJjb21wb25lbnQ6QHRyYW5zZm9ybS5kb25lIj09PWUmJihyPSExIT09R2kodCwyNCkuX29uQW5pbWF0aW9uRW5kKG4pJiZyKSxyfSxnTyx5TykpLGlvKDI0LDMzMjU5NTIsW1syLDRdLFsiZHJhd2VyIiw0XV0sMCxoTyxbZG4scWgsUWgsdGwsVWUsWzIsV3NdXSx7bW9kZTpbMCwibW9kZSJdLG9wZW5lZDpbMSwib3BlbmVkIl0sZml4ZWRJblZpZXdwb3J0OlsyLCJmaXhlZEluVmlld3BvcnQiXX0sbnVsbCksb28oMTMxMDcyLHFzLFtDbl0pLG9vKDEzMTA3MixxcyxbQ25dKSwodCgpKCkseWkoMjcsMCxudWxsLDAsOSwibWF0LXRvb2xiYXIiLFtbImNsYXNzIiwibWF0LXRvb2xiYXIiXSxbImNvbG9yIiwicHJpbWFyeSJdLFsic3R5bGUiLCJtYXJnaW4tdG9wOiAxNXB4OyJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLEdQLHFQKSksaW8oMjgsNDI0MzQ1NixudWxsLDEsVVAsW2RuLHRsLFdzXSx7Y29sb3I6WzAsImNvbG9yIl19LG51bGwpLHhvKDYwMzk3OTc3Niw0LHtfdG9vbGJhclJvd3M6MX0pLCh0KCkoKSxNbygtMSwwLFsiTmF2aWdhdGlvbiAiXSkpLCh0KCkoKSx5aSgzMSwwLG51bGwsMCwwLCJzcGFuIixbWyJjbGFzcyIsImZpbGwtdG9vbGJhci1zcGFjZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwodCgpKCkseWkoMzIsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImNsaWNrIj09PWUmJihyPSExIT09dC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmcikscn0sZ2QseWQpKSxpbygzMywxODAyMjQsbnVsbCwwLFhoLFtkbix0bCxRaCxbMixkZF1dLG51bGwsbnVsbCksKHQoKSgpLHlpKDM0LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGlPLHJPKSksaW8oMzUsNjM4OTc2LG51bGwsMCxlTyxbZG4sJFAsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLDAsWyJrZXlib2FyZF9hcnJvd19sZWZ0Il0pKSwodCgpKCkseWkoMzcsMCxudWxsLDAsOTMsIm1hdC1uYXYtbGlzdCIsW1siY2xhc3MiLCJtYXQtbmF2LWxpc3QiXSxbInJvbGUiLCJuYXZpZ2F0aW9uIl1dLG51bGwsbnVsbCxudWxsLFBPLEFPKSksaW8oMzgsNDkxNTIsbnVsbCwwLEVPLFtdLG51bGwsbnVsbCksKHQoKSgpLHlpKDM5LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PUdpKHQsNDApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PUdpKHQsNDApLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PUdpKHQsNDMpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sSU8sT08pKSxpbyg0MCwxMDk3NzI4LG51bGwsMixTTyxbZG4sWzIsRU9dXSxudWxsLG51bGwpLHhvKDYwMzk3OTc3Niw1LHtfbGluZXM6MX0pLHhvKDMzNTU0NDMyMCw2LHtfYXZhdGFyOjB9KSxpbyg0Myw2NzE3NDQsbnVsbCwwLCR5LFtaeSxjeSxFc10se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksUG8oNDQsMSksKHQoKSgpLHlpKDQ1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGlPLHJPKSksaW8oNDYsNjM4OTc2LG51bGwsMCxlTyxbZG4sJFAsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLDAsWyJkYXNoYm9hcmQiXSkpLCh0KCkoKSxNbygtMSwyLFsiIE1haW4gcGFnZSJdKSksKHQoKSgpLHlpKDQ5LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PUdpKHQsNTApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PUdpKHQsNTApLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PUdpKHQsNTMpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sSU8sT08pKSxpbyg1MCwxMDk3NzI4LG51bGwsMixTTyxbZG4sWzIsRU9dXSxudWxsLG51bGwpLHhvKDYwMzk3OTc3Niw3LHtfbGluZXM6MX0pLHhvKDMzNTU0NDMyMCw4LHtfYXZhdGFyOjB9KSxpbyg1Myw2NzE3NDQsbnVsbCwwLCR5LFtaeSxjeSxFc10se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksUG8oNTQsMSksKHQoKSgpLHlpKDU1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGlPLHJPKSksaW8oNTYsNjM4OTc2LG51bGwsMCxlTyxbZG4sJFAsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLDAsWyJhc3Nlc3NtZW50Il0pKSwodCgpKCksTW8oLTEsMixbIiBQcm9qZWN0IGRldGFpbHMiXSkpLCh0KCkoKSx5aSg1OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1HaSh0LDYwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1HaSh0LDYwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1HaSh0LDYzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LElPLE9PKSksaW8oNjAsMTA5NzcyOCxudWxsLDIsU08sW2RuLFsyLEVPXV0sbnVsbCxudWxsKSx4byg2MDM5Nzk3NzYsOSx7X2xpbmVzOjF9KSx4bygzMzU1NDQzMjAsMTAse19hdmF0YXI6MH0pLGlvKDYzLDY3MTc0NCxudWxsLDAsJHksW1p5LGN5LEVzXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxQbyg2NCwxKSwodCgpKCkseWkoNjUsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaU8sck8pKSxpbyg2Niw2Mzg5NzYsbnVsbCwwLGVPLFtkbiwkUCxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsMCxbImJsdXJfY2lyY3VsYXIiXSkpLCh0KCkoKSxNbygtMSwyLFsiIEJpb2xvZ3kiXSkpLCh0KCkoKSx5aSg2OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1HaSh0LDcwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1HaSh0LDcwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1HaSh0LDczKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LElPLE9PKSksaW8oNzAsMTA5NzcyOCxudWxsLDIsU08sW2RuLFsyLEVPXV0sbnVsbCxudWxsKSx4byg2MDM5Nzk3NzYsMTEse19saW5lczoxfSkseG8oMzM1NTQ0MzIwLDEyLHtfYXZhdGFyOjB9KSxpbyg3Myw2NzE3NDQsbnVsbCwwLCR5LFtaeSxjeSxFc10se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksUG8oNzQsMSksKHQoKSgpLHlpKDc1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGlPLHJPKSksaW8oNzYsNjM4OTc2LG51bGwsMCxlTyxbZG4sJFAsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLDAsWyJtZW1vcnkiXSkpLCh0KCkoKSxNbygtMSwyLFsiIENvbXB1dGluZyJdKSksKHQoKSgpLHlpKDc5LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PUdpKHQsODApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PUdpKHQsODApLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PUdpKHQsODMpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sSU8sT08pKSxpbyg4MCwxMDk3NzI4LG51bGwsMixTTyxbZG4sWzIsRU9dXSxudWxsLG51bGwpLHhvKDYwMzk3OTc3NiwxMyx7X2xpbmVzOjF9KSx4bygzMzU1NDQzMjAsMTQse19hdmF0YXI6MH0pLGlvKDgzLDY3MTc0NCxudWxsLDAsJHksW1p5LGN5LEVzXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxQbyg4NCwxKSwodCgpKCkseWkoODUsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaU8sck8pKSxpbyg4Niw2Mzg5NzYsbnVsbCwwLGVPLFtkbiwkUCxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsMCxbImFjY2Vzc2liaWxpdHlfbmV3Il0pKSwodCgpKCksTW8oLTEsMixbIiBIdW1hbiBQcmFjdGljZXMiXSkpLCh0KCkoKSx5aSg4OSwwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1HaSh0LDkwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1HaSh0LDkwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1HaSh0LDkzKS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LElPLE9PKSksaW8oOTAsMTA5NzcyOCxudWxsLDIsU08sW2RuLFsyLEVPXV0sbnVsbCxudWxsKSx4byg2MDM5Nzk3NzYsMTUse19saW5lczoxfSkseG8oMzM1NTQ0MzIwLDE2LHtfYXZhdGFyOjB9KSxpbyg5Myw2NzE3NDQsbnVsbCwwLCR5LFtaeSxjeSxFc10se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksUG8oOTQsMSksKHQoKSgpLHlpKDk1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGlPLHJPKSksaW8oOTYsNjM4OTc2LG51bGwsMCxlTyxbZG4sJFAsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLDAsWyJwZW9wbGUiXSkpLCh0KCkoKSxNbygtMSwyLFsiIE91ciB0ZWFtIl0pKSwodCgpKCkseWkoOTksMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbih0LGUsbil7dmFyIHI9ITA7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09R2kodCwxMDApLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PUdpKHQsMTAwKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1HaSh0LDEwMykub25DbGljayhuLmJ1dHRvbixuLmN0cmxLZXksbi5tZXRhS2V5LG4uc2hpZnRLZXkpJiZyKSxyfSxJTyxPTykpLGlvKDEwMCwxMDk3NzI4LG51bGwsMixTTyxbZG4sWzIsRU9dXSxudWxsLG51bGwpLHhvKDYwMzk3OTc3NiwxNyx7X2xpbmVzOjF9KSx4bygzMzU1NDQzMjAsMTgse19hdmF0YXI6MH0pLGlvKDEwMyw2NzE3NDQsbnVsbCwwLCR5LFtaeSxjeSxFc10se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksUG8oMTA0LDEpLCh0KCkoKSx5aSgxMDUsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsaU8sck8pKSxpbygxMDYsNjM4OTc2LG51bGwsMCxlTyxbZG4sJFAsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLE1vKC0xLDAsWyJmb2xkZXJfc3BlY2lhbCJdKSksKHQoKSgpLE1vKC0xLDIsWyIgU3VwcG9ydCJdKSksKHQoKSgpLHlpKDEwOSwwLG51bGwsMCwxMSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl0sWyJzdHlsZSIsImJhY2tncm91bmQtY29sb3I6ICNhNjQwN2IwRiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJmb2N1cyI9PT1lJiYocj0hMSE9PUdpKHQsMTEwKS5faGFuZGxlRm9jdXMoKSYmciksImJsdXIiPT09ZSYmKHI9ITEhPT1HaSh0LDExMCkuX2hhbmRsZUJsdXIoKSYmciksImNsaWNrIj09PWUmJihyPSExIT09R2kodCwxMTMpLm9uQ2xpY2sobi5idXR0b24sbi5jdHJsS2V5LG4ubWV0YUtleSxuLnNoaWZ0S2V5KSYmcikscn0sSU8sT08pKSxpbygxMTAsMTA5NzcyOCxudWxsLDIsU08sW2RuLFsyLEVPXV0sbnVsbCxudWxsKSx4byg2MDM5Nzk3NzYsMTkse19saW5lczoxfSkseG8oMzM1NTQ0MzIwLDIwLHtfYXZhdGFyOjB9KSxpbygxMTMsNjcxNzQ0LG51bGwsMCwkeSxbWnksY3ksRXNdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLFBvKDExNCwxKSwodCgpKCkseWkoMTE1LDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGlPLHJPKSksaW8oMTE2LDYzODk3NixudWxsLDAsZU8sW2RuLCRQLFs4LG51bGxdXSxudWxsLG51bGwpLCh0KCkoKSxNbygtMSwwLFsiZGVza3RvcF93aW5kb3dzIl0pKSwodCgpKCksTW8oLTEsMixbIiBXaWtpIFByb3h5ICJdKSksKHQoKSgpLHlpKDExOSwwLG51bGwsMiwxLCJzdXAiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxNbygtMSxudWxsLFsiKGRldikiXSkpLCh0KCkoKSx5aSgxMjEsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJpZCIsInNpdGVtYXBidXQiXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdLFsxLCJ0YXJnZXQiLDBdLFs4LCJocmVmIiw0XV0sW1tudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl0sW251bGwsImNsaWNrIl1dLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0hMDtyZXR1cm4iZm9jdXMiPT09ZSYmKHI9ITEhPT1HaSh0LDEyMikuX2hhbmRsZUZvY3VzKCkmJnIpLCJibHVyIj09PWUmJihyPSExIT09R2kodCwxMjIpLl9oYW5kbGVCbHVyKCkmJnIpLCJjbGljayI9PT1lJiYocj0hMSE9PUdpKHQsMTI1KS5vbkNsaWNrKG4uYnV0dG9uLG4uY3RybEtleSxuLm1ldGFLZXksbi5zaGlmdEtleSkmJnIpLHJ9LElPLE9PKSksaW8oMTIyLDEwOTc3MjgsbnVsbCwyLFNPLFtkbixbMixFT11dLG51bGwsbnVsbCkseG8oNjAzOTc5Nzc2LDIxLHtfbGluZXM6MX0pLHhvKDMzNTU0NDMyMCwyMix7X2F2YXRhcjowfSksaW8oMTI1LDY3MTc0NCxudWxsLDAsJHksW1p5LGN5LEVzXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSxQbygxMjYsMSksKHQoKSgpLHlpKDEyNywwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxpTyxyTykpLGlvKDEyOCw2Mzg5NzYsbnVsbCwwLGVPLFtkbiwkUCxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksTW8oLTEsMCxbImFwcHMiXSkpLCh0KCkoKSxNbygtMSwyLFsiIFNpdGUgbWFwIl0pKSwodCgpKCkseWkoMTMxLDAsbnVsbCwxLDMsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXV0sW1s0LCJtYXJnaW4tbGVmdCIsInB4Il0sWzQsIm1hcmdpbi1yaWdodCIsInB4Il1dLG51bGwsbnVsbCxtTyxkTykpLGlvKDEzMiwxMDk3NzI4LFtbMyw0XV0sMCxjTyxbQ24sZk9dLG51bGwsbnVsbCksKHQoKSgpLHlpKDEzMywxNjc3NzIxNixudWxsLDAsMSwicm91dGVyLW91dGxldCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaW8oMTM0LDIxMjk5MixudWxsLDAsbmcsW2VnLHhuLE1lLFs4LG51bGxdLENuXSxudWxsLG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsImFjY2VudCIpLHQoZSw3LDApLHQoZSwyMCwwKSx0KGUsMjQsMCxWcihlLDI0LDAsR2koZSwyNSkudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJvdmVyIjoic2lkZSIsbi5vcGVuZWRTaWRlTmF2LCJ0cnVlIiksdChlLDI4LDAsInByaW1hcnkiKSx0KGUsMzUsMCksdChlLDQzLDAsdChlLDQ0LDAsIi4uL2Rhc2hib2FyZCIpKSx0KGUsNDYsMCksdChlLDUzLDAsdChlLDU0LDAsIi4uL3Byb2plY3QiKSksdChlLDU2LDApLHQoZSw2MywwLHQoZSw2NCwwLCIuLi9iaW9sb2d5IikpLHQoZSw2NiwwKSx0KGUsNzMsMCx0KGUsNzQsMCwiLi4vY29tcHV0aW5nIikpLHQoZSw3NiwwKSx0KGUsODMsMCx0KGUsODQsMCwiLi4vaHVtYW4tcHJhY3RpY2VzIikpLHQoZSw4NiwwKSx0KGUsOTMsMCx0KGUsOTQsMCwiLi4vdGVhbSIpKSx0KGUsOTYsMCksdChlLDEwMywwLHQoZSwxMDQsMCwiLi4vc3VwcG9ydCIpKSx0KGUsMTA2LDApLHQoZSwxMTMsMCx0KGUsMTE0LDAsIi4uL3dpa2ktbHAiKSksdChlLDExNiwwKSx0KGUsMTI1LDAsdChlLDEyNiwwLCIuLi9zaXRlbWFwIikpLHQoZSwxMjgsMCksdChlLDEzNCwwKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLEdpKGUsMikuX3Rvb2xiYXJSb3dzLmxlbmd0aCwhR2koZSwyKS5fdG9vbGJhclJvd3MubGVuZ3RoKSx0KGUsNCwwLEdpKGUsNSkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PUdpKGUsNSkuX2FuaW1hdGlvbk1vZGUpLHQoZSw2LDAsR2koZSw3KS5pbmxpbmUpLHQoZSwxOSwwLEdpKGUsMjApLl9iYWNrZHJvcE92ZXJyaWRlKSx0KGUsMjMsMCxWcihlLDIzLDAsR2koZSwyNikudHJhbnNmb3JtKG4uaXNIYW5kc2V0JCkpPyJkaWFsb2ciOiJuYXZpZ2F0aW9uIixHaShlLDI0KS5fYW5pbWF0aW9uU3RhdGUsbnVsbCwiZW5kIj09PUdpKGUsMjQpLnBvc2l0aW9uLCJvdmVyIj09PUdpKGUsMjQpLm1vZGUsInB1c2giPT09R2koZSwyNCkubW9kZSwic2lkZSI9PT1HaShlLDI0KS5tb2RlLEdpKGUsMjQpLmZpeGVkSW5WaWV3cG9ydCxHaShlLDI0KS5maXhlZEluVmlld3BvcnQ/R2koZSwyNCkuZml4ZWRUb3BHYXA6bnVsbCxHaShlLDI0KS5maXhlZEluVmlld3BvcnQ/R2koZSwyNCkuZml4ZWRCb3R0b21HYXA6bnVsbCksdChlLDI3LDAsR2koZSwyOCkuX3Rvb2xiYXJSb3dzLmxlbmd0aCwhR2koZSwyOCkuX3Rvb2xiYXJSb3dzLmxlbmd0aCksdChlLDMyLDAsR2koZSwzMykuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PUdpKGUsMzMpLl9hbmltYXRpb25Nb2RlKSx0KGUsMzQsMCxHaShlLDM1KS5pbmxpbmUpLHQoZSwzOSwwLEdpKGUsNDApLl9hdmF0YXIsR2koZSw0MCkuX2F2YXRhcixHaShlLDQzKS50YXJnZXQsR2koZSw0MykuaHJlZiksdChlLDQ1LDAsR2koZSw0NikuaW5saW5lKSx0KGUsNDksMCxHaShlLDUwKS5fYXZhdGFyLEdpKGUsNTApLl9hdmF0YXIsR2koZSw1MykudGFyZ2V0LEdpKGUsNTMpLmhyZWYpLHQoZSw1NSwwLEdpKGUsNTYpLmlubGluZSksdChlLDU5LDAsR2koZSw2MCkuX2F2YXRhcixHaShlLDYwKS5fYXZhdGFyLEdpKGUsNjMpLnRhcmdldCxHaShlLDYzKS5ocmVmKSx0KGUsNjUsMCxHaShlLDY2KS5pbmxpbmUpLHQoZSw2OSwwLEdpKGUsNzApLl9hdmF0YXIsR2koZSw3MCkuX2F2YXRhcixHaShlLDczKS50YXJnZXQsR2koZSw3MykuaHJlZiksdChlLDc1LDAsR2koZSw3NikuaW5saW5lKSx0KGUsNzksMCxHaShlLDgwKS5fYXZhdGFyLEdpKGUsODApLl9hdmF0YXIsR2koZSw4MykudGFyZ2V0LEdpKGUsODMpLmhyZWYpLHQoZSw4NSwwLEdpKGUsODYpLmlubGluZSksdChlLDg5LDAsR2koZSw5MCkuX2F2YXRhcixHaShlLDkwKS5fYXZhdGFyLEdpKGUsOTMpLnRhcmdldCxHaShlLDkzKS5ocmVmKSx0KGUsOTUsMCxHaShlLDk2KS5pbmxpbmUpLHQoZSw5OSwwLEdpKGUsMTAwKS5fYXZhdGFyLEdpKGUsMTAwKS5fYXZhdGFyLEdpKGUsMTAzKS50YXJnZXQsR2koZSwxMDMpLmhyZWYpLHQoZSwxMDUsMCxHaShlLDEwNikuaW5saW5lKSx0KGUsMTA5LDAsR2koZSwxMTApLl9hdmF0YXIsR2koZSwxMTApLl9hdmF0YXIsR2koZSwxMTMpLnRhcmdldCxHaShlLDExMykuaHJlZiksdChlLDExNSwwLEdpKGUsMTE2KS5pbmxpbmUpLHQoZSwxMjEsMCxHaShlLDEyMikuX2F2YXRhcixHaShlLDEyMikuX2F2YXRhcixHaShlLDEyNSkudGFyZ2V0LEdpKGUsMTI1KS5ocmVmKSx0KGUsMTI3LDAsR2koZSwxMjgpLmlubGluZSksdChlLDEzMSwwLEdpKGUsMTMyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5sZWZ0LEdpKGUsMTMyKS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX12YXIgUk89UmkoImFwcC1yb290IixQbCxmdW5jdGlvbih0KXtyZXR1cm4gRG8oMCxbKHQoKSgpLHlpKDAsMCxudWxsLG51bGwsMSwiYXBwLXJvb3QiLFtdLG51bGwsbnVsbCxudWxsLE5PLE1PKSksaW8oMSwxMTQ2ODgsbnVsbCwwLFBsLFtrbF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxETz1uZXcgbXQoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5Iik7ZnVuY3Rpb24gTE8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBqTz1mdW5jdGlvbigpe30sRk89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5jaGFuZ2VzPW5ldyBpdCx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPWZ1bmN0aW9uKHQsZSxuKXtpZigwPT1ufHwwPT1lKXJldHVybiIwIG9mICIrbjt2YXIgcj10KmU7cmV0dXJuIHIrMSsiIC0gIisocjwobj1NYXRoLm1heChuLDApKT9NYXRoLm1pbihyK2Usbik6citlKSsiIG9mICIrbn19cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPWR0KHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBWTyh0KXtyZXR1cm4gdHx8bmV3IEZPfXZhciBCTz1mdW5jdGlvbigpe30sek89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5jaGFuZ2VzPW5ldyBpdCx0aGlzLnNvcnRCdXR0b25MYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4iQ2hhbmdlIHNvcnRpbmcgZm9yICIrdH19cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPWR0KHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBVTyh0KXtyZXR1cm4gdHx8bmV3IHpPfXZhciBITz1mdW5jdGlvbigpe30scU89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIodCl9LHQubmdJbmplY3RhYmxlRGVmPWR0KHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxHTz1mdW5jdGlvbigpe30sV089bmV3IG10KCJtYXQtbWVudS1zY3JvbGwtc3RyYXRlZ3kiKTtmdW5jdGlvbiBRTyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19dmFyIEtPPWZ1bmN0aW9uKCl7fSxaTz1mdW5jdGlvbigpe30sWU89ZnVuY3Rpb24oKXt9LFhPPWZ1bmN0aW9uKCl7fSwkTz1mdW5jdGlvbigpe30sSk89ZnVuY3Rpb24oKXt9LHRJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe1lzKGUpJiYhdCYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBGbGV4IExheW91dCBsb2FkZWQgb24gdGhlIHNlcnZlciB3aXRob3V0IEZsZXhMYXlvdXRTZXJ2ZXJNb2R1bGUiKX1yZXR1cm4gdC53aXRoQ29uZmlnPWZ1bmN0aW9uKGUsbil7dmFyIHI9T2JqZWN0LmFzc2lnbih7fSxVayksaT1bXTtmb3IodmFyIG8gaW4gZSllW29dPT09cltvXXx8ITEhPT1lW29dJiYhMCE9PWVbb118fChyW29dPWVbb10pO3JldHVybiBlLnNlcnZlckxvYWRlZCYmaS5wdXNoKHtwcm92aWRlOnRULHVzZVZhbHVlOiEwfSksQXJyYXkuaXNBcnJheShuKSYmaS5wdXNoKHtwcm92aWRlOklrLHVzZVZhbHVlOm4sbXVsdGk6ITB9KSxpLnB1c2goe3Byb3ZpZGU6SGssdXNlVmFsdWU6cn0pLHtuZ01vZHVsZTp0LHByb3ZpZGVyczppfX0sdH0oKSxlST1mdW5jdGlvbigpe30sbkk9ZnVuY3Rpb24oKXt9LHJJPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IFVhKHdzLFtQbF0sZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxuPVtdLHI9ITEsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO28udG9rZW49PT1oZSYmKHI9ITApLDEwNzM3NDE4MjQmby5mbGFncyYmbi5wdXNoKG8udG9rZW4pLG8uaW5kZXg9aSxlW0ZyKG8udG9rZW4pXT1vfXJldHVybntmYWN0b3J5Om51bGwscHJvdmlkZXJzQnlLZXk6ZSxwcm92aWRlcnM6dCxtb2R1bGVzOm4saXNSb290OnJ9fShbU2koNTEyLE1lLE5lLFtbOCxbU2gsd2QsU2QsRWcsYWssUGssZ1Asd1AsU1AsUFAsTlAsalAselAsUk9dXSxbMyxNZV0sRGVdKSxTaSg1MTIwLFluLEpuLFtbMyxZbl1dKSxTaSg0NjA4LFJzLERzLFtZbixbMixOc11dKSxTaSg1MTIwLHllLGdlLFtdKSxTaSg1MTIwLHFuLFhuLFtdKSxTaSg1MTIwLEduLCRuLFtdKSxTaSg0NjA4LFFjLEtjLFtXc10pLFNpKDYxNDQsRXIsbnVsbCxbUWNdKSxTaSg0NjA4LHpjLGNoLFtbMix1aF0sWzIsb2hdXSksU2koNTEyMCxkYyxmdW5jdGlvbih0LGUsbixyLGksbyxhKXtyZXR1cm5bbmV3IFZjKHQsZSxuKSxuZXcgV2MociksbmV3IEhjKGksbyxhKV19LFtXcyxVZSxbMixiZV0sV3MsV3MsemMseGVdKSxTaSg0NjA4LG1jLG1jLFtkYyxVZV0pLFNpKDEzNTY4MCx2Yyx2YyxbV3NdKSxTaSg0NjA4LFNjLFNjLFttYyx2Y10pLFNpKDUxMjAseGYsaGQsW10pLFNpKDUxMjAsY3AsZmQsW10pLFNpKDQ2MDgsVnAsY2QsW3hmLGNwXSksU2koNTEyMCxobixwZCxbU2MsVnAsVWVdKSxTaSg2MTQ0LGdjLG51bGwsW3ZjXSksU2koNDYwOCxZZSxZZSxbVWVdKSxTaSg0NjA4LGFjLGFjLFtXc10pLFNpKDQ2MDgsY2MsY2MsW1dzXSksU2koNDYwOCxPbCxyZCxbaG4scmNdKSxTaSg0NjA4LEx1LEx1LFtrdSxBdSxNZSxSdSxUdSxWdCxVZSxXcyxXdV0pLFNpKDUxMjAsanUsRnUsW0x1XSksU2koNTEyMCxETyxMTyxbTHVdKSxTaSg1MTIwLHp1LFV1LFtMdV0pLFNpKDUxMjAsRk8sVk8sW1szLEZPXV0pLFNpKDUxMjAsek8sVU8sW1szLHpPXV0pLFNpKDQ2MDgsdEEsdEEsW10pLFNpKDQ2MDgsbGgsbGgsW10pLFNpKDQ2MDgscU8scU8sW10pLFNpKDQ2MDgsWWssWGssW0drLFFrXSksU2koNTEyMCx3ZyxiZyxbdmddKSxTaSg1MTIwLHdlLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bKHI9dCxpPWUsZnVuY3Rpb24oKXtpZihacyhpKSl7dmFyIHQ9L1xiZmxleC1sYXlvdXQtLis/XGIvZztBcnJheS5mcm9tKHIucXVlcnlTZWxlY3RvckFsbCgiW2NsYXNzKj1mbGV4LWxheW91dC1dIikpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QuY29udGFpbnMoImZsZXgtbGF5b3V0LXNzciIpJiZlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOmUuY2xhc3NOYW1lLnJlcGxhY2UodCwiIil9KX19KSxuXTt2YXIgcixpfSxbV3MsYmUsd2ddKSxTaSg0NjA4LE1oLE1oLFtMdSxXaCxWdCxrbCxbMyxNaF0sSWhdKSxTaSg1MTIwLGN5LGdnLFtaeV0pLFNpKDQ2MDgsYWcsYWcsW10pLFNpKDYxNDQsaWcsbnVsbCxbYWddKSxTaSgxMzU2ODAsc2csc2csW1p5LG1uLEVlLFZ0LGlnXSksU2koNDYwOCxvZyxvZyxbXSksU2koNTEyMCxXTyxRTyxbTHVdKSxTaSg0NjA4LHVQLGNQLFtXcyxiZSxzUF0pLFNpKDQ2MDgsaFAsaFAsW3VQLGxQXSksU2koNTEyMCxlUCxmdW5jdGlvbih0KXtyZXR1cm5bdF19LFtoUF0pLFNpKDQ2MDgsb1Asb1AsW10pLFNpKDYxNDQsaVAsbnVsbCxbb1BdKSxTaSg0NjA4LGFQLGFQLFtpUF0pLFNpKDYxNDQsRkEsbnVsbCxbYVBdKSxTaSg0NjA4LGpBLGZQLFtGQSxWdF0pLFNpKDQ2MDgsSkEsSkEsW2pBXSksU2koMTA3Mzc0MjMzNixHcyxHcyxbXSksU2koMTAyNCxjZSxuaCxbXSksU2koMTAyNCxybixmdW5jdGlvbigpe3JldHVybltoZygpXX0sW10pLFNpKDUxMix2Zyx2ZyxbVnRdKSxTaSgxMDI0LGRlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuWyhuPXQsaGMoInByb2JlIixwYyksaGMoImNvcmVUb2tlbnMiLG8oe30sZmMsKG58fFtdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlLm5hbWVdPWUudG9rZW4sdH0se30pKSksZnVuY3Rpb24oKXtyZXR1cm4gcGN9KSxfZyhlKV07dmFyIG59LFtbMixybl0sdmddKSxTaSg1MTIsbWUsbWUsW1syLGRlXV0pLFNpKDEzMTU4NCx1bix1bixbVWUseGUsVnQsY2UsTWUsbWVdKSxTaSgxMDczNzQyMzM2LHRyLHRyLFt1bl0pLFNpKDEwNzM3NDIzMzYscmgscmgsW1szLHJoXV0pLFNpKDEwNzM3NDIzMzYsbWQsbWQsW10pLFNpKDEwNzM3NDIzMzYseGwseGwsW10pLFNpKDEwNzM3NDIzMzYsUXUsUXUsW10pLFNpKDEwNzM3NDIzMzYsb2gsb2gsW1syLGloXV0pLFNpKDEwNzM3NDIzMzYsSFAsSFAsW10pLFNpKDEwNzM3NDIzMzYsaWwsaWwsW10pLFNpKDEwNzM3NDIzMzYsYmgsYmgsW10pLFNpKDEwNzM3NDIzMzYsJGgsJGgsW10pLFNpKDEwNzM3NDIzMzYsbnUsbnUsW10pLFNpKDEwNzM3NDIzMzYscE8scE8sW10pLFNpKDEwNzM3NDIzMzYsbk8sbk8sW10pLFNpKDEwNzM3NDIzMzYsZmgsZmgsW10pLFNpKDEwNzM3NDIzMzYsd2gsd2gsW10pLFNpKDEwNzM3NDIzMzYsVE8sVE8sW10pLFNpKDEwNzM3NDIzMzYsa08sa08sW10pLFNpKDEwNzM3NDIzMzYsWk8sWk8sW10pLFNpKDEwNzM3NDIzMzYsWU8sWU8sW10pLFNpKDEwNzM3NDIzMzYsZHUsZHUsW10pLFNpKDEwNzM3NDIzMzYsVnUsVnUsW10pLFNpKDEwNzM3NDIzMzYseGgseGgsW10pLFNpKDEwNzM3NDIzMzYsVFQsVFQsW10pLFNpKDEwNzM3NDIzMzYsak8sak8sW10pLFNpKDEwNzM3NDIzMzYscXUscXUsW10pLFNpKDEwNzM3NDIzMzYsQk8sQk8sW10pLFNpKDEwNzM3NDIzMzYsSE8sSE8sW10pLFNpKDEwNzM3NDIzMzYsaGssaGssW10pLFNpKDEwNzM3NDIzMzYsdmssdmssW10pLFNpKDEwNzM3NDIzMzYsUkEsUkEsW10pLFNpKDEwNzM3NDIzMzYsREEsREEsW10pLFNpKDEwNzM3NDIzMzYsT1QsT1QsW10pLFNpKDEwNzM3NDIzMzYsUlQsUlQsW10pLFNpKDEwNzM3NDIzMzYsR08sR08sW10pLFNpKDEwNzM3NDIzMzYsWE8sWE8sW10pLFNpKDEwNzM3NDIzMzYsJGssJGssW10pLFNpKDEwNzM3NDIzMzYsU1QsU1QsW10pLFNpKDEwNzM3NDIzMzYsJE8sJE8sW10pLFNpKDEwNzM3NDIzMzYsSk8sSk8sW10pLFNpKDEwNzM3NDIzMzYsdEksdEksW1syLHRUXSxiZV0pLFNpKDEwNzM3NDIzMzYsTmgsTmgsW10pLFNpKDEwMjQsdWcsZGcsW1szLFp5XV0pLFNpKDUxMixNbSxObSxbXSksU2koNTEyLGVnLGVnLFtdKSxTaSgyNTYsbGcse3VzZUhhc2g6ITB9LFtdKSxTaSgxMDI0LEVzLHBnLFt4cyxbMixTc10sbGddKSxTaSg1MTIsa3Msa3MsW0VzXSksU2koNTEyLEVlLEVlLFtdKSxTaSg1MTIsbW4sX24sW0VlLFsyLGduXV0pLFNpKDEwMjQsSHksZnVuY3Rpb24oKXtyZXR1cm5bW3twYXRoOiJkYXNoYm9hcmQiLGNvbXBvbmVudDpya30se3BhdGg6InNpdGVtYXAiLGNvbXBvbmVudDpra30se3BhdGg6Indpa2ktbHAvOnBhZ2VwYXRoIixjb21wb25lbnQ6TEF9LHtwYXRoOiJ3aWtpLWxwIixjb21wb25lbnQ6TEF9LHtwYXRoOiJ0ZWFtIixjb21wb25lbnQ6dlB9LHtwYXRoOiJwcm9qZWN0Iixjb21wb25lbnQ6eFB9LHtwYXRoOiJiaW9sb2d5Iixjb21wb25lbnQ6a1B9LHtwYXRoOiJjb21wdXRpbmciLGNvbXBvbmVudDpPUH0se3BhdGg6Imh1bWFuLXByYWN0aWNlcyIsY29tcG9uZW50OlJQfSx7cGF0aDoic3VwcG9ydCIsY29tcG9uZW50OkZQfSx7cGF0aDoiIixyZWRpcmVjdFRvOiJkYXNoYm9hcmQiLHBhdGhNYXRjaDoiZnVsbCJ9XV19LFtdKSxTaSgxMDI0LFp5LHlnLFt1bixNbSxlZyxrcyxWdCxtbixFZSxIeSxsZyxbMixHeV0sWzIsenldXSksU2koMTA3Mzc0MjMzNixmZyxmZyxbWzIsdWddLFsyLFp5XV0pLFNpKDEwNzM3NDIzMzYsZUksZUksW10pLFNpKDEwNzM3NDIzMzYsbkksbkksW10pLFNpKDEwNzM3NDIzMzYsUGcsUGcsW10pLFNpKDEwNzM3NDIzMzYsS08sS08sW10pLFNpKDEwNzM3NDIzMzYscFAscFAsW10pLFNpKDEwNzM3NDIzMzYsZFAsZFAsW10pLFNpKDEwNzM3NDIzMzYsd3Msd3MsW10pLFNpKDI1NixoZSwhMCxbXSksU2koMjU2LGRkLCJCcm93c2VyQW5pbWF0aW9ucyIsW10pLFNpKDI1NixzUCwiWFNSRi1UT0tFTiIsW10pLFNpKDI1NixsUCwiWC1YU1JGLVRPS0VOIixbXSldKX0pfSgpOyhmdW5jdGlvbigpe2lmKHRuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVuYWJsZSBwcm9kIG1vZGUgYWZ0ZXIgcGxhdGZvcm0gc2V0dXAuIik7SmU9ITF9KSgpLGVoKCkuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShySSkuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKHQpfSl9fSxbWzQsMF1dXSk7");eval(base64script); </script> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | <script> | ||
+ | $(".body").append($("#bigmaindiv")); | ||
+ | $('#top_title').remove(); | ||
+ | $('#bigmaindiv').insertBefore('#content'); | ||
+ | </script> | ||
+ | <style> | ||
+ | #content{ | ||
+ | background-color: #FFFFFF00; | ||
+ | width: 0px; | ||
+ | padding: 0px; | ||
+ | border: none; | ||
+ | margin-left: 0px; | ||
+ | margin-right: auto; | ||
+ | } | ||
+ | #bigmaindiv | ||
+ | { | ||
+ | width:100vw; | ||
+ | position:absolute; | ||
+ | background-color: white; | ||
+ | margin-left : 0px; | ||
+ | margin-top: 25px | ||
+ | margin-right : 0px; | ||
+ | } | ||
+ | body{ | ||
+ | background-color: #FFFFFF; | ||
+ | } | ||
+ | </style> | ||
</html> | </html> |
Revision as of 13:15, 28 June 2018