СПЛИТ-БАННЕР
НАВИГАЦИЯ-КАРТОЧКИ
МОЕ ФОТО
AVZ-CONFIG-STARTeyJ2ZXJzaW9uIjoxLCJoZXJvIjp7ImV5ZWJyb3ciOiLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsIm5hbWUxIjoi0JDQvdGC0L7QvSIsIm5hbWUyIjoi0JDQstCw0L3Qt9Cw0YLQviIsImxlZGUiOiIyNTAg0YHRitGR0LzQvtC6INGBIDIwMTkg0LPQvtC00LAuINCV0YHQu9C4INCy0Ysg0L3QuNC60L7Qs9C00LAg0L3QtSDQu9GO0LHQuNC70Lgg0YHQstC-0ZEg0YTQvtGC0L4g4oCUINGB0LrQvtGA0LXQtSDQstGB0LXQs9C-LCDQtNC10LvQviDQsdGL0LvQviDQvdC1INCyINCy0LDRgS4iLCJwcmljZUxpbmsiOnsidGV4dCI6ItCk0L7RgtC-0YHQtdGB0YHQuNC4IOKAlCDQvtGCIDE0IDkwMCDigr0gwrcg0YHQvNC-0YLRgNC10YLRjCDRhtC10L3RiyIsImhyZWYiOiJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIn19LCJ0aWxlcyI6W3sidGl0bGUiOiLQn9C-0YDRgtGA0LXRgtC90LDRjyIsImNhcHRpb24iOiLQmNC90LTQuNCy0LjQtNGD0LDQu9GM0L3Ri9C1INGB0YrRkdC80LrQuCIsImhyZWYiOiJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIsImltZyI6Imh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9XRlk3VXVKZXdyN051QXc2NDNmZDd4dWZCeXFRaXN6SC9aYlJwQnhqSEFSejFGLUowNzl2Q2QyaThnamkwbk9RUC9LVkpBYnRnRU95S1JxbWpRN0ZmbkZRLmpwZyIsImFsdCI6ItCf0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCDigJQg0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-In0seyJ0aXRsZSI6ItCg0LXQv9C-0YDRgtCw0LYiLCJjYXB0aW9uIjoi0JzQtdGA0L7Qv9GA0LjRj9GC0LjRjyIsImhyZWYiOiJodHRwczovL2F2YW56YXRvLnJ1L3JlcG9ydGF6aG55eS1mb3RvZ3JhZi12LWthemFuaS1hbnRvbi1hdmFuemF0byIsImltZyI6Imh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9hbDN6Mks3Y3YxQ0pBelFfLUVJRW9scUlFSlNTV2FxUC9pM0ZxWHd5N2tvOXNUdU1SYVlxbHRaZXV4Nkljcl92Ty5qcGciLCJhbHQiOiLQoNC10L_QvtGA0YLQsNC20L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwINC80LXRgNC-0L_RgNC40Y_RgtC40Lkg0Lgg0YHQvtCx0YvRgtC40Lkg0LIg0JrQsNC30LDQvdC4In0seyJ0aXRsZSI6ItCY0L3RgtC10YDRjNC10YDQvdCw0Y8iLCJjYXB0aW9uIjoi0J3QtdC00LLQuNC20LjQvNC-0YHRgtGMLCDQtNC40LfQsNC50L0iLCJocmVmIjoiaHR0cHM6Ly9hdmFuemF0by5ydS9pbnRlcmllcm5vZS1wb3J0Zm9saW8iLCJpbWciOiJodHRwczovL2kud2ZvbGlvLnJ1L3gvemZOV2cwUkFjdENhWXZDZFA4TlM2aDNRY0txSU9PN0kvb1ZDbXBzUjJBMF96Q0J1V1FibTdkSll3TlE2eXNvcUUvVHBhRWI5UVp2TWVpODA3VHZHVzJoX3QtTkJYTXpEZVAvU2R2SnZFc3dydlJpVGRkaFVpQlJsdjkxdTR0YXo5X0kvcmFDZnNJSS02Rm1adU9OZkFxSGI3dy5qcGciLCJhbHQiOiLQmNC90YLQtdGA0YzQtdGA0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwINC60LLQsNGA0YLQuNGAINC4INC00LjQt9Cw0LnQvS3QuNC90YLQtdGA0YzQtdGA0L7QsiDQsiDQmtCw0LfQsNC90LgifSx7InRpdGxlIjoi0JLQuNC00LXQviIsImNhcHRpb24iOiJSZWVscywgU3RvcmllcyIsImhyZWYiOiJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIiwidmlkZW8iOiJodHRwczovL3ZwLndmb2xpby5ydS92aWRlb19wcm94aWVzLzU5U1NlX2ZuX2tlbXd3MXA5RUdEUEl0dU95blBTa2xxL1JrSm9VZk1haXVsU0ZMYmJTTldTRlozV092ZlNJUDh4L1RHZmRndGpyV1Z2MjU1MTlUR2NUQjJJbXZJczBBUnBoLzhGQVFNeWtEVGVDY3VxTW5uanRtcTRNNjE0bTR5MENiL3FkajNpLXZQamhlZ1ZCOUVtMFZ3OTZadk1EN3FwOU51L2tWYVducmdFV01tWHIwY1NVSlRCRWp1dVpJMXBSWmRQL0YyM29qeER6Tk1UUk1YVGZ4SXFQVEEubXA0IiwicG9zdGVyIjoiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL2FsM3oySzdjdjFDSkF6UV8tRUlFb2xxSUVKU1NXYXFQL2kzRnFYd3k3a285c1R1TVJhWXFsdFpldXg2SWNyX3ZPLmpwZyJ9XSwiYWJvdXQiOnsiaW1nIjoiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBLzJfLTBmM1RCcVhkOVo3OWdXcGF6bldfTEU0bFppVDR2Ly1JOTA0TzltTWJiUHpVOGJKdk5mcXVJQUFRdkszd1hCLzRSNGV4U1FmQjFYVTJ2Wmk0Vzlqd0EuanBnIiwiYWx0Ijoi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQv9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90YvQuSDQv9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsImxhYmVsIjoi0J7QsdC-INC80L3QtSIsInRpdGxlIjoi0JHQvtC70YzRiNC1INGH0LXQvDxicj7Qv9GA0L7RgdGC0L4g0YTQvtGC0L4iLCJwMSI6ItCvINC90LUg0L_RgNC-0YjRgyDCq9GB0LzQvtGC0YDQuNGC0LUg0LIg0LrQsNC80LXRgNGDINC4INGD0LvRi9Cx0LDQudGC0LXRgdGMwrsuINCc0L3QtSDQstCw0LbQvdC10LUg0L_QvtC50LzQsNGC0Ywg0LzQvtC80LXQvdGCLCDQutC-0LPQtNCwINGH0LXQu9C-0LLQtdC6INC90LAg0YHQtdC60YPQvdC00YMg0LfQsNCx0YvQstCw0LXRgiwg0YfRgtC-INC10LPQviDRgdC90LjQvNCw0Y7Rgi4g0JjQvNC10L3QvdC-INGC0L7Qs9C00LAg0LLRi9GF0L7QtNC40YIg0L_QvtGA0YLRgNC10YIsINCwINC90LUg0YTQvtGC0L7Qs9GA0LDRhNC40Y8uIiwicDIiOiLQl9CwINGB0LXQvNGMINC70LXRgiDigJQgMjUwINGB0YrRkdC80L7Quiwg0L3QtdGB0LrQvtC70YzQutC-INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC_0YDQtdC80LjQuSDQuCDQv9GD0LHQu9C40LrQsNGG0LjRjyDQsiDQvtC00L3QvtC5INC40Lcg0LPQu9Cw0LLQvdGL0YUg0LrQvdC40LMg0LjQvdC00YPRgdGC0YDQuNC4LiDQn9C-0LTRgNC-0LHQvdC-0YHRgtC4IOKAlCDQvdC40LbQtS4iLCJzdGF0cyI6W3sidGFyZ2V0IjoiMjUwIiwic3VmZml4IjoiKyIsImxhYmVsIjoi0KHRitGR0LzQvtC6In0seyJ0YXJnZXQiOiIyMDE5Iiwic3VmZml4IjoiIiwibGFiZWwiOiLQk9C-0LQg0YHRgtCw0YDRgtCwIn0seyJ0YXJnZXQiOiI1Iiwic3VmZml4IjoiIiwibGFiZWwiOiLQndCw0LPRgNCw0LQifV19LCJhd2FyZHMiOlt7Im1hcmsiOiI1MDAiLCJzdWIiOiJweCBBd2FyZHMiLCJtZXRhIjoi0L_RgNC10LzQuNGPIiwiaHJlZiI6bnVsbH0seyJtYXJrIjoiQUdPUkEiLCJzdWIiOiJBd2FyZHMiLCJtZXRhIjoi0L_RgNC10LzQuNGPIiwiaHJlZiI6bnVsbH0seyJtYXJrIjoiMzUiLCJzdWIiOiJBV0FSRFMiLCJtZXRhIjoi0L_RgNC10LzQuNGPIiwiaHJlZiI6bnVsbH0seyJtYXJrIjoiUG9ydGZvbGlvIiwic3ViIjoiQXdhcmQgwrcgMjAyNCIsIm1ldGEiOiLQv9GA0LXQvNC40Y8iLCJocmVmIjoiaHR0cHM6Ly8yMDI0LnBvcnRmb2xpb2F3YXJkLmNvbS8jc2VjdGlvbi0xOTAwNjE1NyJ9LHsibWFyayI6IlRoZSBQbGFjZSIsInN1YiI6IkVjb25vbXk8c3VwPsKuPC9zdXA-IMK3IFZvbC4zIiwibWV0YSI6ItC_0YPQsdC70LjQutCw0YbQuNGPIiwiaHJlZiI6Imh0dHBzOi8vYXZhbnphdG8ucnUvbmFncmFkYS10aGUtcGxhY2UtZWNvbm9teSJ9XSwiYWR2YW50YWdlcyI6W3sidGl0bGUiOiLQltC40LLRi9C1INGN0LzQvtGG0LjQuCIsInRleHQiOiLQndC1INC_0YDQvtGI0YMg0LfQsNC80LXRgNC10YLRjC4g0KDQsNC30LPQvtCy0LDRgNC40LLQsNC10LwsINC00LLQuNCz0LDQtdC80YHRjywg0LjRidC10Lwg0LzQvtC80LXQvdGCIOKAlCDQvdCw0YLRj9C90YPRgtCw0Y8g0YPQu9GL0LHQutCwINCyINC60LDQtNGAINC90LUg0L_QvtC_0LDQtNGR0YIuIn0seyJ0aXRsZSI6ItCf0L7QvNC-0YnRjCDQsiDQv9C-0LfQuNGA0L7QstCw0L3QuNC4IiwidGV4dCI6ItCR0L7Qu9GM0YjQuNC90YHRgtCy0L4g0LrQu9C40LXQvdGC0L7QsiDQs9C-0LLQvtGA0Y_RgiDCq9GPINC90LUg0YPQvNC10Y4g0YTQvtGC0L7Qs9GA0LDRhNC40YDQvtCy0LDRgtGM0YHRj8K7LiDQndC4INC-0LTQuNC9INC40Lcg0L3QuNGFINC90LUg0LHRi9C7INC_0YDQsNCyIOKAlCDQv9GA0L7RgdGC0L4g0YDQsNC90YzRiNC1INC90LjQutGC0L4g0L3QtSDQvtCx0YrRj9GB0L3Rj9C7LCDRh9GC0L4g0LTQtdC70LDRgtGMINGA0YPQutCw0LzQuC4ifSx7InRpdGxlIjoi0KDQtdGC0YPRiNGMIEhpZ2gtRW5kIiwidGV4dCI6ItCj0LHQuNGA0LDRjiDQstGA0LXQvNC10L3QvdC-0LUg4oCUINGD0YHRgtCw0LvQvtGB0YLRjCwg0YLQtdC90LgsINGB0LvRg9GH0LDQudC90YvQtSDQvdC10YHQvtCy0LXRgNGI0LXQvdGB0YLQstCwLiDQntGB0YLQsNCy0LvRj9GOINC_0L7RgdGC0L7Rj9C90L3QvtC1IOKAlCDQstCw0YEuIn0seyJ0aXRsZSI6ItCb0Y7QsdGL0LUg0LvQvtC60LDRhtC40LgiLCJ0ZXh0Ijoi0KHRgtGD0LTQuNGPLCDRg9C70LjRhtCwLCDQstCw0Ygg0L7RhNC40YEg0LjQu9C4INC00YDRg9Cz0L7QuSDQs9C-0YDQvtC0LiDQodCy0LXRgiDQuCDQutCw0LTRgCDRgNCw0LHQvtGC0LDRjtGCINCy0LXQt9C00LUg4oCUINC70L7QutCw0YbQuNGPINGN0YLQviDQuNC90YHRgtGA0YPQvNC10L3Rgiwg0L3QtSDQvtCz0YDQsNC90LjRh9C10L3QuNC1LiJ9XSwiY3RhIjp7InRpdGxlIjoi0JTQsNCy0LDQudGC0LUg0L3QsNC60L7QvdC10YY8YnI-0YHQtNC10LvQsNC10Lwg0L3QvtGA0LzQsNC70YzQvdGL0LUg0YTQvtGC0L4uIiwiYnV0dG9ucyI6W3sidGV4dCI6ItCe0LHRgdGD0LTQuNGC0Ywg0L_RgNC-0LXQutGCIiwiaHJlZiI6Imh0dHBzOi8vYXZhbnphdG8ucnUvY29udGFjdHMiLCJvdXRsaW5lIjpmYWxzZX0seyJ0ZXh0Ijoi0J_QvtGB0LzQvtGC0YDQtdGC0Ywg0YbQtdC90YsiLCJocmVmIjoiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsIm91dGxpbmUiOnRydWV9XX0sImZvb3RlciI6eyJjb3B5IjoiwqkgMjAyNiDQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLCJzb2NpYWxzIjpbeyJsYWJlbCI6Ikluc3RhZ3JhbSIsImhyZWYiOiJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyJ9LHsibGFiZWwiOiJUZWxlZ3JhbSIsImhyZWYiOiJodHRwczovL3QubWUvYXZhbnphdG8ifSx7ImxhYmVsIjoiQmVoYW5jZSIsImhyZWYiOiJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byJ9XX0sImJhbm5lciI6WyJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvQ3pMQVBwMFlXVnlqYnhBbEQ2VVJnSmtKOEFqQnF2TlgveVpadUtCRWRWLVFRb3RWbmdhbEt4Sk1IbjZGRmZRRTkvcTBYNjZVM3FHekxEZjg1aVhUOVRTUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvcWNsNnNfQWFxVEI3dnJ5UzVfMXZISm5KRFNqUzl0SFovNG5peWF1T3dMUUVRMnlUb2hybjlYdmk1ODJIb042YnovMjNicDNKUWVRMEVadmF0eTdDVFFiUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvYlFQNmVnYWNOVV9oSHloUXA0emhNZ3pZR3kwU3pDMVovcDhLd3JlNU1wYVdSbC1lYllJU1BoWTdITVRtZTAya1MvQWtCTllUSGV4SnUtaWEzMWZqUGhiQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvdnNuaWg0QmZYbXJmVElyNnVaSTV1MnRTTUtWWGc5TW0vOFRDM28wZDM0b3kxYWhtTGhiSVNCZEFMalBSQkVsNWsvQ3NUYkVBMFFpb3pGN2U5MVl1UFZfZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvSzVhcWI1a0ZYVkhpQ0FhY20xYmJxME5tMjhiUUZrWU8vZWRGTVNodWx6bGo2YmJKMEJtZl91QjB3LUZ6eWhDQkkvdDFSWVpmTG14LVJDUVRpUFZYdno4Zy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvSTNCVk1vSHc3TEJyeEU2MElhR3kzU2l6WVZXSm5ySnMvMThfZklIZjAwQUJ5eVRtdnlmTmlCRnZKVTd1b0NDbjMvRjBIbURqdmVZY2VPY09ERHlhaEtJQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvZXNQM1BDQml6Q1p6UlRMS1lNVFVZVGhPaG5ObFNwVHQvbWJpQTVtY29BZG90NU5nS2tWdFlkYXZ5aHlyVlZSd2kvYlh1VXJmNUxWTXNRLThJbFl0TjRYZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvT0xHLW45TTUxYVZqYkliOXpURDFCaHZMNURsNWE5a1ovUjUtQmppNE95dEdpZ20yZXhRTFBoa25PN1l0bXJDVDUvbHBJYWtrbGNJMGk0Zm9yVVBRUmZHQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvYzdCV2xVRXgwLXhLNnJpaDdaNnlmVnJxTDU0MjhaU2svNV9yVjNBdnZENXZUa19adEZoZ0w2Wk5CWXUyRWRDZGwvUlJGOUlReDdmbHNBVUdZenVzVTQ1QS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvaGNWVGg3VEZLVUM0Y2ZPWVZDT2VnODJadXA4b0FDdGsvLVBEdVhMckJhNWJVbWJFaTRoWTBJaEVpNnBvdnFnRXovNjE5WHdnLVRjYndQckRXZTljTDVUdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvZ1pEZEx3S1dYVjNJWkR5WEhTTUxZbnJJcDJudFFfdlEvVm12OU5uazhOdDk3SHBGYTZWVHQtQm1PZTR2b18ybmEvdHVGdHhCNUJ2QWhnRUVNT0k2WjlNdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvNkNxdTBiZVZ3dXlJMXJMd2JnYnJhQXN4WThkVERTRGIvUDNNOUlEM2xRNnVIMFZ5T2M4RFdCYlNsX2Q4M1NRYkovWTlQMkhxemZxa3VTOXRIZjhuOTZydy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvalNYSkZORDhuenhLanN3bWo4WWRoa1ZadHNDRk9CZEovWDhYdWRZMUFTSlR3YVluVVppNVZCbkNtVnpmWFFmbDQvak53Tm1zTnJULUFyaWxRVm45S3VUQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveEJ5WkJ2RnZhNkNNWDZSaGdJMzg2eG1zNmFRLXNGNFQvRVc3cWo3ekJXTWJwbWxIM3FHREQwdzdhcUZVbjdSMjUvemN1RGlvMGxfUHZtYWhydnFwcHBwZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvYzd4S0RVMV9LT0RlMDFhWWFCQzB5VXphNWFTTnZfYnQvS2JtSnh5dXJndTVSd1BjLUVVWWJNUVRtdHlTbnh1RV8vcXo1d3NTakxCWm5sY1pEZ3JtQ0pSZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvU2J2Y01LYlBVcWtMMTBqeTBVajJTUEZtUFFoRXB4YkwvZEVVenhmOGVJaF9JZ0RhSDdoSDM3VV9pVllkOTRyUDkvMFZQdzFqMkRsQkhSOXFVRnMyamY1dy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvRzJaRVhlU3kzX25fdzZDUjBkazA0cDNYWjBPM2JLX0ovNXNiV3hBRWR5YVJ1Ql83WFliRnh6NGtQMlVxNFlxbnMvcGJFVmtZajRkVm1GQ2w4bUNJRXJKdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvOGN6V1o5LUJFUzdLcUV6dXRuMmE3TWp2U296VkdMVk8vU3lVQ1huZFB3QldFbnVBYzRiX2tFZm1ZMHBzcjE0cU0vQ2ptbzNHMmdyZmJBSTNqLWQ2S3FzQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvV2dhZU1XQzMtc1kzdWNwc1VTazlMYWV4czVTcHNCVFIvTEhjVE8yT296NXdXTzdwSWtIWHEwX1FpTFcyRHBzVksvbXJ1Z0dMTWttUUdxZmxlVUVFRVlnQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvNTZqX1VkX2tLOFBqZjJ4RzYxX3huRzgxcS1xdl94bGYvRm9yQ1lCRUtLM0pxWXc2ZzB5anVLRTRNQ2Y2VjBSN1gvdlZrd0J5d3M1RDRTaXNpZ19IYVUxZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvU0UyM0xueDJ5MGVOcFZqQ0Q4LUw2QlRtYXJ0ZjdZME8vTkZlY2NKMzYzcmdJS0Rva093Vkkxc21QNTNZNXhxSmUvaTJYRzlYMk9IdzYxcEY5a2UzQW1ndy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvbTFiZElEVGQ4b3RhWkl6a3ZmSW5QbktNSkRPLTBRcXYvQ1F0a21OSzlSQXZ4dkJGemtHSWpoTF9kbnR3dXhlVWYvX3BpVHk2cnpCY3ZhVEhVVk9DT3NEUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvT1gyYXN5T1NqTTY2bC1tclBrZmMxdk5jd2FUYTlxWUgvNDU1MlB1eGhRWnBmcm93YmtqVWNubm1kaUt4VnA4NjMvMWEweXRueWlDV0hRN0FIc0M5THEydy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvOUhfTlN0akFXV3NYRktMX1FMRm1aVXM5WVBjZ1JRY1gvSlZJYXJrdzFqSUwyb2FreDZQM09CWEFSMktKdklzamoveGFkVW5OWnRYdHI0T2RwLTc4QlhEdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveW9wbFhtemZOTjI0Y3J2bnd2Tm5QU09nY2ZZLURNT0UvQzFaS2NvUEdEWTMzVVpwUjJKbUpUVF9kazRDY0c1MmkvcFItcTNHMWlNYm12Z2paY2RUVUc0US5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvWFJfUGFnbHU5cGlOZ0wyTXRGWWFkSzJCcmJOQTNZamUvNmRFN1k3QkczbzljV19IcUdOeTNrNTludWNFUjBLb3YvWE1QdDVaemtLaXgtUlZ5dXBudjRidy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvQ2NCazdvcnN1a1dvSnpuZHplQ1VySE40ZUNidl9xT1AvMUNDZ2hrNlpPY0MzNE5BRlAtbVE3UmR2YnFXNTFVLUEvNElQdUF6OUtrZXlQWFhaX1Nnckp3US5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvOXBqTDlTa1R4ZkpyQlVhQ3FWcmE0YXNLSXFsNS1NaDIvaEU2VjVsM3ZVYll6aF9FZEpGeDZVdWlXUUE2OHBXNmcveEF2N0RYSXJxdjB0V1FIZHdQalhUdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvME9ReXNHdU1VZVFlNnh2RWZwb3NvaDRBaVpURFF5ZXkvdVM5SWgwZkV1ZXlZZjRMMktmZXRuLWI5SUtXN0FGY3cvMmVTbjlmTUNvMzE3RTBJZ0VhdC1oZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvV3dkMHhtRFJ0VU1FWHBxa3hHaG1OLW1VLVU3MGVrQW0vRkJUX05vUjl5TkFoVFg5a3hpWXhBbWhYZEtVbnhxTlYvdmliTFNPelJTVUFrX0p1YUNBREQ1Zy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveVVFSGFCUUJOcW01dmZQZG55YVROWFBJMzlvUUs5T0wvUXlvN0duY2lEaGJkaHpLX2E1SUNweW9HWHQ2eHE4cnovMXl0NUpHeXNKYkI4SXg0eFU1U1Z0QS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvZl9tNW43SzhHLTF3TW9EeUlaVk4wQ1M3bXJ3dVlDbEwvQlExeHF4V29abXJDdThDN2MyM1ZDUms0cGJ2cU8yd0UvOGxDd0×0Qm8xQUxUM2MyZ2ZDSWZrUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvUkhwWWs0VXQ4c2dpRjU1bjI2LUNWeDNXNDhQWXFLa2UvZUdPa21FOUhsMkRqSWlTU3cyQ3owa09rbndFanU0NWIvOFB4OWFIMGd4ZDFpeUJSNEtOblZpUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMWVfYWRhcERnWlNHVjgwUnZoOUJpRjNRb2gxazBIZ0svaUJsMF90azhfOU82cHV3cEtybUtJQ2ZvUkNsaWZYNGgvN1pOV2N4Mk9UcGRucFVTSUtxbF9ZZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvZmpsMmltWkFqbTFLQUM4ak54aGJzOWJhakxKMWRxckgvQ1g4OXM4bElPX096dW5CeUpjcDdUSFVXN1RXdU90N3kvTG1nR1o4RGVhcFBhT2JnMFFEUUV0QS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvNHdBbTdNZWtNay1QaFh4WmtMODZKZHAwTW5sMDU2LXAva0ZrcDhmaFpmZFplNS15ektScFJ3OGEyNEZIT3NRbEUvY3FLWFd0Vmx6enJUR1RCYnNNQTVMUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvRnZJUW5Dd0FoQ0pJWjhvNERpeld2V3A3X0t3ZlBjNlQvcXVMU3VRTnlrcmNrWTZFNlJteHRPOUNBOF8zTndHWGcvWTFuMXR2eEVMaTIyV1ZFaEJlWUJady5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvNnpkbllGQ0diOW5KOHQ2YU9GXzU4dlkyNW9PNW5EangvTkNNWXZ5QTR4Z3FsMll4dGpkVmZiZC1KeVNrS080TWEvajkxc0JUNm9fQkhTVEZfTXVhRFFIQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvY2s3SDN3S1E1WXFiV2FfaVY4WXJFQXZWMjFTaTFJV0svY09RUG5Ycm5EUlhOZGxXY1F5Mm02NTBhTmJ5OHRyNmkvdFV5RGpjWHpPTTFPUWJXbi1sc3FEZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvU19uMlZsN1MwcGdVQUs4RWRRbHlnc1pkN3FicThyeGkvNjlBSnJIT0lpMl9kVENobTV2NUlaQnVwVVNQeExLTVcvX1IzdE9FMnV4N2cyak9iaXFxMkRjZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvcjFMelQ2cm9KUHk5Q0VFLXZjTmlySlVwQWkwZTVvNW4vWDBpbW9XVnRlajdaSGktZHpIWHpwaXVXTVd6OVhlUDUvMFZrMTFqR0pQcUhPeENUd184eGVwQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvUDBudmtXa3k4Y2NyTWEtUjlWb3daVXNYb1JxTEJFeEcvNXl0bzFMMEQ0eW9nWGhYbE1LWTFkZklUTURBeldIRDYvX25OMFhqb0RFTEJKeHNPTFhWV18tZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvNWswak9HUjZSMHc2RGRzc2RjRkE0QS0tOS1WUk9ibzkvRHlFbFdMRlRtbjN1YlpwWkktMlNDQnJLOU5nenJJUDgvSkJSMlpHWWpMWjRMTzhYYUFXSG50Zy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveWRfVUp6UUcySlpuSFdRbFdhRjBsQlVxM0NKVGxLam8vdTdWNkU0ZDdGR2U2MG1RZmkwdTliRGplLW9ObVVTZncvTlp6YlpnRVVEdnhSbEd5cGRRQmxYUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvcDV2Mk1ULXJGdUFzbDhlRHZKSF8tY1V6WjQydEhKRUQvNDRscy1CSkdpd0FVb0JIbFVrMVJuX3N1ZWJCMXN6cVIvbFlRNndEVmpmSVE2T2k2SzJMSkF2Zy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvNDl6bXdxdVpQUnFQYTM3STZoX0ctMzJqWHRQRUtKcmgvZE9XZzhudmdfUHd6bWVNTW1mY2Ezd1FiSFNPdGRxcVIveXR1R1hCVnh2VHpwY0pVc2JhaU1VQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvNGJITVlHVDhSZldTMGJ5RGRpVk5nRlc4bUt1VWczQWovdTlHVzVpNTcwaWxnQXdZNEZxU2loY3JfY1BGR29TWmwvX3BhWlVqZUl3RHZCcG9GYldTeDdDUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvN081c25XaENaNUNURF9TT1N4Wnl2bm1LeTdYbTA3WXQvUndSNUtRTE44d1lTZzBfQ21pUEVrWUJpenNVNml4MFcvaUtDbHdVNFF3ak5VNWVtQlhHdkNZUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvd0NzaDFGYWc1ai04SjVsbzhkdlZ6MkppYmVyU2N5Yzgvb2RsYmZkX0I5aWlNS3dqNFlQaGh1NUU0WkVfODZWNjYveThnS2ZXWWUwTFBrTkQydlRHRHhtZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvZWVTZU1Xbkx3MUlHSlJHTW5pM2l6aWVNNUttSEVTS0wvaVpqWDAza3Z1UkF6b1B6TERSbVFBMGV5N2VNRUwyOWgvMy1WcDJXd29yVGN0cDQyWlNIZDZiUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvUHh6bmkwX0JWT001bDZGMlV2MWp5cHFXeTg4cml6bnkvSEltSmN0Rlgzc3BkZHlhSExfbEtRTjREUzR6cldmTEcvbkJEemFtYnBYWHZRUkhDTlZlOHRDdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvQ1ZWWTZiZVByelUzTnpUZVNXRW1BT21jSTVsSlJyRGkvd2xqTTZUejJKaFY0Wl9IdHR5QjVuckxvQk9aLW5SS3kvMHBiVy1wNHZSa3JLNjdhbUd6M1BvUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvaG9HM1JzZVNmTHdDczVidWdvTE10SlowS0xHcHN0OUsvMnJtc2NPYWoyLVM3TkdxNEpmSHZwcHlxMmtxNUV1WDgvQnByOVdjRmhVQ1ZORTRzalQ5TkR4US5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvdkxmYWFjc0p6M2NvOC1mVUJ2bWtzOXNoV0hXQWxHSTEvRkdLUmRjWFFTQ2xRV1lRbzc1WG9JX2JMMG9uMGFsWFMvS1RTcDQ1NG9md3hyYzVhd1ZsdFVady5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvQ19VSnNWZjFkSlZsMElKMF8zNVQ0VWU2WE1LVFA4dTYvRDFZM3hoYkFfOVlaWnplX0cxdnJyOGdNc2IxUi1WMlgvTnZUWTFlMTRTZ3Y2YnJnWVhyZlhIUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuZmlyS0JBMG1IVzUvRTQweHMxXzlpVWJMaEctd1J1Q29SVDBPMFgyRzBmMVgvQUY2UUNpUW1EY21jN2FWM1RMMkdmdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuUnppLTBZS3dGQXgvVnYydGNPVTg1WXZPeGdHWFBNRHU4SlZ6WUxGM2hqVEYvbWl3UWJ3Z3QxaDJIOGNCdXRYOVVGZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvTXhEUENQZDNSakFtMkEtdzNuWWpHVXA3ZFd5aGw5TkIvdmxFOW9FRFRuN21yNURXTkpnTklkMzlIQS1WWk9HaEYvR3FmZFg3bWJrYk5icWJ0aTRBQWlEZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuZDFGY280SlVweHkvRWN4THZrQXAxVTM2cDZGVUU2SW1zd1NRUHpnRkxWNlEvekR6RXp6UkpzQ1VEV0pKM0M4dFlYZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuZHBfc3FGbnRGcl8vRXZzTWlrVzYxXzBrUnBwTU5YVTFjM1pnZUpWdlJpczYvQzhQdndyRnVOUjBLbTA3QTloc1ktQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuYV92cWxMZi1VLXIvVHhoVW9iZzFTUDM3RE5GWTRNQ0lNNWZXLUF5Mk1Na24vMmY2ZElLOUlFdWw3YmRyRmpIajZfUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuVzVEVmZLN3dET3AvaWxpUHJpRUIwaVd2UjFxV2RscFl5ZjBtRE1PTmpGN1cvQmk1Vmg5bkpjZjB3S3M1OC1aMHJwZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuVmYwRzhMNHRBMlovVXdJNVc3ZnFGSTUtZHZEWnRzY3FHMW8tMnRGWHhXR0cvSHE2bWRVdEVoZGxxOHpRaTlLZWNlQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuWndEWHNteEdySWsvMnkzcEswVnRkRVoxY3IxZHZsOEtHcVVpYkNDM19fdEYvNnQtZTBGMmpLdjRrbjZZRmJPX2N6US5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuWkJvYURhaWhXelQvQks1SHJsWUM4NlJ3eEFHU1BPdEVDclhYbTRoVDNhOHYvc0lUemtWMU1ydm1tcmlxV2xIbzBqZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuV2c1ZWNLaHVKX3cvTTZ1cG9aVGxNeHF2UUtVNDNRT0h2aS1pamtiaG44NmgvWm1KWGxrRzI5RlRndFRiNEJ6UGxnQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuYkpXOF93UE5jTVovSkVqQW13NEo4Ynh6VFdaS2Z6N1lOQUpQSW9FMW1oZFovdVdXcE5SdWk3R2xaQ0lWZlhacHlnQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuWW9wSWI1MG5VOHQvZTdDd3QwM1hJNVU3YVhGOHB2NzhEWlBMVmIzSVFRejAvMTQxcHNEQjdwZkpWN1Fkb3BhT2I4Zy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuVW5jbGJ0NC1PT20vOER4cVdfUHZDR2hQM29scHdURS0yUURTV05WX01Kbm8vcjlYaVlsWmpRNDVrdDFpYmEwZi1QUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuZWVZcUNDQU5US0wvNERjeUxtTkhpMEE2WjJBVXRhTVg4M2lUY2hzTnJ3RlAvUTVCNnM0RW9uWFdSNGE4N1RHZ3duUS5qcGciXX0AVZ-CONFIG-END
AVZ-CODE-STARTLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQntCR0J7Qm9Ce0KfQmtCQINCd0JDQkdCe0KDQkCDQmNCd0KHQotCg0KPQnNCV0J3QotCe0JIKCiAgINCt0YLQviDQvdC1INGB0LDQvNC-0YHRgtC-0Y_RgtC10LvRjNC90YvQuSDRhNCw0LnQuyDigJQg0LXQs9C-INGB0L7QsdC40YDQsNC10YIgcGFjay10b29sa2l0LnB5CiAgINCy0LzQtdGB0YLQtSDRgSDQuNC90YHRgtGA0YPQvNC10L3RgtCw0LzQuCDQsiDQvtC00LjQvSDQsdC70L7QuiDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiyBhdnotZGF0YS4KICAg0JzQsNGA0LrQtdGAINCyINC-0LHRitGP0LLQu9C10L3QuNC4IFRPT0xTINC90LjQttC1INC30LDQvNC10L3Rj9C10YLRgdGPINC90LAg0YHQv9C40YHQvtC6INC40L3RgdGC0YDRg9C80LXQvdGC0L7Qsi4KCiAgINCX0LDQv9GD0YHQutCw0LXRgtGB0Y8g0LfQsNC60LvQsNC00LrQvtC5INC40Lcg0L_QsNC90LXQu9C4INCx0YDQsNGD0LfQtdGA0LA6INC30LDQs9GA0YPQt9GH0LjQuiDRh9C40YLQsNC10YIKICAgYXZ6LWRhdGEsINC00L7RgdGC0LDRkdGCINC-0YLRgdGO0LTQsCDQutC-0LQg0Lgg0LLRi9C_0L7Qu9C90Y_QtdGCINC10LPQvi4KCiAgINCc0LXQvdGOIOKAlCDRgdC10YLQutCwINC60LLQsNC00YDQsNGC0L3Ri9GFINC_0LvQuNGC0L7Qui4g0J_RgNC10LbQvdC40Lkg0LLQsNGA0LjQsNC90YIg0LHRi9C7INGB0L_QuNGB0LrQvtC8CiAgINCyINC_0L7Qu9C90YPRjiDRiNC40YDQuNC90YM6INC-0LTQuNC90L3QsNC00YbQsNGC0Ywg0LjQvdGB0YLRgNGD0LzQtdC90YLQvtCyINC30LDQvdC40LzQsNC70Lgg0LLQtdGB0Ywg0Y3QutGA0LDQvSwKICAg0LAg0L3QsCDRgtC10LvQtdGE0L7QvdC1INC_0YDQuNGF0L7QtNC40LvQvtGB0Ywg0L_RgNC-0LrRgNGD0YfQuNCy0LDRgtGMLiDQn9C70LjRgtC60Lgg0L_QvtC80LXRidCw0Y7RgtGB0Y8KICAg0YbQtdC70LjQutC-0LwsINC4INC_0L7QtNGF0L7QtNGP0YnQuNC1INGC0LXQutGD0YnQtdC5INGB0YLRgNCw0L3QuNGG0LUg0YHRgtC-0Y_RgiDQv9C10YDQstGL0LzQuC4KCiAgINCh0YLQuNC70Lgg0LTQtdGA0LbQuNC8INCyINC-0LTQvdC-0LwgPHN0eWxlPiDRgSDQv9GA0LXRhNC40LrRgdC-0LwgYXZ6bS06INC40L3Qu9Cw0LnQvdC-0LwKICAg0L3QtSDRgdC00LXQu9Cw0YLRjCDQvdC4INC90LDQstC10LTQtdC90LjQtSwg0L3QuCDQv9C-0LLQtdC00LXQvdC40LUg0L3QsCDRg9C30LrQvtC8INGN0LrRgNCw0L3QtS4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIFRPT0xTID0gWwp7aWQ6ImhvbWUiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0LPQu9Cw0LLQvdC-0Lkg0YHRgtGA0LDQvdC40YbRiyIsc2hvcnQ6ItCT0LvQsNCy0L3QsNGPIixoaW50OiLRgtC10LrRgdGC0YssINGB0YHRi9C70LrQuCwg0LrQsNGA0YLQuNC90LrQuCwg0LrQsNC00YDRiyDQsdCw0L3QvdC10YDQsCIscGFnZXM6WyIvIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCj0J_QoNCQ0JLQm9CV0J3QmNCvICB2Mi4xCiAgICjQsdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAg0YPQsdGA0LDQvdCwINGB0L4g0YHRgtGA0LDQvdC40YbRiyDigJQg0YDQsNC30LTQtdC70LAg0LIg0L_QsNC90LXQu9C4INC90LXRgikKICAg0JfQsNC_0YPRgdC60LDRgtGMINCyINC60L7QvdGB0L7Qu9C4INC90LAgaHR0cHM6Ly9hdmFuemF0by5ydQogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIuINCi0L7Qu9GM0LrQviDRh9C40YLQsNC10YIg0YHQsNC50YIg0Lgg0YHQvtCx0LjRgNCw0LXRgiDQutC-0L3RhNC40LMuCiAgINCg0LXQt9GD0LvRjNGC0LDRgiDQstGB0YLQsNCy0LvRj9C10YLRgdGPINCy0YDRg9GH0L3Rg9GOINCyINCx0LvQvtC6INC90LAgYXZ6LWRhdGEuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooYXN5bmMgKCkgPT4gewogICd1c2Ugc3RyaWN0JzsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enAtcm9vdCcpKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnpwLXJvb3QnKS5yZW1vdmUoKTsgfQoKICBjb25zdCBEQVRBID0gJ2h0dHBzOi8vYXZhbnphdG8ucnUvYXZ6LWRhdGEnOwogIGNvbnN0IE1BWFcgPSAxMjQwOyAvLyDQv9GA0LXQtNC10Lsg0YjQuNGA0LjQvdGLINC60LDQtNGA0L7QsiDQsdCw0L3QvdC10YDQsCwg0YHQvC4g0LjRgdGC0L7RgNC40Y4g0L_RgNC-0LXQutGC0LAKCiAgLyogLS0tLS0tLS0tLSDQt9Cw0LPRgNGD0LfQutCwINGC0LXQutGD0YnQtdCz0L4g0LrQvtC90YTQuNCz0LAgLS0tLS0tLS0tLSAqLwogIGNvbnN0IGRlY29kZSA9IChyYXcpID0-IHsKICAgIGxldCBiID0gcmF3LnJlcGxhY2UoL1vDl-KcleKcll0vZywgJ3gnKS5yZXBsYWNlKC_igJQvZywgJy0tJykucmVwbGFjZSgvW-KAk-KAkuKIkl0vZywgJy0nKQogICAgICAgICAgICAgIC5yZXBsYWNlKC9bXkEtWmEtejAtOVwtX10vZywgJycpLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7CiAgICB3aGlsZSAoYi5sZW5ndGggJSA0KSBiICs9ICc9JzsKICAgIGNvbnN0IGJpbiA9IGF0b2IoYik7CiAgICBjb25zdCB1ID0gbmV3IFVpbnQ4QXJyYXkoYmluLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbi5sZW5ndGg7IGkrKykgdVtpXSA9IGJpbi5jaGFyQ29kZUF0KGkpOwogICAgcmV0dXJuIEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHUpKTsKICB9OwoKICBjb25zdCBkYXRhSHRtbCA9IGF3YWl0IGZldGNoKERBVEEgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KS50aGVuKHIgPT4gci50ZXh0KCkpOwogIGNvbnN0IG0gPSBkYXRhSHRtbC5tYXRjaCgvQVZaLUNPTkZJRy1TVEFSVChbXHNcU10qPylBVlotQ09ORklHLUVORC8pOwogIGlmICghbSkgeyBhbGVydCgn0JrQvtC90YTQuNCzINC90LAgYXZ6LWRhdGEg0L3QtSDQvdCw0LnQtNC10L0uINCf0YDQvtCy0LXRgNGM0YLQtSDQvNCw0YDQutC10YDRiy4nKTsgcmV0dXJuOyB9CgogIGxldCBjZmc7CiAgdHJ5IHsKICAgIGNvbnN0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgYm94LmlubmVySFRNTCA9IG1bMV07CiAgICBjZmcgPSBkZWNvZGUoYm94LnRleHRDb250ZW50KTsKICB9IGNhdGNoIChlKSB7IGFsZXJ0KCfQmtC-0L3RhNC40LMg0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlKTsgcmV0dXJuOyB9CgogIC8qIC0tLS0tLS0tLS0g0YHRgdGL0LvQutC4INC40Lcg0LPQsNC70LXRgNC10LkgYXZ6LWRhdGEgLS0tLS0tLS0tLSAqLwogIGNvbnN0IGRhdGFEb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGRhdGFIdG1sLCAndGV4dC9odG1sJyk7CiAgY29uc3QgcGljayA9IChpbWcpID0-IHsKICAgIGNvbnN0IHMgPSBpbWcuZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSB8fCBpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLXNyY3NldCcpIHx8ICcnOwogICAgaWYgKCFzKSByZXR1cm4gaW1nLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7CiAgICBjb25zdCBsaXN0ID0gcy5zcGxpdCgnLCcpLm1hcCh4ID0-IHsKICAgICAgY29uc3QgcCA9IHgudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgcmV0dXJuIHsgdTogcFswXSwgdzogcGFyc2VJbnQocFsxXSkgfHwgMCB9OwogICAgfSkuc29ydCgoYSwgYikgPT4gYi53IC0gYS53KTsKICAgIGNvbnN0IGIgPSBsaXN0LmZpbHRlcihwID0-IHAudyA8PSBNQVhXKVswXSB8fCBsaXN0W2xpc3QubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gYi51LmluZGV4T2YoJy8vJykgPT09IDAgPyAnaHR0cHM6JyArIGIudSA6IGIudTsKICB9OwogIGNvbnN0IHRodW1iID0gKGltZykgPT4gewogICAgY29uc3QgcyA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgJyc7CiAgICBpZiAoIXMpIHJldHVybiBwaWNrKGltZyk7CiAgICBjb25zdCBsaXN0ID0gcy5zcGxpdCgnLCcpLm1hcCh4ID0-IHsKICAgICAgY29uc3QgcCA9IHgudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgcmV0dXJuIHsgdTogcFswXSwgdzogcGFyc2VJbnQocFsxXSkgfHwgMCB9OwogICAgfSkuc29ydCgoYSwgYikgPT4gYS53IC0gYi53KTsKICAgIGNvbnN0IGIgPSBsaXN0LmZpbHRlcihwID0-IHAudyA-PSAyODApWzBdIHx8IGxpc3RbMF07CiAgICByZXR1cm4gYi51LmluZGV4T2YoJy8vJykgPT09IDAgPyAnaHR0cHM6JyArIGIudSA6IGIudTsKICB9OwoKICBjb25zdCBnYWxsZXJ5SW1ncyA9IFsuLi5kYXRhRG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpXS5maWx0ZXIoaSA9PgogICAgKGkuZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSB8fCBpLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCAnJykuaW5kZXhPZignaS53Zm9saW8ucnUnKSA-PSAwKTsKICBjb25zdCBnYWxsZXJ5ID0gZ2FsbGVyeUltZ3MubWFwKGkgPT4gKHsgZnVsbDogcGljayhpKSwgc21hbGw6IHRodW1iKGkpIH0pKTsKCiAgLyogLS0tLS0tLS0tLSDQstGR0YDRgdGC0LrQsCAtLS0tLS0tLS0tICovCiAgY29uc3QgY3NzID0gYAogIC8qINCh0YLQuNC70Lgg0YHQsNC50YLQsCDQv9C10YDQtdCx0LjQstCw0Y7RgiDQv9Cw0L3QtdC70Ywg4oCUINC30LDQtNCw0ZHQvCDQstGB0ZEg0Y_QstC90L4g0Lgg0YEg0L_RgNC40L7RgNC40YLQtdGC0L7QvC4gKi8KICAjYXZ6cC1yb290LCAjYXZ6cC1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsKICAgIGxldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9CiAgI2F2enAtcm9vdCBpbnB1dCwjYXZ6cC1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9CiAgI2F2enAtcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fQogICNhdnpwLXJvb3QgLmF2enAtYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9CiAgI2F2enAtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsKICAgIGZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtjb2xvcjojMWQxZDFmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0KICAjYXZ6cC13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsKICAgIGJveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0KICAjYXZ6cC1oZWFke3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcH0KICAjYXZ6cC1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9CiAgI2F2enAtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9CiAgI2F2enAtZm9vdHtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9CiAgLmF2enAtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfQogIC5hdnpwLWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9CiAgLmF2enAtYi5we2JhY2tncm91bmQ6IzFkMWQxZjtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMWQxZDFmfQogIC5hdnpwLWIucDpob3ZlcntiYWNrZ3JvdW5kOiMzMzN9CiAgLmF2enAtc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0KICAuYXZ6cC1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0KICAuYXZ6cC1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9CiAgLmF2enAtc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiLilrggIjtjb2xvcjojODY4NjhifQogIC5hdnpwLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoi4pa-ICJ9CiAgLmF2enAtaW57cGFkZGluZzoxNHB4fQogIC5hdnpwLWZ7bWFyZ2luLWJvdHRvbToxMnB4fQogIC5hdnpwLWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9CiAgLmF2enAtZiBpbnB1dCwuYXZ6cC1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0KICAuYXZ6cC1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9CiAgLmF2enAtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0KICAvKiDQvdCwINGC0LXQu9C10YTQvtC90LUg0L_QsNGA0L3Ri9C1INC_0L7Qu9GPINCy0YHRgtCw0Y7RgiDQtNGA0YPQsyDQv9C-0LQg0LTRgNGD0LPQsCDigJQg0LjQvdCw0YfQtSDQv9C-IDE4MHB4INC90LAg0L_QvtC70LUgKi8KICBAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7CiAgICAuYXZ6cC1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0KICAgICNhdnpwLXdpbntib3JkZXItcmFkaXVzOjB9CiAgfQogIC5hdnpwLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfQogIC5hdnpwLWNhcmQgaDR7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudH0KICAuYXZ6cC1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9CiAgLmF2enAtaW1nIGltZ3t3aWR0aDo3OHB4O2hlaWdodDo5OHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0KICAuYXZ6cC1pbWcgaW1nLmJhZHtvdXRsaW5lOjJweCBzb2xpZCAjYzAzOTJifQogIC5hdnpwLWltZyAuZ3tmbGV4OjF9CiAgLmF2enAtbm90ZXtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiO21hcmdpbjo2cHggMCAwfQogIC5hdnpwLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCg4NHB4LDFmcikpO2dhcDo4cHg7bWF4LWhlaWdodDozMjBweDtvdmVyZmxvdzphdXRvOwogICAgYm9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTBweH0KICAuYXZ6cC1ncmlkIGZpZ3VyZXttYXJnaW46MDtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0KICAuYXZ6cC1ncmlkIGltZ3t3aWR0aDoxMDAlO2FzcGVjdC1yYXRpbzozLzQ7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjVweDtkaXNwbGF5OmJsb2NrfQogIC5hdnpwLWdyaWQgZmlndXJlLnNlbDo6YWZ0ZXJ7Y29udGVudDoi4pyTIjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgIGJhY2tncm91bmQ6cmdiYSgyOSwyOSwzMSwuNTUpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjIycHg7Ym9yZGVyLXJhZGl1czo1cHh9CiAgI2F2enAtb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fQogICNhdnpwLW1zZ3tjb2xvcjojMWQ3YTNlO2ZvbnQtc2l6ZToxM3B4fQogIGA7CgogIGNvbnN0IGVzYyA9IChzKSA9PiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKQogICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKCiAgY29uc3QgZmllbGQgPSAobGFiZWwsIHBhdGgsIHZhbCwgdHlwZSkgPT4gewogICAgY29uc3QgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gYDx0ZXh0YXJlYSBkYXRhLXA9IiR7cGF0aH0iPiR7ZXNjKHZhbCl9PC90ZXh0YXJlYT5gCiAgICAgIDogYDxpbnB1dCBkYXRhLXA9IiR7cGF0aH0iIHZhbHVlPSIke2VzYyh2YWwpfSI-YDsKICAgIHJldHVybiBgPGRpdiBjbGFzcz0iYXZ6cC1mIj48bGFiZWw-JHtsYWJlbH08L2xhYmVsPiR7dGFnfTwvZGl2PmA7CiAgfTsKCiAgY29uc3QgaW1nRmllbGQgPSAobGFiZWwsIHBhdGgsIHZhbCkgPT4gYAogICAgPGRpdiBjbGFzcz0iYXZ6cC1mIj48bGFiZWw-JHtsYWJlbH08L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJhdnpwLWltZyI-CiAgICAgICAgPGltZyBzcmM9IiR7ZXNjKHZhbCl9IiBkYXRhLXByZXY9IiR7cGF0aH0iIG9uZXJyb3I9InRoaXMuY2xhc3NMaXN0LmFkZCgnYmFkJykiPgogICAgICAgIDxkaXYgY2xhc3M9ImciPgogICAgICAgICAgPGlucHV0IGRhdGEtcD0iJHtwYXRofSIgdmFsdWU9IiR7ZXNjKHZhbCl9Ij4KICAgICAgICAgIDxwIGNsYXNzPSJhdnpwLW5vdGUiPjxidXR0b24gY2xhc3M9ImF2enAtYiIgZGF0YS1jaG9vc2U9IiR7cGF0aH0iIHN0eWxlPSJwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6NnB4Ij7QktGL0LHRgNCw0YLRjCDQuNC3INCz0LDQu9C10YDQtdC4PC9idXR0b24-PC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7CgogIGxldCBodG1sID0gYDxzdHlsZT4ke2Nzc308L3N0eWxlPjxkaXYgaWQ9ImF2enAtd2luIj4KICAgIDxkaXYgaWQ9ImF2enAtaGVhZCI-CiAgICAgIDxoMj7Qn9Cw0L3QtdC70YwgQXZhbnphdG88L2gyPgogICAgICA8YnV0dG9uIGNsYXNzPSJhdnpwLWIiIGlkPSJhdnpwLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPgogICAgPC9kaXY-CiAgICA8ZGl2IGlkPSJhdnpwLWJvZHkiPmA7CgogIC8qIEhFUk8gKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiIG9wZW4-PHN1bW1hcnk-0KjQsNC_0LrQsDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4KICAgICR7ZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KX0KICAgIDxkaXYgY2xhc3M9ImF2enAtcm93Ij4ke2ZpZWxkKCfQmNC80Y8sINGB0YLRgNC-0LrQsCAxJywgJ2hlcm8ubmFtZTEnLCBjZmcuaGVyby5uYW1lMSl9JHtmaWVsZCgn0JjQvNGPLCDRgdGC0YDQvtC60LAgMicsICdoZXJvLm5hbWUyJywgY2ZnLmhlcm8ubmFtZTIpfTwvZGl2PgogICAgJHtmaWVsZCgn0J_QvtC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8ubGVkZScsIGNmZy5oZXJvLmxlZGUsICdhcmVhJyl9CiAgICA8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JHtmaWVsZCgn0KHRgdGL0LvQutCwINC90LAg0YbQtdC90Ysg4oCUINGC0LXQutGB0YInLCAnaGVyby5wcmljZUxpbmsudGV4dCcsIGNmZy5oZXJvLnByaWNlTGluay50ZXh0KX0ke2ZpZWxkKCfQodGB0YvQu9C60LAg0L3QsCDRhtC10L3RiyDigJQg0LDQtNGA0LXRgScsICdoZXJvLnByaWNlTGluay5ocmVmJywgY2ZnLmhlcm8ucHJpY2VMaW5rLmhyZWYpfTwvZGl2PgogIDwvZGl2PjwvZGV0YWlscz5gOwoKICAvKiDQn9Cb0JjQotCa0JggKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCf0LvQuNGC0LrQuCDQv9C-0YDRgtGE0L7Qu9C40L4gKCR7Y2ZnLnRpbGVzLmxlbmd0aH0pPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPmA7CiAgY2ZnLnRpbGVzLmZvckVhY2goKHQsIGkpID0-IHsKICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCf0LvQuNGC0LrQsCAke2kgKyAxfTwvaDQ-CiAgICAgIDxkaXYgY2xhc3M9ImF2enAtcm93Ij4ke2ZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCBgdGlsZXMuJHtpfS50aXRsZWAsIHQudGl0bGUpfSR7ZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgYHRpbGVzLiR7aX0uY2FwdGlvbmAsIHQuY2FwdGlvbil9PC9kaXY-CiAgICAgICR7ZmllbGQoJ9Ch0YHRi9C70LrQsCcsIGB0aWxlcy4ke2l9LmhyZWZgLCB0LmhyZWYpfQogICAgICAke3QuaW1nICE9PSB1bmRlZmluZWQgPyBpbWdGaWVsZCgn0JrQsNGA0YLQuNC90LrQsCcsIGB0aWxlcy4ke2l9LmltZ2AsIHQuaW1nKSArIGZpZWxkKCdBbHQt0YLQtdC60YHRgicsIGB0aWxlcy4ke2l9LmFsdGAsIHQuYWx0KSA6ICcnfQogICAgICAke3QudmlkZW8gIT09IHVuZGVmaW5lZCA_IGZpZWxkKCfQktC40LTQtdC-ICjQvNC10L3Rj9GC0Ywg0L3QtSDQvdGD0LbQvdC-KScsIGB0aWxlcy4ke2l9LnZpZGVvYCwgdC52aWRlbykgOiAnJ30KICAgIDwvZGl2PmA7CiAgfSk7CiAgaHRtbCArPSBgPC9kaXY-PC9kZXRhaWxzPmA7CgogIC8qINCe0JHQniDQnNCd0JUgKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCe0LHQviDQvNC90LU8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-CiAgICAke2ltZ0ZpZWxkKCfQpNC-0YLQvtCz0YDQsNGE0LjRjycsICdhYm91dC5pbWcnLCBjZmcuYWJvdXQuaW1nKX0KICAgICR7ZmllbGQoJ0FsdC3RgtC10LrRgdGCJywgJ2Fib3V0LmFsdCcsIGNmZy5hYm91dC5hbHQpfQogICAgPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPiR7ZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2Fib3V0LmxhYmVsJywgY2ZnLmFib3V0LmxhYmVsKX0ke2ZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAnYWJvdXQudGl0bGUnLCBjZmcuYWJvdXQudGl0bGUpfTwvZGl2PgogICAgJHtmaWVsZCgn0JDQsdC30LDRhiAxJywgJ2Fib3V0LnAxJywgY2ZnLmFib3V0LnAxLCAnYXJlYScpfQogICAgJHtmaWVsZCgn0JDQsdC30LDRhiAyJywgJ2Fib3V0LnAyJywgY2ZnLmFib3V0LnAyLCAnYXJlYScpfWA7CiAgY2ZnLmFib3V0LnN0YXRzLmZvckVhY2goKHMsIGkpID0-IHsKICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCm0LjRhNGA0LAgJHtpICsgMX08L2g0PjxkaXYgY2xhc3M9ImF2enAtcm93Ij4KICAgICAgJHtmaWVsZCgn0JfQvdCw0YfQtdC90LjQtScsIGBhYm91dC5zdGF0cy4ke2l9LnRhcmdldGAsIHMudGFyZ2V0KX0KICAgICAgJHtmaWVsZCgn0KHRg9GE0YTQuNC60YEnLCBgYWJvdXQuc3RhdHMuJHtpfS5zdWZmaXhgLCBzLnN1ZmZpeCl9PC9kaXY-CiAgICAgICR7ZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgYGFib3V0LnN0YXRzLiR7aX0ubGFiZWxgLCBzLmxhYmVsKX08L2Rpdj5gOwogIH0pOwogIGh0bWwgKz0gYDwvZGl2PjwvZGV0YWlscz5gOwoKICAvKiDQndCQ0JPQoNCQ0JTQqyAqLwogIGh0bWwgKz0gYDxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0J3QsNCz0YDQsNC00YsgKCR7Y2ZnLmF3YXJkcy5sZW5ndGh9KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj5gOwogIGNmZy5hd2FyZHMuZm9yRWFjaCgoYSwgaSkgPT4gewogICAgaHRtbCArPSBgPGRpdiBjbGFzcz0iYXZ6cC1jYXJkIj48aDQ-0J3QsNCz0YDQsNC00LAgJHtpICsgMX08L2g0PgogICAgICA8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JHtmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsIGBhd2FyZHMuJHtpfS5tYXJrYCwgYS5tYXJrKX0ke2ZpZWxkKCfQn9C-0Y_RgdC90LXQvdC40LUnLCBgYXdhcmRzLiR7aX0uc3ViYCwgYS5zdWIpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JHtmaWVsZCgn0KLQuNC_JywgYGF3YXJkcy4ke2l9Lm1ldGFgLCBhLm1ldGEpfSR7ZmllbGQoJ9Ch0YHRi9C70LrQsCAo0L_Rg9GB0YLQviDigJQg0LHQtdC3INGB0YHRi9C70LrQuCknLCBgYXdhcmRzLiR7aX0uaHJlZmAsIGEuaHJlZiB8fCAnJyl9PC9kaXY-PC9kaXY-YDsKICB9KTsKICBodG1sICs9IGA8L2Rpdj48L2RldGFpbHM-YDsKCiAgLyog0J_QoNCV0JjQnNCj0KnQldCh0KLQktCQICovCiAgaHRtbCArPSBgPGRldGFpbHMgY2xhc3M9ImF2enAtc2VjIj48c3VtbWFyeT7Qn9GA0LXQuNC80YPRidC10YHRgtCy0LAgKCR7Y2ZnLmFkdmFudGFnZXMubGVuZ3RofSk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-YDsKICBjZmcuYWR2YW50YWdlcy5mb3JFYWNoKChhLCBpKSA9PiB7CiAgICBodG1sICs9IGA8ZGl2IGNsYXNzPSJhdnpwLWNhcmQiPjxoND7Qn9GD0L3QutGCICR7aSArIDF9PC9oND4KICAgICAgJHtmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgYGFkdmFudGFnZXMuJHtpfS50aXRsZWAsIGEudGl0bGUpfQogICAgICAke2ZpZWxkKCfQotC10LrRgdGCJywgYGFkdmFudGFnZXMuJHtpfS50ZXh0YCwgYS50ZXh0LCAnYXJlYScpfTwvZGl2PmA7CiAgfSk7CiAgaHRtbCArPSBgPC9kaXY-PC9kZXRhaWxzPmA7CgogIC8qIENUQSArINCk0KPQotCV0KAgKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCf0YDQuNC30YvQsiDQuCDRhNGD0YLQtdGAPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPgogICAgJHtmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ2N0YS50aXRsZScsIGNmZy5jdGEudGl0bGUpfWA7CiAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goKGIsIGkpID0-IHsKICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCa0L3QvtC_0LrQsCAke2kgKyAxfTwvaDQ-PGRpdiBjbGFzcz0iYXZ6cC1yb3ciPgogICAgICAke2ZpZWxkKCfQotC10LrRgdGCJywgYGN0YS5idXR0b25zLiR7aX0udGV4dGAsIGIudGV4dCl9JHtmaWVsZCgn0JDQtNGA0LXRgScsIGBjdGEuYnV0dG9ucy4ke2l9LmhyZWZgLCBiLmhyZWYpfTwvZGl2PjwvZGl2PmA7CiAgfSk7CiAgaHRtbCArPSBmaWVsZCgn0JrQvtC_0LjRgNCw0LnRgicsICdmb290ZXIuY29weScsIGNmZy5mb290ZXIuY29weSk7CiAgY2ZnLmZvb3Rlci5zb2NpYWxzLmZvckVhY2goKHMsIGkpID0-IHsKICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCh0L7RhtGB0LXRgtGMICR7aSArIDF9PC9oND48ZGl2IGNsYXNzPSJhdnpwLXJvdyI-CiAgICAgICR7ZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCBgZm9vdGVyLnNvY2lhbHMuJHtpfS5sYWJlbGAsIHMubGFiZWwpfSR7ZmllbGQoJ9CQ0LTRgNC10YEnLCBgZm9vdGVyLnNvY2lhbHMuJHtpfS5ocmVmYCwgcy5ocmVmKX08L2Rpdj48L2Rpdj5gOwogIH0pOwogIGh0bWwgKz0gYDwvZGl2PjwvZGV0YWlscz5gOwoKICAvKiDQkdCQ0J3QndCV0KAgKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCa0LDQtNGA0Ysg0LHQsNC90L3QtdGA0LAgKCR7Y2ZnLmJhbm5lci5sZW5ndGh9INC40LcgJHtnYWxsZXJ5Lmxlbmd0aH0g0LIg0LPQsNC70LXRgNC10Y_RhSk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-CiAgICA8cCBjbGFzcz0iYXZ6cC1ub3RlIj7QntGC0LzQtdGH0LXQvdC90YvQtSDQs9Cw0LvQvtGH0LrQvtC5INGD0YfQsNGB0YLQstGD0Y7RgiDQsiDRgdC70LDQudC00LXRgNC1LiDQndCw0LbQvNC40YLQtSDQvdCwINGB0L3QuNC80L7Quiwg0YfRgtC-0LHRiyDQstC60LvRjtGH0LjRgtGMINC40LvQuCDQstGL0LrQu9GO0YfQuNGC0YwuPC9wPgogICAgPGRpdiBjbGFzcz0iYXZ6cC1ncmlkIiBpZD0iYXZ6cC1iZ3JpZCI-PC9kaXY-CiAgICA8cCBjbGFzcz0iYXZ6cC1ub3RlIiBpZD0iYXZ6cC1iY291bnQiPjwvcD4KICA8L2Rpdj48L2RldGFpbHM-YDsKCiAgaHRtbCArPSBgPC9kaXY-CiAgICA8ZGl2IGlkPSJhdnpwLWZvb3QiPgogICAgICA8YnV0dG9uIGNsYXNzPSJhdnpwLWIgcCIgaWQ9ImF2enAtYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC4INGB0LrQvtC_0LjRgNC-0LLQsNGC0Yw8L2J1dHRvbj4KICAgICAgPHNwYW4gaWQ9ImF2enAtbXNnIj48L3NwYW4-CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE4cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6cC1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiBwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QvdGE0LjQsyI-PC90ZXh0YXJlYT48L2Rpdj4KICA8L2Rpdj5gOwoKICBjb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpwLXJvb3QnOwogIHJvb3QuaW5uZXJIVE1MID0gaHRtbDsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCgogIC8qIC0tLS0tLS0tLS0g0YHQtdGC0LrQsCDQsdCw0L3QvdC10YDQsCAtLS0tLS0tLS0tICovCiAgY29uc3QgY2hvc2VuID0gbmV3IFNldChjZmcuYmFubmVyKTsKICBjb25zdCBiZ3JpZCA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtYmdyaWQnKTsKICBjb25zdCBiY291bnQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLWJjb3VudCcpOwogIGNvbnN0IGRyYXdDb3VudCA9ICgpID0-IHsgYmNvdW50LnRleHRDb250ZW50ID0gJ9CS0YvQsdGA0LDQvdC-INC60LDQtNGA0L7QsjogJyArIGNob3Nlbi5zaXplOyB9OwogIGdhbGxlcnkuZm9yRWFjaCgoZykgPT4gewogICAgY29uc3QgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZ3VyZScpOwogICAgaWYgKGNob3Nlbi5oYXMoZy5mdWxsKSkgZi5jbGFzc05hbWUgPSAnc2VsJzsKICAgIGYuaW5uZXJIVE1MID0gYDxpbWcgc3JjPSIke2cuc21hbGx9IiBsb2FkaW5nPSJsYXp5Ij5gOwogICAgZi5vbmNsaWNrID0gKCkgPT4gewogICAgICBpZiAoY2hvc2VuLmhhcyhnLmZ1bGwpKSB7IGNob3Nlbi5kZWxldGUoZy5mdWxsKTsgZi5jbGFzc05hbWUgPSAnJzsgfQogICAgICBlbHNlIHsgY2hvc2VuLmFkZChnLmZ1bGwpOyBmLmNsYXNzTmFtZSA9ICdzZWwnOyB9CiAgICAgIGRyYXdDb3VudCgpOwogICAgfTsKICAgIGJncmlkLmFwcGVuZENoaWxkKGYpOwogIH0pOwogIGRyYXdDb3VudCgpOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQtdCy0YzRjiDQutCw0YDRgtC40L3QvtC6IC0tLS0tLS0tLS0gKi8KICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0-IHsKICAgIGNvbnN0IHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgaWYgKCFwKSByZXR1cm47CiAgICBjb25zdCBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBpbWdbZGF0YS1wcmV2PSIke3B9Il1gKTsKICAgIGlmIChwcmV2KSB7IHByZXYuY2xhc3NMaXN0LnJlbW92ZSgnYmFkJyk7IHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7IH0KICB9KTsKCiAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINC60LDRgNGC0LjQvdC60Lgg0LjQtyDQs9Cw0LvQtdGA0LXQuCAtLS0tLS0tLS0tICovCiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICBjb25zdCBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNob29zZScpOwogICAgaWYgKCFwKSByZXR1cm47CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCBwYW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6OCU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7cGFkZGluZzoxNnB4O292ZXJmbG93OmF1dG87Ym94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC40KSc7CiAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7QktGL0LHQtdGA0LjRgtC1INGB0L3QuNC80L7QujwvcD48ZGl2IGNsYXNzPSJhdnpwLWdyaWQiPjwvZGl2Pic7CiAgICBjb25zdCBnID0gcGFuZS5xdWVyeVNlbGVjdG9yKCcuYXZ6cC1ncmlkJyk7CiAgICBnLnN0eWxlLm1heEhlaWdodCA9ICdub25lJzsKICAgIGdhbGxlcnkuZm9yRWFjaCgoaXQpID0-IHsKICAgICAgY29uc3QgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZ3VyZScpOwogICAgICBmLmlubmVySFRNTCA9IGA8aW1nIHNyYz0iJHtpdC5zbWFsbH0iIGxvYWRpbmc9ImxhenkiPmA7CiAgICAgIGYub25jbGljayA9ICgpID0-IHsKICAgICAgICBjb25zdCBpbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W2RhdGEtcD0iJHtwfSJdYCk7CiAgICAgICAgaW5wLnZhbHVlID0gaXQuZnVsbDsKICAgICAgICBjb25zdCBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBpbWdbZGF0YS1wcmV2PSIke3B9Il1gKTsKICAgICAgICBpZiAocHJldikgeyBwcmV2LmNsYXNzTGlzdC5yZW1vdmUoJ2JhZCcpOyBwcmV2LnNyYyA9IGl0LmZ1bGw7IH0KICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICB9OwogICAgICBnLmFwcGVuZENoaWxkKGYpOwogICAgfSk7CiAgICBjb25zdCBjbG9zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgY2xvc2UuY2xhc3NOYW1lID0gJ2F2enAtYic7CiAgICBjbG9zZS50ZXh0Q29udGVudCA9ICfQntGC0LzQtdC90LAnOwogICAgY2xvc2Uub25jbGljayA9ICgpID0-IHBhbmUucmVtb3ZlKCk7CiAgICBwYW5lLmFwcGVuZENoaWxkKGNsb3NlKTsKICAgIHJvb3QuYXBwZW5kQ2hpbGQocGFuZSk7CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KICBjb25zdCBzZXRQYXRoID0gKG9iaiwgcGF0aCwgdmFsKSA9PiB7CiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTsKICAgIGxldCBvID0gb2JqOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogIH07CgogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtY2xvc2UnKS5vbmNsaWNrID0gKCkgPT4gcm9vdC5yZW1vdmUoKTsKCiAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1idWlsZCcpLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7CiAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXBdJykuZm9yRWFjaCgoZWwpID0-IHsKICAgICAgY29uc3QgcCA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGxldCB2ID0gZWwudmFsdWU7CiAgICAgIGlmICgvXmF3YXJkc1wuXGQrXC5ocmVmJC8udGVzdChwKSAmJiB2LnRyaW0oKSA9PT0gJycpIHYgPSBudWxsOwogICAgICBzZXRQYXRoKGNmZywgcCwgdik7CiAgICB9KTsKICAgIGNmZy5iYW5uZXIgPSBbLi4uY2hvc2VuXTsKICAgIGRlbGV0ZSBjZmcudGlja2VyOyAvLyDQsdC10LPRg9GJ0LXQuSDRgdGC0YDQvtC60Lgg0L3QsCDRgdGC0YDQsNC90LjRhtC1INCx0L7Qu9GM0YjQtSDQvdC10YIKCiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDRg9C10YXQsNGC0YwKICAgICAgINCyINC60L7QvdGE0LjQsyDQtNCw0LbQtSDQuNC3INC30L3QsNGH0LXQvdC40LksINC_0L7Qv9Cw0LLRiNC40YUg0LIg0L3QtdCz0L4g0LzQuNC80L4g0L_QvtC70LXQuSDQv9Cw0L3QtdC70LguICovCiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoY2ZnKS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvbik7CiAgICBsZXQgYmluID0gJyc7CiAgICBieXRlcy5mb3JFYWNoKGIgPT4geyBiaW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShiKTsgfSk7CiAgICBjb25zdCBiNjQgPSBidG9hKGJpbikucmVwbGFjZSgvXCsvZywgJy0nKS5yZXBsYWNlKC9cLy9nLCAnXycpLnJlcGxhY2UoLz0rJC8sICcnKTsKICAgIGNvbnN0IG91dCA9ICdBVlotQ09ORklHLVNUQVJUJyArIGI2NCArICdBVlotQ09ORklHLUVORCc7CgogICAgY29uc3QgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLW91dCcpOwogICAgdGEudmFsdWUgPSBvdXQ7CiAgICB0YS5zZWxlY3QoKTsKICAgIGxldCBvayA9IGZhbHNlOwogICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgaWYgKCFvaykgeyB0cnkgeyBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChvdXQpOyBvayA9IHRydWU7IH0gY2F0Y2ggKGUpIHt9IH0KICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtbXNnJykudGV4dENvbnRlbnQgPSBvawogICAgICA_ICfQodC60L7Qv9C40YDQvtCy0LDQvdC-LiDQktGB0YLQsNCy0YzRgtC1INC90LAgYXZ6LWRhdGEg0LLQvNC10YHRgtC-INGB0YLQsNGA0L7Qs9C-INC60L7QvdGE0LjQs9CwINC4INGB0L7RhdGA0LDQvdC40YLQtS4nCiAgICAgIDogJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLic7CiAgfTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6InBvcnRyYWl0Iix0aXRsZToi0J_QsNC90LXQu9GMINC_0L7RgNGC0YDQtdGC0L3Ri9GFINGE0L7RgtC-0YHQtdGB0YHQuNC5IixzaG9ydDoi0J_QvtGA0YLRgNC10YLRiyIsaGludDoi0YLQtdC60YHRgtGLLCDQstC-0L_RgNC-0YHRiywg0L_QtdGA0LXRgdCx0L7RgNC60LAg0YHQtdGC0LrQuCwg0YfQuNGB0LvQviDRgdGK0ZHQvNC-0LoiLHBhZ2VzOlsiL3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQodCi0KDQkNCd0JjQptCrINCf0J7QoNCi0KDQldCi0J7QkiAgdjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24KCiAgINCX0LDQvNC10L3Rj9C10YIg0YHQvtCx0L7QuSDQv9GA0LXQttC90LjQuSDCq9Ch0LHQvtGA0YnQuNC6INGB0YLQsNGC0LjRh9C10YHQutC-0Lkg0YHQtdGC0LrQuMK7OiDQtNC10LvQsNC10YIKICAg0LLRgdGRINGC0L4g0LbQtSDRgdCw0LzQvtC1INC_0LvRjtGBINC_0YDQsNCy0LjRgiDRgtC10LrRgdGC0YssINC4IOKAlCDQs9C70LDQstC90L7QtSDigJQg0YHQsNC8INGB0YfQuNGC0LDQtdGCCiAgINGB0YrRkdC80LrQuCDQuCDQv9GA0L7RgdGC0LDQstC70Y_QtdGCINGH0LjRgdC70L4g0LLQviDQstGB0LUg0YfQtdGC0YvRgNC1INC80LXRgdGC0LAsINCz0LTQtSDQvtC90L4g0YHRgtC-0LjRgi4KICAg0KDQsNC90YzRiNC1INGN0YLQviDQtNC-0L_QuNGB0YvQstCw0LvQvtGB0Ywg0YDRg9C60LDQvNC4LCDQuNC3LdC30LAg0YfQtdCz0L4g0YDQsNC30YrQtdGF0LDQu9C-0YHRjDoKICAg0LIg0YDQsNC30LzQtdGC0LrQtSDQsdGL0LvQviAxMjUsINCwINCyINGC0LXQutGB0YLQsNGFIDEyMy4KCiAgINCn0YLQviDRgdC40L3RhdGA0L7QvdC40LfQuNGA0YPQtdGC0YHRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuDoKICAgICDRh9C40YHQu9C-INGB0YrRkdC80L7QuiAg4oCUINC70LjQtCwg0LzQtdGC0LAt0L7Qv9C40YHQsNC90LjQtSwgZGVzY3JpcHRpb24g0LIgbGQranNvbiwKICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJdGVtcwogICAgINCy0L7Qv9GA0L7RgdGLIEZBUSAgIOKAlCDQstC40LTQuNC80YvQuSDQsdC70L7QuiDQuCBGQVFQYWdlINC00LvRjyDQv9C-0LjRgdC60LAKICAgICDQt9Cw0LPQvtC70L7QstC-0LogICAgIOKAlCBpbml0TWV0YSDQuCBuYW1lINCyIGxkK2pzb24KICAgICDRgdC_0LjRgdC-0Log0YHRitGR0LzQvtC6IOKAlCDRgdC10YLQutCwINC4IGl0ZW1MaXN0RWxlbWVudCAo0L_QtdGA0LLRi9C1IDMwKQoKICAg0J7RgtCy0LXRgtGLIEZBUSDQndCVINGB0LjQvdGF0YDQvtC90LjQt9C40YDRg9GO0YLRgdGPOiDQstC40LTQuNC80YvQuSDQvdCw0L_QuNGB0LDQvSDQvtGCINC_0LXRgNCy0L7Qs9C-CiAgINC70LjRhtCwLCDQv9C-0LjRgdC60L7QstGL0Lkg4oCUINC-0YIg0YLRgNC10YLRjNC10LPQvi4g0K3RgtC-INGB0LTQtdC70LDQvdC-INC90LDQvNC10YDQtdC90L3Qviwg0L_QvtGN0YLQvtC80YMKICAg0YMg0LrQsNC20LTQvtCz0L4g0YHQstC-0ZEg0L_QvtC70LUuCgogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIuINCn0LjRgtCw0LXRgiDRgdGC0YDQsNC90LjRhtGDLCDQvtGC0LTQsNGR0YIg0LPQvtGC0L7QstGL0Lkg0LHQu9C-0LouCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyog0KHRgdGL0LvQutCwINC90LAg0YjRgNC40YTRgtGLINCx0LvQvtC60LAg4oCUINC60L7QvdGB0YLQsNC90YLQsCwg0LAg0L3QtSDRgtC-LCDRh9GC0L4g0L3QsNGI0LvQvtGB0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtC1LgogICAgINCSIDxoZWFkPiB3Zm9saW8g0YHQstC-0Y8g0YHRgdGL0LvQutCwINC90LAgSm9zdC9SdWJpayDQvtGCINGC0LXQvNGLLCDQuCDQvtC90LAg0YHRgtC-0LjRgiDQoNCQ0J3QrNCo0JUKICAgICDQvdCw0YjQtdC5OiDQv9Cw0L3QtdC70Ywg0LHRgNCw0LvQsCDQv9C10YDQstGD0Y4g0L_QvtC00YXQvtC00Y_RidGD0Y4g0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQvtC5INC_0L7QtNC80LXQvdGP0LvQsAogICAgINC90LDRh9C10YDRgtCw0L3QuNGPINCx0LvQvtC60LAg0L3QsCDRgtC10LzQuNC90YsuINCd0LDQsdC-0YAg0LLQtdGB0L7QsiDQt9Cw0LTQsNC9IENTUyDQsdC70L7QutCwLCDQv9C-0Y3RgtC-0LzRgwogICAgINC00LXRgNC20LjQvCDQtdCz0L4g0LfQtNC10YHRjC4g0JzQtdC90Y_QtdGC0YHRjyDQtNC40LfQsNC50L0g4oCUINC80LXQvdGP0LXRgtGB0Y8g0Y3RgtCwINGB0YLRgNC-0LrQsC4gKi8KICB2YXIgQVZaX0ZPTlRfTElOSyA9ICc8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI_ZmFtaWx5PUpvc3Q6d2dodEAyMDA7MzAwOzQwMDs1MDA7NjAwJyArCiAgICAnJmFtcDtmYW1pbHk9UnViaWs6d2dodEAxMDA7MjAwOzMwMCZhbXA7ZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPic7CgogIC8qIC0tLS0tLS0tLS0g0L7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4OiDQs9C70LDQstC90LDRjyDigJQg0LjRgdGC0L7Rh9C90LjQuiDQuNGB0YLQuNC90YsgLS0tLS0tLS0tLQogICAgINCj0LfQu9GLICNwaG90b2dyYXBoZXIsICNidXNpbmVzcyDQuCAjd2Vic2l0ZSDQvtC_0LjRgdGL0LLQsNGO0YIg0L7QtNC90L7Qs9C-INC4INGC0L7Qs9C-INC20LUKICAgICDRh9C10LvQvtCy0LXQutCwLCDQvtC00L3QviDQtNC10LvQviDQuCDQvtC00LjQvSDRgdCw0LnRgi4g0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0LkKICAgICDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40LoKICAgICDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4INCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQv9GA0L7RgdGC0L4KICAgICDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINC40YUg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUsCiAgICAg0L_QvtGN0YLQvtC80YMg0YDQsNGB0YXQvtC00LjRgtGM0YHRjyDQuNC8INCx0L7Qu9GM0YjQtSDQvdC10YfQtdC8LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMjQg0LDQstCz0YPRgdGC0LAgMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5IiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICLQvtGCIDE0IDkwMCDigr0iLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIm1ha2VzT2ZmZXIiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICAgICAicHJpY2UiOiAiMTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAiY29udGFjdFBvaW50IjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgICAgICJjb250YWN0VHlwZSI6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgICAgICJhcmVhU2VydmVkIjogIlJVIiwKICAgICAgICAgICJhdmFpbGFibGVMYW5ndWFnZSI6IFsKICAgICAgICAgICAgIlJ1c3NpYW4iLAogICAgICAgICAgICAiRW5nbGlzaCIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSI6IHsKICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwKICAgICAgInB1Ymxpc2hlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImluTGFuZ3VhZ2UiOiAicnUtUlUiCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnpwdC1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgbGl2ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnotcHQnKTsKICBpZiAoIWxpdmUpIHsgYWxlcnQoJ0FWWjog0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC90LXRgiDQsdC70L7QutCwICNhdnotcHQnKTsgcmV0dXJuOyB9CgogIHZhciBMSVNUSU5HX1VSTCA9ICcvcG9ydHJhaXQtcGhvdG9zZXNzaW9uLWFsYnVtJzsKICB2YXIgU0laRVMgPSAnKG1heC13aWR0aDo0MjBweCkgOTJ2dywgKG1heC13aWR0aDo3NjBweCkgNDZ2dywgKG1heC13aWR0aDoxMjAwcHgpIDMxdncsIDIzdncnOwogIHZhciBTQ0hFTUFfSVRFTVMgPSAzMDsKCiAgLyog0JrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwINC20LjQstGD0YIg0LfQtNC10YHRjCwg0Lgg0L_QsNC90LXQu9GMINC_0YDQvtGB0YLQsNCy0LvRj9C10YIg0LjRhSDQttC1INCyINGB0LrRgNC40L_RggogICAgINGB0YLRgNCw0L3QuNGG0Ysg0L_RgNC4INGB0LHQvtGA0LrQtS4g0KDQsNC90YzRiNC1INGB0L_QuNGB0L7QuiDQsdGL0Lsg0LIg0LTQstGD0YUg0LzQtdGB0YLQsNGFINC4INC80L7QsyDRgNCw0LfRitC10YXQsNGC0YzRgdGPOgogICAgINC_0LXRgNC10YHQsdC-0YDQutCwINGA0LDRgdGB0YLQsNCy0LjQu9CwINCx0Ysg0LrQsNGC0LXQs9C-0YDQuNC4INC_0L4g0L7QtNC90LjQvCDRgdC70L7QstCw0LwsINCwINCw0LLRgtC-0L_QvtC00YLRj9Cz0LjQstCw0L3QuNC1CiAgICAg0L3QvtCy0YvRhSDQsNC70YzQsdC-0LzQvtCyINCyINCx0YDQsNGD0LfQtdGA0LUg4oCUINC_0L4g0LTRgNGD0LPQuNC8LiAqLwogIHZhciBDQVRfV09SRFMgPSBbCiAgICBbJ3N0cmVldCcsICAgWyfRg9C70LjRhycsJ9GB0YLRgNC40YInLCfQv9GA0L7Qs9GD0LvQvtGH0L0nLCfQv9GA0L7Qs9GD0LvQuicsJ9C_0LDRgNC6Jywn0L3QsNCx0LXRgNC10LbQvScsJ9GG0LXQvdGC0YAg0LrQsNC30LDQvScsJ9C_0L4g0YbQtdC90YLRgNGDJywn0LPQvtGA0L7QtCcsJ9C00LDQvNCxJywn0YHQutCy0LXRgCcsJ9C00LLQvtGAJywn0LrRgNGL0YgnLCfQu9C10YEnLCfQv9C-0LvQtScsJ9C-0LfQtdGAJywn0LrRgNC10LzQuycsJ9GA0YvQvdC6Jywn0YHRgtGA0L7QudC6Jywn0LzQvtGB0YInLCfQstC-0LrQt9Cw0LsnLCfRg9C70LjRhiddXSwKICAgIFsnc3R1ZGlvJywgICBbJ9GB0YLRg9C00LgnLCfRhtC40LrQu9C-0YDQsNC8Jywn0L_QsNCy0LjQu9GM0L7QvSddXSwKICAgIFsnaW50ZXJpb3InLCBbJ9C60L7RhNC10LnQvScsJ9C60L7RhNC1Jywn0LrQsNGE0LUnLCfRgNC10YHRgtC-0YDQsNC9Jywn0L7RgtC10LsnLCfQuNC90YLQtdGA0YzQtdGAJywn0LDRgNGCINC_0YDQvtGB0YLRgNCw0L0nLCfQutCy0LDRgNGC0LjRgCcsJ9Cw0L_QsNGA0YLQsNC80LXQvdGCJywn0LvQvtGE0YInLCfQsdC40LHQu9C40L7RgtC10LonLCfQtNC-0LzQsNGI0L0nLCfQtNC-0LzQsCDQsiDQutCw0LfQsNC90LgnLCfRgyDQvdC10LUg0LTQvtC80LAnLCfRgyDQvdC10ZEg0LTQvtC80LAnXV0sCiAgICBbJ21hbGUnLCAgICAgWyfQvNGD0LbRgdC6Jywn0LzRg9C20YfQuNC9J11dLAogICAgWydmYW1pbHknLCAgIFsn0YHQtdC80LXQuScsJ9Cy0LTQstC-0ZHQvCcsJ9Cy0LTQstC-0LXQvCcsJ9Cy0LvRjtCx0LsnLCfQtNC10YInLCdsb3ZlIHN0b3J5Jywn0LvQsNCy0YHRgtC-0YDQuCcsJ9GB0LXRgdGC0YAnLCfQv9C-0LTRgNGD0LMnXV0sCiAgICBbJ2J1c2luZXNzJywgWyfQtNC10LvQvtCyJywn0LHQuNC30L3QtdGBJywn0LvQuNGH0L3QvtCz0L4g0LHRgNC10L3QtNCwJywn0LvQuNGH0L3Ri9C5INCx0YDQtdC90LQnLCfQvtGE0LjRgScsJ9GA0LXQt9GO0LzQtScsJ9GC0LLQvtGA0YfQtdGB0LrQvtCz0L4g0LHRgNC10L3QtNCwJ11dCiAgXTsKCiAgLyogLS0tLS0tLS0tLSDRg9GC0LjQu9C40YLRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQoKICAvKiDQodGB0YvQu9C60LAg0LrQsNGA0YLQvtGH0LrQuCDQu9C40YHRgtC40L3Qs9CwLiDQndCwINC00LXRgdC60YLQvtC_0LUgd2ZvbGlvINC-0YLQtNCw0ZHRggogICAgIDxkaXYgY2xhc3M9Imxpc3RpbmctaXRlbSI-PGEgY2xhc3M9Imxpc3RpbmctbGluayIgaHJlZj0i4oCmIj4sINCwINC80L7QsdC40LvRjNC90YvQvCDigJQKICAgICA8YSBjbGFzcz0ibGlzdGluZy1pdGVtIiBocmVmPSLigKYiPiDQsdC10Lcg0LLQu9C-0LbQtdC90L3QvtC5INGB0YHRi9C70LrQuC4gcXVlcnlTZWxlY3RvcgogICAgINGB0LzQvtGC0YDQuNGCINGC0L7Qu9GM0LrQviDQstC90YPRgtGA0Ywg0Y3Qu9C10LzQtdC90YLQsCwg0L_QvtGN0YLQvtC80YMg0L3QsCDRgtC10LvQtdGE0L7QvdC1INGB0YHRi9C70LrQsCDQvdC1INC90LDRhdC-0LTQuNC70LDRgdGMCiAgICAg0Lgg0L_QsNC90LXQu9GMINC80L7Qu9GH0LAg0L7RgtCx0YDQsNGB0YvQstCw0LvQsCDQktCh0JUg0LDQu9GM0LHQvtC80Ys6IMKr0YHQvtCx0YDQsNC90L4g0YHRitGR0LzQvtC6OiAwwrsuICovCiAgZnVuY3Rpb24gaXRlbUxpbmsoaXQpIHsKICAgIGlmICghaXQpIHJldHVybiBudWxsOwogICAgdHJ5IHsgaWYgKGl0Lm1hdGNoZXMgJiYgaXQubWF0Y2hlcygnYVtocmVmXScpKSByZXR1cm4gaXQ7IH0gY2F0Y2ggKGUpIHt9CiAgICBpZiAoaXQudGFnTmFtZSA9PT0gJ0EnICYmIGl0LmdldEF0dHJpYnV0ZSgnaHJlZicpKSByZXR1cm4gaXQ7CiAgICByZXR1cm4gb25lKGl0LCAnYVtocmVmXScpOwogIH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQoKICBmdW5jdGlvbiBvd25UZXh0KGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgcyA9ICcnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSBzICs9IGVsLmNoaWxkTm9kZXNbaV0ubm9kZVZhbHVlOwogICAgfQogICAgcmV0dXJuIHMucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogIH0KCiAgZnVuY3Rpb24gZGV0ZWN0Q2F0cyh0aXRsZSkgewogICAgdmFyIGxvdyA9ICh0aXRsZSB8fCAnJykudG9Mb3dlckNhc2UoKSwgZm91bmQgPSBbXTsKICAgIENBVF9XT1JEUy5mb3JFYWNoKGZ1bmN0aW9uIChwYWlyKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFpclsxXS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChsb3cuaW5kZXhPZihwYWlyWzFdW2ldKSA-IC0xKSB7IGZvdW5kLnB1c2gocGFpclswXSk7IHJldHVybjsgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBmb3VuZDsKICB9CgogIC8qINCn0LjRgdC70L4g0YHRitGR0LzQvtC6INGB0YLQvtC40YIg0LIg0YLQtdC60YHRgtC1INGB0LvQvtCy0LDQvNC4OiDCqzEyMyDRgdGK0ZHQvNC60LjCuywgwqsxMjMg0YDQsNCx0L7RgtGLwrsuCiAgICAg0J_QvtC00LzQtdC90Y_QtdC8INC4INGH0LjRgdC70L4sINC4INGE0L7RgNC80YMg0YHQu9C-0LLQsDogMTIzINGB0YrRkdC80LrQuCwg0L3QviAxMjUg0YHRitGR0LzQvtC6LgogICAgINCR0LXQtyDRjdGC0L7Qs9C-INC_0L7Qu9GD0YfQsNC70L7RgdGMINCx0YsgwqsxMjUg0YHRitGR0LzQutC4wrsuICovCiAgdmFyIEZPUk1TID0gewogICAgJ9GB0YrRkdC80LonOiBbJ9GB0YrRkdC80LrQsCcsICfRgdGK0ZHQvNC60LgnLCAn0YHRitGR0LzQvtC6J10sCiAgICAn0YHRitC10LzQuic6IFsn0YHRitC10LzQutCwJywgJ9GB0YrQtdC80LrQuCcsICfRgdGK0LXQvNC-0LonXSwKICAgICfRgNCw0LHQvtGCJzogWyfRgNCw0LHQvtGC0LAnLCAn0YDQsNCx0L7RgtGLJywgJ9GA0LDQsdC-0YInXQogIH07CgogIGZ1bmN0aW9uIHBsdXJhbChuLCBmb3JtcykgewogICAgdmFyIGEgPSBNYXRoLmFicyhuKSAlIDEwMCwgYiA9IGEgJSAxMDsKICAgIGlmIChhID4gMTAgJiYgYSA8IDIwKSByZXR1cm4gZm9ybXNbMl07CiAgICBpZiAoYiA-IDEgJiYgYiA8IDUpIHJldHVybiBmb3Jtc1sxXTsKICAgIGlmIChiID09PSAxKSByZXR1cm4gZm9ybXNbMF07CiAgICByZXR1cm4gZm9ybXNbMl07CiAgfQoKICAvKiDQm9C-0LLRg9GI0LrQsCwg0YHRgtC-0LjQstGI0LDRjyDQt9Cw0YHRgtGA0Y_QstGI0LXQs9C-INGH0LjRgdC70LA6INC60L7RgNC10L3RjCDQuNGB0LrQsNC70Lgg0LrQsNC6IMKr0YHRitGR0LzQusK7LAogICAgINCwINCyINGA0L7QtNC40YLQtdC70YzQvdC-0Lwg0LzQvdC-0LbQtdGB0YLQstC10L3QvdC-0LPQviDRgdGC0L7QuNGCIMKr0YHRitGR0LzQvtC6wrsg4oCUINC80LXQttC00YMgwqvQvMK7INC4IMKr0LrCuwogICAgINC_0L7Rj9Cy0LvRj9C10YLRgdGPIMKr0L7Cuywg0Lgg0YHQvtCy0L_QsNC00LXQvdC40Y8g0L3QtSDQsdGL0LvQvi4g0J_RgNC4IDEyMyDQv9C-0LTRgdGC0LDQvdC-0LLQutCwINGA0LDQsdC-0YLQsNC70LAKICAgICAowqsxMjMg0YHRitGR0LzQutC4wrspLCDQv9GA0LggMTI1INC4IDEyNyDigJQg0LzQvtC70YfQsCDQvdC10YIuINCY0YnQtdC8INC_0L4gwqvRgdGK0ZHQvMK7LCDQsCDRhNC-0YDQvNGDCiAgICAg0YHQu9C-0LLQsCDQstGL0LHQuNGA0LDQtdC8INGB0LDQvNC4LiAqLwogIGZ1bmN0aW9uIHdpdGhDb3VudChzLCBuKSB7CiAgICBpZiAodHlwZW9mIHMgIT09ICdzdHJpbmcnKSByZXR1cm4gczsKICAgIHJldHVybiBzLnJlcGxhY2UoL1xiXGQrKFxzKyko0YHRitGR0Lx80YHRitC10Lx80YDQsNCx0L7Rgilb0LAt0Y_RkV0qLywgZnVuY3Rpb24gKG0sIHNwLCBoZWFkKSB7CiAgICAgIHZhciBrZXkgPSBoZWFkID09PSAn0YHRitGR0LwnID8gJ9GB0YrRkdC80LonIDogKGhlYWQgPT09ICfRgdGK0LXQvCcgPyAn0YHRitC10LzQuicgOiAn0YDQsNCx0L7RgicpOwogICAgICByZXR1cm4gU3RyaW5nKG4pICsgc3AgKyBwbHVyYWwobiwgRk9STVNba2V5XSk7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1INGB0YLRgNCw0L3QuNGG0YsgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiByZWFkRmFxKHNjb3BlKSB7CiAgICByZXR1cm4gYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICB2YXIgcSA9IG9uZShpdCwgJy5mYXEtcScpOwogICAgICB2YXIgaW5uZXIgPSBvbmUoaXQsICcuZmFxLWEtaW5uZXInKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBxOiBxID8gb3duVGV4dChxKSA6ICcnLAogICAgICAgIGE6IGlubmVyID8gaW5uZXIuaW5uZXJIVE1MLnRyaW0oKSA6ICcnLAogICAgICAgIHNjaGVtYUE6ICcnCiAgICAgIH07CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIGxpbmUyID0gbGluZXNbMV0gfHwgbnVsbDsKICAgIHZhciBwcmljZSA9IG9uZShzY29wZSwgJy5sZWRlLXByaWNlJyk7CiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogb3duVGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChsaW5lc1swXSksCiAgICAgICAgbGluZTI6IGxpbmUyID8gb3duVGV4dChsaW5lMikgOiAnJywKICAgICAgICBsaW5lMmVtOiBsaW5lMiA_IHQob25lKGxpbmUyLCAnZW0nKSkgOiAnJwogICAgICB9LAogICAgICBsZWRlOiB0KG9uZShzY29wZSwgJy5sZWRlJykpLAogICAgICBwcmljZTogewogICAgICAgIHRleHQ6IHByaWNlID8gb3duVGV4dChwcmljZSkgOiAnJywKICAgICAgICBocmVmOiBwcmljZSA_IChwcmljZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJykgOiAnJwogICAgICB9LAogICAgICBmaWx0ZXJzTGFiZWw6IHQoYWxsKHNjb3BlLCAnLmZpbHRlcnMtbGFiZWwnKVswXSksCiAgICAgIGVtcHR5OiB0KG9uZShzY29wZSwgJyNwdC1lbXB0eScpKSwKICAgICAgZmFxTGFiZWw6IHQob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAuZmlsdGVycy1sYWJlbCcpKSwKICAgICAgZmFxVGl0bGU6IHQob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAuaDInKSksCiAgICAgIGZhcTogcmVhZEZhcShzY29wZSksCiAgICAgIGN0YTogewogICAgICAgIHRpdGxlOiBvbmUoc2NvcGUsICcuY3RhIC5oMicpID8gb25lKHNjb3BlLCAnLmN0YSAuaDInKS5pbm5lckhUTUwudHJpbSgpIDogJycsCiAgICAgICAgYnV0dG9uczogYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICB2YXIgc3AgPSBhbGwoYiwgJy5idG4tbGFiZWwgPiBzcGFuJyk7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KHNwWzBdKSwgaHJlZjogYi5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHRpY2tlcjogW10sCiAgICAgIGNhdHM6IFtdLAogICAgICBtZXRhOiB7IHRpdGxlOiAnJywgZGVzYzogJycgfQogICAgfTsKICB9CgogIHZhciBjZmcgPSByZWFkQ2ZnKGxpdmUpOwoKICAvKiDRgtC10LrRgdGC0YssINC20LjQstGD0YnQuNC1INCyINGB0LrRgNC40L_RgtC1INC4INCyIGxkK2pzb24sINGH0LjRgtCw0LXQvCDQuNC3INC40YHRhdC-0LTQvdC-0LPQviDQutC-0LTQsCAqLwogIGZ1bmN0aW9uIHJlYWRTY3JpcHRCaXRzKHNjcmlwdFRleHQsIGNmZ09iaikgewogICAgdmFyIG0gPSBzY3JpcHRUZXh0Lm1hdGNoKC92YXIgdGl0bGUgPSAnKCg_OlteJ1xcXXxcXC4pKiknLyk7CiAgICBpZiAobSkgY2ZnT2JqLm1ldGEudGl0bGUgPSBtWzFdLnJlcGxhY2UoL1xcJy9nLCAiJyIpOwogICAgbSA9IHNjcmlwdFRleHQubWF0Y2goL3ZhciBkZXNjID0gJygoPzpbXidcXF18XFwuKSopJy8pOwogICAgaWYgKG0pIGNmZ09iai5tZXRhLmRlc2MgPSBtWzFdLnJlcGxhY2UoL1xcJy9nLCAiJyIpOwoKICAgIG0gPSBzY3JpcHRUZXh0Lm1hdGNoKC92YXIgbGFiZWxzID0gXFsoW1xzXFNdKj8pXF07Lyk7CiAgICBpZiAobSkgewogICAgICBjZmdPYmoudGlja2VyID0gKG1bMV0ubWF0Y2goLycoKD86W14nXFxdfFxcLikqKScvZykgfHwgW10pLm1hcChmdW5jdGlvbiAocykgewogICAgICAgIHJldHVybiBzLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgICAgfSk7CiAgICB9CiAgICBtID0gc2NyaXB0VGV4dC5tYXRjaCgvdmFyIENBVEVHT1JJRVMgPSBcWyhbXHNcU10qPylcXTsvKTsKICAgIGlmIChtKSB7CiAgICAgIGNmZ09iai5jYXRzID0gKG1bMV0ubWF0Y2goL1×7W159XSpcfS9nKSB8fCBbXSkubWFwKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICB2YXIgaWQgPSByb3cubWF0Y2goL2lkOlxzKicoW14nXSopJy8pOwogICAgICAgIHZhciBsYWJlbCA9IHJvdy5tYXRjaCgvbGFiZWw6XHMqJygoPzpbXidcXF18XFwuKSopJy8pOwogICAgICAgIHJldHVybiB7IGlkOiBpZCA_IGlkWzFdIDogJycsIGxhYmVsOiBsYWJlbCA_IGxhYmVsWzFdLnJlcGxhY2UoL1xcJy9nLCAiJyIpIDogJycgfTsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2YXIgbGl2ZVNjcmlwdCA9IGFsbChkb2N1bWVudCwgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignc3luY0Zyb21MaXN0aW5nJykgPiAtMTsKICB9KVswXTsKICBpZiAobGl2ZVNjcmlwdCkgcmVhZFNjcmlwdEJpdHMobGl2ZVNjcmlwdC50ZXh0Q29udGVudCwgY2ZnKTsKCiAgLyog0L_QvtC40YHQutC-0LLRi9C1INC-0YLQstC10YLRiyBGQVEg4oCUINC40LcgbGQranNvbiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgcyA9IGFsbChkb2N1bWVudCwgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOwogICAgICB2YXIgZmFxID0gKG9bJ0BncmFwaCddIHx8IFtdKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJzsgfSlbMF07CiAgICAgIGlmICghZmFxIHx8ICFBcnJheS5pc0FycmF5KGZhcS5tYWluRW50aXR5KSkgcmV0dXJuOwogICAgICBmYXEubWFpbkVudGl0eS5mb3JFYWNoKGZ1bmN0aW9uIChxLCBpKSB7CiAgICAgICAgaWYgKGNmZy5mYXFbaV0pIGNmZy5mYXFbaV0uc2NoZW1hQSA9IChxLmFjY2VwdGVkQW5zd2VyICYmIHEuYWNjZXB0ZWRBbnN3ZXIudGV4dCkgfHwgJyc7CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgeyAvKiDQv9C-0LvRjyDQvtGB0YLQsNC90YPRgtGB0Y8g0L_Rg9GB0YLRi9C80LgsINC_0YDQuCDRgdCx0L7RgNC60LUg0LLQvtC30YzQvNGR0Lwg0LjQtyDQuNGB0YXQvtC00L3QuNC60LAgKi8gfQogIH0pKCk7CgogIHZhciBjYXJkQ291bnQgPSBhbGwobGl2ZSwgJyNwdC1ncmlkIC5jYXJkJykubGVuZ3RoOwoKICAvKiAtLS0tLS0tLS0tINCy0ZHRgNGB0YLQutCwINC_0LDQvdC10LvQuCAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2enB0LXJvb3QsI2F2enB0LXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnpwdC1yb290IGlucHV0LCNhdnpwdC1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cHQtcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2enB0LXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2enB0LXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enB0LWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enB0LWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnpwdC1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnpwdC1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1mIGlucHV0LCNhdnpwdC1yb290IC5hdnpwdC1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MnB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnpwdC1yb290IC5hdnpwdC1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6cHQtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LW5vdGV7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjo2cHggMCAwfScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnpwdC1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6cHQtbXNne2ZvbnQtc2l6ZToxM3B4fScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LXN0YXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTlweDtiYWNrZ3JvdW5kOiNmMGYwZjI7Zm9udC1zaXplOjEycHg7bWFyZ2luLXJpZ2h0OjZweH0nCiAgXS5qb2luKCcnKTsKCiAgZnVuY3Rpb24gZXNjKHMpIHsKICAgIHJldHVybiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKQogICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICB9CgogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2enB0LWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsgdGFnICsgJzwvZGl2Pic7CiAgfQoKICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2enB0LXdpbiI-JyArCiAgICAnPGRpdiBpZD0iYXZ6cHQtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQv9C-0YDRgtGA0LXRgtC90YvRhSDRhNC-0YLQvtGB0LXRgdGB0LjQuTwvaDI-JyArCiAgICAnPHNwYW4gY2xhc3M9ImF2enB0LXN0YXQiIGlkPSJhdnpwdC1jb3VudCI-0KHRitGR0LzQvtC6INCyINGB0LXRgtC60LU6ICcgKyBjYXJkQ291bnQgKyAnPC9zcGFuPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enB0LWIiIGlkPSJhdnpwdC1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpwdC1ib2R5Ij4nOwoKICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cHQtc2VjIiBvcGVuPjxzdW1tYXJ5PtCh0LXRgtC60LAg0YHRitGR0LzQvtC6PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enB0LWluIj4nICsKICAgICc8cCBjbGFzcz0iYXZ6cHQtaGludCI-0KHQtdC50YfQsNGBINCyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0YsgJyArIGNhcmRDb3VudCArICcg0YHRitGR0LzQvtC6LiDQndCw0LbQvNC40YLQtSDCq9Cf0LXRgNC10YHQvtCx0YDQsNGC0YzCuywgJyArCiAgICAn0YfRgtC-0LHRiyDQv9C-0LTRgtGP0L3Rg9GC0Ywg0LLRgdGRLCDRh9GC0L4g0L_QvtGP0LLQuNC70L7RgdGMINCyIHdmb2xpbyDQv9C-0YHQu9C1INC_0L7RgdC70LXQtNC90LXQuSDRgdCx0L7RgNC60Lg6INC_0L7QtNGC0Y_QvdGD0YLRi9C1INGB0LrRgNC40L_RgtC-0LwgJyArCiAgICAn0LrQsNGA0YLQvtGH0LrQuCDRgdGC0LDQvdGD0YIg0YfQsNGB0YLRjNGOINC60L7QtNCwLCDQuCDQuNGFINGD0LLQuNC00Y_RgiDQmNCYLdC60YDQsNGD0LvQtdGA0YsuINCa0LDRgtC10LPQvtGA0LjQuCwg0LLRi9GB0YLQsNCy0LvQtdC90L3Ri9C1INCy0YDRg9GH0L3Rg9GOLCAnICsKICAgICfRgdC-0YXRgNCw0L3Rj9GC0YHRjy4g0KfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0L_QsNC90LXQu9GMINC_0YDQvtGB0YLQsNCy0LjRgiDQstC10LfQtNC1INGB0LDQvNCwLjwvcD4nICsKICAgICc8YnV0dG9uIGNsYXNzPSJhdnpwdC1iIiBpZD0iYXZ6cHQtcmVidWlsZCI-0J_QtdGA0LXRgdC-0LHRgNCw0YLRjCDRgdC10YLQutGDINC40Lcg0LvQuNGB0YLQuNC90LPQsDwvYnV0dG9uPicgKwogICAgJzxwIGNsYXNzPSJhdnpwdC1ub3RlIiBpZD0iYXZ6cHQtcmVidWlsZC1tc2ciPtCd0LUg0L_QtdGA0LXRgdC-0LHQuNGA0LDQu9Cw0YHRjCDigJQg0LrQvtC0INCy0L7Qt9GM0LzRkdGC0YHRjyDQutCw0Log0LXRgdGC0YwuPC9wPicgKwogICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cHQtc2VjIj48c3VtbWFyeT7QqNCw0L_QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enB0LWluIj4nICsKICAgIGZpZWxkKCfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5leWVicm93JywgY2ZnLmhlcm8uZXllYnJvdykgKwogICAgJzxkaXYgY2xhc3M9ImF2enB0LXJvdyI-JyArIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LosINGB0YLRgNC-0LrQsCAxJywgJ2hlcm8ubGluZTEnLCBjZmcuaGVyby5saW5lMSkgKwogICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAyIOKAlCDQvdCw0YfQsNC70L4nLCAnaGVyby5saW5lMicsIGNmZy5oZXJvLmxpbmUyKSArICc8L2Rpdj4nICsKICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMiDigJQg0LrRg9GA0YHQuNCyJywgJ2hlcm8ubGluZTJlbScsIGNmZy5oZXJvLmxpbmUyZW0pICsKICAgIGZpZWxkKCfQm9C40LQgKNGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC_0L7QtNGB0YLQsNCy0LjRgtGB0Y8g0YHQsNC80L4pJywgJ2xlZGUnLCBjZmcubGVkZSwgJ2FyZWEnKSArCiAgICAnPGRpdiBjbGFzcz0iYXZ6cHQtcm93Ij4nICsgZmllbGQoJ9Ch0YHRi9C70LrQsCDQvdCwINGG0LXQvdGLIOKAlCDRgtC10LrRgdGCJywgJ3ByaWNlLnRleHQnLCBjZmcucHJpY2UudGV4dCkgKwogICAgZmllbGQoJ9Ch0YHRi9C70LrQsCDQvdCwINGG0LXQvdGLIOKAlCDQsNC00YDQtdGBJywgJ3ByaWNlLmhyZWYnLCBjZmcucHJpY2UuaHJlZikgKyAnPC9kaXY-JyArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwdC1zZWMiPjxzdW1tYXJ5PtCk0LjQu9GM0YLRgNGLINC4INCx0LXQs9GD0YnQsNGPINGB0YLRgNC-0LrQsDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwdC1pbiI-JyArCiAgICAnPGRpdiBjbGFzcz0iYXZ6cHQtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINC90LDQtCDRgdC10YLQutC-0LknLCAnZmlsdGVyc0xhYmVsJywgY2ZnLmZpbHRlcnNMYWJlbCkgKwogICAgZmllbGQoJ9Ci0LXQutGB0YIg0L_Rg9GB0YLQvtC5INC60LDRgtC10LPQvtGA0LjQuCcsICdlbXB0eScsIGNmZy5lbXB0eSkgKyAnPC9kaXY-JzsKICBjZmcuY2F0cy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICBoICs9IGZpZWxkKCfQmtCw0YLQtdCz0L7RgNC40Y8gwqsnICsgYy5pZCArICfCuycsICdjYXRzLicgKyBpICsgJy5sYWJlbCcsIGMubGFiZWwpOwogIH0pOwogIGggKz0gZmllbGQoJ9CR0LXQs9GD0YnQsNGPINGB0YLRgNC-0LrQsCDigJQg0YfQtdGA0LXQtyDQt9Cw0L_Rj9GC0YPRjicsICd0aWNrZXJMaW5lJywgY2ZnLnRpY2tlci5qb2luKCcsICcpLCAnYXJlYScpICsKICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enB0LXNlYyI-PHN1bW1hcnk-0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLICgnICsgY2ZnLmZhcS5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwdC1pbiI-JyArCiAgICAnPHAgY2xhc3M9ImF2enB0LWhpbnQiPtCS0L7Qv9GA0L7RgSDQv9GA0LDQstC40YLRgdGPINC-0LTQuNC9INGA0LDQtyDigJQg0YPRhdC-0LTQuNGCINC4INCyINCy0LjQtNC40LzRi9C5INCx0LvQvtC6LCDQuCDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60LAuICcgKwogICAgJ9Ce0YLQstC10YLQvtCyINC00LLQsDog0LLQuNC00LjQvNGL0Lkg0L3QsNC_0LjRgdCw0L0g0L7RgiDQv9C10YDQstC-0LPQviDQu9C40YbQsCwg0L_QvtC40YHQutC-0LLRi9C5IOKAlCDQvtGCINGC0YDQtdGC0YzQtdCz0L4uINCi0LDQuiDQuCDQt9Cw0LTRg9C80LDQvdC-LCAnICsKICAgICfQvtC90Lgg0L3QtSDRgdC40L3RhdGA0L7QvdC40LfQuNGA0YPRjtGC0YHRjy48L3A-JyArCiAgICAnPGRpdiBjbGFzcz0iYXZ6cHQtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2ZhcUxhYmVsJywgY2ZnLmZhcUxhYmVsKSArCiAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INGA0LDQt9C00LXQu9CwJywgJ2ZhcVRpdGxlJywgY2ZnLmZhcVRpdGxlKSArICc8L2Rpdj4nOwogIGNmZy5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cHQtY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ2ZhcS4nICsgaSArICcucScsIGYucSkgKwogICAgICBmaWVsZCgn0JLQuNC00LjQvNGL0Lkg0L7RgtCy0LXRgiAo0LzQvtC20L3QviBIVE1MOiAmbHQ7cCZndDssICZsdDthJmd0OyknLCAnZmFxLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Ce0YLQstC10YIg0LTQu9GPINC_0L7QuNGB0LrQsCAo0L7QsdGL0YfQvdGL0Lkg0YLQtdC60YHRgiknLCAnZmFxLicgKyBpICsgJy5zY2hlbWFBJywgZi5zY2hlbWFBLCAnYXJlYScpICsKICAgICAgJzwvZGl2Pic7CiAgfSk7CiAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwdC1zZWMiPjxzdW1tYXJ5PtCf0YDQuNC30YvQsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwdC1pbiI-JyArCiAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ2N0YS50aXRsZScsIGNmZy5jdGEudGl0bGUpOwogIGNmZy5jdGEuYnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uIChiLCBpKSB7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwdC1jYXJkIj48aDQ-0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6cHQtcm93Ij4nICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLnRleHQnLCBiLnRleHQpICsKICAgICAgZmllbGQoJ9CQ0LTRgNC10YEnLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLmhyZWYnLCBiLmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgfSk7CiAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwdC1zZWMiPjxzdW1tYXJ5PtCU0LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enB0LWluIj4nICsKICAgICc8cCBjbGFzcz0iYXZ6cHQtaGludCI-0JfQsNCz0L7Qu9C-0LLQvtC6INGD0YXQvtC00LjRgiDQsiDQvNC10YLQsC3RgtC10LPQuCDQuCDQsiDRgNCw0LfQvNC10YLQutGDINC-0LTQvdC-0LLRgNC10LzQtdC90L3Qvi4gJyArCiAgICAn0KfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0LIg0L7Qv9C40YHQsNC90LjQuCDQv9C-0LTRgdGC0LDQstC70Y_QtdGC0YHRjyDRgdCw0LzQvi48L3A-JyArCiAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INGB0YLRgNCw0L3QuNGG0YsnLCAnbWV0YS50aXRsZScsIGNmZy5tZXRhLnRpdGxlKSArCiAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ21ldGEuZGVzYycsIGNmZy5tZXRhLmRlc2MsICdhcmVhJykgKwogICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICBoICs9ICc8L2Rpdj48ZGl2IGlkPSJhdnpwdC1mb290Ij4nICsKICAgICc8YnV0dG9uIGNsYXNzPSJhdnpwdC1iIHAiIGlkPSJhdnpwdC1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys8L2J1dHRvbj4nICsKICAgICc8YnV0dG9uIGNsYXNzPSJhdnpwdC1iIiBpZD0iYXZ6cHQtdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAnPHNwYW4gaWQ9ImF2enB0LW1zZyI-PC9zcGFuPjwvZGl2PicgKwogICAgJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE4cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6cHQtb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAncGxhY2Vob2xkZXI9ItCX0LTQtdGB0Ywg0L_QvtGP0LLQuNGC0YHRjyDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyI-PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4nOwoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvb3QuaWQgPSAnYXZ6cHQtcm9vdCc7CiAgcm9vdC5pbm5lckhUTUwgPSBoOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKCiAgZnVuY3Rpb24gbXNnKHMpIHsgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHQtbXNnJykudGV4dENvbnRlbnQgPSBzOyB9CiAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHQtY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwoKICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAINGE0L7RgNC80YsgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyksIG8gPSBvYmosIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICBvW3BhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXSA9IHZhbDsKICB9CgogIGZ1bmN0aW9uIGNvbGxlY3QoKSB7CiAgICB2YXIgZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgdmFyIHAgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAocCA9PT0gJ3RpY2tlckxpbmUnKSB7CiAgICAgICAgZC50aWNrZXIgPSBlbC52YWx1ZS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgc2V0UGF0aChkLCBwLCBlbC52YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiBkOwogIH0KCiAgLyogLS0tLS0tLS0tLSDQv9C10YDQtdGB0LHQvtGA0LrQsCDRgdC10YLQutC4IC0tLS0tLS0tLS0gKi8KCiAgdmFyIHJlYnVpbHQgPSBudWxsOyAvLyB7IGh0bWwsIGl0ZW1zIH0g0LvQuNCx0L4gbnVsbCwg0LXRgdC70Lgg0L3QtSDQv9C10YDQtdGB0L7QsdC40YDQsNC70LgKICB2YXIgc2hyaW5rT2sgPSBmYWxzZTsgLy8g0L_QvtC00YLQstC10YDQttC00LXQvdC40LUg0L3QsCDRgdCx0L7RgNC60YMsINC60L7RgtC-0YDQsNGPINCj0JzQldCd0KzQqNCQ0JXQoiDRgdC10YLQutGDCgogIGZ1bmN0aW9uIHBpY2tXaWR0aChzcmNzZXQsIHdhbnQpIHsKICAgIHZhciBwYXJ0cyA9IChzcmNzZXQgfHwgJycpLnNwbGl0KCcsJyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBwID0gcGFydHNbaV0udHJpbSgpOwogICAgICBpZiAocC5zbGljZSgtKFN0cmluZyh3YW50KS5sZW5ndGggKyAyKSkgPT09ICcgJyArIHdhbnQgKyAndycpIHsKICAgICAgICB2YXIgdSA9IHAuc2xpY2UoMCwgcC5sYXN0SW5kZXhPZignICcpKS50cmltKCk7CiAgICAgICAgaWYgKHUuaW5kZXhPZignaHR0cCcpID09PSAwKSByZXR1cm4gdTsKICAgICAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgICAgIHJldHVybiAnaHR0cHM6Ly8nICsgdTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvKiDQptCy0LXRgi3Qt9Cw0LPQu9GD0YjQutGDINCx0LXRgNGR0Lwg0LjQtyDQsNGC0YDQuNCx0YPRgtCwIHN0eWxlLCDQsCDQvdC1INC40Lcgc3R5bGUuYmFja2dyb3VuZENvbG9yOgogICAgINCx0YDQsNGD0LfQtdGAINCy0LXRgNC90ZHRgiByZ2IoMTI1LCAxMjEsIDExOCkg0YLQsNC8LCDQs9C00LUg0LIg0YDQsNC30LzQtdGC0LrQtSDRgdGC0L7QuNGCICM3ZDc5NzYuICovCiAgZnVuY3Rpb24gYmdDb2xvcihjYW52YXMpIHsKICAgIGlmICghY2FudmFzKSByZXR1cm4gJyNlY2VjZWMnOwogICAgdmFyIHJhdyA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgfHwgJyc7CiAgICB2YXIgaGV4ID0gcmF3Lm1hdGNoKC8jWzAtOWEtZl17Myw4fS9pKTsKICAgIGlmIChoZXgpIHJldHVybiBoZXhbMF0udG9Mb3dlckNhc2UoKTsKICAgIHZhciByZ2IgPSByYXcubWF0Y2goL3JnYmE_XChccyooXGQrKVxEKyhcZCspXEQrKFxkKykvaSk7CiAgICBpZiAoIXJnYikgcmV0dXJuICcjZWNlY2VjJzsKICAgIHJldHVybiAnIycgKyBbcmdiWzFdLCByZ2JbMl0sIHJnYlszXV0ubWFwKGZ1bmN0aW9uIChuKSB7CiAgICAgIHJldHVybiAoJzAnICsgcGFyc2VJbnQobiwgMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpOwogICAgfSkuam9pbignJyk7CiAgfQoKICBmdW5jdGlvbiBhdHRyRXNjKHMpIHsKICAgIHJldHVybiBTdHJpbmcocykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7JykKICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8-L2csICcmZ3Q7JykKICAgICAgLnJlcGxhY2UoLyAvZywgJyZuYnNwOycpOwogIH0KICBmdW5jdGlvbiB0ZXh0RXNjKHMpIHsKICAgIHJldHVybiBTdHJpbmcocykucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpOwogIH0KCiAgZnVuY3Rpb24gY2FyZEh0bWwoZCkgewogICAgcmV0dXJuICcgICAgPGEgY2xhc3M9ImNhcmQiIGhyZWY9IicgKyBkLmhyZWYgKyAnIiBkYXRhLWNhdD0iJyArIGQuY2F0cy5qb2luKCcgJykgKyAnIj5cbicgKwogICAgICAgICAgICcgICAgICA8c3BhbiBjbGFzcz0iY2FyZC1zaG90IiBzdHlsZT0iYmFja2dyb3VuZDonICsgZC5iZyArICciPlxuJyArCiAgICAgICAgICAgJyAgICAgICAgPGltZyBzcmM9IicgKyBkLnNyYyArICciXG4nICsKICAgICAgICAgICAnICAgICAgICAgICAgIHNyY3NldD0iJyArIGQuc3Jjc2V0ICsgJyJcbicgKwogICAgICAgICAgICcgICAgICAgICAgICAgc2l6ZXM9IicgKyBTSVpFUyArICciXG4nICsKICAgICAgICAgICAnICAgICAgICAgICAgIGFsdD0iJyArIGF0dHJFc2MoZC5hbHRSYXcpICsgJyIgd2lkdGg9IjYwMCIgaGVpZ2h0PSI2MDAiIGxvYWRpbmc9ImxhenkiIGRlY29kaW5nPSJhc3luYyI–XG4nICsKICAgICAgICAgICAnICAgICAgPC9zcGFuPlxuJyArCiAgICAgICAgICAgJyAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXRpdGxlIj4nICsgdGV4dEVzYyhkLnRpdGxlKSArICc8L3NwYW4-XG4nICsKICAgICAgICAgICAnICAgIDwvYT4nOwogIH0KCiAgLyog0JrQsNGC0LXQs9C-0YDQuNC4LCDQstGL0YHRgtCw0LLQu9C10L3QvdGL0LUg0LLRgNGD0YfQvdGD0Y4sINCy0LDQttC90LXQtSDQsNCy0YLQvtC-0L_RgNC10LTQtdC70LXQvdC40Y8g4oCUCiAgICAg0L_QtdGA0LXRgdCx0L7RgNC60LAg0L3QtSDQtNC-0LvQttC90LAg0LjRhSDRgdGC0LjRgNCw0YLRjC4gKi8KICBmdW5jdGlvbiBjdXJyZW50T3ZlcnJpZGVzKCkgewogICAgdmFyIG1hcCA9IHt9OwogICAgYWxsKGxpdmUsICcjcHQtZ3JpZCBhLmNhcmQnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICB2YXIgaHJlZiA9IChlbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJykucmVwbGFjZSgvXC8kLywgJycpOwogICAgICB2YXIgdGl0bGUgPSB0KG9uZShlbCwgJy5jYXJkLXRpdGxlJykpOwogICAgICB2YXIgd2FzID0gKGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jYXQnKSB8fCAnJykudHJpbSgpOwogICAgICBpZiAoaHJlZiAmJiB3YXMgIT09IGRldGVjdENhdHModGl0bGUpLmpvaW4oJyAnKSkgbWFwW2hyZWZdID0gd2FzOwogICAgfSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHQtcmVidWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgbm90ZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enB0LXJlYnVpbGQtbXNnJyk7CiAgICBub3RlLnRleHRDb250ZW50ID0gJ9Cn0LjRgtCw0Y4g0LvQuNGB0YLQuNC90LMgJyArIExJU1RJTkdfVVJMICsgJ-KApic7CgogICAgZmV0Y2goTElTVElOR19VUkwsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LvQuNGB0YLQuNC90LMg0LLQtdGA0L3Rg9C7ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGl0ZW1zID0gYWxsKGRvYywgJy5saXN0aW5nLWl0ZW0nKTsKICAgICAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQu9C40YHRgtC40L3Qs9C1INC90LXRgiAubGlzdGluZy1pdGVtIOKAlCDQstGR0YDRgdGC0LrQsCB3Zm9saW8g0LjQt9C80LXQvdC40LvQsNGB0YwnKTsKCiAgICAgICAgdmFyIG92ZXJyaWRlcyA9IGN1cnJlbnRPdmVycmlkZXMoKTsKICAgICAgICB2YXIgb3V0ID0gW10sIHNraXBwZWQgPSAwLCBtYW51YWwgPSAwLCBicm9rZW4gPSAwLCBzZWVuID0ge307CgogICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICB2YXIgbGluayA9IGl0ZW1MaW5rKGl0KTsKICAgICAgICAgIHZhciBpbWcgPSBvbmUoaXQsICdpbWcnKTsKICAgICAgICAgIGlmICghbGluayB8fCAhaW1nKSB7IGJyb2tlbisrOyByZXR1cm47IH0KCiAgICAgICAgICB2YXIgaHJlZiA9IChsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKS5yZXBsYWNlKC9cLyQvLCAnJyk7CiAgICAgICAgICBpZiAoIWhyZWYgfHwgc2VlbltocmVmXSkgcmV0dXJuOwogICAgICAgICAgc2VlbltocmVmXSA9IHRydWU7CgogICAgICAgICAgdmFyIGFsdFJhdyA9IGltZy5nZXRBdHRyaWJ1dGUoJ2FsdCcpIHx8ICcnOwogICAgICAgICAgdmFyIHRpdGxlID0gYWx0UmF3LnJlcGxhY2UoLyZuYnNwOy9naSwgJyAnKS5yZXBsYWNlKC_CoC9nLCAnICcpLnRyaW0oKTsKICAgICAgICAgIHZhciBzcyA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgaW1nLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgJyc7CgogICAgICAgICAgdmFyIHU0NDAgPSBwaWNrV2lkdGgoc3MsIDQ0MCksIHU2MDAgPSBwaWNrV2lkdGgoc3MsIDYwMCksIHUxMjQwID0gcGlja1dpZHRoKHNzLCAxMjQwKTsKICAgICAgICAgIGlmICghdTYwMCkgeyBza2lwcGVkKys7IHJldHVybjsgfQogICAgICAgICAgdmFyIHNldCA9IFtdOwogICAgICAgICAgaWYgKHU0NDApIHNldC5wdXNoKHU0NDAgKyAnIDQ0MHcnKTsKICAgICAgICAgIGlmICh1NjAwKSBzZXQucHVzaCh1NjAwICsgJyA2MDB3Jyk7CiAgICAgICAgICAvKiAxMjQwIOKAlCDQv9C-0YLQvtC70L7QuiDRgdC-0LfQvdCw0YLQtdC70YzQvdC-OiAyNTIwdyDQstC10YHQuNGCIDEsNiDQnNCRINC90LAg0LrQsNC00YAgKi8KICAgICAgICAgIGlmICh1MTI0MCkgc2V0LnB1c2godTEyNDAgKyAnIDEyNDB3Jyk7CgogICAgICAgICAgdmFyIGNhdHMgPSBkZXRlY3RDYXRzKHRpdGxlKTsKICAgICAgICAgIGlmIChvdmVycmlkZXNbaHJlZl0gIT09IHVuZGVmaW5lZCkgeyBjYXRzID0gb3ZlcnJpZGVzW2hyZWZdLnNwbGl0KCcgJykuZmlsdGVyKEJvb2xlYW4pOyBtYW51YWwrKzsgfQoKICAgICAgICAgIG91dC5wdXNoKHsKICAgICAgICAgICAgaHJlZjogaHJlZiwgdGl0bGU6IHRpdGxlLCBhbHRSYXc6IGFsdFJhdywKICAgICAgICAgICAgc3JjOiB1NjAwLCBzcmNzZXQ6IHNldC5qb2luKCcsICcpLCBiZzogYmdDb2xvcihvbmUoaXQsICdjYW52YXMnKSksIGNhdHM6IGNhdHMKICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICB2YXIgd2FzID0gY2FyZENvdW50LCBub3cgPSBvdXQubGVuZ3RoOwoKICAgICAgICAvKiDQodC10YLQutCwINC90LUg0LTQvtC70LbQvdCwINGB0YrRkdC20LjQstCw0YLRjNGB0Y8g0YHQsNC80LAg0YHQvtCx0L7QuTog0LDQu9GM0LHQvtC80Ysg0L_QvtGH0YLQuCDQstGB0LXQs9C00LAKICAgICAgICAgICDRgtC-0LvRjNC60L4g0LTQvtCx0LDQstC70Y_RjtGC0YHRjy4g0JXRgdC70Lgg0LjQtyDQu9C40YHRgtC40L3Qs9CwINC_0YDQuNGI0LvQviDQvNC10L3RjNGI0LUsINGH0LXQvCDRgdGC0L7QuNGCCiAgICAgICAgICAg0LIg0LrQvtC00LUsIOKAlCDRjdGC0L4g0L_QvtGH0YLQuCDQvdCw0LLQtdGA0L3Rj9C60LAg0LzQvtCx0LjQu9GM0L3QsNGPINCy0ZHRgNGB0YLQutCwIHdmb2xpbzog0L7QvdCwCiAgICAgICAgICAg0L7RgtC00LDRkdGCINC_0LXRgNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDICgxMCDQsNC70YzQsdC-0LzQvtCyKSDQstC80LXRgdGC0L4g0LLRgdC10YUuINCi0LDQutCw0Y8g0YHQsdC-0YDQutCwCiAgICAgICAgICAg0LfQsNGC0ZHRgNC70LAg0LHRiyDQvtGB0YLQsNC70YzQvdGL0LUsINC_0L7RjdGC0L7QvNGDINC_0LXRgNCy0YvQvCDQvdCw0LbQsNGC0LjQtdC8INC90LUg0L7RgtC00LDRkdC8INC10ZEsCiAgICAgICAgICAg0LAg0L7QsdGK0Y_RgdC90Y_QtdC8LiDQktGC0L7RgNC-0LUg0L3QsNC20LDRgtC40LUg4oCUINGN0YLQviDRg9C20LUg0L7RgdC-0LfQvdCw0L3QvdC-0LUgwqvQtNCwLCDRg9C00LDQu9C40LvCuy4gKi8KICAgICAgICBpZiAobm93IDwgd2FzICYmICFzaHJpbmtPaykgewogICAgICAgICAgcmVidWlsdCA9IG51bGw7CiAgICAgICAgICBzaHJpbmtPayA9IHRydWU7CiAgICAgICAgICBub3RlLnRleHRDb250ZW50ID0gJ9Ch0KLQntCfOiDQu9C40YHRgtC40L3QsyDQstC10YDQvdGD0LsgJyArIG5vdyArICcg0YHRitGR0LzQvtC6LCDQsCDQsiDQutC-0LTQtSAnICsgd2FzICsKICAgICAgICAgICAgJy4g0KHQutC-0YDQtdC1INCy0YHQtdCz0L4g0LLRiyDQsiDQvNC-0LHQuNC70YzQvdC-0Lwg0LHRgNCw0YPQt9C10YDQtSDigJQgd2ZvbGlvINC-0YLQtNCw0ZHRgiDRgtC10LvQtdGE0L7QvdCw0Lwg0YLQvtC70YzQutC-INC_0LXRgNCy0YPRjiAnICsKICAgICAgICAgICAgJ9GB0YLRgNCw0L3QuNGG0YMg0LvQuNGB0YLQuNC90LPQsC4g0J_QtdGA0LXRgdC-0LHQtdGA0LjRgtC1INGBINC60L7QvNC_0YzRjtGC0LXRgNCwLiDQldGB0LvQuCDQsNC70YzQsdC-0LzRiyDQv9GA0LDQstC00LAg0YPQtNCw0LvQtdC90Ysg4oCUICcgKwogICAgICAgICAgICAn0L3QsNC20LzQuNGC0LUgwqvQn9C10YDQtdGB0L7QsdGA0LDRgtGMwrsg0LXRidGRINGA0LDQtywg0YHQsdC-0YDQutCwINC_0YDQvtC50LTRkdGCINGBICcgKyBub3cgKyAnINGB0YrRkdC80LrQsNC80LguJzsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2hyaW5rT2sgPSBmYWxzZTsKCiAgICAgICAgcmVidWlsdCA9IHsgaHRtbDogb3V0Lm1hcChjYXJkSHRtbCkuam9pbignXG4nKSwgaXRlbXM6IG91dCB9OwoKICAgICAgICB2YXIgbGluZSA9ICfQodC-0LHRgNCw0L3QviDRgdGK0ZHQvNC-0Lo6ICcgKyBub3cgKwogICAgICAgICAgKG5vdyA9PT0gd2FzID8gJyDigJQg0YHRgtC-0LvRjNC60L4g0LbQtSwg0YfRgtC-INC4INCyINC60L7QtNC1LicgOiAnICjQsdGL0LvQviAnICsgd2FzICsgJywgJyArCiAgICAgICAgICAgIChub3cgPiB3YXMgPyAnKycgKyAobm93IC0gd2FzKSA6IFN0cmluZyhub3cgLSB3YXMpKSArICcpLicpOwogICAgICAgIGlmIChtYW51YWwpIGxpbmUgKz0gJyDQoNGD0YfQvdGL0YUg0LrQsNGC0LXQs9C-0YDQuNC5INGB0L7RhdGA0LDQvdC10L3QvjogJyArIG1hbnVhbCArICcuJzsKICAgICAgICBpZiAoc2tpcHBlZCkgbGluZSArPSAnINCf0YDQvtC_0YPRidC10L3QviDQsdC10Lcg0L7QsdC70L7QttC60Lg6ICcgKyBza2lwcGVkICsgJy4nOwogICAgICAgIGlmIChicm9rZW4pIGxpbmUgKz0gJyDQktCd0JjQnNCQ0J3QmNCVOiDQutCw0YDRgtC-0YfQtdC6INCx0LXQtyDRgdGB0YvQu9C60Lgg0LjQu9C4INC-0LHQu9C-0LbQutC4OiAnICsgYnJva2VuICsKICAgICAgICAgICcg4oCUINCy0ZHRgNGB0YLQutCwINC70LjRgdGC0LjQvdCz0LAgd2ZvbGlvINC80L7Qs9C70LAg0L_QvtC80LXQvdGP0YLRjNGB0Y8uJzsKICAgICAgICBub3RlLnRleHRDb250ZW50ID0gbGluZTsKICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwdC1jb3VudCcpLnRleHRDb250ZW50ID0gJ9Ch0YrRkdC80L7QuiDQsiDRgdC10YLQutC1OiAnICsgbm93OwogICAgICB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICByZWJ1aWx0ID0gbnVsbDsKICAgICAgICBub3RlLnRleHRDb250ZW50ID0gJ9Cd0LUg0L_QtdGA0LXRgdC-0LHRgNCw0LvQvtGB0Yw6ICcgKyBlLm1lc3NhZ2UgKyAnLiDQmtC-0LQg0YHQvtCx0LXRgNGR0YLRgdGPINGBINGC0LXQutGD0YnQtdC5INGB0LXRgtC60L7QuS4nOwogICAgICB9KTsKICB9OwoKICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCDQt9C90LDRh9C10L3QuNC5INCyINGA0LDQt9C80LXRgtC60YMgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgdmFyIGtlZXAgPSBbXS5zbGljZS5jYWxsKGVsLmNoaWxkcmVuKTsKICAgIGVsLnRleHRDb250ZW50ID0gdjsKICAgIGtlZXAuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBlbC5hcHBlbmRDaGlsZChrKTsgfSk7CiAgfQogIGZ1bmN0aW9uIHNldFBsYWluKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLnRleHRDb250ZW50ID0gdjsgfQoKICBmdW5jdGlvbiB3cml0ZUFsbChzY29wZSwgZCwgY291bnQpIHsKICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwoKICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgc2V0UGxhaW4obGluZXNbMF0sIGQuaGVyby5saW5lMSk7CiAgICBpZiAobGluZXNbMV0pIHsKICAgICAgdmFyIGVtID0gb25lKGxpbmVzWzFdLCAnZW0nKTsKICAgICAgaWYgKGVtKSB7CiAgICAgICAgLyogwqvRhNC-0YLQvtGB0LXRgdGB0LjQuCA8ZW0-0LIg0JrQsNC30LDQvdC4PC9lbT7CuyDigJQg0LzQtdC20LTRgyDQvdC40LzQuCDQv9GA0L7QsdC10LssIHRleHRDb250ZW50INC10LPQviDRgtC10YDRj9C10YIgKi8KICAgICAgICBsaW5lc1sxXS50ZXh0Q29udGVudCA9IGQuaGVyby5saW5lMiArICcgJzsKICAgICAgICBlbS50ZXh0Q29udGVudCA9IGQuaGVyby5saW5lMmVtOwogICAgICAgIGxpbmVzWzFdLmFwcGVuZENoaWxkKGVtKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZXRQbGFpbihsaW5lc1sxXSwgZC5oZXJvLmxpbmUyKTsKICAgICAgfQogICAgfQoKICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5sZWRlJyksIHdpdGhDb3VudChkLmxlZGUsIGNvdW50KSk7CgogICAgdmFyIHByaWNlID0gb25lKHNjb3BlLCAnLmxlZGUtcHJpY2UnKTsKICAgIGlmIChwcmljZSkgewogICAgICBpZiAoZC5wcmljZS5ocmVmKSBwcmljZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkLnByaWNlLmhyZWYpOwogICAgICBzZXRUZXh0KHByaWNlLCBkLnByaWNlLnRleHQpOwogICAgfQoKICAgIHZhciBmbCA9IGFsbChzY29wZSwgJy5maWx0ZXJzLWxhYmVsJyk7CiAgICBzZXRQbGFpbihmbFswXSwgZC5maWx0ZXJzTGFiZWwpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnI3B0LWVtcHR5JyksIGQuZW1wdHkpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAuZmlsdGVycy1sYWJlbCcpLCBkLmZhcUxhYmVsKTsKICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5zZWN0aW9uLWhlYWQgLmgyJyksIGQuZmFxVGl0bGUpOwoKICAgIGFsbChzY29wZSwgJy5mYXEtaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgIHZhciBmID0gZC5mYXFbaV07CiAgICAgIGlmICghZikgcmV0dXJuOwogICAgICBzZXRUZXh0KG9uZShpdCwgJy5mYXEtcScpLCBmLnEpOwogICAgICB2YXIgaW5uZXIgPSBvbmUoaXQsICcuZmFxLWEtaW5uZXInKTsKICAgICAgaWYgKGlubmVyICYmIHR5cGVvZiBmLmEgPT09ICdzdHJpbmcnKSBpbm5lci5pbm5lckhUTUwgPSBmLmE7CiAgICB9KTsKCiAgICB2YXIgY3RhVGl0bGUgPSBvbmUoc2NvcGUsICcuY3RhIC5oMicpOwogICAgaWYgKGN0YVRpdGxlICYmIHR5cGVvZiBkLmN0YS50aXRsZSA9PT0gJ3N0cmluZycpIGN0YVRpdGxlLmlubmVySFRNTCA9IGQuY3RhLnRpdGxlOwogICAgYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICB2YXIgYnQgPSBkLmN0YS5idXR0b25zW2ldOwogICAgICBpZiAoIWJ0KSByZXR1cm47CiAgICAgIGlmIChidC5ocmVmKSBiLnNldEF0dHJpYnV0ZSgnaHJlZicsIGJ0LmhyZWYpOwogICAgICBhbGwoYiwgJy5idG4tbGFiZWwgPiBzcGFuJykuZm9yRWFjaChmdW5jdGlvbiAocykgeyBzZXRQbGFpbihzLCBidC50ZXh0KTsgfSk7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0L_RgNCw0LLQutCwINGB0LrRgNC40L_RgtCwINGB0YLRgNCw0L3QuNGG0YsgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBqc1N0cihzKSB7CiAgICByZXR1cm4gIiciICsgU3RyaW5nKHMpLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgvJy9nLCAiXFwnIikgKyAiJyI7CiAgfQoKICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQsIGNvdW50KSB7CiAgICB2YXIgb3V0ID0gc3JjLCBtaXNzZWQgPSBbXTsKCiAgICBmdW5jdGlvbiBzdWIocmUsIG1ha2UsIG5hbWUpIHsKICAgICAgaWYgKCFyZS50ZXN0KG91dCkpIHsgbWlzc2VkLnB1c2gobmFtZSk7IHJldHVybjsgfQogICAgICBvdXQgPSBvdXQucmVwbGFjZShyZSwgbWFrZSk7CiAgICB9CgogICAgc3ViKC8odmFyIHRpdGxlID0gKScoPzpbXidcXF18XFwuKSonLywKICAgICAgICBmdW5jdGlvbiAobSwgcDEpIHsgcmV0dXJuIHAxICsganNTdHIoZC5tZXRhLnRpdGxlKTsgfSwgJ9C30LDQs9C-0LvQvtCy0L7QuiDQsiBpbml0TWV0YScpOwoKICAgIHN1YigvKHZhciBkZXNjID0gKScoPzpbXidcXF18XFwuKSonLywKICAgICAgICBmdW5jdGlvbiAobSwgcDEpIHsgcmV0dXJuIHAxICsganNTdHIod2l0aENvdW50KGQubWV0YS5kZXNjLCBjb3VudCkpOyB9LCAn0L7Qv9C40YHQsNC90LjQtSDQsiBpbml0TWV0YScpOwoKICAgIC8qINGB0L_QuNGB0L7QuiDQutC70Y7Rh9C10LLRi9GFINGB0LvQvtCyINC00LXRgNC20LjQvCDQtdC00LjQvdGL0Lw6INC_0LDQvdC10LvRjCDigJQg0LjRgdGC0L7Rh9C90LjQuiwg0YHQutGA0LjQv9GCCiAgICAgICDRgdGC0YDQsNC90LjRhtGLINC_0L7Qu9GD0YfQsNC10YIg0YLRgyDQttC1INC60L7Qv9C40Y4uICovCiAgICBzdWIoLyh2YXIgQ0FUX1dPUkRTID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgdmFyIGJvZHkgPSBDQVRfV09SRFMubWFwKGZ1bmN0aW9uIChwYWlyKSB7CiAgICAgICAgdmFyIGlkID0gKCInIiArIHBhaXJbMF0gKyAiJywiKTsKICAgICAgICB3aGlsZSAoaWQubGVuZ3RoIDwgMTEpIGlkICs9ICcgJzsKICAgICAgICB2YXIgd29yZHMgPSBwYWlyWzFdLm1hcChmdW5jdGlvbiAodykgeyByZXR1cm4ganNTdHIodyk7IH0pLmpvaW4oJywnKTsKICAgICAgICByZXR1cm4gJyAgICBbJyArIGlkICsgJyBbJyArIHdvcmRzICsgJ11dJzsKICAgICAgfSkuam9pbignLFxuJyk7CiAgICAgIHJldHVybiBwMSArICdcbicgKyBib2R5ICsgJ1xuICAnICsgcDI7CiAgICB9LCAn0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwINC60LDRgtC10LPQvtGA0LjQuScpOwoKICAgIC8qINCi0L7RgiDQttC1INC80L7QsdC40LvRjNC90YvQuSDQv9C-0LTQstC-0YUsINGH0YLQviDQsdGL0Lsg0LIg0L_QsNC90LXQu9C4LCDRgdC40LTQuNGCINC4INCyINGB0LrRgNC40L_RgtC1INGB0YLRgNCw0L3QuNGG0Ys6CiAgICAgICDQvdCwINGC0LXQu9C10YTQvtC90LDRhSAubGlzdGluZy1pdGVtIOKAlCDRjdGC0L4g0YHQsNC80LAg0YHRgdGL0LvQutCwLCDQuCBxdWVyeVNlbGVjdG9yINC10ZEg0L3QtQogICAgICAg0L3QsNGF0L7QtNC40LssINC_0L7RjdGC0L7QvNGDINCw0LLRgtC-0L_QvtC00YLRj9Cz0LjQstCw0L3QuNC1INC90L7QstGL0YUg0LDQu9GM0LHQvtC80L7QsiDRgyDQvNC-0LHQuNC70YzQvdGL0YUKICAgICAgINC_0L7RgdC10YLQuNGC0LXQu9C10Lkg0L3QtSDRgNCw0LHQvtGC0LDQu9C-INCy0L7QvtCx0YnQtS4g0J_RgNCw0LLQuNC8INC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LCDRh9GC0L7QsdGLCiAgICAgICDQt9Cw0L_Qu9Cw0YLQutCwINC00L7QtdGF0LDQu9CwINC00L4g0LHQvtC10LLQvtC5INGB0YLRgNCw0L3QuNGG0YsuINCV0YHQu9C4INGD0LbQtSDQv9C-0L_RgNCw0LLQu9C10L3QviDigJQg0L3QuNGH0LXQs9C-CiAgICAgICDQvdC1INC00LXQu9Cw0LXQvCDQuCDQsiDCq9C90LUg0L3QsNC50LTQtdC90L7CuyDQvdC1INC_0LjRiNC10LwuICovCiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgb2xkID0gInZhciBsaW5rID0gaXQucXVlcnlTZWxlY3RvcignYVtocmVmXScpOyI7CiAgICAgIHZhciBuZW8gPSAidmFyIGxpbmsgPSAoaXQudGFnTmFtZSA9PT0gJ0EnICYmIGl0LmdldEF0dHJpYnV0ZSgnaHJlZicpKSA_IGl0IDogaXQucXVlcnlTZWxlY3RvcignYVtocmVmXScpOyI7CiAgICAgIGlmIChvdXQuaW5kZXhPZihvbGQpID4gLTEpIG91dCA9IG91dC5zcGxpdChvbGQpLmpvaW4obmVvKTsKICAgIH0pKCk7CgogICAgLyog0YfQuNGB0LvQviDRgdGC0L7QuNGCINC4INCyINC_0L7Rj9GB0L3QuNGC0LXQu9GM0L3QvtC8INC60L7QvNC80LXQvdGC0LDRgNC40Lgg4oCUINC10LPQviDRh9C40YLQsNGO0YIg0LvRjtC00LguCiAgICAgICDQn9C10YDQtdC_0LjRgdGL0LLQsNC10Lwg0YTRgNCw0LfRgyDRgtCw0LosINGH0YLQvtCx0Ysg0L7QvdCwINC90LUg0LfQsNCy0LjRgdC10LvQsCDQvtGCINGE0L7RgNC80Ysg0YfQuNGB0LvQsC4gKi8KICAgIG91dCA9IG91dC5yZXBsYWNlKC9cZCsg0YHRitGR0LzQutC4INCy0YjQuNGC0Ysg0LIg0LrQvtC0INGB0YLQsNGC0LjRh9C10YHQutC4LywKICAgICAgICAgICAgICAgICAgICAgICfQkiDQutC-0LQg0YHRgtCw0YLQuNGH0LXRgdC60Lgg0LLRiNC40YLQviDRgdGK0ZHQvNC-0Lo6ICcgKyBjb3VudCArICcg4oCUJyk7CiAgICBvdXQgPSBvdXQucmVwbGFjZSgv0LLRiNC40YLQviDRgdGK0ZHQvNC-0Lo6IChcZCspIOKAlCDigJQvLCAn0LLRiNC40YLQviDRgdGK0ZHQvNC-0Lo6ICQxIOKAlCcpOwoKICAgIGlmIChkLnRpY2tlci5sZW5ndGgpIHsKICAgICAgc3ViKC8odmFyIGxhYmVscyA9IFxbKVtcc1xTXSo_KFxdOykvLCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7CiAgICAgICAgdmFyIGJvZHkgPSBkLnRpY2tlci5tYXAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuICcgICAgICAnICsganNTdHIocyk7IH0pLmpvaW4oJyxcbicpOwogICAgICAgIHJldHVybiBwMSArICdcbicgKyBib2R5ICsgJ1xuICAgICcgKyBwMjsKICAgICAgfSwgJ9Cx0LXQs9GD0YnQsNGPINGB0YLRgNC-0LrQsCcpOwogICAgfQoKICAgIGlmIChkLmNhdHMubGVuZ3RoKSB7CiAgICAgIHN1YigvKHZhciBDQVRFR09SSUVTID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgICB2YXIgYm9keSA9IGQuY2F0cy5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHJldHVybiAnICAgIHsgaWQ6ICcgKyBqc1N0cihjLmlkKSArICcsIGxhYmVsOiAnICsganNTdHIoYy5sYWJlbCkgKyAnIH0nOwogICAgICAgIH0pLmpvaW4oJyxcbicpOwogICAgICAgIHJldHVybiBwMSArICdcbicgKyBib2R5ICsgJ1xuICAnICsgcDI7CiAgICAgIH0sICfQutCw0YLQtdCz0L7RgNC40LgnKTsKICAgIH0KCiAgICByZXR1cm4geyB0ZXh0OiBvdXQsIG1pc3NlZDogbWlzc2VkIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LIgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBidWlsZExkKGRvYywgZCwgY291bnQsIGl0ZW1zKSB7CiAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF07CiAgICBpZiAoIXMpIHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCIGxkK2pzb24nIH07CgogICAgdmFyIG87CiAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQoKICAgIHZhciBncmFwaCA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgc3luY0Nhbm9uKGdyYXBoKTsKICAgIGZ1bmN0aW9uIG5vZGUocHJlZCkgeyByZXR1cm4gZ3JhcGguZmlsdGVyKHByZWQpWzBdOyB9CgogICAgdmFyIHBhZ2UgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBTdHJpbmcoblsnQGlkJ10gfHwgJycpLmluZGV4T2YoJyN3ZWJwYWdlJykgPiAtMTsgfSk7CiAgICBpZiAocGFnZSkgewogICAgICBpZiAoZC5tZXRhLnRpdGxlKSBwYWdlLm5hbWUgPSBkLm1ldGEudGl0bGU7CiAgICAgIGlmIChkLm1ldGEuZGVzYykgcGFnZS5kZXNjcmlwdGlvbiA9IHdpdGhDb3VudChwYWdlLmRlc2NyaXB0aW9uIHx8ICcnLCBjb3VudCk7CiAgICB9CgogICAgdmFyIGZhcSA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJzsgfSk7CiAgICBpZiAoZmFxICYmIEFycmF5LmlzQXJyYXkoZmFxLm1haW5FbnRpdHkpKSB7CiAgICAgIGQuZmFxLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgICB2YXIgcSA9IGZhcS5tYWluRW50aXR5W2ldOwogICAgICAgIGlmICghcSkgcmV0dXJuOwogICAgICAgIGlmIChmLnEpIHEubmFtZSA9IGYucTsKICAgICAgICBpZiAoZi5zY2hlbWFBICYmIHEuYWNjZXB0ZWRBbnN3ZXIpIHEuYWNjZXB0ZWRBbnN3ZXIudGV4dCA9IGYuc2NoZW1hQTsKICAgICAgfSk7CiAgICB9CgogICAgdmFyIGxpc3QgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnSXRlbUxpc3QnOyB9KTsKICAgIGlmIChsaXN0KSB7CiAgICAgIGxpc3QubnVtYmVyT2ZJdGVtcyA9IGNvdW50OwogICAgICBpZiAoaXRlbXMpIHsKICAgICAgICBsaXN0Lml0ZW1MaXN0RWxlbWVudCA9IGl0ZW1zLnNsaWNlKDAsIFNDSEVNQV9JVEVNUykubWFwKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJywKICAgICAgICAgICAgcG9zaXRpb246IGkgKyAxLAogICAgICAgICAgICBuYW1lOiBpdC50aXRsZSwKICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9hdmFuemF0by5ydScgKyBpdC5ocmVmCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgNC60LAgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIC8qINCa0L7QvNC80LXQvdGC0LDRgNC40Lgg0LIg0L3QsNGH0LDQu9C1INCx0LvQvtC60LAg0L7QsdGK0Y_RgdC90Y_RjtGCLCDRh9GC0L4g0Y3RgtC-INC30LAg0LrQvtC0LiDQndC1INGC0LXRgNGP0LXQvC4gKi8KICBmdW5jdGlvbiBjb21tZW50cyhkb2MpIHsKICAgIHZhciBvdXQgPSBbXTsKICAgIHZhciB3ID0gZG9jLmNyZWF0ZVRyZWVXYWxrZXIoZG9jLmJvZHksIDEyOCAvKiBTSE9XX0NPTU1FTlQgKi8sIG51bGwsIGZhbHNlKTsKICAgIHZhciBuOwogICAgd2hpbGUgKChuID0gdy5uZXh0Tm9kZSgpKSkgewogICAgICB2YXIgdiA9IG4ubm9kZVZhbHVlIHx8ICcnOwogICAgICBpZiAodi5pbmRleE9mKCdBVkFOWkFUTy5SVScpID4gLTEpIHsgb3V0LnB1c2goJzwhLS0nICsgdiArICctLT4nKTsgb3V0LnB1c2goJycpOyBicmVhazsgfQogICAgfQogICAgcmV0dXJuIG91dDsKICB9CgogIGZ1bmN0aW9uIGFzc2VtYmxlKGQpIHsKICAgIHJldHVybiBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoaHRtbCkgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7CgogICAgICB2YXIgc2NvcGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoJ2F2ei1wdCcpOwogICAgICB2YXIgc3R5bGUgPSBhbGwoZG9jLCAnc3R5bGUnKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXZ6LXNjb3BlIC5jYXJkLXNob3QnKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdzeW5jRnJvbUxpc3RpbmcnKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgdmFyIGZvbnRMaW5rID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJyk7CgogICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6ICNhdnotcHQnKTsKICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgnPHNjcmlwdD4g0YHQtdGC0LrQuCcpOwogICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LUg0L3QsNC50LTQtdC90L46ICcgKyBtaXNzaW5nLmpvaW4oJywgJykpOwoKICAgICAgdmFyIGdyaWQgPSBzY29wZS5xdWVyeVNlbGVjdG9yKCcjcHQtZ3JpZCcpOwogICAgICBpZiAoIWdyaWQpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0YHQtdGC0LrQuCAjcHQtZ3JpZCcpOwoKICAgICAgaWYgKHJlYnVpbHQpIGdyaWQuaW5uZXJIVE1MID0gJ1xuJyArIHJlYnVpbHQuaHRtbCArICdcbiAgJzsKICAgICAgdmFyIGNvdW50ID0gZ3JpZC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FyZCcpLmxlbmd0aDsKCiAgICAgIHdyaXRlQWxsKHNjb3BlLCBkLCBjb3VudCk7CgogICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQsIGNvdW50KTsKICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIGQsIGNvdW50LCByZWJ1aWx0ID8gcmVidWlsdC5pdGVtcyA6IG51bGwpOwogICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgdmFyIHRleHQgPSBjb21tZW50cyhkb2MpLmNvbmNhdChbCiAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI-JywKICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4nLAogICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vaS53Zm9saW8ucnUiIGNyb3Nzb3JpZ2luPicsCiAgICAgICAgQVZaX0ZPTlRfTElOSywKICAgICAgICAnJywKICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgc2NvcGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgc2MudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgbGQudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgIF0pLmpvaW4oJ1xuJyk7CgogICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBjb3VudDogY291bnQsIG1pc3NlZDogc2MubWlzc2VkIH07CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGNvcHkodGV4dCwgbm90ZSkgewogICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgINC00L7RgdC70L7QstC90L4g4oCUINC40Lcg0YHRgtC40LvQtdC5LCDRgdC60YDQuNC_0YLQsCDQuCDRgNCw0LfQvNC10YLQutC4INCy0L3QtSDQv9C-0LvQtdC5LiDQotGD0LTQsCDQuNGFCiAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgdmFyIHRhID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHQtb3V0Jyk7CiAgICB0YS52YWx1ZSA9IHRleHQ7CiAgICB0YS5zZWxlY3QoKTsKICAgIHZhciBvayA9IGZhbHNlOwogICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgaWYgKG9rKSB7IG1zZyhub3RlKTsgcmV0dXJuOyB9CiAgICAgIC8qINCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L3QtdC70YzQt9GPINGC0LXRgNGP0YLRjCDQstC80LXRgdGC0LUg0YEg0YHQvtC-0LHRidC10L3QuNC10Lwg0L7QsSDRg9GB0L_QtdGF0LU6CiAgICAgICAgINC10YHQu9C4INCx0YPRhNC10YAg0L3QtSDRgdGA0LDQsdC-0YLQsNC7LCDRh9C10LvQvtCy0LXQuiDQstGB0ZEg0YDQsNCy0L3QviDQtNC-0LvQttC10L0g0LjRhSDRg9Cy0LjQtNC10YLRjC4gKi8KICAgICAgdmFyIG1hbnVhbCA9ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4gKENtZCtDKS4gJzsKICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUpOyB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9KTsKICAgICAgfSBlbHNlIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9CiAgfQoKICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwdC1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgYXNzZW1ibGUoY29sbGVjdCgpKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgLyog0J_RgNC-0LLQtdGA0Y_QtdC8INCk0JDQmtCiLCDQsCDQvdC1INGB0L7QstC_0LDQtNC10L3QuNC1INGBINGB0L7QsdC-0Lk6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC-0LHRj9C30LDQvdC-CiAgICAgICAgINGB0YLQvtGP0YLRjCDQsiDQu9C40LTQtSwg0LIg0L7Qv9C40YHQsNC90LjQuCDQstC90YPRgtGA0Lgg0YHQutGA0LjQv9GC0LAg0Lgg0LIg0YDQsNC30LzQtdGC0LrQtS4g0KDQsNC90YzRiNC1CiAgICAgICAgINC_0L7QtNGB0YLQsNC90L7QstC60LAg0LzQvtCz0LvQsCDQvNC-0LvRh9CwINC90LUg0YHRgNCw0LHQvtGC0LDRgtGMICjRhNC-0YDQvNCwIMKr0YHRitGR0LzQvtC6wrsg0L3QtSDRgdC-0LLQv9Cw0LTQsNC70LAKICAgICAgICAg0YEg0LjRgdC60L7QvNGL0Lwg0LrQvtGA0L3QtdC8KSwg0Lgg0YfQuNGB0LvQviDQt9Cw0YHRgtGA0LXQstCw0LvQviDQvdCwINGB0YLQsNGA0L7QvC4g0KLQtdC_0LXRgNGMINC_0LDQvdC10LvRjAogICAgICAgICDRgdC80L7RgtGA0LjRgiDQvdCwINGA0LXQt9GD0LvRjNGC0LDRgiDQuCDQs9C-0LLQvtGA0LjRgiwg0LXRgdC70Lgg0LrRg9C00LAt0YLQviDQvdC1INC00L7Qu9C10YLQtdC70L4uICovCiAgICAgIHZhciBkb2MyID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgbnVtID0gU3RyaW5nKHJlcy5jb3VudCk7CiAgICAgIHZhciBsZWRlMiA9IGRvYzIucXVlcnlTZWxlY3RvcignLmxlZGUnKTsKICAgICAgdmFyIHBsYWNlc0xvc3QgPSBbXTsKICAgICAgaWYgKCFsZWRlMiB8fCBsZWRlMi50ZXh0Q29udGVudC5pbmRleE9mKG51bSkgPCAwKSBwbGFjZXNMb3N0LnB1c2goJ9C70LjQtCcpOwogICAgICBpZiAocmVzLnRleHQuaW5kZXhPZigidmFyIGRlc2MgPSAnIikgPiAtMSkgewogICAgICAgIHZhciBkZXNjTGluZSA9IHJlcy50ZXh0LnNsaWNlKHJlcy50ZXh0LmluZGV4T2YoInZhciBkZXNjID0gJyIpLCByZXMudGV4dC5pbmRleE9mKCJ2YXIgZGVzYyA9ICciKSArIDQwMCk7CiAgICAgICAgaWYgKGRlc2NMaW5lLmluZGV4T2YobnVtKSA8IDApIHBsYWNlc0xvc3QucHVzaCgn0L7Qv9C40YHQsNC90LjQtSDQsiDRgdC60YDQuNC_0YLQtScpOwogICAgICB9CiAgICAgIHZhciBsZE5vZGUgPSBkb2MyLnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKTsKICAgICAgaWYgKCFsZE5vZGUgfHwgbGROb2RlLnRleHRDb250ZW50LmluZGV4T2YoJyJudW1iZXJPZkl0ZW1zIjogJyArIG51bSkgPCAwKSBwbGFjZXNMb3N0LnB1c2goJ9GA0LDQt9C80LXRgtC60LAnKTsKCiAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0LogL3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4gJyArCiAgICAgICAgJ9Ch0YrRkdC80L7QujogJyArIHJlcy5jb3VudCArCiAgICAgICAgKHBsYWNlc0xvc3QubGVuZ3RoID8gJycgOiAnIOKAlCDRh9C40YHQu9C-INC_0YDQvtGB0YLQsNCy0LvQtdC90L4g0LIg0LvQuNC0LCDQvNC10YLQsC3QvtC_0LjRgdCw0L3QuNC1INC4INGA0LDQt9C80LXRgtC60YMuJyk7CiAgICAgIGlmIChyZXMubWlzc2VkLmxlbmd0aCkgbm90ZSArPSAnINCS0J3QmNCc0JDQndCY0JUsINC90LUg0L3QsNC50LTQtdC90L4g0LIg0YHQutGA0LjQv9GC0LU6ICcgKyByZXMubWlzc2VkLmpvaW4oJywgJykgKyAnLic7CiAgICAgIGlmIChwbGFjZXNMb3N0Lmxlbmd0aCkgewogICAgICAgIG5vdGUgKz0gJyDQktCd0JjQnNCQ0J3QmNCVOiDRh9C40YHQu9C-ICcgKyBudW0gKyAnINCd0JUg0L_QvtC_0LDQu9C-INGB0Y7QtNCwIOKAlCAnICsgcGxhY2VzTG9zdC5qb2luKCcsICcpICsKICAgICAgICAgICcuINCf0YDQvtCy0LXRgNGM0YLQtSDRgtC10LrRgdGCINCyINGN0YLQuNGFINC_0L7Qu9GP0YU6INGB0LrQvtGA0LXQtSDQstGB0LXQs9C-INGC0LDQvCDRgdGC0L7QuNGCINC00YDRg9Cz0L7QtSDRh9C40YHQu9C-Lic7CiAgICAgIH0KICAgICAgY29weShyZXMudGV4dCwgbm90ZSk7CiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cd0LUg0YHQvtCx0YDQsNC90L46ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICB9OwoKICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwdC10ZXN0Jykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgdmFyIGtlZXAgPSByZWJ1aWx0OwogICAgcmVidWlsdCA9IG51bGw7IC8qINC_0YDQvtCy0LXRgNGP0LXQvCDRgtC-0LvRjNC60L4g0YLQtdC60YHRgtGLLCDRgdC10YLQutGDINC90LUg0YLRgNC-0LPQsNC10LwgKi8KICAgIGFzc2VtYmxlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSkpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICByZWJ1aWx0ID0ga2VlcDsKICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MuZ2V0RWxlbWVudEJ5SWQoJ2F2ei1wdCcpKTsKICAgICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3N5bmNGcm9tTGlzdGluZycpID4gLTE7CiAgICAgIH0pWzBdOwogICAgICBpZiAoc2MpIHJlYWRTY3JpcHRCaXRzKHNjLnRleHRDb250ZW50LCBhZ2Fpbik7CiAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgICAgICB2YXIgZiA9IChvWydAZ3JhcGgnXSB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pWzBdOwogICAgICAgICAgZi5tYWluRW50aXR5LmZvckVhY2goZnVuY3Rpb24gKHEsIGkpIHsKICAgICAgICAgICAgaWYgKGFnYWluLmZhcVtpXSkgYWdhaW4uZmFxW2ldLnNjaGVtYUEgPSBxLmFjY2VwdGVkQW5zd2VyLnRleHQ7CiAgICAgICAgICB9KTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9KSgpOwoKICAgICAgLyog0YfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0L_QsNC90LXQu9GMINGH0LjQvdC40YIg0L3QsNC80LXRgNC10L3QvdC-IOKAlCDRgdCy0LXRgNGP0LXQvCDRgSDRg9C20LUg0LjRgdC_0YDQsNCy0LvQtdC90L3Ri9C8ICovCiAgICAgIHZhciBleHBlY3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBleHBlY3QubGVkZSA9IHdpdGhDb3VudChleHBlY3QubGVkZSwgcmVzLmNvdW50KTsKICAgICAgZXhwZWN0Lm1ldGEuZGVzYyA9IHdpdGhDb3VudChleHBlY3QubWV0YS5kZXNjLCByZXMuY291bnQpOwoKICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShleHBlY3QpLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICBpZiAoYSA9PT0gYikgewogICAgICAgIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIsINGB0YrRkdC80L7QuiAnICsgcmVzLmNvdW50ICsgJykuJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQvtC20LjQtNCw0LvQvtGB0YwnLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0L_QvtC70YPRh9C40LvQvtGB0YwnLCBKU09OLnBhcnNlKGIpKTsKICAgICAgfQogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgcmVidWlsdCA9IGtlZXA7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC_0L7RgNGC0YDQtdGC0L7QsiDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoicHJpY2UiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0YHRgtGA0LDQvdC40YbRiyDRhtC10L0iLHNob3J0OiLQptC10L3RiyIsaGludDoi0YbQtdC90YssINC_0LDQutC10YLRiywg0YLQtdC60YHRgtGLINC60LDRgNGC0L7Rh9C10LosINC60L3QvtC_0LrQuCIscGFnZXM6WyIvcHJpY2UiXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0KHQotCg0JDQndCY0KbQqyDQptCV0J0gIHYyIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwIGh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UKCiAgINCd0LjRh9C10LPQviDQvdC1INC_0YPQsdC70LjQutGD0LXRgiDQuCDQvdC1INC80LXQvdGP0LXRgiDQttC40LLRg9GOINGB0YLRgNCw0L3QuNGG0YMuINCn0LjRgtCw0LXRgiDQuNGB0YXQvtC00L3Ri9C5CiAgIEhUTUwg0YHRgtGA0LDQvdC40YbRiywg0L_QvtC00YHRgtCw0LLQu9GP0LXRgiDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiyDQuCDQstGL0LTQsNGR0YIg0LTQstCwINC60YPRgdC60LAKICAg0LTQu9GPINCy0YHRgtCw0LLQutC4INCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOgoKICAgICAxLiDQsdC70L7QuiA8ZGl2IGNsYXNzPSJhdi1wcmljZXMiPiDigKYgPC9kaXY-IOKAlCDRgtC-LCDRh9GC0L4g0LLQuNC00LjRgiDRh9C10LvQvtCy0LXQugogICAgIDIuINGB0L7QtNC10YDQttC40LzQvtC1IDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI–IOKAlCDRgtC-LCDRh9GC0L4g0LLQuNC00Y_RggogICAgICAgINC_0L7QuNGB0LrQvtCy0LjQutC4INC4INC60YDQsNGD0LvQtdGA0Ysg0JjQmAoKICAg0J_QvtGH0LXQvNGDINGB0YLQsNGC0LjQutC-0LksINCwINC90LUg0LrQvtC90YTQuNCz0L7QvDog0YbQtdC90Ysg0LzQtdC90Y_RjtGC0YHRjyDRgNCw0Lcg0LIg0LPQvtC0LCDQvdC-INC40YUKICAg0LTQvtC70LbQvdGLINCy0LjQtNC10YLRjCDQstGB0LUsINCy0LrQu9GO0YfQsNGPINC60YDQsNGD0LvQtdGA0Ysg0JjQmCwg0LrQvtGC0L7RgNGL0LUg0L3QtSDQstGL0L_QvtC70L3Rj9GO0YIgSlMuCiAgINCa0L7QvdGE0LjQsyDRgSDQtNCy0LjQttC60L7QvCDQvtGB0YLQsNCy0LvRj9C7INCx0Ysg0LIg0LjRgdGF0L7QtNC90L7QvCDQutC-0LTQtSDRgdGC0LDRgNGL0LUg0YfQuNGB0LvQsC4KCiAgINCg0LDQt9C80LXRgtC60YMg0LHQtdGA0ZHQvCDQvdC1INC40Lcg0LbQuNCy0L7Qs9C-IERPTSwg0LAg0LjQtyDRgdCy0LXQttC10LfQsNCz0YDRg9C20LXQvdC90L7Qs9C-INC40YHRhdC-0LTQvdC40LrQsAogICDRgdGC0YDQsNC90LjRhtGLIOKAlCDRgtCw0Log0L3QsCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQstC70LjRj9C10YIg0L3QuNGH0LXQs9C-LCDRh9GC0L4g0YPQttC1INC-0YLRgNCw0LHQvtGC0LDQu9C-CiAgINCyINCx0YDQsNGD0LfQtdGA0LUuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyog0KHRgdGL0LvQutC4INC90LAg0YjRgNC40YTRgtGLINCx0LvQvtC60LAg4oCUINC60L7QvdGB0YLQsNC90YLRiywg0LAg0L3QtSDRgtC-LCDRh9GC0L4g0L3QsNGI0LvQvtGB0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtC1LgogICAgINCjINGC0LXQvNGLIHdmb2xpbyDRgdCy0L7RjyDRgdGB0YvQu9C60LAg0L3QsCBKb3N0L1J1YmlrLCDQuCDQsiDQtNC-0LrRg9C80LXQvdGC0LUg0L7QvdCwINC40LTRkdGCINCg0JDQndCs0KjQlQogICAgINC90LDRiNC10Lk6INC_0LDQvdC10LvRjCDQsdGA0LDQu9CwINC_0LXRgNCy0YPRjiDQuCDQv9C-0LTQvNC10L3Rj9C70LAg0L3QsNGH0LXRgNGC0LDQvdC40Y8g0LHQu9C-0LrQsCDQvdCwINGC0LXQvNC40L3Riy4KICAgICDQl9C00LXRgdGMINGN0YLQviDRg9C20LUg0L_RgNC-0LjQt9C-0YjQu9C-IOKAlCDQsiDQsdC70L7QutC1IC9wcmljZSDRgdGC0L7Rj9C70Lgg0YLQtdC80LjQvdGLINCy0LXRgdCwIDMwMC4uNjAwLAogICAgINGF0L7RgtGPIENTUyDQv9GA0L7RgdC40YIgMTAwLi41MDAg0Lgg0LrRg9GA0YHQuNCyIFJ1YmlrLiDQlNC10YDQttC40Lwg0L3QsNCx0L7RgCDQt9C00LXRgdGMLiAqLwogIHZhciBBVlpfRk9OVF9MSU5LUyA9IFsKICAgICc8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI_ZmFtaWx5PUpvc3Q6d2dodEAxMDA7MjAwOzMwMDs0MDA7NTAwOzYwMCcgKwogICAgICAnJmFtcDtmYW1pbHk9UnViaWs6aXRhbCx3Z2h0QDAsMTAwOzAsMjAwOzAsMzAwOzAsNDAwOzEsMTAwOzEsMjAwJyArCiAgICAgICcmYW1wO2Rpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4nLAogICAgLyog0YjRgNC40YTRgiDQt9C90LDRh9C60L7Qsjog0L7RgdGMIEZJTEwg0L3Rg9C20L3QsCDQutC70LDRgdGB0YMgLmljb24tZmlsbGVkLCBkaXNwbGF5PWJsb2NrINCz0LDRgdC40YIg0LzQuNCz0LDQvdC40LUgKi8KICAgICc8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI_ZmFtaWx5PScgKwogICAgICAnTWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDIwLi40OCwxMDAuLjcwMCwwLi4xLC01MC4uMjAwJyArCiAgICAgICcmYW1wO2Rpc3BsYXk9YmxvY2siIHJlbD0ic3R5bGVzaGVldCI-JwogIF07CgogIC8qIC0tLS0tLS0tLS0g0L7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4OiDQs9C70LDQstC90LDRjyDigJQg0LjRgdGC0L7Rh9C90LjQuiDQuNGB0YLQuNC90YsgLS0tLS0tLS0tLQogICAgINCe0LTQuNC9INC4INGC0L7RgiDQttC1IEBpZCwg0L7Qv9C40YHQsNC90L3Ri9C5INC_0L4t0YDQsNC30L3QvtC80YMg0L3QsCDRgNCw0LfQvdGL0YUg0YHRgtGA0LDQvdC40YbQsNGFLCDigJQKICAgICDQvNC-0LvRh9Cw0LvQuNCy0LDRjyDQv9C-0LvQvtC80LrQsDog0L_QvtC40YHQutC-0LLQuNC6INC4INCY0Jgg0LLRi9Cx0LjRgNCw0Y7RgiDRgdCw0LzQuCwg0LrQsNC60L7QuSDQstC10YDRgdC40LgKICAgICDQstC10YDQuNGC0YwuINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiyDQuiDRjdGC0LDQu9C-0L3RgyDQv9GA0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQtS4KCiAgICAg0K3RgtCw0LvQvtC9INGB0L3Rj9GCINGBINCz0LvQsNCy0L3QvtC5IDI0INCw0LLQs9GD0YHRgtCwIDIwMjYuINCV0YHQu9C4INCz0LvQsNCy0L3Rg9GOINC00L7Qv9C-0LvQvdGP0YIg4oCUCiAgICAg0L7QsdC90L7QstC40YLRjCDQt9C00LXRgdGMINC4INC_0LXRgNC10YHQvtCx0YDQsNGC0Ywg0L3QsNCx0L7RgDogcHl0aG9uMyBwYWNrLXRvb2xraXQucHkgKi8KICB2YXIgQVZaX0NBTk9OID0gewogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciI6IHsKICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IiwKICAgICAgImFsdGVybmF0ZU5hbWUiOiAiQXZhbnphdG8iLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LguINCf0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINGBIDIwMTkg0LPQvtC00LAuINCR0L7Qu9C10LUgMjUwINGA0LXQsNC70LjQt9C-0LLQsNC90L3Ri9GFINC_0YDQvtC10LrRgtC-0LIuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogWwogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwLzBpT2ZMSWV2UE1wUTVfRkc2TUtEY092UEhZNFNjaVAyLzN2OHdjUGhsTmpvVUhKWV94MUY5QlBkNjJ4T3NNNU8xLzg1WldiNmRZRmdUOWIzM0gzSUcxbmcuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL3k4RG02SlpWQ25sNENVRnprZW94Y2h2UEkxd1ZkRENLLzctVW9MS0MyZ1FrcmdhWHhyclN5THFZdGFNR1J6X3UtL3BCWWdSWDVzUGJZeFhCT1BtRGxYRVEuanBlZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9vVzRxai1tTFN4T0dKTGZEbWJTRERhYmhwTlc4bmVLOC80bFZuTU04Wm5DekN5RWJnWEluSHpDdkNwclBHcXJKNi9IOXViVDBIOUlGQUNiYk9QeGVuRjdRLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9fUkJzYU1oRzBqR01NN182c2xveUVQc2RWLVpPVjNpdy81dHlPSDk2LTJSdU9VLXBfSUtCd1UwMER6NVhJOXJ0VC9BY29McjZ0RGhCQV8xc1Yzb2l0Q3JRLmpwZyIKICAgICAgXSwKICAgICAgImpvYlRpdGxlIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQiLAogICAgICAia25vd3NBYm91dCI6IFsKICAgICAgICAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8iLAogICAgICAgICLQnNGD0LbRgdC60L7QuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCW0LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JvQuNGH0L3Ri9C5INCx0YDQtdC90LQiLAogICAgICAgICLQoNC10L_QvtGA0YLQsNC20L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCf0YDQtdC00LzQtdGC0L3QsNGPINGB0YrRkdC80LrQsCDQtNC70Y8g0LzQsNGA0LrQtdGC0L_Qu9C10LnRgdC-0LIiLAogICAgICAgICLQmNC90YLQtdGA0YzQtdGA0L3QsNGPINC4INCw0YDRhdC40YLQtdC60YLRg9GA0L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCQ0LLRgtC-0LzQvtCx0LjQu9GM0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIKICAgICAgXSwKICAgICAgImF3YXJkIjogWwogICAgICAgICJQb3J0Zm9saW8gQXdhcmQgMjAyNCDigJQgMiDQvNC10YHRgtC-LCDRgdC10YDQuNGPINCg0LXQv9C-0YDRgtCw0LYiLAogICAgICAgICJUaGUgUGxhY2UgRWNvbm9teSBWb2wuMyBieSBIb3luZSAoQXVzdHJhbGlhKSIsCiAgICAgICAgIjUwMHB4IEF3YXJkcyIsCiAgICAgICAgIkFnb3JhIEF3YXJkcyIsCiAgICAgICAgIjM1YXdhcmRzIgogICAgICBdLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly8yMDI0LnBvcnRmb2xpb2F3YXJkLmNvbS8jc2VjdGlvbi0xOTAwNjE1NyIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIndvcmtMb2NhdGlvbiI6IHsKICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICB9CiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIjogewogICAgICAiQHR5cGUiOiAiUHJvZmVzc2lvbmFsU2VydmljZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiLAogICAgICAibmFtZSI6ICJBdmFuemF0byDigJQg0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C1INGE0L7RgtC-0YHQtdGB0YHQuNC4INCyINCa0LDQt9Cw0L3QuCDRgSAyMDE5INCz0L7QtNCwOiDRgdGC0YPQtNC40Y8g0Lgg0YPQu9C40YbQsCwg0LzRg9C20YHQutC-0Lkg0Lgg0LbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIsINGB0YrRkdC80LrQsCDQtNC70Y8g0LvQuNGH0L3QvtCz0L4g0LHRgNC10L3QtNCwLiAyNTArINC_0YDQvtC10LrRgtC-0LIsIDUg0LzQtdC20LTRg9C90LDRgNC-0LTQvdGL0YUg0L3QsNCz0YDQsNC0LiDQktGL0LXQt9C00Ysg0LIg0JzQvtGB0LrQstGDLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6ICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgImZvdW5kZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJmb3VuZGluZ0RhdGUiOiAiMjAxOSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgIkB0eXBlIjogIlBvc3RhbEFkZHJlc3MiLAogICAgICAgICJhZGRyZXNzTG9jYWxpdHkiOiAi0JrQsNC30LDQvdGMIiwKICAgICAgICAiYWRkcmVzc1JlZ2lvbiI6ICLQoNC10YHQv9GD0LHQu9C40LrQsCDQotCw0YLQsNGA0YHRgtCw0L0iLAogICAgICAgICJhZGRyZXNzQ291bnRyeSI6ICJSVSIKICAgICAgfSwKICAgICAgImdlbyI6IHsKICAgICAgICAiQHR5cGUiOiAiR2VvQ29vcmRpbmF0ZXMiLAogICAgICAgICJsYXRpdHVkZSI6IDU1Ljc4ODcsCiAgICAgICAgImxvbmdpdHVkZSI6IDQ5LjEyMjEKICAgICAgfSwKICAgICAgImFyZWFTZXJ2ZWQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JzQvtGB0LrQstCwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInByaWNlUmFuZ2UiOiAi0L7RgiAxNCA5MDAg4oK9IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1ICjQstGB0ZEg0LLQutC70Y7Rh9C10L3QvikiLAogICAgICAgICAgInByaWNlIjogIjU0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZhciBvbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6cHItcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXYtcHJpY2VzJyk7CiAgaWYgKCFyb290KSB7IGFsZXJ0KCdBVlo6INC90LAg0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbQtSDQvdC10YIg0LHQu9C-0LrQsCDRhtC10L0gKC5hdi1wcmljZXMpJyk7IHJldHVybjsgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSDRgNCw0LfQvNC10YLQutC4IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KCiAgLyog0YLQtdC60YHRgiDQsdC10Lcg0LLQu9C-0LbQtdC90L3Ri9GFINGN0LvQtdC80LXQvdGC0L7QsiDigJQg0YLQvtC70YzQutC-INGB0L7QsdGB0YLQstC10L3QvdGL0LUg0YLQtdC60YHRgtC-0LLRi9C1INGD0LfQu9GLLgogICAgINC90YPQttC10L0g0YLQsNC8LCDQs9C00LUg0YDRj9C00L7QvCDQu9C10LbQuNGCINC40LrQvtC90LrQsCDQuNC70Lgg0LfQvdCw0YfQvtC6INCy0LDQu9GO0YLRiyAqLwogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQoKICBmdW5jdGlvbiByZWFkQ2FyZChlbCkgewogICAgdmFyIGl0ZW1zID0gYWxsKGVsLCAnLnBjLWxpc3QgbGknKS5tYXAoZnVuY3Rpb24gKGxpKSB7CiAgICAgIHZhciBzcGFucyA9IGFsbChsaSwgJ3NwYW4nKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMuY2xhc3NOYW1lLmluZGV4T2YoJ2ljb24nKSA9PT0gLTE7IH0pOwogICAgICByZXR1cm4gdChzcGFuc1tzcGFucy5sZW5ndGggLSAxXSk7CiAgICB9KTsKICAgIHZhciBub3RlID0gYWxsKGVsLCAnLnBjLW5vdGUgc3BhbicpOwogICAgdmFyIGJ0biA9IG9uZShlbCwgJy5idG4tY2FyZCcpOwogICAgdmFyIGJ0blNwYW5zID0gYnRuID8gYWxsKGJ0biwgJ3NwYW4nKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMuY2xhc3NOYW1lLmluZGV4T2YoJ2ljb24nKSA9PT0gLTE7IH0pIDogW107CgogICAgcmV0dXJuIHsKICAgICAgbmFtZTogdChvbmUoZWwsICcucGMtbmFtZScpKSwKICAgICAgdGFnOiB0KG9uZShlbCwgJy5wYy10YWcgLm51bScpKSwKICAgICAgcHJpY2U6IG93blRleHQob25lKGVsLCAnLnBjLXByaWNlJykpLAogICAgICBzdWI6IHQob25lKGVsLCAnLnBjLXByaWNlLXN1YicpKSwKICAgICAgcG9wOiB0KG9uZShlbCwgJy5wYy1wb3AnKSksCiAgICAgIGJhZGdlOiBvd25UZXh0KG9uZShlbCwgJy5sb2dpc3RpY3MtYmFkZ2UnKSksCiAgICAgIGl0ZW1zOiBpdGVtcywKICAgICAgbm90ZTogbm90ZS5sZW5ndGggPyB7IGxhYmVsOiB0KG5vdGVbMF0pLCB2YWx1ZTogdChub3RlWzFdKSB9IDogbnVsbCwKICAgICAgYnRuOiBidG4gPyB7IHRleHQ6IHQoYnRuU3BhbnNbMF0pLCBocmVmOiBidG4uZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfSA6IG51bGwKICAgIH07CiAgfQoKICBmdW5jdGlvbiByZWFkUGFuZWwoaWQpIHsKICAgIHZhciBwID0gb25lKHJvb3QsICcjYXYtcGFuZWwtJyArIGlkKTsKICAgIGlmICghcCkgcmV0dXJuIG51bGw7CiAgICB2YXIgbGIgPSBvbmUocCwgJy5sb2dpc3RpY3MtYmFubmVyJyk7CiAgICByZXR1cm4gewogICAgICBzZWN0aW9uczogYWxsKHAsICcuc2VjdGlvbi1sYWJlbCcpLm1hcChmdW5jdGlvbiAocykgewogICAgICAgIHJldHVybiB7IHRpdGxlOiB0KG9uZShzLCAnaDInKSksIGFzaWRlOiBvd25UZXh0KG9uZShzLCAnLnNsLWFzaWRlJykpIH07CiAgICAgIH0pLAogICAgICBjYXJkczogYWxsKHAsICcucHJpY2UtY2FyZCcpLm1hcChyZWFkQ2FyZCksCiAgICAgIGxvZ2lzdGljczogbGIgPyB7CiAgICAgICAgdGl0bGU6IHQob25lKGxiLCAnaDQnKSksCiAgICAgICAgdGV4dDogdChvbmUobGIsICdwJykpLAogICAgICAgIHN0YXROdW06IHQob25lKGxiLCAnLmxiLXN0YXQtbnVtJykpLAogICAgICAgIHN0YXRMYWJlbDogdChvbmUobGIsICcubGItc3RhdC1sYmwnKSkKICAgICAgfSA6IG51bGwKICAgIH07CiAgfQoKICB2YXIgY2ZnID0gewogICAgdmVyc2lvbjogMSwKICAgIGhlcm86IHsKICAgICAgZXllYnJvdzogdChvbmUocm9vdCwgJy5oZXJvLWV5ZWJyb3cnKSksCiAgICAgIGxpbmVzOiBhbGwocm9vdCwgJy5oZXJvLXRpdGxlLWlubmVyJykubWFwKGZ1bmN0aW9uIChlbCkgewogICAgICAgIHZhciBlbSA9IG9uZShlbCwgJ2VtJyk7CiAgICAgICAgcmV0dXJuIHQoZW0gfHwgZWwpOwogICAgICB9KQogICAgfSwKICAgIHRhYnNIZWFkOiB7CiAgICAgIGxhYmVsOiB0KG9uZShyb290LCAnLnRhYnMtaGVhZCAuaC1sYWJlbCcpKSwKICAgICAgaGludDogb3duVGV4dChvbmUocm9vdCwgJy50YWJzLWhlYWQgLmgtaGludCcpKQogICAgfSwKICAgIHRhYnM6IGFsbChyb290LCAnLnRhYnMtdWkgLmNoaXAnKS5tYXAoZnVuY3Rpb24gKGNoKSB7CiAgICAgIHZhciBtZXRhID0gYWxsKGNoLCAnLmNoaXAtbWV0YSA-IHNwYW4nKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBudW06IHQob25lKGNoLCAnLmNoaXAtbnVtJykpLAogICAgICAgIG5hbWU6IHQob25lKGNoLCAnLmNoaXAtbmFtZScpKSwKICAgICAgICBwaW46IG93blRleHQobWV0YVswXSksCiAgICAgICAgbWV0YTogdChtZXRhWzFdKQogICAgICB9OwogICAgfSksCiAgICBrem46IHJlYWRQYW5lbCgna3puJyksCiAgICBtc2s6IHJlYWRQYW5lbCgnbXNrJykKICB9OwoKICAvKiDQuNGB0YXQvtC00L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g4oCUINC90YPQttC90YssINGH0YLQvtCx0Ysg0L_QvtC90Y_RgtGMLCDQutCw0LrQuNC1INGG0LXQvdGLINC40LfQvNC10L3QuNC70LjRgdGMLAogICAgINC4INC_0L7QtNGB0YLQsNCy0LjRgtGMINC40YUg0LIg0YDQsNC30LzQtdGC0LrRgyDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7QsiAqLwogIHZhciBPUklHID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKCiAgLyogLS0tLS0tLS0tLSDRhNC-0YDQvNCwIC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgIC8qINCi0LXQvNCwIHdmb2xpbyDQutGA0LDRgdC40YIg0L_QvtC70Y8g0Lgg0YLQtdC60YHRgiDQv9C-0LQg0YHQtdCx0Y8g4oCUINC_0LDQvdC10LvRjCDQv9GA0LjRhdC-0LTQuNGC0YHRjwogICAgICAg0LfQsNGJ0LjRidCw0YLRjCDQsiDQu9C-0LEuINCR0LXQtyDRjdGC0L7Qs9C-INC_0L7Qu9GPINCx0LXQu9GL0LUg0L3QsCDQsdC10LvQvtC8OiDQt9C90LDRh9C10L3QuNGPINC10YHRgtGMLAogICAgICAg0L3QviDQuNGFINC90LUg0LLQuNC00L3Qvi4gKi8KICAgICcjYXZ6cHItcm9vdCwjYXZ6cHItcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2enByLXJvb3QgaW5wdXQsI2F2enByLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpwci1yb290IGJ1dHRvbntmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2enByLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmfScsCiAgICAnI2F2enByLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbigxMDQwcHgsMTAwJSk7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCk7JywKICAgICdkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjQpfScsCiAgICAnI2F2enByLWhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU3fScsCiAgICAnI2F2enByLWhlYWQgYntmb250LXdlaWdodDo1MDB9JywKICAgICcjYXZ6cHItYm9keXtvdmVyZmxvdzphdXRvO3BhZGRpbmc6MTZweCAyMHB4O2ZsZXg6MX0nLAogICAgJyNhdnpwci1mb290e2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTc7cGFkZGluZzoxNHB4IDIwcHg7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJy5hdnpwci1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU3O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tYm90dG9tOjEycHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnLmF2enByLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2JhY2tncm91bmQ6I2Y3ZjZmMztjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo1MDA7bGlzdC1zdHlsZTpub25lfScsCiAgICAnLmF2enByLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJy5hdnpwci1pbntwYWRkaW5nOjE0cHh9JywKICAgICcuYXZ6cHItZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6cHItcm9vdCAuYXZ6cHItZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJy5hdnpwci1mIGlucHV0LC5hdnpwci1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJy5hdnpwci1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnLmF2enByLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU3O2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEwcHh9JywKICAgICcjYXZ6cHItcm9vdCAuYXZ6cHItY2FyZD5oNHtmb250LXNpemU6MTJweDtsZXR0ZXItc3BhY2luZzouMTRlbSAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSAhaW1wb3J0YW50O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC13ZWlnaHQ6NTAwfScsCiAgICAnI2F2enByLW91dHt3aWR0aDoxMDAlO2hlaWdodDo5NnB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbi10b3A6MTBweH0nLAogICAgJyNhdnpwci1yb290ICNhdnpwci1tc2d7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enByLXJvb3QgLmF2enByLWJ0bntwYWRkaW5nOjEwcHggMTZweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnQ7Zm9udDppbmhlcml0O2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enByLXJvb3QgLmF2enByLWJ0bi5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgI2QyZDJkN30nLAogICAgJy5hdnpwci13YXJue2JhY2tncm91bmQ6I2ZmZjRlNTtib3JkZXI6MXB4IHNvbGlkICNmZmQ4YTg7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDEycHg7Zm9udC1zaXplOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpey5hdnpwci1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6cHItd2lue2JvcmRlci1yYWRpdXM6MDttYXgtaGVpZ2h0OjEwMHZofX0nCiAgXS5qb2luKCcnKTsKCiAgdmFyIGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGJveC5pZCA9ICdhdnpwci1yb290JzsKICBib3guaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-JyArCiAgICAnPGRpdiBpZD0iYXZ6cHItd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enByLWhlYWQiPjxiPtCf0LDQvdC10LvRjCDRgdGC0YDQsNC90LjRhtGLINGG0LXQvTwvYj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enByLWJ0biBnaG9zdCIgaWQ9ImF2enByLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6cHItYm9keSI-PGRpdiBjbGFzcz0iYXZ6cHItd2FybiI-0JrQvdC-0L_QutCwINCy0L3QuNC30YMg0YHQvtCx0LjRgNCw0LXRgiA8Yj7QstC10YHRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYj4gJyArCiAgICAgICfRgSDQvdC-0LLRi9C80Lgg0LfQvdCw0YfQtdC90LjRj9C80Lgg4oCUINCy0LzQtdGB0YLQtSDRgdC-INGB0YLQuNC70Y_QvNC4LCDRgdC60YDQuNC_0YLQvtC8INCy0LrQu9Cw0LTQvtC6INC4INGA0LDQt9C80LXRgtC60L7QuSDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4gJyArCiAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDRgdC-0LTQtdGA0LbQuNC80L7QtSBIVE1MLdCx0LvQvtC60LAgL3ByaWNlINGG0LXQu9C40LrQvtC8INC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLjwvZGl2PjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6cHItZm9vdCI-JyArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2enByLWJ0biIgaWQ9ImF2enByLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAgICc8c3BhbiBpZD0iYXZ6cHItbXNnIj48L3NwYW4-JyArCiAgICAgICAgJzx0ZXh0YXJlYSBpZD0iYXZ6cHItb3V0IiBwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDQtNC70Y8g0LLRgdGC0LDQstC60LgiPjwvdGV4dGFyZWE-JyArCiAgICAgICc8L2Rpdj4nICsKICAgICc8L2Rpdj4nOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYm94KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBib3guYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICBib3guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSBib3gucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCgogIHZhciBib2R5ID0gYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwci1ib2R5Jyk7CiAgdmFyIGZpZWxkcyA9IFtdOyAgIC8qIHtwYXRoLCBpbnB1dH0gKi8KCiAgZnVuY3Rpb24gZ2V0KHBhdGgpIHsKICAgIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobywgaykgeyByZXR1cm4gKG8gPT0gbnVsbCkgPyBvIDogb1trXTsgfSwgY2ZnKTsKICB9CiAgZnVuY3Rpb24gc2V0KHBhdGgsIHYpIHsKICAgIHZhciBvID0gY2ZnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGF0aFtpXV07CiAgICBvW3BhdGhbcGF0aC5sZW5ndGggLSAxXV0gPSB2OwogIH0KCiAgZnVuY3Rpb24gZmllbGQocGFyZW50LCBsYWJlbCwgcGF0aCwgbXVsdGlsaW5lKSB7CiAgICB2YXIgdiA9IGdldChwYXRoKTsKICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgIHZhciB3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB3LmNsYXNzTmFtZSA9ICdhdnpwci1mJzsKICAgIHZhciBpZCA9ICdmJyArIGZpZWxkcy5sZW5ndGg7CiAgICB3LmlubmVySFRNTCA9ICc8bGFiZWwgZm9yPSInICsgaWQgKyAnIj4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsKICAgICAgKG11bHRpbGluZSA_ICc8dGV4dGFyZWEgaWQ9IicgKyBpZCArICciIHJvd3M9IjIiPjwvdGV4dGFyZWE-JwogICAgICAgICAgICAgICAgIDogJzxpbnB1dCBpZD0iJyArIGlkICsgJyIgdHlwZT0idGV4dCI-Jyk7CiAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodyk7CiAgICB2YXIgaW5wdXQgPSB3LnF1ZXJ5U2VsZWN0b3IoJyMnICsgaWQpOwogICAgaW5wdXQudmFsdWUgPSB2OwogICAgZmllbGRzLnB1c2goeyBwYXRoOiBwYXRoLCBpbnB1dDogaW5wdXQgfSk7CiAgfQoKICBmdW5jdGlvbiBzZWN0aW9uKHRpdGxlLCBvcGVuKSB7CiAgICB2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RldGFpbHMnKTsKICAgIGQuY2xhc3NOYW1lID0gJ2F2enByLXNlYyc7CiAgICBpZiAob3BlbikgZC5vcGVuID0gdHJ1ZTsKICAgIGQuaW5uZXJIVE1MID0gJzxzdW1tYXJ5PicgKyB0aXRsZSArICc8L3N1bW1hcnk-JzsKICAgIHZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgaW5uZXIuY2xhc3NOYW1lID0gJ2F2enByLWluJzsKICAgIGQuYXBwZW5kQ2hpbGQoaW5uZXIpOwogICAgYm9keS5hcHBlbmRDaGlsZChkKTsKICAgIHJldHVybiBpbm5lcjsKICB9CgogIGZ1bmN0aW9uIHJvdyhwYXJlbnQpIHsKICAgIHZhciByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICByLmNsYXNzTmFtZSA9ICdhdnpwci1yb3cnOwogICAgcGFyZW50LmFwcGVuZENoaWxkKHIpOwogICAgcmV0dXJuIHI7CiAgfQoKICAvKiAtLS0tLS0tLS0tINGI0LDQv9C60LAg0Lgg0LLQutC70LDQtNC60LggLS0tLS0tLS0tLSAqLwogIHZhciBzID0gc2VjdGlvbign0KjQsNC_0LrQsCDQuCDQstC60LvQsNC00LrQuCcsIHRydWUpOwogIGZpZWxkKHMsICfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCBbJ2hlcm8nLCAnZXllYnJvdyddKTsKICBjZmcuaGVyby5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChfLCBpKSB7CiAgICBmaWVsZChzLCAn0JfQsNCz0L7Qu9C-0LLQvtC6LCDRgdGC0YDQvtC60LAgJyArIChpICsgMSksIFsnaGVybycsICdsaW5lcycsIGldKTsKICB9KTsKICB2YXIgcjAgPSByb3cocyk7CiAgZmllbGQocjAsICfQn9C-0LTQv9C40YHRjCDQvdCw0LQg0LLQutC70LDQtNC60LDQvNC4JywgWyd0YWJzSGVhZCcsICdsYWJlbCddKTsKICBmaWVsZChyMCwgJ9Cf0L7QtNGB0LrQsNC30LrQsCDRgdC_0YDQsNCy0LAnLCBbJ3RhYnNIZWFkJywgJ2hpbnQnXSk7CiAgY2ZnLnRhYnMuZm9yRWFjaChmdW5jdGlvbiAodGFiLCBpKSB7CiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgYy5jbGFzc05hbWUgPSAnYXZ6cHItY2FyZCc7CiAgICBjLmlubmVySFRNTCA9ICc8aDQ-0JLQutC70LDQtNC60LAgJyArIChpICsgMSkgKyAnPC9oND4nOwogICAgcy5hcHBlbmRDaGlsZChjKTsKICAgIHZhciByID0gcm93KGMpOwogICAgZmllbGQociwgJ9Cd0L7QvNC10YAnLCBbJ3RhYnMnLCBpLCAnbnVtJ10pOwogICAgZmllbGQociwgJ9CT0L7RgNC-0LQnLCBbJ3RhYnMnLCBpLCAnbmFtZSddKTsKICAgIHZhciByMiA9IHJvdyhjKTsKICAgIGZpZWxkKHIyLCAn0JrQvtC0INCz0L7RgNC-0LTQsCcsIFsndGFicycsIGksICdwaW4nXSk7CiAgICBmaWVsZChyMiwgJ9Cf0L7QtNC_0LjRgdGMJywgWyd0YWJzJywgaSwgJ21ldGEnXSk7CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0g0L_QsNC90LXQu9C4INCz0L7RgNC-0LTQvtCyIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiBwYW5lbFVJKGtleSwgdGl0bGUpIHsKICAgIHZhciBkYXRhID0gY2ZnW2tleV07CiAgICBpZiAoIWRhdGEpIHJldHVybjsKICAgIHZhciBzZWMgPSBzZWN0aW9uKHRpdGxlICsgJyDigJQg0LrQsNGA0YLQvtGH0LXQujogJyArIGRhdGEuY2FyZHMubGVuZ3RoKTsKCiAgICBpZiAoZGF0YS5sb2dpc3RpY3MpIHsKICAgICAgdmFyIGxjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGxjLmNsYXNzTmFtZSA9ICdhdnpwci1jYXJkJzsKICAgICAgbGMuaW5uZXJIVE1MID0gJzxoND7QkdCw0L3QvdC10YAg0LvQvtCz0LjRgdGC0LjQutC4PC9oND4nOwogICAgICBzZWMuYXBwZW5kQ2hpbGQobGMpOwogICAgICBmaWVsZChsYywgJ9CX0LDQs9C-0LvQvtCy0L7QuicsIFtrZXksICdsb2dpc3RpY3MnLCAndGl0bGUnXSk7CiAgICAgIGZpZWxkKGxjLCAn0KLQtdC60YHRgicsIFtrZXksICdsb2dpc3RpY3MnLCAndGV4dCddLCB0cnVlKTsKICAgICAgdmFyIGxyID0gcm93KGxjKTsKICAgICAgZmllbGQobHIsICfQmtGA0YPQv9C90LDRjyDQvdCw0LTQv9C40YHRjCcsIFtrZXksICdsb2dpc3RpY3MnLCAnc3RhdE51bSddKTsKICAgICAgZmllbGQobHIsICfQn9C-0LTQv9C40YHRjCDQv9C-0LQg0L3QtdC5JywgW2tleSwgJ2xvZ2lzdGljcycsICdzdGF0TGFiZWwnXSk7CiAgICB9CgogICAgZGF0YS5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzYywgaSkgewogICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBjLmNsYXNzTmFtZSA9ICdhdnpwci1jYXJkJzsKICAgICAgYy5pbm5lckhUTUwgPSAnPGg0PtCX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCAnICsgKGkgKyAxKSArICc8L2g0Pic7CiAgICAgIHNlYy5hcHBlbmRDaGlsZChjKTsKICAgICAgdmFyIHIgPSByb3coYyk7CiAgICAgIGZpZWxkKHIsICfQotC10LrRgdGCJywgW2tleSwgJ3NlY3Rpb25zJywgaSwgJ3RpdGxlJ10pOwogICAgICBmaWVsZChyLCAn0JzQtdGC0LrQsCDRgdC_0YDQsNCy0LAnLCBba2V5LCAnc2VjdGlvbnMnLCBpLCAnYXNpZGUnXSk7CiAgICB9KTsKCiAgICBkYXRhLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGNkLCBpKSB7CiAgICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGMuY2xhc3NOYW1lID0gJ2F2enByLWNhcmQnOwogICAgICBjLmlubmVySFRNTCA9ICc8aDQ-0JrQsNGA0YLQvtGH0LrQsCAnICsgKGkgKyAxKSArICcgwrcgJyArIChjZC5uYW1lIHx8ICfigJQnKSArICc8L2g0Pic7CiAgICAgIHNlYy5hcHBlbmRDaGlsZChjKTsKCiAgICAgIHZhciByMSA9IHJvdyhjKTsKICAgICAgZmllbGQocjEsICfQndCw0LfQstCw0L3QuNC1JywgW2tleSwgJ2NhcmRzJywgaSwgJ25hbWUnXSk7CiAgICAgIGZpZWxkKHIxLCAn0J3QvtC80LXRgCDQsiDQutGA0YPQttC60LUnLCBba2V5LCAnY2FyZHMnLCBpLCAndGFnJ10pOwoKICAgICAgdmFyIHIyID0gcm93KGMpOwogICAgICBmaWVsZChyMiwgJ9Cm0LXQvdCwICjQsdC10Lcg0LfQvdCw0LrQsCDigr0pJywgW2tleSwgJ2NhcmRzJywgaSwgJ3ByaWNlJ10pOwogICAgICBmaWVsZChyMiwgJ9Cf0LvQsNGI0LrQsCDCq9Cf0L7Qv9GD0LvRj9GA0L3QvtC1wrsnLCBba2V5LCAnY2FyZHMnLCBpLCAncG9wJ10pOwoKICAgICAgZmllbGQoYywgJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDRhtC10L3QvtC5JywgW2tleSwgJ2NhcmRzJywgaSwgJ3N1YiddLCB0cnVlKTsKICAgICAgZmllbGQoYywgJ9CR0LXQudC00LYgwqvQktGB0ZEg0LLQutC70Y7Rh9C10L3QvsK7JywgW2tleSwgJ2NhcmRzJywgaSwgJ2JhZGdlJ10pOwoKICAgICAgY2QuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoXywgaykgewogICAgICAgIGZpZWxkKGMsICfQn9GD0L3QutGCICcgKyAoayArIDEpLCBba2V5LCAnY2FyZHMnLCBpLCAnaXRlbXMnLCBrXSk7CiAgICAgIH0pOwoKICAgICAgaWYgKGNkLm5vdGUpIHsKICAgICAgICB2YXIgcjMgPSByb3coYyk7CiAgICAgICAgZmllbGQocjMsICfQodC90L7RgdC60LAg4oCUINGC0LXQutGB0YInLCBba2V5LCAnY2FyZHMnLCBpLCAnbm90ZScsICdsYWJlbCddKTsKICAgICAgICBmaWVsZChyMywgJ9Ch0L3QvtGB0LrQsCDigJQg0LfQvdCw0YfQtdC90LjQtScsIFtrZXksICdjYXJkcycsIGksICdub3RlJywgJ3ZhbHVlJ10pOwogICAgICB9CiAgICAgIGlmIChjZC5idG4pIHsKICAgICAgICB2YXIgcjQgPSByb3coYyk7CiAgICAgICAgZmllbGQocjQsICfQmtC90L7Qv9C60LAg4oCUINGC0LXQutGB0YInLCBba2V5LCAnY2FyZHMnLCBpLCAnYnRuJywgJ3RleHQnXSk7CiAgICAgICAgZmllbGQocjQsICfQmtC90L7Qv9C60LAg4oCUINCw0LTRgNC10YEnLCBba2V5LCAnY2FyZHMnLCBpLCAnYnRuJywgJ2hyZWYnXSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgcGFuZWxVSSgna3puJywgJ9Ca0LDQt9Cw0L3RjCcpOwogIHBhbmVsVUkoJ21zaycsICfQnNC-0YHQutCy0LAnKTsKCiAgLyogLS0tLS0tLS0tLSDQt9Cw0L_QuNGB0Ywg0LfQvdCw0YfQtdC90LjQuSDQsiDRgNCw0LfQvNC10YLQutGDIC0tLS0tLS0tLS0KICAgICDQn9C-0LvQvdC-0YHRgtGM0Y4g0L_QvtCy0YLQvtGA0Y_QtdGCINC70L7Qs9C40LrRgywg0L_QviDQutC-0YLQvtGA0L7QuSDQv9Cw0L3QtdC70Ywg0YfQuNGC0LDQu9CwINGB0YLRgNCw0L3QuNGG0YMuCiAgICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwINC-0YLQtNC10LvRjNC90L7QuSDQutC-0L_QuNC4INC00L7QutGD0LzQtdC90YLQsCwg0LbQuNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDINC90LUg0YLRgNC-0LPQsNC10YIuICovCgogIGZ1bmN0aW9uIHR4dChlbCwgdikgewogICAgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2ICE9PSAnJykgZWwudGV4dENvbnRlbnQgPSB2OwogIH0KICBmdW5jdGlvbiBzZXRBdHRyKGVsLCBuYW1lLCB2KSB7CiAgICBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYgIT09ICcnKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdik7CiAgfQoKICAvKiDQn9GA0LDQstC40YIg0YLQtdC60YHRgiwg0L3QtSDRgtGA0L7Qs9Cw0Y8g0LLQu9C-0LbQtdC90L3Rg9GOINC40LrQvtC90LrRgyDQuNC70Lgg0LfQvdCw0YfQvtC6INCy0LDQu9GO0YLRiy4KICAgICDQldGB0LvQuCDQv9C10YDQtdC0INGC0LXQutGB0YLQvtC8INGB0YLQvtC40YIg0Y3Qu9C10LzQtdC90YIg4oCUINGN0YLQviDQuNC60L7QvdC60LAsINC4INC10ZEg0L7RgiDQv9C-0LTQv9C40YHQuAogICAgINC-0YLQtNC10LvRj9C10YIg0L_RgNC-0LHQtdC7OyDQv9Cw0L3QtdC70Ywg0L7RgtC00LDRkdGCINGC0LXQutGB0YIg0L7QsdGA0LXQt9Cw0L3QvdGL0LwsINC_0L7RjdGC0L7QvNGDINC_0YDQvtCx0LXQuwogICAgINCy0L7Qt9Cy0YDQsNGJ0LDQtdC8INC30LTQtdGB0YwsINC40L3QsNGH0LUg0LjQutC-0L3QutCwINGB0LvQuNC_0L3QtdGC0YHRjyDRgSDQvdCw0LTQv9C40YHRjNGOLiAqLwogIGZ1bmN0aW9uIHR4dEtlZXAoZWwsIHYpIHsKICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnIHx8IHYgPT09ICcnKSByZXR1cm47CiAgICB2YXIgZG9uZSA9IGZhbHNlLCBzZWVuRWwgPSBmYWxzZSwgaSwgbjsKICAgIGZvciAoaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIG4gPSBlbC5jaGlsZE5vZGVzW2ldOwogICAgICBpZiAobi5ub2RlVHlwZSA9PT0gMSkgeyBzZWVuRWwgPSB0cnVlOyBjb250aW51ZTsgfQogICAgICBpZiAobi5ub2RlVHlwZSA9PT0gMykgewogICAgICAgIGlmICghZG9uZSAmJiBuLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG4ubm9kZVZhbHVlID0gKHNlZW5FbCA_ICcgJyA6ICcnKSArIHY7IGRvbmUgPSB0cnVlOyB9CiAgICAgICAgZWxzZSBpZiAoZG9uZSkgeyBuLm5vZGVWYWx1ZSA9ICcnOyB9CiAgICAgIH0KICAgIH0KICAgIGlmICghZG9uZSkgZWwuaW5zZXJ0QmVmb3JlKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodiksIGVsLmZpcnN0Q2hpbGQpOwogIH0KCiAgZnVuY3Rpb24gd3JpdGVDYXJkKGVsLCBjKSB7CiAgICBpZiAoIWVsIHx8ICFjKSByZXR1cm47CiAgICB0eHQob25lKGVsLCAnLnBjLW5hbWUnKSwgYy5uYW1lKTsKICAgIHR4dChvbmUoZWwsICcucGMtdGFnIC5udW0nKSwgYy50YWcpOwogICAgdHh0S2VlcChvbmUoZWwsICcucGMtcHJpY2UnKSwgYy5wcmljZSk7CiAgICB0eHQob25lKGVsLCAnLnBjLXByaWNlLXN1YicpLCBjLnN1Yik7CiAgICB0eHQob25lKGVsLCAnLnBjLXBvcCcpLCBjLnBvcCk7CiAgICB0eHRLZWVwKG9uZShlbCwgJy5sb2dpc3RpY3MtYmFkZ2UnKSwgYy5iYWRnZSk7CgogICAgaWYgKEFycmF5LmlzQXJyYXkoYy5pdGVtcykpIHsKICAgICAgdmFyIGxpcyA9IGFsbChlbCwgJy5wYy1saXN0IGxpJyk7CiAgICAgIGMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodHgsIGkpIHsKICAgICAgICB2YXIgbGkgPSBsaXNbaV07CiAgICAgICAgaWYgKCFsaSkgcmV0dXJuOwogICAgICAgIHZhciBzcGFucyA9IGFsbChsaSwgJ3NwYW4nKTsKICAgICAgICB2YXIgdGFyZ2V0ID0gc3BhbnMubGVuZ3RoID4gMSA_IHNwYW5zW3NwYW5zLmxlbmd0aCAtIDFdIDogbnVsbDsKICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZignaWNvbicpID09PSAtMSkgdHh0KHRhcmdldCwgdHgpOwogICAgICB9KTsKICAgIH0KICAgIGlmIChjLm5vdGUpIHsKICAgICAgdmFyIG5vdGUgPSBhbGwoZWwsICcucGMtbm90ZSBzcGFuJyk7CiAgICAgIHR4dChub3RlWzBdLCBjLm5vdGUubGFiZWwpOwogICAgICB0eHQobm90ZVsxXSwgYy5ub3RlLnZhbHVlKTsKICAgIH0KICAgIGlmIChjLmJ0bikgewogICAgICB2YXIgYnRuID0gb25lKGVsLCAnLmJ0bi1jYXJkJyk7CiAgICAgIGlmIChidG4pIHsKICAgICAgICBzZXRBdHRyKGJ0biwgJ2hyZWYnLCBjLmJ0bi5ocmVmKTsKICAgICAgICB2YXIgYnMgPSBhbGwoYnRuLCAnc3BhbicpOwogICAgICAgIGlmIChic1swXSAmJiBic1swXS5jbGFzc05hbWUuaW5kZXhPZignaWNvbicpID09PSAtMSkgdHh0KGJzWzBdLCBjLmJ0bi50ZXh0KTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gd3JpdGVQYW5lbChzY29wZSwgaWQsIGRhdGEpIHsKICAgIGlmICghZGF0YSkgcmV0dXJuOwogICAgdmFyIHAgPSBvbmUoc2NvcGUsICcjYXYtcGFuZWwtJyArIGlkKTsKICAgIGlmICghcCkgcmV0dXJuOwoKICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuc2VjdGlvbnMpKSB7CiAgICAgIHZhciBoZWFkcyA9IGFsbChwLCAnLnNlY3Rpb24tbGFiZWwnKTsKICAgICAgZGF0YS5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzYywgaSkgewogICAgICAgIHZhciBoZCA9IGhlYWRzW2ldOwogICAgICAgIGlmICghaGQpIHJldHVybjsKICAgICAgICB0eHQob25lKGhkLCAnaDInKSwgc2MudGl0bGUpOwogICAgICAgIHR4dEtlZXAob25lKGhkLCAnLnNsLWFzaWRlJyksIHNjLmFzaWRlKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmNhcmRzKSkgewogICAgICB2YXIgY2FyZHMgPSBhbGwocCwgJy5wcmljZS1jYXJkJyk7CiAgICAgIGRhdGEuY2FyZHMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgeyB3cml0ZUNhcmQoY2FyZHNbaV0sIGMpOyB9KTsKICAgIH0KICAgIGlmIChkYXRhLmxvZ2lzdGljcykgewogICAgICB2YXIgbGIgPSBvbmUocCwgJy5sb2dpc3RpY3MtYmFubmVyJyk7CiAgICAgIGlmIChsYikgewogICAgICAgIHR4dChvbmUobGIsICdoNCcpLCBkYXRhLmxvZ2lzdGljcy50aXRsZSk7CiAgICAgICAgdHh0KG9uZShsYiwgJ3AnKSwgZGF0YS5sb2dpc3RpY3MudGV4dCk7CiAgICAgICAgdHh0KG9uZShsYiwgJy5sYi1zdGF0LW51bScpLCBkYXRhLmxvZ2lzdGljcy5zdGF0TnVtKTsKICAgICAgICB0eHQob25lKGxiLCAnLmxiLXN0YXQtbGJsJyksIGRhdGEubG9naXN0aWNzLnN0YXRMYWJlbCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkYXRhKSB7CiAgICB0eHQob25lKHNjb3BlLCAnLmhlcm8tZXllYnJvdycpLCBkYXRhLmhlcm8uZXllYnJvdyk7CiAgICB2YXIgaW5uZXJzID0gYWxsKHNjb3BlLCAnLmhlcm8tdGl0bGUtaW5uZXInKTsKICAgIGRhdGEuaGVyby5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lLCBpKSB7CiAgICAgIHZhciBlbCA9IGlubmVyc1tpXTsKICAgICAgaWYgKCFlbCkgcmV0dXJuOwogICAgICB0eHQob25lKGVsLCAnZW0nKSB8fCBlbCwgbGluZSk7CiAgICB9KTsKICAgIHR4dChvbmUoc2NvcGUsICcudGFicy1oZWFkIC5oLWxhYmVsJyksIGRhdGEudGFic0hlYWQubGFiZWwpOwogICAgdHh0S2VlcChvbmUoc2NvcGUsICcudGFicy1oZWFkIC5oLWhpbnQnKSwgZGF0YS50YWJzSGVhZC5oaW50KTsKCiAgICB2YXIgY2hpcHMgPSBhbGwoc2NvcGUsICcudGFicy11aSAuY2hpcCcpOwogICAgZGF0YS50YWJzLmZvckVhY2goZnVuY3Rpb24gKHRiLCBpKSB7CiAgICAgIHZhciBjaCA9IGNoaXBzW2ldOwogICAgICBpZiAoIWNoKSByZXR1cm47CiAgICAgIHR4dChvbmUoY2gsICcuY2hpcC1udW0nKSwgdGIubnVtKTsKICAgICAgdHh0KG9uZShjaCwgJy5jaGlwLW5hbWUnKSwgdGIubmFtZSk7CiAgICAgIHZhciBtZXRhID0gYWxsKGNoLCAnLmNoaXAtbWV0YSA-IHNwYW4nKTsKICAgICAgdHh0S2VlcChtZXRhWzBdLCB0Yi5waW4pOwogICAgICB0eHQobWV0YVsxXSwgdGIubWV0YSk7CiAgICB9KTsKCiAgICB3cml0ZVBhbmVsKHNjb3BlLCAna3puJywgZGF0YS5rem4pOwogICAgd3JpdGVQYW5lbChzY29wZSwgJ21zaycsIGRhdGEubXNrKTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7IHNldChmLnBhdGgsIGYuaW5wdXQudmFsdWUpOyB9KTsKICAgIHJldHVybiBjZmc7CiAgfQoKICBmdW5jdGlvbiBkaWdpdHMoczIpIHsgcmV0dXJuIChzMiB8fCAnJykucmVwbGFjZSgvW15cZF0vZywgJycpOyB9CiAgZnVuY3Rpb24gbXNnKHMyKSB7IGJveC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHItbXNnJykudGV4dENvbnRlbnQgPSBzMjsgfQoKICB2YXIgc3JjQ2FjaGUgPSBudWxsOwogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICBpZiAoc3JjQ2FjaGUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3JjQ2FjaGUpOwogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz9hdno9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIudGV4dCgpOyB9KQogICAgICAudGhlbihmdW5jdGlvbiAoaCkgeyBzcmNDYWNoZSA9IGg7IHJldHVybiBoOyB9KTsKICB9CgogIGZ1bmN0aW9uIGNvcHkoc3RyLCBub3RlKSB7CiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICBzdHIgPSBTdHJpbmcoc3RyKS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgdmFyIHRhID0gYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwci1vdXQnKTsKICAgIHRhLnZhbHVlID0gc3RyOwogICAgdGEuc2VsZWN0KCk7CiAgICB2YXIgb2sgPSBmYWxzZTsKICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgIGlmICghb2sgJiYgbmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICByZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc3RyKS50aGVuKAogICAgICAgIGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUpOyB9LAogICAgICAgIC8qINC_0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L3QtdC70YzQt9GPINGC0LXRgNGP0YLRjCDQstC80LXRgdGC0LUg0YEg0YHQvtC-0LHRidC10L3QuNC10Lwg0L7QsSDRg9GB0L_QtdGF0LUgKi8KICAgICAgICBmdW5jdGlvbiAoKSB7IG1zZygn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOLiAnICsgbm90ZSk7IH0pOwogICAgfQogICAgbXNnKG9rID8gbm90ZSA6ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4uICcgKyBub3RlKTsKICB9CgogIGJveC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHItY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBib3gucmVtb3ZlKCk7IH07CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwINCx0LvQvtC60LAg0YbQtdC70LjQutC-0LwgLS0tLS0tLS0tLQogICAgINCS0YHQtSDQvdC10LjQt9C80LXQvdGP0LXQvNGL0LUg0YfQsNGB0YLQuCAo0YHRgtC40LvQuCwg0YHQutGA0LjQv9GCINCy0LrQu9Cw0LTQvtC6LCDRgdGB0YvQu9C60Lgg0L3QsCDRiNGA0LjRhNGC0YspCiAgICAg0LHQtdGA0ZHQvCDQuNC3INC40YHRhdC-0LTQvdC-0LPQviDQutC-0LTQsCDRgdGC0YDQsNC90LjRhtGLLCDQsCDQvdC1INC40Lcg0YjQsNCx0LvQvtC90LAg0LLQvdGD0YLRgNC4INC_0LDQvdC10LvQuC4KICAgICDQotCw0Log0YDRg9GH0L3Ri9C1INC_0YDQsNCy0LrQuCDQtNC40LfQsNC50L3QsCDQv9C10YDQtdC20LjQstCw0Y7RgiDQv9C10YDQtdGB0LHQvtGA0LrRgy4gKi8KCiAgZnVuY3Rpb24gbGRXaXRoTmV3UHJpY2VzKGRvYywgZGF0YSkgewogICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZigncHJpY2VDdXJyZW5jeScpID4gLTE7CiAgICB9KVswXTsKICAgIGlmICghc2MpIHJldHVybiB7IHRleHQ6IG51bGwsIGhpdHM6IDAsIHdhcm46IFsn0LHQu9C-0LogbGQranNvbiDRgSDRhtC10L3QsNC80Lgg0L3QtSDQvdCw0LnQtNC10L0nXSB9OwoKICAgIHZhciB0ZXh0ID0gc2MudGV4dENvbnRlbnQsIGhpdHMgPSAwLCB3YXJuID0gW10sIGNoYW5nZXMgPSBbXTsKCiAgICBbJ2t6bicsICdtc2snXS5mb3JFYWNoKGZ1bmN0aW9uIChjaXR5KSB7CiAgICAgIGlmICghZGF0YVtjaXR5XSB8fCAhT1JJR1tjaXR5XSkgcmV0dXJuOwogICAgICBkYXRhW2NpdHldLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgICB2YXIgbyA9IE9SSUdbY2l0eV0uY2FyZHNbaV07CiAgICAgICAgaWYgKCFvKSByZXR1cm47CiAgICAgICAgaWYgKGRpZ2l0cyhjLnByaWNlKSAhPT0gZGlnaXRzKG8ucHJpY2UpKSBjaGFuZ2VzLnB1c2goeyBvbGQ6IG8ucHJpY2UsIG5ldTogYy5wcmljZSB9KTsKICAgICAgICBpZiAoYy5ub3RlICYmIG8ubm90ZSAmJiBkaWdpdHMoYy5ub3RlLnZhbHVlKSAhPT0gZGlnaXRzKG8ubm90ZS52YWx1ZSkpIHsKICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG9sZDogby5ub3RlLnZhbHVlLCBuZXU6IGMubm90ZS52YWx1ZSB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgY2hhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaCkgewogICAgICB2YXIgb2QgPSBkaWdpdHMoY2gub2xkKSwgbmQgPSBkaWdpdHMoY2gubmV1KTsKICAgICAgaWYgKCFvZCB8fCAhbmQpIHJldHVybjsKCiAgICAgIC8qINC_0L7Qu9C1IHByaWNlIOKAlCDRhtC40YTRgNGLINC_0L7QtNGA0Y_QtCwg0LHQtdC3INC_0YDQvtCx0LXQu9C-0LIgKi8KICAgICAgdmFyIHJlUCA9IG5ldyBSZWdFeHAoJygicHJpY2UiXFxzKjpcXHMqIiknICsgb2QgKyAnKCIpJywgJ2cnKTsKICAgICAgdmFyIG4xID0gKHRleHQubWF0Y2gocmVQKSB8fCBbXSkubGVuZ3RoOwogICAgICBpZiAobjEgPiAxKSB3YXJuLnB1c2goY2gub2xkICsgJyDRgdGC0L7QuNGCINCyICcgKyBuMSArICcg0L_RgNC10LTQu9C-0LbQtdC90LjRj9GFIOKAlCDRgdCy0LXRgNGM0YLQtSDQs9C70LDQt9Cw0LzQuCcpOwogICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlUCwgJyQxJyArIG5kICsgJyQyJyk7CgogICAgICAvKiDRgtCwINC20LUg0YbQtdC90LAg0L_RgNC-0L_QuNGB0YzRjiDQsiDQvtC_0LjRgdCw0L3QuNGP0YU6IMKr0L7RgiAxNCA5MDAg4oK9wrsgKi8KICAgICAgdmFyIGh1bWFuID0gb2QucmVwbGFjZSgvXEIoPz0oXGR7M30pKyg_IVxkKSkvZywgJ1tcXHNcXHUwMGEwXT8nKTsKICAgICAgdmFyIHByZXR0eSA9IG5kLnJlcGxhY2UoL1xCKD89KFxkezN9KSsoPyFcZCkpL2csICcgJyk7CiAgICAgIHZhciBuMiA9ICh0ZXh0Lm1hdGNoKG5ldyBSZWdFeHAoaHVtYW4sICdnJykpIHx8IFtdKS5sZW5ndGg7CiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChodW1hbiwgJ2cnKSwgcHJldHR5KTsKCiAgICAgIGhpdHMgKz0gbjEgKyBuMjsKICAgIH0pOwoKICAgIC8qINCg0LDQt9C80LXRgtC60YMg0LfQtNC10YHRjCDQv9GA0LDQstC40Lwg0YLQtdC60YHRgtC-0LwsINGH0YLQvtCx0Ysg0L3QtSDQv9C10YDQtdGE0L7RgNC80LDRgtC40YDQvtCy0LDRgtGMINC10ZEg0LHQtdC3INC90YPQttC00YsuCiAgICAgICDQndC-INC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuCDQvdCw0LTQviDQv9GA0LjQstC10YHRgtC4INC6INCz0LvQsNCy0L3QvtC5LCDQsCDRjdGC0L4g0LTQtdC70LDQtdGC0YHRjyDRgNCw0LfQsdC-0YDQvtC8LgogICAgICAg0J_QvtGN0YLQvtC80YMg0YDQsNC30LHQuNGA0LDQtdC8INC-0LTQuNC9INGA0LDQtyDQsiDQutC-0L3RhtC1OiDQtdGB0LvQuCDQutCw0YDRgtC-0YfQutC4INGD0LbQtSDRgdC-0LLQv9Cw0LTQsNGO0YIKICAgICAgINGBINGN0YLQsNC70L7QvdC-0LwsINGC0LXQutGB0YIg0L7RgdGC0LDRkdGC0YHRjyDQv9GA0LXQttC90LjQvCDQuCDRhNC-0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1INC90LUg0L_QvtC10LTQtdGCLiAqLwogICAgdmFyIHBhcnNlZDsKICAgIHRyeSB7IHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7IH0KICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGhpdHM6IGhpdHMsIHdhcm46IFsn0L_QvtGB0LvQtSDQv9C-0LTRgdGC0LDQvdC-0LLQutC4IGxkK2pzb24g0YHRgtCw0Lsg0L3QtdCy0LDQu9C40LTQvdGL0Lw6ICcgKyBlLm1lc3NhZ2VdIH07IH0KCiAgICB2YXIgZml4ZWQgPSBzeW5jQ2Fub24ocGFyc2VkWydAZ3JhcGgnXSB8fCBbXSk7CiAgICBpZiAoZml4ZWQubGVuZ3RoKSB7CiAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShwYXJzZWQsIG51bGwsIDIpOwogICAgICB3YXJuLnB1c2goJ9C-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuCDQv9GA0LjQstC10LTQtdC90Ysg0Log0LPQu9Cw0LLQvdC-0Lk6ICcgKyBmaXhlZC5qb2luKCcsICcpKTsKICAgIH0KCiAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBoaXRzOiBoaXRzLCB3YXJuOiB3YXJuLCBjaGFuZ2VkOiBjaGFuZ2VzLmxlbmd0aCB9OwogIH0KCiAgYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwci1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgZGF0YSA9IGNvbGxlY3QoKTsKICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CgogICAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKGgpIHsKICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaCwgJ3RleHQvaHRtbCcpOwoKICAgICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1wcmljZXMnKTsKICAgICAgaWYgKCFzY29wZSkgeyBtc2coJ9CSINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L0g0LHQu9C-0LogLmF2LXByaWNlcycpOyByZXR1cm47IH0KICAgICAgd3JpdGVBbGwoc2NvcGUsIGRhdGEpOwoKICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2LXByaWNlcycpID4gLTE7CiAgICAgIH0pWzBdOwogICAgICB2YXIgdGFiU2NyaXB0ID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3dhaXRGb3JET00nKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgLyog0L7QtNC40L0g0Lgg0YLQvtGCINC20LUg0YjRgNC40YTRgiDQvNC-0LMg0L_QvtC_0LDRgdGC0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtGDINC00LLQsNC20LTRiyDigJQg0L_RgNC4INCy0YHRgtCw0LLQutC1CiAgICAgICAgINC90L7QstC-0Lkg0YjQsNC_0LrQuCDQv9C-0LLQtdGA0YUg0YHRgtCw0YDQvtC5LiDQodC-0LHQuNGA0LDQtdC8INC_0L4g0L7QtNC90L7QvNGDINGA0LDQt9GDINC90LAg0LDQtNGA0LXRgSAqLwogICAgICB2YXIgc2VlbkZvbnQgPSB7fTsKICAgICAgdmFyIGR1cEZvbnRzID0gMDsKICAgICAgdmFyIGZvbnRMaW5rcyA9IFtdLnNsaWNlLmNhbGwoZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJykpCiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobCkgewogICAgICAgICAgdmFyIGhyZWYgPSBsLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnOwogICAgICAgICAgaWYgKHNlZW5Gb250W2hyZWZdKSB7IGR1cEZvbnRzKys7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAgc2VlbkZvbnRbaHJlZl0gPSAxOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CiAgICAgIHZhciBmb250TGluayA9IGZvbnRMaW5rc1swXSB8fCBudWxsOwoKICAgICAgLyog0YjRgNC40YTRgiDQt9C90LDRh9C60L7QsiDigJQg0LHQtdC3INC90LXQs9C-IC5pY29uINC_0L7QutCw0LfRi9Cy0LDQtdGCINGB0LvQvtCy0LAg0LLQvNC10YHRgtC-INC60LDRgNGC0LjQvdC-0LouCiAgICAgICAgINC-0YHRjCBGSUxMINC90YPQttC90LAg0LrQu9Cw0YHRgdGDIC5pY29uLWZpbGxlZCwgZGlzcGxheT1ibG9jayDQs9Cw0YHQuNGCINC80LjQs9Cw0L3QuNC1ICovCiAgICAgIHZhciBNU19MSU5LID0gJzxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9JyArCiAgICAgICAgICAgICAgICAgICAgJ01hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREAyMC4uNDgsMTAwLi43MDAsMC4uMSwtNTAuLjIwMCcgKwogICAgICAgICAgICAgICAgICAgICcmZGlzcGxheT1ibG9jayIgcmVsPSJzdHlsZXNoZWV0Ij4nOwogICAgICB2YXIgaGFzSWNvbkZvbnQgPSBmb250TGlua3Muc29tZShmdW5jdGlvbiAobCkgewogICAgICAgIHJldHVybiAobC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJykuaW5kZXhPZignTWF0ZXJpYWwrU3ltYm9scycpID4gLTE7CiAgICAgIH0pOwogICAgICB2YXIgZm9udE91dCA9IGZvbnRMaW5rcy5tYXAoZnVuY3Rpb24gKGwpIHsgcmV0dXJuIGwub3V0ZXJIVE1MOyB9KTsKICAgICAgaWYgKCFoYXNJY29uRm9udCkgZm9udE91dC5wdXNoKE1TX0xJTkspOwoKICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INCx0LvQvtC60LAg0YbQtdC9Jyk7CiAgICAgIGlmICghdGFiU2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INCy0LrQu9Cw0LTQvtC6Jyk7CiAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgeyBtc2coJ9Cd0LUg0L3QsNC50LTQtdC90L4g0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRizogJyArIG1pc3Npbmcuam9pbignLCAnKSArICcuINCa0L7QtCDQvdC1INGB0L7QsdGA0LDQvS4nKTsgcmV0dXJuOyB9CgogICAgICB2YXIgbGQgPSBsZFdpdGhOZXdQcmljZXMoZG9jLCBkYXRhKTsKICAgICAgaWYgKCFsZC50ZXh0KSB7IG1zZygn0KDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7QsjogJyArIGxkLndhcm4uam9pbignOyAnKSArICcuINCa0L7QtCDQvdC1INGB0L7QsdGA0LDQvS4nKTsgcmV0dXJuOyB9CgogICAgICB2YXIgb3V0ID0gWwogICAgICAgIC8qINGA0L7QstC90L4g0YLQtSDRgdGC0YDQvtC60LgsINGH0YLQviDRgdGC0L7Rj9GCINCyINCx0LvQvtC60LUgL3ByaWNlIOKAlCDQvdC40YfQtdCz0L4g0L3QtSDQtNC-0LHQsNCy0LvRj9C10LwuCiAgICAgICAgICAgcHJlY29ubmVjdCDQuiBpLndmb2xpby5ydSDQt9C00LXRgdGMINC90LXRgiwg0Lgg0LLRi9C00YPQvNGL0LLQsNGC0Ywg0LXQs9C-INC90LXQu9GM0LfRjyAqLwogICAgICAgICc8bWV0YSBjaGFyc2V0PSJ1dGYtOCI-JywKICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4nLAogICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPicsCiAgICAgICAgQVZaX0ZPTlRfTElOS1Muam9pbignXG4nKSwKICAgICAgICAnJywKICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgc2NvcGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgIHRhYlNjcmlwdC5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICBsZC50ZXh0LnRyaW0oKSwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgIF0uam9pbignXG4nKTsKCiAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgb3V0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICAgICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6IC9wcmljZSDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICBpZiAobGQuY2hhbmdlZCkgbm90ZSArPSAnINCm0LXQvSDQvtCx0L3QvtCy0LvQtdC90L4g0LIg0YDQsNC30LzQtdGC0LrQtSDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7QsjogJyArIGxkLmhpdHMgKyAnLic7CiAgICAgIGVsc2Ugbm90ZSArPSAnINCm0LXQvdGLINC90LUg0LzQtdC90Y_Qu9C40YHRjC4nOwogICAgICBpZiAoIWhhc0ljb25Gb250KSBub3RlICs9ICcg0JIg0LrQvtC0INC00L7QsdCw0LLQu9C10L0g0YjRgNC40YTRgiDQt9C90LDRh9C60L7QsiBNYXRlcmlhbCBTeW1ib2xzIOKAlCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0LXQs9C-INC90LUg0LHRi9C70L4uJzsKICAgICAgaWYgKGR1cEZvbnRzKSBub3RlICs9ICcg0KPQsdGA0LDQvdC-INC_0L7QstGC0L7RgNC90YvRhSDRgdGB0YvQu9C-0Log0L3QsCDRiNGA0LjRhNGC0Ys6ICcgKyBkdXBGb250cyArICcuJzsKICAgICAgaWYgKGxkLndhcm4ubGVuZ3RoKSBub3RlICs9ICcg0JLQndCY0JzQkNCd0JjQlTogJyArIGxkLndhcm4uam9pbignOyAnKTsKCiAgICAgIGNvcHkob3V0LCBub3RlKTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRgzogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJldHVybiAn0J_QsNC90LXQu9GMINGG0LXQvSDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoicG9ydGZvbGlvIix0aXRsZToi0J_QsNC90LXQu9GMINGB0YLRgNCw0L3QuNGG0Ysg0L_QvtGA0YLRhNC-0LvQuNC-IixzaG9ydDoi0J_QvtGA0YLRhNC-0LvQuNC-IixoaW50OiLQv9C70LjRgtC60LgsINGE0L7RgtC-0LPRgNCw0YTQuNC4LCDQt9Cw0LPQvtC70L7QstC60LgsIGFsdC3RgtC10LrRgdGC0YsiLHBhZ2VzOlsiL3BvcnRmb2xpbyJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQodCi0KDQkNCd0JjQptCrINCf0J7QoNCi0KTQntCb0JjQniAgdjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0Zm9saW8KCiAgINCd0LjRh9C10LPQviDQvdC1INC_0YPQsdC70LjQutGD0LXRgiDQuCDQvdC1INC80LXQvdGP0LXRgiDQttC40LLRg9GOINGB0YLRgNCw0L3QuNGG0YMuINCn0LjRgtCw0LXRgiDQuNGB0YXQvtC00L3Ri9C5CiAgIEhUTUwg0YHRgtGA0LDQvdC40YbRiywg0L_QvtC00YHRgtCw0LLQu9GP0LXRgiDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiyDQuCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0LoKICAg0YbQtdC70LjQutC-0Lwg4oCUINCy0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0L7QtNC90LjQvCDQutGD0YHQutC-0Lwg0L_QvtCy0LXRgNGFIEhUTUwt0LHQu9C-0LrQsCAvcG9ydGZvbGlvLgoKICAg0J_QvtGH0LXQvNGDINCz0LXQvdC10YDQsNGC0L7RgCwg0LAg0L3QtSDQutC-0L3RhNC40LMg0YEg0LTQstC40LbQutC-0LwsINC60LDQuiDQvdCwINCz0LvQsNCy0L3QvtC5OgogICDRgdC-0LTQtdGA0LbQuNC80L7QtSDQv9C70LjRgtC60Lgg0LvQtdC20LjRgiDQsiDRgtGA0ZHRhSDQvNC10YHRgtCw0YUg4oCUIHNyYyDQutCw0YDRgtC40L3QutC4LCBhbHQg0Lgg0LfQsNC_0LjRgdGMCiAgIGhhc1BhcnQg0LIgbGQranNvbi4g0JTQstC40LbQvtC6INC_0YDQsNCy0LjRgiDRgtC-0LvRjNC60L4gRE9NLCDQv9C-0Y3RgtC-0LzRgyDQsiDQuNGB0YXQvtC00L3QvtC8INC60L7QtNC1CiAgINC90LDQstGB0LXQs9C00LAg0L7RgdGC0LDQstCw0LvQuNGB0Ywg0LHRiyDRgdGC0LDRgNGL0LUg0YHRgdGL0LvQutC4LCDQsCDQuNGFINC90LUg0LLQuNC00Y_RgiDQmNCYLdC60YDQsNGD0LvQtdGA0Ys6CiAgINC-0L3QuCDQvdC1INCy0YvQv9C-0LvQvdGP0Y7RgiBKUy4KCiAgINCg0LDQt9C80LXRgtC60YMg0LHQtdGA0ZHQvCDQvdC1INC40Lcg0LbQuNCy0L7Qs9C-IERPTSwg0LAg0LjQtyDRgdCy0LXQttC10LfQsNCz0YDRg9C20LXQvdC90L7Qs9C-INC40YHRhdC-0LTQvdC40LrQsAogICDRgdGC0YDQsNC90LjRhtGLIOKAlCDRgtCw0Log0L3QsCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQstC70LjRj9C10YIg0L3QuNGH0LXQs9C-LCDRh9GC0L4g0YPQttC1INC-0YLRgNCw0LHQvtGC0LDQu9C-CiAgINCyINCx0YDQsNGD0LfQtdGA0LUgKNC00LLQuNC20LrQuCwg0LvQtdC90LjQstCw0Y8g0LfQsNCz0YDRg9C30LrQsCwg0L_QvtC00YHRgtCw0L3QvtCy0LrQsCBzcmNzZXQpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQsCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0LAsINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQkiA8aGVhZD4gd2ZvbGlvINGB0LLQvtGPINGB0YHRi9C70LrQsCDQvdCwIEpvc3QvUnViaWsg0L7RgiDRgtC10LzRiywg0Lgg0L7QvdCwINGB0YLQvtC40YIg0KDQkNCd0KzQqNCVCiAgICAg0L3QsNGI0LXQuTog0L_QsNC90LXQu9GMINCx0YDQsNC70LAg0L_QtdGA0LLRg9GOINC_0L7QtNGF0L7QtNGP0YnRg9GOINC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60L7QuSDQv9C-0LTQvNC10L3Rj9C70LAKICAgICDQvdCw0YfQtdGA0YLQsNC90LjRjyDQsdC70L7QutCwINC90LAg0YLQtdC80LjQvdGLLiDQndCw0LHQvtGAINCy0LXRgdC-0LIg0LfQsNC00LDQvSBDU1Mg0LHQu9C-0LrQsCwg0L_QvtGN0YLQvtC80YMKICAgICDQtNC10YDQttC40Lwg0LXQs9C-INC30LTQtdGB0YwuINCc0LXQvdGP0LXRgtGB0Y8g0LTQuNC30LDQudC9IOKAlCDQvNC10L3Rj9C10YLRgdGPINGN0YLQsCDRgdGC0YDQvtC60LAuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMjAwOzMwMDs0MDA7NTAwOzYwMCcgKwogICAgJyZhbXA7ZmFtaWx5PVJ1YmlrOndnaHRAMTAwOzIwMDszMDAmYW1wO2Rpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4nOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLCDQuCDQvdCw0LPRgNCw0LTRiyDQvNC-0LPRg9GCINC90LUg0LfQsNGB0YfQuNGC0LDRgtGM0YHRjy4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0Y3RgtC4INGD0LfQu9GLCiAgICAg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAyNCDQsNCy0LPRg9GB0YLQsCAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTkiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogItC-0YIgMTQgOTAwIOKCvSIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enBmLXJvb3QnKTsKICBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CgogIHZhciBsaXZlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2eicpOwogIGlmICghbGl2ZSkgeyBhbGVydCgnQVZaOiDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0L3QtdGCINCx0LvQvtC60LAgI2F2eicpOyByZXR1cm47IH0KICBpZiAoIWxpdmUucXVlcnlTZWxlY3RvcignLmJlbnRvIC5jZWxsJykpIHsgYWxlcnQoJ0FWWjog0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC90LXRgiDRgdC10YLQutC4INC_0LvQuNGC0L7QuicpOyByZXR1cm47IH0KCiAgdmFyIE1BWFcgPSAxMjQwOyAvLyDQv9GA0LXQtNC10Lsg0YjQuNGA0LjQvdGLINC60LDQtNGA0LAsINGB0LwuINC40YHRgtC-0YDQuNGOINC_0YDQvtC10LrRgtCwCgogIC8qIC0tLS0tLS0tLS0g0YPRgtC40LvQuNGC0Ysg0YfRgtC10L3QuNGPIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KCiAgLyog0YLQtdC60YHRgiDQsdC10Lcg0LLQu9C-0LbQtdC90L3Ri9GFINGN0LvQtdC80LXQvdGC0L7QsiDigJQg0YLQvtC70YzQutC-INGB0L7QsdGB0YLQstC10L3QvdGL0LUg0YLQtdC60YHRgtC-0LLRi9C1INGD0LfQu9GLLgogICAgINC90YPQttC10L0g0YLQsNC8LCDQs9C00LUg0YDRj9C00L7QvCDQu9C10LbQuNGCINGB0LvRg9C20LXQsdC90YvQuSBzcGFuICgudmgsIC5hcnIpICovCiAgZnVuY3Rpb24gb3duVGV4dChlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuICcnOwogICAgdmFyIHMgPSAnJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgcyArPSBlbC5jaGlsZE5vZGVzW2ldLm5vZGVWYWx1ZTsKICAgIH0KICAgIHJldHVybiBzLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1INGB0YLRgNCw0L3QuNGG0Ysg0LIg0LrQvtC90YTQuNCzIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZFRpbGVzKHJvb3QpIHsKICAgIHJldHVybiBhbGwocm9vdCwgJy5iZW50byAuY2VsbCcpLm1hcChmdW5jdGlvbiAoYykgewogICAgICB2YXIgaW1nID0gb25lKGMsICdpbWcnKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB0aXRsZTogdChvbmUoYywgJy5jYXAgaDMnKSksCiAgICAgICAgY2FwdGlvbjogdChvbmUoYywgJy5jYXAgc3BhbicpKSwKICAgICAgICBocmVmOiBjLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnLAogICAgICAgIGltZzogaW1nID8gKGltZy5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8ICcnKSA6ICcnLAogICAgICAgIGFsdDogaW1nID8gKGltZy5nZXRBdHRyaWJ1dGUoJ2FsdCcpIHx8ICcnKSA6ICcnCiAgICAgIH07CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlYWRDZmcocm9vdCkgewogICAgdmFyIGxpbmVzID0gYWxsKHJvb3QsICcuZGlzcGxheSAuaW5uZXInKTsKICAgIHZhciBleWVicm93ID0gb25lKHJvb3QsICcuZXllYnJvdycpOwogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IG93blRleHQoZXllYnJvdykgfHwgdChleWVicm93KSwKICAgICAgICBsaW5lMTogdChsaW5lc1swXSksCiAgICAgICAgbGluZTI6IGxpbmVzWzFdID8gdChvbmUobGluZXNbMV0sICdlbScpIHx8IGxpbmVzWzFdKSA6ICcnCiAgICAgIH0sCiAgICAgIGxlZGU6IHQob25lKHJvb3QsICcubGVkZScpKSwKICAgICAgc2VjdGlvbkxhYmVsOiB0KG9uZShyb290LCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgIHRpbGVzOiByZWFkVGlsZXMocm9vdCksCiAgICAgIGN0YTogewogICAgICAgIHRpdGxlOiBvbmUocm9vdCwgJy5jdGEgLmgyJykgPyBvbmUocm9vdCwgJy5jdGEgLmgyJykuaW5uZXJIVE1MLnRyaW0oKSA6ICcnLAogICAgICAgIGJ1dHRvbnM6IGFsbChyb290LCAnLmN0YSAuYnRucyAuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICB2YXIgc3AgPSBhbGwoYiwgJy5idG4tbGFiZWwgPiBzcGFuJyk7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KHNwWzBdKSwgaHJlZjogYi5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGZvb3RlcjogewogICAgICAgIGNvcHk6IHQob25lKHJvb3QsICcuZm9vdGVyIC5jb3B5JykpLAogICAgICAgIHNvY2lhbHM6IGFsbChyb290LCAnLnNvY2lhbHMgYScpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IHQoYSksIGhyZWY6IGEuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBzZW86IHsgbmFtZTogJycsIGRlc2NyaXB0aW9uOiAnJyB9CiAgICB9OwogIH0KCiAgdmFyIGNmZyA9IHJlYWRDZmcobGl2ZSk7CgogIC8qINC40LzRjyDQuCDQvtC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0Ysg0LbQuNCy0YPRgiDRgtC-0LvRjNC60L4g0LIgbGQranNvbiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgcyA9IGFsbChkb2N1bWVudCwgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOwogICAgICB2YXIgcGFnZSA9IChvWydAZ3JhcGgnXSB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3BhZ2UnKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgaWYgKHBhZ2UpIHsKICAgICAgICBjZmcuc2VvLm5hbWUgPSBwYWdlLm5hbWUgfHwgJyc7CiAgICAgICAgY2ZnLnNlby5kZXNjcmlwdGlvbiA9IHBhZ2UuZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgIH0KICAgICAgLyog0YMg0YDQsNC30LTQtdC70L7QsiDQsiDRgNCw0LfQvNC10YLQutC1INC90LDQt9Cy0LDQvdC40Y8g0YDQsNC30LLRkdGA0L3Rg9GC0LXQtSwg0YfQtdC8INC_0L7QtNC_0LjRgdC4INC90LAg0L_Qu9C40YLQutCw0YUKICAgICAgICAgKMKr0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQsdGA0LXQvdC00L7QssK7INC_0YDQvtGC0LjQsiDCq9Cf0YDQtdC00LzQtdGC0L3QsNGPwrspLiDQlNC10YDQttC40Lwg0LjRhQogICAgICAgICDQvtGC0LTQtdC70YzQvdGL0Lwg0L_QvtC70LXQvCwg0LjQvdCw0YfQtSDQv9GA0Lgg0YHQsdC-0YDQutC1INC_0L7RgtC10YDRj9C70Lgg0LHRiyDQvtC_0LjRgdCw0YLQtdC70YzQvdC-0YHRgtGMLiAqLwogICAgICB2YXIgcGFydHMgPSAocGFnZSAmJiBwYWdlLmhhc1BhcnQpIHx8IFtdOwogICAgICBjZmcudGlsZXMuZm9yRWFjaChmdW5jdGlvbiAodGwsIGkpIHsKICAgICAgICB0bC5zZW9OYW1lID0gKHBhcnRzW2ldICYmIHBhcnRzW2ldLm5hbWUpIHx8IHRsLnRpdGxlOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsgLyog0L7RgdGC0LDRkdGC0YHRjyDQv9C-0LTQv9C40YHRjCDQv9C70LjRgtC60LgsINGB0LwuINC90LjQttC1ICovIH0KICB9KSgpOwoKICAvKiAtLS0tLS0tLS0tINCy0ZHRgNGB0YLQutCwINC_0LDQvdC10LvQuCAtLS0tLS0tLS0tCiAgICAg0KLQtdC80LAgd2ZvbGlvINC60YDQsNGB0LjRgiDQv9C-0LvRjyDQsiDQsdC10LvRi9C5INGC0LXQutGB0YIg0L3QsCDQsdC10LvQvtC8INGE0L7QvdC1LgogICAgINCf0L7RjdGC0L7QvNGDINGG0LLQtdGCLCDRiNGA0LjRhNGCINC4IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yINC30LDQtNCw0Y7RgtGB0Y8g0Y_QstC90L4KICAgICDQuCDRgSDQv9GA0LjQvtGA0LjRgtC10YLQvtC8LCDQsCDQstGB0LUg0YfQsNGB0YLQvdGL0LUg0L_RgNCw0LLQuNC70LAg0L3QsNGH0LjQvdCw0Y7RgtGB0Y8g0YEgI2F2enBmLXJvb3QuICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2enBmLXJvb3QsI2F2enBmLXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnpwZi1yb290IGlucHV0LCNhdnpwZi1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cGYtcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2enBmLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2enBmLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enBmLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enBmLWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnpwZi1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnpwZi1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1mIGlucHV0LCNhdnpwZi1yb290IC5hdnpwZi1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnpwZi1yb290IC5hdnpwZi1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6cGYtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1pbWc-aW1ne3dpZHRoOjc4cHg7aGVpZ2h0Ojk4cHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiNlY2VjZWM7ZmxleDpub25lfScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWltZz5pbWcuYmFke291dGxpbmU6MnB4IHNvbGlkICNjMDM5MmJ9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtaW1nIC5ne2ZsZXg6MX0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1ub3Rle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46NnB4IDAgMH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoODRweCwxZnIpKTtnYXA6OHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTBweH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1ncmlkIGZpZ3VyZXttYXJnaW46MDtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1ncmlkIGltZ3t3aWR0aDoxMDAlO2FzcGVjdC1yYXRpbzozLzQ7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjVweDtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6I2VjZWNlY30nLAogICAgJyNhdnpwZi1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6cGYtbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KCiAgZnVuY3Rpb24gZmllbGQobGFiZWwsIHBhdGgsIHZhbCwgdHlwZSkgewogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6cGYtZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIGZ1bmN0aW9uIGltZ0ZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIGZyb20pIHsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6cGYtZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPjxkaXYgY2xhc3M9ImF2enBmLWltZyI-JyArCiAgICAgICc8aW1nIHNyYz0iJyArIGVzYyh2YWwpICsgJyIgZGF0YS1wcmV2PSInICsgcGF0aCArICciIG9uZXJyb3I9InRoaXMuY2xhc3NMaXN0LmFkZChcJ2JhZFwnKSI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJnIj48aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpwZi1ub3RlIj48YnV0dG9uIGNsYXNzPSJhdnpwZi1iIiBkYXRhLWNob29zZT0iJyArIHBhdGggKyAnIiBkYXRhLWZyb209IicgKyBlc2MoZnJvbSkgKyAnIiAnICsKICAgICAgJ3N0eWxlPSJwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6NnB4Ij7QktGL0LHRgNCw0YLRjCDRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0YDQsNC30LTQtdC70LA8L2J1dHRvbj48L3A-JyArCiAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogIH0KCiAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnpwZi13aW4iPicgKwogICAgJzxkaXYgaWQ9ImF2enBmLWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0L_QvtGA0YLRhNC-0LvQuNC-PC9oMj4nICsKICAgICc8YnV0dG9uIGNsYXNzPSJhdnpwZi1iIiBpZD0iYXZ6cGYtY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-PGRpdiBpZD0iYXZ6cGYtYm9keSI-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enBmLXNlYyIgb3Blbj48c3VtbWFyeT7Qn9C70LjRgtC60LggKCcgKyBjZmcudGlsZXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cGYtaW4iPic7CiAgY2ZnLnRpbGVzLmZvckVhY2goZnVuY3Rpb24gKHRsLCBpKSB7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwZi1jYXJkIj48aDQ-0J_Qu9C40YLQutCwICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpwZi1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ3RpbGVzLicgKyBpICsgJy50aXRsZScsIHRsLnRpdGxlKSArCiAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCcsICd0aWxlcy4nICsgaSArICcuY2FwdGlvbicsIHRsLmNhcHRpb24pICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHRgdGL0LvQutCwJywgJ3RpbGVzLicgKyBpICsgJy5ocmVmJywgdGwuaHJlZikgKwogICAgICBpbWdGaWVsZCgn0KTQvtGC0L7Qs9GA0LDRhNC40Y8nLCAndGlsZXMuJyArIGkgKyAnLmltZycsIHRsLmltZywgdGwuaHJlZikgKwogICAgICBmaWVsZCgnQWx0LdGC0LXQutGB0YIgKNCy0LjQtNC10L0g0L_QvtC40YHQutC-0LLQuNC60LDQvCknLCAndGlsZXMuJyArIGkgKyAnLmFsdCcsIHRsLmFsdCkgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgNCw0LfQtNC10LvQsCDQsiDRgNCw0LfQvNC10YLQutC1JywgJ3RpbGVzLicgKyBpICsgJy5zZW9OYW1lJywgdGwuc2VvTmFtZSB8fCB0bC50aXRsZSkgKwogICAgICAnPC9kaXY-JzsKICB9KTsKICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enBmLXNlYyI-PHN1bW1hcnk-0KjQsNC_0LrQsDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwZi1pbiI-JyArCiAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uZXllYnJvdycsIGNmZy5oZXJvLmV5ZWJyb3cpICsKICAgICc8ZGl2IGNsYXNzPSJhdnpwZi1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6LCDRgdGC0YDQvtC60LAgMScsICdoZXJvLmxpbmUxJywgY2ZnLmhlcm8ubGluZTEpICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LosINGB0YLRgNC-0LrQsCAyICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICBmaWVsZCgn0J_QvtC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2xlZGUnLCBjZmcubGVkZSwgJ2FyZWEnKSArCiAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0L3QsNC0INGB0LXRgtC60L7QuScsICdzZWN0aW9uTGFiZWwnLCBjZmcuc2VjdGlvbkxhYmVsKSArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwZi1zZWMiPjxzdW1tYXJ5PtCf0YDQuNC30YvQsiDQuCDRhNGD0YLQtdGAPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enBmLWluIj4nICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0L_RgNC40LfRi9Cy0LAgKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAnY3RhLnRpdGxlJywgY2ZnLmN0YS50aXRsZSk7CiAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enBmLWNhcmQiPjxoND7QmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnPC9oND48ZGl2IGNsYXNzPSJhdnpwZi1yb3ciPicgKwogICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdjdGEuYnV0dG9ucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdjdGEuYnV0dG9ucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-PC9kaXY-JzsKICB9KTsKICBoICs9IGZpZWxkKCfQmtC-0L_QuNGA0LDQudGCJywgJ2Zvb3Rlci5jb3B5JywgY2ZnLmZvb3Rlci5jb3B5KTsKICBjZmcuZm9vdGVyLnNvY2lhbHMuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cGYtY2FyZCI-PGg0PtCh0L7RhtGB0LXRgtGMICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6cGYtcm93Ij4nICsKICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAnZm9vdGVyLnNvY2lhbHMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdmb290ZXIuc29jaWFscy4nICsgaSArICcuaHJlZicsIHMuaHJlZikgKyAnPC9kaXY-PC9kaXY-JzsKICB9KTsKICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enBmLXNlYyI-PHN1bW1hcnk-0JTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cGYtaW4iPicgKwogICAgJzxwIGNsYXNzPSJhdnpwZi1ub3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAxMnB4Ij7QndCw0LfQstCw0L3QuNGPLCDQsNC00YDQtdGB0LAg0Lgg0LrQsNGA0YLQuNC90LrQuCDRgNCw0LfQtNC10LvQvtCyINCyINGA0LDQt9C80LXRgtC60LUgJyArCiAgICAn0L_QvtC00YHRgtCw0LLQu9GP0Y7RgtGB0Y8g0LjQtyDQv9C70LjRgtC-0Log0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguINCX0LTQtdGB0Ywg4oCUINGC0L7Qu9GM0LrQviDQt9Cw0LPQvtC70L7QstC-0Log0Lgg0L7Qv9C40YHQsNC90LjQtSDQstGB0LXQuSDRgdGC0YDQsNC90LjRhtGLLjwvcD4nICsKICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLm5hbWUnLCBjZmcuc2VvLm5hbWUpICsKICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLmRlc2NyaXB0aW9uJywgY2ZnLnNlby5kZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enBmLWZvb3QiPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enBmLWIgcCIgaWQ9ImF2enBmLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enBmLWIiIGlkPSJhdnpwZi10ZXN0Ij7Qn9GA0L7QstC10YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Lo8L2J1dHRvbj4nICsKICAgICc8c3BhbiBpZD0iYXZ6cGYtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpwZi1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpwZi1yb290JzsKICByb290LmlubmVySFRNTCA9IGg7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsgc2NydWIoZS50YXJnZXQpOyB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNjcnViKGVsKTsgfSwgMCk7CiAgICB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhJyksIG4gPSAwLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSBuICs9IHNjcnViKGVsc1tpXSk7CiAgICAgIGlmIChuKSBjb25zb2xlLndhcm4oJ0FWWjog0YPQsdGA0LDQvdGLINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyDRgNC10LTQsNC60YLQvtGA0LAsINC_0L7Qu9C10Lk6ICcgKyBuKTsKICAgIH0sIHRydWUpOwogIH0pKCk7CgoKICB2YXIgYm94ID0gcm9vdDsKICBmdW5jdGlvbiBtc2cocykgeyBib3gucXVlcnlTZWxlY3RvcignI2F2enBmLW1zZycpLnRleHRDb250ZW50ID0gczsgfQogIGJveC5xdWVyeVNlbGVjdG9yKCcjYXZ6cGYtY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwoKICAvKiAtLS0tLS0tLS0tINC_0YDQtdCy0YzRjiDQv9C-INCy0LLQvtC00YMgVVJMIC0tLS0tLS0tLS0gKi8KICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgIHZhciBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgIGlmICghcCkgcmV0dXJuOwogICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICBpZiAocHJldikgeyBwcmV2LmNsYXNzTGlzdC5yZW1vdmUoJ2JhZCcpOyBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOyB9CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0g0LLRi9Cx0L7RgCDQutCw0LTRgNCwINGB0L4g0YHRgtGA0LDQvdC40YbRiyDRgNCw0LfQtNC10LvQsCAtLS0tLS0tLS0tICovCgogIHZhciBzaG90Q2FjaGUgPSB7fTsKCiAgZnVuY3Rpb24gc2hvdHNGcm9tKHVybCkgewogICAgaWYgKHNob3RDYWNoZVt1cmxdKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNob3RDYWNoZVt1cmxdKTsKICAgIHJldHVybiBmZXRjaCh1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA-IC0xID8gJyYnIDogJz8nKSArICd0PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAudGhlbihmdW5jdGlvbiAoaHRtbCkgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgc2VlbiA9IHt9LCBvdXQgPSBbXTsKICAgICAgICBhbGwoZG9jLCAnaW1nJykuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHsKICAgICAgICAgIHZhciBzZXQgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCAnJzsKICAgICAgICAgIHZhciBzcmMgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSB8fCAnJzsKICAgICAgICAgIGlmIChzZXQuaW5kZXhPZignaS53Zm9saW8ucnUnKSA8IDAgJiYgc3JjLmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwKSByZXR1cm47CiAgICAgICAgICB2YXIgcGFpciA9IGZyb21TcmNzZXQoc2V0LCBzcmMpOwogICAgICAgICAgaWYgKCFwYWlyLmZ1bGwgfHwgc2VlbltwYWlyLmZ1bGxdKSByZXR1cm47CiAgICAgICAgICBzZWVuW3BhaXIuZnVsbF0gPSAxOwogICAgICAgICAgb3V0LnB1c2gocGFpcik7CiAgICAgICAgfSk7CiAgICAgICAgc2hvdENhY2hlW3VybF0gPSBvdXQ7CiAgICAgICAgcmV0dXJuIG91dDsKICAgICAgfSk7CiAgfQoKICBmdW5jdGlvbiBmcm9tU3Jjc2V0KHNldCwgc3JjKSB7CiAgICBpZiAoIXNldCkgewogICAgICB2YXIgdSA9IGFicyhzcmMpOwogICAgICByZXR1cm4geyBmdWxsOiB1LCBzbWFsbDogdSB9OwogICAgfQogICAgdmFyIGxpc3QgPSBzZXQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHgpIHsKICAgICAgdmFyIHAgPSB4LnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgIHJldHVybiB7IHU6IGFicyhwWzBdKSwgdzogcGFyc2VJbnQocFsxXSwgMTApIHx8IDAgfTsKICAgIH0pLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC51OyB9KTsKICAgIGlmICghbGlzdC5sZW5ndGgpIHsgdmFyIHYgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdiwgc21hbGw6IHYgfTsgfQogICAgdmFyIGJpZyA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLncgLSBhLnc7IH0pOwogICAgdmFyIHNtYWxsID0gbGlzdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEudyAtIGIudzsgfSk7CiAgICByZXR1cm4gewogICAgICBmdWxsOiAoYmlnLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53IDw9IE1BWFc7IH0pWzBdIHx8IGJpZ1tiaWcubGVuZ3RoIC0gMV0pLnUsCiAgICAgIHNtYWxsOiAoc21hbGwuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLncgPj0gMjgwOyB9KVswXSB8fCBzbWFsbFswXSkudQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGFicyh1KSB7CiAgICBpZiAoIXUpIHJldHVybiAnJzsKICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICBpZiAodS5pbmRleE9mKCcvJykgPT09IDApIHJldHVybiBsb2NhdGlvbi5vcmlnaW4gKyB1OwogICAgcmV0dXJuIHU7CiAgfQoKICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgIHZhciBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlICYmIGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jaG9vc2UnKTsKICAgIGlmICghcCkgcmV0dXJuOwogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgIC8qINCw0LTRgNC10YEg0LHQtdGA0ZHQvCDQuNC3INC_0L7Qu9GPINGB0YHRi9C70LrQuCwg0LAg0L3QtSDQuNC3INC40YHRhdC-0LTQvdC-0LPQviDQutC-0L3RhNC40LPQsDoKICAgICAgINC10YHQu9C4INC_0LvQuNGC0LrRgyDRgtC-0LvRjNC60L4g0YfRgtC-INC_0LXRgNC10L3QsNC_0YDQsNCy0LjQu9C4LCDQutCw0LTRgNGLINC90YPQttC90Ysg0YEg0L3QvtCy0L7QuSDRgdGC0YDQsNC90LjRhtGLICovCiAgICB2YXIgaWR4ID0gcC5zcGxpdCgnLicpWzFdOwogICAgdmFyIGhyZWZJbnB1dCA9IHJvb3QucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS1wPSJ0aWxlcy4nICsgaWR4ICsgJy5ocmVmIl0nKTsKICAgIHZhciB1cmwgPSAoaHJlZklucHV0ICYmIGhyZWZJbnB1dC52YWx1ZS50cmltKCkpIHx8IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1mcm9tJyk7CiAgICBpZiAoIXVybCkgeyBtc2coJ9CjINC_0LvQuNGC0LrQuCDQvdC1INGD0LrQsNC30LDQvdCwINGB0YHRi9C70LrQsCDigJQg0LLRi9Cx0LjRgNCw0YLRjCDQvdC1INC40Lcg0YfQtdCz0L4uJyk7IHJldHVybjsgfQoKICAgIHZhciBwYW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6OCU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7JyArCiAgICAgICdwYWRkaW5nOjE2cHg7b3ZlcmZsb3c6YXV0bztib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjQpJzsKICAgIHBhbmUuaW5uZXJIVE1MID0gJzxwIHN0eWxlPSJtYXJnaW46MCAwIDEwcHgiPtCX0LDQs9GA0YPQttCw0Y4g0YHQvdC40LzQutC4INGB0L4g0YHRgtGA0LDQvdC40YbRiyAnICsgZXNjKHVybCkgKyAn4oCmPC9wPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6cGYtZ3JpZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI-PC9kaXY-JzsKICAgIHZhciBjbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgY2xvc2VCdG4uY2xhc3NOYW1lID0gJ2F2enBmLWInOwogICAgY2xvc2VCdG4udGV4dENvbnRlbnQgPSAn0J7RgtC80LXQvdCwJzsKICAgIGNsb3NlQnRuLnN0eWxlLm1hcmdpblRvcCA9ICcxMnB4JzsKICAgIGNsb3NlQnRuLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHBhbmUucmVtb3ZlKCk7IH07CiAgICBwYW5lLmFwcGVuZENoaWxkKGNsb3NlQnRuKTsKICAgIHJvb3QuYXBwZW5kQ2hpbGQocGFuZSk7CgogICAgc2hvdHNGcm9tKHVybCkudGhlbihmdW5jdGlvbiAoc2hvdHMpIHsKICAgICAgdmFyIGhlYWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKTsKICAgICAgdmFyIGdyaWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJy5hdnpwZi1ncmlkJyk7CiAgICAgIGlmICghc2hvdHMubGVuZ3RoKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0J3QsCDRgdGC0YDQsNC90LjRhtC1ICcgKyB1cmwgKyAnINGB0L3QuNC80LrQvtCyINC90LUg0L3QsNGI0LvQvtGB0YwuINCS0YHRgtCw0LLRjNGC0LUg0LDQtNGA0LXRgSDQstGA0YPRh9C90YPRji4nOyByZXR1cm47IH0KICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQktGL0LHQtdGA0LjRgtC1INGB0L3QuNC80L7QuiAoJyArIHNob3RzLmxlbmd0aCArICcpJzsKICAgICAgZ3JpZC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgIHNob3RzLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWd1cmUnKTsKICAgICAgICB2YXIgaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICBpbS5zcmMgPSBpdC5zbWFsbDsKICAgICAgICBpbS5sb2FkaW5nID0gJ2xhenknOwogICAgICAgIGYuYXBwZW5kQ2hpbGQoaW0pOwogICAgICAgIGYub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBpbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0iJyArIHAgKyAnIl0nKTsKICAgICAgICAgIGlucC52YWx1ZSA9IGl0LmZ1bGw7CiAgICAgICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgICAgIGlmIChwcmV2KSB7IHByZXYuY2xhc3NMaXN0LnJlbW92ZSgnYmFkJyk7IHByZXYuc3JjID0gaXQuZnVsbDsgfQogICAgICAgICAgcGFuZS5yZW1vdmUoKTsKICAgICAgICB9OwogICAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoZik7CiAgICAgIH0pOwogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikgewogICAgICBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKS50ZXh0Q29udGVudCA9ICfQodGC0YDQsNC90LjRhtCwICcgKyB1cmwgKyAnINC90LUg0L7RgtC60YDRi9C70LDRgdGMOiAnICsgZXJyLm1lc3NhZ2UgKwogICAgICAgICcuINCS0YHRgtCw0LLRjNGC0LUg0LDQtNGA0LXRgSDRgdC90LjQvNC60LAg0LLRgNGD0YfQvdGD0Y4uJzsKICAgIH0pOwogIH0pOwoKICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAINC30L3QsNGH0LXQvdC40Lkg0LjQtyDRhNC-0YDQvNGLIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgfQoKICBmdW5jdGlvbiBjb2xsZWN0KCkgewogICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgIHNldFBhdGgoZGF0YSwgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKSwgZWwudmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMINC30L3QsNGH0LXQvdC40Lkg0LIg0YDQsNC30LzQtdGC0LrRgyAtLS0tLS0tLS0tCiAgICAg0JzQtdC20LTRgyDRjdC70LXQvNC10L3RgtC-0Lwg0Lgg0YLQtdC60YHRgtC-0LLRi9C8INGD0LfQu9C-0Lwg0LIg0YDQsNC30LzQtdGC0LrQtSDRgdGC0L7QuNGCINC_0YDQvtCx0LXQuywKICAgICDQsCB0ZXh0Q29udGVudCDQvtGC0LTQsNGR0YIg0YLQtdC60YHRgiDQvtCx0YDQtdC30LDQvdC90YvQvC4g0J_QvtGN0YLQvtC80YMg0YLQtdC60YHRgiDQv9C40YjQtdC8INGC0LDQuiwKICAgICDRh9GC0L7QsdGLINGB0LvRg9C20LXQsdC90YvQtSDRjdC70LXQvNC10L3RgtGLICgudmgsIC5hcnIpINGD0YbQtdC70LXQu9C4LCDQsCDQv9GA0L7QsdC10Lsg0LLQtdGA0L3Rg9C70YHRjy4gKi8KCiAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgaWYgKCFlbCB8fCB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgIHZhciBrZWVwID0gW10uc2xpY2UuY2FsbChlbC5jaGlsZHJlbik7CiAgICBlbC50ZXh0Q29udGVudCA9IHY7CiAgICBrZWVwLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSk7CiAgICAgIGVsLmFwcGVuZENoaWxkKGspOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBzZXRQbGFpbihlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC50ZXh0Q29udGVudCA9IHY7IH0KCiAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgIC8qINGI0LDQv9C60LAgKi8KICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgIGlmIChsaW5lc1sxXSkgc2V0UGxhaW4ob25lKGxpbmVzWzFdLCAnZW0nKSB8fCBsaW5lc1sxXSwgZC5oZXJvLmxpbmUyKTsKICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5sZWRlJyksIGQubGVkZSk7CiAgICBzZXRQbGFpbihvbmUoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCBoMicpLCBkLnNlY3Rpb25MYWJlbCk7CgogICAgLyog0L_Qu9C40YLQutC4ICovCiAgICBhbGwoc2NvcGUsICcuYmVudG8gLmNlbGwnKS5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgIHZhciB0bCA9IGQudGlsZXNbaV07CiAgICAgIGlmICghdGwpIHJldHVybjsKICAgICAgaWYgKHRsLmhyZWYpIGMuc2V0QXR0cmlidXRlKCdocmVmJywgdGwuaHJlZik7CiAgICAgIHNldFBsYWluKG9uZShjLCAnLmNhcCBoMycpLCB0bC50aXRsZSk7CiAgICAgIHNldFBsYWluKG9uZShjLCAnLmNhcCBzcGFuJyksIHRsLmNhcHRpb24pOwogICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpOwogICAgICBpZiAoaW0pIHsKICAgICAgICBpZiAodGwuaW1nKSB7CiAgICAgICAgICBpbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRsLmltZyk7CiAgICAgICAgICAvKiBzcmNzZXQg0LjQtyDRiNCw0LHQu9C-0L3QsCB3Zm9saW8g0L_QtdGA0LXQsdC40Lsg0LHRiyDQvdCw0Yggc3JjICovCiAgICAgICAgICBpbS5yZW1vdmVBdHRyaWJ1dGUoJ3NyY3NldCcpOwogICAgICAgICAgaW0ucmVtb3ZlQXR0cmlidXRlKCdzaXplcycpOwogICAgICAgIH0KICAgICAgICBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHRsLmFsdCk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8qINC_0YDQuNC30YvQsiAqLwogICAgdmFyIGN0YVRpdGxlID0gb25lKHNjb3BlLCAnLmN0YSAuaDInKTsKICAgIGlmIChjdGFUaXRsZSAmJiB0eXBlb2YgZC5jdGEudGl0bGUgPT09ICdzdHJpbmcnKSBjdGFUaXRsZS5pbm5lckhUTUwgPSBkLmN0YS50aXRsZTsKICAgIGFsbChzY29wZSwgJy5jdGEgLmJ0bnMgLmJ0bicpLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgdmFyIGJ0ID0gZC5jdGEuYnV0dG9uc1tpXTsKICAgICAgaWYgKCFidCkgcmV0dXJuOwogICAgICBpZiAoYnQuaHJlZikgYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBidC5ocmVmKTsKICAgICAgLyog0LIg0LrQvdC-0L_QutC1INC00LLQtSDQutC-0L_QuNC4INGC0LXQutGB0YLQsCDigJQg0LLRgtC-0YDQsNGPINC00LvRjyBob3Zlci3QsNC90LjQvNCw0YbQuNC4ICovCiAgICAgIGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7IHNldFBsYWluKHMsIGJ0LnRleHQpOyB9KTsKICAgIH0pOwoKICAgIC8qINGE0YPRgtC10YAgKi8KICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5mb290ZXIgLmNvcHknKSwgZC5mb290ZXIuY29weSk7CiAgICBhbGwoc2NvcGUsICcuc29jaWFscyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICB2YXIgcyA9IGQuZm9vdGVyLnNvY2lhbHNbaV07CiAgICAgIGlmICghcykgcmV0dXJuOwogICAgICBzZXRQbGFpbihhLCBzLmxhYmVsKTsKICAgICAgaWYgKHMuaHJlZikgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBzLmhyZWYpOwogICAgfSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LIgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBidWlsZExkKGRvYywgZCkgewogICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJyB9OwoKICAgIHZhciBvOwogICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlIH07IH0KCiAgICB2YXIgZ3JhcGggPSBvWydAZ3JhcGgnXSB8fCBbXTsKICAgIHN5bmNDYW5vbihncmFwaCk7CiAgICB2YXIgcGFnZSA9IGdyYXBoLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjcGFnZScpID4gLTE7IH0pWzBdOwogICAgaWYgKCFwYWdlKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiBsZCtqc29uINC90LUg0L3QsNC50LTQtdC9INGD0LfQtdC7INGB0YLRgNCw0L3QuNGG0YsnIH07CgogICAgaWYgKGQuc2VvLm5hbWUpIHBhZ2UubmFtZSA9IGQuc2VvLm5hbWU7CiAgICBpZiAoZC5zZW8uZGVzY3JpcHRpb24pIHBhZ2UuZGVzY3JpcHRpb24gPSBkLnNlby5kZXNjcmlwdGlvbjsKCiAgICAvKiDRgNCw0LfQtNC10LvRiyDQv9C10YDQtdGB0L7QsdC40YDQsNC10Lwg0LjQtyDQv9C70LjRgtC-0Lo6INC40LzRjywg0LDQtNGA0LXRgSDQuCDQutCw0YDRgtC40L3QutCwINCy0YHQtdCz0LTQsAogICAgICAg0YHQvtCy0L_QsNC00LDRjtGCINGBINGC0LXQvCwg0YfRgtC-INCy0LjQtNC40YIg0YfQtdC70L7QstC10LouINCi0LjQvyDRg9C30LvQsCDRgdC-0YXRgNCw0L3Rj9C10LwuICovCiAgICB2YXIgcGFydHMgPSBBcnJheS5pc0FycmF5KHBhZ2UuaGFzUGFydCkgPyBwYWdlLmhhc1BhcnQgOiBbXTsKICAgIHBhZ2UuaGFzUGFydCA9IGQudGlsZXMubWFwKGZ1bmN0aW9uICh0bCwgaSkgewogICAgICB2YXIgc3JjID0gcGFydHNbaV0gfHwge307CiAgICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzogc3JjWydAdHlwZSddIHx8ICdJbWFnZUdhbGxlcnknLAogICAgICAgIG5hbWU6IHRsLnNlb05hbWUgfHwgdGwudGl0bGUsCiAgICAgICAgdXJsOiB0bC5ocmVmLAogICAgICAgIGltYWdlOiB0bC5pbWcKICAgICAgfTsKICAgIH0pOwoKICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICAvKiDQodGC0YDQvtC60LggaGVhZCDigJQg0YDQvtCy0L3QviDRgtC1LCDRh9GC0L4g0YHRgtC-0Y_RgiDQsiDQsdC70L7QutC1IC9wb3J0Zm9saW8uCiAgICAg0J3QsCDQv9GA0LDQudGB0LUg0LjRhSDQvdCw0LHQvtGAINC00YDRg9Cz0L7QuTsg0LLRi9C00YPQvNGL0LLQsNGC0Ywg0LvQuNGI0L3QuNC1INC90LXQu9GM0LfRjy4gKi8KICBmdW5jdGlvbiBoZWFkTGluZXMoZG9jKSB7CiAgICB2YXIgZm9udExpbmsgPSBkb2MucXVlcnlTZWxlY3RvcignbGlua1tocmVmKj0iY3NzMj9mYW1pbHk9Il0nKTsKICAgIHJldHVybiBbCiAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20iPicsCiAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPicsCiAgICAgIEFWWl9GT05UX0xJTksKICAgIF07CiAgfQoKICAvKiDQmtC-0LzQvNC10L3RgtCw0YDQuNC4INCyINC90LDRh9Cw0LvQtSDQsdC70L7QutCwINC-0LHRitGP0YHQvdGP0Y7Rgiwg0YfRgtC-INGN0YLQviDQt9CwINC60L7QtCDQuCDQv9C-0YfQtdC80YMg0L7QvQogICAgINGC0LDQutC-0LkuINCi0LXRgNGP0YLRjCDQuNGFINC_0YDQuCDQv9C10YDQtdGB0LHQvtGA0LrQtSDQvdC10LvRjNC30Y8uICovCiAgZnVuY3Rpb24gY29tbWVudHMoZG9jKSB7CiAgICB2YXIgb3V0ID0gW107CiAgICB2YXIgdyA9IGRvYy5jcmVhdGVUcmVlV2Fsa2VyKGRvYy5ib2R5LCAxMjggLyogU0hPV19DT01NRU5UICovLCBudWxsLCBmYWxzZSk7CiAgICB2YXIgbjsKICAgIHdoaWxlICgobiA9IHcubmV4dE5vZGUoKSkpIHsKICAgICAgdmFyIHYgPSBuLm5vZGVWYWx1ZSB8fCAnJzsKICAgICAgaWYgKHYuaW5kZXhPZignQVZBTlpBVE8uUlUnKSA-IC0xIHx8IHYuaW5kZXhPZign0J_RgNC10LTQt9Cw0LPRgNGD0LfQutCwJykgPiAtMSkgewogICAgICAgIG91dC5wdXNoKCc8IS0tJyArIHYgKyAnLS0-Jyk7CiAgICAgICAgaWYgKHYuaW5kZXhPZignQVZBTlpBVE8uUlUnKSA-IC0xKSBvdXQucHVzaCgnJyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKGh0bWwpIHsKICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpOwoKICAgICAgdmFyIHNjb3BlID0gZG9jLmdldEVsZW1lbnRCeUlkKCdhdnonKTsKICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignI2F2eiAuYmVudG8nKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdpbml0UmV2ZWFsJykgPiAtMTsKICAgICAgfSlbMF07CiAgICAgIHZhciBoZWFkID0gaGVhZExpbmVzKGRvYyk7CgogICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6ICNhdnonKTsKICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgnPHNjcmlwdD4g0LDQvdC40LzQsNGG0LjQuScpOwogICAgICBpZiAoIWhlYWQpIG1pc3NpbmcucHVzaCgnPGxpbms-INGI0YDQuNGE0YLQvtCyJyk7CiAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LUg0L3QsNC50LTQtdC90L46ICcgKyBtaXNzaW5nLmpvaW4oJywgJykpOwoKICAgICAgd3JpdGVBbGwoc2NvcGUsIGQpOwogICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgZCk7CiAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICByZXR1cm4gY29tbWVudHMoZG9jKS5jb25jYXQoaGVhZCkuY29uY2F0KFsKICAgICAgICAnJywKICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgc2NvcGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgIHNjcmlwdC5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICBsZC50ZXh0LAogICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgXSkuam9pbignXG4nKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICB2YXIgdGEgPSBib3gucXVlcnlTZWxlY3RvcignI2F2enBmLW91dCcpOwogICAgdGEudmFsdWUgPSB0ZXh0OwogICAgdGEuc2VsZWN0KCk7CiAgICB2YXIgb2sgPSBmYWxzZTsKICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogIH0KCiAgYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwZi1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgYXNzZW1ibGUoY29sbGVjdCgpKS50aGVuKGZ1bmN0aW9uIChvdXQpIHsKICAgICAgY29weShvdXQsICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIG91dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiAvcG9ydGZvbGlvINC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLicpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgfTsKCiAgLyog0J_RgNC-0LLQtdGA0LrQsDog0YHQvtCx0YDQsNGC0Ywg0LHQtdC3INC10LTQuNC90L7QuSDQv9GA0LDQstC60LgsINGA0LDQt9C-0LHRgNCw0YLRjCDRgNC10LfRg9C70YzRgtCw0YIg0L7QsdGA0LDRgtC90L4KICAgICDQuCDRgdCy0LXRgNC40YLRjCDRgSDQuNGB0YXQvtC00L3QuNC60L7QvC4g0JvQvtCy0LjRgiDQv9C-0YLQtdGA0Y4g0L_RgNC-0LHQtdC70L7QsiDQuCDRgNCw0YHRhdC-0LbQtNC10L3QuNC1CiAgICAg0YHQtdC70LXQutGC0L7RgNC-0LIg0L_QvtGB0LvQtSDQv9GA0LDQstC-0Log0LTQuNC30LDQudC90LAuICovCiAgYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwZi10ZXN0Jykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgYXNzZW1ibGUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKSkudGhlbihmdW5jdGlvbiAob3V0KSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKG91dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6JykpOwogICAgICBhZ2Fpbi5zZW8gPSBjZmcuc2VvOwogICAgICAvKiBzZW9OYW1lINC20LjQstGR0YIg0LIgbGQranNvbiwg0LAg0L3QtSDQsiDRgNCw0LfQvNC10YLQutC1IOKAlCDRgdCy0LXRgNGP0LXQvCDRgtC-0LvRjNC60L4g0LLRkdGA0YHRgtC60YMgKi8KICAgICAgYWdhaW4udGlsZXMuZm9yRWFjaChmdW5jdGlvbiAodGwsIGkpIHsgdGwuc2VvTmFtZSA9IGNmZy50aWxlc1tpXS5zZW9OYW1lOyB9KTsKICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShjZmcpLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICBpZiAoYSA9PT0gYikgewogICAgICAgIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyBvdXQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgfQogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgfTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0L_QvtGA0YLRhNC-0LvQuNC-INC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJyZXBvcnQiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0YDQtdC_0L7RgNGC0LDQttC10LkiLHNob3J0OiLQoNC10L_QvtGA0YLQsNC20LgiLGhpbnQ6ItGB0L7QsdGL0YLQuNGPLCDRhdGA0L7QvdC40LrQsCwg0YbQtdC90YssINCy0L7Qv9GA0L7RgdGLIOKAlCDQv9C70Y7RgSDQv9C-0LTRgtGP0LPQuNCy0LDQvdC40LUg0LjQtyDRgNCw0LfQtNC10LvQsCIscGFnZXM6WyIvcmVwb3J0YXpobnl5LWZvdG9ncmFmLXYta2F6YW5pLWFudG9uLWF2YW56YXRvIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCh0KLQoNCQ0J3QmNCm0Ksg0KDQldCf0J7QoNCi0JDQltCV0JkgIHYxIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwIC9yZXBvcnRhemhueXktZm90b2dyYWYtdi1rYXphbmktYW50b24tYXZhbnphdG8KCiAgINCh0YXQtdC80LAg0L_RgNCw0LnRgdCwINC4INC_0L7RgNGC0YTQvtC70LjQvjog0YfQuNGC0LDQtdGCINC20LjQstGD0Y4g0YHRgtGA0LDQvdC40YbRgywg0L_QvtC00YHRgtCw0LLQu9GP0LXRggogICDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiywg0LLRi9C00LDRkdGCINCy0LXRgdGMINCx0LvQvtC6INGG0LXQu9C40LrQvtC8LgoKICAg0J7RgtC70LjRh9C40LUg0L7RgiDQtNGA0YPQs9C40YUg0YHRgtGA0LDQvdC40YY6INC30LTQtdGB0Ywg0LXRgdGC0Ywg0LrQvdC-0L_QutCwIMKr0J_QvtC00YLRj9C90YPRgtGMINGB0L7QsdGL0YLQuNGPwrsKICAg4oCUINC_0LDQvdC10LvRjCDRgdGA0LDQstC90LjQstCw0LXRgiDRgNCw0LfQtNC10LsgL3JlcG9ydGF6aG55ZS1mb3Rvc2Vzc2lpINGBINC60LDRgNGC0L7Rh9C60LDQvNC4CiAgINC90LAg0YHRgtGA0LDQvdC40YbQtSDQuCDQtNC-0L_QuNGB0YvQstCw0LXRgiDQvdC10LTQvtGB0YLQsNGO0YnQuNC1INCyINC60L7QvdC10YYg0YHQtdGC0LrQuCwg0LIg0YLQvtC5INC20LUKICAg0LLRkdGA0YHRgtC60LUg0Lgg0YEg0YLQtdC8INC20LUg0YDQuNGC0LzQvtC8INC_0L7Rj9Cy0LvQtdC90LjRjy4KCiAgINCn0YLQviDRgdC40L3RhdGA0L7QvdC40LfQuNGA0YPQtdGC0YHRjyDRgdCw0LzQvjoKICAgICDQutCw0YDRgtC-0YfQutC4IOKGkiBudW1iZXJPZkl0ZW1zINC4IGl0ZW1MaXN0RWxlbWVudCDQsiBsZCtqc29uCiAgICAg0LLQvtC_0YDQvtGB0YsgRkFRIOKGkiDQstC40LTQuNC80YvQuSDQsdC70L7QuiDQuCBGQVFQYWdlCiAgICAg0LfQsNCz0L7Qu9C-0LLQvtC6INC4INC-0L_QuNGB0LDQvdC40LUg4oaSIGluaXRNZXRhINC4IGxkK2pzb24KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiDQodGB0YvQu9C60LAg0L3QsCDRiNGA0LjRhNGC0Ysg0LHQu9C-0LrQsCDigJQg0LrQvtC90YHRgtCw0L3RgtCwLCDQsCDQvdC1INGC0L4sINGH0YLQviDQvdCw0YjQu9C-0YHRjCDQvdCwINGB0YLRgNCw0L3QuNGG0LUuCiAgICAg0JIgPGhlYWQ-IHdmb2xpbyDRgdCy0L7RjyDRgdGB0YvQu9C60LAg0L3QsCBKb3N0L1J1YmlrINC-0YIg0YLQtdC80YssINC4INC-0L3QsCDRgdGC0L7QuNGCINCg0JDQndCs0KjQlQogICAgINC90LDRiNC10Lk6INC_0LDQvdC10LvRjCDQsdGA0LDQu9CwINC_0LXRgNCy0YPRjiDQv9C-0LTRhdC-0LTRj9GJ0YPRjiDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC-0Lkg0L_QvtC00LzQtdC90Y_Qu9CwCiAgICAg0L3QsNGH0LXRgNGC0LDQvdC40Y8g0LHQu9C-0LrQsCDQvdCwINGC0LXQvNC40L3Riy4g0J3QsNCx0L7RgCDQstC10YHQvtCyINC30LDQtNCw0L0gQ1NTINCx0LvQvtC60LAsINC_0L7RjdGC0L7QvNGDCiAgICAg0LTQtdGA0LbQuNC8INC10LPQviDQt9C00LXRgdGMLiDQnNC10L3Rj9C10YLRgdGPINC00LjQt9Cw0LnQvSDigJQg0LzQtdC90Y_QtdGC0YHRjyDRjdGC0LAg0YHRgtGA0L7QutCwLiAqLwogIHZhciBBVlpfRk9OVF9MSU5LID0gJzxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9Sm9zdDp3Z2h0QDIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICcmYW1wO2ZhbWlseT1SdWJpazp3Z2h0QDEwMDsyMDA7MzAwJmFtcDtkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI-JzsKCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0KPQt9C70YsgI3Bob3RvZ3JhcGhlciwgI2J1c2luZXNzINC4ICN3ZWJzaXRlINC-0L_QuNGB0YvQstCw0Y7RgiDQvtC00L3QvtCz0L4g0Lgg0YLQvtCz0L4g0LbQtQogICAgINGH0LXQu9C-0LLQtdC60LAsINC-0LTQvdC-INC00LXQu9C-INC4INC-0LTQuNC9INGB0LDQudGCLiDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuQogICAgINC_0L4t0YDQsNC30L3QvtC80YMg0L3QsCDRgNCw0LfQvdGL0YUg0YHRgtGA0LDQvdC40YbQsNGFLCDigJQg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQugogICAgINC4INCY0Jgg0LLRi9Cx0LjRgNCw0Y7RgiDRgdCw0LzQuCwg0LrQsNC60L7QuSDQstC10YDRgdC40Lgg0LLQtdGA0LjRgtGMLCDQuCDQvdCw0LPRgNCw0LTRiyDQvNC-0LPRg9GCINC_0YDQvtGB0YLQvgogICAgINC90LUg0LfQsNGB0YfQuNGC0LDRgtGM0YHRjy4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0LjRhSDQuiDRjdGC0LDQu9C-0L3RgyDQv9GA0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQtSwKICAgICDQv9C-0Y3RgtC-0LzRgyDRgNCw0YHRhdC-0LTQuNGC0YzRgdGPINC40Lwg0LHQvtC70YzRiNC1INC90LXRh9C10LwuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAyNCDQsNCy0LPRg9GB0YLQsCAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTkiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogItC-0YIgMTQgOTAwIOKCvSIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enItcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIGxpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6LXJlcCcpOwogIGlmICghbGl2ZSkgeyBhbGVydCgnQVZaOiDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0L3QtdGCINCx0LvQvtC60LAgI2F2ei1yZXAnKTsgcmV0dXJuOyB9CgogIHZhciBMSVNUSU5HID0gJy9yZXBvcnRhemhueWUtZm90b3Nlc3NpaSc7CiAgdmFyIENBUF9TVFVCID0gJ9Cg0LXQv9C-0YDRgtCw0LYgwrcg0JrQsNC30LDQvdGMJzsKCiAgLyogLS0tLS0tLS0tLSDRg9GC0LjQu9C40YLRiyAtLS0tLS0tLS0tICovCgogIC8qINCh0YHRi9C70LrQsCDQutCw0YDRgtC-0YfQutC4INC70LjRgdGC0LjQvdCz0LA6INC90LAg0LTQtdGB0LrRgtC-0L_QtSDQvtC90LAg0LLQu9C-0LbQtdC90LAg0LIgLmxpc3RpbmctaXRlbSwKICAgICDQvNC-0LHQuNC70YzQvdGL0Lwgd2ZvbGlvINC-0YLQtNCw0ZHRgiAubGlzdGluZy1pdGVtINGD0LbQtSDRgdCw0LzQvtC5INGB0YHRi9C70LrQvtC5LiBxdWVyeVNlbGVjdG9yCiAgICAg0YHQvNC-0YLRgNC40YIg0YLQvtC70YzQutC-INCy0L3Rg9GC0YDRjCDRjdC70LXQvNC10L3RgtCwIOKAlCDQsdC10Lcg0Y3RgtC-0Lkg0L_RgNC-0LLQtdGA0LrQuCDRgSDRgtC10LvQtdGE0L7QvdCwCiAgICAg0L_QvtC00YLRj9Cz0LjQstCw0LvQvtGB0Ywg0L3QvtC70Ywg0YDQsNCx0L7Rgi4gKi8KICBmdW5jdGlvbiBpdGVtTGluayhpdCkgewogICAgaWYgKCFpdCkgcmV0dXJuIG51bGw7CiAgICBpZiAoaXQudGFnTmFtZSA9PT0gJ0EnICYmIGl0LmdldEF0dHJpYnV0ZSgnaHJlZicpKSByZXR1cm4gaXQ7CiAgICByZXR1cm4gb25lKGl0LCAnYVtocmVmXScpOwogIH0KCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICAvKiBpbm5lckhUTUwg0LHQtdGA0ZHQvCDQutCw0Log0LXRgdGC0YwsINCx0LXQtyDQvtCx0YDQtdC30LrQuDog0LLQvdGD0YLRgNC4IC5mYXEtYS1pbm5lcgogICAgINGB0YLQvtGP0YIg0L_QtdGA0LXQvdC-0YHRiyDQuCDQvtGC0YHRgtGD0L_Riywg0Lgg0LXRgdC70Lgg0LjRhSDRgdGA0LXQt9Cw0YLRjCwg0YDQsNC30LzQtdGC0LrQsCDQv9C10YDQtdGB0YLQsNC90LXRggogICAgINGB0L7QstC_0LDQtNCw0YLRjCDRgSDQuNGB0YXQvtC00L3QvtC5LiDQndCwINCy0LjQtCDRjdGC0L4g0L3QtSDQstC70LjRj9C10YIsINC90L4g0LvQvtC80LDQtdGCINC_0YDQvtCy0LXRgNC60YMuICovCiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIHNlYyhzY29wZSwgbmFtZSkgeyByZXR1cm4gb25lKHNjb3BlLCAnc2VjdGlvbi4nICsgbmFtZSk7IH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIHByaWNlID0gb25lKHNjb3BlLCAnLmxlZGUtcHJpY2UnKTsKICAgIHZhciBjaHJvbiA9IHNlYyhzY29wZSwgJ2Nocm9uaWNsZScpOwogICAgdmFyIGNhc2VzID0gc2VjKHNjb3BlLCAnY2FzZXMnKTsKICAgIHZhciBtZXRoID0gc2VjKHNjb3BlLCAnbWV0aG9kJyk7CiAgICB2YXIgcHJpYyA9IHNlYyhzY29wZSwgJ3ByaWNpbmcnKTsKICAgIHZhciBmYXEgPSBzZWMoc2NvcGUsICdmYXEnKTsKCiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogb3duVGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChsaW5lc1swXSksCiAgICAgICAgbGluZTI6IHQobGluZXNbMV0pLAogICAgICAgIGxpbmUzOiBsaW5lc1syXSA_IHQob25lKGxpbmVzWzJdLCAnZW0nKSB8fCBsaW5lc1syXSkgOiAnJwogICAgICB9LAogICAgICBsZWRlOiB0KG9uZShzY29wZSwgJy5sZWRlJykpLAogICAgICBwcmljZTogeyB0ZXh0OiBwcmljZSA_IG93blRleHQocHJpY2UpIDogJycsIGhyZWY6IHByaWNlID8gKHByaWNlLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKSA6ICcnIH0sCiAgICAgIHRpY2tlcjogW10sCiAgICAgIGNocm9uOiB7CiAgICAgICAgbGFiZWw6IHQob25lKGNocm9uLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShjaHJvbiwgJy5oMicpKSwKICAgICAgICBub3RlOiBodG1sKG9uZShjaHJvbiwgJy5jaHJvbi1ub3RlJykpLAogICAgICAgIHNvdXJjZTogaHRtbChvbmUoY2hyb24sICcuY2hyb24tc291cmNlJykpLAogICAgICAgIGl0ZW1zOiBhbGwoY2hyb24sICcuY2hyb24taXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHJldHVybiB7IG51bTogdChvbmUoaXQsICcuY2hyb24tbnVtJykpLCBjYXA6IHQob25lKGl0LCAnLmNocm9uLWNhcCcpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGNhc2VzOiB7CiAgICAgICAgbGFiZWw6IHQob25lKGNhc2VzLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShjYXNlcywgJy5oMicpKSwKICAgICAgICBpdGVtczogYWxsKGNhc2VzLCAnLmNhc2UnKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHZhciBpbSA9IG9uZShjLCAnaW1nJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBocmVmOiBjLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnLAogICAgICAgICAgICBpbWc6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJycsCiAgICAgICAgICAgIGFsdDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgdGl0bGU6IHQob25lKGMsICcuY2FwIGgzJykpLAogICAgICAgICAgICBjYXA6IHQob25lKGMsICcuY2FwIHNwYW4nKSksCiAgICAgICAgICAgIGhlcm86IGMuY2xhc3NOYW1lLmluZGV4T2YoJ2Nhc2UtaGVybycpID4gLTEsCiAgICAgICAgICAgIGlzTmV3OiBmYWxzZQogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBtZXRob2Q6IHsKICAgICAgICBsYWJlbDogdChvbmUobWV0aCwgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUobWV0aCwgJy5oMicpKSwKICAgICAgICBpdGVtczogYWxsKG1ldGgsICcubWV0aG9kLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4geyB0aXRsZTogdChvbmUoaXQsICdoMycpKSwgdGV4dDogdChvbmUoaXQsICdwJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgcHJpY2luZzogewogICAgICAgIGxhYmVsOiB0KG9uZShwcmljLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShwcmljLCAnLmgyJykpLAogICAgICAgIGZpZ3VyZTogb3duVGV4dChvbmUocHJpYywgJy5wcmljZS1maWd1cmUnKSksCiAgICAgICAgdW5pdDogdChvbmUocHJpYywgJy5wcmljZS11bml0JykpLAogICAgICAgIHRheDogdChvbmUocHJpYywgJy5wcmljZS10YXgnKSksCiAgICAgICAgaW5jbFRpdGxlOiB0KG9uZShwcmljLCAnLmluY2wtdGl0bGUnKSksCiAgICAgICAgaW5jbDogYWxsKHByaWMsICcuaW5jbCBsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIHQobGkpOyB9KQogICAgICB9LAogICAgICBmYXE6IHsKICAgICAgICBsYWJlbDogdChvbmUoZmFxLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShmYXEsICcuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChmYXEsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4geyBxOiBvd25UZXh0KG9uZShpdCwgJy5mYXEtcScpKSwgYTogaHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSksIHNjaGVtYUE6ICcnIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgY3RhOiB7CiAgICAgICAgdGl0bGU6IGh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSksCiAgICAgICAgYnV0dG9uczogYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKVswXSksIGhyZWY6IGIuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBtZXRhOiB7IHRpdGxlOiAnJywgZGVzYzogJycgfSwKICAgICAgLyog0KDQsNC30LzQtdGC0LrQsCDQvtC_0LjRgdGL0LLQsNC10YIg0YDQsNCx0L7RgtGLINGA0LDQt9Cy0ZHRgNC90YPRgtC10LUsINGH0LXQvCDQv9C-0LTQv9C40YHRjCDQv9C-0LQg0LrQsNGA0YLQvtGH0LrQvtC5OgogICAgICAgICDCq9Cg0LXQv9C-0YDRgtCw0LYg0YEg0L7RgtC60YDRi9GC0LjRjyDRjdC60YHRgtGA0LjQvC3Qv9Cw0YDQutCwINCj0YDQsNC8INCyINCa0LDQt9Cw0L3QuMK7INC_0YDQvtGC0LjQsgogICAgICAgICDCq9Ce0YLQutGA0YvRgtC40LUg0Y3QutGB0YLRgNC40Lwt0L_QsNGA0LrQsCDQo9GA0LDQvMK7LiDQlNC10YDQttC40Lwg0LjRhSDQvtGC0LTQtdC70YzQvdGL0LzQuCDQv9C-0LvRj9C80Lgg4oCUCiAgICAgICAgINC40L3QsNGH0LUg0L_QtdGA0LXRgdCx0L7RgNC60LAg0L7QsdC10LTQvdGP0LXRgiDRgNCw0LfQvNC10YLQutGDLiDQotC-0YIg0LbQtSDRg9GA0L7QuiDRg9C20LUg0LHRi9C7CiAgICAgICAgINC90LAg0L_QvtGA0YLRhNC-0LvQuNC-LCDQsdC70L7Qs9C1INC4INGB0YLRgNCw0L3QuNGG0LUg0YDQsNC30YDQsNCx0L7RgtC60Lgg0YHQsNC50YLQvtCyLiAqLwogICAgICBsZDogeyBkZXNjOiAnJyB9CiAgICB9OwogIH0KCiAgLyog0KDQsNC30LLRkdGA0L3Rg9GC0YvQtSDQvdCw0LfQstCw0L3QuNGPINGA0LDQsdC-0YIg0Lgg0L7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLIOKAlCDQuNC3INGB0LDQvNC-0Lkg0YDQsNC30LzQtdGC0LrQuC4KICAgICDQmNGJ0LXQvCDRg9C30LXQuyDQv9C-INCw0LTRgNC10YHRgywg0LrQvtGC0L7RgNGL0Lkg0YHRgtC-0Y_QuyDQsiDQutC-0LTQtSDQlNCeINC_0YDQsNCy0L7Qui4gKi8KICBmdW5jdGlvbiByZWFkTGRFeHRyYXMoZG9jLCBjKSB7CiAgICB2YXIgcyA9IChkb2MucXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpIHx8IFtdKVswXTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdmFyIG87CiAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfSBjYXRjaCAoZSkgeyByZXR1cm47IH0KICAgIHZhciBnID0gb1snQGdyYXBoJ10gfHwgW107CiAgICB2YXIgcGFnZSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiAvV2ViUGFnZXxDb2xsZWN0aW9uUGFnZS8udGVzdChTdHJpbmcoblsnQHR5cGUnXSkpOyB9KVswXTsKICAgIGlmIChwYWdlICYmIHBhZ2UuZGVzY3JpcHRpb24pIGMubGQuZGVzYyA9IHBhZ2UuZGVzY3JpcHRpb247CiAgICB2YXIgbGlzdCA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnSXRlbUxpc3QnOyB9KVswXTsKICAgIGlmICghbGlzdCB8fCAhQXJyYXkuaXNBcnJheShsaXN0Lml0ZW1MaXN0RWxlbWVudCkpIHJldHVybjsKICAgIHZhciBieVVybCA9IHt9OwogICAgbGlzdC5pdGVtTGlzdEVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbiAoeCkgeyBpZiAoeCAmJiB4LnVybCkgYnlVcmxbeC51cmxdID0geC5uYW1lIHx8ICcnOyB9KTsKICAgIGMuY2FzZXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgdmFyIGZyb21MZCA9IGJ5VXJsW2l0LmhyZWZdOwogICAgICBpdC5zZW9OYW1lID0gZnJvbUxkIHx8IGxpc3QuaXRlbUxpc3RFbGVtZW50W2ldICYmIGxpc3QuaXRlbUxpc3RFbGVtZW50W2ldLm5hbWUgfHwgaXQudGl0bGU7CiAgICB9KTsKICB9CgogIHZhciBjZmcgPSByZWFkQ2ZnKGxpdmUpOwoKICAvKiDRgdGC0YDQvtC60LgsINC20LjQstGD0YnQuNC1INCyINGB0LrRgNC40L_RgtC1INGB0YLRgNCw0L3QuNGG0YsgKi8KICBmdW5jdGlvbiByZWFkU2NyaXB0Qml0cyhzcmMsIGMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgdGl0bGUgPSAnKCg_OlteJ1xcXXxcXC4pKiknLyk7CiAgICBpZiAobSkgYy5tZXRhLnRpdGxlID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBkZXNjID0gJygoPzpbXidcXF18XFwuKSopJy8pOwogICAgaWYgKG0pIGMubWV0YS5kZXNjID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBpdGVtcyA9IFxbKFtcc1xTXSo_KVxdOy8pOwogICAgaWYgKG0pIHsKICAgICAgYy50aWNrZXIgPSAobVsxXS5tYXRjaCgvJygoPzpbXidcXF18XFwuKSopJy9nKSB8fCBbXSkubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgICAgcmV0dXJuIHMuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcJy9nLCAiJyIpOwogICAgICB9KTsKICAgIH0KICB9CgogIHZhciBsaXZlU2NyaXB0ID0gYWxsKGRvY3VtZW50LCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdpbml0Q2hyb25pY2xlJykgPiAtMTsKICB9KVswXTsKICBpZiAobGl2ZVNjcmlwdCkgcmVhZFNjcmlwdEJpdHMobGl2ZVNjcmlwdC50ZXh0Q29udGVudCwgY2ZnKTsKICByZWFkTGRFeHRyYXMoZG9jdW1lbnQsIGNmZyk7CgogIC8qINC_0L7QuNGB0LrQvtCy0YvQtSDQvtGC0LLQtdGC0YsgRkFRICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzID0gYWxsKGRvY3VtZW50LCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIHZhciBmID0gKG9bJ0BncmFwaCddIHx8IFtdKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJzsgfSlbMF07CiAgICAgIGlmICghZiB8fCAhQXJyYXkuaXNBcnJheShmLm1haW5FbnRpdHkpKSByZXR1cm47CiAgICAgIGYubWFpbkVudGl0eS5mb3JFYWNoKGZ1bmN0aW9uIChxLCBpKSB7CiAgICAgICAgaWYgKGNmZy5mYXEuaXRlbXNbaV0pIGNmZy5mYXEuaXRlbXNbaV0uc2NoZW1hQSA9IChxLmFjY2VwdGVkQW5zd2VyICYmIHEuYWNjZXB0ZWRBbnN3ZXIudGV4dCkgfHwgJyc7CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgeyAvKiDQvtGB0YLQsNC90LXRgtGB0Y8g0L_Rg9GB0YLRi9C8LCDQv9GA0Lgg0YHQsdC-0YDQutC1INCy0L7Qt9GM0LzRkdC8INC40Lcg0LjRgdGF0L7QtNC90LjQutCwICovIH0KICB9KSgpOwoKICAvKiAtLS0tLS0tLS0tINCy0ZHRgNGB0YLQutCwINC_0LDQvdC10LvQuCAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2enItcm9vdCwjYXZ6ci1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6ci1yb290IGlucHV0LCNhdnpyLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpyLXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6ci1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnpyLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enItaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6ci1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6ci1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnpyLWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWYgaW5wdXQsI2F2enItcm9vdCAuYXZ6ci1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2enItcm9vdCAuYXZ6ci1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6ci13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWNhcmQubmV1e2JvcmRlci1jb2xvcjojYzhhMDIwO2JhY2tncm91bmQ6I2ZmZmRmNH0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1jYXJkIGg0IGJ7Y29sb3I6I2EzNzgwMCAhaW1wb3J0YW50fScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWltZz5pbWd7d2lkdGg6NzhweDtoZWlnaHQ6NzhweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWltZyAuZ3tmbGV4OjF9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLW5vdGV7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjo2cHggMCAwfScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6ci1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6ci1tc2d7Zm9udC1zaXplOjEzcHh9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLXN0YXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTlweDtiYWNrZ3JvdW5kOiNmMGYwZjI7Zm9udC1zaXplOjEycHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINCb0LjRiNC90LjQuSDQv9C10YDQtdC90L7RgSDQv9C-0YHQu9C1IDx0ZXh0YXJlYT4g0L3QtSDRgdC70YPRh9Cw0LXQvTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIKICAgICAgINC_0LXRgNCy0YvQuSDQv9C10YDQtdC90L7RgSDRgdGA0LDQt9GDINC30LAg0L7RgtC60YDRi9Cy0LDRjtGJ0LjQvCDRgtC10LPQvtC8LiDQkdC10Lcg0Y3RgtC-0Lkg0YHRgtGA0L7QutC4CiAgICAgICDQt9C90LDRh9C10L3QuNGPLCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEg0L_QtdGA0LXQvdC-0YHQsCDigJQg0LAg0YLQsNC6INGD0YHRgtGA0L7QtdC90Ysg0L7RgtCy0LXRgtGLIEZBUSwg4oCUCiAgICAgICDRgtC10YDRj9C70Lgg0LHRiyDQtdCz0L4g0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuICovCiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2enItZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpyLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgZnVuY3Rpb24gZHJhdygpIHsKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6ci13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6ci1oZWFkIj48aDI-0J_QsNC90LXQu9GMINGA0LXQv9C-0YDRgtCw0LbQtdC5PC9oMj4nICsKICAgICAgJzxzcGFuIGNsYXNzPSJhdnpyLXN0YXQiPtCh0L7QsdGL0YLQuNC5OiAnICsgY2ZnLmNhc2VzLml0ZW1zLmxlbmd0aCArICc8L3NwYW4-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpyLWIiIGlkPSJhdnpyLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImF2enItYm9keSI-JzsKCiAgICAvKiDQmtCV0JnQodCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6ci1zZWMiIG9wZW4-PHN1bW1hcnk-0KHQvdGP0YLRi9C1INGB0L7QsdGL0YLQuNGPICgnICsgY2ZnLmNhc2VzLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enItaGludCI-0JrQvdC-0L_QutCwINGB0LLQtdGA0Y_QtdGCINGA0LDQt9C00LXQuyAnICsgTElTVElORyArICcg0YEg0LrQsNGA0YLQvtGH0LrQsNC80Lgg0Lgg0LTQvtC_0LjRgdGL0LLQsNC10YIg0L3QtdC00L7RgdGC0LDRjtGJ0LjQtSAnICsKICAgICAgJ9CyINC60L7QvdC10YYg0YHQtdGC0LrQuC4g0J_QvtC00L_QuNGB0Ywg0YMg0L3QvtCy0L7QuSDQutCw0YDRgtC-0YfQutC4IOKAlCDQt9Cw0LPQvtGC0L7QstC60LAgwqsnICsgQ0FQX1NUVUIgKyAnwrssINC10ZEg0L3Rg9C20L3QviDQv9C-0L_RgNCw0LLQuNGC0Ywg0YDRg9C60LDQvNC4LjwvcD4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enItYiIgaWQ9ImF2enItcHVsbCI-0J_QvtC00YLRj9C90YPRgtGMINGB0L7QsdGL0YLQuNGPINC40Lcg0YDQsNC30LTQtdC70LA8L2J1dHRvbj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpyLW5vdGUiIGlkPSJhdnpyLXB1bGwtbXNnIj48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpyLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdjYXNlcy5sYWJlbCcsIGNmZy5jYXNlcy5sYWJlbCkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ2Nhc2VzLmgyJywgY2ZnLmNhc2VzLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmNhc2VzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6ci1jYXJkJyArIChjLmlzTmV3ID8gJyBuZXUnIDogJycpICsgJyI-PGg0PtCh0L7QsdGL0YLQuNC1ICcgKyAoaSArIDEpICsKICAgICAgICAoYy5oZXJvID8gJyDigJQg0LHQvtC70YzRiNCw0Y8g0LrQsNGA0YLQvtGH0LrQsCcgOiAnJykgKyAoYy5pc05ldyA_ICcg4oCUIDxiPtC90L7QstC-0LUsINC_0YDQvtCy0LXRgNGM0YLQtSDQv9C-0LTQv9C40YHRjDwvYj4nIDogJycpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enItcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdjYXNlcy5pdGVtcy4nICsgaSArICcudGl0bGUnLCBjLnRpdGxlKSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ2Nhc2VzLml0ZW1zLicgKyBpICsgJy5jYXAnLCBjLmNhcCkgKyAnPC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0LIg0YDQsNC30LzQtdGC0LrQtSAo0YDQsNC30LLRkdGA0L3Rg9GC0L7QtSwg0LTQu9GPINC_0L7QuNGB0LrQsCknLCAnY2FzZXMuaXRlbXMuJyArIGkgKyAnLnNlb05hbWUnLCBjLnNlb05hbWUgfHwgYy50aXRsZSkgKwogICAgICAgIGZpZWxkKCfQodGB0YvQu9C60LAnLCAnY2FzZXMuaXRlbXMuJyArIGkgKyAnLmhyZWYnLCBjLmhyZWYpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1mIj48bGFiZWw-0KTQvtGC0L7Qs9GA0LDRhNC40Y88L2xhYmVsPjxkaXYgY2xhc3M9ImF2enItaW1nIj4nICsKICAgICAgICAnPGltZyBzcmM9IicgKyBlc2MoYy5pbWcpICsgJyIgZGF0YS1wcmV2PSJjYXNlcy5pdGVtcy4nICsgaSArICcuaW1nIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-PGlucHV0IGRhdGEtcD0iY2FzZXMuaXRlbXMuJyArIGkgKyAnLmltZyIgdmFsdWU9IicgKyBlc2MoYy5pbWcpICsgJyI-PC9kaXY-PC9kaXY-PC9kaXY-JyArCiAgICAgICAgZmllbGQoJ0FsdC3RgtC10LrRgdGCJywgJ2Nhc2VzLml0ZW1zLicgKyBpICsgJy5hbHQnLCBjLmFsdCkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KjQkNCf0JrQkCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enItc2VjIj48c3VtbWFyeT7QqNCw0L_QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uZXllYnJvdycsIGNmZy5oZXJvLmV5ZWJyb3cpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enItcm93Ij4nICsgZmllbGQoJ9Ch0YLRgNC-0LrQsCAxJywgJ2hlcm8ubGluZTEnLCBjZmcuaGVyby5saW5lMSkgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDInLCAnaGVyby5saW5lMicsIGNmZy5oZXJvLmxpbmUyKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAzICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTMnLCBjZmcuaGVyby5saW5lMykgKwogICAgICBmaWVsZCgn0J_QvtC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2xlZGUnLCBjZmcubGVkZSwgJ2FyZWEnKSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpyLXJvdyI-JyArIGZpZWxkKCfQodGB0YvQu9C60LAg0L_QvtC0INGC0LXQutGB0YLQvtC8IOKAlCDQvdCw0LTQv9C40YHRjCcsICdwcmljZS50ZXh0JywgY2ZnLnByaWNlLnRleHQpICsKICAgICAgZmllbGQoJ9Ch0YHRi9C70LrQsCDQv9C-0LQg0YLQtdC60YHRgtC-0Lwg4oCUINCw0LTRgNC10YEnLCAncHJpY2UuaHJlZicsIGNmZy5wcmljZS5ocmVmKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CR0LXQs9GD0YnQsNGPINGB0YLRgNC-0LrQsCDigJQg0YfQtdGA0LXQtyDQt9Cw0L_Rj9GC0YPRjicsICd0aWNrZXJMaW5lJywgY2ZnLnRpY2tlci5qb2luKCcsICcpLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCl0KDQntCd0JjQmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6ci1zZWMiPjxzdW1tYXJ5PtCl0YDQvtC90LjQutCwINGB0L7QsdGL0YLQuNGPICgnICsgY2ZnLmNocm9uLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnY2hyb24ubGFiZWwnLCBjZmcuY2hyb24ubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdjaHJvbi5oMicsIGNmZy5jaHJvbi5oMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQn9C-0Y_RgdC90LXQvdC40LUgKNC80L7QttC90L4gSFRNTCknLCAnY2hyb24ubm90ZScsIGNmZy5jaHJvbi5ub3RlLCAnYXJlYScpOwogICAgY2ZnLmNocm9uLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enItY2FyZCI-PGg0PtCo0LDQsyAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2enItcm93Ij4nICsKICAgICAgICBmaWVsZCgn0J3QvtC80LXRgCcsICdjaHJvbi5pdGVtcy4nICsgaSArICcubnVtJywgaXQubnVtKSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ2Nocm9uLml0ZW1zLicgKyBpICsgJy5jYXAnLCBpdC5jYXApICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Ch0L3QvtGB0LrQsCDQv9C-0LQg0LvQtdC90YLQvtC5ICjQvNC-0LbQvdC-IEhUTUwpJywgJ2Nocm9uLnNvdXJjZScsIGNmZy5jaHJvbi5zb3VyY2UsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JzQldCi0J7QlCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enItc2VjIj48c3VtbWFyeT7QmtCw0Log0Y8g0YDQsNCx0L7RgtCw0Y4gKCcgKyBjZmcubWV0aG9kLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnbWV0aG9kLmxhYmVsJywgY2ZnLm1ldGhvZC5sYWJlbCkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ21ldGhvZC5oMicsIGNmZy5tZXRob2QuaDIpICsgJzwvZGl2Pic7CiAgICBjZmcubWV0aG9kLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enItY2FyZCI-PGg0PtCf0YPQvdC60YIgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ21ldGhvZC5pdGVtcy4nICsgaSArICcudGl0bGUnLCBpdC50aXRsZSkgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ21ldGhvZC5pdGVtcy4nICsgaSArICcudGV4dCcsIGl0LnRleHQsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KbQldCd0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpyLXNlYyI-PHN1bW1hcnk-0KHRgtC-0LjQvNC-0YHRgtGMPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAncHJpY2luZy5sYWJlbCcsIGNmZy5wcmljaW5nLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAncHJpY2luZy5oMicsIGNmZy5wcmljaW5nLmgyKSArICc8L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enItcm93Ij4nICsgZmllbGQoJ9Cm0LjRhNGA0LAgKNCx0LXQtyDQt9C90LDQutCwINCy0LDQu9GO0YLRiyknLCAncHJpY2luZy5maWd1cmUnLCBjZmcucHJpY2luZy5maWd1cmUpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDRhtC40YTRgNC-0LknLCAncHJpY2luZy51bml0JywgY2ZnLnByaWNpbmcudW5pdCkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQn9GA0L4g0L3QsNC70L7Qs9C4INC4INGD0YHQu9C-0LLQuNGPJywgJ3ByaWNpbmcudGF4JywgY2ZnLnByaWNpbmcudGF4LCAnYXJlYScpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgdC_0LjRgdC60LAnLCAncHJpY2luZy5pbmNsVGl0bGUnLCBjZmcucHJpY2luZy5pbmNsVGl0bGUpOwogICAgY2ZnLnByaWNpbmcuaW5jbC5mb3JFYWNoKGZ1bmN0aW9uIChsaSwgaSkgewogICAgICBoICs9IGZpZWxkKCfQn9GD0L3QutGCICcgKyAoaSArIDEpLCAncHJpY2luZy5pbmNsLicgKyBpLCBsaSk7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qIEZBUSAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enItc2VjIj48c3VtbWFyeT7QktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0YsgKCcgKyBjZmcuZmFxLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enItaGludCI-0JLQvtC_0YDQvtGBINC_0YDQsNCy0LjRgtGB0Y8g0L7QtNC40L0g0YDQsNC3IOKAlCDRg9GF0L7QtNC40YIg0Lgg0LIg0LLQuNC00LjQvNGL0Lkg0LHQu9C-0LosINC4INCyINGA0LDQt9C80LXRgtC60YMuICcgKwogICAgICAn0J7RgtCy0LXRgtC-0LIg0LTQstCwOiDQstC40LTQuNC80YvQuSDQvtGCINC_0LXRgNCy0L7Qs9C-INC70LjRhtCwLCDQv9C-0LjRgdC60L7QstGL0Lkg0L7RgiDRgtGA0LXRgtGM0LXQs9C-LjwvcD4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enItcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2ZhcS5sYWJlbCcsIGNmZy5mYXEubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdmYXEuaDInLCBjZmcuZmFxLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmZhcS5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enItY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQktC-0L_RgNC-0YEnLCAnZmFxLml0ZW1zLicgKyBpICsgJy5xJywgZi5xKSArCiAgICAgICAgZmllbGQoJ9CS0LjQtNC40LzRi9C5INC-0YLQstC10YIgKNC80L7QttC90L4gSFRNTCknLCAnZmFxLml0ZW1zLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsKICAgICAgICBmaWVsZCgn0J7RgtCy0LXRgiDQtNC70Y8g0L_QvtC40YHQutCwJywgJ2ZhcS5pdGVtcy4nICsgaSArICcuc2NoZW1hQScsIGYuc2NoZW1hQSwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiBDVEEgKyBTRU8gKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpyLXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyINC4INC_0L7QuNGB0LrQvtCy0LjQutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ2N0YS50aXRsZScsIGNmZy5jdGEudGl0bGUpOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6ci1jYXJkIj48aDQ-0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy50ZXh0JywgYi50ZXh0KSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEnLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLmhyZWYnLCBiLmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLJywgJ21ldGEudGl0bGUnLCBjZmcubWV0YS50aXRsZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ21ldGEuZGVzYycsIGNmZy5tZXRhLmRlc2MsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1ICjQvNC-0LbQtdGCINCx0YvRgtGMINC_0L7QtNGA0L7QsdC90LXQtSknLCAnbGQuZGVzYycsIGNmZy5sZC5kZXNjLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enItZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpyLWIgcCIgaWQ9ImF2enItYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpyLWIiIGlkPSJhdnpyLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2enItbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2enItb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgYmluZCgpOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCDRhNC-0YDQvNGLIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgfQoKICBmdW5jdGlvbiBoYXJ2ZXN0KCkgewogICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgIHZhciBwID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKHAgPT09ICd0aWNrZXJMaW5lJykgewogICAgICAgIGNmZy50aWNrZXIgPSBlbC52YWx1ZS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgc2V0UGF0aChjZmcsIHAsIGVsLnZhbHVlKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYmluZCgpIHsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enItY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7CiAgICB9KTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwnKS5vbmNsaWNrID0gcHVsbDsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enItYnVpbGQnKS5vbmNsaWNrID0gYnVpbGQ7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXRlc3QnKS5vbmNsaWNrID0gc2VsZlRlc3Q7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC_0L7QtNGC0Y_Qs9C40LLQsNC90LjQtSDRgdC-0LHRi9GC0LjQuSAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHBpY2tXaWR0aChzcmNzZXQsIHdhbnQpIHsKICAgIHZhciBwYXJ0cyA9IChzcmNzZXQgfHwgJycpLnNwbGl0KCcsJyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBwID0gcGFydHNbaV0udHJpbSgpOwogICAgICBpZiAocC5zbGljZSgtKFN0cmluZyh3YW50KS5sZW5ndGggKyAyKSkgPT09ICcgJyArIHdhbnQgKyAndycpIHsKICAgICAgICB2YXIgdSA9IHAuc2xpY2UoMCwgcC5sYXN0SW5kZXhPZignICcpKS50cmltKCk7CiAgICAgICAgaWYgKHUuaW5kZXhPZignaHR0cCcpID09PSAwKSByZXR1cm4gdTsKICAgICAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgICAgIHJldHVybiAnaHR0cHM6Ly8nICsgdTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBwdWxsKCkgewogICAgdmFyIG5vdGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwtbXNnJyk7CiAgICBub3RlLnRleHRDb250ZW50ID0gJ9Cn0LjRgtCw0Y4g0YDQsNC30LTQtdC7ICcgKyBMSVNUSU5HICsgJ-KApic7CiAgICBoYXJ2ZXN0KCk7CgogICAgZmV0Y2goTElTVElORyArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfRgNCw0LfQtNC10Lsg0LLQtdGA0L3Rg9C7ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGl0ZW1zID0gYWxsKGRvYywgJy5saXN0aW5nLWl0ZW0nKTsKICAgICAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDRgNCw0LfQtNC10LvQtSDQvdC10YIg0LrQsNGA0YLQvtGH0LXQuiAubGlzdGluZy1pdGVtIOKAlCDQstGR0YDRgdGC0LrQsCB3Zm9saW8g0LjQt9C80LXQvdC40LvQsNGB0YwnKTsKCiAgICAgICAgdmFyIGtub3duID0ge307CiAgICAgICAgY2ZnLmNhc2VzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIGtub3duWyhjLmhyZWYgfHwgJycpLnJlcGxhY2UoL15odHRwcz86XC9cL2F2YW56YXRvXC5ydS8sICcnKS5yZXBsYWNlKC9cLyQvLCAnJyldID0gMTsKICAgICAgICB9KTsKCiAgICAgICAgdmFyIGFkZGVkID0gMCwgc2tpcHBlZCA9IDAsIGJyb2tlbiA9IDA7CiAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHZhciBsaW5rID0gaXRlbUxpbmsoaXQpLCBpbWcgPSBvbmUoaXQsICdpbWcnKTsKICAgICAgICAgIGlmICghbGluayB8fCAhaW1nKSB7IGJyb2tlbisrOyByZXR1cm47IH0KICAgICAgICAgIHZhciBocmVmID0gKGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycpLnJlcGxhY2UoL1wvJC8sICcnKTsKICAgICAgICAgIGlmICghaHJlZiB8fCBrbm93bltocmVmXSkgcmV0dXJuOwogICAgICAgICAga25vd25baHJlZl0gPSAxOwoKICAgICAgICAgIHZhciBzcyA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgaW1nLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgJyc7CiAgICAgICAgICB2YXIgdSA9IHBpY2tXaWR0aChzcywgMTI0MCkgfHwgcGlja1dpZHRoKHNzLCA2MDApOwogICAgICAgICAgaWYgKCF1KSB7IHNraXBwZWQrKzsgcmV0dXJuOyB9CiAgICAgICAgICB2YXIgYWx0ID0gKGltZy5nZXRBdHRyaWJ1dGUoJ2FsdCcpIHx8ICcnKS5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJykucmVwbGFjZSgvwqAvZywgJyAnKS50cmltKCk7CgogICAgICAgICAgY2ZnLmNhc2VzLml0ZW1zLnB1c2goewogICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly9hdmFuemF0by5ydScgKyBocmVmLAogICAgICAgICAgICBpbWc6IHUsCiAgICAgICAgICAgIGFsdDogYWx0LAogICAgICAgICAgICB0aXRsZTogYWx0LAogICAgICAgICAgICAvKiDRgyDQvdC-0LLQvtC5INGA0LDQsdC-0YLRiyDRgNCw0LfQstGR0YDQvdGD0YLQvtCz0L4g0L3QsNC30LLQsNC90LjRjyDQtdGJ0ZEg0L3QtdGCIOKAlCDQsdC10YDRkdC8CiAgICAgICAgICAgICAgINC_0L7QtNC_0LjRgdGMINCw0LvRjNCx0L7QvNCwLCDQtdGRINCy0LjQtNC90L4g0Lgg0LzQvtC20L3QviDQv9C-0L_RgNCw0LLQuNGC0Ywg0LIg0YTQvtGA0LzQtSAqLwogICAgICAgICAgICBzZW9OYW1lOiBhbHQsCiAgICAgICAgICAgIGNhcDogQ0FQX1NUVUIsCiAgICAgICAgICAgIGhlcm86IGZhbHNlLAogICAgICAgICAgICBpc05ldzogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBhZGRlZCsrOwogICAgICAgIH0pOwoKICAgICAgICBkcmF3KCk7CiAgICAgICAgdmFyIG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwtbXNnJyk7CiAgICAgICAgbi50ZXh0Q29udGVudCA9IGFkZGVkCiAgICAgICAgICA_ICfQlNC-0LHQsNCy0LvQtdC90L4g0YHQvtCx0YvRgtC40Lk6ICcgKyBhZGRlZCArICcuINCf0L7Qv9GA0LDQstGM0YLQtSDQt9Cw0LPQvtC70L7QstC60Lgg0Lgg0L_QvtC00L_QuNGB0Lgg4oCUINC90L7QstGL0LUg0LrQsNGA0YLQvtGH0LrQuCDQvtGC0LzQtdGH0LXQvdGLINC20ZHQu9GC0YvQvC4nICsKICAgICAgICAgICAgKHNraXBwZWQgPyAnINCf0YDQvtC_0YPRidC10L3QviDQsdC10Lcg0L7QsdC70L7QttC60Lg6ICcgKyBza2lwcGVkICsgJy4nIDogJycpCiAgICAgICAgICA6ICfQndC-0LLRi9GFINGB0L7QsdGL0YLQuNC5INC90LXRgiDigJQg0LIg0YDQsNC30LTQtdC70LUgJyArIGl0ZW1zLmxlbmd0aCArICcsINC90LAg0YHRgtGA0LDQvdC40YbQtSAnICsgY2ZnLmNhc2VzLml0ZW1zLmxlbmd0aCArICcuJzsKICAgICAgICBpZiAoYnJva2VuKSBuLnRleHRDb250ZW50ICs9ICcg0JLQndCY0JzQkNCd0JjQlTog0LrQsNGA0YLQvtGH0LXQuiDQsdC10Lcg0YHRgdGL0LvQutC4INC40LvQuCDQvtCx0LvQvtC20LrQuDogJyArIGJyb2tlbiArCiAgICAgICAgICAnIOKAlCDQstGR0YDRgdGC0LrQsCDQu9C40YHRgtC40L3Qs9CwIHdmb2xpbyDQvNC-0LPQu9CwINC_0L7QvNC10L3Rj9GC0YzRgdGPLic7CiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcuYXZ6ci1zZWMnKS5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnb3BlbicpOwogICAgICB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwtbXNnJykudGV4dENvbnRlbnQgPSAn0J3QtSDQv9C-0LTRgtGP0L3Rg9C70L7RgdGMOiAnICsgZS5tZXNzYWdlOwogICAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMINCyINGA0LDQt9C80LXRgtC60YMgLS0tLS0tLS0tLSAqLwoKICAvKiDQn9C10YDQtdC_0LjRgdGL0LLQsNC10Lwg0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDRgtC10LrRgdGCINGN0LvQtdC80LXQvdGC0LAsINC90LUg0YLRgNC-0LPQsNGPINCy0LvQvtC20LXQvdC90YvQtQogICAgINC30L3QsNGH0LrQuCDQuCDQuNGFINC_0L7RgNGP0LTQvtC6LiDQn9C40YjQtdC8INCyINGC0L7RgiDRgtC10LrRgdGC0L7QstGL0Lkg0YPQt9C10LssINCz0LTQtSDRgtC10LrRgdGCCiAgICAg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LXRgdGC0YwsINCwINC90LUg0LIg0L_QtdGA0LLRi9C5INC_0L7Qv9Cw0LLRiNC40LnRgdGPOiDQsiDRgNCw0LfQvNC10YLQutC1INCy0LjQtNCwCiAgICAgYDxzcGFuIGNsYXNzPSJpY29uIj5zd2lwZTwvc3Bhbj4g0L_QvtC00L_QuNGB0YxgINC_0LXRgNCy0YvQuSDRg9C30LXQuyDigJQg0Y3RgtC-CiAgICAg0L7RgtGB0YLRg9C_INC_0LXRgNC10LQg0LfQvdCw0YfQutC-0LwsINC4INC30LDQv9C40YHRjCDQsiDQvdC10LPQviDQv9C10YDQtdCx0YDQsNGB0YvQstCw0LvQsCDQv9C-0LTQv9C40YHRjAogICAgINCy0L_QtdGA0ZHQtCDQt9C90LDRh9C60LAuICovCiAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgaWYgKCFlbCB8fCB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHRleHRzLnB1c2goZWwuY2hpbGROb2Rlc1tpXSk7CiAgICB9CiAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICB2YXIgbWFpbiA9IG51bGw7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgIH0KICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgdmFyIHByZSA9IChyYXcubWF0Y2goL15ccyovKSB8fCBbJyddKVswXTsKICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgIG1haW4ubm9kZVZhbHVlID0gcHJlICsgdiArIHBvc3Q7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgdGV4dHNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0c1tpXSk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gc2V0UGxhaW4oZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwudGV4dENvbnRlbnQgPSB2OyB9CiAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC5pbm5lckhUTUwgPSB2OyB9CgogIC8qINCa0LDRgNGC0L7Rh9C60LAg0YHQvtCx0YvRgtC40Y8g4oCUINGA0L7QstC90L4g0YLQsCDQttC1INCy0ZHRgNGB0YLQutCwLCDRh9GC0L4g0YMg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFLgogICAgINCd0LDQv9GA0LDQstC70LXQvdC40LUg0YfQtdGA0LXQtNGD0LXRgtGB0Y8sINC30LDQtNC10YDQttC60LAg0YDQsNGB0YLRkdGCINC_0L4gODAg0L3QsCDQutCw0LbQtNGD0Y4g0L_QsNGA0YM6CiAgICAg0Y3RgtC-INC_0YDQvtC00L7Qu9C20LXQvdC40LUg0YDQuNGC0LzQsCwg0LfQsNC00LDQvdC90L7Qs9C-INCyINC40YHRhdC-0LTQvdC-0Lkg0YDQsNC30LzQtdGC0LrQtS4gKi8KICBmdW5jdGlvbiBjYXNlSHRtbChkb2MsIGMsIGkpIHsKICAgIHZhciBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgYy5ocmVmKTsKICAgIGEuY2xhc3NOYW1lID0gJ2Nhc2UgZmx5JzsKICAgIGEuc2V0QXR0cmlidXRlKCdkYXRhLWRpcicsIGkgJSAyID09PSAwID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7CiAgICB2YXIgZGVsYXkgPSBNYXRoLmZsb29yKGkgLyAyKSAqIDgwOwogICAgaWYgKGRlbGF5KSBhLnNldEF0dHJpYnV0ZSgnZGF0YS1kZWxheScsIFN0cmluZyhkZWxheSkpOwoKICAgIHZhciBpbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgIGltLnNldEF0dHJpYnV0ZSgnc3JjJywgYy5pbWcpOwogICAgaW0uc2V0QXR0cmlidXRlKCdhbHQnLCBjLmFsdCk7CiAgICBpbS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzgwMCcpOwogICAgaW0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnODAwJyk7CiAgICBpbS5zZXRBdHRyaWJ1dGUoJ2xvYWRpbmcnLCAnbGF6eScpOwogICAgaW0uc2V0QXR0cmlidXRlKCdkZWNvZGluZycsICdhc3luYycpOwoKICAgIHZhciBjYXAgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBjYXAuY2xhc3NOYW1lID0gJ2NhcCc7CiAgICB2YXIgaDMgPSBkb2MuY3JlYXRlRWxlbWVudCgnaDMnKTsgaDMudGV4dENvbnRlbnQgPSBjLnRpdGxlOwogICAgdmFyIHNwID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgc3AudGV4dENvbnRlbnQgPSBjLmNhcDsKICAgIGNhcC5hcHBlbmRDaGlsZChoMyk7IGNhcC5hcHBlbmRDaGlsZChzcCk7CgogICAgLyog0L7RgtGB0YLRg9C_0Ysg0LrQsNC6INGDINGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDQutCw0YDRgtC-0YfQtdC6IOKAlCDQutC-0LQg0YfQuNGC0LDRjtGCINCz0LvQsNC30LDQvNC4ICovCiAgICBhLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXG4gICAgICAgICcpKTsKICAgIGEuYXBwZW5kQ2hpbGQoaW0pOwogICAgYS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoJ1xuICAgICAgICAnKSk7CiAgICBhLmFwcGVuZENoaWxkKGNhcCk7CiAgICBhLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXG4gICAgICAnKSk7CiAgICByZXR1cm4gYTsKICB9CgogIGZ1bmN0aW9uIHdyaXRlQWxsKGRvYywgc2NvcGUsIGQpIHsKICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgIHNldFBsYWluKGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgaWYgKGxpbmVzWzJdKSBzZXRQbGFpbihvbmUobGluZXNbMl0sICdlbScpIHx8IGxpbmVzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmxlZGUnKSwgZC5sZWRlKTsKICAgIHZhciBwcmljZSA9IG9uZShzY29wZSwgJy5sZWRlLXByaWNlJyk7CiAgICBpZiAocHJpY2UpIHsgaWYgKGQucHJpY2UuaHJlZikgcHJpY2Uuc2V0QXR0cmlidXRlKCdocmVmJywgZC5wcmljZS5ocmVmKTsgc2V0VGV4dChwcmljZSwgZC5wcmljZS50ZXh0KTsgfQoKICAgIHZhciBjaHJvbiA9IHNlYyhzY29wZSwgJ2Nocm9uaWNsZScpOwogICAgc2V0UGxhaW4ob25lKGNocm9uLCAnLmxhYmVsJyksIGQuY2hyb24ubGFiZWwpOwogICAgc2V0SHRtbChvbmUoY2hyb24sICcuaDInKSwgZC5jaHJvbi5oMik7CiAgICBzZXRIdG1sKG9uZShjaHJvbiwgJy5jaHJvbi1ub3RlJyksIGQuY2hyb24ubm90ZSk7CiAgICBzZXRIdG1sKG9uZShjaHJvbiwgJy5jaHJvbi1zb3VyY2UnKSwgZC5jaHJvbi5zb3VyY2UpOwogICAgYWxsKGNocm9uLCAnLmNocm9uLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICB2YXIgcyA9IGQuY2hyb24uaXRlbXNbaV07IGlmICghcykgcmV0dXJuOwogICAgICBzZXRQbGFpbihvbmUoaXQsICcuY2hyb24tbnVtJyksIHMubnVtKTsKICAgICAgc2V0UGxhaW4ob25lKGl0LCAnLmNocm9uLWNhcCcpLCBzLmNhcCk7CiAgICB9KTsKCiAgICB2YXIgY2FzZXMgPSBzZWMoc2NvcGUsICdjYXNlcycpOwogICAgc2V0UGxhaW4ob25lKGNhc2VzLCAnLmxhYmVsJyksIGQuY2FzZXMubGFiZWwpOwogICAgc2V0SHRtbChvbmUoY2FzZXMsICcuaDInKSwgZC5jYXNlcy5oMik7CiAgICB2YXIgZ3JpZCA9IG9uZShjYXNlcywgJy5jYXNlLWdyaWQnKTsKICAgIHZhciBleGlzdGluZyA9IGFsbChjYXNlcywgJy5jYXNlJyk7CiAgICBkLmNhc2VzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgdmFyIGVsID0gZXhpc3RpbmdbaV07CiAgICAgIGlmICghZWwpIHsKICAgICAgICBncmlkLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXG5cbiAgICAgICcpKTsKICAgICAgICBncmlkLmFwcGVuZENoaWxkKGNhc2VIdG1sKGRvYywgYywgaSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBjLmhyZWYpOwogICAgICB2YXIgaW0gPSBvbmUoZWwsICdpbWcnKTsKICAgICAgaWYgKGltKSB7IGltLnNldEF0dHJpYnV0ZSgnc3JjJywgYy5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIGMuYWx0KTsgfQogICAgICBzZXRQbGFpbihvbmUoZWwsICcuY2FwIGgzJyksIGMudGl0bGUpOwogICAgICBzZXRQbGFpbihvbmUoZWwsICcuY2FwIHNwYW4nKSwgYy5jYXApOwogICAgfSk7CgogICAgdmFyIG1ldGggPSBzZWMoc2NvcGUsICdtZXRob2QnKTsKICAgIHNldFBsYWluKG9uZShtZXRoLCAnLmxhYmVsJyksIGQubWV0aG9kLmxhYmVsKTsKICAgIHNldEh0bWwob25lKG1ldGgsICcuaDInKSwgZC5tZXRob2QuaDIpOwogICAgYWxsKG1ldGgsICcubWV0aG9kLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICB2YXIgcyA9IGQubWV0aG9kLml0ZW1zW2ldOyBpZiAoIXMpIHJldHVybjsKICAgICAgc2V0UGxhaW4ob25lKGl0LCAnaDMnKSwgcy50aXRsZSk7CiAgICAgIHNldFBsYWluKG9uZShpdCwgJ3AnKSwgcy50ZXh0KTsKICAgIH0pOwoKICAgIHZhciBwcmljID0gc2VjKHNjb3BlLCAncHJpY2luZycpOwogICAgc2V0UGxhaW4ob25lKHByaWMsICcubGFiZWwnKSwgZC5wcmljaW5nLmxhYmVsKTsKICAgIHNldEh0bWwob25lKHByaWMsICcuaDInKSwgZC5wcmljaW5nLmgyKTsKICAgIHNldFRleHQob25lKHByaWMsICcucHJpY2UtZmlndXJlJyksIGQucHJpY2luZy5maWd1cmUpOwogICAgc2V0UGxhaW4ob25lKHByaWMsICcucHJpY2UtdW5pdCcpLCBkLnByaWNpbmcudW5pdCk7CiAgICBzZXRQbGFpbihvbmUocHJpYywgJy5wcmljZS10YXgnKSwgZC5wcmljaW5nLnRheCk7CiAgICBzZXRQbGFpbihvbmUocHJpYywgJy5pbmNsLXRpdGxlJyksIGQucHJpY2luZy5pbmNsVGl0bGUpOwogICAgYWxsKHByaWMsICcuaW5jbCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBpKSB7CiAgICAgIGlmICh0eXBlb2YgZC5wcmljaW5nLmluY2xbaV0gPT09ICdzdHJpbmcnKSBzZXRQbGFpbihsaSwgZC5wcmljaW5nLmluY2xbaV0pOwogICAgfSk7CgogICAgdmFyIGZhcSA9IHNlYyhzY29wZSwgJ2ZhcScpOwogICAgc2V0UGxhaW4ob25lKGZhcSwgJy5sYWJlbCcpLCBkLmZhcS5sYWJlbCk7CiAgICBzZXRIdG1sKG9uZShmYXEsICcuaDInKSwgZC5mYXEuaDIpOwogICAgYWxsKGZhcSwgJy5mYXEtaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgIHZhciBzID0gZC5mYXEuaXRlbXNbaV07IGlmICghcykgcmV0dXJuOwogICAgICBzZXRUZXh0KG9uZShpdCwgJy5mYXEtcScpLCBzLnEpOwogICAgICBzZXRIdG1sKG9uZShpdCwgJy5mYXEtYS1pbm5lcicpLCBzLmEpOwogICAgfSk7CgogICAgc2V0SHRtbChvbmUoc2NvcGUsICcuY3RhIC5oMicpLCBkLmN0YS50aXRsZSk7CiAgICBhbGwoc2NvcGUsICcuY3RhIC5idG5zIC5idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChiLCBpKSB7CiAgICAgIHZhciBzID0gZC5jdGEuYnV0dG9uc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgIGlmIChzLmhyZWYpIGIuc2V0QXR0cmlidXRlKCdocmVmJywgcy5ocmVmKTsKICAgICAgYWxsKGIsICcuYnRuLWxhYmVsID4gc3BhbicpLmZvckVhY2goZnVuY3Rpb24gKHgpIHsgc2V0UGxhaW4oeCwgcy50ZXh0KTsgfSk7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YsgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBqc1N0cihzKSB7IHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgIHZhciBvdXQgPSBzcmMsIG1pc3NlZCA9IFtdOwogICAgZnVuY3Rpb24gc3ViKHJlLCBtYWtlLCBuYW1lKSB7CiAgICAgIGlmICghcmUudGVzdChvdXQpKSB7IG1pc3NlZC5wdXNoKG5hbWUpOyByZXR1cm47IH0KICAgICAgb3V0ID0gb3V0LnJlcGxhY2UocmUsIG1ha2UpOwogICAgfQogICAgc3ViKC8odmFyIHRpdGxlID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS50aXRsZSk7IH0sICfQt9Cw0LPQvtC70L7QstC-0LonKTsKICAgIHN1YigvKHZhciBkZXNjID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS5kZXNjKTsgfSwgJ9C-0L_QuNGB0LDQvdC40LUnKTsKICAgIGlmIChkLnRpY2tlci5sZW5ndGgpIHsKICAgICAgc3ViKC8odmFyIGl0ZW1zID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgICB2YXIgYm9keSA9IGQudGlja2VyLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gJyAgICAgICcgKyBqc1N0cihzKTsgfSkuam9pbignLFxuJyk7CiAgICAgICAgcmV0dXJuIHAxICsgJ1xuJyArIGJvZHkgKyAnXG4gICAgJyArIHAyOwogICAgICB9LCAn0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwJyk7CiAgICB9CiAgICByZXR1cm4geyB0ZXh0OiBvdXQsIG1pc3NlZDogbWlzc2VkIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LIgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBidWlsZExkKGRvYywgZCkgewogICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJyB9OwogICAgdmFyIG87CiAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQoKICAgIHZhciBnID0gb1snQGdyYXBoJ10gfHwgW107CiAgICBzeW5jQ2Fub24oZyk7CiAgICBmdW5jdGlvbiBub2RlKHApIHsgcmV0dXJuIGcuZmlsdGVyKHApWzBdOyB9CgogICAgdmFyIHBhZ2UgPSBub2RlKGZ1bmN0aW9uIChuKSB7CiAgICAgIHJldHVybiAvV2ViUGFnZXxDb2xsZWN0aW9uUGFnZS8udGVzdChTdHJpbmcoblsnQHR5cGUnXSkpIDsKICAgIH0pOwogICAgaWYgKHBhZ2UpIHsKICAgICAgaWYgKGQubWV0YS50aXRsZSkgcGFnZS5uYW1lID0gZC5tZXRhLnRpdGxlOwogICAgICAvKiDQvtC_0LjRgdCw0L3QuNC1INGA0LDQt9C80LXRgtC60Lgg4oCUINGB0LLQvtGRINC_0L7Qu9C1OiDRgNCw0L3RjNGI0LUg0YHRjtC00LAg0LfQsNGC0LjRgNCw0LvQvtGB0Ywg0LHQvtC70LXQtQogICAgICAgICDQutC-0YDQvtGC0LrQvtC1INC-0L_QuNGB0LDQvdC40LUg0LjQtyDRgdC60YDQuNC_0YLQsCwg0Lgg0YDQsNC30LzQtdGC0LrQsCDQsdC10LTQvdC10LvQsCDQv9GA0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQtSAqLwogICAgICBpZiAoZC5sZCAmJiBkLmxkLmRlc2MpIHBhZ2UuZGVzY3JpcHRpb24gPSBkLmxkLmRlc2M7CiAgICAgIGVsc2UgaWYgKGQubWV0YS5kZXNjKSBwYWdlLmRlc2NyaXB0aW9uID0gZC5tZXRhLmRlc2M7CiAgICB9CgogICAgdmFyIGYgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pOwogICAgaWYgKGYgJiYgQXJyYXkuaXNBcnJheShmLm1haW5FbnRpdHkpKSB7CiAgICAgIGQuZmFxLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHEsIGkpIHsKICAgICAgICB2YXIgaXQgPSBmLm1haW5FbnRpdHlbaV07IGlmICghaXQpIHJldHVybjsKICAgICAgICBpZiAocS5xKSBpdC5uYW1lID0gcS5xOwogICAgICAgIGlmIChxLnNjaGVtYUEgJiYgaXQuYWNjZXB0ZWRBbnN3ZXIpIGl0LmFjY2VwdGVkQW5zd2VyLnRleHQgPSBxLnNjaGVtYUE7CiAgICAgIH0pOwogICAgfQoKICAgIHZhciBsaXN0ID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0l0ZW1MaXN0JzsgfSk7CiAgICBpZiAobGlzdCkgewogICAgICBsaXN0Lm51bWJlck9mSXRlbXMgPSBkLmNhc2VzLml0ZW1zLmxlbmd0aDsKICAgICAgdmFyIHNyYyA9IEFycmF5LmlzQXJyYXkobGlzdC5pdGVtTGlzdEVsZW1lbnQpID8gbGlzdC5pdGVtTGlzdEVsZW1lbnQgOiBbXTsKICAgICAgbGlzdC5pdGVtTGlzdEVsZW1lbnQgPSBkLmNhc2VzLml0ZW1zLm1hcChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciB3YXMgPSBzcmNbaV0gfHwge307CiAgICAgICAgdmFyIHJvdyA9IHsgJ0B0eXBlJzogJ0xpc3RJdGVtJywgcG9zaXRpb246IGkgKyAxLAogICAgICAgICAgbmFtZTogKGMuc2VvTmFtZSB8fCBjLnRpdGxlKSwgdXJsOiBjLmhyZWYgfTsKICAgICAgICBpZiAod2FzLmltYWdlICE9PSB1bmRlZmluZWQpIHJvdy5pbWFnZSA9IGMuaW1nOwogICAgICAgIHJldHVybiByb3c7CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBjb21tZW50cyhkb2MpIHsKICAgIHZhciBvdXQgPSBbXSwgdyA9IGRvYy5jcmVhdGVUcmVlV2Fsa2VyKGRvYy5ib2R5LCAxMjgsIG51bGwsIGZhbHNlKSwgbjsKICAgIHdoaWxlICgobiA9IHcubmV4dE5vZGUoKSkpIHsKICAgICAgdmFyIHYgPSBuLm5vZGVWYWx1ZSB8fCAnJzsKICAgICAgaWYgKHYuaW5kZXhPZignQVZBTlpBVE8nKSA-IC0xKSB7IG91dC5wdXNoKCc8IS0tJyArIHYgKyAnLS0-Jyk7IG91dC5wdXNoKCcnKTsgYnJlYWs7IH0KICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgdmFyIHNjb3BlID0gZG9jLmdldEVsZW1lbnRCeUlkKCdhdnotcmVwJyk7CiAgICAgIHZhciBzdHlsZSA9IGFsbChkb2MsICdzdHlsZScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcjYXZ6LXJlcCAuY2FzZS1ncmlkJykgPiAtMTsgfSlbMF07CiAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ2luaXRDaHJvbmljbGUnKSA-IC0xOyB9KVswXTsKICAgICAgdmFyIGZvbnRMaW5rID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJyk7CgogICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6ICNhdnotcmVwJyk7CiAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgnPHN0eWxlPiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgIHdyaXRlQWxsKGRvYywgc2NvcGUsIGQpOwogICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQpOwogICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgZCk7CiAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICB2YXIgaGVhZCA9IFsKICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4nLAogICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPicsCiAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9pLndmb2xpby5ydSIgY3Jvc3NvcmlnaW4-JywKICAgICAgICBBVlpfRk9OVF9MSU5LCiAgICAgIF07CgogICAgICB2YXIgdGV4dCA9IGNvbW1lbnRzKGRvYykuY29uY2F0KGhlYWQpLmNvbmNhdChbCiAgICAgICAgJycsCiAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAnJywKICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgIHNjLnRleHQsCiAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAnJywKICAgICAgICAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nLAogICAgICAgIGxkLnRleHQsCiAgICAgICAgJzwnICsgJy9zY3JpcHQ-JwogICAgICBdKS5qb2luKCdcbicpOwoKICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgbWlzc2VkOiBzYy5taXNzZWQgfTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLW91dCcpOwogICAgdGEudmFsdWUgPSB0ZXh0OyB0YS5zZWxlY3QoKTsKICAgIHZhciBvayA9IGZhbHNlOwogICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgaWYgKG9rKSB7IG1zZyhub3RlKTsgcmV0dXJuOyB9CiAgICAgIC8qINCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L3QtdC70YzQt9GPINGC0LXRgNGP0YLRjCDQstC80LXRgdGC0LUg0YEg0YHQvtC-0LHRidC10L3QuNC10Lwg0L7QsSDRg9GB0L_QtdGF0LU6CiAgICAgICAgINC10YHQu9C4INCx0YPRhNC10YAg0L3QtSDRgdGA0LDQsdC-0YLQsNC7LCDRh9C10LvQvtCy0LXQuiDQstGB0ZEg0YDQsNCy0L3QviDQtNC-0LvQttC10L0g0LjRhSDRg9Cy0LjQtNC10YLRjC4gKi8KICAgICAgdmFyIG1hbnVhbCA9ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4gKENtZCtDKS4gJzsKICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUpOyB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9KTsKICAgICAgfSBlbHNlIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9CiAgfQoKICBmdW5jdGlvbiBidWlsZCgpIHsKICAgIGhhcnZlc3QoKTsKICAgIHZhciBzdHVicyA9IGNmZy5jYXNlcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuY2FwID09PSBDQVBfU1RVQjsgfSkubGVuZ3RoOwogICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgIGFzc2VtYmxlKGNmZykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0Log0YDQtdC_0L7RgNGC0LDQttC10Lkg0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuICcgKwogICAgICAgICfQodC-0LHRi9GC0LjQuTogJyArIGNmZy5jYXNlcy5pdGVtcy5sZW5ndGggKyAnLic7CiAgICAgIGlmIChzdHVicykgbm90ZSArPSAnINCS0J3QmNCc0JDQndCY0JU6INGDICcgKyBzdHVicyArICcg0LrQsNGA0YLQvtGH0LXQuiDQv9C-0LTQv9C40YHRjCDQvtGB0YLQsNC70LDRgdGMINC30LDQs9C-0YLQvtCy0LrQvtC5IMKrJyArIENBUF9TVFVCICsgJ8K7Lic7CiAgICAgIGlmIChyZXMubWlzc2VkLmxlbmd0aCkgbm90ZSArPSAnINCd0LUg0L3QsNC50LTQtdC90L4g0LIg0YHQutGA0LjQv9GC0LU6ICcgKyByZXMubWlzc2VkLmpvaW4oJywgJykgKyAnLic7CiAgICAgIGNvcHkocmVzLnRleHQsIG5vdGUpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzZWxmVGVzdCgpIHsKICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgdmFyIHNuYXBzaG90ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgIGFzc2VtYmxlKHNuYXBzaG90KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MuZ2V0RWxlbWVudEJ5SWQoJ2F2ei1yZXAnKSk7CiAgICAgIHZhciBzYyA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignaW5pdENocm9uaWNsZScpID4gLTE7IH0pWzBdOwogICAgICBpZiAoc2MpIHJlYWRTY3JpcHRCaXRzKHNjLnRleHRDb250ZW50LCBhZ2Fpbik7CiAgICAgIHJlYWRMZEV4dHJhcyhkb2MsIGFnYWluKTsKICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF0udGV4dENvbnRlbnQpOwogICAgICAgICAgdmFyIGYgPSAob1snQGdyYXBoJ10gfHwgW10pLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0ZBUVBhZ2UnOyB9KVswXTsKICAgICAgICAgIGYubWFpbkVudGl0eS5mb3JFYWNoKGZ1bmN0aW9uIChxLCBpKSB7CiAgICAgICAgICAgIGlmIChhZ2Fpbi5mYXEuaXRlbXNbaV0pIGFnYWluLmZhcS5pdGVtc1tpXS5zY2hlbWFBID0gcS5hY2NlcHRlZEFuc3dlci50ZXh0OwogICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgfSkoKTsKICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShzbmFwc2hvdCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgZWxzZSB7CiAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgIH0KICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogIH0KCiAgZHJhdygpOwogIHJldHVybiAn0J_QsNC90LXQu9GMINGA0LXQv9C-0YDRgtCw0LbQtdC5INC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJwcm9kdWN0Iix0aXRsZToi0J_QsNC90LXQu9GMINC_0YDQtdC00LzQtdGC0L3QvtC5INGB0YrRkdC80LrQuCIsc2hvcnQ6ItCf0YDQtdC00LzQtdGC0L3QsNGPIixoaW50OiLRgNCw0LHQvtGC0YssINGH0YLQviDRgdC90LjQvNCw0Y4sINC_0YDQvtGG0LXRgdGBLCDQstC-0L_RgNC-0YHRiyIscGFnZXM6WyIvcHJvZHVjdC1wb3J0Zm9saW8iXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0J_QoNCV0JTQnNCV0KLQndCe0Jkg0KHQqtCB0JzQmtCYICB2MSDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvcHJvZHVjdC1wb3J0Zm9saW8KCiAgINCh0YXQtdC80LAg0L7RgdGC0LDQu9GM0L3Ri9GFINGB0YLRgNCw0L3QuNGGOiDRh9C40YLQsNC10YIg0LbQuNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCCiAgINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLLCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0Log0YbQtdC70LjQutC-0LwuCgogICDQntGC0LvQuNGH0LjQtSDQvtGCINC_0YDQvtGH0LjRhSDQv9Cw0L3QtdC70LXQuTog0YDQsNC30LzQtdGC0LrQsCBGQVFQYWdlINGB0L7QsdC40YDQsNC10YLRgdGPCiAgINC40Lcg0LLQuNC00LjQvNC-0LPQviDRgtC10LrRgdGC0LAg0LLQvtC_0YDQvtGB0L7QsiDQuCDQvtGC0LLQtdGC0L7Qsiwg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-LgogICBHb29nbGUg0LfQsNGB0YfQuNGC0YvQstCw0LXRgiBGQVEg0YLQvtC70YzQutC-INGC0L7Qs9C00LAsINC60L7Qs9C00LAg0YHQvtC00LXRgNC20LjQvNC-0LUKICAg0YDQsNC30LzQtdGC0LrQuCDQtdGB0YLRjCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0LTQvtGB0LvQvtCy0L3QviDigJQg0L_QtdGA0LXRgdC60LDQtyDQvdC1INCz0L7QtNC40YLRgdGPLgogICDQn9C-0Y3RgtC-0LzRgyDQvtGC0LTQtdC70YzQvdC-0LPQviDQv9C-0LvRjyDCq9C-0YLQstC10YIg0LTQu9GPINC_0L7QuNGB0LrQsMK7INC30LTQtdGB0Ywg0L3QtdGCLAogICDQuCDRgNCw0LfQvtC50YLQuNGB0Ywg0LjQvCDQvdC10YfQtdC8LgoKICAg0KDQsNC30LTQtdC70LAg0YEg0LDQu9GM0LHQvtC80LDQvNC4INGDINC_0YDQtdC00LzQtdGC0LrQuCDQvdC10YIsINC_0L7QtNGC0Y_Qs9C40LLQsNGC0Ywg0L3QtdC-0YLQutGD0LTQsDoKICAg0YTQvtGC0L7Qs9GA0LDRhNC40Lgg0LfQsNC00LDRjtGC0YHRjyDQsNC00YDQtdGB0LDQvNC4INCy0YDRg9GH0L3Rg9GOLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQsCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0LAsINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQkiA8aGVhZD4gd2ZvbGlvINGB0LLQvtGPINGB0YHRi9C70LrQsCDQvdCwIEpvc3QvUnViaWsg0L7RgiDRgtC10LzRiywg0Lgg0L7QvdCwINGB0YLQvtC40YIg0KDQkNCd0KzQqNCVCiAgICAg0L3QsNGI0LXQuTog0L_QsNC90LXQu9GMINCx0YDQsNC70LAg0L_QtdGA0LLRg9GOINC_0L7QtNGF0L7QtNGP0YnRg9GOINC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60L7QuSDQv9C-0LTQvNC10L3Rj9C70LAKICAgICDQvdCw0YfQtdGA0YLQsNC90LjRjyDQsdC70L7QutCwINC90LAg0YLQtdC80LjQvdGLLiDQndCw0LHQvtGAINCy0LXRgdC-0LIg0LfQsNC00LDQvSBDU1Mg0LHQu9C-0LrQsCwg0L_QvtGN0YLQvtC80YMKICAgICDQtNC10YDQttC40Lwg0LXQs9C-INC30LTQtdGB0YwuINCc0LXQvdGP0LXRgtGB0Y8g0LTQuNC30LDQudC9IOKAlCDQvNC10L3Rj9C10YLRgdGPINGN0YLQsCDRgdGC0YDQvtC60LAuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMjAwOzMwMDs0MDA7NTAwOzYwMCcgKwogICAgJyZhbXA7ZmFtaWx5PVJ1YmlrOndnaHRAMTAwOzIwMDszMDAmYW1wO2Rpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4nOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLCDQuCDQvdCw0LPRgNCw0LTRiyDQvNC-0LPRg9GCINC90LUg0LfQsNGB0YfQuNGC0LDRgtGM0YHRjy4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0Y3RgtC4INGD0LfQu9GLCiAgICAg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAyNCDQsNCy0LPRg9GB0YLQsCAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTkiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogItC-0YIgMTQgOTAwIOKCvSIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enEtcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIGxpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6LXBkJyk7CiAgaWYgKCFsaXZlKSB7IGFsZXJ0KCdBVlo6INC90LAg0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbQtSDQvdC10YIg0LHQu9C-0LrQsCAjYXZ6LXBkJyk7IHJldHVybjsgfQoKICBmdW5jdGlvbiBvbmUoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWwpOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9IH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGh0bWwoZWwpIHsgcmV0dXJuIGVsID8gZWwuaW5uZXJIVE1MIDogJyc7IH0KICBmdW5jdGlvbiBvd25UZXh0KGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgcyA9ICcnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSBzICs9IGVsLmNoaWxkTm9kZXNbaV0ubm9kZVZhbHVlOwogICAgfQogICAgcmV0dXJuIHMucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogIH0KICBmdW5jdGlvbiBzZWMoc2NvcGUsIG5hbWUpIHsgcmV0dXJuIG9uZShzY29wZSwgJ3NlY3Rpb24uJyArIG5hbWUpOyB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICB2YXIgcHJpY2UgPSBvbmUoc2NvcGUsICcubGVkZS1wcmljZScpOwogICAgdmFyIHdvcmtzID0gc2VjKHNjb3BlLCAnd29ya3MnKTsKICAgIHZhciBzY29wZTIgPSBzZWMoc2NvcGUsICdzY29wZScpOwogICAgdmFyIGZsb3cgPSBzZWMoc2NvcGUsICdmbG93Jyk7CiAgICB2YXIgZmFxID0gc2VjKHNjb3BlLCAnZmFxJyk7CgogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IG93blRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSksCiAgICAgICAgbGluZTE6IHQobGluZXNbMF0pLAogICAgICAgIGxpbmUyOiB0KGxpbmVzWzFdKSwKICAgICAgICBsaW5lMzogbGluZXNbMl0gPyB0KG9uZShsaW5lc1syXSwgJ2VtJykgfHwgbGluZXNbMl0pIDogJycKICAgICAgfSwKICAgICAgbGVkZTogdChvbmUoc2NvcGUsICcubGVkZScpKSwKICAgICAgcHJpY2U6IHsgdGV4dDogcHJpY2UgPyBvd25UZXh0KHByaWNlKSA6ICcnLCBocmVmOiBwcmljZSA_IChwcmljZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJykgOiAnJyB9LAogICAgICB0aWNrZXI6IFtdLAogICAgICB3b3JrczogewogICAgICAgIGxhYmVsOiB0KG9uZSh3b3JrcywgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUod29ya3MsICcuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbCh3b3JrcywgJy5jZWxsJykubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpLCB2aWQgPSBvbmUoYywgJ3ZpZGVvJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0aXRsZTogdChvbmUoYywgJ2ZpZ2NhcHRpb24gYicpKSwKICAgICAgICAgICAgY2FwOiB0KG9uZShjLCAnZmlnY2FwdGlvbiBzcGFuJykpLAogICAgICAgICAgICBpbWc6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJycsCiAgICAgICAgICAgIGFsdDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgdmlkZW86IHZpZCA_ICh2aWQuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgcG9zdGVyOiB2aWQgPyAodmlkLmdldEF0dHJpYnV0ZSgncG9zdGVyJykgfHwgJycpIDogJycKICAgICAgICAgIH07CiAgICAgICAgfSksCiAgICAgICAgbW9yZTogYWxsKHdvcmtzLCAnLndvcmtzLW1vcmUgYScpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogb3duVGV4dChhKSwgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHNjb3BlOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlMiwgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoc2NvcGUyLCAnLmgyJykpLAogICAgICAgIGNvbHM6IGFsbChzY29wZTIsICcuc2NvcGUtY29sJykubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICByZXR1cm4geyB0aXRsZTogdChvbmUoYywgJ2gzJykpLCBpdGVtczogYWxsKGMsICdsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIGh0bWwobGkpOyB9KSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGZsb3c6IHsKICAgICAgICBsYWJlbDogdChvbmUoZmxvdywgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoZmxvdywgJy5oMicpKSwKICAgICAgICBpdGVtczogYWxsKGZsb3csICcuZmxvdy1pdGVtJykubWFwKGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICByZXR1cm4geyBudW06IHQob25lKGYsICcuZmxvdy1udW0nKSksIHRpdGxlOiB0KG9uZShmLCAnaDMnKSksIHRleHQ6IHQob25lKGYsICdwJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgZmFxOiB7CiAgICAgICAgbGFiZWw6IHQob25lKGZhcSwgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoZmFxLCAnLmgyJykpLAogICAgICAgIGl0ZW1zOiBhbGwoZmFxLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgcmV0dXJuIHsgcTogb3duVGV4dChvbmUoaXQsICcuZmFxLXEnKSksIGE6IGh0bWwob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgY3RhOiB7CiAgICAgICAgdGl0bGU6IGh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSksCiAgICAgICAgYnV0dG9uczogYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKVswXSksIGhyZWY6IGIuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBtZXRhOiB7IHRpdGxlOiAnJywgZGVzYzogJycgfQogICAgfTsKICB9CgogIHZhciBjZmcgPSByZWFkQ2ZnKGxpdmUpOwoKICBmdW5jdGlvbiByZWFkU2NyaXB0Qml0cyhzcmMsIGMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgdGl0bGUgPSAnKCg_OlteJ1xcXXxcXC4pKiknLyk7CiAgICBpZiAobSkgYy5tZXRhLnRpdGxlID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBkZXNjID0gJygoPzpbXidcXF18XFwuKSopJy8pOwogICAgaWYgKG0pIGMubWV0YS5kZXNjID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBpdGVtcyA9IFxbKFtcc1xTXSo_KVxdOy8pOwogICAgaWYgKG0pIHsKICAgICAgYy50aWNrZXIgPSAobVsxXS5tYXRjaCgvJygoPzpbXidcXF18XFwuKSopJy9nKSB8fCBbXSkubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgICAgcmV0dXJuIHMuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcJy9nLCAiJyIpOwogICAgICB9KTsKICAgIH0KICB9CiAgdmFyIGxpdmVTY3JpcHQgPSBhbGwoZG9jdW1lbnQsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3BkLXRpY2tlcicpID4gLTE7CiAgfSlbMF07CiAgaWYgKGxpdmVTY3JpcHQpIHJlYWRTY3JpcHRCaXRzKGxpdmVTY3JpcHQudGV4dENvbnRlbnQsIGNmZyk7CgogIC8qIC0tLS0tLS0tLS0g0L7QutC90L4gLS0tLS0tLS0tLSAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnpxLXJvb3QsI2F2enEtcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2enEtcm9vdCBpbnB1dCwjYXZ6cS1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2enEtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6cS13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpxLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enEtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2enEtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6cS1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1mIGlucHV0LCNhdnpxLXJvb3QgLmF2enEtZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnpxLXJvb3QgLmF2enEtcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2enEtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtaW1nPmltZ3t3aWR0aDo3OHB4O2hlaWdodDo3OHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtaW1nIC5ne2ZsZXg6MX0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtbm90ZXtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjZweCAwIDB9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtd2Fybntjb2xvcjojYTM3ODAwICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6cS1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINC70LjRiNC90LjQuSDQv9C10YDQtdC90L7RgTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIg0L_QtdGA0LLRi9C5INC_0L7RgdC70LUgPHRleHRhcmVhPiAqLwogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnpxLWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsgdGFnICsgJzwvZGl2Pic7CiAgfQoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvb3QuaWQgPSAnYXZ6cS1yb290JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpxLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnpxLXdpbiI-JyArCiAgICAnPGRpdiBpZD0iYXZ6cS1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC_0YDQtdC00LzQtdGC0L3QvtC5INGB0YrRkdC80LrQuDwvaDI-JyArCiAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cS1iIiBpZD0iYXZ6cS1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpxLWJvZHkiPic7CgogIC8qINCg0JDQkdCe0KLQqyAqLwogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpxLXNlYyIgb3Blbj48c3VtbWFyeT7QoNCw0LHQvtGC0YsgKCcgKyBjZmcud29ya3MuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cS1pbiI-JyArCiAgICAnPHAgY2xhc3M9ImF2enEtaGludCI-0KDQsNC30LTQtdC70LAg0YEg0LDQu9GM0LHQvtC80LDQvNC4INGDINC_0YDQtdC00LzQtdGC0LrQuCDQvdC10YIsINC_0L7RjdGC0L7QvNGDINGE0L7RgtC-0LPRgNCw0YTQuNC4INC30LDQtNCw0Y7RgtGB0Y8g0LDQtNGA0LXRgdCw0LzQuC4gJyArCiAgICAn0KHQutC-0L_QuNGA0YPQudGC0LUg0LDQtNGA0LXRgSDQvdGD0LbQvdC-0LPQviDRgdC90LjQvNC60LAg0Lgg0LLRgdGC0LDQstGM0YLQtSDQsiDQv9C-0LvQtSDigJQg0L_RgNC10LLRjNGOINC-0LHQvdC-0LLQuNGC0YHRjyDRgdGA0LDQt9GDLjwvcD4nICsKICAgICc8ZGl2IGNsYXNzPSJhdnpxLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICd3b3Jrcy5sYWJlbCcsIGNmZy53b3Jrcy5sYWJlbCkgKwogICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICd3b3Jrcy5oMicsIGNmZy53b3Jrcy5oMikgKyAnPC9kaXY-JzsKICBjZmcud29ya3MuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodywgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cS1jYXJkIj48aDQ-0KDQsNCx0L7RgtCwICcgKyAoaSArIDEpICsgKHcudmlkZW8gPyAnIOKAlCDQstC40LTQtdC-JyA6ICcnKSArICc8L2g0PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy50aXRsZScsIHcudGl0bGUpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5jYXAnLCB3LmNhcCkgKyAnPC9kaXY-JzsKICAgIGlmICh3LnZpZGVvKSB7CiAgICAgIGggKz0gZmllbGQoJ9CQ0LTRgNC10YEg0LLQuNC00LXQvicsICd3b3Jrcy5pdGVtcy4nICsgaSArICcudmlkZW8nLCB3LnZpZGVvKSArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enEtZiI-PGxhYmVsPtCe0LHQu9C-0LbQutCwINCy0LjQtNC10L48L2xhYmVsPjxkaXYgY2xhc3M9ImF2enEtaW1nIj4nICsKICAgICAgICAnPGltZyBzcmM9IicgKyBlc2Mody5wb3N0ZXIpICsgJyIgZGF0YS1wcmV2PSJ3b3Jrcy5pdGVtcy4nICsgaSArICcucG9zdGVyIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-PGlucHV0IGRhdGEtcD0id29ya3MuaXRlbXMuJyArIGkgKyAnLnBvc3RlciIgdmFsdWU9IicgKyBlc2Mody5wb3N0ZXIpICsgJyI-PC9kaXY-PC9kaXY-PC9kaXY-JzsKICAgIH0gZWxzZSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtZiI-PGxhYmVsPtCk0L7RgtC-0LPRgNCw0YTQuNGPPC9sYWJlbD48ZGl2IGNsYXNzPSJhdnpxLWltZyI-JyArCiAgICAgICAgJzxpbWcgc3JjPSInICsgZXNjKHcuaW1nKSArICciIGRhdGEtcHJldj0id29ya3MuaXRlbXMuJyArIGkgKyAnLmltZyI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPjxpbnB1dCBkYXRhLXA9IndvcmtzLml0ZW1zLicgKyBpICsgJy5pbWciIHZhbHVlPSInICsgZXNjKHcuaW1nKSArICciPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICAgIGZpZWxkKCdBbHQt0YLQtdC60YHRgiAo0LLQuNC00LXQvSDQv9C-0LjRgdC60L7QstC40LrQsNC8KScsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuYWx0Jywgdy5hbHQpOwogICAgfQogICAgaCArPSAnPC9kaXY-JzsKICB9KTsKICBjZmcud29ya3MubW9yZS5mb3JFYWNoKGZ1bmN0aW9uIChtLCBpKSB7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpxLWNhcmQiPjxoND7QodGB0YvQu9C60LAg0L_QvtC0INGB0LXRgtC60L7QuSAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2enEtcm93Ij4nICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnd29ya3MubW9yZS4nICsgaSArICcudGV4dCcsIG0udGV4dCkgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICd3b3Jrcy5tb3JlLicgKyBpICsgJy5ocmVmJywgbS5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogIH0pOwogIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAvKiDQqNCQ0J_QmtCQICovCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enEtc2VjIj48c3VtbWFyeT7QqNCw0L_QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enEtaW4iPicgKwogICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAnPGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKyBmaWVsZCgn0KHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDInLCAnaGVyby5saW5lMicsIGNmZy5oZXJvLmxpbmUyKSArICc8L2Rpdj4nICsKICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMyAo0LrRg9GA0YHQuNCyKScsICdoZXJvLmxpbmUzJywgY2ZnLmhlcm8ubGluZTMpICsKICAgIGZpZWxkKCfQn9C-0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnbGVkZScsIGNmZy5sZWRlLCAnYXJlYScpICsKICAgICc8ZGl2IGNsYXNzPSJhdnpxLXJvdyI-JyArIGZpZWxkKCfQodGB0YvQu9C60LAg0L_QvtC0INGC0LXQutGB0YLQvtC8IOKAlCDQvdCw0LTQv9C40YHRjCcsICdwcmljZS50ZXh0JywgY2ZnLnByaWNlLnRleHQpICsKICAgIGZpZWxkKCfQodGB0YvQu9C60LAg0L_QvtC0INGC0LXQutGB0YLQvtC8IOKAlCDQsNC00YDQtdGBJywgJ3ByaWNlLmhyZWYnLCBjZmcucHJpY2UuaHJlZikgKyAnPC9kaXY-JyArCiAgICBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwIOKAlCDRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOJywgJ3RpY2tlckxpbmUnLCBjZmcudGlja2VyLmpvaW4oJywgJyksICdhcmVhJykgKwogICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAvKiDQp9Ci0J4g0KHQndCY0JzQkNCuICovCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enEtc2VjIj48c3VtbWFyeT7Qp9GC0L4g0YHQvdC40LzQsNGOPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enEtaW4iPicgKwogICAgJzxkaXYgY2xhc3M9ImF2enEtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ3Njb3BlLmxhYmVsJywgY2ZnLnNjb3BlLmxhYmVsKSArCiAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ3Njb3BlLmgyJywgY2ZnLnNjb3BlLmgyKSArICc8L2Rpdj4nOwogIGNmZy5zY29wZS5jb2xzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtY2FyZCI-PGg0PtCa0L7Qu9C-0L3QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0LrQvtC70L7QvdC60LgnLCAnc2NvcGUuY29scy4nICsgaSArICcudGl0bGUnLCBjLnRpdGxlKTsKICAgIGMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAobGksIGspIHsKICAgICAgaCArPSBmaWVsZCgn0J_Rg9C90LrRgiAnICsgKGsgKyAxKSArICcgKNC80L7QttC90L4gJmx0O2ImZ3Q7KScsICdzY29wZS5jb2xzLicgKyBpICsgJy5pdGVtcy4nICsgaywgbGksICdhcmVhJyk7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2Pic7CiAgfSk7CiAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogIC8qINCf0KDQntCm0JXQodChICovCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enEtc2VjIj48c3VtbWFyeT7QmtCw0Log0L_RgNC-0YXQvtC00LjRgiDRgdGK0ZHQvNC60LAgKCcgKyBjZmcuZmxvdy5pdGVtcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpxLWluIj4nICsKICAgICc8ZGl2IGNsYXNzPSJhdnpxLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdmbG93LmxhYmVsJywgY2ZnLmZsb3cubGFiZWwpICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAnZmxvdy5oMicsIGNmZy5mbG93LmgyKSArICc8L2Rpdj4nOwogIGNmZy5mbG93Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtY2FyZCI-PGg0PtCo0LDQsyAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKyBmaWVsZCgn0J3QvtC80LXRgCcsICdmbG93Lml0ZW1zLicgKyBpICsgJy5udW0nLCBmLm51bSkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ2Zsb3cuaXRlbXMuJyArIGkgKyAnLnRpdGxlJywgZi50aXRsZSkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2Zsb3cuaXRlbXMuJyArIGkgKyAnLnRleHQnLCBmLnRleHQsICdhcmVhJykgKyAnPC9kaXY-JzsKICB9KTsKICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgLyog0JLQntCf0KDQntCh0KsgKi8KICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cS1zZWMiPjxzdW1tYXJ5PtCS0L7Qv9GA0L7RgdGLINC4INC-0YLQstC10YLRiyAoJyArIGNmZy5mYXEuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cS1pbiI-JyArCiAgICAnPHAgY2xhc3M9ImF2enEtaGludCI-0J7RgtCy0LXRgiDQvtC00LjQvTog0L7QvSDQttC1INGD0YXQvtC00LjRgiDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvi4gJyArCiAgICAn0KLQsNC6INGC0YDQtdCx0YPQtdGCIEdvb2dsZSDigJQg0L_QtdGA0LXRgdC60LDQtyDRgdCy0L7QuNC80Lgg0YHQu9C-0LLQsNC80Lgg0L7QvSDQvdC1INC30LDRgdGH0LjRgtGL0LLQsNC10YIuPC9wPicgKwogICAgJzxkaXYgY2xhc3M9ImF2enEtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2ZhcS5sYWJlbCcsIGNmZy5mYXEubGFiZWwpICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAnZmFxLmgyJywgY2ZnLmZhcS5oMikgKyAnPC9kaXY-JzsKICBjZmcuZmFxLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ2ZhcS5pdGVtcy4nICsgaSArICcucScsIGYucSkgKwogICAgICBmaWVsZCgn0J7RgtCy0LXRgiAo0LzQvtC20L3QviBIVE1MOiAmbHQ7cCZndDssICZsdDthJmd0OyknLCAnZmFxLml0ZW1zLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgfSk7CiAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogIC8qIENUQSArIFNFTyAqLwogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpxLXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyINC4INC_0L7QuNGB0LrQvtCy0LjQutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enEtaW4iPicgKwogICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDQv9GA0LjQt9GL0LLQsCAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdjdGEudGl0bGUnLCBjZmcuY3RhLnRpdGxlKTsKICBjZmcuY3RhLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cS1jYXJkIj48aDQ-0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKwogICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdjdGEuYnV0dG9ucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdjdGEuYnV0dG9ucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-PC9kaXY-JzsKICB9KTsKICBoICs9IGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YHRgtGA0LDQvdC40YbRiycsICdtZXRhLnRpdGxlJywgY2ZnLm1ldGEudGl0bGUpICsKICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnbWV0YS5kZXNjJywgY2ZnLm1ldGEuZGVzYywgJ2FyZWEnKSArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enEtZm9vdCI-JyArCiAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cS1iIHAiIGlkPSJhdnpxLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enEtYiIgaWQ9ImF2enEtdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAnPHNwYW4gaWQ9ImF2enEtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpxLW91dCIgc3BlbGxjaGVjaz0iZmFsc2UiICcgKwogICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgcm9vdC5pbm5lckhUTUwgPSBoOwogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enEtY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwogIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgaWYgKCFwKSByZXR1cm47CiAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOwogIH0pOwoKICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgfQogIGZ1bmN0aW9uIGhhcnZlc3QoKSB7CiAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgdmFyIHAgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAocCA9PT0gJ3RpY2tlckxpbmUnKSB7CiAgICAgICAgY2ZnLnRpY2tlciA9IGVsLnZhbHVlLnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnRyaW0oKTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzZXRQYXRoKGNmZywgcCwgZWwudmFsdWUpOwogICAgfSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogIC8qINCf0LXRgNC10L_QuNGB0YvQstCw0LXQvCDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INGC0LXQutGB0YIg0Y3Qu9C10LzQtdC90YLQsCwg0L3QtSDRgtGA0L7Qs9Cw0Y8g0LLQu9C-0LbQtdC90L3Ri9C1CiAgICAg0LfQvdCw0YfQutC4INC4INC40YUg0L_QvtGA0Y_QtNC-0LouINCf0LjRiNC10Lwg0LIg0YLQvtGCINGC0LXQutGB0YLQvtCy0YvQuSDRg9C30LXQuywg0LPQtNC1INGC0LXQutGB0YIKICAgICDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQtdGB0YLRjCwg0LAg0L3QtSDQsiDQv9C10YDQstGL0Lkg0L_QvtC_0LDQstGI0LjQudGB0Y86INCyINGA0LDQt9C80LXRgtC60LUg0LLQuNC00LAKICAgICBgPHNwYW4gY2xhc3M9Imljb24iPnN3aXBlPC9zcGFuPiDQv9C-0LTQv9C40YHRjGAg0L_QtdGA0LLRi9C5INGD0LfQtdC7IOKAlCDRjdGC0L4KICAgICDQvtGC0YHRgtGD0L8g0L_QtdGA0LXQtCDQt9C90LDRh9C60L7QvCwg0Lgg0LfQsNC_0LjRgdGMINCyINC90LXQs9C-INC_0LXRgNC10LHRgNCw0YHRi9Cy0LDQu9CwINC_0L7QtNC_0LjRgdGMCiAgICAg0LLQv9C10YDRkdC0INC30L3QsNGH0LrQsC4gKi8KICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgdmFyIHRleHRzID0gW10sIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgIH0KICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgIHZhciBtYWluID0gbnVsbDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgfQogICAgaWYgKCFtYWluKSBtYWluID0gdGV4dHNbMF07CiAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgdmFyIHBvc3QgPSAocmF3Lm1hdGNoKC9ccyokLykgfHwgWycnXSlbMF07CiAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBzZXRQbGFpbihlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC50ZXh0Q29udGVudCA9IHY7IH0KICBmdW5jdGlvbiBzZXRIdG1sKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLmlubmVySFRNTCA9IHY7IH0KCiAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgIHNldFBsYWluKGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgaWYgKGxpbmVzWzJdKSBzZXRQbGFpbihvbmUobGluZXNbMl0sICdlbScpIHx8IGxpbmVzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmxlZGUnKSwgZC5sZWRlKTsKICAgIHZhciBwcmljZSA9IG9uZShzY29wZSwgJy5sZWRlLXByaWNlJyk7CiAgICBpZiAocHJpY2UpIHsgaWYgKGQucHJpY2UuaHJlZikgcHJpY2Uuc2V0QXR0cmlidXRlKCdocmVmJywgZC5wcmljZS5ocmVmKTsgc2V0VGV4dChwcmljZSwgZC5wcmljZS50ZXh0KTsgfQoKICAgIHZhciB3b3JrcyA9IHNlYyhzY29wZSwgJ3dvcmtzJyk7CiAgICBzZXRQbGFpbihvbmUod29ya3MsICcubGFiZWwnKSwgZC53b3Jrcy5sYWJlbCk7CiAgICBzZXRIdG1sKG9uZSh3b3JrcywgJy5oMicpLCBkLndvcmtzLmgyKTsKICAgIGFsbCh3b3JrcywgJy5jZWxsJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICB2YXIgdyA9IGQud29ya3MuaXRlbXNbaV07IGlmICghdykgcmV0dXJuOwogICAgICBzZXRQbGFpbihvbmUoYywgJ2ZpZ2NhcHRpb24gYicpLCB3LnRpdGxlKTsKICAgICAgc2V0UGxhaW4ob25lKGMsICdmaWdjYXB0aW9uIHNwYW4nKSwgdy5jYXApOwogICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpLCB2aWQgPSBvbmUoYywgJ3ZpZGVvJyk7CiAgICAgIGlmIChpbSkgeyBpZiAody5pbWcpIGltLnNldEF0dHJpYnV0ZSgnc3JjJywgdy5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHcuYWx0KTsgfQogICAgICBpZiAodmlkKSB7CiAgICAgICAgaWYgKHcudmlkZW8pIHZpZC5zZXRBdHRyaWJ1dGUoJ3NyYycsIHcudmlkZW8pOwogICAgICAgIGlmICh3LnBvc3RlcikgdmlkLnNldEF0dHJpYnV0ZSgncG9zdGVyJywgdy5wb3N0ZXIpOwogICAgICB9CiAgICB9KTsKICAgIGFsbCh3b3JrcywgJy53b3Jrcy1tb3JlIGEnKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgIHZhciBtID0gZC53b3Jrcy5tb3JlW2ldOyBpZiAoIW0pIHJldHVybjsKICAgICAgaWYgKG0uaHJlZikgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtLmhyZWYpOwogICAgICBzZXRUZXh0KGEsIG0udGV4dCk7CiAgICB9KTsKCiAgICB2YXIgc2MgPSBzZWMoc2NvcGUsICdzY29wZScpOwogICAgc2V0UGxhaW4ob25lKHNjLCAnLmxhYmVsJyksIGQuc2NvcGUubGFiZWwpOwogICAgc2V0SHRtbChvbmUoc2MsICcuaDInKSwgZC5zY29wZS5oMik7CiAgICBhbGwoc2MsICcuc2NvcGUtY29sJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICB2YXIgY29sID0gZC5zY29wZS5jb2xzW2ldOyBpZiAoIWNvbCkgcmV0dXJuOwogICAgICBzZXRQbGFpbihvbmUoYywgJ2gzJyksIGNvbC50aXRsZSk7CiAgICAgIGFsbChjLCAnbGknKS5mb3JFYWNoKGZ1bmN0aW9uIChsaSwgaykgewogICAgICAgIGlmICh0eXBlb2YgY29sLml0ZW1zW2tdID09PSAnc3RyaW5nJykgc2V0SHRtbChsaSwgY29sLml0ZW1zW2tdKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICB2YXIgZmwgPSBzZWMoc2NvcGUsICdmbG93Jyk7CiAgICBzZXRQbGFpbihvbmUoZmwsICcubGFiZWwnKSwgZC5mbG93LmxhYmVsKTsKICAgIHNldEh0bWwob25lKGZsLCAnLmgyJyksIGQuZmxvdy5oMik7CiAgICBhbGwoZmwsICcuZmxvdy1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICB2YXIgcyA9IGQuZmxvdy5pdGVtc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgIHNldFBsYWluKG9uZShmLCAnLmZsb3ctbnVtJyksIHMubnVtKTsKICAgICAgc2V0UGxhaW4ob25lKGYsICdoMycpLCBzLnRpdGxlKTsKICAgICAgc2V0UGxhaW4ob25lKGYsICdwJyksIHMudGV4dCk7CiAgICB9KTsKCiAgICB2YXIgZnEgPSBzZWMoc2NvcGUsICdmYXEnKTsKICAgIHNldFBsYWluKG9uZShmcSwgJy5sYWJlbCcpLCBkLmZhcS5sYWJlbCk7CiAgICBzZXRIdG1sKG9uZShmcSwgJy5oMicpLCBkLmZhcS5oMik7CiAgICBhbGwoZnEsICcuZmFxLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICB2YXIgcyA9IGQuZmFxLml0ZW1zW2ldOyBpZiAoIXMpIHJldHVybjsKICAgICAgc2V0VGV4dChvbmUoaXQsICcuZmFxLXEnKSwgcy5xKTsKICAgICAgc2V0SHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSwgcy5hKTsKICAgIH0pOwoKICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSwgZC5jdGEudGl0bGUpOwogICAgYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICB2YXIgcyA9IGQuY3RhLmJ1dHRvbnNbaV07IGlmICghcykgcmV0dXJuOwogICAgICBpZiAocy5ocmVmKSBiLnNldEF0dHJpYnV0ZSgnaHJlZicsIHMuaHJlZik7CiAgICAgIGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHNldFBsYWluKHgsIHMudGV4dCk7IH0pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBqc1N0cihzKSB7IHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgIHZhciBvdXQgPSBzcmMsIG1pc3NlZCA9IFtdOwogICAgZnVuY3Rpb24gc3ViKHJlLCBtYWtlLCBuYW1lKSB7CiAgICAgIGlmICghcmUudGVzdChvdXQpKSB7IG1pc3NlZC5wdXNoKG5hbWUpOyByZXR1cm47IH0KICAgICAgb3V0ID0gb3V0LnJlcGxhY2UocmUsIG1ha2UpOwogICAgfQogICAgc3ViKC8odmFyIHRpdGxlID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS50aXRsZSk7IH0sICfQt9Cw0LPQvtC70L7QstC-0LonKTsKICAgIHN1YigvKHZhciBkZXNjID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS5kZXNjKTsgfSwgJ9C-0L_QuNGB0LDQvdC40LUnKTsKICAgIGlmIChkLnRpY2tlci5sZW5ndGgpIHsKICAgICAgc3ViKC8odmFyIGl0ZW1zID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgICB2YXIgYm9keSA9IGQudGlja2VyLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gJyAgICAgICcgKyBqc1N0cihzKTsgfSkuam9pbignLFxuJyk7CiAgICAgICAgcmV0dXJuIHAxICsgJ1xuJyArIGJvZHkgKyAnXG4gICAgJyArIHAyOwogICAgICB9LCAn0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwJyk7CiAgICB9CiAgICByZXR1cm4geyB0ZXh0OiBvdXQsIG1pc3NlZDogbWlzc2VkIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBidWlsZExkKGRvYywgc2NvcGUsIGQpIHsKICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIgbGQranNvbicgfTsKICAgIHZhciBvOwogICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlIH07IH0KCiAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgc3luY0Nhbm9uKGcpOwogICAgZnVuY3Rpb24gbm9kZShwKSB7IHJldHVybiBnLmZpbHRlcihwKVswXTsgfQoKICAgIHZhciBwYWdlID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjd2VicGFnZScpID4gLTE7IH0pOwogICAgaWYgKHBhZ2UpIHsKICAgICAgaWYgKGQubWV0YS50aXRsZSkgcGFnZS5uYW1lID0gZC5tZXRhLnRpdGxlOwogICAgICBpZiAoZC5tZXRhLmRlc2MpIHBhZ2UuZGVzY3JpcHRpb24gPSBkLm1ldGEuZGVzYzsKICAgICAgLyog0LTQsNGC0LAg0LjQt9C80LXQvdC10L3QuNGPINC-0LHQvdC-0LLQu9GP0LXRgtGB0Y8g0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUg4oCUINC40L3QsNGH0LUg0L7QvdCwCiAgICAgICAgINGD0YHRgtCw0YDQtdC10YIg0Lgg0YHRgtCw0L3QtdGCINCy0YDQsNGC0Ywg0L_QvtC40YHQutC-0LLQuNC60YMg0L4g0YHQstC10LbQtdGB0YLQuCDRgdGC0YDQsNC90LjRhtGLICovCiAgICAgIHBhZ2UuZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgIH0KCiAgICAvKiDQktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0Ysg0LHQtdGA0ZHQvCDQuNC3INGD0LbQtSDRgdC-0LHRgNCw0L3QvdC-0Lkg0YDQsNC30LzQtdGC0LrQuCDRgdGC0YDQsNC90LjRhtGLIOKAlAogICAgICAg0YLQsNC6INGC0LXQutGB0YIg0LIgRkFRUGFnZSDQtNC-0YHQu9C-0LLQvdC-INGB0L7QstC_0LDQtNCw0LXRgiDRgSDQstC40LTQuNC80YvQvC4gKi8KICAgIHZhciBmYXEgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pOwogICAgaWYgKGZhcSkgewogICAgICBmYXEubWFpbkVudGl0eSA9IGFsbChzY29wZSwgJy5mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAgIG5hbWU6IHQob25lKGl0LCAnLmZhcS1xJykpLAogICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsIHRleHQ6IHQob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH0KICAgICAgICB9OwogICAgICB9KTsKICAgIH0KCiAgICB2YXIgbGlzdCA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdJdGVtTGlzdCc7IH0pOwogICAgaWYgKGxpc3QpIHsKICAgICAgdmFyIGNlbGxzID0gYWxsKHNjb3BlLCAnLmNlbGwnKTsKICAgICAgbGlzdC5udW1iZXJPZkl0ZW1zID0gY2VsbHMubGVuZ3RoOwogICAgICB2YXIgc3JjID0gQXJyYXkuaXNBcnJheShsaXN0Lml0ZW1MaXN0RWxlbWVudCkgPyBsaXN0Lml0ZW1MaXN0RWxlbWVudCA6IFtdOwogICAgICBsaXN0Lml0ZW1MaXN0RWxlbWVudCA9IGNlbGxzLm1hcChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciB3YXMgPSAoc3JjW2ldICYmIHNyY1tpXS5pdGVtKSB8fCB7fTsKICAgICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpLCB2aWQgPSBvbmUoYywgJ3ZpZGVvJyk7CiAgICAgICAgdmFyIGl0ZW07CiAgICAgICAgaWYgKHZpZCkgewogICAgICAgICAgaXRlbSA9IHsKICAgICAgICAgICAgJ0B0eXBlJzogJ1ZpZGVvT2JqZWN0JywKICAgICAgICAgICAgbmFtZTogdChvbmUoYywgJ2ZpZ2NhcHRpb24gYicpKSArICcg4oCUICcgKyB0KG9uZShjLCAnZmlnY2FwdGlvbiBzcGFuJykpLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogd2FzLmRlc2NyaXB0aW9uIHx8IHQob25lKGMsICdmaWdjYXB0aW9uIGInKSksCiAgICAgICAgICAgIHRodW1ibmFpbFVybDogdmlkLmdldEF0dHJpYnV0ZSgncG9zdGVyJykgfHwgJycsCiAgICAgICAgICAgIGNvbnRlbnRVcmw6IHZpZC5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8ICcnCiAgICAgICAgICB9OwogICAgICAgICAgLyog0LTQsNGC0YMg0L_Rg9Cx0LvQuNC60LDRhtC40Lgg0LHQtdGA0ZHQvCDQuNC3INC60L7QtNCwINGB0YLRgNCw0L3QuNGG0Ysg0Lgg0L3QuNC60L7Qs9C00LAg0L3QtQogICAgICAgICAgICAg0L_RgNC40LTRg9C80YvQstCw0LXQvDog0LLRi9C00YPQvNCw0L3QvdC-0LUg0YfQuNGB0LvQviDigJQg0Y3RgtC-INC70L7QttC90YvQuSDRhNCw0LrRggogICAgICAgICAgICAg0LIg0LTQsNC90L3Ri9GFINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyICovCiAgICAgICAgICBpZiAod2FzLnVwbG9hZERhdGUpIGl0ZW0udXBsb2FkRGF0ZSA9IHdhcy51cGxvYWREYXRlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpdGVtID0gewogICAgICAgICAgICAnQHR5cGUnOiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICBuYW1lOiB0KG9uZShjLCAnZmlnY2FwdGlvbiBiJykpICsgJyDigJQgJyArIHQob25lKGMsICdmaWdjYXB0aW9uIHNwYW4nKSksCiAgICAgICAgICAgIGNhcHRpb246IGltID8gKGltLmdldEF0dHJpYnV0ZSgnYWx0JykgfHwgJycpIDogJycsCiAgICAgICAgICAgIHVybDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgJ0B0eXBlJzogJ0xpc3RJdGVtJywgcG9zaXRpb246IGkgKyAxLCBpdGVtOiBpdGVtIH07CiAgICAgIH0pOwogICAgfQoKICAgIHZhciBwcmltYXJ5ID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjcHJpbWFyeWltYWdlJykgPiAtMTsgfSk7CiAgICB2YXIgZmlyc3RJbWcgPSBvbmUoc2NvcGUsICcuY2VsbCBpbWcnKTsKICAgIGlmIChwcmltYXJ5ICYmIGZpcnN0SW1nKSB7CiAgICAgIHByaW1hcnkudXJsID0gZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCBwcmltYXJ5LnVybDsKICAgICAgcHJpbWFyeS5jYXB0aW9uID0gZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCBwcmltYXJ5LmNhcHRpb247CiAgICB9CgogICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgNC60LAgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIGZ1bmN0aW9uIGNvbW1lbnRzKGRvYykgewogICAgdmFyIG91dCA9IFtdLCB3ID0gZG9jLmNyZWF0ZVRyZWVXYWxrZXIoZG9jLmJvZHksIDEyOCwgbnVsbCwgZmFsc2UpLCBuOwogICAgd2hpbGUgKChuID0gdy5uZXh0Tm9kZSgpKSkgewogICAgICB2YXIgdiA9IG4ubm9kZVZhbHVlIHx8ICcnOwogICAgICBpZiAodi5pbmRleE9mKCdBVkFOWkFUTy5SVScpID4gLTEpIHsgb3V0LnB1c2goJzwhLS0nICsgdiArICctLT4nKTsgb3V0LnB1c2goJycpOyBicmVhazsgfQogICAgfQogICAgcmV0dXJuIG91dDsKICB9CgogIGZ1bmN0aW9uIGFzc2VtYmxlKGQpIHsKICAgIHJldHVybiBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgc2NvcGUgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoJ2F2ei1wZCcpOwogICAgICB2YXIgc3R5bGUgPSBhbGwoZG9jLCAnc3R5bGUnKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignI2F2ei1wZCAuYmVudG8nKSA-IC0xOyB9KVswXTsKICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZigncGQtdGlja2VyJykgPiAtMTsgfSlbMF07CiAgICAgIHZhciBmb250TGluayA9IGRvYy5xdWVyeVNlbGVjdG9yKCdsaW5rW2hyZWYqPSJjc3MyP2ZhbWlseT0iXScpOwoKICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAjYXZ6LXBkJyk7CiAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgnPHN0eWxlPiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgdmFyIHNjID0gcGF0Y2hTY3JpcHQoc2NyaXB0LnRleHRDb250ZW50LCBkKTsKICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgaWYgKCFsZC50ZXh0KSB0aHJvdyBuZXcgRXJyb3IobGQuZXJyKTsKCiAgICAgIHZhciB0ZXh0ID0gY29tbWVudHMoZG9jKS5jb25jYXQoWwogICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20iPicsCiAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4-JywKICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2kud2ZvbGlvLnJ1IiBjcm9zc29yaWdpbj4nLAogICAgICAgIEFWWl9GT05UX0xJTkssCiAgICAgICAgJycsCiAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAnJywKICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgIHNjLnRleHQsCiAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAnJywKICAgICAgICAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nLAogICAgICAgIGxkLnRleHQsCiAgICAgICAgJzwnICsgJy9zY3JpcHQ-JwogICAgICBdKS5qb2luKCdcbicpOwoKICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgbWlzc2VkOiBzYy5taXNzZWQgfTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpxLW91dCcpOwogICAgdGEudmFsdWUgPSB0ZXh0OyB0YS5zZWxlY3QoKTsKICAgIHZhciBvayA9IGZhbHNlOwogICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgaWYgKG9rKSB7IG1zZyhub3RlKTsgcmV0dXJuOyB9CiAgICAgIC8qINCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L3QtdC70YzQt9GPINGC0LXRgNGP0YLRjCDQstC80LXRgdGC0LUg0YEg0YHQvtC-0LHRidC10L3QuNC10Lwg0L7QsSDRg9GB0L_QtdGF0LU6CiAgICAgICAgINC10YHQu9C4INCx0YPRhNC10YAg0L3QtSDRgdGA0LDQsdC-0YLQsNC7LCDRh9C10LvQvtCy0LXQuiDQstGB0ZEg0YDQsNCy0L3QviDQtNC-0LvQttC10L0g0LjRhSDRg9Cy0LjQtNC10YLRjC4gKi8KICAgICAgdmFyIG1hbnVhbCA9ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4gKENtZCtDKS4gJzsKICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUpOyB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9KTsKICAgICAgfSBlbHNlIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9CiAgfQoKICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpxLWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgIGhhcnZlc3QoKTsKICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICBhc3NlbWJsZShjZmcpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6IC9wcm9kdWN0LXBvcnRmb2xpbyDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICBpZiAocmVzLm1pc3NlZC5sZW5ndGgpIG5vdGUgKz0gJyDQndC1INC90LDQudC00LXQvdC-INCyINGB0LrRgNC40L_RgtC1OiAnICsgcmVzLm1pc3NlZC5qb2luKCcsICcpICsgJy4nOwogICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enEtdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgIHZhciBzbmFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6LXBkJykpOwogICAgICB2YXIgc2MgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3BkLXRpY2tlcicpID4gLTE7IH0pWzBdOwogICAgICBpZiAoc2MpIHJlYWRTY3JpcHRCaXRzKHNjLnRleHRDb250ZW50LCBhZ2Fpbik7CiAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgZWxzZSB7CiAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgIH0KICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC_0YDQtdC00LzQtdGC0L3QvtC5INGB0YrRkdC80LrQuCDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoibWFsZSIsdGl0bGU6ItCf0LDQvdC10LvRjCDQvNGD0LbRgdC60L7QuSDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsc2hvcnQ6ItCc0YPQttGB0LrQsNGPIixoaW50OiLQv9Cw0LrQtdGC0YssINCy0L7Qv9GA0L7RgdGLLCDRgNCw0LHQvtGC0YssINGC0LXQutGB0YLRiyIscGFnZXM6WyIvbXV6aHNrYXlhLWZvdG9zZXNzaXlhLWthemFuIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCc0KPQltCh0JrQntCZINCk0J7QotCe0KHQldCh0KHQmNCYICB2MSDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvbXV6aHNrYXlhLWZvdG9zZXNzaXlhLWthemFuCgogICDQodGF0LXQvNCwINC-0YHRgtCw0LvRjNC90YvRhSDRgdGC0YDQsNC90LjRhjog0YfQuNGC0LDQtdGCINC20LjQstGD0Y4g0YHRgtGA0LDQvdC40YbRgywg0L_QvtC00YHRgtCw0LLQu9GP0LXRggogICDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiywg0LLRi9C00LDRkdGCINCy0LXRgdGMINCx0LvQvtC6INGG0LXQu9C40LrQvtC8LgoKICAg0KDQsNC30LzQtdGC0LrQsCBGQVFQYWdlINGB0L7QsdC40YDQsNC10YLRgdGPINC40Lcg0LLQuNC00LjQvNC-0LPQviDRgtC10LrRgdGC0LAg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-IOKAlAogICBHb29nbGUg0LfQsNGB0YfQuNGC0YvQstCw0LXRgiDQstC-0L_RgNC-0YHRiyDRgtC-0LvRjNC60L4g0L_RgNC4INC00L7RgdC70L7QstC90L7QvCDRgdC-0LLQv9Cw0LTQtdC90LjQuC4KICAg0J_QvtGN0YLQvtC80YMg0L_QvtC70Y8gwqvQvtGC0LLQtdGCINC00LvRjyDQv9C-0LjRgdC60LDCuyDQt9C00LXRgdGMINC90LXRgjog0YDQsNGB0YXQvtC00LjRgtGM0YHRjyDQvdC10YfQtdC80YMuCgogICDQptC10L3RiyDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0Lgg0LIg0YDQsNC30LzQtdGC0LrQtSDQv9GA0LDQstGP0YLRgdGPINC-0LTQvdC40Lwg0L_QvtC70LXQvDog0YDQsNC90YzRiNC1CiAgINCyINGA0LDQt9C80LXRgtC60LUg0LHRi9C70Lgg0L7QsdGK0Y_QstC70LXQvdGLINC_0LDQutC10YLRiywg0LrQvtGC0L7RgNGL0YUg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC90LUg0LHRi9C70L4KICAg0LLQvtCy0YHQtS4g0J_QsNC90LXQu9GMINC00LXRgNC20LjRgiDQuNGFINCy0LzQtdGB0YLQtS4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiDQodGB0YvQu9C60LAg0L3QsCDRiNGA0LjRhNGC0Ysg0LHQu9C-0LrQsCDigJQg0LrQvtC90YHRgtCw0L3RgtCwLCDQsCDQvdC1INGC0L4sINGH0YLQviDQvdCw0YjQu9C-0YHRjCDQvdCwINGB0YLRgNCw0L3QuNGG0LUuCiAgICAg0JIgPGhlYWQ-IHdmb2xpbyDRgdCy0L7RjyDRgdGB0YvQu9C60LAg0L3QsCBKb3N0L1J1YmlrINC-0YIg0YLQtdC80YssINC4INC-0L3QsCDRgdGC0L7QuNGCINCg0JDQndCs0KjQlQogICAgINC90LDRiNC10Lk6INC_0LDQvdC10LvRjCDQsdGA0LDQu9CwINC_0LXRgNCy0YPRjiDQv9C-0LTRhdC-0LTRj9GJ0YPRjiDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC-0Lkg0L_QvtC00LzQtdC90Y_Qu9CwCiAgICAg0L3QsNGH0LXRgNGC0LDQvdC40Y8g0LHQu9C-0LrQsCDQvdCwINGC0LXQvNC40L3Riy4g0J3QsNCx0L7RgCDQstC10YHQvtCyINC30LDQtNCw0L0gQ1NTINCx0LvQvtC60LAsINC_0L7RjdGC0L7QvNGDCiAgICAg0LTQtdGA0LbQuNC8INC10LPQviDQt9C00LXRgdGMLiDQnNC10L3Rj9C10YLRgdGPINC00LjQt9Cw0LnQvSDigJQg0LzQtdC90Y_QtdGC0YHRjyDRjdGC0LAg0YHRgtGA0L7QutCwLiAqLwogIHZhciBBVlpfRk9OVF9MSU5LID0gJzxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9Sm9zdDp3Z2h0QDIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICcmYW1wO2ZhbWlseT1SdWJpazppdGFsLHdnaHRAMCwxMDA7MCwyMDA7MCwzMDA7MSwxMDA7MSwyMDAnICsKICAgICcmYW1wO2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURAMjQsMzAwLDAsMCcgKwogICAgJyZhbXA7ZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPic7CgogIC8qIC0tLS0tLS0tLS0g0L_RgNC-0LLQtdGA0LrQsCDCq9C00L7Qu9C10YLQtdC70L4g0LvQuMK7IC0tLS0tLS0tLS0KICAgICDQn9Cw0L3QtdC70Ywg0L_QuNGI0LXRgiDQt9C90LDRh9C10L3QuNGPINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGH0LXRgNC10Lcg0YHQtdC70LXQutGC0L7RgNGLLiDQldGB0LvQuCDRgdC10LvQtdC60YLQvtGACiAgICAg0L3QtSDQvdCw0YjRkdC70YHRjyDQuNC70Lgg0L_QvtC00YHRgtCw0L3QvtCy0LrQsCDQvdC1INGB0L7QstC_0LDQu9CwIOKAlCDQt9Cw0L_QuNGB0Ywg0LzQvtC70YfQsCDQvdC1INC_0YDQvtC40YHRhdC-0LTQuNGCLgogICAgINCY0LzQtdC90L3QviDRgtCw0Log0YfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0LfQsNGB0YLRgNGP0LvQviDQvdCwIDEyNTog0L_QsNC90LXQu9GMINC_0L7RgdGH0LjRgtCw0LvQsCAxMjcsCiAgICAg0LfQsNC_0LjRgdCw0YLRjCDQvdC1INGB0LzQvtCz0LvQsCwg0LAg0L_RgNC-0LLQtdGA0LrQsCDCq9GB0LHQvtGA0LrQsCDRgdC-0LLQv9Cw0LTQsNC10YIg0YEg0LjRgdGF0L7QtNC90LjQutC-0LzCuwogICAgINGB0YDQsNCy0L3QuNCy0LDQu9CwINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdC-0LUg0YEg0L7QtNC40L3QsNC60L7QstC-INC90LXQv9GA0LDQstC40LvRjNC90YvQvC4KCiAgICAg0J_QvtGN0YLQvtC80YMg0L_QvtGB0LvQtSDRgdCx0L7RgNC60Lgg0YfQuNGC0LDQtdC8INGA0LXQt9GD0LvRjNGC0LDRgiDQntCR0KDQkNCi0J3QniDQuCDRgdCy0LXRgNGP0LXQvCDRgSDRgtC10LwsINGH0YLQvgogICAgINCy0LLRkdC7INGH0LXQu9C-0LLQtdC6LiDQndC10YHQvtCy0L_QsNCy0YjQuNC1INC_0L7Qu9GPINC_0LDQvdC10LvRjCDQvdCw0LfRi9Cy0LDQtdGCINCy0YHQu9GD0YUuICovCiAgZnVuY3Rpb24gbGFuZGVkKGV4cGVjdGVkLCBhY3R1YWwsIHNraXAsIHBhdGgsIG91dCkgewogICAgcGF0aCA9IHBhdGggfHwgJyc7IG91dCA9IG91dCB8fCBbXTsKICAgIGlmIChleHBlY3RlZCAmJiB0eXBlb2YgZXhwZWN0ZWQgPT09ICdvYmplY3QnICYmIGFjdHVhbCAmJiB0eXBlb2YgYWN0dWFsID09PSAnb2JqZWN0JykgewogICAgICBPYmplY3Qua2V5cyhleHBlY3RlZCkuZm9yRWFjaChmdW5jdGlvbiAoaykgewogICAgICAgIGxhbmRlZChleHBlY3RlZFtrXSwgYWN0dWFsW2tdLCBza2lwLCBwYXRoID8gcGF0aCArICcuJyArIGsgOiBrLCBvdXQpOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAoU3RyaW5nKGV4cGVjdGVkID09IG51bGwgPyAnJyA6IGV4cGVjdGVkKSAhPT0gU3RyaW5nKGFjdHVhbCA9PSBudWxsID8gJycgOiBhY3R1YWwpKSB7CiAgICAgIGlmICghc2tpcCB8fCAhc2tpcC50ZXN0KHBhdGgpKSBvdXQucHVzaChwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQo9C30LvRiyAjcGhvdG9ncmFwaGVyLCAjYnVzaW5lc3Mg0LggI3dlYnNpdGUg0L7Qv9C40YHRi9Cy0LDRjtGCINC-0LTQvdC-0LPQviDQuCDRgtC-0LPQviDQttC1CiAgICAg0YfQtdC70L7QstC10LrQsCwg0L7QtNC90L4g0LTQtdC70L4g0Lgg0L7QtNC40L0g0YHQsNC50YIuINCe0LTQuNC9INC4INGC0L7RgiDQttC1IEBpZCwg0L7Qv9C40YHQsNC90L3Ri9C5CiAgICAg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlCDQvNC-0LvRh9Cw0LvQuNCy0LDRjyDQv9C-0LvQvtC80LrQsDog0L_QvtC40YHQutC-0LLQuNC6CiAgICAg0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuCDQstC10YDQuNGC0YwsINC4INC90LDQs9GA0LDQtNGLINC80L7Qs9GD0YIg0L_RgNC-0YHRgtC-CiAgICAg0L3QtSDQt9Cw0YHRh9C40YLQsNGC0YzRgdGPLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDQuNGFINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LAogICAgINC_0L7RjdGC0L7QvNGDINGA0LDRgdGF0L7QtNC40YLRjNGB0Y8g0LjQvCDQsdC-0LvRjNGI0LUg0L3QtdGH0LXQvC4KCiAgICAg0K3RgtCw0LvQvtC9INGB0L3Rj9GCINGBINCz0LvQsNCy0L3QvtC5IDI0INCw0LLQs9GD0YHRgtCwIDIwMjYuINCV0YHQu9C4INCz0LvQsNCy0L3Rg9GOINC00L7Qv9C-0LvQvdGP0YIg4oCUCiAgICAg0L7QsdC90L7QstC40YLRjCDQt9C00LXRgdGMINC4INC_0LXRgNC10YHQvtCx0YDQsNGC0Ywg0L3QsNCx0L7RgDogcHl0aG9uMyBwYWNrLXRvb2xraXQucHkgKi8KICB2YXIgQVZaX0NBTk9OID0gewogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciI6IHsKICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IiwKICAgICAgImFsdGVybmF0ZU5hbWUiOiAiQXZhbnphdG8iLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LguINCf0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINGBIDIwMTkg0LPQvtC00LAuINCR0L7Qu9C10LUgMjUwINGA0LXQsNC70LjQt9C-0LLQsNC90L3Ri9GFINC_0YDQvtC10LrRgtC-0LIuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogWwogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwLzBpT2ZMSWV2UE1wUTVfRkc2TUtEY092UEhZNFNjaVAyLzN2OHdjUGhsTmpvVUhKWV94MUY5QlBkNjJ4T3NNNU8xLzg1WldiNmRZRmdUOWIzM0gzSUcxbmcuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL3k4RG02SlpWQ25sNENVRnprZW94Y2h2UEkxd1ZkRENLLzctVW9MS0MyZ1FrcmdhWHhyclN5THFZdGFNR1J6X3UtL3BCWWdSWDVzUGJZeFhCT1BtRGxYRVEuanBlZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9vVzRxai1tTFN4T0dKTGZEbWJTRERhYmhwTlc4bmVLOC80bFZuTU04Wm5DekN5RWJnWEluSHpDdkNwclBHcXJKNi9IOXViVDBIOUlGQUNiYk9QeGVuRjdRLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9fUkJzYU1oRzBqR01NN182c2xveUVQc2RWLVpPVjNpdy81dHlPSDk2LTJSdU9VLXBfSUtCd1UwMER6NVhJOXJ0VC9BY29McjZ0RGhCQV8xc1Yzb2l0Q3JRLmpwZyIKICAgICAgXSwKICAgICAgImpvYlRpdGxlIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQiLAogICAgICAia25vd3NBYm91dCI6IFsKICAgICAgICAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8iLAogICAgICAgICLQnNGD0LbRgdC60L7QuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCW0LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JvQuNGH0L3Ri9C5INCx0YDQtdC90LQiLAogICAgICAgICLQoNC10L_QvtGA0YLQsNC20L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCf0YDQtdC00LzQtdGC0L3QsNGPINGB0YrRkdC80LrQsCDQtNC70Y8g0LzQsNGA0LrQtdGC0L_Qu9C10LnRgdC-0LIiLAogICAgICAgICLQmNC90YLQtdGA0YzQtdGA0L3QsNGPINC4INCw0YDRhdC40YLQtdC60YLRg9GA0L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCQ0LLRgtC-0LzQvtCx0LjQu9GM0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIKICAgICAgXSwKICAgICAgImF3YXJkIjogWwogICAgICAgICJQb3J0Zm9saW8gQXdhcmQgMjAyNCDigJQgMiDQvNC10YHRgtC-LCDRgdC10YDQuNGPINCg0LXQv9C-0YDRgtCw0LYiLAogICAgICAgICJUaGUgUGxhY2UgRWNvbm9teSBWb2wuMyBieSBIb3luZSAoQXVzdHJhbGlhKSIsCiAgICAgICAgIjUwMHB4IEF3YXJkcyIsCiAgICAgICAgIkFnb3JhIEF3YXJkcyIsCiAgICAgICAgIjM1YXdhcmRzIgogICAgICBdLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly8yMDI0LnBvcnRmb2xpb2F3YXJkLmNvbS8jc2VjdGlvbi0xOTAwNjE1NyIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIndvcmtMb2NhdGlvbiI6IHsKICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICB9CiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIjogewogICAgICAiQHR5cGUiOiAiUHJvZmVzc2lvbmFsU2VydmljZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiLAogICAgICAibmFtZSI6ICJBdmFuemF0byDigJQg0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C1INGE0L7RgtC-0YHQtdGB0YHQuNC4INCyINCa0LDQt9Cw0L3QuCDRgSAyMDE5INCz0L7QtNCwOiDRgdGC0YPQtNC40Y8g0Lgg0YPQu9C40YbQsCwg0LzRg9C20YHQutC-0Lkg0Lgg0LbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIsINGB0YrRkdC80LrQsCDQtNC70Y8g0LvQuNGH0L3QvtCz0L4g0LHRgNC10L3QtNCwLiAyNTArINC_0YDQvtC10LrRgtC-0LIsIDUg0LzQtdC20LTRg9C90LDRgNC-0LTQvdGL0YUg0L3QsNCz0YDQsNC0LiDQktGL0LXQt9C00Ysg0LIg0JzQvtGB0LrQstGDLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6ICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgImZvdW5kZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJmb3VuZGluZ0RhdGUiOiAiMjAxOSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgIkB0eXBlIjogIlBvc3RhbEFkZHJlc3MiLAogICAgICAgICJhZGRyZXNzTG9jYWxpdHkiOiAi0JrQsNC30LDQvdGMIiwKICAgICAgICAiYWRkcmVzc1JlZ2lvbiI6ICLQoNC10YHQv9GD0LHQu9C40LrQsCDQotCw0YLQsNGA0YHRgtCw0L0iLAogICAgICAgICJhZGRyZXNzQ291bnRyeSI6ICJSVSIKICAgICAgfSwKICAgICAgImdlbyI6IHsKICAgICAgICAiQHR5cGUiOiAiR2VvQ29vcmRpbmF0ZXMiLAogICAgICAgICJsYXRpdHVkZSI6IDU1Ljc4ODcsCiAgICAgICAgImxvbmdpdHVkZSI6IDQ5LjEyMjEKICAgICAgfSwKICAgICAgImFyZWFTZXJ2ZWQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JzQvtGB0LrQstCwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInByaWNlUmFuZ2UiOiAi0L7RgiAxNCA5MDAg4oK9IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1ICjQstGB0ZEg0LLQutC70Y7Rh9C10L3QvikiLAogICAgICAgICAgInByaWNlIjogIjU0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZhciBvbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6bS1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgbGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdi1tYWxlJyk7CiAgaWYgKCFsaXZlKSB7IGFsZXJ0KCdBVlo6INC90LAg0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbQtSDQvdC10YIg0LHQu9C-0LrQsCAuYXYtbWFsZScpOyByZXR1cm47IH0KCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTCA6ICcnOyB9CiAgZnVuY3Rpb24gb3duVGV4dChlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuICcnOwogICAgdmFyIHMgPSAnJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgcyArPSBlbC5jaGlsZE5vZGVzW2ldLm5vZGVWYWx1ZTsKICAgIH0KICAgIHJldHVybiBzLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gbnVtKHNjb3BlLCBuKSB7CiAgICByZXR1cm4gYWxsKHNjb3BlLCAnc2VjdGlvbi5udW1iZXJlZCcpLmZpbHRlcihmdW5jdGlvbiAocykgewogICAgICByZXR1cm4gcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtbnVtJykgPT09IG47CiAgICB9KVswXSB8fCBudWxsOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiByZWFkQ2ZnKHNjb3BlKSB7CiAgICB2YXIgbGluZXMgPSBhbGwoc2NvcGUsICcuZGlzcGxheSAuaW5uZXInKTsKICAgIHZhciBzMSA9IG51bShzY29wZSwgJzAxJyksIHMyID0gbnVtKHNjb3BlLCAnMDInKSwgczMgPSBudW0oc2NvcGUsICcwMycpOwogICAgdmFyIHM0ID0gbnVtKHNjb3BlLCAnMDQnKSwgczUgPSBudW0oc2NvcGUsICcwNScpLCBzNiA9IG51bShzY29wZSwgJzA2Jyk7CgogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IG93blRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSksCiAgICAgICAgbGluZTE6IHQobGluZXNbMF0pLAogICAgICAgIGxpbmUyOiBsaW5lc1sxXSA_IHQob25lKGxpbmVzWzFdLCAnZW0nKSB8fCBsaW5lc1sxXSkgOiAnJywKICAgICAgICBsaW5lMzogdChsaW5lc1syXSkKICAgICAgfSwKICAgICAgbGVkZTogdChvbmUoc2NvcGUsICcubGVkZScpKSwKICAgICAgdGlja2VyOiBbXSwKICAgICAgYWJvdXQ6IHsKICAgICAgICBsYWJlbDogdChvbmUoczEsICcuYWJvdXQtdGV4dCAubGFiZWwnKSksCiAgICAgICAgaDI6IGh0bWwob25lKHMxLCAnLmFib3V0LXRleHQgLmgyJykpLAogICAgICAgIHA6IGFsbChzMSwgJy5hYm91dC10ZXh0IHAnKS5tYXAoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHQocCk7IH0pLAogICAgICAgIGNoZWNrczogYWxsKHMxLCAnLmNoZWNrLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHJldHVybiB7IGxhYmVsOiB0KG9uZShjLCAnLmNpLWxhYmVsJykpLCB0ZXh0OiB0KG9uZShjLCAnLmNpLXRleHQnKSkgfTsKICAgICAgICB9KSwKICAgICAgICBzdGF0czogYWxsKHMxLCAnLnN0YXRzID4gZGl2JykubWFwKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICB2YXIgbiA9IG9uZShkLCAnLnN0YXQtbnVtJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0YXJnZXQ6IG4gPyAobi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0JykgfHwgdChuKSkgOiAnJywKICAgICAgICAgICAgc3VmZml4OiBuID8gKG4uZ2V0QXR0cmlidXRlKCdkYXRhLXN1ZmZpeCcpIHx8ICcnKSA6ICcnLAogICAgICAgICAgICBsYWJlbDogdChvbmUoZCwgJy5zdGF0LWxhYmVsJykpCiAgICAgICAgICB9OwogICAgICAgIH0pLAogICAgICAgIHRhZzogdChvbmUoczEsICcuYWJvdXQtdGFnJykpLAogICAgICAgIGltZzogb25lKHMxLCAnLmFib3V0LW1lZGlhIGltZycpID8gb25lKHMxLCAnLmFib3V0LW1lZGlhIGltZycpLmdldEF0dHJpYnV0ZSgnc3JjJykgOiAnJywKICAgICAgICBhbHQ6IG9uZShzMSwgJy5hYm91dC1tZWRpYSBpbWcnKSA_IG9uZShzMSwgJy5hYm91dC1tZWRpYSBpbWcnKS5nZXRBdHRyaWJ1dGUoJ2FsdCcpIDogJycKICAgICAgfSwKICAgICAgYWR2OiB7CiAgICAgICAgaGVhZDogdChvbmUoczIsICcuc2VjdGlvbi1sYWJlbCBoMicpKSwKICAgICAgICBsYWJlbDogdChvbmUoczIsICcuc2VjdGlvbi1oZWFkIC5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoczIsICcuc2VjdGlvbi1oZWFkIC5oMicpKSwKICAgICAgICBpdGVtczogYWxsKHMyLCAnLmFkdi1pdGVtJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyB0aXRsZTogdChvbmUoYSwgJ2gzJykpLCB0ZXh0OiB0KG9uZShhLCAncCcpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHN0ZXBzOiB7CiAgICAgICAgaGVhZDogdChvbmUoczMsICcuc2VjdGlvbi1sYWJlbCBoMicpKSwKICAgICAgICBsYWJlbDogdChvbmUoczMsICcuc2VjdGlvbi1oZWFkIC5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoczMsICcuc2VjdGlvbi1oZWFkIC5oMicpKSwKICAgICAgICBpdGVtczogYWxsKHMzLCAnLnN0ZXAnKS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgICAgIHJldHVybiB7IG51bTogdChvbmUoYSwgJy5zdGVwLW51bScpKSwgdGl0bGU6IHQob25lKGEsICdoMycpKSwgdGV4dDogdChvbmUoYSwgJ3AnKSkgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICB3b3JrczogewogICAgICAgIGhlYWQ6IHQob25lKHM0LCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgICAgYXNpZGU6IG93blRleHQob25lKHM0LCAnLnNsLWFzaWRlJykpLAogICAgICAgIGl0ZW1zOiBhbGwoczQsICcuY2VsbCcpLm1hcChmdW5jdGlvbiAoYykgewogICAgICAgICAgdmFyIGltID0gb25lKGMsICdpbWcnKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGhyZWY6IGMuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycsCiAgICAgICAgICAgIGxhYmVsOiBjLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpIHx8ICcnLAogICAgICAgICAgICBpbWc6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJycsCiAgICAgICAgICAgIGFsdDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJwogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBwcmljZTogewogICAgICAgIGhlYWQ6IHQob25lKHM1LCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgICAgbGFiZWw6IHQob25lKHM1LCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSksCiAgICAgICAgaDI6IGh0bWwob25lKHM1LCAnLnNlY3Rpb24taGVhZCAuaDInKSksCiAgICAgICAgbm90ZTogaHRtbChvbmUoczUsICcucHJpY2Utbm90ZScpKSwKICAgICAgICBjYXJkczogYWxsKHM1LCAnLnByaWNlLWNhcmQnKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIG5hbWU6IHQob25lKGMsICcucGMtbmFtZScpKSwKICAgICAgICAgICAgcHJpY2U6IG93blRleHQob25lKGMsICcucGMtcHJpY2UnKSksCiAgICAgICAgICAgIHN1YjogdChvbmUoYywgJy5wYy1wcmljZS1zdWInKSksCiAgICAgICAgICAgIHBvcDogdChvbmUoYywgJy5wYy1wb3AnKSksCiAgICAgICAgICAgIGl0ZW1zOiBhbGwoYywgJy5wYy1saXN0IGxpJykubWFwKGZ1bmN0aW9uIChsaSkgeyByZXR1cm4gdChvbmUobGksICdzcGFuOm5vdCguaWNvbiknKSk7IH0pLAogICAgICAgICAgICBidG46IHsgdGV4dDogb3duVGV4dChvbmUoYywgJy5idG4tY2FyZCcpKSwgaHJlZjogb25lKGMsICcuYnRuLWNhcmQnKSA_IG9uZShjLCAnLmJ0bi1jYXJkJykuZ2V0QXR0cmlidXRlKCdocmVmJykgOiAnJyB9CiAgICAgICAgICB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGZhcTogewogICAgICAgIGhlYWQ6IHQob25lKHM2LCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgICAgbGFiZWw6IHQob25lKHM2LCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSksCiAgICAgICAgaDI6IGh0bWwob25lKHM2LCAnLnNlY3Rpb24taGVhZCAuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzNiwgJy5mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHJldHVybiB7IHE6IG93blRleHQob25lKGl0LCAnLmZhcS1xJykpLCBhOiBodG1sKG9uZShpdCwgJy5mYXEtYS1pbm5lcicpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGN0YTogewogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5jdGEgLmgyJykpLAogICAgICAgIGJ1dHRvbnM6IGFsbChzY29wZSwgJy5jdGEgLmJ0bnMgLmJ0bicpLm1hcChmdW5jdGlvbiAoYikgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogdChhbGwoYiwgJy5idG4tbGFiZWwgPiBzcGFuJylbMF0pLCBocmVmOiBiLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgZm9vdE5vdGU6IGh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpKSwKICAgICAgZm9vdGVyOiB7CiAgICAgICAgY29weTogdChvbmUoc2NvcGUsICcuZm9vdGVyIC5jb3B5JykpLAogICAgICAgIHNvY2lhbHM6IGFsbChzY29wZSwgJy5zb2NpYWxzIGEnKS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgICAgIHJldHVybiB7IGxhYmVsOiB0KGEpLCBocmVmOiBhLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnIH07CiAgICAgICAgfSkKICAgICAgfQogICAgfTsKICB9CgogIC8qINCX0L3QsNGH0LXQvdC40Y8g0YfQuNGC0LDQtdC8INC40Lcg0JjQodCl0J7QlNCd0J7Qk9CeINC60L7QtNCwINGB0YLRgNCw0L3QuNGG0YssINCwINC90LUg0LjQtyDQttC40LLQvtCz0L4gRE9NLgogICAgINCh0LrRgNC40L_RgtGLIHdmb2xpbyDQv9GA0LDQstGP0YIg0YDQsNC30LzQtdGC0LrRgyDQsiDQsdGA0LDRg9C30LXRgNC1IOKAlCDQvdCw0L_RgNC40LzQtdGALCDQtNC-0L_QuNGB0YvQstCw0Y7RggogICAgIHRhcmdldD0iX2JsYW5rIiDQstC90LXRiNC90LjQvCDRgdGB0YvQu9C60LDQvC4g0KfQuNGC0LDRjyDQuNC3IERPTSwg0L_QsNC90LXQu9GMINC30LDQv9C10LrQsNC70LAKICAgICDRh9GD0LbQuNC1INC_0YDQsNCy0LrQuCDQsiDQstCw0Ygg0LrQvtC0LiAqLwogIHZhciBjZmcgPSBudWxsOwoKICBmdW5jdGlvbiByZWFkU2NyaXB0Qml0cyhzcmMsIGMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgaXRlbXMgPSBcWyhbXHNcU10qPylcXTsvKTsKICAgIGlmIChtKSB7CiAgICAgIGMudGlja2VyID0gKG1bMV0ubWF0Y2goLycoKD86W14nXFxdfFxcLikqKScvZykgfHwgW10pLm1hcChmdW5jdGlvbiAocykgewogICAgICAgIHJldHVybiBzLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgICAgfSk7CiAgICB9CiAgfQogIC8qIC0tLS0tLS0tLS0g0L7QutC90L4gLS0tLS0tLS0tLSAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnptLXJvb3QsI2F2em0tcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2em0tcm9vdCBpbnB1dCwjYXZ6bS1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6bS1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2em0tcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6bS13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnptLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2em0taGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2em0tYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6bS1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6bS1yb290IC5hdnptLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6bS1yb290IC5hdnptLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6bS1yb290IC5hdnptLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6bS1yb290IC5hdnptLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1mIGlucHV0LCNhdnptLXJvb3QgLmF2em0tZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnptLXJvb3QgLmF2em0tcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2em0td2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6bS1yb290IC5hdnptLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnptLXJvb3QgLmF2em0taW1nPmltZ3t3aWR0aDo3MHB4O2hlaWdodDo4OHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnptLXJvb3QgLmF2em0taW1nIC5ne2ZsZXg6MX0nLAogICAgJyNhdnptLXJvb3QgLmF2em0taGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2em0tb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2em0tbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICAvKiDQu9C40YjQvdC40Lkg0L_QtdGA0LXQvdC-0YE6INCx0YDQsNGD0LfQtdGAINGB0YrQtdC00LDQtdGCINC_0LXRgNCy0YvQuSDQv9C-0YHQu9C1IDx0ZXh0YXJlYT4gKi8KICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj5cbicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6bS1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2em0tcm9vdCc7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsgc2NydWIoZS50YXJnZXQpOyB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNjcnViKGVsKTsgfSwgMCk7CiAgICB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhJyksIG4gPSAwLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSBuICs9IHNjcnViKGVsc1tpXSk7CiAgICAgIGlmIChuKSBjb25zb2xlLndhcm4oJ0FWWjog0YPQsdGA0LDQvdGLINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyDRgNC10LTQsNC60YLQvtGA0LAsINC_0L7Qu9C10Lk6ICcgKyBuKTsKICAgIH0sIHRydWUpOwogIH0pKCk7CgogIGZ1bmN0aW9uIG1zZyhzKSB7IHZhciBlID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6bS1tc2cnKTsgaWYgKGUpIGUudGV4dENvbnRlbnQgPSBzOyB9CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyog0JLRgdGPINGE0L7RgNC80LAg0YHRgtGA0L7QuNGC0YHRjyDRgtC-0LvRjNC60L4g0L_QvtGB0LvQtSDRgtC-0LPQviwg0LrQsNC6INC_0YDQvtGH0LjRgtCw0L0g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQ6CiAgICAg0LfQvdCw0YfQtdC90LjRjyDQtNC-0LvQttC90Ysg0LHRgNCw0YLRjNGB0Y8g0LjQtyDQvdC10LPQviwg0LAg0L3QtSDQuNC3INC20LjQstC-0LPQviBET00uICovCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2em0td2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2em0taGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQvNGD0LbRgdC60L7QuSDRhNC-0YLQvtGB0LXRgdGB0LjQuDwvaDI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnptLWIiIGlkPSJhdnptLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImF2em0tYm9keSI-JzsKCiAgICAvKiDQn9CQ0JrQldCi0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnptLXNlYyIgb3Blbj48c3VtbWFyeT7Qn9Cw0LrQtdGC0Ysg0Lgg0YbQtdC90YsgKCcgKyBjZmcucHJpY2UuY2FyZHMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bS1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bS1oaW50Ij7QptC10L3QsCDQv9GA0LDQstC40YLRgdGPINC-0LTQuNC9INGA0LDQtzog0L7QvdCwINC20LUg0YPRhdC-0LTQuNGCINCyINGA0LDQt9C80LXRgtC60YMg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LIuICcgKwogICAgICAn0KHQstC10YDRj9C50YLQtdGB0Ywg0YHQviDRgdGC0YDQsNC90LjRhtC10Lkg0YbQtdC9IOKAlCDRgtCw0Lwg0YLQtSDQttC1INC_0LDQutC10YLRiywg0Lgg0YDQsNGB0YXQvtC00LjRgtGM0YHRjyDQuNC8INC90LXQu9GM0LfRjy48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQsiDQu9C10L3RgtC1JywgJ3ByaWNlLmhlYWQnLCBjZmcucHJpY2UuaGVhZCkgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAncHJpY2UubGFiZWwnLCBjZmcucHJpY2UubGFiZWwpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDsg0LggJmx0O2VtJmd0OyknLCAncHJpY2UuaDInLCBjZmcucHJpY2UuaDIpOwogICAgY2ZnLnByaWNlLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1jYXJkIj48aDQ-0J_QsNC60LXRgiAnICsgKGkgKyAxKSArIChjLnBvcCA_ICcg4oCUINGBINC_0LvQsNGI0LrQvtC5IMKrJyArIGVzYyhjLnBvcCkgKyAnwrsnIDogJycpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAncHJpY2UuY2FyZHMuJyArIGkgKyAnLm5hbWUnLCBjLm5hbWUpICsKICAgICAgICBmaWVsZCgn0KbQtdC90LAgKNCx0LXQtyDQt9C90LDQutCwIOKCvSknLCAncHJpY2UuY2FyZHMuJyArIGkgKyAnLnByaWNlJywgYy5wcmljZSkgKyAnPC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0L_QvtC0INGG0LXQvdC-0LknLCAncHJpY2UuY2FyZHMuJyArIGkgKyAnLnN1YicsIGMuc3ViKTsKICAgICAgYy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChsaSwgaykgewogICAgICAgIGggKz0gZmllbGQoJ9Cf0YPQvdC60YIgJyArIChrICsgMSksICdwcmljZS5jYXJkcy4nICsgaSArICcuaXRlbXMuJyArIGssIGxpKTsKICAgICAgfSk7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsgZmllbGQoJ9Ca0L3QvtC_0LrQsCDigJQg0YLQtdC60YHRgicsICdwcmljZS5jYXJkcy4nICsgaSArICcuYnRuLnRleHQnLCBjLmJ0bi50ZXh0KSArCiAgICAgICAgZmllbGQoJ9Ca0L3QvtC_0LrQsCDigJQg0LDQtNGA0LXRgScsICdwcmljZS5jYXJkcy4nICsgaSArICcuYnRuLmhyZWYnLCBjLmJ0bi5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQodC90L7RgdC60LAg0L_QvtC0INC_0LDQutC10YLQsNC80LggKNC80L7QttC90L4gSFRNTCknLCAncHJpY2Uubm90ZScsIGNmZy5wcmljZS5ub3RlLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCS0J7Qn9Cg0J7QodCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bS1zZWMiPjxzdW1tYXJ5PtCS0L7Qv9GA0L7RgdGLINC4INC-0YLQstC10YLRiyAoJyArIGNmZy5mYXEuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bS1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bS1oaW50Ij7QntGC0LLQtdGCINC-0LTQuNC9OiDQvtC9INC20LUg0YPRhdC-0LTQuNGCINCyINGA0LDQt9C80LXRgtC60YMg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-LiAnICsKICAgICAgJ9Ci0LDQuiDRgtGA0LXQsdGD0LXRgiBHb29nbGUg4oCUINC_0LXRgNC10YHQutCw0Lcg0YHQstC-0LjQvNC4INGB0LvQvtCy0LDQvNC4INC90LUg0LfQsNGB0YfQuNGC0YvQstCw0LXRgtGB0Y8uPC9wPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0LIg0LvQtdC90YLQtScsICdmYXEuaGVhZCcsIGNmZy5mYXEuaGVhZCkgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnZmFxLmxhYmVsJywgY2ZnLmZhcS5sYWJlbCkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyDQuCAmbHQ7ZW0mZ3Q7KScsICdmYXEuaDInLCBjZmcuZmFxLmgyKTsKICAgIGNmZy5mYXEuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnptLWNhcmQiPjxoND7QktC-0L_RgNC-0YEgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ2ZhcS5pdGVtcy4nICsgaSArICcucScsIGYucSkgKwogICAgICAgIGZpZWxkKCfQntGC0LLQtdGCICjQvNC-0LbQvdC-IEhUTUwpJywgJ2ZhcS5pdGVtcy4nICsgaSArICcuYScsIGYuYSwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQoNCQ0JHQntCi0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnptLXNlYyI-PHN1bW1hcnk-0J_QvtGA0YLRhNC-0LvQuNC-ICgnICsgY2ZnLndvcmtzLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2em0taW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0LIg0LvQtdC90YLQtScsICd3b3Jrcy5oZWFkJywgY2ZnLndvcmtzLmhlYWQpICsKICAgICAgZmllbGQoJ9Cf0L7QvNC10YLQutCwINGB0L_RgNCw0LLQsCcsICd3b3Jrcy5hc2lkZScsIGNmZy53b3Jrcy5hc2lkZSkgKyAnPC9kaXY-JzsKICAgIGNmZy53b3Jrcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh3LCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2em0tY2FyZCI-PGg0PtCa0LDQtNGAICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2em0tZiI-PGxhYmVsPtCk0L7RgtC-0LPRgNCw0YTQuNGPPC9sYWJlbD48ZGl2IGNsYXNzPSJhdnptLWltZyI-JyArCiAgICAgICAgJzxpbWcgc3JjPSInICsgZXNjKHcuaW1nKSArICciIGRhdGEtcHJldj0id29ya3MuaXRlbXMuJyArIGkgKyAnLmltZyI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPjxpbnB1dCBkYXRhLXA9IndvcmtzLml0ZW1zLicgKyBpICsgJy5pbWciIHZhbHVlPSInICsgZXNjKHcuaW1nKSArICciPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICAgIGZpZWxkKCdBbHQt0YLQtdC60YHRgiAo0LLQuNC00LXQvSDQv9C-0LjRgdC60L7QstC40LrQsNC8KScsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuYWx0Jywgdy5hbHQpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0LTQu9GPINC00L7RgdGC0YPQv9C90L7RgdGC0LgnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLmxhYmVsJywgdy5sYWJlbCkgKwogICAgICAgIGZpZWxkKCfQodGB0YvQu9C60LAnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLmhyZWYnLCB3LmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCo0JDQn9Ca0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnptLXNlYyI-PHN1bW1hcnk-0KjQsNC_0LrQsDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnptLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArIGZpZWxkKCfQodGC0YDQvtC60LAgMScsICdoZXJvLmxpbmUxJywgY2ZnLmhlcm8ubGluZTEpICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAyICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMycsICdoZXJvLmxpbmUzJywgY2ZnLmhlcm8ubGluZTMpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC30LDQs9C-0LvQvtCy0L7QuicsICdsZWRlJywgY2ZnLmxlZGUsICdhcmVhJykgKwogICAgICBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwIOKAlCDRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOJywgJ3RpY2tlckxpbmUnLCBjZmcudGlja2VyLmpvaW4oJywgJyksICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_QntCU0KXQntCUICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bS1zZWMiPjxzdW1tYXJ5PtCf0L7QtNGF0L7QtDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnptLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2Fib3V0LmxhYmVsJywgY2ZnLmFib3V0LmxhYmVsKSArCiAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCDQvdCwINGE0L7RgtC-JywgJ2Fib3V0LnRhZycsIGNmZy5hYm91dC50YWcpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDsg0LggJmx0O2VtJmd0OyknLCAnYWJvdXQuaDInLCBjZmcuYWJvdXQuaDIpOwogICAgY2ZnLmFib3V0LnAuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkgewogICAgICBoICs9IGZpZWxkKCfQkNCx0LfQsNGGICcgKyAoaSArIDEpLCAnYWJvdXQucC4nICsgaSwgcCwgJ2FyZWEnKTsKICAgIH0pOwogICAgY2ZnLmFib3V0LmNoZWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2em0tY2FyZCI-PGg0PtCf0YPQvdC60YIgJyArIChpICsgMSkgKyAnPC9oND48ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2Fib3V0LmNoZWNrcy4nICsgaSArICcubGFiZWwnLCBjLmxhYmVsKSArCiAgICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnYWJvdXQuY2hlY2tzLicgKyBpICsgJy50ZXh0JywgYy50ZXh0KSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBjZmcuYWJvdXQuc3RhdHMuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnptLWNhcmQiPjxoND7QptC40YTRgNCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQl9C90LDRh9C10L3QuNC1JywgJ2Fib3V0LnN0YXRzLicgKyBpICsgJy50YXJnZXQnLCBzLnRhcmdldCkgKwogICAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCcsICdhYm91dC5zdGF0cy4nICsgaSArICcubGFiZWwnLCBzLmxhYmVsKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnptLWYiPjxsYWJlbD7QpNC-0YLQvtCz0YDQsNGE0LjRjzwvbGFiZWw-PGRpdiBjbGFzcz0iYXZ6bS1pbWciPicgKwogICAgICAnPGltZyBzcmM9IicgKyBlc2MoY2ZnLmFib3V0LmltZykgKyAnIiBkYXRhLXByZXY9ImFib3V0LmltZyI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJnIj48aW5wdXQgZGF0YS1wPSJhYm91dC5pbWciIHZhbHVlPSInICsgZXNjKGNmZy5hYm91dC5pbWcpICsgJyI-PC9kaXY-PC9kaXY-PC9kaXY-JyArCiAgICAgIGZpZWxkKCdBbHQt0YLQtdC60YHRgicsICdhYm91dC5hbHQnLCBjZmcuYWJvdXQuYWx0KSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQmtCe0JzQoyDQn9Ce0JTQpdCe0JTQmNCiICsg0KjQkNCT0JggKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnptLXNlYyI-PHN1bW1hcnk-0JrQvtC80YMg0L_QvtC00YXQvtC00LjRgiDQuCDQutCw0Log0L_RgNC-0YXQvtC00LjRgjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnptLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINCyINC70LXQvdGC0LUnLCAnYWR2LmhlYWQnLCBjZmcuYWR2LmhlYWQpICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2Fkdi5sYWJlbCcsIGNmZy5hZHYubGFiZWwpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDsg0LggJmx0O2VtJmd0OyknLCAnYWR2LmgyJywgY2ZnLmFkdi5oMik7CiAgICBjZmcuYWR2Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1jYXJkIj48aDQ-0J_QvtCy0L7QtCAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnYWR2Lml0ZW1zLicgKyBpICsgJy50aXRsZScsIGEudGl0bGUpICsKICAgICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdhZHYuaXRlbXMuJyArIGkgKyAnLnRleHQnLCBhLnRleHQsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0LIg0LvQtdC90YLQtSAo0YjQsNCz0LgpJywgJ3N0ZXBzLmhlYWQnLCBjZmcuc3RlcHMuaGVhZCkgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnc3RlcHMubGFiZWwnLCBjZmcuc3RlcHMubGFiZWwpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INGI0LDQs9C-0LIgKNC80L7QttC90L4gJmx0O2JyJmd0OyDQuCAmbHQ7ZW0mZ3Q7KScsICdzdGVwcy5oMicsIGNmZy5zdGVwcy5oMik7CiAgICBjZmcuc3RlcHMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnptLWNhcmQiPjxoND7QqNCw0LMgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0J3QvtC80LXRgCcsICdzdGVwcy5pdGVtcy4nICsgaSArICcubnVtJywgYS5udW0pICsKICAgICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ3N0ZXBzLml0ZW1zLicgKyBpICsgJy50aXRsZScsIGEudGl0bGUpICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ3N0ZXBzLml0ZW1zLicgKyBpICsgJy50ZXh0JywgYS50ZXh0LCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCf0KDQmNCX0KvQkiDQmCDQpNCj0KLQldCgICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bS1zZWMiPjxzdW1tYXJ5PtCf0YDQuNC30YvQsiDQuCDRhNGD0YLQtdGAPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2em0taW4iPicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDsg0LggJmx0O2VtJmd0OyknLCAnY3RhLmgyJywgY2ZnLmN0YS5oMik7CiAgICBjZmcuY3RhLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnptLWNhcmQiPjxoND7QmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnPC9oND48ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLnRleHQnLCBiLnRleHQpICsKICAgICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdjdGEuYnV0dG9ucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-PC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0KHRgtGA0L7QutCwINC_0L7QtCDQutC90L7Qv9C60LDQvNC4ICjQvNC-0LbQvdC-IEhUTUwpJywgJ2Zvb3ROb3RlJywgY2ZnLmZvb3ROb3RlLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Ca0L7Qv9C40YDQsNC50YInLCAnZm9vdGVyLmNvcHknLCBjZmcuZm9vdGVyLmNvcHkpOwogICAgY2ZnLmZvb3Rlci5zb2NpYWxzLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1jYXJkIj48aDQ-0KHQvtGG0YHQtdGC0YwgJyArIChpICsgMSkgKyAnPC9oND48ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAnZm9vdGVyLnNvY2lhbHMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBJywgJ2Zvb3Rlci5zb2NpYWxzLicgKyBpICsgJy5ocmVmJywgcy5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8L2Rpdj48ZGl2IGlkPSJhdnptLWZvb3QiPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bS1iIHAiIGlkPSJhdnptLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bS1iIiBpZD0iYXZ6bS10ZXN0Ij7Qn9GA0L7QstC10YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Lo8L2J1dHRvbj4nICsKICAgICAgJzxzcGFuIGlkPSJhdnptLW1zZyI-PC9zcGFuPjwvZGl2PicgKwogICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnptLW91dCIgc3BlbGxjaGVjaz0iZmFsc2UiICcgKwogICAgICAncGxhY2Vob2xkZXI9ItCX0LTQtdGB0Ywg0L_QvtGP0LLQuNGC0YHRjyDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyI-PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4nOwoKICAgIHJvb3QuaW5uZXJIVE1MID0gaDsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2em0tY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKCFwKSByZXR1cm47CiAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgICBpZiAocHJldikgcHJldi5zcmMgPSBlLnRhcmdldC52YWx1ZTsKICAgIH0pOwoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQogICAgZnVuY3Rpb24gaGFydmVzdCgpIHsKICAgICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgdmFyIHAgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICAgIGlmIChwID09PSAndGlja2VyTGluZScpIHsKICAgICAgICAgIGNmZy50aWNrZXIgPSBlbC52YWx1ZS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2V0UGF0aChjZmcsIHAsIGVsLnZhbHVlKTsKICAgICAgfSk7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQt9Cw0L_QuNGB0YwgLS0tLS0tLS0tLSAqLwoKICAgIC8qINCf0LXRgNC10L_QuNGB0YvQstCw0LXQvCDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INGC0LXQutGB0YIg0Y3Qu9C10LzQtdC90YLQsCwg0L3QtSDRgtGA0L7Qs9Cw0Y8g0LLQu9C-0LbQtdC90L3Ri9C1CiAgICAgICDQt9C90LDRh9C60LggKC5pY29uLCAudmgsIC5hcnIsIC5jdXJyZW5jeSwgLnNpZ24pIOKAlCDQvdC4INC40YUg0L_QvtGA0Y_QtNC-0LosCiAgICAgICDQvdC4INC_0YDQvtCx0LXQu9GLINCy0L7QutGA0YPQsy4g0KDQsNC90YzRiNC1INC30LTQtdGB0Ywg0LLRgdGRINGB0L7QtNC10YDQttC40LzQvtC1INGB0YLQuNGA0LDQu9C-0YHRjCwKICAgICAgINCwINGN0LvQtdC80LXQvdGC0Ysg0LLQvtC30LLRgNCw0YnQsNC70LjRgdGMINCyINC60L7QvdC10YY6INC30L3QsNGH0L7Quiwg0YHRgtC-0Y_QstGI0LjQuSDQn9CV0KDQldCUCiAgICAgICDRgtC10LrRgdGC0L7QvCwg0L_QtdGA0LXQtdC30LbQsNC7INC30LAg0L3QtdCz0L4uICovCiAgICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgdmFyIHRleHRzID0gW10sIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgIH0KICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgIHZhciBtYWluID0gbnVsbDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgfQogICAgaWYgKCFtYWluKSBtYWluID0gdGV4dHNbMF07CiAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgdmFyIHBvc3QgPSAocmF3Lm1hdGNoKC9ccyokLykgfHwgWycnXSlbMF07CiAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgfQogICAgfQogIH0KICAgIGZ1bmN0aW9uIHNldFBsYWluKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLnRleHRDb250ZW50ID0gdjsgfQogICAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC5pbm5lckhUTUwgPSB2OyB9CgogICAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpLCBkLmhlcm8uZXllYnJvdyk7CiAgICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgICAgaWYgKGxpbmVzWzFdKSBzZXRQbGFpbihvbmUobGluZXNbMV0sICdlbScpIHx8IGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgICBzZXRQbGFpbihsaW5lc1syXSwgZC5oZXJvLmxpbmUzKTsKICAgICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmxlZGUnKSwgZC5sZWRlKTsKCiAgICAgIHZhciBzMSA9IG51bShzY29wZSwgJzAxJyk7CiAgICAgIHNldFBsYWluKG9uZShzMSwgJy5hYm91dC10ZXh0IC5sYWJlbCcpLCBkLmFib3V0LmxhYmVsKTsKICAgICAgc2V0SHRtbChvbmUoczEsICcuYWJvdXQtdGV4dCAuaDInKSwgZC5hYm91dC5oMik7CiAgICAgIGFsbChzMSwgJy5hYm91dC10ZXh0IHAnKS5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7CiAgICAgICAgaWYgKHR5cGVvZiBkLmFib3V0LnBbaV0gPT09ICdzdHJpbmcnKSBzZXRQbGFpbihwLCBkLmFib3V0LnBbaV0pOwogICAgICB9KTsKICAgICAgYWxsKHMxLCAnLmNoZWNrLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgdmFyIHMgPSBkLmFib3V0LmNoZWNrc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgICAgc2V0UGxhaW4ob25lKGMsICcuY2ktbGFiZWwnKSwgcy5sYWJlbCk7CiAgICAgICAgc2V0UGxhaW4ob25lKGMsICcuY2ktdGV4dCcpLCBzLnRleHQpOwogICAgICB9KTsKICAgICAgYWxsKHMxLCAnLnN0YXRzID4gZGl2JykuZm9yRWFjaChmdW5jdGlvbiAoZHYsIGkpIHsKICAgICAgICB2YXIgcyA9IGQuYWJvdXQuc3RhdHNbaV07IGlmICghcykgcmV0dXJuOwogICAgICAgIHZhciBuID0gb25lKGR2LCAnLnN0YXQtbnVtJyk7CiAgICAgICAgaWYgKG4pIHsKICAgICAgICAgIGlmIChuLmhhc0F0dHJpYnV0ZSgnZGF0YS10YXJnZXQnKSkgbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jywgcy50YXJnZXQpOwogICAgICAgICAgZWxzZSBzZXRQbGFpbihuLCBzLnRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHNldFBsYWluKG9uZShkdiwgJy5zdGF0LWxhYmVsJyksIHMubGFiZWwpOwogICAgICB9KTsKICAgICAgc2V0VGV4dChvbmUoczEsICcuYWJvdXQtdGFnJyksIGQuYWJvdXQudGFnKTsKICAgICAgdmFyIGFtID0gb25lKHMxLCAnLmFib3V0LW1lZGlhIGltZycpOwogICAgICBpZiAoYW0pIHsgaWYgKGQuYWJvdXQuaW1nKSBhbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGQuYWJvdXQuaW1nKTsgYW0uc2V0QXR0cmlidXRlKCdhbHQnLCBkLmFib3V0LmFsdCk7IH0KCiAgICAgIHZhciBzMiA9IG51bShzY29wZSwgJzAyJyk7CiAgICAgIHNldFBsYWluKG9uZShzMiwgJy5zZWN0aW9uLWxhYmVsIGgyJyksIGQuYWR2LmhlYWQpOwogICAgICBzZXRQbGFpbihvbmUoczIsICcuc2VjdGlvbi1oZWFkIC5sYWJlbCcpLCBkLmFkdi5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHMyLCAnLnNlY3Rpb24taGVhZCAuaDInKSwgZC5hZHYuaDIpOwogICAgICBhbGwoczIsICcuYWR2LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgICAgdmFyIHMgPSBkLmFkdi5pdGVtc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgICAgc2V0UGxhaW4ob25lKGEsICdoMycpLCBzLnRpdGxlKTsKICAgICAgICBzZXRQbGFpbihvbmUoYSwgJ3AnKSwgcy50ZXh0KTsKICAgICAgfSk7CgogICAgICB2YXIgczMgPSBudW0oc2NvcGUsICcwMycpOwogICAgICBzZXRQbGFpbihvbmUoczMsICcuc2VjdGlvbi1sYWJlbCBoMicpLCBkLnN0ZXBzLmhlYWQpOwogICAgICBzZXRQbGFpbihvbmUoczMsICcuc2VjdGlvbi1oZWFkIC5sYWJlbCcpLCBkLnN0ZXBzLmxhYmVsKTsKICAgICAgc2V0SHRtbChvbmUoczMsICcuc2VjdGlvbi1oZWFkIC5oMicpLCBkLnN0ZXBzLmgyKTsKICAgICAgYWxsKHMzLCAnLnN0ZXAnKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgICAgdmFyIHMgPSBkLnN0ZXBzLml0ZW1zW2ldOyBpZiAoIXMpIHJldHVybjsKICAgICAgICBzZXRQbGFpbihvbmUoYSwgJy5zdGVwLW51bScpLCBzLm51bSk7CiAgICAgICAgc2V0UGxhaW4ob25lKGEsICdoMycpLCBzLnRpdGxlKTsKICAgICAgICBzZXRQbGFpbihvbmUoYSwgJ3AnKSwgcy50ZXh0KTsKICAgICAgfSk7CgogICAgICB2YXIgczQgPSBudW0oc2NvcGUsICcwNCcpOwogICAgICBzZXRQbGFpbihvbmUoczQsICcuc2VjdGlvbi1sYWJlbCBoMicpLCBkLndvcmtzLmhlYWQpOwogICAgICBzZXRUZXh0KG9uZShzNCwgJy5zbC1hc2lkZScpLCBkLndvcmtzLmFzaWRlKTsKICAgICAgYWxsKHM0LCAnLmNlbGwnKS5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgdmFyIHcgPSBkLndvcmtzLml0ZW1zW2ldOyBpZiAoIXcpIHJldHVybjsKICAgICAgICBpZiAody5ocmVmKSBjLnNldEF0dHJpYnV0ZSgnaHJlZicsIHcuaHJlZik7CiAgICAgICAgYy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB3LmxhYmVsKTsKICAgICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpOwogICAgICAgIGlmIChpbSkgeyBpZiAody5pbWcpIGltLnNldEF0dHJpYnV0ZSgnc3JjJywgdy5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHcuYWx0KTsgfQogICAgICB9KTsKCiAgICAgIHZhciBzNSA9IG51bShzY29wZSwgJzA1Jyk7CiAgICAgIHNldFBsYWluKG9uZShzNSwgJy5zZWN0aW9uLWxhYmVsIGgyJyksIGQucHJpY2UuaGVhZCk7CiAgICAgIHNldFBsYWluKG9uZShzNSwgJy5zZWN0aW9uLWhlYWQgLmxhYmVsJyksIGQucHJpY2UubGFiZWwpOwogICAgICBzZXRIdG1sKG9uZShzNSwgJy5zZWN0aW9uLWhlYWQgLmgyJyksIGQucHJpY2UuaDIpOwogICAgICBzZXRIdG1sKG9uZShzNSwgJy5wcmljZS1ub3RlJyksIGQucHJpY2Uubm90ZSk7CiAgICAgIGFsbChzNSwgJy5wcmljZS1jYXJkJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciBzID0gZC5wcmljZS5jYXJkc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgICAgc2V0UGxhaW4ob25lKGMsICcucGMtbmFtZScpLCBzLm5hbWUpOwogICAgICAgIHNldFRleHQob25lKGMsICcucGMtcHJpY2UnKSwgcy5wcmljZSk7CiAgICAgICAgc2V0UGxhaW4ob25lKGMsICcucGMtcHJpY2Utc3ViJyksIHMuc3ViKTsKICAgICAgICBhbGwoYywgJy5wYy1saXN0IGxpJykuZm9yRWFjaChmdW5jdGlvbiAobGksIGspIHsKICAgICAgICAgIHZhciBzcCA9IGFsbChsaSwgJ3NwYW4nKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguY2xhc3NOYW1lLmluZGV4T2YoJ2ljb24nKSA9PT0gLTE7IH0pWzBdOwogICAgICAgICAgaWYgKHNwICYmIHR5cGVvZiBzLml0ZW1zW2tdID09PSAnc3RyaW5nJykgc2V0UGxhaW4oc3AsIHMuaXRlbXNba10pOwogICAgICAgIH0pOwogICAgICAgIHZhciBiID0gb25lKGMsICcuYnRuLWNhcmQnKTsKICAgICAgICBpZiAoYikgeyBpZiAocy5idG4uaHJlZikgYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBzLmJ0bi5ocmVmKTsgc2V0VGV4dChiLCBzLmJ0bi50ZXh0KTsgfQogICAgICB9KTsKCiAgICAgIHZhciBzNiA9IG51bShzY29wZSwgJzA2Jyk7CiAgICAgIHNldFBsYWluKG9uZShzNiwgJy5zZWN0aW9uLWxhYmVsIGgyJyksIGQuZmFxLmhlYWQpOwogICAgICBzZXRQbGFpbihvbmUoczYsICcuc2VjdGlvbi1oZWFkIC5sYWJlbCcpLCBkLmZhcS5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHM2LCAnLnNlY3Rpb24taGVhZCAuaDInKSwgZC5mYXEuaDIpOwogICAgICBhbGwoczYsICcuZmFxLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgIHZhciBzID0gZC5mYXEuaXRlbXNbaV07IGlmICghcykgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLmZhcS1xJyksIHMucSk7CiAgICAgICAgc2V0SHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSwgcy5hKTsKICAgICAgfSk7CgogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5jdGEgLmgyJyksIGQuY3RhLmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICAgIHZhciBzID0gZC5jdGEuYnV0dG9uc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgICAgaWYgKHMuaHJlZikgYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBzLmhyZWYpOwogICAgICAgIGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHNldFBsYWluKHgsIHMudGV4dCk7IH0pOwogICAgICB9KTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuZm9vdC1ub3RlJyksIGQuZm9vdE5vdGUpOwogICAgICBzZXRQbGFpbihvbmUoc2NvcGUsICcuZm9vdGVyIC5jb3B5JyksIGQuZm9vdGVyLmNvcHkpOwogICAgICBhbGwoc2NvcGUsICcuc29jaWFscyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciBzID0gZC5mb290ZXIuc29jaWFsc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgICAgc2V0UGxhaW4oYSwgcy5sYWJlbCk7CiAgICAgICAgaWYgKHMuaHJlZikgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBzLmhyZWYpOwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBqc1N0cihzKSB7IHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICAgIGZ1bmN0aW9uIHBhdGNoU2NyaXB0KHNyYywgZCkgewogICAgICB2YXIgb3V0ID0gc3JjLCBtaXNzZWQgPSBbXTsKICAgICAgaWYgKGQudGlja2VyLmxlbmd0aCkgewogICAgICAgIGlmICghL3ZhciBpdGVtcyA9IFxbLy50ZXN0KG91dCkpIG1pc3NlZC5wdXNoKCfQsdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAnKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG91dCA9IG91dC5yZXBsYWNlKC8odmFyIGl0ZW1zID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgICAgICAgdmFyIGJvZHkgPSBkLnRpY2tlci5tYXAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuICcgICAgICAgICcgKyBqc1N0cihzKTsgfSkuam9pbignLFxuJyk7CiAgICAgICAgICAgIHJldHVybiBwMSArICdcbicgKyBib2R5ICsgJ1xuICAgICAgJyArIHAyOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7IHRleHQ6IG91dCwgbWlzc2VkOiBtaXNzZWQgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGRpZ2l0cyhzKSB7IHJldHVybiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKS5yZXBsYWNlKC9bXlxkXS9nLCAnJyk7IH0KCiAgICBmdW5jdGlvbiBidWlsZExkKGRvYywgc2NvcGUsIGQpIHsKICAgICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgICBpZiAoIXMpIHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCIGxkK2pzb24nIH07CiAgICAgIHZhciBvOwogICAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgICBjYXRjaCAoZSkgeyByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICdsZCtqc29uINC90LUg0YfQuNGC0LDQtdGC0YHRjzogJyArIGUubWVzc2FnZSB9OyB9CgogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CiAgICAgIGZ1bmN0aW9uIG5vZGUocCkgeyByZXR1cm4gZy5maWx0ZXIocClbMF07IH0KCiAgICAgIHZhciBwYWdlID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjd2VicGFnZScpID4gLTE7IH0pOwogICAgICBpZiAocGFnZSkgcGFnZS5kYXRlTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApOwoKICAgICAgLyog0JLQvtC_0YDQvtGB0Ysg4oCUINC40Lcg0YPQttC1INGB0L7QsdGA0LDQvdC90L7QuSDRgNCw0LfQvNC10YLQutC4LCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4gKi8KICAgICAgdmFyIGZhcSA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJzsgfSk7CiAgICAgIGlmIChmYXEpIHsKICAgICAgICBmYXEubWFpbkVudGl0eSA9IGFsbChzY29wZSwgJy5mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdAdHlwZSc6ICdRdWVzdGlvbicsCiAgICAgICAgICAgIG5hbWU6IHQob25lKGl0LCAnLmZhcS1xJykpLAogICAgICAgICAgICBhY2NlcHRlZEFuc3dlcjogeyAnQHR5cGUnOiAnQW5zd2VyJywgdGV4dDogdChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSkgfQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0KDQsNCx0L7RgtGLIOKAlCDQuNC3INGB0LXRgtC60LggKi8KICAgICAgdmFyIGxpc3QgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnSXRlbUxpc3QnOyB9KTsKICAgICAgaWYgKGxpc3QpIHsKICAgICAgICB2YXIgY2VsbHMgPSBhbGwoc2NvcGUsICcuY2VsbCcpOwogICAgICAgIGxpc3QubnVtYmVyT2ZJdGVtcyA9IGNlbGxzLmxlbmd0aDsKICAgICAgICBsaXN0Lml0ZW1MaXN0RWxlbWVudCA9IGNlbGxzLm1hcChmdW5jdGlvbiAoYywgaSkgewogICAgICAgICAgdmFyIGltID0gb25lKGMsICdpbWcnKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdAdHlwZSc6ICdMaXN0SXRlbScsCiAgICAgICAgICAgIHBvc2l0aW9uOiBpICsgMSwKICAgICAgICAgICAgaXRlbTogewogICAgICAgICAgICAgICdAdHlwZSc6ICdJbWFnZU9iamVjdCcsCiAgICAgICAgICAgICAgbmFtZTogYy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSB8fCAnJywKICAgICAgICAgICAgICBjYXB0aW9uOiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ2FsdCcpIHx8ICcnKSA6ICcnLAogICAgICAgICAgICAgIGNvbnRlbnRVcmw6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJycsCiAgICAgICAgICAgICAgd2lkdGg6IGltID8gTnVtYmVyKGltLmdldEF0dHJpYnV0ZSgnd2lkdGgnKSkgOiB1bmRlZmluZWQsCiAgICAgICAgICAgICAgaGVpZ2h0OiBpbSA_IE51bWJlcihpbS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpKSA6IHVuZGVmaW5lZAogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKiDQptC10L3RiyDigJQg0LjQtyDQutCw0YDRgtC-0YfQtdC6INC90LAg0YHRgtGA0LDQvdC40YbQtSwg0YfRgtC-0LHRiyDQvdC1INGA0LDQt9C-0YjQu9C40YHRjCAqLwogICAgICB2YXIgc3J2ID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1NlcnZpY2UnOyB9KTsKICAgICAgaWYgKHNydiAmJiBBcnJheS5pc0FycmF5KHNydi5vZmZlcnMpKSB7CiAgICAgICAgdmFyIGNhcmRzID0gYWxsKHNjb3BlLCAnLnByaWNlLWNhcmQnKTsKICAgICAgICBzcnYub2ZmZXJzID0gY2FyZHMubWFwKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgICB2YXIgd2FzID0gc3J2Lm9mZmVyc1tpXSB8fCB7fTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdAdHlwZSc6ICdPZmZlcicsCiAgICAgICAgICAgIG5hbWU6IHQob25lKGMsICcucGMtbmFtZScpKSwKICAgICAgICAgICAgZGVzY3JpcHRpb246IHQob25lKGMsICcucGMtcHJpY2Utc3ViJykpLAogICAgICAgICAgICBwcmljZTogZGlnaXRzKG93blRleHQob25lKGMsICcucGMtcHJpY2UnKSkpLAogICAgICAgICAgICBwcmljZUN1cnJlbmN5OiB3YXMucHJpY2VDdXJyZW5jeSB8fCAnUlVCJywKICAgICAgICAgICAgcHJpY2VWYWxpZFVudGlsOiB3YXMucHJpY2VWYWxpZFVudGlsIHx8ICcyMDI2LTEyLTMxJywKICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZScKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHZhciBwcmltYXJ5ID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjcHJpbWFyeWltYWdlJykgPiAtMTsgfSk7CiAgICAgIHZhciBmaXJzdEltZyA9IG9uZShzY29wZSwgJy5jZWxsIGltZycpOwogICAgICBpZiAocHJpbWFyeSAmJiBmaXJzdEltZykgewogICAgICAgIHByaW1hcnkudXJsID0gZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCBwcmltYXJ5LnVybDsKICAgICAgICBwcmltYXJ5LmNhcHRpb24gPSBmaXJzdEltZy5nZXRBdHRyaWJ1dGUoJ2FsdCcpIHx8IHByaW1hcnkuY2FwdGlvbjsKICAgICAgfQoKICAgICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCB9OwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCgogICAgZnVuY3Rpb24gY29tbWVudHMoZG9jKSB7CiAgICAgIHZhciBvdXQgPSBbXSwgdyA9IGRvYy5jcmVhdGVUcmVlV2Fsa2VyKGRvYy5ib2R5LCAxMjgsIG51bGwsIGZhbHNlKSwgbjsKICAgICAgd2hpbGUgKChuID0gdy5uZXh0Tm9kZSgpKSkgewogICAgICAgIHZhciB2ID0gbi5ub2RlVmFsdWUgfHwgJyc7CiAgICAgICAgaWYgKHYuaW5kZXhPZignQVZBTlpBVE8uUlUnKSA-IC0xKSB7IG91dC5wdXNoKCc8IS0tJyArIHYgKyAnLS0-Jyk7IG91dC5wdXNoKCcnKTsgYnJlYWs7IH0KICAgICAgfQogICAgICByZXR1cm4gb3V0OwogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VtYmxlKGQpIHsKICAgICAgcmV0dXJuIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2LW1hbGUnKTsKICAgICAgICB2YXIgc3R5bGUgPSBhbGwoZG9jLCAnc3R5bGUnKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2LW1hbGUgLmJlbnRvJykgPiAtMTsgfSlbMF07CiAgICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignYXZtLXRpY2tlcicpID4gLTE7IH0pWzBdOwogICAgICAgIHZhciBmb250TGluayA9IGRvYy5xdWVyeVNlbGVjdG9yKCdsaW5rW2hyZWYqPSJjc3MyP2ZhbWlseT0iXScpOwoKICAgICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICAgIGlmICghc2NvcGUpIG1pc3NpbmcucHVzaCgn0LHQu9C-0LogLmF2LW1hbGUnKTsKICAgICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQpOwogICAgICAgIHZhciBsZCA9IGJ1aWxkTGQoZG9jLCBzY29wZSwgZCk7CiAgICAgICAgaWYgKCFsZC50ZXh0KSB0aHJvdyBuZXcgRXJyb3IobGQuZXJyKTsKCiAgICAgICAgdmFyIHRleHQgPSBjb21tZW50cyhkb2MpLmNvbmNhdChbCiAgICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4nLAogICAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4-JywKICAgICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vaS53Zm9saW8ucnUiPicsCiAgICAgICAgICBBVlpfRk9OVF9MSU5LLAogICAgICAgICAgJycsCiAgICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICAgIHNjLnRleHQsCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nLAogICAgICAgICAgbGQudGV4dCwKICAgICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgICBdKS5qb2luKCdcbicpOwoKICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBtaXNzZWQ6IHNjLm1pc3NlZCB9OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2em0tb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2em0tYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBoYXJ2ZXN0KCk7CiAgICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICAgIGFzc2VtYmxlKGNmZykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgLyog0YHQstC10YDRj9C10Lw6INCy0YHRkSDQu9C4INCy0LLQtdC00ZHQvdC90L7QtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQv9C-0L_QsNC70L4g0LIg0LrQvtC0ICovCiAgICAgICAgdmFyIGRvYzIgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MyLnF1ZXJ5U2VsZWN0b3IoJy5hdi1tYWxlJykpOwogICAgICAgIHZhciBub3RMYW5kZWQgPSBhZ2FpbiA_IGxhbmRlZChkLCBhZ2FpbiwgL14kLykgOiBbJ9GB0YLRgNCw0L3QuNGG0LAg0L3QtSDRgNCw0LfQvtCx0YDQsNC70LDRgdGMJ107CiAgICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6INGB0YLRgNCw0L3QuNGG0Ysg0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgICBpZiAocmVzLm1pc3NlZC5sZW5ndGgpIG5vdGUgKz0gJyDQndC1INC90LDQudC00LXQvdC-INCyINGB0LrRgNC40L_RgtC1OiAnICsgcmVzLm1pc3NlZC5qb2luKCcsICcpICsgJy4nOwogICAgICAgIGlmIChub3RMYW5kZWQubGVuZ3RoKSBub3RlICs9ICcg0J3QlSDQl9CQ0J_QmNCh0JDQm9Ce0KHQrCDQsiDQutC-0LQ6ICcgKyBub3RMYW5kZWQuc2xpY2UoMCwgNikuam9pbignLCAnKSArCiAgICAgICAgICAobm90TGFuZGVkLmxlbmd0aCA-IDYgPyAnINC4INC10YnRkSAnICsgKG5vdExhbmRlZC5sZW5ndGggLSA2KSA6ICcnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2em0tdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MucXVlcnlTZWxlY3RvcignLmF2LW1hbGUnKSk7CiAgICAgICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdhdm0tdGlja2VyJykgPiAtMTsgfSlbMF07CiAgICAgICAgaWYgKHNjKSByZWFkU2NyaXB0Qml0cyhzYy50ZXh0Q29udGVudCwgYWdhaW4pOwogICAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgICAgaWYgKGEgPT09IGIpIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLicpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0YHRgtCw0LvQvicsIEpTT04ucGFyc2UoYikpOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1tYWxlJyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgLmF2LW1hbGUnKTsKICAgIGNmZyA9IHJlYWRDZmcoc2NvcGUpOwogICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdhdm0tdGlja2VyJykgPiAtMTsKICAgIH0pWzBdOwogICAgaWYgKHNjKSByZWFkU2NyaXB0Qml0cyhzYy50ZXh0Q29udGVudCwgY2ZnKTsKICAgIHN0YXJ0KCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgIHJvb3QuaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6bS13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6bS1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC80YPQttGB0LrQvtC5INGE0L7RgtC-0YHQtdGB0YHQuNC4PC9oMj48L2Rpdj4nICsKICAgICAgJzxkaXYgaWQ9ImF2em0tYm9keSI-PHAgY2xhc3M9ImF2em0taGludCI-0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys6ICcgKwogICAgICBlc2MoZS5tZXNzYWdlKSArICc8L3A-PC9kaXY-PC9kaXY-JzsKICB9KTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0LzRg9C20YHQutC-0Lkg0YTQvtGC0L7RgdC10YHRgdC40Lgg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6ImludGVyaW9yIix0aXRsZToi0J_QsNC90LXQu9GMINC40L3RgtC10YDRjNC10YDQvdC-0Lkg0YHRitGR0LzQutC4IixzaG9ydDoi0JjQvdGC0LXRgNGM0LXRgNGLIixoaW50OiLRgNCw0LHQvtGC0YssINC_0YDQtdC40LzRg9GJ0LXRgdGC0LLQsCwg0LrQu9C40LXQvdGC0YssINGA0LDQt9C80LXRgtC60LAiLHBhZ2VzOlsiL2ludGVyaWVybm9lLXBvcnRmb2xpbyJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQmNCd0KLQldCg0KzQldCg0J3QntCZINCh0KrQgdCc0JrQmCAgdjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgL2ludGVyaWVybm9lLXBvcnRmb2xpbwoKICAg0J3QuNGH0LXQs9C-INC90LUg0L_Rg9Cx0LvQuNC60YPQtdGCLiDQp9C40YLQsNC10YIg0JjQodCl0J7QlNCd0KvQmSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiywg0L_QvtC00YHRgtCw0LLQu9GP0LXRggogICDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiyDQuCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0Log0YbQtdC70LjQutC-0Lwg4oCUINCy0YHRgtCw0LLQu9GP0LXRgtGB0Y8KICAg0L7QtNC90LjQvCDQutGD0YHQutC-0Lwg0L_QvtCy0LXRgNGFIEhUTUwt0LHQu9C-0LrQsCDRgdGC0YDQsNC90LjRhtGLLgoKICAg0JjRgdGF0L7QtNC90LjQuiwg0LAg0L3QtSDQttC40LLQvtC5IERPTTog0YHQutGA0LjQv9GC0Ysgd2ZvbGlvINC00L7Qv9C40YHRi9Cy0LDRjtGCINCy0L3QtdGI0L3QuNC8CiAgINGB0YHRi9C70LrQsNC8IHRhcmdldD0iX2JsYW5rIiDQv9GA0Y_QvNC-INCyINCx0YDQsNGD0LfQtdGA0LUsINC4INC_0LDQvdC10LvRjCwg0YfQuNGC0LDRjtGJ0LDRjwogICDQttC40LLRg9GOINGB0YLRgNCw0L3QuNGG0YMsINC30LDQv9C10LrQsNC70LAg0LHRiyDRjdGC0Lgg0YfRg9C20LjQtSDQv9GA0LDQstC60Lgg0LIg0LLQsNGIINC60L7QtC4KICAg0JfQtNC10YHRjCDRgdGB0YvQu9C60Lgg0L3QsCBUZWxlZ3JhbSDQuCBCZWhhbmNlINC60LDQuiDRgNCw0Lcg0LLQvdC10YjQvdC40LUsINGC0LDQuiDRh9GC0L4KICAg0LHQvtC70LXQt9C90Ywg0LHRi9C70LAg0LHRiyDQvdC1INGC0LXQvtGA0LXRgtC40YfQtdGB0LrQvtC5LgoKICAg0KfRgtC-INC_0LDQvdC10LvRjCDQtNC10YDQttC40YIg0LLQvNC10YHRgtC1LCDRh9GC0L7QsdGLINC90LUg0YDQsNC30L7RiNC70L7RgdGMOgogICAgIMK3INC60LDRgNGC0LjQvdC60LAgU2VydmljZSDQsiDRgNCw0LfQvNC10YLQutC1IOKAlCDQuNC3INC_0LXRgNCy0L7QuSDRgNCw0LHQvtGC0Ysg0LPQsNC70LXRgNC10Lg7CiAgICAgwrcg0YbQtdC90LAg0LIg0YDQsNC30LzQtdGC0LrQtSDigJQg0LjQtyDQv9C10YDQstC-0LPQviDQv9GA0LXQuNC80YPRidC10YHRgtCy0LAsINCz0LTQtSDQvtC90LAg0L3QsNC_0LjRgdCw0L3QsAogICAgICAg0LTQu9GPINC70Y7QtNC10LkuINCV0YHQu9C4INGG0LjRhNGA0YMg0L3QsNC50YLQuCDQvdC1INGD0LTQsNC70L7RgdGMLCDQv9Cw0L3QtdC70Ywg0J3QlSDQv9GA0LjQtNGD0LzRi9Cy0LDQtdGCCiAgICAgICDQtdGRLCDQsCDQvtGB0YLQsNCy0LvRj9C10YIg0L_RgNC10LbQvdGO0Y4g0Lgg0L_RgNC10LTRg9C_0YDQtdC20LTQsNC10YIuCgogICDQoNCw0LHQvtGCINGA0L7QstC90L4gMTE6INC60LvQsNGB0YHRiyBnMeKApmcxMSDQt9Cw0LTQsNGO0YIg0LPQtdC-0LzQtdGC0YDQuNGOINCx0LXQvdGC0L4t0YHQtdGC0LrQuCwKICAg0LTQstC10L3QsNC00YbQsNGC0LDRjyDRgtGA0LXQsdGD0LXRgiDQv9GA0LDQstC60LggQ1NTLiDQn9C-0Y3RgtC-0LzRgyDQtNC-0LHQsNCy0LvQtdC90LjRjyDRgNCw0LHQvtGCINC30LTQtdGB0Ywg0L3QtdGCLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQsCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0LAsINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQkiA8aGVhZD4gd2ZvbGlvINGB0LLQvtGPINGB0YHRi9C70LrQsCDQvdCwIEpvc3QvUnViaWsg0L7RgiDRgtC10LzRiywg0Lgg0L7QvdCwINGB0YLQvtC40YIg0KDQkNCd0KzQqNCVCiAgICAg0L3QsNGI0LXQuTog0L_QsNC90LXQu9GMINCx0YDQsNC70LAg0L_QtdGA0LLRg9GOINC_0L7QtNGF0L7QtNGP0YnRg9GOINC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60L7QuSDQv9C-0LTQvNC10L3Rj9C70LAKICAgICDQvdCw0YfQtdGA0YLQsNC90LjRjyDQsdC70L7QutCwINC90LAg0YLQtdC80LjQvdGLLiDQndCw0LHQvtGAINCy0LXRgdC-0LIg0LfQsNC00LDQvSBDU1Mg0LHQu9C-0LrQsCwg0L_QvtGN0YLQvtC80YMKICAgICDQtNC10YDQttC40Lwg0LXQs9C-INC30LTQtdGB0YwuINCc0LXQvdGP0LXRgtGB0Y8g0LTQuNC30LDQudC9IOKAlCDQvNC10L3Rj9C10YLRgdGPINGN0YLQsCDRgdGC0YDQvtC60LAuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMTAwOzIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICcmYW1wO2ZhbWlseT1SdWJpazppdGFsLHdnaHRAMCwxMDA7MCwyMDA7MCwzMDA7MSwxMDA7MSwyMDAnICsKICAgICcmYW1wO2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURAMjAuLjQ4LDEwMC4uNzAwLDAuLjEsLTUwLi4yMDAnICsKICAgICcmYW1wO2Rpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4nOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQvtCy0LXRgNC60LAgwqvQtNC-0LvQtdGC0LXQu9C-INC70LjCuyAtLS0tLS0tLS0tCiAgICAg0J_QsNC90LXQu9GMINC_0LjRiNC10YIg0LfQvdCw0YfQtdC90LjRjyDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQtdC3INGB0LXQu9C10LrRgtC-0YDRiy4g0JXRgdC70Lgg0YHQtdC70LXQutGC0L7RgAogICAgINC90LUg0L3QsNGI0ZHQu9GB0Y8g0LjQu9C4INC_0L7QtNGB0YLQsNC90L7QstC60LAg0L3QtSDRgdC-0LLQv9Cw0LvQsCDigJQg0LfQsNC_0LjRgdGMINC80L7Qu9GH0LAg0L3QtSDQv9GA0L7QuNGB0YXQvtC00LjRgi4KICAgICDQmNC80LXQvdC90L4g0YLQsNC6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC30LDRgdGC0YDRj9C70L4g0L3QsCAxMjU6INC_0LDQvdC10LvRjCDQv9C-0YHRh9C40YLQsNC70LAgMTI3LAogICAgINC30LDQv9C40YHQsNGC0Ywg0L3QtSDRgdC80L7Qs9C70LAsINCwINC_0YDQvtCy0LXRgNC60LAgwqvRgdCx0L7RgNC60LAg0YHQvtCy0L_QsNC00LDQtdGCINGBINC40YHRhdC-0LTQvdC40LrQvtC8wrsKICAgICDRgdGA0LDQstC90LjQstCw0LvQsCDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3QvtC1INGBINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdGL0LwuCgogICAgINCf0L7RjdGC0L7QvNGDINC_0L7RgdC70LUg0YHQsdC-0YDQutC4INGH0LjRgtCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0J7QkdCg0JDQotCd0J4g0Lgg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4KICAgICDQstCy0ZHQuyDRh9C10LvQvtCy0LXQui4g0J3QtdGB0L7QstC_0LDQstGI0LjQtSDQv9C-0LvRjyDQv9Cw0L3QtdC70Ywg0L3QsNC30YvQstCw0LXRgiDQstGB0LvRg9GFLiAqLwogIGZ1bmN0aW9uIGxhbmRlZChleHBlY3RlZCwgYWN0dWFsLCBza2lwLCBwYXRoLCBvdXQpIHsKICAgIHBhdGggPSBwYXRoIHx8ICcnOyBvdXQgPSBvdXQgfHwgW107CiAgICBpZiAoZXhwZWN0ZWQgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHsKICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBsYW5kZWQoZXhwZWN0ZWRba10sIGFjdHVhbFtrXSwgc2tpcCwgcGF0aCA_IHBhdGggKyAnLicgKyBrIDogaywgb3V0KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKFN0cmluZyhleHBlY3RlZCA9PSBudWxsID8gJycgOiBleHBlY3RlZCkgIT09IFN0cmluZyhhY3R1YWwgPT0gbnVsbCA_ICcnIDogYWN0dWFsKSkgewogICAgICBpZiAoIXNraXAgfHwgIXNraXAudGVzdChwYXRoKSkgb3V0LnB1c2gocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiwogICAgINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMjQg0LDQstCz0YPRgdGC0LAgMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5IiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICLQvtGCIDE0IDkwMCDigr0iLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIm1ha2VzT2ZmZXIiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICAgICAicHJpY2UiOiAiMTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAiY29udGFjdFBvaW50IjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgICAgICJjb250YWN0VHlwZSI6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgICAgICJhcmVhU2VydmVkIjogIlJVIiwKICAgICAgICAgICJhdmFpbGFibGVMYW5ndWFnZSI6IFsKICAgICAgICAgICAgIlJ1c3NpYW4iLAogICAgICAgICAgICAiRW5nbGlzaCIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSI6IHsKICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwKICAgICAgInB1Ymxpc2hlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImluTGFuZ3VhZ2UiOiAicnUtUlUiCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnppbi1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgTUFYVyA9IDEyNDA7IC8vINC_0YDQtdC00LXQuyDRiNC40YDQuNC90Ysg0LrQsNC00YDQsCwg0YHQvC4g0LjRgdGC0L7RgNC40Y4g0L_RgNC-0LXQutGC0LAKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGRpZ2l0cyhzKSB7IHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKTsgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCyINC60L7QvdGE0LjQsyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuaGVyby10aXRsZS1pbm5lcicpOwogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IHQob25lKHNjb3BlLCAnLmhlcm8tZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChpbm5lcnNbMF0pLAogICAgICAgIGxpbmUyOiBpbm5lcnNbMV0gPyB0KG9uZShpbm5lcnNbMV0sICdlbScpIHx8IGlubmVyc1sxXSkgOiAnJywKICAgICAgICBsaW5lMzogdChpbm5lcnNbMl0pLAogICAgICAgIHN1YjogdChvbmUoc2NvcGUsICcuaGVyby1zdWInKSksCiAgICAgICAgaGludDogb3duVGV4dChvbmUoc2NvcGUsICcuaGVyby1zY3JvbGwtaGludCcpKQogICAgICB9LAogICAgICBzZWN0aW9uTGFiZWw6IHQob25lKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgIHdvcmtzOiBhbGwoc2NvcGUsICcuZ2FsbGVyeS1pdGVtJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgdmFyIGltID0gb25lKGEsICdpbWcnKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJywKICAgICAgICAgIGltZzogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJywKICAgICAgICAgIGFsdDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgIC8qINC90LDRgdGC0L7Rj9GJ0LjQtSDRgNCw0LfQvNC10YDRiyDRhNCw0LnQu9CwOiDQvtC90Lgg0YPRhdC-0LTRj9GCINCyINGA0LDQt9C80LXRgtC60YMsINC4INCy0YDQsNGC0Ywg0LjQvCDQvdC10LvRjNC30Y8uCiAgICAgICAgICAgICDQn9GA0Lgg0LLRi9Cx0L7RgNC1INC90L7QstC-0LPQviDQutCw0LTRgNCwINC_0LDQvdC10LvRjCDQuNC30LzQtdGA0Y_QtdGCINC10LPQviDRgdCw0LzQsCwg0YHQvC4g0L3QuNC20LUuICovCiAgICAgICAgICB3OiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykgfHwgJycpIDogJycsCiAgICAgICAgICBoOiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpIHx8ICcnKSA6ICcnLAogICAgICAgICAgdGl0bGU6IHQob25lKGEsICcub3ZlcmxheS10ZXh0IGgzJykpLAogICAgICAgICAgY2FwdGlvbjogdChvbmUoYSwgJy5vdmVybGF5LXRleHQgc3BhbicpKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBhZHY6IHsKICAgICAgICBoMjogdChvbmUoc2NvcGUsICcuYWR2YW50YWdlcy1oZWFkZXIgaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzY29wZSwgJy5hZHYtaXRlbScpLm1hcChmdW5jdGlvbiAoZCkgewogICAgICAgICAgcmV0dXJuIHsgdGl0bGU6IHQob25lKGQsICdoMycpKSwgdGV4dDogdChvbmUoZCwgJ3AnKSkgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBjbGllbnRzOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLmNsaWVudHMtaGVhZGVyIC5sYWJlbCcpKSwKICAgICAgICBoMjogdChvbmUoc2NvcGUsICcuY2xpZW50cy1oZWFkZXIgaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzY29wZSwgJy5jbGllbnQtaXRlbScpLm1hcChmdW5jdGlvbiAoYykgewogICAgICAgICAgcmV0dXJuIHsgbmFtZTogdChvbmUoYywgJy5jbGllbnQtbmFtZScpKSwgdHlwZTogdChvbmUoYywgJy5jbGllbnQtdHlwZScpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGN0YTogewogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5jdGEgaDInKSksCiAgICAgICAgYnV0dG9uczogYWxsKHNjb3BlLCAnLmJ0bi1yb3cgYScpLm1hcChmdW5jdGlvbiAoYikgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogdChiKSwgaHJlZjogYi5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pLAogICAgICAgIHNvY2lhbHM6IGFsbChzY29wZSwgJy5jdGEtc29jaWFscyBhJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyBsYWJlbDogdChhKSwgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHNlbzogeyBwYWdlTmFtZTogJycsIHBhZ2VEZXNjcmlwdGlvbjogJycsIG5hbWU6ICcnLCBkZXNjcmlwdGlvbjogJycsIHByaWNlOiAnJywgcHJpY2VWYWxpZFVudGlsOiAnJywgY2F0YWxvZzogW10gfQogICAgfTsKICB9CgogIC8qINGA0LDQt9C80LXRgtC60LA6INC40LzRjywg0L7Qv9C40YHQsNC90LjQtSwg0YbQtdC90LAg0Lgg0LrQsNGC0LDQu9C-0LMg0YPRgdC70YPQsyDQttC40LLRg9GCINGC0L7Qu9GM0LrQviDQsiBsZCtqc29uICovCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF07CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgdmFyIHBhZ2UgPSAob1snQGdyYXBoJ10gfHwgW10pLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnOyB9KVswXTsKICAgICAgaWYgKHBhZ2UpIHsgY2ZnLnNlby5wYWdlTmFtZSA9IHBhZ2UubmFtZSB8fCAnJzsgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24gPSBwYWdlLmRlc2NyaXB0aW9uIHx8ICcnOyB9CiAgICAgIHZhciBzcnYgPSAob1snQGdyYXBoJ10gfHwgW10pLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1NlcnZpY2UnOyB9KVswXTsKICAgICAgaWYgKCFzcnYpIHJldHVybjsKICAgICAgY2ZnLnNlby5uYW1lID0gc3J2Lm5hbWUgfHwgJyc7CiAgICAgIGNmZy5zZW8uZGVzY3JpcHRpb24gPSBzcnYuZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgIHZhciBvZmYgPSAoc3J2Lm9mZmVycyB8fCBbXSlbMF0gfHwge307CiAgICAgIGNmZy5zZW8ucHJpY2UgPSBvZmYucHJpY2UgfHwgJyc7CiAgICAgIGNmZy5zZW8ucHJpY2VWYWxpZFVudGlsID0gb2ZmLnByaWNlVmFsaWRVbnRpbCB8fCAnJzsKICAgICAgY2ZnLnNlby5jYXRhbG9nID0gKCgoc3J2Lmhhc09mZmVyQ2F0YWxvZyB8fCB7fSkuaXRlbUxpc3RFbGVtZW50KSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgIHJldHVybiAoKGl0Lml0ZW1PZmZlcmVkIHx8IHt9KS5uYW1lKSB8fCAnJzsKICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINC_0L7Qu9GPINC-0YHRgtCw0L3Rg9GC0YHRjyDQv9GD0YHRgtGL0LzQuCwg0YHQsdC-0YDQutCwINC-0LEg0Y3RgtC-0Lwg0YHQutCw0LbQtdGCICovIH0KICB9CgogIC8qIC0tLS0tLS0tLS0g0LLRkdGA0YHRgtC60LAg0L_QsNC90LXQu9C4IC0tLS0tLS0tLS0KICAgICDQotC10LzQsCB3Zm9saW8g0LrRgNCw0YHQuNGCINC_0L7Qu9GPINCyINCx0LXQu9GL0Lkg0YLQtdC60YHRgiDQvdCwINCx0LXQu9C-0Lwg0YTQvtC90LUsINC_0L7RjdGC0L7QvNGDINGG0LLQtdGCLAogICAgINGI0YDQuNGE0YIg0LggLXdlYmtpdC10ZXh0LWZpbGwtY29sb3Ig0LfQsNC00LDRjtGC0YHRjyDRj9Cy0L3QviDQuCDRgSDQv9GA0LjQvtGA0LjRgtC10YLQvtC8LAogICAgINCwINCy0YHQtSDRh9Cw0YHRgtC90YvQtSDQv9GA0LDQstC40LvQsCDQvdCw0YfQuNC90LDRjtGC0YHRjyDRgSAjYXZ6aW4tcm9vdC4gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6aW4tcm9vdCwjYXZ6aW4tcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2emluLXJvb3QgaW5wdXQsI2F2emluLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnppbi1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6aW4tcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6aW4td2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDk4MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6aW4taGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6aW4taGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2emluLWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2emluLWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWYgaW5wdXQsI2F2emluLXJvb3QgLmF2emluLWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2emluLXJvb3QgLmF2emluLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnppbi13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4taW1ne2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWltZz5pbWd7d2lkdGg6NzBweDtoZWlnaHQ6ODhweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4taW1nPmltZy5iYWR7b3V0bGluZToycHggc29saWQgI2QzM30nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1pbWcgLmd7ZmxleDoxfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTQwcHgsMWZyKSk7Z2FwOjEwcHh9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tZ3JpZCBmaWd1cmV7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tZ3JpZCBpbWd7d2lkdGg6MTAwJTtoZWlnaHQ6MTIwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrfScsCiAgICAnI2F2emluLW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnppbi1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINC70LjRiNC90LjQuSDQv9C10YDQtdC90L7RgTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIg0L_QtdGA0LLRi9C5INC_0L7RgdC70LUgPHRleHRhcmVhPiAqLwogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnppbi1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2emluLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emluLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGNmZyA9IG51bGw7CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRhNC-0YDQvNCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2emluLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnppbi1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC40L3RgtC10YDRjNC10YDQvdC-0Lkg0YHRitGR0LzQutC4PC9oMj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emluLWIiIGlkPSJhdnppbi1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnppbi1ib2R5Ij4nOwoKICAgIC8qINCo0JDQn9Ca0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiIG9wZW4-PHN1bW1hcnk-0KjQsNC_0LrQsCDRgdGC0YDQsNC90LjRhtGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emluLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnppbi1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6IOKAlCDRgdGC0YDQvtC60LAgMScsICdoZXJvLmxpbmUxJywgY2ZnLmhlcm8ubGluZTEpICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAyICjQutGD0YDRgdC40LIsINGB0LXRgNGL0LwpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log4oCUINGB0YLRgNC-0LrQsCAzJywgJ2hlcm8ubGluZTMnLCBjZmcuaGVyby5saW5lMykgKwogICAgICBmaWVsZCgn0JLRgdGC0YPQv9C40YLQtdC70YzQvdGL0Lkg0YLQtdC60YHRgicsICdoZXJvLnN1YicsIGNmZy5oZXJvLnN1YiwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQn9C-0LTRgdC60LDQt9C60LAg0YMg0L_QvtC70L7RgdGLINC_0YDQvtC60YDRg9GC0LrQuCcsICdoZXJvLmhpbnQnLCBjZmcuaGVyby5oaW50KSArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQvdCw0LQg0LPQsNC70LXRgNC10LXQuScsICdzZWN0aW9uTGFiZWwnLCBjZmcuc2VjdGlvbkxhYmVsKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQoNCQ0JHQntCi0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiPjxzdW1tYXJ5PtCg0LDQsdC-0YLRiyDQsiDQs9Cw0LvQtdGA0LXQtSAoJyArIGNmZy53b3Jrcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnppbi1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6aW4taGludCI-0KDQsNCx0L7RgiDRgNC-0LLQvdC-INC-0LTQuNC90L3QsNC00YbQsNGC0Yw6INC40YUg0YDQsNC30LzQtdGAINC4INC80LXRgdGC0L4g0LIg0YHQtdGC0LrQtSDQt9Cw0LTQsNC90YsgJyArCiAgICAgICfQutC70LDRgdGB0LDQvNC4IGcx4oCmZzExLCDQtNC-0LHQsNCy0LvQtdC90LjQtSDQtNCy0LXQvdCw0LTRhtCw0YLQvtC5INGC0YDQtdCx0YPQtdGCINC_0YDQsNCy0LrQuCBDU1MuINCf0L7RgNGP0LTQvtC6INCyINGE0L7RgNC80LUg4oCUICcgKwogICAgICAn0L_QvtGA0Y_QtNC-0Log0L3QsCDRgdGC0YDQsNC90LjRhtC1LiDQmtCw0YDRgtC40L3QutGDINC_0LXRgNCy0L7QuSDRgNCw0LHQvtGC0Ysg0L_QsNC90LXQu9GMINC30LDQvtC00L3QviDRgdGC0LDQstC40YIg0LIg0YDQsNC30LzQtdGC0LrRgyAnICsKICAgICAgJ9C60LDQuiDQs9C70LDQstC90L7QtSDQuNC30L7QsdGA0LDQttC10L3QuNC1INGB0YLRgNCw0L3QuNGG0YsuPC9wPic7CiAgICBjZmcud29ya3MuZm9yRWFjaChmdW5jdGlvbiAodywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnppbi1jYXJkIj48aDQ-0KDQsNCx0L7RgtCwICcgKyAoaSArIDEpICsgKGkgPT09IDAgPyAnIOKAlCDQutGA0YPQv9C90LDRjywg0L7QvdCwINC20LUg0LIg0YDQsNC30LzQtdGC0LrQtScgOiAnJykgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ3dvcmtzLicgKyBpICsgJy50aXRsZScsIHcudGl0bGUpICsKICAgICAgICBmaWVsZCgn0KPRgtC-0YfQvdC10L3QuNC1INC_0L7QtCDQv9C-0LTQv9C40YHRjNGOJywgJ3dvcmtzLicgKyBpICsgJy5jYXB0aW9uJywgdy5jYXB0aW9uKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0KHRgdGL0LvQutCwINC90LAg0LDQu9GM0LHQvtC8JywgJ3dvcmtzLicgKyBpICsgJy5ocmVmJywgdy5ocmVmKSArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emluLWltZyI-PGltZyBkYXRhLXByZXY9IndvcmtzLicgKyBpICsgJy5pbWciIHNyYz0iJyArIGVzYyh3LmltZykgKyAnIiBhbHQ9IiI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0JDQtNGA0LXRgSDRhNC-0YLQvtCz0YDQsNGE0LjQuCcsICd3b3Jrcy4nICsgaSArICcuaW1nJywgdy5pbWcpICsKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6aW4tYiIgZGF0YS1jaG9vc2U9IndvcmtzLicgKyBpICsgJy5pbWciIGRhdGEtZnJvbT0iJyArIGVzYyh3LmhyZWYpICsgJyIgJyArCiAgICAgICAgJ3N0eWxlPSJwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206MTJweCI-0JLRi9Cx0YDQsNGC0Ywg0YHQviDRgdGC0YDQsNC90LjRhtGLINCw0LvRjNCx0L7QvNCwPC9idXR0b24-JyArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YTQvtGC0L7Qs9GA0LDRhNC40LggKGFsdCknLCAnd29ya3MuJyArIGkgKyAnLmFsdCcsIHcuYWx0KSArCiAgICAgICAgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGRhdGEtcD0id29ya3MuJyArIGkgKyAnLnciIHZhbHVlPSInICsgZXNjKHcudykgKyAnIj4nICsKICAgICAgICAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1wPSJ3b3Jrcy4nICsgaSArICcuaCIgdmFsdWU9IicgKyBlc2Mody5oKSArICciPicgKwogICAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQn9Cg0JXQmNCc0KPQqdCV0KHQotCS0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiPjxzdW1tYXJ5PtCf0YDQtdC40LzRg9GJ0LXRgdGC0LLQsCAoJyArIGNmZy5hZHYuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6aW4taW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emluLWhpbnQiPtCm0LXQvdCwLCDRgdGA0L7QuiDQuCDRh9C40YHQu9C-INGE0L7RgtC-0LPRgNCw0YTQuNC5IOKAlCDRjdGC0L4g0L7QsdC10YnQsNC90LjQtSDQutC70LjQtdC90YLRgy4gJyArCiAgICAgICfQodCy0LXRgNGP0LnRgtC10YHRjCDRgdC-INGB0YLRgNCw0L3QuNGG0LXQuSDRhtC10L06INGA0LDRgdGF0L7QtNC40YLRjNGB0Y8g0LjQvCDQvdC10LvRjNC30Y8uINCm0LjRhNGA0YMg0YbQtdC90Ysg0L_QsNC90LXQu9GMICcgKwogICAgICAn0L_QtdGA0LXQvdC-0YHQuNGCINC-0YLRgdGO0LTQsCDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0LDQvNCwLjwvcD4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCcsICdhZHYuaDInLCBjZmcuYWR2LmgyKTsKICAgIGNmZy5hZHYuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnppbi1jYXJkIj48aDQ-0J_Rg9C90LrRgiAnICsgKGkgKyAxKSArIChpID09PSAwID8gJyDigJQg0L7RgtGB0Y7QtNCwINCx0LXRgNGR0YLRgdGPINGG0LXQvdCwINC00LvRjyDRgNCw0LfQvNC10YLQutC4JyA6ICcnKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnYWR2Lml0ZW1zLicgKyBpICsgJy50aXRsZScsIGEudGl0bGUpICsKICAgICAgICBmaWVsZCgn0J_QvtGP0YHQvdC10L3QuNC1JywgJ2Fkdi5pdGVtcy4nICsgaSArICcudGV4dCcsIGEudGV4dCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQmtCb0JjQldCd0KLQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emluLXNlYyI-PHN1bW1hcnk-0JrQu9C40LXQvdGC0YsgKCcgKyBjZmcuY2xpZW50cy5pdGVtcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnppbi1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnppbi1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnY2xpZW50cy5sYWJlbCcsIGNmZy5jbGllbnRzLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnY2xpZW50cy5oMicsIGNmZy5jbGllbnRzLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmNsaWVudHMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnppbi1yb3ciPicgKyBmaWVsZCgn0JrQu9C40LXQvdGCICcgKyAoaSArIDEpLCAnY2xpZW50cy5pdGVtcy4nICsgaSArICcubmFtZScsIGMubmFtZSkgKwogICAgICAgIGZpZWxkKCfQp9C10Lwg0LfQsNC90LjQvNCw0LXRgtGB0Y8nLCAnY2xpZW50cy5pdGVtcy4nICsgaSArICcudHlwZScsIGMudHlwZSkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_QoNCY0JfQq9CSICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6aW4tc2VjIj48c3VtbWFyeT7Qn9GA0LjQt9GL0LIg0Lgg0YHRgdGL0LvQutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emluLWluIj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdjdGEuaDInLCBjZmcuY3RhLmgyLCAnYXJlYScpOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsgZmllbGQoJ9Ca0L3QvtC_0LrQsCAnICsgKGkgKyAxKSArICcg4oCUINGC0LXQutGB0YInLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLnRleHQnLCBiLnRleHQpICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0LDQtNGA0LXRgScsICdjdGEuYnV0dG9ucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgY2ZnLmN0YS5zb2NpYWxzLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsgZmllbGQoJ9Ch0L7RhtGB0LXRgtGMICcgKyAoaSArIDEpICsgJyDigJQg0L_QvtC00L_QuNGB0YwnLCAnY3RhLnNvY2lhbHMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKwogICAgICAgIGZpZWxkKCfQodC-0YbRgdC10YLRjCAnICsgKGkgKyAxKSArICcg4oCUINCw0LTRgNC10YEnLCAnY3RhLnNvY2lhbHMuJyArIGkgKyAnLmhyZWYnLCBzLmhyZWYpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCg0JDQl9Cc0JXQotCa0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiPjxzdW1tYXJ5PtCg0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6aW4taW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emluLWhpbnQiPtCt0YLQviDQvdC10LLQuNC00LjQvNCw0Y8g0YfQsNGB0YLRjCDRgdGC0YDQsNC90LjRhtGLIOKAlCDQtdGRINGH0LjRgtCw0Y7RgiDQv9C-0LjRgdC60L7QstC40LrQuCAnICsKICAgICAgJ9C4INCY0Jgt0L_QvtC80L7RidC90LjQutC4LiDQndC1INC_0LjRiNC40YLQtSDQt9C00LXRgdGMINGC0L7Qs9C-LCDRh9C10LPQviDQvdC10YIg0L3QsCDRgdCw0LzQvtC5INGB0YLRgNCw0L3QuNGG0LUuPC9wPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlTmFtZScsIGNmZy5zZW8ucGFnZU5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZURlc2NyaXB0aW9uJywgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnc2VvLm5hbWUnLCBjZmcuc2VvLm5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YPRgdC70YPQs9C4JywgJ3Nlby5kZXNjcmlwdGlvbicsIGNmZy5zZW8uZGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsKICAgICAgZmllbGQoJ9Cm0LXQvdCwLCDRgtC-0LvRjNC60L4g0YbQuNGE0YDRiyAo0L_QvtC00YHRgtCw0LLQuNGC0YHRjyDQuNC3INC_0YDQtdC40LzRg9GJ0LXRgdGC0LIpJywgJ3Nlby5wcmljZScsIGNmZy5zZW8ucHJpY2UpICsKICAgICAgZmllbGQoJ9Cm0LXQvdCwINC00LXQudGB0YLQstGD0LXRgiDQtNC-ICjQk9CT0JPQky3QnNCcLdCU0JQpJywgJ3Nlby5wcmljZVZhbGlkVW50aWwnLCBjZmcuc2VvLnByaWNlVmFsaWRVbnRpbCkgKyAnPC9kaXY-JzsKICAgIGNmZy5zZW8uY2F0YWxvZy5mb3JFYWNoKGZ1bmN0aW9uIChuLCBpKSB7CiAgICAgIGggKz0gZmllbGQoJ9Cj0YHQu9GD0LPQsCDQsiDQutCw0YLQsNC70L7Qs9C1ICcgKyAoaSArIDEpLCAnc2VvLmNhdGFsb2cuJyArIGksIG4pOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8L2Rpdj48ZGl2IGlkPSJhdnppbi1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emluLWIgcCIgaWQ9ImF2emluLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6aW4tYiIgaWQ9ImF2emluLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2emluLW1zZyI-PC9zcGFuPjwvZGl2PicgKwogICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnppbi1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnppbi1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgIGlmIChwcmV2KSB7IHByZXYuY2xhc3NMaXN0LnJlbW92ZSgnYmFkJyk7IHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7IG1lYXN1cmUocCwgZS50YXJnZXQudmFsdWUpOyB9CiAgICB9KTsKCiAgICAvKiDQoNCw0LfQvNC10YDRiyDQvdC-0LLQvtCz0L4g0LrQsNC00YDQsCDQv9Cw0L3QtdC70Ywg0LjQt9C80LXRgNGP0LXRgiDRgdCw0LzQsCDQuCDQvdC1INC00LDRkdGCINC40Lwg0YPRgdGC0LDRgNC10YLRjDoKICAgICAgINCyINGA0LDQt9C80LXRgtC60LUg0L7QvdC4INC-0LHRj9C30LDQvdGLINGB0L7QstC_0LDQtNCw0YLRjCDRgSDQvdCw0YHRgtC-0Y_RidC40Lwg0YTQsNC50LvQvtC8LiAqLwogICAgZnVuY3Rpb24gbWVhc3VyZShwYXRoLCB1cmwpIHsKICAgICAgaWYgKCF1cmwpIHJldHVybjsKICAgICAgdmFyIGJhc2UgPSBwYXRoLnJlcGxhY2UoL1wuaW1nJC8sICcnKTsKICAgICAgdmFyIGltID0gbmV3IEltYWdlKCk7CiAgICAgIGltLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZncgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy53Il0nKTsKICAgICAgICB2YXIgZmggPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5oIl0nKTsKICAgICAgICBpZiAoZncpIGZ3LnZhbHVlID0gaW0ubmF0dXJhbFdpZHRoOwogICAgICAgIGlmIChmaCkgZmgudmFsdWUgPSBpbS5uYXR1cmFsSGVpZ2h0OwogICAgICB9OwogICAgICBpbS5zcmMgPSB1cmw7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINC60LDQtNGA0LAg0YHQviDRgdGC0YDQsNC90LjRhtGLINCw0LvRjNCx0L7QvNCwIC0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2hvdENhY2hlID0ge307CgogICAgZnVuY3Rpb24gYWJzKHUpIHsKICAgICAgaWYgKCF1KSByZXR1cm4gJyc7CiAgICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICAgIGlmICh1LmluZGV4T2YoJy8nKSA9PT0gMCkgcmV0dXJuIGxvY2F0aW9uLm9yaWdpbiArIHU7CiAgICAgIHJldHVybiB1OwogICAgfQoKICAgIGZ1bmN0aW9uIGZyb21TcmNzZXQoc2V0LCBzcmMpIHsKICAgICAgaWYgKCFzZXQpIHsgdmFyIHUgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdSwgc21hbGw6IHUgfTsgfQogICAgICB2YXIgbGlzdCA9IHNldC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgIHZhciBwID0geC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHJldHVybiB7IHU6IGFicyhwWzBdKSwgdzogcGFyc2VJbnQocFsxXSwgMTApIHx8IDAgfTsKICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLnU7IH0pOwogICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7IHZhciB2ID0gYWJzKHNyYyk7IHJldHVybiB7IGZ1bGw6IHYsIHNtYWxsOiB2IH07IH0KICAgICAgdmFyIGJpZyA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLncgLSBhLnc7IH0pOwogICAgICB2YXIgc21hbGwgPSBsaXN0LnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS53IC0gYi53OyB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBmdWxsOiAoYmlnLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53IDw9IE1BWFc7IH0pWzBdIHx8IGJpZ1tiaWcubGVuZ3RoIC0gMV0pLnUsCiAgICAgICAgc21hbGw6IChzbWFsbC5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudyA-PSAyODA7IH0pWzBdIHx8IHNtYWxsWzBdKS51CiAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gc2hvdHNGcm9tKHVybCkgewogICAgICBpZiAoc2hvdENhY2hlW3VybF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoc2hvdENhY2hlW3VybF0pOwogICAgICByZXR1cm4gZmV0Y2godXJsICsgKHVybC5pbmRleE9mKCc_JykgPiAtMSA_ICcmJyA6ICc_JykgKyAndD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgICAgdmFyIHNlZW4gPSB7fSwgb3V0ID0gW107CiAgICAgICAgICBhbGwoZG9jLCAnaW1nJykuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHsKICAgICAgICAgICAgdmFyIHNldCA9IGltLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyY3NldCcpIHx8ICcnOwogICAgICAgICAgICB2YXIgcyA9IGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIHx8ICcnOwogICAgICAgICAgICBpZiAoc2V0LmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwICYmIHMuaW5kZXhPZignaS53Zm9saW8ucnUnKSA8IDApIHJldHVybjsKICAgICAgICAgICAgdmFyIHBhaXIgPSBmcm9tU3Jjc2V0KHNldCwgcyk7CiAgICAgICAgICAgIGlmICghcGFpci5mdWxsIHx8IHNlZW5bcGFpci5mdWxsXSkgcmV0dXJuOwogICAgICAgICAgICBzZWVuW3BhaXIuZnVsbF0gPSAxOwogICAgICAgICAgICBvdXQucHVzaChwYWlyKTsKICAgICAgICAgIH0pOwogICAgICAgICAgc2hvdENhY2hlW3VybF0gPSBvdXQ7CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0pOwogICAgfQoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2hvb3NlJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAvKiDQsNC00YDQtdGBINCx0LXRgNGR0Lwg0LjQtyDQv9C-0LvRjyDRgdGB0YvQu9C60LgsINCwINC90LUg0LjQtyDQuNGB0YXQvtC00L3QvtCz0L4g0LrQvtC90YTQuNCz0LA6CiAgICAgICAgINC10YHQu9C4INGA0LDQsdC-0YLRgyDRgtC-0LvRjNC60L4g0YfRgtC-INC_0LXRgNC10L3QsNC_0YDQsNCy0LjQu9C4LCDQutCw0LTRgNGLINC90YPQttC90Ysg0YEg0L3QvtCy0L7QuSDRgdGC0YDQsNC90LjRhtGLICovCiAgICAgIHZhciBpZHggPSBwLnNwbGl0KCcuJylbMV07CiAgICAgIHZhciBocmVmSW5wdXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0id29ya3MuJyArIGlkeCArICcuaHJlZiJdJyk7CiAgICAgIHZhciB1cmwgPSAoaHJlZklucHV0ICYmIGhyZWZJbnB1dC52YWx1ZS50cmltKCkpIHx8IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1mcm9tJyk7CiAgICAgIGlmICghdXJsKSB7IG1zZygn0KMg0YDQsNCx0L7RgtGLINC90LUg0YPQutCw0LfQsNC90LAg0YHRgdGL0LvQutCwIOKAlCDQstGL0LHQuNGA0LDRgtGMINC90LUg0LjQtyDRh9C10LPQvi4nKTsgcmV0dXJuOyB9CgogICAgICB2YXIgcGFuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6OCU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7JyArCiAgICAgICAgJ3BhZGRpbmc6MTZweDtvdmVyZmxvdzphdXRvO2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuNCknOwogICAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7Ql9Cw0LPRgNGD0LbQsNGOINGB0L3QuNC80LrQuCDRgdC-INGB0YLRgNCw0L3QuNGG0YsgJyArIGVzYyh1cmwpICsgJ-KApjwvcD4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6aW4tZ3JpZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI-PC9kaXY-JzsKICAgICAgdmFyIGNsb3NlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgIGNsb3NlQnRuLmNsYXNzTmFtZSA9ICdhdnppbi1iJzsKICAgICAgY2xvc2VCdG4udGV4dENvbnRlbnQgPSAn0J7RgtC80LXQvdCwJzsKICAgICAgY2xvc2VCdG4uc3R5bGUubWFyZ2luVG9wID0gJzEycHgnOwogICAgICBjbG9zZUJ0bi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBwYW5lLnJlbW92ZSgpOyB9OwogICAgICBwYW5lLmFwcGVuZENoaWxkKGNsb3NlQnRuKTsKICAgICAgcm9vdC5hcHBlbmRDaGlsZChwYW5lKTsKCiAgICAgIHNob3RzRnJvbSh1cmwpLnRoZW4oZnVuY3Rpb24gKHNob3RzKSB7CiAgICAgICAgdmFyIGhlYWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKTsKICAgICAgICB2YXIgZ3JpZCA9IHBhbmUucXVlcnlTZWxlY3RvcignLmF2emluLWdyaWQnKTsKICAgICAgICBpZiAoIXNob3RzLmxlbmd0aCkgeyBoZWFkLnRleHRDb250ZW50ID0gJ9Cd0LAg0YHRgtGA0LDQvdC40YbQtSAnICsgdXJsICsgJyDRgdC90LjQvNC60L7QsiDQvdC1INC90LDRiNC70L7RgdGMLiDQktGB0YLQsNCy0YzRgtC1INCw0LTRgNC10YEg0LLRgNGD0YfQvdGD0Y4uJzsgcmV0dXJuOyB9CiAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQktGL0LHQtdGA0LjRgtC1INGB0L3QuNC80L7QuiAoJyArIHNob3RzLmxlbmd0aCArICcpJzsKICAgICAgICBncmlkLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWd1cmUnKTsKICAgICAgICAgIHZhciBpbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAgICAgaW0uc3JjID0gaXQuc21hbGw7CiAgICAgICAgICBpbS5sb2FkaW5nID0gJ2xhenknOwogICAgICAgICAgZi5hcHBlbmRDaGlsZChpbSk7CiAgICAgICAgICBmLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBpbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0iJyArIHAgKyAnIl0nKTsKICAgICAgICAgICAgaW5wLnZhbHVlID0gaXQuZnVsbDsKICAgICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICAgIGlmIChwcmV2KSB7IHByZXYuY2xhc3NMaXN0LnJlbW92ZSgnYmFkJyk7IHByZXYuc3JjID0gaXQuZnVsbDsgfQogICAgICAgICAgICBtZWFzdXJlKHAsIGl0LmZ1bGwpOwogICAgICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICAgICAgfTsKICAgICAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoZik7CiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKS50ZXh0Q29udGVudCA9ICfQodGC0YDQsNC90LjRhtCwICcgKyB1cmwgKyAnINC90LUg0L7RgtC60YDRi9C70LDRgdGMOiAnICsgZXJyLm1lc3NhZ2UgKwogICAgICAgICAgJy4g0JLRgdGC0LDQstGM0YLQtSDQsNC00YDQtdGBINGB0L3QuNC80LrQsCDQstGA0YPRh9C90YPRji4nOwogICAgICB9KTsKICAgIH0pOwoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAg0LfQvdCw0YfQtdC90LjQuSDQuNC3INGE0L7RgNC80YsgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQogICAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgICAgdmFyIGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICBzZXRQYXRoKGQsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyksIGVsLnZhbHVlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMINCyINGA0LDQt9C80LXRgtC60YMgLS0tLS0tLS0tLQogICAgICAg0J_QtdGA0LXQv9C40YHRi9Cy0LDQtdC8INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0YLQtdC60YHRgiDRjdC70LXQvNC10L3RgtCwLCDQvdC1INGC0YDQvtCz0LDRjyDQstC70L7QttC10L3QvdGL0LUKICAgICAgINC30L3QsNGH0LrQuCDQuCDQvdC1INGC0LXRgNGP0Y8g0L_RgNC-0LHQtdC70L7QsiDQstC-0LrRgNGD0LMg0L3QuNGFOiDQvtGI0LjQsdC60LAsINGB0YLQvtC40LLRiNCw0Y8KICAgICAgINGC0YDRkdGFINC_0YDQsNCy0L7QuiDQvdCwINC00YDRg9Cz0LjRhSDRgdGC0YDQsNC90LjRhtCw0YUuICovCiAgICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB0ZXh0cy5wdXNoKGVsLmNoaWxkTm9kZXNbaV0pOwogICAgICB9CiAgICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgICAgdmFyIG1haW4gPSBudWxsOwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgICB9CiAgICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICAgIHZhciBwcmUgPSAocmF3Lm1hdGNoKC9eXHMqLykgfHwgWycnXSlbMF07CiAgICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgICBtYWluLm5vZGVWYWx1ZSA9IHByZSArIHYgKyBwb3N0OwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICAgIHRleHRzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dHNbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuaGVyby10aXRsZS1pbm5lcicpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5oZXJvLWV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgICBpZiAoaW5uZXJzWzBdKSBzZXRUZXh0KGlubmVyc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgICAgaWYgKGlubmVyc1sxXSkgc2V0VGV4dChvbmUoaW5uZXJzWzFdLCAnZW0nKSB8fCBpbm5lcnNbMV0sIGQuaGVyby5saW5lMik7CiAgICAgIGlmIChpbm5lcnNbMl0pIHNldFRleHQoaW5uZXJzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5oZXJvLXN1YicpLCBkLmhlcm8uc3ViKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaGVyby1zY3JvbGwtaGludCcpLCBkLmhlcm8uaGludCk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwgaDInKSwgZC5zZWN0aW9uTGFiZWwpOwoKICAgICAgYWxsKHNjb3BlLCAnLmdhbGxlcnktaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgdyA9IGQud29ya3NbaV07IGlmICghdykgcmV0dXJuOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdy5ocmVmKTsKICAgICAgICB2YXIgaW0gPSBvbmUoYSwgJ2ltZycpOwogICAgICAgIGlmIChpbSkgewogICAgICAgICAgaW0uc2V0QXR0cmlidXRlKCdzcmMnLCB3LmltZyk7CiAgICAgICAgICBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHcuYWx0KTsKICAgICAgICAgIGlmICh3LncpIGltLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3LncpOwogICAgICAgICAgaWYgKHcuaCkgaW0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB3LmgpOwogICAgICAgICAgLyogc3Jjc2V0INC40Lcg0YjQsNCx0LvQvtC90LAgd2ZvbGlvINC_0LXRgNC10LHQuNC7INCx0Ysg0L3QsNGIIHNyYyAqLwogICAgICAgICAgaW0ucmVtb3ZlQXR0cmlidXRlKCdzcmNzZXQnKTsKICAgICAgICB9CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5vdmVybGF5LXRleHQgaDMnKSwgdy50aXRsZSk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5vdmVybGF5LXRleHQgc3BhbicpLCB3LmNhcHRpb24pOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmFkdmFudGFnZXMtaGVhZGVyIGgyJyksIGQuYWR2LmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmFkdi1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGkpIHsKICAgICAgICB2YXIgYSA9IGQuYWR2Lml0ZW1zW2ldOyBpZiAoIWEpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShlbCwgJ2gzJyksIGEudGl0bGUpOwogICAgICAgIHNldFRleHQob25lKGVsLCAncCcpLCBhLnRleHQpOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmNsaWVudHMtaGVhZGVyIC5sYWJlbCcpLCBkLmNsaWVudHMubGFiZWwpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5jbGllbnRzLWhlYWRlciBoMicpLCBkLmNsaWVudHMuaDIpOwogICAgICBhbGwoc2NvcGUsICcuY2xpZW50LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkgewogICAgICAgIHZhciBjID0gZC5jbGllbnRzLml0ZW1zW2ldOyBpZiAoIWMpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShlbCwgJy5jbGllbnQtbmFtZScpLCBjLm5hbWUpOwogICAgICAgIHNldFRleHQob25lKGVsLCAnLmNsaWVudC10eXBlJyksIGMudHlwZSk7CiAgICAgIH0pOwoKICAgICAgdmFyIGN0YUgyID0gb25lKHNjb3BlLCAnLmN0YSBoMicpOwogICAgICBpZiAoY3RhSDIpIGN0YUgyLmlubmVySFRNTCA9IGQuY3RhLmgyOwogICAgICBhbGwoc2NvcGUsICcuYnRuLXJvdyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuYnV0dG9uc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChiLCB2LnRleHQpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgfSk7CiAgICAgIGFsbChzY29wZSwgJy5jdGEtc29jaWFscyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuc29jaWFsc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChhLCB2LmxhYmVsKTsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgIH0pOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIHNjb3BlLCBkKSB7CiAgICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJywgd2FybjogW10gfTsKICAgICAgdmFyIG87CiAgICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlLCB3YXJuOiBbXSB9OyB9CgogICAgICB2YXIgd2FybiA9IFtdOwogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CiAgICAgIGZ1bmN0aW9uIG5vZGUodHkpIHsgcmV0dXJuIGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSB0eTsgfSlbMF07IH0KCiAgICAgIHZhciBzcnYgPSBub2RlKCdTZXJ2aWNlJyk7CiAgICAgIGlmICghc3J2KSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDRgNCw0LfQvNC10YLQutC1INC90LXRgiDRg9C30LvQsCBTZXJ2aWNlJywgd2FybjogW10gfTsKCiAgICAgIC8qINCj0LfQtdC7INGB0YLRgNCw0L3QuNGG0Ys6INC90LDQt9Cy0LDQvdC40LUsINC-0L_QuNGB0LDQvdC40LUg0Lgg0LTQsNGC0LAg0L_QvtGB0LvQtdC00L3QtdC5INC_0YDQsNCy0LrQuC4KICAgICAgICAg0JTQsNGC0YMg0L7QsdC90L7QstC70Y_QtdC8INCy0YHQtdCz0LTQsCDigJQg0LjQvdCw0YfQtSDQvtC90LAg0YHQvtCy0YDRkdGCINC-INGB0LLQtdC20LXRgdGC0Lgg0YHRgtGA0LDQvdC40YbRiy4gKi8KICAgICAgdmFyIHBhZ2UgPSBub2RlKCdXZWJQYWdlJyk7CiAgICAgIGlmIChwYWdlKSB7CiAgICAgICAgcGFnZS5uYW1lID0gZC5zZW8ucGFnZU5hbWU7CiAgICAgICAgcGFnZS5kZXNjcmlwdGlvbiA9IGQuc2VvLnBhZ2VEZXNjcmlwdGlvbjsKICAgICAgICBwYWdlLmRhdGVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgIH0KCiAgICAgIC8qINCg0LDQsdC-0YLRizog0YHQv9C40YHQvtC6INC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0L7QsdC40YDQsNC10YLRgdGPINC40Lcg0YHQsNC80L7QuSDRgdC10YLQutC4LAogICAgICAgICDQv9C-0Y3RgtC-0LzRgyDRgNCw0LfQvtC50YLQuNGB0Ywg0YEg0LLQuNC00LjQvNC-0Lkg0LPQsNC70LXRgNC10LXQuSDQtdC80YMg0L3QtdGH0LXQvC4gKi8KICAgICAgdmFyIGNlbGxzID0gYWxsKHNjb3BlLCAnLmdhbGxlcnktaXRlbScpOwogICAgICB2YXIgbGlzdCA9IG5vZGUoJ0l0ZW1MaXN0Jyk7CiAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgbGlzdC5udW1iZXJPZkl0ZW1zID0gY2VsbHMubGVuZ3RoOwogICAgICAgIGxpc3QuaXRlbUxpc3RFbGVtZW50ID0gY2VsbHMubWFwKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpOwogICAgICAgICAgdmFyIGNhcCA9IG9uZShjLCAnLm92ZXJsYXktdGV4dCBzcGFuJyksIHR0bCA9IG9uZShjLCAnLm92ZXJsYXktdGV4dCBoMycpOwogICAgICAgICAgdmFyIGl0ZW0gPSB7CiAgICAgICAgICAgICdAdHlwZSc6ICdJbWFnZU9iamVjdCcsCiAgICAgICAgICAgIG5hbWU6IHQoY2FwKSArICcg4oCUICcgKyB0KHR0bCkudG9Mb3dlckNhc2UoKSwKICAgICAgICAgICAgY2FwdGlvbjogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgY29udGVudFVybDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgdXJsOiBjLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHcgPSBpbSAmJiBpbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIGhoID0gaW0gJiYgaW0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTsKICAgICAgICAgIGlmICh3KSBpdGVtLndpZHRoID0gTnVtYmVyKHcpOwogICAgICAgICAgaWYgKGhoKSBpdGVtLmhlaWdodCA9IE51bWJlcihoaCk7CiAgICAgICAgICByZXR1cm4geyAnQHR5cGUnOiAnTGlzdEl0ZW0nLCBwb3NpdGlvbjogaSArIDEsIGl0ZW06IGl0ZW0gfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0JPQu9Cw0LLQvdC-0LUg0LjQt9C-0LHRgNCw0LbQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLIOKAlCDQv9C10YDQstCw0Y8g0YDQsNCx0L7RgtCwINCz0LDQu9C10YDQtdC4ICovCiAgICAgIHZhciBwcmltYXJ5ID0gbm9kZSgnSW1hZ2VPYmplY3QnKTsKICAgICAgdmFyIGZpcnN0Q2VsbCA9IGNlbGxzWzBdLCBmaXJzdEltID0gZmlyc3RDZWxsICYmIG9uZShmaXJzdENlbGwsICdpbWcnKTsKICAgICAgaWYgKHByaW1hcnkgJiYgZmlyc3RJbSkgewogICAgICAgIHByaW1hcnkudXJsID0gZmlyc3RJbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8IHByaW1hcnkudXJsOwogICAgICAgIHByaW1hcnkuY2FwdGlvbiA9IGZpcnN0SW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCBwcmltYXJ5LmNhcHRpb247CiAgICAgICAgdmFyIHB3ID0gZmlyc3RJbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIHBoID0gZmlyc3RJbS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpOwogICAgICAgIGlmIChwdykgcHJpbWFyeS53aWR0aCA9IE51bWJlcihwdyk7CiAgICAgICAgaWYgKHBoKSBwcmltYXJ5LmhlaWdodCA9IE51bWJlcihwaCk7CiAgICAgIH0KCiAgICAgIHNydi5uYW1lID0gZC5zZW8ubmFtZTsKICAgICAgc3J2LmRlc2NyaXB0aW9uID0gZC5zZW8uZGVzY3JpcHRpb247CgogICAgICAvKiDQptC10L3QsDog0LHQtdGA0ZHQvCDRhtC40YTRgNGDINC40Lcg0L_QtdGA0LLQvtCz0L4g0L_RgNC10LjQvNGD0YnQtdGB0YLQstCwLCDQs9C00LUg0L7QvdCwINC90LDQv9C40YHQsNC90LAKICAgICAgICAg0LTQu9GPINC70Y7QtNC10LkuINCV0YHQu9C4INC10ZEg0YLQsNC8INC90LXRgiDigJQg0J3QlSDQv9GA0LjQtNGD0LzRi9Cy0LDQtdC8LCDQvtGB0YLQsNCy0LvRj9C10Lwg0L_QvtC70LUKICAgICAgICAg0LrQsNC6INCx0YvQu9C-INC4INCz0L7QstC-0YDQuNC8INC-0LEg0Y3RgtC-0Lwg0LLRgdC70YPRhS4gKi8KICAgICAgdmFyIGh1bWFuID0gKGQuYWR2Lml0ZW1zWzBdIHx8IHt9KS50aXRsZSB8fCAnJzsKICAgICAgdmFyIGZyb21IdW1hbiA9IGRpZ2l0cyhodW1hbik7CiAgICAgIHZhciBwcmljZSA9IGQuc2VvLnByaWNlOwogICAgICBpZiAoZnJvbUh1bWFuKSB7CiAgICAgICAgaWYgKGZyb21IdW1hbiAhPT0gZC5zZW8ucHJpY2UpIHdhcm4ucHVzaCgn0YbQtdC90LAg0LIg0YDQsNC30LzQtdGC0LrQtSDQstC30Y_RgtCwINC40Lcg0L_RgNC10LjQvNGD0YnQtdGB0YLQsjogJyArIGZyb21IdW1hbik7CiAgICAgICAgcHJpY2UgPSBmcm9tSHVtYW47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2Fybi5wdXNoKCfQsiDQv9C10YDQstC-0Lwg0L_RgNC10LjQvNGD0YnQtdGB0YLQstC1INC90LXRgiDRhtC40YTRgNGLINGG0LXQvdGLIOKAlCDQsiDRgNCw0LfQvNC10YLQutC1INC-0YHRgtCw0LvQsNGB0Ywg0L_RgNC10LbQvdGP0Y8g0YbQtdC90LAnKTsKICAgICAgfQoKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3J2Lm9mZmVycykgJiYgc3J2Lm9mZmVyc1swXSkgewogICAgICAgIHNydi5vZmZlcnNbMF0ucHJpY2UgPSBwcmljZTsKICAgICAgICBpZiAoZC5zZW8ucHJpY2VWYWxpZFVudGlsKSBzcnYub2ZmZXJzWzBdLnByaWNlVmFsaWRVbnRpbCA9IGQuc2VvLnByaWNlVmFsaWRVbnRpbDsKICAgICAgICBlbHNlIGRlbGV0ZSBzcnYub2ZmZXJzWzBdLnByaWNlVmFsaWRVbnRpbDsKICAgICAgfQoKICAgICAgdmFyIGNhdCA9ICgoc3J2Lmhhc09mZmVyQ2F0YWxvZyB8fCB7fSkuaXRlbUxpc3RFbGVtZW50KSB8fCBbXTsKICAgICAgY2F0LmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgICAgaWYgKGl0Lml0ZW1PZmZlcmVkICYmIHR5cGVvZiBkLnNlby5jYXRhbG9nW2ldID09PSAnc3RyaW5nJykgewogICAgICAgICAgaXQuaXRlbU9mZmVyZWQubmFtZSA9IGQuc2VvLmNhdGFsb2dbaV07CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINCz0LvQsNCy0L3QvtC1INC40LfQvtCx0YDQsNC20LXQvdC40LUg4oCUINC40Lcg0L_QtdGA0LLQvtC5INGA0LDQsdC-0YLRiyDQs9Cw0LvQtdGA0LXQuCAqLwogICAgICB2YXIgZmlyc3RJbWcgPSBvbmUoc2NvcGUsICcuZ2FsbGVyeS1pdGVtIGltZycpOwogICAgICBpZiAoZmlyc3RJbWcgJiYgZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSkgc3J2LmltYWdlID0gZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdzcmMnKTsKCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwsIHdhcm46IHdhcm4gfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXZ6LWludGVyaW9yJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXZ6LWludGVyaW9yIC5nYWxsZXJ5LWdyaWQnKSA-IC0xOwogICAgICAgIH0pWzBdOwogICAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXZ6LWludGVyaW9yJykgPiAtMSAmJiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3dhaXRGb3JET00nKSA-IC0xOwogICAgICAgIH0pWzBdOwogICAgICAgIC8qINGB0YLRgNC-0LrRgyDRiNGA0LjRhNGC0L7QsiDQsdC10YDRkdC8INC40Lcg0LjRgdGF0L7QtNC90LjQutCwINCh0KvQoNCr0Jwg0YLQtdC60YHRgtC-0Lw6INGH0LXRgNC10Lcgb3V0ZXJIVE1MCiAgICAgICAgICAg0LHRgNCw0YPQt9C10YAg0LfQsNC_0LjRgdCw0Lsg0LHRiyDQsNC80L_QtdGA0YHQsNC90LTRiyDQutCw0LogJmFtcDsg4oCUINGA0LDQsdC-0YLQsNC10YIg0YLQsNC6INC20LUsINC90L4KICAgICAgICAgICDQt9Cw0YHQvtGA0Y_QtdGCINGB0YDQsNCy0L3QtdC90LjQtSDRgSDQuNGB0YXQvtC00L3Ri9C8INC60L7QtNC-0Lwg0LvQuNGI0L3QuNC80Lgg0L7RgtC70LjRh9C40Y_QvNC4ICovCiAgICAgICAgdmFyIGZvbnRSYXcgPSAoc3JjLm1hdGNoKC88bGluayBocmVmPSJodHRwczpcL1wvZm9udHNcLmdvb2dsZWFwaXNcLmNvbVwvY3NzMltePl0qPi8pIHx8IFtudWxsXSlbMF07CiAgICAgICAgdmFyIGZvbnRMaW5rID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJyk7CgogICAgICAgIHZhciBtaXNzaW5nID0gW107CiAgICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAuYXZ6LWludGVyaW9yJyk7CiAgICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAoIXNjcmlwdCkgbWlzc2luZy5wdXNoKCc8c2NyaXB0PiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LUg0L3QsNC50LTQtdC90L46ICcgKyBtaXNzaW5nLmpvaW4oJywgJykpOwoKICAgICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgICAvKiDQodC_0LjRgdC-0Log0YHRgtGA0L7QuiA8aGVhZD4g0LfQsNGF0LDRgNC00LrQvtC20LXQvSDQuCDRgdCy0LXRgNC10L0g0YEg0YDQtdCw0LvRjNC90YvQvCDQsdC70L7QutC-0Lw6CiAgICAgICAgICAg0YMg0LjQvdGC0LXRgNGM0LXRgNC90L7QuSDQvtC9INGB0LLQvtC5IOKAlCDRgSBkbnMtcHJlZmV0Y2gsINC60L7RgtC-0YDQvtCz0L4g0L3QtdGCCiAgICAgICAgICAg0L3QsCDQv9GA0LDQudGB0LUg0Lgg0L_QvtGA0YLRhNC-0LvQuNC-LiDQn9GA0LjQtNGD0LzRi9Cy0LDRgtGMINGB0Y7QtNCwINC70LjRiNC90LjQtSDRgdGC0YDQvtC60Lgg0L3QtdC70YzQt9GPLiAqLwogICAgICAgIHZhciB0ZXh0ID0gWwogICAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI-JywKICAgICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPicsCiAgICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2kud2ZvbGlvLnJ1Ij4nLAogICAgICAgICAgJzxsaW5rIHJlbD0iZG5zLXByZWZldGNoIiBocmVmPSJodHRwczovL2kud2ZvbGlvLnJ1Ij4nLAogICAgICAgICAgQVZaX0ZPTlRfTElOSywKICAgICAgICAgICcnLAogICAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgICBzY3JpcHQudGV4dENvbnRlbnQudHJpbSgpLAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICAgIGxkLnRleHQsCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgICAgXS5qb2luKCdcbicpOwoKICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCB3YXJuOiBsZC53YXJuIH07CiAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvcHkodGV4dCwgbm90ZSkgewogICAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAgICDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDQtNCw0LbQtSDQuNC3INGC0LXRhSDQutGD0YHQutC-0LIsINC60L7RgtC-0YDRi9C1INC_0LDQvdC10LvRjCDQutC-0L_QuNGA0YPQtdGCCiAgICAgICAgINC00L7RgdC70L7QstC90L4g4oCUINC40Lcg0YHRgtC40LvQtdC5LCDRgdC60YDQuNC_0YLQsCDQuCDRgNCw0LfQvNC10YLQutC4INCy0L3QtSDQv9C-0LvQtdC5LiDQotGD0LTQsCDQuNGFCiAgICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICAgIHRleHQgPSBTdHJpbmcodGV4dCkucmVwbGFjZSgvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2csICcnKTsKICAgICAgdmFyIHRhID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6aW4tb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emluLWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGQgPSBjb2xsZWN0KCk7CiAgICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICAgIGFzc2VtYmxlKGQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIC8qINGB0LLQtdGA0Y_QtdC8OiDQstGB0ZEg0LvQuCDQstCy0LXQtNGR0L3QvdC-0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0L_QvtC_0LDQu9C-INCyINC60L7QtCAqLwogICAgICAgIHZhciBkb2MyID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jMi5xdWVyeVNlbGVjdG9yKCcuYXZ6LWludGVyaW9yJykpOwogICAgICAgIGlmIChhZ2FpbikgcmVhZExkKGRvYzIsIGFnYWluKTsKICAgICAgICB2YXIgbm90TGFuZGVkID0gYWdhaW4gPyBsYW5kZWQoZCwgYWdhaW4sIC9eJC8pIDogWyfRgdGC0YDQsNC90LjRhtCwINC90LUg0YDQsNC30L7QsdGA0LDQu9Cw0YHRjCddOwogICAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiDRgdGC0YDQsNC90LjRhtGLINC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLic7CiAgICAgICAgdmFyIHcyID0gcmVzLndhcm4uc2xpY2UoKTsKICAgICAgICBpZiAobm90TGFuZGVkLmxlbmd0aCkgdzIucHVzaCgn0J3QlSDQl9CQ0J_QmNCh0JDQm9Ce0KHQrCDQsiDQutC-0LQ6ICcgKyBub3RMYW5kZWQuc2xpY2UoMCwgNikuam9pbignLCAnKSArCiAgICAgICAgICAobm90TGFuZGVkLmxlbmd0aCA-IDYgPyAnINC4INC10YnRkSAnICsgKG5vdExhbmRlZC5sZW5ndGggLSA2KSA6ICcnKSk7CiAgICAgICAgaWYgKHcyLmxlbmd0aCkgbm90ZSArPSAnINCS0L3QuNC80LDQvdC40LU6ICcgKyB3Mi5qb2luKCc7ICcpICsgJy4nOwogICAgICAgIGNvcHkocmVzLnRleHQsIG5vdGUpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cd0LUg0YHQvtCx0YDQsNC90L46ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CgogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6aW4tdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MucXVlcnlTZWxlY3RvcignLmF2ei1pbnRlcmlvcicpKTsKICAgICAgICByZWFkTGQoZG9jLCBhZ2Fpbik7CiAgICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShzbmFwKSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgICBpZiAoYSA9PT0gYikgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0LHRi9C70L4nLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cf0YDQvtCy0LXRgNC60LAg0L3QtSDQv9GA0L7RiNC70LA6ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CiAgfQoKICBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXZ6LWludGVyaW9yJyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgLmF2ei1pbnRlcmlvcicpOwogICAgY2ZnID0gcmVhZENmZyhzY29wZSk7CiAgICByZWFkTGQoZG9jLCBjZmcpOwogICAgc3RhcnQoKTsKICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgcm9vdC5pbm5lckhUTUwgPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnppbi13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6aW4taGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQuNC90YLQtdGA0YzQtdGA0L3QvtC5INGB0YrRkdC80LrQuDwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnppbi1ib2R5Ij48cCBjbGFzcz0iYXZ6aW4taGludCI-0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys6ICcgKwogICAgICBlc2MoZS5tZXNzYWdlKSArICc8L3A-PC9kaXY-PC9kaXY-JzsKICB9KTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0LjQvdGC0LXRgNGM0LXRgNC90L7QuSDRgdGK0ZHQvNC60Lgg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6InByZXNldHMiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0L_RgNC10YHQtdGC0L7QsiIsc2hvcnQ6ItCf0YDQtdGB0LXRgtGLIixoaW50OiLQv9GA0LjQvNC10YDRiyDQtNC-L9C_0L7RgdC70LUsINC90LDQsdC-0YDRiywg0YbQtdC90YssINCy0L7Qv9GA0L7RgdGLIixwYWdlczpbIi9wcmVzZXRzIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCf0KDQldCh0JXQotCe0JIgIHYyIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwIC9wcmVzZXRzICjRgdGC0YDQsNC90LjRhtCwIHYyLjE5KQoKICAgdjIsIDE2LjA5LjIwMjY6INC60LDRgNGC0L7Rh9C60LAg0LrQvtC70LvQtdC60YbQuNC4INGB0L_RgNCw0LLQsCDQvtGCINC_0YDQuNC80LXRgNCwICjRgdGC0YDQsNC90LjRhtCwCiAgIHYyLjE3Kykg4oCUINGC0YDQuCDRgdGC0YDQvtC60Lgg0Lgg0L_QvtC00L_QuNGB0Ywg0L_QvtC0INC60L3QvtC_0LrQvtC5INC_0YDQsNCy0Y_RgtGB0Y8g0LIg0YTQvtGA0LzQtTsKICAg0YMg0YDQsNC30LzQtdGC0LrQuCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7QsiDRgdC-0YXRgNCw0L3Rj9C10YLRgdGPIGlkPSJhdnAtc2NoZW1hIiDigJQg0LHQtdC3INC90LXQs9C-CiAgINGB0LrRgNC40L_RgiDRgdGC0YDQsNC90LjRhtGLINC90LUg0L7QsdC90L7QstC70Y_QtdGCINGB0YDQvtC6INC00LXQudGB0YLQstC40Y8g0YbQtdC9LgoKICAg0KfQuNGC0LDQtdGCINCY0KHQpdCe0JTQndCr0Jkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YssINC_0L7QtNGB0YLQsNCy0LvRj9C10YIg0LfQvdCw0YfQtdC90LjRjyDQuNC3INGE0L7RgNC80YsKICAg0Lgg0LLRi9C00LDRkdGCINCy0LXRgdGMINCx0LvQvtC6INGG0LXQu9C40LrQvtC8IOKAlCDQstGB0YLQsNCy0LvRj9C10YLRgdGPINC-0LTQvdC40Lwg0LrRg9GB0LrQvtC8LgoKICAg0JPQm9CQ0JLQndCe0JUg0J_QoNCQ0JLQmNCb0J4g0K3QotCe0Jkg0KHQotCg0JDQndCY0KbQqzog0YTQvtGA0LzQsCDQt9Cw0LrQsNC30LAg0L3QtdC_0YDQuNC60L7RgdC90L7QstC10L3QvdCwLgogICDQnNC-0LTQsNC70YzQvdC-0LUg0L7QutC90L4sINC-0YLQv9GA0LDQstC60LAg0LfQsNGP0LLQutC4INCyIFlhbmRleCBDbG91ZCwg0YPQstC10LTQvtC80LvQtdC90LjQtQogICDQsiBUZWxlZ3JhbSwg0L_RgNC-0LLQtdGA0LrQsCDQvdC40LrQsCwg0LfQsNGJ0LjRgtCwINC-0YIg0LTQstC-0LnQvdC-0Lkg0L7RgtC_0YDQsNCy0LrQuCDigJQKICAg0LLRgdGRINGN0YLQviDQv9Cw0L3QtdC70Ywg0L_QtdGA0LXQvdC-0YHQuNGCINCyINGA0LXQt9GD0LvRjNGC0LDRgiDQlNCe0KHQm9Ce0JLQndCeLCDRgdC40LzQstC-0Lsg0LIg0YHQuNC80LLQvtC7LAogICDQuCDQv9GA0Lgg0YHQsdC-0YDQutC1INC_0YDQvtCy0LXRgNGP0LXRgiwg0YfRgtC-INC-0L3QviDQvdCwINC80LXRgdGC0LUuINCV0YHQu9C4INGF0L7RgtGMINC-0LTQuNC9CiAgINC60YPRgdC-0Log0YTQvtGA0LzRiyDQvdC1INC90LDQudC00LXQvSDigJQg0YHQsdC-0YDQutCwINC-0YLQvNC10L3Rj9C10YLRgdGPINGBINC-0YjQuNCx0LrQvtC5LCDQsCDQvdC1CiAgINCy0YvQtNCw0ZHRgiDQv9C-0LrQsNC70LXRh9C10L3QvdGL0Lkg0LrQvtC0LiDQmtC70LjQtdC90YLRiyDQv9C40YjRg9GCINGH0LXRgNC10Lcg0Y3RgtGDINGE0L7RgNC80YMuCgogICDQn9Cw0L3QtdC70Ywg0L_RgNCw0LLQuNGCINGC0L7Qu9GM0LrQvjoKICAgICDCtyDQtNCy0LAg0LzQsNGB0YHQuNCy0LAg0LIg0YHQutGA0LjQv9GC0LUg4oCUIFBSRVNFVFMgKNC_0YDQuNC80LXRgNGLINC00L4v0L_QvtGB0LvQtSkKICAgICAgINC4IENPTExFQ1RJT05TICjQvdCw0LHQvtGA0YssINGG0LXQvdGLLCDQvtCx0LvQvtC20LrQuCk7CiAgICAgwrcg0LLQuNC00LjQvNGL0LUg0YLQtdC60YHRgtGLINCyINGA0LDQt9C80LXRgtC60LU7CiAgICAgwrcg0YDQsNC30LzQtdGC0LrRgyDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4KCiAgINCh0LvQsNC50LTQtdGAINGB0YDQsNCy0L3QtdC90LjRjywg0YLQuNC60LXRgCwg0YDQsNGB0LrRgNGL0YLQuNC1INC40L3RgdGC0YDRg9C60YbQuNC4INC4INCy0L7Qv9GA0L7RgdC-0LIKICAg0YLQvtC20LUg0L3QtSDRgtGA0L7Qs9Cw0Y7RgtGB0Y86INC_0LDQvdC10LvRjCDQvdC1INC_0LXRgNC10L_QuNGB0YvQstCw0LXRgiDRgdC60YDQuNC_0YIsINCwINC80LXQvdGP0LXRggogICDQsiDQvdGR0Lwg0YDQvtCy0L3QviDQtNCy0LAg0LvQuNGC0LXRgNCw0LvQsC4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQo9C30LvRiyAjcGhvdG9ncmFwaGVyLCAjYnVzaW5lc3Mg0LggI3dlYnNpdGUg0L7Qv9C40YHRi9Cy0LDRjtGCINC-0LTQvdC-0LPQviDQuCDRgtC-0LPQviDQttC1CiAgICAg0YfQtdC70L7QstC10LrQsCwg0L7QtNC90L4g0LTQtdC70L4g0Lgg0L7QtNC40L0g0YHQsNC50YIuINCe0LTQuNC9INC4INGC0L7RgiDQttC1IEBpZCwg0L7Qv9C40YHQsNC90L3Ri9C5CiAgICAg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlCDQvNC-0LvRh9Cw0LvQuNCy0LDRjyDQv9C-0LvQvtC80LrQsDog0L_QvtC40YHQutC-0LLQuNC6CiAgICAg0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuCDQstC10YDQuNGC0YwsINC4INC90LDQs9GA0LDQtNGLINC80L7Qs9GD0YIg0L_RgNC-0YHRgtC-CiAgICAg0L3QtSDQt9Cw0YHRh9C40YLQsNGC0YzRgdGPLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDQuNGFINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LAogICAgINC_0L7RjdGC0L7QvNGDINGA0LDRgdGF0L7QtNC40YLRjNGB0Y8g0LjQvCDQsdC-0LvRjNGI0LUg0L3QtdGH0LXQvC4KCiAgICAg0K3RgtCw0LvQvtC9INGB0L3Rj9GCINGBINCz0LvQsNCy0L3QvtC5IDI0INCw0LLQs9GD0YHRgtCwIDIwMjYuINCV0YHQu9C4INCz0LvQsNCy0L3Rg9GOINC00L7Qv9C-0LvQvdGP0YIg4oCUCiAgICAg0L7QsdC90L7QstC40YLRjCDQt9C00LXRgdGMINC4INC_0LXRgNC10YHQvtCx0YDQsNGC0Ywg0L3QsNCx0L7RgDogcHl0aG9uMyBwYWNrLXRvb2xraXQucHkgKi8KICB2YXIgQVZaX0NBTk9OID0gewogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciI6IHsKICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IiwKICAgICAgImFsdGVybmF0ZU5hbWUiOiAiQXZhbnphdG8iLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LguINCf0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINGBIDIwMTkg0LPQvtC00LAuINCR0L7Qu9C10LUgMjUwINGA0LXQsNC70LjQt9C-0LLQsNC90L3Ri9GFINC_0YDQvtC10LrRgtC-0LIuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogWwogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwLzBpT2ZMSWV2UE1wUTVfRkc2TUtEY092UEhZNFNjaVAyLzN2OHdjUGhsTmpvVUhKWV94MUY5QlBkNjJ4T3NNNU8xLzg1WldiNmRZRmdUOWIzM0gzSUcxbmcuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL3k4RG02SlpWQ25sNENVRnprZW94Y2h2UEkxd1ZkRENLLzctVW9MS0MyZ1FrcmdhWHhyclN5THFZdGFNR1J6X3UtL3BCWWdSWDVzUGJZeFhCT1BtRGxYRVEuanBlZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9vVzRxai1tTFN4T0dKTGZEbWJTRERhYmhwTlc4bmVLOC80bFZuTU04Wm5DekN5RWJnWEluSHpDdkNwclBHcXJKNi9IOXViVDBIOUlGQUNiYk9QeGVuRjdRLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9fUkJzYU1oRzBqR01NN182c2xveUVQc2RWLVpPVjNpdy81dHlPSDk2LTJSdU9VLXBfSUtCd1UwMER6NVhJOXJ0VC9BY29McjZ0RGhCQV8xc1Yzb2l0Q3JRLmpwZyIKICAgICAgXSwKICAgICAgImpvYlRpdGxlIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQiLAogICAgICAia25vd3NBYm91dCI6IFsKICAgICAgICAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8iLAogICAgICAgICLQnNGD0LbRgdC60L7QuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCW0LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JvQuNGH0L3Ri9C5INCx0YDQtdC90LQiLAogICAgICAgICLQoNC10L_QvtGA0YLQsNC20L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCf0YDQtdC00LzQtdGC0L3QsNGPINGB0YrRkdC80LrQsCDQtNC70Y8g0LzQsNGA0LrQtdGC0L_Qu9C10LnRgdC-0LIiLAogICAgICAgICLQmNC90YLQtdGA0YzQtdGA0L3QsNGPINC4INCw0YDRhdC40YLQtdC60YLRg9GA0L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCQ0LLRgtC-0LzQvtCx0LjQu9GM0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIKICAgICAgXSwKICAgICAgImF3YXJkIjogWwogICAgICAgICJQb3J0Zm9saW8gQXdhcmQgMjAyNCDigJQgMiDQvNC10YHRgtC-LCDRgdC10YDQuNGPINCg0LXQv9C-0YDRgtCw0LYiLAogICAgICAgICJUaGUgUGxhY2UgRWNvbm9teSBWb2wuMyBieSBIb3luZSAoQXVzdHJhbGlhKSIsCiAgICAgICAgIjUwMHB4IEF3YXJkcyIsCiAgICAgICAgIkFnb3JhIEF3YXJkcyIsCiAgICAgICAgIjM1YXdhcmRzIgogICAgICBdLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly8yMDI0LnBvcnRmb2xpb2F3YXJkLmNvbS8jc2VjdGlvbi0xOTAwNjE1NyIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIndvcmtMb2NhdGlvbiI6IHsKICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICB9CiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIjogewogICAgICAiQHR5cGUiOiAiUHJvZmVzc2lvbmFsU2VydmljZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiLAogICAgICAibmFtZSI6ICJBdmFuemF0byDigJQg0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C1INGE0L7RgtC-0YHQtdGB0YHQuNC4INCyINCa0LDQt9Cw0L3QuCDRgSAyMDE5INCz0L7QtNCwOiDRgdGC0YPQtNC40Y8g0Lgg0YPQu9C40YbQsCwg0LzRg9C20YHQutC-0Lkg0Lgg0LbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIsINGB0YrRkdC80LrQsCDQtNC70Y8g0LvQuNGH0L3QvtCz0L4g0LHRgNC10L3QtNCwLiAyNTArINC_0YDQvtC10LrRgtC-0LIsIDUg0LzQtdC20LTRg9C90LDRgNC-0LTQvdGL0YUg0L3QsNCz0YDQsNC0LiDQktGL0LXQt9C00Ysg0LIg0JzQvtGB0LrQstGDLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6ICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgImZvdW5kZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJmb3VuZGluZ0RhdGUiOiAiMjAxOSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgIkB0eXBlIjogIlBvc3RhbEFkZHJlc3MiLAogICAgICAgICJhZGRyZXNzTG9jYWxpdHkiOiAi0JrQsNC30LDQvdGMIiwKICAgICAgICAiYWRkcmVzc1JlZ2lvbiI6ICLQoNC10YHQv9GD0LHQu9C40LrQsCDQotCw0YLQsNGA0YHRgtCw0L0iLAogICAgICAgICJhZGRyZXNzQ291bnRyeSI6ICJSVSIKICAgICAgfSwKICAgICAgImdlbyI6IHsKICAgICAgICAiQHR5cGUiOiAiR2VvQ29vcmRpbmF0ZXMiLAogICAgICAgICJsYXRpdHVkZSI6IDU1Ljc4ODcsCiAgICAgICAgImxvbmdpdHVkZSI6IDQ5LjEyMjEKICAgICAgfSwKICAgICAgImFyZWFTZXJ2ZWQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JzQvtGB0LrQstCwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInByaWNlUmFuZ2UiOiAi0L7RgiAxNCA5MDAg4oK9IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1ICjQstGB0ZEg0LLQutC70Y7Rh9C10L3QvikiLAogICAgICAgICAgInByaWNlIjogIjU0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZhciBvbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6cC1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgTUFYVyA9IDEyNDA7IC8vINC_0YDQtdC00LXQuyDRiNC40YDQuNC90Ysg0LrQsNC00YDQsCwg0YHQvC4g0LjRgdGC0L7RgNC40Y4g0L_RgNC-0LXQutGC0LAKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQoKICAvKiDQotC10LrRgdGCINC00LvRjyDRgNCw0LfQvNC10YLQutC4OiA8YnI–INGB0LDQvCDQv9C-INGB0LXQsdC1INC_0YDQvtCx0LXQu9CwINC90LUg0LTQsNGR0YIsINC4CiAgICAgwqtQcmVtaWVyZSBQcm8uPGJyPtCf0YDQvtGJ0LXCuyDQv9GA0LXQstGA0LDRidCw0LvQvtGB0Ywg0LIgwqtQcmVtaWVyZSBQcm8u0J_RgNC-0YnQtcK7IOKAlAogICAgINGB0LvQuNC_0YjQuNC10YHRjyDRgdC70L7QstCwINCyINC-0YLQstC10YLQtSDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60LAuINCi0L7RgiDQttC1INC00LXRhNC10LrRgiDRg9C20LUg0YfQuNC90LjQu9C4CiAgICAg0LIg0L_QsNC90LXQu9C4INC-0LHRg9GH0LXQvdC40Y8uINCX0LDQvNC10L3Rj9C10Lwg0L_QtdGA0LXQvdC-0YHRiyDQv9GA0L7QsdC10LvQvtC8INC00L4g0YLQvtCz0L4sINC60LDQuiDQsdGA0LDRgtGMINGC0LXQutGB0YIuICovCiAgZnVuY3Rpb24gdGV4dFdpdGhCcmVha3MoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBjID0gZWwuY2xvbmVOb2RlKHRydWUpOwogICAgYWxsKGMsICdicicpLmZvckVhY2goZnVuY3Rpb24gKGJyKSB7CiAgICAgIGJyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCBicik7CiAgICB9KTsKICAgIHJldHVybiBjLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gb3duVGV4dChlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuICcnOwogICAgdmFyIHMgPSAnJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgcyArPSBlbC5jaGlsZE5vZGVzW2ldLm5vZGVWYWx1ZTsKICAgIH0KICAgIHJldHVybiBzLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gZGlnaXRzKHMpIHsgcmV0dXJuIFN0cmluZyhzIHx8ICcnKS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOyB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1INC80LDRgdGB0LjQstC-0LIg0LjQtyDRgdC60YDQuNC_0YLQsCAtLS0tLS0tLS0tCiAgICAg0KDQsNC30LHQuNGA0LDQtdC8INGC0LXQutGB0YLQvtC8LCDQvdC1INCy0YvQv9C-0LvQvdGP0Y8g0LrQvtC0OiDQstGL0L_QvtC70L3Rj9GC0Ywg0YfRg9C20L7QuSDRgdC60YDQuNC_0YIKICAgICDRgNCw0LTQuCDRh9GC0LXQvdC40Y8g4oCUINC_0LvQvtGF0LDRjyDQuNC00LXRjy4gKi8KCiAgZnVuY3Rpb24gcmVhZFByZXNldHMoc3JjKSB7CiAgICB2YXIgb3V0ID0geyBzdHJlZXQ6IFtdLCBmaWxtOiBbXSB9OwogICAgdmFyIG0gPSBzcmMubWF0Y2goL3ZhciBQUkVTRVRTID0gXHsoW1xzXFNdKj8pXG5cc3s0fVx9Oy8pOwogICAgaWYgKCFtKSByZXR1cm4gb3V0OwogICAgWydzdHJlZXQnLCAnZmlsbSddLmZvckVhY2goZnVuY3Rpb24gKGNvbCkgewogICAgICB2YXIgYiA9IG1bMV0ubWF0Y2gobmV3IFJlZ0V4cChjb2wgKyAnOlxccypcXFsoW1xcc1xcU10qPylcXG5cXHMqXFxdJykpOwogICAgICBpZiAoIWIpIHJldHVybjsKICAgICAgdmFyIHJlID0gL1×7XHMqaWQ6XHMqJyhbXiddKiknXHMqLFxzKm5hbWU6XHMqJyhbXiddKiknXHMqLFxzKmRlc2M6XHMqJyhbXiddKiknXHMqLFxzKmJlZm9yZTpccyonKFteJ10qKSdccyosXHMqYWZ0ZXI6XHMqJyhbXiddKiknXHMqXH0vZzsKICAgICAgdmFyIGhpdDsKICAgICAgd2hpbGUgKChoaXQgPSByZS5leGVjKGJbMV0pKSkgewogICAgICAgIG91dFtjb2xdLnB1c2goeyBpZDogaGl0WzFdLCBuYW1lOiBoaXRbMl0sIGRlc2M6IGhpdFszXSwgYmVmb3JlOiBoaXRbNF0sIGFmdGVyOiBoaXRbNV0gfSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIG91dDsKICB9CgogIGZ1bmN0aW9uIHJlYWRDb2xsZWN0aW9ucyhzcmMpIHsKICAgIHZhciBvdXQgPSBbXTsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgQ09MTEVDVElPTlMgPSBcWyhbXHNcU10qPylcblxzezR9XF07Lyk7CiAgICBpZiAoIW0pIHJldHVybiBvdXQ7CiAgICB2YXIgcmUgPSAvXHtccyprZXk6XHMqJyhbXiddKiknXHMqLFxzKm5hbWU6XHMqJyhbXiddKiknXHMqLFxzKmVtOlxzKicoW14nXSopJ1xzKixccypkZXNjOlxzKicoW14nXSopJ1xzKixccypwcmljZTpccyonKFteJ10qKSdccyosXHMqb2xkUHJpY2U6XHMqKG51bGx8J1teJ10qJylccyosXHMqaW1nOlxzKicoW14nXSopJ1xzKixccyppbWdBbHQ6XHMqJyhbXiddKiknXHMqKCxccypmZWF0dXJlZDpccyp0cnVlXHMqKT9cfS9nOwogICAgdmFyIGhpdDsKICAgIHdoaWxlICgoaGl0ID0gcmUuZXhlYyhtWzFdKSkpIHsKICAgICAgb3V0LnB1c2goewogICAgICAgIGtleTogaGl0WzFdLCBuYW1lOiBoaXRbMl0sIGVtOiBoaXRbM10sIGRlc2M6IGhpdFs0XSwKICAgICAgICBwcmljZTogaGl0WzVdLAogICAgICAgIG9sZFByaWNlOiBoaXRbNl0gPT09ICdudWxsJyA_ICcnIDogaGl0WzZdLnNsaWNlKDEsIC0xKSwKICAgICAgICBpbWc6IGhpdFs3XSwgaW1nQWx0OiBoaXRbOF0sCiAgICAgICAgZmVhdHVyZWQ6ICEhaGl0WzldCiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG91dDsKICB9CgogIC8qIC0tLS0tLS0tLS0g0LrQsNGA0YLQvtGH0LrQsCDRgyDQv9GA0LjQvNC10YDQsCAo0YHRgtGA0LDQvdC40YbQsCB2Mi4xNyspIC0tLS0tLS0tLS0KICAgICDQodGC0YDQvtC60Lgg0LrQsNGA0YLQvtGH0LrQuCDQttC40LLRg9GCINCyINGB0LrRgNC40L_RgtC1INC60LDQuiDRgdGC0YDQvtC60L7QstGL0LUg0LvQuNGC0LXRgNCw0LvRiy4g0KfQuNGC0LDQtdC8CiAgICAg0Lgg0L_QuNGI0LXQvCDQuNGFINGC0LXQutGB0YLQvtC8LCDQvdC1INCy0YvQv9C-0LvQvdGP0Y8g0LrQvtC0LiDQndC10YIg0LrQsNGA0YLQvtGH0LrQuCDigJQg0L_Rg9GB0YLRi9C1CiAgICAg0LfQvdCw0YfQtdC90LjRjywg0Lgg0L_QsNC90LXQu9GMINC10ZEg0L_RgNC-0YHRgtC-INC90LUg0L_QvtC60LDQt9GL0LLQsNC10YIuICovCgogIHZhciBDQVJEX1JPV19SRSA9IC8nPGRpdiBjbGFzcz0idmEtcm93Ij48c3Bhbj4oKD86W148J1xcXXxcXC4pKik8XC9zcGFuPjxzcGFuPigoPzpbXjwnXFxdfFxcLikqKTxcL3NwYW4-PFwvZGl2PicvZzsKICB2YXIgQ0FSRF9OT1RFX1JFID0gLyc8cCBjbGFzcz0idmEtbm90ZSI-KCg_OltePCdcXF18XFwuKSopKD86JyBcKyAnKCg_OltePCdcXF18XFwuKSopKT88YSBocmVmPSIjYXZwLWNvbGxzIj4vOwoKICBmdW5jdGlvbiBsaXRUb1RleHQocykgewogICAgcmV0dXJuIFN0cmluZyhzIHx8ICcnKS5yZXBsYWNlKC9cXCguKS9nLCAnJDEnKQogICAgICAucmVwbGFjZSgvJmx0Oy9nLCAnPCcpLnJlcGxhY2UoLyZndDsvZywgJz4nKS5yZXBsYWNlKC8mYW1wOy9nLCAnJicpOwogIH0KICBmdW5jdGlvbiB0ZXh0VG9MaXQocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8-L2csICcmZ3Q7JykKICAgICAgLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgvJy9nLCAiXFwnIikucmVwbGFjZSgvW1xyXG5dKy9nLCAnICcpOwogIH0KCiAgZnVuY3Rpb24gcmVhZENhcmQoc3JjKSB7CiAgICB2YXIgcm93cyA9IFtdLCBoaXQ7CiAgICBDQVJEX1JPV19SRS5sYXN0SW5kZXggPSAwOwogICAgd2hpbGUgKChoaXQgPSBDQVJEX1JPV19SRS5leGVjKHNyYykpKSByb3dzLnB1c2goeyBsZWZ0OiBsaXRUb1RleHQoaGl0WzFdKSwgcmlnaHQ6IGxpdFRvVGV4dChoaXRbMl0pIH0pOwogICAgdmFyIG4gPSBzcmMubWF0Y2goQ0FSRF9OT1RFX1JFKTsKICAgIHJldHVybiB7IHJvd3M6IHJvd3MsIG5vdGU6IG4gPyBsaXRUb1RleHQoblsxXSArIChuWzJdIHx8ICcnKSkgOiAnJywgaGFzTm90ZTogISFuIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSwgc3JjKSB7CiAgICB2YXIgaW5uZXJzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICB2YXIgbGFiZWxzID0gYWxsKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwnKTsKICAgIHZhciBibG9ja3MgPSBhbGwoc2NvcGUsICcuaG0tYmxvY2snKTsKICAgIHZhciBncm91cHMgPSBhbGwoc2NvcGUsICcuaW5zdGFsbC1ncm91cCcpOwoKICAgIGZ1bmN0aW9uIGxhYihpKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgaDI6IHQob25lKGxhYmVsc1tpXSwgJ2gyJykpLAogICAgICAgIGFzaWRlOiBsYWJlbHNbaV0gJiYgb25lKGxhYmVsc1tpXSwgJy5zbC1hc2lkZScpID8gb3duVGV4dChvbmUobGFiZWxzW2ldLCAnLnNsLWFzaWRlJykpIDogJycKICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogb3duVGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChpbm5lcnNbMF0pLAogICAgICAgIGxpbmUyOiB0KGlubmVyc1sxXSksCiAgICAgICAgbGluZTM6IGlubmVyc1syXSA_IGh0bWwoaW5uZXJzWzJdKSA6ICcnLAogICAgICAgIGxlZGU6IHQob25lKHNjb3BlLCAnLmxlZGUnKSkKICAgICAgfSwKICAgICAgbGFiZWxzOiBbbGFiKDApLCBsYWIoMSksIGxhYigyKSwgbGFiKDMpXSwKICAgICAgYWJvdXQ6IHsKICAgICAgICB0ZXh0OiB7IGxhYmVsOiB0KG9uZShibG9ja3NbMF0sICcuaG0tbGFiZWwnKSksIGJvZHk6IGh0bWwob25lKGJsb2Nrc1swXSwgJ3AnKSkgfSwKICAgICAgICBzdGF0czogewogICAgICAgICAgbGFiZWw6IHQob25lKGJsb2Nrc1sxXSwgJy5obS1sYWJlbCcpKSwKICAgICAgICAgIGl0ZW1zOiBhbGwoYmxvY2tzWzFdLCAnLmhtLXN0YXQnKS5tYXAoZnVuY3Rpb24gKHMpIHsKICAgICAgICAgICAgdmFyIG4gPSBvbmUocywgJy5obS1zdGF0LW51bScpOwogICAgICAgICAgICByZXR1cm4geyB0YXJnZXQ6IG4gPyAobi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0JykgfHwgJycpIDogJycsIGxhYmVsOiB0KG9uZShzLCAnLmhtLXN0YXQtbGJsJykpIH07CiAgICAgICAgICB9KQogICAgICAgIH0sCiAgICAgICAgY29tcGF0OiB7CiAgICAgICAgICBsYWJlbDogdChvbmUoYmxvY2tzWzJdLCAnLmhtLWxhYmVsJykpLAogICAgICAgICAgcm93czogYWxsKGJsb2Nrc1syXSwgJy5obS1saXN0IC5yb3cnKS5tYXAoZnVuY3Rpb24gKHIpIHsKICAgICAgICAgICAgdmFyIHNwID0gYWxsKHIsICdzcGFuJyk7CiAgICAgICAgICAgIHJldHVybiB7IGxlZnQ6IHQoc3BbMF0pLCByaWdodDogdChzcFsxXSkgfTsKICAgICAgICAgIH0pCiAgICAgICAgfQogICAgICB9LAogICAgICBjb2xsSGVhZDogeyBsYWJlbDogdChvbmUoc2NvcGUsICcuc2VjdGlvbi1oZWFkIC5sYWJlbCcpKSwgaDI6IGh0bWwob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAuaDInKSkgfSwKICAgICAgcHJlc2V0czogcmVhZFByZXNldHMoc3JjKSwKICAgICAgY29sbHM6IHJlYWRDb2xsZWN0aW9ucyhzcmMpLAogICAgICBjYXJkOiByZWFkQ2FyZChzcmMpLAogICAgICBpbnN0YWxsOiB7CiAgICAgICAgYnRuOiB0KG9uZShzY29wZSwgJyNhdnAtaW5zdGFsbC1idG4gc3Bhbjpub3QoLmljb24pJykpLAogICAgICAgIGdyb3VwczogZ3JvdXBzLm1hcChmdW5jdGlvbiAoZykgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdGFnOiB0KG9uZShnLCAnLnBsYXRmb3JtLXRhZycpKSwKICAgICAgICAgICAgaDQ6IHQob25lKGcsICdoNCcpKSwKICAgICAgICAgICAgc3RlcHM6IGFsbChnLCAnLmluc3RhbGwtc3RlcCcpLm1hcChmdW5jdGlvbiAocykgewogICAgICAgICAgICAgIHJldHVybiB7IG46IHMuZ2V0QXR0cmlidXRlKCdkYXRhLW4nKSB8fCAnJywgaHRtbDogaHRtbChzKSB9OwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgbm90ZTogaHRtbChvbmUoZywgJy5pbnN0YWxsLW5vdGUnKSkKICAgICAgICAgIH07CiAgICAgICAgfSksCiAgICAgICAgZm9vdGVyOiBodG1sKG9uZShzY29wZSwgJy5pbnN0YWxsLWZvb3RlcicpKQogICAgICB9LAogICAgICBmYXE6IGFsbChzY29wZSwgJy5mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICByZXR1cm4geyBxOiB0KG9uZShpdCwgJy5mYXEtcS10ZXh0JykpLCBhOiBodG1sKG9uZShpdCwgJy5mYXEtYS1pbm5lcicpKSB9OwogICAgICB9KSwKICAgICAgY3RhOiB7CiAgICAgICAgaDI6IGh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSksCiAgICAgICAgYnRuOiB0KG9uZShzY29wZSwgJy5jdGEgLmJ0biAuYnRuLWxhYmVsIHNwYW4nKSkKICAgICAgfSwKICAgICAgZm9vdE5vdGU6IGh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpKSwKICAgICAgc2VvOiB7IHBhZ2VOYW1lOiAnJywgcGFnZURlc2NyaXB0aW9uOiAnJywgcHJvZHVjdHM6IHt9IH0KICAgIH07CiAgfQoKICAvKiDQodCy0L7RjyDRgNCw0LfQvNC10YLQutCwIOKAlCDQv9C-IGlkOyDQv9C70LDRgtGE0L7RgNC80LAg0LzQvtC20LXRgiDQtNC-0LHQsNCy0LjRgtGMINGB0LLQvtGOIGxkK2pzb24g0YDQsNC90YzRiNC1ICovCiAgZnVuY3Rpb24gb3duTGQoZG9jKSB7CiAgICByZXR1cm4gb25lKGRvYywgJ3NjcmlwdCNhdnAtc2NoZW1hW3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpIHx8CiAgICAgIGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF07CiAgfQoKICBmdW5jdGlvbiByZWFkTGQoZG9jLCBjZmcpIHsKICAgIHZhciBzID0gb3duTGQoZG9jKTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOwogICAgICAob1snQGdyYXBoJ10gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnKSB7CiAgICAgICAgICBjZmcuc2VvLnBhZ2VOYW1lID0gbi5uYW1lIHx8ICcnOwogICAgICAgICAgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24gPSBuLmRlc2NyaXB0aW9uIHx8ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1Byb2R1Y3QnKSB7CiAgICAgICAgICB2YXIga2V5ID0gU3RyaW5nKG5bJ0BpZCddKS5zcGxpdCgnI3Byb2R1Y3QtJylbMV07CiAgICAgICAgICBpZiAoa2V5KSBjZmcuc2VvLnByb2R1Y3RzW2tleV0gPSB7IG5hbWU6IG4ubmFtZSB8fCAnJywgZGVzY3JpcHRpb246IG4uZGVzY3JpcHRpb24gfHwgJycgfTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgeyAvKiDRgdCx0L7RgNC60LAg0YHQvtC-0LHRidC40YIgKi8gfQogIH0KCiAgLyogLS0tLS0tLS0tLSDQv9Cw0L3QtdC70YwgLS0tLS0tLS0tLSAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnpwLXJvb3QsI2F2enAtcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2enAtcm9vdCBpbnB1dCwjYXZ6cC1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cC1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2enAtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6cC13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oMTA0MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6cC1oZWFke3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpwLWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnpwLWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2enAtZm9vdHtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtYi5we2JvcmRlci1jb2xvcjojMWQxZDFmfScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtc2VjPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtaW57cGFkZGluZzoxNHB4fScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtZiBpbnB1dCwjYXZ6cC1yb290IC5hdnpwLWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsjYXZ6cC1yb290IC5hdnpwLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnpwLXdpbntib3JkZXItcmFkaXVzOjB9fScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1wYWlye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtaW1ne2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1pbWc-aW1ne3dpZHRoOjY0cHg7aGVpZ2h0OjgwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiNlY2VjZWM7ZmxleDpub25lfScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1pbWcgLmd7ZmxleDoxO21pbi13aWR0aDowfScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLXdhcm57Zm9udC1zaXplOjEycHg7Y29sb3I6IzhhNmQwMCAhaW1wb3J0YW50O2JhY2tncm91bmQ6I2ZmZjhlMTtib3JkZXI6MXB4IHNvbGlkICNmMGUwYTA7JywKICAgICdib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMTJweDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNDBweCwxZnIpKTtnYXA6MTBweH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtZ3JpZCBmaWd1cmV7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWdyaWQgaW1ne3dpZHRoOjEwMCU7aGVpZ2h0OjEyMHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo4cHg7ZGlzcGxheTpibG9ja30nLAogICAgJyNhdnpwLW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnpwLW1zZ3tmb250LXNpemU6MTNweH0nCiAgXS5qb2luKCcnKTsKCiAgZnVuY3Rpb24gZXNjKHMpIHsKICAgIHJldHVybiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKQogICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICB9CiAgZnVuY3Rpb24gZmllbGQobGFiZWwsIHBhdGgsIHZhbCwgdHlwZSkgewogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnpwLWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsgdGFnICsgJzwvZGl2Pic7CiAgfQoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvb3QuaWQgPSAnYXZ6cC1yb290JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGNmZyA9IG51bGw7CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRhNC-0YDQvNCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgQ09MTkFNRVMgPSB7IHN0cmVldDogJ1NUUkVFVCcsIGZpbG06ICdGSUxNJyB9OwoKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6cC13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6cC1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC_0YDQtdGB0LXRgtC-0LI8L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cC1iIiBpZD0iYXZ6cC1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpwLWJvZHkiPicgKwogICAgICAnPHAgY2xhc3M9ImF2enAtaGludCI-0KTQvtGA0LzQsCDQt9Cw0LrQsNC30LAsINGB0LvQsNC50LTQtdGAINGB0YDQsNCy0L3QtdC90LjRjyDQuCDQvtGC0L_RgNCw0LLQutCwINC30LDRj9Cy0L7QuiDQv9Cw0L3QtdC70YzRjiDQvdC1INC_0YDQsNCy0Y_RgtGB0Y8gJyArCiAgICAgICfQuCDQv9C10YDQtdC90L7RgdGP0YLRgdGPINCyINGA0LXQt9GD0LvRjNGC0LDRgiDQtNC-0YHQu9C-0LLQvdC-LiDQn9C10YDQtdC0INCy0YvQtNCw0YfQtdC5INC60L7QtNCwINC_0LDQvdC10LvRjCDQv9GA0L7QstC10YDRj9C10YIsINGH0YLQviDQstGB0LUg0YfQsNGB0YLQuCAnICsKICAgICAgJ9GE0L7RgNC80Ysg0L3QsCDQvNC10YHRgtC1LCDQuCDQvtGC0LzQtdC90Y_QtdGCINGB0LHQvtGA0LrRgywg0LXRgdC70Lgg0YfQtdCz0L4t0YLQviDQvdC1INGF0LLQsNGC0LDQtdGCLjwvcD4nOwoKICAgIC8qINCf0KDQldCh0JXQotCrIOKAlCDQs9C70LDQstC90L7QtSAqLwogICAgWydzdHJlZXQnLCAnZmlsbSddLmZvckVhY2goZnVuY3Rpb24gKGNvbCkgewogICAgICB2YXIgbGlzdCA9IGNmZy5wcmVzZXRzW2NvbF07CiAgICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyInICsgKGNvbCA9PT0gJ3N0cmVldCcgPyAnIG9wZW4nIDogJycpICsgJz48c3VtbWFyeT7Qn9GA0LjQvNC10YDRiyDQtNC-IC8g0L_QvtGB0LvQtSDigJQgJyArCiAgICAgICAgQ09MTkFNRVNbY29sXSArICcgKCcgKyBsaXN0Lmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPicgKwogICAgICAgICc8cCBjbGFzcz0iYXZ6cC1oaW50Ij7QmtCw0LTRgCDCq9C00L7CuyDigJQg0LjRgdGF0L7QtNC90LjQuiwgwqvQv9C-0YHQu9C1wrsg4oCUINGBINC_0YDQuNC80LXQvdGR0L3QvdGL0Lwg0L_RgNC10YHQtdGC0L7QvC4gJyArCiAgICAgICAgJ9Ce0LHQsCDQsNC00YDQtdGB0LAg0LzQvtC20L3QviDQstC_0LjRgdCw0YLRjCDQstGA0YPRh9C90YPRjiDQuNC70Lgg0LLRi9Cx0YDQsNGC0Ywg0YHQviDRgdGC0YDQsNC90LjRhtGLINCw0LvRjNCx0L7QvNCwLiAnICsKICAgICAgICAn0KfQuNGB0LvQviDQv9GA0LXRgdC10YLQvtCyINC_0LDQvdC10LvRjCDRgdCw0LzQsCDQv9GA0L7RgdGC0LDQstC40YIg0LIg0YHRh9GR0YLRh9C40Log0L3QsNC0INC_0YDQvtGB0LzQvtGC0YDQvtC8LjwvcD4nOwogICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKHAsIGkpIHsKICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwLWNhcmQiPjxoND4nICsgQ09MTkFNRVNbY29sXSArICcgwrcgJyArIFN0cmluZyhpICsgMSkgKyAnICgnICsgZXNjKHAuaWQpICsgJyk8L2g0PicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImF2enAtcm93Ij4nICsgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAncHJlc2V0cy4nICsgY29sICsgJy4nICsgaSArICcubmFtZScsIHAubmFtZSkgKwogICAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUnLCAncHJlc2V0cy4nICsgY29sICsgJy4nICsgaSArICcuZGVzYycsIHAuZGVzYykgKyAnPC9kaXY-JyArCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6cC1wYWlyIj4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdnpwLWltZyI-PGltZyBkYXRhLXByZXY9InByZXNldHMuJyArIGNvbCArICcuJyArIGkgKyAnLmJlZm9yZSIgc3JjPSInICsgZXNjKHAuYmVmb3JlKSArICciIGFsdD0iIj4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9Ca0LDQtNGAIMKr0LTQvsK7JywgJ3ByZXNldHMuJyArIGNvbCArICcuJyArIGkgKyAnLmJlZm9yZScsIHAuYmVmb3JlKSArCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cC1iIiBkYXRhLWNob29zZT0icHJlc2V0cy4nICsgY29sICsgJy4nICsgaSArICcuYmVmb3JlIiBzdHlsZT0icGFkZGluZzo0cHggOXB4O2ZvbnQtc2l6ZToxMnB4Ij7QktGL0LHRgNCw0YLRjCDQuNC3INCw0LvRjNCx0L7QvNCwPC9idXR0b24-PC9kaXY-PC9kaXY-JyArCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6cC1pbWciPjxpbWcgZGF0YS1wcmV2PSJwcmVzZXRzLicgKyBjb2wgKyAnLicgKyBpICsgJy5hZnRlciIgc3JjPSInICsgZXNjKHAuYWZ0ZXIpICsgJyIgYWx0PSIiPicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0JrQsNC00YAgwqvQv9C-0YHQu9C1wrsnLCAncHJlc2V0cy4nICsgY29sICsgJy4nICsgaSArICcuYWZ0ZXInLCBwLmFmdGVyKSArCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cC1iIiBkYXRhLWNob29zZT0icHJlc2V0cy4nICsgY29sICsgJy4nICsgaSArICcuYWZ0ZXIiIHN0eWxlPSJwYWRkaW5nOjRweCA5cHg7Zm9udC1zaXplOjEycHgiPtCS0YvQsdGA0LDRgtGMINC40Lcg0LDQu9GM0LHQvtC80LA8L2J1dHRvbj48L2Rpdj48L2Rpdj4nICsKICAgICAgICAgICc8L2Rpdj48L2Rpdj4nOwogICAgICB9KTsKICAgICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CiAgICB9KTsKCiAgICAvKiDQndCQ0JHQntCg0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0J3QsNCx0L7RgNGLINC4INGG0LXQvdGLICgnICsgY2ZnLmNvbGxzLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enAtaGludCI-0KbQtdC90LAg0L_RgNCw0LLQuNGC0YHRjyDQvtC00LjQvSDRgNCw0Lc6INC-0L3QsCDQttC1INGD0YXQvtC00LjRgiDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyLiAnICsKICAgICAgJ9Ch0YLQsNGA0YPRjiDRhtC10L3RgyDQvtGB0YLQsNCy0YzRgtC1INC_0YPRgdGC0L7QuSwg0LXRgdC70Lgg0YHQutC40LTQutC4INC90LXRgi48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQvdCw0LQg0LfQsNCz0L7Qu9C-0LLQutC-0LwnLCAnY29sbEhlYWQubGFiZWwnLCBjZmcuY29sbEhlYWQubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2NvbGxIZWFkLmgyJywgY2ZnLmNvbGxIZWFkLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmNvbGxzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgdmFyIHNlbyA9IGNmZy5zZW8ucHJvZHVjdHNbYy5rZXldIHx8IHsgbmFtZTogJycsIGRlc2NyaXB0aW9uOiAnJyB9OwogICAgICBjZmcuY29sbHNbaV0uc2VvTmFtZSA9IHNlby5uYW1lOwogICAgICBjZmcuY29sbHNbaV0uc2VvRGVzYyA9IHNlby5kZXNjcmlwdGlvbjsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cC1jYXJkIj48aDQ-0J3QsNCx0L7RgCAnICsgKGkgKyAxKSArICcg4oCUICcgKyBlc2MoYy5uYW1lKSArIChjLmZlYXR1cmVkID8gJyAo0LLRi9C00LXQu9C10L3QvdGL0LkpJyA6ICcnKSArICc8L2g0PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ2NvbGxzLicgKyBpICsgJy5uYW1lJywgYy5uYW1lKSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINGA0Y_QtNC-0Lwg0YEg0L3QsNC30LLQsNC90LjQtdC8JywgJ2NvbGxzLicgKyBpICsgJy5lbScsIGMuZW0pICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC90LAg0LrQsNGA0YLQvtGH0LrQtScsICdjb2xscy4nICsgaSArICcuZGVzYycsIGMuZGVzYywgJ2FyZWEnKSArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enAtcm93Ij4nICsgZmllbGQoJ9Cm0LXQvdCwLCDRgtC-0LvRjNC60L4g0YbQuNGE0YDRiycsICdjb2xscy4nICsgaSArICcucHJpY2UnLCBjLnByaWNlKSArCiAgICAgICAgZmllbGQoJ9Ch0YLQsNGA0LDRjyDRhtC10L3QsCAo0L_Rg9GB0YLQviDigJQg0LXRgdC70Lgg0L3QtdGCKScsICdjb2xscy4nICsgaSArICcub2xkUHJpY2UnLCBjLm9sZFByaWNlKSArICc8L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6cC1pbWciPjxpbWcgZGF0YS1wcmV2PSJjb2xscy4nICsgaSArICcuaW1nIiBzcmM9IicgKyBlc2MoYy5pbWcpICsgJyIgYWx0PSIiPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9Ce0LHQu9C-0LbQutCwINC90LDQsdC-0YDQsCcsICdjb2xscy4nICsgaSArICcuaW1nJywgYy5pbWcpICsKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cC1iIiBkYXRhLWNob29zZT0iY29sbHMuJyArIGkgKyAnLmltZyIgc3R5bGU9InBhZGRpbmc6NHB4IDlweDtmb250LXNpemU6MTJweDttYXJnaW4tYm90dG9tOjEycHgiPtCS0YvQsdGA0LDRgtGMINC40Lcg0LDQu9GM0LHQvtC80LA8L2J1dHRvbj4nICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQvtCx0LvQvtC20LrQuCAoYWx0KScsICdjb2xscy4nICsgaSArICcuaW1nQWx0JywgYy5pbWdBbHQpICsgJzwvZGl2PjwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INCyINGA0LDQt9C80LXRgtC60LUnLCAnY29sbHMuJyArIGkgKyAnLnNlb05hbWUnLCBzZW8ubmFtZSkgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INCyINGA0LDQt9C80LXRgtC60LUnLCAnY29sbHMuJyArIGkgKyAnLnNlb0Rlc2MnLCBzZW8uZGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICAgICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQmtCQ0KDQotCe0KfQmtCQINCjINCf0KDQmNCc0JXQoNCQICovCiAgICBpZiAoY2ZnLmNhcmQucm93cy5sZW5ndGggfHwgY2ZnLmNhcmQuaGFzTm90ZSkgewogICAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCa0LDRgNGC0L7Rh9C60LAg0YHQv9GA0LDQstCwINC-0YIg0L_RgNC40LzQtdGA0LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-JyArCiAgICAgICAgJzxwIGNsYXNzPSJhdnpwLWhpbnQiPtCS0LjQtNC90LAg0YLQvtC70YzQutC-INC90LAg0LrQvtC80L_RjNGO0YLQtdGA0LUgKNGN0LrRgNCw0L0g0L7RgiAxMTgwIHB4KSDQuCDQvNC10L3Rj9C10YLRgdGPINC_0YDQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40LggJyArCiAgICAgICAgJ1NUUkVFVCAvIEZJTE0uINCd0LDQt9Cy0LDQvdC40LUsINC-0L_QuNGB0LDQvdC40LUg0Lgg0YbQtdC90YMg0LrQsNGA0YLQvtGH0LrQsCDQsdC10YDRkdGCINC40Lcg0YDQsNC30LTQtdC70LAgwqvQndCw0LHQvtGA0Ysg0Lgg0YbQtdC90YvCuywgJyArCiAgICAgICAgJ9GH0LjRgdC70L4g0L_RgNC10YHQtdGC0L7QsiDRgdGH0LjRgtCw0LXRgiDRgdCw0LzQsCDigJQg0LfQtNC10YHRjCDRgtC-0LvRjNC60L4g0YHRgtGA0L7QutC4INC4INC_0L7QtNC_0LjRgdGMINC_0L7QtCDQutC90L7Qv9C60L7QuSwg0L7QsdGJ0LjQtSDQtNC70Y8g0L7QsdC10LjRhSDQutC-0LvQu9C10LrRhtC40LkuPC9wPic7CiAgICAgIGNmZy5jYXJkLnJvd3MuZm9yRWFjaChmdW5jdGlvbiAociwgaSkgewogICAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enAtcm93Ij4nICsgZmllbGQoJ9Ch0YLRgNC-0LrQsCAnICsgKGkgKyAxKSArICcg4oCUINC_0L7QtNC_0LjRgdGMJywgJ2NhcmQucm93cy4nICsgaSArICcubGVmdCcsIHIubGVmdCkgKwogICAgICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAnICsgKGkgKyAxKSArICcg4oCUINC30L3QsNGH0LXQvdC40LUnLCAnY2FyZC5yb3dzLicgKyBpICsgJy5yaWdodCcsIHIucmlnaHQpICsgJzwvZGl2Pic7CiAgICAgIH0pOwogICAgICBpZiAoY2ZnLmNhcmQuaGFzTm90ZSkgewogICAgICAgIGggKz0gZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDQutC90L7Qv9C60L7QuSAo0L_QvtGB0LvQtSDQvdC10ZEg4oCUINGB0YHRi9C70LrQsCDCqycgKyBlc2MoKChjZmcuY29sbHMuZmlsdGVyKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmZlYXR1cmVkOyB9KVswXSkgfHwge30pLm5hbWUgfHwgJ0NPTVBMRVRFJykgKyAnINC30LAg4oCmIOKCvcK7LCDQvtC90LAg0YHQvtCx0LjRgNCw0LXRgtGB0Y8g0YHQsNC80LApJywgJ2NhcmQubm90ZScsIGNmZy5jYXJkLm5vdGUpOwogICAgICB9CiAgICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwogICAgfQoKICAgIC8qINCo0JDQn9Ca0JAg0Jgg0KLQldCa0KHQotCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LAg0Lgg0YLQtdC60YHRgtGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uZXllYnJvdycsIGNmZy5oZXJvLmV5ZWJyb3cpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enAtcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDigJQg0YHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMicsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDMgKNC80L7QttC90L4gJmx0O2VtJmd0OyknLCAnaGVyby5saW5lMycsIGNmZy5oZXJvLmxpbmUzKSArCiAgICAgIGZpZWxkKCfQktGB0YLRg9C_0LjRgtC10LvRjNC90YvQuSDRgtC10LrRgdGCJywgJ2hlcm8ubGVkZScsIGNmZy5oZXJvLmxlZGUsICdhcmVhJyk7CiAgICBbJ9CeINC60L7Qu9C70LXQutGG0LjQuCcsICfQn9GA0L7RgdC80L7RgtGAJywgJ9Ca0L7Qu9C70LXQutGG0LjQuCcsICfQp9Cw0YHRgtGL0LUg0LLQvtC_0YDQvtGB0YsnXS5mb3JFYWNoKGZ1bmN0aW9uIChubSwgaSkgewogICAgICB2YXIgbCA9IGNmZy5sYWJlbHNbaV07IGlmICghbCkgcmV0dXJuOwogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCAnICsgKGkgKyAxKSwgJ2xhYmVscy4nICsgaSArICcuaDInLCBsLmgyKSArCiAgICAgICAgKGwuYXNpZGUgPyBmaWVsZCgn0J_QvtC80LXRgtC60LAg0YHQv9GA0LDQstCwJywgJ2xhYmVscy4nICsgaSArICcuYXNpZGUnLCBsLmFzaWRlKSA6ICc8ZGl2PjwvZGl2PicpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDQv9GA0LjQt9GL0LLQsCAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2N0YS5oMicsIGNmZy5jdGEuaDIpICsKICAgICAgZmllbGQoJ9Ca0L3QvtC_0LrQsCDQv9GA0LjQt9GL0LLQsCcsICdjdGEuYnRuJywgY2ZnLmN0YS5idG4pICsKICAgICAgZmllbGQoJ9Ch0L3QvtGB0LrQsCDQstC90LjQt9GDICjQvNC-0LbQvdC-IEhUTUwpJywgJ2Zvb3ROb3RlJywgY2ZnLmZvb3ROb3RlLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCeINCa0J7Qm9Cb0JXQmtCm0JjQmCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enAtc2VjIj48c3VtbWFyeT7QkdC70L7QuiDCq9CeINC60L7Qu9C70LXQutGG0LjQuMK7PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPicgKwogICAgICAoY2ZnLmNhcmQucm93cy5sZW5ndGggPyAnPHAgY2xhc3M9ImF2enAtaGludCI-0J3QsCDQutC-0LzQv9GM0Y7RgtC10YDQtSAo0L7RgiAxMTgwIHB4KSDRjdGC0L7RgiDQsdC70L7QuiDRgdC60YDRi9GCIOKAlCDQtdCz0L4g0LfQsNC80LXQvdGP0LXRgiDQutCw0YDRgtC-0YfQutCwICcgKwogICAgICAn0YHQv9GA0LDQstCwINC-0YIg0L_RgNC40LzQtdGA0LAuINCS0LjQtNC10L0g0L3QsCDRgtC10LvQtdGE0L7QvdC1INC4INC_0LvQsNC90YjQtdGC0LUuPC9wPicgOiAnJykgKwogICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwgMScsICdhYm91dC50ZXh0LmxhYmVsJywgY2ZnLmFib3V0LnRleHQubGFiZWwpICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YIgKNC80L7QttC90L4gSFRNTCknLCAnYWJvdXQudGV4dC5ib2R5JywgY2ZnLmFib3V0LnRleHQuYm9keSwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCAyJywgJ2Fib3V0LnN0YXRzLmxhYmVsJywgY2ZnLmFib3V0LnN0YXRzLmxhYmVsKTsKICAgIGNmZy5hYm91dC5zdGF0cy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enAtcm93Ij4nICsgZmllbGQoJ9Cn0LjRgdC70L4gJyArIChpICsgMSksICdhYm91dC5zdGF0cy5pdGVtcy4nICsgaSArICcudGFyZ2V0Jywgcy50YXJnZXQpICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0L_QvtC0INGH0LjRgdC70L7QvCcsICdhYm91dC5zdGF0cy5pdGVtcy4nICsgaSArICcubGFiZWwnLCBzLmxhYmVsKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQn9C-0LTQv9C40YHRjCAzJywgJ2Fib3V0LmNvbXBhdC5sYWJlbCcsIGNmZy5hYm91dC5jb21wYXQubGFiZWwpOwogICAgY2ZnLmFib3V0LmNvbXBhdC5yb3dzLmZvckVhY2goZnVuY3Rpb24gKHIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPicgKyBmaWVsZCgn0KHRgtGA0L7QutCwICcgKyAoaSArIDEpICsgJyDigJQg0YHQu9C10LLQsCcsICdhYm91dC5jb21wYXQucm93cy4nICsgaSArICcubGVmdCcsIHIubGVmdCkgKwogICAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgJyArIChpICsgMSkgKyAnIOKAlCDRgdC_0YDQsNCy0LAnLCAnYWJvdXQuY29tcGF0LnJvd3MuJyArIGkgKyAnLnJpZ2h0Jywgci5yaWdodCkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JLQntCf0KDQntCh0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLICgnICsgY2ZnLmZhcS5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpwLWhpbnQiPtCe0YLQstC10YIg0L7QtNC40L06INC-0L0g0LbQtSDRg9GF0L7QtNC40YIg0LIg0YDQsNC30LzQtdGC0LrRgyDRgdC70L7QstC-INCyINGB0LvQvtCy0L4uICcgKwogICAgICAn0KLQsNC6INGC0YDQtdCx0YPQtdGCIEdvb2dsZSDigJQg0L_QtdGA0LXRgdC60LDQtyDRgdCy0L7QuNC80Lgg0YHQu9C-0LLQsNC80Lgg0L3QtSDQt9Cw0YHRh9C40YLRi9Cy0LDQtdGC0YHRjy48L3A-JzsKICAgIGNmZy5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwLWNhcmQiPjxoND7QktC-0L_RgNC-0YEgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ2ZhcS4nICsgaSArICcucScsIGYucSkgKwogICAgICAgIGZpZWxkKCfQntGC0LLQtdGCICjQvNC-0LbQvdC-IEhUTUwpJywgJ2ZhcS4nICsgaSArICcuYScsIGYuYSwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQo9Ch0KLQkNCd0J7QktCa0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0JjQvdGB0YLRgNGD0LrRhtC40Y8g0L_QviDRg9GB0YLQsNC90L7QstC60LU8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQvdCwINC60L3QvtC_0LrQtScsICdpbnN0YWxsLmJ0bicsIGNmZy5pbnN0YWxsLmJ0bik7CiAgICBjZmcuaW5zdGFsbC5ncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwLWNhcmQiPjxoND7QoNCw0LfQtNC10LsgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPicgKyBmaWVsZCgn0JzQtdGC0LrQsCcsICdpbnN0YWxsLmdyb3Vwcy4nICsgaSArICcudGFnJywgZy50YWcpICsKICAgICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ2luc3RhbGwuZ3JvdXBzLicgKyBpICsgJy5oNCcsIGcuaDQpICsgJzwvZGl2Pic7CiAgICAgIGcuc3RlcHMuZm9yRWFjaChmdW5jdGlvbiAocywgaykgewogICAgICAgIGggKz0gZmllbGQoJ9Co0LDQsyDCqycgKyBlc2Mocy5uKSArICfCuyAo0LzQvtC20L3QviBIVE1MKScsICdpbnN0YWxsLmdyb3Vwcy4nICsgaSArICcuc3RlcHMuJyArIGsgKyAnLmh0bWwnLCBzLmh0bWwsICdhcmVhJyk7CiAgICAgIH0pOwogICAgICBpZiAoZy5ub3RlKSBoICs9IGZpZWxkKCfQn9GA0LjQvNC10YfQsNC90LjQtSAo0LzQvtC20L3QviBIVE1MKScsICdpbnN0YWxsLmdyb3Vwcy4nICsgaSArICcubm90ZScsIGcubm90ZSwgJ2FyZWEnKTsKICAgICAgaCArPSAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0KHRgtGA0L7QutCwINCy0L3QuNC30YMg0LjQvdGB0YLRgNGD0LrRhtC40LggKNC80L7QttC90L4gSFRNTCknLCAnaW5zdGFsbC5mb290ZXInLCBjZmcuaW5zdGFsbC5mb290ZXIsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KDQkNCX0JzQldCi0JrQkCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enAtc2VjIj48c3VtbWFyeT7QoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enAtaGludCI-0K3RgtC-INC90LXQstC40LTQuNC80LDRjyDRh9Cw0YHRgtGMINGB0YLRgNCw0L3QuNGG0YsuINCd0LUg0L_QuNGI0LjRgtC1INC30LTQtdGB0Ywg0YLQvtCz0L4sINGH0LXQs9C-INC90LXRgiDQvdCwINGB0LDQvNC-0Lkg0YHRgtGA0LDQvdC40YbQtS48L3A-JyArCiAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLnBhZ2VOYW1lJywgY2ZnLnNlby5wYWdlTmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlRGVzY3JpcHRpb24nLCBjZmcuc2VvLnBhZ2VEZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8L2Rpdj48ZGl2IGlkPSJhdnpwLWZvb3QiPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cC1iIHAiIGlkPSJhdnpwLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cC1iIiBpZD0iYXZ6cC10ZXN0Ij7Qn9GA0L7QstC10YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Lo8L2J1dHRvbj4nICsKICAgICAgJzxzcGFuIGlkPSJhdnpwLW1zZyI-PC9zcGFuPjwvZGl2PicgKwogICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpwLW91dCIgc3BlbGxjaGVjaz0iZmFsc2UiICcgKwogICAgICAncGxhY2Vob2xkZXI9ItCX0LTQtdGB0Ywg0L_QvtGP0LLQuNGC0YHRjyDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyI-PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4nOwoKICAgIHJvb3QuaW5uZXJIVE1MID0gaDsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKCFwKSByZXR1cm47CiAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgICBpZiAocHJldikgeyBwcmV2LmNsYXNzTGlzdC5yZW1vdmUoJ2JhZCcpOyBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOyB9CiAgICB9KTsKCiAgICAvKiAtLS0tLS0tLS0tINCy0YvQsdC-0YAg0LrQsNC00YDQsCDQuNC3INCw0LvRjNCx0L7QvNCwIC0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2hvdENhY2hlID0ge307CiAgICBmdW5jdGlvbiBhYnModSkgewogICAgICBpZiAoIXUpIHJldHVybiAnJzsKICAgICAgaWYgKHUuaW5kZXhPZignLy8nKSA9PT0gMCkgcmV0dXJuICdodHRwczonICsgdTsKICAgICAgaWYgKHUuaW5kZXhPZignLycpID09PSAwKSByZXR1cm4gbG9jYXRpb24ub3JpZ2luICsgdTsKICAgICAgcmV0dXJuIHU7CiAgICB9CiAgICBmdW5jdGlvbiBmcm9tU3Jjc2V0KHNldCwgc3JjKSB7CiAgICAgIGlmICghc2V0KSB7IHZhciB1ID0gYWJzKHNyYyk7IHJldHVybiB7IGZ1bGw6IHUsIHNtYWxsOiB1IH07IH0KICAgICAgdmFyIGxpc3QgPSBzZXQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHgpIHsKICAgICAgICB2YXIgcCA9IHgudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgICByZXR1cm4geyB1OiBhYnMocFswXSksIHc6IHBhcnNlSW50KHBbMV0sIDEwKSB8fCAwIH07CiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC51OyB9KTsKICAgICAgaWYgKCFsaXN0Lmxlbmd0aCkgeyB2YXIgdiA9IGFicyhzcmMpOyByZXR1cm4geyBmdWxsOiB2LCBzbWFsbDogdiB9OyB9CiAgICAgIHZhciBiaWcgPSBsaXN0LnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi53IC0gYS53OyB9KTsKICAgICAgdmFyIHNtYWxsID0gbGlzdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEudyAtIGIudzsgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZnVsbDogKGJpZy5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudyA8PSBNQVhXOyB9KVswXSB8fCBiaWdbYmlnLmxlbmd0aCAtIDFdKS51LAogICAgICAgIHNtYWxsOiAoc21hbGwuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLncgPj0gMjgwOyB9KVswXSB8fCBzbWFsbFswXSkudQogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gc2hvdHNGcm9tKHVybCkgewogICAgICBpZiAoc2hvdENhY2hlW3VybF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoc2hvdENhY2hlW3VybF0pOwogICAgICByZXR1cm4gZmV0Y2godXJsICsgKHVybC5pbmRleE9mKCc_JykgPiAtMSA_ICcmJyA6ICc_JykgKyAndD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgICAgdmFyIHNlZW4gPSB7fSwgb3V0ID0gW107CiAgICAgICAgICBhbGwoZG9jLCAnaW1nJykuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHsKICAgICAgICAgICAgdmFyIHNldCA9IGltLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyY3NldCcpIHx8ICcnOwogICAgICAgICAgICB2YXIgcyA9IGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIHx8ICcnOwogICAgICAgICAgICBpZiAoc2V0LmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwICYmIHMuaW5kZXhPZignaS53Zm9saW8ucnUnKSA8IDApIHJldHVybjsKICAgICAgICAgICAgdmFyIHBhaXIgPSBmcm9tU3Jjc2V0KHNldCwgcyk7CiAgICAgICAgICAgIGlmICghcGFpci5mdWxsIHx8IHNlZW5bcGFpci5mdWxsXSkgcmV0dXJuOwogICAgICAgICAgICBzZWVuW3BhaXIuZnVsbF0gPSAxOwogICAgICAgICAgICBvdXQucHVzaChwYWlyKTsKICAgICAgICAgIH0pOwogICAgICAgICAgc2hvdENhY2hlW3VybF0gPSBvdXQ7CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0pOwogICAgfQoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2hvb3NlJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICB2YXIgcGFuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6OCU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7JyArCiAgICAgICAgJ3BhZGRpbmc6MTZweDtvdmVyZmxvdzphdXRvO2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuNCknOwogICAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7QkNC00YDQtdGBINGB0YLRgNCw0L3QuNGG0Ysg0YEg0LrQsNC00YDQsNC80Lg6PC9wPicgKwogICAgICAgICc8aW5wdXQgaWQ9ImF2enAtc3JjIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweCIgJyArCiAgICAgICAgJ3ZhbHVlPSInICsgZXNjKHNob3RDYWNoZS5fX2xhc3QgfHwgJ2h0dHBzOi8vYXZhbnphdG8ucnUvcHJlc2V0cy1wcmltZXJ5JykgKyAnIj4nICsKICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbjoxMHB4IDAiPjxidXR0b24gY2xhc3M9ImF2enAtYiBwIiBpZD0iYXZ6cC1sb2FkIj7Qn9C-0LrQsNC30LDRgtGMINC60LDQtNGA0Ys8L2J1dHRvbj4gJyArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2enAtYiIgaWQ9ImF2enAtY2FuY2VsIj7QntGC0LzQtdC90LA8L2J1dHRvbj48L3A-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enAtZ3JpZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI-PC9kaXY-JzsKICAgICAgcm9vdC5hcHBlbmRDaGlsZChwYW5lKTsKICAgICAgcGFuZS5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1jYW5jZWwnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBwYW5lLnJlbW92ZSgpOyB9OwogICAgICBwYW5lLnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLWxvYWQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciB1cmwgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLXNyYycpLnZhbHVlLnRyaW0oKTsKICAgICAgICBpZiAoIXVybCkgcmV0dXJuOwogICAgICAgIHNob3RDYWNoZS5fX2xhc3QgPSB1cmw7CiAgICAgICAgdmFyIGhlYWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKTsKICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CX0LDQs9GA0YPQttCw0Y4gJyArIHVybCArICfigKYnOwogICAgICAgIHNob3RzRnJvbSh1cmwpLnRoZW4oZnVuY3Rpb24gKHNob3RzKSB7CiAgICAgICAgICB2YXIgZ3JpZCA9IHBhbmUucXVlcnlTZWxlY3RvcignLmF2enAtZ3JpZCcpOwogICAgICAgICAgaWYgKCFzaG90cy5sZW5ndGgpIHsgaGVhZC50ZXh0Q29udGVudCA9ICfQndCwINGB0YLRgNCw0L3QuNGG0LUgJyArIHVybCArICcg0LrQsNC00YDQvtCyINC90LUg0L3QsNGI0LvQvtGB0YwuJzsgcmV0dXJuOyB9CiAgICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CS0YvQsdC10YDQuNGC0LUg0LrQsNC00YAgKCcgKyBzaG90cy5sZW5ndGggKyAnKSc7CiAgICAgICAgICBncmlkLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgIGdyaWQuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgICB2YXIgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZ3VyZScpOwogICAgICAgICAgICB2YXIgaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICAgICAgaW0uc3JjID0gaXQuc21hbGw7IGltLmxvYWRpbmcgPSAnbGF6eSc7CiAgICAgICAgICAgIGYuYXBwZW5kQ2hpbGQoaW0pOwogICAgICAgICAgICBmLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGlucCA9IHJvb3QucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS1wPSInICsgcCArICciXScpOwogICAgICAgICAgICAgIGlmIChpbnApIGlucC52YWx1ZSA9IGl0LmZ1bGw7CiAgICAgICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gaXQuZnVsbDsKICAgICAgICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICAgICAgICB9OwogICAgICAgICAgICBncmlkLmFwcGVuZENoaWxkKGYpOwogICAgICAgICAgfSk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikgewogICAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQodGC0YDQsNC90LjRhtCwINC90LUg0L7RgtC60YDRi9C70LDRgdGMOiAnICsgZXJyLm1lc3NhZ2U7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICB9KTsKCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAINC30L3QsNGH0LXQvdC40LkgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQogICAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgICAgdmFyIGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICBzZXRQYXRoKGQsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyksIGVsLnZhbHVlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB0ZXh0cy5wdXNoKGVsLmNoaWxkTm9kZXNbaV0pOwogICAgICB9CiAgICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgICAgdmFyIG1haW4gPSBudWxsOwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgICB9CiAgICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICAgIHZhciBwcmUgPSAocmF3Lm1hdGNoKC9eXHMqLykgfHwgWycnXSlbMF07CiAgICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgICBtYWluLm5vZGVWYWx1ZSA9IHByZSArIHYgKyBwb3N0OwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICAgIHRleHRzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dHNbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC5pbm5lckhUTUwgPSB2OyB9CgogICAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgICAgdmFyIGlubmVycyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5leWVicm93JyksIGQuaGVyby5leWVicm93KTsKICAgICAgaWYgKGlubmVyc1swXSkgc2V0VGV4dChpbm5lcnNbMF0sIGQuaGVyby5saW5lMSk7CiAgICAgIGlmIChpbm5lcnNbMV0pIHNldFRleHQoaW5uZXJzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgICBpZiAoaW5uZXJzWzJdKSBzZXRIdG1sKGlubmVyc1syXSwgZC5oZXJvLmxpbmUzKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcubGVkZScpLCBkLmhlcm8ubGVkZSk7CgogICAgICB2YXIgbGFiZWxzID0gYWxsKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwnKTsKICAgICAgZC5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbiAobCwgaSkgewogICAgICAgIGlmICghbGFiZWxzW2ldKSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUobGFiZWxzW2ldLCAnaDInKSwgbC5oMik7CiAgICAgICAgaWYgKGwuYXNpZGUpIHNldFRleHQob25lKGxhYmVsc1tpXSwgJy5zbC1hc2lkZScpLCBsLmFzaWRlKTsKICAgICAgfSk7CgogICAgICB2YXIgYmxvY2tzID0gYWxsKHNjb3BlLCAnLmhtLWJsb2NrJyk7CiAgICAgIGlmIChibG9ja3NbMF0pIHsgc2V0VGV4dChvbmUoYmxvY2tzWzBdLCAnLmhtLWxhYmVsJyksIGQuYWJvdXQudGV4dC5sYWJlbCk7IHNldEh0bWwob25lKGJsb2Nrc1swXSwgJ3AnKSwgZC5hYm91dC50ZXh0LmJvZHkpOyB9CiAgICAgIGlmIChibG9ja3NbMV0pIHsKICAgICAgICBzZXRUZXh0KG9uZShibG9ja3NbMV0sICcuaG0tbGFiZWwnKSwgZC5hYm91dC5zdGF0cy5sYWJlbCk7CiAgICAgICAgYWxsKGJsb2Nrc1sxXSwgJy5obS1zdGF0JykuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgICAgICAgdmFyIHYgPSBkLmFib3V0LnN0YXRzLml0ZW1zW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICAgIHZhciBuID0gb25lKHMsICcuaG0tc3RhdC1udW0nKTsKICAgICAgICAgIGlmIChuICYmIHYudGFyZ2V0KSBuLnNldEF0dHJpYnV0ZSgnZGF0YS10YXJnZXQnLCB2LnRhcmdldCk7CiAgICAgICAgICBzZXRUZXh0KG9uZShzLCAnLmhtLXN0YXQtbGJsJyksIHYubGFiZWwpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChibG9ja3NbMl0pIHsKICAgICAgICBzZXRUZXh0KG9uZShibG9ja3NbMl0sICcuaG0tbGFiZWwnKSwgZC5hYm91dC5jb21wYXQubGFiZWwpOwogICAgICAgIGFsbChibG9ja3NbMl0sICcuaG0tbGlzdCAucm93JykuZm9yRWFjaChmdW5jdGlvbiAociwgaSkgewogICAgICAgICAgdmFyIHYgPSBkLmFib3V0LmNvbXBhdC5yb3dzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICAgIHZhciBzcCA9IGFsbChyLCAnc3BhbicpOwogICAgICAgICAgc2V0VGV4dChzcFswXSwgdi5sZWZ0KTsgc2V0VGV4dChzcFsxXSwgdi5yaWdodCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSwgZC5jb2xsSGVhZC5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAuaDInKSwgZC5jb2xsSGVhZC5oMik7CgogICAgICAvKiDRgdGH0ZHRgtGH0LjQutC4INC90LDQtCDQv9GA0L7RgdC80L7RgtGA0L7QvCDigJQg0L_QviDRh9C40YHQu9GDINC_0YDQtdGB0LXRgtC-0LIsINGB0YfQuNGC0LDRgtGMINCy0YDRg9GH0L3Rg9GOINC90LXQt9Cw0YfQtdC8ICovCiAgICAgIHZhciB0YWJzID0gYWxsKHNjb3BlLCAnI2F2cC10YWJzIC5jb2xsLXRhYicpOwogICAgICBbJ3N0cmVldCcsICdmaWxtJ10uZm9yRWFjaChmdW5jdGlvbiAoY29sLCBpKSB7CiAgICAgICAgaWYgKCF0YWJzW2ldKSByZXR1cm47CiAgICAgICAgdmFyIGMgPSBvbmUodGFic1tpXSwgJy5jb2xsLXRhYi1jb3VudCcpOwogICAgICAgIGlmIChjKSBjLnRleHRDb250ZW50ID0gU3RyaW5nKChkLnByZXNldHNbY29sXSB8fCBbXSkubGVuZ3RoKTsKICAgICAgfSk7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJyNhdnAtaW5zdGFsbC1idG4gc3Bhbjpub3QoLmljb24pJyksIGQuaW5zdGFsbC5idG4pOwogICAgICBhbGwoc2NvcGUsICcuaW5zdGFsbC1ncm91cCcpLmZvckVhY2goZnVuY3Rpb24gKGcsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuaW5zdGFsbC5ncm91cHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGcsICcucGxhdGZvcm0tdGFnJyksIHYudGFnKTsKICAgICAgICBzZXRUZXh0KG9uZShnLCAnaDQnKSwgdi5oNCk7CiAgICAgICAgYWxsKGcsICcuaW5zdGFsbC1zdGVwJykuZm9yRWFjaChmdW5jdGlvbiAocywgaykgewogICAgICAgICAgaWYgKHYuc3RlcHNba10pIHNldEh0bWwocywgdi5zdGVwc1trXS5odG1sKTsKICAgICAgICB9KTsKICAgICAgICBpZiAodi5ub3RlKSBzZXRIdG1sKG9uZShnLCAnLmluc3RhbGwtbm90ZScpLCB2Lm5vdGUpOwogICAgICB9KTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuaW5zdGFsbC1mb290ZXInKSwgZC5pbnN0YWxsLmZvb3Rlcik7CgogICAgICBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgIHZhciB2ID0gZC5mYXFbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLmZhcS1xLXRleHQnKSwgdi5xKTsKICAgICAgICBzZXRIdG1sKG9uZShpdCwgJy5mYXEtYS1pbm5lcicpLCB2LmEpOwogICAgICB9KTsKCiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSwgZC5jdGEuaDIpOwogICAgICBhbGwoc2NvcGUsICcuY3RhIC5idG4gLmJ0bi1sYWJlbCBzcGFuJykuZm9yRWFjaChmdW5jdGlvbiAocykgeyBzZXRUZXh0KHMsIGQuY3RhLmJ0bik7IH0pOwogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5mb290LW5vdGUnKSwgZC5mb290Tm90ZSk7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQv9GA0LDQstC60LAg0LzQsNGB0YHQuNCy0L7QsiDQsiDRgdC60YDQuNC_0YLQtSAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24ganNTdHIocykgeyByZXR1cm4gIiciICsgU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICAgIGZ1bmN0aW9uIHBhZChzLCBuKSB7IHdoaWxlIChzLmxlbmd0aCA8IG4pIHMgKz0gJyAnOyByZXR1cm4gczsgfQoKICAgIGZ1bmN0aW9uIHBhdGNoU2NyaXB0KHNyYywgZCkgewogICAgICB2YXIgbWlzc2VkID0gW107CgogICAgICBpZiAoIS92YXIgUFJFU0VUUyA9IFx7Ly50ZXN0KHNyYykpIG1pc3NlZC5wdXNoKCfRgdC_0LjRgdC-0Log0L_RgNC10YHQtdGC0L7QsicpOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgY29scyA9IFsnc3RyZWV0JywgJ2ZpbG0nXS5tYXAoZnVuY3Rpb24gKGNvbCkgewogICAgICAgICAgdmFyIGxpc3QgPSBkLnByZXNldHNbY29sXSB8fCBbXTsKICAgICAgICAgIHZhciB3TmFtZSA9IDAsIHdEZXNjID0gMDsKICAgICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAocCkgewogICAgICAgICAgICB2YXIgYSA9IChqc1N0cihwLm5hbWUpICsgJywnKS5sZW5ndGgsIGIgPSAoanNTdHIocC5kZXNjKSArICcsJykubGVuZ3RoOwogICAgICAgICAgICBpZiAoYSA-IHdOYW1lKSB3TmFtZSA9IGE7CiAgICAgICAgICAgIGlmIChiID4gd0Rlc2MpIHdEZXNjID0gYjsKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIHJvd3MgPSBsaXN0Lm1hcChmdW5jdGlvbiAocCkgewogICAgICAgICAgICByZXR1cm4gJyAgICAgICAgICAgIHsgaWQ6JyArIHBhZChqc1N0cihwLmlkKSArICcsJywgNikgKwogICAgICAgICAgICAgICcgbmFtZTonICsgcGFkKGpzU3RyKHAubmFtZSkgKyAnLCcsIHdOYW1lICsgMSkgKwogICAgICAgICAgICAgICcgZGVzYzonICsgcGFkKGpzU3RyKHAuZGVzYykgKyAnLCcsIHdEZXNjICsgMSkgKwogICAgICAgICAgICAgICcgYmVmb3JlOicgKyBqc1N0cihwLmJlZm9yZSkgKyAnLCAgICBhZnRlcjonICsganNTdHIocC5hZnRlcikgKyAnIH0nOwogICAgICAgICAgfSkuam9pbignLFxuJyk7CiAgICAgICAgICByZXR1cm4gJyAgICAgICAgJyArIGNvbCArICc6IFtcbicgKyByb3dzICsgJ1xuICAgICAgICBdJzsKICAgICAgICB9KS5qb2luKCcsXG4nKTsKICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgvdmFyIFBSRVNFVFMgPSBce1tcc1xTXSo_XG5cc3s0fVx9Oy8sCiAgICAgICAgICAndmFyIFBSRVNFVFMgPSB7XG4nICsgY29scyArICdcbiAgICB9OycpOwogICAgICB9CgogICAgICBpZiAoIS92YXIgQ09MTEVDVElPTlMgPSBcWy8udGVzdChzcmMpKSBtaXNzZWQucHVzaCgn0YHQv9C40YHQvtC6INC90LDQsdC-0YDQvtCyJyk7CiAgICAgIGVsc2UgewogICAgICAgIHZhciByb3dzMiA9IChkLmNvbGxzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHJldHVybiAnICAgICAgICB7IGtleTonICsganNTdHIoYy5rZXkpICsgJywgbmFtZTonICsganNTdHIoYy5uYW1lKSArCiAgICAgICAgICAgICcsIGVtOicgKyBqc1N0cihjLmVtKSArICcsIGRlc2M6JyArIGpzU3RyKGMuZGVzYykgKwogICAgICAgICAgICAnLCBwcmljZTonICsganNTdHIoZGlnaXRzKGMucHJpY2UpKSArCiAgICAgICAgICAgICcsIG9sZFByaWNlOicgKyAoYy5vbGRQcmljZSA_IGpzU3RyKGMub2xkUHJpY2UpIDogJ251bGwnKSArCiAgICAgICAgICAgICcsIGltZzonICsganNTdHIoYy5pbWcpICsgJywgaW1nQWx0OicgKyBqc1N0cihjLmltZ0FsdCkgKwogICAgICAgICAgICAoYy5mZWF0dXJlZCA_ICcsIGZlYXR1cmVkOnRydWUnIDogJycpICsgJyB9JzsKICAgICAgICB9KS5qb2luKCcsXG4nKTsKICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgvdmFyIENPTExFQ1RJT05TID0gXFtbXHNcU10qP1xuXHN7NH1cXTsvLAogICAgICAgICAgJ3ZhciBDT0xMRUNUSU9OUyA9IFtcbicgKyByb3dzMiArICdcbiAgICBdOycpOwogICAgICB9CgogICAgICAvKiDQmtCw0YDRgtC-0YfQutCwINGDINC_0YDQuNC80LXRgNCwOiDQvNC10L3Rj9C10Lwg0YLQvtC70YzQutC-INGC0L4sINGH0YLQviDQv9C-0L_RgNCw0LLQuNC70Lgg0LIg0YTQvtGA0LzQtSwKICAgICAgICAg0LjQvdCw0YfQtSDQuNGB0YXQvtC00L3QuNC6INC-0YHRgtCw0ZHRgtGB0Y8g0YHQuNC80LLQvtC7INCyINGB0LjQvNCy0L7QuyAqLwogICAgICB2YXIgY2FyZCA9IGQuY2FyZCB8fCB7IHJvd3M6IFtdIH07CiAgICAgIHZhciBvcmlnID0gcmVhZENhcmQoc3JjKTsKICAgICAgaWYgKGNhcmQucm93cy5sZW5ndGggJiYgb3JpZy5yb3dzLmxlbmd0aCAhPT0gY2FyZC5yb3dzLmxlbmd0aCkgbWlzc2VkLnB1c2goJ9GB0YLRgNC-0LrQuCDQutCw0YDRgtC-0YfQutC4INGDINC_0YDQuNC80LXRgNCwJyk7CiAgICAgIGVsc2UgaWYgKGNhcmQucm93cy5sZW5ndGgpIHsKICAgICAgICB2YXIgayA9IDA7CiAgICAgICAgQ0FSRF9ST1dfUkUubGFzdEluZGV4ID0gMDsKICAgICAgICBzcmMgPSBzcmMucmVwbGFjZShDQVJEX1JPV19SRSwgZnVuY3Rpb24gKGFsbDAsIGEsIGIpIHsKICAgICAgICAgIHZhciB2ID0gY2FyZC5yb3dzW2tdLCBvID0gb3JpZy5yb3dzW2tdOyBrKys7CiAgICAgICAgICBpZiAoIXYgfHwgKHYubGVmdCA9PT0gby5sZWZ0ICYmIHYucmlnaHQgPT09IG8ucmlnaHQpKSByZXR1cm4gYWxsMDsKICAgICAgICAgIHJldHVybiAiJzxkaXYgY2xhc3M9XCJ2YS1yb3dcIj48c3Bhbj4iICsgdGV4dFRvTGl0KHYubGVmdCkgKyAnPC9zcGFuPjxzcGFuPicgKyB0ZXh0VG9MaXQodi5yaWdodCkgKyAiPC9zcGFuPjwvZGl2PiciOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChjYXJkLmhhc05vdGUpIHsKICAgICAgICBpZiAoIW9yaWcuaGFzTm90ZSkgbWlzc2VkLnB1c2goJ9C_0L7QtNC_0LjRgdGMINC_0L7QtCDQutC90L7Qv9C60L7QuSDQutCw0YDRgtC-0YfQutC4Jyk7CiAgICAgICAgZWxzZSBpZiAoY2FyZC5ub3RlICE9PSBvcmlnLm5vdGUpIHsKICAgICAgICAgIHNyYyA9IHNyYy5yZXBsYWNlKENBUkRfTk9URV9SRSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gIic8cCBjbGFzcz1cInZhLW5vdGVcIj4iICsgdGV4dFRvTGl0KGNhcmQubm90ZSkgKyAnPGEgaHJlZj0iI2F2cC1jb2xscyI-JzsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHsgdGV4dDogc3JjLCBtaXNzZWQ6IG1pc3NlZCB9OwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIHNjb3BlLCBkKSB7CiAgICAgIHZhciBzID0gb3duTGQoZG9jKTsKICAgICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJyB9OwogICAgICB2YXIgbzsKICAgICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CgogICAgICB2YXIgcGFnZSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnV2ViUGFnZSc7IH0pWzBdOwogICAgICBpZiAocGFnZSkgewogICAgICAgIHBhZ2UubmFtZSA9IGQuc2VvLnBhZ2VOYW1lOwogICAgICAgIHBhZ2UuZGVzY3JpcHRpb24gPSBkLnNlby5wYWdlRGVzY3JpcHRpb247CiAgICAgICAgcGFnZS5kYXRlTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApOwogICAgICB9CgogICAgICAvKiDQotC-0LLQsNGA0Ys6INGG0LXQvdCwINC4INC-0LHQu9C-0LbQutCwIOKAlCDQuNC3INC60LDRgNGC0L7Rh9C10Log0L3QsCDRgdGC0YDQsNC90LjRhtC1LCDRgNCw0LfQvtC50YLQuNGB0Ywg0LjQvCDQvdC10YfQtdC8ICovCiAgICAgIHZhciBieUtleSA9IHt9OwogICAgICAoZC5jb2xscyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYykgeyBieUtleVtjLmtleV0gPSBjOyB9KTsKICAgICAgZy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gIT09ICdQcm9kdWN0JykgcmV0dXJuOwogICAgICAgIHZhciBrZXkgPSBTdHJpbmcoblsnQGlkJ10pLnNwbGl0KCcjcHJvZHVjdC0nKVsxXTsKICAgICAgICB2YXIgYyA9IGJ5S2V5W2tleV07CiAgICAgICAgaWYgKCFjKSByZXR1cm47CiAgICAgICAgaWYgKGMuc2VvTmFtZSkgbi5uYW1lID0gYy5zZW9OYW1lOwogICAgICAgIGlmIChjLnNlb0Rlc2MpIG4uZGVzY3JpcHRpb24gPSBjLnNlb0Rlc2M7CiAgICAgICAgbi5pbWFnZSA9IGMuaW1nOwogICAgICAgIGlmIChuLm9mZmVycykgbi5vZmZlcnMucHJpY2UgPSBkaWdpdHMoYy5wcmljZSk7CiAgICAgIH0pOwoKICAgICAgLyog0JLQvtC_0YDQvtGB0Ysg4oCUINC40Lcg0LLQuNC00LjQvNC-0LPQviDRgtC10LrRgdGC0LAg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-ICovCiAgICAgIHZhciBmYXEgPSBnLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0ZBUVBhZ2UnOyB9KVswXTsKICAgICAgaWYgKGZhcSkgewogICAgICAgIGZhcS5tYWluRW50aXR5ID0gYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAgICAgbmFtZTogdGV4dFdpdGhCcmVha3Mob25lKGl0LCAnLmZhcS1xLXRleHQnKSksCiAgICAgICAgICAgIGFjY2VwdGVkQW5zd2VyOiB7ICdAdHlwZSc6ICdBbnN3ZXInLCB0ZXh0OiB0ZXh0V2l0aEJyZWFrcyhvbmUoaXQsICcuZmFxLWEtaW5uZXInKSkgfQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCwgaWQ6IHMuaWQgfHwgJycgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgLyog0JrRg9GB0LrQuCDRhNC-0YDQvNGLINC30LDQutCw0LfQsDog0LXRgdC70Lgg0YXQvtGC0Ywg0L7QtNC90L7Qs9C-INC90LXRgiDigJQg0YHQsdC-0YDQutCwINC-0YLQvNC10L3Rj9C10YLRgdGPLgogICAgICAg0K3RgtC-INC90LUg0YPQutGA0LDRiNC10L3QuNC1LCDQsCDRg9GB0LvQvtCy0LjQtTog0YfQtdGA0LXQtyDRhNC-0YDQvNGDINC_0LjRiNGD0YIg0LrQu9C40LXQvdGC0YsuICovCiAgICB2YXIgRk9STV9QQVJUUyA9IFsKICAgICAgJ2Z1bmN0aW9ucy55YW5kZXhjbG91ZC5uZXQnLAogICAgICAnR0FTX05PVElGWV9VUkwnLAogICAgICAnZnVuY3Rpb24gc2F2ZVRvRmlyZWJhc2UnLAogICAgICAnZnVuY3Rpb24gaGFuZGxlU3VibWl0JywKICAgICAgJ1RHX1VTRVJOQU1FX1JFJywKICAgICAgJ19zdWJtaXR0aW5nJywKICAgICAgJ2F2LW1vZGFsLW92ZXJsYXknLAogICAgICAnYXZwLXRvLXN0ZXAyJwogICAgXTsKCiAgICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICAgIHJldHVybiBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1wcmVzZXRzJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJy5hdi1wcmVzZXRzIC52aWV3ZXItd3JhcCcpID4gLTE7IH0pWzBdOwogICAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3ZhciBQUkVTRVRTJykgPiAtMTsgfSlbMF07CiAgICAgICAgdmFyIGZvbnRMaW5rID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJyk7CgogICAgICAgIHZhciBtaXNzaW5nID0gW107CiAgICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAuYXYtcHJlc2V0cycpOwogICAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgnPHN0eWxlPiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgnPHNjcmlwdD4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghZm9udExpbmspIG1pc3NpbmcucHVzaCgnPGxpbms-INGI0YDQuNGE0YLQvtCyJyk7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQpOwogICAgICAgIHZhciBsZCA9IGJ1aWxkTGQoZG9jLCBzY29wZSwgZCk7CiAgICAgICAgaWYgKCFsZC50ZXh0KSB0aHJvdyBuZXcgRXJyb3IobGQuZXJyKTsKCiAgICAgICAgLyog0KHRgtGA0L7QutC4IDxoZWFkPiDQsdC10YDRkdC8INC40Lcg0KHQkNCc0J7Qk9CeINCR0JvQntCa0JAsINCwINC90LUg0L_QvtC40YHQutC-0Lwg0L_QviDQstGB0LXQuSDRgdGC0YDQsNC90LjRhtC1OgogICAgICAgICAgIHdmb2xpbyDQtNC10YDQttC40YIg0LIgPGhlYWQ-INGB0LLQvtC4IHByZWNvbm5lY3Qg0LggcHJlbG9hZCwg0Lgg0YHQvtCx0LjRgNCw0YLRjCDQuNGFCiAgICAgICAgICAg0YDQtdCz0YPQu9GP0YDQutC-0Lkg0L_QviDQtNC-0LrRg9C80LXQvdGC0YMg0LfQvdCw0YfQuNGCINC90LDRgtCw0YnQuNGC0Ywg0LIg0LHQu9C-0Log0YfRg9C20L7Qs9C-LiDQk9GA0LDQvdC40YbRiyDQsdC70L7QutCwIOKAlAogICAgICAgICAgINC-0YIg0LLRgdGC0YPQv9C40YLQtdC70YzQvdC-0LPQviDQutC-0LzQvNC10L3RgtCw0YDQuNGPINC00L4gPHN0eWxlPi4gKi8KICAgICAgICB2YXIgY29tbWVudCA9IChzcmMubWF0Y2goLzwhLS0gPSsgLS0-XG48IS0tICBBVkFOWkFUT1tcc1xTXSo_LS0-XG48IS0tID0rIC0tPi8pIHx8IFtudWxsXSlbMF07CiAgICAgICAgdmFyIGhlYWRSYXcgPSAnJzsKICAgICAgICBpZiAoY29tbWVudCkgewogICAgICAgICAgdmFyIGZyb20gPSBzcmMuaW5kZXhPZihjb21tZW50KSArIGNvbW1lbnQubGVuZ3RoOwogICAgICAgICAgdmFyIHRvID0gc3JjLmluZGV4T2YoJzxzdHlsZT4nLCBmcm9tKTsKICAgICAgICAgIGlmICh0byA-IGZyb20pIGhlYWRSYXcgPSBzcmMuc2xpY2UoZnJvbSwgdG8pLnRyaW0oKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFoZWFkUmF3KSB0aHJvdyBuZXcgRXJyb3IoJ9C90LUg0L3QsNC50LTQtdC90Ysg0YHRgtGA0L7QutC4IDxoZWFkPiDQsdC70L7QutCwIOKAlCDRgdCx0L7RgNC60LAg0L7RgtC80LXQvdC10L3QsCcpOwoKICAgICAgICAvKiDQlNCy0LAgcHJlbG9hZCDigJQg0Y3RgtC-INC60LDQtNGA0YsgwqvQtNC-wrsg0LggwqvQv9C-0YHQu9C1wrsg0L_QtdGA0LLQvtCz0L4g0L_RgNC10YHQtdGC0LA6INCx0YDQsNGD0LfQtdGACiAgICAgICAgICAg0L3QsNGH0LjQvdCw0LXRgiDQs9GA0YPQt9C40YLRjCDQuNGFINC30LDRgNCw0L3QtdC1LiDQn9GA0Lgg0LfQsNC80LXQvdC1INC60LDQtNGA0L7QsiDQvtC90Lgg0L7QsdGP0LfQsNC90YsKICAgICAgICAgICDQv9C-0LXRhdCw0YLRjCDRgdC70LXQtNC-0LwsINC40L3QsNGH0LUg0LHRg9C00YPRgiDRgtGP0L3Rg9GC0Ywg0LrQsNGA0YLQuNC90LrRgywg0LrQvtGC0L7RgNC-0Lkg0YPQttC1INC90LXRgi4gKi8KICAgICAgICB2YXIgZmlyc3RQcmVzZXQgPSAoZC5wcmVzZXRzLnN0cmVldCB8fCBbXSlbMF0gfHwgKGQucHJlc2V0cy5maWxtIHx8IFtdKVswXTsKICAgICAgICBpZiAoZmlyc3RQcmVzZXQpIHsKICAgICAgICAgIHZhciBwcmVsb2FkcyA9IGhlYWRSYXcubWF0Y2goLzxsaW5rIHJlbD0icHJlbG9hZCIgYXM9ImltYWdlIiBocmVmPSJbXiJdKiI-L2cpIHx8IFtdOwogICAgICAgICAgaWYgKHByZWxvYWRzLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICBoZWFkUmF3ID0gaGVhZFJhdwogICAgICAgICAgICAgIC5yZXBsYWNlKHByZWxvYWRzWzBdLCAnPGxpbmsgcmVsPSJwcmVsb2FkIiBhcz0iaW1hZ2UiIGhyZWY9IicgKyBmaXJzdFByZXNldC5iZWZvcmUgKyAnIj4nKQogICAgICAgICAgICAgIC5yZXBsYWNlKHByZWxvYWRzWzFdLCAnPGxpbmsgcmVsPSJwcmVsb2FkIiBhcz0iaW1hZ2UiIGhyZWY9IicgKyBmaXJzdFByZXNldC5hZnRlciArICciPicpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgaGVhZExpbmVzID0gW2hlYWRSYXddOwogICAgICAgIHZhciBmb250UmF3ID0gbnVsbDsKCiAgICAgICAgdmFyIHRleHQgPSAoY29tbWVudCA_IFtjb21tZW50LCAnJ10gOiBbXSkuY29uY2F0KAogICAgICAgICAgaGVhZExpbmVzLAogICAgICAgICAgWycnLAogICAgICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgICAgICAvKiB0cmltOiDQv9C10YDQtdCy0L7QtCDRgdGC0YDQvtC60Lgg0L_QvtGB0LvQtSA8c2NyaXB0PiDQtNC-0LHQsNCy0LvRj9C10YIg0YHQutC70LXQudC60LAsCiAgICAgICAgICAgICAgINC40L3QsNGH0LUg0LIg0L3QsNGH0LDQu9C1INGB0LrRgNC40L_RgtCwINC_0L7Rj9Cy0LvRj9C70LDRgdGMINCx0Ysg0LvQuNGI0L3Rj9GPINC_0YPRgdGC0LDRjyDRgdGC0YDQvtC60LAgKi8KICAgICAgICAgICAgc2MudGV4dC50cmltKCksCiAgICAgICAgICAgICc8JyArICcvc2NyaXB0PicsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIicgKyAobGQuaWQgPyAnIGlkPSInICsgbGQuaWQgKyAnIicgOiAnJykgKyAnPicsCiAgICAgICAgICAgIGxkLnRleHQsCiAgICAgICAgICAgICc8JyArICcvc2NyaXB0PiddCiAgICAgICAgKS5qb2luKCdcbicpOwoKICAgICAgICAvKiDQv9C-0YHQu9C10LTQvdGP0Y8g0L_RgNC-0LLQtdGA0LrQsDog0YTQvtGA0LzQsCDQt9Cw0LrQsNC30LAg0LTQvtC70LbQvdCwINC-0YHRgtCw0YLRjNGB0Y8g0LTQvtGB0LvQvtCy0L3QviAqLwogICAgICAgIHZhciBsb3N0ID0gRk9STV9QQVJUUy5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHRleHQuaW5kZXhPZihwKSA8IDA7IH0pOwogICAgICAgIGlmIChsb3N0Lmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfQodCR0J7QoNCa0JAg0J7QotCc0JXQndCV0J3QkCDigJQg0LIg0YDQtdC30YPQu9GM0YLQsNGC0LUg0L3QtSDRhdCy0LDRgtCw0LXRgiDRh9Cw0YHRgtC10Lkg0YTQvtGA0LzRiyDQt9Cw0LrQsNC30LA6ICcgKwogICAgICAgICAgICBsb3N0LmpvaW4oJywgJykgKyAnLiDQmtC-0LQg0L3QtSDQstGL0LTQsNC9LCDRh9GC0L7QsdGLINC90LUg0YHQu9C-0LzQsNGC0Ywg0L_RgNC40ZHQvCDQt9Cw0Y_QstC-0LouJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBtaXNzZWQ6IHNjLm1pc3NlZCB9OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogICAgfQoKICAgIC8qINCn0LjRgdC70LAg0LIg0YHQstC-0LHQvtC00L3Ri9GFINGC0LXQutGB0YLQsNGFINC_0LDQvdC10LvRjCDQvdC1INC_0L7QtNC80LXQvdGP0LXRgiDigJQg0L7QvdCwINC40YUg0YHQstC10YDRj9C10YIuCiAgICAgICDQn9C-0LTRgdGC0LDQstC70Y_RgtGMINGH0LjRgdC70L4g0LLQvdGD0YLRgNGMINGE0YDQsNC30Ysg0LLRgdC70LXQv9GD0Y4g0L7Qv9Cw0YHQvdC10LUsINGH0LXQvCDQv9GA0LXQtNGD0L_RgNC10LTQuNGC0YwuICovCiAgICBmdW5jdGlvbiBudW1iZXJXYXJuaW5ncyhkKSB7CiAgICAgIHZhciB3ID0gW107CiAgICAgIHZhciBuID0gewogICAgICAgIHN0cmVldDogKGQucHJlc2V0cy5zdHJlZXQgfHwgW10pLmxlbmd0aCwKICAgICAgICBmaWxtOiAoZC5wcmVzZXRzLmZpbG0gfHwgW10pLmxlbmd0aAogICAgICB9OwogICAgICBuLmFsbCA9IG4uc3RyZWV0ICsgbi5maWxtOwogICAgICAoZC5jb2xscyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICAgIHZhciBpbkVtID0gZGlnaXRzKGMuZW0pOwogICAgICAgIHZhciB3YW50ID0gYy5rZXkgPT09ICdzdHJlZXQnID8gbi5zdHJlZXQgOiAoYy5rZXkgPT09ICdmaWxtJyA_IG4uZmlsbSA6IG4uYWxsKTsKICAgICAgICBpZiAoaW5FbSAmJiBTdHJpbmcod2FudCkgIT09IGluRW0uc2xpY2UoMCwgU3RyaW5nKHdhbnQpLmxlbmd0aCkgJiYgaW5FbS5pbmRleE9mKFN0cmluZyh3YW50KSkgPCAwKSB7CiAgICAgICAgICB3LnB1c2goJ9CyINC_0L7QtNC_0LjRgdC4INC90LDQsdC-0YDQsCAnICsgYy5uYW1lICsgJyDRgdGC0L7QuNGCIMKrJyArIGMuZW0gKyAnwrssINCwINC_0YDQtdGB0LXRgtC-0LIgJyArIHdhbnQpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHZhciBoZXJvTnVtID0gZGlnaXRzKGQuaGVyby5saW5lMyk7CiAgICAgIGlmIChoZXJvTnVtICYmIGhlcm9OdW0gIT09IFN0cmluZyhuLmFsbCkpIHsKICAgICAgICB3LnB1c2goJ9CyINC30LDQs9C-0LvQvtCy0LrQtSDRgdGC0L7QuNGCICcgKyBoZXJvTnVtICsgJywg0LAg0L_RgNC10YHQtdGC0L7QsiAnICsgbi5hbGwpOwogICAgICB9CiAgICAgIHZhciBzdGF0ID0gKGQuYWJvdXQuc3RhdHMuaXRlbXNbMF0gfHwge30pLnRhcmdldDsKICAgICAgaWYgKHN0YXQgJiYgc3RhdCAhPT0gU3RyaW5nKG4uYWxsKSkgewogICAgICAgIHcucHVzaCgn0LIg0YHRh9GR0YLRh9C40LrQtSDCqycgKyAoZC5hYm91dC5zdGF0cy5pdGVtc1swXS5sYWJlbCB8fCAnJykgKyAnwrsg0YHRgtC-0LjRgiAnICsgc3RhdCArICcsINCwINC_0YDQtdGB0LXRgtC-0LIgJyArIG4uYWxsKTsKICAgICAgfQogICAgICByZXR1cm4gdzsKICAgIH0KCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGQgPSBjb2xsZWN0KCk7CiAgICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICAgIGFzc2VtYmxlKGQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgICAn0KTQvtGA0LzQsCDQt9Cw0LrQsNC30LAg0L3QsCDQvNC10YHRgtC1IOKAlCDQv9GA0L7QstC10YDQtdC90L4uINCSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0Log0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgICBpZiAocmVzLm1pc3NlZC5sZW5ndGgpIG5vdGUgKz0gJyDQndC1INC90LDQudC00LXQvdC-INCyINGB0LrRgNC40L_RgtC1OiAnICsgcmVzLm1pc3NlZC5qb2luKCcsICcpICsgJy4nOwogICAgICAgIHZhciB3ID0gbnVtYmVyV2FybmluZ3MoZCk7CiAgICAgICAgaWYgKHcubGVuZ3RoKSBub3RlICs9ICcg0J_RgNC-0LLQtdGA0YzRgtC1INGH0LjRgdC70LA6ICcgKyB3LmpvaW4oJzsgJykgKyAnLic7CiAgICAgICAgY29weShyZXMudGV4dCwgbm90ZSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzYyA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZigndmFyIFBSRVNFVFMnKSA-IC0xOyB9KVswXTsKICAgICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5xdWVyeVNlbGVjdG9yKCcuYXYtcHJlc2V0cycpLCBzYyA_IHNjLnRleHRDb250ZW50IDogJycpOwogICAgICAgIHJlYWRMZChkb2MsIGFnYWluKTsKICAgICAgICAoYWdhaW4uY29sbHMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHZhciBzID0gYWdhaW4uc2VvLnByb2R1Y3RzW2Mua2V5XSB8fCB7fTsKICAgICAgICAgIGMuc2VvTmFtZSA9IHMubmFtZSB8fCAnJzsgYy5zZW9EZXNjID0gcy5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9KTsKICAgICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXApLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG1zZygn0KDQkNCh0KXQntCW0JTQldCd0JjQlSDigJQg0YHQvNC-0YLRgNC40YLQtSDQutC-0L3RgdC-0LvRjC4nKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1wcmVzZXRzJyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgLmF2LXByZXNldHMnKTsKICAgIHZhciBzYyA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZigndmFyIFBSRVNFVFMnKSA-IC0xOwogICAgfSlbMF07CiAgICBpZiAoIXNjKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINGB0L_QuNGB0LrQsCDQv9GA0LXRgdC10YLQvtCyJyk7CiAgICBjZmcgPSByZWFkQ2ZnKHNjb3BlLCBzYy50ZXh0Q29udGVudCk7CiAgICByZWFkTGQoZG9jLCBjZmcpOwogICAgc3RhcnQoKTsKICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgcm9vdC5pbm5lckhUTUwgPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnpwLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpwLWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0L_RgNC10YHQtdGC0L7QsjwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpwLWJvZHkiPjxwIGNsYXNzPSJhdnpwLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC_0YDQtdGB0LXRgtC-0LIg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6ImNvbnRhY3RzIix0aXRsZToi0J_QsNC90LXQu9GMINC60L7QvdGC0LDQutGC0L7QsiIsc2hvcnQ6ItCa0L7QvdGC0LDQutGC0YsiLGhpbnQ6ItGC0LXQutGB0YLRiywg0YHQv9C-0YHQvtCx0Ysg0YHQstGP0LfQuCwg0L3QsNC00L_QuNGB0Lgg0YTQvtGA0LzRiywg0YDQsNC30LzQtdGC0LrQsCIscGFnZXM6WyIvY29udGFjdHMiXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0JrQntCd0KLQkNCa0KLQntCSICB2MSDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvY29udGFjdHMKCiAgINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLCiAgINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvC4KCiAgINCT0JvQkNCS0J3QntCVINCf0KDQkNCS0JjQm9CeOiDRhNC-0YDQvNCwINC30LDRj9Cy0LrQuCDQvdC10L_RgNC40LrQvtGB0L3QvtCy0LXQvdC90LAuINCn0LXRgNC10Lcg0L3QtdGRCiAgINC_0YDQuNGF0L7QtNGP0YIg0LrQu9C40LXQvdGC0YsuINCf0LDQvdC10LvRjCDQvdC1INGC0YDQvtCz0LDQtdGCINC90Lgg0L7RgtC_0YDQsNCy0LrRgywg0L3QuCDQv9GA0L7QstC10YDQutGDCiAgINC_0L7Qu9C10LksINC90Lgg0LvQvtCy0YPRiNC60YMg0LTQu9GPINCx0L7RgtC-0LIsINC90Lgg0LLRi9Cz0YDRg9C30LrRgyDQsiDQutCw0LvQtdC90LTQsNGA0Ywg4oCUCiAgINCy0YHRkSDRjdGC0L4g0L_QtdGA0LXQvdC-0YHQuNGC0YHRjyDQtNC-0YHQu9C-0LLQvdC-INC4INC_0YDQvtCy0LXRgNGP0LXRgtGB0Y8g0L_QtdGA0LXQtCDQstGL0LTQsNGH0LXQuSDQutC-0LTQsC4KCiAgINCi0YDQuCDRg9GA0L7QstC90Y8g0LfQsNGJ0LjRgtGLINC_0YDQuCDRgdCx0L7RgNC60LU6CiAgICAgMS4g0L_QvtC00L_QuNGB0Lgg0L3QsCDQutC90L7Qv9C60LDRhSDQstGL0LHQvtGA0LAg0YHQstGP0LfQsNC90Ysg0YHQviDQt9C90LDRh9C10L3QuNGP0LzQuCDQstC90YPRgtGA0LgKICAgICAgICDRgdC60YDQuNC_0YLQsC4g0JXRgdC70Lgg0L_QvtC00L_QuNGB0Ywg0L_RgNCw0LLQuNGC0YHRjywg0LAg0LfQvdCw0YfQtdC90LjQtSDQsiDQutC-0LTQtSDQvdCw0LnRgtC4CiAgICAgICAg0L3QtSDRg9C00LDQu9C-0YHRjCDigJQg0YHQsdC-0YDQutCwINCe0KLQnNCV0J3Qr9CV0KLQodCvOiDQuNC90LDRh9C1INC30LDRj9Cy0LrQuCDRg9GF0L7QtNC40LvQuCDQsdGLCiAgICAgICAg0YEg0YLQuNC_0L7QvCwg0LrQvtGC0L7RgNC-0LPQviDQvdCwINC60L3QvtC_0LrQtSDRg9C20LUg0L3QtdGCOwogICAgIDIuINC_0L7RgdC70LUg0L_RgNCw0LLQutC4INGB0LrRgNC40L_RgiDQv9GA0L7QstC10YDRj9C10YLRgdGPINC90LAg0YHQuNC90YLQsNC60YHQuNGBLiDQodC70L7QvNCw0L3QvdGL0LkKICAgICAgICDRgdC60YDQuNC_0YIg4oCUINC-0YLQvNC10L3QsDsKICAgICAzLiDQsiDQs9C-0YLQvtCy0L7QvCDQutC-0LTQtSDQuNGJ0YPRgtGB0Y8g0L7QtNC40L3QvdCw0LTRhtCw0YLRjCDRh9Cw0YHRgtC10Lkg0YTQvtGA0LzRiy4g0J3QtdGCINGF0L7RgtGPINCx0YsKICAgICAgICDQvtC00L3QvtC5IOKAlCDQvtGC0LzQtdC90LAsINC60L7QtCDQvdC1INCy0YvQtNCw0ZHRgtGB0Y8uCgogICDQm9GD0YfRiNC1INC90LUg0YHQvtCx0YDQsNGC0YwsINGH0LXQvCDQstGL0LTQsNGC0Ywg0LHQu9C-0LosINC60L7RgtC-0YDRi9C5INC80L7Qu9GH0LAg0L_QtdGA0LXRgdGC0LDQvdC10YIKICAg0L_RgNC40L3QuNC80LDRgtGMINC30LDRj9Cy0LrQuC4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDRjdGC0Lgg0YPQt9C70Ysg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAyNCDQsNCy0LPRg9GB0YLQsCAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTkiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogItC-0YIgMTQgOTAwIOKCvSIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICB2YXIgQ0FOT05fQ0xBU0ggPSBbXTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnpjLXJvb3QnKTsKICBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBvd25UZXh0KGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgcyA9ICcnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSBzICs9IGVsLmNoaWxkTm9kZXNbaV0ubm9kZVZhbHVlOwogICAgfQogICAgcmV0dXJuIHMucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogIH0KICBmdW5jdGlvbiBhdHRyKGVsLCBhKSB7IHJldHVybiBlbCA_IChlbC5nZXRBdHRyaWJ1dGUoYSkgfHwgJycpIDogJyc7IH0KCiAgLyog0JrQvdC-0L_QutC4INCy0YvQsdC-0YDQsDog0L_QvtC00L_QuNGB0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC4INC30L3QsNGH0LXQvdC40LUg0LLQvdGD0YLRgNC4INGB0LrRgNC40L_RgtCwLgogICAgINCX0L3QsNGH0LXQvdC40LUg4oCUINGC0L4sINGH0YLQviDRg9GF0L7QtNC40YIg0LIg0LfQsNGP0LLQutGDLCDQv9C-0Y3RgtC-0LzRgyDRgdCy0Y_Qt9GMINC-0LHRj9C30LDRgtC10LvRjNC90LAuICovCiAgdmFyIENISVBTID0gWwogICAgeyBpZDogJ2J0bi1zaG9vdGluZycsIHZhck5hbWU6ICdzZWxlY3RlZFR5cGUnIH0sCiAgICB7IGlkOiAnYnRuLW1lZXRpbmcnLCAgdmFyTmFtZTogJ3NlbGVjdGVkVHlwZScgfSwKICAgIHsgaWQ6ICdidG4tc2l0ZScsICAgICB2YXJOYW1lOiAnc2VsZWN0ZWRUeXBlJyB9LAogICAgeyBpZDogJ2J0bi1rYXphbicsICAgIHZhck5hbWU6ICdzZWxlY3RlZENpdHknIH0sCiAgICB7IGlkOiAnYnRuLW1vc2NvdycsICAgdmFyTmFtZTogJ3NlbGVjdGVkQ2l0eScgfSwKICAgIHsgaWQ6ICdidG4tb3RoZXInLCAgICB2YXJOYW1lOiAnc2VsZWN0ZWRDaXR5JywgZmFsbGJhY2s6IHRydWUgfQogIF07CgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuaGVyby10aXRsZS1pbm5lcicpOwogICAgdmFyIGZpZWxkcyA9IGFsbChzY29wZSwgJy5vZi1maWVsZCcpOwoKICAgIHJldHVybiB7CiAgICAgIGhlcm86IHsKICAgICAgICBleWVicm93OiB0KG9uZShzY29wZSwgJy5oZXJvLWV5ZWJyb3cnKSksCiAgICAgICAgbGluZTE6IHQoaW5uZXJzWzBdKSwKICAgICAgICBsaW5lMjogaW5uZXJzWzFdID8gdChvbmUoaW5uZXJzWzFdLCAnZW0nKSB8fCBpbm5lcnNbMV0pIDogJycsCiAgICAgICAgbGluZTM6IHQoaW5uZXJzWzJdKSwKICAgICAgICBzdWI6IGh0bWwob25lKHNjb3BlLCAnLmhlcm8tc3ViJykpLAogICAgICAgIGhpbnQ6IG93blRleHQob25lKHNjb3BlLCAnLmhlcm8tc2Nyb2xsLWhpbnQnKSkKICAgICAgfSwKICAgICAgc29jaWFsczogYWxsKHNjb3BlLCAnLnNvY2lhbC1idG4nKS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWNvbjogdChvbmUoYSwgJy5tYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJykpLAogICAgICAgICAgbGFiZWw6IG93blRleHQoYSksCiAgICAgICAgICBocmVmOiBhdHRyKGEsICdocmVmJyksCiAgICAgICAgICBhcmlhOiBhdHRyKGEsICdhcmlhLWxhYmVsJykKICAgICAgICB9OwogICAgICB9KSwKICAgICAgZm9ybTogewogICAgICAgIHRpdGxlOiB0KG9uZShzY29wZSwgJy5mb3JtLXNlY3Rpb24tdGl0bGUnKSksCiAgICAgICAgbm90ZTogdChvbmUoc2NvcGUsICcuZm9ybS1zZWN0aW9uLW5vdGUnKSksCiAgICAgICAgZmllbGRzOiBmaWVsZHMubWFwKGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICB2YXIgbGIgPSBvbmUoZiwgJy5vZi1sYWJlbCcpOwogICAgICAgICAgdmFyIGlucCA9IG9uZShmLCAnaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSksIHRleHRhcmVhJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBsYWJlbDogdChsYiksCiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBhdHRyKGlucCwgJ3BsYWNlaG9sZGVyJykKICAgICAgICAgIH07CiAgICAgICAgfSksCiAgICAgICAgY2hpcHM6IENISVBTLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gdChvbmUoc2NvcGUsICcjJyArIGMuaWQpKTsgfSksCiAgICAgICAgY2l0eUN1c3RvbTogYXR0cihvbmUoc2NvcGUsICcjZi1jaXR5LWN1c3RvbScpLCAncGxhY2Vob2xkZXInKSwKICAgICAgICBsZWdhbDogaHRtbChvbmUoc2NvcGUsICcubGVnYWwtdGV4dCcpKSwKICAgICAgICBzdWJtaXQ6IHQob25lKHNjb3BlLCAnI2Ytc3VibWl0JykpCiAgICAgIH0sCiAgICAgIHN1Y2Nlc3M6IHsKICAgICAgICBpY29uOiB0KG9uZShzY29wZSwgJy5zdWNjZXNzLWljb24nKSksCiAgICAgICAgdGl0bGU6IHQob25lKHNjb3BlLCAnLnN1Y2Nlc3MtdGl0bGUnKSksCiAgICAgICAgc3ViOiB0KG9uZShzY29wZSwgJy5zdWNjZXNzLXN1YicpKSwKICAgICAgICBjYWw6IG93blRleHQob25lKHNjb3BlLCAnI2J0bi1hZGQtY2FsJykpLAogICAgICAgIHJldHJ5OiB0KG9uZShzY29wZSwgJy5zdWNjZXNzLXJldHJ5JykpCiAgICAgIH0sCiAgICAgIHNlbzogewogICAgICAgIHBhZ2VOYW1lOiAnJywgcGFnZURlc2NyaXB0aW9uOiAnJywKICAgICAgICB0ZWxlcGhvbmU6ICcnLCBlbWFpbDogJycsIHByaWNlUmFuZ2U6ICcnLAogICAgICAgIG9wZW5zOiAnJywgY2xvc2VzOiAnJywgc2FtZUFzOiAnJwogICAgICB9CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF07CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgKG9bJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdDb250YWN0UGFnZScpIHsKICAgICAgICAgIGNmZy5zZW8ucGFnZU5hbWUgPSBuLm5hbWUgfHwgJyc7CiAgICAgICAgICBjZmcuc2VvLnBhZ2VEZXNjcmlwdGlvbiA9IG4uZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgICAgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnUHJvZmVzc2lvbmFsU2VydmljZScpIHsKICAgICAgICAgIGNmZy5zZW8udGVsZXBob25lID0gbi50ZWxlcGhvbmUgfHwgJyc7CiAgICAgICAgICBjZmcuc2VvLmVtYWlsID0gbi5lbWFpbCB8fCAnJzsKICAgICAgICAgIGNmZy5zZW8ucHJpY2VSYW5nZSA9IG4ucHJpY2VSYW5nZSB8fCAnJzsKICAgICAgICAgIHZhciBvaCA9IG4ub3BlbmluZ0hvdXJzU3BlY2lmaWNhdGlvbjsKICAgICAgICAgIGlmIChvaCkgeyBjZmcuc2VvLm9wZW5zID0gb2gub3BlbnMgfHwgJyc7IGNmZy5zZW8uY2xvc2VzID0gb2guY2xvc2VzIHx8ICcnOyB9CiAgICAgICAgICBjZmcuc2VvLnNhbWVBcyA9IChuLnNhbWVBcyB8fCBbXSkuam9pbignXG4nKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgeyAvKiDRgdCx0L7RgNC60LAg0YHQvtC-0LHRidC40YIgKi8gfQogIH0KCiAgLyogLS0tLS0tLS0tLSDQv9Cw0L3QtdC70YwgLS0tLS0tLS0tLSAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnpjLXJvb3QsI2F2emMtcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2emMtcm9vdCBpbnB1dCwjYXZ6Yy1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6Yy1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2emMtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6Yy13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpjLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emMtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2emMtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6Yy1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1mIGlucHV0LCNhdnpjLXJvb3QgLmF2emMtZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnpjLXJvb3QgLmF2emMtcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2emMtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtd2Fybntmb250LXNpemU6MTJweDtjb2xvcjojOGE0YjAwICFpbXBvcnRhbnQ7YmFja2dyb3VuZDojZmZmNWU2O2JvcmRlcjoxcHggc29saWQgI2YwZDVhODsnLAogICAgJ2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTBweCAxMnB4O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnpjLW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnpjLW1zZ3tmb250LXNpemU6MTNweH0nCiAgXS5qb2luKCcnKTsKCiAgZnVuY3Rpb24gZXNjKHMpIHsKICAgIHJldHVybiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKQogICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICB9CiAgZnVuY3Rpb24gZmllbGQobGFiZWwsIHBhdGgsIHZhbCwgdHlwZSkgewogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnpjLWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsgdGFnICsgJzwvZGl2Pic7CiAgfQoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvb3QuaWQgPSAnYXZ6Yy1yb290JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpjLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGNmZyA9IG51bGw7CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgRklFTERfTkFNRVMgPSBbJ9CY0LzRjycsICfQotC10LvQtdGE0L7QvScsICdUZWxlZ3JhbScsICfQlNCw0YLQsCcsICfQo9GB0LvRg9Cz0LAnLCAn0JPQvtGA0L7QtCcsICfQlNC10YLQsNC70LgnXTsKICAgIHZhciBDSElQX05BTUVTID0gWyfQo9GB0LvRg9Cz0LAgMScsICfQo9GB0LvRg9Cz0LAgMicsICfQo9GB0LvRg9Cz0LAgMycsICfQk9C-0YDQvtC0IDEnLCAn0JPQvtGA0L7QtCAyJywgJ9CT0L7RgNC-0LQgMyddOwoKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6Yy13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6Yy1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC60L7QvdGC0LDQutGC0L7QsjwvaDI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpjLWIiIGlkPSJhdnpjLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImF2emMtYm9keSI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6Yy13YXJuIj7QntGC0L_RgNCw0LLQutCwINC30LDRj9Cy0LrQuCwg0L_RgNC-0LLQtdGA0LrQsCDQv9C-0LvQtdC5LCDQu9C-0LLRg9GI0LrQsCDQtNC70Y8g0LHQvtGC0L7QsiDQuCDQstGL0LPRgNGD0LfQutCwICcgKwogICAgICAn0LIg0LrQsNC70LXQvdC00LDRgNGMINC_0LDQvdC10LvRjNGOINC90LUg0L_RgNCw0LLRj9GC0YHRjyDQuCDQv9C10YDQtdC90L7RgdGP0YLRgdGPINC00L7RgdC70L7QstC90L4uINCf0LXRgNC10LQg0LLRi9C00LDRh9C10Lkg0LrQvtC00LAg0L_QsNC90LXQu9GMICcgKwogICAgICAn0L_RgNC-0LLQtdGA0Y_QtdGCINGB0LjQvdGC0LDQutGB0LjRgSDRgdC60YDQuNC_0YLQsCDQuCDQvdCw0LvQuNGH0LjQtSDQstGB0LXRhSDRh9Cw0YHRgtC10Lkg0YTQvtGA0LzRiyDigJQg0Lgg0L7RgtC80LXQvdGP0LXRgiDRgdCx0L7RgNC60YMsICcgKwogICAgICAn0LXRgdC70Lgg0YfRgtC-LdGC0L4g0L3QtSDRgdGF0L7QtNC40YLRgdGPLjwvcD4nOwoKICAgIC8qINCo0JDQn9Ca0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpjLXNlYyIgb3Blbj48c3VtbWFyeT7QqNCw0L_QutCwINGB0YLRgNCw0L3QuNGG0Ys8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6Yy1pbiI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5leWVicm93JywgY2ZnLmhlcm8uZXllYnJvdykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6Yy1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6IOKAlCDRgdGC0YDQvtC60LAgMScsICdoZXJvLmxpbmUxJywgY2ZnLmhlcm8ubGluZTEpICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAyICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log4oCUINGB0YLRgNC-0LrQsCAzJywgJ2hlcm8ubGluZTMnLCBjZmcuaGVyby5saW5lMykgKwogICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0L_QvtC0INGH0LXRgNGC0L7QuSAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdoZXJvLnN1YicsIGNmZy5oZXJvLnN1YiwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQn9C-0LTRgdC60LDQt9C60LAg0YMg0L_QvtC70L7RgdGLINC_0YDQvtC60YDRg9GC0LrQuCcsICdoZXJvLmhpbnQnLCBjZmcuaGVyby5oaW50KSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQodCf0J7QodCe0JHQqyDQodCS0K_Ql9CYICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6Yy1zZWMiPjxzdW1tYXJ5PtCh0L_QvtGB0L7QsdGLINGB0LLRj9C30LggKCcgKyBjZmcuc29jaWFscy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpjLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpjLWhpbnQiPtCX0L3QsNGH0L7QuiDigJQg0LjQvNGPINC40Lcg0L3QsNCx0L7RgNCwIE1hdGVyaWFsIFN5bWJvbHMuINCQ0LTRgNC10YEg0LTQu9GPINC_0L7Rh9GC0Ysg0L_QuNGI0LXRgtGB0Y8gJyArCiAgICAgICfQutCw0LogPGNvZGU-bWFpbHRvOtC_0L7Rh9GC0LA8L2NvZGU-LCDQtNC70Y8g0YHQvtC-0LHRidC10L3QuNC5IOKAlCA8Y29kZT5zbXM6KzfigKY8L2NvZGU-LjwvcD4nOwogICAgY2ZnLnNvY2lhbHMuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpjLWNhcmQiPjxoND7QmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6Yy1yb3ciPicgKyBmaWVsZCgn0J_QvtC00L_QuNGB0YwnLCAnc29jaWFscy4nICsgaSArICcubGFiZWwnLCBzLmxhYmVsKSArCiAgICAgICAgZmllbGQoJ9CX0L3QsNGH0L7QuicsICdzb2NpYWxzLicgKyBpICsgJy5pY29uJywgcy5pY29uKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdzb2NpYWxzLicgKyBpICsgJy5ocmVmJywgcy5ocmVmKSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC00LvRjyDRgdC60YDQuNC90YDQuNC00LXRgNCwJywgJ3NvY2lhbHMuJyArIGkgKyAnLmFyaWEnLCBzLmFyaWEpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCk0J7QoNCc0JAg4oCUINGC0L7Qu9GM0LrQviDQvdCw0LTQv9C40YHQuCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emMtc2VjIj48c3VtbWFyeT7QndCw0LTQv9C40YHQuCDQsiDRhNC-0YDQvNC1PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emMtaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emMtd2FybiI-0JfQtNC10YHRjCDQv9GA0LDQstGP0YLRgdGPINGC0L7Qu9GM0LrQviDQvdCw0LTQv9C40YHQuC4g0JvQvtCz0LjQutCwINC_0YDQuNGR0LzQsCDQt9Cw0Y_QstC-0Log0L3QtSDQt9Cw0YLRgNCw0LPQuNCy0LDQtdGC0YHRjy4gJyArCiAgICAgICfQn9C-0LTQv9C40YHQuCDQvdCwINC60L3QvtC_0LrQsNGFINCy0YvQsdC-0YDQsCDRgdCy0Y_Qt9Cw0L3RiyDRgdC-INC30L3QsNGH0LXQvdC40Y_QvNC4LCDQutC-0YLQvtGA0YvQtSDRg9GF0L7QtNGP0YIg0LIg0LfQsNGP0LLQutGDLCDigJQgJyArCiAgICAgICfQv9Cw0L3QtdC70Ywg0LzQtdC90Y_QtdGCINC40YUg0LLQvNC10YHRgtC1LjwvcD4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emMtcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRhNC-0YDQvNGLJywgJ2Zvcm0udGl0bGUnLCBjZmcuZm9ybS50aXRsZSkgKwogICAgICBmaWVsZCgn0J_RgNC40L_QuNGB0LrQsCDRgdC_0YDQsNCy0LAnLCAnZm9ybS5ub3RlJywgY2ZnLmZvcm0ubm90ZSkgKyAnPC9kaXY-JzsKICAgIGNmZy5mb3JtLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emMtcm93Ij4nICsgZmllbGQoJ9Cf0L7Qu9C1IMKrJyArIChGSUVMRF9OQU1FU1tpXSB8fCAoaSArIDEpKSArICfCuyDigJQg0L_QvtC00L_QuNGB0YwnLCAnZm9ybS5maWVsZHMuJyArIGkgKyAnLmxhYmVsJywgZi5sYWJlbCkgKwogICAgICAgIChmLnBsYWNlaG9sZGVyICE9PSAnJyA_IGZpZWxkKCfQn9C-0LTRgdC60LDQt9C60LAg0LLQvdGD0YLRgNC4INC_0L7Qu9GPJywgJ2Zvcm0uZmllbGRzLicgKyBpICsgJy5wbGFjZWhvbGRlcicsIGYucGxhY2Vob2xkZXIpIDogJzxkaXY-PC9kaXY-JykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6Yy1jYXJkIj48aDQ-0JrQvdC-0L_QutC4INCy0YvQsdC-0YDQsCDigJQg0L3QsNC00L_QuNGB0Ywg0YPRhdC-0LTQuNGCINC4INCyINC30LDRj9Cy0LrRgzwvaDQ-JzsKICAgIGNmZy5mb3JtLmNoaXBzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgaCArPSBmaWVsZChDSElQX05BTUVTW2ldLCAnZm9ybS5jaGlwcy4nICsgaSwgYyk7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Cf0L7QtNGB0LrQsNC30LrQsCDQsiDQv9C-0LvQtSDRgdCy0L7QtdCz0L4g0LPQvtGA0L7QtNCwJywgJ2Zvcm0uY2l0eUN1c3RvbScsIGNmZy5mb3JtLmNpdHlDdXN0b20pICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwINC-INGB0L7Qs9C70LDRgdC40LggKNC80L7QttC90L4gSFRNTCknLCAnZm9ybS5sZWdhbCcsIGNmZy5mb3JtLmxlZ2FsLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINC90LAg0LrQvdC-0L_QutC1INC-0YLQv9GA0LDQstC60LgnLCAnZm9ybS5zdWJtaXQnLCBjZmcuZm9ybS5zdWJtaXQpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCf0J7QodCb0JUg0J7QotCf0KDQkNCS0JrQmCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emMtc2VjIj48c3VtbWFyeT7QrdC60YDQsNC9INC_0L7RgdC70LUg0L7RgtC_0YDQsNCy0LrQuDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpjLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emMtcm93Ij4nICsgZmllbGQoJ9CX0L3QsNGH0L7QuicsICdzdWNjZXNzLmljb24nLCBjZmcuc3VjY2Vzcy5pY29uKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnc3VjY2Vzcy50aXRsZScsIGNmZy5zdWNjZXNzLnRpdGxlKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ3N1Y2Nlc3Muc3ViJywgY2ZnLnN1Y2Nlc3Muc3ViKSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpjLXJvdyI-JyArIGZpZWxkKCfQmtC90L7Qv9C60LAg0LrQsNC70LXQvdC00LDRgNGPJywgJ3N1Y2Nlc3MuY2FsJywgY2ZnLnN1Y2Nlc3MuY2FsKSArCiAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAgwqvQvtGC0L_RgNCw0LLQuNGC0Ywg0LXRidGRwrsnLCAnc3VjY2Vzcy5yZXRyeScsIGNmZy5zdWNjZXNzLnJldHJ5KSArICc8L2Rpdj4nICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCg0JDQl9Cc0JXQotCa0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpjLXNlYyI-PHN1bW1hcnk-0KDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpjLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpjLWhpbnQiPtCt0YLQviDQvdC10LLQuNC00LjQvNCw0Y8g0YfQsNGB0YLRjCDRgdGC0YDQsNC90LjRhtGLLiDQp9Cw0YHRiyDRgNCw0LHQvtGC0Ysg0Lgg0YLQtdC70LXRhNC-0L0g0LTQvtC70LbQvdGLINGB0L7QstC_0LDQtNCw0YLRjCAnICsKICAgICAgJ9GBINGC0LXQvCwg0YfRgtC-INC90LDQv9C40YHQsNC90L4g0L3QsCDRgdCw0LzQvtC5INGB0YLRgNCw0L3QuNGG0LUuPC9wPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlTmFtZScsIGNmZy5zZW8ucGFnZU5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZURlc2NyaXB0aW9uJywgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6Yy1yb3ciPicgKyBmaWVsZCgn0KLQtdC70LXRhNC-0L0nLCAnc2VvLnRlbGVwaG9uZScsIGNmZy5zZW8udGVsZXBob25lKSArCiAgICAgIGZpZWxkKCfQn9C-0YfRgtCwJywgJ3Nlby5lbWFpbCcsIGNmZy5zZW8uZW1haWwpICsgJzwvZGl2PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6Yy1yb3ciPicgKyBmaWVsZCgn0KfQsNGB0Ysg0YDQsNCx0L7RgtGLIOKAlCDRgScsICdzZW8ub3BlbnMnLCBjZmcuc2VvLm9wZW5zKSArCiAgICAgIGZpZWxkKCfQp9Cw0YHRiyDRgNCw0LHQvtGC0Ysg4oCUINC00L4nLCAnc2VvLmNsb3NlcycsIGNmZy5zZW8uY2xvc2VzKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CU0LjQsNC_0LDQt9C-0L0g0YbQtdC9JywgJ3Nlby5wcmljZVJhbmdlJywgY2ZnLnNlby5wcmljZVJhbmdlKSArCiAgICAgIGZpZWxkKCfQodGB0YvQu9C60Lgg0L3QsCDQv9GA0L7RhNC40LvQuCAo0L_QviDQvtC00L3QvtC5INCyINGB0YLRgNC-0LrQtSknLCAnc2VvLnNhbWVBcycsIGNmZy5zZW8uc2FtZUFzLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2emMtZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpjLWIgcCIgaWQ9ImF2emMtYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpjLWIiIGlkPSJhdnpjLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2emMtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2emMtb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6Yy1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CgogICAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyksIG8gPSBvYmosIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgICB9CiAgICBmdW5jdGlvbiBjb2xsZWN0KCkgewogICAgICB2YXIgZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgIHNldFBhdGgoZCwgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKSwgZWwudmFsdWUpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGQ7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQt9Cw0L_QuNGB0YwgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFRleHQoZWwsIHYpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgICAgdmFyIHRleHRzID0gW10sIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHRleHRzLnB1c2goZWwuY2hpbGROb2Rlc1tpXSk7CiAgICAgIH0KICAgICAgaWYgKCF0ZXh0cy5sZW5ndGgpIHsgZWwuYXBwZW5kQ2hpbGQoZWwub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2KSk7IHJldHVybjsgfQogICAgICB2YXIgbWFpbiA9IG51bGw7CiAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0ZXh0c1tpXS5ub2RlVmFsdWUudHJpbSgpICE9PSAnJykgeyBtYWluID0gdGV4dHNbaV07IGJyZWFrOyB9CiAgICAgIH0KICAgICAgaWYgKCFtYWluKSBtYWluID0gdGV4dHNbMF07CiAgICAgIHZhciByYXcgPSBtYWluLm5vZGVWYWx1ZTsKICAgICAgdmFyIHByZSA9IChyYXcubWF0Y2goL15ccyovKSB8fCBbJyddKVswXTsKICAgICAgdmFyIHBvc3QgPSAocmF3Lm1hdGNoKC9ccyokLykgfHwgWycnXSlbMF07CiAgICAgIGlmIChyYXcudHJpbSgpID09PSAnJykgeyBwcmUgPSAnJzsgcG9zdCA9ICcnOyB9CiAgICAgIG1haW4ubm9kZVZhbHVlID0gcHJlICsgdiArIHBvc3Q7CiAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0ZXh0c1tpXSAhPT0gbWFpbiAmJiB0ZXh0c1tpXS5ub2RlVmFsdWUudHJpbSgpICE9PSAnJykgewogICAgICAgICAgdGV4dHNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0c1tpXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBzZXRIdG1sKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLmlubmVySFRNTCA9IHY7IH0KCiAgICBmdW5jdGlvbiB3cml0ZUFsbChzY29wZSwgZCkgewogICAgICB2YXIgaW5uZXJzID0gYWxsKHNjb3BlLCAnLmhlcm8tdGl0bGUtaW5uZXInKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaGVyby1leWVicm93JyksIGQuaGVyby5leWVicm93KTsKICAgICAgaWYgKGlubmVyc1swXSkgc2V0VGV4dChpbm5lcnNbMF0sIGQuaGVyby5saW5lMSk7CiAgICAgIGlmIChpbm5lcnNbMV0pIHNldFRleHQob25lKGlubmVyc1sxXSwgJ2VtJykgfHwgaW5uZXJzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgICBpZiAoaW5uZXJzWzJdKSBzZXRUZXh0KGlubmVyc1syXSwgZC5oZXJvLmxpbmUzKTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuaGVyby1zdWInKSwgZC5oZXJvLnN1Yik7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmhlcm8tc2Nyb2xsLWhpbnQnKSwgZC5oZXJvLmhpbnQpOwoKICAgICAgYWxsKHNjb3BlLCAnLnNvY2lhbC1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLnNvY2lhbHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGEsICcubWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCcpLCB2Lmljb24pOwogICAgICAgIHNldFRleHQoYSwgdi5sYWJlbCk7CiAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2LmhyZWYpOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdi5hcmlhKTsKICAgICAgfSk7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5mb3JtLXNlY3Rpb24tdGl0bGUnKSwgZC5mb3JtLnRpdGxlKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZm9ybS1zZWN0aW9uLW5vdGUnKSwgZC5mb3JtLm5vdGUpOwogICAgICBhbGwoc2NvcGUsICcub2YtZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmZvcm0uZmllbGRzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShmLCAnLm9mLWxhYmVsJyksIHYubGFiZWwpOwogICAgICAgIHZhciBpbnAgPSBvbmUoZiwgJ2lucHV0Om5vdChbdHlwZT1jaGVja2JveF0pLCB0ZXh0YXJlYScpOwogICAgICAgIGlmIChpbnAgJiYgdi5wbGFjZWhvbGRlciAhPT0gJycgJiYgaW5wLmhhc0F0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSkgewogICAgICAgICAgaW5wLnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB2LnBsYWNlaG9sZGVyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBDSElQUy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcjJyArIGMuaWQpLCBkLmZvcm0uY2hpcHNbaV0pOwogICAgICB9KTsKICAgICAgdmFyIGNjID0gb25lKHNjb3BlLCAnI2YtY2l0eS1jdXN0b20nKTsKICAgICAgaWYgKGNjKSBjYy5zZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgZC5mb3JtLmNpdHlDdXN0b20pOwogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5sZWdhbC10ZXh0JyksIGQuZm9ybS5sZWdhbCk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnI2Ytc3VibWl0JyksIGQuZm9ybS5zdWJtaXQpOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuc3VjY2Vzcy1pY29uJyksIGQuc3VjY2Vzcy5pY29uKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuc3VjY2Vzcy10aXRsZScpLCBkLnN1Y2Nlc3MudGl0bGUpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5zdWNjZXNzLXN1YicpLCBkLnN1Y2Nlc3Muc3ViKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcjYnRuLWFkZC1jYWwnKSwgZC5zdWNjZXNzLmNhbCk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnN1Y2Nlc3MtcmV0cnknKSwgZC5zdWNjZXNzLnJldHJ5KTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINC_0YDQsNCy0LrQsCDQu9C40YLQtdGA0LDQu9C-0LIg0LIg0YHQutGA0LjQv9GC0LUgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGpzU3RyKHMpIHsgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgvJy9nLCAiXFwnIik7IH0KICAgIGZ1bmN0aW9uIHJ4KHMpIHsgcmV0dXJuIHMucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csICdcXCQmJyk7IH0KCiAgICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgICAgdmFyIG91dCA9IHNyYzsKCiAgICAgIC8qINCX0L3QsNGH0LXQvdC40Y8g0LrQvdC-0L_QvtC6INCy0YvQsdC-0YDQsDog0YLQviwg0YfRgtC-INGD0YXQvtC00LjRgiDQsiDQt9Cw0Y_QstC60YMuCiAgICAgICAgINCV0YHQu9C4INC_0L7QtNC_0LjRgdGMINC40LfQvNC10L3QuNC70LDRgdGMLCDQsCDQt9C90LDRh9C10L3QuNC1INCyINC60L7QtNC1INC90LUg0L3QsNGI0LvQvtGB0Ywg4oCUCiAgICAgICAgINGN0YLQviDQvtGC0LzQtdC90LAg0YHQsdC-0YDQutC4LCDQsCDQvdC1INC_0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INC40L3QsNGH0LUg0LfQsNGP0LLQutC4CiAgICAgICAgINC_0YDQuNGF0L7QtNC40LvQuCDQsdGLINGBINGC0LjQv9C-0LwsINC60L7RgtC-0YDQvtCz0L4g0L3QsCDQutC90L7Qv9C60LUg0YPQttC1INC90LXRgi4gKi8KICAgICAgQ0hJUFMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciB3YXMgPSBjZmcuZm9ybS5jaGlwc1tpXSwgbm93ID0gZC5mb3JtLmNoaXBzW2ldOwogICAgICAgIGlmICh3YXMgPT09IG5vdykgcmV0dXJuOwoKICAgICAgICB2YXIgZG9uZSA9IDA7CiAgICAgICAgdmFyIHJlQXNzaWduID0gbmV3IFJlZ0V4cCgnKCcgKyBjLnZhck5hbWUgKyAnXFxzKj1cXHMqKVwnJyArIHJ4KHdhcykgKyAnXCcnLCAnZycpOwogICAgICAgIG91dCA9IG91dC5yZXBsYWNlKHJlQXNzaWduLCBmdW5jdGlvbiAobSwgcDEpIHsgZG9uZSsrOyByZXR1cm4gcDEgKyAiJyIgKyBqc1N0cihub3cpICsgIiciOyB9KTsKCiAgICAgICAgaWYgKGMuZmFsbGJhY2spIHsKICAgICAgICAgIHZhciByZUZhbGwgPSBuZXcgUmVnRXhwKCcoXFx8XFx8XFxzKilcJycgKyByeCh3YXMpICsgJ1wnJywgJ2cnKTsKICAgICAgICAgIG91dCA9IG91dC5yZXBsYWNlKHJlRmFsbCwgZnVuY3Rpb24gKG0sIHAxKSB7IGRvbmUrKzsgcmV0dXJuIHAxICsgIiciICsganNTdHIobm93KSArICInIjsgfSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWRvbmUpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcign0KHQkdCe0KDQmtCQINCe0KLQnNCV0J3QldCd0JA6INC_0L7QtNC_0LjRgdGMIMKrJyArIHdhcyArICfCuyDQuNC30LzQtdC90LXQvdCwINC90LAgwqsnICsgbm93ICsKICAgICAgICAgICAgJ8K7LCDQvdC-INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LXQtSDQt9C90LDRh9C10L3QuNC1INCyINC60L7QtNC1INGE0L7RgNC80Ysg0L3QtSDQvdCw0LnQtNC10L3Qvi4g0JfQsNGP0LLQutC4INGD0YXQvtC00LjQu9C4INCx0YsgJyArCiAgICAgICAgICAgICfRgdC-INGB0YLQsNGA0YvQvCDQvdCw0LfQstCw0L3QuNC10LwuINCa0L7QtCDQvdC1INCy0YvQtNCw0L0uJyk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINCd0LDQtNC_0LjRgdGMINC90LAg0LrQvdC-0L_QutC1INC-0YLQv9GA0LDQstC60Lgg0LLQvtGB0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjyDRgdC60YDQuNC_0YLQvtC8CiAgICAgICAgINC_0L7RgdC70LUg0L3QtdGD0LTQsNGH0L3QvtC5INC_0L7Qv9GL0YLQutC4IOKAlCDQuNC90LDRh9C1INGC0LDQvCDQv9C-0Y_QstC40LvRgdGPINCx0Ysg0YHRgtCw0YDRi9C5INGC0LXQutGB0YIgKi8KICAgICAgaWYgKGNmZy5mb3JtLnN1Ym1pdCAhPT0gZC5mb3JtLnN1Ym1pdCkgewogICAgICAgIHZhciByZUJ0biA9IG5ldyBSZWdFeHAoJyhmU3VibWl0XFwudGV4dENvbnRlbnRcXHMqPVxccyopXCcnICsgcngoY2ZnLmZvcm0uc3VibWl0KSArICdcJycsICdnJyk7CiAgICAgICAgaWYgKCFyZUJ0bi50ZXN0KG91dCkpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcign0KHQkdCe0KDQmtCQINCe0KLQnNCV0J3QldCd0JA6INC90LDQtNC_0LjRgdGMINC90LAg0LrQvdC-0L_QutC1INC40LfQvNC10L3QtdC90LAsINC90L4g0LIg0LrQvtC00LUg0YTQvtGA0LzRiyAnICsKICAgICAgICAgICAgJ9C90LUg0L3QsNC50LTQtdC90L4g0LzQtdGB0YLQviwg0LPQtNC1INC-0L3QsCDQstC-0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10YLRgdGPINC_0L7RgdC70LUg0L7RiNC40LHQutC4INGB0LLRj9C30LguINCa0L7QtCDQvdC1INCy0YvQtNCw0L0uJyk7CiAgICAgICAgfQogICAgICAgIG91dCA9IG91dC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhmU3VibWl0XFwudGV4dENvbnRlbnRcXHMqPVxccyopXCcnICsgcngoY2ZnLmZvcm0uc3VibWl0KSArICdcJycsICdnJyksCiAgICAgICAgICBmdW5jdGlvbiAobSwgcDEpIHsgcmV0dXJuIHAxICsgIiciICsganNTdHIoZC5mb3JtLnN1Ym1pdCkgKyAiJyI7IH0pOwogICAgICB9CgogICAgICAvKiDQodC60YDQuNC_0YIg0L7QsdGP0LfQsNC9INC-0YHRgtCw0YLRjNGB0Y8g0YHQuNC90YLQsNC60YHQuNGH0LXRgdC60Lgg0YbQtdC70YvQvC4KICAgICAgICAg0J_RgNC-0LLQtdGA0Y_QtdC8INGA0LDQt9Cx0L7RgNC-0LwsINCd0JUg0LLRi9C_0L7Qu9C90Y_RjyDQutC-0LQuICovCiAgICAgIHRyeSB7IG5ldyBGdW5jdGlvbihvdXQpOyB9CiAgICAgIGNhdGNoIChlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfQodCR0J7QoNCa0JAg0J7QotCc0JXQndCV0J3QkDog0L_QvtGB0LvQtSDQv9GA0LDQstC60Lgg0LrQvtC0INGE0L7RgNC80Ysg0L_QtdGA0LXRgdGC0LDQuyDQsdGL0YLRjCDQutC-0YDRgNC10LrRgtC90YvQvCAoJyArCiAgICAgICAgICBlLm1lc3NhZ2UgKyAnKS4g0JrQvtC0INC90LUg0LLRi9C00LDQvS4nKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG91dDsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGJ1aWxkTGQodGV4dCwgZCkgewogICAgICB2YXIgbzsKICAgICAgdHJ5IHsgbyA9IEpTT04ucGFyc2UodGV4dCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgdGhyb3cgbmV3IEVycm9yKCdsZCtqc29uINC90LUg0YfQuNGC0LDQtdGC0YHRjzogJyArIGUubWVzc2FnZSk7IH0KICAgICAgKG9bJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdDb250YWN0UGFnZScpIHsKICAgICAgICAgIG4ubmFtZSA9IGQuc2VvLnBhZ2VOYW1lOwogICAgICAgICAgbi5kZXNjcmlwdGlvbiA9IGQuc2VvLnBhZ2VEZXNjcmlwdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdQcm9mZXNzaW9uYWxTZXJ2aWNlJykgewogICAgICAgICAgbi50ZWxlcGhvbmUgPSBkLnNlby50ZWxlcGhvbmU7CiAgICAgICAgICBuLmVtYWlsID0gZC5zZW8uZW1haWw7CiAgICAgICAgICBpZiAoZC5zZW8ucHJpY2VSYW5nZSkgbi5wcmljZVJhbmdlID0gZC5zZW8ucHJpY2VSYW5nZTsKICAgICAgICAgIGlmIChuLm9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24pIHsKICAgICAgICAgICAgbi5vcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uLm9wZW5zID0gZC5zZW8ub3BlbnM7CiAgICAgICAgICAgIG4ub3BlbmluZ0hvdXJzU3BlY2lmaWNhdGlvbi5jbG9zZXMgPSBkLnNlby5jbG9zZXM7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgc2EgPSBkLnNlby5zYW1lQXMuc3BsaXQoJ1xuJykubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRyaW0oKTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgICAgaWYgKHNhLmxlbmd0aCkgbi5zYW1lQXMgPSBzYTsKICAgICAgICAgIGlmIChuLmNvbnRhY3RQb2ludCAmJiBuLmNvbnRhY3RQb2ludFswXSkgewogICAgICAgICAgICBuLmNvbnRhY3RQb2ludFswXS50ZWxlcGhvbmUgPSBkLnNlby50ZWxlcGhvbmU7CiAgICAgICAgICAgIG4uY29udGFjdFBvaW50WzBdLmVtYWlsID0gZC5zZW8uZW1haWw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINCe0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuCDQv9GA0LjQstC-0LTQuNC8INC6INCz0LvQsNCy0L3QvtC5INCf0J7QodCb0JUg0YHQvtCx0YHRgtCy0LXQvdC90YvRhSDQv9GA0LDQstC-0Lo6CiAgICAgICAgINGC0LXQu9C10YTQvtC9LCDQv9C-0YfRgtCwINC4INC_0YDQvtGE0LjQu9C4INC-0L_QuNGB0YvQstCw0Y7RgiDQvtC00L3QvtCz0L4g0Lgg0YLQvtCz0L4g0LbQtSDRh9C10LvQvtCy0LXQutCwLAogICAgICAgICDQuCDQuNGB0YLQvtGH0L3QuNC6INGDINC90LjRhSDQvtC00LjQvSDigJQg0LPQu9Cw0LLQvdCw0Y8uINCV0YHQu9C4INCyINC_0L7Qu9GP0YUg0L_QsNC90LXQu9C4INGB0YLQvtC40YIKICAgICAgICAg0LTRgNGD0LPQvtC1LCDQv9Cw0L3QtdC70Ywg0L7QsSDRjdGC0L7QvCDRgdC60LDQttC10YIg0L_RgNC4INGB0LHQvtGA0LrQtTog0LzQtdC90Y_RgtGMINGN0YLQuCDQtNCw0L3QvdGL0LUKICAgICAgICAg0L3QsNC00L4g0L3QsCDQs9C70LDQstC90L7QuSwg0LjQvdCw0YfQtSDRgdGC0YDQsNC90LjRhtGLINGB0L3QvtCy0LAg0YDQsNC30L7QudC00YPRgtGB0Y8uICovCiAgICAgIHZhciBjYW5vbkJpeiA9IEFWWl9DQU5PTlsnaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MnXSB8fCB7fTsKICAgICAgQ0FOT05fQ0xBU0ggPSBbXTsKICAgICAgaWYgKGQuc2VvLnRlbGVwaG9uZSAmJiBjYW5vbkJpei50ZWxlcGhvbmUgJiYgZC5zZW8udGVsZXBob25lICE9PSBjYW5vbkJpei50ZWxlcGhvbmUpIHsKICAgICAgICBDQU5PTl9DTEFTSC5wdXNoKCfRgtC10LvQtdGE0L7QvSDQsiDRgNCw0LfQvNC10YLQutC1INCy0LfRj9GCINGBINCz0LvQsNCy0L3QvtC5ICgnICsgY2Fub25CaXoudGVsZXBob25lICsgJyknKTsKICAgICAgfQogICAgICBpZiAoZC5zZW8uZW1haWwgJiYgY2Fub25CaXouZW1haWwgJiYgZC5zZW8uZW1haWwgIT09IGNhbm9uQml6LmVtYWlsKSB7CiAgICAgICAgQ0FOT05fQ0xBU0gucHVzaCgn0L_QvtGH0YLQsCDQsiDRgNCw0LfQvNC10YLQutC1INCy0LfRj9GC0LAg0YEg0LPQu9Cw0LLQvdC-0LkgKCcgKyBjYW5vbkJpei5lbWFpbCArICcpJyk7CiAgICAgIH0KICAgICAgc3luY0Nhbm9uKG9bJ0BncmFwaCddIHx8IFtdKTsKCiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvLCBudWxsLCAyKTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgdmFyIEZPUk1fUEFSVFMgPSBbCiAgICAgICdmdW5jdGlvbnMueWFuZGV4Y2xvdWQubmV0JywKICAgICAgJ0dBU19OT1RJRllfVVJMJywKICAgICAgJ2Z1bmN0aW9uIHNlbmRSZXF1ZXN0JywKICAgICAgJ2Z1bmN0aW9uIG5vdGlmeUdBUycsCiAgICAgICdmb3JtRWwub25zdWJtaXQnLAogICAgICAnaXNTdWJtaXR0aW5nJywKICAgICAgJ21heEF0dGVtcHRzJywKICAgICAgJ2YtY29tcGFueScsCiAgICAgICdCRUdJTjpWQ0FMRU5EQVInLAogICAgICAnZi1hZ3JlZScsCiAgICAgICdtYXJrRXJyb3InCiAgICBdOwoKICAgIC8qINCj0LfQu9GLLCDQsdC10Lcg0LrQvtGC0L7RgNGL0YUg0YTQvtGA0LzQsCDQvdC1INGA0LDQsdC-0YLQsNC10YI6INC_0L7Qu9GPLCDRgdC-0LPQu9Cw0YHQuNC1LCDQutC90L7Qv9C60LAsCiAgICAgICDQu9C-0LLRg9GI0LrQsCDQtNC70Y8g0LHQvtGC0L7Qsiwg0Y3QutGA0LDQvSDRg9GB0L_QtdGF0LAg0Lgg0LrQvdC-0L_QutC4INCy0YvQsdC-0YDQsC4gKi8KICAgIHZhciBGT1JNX05PREVTID0gWwogICAgICAnI2F2LWZvcm0nLCAnI2YtbmFtZScsICcjZi1waG9uZScsICcjZi10ZycsICcjZi1kYXRlJywgJyNmLW1zZycsCiAgICAgICcjZi1hZ3JlZScsICcjZi1zdWJtaXQnLCAnI2YtY29tcGFueScsICcjZi1jaXR5LWN1c3RvbScsCiAgICAgICcjYXYtc3VjY2VzcycsICcjYnRuLWFkZC1jYWwnLAogICAgICAnI2J0bi1zaG9vdGluZycsICcjYnRuLW1lZXRpbmcnLCAnI2J0bi1zaXRlJywKICAgICAgJyNidG4ta2F6YW4nLCAnI2J0bi1tb3Njb3cnLCAnI2J0bi1vdGhlcicKICAgIF07CgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXYtd3JhcCcpOwogICAgICAgIGlmICghc2NvcGUpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAjYXYtd3JhcCcpOwoKICAgICAgICAvKiDQk9GA0LDQvdC40YbRiyDQsdC70L7QutCwINCx0LXRgNGR0Lwg0LjQtyDRgdCw0LzQvtCz0L4g0LjRgdGF0L7QtNC90LjQutCwOiA8aGVhZD4t0YHRgtGA0L7QutC4IHdmb2xpbwogICAgICAgICAgINGB0L7QsdC40YDQsNGC0Ywg0YDQtdCz0YPQu9GP0YDQutC-0Lkg0L_QviDQtNC-0LrRg9C80LXQvdGC0YMg0L3QtdC70YzQt9GPIOKAlCDQvdCw0YLQsNGJ0LjRgiDRh9GD0LbQvtCz0L4uICovCiAgICAgICAgdmFyIExEX09QRU4gPSAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nOwogICAgICAgIHZhciBzdGFydEF0ID0gc3JjLmluZGV4T2YoJzwhLS0gU2NoZW1hLm9yZycpOwogICAgICAgIHZhciBsZEZyb20gPSBzcmMuaW5kZXhPZihMRF9PUEVOLCBzdGFydEF0KTsKICAgICAgICB2YXIgbGRUbyA9IHNyYy5pbmRleE9mKCc8JyArICcvc2NyaXB0PicsIGxkRnJvbSk7CiAgICAgICAgdmFyIHdyYXBBdCA9IHNyYy5pbmRleE9mKCc8ZGl2IGlkPSJhdi13cmFwIj4nLCBsZFRvKTsKICAgICAgICBpZiAoc3RhcnRBdCA8IDAgfHwgbGRGcm9tIDwgMCB8fCBsZFRvIDwgMCB8fCB3cmFwQXQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ9C90LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LPRgNCw0L3QuNGG0Ysg0LHQu9C-0LrQsCDigJQg0YHQsdC-0YDQutCwINC-0YLQvNC10L3QtdC90LAnKTsKICAgICAgICB9CgogICAgICAgIHZhciBoZWFkID0gc3JjLnNsaWNlKHN0YXJ0QXQsIGxkRnJvbSk7CiAgICAgICAgdmFyIGxkT2xkID0gc3JjLnNsaWNlKGxkRnJvbSArIExEX09QRU4ubGVuZ3RoLCBsZFRvKTsKICAgICAgICB2YXIgYmV0d2VlbiA9IHNyYy5zbGljZShsZFRvICsgKCc8JyArICcvc2NyaXB0PicpLmxlbmd0aCwgd3JhcEF0KTsKCiAgICAgICAgd3JpdGVBbGwoc2NvcGUsIGQpOwoKICAgICAgICB2YXIgc2MgPSBvbmUoc2NvcGUsICdzY3JpcHQ6bm90KFt0eXBlXSknKTsKICAgICAgICBpZiAoIXNjKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINCx0LvQvtC60LUg0L3QtdGCINGB0LrRgNC40L_RgtCwINGE0L7RgNC80Ysg4oCUINGB0LHQvtGA0LrQsCDQvtGC0LzQtdC90LXQvdCwJyk7CiAgICAgICAgc2MudGV4dENvbnRlbnQgPSBwYXRjaFNjcmlwdChzYy50ZXh0Q29udGVudCwgZCk7CgogICAgICAgIHZhciB0ZXh0ID0gaGVhZCArIExEX09QRU4gKyAnXG4nICsgYnVpbGRMZChsZE9sZCwgZCkgKyAnXG4nICsgJzwnICsgJy9zY3JpcHQ-JyArCiAgICAgICAgICBiZXR3ZWVuICsgc2NvcGUub3V0ZXJIVE1MOwoKICAgICAgICB2YXIgbG9zdCA9IEZPUk1fUEFSVFMuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiB0ZXh0LmluZGV4T2YocCkgPCAwOyB9KTsKCiAgICAgICAgLyog0J_RgNC-0LLQtdGA0LrQsCDRgdGC0YDQvtC60L7QuSDQvdCw0YXQvtC00LjRgiDQuCDRg9C_0L7QvNC40L3QsNC90LjQtSDQsiDQutC-0LTQtSwg0L_QvtGN0YLQvtC80YMg0YPQt9C70Ysg0YTQvtGA0LzRiwogICAgICAgICAgINC_0YDQvtCy0LXRgNGP0LXQvCDQvtGC0LTQtdC70YzQvdC-IOKAlCDRgNCw0LfQsdC-0YDQvtC8INCz0L7RgtC-0LLQvtCz0L4g0YDQtdC30YPQu9GM0YLQsNGC0LAuINCf0L7Qu9C1INC80L7QttC10YIKICAgICAgICAgICDQuNGB0YfQtdC30L3Rg9GC0Ywg0LjQtyDRgNCw0LfQvNC10YLQutC4LCDQvtGB0YLQsNCy0YjQuNGB0Ywg0LIg0YHQutGA0LjQv9GC0LU6INGB0YLRgNC-0LrQvtCy0LDRjyDQv9GA0L7QstC10YDQutCwCiAgICAgICAgICAg0Y3RgtC-0LPQviDQvdC1INGD0LLQuNC00LjRgiwg0LAg0Y3RgtCwINGD0LLQuNC00LjRgi4gKi8KICAgICAgICB2YXIgY2hlY2sgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICBGT1JNX05PREVTLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgaWYgKCFjaGVjay5xdWVyeVNlbGVjdG9yKHNlbCkpIGxvc3QucHVzaCgn0L_QvtC70LUgJyArIHNlbCk7CiAgICAgICAgfSk7CgogICAgICAgIGlmIChsb3N0Lmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfQodCR0J7QoNCa0JAg0J7QotCc0JXQndCV0J3QkCDigJQg0LIg0YDQtdC30YPQu9GM0YLQsNGC0LUg0L3QtSDRhdCy0LDRgtCw0LXRgiDRh9Cw0YHRgtC10Lkg0YTQvtGA0LzRizogJyArCiAgICAgICAgICAgIGxvc3Quam9pbignLCAnKSArICcuINCa0L7QtCDQvdC1INCy0YvQtNCw0L0sINGH0YLQvtCx0Ysg0L3QtSDRgdC70L7QvNCw0YLRjCDQv9GA0LjRkdC8INC30LDRj9Cy0L7Qui4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQgfTsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpjLW91dCcpOwogICAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgICB2YXIgb2sgPSBmYWxzZTsKICAgICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICAgIH0KCiAgICAvKiDQp9Cw0YHRiyDRgNCw0LHQvtGC0Ysg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC4INCyINGA0LDQt9C80LXRgtC60LUg0LTQvtC70LbQvdGLINGB0L7QstC_0LDQtNCw0YLRjCDigJQKICAgICAgINC_0LDQvdC10LvRjCDQuNGFINC90LUg0YHQstC-0LTQuNGCINGB0LDQvNCwLCDQsCDRgdCy0LXRgNGP0LXRgiDQuCDQs9C-0LLQvtGA0LjRgiDQstGB0LvRg9GFLiAqLwogICAgZnVuY3Rpb24gd2FybmluZ3MoZCwgc2NvcGUpIHsKICAgICAgdmFyIHcgPSBbXTsKICAgICAgdmFyIHZpc2libGUgPSAoZC5oZXJvLnN1YiB8fCAnJykucmVwbGFjZSgvPFtePl0rPi9nLCAnICcpOwogICAgICB2YXIgcGFpciA9IHZpc2libGUubWF0Y2goLyhcZHsxLDJ9OlxkezJ9KVxEKyhcZHsxLDJ9OlxkezJ9KS8pOwogICAgICBpZiAocGFpciAmJiBkLnNlby5vcGVucyAmJiBkLnNlby5jbG9zZXMpIHsKICAgICAgICBpZiAocGFpclsxXSAhPT0gZC5zZW8ub3BlbnMgfHwgcGFpclsyXSAhPT0gZC5zZW8uY2xvc2VzKSB7CiAgICAgICAgICB3LnB1c2goJ9C90LAg0YHRgtGA0LDQvdC40YbQtSDRh9Cw0YHRiyAnICsgcGFpclsxXSArICfigJMnICsgcGFpclsyXSArCiAgICAgICAgICAgICcsINCwINCyINGA0LDQt9C80LXRgtC60LUgJyArIGQuc2VvLm9wZW5zICsgJ-KAkycgKyBkLnNlby5jbG9zZXMpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgdGVsID0gKGQuc29jaWFscy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMuaHJlZi5pbmRleE9mKCdzbXM6JykgPT09IDA7IH0pWzBdIHx8IHt9KS5ocmVmIHx8ICcnOwogICAgICBpZiAodGVsICYmIGQuc2VvLnRlbGVwaG9uZSkgewogICAgICAgIHZhciBhID0gdGVsLnJlcGxhY2UoL1xEL2csICcnKSwgYiA9IGQuc2VvLnRlbGVwaG9uZS5yZXBsYWNlKC9cRC9nLCAnJyk7CiAgICAgICAgaWYgKGEgIT09IGIpIHcucHVzaCgn0YLQtdC70LXRhNC-0L0g0LIg0LrQvdC-0L_QutC1ICgnICsgYSArICcpINC4INCyINGA0LDQt9C80LXRgtC60LUgKCcgKyBiICsgJykg0YDQsNC30L3Ri9C1Jyk7CiAgICAgIH0KICAgICAgdmFyIG1haWwgPSAoZC5zb2NpYWxzLmZpbHRlcihmdW5jdGlvbiAocykgeyByZXR1cm4gcy5ocmVmLmluZGV4T2YoJ21haWx0bzonKSA9PT0gMDsgfSlbMF0gfHwge30pLmhyZWYgfHwgJyc7CiAgICAgIGlmIChtYWlsICYmIGQuc2VvLmVtYWlsICYmIG1haWwuc2xpY2UoNykgIT09IGQuc2VvLmVtYWlsKSB7CiAgICAgICAgdy5wdXNoKCfQv9C-0YfRgtCwINCyINC60L3QvtC_0LrQtSDQuCDQsiDRgNCw0LfQvNC10YLQutC1INGA0LDQt9C90YvQtScpOwogICAgICB9CiAgICAgIHJldHVybiB3OwogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emMtYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICB2YXIgZCA9IGNvbGxlY3QoKTsKICAgICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgICAgYXNzZW1ibGUoZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAgICfQpNC-0YDQvNCwINC_0YDQvtCy0LXRgNC10L3QsCDigJQg0LLRgdC1INGH0LDRgdGC0Lgg0L3QsCDQvNC10YHRgtC1LCDRgdC60YDQuNC_0YIg0LrQvtGA0YDQtdC60YLQtdC9LiAnICsKICAgICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6INC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLic7CiAgICAgICAgdmFyIHcgPSB3YXJuaW5ncyhkKS5jb25jYXQoQ0FOT05fQ0xBU0gpOwogICAgICAgIGlmICh3Lmxlbmd0aCkgbm90ZSArPSAnINCf0YDQvtCy0LXRgNGM0YLQtTogJyArIHcuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKGUubWVzc2FnZSk7IH0pOwogICAgfTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpjLXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJyNhdi13cmFwJykpOwogICAgICAgIHJlYWRMZChkb2MsIGFnYWluKTsKICAgICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXApLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG1zZygn0KDQkNCh0KXQntCW0JTQldCd0JjQlSDigJQg0YHQvNC-0YLRgNC40YLQtSDQutC-0L3RgdC-0LvRjC4nKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJyNhdi13cmFwJyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgI2F2LXdyYXAnKTsKICAgIGNmZyA9IHJlYWRDZmcoc2NvcGUpOwogICAgcmVhZExkKGRvYywgY2ZnKTsKICAgIHN0YXJ0KCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgIHJvb3QuaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6Yy13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6Yy1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC60L7QvdGC0LDQutGC0L7QsjwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpjLWJvZHkiPjxwIGNsYXNzPSJhdnpjLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC60L7QvdGC0LDQutGC0L7QsiDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoidHV0b3JpYWwiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0L7QsdGD0YfQtdC90LjRjyIsc2hvcnQ6ItCe0LHRg9GH0LXQvdC40LUiLGhpbnQ6ItGE0L7RgNC80LDRgtGLLCDRhtC10L3Riywg0LzQvtC00YPQu9C4LCDQstC-0L_RgNC-0YHRiyIscGFnZXM6WyIvdHV0b3JpYWwiXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0J7QkdCj0KfQldCd0JjQryAgdjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgL3R1dG9yaWFsCgogICDQp9C40YLQsNC10YIg0JjQodCl0J7QlNCd0KvQmSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiywg0L_QvtC00YHRgtCw0LLQu9GP0LXRgiDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiwogICDQuCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0Log0YbQtdC70LjQutC-0LwuCgogICDQptC10L3RiyDQt9C00LXRgdGMINGB0YLQvtGP0YIg0LIg0L3QtdGB0LrQvtC70YzQutC40YUg0LzQtdGB0YLQsNGFINGB0YDQsNC30YMsINC4INC_0LDQvdC10LvRjCDQtNC10YDQttC40YIg0LjRhQogICDQstC80LXRgdGC0LU6INGG0LXQvdCwINC80L7QtNGD0LvRjNC90L7Qs9C-INC60YPRgNGB0LAg4oCUINCyINC60LDRgNGC0L7Rh9C60LUg0YTQvtGA0LzQsNGC0LAsINCyINCx0LDQvdC90LXRgNC1CiAgINGB0YLQvtC40LzQvtGB0YLQuCDQuCDQsiDRgNCw0LfQvNC10YLQutC1OyDQuNC90YLQtdC90YHQuNCyLCDQtNC-0L8t0LzQvtC00YPQu9GMINC4INC60L7QvNC_0LvQtdC60YIg4oCUCiAgINCyINGB0LLQvtC40YUg0LrQsNGA0YLQvtGH0LrQsNGFINC4INCyINGA0LDQt9C80LXRgtC60LUuINCg0LDQt9C-0LnRgtC40YHRjCDQuNC8INC90LXRh9C10LwuCgogICDQp9C10LPQviDQv9Cw0L3QtdC70Ywg0J3QlSDQtNC10LvQsNC10YIg0YHQsNC80LA6INC90LUg0L_QvtC00LzQtdC90Y_QtdGCINGH0LjRgdC70LAg0LLQvdGD0YLRgNC4INC20LjQstGL0YUKICAg0YTRgNCw0LcuINCV0YHQu9C4INGG0LXQvdCwINGD0L_QvtC80Y_QvdGD0YLQsCDQsiDQvtGC0LLQtdGC0LUg0L3QsCDQstC-0L_RgNC-0YEsINC-0L3QsCDQvtCxINGN0YLQvtC8CiAgINGB0LrQsNC20LXRgiDQv9GA0Lgg0YHQsdC-0YDQutC1INC4INC90LDQt9C-0LLRkdGCINC80LXRgdGC0L4g4oCUINC_0L7QtNGB0YLQsNCy0LvRj9GC0Ywg0YfQuNGB0LvQvgogICDQsiDQv9GA0LXQtNC70L7QttC10L3QuNC1INCy0YHQu9C10L_Rg9GOINC-0L_QsNGB0L3QtdC1LgoKICAg0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLINGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvjogR29vZ2xlCiAgINC30LDRgdGH0LjRgtGL0LLQsNC10YIg0LjRhSDRgtC-0LvRjNC60L4g0L_RgNC4INC00L7RgdC70L7QstC90L7QvCDRgdC-0LLQv9Cw0LTQtdC90LjQuC4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQo9C30LvRiyAjcGhvdG9ncmFwaGVyLCAjYnVzaW5lc3Mg0LggI3dlYnNpdGUg0L7Qv9C40YHRi9Cy0LDRjtGCINC-0LTQvdC-0LPQviDQuCDRgtC-0LPQviDQttC1CiAgICAg0YfQtdC70L7QstC10LrQsCwg0L7QtNC90L4g0LTQtdC70L4g0Lgg0L7QtNC40L0g0YHQsNC50YIuINCe0LTQuNC9INC4INGC0L7RgiDQttC1IEBpZCwg0L7Qv9C40YHQsNC90L3Ri9C5CiAgICAg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlCDQvNC-0LvRh9Cw0LvQuNCy0LDRjyDQv9C-0LvQvtC80LrQsDog0L_QvtC40YHQutC-0LLQuNC6CiAgICAg0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuCDQstC10YDQuNGC0YwsINC4INC90LDQs9GA0LDQtNGLINC80L7Qs9GD0YIg0L_RgNC-0YHRgtC-CiAgICAg0L3QtSDQt9Cw0YHRh9C40YLQsNGC0YzRgdGPLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDQuNGFINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LAogICAgINC_0L7RjdGC0L7QvNGDINGA0LDRgdGF0L7QtNC40YLRjNGB0Y8g0LjQvCDQsdC-0LvRjNGI0LUg0L3QtdGH0LXQvC4KCiAgICAg0K3RgtCw0LvQvtC9INGB0L3Rj9GCINGBINCz0LvQsNCy0L3QvtC5IDI0INCw0LLQs9GD0YHRgtCwIDIwMjYuINCV0YHQu9C4INCz0LvQsNCy0L3Rg9GOINC00L7Qv9C-0LvQvdGP0YIg4oCUCiAgICAg0L7QsdC90L7QstC40YLRjCDQt9C00LXRgdGMINC4INC_0LXRgNC10YHQvtCx0YDQsNGC0Ywg0L3QsNCx0L7RgDogcHl0aG9uMyBwYWNrLXRvb2xraXQucHkgKi8KICB2YXIgQVZaX0NBTk9OID0gewogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciI6IHsKICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IiwKICAgICAgImFsdGVybmF0ZU5hbWUiOiAiQXZhbnphdG8iLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LguINCf0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINGBIDIwMTkg0LPQvtC00LAuINCR0L7Qu9C10LUgMjUwINGA0LXQsNC70LjQt9C-0LLQsNC90L3Ri9GFINC_0YDQvtC10LrRgtC-0LIuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogWwogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwLzBpT2ZMSWV2UE1wUTVfRkc2TUtEY092UEhZNFNjaVAyLzN2OHdjUGhsTmpvVUhKWV94MUY5QlBkNjJ4T3NNNU8xLzg1WldiNmRZRmdUOWIzM0gzSUcxbmcuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL3k4RG02SlpWQ25sNENVRnprZW94Y2h2UEkxd1ZkRENLLzctVW9MS0MyZ1FrcmdhWHhyclN5THFZdGFNR1J6X3UtL3BCWWdSWDVzUGJZeFhCT1BtRGxYRVEuanBlZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9vVzRxai1tTFN4T0dKTGZEbWJTRERhYmhwTlc4bmVLOC80bFZuTU04Wm5DekN5RWJnWEluSHpDdkNwclBHcXJKNi9IOXViVDBIOUlGQUNiYk9QeGVuRjdRLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9fUkJzYU1oRzBqR01NN182c2xveUVQc2RWLVpPVjNpdy81dHlPSDk2LTJSdU9VLXBfSUtCd1UwMER6NVhJOXJ0VC9BY29McjZ0RGhCQV8xc1Yzb2l0Q3JRLmpwZyIKICAgICAgXSwKICAgICAgImpvYlRpdGxlIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQiLAogICAgICAia25vd3NBYm91dCI6IFsKICAgICAgICAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8iLAogICAgICAgICLQnNGD0LbRgdC60L7QuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCW0LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JvQuNGH0L3Ri9C5INCx0YDQtdC90LQiLAogICAgICAgICLQoNC10L_QvtGA0YLQsNC20L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCf0YDQtdC00LzQtdGC0L3QsNGPINGB0YrRkdC80LrQsCDQtNC70Y8g0LzQsNGA0LrQtdGC0L_Qu9C10LnRgdC-0LIiLAogICAgICAgICLQmNC90YLQtdGA0YzQtdGA0L3QsNGPINC4INCw0YDRhdC40YLQtdC60YLRg9GA0L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCQ0LLRgtC-0LzQvtCx0LjQu9GM0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIKICAgICAgXSwKICAgICAgImF3YXJkIjogWwogICAgICAgICJQb3J0Zm9saW8gQXdhcmQgMjAyNCDigJQgMiDQvNC10YHRgtC-LCDRgdC10YDQuNGPINCg0LXQv9C-0YDRgtCw0LYiLAogICAgICAgICJUaGUgUGxhY2UgRWNvbm9teSBWb2wuMyBieSBIb3luZSAoQXVzdHJhbGlhKSIsCiAgICAgICAgIjUwMHB4IEF3YXJkcyIsCiAgICAgICAgIkFnb3JhIEF3YXJkcyIsCiAgICAgICAgIjM1YXdhcmRzIgogICAgICBdLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly8yMDI0LnBvcnRmb2xpb2F3YXJkLmNvbS8jc2VjdGlvbi0xOTAwNjE1NyIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIndvcmtMb2NhdGlvbiI6IHsKICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICB9CiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIjogewogICAgICAiQHR5cGUiOiAiUHJvZmVzc2lvbmFsU2VydmljZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiLAogICAgICAibmFtZSI6ICJBdmFuemF0byDigJQg0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C1INGE0L7RgtC-0YHQtdGB0YHQuNC4INCyINCa0LDQt9Cw0L3QuCDRgSAyMDE5INCz0L7QtNCwOiDRgdGC0YPQtNC40Y8g0Lgg0YPQu9C40YbQsCwg0LzRg9C20YHQutC-0Lkg0Lgg0LbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIsINGB0YrRkdC80LrQsCDQtNC70Y8g0LvQuNGH0L3QvtCz0L4g0LHRgNC10L3QtNCwLiAyNTArINC_0YDQvtC10LrRgtC-0LIsIDUg0LzQtdC20LTRg9C90LDRgNC-0LTQvdGL0YUg0L3QsNCz0YDQsNC0LiDQktGL0LXQt9C00Ysg0LIg0JzQvtGB0LrQstGDLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6ICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgImZvdW5kZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJmb3VuZGluZ0RhdGUiOiAiMjAxOSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgIkB0eXBlIjogIlBvc3RhbEFkZHJlc3MiLAogICAgICAgICJhZGRyZXNzTG9jYWxpdHkiOiAi0JrQsNC30LDQvdGMIiwKICAgICAgICAiYWRkcmVzc1JlZ2lvbiI6ICLQoNC10YHQv9GD0LHQu9C40LrQsCDQotCw0YLQsNGA0YHRgtCw0L0iLAogICAgICAgICJhZGRyZXNzQ291bnRyeSI6ICJSVSIKICAgICAgfSwKICAgICAgImdlbyI6IHsKICAgICAgICAiQHR5cGUiOiAiR2VvQ29vcmRpbmF0ZXMiLAogICAgICAgICJsYXRpdHVkZSI6IDU1Ljc4ODcsCiAgICAgICAgImxvbmdpdHVkZSI6IDQ5LjEyMjEKICAgICAgfSwKICAgICAgImFyZWFTZXJ2ZWQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JzQvtGB0LrQstCwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInByaWNlUmFuZ2UiOiAi0L7RgiAxNCA5MDAg4oK9IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1ICjQstGB0ZEg0LLQutC70Y7Rh9C10L3QvikiLAogICAgICAgICAgInByaWNlIjogIjU0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZhciBvbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6bC1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgTUFYVyA9IDEyNDA7CgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBvd25UZXh0KGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgcyA9ICcnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSBzICs9IGVsLmNoaWxkTm9kZXNbaV0ubm9kZVZhbHVlOwogICAgfQogICAgcmV0dXJuIHMucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogIH0KICBmdW5jdGlvbiBhdHRyKGVsLCBhKSB7IHJldHVybiBlbCA_IChlbC5nZXRBdHRyaWJ1dGUoYSkgfHwgJycpIDogJyc7IH0KCiAgLyog0KLQtdC60YHRgiDQtNC70Y8g0YDQsNC30LzQtdGC0LrQuDogPGJyPiDRgdCw0Lwg0L_QviDRgdC10LHQtSDQv9GA0L7QsdC10LvQsCDQvdC1INC00LDRkdGCLCDQuCDCq9C30LDQvdGP0YLQuNC5Ljxicj48YnI-0JzQvtC00YPQu9GM0L3Ri9C5wrsKICAgICDQv9GA0LXQstGA0LDRidCw0LvQvtGB0Ywg0LIgwqvQt9Cw0L3Rj9GC0LjQuS7QnNC-0LTRg9C70YzQvdGL0LnCuyDigJQg0YHQu9C40L_RiNC40LXRgdGPINGB0LvQvtCy0LAg0LIg0L7RgtCy0LXRgtC1INC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQsC4KICAgICDQn9C-0Y3RgtC-0LzRgyDQv9C10YDQtdC90L7RgdGLINC30LDQvNC10L3Rj9C10Lwg0L_RgNC-0LHQtdC70L7QvCDQtNC-INGC0L7Qs9C-LCDQutCw0Log0LHRgNCw0YLRjCDRgtC10LrRgdGCLiAqLwogIGZ1bmN0aW9uIHRleHRXaXRoQnJlYWtzKGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgYyA9IGVsLmNsb25lTm9kZSh0cnVlKTsKICAgIGFsbChjLCAnYnInKS5mb3JFYWNoKGZ1bmN0aW9uIChicikgewogICAgICBici5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSwgYnIpOwogICAgfSk7CiAgICByZXR1cm4gYy50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGRpZ2l0cyhzKSB7IHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKTsgfQogIGZ1bmN0aW9uIG1vbmV5KHMpIHsgcmV0dXJuIGRpZ2l0cyhzKS5yZXBsYWNlKC9cQig_PShcZHszfSkrKD8hXGQpKS9nLCAnICcpOyB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZFRpY2tlcihzcmMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgaXRlbXMgPSBcWyhbXHNcU10qPylcXTsvKTsKICAgIGlmICghbSkgcmV0dXJuIFtdOwogICAgcmV0dXJuIChtWzFdLm1hdGNoKC8nKFteJ10qKScvZykgfHwgW10pLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5zbGljZSgxLCAtMSk7IH0pOwogIH0KCiAgZnVuY3Rpb24gcmVhZEZvcmsoZikgewogICAgcmV0dXJuIHsKICAgICAgZXllYnJvdzogb3duVGV4dChvbmUoZiwgJy5mb3JrLWV5ZWJyb3cnKSksCiAgICAgIGgzOiBodG1sKG9uZShmLCAnaDMnKSksCiAgICAgIHN1YjogdChvbmUoZiwgJy5mb3JrLXN1YicpKSwKICAgICAgY2hpcHM6IGFsbChmLCAnLmZvcmstbW9kZSAuY2hpcCcpLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gb3duVGV4dChjKTsgfSksCiAgICAgIGl0ZW1zOiBhbGwoZiwgJy5mb3JrLWxpc3QgbGknKS5tYXAoZnVuY3Rpb24gKGxpKSB7IHJldHVybiB0KG9uZShsaSwgJ3NwYW46bm90KC5pY29uKScpKTsgfSksCiAgICAgIGZyb206IHQob25lKGYsICcuZnAtZnJvbScpKSwKICAgICAgLyog0YfQuNGB0LvQviDRgNC40YHRg9C10YIg0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YssINCyINC60L7QtNC1INGB0YLQvtC40YIgMCDigJQKICAgICAgICAg0L3QsNGB0YLQvtGP0YnQsNGPINGG0LXQvdCwINC20LjQstGR0YIg0LIgZGF0YS10YXJnZXQgKi8KICAgICAgcHJpY2U6IGF0dHIob25lKGYsICcuZnAtbm93IC5hdi1jb3VudGVyJyksICdkYXRhLXRhcmdldCcpLAogICAgICBvbGRQcmljZTogdChvbmUoZiwgJy5mcC1vbGQnKSksCiAgICAgIG5vdGU6IHQob25lKGYsICcuZnAtbm90ZScpKSwKICAgICAgLyog0LTQvtC_LdC80L7QtNGD0LvRjCDQv9C-0LrQsNC30YvQstCw0LXRgtGB0Y8g0L_RgNGP0LzQviDQsiDQutCw0YDRgtC-0YfQutC1INC60YPRgNGB0LAg4oCUINC10YHRgtGMINC90LUg0YMg0LLRgdC10YUg0YTQvtGA0LzQsNGC0L7QsiAqLwogICAgICBhZGRvbjogb25lKGYsICcuZm9yay1hZGRvbicpID8gewogICAgICAgIGxhYmVsOiB0KG9uZShmLCAnLmZhLWxhYmVsJykpLAogICAgICAgIG5hbWU6IHQob25lKGYsICcuZmEtcm93IGEnKSkgfHwgdChvbmUoZiwgJy5mYS1yb3cnKSksCiAgICAgICAgcHJpY2U6IGF0dHIob25lKGYsICcuZmEtcHJpY2UgLmF2LWNvdW50ZXInKSwgJ2RhdGEtdGFyZ2V0JyksCiAgICAgICAgbm90ZTogdChvbmUoZiwgJy5mYS1ub3RlJykpCiAgICAgIH0gOiBudWxsLAogICAgICBidG46IHQob25lKGYsICcuZm9yay1idG4gc3Bhbjpub3QoLmljb24pJykpLAogICAgICBocmVmOiBhdHRyKG9uZShmLCAnLmZvcmstYnRuJyksICdocmVmJykKICAgIH07CiAgfQoKICBmdW5jdGlvbiByZWFkQ2ZnKHNjb3BlLCBzcmMpIHsKICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuZGlzcGxheSAuaW5uZXInKTsKICAgIHZhciBsYWJlbHMgPSBhbGwoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCcpOwogICAgdmFyIGZvcmtzID0gYWxsKHNjb3BlLCAnLmZvcmsnKTsKICAgIHZhciBhZGRvbiA9IG9uZShzY29wZSwgJy5hZGRvbicpOwoKICAgIHJldHVybiB7CiAgICAgIGhlcm86IHsKICAgICAgICBleWVicm93OiBvd25UZXh0KG9uZShzY29wZSwgJy5leWVicm93JykpLAogICAgICAgIGxpbmUxOiB0KGlubmVyc1swXSksIGxpbmUyOiB0KGlubmVyc1sxXSksCiAgICAgICAgbGluZTM6IGlubmVyc1syXSA_IGh0bWwoaW5uZXJzWzJdKSA6ICcnLAogICAgICAgIGxlZGU6IHQob25lKHNjb3BlLCAnLmxlZGUnKSkKICAgICAgfSwKICAgICAgbGFiZWxzOiBsYWJlbHMubWFwKGZ1bmN0aW9uIChsKSB7CiAgICAgICAgcmV0dXJuIHsgaDI6IHQob25lKGwsICdoMicpKSwgYXNpZGU6IG9uZShsLCAnLnNsLWFzaWRlJykgPyBvd25UZXh0KG9uZShsLCAnLnNsLWFzaWRlJykpIDogJycgfTsKICAgICAgfSksCiAgICAgIHRpY2tlcjogcmVhZFRpY2tlcihzcmMpLAogICAgICBmb3JrczogZm9ya3MubWFwKHJlYWRGb3JrKSwKICAgICAgZmVhdHVyZTogewogICAgICAgIGltZzogYXR0cihvbmUoc2NvcGUsICcuZmVhdHVyZS1tZWRpYSBpbWcnKSwgJ3NyYycpLAogICAgICAgIGFsdDogYXR0cihvbmUoc2NvcGUsICcuZmVhdHVyZS1tZWRpYSBpbWcnKSwgJ2FsdCcpLAogICAgICAgIGNhcDogdChvbmUoc2NvcGUsICcuZmVhdHVyZS1jYXAgc3BhbicpKQogICAgICB9LAogICAgICBtZXRob2Q6IHsKICAgICAgICBsYWJlbDogdChvbmUoc2NvcGUsICcuc3RydWN0dXJlLXNlY3Rpb24gLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5zdHJ1Y3R1cmUtc2VjdGlvbiAuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzY29wZSwgJy5hZHYtaXRlbScpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgICAgcmV0dXJuIHsgaWNvbjogdChvbmUoYSwgJy5pY29uJykpLCBoMzogdChvbmUoYSwgJ2gzJykpLCBwOiB0KG9uZShhLCAncCcpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGFib3V0OiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLmFib3V0LXRleHQgLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5hYm91dC10ZXh0IC5oMicpKSwKICAgICAgICBjaGVja3M6IGFsbChzY29wZSwgJy5jaGVjay1pdGVtJykubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiB0KG9uZShjLCAnc3Bhbjpub3QoLmljb24pJykpOyB9KSwKICAgICAgICB0YWdzOiBhbGwoc2NvcGUsICcudGFnJykubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB0KHgpOyB9KSwKICAgICAgICBzdGF0czogYWxsKHNjb3BlLCAnLnN0YXRzID4gZGl2JykubWFwKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICB2YXIgbiA9IG9uZShkLCAnLnN0YXQtbnVtJyk7CiAgICAgICAgICByZXR1cm4geyB0YXJnZXQ6IGF0dHIobiwgJ2RhdGEtdGFyZ2V0JyksIHZhbHVlOiBhdHRyKG4sICdkYXRhLXRhcmdldCcpID8gJycgOiB0KG4pLCBsYWJlbDogdChvbmUoZCwgJy5zdGF0LWxhYmVsJykpIH07CiAgICAgICAgfSksCiAgICAgICAgdGFnOiB0KG9uZShzY29wZSwgJy5hYm91dC10YWcnKSksCiAgICAgICAgaW1nOiBhdHRyKG9uZShzY29wZSwgJy5hYm91dC1tZWRpYSBpbWcnKSwgJ3NyYycpLAogICAgICAgIGFsdDogYXR0cihvbmUoc2NvcGUsICcuYWJvdXQtbWVkaWEgaW1nJyksICdhbHQnKQogICAgICB9LAogICAgICBwcm9ncmFtOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLm1vZHVsZXMtc2VjdGlvbiAubGFiZWwnKSksCiAgICAgICAgaDI6IGh0bWwob25lKHNjb3BlLCAnLm1vZHVsZXMtc2VjdGlvbiAuaDInKSkKICAgICAgfSwKICAgICAgcm9hZG1hcDogYWxsKHNjb3BlLCAnLnJtLW5vZGUnKS5tYXAoZnVuY3Rpb24gKG4pIHsKICAgICAgICByZXR1cm4geyB0aXA6IHQob25lKG4sICcucm0tbm9kZS10aXAnKSksIG51bTogdChvbmUobiwgJy5ybS1ub2RlLW51bScpKSwgaHJlZjogYXR0cihuLCAnaHJlZicpIH07CiAgICAgIH0pLAogICAgICBtb2R1bGVzOiBhbGwoc2NvcGUsICcubW9kLWNhcmQnKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICB2YXIgZm9vdCA9IGFsbChjLCAnLm1vZC1mb290ID4gc3BhbicpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBudW06IHQob25lKGMsICcubW9kLW51bScpKSwgdGFnOiB0KG9uZShjLCAnLm1vZC10YWcnKSksCiAgICAgICAgICBoMzogdChvbmUoYywgJ2gzJykpLCBwOiB0KG9uZShjLCAncCcpKSwKICAgICAgICAgIHRhc2tzOiBmb290WzBdID8gb3duVGV4dChmb290WzBdKSA6ICcnLAogICAgICAgICAgdG9vbDogZm9vdFsxXSA_IHQoZm9vdFsxXSkgOiAnJwogICAgICAgIH07CiAgICAgIH0pLAogICAgICBhZGRvbjogewogICAgICAgIGNoaXA6IG93blRleHQob25lKGFkZG9uLCAnLmFkZG9uLWNoaXAnKSksCiAgICAgICAgaDM6IGh0bWwob25lKGFkZG9uLCAnaDMnKSksCiAgICAgICAgc3ViOiBodG1sKG9uZShhZGRvbiwgJy5hZGRvbi1zdWInKSksCiAgICAgICAgaXRlbXM6IGFsbChhZGRvbiwgJy5hZGRvbi1saXN0IGxpJykubWFwKGZ1bmN0aW9uIChsaSkgeyByZXR1cm4gdChvbmUobGksICdzcGFuOm5vdCguaWNvbiknKSk7IH0pLAogICAgICAgIG1ldGE6IGFsbChhZGRvbiwgJy5hZGRvbi1tZXRhIC5jaGlwJykubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBvd25UZXh0KGMpOyB9KSwKICAgICAgICBvZmZlcnM6IGFsbChhZGRvbiwgJy5hZGRvbi1vZmZlcicpLm1hcChmdW5jdGlvbiAobykgewogICAgICAgICAgcmV0dXJuIHsgd2hvOiB0KG9uZShvLCAnLmFvLXdobycpKSwgdGV4dDogdChvbmUobywgJy5hby10ZXh0JykpIH07CiAgICAgICAgfSksCiAgICAgICAgYnRuOiB0KG9uZShhZGRvbiwgJy5hZGRvbi1idG4gc3Bhbjpub3QoLmljb24pJykpLAogICAgICAgIGhyZWY6IGF0dHIob25lKGFkZG9uLCAnLmFkZG9uLWJ0bicpLCAnaHJlZicpCiAgICAgIH0sCiAgICAgIGZhcTogYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgIHJldHVybiB7IHE6IHQob25lKGl0LCAnLmZhcS1xLXRleHQnKSksIGE6IGh0bWwob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH07CiAgICAgIH0pLAogICAgICBjdGE6IHsKICAgICAgICBoMjogaHRtbChvbmUoc2NvcGUsICcuY3RhIC5oMicpKSwKICAgICAgICBidXR0b25zOiBhbGwoc2NvcGUsICcuY3RhIC5idG4nKS5tYXAoZnVuY3Rpb24gKGIpIHsKICAgICAgICAgIHJldHVybiB7IHRleHQ6IHQob25lKGIsICcuYnRuLWxhYmVsIHNwYW4nKSksIGhyZWY6IGF0dHIoYiwgJ2hyZWYnKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGZvb3ROb3RlOiBodG1sKG9uZShzY29wZSwgJy5mb290LW5vdGUnKSksCiAgICAgIHNlbzogeyBwYWdlTmFtZTogJycsIHBhZ2VEZXNjcmlwdGlvbjogJycsIGNvdXJzZU5hbWU6ICcnLCBjb3Vyc2VEZXNjcmlwdGlvbjogJycgfQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHJlYWRMZChkb2MsIGNmZykgewogICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIChvWydAZ3JhcGgnXSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnV2ViUGFnZScpIHsKICAgICAgICAgIGNmZy5zZW8ucGFnZU5hbWUgPSBuLm5hbWUgfHwgJyc7IGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdDb3Vyc2UnKSB7CiAgICAgICAgICBjZmcuc2VvLmNvdXJzZU5hbWUgPSBuLm5hbWUgfHwgJyc7IGNmZy5zZW8uY291cnNlRGVzY3JpcHRpb24gPSBuLmRlc2NyaXB0aW9uIHx8ICcnOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINGB0LHQvtGA0LrQsCDRgdC-0L7QsdGJ0LjRgiAqLyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tINC_0LDQvdC10LvRjCAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2emwtcm9vdCwjYXZ6bC1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6bC1yb290IGlucHV0LCNhdnpsLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpsLXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6bC1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnpsLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbigxMDAwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpsLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emwtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2emwtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6bC1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1mIGlucHV0LCNhdnpsLXJvb3QgLmF2emwtZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnpsLXJvb3QgLmF2emwtcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2emwtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6bC1yb290IC5hdnpsLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtaW1nPmltZ3t3aWR0aDo2OHB4O2hlaWdodDo4NHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtaW1nIC5ne2ZsZXg6MTttaW4td2lkdGg6MH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtaGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2emwtb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2emwtbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2emwtZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpsLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emwtbXNnJyk7IGlmIChlKSBlLnRleHRDb250ZW50ID0gczsgfQoKICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzdGFydCgpIHsKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6bC13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6bC1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC-0LHRg9GH0LXQvdC40Y88L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIiBpZD0iYXZ6bC1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpsLWJvZHkiPicgKwogICAgICAnPHAgY2xhc3M9ImF2emwtaGludCI-0JLRgdC1INGG0LXQvdGLINGB0YLRgNCw0L3QuNGG0Ysg0LbQuNCy0YPRgiDQsiDQtNCy0YPRhSDQutCw0YDRgtC-0YfQutCw0YUg0L3QsNCy0LXRgNGF0YM6INC40L3RgtC10L3RgdC40LIsINC60YPRgNGBICcgKwogICAgICAn0Lgg0LTQvtC_LdC80L7QtNGD0LvRjCDQstC90YPRgtGA0Lgg0LrQsNGA0YLQvtGH0LrQuCDQutGD0YDRgdCwLiDQntGC0YLRg9C00LAg0L7QvdC4INGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyLiAnICsKICAgICAgJ9CV0YHQu9C4INGG0LXQvdCwINGD0L_QvtC80Y_QvdGD0YLQsCDQtdGJ0ZEg0Lgg0LLQvdGD0YLRgNC4INC-0YLQstC10YLQsCDQvdCwINCy0L7Qv9GA0L7RgSwg0L_QsNC90LXQu9GMINC_0YDQtdC00YPQv9GA0LXQtNC40YIuPC9wPic7CgogICAgLyog0KTQntCg0JzQkNCi0Ksg0Jgg0KbQldCd0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpsLXNlYyIgb3Blbj48c3VtbWFyeT7QpNC-0YDQvNCw0YLRiyDQvtCx0YPRh9C10L3QuNGPINC4INGG0LXQvdGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emwtaW4iPic7CiAgICBjZmcuZm9ya3MuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7QpNC-0YDQvNCw0YIgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YHQstC10YDRhdGDJywgJ2ZvcmtzLicgKyBpICsgJy5leWVicm93JywgZi5leWVicm93KSArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7ZW0mZ3Q7KScsICdmb3Jrcy4nICsgaSArICcuaDMnLCBmLmgzKSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC30LDQs9C-0LvQvtCy0L7QuicsICdmb3Jrcy4nICsgaSArICcuc3ViJywgZi5zdWIsICdhcmVhJyk7CiAgICAgIGYuY2hpcHMuZm9yRWFjaChmdW5jdGlvbiAoYywgaykgeyBoICs9IGZpZWxkKCfQnNC10YLQutCwICcgKyAoayArIDEpLCAnZm9ya3MuJyArIGkgKyAnLmNoaXBzLicgKyBrLCBjKTsgfSk7CiAgICAgIGYuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGspIHsgaCArPSBmaWVsZCgn0J_Rg9C90LrRgiAnICsgKGsgKyAxKSwgJ2ZvcmtzLicgKyBpICsgJy5pdGVtcy4nICsgaywgaXQpOyB9KTsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0L3QsNC0INGG0LXQvdC-0LknLCAnZm9ya3MuJyArIGkgKyAnLmZyb20nLCBmLmZyb20pICsKICAgICAgICBmaWVsZCgn0KbQtdC90LAsINGC0L7Qu9GM0LrQviDRhtC40YTRgNGLJywgJ2ZvcmtzLicgKyBpICsgJy5wcmljZScsIGYucHJpY2UpICsgJzwvZGl2PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQodGC0LDRgNCw0Y8g0YbQtdC90LAgKNC_0YPRgdGC0L4g4oCUINC10YHQu9C4INC90LXRgiknLCAnZm9ya3MuJyArIGkgKyAnLm9sZFByaWNlJywgZi5vbGRQcmljZSkgKwogICAgICAgIGZpZWxkKCfQn9GA0LjQvNC10YfQsNC90LjQtSDQv9C-0LQg0YbQtdC90L7QuScsICdmb3Jrcy4nICsgaSArICcubm90ZScsIGYubm90ZSkgKyAnPC9kaXY-JzsKICAgICAgaWYgKGYuYWRkb24pIHsKICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7QlNC-0L8t0LzQvtC00YPQu9GMINCyINGN0YLQvtC5INC60LDRgNGC0L7Rh9C60LU8L2g0PicgKwogICAgICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2ZvcmtzLicgKyBpICsgJy5hZGRvbi5sYWJlbCcsIGYuYWRkb24ubGFiZWwpICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ2ZvcmtzLicgKyBpICsgJy5hZGRvbi5uYW1lJywgZi5hZGRvbi5uYW1lKSArCiAgICAgICAgICBmaWVsZCgn0KbQtdC90LAsINGC0L7Qu9GM0LrQviDRhtC40YTRgNGLJywgJ2ZvcmtzLicgKyBpICsgJy5hZGRvbi5wcmljZScsIGYuYWRkb24ucHJpY2UpICsgJzwvZGl2PicgKwogICAgICAgICAgZmllbGQoJ9Cf0L7Rj9GB0L3QtdC90LjQtScsICdmb3Jrcy4nICsgaSArICcuYWRkb24ubm90ZScsIGYuYWRkb24ubm90ZSkgKyAnPC9kaXY-JzsKICAgICAgfQogICAgICBoICs9CiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsgZmllbGQoJ9Ca0L3QvtC_0LrQsCDigJQg0YLQtdC60YHRgicsICdmb3Jrcy4nICsgaSArICcuYnRuJywgZi5idG4pICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwIOKAlCDQsNC00YDQtdGBJywgJ2ZvcmtzLicgKyBpICsgJy5ocmVmJywgZi5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQlNCe0J8t0JzQntCU0KPQm9CsICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCU0L7Qvy3QvNC-0LTRg9C70YwgRGFWaW5jaTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpsLWluIj4nICsKICAgICAgZmllbGQoJ9Cf0LvQsNGI0LrQsCcsICdhZGRvbi5jaGlwJywgY2ZnLmFkZG9uLmNoaXApICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7ZW0mZ3Q7KScsICdhZGRvbi5oMycsIGNmZy5hZGRvbi5oMykgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSAo0LzQvtC20L3QviBIVE1MKScsICdhZGRvbi5zdWInLCBjZmcuYWRkb24uc3ViLCAnYXJlYScpOwogICAgY2ZnLmFkZG9uLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0LCBrKSB7IGggKz0gZmllbGQoJ9Cf0YPQvdC60YIgJyArIChrICsgMSksICdhZGRvbi5pdGVtcy4nICsgaywgaXQpOyB9KTsKICAgIGNmZy5hZGRvbi5tZXRhLmZvckVhY2goZnVuY3Rpb24gKG0sIGspIHsgaCArPSBmaWVsZCgn0JzQtdGC0LrQsCAnICsgKGsgKyAxKSwgJ2FkZG9uLm1ldGEuJyArIGssIG0pOyB9KTsKICAgIGNmZy5hZGRvbi5vZmZlcnMuZm9yRWFjaChmdW5jdGlvbiAobywgaykgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7Qn9C-0Y_RgdC90LXQvdC40LUgJyArIChrICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnYWRkb24ub2ZmZXJzLicgKyBrICsgJy53aG8nLCBvLndobykgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2FkZG9uLm9mZmVycy4nICsgayArICcudGV4dCcsIG8udGV4dCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQmtC90L7Qv9C60LAg4oCUINGC0LXQutGB0YInLCAnYWRkb24uYnRuJywgY2ZnLmFkZG9uLmJ0bikgKwogICAgICBmaWVsZCgn0JrQvdC-0L_QutCwIOKAlCDQsNC00YDQtdGBJywgJ2FkZG9uLmhyZWYnLCBjZmcuYWRkb24uaHJlZikgKyAnPC9kaXY-PC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JzQntCU0KPQm9CYICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCc0L7QtNGD0LvQuCDQutGD0YDRgdCwICgnICsgY2ZnLm1vZHVsZXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bC1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bC1oaW50Ij7Ql9Cw0LPQvtC70L7QstC60Lgg0Lgg0L7Qv9C40YHQsNC90LjRjyDQvNC-0LTRg9C70LXQuSDRg9GF0L7QtNGP0YIg0Lgg0LIg0YDQsNC30LzQtdGC0LrRgyDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4gJyArCiAgICAgICfQp9C40YHQu9C-INC30LDQtNCw0L3QuNC5INC_0LDQvdC10LvRjCDRgdC60LvQsNC00YvQstCw0LXRgiDRgdCw0LzQsCDQuCDRgdCy0LXRgNGP0LXRgiDRgdC-INGB0YfRkdGC0YfQuNC60L7QvCDQsiDQsdC70L7QutC1IMKr0J_QvtGH0LXQvNGDINC80L7QtNGD0LvRjNC90L7Cuy48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQvdCw0LQg0LfQsNCz0L7Qu9C-0LLQutC-0LwnLCAncHJvZ3JhbS5sYWJlbCcsIGNmZy5wcm9ncmFtLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAgKNC80L7QttC90L4gJmx0O2JyJmd0OywgJmx0O2VtJmd0OyknLCAncHJvZ3JhbS5oMicsIGNmZy5wcm9ncmFtLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLm1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobSwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7QnNC-0LTRg9C70YwgJyArIGVzYyhtLm51bSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0J3QvtC80LXRgCcsICdtb2R1bGVzLicgKyBpICsgJy5udW0nLCBtLm51bSkgKwogICAgICAgIGZpZWxkKCfQnNC10YLQutCwJywgJ21vZHVsZXMuJyArIGkgKyAnLnRhZycsIG0udGFnKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdtb2R1bGVzLicgKyBpICsgJy5oMycsIG0uaDMpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtScsICdtb2R1bGVzLicgKyBpICsgJy5wJywgbS5wLCAnYXJlYScpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0JfQsNC00LDQvdC40Y8nLCAnbW9kdWxlcy4nICsgaSArICcudGFza3MnLCBtLnRhc2tzKSArCiAgICAgICAgZmllbGQoJ9CY0L3RgdGC0YDRg9C80LXQvdGCJywgJ21vZHVsZXMuJyArIGkgKyAnLnRvb2wnLCBtLnRvb2wpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCU0J7QoNCe0JbQmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCU0L7RgNC-0LbQutCwINC90LDQtCDQvNC-0LTRg9C70Y_QvNC4ICgnICsgY2ZnLnJvYWRtYXAubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bC1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bC1oaW50Ij7Qn9C-0LTQv9C40YHRjCDQstGB0L_Qu9GL0LLQsNC10YIg0L_RgNC4INC90LDQstC10LTQtdC90LjQuC4g0JDQtNGA0LXRgSDQtNC-0LvQttC10L0g0LLQtdGB0YLQuCDQvdCwINC90YPQttC90YPRjiDQutCw0YDRgtC-0YfQutGDLjwvcD4nOwogICAgY2ZnLnJvYWRtYXAuZm9yRWFjaChmdW5jdGlvbiAobiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQotC-0YfQutCwICcgKyAoaSArIDEpICsgJyDigJQg0L_QvtC00L_QuNGB0YwnLCAncm9hZG1hcC4nICsgaSArICcudGlwJywgbi50aXApICsKICAgICAgICBmaWVsZCgn0J3QvtC80LXRgCcsICdyb2FkbWFwLicgKyBpICsgJy5udW0nLCBuLm51bSkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KLQldCa0KHQotCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LAg0Lgg0YLQtdC60YHRgtGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emwtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uZXllYnJvdycsIGNmZy5oZXJvLmV5ZWJyb3cpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDigJQg0YHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMicsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDMgKNC80L7QttC90L4gJmx0O2VtJmd0OyknLCAnaGVyby5saW5lMycsIGNmZy5oZXJvLmxpbmUzKSArCiAgICAgIGZpZWxkKCfQktGB0YLRg9C_0LjRgtC10LvRjNC90YvQuSDRgtC10LrRgdGCJywgJ2hlcm8ubGVkZScsIGNmZy5oZXJvLmxlZGUsICdhcmVhJykgKwogICAgICBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwICjRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOKScsICd0aWNrZXJMaW5lJywgY2ZnLnRpY2tlci5qb2luKCcsICcpLCAnYXJlYScpOwogICAgY2ZnLmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uIChsLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwICcgKyAoaSArIDEpLCAnbGFiZWxzLicgKyBpICsgJy5oMicsIGwuaDIpICsKICAgICAgICAobC5hc2lkZSA_IGZpZWxkKCfQn9C-0LzQtdGC0LrQsCDRgdC_0YDQsNCy0LAnLCAnbGFiZWxzLicgKyBpICsgJy5hc2lkZScsIGwuYXNpZGUpIDogJzxkaXY-PC9kaXY-JykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDssICZsdDtlbSZndDspJywgJ2N0YS5oMicsIGNmZy5jdGEuaDIpOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0YLQtdC60YHRgicsICdjdGEuYnV0dG9ucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnIOKAlCDQsNC00YDQtdGBJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy5ocmVmJywgYi5ocmVmKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQodC90L7RgdC60LAg0LLQvdC40LfRgyAo0LzQvtC20L3QviBIVE1MKScsICdmb290Tm90ZScsIGNmZy5mb290Tm90ZSwgJ2FyZWEnKSArICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQnNCV0KLQntCUINCYINCf0KDQmNCd0KbQmNCfICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCc0LXRgtC-0LQg0Lgg0L_RgNC40L3RhtC40L88L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bC1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdtZXRob2QubGFiZWwnLCBjZmcubWV0aG9kLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OywgJmx0O2VtJmd0OyknLCAnbWV0aG9kLmgyJywgY2ZnLm1ldGhvZC5oMikgKyAnPC9kaXY-JzsKICAgIGNmZy5tZXRob2QuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7Qn9GD0L3QutGCICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdtZXRob2QuaXRlbXMuJyArIGkgKyAnLmgzJywgYS5oMykgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ21ldGhvZC5pdGVtcy4nICsgaSArICcucCcsIGEucCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdhYm91dC5sYWJlbCcsIGNmZy5hYm91dC5sYWJlbCkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDssICZsdDtlbSZndDspJywgJ2Fib3V0LmgyJywgY2ZnLmFib3V0LmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmFib3V0LmNoZWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7IGggKz0gZmllbGQoJ9Cf0YPQvdC60YIgJyArIChpICsgMSksICdhYm91dC5jaGVja3MuJyArIGksIGMpOyB9KTsKICAgIGNmZy5hYm91dC50YWdzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHsgaCArPSBmaWVsZCgn0JzQtdGC0LrQsCAnICsgKGkgKyAxKSwgJ2Fib3V0LnRhZ3MuJyArIGksIHgpOyB9KTsKICAgIGNmZy5hYm91dC5zdGF0cy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsKICAgICAgICAocy50YXJnZXQgIT09ICcnID8gZmllbGQoJ9Cn0LjRgdC70L4gJyArIChpICsgMSksICdhYm91dC5zdGF0cy4nICsgaSArICcudGFyZ2V0Jywgcy50YXJnZXQpCiAgICAgICAgICA6IGZpZWxkKCfQl9C90LDRh9C10L3QuNC1ICcgKyAoaSArIDEpLCAnYWJvdXQuc3RhdHMuJyArIGkgKyAnLnZhbHVlJywgcy52YWx1ZSkpICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwnLCAnYWJvdXQuc3RhdHMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JrQkNCg0KLQmNCd0JrQmCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emwtc2VjIj48c3VtbWFyeT7QpNC-0YLQvtCz0YDQsNGE0LjQuDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpsLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emwtaW1nIj48aW1nIGRhdGEtcHJldj0iZmVhdHVyZS5pbWciIHNyYz0iJyArIGVzYyhjZmcuZmVhdHVyZS5pbWcpICsgJyIgYWx0PSIiPicgKwogICAgICAnPGRpdiBjbGFzcz0iZyI-JyArIGZpZWxkKCfQqNC40YDQvtC60LjQuSDQutCw0LTRgCcsICdmZWF0dXJlLmltZycsIGNmZy5mZWF0dXJlLmltZykgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIiBkYXRhLWNob29zZT0iZmVhdHVyZS5pbWciIHN0eWxlPSJwYWRkaW5nOjRweCA5cHg7Zm9udC1zaXplOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7QktGL0LHRgNCw0YLRjCDQuNC3INCw0LvRjNCx0L7QvNCwPC9idXR0b24-JyArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC60LDQtNGA0LAgKGFsdCknLCAnZmVhdHVyZS5hbHQnLCBjZmcuZmVhdHVyZS5hbHQpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC90LAg0LrQsNC00YDQtScsICdmZWF0dXJlLmNhcCcsIGNmZy5mZWF0dXJlLmNhcCkgKyAnPC9kaXY-PC9kaXY-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLWltZyI-PGltZyBkYXRhLXByZXY9ImFib3V0LmltZyIgc3JjPSInICsgZXNjKGNmZy5hYm91dC5pbWcpICsgJyIgYWx0PSIiPicgKwogICAgICAnPGRpdiBjbGFzcz0iZyI-JyArIGZpZWxkKCfQmtCw0LTRgCDQsiDQsdC70L7QutC1IMKr0J_QvtGH0LXQvNGDINC80L7QtNGD0LvRjNC90L7CuycsICdhYm91dC5pbWcnLCBjZmcuYWJvdXQuaW1nKSArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpsLWIiIGRhdGEtY2hvb3NlPSJhYm91dC5pbWciIHN0eWxlPSJwYWRkaW5nOjRweCA5cHg7Zm9udC1zaXplOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7QktGL0LHRgNCw0YLRjCDQuNC3INCw0LvRjNCx0L7QvNCwPC9idXR0b24-JyArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC60LDQtNGA0LAgKGFsdCknLCAnYWJvdXQuYWx0JywgY2ZnLmFib3V0LmFsdCkgKwogICAgICBmaWVsZCgn0JzQtdGC0LrQsCDQvdCwINC60LDQtNGA0LUnLCAnYWJvdXQudGFnJywgY2ZnLmFib3V0LnRhZykgKyAnPC9kaXY-PC9kaXY-JyArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQktCe0J_QoNCe0KHQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emwtc2VjIj48c3VtbWFyeT7QktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0YsgKCcgKyBjZmcuZmFxLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emwtaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emwtaGludCI-0J7RgtCy0LXRgiDQvtC00LjQvTog0L7QvSDQttC1INGD0YXQvtC00LjRgiDQsiDRgNCw0LfQvNC10YLQutGDINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvi4gJyArCiAgICAgICfQotCw0Log0YLRgNC10LHRg9C10YIgR29vZ2xlIOKAlCDQv9C10YDQtdGB0LrQsNC3INGB0LLQvtC40LzQuCDRgdC70L7QstCw0LzQuCDQvdC1INC30LDRgdGH0LjRgtGL0LLQsNC10YLRgdGPLjwvcD4nOwogICAgY2ZnLmZhcS5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emwtY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQktC-0L_RgNC-0YEnLCAnZmFxLicgKyBpICsgJy5xJywgZi5xKSArCiAgICAgICAgZmllbGQoJ9Ce0YLQstC10YIgKNC80L7QttC90L4gSFRNTCknLCAnZmFxLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCg0JDQl9Cc0JXQotCa0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpsLXNlYyI-PHN1bW1hcnk-0KDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpsLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpsLWhpbnQiPtCt0YLQviDQvdC10LLQuNC00LjQvNCw0Y8g0YfQsNGB0YLRjCDRgdGC0YDQsNC90LjRhtGLLiDQptC10L3RiyDQuCDQv9GA0L7Qs9GA0LDQvNC80LAg0L_QvtC00YHRgtCw0LLQu9GP0Y7RgtGB0Y8gJyArCiAgICAgICfRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0YHQsNC80Lgg4oCUINC30LTQtdGB0Ywg0YLQvtC70YzQutC-INC90LDQt9Cy0LDQvdC40Y8g0Lgg0L7Qv9C40YHQsNC90LjRjy48L3A-JyArCiAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLnBhZ2VOYW1lJywgY2ZnLnNlby5wYWdlTmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlRGVzY3JpcHRpb24nLCBjZmcuc2VvLnBhZ2VEZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INC60YPRgNGB0LAnLCAnc2VvLmNvdXJzZU5hbWUnLCBjZmcuc2VvLmNvdXJzZU5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0LrRg9GA0YHQsCcsICdzZW8uY291cnNlRGVzY3JpcHRpb24nLCBjZmcuc2VvLmNvdXJzZURlc2NyaXB0aW9uLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2emwtZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpsLWIgcCIgaWQ9ImF2emwtYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpsLWIiIGlkPSJhdnpsLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2emwtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2emwtb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6bC1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOwogICAgfSk7CgogICAgLyog0LLRi9Cx0L7RgCDQutCw0LTRgNCwINC40Lcg0LDQu9GM0LHQvtC80LAgKi8KICAgIHZhciBzaG90Q2FjaGUgPSB7fTsKICAgIGZ1bmN0aW9uIGFicyh1KSB7CiAgICAgIGlmICghdSkgcmV0dXJuICcnOwogICAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgICBpZiAodS5pbmRleE9mKCcvJykgPT09IDApIHJldHVybiBsb2NhdGlvbi5vcmlnaW4gKyB1OwogICAgICByZXR1cm4gdTsKICAgIH0KICAgIGZ1bmN0aW9uIGZyb21TcmNzZXQoc2V0LCBzcmMpIHsKICAgICAgaWYgKCFzZXQpIHsgdmFyIHUgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdSwgc21hbGw6IHUgfTsgfQogICAgICB2YXIgbGlzdCA9IHNldC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgIHZhciBwID0geC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHJldHVybiB7IHU6IGFicyhwWzBdKSwgdzogcGFyc2VJbnQocFsxXSwgMTApIHx8IDAgfTsKICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLnU7IH0pOwogICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7IHZhciB2ID0gYWJzKHNyYyk7IHJldHVybiB7IGZ1bGw6IHYsIHNtYWxsOiB2IH07IH0KICAgICAgdmFyIGJpZyA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLncgLSBhLnc7IH0pOwogICAgICB2YXIgc21hbGwgPSBsaXN0LnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS53IC0gYi53OyB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBmdWxsOiAoYmlnLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53IDw9IE1BWFc7IH0pWzBdIHx8IGJpZ1tiaWcubGVuZ3RoIC0gMV0pLnUsCiAgICAgICAgc21hbGw6IChzbWFsbC5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudyA-PSAyODA7IH0pWzBdIHx8IHNtYWxsWzBdKS51CiAgICAgIH07CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNob29zZScpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgcGFuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6OCU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7JyArCiAgICAgICAgJ3BhZGRpbmc6MTZweDtvdmVyZmxvdzphdXRvO2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuNCknOwogICAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7QkNC00YDQtdGBINGB0YLRgNCw0L3QuNGG0Ysg0YEg0LrQsNC00YDQsNC80Lg6PC9wPicgKwogICAgICAgICc8aW5wdXQgaWQ9ImF2emwtc3JjIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweCIgdmFsdWU9IicgKwogICAgICAgIGVzYyhzaG90Q2FjaGUuX19sYXN0IHx8ICdodHRwczovL2F2YW56YXRvLnJ1L3BvcnRmb2xpbycpICsgJyI-JyArCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW46MTBweCAwIj48YnV0dG9uIGNsYXNzPSJhdnpsLWIgcCIgaWQ9ImF2emwtbG9hZCI-0J_QvtC60LDQt9Cw0YLRjCDQutCw0LTRgNGLPC9idXR0b24-ICcgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpsLWIiIGlkPSJhdnpsLWNhbmNlbCI-0J7RgtC80LXQvdCwPC9idXR0b24-PC9wPicgKwogICAgICAgICc8ZGl2IGlkPSJhdnpsLWdyaWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE0MHB4LDFmcikpO2dhcDoxMHB4Ij48L2Rpdj4nOwogICAgICByb290LmFwcGVuZENoaWxkKHBhbmUpOwogICAgICBwYW5lLnF1ZXJ5U2VsZWN0b3IoJyNhdnpsLWNhbmNlbCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHBhbmUucmVtb3ZlKCk7IH07CiAgICAgIHBhbmUucXVlcnlTZWxlY3RvcignI2F2emwtbG9hZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHVybCA9IHBhbmUucXVlcnlTZWxlY3RvcignI2F2emwtc3JjJykudmFsdWUudHJpbSgpOwogICAgICAgIGlmICghdXJsKSByZXR1cm47CiAgICAgICAgc2hvdENhY2hlLl9fbGFzdCA9IHVybDsKICAgICAgICB2YXIgaGVhZCA9IHBhbmUucXVlcnlTZWxlY3RvcigncCcpOwogICAgICAgIGhlYWQudGV4dENvbnRlbnQgPSAn0JfQsNCz0YDRg9C20LDRjiAnICsgdXJsICsgJ-KApic7CiAgICAgICAgZmV0Y2godXJsICsgKHVybC5pbmRleE9mKCc_JykgPiAtMSA_ICcmJyA6ICc_JykgKyAndD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pCiAgICAgICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgICAgICB2YXIgc2VlbiA9IHt9LCBvdXQgPSBbXTsKICAgICAgICAgICAgYWxsKGRvYywgJ2ltZycpLmZvckVhY2goZnVuY3Rpb24gKGltKSB7CiAgICAgICAgICAgICAgdmFyIHNldCA9IGltLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyY3NldCcpIHx8ICcnOwogICAgICAgICAgICAgIHZhciBzID0gaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCBpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgfHwgJyc7CiAgICAgICAgICAgICAgaWYgKHNldC5pbmRleE9mKCdpLndmb2xpby5ydScpIDwgMCAmJiBzLmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwKSByZXR1cm47CiAgICAgICAgICAgICAgdmFyIHBhaXIgPSBmcm9tU3Jjc2V0KHNldCwgcyk7CiAgICAgICAgICAgICAgaWYgKCFwYWlyLmZ1bGwgfHwgc2VlbltwYWlyLmZ1bGxdKSByZXR1cm47CiAgICAgICAgICAgICAgc2VlbltwYWlyLmZ1bGxdID0gMTsgb3V0LnB1c2gocGFpcik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgZ3JpZCA9IHBhbmUucXVlcnlTZWxlY3RvcignI2F2emwtZ3JpZCcpOwogICAgICAgICAgICBpZiAoIW91dC5sZW5ndGgpIHsgaGVhZC50ZXh0Q29udGVudCA9ICfQmtCw0LTRgNC-0LIg0L3QtSDQvdCw0YjQu9C-0YHRjC4nOyByZXR1cm47IH0KICAgICAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQktGL0LHQtdGA0LjRgtC1INC60LDQtNGAICgnICsgb3V0Lmxlbmd0aCArICcpJzsKICAgICAgICAgICAgZ3JpZC5zdHlsZS5kaXNwbGF5ID0gJ2dyaWQnOwogICAgICAgICAgICBvdXQuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgICAgICB2YXIgaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICAgICAgICBpbS5zcmMgPSBpdC5zbWFsbDsgaW0ubG9hZGluZyA9ICdsYXp5JzsKICAgICAgICAgICAgICBpbS5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOjEwMCU7aGVpZ2h0OjEyMHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo4cHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jayc7CiAgICAgICAgICAgICAgaW0ub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBpbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0iJyArIHAgKyAnIl0nKTsKICAgICAgICAgICAgICAgIGlmIChpbnApIGlucC52YWx1ZSA9IGl0LmZ1bGw7CiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgICAgICAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGl0LmZ1bGw7CiAgICAgICAgICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgZ3JpZC5hcHBlbmRDaGlsZChpbSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikgeyBoZWFkLnRleHRDb250ZW50ID0gJ9Cd0LUg0L7RgtC60YDRi9C70L7RgdGMOiAnICsgZXJyLm1lc3NhZ2U7IH0pOwogICAgICB9OwogICAgfSk7CgogICAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyksIG8gPSBvYmosIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgICB9CiAgICBmdW5jdGlvbiBjb2xsZWN0KCkgewogICAgICB2YXIgZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgIHZhciBwID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgICBpZiAocCA9PT0gJ3RpY2tlckxpbmUnKSB7CiAgICAgICAgICBkLnRpY2tlciA9IGVsLnZhbHVlLnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnRyaW0oKTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzZXRQYXRoKGQsIHAsIGVsLnZhbHVlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB0ZXh0cy5wdXNoKGVsLmNoaWxkTm9kZXNbaV0pOwogICAgICB9CiAgICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgICAgdmFyIG1haW4gPSBudWxsOwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgICB9CiAgICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICAgIHZhciBwcmUgPSAocmF3Lm1hdGNoKC9eXHMqLykgfHwgWycnXSlbMF07CiAgICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgICBtYWluLm5vZGVWYWx1ZSA9IHByZSArIHYgKyBwb3N0OwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICAgIHRleHRzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dHNbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC5pbm5lckhUTUwgPSB2OyB9CiAgICAvKiDRgdGH0ZHRgtGH0LjQujog0YfQuNGB0LvQviDRgNC40YHRg9C10YIg0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YssINC90LDQvCDQstCw0LbQtdC9INGC0L7Qu9GM0LrQviBkYXRhLXRhcmdldCAqLwogICAgZnVuY3Rpb24gc2V0Q291bnRlcihlbCwgdikgeyBpZiAoZWwgJiYgdikgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcsIGRpZ2l0cyh2KSk7IH0KCiAgICBmdW5jdGlvbiB3cml0ZUFsbChzY29wZSwgZCkgewogICAgICB2YXIgaW5uZXJzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgICBpZiAoaW5uZXJzWzBdKSBzZXRUZXh0KGlubmVyc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgICAgaWYgKGlubmVyc1sxXSkgc2V0VGV4dChpbm5lcnNbMV0sIGQuaGVyby5saW5lMik7CiAgICAgIGlmIChpbm5lcnNbMl0pIHNldEh0bWwoaW5uZXJzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5sZWRlJyksIGQuaGVyby5sZWRlKTsKCiAgICAgIGFsbChzY29wZSwgJy5zZWN0aW9uLWxhYmVsJykuZm9yRWFjaChmdW5jdGlvbiAobCwgaSkgewogICAgICAgIHZhciB2ID0gZC5sYWJlbHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGwsICdoMicpLCB2LmgyKTsKICAgICAgICBpZiAodi5hc2lkZSkgc2V0VGV4dChvbmUobCwgJy5zbC1hc2lkZScpLCB2LmFzaWRlKTsKICAgICAgfSk7CgogICAgICBhbGwoc2NvcGUsICcuZm9yaycpLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZm9ya3NbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGYsICcuZm9yay1leWVicm93JyksIHYuZXllYnJvdyk7CiAgICAgICAgc2V0SHRtbChvbmUoZiwgJ2gzJyksIHYuaDMpOwogICAgICAgIHNldFRleHQob25lKGYsICcuZm9yay1zdWInKSwgdi5zdWIpOwogICAgICAgIGFsbChmLCAnLmZvcmstbW9kZSAuY2hpcCcpLmZvckVhY2goZnVuY3Rpb24gKGMsIGspIHsgc2V0VGV4dChjLCB2LmNoaXBzW2tdKTsgfSk7CiAgICAgICAgYWxsKGYsICcuZm9yay1saXN0IGxpJykuZm9yRWFjaChmdW5jdGlvbiAobGksIGspIHsgc2V0VGV4dChvbmUobGksICdzcGFuOm5vdCguaWNvbiknKSwgdi5pdGVtc1trXSk7IH0pOwogICAgICAgIHNldFRleHQob25lKGYsICcuZnAtZnJvbScpLCB2LmZyb20pOwogICAgICAgIHNldENvdW50ZXIob25lKGYsICcuZnAtbm93IC5hdi1jb3VudGVyJyksIHYucHJpY2UpOwogICAgICAgIGlmICh2Lm9sZFByaWNlKSBzZXRUZXh0KG9uZShmLCAnLmZwLW9sZCcpLCB2Lm9sZFByaWNlKTsKICAgICAgICBzZXRUZXh0KG9uZShmLCAnLmZwLW5vdGUnKSwgdi5ub3RlKTsKICAgICAgICBpZiAodi5hZGRvbikgewogICAgICAgICAgc2V0VGV4dChvbmUoZiwgJy5mYS1sYWJlbCcpLCB2LmFkZG9uLmxhYmVsKTsKICAgICAgICAgIHNldFRleHQob25lKGYsICcuZmEtcm93IGEnKSB8fCBvbmUoZiwgJy5mYS1yb3cnKSwgdi5hZGRvbi5uYW1lKTsKICAgICAgICAgIHNldENvdW50ZXIob25lKGYsICcuZmEtcHJpY2UgLmF2LWNvdW50ZXInKSwgdi5hZGRvbi5wcmljZSk7CiAgICAgICAgICBzZXRUZXh0KG9uZShmLCAnLmZhLW5vdGUnKSwgdi5hZGRvbi5ub3RlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGIgPSBvbmUoZiwgJy5mb3JrLWJ0bicpOwogICAgICAgIGlmIChiKSB7IHNldFRleHQob25lKGIsICdzcGFuOm5vdCguaWNvbiknKSwgdi5idG4pOyBiLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7IH0KICAgICAgfSk7CgogICAgICB2YXIgZmkgPSBvbmUoc2NvcGUsICcuZmVhdHVyZS1tZWRpYSBpbWcnKTsKICAgICAgaWYgKGZpKSB7IGZpLnNldEF0dHJpYnV0ZSgnc3JjJywgZC5mZWF0dXJlLmltZyk7IGZpLnNldEF0dHJpYnV0ZSgnYWx0JywgZC5mZWF0dXJlLmFsdCk7IH0KICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZmVhdHVyZS1jYXAgc3BhbicpLCBkLmZlYXR1cmUuY2FwKTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnN0cnVjdHVyZS1zZWN0aW9uIC5sYWJlbCcpLCBkLm1ldGhvZC5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLnN0cnVjdHVyZS1zZWN0aW9uIC5oMicpLCBkLm1ldGhvZC5oMik7CiAgICAgIGFsbChzY29wZSwgJy5hZHYtaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgdiA9IGQubWV0aG9kLml0ZW1zW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShhLCAnaDMnKSwgdi5oMyk7IHNldFRleHQob25lKGEsICdwJyksIHYucCk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYWJvdXQtdGV4dCAubGFiZWwnKSwgZC5hYm91dC5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmFib3V0LXRleHQgLmgyJyksIGQuYWJvdXQuaDIpOwogICAgICBhbGwoc2NvcGUsICcuY2hlY2staXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsgc2V0VGV4dChvbmUoYywgJ3NwYW46bm90KC5pY29uKScpLCBkLmFib3V0LmNoZWNrc1tpXSk7IH0pOwogICAgICBhbGwoc2NvcGUsICcudGFnJykuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkgeyBzZXRUZXh0KHgsIGQuYWJvdXQudGFnc1tpXSk7IH0pOwogICAgICBhbGwoc2NvcGUsICcuc3RhdHMgPiBkaXYnKS5mb3JFYWNoKGZ1bmN0aW9uIChkdiwgaSkgewogICAgICAgIHZhciB2ID0gZC5hYm91dC5zdGF0c1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgdmFyIG4gPSBvbmUoZHYsICcuc3RhdC1udW0nKTsKICAgICAgICBpZiAodi50YXJnZXQgIT09ICcnKSBzZXRDb3VudGVyKG4sIHYudGFyZ2V0KTsgZWxzZSBzZXRIdG1sKG4sIHYudmFsdWUpOwogICAgICAgIHNldFRleHQob25lKGR2LCAnLnN0YXQtbGFiZWwnKSwgdi5sYWJlbCk7CiAgICAgIH0pOwogICAgICB2YXIgYW0gPSBvbmUoc2NvcGUsICcuYWJvdXQtbWVkaWEgaW1nJyk7CiAgICAgIGlmIChhbSkgeyBhbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGQuYWJvdXQuaW1nKTsgYW0uc2V0QXR0cmlidXRlKCdhbHQnLCBkLmFib3V0LmFsdCk7IH0KICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYWJvdXQtdGFnJyksIGQuYWJvdXQudGFnKTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLm1vZHVsZXMtc2VjdGlvbiAubGFiZWwnKSwgZC5wcm9ncmFtLmxhYmVsKTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcubW9kdWxlcy1zZWN0aW9uIC5oMicpLCBkLnByb2dyYW0uaDIpOwoKICAgICAgYWxsKHNjb3BlLCAnLnJtLW5vZGUnKS5mb3JFYWNoKGZ1bmN0aW9uIChuLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLnJvYWRtYXBbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKG4sICcucm0tbm9kZS10aXAnKSwgdi50aXApOwogICAgICAgIHNldFRleHQob25lKG4sICcucm0tbm9kZS1udW0nKSwgdi5udW0pOwogICAgICB9KTsKCiAgICAgIGFsbChzY29wZSwgJy5tb2QtY2FyZCcpLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgICB2YXIgdiA9IGQubW9kdWxlc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUoYywgJy5tb2QtbnVtJyksIHYubnVtKTsKICAgICAgICBzZXRUZXh0KG9uZShjLCAnLm1vZC10YWcnKSwgdi50YWcpOwogICAgICAgIHNldFRleHQob25lKGMsICdoMycpLCB2LmgzKTsKICAgICAgICBzZXRUZXh0KG9uZShjLCAncCcpLCB2LnApOwogICAgICAgIHZhciBmb290ID0gYWxsKGMsICcubW9kLWZvb3QgPiBzcGFuJyk7CiAgICAgICAgaWYgKGZvb3RbMF0pIHNldFRleHQoZm9vdFswXSwgdi50YXNrcyk7CiAgICAgICAgaWYgKGZvb3RbMV0pIHNldFRleHQoZm9vdFsxXSwgdi50b29sKTsKICAgICAgfSk7CgogICAgICB2YXIgYWQgPSBvbmUoc2NvcGUsICcuYWRkb24nKTsKICAgICAgaWYgKGFkKSB7CiAgICAgICAgc2V0VGV4dChvbmUoYWQsICcuYWRkb24tY2hpcCcpLCBkLmFkZG9uLmNoaXApOwogICAgICAgIHNldEh0bWwob25lKGFkLCAnaDMnKSwgZC5hZGRvbi5oMyk7CiAgICAgICAgc2V0SHRtbChvbmUoYWQsICcuYWRkb24tc3ViJyksIGQuYWRkb24uc3ViKTsKICAgICAgICBhbGwoYWQsICcuYWRkb24tbGlzdCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBrKSB7IHNldFRleHQob25lKGxpLCAnc3Bhbjpub3QoLmljb24pJyksIGQuYWRkb24uaXRlbXNba10pOyB9KTsKICAgICAgICBhbGwoYWQsICcuYWRkb24tbWV0YSAuY2hpcCcpLmZvckVhY2goZnVuY3Rpb24gKGMsIGspIHsgc2V0VGV4dChjLCBkLmFkZG9uLm1ldGFba10pOyB9KTsKICAgICAgICBhbGwoYWQsICcuYWRkb24tb2ZmZXInKS5mb3JFYWNoKGZ1bmN0aW9uIChvLCBrKSB7CiAgICAgICAgICB2YXIgdiA9IGQuYWRkb24ub2ZmZXJzW2tdOyBpZiAoIXYpIHJldHVybjsKICAgICAgICAgIHNldFRleHQob25lKG8sICcuYW8td2hvJyksIHYud2hvKTsKICAgICAgICAgIHNldFRleHQob25lKG8sICcuYW8tdGV4dCcpLCB2LnRleHQpOwogICAgICAgIH0pOwogICAgICAgIHZhciBhYiA9IG9uZShhZCwgJy5hZGRvbi1idG4nKTsKICAgICAgICBpZiAoYWIpIHsgc2V0VGV4dChvbmUoYWIsICdzcGFuOm5vdCguaWNvbiknKSwgZC5hZGRvbi5idG4pOyBhYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkLmFkZG9uLmhyZWYpOyB9CiAgICAgIH0KCiAgICAgIGFsbChzY29wZSwgJy5mYXEtaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmZhcVtpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICcuZmFxLXEtdGV4dCcpLCB2LnEpOwogICAgICAgIHNldEh0bWwob25lKGl0LCAnLmZhcS1hLWlubmVyJyksIHYuYSk7CiAgICAgIH0pOwoKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuY3RhIC5oMicpLCBkLmN0YS5oMik7CiAgICAgIGFsbChzY29wZSwgJy5jdGEgLmJ0bicpLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuY3RhLmJ1dHRvbnNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIGFsbChiLCAnLmJ0bi1sYWJlbCBzcGFuJykuZm9yRWFjaChmdW5jdGlvbiAocykgeyBzZXRUZXh0KHMsIHYudGV4dCk7IH0pOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgfSk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpLCBkLmZvb3ROb3RlKTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LrRgNC40L_Rgjog0YLQvtC70YzQutC-INCx0LXQs9GD0YnQsNGPINGB0YLRgNC-0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24ganNTdHIocykgeyByZXR1cm4gIiciICsgU3RyaW5nKHMpLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgvJy9nLCAiXFwnIikgKyAiJyI7IH0KCiAgICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgICAgdmFyIG1pc3NlZCA9IFtdOwogICAgICBpZiAoIS92YXIgaXRlbXMgPSBcWy8udGVzdChzcmMpKSB7IG1pc3NlZC5wdXNoKCfQsdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAnKTsgcmV0dXJuIHsgdGV4dDogc3JjLCBtaXNzZWQ6IG1pc3NlZCB9OyB9CiAgICAgIHZhciBib2R5ID0gZC50aWNrZXIubWFwKGpzU3RyKS5qb2luKCcsICcpOwogICAgICB2YXIgb3V0ID0gc3JjLnJlcGxhY2UoL3ZhciBpdGVtcyA9IFxbW1xzXFNdKj9cXTsvLCAndmFyIGl0ZW1zID0gW1xuICAgICAgICAnICsgYm9keSArICdcbiAgICAgIF07Jyk7CiAgICAgIHRyeSB7IG5ldyBGdW5jdGlvbihvdXQpOyB9CiAgICAgIGNhdGNoIChlKSB7IHRocm93IG5ldyBFcnJvcign0L_QvtGB0LvQtSDQv9GA0LDQstC60Lgg0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0Ysg0YHRgtCw0Lsg0L3QtdC60L7RgNGA0LXQutGC0L3Ri9C8ICgnICsgZS5tZXNzYWdlICsgJykuINCh0LHQvtGA0LrQsCDQvtGC0LzQtdC90LXQvdCwLicpOyB9CiAgICAgIHJldHVybiB7IHRleHQ6IG91dCwgbWlzc2VkOiBtaXNzZWQgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBzY29wZSwgZCkgewogICAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF07CiAgICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIgbGQranNvbicgfTsKICAgICAgdmFyIG87CiAgICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlIH07IH0KICAgICAgdmFyIGcgPSBvWydAZ3JhcGgnXSB8fCBbXTsKICAgICAgc3luY0Nhbm9uKGcpOwoKICAgICAgdmFyIHBhZ2UgPSBnLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnOyB9KVswXTsKICAgICAgaWYgKHBhZ2UpIHsKICAgICAgICBwYWdlLm5hbWUgPSBkLnNlby5wYWdlTmFtZTsKICAgICAgICBwYWdlLmRlc2NyaXB0aW9uID0gZC5zZW8ucGFnZURlc2NyaXB0aW9uOwogICAgICAgIHBhZ2UuZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgICAgfQoKICAgICAgdmFyIGNvdXJzZSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnQ291cnNlJzsgfSlbMF07CiAgICAgIGlmIChjb3Vyc2UpIHsKICAgICAgICBjb3Vyc2UubmFtZSA9IGQuc2VvLmNvdXJzZU5hbWU7CiAgICAgICAgY291cnNlLmRlc2NyaXB0aW9uID0gZC5zZW8uY291cnNlRGVzY3JpcHRpb247CgogICAgICAgIC8qINGG0LXQvdGLIOKAlCDQuNC3INC60LDRgNGC0L7Rh9C10Log0L3QsCDRgdGC0YDQsNC90LjRhtC1ICovCiAgICAgICAgdmFyIGJ5TmFtZSA9IHt9OwogICAgICAgIChjb3Vyc2Uub2ZmZXJzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChvZmYsIGkpIHsgYnlOYW1lW2ldID0gb2ZmOyB9KTsKICAgICAgICAvKiDRgtGA0Lgg0YbQtdC90YssINC4INCy0YHQtSDRgtGA0Lgg4oCUINC40Lcg0LrQsNGA0YLQvtGH0LXQuiDQvdCw0LLQtdGA0YXRgyDRgdGC0YDQsNC90LjRhtGLOgogICAgICAgICAgINC40L3RgtC10L3RgdC40LIsINC60YPRgNGBINC4INC00L7Qvy3QvNC-0LTRg9C70Ywg0LLQvdGD0YLRgNC4INC60LDRgNGC0L7Rh9C60Lgg0LrRg9GA0YHQsCAqLwogICAgICAgIHZhciB3aXRoQWRkb24gPSBkLmZvcmtzLmZpbHRlcihmdW5jdGlvbiAoZikgeyByZXR1cm4gZi5hZGRvbjsgfSlbMF07CiAgICAgICAgdmFyIHByaWNlcyA9IFsKICAgICAgICAgIGRpZ2l0cygoZC5mb3Jrc1swXSB8fCB7fSkucHJpY2UpLAogICAgICAgICAgZGlnaXRzKChkLmZvcmtzWzFdIHx8IHt9KS5wcmljZSksCiAgICAgICAgICB3aXRoQWRkb24gPyBkaWdpdHMod2l0aEFkZG9uLmFkZG9uLnByaWNlKSA6ICcnCiAgICAgICAgXTsKICAgICAgICAoY291cnNlLm9mZmVycyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAob2ZmLCBpKSB7CiAgICAgICAgICBpZiAocHJpY2VzW2ldKSBvZmYucHJpY2UgPSBwcmljZXNbaV07CiAgICAgICAgfSk7CiAgICAgICAgKGNvdXJzZS5oYXNDb3Vyc2VJbnN0YW5jZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoY2ksIGkpIHsKICAgICAgICAgIHZhciBwID0gcHJpY2VzW2ldOwogICAgICAgICAgaWYgKGNpLm9mZmVycyAmJiBwKSBjaS5vZmZlcnMucHJpY2UgPSBwOwogICAgICAgIH0pOwoKICAgICAgICAvKiDQv9GA0L7Qs9GA0LDQvNC80LAg4oCUINC40Lcg0LrQsNGA0YLQvtGH0LXQuiDQvNC-0LTRg9C70LXQuSDQuCDQtNC-0L8t0LzQvtC00YPQu9GPICovCiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY291cnNlLnN5bGxhYnVzU2VjdGlvbnMpKSB7CiAgICAgICAgICB2YXIgY2FyZHMgPSBhbGwoc2NvcGUsICcubW9kLWNhcmQnKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgICAgdmFyIG51bSA9IHQob25lKGMsICcubW9kLW51bScpKTsKICAgICAgICAgICAgdmFyIHRhZyA9IHQob25lKGMsICcubW9kLXRhZycpKTsKICAgICAgICAgICAgdmFyIG5hbWUgPSAvXlxkKyQvLnRlc3QobnVtKSA_ICh0YWcgKyAnICcgKyBudW0gKyAnOiAnICsgdChvbmUoYywgJ2gzJykpKSA6ICh0YWcgKyAnOiAnICsgdChvbmUoYywgJ2gzJykpKTsKICAgICAgICAgICAgcmV0dXJuIHsgJ0B0eXBlJzogJ1N5bGxhYnVzJywgbmFtZTogbmFtZSwgZGVzY3JpcHRpb246IHQob25lKGMsICdwJykpIH07CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBhZCA9IG9uZShzY29wZSwgJy5hZGRvbicpOwogICAgICAgICAgaWYgKGFkKSB7CiAgICAgICAgICAgIGNhcmRzLnB1c2goewogICAgICAgICAgICAgICdAdHlwZSc6ICdTeWxsYWJ1cycsCiAgICAgICAgICAgICAgbmFtZTogJ9CU0L7Qvy3QvNC-0LTRg9C70Yw6ICcgKyB0KG9uZShhZCwgJ2gzJykpLAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0KG9uZShhZCwgJy5hZGRvbi1zdWInKSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb3Vyc2Uuc3lsbGFidXNTZWN0aW9ucyA9IGNhcmRzOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyog0LLQvtC_0YDQvtGB0Ysg4oCUINC40Lcg0LLQuNC00LjQvNC-0LPQviDRgtC10LrRgdGC0LAg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-ICovCiAgICAgIHZhciBmYXEgPSBnLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0ZBUVBhZ2UnOyB9KVswXTsKICAgICAgaWYgKGZhcSkgewogICAgICAgIGZhcS5tYWluRW50aXR5ID0gYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAgICAgbmFtZTogdChvbmUoaXQsICcuZmFxLXEtdGV4dCcpKSwKICAgICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsIHRleHQ6IHRleHRXaXRoQnJlYWtzKG9uZShpdCwgJy5mYXEtYS1pbm5lcicpKSB9CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CgogICAgICByZXR1cm4geyB0ZXh0OiBKU09OLnN0cmluZ2lmeShvLCBudWxsLCAyKSwgZXJyOiBudWxsIH07CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgNC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGFzc2VtYmxlKGQpIHsKICAgICAgcmV0dXJuIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2LWxlYXJuJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJy5hdi1sZWFybiAubW9kLWNhcmQnKSA-IC0xOyB9KVswXTsKICAgICAgICB2YXIgc2NyaXB0ID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdhdmwtdGlja2VyJykgPiAtMTsgfSlbMF07CgogICAgICAgIHZhciBtaXNzaW5nID0gW107CiAgICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAuYXYtbGVhcm4nKTsKICAgICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgICAgLyog0YjQsNC_0LrRgyDQsdC70L7QutCwINCx0LXRgNGR0Lwg0YHRi9GA0L7QuSDQuNC3INC40YHRhdC-0LTQvdC40LrQsDog0YHRgtGA0L7QutC4IDxoZWFkPiDRgyB3Zm9saW8g0YHQstC-0LgsCiAgICAgICAgICAg0YHQvtCx0LjRgNCw0YLRjCDQuNGFINC_0L7QuNGB0LrQvtC8INC_0L4g0LTQvtC60YPQvNC10L3RgtGDINC90LXQu9GM0LfRjyAqLwogICAgICAgIHZhciBzdGFydEF0ID0gc3JjLmluZGV4T2YoJzwhLS1cbiAgPScpOwogICAgICAgIGlmIChzdGFydEF0IDwgMCkgc3RhcnRBdCA9IHNyYy5pbmRleE9mKCc8IS0tJyk7CiAgICAgICAgdmFyIHN0eWxlQXQgPSBzcmMuaW5kZXhPZignPHN0eWxlPicsIHN0YXJ0QXQpOwogICAgICAgIGlmIChzdGFydEF0IDwgMCB8fCBzdHlsZUF0IDwgMCkgdGhyb3cgbmV3IEVycm9yKCfQvdC1INGD0LTQsNC70L7RgdGMINC-0L_RgNC10LTQtdC70LjRgtGMINCz0YDQsNC90LjRhtGLINCx0LvQvtC60LAnKTsKICAgICAgICB2YXIgaGVhZCA9IHNyYy5zbGljZShzdGFydEF0LCBzdHlsZUF0KS50cmltKCk7CgogICAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQpOwogICAgICAgIHZhciBsZCA9IGJ1aWxkTGQoZG9jLCBzY29wZSwgZCk7CiAgICAgICAgaWYgKCFsZC50ZXh0KSB0aHJvdyBuZXcgRXJyb3IobGQuZXJyKTsKCiAgICAgICAgdmFyIHRleHQgPSBbCiAgICAgICAgICBoZWFkLAogICAgICAgICAgJycsCiAgICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICAgIHNjLnRleHQudHJpbSgpLAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICAgIGxkLnRleHQsCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgICAgXS5qb2luKCdcbicpOwoKICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBtaXNzZWQ6IHNjLm1pc3NlZCB9OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emwtb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogICAgfQoKICAgIC8qINCn0LjRgdC70LAg0LLQvdGD0YLRgNC4INC20LjQstGL0YUg0YTRgNCw0Lcg0L_QsNC90LXQu9GMINC90LUg0L_QvtC00LzQtdC90Y_QtdGCLCDQsCDRgdCy0LXRgNGP0LXRgjoKICAgICAgINC_0L7QtNGB0YLQsNCy0LvRj9GC0Ywg0YbQtdC90YMg0LIg0L_RgNC10LTQu9C-0LbQtdC90LjQtSDQstGB0LvQtdC_0YPRjiDQvtC_0LDRgdC90LXQtSwg0YfQtdC8INGB0LrQsNC30LDRgtGMLiAqLwogICAgZnVuY3Rpb24gd2FybmluZ3MoZCkgewogICAgICB2YXIgdyA9IFtdOwogICAgICB2YXIgc3VtID0gMCwgc2VlbiA9IGZhbHNlOwogICAgICBkLm1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobSkgewogICAgICAgIHZhciBuID0gcGFyc2VJbnQoZGlnaXRzKG0udGFza3MpLCAxMCk7CiAgICAgICAgaWYgKCFpc05hTihuKSkgeyBzdW0gKz0gbjsgc2VlbiA9IHRydWU7IH0KICAgICAgfSk7CiAgICAgIHZhciBzdGF0ID0gKGQuYWJvdXQuc3RhdHMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiAv0LfQsNC00LDQvS9pLnRlc3Qocy5sYWJlbCk7IH0pWzBdIHx8IHt9KS50YXJnZXQ7CiAgICAgIGlmIChzZWVuICYmIHN0YXQgJiYgZGlnaXRzKHN0YXQpICE9PSBTdHJpbmcoc3VtKSkgewogICAgICAgIHcucHVzaCgn0LIg0YHRh9GR0YLRh9C40LrQtSDQt9Cw0LTQsNC90LjQuSDRgdGC0L7QuNGCICcgKyBzdGF0ICsgJywg0LAg0L_QviDQvNC-0LTRg9C70Y_QvCDQstGL0YXQvtC00LjRgiAnICsgc3VtKTsKICAgICAgfQogICAgICB2YXIgbW9kcyA9IChkLmFib3V0LnN0YXRzLmZpbHRlcihmdW5jdGlvbiAocykgeyByZXR1cm4gL9C80L7QtNGD0LsvaS50ZXN0KHMubGFiZWwpOyB9KVswXSB8fCB7fSkudGFyZ2V0OwogICAgICBpZiAobW9kcyAmJiBkaWdpdHMobW9kcykgIT09IFN0cmluZyhkLm1vZHVsZXMubGVuZ3RoKSkgewogICAgICAgIHcucHVzaCgn0LIg0YHRh9GR0YLRh9C40LrQtSDQvNC-0LTRg9C70LXQuSDRgdGC0L7QuNGCICcgKyBtb2RzICsgJywg0LAg0LrQsNGA0YLQvtGH0LXQuiAnICsgZC5tb2R1bGVzLmxlbmd0aCk7CiAgICAgIH0KCiAgICAgIC8qINGG0LXQvdGLLCDRg9C_0L7QvNGP0L3Rg9GC0YvQtSDQsiDQvtGC0LLQtdGC0LDRhSDQvdCwINCy0L7Qv9GA0L7RgdGLICovCiAgICAgIHZhciB3aXRoQWRkb24gPSBkLmZvcmtzLmZpbHRlcihmdW5jdGlvbiAoZikgeyByZXR1cm4gZi5hZGRvbjsgfSlbMF07CiAgICAgIHZhciBudW1zID0gWwogICAgICAgIGRpZ2l0cygoZC5mb3Jrc1swXSB8fCB7fSkucHJpY2UpLAogICAgICAgIGRpZ2l0cygoZC5mb3Jrc1sxXSB8fCB7fSkucHJpY2UpLAogICAgICAgIGRpZ2l0cygoZC5mb3Jrc1sxXSB8fCB7fSkub2xkUHJpY2UpLAogICAgICAgIHdpdGhBZGRvbiA_IGRpZ2l0cyh3aXRoQWRkb24uYWRkb24ucHJpY2UpIDogJycKICAgICAgXS5maWx0ZXIoQm9vbGVhbik7CiAgICAgIGQuZmFxLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgICB2YXIgaW5UZXh0ID0gKGYuYS5tYXRjaCgvXGRbXGQgIF17Myx9L2cpIHx8IFtdKS5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGRpZ2l0cyh4KTsgfSk7CiAgICAgICAgaW5UZXh0LmZvckVhY2goZnVuY3Rpb24gKHgpIHsKICAgICAgICAgIGlmICh4Lmxlbmd0aCA-PSA0ICYmIG51bXMuaW5kZXhPZih4KSA8IDApIHsKICAgICAgICAgICAgdy5wdXNoKCfQsiDQvtGC0LLQtdGC0LUgJyArIChpICsgMSkgKyAnINGD0L_QvtC80Y_QvdGD0YLQsCDRgdGD0LzQvNCwICcgKyBtb25leSh4KSArICcg4oK9LCDQutC-0YLQvtGA0L7QuSDQvdC10YIg0L3QsCDRgdGC0YDQsNC90LjRhtC1Jyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gdzsKICAgIH0KCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpsLWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGQgPSBjb2xsZWN0KCk7CiAgICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICAgIGFzc2VtYmxlKGQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICAgIGlmIChyZXMubWlzc2VkLmxlbmd0aCkgbm90ZSArPSAnINCd0LUg0L3QsNC50LTQtdC90L4g0LIg0YHQutGA0LjQv9GC0LU6ICcgKyByZXMubWlzc2VkLmpvaW4oJywgJykgKyAnLic7CiAgICAgICAgdmFyIHcgPSB3YXJuaW5ncyhkKTsKICAgICAgICBpZiAody5sZW5ndGgpIG5vdGUgKz0gJyDQn9GA0L7QstC10YDRjNGC0LU6ICcgKyB3LmpvaW4oJzsgJykgKyAnLic7CiAgICAgICAgY29weShyZXMudGV4dCwgbm90ZSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpsLXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzYyA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignYXZsLXRpY2tlcicpID4gLTE7IH0pWzBdOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1sZWFybicpLCBzYyA_IHNjLnRleHRDb250ZW50IDogJycpOwogICAgICAgIHJlYWRMZChkb2MsIGFnYWluKTsKICAgICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXApLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG1zZygn0KDQkNCh0KXQntCW0JTQldCd0JjQlSDigJQg0YHQvNC-0YLRgNC40YLQtSDQutC-0L3RgdC-0LvRjC4nKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1sZWFybicpOwogICAgaWYgKCFzY29wZSkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDQsdC70L7QutCwIC5hdi1sZWFybicpOwogICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdhdmwtdGlja2VyJykgPiAtMTsKICAgIH0pWzBdOwogICAgY2ZnID0gcmVhZENmZyhzY29wZSwgc2MgPyBzYy50ZXh0Q29udGVudCA6ICcnKTsKICAgIHJlYWRMZChkb2MsIGNmZyk7CiAgICBzdGFydCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICByb290LmlubmVySFRNTCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2emwtd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2emwtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQvtCx0YPRh9C10L3QuNGPPC9oMj48L2Rpdj4nICsKICAgICAgJzxkaXYgaWQ9ImF2emwtYm9keSI-PHAgY2xhc3M9ImF2emwtaGludCI-0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys6ICcgKwogICAgICBlc2MoZS5tZXNzYWdlKSArICc8L3A-PC9kaXY-PC9kaXY-JzsKICB9KTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0L7QsdGD0YfQtdC90LjRjyDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoid2ViIix0aXRsZToi0J_QsNC90LXQu9GMINGA0LDQt9GA0LDQsdC-0YLQutC4INGB0LDQudGC0L7QsiIsc2hvcnQ6ItCh0LDQudGC0YsiLGhpbnQ6ItC60LXQudGB0YssINGC0LDRgNC40YTRiywg0YHQvtGB0YLQsNCyLCDRgNCw0LfQvNC10YLQutCwIixwYWdlczpbIi93ZWJzaXRlLWRldmVsb3BtZW50Il0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCg0JDQl9Cg0JDQkdCe0KLQmtCYINCh0JDQmdCi0J7QkiAgdjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgL3dlYnNpdGUtZGV2ZWxvcG1lbnQKCiAgINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLCiAgINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvC4KCiAgINCn0YLQviDQv9Cw0L3QtdC70Ywg0LTQtdGA0LbQuNGCINCy0LzQtdGB0YLQtSwg0YfRgtC-0LHRiyDQvdC1INGA0LDQt9C-0YjQu9C-0YHRjDoKICAgICDCtyDRhtC10L3RiyDRgtCw0YDQuNGE0L7QsiDihpIg0L_RgNC10LTQu9C-0LbQtdC90LjRjyDQsiDRgNCw0LfQvNC10YLQutC1INC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyOwogICAgIMK3INC60LXQudGB0Ysg4oaSINGD0LfQu9GLIENyZWF0aXZlV29yayAo0YHQvtC_0L7RgdGC0LDQstC70Y_RjtGC0YHRjyDQv9C-INCw0LTRgNC10YHRgyDRgNCw0LfQsdC-0YDQsCwKICAgICAgINC_0L7RjdGC0L7QvNGDINC_0L7RgNGP0LTQvtC6INC80L7QttC90L4g0LzQtdC90Y_RgtGMLCDQsCDRgdCy0Y_Qt9GMINC90LUg0L_QvtGC0LXRgNGP0LXRgtGB0Y8pLgoKICAg0JfQsNCz0L7Qu9C-0LLQvtC6INGB0LXQutGG0LjQuCDQutC10LnRgdC-0LIg0L3QsCDRgdGC0YDQsNC90LjRhtC1IOKAlCA8aDE-OiDQutC-0L3RgdGC0YDRg9C60YLQvtGAINC_0L7QtNC90Y_QuwogICDQtdCz0L4g0L_RgNC4INGB0L7RhdGA0LDQvdC10L3QuNC4LCDQuCDRjdGC0L4g0L_RgNCw0LLQuNC70YzQvdC-LCDRgyDRgdGC0YDQsNC90LjRhtGLINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQvtC00LjQvQogICDQs9C70LDQstC90YvQuSDQt9Cw0LPQvtC70L7QstC-0LouINCf0LDQvdC10LvRjCDRh9C40YLQsNC10YIg0LXQs9C-INC_0L4g0LrQu9Cw0YHRgdGDIC5oLXNlY3Rpb24sCiAgINCwINC90LUg0L_QviDRgtC10LPRgywg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0YLQtdC8INC20LUg0YLQtdCz0L7QvC4KCiAgINCY0LfQstC10YHRgtC90L7QtSDRgNCw0YHRhdC-0LbQtNC10L3QuNC1OiDQutC-0L3RgdGC0YDRg9C60YLQvtGAINC_0LXRgNC10L_QuNGB0YvQstCw0LXRgiDRgdCw0LzQvtC30LDQutGA0YvQstCw0Y7RidC40LXRgdGPCiAgINGC0LXQs9C4INCy0L3Rg9GC0YDQuCBTVkcgKDxwYXRoLz4g0YHRgtCw0L3QvtCy0LjRgtGB0Y8gPHBhdGg-PC9wYXRoPikuINCe0YLQvtCx0YDQsNC20LDQtdGC0YHRjwogICDQvtC00LjQvdCw0LrQvtCy0L4sINCyINC00LjRhNGE0LUg4oCUINC70LjRiNC90LjQtSDRgdGC0YDQvtC60LguINCt0YLQviDQvdC1INC_0YDQsNCy0LrQsC4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQvtCy0LXRgNC60LAgwqvQtNC-0LvQtdGC0LXQu9C-INC70LjCuyAtLS0tLS0tLS0tCiAgICAg0J_QsNC90LXQu9GMINC_0LjRiNC10YIg0LfQvdCw0YfQtdC90LjRjyDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQtdC3INGB0LXQu9C10LrRgtC-0YDRiy4g0JXRgdC70Lgg0YHQtdC70LXQutGC0L7RgAogICAgINC90LUg0L3QsNGI0ZHQu9GB0Y8g0LjQu9C4INC_0L7QtNGB0YLQsNC90L7QstC60LAg0L3QtSDRgdC-0LLQv9Cw0LvQsCDigJQg0LfQsNC_0LjRgdGMINC80L7Qu9GH0LAg0L3QtSDQv9GA0L7QuNGB0YXQvtC00LjRgi4KICAgICDQmNC80LXQvdC90L4g0YLQsNC6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC30LDRgdGC0YDRj9C70L4g0L3QsCAxMjU6INC_0LDQvdC10LvRjCDQv9C-0YHRh9C40YLQsNC70LAgMTI3LAogICAgINC30LDQv9C40YHQsNGC0Ywg0L3QtSDRgdC80L7Qs9C70LAsINCwINC_0YDQvtCy0LXRgNC60LAgwqvRgdCx0L7RgNC60LAg0YHQvtCy0L_QsNC00LDQtdGCINGBINC40YHRhdC-0LTQvdC40LrQvtC8wrsKICAgICDRgdGA0LDQstC90LjQstCw0LvQsCDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3QvtC1INGBINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdGL0LwuCgogICAgINCf0L7RjdGC0L7QvNGDINC_0L7RgdC70LUg0YHQsdC-0YDQutC4INGH0LjRgtCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0J7QkdCg0JDQotCd0J4g0Lgg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4KICAgICDQstCy0ZHQuyDRh9C10LvQvtCy0LXQui4g0J3QtdGB0L7QstC_0LDQstGI0LjQtSDQv9C-0LvRjyDQv9Cw0L3QtdC70Ywg0L3QsNC30YvQstCw0LXRgiDQstGB0LvRg9GFLiAqLwogIGZ1bmN0aW9uIGxhbmRlZChleHBlY3RlZCwgYWN0dWFsLCBza2lwLCBwYXRoLCBvdXQpIHsKICAgIHBhdGggPSBwYXRoIHx8ICcnOyBvdXQgPSBvdXQgfHwgW107CiAgICBpZiAoZXhwZWN0ZWQgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHsKICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBsYW5kZWQoZXhwZWN0ZWRba10sIGFjdHVhbFtrXSwgc2tpcCwgcGF0aCA_IHBhdGggKyAnLicgKyBrIDogaywgb3V0KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKFN0cmluZyhleHBlY3RlZCA9PSBudWxsID8gJycgOiBleHBlY3RlZCkgIT09IFN0cmluZyhhY3R1YWwgPT0gbnVsbCA_ICcnIDogYWN0dWFsKSkgewogICAgICBpZiAoIXNraXAgfHwgIXNraXAudGVzdChwYXRoKSkgb3V0LnB1c2gocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiwogICAgINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMjQg0LDQstCz0YPRgdGC0LAgMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5IiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICLQvtGCIDE0IDkwMCDigr0iLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIm1ha2VzT2ZmZXIiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICAgICAicHJpY2UiOiAiMTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAiY29udGFjdFBvaW50IjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgICAgICJjb250YWN0VHlwZSI6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgICAgICJhcmVhU2VydmVkIjogIlJVIiwKICAgICAgICAgICJhdmFpbGFibGVMYW5ndWFnZSI6IFsKICAgICAgICAgICAgIlJ1c3NpYW4iLAogICAgICAgICAgICAiRW5nbGlzaCIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSI6IHsKICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwKICAgICAgInB1Ymxpc2hlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImluTGFuZ3VhZ2UiOiAicnUtUlUiCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnp3LXJvb3QnKTsKICBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CgogIHZhciBNQVhXID0gMTI0MDsKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGF0dHIoZWwsIGEpIHsgcmV0dXJuIGVsID8gKGVsLmdldEF0dHJpYnV0ZShhKSB8fCAnJykgOiAnJzsgfQogIGZ1bmN0aW9uIGRpZ2l0cyhzKSB7IHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKTsgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBsYWJlbHMgPSBhbGwoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCcpOwogICAgdmFyIGhlYWRzID0gYWxsKHNjb3BlLCAnLmgtc2VjdGlvbicpOwogICAgdmFyIHRpZXJzID0gYWxsKHNjb3BlLCAnLnRpZXInKTsKCiAgICByZXR1cm4gewogICAgICBsYWJlbHM6IGxhYmVscy5tYXAoZnVuY3Rpb24gKGwpIHsKICAgICAgICByZXR1cm4geyBudW06IHQob25lKGwsICcubnVtJykpLCBleWVicm93OiB0KG9uZShsLCAnLmV5ZWJyb3cnKSkgfTsKICAgICAgfSksCiAgICAgIGhlYWRzOiBoZWFkcy5tYXAoZnVuY3Rpb24gKGgpIHsgcmV0dXJuIGh0bWwoaCk7IH0pLAogICAgICB0b3BCdG46IHsKICAgICAgICB0ZXh0OiBvd25UZXh0KG9uZShzY29wZSwgJy53b3JrLWhlYWQgLmJ0bicpKSwKICAgICAgICBocmVmOiBhdHRyKG9uZShzY29wZSwgJy53b3JrLWhlYWQgLmJ0bicpLCAnaHJlZicpCiAgICAgIH0sCiAgICAgIGNhc2VzOiBhbGwoc2NvcGUsICcubS1pdGVtJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgdmFyIGltID0gb25lKGEsICdpbWcnKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaHJlZjogYXR0cihhLCAnaHJlZicpLAogICAgICAgICAgbnVtOiB0KG9uZShhLCAnLm0tbnVtJykpLAogICAgICAgICAgbmFtZTogdChvbmUoYSwgJy5tLXR4dCBiJykpLAogICAgICAgICAgc3ViOiB0KG9uZShhLCAnLm0tdHh0IGknKSksCiAgICAgICAgICBpbWc6IGF0dHIoaW0sICdzcmMnKSwKICAgICAgICAgIGFsdDogYXR0cihpbSwgJ2FsdCcpLAogICAgICAgICAgYXJpYTogYXR0cihhLCAnYXJpYS1sYWJlbCcpCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIHRpZXJzOiB0aWVycy5tYXAoZnVuY3Rpb24gKHgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbmFtZTogdChvbmUoeCwgJ2gzJykpLAogICAgICAgICAgdGVybTogdChvbmUoeCwgJy50ZXJtJykpLAogICAgICAgICAgcHJpY2U6IG93blRleHQob25lKHgsICcucHJpY2UnKSksCiAgICAgICAgICBjdXI6IHQob25lKHgsICcucHJpY2UgZW0nKSksCiAgICAgICAgICB0ZXh0OiB0KG9uZSh4LCAncCcpKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBpbmNsOiB7CiAgICAgICAgaGVhZDogdChvbmUoc2NvcGUsICcuaW5jbC1oJykpLAogICAgICAgIGl0ZW1zOiBhbGwoc2NvcGUsICcuaW5jbCBsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIHQobGkpOyB9KSwKICAgICAgICBub3RlOiB0KG9uZShzY29wZSwgJy5pbmNsIC5ub3RlJykpCiAgICAgIH0sCiAgICAgIGN0YTogewogICAgICAgIG1haW46IHsgdGV4dDogb3duVGV4dChvbmUoc2NvcGUsICcud2ViLWN0YSAuYnRuJykpLCBocmVmOiBhdHRyKG9uZShzY29wZSwgJy53ZWItY3RhIC5idG4nKSwgJ2hyZWYnKSB9LAogICAgICAgIGdob3N0OiB7IHRleHQ6IHQob25lKHNjb3BlLCAnLndlYi1jdGEgLmdob3N0JykpLCBocmVmOiBhdHRyKG9uZShzY29wZSwgJy53ZWItY3RhIC5naG9zdCcpLCAnaHJlZicpIH0KICAgICAgfSwKICAgICAgc2VvOiB7IHBhZ2VOYW1lOiAnJywgcGFnZURlc2NyaXB0aW9uOiAnJywgc3J2TmFtZTogJycsIHNydkRlc2NyaXB0aW9uOiAnJywgcmV0b3VjaDogJycsIGZhcTogW10gfQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHJlYWRMZChkb2MsIGNmZykgewogICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICB0cnkgeyBKU09OLnBhcnNlKHgudGV4dENvbnRlbnQpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0KICAgIH0pWzBdOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIChvWydAZ3JhcGgnXSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnV2ViUGFnZScgJiYgU3RyaW5nKG5bJ0BpZCddKS5pbmRleE9mKCdhdmFuemF0by5ydS93ZWJzaXRlLWRldmVsb3BtZW50JykgPiAtMSkgewogICAgICAgICAgY2ZnLnNlby5wYWdlTmFtZSA9IG4ubmFtZSB8fCAnJzsKICAgICAgICAgIGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdTZXJ2aWNlJykgewogICAgICAgICAgY2ZnLnNlby5zcnZOYW1lID0gbi5uYW1lIHx8ICcnOwogICAgICAgICAgY2ZnLnNlby5zcnZEZXNjcmlwdGlvbiA9IG4uZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgICAgICAobi5vZmZlcnMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG9mZikgewogICAgICAgICAgICBpZiAoL9GA0LXRgtGD0YgvaS50ZXN0KG9mZi5uYW1lIHx8ICcnKSkgY2ZnLnNlby5yZXRvdWNoID0gb2ZmLnByaWNlIHx8ICcnOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnRkFRUGFnZScpIHsKICAgICAgICAgIGNmZy5zZW8uZmFxID0gKG4ubWFpbkVudGl0eSB8fCBbXSkubWFwKGZ1bmN0aW9uIChxKSB7CiAgICAgICAgICAgIHJldHVybiB7IHE6IHEubmFtZSB8fCAnJywgYTogKChxLmFjY2VwdGVkQW5zd2VyIHx8IHt9KS50ZXh0KSB8fCAnJyB9OwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8qINCd0LDQt9Cy0LDQvdC40LUg0LrQtdC50YHQsCDQsiDRgNCw0LfQvNC10YLQutC1INGA0LDQt9Cy0ZHRgNC90YPRgtC10LUg0L_QvtC00L_QuNGB0Lgg0L3QsCDQutCw0YDRgtC-0YfQutC1CiAgICAgICAgICAgKMKr0YHQsNC50YIg0YLRg9GA0LjRgdGC0LjRh9C10YHQutC-0LPQviDQsNCz0LXQvdGC0YHRgtCy0LDCuyDQv9GA0L7RgtC40LIgwqvRgtGD0YDQsNCz0LXQvdGC0YHRgtCy0L4sCiAgICAgICAgICAg0JzQsNC70YzQtNC40LLRi8K7KSwg0L_QvtGN0YLQvtC80YMg0LTQtdGA0LbQuNC8INC10LPQviDQvtGC0LTQtdC70YzQvdGL0Lwg0L_QvtC70LXQvDog0LLRi9Cy0LXRgdGC0LgKICAgICAgICAgICDQvtC00L3QviDQuNC3INC00YDRg9Cz0L7Qs9C-IOKAlCDQt9C90LDRh9C40YIg0L7QsdC10LTQvdC40YLRjCDRgNCw0LfQvNC10YLQutGDLiAqLwogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnQ3JlYXRpdmVXb3JrJykgewogICAgICAgICAgdmFyIGMgPSBjZmcuY2FzZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmhyZWYgPT09IG4udXJsOyB9KVswXTsKICAgICAgICAgIGlmIChjKSB7IGMuc2VvTmFtZSA9IG4ubmFtZSB8fCAnJzsgYy5zZW9EZXNjID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINGB0LHQvtGA0LrQsCDRgdC-0L7QsdGJ0LjRgiAqLyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tINC_0LDQvdC10LvRjCAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2enctcm9vdCwjYXZ6dy1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6dy1yb290IGlucHV0LCNhdnp3LXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnp3LXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6dy1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnp3LXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbigxMDAwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnp3LWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enctaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2enctYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6dy1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6dy1yb290IC5hdnp3LXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1mIGlucHV0LCNhdnp3LXJvb3QgLmF2enctZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnp3LXJvb3QgLmF2enctcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2enctd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctaW1nPmltZ3t3aWR0aDo5NnB4O2hlaWdodDo2MnB4O29iamVjdC1maXQ6Y292ZXI7b2JqZWN0LXBvc2l0aW9uOnRvcCBjZW50ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctaW1nIC5ne2ZsZXg6MTttaW4td2lkdGg6MH0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctaGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy13YXJue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4YTRiMDAgIWltcG9ydGFudDtiYWNrZ3JvdW5kOiNmZmY1ZTY7Ym9yZGVyOjFweCBzb2xpZCAjZjBkNWE4OycsCiAgICAnYm9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDEycHg7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2enctb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2enctbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2enctZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnp3LXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enctbXNnJyk7IGlmIChlKSBlLnRleHRDb250ZW50ID0gczsgfQoKICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzdGFydCgpIHsKICAgIHZhciBTRUNUID0gWyfQmtC10LnRgdGLJywgJ9Ch0YLQvtC40LzQvtGB0YLRjCddOwoKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6dy13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6dy1oZWFkIj48aDI-0J_QsNC90LXQu9GMINGA0LDQt9GA0LDQsdC-0YLQutC4INGB0LDQudGC0L7QsjwvaDI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnp3LWIiIGlkPSJhdnp3LWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImF2enctYm9keSI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6dy1oaW50Ij7QptC10L3QsCDRgtCw0YDQuNGE0LAg0L_RgNCw0LLQuNGC0YHRjyDQvtC00LjQvSDRgNCw0Lc6INC-0L3QsCDQttC1INGD0YXQvtC00LjRgiDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyLiAnICsKICAgICAgJ9Ca0LXQudGB0Ysg0YHQstGP0LfQsNC90Ysg0YHQviDRgdCy0L7QuNC80Lgg0L7Qv9C40YHQsNC90LjRj9C80Lgg0LIg0YDQsNC30LzQtdGC0LrQtSDQv9C-INCw0LTRgNC10YHRgyDRgNCw0LfQsdC-0YDQsCDigJQg0L_QvtGA0Y_QtNC-0Log0LzQvtC20L3QviDQvNC10L3Rj9GC0YwuPC9wPic7CgogICAgLyog0JrQldCZ0KHQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enctc2VjIiBvcGVuPjxzdW1tYXJ5PtCa0LXQudGB0YsgKCcgKyBjZmcuY2FzZXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6dy1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6dy1oaW50Ij7QodC90LjQvNC-0Log0LHQtdGA0ZHRgtGB0Y8g0YEgZ2l0aHViLmlvLiDQndCw0LfQstCw0L3QuNC1INC4INC-0L_QuNGB0LDQvdC40LUg0YPRhdC-0LTRj9GCINC4INCyINC_0L7QtNC_0LjRgdGMINC_0L7QtCAnICsKICAgICAgJ9C60LDRgNGC0L7Rh9C60L7QuSwg0Lgg0LIg0YDQsNC30LzQtdGC0LrRgyDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi48L3A-JzsKICAgIGNmZy5jYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enctY2FyZCI-PGg0PtCa0LXQudGBICcgKyBlc2MoYy5udW0gfHwgKGkgKyAxKSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6dy1yb3ciPicgKyBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdjYXNlcy4nICsgaSArICcubmFtZScsIGMubmFtZSkgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1JywgJ2Nhc2VzLicgKyBpICsgJy5zdWInLCBjLnN1YikgKyAnPC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9Ch0YHRi9C70LrQsCDQvdCwINGA0LDQt9Cx0L7RgCcsICdjYXNlcy4nICsgaSArICcuaHJlZicsIGMuaHJlZikgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnp3LWltZyI-PGltZyBkYXRhLXByZXY9ImNhc2VzLicgKyBpICsgJy5pbWciIHNyYz0iJyArIGVzYyhjLmltZykgKyAnIiBhbHQ9IiI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0KHQvdC40LzQvtC6JywgJ2Nhc2VzLicgKyBpICsgJy5pbWcnLCBjLmltZykgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0L3QuNC80LrQsCAoYWx0KScsICdjYXNlcy4nICsgaSArICcuYWx0JywgYy5hbHQpICsgJzwvZGl2PjwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INCyINGA0LDQt9C80LXRgtC60LUgKNGA0LDQt9Cy0ZHRgNC90YPRgtC10LUg0L_QvtC00L_QuNGB0LgpJywgJ2Nhc2VzLicgKyBpICsgJy5zZW9OYW1lJywgYy5zZW9OYW1lIHx8ICcnKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0LIg0YDQsNC30LzQtdGC0LrQtScsICdjYXNlcy4nICsgaSArICcuc2VvRGVzYycsIGMuc2VvRGVzYyB8fCAnJywgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQotCQ0KDQmNCk0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnp3LXNlYyI-PHN1bW1hcnk-0KLQsNGA0LjRhNGLINC4INGB0L7RgdGC0LDQsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnp3LWluIj4nOwogICAgY2ZnLnRpZXJzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6dy1jYXJkIj48aDQ-0KLQsNGA0LjRhCAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnp3LXJvdyI-JyArIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ3RpZXJzLicgKyBpICsgJy5uYW1lJywgeC5uYW1lKSArCiAgICAgICAgZmllbGQoJ9Ch0YDQvtC6JywgJ3RpZXJzLicgKyBpICsgJy50ZXJtJywgeC50ZXJtKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0KbQtdC90LAgKNC60LDQuiDQvdCwINGB0YLRgNCw0L3QuNGG0LUsINC90LDQv9GA0LjQvNC10YAgwqvQvtGCIDU1IDAwMMK7KScsICd0aWVycy4nICsgaSArICcucHJpY2UnLCB4LnByaWNlKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUnLCAndGllcnMuJyArIGkgKyAnLnRleHQnLCB4LnRleHQsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INCx0LvQvtC60LAgwqvQktGF0L7QtNC40YLCuycsICdpbmNsLmhlYWQnLCBjZmcuaW5jbC5oZWFkKTsKICAgIGNmZy5pbmNsLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgIGggKz0gZmllbGQoJ9Cf0YPQvdC60YIgJyArIChpICsgMSksICdpbmNsLml0ZW1zLicgKyBpLCBpdCk7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Ch0L3QvtGB0LrQsCDQv9C-0LQg0YHQv9C40YHQutC-0LwnLCAnaW5jbC5ub3RlJywgY2ZnLmluY2wubm90ZSwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQptC10L3QsCDRgNC10YLRg9GI0Lgg0LIg0YDQsNC30LzQtdGC0LrQtSwg0YLQvtC70YzQutC-INGG0LjRhNGA0YsnLCAnc2VvLnJldG91Y2gnLCBjZmcuc2VvLnJldG91Y2gpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCi0JXQmtCh0KLQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enctc2VjIj48c3VtbWFyeT7Ql9Cw0LPQvtC70L7QstC60Lgg0Lgg0LrQvdC-0L_QutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enctaW4iPic7CiAgICBjZmcubGFiZWxzLmZvckVhY2goZnVuY3Rpb24gKGwsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6dy1yb3ciPicgKyBmaWVsZCgn0J3QvtC80LXRgCDRgNCw0LfQtNC10LvQsCAnICsgKGkgKyAxKSwgJ2xhYmVscy4nICsgaSArICcubnVtJywgbC5udW0pICsKICAgICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAgJyArIChpICsgMSksICdsYWJlbHMuJyArIGkgKyAnLmV5ZWJyb3cnLCBsLmV5ZWJyb3cpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGNmZy5oZWFkcy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7CiAgICAgIGggKz0gZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDCqycgKyAoU0VDVFtpXSB8fCAoaSArIDEpKSArICfCuyAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2hlYWRzLicgKyBpLCB4KTsKICAgIH0pOwogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6dy1yb3ciPicgKyBmaWVsZCgn0JrQvdC-0L_QutCwINCy0LLQtdGA0YXRgyDigJQg0YLQtdC60YHRgicsICd0b3BCdG4udGV4dCcsIGNmZy50b3BCdG4udGV4dCkgKwogICAgICBmaWVsZCgn0JrQvdC-0L_QutCwINCy0LLQtdGA0YXRgyDigJQg0LDQtNGA0LXRgScsICd0b3BCdG4uaHJlZicsIGNmZy50b3BCdG4uaHJlZikgKyAnPC9kaXY-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnp3LXJvdyI-JyArIGZpZWxkKCfQmtC90L7Qv9C60LAg0LLQvdC40LfRgyDigJQg0YLQtdC60YHRgicsICdjdGEubWFpbi50ZXh0JywgY2ZnLmN0YS5tYWluLnRleHQpICsKICAgICAgZmllbGQoJ9Ca0L3QvtC_0LrQsCDQstC90LjQt9GDIOKAlCDQsNC00YDQtdGBJywgJ2N0YS5tYWluLmhyZWYnLCBjZmcuY3RhLm1haW4uaHJlZikgKyAnPC9kaXY-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnp3LXJvdyI-JyArIGZpZWxkKCfQodGB0YvQu9C60LAg0LLQvdC40LfRgyDigJQg0YLQtdC60YHRgicsICdjdGEuZ2hvc3QudGV4dCcsIGNmZy5jdGEuZ2hvc3QudGV4dCkgKwogICAgICBmaWVsZCgn0KHRgdGL0LvQutCwINCy0L3QuNC30YMg4oCUINCw0LTRgNC10YEnLCAnY3RhLmdob3N0LmhyZWYnLCBjZmcuY3RhLmdob3N0LmhyZWYpICsgJzwvZGl2PicgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KDQkNCX0JzQldCi0JrQkCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enctc2VjIj48c3VtbWFyeT7QoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enctaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlTmFtZScsIGNmZy5zZW8ucGFnZU5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZURlc2NyaXB0aW9uJywgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnc2VvLnNydk5hbWUnLCBjZmcuc2VvLnNydk5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YPRgdC70YPQs9C4JywgJ3Nlby5zcnZEZXNjcmlwdGlvbicsIGNmZy5zZW8uc3J2RGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JLQntCf0KDQntCh0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnp3LXNlYyI-PHN1bW1hcnk-0JLQvtC_0YDQvtGB0Ysg0LIg0YDQsNC30LzQtdGC0LrQtSAoJyArIGNmZy5zZW8uZmFxLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enctaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enctd2FybiI-0K3RgtC40YUg0LLQvtC_0YDQvtGB0L7QsiDQvdCwINGB0LDQvNC-0Lkg0YHRgtGA0LDQvdC40YbQtSDQvdC10YIg4oCUINC-0L3QuCDRgdGD0YnQtdGB0YLQstGD0Y7RgiDRgtC-0LvRjNC60L4g0LIg0YDQsNC30LzQtdGC0LrQtS4gJyArCiAgICAgICdHb29nbGUg0LfQsNGB0YfQuNGC0YvQstCw0LXRgiDQstC-0L_RgNC-0YHRiyDQu9C40YjRjCDRgtC-0LPQtNCwLCDQutC-0LPQtNCwINGC0L7RgiDQttC1INGC0LXQutGB0YIg0LLQuNC00LjRgiDRh9C10LvQvtCy0LXQuiwg0YLQsNC6INGH0YLQviDRgdC10LnRh9Cw0YEgJyArCiAgICAgICfQvtC90Lgg0YDQsNCx0L7RgtCw0Y7RgiDQstGF0L7Qu9C-0YHRgtGD0Y4uINCb0LjQsdC-INCy0YvQstC10YHRgtC4INC40YUg0L3QsCDRgdGC0YDQsNC90LjRhtGDLCDQu9C40LHQviDRg9Cx0YDQsNGC0Ywg0LjQtyDRgNCw0LfQvNC10YLQutC4LjwvcD4nOwogICAgY2ZnLnNlby5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnp3LWNhcmQiPjxoND7QktC-0L_RgNC-0YEgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ3Nlby5mYXEuJyArIGkgKyAnLnEnLCBmLnEpICsKICAgICAgICBmaWVsZCgn0J7RgtCy0LXRgicsICdzZW8uZmFxLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enctZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnp3LWIgcCIgaWQ9ImF2enctYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnp3LWIiIGlkPSJhdnp3LXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2enctbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2enctb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6dy1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOwogICAgfSk7CgogICAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyksIG8gPSBvYmosIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgICB9CiAgICBmdW5jdGlvbiBjb2xsZWN0KCkgewogICAgICB2YXIgZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBzZXRQYXRoKGQsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyksIGVsLnZhbHVlKTsgfSk7CiAgICAgIHJldHVybiBkOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB0ZXh0cy5wdXNoKGVsLmNoaWxkTm9kZXNbaV0pOwogICAgICB9CiAgICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgICAgdmFyIG1haW4gPSBudWxsOwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgICB9CiAgICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICAgIHZhciBwcmUgPSAocmF3Lm1hdGNoKC9eXHMqLykgfHwgWycnXSlbMF07CiAgICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgICBtYWluLm5vZGVWYWx1ZSA9IHByZSArIHYgKyBwb3N0OwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICAgIHRleHRzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dHNbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC5pbm5lckhUTUwgPSB2OyB9CgogICAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgICAgYWxsKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwnKS5mb3JFYWNoKGZ1bmN0aW9uIChsLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmxhYmVsc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUobCwgJy5udW0nKSwgdi5udW0pOwogICAgICAgIHNldFRleHQob25lKGwsICcuZXllYnJvdycpLCB2LmV5ZWJyb3cpOwogICAgICB9KTsKICAgICAgYWxsKHNjb3BlLCAnLmgtc2VjdGlvbicpLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHsKICAgICAgICBpZiAodHlwZW9mIGQuaGVhZHNbaV0gPT09ICdzdHJpbmcnKSBzZXRIdG1sKHgsIGQuaGVhZHNbaV0pOwogICAgICB9KTsKCiAgICAgIHZhciB0YiA9IG9uZShzY29wZSwgJy53b3JrLWhlYWQgLmJ0bicpOwogICAgICBpZiAodGIpIHsgc2V0VGV4dCh0YiwgZC50b3BCdG4udGV4dCk7IHRiLnNldEF0dHJpYnV0ZSgnaHJlZicsIGQudG9wQnRuLmhyZWYpOyB9CgogICAgICBhbGwoc2NvcGUsICcubS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciB2ID0gZC5jYXNlc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2LmhyZWYpOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdi5uYW1lICsgJyDigJQg0YHQvNC-0YLRgNC10YLRjCDRgNCw0LfQsdC-0YAg0L_RgNC-0LXQutGC0LAnKTsKICAgICAgICB2YXIgaW0gPSBvbmUoYSwgJ2ltZycpOwogICAgICAgIGlmIChpbSkgeyBpbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHYuaW1nKTsgaW0uc2V0QXR0cmlidXRlKCdhbHQnLCB2LmFsdCk7IH0KICAgICAgICBzZXRUZXh0KG9uZShhLCAnLm0tdHh0IGInKSwgdi5uYW1lKTsKICAgICAgICBzZXRUZXh0KG9uZShhLCAnLm0tdHh0IGknKSwgdi5zdWIpOwogICAgICB9KTsKCiAgICAgIGFsbChzY29wZSwgJy50aWVyJykuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkgewogICAgICAgIHZhciB2ID0gZC50aWVyc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUoeCwgJ2gzJyksIHYubmFtZSk7CiAgICAgICAgc2V0VGV4dChvbmUoeCwgJy50ZXJtJyksIHYudGVybSk7CiAgICAgICAgc2V0VGV4dChvbmUoeCwgJy5wcmljZScpLCB2LnByaWNlKTsKICAgICAgICBzZXRUZXh0KG9uZSh4LCAncCcpLCB2LnRleHQpOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmluY2wtaCcpLCBkLmluY2wuaGVhZCk7CiAgICAgIGFsbChzY29wZSwgJy5pbmNsIGxpJykuZm9yRWFjaChmdW5jdGlvbiAobGksIGkpIHsgc2V0VGV4dChsaSwgZC5pbmNsLml0ZW1zW2ldKTsgfSk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmluY2wgLm5vdGUnKSwgZC5pbmNsLm5vdGUpOwoKICAgICAgdmFyIG1iID0gb25lKHNjb3BlLCAnLndlYi1jdGEgLmJ0bicpOwogICAgICBpZiAobWIpIHsgc2V0VGV4dChtYiwgZC5jdGEubWFpbi50ZXh0KTsgbWIuc2V0QXR0cmlidXRlKCdocmVmJywgZC5jdGEubWFpbi5ocmVmKTsgfQogICAgICB2YXIgZ2IgPSBvbmUoc2NvcGUsICcud2ViLWN0YSAuZ2hvc3QnKTsKICAgICAgaWYgKGdiKSB7IHNldFRleHQoZ2IsIGQuY3RhLmdob3N0LnRleHQpOyBnYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkLmN0YS5naG9zdC5ocmVmKTsgfQogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIHNjb3BlLCBkKSB7CiAgICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgICB0cnkgeyBKU09OLnBhcnNlKHgudGV4dENvbnRlbnQpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgfSlbMF07CiAgICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0YDQsNC30LzQtdGC0LrQuCcgfTsKICAgICAgdmFyIG87CiAgICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9GA0LDQt9C80LXRgtC60LAg0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlIH07IH0KICAgICAgdmFyIGcgPSBvWydAZ3JhcGgnXSB8fCBbXTsKICAgICAgc3luY0Nhbm9uKGcpOwoKICAgICAgZy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdXZWJQYWdlJyAmJiBTdHJpbmcoblsnQGlkJ10pLmluZGV4T2YoJ2F2YW56YXRvLnJ1L3dlYnNpdGUtZGV2ZWxvcG1lbnQnKSA-IC0xKSB7CiAgICAgICAgICBuLm5hbWUgPSBkLnNlby5wYWdlTmFtZTsKICAgICAgICAgIG4uZGVzY3JpcHRpb24gPSBkLnNlby5wYWdlRGVzY3JpcHRpb247CiAgICAgICAgICBuLmRhdGVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgICAgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnU2VydmljZScpIHsKICAgICAgICAgIG4ubmFtZSA9IGQuc2VvLnNydk5hbWU7CiAgICAgICAgICBuLmRlc2NyaXB0aW9uID0gZC5zZW8uc3J2RGVzY3JpcHRpb247CiAgICAgICAgICAvKiDRhtC10L3RiyDigJQg0LjQtyDRgtCw0YDQuNGE0L7QsiDQvdCwINGB0YLRgNCw0L3QuNGG0LUsINC_0L7RjdGC0L7QvNGDINGA0LDQt9C-0LnRgtC40YHRjCDQuNC8INC90LXRh9C10LwgKi8KICAgICAgICAgIChuLm9mZmVycyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAob2ZmKSB7CiAgICAgICAgICAgIGlmICgv0YDQtdGC0YPRiC9pLnRlc3Qob2ZmLm5hbWUgfHwgJycpKSB7CiAgICAgICAgICAgICAgaWYgKGQuc2VvLnJldG91Y2gpIG9mZi5wcmljZSA9IGRpZ2l0cyhkLnNlby5yZXRvdWNoKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHRpZXIgPSBkLnRpZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgICAgICAgIHJldHVybiBvZmYubmFtZSAmJiBvZmYubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoeC5uYW1lLnRvTG93ZXJDYXNlKCkpID4gLTE7CiAgICAgICAgICAgIH0pWzBdOwogICAgICAgICAgICBpZiAodGllcikgb2ZmLnByaWNlID0gZGlnaXRzKHRpZXIucHJpY2UpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8qINC60LXQudGB0Ysg0YHQvtC_0L7RgdGC0LDQstC70Y_QtdC8INC_0L4g0LDQtNGA0LXRgdGDINGA0LDQt9Cx0L7RgNCwLCDQsCDQvdC1INC_0L4g0L_QvtGA0Y_QtNC60YMgKi8KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ0NyZWF0aXZlV29yaycpIHsKICAgICAgICAgIC8qINCY0YnQtdC8INC_0L4g0LDQtNGA0LXRgdGDLCDQutC-0YLQvtGA0YvQuSDRgdGC0L7Rj9C7INCyINC60L7QtNC1INCU0J4g0L_RgNCw0LLQvtC6LCDQsCDQt9Cw0L_QuNGB0YvQstCw0LXQvAogICAgICAgICAgICAg0L3QvtCy0YvQuTog0LjQvdCw0YfQtSDRgdGC0L7QuNGCINC_0L7QvNC10L3Rj9GC0Ywg0YHRgdGL0LvQutGDINC60LXQudGB0LAg4oCUINC4INGA0LDQt9C80LXRgtC60LAg0YLQtdGA0Y_QtdGCCiAgICAgICAgICAgICDRgSDQvdC40Lwg0YHQstGP0LfRjCwg0L_QvtGC0L7QvNGDINGH0YLQviDQuNGB0LrQsNGC0Ywg0YPQttC1INC90LXRh9C10LPQvi4gKi8KICAgICAgICAgIHZhciBpZHggPSAtMTsKICAgICAgICAgIGNmZy5jYXNlcy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBrKSB7IGlmICh4LmhyZWYgPT09IG4udXJsKSBpZHggPSBrOyB9KTsKICAgICAgICAgIHZhciBjID0gaWR4ID4gLTEgPyBkLmNhc2VzW2lkeF0gOiBkLmNhc2VzLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5ocmVmID09PSBuLnVybDsgfSlbMF07CiAgICAgICAgICBpZiAoYykgewogICAgICAgICAgICBpZiAoYy5ocmVmKSBuLnVybCA9IGMuaHJlZjsKICAgICAgICAgICAgaWYgKGMuc2VvTmFtZSkgbi5uYW1lID0gYy5zZW9OYW1lOwogICAgICAgICAgICBpZiAoYy5zZW9EZXNjKSBuLmRlc2NyaXB0aW9uID0gYy5zZW9EZXNjOwogICAgICAgICAgICBpZiAobi5hYm91dCAmJiBuLmFib3V0Lm5hbWUpIG4uYWJvdXQubmFtZSA9IGMubmFtZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJykgewogICAgICAgICAgbi5tYWluRW50aXR5ID0gZC5zZW8uZmFxLm1hcChmdW5jdGlvbiAoZikgewogICAgICAgICAgICByZXR1cm4geyAnQHR5cGUnOiAnUXVlc3Rpb24nLCBuYW1lOiBmLnEsIGFjY2VwdGVkQW5zd2VyOiB7ICdAdHlwZSc6ICdBbnN3ZXInLCB0ZXh0OiBmLmEgfSB9OwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXZ6LXdlYicpOwogICAgICAgIHZhciBzdHlsZSA9IGFsbChkb2MsICdzdHlsZScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXZ6LXdlYiAubS1mcmFtZScpID4gLTE7IH0pWzBdOwogICAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJy5hdnotd2ViIC5yZXZlYWwnKSA-IC0xOyB9KVswXTsKCiAgICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6IC5hdnotd2ViJyk7CiAgICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAoIXNjcmlwdCkgbWlzc2luZy5wdXNoKCc8c2NyaXB0PiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICAgIC8qINGI0LDQv9C60YMg0LHQu9C-0LrQsCDQsdC10YDRkdC8INGB0YvRgNC-0Lkg0LjQtyDQuNGB0YXQvtC00L3QuNC60LA6INGB0YLRgNC-0LrQuCA8aGVhZD4g0YMgd2ZvbGlvINGB0LLQvtC4LAogICAgICAgICAgINGB0L7QsdC40YDQsNGC0Ywg0LjRhSDQv9C-0LjRgdC60L7QvCDQv9C-INC00L7QutGD0LzQtdC90YLRgyDQvdC10LvRjNC30Y8gKi8KICAgICAgICB2YXIgc3RhcnRBdCA9IHNyYy5pbmRleE9mKCc8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICBBVkFOWkFUTyDCtyDQsdC70L7QuicpOwogICAgICAgIHZhciBzdHlsZUF0ID0gc3JjLmluZGV4T2YoJzxzdHlsZT4nLCBzdGFydEF0KTsKICAgICAgICBpZiAoc3RhcnRBdCA8IDAgfHwgc3R5bGVBdCA8IDApIHRocm93IG5ldyBFcnJvcign0L3QtSDRg9C00LDQu9C-0YHRjCDQvtC_0YDQtdC00LXQu9C40YLRjCDQs9GA0LDQvdC40YbRiyDQsdC70L7QutCwJyk7CiAgICAgICAgdmFyIGhlYWQgPSBzcmMuc2xpY2Uoc3RhcnRBdCwgc3R5bGVBdCkudHJpbSgpOwoKICAgICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgICAvKiDQutC-0LzQvNC10L3RgtCw0YDQuNC5INC_0LXRgNC10LQg0YDQsNC30LzQtdGC0LrQvtC5IOKAlCDRgtC-0LbQtSDQuNC3INC40YHRhdC-0LTQvdC40LrQsCAqLwogICAgICAgIHZhciBsZENvbW1lbnQgPSAoc3JjLm1hdGNoKC88IS0tID0rXG4gICAgINCg0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LJbXHNcU10qPz0rIC0tPi8pIHx8IFtudWxsXSlbMF07CgogICAgICAgIHZhciB0ZXh0ID0gWwogICAgICAgICAgaGVhZCwKICAgICAgICAgICcnLAogICAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgICBzY3JpcHQudGV4dENvbnRlbnQudHJpbSgpLAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAgICcnCiAgICAgICAgXS5jb25jYXQobGRDb21tZW50ID8gW2xkQ29tbWVudF0gOiBbXSkuY29uY2F0KFsKICAgICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgICBsZC50ZXh0LAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JwogICAgICAgIF0pLmpvaW4oJ1xuJyk7CgogICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQgfTsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnp3LW91dCcpOwogICAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgICB2YXIgb2sgPSBmYWxzZTsKICAgICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICAgIH0KCiAgICAvKiDQn9Cw0L3QtdC70Ywg0YHQstC10YDRj9C10YIg0Lgg0LPQvtCy0L7RgNC40YIg0LLRgdC70YPRhSwg0L3QviDQvdC1INC_0L7QtNC80LXQvdGP0LXRgjoKICAgICAgINGH0LjRgdC70LAg0LLQvdGD0YLRgNC4INC20LjQstGL0YUg0YTRgNCw0Lcg0L7Qv9Cw0YHQvdC10LUg0L_RgNCw0LLQuNGC0Ywg0LLRgdC70LXQv9GD0Y4uICovCiAgICBmdW5jdGlvbiB3YXJuaW5ncyhkKSB7CiAgICAgIHZhciB3ID0gW107CiAgICAgIGlmIChkLnNlby5mYXEubGVuZ3RoKSB7CiAgICAgICAgdy5wdXNoKCfQsiDRgNCw0LfQvNC10YLQutC1ICcgKyBkLnNlby5mYXEubGVuZ3RoICsgJyDQstC-0L_RgNC-0YHQvtCyLCDQsCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0LjRhSDQvdC10YIg4oCUIEdvb2dsZSDQuNGFINC90LUg0LfQsNGB0YfQuNGC0LDQtdGCJyk7CiAgICAgIH0KICAgICAgZC5jYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgaWYgKCFjLmhyZWYpIHcucHVzaCgn0YMg0LrQtdC50YHQsCDCqycgKyBjLm5hbWUgKyAnwrsg0L3QtSDRg9C60LDQt9Cw0L3QsCDRgdGB0YvQu9C60LAg0L3QsCDRgNCw0LfQsdC-0YAnKTsKICAgICAgfSk7CiAgICAgIHZhciBrbm93biA9IGQudGllcnMubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiBkaWdpdHMoeC5wcmljZSk7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgZC5pbmNsLml0ZW1zLmNvbmNhdChbZC5pbmNsLm5vdGVdKS5mb3JFYWNoKGZ1bmN0aW9uICh0eHQsIGkpIHsKICAgICAgICAoU3RyaW5nKHR4dCkubWF0Y2goL1xkW1xkICBdezMsfS9nKSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobnVtKSB7CiAgICAgICAgICB2YXIgbiA9IGRpZ2l0cyhudW0pOwogICAgICAgICAgaWYgKG4ubGVuZ3RoID49IDQgJiYga25vd24uaW5kZXhPZihuKSA8IDAgJiYgbiAhPT0gZGlnaXRzKGQuc2VvLnJldG91Y2gpKSB7CiAgICAgICAgICAgIHcucHVzaCgn0LIg0YHQvtGB0YLQsNCy0LUg0YPQv9C-0LzRj9C90YPRgtCwINGB0YPQvNC80LAgJyArIG51bS50cmltKCkgKyAnLCDQutC-0YLQvtGA0L7QuSDQvdC10YIg0LIg0YLQsNGA0LjRhNCw0YUnKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybiB3OwogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enctYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICB2YXIgZCA9IGNvbGxlY3QoKTsKICAgICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgICAgYXNzZW1ibGUoZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgLyog0YHQstC10YDRj9C10Lw6INCy0YHRkSDQu9C4INCy0LLQtdC00ZHQvdC90L7QtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQv9C-0L_QsNC70L4g0LIg0LrQvtC0ICovCiAgICAgICAgdmFyIGRvYzIgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MyLnF1ZXJ5U2VsZWN0b3IoJy5hdnotd2ViJykpOwogICAgICAgIGlmIChhZ2FpbikgcmVhZExkKGRvYzIsIGFnYWluKTsKICAgICAgICB2YXIgbm90TGFuZGVkID0gYWdhaW4gPyBsYW5kZWQoZCwgYWdhaW4sIC9eJC8pIDogWyfRgdGC0YDQsNC90LjRhtCwINC90LUg0YDQsNC30L7QsdGA0LDQu9Cw0YHRjCddOwogICAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICAgIHZhciB3ID0gd2FybmluZ3MoZCk7CiAgICAgICAgaWYgKG5vdExhbmRlZC5sZW5ndGgpIHcucHVzaCgn0J3QlSDQl9CQ0J_QmNCh0JDQm9Ce0KHQrCDQsiDQutC-0LQ6ICcgKyBub3RMYW5kZWQuc2xpY2UoMCwgNikuam9pbignLCAnKSArCiAgICAgICAgICAobm90TGFuZGVkLmxlbmd0aCA-IDYgPyAnINC4INC10YnRkSAnICsgKG5vdExhbmRlZC5sZW5ndGggLSA2KSA6ICcnKSk7CiAgICAgICAgaWYgKHcubGVuZ3RoKSBub3RlICs9ICcg0J_RgNC-0LLQtdGA0YzRgtC1OiAnICsgdy5qb2luKCc7ICcpICsgJy4nOwogICAgICAgIGNvcHkocmVzLnRleHQsIG5vdGUpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cd0LUg0YHQvtCx0YDQsNC90L46ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CgogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6dy10ZXN0Jykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgbXNnKCfQn9GA0L7QstC10YDRj9GO4oCmJyk7CiAgICAgIHZhciBzbmFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgICAgYXNzZW1ibGUoc25hcCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5xdWVyeVNlbGVjdG9yKCcuYXZ6LXdlYicpKTsKICAgICAgICByZWFkTGQoZG9jLCBhZ2Fpbik7CiAgICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShzbmFwKSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgICBpZiAoYSA9PT0gYikgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0LHRi9C70L4nLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cf0YDQvtCy0LXRgNC60LAg0L3QtSDQv9GA0L7RiNC70LA6ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CiAgfQoKICBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXZ6LXdlYicpOwogICAgaWYgKCFzY29wZSkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDQsdC70L7QutCwIC5hdnotd2ViJyk7CiAgICBjZmcgPSByZWFkQ2ZnKHNjb3BlKTsKICAgIHJlYWRMZChkb2MsIGNmZyk7CiAgICBzdGFydCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICByb290LmlubmVySFRNTCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2enctd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enctaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDRgNCw0LfRgNCw0LHQvtGC0LrQuCDRgdCw0LnRgtC-0LI8L2gyPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6dy1ib2R5Ij48cCBjbGFzcz0iYXZ6dy1oaW50Ij7QndC1INGD0LTQsNC70L7RgdGMINC_0YDQvtGH0LjRgtCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizogJyArCiAgICAgIGVzYyhlLm1lc3NhZ2UpICsgJzwvcD48L2Rpdj48L2Rpdj4nOwogIH0pOwoKICByZXR1cm4gJ9Cf0LDQvdC10LvRjCDRgNCw0LfRgNCw0LHQvtGC0LrQuCDRgdCw0LnRgtC-0LIg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6ImJsb2ciLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0LHQu9C-0LPQsCIsc2hvcnQ6ItCR0LvQvtCzIixoaW50OiLRgNCw0LfQtNC10LvRiywg0YLQtdC60YHRgtGLLCDRhNC-0YLQvtCz0YDQsNGE0LjQuCwg0YDQsNC30LzQtdGC0LrQsCIscGFnZXM6WyIvYmxvZyJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQkdCb0J7Qk9CQICB2MSDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvYmxvZwoKICAg0KfQuNGC0LDQtdGCINCY0KHQpdCe0JTQndCr0Jkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YssINC_0L7QtNGB0YLQsNCy0LvRj9C10YIg0LfQvdCw0YfQtdC90LjRjyDQuNC3INGE0L7RgNC80YsKICAg0Lgg0LLRi9C00LDRkdGCINCy0LXRgdGMINCx0LvQvtC6INGG0LXQu9C40LrQvtC8LgoKICAg0KHRgtGA0LDQvdC40YbQsCDQv9GA0L7RgdGC0LDRjzog0YjQsNC_0LrQsCDQuCDQtNCy0LUg0LrQsNGA0YLQvtGH0LrQuC3RgNCw0LfQtNC10LvQsC4g0J3QviDRgdCy0Y_Qt9C10LkKICAg0YEg0YDQsNC30LzQtdGC0LrQvtC5INC00LLQtSwg0Lgg0L7QsdC1INC70LXQs9C60L4g0YDQsNC30YrQtdC30LbQsNGO0YLRgdGPOgoKICAgICDCtyDQsNC00YDQtdGBINC60LDRgNGC0L7Rh9C60Lgg4oaSINCw0LTRgNC10YEg0YDQsNC30LTQtdC70LAg0LIgSXRlbUxpc3QuINCY0YnQtdC8INGD0LfQtdC7CiAgICAgICDQv9C-INCw0LTRgNC10YHRgywg0LrQvtGC0L7RgNGL0Lkg0YHRgtC-0Y_QuyDQsiDQutC-0LTQtSDQlNCeINC_0YDQsNCy0L7Quiwg0LAg0LfQsNC_0LjRgdGL0LLQsNC10LwKICAgICAgINC90L7QstGL0Lk6INC40L3QsNGH0LUg0YHRgtC-0LjRgiDQv9C-0LzQtdC90Y_RgtGMINGB0YHRi9C70LrRgyDigJQg0Lgg0YHQstGP0LfRjCDQv9C-0YLQtdGA0Y_QvdCwOwogICAgIMK3INC-0L_QuNGB0LDQvdC40LUg0LrQsNGA0YLQvtGH0LrQuCDihpIg0L7Qv9C40YHQsNC90LjQtSDRgNCw0LfQtNC10LvQsCDQsiDRgNCw0LfQvNC10YLQutC1LCDQtNC-0YHQu9C-0LLQvdC-LgoKICAg0J3QsNC30LLQsNC90LjQtSDRgNCw0LfQtNC10LvQsCDQsiDRgNCw0LfQvNC10YLQutC1INC_0YDQsNCy0LjRgtGB0Y8g0L7RgtC00LXQu9GM0L3Ri9C8INC_0L7Qu9C10LwuCiAgINCX0LDQs9C-0LvQvtCy0L7QuiDQutCw0YDRgtC-0YfQutC4INC90LDQsdGA0LDQvSDRgSDQv9C10YDQtdC90L7RgdC-0LwgKMKr0JDQvdC-0L3RgdGLPGJyPtGB0YrRkdC80L7QusK7KSwKICAg0Lgg0LLRi9GC0LDRidC40YLRjCDQuNC3INC90LXQs9C-INC40LzRjyDQv9GA0L7RgdGC0YvQvCDRgtC10LrRgdGC0L7QvCDQvdC10LvRjNC30Y86INGB0LvQvtCy0LAg0YHQu9C40L_QvdGD0YLRgdGPLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qIC0tLS0tLS0tLS0g0L_RgNC-0LLQtdGA0LrQsCDCq9C00L7Qu9C10YLQtdC70L4g0LvQuMK7IC0tLS0tLS0tLS0KICAgICDQn9Cw0L3QtdC70Ywg0L_QuNGI0LXRgiDQt9C90LDRh9C10L3QuNGPINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGH0LXRgNC10Lcg0YHQtdC70LXQutGC0L7RgNGLLiDQldGB0LvQuCDRgdC10LvQtdC60YLQvtGACiAgICAg0L3QtSDQvdCw0YjRkdC70YHRjyDQuNC70Lgg0L_QvtC00YHRgtCw0L3QvtCy0LrQsCDQvdC1INGB0L7QstC_0LDQu9CwIOKAlCDQt9Cw0L_QuNGB0Ywg0LzQvtC70YfQsCDQvdC1INC_0YDQvtC40YHRhdC-0LTQuNGCLgogICAgINCY0LzQtdC90L3QviDRgtCw0Log0YfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0LfQsNGB0YLRgNGP0LvQviDQvdCwIDEyNTog0L_QsNC90LXQu9GMINC_0L7RgdGH0LjRgtCw0LvQsCAxMjcsCiAgICAg0LfQsNC_0LjRgdCw0YLRjCDQvdC1INGB0LzQvtCz0LvQsCwg0LAg0L_RgNC-0LLQtdGA0LrQsCDCq9GB0LHQvtGA0LrQsCDRgdC-0LLQv9Cw0LTQsNC10YIg0YEg0LjRgdGF0L7QtNC90LjQutC-0LzCuwogICAgINGB0YDQsNCy0L3QuNCy0LDQu9CwINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdC-0LUg0YEg0L7QtNC40L3QsNC60L7QstC-INC90LXQv9GA0LDQstC40LvRjNC90YvQvC4KCiAgICAg0J_QvtGN0YLQvtC80YMg0L_QvtGB0LvQtSDRgdCx0L7RgNC60Lgg0YfQuNGC0LDQtdC8INGA0LXQt9GD0LvRjNGC0LDRgiDQntCR0KDQkNCi0J3QniDQuCDRgdCy0LXRgNGP0LXQvCDRgSDRgtC10LwsINGH0YLQvgogICAgINCy0LLRkdC7INGH0LXQu9C-0LLQtdC6LiDQndC10YHQvtCy0L_QsNCy0YjQuNC1INC_0L7Qu9GPINC_0LDQvdC10LvRjCDQvdCw0LfRi9Cy0LDQtdGCINCy0YHQu9GD0YUuICovCiAgZnVuY3Rpb24gbGFuZGVkKGV4cGVjdGVkLCBhY3R1YWwsIHNraXAsIHBhdGgsIG91dCkgewogICAgcGF0aCA9IHBhdGggfHwgJyc7IG91dCA9IG91dCB8fCBbXTsKICAgIGlmIChleHBlY3RlZCAmJiB0eXBlb2YgZXhwZWN0ZWQgPT09ICdvYmplY3QnICYmIGFjdHVhbCAmJiB0eXBlb2YgYWN0dWFsID09PSAnb2JqZWN0JykgewogICAgICBPYmplY3Qua2V5cyhleHBlY3RlZCkuZm9yRWFjaChmdW5jdGlvbiAoaykgewogICAgICAgIGxhbmRlZChleHBlY3RlZFtrXSwgYWN0dWFsW2tdLCBza2lwLCBwYXRoID8gcGF0aCArICcuJyArIGsgOiBrLCBvdXQpOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAoU3RyaW5nKGV4cGVjdGVkID09IG51bGwgPyAnJyA6IGV4cGVjdGVkKSAhPT0gU3RyaW5nKGFjdHVhbCA9PSBudWxsID8gJycgOiBhY3R1YWwpKSB7CiAgICAgIGlmICghc2tpcCB8fCAhc2tpcC50ZXN0KHBhdGgpKSBvdXQucHVzaChwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDRjdGC0Lgg0YPQt9C70Ysg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAyNCDQsNCy0LPRg9GB0YLQsCAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTkiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogItC-0YIgMTQgOTAwIOKCvSIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2emItcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIE1BWFcgPSAxMjQwOwoKICBmdW5jdGlvbiBvbmUoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWwpOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9IH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGh0bWwoZWwpIHsgcmV0dXJuIGVsID8gZWwuaW5uZXJIVE1MLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gb3duVGV4dChlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuICcnOwogICAgdmFyIHMgPSAnJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgcyArPSBlbC5jaGlsZE5vZGVzW2ldLm5vZGVWYWx1ZTsKICAgIH0KICAgIHJldHVybiBzLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gYXR0cihlbCwgYSkgeyByZXR1cm4gZWwgPyAoZWwuZ2V0QXR0cmlidXRlKGEpIHx8ICcnKSA6ICcnOyB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGlubmVycyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIGxhYmVsID0gb25lKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwnKTsKCiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogb3duVGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChpbm5lcnNbMF0pLAogICAgICAgIGxpbmUyOiBpbm5lcnNbMV0gPyB0KG9uZShpbm5lcnNbMV0sICdlbScpIHx8IGlubmVyc1sxXSkgOiAnJywKICAgICAgICBsZWRlOiB0KG9uZShzY29wZSwgJy5sZWRlJykpCiAgICAgIH0sCiAgICAgIGxhYmVsOiB7CiAgICAgICAgaDI6IHQob25lKGxhYmVsLCAnaDInKSksCiAgICAgICAgYXNpZGU6IHQob25lKGxhYmVsLCAnLnNsLWFzaWRlJykpCiAgICAgIH0sCiAgICAgIGNhcmRzOiBhbGwoc2NvcGUsICcuaHViLWNhcmQnKS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgICB2YXIgaW0gPSBvbmUoYSwgJy5odWItcGhvdG8nKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaHJlZjogYXR0cihhLCAnaHJlZicpLAogICAgICAgICAgZ2hvc3Q6IHQob25lKGEsICcuaHViLWdob3N0JykpLAogICAgICAgICAgbnVtOiB0KG9uZShhLCAnLmh1Yi1udW0nKSksCiAgICAgICAgICBoMzogaHRtbChvbmUoYSwgJ2gzJykpLAogICAgICAgICAgZGVzYzogdChvbmUoYSwgJy5odWItZGVzYycpKSwKICAgICAgICAgIGxhYmVsOiB0KG9uZShhLCAnLmh1Yi1sYWJlbCcpKSwKICAgICAgICAgIGltZzogYXR0cihpbSwgJ3NyYycpLAogICAgICAgICAgYWx0OiBhdHRyKGltLCAnYWx0JykKICAgICAgICB9OwogICAgICB9KSwKICAgICAgZm9vdE5vdGU6IGh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpKSwKICAgICAgc2VvOiB7IHBhZ2VOYW1lOiAnJywgcGFnZURlc2NyaXB0aW9uOiAnJyB9CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgIHRyeSB7IEpTT04ucGFyc2UoeC50ZXh0Q29udGVudCk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfQogICAgfSlbMF07CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgKG9bJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdDb2xsZWN0aW9uUGFnZScgJiYgU3RyaW5nKG5bJ0BpZCddKS5pbmRleE9mKCcvYmxvZyNwYWdlJykgPiAtMSkgewogICAgICAgICAgY2ZnLnNlby5wYWdlTmFtZSA9IG4ubmFtZSB8fCAnJzsKICAgICAgICAgIGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdJdGVtTGlzdCcpIHsKICAgICAgICAgIChuLml0ZW1MaXN0RWxlbWVudCB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobGkpIHsKICAgICAgICAgICAgdmFyIGl0ID0gbGkuaXRlbSB8fCB7fTsKICAgICAgICAgICAgdmFyIGMgPSBjZmcuY2FyZHMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmhyZWYgPT09IGl0LnVybDsgfSlbMF07CiAgICAgICAgICAgIGlmIChjKSBjLnNlb05hbWUgPSBpdC5uYW1lIHx8ICcnOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsgLyog0YHQsdC-0YDQutCwINGB0L7QvtCx0YnQuNGCICovIH0KICB9CgogIC8qIC0tLS0tLS0tLS0g0L_QsNC90LXQu9GMIC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6Yi1yb290LCNhdnpiLXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnpiLXJvb3QgaW5wdXQsI2F2emItcm9vdCB0ZXh0YXJlYXtiYWNrZ3JvdW5kOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7JywKICAgICdvcGFjaXR5OjEgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjEuNCAhaW1wb3J0YW50fScsCiAgICAnI2F2emItcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0nLAogICAgJyNhdnpiLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2emItd2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDk0MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6Yi1oZWFke3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpiLWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnpiLWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2emItZm9vdHtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItYi5we2JvcmRlci1jb2xvcjojMWQxZDFmfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItc2VjPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItaW57cGFkZGluZzoxNHB4fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItZiBpbnB1dCwjYXZ6Yi1yb290IC5hdnpiLWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsjYXZ6Yi1yb290IC5hdnpiLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnpiLXdpbntib3JkZXItcmFkaXVzOjB9fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWltZz5pbWd7d2lkdGg6OTBweDtoZWlnaHQ6MTEycHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiNlY2VjZWM7ZmxleDpub25lfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1pbWcgLmd7ZmxleDoxO21pbi13aWR0aDowfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNDBweCwxZnIpKTtnYXA6MTBweH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItZ3JpZCBpbWd7d2lkdGg6MTAwJTtoZWlnaHQ6MTIwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emItb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2emItbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2emItZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpiLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emItbXNnJyk7IGlmIChlKSBlLnRleHRDb250ZW50ID0gczsgfQoKICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzdGFydCgpIHsKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6Yi13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6Yi1oZWFkIj48aDI-0J_QsNC90LXQu9GMINCx0LvQvtCz0LA8L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6Yi1iIiBpZD0iYXZ6Yi1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpiLWJvZHkiPicgKwogICAgICAnPHAgY2xhc3M9ImF2emItaGludCI-0JDQtNGA0LXRgSDQuCDQvtC_0LjRgdCw0L3QuNC1INGA0LDQt9C00LXQu9CwINGD0YXQvtC00Y_RgiDQuCDQvdCwINC60LDRgNGC0L7Rh9C60YMsINC4INCyINGA0LDQt9C80LXRgtC60YMgJyArCiAgICAgICfQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4g0J3QsNC30LLQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1INC_0YDQsNCy0LjRgtGB0Y8g0L7RgtC00LXQu9GM0L3Qvjog0LIg0LfQsNCz0L7Qu9C-0LLQutC1INC60LDRgNGC0L7Rh9C60Lgg0YHRgtC-0LjRgiAnICsKICAgICAgJ9C_0LXRgNC10L3QvtGBINGB0YLRgNC-0LrQuCwg0Lgg0LLRi9GC0LDRidC40YLRjCDQuNC80Y8g0L7RgtGC0YPQtNCwINCx0LXQtyDRgdC60LvQtdC50LrQuCDRgdC70L7QsiDQvdC10LvRjNC30Y8uPC9wPic7CgogICAgLyog0KDQkNCX0JTQldCb0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpiLXNlYyIgb3Blbj48c3VtbWFyeT7QoNCw0LfQtNC10LvRiyAoJyArIGNmZy5jYXJkcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpiLWluIj4nOwogICAgY2ZnLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6Yi1jYXJkIj48aDQ-0KDQsNC30LTQtdC7ICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2NhcmRzLicgKyBpICsgJy5oMycsIGMuaDMpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtScsICdjYXJkcy4nICsgaSArICcuZGVzYycsIGMuZGVzYywgJ2FyZWEnKSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0YDQsNC30LTQtdC70LAnLCAnY2FyZHMuJyArIGkgKyAnLmhyZWYnLCBjLmhyZWYpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6Yi1yb3ciPicgKyBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0LLQvdC40LfRgyDQutCw0YDRgtC-0YfQutC4JywgJ2NhcmRzLicgKyBpICsgJy5sYWJlbCcsIGMubGFiZWwpICsKICAgICAgICBmaWVsZCgn0J3QvtC80LXRgCAo0L3QsNC_0YDQuNC80LXRgCDCqzAxIOKAlCDQoNCw0LfQtNC10LvCuyknLCAnY2FyZHMuJyArIGkgKyAnLm51bScsIGMubnVtKSArICc8L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6Yi1yb3ciPicgKyBmaWVsZCgn0JrRgNGD0L_QvdGL0Lkg0L3QvtC80LXRgCDQvdCwINGE0L7QvdC1JywgJ2NhcmRzLicgKyBpICsgJy5naG9zdCcsIGMuZ2hvc3QpICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1JywgJ2NhcmRzLicgKyBpICsgJy5zZW9OYW1lJywgYy5zZW9OYW1lIHx8ICcnKSArICc8L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6Yi1pbWciPjxpbWcgZGF0YS1wcmV2PSJjYXJkcy4nICsgaSArICcuaW1nIiBzcmM9IicgKyBlc2MoYy5pbWcpICsgJyIgYWx0PSIiPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9Ck0L7RgtC-0LPRgNCw0YTQuNGPJywgJ2NhcmRzLicgKyBpICsgJy5pbWcnLCBjLmltZykgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpiLWIiIGRhdGEtY2hvb3NlPSJjYXJkcy4nICsgaSArICcuaW1nIiBzdHlsZT0icGFkZGluZzo0cHggOXB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206MTJweCI-0JLRi9Cx0YDQsNGC0Ywg0YHQviDRgdGC0YDQsNC90LjRhtGLINGA0LDQt9C00LXQu9CwPC9idXR0b24-JyArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YTQvtGC0L7Qs9GA0LDRhNC40LggKGFsdCknLCAnY2FyZHMuJyArIGkgKyAnLmFsdCcsIGMuYWx0KSArICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQqNCQ0J_QmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6Yi1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LAg0Lgg0YLQtdC60YHRgtGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emItaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uZXllYnJvdycsIGNmZy5oZXJvLmV5ZWJyb3cpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emItcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDigJQg0YHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMiAo0LrRg9GA0YHQuNCyKScsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JLRgdGC0YPQv9C40YLQtdC70YzQvdGL0Lkg0YLQtdC60YHRgicsICdoZXJvLmxlZGUnLCBjZmcuaGVyby5sZWRlLCAnYXJlYScpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emItcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2xhYmVsLmgyJywgY2ZnLmxhYmVsLmgyKSArCiAgICAgIGZpZWxkKCfQn9C-0LzQtdGC0LrQsCDRgdC_0YDQsNCy0LAnLCAnbGFiZWwuYXNpZGUnLCBjZmcubGFiZWwuYXNpZGUpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHQvdC-0YHQutCwINCy0L3QuNC30YMgKNC80L7QttC90L4gSFRNTCknLCAnZm9vdE5vdGUnLCBjZmcuZm9vdE5vdGUsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KDQkNCX0JzQldCi0JrQkCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emItc2VjIj48c3VtbWFyeT7QoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emItaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emItaGludCI-0K3RgtC-INC90LXQstC40LTQuNC80LDRjyDRh9Cw0YHRgtGMINGB0YLRgNCw0L3QuNGG0YsuINCe0L_QuNGB0LDQvdC40Y8g0YDQsNC30LTQtdC70L7QsiDQsdC10YDRg9GC0YHRjyDRgSDQutCw0YDRgtC-0YfQtdC6ICcgKwogICAgICAn0YHQsNC80Lgg4oCUINC30LTQtdGB0Ywg0YLQvtC70YzQutC-INC90LDQt9Cy0LDQvdC40LUg0Lgg0L7Qv9C40YHQsNC90LjQtSDQstGB0LXQuSDRgdGC0YDQsNC90LjRhtGLLjwvcD4nICsKICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZU5hbWUnLCBjZmcuc2VvLnBhZ2VOYW1lKSArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLnBhZ2VEZXNjcmlwdGlvbicsIGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2emItZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpiLWIgcCIgaWQ9ImF2emItYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpiLWIiIGlkPSJhdnpiLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2emItbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2emItb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6Yi1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOwogICAgfSk7CgogICAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINGE0L7RgtC-0LPRgNCw0YTQuNC4INGB0L4g0YHRgtGA0LDQvdC40YbRiyDRgNCw0LfQtNC10LvQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYWJzKHUpIHsKICAgICAgaWYgKCF1KSByZXR1cm4gJyc7CiAgICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICAgIGlmICh1LmluZGV4T2YoJy8nKSA9PT0gMCkgcmV0dXJuIGxvY2F0aW9uLm9yaWdpbiArIHU7CiAgICAgIHJldHVybiB1OwogICAgfQogICAgZnVuY3Rpb24gZnJvbVNyY3NldChzZXQsIHNyYykgewogICAgICBpZiAoIXNldCkgeyB2YXIgdSA9IGFicyhzcmMpOyByZXR1cm4geyBmdWxsOiB1LCBzbWFsbDogdSB9OyB9CiAgICAgIHZhciBsaXN0ID0gc2V0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgdmFyIHAgPSB4LnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgICAgcmV0dXJuIHsgdTogYWJzKHBbMF0pLCB3OiBwYXJzZUludChwWzFdLCAxMCkgfHwgMCB9OwogICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudTsgfSk7CiAgICAgIGlmICghbGlzdC5sZW5ndGgpIHsgdmFyIHYgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdiwgc21hbGw6IHYgfTsgfQogICAgICB2YXIgYmlnID0gbGlzdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudyAtIGEudzsgfSk7CiAgICAgIHZhciBzbWFsbCA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLncgLSBiLnc7IH0pOwogICAgICByZXR1cm4gewogICAgICAgIGZ1bGw6IChiaWcuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLncgPD0gTUFYVzsgfSlbMF0gfHwgYmlnW2JpZy5sZW5ndGggLSAxXSkudSwKICAgICAgICBzbWFsbDogKHNtYWxsLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53ID49IDI4MDsgfSlbMF0gfHwgc21hbGxbMF0pLnUKICAgICAgfTsKICAgIH0KCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNob29zZScpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAvKiDQsNC00YDQtdGBINCx0LXRgNGR0Lwg0LjQtyDQv9C-0LvRjyDRgdGB0YvQu9C60Lg6INC10YHQu9C4INGA0LDQt9C00LXQuyDRgtC-0LvRjNC60L4g0YfRgtC-INC_0LXRgNC10L3QsNC_0YDQsNCy0LjQu9C4LAogICAgICAgICDQutCw0LTRgNGLINC90YPQttC90Ysg0YPQttC1INGBINC90L7QstC-0Lkg0YHRgtGA0LDQvdC40YbRiyAqLwogICAgICB2YXIgaWR4ID0gcC5zcGxpdCgnLicpWzFdOwogICAgICB2YXIgaHJlZklucHV0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtkYXRhLXA9ImNhcmRzLicgKyBpZHggKyAnLmhyZWYiXScpOwogICAgICB2YXIgdXJsID0gaHJlZklucHV0ID8gaHJlZklucHV0LnZhbHVlLnRyaW0oKSA6ICcnOwogICAgICBpZiAoIXVybCkgeyBtc2coJ9CjINGA0LDQt9C00LXQu9CwINC90LUg0YPQutCw0LfQsNC9INCw0LTRgNC10YEg4oCUINCy0YvQsdC40YDQsNGC0Ywg0L3QtSDQuNC3INGH0LXQs9C-LicpOyByZXR1cm47IH0KCiAgICAgIHZhciBwYW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIHBhbmUuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhlZDtpbnNldDo4JTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3otaW5kZXg6MjE0NzQ4MzY0NzsnICsKICAgICAgICAncGFkZGluZzoxNnB4O292ZXJmbG93OmF1dG87Ym94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC40KSc7CiAgICAgIHBhbmUuaW5uZXJIVE1MID0gJzxwIHN0eWxlPSJtYXJnaW46MCAwIDEwcHgiPtCX0LDQs9GA0YPQttCw0Y4g0YHQvdC40LzQutC4INGB0L4g0YHRgtGA0LDQvdC40YbRiyAnICsgZXNjKHVybCkgKyAn4oCmPC9wPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpiLWdyaWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvZGl2Pic7CiAgICAgIHZhciBjYW5jZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgY2FuY2VsLmNsYXNzTmFtZSA9ICdhdnpiLWInOyBjYW5jZWwudGV4dENvbnRlbnQgPSAn0J7RgtC80LXQvdCwJzsKICAgICAgY2FuY2VsLnN0eWxlLm1hcmdpblRvcCA9ICcxMnB4JzsKICAgICAgY2FuY2VsLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHBhbmUucmVtb3ZlKCk7IH07CiAgICAgIHBhbmUuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICAgICAgcm9vdC5hcHBlbmRDaGlsZChwYW5lKTsKCiAgICAgIGZldGNoKHVybCArICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgJ3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICAgIHZhciBzZWVuID0ge30sIG91dCA9IFtdOwogICAgICAgICAgYWxsKGRvYywgJ2ltZycpLmZvckVhY2goZnVuY3Rpb24gKGltKSB7CiAgICAgICAgICAgIHZhciBzZXQgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCAnJzsKICAgICAgICAgICAgdmFyIHMgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSB8fCAnJzsKICAgICAgICAgICAgaWYgKHNldC5pbmRleE9mKCdpLndmb2xpby5ydScpIDwgMCAmJiBzLmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwKSByZXR1cm47CiAgICAgICAgICAgIHZhciBwYWlyID0gZnJvbVNyY3NldChzZXQsIHMpOwogICAgICAgICAgICBpZiAoIXBhaXIuZnVsbCB8fCBzZWVuW3BhaXIuZnVsbF0pIHJldHVybjsKICAgICAgICAgICAgc2VlbltwYWlyLmZ1bGxdID0gMTsgb3V0LnB1c2gocGFpcik7CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBoZWFkID0gcGFuZS5xdWVyeVNlbGVjdG9yKCdwJyk7CiAgICAgICAgICB2YXIgZ3JpZCA9IHBhbmUucXVlcnlTZWxlY3RvcignLmF2emItZ3JpZCcpOwogICAgICAgICAgaWYgKCFvdXQubGVuZ3RoKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0J3QsCDRgdGC0YDQsNC90LjRhtC1ICcgKyB1cmwgKyAnINGB0L3QuNC80LrQvtCyINC90LUg0L3QsNGI0LvQvtGB0YwuJzsgcmV0dXJuOyB9CiAgICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CS0YvQsdC10YDQuNGC0LUg0YHQvdC40LzQvtC6ICgnICsgb3V0Lmxlbmd0aCArICcpJzsKICAgICAgICAgIGdyaWQuc3R5bGUuZGlzcGxheSA9ICdncmlkJzsKICAgICAgICAgIG91dC5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgICB2YXIgaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICAgICAgaW0uc3JjID0gaXQuc21hbGw7IGltLmxvYWRpbmcgPSAnbGF6eSc7CiAgICAgICAgICAgIGltLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGlucCA9IHJvb3QucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS1wPSInICsgcCArICciXScpOwogICAgICAgICAgICAgIGlmIChpbnApIGlucC52YWx1ZSA9IGl0LmZ1bGw7CiAgICAgICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gaXQuZnVsbDsKICAgICAgICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICAgICAgICB9OwogICAgICAgICAgICBncmlkLmFwcGVuZENoaWxkKGltKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgIHBhbmUucXVlcnlTZWxlY3RvcigncCcpLnRleHRDb250ZW50ID0gJ9Ch0YLRgNCw0L3QuNGG0LAg0L3QtSDQvtGC0LrRgNGL0LvQsNGB0Yw6ICcgKyBlcnIubWVzc2FnZTsKICAgICAgICB9KTsKICAgIH0pOwoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQogICAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgICAgdmFyIGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgc2V0UGF0aChkLCBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpLCBlbC52YWx1ZSk7IH0pOwogICAgICByZXR1cm4gZDsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgICB2YXIgdGV4dHMgPSBbXSwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgICAgfQogICAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICAgIHZhciBtYWluID0gbnVsbDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIW1haW4pIG1haW4gPSB0ZXh0c1swXTsKICAgICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgICB2YXIgcG9zdCA9IChyYXcubWF0Y2goL1xzKiQvKSB8fCBbJyddKVswXTsKICAgICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwuaW5uZXJIVE1MID0gdjsgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuZGlzcGxheSAuaW5uZXInKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpLCBkLmhlcm8uZXllYnJvdyk7CiAgICAgIGlmIChpbm5lcnNbMF0pIHNldFRleHQoaW5uZXJzWzBdLCBkLmhlcm8ubGluZTEpOwogICAgICBpZiAoaW5uZXJzWzFdKSBzZXRUZXh0KG9uZShpbm5lcnNbMV0sICdlbScpIHx8IGlubmVyc1sxXSwgZC5oZXJvLmxpbmUyKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcubGVkZScpLCBkLmhlcm8ubGVkZSk7CgogICAgICB2YXIgbGFiZWwgPSBvbmUoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCcpOwogICAgICBzZXRUZXh0KG9uZShsYWJlbCwgJ2gyJyksIGQubGFiZWwuaDIpOwogICAgICBzZXRUZXh0KG9uZShsYWJlbCwgJy5zbC1hc2lkZScpLCBkLmxhYmVsLmFzaWRlKTsKCiAgICAgIGFsbChzY29wZSwgJy5odWItY2FyZCcpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuY2FyZHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgICBzZXRIdG1sKG9uZShhLCAnaDMnKSwgdi5oMyk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5odWItZGVzYycpLCB2LmRlc2MpOwogICAgICAgIHNldFRleHQob25lKGEsICcuaHViLWdob3N0JyksIHYuZ2hvc3QpOwogICAgICAgIHNldFRleHQob25lKGEsICcuaHViLW51bScpLCB2Lm51bSk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5odWItbGFiZWwnKSwgdi5sYWJlbCk7CiAgICAgICAgdmFyIGltID0gb25lKGEsICcuaHViLXBob3RvJyk7CiAgICAgICAgaWYgKGltKSB7IGltLnNldEF0dHJpYnV0ZSgnc3JjJywgdi5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHYuYWx0KTsgfQogICAgICB9KTsKCiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpLCBkLmZvb3ROb3RlKTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBzY29wZSwgZCkgewogICAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgdHJ5IHsgSlNPTi5wYXJzZSh4LnRleHRDb250ZW50KTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIH0pWzBdOwogICAgICBpZiAoIXMpIHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINGA0LDQt9C80LXRgtC60LgnIH07CiAgICAgIHZhciBvOwogICAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgICBjYXRjaCAoZSkgeyByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfRgNCw0LfQvNC10YLQutCwINC90LUg0YfQuNGC0LDQtdGC0YHRjzogJyArIGUubWVzc2FnZSB9OyB9CgogICAgICBzeW5jQ2Fub24ob1snQGdyYXBoJ10gfHwgW10pOwogICAgICAob1snQGdyYXBoJ10gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ0NvbGxlY3Rpb25QYWdlJyAmJiBTdHJpbmcoblsnQGlkJ10pLmluZGV4T2YoJy9ibG9nI3BhZ2UnKSA-IC0xKSB7CiAgICAgICAgICBuLm5hbWUgPSBkLnNlby5wYWdlTmFtZTsKICAgICAgICAgIG4uZGVzY3JpcHRpb24gPSBkLnNlby5wYWdlRGVzY3JpcHRpb247CiAgICAgICAgICBuLmRhdGVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgICAgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnSXRlbUxpc3QnKSB7CiAgICAgICAgICBuLm51bWJlck9mSXRlbXMgPSBkLmNhcmRzLmxlbmd0aDsKICAgICAgICAgIChuLml0ZW1MaXN0RWxlbWVudCB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobGksIGspIHsKICAgICAgICAgICAgdmFyIGl0ID0gbGkuaXRlbTsgaWYgKCFpdCkgcmV0dXJuOwogICAgICAgICAgICAvKiDQuNGJ0LXQvCDQv9C-INC_0YDQtdC20L3QtdC80YMg0LDQtNGA0LXRgdGDLCDQt9Cw0L_QuNGB0YvQstCw0LXQvCDQvdC-0LLRi9C5IOKAlCDQuNC90LDRh9C1INGB0LzQtdC90LAKICAgICAgICAgICAgICAg0YHRgdGL0LvQutC4INGA0LLRkdGCINGB0LLRj9C30Ywg0LrQsNGA0YLQvtGH0LrQuCDRgSDQtdGRINC-0L_QuNGB0LDQvdC40LXQvCDQsiDRgNCw0LfQvNC10YLQutC1ICovCiAgICAgICAgICAgIHZhciBpZHggPSAtMTsKICAgICAgICAgICAgY2ZnLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKHgsIG0pIHsgaWYgKHguaHJlZiA9PT0gaXQudXJsKSBpZHggPSBtOyB9KTsKICAgICAgICAgICAgdmFyIGMgPSBpZHggPiAtMSA_IGQuY2FyZHNbaWR4XSA6IGQuY2FyZHNba107CiAgICAgICAgICAgIGlmICghYykgcmV0dXJuOwogICAgICAgICAgICBpdC51cmwgPSBjLmhyZWY7CiAgICAgICAgICAgIGlmIChjLnNlb05hbWUpIGl0Lm5hbWUgPSBjLnNlb05hbWU7CiAgICAgICAgICAgIGl0LmRlc2NyaXB0aW9uID0gYy5kZXNjOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXZ6Jyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJyNhdnogLmh1Yi1jYXJkJykgPiAtMTsgfSlbMF07CiAgICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignI2F2eiAuaHViLWdyaWQnKSA-IC0xOyB9KVswXTsKCiAgICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6ICNhdnonKTsKICAgICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgICAgLyog0YjQsNC_0LrRgyDQsdC70L7QutCwINCx0LXRgNGR0Lwg0YHRi9GA0L7QuSDQuNC3INC40YHRhdC-0LTQvdC40LrQsDog0YHRgtGA0L7QutC4IDxoZWFkPiDRgyB3Zm9saW8g0YHQstC-0LgsCiAgICAgICAgICAg0YHQvtCx0LjRgNCw0YLRjCDQuNGFINC_0L7QuNGB0LrQvtC8INC_0L4g0LTQvtC60YPQvNC10L3RgtGDINC90LXQu9GM0LfRjyAqLwogICAgICAgIHZhciBzdGFydEF0ID0gc3JjLmluZGV4T2YoJzwhLS1cbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIEFWQU5aQVRPLlJVIOKAlCAvYmxvZycpOwogICAgICAgIHZhciBzdHlsZUF0ID0gc3JjLmluZGV4T2YoJzxzdHlsZT4nLCBzdGFydEF0KTsKICAgICAgICBpZiAoc3RhcnRBdCA8IDAgfHwgc3R5bGVBdCA8IDApIHRocm93IG5ldyBFcnJvcign0L3QtSDRg9C00LDQu9C-0YHRjCDQvtC_0YDQtdC00LXQu9C40YLRjCDQs9GA0LDQvdC40YbRiyDQsdC70L7QutCwJyk7CiAgICAgICAgdmFyIGhlYWQgPSBzcmMuc2xpY2Uoc3RhcnRBdCwgc3R5bGVBdCkudHJpbSgpOwoKICAgICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgICAvKiDQvNC10YLQutCwINC60L7QvdGG0LAg0LHQu9C-0LrQsCDRgdGC0L7QuNGCINCX0JAg0LfQsNC60YDRi9Cy0LDRjtGJ0LjQvCDRgtC10LPQvtC8LCDQv9C-0Y3RgtC-0LzRgwogICAgICAgICAgINCyIG91dGVySFRNTCDQvdC1INC_0L7Qv9Cw0LTQsNC10YIg4oCUINC30LDQsdC40YDQsNC10Lwg0LXRkSDQuNC3INC40YHRhdC-0LTQvdC40LrQsCAqLwogICAgICAgIHZhciBlbmRNYXJrID0gKHNyYy5tYXRjaCgvPFwvZGl2Pig8IS0tW14-XSotLT4pLykgfHwgW251bGwsICcnXSlbMV07CgogICAgICAgIHZhciB0ZXh0ID0gWwogICAgICAgICAgaGVhZCwKICAgICAgICAgICcnLAogICAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICBzY29wZS5vdXRlckhUTUwgKyBlbmRNYXJrLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgICAgc2NyaXB0LnRleHRDb250ZW50LnRyaW0oKSwKICAgICAgICAgICc8JyArICcvc2NyaXB0PicsCiAgICAgICAgICAnJywKICAgICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgICBsZC50ZXh0LAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JwogICAgICAgIF0uam9pbignXG4nKTsKCiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCB9OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emItb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogICAgfQoKICAgIGZ1bmN0aW9uIHdhcm5pbmdzKGQpIHsKICAgICAgdmFyIHcgPSBbXTsKICAgICAgZC5jYXJkcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgaWYgKCFjLmhyZWYpIHcucHVzaCgn0YMg0YDQsNC30LTQtdC70LAgJyArIChpICsgMSkgKyAnINC90LUg0YPQutCw0LfQsNC9INCw0LTRgNC10YEnKTsKICAgICAgICBpZiAoIWMuc2VvTmFtZSkgdy5wdXNoKCfRgyDRgNCw0LfQtNC10LvQsCAnICsgKGkgKyAxKSArICcg0L_Rg9GB0YLQvtC1INC90LDQt9Cy0LDQvdC40LUg0LIg0YDQsNC30LzQtdGC0LrQtScpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHc7CiAgICB9CgogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6Yi1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBkID0gY29sbGVjdCgpOwogICAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgICBhc3NlbWJsZShkKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAvKiDRgdCy0LXRgNGP0LXQvDog0LLRgdGRINC70Lgg0LLQstC10LTRkdC90L3QvtC1INC00LXQudGB0YLQstC40YLQtdC70YzQvdC-INC_0L7Qv9Cw0LvQviDQsiDQutC-0LQgKi8KICAgICAgICB2YXIgZG9jMiA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYzIucXVlcnlTZWxlY3RvcignI2F2eicpKTsKICAgICAgICBpZiAoYWdhaW4pIHJlYWRMZChkb2MyLCBhZ2Fpbik7CiAgICAgICAgdmFyIG5vdExhbmRlZCA9IGFnYWluID8gbGFuZGVkKGQsIGFnYWluLCAvXiQvKSA6IFsn0YHRgtGA0LDQvdC40YbQsCDQvdC1INGA0LDQt9C-0LHRgNCw0LvQsNGB0YwnXTsKICAgICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0Log0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgICB2YXIgdyA9IHdhcm5pbmdzKGQpOwogICAgICAgIGlmIChub3RMYW5kZWQubGVuZ3RoKSB3LnB1c2goJ9Cd0JUg0JfQkNCf0JjQodCQ0JvQntCh0Kwg0LIg0LrQvtC0OiAnICsgbm90TGFuZGVkLnNsaWNlKDAsIDYpLmpvaW4oJywgJykgKwogICAgICAgICAgKG5vdExhbmRlZC5sZW5ndGggPiA2ID8gJyDQuCDQtdGJ0ZEgJyArIChub3RMYW5kZWQubGVuZ3RoIC0gNikgOiAnJykpOwogICAgICAgIGlmICh3Lmxlbmd0aCkgbm90ZSArPSAnINCf0YDQvtCy0LXRgNGM0YLQtTogJyArIHcuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emItdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MucXVlcnlTZWxlY3RvcignI2F2eicpKTsKICAgICAgICByZWFkTGQoZG9jLCBhZ2Fpbik7CiAgICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShzbmFwKSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgICBpZiAoYSA9PT0gYikgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0LHRi9C70L4nLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cf0YDQvtCy0LXRgNC60LAg0L3QtSDQv9GA0L7RiNC70LA6ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CiAgfQoKICBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXZ6Jyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgI2F2eicpOwogICAgY2ZnID0gcmVhZENmZyhzY29wZSk7CiAgICByZWFkTGQoZG9jLCBjZmcpOwogICAgc3RhcnQoKTsKICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgcm9vdC5pbm5lckhUTUwgPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnpiLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpiLWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0LHQu9C-0LPQsDwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpiLWJvZHkiPjxwIGNsYXNzPSJhdnpiLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINCx0LvQvtCz0LAg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6InZpZGVvIix0aXRsZToi0J_QsNC90LXQu9GMINCy0LjQtNC10L7RgdGK0ZHQvNC60LgiLHNob3J0OiLQktC40LTQtdC-IixoaW50OiLRgNC-0LvQuNC60LgsINGC0LXQutGB0YLRiywg0YDQsNC30LzQtdGC0LrQsCDQstC40LTQtdC-IixwYWdlczpbIi92aWRlb19zaG9vdGluZ19rYXphbiJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQktCY0JTQldCe0KHQqtCB0JzQmtCYICB2MSDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvdmlkZW9fc2hvb3Rpbmdfa2F6YW4KCiAgINCj0YHRgtGA0L7QudGB0YLQstC-INGB0YLRgNCw0L3QuNGG0Ysg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0L7RgiDQvtGB0YLQsNC70YzQvdGL0YU6INC60LDRgNGC0L7Rh9C60Lgg0YDQvtC70LjQutC-0LIKICAg0L3QtSDQvdCw0L_QuNGB0LDQvdGLINCyINGA0LDQt9C80LXRgtC60LUsINCwINGB0YLRgNC-0Y_RgtGB0Y8g0YHQutGA0LjQv9GC0L7QvCDQuNC3INC80LDRgdGB0LjQstCwCiAgIGB2YXIgdmlkZW9zID0gWy4uLl1gLiDQn9C-0Y3RgtC-0LzRgyDQv9Cw0L3QtdC70Ywg0L_RgNCw0LLQuNGCINC80LDRgdGB0LjQsiDQsiDRgdC60YDQuNC_0YLQtSwKICAg0LAg0L3QtSBET00uCgogICDQoNCw0LfQvNC10YLQutCwIFZpZGVvT2JqZWN0INC00LXRgNC20LjRgtGB0Y8g0LLQvNC10YHRgtC1INGBINC70LXQvdGC0L7QuTog0YPQt9C70YsKICAg0YHQvtC_0L7RgdGC0LDQstC70Y_RjtGC0YHRjyDRgSDRgNC-0LvQuNC60LDQvNC4INC_0L4g0LDQtNGA0LXRgdGDINGE0LDQudC70LAgKGNvbnRlbnRVcmwpLAogICDQsCDQvdC1INC_0L4g0L_QvtGA0Y_QtNC60YMg4oCUINC_0L7RgNGP0LTQvtC6INC80L7QttC90L4g0LzQtdC90Y_RgtGMLCDRgNC-0LvQuNC60Lgg0LTQvtCx0LDQstC70Y_RgtGMLgoKICAg0JfQvdCw0YfQtdC90LjRjyDRh9C40YLQsNGO0YLRgdGPINC40Lcg0JjQodCl0J7QlNCd0J7Qk9CeINC60L7QtNCwINGB0YLRgNCw0L3QuNGG0YssINCwINC90LUg0LjQtyDQttC40LLQvtCz0L4KICAgRE9NOiDRgdC60YDQuNC_0YLRiyB3Zm9saW8g0L_RgNCw0LLRj9GCINGA0LDQt9C80LXRgtC60YMg0LIg0LHRgNCw0YPQt9C10YDQtSwg0Lgg0Y3RgtC4INC_0YDQsNCy0LrQuAogICDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNC00LDRgtGMINCyINCy0LDRiCDQutC-0LQuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0KPQt9C70YsgI3Bob3RvZ3JhcGhlciwgI2J1c2luZXNzINC4ICN3ZWJzaXRlINC-0L_QuNGB0YvQstCw0Y7RgiDQvtC00L3QvtCz0L4g0Lgg0YLQvtCz0L4g0LbQtQogICAgINGH0LXQu9C-0LLQtdC60LAsINC-0LTQvdC-INC00LXQu9C-INC4INC-0LTQuNC9INGB0LDQudGCLiDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuQogICAgINC_0L4t0YDQsNC30L3QvtC80YMg0L3QsCDRgNCw0LfQvdGL0YUg0YHRgtGA0LDQvdC40YbQsNGFLCDigJQg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQugogICAgINC4INCY0Jgg0LLRi9Cx0LjRgNCw0Y7RgiDRgdCw0LzQuCwg0LrQsNC60L7QuSDQstC10YDRgdC40Lgg0LLQtdGA0LjRgtGMLCDQuCDQvdCw0LPRgNCw0LTRiyDQvNC-0LPRg9GCINC_0YDQvtGB0YLQvgogICAgINC90LUg0LfQsNGB0YfQuNGC0LDRgtGM0YHRjy4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0LjRhSDQuiDRjdGC0LDQu9C-0L3RgyDQv9GA0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQtSwKICAgICDQv9C-0Y3RgtC-0LzRgyDRgNCw0YHRhdC-0LTQuNGC0YzRgdGPINC40Lwg0LHQvtC70YzRiNC1INC90LXRh9C10LwuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAyNCDQsNCy0LPRg9GB0YLQsCAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgLyog0KHRgdGL0LvQutCwINC90LAg0YjRgNC40YTRgtGLINCx0LvQvtC60LA6IEpvc3Qg0LggUnViaWsg0L3Rg9C20L3Ri9GFINC90LDRh9C10YDRgtCw0L3QuNC5INC_0LvRjtGBCiAgICAgTWF0ZXJpYWwgU3ltYm9scyDQtNC70Y8g0LfQvdCw0YfQutC-0LIuINCU0LXRgNC20LjQvCDQutC-0L_QuNGOINC30LTQtdGB0Ywg0L3QsCDRgdC70YPRh9Cw0LksINC10YHQu9C4CiAgICAg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC10ZEg0L3QtSDQvtGB0YLQsNC70L7RgdGMIOKAlCDQuNC90LDRh9C1INCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQsdGD0LTQtdGCINC90LXRh9C10LwuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMjAwOzMwMDs0MDA7NTAwJyArCiAgICAnJmFtcDtmYW1pbHk9UnViaWs6aXRhbCx3Z2h0QDAsMTAwOzAsMjAwOzAsMzAwOzEsMjAwJyArCiAgICAnJmFtcDtmYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDI0LDMwMCwwLDAnICsKICAgICcmYW1wO2Rpc3BsYXk9YmxvY2siIHJlbD0ic3R5bGVzaGVldCI-JzsKCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTkiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogItC-0YIgMTQgOTAwIOKCvSIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI2LTEyLTMxIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enYtcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXYtdmlkZW9zJykpIHsKICAgIGFsZXJ0KCdBVlo6INC90LAg0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbQtSDQvdC10YIg0LHQu9C-0LrQsCAuYXYtdmlkZW9zJyk7CiAgICByZXR1cm47CiAgfQoKICBmdW5jdGlvbiBvbmUoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWwpOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9IH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGh0bWwoZWwpIHsgcmV0dXJuIGVsID8gZWwuaW5uZXJIVE1MIDogJyc7IH0KICBmdW5jdGlvbiBvd25UZXh0KGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgcyA9ICcnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSBzICs9IGVsLmNoaWxkTm9kZXNbaV0ubm9kZVZhbHVlOwogICAgfQogICAgcmV0dXJuIHMucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogIH0KCiAgdmFyIGNmZyA9IG51bGw7CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUgLS0tLS0tLS0tLSAqLwoKICAvKiDQnNCw0YHRgdC40LIg0YDQvtC70LjQutC-0LIg0LvQtdC20LjRgiDQsiDRgdC60YDQuNC_0YLQtSDRgdGC0YDQsNC90LjRhtGLLiDQoNCw0LfQsdC40YDQsNC10Lwg0LXQs9C-INC_0L4g0L_QvtC70Y_QvCwKICAgICDQvdC1INCy0YvQv9C-0LvQvdGP0Y8g0LrQvtC0OiDQstGL0L_QvtC70L3Rj9GC0Ywg0YfRg9C20L7QuSDRgtC10LrRgdGCINGA0LDQtNC4INGH0YLQtdC90LjRjyDigJQg0L_Qu9C-0YXQsNGPINC40LTQtdGPLiAqLwogIGZ1bmN0aW9uIHJlYWRWaWRlb3Moc3JjKSB7CiAgICB2YXIgbSA9IHNyYy5tYXRjaCgvdmFyIHZpZGVvcyA9IFxbKFtcc1xTXSo_KVxuXHMqXF07Lyk7CiAgICBpZiAoIW0pIHJldHVybiBbXTsKICAgIHZhciBvdXQgPSBbXTsKICAgIC8qINCg0LDQt9Cx0LjRgNCw0LXQvCDQv9C-INC-0LTQvdC-0Lkg0LfQsNC_0LjRgdC4INC4INC00L7RgdGC0LDRkdC8INC_0L7Qu9GPINC_0L4g0LjQvNC10L3QuDog0YMg0L_RgNC10LbQvdC40YUKICAgICAgINGA0L7Qu9C40LrQvtCyINC_0L7Qu9C10Lkg0YfQtdGC0YvRgNC1LCDRgyDQvdC-0LLRi9GFINGI0LXRgdGC0YwsINC4INC_0L7RgNGP0LTQvtC6INC80L7QttC10YIg0LjQt9C80LXQvdC40YLRjNGB0Y8uCiAgICAgICDQltGR0YHRgtC60LDRjyDQv9C-0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Ywg0L_QvtC70LXQuSDQu9C-0LzQsNC70LDRgdGMINCx0Ysg0L3QsCDQv9C10YDQstC-0Lkg0L_RgNCw0LLQutC1LiAqLwogICAgdmFyIHJlID0gL1×7KFtee31dKilcfS9nLCBoaXQ7CiAgICAvKiBudWxsINC30L3QsNGH0LjRgiDCq9C_0L7Qu9GPINC90LXRgiDQstC-0LLRgdC1wrsg4oCUINGC0LDQutC-0Lkg0YDQvtC70LjQuiDQt9Cw0L_QuNGB0LDQvSDQv9C-LdGB0YLQsNGA0L7QvNGDINC4CiAgICAgICDQvtCx0LvQvtC20LrRgyDQvdCw0LTQviDQstC30Y_RgtGMINC40Lcg0YDQsNC30LzQtdGC0LrQuC4g0J_Rg9GB0YLQsNGPINGB0YLRgNC-0LrQsCDQt9C90LDRh9C40YIg0LTRgNGD0LPQvtC1OgogICAgICAg0L_QvtC70LUg0LXRgdGC0Ywg0Lgg0L7RgdGC0LDQstC70LXQvdC-INC_0YPRgdGC0YvQvCDQvdCw0LzQtdGA0LXQvdC90L4sINC_0L7QtNGB0YLQsNCy0LvRj9GC0Ywg0YLRg9C00LAg0L3QtdGH0LXQs9C-LiAqLwogICAgZnVuY3Rpb24gcGljayhib2R5LCBrZXkpIHsKICAgICAgdmFyIG0yID0gYm9keS5tYXRjaChuZXcgUmVnRXhwKGtleSArICI6XFxzKicoKD86W14nXFxcXF18XFxcXC4pKiknIikpOwogICAgICByZXR1cm4gbTIgPyBtMlsxXS5yZXBsYWNlKC9cXCcvZywgIiciKS5yZXBsYWNlKC9cXFxcL2csICdcXCcpIDogbnVsbDsKICAgIH0KICAgIHdoaWxlICgoaGl0ID0gcmUuZXhlYyhtWzFdKSkpIHsKICAgICAgdmFyIGIgPSBoaXRbMV07CiAgICAgIGlmICghL3VybDovLnRlc3QoYikpIGNvbnRpbnVlOwogICAgICBvdXQucHVzaCh7CiAgICAgICAgdXJsOiBwaWNrKGIsICd1cmwnKSB8fCAnJywgdGl0bGU6IHBpY2soYiwgJ3RpdGxlJykgfHwgJycsCiAgICAgICAgc3ViOiBwaWNrKGIsICdzdWInKSB8fCAnJywgYWx0OiBwaWNrKGIsICdhbHQnKSB8fCAnJywKICAgICAgICBwb3N0ZXI6IHBpY2soYiwgJ3Bvc3RlcicpLCBmbXQ6IHBpY2soYiwgJ2ZtdCcpID09PSAnaCcgPyAnaCcgOiAndicKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyog0JTQu9C40YLQtdC70YzQvdC-0YHRgtGMINCyINGA0LDQt9C80LXRgtC60LUg0L_QuNGI0LXRgtGB0Y8g0LrQsNC6IFBUMzBTIOKAlCDRh9C10LvQvtCy0LXQutGDINGD0LTQvtCx0L3QtdC1CiAgICAg0YHQtdC60YPQvdC00LDQvNC4LCDQv9C-0Y3RgtC-0LzRgyDQsiDQv9Cw0L3QtdC70Lgg0L_QvtC60LDQt9GL0LLQsNC10Lwg0YfQuNGB0LvQviwg0LAg0L3QsNGA0YPQttGDINC-0YLQtNCw0ZHQvAogICAgINCyINGC0L7QvCDQstC40LTQtSwg0LrQvtGC0L7RgNC-0LPQviDQttC00ZHRgiDQv9C-0LjRgdC60L7QstC40LouICovCiAgZnVuY3Rpb24gaXNvVG9TZWModikgewogICAgaWYgKCF2KSByZXR1cm4gJyc7CiAgICB2YXIgbSA9IFN0cmluZyh2KS5tYXRjaCgvXlBUKD86KFxkKylNKT8oPzooXGQrKVMpPyQvKTsKICAgIGlmICghbSkgcmV0dXJuICcnOwogICAgcmV0dXJuIFN0cmluZygocGFyc2VJbnQobVsxXSB8fCAwLCAxMCkgKiA2MCkgKyBwYXJzZUludChtWzJdIHx8IDAsIDEwKSk7CiAgfQogIGZ1bmN0aW9uIHNlY1RvSXNvKHYpIHsKICAgIHZhciBzID0gcGFyc2VJbnQoU3RyaW5nKHYpLnJlcGxhY2UoL1xEL2csICcnKSwgMTApOwogICAgaWYgKCFzIHx8IHMgPCAxKSByZXR1cm4gJyc7CiAgICByZXR1cm4gcyA-PSA2MCA_ICdQVCcgKyBNYXRoLmZsb29yKHMgLyA2MCkgKyAnTScgKyAocyAlIDYwKSArICdTJyA6ICdQVCcgKyBzICsgJ1MnOwogIH0KCiAgZnVuY3Rpb24gcmVhZENmZyhkb2MsIHNyYykgewogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi12aWRlb3MnKTsKICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIGxhYmVscyA9IGFsbChzY29wZSwgJy5zZWN0aW9uLWxhYmVsJyk7CiAgICB2YXIgdmlkcyA9IHJlYWRWaWRlb3Moc3JjKTsKCiAgICAvKiDRgNCw0LfQvNC10YLQutCwINGA0L7Qu9C40LrQvtCyIOKAlCDRgdC-0L_QvtGB0YLQsNCy0LvRj9C10Lwg0L_QviDQsNC00YDQtdGB0YMg0YTQsNC50LvQsCAqLwogICAgdmFyIGJ5VXJsID0ge307CiAgICB0cnkgewogICAgICB2YXIgbGQgPSBKU09OLnBhcnNlKG9uZShkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJykudGV4dENvbnRlbnQpOwogICAgICAobGRbJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdWaWRlb09iamVjdCcgJiYgbi5jb250ZW50VXJsKSBieVVybFtuLmNvbnRlbnRVcmxdID0gbjsKICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINGA0LDQt9Cx0LXRgNGR0LzRgdGPINC_0YDQuCDRgdCx0L7RgNC60LUgKi8gfQoKICAgIHZpZHMuZm9yRWFjaChmdW5jdGlvbiAodikgewogICAgICB2YXIgbiA9IGJ5VXJsW3YudXJsXSB8fCB7fTsKICAgICAgdi5zZW9OYW1lID0gbi5uYW1lIHx8ICcnOwogICAgICB2LnNlb0Rlc2MgPSBuLmRlc2NyaXB0aW9uIHx8ICcnOwogICAgICAvKiDQntCx0LvQvtC20LrQsCDRgtC10L_QtdGA0Ywg0L7QtNC90LAg0L3QsCDQtNCy0LAg0LTQtdC70LA6INC10ZEg0LLQuNC00L3QviDQvdCwINC60LDRgNGC0L7Rh9C60LUg0Lgg0LXRkSDQttC1CiAgICAgICAgINC30LDQsdC40YDQsNC10YIg0L_QvtC40YHQutC-0LLQuNC6LiDQmNC3INGA0LDQt9C80LXRgtC60Lgg0L_QvtC00YLRj9Cz0LjQstCw0LXQvCDRgtC-0LvRjNC60L4g0YLQvtCz0LTQsCwg0LrQvtCz0LTQsAogICAgICAgICDQsiDRgdC_0LjRgdC60LUg0YDQvtC70LjQutC-0LIg0L_QvtC70Y8g0L3QtdGCINGB0L7QstGB0LXQvCwg4oCUINGC0L4g0LXRgdGC0Ywg0YDQvtC70LjQuiDQt9Cw0L_QuNGB0LDQvSDQv9C-CiAgICAgICAgINGB0YLQsNGA0L7QvNGDINC-0LHRgNCw0LfRhtGDLiDQn9GD0YHRgtC-0LUg0L_QvtC70LUg0L7RgdGC0LDQstC70Y_QtdC8INC_0YPRgdGC0YvQvDog0LXQs9C-INGC0LDQuiDQvtGB0YLQsNCy0LjQu9C4LiAqLwogICAgICBpZiAodi5wb3N0ZXIgPT09IG51bGwpIHYucG9zdGVyID0gbi50aHVtYm5haWxVcmwgfHwgJyc7CiAgICAgIHYuZGF0ZSA9IG4udXBsb2FkRGF0ZSB8fCAnJzsKICAgICAgdi5kdXIgPSBpc29Ub1NlYyhuLmR1cmF0aW9uKTsKICAgICAgdi5pblNjaGVtYSA9ICEhYnlVcmxbdi51cmxdOwogICAgfSk7CgogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZTogdChvbmUoc2NvcGUsICcuaGVyby1leWUnKSksCiAgICAgICAgbGluZTE6IHQobGluZXNbMF0pLAogICAgICAgIGxpbmUyOiB0KGxpbmVzWzFdKSwKICAgICAgICBsaW5lMzogbGluZXNbMl0gPyB0KG9uZShsaW5lc1syXSwgJ2VtJykgfHwgbGluZXNbMl0pIDogJycsCiAgICAgICAgbGVkZTogaHRtbChvbmUoc2NvcGUsICcubGVkZScpKSwKICAgICAgICBtZXRhOiBhbGwoc2NvcGUsICcuaGVyby1tZXRhID4gZGl2JykubWFwKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICByZXR1cm4geyBrZXk6IHQob25lKGQsICcuaG0ta2V5JykpLCB2YWw6IGh0bWwob25lKGQsICcuaG0tdmFsJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgd29ya3M6IHsKICAgICAgICBoZWFkOiB0KG9uZShsYWJlbHNbMF0sICdoMicpKSwKICAgICAgICBhc2lkZTogb3duVGV4dChvbmUobGFiZWxzWzBdLCAnLnNsLWFzaWRlJykpLAogICAgICAgIGhpbnQ6IG93blRleHQob25lKHNjb3BlLCAnLnNjcm9sbC1oaW50JykpLAogICAgICAgIGl0ZW1zOiB2aWRzCiAgICAgIH0sCiAgICAgIGN0YTogewogICAgICAgIGhlYWQ6IHQob25lKGxhYmVsc1sxXSwgJ2gyJykpLAogICAgICAgIGV5ZTogdChvbmUoc2NvcGUsICcuY3RhLWV5ZScpKSwKICAgICAgICB0aXRsZTogaHRtbChvbmUoc2NvcGUsICcuY3RhLXRpdGxlJykpLAogICAgICAgIHN1YjogaHRtbChvbmUoc2NvcGUsICcuY3RhLXN1YicpKSwKICAgICAgICBwaWxsczogYWxsKHNjb3BlLCAnLmN0YS1waWxsJykubWFwKGZ1bmN0aW9uIChwKSB7IHJldHVybiBvd25UZXh0KHApOyB9KSwKICAgICAgICBidXR0b25zOiBhbGwoc2NvcGUsICcuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKVswXSksIGhyZWY6IGIuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfTsKICAgICAgICB9KSwKICAgICAgICBoaW50OiB0KG9uZShzY29wZSwgJy5jdGEtaGludCcpKQogICAgICB9LAogICAgICBtZXRhOiB7CiAgICAgICAgbmFtZTogJycsCiAgICAgICAgZGVzYzogJycKICAgICAgfQogICAgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0L7QutC90L4gLS0tLS0tLS0tLSAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnp2LXJvb3QsI2F2enYtcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2enYtcm9vdCBpbnB1dCwjYXZ6di1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6di1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2enYtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6di13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnp2LWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enYtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2enYtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6di1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6di1yb290IC5hdnp2LXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6di1yb290IC5hdnp2LXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1mIGlucHV0LCNhdnp2LXJvb3QgLmF2enYtZiB0ZXh0YXJlYSwjYXZ6di1yb290IC5hdnp2LWYgc2VsZWN0e3dpZHRoOjEwMCU7Zm9udDppbmhlcml0OycsCiAgICAncGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NjRweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6di1yb290IC5hdnp2LXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2enYtcm9vdCAuYXZ6di1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6di13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWNhcmQud2Fybntib3JkZXItY29sb3I6I2M4YTAyMDtiYWNrZ3JvdW5kOiNmZmZkZjR9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWNhcmQgaDR7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtY2FyZCBoNCBie2NvbG9yOiNhMzc4MDAgIWltcG9ydGFudH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtY2FyZCBoNHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWNhcmQgaDQgLmF2enYtb3Bze21hcmdpbi1sZWZ0OmF1dG87ZGlzcGxheTpmbGV4O2dhcDo2cHg7ZmxleDpub25lfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1vcHMgYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweCAhaW1wb3J0YW50O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjZweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6MS4zfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1vcHMgYnV0dG9uOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1vcHMgYnV0dG9uW2Rpc2FibGVkXXtvcGFjaXR5Oi4zNTtjdXJzb3I6ZGVmYXVsdH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtb3BzIGJ1dHRvbi5kZWw6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjMDM5MmI7Y29sb3I6I2MwMzkyYiAhaW1wb3J0YW50fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1hZGR7bWFyZ2luOjJweCAwIDZweDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggZGFzaGVkICNiNmI2YmI7JywKICAgICdiYWNrZ3JvdW5kOiNmZmY7Zm9udDppbmhlcml0O2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1hZGQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMxZDFkMWY7Ym9yZGVyLXN0eWxlOnNvbGlkfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWltZz5pbWd7d2lkdGg6NjBweDtoZWlnaHQ6OTZweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWltZyAuZ3tmbGV4OjF9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnp2LW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtd2Fybntmb250LXNpemU6MTJweDtjb2xvcjojYTM3ODAwICFpbXBvcnRhbnQ7bWFyZ2luOjZweCAwIDA7bWluLWhlaWdodDowfScsCiAgICAnI2F2enYtbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICAvKiDQu9C40YjQvdC40Lkg0L_QtdGA0LXQvdC-0YE6INCx0YDQsNGD0LfQtdGAINGB0YrQtdC00LDQtdGCINC_0LXRgNCy0YvQuSDQv9C-0YHQu9C1IDx0ZXh0YXJlYT4gKi8KICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj5cbicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6di1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2enYtcm9vdCc7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsgc2NydWIoZS50YXJnZXQpOyB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNjcnViKGVsKTsgfSwgMCk7CiAgICB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhJyksIG4gPSAwLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSBuICs9IHNjcnViKGVsc1tpXSk7CiAgICAgIGlmIChuKSBjb25zb2xlLndhcm4oJ0FWWjog0YPQsdGA0LDQvdGLINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyDRgNC10LTQsNC60YLQvtGA0LAsINC_0L7Qu9C10Lk6ICcgKyBuKTsKICAgIH0sIHRydWUpOwogIH0pKCk7CgogIGZ1bmN0aW9uIG1zZyhzKSB7IHZhciBlID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6di1tc2cnKTsgaWYgKGUpIGUudGV4dENvbnRlbnQgPSBzOyB9CgogIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnp2LXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnp2LWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0LLQuNC00LXQvtGB0YrRkdC80LrQuDwvaDI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnp2LWIiIGlkPSJhdnp2LWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImF2enYtYm9keSI-JzsKCiAgICAvKiDQoNCe0JvQmNCa0JggKi8KICAgIHZhciBub1NjaGVtYSA9IGNmZy53b3Jrcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICF2LmluU2NoZW1hOyB9KS5sZW5ndGg7CiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6di1zZWMiIG9wZW4-PHN1bW1hcnk-0KDQvtC70LjQutC4ICgnICsgY2ZnLndvcmtzLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enYtaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enYtaGludCI-0JrQsNGA0YLQvtGH0LrQuCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0YHRgtGA0L7QuNGCINGB0LrRgNC40L_RgiDQuNC3INGB0L_QuNGB0LrQsCDQvdC40LbQtS4gJyArCiAgICAgICfQoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0L7QsdC40YDQsNC10YLRgdGPINC40Lcg0Y3RgtC-0LPQviDQttC1INGB0L_QuNGB0LrQsCDigJQg0YDQsNC30L7QudGC0LjRgdGMINC40Lwg0L3QtdGH0LXQvC4nICsKICAgICAgKG5vU2NoZW1hID8gJyA8Yj7QoNC-0LvQuNC60L7QsiDQsdC10Lcg0L7Qv9C40YHQsNC90LjRjyDQtNC70Y8g0L_QvtC40YHQutCwOiAnICsgbm9TY2hlbWEgKyAnPC9iPiDigJQg0L7QvdC4INC-0YLQvNC10YfQtdC90Ysg0LbRkdC70YLRi9C8LicgOiAnJykgKwogICAgICAnPC9wPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6di1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0LIg0LvQtdC90YLQtScsICd3b3Jrcy5oZWFkJywgY2ZnLndvcmtzLmhlYWQpICsKICAgICAgZmllbGQoJ9Cf0L7QvNC10YLQutCwINGB0L_RgNCw0LLQsCcsICd3b3Jrcy5hc2lkZScsIGNmZy53b3Jrcy5hc2lkZSkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQn9C-0LTRgdC60LDQt9C60LAg0L4g0YHQstCw0LnQv9C1ICjQvdCwINGC0LXQu9C10YTQvtC90LUpJywgJ3dvcmtzLmhpbnQnLCBjZmcud29ya3MuaGludCk7CgogICAgY2ZnLndvcmtzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHsKICAgICAgdmFyIGxhc3QgPSBjZmcud29ya3MuaXRlbXMubGVuZ3RoIC0gMTsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6di1jYXJkJyArICh2LmluU2NoZW1hID8gJycgOiAnIHdhcm4nKSArICciPjxoND48c3Bhbj7QoNC-0LvQuNC6ICcgKyAoaSArIDEpICsKICAgICAgICAodi5pblNjaGVtYSA_ICcnIDogJyDigJQgPGI-0L3QtdGCINC-0L_QuNGB0LDQvdC40Y8g0LTQu9GPINC_0L7QuNGB0LrQsDwvYj4nKSArICc8L3NwYW4-JyArCiAgICAgICAgJzxzcGFuIGNsYXNzPSJhdnp2LW9wcyI-JyArCiAgICAgICAgJzxidXR0b24gZGF0YS1hY3Q9InVwIiBkYXRhLWk9IicgKyBpICsgJyIgdGl0bGU9ItCS0YvRiNC1INCyINC70LXQvdGC0LUiJyArIChpID09PSAwID8gJyBkaXNhYmxlZCcgOiAnJykgKyAnPlx1MjE5MTwvYnV0dG9uPicgKwogICAgICAgICc8YnV0dG9uIGRhdGEtYWN0PSJkb3duIiBkYXRhLWk9IicgKyBpICsgJyIgdGl0bGU9ItCd0LjQttC1INCyINC70LXQvdGC0LUiJyArIChpID09PSBsYXN0ID8gJyBkaXNhYmxlZCcgOiAnJykgKyAnPlx1MjE5MzwvYnV0dG9uPicgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJkZWwiIGRhdGEtYWN0PSJkZWwiIGRhdGEtaT0iJyArIGkgKyAnIiB0aXRsZT0i0KPQsdGA0LDRgtGMINGA0L7Qu9C40Log0YHQviDRgdGC0YDQsNC90LjRhtGLIj7Qo9C00LDQu9C40YLRjDwvYnV0dG9uPicgKwogICAgICAgICc8L3NwYW4-PC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6di1yb3ciPicgKyBmaWVsZCgn0JjQvNGPINC90LAg0LrQsNGA0YLQvtGH0LrQtScsICd3b3Jrcy5pdGVtcy4nICsgaSArICcudGl0bGUnLCB2LnRpdGxlKSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC90LAg0LrQsNGA0YLQvtGH0LrQtScsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuc3ViJywgdi5zdWIpICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBINCy0LjQtNC10L7RhNCw0LnQu9CwJywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy51cmwnLCB2LnVybCkgKwogICAgICAgIGZpZWxkKCdBbHQt0YLQtdC60YHRgicsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuYWx0Jywgdi5hbHQpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6di1yb3ciPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnp2LWYiPjxsYWJlbD7QpNC-0YDQvNCw0YIg0LrQsNC00YDQsDwvbGFiZWw-PHNlbGVjdCBkYXRhLXA9IndvcmtzLml0ZW1zLicgKyBpICsgJy5mbXQiPicgKwogICAgICAgICc8b3B0aW9uIHZhbHVlPSJ2IicgKyAodi5mbXQgPT09ICdoJyA_ICcnIDogJyBzZWxlY3RlZCcpICsgJz7QktC10YDRgtC40LrQsNC70YzQvdGL0LkgOToxNjwvb3B0aW9uPicgKwogICAgICAgICc8b3B0aW9uIHZhbHVlPSJoIicgKyAodi5mbXQgPT09ICdoJyA_ICcgc2VsZWN0ZWQnIDogJycpICsgJz7QqNC40YDQvtC60LjQuSAxNjo5PC9vcHRpb24-JyArCiAgICAgICAgJzwvc2VsZWN0PjwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQlNC70LjRgtC10LvRjNC90L7RgdGC0YwsINGB0LXQutGD0L3QtCcsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuZHVyJywgdi5kdXIpICsgJzwvZGl2PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnp2LWYiPjxsYWJlbD7QntCx0LvQvtC20LrQsCDigJQg0LLQuNC00L3QsCDQvdCwINC60LDRgNGC0L7Rh9C60LUg0Lgg0LIg0L_QvtC40YHQutC1PC9sYWJlbD48ZGl2IGNsYXNzPSJhdnp2LWltZyI-JyArCiAgICAgICAgJzxpbWcgc3JjPSInICsgZXNjKHYucG9zdGVyKSArICciIGRhdGEtcHJldj0id29ya3MuaXRlbXMuJyArIGkgKyAnLnBvc3RlciI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPjxpbnB1dCBkYXRhLXA9IndvcmtzLml0ZW1zLicgKyBpICsgJy5wb3N0ZXIiIHZhbHVlPSInICsgZXNjKHYucG9zdGVyKSArICciPicgKwogICAgICAgICc8cCBjbGFzcz0iYXZ6di1oaW50IiBzdHlsZT0ibWFyZ2luOjZweCAwIDAiPtCR0LXQtyDQvtCx0LvQvtC20LrQuCDQutCw0YDRgtC-0YfQutCwINCy0L7Qt9GM0LzRkdGCINC60LDQtNGAINC40Lcg0YHQsNC80L7Qs9C-INGE0LDQudC70LAg4oCUICcgKwogICAgICAgICfRjdGC0L4g0LvQuNGI0L3QuNC1INC00LLQsCDQvNC10LPQsNCx0LDQudGC0LAg0YMg0LrQsNC20LTQvtCz0L4g0L_QvtGB0LXRgtC40YLQtdC70Y8uPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iYXZ6di13YXJuIiBkYXRhLXdhcm49IicgKyBpICsgJyI-PC9wPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INC00LvRjyDQv9C-0LjRgdC60LAnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLnNlb05hbWUnLCB2LnNlb05hbWUpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQtNC70Y8g0L_QvtC40YHQutCwJywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5zZW9EZXNjJywgdi5zZW9EZXNjLCAnYXJlYScpICsKICAgICAgICBmaWVsZCgn0JTQsNGC0LAg0L_Rg9Cx0LvQuNC60LDRhtC40LggKNCT0JPQk9CTLdCc0Jwt0JTQlCDQuNC70Lgg0JPQk9CT0JMpJywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5kYXRlJywgdi5kYXRlKSArCiAgICAgICAgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzxidXR0b24gY2xhc3M9ImF2enYtYWRkIiBkYXRhLWFjdD0iYWRkIj4rINCU0L7QsdCw0LLQuNGC0Ywg0YDQvtC70LjQujwvYnV0dG9uPic7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQqNCQ0J_QmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6di1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6di1pbiI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5leWUnLCBjZmcuaGVyby5leWUpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enYtcm93Ij4nICsgZmllbGQoJ9Ch0YLRgNC-0LrQsCAxJywgJ2hlcm8ubGluZTEnLCBjZmcuaGVyby5saW5lMSkgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDInLCAnaGVyby5saW5lMicsIGNmZy5oZXJvLmxpbmUyKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAzICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTMnLCBjZmcuaGVyby5saW5lMykgKwogICAgICBmaWVsZCgn0J_QvtC00LfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDtzdHJvbmcmZ3Q7KScsICdoZXJvLmxlZGUnLCBjZmcuaGVyby5sZWRlLCAnYXJlYScpOwogICAgY2ZnLmhlcm8ubWV0YS5mb3JFYWNoKGZ1bmN0aW9uIChtLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enYtY2FyZCI-PGg0PtCh0YLRgNC-0LrQsCDRgdC_0YDQsNCy0LAgJyArIChpICsgMSkgKyAnPC9oND48ZGl2IGNsYXNzPSJhdnp2LXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ2hlcm8ubWV0YS4nICsgaSArICcua2V5JywgbS5rZXkpICsKICAgICAgICBmaWVsZCgn0JfQvdCw0YfQtdC90LjQtSAo0LzQvtC20L3QviAmbHQ7ZW0mZ3Q7KScsICdoZXJvLm1ldGEuJyArIGkgKyAnLnZhbCcsIG0udmFsKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQn9Cg0JjQl9Cr0JIgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnp2LXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enYtaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6di1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0LIg0LvQtdC90YLQtScsICdjdGEuaGVhZCcsIGNmZy5jdGEuaGVhZCkgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2N0YS5leWUnLCBjZmcuY3RhLmV5ZSkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyDQuCAmbHQ7ZW0mZ3Q7KScsICdjdGEudGl0bGUnLCBjZmcuY3RhLnRpdGxlKSArCiAgICAgIGZpZWxkKCfQotC10LrRgdGCICjQvNC-0LbQvdC-ICZsdDtzdHJvbmcmZ3Q7KScsICdjdGEuc3ViJywgY2ZnLmN0YS5zdWIsICdhcmVhJyk7CiAgICBjZmcuY3RhLnBpbGxzLmZvckVhY2goZnVuY3Rpb24gKHAsIGkpIHsKICAgICAgaCArPSBmaWVsZCgn0JzQtdGC0LrQsCAnICsgKGkgKyAxKSwgJ2N0YS5waWxscy4nICsgaSwgcCk7CiAgICB9KTsKICAgIGNmZy5jdGEuYnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uIChiLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enYtY2FyZCI-PGg0PtCa0L3QvtC_0LrQsCAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2enYtcm93Ij4nICsKICAgICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdjdGEuYnV0dG9ucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy5ocmVmJywgYi5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQodGC0YDQvtC60LAg0L_QvtC0INC60L3QvtC_0LrQsNC80LgnLCAnY3RhLmhpbnQnLCBjZmcuY3RhLmhpbnQpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enYtZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnp2LWIgcCIgaWQ9ImF2enYtYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnp2LWIiIGlkPSJhdnp2LXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2enYtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2enYtb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6di1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CiAgICAvKiDQodC70YPRiNCw0YLQtdC70Lgg0LLQtdGI0LDQtdC8INC90LAg0LrQvtGA0LXQvdGMINC-0LTQuNC9INGA0LDQtzogc3RhcnQoKSDQstGL0LfRi9Cy0LDQtdGC0YHRjyDQt9Cw0L3QvtCy0L4KICAgICAgINC_0YDQuCDQutCw0LbQtNC-0Lwg0LTQvtCx0LDQstC70LXQvdC40LgsINGD0LTQsNC70LXQvdC40Lgg0Lgg0L_QtdGA0LXRgdGC0LDQvdC-0LLQutC1INGA0L7Qu9C40LrQvtCyLCDQsCDQutC-0YDQtdC90YwKICAgICAgINC-0YHRgtCw0ZHRgtGB0Y8g0L_RgNC10LbQvdC40Lwg4oCUINC40L3QsNGH0LUg0L7QsdGA0LDQsdC-0YLRh9C40LrQuCDQutC-0L_QuNC70LjRgdGMINCx0YsuICovCiAgICBpZiAoIXJvb3QuZGF0YXNldC5ib3VuZCkgewogICAgICByb290LmRhdGFzZXQuYm91bmQgPSAnMSc7CiAgICAgIGJpbmRSb290KCk7CiAgICB9CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnp2LWJ1aWxkJykub25jbGljayA9IGJ1aWxkOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6di10ZXN0Jykub25jbGljayA9IHNlbGZUZXN0OwogICAgY2hlY2tQb3N0ZXJzKCk7CiAgfQoKICAvKiDQntCx0LvQvtC20LrQsCDQstC10YDRgtC40LrQsNC70YzQvdCw0Y8sINCwINGA0L7Qu9C40Log0YjQuNGA0L7QutC40Lkg4oCUINC60LDRgNGC0L7Rh9C60LAg0L7QsdGA0LXQttC10YIg0LrQsNGA0YLQuNC90LrRgwogICAgINC_0L4g0YbQtdC90YLRgNGDLCDQuCDRh9C10LvQvtCy0LXQuiDRg9Cy0LjQtNC40YIg0Y3RgtC-INGD0LbQtSDQvdCwINGB0LDQudGC0LUuINCf0YDQvtCy0LXRgNGP0LXQvCDRhNC-0YDQvNGDCiAgICAg0LfQsNGA0LDQvdC10LUg0Lgg0LPQvtCy0L7RgNC40Lwg0L7QsSDRjdGC0L7QvCDQv9GA0Y_QvNC-INCyINC_0LDQvdC10LvQuC4gKi8KICBmdW5jdGlvbiBjaGVja1Bvc3RlcnMoKSB7CiAgICBjZmcud29ya3MuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkgewogICAgICB2YXIgYm94ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS13YXJuPSInICsgaSArICciXScpOwogICAgICBpZiAoIWJveCB8fCAhdi5wb3N0ZXIpIHJldHVybjsKICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOwogICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzaGFwZSA9IGltZy5uYXR1cmFsV2lkdGggPiBpbWcubmF0dXJhbEhlaWdodCAqIDEuMDUgPyAnaCcgOiAndic7CiAgICAgICAgdmFyIHdhbnQgPSAodi5mbXQgPT09ICdoJykgPyAnaCcgOiAndic7CiAgICAgICAgYm94LnRleHRDb250ZW50ID0gKHNoYXBlID09PSB3YW50KSA_ICcnIDoKICAgICAgICAgICfQntCx0LvQvtC20LrQsCAnICsgaW1nLm5hdHVyYWxXaWR0aCArICdcdTAwZDcnICsgaW1nLm5hdHVyYWxIZWlnaHQgKyAnIOKAlCAnICsKICAgICAgICAgIChzaGFwZSA9PT0gJ2gnID8gJ9GI0LjRgNC-0LrQsNGPJyA6ICfQstC10YDRgtC40LrQsNC70YzQvdCw0Y8nKSArICcsINCwINGA0L7Qu9C40LogJyArCiAgICAgICAgICAod2FudCA9PT0gJ2gnID8gJ9GI0LjRgNC-0LrQuNC5JyA6ICfQstC10YDRgtC40LrQsNC70YzQvdGL0LknKSArICcuINCd0LAg0LrQsNGA0YLQvtGH0LrQtSDQtdGRINC-0LHRgNC10LbQtdGCINC_0L4g0YbQtdC90YLRgNGDLic7CiAgICAgIH07CiAgICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkgeyBib3gudGV4dENvbnRlbnQgPSAn0J7QsdC70L7QttC60LAg0L3QtSDQvtGC0LrRgNGL0LLQsNC10YLRgdGPIOKAlCDQv9GA0L7QstC10YDRjNGC0LUg0LDQtNGA0LXRgS4nOyB9OwogICAgICBpbWcuc3JjID0gdi5wb3N0ZXI7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJpbmRSb290KCkgewogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKCFwKSByZXR1cm47CiAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgICBpZiAocHJldikgcHJldi5zcmMgPSBlLnRhcmdldC52YWx1ZTsKICAgIH0pOwogICAgLyog0JLRgdGC0LDQstC40LvQuCDQsNC00YDQtdGBINC90L7QstC-0LPQviDRgNC-0LvQuNC60LAg4oCUINC_0LDQvdC10LvRjCDRgdCw0LzQsCDRh9C40YLQsNC10YIg0YMg0YTQsNC50LvQsCDRhNC-0YDQvNCw0YIKICAgICAgINC4INC00LvQuNGC0LXQu9GM0L3QvtGB0YLRjC4g0JjQvdCw0YfQtSDQuNGFINC_0YDQuNGI0LvQvtGB0Ywg0LHRiyDQstGL0Y_RgdC90Y_RgtGMINC90LAg0YHRgtC-0YDQvtC90LUsINCwCiAgICAgICDQvtGI0LjQsdC60LAg0LIg0YTQvtGA0LzQsNGC0LUg0L_QtdGA0LXQutC70LDQtNGL0LLQsNC10YIg0LvQtdC90YLRgyDRgyDQutCw0LbQtNC-0LPQviDQv9C-0YHQtdGC0LjRgtC10LvRjy4gKi8KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHBhdGggPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKCFwYXRoIHx8ICEvXndvcmtzXC5pdGVtc1wuXGQrXC51cmwkLy50ZXN0KHBhdGgpKSByZXR1cm47CiAgICAgIHZhciB1cmwgPSBjbGVhbihlLnRhcmdldC52YWx1ZSkudHJpbSgpOwogICAgICBpZiAoIXVybCkgcmV0dXJuOwogICAgICB2YXIgaSA9IHBhdGguc3BsaXQoJy4nKVsyXTsKICAgICAgdmFyIGh1bWFuID0gJ9Cg0L7Qu9C40LogJyArIChwYXJzZUludChpLCAxMCkgKyAxKTsKICAgICAgbXNnKGh1bWFuICsgJzog0YfQuNGC0LDRjiDRhNC-0YDQvNCw0YIg0Lgg0LTQu9C40YLQtdC70YzQvdC-0YHRgtGM4oCmJyk7CiAgICAgIHZhciBwcm9iZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7CiAgICAgIHByb2JlLnByZWxvYWQgPSAnbWV0YWRhdGEnOwogICAgICBwcm9iZS5tdXRlZCA9IHRydWU7CiAgICAgIHByb2JlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgZnVuY3Rpb24gKCkgewogICAgICAgIHZhciB3ID0gcHJvYmUudmlkZW9XaWR0aCwgaCA9IHByb2JlLnZpZGVvSGVpZ2h0OwogICAgICAgIHZhciBzZWMgPSBpc0Zpbml0ZShwcm9iZS5kdXJhdGlvbikgPyBNYXRoLnJvdW5kKHByb2JlLmR1cmF0aW9uKSA6IDA7CiAgICAgICAgdmFyIGZtdCA9ICh3ID4gaCAqIDEuMDUpID8gJ2gnIDogJ3YnOwogICAgICAgIHZhciBzZWwgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IndvcmtzLml0ZW1zLicgKyBpICsgJy5mbXQiXScpOwogICAgICAgIHZhciBkdXIgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IndvcmtzLml0ZW1zLicgKyBpICsgJy5kdXIiXScpOwogICAgICAgIGlmIChzZWwpIHsgc2VsLnZhbHVlID0gZm10OyBzZXRQYXRoKGNmZywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5mbXQnLCBmbXQpOyB9CiAgICAgICAgaWYgKGR1ciAmJiAhZHVyLnZhbHVlICYmIHNlYykgeyBkdXIudmFsdWUgPSBTdHJpbmcoc2VjKTsgc2V0UGF0aChjZmcsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuZHVyJywgU3RyaW5nKHNlYykpOyB9CiAgICAgICAgcHJvYmUucmVtb3ZlQXR0cmlidXRlKCdzcmMnKTsKICAgICAgICBtc2coaHVtYW4gKyAnOiAnICsgdyArICdcdTAwZDcnICsgaCArICcsICcgKyBzZWMgKyAnINGBIOKAlCDRhNC-0YDQvNCw0YIg0Lgg0LTQu9C40YLQtdC70YzQvdC-0YHRgtGMINC_0L7QtNGB0YLQsNCy0LvQtdC90YsuJyk7CiAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTsKICAgICAgcHJvYmUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcHJvYmUucmVtb3ZlQXR0cmlidXRlKCdzcmMnKTsKICAgICAgICBtc2coaHVtYW4gKyAnOiDRhNCw0LnQuyDQvdC1INC-0YLQutGA0YvQu9GB0Y8uINCf0YDQvtCy0LXRgNGM0YLQtSDQsNC00YDQtdGBIOKAlCDRhNC-0YDQvNCw0YIg0Lgg0LTQu9C40YLQtdC70YzQvdC-0YHRgtGMINCy0L_QuNGI0LjRgtC1INGB0LDQvNC4LicpOwogICAgICB9LCB7IG9uY2U6IHRydWUgfSk7CiAgICAgIHByb2JlLnNyYyA9IHVybDsKICAgIH0pOwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgYiA9IGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1hY3RdJykgOiBudWxsOwogICAgICBpZiAoIWIgfHwgIXJvb3QuY29udGFpbnMoYikpIHJldHVybjsKICAgICAgdmFyIGFjdCA9IGIuZ2V0QXR0cmlidXRlKCdkYXRhLWFjdCcpOwogICAgICB2YXIgaSA9IHBhcnNlSW50KGIuZ2V0QXR0cmlidXRlKCdkYXRhLWknKSwgMTApOwogICAgICB2YXIgaXRlbXMgPSBjZmcud29ya3MuaXRlbXM7CiAgICAgIC8qINC30L3QsNGH0LXQvdC40Y8g0LjQtyDQv9C-0LvQtdC5INC30LDQsdC40YDQsNC10Lwg0JTQniDQv9C10YDQtdGB0YLQsNC90L7QstC60Lg6INC40L3QsNGH0LUg0L_RgNCw0LLQutC4LAogICAgICAgICDRgdC00LXQu9Cw0L3QvdGL0LUg0LTQviDQvdCw0LbQsNGC0LjRjywg0L_QvtGC0LXRgNGP0Y7RgtGB0Y8g0LLQvNC10YHRgtC1INGBINC_0LXRgNC10YDQuNGB0L7QstC60L7QuSAqLwogICAgICBoYXJ2ZXN0KCk7CiAgICAgIGlmIChhY3QgPT09ICdhZGQnKSB7CiAgICAgICAgaXRlbXMucHVzaCh7CiAgICAgICAgICB1cmw6ICcnLCB0aXRsZTogJycsIHN1YjogJycsIGFsdDogJycsCiAgICAgICAgICBzZW9OYW1lOiAnJywgc2VvRGVzYzogJycsIHBvc3RlcjogJycsCiAgICAgICAgICBmbXQ6ICd2JywgZHVyOiAnJywKICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCksCiAgICAgICAgICBpblNjaGVtYTogZmFsc2UKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChhY3QgPT09ICdkZWwnKSB7CiAgICAgICAgdmFyIHdoYXQgPSBpdGVtc1tpXS50aXRsZSB8fCBpdGVtc1tpXS5zZW9OYW1lIHx8ICfQsdC10Lcg0LjQvNC10L3QuCc7CiAgICAgICAgaWYgKCFjb25maXJtKCfQo9Cx0YDQsNGC0Ywg0YDQvtC70LjQuiDCqycgKyB3aGF0ICsgJ8K7INGB0L4g0YHRgtGA0LDQvdC40YbRiz8nKSkgcmV0dXJuOwogICAgICAgIGl0ZW1zLnNwbGljZShpLCAxKTsKICAgICAgfSBlbHNlIGlmIChhY3QgPT09ICd1cCcgJiYgaSA-IDApIHsKICAgICAgICBpdGVtcy5zcGxpY2UoaSAtIDEsIDAsIGl0ZW1zLnNwbGljZShpLCAxKVswXSk7CiAgICAgIH0gZWxzZSBpZiAoYWN0ID09PSAnZG93bicgJiYgaSA8IGl0ZW1zLmxlbmd0aCAtIDEpIHsKICAgICAgICBpdGVtcy5zcGxpY2UoaSArIDEsIDAsIGl0ZW1zLnNwbGljZShpLCAxKVswXSk7CiAgICAgIH0gZWxzZSByZXR1cm47CiAgICAgIHN0YXJ0KCk7CiAgICAgIGlmIChhY3QgPT09ICdhZGQnKSB7CiAgICAgICAgdmFyIGNhcmRzID0gYWxsKHJvb3QsICcuYXZ6di1jYXJkJyk7CiAgICAgICAgdmFyIGxhc3RDYXJkID0gY2FyZHNbaXRlbXMubGVuZ3RoIC0gMV07CiAgICAgICAgaWYgKGxhc3RDYXJkKSBsYXN0Q2FyZC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnY2VudGVyJyB9KTsKICAgICAgICB2YXIgdXJsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wPSJ3b3Jrcy5pdGVtcy4nICsgKGl0ZW1zLmxlbmd0aCAtIDEpICsgJy51cmwiXScpOwogICAgICAgIGlmICh1cmwpIHVybC5mb2N1cygpOwogICAgICB9CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyksIG8gPSBvYmosIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICBvW3BhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXSA9IHZhbDsKICB9CiAgLyog0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INC20LUg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtSDRgdGC0YDQvtC60LgKICAgICDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IChVKzIwMEIg0Lgg0YDQvtC00L3RjykuINCSINGC0LXQutGB0YLQtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0LLQuNC00LXQvtGE0LDQudC70LAg0L7QvdC4INC_0YDQtdCy0YDQsNGJ0LDRjtGCINGB0YHRi9C70LrRgyDQsiDQvdC10YDQsNCx0L7Rh9GD0Y46INCx0YDQsNGD0LfQtdGACiAgICAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LCDQvtCx0LvQvtC20LrQsCDQvdC1INC_0L7Rj9Cy0LvRj9C10YLRgdGPLCDRhNC-0YDQvNCw0YIg0L7RgdGC0LDRkdGC0YHRjwogICAgINCy0LXRgNGC0LjQutCw0LvRjNC90YvQvCDQv9C-INGD0LzQvtC70YfQsNC90LjRjiDQuCDRgNC-0LvQuNC6INC90LUg0L_RgNC-0LjQs9GA0YvQstCw0LXRgtGB0Y8uCiAgICAg0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjCDQvdC10YfQtdCz0L4g4oCUINCy0YvRgNC10LfQsNC10Lwg0LLQtdC30LTQtS4gKi8KICB2YXIgWkVST19XSURUSCA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKCiAgZnVuY3Rpb24gY2xlYW4odikgewogICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA_IHYucmVwbGFjZShaRVJPX1dJRFRILCAnJykgOiB2OwogIH0KCiAgZnVuY3Rpb24gaGFydmVzdCgpIHsKICAgIHZhciBmaXhlZCA9IDA7CiAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgdmFyIHYgPSBjbGVhbihlbC52YWx1ZSk7CiAgICAgIGlmICh2ICE9PSBlbC52YWx1ZSkgeyBmaXhlZCsrOyBlbC52YWx1ZSA9IHY7IH0KICAgICAgc2V0UGF0aChjZmcsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyksIHYpOwogICAgfSk7CiAgICByZXR1cm4gZml4ZWQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogIC8qINCf0LXRgNC10L_QuNGB0YvQstCw0LXQvCDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INGC0LXQutGB0YIg0Y3Qu9C10LzQtdC90YLQsCwg0L3QtSDRgtGA0L7Qs9Cw0Y8g0LLQu9C-0LbQtdC90L3Ri9C1CiAgICAg0LfQvdCw0YfQutC4INC4INC40YUg0L_QvtGA0Y_QtNC-0LouINCf0LjRiNC10Lwg0LIg0YLQvtGCINGC0LXQutGB0YLQvtCy0YvQuSDRg9C30LXQuywg0LPQtNC1INGC0LXQutGB0YIKICAgICDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQtdGB0YLRjCwg0LAg0L3QtSDQsiDQv9C10YDQstGL0Lkg0L_QvtC_0LDQstGI0LjQudGB0Y86INCyINGA0LDQt9C80LXRgtC60LUg0LLQuNC00LAKICAgICBgPHNwYW4gY2xhc3M9Imljb24iPnN3aXBlPC9zcGFuPiDQv9C-0LTQv9C40YHRjGAg0L_QtdGA0LLRi9C5INGD0LfQtdC7IOKAlCDRjdGC0L4KICAgICDQvtGC0YHRgtGD0L8g0L_QtdGA0LXQtCDQt9C90LDRh9C60L7QvCwg0Lgg0LfQsNC_0LjRgdGMINCyINC90LXQs9C-INC_0LXRgNC10LHRgNCw0YHRi9Cy0LDQu9CwINC_0L7QtNC_0LjRgdGMCiAgICAg0LLQv9C10YDRkdC0INC30L3QsNGH0LrQsC4gKi8KICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgdmFyIHRleHRzID0gW10sIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgIH0KICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgIHZhciBtYWluID0gbnVsbDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgfQogICAgaWYgKCFtYWluKSBtYWluID0gdGV4dHNbMF07CiAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgdmFyIHBvc3QgPSAocmF3Lm1hdGNoKC9ccyokLykgfHwgWycnXSlbMF07CiAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBzZXRQbGFpbihlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC50ZXh0Q29udGVudCA9IHY7IH0KICBmdW5jdGlvbiBzZXRIdG1sKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLmlubmVySFRNTCA9IHY7IH0KCiAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgIHNldFRleHQob25lKHNjb3BlLCAnLmhlcm8tZXllJyksIGQuaGVyby5leWUpOwogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgIHNldFBsYWluKGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgaWYgKGxpbmVzWzJdKSBzZXRQbGFpbihvbmUobGluZXNbMl0sICdlbScpIHx8IGxpbmVzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgc2V0SHRtbChvbmUoc2NvcGUsICcubGVkZScpLCBkLmhlcm8ubGVkZSk7CiAgICBhbGwoc2NvcGUsICcuaGVyby1tZXRhID4gZGl2JykuZm9yRWFjaChmdW5jdGlvbiAoZHYsIGkpIHsKICAgICAgdmFyIG0gPSBkLmhlcm8ubWV0YVtpXTsgaWYgKCFtKSByZXR1cm47CiAgICAgIHNldFBsYWluKG9uZShkdiwgJy5obS1rZXknKSwgbS5rZXkpOwogICAgICBzZXRIdG1sKG9uZShkdiwgJy5obS12YWwnKSwgbS52YWwpOwogICAgfSk7CgogICAgdmFyIGxhYmVscyA9IGFsbChzY29wZSwgJy5zZWN0aW9uLWxhYmVsJyk7CiAgICBzZXRQbGFpbihvbmUobGFiZWxzWzBdLCAnaDInKSwgZC53b3Jrcy5oZWFkKTsKICAgIHNldFRleHQob25lKGxhYmVsc1swXSwgJy5zbC1hc2lkZScpLCBkLndvcmtzLmFzaWRlKTsKICAgIHNldFRleHQob25lKHNjb3BlLCAnLnNjcm9sbC1oaW50JyksIGQud29ya3MuaGludCk7CgogICAgc2V0UGxhaW4ob25lKGxhYmVsc1sxXSwgJ2gyJyksIGQuY3RhLmhlYWQpOwogICAgc2V0VGV4dChvbmUoc2NvcGUsICcuY3RhLWV5ZScpLCBkLmN0YS5leWUpOwogICAgc2V0SHRtbChvbmUoc2NvcGUsICcuY3RhLXRpdGxlJyksIGQuY3RhLnRpdGxlKTsKICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmN0YS1zdWInKSwgZC5jdGEuc3ViKTsKICAgIGFsbChzY29wZSwgJy5jdGEtcGlsbCcpLmZvckVhY2goZnVuY3Rpb24gKHAsIGkpIHsKICAgICAgaWYgKHR5cGVvZiBkLmN0YS5waWxsc1tpXSA9PT0gJ3N0cmluZycpIHNldFRleHQocCwgZC5jdGEucGlsbHNbaV0pOwogICAgfSk7CiAgICBhbGwoc2NvcGUsICcuYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICB2YXIgcyA9IGQuY3RhLmJ1dHRvbnNbaV07IGlmICghcykgcmV0dXJuOwogICAgICBpZiAocy5ocmVmKSBiLnNldEF0dHJpYnV0ZSgnaHJlZicsIHMuaHJlZik7CiAgICAgIGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHNldFBsYWluKHgsIHMudGV4dCk7IH0pOwogICAgfSk7CiAgICBzZXRQbGFpbihvbmUoc2NvcGUsICcuY3RhLWhpbnQnKSwgZC5jdGEuaGludCk7CiAgfQoKICAvKiAtLS0tLS0tLS0tINGB0LrRgNC40L_RgiDRgdGC0YDQsNC90LjRhtGLIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24ganNTdHIocykgeyByZXR1cm4gIiciICsgU3RyaW5nKHMpLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgvJy9nLCAiXFwnIikgKyAiJyI7IH0KCiAgZnVuY3Rpb24gcGF0Y2hTY3JpcHQoc3JjLCBkKSB7CiAgICB2YXIgbWlzc2VkID0gW107CiAgICBpZiAoIS92YXIgdmlkZW9zID0gXFsvLnRlc3Qoc3JjKSkgeyBtaXNzZWQucHVzaCgn0YHQv9C40YHQvtC6INGA0L7Qu9C40LrQvtCyJyk7IHJldHVybiB7IHRleHQ6IHNyYywgbWlzc2VkOiBtaXNzZWQgfTsgfQogICAgdmFyIGJvZHkgPSBkLndvcmtzLml0ZW1zLm1hcChmdW5jdGlvbiAodikgewogICAgICByZXR1cm4gJyAgICB7IHVybDonICsganNTdHIodi51cmwpICsgJywgdGl0bGU6JyArIGpzU3RyKHYudGl0bGUpICsKICAgICAgICAgICAgICcsIHN1YjonICsganNTdHIodi5zdWIpICsgJywgYWx0OicgKyBqc1N0cih2LmFsdCkgKyAnLFxuJyArCiAgICAgICAgICAgICAnICAgICAgcG9zdGVyOicgKyBqc1N0cih2LnBvc3RlciB8fCAnJykgKwogICAgICAgICAgICAgJywgZm10OicgKyBqc1N0cih2LmZtdCA9PT0gJ2gnID8gJ2gnIDogJ3YnKSArICcgfSc7CiAgICB9KS5qb2luKCcsXG4nKTsKICAgIHZhciBvdXQgPSBzcmMucmVwbGFjZSgvdmFyIHZpZGVvcyA9IFxbW1xzXFNdKj9cblxzKlxdOy8sICd2YXIgdmlkZW9zID0gW1xuJyArIGJvZHkgKyAnXG4gIF07Jyk7CiAgICByZXR1cm4geyB0ZXh0OiBvdXQsIG1pc3NlZDogbWlzc2VkIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBidWlsZExkKGRvYywgZCkgewogICAgdmFyIHMgPSBvbmUoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpOwogICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJyB9OwogICAgdmFyIG87CiAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQoKICAgIHZhciBnID0gb1snQGdyYXBoJ10gfHwgW107CiAgICBzeW5jQ2Fub24oZyk7CiAgICB2YXIgYmFzZSA9ICdodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuJzsKCiAgICAvKiDQv9GA0LXQttC90LjQtSDRg9C30LvRiyDRgNC-0LvQuNC60L7QsiDigJQg0YfRgtC-0LHRiyDQvdC1INGC0LXRgNGP0YLRjCDRgtC-LCDRh9C10LPQviDQvdC10YIg0LIg0YTQvtGA0LzQtSAqLwogICAgdmFyIG9sZCA9IHt9OwogICAgZy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7IGlmIChuWydAdHlwZSddID09PSAnVmlkZW9PYmplY3QnICYmIG4uY29udGVudFVybCkgb2xkW24uY29udGVudFVybF0gPSBuOyB9KTsKCiAgICB2YXIga2VlcCA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddICE9PSAnVmlkZW9PYmplY3QnOyB9KTsKCiAgICB2YXIgbWFkZSA9IFtdLCByZWZzID0gW107CiAgICBkLndvcmtzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHsKICAgICAgaWYgKCF2LnNlb05hbWUgJiYgIXYuc2VvRGVzYyAmJiAhdi5wb3N0ZXIpIHJldHVybjsgIC8qINGB0L7QstGB0LXQvCDQv9GD0YHRgtC-0Lkg4oCUINC90LUg0LLRi9C00YPQvNGL0LLQsNC10LwgKi8KICAgICAgdmFyIHdhcyA9IG9sZFt2LnVybF0gfHwge307CiAgICAgIHZhciBpZCA9IGJhc2UgKyAnI3ZpZGVvLScgKyAoaSArIDEpOwogICAgICB2YXIgbm9kZSA9IHsKICAgICAgICAnQHR5cGUnOiAnVmlkZW9PYmplY3QnLAogICAgICAgICdAaWQnOiBpZCwKICAgICAgICBuYW1lOiB2LnNlb05hbWUgfHwgdi50aXRsZSwKICAgICAgICBkZXNjcmlwdGlvbjogdi5zZW9EZXNjIHx8ICcnLAogICAgICAgIGNvbnRlbnRVcmw6IHYudXJsLAogICAgICAgIGluTGFuZ3VhZ2U6IHdhcy5pbkxhbmd1YWdlIHx8ICdydS1SVScsCiAgICAgICAgYXV0aG9yOiB3YXMuYXV0aG9yIHx8IHsgJ0BpZCc6ICdodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXInIH0KICAgICAgfTsKICAgICAgaWYgKHYucG9zdGVyKSBub2RlLnRodW1ibmFpbFVybCA9IHYucG9zdGVyOwogICAgICAvKiDQtNCw0YLRgyDQuCDQtNC70LjRgtC10LvRjNC90L7RgdGC0Ywg0L3QtSDQv9GA0LjQtNGD0LzRi9Cy0LDQtdC8OiDQvdC10YIg4oCUINC30L3QsNGH0LjRgiDQvdC10YIg0L_QvtC70Y8gKi8KICAgICAgaWYgKHYuZGF0ZSkgbm9kZS51cGxvYWREYXRlID0gdi5kYXRlOwogICAgICB2YXIgaXNvID0gc2VjVG9Jc28odi5kdXIpOwogICAgICBpZiAoaXNvKSBub2RlLmR1cmF0aW9uID0gaXNvOwogICAgICBtYWRlLnB1c2gobm9kZSk7CiAgICAgIHJlZnMucHVzaCh7ICdAaWQnOiBpZCB9KTsKICAgIH0pOwoKICAgIHZhciBwYWdlID0ga2VlcC5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdXZWJQYWdlJzsgfSlbMF07CiAgICBpZiAocGFnZSkgewogICAgICBwYWdlLmRhdGVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgIGlmIChyZWZzLmxlbmd0aCkgcGFnZS52aWRlbyA9IHJlZnM7IGVsc2UgZGVsZXRlIHBhZ2UudmlkZW87CiAgICAgIGlmIChkLm1ldGEubmFtZSkgcGFnZS5uYW1lID0gZC5tZXRhLm5hbWU7CiAgICAgIGlmIChkLm1ldGEuZGVzYykgcGFnZS5kZXNjcmlwdGlvbiA9IGQubWV0YS5kZXNjOwogICAgfQoKICAgIC8qINGA0L7Qu9C40LrQuCDRgdGC0LDQstC40Lwg0L_QtdGA0LXQtCDRhdC70LXQsdC90YvQvNC4INC60YDQvtGI0LrQsNC80Lgg4oCUINC60LDQuiDQsdGL0LvQviAqLwogICAgdmFyIGJjSW5kZXggPSBrZWVwLmxlbmd0aDsKICAgIGZvciAodmFyIGsgPSAwOyBrIDwga2VlcC5sZW5ndGg7IGsrKykgewogICAgICBpZiAoa2VlcFtrXVsnQHR5cGUnXSA9PT0gJ0JyZWFkY3J1bWJMaXN0JykgeyBiY0luZGV4ID0gazsgYnJlYWs7IH0KICAgIH0KICAgIG9bJ0BncmFwaCddID0ga2VlcC5zbGljZSgwLCBiY0luZGV4KS5jb25jYXQobWFkZSwga2VlcC5zbGljZShiY0luZGV4KSk7CgogICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgNC60LAgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBjb21tZW50cyhkb2MpIHsKICAgIHZhciBvdXQgPSBbXSwgdyA9IGRvYy5jcmVhdGVUcmVlV2Fsa2VyKGRvYy5ib2R5LCAxMjgsIG51bGwsIGZhbHNlKSwgbjsKICAgIHdoaWxlICgobiA9IHcubmV4dE5vZGUoKSkpIHsKICAgICAgdmFyIHYgPSBuLm5vZGVWYWx1ZSB8fCAnJzsKICAgICAgaWYgKHYuaW5kZXhPZignQVZBTlpBVE8uUlUnKSA-IC0xKSB7IG91dC5wdXNoKCc8IS0tJyArIHYgKyAnLS0-Jyk7IG91dC5wdXNoKCcnKTsgYnJlYWs7IH0KICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi12aWRlb3MnKTsKICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJy5hdi12aWRlb3MgLnZjYXJkJykgPiAtMTsgfSlbMF07CiAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3ZhciB2aWRlb3MgPSBbJykgPiAtMTsgfSlbMF07CiAgICAgIC8qINCh0YHRi9C70L7QuiDQvdCwINGI0YDQuNGE0YLRiyDQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgdC60L7Qu9GM0LrQviwg0Lgg0L_QtdGA0LLQsNGPINC40Lcg0L3QuNGFIOKAlAogICAgICAgICDQvdC1INC90LDRiNCwOiDQtdGRINGB0YLQsNCy0LjRgiDRgtC10LzQsCB3Zm9saW8gKNGB0LLQvtC4INC90LDRh9C10YDRgtCw0L3QuNGPIEpvc3Qg0LggUnViaWssCiAgICAgICAgINCx0LXQtyDRiNGA0LjRhNGC0LAg0LfQvdCw0YfQutC-0LIpLiDQoNCw0L3RjNGI0LUg0LHRgNCw0LvQsNGB0Ywg0LjQvNC10L3QvdC-INC-0L3QsCwg0Lgg0LHQu9C-0Log0YLQtdGA0Y_QuwogICAgICAgICBNYXRlcmlhbCBTeW1ib2xzIOKAlCDQt9C90LDRh9C60Lgg0L_RgNC10LLRgNCw0YnQsNC70LjRgdGMINCyINGB0LvQvtCy0LAg0LLRgNC-0LTQtQogICAgICAgICDCq2Nyb3BfcG9ydHJhaXTCuy4g0KHQstC-0Y8g0YHRgdGL0LvQutCwINGD0LfQvdCw0ZHRgtGB0Y8g0L_QviDRiNGA0LjRhNGC0YMg0LfQvdCw0YfQutC-0LIuICovCiAgICAgIHZhciBmb250TGluayA9IGFsbChkb2MsICdsaW5rW2hyZWYqPSJjc3MyP2ZhbWlseT0iXScpLmZpbHRlcihmdW5jdGlvbiAobCkgewogICAgICAgIHJldHVybiAobC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJykuaW5kZXhPZignTWF0ZXJpYWwrU3ltYm9scycpID4gLTE7CiAgICAgIH0pWzBdOwogICAgICB2YXIgZm9udFJlc3RvcmVkID0gZmFsc2U7CiAgICAgIGlmICghZm9udExpbmspIHsgZm9udFJlc3RvcmVkID0gdHJ1ZTsgfQoKICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAuYXYtdmlkZW9zJyk7CiAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgnPHN0eWxlPiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgIHZhciBzYyA9IHBhdGNoU2NyaXB0KHNjcmlwdC50ZXh0Q29udGVudCwgZCk7CiAgICAgIHZhciBsZCA9IGJ1aWxkTGQoZG9jLCBkKTsKICAgICAgaWYgKCFsZC50ZXh0KSB0aHJvdyBuZXcgRXJyb3IobGQuZXJyKTsKCiAgICAgIC8qINCd0LAg0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbQtSBsZCtqc29uINGB0YLQvtC40YIg0J_QldCg0JXQlCDRgdGC0LjQu9GP0LzQuCDigJQg0YHQvtGF0YDQsNC90Y_QtdC8INC_0L7RgNGP0LTQvtC6ICovCiAgICAgIHZhciB0ZXh0ID0gY29tbWVudHMoZG9jKS5jb25jYXQoWwogICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20iPicsCiAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4-JywKICAgICAgICBBVlpfRk9OVF9MSU5LLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgbGQudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICcnLAogICAgICAgIHN0eWxlLm91dGVySFRNTCwKICAgICAgICAnJywKICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICBzYy50ZXh0LAogICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgXSkuam9pbignXG4nKTsKCiAgICAgIGlmIChmb250UmVzdG9yZWQpIHNjLm1pc3NlZC5wdXNoKCfRgdCy0L7RjyDRgdGB0YvQu9C60LAg0L3QsCDRiNGA0LjRhNGC0YsgKNCy0L7RgdGB0YLQsNC90L7QstC70LXQvdCwINC40Lcg0L_QsNC90LXQu9C4KScpOwogICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBtaXNzZWQ6IHNjLm1pc3NlZCB9OwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDQtNCw0LbQtSDQuNC3INGC0LXRhSDQutGD0YHQutC-0LIsINC60L7RgtC-0YDRi9C1INC_0LDQvdC10LvRjCDQutC-0L_QuNGA0YPQtdGCCiAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgIHRleHQgPSBTdHJpbmcodGV4dCkucmVwbGFjZSgvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2csICcnKTsKICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enYtb3V0Jyk7CiAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgdmFyIG9rID0gZmFsc2U7CiAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICB9CgogIGZ1bmN0aW9uIGJ1aWxkKCkgewogICAgdmFyIGNsZWFuZWQgPSBoYXJ2ZXN0KCk7CiAgICAvKiDQn9GD0YHRgtC-0Lkg0LDQtNGA0LXRgSDigJQg0Y3RgtC-INC60LDRgNGC0L7Rh9C60LAsINC60L7RgtC-0YDQsNGPINC90LAg0YHRgtGA0LDQvdC40YbQtSDRgdC70L7QvNCw0LXRgiDQu9C10L3RgtGDLgogICAgICAg0JvRg9GH0YjQtSDQvtGB0YLQsNC90L7QstC40YLRjNGB0Y8g0LfQtNC10YHRjCwg0YfQtdC8INC-0YLQtNCw0YLRjCDQsdC40YLRi9C5INC60L7QtCDQsiDQutC-0L3RgdGC0YDRg9C60YLQvtGALiAqLwogICAgdmFyIGJsYW5rID0gW107CiAgICBjZmcud29ya3MuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkgewogICAgICBpZiAoIVN0cmluZyh2LnVybCkudHJpbSgpKSBibGFuay5wdXNoKGkgKyAxKTsKICAgIH0pOwogICAgaWYgKGJsYW5rLmxlbmd0aCkgewogICAgICBtc2coJ9Cd0LUg0YHQvtCx0YDQsNC90L46INC90LUg0LfQsNC_0L7Qu9C90LXQvSDQsNC00YDQtdGBINCy0LjQtNC10L7RhNCw0LnQu9CwINGDINGA0L7Qu9C40LrQvtCyICcgKyBibGFuay5qb2luKCcsICcpICsKICAgICAgICAgICcuINCS0L_QuNGI0LjRgtC1INCw0LTRgNC10YEg0LjQu9C4INGD0LTQsNC70LjRgtC1INC60LDRgNGC0L7Rh9C60YMuJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBub1NjaGVtYSA9IGNmZy53b3Jrcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICF2LnNlb05hbWUgJiYgIXYuc2VvRGVzYyAmJiAhdi5wb3N0ZXI7IH0pLmxlbmd0aDsKICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICBhc3NlbWJsZShjZmcpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6IC92aWRlb19zaG9vdGluZ19rYXphbiDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4gJyArCiAgICAgICAgJ9Cg0L7Qu9C40LrQvtCyOiAnICsgY2ZnLndvcmtzLml0ZW1zLmxlbmd0aCArICcuJzsKICAgICAgaWYgKG5vU2NoZW1hKSBub3RlICs9ICcg0JLQndCY0JzQkNCd0JjQlTog0YMgJyArIG5vU2NoZW1hICsgJyDRgNC-0LvQuNC60L7QsiDQvdC1INC30LDQv9C-0LvQvdC10L3QviDQvtC_0LjRgdCw0L3QuNC1INC00LvRjyDQv9C-0LjRgdC60LAg4oCUINCyINGA0LDQt9C80LXRgtC60YMg0L7QvdC4INC90LUg0L_QvtC_0LDQtNGD0YIuJzsKICAgICAgLyog0J_Rg9GB0YLQsNGPINC-0LHQu9C-0LbQutCwIOKAlCDRjdGC0L4g0L3QtSDQvNC10LvQvtGH0Yw6INC60LDRgNGC0L7Rh9C60LAg0L3QsNGH0L3RkdGCINGC0Y_QvdGD0YLRjCDQutCw0LTRgCDQuNC3CiAgICAgICAgINCy0LjQtNC10L7RhNCw0LnQu9CwLCDQsCDQuNC3INGA0LDQt9C80LXRgtC60Lgg0YPQudC00ZHRgiB0aHVtYm5haWxVcmwuINCf0YDQviDRgtCw0LrQvtC1INC80L7Qu9GH0LDRgtGMCiAgICAgICAgINC90LXQu9GM0LfRjywg0LjQvdCw0YfQtSDQv9C-0LvQtSDQv9GA0L7Qv9Cw0LTRkdGCINC90LXQt9Cw0LzQtdGC0L3Qvi4gKi8KICAgICAgdmFyIG5vUG9zdGVyID0gY2ZnLndvcmtzLml0ZW1zLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gIVN0cmluZyh2LnBvc3RlciB8fCAnJykudHJpbSgpOyB9KS5sZW5ndGg7CiAgICAgIGlmIChub1Bvc3Rlcikgbm90ZSArPSAnINCjICcgKyBub1Bvc3RlciArICcg0YDQvtC70LjQutC-0LIg0L3QtSDQt9Cw0LTQsNC90LAg0L7QsdC70L7QttC60LA6INC60LDRgNGC0L7Rh9C60LAg0LLQvtC30YzQvNGR0YIg0LrQsNC00YAg0LjQtyDRhNCw0LnQu9CwJyArCiAgICAgICAgJyAo0L7QutC-0LvQviDQtNCy0YPRhSDQvNC10LPQsNCx0LDQudGCINGDINC60LDQttC00L7Qs9C-INC_0L7RgdC10YLQuNGC0LXQu9GPKSwg0LAg0LIg0YDQsNC30LzQtdGC0LrQtSDRgyDQvdC40YUg0L3QtSDQsdGD0LTQtdGCIHRodW1ibmFpbFVybC4nOwogICAgICBpZiAoY2xlYW5lZCkgbm90ZSArPSAnINCY0LcgJyArIGNsZWFuZWQgKyAnINC_0L7Qu9C10Lkg0YPQsdGA0LDQvdGLINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiywg0LLRgdGC0LDQstC70LXQvdC90YvQtSDRgNC10LTQsNC60YLQvtGA0L7QvC4nOwogICAgICBpZiAocmVzLm1pc3NlZC5sZW5ndGgpIG5vdGUgKz0gJyDQndC1INC90LDQudC00LXQvdC-INCyINGB0LrRgNC40L_RgtC1OiAnICsgcmVzLm1pc3NlZC5qb2luKCcsICcpICsgJy4nOwogICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogIH0KCiAgZnVuY3Rpb24gc2VsZlRlc3QoKSB7CiAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgIHZhciBzbmFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYywgcmVzLnRleHQpOwogICAgICAvKiDQv9GA0LjQt9C90LDQuiDCq9C10YHRgtGMINCyINGA0LDQt9C80LXRgtC60LXCuyDQv9C-0YHQu9C1INGB0LHQvtGA0LrQuCDQvNC-0LbQtdGCINC40LfQvNC10L3QuNGC0YzRgdGPINC90LDQvNC10YDQtdC90L3QviDigJQKICAgICAgICAg0YHQstC10YDRj9C10Lwg0YHQvtC00LXRgNC20LjQvNC-0LUsINCwINC90LUg0LXQs9C-ICovCiAgICAgIGFnYWluLndvcmtzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHsKICAgICAgICBpZiAoc25hcC53b3Jrcy5pdGVtc1tpXSkgdi5pblNjaGVtYSA9IHNuYXAud29ya3MuaXRlbXNbaV0uaW5TY2hlbWE7CiAgICAgIH0pOwogICAgICBhZ2Fpbi5tZXRhID0gc25hcC5tZXRhOwogICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXApLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICBpZiAoYSA9PT0gYikgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgIGVsc2UgewogICAgICAgIG1zZygn0KDQkNCh0KXQntCW0JTQldCd0JjQlSDigJQg0YHQvNC-0YLRgNC40YLQtSDQutC-0L3RgdC-0LvRjC4nKTsKICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0LHRi9C70L4nLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0YHRgtCw0LvQvicsIEpTT04ucGFyc2UoYikpOwogICAgICB9CiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cf0YDQvtCy0LXRgNC60LAg0L3QtSDQv9GA0L7RiNC70LA6ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgaWYgKCFkb2MucXVlcnlTZWxlY3RvcignLmF2LXZpZGVvcycpKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgLmF2LXZpZGVvcycpOwogICAgY2ZnID0gcmVhZENmZyhkb2MsIHNyYyk7CiAgICBzdGFydCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICByb290LmlubmVySFRNTCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2enYtd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enYtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQstC40LTQtdC-0YHRitGR0LzQutC4PC9oMj48L2Rpdj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enYtYm9keSI-PHAgY2xhc3M9ImF2enYtaGludCI-0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys6ICcgKwogICAgICBlc2MoZS5tZXNzYWdlKSArICc8L3A-PC9kaXY-PC9kaXY-JzsKICB9KTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0LLQuNC00LXQvtGB0YrRkdC80LrQuCDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoiYXJjaCIsdGl0bGU6ItCf0LDQvdC10LvRjCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90L7QuSDRgdGK0ZHQvNC60LgiLHNob3J0OiLQkNGA0YXQuNGC0LXQutGC0YPRgNCwIixoaW50OiLQutCw0LTRgNGLINC4INC_0L7QtNC_0LjRgdC4LCDQv9GA0L7QtdC60YLRiywg0L_Rg9Cx0LvQuNC60LDRhtC40Y8sINCy0L7Qv9GA0L7RgdGLLCDRgNCw0LfQvNC10YLQutCwIixwYWdlczpbIi9hcmNoaXRlY3R1cmVfc2hvb3RpbmciXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0JDQoNCl0JjQotCV0JrQotCj0KDQndCe0Jkg0KHQqtCB0JzQmtCYICB2MSDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvYXJjaGl0ZWN0dXJlX3Nob290aW5nCgogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIuINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCCiAgINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvCDigJQg0LLRgdGC0LDQstC70Y_QtdGC0YHRjwogICDQvtC00L3QuNC8INC60YPRgdC60L7QvCDQv9C-0LLQtdGA0YUgSFRNTC3QsdC70L7QutCwINGB0YLRgNCw0L3QuNGG0YsuCgogICDQmNGB0YXQvtC00L3QuNC6LCDQsCDQvdC1INC20LjQstC-0LkgRE9NOiDRgdC60YDQuNC_0YLRiyB3Zm9saW8g0LTQvtC_0LjRgdGL0LLQsNGO0YIg0LLQvdC10YjQvdC40LwKICAg0YHRgdGL0LvQutCw0LwgdGFyZ2V0PSJfYmxhbmsiINC_0YDRj9C80L4g0LIg0LHRgNCw0YPQt9C10YDQtSwg0Lgg0L_QsNC90LXQu9GMLCDRh9C40YLQsNGO0YnQsNGPCiAgINC20LjQstGD0Y4g0YHRgtGA0LDQvdC40YbRgywg0LfQsNC_0LXQutCw0LvQsCDQsdGLINGN0YLQuCDRh9GD0LbQuNC1INC_0YDQsNCy0LrQuCDQsiDQstCw0Ygg0LrQvtC0LgogICDQkiDRhNGD0YLQtdGA0LUg0Lgg0LHQtdCz0YPRidC10Lkg0YHRgtGA0L7QutC1INGB0YHRi9C70LrQuCDQutCw0Log0YDQsNC3INCy0L3QtdGI0L3QuNC1LgoKICAg0KfRgtC-INC_0LDQvdC10LvRjCDQtNC10YDQttC40YIg0LLQvNC10YHRgtC1LCDRh9GC0L7QsdGLINC90LUg0YDQsNC30L7RiNC70L7RgdGMOgogICAgIMK3INC_0L7QtNC_0LjRgdC4INC60LDQtNGA0L7QsiAtPiDRgdC_0LjRgdC-0Log0LrQsNC00YDQvtCyINCyINGA0LDQt9C80LXRgtC60LUsINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvjsKICAgICDCtyDQv9C10YDQstGL0Lkg0LrQsNC00YAgLT4g0LPQu9Cw0LLQvdC-0LUg0LjQt9C-0LHRgNCw0LbQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLLCDQstC80LXRgdGC0LUg0YEg0YDQsNC30LzQtdGA0LDQvNC4OwogICAgIMK3INC_0YDQvtC10LrRgtGLIC0-INGB0L_QuNGB0L7QuiDQv9GA0L7QtdC60YLQvtCyINCyINGA0LDQt9C80LXRgtC60LUsINC_0L4g0LDQtNGA0LXRgdGDINGA0LDQt9Cx0L7RgNCwOwogICAgIMK3INCy0L7Qv9GA0L7RgdGLIC0-IEZBUVBhZ2UsINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvi4KCiAgINCa0LDQtNGA0L7QsiDRgNC-0LLQvdC-IDc6INC60LvQsNGB0YHRiyBnMeKApmc3INC30LDQtNCw0Y7RgiDQs9C10L7QvNC10YLRgNC40Y4g0LrQvtC70LvQsNC20LAsINCy0L7RgdGM0LzQvtC5CiAgINGC0YDQtdCx0YPQtdGCINC_0YDQsNCy0LrQuCBDU1MuINCf0YDQvtC10LrRgtC-0LIg0YDQvtCy0L3QviAzIOKAlCDRgtCwINC20LUg0L_RgNC40YfQuNC90LAsINGB0LXRgtC60LAuCiAgINCf0L7RjdGC0L7QvNGDINC00L7QsdCw0LLQu9C10L3QuNGPINC30LTQtdGB0Ywg0L3QtdGCLCDQtdGB0YLRjCDQv9GA0LDQstC60LAg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFLgoKICAg0KbQtdC90YMg0L_QsNC90LXQu9GMINC90LUg0YHQvtGH0LjQvdGP0LXRgi4g0J3QsCDRgdGC0YDQsNC90LjRhtC1INC10ZEg0L3QtdGCINC90LDQvNC10YDQtdC90L3Qvjog0LDRgNGF0LjRgtC10LrRgtGD0YDQvdC-0LkKICAg0YHRitGR0LzQutC4INC90LXRgiDQsiDQv9GA0LDQudGB0LUsINCwINC-0LHRitGP0LLQu9GP0YLRjCDRgdGD0LzQvNGDLCDQutC-0YLQvtGA0L7QuSDQvdC10YIg0LIg0L_RgNCw0LnRgdC1LCDQvdC10LvRjNC30Y8uCiAgINCf0L7Qu9C1INGB0YLQvtC40LzQvtGB0YLQuCDigJQg0L7QsdGL0YfQvdGL0Lkg0YLQtdC60YHRgiwg0LIg0YDQsNC30LzQtdGC0LrRgyDRhtC40YTRgNCwINC90LUg0YPRhdC-0LTQuNGCLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQsCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0LAsINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQkiA8aGVhZD4gd2ZvbGlvINGB0LLQvtGPINGB0YHRi9C70LrQsCDQvdCwIEpvc3QvUnViaWsg0L7RgiDRgtC10LzRiywg0Lgg0L7QvdCwINGB0YLQvtC40YIg0KDQkNCd0KzQqNCVCiAgICAg0L3QsNGI0LXQuTog0L_QsNC90LXQu9GMINCx0YDQsNC70LAg0L_QtdGA0LLRg9GOINC_0L7QtNGF0L7QtNGP0YnRg9GOINC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60L7QuSDQv9C-0LTQvNC10L3Rj9C70LAKICAgICDQvdCw0YfQtdGA0YLQsNC90LjRjyDQsdC70L7QutCwINC90LAg0YLQtdC80LjQvdGLLiDQndCw0LHQvtGAINCy0LXRgdC-0LIg0LfQsNC00LDQvSBDU1Mg0LHQu9C-0LrQsCwg0L_QvtGN0YLQvtC80YMKICAgICDQtNC10YDQttC40Lwg0LXQs9C-INC30LTQtdGB0YwuINCc0LXQvdGP0LXRgtGB0Y8g0LTQuNC30LDQudC9IOKAlCDQvNC10L3Rj9C10YLRgdGPINGN0YLQsCDRgdGC0YDQvtC60LAuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMTAwOzIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICcmYW1wO2ZhbWlseT1SdWJpazppdGFsLHdnaHRAMCwxMDA7MCwyMDA7MCwzMDA7MSwxMDA7MSwyMDAnICsKICAgICcmYW1wO2Rpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4nOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQvtCy0LXRgNC60LAgwqvQtNC-0LvQtdGC0LXQu9C-INC70LjCuyAtLS0tLS0tLS0tCiAgICAg0J_QsNC90LXQu9GMINC_0LjRiNC10YIg0LfQvdCw0YfQtdC90LjRjyDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQtdC3INGB0LXQu9C10LrRgtC-0YDRiy4g0JXRgdC70Lgg0YHQtdC70LXQutGC0L7RgAogICAgINC90LUg0L3QsNGI0ZHQu9GB0Y8g0LjQu9C4INC_0L7QtNGB0YLQsNC90L7QstC60LAg0L3QtSDRgdC-0LLQv9Cw0LvQsCDigJQg0LfQsNC_0LjRgdGMINC80L7Qu9GH0LAg0L3QtSDQv9GA0L7QuNGB0YXQvtC00LjRgi4KICAgICDQmNC80LXQvdC90L4g0YLQsNC6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC30LDRgdGC0YDRj9C70L4g0L3QsCAxMjU6INC_0LDQvdC10LvRjCDQv9C-0YHRh9C40YLQsNC70LAgMTI3LAogICAgINC30LDQv9C40YHQsNGC0Ywg0L3QtSDRgdC80L7Qs9C70LAsINCwINC_0YDQvtCy0LXRgNC60LAgwqvRgdCx0L7RgNC60LAg0YHQvtCy0L_QsNC00LDQtdGCINGBINC40YHRhdC-0LTQvdC40LrQvtC8wrsKICAgICDRgdGA0LDQstC90LjQstCw0LvQsCDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3QvtC1INGBINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdGL0LwuCgogICAgINCf0L7RjdGC0L7QvNGDINC_0L7RgdC70LUg0YHQsdC-0YDQutC4INGH0LjRgtCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0J7QkdCg0JDQotCd0J4g0Lgg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4KICAgICDQstCy0ZHQuyDRh9C10LvQvtCy0LXQui4g0J3QtdGB0L7QstC_0LDQstGI0LjQtSDQv9C-0LvRjyDQv9Cw0L3QtdC70Ywg0L3QsNC30YvQstCw0LXRgiDQstGB0LvRg9GFLiAqLwogIGZ1bmN0aW9uIGxhbmRlZChleHBlY3RlZCwgYWN0dWFsLCBza2lwLCBwYXRoLCBvdXQpIHsKICAgIHBhdGggPSBwYXRoIHx8ICcnOyBvdXQgPSBvdXQgfHwgW107CiAgICBpZiAoZXhwZWN0ZWQgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHsKICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBsYW5kZWQoZXhwZWN0ZWRba10sIGFjdHVhbFtrXSwgc2tpcCwgcGF0aCA_IHBhdGggKyAnLicgKyBrIDogaywgb3V0KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKFN0cmluZyhleHBlY3RlZCA9PSBudWxsID8gJycgOiBleHBlY3RlZCkgIT09IFN0cmluZyhhY3R1YWwgPT0gbnVsbCA_ICcnIDogYWN0dWFsKSkgewogICAgICBpZiAoIXNraXAgfHwgIXNraXAudGVzdChwYXRoKSkgb3V0LnB1c2gocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiwogICAgINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMjQg0LDQstCz0YPRgdGC0LAgMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5IiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICLQvtGCIDE0IDkwMCDigr0iLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIm1ha2VzT2ZmZXIiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICAgICAicHJpY2UiOiAiMTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAiY29udGFjdFBvaW50IjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgICAgICJjb250YWN0VHlwZSI6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgICAgICJhcmVhU2VydmVkIjogIlJVIiwKICAgICAgICAgICJhdmFpbGFibGVMYW5ndWFnZSI6IFsKICAgICAgICAgICAgIlJ1c3NpYW4iLAogICAgICAgICAgICAiRW5nbGlzaCIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSI6IHsKICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwKICAgICAgInB1Ymxpc2hlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImluTGFuZ3VhZ2UiOiAicnUtUlUiCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnphci1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgTUFYVyA9IDEyNDA7IC8vINC_0YDQtdC00LXQuyDRiNC40YDQuNC90Ysg0LrQsNC00YDQsCwg0YHQvC4g0LjRgdGC0L7RgNC40Y4g0L_RgNC-0LXQutGC0LAKICB2YXIgU0lURSA9ICdodHRwczovL2F2YW56YXRvLnJ1JzsKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGF0dHIoZWwsIGEpIHsgcmV0dXJuIGVsID8gKGVsLmdldEF0dHJpYnV0ZShhKSB8fCAnJykgOiAnJzsgfQoKICAvKiDQotC10LrRgdGCINC00LvRjyDRgNCw0LfQvNC10YLQutC4OiA8YnI–INGB0LDQvCDQv9C-INGB0LXQsdC1INC_0YDQvtCx0LXQu9CwINC90LUg0LTQsNGR0YIsINC4CiAgICAgwqtQcmVtaWVyZSBQcm8uPGJyPtCf0YDQvtGJ0LXCuyDQv9GA0LXQstGA0LDRidCw0LvQvtGB0Ywg0LIgwqtQcmVtaWVyZSBQcm8u0J_RgNC-0YnQtcK7LgogICAgINCt0YLQvtGCINC00LXRhNC10LrRgiDRg9C20LUg0YfQuNC90LjQu9C4INCyINC_0LDQvdC10LvRj9GFINC-0LHRg9GH0LXQvdC40Y8g0Lgg0L_RgNC10YHQtdGC0L7QsiDigJQKICAgICDQt9C00LXRgdGMINC-0L0g0LfQsNC60YDRi9GCINGBINGB0LDQvNC-0LPQviDQvdCw0YfQsNC70LAuICovCiAgZnVuY3Rpb24gdGV4dFdpdGhCcmVha3MoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBjID0gZWwuY2xvbmVOb2RlKHRydWUpOwogICAgYWxsKGMsICdicicpLmZvckVhY2goZnVuY3Rpb24gKGJyKSB7CiAgICAgIGJyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCBicik7CiAgICB9KTsKICAgIHJldHVybiBjLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1INGB0YLRgNCw0L3QuNGG0Ysg0LIg0LrQvtC90YTQuNCzIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmF2ei10aXRsZS1pbm5lcicpOwogICAgdmFyIHNlY3MgPSBhbGwoc2NvcGUsICcuYXZ6LXNlY3Rpb24taGVhZGVyJyk7CiAgICBmdW5jdGlvbiBzZWMoaSkgewogICAgICByZXR1cm4gewogICAgICAgIGxhYmVsOiB0KG9uZShzZWNzW2ldLCAnLmF2ei1sYWJlbCcpKSwKICAgICAgICBoMjogdChvbmUoc2Vjc1tpXSwgJy5hdnotaDInKSkKICAgICAgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGhlcm86IHsKICAgICAgICBleWVicm93OiB0KG9uZShzY29wZSwgJy5hdnotZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChsaW5lc1swXSksCiAgICAgICAgbGluZTI6IHQobGluZXNbMV0pLAogICAgICAgIHN1YjogdChvbmUoc2NvcGUsICcuYXZ6LXN1YicpKQogICAgICB9LAogICAgICBnYWxsZXJ5TGFiZWw6IHQob25lKHNjb3BlLCAnLmF2ei1zZWN0aW9uLWxhYmVsIGgyJykpLAogICAgICBzaG90czogYWxsKHNjb3BlLCAnLmF2ei1nYWxsZXJ5LWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgdmFyIGltZyA9IG9uZShpdCwgJ2ltZycpOwogICAgICAgIHZhciBhID0gb25lKGl0LCAnLmF2ei1nLWxpbmsnKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgc3JjOiBhdHRyKGltZywgJ3NyYycpLAogICAgICAgICAgYWx0OiBhdHRyKGltZywgJ2FsdCcpLAogICAgICAgICAgY2FwOiB0KG9uZShpdCwgJy5hdnotZy1jYXAnKSksCiAgICAgICAgICBocmVmOiBhID8gYXR0cihhLCAnaHJlZicpIDogJycsCiAgICAgICAgICB3OiBhdHRyKGltZywgJ3dpZHRoJyksCiAgICAgICAgICBoOiBhdHRyKGltZywgJ2hlaWdodCcpCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIHByb2pTZWM6IHNlYygwKSwKICAgICAgcHJvamVjdHM6IGFsbChzY29wZSwgJy5hdnotcHJvaicpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgIHZhciBpbWcgPSBvbmUoYSwgJ2ltZycpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBocmVmOiBhdHRyKGEsICdocmVmJyksCiAgICAgICAgICBpbWc6IGF0dHIoaW1nLCAnc3JjJyksCiAgICAgICAgICBhbHQ6IGF0dHIoaW1nLCAnYWx0JyksCiAgICAgICAgICBuYW1lOiB0KG9uZShhLCAnaDMnKSksCiAgICAgICAgICBkZXNjOiB0KG9uZShhLCAncCcpKSwKICAgICAgICAgIG1vcmU6IHQob25lKGEsICcuYXZ6LXByb2otbW9yZScpKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBhd2FyZDogewogICAgICAgIGxhYmVsOiB0KG9uZShzY29wZSwgJy5hdnotYXdhcmQgLmF2ei1sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoc2NvcGUsICcuYXZ6LWF3YXJkIC5hdnotaDInKSksCiAgICAgICAgdGV4dDogdChvbmUoc2NvcGUsICcuYXZ6LWF3YXJkLXRleHQnKSksCiAgICAgICAgbGlua1RleHQ6IHQob25lKHNjb3BlLCAnLmF2ei1hd2FyZC1saW5rJykpLAogICAgICAgIGxpbmtIcmVmOiBhdHRyKG9uZShzY29wZSwgJy5hdnotYXdhcmQtbGluaycpLCAnaHJlZicpCiAgICAgIH0sCiAgICAgIGZtdFNlYzogc2VjKDEpLAogICAgICBmb3JtYXRzOiBhbGwoc2NvcGUsICcuYXZ6LWZtdC1saXN0IGxpJykubWFwKGZ1bmN0aW9uIChsaSkgewogICAgICAgIHJldHVybiB7IGgzOiB0KG9uZShsaSwgJ2gzJykpLCBwOiB0KG9uZShsaSwgJ3AnKSkgfTsKICAgICAgfSksCiAgICAgIGFkdlNlYzogc2VjKDIpLAogICAgICBhZHY6IGFsbChzY29wZSwgJy5hdnotYWR2LWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgcmV0dXJuIHsgbnVtOiB0KG9uZShpdCwgJy5hdnotYWR2LW51bScpKSwgaDM6IHQob25lKGl0LCAnaDMnKSksIHA6IHQob25lKGl0LCAncCcpKSB9OwogICAgICB9KSwKICAgICAgY29zdDogewogICAgICAgIGxhYmVsOiB0KG9uZShzY29wZSwgJy5hdnotY29zdCAuYXZ6LWxhYmVsJykpLAogICAgICAgIGgyOiB0KG9uZShzY29wZSwgJy5hdnotY29zdCAuYXZ6LWgyJykpLAogICAgICAgIHRleHQ6IHQob25lKHNjb3BlLCAnLmF2ei1jb3N0LXRleHQnKSksCiAgICAgICAgYnRuOiB0KG9uZShzY29wZSwgJy5hdnotY29zdCAuYXZ6LWJ0bicpKSwKICAgICAgICBidG5IcmVmOiBhdHRyKG9uZShzY29wZSwgJy5hdnotY29zdCAuYXZ6LWJ0bicpLCAnaHJlZicpCiAgICAgIH0sCiAgICAgIGZhcVNlYzogc2VjKDMpLAogICAgICBmYXE6IGFsbChzY29wZSwgJy5hdnotZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgcmV0dXJuIHsgcTogdChvbmUoaXQsICcuYXZ6LWZhcS1xJykpLCBhOiBodG1sKG9uZShpdCwgJy5hdnotZmFxLWEnKSkgfTsKICAgICAgfSksCiAgICAgIGN0YTogewogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5hdnotY3RhLXRpdGxlJykpLAogICAgICAgIGJ0bnM6IGFsbChzY29wZSwgJy5hdnotYnRuLWNvbnRhaW5lciAuYXZ6LWJ0bicpLm1hcChmdW5jdGlvbiAoYikgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogdChiKSwgaHJlZjogYXR0cihiLCAnaHJlZicpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgZm9vdDogewogICAgICAgIGNvcHk6IHQob25lKHNjb3BlLCAnLmF2ei1jb3B5JykpLAogICAgICAgIHNvY2lhbHM6IGFsbChzY29wZSwgJy5hdnotc29jaWFscyBhJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGEpLCBocmVmOiBhdHRyKGEsICdocmVmJykgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICB0aWNrZXI6IFtdLAogICAgICBsZDogeyBuYW1lOiAnJywgZGVzYzogJycsIHNydk5hbWU6ICcnLCBzcnZEZXNjOiAnJyB9CiAgICB9OwogIH0KCiAgLyog0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwINC20LjQstGR0YIg0L3QtSDQsiDRgNCw0LfQvNC10YLQutC1LCDQsCDQvNCw0YHRgdC40LLQvtC8INCy0L3Rg9GC0YDQuCDRgdC60YDQuNC_0YLQsC4KICAgICDQoNCw0LfQsdC40YDQsNC10Lwg0YLQtdC60YHRgtC-0LwsINCwINC90LUg0LLRi9C_0L7Qu9C90LXQvdC40LXQvCDQutC-0LTQsDog0LLRi9C_0L7Qu9C90Y_RgtGMINGH0YPQttC-0Lkg0YHQutGA0LjQv9GCCiAgICAg0YDQsNC00Lgg0YfRgtC10L3QuNGPIOKAlCDQv9C70L7RhdCw0Y8g0LjQtNC10Y8uICovCiAgZnVuY3Rpb24gcmVhZFRpY2tlcihzcmMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgaXRlbXMgPSBcWyhbXHNcU10qPylcXTsvKTsKICAgIGlmICghbSkgcmV0dXJuIFtdOwogICAgdmFyIG91dCA9IFtdLCByZSA9IC9ce1xzKmxhYmVsOlxzKicoW14nXSopJyxccypocmVmOlxzKicoW14nXSopJyhbXn1dKilcfS9nLCBoaXQ7CiAgICB3aGlsZSAoKGhpdCA9IHJlLmV4ZWMobVsxXSkpKSB7CiAgICAgIG91dC5wdXNoKHsgbGFiZWw6IGhpdFsxXSwgaHJlZjogaGl0WzJdLCBleHRlcm5hbDogaGl0WzNdLmluZGV4T2YoJ2V4dGVybmFsJykgPiAtMSB9KTsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiByZWFkTGQoZG9jLCBjZmcpIHsKICAgIHZhciBzID0gb25lKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOwogICAgICAob1snQGdyYXBoJ10gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnKSB7IGNmZy5sZC5uYW1lID0gbi5uYW1lIHx8ICcnOyBjZmcubGQuZGVzYyA9IG4uZGVzY3JpcHRpb24gfHwgJyc7IH0KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1NlcnZpY2UnKSB7IGNmZy5sZC5zcnZOYW1lID0gbi5uYW1lIHx8ICcnOyBjZmcubGQuc3J2RGVzYyA9IG4uZGVzY3JpcHRpb24gfHwgJyc7IH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KCiAgLyogLS0tLS0tLS0tLSDQstGR0YDRgdGC0LrQsCDQv9Cw0L3QtdC70LggLS0tLS0tLS0tLQogICAgINCi0LXQvNCwIHdmb2xpbyDQutGA0LDRgdC40YIg0L_QvtC70Y8g0LIg0LHQtdC70YvQuSDRgtC10LrRgdGCINC90LAg0LHQtdC70L7QvCDRhNC-0L3QtSwg0L_QvtGN0YLQvtC80YMg0YbQstC10YIsCiAgICAg0YjRgNC40YTRgiDQuCAtd2Via2l0LXRleHQtZmlsbC1jb2xvciDQt9Cw0LTQsNGO0YLRgdGPINGP0LLQvdC-INC4INGBINC_0YDQuNC-0YDQuNGC0LXRgtC-0LwsCiAgICAg0LAg0LLRgdC1INGH0LDRgdGC0L3Ri9C1INC_0YDQsNCy0LjQu9CwINC90LDRh9C40L3QsNGO0YLRgdGPINGBICNhdnphci1yb290LiAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnphci1yb290LCNhdnphci1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6YXItcm9vdCBpbnB1dCwjYXZ6YXItcm9vdCB0ZXh0YXJlYXtiYWNrZ3JvdW5kOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7JywKICAgICdvcGFjaXR5OjEgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjEuNCAhaW1wb3J0YW50fScsCiAgICAnI2F2emFyLXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnphci1yb290IC5hdnphci1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0nLAogICAgJyNhdnphci1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnphci13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnphci1oZWFke3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnphci1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6YXItYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6YXItZm9vdHtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItYi5we2JvcmRlci1jb2xvcjojMWQxZDFmfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItc2VjPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItaW57cGFkZGluZzoxNHB4fScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItZiBpbnB1dCwjYXZ6YXItcm9vdCAuYXZ6YXItZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnphci1yb290IC5hdnphci1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsjYXZ6YXItcm9vdCAuYXZ6YXItcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2emFyLXdpbntib3JkZXItcmFkaXVzOjB9fScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWNhcmQgaDR7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudH0nLAogICAgJyNhdnphci1yb290IC5hdnphci1jYXJkLndhcm57Ym9yZGVyLWNvbG9yOiNlNmMyMDA7YmFja2dyb3VuZDojZmZmZGYwfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnphci1yb290IC5hdnphci1pbWc-aW1ne3dpZHRoOjcwcHg7aGVpZ2h0Ojg4cHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiNlY2VjZWM7ZmxleDpub25lfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWltZz5pbWcuYmFke291dGxpbmU6MnB4IHNvbGlkICNkMzN9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItaW1nIC5ne2ZsZXg6MX0nLAogICAgJyNhdnphci1yb290IC5hdnphci1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE0MHB4LDFmcikpO2dhcDoxMHB4fScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWdyaWQgZmlndXJle21hcmdpbjowO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWdyaWQgaW1ne3dpZHRoOjEwMCU7aGVpZ2h0OjEyMHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo4cHg7ZGlzcGxheTpibG9ja30nLAogICAgJyNhdnphci1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6YXItbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICAvKiDQu9C40YjQvdC40Lkg0L_QtdGA0LXQvdC-0YE6INCx0YDQsNGD0LfQtdGAINGB0YrQtdC00LDQtdGCINC_0LXRgNCy0YvQuSDQv9C-0YHQu9C1IDx0ZXh0YXJlYT4gKi8KICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj5cbicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6YXItZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnphci1yb290JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnphci1tc2cnKTsgaWYgKGUpIGUudGV4dENvbnRlbnQgPSBzOyB9CgogIHZhciBjZmcgPSBudWxsOwoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YTQvtGA0LzQsCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnphci13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXItaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90L7QuSDRgdGK0ZHQvNC60Lg8L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXItYiIgaWQ9ImF2emFyLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXItYm9keSI-JzsKCiAgICBoICs9ICc8cCBjbGFzcz0iYXZ6YXItaGludCI-0J_RgNCw0LLQutC4INC90LUg0L_Rg9Cx0LvQuNC60YPRjtGC0YHRjy4g0J_QsNC90LXQu9GMINGB0L7QsdC10YDRkdGCINC60L7QtCDQsdC70L7QutCwINGG0LXQu9C40LrQvtC8IOKAlCAnICsKICAgICAgJ9Cy0YHRgtCw0LLQuNGC0LUg0LXQs9C-INC_0L7QstC10YDRhSBIVE1MLdCx0LvQvtC60LAg0YHRgtGA0LDQvdC40YbRiyDQsiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUuPC9wPic7CgogICAgLyog0KjQsNC_0LrQsCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emFyLXNlYyIgb3Blbj48c3VtbWFyeT7QqNCw0L_QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuiAo0LrQu9GO0YfQtdCy0LDRjyDRhNGA0LDQt9CwLCDRgdGC0L7QuNGCINCy0L3Rg9GC0YDQuCBIMSknLCAnaGVyby5leWVicm93JywgY2ZnLmhlcm8uZXllYnJvdykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgZmllbGQoJ9Cf0LXRgNCy0LDRjyDRgdGC0YDQvtC60LAg0LjQvNC10L3QuCcsICdoZXJvLmxpbmUxJywgY2ZnLmhlcm8ubGluZTEpICsKICAgICAgZmllbGQoJ9CS0YLQvtGA0LDRjyDRgdGC0YDQvtC60LAg0LjQvNC10L3QuCAo0LrRg9GA0YHQuNCyKScsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0J_QvtC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uc3ViJywgY2ZnLmhlcm8uc3ViLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCR0LXQs9GD0YnQsNGPINGB0YLRgNC-0LrQsCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emFyLXNlYyI-PHN1bW1hcnk-0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwICgnICsgY2ZnLnRpY2tlci5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphci1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXItaGludCI-0KHQstC-0Lgg0YHRgtGA0LDQvdC40YbRiyDQvtGC0LrRgNGL0LLQsNGO0YLRgdGPINCyINGC0L7QuSDQttC1INCy0LrQu9Cw0LTQutC1LCDRh9GD0LbQuNC1INGB0LDQudGC0Ysg4oCUINCyINC90L7QstC-0LkuICcgKwogICAgICAn0J_QsNC90LXQu9GMINC-0L_RgNC10LTQtdC70Y_QtdGCINGN0YLQviDQv9C-INCw0LTRgNC10YHRgyDRgdCw0LzQsC48L3A-JzsKICAgIGNmZy50aWNrZXIuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphci1jYXJkIj48aDQ-0J_Rg9C90LrRgiAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ3RpY2tlci4nICsgaSArICcubGFiZWwnLCB4LmxhYmVsKSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEnLCAndGlja2VyLicgKyBpICsgJy5ocmVmJywgeC5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQmtCw0LTRgNGLICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIj48c3VtbWFyeT7QmtCw0LTRgNGLINCz0LDQu9C10YDQtdC4ICgnICsgY2ZnLnNob3RzLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2dhbGxlcnlMYWJlbCcsIGNmZy5nYWxsZXJ5TGFiZWwpICsKICAgICAgJzxwIGNsYXNzPSJhdnphci1oaW50Ij7Qn9C-0LTQv9C40YHRjCDQstC40LTQvdCwINC_0L7QtCDQutCw0LTRgNC-0Lwg0Lgg0YPRhdC-0LTQuNGCINCyINGA0LDQt9C80LXRgtC60YMg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-LiAnICsKICAgICAgJ9Ch0YHRi9C70LrRgyDRgdGC0LDQstGM0YLQtSDRgtC-0LvRjNC60L4g0LXRgdC70Lgg0YMg0L7QsdGK0LXQutGC0LAg0LXRgdGC0Ywg0YHQstC-0Y8g0YHRgtGA0LDQvdC40YbQsCDigJQg0LjQvdCw0YfQtSDQvtGB0YLQsNCy0YzRgtC1INC_0L7Qu9C1INC_0YPRgdGC0YvQvC48L3A-JzsKICAgIGNmZy5zaG90cy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emFyLWNhcmQiIGlkPSJhdnphci1zaG90LScgKyBpICsgJyI-PGg0PtCa0LDQtNGAICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLWltZyI-PGltZyBzcmM9IicgKyBlc2Mocy5zcmMpICsgJyIgZGF0YS1wcmV2PSJzaG90cy4nICsgaSArICcuc3JjIiBhbHQ9IiI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPicgKwogICAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCDQv9C-0LQg0LrQsNC00YDQvtC8JywgJ3Nob3RzLicgKyBpICsgJy5jYXAnLCBzLmNhcCkgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC60LDQtNGA0LAgKGFsdCwg0LTQu9GPINC_0L7QuNGB0LrQsCDQuCDQvdC10LfRgNGP0YfQuNGFKScsICdzaG90cy4nICsgaSArICcuYWx0Jywgcy5hbHQpICsKICAgICAgICBmaWVsZCgn0KHRgdGL0LvQutCwINC90LAg0YHRgtGA0LDQvdC40YbRgyDQvtCx0YrQtdC60YLQsCAo0LzQvtC20L3QviDQv9GD0YHRgtC-KScsICdzaG90cy4nICsgaSArICcuaHJlZicsIHMuaHJlZikgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBINGE0L7RgtC-0LPRgNCw0YTQuNC4JywgJ3Nob3RzLicgKyBpICsgJy5zcmMnLCBzLnNyYykgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphci1iIiBkYXRhLXBpY2s9InNob3RzLicgKyBpICsgJyI-0JLRi9Cx0YDQsNGC0Ywg0LrQsNC00YAg0YHQviDRgdGC0YDQsNC90LjRhtGLINC-0LHRitC10LrRgtCwPC9idXR0b24-JyArCiAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCf0YDQvtC10LrRgtGLICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIj48c3VtbWFyeT7Qn9GA0L7QtdC60YLRiyAoJyArIGNmZy5wcm9qZWN0cy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphci1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphci1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAncHJvalNlYy5sYWJlbCcsIGNmZy5wcm9qU2VjLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAnLCAncHJvalNlYy5oMicsIGNmZy5wcm9qU2VjLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLnByb2plY3RzLmZvckVhY2goZnVuY3Rpb24gKHAsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXItY2FyZCI-PGg0PtCf0YDQvtC10LrRgiAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnphci1pbWciPjxpbWcgc3JjPSInICsgZXNjKHAuaW1nKSArICciIGRhdGEtcHJldj0icHJvamVjdHMuJyArIGkgKyAnLmltZyIgYWx0PSIiPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdwcm9qZWN0cy4nICsgaSArICcubmFtZScsIHAubmFtZSkgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1JywgJ3Byb2plY3RzLicgKyBpICsgJy5kZXNjJywgcC5kZXNjLCAnYXJlYScpICsKICAgICAgICBmaWVsZCgn0JDQtNGA0LXRgSDRgdGC0YDQsNC90LjRhtGLINC_0YDQvtC10LrRgtCwJywgJ3Byb2plY3RzLicgKyBpICsgJy5ocmVmJywgcC5ocmVmKSArCiAgICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGB0YHRi9C70LrQuCcsICdwcm9qZWN0cy4nICsgaSArICcubW9yZScsIHAubW9yZSkgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC-0LHQu9C-0LbQutC4IChhbHQpJywgJ3Byb2plY3RzLicgKyBpICsgJy5hbHQnLCBwLmFsdCkgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBINC-0LHQu9C-0LbQutC4JywgJ3Byb2plY3RzLicgKyBpICsgJy5pbWcnLCBwLmltZykgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphci1iIiBkYXRhLXBpY2s9InByb2plY3RzLicgKyBpICsgJyI-0JLRi9Cx0YDQsNGC0Ywg0LrQsNC00YAg0YHQviDRgdGC0YDQsNC90LjRhtGLINC_0YDQvtC10LrRgtCwPC9idXR0b24-JyArCiAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCf0YPQsdC70LjQutCw0YbQuNGPICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIj48c3VtbWFyeT7Qn9GD0LHQu9C40LrQsNGG0LjRjzwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphci1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphci1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnYXdhcmQubGFiZWwnLCBjZmcuYXdhcmQubGFiZWwpICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGB0YHRi9C70LrQuCcsICdhd2FyZC5saW5rVGV4dCcsIGNmZy5hd2FyZC5saW5rVGV4dCkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4g0L_QtdGA0LXQvdC-0YEg0YHRgtGA0L7QutC4INGC0LXQs9C-0LwgYnIpJywgJ2F3YXJkLmgyJywgY2ZnLmF3YXJkLmgyLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnYXdhcmQudGV4dCcsIGNmZy5hd2FyZC50ZXh0LCAnYXJlYScpICsKICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0YHRgdGL0LvQutC4JywgJ2F3YXJkLmxpbmtIcmVmJywgY2ZnLmF3YXJkLmxpbmtIcmVmKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQpNC-0YDQvNCw0YLRiyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emFyLXNlYyI-PHN1bW1hcnk-0KfRgtC-INGB0L3QuNC80LDRjiAoJyArIGNmZy5mb3JtYXRzLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdmbXRTZWMubGFiZWwnLCBjZmcuZm10U2VjLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAnLCAnZm10U2VjLmgyJywgY2ZnLmZtdFNlYy5oMikgKyAnPC9kaXY-JzsKICAgIGNmZy5mb3JtYXRzLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXItY2FyZCI-PGg0PtCk0L7RgNC80LDRgiAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ2Zvcm1hdHMuJyArIGkgKyAnLmgzJywgZi5oMykgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1JywgJ2Zvcm1hdHMuJyArIGkgKyAnLnAnLCBmLnAsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPHAgY2xhc3M9ImF2emFyLWhpbnQiPtCd0LDQt9Cy0LDQvdC40Y8g0YTQvtGA0LzQsNGC0L7QsiDRg9GF0L7QtNGP0YIg0LIg0YDQsNC30LzQtdGC0LrRgyDRg9GB0LvRg9Cz0Lgg0YHQv9C40YHQutC-0Lwg0L_RgNC10LTQu9C-0LbQtdC90LjQuS48L3A-JyArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQn9C-0LTRhdC-0LQgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphci1zZWMiPjxzdW1tYXJ5PtCa0LDQuiDRjyDRgNCw0LHQvtGC0LDRjiAoJyArIGNmZy5hZHYubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2FkdlNlYy5sYWJlbCcsIGNmZy5hZHZTZWMubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCcsICdhZHZTZWMuaDInLCBjZmcuYWR2U2VjLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmFkdi5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emFyLWNhcmQiPjxoND7Qn9GD0L3QutGCICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Cd0L7QvNC10YAnLCAnYWR2LicgKyBpICsgJy5udW0nLCBhLm51bSkgKwogICAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnYWR2LicgKyBpICsgJy5oMycsIGEuaDMpICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2Fkdi4nICsgaSArICcucCcsIGEucCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQodGC0L7QuNC80L7RgdGC0YwgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphci1zZWMiPjxzdW1tYXJ5PtCh0YLQvtC40LzQvtGB0YLRjDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphci1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXItaGludCI-0KbQtdC90LAg0LIg0YDQsNC30LzQtdGC0LrQtSDQvdC1INC-0LHRitGP0LLQu9GP0LXRgtGB0Y8g0L3QsNC80LXRgNC10L3QvdC-OiDQsNGA0YXQuNGC0LXQutGC0YPRgNC90L7QuSDRgdGK0ZHQvNC60Lgg0L3QtdGCICcgKwogICAgICAn0LIg0L_RgNCw0LnRgdC1LiDQldGB0LvQuCDQstC_0LjRiNC10YLQtSDRgdGO0LTQsCDRgdGD0LzQvNGDIOKAlCDQvtC90LAg0L7RgdGC0LDQvdC10YLRgdGPINC-0LHRi9GH0L3Ri9C8INGC0LXQutGB0YLQvtC8LCDQsiDRgNCw0LfQvNC10YLQutGDINC90LUg0YPQudC00ZHRgi48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphci1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnY29zdC5sYWJlbCcsIGNmZy5jb3N0LmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnY29zdC5oMicsIGNmZy5jb3N0LmgyKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnY29zdC50ZXh0JywgY2ZnLmNvc3QudGV4dCwgJ2FyZWEnKSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphci1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0LrQvdC-0L_QutC4JywgJ2Nvc3QuYnRuJywgY2ZnLmNvc3QuYnRuKSArCiAgICAgIGZpZWxkKCfQkNC00YDQtdGBINC60L3QvtC_0LrQuCcsICdjb3N0LmJ0bkhyZWYnLCBjZmcuY29zdC5idG5IcmVmKSArICc8L2Rpdj4nICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCS0L7Qv9GA0L7RgdGLICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIj48c3VtbWFyeT7QktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0YsgKCcgKyBjZmcuZmFxLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdmYXFTZWMubGFiZWwnLCBjZmcuZmFxU2VjLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAnLCAnZmFxU2VjLmgyJywgY2ZnLmZhcVNlYy5oMikgKyAnPC9kaXY-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXItaGludCI-0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLINGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQviDigJQg0L7RgtC00LXQu9GM0L3Ri9GFINC_0L7Qu9C10LkgJyArCiAgICAgICfCq9C00LvRjyDQv9C-0LjRgdC60LDCuyDQt9C00LXRgdGMINC90LXRgiDQuCDQsdGL0YLRjCDQvdC1INC00L7Qu9C20L3Qvi48L3A-JzsKICAgIGNmZy5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphci1jYXJkIj48aDQ-0JLQvtC_0YDQvtGBICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9CS0L7Qv9GA0L7RgScsICdmYXEuJyArIGkgKyAnLnEnLCBmLnEpICsKICAgICAgICBmaWVsZCgn0J7RgtCy0LXRgiAo0LzQvtC20L3QviBIVE1MKScsICdmYXEuJyArIGkgKyAnLmEnLCBmLmEsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_RgNC40LfRi9CyINC4INGE0YPRgtC10YAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphci1zZWMiPjxzdW1tYXJ5PtCf0YDQuNC30YvQsiDQuCDRhNGD0YLQtdGAPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDQv9GA0LjQt9GL0LLQsCAo0LzQvtC20L3QviDQv9C10YDQtdC90L7RgSDRgdGC0YDQvtC60Lgg0YLQtdCz0L7QvCBiciknLCAnY3RhLmgyJywgY2ZnLmN0YS5oMiwgJ2FyZWEnKTsKICAgIGNmZy5jdGEuYnRucy5mb3JFYWNoKGZ1bmN0aW9uIChiLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Ca0L3QvtC_0LrQsCAnICsgKGkgKyAxKSArICcg4oCUINC90LDQtNC_0LjRgdGMJywgJ2N0YS5idG5zLicgKyBpICsgJy50ZXh0JywgYi50ZXh0KSArCiAgICAgICAgZmllbGQoJ9Ca0L3QvtC_0LrQsCAnICsgKGkgKyAxKSArICcg4oCUINCw0LTRgNC10YEnLCAnY3RhLmJ0bnMuJyArIGkgKyAnLmhyZWYnLCBiLmhyZWYpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Ca0L7Qv9C40YDQsNC50YInLCAnZm9vdC5jb3B5JywgY2ZnLmZvb3QuY29weSk7CiAgICBjZmcuZm9vdC5zb2NpYWxzLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgICBmaWVsZCgn0J_RgNC-0YTQuNC70YwgJyArIChpICsgMSkgKyAnIOKAlCDQvdCw0LTQv9C40YHRjCcsICdmb290LnNvY2lhbHMuJyArIGkgKyAnLnRleHQnLCBzLnRleHQpICsKICAgICAgICBmaWVsZCgn0J_RgNC-0YTQuNC70YwgJyArIChpICsgMSkgKyAnIOKAlCDQsNC00YDQtdGBJywgJ2Zvb3Quc29jaWFscy4nICsgaSArICcuaHJlZicsIHMuaHJlZikgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KDQsNC30LzQtdGC0LrQsCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emFyLXNlYyI-PHN1bW1hcnk-0KDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphci1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXItaGludCI-0JfQsNCz0L7Qu9C-0LLQvtC6INC4INC-0L_QuNGB0LDQvdC40LUg0YHQsNC80L7QuSDRgdGC0YDQsNC90LjRhtGLICjRgtC-LCDRh9GC0L4g0LLQuNC00L3QviDQsiDQstGL0LTQsNGH0LUpICcgKwogICAgICAn0L_RgNCw0LLRj9GC0YHRjyDQvdC1INC30LTQtdGB0YwsINCwINCyINC90LDRgdGC0YDQvtC50LrQsNGFINGB0YLRgNCw0L3QuNGG0Ysgd2ZvbGlvLjwvcD4nICsKICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDQsiDRgNCw0LfQvNC10YLQutC1JywgJ2xkLm5hbWUnLCBjZmcubGQubmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCyINGA0LDQt9C80LXRgtC60LUnLCAnbGQuZGVzYycsIGNmZy5sZC5kZXNjLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0YPRgdC70YPQs9C4JywgJ2xkLnNydk5hbWUnLCBjZmcubGQuc3J2TmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnbGQuc3J2RGVzYycsIGNmZy5sZC5zcnZEZXNjLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2emFyLWZvb3QiPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXItYiBwIiBpZD0iYXZ6YXItYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphci1iIiBpZD0iYXZ6YXItdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAgICc8c3BhbiBpZD0iYXZ6YXItbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxNnB4Ij48dGV4dGFyZWEgaWQ9ImF2emFyLW91dCIgcmVhZG9ubHk-PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4nOwoKICAgIHJvb3QuaW5uZXJIVE1MID0gaDsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emFyLWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKCiAgICAvKiDQttC40LLQvtC5INC_0YDQtdC00L_RgNC-0YHQvNC-0YLRgCDQutCw0YDRgtC40L3QutC4INC_0YDQuCDQv9GA0LDQstC60LUg0LDQtNGA0LXRgdCwICovCiAgICBhbGwocm9vdCwgJ2lucHV0W2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnApIHsKICAgICAgdmFyIHAgPSBpbnAuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKCEvXC4oc3JjfGltZykkLy50ZXN0KHApKSByZXR1cm47CiAgICAgIGlucC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgICBpZiAocHJldikgcHJldi5zcmMgPSBpbnAudmFsdWU7CiAgICAgIH0pOwogICAgfSk7CgogICAgLyog0YDQsNC30LzQtdGA0Ysg0LrQsNC00YDQsCDQuNC30LzQtdGA0Y_QtdC8INGB0LDQvNC4OiDQstGA0LDRgtGMINCyINGA0LDQt9C80LXRgtC60LUg0L3QtdC70YzQt9GPLAogICAgICAg0LAg0YDRg9C60LDQvNC4INC-0L3QuCDRg9GB0YLQsNGA0LXQstCw0Y7RgiDigJQg0YLQsNC6INGD0LbQtSDQsdGL0LvQviDQvdCwINC40L3RgtC10YDRjNC10YDQvdC-0LkgKi8KICAgIGZ1bmN0aW9uIG1lYXN1cmUodXJsKSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIGltID0gbmV3IEltYWdlKCk7CiAgICAgICAgaW0ub25sb2FkID0gZnVuY3Rpb24gKCkgeyByZXMoeyB3OiBpbS5uYXR1cmFsV2lkdGgsIGg6IGltLm5hdHVyYWxIZWlnaHQgfSk7IH07CiAgICAgICAgaW0ub25lcnJvciA9IGZ1bmN0aW9uICgpIHsgcmVzKG51bGwpOyB9OwogICAgICAgIGltLnNyYyA9IHVybDsKICAgICAgfSk7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINC60LDQtNGA0LAg0YHQviDRgdGC0YDQsNC90LjRhtGLINC-0LHRitC10LrRgtCwIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBhYnModSkgewogICAgICBpZiAoIXUpIHJldHVybiAnJzsKICAgICAgaWYgKHUuaW5kZXhPZignLy8nKSA9PT0gMCkgcmV0dXJuICdodHRwczonICsgdTsKICAgICAgcmV0dXJuIHU7CiAgICB9CgogICAgZnVuY3Rpb24gZnJvbVNyY3NldChzZXQsIHNyYykgewogICAgICBpZiAoIXNldCkgcmV0dXJuIGFicyhzcmMpOwogICAgICB2YXIgYmVzdCA9IG51bGw7CiAgICAgIHNldC5zcGxpdCgnLCcpLmZvckVhY2goZnVuY3Rpb24gKHBhcnQpIHsKICAgICAgICB2YXIgYml0cyA9IHBhcnQudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgICB2YXIgdyA9IHBhcnNlSW50KChiaXRzWzFdIHx8ICcnKS5yZXBsYWNlKCd3JywgJycpLCAxMCk7CiAgICAgICAgaWYgKCF3IHx8IHcgPiBNQVhXKSByZXR1cm47CiAgICAgICAgaWYgKCFiZXN0IHx8IHcgPiBiZXN0LncpIGJlc3QgPSB7IHc6IHcsIHVybDogYWJzKGJpdHNbMF0pIH07CiAgICAgIH0pOwogICAgICByZXR1cm4gYmVzdCA_IGJlc3QudXJsIDogYWJzKHNyYyk7CiAgICB9CgogICAgZnVuY3Rpb24gc2hvdHNGcm9tKHVybCkgewogICAgICByZXR1cm4gZmV0Y2godXJsLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgICB2YXIgb3V0ID0gW10sIHNlZW4gPSB7fTsKICAgICAgICAgIGFsbChkb2MsICdpbWcnKS5mb3JFYWNoKGZ1bmN0aW9uIChpbSkgewogICAgICAgICAgICB2YXIgdSA9IGZyb21TcmNzZXQoaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyY3NldCcpIHx8IGltLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JyksCiAgICAgICAgICAgICAgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIHx8IGltLmdldEF0dHJpYnV0ZSgnc3JjJykpOwogICAgICAgICAgICBpZiAoIXUgfHwgdS5pbmRleE9mKCdpLndmb2xpby5ydScpIDwgMCB8fCBzZWVuW3VdKSByZXR1cm47CiAgICAgICAgICAgIHNlZW5bdV0gPSAxOyBvdXQucHVzaCh1KTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICB9KTsKICAgIH0KCiAgICBhbGwocm9vdCwgJ2J1dHRvbltkYXRhLXBpY2tdJykuZm9yRWFjaChmdW5jdGlvbiAoYnRuKSB7CiAgICAgIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBiYXNlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1waWNrJyk7CiAgICAgICAgdmFyIGhyZWZJbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5ocmVmIl0nKTsKICAgICAgICB2YXIgdXJsID0gaHJlZklucCA_IGhyZWZJbnAudmFsdWUudHJpbSgpIDogJyc7CiAgICAgICAgaWYgKCF1cmwpIHsgbXNnKCfQoyDRjdGC0L7Qs9C-INC60LDQtNGA0LAg0L3QtSDQt9Cw0LTQsNC9INCw0LTRgNC10YEg0YHRgtGA0LDQvdC40YbRiyDQvtCx0YrQtdC60YLQsCDigJQg0LLRi9Cx0LjRgNCw0YLRjCDQvdC1INC40Lcg0YfQtdCz0L4uJyk7IHJldHVybjsgfQogICAgICAgIHZhciBib3ggPSBidG4ucGFyZW50Tm9kZTsKICAgICAgICB2YXIgaGVhZCA9IGJveC5xdWVyeVNlbGVjdG9yKCcuYXZ6YXItcGlja2hlYWQnKTsKICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgIGhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CiAgICAgICAgICBoZWFkLmNsYXNzTmFtZSA9ICdhdnphci1oaW50IGF2emFyLXBpY2toZWFkJzsKICAgICAgICAgIGJveC5hcHBlbmRDaGlsZChoZWFkKTsKICAgICAgICB9CiAgICAgICAgdmFyIGdyaWQgPSBib3gucXVlcnlTZWxlY3RvcignLmF2emFyLWdyaWQnKTsKICAgICAgICBpZiAoZ3JpZCkgZ3JpZC5yZW1vdmUoKTsKICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CX0LDQs9GA0YPQttCw0Y4gJyArIHVybCArICfigKYnOwogICAgICAgIHNob3RzRnJvbSh1cmwpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKICAgICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHsgaGVhZC50ZXh0Q29udGVudCA9ICfQmtCw0LTRgNC-0LIg0L3QtSDQvdCw0YjQu9C-0YHRjC4nOyByZXR1cm47IH0KICAgICAgICAgIGhlYWQudGV4dENvbnRlbnQgPSAn0JLRi9Cx0LXRgNC40YLQtSDQutCw0LTRgCAoJyArIGxpc3QubGVuZ3RoICsgJyknOwogICAgICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgIGcuY2xhc3NOYW1lID0gJ2F2emFyLWdyaWQnOwogICAgICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uICh1KSB7CiAgICAgICAgICAgIHZhciBmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmlndXJlJyk7CiAgICAgICAgICAgIHZhciBpbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAgICAgICBpbS5zcmMgPSB1OyBpbS5sb2FkaW5nID0gJ2xhenknOwogICAgICAgICAgICBmLmFwcGVuZENoaWxkKGltKTsKICAgICAgICAgICAgZi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5zcmMiXScpCiAgICAgICAgICAgICAgICB8fCByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5pbWciXScpOwogICAgICAgICAgICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHU7CiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpICsgJyJdJyk7CiAgICAgICAgICAgICAgICBpZiAocHJldikgcHJldi5zcmMgPSB1OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBnLnJlbW92ZSgpOyBoZWFkLnRleHRDb250ZW50ID0gJ9Ca0LDQtNGAINCy0YvQsdGA0LDQvS4nOwogICAgICAgICAgICB9OwogICAgICAgICAgICBnLmFwcGVuZENoaWxkKGYpOwogICAgICAgICAgfSk7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoZyk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgaGVhZC50ZXh0Q29udGVudCA9ICfQndC1INC-0YLQutGA0YvQu9C-0YHRjDogJyArIGUubWVzc2FnZTsgfSk7CiAgICAgIH07CiAgICB9KTsKCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAINC30L3QsNGH0LXQvdC40Lkg0LjQtyDRhNC-0YDQvNGLIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICAgIHZhciBwID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHAubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twW2ldXTsKICAgICAgb1twW3AubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbGxlY3QoKSB7CiAgICAgIHZhciBkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgc2V0UGF0aChkLCBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpLCBlbC52YWx1ZS50cmltKCkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGQ7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQt9Cw0L_QuNGB0Ywg0LIg0YDQsNC30LzQtdGC0LrRgyAtLS0tLS0tLS0tCiAgICAgICDQn9C40YjQtdC8INCyINGC0L7RgiDRgtC10LrRgdGC0L7QstGL0Lkg0YPQt9C10LssINCz0LTQtSDRgtC10LrRgdGCINC00LXQudGB0YLQstC40YLQtdC70YzQvdC-INC10YHRgtGMLgogICAgICAg0KHRgtC40YDQsNGC0Ywg0YHQvtC00LXRgNC20LjQvNC-0LUg0YbQtdC70LjQutC-0Lwg0L3QtdC70YzQt9GPOiDRgNGP0LTQvtC8INGBINGC0LXQutGB0YLQvtC8INC70LXQttCw0YIKICAgICAgINCy0LvQvtC20LXQvdC90YvQtSDRjdC70LXQvNC10L3RgtGLLCDQuCDQvtC90Lgg0YPQtdC30LbQsNC70Lgg0LIg0LrQvtC90LXRhiDigJQg0Y3RgtC-INGD0LbQtSDRgdGC0L7QuNC70L4KICAgICAgINGC0YDRkdGFINC_0YDQsNCy0L7QuiDQsiDQtNGA0YPQs9C40YUg0L_QsNC90LXQu9GP0YUuICovCgogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgIHZhciBub2RlID0gbnVsbDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG4gPSBlbC5jaGlsZE5vZGVzW2ldOwogICAgICAgIGlmIChuLm5vZGVUeXBlID09PSAzICYmIG4ubm9kZVZhbHVlLnRyaW0oKSkgeyBub2RlID0gbjsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIW5vZGUpIHsgZWwudGV4dENvbnRlbnQgPSB2OyByZXR1cm47IH0KICAgICAgdmFyIG0gPSBub2RlLm5vZGVWYWx1ZS5tYXRjaCgvXihccyopW1xzXFNdKj8oXHMqKSQvKTsKICAgICAgbm9kZS5ub2RlVmFsdWUgPSAobSA_IG1bMV0gOiAnJykgKyB2ICsgKG0gPyBtWzJdIDogJycpOwogICAgfQogICAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwpIGVsLmlubmVySFRNTCA9IHY7IH0KCiAgICBmdW5jdGlvbiB3cml0ZUFsbChzY29wZSwgZCkgewogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hdnotZXllYnJvdycpLCBkLmhlcm8uZXllYnJvdyk7CiAgICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5hdnotdGl0bGUtaW5uZXInKTsKICAgICAgc2V0VGV4dChsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgICAgaWYgKGxpbmVzWzFdKSB7CiAgICAgICAgdmFyIGVtID0gb25lKGxpbmVzWzFdLCAnZW0nKTsKICAgICAgICBzZXRUZXh0KGVtIHx8IGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgICB9CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmF2ei1zdWInKSwgZC5oZXJvLnN1Yik7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmF2ei1zZWN0aW9uLWxhYmVsIGgyJyksIGQuZ2FsbGVyeUxhYmVsKTsKCiAgICAgIGFsbChzY29wZSwgJy5hdnotZ2FsbGVyeS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuc2hvdHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHZhciBpbWcgPSBvbmUoaXQsICdpbWcnKTsKICAgICAgICBpZiAoaW1nKSB7CiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB2LnNyYyk7CiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdhbHQnLCB2LmFsdCk7CiAgICAgICAgICBpZiAodi53KSBpbWcuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHYudyk7CiAgICAgICAgICBpZiAodi5oKSBpbWcuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB2LmgpOwogICAgICAgIH0KICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5hdnotZy1jYXAnKSwgdi5jYXApOwogICAgICAgIC8qINGB0YHRi9C70LrQsCDQv9C-0Y_QstC70Y_QtdGC0YHRjyDQuCDQuNGB0YfQtdC30LDQtdGCINCy0LzQtdGB0YLQtSDRgSDQsNC00YDQtdGB0L7QvDog0LrQsNC00YAg0LHQtdC3INGB0LLQvtC10LkKICAgICAgICAgICDRgdGC0YDQsNC90LjRhtGLINC90LUg0LTQvtC70LbQtdC9INCy0LXRgdGC0Lgg0L3QuNC60YPQtNCwIOKAlCDRjdGC0L4g0L7QsdC80LDQvdGL0LLQsNC70L4g0LHRiyDRh9C10LvQvtCy0LXQutCwICovCiAgICAgICAgdmFyIGZyYW1lID0gb25lKGl0LCAnLmF2ei1nLWZyYW1lJyk7CiAgICAgICAgdmFyIGEgPSBvbmUoaXQsICcuYXZ6LWctbGluaycpOwogICAgICAgIGlmICh2LmhyZWYgJiYgIWEgJiYgZnJhbWUgJiYgaW1nKSB7CiAgICAgICAgICBhID0gZnJhbWUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICBhLmNsYXNzTmFtZSA9ICdhdnotZy1saW5rJzsKICAgICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgICAgIGltZy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLCBpbWcpOwogICAgICAgICAgYS5hcHBlbmRDaGlsZChpbWcpOwogICAgICAgIH0gZWxzZSBpZiAodi5ocmVmICYmIGEpIHsKICAgICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgICB9IGVsc2UgaWYgKCF2LmhyZWYgJiYgYSAmJiBpbWcpIHsKICAgICAgICAgIGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW1nLCBhKTsKICAgICAgICAgIGEucmVtb3ZlKCk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHZhciBzZWNzID0gYWxsKHNjb3BlLCAnLmF2ei1zZWN0aW9uLWhlYWRlcicpOwogICAgICBmdW5jdGlvbiB3c2VjKGksIHYpIHsKICAgICAgICBzZXRUZXh0KG9uZShzZWNzW2ldLCAnLmF2ei1sYWJlbCcpLCB2LmxhYmVsKTsKICAgICAgICBzZXRUZXh0KG9uZShzZWNzW2ldLCAnLmF2ei1oMicpLCB2LmgyKTsKICAgICAgfQogICAgICB3c2VjKDAsIGQucHJvalNlYyk7CgogICAgICBhbGwoc2NvcGUsICcuYXZ6LXByb2onKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLnByb2plY3RzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgICAgdmFyIGltZyA9IG9uZShhLCAnaW1nJyk7CiAgICAgICAgaWYgKGltZykgeyBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB2LmltZyk7IGltZy5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHYuYWx0KTsgfQogICAgICAgIHNldFRleHQob25lKGEsICdoMycpLCB2Lm5hbWUpOwogICAgICAgIHNldFRleHQob25lKGEsICdwJyksIHYuZGVzYyk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5hdnotcHJvai1tb3JlJyksIHYubW9yZSk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYXZ6LWF3YXJkIC5hdnotbGFiZWwnKSwgZC5hd2FyZC5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmF2ei1hd2FyZCAuYXZ6LWgyJyksIGQuYXdhcmQuaDIpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hdnotYXdhcmQtdGV4dCcpLCBkLmF3YXJkLnRleHQpOwogICAgICB2YXIgYWwgPSBvbmUoc2NvcGUsICcuYXZ6LWF3YXJkLWxpbmsnKTsKICAgICAgc2V0VGV4dChhbCwgZC5hd2FyZC5saW5rVGV4dCk7CiAgICAgIGlmIChhbCkgYWwuc2V0QXR0cmlidXRlKCdocmVmJywgZC5hd2FyZC5saW5rSHJlZik7CgogICAgICB3c2VjKDEsIGQuZm10U2VjKTsKICAgICAgYWxsKHNjb3BlLCAnLmF2ei1mbXQtbGlzdCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmZvcm1hdHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGxpLCAnaDMnKSwgdi5oMyk7CiAgICAgICAgc2V0VGV4dChvbmUobGksICdwJyksIHYucCk7CiAgICAgIH0pOwoKICAgICAgd3NlYygyLCBkLmFkdlNlYyk7CiAgICAgIGFsbChzY29wZSwgJy5hdnotYWR2LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgIHZhciB2ID0gZC5hZHZbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLmF2ei1hZHYtbnVtJyksIHYubnVtKTsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJ2gzJyksIHYuaDMpOwogICAgICAgIHNldFRleHQob25lKGl0LCAncCcpLCB2LnApOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotbGFiZWwnKSwgZC5jb3N0LmxhYmVsKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYXZ6LWNvc3QgLmF2ei1oMicpLCBkLmNvc3QuaDIpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hdnotY29zdC10ZXh0JyksIGQuY29zdC50ZXh0KTsKICAgICAgdmFyIGNiID0gb25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotYnRuJyk7CiAgICAgIHNldFRleHQoY2IsIGQuY29zdC5idG4pOwogICAgICBpZiAoY2IpIGNiLnNldEF0dHJpYnV0ZSgnaHJlZicsIGQuY29zdC5idG5IcmVmKTsKCiAgICAgIHdzZWMoMywgZC5mYXFTZWMpOwogICAgICBhbGwoc2NvcGUsICcuYXZ6LWZhcS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZmFxW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5hdnotZmFxLXEnKSwgdi5xKTsKICAgICAgICBzZXRIdG1sKG9uZShpdCwgJy5hdnotZmFxLWEnKSwgdi5hKTsKICAgICAgfSk7CgogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5hdnotY3RhLXRpdGxlJyksIGQuY3RhLmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmF2ei1idG4tY29udGFpbmVyIC5hdnotYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuYnRuc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChiLCB2LnRleHQpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgfSk7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hdnotY29weScpLCBkLmZvb3QuY29weSk7CiAgICAgIGFsbChzY29wZSwgJy5hdnotc29jaWFscyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciB2ID0gZC5mb290LnNvY2lhbHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQoYSwgdi50ZXh0KTsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgIH0pOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0L_RgNCw0LLQutCwINCx0LXQs9GD0YnQtdC5INGB0YLRgNC-0LrQuCDQsiDRgdC60YDQuNC_0YLQtSAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24ganNTdHIocykgewogICAgICByZXR1cm4gIiciICsgU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsKICAgIH0KICAgIGZ1bmN0aW9uIHBhZChzLCBuKSB7IHdoaWxlIChzLmxlbmd0aCA8IG4pIHMgKz0gJyAnOyByZXR1cm4gczsgfQoKICAgIGZ1bmN0aW9uIHBhdGNoU2NyaXB0KHNyYywgZCkgewogICAgICBpZiAoIS92YXIgaXRlbXMgPSBcWy8udGVzdChzcmMpKSByZXR1cm4geyB0ZXh0OiBzcmMsIG1pc3NlZDogWyfQsdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAnXSB9OwogICAgICB2YXIgdyA9IDA7CiAgICAgIGQudGlja2VyLmZvckVhY2goZnVuY3Rpb24gKHgpIHsKICAgICAgICB2YXIgbiA9IChqc1N0cih4LmxhYmVsKSArICcsJykubGVuZ3RoOwogICAgICAgIGlmIChuID4gdykgdyA9IG47CiAgICAgIH0pOwogICAgICB2YXIgcm93cyA9IGQudGlja2VyLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgIC8qINCy0L3QtdGI0L3QuNC5INCw0LTRgNC10YEg0YPQt9C90LDRkdC8INC_0L4g0LTQvtC80LXQvdGDLCDQsCDQvdC1INC_0L4g0YHRgtCw0YDQvtC80YMg0L_RgNC40LfQvdCw0LrRgzoKICAgICAgICAgICDQtdGB0LvQuCDRgdGB0YvQu9C60YMg0L_QvtC80LXQvdGP0LvQuCDRgdC-INGB0LLQvtC10Lkg0L3QsCDRh9GD0LbRg9GOLCB0YXJnZXQg0LTQvtC70LbQtdC9INC_0L7QtdGF0LDRgtGMINGB0LvQtdC00L7QvCAqLwogICAgICAgIHZhciBleHQgPSB4LmhyZWYuaW5kZXhPZihTSVRFKSAhPT0gMCAmJiAvXmh0dHBzPzovLnRlc3QoeC5ocmVmKTsKICAgICAgICByZXR1cm4gJyAgICAgICAgeyBsYWJlbDogJyArIHBhZChqc1N0cih4LmxhYmVsKSArICcsJywgdyArIDEpICsKICAgICAgICAgICcgaHJlZjogJyArIGpzU3RyKHguaHJlZikgKyAoZXh0ID8gJywgZXh0ZXJuYWw6IHRydWUnIDogJycpICsgJyB9JzsKICAgICAgfSkuam9pbignLFxuJyk7CiAgICAgIHJldHVybiB7IHRleHQ6IHNyYy5yZXBsYWNlKC92YXIgaXRlbXMgPSBcW1tcc1xTXSo_XG5cc3s2fVxdOy8sICd2YXIgaXRlbXMgPSBbXG4nICsgcm93cyArICdcbiAgICAgIF07JyksIG1pc3NlZDogW10gfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBzY29wZSwgZCkgewogICAgICB2YXIgcyA9IG9uZShkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJyk7CiAgICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0YDQsNC30LzQtdGC0LrQuCBsZCtqc29uJyB9OwogICAgICB2YXIgbzsKICAgICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0YDQsNC30LzQtdGC0LrQsCDRgdGC0YDQsNC90LjRhtGLIOKAlCDQvdC1INCy0LDQu9C40LTQvdGL0LkgSlNPTicgfTsgfQogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CiAgICAgIHZhciB3YXJuID0gW107CgogICAgICBnLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnKSB7CiAgICAgICAgICBuLm5hbWUgPSBkLmxkLm5hbWU7CiAgICAgICAgICBuLmRlc2NyaXB0aW9uID0gZC5sZC5kZXNjOwogICAgICAgICAgbi5kYXRlTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApOwogICAgICAgIH0KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1NlcnZpY2UnKSB7CiAgICAgICAgICBuLm5hbWUgPSBkLmxkLnNydk5hbWU7CiAgICAgICAgICBuLmRlc2NyaXB0aW9uID0gZC5sZC5zcnZEZXNjOwogICAgICAgICAgaWYgKG4uaGFzT2ZmZXJDYXRhbG9nICYmIG4uaGFzT2ZmZXJDYXRhbG9nLml0ZW1MaXN0RWxlbWVudCkgewogICAgICAgICAgICBuLmhhc09mZmVyQ2F0YWxvZy5pdGVtTGlzdEVsZW1lbnQgPSBkLmZvcm1hdHMubWFwKGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgJ0B0eXBlJzogJ09mZmVyJywgaXRlbU9mZmVyZWQ6IHsgJ0B0eXBlJzogJ1NlcnZpY2UnLCBuYW1lOiBmLmgzIH0gfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINCz0LvQsNCy0L3QvtC1INC40LfQvtCx0YDQsNC20LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDigJQg0L_QtdGA0LLRi9C5INC60LDQtNGAINCz0LDQu9C10YDQtdC4ICovCiAgICAgIHZhciBmaXJzdCA9IGQuc2hvdHNbMF07CiAgICAgIGcuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChTdHJpbmcoblsnQGlkJ10gfHwgJycpLmluZGV4T2YoJyNwcmltYXJ5aW1hZ2UnKSA-IC0xICYmIGZpcnN0KSB7CiAgICAgICAgICBuLnVybCA9IGZpcnN0LnNyYzsKICAgICAgICAgIG4uY2FwdGlvbiA9IGZpcnN0LmFsdDsKICAgICAgICAgIGlmIChmaXJzdC53KSBuLndpZHRoID0gcGFyc2VJbnQoZmlyc3QudywgMTApOwogICAgICAgICAgaWYgKGZpcnN0LmgpIG4uaGVpZ2h0ID0gcGFyc2VJbnQoZmlyc3QuaCwgMTApOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICAvKiDQutCw0LTRgNGLOiDQv9C-0LTQv9C40YHQuCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4g0YEg0LLQuNC00LjQvNGL0LzQuCAqLwogICAgICB2YXIgd29ya3MgPSBnLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjd29ya3MnKSA-IC0xOyB9KVswXTsKICAgICAgaWYgKHdvcmtzKSB7CiAgICAgICAgd29ya3MubnVtYmVyT2ZJdGVtcyA9IGQuc2hvdHMubGVuZ3RoOwogICAgICAgIHdvcmtzLml0ZW1MaXN0RWxlbWVudCA9IGQuc2hvdHMubWFwKGZ1bmN0aW9uICh2LCBpKSB7CiAgICAgICAgICB2YXIgaW1nID0geyAnQHR5cGUnOiAnSW1hZ2VPYmplY3QnLCBjb250ZW50VXJsOiB2LnNyYywgY2FwdGlvbjogdi5jYXAsIG5hbWU6IHYuYWx0IH07CiAgICAgICAgICBpZiAodi53KSBpbWcud2lkdGggPSBwYXJzZUludCh2LncsIDEwKTsKICAgICAgICAgIGlmICh2LmgpIGltZy5oZWlnaHQgPSBwYXJzZUludCh2LmgsIDEwKTsKICAgICAgICAgIGlmICh2LmhyZWYpIGltZy5pc1BhcnRPZiA9IHsgJ0B0eXBlJzogJ1dlYlBhZ2UnLCB1cmw6IHYuaHJlZiB9OwogICAgICAgICAgaWYgKCF2LmNhcCkgd2Fybi5wdXNoKCfRgyDQutCw0LTRgNCwICcgKyAoaSArIDEpICsgJyDQvdC10YIg0L_QvtC00L_QuNGB0LgnKTsKICAgICAgICAgIHJldHVybiB7ICdAdHlwZSc6ICdMaXN0SXRlbScsIHBvc2l0aW9uOiBpICsgMSwgbmFtZTogdi5jYXAsIGl0ZW06IGltZyB9OwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKiDQv9GA0L7QtdC60YLRizog0LjRidC10Lwg0YPQt9C10Lsg0L_QviDQsNC00YDQtdGB0YMsINC60L7RgtC-0YDRi9C5INGB0YLQvtGP0Lsg0LIg0LrQvtC00LUg0JTQniDQv9GA0LDQstC-0LosCiAgICAgICAgINCwINC30LDQv9C40YHRi9Cy0LDQtdC8INC90L7QstGL0LkuINCY0L3QsNGH0LUg0YHQvNC10L3QsCDRgdGB0YvQu9C60Lgg0YDQstGR0YIg0YHQstGP0LfRjCDigJQg0LjRgdC60LDRgtGMINGD0LbQtSDQvdC10YfQtdCz0L4uICovCiAgICAgIHZhciBwcm9qTGlzdCA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBTdHJpbmcoblsnQGlkJ10gfHwgJycpLmluZGV4T2YoJyNwcm9qZWN0cycpID4gLTE7IH0pWzBdOwogICAgICBpZiAocHJvakxpc3QgJiYgcHJvakxpc3QuaXRlbUxpc3RFbGVtZW50KSB7CiAgICAgICAgdmFyIG9sZCA9IGNmZy5wcm9qZWN0cy5tYXAoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAuaHJlZjsgfSk7CiAgICAgICAgcHJvakxpc3QubnVtYmVyT2ZJdGVtcyA9IGQucHJvamVjdHMubGVuZ3RoOwogICAgICAgIHByb2pMaXN0Lml0ZW1MaXN0RWxlbWVudCA9IGQucHJvamVjdHMubWFwKGZ1bmN0aW9uIChwLCBpKSB7CiAgICAgICAgICB2YXIgd2FzID0gb2xkW2ldOwogICAgICAgICAgdmFyIG5vZGUgPSBwcm9qTGlzdC5pdGVtTGlzdEVsZW1lbnQuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnVybCA9PT0gd2FzOyB9KVswXQogICAgICAgICAgICB8fCBwcm9qTGlzdC5pdGVtTGlzdEVsZW1lbnRbaV0gfHwgeyAnQHR5cGUnOiAnTGlzdEl0ZW0nIH07CiAgICAgICAgICBub2RlLnBvc2l0aW9uID0gaSArIDE7CiAgICAgICAgICBub2RlLm5hbWUgPSBwLm5hbWU7CiAgICAgICAgICBub2RlLnVybCA9IHAuaHJlZjsKICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKiDQstC-0L_RgNC-0YHRiyDigJQg0LjQtyDQstC40LTQuNC80L7Qs9C-INGC0LXQutGB0YLQsCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4gKi8KICAgICAgdmFyIGZhcSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pWzBdOwogICAgICBpZiAoZmFxKSB7CiAgICAgICAgZmFxLm1haW5FbnRpdHkgPSBhbGwoc2NvcGUsICcuYXZ6LWZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAgICAgbmFtZTogdGV4dFdpdGhCcmVha3Mob25lKGl0LCAnLmF2ei1mYXEtcScpKSwKICAgICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsIHRleHQ6IHRleHRXaXRoQnJlYWtzKG9uZShpdCwgJy5hdnotZmFxLWEnKSkgfQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0LPRgNCw0YQg0L7QsdGP0LfQsNC9INC-0YHRgtCw0LLQsNGC0YzRgdGPINC30LDQvNC60L3Rg9GC0YvQvDog0YHRgdGL0LvQutCwINCyINC_0YPRgdGC0L7RgtGDIOKAlCDQvNC-0LvRh9Cw0LvQuNCy0LDRjwogICAgICAgICDQv9C-0LvQvtC80LrQsCwg0LXRkSDQvdC40LrRgtC-INC90LUg0LfQsNC80LXRgtC40YIg0LHQtdC3INC_0YDQvtCy0LXRgNC60LggKi8KICAgICAgdmFyIGlkcyA9IHt9LCBkYW5nbGluZyA9IFtdOwogICAgICBnLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgaWYgKG5bJ0BpZCddKSBpZHNbblsnQGlkJ11dID0gMTsgfSk7CiAgICAgIChmdW5jdGlvbiB3YWxrKHgpIHsKICAgICAgICBpZiAoeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSAmJiB4WydAaWQnXSAmJiBPYmplY3Qua2V5cyh4KS5sZW5ndGggPT09IDEgJiYgIWlkc1t4WydAaWQnXV0pIHsKICAgICAgICAgICAgZGFuZ2xpbmcucHVzaCh4WydAaWQnXSk7CiAgICAgICAgICB9CiAgICAgICAgICBPYmplY3Qua2V5cyh4KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IGlmIChrICE9PSAnQGlkJykgd2Fsayh4W2tdKTsgfSk7CiAgICAgICAgfQogICAgICB9KShnKTsKICAgICAgaWYgKGRhbmdsaW5nLmxlbmd0aCkgd2Fybi5wdXNoKCfRgdGB0YvQu9C60Lgg0LIg0L_Rg9GB0YLQvtGC0YM6ICcgKyBkYW5nbGluZy5qb2luKCcsICcpKTsKCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwsIHdhcm46IHdhcm4gfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXZ6LXdmb2xpby1ob21lJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcjYXZ6LXdmb2xpby1ob21lIC5hdnotZ2FsbGVyeS1ncmlkJykgPiAtMTsKICAgICAgICB9KVswXTsKICAgICAgICB2YXIgc2NyaXB0ID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignd2FpdEZvckRPTScpID4gLTEgJiYgeC50ZXh0Q29udGVudC5pbmRleE9mKCdhdnotdGlja2VyJykgPiAtMTsKICAgICAgICB9KVswXTsKICAgICAgICAvKiDRgdGC0YDQvtC60YMg0YjRgNC40YTRgtC-0LIg0LHQtdGA0ZHQvCDQuNC3INC40YHRhdC-0LTQvdC40LrQsCDQodCr0KDQq9CcINGC0LXQutGB0YLQvtC8OiDRh9C10YDQtdC3IG91dGVySFRNTAogICAgICAgICAgINCx0YDQsNGD0LfQtdGAINC30LDQv9C40YHQsNC7INCx0Ysg0LDQvNC_0LXRgNGB0LDQvdC00Ysg0LrQsNC6ICZhbXA7IOKAlCDRgNCw0LHQvtGC0LDQtdGCINGC0LDQuiDQttC1LCDQvdC-CiAgICAgICAgICAg0LfQsNGB0L7RgNGP0LXRgiDRgdGA0LDQstC90LXQvdC40LUg0YEg0LjRgdGF0L7QtNC90YvQvCDQutC-0LTQvtC8ICovCiAgICAgICAgdmFyIGZvbnRSYXcgPSAoc3JjLm1hdGNoKC88bGluayBocmVmPSJodHRwczpcL1wvZm9udHNcLmdvb2dsZWFwaXNcLmNvbVwvY3NzMltePl0qPi8pIHx8IFtudWxsXSlbMF07CiAgICAgICAgLyog0LLRgdGC0YPQv9C40YLQtdC70YzQvdGL0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSDigJQg0YfQsNGB0YLRjCDQsdC70L7QutCwLCDQvtC9INC-0LHRitGP0YHQvdGP0LXRgiwg0YfRgtC-INGN0YLQvgogICAgICAgICAgINC30LAg0LrQvtC0LiDQl9Cw0LHQuNGA0LDQtdC8INC40Lcg0LjRgdGF0L7QtNC90LjQutCwOiDQsiBvdXRlckhUTUwg0LHQu9C-0LrQsCDQtdCz0L4g0L3QtdGCLiAqLwogICAgICAgIHZhciBjb21tZW50ID0gKHNyYy5tYXRjaCgvPCEtLSA9K1xuW1xzXFNdKj89KyAtLT4vKSB8fCBbbnVsbF0pWzBdOwoKICAgICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICAgIGlmICghc2NvcGUpIG1pc3NpbmcucHVzaCgn0LHQu9C-0LogI2F2ei13Zm9saW8taG9tZScpOwogICAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgn0YHRgtC40LvQuCDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgn0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAoIWZvbnRSYXcpIG1pc3NpbmcucHVzaCgn0YHRgtGA0L7QutCwINGI0YDQuNGE0YLQvtCyJyk7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQpOwogICAgICAgIHZhciBsZCA9IGJ1aWxkTGQoZG9jLCBzY29wZSwgZCk7CiAgICAgICAgaWYgKCFsZC50ZXh0KSB0aHJvdyBuZXcgRXJyb3IobGQuZXJyKTsKICAgICAgICB2YXIgd2FybiA9IChsZC53YXJuIHx8IFtdKS5jb25jYXQoc2MubWlzc2VkLmxlbmd0aCA_IFsn0L3QtSDQvdCw0LnQtNC10L3QviDQsiDRgdC60YDQuNC_0YLQtTogJyArIHNjLm1pc3NlZC5qb2luKCcsICcpXSA6IFtdKTsKCiAgICAgICAgLyog0J_QvtGA0Y_QtNC-0Log0YfQsNGB0YLQtdC5IOKAlCDQutCw0Log0LIg0YHQsNC80L7QvCDQsdC70L7QutC1OiDRgNCw0LfQvNC10YLQutCwINGB0YLQvtC40YIg0J_QldCg0JXQlCDRgdGC0LjQu9GP0LzQuC4KICAgICAgICAgICDQn9C10YDQstCw0Y8g0LLQtdGA0YHQuNGPINC_0LDQvdC10LvQuCDRgdC60LvQsNC00YvQstCw0LvQsCDQuNGFINC90LDQvtCx0L7RgNC-0YIgKNC_0LXRgNC10L3QtdGB0LXQvdC-INGBINC40L3RgtC10YDRjNC10YDQvdC-0LksCiAgICAgICAgICAg0LPQtNC1INC_0L7RgNGP0LTQvtC6INC00YDRg9Cz0L7QuSksINC4INC_0LXRgNC10YHQsdC-0YDQutCwINC_0LXRgNC10YLQsNGB0L7QstGL0LLQsNC70LAg0LHQu9C-0Log0YbQtdC70LjQutC-0LwuICovCiAgICAgICAgdmFyIHRleHQgPSAoY29tbWVudCA_IFtjb21tZW50LCAnJ10gOiBbXSkuY29uY2F0KFsKICAgICAgICAgIEFWWl9GT05UX0xJTkssCiAgICAgICAgICAnJywKICAgICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgICAgc2MudGV4dC50cmltKCksCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nLAogICAgICAgICAgbGQudGV4dCwKICAgICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgICBdKS5qb2luKCdcbicpOwoKICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCB3YXJuOiB3YXJuIH07CiAgICAgIH0pOwogICAgfQoKICAgIC8qIHdhcm4g0L_QtdGA0LXQtNCw0ZHRgtGB0Y8g0L7RgtC00LXQu9GM0L3QviDQuCDQv9GA0LjQutC70LXQuNCy0LDQtdGC0YHRjyDQktCeINCS0KHQldClINCy0LXRgtC60LDRhTog0LXRgdC70LgKICAgICAgINC60L7Qv9C40YDQvtCy0LDQvdC40LUg0L3QtSDRg9C00LDQu9C-0YHRjCwg0L_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQstGB0ZEg0YDQsNCy0L3QviDQtNC-0LvQttC90Ysg0LTQvtC50YLQuC4KICAgICAgINCY0L3QsNGH0LUg0L_QsNC90LXQu9GMINC80L7Qu9GH0LAg0YLQtdGA0Y_QtdGCINGA0L7QstC90L4g0YLQviwg0YDQsNC00Lgg0YfQtdCz0L4g0L_RgNC10LTRg9C_0YDQtdC20LTQsNC10YIuICovCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUsIHdhcm4pIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emFyLW91dCcpOwogICAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgICB2YXIgdGFpbCA9IHdhcm4gPyAnINCS0L3QuNC80LDQvdC40LU6ICcgKyB3YXJuICsgJy4nIDogJyc7CiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuJzsKICAgICAgdmFyIG9rID0gZmFsc2U7CiAgICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgICAgaWYgKG9rKSB7IG1zZyhub3RlICsgdGFpbCk7IHJldHVybjsgfQogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSArIHRhaWwpOyB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgbXNnKG1hbnVhbCArIHRhaWwpOyB9KTsKICAgICAgfSBlbHNlIHsgbXNnKG1hbnVhbCArIHRhaWwpOyB9CiAgICB9CgogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6YXItYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICB2YXIgZCA9IGNvbGxlY3QoKTsKICAgICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgICAgLyog0YDQsNC30LzQtdGA0Ysg0LrQsNC00YDQvtCyINC_0LXRgNC10LzQtdGA0Y_QtdC8INC_0LXRgNC10LQg0YHQsdC-0YDQutC-0Lk6INC10YHQu9C4INGE0L7RgtC-0LPRgNCw0YTQuNGOINC30LDQvNC10L3QuNC70LgsCiAgICAgICAgINGB0YLQsNGA0YvQtSB3aWR0aCDQuCBoZWlnaHQg0YHQvtCy0YDQsNC70Lgg0LHRiyDQuCDQsiDRgNCw0LfQvNC10YLQutC1LCDQuCDQsiDQstGR0YDRgdGC0LrQtSAqLwogICAgICBQcm9taXNlLmFsbChkLnNob3RzLm1hcChmdW5jdGlvbiAocykgewogICAgICAgIHJldHVybiBtZWFzdXJlKHMuc3JjKS50aGVuKGZ1bmN0aW9uIChtKSB7CiAgICAgICAgICBpZiAobSkgeyBzLncgPSBTdHJpbmcobS53KTsgcy5oID0gU3RyaW5nKG0uaCk7IH0KICAgICAgICAgIHJldHVybiBtOwogICAgICAgIH0pOwogICAgICB9KSkudGhlbihmdW5jdGlvbiAoc2l6ZXMpIHsKICAgICAgICB2YXIgbG9zdCA9IHNpemVzLm1hcChmdW5jdGlvbiAobSwgaSkgeyByZXR1cm4gbSA_IG51bGwgOiAoaSArIDEpOyB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgcmV0dXJuIGFzc2VtYmxlKGQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgLyog0YHQstC10YDRj9C10Lw6INCy0YHRkSDQu9C4INCy0LLQtdC00ZHQvdC90L7QtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQv9C-0L_QsNC70L4g0LIg0LrQvtC0ICovCiAgICAgICAgdmFyIGRvYzIgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MyLnF1ZXJ5U2VsZWN0b3IoJyNhdnotd2ZvbGlvLWhvbWUnKSk7CiAgICAgICAgYWdhaW4udGlja2VyID0gcmVhZFRpY2tlcihyZXMudGV4dCk7CiAgICAgICAgcmVhZExkKGRvYzIsIGFnYWluKTsKICAgICAgICB2YXIgbm90TGFuZGVkID0gYWdhaW4gPyBsYW5kZWQoZCwgYWdhaW4sIC9ec2hvdHNcLlxkK1wuKHd8aCkkLykgOiBbJ9GB0YLRgNCw0L3QuNGG0LAg0L3QtSDRgNCw0LfQvtCx0YDQsNC70LDRgdGMJ107CiAgICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0Log0YHRgtGA0LDQvdC40YbRiyDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICAgICAgdmFyIHcgPSAocmVzLndhcm4gfHwgW10pLnNsaWNlKCk7CiAgICAgICAgICBpZiAobG9zdC5sZW5ndGgpIHcucHVzaCgn0L3QtSDQvtGC0LrRgNGL0LvQuNGB0Ywg0LrQsNC00YDRizogJyArIGxvc3Quam9pbignLCAnKSk7CiAgICAgICAgICBpZiAobm90TGFuZGVkLmxlbmd0aCkgdy5wdXNoKCfQndCVINCX0JDQn9CY0KHQkNCb0J7QodCsINCyINC60L7QtDogJyArIG5vdExhbmRlZC5zbGljZSgwLCA2KS5qb2luKCcsICcpICsKICAgICAgICAgICAgKG5vdExhbmRlZC5sZW5ndGggPiA2ID8gJyDQuCDQtdGJ0ZEgJyArIChub3RMYW5kZWQubGVuZ3RoIC0gNikgOiAnJykpOwogICAgICAgICAgY29weShyZXMudGV4dCwgbm90ZSwgdy5qb2luKCc7ICcpKTsKICAgICAgICB9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emFyLXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJyNhdnotd2ZvbGlvLWhvbWUnKSk7CiAgICAgICAgYWdhaW4udGlja2VyID0gcmVhZFRpY2tlcihyZXMudGV4dCk7CiAgICAgICAgcmVhZExkKGRvYywgYWdhaW4pOwogICAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgICAgaWYgKGEgPT09IGIpIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLicpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0YHRgtCw0LvQvicsIEpTT04ucGFyc2UoYikpOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwogIH0KCiAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignI2F2ei13Zm9saW8taG9tZScpOwogICAgaWYgKCFzY29wZSkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDQsdC70L7QutCwICNhdnotd2ZvbGlvLWhvbWUnKTsKICAgIGNmZyA9IHJlYWRDZmcoc2NvcGUpOwogICAgY2ZnLnRpY2tlciA9IHJlYWRUaWNrZXIoc3JjKTsKICAgIHJlYWRMZChkb2MsIGNmZyk7CiAgICBzdGFydCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICByb290LmlubmVySFRNTCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2emFyLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnphci1oZWFkIj48aDI-0J_QsNC90LXQu9GMINCw0YDRhdC40YLQtdC60YLRg9GA0L3QvtC5INGB0YrRkdC80LrQuDwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnphci1ib2R5Ij48cCBjbGFzcz0iYXZ6YXItaGludCI-0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys6ICcgKwogICAgICBlc2MoZS5tZXNzYWdlKSArICc8L3A-PC9kaXY-PC9kaXY-JzsKICB9KTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdC-0Lkg0YHRitGR0LzQutC4INC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJhdXRvIix0aXRsZToi0J_QsNC90LXQu9GMINCw0LLRgtC-0LzQvtCx0LjQu9GM0L3QvtC5INGB0YrRkdC80LrQuCIsc2hvcnQ6ItCQ0LLRgtC-IixoaW50OiLQvNCw0YjQuNC90Ysg0Lgg0YHRgdGL0LvQutC4LCDRhNC-0YDQvNCw0YLRiywg0L_RgNC-0YbQtdGB0YEsINGG0LXQvdCwLCDQstC-0L_RgNC-0YHRiywg0YDQsNC30LzQtdGC0LrQsCIscGFnZXM6WyIvYXV0byJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQkNCS0KLQntCc0J7QkdCY0JvQrNCd0J7QmSDQodCq0IHQnNCa0JggIHYxIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwIC9hdXRvCgogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIuINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCCiAgINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvCDigJQg0LLRgdGC0LDQstC70Y_QtdGC0YHRjwogICDQvtC00L3QuNC8INC60YPRgdC60L7QvCDQv9C-0LLQtdGA0YUgSFRNTC3QsdC70L7QutCwINGB0YLRgNCw0L3QuNGG0YsuCgogICDQmNGB0YXQvtC00L3QuNC6LCDQsCDQvdC1INC20LjQstC-0LkgRE9NOiDRgdC60YDQuNC_0YLRiyB3Zm9saW8g0LTQvtC_0LjRgdGL0LLQsNGO0YIg0LLQvdC10YjQvdC40LwKICAg0YHRgdGL0LvQutCw0LwgdGFyZ2V0PSJfYmxhbmsiINC_0YDRj9C80L4g0LIg0LHRgNCw0YPQt9C10YDQtSwg0Lgg0L_QsNC90LXQu9GMLCDRh9C40YLQsNGO0YnQsNGPCiAgINC20LjQstGD0Y4g0YHRgtGA0LDQvdC40YbRgywg0LfQsNC_0LXQutCw0LvQsCDQsdGLINGN0YLQuCDRh9GD0LbQuNC1INC_0YDQsNCy0LrQuCDQsiDQstCw0Ygg0LrQvtC0LgogICDQkiDQv9C-0LTQstCw0LvQtSDRgdGB0YvQu9C60Lgg0LrQsNC6INGA0LDQtyDQstC90LXRiNC90LjQtS4KCiAgINCn0YLQviDQv9Cw0L3QtdC70Ywg0LTQtdGA0LbQuNGCINCy0LzQtdGB0YLQtSwg0YfRgtC-0LHRiyDQvdC1INGA0LDQt9C-0YjQu9C-0YHRjDoKICAgICDCtyDQutCw0YDRgtC-0YfQutC4INC80LDRiNC40L0gLT4g0YHQv9C40YHQvtC6INGA0LDQsdC-0YIg0LIg0YDQsNC30LzQtdGC0LrQtSwg0LLQvNC10YHRgtC1INGBINCw0LTRgNC10YHQsNC80Lg7CiAgICAgwrcg0L_QtdGA0LLRi9C5INC60LDQtNGAIC0-INCz0LvQsNCy0L3QvtC1INC40LfQvtCx0YDQsNC20LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDQstC80LXRgdGC0LUg0YEg0YDQsNC30LzQtdGA0LDQvNC4OwogICAgIMK3INGE0L7RgNC80LDRgtGLINGB0YrRkdC80LrQuCAtPiDQv9GA0LXQtNC70L7QttC10L3QuNGPINCyINGA0LDQt9C80LXRgtC60LUg0YPRgdC70YPQs9C4OwogICAgIMK3INGG0LXQvdCwIC0-INC4INCyINCy0LjQtNC40LzRi9C5INCx0LvQvtC6LCDQuCDQsiDQv9GA0LXQtNC70L7QttC10L3QuNC1INGA0LDQt9C80LXRgtC60Lg7CiAgICAgwrcg0LLQvtC_0YDQvtGB0YsgLT4gRkFRUGFnZSwg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-LgoKICAg0JrQsNGA0YLQvtGH0LXQuiDRgNC-0LLQvdC-IDc6INC_0LXRgNCy0LDRjyDigJQg0YjQuNGA0L7QutCw0Y8g0L3QsCDQtNCy0LUg0LrQvtC70L7QvdC60LgsINC-0YHRgtCw0LvRjNC90YvQtQogICDQsiDQvtCx0YnQtdC5INGB0LXRgtC60LUuINCS0L7RgdGM0LzQsNGPINGC0YDQtdCx0YPQtdGCINC_0YDQsNCy0LrQuCBDU1MsINC_0L7RjdGC0L7QvNGDINC00L7QsdCw0LLQu9C10L3QuNGPCiAgINC30LTQtdGB0Ywg0L3QtdGCLCDQtdGB0YLRjCDQv9GA0LDQstC60LAg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFLgoKICAg0KbQtdC90YMg0L_QsNC90LXQu9GMINCd0JUg0YHQvtGH0LjQvdGP0LXRgjog0LHQtdGA0ZHRgiDQuNC3INC_0L7Qu9GPINC4INC_0LjRiNC10YIg0LIg0L7QsdCwINC80LXRgdGC0LAg0YHRgNCw0LfRgy4KICAg0JXRgdC70Lgg0L_QvtC70LUg0L_Rg9GB0YLQvtC1LCDRhtC10L3QsCDQsiDRgNCw0LfQvNC10YLQutC1INC-0YHRgtCw0ZHRgtGB0Y8g0L_RgNC10LbQvdC10LksINC4INC_0LDQvdC10LvRjAogICDQs9C-0LLQvtGA0LjRgiDQvtCxINGN0YLQvtC8INC_0YDQuCDRgdCx0L7RgNC60LUuINCS0YvQtNGD0LzQsNC90L3QvtC1INGH0LjRgdC70L4g0LIg0YDQsNC30LzQtdGC0LrQtSDigJQKICAg0LvQvtC20L3Ri9C5INGE0LDQutGCINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQsCwg0YLQsNC6INGD0LbQtSDQsdGL0LvQviDQvdCwINC_0YDQtdC00LzQtdGC0L3QvtC5LgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQsCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0LAsINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQkiA8aGVhZD4gd2ZvbGlvINGB0LLQvtGPINGB0YHRi9C70LrQsCDQvdCwIEpvc3QvUnViaWsg0L7RgiDRgtC10LzRiywg0Lgg0L7QvdCwINGB0YLQvtC40YIg0KDQkNCd0KzQqNCVCiAgICAg0L3QsNGI0LXQuTog0L_QsNC90LXQu9GMINCx0YDQsNC70LAg0L_QtdGA0LLRg9GOINC_0L7QtNGF0L7QtNGP0YnRg9GOINC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60L7QuSDQv9C-0LTQvNC10L3Rj9C70LAKICAgICDQvdCw0YfQtdGA0YLQsNC90LjRjyDQsdC70L7QutCwINC90LAg0YLQtdC80LjQvdGLLiDQndCw0LHQvtGAINCy0LXRgdC-0LIg0LfQsNC00LDQvSBDU1Mg0LHQu9C-0LrQsCwg0L_QvtGN0YLQvtC80YMKICAgICDQtNC10YDQttC40Lwg0LXQs9C-INC30LTQtdGB0YwuINCc0LXQvdGP0LXRgtGB0Y8g0LTQuNC30LDQudC9IOKAlCDQvNC10L3Rj9C10YLRgdGPINGN0YLQsCDRgdGC0YDQvtC60LAuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMTAwOzIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICcmYW1wO2ZhbWlseT1SdWJpazppdGFsLHdnaHRAMCwxMDA7MCwyMDA7MCwzMDA7MSwxMDA7MSwyMDAnICsKICAgICcmYW1wO2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURAMjAuLjQ4LDEwMC4uNzAwLDAuLjEsLTUwLi4yMDAnICsKICAgICcmYW1wO2Rpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4nOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQvtCy0LXRgNC60LAgwqvQtNC-0LvQtdGC0LXQu9C-INC70LjCuyAtLS0tLS0tLS0tCiAgICAg0J_QsNC90LXQu9GMINC_0LjRiNC10YIg0LfQvdCw0YfQtdC90LjRjyDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQtdC3INGB0LXQu9C10LrRgtC-0YDRiy4g0JXRgdC70Lgg0YHQtdC70LXQutGC0L7RgAogICAgINC90LUg0L3QsNGI0ZHQu9GB0Y8g0LjQu9C4INC_0L7QtNGB0YLQsNC90L7QstC60LAg0L3QtSDRgdC-0LLQv9Cw0LvQsCDigJQg0LfQsNC_0LjRgdGMINC80L7Qu9GH0LAg0L3QtSDQv9GA0L7QuNGB0YXQvtC00LjRgi4KICAgICDQmNC80LXQvdC90L4g0YLQsNC6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC30LDRgdGC0YDRj9C70L4g0L3QsCAxMjU6INC_0LDQvdC10LvRjCDQv9C-0YHRh9C40YLQsNC70LAgMTI3LAogICAgINC30LDQv9C40YHQsNGC0Ywg0L3QtSDRgdC80L7Qs9C70LAsINCwINC_0YDQvtCy0LXRgNC60LAgwqvRgdCx0L7RgNC60LAg0YHQvtCy0L_QsNC00LDQtdGCINGBINC40YHRhdC-0LTQvdC40LrQvtC8wrsKICAgICDRgdGA0LDQstC90LjQstCw0LvQsCDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3QvtC1INGBINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdGL0LwuCgogICAgINCf0L7RjdGC0L7QvNGDINC_0L7RgdC70LUg0YHQsdC-0YDQutC4INGH0LjRgtCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0J7QkdCg0JDQotCd0J4g0Lgg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4KICAgICDQstCy0ZHQuyDRh9C10LvQvtCy0LXQui4g0J3QtdGB0L7QstC_0LDQstGI0LjQtSDQv9C-0LvRjyDQv9Cw0L3QtdC70Ywg0L3QsNC30YvQstCw0LXRgiDQstGB0LvRg9GFLiAqLwogIGZ1bmN0aW9uIGxhbmRlZChleHBlY3RlZCwgYWN0dWFsLCBza2lwLCBwYXRoLCBvdXQpIHsKICAgIHBhdGggPSBwYXRoIHx8ICcnOyBvdXQgPSBvdXQgfHwgW107CiAgICBpZiAoZXhwZWN0ZWQgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHsKICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBsYW5kZWQoZXhwZWN0ZWRba10sIGFjdHVhbFtrXSwgc2tpcCwgcGF0aCA_IHBhdGggKyAnLicgKyBrIDogaywgb3V0KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKFN0cmluZyhleHBlY3RlZCA9PSBudWxsID8gJycgOiBleHBlY3RlZCkgIT09IFN0cmluZyhhY3R1YWwgPT0gbnVsbCA_ICcnIDogYWN0dWFsKSkgewogICAgICBpZiAoIXNraXAgfHwgIXNraXAudGVzdChwYXRoKSkgb3V0LnB1c2gocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiwogICAgINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMjQg0LDQstCz0YPRgdGC0LAgMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5IiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICLQvtGCIDE0IDkwMCDigr0iLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIm1ha2VzT2ZmZXIiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICAgICAicHJpY2UiOiAiMTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNi0xMi0zMSIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjYtMTItMzEiLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAiY29udGFjdFBvaW50IjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgICAgICJjb250YWN0VHlwZSI6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgICAgICJhcmVhU2VydmVkIjogIlJVIiwKICAgICAgICAgICJhdmFpbGFibGVMYW5ndWFnZSI6IFsKICAgICAgICAgICAgIlJ1c3NpYW4iLAogICAgICAgICAgICAiRW5nbGlzaCIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSI6IHsKICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwKICAgICAgInB1Ymxpc2hlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImluTGFuZ3VhZ2UiOiAicnUtUlUiCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnphdS1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgTUFYVyA9IDEyNDA7IC8vINC_0YDQtdC00LXQuyDRiNC40YDQuNC90Ysg0LrQsNC00YDQsCwg0YHQvC4g0LjRgdGC0L7RgNC40Y4g0L_RgNC-0LXQutGC0LAKICB2YXIgU0lURSA9ICdodHRwczovL2F2YW56YXRvLnJ1JzsKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGF0dHIoZWwsIGEpIHsgcmV0dXJuIGVsID8gKGVsLmdldEF0dHJpYnV0ZShhKSB8fCAnJykgOiAnJzsgfQogIGZ1bmN0aW9uIGRpZ2l0cyhzKSB7IHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKTsgfQogIGZ1bmN0aW9uIG1vbmV5KHMpIHsgcmV0dXJuIGRpZ2l0cyhzKS5yZXBsYWNlKC9cQig_PShcZHszfSkrKD8hXGQpKS9nLCAnICcpOyB9CgogIC8qINCi0LXQutGB0YIg0LTQu9GPINGA0LDQt9C80LXRgtC60Lg6IDxicj4g0YHQsNC8INC_0L4g0YHQtdCx0LUg0L_RgNC-0LHQtdC70LAg0L3QtSDQtNCw0ZHRgiwg0LgKICAgICDCq1ByZW1pZXJlIFByby48YnI-0J_RgNC-0YnQtcK7INC_0YDQtdCy0YDQsNGJ0LDQu9C-0YHRjCDQsiDCq1ByZW1pZXJlIFByby7Qn9GA0L7RidC1wrsuCiAgICAg0JTQtdGE0LXQutGCINGH0LjQvdC40LvQuCDQsiDQv9Cw0L3QtdC70Y_RhSDQvtCx0YPRh9C10L3QuNGPINC4INC_0YDQtdGB0LXRgtC-0LIg4oCUINC30LTQtdGB0Ywg0LfQsNC60YDRi9GCINGB0YDQsNC30YMuICovCiAgZnVuY3Rpb24gdGV4dFdpdGhCcmVha3MoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBjID0gZWwuY2xvbmVOb2RlKHRydWUpOwogICAgYWxsKGMsICdicicpLmZvckVhY2goZnVuY3Rpb24gKGJyKSB7CiAgICAgIGJyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCBicik7CiAgICB9KTsKICAgIHJldHVybiBjLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1INGB0YLRgNCw0L3QuNGG0Ysg0LIg0LrQvtC90YTQuNCzIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmhlcm8tdGl0bGUtaW5uZXInKTsKICAgIHJldHVybiB7CiAgICAgIGhlcm86IHsKICAgICAgICBleWVicm93OiB0KG9uZShzY29wZSwgJy5oZXJvLWV5ZWJyb3cnKSksCiAgICAgICAgbGluZTE6IHQobGluZXNbMF0pLAogICAgICAgIGxpbmUyOiB0KGxpbmVzWzFdKSwKICAgICAgICBzdWI6IHQob25lKHNjb3BlLCAnLmhlcm8tc3ViJykpLAogICAgICAgIGhpbnQ6IHQob25lKHNjb3BlLCAnLmhlcm8tc2Nyb2xsLWhpbnQnKSkKICAgICAgfSwKICAgICAgZ2FsbGVyeUxhYmVsOiB0KG9uZShzY29wZSwgJy5zZWN0aW9uLWxhYmVsIHNwYW4nKSksCiAgICAgIGNhcmRzOiBhbGwoc2NvcGUsICcuZ2FsbGVyeS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgIHZhciBpbWcgPSBvbmUoaXQsICdpbWcnKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaHJlZjogYXR0cihpdCwgJ2hyZWYnKSwKICAgICAgICAgIHNyYzogYXR0cihpbWcsICdzcmMnKSwKICAgICAgICAgIGFsdDogYXR0cihpbWcsICdhbHQnKSwKICAgICAgICAgIGJyYW5kOiB0KG9uZShpdCwgJy5vdmVybGF5LXRleHQgaDMnKSksCiAgICAgICAgICBtb2RlbDogdChvbmUoaXQsICcub3ZlcmxheS10ZXh0IHNwYW4nKSksCiAgICAgICAgICBudW06IHQob25lKGl0LCAnLmNhcmQtbnVtJykpLAogICAgICAgICAgYmFkZ2U6IHQob25lKGl0LCAnLmZlYXR1cmVkLWJhZGdlJykpLAogICAgICAgICAgdzogYXR0cihpbWcsICd3aWR0aCcpLAogICAgICAgICAgaDogYXR0cihpbWcsICdoZWlnaHQnKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBhYm91dDogewogICAgICAgIGxhYmVsOiB0KG9uZShzY29wZSwgJy5hYm91dC1sYWJlbCcpKSwKICAgICAgICBoMjogdChvbmUoc2NvcGUsICcuYWJvdXQgaDInKSksCiAgICAgICAgcDogdChvbmUoc2NvcGUsICcuYWJvdXQgcCcpKQogICAgICB9LAogICAgICBmbXRMYWJlbDogdChhbGwoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCBzcGFuJylbMV0pLAogICAgICBmb3JtYXRzOiBhbGwoc2NvcGUsICcuYWR2LWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGljb246IHQob25lKGl0LCAnLmljb24nKSksCiAgICAgICAgICBoMzogdChvbmUoaXQsICdoMycpKSwKICAgICAgICAgIHA6IHQob25lKGl0LCAncCcpKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBwcm9jU2VjOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLnByb2Nlc3MtaGVhZGVyIC5sYWJlbCcpKSwKICAgICAgICBoMjogdChvbmUoc2NvcGUsICcucHJvY2Vzcy1oZWFkZXIgaDInKSkKICAgICAgfSwKICAgICAgcHJvY2VzczogYWxsKHNjb3BlLCAnLnByb2Nlc3MtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbnVtOiB0KG9uZShpdCwgJy5wcm9jZXNzLW51bScpKSwKICAgICAgICAgIG5hbWU6IHQob25lKGl0LCAnLnByb2Nlc3MtbmFtZScpKSwKICAgICAgICAgIGRlc2M6IHQob25lKGl0LCAnLnByb2Nlc3MtZGVzYycpKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBjb3N0OiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLmNvc3QgLmxhYmVsJykpLAogICAgICAgIHByaWNlOiB0KG9uZShzY29wZSwgJy5jb3N0IGgyJykpLAogICAgICAgIGl0ZW1zOiBhbGwoc2NvcGUsICcuY29zdC1saXN0IGxpJykubWFwKGZ1bmN0aW9uIChsaSkgeyByZXR1cm4gdChsaSk7IH0pLAogICAgICAgIG5vdGU6IHQob25lKHNjb3BlLCAnLmNvc3Qtbm90ZScpKSwKICAgICAgICBidG46IHQob25lKHNjb3BlLCAnLmNvc3QgLmF2ei1idG4nKSksCiAgICAgICAgYnRuSHJlZjogYXR0cihvbmUoc2NvcGUsICcuY29zdCAuYXZ6LWJ0bicpLCAnaHJlZicpCiAgICAgIH0sCiAgICAgIGZhcVNlYzogewogICAgICAgIGxhYmVsOiB0KG9uZShzY29wZSwgJy5mYXEtaGVhZGVyIC5sYWJlbCcpKSwKICAgICAgICBoMjogdChvbmUoc2NvcGUsICcuZmFxLWhlYWRlciBoMicpKQogICAgICB9LAogICAgICBmYXE6IGFsbChzY29wZSwgJy5mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICByZXR1cm4geyBxOiB0KG9uZShpdCwgJy5mYXEtcScpKSwgYTogaHRtbChvbmUoaXQsICcuZmFxLWEnKSkgfTsKICAgICAgfSksCiAgICAgIGN0YTogewogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5jdGEgaDInKSksCiAgICAgICAgc3ViOiB0KG9uZShzY29wZSwgJy5jdGEtc3ViJykpLAogICAgICAgIGJ0bnM6IGFsbChzY29wZSwgJy5idG4tcm93IC5hdnotYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGIpLCBocmVmOiBhdHRyKGIsICdocmVmJykgfTsKICAgICAgICB9KSwKICAgICAgICBjb3B5OiB0KG9uZShzY29wZSwgJy5jdGEtc29jaWFscyBzcGFuJykpLAogICAgICAgIHNvY2lhbHM6IGFsbChzY29wZSwgJy5jdGEtc29jaWFscyBhJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGEpLCBocmVmOiBhdHRyKGEsICdocmVmJykgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBsZDogeyBuYW1lOiAnJywgZGVzYzogJycsIHNydk5hbWU6ICcnLCBzcnZEZXNjOiAnJywgb2ZmZXJEZXNjOiAnJyB9CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IG9uZShkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJyk7CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgKG9bJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdXZWJQYWdlJykgeyBjZmcubGQubmFtZSA9IG4ubmFtZSB8fCAnJzsgY2ZnLmxkLmRlc2MgPSBuLmRlc2NyaXB0aW9uIHx8ICcnOyB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdTZXJ2aWNlJykgewogICAgICAgICAgY2ZnLmxkLnNydk5hbWUgPSBuLm5hbWUgfHwgJyc7CiAgICAgICAgICBjZmcubGQuc3J2RGVzYyA9IG4uZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgICAgICBpZiAobi5vZmZlcnMpIGNmZy5sZC5vZmZlckRlc2MgPSBuLm9mZmVycy5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkge30KICB9CgogIC8qIC0tLS0tLS0tLS0g0LLRkdGA0YHRgtC60LAg0L_QsNC90LXQu9C4IC0tLS0tLS0tLS0KICAgICDQotC10LzQsCB3Zm9saW8g0LrRgNCw0YHQuNGCINC_0L7Qu9GPINCyINCx0LXQu9GL0Lkg0YLQtdC60YHRgiDQvdCwINCx0LXQu9C-0Lwg0YTQvtC90LUsINC_0L7RjdGC0L7QvNGDINGG0LLQtdGCLAogICAgINGI0YDQuNGE0YIg0LggLXdlYmtpdC10ZXh0LWZpbGwtY29sb3Ig0LfQsNC00LDRjtGC0YHRjyDRj9Cy0L3QviDQuCDRgSDQv9GA0LjQvtGA0LjRgtC10YLQvtC8LAogICAgINCwINCy0YHQtSDRh9Cw0YHRgtC90YvQtSDQv9GA0LDQstC40LvQsCDQvdCw0YfQuNC90LDRjtGC0YHRjyDRgSAjYXZ6YXUtcm9vdC4gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6YXUtcm9vdCwjYXZ6YXUtcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2emF1LXJvb3QgaW5wdXQsI2F2emF1LXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnphdS1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6YXUtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6YXUtd2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDk4MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6YXUtaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6YXUtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2emF1LWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2emF1LWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWYgaW5wdXQsI2F2emF1LXJvb3QgLmF2emF1LWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2emF1LXJvb3QgLmF2emF1LXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnphdS13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtY2FyZC53YXJue2JvcmRlci1jb2xvcjojZTZjMjAwO2JhY2tncm91bmQ6I2ZmZmRmMH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtaW1nPmltZ3t3aWR0aDo4OHB4O2hlaWdodDo3MHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1pbWcgLmd7ZmxleDoxfScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTQwcHgsMWZyKSk7Z2FwOjEwcHh9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtZ3JpZCBmaWd1cmV7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtZ3JpZCBpbWd7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrfScsCiAgICAnI2F2emF1LW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnphdS1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINC70LjRiNC90LjQuSDQv9C10YDQtdC90L7RgTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIg0L_QtdGA0LLRi9C5INC_0L7RgdC70LUgPHRleHRhcmVhPiAqLwogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnphdS1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2emF1LXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emF1LW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGNmZyA9IG51bGw7CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRhNC-0YDQvNCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2emF1LXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnphdS1oZWFkIj48aDI-0J_QsNC90LXQu9GMINCw0LLRgtC-0LzQvtCx0LjQu9GM0L3QvtC5INGB0YrRkdC80LrQuDwvaDI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphdS1iIiBpZD0iYXZ6YXUtY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnphdS1ib2R5Ij4nOwoKICAgIGggKz0gJzxwIGNsYXNzPSJhdnphdS1oaW50Ij7Qn9GA0LDQstC60Lgg0L3QtSDQv9GD0LHQu9C40LrRg9GO0YLRgdGPLiDQn9Cw0L3QtdC70Ywg0YHQvtCx0LXRgNGR0YIg0LrQvtC0INCx0LvQvtC60LAg0YbQtdC70LjQutC-0Lwg4oCUICcgKwogICAgICAn0LLRgdGC0LDQstC40YLQtSDQtdCz0L4g0L_QvtCy0LXRgNGFIEhUTUwt0LHQu9C-0LrQsCDRgdGC0YDQsNC90LjRhtGLINCyINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtS48L3A-JzsKCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXUtc2VjIiBvcGVuPjxzdW1tYXJ5PtCo0LDQv9C60LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXUtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6ICjQutC70Y7Rh9C10LLQsNGPINGE0YDQsNC30LAsINGB0YLQvtC40YIg0LLQvdGD0YLRgNC4IEgxKScsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphdS1yb3ciPicgKwogICAgICBmaWVsZCgn0J_QtdGA0LLQsNGPINGB0YLRgNC-0LrQsCDQt9Cw0LPQvtC70L7QstC60LAnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQktGC0L7RgNCw0Y8g0YHRgtGA0L7QutCwICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQn9C-0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5zdWInLCBjZmcuaGVyby5zdWIsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J_QvtC00YHQutCw0LfQutCwINC-INC_0YDQvtC60YDRg9GC0LrQtScsICdoZXJvLmhpbnQnLCBjZmcuaGVyby5oaW50KSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXUtc2VjIj48c3VtbWFyeT7QnNCw0YjQuNC90Ysg0LIg0LPQsNC70LXRgNC10LUgKCcgKyBjZmcuY2FyZHMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXUtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnZ2FsbGVyeUxhYmVsJywgY2ZnLmdhbGxlcnlMYWJlbCkgKwogICAgICAnPHAgY2xhc3M9ImF2emF1LWhpbnQiPtCc0LDRgNC60LAg0Lgg0LzQvtC00LXQu9GMINCy0LjQtNC90Ysg0L3QsCDQutCw0YDRgtC-0YfQutC1INC4INGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDLiAnICsKICAgICAgJ9CQ0LTRgNC10YEg4oCUINGB0YLRgNCw0L3QuNGG0LAg0Y3RgtC-0Lkg0LzQsNGI0LjQvdGLINC90LAg0YHQsNC50YLQtTog0LHQtdC3INC90LXQs9C-INC60LDRgNGC0L7Rh9C60LAg0YHRgtCw0L3QtdGCINGC0YPQv9C40LrQvtC8LjwvcD4nOwogICAgY2ZnLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXUtY2FyZCI-PGg0PtCa0LDRgNGC0L7Rh9C60LAgJyArIChpICsgMSkgKyAoaSA9PT0gMCA_ICcg4oCUINGI0LjRgNC-0LrQsNGPJyA6ICcnKSArICc8L2g0PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnphdS1pbWciPjxpbWcgc3JjPSInICsgZXNjKGMuc3JjKSArICciIGRhdGEtcHJldj0iY2FyZHMuJyArIGkgKyAnLnNyYyIgYWx0PSIiPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6YXUtcm93Ij4nICsKICAgICAgICBmaWVsZCgn0JzQsNGA0LrQsCcsICdjYXJkcy4nICsgaSArICcuYnJhbmQnLCBjLmJyYW5kKSArCiAgICAgICAgZmllbGQoJ9Cc0L7QtNC10LvRjCcsICdjYXJkcy4nICsgaSArICcubW9kZWwnLCBjLm1vZGVsKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0JDQtNGA0LXRgSDRgdGC0YDQsNC90LjRhtGLINC80LDRiNC40L3RiycsICdjYXJkcy4nICsgaSArICcuaHJlZicsIGMuaHJlZikgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC60LDQtNGA0LAgKGFsdCwg0LTQu9GPINC_0L7QuNGB0LrQsCDQuCDQvdC10LfRgNGP0YfQuNGFKScsICdjYXJkcy4nICsgaSArICcuYWx0JywgYy5hbHQpICsKICAgICAgICBmaWVsZCgn0JDQtNGA0LXRgSDRhNC-0YLQvtCz0YDQsNGE0LjQuCcsICdjYXJkcy4nICsgaSArICcuc3JjJywgYy5zcmMpICsKICAgICAgICAoaSA9PT0gMCA_IGZpZWxkKCfQnNC10YLQutCwINC90LAg0YjQuNGA0L7QutC-0Lkg0LrQsNGA0YLQvtGH0LrQtScsICdjYXJkcy4wLmJhZGdlJywgYy5iYWRnZSkgOiAnJykgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphdS1iIiBkYXRhLXBpY2s9ImNhcmRzLicgKyBpICsgJyI-0JLRi9Cx0YDQsNGC0Ywg0LrQsNC00YAg0YHQviDRgdGC0YDQsNC90LjRhtGLINC80LDRiNC40L3RizwvYnV0dG9uPicgKwogICAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXUtc2VjIj48c3VtbWFyeT7QniDQvdCw0L_RgNCw0LLQu9C10L3QuNC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emF1LWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2Fib3V0LmxhYmVsJywgY2ZnLmFib3V0LmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnYWJvdXQuaDInLCBjZmcuYWJvdXQuaDIpICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnYWJvdXQucCcsIGNmZy5hYm91dC5wLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphdS1zZWMiPjxzdW1tYXJ5PtCk0L7RgNC80LDRgtGLINGB0YrRkdC80LrQuCAoJyArIGNmZy5mb3JtYXRzLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emF1LWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2ZtdExhYmVsJywgY2ZnLmZtdExhYmVsKSArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXUtaGludCI-0J3QsNC30LLQsNC90LjRjyDRhNC-0YDQvNCw0YLQvtCyINGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINGD0YHQu9GD0LPQuCDRgdC_0LjRgdC60L7QvCDQv9GA0LXQtNC70L7QttC10L3QuNC5LjwvcD4nOwogICAgY2ZnLmZvcm1hdHMuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphdS1jYXJkIj48aDQ-0KTQvtGA0LzQsNGCICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAnZm9ybWF0cy4nICsgaSArICcuaDMnLCBmLmgzKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUnLCAnZm9ybWF0cy4nICsgaSArICcucCcsIGYucCwgJ2FyZWEnKSArCiAgICAgICAgZmllbGQoJ9CX0L3QsNGH0L7QuiAo0LjQvNGPINC40Lcg0L3QsNCx0L7RgNCwIE1hdGVyaWFsIFN5bWJvbHMpJywgJ2Zvcm1hdHMuJyArIGkgKyAnLmljb24nLCBmLmljb24pICsKICAgICAgICAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emF1LXNlYyI-PHN1bW1hcnk-0J_RgNC-0YbQtdGB0YEgKCcgKyBjZmcucHJvY2Vzcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphdS1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphdS1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAncHJvY1NlYy5sYWJlbCcsIGNmZy5wcm9jU2VjLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAnLCAncHJvY1NlYy5oMicsIGNmZy5wcm9jU2VjLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLnByb2Nlc3MuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphdS1jYXJkIj48aDQ-0KjQsNCzICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emF1LXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Cd0L7QvNC10YAnLCAncHJvY2Vzcy4nICsgaSArICcubnVtJywgcC5udW0pICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdwcm9jZXNzLicgKyBpICsgJy5uYW1lJywgcC5uYW1lKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtScsICdwcm9jZXNzLicgKyBpICsgJy5kZXNjJywgcC5kZXNjLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphdS1zZWMiPjxzdW1tYXJ5PtCh0YLQvtC40LzQvtGB0YLRjDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphdS1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXUtaGludCI-0KbQtdC90LAg0YPRhdC-0LTQuNGCINC4INCyINCy0LjQtNC40LzRi9C5INCx0LvQvtC6LCDQuCDQsiDQv9GA0LXQtNC70L7QttC10L3QuNC1INGA0LDQt9C80LXRgtC60Lgg4oCUICcgKwogICAgICAn0YDQsNC30L7QudGC0LjRgdGMINC40Lwg0L3QtdGH0LXQvC4g0JXRgdC70Lgg0L7Rh9C40YHRgtC40YLRjCDQv9C-0LvQtSwg0L_QsNC90LXQu9GMINC-0YHRgtCw0LLQuNGCINC_0YDQtdC20L3RjtGOINGG0LXQvdGDINCyINGA0LDQt9C80LXRgtC60LUgJyArCiAgICAgICfQuCDRgdC60LDQttC10YIg0L7QsSDRjdGC0L7QvDog0LLRi9C00YPQvNGL0LLQsNGC0Ywg0YfQuNGB0LvQviDQvtC90LAg0L3QtSDRgdGC0LDQvdC10YIuPC9wPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXUtcm93Ij4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2Nvc3QubGFiZWwnLCBjZmcuY29zdC5sYWJlbCkgKwogICAgICBmaWVsZCgn0KbQtdC90LAnLCAnY29zdC5wcmljZScsIGNmZy5jb3N0LnByaWNlKSArICc8L2Rpdj4nOwogICAgY2ZnLmNvc3QuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkgewogICAgICBoICs9IGZpZWxkKCfQp9GC0L4g0LLRhdC-0LTQuNGCIOKAlCDRgdGC0YDQvtC60LAgJyArIChpICsgMSksICdjb3N0Lml0ZW1zLicgKyBpLCB4KTsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0J_QvtGP0YHQvdC10L3QuNC1INC_0L7QtCDRgdC_0LjRgdC60L7QvCcsICdjb3N0Lm5vdGUnLCBjZmcuY29zdC5ub3RlLCAnYXJlYScpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emF1LXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQutC90L7Qv9C60LgnLCAnY29zdC5idG4nLCBjZmcuY29zdC5idG4pICsKICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0LrQvdC-0L_QutC4JywgJ2Nvc3QuYnRuSHJlZicsIGNmZy5jb3N0LmJ0bkhyZWYpICsgJzwvZGl2PicgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emF1LXNlYyI-PHN1bW1hcnk-0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLICgnICsgY2ZnLmZhcS5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphdS1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphdS1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnZmFxU2VjLmxhYmVsJywgY2ZnLmZhcVNlYy5sYWJlbCkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INGA0LDQt9C00LXQu9CwJywgJ2ZhcVNlYy5oMicsIGNmZy5mYXFTZWMuaDIpICsgJzwvZGl2PicgKwogICAgICAnPHAgY2xhc3M9ImF2emF1LWhpbnQiPtCS0L7Qv9GA0L7RgdGLINC4INC-0YLQstC10YLRiyDRg9GF0L7QtNGP0YIg0LIg0YDQsNC30LzQtdGC0LrRgyDRgdC70L7QstC-INCyINGB0LvQvtCy0L4g4oCUINC-0YLQtNC10LvRjNC90YvRhSDQv9C-0LvQtdC5ICcgKwogICAgICAnwqvQtNC70Y8g0L_QvtC40YHQutCwwrsg0LfQtNC10YHRjCDQvdC10YIg0Lgg0LHRi9GC0Ywg0L3QtSDQtNC-0LvQttC90L4uPC9wPic7CiAgICBjZmcuZmFxLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXUtY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQktC-0L_RgNC-0YEnLCAnZmFxLicgKyBpICsgJy5xJywgZi5xKSArCiAgICAgICAgZmllbGQoJ9Ce0YLQstC10YIgKNC80L7QttC90L4gSFRNTCknLCAnZmFxLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphdS1zZWMiPjxzdW1tYXJ5PtCf0YDQuNC30YvQsiDQuCDQv9C-0LTQstCw0Ls8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXUtaW4iPicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-INC_0LXRgNC10L3QvtGBINGB0YLRgNC-0LrQuCDRgtC10LPQvtC8IGJyKScsICdjdGEuaDInLCBjZmcuY3RhLmgyLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDQt9Cw0LPQvtC70L7QstC60L7QvCcsICdjdGEuc3ViJywgY2ZnLmN0YS5zdWIpOwogICAgY2ZnLmN0YS5idG5zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXUtcm93Ij4nICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0L3QsNC00L_QuNGB0YwnLCAnY3RhLmJ0bnMuJyArIGkgKyAnLnRleHQnLCBiLnRleHQpICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0LDQtNGA0LXRgScsICdjdGEuYnRucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0JrQvtC_0LjRgNCw0LnRgicsICdjdGEuY29weScsIGNmZy5jdGEuY29weSk7CiAgICBjZmcuY3RhLnNvY2lhbHMuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphdS1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQn9GA0L7RhNC40LvRjCAnICsgKGkgKyAxKSArICcg4oCUINC90LDQtNC_0LjRgdGMJywgJ2N0YS5zb2NpYWxzLicgKyBpICsgJy50ZXh0Jywgcy50ZXh0KSArCiAgICAgICAgZmllbGQoJ9Cf0YDQvtGE0LjQu9GMICcgKyAoaSArIDEpICsgJyDigJQg0LDQtNGA0LXRgScsICdjdGEuc29jaWFscy4nICsgaSArICcuaHJlZicsIHMuaHJlZikgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emF1LXNlYyI-PHN1bW1hcnk-0KDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphdS1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXUtaGludCI-0JfQsNCz0L7Qu9C-0LLQvtC6INC4INC-0L_QuNGB0LDQvdC40LUg0YHQsNC80L7QuSDRgdGC0YDQsNC90LjRhtGLICjRgtC-LCDRh9GC0L4g0LLQuNC00L3QviDQsiDQstGL0LTQsNGH0LUpICcgKwogICAgICAn0L_RgNCw0LLRj9GC0YHRjyDQvdC1INC30LTQtdGB0YwsINCwINCyINC90LDRgdGC0YDQvtC50LrQsNGFINGB0YLRgNCw0L3QuNGG0Ysgd2ZvbGlvLjwvcD4nICsKICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDQsiDRgNCw0LfQvNC10YLQutC1JywgJ2xkLm5hbWUnLCBjZmcubGQubmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCyINGA0LDQt9C80LXRgtC60LUnLCAnbGQuZGVzYycsIGNmZy5sZC5kZXNjLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0YPRgdC70YPQs9C4JywgJ2xkLnNydk5hbWUnLCBjZmcubGQuc3J2TmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnbGQuc3J2RGVzYycsIGNmZy5sZC5zcnZEZXNjLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0L_RgNC10LTQu9C-0LbQtdC90LjRjyAo0YfRgtC-INCy0YXQvtC00LjRgiDQsiDRhtC10L3RgyknLCAnbGQub2ZmZXJEZXNjJywgY2ZnLmxkLm9mZmVyRGVzYywgJ2FyZWEnKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8L2Rpdj48ZGl2IGlkPSJhdnphdS1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emF1LWIgcCIgaWQ9ImF2emF1LWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXUtYiIgaWQ9ImF2emF1LXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2emF1LW1zZyI-PC9zcGFuPjwvZGl2PicgKwogICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMTZweCI-PHRleHRhcmVhIGlkPSJhdnphdS1vdXQiIHJlYWRvbmx5PjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnphdS1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CgogICAgYWxsKHJvb3QsICdpbnB1dFtkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoaW5wKSB7CiAgICAgIHZhciBwID0gaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGlmICghL1wuc3JjJC8udGVzdChwKSkgcmV0dXJuOwogICAgICBpbnAuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gaW5wLnZhbHVlOwogICAgICB9KTsKICAgIH0pOwoKICAgIC8qINGA0LDQt9C80LXRgNGLINC60LDQtNGA0LAg0LjQt9C80LXRgNGP0LXQvCDRgdCw0LzQuDog0LLRgNCw0YLRjCDQsiDRgNCw0LfQvNC10YLQutC1INC90LXQu9GM0LfRjywKICAgICAgINCwINGA0YPQutCw0LzQuCDQvtC90Lgg0YPRgdGC0LDRgNC10LLQsNGO0YIg4oCUINGC0LDQuiDRg9C20LUg0LHRi9C70L4g0L3QsCDQuNC90YLQtdGA0YzQtdGA0L3QvtC5ICovCiAgICBmdW5jdGlvbiBtZWFzdXJlKHVybCkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBpbSA9IG5ldyBJbWFnZSgpOwogICAgICAgIGltLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsgcmVzKHsgdzogaW0ubmF0dXJhbFdpZHRoLCBoOiBpbS5uYXR1cmFsSGVpZ2h0IH0pOyB9OwogICAgICAgIGltLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7IHJlcyhudWxsKTsgfTsKICAgICAgICBpbS5zcmMgPSB1cmw7CiAgICAgIH0pOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LLRi9Cx0L7RgCDQutCw0LTRgNCwINGB0L4g0YHRgtGA0LDQvdC40YbRiyDQvNCw0YjQuNC90YsgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGFicyh1KSB7CiAgICAgIGlmICghdSkgcmV0dXJuICcnOwogICAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgICByZXR1cm4gdTsKICAgIH0KCiAgICBmdW5jdGlvbiBmcm9tU3Jjc2V0KHNldCwgc3JjKSB7CiAgICAgIGlmICghc2V0KSByZXR1cm4gYWJzKHNyYyk7CiAgICAgIHZhciBiZXN0ID0gbnVsbDsKICAgICAgc2V0LnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAocGFydCkgewogICAgICAgIHZhciBiaXRzID0gcGFydC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHZhciB3ID0gcGFyc2VJbnQoKGJpdHNbMV0gfHwgJycpLnJlcGxhY2UoJ3cnLCAnJyksIDEwKTsKICAgICAgICBpZiAoIXcgfHwgdyA-IE1BWFcpIHJldHVybjsKICAgICAgICBpZiAoIWJlc3QgfHwgdyA-IGJlc3QudykgYmVzdCA9IHsgdzogdywgdXJsOiBhYnMoYml0c1swXSkgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBiZXN0ID8gYmVzdC51cmwgOiBhYnMoc3JjKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzaG90c0Zyb20odXJsKSB7CiAgICAgIHJldHVybiBmZXRjaCh1cmwsIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICAgIHZhciBvdXQgPSBbXSwgc2VlbiA9IHt9OwogICAgICAgICAgYWxsKGRvYywgJ2ltZycpLmZvckVhY2goZnVuY3Rpb24gKGltKSB7CiAgICAgICAgICAgIHZhciB1ID0gZnJvbVNyY3NldChpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgaW0uZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSwKICAgICAgICAgICAgICBpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgfHwgaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSk7CiAgICAgICAgICAgIGlmICghdSB8fCB1LmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwIHx8IHNlZW5bdV0pIHJldHVybjsKICAgICAgICAgICAgc2Vlblt1XSA9IDE7IG91dC5wdXNoKHUpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0pOwogICAgfQoKICAgIGFsbChyb290LCAnYnV0dG9uW2RhdGEtcGlja10nKS5mb3JFYWNoKGZ1bmN0aW9uIChidG4pIHsKICAgICAgYnRuLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGJhc2UgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXBpY2snKTsKICAgICAgICB2YXIgaHJlZklucCA9IHJvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtcD0iJyArIGJhc2UgKyAnLmhyZWYiXScpOwogICAgICAgIHZhciB1cmwgPSBocmVmSW5wID8gaHJlZklucC52YWx1ZS50cmltKCkgOiAnJzsKICAgICAgICBpZiAoIXVybCkgeyBtc2coJ9CjINGN0YLQvtC5INC60LDRgNGC0L7Rh9C60Lgg0L3QtSDQt9Cw0LTQsNC9INCw0LTRgNC10YEg0YHRgtGA0LDQvdC40YbRiyDQvNCw0YjQuNC90Ysg4oCUINCy0YvQsdC40YDQsNGC0Ywg0L3QtSDQuNC3INGH0LXQs9C-LicpOyByZXR1cm47IH0KICAgICAgICB2YXIgYm94ID0gYnRuLnBhcmVudE5vZGU7CiAgICAgICAgdmFyIGhlYWQgPSBib3gucXVlcnlTZWxlY3RvcignLmF2emF1LXBpY2toZWFkJyk7CiAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICBoZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwogICAgICAgICAgaGVhZC5jbGFzc05hbWUgPSAnYXZ6YXUtaGludCBhdnphdS1waWNraGVhZCc7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoaGVhZCk7CiAgICAgICAgfQogICAgICAgIHZhciBncmlkID0gYm94LnF1ZXJ5U2VsZWN0b3IoJy5hdnphdS1ncmlkJyk7CiAgICAgICAgaWYgKGdyaWQpIGdyaWQucmVtb3ZlKCk7CiAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQl9Cw0LPRgNGD0LbQsNGOICcgKyB1cmwgKyAn4oCmJzsKICAgICAgICBzaG90c0Zyb20odXJsKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7CiAgICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0JrQsNC00YDQvtCyINC90LUg0L3QsNGI0LvQvtGB0YwuJzsgcmV0dXJuOyB9CiAgICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CS0YvQsdC10YDQuNGC0LUg0LrQsNC00YAgKCcgKyBsaXN0Lmxlbmd0aCArICcpJzsKICAgICAgICAgIHZhciBnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICBnLmNsYXNzTmFtZSA9ICdhdnphdS1ncmlkJzsKICAgICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAodSkgewogICAgICAgICAgICB2YXIgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZ3VyZScpOwogICAgICAgICAgICB2YXIgaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICAgICAgaW0uc3JjID0gdTsgaW0ubG9hZGluZyA9ICdsYXp5JzsKICAgICAgICAgICAgZi5hcHBlbmRDaGlsZChpbSk7CiAgICAgICAgICAgIGYub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wPSInICsgYmFzZSArICcuc3JjIl0nKTsKICAgICAgICAgICAgICBpZiAodGFyZ2V0KSB7CiAgICAgICAgICAgICAgICB0YXJnZXQudmFsdWUgPSB1OwogICAgICAgICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBiYXNlICsgJy5zcmMiXScpOwogICAgICAgICAgICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gdTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZy5yZW1vdmUoKTsgaGVhZC50ZXh0Q29udGVudCA9ICfQmtCw0LTRgCDQstGL0LHRgNCw0L0uJzsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZy5hcHBlbmRDaGlsZChmKTsKICAgICAgICAgIH0pOwogICAgICAgICAgYm94LmFwcGVuZENoaWxkKGcpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0J3QtSDQvtGC0LrRgNGL0LvQvtGB0Yw6ICcgKyBlLm1lc3NhZ2U7IH0pOwogICAgICB9OwogICAgfSk7CgogICAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCDQt9C90LDRh9C10L3QuNC5INC40Lcg0YTQvtGA0LzRiyAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgICB2YXIgcCA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iajsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcFtpXV07CiAgICAgIG9bcFtwLmxlbmd0aCAtIDFdXSA9IHZhbDsKICAgIH0KCiAgICBmdW5jdGlvbiBjb2xsZWN0KCkgewogICAgICB2YXIgZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgIHNldFBhdGgoZCwgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKSwgZWwudmFsdWUudHJpbSgpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMINCyINGA0LDQt9C80LXRgtC60YMgLS0tLS0tLS0tLQogICAgICAg0J_QuNGI0LXQvCDQsiDRgtC-0YIg0YLQtdC60YHRgtC-0LLRi9C5INGD0LfQtdC7LCDQs9C00LUg0YLQtdC60YHRgiDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQtdGB0YLRjC4KICAgICAgINCh0YLQuNGA0LDRgtGMINGB0L7QtNC10YDQttC40LzQvtC1INGG0LXQu9C40LrQvtC8INC90LXQu9GM0LfRjzog0YDRj9C00L7QvCDRgSDRgtC10LrRgdGC0L7QvCDQu9C10LbQsNGCCiAgICAgICDQstC70L7QttC10L3QvdGL0LUg0Y3Qu9C10LzQtdC90YLRiywg0Lgg0L7QvdC4INGD0LXQt9C20LDQu9C4INCyINC60L7QvdC10YYg4oCUINGN0YLQviDRg9C20LUg0YHRgtC-0LjQu9C-CiAgICAgICDRgtGA0ZHRhSDQv9GA0LDQstC-0Log0LIg0LTRgNGD0LPQuNGFINC_0LDQvdC10LvRj9GFLiDQl9C00LXRgdGMINGN0YLQviDQutGA0LjRgtC40YfQvdC-INC00LvRjyDQv9C-0LTRgdC60LDQt9C60LgKICAgICAgINC-INC_0YDQvtC60YDRg9GC0LrQtSDQuCDQt9C90LDRh9C60L7QsiDRhNC-0YDQvNCw0YLQvtCyLiAqLwoKICAgIGZ1bmN0aW9uIHNldFRleHQoZWwsIHYpIHsKICAgICAgaWYgKCFlbCkgcmV0dXJuOwogICAgICB2YXIgbm9kZSA9IG51bGw7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuID0gZWwuY2hpbGROb2Rlc1tpXTsKICAgICAgICBpZiAobi5ub2RlVHlwZSA9PT0gMyAmJiBuLm5vZGVWYWx1ZS50cmltKCkpIHsgbm9kZSA9IG47IGJyZWFrOyB9CiAgICAgIH0KICAgICAgaWYgKCFub2RlKSB7IGVsLnRleHRDb250ZW50ID0gdjsgcmV0dXJuOyB9CiAgICAgIHZhciBtID0gbm9kZS5ub2RlVmFsdWUubWF0Y2goL14oXHMqKVtcc1xTXSo_KFxzKikkLyk7CiAgICAgIG5vZGUubm9kZVZhbHVlID0gKG0gPyBtWzFdIDogJycpICsgdiArIChtID8gbVsyXSA6ICcnKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsKSBlbC5pbm5lckhUTUwgPSB2OyB9CgogICAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaGVyby1leWVicm93JyksIGQuaGVyby5leWVicm93KTsKICAgICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmhlcm8tdGl0bGUtaW5uZXInKTsKICAgICAgc2V0VGV4dChsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgICAgaWYgKGxpbmVzWzFdKSB7CiAgICAgICAgdmFyIGVtID0gb25lKGxpbmVzWzFdLCAnZW0nKTsKICAgICAgICBzZXRUZXh0KGVtIHx8IGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgICB9CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmhlcm8tc3ViJyksIGQuaGVyby5zdWIpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5oZXJvLXNjcm9sbC1oaW50JyksIGQuaGVyby5oaW50KTsKCiAgICAgIHZhciBsYWJlbHMgPSBhbGwoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCBzcGFuJyk7CiAgICAgIHNldFRleHQobGFiZWxzWzBdLCBkLmdhbGxlcnlMYWJlbCk7CiAgICAgIGlmIChsYWJlbHNbMV0pIHNldFRleHQobGFiZWxzWzFdLCBkLmZtdExhYmVsKTsKCiAgICAgIGFsbChzY29wZSwgJy5nYWxsZXJ5LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgIHZhciB2ID0gZC5jYXJkc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgdmFyIGltZyA9IG9uZShpdCwgJ2ltZycpOwogICAgICAgIGlmIChpbWcpIHsKICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHYuc3JjKTsKICAgICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHYuYWx0KTsKICAgICAgICAgIGlmICh2LncpIGltZy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgdi53KTsKICAgICAgICAgIGlmICh2LmgpIGltZy5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHYuaCk7CiAgICAgICAgfQogICAgICAgIGlmICh2LmhyZWYpIGl0LnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgICAgZWxzZSBpdC5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5vdmVybGF5LXRleHQgaDMnKSwgdi5icmFuZCk7CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICcub3ZlcmxheS10ZXh0IHNwYW4nKSwgdi5tb2RlbCk7CiAgICAgICAgdmFyIGJhZGdlID0gb25lKGl0LCAnLmZlYXR1cmVkLWJhZGdlJyk7CiAgICAgICAgaWYgKGJhZGdlICYmIHYuYmFkZ2UpIHNldFRleHQoYmFkZ2UsIHYuYmFkZ2UpOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmFib3V0LWxhYmVsJyksIGQuYWJvdXQubGFiZWwpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hYm91dCBoMicpLCBkLmFib3V0LmgyKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYWJvdXQgcCcpLCBkLmFib3V0LnApOwoKICAgICAgYWxsKHNjb3BlLCAnLmFkdi1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZm9ybWF0c1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICcuaWNvbicpLCB2Lmljb24pOwogICAgICAgIHNldFRleHQob25lKGl0LCAnaDMnKSwgdi5oMyk7CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICdwJyksIHYucCk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcucHJvY2Vzcy1oZWFkZXIgLmxhYmVsJyksIGQucHJvY1NlYy5sYWJlbCk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnByb2Nlc3MtaGVhZGVyIGgyJyksIGQucHJvY1NlYy5oMik7CiAgICAgIGFsbChzY29wZSwgJy5wcm9jZXNzLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgIHZhciB2ID0gZC5wcm9jZXNzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5wcm9jZXNzLW51bScpLCB2Lm51bSk7CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICcucHJvY2Vzcy1uYW1lJyksIHYubmFtZSk7CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICcucHJvY2Vzcy1kZXNjJyksIHYuZGVzYyk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuY29zdCAubGFiZWwnKSwgZC5jb3N0LmxhYmVsKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuY29zdCBoMicpLCBkLmNvc3QucHJpY2UpOwogICAgICBhbGwoc2NvcGUsICcuY29zdC1saXN0IGxpJykuZm9yRWFjaChmdW5jdGlvbiAobGksIGkpIHsKICAgICAgICBpZiAoZC5jb3N0Lml0ZW1zW2ldICE9IG51bGwpIHNldFRleHQobGksIGQuY29zdC5pdGVtc1tpXSk7CiAgICAgIH0pOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5jb3N0LW5vdGUnKSwgZC5jb3N0Lm5vdGUpOwogICAgICB2YXIgY2IgPSBvbmUoc2NvcGUsICcuY29zdCAuYXZ6LWJ0bicpOwogICAgICBzZXRUZXh0KGNiLCBkLmNvc3QuYnRuKTsKICAgICAgaWYgKGNiKSBjYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkLmNvc3QuYnRuSHJlZik7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5mYXEtaGVhZGVyIC5sYWJlbCcpLCBkLmZhcVNlYy5sYWJlbCk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmZhcS1oZWFkZXIgaDInKSwgZC5mYXFTZWMuaDIpOwogICAgICBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgIHZhciB2ID0gZC5mYXFbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLmZhcS1xJyksIHYucSk7CiAgICAgICAgc2V0SHRtbChvbmUoaXQsICcuZmFxLWEnKSwgdi5hKTsKICAgICAgfSk7CgogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5jdGEgaDInKSwgZC5jdGEuaDIpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5jdGEtc3ViJyksIGQuY3RhLnN1Yik7CiAgICAgIGFsbChzY29wZSwgJy5idG4tcm93IC5hdnotYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuYnRuc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChiLCB2LnRleHQpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgfSk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmN0YS1zb2NpYWxzIHNwYW4nKSwgZC5jdGEuY29weSk7CiAgICAgIGFsbChzY29wZSwgJy5jdGEtc29jaWFscyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuc29jaWFsc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChhLCB2LnRleHQpOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgfSk7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDRgNCw0LfQvNC10YLQutCwIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBidWlsZExkKGRvYywgc2NvcGUsIGQpIHsKICAgICAgdmFyIHMgPSBvbmUoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpOwogICAgICBpZiAoIXMpIHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINGA0LDQt9C80LXRgtC60LggbGQranNvbicgfTsKICAgICAgdmFyIG87CiAgICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9GA0LDQt9C80LXRgtC60LAg0YHRgtGA0LDQvdC40YbRiyDigJQg0L3QtSDQstCw0LvQuNC00L3Ri9C5IEpTT04nIH07IH0KICAgICAgdmFyIGcgPSBvWydAZ3JhcGgnXSB8fCBbXTsKICAgICAgc3luY0Nhbm9uKGcpOwogICAgICB2YXIgd2FybiA9IFtdOwoKICAgICAgZy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdXZWJQYWdlJykgewogICAgICAgICAgbi5uYW1lID0gZC5sZC5uYW1lOwogICAgICAgICAgbi5kZXNjcmlwdGlvbiA9IGQubGQuZGVzYzsKICAgICAgICAgIG4uZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdTZXJ2aWNlJykgewogICAgICAgICAgbi5uYW1lID0gZC5sZC5zcnZOYW1lOwogICAgICAgICAgbi5kZXNjcmlwdGlvbiA9IGQubGQuc3J2RGVzYzsKICAgICAgICAgIGlmIChuLm9mZmVycykgewogICAgICAgICAgICBuLm9mZmVycy5kZXNjcmlwdGlvbiA9IGQubGQub2ZmZXJEZXNjOwogICAgICAgICAgICAvKiDRhtC10L3QsCDigJQg0LjQtyDQstC40LTQuNC80L7Qs9C-INCx0LvQvtC60LAuINCf0YPRgdGC0L4g4oCUINC-0YHRgtCw0LLQu9GP0LXQvCDQv9GA0LXQttC90Y7RjgogICAgICAgICAgICAgICDQuCDQs9C-0LLQvtGA0LjQvCDQstGB0LvRg9GFLiDQodC-0YfQuNC90Y_RgtGMINGH0LjRgdC70L4g0L3QtdC70YzQt9GPLiAqLwogICAgICAgICAgICB2YXIgcCA9IGRpZ2l0cyhkLmNvc3QucHJpY2UpOwogICAgICAgICAgICBpZiAocCkgbi5vZmZlcnMucHJpY2UgPSBwOwogICAgICAgICAgICBlbHNlIHdhcm4ucHVzaCgn0LIg0LHQu9C-0LrQtSDRgdGC0L7QuNC80L7RgdGC0Lgg0L3QtdGCINGG0LjRhNGA0Ysg4oCUINGG0LXQvdCwINCyINGA0LDQt9C80LXRgtC60LUg0L7RgdGC0LDQu9Cw0YHRjCDQv9GA0LXQttC90LXQuScpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG4uaGFzT2ZmZXJDYXRhbG9nICYmIG4uaGFzT2ZmZXJDYXRhbG9nLml0ZW1MaXN0RWxlbWVudCkgewogICAgICAgICAgICBuLmhhc09mZmVyQ2F0YWxvZy5pdGVtTGlzdEVsZW1lbnQgPSBkLmZvcm1hdHMubWFwKGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgJ0B0eXBlJzogJ09mZmVyJywgaXRlbU9mZmVyZWQ6IHsgJ0B0eXBlJzogJ1NlcnZpY2UnLCBuYW1lOiBmLmgzIH0gfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINCz0LvQsNCy0L3QvtC1INC40LfQvtCx0YDQsNC20LXQvdC40LUg4oCUINC_0LXRgNCy0YvQuSDQutCw0LTRgCDQs9Cw0LvQtdGA0LXQuCAqLwogICAgICB2YXIgZmlyc3QgPSBkLmNhcmRzWzBdOwogICAgICBnLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjcHJpbWFyeWltYWdlJykgPiAtMSAmJiBmaXJzdCkgewogICAgICAgICAgbi51cmwgPSBmaXJzdC5zcmM7CiAgICAgICAgICBuLmNhcHRpb24gPSBmaXJzdC5hbHQ7CiAgICAgICAgICBpZiAoZmlyc3Qudykgbi53aWR0aCA9IHBhcnNlSW50KGZpcnN0LncsIDEwKTsKICAgICAgICAgIGlmIChmaXJzdC5oKSBuLmhlaWdodCA9IHBhcnNlSW50KGZpcnN0LmgsIDEwKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgLyog0LzQsNGI0LjQvdGLOiDQuNC80Y8g0LjQtyDQvNCw0YDQutC4INC4INC80L7QtNC10LvQuCwg0LDQtNGA0LXRgSDQuNC3INC60LDRgNGC0L7Rh9C60LggKi8KICAgICAgdmFyIHdvcmtzID0gZy5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3dvcmtzJykgPiAtMTsgfSlbMF07CiAgICAgIGlmICh3b3JrcykgewogICAgICAgIHdvcmtzLm51bWJlck9mSXRlbXMgPSBkLmNhcmRzLmxlbmd0aDsKICAgICAgICB3b3Jrcy5pdGVtTGlzdEVsZW1lbnQgPSBkLmNhcmRzLm1hcChmdW5jdGlvbiAodiwgaSkgewogICAgICAgICAgdmFyIG5hbWUgPSAodi5icmFuZCArICcgJyArIHYubW9kZWwpLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICAgICAgICAgIHZhciBpbWcgPSB7ICdAdHlwZSc6ICdJbWFnZU9iamVjdCcsIGNvbnRlbnRVcmw6IHYuc3JjLCBuYW1lOiB2LmFsdCwgY2FwdGlvbjogbmFtZSB9OwogICAgICAgICAgaWYgKHYuaHJlZikgaW1nLmlzUGFydE9mID0geyAnQHR5cGUnOiAnV2ViUGFnZScsIHVybDogdi5ocmVmIH07CiAgICAgICAgICBlbHNlIHdhcm4ucHVzaCgn0YMg0LrQsNGA0YLQvtGH0LrQuCAnICsgKGkgKyAxKSArICcg0L3QtdGCINCw0LTRgNC10YHQsCDRgdGC0YDQsNC90LjRhtGLINC80LDRiNC40L3RiycpOwogICAgICAgICAgdmFyIG5vZGUgPSB7ICdAdHlwZSc6ICdMaXN0SXRlbScsIHBvc2l0aW9uOiBpICsgMSwgbmFtZTogbmFtZSwgaXRlbTogaW1nIH07CiAgICAgICAgICBpZiAodi5ocmVmKSBub2RlLnVybCA9IHYuaHJlZjsKICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKiDQstC-0L_RgNC-0YHRiyDigJQg0LjQtyDQstC40LTQuNC80L7Qs9C-INGC0LXQutGB0YLQsCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4gKi8KICAgICAgdmFyIGZhcSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pWzBdOwogICAgICBpZiAoZmFxKSB7CiAgICAgICAgZmFxLm1haW5FbnRpdHkgPSBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnQHR5cGUnOiAnUXVlc3Rpb24nLAogICAgICAgICAgICBuYW1lOiB0ZXh0V2l0aEJyZWFrcyhvbmUoaXQsICcuZmFxLXEnKSksCiAgICAgICAgICAgIGFjY2VwdGVkQW5zd2VyOiB7ICdAdHlwZSc6ICdBbnN3ZXInLCB0ZXh0OiB0ZXh0V2l0aEJyZWFrcyhvbmUoaXQsICcuZmFxLWEnKSkgfQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0YbQtdC90LAsINC90LDQt9Cy0LDQvdC90LDRjyDQsiDQvtC_0LjRgdCw0L3QuNC4INGB0YLRgNCw0L3QuNGG0YssINC90LUg0LTQvtC70LbQvdCwINGA0LDRgdGF0L7QtNC40YLRjNGB0Y8KICAgICAgICAg0YEg0LLQuNC00LjQvNC-0LkuINCf0LDQvdC10LvRjCDQvdC1INC_0L7QtNC80LXQvdGP0LXRgiDRh9C40YHQu9C-INCy0L3Rg9GC0YDQuCDQttC40LLQvtC5INGE0YDQsNC30Ysg4oCUCiAgICAgICAgINGC0L7Qu9GM0LrQviDRgdCy0LXRgNGP0LXRgiDQuCDQs9C-0LLQvtGA0LjRgiDQstGB0LvRg9GFOiDQv9C-0LTRgdGC0LDQstC70Y_RgtGMINCy0YHQu9C10L_Rg9GOINC-0L_QsNGB0L3QtdC1LiAqLwogICAgICB2YXIgcHJpY2VOdW0gPSBkaWdpdHMoZC5jb3N0LnByaWNlKTsKICAgICAgaWYgKHByaWNlTnVtKSB7CiAgICAgICAgdmFyIGh1bWFuID0gbW9uZXkocHJpY2VOdW0pOwogICAgICAgIFtbJ9C-0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsIGQubGQuZGVzY10sIFsn0L7Qv9C40YHQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCBkLmxkLnNydkRlc2NdLAogICAgICAgICBbJ9C-0L_QuNGB0LDQvdC40LUg0L_RgNC10LTQu9C-0LbQtdC90LjRjycsIGQubGQub2ZmZXJEZXNjXV0uZm9yRWFjaChmdW5jdGlvbiAocGFpcikgewogICAgICAgICAgdmFyIHR4dCA9IFN0cmluZyhwYWlyWzFdIHx8ICcnKTsKICAgICAgICAgIHZhciBmb3VuZCA9IHR4dC5tYXRjaCgvXGRbXGRccyAgXXsyLH1cZC9nKSB8fCBbXTsKICAgICAgICAgIHZhciBtaXNtYXRjaCA9IGZvdW5kLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4gZGlnaXRzKHgpICE9PSBwcmljZU51bTsgfSk7CiAgICAgICAgICBpZiAobWlzbWF0Y2gubGVuZ3RoKSB7CiAgICAgICAgICAgIHdhcm4ucHVzaCgn0LIg0L_QvtC70LUgwqsnICsgcGFpclswXSArICfCuyDRgdGC0L7QuNGCINGH0LjRgdC70L4gJyArIG1pc21hdGNoWzBdLnRyaW0oKSArCiAgICAgICAgICAgICAgJywg0LAg0YbQtdC90LAg0L3QsCDRgdGC0YDQsNC90LjRhtC1ICcgKyBodW1hbik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIC8qINCz0YDQsNGEINC-0LHRj9C30LDQvSDQvtGB0YLQsNCy0LDRgtGM0YHRjyDQt9Cw0LzQutC90YPRgtGL0Lw6INGB0YHRi9C70LrQsCDQsiDQv9GD0YHRgtC-0YLRgyDigJQg0LzQvtC70YfQsNC70LjQstCw0Y8KICAgICAgICAg0L_QvtC70L7QvNC60LAsINC10ZEg0L3QuNC60YLQviDQvdC1INC30LDQvNC10YLQuNGCINCx0LXQtyDQv9GA0L7QstC10YDQutC4ICovCiAgICAgIHZhciBpZHMgPSB7fSwgZGFuZ2xpbmcgPSBbXTsKICAgICAgZy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7IGlmIChuWydAaWQnXSkgaWRzW25bJ0BpZCddXSA9IDE7IH0pOwogICAgICAoZnVuY3Rpb24gd2Fsayh4KSB7CiAgICAgICAgaWYgKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7CiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoeCkgJiYgeFsnQGlkJ10gJiYgT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAxICYmICFpZHNbeFsnQGlkJ11dKSB7CiAgICAgICAgICAgIGRhbmdsaW5nLnB1c2goeFsnQGlkJ10pOwogICAgICAgICAgfQogICAgICAgICAgT2JqZWN0LmtleXMoeCkuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBpZiAoayAhPT0gJ0BpZCcpIHdhbGsoeFtrXSk7IH0pOwogICAgICAgIH0KICAgICAgfSkoZyk7CiAgICAgIGlmIChkYW5nbGluZy5sZW5ndGgpIHdhcm4ucHVzaCgn0YHRgdGL0LvQutC4INCyINC_0YPRgdGC0L7RgtGDOiAnICsgZGFuZ2xpbmcuam9pbignLCAnKSk7CgogICAgICByZXR1cm4geyB0ZXh0OiBKU09OLnN0cmluZ2lmeShvLCBudWxsLCAyKSwgZXJyOiBudWxsLCB3YXJuOiB3YXJuIH07CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgNC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGFzc2VtYmxlKGQpIHsKICAgICAgcmV0dXJuIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2ei1hdXRvJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXZ6LWF1dG8gLmdhbGxlcnktZ3JpZCcpID4gLTE7CiAgICAgICAgfSlbMF07CiAgICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3dhaXRGb3JET00nKSA-IC0xICYmIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2ei1hdXRvJykgPiAtMTsKICAgICAgICB9KVswXTsKICAgICAgICAvKiDRgdGC0YDQvtC60YMg0YjRgNC40YTRgtC-0LIg0LHQtdGA0ZHQvCDQuNC3INC40YHRhdC-0LTQvdC40LrQsCDQodCr0KDQq9CcINGC0LXQutGB0YLQvtC8OiDRh9C10YDQtdC3IG91dGVySFRNTAogICAgICAgICAgINCx0YDQsNGD0LfQtdGAINC30LDQv9C40YHQsNC7INCx0Ysg0LDQvNC_0LXRgNGB0LDQvdC00Ysg0LrQsNC6ICZhbXA7IOKAlCDRgNCw0LHQvtGC0LDQtdGCINGC0LDQuiDQttC1LCDQvdC-CiAgICAgICAgICAg0LfQsNGB0L7RgNGP0LXRgiDRgdGA0LDQstC90LXQvdC40LUg0YEg0LjRgdGF0L7QtNC90YvQvCDQutC-0LTQvtC8ICovCiAgICAgICAgdmFyIGZvbnRSYXcgPSAoc3JjLm1hdGNoKC88bGluayBocmVmPSJodHRwczpcL1wvZm9udHNcLmdvb2dsZWFwaXNcLmNvbVwvY3NzMltePl0qPi8pIHx8IFtudWxsXSlbMF07CiAgICAgICAgdmFyIGNvbW1lbnQgPSAoc3JjLm1hdGNoKC88IS0tXG5ccys9K1tcc1xTXSo_LS0-LykgfHwgW251bGxdKVswXTsKCiAgICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6IC5hdnotYXV0bycpOwogICAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgn0YHRgtC40LvQuCDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgn0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAoIWZvbnRSYXcpIG1pc3NpbmcucHVzaCgn0YHRgtGA0L7QutCwINGI0YDQuNGE0YLQvtCyJyk7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgc2NvcGUsIGQpOwogICAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICAgIC8qINCf0L7RgNGP0LTQvtC6INGH0LDRgdGC0LXQuSDigJQg0LrQsNC6INCyINGB0LDQvNC-0Lwg0LHQu9C-0LrQtTog0YHQvdCw0YfQsNC70LAg0YHRgtGA0L7QutC4INGI0LDQv9C60LgsCiAgICAgICAgICAg0L_QvtGC0L7QvCDRgdGC0LjQu9C4LCDQv9C-0YLQvtC8INGA0LDQt9C80LXRgtC60LAuINCh0LLQtdGA0LXQvdC-INGBINGA0LXQsNC70YzQvdGL0Lwg0LrQvtC00L7QvAogICAgICAgICAgINGB0YLRgNCw0L3QuNGG0YssINCwINC90LUg0L_QtdGA0LXQvdC10YHQtdC90L4g0YEg0YHQvtGB0LXQtNC90LXQuSDQv9Cw0L3QtdC70LguICovCiAgICAgICAgdmFyIHRleHQgPSAoY29tbWVudCA_IFtjb21tZW50LCAnJ10gOiBbXSkuY29uY2F0KFsKICAgICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20iPicsCiAgICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4nLAogICAgICAgICAgQVZaX0ZPTlRfTElOSywKICAgICAgICAgICcnLAogICAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgICBzY3JpcHQudGV4dENvbnRlbnQudHJpbSgpLAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICAgIGxkLnRleHQsCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgICAgXSkuam9pbignXG4nKTsKCiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgd2FybjogbGQud2FybiB8fCBbXSB9OwogICAgICB9KTsKICAgIH0KCiAgICAvKiB3YXJuINC_0YDQuNC60LvQtdC40LLQsNC10YLRgdGPINCS0J4g0JLQodCV0KUg0LLQtdGC0LrQsNGFOiDQtdGB0LvQuCDQutC-0L_QuNGA0L7QstCw0L3QuNC1INC90LUg0YPQtNCw0LvQvtGB0YwsCiAgICAgICDQv9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20L3RiyDQtNC-0LnRgtC4LiDQmNC90LDRh9C1INC_0LDQvdC10LvRjCDQvNC-0LvRh9CwINGC0LXRgNGP0LXRggogICAgICAg0YDQvtCy0L3QviDRgtC-LCDRgNCw0LTQuCDRh9C10LPQviDQv9GA0LXQtNGD0L_RgNC10LbQtNCw0LXRgi4gKi8KICAgIGZ1bmN0aW9uIGNvcHkodGV4dCwgbm90ZSwgd2FybikgewogICAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAgICDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDQtNCw0LbQtSDQuNC3INGC0LXRhSDQutGD0YHQutC-0LIsINC60L7RgtC-0YDRi9C1INC_0LDQvdC10LvRjCDQutC-0L_QuNGA0YPQtdGCCiAgICAgICAgINC00L7RgdC70L7QstC90L4g4oCUINC40Lcg0YHRgtC40LvQtdC5LCDRgdC60YDQuNC_0YLQsCDQuCDRgNCw0LfQvNC10YLQutC4INCy0L3QtSDQv9C-0LvQtdC5LiDQotGD0LTQsCDQuNGFCiAgICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICAgIHRleHQgPSBTdHJpbmcodGV4dCkucmVwbGFjZSgvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2csICcnKTsKICAgICAgdmFyIHRhID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6YXUtb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciB0YWlsID0gd2FybiA_ICcg0JLQvdC40LzQsNC90LjQtTogJyArIHdhcm4gKyAnLicgOiAnJzsKICAgICAgdmFyIG1hbnVhbCA9ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4gKENtZCtDKS4nOwogICAgICB2YXIgb2sgPSBmYWxzZTsKICAgICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgICBpZiAob2spIHsgbXNnKG5vdGUgKyB0YWlsKTsgcmV0dXJuOyB9CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlICsgdGFpbCk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgdGFpbCk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgdGFpbCk7IH0KICAgIH0KCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnphdS1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBkID0gY29sbGVjdCgpOwogICAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgICBQcm9taXNlLmFsbChkLmNhcmRzLm1hcChmdW5jdGlvbiAoYykgewogICAgICAgIHJldHVybiBtZWFzdXJlKGMuc3JjKS50aGVuKGZ1bmN0aW9uIChtKSB7CiAgICAgICAgICBpZiAobSkgeyBjLncgPSBTdHJpbmcobS53KTsgYy5oID0gU3RyaW5nKG0uaCk7IH0KICAgICAgICAgIHJldHVybiBtOwogICAgICAgIH0pOwogICAgICB9KSkudGhlbihmdW5jdGlvbiAoc2l6ZXMpIHsKICAgICAgICB2YXIgbG9zdCA9IHNpemVzLm1hcChmdW5jdGlvbiAobSwgaSkgeyByZXR1cm4gbSA_IG51bGwgOiAoaSArIDEpOyB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgcmV0dXJuIGFzc2VtYmxlKGQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgLyog0YHQstC10YDRj9C10Lw6INCy0YHRkSDQu9C4INCy0LLQtdC00ZHQvdC90L7QtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQv9C-0L_QsNC70L4g0LIg0LrQvtC0ICovCiAgICAgICAgdmFyIGRvYzIgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MyLnF1ZXJ5U2VsZWN0b3IoJy5hdnotYXV0bycpKTsKICAgICAgICByZWFkTGQoZG9jMiwgYWdhaW4pOwogICAgICAgIHZhciBub3RMYW5kZWQgPSBhZ2FpbiA_IGxhbmRlZChkLCBhZ2FpbiwgL15jYXJkc1wuXGQrXC4od3xoKSQvKSA6IFsn0YHRgtGA0LDQvdC40YbQsCDQvdC1INGA0LDQt9C-0LHRgNCw0LvQsNGB0YwnXTsKICAgICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiDRgdGC0YDQsNC90LjRhtGLINC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLic7CiAgICAgICAgICB2YXIgdyA9IHJlcy53YXJuLnNsaWNlKCk7CiAgICAgICAgICBpZiAobG9zdC5sZW5ndGgpIHcucHVzaCgn0L3QtSDQvtGC0LrRgNGL0LvQuNGB0Ywg0LrQsNC00YDRizogJyArIGxvc3Quam9pbignLCAnKSk7CiAgICAgICAgICBpZiAobm90TGFuZGVkLmxlbmd0aCkgdy5wdXNoKCfQndCVINCX0JDQn9CY0KHQkNCb0J7QodCsINCyINC60L7QtDogJyArIG5vdExhbmRlZC5zbGljZSgwLCA2KS5qb2luKCcsICcpICsKICAgICAgICAgICAgKG5vdExhbmRlZC5sZW5ndGggPiA2ID8gJyDQuCDQtdGJ0ZEgJyArIChub3RMYW5kZWQubGVuZ3RoIC0gNikgOiAnJykpOwogICAgICAgICAgY29weShyZXMudGV4dCwgbm90ZSwgdy5qb2luKCc7ICcpKTsKICAgICAgICB9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emF1LXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdnotYXV0bycpKTsKICAgICAgICByZWFkTGQoZG9jLCBhZ2Fpbik7CiAgICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShzbmFwKSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgICBpZiAoYSA9PT0gYikgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0LHRi9C70L4nLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cf0YDQvtCy0LXRgNC60LAg0L3QtSDQv9GA0L7RiNC70LA6ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CiAgfQoKICBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXZ6LWF1dG8nKTsKICAgIGlmICghc2NvcGUpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAuYXZ6LWF1dG8nKTsKICAgIGNmZyA9IHJlYWRDZmcoc2NvcGUpOwogICAgcmVhZExkKGRvYywgY2ZnKTsKICAgIHN0YXJ0KCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgIHJvb3QuaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6YXUtd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2emF1LWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0LDQstGC0L7QvNC-0LHQuNC70YzQvdC-0Lkg0YHRitGR0LzQutC4PC9oMj48L2Rpdj4nICsKICAgICAgJzxkaXYgaWQ9ImF2emF1LWJvZHkiPjxwIGNsYXNzPSJhdnphdS1oaW50Ij7QndC1INGD0LTQsNC70L7RgdGMINC_0YDQvtGH0LjRgtCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizogJyArCiAgICAgIGVzYyhlLm1lc3NhZ2UpICsgJzwvcD48L2Rpdj48L2Rpdj4nOwogIH0pOwoKICByZXR1cm4gJ9Cf0LDQvdC10LvRjCDQsNCy0YLQvtC80L7QsdC40LvRjNC90L7QuSDRgdGK0ZHQvNC60Lgg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19Cl07CgogIHZhciBwYXRoID0gbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sICcnKSB8fCAnLyc7CgogIGZ1bmN0aW9uIGZpdHModG9vbCkgewogICAgcmV0dXJuIHRvb2wucGFnZXMuc29tZShmdW5jdGlvbiAocCkgeyByZXR1cm4gcCA9PT0gcGF0aDsgfSk7CiAgfQoKICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnotbWVudScpOwogICAgaWYgKGVsKSBlbC5yZW1vdmUoKTsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleSk7CiAgfQoKICBmdW5jdGlvbiBvbktleShlKSB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNsb3NlKCk7IH0KCiAgZnVuY3Rpb24gcnVuKHRvb2wpIHsKICAgIGNsb3NlKCk7CiAgICB0cnkgewogICAgICB0b29sLnJ1bigpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zb2xlLmVycm9yKCdBVlo6INC40L3RgdGC0YDRg9C80LXQvdGCIMKrJyArIHRvb2wudGl0bGUgKyAnwrsg0YPQv9Cw0Lsg4oCUJywgZSk7CiAgICAgIGFsZXJ0KCfQmNC90YHRgtGA0YPQvNC10L3RgiDQvdC1INC30LDQv9GD0YHRgtC40LvRgdGPOiAnICsgZS5tZXNzYWdlICsgJ1xu0J_QvtC00YDQvtCx0L3QvtGB0YLQuCDQsiDQutC-0L3RgdC-0LvQuC4nKTsKICAgIH0KICB9CgogIHZhciBDU1MgPSBbCiAgICAnI2F2ei1tZW51e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7JywKICAgICdqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjBweDtiYWNrZ3JvdW5kOnJnYmEoMTYsMTYsMTgsLjYpOycsCiAgICAnLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cig2cHgpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDZweCk7JywKICAgICdmb250OjE0cHgvMS40NSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmfScsCiAgICAnI2F2ei1tZW51ICp7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2ei1ib3h7d2lkdGg6bWluKDUyMHB4LDEwMCUpO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdiYWNrZ3JvdW5kOiMxZDFkMWY7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjE4cHg7b3ZlcmZsb3c6aGlkZGVuOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC41NSl9JywKICAgICcjYXZ6LXRvcHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTJweDtwYWRkaW5nOjE4cHggMjBweCAxNHB4fScsCiAgICAnI2F2ei10b3AgLnR7ZmxleDoxO21pbi13aWR0aDowfScsCiAgICAnI2F2ei10b3AgLmt7Zm9udC1zaXplOjEwcHg7bGV0dGVyLXNwYWNpbmc6LjI4ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO29wYWNpdHk6LjV9JywKICAgICcjYXZ6LXRvcCAucHtmb250LXNpemU6MTJweDtvcGFjaXR5Oi40MjttYXJnaW4tdG9wOjNweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9JywKICAgICcjYXZ6LXh7ZmxleDpub25lO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7JywKICAgICdiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA5KTtjb2xvcjojZmZmO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDozMHB4O3BhZGRpbmc6MH0nLAogICAgJyNhdnoteDpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjE4KX0nLAogICAgJyNhdnotc2Nyb2xse292ZXJmbG93OmF1dG87cGFkZGluZzowIDIwcHggMjBweDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0nLAogICAgJy5hdnotbGJse2ZvbnQtc2l6ZToxMHB4O2xldHRlci1zcGFjaW5nOi4yZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO29wYWNpdHk6LjMyO21hcmdpbjo2cHggMCAxMHB4fScsCiAgICAnLmF2ei1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoOTZweCwxZnIpKTtnYXA6OHB4fScsCiAgICAnLmF2ei10e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxLzE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzo4cHggNnB4O3RleHQtYWxpZ246Y2VudGVyOycsCiAgICAnYm9yZGVyLXJhZGl1czoxM3B4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7JywKICAgICdib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KTsnLAogICAgJ2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjU1KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzIGVhc2UsYmFja2dyb3VuZCAuMTZzIGVhc2UsY29sb3IgLjE2cyBlYXNlfScsCiAgICAnLmF2ei10OmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTEpO2NvbG9yOiNmZmY7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCl9JywKICAgICcuYXZ6LXQub257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWY7Ym9yZGVyLWNvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6NjAwfScsCiAgICAnLmF2ei10Lm9uOmhvdmVye2JhY2tncm91bmQ6I2YyZjJmNH0nLAogICAgJy5hdnotbm9uZXtwYWRkaW5nOjEwcHggMCA0cHg7b3BhY2l0eTouNTU7Zm9udC1zaXplOjEzcHh9JywKICAgICcuYXZ6LWhpbnR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMXB4O29wYWNpdHk6LjM1O2xpbmUtaGVpZ2h0OjEuNX0nLAogICAgLyog0LHQtdC3IGFzcGVjdC1yYXRpbyAo0YHRgtCw0YDRi9C1INCx0YDQsNGD0LfQtdGA0YspINC_0LvQuNGC0LrQsCDQvdC1INGB0YXQu9C-0L_QvdC10YLRgdGPICovCiAgICAnQHN1cHBvcnRzIG5vdCAoYXNwZWN0LXJhdGlvOjEvMSl7LmF2ei10e2hlaWdodDo5NnB4fX0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjQyMHB4KXsnLAogICAgJyNhdnotbWVudXtwYWRkaW5nOjA7YWxpZ24taXRlbXM6ZmxleC1lbmR9JywKICAgICcjYXZ6LWJveHt3aWR0aDoxMDAlO21heC1oZWlnaHQ6ODZ2aDtib3JkZXItcmFkaXVzOjE4cHggMThweCAwIDB9JywKICAgICcjYXZ6LXRvcHtwYWRkaW5nOjE2cHggMTZweCAxMHB4fScsCiAgICAnI2F2ei1zY3JvbGx7cGFkZGluZzowIDE2cHggMThweH0nLAogICAgJy5hdnotZ3JpZHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsMWZyKTtnYXA6N3B4fScsCiAgICAvKiDQvdCwINGD0LfQutC-0Lwg0Y3QutGA0LDQvdC1INC60LLQsNC00YDQsNGCINGB0LvQuNGI0LrQvtC8INCy0YvRgdC-0LrQuNC5OiDQvtC00LjQvdC90LDQtNGG0LDRgtGMINC_0LvQuNGC0L7QugogICAgICAg0YPRhdC-0LTQuNC70Lgg0LfQsCDQutGA0LDQuSDQuCDQv9C-0LTRgdC60LDQt9C60LAg0LLQvdC40LfRgyDQvdC1INC_0L7QvNC10YnQsNC70LDRgdGMICovCiAgICAnLmF2ei10e2FzcGVjdC1yYXRpbzphdXRvO2hlaWdodDo3MHB4O2ZvbnQtc2l6ZToxMS41cHg7Ym9yZGVyLXJhZGl1czoxMnB4fScsCiAgICAnfScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiB0aWxlKHRvb2wsIGFjdGl2ZSkgewogICAgdmFyIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIGIudHlwZSA9ICdidXR0b24nOwogICAgYi5jbGFzc05hbWUgPSAnYXZ6LXQnICsgKGFjdGl2ZSA_ICcgb24nIDogJycpOwogICAgYi50aXRsZSA9IGFjdGl2ZQogICAgICA_IHRvb2wudGl0bGUgKyAnIOKAlCAnICsgdG9vbC5oaW50CiAgICAgIDogdG9vbC50aXRsZSArICcg4oCUINC-0YLQutGA0YvRgtGMICcgKyB0b29sLnBhZ2VzWzBdOwoKICAgIGIudGV4dENvbnRlbnQgPSB0b29sLnNob3J0IHx8IHRvb2wudGl0bGU7CgogICAgaWYgKGFjdGl2ZSkgYi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBydW4odG9vbCk7IH07CiAgICBlbHNlIGIub25jbGljayA9IGZ1bmN0aW9uICgpIHsgbG9jYXRpb24uaHJlZiA9IHRvb2wucGFnZXNbMF07IH07CiAgICByZXR1cm4gYjsKICB9CgogIGZ1bmN0aW9uIG9wZW4oKSB7CiAgICBjbG9zZSgpOwoKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB3cmFwLmlkID0gJ2F2ei1tZW51JzsKCiAgICB2YXIgc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogICAgc3QudGV4dENvbnRlbnQgPSBDU1M7CiAgICB3cmFwLmFwcGVuZENoaWxkKHN0KTsKCiAgICB2YXIgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBib3guaWQgPSAnYXZ6LWJveCc7CgogICAgdmFyIHRvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgdG9wLmlkID0gJ2F2ei10b3AnOwogICAgdmFyIHR0bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgdHRsLmNsYXNzTmFtZSA9ICd0JzsKICAgIHR0bC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iayI-0JjQvdGB0YLRgNGD0LzQtdC90YLRiyBhdmFuemF0bzwvZGl2PicgKwogICAgICAnPGRpdiBjbGFzcz0icCI-PC9kaXY-JzsKICAgIHR0bC5xdWVyeVNlbGVjdG9yKCcucCcpLnRleHRDb250ZW50ID0gcGF0aDsKICAgIHZhciB4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICB4LnR5cGUgPSAnYnV0dG9uJzsKICAgIHguaWQgPSAnYXZ6LXgnOwogICAgeC50ZXh0Q29udGVudCA9ICfinJUnOwogICAgeC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAn0JfQsNC60YDRi9GC0YwnKTsKICAgIHgub25jbGljayA9IGNsb3NlOwogICAgdG9wLmFwcGVuZENoaWxkKHR0bCk7CiAgICB0b3AuYXBwZW5kQ2hpbGQoeCk7CiAgICBib3guYXBwZW5kQ2hpbGQodG9wKTsKCiAgICB2YXIgc2Nyb2xsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBzY3JvbGwuaWQgPSAnYXZ6LXNjcm9sbCc7CgogICAgdmFyIGhlcmUgPSBUT09MUy5maWx0ZXIoZml0cyk7CiAgICB2YXIgcmVzdCA9IFRPT0xTLmZpbHRlcihmdW5jdGlvbiAodCkgeyByZXR1cm4gIWZpdHModCk7IH0pOwoKICAgIGlmIChoZXJlLmxlbmd0aCkgewogICAgICB2YXIgbDEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgbDEuY2xhc3NOYW1lID0gJ2F2ei1sYmwnOwogICAgICBsMS50ZXh0Q29udGVudCA9ICfQlNC70Y8g0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbRiyc7CiAgICAgIHNjcm9sbC5hcHBlbmRDaGlsZChsMSk7CiAgICAgIHZhciBnMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBnMS5jbGFzc05hbWUgPSAnYXZ6LWdyaWQnOwogICAgICBoZXJlLmZvckVhY2goZnVuY3Rpb24gKHQpIHsgZzEuYXBwZW5kQ2hpbGQodGlsZSh0LCB0cnVlKSk7IH0pOwogICAgICBzY3JvbGwuYXBwZW5kQ2hpbGQoZzEpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIG5vbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgbm9uZS5jbGFzc05hbWUgPSAnYXZ6LW5vbmUnOwogICAgICBub25lLnRleHRDb250ZW50ID0gJ9CU0LvRjyDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtGLINC40L3RgdGC0YDRg9C80LXQvdGC0L7QsiDQv9C-0LrQsCDQvdC10YIuJzsKICAgICAgc2Nyb2xsLmFwcGVuZENoaWxkKG5vbmUpOwogICAgfQoKICAgIGlmIChyZXN0Lmxlbmd0aCkgewogICAgICB2YXIgbDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgbDIuY2xhc3NOYW1lID0gJ2F2ei1sYmwnOwogICAgICBsMi5zdHlsZS5tYXJnaW5Ub3AgPSAnMThweCc7CiAgICAgIGwyLnRleHRDb250ZW50ID0gJ9CU0YDRg9Cz0LjQtSDRgdGC0YDQsNC90LjRhtGLJzsKICAgICAgc2Nyb2xsLmFwcGVuZENoaWxkKGwyKTsKICAgICAgdmFyIGcyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGcyLmNsYXNzTmFtZSA9ICdhdnotZ3JpZCc7CiAgICAgIHJlc3QuZm9yRWFjaChmdW5jdGlvbiAodCkgeyBnMi5hcHBlbmRDaGlsZCh0aWxlKHQsIGZhbHNlKSk7IH0pOwogICAgICBzY3JvbGwuYXBwZW5kQ2hpbGQoZzIpOwogICAgfQoKICAgIHZhciBoaW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBoaW50LmNsYXNzTmFtZSA9ICdhdnotaGludCc7CiAgICBoaW50LnRleHRDb250ZW50ID0gJ9CR0LXQu9GL0LUg0L_Qu9C40YLQutC4INGA0LDQsdC-0YLQsNGO0YIg0LfQtNC10YHRjC4g0KHQtdGA0LDRjyDigJQg0L_QtdGA0LXQudC00ZHRgiDQvdCwINGB0LLQvtGOINGB0YLRgNCw0L3QuNGG0YMuJzsKICAgIHNjcm9sbC5hcHBlbmRDaGlsZChoaW50KTsKCiAgICBib3guYXBwZW5kQ2hpbGQoc2Nyb2xsKTsKICAgIHdyYXAuYXBwZW5kQ2hpbGQoYm94KTsKICAgIHdyYXAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgeyBpZiAoZS50YXJnZXQgPT09IHdyYXApIGNsb3NlKCk7IH0pOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5KTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQod3JhcCk7CiAgfQoKICBvcGVuKCk7Cn0pKCk7CgAVZ-CODE-END























































































