@curless/hotel-storefront 0.27.16 → 0.27.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  // The hotel booking MCP App card - a single self-contained HTML (Vite +
3
3
  // vite-plugin-singlefile, with the MCP Apps SDK bundled), base64-embedded so it
4
4
  // is bundler-safe. Regenerate after changing the widget UI.
5
- export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgY209KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLHVtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxwdT17fSxsbT1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKGY9PlByb21pc2UucmVzb2x2ZShmKS50aGVuKGc9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmd9KSxnPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpnfSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9bD8ubm9uY2V8fGw/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9dW0oZCxvKSxkIGluIHB1KXJldHVybjtwdVtkXT0hMDtjb25zdCBmPWQuZW5kc1dpdGgoIi5jc3MiKSxnPWY/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgdz1pLmxlbmd0aC0xO3c+PTA7dy0tKXtjb25zdCBTPWlbd107aWYoUy5ocmVmPT09ZCYmKCFmfHxTLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2d9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPWY/InN0eWxlc2hlZXQiOmNtLGZ8fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLHUmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxmKXJldHVybiBuZXcgUHJvbWlzZSgodyxTKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdyksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PlMobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBkbShlKXtyZXR1cm4gZX1mdW5jdGlvbiBwbShlKXtyZXR1cm4gZX1mdW5jdGlvbiBGbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIGhtKGUpe31mdW5jdGlvbiBmbShlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIG1tKGUpe31mdW5jdGlvbiBUcyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBJcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+VnMobikpLmpvaW4odCl9ZnVuY3Rpb24gUG8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIGdte2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gaG4oZSl7cmV0dXJuIG5ldyBnbShlKX1mdW5jdGlvbiBIcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBGZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gc2woZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgaHU9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gaWwoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1odSlyZXR1cm4gbz09PXZvaWQgMCYmKG89aHUsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGJtKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gY3QoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBWbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBOZShlKXtyZXR1cm4gVm8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gYWwoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBjdCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBjbChlLHQsbil7dCBpbiBlP2N0KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gb3QoZSx0LG4sbyl7Y29uc3Qgcj1OZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD9hbChlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTpjbChlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiB2bShlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/YWwoZSxuLCgpPT50W25dKTpjbChlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiB5bShlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gX20oZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24ga20oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIHdtKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gdWwoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIGxsKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgRnM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IGRsPWhuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gSmUoZSl7aWYodnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHZ0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gSm8oZSl7cmV0dXJuIEplKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gJG0oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgU209ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LENvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSkscGw9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBRKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiB6bShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBWcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBobChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IGZsPXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxtbD17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gZ2woZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gb3QocyxlLEtvKGUsdCkpLFEoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBLbyhlLHQpe2NvbnN0IG49TmUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBibChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoS28oZSx0KSksYT17fTtyZXR1cm4gb3QoYSxlLFJlZmxlY3Qub3duS2V5cyhOZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLFEoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiB2bChlLHQpe2lmKCFKZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1OZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gUShlLHVlKGUuX3pvZC5kZWYse3NoYXBlOnlsKGUsdCl9KSl9ZnVuY3Rpb24geWwoZSx0KXtjb25zdCBuPXt9O3JldHVybiBvdChuLGUsUmVmbGVjdC5vd25LZXlzKE5lKGUpKSksdm0obix0KSxufWZ1bmN0aW9uIF9sKGUsdCl7aWYoIUplKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBRKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6eWwoZSx0KX0pKX1mdW5jdGlvbiBrbChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtvdChuLGUsUmVmbGVjdC5vd25LZXlzKE5lKGUpKSksb3Qobix0LFJlZmxlY3Qub3duS2V5cyhOZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBRKGUsbyl9ZnVuY3Rpb24geHMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KEtvKHQsbikpOnZvaWQgMCxsPXt9O3JldHVybiBvdChsLHQsUmVmbGVjdC5vd25LZXlzKE5lKHQpKSxlJiYoKHUsZCk9PmkmJiFpLmhhcyhkKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpsLGNoZWNrczpbXX0pKX1mdW5jdGlvbiB3bChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoS28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIG90KHIsdCxSZWZsZWN0Lm93bktleXMoTmUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGZlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gJGwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB3ZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIHB0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIFBzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiB6ZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOnB0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9wdChzPy4oZSkpPz9wdCh0Py5lcnJvcj8uKGUpKT8/cHQobi5jdXN0b21FcnJvcj8uKGUpKT8/cHQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LmtleXMoZSkpbD09PSJpbnN0Inx8bD09PSJzY2hlbWEifHxsPT09ImNvbnRpbnVlInx8bD09PSJpbnB1dCJ8fGw9PT0iX19wcm90b19fInx8KGlbbF09ZVtsXSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gV28oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IFRtPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIEdvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIVRtLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIFNsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24geXQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBJbShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gemwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFRsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24geG0oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gemwodCtuKX1mdW5jdGlvbiBQbShlKXtyZXR1cm4gVGwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIENtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBFbShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBBbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIElsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6T20oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBqZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBZbyhlLHQsbil7cmV0dXJuIGplKGUsdCxuLCExKX1mdW5jdGlvbiBmbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gamUodGhpcyxuLG8odGhpcykpfSxzZXQocil7amUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIE9tKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpqZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe2plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBSbShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGJzLExlPSExO2NvbnN0IE5tPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7TGU9ITB9fTtmdW5jdGlvbiBSKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmYnMhPT1lLl96b2Qpe2JzPXZvaWQgMDtyZXR1cm59YnM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LE5tKTtjb25zdCByPUxlO0xlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIExlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksTGU9TGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxMZT1MZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24geGwoZSx0LG4sbyl7Y29uc3Qgcj1SbShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IFBsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gSnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtQbF09ITAsdH1jb25zdCBLcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6bWwsQ09OU1RBTlRfQ0FUQ0g6UGwsQ2xhc3M6QW0sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6ZmwsYWJvcnRlZDpmZSxhbGxvd3NFdmFsOmRsLGFzc2VydDptbSxhc3NlcnRFcXVhbDpkbSxhc3NlcnRJczpobSxhc3NlcnROZXZlcjpmbSxhc3NlcnROb3RFcXVhbDpwbSxhc3NpZ25Qcm9wOmN0LGF0dGFjaFNjaGVtYTpQcyxiYXNlNjRUb1VpbnQ4QXJyYXk6emwsYmFzZTY0dXJsVG9VaW50OEFycmF5OnhtLGNhY2hlZDpobixjYXB0dXJlU3RhY2tUcmFjZTpGcyxjbGVhbkVudW06SW0sY2xlYW5SZWdleDpGZSxjbG9uZTpRLGNsb25lRGVmOnltLGNvZGVQb2ludExlbmd0aDpHbyxjb25zdGFudENhdGNoOkpzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6em0sZGVmaW5lTGF6eTppbCxkZWZpbmVMYXp5SW50ZXJuYWw6UixkZXJpdmVkOmZuLGVzYzp1bCxlc2NhcGVSZWdleDpaZSxleHBsaWNpdGx5QWJvcnRlZDokbCxleHRlbmQ6dmwsZmluYWxpemVJc3N1ZTp6ZSxmbG9hdFNhZmVSZW1haW5kZXI6c2wsZ2V0RWxlbWVudEF0UGF0aDpfbSxnZXRFbnVtVmFsdWVzOlRzLGdldExlbmd0aGFibGVPcmlnaW46UW8sZ2V0UGFyc2VkVHlwZTpTbSxnZXRTaXphYmxlT3JpZ2luOldvLGhleFRvVWludDhBcnJheTpDbSxoaWRlOllvLGluc3RhbGxMYXp5UHJvcDp4bCxpc09iamVjdDp2dCxpc1BsYWluT2JqZWN0OkplLGlzc3VlOnl0LGpvaW5WYWx1ZXM6SXMsanNvblN0cmluZ2lmeVJlcGxhY2VyOlBvLG1lbWJlcnM6SWwsbWVyZ2U6a2wsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6SHMsbnVtS2V5czokbSxvYmplY3RDbG9uZTpibSxvbWl0OmJsLG9wdGlvbmFsS2V5czpobCxvd246amUscGFyc2VkVHlwZTpTbCxwYXJ0aWFsOnhzLHBpY2s6Z2wscHJlZml4SXNzdWVzOndlLHByaW1pdGl2ZVR5cGVzOnBsLHByb21pc2VBbGxPYmplY3Q6a20scHJvcGVydHlLZXlUeXBlczpDbyxyYW5kb21TdHJpbmc6d20scmF3U2hhcGU6Vm8scmVxdWlyZWQ6d2wsc2FmZUV4dGVuZDpfbCxzaGFsbG93Q2xvbmU6Sm8sc2x1Z2lmeTpsbCxzdHJpbmdpZnlQcmltaXRpdmU6VnMsdG9ab2Q6Rm8sdWludDhBcnJheVRvQmFzZTY0OlRsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpQbSx1aW50OEFycmF5VG9IZXg6RW0sdW53cmFwTWVzc2FnZTpwdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgZnU7Y29uc3QgV3M9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLHZzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IG11PSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIFptKGUpe2NvbnN0IHQ9bXU7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBtdT1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGcpe3RoaXMuZGVmPWcsdGhpcy5jb25zdHI9Zix0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gbChnLHYpe2lmKGcuX3pvZCl7aWYoZy5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7dnMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShnLCJfem9kIix2cyl9ZmluYWxseXt2cy52YWx1ZT12b2lkIDB9fWlmKGcuX3pvZC50cmFpdHMuYWRkKGUpLHQoZyx2KSxpKXtjb25zdCB3PU9iamVjdC5nZXRQcm90b3R5cGVPZihnKSxTPWcuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBqPXc7Zm9yKDtqJiZqIT09Uzspaj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoaik7Y29uc3QgTj1qPz93O2kuaGFzKE4pfHwoaS5hZGQoTiksSWwoTixhKSl9Y29uc3QgXz1mLnByb3RvdHlwZTtmb3IoY29uc3QgdyBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHcpJiYodyBpbiBnfHwoZ1t3XT1fW3ddLmJpbmQoZykpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBmKGcpe2NvbnN0IHY9bz8uUGFyZW50P1ptKGQpOnRoaXM7bCh2LGcpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCBTIG9mIF8pUygpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgdz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gdyYmdyh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwiaW5pdCIse3ZhbHVlOmx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmc9Pm8/LlBhcmVudCYmZyBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmc/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIm5hbWUiLHt2YWx1ZTplfSksZn1jb25zdCBHcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFZlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFhvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShmdT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhmdS5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIG9lKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIGptKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZixQbywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIE1tKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgcW09e2dldDpqbSxzZXQ6TW0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHlzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sZ3U9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksQ2w9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIseXMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIix5cykseXMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixxbSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7Z3UuaGFzKG4pfHwoZ3UuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LEVsPXAoIiRab2RFcnJvciIsQ2wpLHllPXAoIiRab2RFcnJvciIsQ2wsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiBEbShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIGVyKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/RG0obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIHRyKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IGw9bix1PTA7Zm9yKDt1PGkubGVuZ3RoOyl7Y29uc3QgZD1pW3VdLGY9dT09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7ZiYmbC5fZXJyb3JzLnB1c2godChhKSksdSsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBnPWxbZF07ZiYmZy5fZXJyb3JzLnB1c2godChhKSksbD1nLHUrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBRcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAobD0+byh7aXNzdWVzOmx9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCBsPVsuLi5zLC4uLmkucGF0aF07aWYobC5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCB1PW4sZD0wO2Zvcig7ZDxsLmxlbmd0aDspe2NvbnN0IGY9bFtkXSxnPWQ9PT1sLmxlbmd0aC0xO3R5cGVvZiBmPT0ic3RyaW5nIj8odS5wcm9wZXJ0aWVzPz8odS5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodS5wcm9wZXJ0aWVzLGYpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodS5wcm9wZXJ0aWVzLGYse3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdT11LnByb3BlcnRpZXNbZl0pOih1Lml0ZW1zPz8odS5pdGVtcz1bXSksKGE9dS5pdGVtcylbZl0/PyhhW2ZdPXtlcnJvcnM6W119KSx1PXUuaXRlbXNbZl0pLGcmJnUuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gQWwoZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIFlzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke0FsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIG5yKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgbW49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBWZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IGw9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKHU9PnplKHUsYSxvZSgpKSkpO3Rocm93IEZzKGwscz8uY2FsbGVlPz90KSxsfXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0sQ3M9bW4oeWUpLGduPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBsPW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcCh1PT56ZSh1LGEsb2UoKSkpKTt0aHJvdyBGcyhsLHM/LmNhbGxlZT8/dCksbH1yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LEVzPWduKHllKSxibj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBWZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP1JsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sT2w9Ym4oeWUpO2Z1bmN0aW9uIFJsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+emUocixuLG9lKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCB2bj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP1JsKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sTG09dm4oeWUpLEJtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSxVbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLG9yPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09Qm0pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBIbShlLHQsbil9KTtmdW5jdGlvbiBIbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1tVbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBWZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBycj1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LFhzPWU9Pntjb25zdCB0PW1uKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLG5yKG4sYSkpfTtyZXR1cm4gbn0sRm09WHMoeWUpLGVpPWU9Pntjb25zdCB0PW1uKGUpLG49KG8scixzLGEpPT50KG8scixzLG5yKG4sYSkpO3JldHVybiBufSxWbT1laSh5ZSksdGk9ZT0+e2NvbnN0IHQ9Z24oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxucihuLGEpKX07cmV0dXJuIG59LEptPXRpKHllKSxuaT1lPT57Y29uc3QgdD1nbihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLG5yKG4sYSkpO3JldHVybiBufSxLbT1uaSh5ZSksb2k9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYm4oZSkodCxuLHIpfSxXbT1vaSh5ZSkscmk9ZT0+KHQsbixvKT0+Ym4oZSkodCxuLG8pLEdtPXJpKHllKSxzaT1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHZuKGUpKHQsbixyKX0sUW09c2koeWUpLGlpPWU9PmFzeW5jKHQsbixvKT0+dm4oZSkodCxuLG8pLFltPWlpKHllKSxObD0vXltjQ11bMC05YS16XXs2LH0kLyxabD0vXlswLTlhLXpdKyQvLGpsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLE1sPS9eWzAtOWEtdkEtVl17MjB9JC8scWw9L15bQS1aYS16MC05XXsyN30kLyxEbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gTGwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IEJsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLFhtPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sVWw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLF90PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyxlZz1fdCg0KSx0Zz1fdCg2KSxuZz1fdCg3KSxIbD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxvZz0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxyZz0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxGbD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxzZz1GbCxpZz0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxhZz0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIFZsKCl7cmV0dXJuIG5ldyBSZWdFeHAoYWcsInUiKX1jb25zdCBKbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sS2w9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxXbD1lPT57Y29uc3QgdD1aZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxHbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sUWw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sY2c9L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sdWc9L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLFlsPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyxYbD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sYWk9L15odHRwcz8kLyxlZD0vXlwrWzEtOV1cZHs2LDE0fSQvLGNpPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyx0ZD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyx1aT0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxuZD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gbGcoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IG9kPWxnKG5kKTtmdW5jdGlvbiBBcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIHJkKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtBcyhlKX0kYCl9ZnVuY3Rpb24gc2QoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke0FzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7QXMoe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7bmR9VCg/OiR7b30pJGApfWNvbnN0IGlkPS9eW1xzXFNdezAsfSQvLGFkPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LGNkPS9eLT9cZCtuPyQvLHVkPS9eLT9cZCskLyxzcj0vXi0/XGQrKD86XC5cZCspPyQvLGxkPS9eKD86dHJ1ZXxmYWxzZSkkL2ksZGQ9L15udWxsJC9pLHBkPS9edW5kZWZpbmVkJC9pLGhkPS9eW15BLVpdKiQvLGZkPS9eW15hLXpdKiQvLG1kPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24geW4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIF9uKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBkZz0vXlswLTlhLWZBLUZdezMyfSQvLHBnPXluKDIyLCI9PSIpLGhnPV9uKDIyKSxmZz0vXlswLTlhLWZBLUZdezQwfSQvLG1nPXluKDI3LCI9IiksZ2c9X24oMjcpLGJnPS9eWzAtOWEtZkEtRl17NjR9JC8sdmc9eW4oNDMsIj0iKSx5Zz1fbig0MyksX2c9L15bMC05YS1mQS1GXXs5Nn0kLyxrZz15big2NCwiIiksd2c9X24oNjQpLCRnPS9eWzAtOWEtZkEtRl17MTI4fSQvLFNnPXluKDg2LCI9PSIpLHpnPV9uKDg2KSxpcj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOmlkLGJhc2U2NDpjZyxiYXNlNjR1cmw6dWcsYmlnaW50OmNkLGJvb2xlYW46bGQsYnJvd3NlckVtYWlsOmlnLGNpZHJ2NDpHbCxjaWRydjY6UWwsY3JlZGl0Q2FyZDpjaSxjdWlkOk5sLGN1aWQyOlpsLGN1cnJlbmN5Q29kZTp0ZCxkYXRlOm9kLGRhdGV0aW1lOnNkLGRvbWFpbjpYbCxkdXJhdGlvbjpCbCxlMTY0OmVkLGVtYWlsOkhsLGVtb2ppOlZsLGV4dGVuZGVkRHVyYXRpb246WG0sZ3VpZDpVbCxoZXg6bWQsaG9zdG5hbWU6WWwsaHRtbDVFbWFpbDpvZyxodHRwUHJvdG9jb2w6YWksaWJhbjp1aSxpZG5FbWFpbDpzZyxpbnRlZ2VyOnVkLGlwdjQ6SmwsaXB2NjpLbCxrc3VpZDpxbCxsb3dlcmNhc2U6aGQsbWFjOldsLG1kNV9iYXNlNjQ6cGcsbWQ1X2Jhc2U2NHVybDpoZyxtZDVfaGV4OmRnLG5hbm9pZDpEbCxuYW5vaWRPZkxlbmd0aDpMbCxudWxsOmRkLG51bWJlcjpzcixyZmM1MzIyRW1haWw6cmcsc2hhMV9iYXNlNjQ6bWcsc2hhMV9iYXNlNjR1cmw6Z2csc2hhMV9oZXg6Zmcsc2hhMjU2X2Jhc2U2NDp2ZyxzaGEyNTZfYmFzZTY0dXJsOnlnLHNoYTI1Nl9oZXg6Ymcsc2hhMzg0X2Jhc2U2NDprZyxzaGEzODRfYmFzZTY0dXJsOndnLHNoYTM4NF9oZXg6X2csc2hhNTEyX2Jhc2U2NDpTZyxzaGE1MTJfYmFzZTY0dXJsOnpnLHNoYTUxMl9oZXg6JGcsc3RyaW5nOmFkLHRpbWU6cmQsdWxpZDpqbCx1bmRlZmluZWQ6cGQsdW5pY29kZUVtYWlsOkZsLHVwcGVyY2FzZTpmZCx1dWlkOl90LHV1aWQ0OmVnLHV1aWQ2OnRnLHV1aWQ3Om5nLHhpZDpNbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxLPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxsaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFIcyh0KSYmdC5zaXplIT09dm9pZCAwfSxkaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFIcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LEVvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LHBpPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e0suaW5pdChlLHQpO2NvbnN0IG49RW9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkVvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGhpPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e0suaW5pdChlLHQpO2NvbnN0IG49RW9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkVvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksZ2Q9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntLLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6c2wobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxiZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Sy5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPWZsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHZkPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntLLmluaXQoZSx0KTtjb25zdFtuLG9dPW1sW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSkseWQ9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtLLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWxpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOldvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLF9kPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Sy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1saSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpXbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGtkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Sy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1saSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46V28ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx3ZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Sy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1kaSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9HbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPVFvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLCRkPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtLLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWRpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9HbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPVFvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksU2Q9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO0suaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49ZGkpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP0dvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPVFvKHIpLGw9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi5sP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxrbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztLLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSx6ZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pntrbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxUZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWhkKSxrbi5pbml0KGUsdCl9KSxJZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWZkKSxrbi5pbml0KGUsdCl9KSx4ZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntLLmluaXQoZSx0KTtjb25zdCBuPVplKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxQZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e0suaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7WmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxDZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntLLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtaZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBBbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLndlKG4sZS5pc3N1ZXMpKX1jb25zdCBFZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntLLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5BbyhyLG4sdC5wcm9wZXJ0eSkpO0FvKG8sbix0LnByb3BlcnR5KX19KSxBZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e0suaW5pdChlLHQpLFlvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IGw9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTtsIGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaChsLnRoZW4odT0+QW8odSxvLGEpKSkpOkFvKGwsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksT2Q9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Sy5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxSZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Sy5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgTmR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCBaZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LFA9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPVpkO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLGwsdSk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9ZmUoaSksZjtmb3IoY29uc3QgZyBvZiBsKXtpZihnLl96b2QuZGVmLndoZW4pe2lmKCRsKGkpfHwhZy5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWcuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmdT8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgVmU7aWYoZnx8XyBpbnN0YW5jZW9mIFByb21pc2UpZj0oZj8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKFBzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO1BzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSl9fXJldHVybiBmP2YudGhlbigoKT0+aSk6aX0sYT0oaSxsLHUpPT57aWYoZmUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyhsLHIsdSk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKHUuYXN5bmM9PT0hMSl0aHJvdyBuZXcgVmU7cmV0dXJuIGQudGhlbihmPT5lLl96b2QucGFyc2UoZix1KSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLHUpfTtlLl96b2QucnVuPShpLGwpPT57aWYobC5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSxsKTtpZihsLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLmwsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4oZj0+YShmLGksbCkpOmEoZCxpLGwpfWNvbnN0IHU9ZS5fem9kLnBhcnNlKGksbCk7aWYodSBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgVmU7cmV0dXJuIHUudGhlbihkPT5zKGQscixsKSl9cmV0dXJuIHModSxyLGwpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBZbyh0aGlzLCJ+c3RhbmRhcmQiLGZpKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7amUodGhpcywifnN0YW5kYXJkIixlKX19KSxqZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PnplKG4sdCxvZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBUZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gamQoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIGZpKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gamQobyxuKX1jYXRjaHt9cmV0dXJuIFRnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IHduPXAoIiRab2RTdHJpbmciLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9pZCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLFY9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pntrbi5pbml0KGUsdCksd24uaW5pdChlLHQpfSksTWQ9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVVsKSxWLmluaXQoZSx0KX0pLHFkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49X3QobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPV90KCkpO1YuaW5pdChlLHQpfSksRGQ9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1IbCksVi5pbml0KGUsdCl9KSxtaT0xLG5uPTI7ZnVuY3Rpb24gZ2koZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBMZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP2dpKGUpfHxubjpCZChlLHQpfWZ1bmN0aW9uIEJkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1haS5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gbWk7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/bm59cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIG5ufX1jb25zdCBJZz0vW1x0XG5ccl0vZztmdW5jdGlvbiBPcyhlKXtyZXR1cm4gZS5yZXBsYWNlKElnLCIiKX1mdW5jdGlvbiBVZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBIZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBGZD1wKCIkWm9kVVJMIiwoZSx0KT0+e1YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1MZChvLHQpO2lmKHI9PT1taSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1ubil7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9T3Mobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFVZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhSGQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6T3Mobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksVmQ9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1WbCgpKSxWLmluaXQoZSx0KX0pLEpkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9EbDpMbCh0Lmxlbmd0aCkpLFYuaW5pdChlLHQpfSksS2Q9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU5sKSxWLmluaXQoZSx0KX0pLFdkPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49WmwpLFYuaW5pdChlLHQpfSksR2Q9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWpsKSxWLmluaXQoZSx0KX0pLFFkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU1sKSxWLmluaXQoZSx0KX0pLFlkPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cWwpLFYuaW5pdChlLHQpfSksWGQ9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1zZCh0KSksVi5pbml0KGUsdCl9KSxlcD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49b2QpLFYuaW5pdChlLHQpfSksdHA9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXJkKHQpKSxWLmluaXQoZSx0KX0pLG5wPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QmwpLFYuaW5pdChlLHQpfSksb3A9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUpsKSxWLmluaXQoZSx0KX0pLHhnPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBiaShlKXtyZXR1cm4geGcudGVzdChlKT9naShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IHJwPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1LbCksVi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntiaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxzcD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1XbCh0LmRlbGltaXRlcikpLFYuaW5pdChlLHQpfSksaXA9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49R2wpLFYuaW5pdChlLHQpfSk7ZnVuY3Rpb24gYXAoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOmJpKG4pfWNvbnN0IGNwPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVFsKSxWLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2FwKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gdmkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCB1cD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sbHA9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dXApLFYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dmkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5aT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gZHAoZSl7aWYoIXlpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gdmkobil9Y29uc3QgcHA9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eWkpLFYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57ZHAobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxocD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZWQpLFYuaW5pdChlLHQpfSksUGc9L1stIF0vZztmdW5jdGlvbiBDZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBmcChlKXtyZXR1cm4gY2kudGVzdChlKT9DZyhlLnJlcGxhY2UoUGcsIiIpKTohMX1jb25zdCBtcD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Y2kpLFYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57ZnAobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIEVnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGdwKGUpe3JldHVybiB1aS50ZXN0KGUpP0VnKGUpOiExfWNvbnN0IGJwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj11aSksVi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntncChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiB2cChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IHlwPXAoIiRab2RKV1QiLChlLHQpPT57Vi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt2cChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLF9wPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57Vi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksX2k9cCgiJFpvZE51bWJlciIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1zcixlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxrcD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e2JkLmluaXQoZSx0KSxfaS5pbml0KGUsdCl9KSxraT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1sZCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHdpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49Y2QsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSx3cD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e3ZkLmluaXQoZSx0KSx3aS5pbml0KGUsdCl9KSwkcD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxTcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXBkLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHpwPXAoIiRab2ROdWxsIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPWRkLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxUcD1wKCIkWm9kQW55IiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksSXA9cCgiJFpvZFVua25vd24iLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSx4cD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxQcD1wKCIkWm9kVm9pZCIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLENwPXAoIiRab2REYXRlIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gYnUoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi53ZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IEVwPXAoIiRab2RBcnJheSIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe2NvbnN0IHU9c1tsXSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4oZj0+YnUoZixvLGwpKSk7ZWxzZSBpZihidShkLG8sbCksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmZmUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gT28oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLndlKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgQWc9W107ZnVuY3Rpb24gQXAoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOkFnLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1obChlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIE9wKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sbD1yLmtleVNldCx1PXIuY2F0Y2hhbGwuX3pvZCxkPXUuZGVmLnR5cGUsZj11Lm9wdGluLGc9dS5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihmZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKGwuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0IHc9dS5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTt3IGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2gody50aGVuKFM9Pk9vKFMsbixfLHQsZixnKSkpOk9vKHcsbixfLHQsZixnKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IFJwPXAoIiRab2RPYmplY3QiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IHU9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLHUucmF3PWQsZH07dS5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6dX0pfWNvbnN0IHI9aG4oKCk9PkFwKHQpKTtSKGUsInByb3BWYWx1ZXMiLHU9Pntjb25zdCBkPXUuZGVmLnNoYXBlLGY9e307Zm9yKGNvbnN0IGcgaW4gZCl7Y29uc3Qgdj1kW2ddLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLGcpfHxjdChmLGcsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpZltnXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmZltnXS5hZGQodm9pZCAwKX19cmV0dXJuIGZ9KTtjb25zdCBzPXZ0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCBsPWRlLm1lbW9pemVyO2w/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHUsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBmPXUudmFsdWU7aWYoIXMoZikpcmV0dXJuIHUuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ZixpbnN0OmV9KSx1O3UudmFsdWU9bD9sLmFsbG9jKGUsdSx7fSxkKTp7fTtjb25zdCBnPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0IHc9dS5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCBTIG9mIGkuYWxsS2V5cyl7aWYoXyYmdS5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoZmUodSx3KSlicmVhazt3PXUuaXNzdWVzLmxlbmd0aH1pZihTPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgaj12W1NdLE49ai5fem9kLm9wdGluLEk9ai5fem9kLm9wdG91dCxyZT1qLl96b2QucnVuKHt2YWx1ZTpmW1NdLGlzc3VlczpbXX0sZCk7cmUgaW5zdGFuY2VvZiBQcm9taXNlP2cucHVzaChyZS50aGVuKFc9Pk9vKFcsdSxTLGYsTixJKSkpOk9vKHJlLHUsUyxmLE4sSSl9cmV0dXJuIGE/T3AoZyxmLHUsZCxyLnZhbHVlLGUsXz09PSEwKTpnLmxlbmd0aD9Qcm9taXNlLmFsbChnKS50aGVuKCgpPT51KTp1fX0pLE5wPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57UnAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89aG4oKCk9PkFwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSx3PV8uc3ltYm9sS2V5cyxTPW5ldyBOZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6d30pLGo9Vz0+YHNoYXBlWyR7V31dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7V31dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLE49KFcsSCk9PmAKICAgICAgICAgIGxldCAke1d9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7V30uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7V30uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7SH0sIC4uLmlzcy5wYXRoXSA6IFske0h9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke1d9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke1d9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gO1Mud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBJPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHJlPTA7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKUlbV109YGtleV8ke3JlKyt9YDtTLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKXtpZihXPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgSD1JW1ddLGdlPXR5cGVvZiBXPT0ic3ltYm9sIj9gc3ltc1ske3cuaW5kZXhPZihXKX1dYDp1bChXKSxkdD1gJHtnZX0gaW4gaW5wdXRgLGs9dltXXSwkPWs/Ll96b2Q/Lm9wdGluLEc9JCE9PXZvaWQgMCx0ZT1rPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKFMud3JpdGUoYGNvbnN0ICR7SH0gPSAke2ooZ2UpfTtgKSxHJiZ0ZSl7Y29uc3QgT2U9JD09PSJvcHRpb25hbCI/YCR7SH1fcHJlc2VudGA6YCR7SH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0h9X3ByZXNlbnRgO1Mud3JpdGUoYAogICAgICAgIGNvbnN0ICR7SH1fcHJlc2VudCA9ICR7ZHR9OwogICAgICAgIGlmICghJHtIfS5pc3N1ZXMubGVuZ3RoIHx8ICR7SH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7TihILGdlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtPZX0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBHPyhTLndyaXRlKGAKICAgICAgICBpZiAoJHtIfS5pc3N1ZXMubGVuZ3RoKSB7JHtOKEgsZ2UpfQogICAgICAgIH0KICAgICAgYCksJD09PSJkZWZhdWx0ZWQiP1Mud3JpdGUoYG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlO2ApOlMud3JpdGUoYAogICAgICAgIGlmICgke0h9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtkdH0pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOlMud3JpdGUoYAogICAgICAgIGNvbnN0ICR7SH1fcHJlc2VudCA9ICR7ZHR9OwogICAgICAgIGlmICgke0h9Lmlzc3Vlcy5sZW5ndGgpIHske04oSCxnZSl9CiAgICAgICAgfQogICAgICAgIGlmICghJHtIfV9wcmVzZW50ICYmICEke0h9Lmlzc3Vlcy5sZW5ndGgpIHsKICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goewogICAgICAgICAgICBjb2RlOiAiaW52YWxpZF90eXBlIiwKICAgICAgICAgICAgZXhwZWN0ZWQ6ICJub25vcHRpb25hbCIsCiAgICAgICAgICAgIGlucHV0OiB1bmRlZmluZWQsCiAgICAgICAgICAgIHBhdGg6IFske2dlfV0KICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgke0h9X3ByZXNlbnQpIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlOwogICAgICAgIH0KCiAgICAgIGApfXJldHVybiBTLndyaXRlKCJwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OyIpLFMud3JpdGUoInJldHVybiBwYXlsb2FkOyIpLFMuY29tcGlsZSgpfTtsZXQgYTtjb25zdCBpPXZ0LGw9IWRlLmppdGxlc3MsZD1sJiZkbC52YWx1ZSxmPXQuY2F0Y2hhbGw7bGV0IGc7ZS5fem9kLnBhcnNlPSh2LF8pPT57Zz8/KGc9by52YWx1ZSk7Y29uc3Qgdz12LnZhbHVlO3JldHVybiBpKHcpP2wmJmQmJl8/LmFzeW5jPT09ITEmJl8uaml0bGVzcyE9PSEwPyhhfHwoYT1zKHQuc2hhcGUpKSx2PWEodixfKSxmP09wKFtdLHcsdixfLGcsZSxfPy5hYm9ydEVhcmx5PT09ITApOnYpOm4odixfKToodi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDp3LGluc3Q6ZX0pLHYpfX0pO2Z1bmN0aW9uIHZ1KGUsdCxuLG8pe2Zvcihjb25zdCBzIG9mIGUpaWYocy5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdC52YWx1ZT1zLnZhbHVlLHQ7Y29uc3Qgcj1lLmZpbHRlcihzPT4hZmUocykpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9clswXS52YWx1ZSxyWzBdKToodC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChhPT56ZShhLG8sb2UoKSkpKX0pLHQpfWNvbnN0IGFyPXAoIiRab2RVbmlvbiIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsIm9wdGluIixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluPT09ImRlZmF1bHRlZCIpPyJkZWZhdWx0ZWQiOm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW4hPT12b2lkIDApPyJvcHRpb25hbCI6dm9pZCAwKSxSKGUsIm9wdG91dCIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKT8ib3B0aW9uYWwiOnZvaWQgMCksUihlLCJ2YWx1ZXMiLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC52YWx1ZXMpKXJldHVybiBuZXcgU2V0KG8uZGVmLm9wdGlvbnMuZmxhdE1hcChyPT5BcnJheS5mcm9tKHIuX3pvZC52YWx1ZXMpKSl9KSxSKGUsInBhdHRlcm4iLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC5wYXR0ZXJuKSl7Y29uc3Qgcj1vLmRlZi5vcHRpb25zLm1hcChzPT5zLl96b2QucGF0dGVybik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtyLm1hcChzPT5GZShzLnNvdXJjZSkpLmpvaW4oInwiKX0pJGApfX0pO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgdC5vcHRpb25zKXtjb25zdCBsPWkuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSlhLnB1c2gobCkscz0hMDtlbHNle2lmKGwuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIGw7YS5wdXNoKGwpfX1yZXR1cm4gcz9Qcm9taXNlLmFsbChhKS50aGVuKGk9PnZ1KGksbyxlLHIpKTp2dShhLG8sZSxyKX19KTtmdW5jdGlvbiB5dShlLHQsbixvKXtjb25zdCByPVtdO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWVbc10uaXNzdWVzLmxlbmd0aD09PTAmJnIucHVzaChzKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPWVbclswXV0udmFsdWUsdCk6KHIubGVuZ3RoPT09MD90Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGE9PnplKGEsbyxvZSgpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBacD1wKCIkWm9kWG9yIiwoZSx0KT0+e2FyLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBhPVtdO2Zvcihjb25zdCBpIG9mIHQub3B0aW9ucyl7Y29uc3QgbD1pLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7bCBpbnN0YW5jZW9mIFByb21pc2U/KGEucHVzaChsKSxzPSEwKTphLnB1c2gobCl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoYSkudGhlbihpPT55dShpLG8sZSxyKSk6eXUoYSxvLGUscil9fSk7ZnVuY3Rpb24gJGkoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPWpwKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIGpwKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgTXA9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxhci5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7UihlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgYT0wO2Zvcihjb25zdCBpIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGw9aS5fem9kLnByb3BWYWx1ZXM7aWYoIWx8fE9iamVjdC5rZXlzKGwpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihpKX0iYCk7bFtyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmErKztmb3IoY29uc3RbdSxkXW9mIE9iamVjdC5lbnRyaWVzKGwpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8Y3Qocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBmIG9mIGQpc1t1XS5hZGQoZil9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZhPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGE9Vm8oci5fem9kLmRlZik7aWYoYSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1obigoKT0+anAodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGE9ci52YWx1ZTtpZighdnQoYSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6YSxpbnN0OmV9KSxyO2NvbnN0IGk9YT8uW3QuZGlzY3JpbWluYXRvcl0sbD1vLnZhbHVlLmdldChpKTtyZXR1cm4gbCYmKGkhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/bC5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6YSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLHFwPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksYT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxhIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxhXSkudGhlbigoW2wsdV0pPT5fdShuLGwsdSkpOl91KG4scyxhKX19KTtmdW5jdGlvbiBSbyhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKEplKGUpJiZKZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgYT1SbyhlW3NdLHRbc10pO2lmKCFhLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5hLm1lcmdlRXJyb3JQYXRoXX07cltzXT1hLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10sYT1SbyhyLHMpO2lmKCFhLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5hLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGEuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBfdShlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxhPSh1LGQpPT57bGV0IGY7aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLGY9dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCBnPVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKGcpfHxzLnNldChnLHUpLGY9W2ddfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IGcgb2YgZilvLmhhcyhnKXx8by5zZXQoZyx7fSksby5nZXQoZylbZF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWEodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWEodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGk9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGkubGVuZ3RoKXtjb25zdCB1PXI/aS5maWx0ZXIoZD0+ci5rZXlzLmluY2x1ZGVzKGQpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgZCBvZiBpKSF1LmluY2x1ZGVzKGQpJiZzLmhhcyhkKSYmZS5pc3N1ZXMucHVzaChzLmdldChkKSl9Y29uc3QgbD1Sbyh0LnZhbHVlLG4udmFsdWUpO2lmKCFsLnZhbGlkKXtpZihmZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGwubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWwuZGF0YSxlfWNvbnN0IFNpPXAoIiRab2RUdXBsZSIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1kZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDphLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBpPVtdLGw9a3Uobiwib3B0aW4iKSx1PWt1KG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGEubGVuZ3RoPGwpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpsLGluY2x1c2l2ZTohMCxpbnB1dDphLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7YS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmEsaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgZD1uZXcgQXJyYXkobi5sZW5ndGgpLGY9dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCBnPSExO2ZvcihsZXQgdj0wO3Y8bi5sZW5ndGg7disrKXtjb25zdCBfPW5bdl0uX3pvZC5ydW4oe3ZhbHVlOmFbdl0saXNzdWVzOltdfSxzKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goXy50aGVuKHc9PntkW3ZdPXd9KSk6KGRbdl09XyxmJiYhZyYmXy5pc3N1ZXMubGVuZ3RoJiYoZz1mZShfKSkpfWlmKHQucmVzdCYmIWcpe2xldCB2PW4ubGVuZ3RoLTE7Y29uc3QgXz1hLnNsaWNlKG4ubGVuZ3RoKTtsZXQgdz1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IFMgb2YgXyl7aWYoZiYmci5pc3N1ZXMubGVuZ3RoIT09dyl7aWYoZmUocix3KSlicmVhazt3PXIuaXNzdWVzLmxlbmd0aH12Kys7Y29uc3Qgaj10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOlMsaXNzdWVzOltdfSxzKTtqIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goai50aGVuKE49Pnd1KE4scix2KSkpOnd1KGoscix2KX19cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9PiR1KGQscixuLGEsdSkpOiR1KGQscixuLGEsdSl9fSk7ZnVuY3Rpb24ga3UoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiB3dShlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLndlKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gJHUoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgYT1lW3NdLGk9czxvLmxlbmd0aDtpZighaSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihhLmlzc3Vlcy5sZW5ndGgpe2lmKCFpJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4ud2UocyxhLmlzc3VlcykpfXQudmFsdWVbc109YS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBEcD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49ZGUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighSmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGE9W10saT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoaSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGw9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBpKWlmKHR5cGVvZiBkPT0ic3RyaW5nInx8dHlwZW9mIGQ9PSJudW1iZXIifHx0eXBlb2YgZD09InN5bWJvbCIpe2lmKGwuYWRkKHR5cGVvZiBkPT0ibnVtYmVyIj9kLnRvU3RyaW5nKCk6ZCksZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGY9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpkLGlzc3VlczpbXX0scik7aWYoZiBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYoZi5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpmLmlzc3Vlcy5tYXAoXz0+emUoXyxyLG9lKCkpKSxpbnB1dDpkLHBhdGg6W2RdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGc9Zi52YWx1ZTtpZihnPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tkXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh2LnRoZW4oXz0+e18uaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi53ZShkLF8uaXNzdWVzKSksby52YWx1ZVtnXT1fLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ud2UoZCx2Lmlzc3VlcykpLG8udmFsdWVbZ109di52YWx1ZSl9bGV0IHU7Zm9yKGNvbnN0IGQgaW4gcylpZighbC5oYXMoZCkpaWYodC5tb2RlPT09Imxvb3NlIil7aWYoZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO28udmFsdWVbZF09c1tkXX1lbHNlIHU9dT8/W10sdS5wdXNoKGQpO3UmJnUubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOnUsY29udGludWU6ITB9KX1lbHNle28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtsZXQgbDtmb3IoY29uc3QgdSBvZiBSZWZsZWN0Lm93bktleXMocykpe2lmKHU9PT0iX19wcm90b19fInx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLHUpKWNvbnRpbnVlO2xldCBkPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKHR5cGVvZiB1PT0ic3RyaW5nIiYmc3IudGVzdCh1KSYmZC5pc3N1ZXMubGVuZ3RoKXtjb25zdCBfPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6TnVtYmVyKHUpLGlzc3VlczpbXX0scik7aWYoXyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7Xy5pc3N1ZXMubGVuZ3RoPT09MCYmKGQ9Xyl9aWYoZC5pc3N1ZXMubGVuZ3RoKXt0Lm1vZGU9PT0ibG9vc2UiP28udmFsdWVbdV09c1t1XTppPyhsPWw/P1tdLGwucHVzaCh1KSk6by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6ZC5pc3N1ZXMubWFwKF89PnplKF8scixvZSgpKSksaW5wdXQ6dSxwYXRoOlt1XSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPWQudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IHY9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbdV0saXNzdWVzOltdfSxyKTt2IGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2godi50aGVuKF89PntfLmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4ud2UodSxfLmlzc3VlcykpLG8udmFsdWVbZ109Xy52YWx1ZX0pKToodi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLndlKHUsdi5pc3N1ZXMpKSxvLnZhbHVlW2ddPXYudmFsdWUpfWwmJmwubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOmwsY29udGludWU6ITB9KX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KSxMcD1wKCIkWm9kTWFwIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49ZGUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBNYXApKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibWFwIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBhPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgTWFwLHIpOm5ldyBNYXA7Y29uc3QgaT1yPy5hYm9ydEVhcmx5O2xldCBsPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3RbdSxkXW9mIHMpe2lmKGkmJm8uaXNzdWVzLmxlbmd0aCE9PWwpe2lmKGZlKG8sbCkpYnJlYWs7bD1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgZj10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKSxnPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpkLGlzc3VlczpbXX0scik7ZiBpbnN0YW5jZW9mIFByb21pc2V8fGcgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChQcm9taXNlLmFsbChbZixnXSkudGhlbigoW3YsX10pPT57U3UodixfLG8sdSxzLGUscil9KSk6U3UoZixnLG8sdSxzLGUscil9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gU3UoZSx0LG4sbyxyLHMsYSl7ZS5pc3N1ZXMubGVuZ3RoJiYoQ28uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLndlKG8sZS5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJtYXAiLGlucHV0OnIsaW5zdDpzLGlzc3VlczplLmlzc3Vlcy5tYXAoaT0+emUoaSxhLG9lKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihDby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ud2Uobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoaT0+emUoaSxhLG9lKCkpKX0pKSxuLnZhbHVlLnNldChlLnZhbHVlLHQudmFsdWUpfWNvbnN0IEJwPXAoIiRab2RTZXQiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIFNldCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2lucHV0OnMsaW5zdDplLGV4cGVjdGVkOiJzZXQiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvO2NvbnN0IGE9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBTZXQscik6bmV3IFNldDtjb25zdCBpPXI/LmFib3J0RWFybHk7bGV0IGw9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCB1IG9mIHMpe2lmKGkmJm8uaXNzdWVzLmxlbmd0aCE9PWwpe2lmKGZlKG8sbCkpYnJlYWs7bD1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgZD10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2QgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChkLnRoZW4oZj0+enUoZixvKSkpOnp1KGQsbyl9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24genUoZSx0KXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZS5pc3N1ZXMpLHQudmFsdWUuYWRkKGUudmFsdWUpfWNvbnN0IFVwPXAoIiRab2RFbnVtIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49VHModC5lbnRyaWVzKSxvPW5ldyBTZXQobik7ZS5fem9kLnZhbHVlcz1vLFIoZSwicGF0dGVybiIscj0+e2NvbnN0IHM9VHMoci5kZWYuZW50cmllcykuZmlsdGVyKGE9PkNvLmhhcyh0eXBlb2YgYSkpO3JldHVybiBuZXcgUmVnRXhwKHMubGVuZ3RoP2BeKCR7cy5tYXAoYT0+WmUoYS50b1N0cmluZygpKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGE9ci52YWx1ZTtyZXR1cm4gby5oYXMoYSl8fHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczpuLGlucHV0OmEsaW5zdDplfSkscn19KSxIcD1wKCIkWm9kTGl0ZXJhbCIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC52YWx1ZXMpO2UuX3pvZC52YWx1ZXM9bixSKGUsInBhdHRlcm4iLG89Pntjb25zdCByPW8uZGVmLnZhbHVlcztyZXR1cm4gbmV3IFJlZ0V4cChyLmxlbmd0aD9gXigke3IubWFwKHM9PnR5cGVvZiBzPT0ic3RyaW5nIj9aZShzKTpzP1plKHMudG9TdHJpbmcoKSk6U3RyaW5nKHMpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO3JldHVybiBuLmhhcyhzKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQudmFsdWVzLGlucHV0OnMsaW5zdDplfSksb319KSxGcD1wKCIkWm9kRmlsZSIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHIgaW5zdGFuY2VvZiBGaWxlfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZmlsZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksVnA9cCgiJFpvZFRyYW5zZm9ybSIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2Qub3B0aW49Im9wdGlvbmFsIixkZS5tZW1vaXplcj8uZ3VhcmQoZSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBYbyhlLmNvbnN0cnVjdG9yLm5hbWUpO2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtpZihvLmFzeW5jKXJldHVybihyIGluc3RhbmNlb2YgUHJvbWlzZT9yOlByb21pc2UucmVzb2x2ZShyKSkudGhlbihhPT4obi52YWx1ZT1hLG4pKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgVmU7cmV0dXJuIG4udmFsdWU9cixufX0pO2Z1bmN0aW9uIFR1KGUsdCl7cmV0dXJuIGUudmFsdWU9dC5pc3N1ZXMubGVuZ3RoP3ZvaWQgMDp0LnZhbHVlLGV9Y29uc3Qgemk9cCgiJFpvZE9wdGlvbmFsIiwoZSx0KT0+e1AuaW5pdChlLHQpLFIoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksZS5fem9kLm9wdG91dD0ib3B0aW9uYWwiLFIoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ubyx2b2lkIDBdKTp2b2lkIDB9KSxSKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke0ZlKG8uc291cmNlKX0pPyRgKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihuLnZhbHVlPT09dm9pZCAwKXtpZih0LmlubmVyVHlwZS5fem9kLm9wdGluIT09ImRlZmF1bHRlZCIpcmV0dXJuIG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+VHUobixzKSk6VHUobixyKX1yZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX19KSxKcD1wKCIkWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9Pnt6aS5pbml0KGUsdCksUihlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksUihlLCJwYXR0ZXJuIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuKSxlLl96b2QucGFyc2U9KG4sbyk9PnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxLcD1wKCIkWm9kTnVsbGFibGUiLChlLHQpPT57UC5pbml0KGUsdCksUihlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4pLFIoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLFIoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7RmUoby5zb3VyY2UpfXxudWxsKSRgKTp2b2lkIDB9KSxSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzP25ldyBTZXQoWy4uLm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyxudWxsXSk6dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9Pm4udmFsdWU9PT1udWxsP246dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLFdwPXAoIiRab2REZWZhdWx0IiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7aWYobi52YWx1ZT09PXZvaWQgMClyZXR1cm4gbi52YWx1ZT10LmRlZmF1bHRWYWx1ZSxuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pkl1KHMsdCkpOkl1KHIsdCl9fSk7ZnVuY3Rpb24gSXUoZSx0KXtyZXR1cm4gZS52YWx1ZT09PXZvaWQgMCYmKGUudmFsdWU9dC5kZWZhdWx0VmFsdWUpLGV9Y29uc3QgR3A9cCgiJFpvZFByZWZhdWx0IiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCJ8fG4udmFsdWU9PT12b2lkIDAmJihuLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSx0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pKX0pLFFwPXAoIiRab2ROb25PcHRpb25hbCIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm9dLmZpbHRlcihyPT5yIT09dm9pZCAwKSk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+eHUocyxlKSk6eHUocixlKX19KTtmdW5jdGlvbiB4dShlLHQpe3JldHVybiFlLmlzc3Vlcy5sZW5ndGgmJmUudmFsdWU9PT12b2lkIDAmJmUuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im5vbm9wdGlvbmFsIixpbnB1dDplLnZhbHVlLGluc3Q6dH0pLGV9Y29uc3QgWXA9cCgiJFpvZFN1Y2Nlc3MiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBYbygiWm9kU3VjY2VzcyIpO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMuaXNzdWVzLmxlbmd0aD09PTAsbikpOihuLnZhbHVlPXIuaXNzdWVzLmxlbmd0aD09PTAsbil9fSk7ZnVuY3Rpb24gUHUoZSx0LG4sbyl7cmV0dXJuIHQuaXNzdWVzLmxlbmd0aD8oZS52YWx1ZT1uLmNhdGNoVmFsdWUoey4uLnQsdmFsdWU6ZS52YWx1ZSxlcnJvcjp7aXNzdWVzOnQuaXNzdWVzLm1hcChyPT56ZShyLG8sb2UoKSkpfSxpbnB1dDplLnZhbHVlfSksZSk6KGUudmFsdWU9dC52YWx1ZSx0Lm1lbW8mJihlLm1lbW89ITApLGUpfWNvbnN0IFhwPXAoIiRab2RDYXRjaCIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLFIoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLFIoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5QdShuLHMsdCxvKSk6UHUobixyLHQsbyl9fSksZWg9cCgiJFpvZE5hTiIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PigodHlwZW9mIG4udmFsdWUhPSJudW1iZXIifHwhTnVtYmVyLmlzTmFOKG4udmFsdWUpKSYmbi5pc3N1ZXMucHVzaCh7aW5wdXQ6bi52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6Im5hbiIsY29kZToiaW52YWxpZF90eXBlIn0pLG4pfSksVGk9cCgiJFpvZFBpcGUiLChlLHQpPT57UC5pbml0KGUsdCksUihlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxSKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxSKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxSKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT52byhhLHQuaW4sbykpOnZvKHMsdC5pbixvKX1jb25zdCByPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnZvKHMsdC5vdXQsbykpOnZvKHIsdC5vdXQsbyl9fSk7ZnVuY3Rpb24gdm8oZSx0LG4pe3JldHVybiBlLmlzc3Vlcy5zb21lKG89Pm8uY29kZSE9PSJ1bnJlY29nbml6ZWRfa2V5cyIpPyhlLmFib3J0ZWQ9ITAsZSk6dC5fem9kLnJ1bih7dmFsdWU6ZS52YWx1ZSxpc3N1ZXM6ZS5pc3N1ZXN9LG4pfWNvbnN0IElpPXAoIiRab2RDb2RlYyIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLFIoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLFIoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLFIoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZigoby5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHM9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oYT0+eW8oYSx0LG8pKTp5byhzLHQsbyl9ZWxzZXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT55byhhLHQsbykpOnlvKHMsdCxvKX19fSk7ZnVuY3Rpb24geW8oZSx0LG4pe2lmKGUuaXNzdWVzLmxlbmd0aClyZXR1cm4gZS5hYm9ydGVkPSEwLGU7aWYoKG4uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCByPXQudHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5fbyhlLHMsdC5vdXQsbikpOl9vKGUscix0Lm91dCxuKX1lbHNle2NvbnN0IHI9dC5yZXZlcnNlVHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5fbyhlLHMsdC5pbixuKSk6X28oZSxyLHQuaW4sbil9fWZ1bmN0aW9uIF9vKGUsdCxuLG8pe3JldHVybiBlLmlzc3Vlcy5sZW5ndGg/KGUuYWJvcnRlZD0hMCxlKTpuLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczplLmlzc3Vlc30sbyl9Y29uc3QgdGg9cCgiJFpvZFByZXByb2Nlc3MiLChlLHQpPT57VGkuaW5pdChlLHQpfSksbmg9cCgiJFpvZFJlYWRvbmx5IiwoZSx0KT0+e1AuaW5pdChlLHQpLFIoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcyksUihlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksUihlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbiksUihlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4oQ3UpOkN1KHIpfX0pO2Z1bmN0aW9uIEN1KGUpe3JldHVybiBlLm1lbW98fChlLnZhbHVlPU9iamVjdC5mcmVlemUoZS52YWx1ZSkpLGV9ZnVuY3Rpb24gT2coZSl7Y29uc3QgdD1lLl96b2QuZGVmO2xldCBuPXQucGF0dGVybixvPSEhdC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxyLHM7Zm9yKGNvbnN0IGkgb2YgdC5jaGVja3M/P1tdKXtjb25zdCBsPWkuX3pvZC5kZWY7bC5wYXR0ZXJuJiYobj1sLnBhdHRlcm4pLG98fChvPSEhbC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSk7Y29uc3QgdT1sLm1pbmltdW0/P2wubGVuZ3RoLGQ9bC5tYXhpbXVtPz9sLmxlbmd0aDt1IT09dm9pZCAwJiYocj09PXZvaWQgMHx8dT5yKSYmKHI9dSksZCE9PXZvaWQgMCYmKHM9PT12b2lkIDB8fGQ8cykmJihzPWQpfWlmKG4pcmV0dXJuIG4uc291cmNlO2lmKHIhPT12b2lkIDAmJnMhPT12b2lkIDAmJnI+cylyZXR1cm4iKD8hKSI7aWYociE9PXZvaWQgMHx8cyE9PXZvaWQgMClyZXR1cm4gYWQoe21pbmltdW06cixtYXhpbXVtOnN9KS5zb3VyY2U7Y29uc3QgYT1lLl96b2QucGF0dGVybjtyZXR1cm4obyYmYT09PXNyP3VkOmEpPy5zb3VyY2V9ZnVuY3Rpb24gUnMoZSl7Y29uc3QgdD1lLl96b2QuZGVmLG49ZS5fem9kLnBhdHRlcm4/LnNvdXJjZSxvPXQuaW5uZXJUeXBlPz9lLl96b2QuaW5uZXJUeXBlO2lmKG8pe2NvbnN0IHI9by5fem9kLnBhdHRlcm4/LnNvdXJjZSxzPVJzKG8pO3JldHVybiBuJiZyJiZzJiZzIT09cj9uLnJlcGxhY2UoRmUociksKCk9PkZlKHMpKTpufWlmKHQub3B0aW9ucyl7Y29uc3Qgcj10Lm9wdGlvbnMubWFwKFJzKTtpZihyLmV2ZXJ5KEJvb2xlYW4pKXJldHVybmBeKCR7ci5tYXAocz0+RmUocykpLmpvaW4oInwiKX0pJGB9cmV0dXJuIE9nKGUpfWNvbnN0IG9oPXAoIiRab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0LnBhcnRzKWlmKHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwpe2NvbnN0IHI9UnMobyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydCwgbm8gcGF0dGVybiBmb3VuZDogJHtbLi4uby5fem9kLnRyYWl0c10uc2hpZnQoKX1gKTtuLnB1c2goRmUocikpfWVsc2UgaWYobz09PW51bGx8fHBsLmhhcyh0eXBlb2Ygbykpbi5wdXNoKFplKGAke299YCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtvfWApO2UuX3pvZC5wYXR0ZXJuPW5ldyBSZWdFeHAoYF4ke24uam9pbigiIil9JGApLGUuX3pvZC5wYXJzZT0obyxyKT0+dHlwZW9mIG8udmFsdWUhPSJzdHJpbmciPyhvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbyk6KGUuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleD0wLGUuX3pvZC5wYXR0ZXJuLnRlc3Qoby52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQ/PyJ0ZW1wbGF0ZV9saXRlcmFsIixwYXR0ZXJuOmUuX3pvZC5wYXR0ZXJuLnNvdXJjZX0pLG8pfSkscmg9cCgiJFpvZEZ1bmN0aW9uIiwoZSx0KT0+KFAuaW5pdChlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfZGVmIix7dmFsdWU6dH0pLGUuX3pvZC5kZWY9dCxlLmltcGxlbWVudD1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P0NzKGUuX2RlZi5pbnB1dCxvKTpvLHM9UmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/Q3MoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuaW1wbGVtZW50QXN5bmM9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jIGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P2F3YWl0IEVzKGUuX2RlZi5pbnB1dCxvKTpvLHM9YXdhaXQgUmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/YXdhaXQgRXMoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuX3pvZC5wYXJzZT0obixvKT0+dHlwZW9mIG4udmFsdWUhPSJmdW5jdGlvbiI/KG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ImZ1bmN0aW9uIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pOihlLl9kZWYub3V0cHV0JiZlLl9kZWYub3V0cHV0Ll96b2QuZGVmLnR5cGU9PT0icHJvbWlzZSI/bi52YWx1ZT1lLmltcGxlbWVudEFzeW5jKG4udmFsdWUpOm4udmFsdWU9ZS5pbXBsZW1lbnQobi52YWx1ZSksbiksZS5pbnB1dD0oLi4ubik9Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIEFycmF5LmlzQXJyYXkoblswXSk/bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuZXcgU2koe3R5cGU6InR1cGxlIixpdGVtczpuWzBdLHJlc3Q6blsxXX0pLG91dHB1dDplLl9kZWYub3V0cHV0fSk6bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuWzBdLG91dHB1dDplLl9kZWYub3V0cHV0fSl9LGUub3V0cHV0PW49Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6ZS5fZGVmLmlucHV0LG91dHB1dDpufSl9LGUpKSxzaD1wKCIkWm9kUHJvbWlzZSIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PlByb21pc2UucmVzb2x2ZShuLnZhbHVlKS50aGVuKHI9PnQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbykpfSkseGk9cCgiJFpvZExhenkiLChlLHQpPT57UC5pbml0KGUsdCksaWwoZS5fem9kLCJpbm5lclR5cGUiLCgpPT57Y29uc3Qgbj10O3JldHVybiBuLl9jYWNoZWRJbm5lcnx8KG4uX2NhY2hlZElubmVyPXQuZ2V0dGVyKCkpLG4uX2NhY2hlZElubmVyfSksUihlLCJwYXR0ZXJuIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucGF0dGVybiksUihlLCJwcm9wVmFsdWVzIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucHJvcFZhbHVlcyksUihlLCJvcHRpbiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluPz92b2lkIDApLFIoZSwib3B0b3V0IixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0Pz92b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+ZS5fem9kLmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksaWg9cCgiJFpvZEN1c3RvbSIsKGUsdCk9PntLLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pm4sZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPW4udmFsdWUscj10LmZuKG8pO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiByLnRoZW4ocz0+RXUocyxuLG8sZSkpO0V1KHIsbixvLGUpfX0pO2Z1bmN0aW9uIEV1KGUsdCxuLG8pe2lmKCFlKXtjb25zdCByPXtjb2RlOiJjdXN0b20iLGlucHV0Om4saW5zdDpvLHBhdGg6Wy4uLm8uX3pvZC5kZWYucGF0aD8/W11dLGNvbnRpbnVlOiFvLl96b2QuZGVmLmFib3J0fTtvLl96b2QuZGVmLnBhcmFtcyYmKHIucGFyYW1zPW8uX3pvZC5kZWYucGFyYW1zKSx0Lmlzc3Vlcy5wdXNoKHl0KHIpKX19Y2xhc3MgYWggZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW5ub3QgcGFyc2UgYSByZWZlcmVuY2UgY3ljbGUgdGhhdCBjbG9zZXMgdGhyb3VnaCBhIHRyYW5zZm9ybSIpLHRoaXMubmFtZT0iWm9kQ3ljbGljRXJyb3IifX1jb25zdCBOcz0ifm1lbW8iLEF1PVtdO2Z1bmN0aW9uIGNoKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIF9zKGUpe3JldHVybiBlLm1hcCh0PT50LnBhdGg/ey4uLnQscGF0aDp0LnBhdGguc2xpY2UoKX06ey4uLnR9KX1jb25zdCB1aD1uZXcgV2Vha01hcCxmdD0wLHpvPTEsUXQ9MjtmdW5jdGlvbiBZdChlLHQsbil7Y29uc3Qgbz11aC5nZXQoZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gbz9RdDpmdDtpZih0LmhhcyhlKSlyZXR1cm4gUXQ7dC5hZGQoZSk7bGV0IHI9ZnQ7Y29uc3Qgcz1kPT57aWYociE9PVF0JiZkPy5fem9kKXtjb25zdCBmPVl0KGQsdCxuKTtmPnImJihyPWYpfX0sYT0oZCxmKT0+e2xldCBnPWZ0O2Zvcihjb25zdCB2IG9mIFJlZmxlY3Qub3duS2V5cyhkKSl7Y29uc3QgXz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsdik7aWYoIV8uZW51bWVyYWJsZSljb250aW51ZTtjb25zdCB3PV8uZ2V0P3pvOl8udmFsdWU/Ll96b2Q/WXQoXy52YWx1ZSx0LG4pOmZ0O3c+ZyYmKGc9dyl9cmV0dXJuIGd9LGk9ZD0+e2Q+ciYmKHI9ZCl9LGw9ZS5fem9kLmRlZjtzd2l0Y2gobC50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGQ9Vm8obCk7aShkP2EoZCk6em8pLHMobC5jYXRjaGFsbCk7YnJlYWt9Y2FzZSJhcnJheSI6cyhsLmVsZW1lbnQpO2JyZWFrO2Nhc2UidHVwbGUiOmZvcihjb25zdCBkIG9mIGwuaXRlbXMpcyhkKTtzKGwucmVzdCk7YnJlYWs7Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjpzKGwua2V5VHlwZSkscyhsLnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJzZXQiOnMobC52YWx1ZVR5cGUpO2JyZWFrO2Nhc2UidW5pb24iOmZvcihjb25zdCBkIG9mIGwub3B0aW9ucylzKGQpO2JyZWFrO2Nhc2UiaW50ZXJzZWN0aW9uIjpzKGwubGVmdCkscyhsLnJpZ2h0KTticmVhaztjYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjpzKGwuaW5uZXJUeXBlKTticmVhaztjYXNlInBpcGUiOnMobC5pbikscyhsLm91dCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cyhsLmlucHV0KSxzKGwub3V0cHV0KTticmVhaztjYXNlImxhenkiOntjb25zdCBkPWwuX2NhY2hlZElubmVyPz8obj9lLl96b2QuaW5uZXJUeXBlOnZvaWQgMCk7aShkP1l0KGQsdCwhMSk6em8pO2JyZWFrfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpicmVhaztkZWZhdWx0OmZvcihjb25zdCBkIGluIGwpe2NvbnN0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGQpO2lmKCFmfHxmLmdldCljb250aW51ZTtjb25zdCBnPWYudmFsdWU7aWYoISghZ3x8dHlwZW9mIGchPSJvYmplY3QiKSl7aWYoZy5fem9kKXMoZyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGcpKWZvcihjb25zdCB2IG9mIGcpcyh2KX19fXJldHVybiB0LmRlbGV0ZShlKSxSZyhlLHIpfWZ1bmN0aW9uIFJnKGUsdCl7cmV0dXJuIHQhPT16byYmdWguc2V0KGUsdD09PVF0KSx0fWZ1bmN0aW9uIE5nKGUpe3JldHVybiBZdChlLG5ldyBTZXQsITApIT09ZnR9ZnVuY3Rpb24gWmcoZSx0KXtsZXQgbj1lLmJ1Y2tldHMuZ2V0KHQpO3JldHVybiBufHwobj1uZXcgV2Vha01hcCxlLmJ1Y2tldHMuc2V0KHQsbikpLG59bGV0IGtvO2NvbnN0IHdvPVtdLGpnPXthbGxvYyhlLHQsbil7Y29uc3Qgbz1rbztpZighbylyZXR1cm4gbjtrbz12b2lkIDA7Y29uc3Qgcj17dmFsdWU6bixpc3N1ZXM6bnVsbH07cmV0dXJuIG8uc2V0KHQudmFsdWUsciksd28ucHVzaChyKSxufSxndWFyZChlKXt2YXIgdDsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBuPWUuX3pvZC5wYXJzZSxvPShyLHMpPT57aWYocy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiJiZsaChzLHIudmFsdWUpKXRocm93IG5ldyBhaDtyZXR1cm4gbihyLHMpfTtlLl96b2QucGFyc2U9byxlLl96b2QucnVuPT09biYmKGUuX3pvZC5ydW49byl9KX0sYXR0YWNoKGUpe3ZhciB0O2xldCBuLG89ITEscixzOyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IGE9ZS5fem9kLnBhcnNlLGk9KGwsdSk9PntpZihuPT09dm9pZCAwKXtjb25zdCBqPVl0KGUsbmV3IFNldCwhMSk7aWYoaj09PWZ0KXJldHVybiBlLl96b2QucGFyc2U9YSxlLl96b2QucnVuPT09aSYmKGUuX3pvZC5ydW49YSksYShsLHUpO2o9PT1RdHx8bz9uPSEwOm89ITB9Y29uc3QgZD1sLnZhbHVlO2lmKCFjaChkKSlyZXR1cm4gYShsLHUpO2xldCBmPXVbTnNdO2Z8fChmPXtidWNrZXRzOm5ldyBXZWFrTWFwLGJhY2tFZGdlczp2b2lkIDB9LHVbTnNdPWYpO2xldCBnO3I9PT11P2c9czooZz1aZyhmLGUpLHI9dSxzPWcpO2NvbnN0IHY9Zy5nZXQoZCk7aWYodilyZXR1cm4gbC52YWx1ZT12LnZhbHVlLHYuaXNzdWVzP3YuaXNzdWVzLmxlbmd0aCYmbC5pc3N1ZXMucHVzaCguLi5fcyh2Lmlzc3VlcykpOihsLm1lbW89ITAsZi5iYWNrRWRnZXM/PyhmLmJhY2tFZGdlcz1uZXcgV2Vha1NldCksZi5iYWNrRWRnZXMuYWRkKHYudmFsdWUpKSxsO2tvPWc7Y29uc3QgXz13by5sZW5ndGgsdz1hKGwsdSk7a289dm9pZCAwO2NvbnN0IFM9d28ubGVuZ3RoPl8/d28ucG9wKCk6dm9pZCAwO3JldHVybiB3IGluc3RhbmNlb2YgUHJvbWlzZT93LnRoZW4oaj0+KFMmJihTLmlzc3Vlcz1qLmlzc3Vlcy5sZW5ndGg/X3Moai5pc3N1ZXMpOkF1KSxqKSk6KFMmJihTLmlzc3Vlcz13Lmlzc3Vlcy5sZW5ndGg/X3Mody5pc3N1ZXMpOkF1KSx3KX07ZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpfSl9fTtmdW5jdGlvbiBjcigpe3JldHVybiBqZ31mdW5jdGlvbiBsaChlLHQpe2NvbnN0IG49ZVtOc10/LmJhY2tFZGdlcztyZXR1cm4gbiE9PXZvaWQgMCYmY2godCkmJm4uaGFzKHQpfWNvbnN0IE1nPSgpPT57Y29uc3QgZT17c3RyaW5nOnt1bml0OiJjaGFyYWN0ZXJzIix2ZXJiOiJ0byBoYXZlIn0sZmlsZTp7dW5pdDoiYnl0ZXMiLHZlcmI6InRvIGhhdmUifSxhcnJheTp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxzZXQ6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sbWFwOnt1bml0OiJlbnRyaWVzIix2ZXJiOiJ0byBoYXZlIn19O2Z1bmN0aW9uIHQocyl7cmV0dXJuIGVbc10/P251bGx9Y29uc3Qgbj17cmVnZXg6ImlucHV0IixlbWFpbDoiZW1haWwgYWRkcmVzcyIsdXJsOiJVUkwiLGVtb2ppOiJlbW9qaSIsdXVpZDoiVVVJRCIsdXVpZHY0OiJVVUlEdjQiLHV1aWR2NjoiVVVJRHY2IixuYW5vaWQ6Im5hbm9pZCIsZ3VpZDoiR1VJRCIsY3VpZDoiY3VpZCIsY3VpZDI6ImN1aWQyIix1bGlkOiJVTElEIix4aWQ6IlhJRCIsa3N1aWQ6IktTVUlEIixkYXRldGltZToiSVNPIGRhdGV0aW1lIixkYXRlOiJJU08gZGF0ZSIsdGltZToiSVNPIHRpbWUiLGR1cmF0aW9uOiJJU08gZHVyYXRpb24iLGlwdjQ6IklQdjQgYWRkcmVzcyIsaXB2NjoiSVB2NiBhZGRyZXNzIixtYWM6Ik1BQyBhZGRyZXNzIixjaWRydjQ6IklQdjQgcmFuZ2UiLGNpZHJ2NjoiSVB2NiByYW5nZSIsYmFzZTY0OiJiYXNlNjQtZW5jb2RlZCBzdHJpbmciLGJhc2U2NHVybDoiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nIixqc29uX3N0cmluZzoiSlNPTiBzdHJpbmciLGUxNjQ6IkUuMTY0IG51bWJlciIsY3VycmVuY3lfY29kZToiY3VycmVuY3kgY29kZSIsY3JlZGl0X2NhcmQ6ImNyZWRpdCBjYXJkIG51bWJlciIsaWJhbjoiSUJBTiIsand0OiJKV1QiLHRlbXBsYXRlX2xpdGVyYWw6ImlucHV0In0sbz17bmFuOiJOYU4ifTtmdW5jdGlvbiByKHMsYSl7cmV0dXJuIHM9PT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiYhTnVtYmVyLmlzRmluaXRlKGEpP1N0cmluZyhhKTpvW3NdPz9zfXJldHVybiBzPT57c3dpdGNoKHMuY29kZSl7Y2FzZSJpbnZhbGlkX3R5cGUiOntjb25zdCBhPXIocy5leHBlY3RlZCksaT1TbChzLmlucHV0KSxsPXIoaSxzLmlucHV0KTtyZXR1cm5gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHthfSwgcmVjZWl2ZWQgJHtsfWB9Y2FzZSJpbnZhbGlkX3ZhbHVlIjpyZXR1cm4gcy52YWx1ZXMubGVuZ3RoPT09MT9gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtWcyhzLnZhbHVlc1swXSl9YDpgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke0lzKHMudmFsdWVzLCJ8Iil9YDtjYXNlInRvb19iaWciOntjb25zdCBhPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPD0iOiI8IixpPXQocy5vcmlnaW4pO3JldHVybiBpP2BUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBoYXZlICR7YX0ke3MubWF4aW11bS50b1N0cmluZygpfSAke2kudW5pdD8/ImVsZW1lbnRzIn1gOmBUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBiZSAke2F9JHtzLm1heGltdW0udG9TdHJpbmcoKX1gfWNhc2UidG9vX3NtYWxsIjp7Y29uc3QgYT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ij49IjoiPiIsaT10KHMub3JpZ2luKTtyZXR1cm4gaT9gVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBoYXZlICR7YX0ke3MubWluaW11bS50b1N0cmluZygpfSAke2kudW5pdH1gOmBUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGJlICR7YX0ke3MubWluaW11bS50b1N0cmluZygpfWB9Y2FzZSJpbnZhbGlkX2Zvcm1hdCI6e2NvbnN0IGE9cztyZXR1cm4gYS5mb3JtYXQ9PT0ic3RhcnRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBzdGFydCB3aXRoICIke2EucHJlZml4fSJgOmEuZm9ybWF0PT09ImVuZHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGVuZCB3aXRoICIke2Euc3VmZml4fSJgOmEuZm9ybWF0PT09ImluY2x1ZGVzIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgaW5jbHVkZSAiJHthLmluY2x1ZGVzfSJgOmEuZm9ybWF0PT09InJlZ2V4Ij9gSW52YWxpZCBzdHJpbmc6IG11c3QgbWF0Y2ggcGF0dGVybiAke2EucGF0dGVybn1gOmBJbnZhbGlkICR7blthLmZvcm1hdF0/P3MuZm9ybWF0fWB9Y2FzZSJub3RfbXVsdGlwbGVfb2YiOnJldHVybmBJbnZhbGlkIG51bWJlcjogbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7cy5kaXZpc29yfWA7Y2FzZSJ1bnJlY29nbml6ZWRfa2V5cyI6cmV0dXJuYFVucmVjb2duaXplZCBrZXkke3Mua2V5cy5sZW5ndGg+MT8icyI6IiJ9OiAke0lzKHMua2V5cywiLCAiKX1gO2Nhc2UiaW52YWxpZF9rZXkiOnJldHVybmBJbnZhbGlkIGtleSBpbiAke3Mub3JpZ2lufWA7Y2FzZSJpbnZhbGlkX3VuaW9uIjpyZXR1cm4gcy5vcHRpb25zJiZBcnJheS5pc0FycmF5KHMub3B0aW9ucykmJnMub3B0aW9ucy5sZW5ndGg+MD9gSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3Mub3B0aW9ucy5tYXAoaT0+YCcke2l9J2ApLmpvaW4oIiB8ICIpfWA6cy5pbmNsdXNpdmU9PT0hMT8iSW52YWxpZCBpbnB1dDogbW9yZSB0aGFuIG9uZSBvcHRpb24gbWF0Y2hlZCI6IkludmFsaWQgaW5wdXQiO2Nhc2UiaW52YWxpZF9lbGVtZW50IjpyZXR1cm5gSW52YWxpZCB2YWx1ZSBpbiAke3Mub3JpZ2lufWA7ZGVmYXVsdDpyZXR1cm4iSW52YWxpZCBpbnB1dCJ9fX07ZnVuY3Rpb24gZGgoKXtyZXR1cm57bG9jYWxlRXJyb3I6TWcoKX19Y29uc3QgUGk9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuOmRofSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBPdTtjb25zdCBDaT1TeW1ib2woIlpvZE91dHB1dCIpLEVpPVN5bWJvbCgiWm9kSW5wdXQiKTtjbGFzcyBwaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwfWFkZCh0LC4uLm4pe2NvbnN0IG89blswXTtyZXR1cm4gdGhpcy5fbWFwLnNldCh0LG8pLG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmImlkImluIG8mJnRoaXMuX2lkbWFwLnNldChvLmlkLHQpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXAsdGhpc31yZW1vdmUodCl7Y29uc3Qgbj10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBuJiZ0eXBlb2Ygbj09Im9iamVjdCImJiJpZCJpbiBuJiZ0aGlzLl9pZG1hcC5kZWxldGUobi5pZCksdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzfWdldCh0KXtjb25zdCBuPXQuX3pvZC5wYXJlbnQ7aWYobil7Y29uc3Qgbz17Li4udGhpcy5nZXQobik/P3t9fTtkZWxldGUgby5pZDtjb25zdCByPXsuLi5vLC4uLnRoaXMuX21hcC5nZXQodCl9O3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg/cjp2b2lkIDB9cmV0dXJuIHRoaXMuX21hcC5nZXQodCl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfX1mdW5jdGlvbiB1cigpe3JldHVybiBuZXcgcGh9KE91PWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbFJlZ2lzdHJ5Pz8oT3UuX196b2RfZ2xvYmFsUmVnaXN0cnk9dXIoKSk7Y29uc3QgJGU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxSZWdpc3RyeSxBaT0oKT0+e3Rocm93IG5ldyBFcnJvcigiem9kIGNvbXBpbGUoKSBpcyBub3QgYnVuZGxlZCBpbnRvIGNhcmRzIC0gc2VlIHBhY2thZ2VzL2ludGVybmFsL2NhcmQta2l0L3ZpdGUtc2xpbS5tanMiKX07Y2xhc3MgT2kgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgUmkgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgTmkgZXh0ZW5kcyBFcnJvcnt9Y29uc3QgWmk9QWksamk9QWkscWc9QWk7ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIGUuY2hlY2tzJiYoZS5jaGVja3M9Wy4uLmUuY2hlY2tzXSksZX1mdW5jdGlvbiBoaChlLHQpe3JldHVybiBuZXcgZShscih7dHlwZToic3RyaW5nIiwuLi55KHQpfSkpfWZ1bmN0aW9uIGZoKGUsdCl7cmV0dXJuIG5ldyBlKGxyKHt0eXBlOiJzdHJpbmciLGNvZXJjZTohMCwuLi55KHQpfSkpfWZ1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1haWwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJndWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBMaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY2IiwuLi55KHQpfSl9ZnVuY3Rpb24gVWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjciLC4uLnkodCl9KX1mdW5jdGlvbiBkcihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBIaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtb2ppIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibmFub2lkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBKaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQyIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidWxpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBXaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InhpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBHaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImtzdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBZaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gbWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJtYWMiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gWGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gZWEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gdGEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gbmEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjR1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlMTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGdoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3JlZGl0X2NhcmQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gYmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpYmFuIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHJhKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiand0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWNvbnN0IHNhPXtBbnk6bnVsbCxNaW51dGU6LTEsU2Vjb25kOjAsTWlsbGlzZWNvbmQ6MyxNaWNyb3NlY29uZDo2fTtmdW5jdGlvbiBpYShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGV0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsb2Zmc2V0OiExLGxvY2FsOiExLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBhYShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi55KHQpfSl9ZnVuY3Rpb24gY2EoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIscHJlY2lzaW9uOm51bGwsLi4ueSh0KX0pfWZ1bmN0aW9uIHVhKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZHVyYXRpb24iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi55KHQpfSl9ZnVuY3Rpb24gdmgoZSx0KXtyZXR1cm4gbmV3IGUobHIoe3R5cGU6Im51bWJlciIsY2hlY2tzOltdLC4uLnkodCl9KSl9ZnVuY3Rpb24geWgoZSx0KXtyZXR1cm4gbmV3IGUobHIoe3R5cGU6Im51bWJlciIsY29lcmNlOiEwLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIF9oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InNhZmVpbnQiLC4uLnkodCl9KX1mdW5jdGlvbiBraChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDMyIiwuLi55KHQpfSl9ZnVuY3Rpb24gd2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uICRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDMyIiwuLi55KHQpfSl9ZnVuY3Rpb24gU2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDMyIiwuLi55KHQpfSl9ZnVuY3Rpb24gemgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLC4uLnkodCl9KX1mdW5jdGlvbiBUaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBJaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24geGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBQaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uIENoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzeW1ib2wiLC4uLnkodCl9KX1mdW5jdGlvbiBBaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidW5kZWZpbmVkIiwuLi55KHQpfSl9ZnVuY3Rpb24gT2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGwiLC4uLnkodCl9KX1mdW5jdGlvbiBSaChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFueSJ9KX1mdW5jdGlvbiBOaChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVua25vd24ifSl9ZnVuY3Rpb24gWmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5ldmVyIiwuLi55KHQpfSl9ZnVuY3Rpb24gamgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InZvaWQiLC4uLnkodCl9KX1mdW5jdGlvbiBNaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIHFoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIERoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuYW4iLC4uLnkodCl9KX1mdW5jdGlvbiBNZShlLHQpe3JldHVybiBuZXcgcGkoe2NoZWNrOiJsZXNzX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBiZShlLHQpe3JldHVybiBuZXcgcGkoe2NoZWNrOiJsZXNzX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBuZXcgaGkoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiB2ZShlLHQpe3JldHVybiBuZXcgaGkoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBwcihlKXtyZXR1cm4gcWUoMCxlKX1mdW5jdGlvbiBocihlKXtyZXR1cm4gTWUoMCxlKX1mdW5jdGlvbiBmcihlKXtyZXR1cm4gYmUoMCxlKX1mdW5jdGlvbiBtcihlKXtyZXR1cm4gdmUoMCxlKX1mdW5jdGlvbiBydChlLHQpe3JldHVybiBuZXcgZ2Qoe2NoZWNrOiJtdWx0aXBsZV9vZiIsLi4ueSh0KSx2YWx1ZTplfSl9ZnVuY3Rpb24gdXQoZSx0KXtyZXR1cm4gbmV3IHlkKHtjaGVjazoibWF4X3NpemUiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gRGUoZSx0KXtyZXR1cm4gbmV3IF9kKHtjaGVjazoibWluX3NpemUiLC4uLnkodCksbWluaW11bTplfSl9ZnVuY3Rpb24gVHQoZSx0KXtyZXR1cm4gbmV3IGtkKHtjaGVjazoic2l6ZV9lcXVhbHMiLC4uLnkodCksc2l6ZTplfSl9ZnVuY3Rpb24gSXQoZSx0KXtyZXR1cm4gbmV3IHdkKHtjaGVjazoibWF4X2xlbmd0aCIsLi4ueSh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBLZShlLHQpe3JldHVybiBuZXcgJGQoe2NoZWNrOiJtaW5fbGVuZ3RoIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIHh0KGUsdCl7cmV0dXJuIG5ldyBTZCh7Y2hlY2s6Imxlbmd0aF9lcXVhbHMiLC4uLnkodCksbGVuZ3RoOmV9KX1mdW5jdGlvbiAkbihlLHQpe3JldHVybiBuZXcgemQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IiwuLi55KHQpLHBhdHRlcm46ZX0pfWZ1bmN0aW9uIFNuKGUpe3JldHVybiBuZXcgVGQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6Imxvd2VyY2FzZSIsLi4ueShlKX0pfWZ1bmN0aW9uIHpuKGUpe3JldHVybiBuZXcgSWQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InVwcGVyY2FzZSIsLi4ueShlKX0pfWZ1bmN0aW9uIFRuKGUsdCl7cmV0dXJuIG5ldyB4ZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLC4uLnkodCksaW5jbHVkZXM6ZX0pfWZ1bmN0aW9uIEluKGUsdCl7cmV0dXJuIG5ldyBQZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLC4uLnkodCkscHJlZml4OmV9KX1mdW5jdGlvbiB4bihlLHQpe3JldHVybiBuZXcgQ2Qoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsLi4ueSh0KSxzdWZmaXg6ZX0pfWZ1bmN0aW9uIGdyKGUsdCxuKXtyZXR1cm4gbmV3IEVkKHtjaGVjazoicHJvcGVydHkiLHByb3BlcnR5OmUsc2NoZW1hOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBuKGUsdCl7cmV0dXJuIG5ldyBBZCh7Y2hlY2s6InByb3BlcnRpZXMiLHNoYXBlOmUsLi4ueSh0KX0pfWZ1bmN0aW9uIENuKGUsdCl7cmV0dXJuIG5ldyBPZCh7Y2hlY2s6Im1pbWVfdHlwZSIsbWltZTplLC4uLnkodCl9KX1mdW5jdGlvbiBBZShlKXtyZXR1cm4gbmV3IFJkKHtjaGVjazoib3ZlcndyaXRlIix0eDplfSl9ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIEFlKHQ9PnQubm9ybWFsaXplKGUpKX1mdW5jdGlvbiBBbigpe3JldHVybiBBZShlPT5lLnRyaW0oKSl9ZnVuY3Rpb24gT24oKXtyZXR1cm4gQWUoZT0+ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBSbigpe3JldHVybiBBZShlPT5lLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIE5uKCl7cmV0dXJuIEFlKGU9PmxsKGUpKX1mdW5jdGlvbiBMaChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJhcnJheSIsZWxlbWVudDp0LC4uLnkobil9KX1mdW5jdGlvbiBEZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LC4uLnkobil9KX1mdW5jdGlvbiBMZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGluY2x1c2l2ZTohMSwuLi55KG4pfSl9ZnVuY3Rpb24gQmcoZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczpuLGRpc2NyaW1pbmF0b3I6dCwuLi55KG8pfSl9ZnVuY3Rpb24gVWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OnQscmlnaHQ6bn0pfWZ1bmN0aW9uIEhnKGUsdCxuLG8pe2NvbnN0IHI9biBpbnN0YW5jZW9mIFAscz1yP286bixhPXI/bjpudWxsO3JldHVybiBuZXcgZSh7dHlwZToidHVwbGUiLGl0ZW1zOnQscmVzdDphLC4uLnkocyl9KX1mdW5jdGlvbiBGZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLnkobyl9KX1mdW5jdGlvbiBWZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im1hcCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLnkobyl9KX1mdW5jdGlvbiBKZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBLZyhlLHQsbil7Y29uc3Qgbz1BcnJheS5pc0FycmF5KHQpP09iamVjdC5mcm9tRW50cmllcyh0Lm1hcChyPT5bcixyXSkpOnQ7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm8sLi4ueShuKX0pfWZ1bmN0aW9uIFdnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gR2coZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkodCk/dDpbdF0sLi4ueShuKX0pfWZ1bmN0aW9uIEJoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJmaWxlIiwuLi55KHQpfSl9ZnVuY3Rpb24gUWcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOnR9KX1mdW5jdGlvbiBZZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gWGcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGViKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTp0LGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/bigpOkpvKG4pfX0pfWZ1bmN0aW9uIHRiKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gbmIoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gb2IoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY2F0Y2giLGlubmVyVHlwZTp0LGNhdGNoVmFsdWU6dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpKcyhuKX0pfWZ1bmN0aW9uIHJiKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InBpcGUiLGluOnQsb3V0Om59KX1mdW5jdGlvbiBzYihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gaWIoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gYWIoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxhenkiLGdldHRlcjp0fSl9ZnVuY3Rpb24gY2IoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gVWgoZSx0LG4pe2NvbnN0IG89eShuKTtyZXR1cm4gby5hYm9ydD8/KG8uYWJvcnQ9ITApLG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ub30pfWZ1bmN0aW9uIEhoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi55KG4pfSl9ZnVuY3Rpb24gRmgoZSx0KXtjb25zdCBuPVZoKG89PihvLmFkZElzc3VlPXI9PntpZih0eXBlb2Ygcj09InN0cmluZyIpby5pc3N1ZXMucHVzaCh5dChyLG8udmFsdWUsbi5fem9kLmRlZikpO2Vsc2V7Y29uc3Qgcz1yO3MuZmF0YWwmJihzLmNvbnRpbnVlPSExKSxzLmNvZGU/PyhzLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBzfHwocy5pbnB1dD1vLnZhbHVlKSxzLmluc3Q/PyhzLmluc3Q9bikscy5jb250aW51ZT8/KHMuY29udGludWU9IW4uX3pvZC5kZWYuYWJvcnQpLG8uaXNzdWVzLnB1c2goeXQocykpfX0sZShvLnZhbHVlLG8pKSx0KTtyZXR1cm4gbn1mdW5jdGlvbiBWaChlLHQpe2NvbnN0IG49bmV3IEsoe2NoZWNrOiJjdXN0b20iLC4uLnkodCl9KTtyZXR1cm4gbi5fem9kLmNoZWNrPWUsbn1mdW5jdGlvbiBKaChlKXtjb25zdCB0PW5ldyBLKHtjaGVjazoiZGVzY3JpYmUifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89JGUuZ2V0KG4pPz97fTskZS5hZGQobix7Li4ubyxkZXNjcmlwdGlvbjplfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gS2goZSl7Y29uc3QgdD1uZXcgSyh7Y2hlY2s6Im1ldGEifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89JGUuZ2V0KG4pPz97fTskZS5hZGQobix7Li4ubywuLi5lfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gV2goZSx0KXtjb25zdCBuPXkodCk7bGV0IG89bi50cnV0aHk/P1sidHJ1ZSIsIjEiLCJ5ZXMiLCJvbiIsInkiLCJlbmFibGVkIl0scj1uLmZhbHN5Pz9bImZhbHNlIiwiMCIsIm5vIiwib2ZmIiwibiIsImRpc2FibGVkIl07bi5jYXNlIT09InNlbnNpdGl2ZSImJihvPW8ubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikscj1yLm1hcCh2PT50eXBlb2Ygdj09InN0cmluZyI/di50b0xvd2VyQ2FzZSgpOnYpKTtjb25zdCBzPW5ldyBTZXQobyksYT1uZXcgU2V0KHIpLGk9ZS5Db2RlYz8/SWksbD1lLkJvb2xlYW4/P2tpLHU9ZS5TdHJpbmc/P3duLGQ9bmV3IHUoe3R5cGU6InN0cmluZyIsZXJyb3I6bi5lcnJvcn0pLGY9bmV3IGwoe3R5cGU6ImJvb2xlYW4iLGVycm9yOm4uZXJyb3J9KSxnPW5ldyBpKHt0eXBlOiJwaXBlIixpbjpkLG91dDpmLHRyYW5zZm9ybTooKHYsXyk9PntsZXQgdz12O3JldHVybiBuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKHc9dy50b0xvd2VyQ2FzZSgpKSxzLmhhcyh3KT8hMDphLmhhcyh3KT8hMTooXy5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsZXhwZWN0ZWQ6InN0cmluZ2Jvb2wiLHZhbHVlczpbLi4ucywuLi5hXSxpbnB1dDpfLnZhbHVlLGluc3Q6Zyxjb250aW51ZTohMX0pLHt9KX0pLHJldmVyc2VUcmFuc2Zvcm06KCh2LF8pPT52PT09ITA/b1swXXx8InRydWUiOnJbMF18fCJmYWxzZSIpLGVycm9yOm4uZXJyb3J9KTtyZXR1cm4gZy5fem9kLmJhZy50cnV0aHk9byxnLl96b2QuYmFnLmZhbHN5PXIsZy5fem9kLmJhZy5jYXNlPW4uY2FzZT8/Imluc2Vuc2l0aXZlIixnfWZ1bmN0aW9uIFB0KGUsdCxuLG89e30pe2NvbnN0IHI9eShvKSxzPXtjaGVjazoic3RyaW5nX2Zvcm1hdCIsdHlwZToic3RyaW5nIixmb3JtYXQ6dCxmbjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmk9Pm4udGVzdChpKSwuLi5yfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlZ0V4cCYmKHMucGF0dGVybj1uKSxuZXcgZShzKX1jb25zdCB1Yj0oKT0+KHt9KSxsYj0oKT0+KHt9KSxkYj0oKT0+KHt9KSxwYj0oKT0+KHt9KSxoYj0oKT0+KHt9KSxHaD0oKT0+KCk9Pih7fSksWnM9KCk9PigpPT4oe30pLGZiPSgpPT4oe30pLFNlPSgpPT4oe30pLG1iPSgpPT4oe30pLGdiPSgpPT4oe30pLGJiPSgpPT4oe30pLHZiPSgpPT4oe30pLHliPSgpPT4oe30pLF9iPSgpPT4oe30pLGtiPSgpPT4oe30pLHdiPSgpPT4oe30pLCRiPSgpPT4oe30pLFNiPSgpPT4oe30pLHpiPSgpPT4oe30pLFRiPSgpPT4oe30pLEliPSgpPT4oe30pLHhiPSgpPT4oe30pLFBiPSgpPT4oe30pLENiPSgpPT4oe30pLEViPSgpPT4oe30pLEFiPSgpPT4oe30pLE9iPSgpPT4oe30pLFJiPSgpPT4oe30pLE5iPSgpPT4oe30pLFpiPSgpPT4oe30pLGpiPSgpPT4oe30pLE1iPSgpPT4oe30pLHFiPSgpPT4oe30pLFFoPSgpPT4oe30pLERiPSgpPT4oe30pLExiPSgpPT4oe30pLEJiPSgpPT4oe30pLFViPSgpPT4oe30pLEhiPSgpPT4oe30pLEZiPSgpPT4oe30pLFZiPSgpPT4oe30pLEpiPSgpPT4oe30pLEtiPSgpPT4oe30pLFdiPSgpPT4oe30pLEdiPSgpPT4oe30pLFloPSgpPT4oe30pLFFiPSgpPT4oe30pLGxhPSgpPT4oe30pO2NsYXNzIFlie31jb25zdCBYYj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGx9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksWGg9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRab2RBbnk6VHAsJFpvZEFycmF5OkVwLCRab2RBc3luY0Vycm9yOlZlLCRab2RCYXNlNjQ6bHAsJFpvZEJhc2U2NFVSTDpwcCwkWm9kQmlnSW50OndpLCRab2RCaWdJbnRGb3JtYXQ6d3AsJFpvZEJvb2xlYW46a2ksJFpvZENJRFJ2NDppcCwkWm9kQ0lEUnY2OmNwLCRab2RDVUlEOktkLCRab2RDVUlEMjpXZCwkWm9kQ2F0Y2g6WHAsJFpvZENoZWNrOkssJFpvZENoZWNrQmlnSW50Rm9ybWF0OnZkLCRab2RDaGVja0VuZHNXaXRoOkNkLCRab2RDaGVja0dyZWF0ZXJUaGFuOmhpLCRab2RDaGVja0luY2x1ZGVzOnhkLCRab2RDaGVja0xlbmd0aEVxdWFsczpTZCwkWm9kQ2hlY2tMZXNzVGhhbjpwaSwkWm9kQ2hlY2tMb3dlckNhc2U6VGQsJFpvZENoZWNrTWF4TGVuZ3RoOndkLCRab2RDaGVja01heFNpemU6eWQsJFpvZENoZWNrTWltZVR5cGU6T2QsJFpvZENoZWNrTWluTGVuZ3RoOiRkLCRab2RDaGVja01pblNpemU6X2QsJFpvZENoZWNrTXVsdGlwbGVPZjpnZCwkWm9kQ2hlY2tOdW1iZXJGb3JtYXQ6YmQsJFpvZENoZWNrT3ZlcndyaXRlOlJkLCRab2RDaGVja1Byb3BlcnRpZXM6QWQsJFpvZENoZWNrUHJvcGVydHk6RWQsJFpvZENoZWNrUmVnZXg6emQsJFpvZENoZWNrU2l6ZUVxdWFsczprZCwkWm9kQ2hlY2tTdGFydHNXaXRoOlBkLCRab2RDaGVja1N0cmluZ0Zvcm1hdDprbiwkWm9kQ2hlY2tVcHBlckNhc2U6SWQsJFpvZENvZGVjOklpLCRab2RDcmVkaXRDYXJkOm1wLCRab2RDdXN0b206aWgsJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpfcCwkWm9kQ3ljbGljRXJyb3I6YWgsJFpvZERhdGU6Q3AsJFpvZERlZmF1bHQ6V3AsJFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpNcCwkWm9kRTE2NDpocCwkWm9kRW1haWw6RGQsJFpvZEVtb2ppOlZkLCRab2RFbmNvZGVFcnJvcjpYbywkWm9kRW51bTpVcCwkWm9kRXJyb3I6RWwsJFpvZEV4YWN0T3B0aW9uYWw6SnAsJFpvZEZpbGU6RnAsJFpvZEZ1bmN0aW9uOnJoLCRab2RHVUlEOk1kLCRab2RJQkFOOmJwLCRab2RJUHY0Om9wLCRab2RJUHY2OnJwLCRab2RJU09EYXRlOmVwLCRab2RJU09EYXRlVGltZTpYZCwkWm9kSVNPRHVyYXRpb246bnAsJFpvZElTT1RpbWU6dHAsJFpvZEludGVyc2VjdGlvbjpxcCwkWm9kSldUOnlwLCRab2RLU1VJRDpZZCwkWm9kTGF6eTp4aSwkWm9kTGl0ZXJhbDpIcCwkWm9kTUFDOnNwLCRab2RNYXA6THAsJFpvZE5hTjplaCwkWm9kTmFub0lEOkpkLCRab2ROZXZlcjp4cCwkWm9kTm9uT3B0aW9uYWw6UXAsJFpvZE51bGw6enAsJFpvZE51bGxhYmxlOktwLCRab2ROdW1iZXI6X2ksJFpvZE51bWJlckZvcm1hdDprcCwkWm9kT2JqZWN0OlJwLCRab2RPYmplY3RKSVQ6TnAsJFpvZE9wdGlvbmFsOnppLCRab2RQaXBlOlRpLCRab2RQcmVmYXVsdDpHcCwkWm9kUHJlcHJvY2Vzczp0aCwkWm9kUHJvbWlzZTpzaCwkWm9kUmVhZG9ubHk6bmgsJFpvZFJlYWxFcnJvcjp5ZSwkWm9kUmVjb3JkOkRwLCRab2RSZWdpc3RyeTpwaCwkWm9kU2V0OkJwLCRab2RTdHJpbmc6d24sJFpvZFN0cmluZ0Zvcm1hdDpWLCRab2RTdWNjZXNzOllwLCRab2RTeW1ib2w6JHAsJFpvZFRlbXBsYXRlTGl0ZXJhbDpvaCwkWm9kVHJhbnNmb3JtOlZwLCRab2RUdXBsZTpTaSwkWm9kVHlwZTpQLCRab2RVTElEOkdkLCRab2RVUkw6RmQsJFpvZFVVSUQ6cWQsJFpvZFVuZGVmaW5lZDpTcCwkWm9kVW5pb246YXIsJFpvZFVua25vd246SXAsJFpvZFZvaWQ6UHAsJFpvZFhJRDpRZCwkWm9kWG9yOlpwLCRicmFuZDpHcywkY29uc3RydWN0b3I6cCwkaW5wdXQ6RWksJG91dHB1dDpDaSxEb2M6TmQsSU5WQUxJRDpPaSxKU09OU2NoZW1hOlhiLEpTT05TY2hlbWFHZW5lcmF0b3I6WWIsTkVWRVI6V3MsVGltZVByZWNpc2lvbjpzYSxVUkxfQkFEX0ZPUk1BVDptaSxVUkxfVU5QQVJTRUFCTEU6bm4sWm9kQ29tcGlsZUFzeW5jRXJyb3I6UmksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6TmksX2FueTpSaCxfYXJyYXk6TGgsX2Jhc2U2NDp0YSxfYmFzZTY0dXJsOm5hLF9iaWdpbnQ6SWgsX2Jvb2xlYW46emgsX2NhdGNoOm9iLF9jaGVjazpWaCxfY2lkcnY0OlhpLF9jaWRydjY6ZWEsX2NvZXJjZWRCaWdpbnQ6eGgsX2NvZXJjZWRCb29sZWFuOlRoLF9jb2VyY2VkRGF0ZTpxaCxfY29lcmNlZE51bWJlcjp5aCxfY29lcmNlZFN0cmluZzpmaCxfY3JlZGl0Q2FyZDpnaCxfY3VpZDpWaSxfY3VpZDI6SmksX2N1c3RvbTpVaCxfZGF0ZTpNaCxfZGVjb2RlOmVpLF9kZWNvZGVBc3luYzpuaSxfZGVmYXVsdDplYixfZGlzY3JpbWluYXRlZFVuaW9uOkJnLF9lMTY0Om9hLF9lbWFpbDpNaSxfZW1vamk6SGksX2VuY29kZTpYcyxfZW5jb2RlQXN5bmM6dGksX2VuZHNXaXRoOnhuLF9lbnVtOktnLF9maWxlOkJoLF9mbG9hdDMyOmtoLF9mbG9hdDY0OndoLF9ndDpxZSxfZ3RlOnZlLF9ndWlkOnFpLF9pYmFuOmJoLF9pbmNsdWRlczpUbixfaW50Ol9oLF9pbnQzMjokaCxfaW50NjQ6UGgsX2ludGVyc2VjdGlvbjpVZyxfaXB2NDpRaSxfaXB2NjpZaSxfaXNvRGF0ZTphYSxfaXNvRGF0ZVRpbWU6aWEsX2lzb0R1cmF0aW9uOnVhLF9pc29UaW1lOmNhLF9qd3Q6cmEsX2tzdWlkOkdpLF9sYXp5OmFiLF9sZW5ndGg6eHQsX2xpdGVyYWw6R2csX2xvd2VyY2FzZTpTbixfbHQ6TWUsX2x0ZTpiZSxfbWFjOm1oLF9tYXA6VmcsX21heDpiZSxfbWF4TGVuZ3RoOkl0LF9tYXhTaXplOnV0LF9taW1lOkNuLF9taW46dmUsX21pbkxlbmd0aDpLZSxfbWluU2l6ZTpEZSxfbXVsdGlwbGVPZjpydCxfbmFuOkRoLF9uYW5vaWQ6RmksX25hdGl2ZUVudW06V2csX25lZ2F0aXZlOmhyLF9uZXZlcjpaaCxfbm9ubmVnYXRpdmU6bXIsX25vbm9wdGlvbmFsOnRiLF9ub25wb3NpdGl2ZTpmcixfbm9ybWFsaXplOkVuLF9udWxsOk9oLF9udWxsYWJsZTpYZyxfbnVtYmVyOnZoLF9vcHRpb25hbDpZZyxfb3ZlcndyaXRlOkFlLF9wYXJzZTptbixfcGFyc2VBc3luYzpnbixfcGlwZTpyYixfcG9zaXRpdmU6cHIsX3Byb21pc2U6Y2IsX3Byb3BlcnRpZXM6UG4sX3Byb3BlcnR5OmdyLF9yZWFkb25seTpzYixfcmVjb3JkOkZnLF9yZWZpbmU6SGgsX3JlZ2V4OiRuLF9zYWZlRGVjb2RlOnJpLF9zYWZlRGVjb2RlQXN5bmM6aWksX3NhZmVFbmNvZGU6b2ksX3NhZmVFbmNvZGVBc3luYzpzaSxfc2FmZVBhcnNlOmJuLF9zYWZlUGFyc2VBc3luYzp2bixfc2V0OkpnLF9zaXplOlR0LF9zbHVnaWZ5Ok5uLF9zdGFydHNXaXRoOkluLF9zdHJpbmc6aGgsX3N0cmluZ0Zvcm1hdDpQdCxfc3RyaW5nYm9vbDpXaCxfc3VjY2VzczpuYixfc3VwZXJSZWZpbmU6RmgsX3N5bWJvbDpFaCxfdGVtcGxhdGVMaXRlcmFsOmliLF90b0xvd2VyQ2FzZTpPbixfdG9VcHBlckNhc2U6Um4sX3RyYW5zZm9ybTpRZyxfdHJpbTpBbixfdHVwbGU6SGcsX3VpbnQzMjpTaCxfdWludDY0OkNoLF91bGlkOktpLF91bmRlZmluZWQ6QWgsX3VuaW9uOkRnLF91bmtub3duOk5oLF91cHBlcmNhc2U6em4sX3VybDpkcixfdXVpZDpEaSxfdXVpZHY0OkxpLF91dWlkdjY6QmksX3V1aWR2NzpVaSxfdm9pZDpqaCxfeGlkOldpLF94b3I6TGcsYmFzZTY0Q2hhcnNldDp1cCxiYXNlNjR1cmxDaGFyc2V0OnlpLGNhblBhcnNlVVJMOmdpLGNsb25lOlEsY29tcGlsZTpaaSxjb21waWxlRm46cWcsY29uZmlnOm9lLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDpacyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6R2gsZGVjb2RlOlZtLGRlY29kZUFzeW5jOkttLGRlc2NyaWJlOkpoLGVuY29kZTpGbSxlbmNvZGVBc3luYzpKbSxleHRyYWN0RGVmczpwYixmaW5hbGl6ZTpoYixmbGF0dGVuRXJyb3I6ZXIsZm9ybWF0RXJyb3I6dHIsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjokaSxnbG9iYWxDb25maWc6ZGUsZ2xvYmFsUmVnaXN0cnk6JGUsaGFuZGxlVW5yZXByZXNlbnRhYmxlOmxiLGluaXRpYWxpemVDb250ZXh0OnViLGlzQmFja0VkZ2U6bGgsaXNSZWN1cnNpdmVTY2hlbWE6TmcsaXNWYWxpZEJhc2U2NDp2aSxpc1ZhbGlkQmFzZTY0VVJMOmRwLGlzVmFsaWRDSURSdjY6YXAsaXNWYWxpZENyZWRpdENhcmQ6ZnAsaXNWYWxpZElCQU46Z3AsaXNWYWxpZElQdjY6YmksaXNWYWxpZEpXVDp2cCxsb2NhbGVzOlBpLG1lbW9pemVyOmNyLG1lcmdlVmFsdWVzOlJvLG1ldGE6S2gscGFyc2U6Q3MscGFyc2VBc3luYzpFcyxwYXJzZVVSTE9iamVjdDpCZCxwcmV0dGlmeUVycm9yOllzLHByb2Nlc3M6ZmIscHJvY2Vzc1NjaGVtYTpkYixyZWdleGVzOmlyLHJlZ2lzdHJ5OnVyLHNhZmVEZWNvZGU6R20sc2FmZURlY29kZUFzeW5jOlltLHNhZmVFbmNvZGU6V20sc2FmZUVuY29kZUFzeW5jOlFtLHNhZmVQYXJzZTpPbCxzYWZlUGFyc2VBc3luYzpMbSxzdGFuZGFyZFByb3BzOmZpLHN0cmlwVGFiQW5kTmV3bGluZTpPcyx0b0RvdFBhdGg6QWwsdG9KU09OU2NoZW1hOmxhLHRvWm9kOkZvLHRyZWVpZnlFcnJvcjpRcyx1cmxIb3N0bmFtZU9rOlVkLHVybFByb3RvY29sT2s6SGQsdXRpbDpLcyx2YWxpZGF0ZTpvcix2YWxpZGF0ZUFzeW5jOnJyLHZhbGlkYXRlVVJMOkxkLHZlcnNpb246WmQsd2l0aFBhcnNlcjpqaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxSdT1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gZGEoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGEsaSk9Pntjb25zdCBsPXRbYS5fem9kLmRlZi50eXBlXTtyZXR1cm4gbD9sKGEsaSk6YX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoYSl7Y29uc3QgaT1vLmdldChhKTtpZihpPT09UnUpcmV0dXJuIG5ldyB4aSh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChhKX0pO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7by5zZXQoYSxSdSk7Y29uc3QgbD1zKGEpLHU9bihsLGwhPT1hKTtyZXR1cm4gby5zZXQoYSx1KSx1fWZ1bmN0aW9uIHMoYSl7Y29uc3QgaT1hLl96b2QuZGVmO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1pLnNoYXBlLGQ9T2JqZWN0LmtleXModSk7bGV0IGY9ITE7Y29uc3QgZz17fTtmb3IoY29uc3QgXyBvZiBkKXtjb25zdCB3PXIodVtfXSk7dyE9PXVbX10mJihmPSEwKSxnW19dPXd9bGV0IHY9aS5jYXRjaGFsbDtyZXR1cm4gaS5jYXRjaGFsbCYmKHY9cihpLmNhdGNoYWxsKSx2IT09aS5jYXRjaGFsbCYmKGY9ITApKSxmP1EoYSx7Li4uaSxzaGFwZTpnLGNhdGNoYWxsOnZ9KTphfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoaS5lbGVtZW50KTtyZXR1cm4gdT09PWkuZWxlbWVudD9hOlEoYSx7Li4uaSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1pLml0ZW1zO2xldCBkPSExO2NvbnN0IGY9W107Zm9yKGNvbnN0IHYgb2YgdSl7Y29uc3QgXz1yKHYpO18hPT12JiYoZD0hMCksZi5wdXNoKF8pfWxldCBnPWkucmVzdDtyZXR1cm4gaS5yZXN0JiYoZz1yKGkucmVzdCksZyE9PWkucmVzdCYmKGQ9ITApKSxkP1EoYSx7Li4uaSxpdGVtczpmLHJlc3Q6Z30pOmF9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGkua2V5VHlwZSksZD1yKGkudmFsdWVUeXBlKTtyZXR1cm4gdT09PWkua2V5VHlwZSYmZD09PWkudmFsdWVUeXBlP2E6UShhLHsuLi5pLGtleVR5cGU6dSx2YWx1ZVR5cGU6ZH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGkudmFsdWVUeXBlKTtyZXR1cm4gdT09PWkudmFsdWVUeXBlP2E6UShhLHsuLi5pLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9aS5vcHRpb25zO2xldCBkPSExO2NvbnN0IGY9W107Zm9yKGNvbnN0IGcgb2YgdSl7Y29uc3Qgdj1yKGcpO3YhPT1nJiYoZD0hMCksZi5wdXNoKHYpfXJldHVybiBkP1EoYSx7Li4uaSxvcHRpb25zOmZ9KTphfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGkubGVmdCksZD1yKGkucmlnaHQpO3JldHVybiB1PT09aS5sZWZ0JiZkPT09aS5yaWdodD9hOlEoYSx7Li4uaSxsZWZ0OnUscmlnaHQ6ZH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoaS5pbm5lclR5cGUpO3JldHVybiB1PT09aS5pbm5lclR5cGU/YTpRKGEsey4uLmksaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoaS5pbiksZD1yKGkub3V0KTtyZXR1cm4gdT09PWkuaW4mJmQ9PT1pLm91dD9hOlEoYSx7Li4uaSxpbjp1LG91dDpkfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihpLmlucHV0KSxkPXIoaS5vdXRwdXQpO3JldHVybiB1PT09aS5pbnB1dCYmZD09PWkub3V0cHV0P2E6UShhLHsuLi5pLGlucHV0OnUsb3V0cHV0OmR9KX1jYXNlImxhenkiOntjb25zdCB1PWkuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6ZCwuLi5mfT1pO3JldHVybiBRKGEsey4uLmYsZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gYX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gcGEoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gZWYoZSx0KXtyZXR1cm4gcGEoZSk/T2woZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiBldihlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYocGEoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiB0dihlKXtpZihwYShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCBudj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6eG4sZ3Q6cWUsZ3RlOnZlLGluY2x1ZGVzOlRuLGxlbmd0aDp4dCxsb3dlcmNhc2U6U24sbHQ6TWUsbHRlOmJlLG1heExlbmd0aDpJdCxtYXhTaXplOnV0LG1pbWU6Q24sbWluTGVuZ3RoOktlLG1pblNpemU6RGUsbXVsdGlwbGVPZjpydCxuZWdhdGl2ZTpocixub25uZWdhdGl2ZTptcixub25wb3NpdGl2ZTpmcixub3JtYWxpemU6RW4sb3ZlcndyaXRlOkFlLHBvc2l0aXZlOnByLHByb3BlcnRpZXM6UG4scHJvcGVydHk6Z3IscmVnZXg6JG4sc2l6ZTpUdCxzbHVnaWZ5Ok5uLHN0YXJ0c1dpdGg6SW4sdG9Mb3dlckNhc2U6T24sdG9VcHBlckNhc2U6Um4sdHJpbTpBbix1cHBlcmNhc2U6em59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksTnU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gJG8oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCB0Zj0oZSx0KT0+e0VsLmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtOdS5oYXMobil8fChOdS5hZGQobiksJG8obiwiZm9ybWF0IixvPT5yPT50cihvLHIpKSwkbyhuLCJmbGF0dGVuIixvPT5yPT5lcihvLHIpKSwkbyhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLFBvLDIpfSksJG8obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsUG8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0sbmY9cCgiWm9kRXJyb3IiLHRmKSxtZT1wKCJab2RFcnJvciIsdGYsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxoYT1tbihtZSksZmE9Z24obWUpLG1hPWJuKG1lKSxnYT12bihtZSksYmE9WHMobWUpLHZhPWVpKG1lKSx5YT10aShtZSksX2E9bmkobWUpLGthPW9pKG1lKSx3YT1yaShtZSksJGE9c2kobWUpLFNhPWlpKG1lKTtmdW5jdGlvbiBvdigpe2RlLmxvY2FsZUVycm9yfHxvZShkaCgpKX1mdW5jdGlvbiBsdCgpe2RlLm1lbW9pemVyfHxvZSh7bWVtb2l6ZXI6Y3IoKX0pfWNvbnN0IEU9cCgiWm9kVHlwZSIsKGUsdCk9PihvdigpLFAuaW5pdChlLHQpLGUuZGVmPXQsZS50eXBlPXQudHlwZSxlKSx7Y2hlY2soLi4uZSl7Y29uc3QgdD10aGlzLmRlZjtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0LHtjaGVja3M6Wy4uLnQuY2hlY2tzPz9bXSwuLi5lLm1hcChuPT50eXBlb2Ygbj09ImZ1bmN0aW9uIj97X3pvZDp7Y2hlY2s6bixkZWY6e2NoZWNrOiJjdXN0b20ifSxvbmF0dGFjaDpbXX19Om4pXX0pLHtwYXJlbnQ6ITB9KX0sd2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayguLi5lKX0sY2xvbmUoZSx0KXtyZXR1cm4gUSh0aGlzLGUsdCl9LGJyYW5kKCl7cmV0dXJuIHRoaXN9LHJlZ2lzdGVyKGUsdCl7cmV0dXJuIGUuYWRkKHRoaXMsdCksdGhpc30scmVmaW5lKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socnMoZSx0KSl9LHN1cGVyUmVmaW5lKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soc3MoZSx0KSl9LG92ZXJ3cml0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhBZShlKSl9LG9wdGlvbmFsKCl7cmV0dXJuIEoodGhpcyl9LGV4YWN0T3B0aW9uYWwoKXtyZXR1cm4gTXIodGhpcyl9LG51bGxhYmxlKCl7cmV0dXJuIHd0KHRoaXMpfSxudWxsaXNoKCl7cmV0dXJuIEood3QodGhpcykpfSxub25vcHRpb25hbChlKXtyZXR1cm4gSHIodGhpcyxlKX0sYXJyYXkoKXtyZXR1cm4geCh0aGlzKX0sb3IoZSl7cmV0dXJuIE8oW3RoaXMsZV0pfSxhbmQoZSl7cmV0dXJuIEx0KHRoaXMsZSl9LHRyYW5zZm9ybShlKXtyZXR1cm4gcm4odGhpcyxzbyhlKSl9LGRlZmF1bHQoZSl7cmV0dXJuIExyKHRoaXMsZSl9LHByZWZhdWx0KGUpe3JldHVybiBVcih0aGlzLGUpfSxjYXRjaChlKXtyZXR1cm4gSnIodGhpcyxlKX0scGlwZShlKXtyZXR1cm4gcm4odGhpcyxlKX0scmVhZG9ubHkoKXtyZXR1cm4gUXIodGhpcyl9LGRlc2NyaWJlKGUpe2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiAkZS5hZGQodCx7ZGVzY3JpcHRpb246ZX0pLHR9LG1ldGEoLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiAkZS5nZXQodGhpcyk7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuICRlLmFkZCh0LGVbMF0pLHR9LGlzT3B0aW9uYWwoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2Uodm9pZCAwKS5zdWNjZXNzfSxpc051bGxhYmxlKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKG51bGwpLnN1Y2Nlc3N9LGFwcGx5KGUsLi4udCl7cmV0dXJuIHQubGVuZ3RoPT09MD9lKHRoaXMpOmUodGhpcywuLi50KX0sZ2V0In5zdGFuZGFyZCIoKXtyZXR1cm4gWW8odGhpcywifnN0YW5kYXJkIix7Li4uZmkodGhpcyksanNvblNjaGVtYTp7aW5wdXQ6WnMoKSxvdXRwdXQ6WnMoKX19KX0sc2V0In5zdGFuZGFyZCIoZSl7amUodGhpcywifnN0YW5kYXJkIixlKX0scGFyc2U6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBoYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0scGFyc2VBc3luYzphc3luYyBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGF3YWl0IGZhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxzYWZlUGFyc2UoZSx0KXtyZXR1cm4gbWEodGhpcyxlLHQpfSxhc3luYyBzYWZlUGFyc2VBc3luYyhlLHQpe3JldHVybiBnYSh0aGlzLGUsdCl9LGdldCBzcGEoKXtyZXR1cm4gdGhpcz8uc2FmZVBhcnNlQXN5bmN9LHNldCBzcGEoZSl7amUodGhpcywic3BhIixlKX0sdmFsaWRhdGUoZSx0KXtyZXR1cm4gb3IodGhpcyxlLHQpfSx2YWxpZGF0ZUFzeW5jKGUsdCl7cmV0dXJuIHJyKHRoaXMsZSx0KX0sZW5jb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYmEodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHZhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxlbmNvZGVBc3luYzphc3luYyBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGF3YWl0IHlhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGVBc3luYzphc3luYyBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGF3YWl0IF9hKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxzYWZlRW5jb2RlKGUsdCl7cmV0dXJuIGthKHRoaXMsZSx0KX0sc2FmZURlY29kZShlLHQpe3JldHVybiB3YSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVFbmNvZGVBc3luYyhlLHQpe3JldHVybiAkYSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVEZWNvZGVBc3luYyhlLHQpe3JldHVybiBTYSh0aGlzLGUsdCl9LHRvSlNPTlNjaGVtYShlKXtyZXR1cm4gR2goKShlKX0sZ2V0IGRlc2NyaXB0aW9uKCl7cmV0dXJuICRlLmdldCh0aGlzKT8uZGVzY3JpcHRpb259LGdldCBfZGVmKCl7cmV0dXJuIHRoaXMuX3pvZC5kZWZ9fSksWm49cCgiX1pvZFN0cmluZyIsKGUsdCk9Pnt3bi5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1iKCl9LGZuKHtmb3JtYXQ6ZT0+U2UoKS5mb3JtYXQ/P251bGwsbWluTGVuZ3RoOmU9PlNlKCkubWluaW11bT8/bnVsbCxtYXhMZW5ndGg6ZT0+U2UoKS5tYXhpbXVtPz9udWxsfSx7cmVnZXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soJG4oLi4uZSkpfSxpbmNsdWRlcyguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhUbiguLi5lKSl9LHN0YXJ0c1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soSW4oLi4uZSkpfSxlbmRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayh4biguLi5lKSl9LG1pbiguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhLZSguLi5lKSl9LG1heCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhJdCguLi5lKSl9LGxlbmd0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayh4dCguLi5lKSl9LG5vbmVtcHR5KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEtlKDEsLi4uZSkpfSxsb3dlcmNhc2UoZSl7cmV0dXJuIHRoaXMuY2hlY2soU24oZSkpfSx1cHBlcmNhc2UoZSl7cmV0dXJuIHRoaXMuY2hlY2soem4oZSkpfSx0cmltKCl7cmV0dXJuIHRoaXMuY2hlY2soQW4oKSl9LG5vcm1hbGl6ZSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhFbiguLi5lKSl9LHRvTG93ZXJDYXNlKCl7cmV0dXJuIHRoaXMuY2hlY2soT24oKSl9LHRvVXBwZXJDYXNlKCl7cmV0dXJuIHRoaXMuY2hlY2soUm4oKSl9LHNsdWdpZnkoKXtyZXR1cm4gdGhpcy5jaGVjayhObigpKX19KSksQ3Q9cCgiWm9kU3RyaW5nIiwoZSx0KT0+e3duLmluaXQoZSx0KSxabi5pbml0KGUsdCl9LHtlbWFpbChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShqbixlKSl9LHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhkcihOdCxlKSl9LGp3dChlKXtyZXR1cm4gdGhpcy5jaGVjayhyYShYbixlKSl9LGVtb2ppKGUpe3JldHVybiB0aGlzLmNoZWNrKEhpKHFuLGUpKX0sZ3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhxaShNbixlKSl9LHV1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRGkoQ2UsZSkpfSx1dWlkdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTGkoQ2UsZSkpfSx1dWlkdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soQmkoQ2UsZSkpfSx1dWlkdjcoZSl7cmV0dXJuIHRoaXMuY2hlY2soVWkoQ2UsZSkpfSxuYW5vaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRmkoRG4sZSkpfSxjdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFZpKExuLGUpKX0sY3VpZDIoZSl7cmV0dXJuIHRoaXMuY2hlY2soSmkoQm4sZSkpfSx1bGlkKGUpe3JldHVybiB0aGlzLmNoZWNrKEtpKFVuLGUpKX0sYmFzZTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHRhKEduLGUpKX0sYmFzZTY0dXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKG5hKFFuLGUpKX0seGlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFdpKEhuLGUpKX0sa3N1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soR2koRm4sZSkpfSxpcHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKFFpKFZuLGUpKX0saXB2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhZaShKbixlKSl9LGNpZHJ2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhYaShLbixlKSl9LGNpZHJ2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhlYShXbixlKSl9LGUxNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2sob2EoWW4sZSkpfSxkYXRldGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhpYShFdCxlKSl9LGRhdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWEoQXQsZSkpfSx0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKGNhKE90LGUpKX0sZHVyYXRpb24oZSl7cmV0dXJuIHRoaXMuY2hlY2sodWEoUnQsZSkpfX0pO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGhoKEN0LGUpfWNvbnN0IFU9cCgiWm9kU3RyaW5nRm9ybWF0IiwoZSx0KT0+e1YuaW5pdChlLHQpLFpuLmluaXQoZSx0KX0pLEV0PXAoIlpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e1hkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLEF0PXAoIlpvZElTT0RhdGUiLChlLHQpPT57ZXAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksT3Q9cCgiWm9kSVNPVGltZSIsKGUsdCk9Pnt0cC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxSdD1wKCJab2RJU09EdXJhdGlvbiIsKGUsdCk9PntucC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxqbj1wKCJab2RFbWFpbCIsKGUsdCk9PntEZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiB6YShlKXtyZXR1cm4gTWkoam4sZSl9Y29uc3QgTW49cCgiWm9kR1VJRCIsKGUsdCk9PntNZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBUYShlKXtyZXR1cm4gcWkoTW4sZSl9Y29uc3QgQ2U9cCgiWm9kVVVJRCIsKGUsdCk9PntxZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBJYShlKXtyZXR1cm4gRGkoQ2UsZSl9ZnVuY3Rpb24geGEoZSl7cmV0dXJuIExpKENlLGUpfWZ1bmN0aW9uIFBhKGUpe3JldHVybiBCaShDZSxlKX1mdW5jdGlvbiBDYShlKXtyZXR1cm4gVWkoQ2UsZSl9Y29uc3QgTnQ9cCgiWm9kVVJMIiwoZSx0KT0+e0ZkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBkcihOdCxlKX1mdW5jdGlvbiBBYShlKXtyZXR1cm4gZHIoTnQse3Byb3RvY29sOmFpLGhvc3RuYW1lOlhsLC4uLnkoZSl9KX1jb25zdCBxbj1wKCJab2RFbW9qaSIsKGUsdCk9PntWZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBPYShlKXtyZXR1cm4gSGkocW4sZSl9Y29uc3QgRG49cCgiWm9kTmFub0lEIiwoZSx0KT0+e0pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBGaShEbixlKX1jb25zdCBMbj1wKCJab2RDVUlEIiwoZSx0KT0+e0tkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE5hKGUpe3JldHVybiBWaShMbixlKX1jb25zdCBCbj1wKCJab2RDVUlEMiIsKGUsdCk9PntXZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBaYShlKXtyZXR1cm4gSmkoQm4sZSl9Y29uc3QgVW49cCgiWm9kVUxJRCIsKGUsdCk9PntHZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBqYShlKXtyZXR1cm4gS2koVW4sZSl9Y29uc3QgSG49cCgiWm9kWElEIiwoZSx0KT0+e1FkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE1hKGUpe3JldHVybiBXaShIbixlKX1jb25zdCBGbj1wKCJab2RLU1VJRCIsKGUsdCk9PntZZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBxYShlKXtyZXR1cm4gR2koRm4sZSl9Y29uc3QgVm49cCgiWm9kSVB2NCIsKGUsdCk9PntvcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBEYShlKXtyZXR1cm4gUWkoVm4sZSl9Y29uc3QgYnI9cCgiWm9kTUFDIiwoZSx0KT0+e3NwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIExhKGUpe3JldHVybiBtaChicixlKX1jb25zdCBKbj1wKCJab2RJUHY2IiwoZSx0KT0+e3JwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEJhKGUpe3JldHVybiBZaShKbixlKX1jb25zdCBLbj1wKCJab2RDSURSdjQiLChlLHQpPT57aXAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIFhpKEtuLGUpfWNvbnN0IFduPXAoIlpvZENJRFJ2NiIsKGUsdCk9PntjcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBIYShlKXtyZXR1cm4gZWEoV24sZSl9Y29uc3QgR249cCgiWm9kQmFzZTY0IiwoZSx0KT0+e2xwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEZhKGUpe3JldHVybiB0YShHbixlKX1jb25zdCBRbj1wKCJab2RCYXNlNjRVUkwiLChlLHQpPT57cHAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIG5hKFFuLGUpfWNvbnN0IFluPXAoIlpvZEUxNjQiLChlLHQpPT57aHAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSmEoZSl7cmV0dXJuIG9hKFluLGUpfWNvbnN0IHZyPXAoIlpvZENyZWRpdENhcmQiLChlLHQpPT57bXAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2EoZSl7cmV0dXJuIGdoKHZyLGUpfWNvbnN0IHlyPXAoIlpvZElCQU4iLChlLHQpPT57YnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2EoZSl7cmV0dXJuIGJoKHlyLGUpfWNvbnN0IFhuPXAoIlpvZEpXVCIsKGUsdCk9Pnt5cC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBHYShlKXtyZXR1cm4gcmEoWG4sZSl9Y29uc3QgR2U9cCgiWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e19wLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFFhKGUsdCxuPXt9KXtyZXR1cm4gUHQoR2UsZSx0LG4pfWZ1bmN0aW9uIFlhKGUpe3JldHVybiBQdChHZSwiaG9zdG5hbWUiLFlsLGUpfWZ1bmN0aW9uIFhhKGUpe3JldHVybiBQdChHZSwiaGV4IixtZCxlKX1mdW5jdGlvbiBlYyhlKXtyZXR1cm4gUHQoR2UsImN1cnJlbmN5X2NvZGUiLHRkLGUpfWZ1bmN0aW9uIHRjKGUsdCl7Y29uc3Qgbj10Py5lbmM/PyJoZXgiLG89YCR7ZX1fJHtufWAscj1pcltvXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoYXNoIGZvcm1hdDogJHtvfWApO3JldHVybiBQdChHZSxvLHIsdCl9Y29uc3QgWnQ9cCgiWm9kTnVtYmVyIiwoZSx0KT0+e19pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2IoKSxlLmlzRmluaXRlPSEwfSxmbih7bWluVmFsdWU6ZT0+e2NvbnN0e21pbmltdW06dCxleGNsdXNpdmVNaW5pbXVtOm59PVNlKCk7cmV0dXJuIE1hdGgubWF4KHQ/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpfSxtYXhWYWx1ZTplPT57Y29uc3R7bWF4aW11bTp0LGV4Y2x1c2l2ZU1heGltdW06bn09U2UoKTtyZXR1cm4gTWF0aC5taW4odD8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG4/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSl9LGlzSW50OmU9Pntjb25zdHtpc0ludDp0LG11bHRpcGxlT2Y6bn09U2UoKTtyZXR1cm4hIXR8fCEhbj8uc29tZShOdW1iZXIuaXNTYWZlSW50ZWdlcil9LGZvcm1hdDplPT5TZSgpLmZvcm1hdD8/bnVsbH0se2d0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9LGd0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhNZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxpbnQoZSl7cmV0dXJuIHRoaXMuY2hlY2sob24oZSkpfSxzYWZlKGUpe3JldHVybiB0aGlzLmNoZWNrKG9uKGUpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2socWUoMCxlKSl9LG5vbm5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHZlKDAsZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhNZSgwLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYmUoMCxlKSl9LG11bHRpcGxlT2YoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhydChlLHQpKX0sc3RlcChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHJ0KGUsdCkpfSxmaW5pdGUoKXtyZXR1cm4gdGhpc319KSk7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gdmgoWnQsZSl9Y29uc3QgUWU9cCgiWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e2twLmluaXQoZSx0KSxadC5pbml0KGUsdCl9KTtmdW5jdGlvbiBvbihlKXtyZXR1cm4gX2goUWUsZSl9ZnVuY3Rpb24gbmMoZSl7cmV0dXJuIGtoKFFlLGUpfWZ1bmN0aW9uIG9jKGUpe3JldHVybiB3aChRZSxlKX1mdW5jdGlvbiByYyhlKXtyZXR1cm4gJGgoUWUsZSl9ZnVuY3Rpb24gc2MoZSl7cmV0dXJuIFNoKFFlLGUpfWNvbnN0IGp0PXAoIlpvZEJvb2xlYW4iLChlLHQpPT57a2kuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5iYigpfSk7ZnVuY3Rpb24gQihlKXtyZXR1cm4gemgoanQsZSl9Y29uc3QgTXQ9cCgiWm9kQmlnSW50IiwoZSx0KT0+e3dpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+dmIoKX0sZm4oe21pblZhbHVlOmU9PlNlKCkubWluaW11bT8/bnVsbCxtYXhWYWx1ZTplPT5TZSgpLm1heGltdW0/P251bGwsZm9ybWF0OmU9PlNlKCkuZm9ybWF0Pz9udWxsfSx7Z3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHFlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKE1lKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHFlKEJpZ0ludCgwKSxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKE1lKEJpZ0ludCgwKSxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGJlKEJpZ0ludCgwKSxlKSl9LG5vbm5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHZlKEJpZ0ludCgwKSxlKSl9LG11bHRpcGxlT2YoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhydChlLHQpKX19KSk7ZnVuY3Rpb24gaWMoZSl7cmV0dXJuIEloKE10LGUpfWNvbnN0IGVvPXAoIlpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9Pnt3cC5pbml0KGUsdCksTXQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWMoZSl7cmV0dXJuIFBoKGVvLGUpfWZ1bmN0aW9uIGNjKGUpe3JldHVybiBDaChlbyxlKX1jb25zdCBfcj1wKCJab2RTeW1ib2wiLChlLHQpPT57JHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT55YigpfSk7ZnVuY3Rpb24gdWMoZSl7cmV0dXJuIEVoKF9yLGUpfWNvbnN0IGtyPXAoIlpvZFVuZGVmaW5lZCIsKGUsdCk9PntTcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtiKCl9KTtmdW5jdGlvbiBrdChlKXtyZXR1cm4gQWgoa3IsZSl9Y29uc3Qgd3I9cCgiWm9kTnVsbCIsKGUsdCk9Pnt6cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9iKCl9KTtmdW5jdGlvbiB0byhlKXtyZXR1cm4gT2god3IsZSl9Y29uc3QgJHI9cCgiWm9kQW55IiwoZSx0KT0+e1RwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2IoKX0pO2Z1bmN0aW9uIG5vKCl7cmV0dXJuIFJoKCRyKX1jb25zdCBTcj1wKCJab2RVbmtub3duIiwoZSx0KT0+e0lwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emIoKX0pO2Z1bmN0aW9uIEwoKXtyZXR1cm4gTmgoU3IpfWNvbnN0IHpyPXAoIlpvZE5ldmVyIiwoZSx0KT0+e3hwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+JGIoKX0pO2Z1bmN0aW9uIHN0KGUpe3JldHVybiBaaCh6cixlKX1jb25zdCBUcj1wKCJab2RWb2lkIiwoZSx0KT0+e1BwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+d2IoKX0pO2Z1bmN0aW9uIGxjKGUpe3JldHVybiBqaChUcixlKX1jb25zdCBvbz1wKCJab2REYXRlIiwoZSx0KT0+e0NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VGIoKSxlLm1pbj0obixvKT0+ZS5jaGVjayh2ZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhiZShuLG8pKX0sZm4oe21pbkRhdGU6ZT0+e2NvbnN0e21pbmltdW06dH09U2UoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfSxtYXhEYXRlOmU9Pntjb25zdHttYXhpbXVtOnR9PVNlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH19LHt9KSk7ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIE1oKG9vLGUpfWNvbnN0IElyPXAoIlpvZEFycmF5IiwoZSx0KT0+e2x0KCksRXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5NYigpLGUuZWxlbWVudD10LmVsZW1lbnR9LHttaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhLZShlLHQpKX0sbm9uZW1wdHkoZSl7cmV0dXJuIHRoaXMuY2hlY2soS2UoMSxlKSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKEl0KGUsdCkpfSxsZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4dChlLHQpKX0sdW53cmFwKCl7cmV0dXJuIHRoaXMuZWxlbWVudH19KTtmdW5jdGlvbiB4KGUsdCl7cmV0dXJuIExoKElyLGUsdCl9ZnVuY3Rpb24gcGMoZSl7Y29uc3QgdD1lLl96b2QuZGVmLnNoYXBlO3JldHVybiBpZShPYmplY3Qua2V5cyh0KSl9Y29uc3QgcXQ9cCgiWm9kT2JqZWN0IiwoZSx0KT0+e2x0KCksTnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5xYigpLHhsKGUsInNoYXBlIixuPT5uLl96b2QuZGVmLnNoYXBlLCExKX0se2tleW9mKCl7cmV0dXJuIGllKE9iamVjdC5rZXlzKHRoaXMuX3pvZC5kZWYuc2hhcGUpKX0sY2F0Y2hhbGwoZSl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6ZX0pKX0scGFzc3Rocm91Z2goKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpMKCl9KSl9LGxvb3NlKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6TCgpfSkpfSxzdHJpY3QoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpzdCgpfSkpfSxzdHJpcCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOnZvaWQgMH0pKX0sZXh0ZW5kKGUpe3JldHVybiB2bCh0aGlzLGUpfSxzYWZlRXh0ZW5kKGUpe3JldHVybiBfbCh0aGlzLGUpfSxtZXJnZShlKXtyZXR1cm4ga2wodGhpcyxlKX0scGljayhlKXtyZXR1cm4gZ2wodGhpcyxlKX0sb21pdChlKXtyZXR1cm4gYmwodGhpcyxlKX0scGFydGlhbCguLi5lKXtyZXR1cm4geHMoQnQsdGhpcyxlWzBdKX0sZXhhY3RQYXJ0aWFsKC4uLmUpe3JldHVybiB4cyhpbyx0aGlzLGVbMF0sImV4YWN0UGFydGlhbCIpfSxyZXF1aXJlZCguLi5lKXtyZXR1cm4gd2woYW8sdGhpcyxlWzBdKX19KTtmdW5jdGlvbiBiKGUsdCl7Y29uc3Qgbj17dHlwZToib2JqZWN0IixzaGFwZTplPz97fSwuLi55KHQpfTtyZXR1cm4gbmV3IHF0KG4pfWZ1bmN0aW9uIGhjKGUsdCl7cmV0dXJuIG5ldyBxdCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOnN0KCksLi4ueSh0KX0pfWZ1bmN0aW9uIHNlKGUsdCl7cmV0dXJuIG5ldyBxdCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOkwoKSwuLi55KHQpfSl9Y29uc3QgRHQ9cCgiWm9kVW5pb24iLChlLHQpPT57YXIuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RaCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBPKGUsdCl7cmV0dXJuIG5ldyBEdCh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSwuLi55KHQpfSl9Y29uc3QgeHI9cCgiWm9kWG9yIiwoZSx0KT0+e0R0LmluaXQoZSx0KSxacC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlFoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIGZjKGUsdCl7cmV0dXJuIG5ldyB4cih7dHlwZToidW5pb24iLG9wdGlvbnM6ZSxpbmNsdXNpdmU6ITEsLi4ueSh0KX0pfWNvbnN0IFByPXAoIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9PntEdC5pbml0KGUsdCksTXAuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcm8oZSx0LG4pe3JldHVybiBuZXcgUHIoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsZGlzY3JpbWluYXRvcjplLC4uLnkobil9KX1jb25zdCBDcj1wKCJab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57cXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5EYigpfSk7ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gbmV3IENyKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6ZSxyaWdodDp0fSl9Y29uc3QgRXI9cCgiWm9kVHVwbGUiLChlLHQpPT57bHQoKSxTaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkxiKCl9LHtyZXN0KGUpe3JldHVybiB0aGlzLmNsb25lKHsuLi50aGlzLl96b2QuZGVmLHJlc3Q6ZX0pfSxwYXJ0aWFsKCl7Y29uc3QgZT10aGlzLl96b2QuZGVmO2lmKGUuY2hlY2tzPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIHR1cGxlIHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO3JldHVybiB0aGlzLmNsb25lKHsuLi5lLGl0ZW1zOmUuaXRlbXMubWFwKHQ9Pm5ldyBCdCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSkpfSl9fSk7ZnVuY3Rpb24gQXIoZSx0LG4pe2NvbnN0IG89dCBpbnN0YW5jZW9mIFAscj1vP246dCxzPW8/dDpudWxsO3JldHVybiBuZXcgRXIoe3R5cGU6InR1cGxlIixpdGVtczplLHJlc3Q6cywuLi55KHIpfSl9Y29uc3QgaXQ9cCgiWm9kUmVjb3JkIiwoZSx0KT0+e2x0KCksRHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CYigpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGV9KTtmdW5jdGlvbiBaKGUsdCxuKXtyZXR1cm4hdHx8IXQuX3pvZD9uZXcgaXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTpoKCksdmFsdWVUeXBlOmUsLi4ueSh0KX0pOm5ldyBpdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIG1jKGUsdCxuKXtyZXR1cm4gbmV3IGl0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pLHBhcnRpYWw6ITB9KX1mdW5jdGlvbiBnYyhlLHQsbil7cmV0dXJuIG5ldyBpdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsbW9kZToibG9vc2UiLC4uLnkobil9KX1jb25zdCBPcj1wKCJab2RNYXAiLChlLHQpPT57bHQoKSxMcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlpiKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZSxlLm1pbj0oLi4ubik9PmUuY2hlY2soRGUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhEZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2sodXQoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soVHQoLi4ubikpfSk7ZnVuY3Rpb24gYmMoZSx0LG4pe3JldHVybiBuZXcgT3Ioe3R5cGU6Im1hcCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1jb25zdCBScj1wKCJab2RTZXQiLChlLHQpPT57bHQoKSxCcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmpiKCksZS5taW49KC4uLm4pPT5lLmNoZWNrKERlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soRGUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKHV0KC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKFR0KC4uLm4pKX0pO2Z1bmN0aW9uIHZjKGUsdCl7cmV0dXJuIG5ldyBScih7dHlwZToic2V0Iix2YWx1ZVR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgYXQ9cCgiWm9kRW51bSIsKGUsdCk9PntVcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShvLHIscyk9PkliKCksZS5lbnVtPXQuZW50cmllcyxlLm9wdGlvbnM9Wy4uLmUuX3pvZC52YWx1ZXNdO2NvbnN0IG49bmV3IFNldChPYmplY3Qua2V5cyh0LmVudHJpZXMpKTtlLmV4dHJhY3Q9KG8scik9Pntjb25zdCBzPXt9O2Zvcihjb25zdCBhIG9mIG8paWYobi5oYXMoYSkpc1thXT10LmVudHJpZXNbYV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2F9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBhdCh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX0sZS5leGNsdWRlPShvLHIpPT57Y29uc3Qgcz17Li4udC5lbnRyaWVzfTtmb3IoY29uc3QgYSBvZiBvKWlmKG4uaGFzKGEpKWRlbGV0ZSBzW2FdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHthfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgYXQoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9fSk7ZnVuY3Rpb24gaWUoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IGF0KHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4ueSh0KX0pfWZ1bmN0aW9uIHljKGUsdCl7cmV0dXJuIG5ldyBhdCh7dHlwZToiZW51bSIsZW50cmllczplLC4uLnkodCl9KX1jb25zdCBOcj1wKCJab2RMaXRlcmFsIiwoZSx0KT0+e0hwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eGIoKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gbShlLHQpe3JldHVybiBuZXcgTnIoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLnkodCl9KX1jb25zdCBacj1wKCJab2RGaWxlIiwoZSx0KT0+e0ZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RWIoKSxlLm1pbj0obixvKT0+ZS5jaGVjayhEZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayh1dChuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soQ24oQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiBfYyhlKXtyZXR1cm4gQmgoWnIsZSl9Y29uc3QganI9cCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e2x0KCksVnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OYigpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgWG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaCh5dChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgYT1zO2EuZmF0YWwmJihhLmNvbnRpbnVlPSExKSxhLmNvZGU/PyhhLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBhfHwoYS5pbnB1dD1uLnZhbHVlKSxhLmluc3Q/PyhhLmluc3Q9ZSksbi5pc3N1ZXMucHVzaCh5dChhKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIHNvKGUpe3JldHVybiBuZXcganIoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBCdD1wKCJab2RPcHRpb25hbCIsKGUsdCk9Pnt6aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlloKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gbmV3IEJ0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBpbz1wKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e0pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WWgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBNcihlKXtyZXR1cm4gbmV3IGlvKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBxcj1wKCJab2ROdWxsYWJsZSIsKGUsdCk9PntLcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlViKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gd3QoZSl7cmV0dXJuIG5ldyBxcih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24ga2MoZSl7cmV0dXJuIEood3QoZSkpfWNvbnN0IERyPXAoIlpvZERlZmF1bHQiLChlLHQpPT57V3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5GYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiBMcihlLHQpe3JldHVybiBuZXcgRHIoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOkpvKHQpfX0pfWNvbnN0IEJyPXAoIlpvZFByZWZhdWx0IiwoZSx0KT0+e0dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBVcihlLHQpe3JldHVybiBuZXcgQnIoe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpKbyh0KX19KX1jb25zdCBhbz1wKCJab2ROb25PcHRpb25hbCIsKGUsdCk9PntRcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkhiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gSHIoZSx0KXtyZXR1cm4gbmV3IGFvKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IEZyPXAoIlpvZFN1Y2Nlc3MiLChlLHQpPT57WXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5BYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHdjKGUpe3JldHVybiBuZXcgRnIoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3QgVnI9cCgiWm9kQ2F0Y2giLChlLHQpPT57WHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5KYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gSnIoZSx0KXtyZXR1cm4gbmV3IFZyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkpzKHQpfSl9Y29uc3QgS3I9cCgiWm9kTmFOIiwoZSx0KT0+e2VoLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGIoKX0pO2Z1bmN0aW9uICRjKGUpe3JldHVybiBEaChLcixlKX1jb25zdCBVdD1wKCJab2RQaXBlIiwoZSx0KT0+e1RpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+S2IoKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBybihlLHQpe3JldHVybiBuZXcgVXQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCBIdD1wKCJab2RDb2RlYyIsKGUsdCk9PntVdC5pbml0KGUsdCksSWkuaW5pdChlLHQpfSk7ZnVuY3Rpb24gU2MoZSx0LG4pe3JldHVybiBuZXcgSHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiB6YyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyBIdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3QgV3I9cCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntVdC5pbml0KGUsdCksdGguaW5pdChlLHQpfSksR3I9cCgiWm9kUmVhZG9ubHkiLChlLHQpPT57bmguaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5XYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFFyKGUpe3JldHVybiBuZXcgR3Ioe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0IFlyPXAoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PntvaC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkNiKCl9KTtmdW5jdGlvbiBUYyhlLHQpe3JldHVybiBuZXcgWXIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4ueSh0KX0pfWNvbnN0IFhyPXAoIlpvZExhenkiLChlLHQpPT57eGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24gZXMoZSl7cmV0dXJuIG5ldyBYcih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCB0cz1wKCJab2RQcm9taXNlIiwoZSx0KT0+e3NoLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+R2IoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBJYyhlKXtyZXR1cm4gbmV3IHRzKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IG5zPXAoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e3JoLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UmIoKX0pO2Z1bmN0aW9uICR0KGUpe3JldHVybiBuZXcgbnMoe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9BcihlPy5pbnB1dCk6ZT8uaW5wdXQ/P3goTCgpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9MKCl9KX1jb25zdCBGdD1wKCJab2RDdXN0b20iLChlLHQpPT57aWguaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PYigpfSk7ZnVuY3Rpb24geGMoZSl7Y29uc3QgdD1uZXcgSyh7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBvcyhlLHQpe3JldHVybiBVaChGdCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiBycyhlLHQ9e30pe3JldHVybiBIaChGdCxlLHQpfWZ1bmN0aW9uIHNzKGUsdCl7cmV0dXJuIEZoKGUsdCl9Y29uc3QgUGM9SmgsQ2M9S2gsaXM9cCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9PntGdC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUG4oZSx0KSl9fSk7ZnVuY3Rpb24gRWMoZSx0PXt9KXtjb25zdCBuPW5ldyBpcyh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IEFjPSguLi5lKT0+V2goe0NvZGVjOkh0LEJvb2xlYW46anQsU3RyaW5nOkN0fSwuLi5lKTtmdW5jdGlvbiBPYyhlKXtjb25zdCB0PWVzKCgpPT5PKFtoKGUpLEMoKSxCKCksdG8oKSx4KHQpLFooaCgpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIGNvKGUsdCl7cmV0dXJuIG5ldyBXcih7dHlwZToicGlwZSIsaW46c28oZSksb3V0OnR9KX1jb25zdCBydj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55OiRyLFpvZEFycmF5OklyLFpvZEJhc2U2NDpHbixab2RCYXNlNjRVUkw6UW4sWm9kQmlnSW50Ok10LFpvZEJpZ0ludEZvcm1hdDplbyxab2RCb29sZWFuOmp0LFpvZENJRFJ2NDpLbixab2RDSURSdjY6V24sWm9kQ1VJRDpMbixab2RDVUlEMjpCbixab2RDYXRjaDpWcixab2RDb2RlYzpIdCxab2RDcmVkaXRDYXJkOnZyLFpvZEN1c3RvbTpGdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6R2UsWm9kRGF0ZTpvbyxab2REZWZhdWx0OkRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpQcixab2RFMTY0OlluLFpvZEVtYWlsOmpuLFpvZEVtb2ppOnFuLFpvZEVudW06YXQsWm9kRXhhY3RPcHRpb25hbDppbyxab2RGaWxlOlpyLFpvZEZ1bmN0aW9uOm5zLFpvZEdVSUQ6TW4sWm9kSUJBTjp5cixab2RJUHY0OlZuLFpvZElQdjY6Sm4sWm9kSVNPRGF0ZTpBdCxab2RJU09EYXRlVGltZTpFdCxab2RJU09EdXJhdGlvbjpSdCxab2RJU09UaW1lOk90LFpvZEluc3RhbmNlT2Y6aXMsWm9kSW50ZXJzZWN0aW9uOkNyLFpvZEpXVDpYbixab2RLU1VJRDpGbixab2RMYXp5OlhyLFpvZExpdGVyYWw6TnIsWm9kTUFDOmJyLFpvZE1hcDpPcixab2ROYU46S3IsWm9kTmFub0lEOkRuLFpvZE5ldmVyOnpyLFpvZE5vbk9wdGlvbmFsOmFvLFpvZE51bGw6d3IsWm9kTnVsbGFibGU6cXIsWm9kTnVtYmVyOlp0LFpvZE51bWJlckZvcm1hdDpRZSxab2RPYmplY3Q6cXQsWm9kT3B0aW9uYWw6QnQsWm9kUGlwZTpVdCxab2RQcmVmYXVsdDpCcixab2RQcmVwcm9jZXNzOldyLFpvZFByb21pc2U6dHMsWm9kUmVhZG9ubHk6R3IsWm9kUmVjb3JkOml0LFpvZFNldDpScixab2RTdHJpbmc6Q3QsWm9kU3RyaW5nRm9ybWF0OlUsWm9kU3VjY2VzczpGcixab2RTeW1ib2w6X3IsWm9kVGVtcGxhdGVMaXRlcmFsOllyLFpvZFRyYW5zZm9ybTpqcixab2RUdXBsZTpFcixab2RUeXBlOkUsWm9kVUxJRDpVbixab2RVUkw6TnQsWm9kVVVJRDpDZSxab2RVbmRlZmluZWQ6a3IsWm9kVW5pb246RHQsWm9kVW5rbm93bjpTcixab2RWb2lkOlRyLFpvZFhJRDpIbixab2RYb3I6eHIsX1pvZFN0cmluZzpabixfZGVmYXVsdDpMcixfZnVuY3Rpb246JHQsYW55Om5vLGFycmF5OngsYmFzZTY0OkZhLGJhc2U2NHVybDpWYSxiaWdpbnQ6aWMsYm9vbGVhbjpCLGNhdGNoOkpyLGNoZWNrOnhjLGNpZHJ2NDpVYSxjaWRydjY6SGEsY29kZWM6U2MsY3JlZGl0Q2FyZDpLYSxjdWlkOk5hLGN1aWQyOlphLGN1cnJlbmN5Q29kZTplYyxjdXN0b206b3MsZGF0ZTpkYyxkZXNjcmliZTpQYyxkaXNjcmltaW5hdGVkVW5pb246cm8sZTE2NDpKYSxlbWFpbDp6YSxlbW9qaTpPYSxlbnVtOmllLGV4YWN0T3B0aW9uYWw6TXIsZmlsZTpfYyxmbG9hdDMyOm5jLGZsb2F0NjQ6b2MsZnVuY3Rpb246JHQsZ3VpZDpUYSxoYXNoOnRjLGhleDpYYSxob3N0bmFtZTpZYSxodHRwVXJsOkFhLGliYW46V2EsaW5zdGFuY2VvZjpFYyxpbnQ6b24saW50MzI6cmMsaW50NjQ6YWMsaW50ZXJzZWN0aW9uOkx0LGludmVydENvZGVjOnpjLGlwdjQ6RGEsaXB2NjpCYSxqc29uOk9jLGp3dDpHYSxrZXlvZjpwYyxrc3VpZDpxYSxsYXp5OmVzLGxpdGVyYWw6bSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDpnYyxtYWM6TGEsbWFwOmJjLG1ldGE6Q2MsbmFuOiRjLG5hbm9pZDpSYSxuYXRpdmVFbnVtOnljLG5ldmVyOnN0LG5vbm9wdGlvbmFsOkhyLG51bGw6dG8sbnVsbGFibGU6d3QsbnVsbGlzaDprYyxudW1iZXI6QyxvYmplY3Q6YixvcHRpb25hbDpKLHBhcnRpYWxSZWNvcmQ6bWMscGlwZTpybixwcmVmYXVsdDpVcixwcmVwcm9jZXNzOmNvLHByb21pc2U6SWMscmVhZG9ubHk6UXIscmVjb3JkOloscmVmaW5lOnJzLHNldDp2YyxzdHJpY3RPYmplY3Q6aGMsc3RyaW5nOmgsc3RyaW5nRm9ybWF0OlFhLHN0cmluZ2Jvb2w6QWMsc3VjY2Vzczp3YyxzdXBlclJlZmluZTpzcyxzeW1ib2w6dWMsdGVtcGxhdGVMaXRlcmFsOlRjLHRyYW5zZm9ybTpzbyx0dXBsZTpBcix1aW50MzI6c2MsdWludDY0OmNjLHVsaWQ6amEsdW5kZWZpbmVkOmt0LHVuaW9uOk8sdW5rbm93bjpMLHVybDpFYSx1dWlkOklhLHV1aWR2NDp4YSx1dWlkdjY6UGEsdXVpZHY3OkNhLHZvaWQ6bGMseGlkOk1hLHhvcjpmY30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxvZj17aW52YWxpZF90eXBlOiJpbnZhbGlkX3R5cGUiLHRvb19iaWc6InRvb19iaWciLHRvb19zbWFsbDoidG9vX3NtYWxsIixpbnZhbGlkX2Zvcm1hdDoiaW52YWxpZF9mb3JtYXQiLG5vdF9tdWx0aXBsZV9vZjoibm90X211bHRpcGxlX29mIix1bnJlY29nbml6ZWRfa2V5czoidW5yZWNvZ25pemVkX2tleXMiLGludmFsaWRfdW5pb246ImludmFsaWRfdW5pb24iLGludmFsaWRfa2V5OiJpbnZhbGlkX2tleSIsaW52YWxpZF9lbGVtZW50OiJpbnZhbGlkX2VsZW1lbnQiLGludmFsaWRfdmFsdWU6ImludmFsaWRfdmFsdWUiLGN1c3RvbToiY3VzdG9tIn07ZnVuY3Rpb24gcmYoZSl7b2Uoe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiBzZigpe3JldHVybiBvZSgpLmN1c3RvbUVycm9yfXZhciBObztOb3x8KE5vPXt9KTtmdW5jdGlvbiBhZihlKXtyZXR1cm4gaWEoRXQsZSl9ZnVuY3Rpb24gc3YoZSl7cmV0dXJuIGFhKEF0LGUpfWZ1bmN0aW9uIGl2KGUpe3JldHVybiBjYShPdCxlKX1mdW5jdGlvbiBhdihlKXtyZXR1cm4gdWEoUnQsZSl9Y29uc3QgUmM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZElTT0RhdGU6QXQsWm9kSVNPRGF0ZVRpbWU6RXQsWm9kSVNPRHVyYXRpb246UnQsWm9kSVNPVGltZTpPdCxkYXRlOnN2LGRhdGV0aW1lOmFmLGR1cmF0aW9uOmF2LHRpbWU6aXZ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksej17Li4ucnYsLi4ubnYsaXNvOlJjfSxjdj1uZXcgU2V0KFsiJHNjaGVtYSIsIiRyZWYiLCIkZGVmcyIsImRlZmluaXRpb25zIiwiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiLCJ0eXBlIiwiZW51bSIsImNvbnN0IiwiYW55T2YiLCJvbmVPZiIsImFsbE9mIiwibm90IiwicHJvcGVydGllcyIsInJlcXVpcmVkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsInByb3BlcnR5TmFtZXMiLCJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyIsIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJtaW5JdGVtcyIsIm1heEl0ZW1zIiwidW5pcXVlSXRlbXMiLCJjb250YWlucyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiLCJtaW5MZW5ndGgiLCJtYXhMZW5ndGgiLCJwYXR0ZXJuIiwiZm9ybWF0IiwibWluaW11bSIsIm1heGltdW0iLCJleGNsdXNpdmVNaW5pbXVtIiwiZXhjbHVzaXZlTWF4aW11bSIsIm11bHRpcGxlT2YiLCJkZXNjcmlwdGlvbiIsImRlZmF1bHQiLCJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJpZiIsInRoZW4iLCJlbHNlIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVudFJlcXVpcmVkIiwibnVsbGFibGUiLCJyZWFkT25seSJdKTtmdW5jdGlvbiB1dihlLHQpe2NvbnN0IG49ZS4kc2NoZW1hO3JldHVybiBuPT09Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj8iZHJhZnQtMjAyMC0xMiI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiPyJkcmFmdC03IjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI/ImRyYWZ0LTQiOnQ/PyJkcmFmdC0yMDIwLTEyIn1mdW5jdGlvbiBadShlLHQpe3JldHVybiBlLm1hcCgobixvKT0+bzx0P246bi5vcHRpb25hbCgpKX1mdW5jdGlvbiBsdihlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIGR2KGUsdCl7aWYoIWUuc3RhcnRzV2l0aCgiIyIpKXRocm93IG5ldyBFcnJvcigiRXh0ZXJuYWwgJHJlZiBpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IGxvY2FsIHJlZnMgKCMvLi4uKSBhcmUgYWxsb3dlZCIpO2NvbnN0IG49ZS5zbGljZSgxKS5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKTtpZihuLmxlbmd0aD09PTApcmV0dXJuIHQucm9vdFNjaGVtYTtjb25zdCBvPXQudmVyc2lvbj09PSJkcmFmdC0yMDIwLTEyIj8iJGRlZnMiOiJkZWZpbml0aW9ucyI7aWYoblswXT09PW8pe2NvbnN0IHI9blsxXT09PXZvaWQgMD92b2lkIDA6bHYoblsxXSk7aWYoIXJ8fCF0LmRlZnNbcl0pdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCk7cmV0dXJuIHQuZGVmc1tyXX10aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKX1mdW5jdGlvbiBwdihlLHQpe3JldHVybiB6LnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKHR5cGVvZiByIT0ib2JqZWN0Inx8cj09PW51bGx8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuO2NvbnN0IHM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocik7aWYodC5taW5Qcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5Qcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gc21hbGw6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlID49JHt0Lm1pblByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5tYXhQcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4UHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIGJpZzogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPD0ke3QubWF4UHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0LmtleVNjaGVtYSlmb3IoY29uc3QgYSBvZiBzKXtjb25zdCBpPXQua2V5U2NoZW1hLnNhZmVQYXJzZShhKTtpLnN1Y2Nlc3N8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmkuZXJyb3IuaXNzdWVzLGlucHV0OmEscGF0aDpbYV0sY29udGludWU6ITB9KX19KS5waXBlKGUpfWZ1bmN0aW9uIGpzKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuInoiO2NvbnN0IG49dHlwZW9mIGU7aWYobiE9PSJvYmplY3QiKXtpZihuPT09Im51bWJlciImJk51bWJlci5pc05hTihlKSlyZXR1cm4gbnVsbDtjb25zdCBvPVN0cmluZyhlKTtyZXR1cm5gJHtuWzBdfSR7by5sZW5ndGh9OiR7b31gfWlmKHQuaGFzKGUpKXJldHVybiBudWxsO3QuYWRkKGUpO3RyeXtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCBzPVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGk9anMoYSx0KTtpZihpPT09bnVsbClyZXR1cm4gbnVsbDtzLnB1c2goaSl9cmV0dXJuYGEke3MubGVuZ3RofTpbJHtzLmpvaW4oIiwiKX1dYH1jb25zdCBvPU9iamVjdC5rZXlzKGUpLnNvcnQoKSxyPVtdO2Zvcihjb25zdCBzIG9mIG8pe2NvbnN0IGE9anMoZVtzXSx0KTtpZihhPT09bnVsbClyZXR1cm4gbnVsbDtyLnB1c2goYCR7cy5sZW5ndGh9OiR7c309JHthfWApfXJldHVybmBvJHtyLmxlbmd0aH06eyR7ci5qb2luKCIsIil9fWB9ZmluYWxseXt0LmRlbGV0ZShlKX19Y29uc3QgaHY9bmV3IFNldChbIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbnRhaW5zIiwicHJvcGVydHlOYW1lcyIsIm5vdCIsImlmIiwidGhlbiIsImVsc2UiLCJhbGxPZiIsImFueU9mIiwib25lT2YiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiY29udGVudFNjaGVtYSJdKSxmdj1uZXcgU2V0KFsicHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVuY2llcyIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiXSk7ZnVuY3Rpb24gWHQoZSl7cmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGw/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoWHQpOnR5cGVvZiBlLiRyZWY9PSJzdHJpbmciPyEwOk9iamVjdC5lbnRyaWVzKGUpLnNvbWUoKFt0LG5dKT0+aHYuaGFzKHQpP1h0KG4pOiFmdi5oYXModCl8fHR5cGVvZiBuIT0ib2JqZWN0Inx8bj09PW51bGw/ITE6T2JqZWN0LnZhbHVlcyhuKS5zb21lKFh0KSl9ZnVuY3Rpb24ganUoZSl7cmV0dXJuIGU9PT0xPyJlbGVtZW50IjoiZWxlbWVudHMifWZ1bmN0aW9uIG12KGUsdCl7cmV0dXJuIHoudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYodC51bmlxdWVJdGVtcz09PSEwKXtjb25zdCBzPW5ldyBNYXA7Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2NvbnN0IGk9anMoclthXSxuZXcgU2V0KTtpZihpPT09bnVsbCljb250aW51ZTtjb25zdCBsPXMuZ2V0KGkpO2lmKGw9PT12b2lkIDApe3Muc2V0KGksYSk7Y29udGludWV9by5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBpdGVtcyBtdXN0IGJlIHVuaXF1ZTogZWxlbWVudCBhdCBpbmRleCAke2F9IGR1cGxpY2F0ZXMgdGhlIG9uZSBhdCBpbmRleCAke2x9YCxpbnB1dDpyLHBhdGg6W2FdLGNvbnRpbnVlOiEwfSl9fWlmKHQuY29udGFpbnNTY2hlbWEpe2NvbnN0IHM9dC5taW5Db250YWlucz8/MSxhPXQubWF4Q29udGFpbnMhPT12b2lkIDA/dC5tYXhDb250YWlucysxOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgaT0wO2Zvcihjb25zdCBsIG9mIHIpaWYodC5jb250YWluc1NjaGVtYS5zYWZlUGFyc2UobCkuc3VjY2VzcyYmKytpPj1hKWJyZWFrO2k8cyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHtzfSBtYXRjaGluZyAke2p1KHMpfTsgZm91bmQgJHtpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pLHQubWF4Q29udGFpbnMhPT12b2lkIDAmJmk+dC5tYXhDb250YWlucyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke3QubWF4Q29udGFpbnN9IG1hdGNoaW5nICR7anUodC5tYXhDb250YWlucyl9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSl9fX0pLnBpcGUoZSl9ZnVuY3Rpb24gTXUoZSx0KXtpZihlIT09ITEpcmV0dXJuIGU9PT12b2lkIDB8fGU9PT0hMD96LmFueSgpOmxlKGUsdCl9Y29uc3QgZ3Y9L14oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkOlswLTVdXGQoPzpcLlxkKyk/KD86WnxbKy1dKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZCkkLztmdW5jdGlvbiBjZihlLHQpe2lmKGUubm90IT09dm9pZCAwKXtpZih0eXBlb2YgZS5ub3Q9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlLm5vdCkubGVuZ3RoPT09MClyZXR1cm4gei5uZXZlcigpO3Rocm93IG5ldyBFcnJvcigibm90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWm9kIChleGNlcHQgeyBub3Q6IHt9IH0gZm9yIG5ldmVyKSIpfWlmKGUudW5ldmFsdWF0ZWRJdGVtcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkSXRlbXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmlmIT09dm9pZCAwfHxlLnRoZW4hPT12b2lkIDB8fGUuZWxzZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvbmRpdGlvbmFsIHNjaGVtYXMgKGlmL3RoZW4vZWxzZSkgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmRlcGVuZGVudFNjaGVtYXMhPT12b2lkIDB8fGUuZGVwZW5kZW50UmVxdWlyZWQhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJkZXBlbmRlbnRTY2hlbWFzIGFuZCBkZXBlbmRlbnRSZXF1aXJlZCBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuJHJlZil7Y29uc3Qgcj1lLiRyZWY7aWYodC5yZWZzLmhhcyhyKSlyZXR1cm4gdC5yZWZzLmdldChyKTtpZih0LnByb2Nlc3NpbmcuaGFzKHIpKXJldHVybiB6LmxhenkoKCk9PntpZighdC5yZWZzLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBub3QgcmVzb2x2ZWQ6ICR7cn1gKTtyZXR1cm4gdC5yZWZzLmdldChyKX0pO3QucHJvY2Vzc2luZy5hZGQocik7Y29uc3Qgcz1kdihyLHQpLGE9bGUocyx0KTtyZXR1cm4gdC5yZWZzLnNldChyLGEpLHQucHJvY2Vzc2luZy5kZWxldGUociksYX1pZihlLmVudW0hPT12b2lkIDApe2NvbnN0IHI9ZS5lbnVtO2lmKHQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJmUubnVsbGFibGU9PT0hMCYmci5sZW5ndGg9PT0xJiZyWzBdPT09bnVsbClyZXR1cm4gei5udWxsKCk7aWYoci5sZW5ndGg9PT0wKXJldHVybiB6Lm5ldmVyKCk7aWYoci5sZW5ndGg9PT0xKXJldHVybiB6LmxpdGVyYWwoclswXSk7aWYoci5ldmVyeShhPT50eXBlb2YgYT09InN0cmluZyIpKXJldHVybiB6LmVudW0ocik7Y29uc3Qgcz1yLm1hcChhPT56LmxpdGVyYWwoYSkpO3JldHVybiBzLmxlbmd0aDwyP3NbMF06ei51bmlvbihbc1swXSxzWzFdLC4uLnMuc2xpY2UoMildKX1pZihlLmNvbnN0IT09dm9pZCAwKXJldHVybiB6LmxpdGVyYWwoZS5jb25zdCk7Y29uc3Qgbj1lLnR5cGU7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3Qgcj1uLm1hcChzPT57Y29uc3QgYT17Li4uZSx0eXBlOnN9O3JldHVybiBjZihhLHQpfSk7cmV0dXJuIHIubGVuZ3RoPT09MD96Lm5ldmVyKCk6ci5sZW5ndGg9PT0xP3JbMF06ei51bmlvbihyKX1pZighbilyZXR1cm4gei5hbnkoKTtsZXQgbztzd2l0Y2gobil7Y2FzZSJzdHJpbmciOntsZXQgcj16LnN0cmluZygpO2lmKGUuZm9ybWF0KXtjb25zdCBzPWUuZm9ybWF0O3M9PT0iZW1haWwiP3I9ci5jaGVjayh6LmVtYWlsKCkpOnM9PT0idXJpInx8cz09PSJ1cmktcmVmZXJlbmNlIj9yPXIuY2hlY2soei51cmwoKSk6cz09PSJ1dWlkInx8cz09PSJndWlkIj9yPXIuY2hlY2soei51dWlkKCkpOnM9PT0iZGF0ZS10aW1lIj9yPXIuY2hlY2soei5pc28uZGF0ZXRpbWUoe29mZnNldDohMH0pKTpzPT09ImRhdGUiP3I9ci5jaGVjayh6Lmlzby5kYXRlKCkpOnM9PT0idGltZSI/cj1yLmNoZWNrKHoucmVnZXgoZ3YpKTpzPT09ImR1cmF0aW9uIj9yPXIuY2hlY2soei5pc28uZHVyYXRpb24oKSk6cz09PSJob3N0bmFtZSI/cj1yLmNoZWNrKHouaG9zdG5hbWUoKSk6cz09PSJpcHY0Ij9yPXIuY2hlY2soei5pcHY0KCkpOnM9PT0iaXB2NiI/cj1yLmNoZWNrKHouaXB2NigpKTpzPT09Im1hYyI/cj1yLmNoZWNrKHoubWFjKCkpOnM9PT0iY2lkciI/cj1yLmNoZWNrKHouY2lkcnY0KCkpOnM9PT0iY2lkci12NiI/cj1yLmNoZWNrKHouY2lkcnY2KCkpOnM9PT0iYmFzZTY0Ij9yPXIuY2hlY2soei5iYXNlNjQoKSk6cz09PSJiYXNlNjR1cmwiP3I9ci5jaGVjayh6LmJhc2U2NHVybCgpKTpzPT09ImUxNjQiP3I9ci5jaGVjayh6LmUxNjQoKSk6cz09PSJjcmVkaXRfY2FyZCI/cj1yLmNoZWNrKHouY3JlZGl0Q2FyZCgpKTpzPT09ImliYW4iP3I9ci5jaGVjayh6LmliYW4oKSk6cz09PSJqd3QiP3I9ci5jaGVjayh6Lmp3dCgpKTpzPT09ImVtb2ppIj9yPXIuY2hlY2soei5lbW9qaSgpKTpzPT09Im5hbm9pZCI/cj1yLmNoZWNrKHoubmFub2lkKCkpOnM9PT0iY3VpZCI/cj1yLmNoZWNrKHouY3VpZCgpKTpzPT09ImN1aWQyIj9yPXIuY2hlY2soei5jdWlkMigpKTpzPT09InVsaWQiP3I9ci5jaGVjayh6LnVsaWQoKSk6cz09PSJ4aWQiP3I9ci5jaGVjayh6LnhpZCgpKTpzPT09ImtzdWlkIiYmKHI9ci5jaGVjayh6LmtzdWlkKCkpKX10eXBlb2YgZS5taW5MZW5ndGg9PSJudW1iZXIiJiYocj1yLm1pbihlLm1pbkxlbmd0aCkpLHR5cGVvZiBlLm1heExlbmd0aD09Im51bWJlciImJihyPXIubWF4KGUubWF4TGVuZ3RoKSksZS5wYXR0ZXJuJiYocj1yLnJlZ2V4KG5ldyBSZWdFeHAoZS5wYXR0ZXJuKSkpLG89cjticmVha31jYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjp7bGV0IHI9bj09PSJpbnRlZ2VyIj96Lm51bWJlcigpLmludCgpOnoubnVtYmVyKCk7dHlwZW9mIGUubWluaW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWluaW11bSE9PSEwJiYocj1yLm1pbihlLm1pbmltdW0pKSx0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNYXhpbXVtIT09ITAmJihyPXIubWF4KGUubWF4aW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1pbmltdW09PSJudW1iZXIiP3I9ci5ndChlLmV4Y2x1c2l2ZU1pbmltdW0pOmUuZXhjbHVzaXZlTWluaW11bT09PSEwJiZ0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmKHI9ci5ndChlLm1pbmltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNYXhpbXVtPT0ibnVtYmVyIj9yPXIubHQoZS5leGNsdXNpdmVNYXhpbXVtKTplLmV4Y2x1c2l2ZU1heGltdW09PT0hMCYmdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJihyPXIubHQoZS5tYXhpbXVtKSksdHlwZW9mIGUubXVsdGlwbGVPZj09Im51bWJlciImJihyPXIubXVsdGlwbGVPZihlLm11bHRpcGxlT2YpKSxvPXI7YnJlYWt9Y2FzZSJib29sZWFuIjp7bz16LmJvb2xlYW4oKTticmVha31jYXNlIm51bGwiOntvPXoubnVsbCgpO2JyZWFrfWNhc2Uib2JqZWN0Ijp7Y29uc3Qgcj17fSxzPWUucHJvcGVydGllc3x8e30sYT1uZXcgU2V0KGUucmVxdWlyZWR8fFtdKSxpPXR5cGVvZiBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT0ib2JqZWN0Ij9sZShlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHQpOnZvaWQgMDtmb3IoY29uc3RbZixnXW9mIE9iamVjdC5lbnRyaWVzKHMpKXtjb25zdCB2PWxlKGcsdCk7Y3QocixmLGEuaGFzKGYpP3Y6di5vcHRpb25hbCgpKX1pZihlLnBhdHRlcm5Qcm9wZXJ0aWVzKXtjb25zdCBmPWUucGF0dGVyblByb3BlcnRpZXMsZz1PYmplY3Qua2V5cyhmKSx2PVtdO2Zvcihjb25zdCB3IG9mIGcpe2NvbnN0IFM9bGUoZlt3XSx0KSxqPXouc3RyaW5nKCkucmVnZXgobmV3IFJlZ0V4cCh3KSk7di5wdXNoKHoubG9vc2VSZWNvcmQoaixTKSl9Y29uc3QgXz1bXTtpZihPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmXy5wdXNoKHoub2JqZWN0KHIpLnBhc3N0aHJvdWdoKCkpLF8ucHVzaCguLi52KSxfLmxlbmd0aD09PTApbz16Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKTtlbHNlIGlmKF8ubGVuZ3RoPT09MSlvPV9bMF07ZWxzZXtsZXQgdz16LmludGVyc2VjdGlvbihfWzBdLF9bMV0pO2ZvcihsZXQgUz0yO1M8Xy5sZW5ndGg7UysrKXc9ei5pbnRlcnNlY3Rpb24odyxfW1NdKTtvPXd9aWYoZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExKXtjb25zdCB3PU9iamVjdC5rZXlzKHIpLFM9Zy5tYXAoTj0+bmV3IFJlZ0V4cChOKSksaj1vO289by5jaGVjayhOPT57aWYoIUplKE4udmFsdWUpKXJldHVybjtjb25zdCBJPVtdO2Zvcihjb25zdCByZSBvZiBPYmplY3Qua2V5cyhOLnZhbHVlKSl3LmluY2x1ZGVzKHJlKXx8Uy5zb21lKFc9PlcudGVzdChyZSkpfHxJLnB1c2gocmUpO0kubGVuZ3RoJiZOLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czpJLGlucHV0Ok4udmFsdWUsaW5zdDpqfSl9KX19ZWxzZXtjb25zdCBmPXoub2JqZWN0KHIpO2UuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMT9vPWYuc3RyaWN0KCk6aT9vPWYuY2F0Y2hhbGwoaSk6bz1mLnBhc3N0aHJvdWdoKCl9Y29uc3QgbD1lLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJmUucHJvcGVydHlOYW1lcyE9PSEwLHU9dHlwZW9mIGUubWluUHJvcGVydGllcz09Im51bWJlciI/ZS5taW5Qcm9wZXJ0aWVzOnZvaWQgMCxkPXR5cGVvZiBlLm1heFByb3BlcnRpZXM9PSJudW1iZXIiP2UubWF4UHJvcGVydGllczp2b2lkIDA7aWYobHx8dSE9PXZvaWQgMHx8ZCE9PXZvaWQgMCl7bGV0IGY7aWYobCl7Y29uc3QgZz10eXBlb2YgZS5wcm9wZXJ0eU5hbWVzPT0ib2JqZWN0IiYmZS5wcm9wZXJ0eU5hbWVzLnR5cGU9PT12b2lkIDA/e3R5cGU6InN0cmluZyIsLi4uZS5wcm9wZXJ0eU5hbWVzfTplLnByb3BlcnR5TmFtZXM7Zj1sZShnLHQpfW89cHYobyx7a2V5U2NoZW1hOmYsbWluUHJvcGVydGllczp1LG1heFByb3BlcnRpZXM6ZH0pfWJyZWFrfWNhc2UiYXJyYXkiOntjb25zdCByPWUucHJlZml4SXRlbXMscz1lLml0ZW1zO2lmKHImJkFycmF5LmlzQXJyYXkocikpe2NvbnN0IGE9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxpPXIubWFwKGY9PmxlKGYsdCkpLGw9WnUoaSxhKSx1PUFycmF5LmlzQXJyYXkocyk/dm9pZCAwOk11KHMsdCksZD16LnR1cGxlKGwpO289dT9kLnJlc3QodSk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soei5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soei5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGE9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxpPXMubWFwKGY9PmxlKGYsdCkpLGw9WnUoaSxhKSx1PU11KGUuYWRkaXRpb25hbEl0ZW1zLHQpLGQ9ei50dXBsZShsKTtvPXU/ZC5yZXN0KHUpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHoubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHoubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihzIT09dm9pZCAwKXtjb25zdCBhPWxlKHMsdCk7bGV0IGk9ei5hcnJheShhKTt0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihpPWkubWluKGUubWluSXRlbXMpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihpPWkubWF4KGUubWF4SXRlbXMpKSxvPWl9ZWxzZSBvPXouYXJyYXkoei5hbnkoKSk7KGUudW5pcXVlSXRlbXM9PT0hMHx8ZS5jb250YWlucyE9PXZvaWQgMCkmJihvPW12KG8se3VuaXF1ZUl0ZW1zOmUudW5pcXVlSXRlbXM9PT0hMCxjb250YWluc1NjaGVtYTplLmNvbnRhaW5zIT09dm9pZCAwP2xlKGUuY29udGFpbnMsdCk6dm9pZCAwLG1pbkNvbnRhaW5zOnR5cGVvZiBlLm1pbkNvbnRhaW5zPT0ibnVtYmVyIj9lLm1pbkNvbnRhaW5zOnZvaWQgMCxtYXhDb250YWluczp0eXBlb2YgZS5tYXhDb250YWlucz09Im51bWJlciI/ZS5tYXhDb250YWluczp2b2lkIDB9KSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGU6ICR7bn1gKX1yZXR1cm4gb31mdW5jdGlvbiBsZShlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/ei5hbnkoKTp6Lm5ldmVyKCk7bGV0IG49Y2YoZSx0KTtjb25zdCBvPWUudHlwZXx8ZS5lbnVtIT09dm9pZCAwfHxlLmNvbnN0IT09dm9pZCAwO2lmKGUuYW55T2YmJkFycmF5LmlzQXJyYXkoZS5hbnlPZikpe2NvbnN0IGk9ZS5hbnlPZi5tYXAodT0+bGUodSx0KSksbD16LnVuaW9uKGkpO249bz96LmludGVyc2VjdGlvbihuLGwpOmx9aWYoZS5vbmVPZiYmQXJyYXkuaXNBcnJheShlLm9uZU9mKSl7Y29uc3QgaT1lLm9uZU9mLm1hcCh1PT5sZSh1LHQpKSxsPXoueG9yKGkpO249bz96LmludGVyc2VjdGlvbihuLGwpOmx9aWYoZS5hbGxPZiYmQXJyYXkuaXNBcnJheShlLmFsbE9mKSlpZihlLmFsbE9mLmxlbmd0aD09PTApbj1vP246ei5hbnkoKTtlbHNle2xldCBpPW8/bjpsZShlLmFsbE9mWzBdLHQpO2NvbnN0IGw9bz8wOjE7Zm9yKGxldCB1PWw7dTxlLmFsbE9mLmxlbmd0aDt1KyspaT16LmludGVyc2VjdGlvbihpLGxlKGUuYWxsT2ZbdV0sdCkpO249aX1lLm51bGxhYmxlPT09ITAmJnQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJihuPXoubnVsbGFibGUobikpLGUucmVhZE9ubHk9PT0hMCYmKG49ei5yZWFkb25seShuKSksZS5kZWZhdWx0IT09dm9pZCAwJiYobj1uLmRlZmF1bHQoZS5kZWZhdWx0KSk7Y29uc3Qgcj17fSxzPVsiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiXTtmb3IoY29uc3QgaSBvZiBzKWkgaW4gZSYmKHJbaV09ZVtpXSk7Y29uc3QgYT1bImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIl07Zm9yKGNvbnN0IGkgb2YgYSlpIGluIGUmJihyW2ldPWVbaV0pO2lmKGUudHlwZT09PSJvYmplY3QiJiZlLiRyZWY9PT12b2lkIDApe2UucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmIVh0KGUucHJvcGVydHlOYW1lcykmJihyLnByb3BlcnR5TmFtZXM9ZS5wcm9wZXJ0eU5hbWVzKTtmb3IoY29uc3QgaSBvZlsibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiXSllW2ldIT09dm9pZCAwJiYocltpXT1lW2ldKX1pZihlLnR5cGU9PT0iYXJyYXkiJiZlLiRyZWY9PT12b2lkIDApe2UuY29udGFpbnMhPT12b2lkIDAmJiFYdChlLmNvbnRhaW5zKSYmKHIuY29udGFpbnM9ZS5jb250YWlucyk7Zm9yKGNvbnN0IGkgb2ZbInVuaXF1ZUl0ZW1zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyJdKWVbaV0hPT12b2lkIDAmJihyW2ldPWVbaV0pfWZvcihjb25zdCBpIG9mIE9iamVjdC5rZXlzKGUpKWN2LmhhcyhpKXx8Y3QocixpLGVbaV0pO3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmdC5yZWdpc3RyeS5hZGQobixyKSxlLmRlc2NyaXB0aW9uJiYobj1uLmRlc2NyaWJlKGUuZGVzY3JpcHRpb24pKSxufWZ1bmN0aW9uIHVmKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT96LmFueSgpOnoubmV2ZXIoKTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoImZyb21KU09OU2NoZW1hIGlucHV0IGlzIG5vdCB2YWxpZCBKU09OIChwb3NzaWJseSBjeWNsaWMpOyB1c2UgJGRlZnMvJHJlZiBmb3IgcmVjdXJzaXZlIHNjaGVtYXMiKX1jb25zdCBvPXV2KG4sdD8uZGVmYXVsdFRhcmdldCkscj1uLiRkZWZzfHxuLmRlZmluaXRpb25zfHx7fSxzPXt2ZXJzaW9uOm8sZGVmczpyLHJlZnM6bmV3IE1hcCxwcm9jZXNzaW5nOm5ldyBTZXQscm9vdFNjaGVtYTpuLHJlZ2lzdHJ5OnQ/LnJlZ2lzdHJ5Pz8kZX07cmV0dXJuIGxlKG4scyl9ZnVuY3Rpb24gbGYoZSl7cmV0dXJuIGRhKGUse29iamVjdDp0PT50LnBhcnRpYWwoKSx1bmlvbjp0PT57Y29uc3Qgbj10Ll96b2QuZGVmO3JldHVybiBuLmRpc2NyaW1pbmF0b3I9PT12b2lkIDA/dDpPKG4ub3B0aW9ucyl9fSl9ZnVuY3Rpb24gYnYoZSx0KXtpZighdD8ubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49ZS5fem9kLmRlZjtyZXR1cm4gUShlLHVlKG4se2NoZWNrczpbLi4ubi5jaGVja3M/P1tdLC4uLnRdfSkse3BhcmVudDohMH0pfWZ1bmN0aW9uIGRmKGUpe3JldHVybiBidihlLm91dCxlLmNoZWNrcyl9ZnVuY3Rpb24gdnYoZSl7cmV0dXJuIGUuaW4uX3pvZC50cmFpdHMuaGFzKCIkWm9kVHJhbnNmb3JtIik/ZGYoZSk6ZS5pbn1mdW5jdGlvbiBwZihlKXtyZXR1cm4gZGEoZSx7cGlwZTp0PT52dih0Ll96b2QuZGVmKSxkZWZhdWx0Oih0LG4pPT5uP0oodC5fem9kLmRlZi5pbm5lclR5cGUpOnQsY2F0Y2g6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGhmKGUpe3JldHVybiBkYShlLHtwaXBlOnQ9PmRmKHQuX3pvZC5kZWYpLHByZWZhdWx0Oih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiB5dihlKXtyZXR1cm4gZmgoQ3QsZSl9ZnVuY3Rpb24gX3YoZSl7cmV0dXJuIHloKFp0LGUpfWZ1bmN0aW9uIGt2KGUpe3JldHVybiBUaChqdCxlKX1mdW5jdGlvbiB3dihlKXtyZXR1cm4geGgoTXQsZSl9ZnVuY3Rpb24gJHYoZSl7cmV0dXJuIHFoKG9vLGUpfWNvbnN0IGZmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiaWdpbnQ6d3YsYm9vbGVhbjprdixkYXRlOiR2LG51bWJlcjpfdixzdHJpbmc6eXZ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkscXU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpHcywkaW5wdXQ6RWksJG91dHB1dDpDaSxJTlZBTElEOk9pLE5FVkVSOldzLFRpbWVQcmVjaXNpb246c2EsWm9kQW55OiRyLFpvZEFycmF5OklyLFpvZEJhc2U2NDpHbixab2RCYXNlNjRVUkw6UW4sWm9kQmlnSW50Ok10LFpvZEJpZ0ludEZvcm1hdDplbyxab2RCb29sZWFuOmp0LFpvZENJRFJ2NDpLbixab2RDSURSdjY6V24sWm9kQ1VJRDpMbixab2RDVUlEMjpCbixab2RDYXRjaDpWcixab2RDb2RlYzpIdCxab2RDb21waWxlQXN5bmNFcnJvcjpSaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpOaSxab2RDcmVkaXRDYXJkOnZyLFpvZEN1c3RvbTpGdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6R2UsWm9kRGF0ZTpvbyxab2REZWZhdWx0OkRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpQcixab2RFMTY0OlluLFpvZEVtYWlsOmpuLFpvZEVtb2ppOnFuLFpvZEVudW06YXQsWm9kRXJyb3I6bmYsWm9kRXhhY3RPcHRpb25hbDppbyxab2RGaWxlOlpyLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gTm99LFpvZEZ1bmN0aW9uOm5zLFpvZEdVSUQ6TW4sWm9kSUJBTjp5cixab2RJUHY0OlZuLFpvZElQdjY6Sm4sWm9kSVNPRGF0ZTpBdCxab2RJU09EYXRlVGltZTpFdCxab2RJU09EdXJhdGlvbjpSdCxab2RJU09UaW1lOk90LFpvZEluc3RhbmNlT2Y6aXMsWm9kSW50ZXJzZWN0aW9uOkNyLFpvZElzc3VlQ29kZTpvZixab2RKV1Q6WG4sWm9kS1NVSUQ6Rm4sWm9kTGF6eTpYcixab2RMaXRlcmFsOk5yLFpvZE1BQzpicixab2RNYXA6T3IsWm9kTmFOOktyLFpvZE5hbm9JRDpEbixab2ROZXZlcjp6cixab2ROb25PcHRpb25hbDphbyxab2ROdWxsOndyLFpvZE51bGxhYmxlOnFyLFpvZE51bWJlcjpadCxab2ROdW1iZXJGb3JtYXQ6UWUsWm9kT2JqZWN0OnF0LFpvZE9wdGlvbmFsOkJ0LFpvZFBpcGU6VXQsWm9kUHJlZmF1bHQ6QnIsWm9kUHJlcHJvY2VzczpXcixab2RQcm9taXNlOnRzLFpvZFJlYWRvbmx5OkdyLFpvZFJlYWxFcnJvcjptZSxab2RSZWNvcmQ6aXQsWm9kU2V0OlJyLFpvZFN0cmluZzpDdCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOkZyLFpvZFN5bWJvbDpfcixab2RUZW1wbGF0ZUxpdGVyYWw6WXIsWm9kVHJhbnNmb3JtOmpyLFpvZFR1cGxlOkVyLFpvZFR5cGU6RSxab2RVTElEOlVuLFpvZFVSTDpOdCxab2RVVUlEOkNlLFpvZFVuZGVmaW5lZDprcixab2RVbmlvbjpEdCxab2RVbmtub3duOlNyLFpvZFZvaWQ6VHIsWm9kWElEOkhuLFpvZFhvcjp4cixfWm9kU3RyaW5nOlpuLF9kZWZhdWx0OkxyLF9mdW5jdGlvbjokdCxhbnk6bm8sYXJyYXk6eCxiYXNlNjQ6RmEsYmFzZTY0dXJsOlZhLGJpZ2ludDppYyxib29sZWFuOkIsY2F0Y2g6SnIsY2hlY2s6eGMsY2lkcnY0OlVhLGNpZHJ2NjpIYSxjbG9uZTpRLGNvZGVjOlNjLGNvZXJjZTpmZixjb21waWxlOlppLGNvbmZpZzpvZSxjb3JlOlhoLGNyZWRpdENhcmQ6S2EsY3VpZDpOYSxjdWlkMjpaYSxjdXJyZW5jeUNvZGU6ZWMsY3VzdG9tOm9zLGRhdGU6ZGMsZGVjb2RlOnZhLGRlY29kZUFzeW5jOl9hLGRlZXBQYXJ0aWFsOmxmLGRlc2NyaWJlOlBjLGRpc2NyaW1pbmF0ZWRVbmlvbjpybyxlMTY0OkphLGVtYWlsOnphLGVtb2ppOk9hLGVuY29kZTpiYSxlbmNvZGVBc3luYzp5YSxlbmRzV2l0aDp4bixlbnVtOmllLGV4YWN0T3B0aW9uYWw6TXIsZmlsZTpfYyxmbGF0dGVuRXJyb3I6ZXIsZmxvYXQzMjpuYyxmbG9hdDY0Om9jLGZvcm1hdEVycm9yOnRyLGZyb21KU09OU2NoZW1hOnVmLGZ1bmN0aW9uOiR0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246JGksZ2V0RXJyb3JNYXA6c2YsZ2xvYmFsUmVnaXN0cnk6JGUsZ3Q6cWUsZ3RlOnZlLGd1aWQ6VGEsaGFzaDp0YyxoZXg6WGEsaG9zdG5hbWU6WWEsaHR0cFVybDpBYSxpYmFuOldhLGluY2x1ZGVzOlRuLGlucHV0OnBmLGluc3RhbmNlb2Y6RWMsaW50Om9uLGludDMyOnJjLGludDY0OmFjLGludGVyc2VjdGlvbjpMdCxpbnZlcnRDb2RlYzp6YyxpcHY0OkRhLGlwdjY6QmEsaXNvOlJjLGpzb246T2Msand0OkdhLGtleW9mOnBjLGtzdWlkOnFhLGxhenk6ZXMsbGVuZ3RoOnh0LGxpdGVyYWw6bSxsb2NhbGVzOlBpLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOmdjLGxvd2VyY2FzZTpTbixsdDpNZSxsdGU6YmUsbWFjOkxhLG1hcDpiYyxtYXhMZW5ndGg6SXQsbWF4U2l6ZTp1dCxtZW1vaXplcjpjcixtZXRhOkNjLG1pbWU6Q24sbWluTGVuZ3RoOktlLG1pblNpemU6RGUsbXVsdGlwbGVPZjpydCxuYW46JGMsbmFub2lkOlJhLG5hdGl2ZUVudW06eWMsbmVnYXRpdmU6aHIsbmV2ZXI6c3Qsbm9ubmVnYXRpdmU6bXIsbm9ub3B0aW9uYWw6SHIsbm9ucG9zaXRpdmU6ZnIsbm9ybWFsaXplOkVuLG51bGw6dG8sbnVsbGFibGU6d3QsbnVsbGlzaDprYyxudW1iZXI6QyxvYmplY3Q6YixvcHRpb25hbDpKLG91dHB1dDpoZixvdmVyd3JpdGU6QWUscGFyc2U6aGEscGFyc2VBc3luYzpmYSxwYXJ0aWFsUmVjb3JkOm1jLHBpcGU6cm4scG9zaXRpdmU6cHIscHJlZmF1bHQ6VXIscHJlcHJvY2VzczpjbyxwcmV0dGlmeUVycm9yOllzLHByb21pc2U6SWMscHJvcGVydGllczpQbixwcm9wZXJ0eTpncixyZWFkb25seTpRcixyZWNvcmQ6WixyZWZpbmU6cnMscmVnZXg6JG4scmVnZXhlczppcixyZWdpc3RyeTp1cixzYWZlRGVjb2RlOndhLHNhZmVEZWNvZGVBc3luYzpTYSxzYWZlRW5jb2RlOmthLHNhZmVFbmNvZGVBc3luYzokYSxzYWZlUGFyc2U6bWEsc2FmZVBhcnNlQXN5bmM6Z2Esc2V0OnZjLHNldEVycm9yTWFwOnJmLHNpemU6VHQsc2x1Z2lmeTpObixzdGFydHNXaXRoOkluLHN0cmljdE9iamVjdDpoYyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6UWEsc3RyaW5nYm9vbDpBYyxzdWNjZXNzOndjLHN1cGVyUmVmaW5lOnNzLHN5bWJvbDp1Yyx0ZW1wbGF0ZUxpdGVyYWw6VGMsdG9KU09OU2NoZW1hOmxhLHRvTG93ZXJDYXNlOk9uLHRvVXBwZXJDYXNlOlJuLHRvWm9kOkZvLHRyYW5zZm9ybTpzbyx0cmVlaWZ5RXJyb3I6UXMsdHJpbTpBbix0dXBsZTpBcix1aW50MzI6c2MsdWludDY0OmNjLHVsaWQ6amEsdW5kZWZpbmVkOmt0LHVuaW9uOk8sdW5rbm93bjpMLHVwcGVyY2FzZTp6bix1cmw6RWEsdXRpbDpLcyx1dWlkOklhLHV1aWR2NDp4YSx1dWlkdjY6UGEsdXVpZHY3OkNhLHZhbGlkYXRlOm9yLHZhbGlkYXRlQXN5bmM6cnIsdm9pZDpsYyx3aXRoUGFyc2VyOmppLHhpZDpNYSx4b3I6ZmN9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksU3Y9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpHcywkaW5wdXQ6RWksJG91dHB1dDpDaSxJTlZBTElEOk9pLE5FVkVSOldzLFRpbWVQcmVjaXNpb246c2EsWm9kQW55OiRyLFpvZEFycmF5OklyLFpvZEJhc2U2NDpHbixab2RCYXNlNjRVUkw6UW4sWm9kQmlnSW50Ok10LFpvZEJpZ0ludEZvcm1hdDplbyxab2RCb29sZWFuOmp0LFpvZENJRFJ2NDpLbixab2RDSURSdjY6V24sWm9kQ1VJRDpMbixab2RDVUlEMjpCbixab2RDYXRjaDpWcixab2RDb2RlYzpIdCxab2RDb21waWxlQXN5bmNFcnJvcjpSaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpOaSxab2RDcmVkaXRDYXJkOnZyLFpvZEN1c3RvbTpGdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6R2UsWm9kRGF0ZTpvbyxab2REZWZhdWx0OkRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpQcixab2RFMTY0OlluLFpvZEVtYWlsOmpuLFpvZEVtb2ppOnFuLFpvZEVudW06YXQsWm9kRXJyb3I6bmYsWm9kRXhhY3RPcHRpb25hbDppbyxab2RGaWxlOlpyLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gTm99LFpvZEZ1bmN0aW9uOm5zLFpvZEdVSUQ6TW4sWm9kSUJBTjp5cixab2RJUHY0OlZuLFpvZElQdjY6Sm4sWm9kSVNPRGF0ZTpBdCxab2RJU09EYXRlVGltZTpFdCxab2RJU09EdXJhdGlvbjpSdCxab2RJU09UaW1lOk90LFpvZEluc3RhbmNlT2Y6aXMsWm9kSW50ZXJzZWN0aW9uOkNyLFpvZElzc3VlQ29kZTpvZixab2RKV1Q6WG4sWm9kS1NVSUQ6Rm4sWm9kTGF6eTpYcixab2RMaXRlcmFsOk5yLFpvZE1BQzpicixab2RNYXA6T3IsWm9kTmFOOktyLFpvZE5hbm9JRDpEbixab2ROZXZlcjp6cixab2ROb25PcHRpb25hbDphbyxab2ROdWxsOndyLFpvZE51bGxhYmxlOnFyLFpvZE51bWJlcjpadCxab2ROdW1iZXJGb3JtYXQ6UWUsWm9kT2JqZWN0OnF0LFpvZE9wdGlvbmFsOkJ0LFpvZFBpcGU6VXQsWm9kUHJlZmF1bHQ6QnIsWm9kUHJlcHJvY2VzczpXcixab2RQcm9taXNlOnRzLFpvZFJlYWRvbmx5OkdyLFpvZFJlYWxFcnJvcjptZSxab2RSZWNvcmQ6aXQsWm9kU2V0OlJyLFpvZFN0cmluZzpDdCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOkZyLFpvZFN5bWJvbDpfcixab2RUZW1wbGF0ZUxpdGVyYWw6WXIsWm9kVHJhbnNmb3JtOmpyLFpvZFR1cGxlOkVyLFpvZFR5cGU6RSxab2RVTElEOlVuLFpvZFVSTDpOdCxab2RVVUlEOkNlLFpvZFVuZGVmaW5lZDprcixab2RVbmlvbjpEdCxab2RVbmtub3duOlNyLFpvZFZvaWQ6VHIsWm9kWElEOkhuLFpvZFhvcjp4cixfWm9kU3RyaW5nOlpuLF9kZWZhdWx0OkxyLF9mdW5jdGlvbjokdCxhbnk6bm8sYXJyYXk6eCxiYXNlNjQ6RmEsYmFzZTY0dXJsOlZhLGJpZ2ludDppYyxib29sZWFuOkIsY2F0Y2g6SnIsY2hlY2s6eGMsY2lkcnY0OlVhLGNpZHJ2NjpIYSxjbG9uZTpRLGNvZGVjOlNjLGNvZXJjZTpmZixjb21waWxlOlppLGNvbmZpZzpvZSxjb3JlOlhoLGNyZWRpdENhcmQ6S2EsY3VpZDpOYSxjdWlkMjpaYSxjdXJyZW5jeUNvZGU6ZWMsY3VzdG9tOm9zLGRhdGU6ZGMsZGVjb2RlOnZhLGRlY29kZUFzeW5jOl9hLGRlZXBQYXJ0aWFsOmxmLGRlZmF1bHQ6cXUsZGVzY3JpYmU6UGMsZGlzY3JpbWluYXRlZFVuaW9uOnJvLGUxNjQ6SmEsZW1haWw6emEsZW1vamk6T2EsZW5jb2RlOmJhLGVuY29kZUFzeW5jOnlhLGVuZHNXaXRoOnhuLGVudW06aWUsZXhhY3RPcHRpb25hbDpNcixmaWxlOl9jLGZsYXR0ZW5FcnJvcjplcixmbG9hdDMyOm5jLGZsb2F0NjQ6b2MsZm9ybWF0RXJyb3I6dHIsZnJvbUpTT05TY2hlbWE6dWYsZnVuY3Rpb246JHQsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjokaSxnZXRFcnJvck1hcDpzZixnbG9iYWxSZWdpc3RyeTokZSxndDpxZSxndGU6dmUsZ3VpZDpUYSxoYXNoOnRjLGhleDpYYSxob3N0bmFtZTpZYSxodHRwVXJsOkFhLGliYW46V2EsaW5jbHVkZXM6VG4saW5wdXQ6cGYsaW5zdGFuY2VvZjpFYyxpbnQ6b24saW50MzI6cmMsaW50NjQ6YWMsaW50ZXJzZWN0aW9uOkx0LGludmVydENvZGVjOnpjLGlwdjQ6RGEsaXB2NjpCYSxpc286UmMsanNvbjpPYyxqd3Q6R2Esa2V5b2Y6cGMsa3N1aWQ6cWEsbGF6eTplcyxsZW5ndGg6eHQsbGl0ZXJhbDptLGxvY2FsZXM6UGksbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6Z2MsbG93ZXJjYXNlOlNuLGx0Ok1lLGx0ZTpiZSxtYWM6TGEsbWFwOmJjLG1heExlbmd0aDpJdCxtYXhTaXplOnV0LG1lbW9pemVyOmNyLG1ldGE6Q2MsbWltZTpDbixtaW5MZW5ndGg6S2UsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOnJ0LG5hbjokYyxuYW5vaWQ6UmEsbmF0aXZlRW51bTp5YyxuZWdhdGl2ZTpocixuZXZlcjpzdCxub25uZWdhdGl2ZTptcixub25vcHRpb25hbDpIcixub25wb3NpdGl2ZTpmcixub3JtYWxpemU6RW4sbnVsbDp0byxudWxsYWJsZTp3dCxudWxsaXNoOmtjLG51bWJlcjpDLG9iamVjdDpiLG9wdGlvbmFsOkosb3V0cHV0OmhmLG92ZXJ3cml0ZTpBZSxwYXJzZTpoYSxwYXJzZUFzeW5jOmZhLHBhcnRpYWxSZWNvcmQ6bWMscGlwZTpybixwb3NpdGl2ZTpwcixwcmVmYXVsdDpVcixwcmVwcm9jZXNzOmNvLHByZXR0aWZ5RXJyb3I6WXMscHJvbWlzZTpJYyxwcm9wZXJ0aWVzOlBuLHByb3BlcnR5OmdyLHJlYWRvbmx5OlFyLHJlY29yZDpaLHJlZmluZTpycyxyZWdleDokbixyZWdleGVzOmlyLHJlZ2lzdHJ5OnVyLHNhZmVEZWNvZGU6d2Esc2FmZURlY29kZUFzeW5jOlNhLHNhZmVFbmNvZGU6a2Esc2FmZUVuY29kZUFzeW5jOiRhLHNhZmVQYXJzZTptYSxzYWZlUGFyc2VBc3luYzpnYSxzZXQ6dmMsc2V0RXJyb3JNYXA6cmYsc2l6ZTpUdCxzbHVnaWZ5Ok5uLHN0YXJ0c1dpdGg6SW4sc3RyaWN0T2JqZWN0OmhjLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpRYSxzdHJpbmdib29sOkFjLHN1Y2Nlc3M6d2Msc3VwZXJSZWZpbmU6c3Msc3ltYm9sOnVjLHRlbXBsYXRlTGl0ZXJhbDpUYyx0b0pTT05TY2hlbWE6bGEsdG9Mb3dlckNhc2U6T24sdG9VcHBlckNhc2U6Um4sdG9ab2Q6Rm8sdHJhbnNmb3JtOnNvLHRyZWVpZnlFcnJvcjpRcyx0cmltOkFuLHR1cGxlOkFyLHVpbnQzMjpzYyx1aW50NjQ6Y2MsdWxpZDpqYSx1bmRlZmluZWQ6a3QsdW5pb246Tyx1bmtub3duOkwsdXBwZXJjYXNlOnpuLHVybDpFYSx1dGlsOktzLHV1aWQ6SWEsdXVpZHY0OnhhLHV1aWR2NjpQYSx1dWlkdjc6Q2EsdmFsaWRhdGU6b3IsdmFsaWRhdGVBc3luYzpycix2b2lkOmxjLHdpdGhQYXJzZXI6amkseGlkOk1hLHhvcjpmYyx6OnF1fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGV0PSJpby5tb2RlbGNvbnRleHRwcm90b2NvbC9yZWxhdGVkLXRhc2siLGFzPSIyLjAiLG5lPW9zKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLG1mPU8oW2goKSxDKCkuaW50KCldKSxnZj1oKCk7c2Uoe3R0bDpDKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6QygpLm9wdGlvbmFsKCl9KTtjb25zdCB6dj1iKHt0dGw6QygpLm9wdGlvbmFsKCl9KSxUdj1iKHt0YXNrSWQ6aCgpfSksTmM9c2Uoe3Byb2dyZXNzVG9rZW46bWYub3B0aW9uYWwoKSxbZXRdOlR2Lm9wdGlvbmFsKCl9KSxfZT1iKHtfbWV0YTpOYy5vcHRpb25hbCgpfSksdW89X2UuZXh0ZW5kKHt0YXNrOnp2Lm9wdGlvbmFsKCl9KSxJdj1lPT51by5zYWZlUGFyc2UoZSkuc3VjY2VzcyxhZT1iKHttZXRob2Q6aCgpLHBhcmFtczpfZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxUZT1iKHtfbWV0YTpOYy5vcHRpb25hbCgpfSksSWU9Yih7bWV0aG9kOmgoKSxwYXJhbXM6VGUubG9vc2UoKS5vcHRpb25hbCgpfSksY2U9c2Uoe19tZXRhOk5jLm9wdGlvbmFsKCl9KSxsbz1PKFtoKCksQygpLmludCgpXSksYmY9Yih7anNvbnJwYzptKGFzKSxpZDpsbywuLi5hZS5zaGFwZX0pLnN0cmljdCgpLER1PWU9PmJmLnNhZmVQYXJzZShlKS5zdWNjZXNzLHZmPWIoe2pzb25ycGM6bShhcyksLi4uSWUuc2hhcGV9KS5zdHJpY3QoKSx4dj1lPT52Zi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxaYz1iKHtqc29ucnBjOm0oYXMpLGlkOmxvLHJlc3VsdDpjZX0pLnN0cmljdCgpLFNvPWU9PlpjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBGOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoRnx8KEY9e30pKTtjb25zdCBqYz1iKHtqc29ucnBjOm0oYXMpLGlkOmxvLm9wdGlvbmFsKCksZXJyb3I6Yih7Y29kZTpDKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpMKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksUHY9ZT0+amMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsQ3Y9TyhbYmYsdmYsWmMsamNdKTtPKFtaYyxqY10pO2NvbnN0IE1jPWNlLnN0cmljdCgpLEV2PVRlLmV4dGVuZCh7cmVxdWVzdElkOmxvLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSkscWM9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6RXZ9KSxBdj1iKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOngoaCgpKS5vcHRpb25hbCgpLHRoZW1lOmllKFsibGlnaHQiLCJkYXJrIl0pLm9wdGlvbmFsKCl9KSxwbz1iKHtpY29uczp4KEF2KS5vcHRpb25hbCgpfSksU3Q9Yih7bmFtZTpoKCksdGl0bGU6aCgpLm9wdGlvbmFsKCl9KSxjcz1TdC5leHRlbmQoey4uLlN0LnNoYXBlLC4uLnBvLnNoYXBlLHZlcnNpb246aCgpLHdlYnNpdGVVcmw6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCl9KSxPdj1MdChiKHthcHBseURlZmF1bHRzOkIoKS5vcHRpb25hbCgpfSksWihoKCksTCgpKSksUnY9Y28oZT0+ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MD97Zm9ybTp7fX06ZSxMdChiKHtmb3JtOk92Lm9wdGlvbmFsKCksdXJsOm5lLm9wdGlvbmFsKCl9KSxaKGgoKSxMKCkpLm9wdGlvbmFsKCkpKSxOdj1zZSh7bGlzdDpuZS5vcHRpb25hbCgpLGNhbmNlbDpuZS5vcHRpb25hbCgpLHJlcXVlc3RzOnNlKHtzYW1wbGluZzpzZSh7Y3JlYXRlTWVzc2FnZTpuZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpzZSh7Y3JlYXRlOm5lLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLFp2PXNlKHtsaXN0Om5lLm9wdGlvbmFsKCksY2FuY2VsOm5lLm9wdGlvbmFsKCkscmVxdWVzdHM6c2Uoe3Rvb2xzOnNlKHtjYWxsOm5lLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLGp2PWIoe2V4cGVyaW1lbnRhbDpaKGgoKSxuZSkub3B0aW9uYWwoKSxzYW1wbGluZzpiKHtjb250ZXh0Om5lLm9wdGlvbmFsKCksdG9vbHM6bmUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246UnYub3B0aW9uYWwoKSxyb290czpiKHtsaXN0Q2hhbmdlZDpCKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6TnYub3B0aW9uYWwoKSxleHRlbnNpb25zOlooaCgpLG5lKS5vcHRpb25hbCgpfSksTXY9X2UuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpqdixjbGllbnRJbmZvOmNzfSkscXY9YWUuZXh0ZW5kKHttZXRob2Q6bSgiaW5pdGlhbGl6ZSIpLHBhcmFtczpNdn0pLER2PWIoe2V4cGVyaW1lbnRhbDpaKGgoKSxuZSkub3B0aW9uYWwoKSxsb2dnaW5nOm5lLm9wdGlvbmFsKCksY29tcGxldGlvbnM6bmUub3B0aW9uYWwoKSxwcm9tcHRzOmIoe2xpc3RDaGFuZ2VkOkIoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6Yih7c3Vic2NyaWJlOkIoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkIoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczpiKHtsaXN0Q2hhbmdlZDpCKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6WnYub3B0aW9uYWwoKSxleHRlbnNpb25zOlooaCgpLG5lKS5vcHRpb25hbCgpfSksTHY9Y2UuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpEdixzZXJ2ZXJJbmZvOmNzLGluc3RydWN0aW9uczpoKCkub3B0aW9uYWwoKX0pLEJ2PUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6VGUub3B0aW9uYWwoKX0pLHVzPWFlLmV4dGVuZCh7bWV0aG9kOm0oInBpbmciKSxwYXJhbXM6X2Uub3B0aW9uYWwoKX0pLFV2PWIoe3Byb2dyZXNzOkMoKSx0b3RhbDpKKEMoKSksbWVzc2FnZTpKKGgoKSl9KSxIdj1iKHsuLi5UZS5zaGFwZSwuLi5Vdi5zaGFwZSxwcm9ncmVzc1Rva2VuOm1mfSksRGM9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpIdn0pLEZ2PV9lLmV4dGVuZCh7Y3Vyc29yOmdmLm9wdGlvbmFsKCl9KSxobz1hZS5leHRlbmQoe3BhcmFtczpGdi5vcHRpb25hbCgpfSksZm89Y2UuZXh0ZW5kKHtuZXh0Q3Vyc29yOmdmLm9wdGlvbmFsKCl9KSxWdj1pZShbIndvcmtpbmciLCJpbnB1dF9yZXF1aXJlZCIsImNvbXBsZXRlZCIsImZhaWxlZCIsImNhbmNlbGxlZCJdKSxtbz1iKHt0YXNrSWQ6aCgpLHN0YXR1czpWdix0dGw6TyhbQygpLHRvKCldKSxjcmVhdGVkQXQ6aCgpLGxhc3RVcGRhdGVkQXQ6aCgpLHBvbGxJbnRlcnZhbDpKKEMoKSksc3RhdHVzTWVzc2FnZTpKKGgoKSl9KSxMYz1jZS5leHRlbmQoe3Rhc2s6bW99KSxKdj1UZS5tZXJnZShtbyksWm89SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiKSxwYXJhbXM6SnZ9KSxCYz1hZS5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9nZXQiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxVYz1jZS5tZXJnZShtbyksSGM9YWUuZXh0ZW5kKHttZXRob2Q6bSgidGFza3MvcmVzdWx0IikscGFyYW1zOl9lLmV4dGVuZCh7dGFza0lkOmgoKX0pfSk7Y2UubG9vc2UoKTtjb25zdCBGYz1oby5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9saXN0Iil9KSxWYz1mby5leHRlbmQoe3Rhc2tzOngobW8pfSksSmM9YWUuZXh0ZW5kKHttZXRob2Q6bSgidGFza3MvY2FuY2VsIikscGFyYW1zOl9lLmV4dGVuZCh7dGFza0lkOmgoKX0pfSksS3Y9Y2UubWVyZ2UobW8pLHlmPWIoe3VyaTpoKCksbWltZVR5cGU6SihoKCkpLF9tZXRhOlooaCgpLEwoKSkub3B0aW9uYWwoKX0pLF9mPXlmLmV4dGVuZCh7dGV4dDpoKCl9KSxLYz1oKCkucmVmaW5lKGU9Pnt0cnl7cmV0dXJuIGF0b2IoZSksITB9Y2F0Y2h7cmV0dXJuITF9fSx7bWVzc2FnZToiSW52YWxpZCBCYXNlNjQgc3RyaW5nIn0pLGtmPXlmLmV4dGVuZCh7YmxvYjpLY30pLGdvPWllKFsidXNlciIsImFzc2lzdGFudCJdKSxWdD1iKHthdWRpZW5jZTp4KGdvKS5vcHRpb25hbCgpLHByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksbGFzdE1vZGlmaWVkOmFmKHtvZmZzZXQ6ITB9KS5vcHRpb25hbCgpfSksd2Y9Yih7Li4uU3Quc2hhcGUsLi4ucG8uc2hhcGUsdXJpOmgoKSxkZXNjcmlwdGlvbjpKKGgoKSksbWltZVR5cGU6SihoKCkpLHNpemU6SihDKCkpLGFubm90YXRpb25zOlZ0Lm9wdGlvbmFsKCksX21ldGE6SihzZSh7fSkpfSksV3Y9Yih7Li4uU3Quc2hhcGUsLi4ucG8uc2hhcGUsdXJpVGVtcGxhdGU6aCgpLGRlc2NyaXB0aW9uOkooaCgpKSxtaW1lVHlwZTpKKGgoKSksYW5ub3RhdGlvbnM6VnQub3B0aW9uYWwoKSxfbWV0YTpKKHNlKHt9KSl9KSxHdj1oby5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvbGlzdCIpfSksJGY9Zm8uZXh0ZW5kKHtyZXNvdXJjZXM6eCh3Zil9KSxRdj1oby5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvdGVtcGxhdGVzL2xpc3QiKX0pLFl2PWZvLmV4dGVuZCh7cmVzb3VyY2VUZW1wbGF0ZXM6eChXdil9KSxXYz1fZS5leHRlbmQoe3VyaTpoKCl9KSxYdj1XYyxleT1hZS5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvcmVhZCIpLHBhcmFtczpYdn0pLFNmPWNlLmV4dGVuZCh7Y29udGVudHM6eChPKFtfZixrZl0pKX0pLHR5PUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSksbnk9V2Msb3k9YWUuZXh0ZW5kKHttZXRob2Q6bSgicmVzb3VyY2VzL3N1YnNjcmliZSIpLHBhcmFtczpueX0pLHJ5PVdjLHN5PWFlLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy91bnN1YnNjcmliZSIpLHBhcmFtczpyeX0pLGl5PVRlLmV4dGVuZCh7dXJpOmgoKX0pLGF5PUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWQiKSxwYXJhbXM6aXl9KSxjeT1iKHtuYW1lOmgoKSxkZXNjcmlwdGlvbjpKKGgoKSkscmVxdWlyZWQ6SihCKCkpfSksdXk9Yih7Li4uU3Quc2hhcGUsLi4ucG8uc2hhcGUsZGVzY3JpcHRpb246SihoKCkpLGFyZ3VtZW50czpKKHgoY3kpKSxfbWV0YTpKKHNlKHt9KSl9KSxseT1oby5leHRlbmQoe21ldGhvZDptKCJwcm9tcHRzL2xpc3QiKX0pLGR5PWZvLmV4dGVuZCh7cHJvbXB0czp4KHV5KX0pLHB5PV9lLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOlooaCgpLGgoKSkub3B0aW9uYWwoKX0pLGh5PWFlLmV4dGVuZCh7bWV0aG9kOm0oInByb21wdHMvZ2V0IikscGFyYW1zOnB5fSksR2M9Yih7dHlwZTptKCJ0ZXh0IiksdGV4dDpoKCksYW5ub3RhdGlvbnM6VnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxRYz1iKHt0eXBlOm0oImltYWdlIiksZGF0YTpLYyxtaW1lVHlwZTpoKCksYW5ub3RhdGlvbnM6VnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxZYz1iKHt0eXBlOm0oImF1ZGlvIiksZGF0YTpLYyxtaW1lVHlwZTpoKCksYW5ub3RhdGlvbnM6VnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxmeT1iKHt0eXBlOm0oInRvb2xfdXNlIiksbmFtZTpoKCksaWQ6aCgpLGlucHV0OlooaCgpLEwoKSksX21ldGE6WihoKCksTCgpKS5vcHRpb25hbCgpfSksemY9Yih7dHlwZTptKCJyZXNvdXJjZSIpLHJlc291cmNlOk8oW19mLGtmXSksYW5ub3RhdGlvbnM6VnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxUZj13Zi5leHRlbmQoe3R5cGU6bSgicmVzb3VyY2VfbGluayIpfSksYm89TyhbR2MsUWMsWWMsVGYsemZdKSxteT1iKHtyb2xlOmdvLGNvbnRlbnQ6Ym99KSxneT1jZS5leHRlbmQoe2Rlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1lc3NhZ2VzOngobXkpfSksYnk9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9wcm9tcHRzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSksdnk9Yih7dGl0bGU6aCgpLm9wdGlvbmFsKCkscmVhZE9ubHlIaW50OkIoKS5vcHRpb25hbCgpLGRlc3RydWN0aXZlSGludDpCKCkub3B0aW9uYWwoKSxpZGVtcG90ZW50SGludDpCKCkub3B0aW9uYWwoKSxvcGVuV29ybGRIaW50OkIoKS5vcHRpb25hbCgpfSkseXk9Yih7dGFza1N1cHBvcnQ6aWUoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSxYYz1iKHsuLi5TdC5zaGFwZSwuLi5wby5zaGFwZSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTpiKHt0eXBlOm0oIm9iamVjdCIpLHByb3BlcnRpZXM6WihoKCksbmUpLm9wdGlvbmFsKCkscmVxdWlyZWQ6eChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChMKCkpLG91dHB1dFNjaGVtYTpiKHt0eXBlOm0oIm9iamVjdCIpLHByb3BlcnRpZXM6WihoKCksbmUpLm9wdGlvbmFsKCkscmVxdWlyZWQ6eChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChMKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6dnkub3B0aW9uYWwoKSxleGVjdXRpb246eXkub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxJZj1oby5leHRlbmQoe21ldGhvZDptKCJ0b29scy9saXN0Iil9KSxfeT1mby5leHRlbmQoe3Rvb2xzOngoWGMpfSksbHM9Y2UuZXh0ZW5kKHtjb250ZW50OngoYm8pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OlooaCgpLEwoKSkub3B0aW9uYWwoKSxpc0Vycm9yOkIoKS5vcHRpb25hbCgpfSk7bHMub3IoY2UuZXh0ZW5kKHt0b29sUmVzdWx0OkwoKX0pKTtjb25zdCBreT11by5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSx4Zj1hZS5leHRlbmQoe21ldGhvZDptKCJ0b29scy9jYWxsIikscGFyYW1zOmt5fSksd3k9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6VGUub3B0aW9uYWwoKX0pO2Ioe2F1dG9SZWZyZXNoOkIoKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOkMoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IFBmPWllKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSwkeT1fZS5leHRlbmQoe2xldmVsOlBmfSksU3k9YWUuZXh0ZW5kKHttZXRob2Q6bSgibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczokeX0pLHp5PVRlLmV4dGVuZCh7bGV2ZWw6UGYsbG9nZ2VyOmgoKS5vcHRpb25hbCgpLGRhdGE6TCgpfSksVHk9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOnp5fSksSXk9Yih7bmFtZTpoKCkub3B0aW9uYWwoKX0pLHh5PWIoe2hpbnRzOngoSXkpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSxQeT1iKHttb2RlOmllKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksQ3k9Yih7dHlwZTptKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpoKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6eChibykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6Yih7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6QigpLm9wdGlvbmFsKCksX21ldGE6WihoKCksTCgpKS5vcHRpb25hbCgpfSksRXk9cm8oInR5cGUiLFtHYyxRYyxZY10pLGpvPXJvKCJ0eXBlIixbR2MsUWMsWWMsZnksQ3ldKSxBeT1iKHtyb2xlOmdvLGNvbnRlbnQ6Tyhbam8seChqbyldKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxPeT11by5leHRlbmQoe21lc3NhZ2VzOngoQXkpLG1vZGVsUHJlZmVyZW5jZXM6eHkub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6aCgpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6aWUoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpDKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6QygpLmludCgpLHN0b3BTZXF1ZW5jZXM6eChoKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6bmUub3B0aW9uYWwoKSx0b29sczp4KFhjKS5vcHRpb25hbCgpLHRvb2xDaG9pY2U6UHkub3B0aW9uYWwoKX0pLFJ5PWFlLmV4dGVuZCh7bWV0aG9kOm0oInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6T3l9KSxDZj1jZS5leHRlbmQoe21vZGVsOmgoKSxzdG9wUmVhc29uOkooaWUoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIl0pLm9yKGgoKSkpLHJvbGU6Z28sY29udGVudDpFeX0pLEVmPWNlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246SihpZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiLCJ0b29sVXNlIl0pLm9yKGgoKSkpLHJvbGU6Z28sY29udGVudDpPKFtqbyx4KGpvKV0pfSksTnk9Yih7dHlwZTptKCJib29sZWFuIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZGVmYXVsdDpCKCkub3B0aW9uYWwoKX0pLFp5PWIoe3R5cGU6bSgic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluTGVuZ3RoOkMoKS5vcHRpb25hbCgpLG1heExlbmd0aDpDKCkub3B0aW9uYWwoKSxmb3JtYXQ6aWUoWyJlbWFpbCIsInVyaSIsImRhdGUiLCJkYXRlLXRpbWUiXSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksank9Yih7dHlwZTppZShbIm51bWJlciIsImludGVnZXIiXSksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluaW11bTpDKCkub3B0aW9uYWwoKSxtYXhpbXVtOkMoKS5vcHRpb25hbCgpLGRlZmF1bHQ6QygpLm9wdGlvbmFsKCl9KSxNeT1iKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06eChoKCkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxxeT1iKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG9uZU9mOngoYih7Y29uc3Q6aCgpLHRpdGxlOmgoKX0pKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksRHk9Yih7dHlwZTptKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxlbnVtOngoaCgpKSxlbnVtTmFtZXM6eChoKCkpLm9wdGlvbmFsKCksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLEx5PU8oW015LHF5XSksQnk9Yih7dHlwZTptKCJhcnJheSIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOkMoKS5vcHRpb25hbCgpLG1heEl0ZW1zOkMoKS5vcHRpb25hbCgpLGl0ZW1zOmIoe3R5cGU6bSgic3RyaW5nIiksZW51bTp4KGgoKSl9KSxkZWZhdWx0OngoaCgpKS5vcHRpb25hbCgpfSksVXk9Yih7dHlwZTptKCJhcnJheSIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOkMoKS5vcHRpb25hbCgpLG1heEl0ZW1zOkMoKS5vcHRpb25hbCgpLGl0ZW1zOmIoe2FueU9mOngoYih7Y29uc3Q6aCgpLHRpdGxlOmgoKX0pKX0pLGRlZmF1bHQ6eChoKCkpLm9wdGlvbmFsKCl9KSxIeT1PKFtCeSxVeV0pLEZ5PU8oW0R5LEx5LEh5XSksVnk9TyhbRnksTnksWnksanldKSxKeT11by5leHRlbmQoe21vZGU6bSgiZm9ybSIpLm9wdGlvbmFsKCksbWVzc2FnZTpoKCkscmVxdWVzdGVkU2NoZW1hOmIoe3R5cGU6bSgib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxWeSkscmVxdWlyZWQ6eChoKCkpLm9wdGlvbmFsKCl9KX0pLEt5PXVvLmV4dGVuZCh7bW9kZTptKCJ1cmwiKSxtZXNzYWdlOmgoKSxlbGljaXRhdGlvbklkOmgoKSx1cmw6aCgpLnVybCgpfSksV3k9TyhbSnksS3ldKSxHeT1hZS5leHRlbmQoe21ldGhvZDptKCJlbGljaXRhdGlvbi9jcmVhdGUiKSxwYXJhbXM6V3l9KSxReT1UZS5leHRlbmQoe2VsaWNpdGF0aW9uSWQ6aCgpfSksWXk9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9lbGljaXRhdGlvbi9jb21wbGV0ZSIpLHBhcmFtczpReX0pLFh5PWNlLmV4dGVuZCh7YWN0aW9uOmllKFsiYWNjZXB0IiwiZGVjbGluZSIsImNhbmNlbCJdKSxjb250ZW50OmNvKGU9PmU9PT1udWxsP3ZvaWQgMDplLFooaCgpLE8oW2goKSxDKCksQigpLHgoaCgpKV0pKS5vcHRpb25hbCgpKX0pLGVfPWIoe3R5cGU6bSgicmVmL3Jlc291cmNlIiksdXJpOmgoKX0pLHRfPWIoe3R5cGU6bSgicmVmL3Byb21wdCIpLG5hbWU6aCgpfSksbl89X2UuZXh0ZW5kKHtyZWY6TyhbdF8sZV9dKSxhcmd1bWVudDpiKHtuYW1lOmgoKSx2YWx1ZTpoKCl9KSxjb250ZXh0OmIoe2FyZ3VtZW50czpaKGgoKSxoKCkpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksb189YWUuZXh0ZW5kKHttZXRob2Q6bSgiY29tcGxldGlvbi9jb21wbGV0ZSIpLHBhcmFtczpuX30pLHJfPWNlLmV4dGVuZCh7Y29tcGxldGlvbjpzZSh7dmFsdWVzOngoaCgpKS5tYXgoMTAwKSx0b3RhbDpKKEMoKS5pbnQoKSksaGFzTW9yZTpKKEIoKSl9KX0pLHNfPWIoe3VyaTpoKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6aCgpLm9wdGlvbmFsKCksX21ldGE6WihoKCksTCgpKS5vcHRpb25hbCgpfSksaV89YWUuZXh0ZW5kKHttZXRob2Q6bSgicm9vdHMvbGlzdCIpLHBhcmFtczpfZS5vcHRpb25hbCgpfSksYV89Y2UuZXh0ZW5kKHtyb290czp4KHNfKX0pLGNfPUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlRlLm9wdGlvbmFsKCl9KTtPKFt1cyxxdixvXyxTeSxoeSxseSxHdixRdixleSxveSxzeSx4ZixJZixCYyxIYyxGYyxKY10pO08oW3FjLERjLEJ2LGNfLFpvXSk7TyhbTWMsQ2YsRWYsWHksYV8sVWMsVmMsTGNdKTtPKFt1cyxSeSxHeSxpXyxCYyxIYyxGYyxKY10pO08oW3FjLERjLFR5LGF5LHR5LHd5LGJ5LFpvLFl5XSk7TyhbTWMsTHYscl8sZ3ksZHksJGYsWXYsU2YsbHMsX3ksVWMsVmMsTGNdKTtjbGFzcyBEIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKGBNQ1AgZXJyb3IgJHt0fTogJHtufWApLHRoaXMuY29kZT10LHRoaXMuZGF0YT1vLHRoaXMubmFtZT0iTWNwRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCxuLG8pe2lmKHQ9PT1GLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQmJm8pe2NvbnN0IHI9bztpZihyLmVsaWNpdGF0aW9ucylyZXR1cm4gbmV3IHVfKHIuZWxpY2l0YXRpb25zLG4pfXJldHVybiBuZXcgRCh0LG4sbyl9fWNsYXNzIHVfIGV4dGVuZHMgRHtjb25zdHJ1Y3Rvcih0LG49YFVSTCBlbGljaXRhdGlvbiR7dC5sZW5ndGg+MT8icyI6IiJ9IHJlcXVpcmVkYCl7c3VwZXIoRi5VcmxFbGljaXRhdGlvblJlcXVpcmVkLG4se2VsaWNpdGF0aW9uczp0fSl9Z2V0IGVsaWNpdGF0aW9ucygpe3JldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucz8/W119fWZ1bmN0aW9uIFhlKGUpe3JldHVybiBlPT09ImNvbXBsZXRlZCJ8fGU9PT0iZmFpbGVkInx8ZT09PSJjYW5jZWxsZWQifW5ldyBTZXQoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OSIpO2Z1bmN0aW9uIEx1KGUpe2NvbnN0IG49ZXYoZSk/Lm1ldGhvZDtpZighbil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBpcyBtaXNzaW5nIGEgbWV0aG9kIGxpdGVyYWwiKTtjb25zdCBvPXR2KG4pO2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBtZXRob2QgbGl0ZXJhbCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIG99ZnVuY3Rpb24gQnUoZSx0KXtjb25zdCBuPWVmKGUsdCk7aWYoIW4uc3VjY2Vzcyl0aHJvdyBuLmVycm9yO3JldHVybiBuLmRhdGF9Y29uc3QgbF89NmU0O2NsYXNzIGRfe2NvbnN0cnVjdG9yKHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkPTAsdGhpcy5fcmVxdWVzdEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzPW5ldyBNYXAsdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3RpbWVvdXRJbmZvPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnM9bmV3IFNldCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzPW5ldyBNYXAsdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKHFjLG49Pnt0aGlzLl9vbmNhbmNlbChuKX0pLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihEYyxuPT57dGhpcy5fb25wcm9ncmVzcyhuKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIodXMsbj0+KHt9KSksdGhpcy5fdGFza1N0b3JlPXQ/LnRhc2tTdG9yZSx0aGlzLl90YXNrTWVzc2FnZVF1ZXVlPXQ/LnRhc2tNZXNzYWdlUXVldWUsdGhpcy5fdGFza1N0b3JlJiYodGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihCYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuey4uLnJ9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihIYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hc3luYygpPT57Y29uc3Qgcz1uLnBhcmFtcy50YXNrSWQ7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7bGV0IGk7Zm9yKDtpPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZShzLG8uc2Vzc2lvbklkKTspe2lmKGkudHlwZT09PSJyZXNwb25zZSJ8fGkudHlwZT09PSJlcnJvciIpe2NvbnN0IGw9aS5tZXNzYWdlLHU9bC5pZCxkPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHUpO2lmKGQpaWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUodSksaS50eXBlPT09InJlc3BvbnNlIilkKGwpO2Vsc2V7Y29uc3QgZj1sLGc9bmV3IEQoZi5lcnJvci5jb2RlLGYuZXJyb3IubWVzc2FnZSxmLmVycm9yLmRhdGEpO2QoZyl9ZWxzZXtjb25zdCBmPWkudHlwZT09PSJyZXNwb25zZSI/IlJlc3BvbnNlIjoiRXJyb3IiO3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke2Z9IGhhbmRsZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3V9YCkpfWNvbnRpbnVlfWF3YWl0IHRoaXMuX3RyYW5zcG9ydD8uc2VuZChpLm1lc3NhZ2Use3JlbGF0ZWRSZXF1ZXN0SWQ6by5yZXF1ZXN0SWR9KX19Y29uc3QgYT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhzLG8uc2Vzc2lvbklkKTtpZighYSl0aHJvdyBuZXcgRChGLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke3N9YCk7aWYoIVhlKGEuc3RhdHVzKSlyZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclRhc2tVcGRhdGUocyxvLnNpZ25hbCksYXdhaXQgcigpO2lmKFhlKGEuc3RhdHVzKSl7Y29uc3QgaT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdChzLG8uc2Vzc2lvbklkKTtyZXR1cm4gdGhpcy5fY2xlYXJUYXNrUXVldWUocyksey4uLmksX21ldGE6ey4uLmkuX21ldGEsW2V0XTp7dGFza0lkOnN9fX19cmV0dXJuIGF3YWl0IHIoKX07cmV0dXJuIGF3YWl0IHIoKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoRmMsYXN5bmMobixvKT0+e3RyeXtjb25zdHt0YXNrczpyLG5leHRDdXJzb3I6c309YXdhaXQgdGhpcy5fdGFza1N0b3JlLmxpc3RUYXNrcyhuLnBhcmFtcz8uY3Vyc29yLG8uc2Vzc2lvbklkKTtyZXR1cm57dGFza3M6cixuZXh0Q3Vyc29yOnMsX21ldGE6e319fWNhdGNoKHIpe3Rocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcyxgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihKYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgRChGLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke24ucGFyYW1zLnRhc2tJZH1gKTtpZihYZShyLnN0YXR1cykpdGhyb3cgbmV3IEQoRi5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Iuc3RhdHVzfWApO2F3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKG4ucGFyYW1zLnRhc2tJZCwiY2FuY2VsbGVkIiwiQ2xpZW50IGNhbmNlbGxlZCB0YXNrIGV4ZWN1dGlvbi4iLG8uc2Vzc2lvbklkKSx0aGlzLl9jbGVhclRhc2tRdWV1ZShuLnBhcmFtcy50YXNrSWQpO2NvbnN0IHM9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcyl0aHJvdyBuZXcgRChGLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kIGFmdGVyIGNhbmNlbGxhdGlvbjogJHtuLnBhcmFtcy50YXNrSWR9YCk7cmV0dXJue19tZXRhOnt9LC4uLnN9fWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBEP3I6bmV3IEQoRi5JbnZhbGlkUmVxdWVzdCxgRmFpbGVkIHRvIGNhbmNlbCB0YXNrOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pKX1hc3luYyBfb25jYW5jZWwodCl7aWYoIXQucGFyYW1zLnJlcXVlc3RJZClyZXR1cm47dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LnBhcmFtcy5yZXF1ZXN0SWQpPy5hYm9ydCh0LnBhcmFtcy5yZWFzb24pfV9zZXR1cFRpbWVvdXQodCxuLG8scixzPSExKXt0aGlzLl90aW1lb3V0SW5mby5zZXQodCx7dGltZW91dElkOnNldFRpbWVvdXQocixuKSxzdGFydFRpbWU6RGF0ZS5ub3coKSx0aW1lb3V0Om4sbWF4VG90YWxUaW1lb3V0Om8scmVzZXRUaW1lb3V0T25Qcm9ncmVzczpzLG9uVGltZW91dDpyfSl9X3Jlc2V0VGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtpZighbilyZXR1cm4hMTtjb25zdCBvPURhdGUubm93KCktbi5zdGFydFRpbWU7aWYobi5tYXhUb3RhbFRpbWVvdXQmJm8+PW4ubWF4VG90YWxUaW1lb3V0KXRocm93IHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSxELmZyb21FcnJvcihGLlJlcXVlc3RUaW1lb3V0LCJNYXhpbXVtIHRvdGFsIHRpbWVvdXQgZXhjZWVkZWQiLHttYXhUb3RhbFRpbWVvdXQ6bi5tYXhUb3RhbFRpbWVvdXQsdG90YWxFbGFwc2VkOm99KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSxuLnRpbWVvdXRJZD1zZXRUaW1lb3V0KG4ub25UaW1lb3V0LG4udGltZW91dCksITB9X2NsZWFudXBUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO24mJihjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSl9YXN5bmMgY29ubmVjdCh0KXtpZih0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uIik7dGhpcy5fdHJhbnNwb3J0PXQ7Y29uc3Qgbj10aGlzLnRyYW5zcG9ydD8ub25jbG9zZTt0aGlzLl90cmFuc3BvcnQub25jbG9zZT0oKT0+e24/LigpLHRoaXMuX29uY2xvc2UoKX07Y29uc3Qgbz10aGlzLnRyYW5zcG9ydD8ub25lcnJvcjt0aGlzLl90cmFuc3BvcnQub25lcnJvcj1zPT57bz8uKHMpLHRoaXMuX29uZXJyb3Iocyl9O2NvbnN0IHI9dGhpcy5fdHJhbnNwb3J0Py5vbm1lc3NhZ2U7dGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZT0ocyxhKT0+e3I/LihzLGEpLFNvKHMpfHxQdihzKT90aGlzLl9vbnJlc3BvbnNlKHMpOkR1KHMpP3RoaXMuX29ucmVxdWVzdChzLGEpOnh2KHMpP3RoaXMuX29ubm90aWZpY2F0aW9uKHMpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2UgdHlwZTogJHtKU09OLnN0cmluZ2lmeShzKX1gKSl9LGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zdGFydCgpfV9vbmNsb3NlKCl7Y29uc3QgdD10aGlzLl9yZXNwb25zZUhhbmRsZXJzO3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmNsZWFyKCksdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl90aW1lb3V0SW5mby52YWx1ZXMoKSljbGVhclRpbWVvdXQoby50aW1lb3V0SWQpO3RoaXMuX3RpbWVvdXRJbmZvLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnZhbHVlcygpKW8uYWJvcnQoKTt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtjb25zdCBuPUQuZnJvbUVycm9yKEYuQ29ubmVjdGlvbkNsb3NlZCwiQ29ubmVjdGlvbiBjbG9zZWQiKTt0aGlzLl90cmFuc3BvcnQ9dm9pZCAwLHRoaXMub25jbG9zZT8uKCk7Zm9yKGNvbnN0IG8gb2YgdC52YWx1ZXMoKSlvKG4pfV9vbmVycm9yKHQpe3RoaXMub25lcnJvcj8uKHQpfV9vbm5vdGlmaWNhdGlvbih0KXtjb25zdCBuPXRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tOb3RpZmljYXRpb25IYW5kbGVyO24hPT12b2lkIDAmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm4odCkpLmNhdGNoKG89PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtvfWApKSl9X29ucmVxdWVzdCh0LG4pe2NvbnN0IG89dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcixyPXRoaXMuX3RyYW5zcG9ydCxzPXQucGFyYW1zPy5fbWV0YT8uW2V0XT8udGFza0lkO2lmKG89PT12b2lkIDApe2NvbnN0IGQ9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpGLk1ldGhvZE5vdEZvdW5kLG1lc3NhZ2U6Ik1ldGhvZCBub3QgZm91bmQifX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT90aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6ZCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKS5jYXRjaChmPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGVucXVldWUgZXJyb3IgcmVzcG9uc2U6ICR7Zn1gKSkpOnI/LnNlbmQoZCkuY2F0Y2goZj0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGFuIGVycm9yIHJlc3BvbnNlOiAke2Z9YCkpKTtyZXR1cm59Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5zZXQodC5pZCxhKTtjb25zdCBpPUl2KHQucGFyYW1zKT90LnBhcmFtcy50YXNrOnZvaWQgMCxsPXRoaXMuX3Rhc2tTdG9yZT90aGlzLnJlcXVlc3RUYXNrU3RvcmUodCxyPy5zZXNzaW9uSWQpOnZvaWQgMCx1PXtzaWduYWw6YS5zaWduYWwsc2Vzc2lvbklkOnI/LnNlc3Npb25JZCxfbWV0YTp0LnBhcmFtcz8uX21ldGEsc2VuZE5vdGlmaWNhdGlvbjphc3luYyBkPT57aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgZj17cmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYoZi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihkLGYpfSxzZW5kUmVxdWVzdDphc3luYyhkLGYsZyk9PntpZihhLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBEKEYuQ29ubmVjdGlvbkNsb3NlZCwiUmVxdWVzdCB3YXMgY2FuY2VsbGVkIik7Y29uc3Qgdj17Li4uZyxyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJiF2LnJlbGF0ZWRUYXNrJiYodi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KTtjb25zdCBfPXYucmVsYXRlZFRhc2s/LnRhc2tJZD8/cztyZXR1cm4gXyYmbCYmYXdhaXQgbC51cGRhdGVUYXNrU3RhdHVzKF8sImlucHV0X3JlcXVpcmVkIiksYXdhaXQgdGhpcy5yZXF1ZXN0KGQsZix2KX0sYXV0aEluZm86bj8uYXV0aEluZm8scmVxdWVzdElkOnQuaWQscmVxdWVzdEluZm86bj8ucmVxdWVzdEluZm8sdGFza0lkOnMsdGFza1N0b3JlOmwsdGFza1JlcXVlc3RlZFR0bDppPy50dGwsY2xvc2VTU0VTdHJlYW06bj8uY2xvc2VTU0VTdHJlYW0sY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtOm4/LmNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2kmJnRoaXMuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQubWV0aG9kKX0pLnRoZW4oKCk9Pm8odCx1KSkudGhlbihhc3luYyBkPT57aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgZj17cmVzdWx0OmQsanNvbnJwYzoiMi4wIixpZDp0LmlkfTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJyZXNwb25zZSIsbWVzc2FnZTpmLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQoZil9LGFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBmPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TnVtYmVyLmlzU2FmZUludGVnZXIoZC5jb2RlKT9kLmNvZGU6Ri5JbnRlcm5hbEVycm9yLG1lc3NhZ2U6ZC5tZXNzYWdlPz8iSW50ZXJuYWwgZXJyb3IiLC4uLmQuZGF0YSE9PXZvaWQgMCYme2RhdGE6ZC5kYXRhfX19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmYsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChmKX0pLmNhdGNoKGQ9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCByZXNwb25zZTogJHtkfWApKSkuZmluYWxseSgoKT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5pZCk9PT1hJiZ0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZGVsZXRlKHQuaWQpfSl9X29ucHJvZ3Jlc3ModCl7Y29uc3R7cHJvZ3Jlc3NUb2tlbjpuLC4uLm99PXQucGFyYW1zLHI9TnVtYmVyKG4pLHM9dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQocik7aWYoIXMpe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5rbm93biB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufWNvbnN0IGE9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQociksaT10aGlzLl90aW1lb3V0SW5mby5nZXQocik7aWYoaSYmYSYmaS5yZXNldFRpbWVvdXRPblByb2dyZXNzKXRyeXt0aGlzLl9yZXNldFRpbWVvdXQocil9Y2F0Y2gobCl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUociksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUociksdGhpcy5fY2xlYW51cFRpbWVvdXQociksYShsKTtyZXR1cm59cyhvKX1fb25yZXNwb25zZSh0KXtjb25zdCBuPU51bWJlcih0LmlkKSxvPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KG4pO2lmKG8pe2lmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG4pLFNvKHQpKW8odCk7ZWxzZXtjb25zdCBhPW5ldyBEKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtvKGEpfXJldHVybn1jb25zdCByPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KG4pO2lmKHI9PT12b2lkIDApe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhbiB1bmtub3duIG1lc3NhZ2UgSUQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl9jbGVhbnVwVGltZW91dChuKTtsZXQgcz0hMTtpZihTbyh0KSYmdC5yZXN1bHQmJnR5cGVvZiB0LnJlc3VsdD09Im9iamVjdCIpe2NvbnN0IGE9dC5yZXN1bHQ7aWYoYS50YXNrJiZ0eXBlb2YgYS50YXNrPT0ib2JqZWN0Iil7Y29uc3QgaT1hLnRhc2s7dHlwZW9mIGkudGFza0lkPT0ic3RyaW5nIiYmKHM9ITAsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldChpLnRhc2tJZCxuKSl9fWlmKHN8fHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLFNvKHQpKXIodCk7ZWxzZXtjb25zdCBhPUQuZnJvbUVycm9yKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtyKGEpfX1nZXQgdHJhbnNwb3J0KCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH1hc3luYyBjbG9zZSgpe2F3YWl0IHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKX1hc3luYypyZXF1ZXN0U3RyZWFtKHQsbixvKXtjb25zdHt0YXNrOnJ9PW8/P3t9O2lmKCFyKXt0cnl7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5yZXF1ZXN0KHQsbixvKX19Y2F0Y2goYSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmEgaW5zdGFuY2VvZiBEP2E6bmV3IEQoRi5JbnRlcm5hbEVycm9yLFN0cmluZyhhKSl9fXJldHVybn1sZXQgczt0cnl7Y29uc3QgYT1hd2FpdCB0aGlzLnJlcXVlc3QodCxMYyxvKTtpZihhLnRhc2spcz1hLnRhc2sudGFza0lkLHlpZWxke3R5cGU6InRhc2tDcmVhdGVkIix0YXNrOmEudGFza307ZWxzZSB0aHJvdyBuZXcgRChGLkludGVybmFsRXJyb3IsIlRhc2sgY3JlYXRpb24gZGlkIG5vdCByZXR1cm4gYSB0YXNrIik7Zm9yKDs7KXtjb25zdCBpPWF3YWl0IHRoaXMuZ2V0VGFzayh7dGFza0lkOnN9LG8pO2lmKHlpZWxke3R5cGU6InRhc2tTdGF0dXMiLHRhc2s6aX0sWGUoaS5zdGF0dXMpKXtpLnN0YXR1cz09PSJjb21wbGV0ZWQiP3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9Omkuc3RhdHVzPT09ImZhaWxlZCI/eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBEKEYuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IGZhaWxlZGApfTppLnN0YXR1cz09PSJjYW5jZWxsZWQiJiYoeWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBEKEYuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IHdhcyBjYW5jZWxsZWRgKX0pO3JldHVybn1pZihpLnN0YXR1cz09PSJpbnB1dF9yZXF1aXJlZCIpe3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9O3JldHVybn1jb25zdCBsPWkucG9sbEludGVydmFsPz90aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO2F3YWl0IG5ldyBQcm9taXNlKHU9PnNldFRpbWVvdXQodSxsKSksbz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpfX1jYXRjaChhKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6YSBpbnN0YW5jZW9mIEQ/YTpuZXcgRChGLkludGVybmFsRXJyb3IsU3RyaW5nKGEpKX19fXJlcXVlc3QodCxuLG8pe2NvbnN0e3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphLHRhc2s6aSxyZWxhdGVkVGFzazpsfT1vPz97fTtyZXR1cm4gbmV3IFByb21pc2UoKHUsZCk9Pntjb25zdCBmPU49PntkKE4pfTtpZighdGhpcy5fdHJhbnNwb3J0KXtmKG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpKTtyZXR1cm59aWYodGhpcy5fb3B0aW9ucz8uZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcz09PSEwKXRyeXt0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodC5tZXRob2QpLGkmJnRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkodC5tZXRob2QpfWNhdGNoKE4pe2YoTik7cmV0dXJufW8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtjb25zdCBnPXRoaXMuX3JlcXVlc3RNZXNzYWdlSWQrKyx2PXsuLi50LGpzb25ycGM6IjIuMCIsaWQ6Z307bz8ub25wcm9ncmVzcyYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuc2V0KGcsby5vbnByb2dyZXNzKSx2LnBhcmFtcz17Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30scHJvZ3Jlc3NUb2tlbjpnfX0pLGkmJih2LnBhcmFtcz17Li4udi5wYXJhbXMsdGFzazppfSksbCYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyxfbWV0YTp7Li4udi5wYXJhbXM/Ll9tZXRhfHx7fSxbZXRdOmx9fSk7Y29uc3QgXz1OPT57dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUoZyksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUoZyksdGhpcy5fY2xlYW51cFRpbWVvdXQoZyksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKHtqc29ucnBjOiIyLjAiLG1ldGhvZDoibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiLHBhcmFtczp7cmVxdWVzdElkOmcscmVhc29uOlN0cmluZyhOKX19LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YX0pLmNhdGNoKHJlPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgY2FuY2VsbGF0aW9uOiAke3JlfWApKSk7Y29uc3QgST1OIGluc3RhbmNlb2YgRD9OOm5ldyBEKEYuUmVxdWVzdFRpbWVvdXQsU3RyaW5nKE4pKTtkKEkpfTt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLnNldChnLE49PntpZighbz8uc2lnbmFsPy5hYm9ydGVkKXtpZihOIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGQoTik7dHJ5e2NvbnN0IEk9ZWYobixOLnJlc3VsdCk7SS5zdWNjZXNzP3UoSS5kYXRhKTpkKEkuZXJyb3IpfWNhdGNoKEkpe2QoSSl9fX0pLG8/LnNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCgpPT57XyhvPy5zaWduYWw/LnJlYXNvbil9KTtjb25zdCB3PW8/LnRpbWVvdXQ/P2xfLFM9KCk9Pl8oRC5mcm9tRXJyb3IoRi5SZXF1ZXN0VGltZW91dCwiUmVxdWVzdCB0aW1lZCBvdXQiLHt0aW1lb3V0Ond9KSk7dGhpcy5fc2V0dXBUaW1lb3V0KGcsdyxvPy5tYXhUb3RhbFRpbWVvdXQsUyxvPy5yZXNldFRpbWVvdXRPblByb2dyZXNzPz8hMSk7Y29uc3Qgaj1sPy50YXNrSWQ7aWYoail7Y29uc3QgTj1JPT57Y29uc3QgcmU9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQoZyk7cmU/cmUoSSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc3BvbnNlIGhhbmRsZXIgbWlzc2luZyBmb3Igc2lkZS1jaGFubmVsZWQgcmVxdWVzdCAke2d9YCkpfTt0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLnNldChnLE4pLHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShqLHt0eXBlOiJyZXF1ZXN0IixtZXNzYWdlOnYsdGltZXN0YW1wOkRhdGUubm93KCl9KS5jYXRjaChJPT57dGhpcy5fY2xlYW51cFRpbWVvdXQoZyksZChJKX0pfWVsc2UgdGhpcy5fdHJhbnNwb3J0LnNlbmQodix7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmF9KS5jYXRjaChOPT57dGhpcy5fY2xlYW51cFRpbWVvdXQoZyksZChOKX0pfSl9YXN5bmMgZ2V0VGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvZ2V0IixwYXJhbXM6dH0sVWMsbil9YXN5bmMgZ2V0VGFza1Jlc3VsdCh0LG4sbyl7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9yZXN1bHQiLHBhcmFtczp0fSxuLG8pfWFzeW5jIGxpc3RUYXNrcyh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvbGlzdCIscGFyYW1zOnR9LFZjLG4pfWFzeW5jIGNhbmNlbFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2NhbmNlbCIscGFyYW1zOnR9LEt2LG4pfWFzeW5jIG5vdGlmaWNhdGlvbih0LG4pe2lmKCF0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIik7dGhpcy5hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQubWV0aG9kKTtjb25zdCBvPW4/LnJlbGF0ZWRUYXNrPy50YXNrSWQ7aWYobyl7Y29uc3QgaT17Li4udCxqc29ucnBjOiIyLjAiLHBhcmFtczp7Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30sW2V0XTpuLnJlbGF0ZWRUYXNrfX19O2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShvLHt0eXBlOiJub3RpZmljYXRpb24iLG1lc3NhZ2U6aSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pO3JldHVybn1pZigodGhpcy5fb3B0aW9ucz8uZGVib3VuY2VkTm90aWZpY2F0aW9uTWV0aG9kcz8/W10pLmluY2x1ZGVzKHQubWV0aG9kKSYmIXQucGFyYW1zJiYhbj8ucmVsYXRlZFJlcXVlc3RJZCYmIW4/LnJlbGF0ZWRUYXNrKXtpZih0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5oYXModC5tZXRob2QpKXJldHVybjt0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5hZGQodC5tZXRob2QpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpZih0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5kZWxldGUodC5tZXRob2QpLCF0aGlzLl90cmFuc3BvcnQpcmV0dXJuO2xldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtldF06bi5yZWxhdGVkVGFza319fSksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGksbikuY2F0Y2gobD0+dGhpcy5fb25lcnJvcihsKSl9KTtyZXR1cm59bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW2V0XTpuLnJlbGF0ZWRUYXNrfX19KSxhd2FpdCB0aGlzLl90cmFuc3BvcnQuc2VuZChhLG4pfXNldFJlcXVlc3RIYW5kbGVyKHQsbil7Y29uc3Qgbz1MdSh0KTt0aGlzLmFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eShvKSx0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuc2V0KG8sKHIscyk9Pntjb25zdCBhPUJ1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKGEscykpfSl9cmVtb3ZlUmVxdWVzdEhhbmRsZXIodCl7dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmRlbGV0ZSh0KX1hc3NlcnRDYW5TZXRSZXF1ZXN0SGFuZGxlcih0KXtpZih0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgQSByZXF1ZXN0IGhhbmRsZXIgZm9yICR7dH0gYWxyZWFkeSBleGlzdHMsIHdoaWNoIHdvdWxkIGJlIG92ZXJyaWRkZW5gKX1zZXROb3RpZmljYXRpb25IYW5kbGVyKHQsbil7Y29uc3Qgbz1MdSh0KTt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5zZXQobyxyPT57Y29uc3Qgcz1CdSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihzKSl9KX1yZW1vdmVOb3RpZmljYXRpb25IYW5kbGVyKHQpe3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmRlbGV0ZSh0KX1fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIodCl7Y29uc3Qgbj10aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuZ2V0KHQpO24hPT12b2lkIDAmJih0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuZGVsZXRlKHQpKX1hc3luYyBfZW5xdWV1ZVRhc2tNZXNzYWdlKHQsbixvKXtpZighdGhpcy5fdGFza1N0b3JlfHwhdGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbnF1ZXVlIHRhc2sgbWVzc2FnZTogdGFza1N0b3JlIGFuZCB0YXNrTWVzc2FnZVF1ZXVlIGFyZSBub3QgY29uZmlndXJlZCIpO2NvbnN0IHI9dGhpcy5fb3B0aW9ucz8ubWF4VGFza1F1ZXVlU2l6ZTthd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmVucXVldWUodCxuLG8scil9YXN5bmMgX2NsZWFyVGFza1F1ZXVlKHQsbil7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7Y29uc3Qgbz1hd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmRlcXVldWVBbGwodCxuKTtmb3IoY29uc3QgciBvZiBvKWlmKHIudHlwZT09PSJyZXF1ZXN0IiYmRHUoci5tZXNzYWdlKSl7Y29uc3Qgcz1yLm1lc3NhZ2UuaWQsYT10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChzKTthPyhhKG5ldyBEKEYuSW50ZXJuYWxFcnJvciwiVGFzayBjYW5jZWxsZWQgb3IgY29tcGxldGVkIikpLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKHMpKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzb2x2ZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3N9IGR1cmluZyB0YXNrICR7dH0gY2xlYW51cGApKX19fWFzeW5jIF93YWl0Rm9yVGFza1VwZGF0ZSh0LG4pe2xldCBvPXRoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlPy5nZXRUYXNrKHQpO3I/LnBvbGxJbnRlcnZhbCYmKG89ci5wb2xsSW50ZXJ2YWwpfWNhdGNoe31yZXR1cm4gbmV3IFByb21pc2UoKHIscyk9PntpZihuLmFib3J0ZWQpe3MobmV3IEQoRi5JbnZhbGlkUmVxdWVzdCwiUmVxdWVzdCBjYW5jZWxsZWQiKSk7cmV0dXJufWNvbnN0IGE9c2V0VGltZW91dChyLG8pO24uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCgpPT57Y2xlYXJUaW1lb3V0KGEpLHMobmV3IEQoRi5JbnZhbGlkUmVxdWVzdCwiUmVxdWVzdCBjYW5jZWxsZWQiKSl9LHtvbmNlOiEwfSl9KX1yZXF1ZXN0VGFza1N0b3JlKHQsbil7Y29uc3Qgbz10aGlzLl90YXNrU3RvcmU7aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJObyB0YXNrIHN0b3JlIGNvbmZpZ3VyZWQiKTtyZXR1cm57Y3JlYXRlVGFzazphc3luYyByPT57aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJObyByZXF1ZXN0IHByb3ZpZGVkIik7cmV0dXJuIGF3YWl0IG8uY3JlYXRlVGFzayhyLHQuaWQse21ldGhvZDp0Lm1ldGhvZCxwYXJhbXM6dC5wYXJhbXN9LG4pfSxnZXRUYXNrOmFzeW5jIHI9Pntjb25zdCBzPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKCFzKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuIHN9LHN0b3JlVGFza1Jlc3VsdDphc3luYyhyLHMsYSk9Pnthd2FpdCBvLnN0b3JlVGFza1Jlc3VsdChyLHMsYSxuKTtjb25zdCBpPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGkpe2NvbnN0IGw9Wm8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczppfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24obCksWGUoaS5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGdldFRhc2tSZXN1bHQ6cj0+by5nZXRUYXNrUmVzdWx0KHIsbiksdXBkYXRlVGFza1N0YXR1czphc3luYyhyLHMsYSk9Pntjb25zdCBpPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKCFpKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcyxgVGFzayAiJHtyfSIgbm90IGZvdW5kIC0gaXQgbWF5IGhhdmUgYmVlbiBjbGVhbmVkIHVwYCk7aWYoWGUoaS5zdGF0dXMpKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcyxgQ2Fubm90IHVwZGF0ZSB0YXNrICIke3J9IiBmcm9tIHRlcm1pbmFsIHN0YXR1cyAiJHtpLnN0YXR1c30iIHRvICIke3N9Ii4gVGVybWluYWwgc3RhdGVzIChjb21wbGV0ZWQsIGZhaWxlZCwgY2FuY2VsbGVkKSBjYW5ub3QgdHJhbnNpdGlvbiB0byBvdGhlciBzdGF0ZXMuYCk7YXdhaXQgby51cGRhdGVUYXNrU3RhdHVzKHIscyxhLG4pO2NvbnN0IGw9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYobCl7Y29uc3QgdT1aby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmx9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxYZShsLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sbGlzdFRhc2tzOnI9Pm8ubGlzdFRhc2tzKHIsbil9fX1mdW5jdGlvbiBVdShlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gcF8oZSx0KXtjb25zdCBuPXsuLi5lfTtmb3IoY29uc3QgbyBpbiB0KXtjb25zdCByPW8scz10W3JdO2lmKHM9PT12b2lkIDApY29udGludWU7Y29uc3QgYT1uW3JdO1V1KGEpJiZVdShzKT9uW3JdPXsuLi5hLC4uLnN9Om5bcl09c31yZXR1cm4gbn0oZT0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkoZSx7Z2V0Oih0LG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dClbbl19KTplKShmdW5jdGlvbihlKXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTtjbGFzcyBoXyBleHRlbmRzIGRfe19yZWdpc3RlcmVkTWV0aG9kcz1uZXcgU2V0O19ldmVudFNsb3RzPW5ldyBNYXA7b25FdmVudERpc3BhdGNoKHQsbil7fV9lbnN1cmVFdmVudFNsb3QodCl7bGV0IG49dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW4pe2xldCBvPXRoaXMuZXZlbnRTY2hlbWFzW3RdO2lmKCFvKXRocm93IEVycm9yKGBVbmtub3duIGV2ZW50OiAke1N0cmluZyh0KX1gKTtuPXtsaXN0ZW5lcnM6W119LHRoaXMuX2V2ZW50U2xvdHMuc2V0KHQsbik7bGV0IHI9by5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKHIpO2xldCBzPW47c3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihvLGE9PntsZXQgaT1hLnBhcmFtczt0aGlzLm9uRXZlbnREaXNwYXRjaCh0LGkpLHMub25IYW5kbGVyPy4oaSk7Zm9yKGxldCBsIG9mWy4uLnMubGlzdGVuZXJzXSlsKGkpfSl9cmV0dXJuIG59c2V0RXZlbnRIYW5kbGVyKHQsbil7bGV0IG89dGhpcy5fZW5zdXJlRXZlbnRTbG90KHQpO28ub25IYW5kbGVyJiZuJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gb24ke1N0cmluZyh0KX0gaGFuZGxlciByZXBsYWNlZC4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoIiR7U3RyaW5nKHQpfSIsIOKApikgdG8gYWRkIG11bHRpcGxlIGxpc3RlbmVycyB3aXRob3V0IHJlcGxhY2luZy5gKSxvLm9uSGFuZGxlcj1ufWdldEV2ZW50SGFuZGxlcih0KXtyZXR1cm4gdGhpcy5fZXZlbnRTbG90cy5nZXQodCk/Lm9uSGFuZGxlcn1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fZW5zdXJlRXZlbnRTbG90KHQpLmxpc3RlbmVycy5wdXNoKG4pfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxuKXtsZXQgbz10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbylyZXR1cm47bGV0IHI9by5saXN0ZW5lcnMuaW5kZXhPZihuKTtyIT09LTEmJm8ubGlzdGVuZXJzLnNwbGljZShyLDEpfXNldFJlcXVlc3RIYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXRSZXF1ZXN0SGFuZGxlciIpLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O3NldE5vdGlmaWNhdGlvbkhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldE5vdGlmaWNhdGlvbkhhbmRsZXIiKSxzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKHQsbil9O3dhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQodCxuLG8pe24mJm8mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSAke3R9IGhhbmRsZXIgcmVwbGFjZWQuIFByZXZpb3VzIGhhbmRsZXIgd2lsbCBubyBsb25nZXIgYmUgY2FsbGVkLmApfXJlcGxhY2VSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e2xldCBvPXQuc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtfYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LG4pe2xldCBvPXQuc2hhcGUubWV0aG9kLnZhbHVlO2lmKHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmhhcyhvKSl0aHJvdyBFcnJvcihgSGFuZGxlciBmb3IgIiR7b30iIGFscmVhZHkgcmVnaXN0ZXJlZCAodmlhICR7bn0pLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigpIHRvIGF0dGFjaCBtdWx0aXBsZSBsaXN0ZW5lcnMsIG9yIHRoZSBvbiogc2V0dGVyIGZvciByZXBsYWNlIHNlbWFudGljcy5gKTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyl9fXZhciBmXz0iMjAyNi0wMS0yNiIsbV89InVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIjtjbGFzcyBnX3tldmVudFRhcmdldDtldmVudFNvdXJjZTttZXNzYWdlTGlzdGVuZXI7Y29uc3RydWN0b3IodD13aW5kb3cucGFyZW50LG4pe3RoaXMuZXZlbnRUYXJnZXQ9dCx0aGlzLmV2ZW50U291cmNlPW4sdGhpcy5tZXNzYWdlTGlzdGVuZXI9bz0+e2lmKG4mJm8uc291cmNlIT09dGhpcy5ldmVudFNvdXJjZSl7Y29uc29sZS5kZWJ1ZygiSWdub3JpbmcgbWVzc2FnZSBmcm9tIHVua25vd24gc291cmNlIixvKTtyZXR1cm59bGV0IHI9Q3Yuc2FmZVBhcnNlKG8uZGF0YSk7ci5zdWNjZXNzPyhjb25zb2xlLmRlYnVnKCJQYXJzZWQgbWVzc2FnZSIsci5kYXRhKSx0aGlzLm9ubWVzc2FnZT8uKHIuZGF0YSkpOm8uZGF0YT8uanNvbnJwYyE9PSIyLjAiP2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG5vbi1KU09OLVJQQyBtZXNzYWdlIixyLmVycm9yLm1lc3NhZ2Usbyk6KGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBtZXNzYWdlIixyLmVycm9yLm1lc3NhZ2UsbyksdGhpcy5vbmVycm9yPy4oRXJyb3IoIkludmFsaWQgSlNPTi1SUEMgbWVzc2FnZSByZWNlaXZlZDogIityLmVycm9yLm1lc3NhZ2UpKSl9fWFzeW5jIHN0YXJ0KCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKX1hc3luYyBzZW5kKHQsbil7dC5tZXRob2QhPT1tXyYmY29uc29sZS5kZWJ1ZygiU2VuZGluZyBtZXNzYWdlIix0KSx0aGlzLmV2ZW50VGFyZ2V0LnBvc3RNZXNzYWdlKHQsIioiKX1hc3luYyBjbG9zZSgpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lciksdGhpcy5vbmNsb3NlPy4oKX1vbmNsb3NlO29uZXJyb3I7b25tZXNzYWdlO3Nlc3Npb25JZDtzZXRQcm90b2NvbFZlcnNpb259dmFyIGJfPU8oW20oImxpZ2h0IiksbSgiZGFyayIpXSkuZGVzY3JpYmUoIkNvbG9yIHRoZW1lIHByZWZlcmVuY2UgZm9yIHRoZSBob3N0IGVudmlyb25tZW50LiIpLHNuPU8oW20oImlubGluZSIpLG0oImZ1bGxzY3JlZW4iKSxtKCJwaXAiKV0pLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGUgZm9yIFVJIHByZXNlbnRhdGlvbi4iKSx2Xz1PKFttKCItLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnkiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtdGVydGlhcnkiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1naG9zdCIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1pbmZvIiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzIiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmciKSxtKCItLWNvbG9yLWJhY2tncm91bmQtZGlzYWJsZWQiKSxtKCItLWNvbG9yLXRleHQtcHJpbWFyeSIpLG0oIi0tY29sb3ItdGV4dC1zZWNvbmRhcnkiKSxtKCItLWNvbG9yLXRleHQtdGVydGlhcnkiKSxtKCItLWNvbG9yLXRleHQtaW52ZXJzZSIpLG0oIi0tY29sb3ItdGV4dC1naG9zdCIpLG0oIi0tY29sb3ItdGV4dC1pbmZvIiksbSgiLS1jb2xvci10ZXh0LWRhbmdlciIpLG0oIi0tY29sb3ItdGV4dC1zdWNjZXNzIiksbSgiLS1jb2xvci10ZXh0LXdhcm5pbmciKSxtKCItLWNvbG9yLXRleHQtZGlzYWJsZWQiKSxtKCItLWNvbG9yLWJvcmRlci1wcmltYXJ5IiksbSgiLS1jb2xvci1ib3JkZXItc2Vjb25kYXJ5IiksbSgiLS1jb2xvci1ib3JkZXItdGVydGlhcnkiKSxtKCItLWNvbG9yLWJvcmRlci1pbnZlcnNlIiksbSgiLS1jb2xvci1ib3JkZXItZ2hvc3QiKSxtKCItLWNvbG9yLWJvcmRlci1pbmZvIiksbSgiLS1jb2xvci1ib3JkZXItZGFuZ2VyIiksbSgiLS1jb2xvci1ib3JkZXItc3VjY2VzcyIpLG0oIi0tY29sb3ItYm9yZGVyLXdhcm5pbmciKSxtKCItLWNvbG9yLWJvcmRlci1kaXNhYmxlZCIpLG0oIi0tY29sb3ItcmluZy1wcmltYXJ5IiksbSgiLS1jb2xvci1yaW5nLXNlY29uZGFyeSIpLG0oIi0tY29sb3ItcmluZy1pbnZlcnNlIiksbSgiLS1jb2xvci1yaW5nLWluZm8iKSxtKCItLWNvbG9yLXJpbmctZGFuZ2VyIiksbSgiLS1jb2xvci1yaW5nLXN1Y2Nlc3MiKSxtKCItLWNvbG9yLXJpbmctd2FybmluZyIpLG0oIi0tZm9udC1zYW5zIiksbSgiLS1mb250LW1vbm8iKSxtKCItLWZvbnQtd2VpZ2h0LW5vcm1hbCIpLG0oIi0tZm9udC13ZWlnaHQtbWVkaXVtIiksbSgiLS1mb250LXdlaWdodC1zZW1pYm9sZCIpLG0oIi0tZm9udC13ZWlnaHQtYm9sZCIpLG0oIi0tZm9udC10ZXh0LXhzLXNpemUiKSxtKCItLWZvbnQtdGV4dC1zbS1zaXplIiksbSgiLS1mb250LXRleHQtbWQtc2l6ZSIpLG0oIi0tZm9udC10ZXh0LWxnLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy14cy1zaXplIiksbSgiLS1mb250LWhlYWRpbmctc20tc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLW1kLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy1sZy1zaXplIiksbSgiLS1mb250LWhlYWRpbmcteGwtc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLTJ4bC1zaXplIiksbSgiLS1mb250LWhlYWRpbmctM3hsLXNpemUiKSxtKCItLWZvbnQtdGV4dC14cy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC10ZXh0LXNtLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LXRleHQtbWQtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtdGV4dC1sZy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLXhzLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctc20tbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy1tZC1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLWxnLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmcteGwtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy0yeGwtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy0zeGwtbGluZS1oZWlnaHQiKSxtKCItLWJvcmRlci1yYWRpdXMteHMiKSxtKCItLWJvcmRlci1yYWRpdXMtc20iKSxtKCItLWJvcmRlci1yYWRpdXMtbWQiKSxtKCItLWJvcmRlci1yYWRpdXMtbGciKSxtKCItLWJvcmRlci1yYWRpdXMteGwiKSxtKCItLWJvcmRlci1yYWRpdXMtZnVsbCIpLG0oIi0tYm9yZGVyLXdpZHRoLXJlZ3VsYXIiKSxtKCItLXNoYWRvdy1oYWlybGluZSIpLG0oIi0tc2hhZG93LXNtIiksbSgiLS1zaGFkb3ctbWQiKSxtKCItLXNoYWRvdy1sZyIpXSkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZSBrZXlzIGF2YWlsYWJsZSB0byBNQ1AgYXBwcyBmb3IgdGhlbWluZy4iKSx5Xz1aKHZfLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApLE8oW2goKSxrdCgpXSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCkpLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApO2Ioe21ldGhvZDptKCJ1aS9vcGVuLWxpbmsiKSxwYXJhbXM6Yih7dXJsOmgoKS5kZXNjcmliZSgiVVJMIHRvIG9wZW4gaW4gdGhlIGhvc3QncyBicm93c2VyIil9KX0pO3ZhciBfXz1iKHtpc0Vycm9yOkIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IGZhaWxlZCB0byBvcGVuIHRoZSBVUkwgKGUuZy4sIGR1ZSB0byBzZWN1cml0eSBwb2xpY3kpLiIpfSkucGFzc3Rocm91Z2goKSxrXz1iKHtpc0Vycm9yOkIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBkb3dubG9hZCBmYWlsZWQgKGUuZy4sIHVzZXIgY2FuY2VsbGVkIG9yIGhvc3QgZGVuaWVkKS4iKX0pLnBhc3N0aHJvdWdoKCksd189Yih7aXNFcnJvcjpCKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCByZWplY3RlZCBvciBmYWlsZWQgdG8gZGVsaXZlciB0aGUgbWVzc2FnZS4iKX0pLnBhc3N0aHJvdWdoKCk7Yih7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1wcm94eS1yZWFkeSIpLHBhcmFtczpiKHt9KX0pO3ZhciBldT1iKHtjb25uZWN0RG9tYWluczp4KGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZShgT3JpZ2lucyBmb3IgbmV0d29yayByZXF1ZXN0cyAoZmV0Y2gvWEhSL1dlYlNvY2tldCkuCgotIE1hcHMgdG8gQ1NQIFxgY29ubmVjdC1zcmNcYCBkaXJlY3RpdmUKLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXR3b3JrIGNvbm5lY3Rpb25zIChzZWN1cmUgZGVmYXVsdClgKSxyZXNvdXJjZURvbWFpbnM6eChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIHN0YXRpYyByZXNvdXJjZXMgKGltYWdlcywgc2NyaXB0cywgc3R5bGVzaGVldHMsIGZvbnRzLCBtZWRpYSkuXG5cbi0gTWFwcyB0byBDU1AgYGltZy1zcmNgLCBgc2NyaXB0LXNyY2AsIGBzdHlsZS1zcmNgLCBgZm9udC1zcmNgLCBgbWVkaWEtc3JjYCBkaXJlY3RpdmVzXG4tIFdpbGRjYXJkIHN1YmRvbWFpbnMgc3VwcG9ydGVkOiBgaHR0cHM6Ly8qLmV4YW1wbGUuY29tYFxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXR3b3JrIHJlc291cmNlcyAoc2VjdXJlIGRlZmF1bHQpIiksZnJhbWVEb21haW5zOngoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBuZXN0ZWQgaWZyYW1lcy5cblxuLSBNYXBzIHRvIENTUCBgZnJhbWUtc3JjYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmVzdGVkIGlmcmFtZXMgYWxsb3dlZCAoYGZyYW1lLXNyYyAnbm9uZSdgKSIpLGJhc2VVcmlEb21haW5zOngoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBbGxvd2VkIGJhc2UgVVJJcyBmb3IgdGhlIGRvY3VtZW50LlxuXG4tIE1hcHMgdG8gQ1NQIGBiYXNlLXVyaWAgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG9ubHkgc2FtZSBvcmlnaW4gYWxsb3dlZCAoYGJhc2UtdXJpICdzZWxmJ2ApIil9KSx0dT1iKHtjYW1lcmE6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjYW1lcmEgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjYW1lcmFgIGZlYXR1cmUuIiksbWljcm9waG9uZTpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IG1pY3JvcGhvbmUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBtaWNyb3Bob25lYCBmZWF0dXJlLiIpLGdlb2xvY2F0aW9uOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgZ2VvbG9jYXRpb24gYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBnZW9sb2NhdGlvbmAgZmVhdHVyZS4iKSxjbGlwYm9hcmRXcml0ZTpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNsaXBib2FyZCB3cml0ZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNsaXBib2FyZC13cml0ZWAgZmVhdHVyZS4iKX0pO2Ioe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIpLHBhcmFtczpiKHt3aWR0aDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IHdpZHRoIGluIHBpeGVscy4iKSxoZWlnaHQ6QygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyBoZWlnaHQgaW4gcGl4ZWxzLiIpfSl9KTt2YXIgJF89Yih7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dCIpLHBhcmFtczpiKHthcmd1bWVudHM6WihoKCksTCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIil9KX0pLFNfPWIoe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCIpLHBhcmFtczpiKHthcmd1bWVudHM6WihoKCksTCgpLmRlc2NyaWJlKCJQYXJ0aWFsIHRvb2wgY2FsbCBhcmd1bWVudHMgKGluY29tcGxldGUsIG1heSBjaGFuZ2UpLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQYXJ0aWFsIHRvb2wgY2FsbCBhcmd1bWVudHMgKGluY29tcGxldGUsIG1heSBjaGFuZ2UpLiIpfSl9KSx6Xz1iKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy90b29sLWNhbmNlbGxlZCIpLHBhcmFtczpiKHtyZWFzb246aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ09wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGNhbmNlbGxhdGlvbiAoZS5nLiwgInVzZXIgYWN0aW9uIiwgInRpbWVvdXQiKS4nKX0pfSksVF89Yih7Zm9udHM6aCgpLm9wdGlvbmFsKCl9KSxJXz1iKHt2YXJpYWJsZXM6eV8ub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlcyBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGNzczpUXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgYmxvY2tzIHRoYXQgYXBwcyBjYW4gaW5qZWN0LiIpfSkseF89Yih7bWV0aG9kOm0oInVpL3Jlc291cmNlLXRlYXJkb3duIikscGFyYW1zOmIoe30pfSk7WihoKCksTCgpKTt2YXIgSHU9Yih7dGV4dDpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRleHQgY29udGVudCBibG9ja3MuIiksaW1hZ2U6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBpbWFnZSBjb250ZW50IGJsb2Nrcy4iKSxhdWRpbzpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGF1ZGlvIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2UgY29udGVudCBibG9ja3MuIikscmVzb3VyY2VMaW5rOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2UgbGluayBjb250ZW50IGJsb2Nrcy4iKSxzdHJ1Y3R1cmVkQ29udGVudDpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHN0cnVjdHVyZWQgY29udGVudC4iKX0pO2Ioe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iKSxwYXJhbXM6Yih7fSkub3B0aW9uYWwoKX0pO3ZhciBQXz1iKHtleHBlcmltZW50YWw6WihoKCksWihoKCksbm8oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSxvcGVuTGlua3M6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBvcGVuaW5nIGV4dGVybmFsIFVSTHMuIiksZG93bmxvYWRGaWxlOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgZmlsZSBkb3dubG9hZHMgdmlhIHVpL2Rvd25sb2FkLWZpbGUuIiksc2VydmVyVG9vbHM6Yih7bGlzdENoYW5nZWQ6QigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGNhbiBwcm94eSB0b29sIGNhbGxzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLHNlcnZlclJlc291cmNlczpiKHtsaXN0Q2hhbmdlZDpCKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGNhbiBwcm94eSByZXNvdXJjZSByZWFkcyB0byB0aGUgTUNQIHNlcnZlci4iKSxsb2dnaW5nOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBsb2cgbWVzc2FnZXMuIiksc2FuZGJveDpiKHtwZXJtaXNzaW9uczp0dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoZSBob3N0IChjYW1lcmEsIG1pY3JvcGhvbmUsIGdlb2xvY2F0aW9uKS4iKSxjc3A6ZXUub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NQIGRvbWFpbnMgYXBwcm92ZWQgYnkgdGhlIGhvc3QuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTYW5kYm94IGNvbmZpZ3VyYXRpb24gYXBwbGllZCBieSB0aGUgaG9zdC4iKSx1cGRhdGVNb2RlbENvbnRleHQ6SHUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGNvbnRleHQgdXBkYXRlcyAodWkvdXBkYXRlLW1vZGVsLWNvbnRleHQpIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBtb2RlbCdzIGNvbnRleHQgZm9yIGZ1dHVyZSB0dXJucy4iKSxtZXNzYWdlOkh1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVjZWl2aW5nIGNvbnRlbnQgbWVzc2FnZXMgKHVpL21lc3NhZ2UpIGZyb20gdGhlIHZpZXcuIiksc2FtcGxpbmc6Yih7dG9vbHM6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29sIHVzZSB2aWEgYHRvb2xzYCBhbmQgYHRvb2xDaG9pY2VgIHBhcmFtZXRlcnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIExMTSBzYW1wbGluZyAoc2FtcGxpbmcvY3JlYXRlTWVzc2FnZSkgZnJvbSB0aGUgdmlldy5cbk1pcnJvcnMgdGhlIE1DUCBgQ2xpZW50Q2FwYWJpbGl0aWVzLnNhbXBsaW5nYCBzaGFwZSBzbyBob3N0cyBjYW4gcGFzcyBpdCB0aHJvdWdoLiIpfSksQ189Yih7ZXhwZXJpbWVudGFsOlooaCgpLFooaCgpLG5vKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksdG9vbHM6Yih7bGlzdENoYW5nZWQ6QigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFwcCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFwcCBleHBvc2VzIE1DUC1zdHlsZSB0b29scyB0aGF0IHRoZSBob3N0IGNhbiBjYWxsLiIpLGF2YWlsYWJsZURpc3BsYXlNb2Rlczp4KHNuKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBhcHAgc3VwcG9ydHMuIil9KTtiKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczpiKHt9KS5vcHRpb25hbCgpfSk7Yih7Y3NwOmV1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGNvbmZpZ3VyYXRpb24gZm9yIFVJIHJlc291cmNlcy4iKSxwZXJtaXNzaW9uczp0dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTYW5kYm94IHBlcm1pc3Npb25zIHJlcXVlc3RlZCBieSB0aGUgVUkgcmVzb3VyY2UuIiksZG9tYWluOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBEZWRpY2F0ZWQgb3JpZ2luIGZvciB2aWV3IHNhbmRib3guCgpVc2VmdWwgd2hlbiB2aWV3cyBuZWVkIHN0YWJsZSwgZGVkaWNhdGVkIG9yaWdpbnMgZm9yIE9BdXRoIGNhbGxiYWNrcywgQ09SUyBwb2xpY2llcywgb3IgQVBJIGtleSBhbGxvd2xpc3RzLgoKKipIb3N0LWRlcGVuZGVudDoqKiBUaGUgZm9ybWF0IGFuZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciB0aGlzIGZpZWxkIGFyZSBkZXRlcm1pbmVkIGJ5IGVhY2ggaG9zdC4gU2VydmVycyBNVVNUIGNvbnN1bHQgaG9zdC1zcGVjaWZpYyBkb2N1bWVudGF0aW9uIGZvciB0aGUgZXhwZWN0ZWQgZG9tYWluIGZvcm1hdC4gQ29tbW9uIHBhdHRlcm5zIGluY2x1ZGU6Ci0gSGFzaC1iYXNlZCBzdWJkb21haW5zIChlLmcuLCBcYHtoYXNofS5jbGF1ZGVtY3Bjb250ZW50LmNvbVxgKQotIFVSTC1kZXJpdmVkIHN1YmRvbWFpbnMgKGUuZy4sIFxgd3d3LWV4YW1wbGUtY29tLm9haXVzZXJjb250ZW50LmNvbVxgKQoKSWYgb21pdHRlZCwgaG9zdCB1c2VzIGRlZmF1bHQgc2FuZGJveCBvcmlnaW4gKHR5cGljYWxseSBwZXItY29udmVyc2F0aW9uKS5gKSxwcmVmZXJzQm9yZGVyOkIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBWaXN1YWwgYm91bmRhcnkgcHJlZmVyZW5jZSAtIHRydWUgaWYgdmlldyBwcmVmZXJzIGEgdmlzaWJsZSBib3JkZXIuCgpCb29sZWFuIHJlcXVlc3Rpbmcgd2hldGhlciBhIHZpc2libGUgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIGlzIHByb3ZpZGVkIGJ5IHRoZSBob3N0LiBTcGVjaWZ5aW5nIGFuIGV4cGxpY2l0IHZhbHVlIGZvciB0aGlzIGlzIHJlY29tbWVuZGVkIGJlY2F1c2UgaG9zdHMnIGRlZmF1bHRzIG1heSB2YXJ5LgoKLSBcYHRydWVcYDogcmVxdWVzdCB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBcYGZhbHNlXGA6IHJlcXVlc3Qgbm8gdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gb21pdHRlZDogaG9zdCBkZWNpZGVzIGJvcmRlcmApfSk7Yih7bWV0aG9kOm0oInVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIikscGFyYW1zOmIoe21vZGU6c24uZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgYmVpbmcgcmVxdWVzdGVkLiIpfSl9KTt2YXIgRV89Yih7bW9kZTpzbi5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSB0aGF0IHdhcyBhY3R1YWxseSBzZXQuIE1heSBkaWZmZXIgZnJvbSByZXF1ZXN0ZWQgaWYgbm90IHN1cHBvcnRlZC4iKX0pLnBhc3N0aHJvdWdoKCksQV89TyhbbSgibW9kZWwiKSxtKCJhcHAiKV0pLmRlc2NyaWJlKCJUb29sIHZpc2liaWxpdHkgc2NvcGUgLSB3aG8gY2FuIGFjY2VzcyB0aGUgdG9vbC4iKTtiKHtyZXNvdXJjZVVyaTpoKCkub3B0aW9uYWwoKSx2aXNpYmlsaXR5OngoQV8pLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFdobyBjYW4gYWNjZXNzIHRoaXMgdG9vbC4gRGVmYXVsdDogWyJtb2RlbCIsICJhcHAiXQotICJtb2RlbCI6IFRvb2wgdmlzaWJsZSB0byBhbmQgY2FsbGFibGUgYnkgdGhlIGFnZW50Ci0gImFwcCI6IFRvb2wgY2FsbGFibGUgYnkgdGhlIGFwcCBmcm9tIHRoaXMgc2VydmVyIG9ubHlgKSxjc3A6c3QoKS5vcHRpb25hbCgpLHBlcm1pc3Npb25zOnN0KCkub3B0aW9uYWwoKX0pO2Ioe21pbWVUeXBlczp4KGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgnQXJyYXkgb2Ygc3VwcG9ydGVkIE1JTUUgdHlwZXMgZm9yIFVJIHJlc291cmNlcy5cbk11c3QgaW5jbHVkZSBgInRleHQvaHRtbDtwcm9maWxlPW1jcC1hcHAiYCBmb3IgTUNQIEFwcHMgc3VwcG9ydC4nKX0pO2Ioe21ldGhvZDptKCJ1aS9kb3dubG9hZC1maWxlIikscGFyYW1zOmIoe2NvbnRlbnRzOngoTyhbemYsVGZdKSkuZGVzY3JpYmUoIlJlc291cmNlIGNvbnRlbnRzIHRvIGRvd25sb2FkIOKAlCBlbWJlZGRlZCAoaW5saW5lIGRhdGEpIG9yIGxpbmtlZCAoaG9zdCBmZXRjaGVzKS4gVXNlcyBzdGFuZGFyZCBNQ1AgcmVzb3VyY2UgdHlwZXMuIil9KX0pO2Ioe21ldGhvZDptKCJ1aS9tZXNzYWdlIikscGFyYW1zOmIoe3JvbGU6bSgidXNlciIpLmRlc2NyaWJlKCdNZXNzYWdlIHJvbGUsIGN1cnJlbnRseSBvbmx5ICJ1c2VyIiBpcyBzdXBwb3J0ZWQuJyksY29udGVudDp4KGJvKS5kZXNjcmliZSgiTWVzc2FnZSBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpfSl9KTtiKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXJlc291cmNlLXJlYWR5IikscGFyYW1zOmIoe2h0bWw6aCgpLmRlc2NyaWJlKCJIVE1MIGNvbnRlbnQgdG8gbG9hZCBpbnRvIHRoZSBpbm5lciBpZnJhbWUuIiksc2FuZGJveDpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSBpbm5lciBpZnJhbWUncyBzYW5kYm94IGF0dHJpYnV0ZS4iKSxjc3A6ZXUub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NQIGNvbmZpZ3VyYXRpb24gZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKSxwZXJtaXNzaW9uczp0dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTYW5kYm94IHBlcm1pc3Npb25zIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIil9KX0pO3ZhciBPXz1iKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy90b29sLXJlc3VsdCIpLHBhcmFtczpscy5kZXNjcmliZSgiU3RhbmRhcmQgTUNQIHRvb2wgZXhlY3V0aW9uIHJlc3VsdC4iKX0pLEFmPWIoe3Rvb2xJbmZvOmIoe2lkOmxvLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkpTT04tUlBDIGlkIG9mIHRoZSB0b29scy9jYWxsIHJlcXVlc3QuIiksdG9vbDpYYy5kZXNjcmliZSgiVG9vbCBkZWZpbml0aW9uIGluY2x1ZGluZyBuYW1lLCBpbnB1dFNjaGVtYSwgZXRjLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWV0YWRhdGEgb2YgdGhlIHRvb2wgY2FsbCB0aGF0IGluc3RhbnRpYXRlZCB0aGlzIEFwcC4iKSx0aGVtZTpiXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDdXJyZW50IGNvbG9yIHRoZW1lIHByZWZlcmVuY2UuIiksc3R5bGVzOklfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0eWxlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxkaXNwbGF5TW9kZTpzbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3cgdGhlIFVJIGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOngoc24pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGhvc3Qgc3VwcG9ydHMuIiksY29udGFpbmVyRGltZW5zaW9uczpPKFtiKHtoZWlnaHQ6QygpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pLGIoe21heEhlaWdodDpPKFtDKCksa3QoKV0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1heGltdW0gY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KV0pLmFuZChPKFtiKHt3aWR0aDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KSxiKHttYXhXaWR0aDpPKFtDKCksa3QoKV0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1heGltdW0gY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pXSkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYENvbnRhaW5lciBkaW1lbnNpb25zLiBSZXByZXNlbnRzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBpZnJhbWUgb3Igb3RoZXIKY29udGFpbmVyIGhvbGRpbmcgdGhlIGFwcC4gU3BlY2lmeSBlaXRoZXIgd2lkdGggb3IgbWF4V2lkdGgsIGFuZCBlaXRoZXIgaGVpZ2h0IG9yIG1heEhlaWdodC5gKSxsb2NhbGU6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyBsYW5ndWFnZSBhbmQgcmVnaW9uIHByZWZlcmVuY2UgaW4gQkNQIDQ3IGZvcm1hdC4iKSx0aW1lWm9uZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIHRpbWV6b25lIGluIElBTkEgZm9ybWF0LiIpLHVzZXJBZ2VudDpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhcHBsaWNhdGlvbiBpZGVudGlmaWVyLiIpLHBsYXRmb3JtOk8oW20oIndlYiIpLG0oImRlc2t0b3AiKSxtKCJtb2JpbGUiKV0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBsYXRmb3JtIHR5cGUgZm9yIHJlc3BvbnNpdmUgZGVzaWduIGRlY2lzaW9ucy4iKSxkZXZpY2VDYXBhYmlsaXRpZXM6Yih7dG91Y2g6QigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyB0b3VjaCBpbnB1dC4iKSxob3ZlcjpCKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIGhvdmVyIGludGVyYWN0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRldmljZSBpbnB1dCBjYXBhYmlsaXRpZXMuIiksc2FmZUFyZWFJbnNldHM6Yih7dG9wOkMoKS5kZXNjcmliZSgiVG9wIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIikscmlnaHQ6QygpLmRlc2NyaWJlKCJSaWdodCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLGJvdHRvbTpDKCkuZGVzY3JpYmUoIkJvdHRvbSBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLGxlZnQ6QygpLmRlc2NyaWJlKCJMZWZ0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNb2JpbGUgc2FmZSBhcmVhIGJvdW5kYXJpZXMgaW4gcGl4ZWxzLiIpfSkucGFzc3Rocm91Z2goKSxSXz1iKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9ob3N0LWNvbnRleHQtY2hhbmdlZCIpLHBhcmFtczpBZi5kZXNjcmliZSgiUGFydGlhbCBjb250ZXh0IHVwZGF0ZSBjb250YWluaW5nIG9ubHkgY2hhbmdlZCBmaWVsZHMuIil9KTtiKHttZXRob2Q6bSgidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiKSxwYXJhbXM6Yih7Y29udGVudDp4KGJvKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZXh0IGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIiksc3RydWN0dXJlZENvbnRlbnQ6WihoKCksTCgpLmRlc2NyaWJlKCJTdHJ1Y3R1cmVkIGNvbnRlbnQgZm9yIG1hY2hpbmUtcmVhZGFibGUgY29udGV4dCBkYXRhLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHJ1Y3R1cmVkIGNvbnRlbnQgZm9yIG1hY2hpbmUtcmVhZGFibGUgY29udGV4dCBkYXRhLiIpfSl9KTtiKHttZXRob2Q6bSgidWkvaW5pdGlhbGl6ZSIpLHBhcmFtczpiKHthcHBJbmZvOmNzLmRlc2NyaWJlKCJBcHAgaWRlbnRpZmljYXRpb24gKG5hbWUgYW5kIHZlcnNpb24pLiIpLGFwcENhcGFiaWxpdGllczpDXy5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyB0aGlzIGFwcCBwcm92aWRlcy4iKSxwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCJQcm90b2NvbCB2ZXJzaW9uIHRoaXMgYXBwIHN1cHBvcnRzLiIpfSl9KTt2YXIgTl89Yih7cHJvdG9jb2xWZXJzaW9uOmgoKS5kZXNjcmliZSgnTmVnb3RpYXRlZCBwcm90b2NvbCB2ZXJzaW9uIHN0cmluZyAoZS5nLiwgIjIwMjUtMTEtMjEiKS4nKSxob3N0SW5mbzpjcy5kZXNjcmliZSgiSG9zdCBhcHBsaWNhdGlvbiBpZGVudGlmaWNhdGlvbiBhbmQgdmVyc2lvbi4iKSxob3N0Q2FwYWJpbGl0aWVzOlBfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSBob3N0LiIpLGhvc3RDb250ZXh0OkFmLmRlc2NyaWJlKCJSaWNoIGNvbnRleHQgYWJvdXQgdGhlIGhvc3QgZW52aXJvbm1lbnQuIil9KS5wYXNzdGhyb3VnaCgpLFpfPXt0YXJnZXQ6ImRyYWZ0LTIwMjAtMTIifTthc3luYyBmdW5jdGlvbiBGdShlLHQpe2xldCBuPWVbIn5zdGFuZGFyZCJdO2lmKG4uanNvblNjaGVtYSlyZXR1cm4gbi5qc29uU2NoZW1hW3RdKFpfKTtpZihuLnZlbmRvcj09PSJ6b2QiKXtsZXR7ejpvfT1hd2FpdCBsbSgoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+U3YpLHZvaWQgMCxpbXBvcnQubWV0YS51cmwpO3JldHVybiBvLnRvSlNPTlNjaGVtYShlLHtpbzp0fSl9dGhyb3cgRXJyb3IoYFNjaGVtYSAodmVuZG9yOiAke24udmVuZG9yfSkgZG9lcyBub3QgaW1wbGVtZW50IFN0YW5kYXJkIEpTT04gU2NoZW1hICh+c3RhbmRhcmQuanNvblNjaGVtYSkuIFVzZSBhIGxpYnJhcnkgdGhhdCBkb2VzICh6b2QgdjQsIEFya1R5cGUsIFZhbGlib3QpIG9yIHdyYXAgeW91ciBzY2hlbWEgYWNjb3JkaW5nbHkuYCl9YXN5bmMgZnVuY3Rpb24gVnUoZSx0LG49IiIpe2xldCBvPWF3YWl0IGVbIn5zdGFuZGFyZCJdLnZhbGlkYXRlKHQpO2lmKG8uaXNzdWVzKXtsZXQgcj1vLmlzc3Vlcy5tYXAocz0+e2xldCBhPXMucGF0aD8ubWFwKGk9PnR5cGVvZiBpPT0ib2JqZWN0Ij9pLmtleTppKS5qb2luKCIuIik7cmV0dXJuIGE/YCR7YX06ICR7cy5tZXNzYWdlfWA6cy5tZXNzYWdlfSkuam9pbigiOyAiKTt0aHJvdyBFcnJvcihuK3IpfXJldHVybiBvLnZhbHVlfWZ1bmN0aW9uIGpfKGUpe2xldCB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0LnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsZSksdC5zdHlsZS5jb2xvclNjaGVtZT1lfWZ1bmN0aW9uIE1fKGUsdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe2ZvcihsZXRbbixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKW8hPT12b2lkIDAmJnQuc3R5bGUuc2V0UHJvcGVydHkobixvKX1mdW5jdGlvbiBxXyhlKXtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiX19tY3AtaG9zdC1mb250cyIpKXJldHVybjtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3QuaWQ9Il9fbWNwLWhvc3QtZm9udHMiLHQudGV4dENvbnRlbnQ9ZSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfWNsYXNzIG51IGV4dGVuZHMgaF97X2FwcEluZm87X2NhcGFiaWxpdGllcztvcHRpb25zO19ob3N0Q2FwYWJpbGl0aWVzO19ob3N0SW5mbztfaG9zdENvbnRleHQ7X3JlZ2lzdGVyZWRUb29scz17fTtfaW5pdGlhbGl6ZWRTZW50PSExO19hc3NlcnRJbml0aWFsaXplZCh0KXtpZih0aGlzLl9pbml0aWFsaXplZFNlbnQpcmV0dXJuO2xldCBuPWBbZXh0LWFwcHNdIEFwcC4ke3R9KCkgY2FsbGVkIGJlZm9yZSBjb25uZWN0KCkgY29tcGxldGVkIHRoZSB1aS9pbml0aWFsaXplIGhhbmRzaGFrZS4gQXdhaXQgYXBwLmNvbm5lY3QoKSBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCwgb3IgbW92ZSBkYXRhIGxvYWRpbmcgdG8gYW4gb250b29scmVzdWx0IGhhbmRsZXIuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4oYCR7bn0uIFRoaXMgd2lsbCB0aHJvdyBpbiBhIGZ1dHVyZSByZWxlYXNlLmApfWV2ZW50U2NoZW1hcz17dG9vbGlucHV0OiRfLHRvb2xpbnB1dHBhcnRpYWw6U18sdG9vbHJlc3VsdDpPXyx0b29sY2FuY2VsbGVkOnpfLGhvc3Rjb250ZXh0Y2hhbmdlZDpSX307c3RhdGljIE9ORV9TSE9UX0VWRU5UUz1uZXcgU2V0KFsidG9vbGlucHV0IiwidG9vbGlucHV0cGFydGlhbCIsInRvb2xyZXN1bHQiLCJ0b29sY2FuY2VsbGVkIl0pO19ldmVySGFkTGlzdGVuZXI9bmV3IFNldDtfYXNzZXJ0SGFuZGxlclRpbWluZyh0KXtpZighbnUuT05FX1NIT1RfRVZFTlRTLmhhcyh0KXx8dGhpcy5fZXZlckhhZExpc3RlbmVyLmhhcyh0KXx8KHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5hZGQodCksIXRoaXMuX2luaXRpYWxpemVkU2VudCkpcmV0dXJuO2xldCBuPWBbZXh0LWFwcHNdICIke1N0cmluZyh0KX0iIGhhbmRsZXIgcmVnaXN0ZXJlZCBhZnRlciBjb25uZWN0KCkgY29tcGxldGVkIHRoZSB1aS9pbml0aWFsaXplIGhhbmRzaGFrZS4gVGhlIGhvc3QgbWF5IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgbm90aWZpY2F0aW9uLiBSZWdpc3RlciBoYW5kbGVycyBiZWZvcmUgY2FsbGluZyBhcHAuY29ubmVjdCgpLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKG4pfXNldEV2ZW50SGFuZGxlcih0LG4pe24mJnRoaXMuX2Fzc2VydEhhbmRsZXJUaW1pbmcodCksc3VwZXIuc2V0RXZlbnRIYW5kbGVyKHQsbil9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Fzc2VydEhhbmRsZXJUaW1pbmcodCksc3VwZXIuYWRkRXZlbnRMaXN0ZW5lcih0LG4pfW9uRXZlbnREaXNwYXRjaCh0LG4pe3Q9PT0iaG9zdGNvbnRleHRjaGFuZ2VkIiYmKHRoaXMuX2hvc3RDb250ZXh0PXsuLi50aGlzLl9ob3N0Q29udGV4dCwuLi5ufSl9Y29uc3RydWN0b3IodCxuPXt9LG89e2F1dG9SZXNpemU6ITB9KXtzdXBlcihvKSx0aGlzLl9hcHBJbmZvPXQsdGhpcy5fY2FwYWJpbGl0aWVzPW4sdGhpcy5vcHRpb25zPW8sby5hbGxvd1Vuc2FmZUV2YWx8fG9lKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcih1cyxyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1wXyh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxhPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsaT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUobCl7T2JqZWN0LmFzc2lnbih0aGlzLGwpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09aSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhsLHUpPT57aWYoIWkuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGQ7aWYoYSl7bGV0IGY9aS5pbnB1dFNjaGVtYSxnPWY/YXdhaXQgVnUoZixsPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpsPz97fTtkPWF3YWl0IG8oZyx1KX1lbHNlIGQ9YXdhaXQgbyh1KTtyZXR1cm4gaS5vdXRwdXRTY2hlbWEmJiFkLmlzRXJyb3ImJihkLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IFZ1KGkub3V0cHV0U2NoZW1hLGQuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxkfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1pLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksaX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IEZ1KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IEZ1KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcih4XywobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoeGYsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihJZiwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LGxzLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LFNmLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSwkZixuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9FZjpDZjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sd18sbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sTWMsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LF9fLG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSxrXyxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LEVfLG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPWEuc3R5bGUuaGVpZ2h0O2Euc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGw9TWF0aC5jZWlsKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTthLnN0eWxlLmhlaWdodD1pO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxsIT09bykmJihuPXUsbz1sLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpsfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgZ18od2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpmX319LE5fLG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgSnU9IiI7Y29uc3QgT2Y9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PUp1JiYodC5hcHBseUhvc3RGb250cyhyKSxKdT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgYSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGk9TnVtYmVyKHNbYV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHthfWAsYCR7TnVtYmVyLmlzRmluaXRlKGkpJiZpPjA/aTowfXB4YCl9fSxSZj1lPT5lLnJlcGxhY2UoL1smPD4iJ10vZyx0PT4oeyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9KVt0XSksRF89Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEwIDMuNSA1LjUgOCAxMCAxMi41IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPicsTF89Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTYgMy41IDEwLjUgOCA2IDEyLjUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+JyxCXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMy41IDYgOCAxMC41IDEyLjUgNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4nLFVfPSc8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik05LjUgMi41aDR2NE02LjUgMTMuNWgtNHYtNE0xMy41IDIuNSA5IDdNMi41IDEzLjUgNyA5IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPicsSF89ZT0+e2NvbnN0IHQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGUudG90YWwpKSxuPU1hdGgubWF4KDAsTWF0aC5mbG9vcihlLmZyb20pKSxvPU1hdGgubWF4KDAsTWF0aC5mbG9vcihlLmNvdW50KSkscj1uPjAscz1uK288dDtpZighciYmIXMpcmV0dXJuIiI7Y29uc3QgYT1lLm5vdW4/YCAke1JmKGUubm91bil9YDoiIixpPW8/YCR7bisxfeKAkyR7bitvfSBvZiAke3R9YDpgMCBvZiAke3R9YDtyZXR1cm5gPG5hdiBjbGFzcz0iY2stcGFnZXIiIGFyaWEtbGFiZWw9IlBhZ2VzIj48YnV0dG9uIGNsYXNzPSJjay1wYWdlci1idG4iIHR5cGU9ImJ1dHRvbiIgJHtlLnByZXZ9JHtyPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJQcmV2aW91cyR7YX0iPiR7RF99PHNwYW4+UHJldmlvdXM8L3NwYW4+PC9idXR0b24+PHNwYW4gY2xhc3M9ImNrLXBhZ2VyLW4iPiR7aX08L3NwYW4+PGJ1dHRvbiBjbGFzcz0iY2stcGFnZXItYnRuIiB0eXBlPSJidXR0b24iICR7ZS5uZXh0fSR7cz8iIjoiIGRpc2FibGVkIn0gYXJpYS1sYWJlbD0iTmV4dCR7YX0iPjxzcGFuPk5leHQ8L3NwYW4+JHtMX308L2J1dHRvbj48L25hdj4ke2UuYWxsP2A8YnV0dG9uIGNsYXNzPSJjay1wYWdlci1hbGwiIHR5cGU9ImJ1dHRvbiIgJHtlLmFsbH0+PHNwYW4+VmlldyBhbGwgJHt0fTwvc3Bhbj4ke1VffTwvYnV0dG9uPmA6IiJ9YH0sRl89KGUsdCk9PmA8YnV0dG9uIGNsYXNzPSJjay1wYWdlci1hbGwiIHR5cGU9ImJ1dHRvbiIgJHt0fT48c3BhbiBkYXRhLWxhYmVsPiR7UmYoZSl9PC9zcGFuPiR7Ql99PC9idXR0b24+YCxFZT1uZXcgbnUoe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6WyJpbmxpbmUiLCJmdWxsc2NyZWVuIl19KSxOZj17YXBwbHlEb2N1bWVudFRoZW1lOmpfLGFwcGx5SG9zdFN0eWxlVmFyaWFibGVzOk1fLGFwcGx5SG9zdEZvbnRzOnFffSxwZT1lPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxjPWU9PlN0cmluZyhlPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLHQ9PnQ9PT0iJiI/IiZhbXA7Ijp0PT09IjwiPyImbHQ7Ijp0PT09Ij4iPyImZ3Q7Ijp0PT09JyInPyImcXVvdDsiOiImIzM5OyIpO2xldCBndD0iIixrcz0iIixaZj0iIix3cz0iIixvdT17fSxydT0hMSxqZj0iIixUPXtjaGVja0luOiIiLGNoZWNrT3V0OiIiLGd1ZXN0czoyfSxZPTE7Y29uc3QgS3U9NTtsZXQgWD1udWxsLHp0PVtdLEJlPSIiLGhlPVtdLE09bnVsbCxNbz0wO2NvbnN0IFZfPW5ldyBTZXQoWyJmb3JnZXRQcmVmZXJlbmNlcyIsImFkZFRvVHJpcCIsImNsZWFyVHJpcCIsInJlcXVlc3RCb29raW5nIiwiY2FuY2VsQm9va2luZyIsImNoYW5nZUJvb2tpbmciLCJzaWduSW4iLCJzaWduT3V0Il0pLGFuPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/YGhvdGVsOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gZXh0cmFzOmJvb2tpbmc6JHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmBleHRyYXM6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMifHx0PT09InBvbGljeS1taXNzaW5nIj9gcG9saWN5OiR7ZS5ob3RlbD8uaWQ/PyIifToke2UudG9waWM/PyIifWA6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/YGNhbmNlbDoke2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImNoYW5nZS1wcmV2aWV3Ij9gY2hhbmdlOiR7ZS5jb25maXJtYXRpb25Db2RlPz9lLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJkZXN0aW5hdGlvbnMiP2BkZXN0aW5hdGlvbnM6JHtlLnNjb3BlPy5uYW1lPz8iIn1gOnQ9PT0iaG90ZWxzInx8dD09PSJuby1ob3RlbHMiP2Bob3RlbHM6JHtlLmFzaz8uY2l0eT8/IiJ9OiR7ZS5hc2s/LnF1ZXJ5Pz9lLnF1ZXJ5Pz8iIn1gOnR9LFRvPWU9PnshTXx8S18uaGFzKFN0cmluZyhNLnZpZXcpKXx8YW4oZSkhPT1hbihNKSYmKGhlPVsuLi5oZSx7cGF5bG9hZDpNLGxhYmVsOldfKE0pLHZlcnNpb246TW99XS5zbGljZSgtNikpfSxKXz1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpLG49ZT8uc3RheT8uY2hlY2tJbj97Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9Ont9O2lmKHQ9PT0idHJpcCIpcmV0dXJue2tleToidmlld1RyaXAiLGFyZ3M6e319O2lmKHQ9PT0iYm9va2luZ3MiKXJldHVybntrZXk6Imxpc3RCb29raW5ncyIsYXJnczp7fX07aWYoKHQ9PT0iaG90ZWxzInx8dD09PSJkZXN0aW5hdGlvbnMifHx0PT09Im5vLWhvdGVscyImJmUuYXNrKSYmZS5hc2spcmV0dXJue2tleToibGlzdEhvdGVscyIsYXJnczp7Li4uZS5hc2t9fTtpZih0PT09ImNvbXBhcmlzb24iJiZBcnJheS5pc0FycmF5KGUuY29sdW1ucykpcmV0dXJue2tleToiY29tcGFyZSIsYXJnczp7Li4ubiwuLi5lLnRpdGxlP3t0aXRsZTplLnRpdGxlfTp7fSwuLi5lLnJlY29tbWVuZGVkP3tyZWNvbW1lbmRlZDplLnJlY29tbWVuZGVkfTp7fSxlbnRyaWVzOmUuY29sdW1ucy5tYXAobz0+KHtob3RlbDpvLmhvdGVsPy5pZCwuLi5vLmJlc3RGb3I/e2Jlc3RGb3I6by5iZXN0Rm9yfTp7fSwuLi5vLnByb3M/Lmxlbmd0aD97cHJvczpvLnByb3N9Ont9LC4uLm8uY29ucz8ubGVuZ3RoP3tjb25zOm8uY29uc306e319KSl9fTtpZigodD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToiZ2V0SG90ZWwiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubiwuLi5lLnJvb21zX3dhbnRlZD97cm9vbXM6ZS5yb29tc193YW50ZWR9Ont9fX07aWYodD09PSJleHRyYXMiJiZlLmZvckJvb2tpbmcpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczpodChTdHJpbmcoZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGUpKX07aWYodD09PSJleHRyYXMiJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm59fTtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJue2tleToiaXRpbmVyYXJ5IixhcmdzOnt0aXRsZTplLnRpdGxlLC4uLm4sZGF5czooZS5kYXlzPz9bXSkubWFwKG89Pih7bGFiZWw6by5sYWJlbCwuLi5vLm5vdGU/e25vdGU6by5ub3RlfTp7fSxpdGVtczooby5pdGVtcz8/W10pLm1hcChyPT5yLmlkKX0pKX19fSxXdT1lPT57aGU9aGUuZmlsdGVyKHQ9PiFlLmluY2x1ZGVzKFN0cmluZyh0LnBheWxvYWQ/LnZpZXcpKSl9LEtfPW5ldyBTZXQoWyJmaW5kLWJvb2tpbmciLCJib29raW5nIiwiY2FuY2VsbGVkIiwiY2hhbmdlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0IiwibWVtYmVyLXNpZ24taW4iLCJtZW1iZXItbm90LWZvdW5kIl0pLFdfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJkZXN0aW5hdGlvbnMiKXJldHVybiBlLnNjb3BlPy5uYW1lP1N0cmluZyhlLnNjb3BlLm5hbWUpOiJhbGwgZGVzdGluYXRpb25zIjtpZih0PT09ImhvdGVscyIpe2lmKGUuYXNrPy5jaXR5KXJldHVybiBTdHJpbmcoZS5hc2suY2l0eSk7Y29uc3Qgbj1bLi4ubmV3IFNldCgoZS5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8uY2l0eSkpKV07cmV0dXJuIG4ubGVuZ3RoPT09MT9TdHJpbmcoblswXSk6YCR7ZS50b3RhbD8/MH0gaG90ZWxzYH1yZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciPyJ0aGUgY2FuY2VsbGF0aW9uIjp0PT09ImNoYW5nZS1wcmV2aWV3Ij8idGhlIGNoYW5nZSI6dD09PSJtZW1iZXIiPyJ5b3VyIG1lbWJlcnNoaXAiOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGFkZC1vbnMgZm9yICR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSxNZj0oKT0+e2NvbnN0IGU9cGUoImJhY2tidG4iKSx0PWhlLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IGVuPSIiLE1zPSIiLGNuPTAsc3U9ITE7Y29uc3QgcWY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihNcz10LnRyaXBJZCksY249TnVtYmVyKHQuY291bnQ/PzApLEFycmF5LmlzQXJyYXkodC5saW5lcykmJih6dD10LmxpbmVzLHN1PSEwKSl9LEdfPWU9Pk1zP3suLi5lLHRyaXA6TXN9OmUsRGY9bmV3IE1hcCxRXz1lPT57Y29uc3QgdD1bZT8uYm9va2luZywuLi5BcnJheS5pc0FycmF5KGU/LmJvb2tpbmdzKT9lLmJvb2tpbmdzOltdXTtmb3IoY29uc3QgbiBvZiB0KW4/LmNvbmZpcm1hdGlvbkNvZGUmJm4/Lmd1ZXN0Py5lbWFpbCYmRGYuc2V0KFN0cmluZyhuLmNvbmZpcm1hdGlvbkNvZGUpLnRvVXBwZXJDYXNlKCksU3RyaW5nKG4uZ3Vlc3QuZW1haWwpKX0saHQ9ZT0+e2NvbnN0IHQ9RGYuZ2V0KGUudG9VcHBlckNhc2UoKSk7cmV0dXJuIHQ/e2Jvb2tpbmc6ZSxlbWFpbDp0fTp7Ym9va2luZzplfX0sWV89ZT0+b3VbZV0/PyIiLGRzPWU9PiEhb3VbZV0sWF89ZHM7bGV0IExmPSJob2xkIixCZj0hMSxVZj0hMSxSZT1udWxsLFVlPSIiO2NvbnN0IHVuPWU9PlJlJiZlP1JlLnN1cHBsaWVycy5maW5kKHQ9PnQuaWQ9PT1lKTp2b2lkIDAsSGU9ZT0+e2NvbnN0IHQ9dW4oZSk7aWYoIXQpcmV0dXJue25hbWU6Z3QsYm9va2luZ01vZGU6TGYsZGVtbzpydSxzYW5kYm94OkJmLHBob25lUmVxdWlyZWQ6VWYsZXh0cmFzOiEwLGNoYW5nZXM6ITB9O2NvbnN0IG49dC5jYXBhYmlsaXRpZXM/P3t9O3JldHVybntuYW1lOlN0cmluZyh0Lm5hbWUpLGJvb2tpbmdNb2RlOm4uYm9va2luZz09PSJwYXktYXQtaG90ZWwiPyJwYXktYXQtaG90ZWwiOiJob2xkIixkZW1vOnQubW9kZSE9PSJsaXZlIixzYW5kYm94OnQubW9kZT09PSJzYW5kYm94IixwaG9uZVJlcXVpcmVkOiEhbi5yZXF1aXJlc1Bob25lLGV4dHJhczpuLmV4dHJhcyE9PSExLGNoYW5nZXM6bi5jaGFuZ2VzIT09ITF9fSxxbz1lPT57Y29uc3QgdD1lPy5icmFuZD9TdHJpbmcoZS5icmFuZCk6IiIsbj11bihlPy5zdXBwbGllcik7aWYoIW4pcmV0dXJuIHQ7Y29uc3Qgbz1TdHJpbmcobi5uYW1lKTtyZXR1cm4gdCYmdCE9PW8/YCR7b30gwrcgJHt0fWA6b30sSGY9ZT0+UmU/Wy4uLm5ldyBTZXQoZS5tYXAodD0+U3RyaW5nKHQuc3VwcGxpZXI/PyIiKSkuZmlsdGVyKEJvb2xlYW4pKV06W107bGV0IEp0PSExO2NvbnN0IEd1PWU9PntKdD1lLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jYXJkIik/LmNsYXNzTGlzdC50b2dnbGUoImJ1c3kiLGUpfTtsZXQgRG89MCxGZj0iIixWZj0iIjtjb25zdCB0dD0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlYWQiKTtpZighZSlyZXR1cm47Y29uc3QgdD0oKT0+ZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KTt0KCksc2V0VGltZW91dCh0LDE4MCl9LHE9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89WV8oZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihKdClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO0d1KCEwKTtjb25zdCByPURvO3JldHVybiBFZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpHXyh0KX0pLmZpbmFsbHkoKCk9Pkd1KCExKSkudGhlbihzPT57cWYocz8uX21ldGEpO2NvbnN0IGE9cz8uc3RydWN0dXJlZENvbnRlbnQsaT1hJiZuLmZvbGQ/bi5mb2xkKGEpOmEsbD1WXy5oYXMoZSkmJmkmJmkudmlldyE9PSJlcnJvciI7aWYocj09PURvJiZpKXtGZj1hP0pTT04uc3RyaW5naWZ5KGEpOiIiLFZmPUpTT04uc3RyaW5naWZ5KGkpO2NvbnN0IHU9YW4oaSkhPT1hbihNKTtuLnB1c2ghPT0hMSYmVG8oaSksbCYmKE1vKz0xKSxpLnZpZXc9PT0iYm9va2luZyImJihXdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLHhlPW51bGwpLChpLnZpZXc9PT0iY2FuY2VsbGVkInx8aS52aWV3PT09ImNoYW5nZWQiKSYmV3UoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLGtlKGkpLHUmJnR0KCl9ZWxzZSBsJiYoTW8rPTEpO3JldHVybiBlayhzLG4ubm90ZSksc30pfSxlaz0oZSx0KT0+e2NvbnN0IG49KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG89Pm8/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyFufHwhRWUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fEVlLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6dD9gJHt0fSAke1N0cmluZyhuKX1gOlN0cmluZyhuKX1dfSkuY2F0Y2goKCk9Pnt9KX07bGV0IHBzPSExO2NvbnN0IHRrPSIoVGhlIGNhcmQgcHJpY2VkIGl0cyBvd24gZGVmYXVsdCBkYXRlcywgdG9uaWdodCwgdG8gc2hvdyB0aGUgcm9vbXM7IHRoZSBndWVzdCBoYXMgbm90IGNob3NlbiB0aGVtLikiLEt0PWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LFd0PWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxuaz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLG9rPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7bmt9JHtjKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHtjKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLGVlPSgpPT5ydT9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke2MoamZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixsbj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0scXM9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLFllPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake2xuKGUuY2hlY2tJbil9IOKAkyAke2xuKGUuY2hlY2tPdXQpfSDCtyAke3FzKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHtxcyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixyaz0oZSx0LG4pPT57Y29uc3Qgbz16dC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0sc2s9KGUsdCk9Pntjb25zdCBuPXp0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxMbz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHtjKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHtjKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7YyhuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxKZj0oZSx0KT0+e2NvbnN0IG49dHx8S2YoKTtyZXR1cm4oIVQuY2hlY2tJbnx8VC5jaGVja0luPG4pJiYoVC5jaGVja0luPW4pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9V2UoVC5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7YyhuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKFdlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7YyhocygpKX08L3NwYW4+CiAgPC9kaXY+YH0saHM9KCk9Pntjb25zdCBlPVQuY2hlY2tJbiYmVC5jaGVja091dD9xcyhULmNoZWNrSW4sVC5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPVk+MT9gJHtZfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0sV2U9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxLZj0oKT0+bmV3IERhdGUoRGF0ZS5ub3coKS1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqNmU0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLFdmPWU9Pntjb25zdCB0PVsuLi5lPy50b2RheT9bZS50b2RheS5taW4sZS50b2RheS5tYXhdOltdLC4uLihlPy5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8udG9kYXlUaGVyZT8/IiIpKV0uZmlsdGVyKG89Pi9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KG8pKS5zb3J0KCksbj1LZigpO3JldHVybnttaW46W3RbMF0/P24sbl0uc29ydCgpWzBdPz9uLHN0YXJ0OnQuYXQoLTEpPz9ufX0saWs9ZT0+e2NvbnN0e21pbjp0LHN0YXJ0Om59PVdmKGUpOyghVC5jaGVja0lufHxULmNoZWNrSW48dCkmJihULmNoZWNrSW49biksKCFULmNoZWNrT3V0fHxULmNoZWNrT3V0PD1ULmNoZWNrSW4pJiYoVC5jaGVja091dD1XZShULmNoZWNrSW4sMSkpO2NvbnN0IG89YDxkaXYgY2xhc3M9InN0YXkiPgogICAgICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7Yyh0KX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iZGNvIiB2YWx1ZT0iJHtjKFQuY2hlY2tPdXQpfSIgbWluPSIke2MoV2UoVC5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke2Uuc2NvcGU/IiI6JzxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kIj5TZWFyY2g8L2J1dHRvbj4nfQogICAgICA8L2Rpdj5gLHI9YDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgIDxsYWJlbCBjbGFzcz0id2hlcmUiPldoZXJlIHRvPGlucHV0IGlkPSJ3aGVyZSIgdHlwZT0ic2VhcmNoIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgY2l0eSwgYSBjb3VudHJ5IG9yIGEgaG90ZWwiIGFyaWEtbGFiZWw9IldoZXJlIHRvIj48L2xhYmVsPgogICAgICAke299CiAgICA8L2Rpdj5gLHM9dT0+YDxkaXYgY2xhc3M9InBsYWNlcyI+JHt1Lm1hcCgoZCxmKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKGQubmFtZSl9IiR7Zj49bnQ/IiBoaWRkZW4iOiIifT4ke2MoZC5uYW1lKX0gPHNtYWxsPiR7YyhkLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfSR7dS5sZW5ndGg+bnQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHt1Lmxlbmd0aC1udH0gbW9yZTwvYnV0dG9uPmA6IiJ9PC9kaXY+YCxhPWUuc2NvcGU7aWYoYSlyZXR1cm5bZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhhLm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLnRvdGFsKX0gJHtjKGUudm9jYWI/Lm5vdW5QbHVyYWw/PyJob3RlbHMiKX0gaW4gJHtjKChhLmNpdGllcz8/W10pLmxlbmd0aCl9IGNpdGllczwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InNlYXJjaCI+JHtvfTwvZGl2PmAscyhhLmNpdGllcz8/W10pLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlLWFsbD0iJHtjKGEubmFtZSl9Ij5BbGwgJHtjKGUudG90YWwpfSBpbiAke2MoYS5uYW1lKX08L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBpPWUucmVnaW9ucz8/W10sbD1pLmZsYXRNYXAodT0+dS5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKHU9PnUuY2l0aWVzPz9bXSkubWFwKCh1LGQpPT4oe2M6dSxpOmR9KSkuc29ydCgodSxkKT0+TnVtYmVyKGQuYy5jb3VudCktTnVtYmVyKHUuYy5jb3VudCl8fHUuaS1kLmkpLnNsaWNlKDAsbnQpLm1hcCgoe2M6dX0pPT51KTtyZXR1cm5bZWUoKSxyLFJlJiZSZS5zdXBwbGllcnMubGVuZ3RoPjE/YDxkaXYgY2xhc3M9InJlZ2lvbiI+PGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPkhvdGVsIGdyb3VwczwvZGl2PjxkaXYgY2xhc3M9InBsYWNlcyBncm91cHMiPiR7UmUuc3VwcGxpZXJzLm1hcCh1PT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBncm91cCIgdHlwZT0iYnV0dG9uIiBkYXRhLWdyb3VwLWhvbWU9IiR7Yyh1LmlkKX0iPiR7dS5sb2dvVXJsP2A8aW1nIHNyYz0iJHtjKHUubG9nb1VybCl9IiBhbHQ9IiI+YDoiIn0ke2ModS5uYW1lKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj48L2Rpdj5gOiIiLGwubGVuZ3RoP2A8ZGl2IGNsYXNzPSJyZWdpb24iPjxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj5Ub3AgY2l0aWVzPC9kaXY+JHtzKGwpfTwvZGl2PmA6IiIsaS5sZW5ndGg/YDxkaXYgY2xhc3M9InJlZ2lvbiI+PGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPkJ5IHJlZ2lvbjwvZGl2PjxkaXYgY2xhc3M9InBsYWNlcyI+JHtpLm1hcCgodSxkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UgdGFiIiB0eXBlPSJidXR0b24iIGRhdGEtcmVnaW9uPSIke2R9IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+JHtjKHUubmFtZSl9IDxzbWFsbD4ke2ModS5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj48L2Rpdj5gOiIiLC4uLmkubWFwKCh1LGQpPT5gCiAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiIgZGF0YS1yZWdpb24tYm9keT0iJHtkfSIgaGlkZGVuPgogICAgICAgICR7KHUuY291bnRyaWVzPz9bXSkubWFwKChmLGcpPT57Y29uc3Qgdj1mLmNpdGllcz8/W10sXz12Lmxlbmd0aD09PTE/dlswXTp2b2lkIDA7cmV0dXJuYAogICAgICAgICAgPGRpdiBjbGFzcz0iZGVzdCIke2c+PSRzPyIgaGlkZGVuIjoiIn0+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3QtY291bnRyeSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2MoZi5uYW1lKX0iPiR7YyhmLm5hbWUpfSR7XyYmXy5uYW1lIT09Zi5uYW1lP2A8c21hbGw+IMK3ICR7YyhfLm5hbWUpfTwvc21hbGw+YDoiIn0gPHNtYWxsIGNsYXNzPSJuIj4ke2MoZi5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj4KICAgICAgICAgICAgJHt2Lmxlbmd0aD4xP3Modik6IiJ9CiAgICAgICAgICA8L2Rpdj5gfSkuam9pbigiIil9CiAgICAgICAgJHsodS5jb3VudHJpZXM/P1tdKS5sZW5ndGg+JHM/YDxkaXYgY2xhc3M9InBsYWNlcyI+PGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1jb3VudHJpZXMiPiskeyh1LmNvdW50cmllcz8/W10pLmxlbmd0aC0kc30gbW9yZSBjb3VudHJpZXM8L2J1dHRvbj48L2Rpdj5gOiIifQogICAgICA8L2Rpdj5gKSxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYWxsLWhvdGVscyI+QnJvd3NlIGFsbCAke2MoZS50b3RhbCl9PC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5GaW5kIGEgYm9va2luZzwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxudD04LCRzPTYsR2Y9ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O3JldHVybiB0P2A8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2ModC50b3RhbCl9PHNtYWxsIGNsYXNzPSJ0LXN1YiI+JHtOdW1iZXIodC5yb29tcyk+MT9gJHtjKHQucm9vbXMpfSByb29tcyDDlyBgOiIifSR7Yyh0Lm5pZ2h0cyl9ICR7TnVtYmVyKHQubmlnaHRzKT09PTE/Im5pZ2h0IjoibmlnaHRzIn0gwrcgdGF4ZXMgaW48L3NtYWxsPjwvc3Bhbj5gOmUubm9Sb29tc0ZvclN0YXk/YDxzcGFuIGNsYXNzPSJ0LWZyb20gdC1ub25lIj4key9zbGVlcHMvLnRlc3QoU3RyaW5nKGUubm9Sb29tc0ZvclN0YXkpKT9gTm8gcm9vbSBzbGVlcHMgJHtjKFQuZ3Vlc3RzKX1gOiJObyByb29tIGZvciB0aGVzZSBkYXRlcyJ9PC9zcGFuPmA6YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7ZS5mcm9tTmlnaHRseT9gJHtjKGUuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+YH0sYWs9ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O2lmKCF0KXJldHVybiIiO2NvbnN0IG49W3QuZnJlZUNhbmNlbGxhdGlvbj8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uPC9zcGFuPic6IiIsTnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJdLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/YDxzcGFuIGNsYXNzPSJ0LXRhZ3MiPiR7bi5qb2luKCIiKX08L3NwYW4+YDoiIn0sbXQ9KCk9PlQuY2hlY2tJbiYmVC5jaGVja091dD97Y2hlY2tJbjpULmNoZWNrSW4sY2hlY2tPdXQ6VC5jaGVja091dCxndWVzdHM6VC5ndWVzdHMsLi4uWT4xP3tyb29tczpZfTp7fX06e30sY2s9ZT0+e2NvbnN0e2NoZWNrSW46dCxjaGVja091dDpuLGd1ZXN0czpvLHJvb21zOnIsLi4uc309ZT8/e307cmV0dXJuIHN9LHVrPShlLHQpPT57Y29uc3R7bWluOm4sc3RhcnQ6b309V2YodCk7cmV0dXJuKCFULmNoZWNrSW58fFQuY2hlY2tJbjxuKSYmKFQuY2hlY2tJbj1vKSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PVdlKFQuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY2kiIHZhbHVlPSIke2MoVC5jaGVja0luKX0iIG1pbj0iJHtjKG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKFdlKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGRpdiBjbGFzcz0iZ3Vlc3RzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iUm9vbXMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0ibHJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgICAke2U/YDxzcGFuIGNsYXNzPSJuaWdodHMiPiR7YyhocygpKX08L3NwYW4+YDonPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InByaWNlLWxpc3QiPlNob3cgcHJpY2VzPC9idXR0b24+J30KICA8L2Rpdj5gfTtsZXQgUGU9ImRhdGVzIjtjb25zdCBRZj0iZGF0ZXMiLElvPWU9Pntjb25zdCB0PWU/P3t9O3JldHVybnsuLi50Lmdyb3VwfHx0LnN1cHBsaWVyP3tncm91cDp0Lmdyb3VwfHx0LnN1cHBsaWVyfTp7fSwuLi50LmJyYW5kP3ticmFuZDp0LmJyYW5kfTp7fSwuLi5BcnJheS5pc0FycmF5KHQuZmFjaWxpdGllcykmJnQuZmFjaWxpdGllcy5sZW5ndGg/e2ZhY2lsaXRpZXM6dC5mYWNpbGl0aWVzfTp7fSwuLi50LmZyZWVDYW5jZWxsYXRpb24/e2ZyZWVDYW5jZWxsYXRpb246ITB9Ont9LC4uLnQuYnJlYWtmYXN0P3ticmVha2Zhc3Q6ITB9Ont9fX0sUXU9ZT0+e2NvbnN0e2dyb3VwOnQsc3VwcGxpZXI6bixicmFuZDpvLGZhY2lsaXRpZXM6cixmcmVlQ2FuY2VsbGF0aW9uOnMsYnJlYWtmYXN0OmEsLi4uaX09ZT8/e307cmV0dXJuIGl9LGxrPWU9Pntjb25zdCB0PUlvKGUpO3JldHVybih0Lmdyb3VwPzE6MCkrKHQuYnJhbmQ/MTowKSsodC5mYWNpbGl0aWVzPy5sZW5ndGg/PzApKyh0LmZyZWVDYW5jZWxsYXRpb24/MTowKSsodC5icmVha2Zhc3Q/MTowKX0sZGs9ZT0+e2NvbnN0IHQ9ZS5yZWZpbmU7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj0ocixzLGEsaSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1maWx0ZXI9IiR7YyhyKX0iIGFyaWEtcHJlc3NlZD0iJHtpPyJ0cnVlIjoiZmFsc2UifSI+JHtjKHMpfSA8c21hbGw+JHtjKGEpfTwvc21hbGw+PC9idXR0b24+YCxvPShyLHMpPT5zLmxlbmd0aD9gPGRpdiBjbGFzcz0iZmdyb3VwIj48c3BhbiBjbGFzcz0ic29ydHMtayI+JHtjKHIpfTwvc3Bhbj4ke3Muam9pbigiIil9PC9kaXY+YDoiIjtyZXR1cm5bbygiR3JvdXAiLCh0Lmdyb3Vwcz8/W10pLm1hcChyPT5uKGBncm91cDoke3IuaWR9YCxTdHJpbmcodW4oci5pZCk/Lm5hbWU/P3IuaWQpLHIuY291bnQsci5vbikpKSxvKCJCcmFuZCIsKHQuYnJhbmRzPz9bXSkubWFwKHI9Pm4oYGJyYW5kOiR7ci5uYW1lfWAsci5uYW1lLHIuY291bnQsci5vbikpKSxvKCJIYXMiLCh0LmZhY2lsaXRpZXM/P1tdKS5tYXAocj0+bihgZmFjaWxpdHk6JHtyLmtleX1gLHIubGFiZWwsci5jb3VudCxyLm9uKSkpLG8oIlJvb20iLCh0LnJvb20/P1tdKS5tYXAocj0+bihyLmtleSxyLmxhYmVsLHIuY291bnQsci5vbikpKV0uam9pbigiIil9LHBrPShlLHQpPT57Y29uc3Qgbj1yPT5OdW1iZXIoci5zbGljZSg4LDEwKSksbz1yPT5uZXcgRGF0ZShgJHtyfVQxMjowMDowMFpgKS50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7bW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pO3JldHVybiBvKGUpPT09byh0KT9gJHtuKGUpfeKAkyR7bih0KX0gJHtvKHQpfWA6YCR7bihlKX0gJHtvKGUpfSDigJMgJHtuKHQpfSAke28odCl9YH0sWWY9KGUsdCxuKT0+e2NvbnN0IG89ISFlLnN0YXk/LmNoZWNrSW4scj1sayhlLmFzaykscz1kayhlKSxhPVhmLmZpbmQoKFt1XSk9PnU9PT1uKT8uWzFdPz8iRGVmYXVsdCIsaT1vP2Ake3BrKGUuc3RheS5jaGVja0luLGUuc3RheS5jaGVja091dCl9JHtZPjE/YCDCtyAke1l9IHJvb21zYDoiIn1gOiJBZGQgZGF0ZXMiLGw9KHUsZCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHRvb2wiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wYW5lbD0iJHt1fSIgYXJpYS1leHBhbmRlZD0iJHtQZT09PXU/InRydWUiOiJmYWxzZSJ9Ij4ke2R9PC9idXR0b24+YDtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJwbGFjZXMgdG9vbGJhciI+CiAgICAgICR7bCgiZGF0ZXMiLGMoaSkpfQogICAgICAke3Q/bCgic29ydCIsbj09PSJncm91cCI/IlNvcnQiOmMoYSkpOiIifQogICAgICAke3N8fHI/bCgiZmlsdGVycyIsYEZpbHRlcnMke3I/YCDCtyAke3J9YDoiIn1gKToiIn0KICAgICAgJHtyPyc8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iY2xlYXItZmlsdGVycyI+Q2xlYXI8L2J1dHRvbj4nOiIifQogICAgPC9kaXY+CiAgICA8ZGl2IGRhdGEtcGFuZWwtYm9keT0iZGF0ZXMiJHtQZT09PSJkYXRlcyI/IiI6IiBoaWRkZW4ifT4ke3VrKG8sZSl9PC9kaXY+CiAgICAke3Q/YDxkaXYgY2xhc3M9ImZpbHRlci1wYW5lbCIgZGF0YS1wYW5lbC1ib2R5PSJzb3J0IiR7UGU9PT0ic29ydCI/IiI6IiBoaWRkZW4ifT4ke3R9PC9kaXY+YDoiIn0KICAgICR7cz9gPGRpdiBjbGFzcz0iZmlsdGVyLXBhbmVsIiBkYXRhLXBhbmVsLWJvZHk9ImZpbHRlcnMiJHtQZT09PSJmaWx0ZXJzIj8iIjoiIGhpZGRlbiJ9PiR7c308L2Rpdj5gOiIifWB9LFhmPVtbImdyb3VwIiwiRGVmYXVsdCJdLFsicHJpY2UtbG93IiwiTG93ZXN0IHByaWNlIl0sWyJwcmljZS1oaWdoIiwiSGlnaGVzdCBwcmljZSJdLFsicmF0aW5nIiwiUmF0aW5nIl1dLGhrPTM7bGV0IGRuPSJpbmxpbmUiLGVtPVtdO2NvbnN0IHBuPSgpPT5kbj09PSJmdWxsc2NyZWVuIixpdT0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2NvbnRlbnQgLnRpbGVzIik7aWYoZT8ub2Zmc2V0V2lkdGgpe2NvbnN0IHM9Z2V0Q29tcHV0ZWRTdHlsZShlKS5ncmlkVGVtcGxhdGVDb2x1bW5zLnNwbGl0KCIgIikuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtpZihzPjApcmV0dXJuIHN9Y29uc3QgdD1wZSgiY29udGVudCIpLmNsaWVudFdpZHRofHx3aW5kb3cuaW5uZXJXaWR0aHx8MCxuPXQ8PTQ2MCxvPW4/MTUwOjE5NixyPW4/ODoxMDtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLmZsb29yKCh0K3IpLyhvK3IpKSl8fDJ9O2xldCBhdT0wO2NvbnN0IGZzPSgpPT5NYXRoLm1heCgyLChhdXx8aXUoKSkqaGspO2xldCBCbz0wO2NvbnN0IGZrPWU9PntCbz1mcygpO2NvbnN0IHQ9cG4oKT9lLmhvdGVscz8/W106KGUuaG90ZWxzPz9bXSkuc2xpY2UoMCxCbyksbj1bLi4ubmV3IFNldCh0Lm1hcCh3PT5TdHJpbmcody5jaXR5KSkpXSxvPXc9Pntjb25zdCBTPXQuZmluZChqPT5qLmNpdHk9PT13KT8uY291bnRyeTtyZXR1cm4gUyYmIVN0cmluZyhTKS5zdGFydHNXaXRoKHcpP1N0cmluZyhTKToiIn0scj1bLi4ubmV3IFNldCh0Lm1hcCh3PT5TdHJpbmcody5jb3VudHJ5Pz8iIikpKV0scz1yLmxlbmd0aD4xLGE9dz0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHtjKHcpfSR7IXMmJm8odyk/YDxzbWFsbD4gwrcgJHtjKG8odykpfTwvc21hbGw+YDoiIn08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJ0aWxlcyI+CiAgICAgICAgJHt0LmZpbHRlcihTPT5TLmNpdHk9PT13KS5tYXAoUz0+YAogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2MoUy5pZCl9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7S3QoU3RyaW5nKFMuaWQpKX0iPgogICAgICAgICAgICAgICR7Uy5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhTLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhXdChTdHJpbmcoUy5uYW1lKSkpfTwvc3Bhbj4KICAgICAgICAgICAgICAke3FvKFMpP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHtjKHFvKFMpKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2MoUy5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7YyhuLmxlbmd0aD4xP1MuYXJlYT8/Uy5jaXR5OltTLmFyZWEsUy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICAke0dmKFMpfQogICAgICAgICAgICAgICAgJHtvayhTLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICR7YWsoUyl9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAsaT1OdW1iZXIoZS50b3RhbD8/dC5sZW5ndGgpLGw9TnVtYmVyKGUub2Zmc2V0Pz8wKSx1PWktbC10Lmxlbmd0aCxkPWUucGxhY2VzPz9bXTtlLmFzaz8uY2l0eTtjb25zdCBmPWQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJXaGVyZSI+CiAgICAgICAgICAgJHtkLm1hcCgodyxTKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKHcucGxhY2UpfSIke1M+PW50PyIgaGlkZGVuIjoiIn0+JHtjKHcubGFiZWwpfSA8c21hbGw+JHtjKHcuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9CiAgICAgICAgICAgJHtkLmxlbmd0aD5udD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1wbGFjZXMiPiske2QubGVuZ3RoLW50fSBtb3JlPC9idXR0b24+YDoiIn0KICAgICAgICAgPC9kaXY+YDoiIixnPVN0cmluZyhlLnNvcnQ/PyJncm91cCIpLHY9ISgoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjEpLF89dC5sZW5ndGg+MT9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iT3JkZXIiPiR7WGYuZmlsdGVyKChbd10pPT52fHwhdy5zdGFydHNXaXRoKCJwcmljZSIpKS5tYXAoKFt3LFNdKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2Ugc29ydCIgdHlwZT0iYnV0dG9uIiBkYXRhLXNvcnQ9IiR7d30iIGFyaWEtcHJlc3NlZD0iJHt3PT09Zz8idHJ1ZSI6ImZhbHNlIn0iPiR7U308L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiO3JldHVybltlZSgpLGYsWWYoZSxfLGcpLGUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfS4gVGhlc2UgYXJlICR7YyhlLndpZGVuZWQudG8pfS48L2Rpdj5gOiIiLGA8ZGl2PiR7cz9yLm1hcCh3PT5gPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7Yyh3KX08L2Rpdj4ke24uZmlsdGVyKFM9PnQuc29tZShqPT5qLmNpdHk9PT1TJiZTdHJpbmcoai5jb3VudHJ5Pz8iIik9PT13KSkubWFwKGEpLmpvaW4oIiIpfWApLmpvaW4oIiIpOm4ubWFwKGEpLmpvaW4oIiIpfTwvZGl2PmAsKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5RdW90ZWQgaW4gJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0g4oCUIG5vIHJhdGUgaXMgYXBwbGllZCBoZXJlLCBzbyB0aGlzIGlzIG5vdCBhIHByaWNlIG9yZGVyLiBPbmUgY2l0eSBvciBvbmUgY291bnRyeSBnaXZlcyBvbmUgY3VycmVuY3kuPC9kaXY+YDoiIixlLm92ZXJCdWRnZXQ/YDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLm92ZXJCdWRnZXQpfSBtb3JlIG1hdGNoZWQgYW5kIGNhbWUgaW4gb3ZlciB0aGUgcHJpY2UgY2VpbGluZy48L2Rpdj5gOiIiLHBuKCk/dT4wP2A8ZGl2IGNsYXNzPSJub3RlIj5TaG93aW5nICR7bD9gJHtsKzF94oCTJHtsK3QubGVuZ3RofWA6dC5sZW5ndGh9IG9mICR7aX0uPC9kaXY+CiAgICAgICAgICAgJHtGXyhgU2hvdyAke01hdGgubWluKDEyLHUpfSBtb3JlYCwnZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIicpfWA6IiI6SF8oe2Zyb206bCxjb3VudDp0Lmxlbmd0aCx0b3RhbDpOdW1iZXIoaSkscHJldjonZGF0YS1hY3Q9InBhZ2UtcHJldiInLG5leHQ6J2RhdGEtYWN0PSJwYWdlLW5leHQiJyxhbGw6ZW0uaW5jbHVkZXMoImZ1bGxzY3JlZW4iKT8nZGF0YS1hY3Q9ImZ1bGxzY3JlZW4iJzpudWxsLG5vdW46ImhvdGVscyJ9KV0uam9pbigiIil9LG1rPWU9Pntjb25zdCB0PWUubmVhcmVzdD8/W10sbj1lLndpZGVuZWQ/YDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIG1hdGNoZWQgJHtjKGUud2lkZW5lZC5mcm9tKX0sIHNvIHRoaXMgbG9va2VkIGluICR7YyhlLndpZGVuZWQudG8pfS48L2Rpdj5gOiIiO3JldHVybiBlLmJlZm9yZUZpbHRlcnM/KFBlPSJmaWx0ZXJzIixbZWUoKSxuLGA8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+JHtjKGUud2h5Pz9gTm9uZSBvZiB0aGUgJHtlLmJlZm9yZUZpbHRlcnN9IGhlcmUgaGFzIGFsbCBvZiB0aG9zZSB0b2dldGhlci5gKX08L2Rpdj5gLFlmKGUsIiIsU3RyaW5nKGUuYXNrPy5zb3J0Pz8iZ3JvdXAiKSldLmpvaW4oIiIpKTp0Lmxlbmd0aD9bZWUoKSxuLGA8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBjYW1lIGluIHVuZGVyIHRoZSBwcmljZSBjZWlsaW5nLiAke2ModC5sZW5ndGg9PT0xPyJUaGUgbmVhcmVzdCBpcyI6IlRoZSBuZWFyZXN0IGFyZSIpfSBvdmVyIGl0LjwvZGl2PmAsYDxkaXYgY2xhc3M9InRpbGVzIj4ke3QubWFwKG89PmAKICAgICAgPGJ1dHRvbiBjbGFzcz0idGlsZSBvdmVyIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhvLmlkKX0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LXNob3QiIHN0eWxlPSIke0t0KFN0cmluZyhvLmlkKSl9Ij4KICAgICAgICAgICR7by5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhvLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKFd0KFN0cmluZyhvLm5hbWUpKSl9PC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7YyhvLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXdoZXJlIj4ke2MoW28uYXJlYSxvLmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZvb3QiPgogICAgICAgICAgICAke0dmKG8pfQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+T3Zlcjwvc3Bhbj4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpOmAke259PGRpdiBjbGFzcz0iZW1wdHkiPiR7YyhlLndoeT8/YE5vdGhpbmcgbWF0Y2hlZCR7ZS5xdWVyeT9gICIke2UucXVlcnl9ImA6IiJ9LiBUcnkgYSBjaXR5LmApfTwvZGl2PmB9LHRtPWU9PmAKICA8ZGl2IGNsYXNzPSJoZXJvIiBzdHlsZT0iJHtLdChTdHJpbmcoZS5pZCkpfSI+CiAgICAke2UuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2MoZS5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhXdChTdHJpbmcoZS5uYW1lKSkpfTwvc3Bhbj4KICAgICR7cW8oZSk/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2MocW8oZSkpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFtlLmFyZWEsZS5jaXR5LFN0cmluZyhlLmNvdW50cnk/PyIiKS5zdGFydHNXaXRoKFN0cmluZyhlLmNpdHkpKT8iIjplLmNvdW50cnldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfSR7ZS5yYXRpbmc/YCDCtyAke2MoZS5yYXRpbmcudmFsdWUpfeKYhSAoJHtjKGUucmF0aW5nLmNvdW50KX0pYDoiIn08L2Rpdj4KICA8L2Rpdj4KICAke2Uuc3VtbWFyeT9gPGRpdiBjbGFzcz0iaC1zdW0iPiR7YyhlLnN1bW1hcnkpfTwvZGl2PmA6IiJ9CiAgJHsoZS5hbWVuaXRpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UuYW1lbml0aWVzLnNsaWNlKDAsOCkubWFwKHQ9PmA8c3BhbiBjbGFzcz0iY2hpcCI+JHtjKHQpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIifWAsZ2s9KGUsdCxuKT0+e2NvbnN0IG89cmsoU3RyaW5nKGUuaWQpLFN0cmluZyh0LmlkKSxuKSxyPVt0LmJlZHMsdC52aWV3LGBTbGVlcHMgJHt0LnNsZWVwc31gLHQuc2l6ZVNxbT9gJHt0LnNpemVTcW19bcKyYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJyb3cgd2l0aHRodW1iIj4KICAgICAgPHNwYW4gY2xhc3M9InRodW1iIiBzdHlsZT0iJHtLdChgJHtlLmlkfToke3QuaWR9YCl9Ij4KICAgICAgICAke3QuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2ModC5pbWFnZVVybCl9IiBhbHQ9IiI+YDpjKFd0KFN0cmluZyh0Lm5hbWUpKSl9CiAgICAgIDwvc3Bhbj4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25Mb2NhbD9gIHVudGlsICR7Yyh0LmZyZWVDYW5jZWxsYXRpb25Mb2NhbCl9YDoiIn08L3NwYW4+YDonPHNwYW4gY2xhc3M9ImJhZGdlIHdhcm4iPk5vbi1yZWZ1bmRhYmxlPC9zcGFuPid9CiAgICAgICAgICAke051bWJlcih0LnJvb21zTGVmdCk8PTM/YDxzcGFuIGNsYXNzPSJiYWRnZSI+JHtjKHQucm9vbXNMZWZ0KX0gbGVmdDwvc3Bhbj5gOiIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICR7dC5wdWJsaWNTdGF5VG90YWw/YDxkaXYgY2xhc3M9InAtd2FzIj4ke2ModC5wdWJsaWNSb29tc1RvdGFsPz90LnB1YmxpY1N0YXlUb3RhbCl9PC9kaXY+YDoiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2ModC5yb29tc1RvdGFsPz90LnN0YXlUb3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2ModC5uaWdodGx5KX0gLyBuaWdodCArIHRheCR7WT4xP2AgwrcgJHtZfSByb29tc2A6IiJ9IMK3IHRvdGFsIHRheGVzIGluPC9kaXY+CiAgICAgICAgJHt0Lm1lbWJlclJhdGU/YDxkaXYgY2xhc3M9InAtbWVtYmVyIj4ke2ModC5tZW1iZXJSYXRlLnRpZXIpfSByYXRlPC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtMbyhgZGF0YS1hZGQtcm9vbT0iJHtjKHQuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaWQpfSJgLG8sU3RyaW5nKHQubmFtZSksWSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxiaz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhlKX0iIGRhdGEtY2k9IiR7YyhuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7YyhsbihTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtjKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtjKGxuKFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/YyhuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsWXU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/VDtyZXR1cm5bZWUoKSx0bSh0KSxKZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxiayhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+Z2sodCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7Yyh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7YyhyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPiR7YyhyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sdms9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Moby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2ModC5uYW1lKX0gwrcgJHtjKFllKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcj09PSJwZXJzb24tbmlnaHQiPyJwZXJzb24gcGVyIG5pZ2h0IjpyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtMbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2ModC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcj09PSJwZXJzb24tbmlnaHQiPyJwZXJzb24gcGVyIG5pZ2h0IjpyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke0xvKGBkYXRhLWFkZC1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSJgLHNrKFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0seWs9ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2MoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtjKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2MoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtjKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9IiR7ZS5kYXk/YCBkYXRhLWRheT0iJHtjKGUuZGF5KX0iYDoiIn1gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke1llKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHtjKGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke0xvKHQsTnVtYmVyKGUua2luZD09PSJleHRyYSI/ZS5vcmRlcmVkPz9lLnF1YW50aXR5Pz8xOmUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxYdT0oZSx0KT0+YDxkaXYgY2xhc3M9InN1bXMiPgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+Um9vbXMgYW5kIGFkZC1vbnM8L3NwYW4+PHNwYW4+JHtjKGUuc3VidG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlRheGVzIGFuZCBmZWVzPC9zcGFuPjxzcGFuPiR7YyhlLnRheGVzQW5kRmVlcyl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSBnb29kIj48c3Bhbj4ke2MoZS5tZW1iZXJTYXZpbmcudGllcil9IG1lbWJlciByYXRlPC9zcGFuPjxzcGFuPuKIkiAke2MoZS5tZW1iZXJTYXZpbmcuc2F2ZWQpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtjKHQpfTwvc3Bhbj48c3Bhbj4ke2MoZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+UG9pbnRzIHRoaXMgZWFybnM8L3NwYW4+PHNwYW4+JHtjKE51bWJlcihlLm1lbWJlclNhdmluZy5wb2ludHMpLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgPC9kaXY+YCxlbD1lPT5lLnNhbmRib3g/YDxkaXYgY2xhc3M9Im5vdGUiPlRoaXMgaXMgYSB0ZXN0IGVudmlyb25tZW50LiBCb29raW5nIGhlcmUgbWFrZXMgYSBzaW11bGF0ZWQgYm9va2luZywgbm90IGEgJHtjKGUubmFtZSl9IHJlc2VydmF0aW9uLCBhbmQgbm90aGluZyBpcyBwYWlkLjwvZGl2PmA6ZS5ib29raW5nTW9kZT09PSJwYXktYXQtaG90ZWwiP2A8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gQm9va2luZyBtYWtlcyBhIHJlc2VydmF0aW9uIHdpdGggJHtjKGUubmFtZSl9LCBwYWlkIGF0IHRoZSBob3RlbCwgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmA6ZS5kZW1vP2A8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gVGhpcyBpcyBhIGRlbW9uc3RyYXRpb246IHJlcXVlc3RpbmcgYSBib29raW5nIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLCBidXQgJHtjKGUubmFtZSl9IGRvZXMgbm90IHJlY2VpdmUgaXQgYW5kIG5vIHJvb20gaXMgaGVsZC48L2Rpdj5gOmA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke2MoZS5uYW1lKX0gdG8gaG9sZCB0aGUgcm9vbXMgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmAsX2s9ZT0+ZS5sZW5ndGg8Mj9lWzBdPz8iIjpgJHtlLnNsaWNlKDAsLTEpLmpvaW4oIiwgIil9IGFuZCAke2VbZS5sZW5ndGgtMV19YCxraz1lPT57Y29uc3QgdD1IZihlKTtpZih0Lmxlbmd0aD4xKXtjb25zdCBvPXQuaW5jbHVkZXMoVWUpP1VlOiIiO3JldHVybltgPGRpdiBjbGFzcz0ibm90ZSI+VGhlc2Ugc3RheXMgYXJlIHdpdGggJHtjKF9rKHQubWFwKHI9PkhlKHIpLm5hbWUpKSl9LiBFYWNoIGdyb3VwJ3MgYXJlIGJvb2tlZCBvbiB0aGVpciBvd24uPC9kaXY+YCwuLi50Lm1hcChyPT57Y29uc3Qgcz1IZShyKTtyZXR1cm5gPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28ke28mJm8hPT1yPyIgcXVpZXQiOiIifSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siIGRhdGEtZ3JvdXA9IiR7YyhyKX0iPkJvb2sgdGhlICR7YyhzLm5hbWUpfSBzdGF5czwvYnV0dG9uPjwvZGl2PiR7ZWwocyl9YH0pLG8/RHMoITAsSGUobykpOiIiXX1jb25zdCBuPUhlKHRbMF0pO3JldHVybltgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj4ke24uYm9va2luZ01vZGU9PT0icGF5LWF0LWhvdGVsIj8iQm9vayI6IlJlcXVlc3QgYm9va2luZyJ9PC9idXR0b24+PC9kaXY+YCxlbChuKSxEcyghMSxuKV19LGN1PSgpPT5IZShVZXx8SGYoTT8ubGluZXM/P1tdKVswXSksd2s9ZT0+e2NvbnN0IHQ9ZS5saW5lcz8/W107aWYodC5sZW5ndGg9PT0wKXJldHVybltlZSgpLCc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlIHRyaXAgaXMgZW1wdHkuPC9kaXY+JyxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkJyb3dzZSAke1JlP2Bob3RlbHMgb24gJHtjKGd0KX1gOmAke2MoZ3QpfSBob3RlbHNgfTwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltlZSgpLG4ubWFwKG89PmAKICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJkYXkiPiR7YyhsbihvKSl9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0icm93cyI+JHt0LmZpbHRlcihyPT5TdHJpbmcoci5kYXk/PyIiKT09PW8pLm1hcCh5aykuam9pbigiIil9PC9kaXY+YCkuam9pbigiIiksKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobz0+YCR7YyhvLnRpdGxlKX06ICR7YyhvLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsLi4uQXJyYXkuaXNBcnJheShlLmdyb3VwcykmJmUuZ3JvdXBzLmxlbmd0aD4xP1tgPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VkIGluICR7YygoZS5jdXJyZW5jaWVzPz9bXSkuam9pbigiIGFuZCAiKSl9LCBzZXBhcmF0ZWx5LiBOb3RoaW5nIGhlcmUgY29udmVydHMgb25lIGludG8gdGhlIG90aGVyOyBlYWNoIGhvdGVsIGlzIGJvb2tlZCBhbmQgcGFpZCBpbiBpdHMgb3duLjwvZGl2PmAsLi4uZS5ncm91cHMubWFwKG89Plh1KG8sby5nb2VzV2l0aEFTdGF5P2BJbiAke28uY3VycmVuY3l9LCBnb2VzIHdpdGggYSBzdGF5IC0gbm90IGluIHRoZSB0b3RhbGA6YFRvdGFsIGluICR7by5jdXJyZW5jeX1gKSldOltYdShlLCJUb3RhbCIpXSwuLi5BcnJheS5pc0FycmF5KGUubmVlZHNSb29tKSYmZS5uZWVkc1Jvb20ubGVuZ3RoP2UubmVlZHNSb29tLm1hcChvPT5gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgICAgPGI+R29lcyB3aXRoIGEgc3RheTwvYj4KICAgICAgICAgICAgIDxzcGFuPiR7Yygoby5leHRyYXM/P1tdKS5qb2luKCIgYW5kICIpKX0gaXMgJHtjKG8uaG90ZWxOYW1lKX0ncyBzZXJ2aWNlIGZvciBpdHMgZ3Vlc3RzLCBzbyBpdCBpcyBib29rZWQgd2l0aCBhIHJvb20gdGhlcmUgLSBvciBhZGRlZCB0byBhIGJvb2tpbmcgeW91IGFscmVhZHkgaGF2ZS48L3NwYW4+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaG90ZWxJZCl9Ij5Sb29tcyBhdCAke2Moby5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8L2Rpdj5gKTpbLi4ua2sodCldLFh8fCFkcygic2lnbkluIik/IiI6YDxkaXYgY2xhc3M9Im5vdGUiPkEgJHtjKFpmfHxndCl9IG1lbWJlcj8gPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj5TaWduIGluIGZvciB0aGUgbWVtYmVyIHJhdGU8L2J1dHRvbj4uPC9kaXY+JHtVbygpfWBdLmpvaW4oIiIpfSx1dT1be2lkOiJraW5nLWJlZCIsbGFiZWw6IktpbmcgYmVkIn0se2lkOiJ0d2luLWJlZHMiLGxhYmVsOiJUd2luIGJlZHMifSx7aWQ6ImhpZ2gtZmxvb3IiLGxhYmVsOiJIaWdoIGZsb29yIn0se2lkOiJsb3ctZmxvb3IiLGxhYmVsOiJMb3cgZmxvb3IifSx7aWQ6InF1aWV0LXJvb20iLGxhYmVsOiJRdWlldCByb29tIn0se2lkOiJjb25uZWN0aW5nLXJvb21zIixsYWJlbDoiQ29ubmVjdGluZyByb29tcyJ9LHtpZDoiZWFybHktY2hlY2staW4iLGxhYmVsOiJFYXJseSBjaGVjay1pbiJ9LHtpZDoibGF0ZS1hcnJpdmFsIixsYWJlbDoiTGF0ZSBhcnJpdmFsIn0se2lkOiJhY2Nlc3NpYmxlLXJvb20iLGxhYmVsOiJBY2Nlc3NpYmxlIHJvb20ifV0sJGs9eyJraW5nLWJlZCI6InR3aW4tYmVkcyIsInR3aW4tYmVkcyI6ImtpbmctYmVkIiwiaGlnaC1mbG9vciI6Imxvdy1mbG9vciIsImxvdy1mbG9vciI6ImhpZ2gtZmxvb3IifTtsZXQgeGU9bnVsbDtjb25zdCBEcz0oZT0hMSx0PWN1KCkpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciIHZhbHVlPSIke2MoeGU/Lm5hbWU/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIiB2YWx1ZT0iJHtjKHhlPy5lbWFpbD8/IiIpfSI+PC9sYWJlbD4KICAgIDwvZGl2PiR7dC5waG9uZVJlcXVpcmVkP2AKICAgIDxsYWJlbD5QaG9uZTxpbnB1dCBpZD0iZ3Bob25lIiB0eXBlPSJ0ZWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBob3RlbCB0byByZWFjaCB5b3UiIHZhbHVlPSIke2MoeGU/LnBob25lPz8iIil9Ij48L2xhYmVsPmA6IiJ9CiAgICA8ZGl2IGNsYXNzPSJhc2tzIj4KICAgICAgPGRpdiBjbGFzcz0iYXNrcy10Ij5Bc2sgdGhlIGRlc2sgZm9yPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoaXBzIj4ke3V1Lm1hcChuPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBhc2siIHR5cGU9ImJ1dHRvbiIgZGF0YS1hc2s9IiR7YyhuLmlkKX0iIGFyaWEtcHJlc3NlZD0iJHsoeGU/eGUucmVxdWVzdHM6WD8ucHJlZmVyZW5jZXM/P1tdKS5pbmNsdWRlcyhuLmlkKT8idHJ1ZSI6ImZhbHNlIn0iPiR7YyhuLmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8bGFiZWw+QXJyaXZpbmcgYXQ8aW5wdXQgaWQ9Imd0aW1lIiB0eXBlPSJ0aW1lIiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiR7Yyh4ZT8uYXJyaXZpbmdBdD8/IiIpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+QW55dGhpbmcgZWxzZTxpbnB1dCBpZD0iZ25vdGUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iSW4geW91ciBvd24gd29yZHMg4oCUIG9wdGlvbmFsIiB2YWx1ZT0iJHtjKHhlPy5ub3Rlcz8/IiIpfSI+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIGdvIHRvIHRoZSBkZXNrIGFzIHJlcXVlc3RzLiAke2ModC5uYW1lKX0gbWVldHMgd2hhdCBpdCBjYW4gb24gdGhlIGRheTsgbm9uZSBvZiBpdCBpcyBoZWxkLjwvZGl2PgogICAgICAke1g/YDxsYWJlbCBjbGFzcz0icmVtZW1iZXIiPjxpbnB1dCBpZD0iZ3JlbWVtYmVyIiB0eXBlPSJjaGVja2JveCIke3hlPy5yZW1lbWJlcj8iIGNoZWNrZWQiOiIifT4gUmVtZW1iZXIgdGhlIGJlZCwgZmxvb3IgYW5kIHJvb20gcmVxdWVzdHMgb24gbXkgJHtjKFgucHJvZ3JhbW1lPz8ibWVtYmVyc2hpcCIpfSBmb3IgbmV4dCB0aW1lPC9sYWJlbD5gOiIifQogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9vayI+JHt0LmJvb2tpbmdNb2RlPT09InBheS1hdC1ob3RlbCI/IkJvb2sgdGhlc2Ugcm9vbXMiOnQuZGVtbz8iUmVxdWVzdCBib29raW5nIjoiSG9sZCB0aGVzZSByb29tcyJ9PC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Quc2FuZGJveD8iQSB0ZXN0IGJvb2tpbmc6IG5vdGhpbmcgaXMgaGVsZCBhbmQgbm90aGluZyBpcyBwYWlkLiI6dC5ib29raW5nTW9kZT09PSJwYXktYXQtaG90ZWwiPyJObyBjYXJkIGlzIHRha2VuIGhlcmUgYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHBheSBhdCB0aGUgaG90ZWwuIjp0LmRlbW8/Ik5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gVGhpcyBpcyBhIGRlbW9uc3RyYXRpb246IG5vIHJvb20gaXMgaGVsZC4iOiJObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi4ifTwvZGl2PgogIDwvZGl2PmAsU2s9ZT0+ZS5sZW5ndGg+MT9gJHtlLnNsaWNlKDAsLTEpLmpvaW4oIiwgIil9IGFuZCAke2UuYXQoLTEpfWA6ZVswXT8/IiIsems9ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7YyhTayhlLm1pc3Npbmc/P1tdKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCxEcyghMCldLmpvaW4oIiIpLFRrPWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5bZWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke2ModC5wcm9ncmFtbWUpfTwvZGl2PgogICAgICAgJHt0Lm5hbWU/YDxkaXYgY2xhc3M9IndoZXJlIj4ke2ModC5uYW1lKX08L2Rpdj5gOic8ZGl2IGNsYXNzPSJ3aGVyZSI+U2lnbmVkIGluPC9kaXY+J30KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiIHN0eWxlPSJmb250LXNpemU6MjBweCI+JHtjKHQudGllcj8ubmFtZSl9PC9kaXY+CiAgICAgICAke3R5cGVvZiB0LnBvaW50cz09Im51bWJlciI/YDxkaXYgY2xhc3M9IndoZW4iPiR7Yyh0LnBvaW50cy50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9IHBvaW50czwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj48Yj4ke2MoTWF0aC5yb3VuZCgodC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKSl9JSBvZmY8L2I+PHNwYW4+Um9vbSByYXRlcyBhbmQgdHJpcCB0b3RhbHMgbm93IHNob3cgdGhlICR7Yyh0LnRpZXI/Lm5hbWUpfSBtZW1iZXIgcmF0ZS4gTm90aGluZyBpcyBjaGFyZ2VkIGJ5IHNpZ25pbmcgaW4uPC9zcGFuPjwvZGl2PmAsKHQucHJlZmVyZW5jZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICA8Yj5TYXZlZCBmb3IgeW91ciBuZXh0IHN0YXlzPC9iPgogICAgICAgICAgIDxzcGFuPiR7Yyh0LnByZWZlcmVuY2VzLm1hcChuPT51dS5maW5kKG89Pm8uaWQ9PT1uKT8ubGFiZWw/P24pLmpvaW4oIiwgIikpfSAtIHRpY2tlZCBvbiB0aGUgYm9va2luZyBmb3JtLCBhbmQgYXNrZWQgZm9yIG9ubHkgd2hlbiB5b3UgYm9vayB3aXRoIHRoZW0uPC9zcGFuPgogICAgICAgICAgIDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmb3JnZXQtcHJlZnMiPkZvcmdldCB0aGVtPC9idXR0b24+CiAgICAgICAgIDwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24tb3V0Ij5TaWduIG91dDwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxJaz0oKT0+Wyc8ZGl2IGNsYXNzPSJlcnIiPk5vIG1lbWJlcnNoaXAgbWF0Y2hlcyB0aGF0IG51bWJlciBhbmQgc3VybmFtZS4gQ2hlY2sgYm90aCBhcyB0aGV5IGFyZSBwcmludGVkIOKAlCBub3RoaW5nIGVsc2UgaXMgbmVlZGVkLCB0aGlzIGNvbm5lY3RvciBuZXZlciBhc2tzIGZvciBhIHBhc3N3b3JkLjwvZGl2PicsVW8oITApXS5qb2luKCIiKSxVbz0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0ic2lnbmluIiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPk1lbWJlcnNoaXAgbnVtYmVyPGlucHV0IGlkPSJtbnVtIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IGlzIHByaW50ZWQiPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5TdXJuYW1lPGlucHV0IGlkPSJtc3VyIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBzdXJuYW1lIG9uIGl0Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1pbiI+U2lnbiBpbjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gcGFzc3dvcmQgaXMgYXNrZWQgZm9yIGFuZCBub25lIGlzIHN0b3JlZC4gU2lnbmluZyBpbiBzaG93cyB0aGUgbWVtYmVyIHJhdGU7IG5vdGhpbmcgaXMgY2hhcmdlZC48L2Rpdj4KICA8L2Rpdj5gLHhrPWU9Pntjb25zdCB0PWUucmVxdWVzdGVkPz9bXTtyZXR1cm4gdC5sZW5ndGg/YDxkaXYgY2xhc3M9ImFza2VkJHtlLmFjY2Vzc2liaWxpdHk/IiBmbGFnIjoiIn0iPgogICAgPGI+UmVxdWVzdGVkLCBub3QgaGVsZDwvYj4KICAgICR7dC5tYXAobj0+YDxzcGFuPiR7YyhuKX08L3NwYW4+YCkuam9pbigiIil9CiAgPC9kaXY+YDoiIn0sU3M9ZT0+ZS5ob2xkVW50aWxMb2NhbD9gJHtlLmhvbGRVbnRpbExvY2FsfSAoaG90ZWwgdGltZSlgOmAke1N0cmluZyhlLmhvbGRVbnRpbD8/IiIpLnNsaWNlKDAsMTYpLnJlcGxhY2UoIlQiLCIgIil9IFVUQ2AsUGs9ZT0+e2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlLmJvb2tpbmdzKSYmZS5ib29raW5ncy5sZW5ndGg/ZS5ib29raW5nczpbZS5ib29raW5nPz97fV0sbj10Lmxlbmd0aD4xLHtuYW1lOm8sYm9va2luZ01vZGU6cixkZW1vOnMsc2FuZGJveDphLC4uLml9PUhlKHRbMF0/LnN1cHBsaWVyKSxsPWQ9PlhfKGQpJiYoZD09PSJsaXN0RXh0cmFzIj9pLmV4dHJhczpkPT09ImNoYW5nZUJvb2tpbmciP2kuY2hhbmdlczohMCksdT0oZCxmLGcpPT5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2MoZC5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7YyhkLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7YyhZZShkLnN0YXkpKX0gwrcgJHtjKGQuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICAgIDwvZGl2PmAsbiYmcj09PSJob2xkIj9gPGRpdiBjbGFzcz0ibm90ZSI+JHtzPyJEZW1vbnN0cmF0aW9uIGhvbGQgbGFwc2VzIGF0IjoiSGVsZCB1bnRpbCJ9ICR7YyhTcyhkKSl9LjwvZGl2PmA6IiIscj09PSJwYXktYXQtaG90ZWwiJiZkLnN0YXR1cz09PSJyZXF1ZXN0ZWQiP2A8ZGl2IGNsYXNzPSJub3RlIj5XYWl0aW5nIGZvciAke2Mobyl9IHRvIGNvbmZpcm0gdGhpcyBib29raW5nIOKAlCB0aGF0IHRha2VzIHVwIHRvIGVpZ2h0IG1pbnV0ZXMuIE15IGJvb2tpbmdzIHNob3dzIHdoZW4gaXQgaGFzLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7YyhmKX08L3NwYW4+PC9kaXY+YCx4ayhnKSxgPGRpdiBjbGFzcz0icm93cyI+JHsoZC5xdW90ZT8ubGluZXM/P1tdKS5tYXAoRWspLmpvaW4oIiIpfTwvZGl2PmAsbj9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAke2woImxpc3RFeHRyYXMiKT9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKGQuY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+YDoiIn0KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2MoZC5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCAke2MoZC5ob3RlbE5hbWUpfTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpO3JldHVybltlZSgpLG4/YDxkaXYgY2xhc3M9Im5vdGUiPiR7dC5sZW5ndGh9IGJvb2tpbmdzLCBvbmUgZm9yIGVhY2ggc3RheS4gRWFjaCBob3RlbCBrZWVwcyBpdHMgb3duIG5pZ2h0cyB1bmRlciBpdHMgb3duIGNvZGUsIGFuZCBlYWNoIGlzICR7bCgiY2hhbmdlQm9va2luZyIpPyJjaGFuZ2VkIG9yIGNhbmNlbGxlZCI6ImNhbmNlbGxlZCJ9IG9uIGl0cyBvd24uPC9kaXY+YDoiIixhP2A8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+QSB0ZXN0IGJvb2tpbmcuPC9iPgogICAgICAgPHNwYW4+TWFkZSBpbiBhIHNpbXVsYXRlZCBjb3B5IG9mICR7YyhvKX0ncyBzeXN0ZW06IG5vdCBhICR7YyhvKX0gcmVzZXJ2YXRpb24sIG5vIHJvb20gaXMgaGVsZCwgYW5kIG5vdGhpbmcgaXMgcGFpZC48L3NwYW4+CiAgICAgPC9kaXY+YDpyPT09InBheS1hdC1ob3RlbCI/YDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJFYWNoIGlzIjoiVGhpcyBpcyJ9ICR7YyhvKX0ncyBvd24gcmVzZXJ2YXRpb24sIHBhaWQgYXQgdGhlIGhvdGVsLiBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YDpzP2A8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPlRoaXMgaXMgYSBkZW1vbnN0cmF0aW9uIGJvb2tpbmc6ICR7YyhvKX0gaGFzIG5vdCByZWNlaXZlZCBpdCBhbmQgbm8gcm9vbSBpcyBoZWxkLiAke24/IkVhY2ggZGVtb25zdHJhdGlvbiBob2xkIGxhcHNlcyBhdCB0aGUgdGltZSB1bmRlciBpdHMgY29kZS4iOmBUaGUgZGVtb25zdHJhdGlvbiBob2xkIGxhcHNlcyBhdCAke2MoU3ModFswXSkpfS5gfTwvc3Bhbj4KICAgICA8L2Rpdj5gOmA8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPiR7bj8iVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsIHRoZSB0aW1lIHVuZGVyIGVhY2ggY29kZS4iOmBUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgJHtjKFNzKHRbMF0pKX0uYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAoZD0+bj91KGQsU3RyaW5nKGQudG90YWw/PyIiKSxkKTp1KGQsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmAke2woImxpc3RFeHRyYXMiKT9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKHRbMF0/LmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPmA6IiJ9CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGlzIGJvb2tpbmc8L2J1dHRvbj5gfQogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxDaz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUuZGV0YWlsPz9lLndoeT8/IlRoYXQgY291bGQgbm90IGJlIGRvbmUuIil9PC9kaXY+YCxjbj4wPyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCI+VmlldyB0aGUgdHJpcDwvYnV0dG9uPjwvZGl2Pic6IiJdLmpvaW4oIiIpLEVrPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9ZZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2MoZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxBaz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQiLGZhaWxlZDoiYmFkIix1bmNvbmZpcm1lZDoid2FybiJ9LE9rPWU9Pntjb25zdCB0PWUucmVxdWVzdHM/LmtpbmRzPz9bXTtpZighdC5sZW5ndGgpcmV0dXJuIiI7Y29uc3Qgbj10Lm1hcChvPT51dS5maW5kKHI9PnIuaWQ9PT1vKT8ubGFiZWw/P28pO3JldHVybmA8ZGl2IGNsYXNzPSJtZXRhIGFza2VkLWxpbmUiPkFza2VkIGZvciAke2Mobi5qb2luKCIsICIpLnRvTG93ZXJDYXNlKCkpfTwvZGl2PmB9LFJrPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdLG49ZS5ub3RGb3VuZD9gPGRpdiBjbGFzcz0iZXJyIj4ke2MoZS50b29NYW55P2Uubm90Rm91bmRMaW5lOmBObyBib29raW5nIG1hdGNoZXMgJHtlLm5vdEZvdW5kfSB3aXRoIHRoYXQgZW1haWwuIEJvdGggaGF2ZSB0byBiZSBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLmApfTwvZGl2PmA6IiI7cmV0dXJuIGUubm90Rm91bmQmJnQubGVuZ3RoPT09MD9gJHtufQogICAgICA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZC1ib29raW5nIj5UcnkgYWdhaW48L2J1dHRvbj48L2Rpdj5gOnQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOltlZSgpLG4sYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobz0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKG8uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2MoWWUoby5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke09rKG8pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtBa1tTdHJpbmcoby5zdGF0dXMpXT8/IiJ9Ij4ke2Moby5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICAgICR7by5zdGF0dXM9PT0idW5jb25maXJtZWQiP2A8ZGl2IGNsYXNzPSJtZXRhIj5Ob3Qga25vd24geWV0IHdoZXRoZXIgJHtjKEhlKG8uc3VwcGxpZXIpLm5hbWUpfSBtYWRlIHRoaXMgYm9va2luZyDigJQgYSBwZXJzb24gaXMgY29uZmlybWluZyBpdC48L2Rpdj5gOiIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moby5xdW90ZT8udG90YWw/PyIiKX08L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7by5zdGF0dXM9PT0icmVxdWVzdGVkInx8by5zdGF0dXM9PT0iY29uZmlybWVkIj9gJHtkcygibGlzdEV4dHJhcyIpJiZIZShvLnN1cHBsaWVyKS5leHRyYXM/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPmA6IiJ9CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2Moby5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbDwvYnV0dG9uPmA6IiJ9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpfSx0bD1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2FuY2VsbGVkIixuPWUuYm9va2luZz8/e307cmV0dXJuW2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2FuY2VsbGVkIjoiQ2FuY2VsbGluZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGVlKCksYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtjKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sbmw9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNoYW5nZWQiLG49ZS5ib29raW5nPz97fSxvPWUuZnJvbT8/e30scj1lLnRvLHM9ISFyJiYoci5jaGVja0luIT09by5jaGVja0lufHxyLmNoZWNrT3V0IT09by5jaGVja091dHx8TnVtYmVyKHIucm9vbXMpIT09TnVtYmVyKG8ucm9vbXMpfHxyLnJvb21OYW1lIT09by5yb29tTmFtZSksYT0oaSxsLHUpPT5sP2A8ZGl2IGNsYXNzPSJsZWcke3U/IiB3YXMiOiIifSI+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnayI+JHtjKGkpfTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ3YiPiR7YyhsLmNoZWNrSW4pfSDihpIgJHtjKGwuY2hlY2tPdXQpfSDCtyAke2MobC5uaWdodHMpfSAke051bWJlcihsLm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9PC9kaXY+CiAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnbSI+JHtjKGwucm9vbU5hbWUpfSR7TnVtYmVyKGwucm9vbXMpPjE/YCDCtyAke2MobC5yb29tcyl9IHJvb21zYDoiIn0gwrcgJHtjKGwudG90YWwpfTwvZGl2PgogICAgICAgICA8L2Rpdj5gOiIiO3JldHVybltlZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2hhbmdlZCI6IkNoYW5naW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsZS5ob3RlbE5hbWU/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLmhvdGVsTmFtZSl9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibGVncyI+JHthKHQ/IldhcyI6Ik5vdyIsZS5mcm9tLHMpfSR7YSh0PyJOb3ciOiJXb3VsZCBiZSIsZS50bywhMSl9PC9kaXY+YCxlLmFkZE9uP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPiR7YyhlLmFkZE9uLm5hbWUpfTwvc3Bhbj48c3Bhbj4ke2MoZS5hZGRPbi5mcm9tKX0g4oaSICR7YyhlLmFkZE9uLnRvKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixlLmRpZmZlcmVuY2U/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHtlLnJlZnVuZER1ZT90PyJUaGUgZGVzayBvd2VzIjoiV291bGQgY29tZSBiYWNrIjp0PyJUaGUgZGVzayBhc2tzIGZvciI6IldvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5kaWZmZXJlbmNlKX08L3NwYW4+PC9kaXY+PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUucnVsZSl9PC9kaXY+YCx0Pyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+PC9kaXY+JzplLmNoYW5nZWFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5MZWF2ZSBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNoYW5nZT0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij4ke2UuYWRkT24mJmUuZnJvbT8uY2hlY2tJbj09PWUudG8/LmNoZWNrSW4mJmUuZnJvbT8uY2hlY2tPdXQ9PT1lLnRvPy5jaGVja091dD8iVXBkYXRlIHRoZSBib29raW5nIjoiTW92ZSB0aGUgYm9va2luZyJ9PC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDoiIl0uam9pbigiIil9LHpzPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS52aWV3PT09InBvbGljeSI/YDxoND4ke2MoZS50aXRsZSl9PC9oND4ke2MoZS50ZXh0KX1gOihlLnRvcGljcz8/W10pLm1hcChvPT5gPGg0PiR7YyhvLnRpdGxlKX08L2g0PiR7YyhvLnRleHQpfWApLmpvaW4oIiIpO3JldHVybltgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7Yyh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgdGhlIGhvdGVsIHB1Ymxpc2hlczwvZGl2PjwvZGl2PmAsZS52aWV3PT09InBvbGljeS1taXNzaW5nIj9gPGRpdiBjbGFzcz0iZW1wdHkiPiR7Yyh0Lm5hbWUpfSBkb2VzIG5vdCBwdWJsaXNoIGFueXRoaW5nIGFib3V0IHRoYXQgaGVyZS48L2Rpdj5gOmA8ZGl2IGNsYXNzPSJwcm9zZSI+JHtufTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPkJhY2sgdG8gJHtjKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LE5rPWU9Pntjb25zdCB0PWUuY29sdW1ucz8/W10sbj1lLnJvd0xhYmVscz8/W10sbz10LnNvbWUocz0+cy5yZWNvbW1lbmRlZCkscj1zPT5gCiAgICA8ZGl2IGNsYXNzPSJjbXAtaGVhZCR7cy5yZWNvbW1lbmRlZD8iIHBpY2siOiIifSR7bz8iIG1hcmtlZCI6IiJ9Ij4KICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJwaWNrbWFyayR7cy5yZWNvbW1lbmRlZD8iIjoiIG5vbmUifSI+JHtzLnJlY29tbWVuZGVkPyJSZWNvbW1lbmRlZCI6IiJ9PC9kaXY+YDoiIn0KICAgICAgPGJ1dHRvbiBjbGFzcz0idC1zaG90IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhzLmhvdGVsLmlkKX0iIHN0eWxlPSIke0t0KFN0cmluZyhzLmhvdGVsLmlkKSl9Ij4KICAgICAgICAke3MuaG90ZWwuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke2Mocy5ob3RlbC5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoV3QoU3RyaW5nKHMuaG90ZWwubmFtZSkpKX08L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtjKHMuaG90ZWwubmFtZSl9JHt1bihzLmhvdGVsLnN1cHBsaWVyKT9gPHNtYWxsIGNsYXNzPSJjb2wtZ3JvdXAiPiR7Yyh1bihzLmhvdGVsLnN1cHBsaWVyKS5uYW1lKX08L3NtYWxsPmA6IiJ9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHtzLnByaWNlP2Ake2Mocy5wcmljZS5zdGF5VG90YWwpfTxzbWFsbCBjbGFzcz0ic3ViIj50b3RhbCDCtyAke2Mocy5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPmA6cy5mcm9tP2A8c21hbGw+RnJvbSA8L3NtYWxsPiR7YyhzLmZyb20pfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0id2h5JHtzLmJlc3RGb3I/IiI6IiBub25lIn0iPiR7cy5iZXN0Rm9yP2Mocy5iZXN0Rm9yKToiIn08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGMiPiR7Wy4uLihzLnByb3M/P1tdKS5tYXAoYT0+YDxkaXYgY2xhc3M9InBybyI+PHNwYW4gY2xhc3M9Im0iPis8L3NwYW4+PHNwYW4+JHtjKGEpfTwvc3Bhbj48L2Rpdj5gKSwuLi4ocy5jb25zPz9bXSkubWFwKGE9PmA8ZGl2IGNsYXNzPSJjb24iPjxzcGFuIGNsYXNzPSJtIj7iiJI8L3NwYW4+PHNwYW4+JHtjKGEpfTwvc3Bhbj48L2Rpdj5gKV0uam9pbigiIil9PC9kaXY+CiAgICA8L2Rpdj5gO3JldHVybltlZSgpLGUudGl0bGU/YDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PmA6IiIsZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoWWUoZS5zdGF5KSl9PC9kaXY+YDoiIixBcnJheS5pc0FycmF5KGUuY3VycmVuY2llcykmJmUuY3VycmVuY2llcy5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UHJpY2VzIGFyZSBpbiBlYWNoIGhvdGVsJ3Mgb3duIGN1cnJlbmN5ICgke2MoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSkuIFRoZXkgYXJlIG5vdCBjb252ZXJ0ZWQsIHNvIHRoZSBjb2x1bW5zIGFyZSBub3QgYSBwcmljZSByYW5raW5nLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImNtcC13cmFwIj48ZGl2IGNsYXNzPSJjbXAke3QubGVuZ3RoPj00PyIgZm91ciI6IiJ9IiBzdHlsZT0iLS1jb2xzOiR7dC5sZW5ndGh9Oy0taGVhZC1yb3dzOiR7bz82OjV9Ij4KICAgICAgIDxkaXYgY2xhc3M9ImNtcC1jb3JuZXIiPjwvZGl2PgogICAgICAgJHt0Lm1hcChyKS5qb2luKCIiKX0KICAgICAgICR7bi5tYXAoKHMsYSk9PmA8ZGl2IGNsYXNzPSJrIj4ke2Mocyl9PC9kaXY+JHt0Lm1hcChpPT5gPGRpdiBjbGFzcz0idiR7YSUyPyIgYWx0IjoiIn0iPiR7YyhpLnJvd3M/LlthXT8udmFsdWU/PyLigJQiKX08L2Rpdj5gKS5qb2luKCIiKX1gKS5qb2luKCIiKX0KICAgICA8L2Rpdj48L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKHM9PmAke2Mocy5uYW1lKX06ICR7YyhzLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPk9wZW4gYSAke2MoZS52b2NhYj8ubm91bj8/ImhvdGVsIil9IHRvIHNlZSBpdHMgcm9vbXMke2Uuc3RheT8uY2hlY2tJbj8iIGZvciB0aGVzZSBuaWdodHMiOiIifS48L2Rpdj5gXS5qb2luKCIiKX0sWms9ZT0+e2NvbnN0IHQ9ZS5kYXlzPz9bXSxuPWk9PmA8c3BhbiBjbGFzcz0iaW5zdGF0ZSAke2kuYm9va2VkfHxpLmluVHJpcD8ieWVzIjoibm8ifSI+JHtpLmJvb2tlZD9gQm9va2VkIMK3ICR7YyhpLmJvb2tlZCl9YDppLmluVHJpcD8iSW4gdGhlIHRyaXAiOiJQbGFuIG9ubHkifTwvc3Bhbj5gLG89aT0+YCBkYXRhLWhvdGVsPSIke2MoaS5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIiR7aS5jaGVja0luP2AgZGF0YS1jaT0iJHtjKGkuY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoaS5jaGVja091dCl9ImA6IiJ9YCxyPWk9PmkuY2hlY2tvdXQ/YDxkaXYgY2xhc3M9InBsYW4tbmlnaHQiJHtvKGkpfT48c3Bhbj5DaGVjayBvdXQgwrcgJHtjKGkubmFtZSl9PC9zcGFuPjwvZGl2PmA6TnVtYmVyKGkubmlnaHQ/PzEpPjE/YDxkaXYgY2xhc3M9InBsYW4tbmlnaHQiJHtvKGkpfT4KICAgICAgICAgICA8c3Bhbj5OaWdodCAke2MoaS5uaWdodCl9IG9mICR7YyhpLm5pZ2h0cyl9IMK3ICR7YyhpLm5hbWUpfTwvc3Bhbj4ke24oaSl9CiAgICAgICAgIDwvZGl2PmA6YDxkaXYgY2xhc3M9InBsYW4tc3RheSIke28oaSl9PgogICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcy1zaG90IiBzdHlsZT0iJHtLdChTdHJpbmcoaS5pZCkpfSI+JHtpLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGkuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6YDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhXdChTdHJpbmcoaS5uYW1lKSkpfTwvc3Bhbj5gfTwvc3Bhbj4KICAgICAgICAgICA8c3BhbiBjbGFzcz0icHMtYm9keSI+CiAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9zcGFuPgogICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldGEiPiR7YyhbaS5kZXRhaWwsaS5uaWdodHM/YCR7aS5uaWdodHN9ICR7aS5uaWdodHM9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9IGhlcmVgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAke2kucHJpY2U/YDxzcGFuIGNsYXNzPSJwcy1wcmljZSI+JHtjKGkucHJpY2UpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICAgJHtuKGkpfQogICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgPC9kaXY+YCxzPWk9PmAKICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGkubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKFtpLmRldGFpbCxpLnByaWNlXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgICR7bihpKX0KICAgIDwvZGl2PmAsYT1pPT4oaS5wbGFuPz9bXSkubGVuZ3RoP2A8b2wgY2xhc3M9Im1vbWVudHMiPiR7aS5wbGFuLm1hcChsPT5gPGxpPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGVuIj4ke2MobC50aW1lPz8iIil9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3aGF0Ij48Yj4ke2MobC53aGF0KX08L2I+JHtsLm5vdGU/YDxzbWFsbD4ke2MobC5ub3RlKX08L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICA8L2xpPmApLmpvaW4oIiIpfTwvb2w+YDoiIjtyZXR1cm5bZWUoKSxgPGRpdj4KICAgICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgJHtlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhZZShlLnN0YXkpKX08L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9ImdhcCI+PGI+JHtjKE51bWJlcihlLmluVHJpcD8/MCkrTnVtYmVyKGUuYm9va2VkPz8wKSl9LyR7YyhlLnBsYW5uZWQpfTwvYj48c3Bhbj4ke2MoZS5nYXA/PyIiKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0iZGF5cyI+JHt0Lm1hcCgoaSxsKT0+YAogICAgICA8ZGl2IGNsYXNzPSJkYXlyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImRheW51bSI+PGI+JHtsKzF9PC9iPjxpPjwvaT48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXlib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRheWxhYmVsIj4ke2MoaS5sYWJlbCl9JHtpLmRhdGU/YDxzbWFsbD4gwrcgJHtjKGprKFN0cmluZyhpLmRhdGUpKSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtpLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7YyhpLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAke2EoaSl9CiAgICAgICAgICAkeyhpLml0ZW1zPz9bXSkubWFwKHU9PnUua2luZD09PSJob3RlbCI/cih1KTpzKHUpKS5qb2luKCIiKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChpPT5gJHtjKGkubmFtZSl9OiAke2MoaS53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sams9ZT0+bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KSxrZT0oZSx0PSExKT0+e2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuO2NvbnN0IG49dCYmZS52aWV3PT09Im1lbWJlciImJlg/ey4uLmUsbWVtYmVyOlh9OmU7UV8obiksbi50b29sTmFtZXMmJihvdT1uLnRvb2xOYW1lcyksKG4uYm9va2luZ01vZGU9PT0icGF5LWF0LWhvdGVsInx8bi5ib29raW5nTW9kZT09PSJob2xkIikmJihMZj1uLmJvb2tpbmdNb2RlKSx0eXBlb2Ygbi50b29sTmFtZXM9PSJvYmplY3QiJiYoQmY9bi5zYW5kYm94PT09ITAsVWY9bi5waG9uZVJlcXVpcmVkPT09ITApLG4uYnJhbmQmJihndD1TdHJpbmcobi5icmFuZCkpLG4ubG9nb1VybCYmKGtzPVN0cmluZyhuLmxvZ29VcmwpKSxuLnByb2dyYW1tZSYmKFpmPVN0cmluZyhuLnByb2dyYW1tZSkpLG4ubWFya2V0JiZBcnJheS5pc0FycmF5KG4ubWFya2V0LnN1cHBsaWVycykmJihSZT1uLm1hcmtldCksbi52aWV3PT09ImJvb2tpbmciJiYoVWU9IiIpLG4uY29kZVByZWZpeCYmKHdzPVN0cmluZyhuLmNvZGVQcmVmaXgpKSx0eXBlb2Ygbi5kZW1vPT0iYm9vbGVhbiImJihydT1uLmRlbW8pLG4uZGVtb05vdGUmJihqZj1TdHJpbmcobi5kZW1vTm90ZSkpLHR5cGVvZiBuLnJvb21zX3dhbnRlZD09Im51bWJlciI/WT1uLnJvb21zX3dhbnRlZDoobi52aWV3PT09ImhvdGVscyJ8fG4udmlldz09PSJkZXN0aW5hdGlvbnMifHxuLnZpZXc9PT0ibm8taG90ZWxzIikmJm4uc3RheT8uY2hlY2tJbiYmIWJ0JiYoWT1NYXRoLm1heCgxLE51bWJlcihuLmFzaz8ucm9vbXM/PzEpfHwxKSksdHx8KG4udmlldz09PSJtZW1iZXIiJiZuLm1lbWJlcj8udGllcj8ubmFtZT9YPW4ubWVtYmVyOm4ubWVtYmVyPy50aWVyPy5uYW1lJiYoWD1YPy5wcm9ncmFtbWU9PT1uLm1lbWJlci5wcm9ncmFtbWUmJlg/LnRpZXI/Lm5hbWU9PT1uLm1lbWJlci50aWVyLm5hbWU/ey4uLlgsLi4ubi5tZW1iZXIscHJlZmVyZW5jZXM6bi5tZW1iZXIucHJlZmVyZW5jZXN9Om4ubWVtYmVyKSwobi52aWV3PT09InNpZ25lZC1vdXQifHxuLnNpZ25lZEluPT09ITEpJiYoWD1udWxsKSksbi5zdGF5Py5jaGVja0luJiYhdG4mJiFidCYmKFQ9e2NoZWNrSW46bi5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6bi5zdGF5LmNoZWNrT3V0LGd1ZXN0czpuLnN0YXkuZ3Vlc3RzPz8yfSksIXN1JiYobi52aWV3PT09InRyaXAifHxuLnZpZXc9PT0ibmVlZHMtZGF0ZXMiKSYmKHp0PW4ubGluZXM/P1tdKSwobi52aWV3PT09ImJvb2tpbmcifHxuLnZpZXc9PT0iZW1wdHktdHJpcCIpJiYoenQ9W10sY249MCksQmU9U3RyaW5nKG4udmlldz8/IiIpLE1mKCk7Y29uc3Qgbz1wZSgiYnJhbmQiKTtrcz8oby5zcmM9a3Msby5oaWRkZW49ITEscGUoInRpdGxlIikuaGlkZGVuPSEwKTooby5oaWRkZW49ITAscGUoInRpdGxlIikuaGlkZGVuPSExLHBlKCJ0aXRsZSIpLnRleHRDb250ZW50PWd0fHwiSG90ZWxzIikscGUoInN1YiIpLnRleHRDb250ZW50PURrKG4pLEJrKCksTGsoKTtjb25zdCByPXtob3RlbHM6ZmssZGVzdGluYXRpb25zOmlrLCJuby1ob3RlbHMiOm1rLGhvdGVsOll1LCJuby1yb29tcyI6WXUsImhvdGVsLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhhdCBob3RlbCBpcyBub3QgaW4gdGhpcyBjb25uZWN0b3IuPC9kaXY+JyxleHRyYXM6dmssdHJpcDp3aywibmVlZHMtZGF0ZXMiOnFrLGJvb2tpbmc6UGssIm5lZWRzLWd1ZXN0Ijp6ayxtZW1iZXI6VGssIm1lbWJlci1ub3QtZm91bmQiOklrLCJzaWduZWQtb3V0IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5TaWduZWQgb3V0LiBSYXRlcyBhcmUgdGhlIHB1YmxpYyBvbmVzIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj48L2Rpdj4nLCJlbXB0eS10cmlwIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGVyZSBpcyBub3RoaW5nIGluIHRoZSB0cmlwIHlldC48L2Rpdj4nLGJvb2tpbmdzOlJrLCJjYW5jZWxsYXRpb24tcHJldmlldyI6dGwsY2FuY2VsbGVkOnRsLCJjaGFuZ2UtcHJldmlldyI6bmwsY2hhbmdlZDpubCwiYm9va2luZy1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmcgaGVyZSBtYXRjaGVzIHRoYXQgY29kZS48L2Rpdj4nLGNvbXBhcmlzb246TmssIm5vdGhpbmctdG8tY29tcGFyZSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9uZSBvZiB0aG9zZSBhcmUgaG90ZWxzIHRoaXMgY29ubmVjdG9yIGtub3dzLjwvZGl2PicsaXRpbmVyYXJ5OlprLCJlbXB0eS1pdGluZXJhcnkiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPkFuIGl0aW5lcmFyeSBuZWVkcyBhdCBsZWFzdCBvbmUgZGF5LjwvZGl2PicscG9saWN5OnpzLHBvbGljaWVzOnpzLCJwb2xpY3ktbWlzc2luZyI6enMsZXJyb3I6Q2ssImZpbmQtYm9va2luZyI6KCk9PltlZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5BIGJvb2tpbmcgbWFkZSBpbiBhbm90aGVyIGNvbnZlcnNhdGlvbiBpcyBmb3VuZCB3aXRoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIGl0IHdhcyBtYWRlIHdpdGggLSBib3RoLCBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvcm0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgICAgICA8bGFiZWw+Q29uZmlybWF0aW9uIGNvZGU8aW5wdXQgaWQ9ImZjb2RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIke3dzP2AgcGxhY2Vob2xkZXI9IiR7Yyh3cyl9LeKApiJgOiIifT48L2xhYmVsPgogICAgICAgICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJmbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIG9uZSBvbiB0aGUgYm9va2luZyI+PC9sYWJlbD4KICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibG9va3VwLWJvb2tpbmciPkZpbmQgaXQ8L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YF0uam9pbigiIiksIm5vLW1lbWJlciI6KCk9PmA8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9ib2R5IGlzIHNpZ25lZCBpbiwgc28gdGhlcmUgaXMgbm90aGluZyBzYXZlZCB0byBmb3JnZXQuPC9kaXY+JHtVbyghMCl9YCwibWVtYmVyLXNpZ24taW4iOigpPT5bZWUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+U2lnbiBpbiB3aXRoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgcHJpbnRlZCBvbiB0aGUgY2FyZCB0byBzZWUgdGhlIG1lbWJlciByYXRlIG9uIGV2ZXJ5IHByaWNlIGhlcmUuPC9kaXY+JyxVbyghMCldLmpvaW4oIiIpfTsoQmU9PT0iaG90ZWwifHxCZT09PSJuby1yb29tcyJ8fEJlPT09Im5lZWRzLWRhdGVzIikmJm4uaG90ZWw/LmlkPyhlbj1TdHJpbmcobi5ob3RlbC5pZCksbi5uZWVkc0RhdGVzJiZzZXRUaW1lb3V0KCgpPT5tcygwLCFwcyksMCkpOihlbj0iIixsdSgpKSxNPW47Y29uc3Qgcz1yW0JlXTtwZSgiY29udGVudCIpLmlubmVySFRNTD0ocz9zKG4pOmA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhuLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7bi5kZXRhaWw/YDxicj4ke2Mobi5kZXRhaWwpfWA6IiJ9PC9kaXY+YCkrTWsobiksQmU9PT0iaG90ZWxzIiYmIXBuKCkmJihhdT1pdSgpLGZzKCkhPT1CbyYma2Uobix0KSl9LE1rPWU9Pntjb25zdCB0PSEhRWUuZ2V0SG9zdENhcGFiaWxpdGllcygpPy5tZXNzYWdlLG49KGUuc3VnZ2VzdGlvbnM/P1tdKS5tYXAoKG8scik9Pm8/LmFza3x8bz8uYXNrcz8ubGVuZ3RoP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LHFrPWU9PltlZSgpLGUuaG90ZWw/dG0oZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLEpmKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSxEaz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/WWUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixMaz0oKT0+e2NvbnN0IGU9cGUoIm1lbWJlcmNoaXAiKTtYPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1gudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoWC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixbWC5uYW1lLFgucHJvZ3JhbW1lXS5maWx0ZXIodD0+dHlwZW9mIHQ9PSJzdHJpbmciJiZ0KS5qb2luKCIgwrcgIikpKTooZS5oaWRkZW49IWRzKCJzaWduSW4iKXx8QmU9PT0ibWVtYmVyLW5vdC1mb3VuZCIsZS50ZXh0Q29udGVudD0iTWVtYmVyIHNpZ24gaW4iLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsImFzay1zaWduLWluIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpfSxCaz0oKT0+e2NvbnN0IGU9cGUoImhlYWR0cmlwIiksdD1zdT9jbjpjbnx8enQubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxCZT09PSJ0cmlwIixwZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSxVaz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO1Q9e2NoZWNrSW46ZT8udmFsdWU/P1QuY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/VC5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz9ULmd1ZXN0cyl8fDJ9fSx4bz0oZT17fSk9PlQuY2hlY2tJbiYmVC5jaGVja091dD97Y2hlY2tJbjpULmNoZWNrSW4sY2hlY2tPdXQ6VC5jaGVja091dCxndWVzdHM6VC5ndWVzdHMsLi4uZX06ZTtsZXQgTHMsdG49ITE7Y29uc3QgbHU9KCk9PntjbGVhclRpbWVvdXQoTHMpLHRuPSExfSxtcz0oZT0wLHQ9ITEpPT57ZW4mJihjbGVhclRpbWVvdXQoTHMpLHRuPSEwLExzPXNldFRpbWVvdXQoKCk9PntpZighZW4pe3RuPSExO3JldHVybn1pZihKdCl7bXMoMTUwLHQpO3JldHVybn10bj0hMSxxKCJnZXRIb3RlbCIse2hvdGVsOmVuLHJvb21zOlksLi4ueG8oKX0sdD97bm90ZTp0a306e30pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBuaWdodHMuIikpfSxlKSl9LEE9ZT0+e3BlKCJjb250ZW50IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgPGRpdiBjbGFzcz0iZXJyIj4ke2MoZSl9PC9kaXY+YCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlPT57Y29uc3QgdD1lLnRhcmdldD8uY2xvc2VzdCgiW2RhdGEtaG90ZWxdLFtkYXRhLWFjdF0sW2RhdGEtcG9saWN5XSxbZGF0YS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2FuY2VsXSxbZGF0YS1jb25maXJtLWNoYW5nZV0sW2RhdGEtZXh0cmFzXSxbZGF0YS1yb29tcy1uXSxbZGF0YS1hc2tdLFtkYXRhLWJvb2tpbmctZXh0cmFzXSxbZGF0YS1ib29raW5nLWV4dHJhXSxbZGF0YS1zdWdnZXN0XSxbZGF0YS1wbGFjZV0sW2RhdGEtcGxhY2UtYWxsXSxbZGF0YS1zb3J0XSxbZGF0YS1saXN0LXJvb21zXSxbZGF0YS1maWx0ZXJdLFtkYXRhLXBhbmVsXSxbZGF0YS1yZWdpb25dLFtkYXRhLWdyb3VwLWhvbWVdIik7aWYoIXQpcmV0dXJuO2NvbnN0IG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXNrIik7aWYobiE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09InRydWUiO3Quc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLFN0cmluZyhrKSk7Y29uc3QgJD0ka1tuXTtrJiYkJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYXNrW2RhdGEtYXNrPSIkeyR9Il1gKT8uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLG5tKCk7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtbGlzdC1yb29tcyIpO2lmKG8hPT1udWxsKXtZPU1hdGgubWluKEt1LE1hdGgubWF4KDEsWStOdW1iZXIobykpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJscm4iKTtrJiYoay50ZXh0Q29udGVudD1TdHJpbmcoWSkpLEhvKDQ1MCk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKHIhPT1udWxsKXtVaygpLFk9TWF0aC5taW4oS3UsTWF0aC5tYXgoMSxZK051bWJlcihyKSkpO2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJuIik7ayYmKGsudGV4dENvbnRlbnQ9U3RyaW5nKFkpKTtjb25zdCAkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTskJiYoJC50ZXh0Q29udGVudD1ocygpKSxtcyg0NTApO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYocyE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsJD10LmNsYXNzTGlzdC5jb250YWlucygiYWRkIikmJiF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP1k6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksRz10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9OnhvKCk7cSgiYWRkVG9UcmlwIix7aG90ZWw6ayxyb29tOnMscm9vbXM6JCwuLi5HfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1leHRyYSIpO2lmKGEhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWRheSIpO3EoImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOmEscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksLi4uaz97ZGF5Omt9Ont9fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlIik7aWYoaSE9PW51bGwpe2NvbnN0IGs9TT8uYXNrPy5zb3J0LCQ9TT8udmlldz09PSJob3RlbHMiP00/LmFzaz8ucXVlcnk6dm9pZCAwO0JzKCk7Y29uc3QgRz1NPy52aWV3PT09ImRlc3RpbmF0aW9ucyJ8fCEhTT8uc3RheT8uY2hlY2tJbjtxKCJsaXN0SG90ZWxzIix7Li4uaT97Y2l0eTppfTp7fSwuLi5rP3tzb3J0Omt9Ont9LC4uLmkmJiQ/e3F1ZXJ5OiR9Ont9LC4uLk0/LnZpZXc9PT0iaG90ZWxzIj9JbyhNPy5hc2spOnt9LC4uLkc/bXQoKTp7fX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCBsPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWdyb3VwLWhvbWUiKTtpZihsKXtxKCJsaXN0SG90ZWxzIix7YWxsOiEwLGdyb3VwOmwsLi4ubXQoKX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1jb25zdCB1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWZpbHRlciIpO2lmKHUhPT1udWxsKXtjb25zdCBrPU0/LmFzaz8/e30sJD1JbyhrKTtpZih1LnN0YXJ0c1dpdGgoImdyb3VwOiIpKXtjb25zdCB0ZT11LnNsaWNlKDYpOyQuZ3JvdXA9JC5ncm91cD09PXRlP3ZvaWQgMDp0ZX1lbHNlIGlmKHUuc3RhcnRzV2l0aCgiYnJhbmQ6Iikpe2NvbnN0IHRlPXUuc2xpY2UoNik7JC5icmFuZD0kLmJyYW5kPT09dGU/dm9pZCAwOnRlfWVsc2UgaWYodS5zdGFydHNXaXRoKCJmYWNpbGl0eToiKSl7Y29uc3QgdGU9dS5zbGljZSg5KSxPZT0kLmZhY2lsaXRpZXM/P1tdOyQuZmFjaWxpdGllcz1PZS5pbmNsdWRlcyh0ZSk/T2UuZmlsdGVyKEd0PT5HdCE9PXRlKTpbLi4uT2UsdGVdfWVsc2UodT09PSJmcmVlQ2FuY2VsbGF0aW9uInx8dT09PSJicmVha2Zhc3QiKSYmKCRbdV09ISRbdV0pO2NvbnN0IEc9SW8oJCk7cSgibGlzdEhvdGVscyIsey4uLlF1KGspLC4uLkd9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGZpbHRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc29ydCIpO2lmKGQhPT1udWxsKXtQZT1RZjtjb25zdHtzb3J0OmssLi4uJH09TT8uYXNrPz97fTtxKCJsaXN0SG90ZWxzIix7Li4uJCwuLi5kIT09Imdyb3VwIj97c29ydDpkfTp7fX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgcmVvcmRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UtYWxsIik7aWYoZiE9PW51bGwpe3EoImxpc3RIb3RlbHMiLHtjaXR5OmYsYWxsOiEwLC4uLm10KCl9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgZz10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKGchPT1udWxsKXtxKCJsaXN0RXh0cmFzIixodChnKSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYodiE9PW51bGwpe3EoInByZXZpZXdDaGFuZ2UiLHsuLi5odCh0LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nIik/PyIiKSxleHRyYTp2LHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCB3b3JrIG91dCB0aGF0IGNoYW5nZS4iKSk7cmV0dXJufWNvbnN0IF89dC5nZXRBdHRyaWJ1dGUoImRhdGEtZXh0cmFzIik7aWYoXyE9PW51bGwpe3EoImxpc3RFeHRyYXMiLHtob3RlbDpfLC4uLnhvKCl9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCB3PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBvbGljeSIpO2lmKHchPT1udWxsKXtxKCJwb2xpY2llcyIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHRvcGljOnd9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhhdCBwb2xpY3kuIikpO3JldHVybn1jb25zdCBTPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNhbmNlbCIpO2lmKFMhPT1udWxsKXtxKCJwcmV2aWV3Q2FuY2VsbGF0aW9uIixodChTKSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCB3b3JrIG91dCB0aGUgZmVlLiIpKTtyZXR1cm59Y29uc3Qgaj10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNhbmNlbCIpO2lmKGohPT1udWxsKXtxKCJjYW5jZWxCb29raW5nIix7Li4uaHQoaiksY29uZmlybWVkOiEwfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBjYW5jZWwgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgTj10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNoYW5nZSIpO2lmKE4hPT1udWxsKXtjb25zdCBrPU0/LnRvPz97fSwkPU0/LmZyb20/P3t9LEc9TT8uYWRkT24sdGU9ay5jaGVja0luJiYoay5jaGVja0luIT09JC5jaGVja0lufHxrLmNoZWNrT3V0IT09JC5jaGVja091dCk7cSgiY2hhbmdlQm9va2luZyIsey4uLmh0KE4pLGNvbmZpcm1lZDohMCwuLi50ZT97Y2hlY2tJbjprLmNoZWNrSW4sY2hlY2tPdXQ6ay5jaGVja091dH06e30sLi4uRz8uaWQ/e2V4dHJhOkcuaWQscXVhbnRpdHk6TnVtYmVyKEcudG8pfTp7fSwuLi5rLnJvb21zIT09dm9pZCAwJiZOdW1iZXIoay5yb29tcykhPT1OdW1iZXIoJC5yb29tcyk/e3Jvb21zOk51bWJlcihrLnJvb21zKX06e30sLi4uay5yb29tTmFtZSYmay5yb29tTmFtZSE9PSQucm9vbU5hbWU/e3Jvb206ay5yb29tTmFtZX06e319KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGNoYW5nZSB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBJPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKEk9PT0iYmFjayIpe29sKCk7cmV0dXJufWNvbnN0IHJlPUk9PT0iYm9va2luZ3MiPyJib29raW5ncyI6dC5oYXNBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKSYmIXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/YGhvdGVsOiR7dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKX1gOiIiO2lmKHJlJiZoZS5sZW5ndGgmJmFuKGhlLmF0KC0xKT8ucGF5bG9hZCk9PT1yZSl7b2woKTtyZXR1cm59Y29uc3QgVz10LmdldEF0dHJpYnV0ZSgiZGF0YS1yZWdpb24iKTtpZihXIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpIT09InRydWUiO2Zvcihjb25zdCAkIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJlZ2lvbl0iKSkkLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKGsmJiQ9PT10KSk7Zm9yKGNvbnN0ICQgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmVnaW9uLWJvZHldIikpJC5oaWRkZW49IWt8fCQuZ2V0QXR0cmlidXRlKCJkYXRhLXJlZ2lvbi1ib2R5IikhPT1XO3JldHVybn1pZihJPT09Im1vcmUtY291bnRyaWVzIil7Zm9yKGNvbnN0IGsgb2YodC5jbG9zZXN0KCJbZGF0YS1yZWdpb24tYm9keV0iKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZXN0W2hpZGRlbl0iKSlrLmhpZGRlbj0hMTt0LmNsb3Nlc3QoIi5wbGFjZXMiKT8ucmVtb3ZlKCk7cmV0dXJufWlmKEk9PT0ibW9yZS1wbGFjZXMiKXtmb3IoY29uc3QgayBvZih0LmNsb3Nlc3QoIi5wbGFjZXMiKT8/ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jaGlwLnBsYWNlW2hpZGRlbl0iKSlrLmhpZGRlbj0hMTt0LnJlbW92ZSgpO3JldHVybn1jb25zdCBIPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsIik7aWYoSCE9PW51bGwpe1BlPVBlPT09SD8iIjpIO2Zvcihjb25zdCBrIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsLWJvZHldIikpay5oaWRkZW49ay5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwtYm9keSIpIT09UGU7Zm9yKGNvbnN0IGsgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcGFuZWxdIikpay5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLFN0cmluZyhrLmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpPT09UGUpKTtyZXR1cm59aWYoST09PSJjbGVhci1maWx0ZXJzIil7cSgibGlzdEhvdGVscyIsUXUoTT8uYXNrKSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBjbGVhciB0aGUgZmlsdGVycy4iKSk7cmV0dXJufWlmKEk9PT0iYWxsLWhvdGVscyIpe0JzKCkscSgibGlzdEhvdGVscyIse2FsbDohMCwuLi5tdCgpfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09InByaWNlLWxpc3QiKXtIbygwKTtyZXR1cm59aWYoST09PSJmaW5kLWJvb2tpbmciKXtjb25zdCBrPXt2aWV3OiJmaW5kLWJvb2tpbmcifTtUbyhrKSxrZShrKSx0dCgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09Imxvb2t1cC1ib29raW5nIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8udmFsdWUudHJpbSgpPz8iIiwkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwhJC5pbmNsdWRlcygiQCIpKXtBKCJCb3RoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIHRoZSBib29raW5nIHdhcyBtYWRlIHdpdGgsIHBsZWFzZS4iKTtyZXR1cm59cSgibGlzdEJvb2tpbmdzIix7Ym9va2luZzprLGVtYWlsOiR9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvb2sgdGhhdCB1cC4iKSk7cmV0dXJufWlmKEk9PT0iZmluZCIpe29tKCk7cmV0dXJufWlmKEk9PT0icGFnZS1uZXh0Inx8ST09PSJwYWdlLXByZXYiKXtjb25zdCBrPU07aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtjb25zdCAkPWZzKCksRz1OdW1iZXIoay5vZmZzZXQ/PzApLHRlPU1hdGgubWluKCQsKGsuaG90ZWxzPz9bXSkubGVuZ3RoKTtxKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDpJPT09InBhZ2UtbmV4dCI/Ryt0ZTpNYXRoLm1heCgwLEctJCksbGltaXQ6JH0pLnRoZW4odHQpLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09ImZ1bGxzY3JlZW4iKXtFZS5yZXF1ZXN0RGlzcGxheU1vZGUoe21vZGU6ImZ1bGxzY3JlZW4ifSkudGhlbihrPT57ZG49U3RyaW5nKGs/Lm1vZGU/P2RuKTtjb25zdCAkPU07aWYoISQpcmV0dXJuO2NvbnN0IEc9TnVtYmVyKCQudG90YWw/PzApO3BuKCkmJiQudmlldz09PSJob3RlbHMiJiYoTnVtYmVyKCQub2Zmc2V0Pz8wKT4wfHwoJC5ob3RlbHM/P1tdKS5sZW5ndGg8TWF0aC5taW4oMTIsRykpP3EoImxpc3RIb3RlbHMiLHsuLi4kLmFzaz8/e30sbGltaXQ6MTJ9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk6a2UoJCl9KS5jYXRjaCgoKT0+QSgiVGhpcyBhcHAgY2Fubm90IG9wZW4gZnVsbCBzY3JlZW4gaGVyZS4iKSk7cmV0dXJufWlmKEk9PT0ibW9yZS1ob3RlbHMiKXtjb25zdCBrPU07aWYoIWt8fGsudmlldyE9PSJob3RlbHMiKXJldHVybjtxKCJsaXN0SG90ZWxzIix7Li4uay5hc2s/P3t9LG9mZnNldDpOdW1iZXIoay5vZmZzZXQ/PzApKyhrLmhvdGVscz8/W10pLmxlbmd0aCxsaW1pdDoxMn0se2ZvbGQ6JD0+JD8udmlldz09PSJob3RlbHMiP3suLi4kLGhvdGVsczpbLi4uay5ob3RlbHM/P1tdLC4uLiQuaG90ZWxzPz9bXV0sc2hvd246KGsuaG90ZWxzPz9bXSkubGVuZ3RoKygkLmhvdGVscz8/W10pLmxlbmd0aCxvZmZzZXQ6TnVtYmVyKGsub2Zmc2V0Pz8wKSxwbGFjZXM6ay5wbGFjZXMsLi4uay53aWRlbmVkP3t3aWRlbmVkOmsud2lkZW5lZH06e319OiR9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgbW9yZSBob3RlbHMuIikpO3JldHVybn1pZihJPT09ImhvbWUiKXtxKCJsaXN0SG90ZWxzIix7fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZigoST09PSJtZW1iZXIifHxJPT09ImZpbmQtYm9va2luZyJ8fEk9PT0iYXNrLXNpZ24taW4iKSYmSnQpcmV0dXJuO2lmKEk9PT0ibWVtYmVyIil7aWYoIVgpcmV0dXJuO2NvbnN0IGs9e3ZpZXc6Im1lbWJlciIsbWVtYmVyOlh9O1RvKGspLGtlKGspLHR0KCk7cmV0dXJufWlmKEk9PT0iYXNrLXNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtpZihrKWsuaGlkZGVuPSExO2Vsc2V7Y29uc3QgJD17dmlldzoibWVtYmVyLXNpZ24taW4ifTtUbygkKSxrZSgkKSx0dCgpfWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0ic2lnbi1pbiIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIiwkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWt8fCEkKXtBKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59cSgic2lnbkluIix7bnVtYmVyOmssc3VybmFtZTokfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBzaWduIGluLiIpKTtyZXR1cm59aWYoST09PSJmb3JnZXQtcHJlZnMiKXtxKCJmb3JnZXRQcmVmZXJlbmNlcyIse30pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgZm9yZ2V0IHRoZW0uIikpO3JldHVybn1jb25zdCBnZT10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYoZ2UhPT1udWxsKXtjb25zdCBrPShNPy5zdWdnZXN0aW9ucz8/W10pW051bWJlcihnZSldO2s/LmFzaz8udG9vbD9xKFN0cmluZyhrLmFzay50b29sKSxrLmFzay5hcmdzPz97fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBkbyB0aGF0IGp1c3Qgbm93LiIpKTpBcnJheS5pc0FycmF5KGs/LmFza3MpJiZrLmFza3MubGVuZ3RoPyhhc3luYygpPT57Zm9yKGNvbnN0WyQsR11vZiBrLmFza3MuZW50cmllcygpKWF3YWl0IHEoU3RyaW5nKEcudG9vbCksRy5hcmdzPz97fSx7cHVzaDokPT09MH0pfSkoKS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IHB1dCBhbGwgb2YgdGhlbSBpbiB0aGUgdHJpcCBqdXN0IG5vdy4iKSk6az8uc2F5JiZFZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKGsuc2F5KX1dfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZihJPT09InNpZ24tb3V0Iil7WD1udWxsLHEoInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoST09PSJhc2stYm9vayIpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3JvdXAiKTtrJiZrIT09VWUmJihVZT1rLGtlKE0pKTtjb25zdCAkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpOyQmJigkLmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKEk9PT0iYm9vayIpe2NvbnN0e3Bob25lUmVxdWlyZWQ6a309Y3UoKSwkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy52YWx1ZS50cmltKCk/PyIiLEc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiIsdGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdwaG9uZSIpPy52YWx1ZS50cmltKCk/PyIiLE9lPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiLEd0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndGltZSIpPy52YWx1ZS50cmltKCk/PyIiLGdzPVsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcChhbT0+YW0uZGF0YXNldC5hc2s/PyIiKSxkdT0hIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZDtpZih4ZT17bmFtZTokLGVtYWlsOkcsLi4uaz97cGhvbmU6dGV9Ont9LG5vdGVzOk9lLGFycml2aW5nQXQ6R3QscmVxdWVzdHM6Z3MscmVtZW1iZXI6ZHV9LCEkfHwhRy5pbmNsdWRlcygiQCIpKXtBKCQ/J1RoYXQgZW1haWwgaGFzIG5vICJAIiBpbiBpdCAtIHRoZSBjb25maXJtYXRpb24gbmVlZHMgYW4gYWRkcmVzcyBpdCBjYW4gcmVhY2guJzoiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCDigJQgdGhlIGJvb2tpbmcgaXMgZm91bmQgYWdhaW4gYnkgdGhlIGVtYWlsIGFuZCBpdHMgY29kZS4iKTtyZXR1cm59aWYoayYmdGUucmVwbGFjZSgvXEQvZywiIikubGVuZ3RoPDYpe0EoIlRoZSBib29raW5nIG5lZWRzIGEgcGhvbmUgbnVtYmVyLCBzbyB0aGUgaG90ZWwgY2FuIHJlYWNoIHlvdS4iKTtyZXR1cm59cSgicmVxdWVzdEJvb2tpbmciLHtuYW1lOiQsZW1haWw6RywuLi5rP3twaG9uZTp0ZX06e30sLi4uUmUmJlVlP3tncm91cDpVZX06e30sLi4uT2U/e25vdGVzOk9lfTp7fSwuLi5HdD97YXJyaXZpbmdBdDpHdH06e30sLi4uZ3MubGVuZ3RoP3tyZXF1ZXN0czpnc306e30sLi4uZHU/e3JlbWVtYmVyUmVxdWVzdHM6ITB9Ont9fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBhc2sgZm9yIHRob3NlIHJvb21zLiIpKTtyZXR1cm59aWYoST09PSJib29raW5ncyIpe3EoImxpc3RCb29raW5ncyIse30pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB5b3VyIGJvb2tpbmdzLiIpKTtyZXR1cm59aWYoST09PSJ0cmlwIil7cSgidmlld1RyaXAiLHt9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBkdD10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpO2lmKGR0KXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIiksJD10LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpO2smJiQmJihULmNoZWNrSW49ayxULmNoZWNrT3V0PSQpLHEoImdldEhvdGVsIix7aG90ZWw6ZHQsLi4ueG8oKSwuLi5ULmNoZWNrSW4mJlk+MT97cm9vbXM6WX06e319KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhhdCBob3RlbC4iKSl9fSk7Y29uc3Qgbm09KCk9PntpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIikpcmV0dXJuO2NvbnN0IGU9dD0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk/LnZhbHVlPz8iIjt4ZT17bmFtZTplKCJnbmFtZSIpLGVtYWlsOmUoImdtYWlsIiksLi4uY3UoKS5waG9uZVJlcXVpcmVkP3twaG9uZTplKCJncGhvbmUiKX06e30sbm90ZXM6ZSgiZ25vdGUiKSxhcnJpdmluZ0F0OmUoImd0aW1lIikscmVxdWVzdHM6Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKHQ9PnQuZGF0YXNldC5hc2s/PyIiKSxyZW1lbWJlcjohIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmVtZW1iZXIiKT8uY2hlY2tlZH19O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixlPT57Y29uc3QgdD1lLnRhcmdldD8uaWQ/PyIiO1siZ25hbWUiLCJnbWFpbCIsImdwaG9uZSIsImdub3RlIiwiZ3RpbWUiLCJncmVtZW1iZXIiXS5pbmNsdWRlcyh0KSYmbm0oKX0pO2NvbnN0IG9sPSgpPT57Zm9yKDtoZS5hdCgtMSk/LnBheWxvYWQ/LnZpZXc9PT0ibWVtYmVyIiYmIVg7KWhlPWhlLnNsaWNlKDAsLTEpO2NvbnN0IGU9aGUuYXQoLTEpO2lmKCFlfHxKdCl7TWYoKTtyZXR1cm59aGU9aGUuc2xpY2UoMCwtMSksRG8rPTEsbHUoKSxybSgpO2NvbnN0IHQ9ZS52ZXJzaW9uPT09TW8/dm9pZCAwOkpfKGUucGF5bG9hZCk7dD8oTT1lLnBheWxvYWQscSh0LmtleSx0LmFyZ3Mse3B1c2g6ITF9KS5jYXRjaCgoKT0+a2UoZS5wYXlsb2FkLCEwKSkuZmluYWxseSh0dCkpOihrZShlLnBheWxvYWQsITApLHR0KCkpfSxvbT0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndoZXJlIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWUpe0EoIldoZXJlIHRvPyBBIGNpdHksIGEgY291bnRyeSBvciBhIGhvdGVsLiIpO3JldHVybn1CcygpO2NvbnN0IG49KE0/LnJlZ2lvbnM/P1tdKS5mbGF0TWFwKG89PihvLmNvdW50cmllcz8/W10pLmZsYXRNYXAocj0+W3IubmFtZSwuLi4oci5jaXRpZXM/P1tdKS5tYXAocz0+cy5uYW1lKV0pKS5maW5kKG89Pm8udG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKSk7cSgibGlzdEhvdGVscyIsey4uLm4/e2NpdHk6bn06e3F1ZXJ5OmV9LC4uLm10KCl9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IHNlYXJjaCBqdXN0IG5vdy4iKSl9LEJzPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGNvIik7ZT8udmFsdWUmJihULmNoZWNrSW49ZS52YWx1ZSksdD8udmFsdWUmJihULmNoZWNrT3V0PXQudmFsdWUpLGU/LnZhbHVlJiYocHM9ITApfTtsZXQgVXMsYnQ9ITE7Y29uc3Qgcm09KCk9PntjbGVhclRpbWVvdXQoVXMpLGJ0PSExfSxIaz1lPT5lPy52aWV3PT09ImhvdGVscyJ8fGU/LnZpZXc9PT0ibm8taG90ZWxzIiYmISFlPy5hc2ssSG89KGU9MCk9PntjbGVhclRpbWVvdXQoVXMpLGJ0PSEwLFVzPXNldFRpbWVvdXQoKCk9PntpZighSGsoTSkpe2J0PSExO3JldHVybn1pZihKdCl7SG8oMTUwKTtyZXR1cm59YnQ9ITEscSgibGlzdEhvdGVscyIsey4uLmNrKE0/LmFzayksLi4ubXQoKX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgcHJpY2UgdGhvc2UgbmlnaHRzLiIpKX0sZSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGU9PntpZihlLnRhcmdldD8uaWQ9PT0id2hlcmUiJiZlLmtleT09PSJFbnRlciImJiFlLmlzQ29tcG9zaW5nKXtlLnByZXZlbnREZWZhdWx0KCksb20oKTtyZXR1cm59Y29uc3QgdD1lLnRhcmdldDshdHx8dC5nZXRBdHRyaWJ1dGUoInJvbGUiKSE9PSJidXR0b24ifHxlLmtleSE9PSJFbnRlciImJmUua2V5IT09IiAifHwoZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xpY2soKSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGU9Pntjb25zdCB0PWUudGFyZ2V0O3Q/LnR5cGU9PT0iZGF0ZSImJihwcz0hMCk7Y29uc3Qgbz17ZGNpOlsiZGNpIiwiZGNvIl0sZGNvOlsiZGNpIiwiZGNvIl0sbGNpOlsibGNpIiwibGNvIl0sbGNvOlsibGNpIiwibGNvIl19W3Q/LmlkPz8iIl07aWYobyl7Y29uc3QgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzBdKSxsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9bMV0pO2lmKCFpfHwhbClyZXR1cm47aWYodC5pZD09PW9bMF0mJmkudmFsdWUpe2NvbnN0IHU9V2UoaS52YWx1ZSwxKTtsLm1pbj11LCghbC52YWx1ZXx8bC52YWx1ZTw9aS52YWx1ZSkmJihsLnZhbHVlPXUpfVQuY2hlY2tJbj1pLnZhbHVlfHxULmNoZWNrSW4sVC5jaGVja091dD1sLnZhbHVlfHxULmNoZWNrT3V0LG9bMF09PT0ibGNpIiYmSG8oMzAwKTtyZXR1cm59aWYodD8uaWQhPT0iY2kiJiZ0Py5pZCE9PSJjbyIpcmV0dXJuO2NvbnN0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIikscz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKTtpZighcnx8IXMpcmV0dXJuO2lmKHQuaWQ9PT0iY2kiJiZyLnZhbHVlKXtjb25zdCBpPVdlKHIudmFsdWUsMSk7cy5taW49aSwoIXMudmFsdWV8fHMudmFsdWU8PXIudmFsdWUpJiYocy52YWx1ZT1pKX1ULmNoZWNrSW49ci52YWx1ZXx8VC5jaGVja0luLFQuY2hlY2tPdXQ9cy52YWx1ZXx8VC5jaGVja091dDtjb25zdCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTthJiYoYS50ZXh0Q29udGVudD1ocygpKSxtcygpfSk7Y29uc3Qgc209KGUsdCk9Pnt0cnl7cWYodCk7Y29uc3Qgbj1lP0pTT04uc3RyaW5naWZ5KGUpOiIiO2lmKG4mJm49PT1GZiYmSlNPTi5zdHJpbmdpZnkoTSk9PT1WZilyZXR1cm47ZT8uc3RheT8uY2hlY2tJbiYmKHBzPSEwKSxoZT1bXSxEbys9MSxsdSgpLHJtKCksUGU9UWYsa2UoZSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcigiW2NhcmRdIHJlbmRlciBmYWlsZWQiLG4pLHBlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+VGhpcyBjYXJkIGNvdWxkIG5vdCBiZSBkcmF3bi4gQXNrIGFnYWluIGluIHRoZSBjaGF0LjwvZGl2Pid9fTtFZS5vbnRvb2xyZXN1bHQ9ZT0+c20oZT8uc3RydWN0dXJlZENvbnRlbnQsZT8uX21ldGEpO2NvbnN0IGltPWU9PntBcnJheS5pc0FycmF5KGU/LmF2YWlsYWJsZURpc3BsYXlNb2RlcykmJihlbT1lLmF2YWlsYWJsZURpc3BsYXlNb2Rlcy5tYXAoU3RyaW5nKSksdHlwZW9mIGU/LmRpc3BsYXlNb2RlPT0ic3RyaW5nIiYmZS5kaXNwbGF5TW9kZSE9PWRuJiYoZG49ZS5kaXNwbGF5TW9kZSxNPy52aWV3PT09ImhvdGVscyImJmtlKE0pKX07bGV0IHJsO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57Y2xlYXJUaW1lb3V0KHJsKSxybD1zZXRUaW1lb3V0KCgpPT57TT8udmlldyE9PSJob3RlbHMifHxwbigpfHwoYXU9aXUoKSxmcygpIT09Qm8mJmtlKE0pKX0sMTUwKX0pO0VlLm9uaG9zdGNvbnRleHRjaGFuZ2VkPWU9PntPZihlLE5mKSxpbShlKX07RWUuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPUVlLmdldEhvc3RDb250ZXh0KCk7T2YoZSxOZiksaW0oZSk7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZzbSh0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57cGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH0uY2stcGFnZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHggMTJweDttYXJnaW4tdG9wOjE0cHh9LmNrLXBhZ2VyLWJ0bntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2dhcDo0cHg7bWluLXdpZHRoOjExMnB4O2hlaWdodDozNnB4O3BhZGRpbmc6MCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjEycyxib3JkZXItY29sb3IgLjEycyxjb2xvciAuMTJzfS5jay1wYWdlci1idG4gc3ZnLC5jay1wYWdlci1hbGwgc3Zne3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7ZmxleDpub25lfS5jay1wYWdlci1idG46aG92ZXI6bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS5jay1wYWdlci1idG46YWN0aXZlOm5vdCg6ZGlzYWJsZWQpe3RyYW5zZm9ybTp0cmFuc2xhdGVZKC41cHgpfS5jay1wYWdlci1idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7b3BhY2l0eTouNjtjdXJzb3I6ZGVmYXVsdH0uY2stcGFnZXItbnttaW4td2lkdGg6OGNoO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNrLXBhZ2VyLWFsbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7d2lkdGg6Zml0LWNvbnRlbnQ7aGVpZ2h0OjMycHg7bWFyZ2luOjZweCBhdXRvIDA7cGFkZGluZzowIDEycHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo1MDA7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xMnMsY29sb3IgLjEyc30uY2stcGFnZXItYWxsOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmcpfS5jay1wYWdlci1hbGw6Zmlyc3QtY2hpbGQsLmdyaWQrLmNrLXBhZ2VyLWFsbHttYXJnaW4tdG9wOjE0cHh9YnV0dG9uOmZvY3VzLXZpc2libGUsYTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLXJpbmcpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEobWF4LXdpZHRoOjQzMHB4KXsuY2FyZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LmhlYWR7cGFkZGluZzoxMnB4IDE0cHggMH0jY29udGVudHtwYWRkaW5nOjhweCAxNHB4IDE0cHh9LmJ1eXttaW4taGVpZ2h0OjQ4cHg7Zm9udC1zaXplOjE1cHh9Lmdob3N0e21pbi1oZWlnaHQ6NDRweDtmb250LXNpemU6MTMuNXB4fS5jay1wYWdlci1idG57bWluLXdpZHRoOjEwNHB4O2hlaWdodDo0MHB4fS5jay1wYWdlci1hbGx7aGVpZ2h0OjM2cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVsLC5zdGF5IC5ndWVzdHN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS5mbGV4LWRhdGVze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjJweDtzY3JvbGxiYXItd2lkdGg6dGhpbjstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uZmR7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHg7bWluLXdpZHRoOjc4cHg7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udDppbmhlcml0O3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcn0uZmQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmZkLWRheXtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW07Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6bm93cmFwfS5mZC1wcmljZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjY1MDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5mZC5vbntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtjdXJzb3I6ZGVmYXVsdH0uZmQub24gLmZkLWRheXtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO29wYWNpdHk6Ljg1fS5mZC5iZXN0e2JvcmRlci1jb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5mZC5iZXN0IC5mZC1wcmljZSwuZmQuYmVzdCAuZmQtZGF5e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmZkLm91dCAuZmQtcHJpY2V7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC13ZWlnaHQ6NTAwfS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5sZWdze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ubGVne2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6OXB4IDExcHh9LmxlZy53YXN7b3BhY2l0eTouNzJ9LmxlZy53YXMgLmxlZ3Z7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ubGVna3tmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5sZWd2e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY0MDttYXJnaW4tdG9wOjJweH0ubGVnbXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6MnB4fS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS53YXJubm90ZXtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjlweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS50aWxlLm92ZXJ7b3BhY2l0eTouODJ9LmFza2VkLWxpbmV7Zm9udC1zdHlsZTppdGFsaWN9LmFza2Vke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5hc2tlZCBie2ZvbnQtd2VpZ2h0OjcyMDtjb2xvcjp2YXIoLS1mZyl9LmFza2VkLmZsYWd7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0td2Fybil9LmFza2VkLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX0uYXNrc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmFza3MtdHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwLmFza3tjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweH0uY2hpcC5hc2tbYXJpYS1wcmVzc2VkPXRydWVde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC5mb3Vye2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNTZweCw3MnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDk2cHgsMWZyKSl9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MTtncmlkLXJvdzoxIC8gc3BhbiB2YXIoLS1oZWFkLXJvd3MsIDUpfS5jbXAtaGVhZHtkaXNwbGF5OmdyaWQ7Z3JpZC1yb3c6MSAvIHNwYW4gdmFyKC0taGVhZC1yb3dzLCA1KTtncmlkLXRlbXBsYXRlLXJvd3M6c3ViZ3JpZDtyb3ctZ2FwOjZweDthbGlnbi1jb250ZW50OnN0YXJ0O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjttaW4td2lkdGg6MDtwYWRkaW5nLWJvdHRvbToxMnB4fS5jbXAtaGVhZD4uY29sLW5hbWUsLmNtcC1oZWFkPi5jb2wtcHJpY2UsLmNtcC1oZWFkPi53aHksLmNtcC1oZWFkPi5wY3ttYXJnaW4taW5saW5lOjExcHh9LmNtcC1oZWFkPi5jb2wtbmFtZXttYXJnaW4tdG9wOjRweH0ud2h5Lm5vbmV7Ym9yZGVyOjA7cGFkZGluZzowfS5waWNrbWFyay5ub25le3Zpc2liaWxpdHk6aGlkZGVufS5jbXAgLmt7bWFyZ2luLXRvcDowfS5jbXAtaGVhZC5waWNre2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjY2VudCl9LmNtcC1oZWFkIC50LXNob3R7YXNwZWN0LXJhdGlvOjE2IC8gOTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJX0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtZ3JvdXB7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcC5wbGFjZS5ncm91cCBpbWd7aGVpZ2h0OjIwcHg7d2lkdGg6YXV0bztib3JkZXItcmFkaXVzOjVweDttYXJnaW4taW5saW5lLWVuZDo3cHg7dmVydGljYWwtYWxpZ246LTVweH1bZGF0YS10aGVtZT1kYXJrXSAuaGVhZCAuYnJhbmR7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MnB4IDVweH0uY29sLXByaWNle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbC1wcmljZSBzbWFsbHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNvbC1wcmljZSBzbWFsbC5zdWJ7ZGlzcGxheTpibG9ja30ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubW9tZW50c3tsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjJweCAwIDA7cGFkZGluZzowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweH0ubW9tZW50cyBsaXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjg0cHggMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lm1vbWVudHMgLndoZW57b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5tb21lbnRzIC53aGF0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNH0ubW9tZW50cyAud2hhdCBie2ZvbnQtd2VpZ2h0OjYyMH0ubW9tZW50cyAud2hhdCBzbWFsbHtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLXN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczo5NnB4IDFmcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOnBvaW50ZXJ9LnBsYW4tc3RheSAucHMtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6ODRweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5wbGFuLXN0YXkgLnBzLXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5wbGFuLXN0YXkgLnBzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDozcHg7cGFkZGluZzo5cHggMTBweCA5cHggMDttaW4td2lkdGg6MH0ucGxhbi1zdGF5IC5uYW1le2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LnBsYW4tc3RheSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1zdGF5IC5wcy1wcmljZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wbGFuLW5pZ2h0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItdG9wOjFweCBkYXNoZWQgdmFyKC0tbGluZSk7cGFkZGluZy10b3A6NnB4O2N1cnNvcjpwb2ludGVyfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19LnN1Z2dlc3R7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWFyZ2luLXRvcDoxNHB4fS5zdWdnZXN0IC5jaGlwe2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweCAxMXB4O2NvbG9yOnZhcigtLWZnKX0uc3VnZ2VzdCAuY2hpcDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uc3VnZ2VzdCAuY2hpcDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb3JtIGxhYmVsLnJlbWVtYmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7Zm9udC13ZWlnaHQ6NDAwO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzowfS5mb3JtIGxhYmVsLnJlbWVtYmVyIGlucHV0e21hcmdpbjoycHggMCAwfS5wbGFjZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXAucGxhY2V7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4IDEwcHg7Y29sb3I6dmFyKC0tZmcpfS5jaGlwLnBsYWNlIHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY2hpcC5wbGFjZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uY2hpcC5wbGFjZS50YWJ7Zm9udC13ZWlnaHQ6NjAwfS5jaGlwLnBsYWNlLnRhYlthcmlhLWV4cGFuZGVkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmNoaXAucGxhY2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uc3VnZ2VzdCAuY2hpcC5zYXkgc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZpbmRlcntkaXNwbGF5OmZsZXg7Z2FwOjhweH0uZmluZGVyIGlucHV0e2ZsZXg6MTttaW4td2lkdGg6MDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo5cHggMTJweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyl9LmZpbmRlciBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5yZWdpb257ZGlzcGxheTpncmlkO2dhcDoxMHB4fS5jb3VudHJ5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi10b3A6NnB4fS5jb3VudHJ5bmFtZSBzbWFsbHtmb250LXdlaWdodDo1MDA7bGV0dGVyLXNwYWNpbmc6MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3R7ZGlzcGxheTpncmlkO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZGVzdDpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MH0uZGVzdC1jb3VudHJ5e2p1c3RpZnktc2VsZjpzdGFydDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246bGVmdH0uZGVzdC1jb3VudHJ5IHNtYWxse2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZGVzdC1jb3VudHJ5IC5ue2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGVzdC1jb3VudHJ5OmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmRlc3QtY291bnRyeTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fS5maW5kZXIgLmdve2ZsZXg6bm9uZTtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtc2l6ZToxM3B4fS5zb3J0cy1re2FsaWduLXNlbGY6Y2VudGVyO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLXJpZ2h0OjJweH0uY2hpcC5zb3J0W2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0uc2VhcmNoe2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc2VhcmNoIC5zdGF5e3BhZGRpbmc6MDtiYWNrZ3JvdW5kOm5vbmV9LnNlYXJjaCAud2hlcmV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnNlYXJjaCAud2hlcmUgaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxMXB4fS5zZWFyY2ggLndoZXJlIGlucHV0OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoxcHh9LnNlYXJjaCAuc3RheSAuZ297cGFkZGluZzo5cHggMTRweDtmb250LXNpemU6MTNweH0udC10YWdze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4O21hcmdpbi10b3A6NHB4fS50LWZyb20udC1ub25le2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweH0uc3RheSAuZ28ucXVpZXR7cGFkZGluZzo4cHggMTJweDtmb250LXNpemU6MTIuNXB4fS5maWx0ZXItcGFuZWx7ZGlzcGxheTpncmlkO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5mZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS50LWZyb20gLnQtc3Vie2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxcHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV0gc21hbGx7Y29sb3I6aW5oZXJpdH0uY2hpcC50b29se2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC50b29sW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
5
+ export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgdW09KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLGxtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxodT17fSxkbT1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGE9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKGY9PlByb21pc2UucmVzb2x2ZShmKS50aGVuKGc9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmd9KSxnPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpnfSkpKSl9O2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9bD8ubm9uY2V8fGw/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWEobi5tYXAoZD0+e2lmKGQ9bG0oZCxvKSxkIGluIGh1KXJldHVybjtodVtkXT0hMDtjb25zdCBmPWQuZW5kc1dpdGgoIi5jc3MiKSxnPWY/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgJD1pLmxlbmd0aC0xOyQ+PTA7JC0tKXtjb25zdCBTPWlbJF07aWYoUy5ocmVmPT09ZCYmKCFmfHxTLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2d9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPWY/InN0eWxlc2hlZXQiOnVtLGZ8fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLHUmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxmKXJldHVybiBuZXcgUHJvbWlzZSgoJCxTKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsJCksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PlMobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhhKXtjb25zdCBpPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoaS5wYXlsb2FkPWEsd2luZG93LmRpc3BhdGNoRXZlbnQoaSksIWkuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBhfXJldHVybiByLnRoZW4oYT0+e2Zvcihjb25zdCBpIG9mIGF8fFtdKWkuc3RhdHVzPT09InJlamVjdGVkIiYmcyhpLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBwbShlKXtyZXR1cm4gZX1mdW5jdGlvbiBobShlKXtyZXR1cm4gZX1mdW5jdGlvbiBGbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIGZtKGUpe31mdW5jdGlvbiBtbShlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIGdtKGUpe31mdW5jdGlvbiB6cyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBUcyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+VnMobikpLmpvaW4odCl9ZnVuY3Rpb24gUG8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIGJte2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gaG4oZSl7cmV0dXJuIG5ldyBibShlKX1mdW5jdGlvbiBIcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBGZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gYWwoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgZnU9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gY2woZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1mdSlyZXR1cm4gbz09PXZvaWQgMCYmKG89ZnUsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHZtKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gdXQoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBWbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBOZShlKXtyZXR1cm4gVm8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gdWwoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiB1dCh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBsbChlLHQsbil7dCBpbiBlP3V0KGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gb3QoZSx0LG4sbyl7Y29uc3Qgcj1OZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTthLmVudW1lcmFibGUmJihhLmdldD91bChlLHMsKCk9Pntjb25zdCBpPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhpLHMpOml9KTpsbChlLHMsbz9vKGEudmFsdWUscyk6YS52YWx1ZSkpfX1mdW5jdGlvbiB5bShlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/dWwoZSxuLCgpPT50W25dKTpsbChlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiB1ZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBfbShlKXtyZXR1cm4gdWUoZS5fem9kLmRlZil9ZnVuY3Rpb24ga20oZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gJG0oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIHdtKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gZGwoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIHBsKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgRnM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24geXQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IGhsPWhuKCgpPT57aWYoZGUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gSmUoZSl7aWYoeXQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHl0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gSm8oZSl7cmV0dXJuIEplKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gU20oZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3Qgem09ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LENvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksZmw9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBRKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBUbShlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBWcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBtbChlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IGdsPXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxibD17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gdmwoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gb3QocyxlLEtvKGUsdCkpLFEoZSx1ZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBLbyhlLHQpe2NvbnN0IG49TmUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiB5bChlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoS28oZSx0KSksYT17fTtyZXR1cm4gb3QoYSxlLFJlZmxlY3Qub3duS2V5cyhOZShlKSkuZmlsdGVyKGk9PiFzLmhhcyhpKSkpLFEoZSx1ZShuLHtzaGFwZTphLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBfbChlLHQpe2lmKCFKZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1OZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gUShlLHVlKGUuX3pvZC5kZWYse3NoYXBlOmtsKGUsdCl9KSl9ZnVuY3Rpb24ga2woZSx0KXtjb25zdCBuPXt9O3JldHVybiBvdChuLGUsUmVmbGVjdC5vd25LZXlzKE5lKGUpKSkseW0obix0KSxufWZ1bmN0aW9uICRsKGUsdCl7aWYoIUplKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBRKGUsdWUoZS5fem9kLmRlZix7c2hhcGU6a2woZSx0KX0pKX1mdW5jdGlvbiB3bChlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtvdChuLGUsUmVmbGVjdC5vd25LZXlzKE5lKGUpKSksb3Qobix0LFJlZmxlY3Qub3duS2V5cyhOZSh0KSkpO2NvbnN0IG89dWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBRKGUsbyl9ZnVuY3Rpb24gSXMoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGk9bj9uZXcgU2V0KEtvKHQsbikpOnZvaWQgMCxsPXt9O3JldHVybiBvdChsLHQsUmVmbGVjdC5vd25LZXlzKE5lKHQpKSxlJiYoKHUsZCk9PmkmJiFpLmhhcyhkKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpsLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBTbChlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoS28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIG90KHIsdCxSZWZsZWN0Lm93bktleXMoTmUodCkpLChzLGEpPT5vJiYhby5oYXMoYSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLFEodCx1ZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGZlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gemwoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiAkZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIGh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIHhzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiB6ZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsYT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOmh0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9odChzPy4oZSkpPz9odCh0Py5lcnJvcj8uKGUpKT8/aHQobi5jdXN0b21FcnJvcj8uKGUpKT8/aHQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGk9e307Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LmtleXMoZSkpbD09PSJpbnN0Inx8bD09PSJzY2hlbWEifHxsPT09ImNvbnRpbnVlInx8bD09PSJpbnB1dCJ8fGw9PT0iX19wcm90b19fInx8KGlbbF09ZVtsXSk7cmV0dXJuIGkucGF0aD8/KGkucGF0aD1bXSksaS5tZXNzYWdlPWEsdD8ucmVwb3J0SW5wdXQmJihpLmlucHV0PWUuaW5wdXQpLGl9ZnVuY3Rpb24gV28oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IEltPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIEdvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIUltLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIFRsKGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gX3QoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiB4bShlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gSWwoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIHhsKGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gUG0oZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gSWwodCtuKX1mdW5jdGlvbiBDbShlKXtyZXR1cm4geGwoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIEVtKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBBbShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBPbXtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIFBsKGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6Um0oZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBqZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBZbyhlLHQsbil7cmV0dXJuIGplKGUsdCxuLCExKX1mdW5jdGlvbiBmbihlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gamUodGhpcyxuLG8odGhpcykpfSxzZXQocil7amUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIFJtKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpqZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe2plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBObShlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGJzLExlPSExO2NvbnN0IFptPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7TGU9ITB9fTtmdW5jdGlvbiBSKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmYnMhPT1lLl96b2Qpe2JzPXZvaWQgMDtyZXR1cm59YnM9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LFptKTtjb25zdCByPUxlO0xlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIExlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksTGU9TGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxMZT1MZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gQ2woZSx0LG4sbyl7Y29uc3Qgcj1ObShlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IEVsPSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gSnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtFbF09ITAsdH1jb25zdCBLcz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6YmwsQ09OU1RBTlRfQ0FUQ0g6RWwsQ2xhc3M6T20sTlVNQkVSX0ZPUk1BVF9SQU5HRVM6Z2wsYWJvcnRlZDpmZSxhbGxvd3NFdmFsOmhsLGFzc2VydDpnbSxhc3NlcnRFcXVhbDpwbSxhc3NlcnRJczpmbSxhc3NlcnROZXZlcjptbSxhc3NlcnROb3RFcXVhbDpobSxhc3NpZ25Qcm9wOnV0LGF0dGFjaFNjaGVtYTp4cyxiYXNlNjRUb1VpbnQ4QXJyYXk6SWwsYmFzZTY0dXJsVG9VaW50OEFycmF5OlBtLGNhY2hlZDpobixjYXB0dXJlU3RhY2tUcmFjZTpGcyxjbGVhbkVudW06eG0sY2xlYW5SZWdleDpGZSxjbG9uZTpRLGNsb25lRGVmOl9tLGNvZGVQb2ludExlbmd0aDpHbyxjb25zdGFudENhdGNoOkpzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6VG0sZGVmaW5lTGF6eTpjbCxkZWZpbmVMYXp5SW50ZXJuYWw6UixkZXJpdmVkOmZuLGVzYzpkbCxlc2NhcGVSZWdleDpaZSxleHBsaWNpdGx5QWJvcnRlZDp6bCxleHRlbmQ6X2wsZmluYWxpemVJc3N1ZTp6ZSxmbG9hdFNhZmVSZW1haW5kZXI6YWwsZ2V0RWxlbWVudEF0UGF0aDprbSxnZXRFbnVtVmFsdWVzOnpzLGdldExlbmd0aGFibGVPcmlnaW46UW8sZ2V0UGFyc2VkVHlwZTp6bSxnZXRTaXphYmxlT3JpZ2luOldvLGhleFRvVWludDhBcnJheTpFbSxoaWRlOllvLGluc3RhbGxMYXp5UHJvcDpDbCxpc09iamVjdDp5dCxpc1BsYWluT2JqZWN0OkplLGlzc3VlOl90LGpvaW5WYWx1ZXM6VHMsanNvblN0cmluZ2lmeVJlcGxhY2VyOlBvLG1lbWJlcnM6UGwsbWVyZ2U6d2wsbWVyZ2VEZWZzOnVlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6SHMsbnVtS2V5czpTbSxvYmplY3RDbG9uZTp2bSxvbWl0OnlsLG9wdGlvbmFsS2V5czptbCxvd246amUscGFyc2VkVHlwZTpUbCxwYXJ0aWFsOklzLHBpY2s6dmwscHJlZml4SXNzdWVzOiRlLHByaW1pdGl2ZVR5cGVzOmZsLHByb21pc2VBbGxPYmplY3Q6JG0scHJvcGVydHlLZXlUeXBlczpDbyxyYW5kb21TdHJpbmc6d20scmF3U2hhcGU6Vm8scmVxdWlyZWQ6U2wsc2FmZUV4dGVuZDokbCxzaGFsbG93Q2xvbmU6Sm8sc2x1Z2lmeTpwbCxzdHJpbmdpZnlQcmltaXRpdmU6VnMsdG9ab2Q6Rm8sdWludDhBcnJheVRvQmFzZTY0OnhsLHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpDbSx1aW50OEFycmF5VG9IZXg6QW0sdW53cmFwTWVzc2FnZTpodH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbXU7Y29uc3QgV3M9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLHZzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IGd1PSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIGptKGUpe2NvbnN0IHQ9Z3U7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBndT1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGcpe3RoaXMuZGVmPWcsdGhpcy5jb25zdHI9Zix0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgYT1uLGk9YSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gbChnLHYpe2lmKGcuX3pvZCl7aWYoZy5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7dnMudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShnLCJfem9kIix2cyl9ZmluYWxseXt2cy52YWx1ZT12b2lkIDB9fWlmKGcuX3pvZC50cmFpdHMuYWRkKGUpLHQoZyx2KSxpKXtjb25zdCAkPU9iamVjdC5nZXRQcm90b3R5cGVPZihnKSxTPWcuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBqPSQ7Zm9yKDtqJiZqIT09Uzspaj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yoaik7Y29uc3QgTj1qPz8kO2kuaGFzKE4pfHwoaS5hZGQoTiksUGwoTixhKSl9Y29uc3QgXz1mLnByb3RvdHlwZTtmb3IoY29uc3QgJCBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLCQpJiYoJCBpbiBnfHwoZ1skXT1fWyRdLmJpbmQoZykpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBmKGcpe2NvbnN0IHY9bz8uUGFyZW50P2ptKGQpOnRoaXM7bCh2LGcpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCBTIG9mIF8pUygpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3QgJD1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gJCYmJCh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwiaW5pdCIse3ZhbHVlOmx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmc9Pm8/LlBhcmVudCYmZyBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmc/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIm5hbWUiLHt2YWx1ZTplfSksZn1jb25zdCBHcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFZlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFhvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShtdT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhtdS5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGRlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIG9lKGUpe3JldHVybiBlJiZPYmplY3QuYXNzaWduKGRlLGUpLGRlfWZ1bmN0aW9uIE1tKCl7Y29uc3QgZT10aGlzLl96b2Q7cmV0dXJuIGUubWVzc2FnZT8/KGUubWVzc2FnZT1KU09OLnN0cmluZ2lmeShlLmRlZixQbywyKSksZS5tZXNzYWdlfWZ1bmN0aW9uIHFtKGUpe3RoaXMuX3pvZC5tZXNzYWdlPWV9Y29uc3QgRG09e2dldDpNbSxzZXQ6cW0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHlzPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX0sYnU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSksQWw9KGUsdCk9PntlLm5hbWU9IiRab2RFcnJvciIseXMudmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNzdWVzIix5cykseXMudmFsdWU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtZXNzYWdlIixEbSk7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7YnUuaGFzKG4pfHwoYnUuYWRkKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89KCk9PnRoaXMubWVzc2FnZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRvU3RyaW5nIix7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KSl9LE9sPXAoIiRab2RFcnJvciIsQWwpLHllPXAoIiRab2RFcnJvciIsQWwsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KTtmdW5jdGlvbiBMbShlLHQsbil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfHwodD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4oKSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOmVbdF09bigpKSxlW3RdfWZ1bmN0aW9uIGVyKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e30sbz1bXTtmb3IoY29uc3QgciBvZiBlLmlzc3VlcylyLnBhdGgubGVuZ3RoPjA/TG0obixyLnBhdGhbMF0sKCk9PltdKS5wdXNoKHQocikpOm8ucHVzaCh0KHIpKTtyZXR1cm57Zm9ybUVycm9yczpvLGZpZWxkRXJyb3JzOm59fWZ1bmN0aW9uIHRyKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e19lcnJvcnM6W119LG89KHIscz1bXSk9Pntmb3IoY29uc3QgYSBvZiByLmlzc3VlcylpZihhLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmEuZXJyb3JzLmxlbmd0aClhLmVycm9ycy5tYXAoaT0+byh7aXNzdWVzOml9LFsuLi5zLC4uLmEucGF0aF0pKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNlIGlmKGEuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZXtjb25zdCBpPVsuLi5zLC4uLmEucGF0aF07aWYoaS5sZW5ndGg9PT0wKW4uX2Vycm9ycy5wdXNoKHQoYSkpO2Vsc2V7bGV0IGw9bix1PTA7Zm9yKDt1PGkubGVuZ3RoOyl7Y29uc3QgZD1pW3VdLGY9dT09PWkubGVuZ3RoLTE7aWYoZD09PSJfZXJyb3JzIil7ZiYmbC5fZXJyb3JzLnB1c2godChhKSksdSsrO2NvbnRpbnVlfU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxkLHt2YWx1ZTp7X2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtjb25zdCBnPWxbZF07ZiYmZy5fZXJyb3JzLnB1c2godChhKSksbD1nLHUrK319fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBRcyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtlcnJvcnM6W119LG89KHIscz1bXSk9Pnt2YXIgYTtmb3IoY29uc3QgaSBvZiByLmlzc3VlcylpZihpLmNvZGU9PT0iaW52YWxpZF91bmlvbiImJmkuZXJyb3JzLmxlbmd0aClpLmVycm9ycy5tYXAobD0+byh7aXNzdWVzOmx9LFsuLi5zLC4uLmkucGF0aF0pKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2tleSIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNlIGlmKGkuY29kZT09PSJpbnZhbGlkX2VsZW1lbnQiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZXtjb25zdCBsPVsuLi5zLC4uLmkucGF0aF07aWYobC5sZW5ndGg9PT0wKXtuLmVycm9ycy5wdXNoKHQoaSkpO2NvbnRpbnVlfWxldCB1PW4sZD0wO2Zvcig7ZDxsLmxlbmd0aDspe2NvbnN0IGY9bFtkXSxnPWQ9PT1sLmxlbmd0aC0xO3R5cGVvZiBmPT0ic3RyaW5nIj8odS5wcm9wZXJ0aWVzPz8odS5wcm9wZXJ0aWVzPXt9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodS5wcm9wZXJ0aWVzLGYpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodS5wcm9wZXJ0aWVzLGYse3ZhbHVlOntlcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdT11LnByb3BlcnRpZXNbZl0pOih1Lml0ZW1zPz8odS5pdGVtcz1bXSksKGE9dS5pdGVtcylbZl0/PyhhW2ZdPXtlcnJvcnM6W119KSx1PXUuaXRlbXNbZl0pLGcmJnUuZXJyb3JzLnB1c2godChpKSksZCsrfX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gUmwoZSl7Y29uc3QgdD1bXSxuPWUubWFwKG89PnR5cGVvZiBvPT0ib2JqZWN0Ij9vLmtleTpvKTtmb3IoY29uc3QgbyBvZiBuKXR5cGVvZiBvPT0ibnVtYmVyIj90LnB1c2goYFske299XWApOnR5cGVvZiBvPT0ic3ltYm9sIj90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhvKSl9XWApOi9bXlx3JF0vLnRlc3Qobyk/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShvKX1dYCk6KHQubGVuZ3RoJiZ0LnB1c2goIi4iKSx0LnB1c2gobykpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIFlzKGUpe2NvbnN0IHQ9W10sbj1bLi4uZS5pc3N1ZXNdLnNvcnQoKG8scik9PihvLnBhdGg/P1tdKS5sZW5ndGgtKHIucGF0aD8/W10pLmxlbmd0aCk7Zm9yKGNvbnN0IG8gb2Ygbil0LnB1c2goYOKcliAke28ubWVzc2FnZX1gKSxvLnBhdGg/Lmxlbmd0aCYmdC5wdXNoKGAgIOKGkiBhdCAke1JsKG8ucGF0aCl9YCk7cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIG5yKGUsdCl7cmV0dXJue2NhbGxlZTp0Py5jYWxsZWU/P2UsRXJyOnQ/LkVycn19Y29uc3QgbW49ZT0+e2NvbnN0IHQ9KG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiExfTp7YXN5bmM6ITF9LGk9bi5fem9kLnJ1bih7dmFsdWU6byxpc3N1ZXM6W119LGEpO2lmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBWZTtpZihpLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IGw9bmV3KHM/LkVycj8/ZSkoaS5pc3N1ZXMubWFwKHU9PnplKHUsYSxvZSgpKSkpO3Rocm93IEZzKGwscz8uY2FsbGVlPz90KSxsfXJldHVybiBpLnZhbHVlfTtyZXR1cm4gdH0sUHM9bW4oeWUpLGduPWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgYT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBpPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxhKTtpZihpIGluc3RhbmNlb2YgUHJvbWlzZSYmKGk9YXdhaXQgaSksaS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBsPW5ldyhzPy5FcnI/P2UpKGkuaXNzdWVzLm1hcCh1PT56ZSh1LGEsb2UoKSkpKTt0aHJvdyBGcyhsLHM/LmNhbGxlZT8/dCksbH1yZXR1cm4gaS52YWx1ZX07cmV0dXJuIHR9LENzPWduKHllKSxibj1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBWZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP1psKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sTmw9Ym4oeWUpO2Z1bmN0aW9uIFpsKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+emUocixuLG9lKCkpKSksdD12b2lkIDAsbj12b2lkIDApLG99LHNldCBlcnJvcihyKXtvPXIsdD12b2lkIDAsbj12b2lkIDB9fX1jb25zdCB2bj1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITB9Onthc3luYzohMH07bGV0IHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZSYmKHM9YXdhaXQgcykscy5pc3N1ZXMubGVuZ3RoP1psKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sQm09dm4oeWUpLFVtPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmludmFsaWQiKSxIbT1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5mYWxsYmFjayIpLG9yPSgoZSx0LG4pPT57Y29uc3Qgbz1lLl96b2QuYmFnLnZhbGlkYXRvcjtpZihvIT09dm9pZCAwKXtpZihvKHQpIT09VW0pcmV0dXJuITA7aWYoby5kZWZpbml0ZT09PSEwJiZuPT09dm9pZCAwKXJldHVybiExfXJldHVybiBGbShlLHQsbil9KTtmdW5jdGlvbiBGbShlLHQsbil7Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiExLGFib3J0RWFybHk6ITB9Onthc3luYzohMSxhYm9ydEVhcmx5OiEwfSxyPWUuX3pvZC5iYWcuZmFsbGJhY2tSdW47bGV0IHM7aWYocj8ob1tIbV09ITAscz1yKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykpOnM9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pLHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBWZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoPT09MH1jb25zdCBycj1hc3luYyhlLHQsbik9Pntjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITAsYWJvcnRFYXJseTohMH06e2FzeW5jOiEwLGFib3J0RWFybHk6ITB9O2xldCByPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2UmJihyPWF3YWl0IHIpLHIuaXNzdWVzLmxlbmd0aD09PTB9LFhzPWU9Pntjb25zdCB0PW1uKGUpLG49KG8scixzLGEpPT57Y29uc3QgaT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiB0KG8scixpLG5yKG4sYSkpfTtyZXR1cm4gbn0sVm09WHMoeWUpLGVpPWU9Pntjb25zdCB0PW1uKGUpLG49KG8scixzLGEpPT50KG8scixzLG5yKG4sYSkpO3JldHVybiBufSxKbT1laSh5ZSksdGk9ZT0+e2NvbnN0IHQ9Z24oZSksbj1hc3luYyhvLHIscyxhKT0+e2NvbnN0IGk9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYXdhaXQgdChvLHIsaSxucihuLGEpKX07cmV0dXJuIG59LEttPXRpKHllKSxuaT1lPT57Y29uc3QgdD1nbihlKSxuPWFzeW5jKG8scixzLGEpPT5hd2FpdCB0KG8scixzLG5yKG4sYSkpO3JldHVybiBufSxXbT1uaSh5ZSksb2k9ZT0+KHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gYm4oZSkodCxuLHIpfSxHbT1vaSh5ZSkscmk9ZT0+KHQsbixvKT0+Ym4oZSkodCxuLG8pLFFtPXJpKHllKSxzaT1lPT5hc3luYyh0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHZuKGUpKHQsbixyKX0sWW09c2koeWUpLGlpPWU9PmFzeW5jKHQsbixvKT0+dm4oZSkodCxuLG8pLFhtPWlpKHllKSxqbD0vXltjQ11bMC05YS16XXs2LH0kLyxNbD0vXlswLTlhLXpdKyQvLHFsPS9eWzAtN11bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI1fSQvLERsPS9eWzAtOWEtdkEtVl17MjB9JC8sTGw9L15bQS1aYS16MC05XXsyN30kLyxCbD0vXlthLXpBLVowLTlfLV17MjF9JC87ZnVuY3Rpb24gVWwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bYS16QS1aMC05Xy1deyR7ZX19JGApfWNvbnN0IEhsPS9eUCg/OihcZCtXKXwoPyEuKlcpKD89XGR8VFxkKShcZCtZKT8oXGQrTSk/KFxkK0QpPyhUKD89XGQpKFxkK0gpPyhcZCtNKT8oXGQrKFsuLF1cZCspP1MpPyk/KSQvLGVnPS9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xkK1kpfCg/OlstK10/XGQrWy4sXVxkK1kkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/Oig/OlstK10/XGQrVyl8KD86Wy0rXT9cZCtbLixdXGQrVyQpKT8oPzooPzpbLStdP1xkK0QpfCg/OlstK10/XGQrWy4sXVxkK0QkKSk/KD86VCg/PVtcZCstXSkoPzooPzpbLStdP1xkK0gpfCg/OlstK10/XGQrWy4sXVxkK0gkKSk/KD86KD86Wy0rXT9cZCtNKXwoPzpbLStdP1xkK1suLF1cZCtNJCkpPyg/OlstK10/XGQrKD86Wy4sXVxkKyk/Uyk/KT8/JC8sRmw9L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KSQvLGt0PWU9PmU/bmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke2V9WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApOi9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLyx0Zz1rdCg0KSxuZz1rdCg2KSxvZz1rdCg3KSxWbD0vXig/OltBLVphLXowLTlfJytcLV0rXC4pKltBLVphLXowLTlfJytcLV0qW0EtWmEtejAtOV8rLV1AKD86W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKlwuKStbQS1aYS16XXsyLH0kLyxyZz0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxzZz0vXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLyxKbD0vXlteXHNAIl17MSw2NH1AW15cc0BdezEsMjU1fSQvdSxpZz1KbCxhZz0vXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLyxjZz0iXig/PVtcXHNcXFNdKltcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtSZWdpb25hbF9JbmRpY2F0b3J9XFx1MjBFM10pW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe0Vtb2ppX0NvbXBvbmVudH1dKyQiO2Z1bmN0aW9uIEtsKCl7cmV0dXJuIG5ldyBSZWdFeHAoY2csInUiKX1jb25zdCBXbD0vXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC8sR2w9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLyxRbD1lPT57Y29uc3QgdD1aZShlPz8iOiIpO3JldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke3R9KXs1fVswLTlBLUZdezJ9JHxeKD86WzAtOWEtZl17Mn0ke3R9KXs1fVswLTlhLWZdezJ9JGApfSxZbD0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC8sWGw9L14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSlcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC8sdWc9L14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC8sbGc9L14oPzpbQS1aYS16MC05Xy1dezR9KSooPzpbQS1aYS16MC05Xy1dezIsM30pPyQvLGVkPS9eKD89LnsxLDI1M31cLj8kKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcLj8kLyx0ZD0vXig/PS57MSwyNTN9JCkoW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XC4pK1thLXpBLVpdezIsNjN9JC8sYWk9L15odHRwcz8kLyxuZD0vXlwrWzEtOV1cZHs2LDE0fSQvLGNpPS9eXGQoPzpbIC1dP1xkKXsxMSwxOH0kLyxvZD0vXig/OkFFRHxBRk58QUxMfEFNRHxBT0F8QVJTfEFVRHxBV0d8QVpOfEJBTXxCQkR8QkRUfEJIRHxCSUZ8Qk1EfEJORHxCT0J8Qk9WfEJSTHxCU0R8QlROfEJXUHxCWU58QlpEfENBRHxDREZ8Q0hFfENIRnxDSFd8Q0xGfENMUHxDTll8Q09QfENPVXxDUkN8Q1VQfENWRXxDWkt8REpGfERLS3xET1B8RFpEfEVHUHxFUk58RVRCfEVVUnxGSkR8RktQfEdCUHxHRUx8R0hTfEdJUHxHTUR8R05GfEdUUXxHWUR8SEtEfEhOTHxIVEd8SFVGfElEUnxJTFN8SU5SfElRRHxJUlJ8SVNLfEpNRHxKT0R8SlBZfEtFU3xLR1N8S0hSfEtNRnxLUFd8S1JXfEtXRHxLWUR8S1pUfExBS3xMQlB8TEtSfExSRHxMU0x8TFlEfE1BRHxNREx8TUdBfE1LRHxNTUt8TU5UfE1PUHxNUlV8TVVSfE1WUnxNV0t8TVhOfE1YVnxNWVJ8TVpOfE5BRHxOR058TklPfE5PS3xOUFJ8TlpEfE9NUnxQQUJ8UEVOfFBHS3xQSFB8UEtSfFBMTnxQWUd8UUFSfFJPTnxSU0R8UlVCfFJXRnxTQVJ8U0JEfFNDUnxTREd8U0VLfFNHRHxTSFB8U0xFfFNPU3xTUkR8U1NQfFNUTnxTVkN8U1lQfFNaTHxUSEJ8VEpTfFRNVHxUTkR8VE9QfFRSWXxUVER8VFdEfFRaU3xVQUh8VUdYfFVTRHxVU058VVlJfFVZVXxVWVd8VVpTfFZFRHxWRVN8Vk5EfFZVVnxXU1R8WEFEfFhBRnxYQUd8WEFVfFhCQXxYQkJ8WEJDfFhCRHxYQ0R8WENHfFhEUnxYT0Z8WFBEfFhQRnxYUFR8WFNVfFhUU3xYVUF8WFhYfFlFUnxaQVJ8Wk1XfFpXRykkLyx1aT0vXltBLVpdezJ9KD8hMDB8MDF8OTkpXGR7Mn1bQS1aMC05XXsxMSwzMH0kLyxyZD0iKD86KD86XFxkXFxkWzI0NjhdWzA0OF18XFxkXFxkWzEzNTc5XVsyNl18XFxkXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxkfDJbMC04XSkpKSI7ZnVuY3Rpb24gZGcoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2V9JGApfWNvbnN0IHNkPWRnKHJkKTtmdW5jdGlvbiBFcyhlKXtjb25zdCB0PSIoPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQiO3JldHVybiB0eXBlb2YgZS5wcmVjaXNpb249PSJudW1iZXIiP2UucHJlY2lzaW9uPT09LTE/YCR7dH1gOmUucHJlY2lzaW9uPT09MD9gJHt0fTpbMC01XVxcZGA6YCR7dH06WzAtNV1cXGRcXC5cXGR7JHtlLnByZWNpc2lvbn19YDplLnNlY29uZHM/YCR7dH06WzAtNV1cXGQoPzpcXC5cXGQrKT9gOmAke3R9KD86OlswLTVdXFxkKD86XFwuXFxkKyk/KT9gfWZ1bmN0aW9uIGlkKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtFcyhlKX0kYCl9ZnVuY3Rpb24gYWQoZSl7Y29uc3QgdD1bIloiXTtlLm9mZnNldCYmdC5wdXNoKCIoWystXSg/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCkiKTtjb25zdCBuPWAke0VzKHtwcmVjaXNpb246ZS5wcmVjaXNpb24sc2Vjb25kczohMH0pfSg/OiR7dC5qb2luKCJ8Iil9KWAsbz1lLmxvY2FsP2Ake259fCR7RXMoe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfWA6bjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmR9VCg/OiR7b30pJGApfWNvbnN0IGNkPS9eW1xzXFNdezAsfSQvLHVkPWU9Pntjb25zdCB0PWU/YFtcXHNcXFNdeyR7ZT8ubWluaW11bT8/MH0sJHtlPy5tYXhpbXVtPz8iIn19YDoiW1xcc1xcU10qIjtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7dH0kYCl9LGxkPS9eLT9cZCtuPyQvLGRkPS9eLT9cZCskLyxzcj0vXi0/XGQrKD86XC5cZCspPyQvLHBkPS9eKD86dHJ1ZXxmYWxzZSkkL2ksaGQ9L15udWxsJC9pLGZkPS9edW5kZWZpbmVkJC9pLG1kPS9eW15BLVpdKiQvLGdkPS9eW15hLXpdKiQvLGJkPS9eWzAtOWEtZkEtRl0qJC87ZnVuY3Rpb24geW4oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTkrL117JHtlfX0ke3R9JGApfWZ1bmN0aW9uIF9uKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2V9fSRgKX1jb25zdCBwZz0vXlswLTlhLWZBLUZdezMyfSQvLGhnPXluKDIyLCI9PSIpLGZnPV9uKDIyKSxtZz0vXlswLTlhLWZBLUZdezQwfSQvLGdnPXluKDI3LCI9IiksYmc9X24oMjcpLHZnPS9eWzAtOWEtZkEtRl17NjR9JC8seWc9eW4oNDMsIj0iKSxfZz1fbig0Myksa2c9L15bMC05YS1mQS1GXXs5Nn0kLywkZz15big2NCwiIiksd2c9X24oNjQpLFNnPS9eWzAtOWEtZkEtRl17MTI4fSQvLHpnPXluKDg2LCI9PSIpLFRnPV9uKDg2KSxpcj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYW55U3RyaW5nOmNkLGJhc2U2NDp1ZyxiYXNlNjR1cmw6bGcsYmlnaW50OmxkLGJvb2xlYW46cGQsYnJvd3NlckVtYWlsOmFnLGNpZHJ2NDpZbCxjaWRydjY6WGwsY3JlZGl0Q2FyZDpjaSxjdWlkOmpsLGN1aWQyOk1sLGN1cnJlbmN5Q29kZTpvZCxkYXRlOnNkLGRhdGV0aW1lOmFkLGRvbWFpbjp0ZCxkdXJhdGlvbjpIbCxlMTY0Om5kLGVtYWlsOlZsLGVtb2ppOktsLGV4dGVuZGVkRHVyYXRpb246ZWcsZ3VpZDpGbCxoZXg6YmQsaG9zdG5hbWU6ZWQsaHRtbDVFbWFpbDpyZyxodHRwUHJvdG9jb2w6YWksaWJhbjp1aSxpZG5FbWFpbDppZyxpbnRlZ2VyOmRkLGlwdjQ6V2wsaXB2NjpHbCxrc3VpZDpMbCxsb3dlcmNhc2U6bWQsbWFjOlFsLG1kNV9iYXNlNjQ6aGcsbWQ1X2Jhc2U2NHVybDpmZyxtZDVfaGV4OnBnLG5hbm9pZDpCbCxuYW5vaWRPZkxlbmd0aDpVbCxudWxsOmhkLG51bWJlcjpzcixyZmM1MzIyRW1haWw6c2csc2hhMV9iYXNlNjQ6Z2csc2hhMV9iYXNlNjR1cmw6Ymcsc2hhMV9oZXg6bWcsc2hhMjU2X2Jhc2U2NDp5ZyxzaGEyNTZfYmFzZTY0dXJsOl9nLHNoYTI1Nl9oZXg6dmcsc2hhMzg0X2Jhc2U2NDokZyxzaGEzODRfYmFzZTY0dXJsOndnLHNoYTM4NF9oZXg6a2csc2hhNTEyX2Jhc2U2NDp6ZyxzaGE1MTJfYmFzZTY0dXJsOlRnLHNoYTUxMl9oZXg6U2csc3RyaW5nOnVkLHRpbWU6aWQsdWxpZDpxbCx1bmRlZmluZWQ6ZmQsdW5pY29kZUVtYWlsOkpsLHVwcGVyY2FzZTpnZCx1dWlkOmt0LHV1aWQ0OnRnLHV1aWQ2Om5nLHV1aWQ3Om9nLHhpZDpEbH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxLPXAoIiRab2RDaGVjayIsKGUsdCk9Pnt2YXIgbjtlLl96b2Q/PyhlLl96b2Q9e30pLGUuX3pvZC5kZWY9dCwobj1lLl96b2QpLm9uYXR0YWNoPz8obi5vbmF0dGFjaD1bXSl9KSxsaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFIcyh0KSYmdC5zaXplIT09dm9pZCAwfSxkaT1lPT57Y29uc3QgdD1lLnZhbHVlO3JldHVybiFIcyh0KSYmdC5sZW5ndGghPT12b2lkIDB9LEVvPXtudW1iZXI6Im51bWJlciIsYmlnaW50OiJiaWdpbnQiLG9iamVjdDoiZGF0ZSJ9LHBpPXAoIiRab2RDaGVja0xlc3NUaGFuIiwoZSx0KT0+e0suaW5pdChlLHQpO2NvbnN0IG49RW9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU8PXQudmFsdWU6by52YWx1ZTx0LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkVvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGhpPXAoIiRab2RDaGVja0dyZWF0ZXJUaGFuIiwoZSx0KT0+e0suaW5pdChlLHQpO2NvbnN0IG49RW9bdHlwZW9mIHQudmFsdWVdO2UuX3pvZC5jaGVjaz1vPT57KHQuaW5jbHVzaXZlP28udmFsdWU+PXQudmFsdWU6by52YWx1ZT50LnZhbHVlKXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkVvW3R5cGVvZiBvLnZhbHVlXT8/bixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksdmQ9cCgiJFpvZENoZWNrTXVsdGlwbGVPZiIsKGUsdCk9PntLLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2lmKHR5cGVvZiBuLnZhbHVlIT10eXBlb2YgdC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtaXggbnVtYmVyIGFuZCBiaWdpbnQgaW4gbXVsdGlwbGVfb2YgY2hlY2suIik7KHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Ij90LnZhbHVlIT09QmlnSW50KDApJiZuLnZhbHVlJXQudmFsdWU9PT1CaWdJbnQoMCk6YWwobi52YWx1ZSx0LnZhbHVlKT09PTApfHxuLmlzc3Vlcy5wdXNoKHtvcmlnaW46dHlwZW9mIG4udmFsdWUsY29kZToibm90X211bHRpcGxlX29mIixkaXZpc29yOnQudmFsdWUsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5ZD1wKCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXQiLChlLHQpPT57Sy5pbml0KGUsdCksdC5mb3JtYXQ9dC5mb3JtYXR8fCJmbG9hdDY0Ijtjb25zdCBuPXQuZm9ybWF0Py5pbmNsdWRlcygiaW50Iiksbz1uPyJpbnQiOiJudW1iZXIiLFtyLHNdPWdsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9YT0+e2NvbnN0IGk9YS52YWx1ZTtpZihuKXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSl7YS5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6byxmb3JtYXQ6dC5mb3JtYXQsY29kZToiaW52YWxpZF90eXBlIixjb250aW51ZTohMSxpbnB1dDppLGluc3Q6ZX0pO3JldHVybn1pZighTnVtYmVyLmlzU2FmZUludGVnZXIoaSkpe2k+MD9hLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19iaWciLG1heGltdW06TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTphLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn19aTxyJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06cixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksaT5zJiZhLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im51bWJlciIsaW5wdXQ6aSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnMsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLF9kPXAoIiRab2RDaGVja0JpZ0ludEZvcm1hdCIsKGUsdCk9PntLLmluaXQoZSx0KTtjb25zdFtuLG9dPWJsW3QuZm9ybWF0XTtlLl96b2QuY2hlY2s9cj0+e2NvbnN0IHM9ci52YWx1ZTtzPG4mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpuLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxzPm8mJnIuaXNzdWVzLnB1c2goe29yaWdpbjoiYmlnaW50IixpbnB1dDpzLGNvZGU6InRvb19iaWciLG1heGltdW06byxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksa2Q9cCgiJFpvZENoZWNrTWF4U2l6ZSIsKGUsdCk9Pnt2YXIgbjtLLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWxpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU8PXQubWF4aW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOldvKHIpLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLCRkPXAoIiRab2RDaGVja01pblNpemUiLChlLHQpPT57dmFyIG47Sy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1saSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPj10Lm1pbmltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpXbyhyKSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHdkPXAoIiRab2RDaGVja1NpemVFcXVhbHMiLChlLHQpPT57dmFyIG47Sy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1saSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLnNpemU7aWYocz09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT1zPnQuc2l6ZTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46V28ociksLi4uYT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0LnNpemV9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5zaXplfSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxTZD1wKCIkWm9kQ2hlY2tNYXhMZW5ndGgiLChlLHQpPT57dmFyIG47Sy5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1kaSksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPnQubWF4aW11bT9HbyhyKTpzKTw9dC5tYXhpbXVtKXJldHVybjtjb25zdCBpPVFvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhpbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHpkPXAoIiRab2RDaGVja01pbkxlbmd0aCIsKGUsdCk9Pnt2YXIgbjtLLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWRpKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+PXQubWluaW11bSYmczx0Lm1pbmltdW0qMj9HbyhyKTpzKT49dC5taW5pbXVtKXJldHVybjtjb25zdCBpPVFvKHIpO28uaXNzdWVzLnB1c2goe29yaWdpbjppLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVGQ9cCgiJFpvZENoZWNrTGVuZ3RoRXF1YWxzIiwoZSx0KT0+e3ZhciBuO0suaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49ZGkpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGgsYT10eXBlb2Ygcj09InN0cmluZyImJnM+PXQubGVuZ3RoJiZzPD10Lmxlbmd0aCoyP0dvKHIpOnM7aWYoYT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPVFvKHIpLGw9YT50Lmxlbmd0aDtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46aSwuLi5sP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubGVuZ3RofTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubGVuZ3RofSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxrbj1wKCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXQiLChlLHQpPT57dmFyIG4sbztLLmluaXQoZSx0KSx0LnBhdHRlcm4/KG49ZS5fem9kKS5jaGVjaz8/KG4uY2hlY2s9cj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qoci52YWx1ZSkmJnIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0OnIudmFsdWUsLi4udC5wYXR0ZXJuP3twYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpfTp7fSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX0pOihvPWUuX3pvZCkuY2hlY2s/PyhvLmNoZWNrPSgpPT57fSl9KSxJZD1wKCIkWm9kQ2hlY2tSZWdleCIsKGUsdCk9Pntrbi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KG4udmFsdWUpJiZuLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoicmVnZXgiLGlucHV0Om4udmFsdWUscGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx4ZD1wKCIkWm9kQ2hlY2tMb3dlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW1kKSxrbi5pbml0KGUsdCl9KSxQZD1wKCIkWm9kQ2hlY2tVcHBlckNhc2UiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWdkKSxrbi5pbml0KGUsdCl9KSxDZD1wKCIkWm9kQ2hlY2tJbmNsdWRlcyIsKGUsdCk9PntLLmluaXQoZSx0KTtjb25zdCBuPVplKHQuaW5jbHVkZXMpLG89bmV3IFJlZ0V4cCh0eXBlb2YgdC5wb3NpdGlvbj09Im51bWJlciI/YF4ueyR7dC5wb3NpdGlvbn0sfSR7bn1gOm4pO3QucGF0dGVybj1vLGUuX3pvZC5jaGVjaz1yPT57ci52YWx1ZS5pbmNsdWRlcyh0LmluY2x1ZGVzLHQucG9zaXRpb24pfHxyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLGluY2x1ZGVzOnQuaW5jbHVkZXMsaW5wdXQ6ci52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxFZD1wKCIkWm9kQ2hlY2tTdGFydHNXaXRoIiwoZSx0KT0+e0suaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgXiR7WmUodC5wcmVmaXgpfS4qYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5zdGFydHNXaXRoKHQucHJlZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIixwcmVmaXg6dC5wcmVmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxBZD1wKCIkWm9kQ2hlY2tFbmRzV2l0aCIsKGUsdCk9PntLLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYC4qJHtaZSh0LnN1ZmZpeCl9JGApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuZW5kc1dpdGgodC5zdWZmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiZW5kc193aXRoIixzdWZmaXg6dC5zdWZmaXgsaW5wdXQ6by52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBBbyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLiRlKG4sZS5pc3N1ZXMpKX1jb25zdCBPZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0eSIsKGUsdCk9PntLLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2NvbnN0IG89dC5zY2hlbWEuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWVbdC5wcm9wZXJ0eV0saXNzdWVzOltdfSx7fSk7aWYobyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIG8udGhlbihyPT5BbyhyLG4sdC5wcm9wZXJ0eSkpO0FvKG8sbix0LnByb3BlcnR5KX19KSxSZD1wKCIkWm9kQ2hlY2tQcm9wZXJ0aWVzIiwoZSx0KT0+e0suaW5pdChlLHQpLFlvKGUsU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKigpe3lpZWxkIGV9KTtsZXQgbjtlLl96b2QuY2hlY2s9bz0+e2lmKG8udmFsdWU9PW51bGwpe28uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6by52YWx1ZSxpbnN0OmV9KTtyZXR1cm59bj8/KG49UmVmbGVjdC5vd25LZXlzKHQuc2hhcGUpLm1hcChhPT5bYSx0LnNoYXBlW2FdXSkpO2NvbnN0IHI9by52YWx1ZTtsZXQgcztmb3IoY29uc3RbYSxpXW9mIG4pe2NvbnN0IGw9aS5fem9kLnJ1bih7dmFsdWU6clthXSxpc3N1ZXM6W119LHt9KTtsIGluc3RhbmNlb2YgUHJvbWlzZT8ocz8/KHM9W10pLHMucHVzaChsLnRoZW4odT0+QW8odSxvLGEpKSkpOkFvKGwsbyxhKX1pZihzKXJldHVybiBQcm9taXNlLmFsbChzKS50aGVuKCgpPT57fSl9fSksTmQ9cCgiJFpvZENoZWNrTWltZVR5cGUiLChlLHQpPT57Sy5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQubWltZSk7ZS5fem9kLmNoZWNrPW89PntuLmhhcyhvLnZhbHVlLnR5cGUpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC5taW1lLGlucHV0Om8udmFsdWUudHlwZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxaZD1wKCIkWm9kQ2hlY2tPdmVyd3JpdGUiLChlLHQpPT57Sy5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntuLnZhbHVlPXQudHgobi52YWx1ZSl9fSk7Y2xhc3MgamR7Y29uc3RydWN0b3IodD1bXSxuPXt9KXt0aGlzLmNvbnRlbnQ9W10sdGhpcy5pbmRlbnQ9MCx0aGlzLmFyZ3M9dCx0aGlzLmNsb3NlZD1ufWluZGVudGVkKHQpe3RoaXMuaW5kZW50Kz0xO3RyeXt0KHRoaXMpfWZpbmFsbHl7dGhpcy5pbmRlbnQtPTF9fXdyaXRlKHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXt0KHRoaXMse2V4ZWN1dGlvbjoic3luYyJ9KSx0KHRoaXMse2V4ZWN1dGlvbjoiYXN5bmMifSk7cmV0dXJufWNvbnN0IG89dC5zcGxpdChgCmApLmZpbHRlcihhPT5hKSxyPU1hdGgubWluKC4uLm8ubWFwKGE9PmEubGVuZ3RoLWEudHJpbVN0YXJ0KCkubGVuZ3RoKSkscz1vLm1hcChhPT5hLnNsaWNlKHIpKS5tYXAoYT0+IiAiLnJlcGVhdCh0aGlzLmluZGVudCoyKSthKTtmb3IoY29uc3QgYSBvZiBzKXRoaXMuY29udGVudC5wdXNoKGEpfWNvbXBpbGUoKXtjb25zdCB0PUZ1bmN0aW9uLG49dGhpcz8uY29udGVudD8/WyIiXTtyZXR1cm4gbmV3IHQoLi4uT2JqZWN0LmtleXModGhpcy5jbG9zZWQpLGByZXR1cm4gZnVuY3Rpb24gKCR7dGhpcy5hcmdzLmpvaW4oIiwgIil9KSB7CiR7bi5qb2luKGAKYCl9Cn07YCkoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmNsb3NlZCkpfX1jb25zdCBNZD17bWFqb3I6NCxtaW5vcjo2LHBhdGNoOjV9LFA9cCgiJFpvZFR5cGUiLChlLHQpPT57dmFyIG47ZT8/KGU9e30pLGUuX3pvZC5kZWY9dCxlLl96b2QuYmFnPWUuX3pvZC5iYWd8fHt9LGUuX3pvZC52ZXJzaW9uPU1kO2NvbnN0IG89ZS5fem9kLmRlZi5jaGVja3Mscj1lLl96b2QudHJhaXRzLmhhcygiJFpvZENoZWNrIik/W2UsLi4ubz8/W11dOm8/Lmxlbmd0aD9bLi4ub106W107Zm9yKGNvbnN0IHMgb2Ygcilmb3IoY29uc3QgYSBvZiBzLl96b2Qub25hdHRhY2gpYShlKTtpZihyLmxlbmd0aD09PTApKG49ZS5fem9kKS5kZWZlcnJlZD8/KG4uZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKT0+e2UuX3pvZC5ydW49ZS5fem9kLnBhcnNlfSk7ZWxzZXtjb25zdCBzPShpLGwsdSk9PntpZihpLm1lbW8pcmV0dXJuIGk7bGV0IGQ9ZmUoaSksZjtmb3IoY29uc3QgZyBvZiBsKXtpZihnLl96b2QuZGVmLndoZW4pe2lmKHpsKGkpfHwhZy5fem9kLmRlZi53aGVuKGkpKWNvbnRpbnVlfWVsc2UgaWYoZCljb250aW51ZTtjb25zdCB2PWkuaXNzdWVzLmxlbmd0aCxfPWcuX3pvZC5jaGVjayhpKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSYmdT8uYXN5bmM9PT0hMSl0aHJvdyBuZXcgVmU7aWYoZnx8XyBpbnN0YW5jZW9mIFByb21pc2UpZj0oZj8/UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMoKT0+e2F3YWl0IF8saS5pc3N1ZXMubGVuZ3RoIT09diYmKHhzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSkpfSk7ZWxzZXtpZihpLmlzc3Vlcy5sZW5ndGg9PT12KWNvbnRpbnVlO3hzKGkuaXNzdWVzLHYsZSksZHx8KGQ9ZmUoaSx2KSl9fXJldHVybiBmP2YudGhlbigoKT0+aSk6aX0sYT0oaSxsLHUpPT57aWYoZmUoaSkpcmV0dXJuIGkuYWJvcnRlZD0hMCxpO2NvbnN0IGQ9cyhsLHIsdSk7aWYoZCBpbnN0YW5jZW9mIFByb21pc2Upe2lmKHUuYXN5bmM9PT0hMSl0aHJvdyBuZXcgVmU7cmV0dXJuIGQudGhlbihmPT5lLl96b2QucGFyc2UoZix1KSl9cmV0dXJuIGUuX3pvZC5wYXJzZShkLHUpfTtlLl96b2QucnVuPShpLGwpPT57aWYobC5za2lwQ2hlY2tzKXJldHVybiBlLl96b2QucGFyc2UoaSxsKTtpZihsLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpe2NvbnN0IGQ9ZS5fem9kLnBhcnNlKHt2YWx1ZTppLnZhbHVlLGlzc3VlczpbXX0sey4uLmwsc2tpcENoZWNrczohMH0pO3JldHVybiBkIGluc3RhbmNlb2YgUHJvbWlzZT9kLnRoZW4oZj0+YShmLGksbCkpOmEoZCxpLGwpfWNvbnN0IHU9ZS5fem9kLnBhcnNlKGksbCk7aWYodSBpbnN0YW5jZW9mIFByb21pc2Upe2lmKGwuYXN5bmM9PT0hMSl0aHJvdyBuZXcgVmU7cmV0dXJuIHUudGhlbihkPT5zKGQscixsKSl9cmV0dXJuIHModSxyLGwpfX19LHtnZXQifnN0YW5kYXJkIigpe3JldHVybiBZbyh0aGlzLCJ+c3RhbmRhcmQiLGZpKHRoaXMpKX0sc2V0In5zdGFuZGFyZCIoZSl7amUodGhpcywifnN0YW5kYXJkIixlKX19KSxxZD0oZSx0KT0+ZS5pc3N1ZXMubGVuZ3RoP3tpc3N1ZXM6ZS5pc3N1ZXMubWFwKG49PnplKG4sdCxvZSgpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBJZyhlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gcWQoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIGZpKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gcWQobyxuKX1jYXRjaHt9cmV0dXJuIElnKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0ICRuPXAoIiRab2RTdHJpbmciLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9jZCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLFY9cCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9Pntrbi5pbml0KGUsdCksJG4uaW5pdChlLHQpfSksRGQ9cCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUZsKSxWLmluaXQoZSx0KX0pLExkPXAoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49a3QobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWt0KCkpO1YuaW5pdChlLHQpfSksQmQ9cCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1WbCksVi5pbml0KGUsdCl9KSxtaT0xLG9uPTI7ZnVuY3Rpb24gZ2koZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBVZChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP2dpKGUpfHxvbjpIZChlLHQpfWZ1bmN0aW9uIEhkKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1haS5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gbWk7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/b259cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIG9ufX1jb25zdCB4Zz0vW1x0XG5ccl0vZztmdW5jdGlvbiBBcyhlKXtyZXR1cm4gZS5yZXBsYWNlKHhnLCIiKX1mdW5jdGlvbiBGZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBWZChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBKZD1wKCIkWm9kVVJMIiwoZSx0KT0+e1YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1VZChvLHQpO2lmKHI9PT1taSl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT1vbil7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9QXMobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFGZChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhVmQocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6QXMobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksS2Q9cCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1LbCgpKSxWLmluaXQoZSx0KX0pLFdkPXAoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9CbDpVbCh0Lmxlbmd0aCkpLFYuaW5pdChlLHQpfSksR2Q9cCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWpsKSxWLmluaXQoZSx0KX0pLFFkPXAoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TWwpLFYuaW5pdChlLHQpfSksWWQ9cCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXFsKSxWLmluaXQoZSx0KX0pLFhkPXAoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPURsKSxWLmluaXQoZSx0KX0pLGVwPXAoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TGwpLFYuaW5pdChlLHQpfSksdHA9cCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1hZCh0KSksVi5pbml0KGUsdCl9KSxucD1wKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49c2QpLFYuaW5pdChlLHQpfSksb3A9cCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWlkKHQpKSxWLmluaXQoZSx0KX0pLHJwPXAoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SGwpLFYuaW5pdChlLHQpfSksc3A9cCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVdsKSxWLmluaXQoZSx0KX0pLFBnPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiBiaShlKXtyZXR1cm4gUGcudGVzdChlKT9naShgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IGlwPXAoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1HbCksVi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntiaShuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxhcD1wKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1RbCh0LmRlbGltaXRlcikpLFYuaW5pdChlLHQpfSksY3A9cCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49WWwpLFYuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdXAoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOmJpKG4pfWNvbnN0IGxwPXAoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVhsKSxWLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3VwKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gdmkoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBkcD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8scHA9cCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZHApLFYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dmkobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5aT0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gaHAoZSl7aWYoIXlpLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gdmkobil9Y29uc3QgZnA9cCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eWkpLFYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aHAobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxtcD1wKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bmQpLFYuaW5pdChlLHQpfSksQ2c9L1stIF0vZztmdW5jdGlvbiBFZyhlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBncChlKXtyZXR1cm4gY2kudGVzdChlKT9FZyhlLnJlcGxhY2UoQ2csIiIpKTohMX1jb25zdCBicD1wKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Y2kpLFYuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Z3Aobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIEFnKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIHZwKGUpe3JldHVybiB1aS50ZXN0KGUpP0FnKGUpOiExfWNvbnN0IHlwPXAoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj11aSksVi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt2cChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBfcChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IGtwPXAoIiRab2RKV1QiLChlLHQpPT57Vi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntfcChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLCRwPXAoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57Vi5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksX2k9cCgiJFpvZE51bWJlciIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1zcixlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSx3cD1wKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3lkLmluaXQoZSx0KSxfaS5pbml0KGUsdCl9KSxraT1wKCIkWm9kQm9vbGVhbiIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1wZCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLCRpPXAoIiRab2RCaWdJbnQiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49bGQsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxTcD1wKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e19kLmluaXQoZSx0KSwkaS5pbml0KGUsdCl9KSx6cD1wKCIkWm9kU3ltYm9sIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxUcD1wKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPWZkLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLElwPXAoIiRab2ROdWxsIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPWhkLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx4cD1wKCIkWm9kQW55IiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksUHA9cCgiJFpvZFVua25vd24iLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxDcD1wKCIkWm9kTmV2ZXIiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxFcD1wKCIkWm9kVm9pZCIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLEFwPXAoIiRab2REYXRlIiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gdnUoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi4kZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IE9wPXAoIiRab2RBcnJheSIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPWRlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgYT1bXSxpPXI/LmFib3J0RWFybHk7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe2NvbnN0IHU9c1tsXSxkPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKWEucHVzaChkLnRoZW4oZj0+dnUoZixvLGwpKSk7ZWxzZSBpZih2dShkLG8sbCksaSYmZC5pc3N1ZXMubGVuZ3RoIT09MCYmZmUoZCkpYnJlYWt9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gT28oZSx0LG4sbyxyLHMpe2NvbnN0IGE9biBpbiBvLGk9cz09PSJvcHRpb25hbCI7aWYoISghYSYmaSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmkmJiFhKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLiRlKG4sZS5pc3N1ZXMpKX1pZighYSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGF8fHI9PT0iZGVmYXVsdGVkIiYmIWkpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgT2c9W107ZnVuY3Rpb24gUnAoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOk9nLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgYSBvZiByKWlmKCFlLnNoYXBlPy5bYV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoYSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1tbChlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIE5wKGUsdCxuLG8scixzLGEpe2NvbnN0IGk9W10sbD1yLmtleVNldCx1PXIuY2F0Y2hhbGwuX3pvZCxkPXUuZGVmLnR5cGUsZj11Lm9wdGluLGc9dS5vcHRvdXQ7bGV0IHY9MDtmb3IoY29uc3QgXyBpbiB0KXtpZihhJiZuLmlzc3Vlcy5sZW5ndGghPT12KXtpZihmZShuLHYpKWJyZWFrO3Y9bi5pc3N1ZXMubGVuZ3RofWlmKGwuaGFzKF8pKWNvbnRpbnVlO2lmKF89PT0iX19wcm90b19fIil7ZD09PSJuZXZlciImJmkucHVzaChfKTtjb250aW51ZX1pZihkPT09Im5ldmVyIil7aS5wdXNoKF8pO2NvbnRpbnVlfWNvbnN0ICQ9dS5ydW4oe3ZhbHVlOnRbX10saXNzdWVzOltdfSxvKTskIGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2goJC50aGVuKFM9Pk9vKFMsbixfLHQsZixnKSkpOk9vKCQsbixfLHQsZixnKX1yZXR1cm4gaS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmksaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IFpwPXAoIiRab2RPYmplY3QiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IHU9KCk9Pntjb25zdCBkPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6ZH0pLHUucmF3PWQsZH07dS5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6dX0pfWNvbnN0IHI9aG4oKCk9PlJwKHQpKTtSKGUsInByb3BWYWx1ZXMiLHU9Pntjb25zdCBkPXUuZGVmLnNoYXBlLGY9e307Zm9yKGNvbnN0IGcgaW4gZCl7Y29uc3Qgdj1kW2ddLl96b2Q7aWYodi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLGcpfHx1dChmLGcsbmV3IFNldCk7Zm9yKGNvbnN0IF8gb2Ygdi52YWx1ZXMpZltnXS5hZGQoXyk7di5vcHRpbiE9PXZvaWQgMCYmZltnXS5hZGQodm9pZCAwKX19cmV0dXJuIGZ9KTtjb25zdCBzPXl0LGE9dC5jYXRjaGFsbDtsZXQgaTtjb25zdCBsPWRlLm1lbW9pemVyO2w/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHUsZCk9PntpPz8oaT1yLnZhbHVlKTtjb25zdCBmPXUudmFsdWU7aWYoIXMoZikpcmV0dXJuIHUuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ZixpbnN0OmV9KSx1O3UudmFsdWU9bD9sLmFsbG9jKGUsdSx7fSxkKTp7fTtjb25zdCBnPVtdLHY9aS5zaGFwZSxfPWQ/LmFib3J0RWFybHk7bGV0ICQ9dS5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCBTIG9mIGkuYWxsS2V5cyl7aWYoXyYmdS5pc3N1ZXMubGVuZ3RoIT09JCl7aWYoZmUodSwkKSlicmVhazskPXUuaXNzdWVzLmxlbmd0aH1pZihTPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgaj12W1NdLE49ai5fem9kLm9wdGluLEk9ai5fem9kLm9wdG91dCxyZT1qLl96b2QucnVuKHt2YWx1ZTpmW1NdLGlzc3VlczpbXX0sZCk7cmUgaW5zdGFuY2VvZiBQcm9taXNlP2cucHVzaChyZS50aGVuKFc9Pk9vKFcsdSxTLGYsTixJKSkpOk9vKHJlLHUsUyxmLE4sSSl9cmV0dXJuIGE/TnAoZyxmLHUsZCxyLnZhbHVlLGUsXz09PSEwKTpnLmxlbmd0aD9Qcm9taXNlLmFsbChnKS50aGVuKCgpPT51KTp1fX0pLGpwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57WnAuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89aG4oKCk9PlJwKHQpKSxyPWRlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSwkPV8uc3ltYm9sS2V5cyxTPW5ldyBqZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6JH0pLGo9Vz0+YHNoYXBlWyR7V31dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7V31dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLE49KFcsSCk9PmAKICAgICAgICAgIGxldCAke1d9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7V30uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7V30uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7SH0sIC4uLmlzcy5wYXRoXSA6IFske0h9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke1d9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke1d9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gO1Mud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBJPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHJlPTA7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKUlbV109YGtleV8ke3JlKyt9YDtTLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IFcgb2YgXy5hbGxLZXlzKXtpZihXPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgSD1JW1ddLGdlPXR5cGVvZiBXPT0ic3ltYm9sIj9gc3ltc1skeyQuaW5kZXhPZihXKX1dYDpkbChXKSxwdD1gJHtnZX0gaW4gaW5wdXRgLGs9dltXXSx3PWs/Ll96b2Q/Lm9wdGluLEc9dyE9PXZvaWQgMCx0ZT1rPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKFMud3JpdGUoYGNvbnN0ICR7SH0gPSAke2ooZ2UpfTtgKSxHJiZ0ZSl7Y29uc3QgUmU9dz09PSJvcHRpb25hbCI/YCR7SH1fcHJlc2VudGA6YCR7SH0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke0h9X3ByZXNlbnRgO1Mud3JpdGUoYAogICAgICAgIGNvbnN0ICR7SH1fcHJlc2VudCA9ICR7cHR9OwogICAgICAgIGlmICghJHtIfS5pc3N1ZXMubGVuZ3RoIHx8ICR7SH1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7SH0uaXNzdWVzLmxlbmd0aCkgeyR7TihILGdlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtSZX0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7Z2V9XSA9ICR7SH0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBHPyhTLndyaXRlKGAKICAgICAgICBpZiAoJHtIfS5pc3N1ZXMubGVuZ3RoKSB7JHtOKEgsZ2UpfQogICAgICAgIH0KICAgICAgYCksdz09PSJkZWZhdWx0ZWQiP1Mud3JpdGUoYG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlO2ApOlMud3JpdGUoYAogICAgICAgIGlmICgke0h9LnZhbHVlICE9PSB1bmRlZmluZWQgfHwgJHtwdH0pIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlOwogICAgICAgIH0KICAgICAgYCkpOlMud3JpdGUoYAogICAgICAgIGNvbnN0ICR7SH1fcHJlc2VudCA9ICR7cHR9OwogICAgICAgIGlmICgke0h9Lmlzc3Vlcy5sZW5ndGgpIHske04oSCxnZSl9CiAgICAgICAgfQogICAgICAgIGlmICghJHtIfV9wcmVzZW50ICYmICEke0h9Lmlzc3Vlcy5sZW5ndGgpIHsKICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goewogICAgICAgICAgICBjb2RlOiAiaW52YWxpZF90eXBlIiwKICAgICAgICAgICAgZXhwZWN0ZWQ6ICJub25vcHRpb25hbCIsCiAgICAgICAgICAgIGlucHV0OiB1bmRlZmluZWQsCiAgICAgICAgICAgIHBhdGg6IFske2dlfV0KICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgke0h9X3ByZXNlbnQpIHsKICAgICAgICAgIG5ld1Jlc3VsdFske2dlfV0gPSAke0h9LnZhbHVlOwogICAgICAgIH0KCiAgICAgIGApfXJldHVybiBTLndyaXRlKCJwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OyIpLFMud3JpdGUoInJldHVybiBwYXlsb2FkOyIpLFMuY29tcGlsZSgpfTtsZXQgYTtjb25zdCBpPXl0LGw9IWRlLmppdGxlc3MsZD1sJiZobC52YWx1ZSxmPXQuY2F0Y2hhbGw7bGV0IGc7ZS5fem9kLnBhcnNlPSh2LF8pPT57Zz8/KGc9by52YWx1ZSk7Y29uc3QgJD12LnZhbHVlO3JldHVybiBpKCQpP2wmJmQmJl8/LmFzeW5jPT09ITEmJl8uaml0bGVzcyE9PSEwPyhhfHwoYT1zKHQuc2hhcGUpKSx2PWEodixfKSxmP05wKFtdLCQsdixfLGcsZSxfPy5hYm9ydEVhcmx5PT09ITApOnYpOm4odixfKToodi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDokLGluc3Q6ZX0pLHYpfX0pO2Z1bmN0aW9uIHl1KGUsdCxuLG8pe2Zvcihjb25zdCBzIG9mIGUpaWYocy5pc3N1ZXMubGVuZ3RoPT09MClyZXR1cm4gdC52YWx1ZT1zLnZhbHVlLHQ7Y29uc3Qgcj1lLmZpbHRlcihzPT4hZmUocykpO3JldHVybiByLmxlbmd0aD09PTE/KHQudmFsdWU9clswXS52YWx1ZSxyWzBdKToodC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChhPT56ZShhLG8sb2UoKSkpKX0pLHQpfWNvbnN0IGFyPXAoIiRab2RVbmlvbiIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsIm9wdGluIixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluPT09ImRlZmF1bHRlZCIpPyJkZWZhdWx0ZWQiOm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW4hPT12b2lkIDApPyJvcHRpb25hbCI6dm9pZCAwKSxSKGUsIm9wdG91dCIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKT8ib3B0aW9uYWwiOnZvaWQgMCksUihlLCJ2YWx1ZXMiLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC52YWx1ZXMpKXJldHVybiBuZXcgU2V0KG8uZGVmLm9wdGlvbnMuZmxhdE1hcChyPT5BcnJheS5mcm9tKHIuX3pvZC52YWx1ZXMpKSl9KSxSKGUsInBhdHRlcm4iLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC5wYXR0ZXJuKSl7Y29uc3Qgcj1vLmRlZi5vcHRpb25zLm1hcChzPT5zLl96b2QucGF0dGVybik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtyLm1hcChzPT5GZShzLnNvdXJjZSkpLmpvaW4oInwiKX0pJGApfX0pO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgdC5vcHRpb25zKXtjb25zdCBsPWkuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSlhLnB1c2gobCkscz0hMDtlbHNle2lmKGwuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIGw7YS5wdXNoKGwpfX1yZXR1cm4gcz9Qcm9taXNlLmFsbChhKS50aGVuKGk9Pnl1KGksbyxlLHIpKTp5dShhLG8sZSxyKX19KTtmdW5jdGlvbiBfdShlLHQsbixvKXtjb25zdCByPVtdO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWVbc10uaXNzdWVzLmxlbmd0aD09PTAmJnIucHVzaChzKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPWVbclswXV0udmFsdWUsdCk6KHIubGVuZ3RoPT09MD90Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGE9PnplKGEsbyxvZSgpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBNcD1wKCIkWm9kWG9yIiwoZSx0KT0+e2FyLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBhPVtdO2Zvcihjb25zdCBpIG9mIHQub3B0aW9ucyl7Y29uc3QgbD1pLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7bCBpbnN0YW5jZW9mIFByb21pc2U/KGEucHVzaChsKSxzPSEwKTphLnB1c2gobCl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoYSkudGhlbihpPT5fdShpLG8sZSxyKSk6X3UoYSxvLGUscil9fSk7ZnVuY3Rpb24gd2koZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPXFwKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIHFwKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgRHA9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxhci5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7UihlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgYT0wO2Zvcihjb25zdCBpIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGw9aS5fem9kLnByb3BWYWx1ZXM7aWYoIWx8fE9iamVjdC5rZXlzKGwpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihpKX0iYCk7bFtyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmErKztmb3IoY29uc3RbdSxkXW9mIE9iamVjdC5lbnRyaWVzKGwpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8dXQocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBmIG9mIGQpc1t1XS5hZGQoZil9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZhPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGE9Vm8oci5fem9kLmRlZik7aWYoYSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1obigoKT0+cXAodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGE9ci52YWx1ZTtpZigheXQoYSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6YSxpbnN0OmV9KSxyO2NvbnN0IGk9YT8uW3QuZGlzY3JpbWluYXRvcl0sbD1vLnZhbHVlLmdldChpKTtyZXR1cm4gbCYmKGkhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/bC5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6YSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLExwPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksYT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxhIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxhXSkudGhlbigoW2wsdV0pPT5rdShuLGwsdSkpOmt1KG4scyxhKX19KTtmdW5jdGlvbiBSbyhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKEplKGUpJiZKZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgYT1SbyhlW3NdLHRbc10pO2lmKCFhLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5hLm1lcmdlRXJyb3JQYXRoXX07cltzXT1hLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10sYT1SbyhyLHMpO2lmKCFhLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5hLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGEuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBrdShlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxhPSh1LGQpPT57bGV0IGY7aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLGY9dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCBnPVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKGcpfHxzLnNldChnLHUpLGY9W2ddfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IGcgb2YgZilvLmhhcyhnKXx8by5zZXQoZyx7fSksby5nZXQoZylbZF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWEodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWEodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGk9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGkubGVuZ3RoKXtjb25zdCB1PXI/aS5maWx0ZXIoZD0+ci5rZXlzLmluY2x1ZGVzKGQpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgZCBvZiBpKSF1LmluY2x1ZGVzKGQpJiZzLmhhcyhkKSYmZS5pc3N1ZXMucHVzaChzLmdldChkKSl9Y29uc3QgbD1Sbyh0LnZhbHVlLG4udmFsdWUpO2lmKCFsLnZhbGlkKXtpZihmZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGwubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWwuZGF0YSxlfWNvbnN0IFNpPXAoIiRab2RUdXBsZSIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1kZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgYT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDphLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBpPVtdLGw9JHUobiwib3B0aW4iKSx1PSR1KG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGEubGVuZ3RoPGwpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpsLGluY2x1c2l2ZTohMCxpbnB1dDphLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7YS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmEsaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgZD1uZXcgQXJyYXkobi5sZW5ndGgpLGY9dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCBnPSExO2ZvcihsZXQgdj0wO3Y8bi5sZW5ndGg7disrKXtjb25zdCBfPW5bdl0uX3pvZC5ydW4oe3ZhbHVlOmFbdl0saXNzdWVzOltdfSxzKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goXy50aGVuKCQ9PntkW3ZdPSR9KSk6KGRbdl09XyxmJiYhZyYmXy5pc3N1ZXMubGVuZ3RoJiYoZz1mZShfKSkpfWlmKHQucmVzdCYmIWcpe2xldCB2PW4ubGVuZ3RoLTE7Y29uc3QgXz1hLnNsaWNlKG4ubGVuZ3RoKTtsZXQgJD1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IFMgb2YgXyl7aWYoZiYmci5pc3N1ZXMubGVuZ3RoIT09JCl7aWYoZmUociwkKSlicmVhazskPXIuaXNzdWVzLmxlbmd0aH12Kys7Y29uc3Qgaj10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOlMsaXNzdWVzOltdfSxzKTtqIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goai50aGVuKE49Pnd1KE4scix2KSkpOnd1KGoscix2KX19cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9PlN1KGQscixuLGEsdSkpOlN1KGQscixuLGEsdSl9fSk7ZnVuY3Rpb24gJHUoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiB3dShlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLiRlKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gU3UoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgYT1lW3NdLGk9czxvLmxlbmd0aDtpZighaSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihhLmlzc3Vlcy5sZW5ndGgpe2lmKCFpJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4uJGUocyxhLmlzc3VlcykpfXQudmFsdWVbc109YS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBCcD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49ZGUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighSmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGE9W10saT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoaSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGw9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBpKWlmKHR5cGVvZiBkPT0ic3RyaW5nInx8dHlwZW9mIGQ9PSJudW1iZXIifHx0eXBlb2YgZD09InN5bWJvbCIpe2lmKGwuYWRkKHR5cGVvZiBkPT0ibnVtYmVyIj9kLnRvU3RyaW5nKCk6ZCksZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGY9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpkLGlzc3VlczpbXX0scik7aWYoZiBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYoZi5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpmLmlzc3Vlcy5tYXAoXz0+emUoXyxyLG9lKCkpKSxpbnB1dDpkLHBhdGg6W2RdLGluc3Q6ZX0pO2NvbnRpbnVlfWNvbnN0IGc9Zi52YWx1ZTtpZihnPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6c1tkXSxpc3N1ZXM6W119LHIpO3YgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh2LnRoZW4oXz0+e18uaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi4kZShkLF8uaXNzdWVzKSksby52YWx1ZVtnXT1fLnZhbHVlfSkpOih2Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uJGUoZCx2Lmlzc3VlcykpLG8udmFsdWVbZ109di52YWx1ZSl9bGV0IHU7Zm9yKGNvbnN0IGQgaW4gcylpZighbC5oYXMoZCkpaWYodC5tb2RlPT09Imxvb3NlIil7aWYoZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO28udmFsdWVbZF09c1tkXX1lbHNlIHU9dT8/W10sdS5wdXNoKGQpO3UmJnUubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOnUsY29udGludWU6ITB9KX1lbHNle28udmFsdWU9bj9uLmFsbG9jKGUsbyx7fSxyKTp7fTtsZXQgbDtmb3IoY29uc3QgdSBvZiBSZWZsZWN0Lm93bktleXMocykpe2lmKHU9PT0iX19wcm90b19fInx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLHUpKWNvbnRpbnVlO2xldCBkPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2lmKGQgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2lmKHR5cGVvZiB1PT0ic3RyaW5nIiYmc3IudGVzdCh1KSYmZC5pc3N1ZXMubGVuZ3RoKXtjb25zdCBfPXQua2V5VHlwZS5fem9kLnJ1bih7dmFsdWU6TnVtYmVyKHUpLGlzc3VlczpbXX0scik7aWYoXyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7Xy5pc3N1ZXMubGVuZ3RoPT09MCYmKGQ9Xyl9aWYoZC5pc3N1ZXMubGVuZ3RoKXt0Lm1vZGU9PT0ibG9vc2UiP28udmFsdWVbdV09c1t1XTppPyhsPWw/P1tdLGwucHVzaCh1KSk6by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6ZC5pc3N1ZXMubWFwKF89PnplKF8scixvZSgpKSksaW5wdXQ6dSxwYXRoOlt1XSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPWQudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IHY9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbdV0saXNzdWVzOltdfSxyKTt2IGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2godi50aGVuKF89PntfLmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uJGUodSxfLmlzc3VlcykpLG8udmFsdWVbZ109Xy52YWx1ZX0pKToodi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLiRlKHUsdi5pc3N1ZXMpKSxvLnZhbHVlW2ddPXYudmFsdWUpfWwmJmwubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOmwsY29udGludWU6ITB9KX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+byk6b319KSxVcD1wKCIkWm9kTWFwIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49ZGUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBNYXApKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibWFwIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBhPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgTWFwLHIpOm5ldyBNYXA7Y29uc3QgaT1yPy5hYm9ydEVhcmx5O2xldCBsPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3RbdSxkXW9mIHMpe2lmKGkmJm8uaXNzdWVzLmxlbmd0aCE9PWwpe2lmKGZlKG8sbCkpYnJlYWs7bD1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgZj10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKSxnPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpkLGlzc3VlczpbXX0scik7ZiBpbnN0YW5jZW9mIFByb21pc2V8fGcgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChQcm9taXNlLmFsbChbZixnXSkudGhlbigoW3YsX10pPT57enUodixfLG8sdSxzLGUscil9KSk6enUoZixnLG8sdSxzLGUscil9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24genUoZSx0LG4sbyxyLHMsYSl7ZS5pc3N1ZXMubGVuZ3RoJiYoQ28uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLiRlKG8sZS5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJtYXAiLGlucHV0OnIsaW5zdDpzLGlzc3VlczplLmlzc3Vlcy5tYXAoaT0+emUoaSxhLG9lKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihDby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4uJGUobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoaT0+emUoaSxhLG9lKCkpKX0pKSxuLnZhbHVlLnNldChlLnZhbHVlLHQudmFsdWUpfWNvbnN0IEhwPXAoIiRab2RTZXQiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1kZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCEocyBpbnN0YW5jZW9mIFNldCkpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2lucHV0OnMsaW5zdDplLGV4cGVjdGVkOiJzZXQiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxvO2NvbnN0IGE9W107by52YWx1ZT1uP24uYWxsb2MoZSxvLG5ldyBTZXQscik6bmV3IFNldDtjb25zdCBpPXI/LmFib3J0RWFybHk7bGV0IGw9by5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCB1IG9mIHMpe2lmKGkmJm8uaXNzdWVzLmxlbmd0aCE9PWwpe2lmKGZlKG8sbCkpYnJlYWs7bD1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgZD10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2QgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChkLnRoZW4oZj0+VHUoZixvKSkpOlR1KGQsbyl9cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gVHUoZSx0KXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZS5pc3N1ZXMpLHQudmFsdWUuYWRkKGUudmFsdWUpfWNvbnN0IEZwPXAoIiRab2RFbnVtIiwoZSx0KT0+e1AuaW5pdChlLHQpO2NvbnN0IG49enModC5lbnRyaWVzKSxvPW5ldyBTZXQobik7ZS5fem9kLnZhbHVlcz1vLFIoZSwicGF0dGVybiIscj0+e2NvbnN0IHM9enMoci5kZWYuZW50cmllcykuZmlsdGVyKGE9PkNvLmhhcyh0eXBlb2YgYSkpO3JldHVybiBuZXcgUmVnRXhwKHMubGVuZ3RoP2BeKCR7cy5tYXAoYT0+WmUoYS50b1N0cmluZygpKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGE9ci52YWx1ZTtyZXR1cm4gby5oYXMoYSl8fHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczpuLGlucHV0OmEsaW5zdDplfSkscn19KSxWcD1wKCIkWm9kTGl0ZXJhbCIsKGUsdCk9PntQLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC52YWx1ZXMpO2UuX3pvZC52YWx1ZXM9bixSKGUsInBhdHRlcm4iLG89Pntjb25zdCByPW8uZGVmLnZhbHVlcztyZXR1cm4gbmV3IFJlZ0V4cChyLmxlbmd0aD9gXigke3IubWFwKHM9PnR5cGVvZiBzPT0ic3RyaW5nIj9aZShzKTpzP1plKHMudG9TdHJpbmcoKSk6U3RyaW5nKHMpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO3JldHVybiBuLmhhcyhzKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQudmFsdWVzLGlucHV0OnMsaW5zdDplfSksb319KSxKcD1wKCIkWm9kRmlsZSIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHIgaW5zdGFuY2VvZiBGaWxlfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZmlsZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksS3A9cCgiJFpvZFRyYW5zZm9ybSIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2Qub3B0aW49Im9wdGlvbmFsIixkZS5tZW1vaXplcj8uZ3VhcmQoZSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBYbyhlLmNvbnN0cnVjdG9yLm5hbWUpO2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtpZihvLmFzeW5jKXJldHVybihyIGluc3RhbmNlb2YgUHJvbWlzZT9yOlByb21pc2UucmVzb2x2ZShyKSkudGhlbihhPT4obi52YWx1ZT1hLG4pKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgVmU7cmV0dXJuIG4udmFsdWU9cixufX0pO2Z1bmN0aW9uIEl1KGUsdCl7cmV0dXJuIGUudmFsdWU9dC5pc3N1ZXMubGVuZ3RoP3ZvaWQgMDp0LnZhbHVlLGV9Y29uc3Qgemk9cCgiJFpvZE9wdGlvbmFsIiwoZSx0KT0+e1AuaW5pdChlLHQpLFIoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluPT09ImRlZmF1bHRlZCI/ImRlZmF1bHRlZCI6Im9wdGlvbmFsIiksZS5fem9kLm9wdG91dD0ib3B0aW9uYWwiLFIoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ubyx2b2lkIDBdKTp2b2lkIDB9KSxSKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke0ZlKG8uc291cmNlKX0pPyRgKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihuLnZhbHVlPT09dm9pZCAwKXtpZih0LmlubmVyVHlwZS5fem9kLm9wdGluIT09ImRlZmF1bHRlZCIpcmV0dXJuIG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+SXUobixzKSk6SXUobixyKX1yZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX19KSxXcD1wKCIkWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9Pnt6aS5pbml0KGUsdCksUihlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksUihlLCJwYXR0ZXJuIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuKSxlLl96b2QucGFyc2U9KG4sbyk9PnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxHcD1wKCIkWm9kTnVsbGFibGUiLChlLHQpPT57UC5pbml0KGUsdCksUihlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4pLFIoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLFIoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7RmUoby5zb3VyY2UpfXxudWxsKSRgKTp2b2lkIDB9KSxSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzP25ldyBTZXQoWy4uLm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyxudWxsXSk6dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9Pm4udmFsdWU9PT1udWxsP246dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLFFwPXAoIiRab2REZWZhdWx0IiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7aWYobi52YWx1ZT09PXZvaWQgMClyZXR1cm4gbi52YWx1ZT10LmRlZmF1bHRWYWx1ZSxuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9Pnh1KHMsdCkpOnh1KHIsdCl9fSk7ZnVuY3Rpb24geHUoZSx0KXtyZXR1cm4gZS52YWx1ZT09PXZvaWQgMCYmKGUudmFsdWU9dC5kZWZhdWx0VmFsdWUpLGV9Y29uc3QgWXA9cCgiJFpvZFByZWZhdWx0IiwoZSx0KT0+e1AuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0iZGVmYXVsdGVkIixSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCJ8fG4udmFsdWU9PT12b2lkIDAmJihuLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSx0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pKX0pLFhwPXAoIiRab2ROb25PcHRpb25hbCIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm9dLmZpbHRlcihyPT5yIT09dm9pZCAwKSk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UHUocyxlKSk6UHUocixlKX19KTtmdW5jdGlvbiBQdShlLHQpe3JldHVybiFlLmlzc3Vlcy5sZW5ndGgmJmUudmFsdWU9PT12b2lkIDAmJmUuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im5vbm9wdGlvbmFsIixpbnB1dDplLnZhbHVlLGluc3Q6dH0pLGV9Y29uc3QgZWg9cCgiJFpvZFN1Y2Nlc3MiLChlLHQpPT57UC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBYbygiWm9kU3VjY2VzcyIpO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMuaXNzdWVzLmxlbmd0aD09PTAsbikpOihuLnZhbHVlPXIuaXNzdWVzLmxlbmd0aD09PTAsbil9fSk7ZnVuY3Rpb24gQ3UoZSx0LG4sbyl7cmV0dXJuIHQuaXNzdWVzLmxlbmd0aD8oZS52YWx1ZT1uLmNhdGNoVmFsdWUoey4uLnQsdmFsdWU6ZS52YWx1ZSxlcnJvcjp7aXNzdWVzOnQuaXNzdWVzLm1hcChyPT56ZShyLG8sb2UoKSkpfSxpbnB1dDplLnZhbHVlfSksZSk6KGUudmFsdWU9dC52YWx1ZSx0Lm1lbW8mJihlLm1lbW89ITApLGUpfWNvbnN0IHRoPXAoIiRab2RDYXRjaCIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLFIoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLFIoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5DdShuLHMsdCxvKSk6Q3UobixyLHQsbyl9fSksbmg9cCgiJFpvZE5hTiIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PigodHlwZW9mIG4udmFsdWUhPSJudW1iZXIifHwhTnVtYmVyLmlzTmFOKG4udmFsdWUpKSYmbi5pc3N1ZXMucHVzaCh7aW5wdXQ6bi52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6Im5hbiIsY29kZToiaW52YWxpZF90eXBlIn0pLG4pfSksVGk9cCgiJFpvZFBpcGUiLChlLHQpPT57UC5pbml0KGUsdCksUihlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxSKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxSKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxSKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT52byhhLHQuaW4sbykpOnZvKHMsdC5pbixvKX1jb25zdCByPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PnZvKHMsdC5vdXQsbykpOnZvKHIsdC5vdXQsbyl9fSk7ZnVuY3Rpb24gdm8oZSx0LG4pe3JldHVybiBlLmlzc3Vlcy5zb21lKG89Pm8uY29kZSE9PSJ1bnJlY29nbml6ZWRfa2V5cyIpPyhlLmFib3J0ZWQ9ITAsZSk6dC5fem9kLnJ1bih7dmFsdWU6ZS52YWx1ZSxpc3N1ZXM6ZS5pc3N1ZXN9LG4pfWNvbnN0IElpPXAoIiRab2RDb2RlYyIsKGUsdCk9PntQLmluaXQoZSx0KSxSKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLFIoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLFIoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLFIoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZigoby5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHM9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oYT0+eW8oYSx0LG8pKTp5byhzLHQsbyl9ZWxzZXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihhPT55byhhLHQsbykpOnlvKHMsdCxvKX19fSk7ZnVuY3Rpb24geW8oZSx0LG4pe2lmKGUuaXNzdWVzLmxlbmd0aClyZXR1cm4gZS5hYm9ydGVkPSEwLGU7aWYoKG4uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCByPXQudHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5fbyhlLHMsdC5vdXQsbikpOl9vKGUscix0Lm91dCxuKX1lbHNle2NvbnN0IHI9dC5yZXZlcnNlVHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5fbyhlLHMsdC5pbixuKSk6X28oZSxyLHQuaW4sbil9fWZ1bmN0aW9uIF9vKGUsdCxuLG8pe3JldHVybiBlLmlzc3Vlcy5sZW5ndGg/KGUuYWJvcnRlZD0hMCxlKTpuLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczplLmlzc3Vlc30sbyl9Y29uc3Qgb2g9cCgiJFpvZFByZXByb2Nlc3MiLChlLHQpPT57VGkuaW5pdChlLHQpfSkscmg9cCgiJFpvZFJlYWRvbmx5IiwoZSx0KT0+e1AuaW5pdChlLHQpLFIoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcyksUihlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksUihlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbiksUihlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4oRXUpOkV1KHIpfX0pO2Z1bmN0aW9uIEV1KGUpe3JldHVybiBlLm1lbW98fChlLnZhbHVlPU9iamVjdC5mcmVlemUoZS52YWx1ZSkpLGV9ZnVuY3Rpb24gUmcoZSl7Y29uc3QgdD1lLl96b2QuZGVmO2xldCBuPXQucGF0dGVybixvPSEhdC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxyLHM7Zm9yKGNvbnN0IGkgb2YgdC5jaGVja3M/P1tdKXtjb25zdCBsPWkuX3pvZC5kZWY7bC5wYXR0ZXJuJiYobj1sLnBhdHRlcm4pLG98fChvPSEhbC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSk7Y29uc3QgdT1sLm1pbmltdW0/P2wubGVuZ3RoLGQ9bC5tYXhpbXVtPz9sLmxlbmd0aDt1IT09dm9pZCAwJiYocj09PXZvaWQgMHx8dT5yKSYmKHI9dSksZCE9PXZvaWQgMCYmKHM9PT12b2lkIDB8fGQ8cykmJihzPWQpfWlmKG4pcmV0dXJuIG4uc291cmNlO2lmKHIhPT12b2lkIDAmJnMhPT12b2lkIDAmJnI+cylyZXR1cm4iKD8hKSI7aWYociE9PXZvaWQgMHx8cyE9PXZvaWQgMClyZXR1cm4gdWQoe21pbmltdW06cixtYXhpbXVtOnN9KS5zb3VyY2U7Y29uc3QgYT1lLl96b2QucGF0dGVybjtyZXR1cm4obyYmYT09PXNyP2RkOmEpPy5zb3VyY2V9ZnVuY3Rpb24gT3MoZSl7Y29uc3QgdD1lLl96b2QuZGVmLG49ZS5fem9kLnBhdHRlcm4/LnNvdXJjZSxvPXQuaW5uZXJUeXBlPz9lLl96b2QuaW5uZXJUeXBlO2lmKG8pe2NvbnN0IHI9by5fem9kLnBhdHRlcm4/LnNvdXJjZSxzPU9zKG8pO3JldHVybiBuJiZyJiZzJiZzIT09cj9uLnJlcGxhY2UoRmUociksKCk9PkZlKHMpKTpufWlmKHQub3B0aW9ucyl7Y29uc3Qgcj10Lm9wdGlvbnMubWFwKE9zKTtpZihyLmV2ZXJ5KEJvb2xlYW4pKXJldHVybmBeKCR7ci5tYXAocz0+RmUocykpLmpvaW4oInwiKX0pJGB9cmV0dXJuIFJnKGUpfWNvbnN0IHNoPXAoIiRab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57UC5pbml0KGUsdCk7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0LnBhcnRzKWlmKHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwpe2NvbnN0IHI9T3Mobyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydCwgbm8gcGF0dGVybiBmb3VuZDogJHtbLi4uby5fem9kLnRyYWl0c10uc2hpZnQoKX1gKTtuLnB1c2goRmUocikpfWVsc2UgaWYobz09PW51bGx8fGZsLmhhcyh0eXBlb2Ygbykpbi5wdXNoKFplKGAke299YCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtvfWApO2UuX3pvZC5wYXR0ZXJuPW5ldyBSZWdFeHAoYF4ke24uam9pbigiIil9JGApLGUuX3pvZC5wYXJzZT0obyxyKT0+dHlwZW9mIG8udmFsdWUhPSJzdHJpbmciPyhvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbyk6KGUuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleD0wLGUuX3pvZC5wYXR0ZXJuLnRlc3Qoby52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQ/PyJ0ZW1wbGF0ZV9saXRlcmFsIixwYXR0ZXJuOmUuX3pvZC5wYXR0ZXJuLnNvdXJjZX0pLG8pfSksaWg9cCgiJFpvZEZ1bmN0aW9uIiwoZSx0KT0+KFAuaW5pdChlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfZGVmIix7dmFsdWU6dH0pLGUuX3pvZC5kZWY9dCxlLmltcGxlbWVudD1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P1BzKGUuX2RlZi5pbnB1dCxvKTpvLHM9UmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/UHMoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuaW1wbGVtZW50QXN5bmM9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jIGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P2F3YWl0IENzKGUuX2RlZi5pbnB1dCxvKTpvLHM9YXdhaXQgUmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/YXdhaXQgQ3MoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuX3pvZC5wYXJzZT0obixvKT0+dHlwZW9mIG4udmFsdWUhPSJmdW5jdGlvbiI/KG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ImZ1bmN0aW9uIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pOihlLl9kZWYub3V0cHV0JiZlLl9kZWYub3V0cHV0Ll96b2QuZGVmLnR5cGU9PT0icHJvbWlzZSI/bi52YWx1ZT1lLmltcGxlbWVudEFzeW5jKG4udmFsdWUpOm4udmFsdWU9ZS5pbXBsZW1lbnQobi52YWx1ZSksbiksZS5pbnB1dD0oLi4ubik9Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIEFycmF5LmlzQXJyYXkoblswXSk/bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuZXcgU2koe3R5cGU6InR1cGxlIixpdGVtczpuWzBdLHJlc3Q6blsxXX0pLG91dHB1dDplLl9kZWYub3V0cHV0fSk6bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuWzBdLG91dHB1dDplLl9kZWYub3V0cHV0fSl9LGUub3V0cHV0PW49Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6ZS5fZGVmLmlucHV0LG91dHB1dDpufSl9LGUpKSxhaD1wKCIkWm9kUHJvbWlzZSIsKGUsdCk9PntQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PlByb21pc2UucmVzb2x2ZShuLnZhbHVlKS50aGVuKHI9PnQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbykpfSkseGk9cCgiJFpvZExhenkiLChlLHQpPT57UC5pbml0KGUsdCksY2woZS5fem9kLCJpbm5lclR5cGUiLCgpPT57Y29uc3Qgbj10O3JldHVybiBuLl9jYWNoZWRJbm5lcnx8KG4uX2NhY2hlZElubmVyPXQuZ2V0dGVyKCkpLG4uX2NhY2hlZElubmVyfSksUihlLCJwYXR0ZXJuIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucGF0dGVybiksUihlLCJwcm9wVmFsdWVzIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucHJvcFZhbHVlcyksUihlLCJvcHRpbiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluPz92b2lkIDApLFIoZSwib3B0b3V0IixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0Pz92b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+ZS5fem9kLmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksY2g9cCgiJFpvZEN1c3RvbSIsKGUsdCk9PntLLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pm4sZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPW4udmFsdWUscj10LmZuKG8pO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiByLnRoZW4ocz0+QXUocyxuLG8sZSkpO0F1KHIsbixvLGUpfX0pO2Z1bmN0aW9uIEF1KGUsdCxuLG8pe2lmKCFlKXtjb25zdCByPXtjb2RlOiJjdXN0b20iLGlucHV0Om4saW5zdDpvLHBhdGg6Wy4uLm8uX3pvZC5kZWYucGF0aD8/W11dLGNvbnRpbnVlOiFvLl96b2QuZGVmLmFib3J0fTtvLl96b2QuZGVmLnBhcmFtcyYmKHIucGFyYW1zPW8uX3pvZC5kZWYucGFyYW1zKSx0Lmlzc3Vlcy5wdXNoKF90KHIpKX19Y2xhc3MgdWggZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW5ub3QgcGFyc2UgYSByZWZlcmVuY2UgY3ljbGUgdGhhdCBjbG9zZXMgdGhyb3VnaCBhIHRyYW5zZm9ybSIpLHRoaXMubmFtZT0iWm9kQ3ljbGljRXJyb3IifX1jb25zdCBScz0ifm1lbW8iLE91PVtdO2Z1bmN0aW9uIGxoKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIF9zKGUpe3JldHVybiBlLm1hcCh0PT50LnBhdGg/ey4uLnQscGF0aDp0LnBhdGguc2xpY2UoKX06ey4uLnR9KX1jb25zdCBkaD1uZXcgV2Vha01hcCxtdD0wLHpvPTEsWXQ9MjtmdW5jdGlvbiBYdChlLHQsbil7Y29uc3Qgbz1kaC5nZXQoZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gbz9ZdDptdDtpZih0LmhhcyhlKSlyZXR1cm4gWXQ7dC5hZGQoZSk7bGV0IHI9bXQ7Y29uc3Qgcz1kPT57aWYociE9PVl0JiZkPy5fem9kKXtjb25zdCBmPVh0KGQsdCxuKTtmPnImJihyPWYpfX0sYT0oZCxmKT0+e2xldCBnPW10O2Zvcihjb25zdCB2IG9mIFJlZmxlY3Qub3duS2V5cyhkKSl7Y29uc3QgXz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsdik7aWYoIV8uZW51bWVyYWJsZSljb250aW51ZTtjb25zdCAkPV8uZ2V0P3pvOl8udmFsdWU/Ll96b2Q/WHQoXy52YWx1ZSx0LG4pOm10OyQ+ZyYmKGc9JCl9cmV0dXJuIGd9LGk9ZD0+e2Q+ciYmKHI9ZCl9LGw9ZS5fem9kLmRlZjtzd2l0Y2gobC50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGQ9Vm8obCk7aShkP2EoZCk6em8pLHMobC5jYXRjaGFsbCk7YnJlYWt9Y2FzZSJhcnJheSI6cyhsLmVsZW1lbnQpO2JyZWFrO2Nhc2UidHVwbGUiOmZvcihjb25zdCBkIG9mIGwuaXRlbXMpcyhkKTtzKGwucmVzdCk7YnJlYWs7Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjpzKGwua2V5VHlwZSkscyhsLnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJzZXQiOnMobC52YWx1ZVR5cGUpO2JyZWFrO2Nhc2UidW5pb24iOmZvcihjb25zdCBkIG9mIGwub3B0aW9ucylzKGQpO2JyZWFrO2Nhc2UiaW50ZXJzZWN0aW9uIjpzKGwubGVmdCkscyhsLnJpZ2h0KTticmVhaztjYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjpzKGwuaW5uZXJUeXBlKTticmVhaztjYXNlInBpcGUiOnMobC5pbikscyhsLm91dCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cyhsLmlucHV0KSxzKGwub3V0cHV0KTticmVhaztjYXNlImxhenkiOntjb25zdCBkPWwuX2NhY2hlZElubmVyPz8obj9lLl96b2QuaW5uZXJUeXBlOnZvaWQgMCk7aShkP1h0KGQsdCwhMSk6em8pO2JyZWFrfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpicmVhaztkZWZhdWx0OmZvcihjb25zdCBkIGluIGwpe2NvbnN0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGQpO2lmKCFmfHxmLmdldCljb250aW51ZTtjb25zdCBnPWYudmFsdWU7aWYoISghZ3x8dHlwZW9mIGchPSJvYmplY3QiKSl7aWYoZy5fem9kKXMoZyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGcpKWZvcihjb25zdCB2IG9mIGcpcyh2KX19fXJldHVybiB0LmRlbGV0ZShlKSxOZyhlLHIpfWZ1bmN0aW9uIE5nKGUsdCl7cmV0dXJuIHQhPT16byYmZGguc2V0KGUsdD09PVl0KSx0fWZ1bmN0aW9uIFpnKGUpe3JldHVybiBYdChlLG5ldyBTZXQsITApIT09bXR9ZnVuY3Rpb24gamcoZSx0KXtsZXQgbj1lLmJ1Y2tldHMuZ2V0KHQpO3JldHVybiBufHwobj1uZXcgV2Vha01hcCxlLmJ1Y2tldHMuc2V0KHQsbikpLG59bGV0IGtvO2NvbnN0ICRvPVtdLE1nPXthbGxvYyhlLHQsbil7Y29uc3Qgbz1rbztpZighbylyZXR1cm4gbjtrbz12b2lkIDA7Y29uc3Qgcj17dmFsdWU6bixpc3N1ZXM6bnVsbH07cmV0dXJuIG8uc2V0KHQudmFsdWUsciksJG8ucHVzaChyKSxufSxndWFyZChlKXt2YXIgdDsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBuPWUuX3pvZC5wYXJzZSxvPShyLHMpPT57aWYocy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiJiZwaChzLHIudmFsdWUpKXRocm93IG5ldyB1aDtyZXR1cm4gbihyLHMpfTtlLl96b2QucGFyc2U9byxlLl96b2QucnVuPT09biYmKGUuX3pvZC5ydW49byl9KX0sYXR0YWNoKGUpe3ZhciB0O2xldCBuLG89ITEscixzOyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IGE9ZS5fem9kLnBhcnNlLGk9KGwsdSk9PntpZihuPT09dm9pZCAwKXtjb25zdCBqPVh0KGUsbmV3IFNldCwhMSk7aWYoaj09PW10KXJldHVybiBlLl96b2QucGFyc2U9YSxlLl96b2QucnVuPT09aSYmKGUuX3pvZC5ydW49YSksYShsLHUpO2o9PT1ZdHx8bz9uPSEwOm89ITB9Y29uc3QgZD1sLnZhbHVlO2lmKCFsaChkKSlyZXR1cm4gYShsLHUpO2xldCBmPXVbUnNdO2Z8fChmPXtidWNrZXRzOm5ldyBXZWFrTWFwLGJhY2tFZGdlczp2b2lkIDB9LHVbUnNdPWYpO2xldCBnO3I9PT11P2c9czooZz1qZyhmLGUpLHI9dSxzPWcpO2NvbnN0IHY9Zy5nZXQoZCk7aWYodilyZXR1cm4gbC52YWx1ZT12LnZhbHVlLHYuaXNzdWVzP3YuaXNzdWVzLmxlbmd0aCYmbC5pc3N1ZXMucHVzaCguLi5fcyh2Lmlzc3VlcykpOihsLm1lbW89ITAsZi5iYWNrRWRnZXM/PyhmLmJhY2tFZGdlcz1uZXcgV2Vha1NldCksZi5iYWNrRWRnZXMuYWRkKHYudmFsdWUpKSxsO2tvPWc7Y29uc3QgXz0kby5sZW5ndGgsJD1hKGwsdSk7a289dm9pZCAwO2NvbnN0IFM9JG8ubGVuZ3RoPl8/JG8ucG9wKCk6dm9pZCAwO3JldHVybiAkIGluc3RhbmNlb2YgUHJvbWlzZT8kLnRoZW4oaj0+KFMmJihTLmlzc3Vlcz1qLmlzc3Vlcy5sZW5ndGg/X3Moai5pc3N1ZXMpOk91KSxqKSk6KFMmJihTLmlzc3Vlcz0kLmlzc3Vlcy5sZW5ndGg/X3MoJC5pc3N1ZXMpOk91KSwkKX07ZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpfSl9fTtmdW5jdGlvbiBjcigpe3JldHVybiBNZ31mdW5jdGlvbiBwaChlLHQpe2NvbnN0IG49ZVtSc10/LmJhY2tFZGdlcztyZXR1cm4gbiE9PXZvaWQgMCYmbGgodCkmJm4uaGFzKHQpfWNvbnN0IHFnPSgpPT57Y29uc3QgZT17c3RyaW5nOnt1bml0OiJjaGFyYWN0ZXJzIix2ZXJiOiJ0byBoYXZlIn0sZmlsZTp7dW5pdDoiYnl0ZXMiLHZlcmI6InRvIGhhdmUifSxhcnJheTp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxzZXQ6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sbWFwOnt1bml0OiJlbnRyaWVzIix2ZXJiOiJ0byBoYXZlIn19O2Z1bmN0aW9uIHQocyl7cmV0dXJuIGVbc10/P251bGx9Y29uc3Qgbj17cmVnZXg6ImlucHV0IixlbWFpbDoiZW1haWwgYWRkcmVzcyIsdXJsOiJVUkwiLGVtb2ppOiJlbW9qaSIsdXVpZDoiVVVJRCIsdXVpZHY0OiJVVUlEdjQiLHV1aWR2NjoiVVVJRHY2IixuYW5vaWQ6Im5hbm9pZCIsZ3VpZDoiR1VJRCIsY3VpZDoiY3VpZCIsY3VpZDI6ImN1aWQyIix1bGlkOiJVTElEIix4aWQ6IlhJRCIsa3N1aWQ6IktTVUlEIixkYXRldGltZToiSVNPIGRhdGV0aW1lIixkYXRlOiJJU08gZGF0ZSIsdGltZToiSVNPIHRpbWUiLGR1cmF0aW9uOiJJU08gZHVyYXRpb24iLGlwdjQ6IklQdjQgYWRkcmVzcyIsaXB2NjoiSVB2NiBhZGRyZXNzIixtYWM6Ik1BQyBhZGRyZXNzIixjaWRydjQ6IklQdjQgcmFuZ2UiLGNpZHJ2NjoiSVB2NiByYW5nZSIsYmFzZTY0OiJiYXNlNjQtZW5jb2RlZCBzdHJpbmciLGJhc2U2NHVybDoiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nIixqc29uX3N0cmluZzoiSlNPTiBzdHJpbmciLGUxNjQ6IkUuMTY0IG51bWJlciIsY3VycmVuY3lfY29kZToiY3VycmVuY3kgY29kZSIsY3JlZGl0X2NhcmQ6ImNyZWRpdCBjYXJkIG51bWJlciIsaWJhbjoiSUJBTiIsand0OiJKV1QiLHRlbXBsYXRlX2xpdGVyYWw6ImlucHV0In0sbz17bmFuOiJOYU4ifTtmdW5jdGlvbiByKHMsYSl7cmV0dXJuIHM9PT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiYhTnVtYmVyLmlzRmluaXRlKGEpP1N0cmluZyhhKTpvW3NdPz9zfXJldHVybiBzPT57c3dpdGNoKHMuY29kZSl7Y2FzZSJpbnZhbGlkX3R5cGUiOntjb25zdCBhPXIocy5leHBlY3RlZCksaT1UbChzLmlucHV0KSxsPXIoaSxzLmlucHV0KTtyZXR1cm5gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHthfSwgcmVjZWl2ZWQgJHtsfWB9Y2FzZSJpbnZhbGlkX3ZhbHVlIjpyZXR1cm4gcy52YWx1ZXMubGVuZ3RoPT09MT9gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtWcyhzLnZhbHVlc1swXSl9YDpgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke1RzKHMudmFsdWVzLCJ8Iil9YDtjYXNlInRvb19iaWciOntjb25zdCBhPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPD0iOiI8IixpPXQocy5vcmlnaW4pO3JldHVybiBpP2BUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBoYXZlICR7YX0ke3MubWF4aW11bS50b1N0cmluZygpfSAke2kudW5pdD8/ImVsZW1lbnRzIn1gOmBUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBiZSAke2F9JHtzLm1heGltdW0udG9TdHJpbmcoKX1gfWNhc2UidG9vX3NtYWxsIjp7Y29uc3QgYT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ij49IjoiPiIsaT10KHMub3JpZ2luKTtyZXR1cm4gaT9gVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBoYXZlICR7YX0ke3MubWluaW11bS50b1N0cmluZygpfSAke2kudW5pdH1gOmBUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGJlICR7YX0ke3MubWluaW11bS50b1N0cmluZygpfWB9Y2FzZSJpbnZhbGlkX2Zvcm1hdCI6e2NvbnN0IGE9cztyZXR1cm4gYS5mb3JtYXQ9PT0ic3RhcnRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBzdGFydCB3aXRoICIke2EucHJlZml4fSJgOmEuZm9ybWF0PT09ImVuZHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGVuZCB3aXRoICIke2Euc3VmZml4fSJgOmEuZm9ybWF0PT09ImluY2x1ZGVzIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgaW5jbHVkZSAiJHthLmluY2x1ZGVzfSJgOmEuZm9ybWF0PT09InJlZ2V4Ij9gSW52YWxpZCBzdHJpbmc6IG11c3QgbWF0Y2ggcGF0dGVybiAke2EucGF0dGVybn1gOmBJbnZhbGlkICR7blthLmZvcm1hdF0/P3MuZm9ybWF0fWB9Y2FzZSJub3RfbXVsdGlwbGVfb2YiOnJldHVybmBJbnZhbGlkIG51bWJlcjogbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7cy5kaXZpc29yfWA7Y2FzZSJ1bnJlY29nbml6ZWRfa2V5cyI6cmV0dXJuYFVucmVjb2duaXplZCBrZXkke3Mua2V5cy5sZW5ndGg+MT8icyI6IiJ9OiAke1RzKHMua2V5cywiLCAiKX1gO2Nhc2UiaW52YWxpZF9rZXkiOnJldHVybmBJbnZhbGlkIGtleSBpbiAke3Mub3JpZ2lufWA7Y2FzZSJpbnZhbGlkX3VuaW9uIjpyZXR1cm4gcy5vcHRpb25zJiZBcnJheS5pc0FycmF5KHMub3B0aW9ucykmJnMub3B0aW9ucy5sZW5ndGg+MD9gSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3Mub3B0aW9ucy5tYXAoaT0+YCcke2l9J2ApLmpvaW4oIiB8ICIpfWA6cy5pbmNsdXNpdmU9PT0hMT8iSW52YWxpZCBpbnB1dDogbW9yZSB0aGFuIG9uZSBvcHRpb24gbWF0Y2hlZCI6IkludmFsaWQgaW5wdXQiO2Nhc2UiaW52YWxpZF9lbGVtZW50IjpyZXR1cm5gSW52YWxpZCB2YWx1ZSBpbiAke3Mub3JpZ2lufWA7ZGVmYXVsdDpyZXR1cm4iSW52YWxpZCBpbnB1dCJ9fX07ZnVuY3Rpb24gaGgoKXtyZXR1cm57bG9jYWxlRXJyb3I6cWcoKX19Y29uc3QgUGk9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuOmhofSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBSdTtjb25zdCBDaT1TeW1ib2woIlpvZE91dHB1dCIpLEVpPVN5bWJvbCgiWm9kSW5wdXQiKTtjbGFzcyBmaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwfWFkZCh0LC4uLm4pe2NvbnN0IG89blswXTtyZXR1cm4gdGhpcy5fbWFwLnNldCh0LG8pLG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmImlkImluIG8mJnRoaXMuX2lkbWFwLnNldChvLmlkLHQpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXAsdGhpc31yZW1vdmUodCl7Y29uc3Qgbj10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBuJiZ0eXBlb2Ygbj09Im9iamVjdCImJiJpZCJpbiBuJiZ0aGlzLl9pZG1hcC5kZWxldGUobi5pZCksdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzfWdldCh0KXtjb25zdCBuPXQuX3pvZC5wYXJlbnQ7aWYobil7Y29uc3Qgbz17Li4udGhpcy5nZXQobik/P3t9fTtkZWxldGUgby5pZDtjb25zdCByPXsuLi5vLC4uLnRoaXMuX21hcC5nZXQodCl9O3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg/cjp2b2lkIDB9cmV0dXJuIHRoaXMuX21hcC5nZXQodCl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfX1mdW5jdGlvbiB1cigpe3JldHVybiBuZXcgZmh9KFJ1PWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbFJlZ2lzdHJ5Pz8oUnUuX196b2RfZ2xvYmFsUmVnaXN0cnk9dXIoKSk7Y29uc3Qgd2U9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxSZWdpc3RyeSxBaT0oKT0+e3Rocm93IG5ldyBFcnJvcigiem9kIGNvbXBpbGUoKSBpcyBub3QgYnVuZGxlZCBpbnRvIGNhcmRzIC0gc2VlIHBhY2thZ2VzL2ludGVybmFsL2NhcmQta2l0L3ZpdGUtc2xpbS5tanMiKX07Y2xhc3MgT2kgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgUmkgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgTmkgZXh0ZW5kcyBFcnJvcnt9Y29uc3QgWmk9QWksamk9QWksRGc9QWk7ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIGUuY2hlY2tzJiYoZS5jaGVja3M9Wy4uLmUuY2hlY2tzXSksZX1mdW5jdGlvbiBtaChlLHQpe3JldHVybiBuZXcgZShscih7dHlwZToic3RyaW5nIiwuLi55KHQpfSkpfWZ1bmN0aW9uIGdoKGUsdCl7cmV0dXJuIG5ldyBlKGxyKHt0eXBlOiJzdHJpbmciLGNvZXJjZTohMCwuLi55KHQpfSkpfWZ1bmN0aW9uIE1pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1haWwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJndWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBMaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY2IiwuLi55KHQpfSl9ZnVuY3Rpb24gVWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjciLC4uLnkodCl9KX1mdW5jdGlvbiBkcihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBIaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtb2ppIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibmFub2lkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFZpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBKaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQyIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidWxpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBXaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InhpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBHaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImtzdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFFpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBZaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gYmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJtYWMiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gWGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gZWEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gdGEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gbmEoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjR1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlMTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHZoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3JlZGl0X2NhcmQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24geWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpYmFuIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHJhKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiand0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWNvbnN0IHNhPXtBbnk6bnVsbCxNaW51dGU6LTEsU2Vjb25kOjAsTWlsbGlzZWNvbmQ6MyxNaWNyb3NlY29uZDo2fTtmdW5jdGlvbiBpYShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGV0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsb2Zmc2V0OiExLGxvY2FsOiExLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBhYShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi55KHQpfSl9ZnVuY3Rpb24gY2EoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIscHJlY2lzaW9uOm51bGwsLi4ueSh0KX0pfWZ1bmN0aW9uIHVhKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZHVyYXRpb24iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi55KHQpfSl9ZnVuY3Rpb24gX2goZSx0KXtyZXR1cm4gbmV3IGUobHIoe3R5cGU6Im51bWJlciIsY2hlY2tzOltdLC4uLnkodCl9KSl9ZnVuY3Rpb24ga2goZSx0KXtyZXR1cm4gbmV3IGUobHIoe3R5cGU6Im51bWJlciIsY29lcmNlOiEwLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uICRoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InNhZmVpbnQiLC4uLnkodCl9KX1mdW5jdGlvbiB3aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDMyIiwuLi55KHQpfSl9ZnVuY3Rpb24gU2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uIHpoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDMyIiwuLi55KHQpfSl9ZnVuY3Rpb24gVGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDMyIiwuLi55KHQpfSl9ZnVuY3Rpb24gSWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLC4uLnkodCl9KX1mdW5jdGlvbiB4aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBQaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24gQ2goZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBFaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEFoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQ2NCIsLi4ueSh0KX0pfWZ1bmN0aW9uIE9oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzeW1ib2wiLC4uLnkodCl9KX1mdW5jdGlvbiBSaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidW5kZWZpbmVkIiwuLi55KHQpfSl9ZnVuY3Rpb24gTmgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGwiLC4uLnkodCl9KX1mdW5jdGlvbiBaaChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFueSJ9KX1mdW5jdGlvbiBqaChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVua25vd24ifSl9ZnVuY3Rpb24gTWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5ldmVyIiwuLi55KHQpfSl9ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InZvaWQiLC4uLnkodCl9KX1mdW5jdGlvbiBEaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIExoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIixjb2VyY2U6ITAsLi4ueSh0KX0pfWZ1bmN0aW9uIEJoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuYW4iLC4uLnkodCl9KX1mdW5jdGlvbiBNZShlLHQpe3JldHVybiBuZXcgcGkoe2NoZWNrOiJsZXNzX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBiZShlLHQpe3JldHVybiBuZXcgcGkoe2NoZWNrOiJsZXNzX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBuZXcgaGkoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiB2ZShlLHQpe3JldHVybiBuZXcgaGkoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLnkodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBwcihlKXtyZXR1cm4gcWUoMCxlKX1mdW5jdGlvbiBocihlKXtyZXR1cm4gTWUoMCxlKX1mdW5jdGlvbiBmcihlKXtyZXR1cm4gYmUoMCxlKX1mdW5jdGlvbiBtcihlKXtyZXR1cm4gdmUoMCxlKX1mdW5jdGlvbiBydChlLHQpe3JldHVybiBuZXcgdmQoe2NoZWNrOiJtdWx0aXBsZV9vZiIsLi4ueSh0KSx2YWx1ZTplfSl9ZnVuY3Rpb24gbHQoZSx0KXtyZXR1cm4gbmV3IGtkKHtjaGVjazoibWF4X3NpemUiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gRGUoZSx0KXtyZXR1cm4gbmV3ICRkKHtjaGVjazoibWluX3NpemUiLC4uLnkodCksbWluaW11bTplfSl9ZnVuY3Rpb24gSXQoZSx0KXtyZXR1cm4gbmV3IHdkKHtjaGVjazoic2l6ZV9lcXVhbHMiLC4uLnkodCksc2l6ZTplfSl9ZnVuY3Rpb24geHQoZSx0KXtyZXR1cm4gbmV3IFNkKHtjaGVjazoibWF4X2xlbmd0aCIsLi4ueSh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBLZShlLHQpe3JldHVybiBuZXcgemQoe2NoZWNrOiJtaW5fbGVuZ3RoIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIG5ldyBUZCh7Y2hlY2s6Imxlbmd0aF9lcXVhbHMiLC4uLnkodCksbGVuZ3RoOmV9KX1mdW5jdGlvbiB3bihlLHQpe3JldHVybiBuZXcgSWQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IiwuLi55KHQpLHBhdHRlcm46ZX0pfWZ1bmN0aW9uIFNuKGUpe3JldHVybiBuZXcgeGQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6Imxvd2VyY2FzZSIsLi4ueShlKX0pfWZ1bmN0aW9uIHpuKGUpe3JldHVybiBuZXcgUGQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InVwcGVyY2FzZSIsLi4ueShlKX0pfWZ1bmN0aW9uIFRuKGUsdCl7cmV0dXJuIG5ldyBDZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLC4uLnkodCksaW5jbHVkZXM6ZX0pfWZ1bmN0aW9uIEluKGUsdCl7cmV0dXJuIG5ldyBFZCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLC4uLnkodCkscHJlZml4OmV9KX1mdW5jdGlvbiB4bihlLHQpe3JldHVybiBuZXcgQWQoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsLi4ueSh0KSxzdWZmaXg6ZX0pfWZ1bmN0aW9uIGdyKGUsdCxuKXtyZXR1cm4gbmV3IE9kKHtjaGVjazoicHJvcGVydHkiLHByb3BlcnR5OmUsc2NoZW1hOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFBuKGUsdCl7cmV0dXJuIG5ldyBSZCh7Y2hlY2s6InByb3BlcnRpZXMiLHNoYXBlOmUsLi4ueSh0KX0pfWZ1bmN0aW9uIENuKGUsdCl7cmV0dXJuIG5ldyBOZCh7Y2hlY2s6Im1pbWVfdHlwZSIsbWltZTplLC4uLnkodCl9KX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gbmV3IFpkKHtjaGVjazoib3ZlcndyaXRlIix0eDplfSl9ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIE9lKHQ9PnQubm9ybWFsaXplKGUpKX1mdW5jdGlvbiBBbigpe3JldHVybiBPZShlPT5lLnRyaW0oKSl9ZnVuY3Rpb24gT24oKXtyZXR1cm4gT2UoZT0+ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBSbigpe3JldHVybiBPZShlPT5lLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIE5uKCl7cmV0dXJuIE9lKGU9PnBsKGUpKX1mdW5jdGlvbiBVaChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJhcnJheSIsZWxlbWVudDp0LC4uLnkobil9KX1mdW5jdGlvbiBMZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LC4uLnkobil9KX1mdW5jdGlvbiBCZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGluY2x1c2l2ZTohMSwuLi55KG4pfSl9ZnVuY3Rpb24gVWcoZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczpuLGRpc2NyaW1pbmF0b3I6dCwuLi55KG8pfSl9ZnVuY3Rpb24gSGcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OnQscmlnaHQ6bn0pfWZ1bmN0aW9uIEZnKGUsdCxuLG8pe2NvbnN0IHI9biBpbnN0YW5jZW9mIFAscz1yP286bixhPXI/bjpudWxsO3JldHVybiBuZXcgZSh7dHlwZToidHVwbGUiLGl0ZW1zOnQscmVzdDphLC4uLnkocyl9KX1mdW5jdGlvbiBWZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLnkobyl9KX1mdW5jdGlvbiBKZyhlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im1hcCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLnkobyl9KX1mdW5jdGlvbiBLZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBXZyhlLHQsbil7Y29uc3Qgbz1BcnJheS5pc0FycmF5KHQpP09iamVjdC5mcm9tRW50cmllcyh0Lm1hcChyPT5bcixyXSkpOnQ7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm8sLi4ueShuKX0pfWZ1bmN0aW9uIEdnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gUWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkodCk/dDpbdF0sLi4ueShuKX0pfWZ1bmN0aW9uIEhoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJmaWxlIiwuLi55KHQpfSl9ZnVuY3Rpb24gWWcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOnR9KX1mdW5jdGlvbiBYZyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gZWIoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHRiKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTp0LGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/bigpOkpvKG4pfX0pfWZ1bmN0aW9uIG5iKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gb2IoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gcmIoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY2F0Y2giLGlubmVyVHlwZTp0LGNhdGNoVmFsdWU6dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpKcyhuKX0pfWZ1bmN0aW9uIHNiKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InBpcGUiLGluOnQsb3V0Om59KX1mdW5jdGlvbiBpYihlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gYWIoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gY2IoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxhenkiLGdldHRlcjp0fSl9ZnVuY3Rpb24gdWIoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gRmgoZSx0LG4pe2NvbnN0IG89eShuKTtyZXR1cm4gby5hYm9ydD8/KG8uYWJvcnQ9ITApLG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ub30pfWZ1bmN0aW9uIFZoKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi55KG4pfSl9ZnVuY3Rpb24gSmgoZSx0KXtjb25zdCBuPUtoKG89PihvLmFkZElzc3VlPXI9PntpZih0eXBlb2Ygcj09InN0cmluZyIpby5pc3N1ZXMucHVzaChfdChyLG8udmFsdWUsbi5fem9kLmRlZikpO2Vsc2V7Y29uc3Qgcz1yO3MuZmF0YWwmJihzLmNvbnRpbnVlPSExKSxzLmNvZGU/PyhzLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBzfHwocy5pbnB1dD1vLnZhbHVlKSxzLmluc3Q/PyhzLmluc3Q9bikscy5jb250aW51ZT8/KHMuY29udGludWU9IW4uX3pvZC5kZWYuYWJvcnQpLG8uaXNzdWVzLnB1c2goX3QocykpfX0sZShvLnZhbHVlLG8pKSx0KTtyZXR1cm4gbn1mdW5jdGlvbiBLaChlLHQpe2NvbnN0IG49bmV3IEsoe2NoZWNrOiJjdXN0b20iLC4uLnkodCl9KTtyZXR1cm4gbi5fem9kLmNoZWNrPWUsbn1mdW5jdGlvbiBXaChlKXtjb25zdCB0PW5ldyBLKHtjaGVjazoiZGVzY3JpYmUifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89d2UuZ2V0KG4pPz97fTt3ZS5hZGQobix7Li4ubyxkZXNjcmlwdGlvbjplfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gR2goZSl7Y29uc3QgdD1uZXcgSyh7Y2hlY2s6Im1ldGEifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89d2UuZ2V0KG4pPz97fTt3ZS5hZGQobix7Li4ubywuLi5lfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gUWgoZSx0KXtjb25zdCBuPXkodCk7bGV0IG89bi50cnV0aHk/P1sidHJ1ZSIsIjEiLCJ5ZXMiLCJvbiIsInkiLCJlbmFibGVkIl0scj1uLmZhbHN5Pz9bImZhbHNlIiwiMCIsIm5vIiwib2ZmIiwibiIsImRpc2FibGVkIl07bi5jYXNlIT09InNlbnNpdGl2ZSImJihvPW8ubWFwKHY9PnR5cGVvZiB2PT0ic3RyaW5nIj92LnRvTG93ZXJDYXNlKCk6dikscj1yLm1hcCh2PT50eXBlb2Ygdj09InN0cmluZyI/di50b0xvd2VyQ2FzZSgpOnYpKTtjb25zdCBzPW5ldyBTZXQobyksYT1uZXcgU2V0KHIpLGk9ZS5Db2RlYz8/SWksbD1lLkJvb2xlYW4/P2tpLHU9ZS5TdHJpbmc/PyRuLGQ9bmV3IHUoe3R5cGU6InN0cmluZyIsZXJyb3I6bi5lcnJvcn0pLGY9bmV3IGwoe3R5cGU6ImJvb2xlYW4iLGVycm9yOm4uZXJyb3J9KSxnPW5ldyBpKHt0eXBlOiJwaXBlIixpbjpkLG91dDpmLHRyYW5zZm9ybTooKHYsXyk9PntsZXQgJD12O3JldHVybiBuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKCQ9JC50b0xvd2VyQ2FzZSgpKSxzLmhhcygkKT8hMDphLmhhcygkKT8hMTooXy5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsZXhwZWN0ZWQ6InN0cmluZ2Jvb2wiLHZhbHVlczpbLi4ucywuLi5hXSxpbnB1dDpfLnZhbHVlLGluc3Q6Zyxjb250aW51ZTohMX0pLHt9KX0pLHJldmVyc2VUcmFuc2Zvcm06KCh2LF8pPT52PT09ITA/b1swXXx8InRydWUiOnJbMF18fCJmYWxzZSIpLGVycm9yOm4uZXJyb3J9KTtyZXR1cm4gZy5fem9kLmJhZy50cnV0aHk9byxnLl96b2QuYmFnLmZhbHN5PXIsZy5fem9kLmJhZy5jYXNlPW4uY2FzZT8/Imluc2Vuc2l0aXZlIixnfWZ1bmN0aW9uIEN0KGUsdCxuLG89e30pe2NvbnN0IHI9eShvKSxzPXtjaGVjazoic3RyaW5nX2Zvcm1hdCIsdHlwZToic3RyaW5nIixmb3JtYXQ6dCxmbjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmk9Pm4udGVzdChpKSwuLi5yfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlZ0V4cCYmKHMucGF0dGVybj1uKSxuZXcgZShzKX1jb25zdCBsYj0oKT0+KHt9KSxkYj0oKT0+KHt9KSxwYj0oKT0+KHt9KSxoYj0oKT0+KHt9KSxmYj0oKT0+KHt9KSxZaD0oKT0+KCk9Pih7fSksTnM9KCk9PigpPT4oe30pLG1iPSgpPT4oe30pLFNlPSgpPT4oe30pLGdiPSgpPT4oe30pLGJiPSgpPT4oe30pLHZiPSgpPT4oe30pLHliPSgpPT4oe30pLF9iPSgpPT4oe30pLGtiPSgpPT4oe30pLCRiPSgpPT4oe30pLHdiPSgpPT4oe30pLFNiPSgpPT4oe30pLHpiPSgpPT4oe30pLFRiPSgpPT4oe30pLEliPSgpPT4oe30pLHhiPSgpPT4oe30pLFBiPSgpPT4oe30pLENiPSgpPT4oe30pLEViPSgpPT4oe30pLEFiPSgpPT4oe30pLE9iPSgpPT4oe30pLFJiPSgpPT4oe30pLE5iPSgpPT4oe30pLFpiPSgpPT4oe30pLGpiPSgpPT4oe30pLE1iPSgpPT4oe30pLHFiPSgpPT4oe30pLERiPSgpPT4oe30pLFhoPSgpPT4oe30pLExiPSgpPT4oe30pLEJiPSgpPT4oe30pLFViPSgpPT4oe30pLEhiPSgpPT4oe30pLEZiPSgpPT4oe30pLFZiPSgpPT4oe30pLEpiPSgpPT4oe30pLEtiPSgpPT4oe30pLFdiPSgpPT4oe30pLEdiPSgpPT4oe30pLFFiPSgpPT4oe30pLGVmPSgpPT4oe30pLFliPSgpPT4oe30pLGxhPSgpPT4oe30pO2NsYXNzIFhie31jb25zdCBldj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGx9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksdGY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRab2RBbnk6eHAsJFpvZEFycmF5Ok9wLCRab2RBc3luY0Vycm9yOlZlLCRab2RCYXNlNjQ6cHAsJFpvZEJhc2U2NFVSTDpmcCwkWm9kQmlnSW50OiRpLCRab2RCaWdJbnRGb3JtYXQ6U3AsJFpvZEJvb2xlYW46a2ksJFpvZENJRFJ2NDpjcCwkWm9kQ0lEUnY2OmxwLCRab2RDVUlEOkdkLCRab2RDVUlEMjpRZCwkWm9kQ2F0Y2g6dGgsJFpvZENoZWNrOkssJFpvZENoZWNrQmlnSW50Rm9ybWF0Ol9kLCRab2RDaGVja0VuZHNXaXRoOkFkLCRab2RDaGVja0dyZWF0ZXJUaGFuOmhpLCRab2RDaGVja0luY2x1ZGVzOkNkLCRab2RDaGVja0xlbmd0aEVxdWFsczpUZCwkWm9kQ2hlY2tMZXNzVGhhbjpwaSwkWm9kQ2hlY2tMb3dlckNhc2U6eGQsJFpvZENoZWNrTWF4TGVuZ3RoOlNkLCRab2RDaGVja01heFNpemU6a2QsJFpvZENoZWNrTWltZVR5cGU6TmQsJFpvZENoZWNrTWluTGVuZ3RoOnpkLCRab2RDaGVja01pblNpemU6JGQsJFpvZENoZWNrTXVsdGlwbGVPZjp2ZCwkWm9kQ2hlY2tOdW1iZXJGb3JtYXQ6eWQsJFpvZENoZWNrT3ZlcndyaXRlOlpkLCRab2RDaGVja1Byb3BlcnRpZXM6UmQsJFpvZENoZWNrUHJvcGVydHk6T2QsJFpvZENoZWNrUmVnZXg6SWQsJFpvZENoZWNrU2l6ZUVxdWFsczp3ZCwkWm9kQ2hlY2tTdGFydHNXaXRoOkVkLCRab2RDaGVja1N0cmluZ0Zvcm1hdDprbiwkWm9kQ2hlY2tVcHBlckNhc2U6UGQsJFpvZENvZGVjOklpLCRab2RDcmVkaXRDYXJkOmJwLCRab2RDdXN0b206Y2gsJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDokcCwkWm9kQ3ljbGljRXJyb3I6dWgsJFpvZERhdGU6QXAsJFpvZERlZmF1bHQ6UXAsJFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpEcCwkWm9kRTE2NDptcCwkWm9kRW1haWw6QmQsJFpvZEVtb2ppOktkLCRab2RFbmNvZGVFcnJvcjpYbywkWm9kRW51bTpGcCwkWm9kRXJyb3I6T2wsJFpvZEV4YWN0T3B0aW9uYWw6V3AsJFpvZEZpbGU6SnAsJFpvZEZ1bmN0aW9uOmloLCRab2RHVUlEOkRkLCRab2RJQkFOOnlwLCRab2RJUHY0OnNwLCRab2RJUHY2OmlwLCRab2RJU09EYXRlOm5wLCRab2RJU09EYXRlVGltZTp0cCwkWm9kSVNPRHVyYXRpb246cnAsJFpvZElTT1RpbWU6b3AsJFpvZEludGVyc2VjdGlvbjpMcCwkWm9kSldUOmtwLCRab2RLU1VJRDplcCwkWm9kTGF6eTp4aSwkWm9kTGl0ZXJhbDpWcCwkWm9kTUFDOmFwLCRab2RNYXA6VXAsJFpvZE5hTjpuaCwkWm9kTmFub0lEOldkLCRab2ROZXZlcjpDcCwkWm9kTm9uT3B0aW9uYWw6WHAsJFpvZE51bGw6SXAsJFpvZE51bGxhYmxlOkdwLCRab2ROdW1iZXI6X2ksJFpvZE51bWJlckZvcm1hdDp3cCwkWm9kT2JqZWN0OlpwLCRab2RPYmplY3RKSVQ6anAsJFpvZE9wdGlvbmFsOnppLCRab2RQaXBlOlRpLCRab2RQcmVmYXVsdDpZcCwkWm9kUHJlcHJvY2VzczpvaCwkWm9kUHJvbWlzZTphaCwkWm9kUmVhZG9ubHk6cmgsJFpvZFJlYWxFcnJvcjp5ZSwkWm9kUmVjb3JkOkJwLCRab2RSZWdpc3RyeTpmaCwkWm9kU2V0OkhwLCRab2RTdHJpbmc6JG4sJFpvZFN0cmluZ0Zvcm1hdDpWLCRab2RTdWNjZXNzOmVoLCRab2RTeW1ib2w6enAsJFpvZFRlbXBsYXRlTGl0ZXJhbDpzaCwkWm9kVHJhbnNmb3JtOktwLCRab2RUdXBsZTpTaSwkWm9kVHlwZTpQLCRab2RVTElEOllkLCRab2RVUkw6SmQsJFpvZFVVSUQ6TGQsJFpvZFVuZGVmaW5lZDpUcCwkWm9kVW5pb246YXIsJFpvZFVua25vd246UHAsJFpvZFZvaWQ6RXAsJFpvZFhJRDpYZCwkWm9kWG9yOk1wLCRicmFuZDpHcywkY29uc3RydWN0b3I6cCwkaW5wdXQ6RWksJG91dHB1dDpDaSxEb2M6amQsSU5WQUxJRDpPaSxKU09OU2NoZW1hOmV2LEpTT05TY2hlbWFHZW5lcmF0b3I6WGIsTkVWRVI6V3MsVGltZVByZWNpc2lvbjpzYSxVUkxfQkFEX0ZPUk1BVDptaSxVUkxfVU5QQVJTRUFCTEU6b24sWm9kQ29tcGlsZUFzeW5jRXJyb3I6UmksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6TmksX2FueTpaaCxfYXJyYXk6VWgsX2Jhc2U2NDp0YSxfYmFzZTY0dXJsOm5hLF9iaWdpbnQ6UGgsX2Jvb2xlYW46SWgsX2NhdGNoOnJiLF9jaGVjazpLaCxfY2lkcnY0OlhpLF9jaWRydjY6ZWEsX2NvZXJjZWRCaWdpbnQ6Q2gsX2NvZXJjZWRCb29sZWFuOnhoLF9jb2VyY2VkRGF0ZTpMaCxfY29lcmNlZE51bWJlcjpraCxfY29lcmNlZFN0cmluZzpnaCxfY3JlZGl0Q2FyZDp2aCxfY3VpZDpWaSxfY3VpZDI6SmksX2N1c3RvbTpGaCxfZGF0ZTpEaCxfZGVjb2RlOmVpLF9kZWNvZGVBc3luYzpuaSxfZGVmYXVsdDp0YixfZGlzY3JpbWluYXRlZFVuaW9uOlVnLF9lMTY0Om9hLF9lbWFpbDpNaSxfZW1vamk6SGksX2VuY29kZTpYcyxfZW5jb2RlQXN5bmM6dGksX2VuZHNXaXRoOnhuLF9lbnVtOldnLF9maWxlOkhoLF9mbG9hdDMyOndoLF9mbG9hdDY0OlNoLF9ndDpxZSxfZ3RlOnZlLF9ndWlkOnFpLF9pYmFuOnloLF9pbmNsdWRlczpUbixfaW50OiRoLF9pbnQzMjp6aCxfaW50NjQ6RWgsX2ludGVyc2VjdGlvbjpIZyxfaXB2NDpRaSxfaXB2NjpZaSxfaXNvRGF0ZTphYSxfaXNvRGF0ZVRpbWU6aWEsX2lzb0R1cmF0aW9uOnVhLF9pc29UaW1lOmNhLF9qd3Q6cmEsX2tzdWlkOkdpLF9sYXp5OmNiLF9sZW5ndGg6UHQsX2xpdGVyYWw6UWcsX2xvd2VyY2FzZTpTbixfbHQ6TWUsX2x0ZTpiZSxfbWFjOmJoLF9tYXA6SmcsX21heDpiZSxfbWF4TGVuZ3RoOnh0LF9tYXhTaXplOmx0LF9taW1lOkNuLF9taW46dmUsX21pbkxlbmd0aDpLZSxfbWluU2l6ZTpEZSxfbXVsdGlwbGVPZjpydCxfbmFuOkJoLF9uYW5vaWQ6RmksX25hdGl2ZUVudW06R2csX25lZ2F0aXZlOmhyLF9uZXZlcjpNaCxfbm9ubmVnYXRpdmU6bXIsX25vbm9wdGlvbmFsOm5iLF9ub25wb3NpdGl2ZTpmcixfbm9ybWFsaXplOkVuLF9udWxsOk5oLF9udWxsYWJsZTplYixfbnVtYmVyOl9oLF9vcHRpb25hbDpYZyxfb3ZlcndyaXRlOk9lLF9wYXJzZTptbixfcGFyc2VBc3luYzpnbixfcGlwZTpzYixfcG9zaXRpdmU6cHIsX3Byb21pc2U6dWIsX3Byb3BlcnRpZXM6UG4sX3Byb3BlcnR5OmdyLF9yZWFkb25seTppYixfcmVjb3JkOlZnLF9yZWZpbmU6VmgsX3JlZ2V4OnduLF9zYWZlRGVjb2RlOnJpLF9zYWZlRGVjb2RlQXN5bmM6aWksX3NhZmVFbmNvZGU6b2ksX3NhZmVFbmNvZGVBc3luYzpzaSxfc2FmZVBhcnNlOmJuLF9zYWZlUGFyc2VBc3luYzp2bixfc2V0OktnLF9zaXplOkl0LF9zbHVnaWZ5Ok5uLF9zdGFydHNXaXRoOkluLF9zdHJpbmc6bWgsX3N0cmluZ0Zvcm1hdDpDdCxfc3RyaW5nYm9vbDpRaCxfc3VjY2VzczpvYixfc3VwZXJSZWZpbmU6SmgsX3N5bWJvbDpPaCxfdGVtcGxhdGVMaXRlcmFsOmFiLF90b0xvd2VyQ2FzZTpPbixfdG9VcHBlckNhc2U6Um4sX3RyYW5zZm9ybTpZZyxfdHJpbTpBbixfdHVwbGU6RmcsX3VpbnQzMjpUaCxfdWludDY0OkFoLF91bGlkOktpLF91bmRlZmluZWQ6UmgsX3VuaW9uOkxnLF91bmtub3duOmpoLF91cHBlcmNhc2U6em4sX3VybDpkcixfdXVpZDpEaSxfdXVpZHY0OkxpLF91dWlkdjY6QmksX3V1aWR2NzpVaSxfdm9pZDpxaCxfeGlkOldpLF94b3I6QmcsYmFzZTY0Q2hhcnNldDpkcCxiYXNlNjR1cmxDaGFyc2V0OnlpLGNhblBhcnNlVVJMOmdpLGNsb25lOlEsY29tcGlsZTpaaSxjb21waWxlRm46RGcsY29uZmlnOm9lLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDpOcyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6WWgsZGVjb2RlOkptLGRlY29kZUFzeW5jOldtLGRlc2NyaWJlOldoLGVuY29kZTpWbSxlbmNvZGVBc3luYzpLbSxleHRyYWN0RGVmczpoYixmaW5hbGl6ZTpmYixmbGF0dGVuRXJyb3I6ZXIsZm9ybWF0RXJyb3I6dHIsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjp3aSxnbG9iYWxDb25maWc6ZGUsZ2xvYmFsUmVnaXN0cnk6d2UsaGFuZGxlVW5yZXByZXNlbnRhYmxlOmRiLGluaXRpYWxpemVDb250ZXh0OmxiLGlzQmFja0VkZ2U6cGgsaXNSZWN1cnNpdmVTY2hlbWE6WmcsaXNWYWxpZEJhc2U2NDp2aSxpc1ZhbGlkQmFzZTY0VVJMOmhwLGlzVmFsaWRDSURSdjY6dXAsaXNWYWxpZENyZWRpdENhcmQ6Z3AsaXNWYWxpZElCQU46dnAsaXNWYWxpZElQdjY6YmksaXNWYWxpZEpXVDpfcCxsb2NhbGVzOlBpLG1lbW9pemVyOmNyLG1lcmdlVmFsdWVzOlJvLG1ldGE6R2gscGFyc2U6UHMscGFyc2VBc3luYzpDcyxwYXJzZVVSTE9iamVjdDpIZCxwcmV0dGlmeUVycm9yOllzLHByb2Nlc3M6bWIscHJvY2Vzc1NjaGVtYTpwYixyZWdleGVzOmlyLHJlZ2lzdHJ5OnVyLHNhZmVEZWNvZGU6UW0sc2FmZURlY29kZUFzeW5jOlhtLHNhZmVFbmNvZGU6R20sc2FmZUVuY29kZUFzeW5jOlltLHNhZmVQYXJzZTpObCxzYWZlUGFyc2VBc3luYzpCbSxzdGFuZGFyZFByb3BzOmZpLHN0cmlwVGFiQW5kTmV3bGluZTpBcyx0b0RvdFBhdGg6UmwsdG9KU09OU2NoZW1hOmxhLHRvWm9kOkZvLHRyZWVpZnlFcnJvcjpRcyx1cmxIb3N0bmFtZU9rOkZkLHVybFByb3RvY29sT2s6VmQsdXRpbDpLcyx2YWxpZGF0ZTpvcix2YWxpZGF0ZUFzeW5jOnJyLHZhbGlkYXRlVVJMOlVkLHZlcnNpb246TWQsd2l0aFBhcnNlcjpqaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxOdT1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gZGEoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGEsaSk9Pntjb25zdCBsPXRbYS5fem9kLmRlZi50eXBlXTtyZXR1cm4gbD9sKGEsaSk6YX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoYSl7Y29uc3QgaT1vLmdldChhKTtpZihpPT09TnUpcmV0dXJuIG5ldyB4aSh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChhKX0pO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7by5zZXQoYSxOdSk7Y29uc3QgbD1zKGEpLHU9bihsLGwhPT1hKTtyZXR1cm4gby5zZXQoYSx1KSx1fWZ1bmN0aW9uIHMoYSl7Y29uc3QgaT1hLl96b2QuZGVmO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1pLnNoYXBlLGQ9T2JqZWN0LmtleXModSk7bGV0IGY9ITE7Y29uc3QgZz17fTtmb3IoY29uc3QgXyBvZiBkKXtjb25zdCAkPXIodVtfXSk7JCE9PXVbX10mJihmPSEwKSxnW19dPSR9bGV0IHY9aS5jYXRjaGFsbDtyZXR1cm4gaS5jYXRjaGFsbCYmKHY9cihpLmNhdGNoYWxsKSx2IT09aS5jYXRjaGFsbCYmKGY9ITApKSxmP1EoYSx7Li4uaSxzaGFwZTpnLGNhdGNoYWxsOnZ9KTphfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoaS5lbGVtZW50KTtyZXR1cm4gdT09PWkuZWxlbWVudD9hOlEoYSx7Li4uaSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1pLml0ZW1zO2xldCBkPSExO2NvbnN0IGY9W107Zm9yKGNvbnN0IHYgb2YgdSl7Y29uc3QgXz1yKHYpO18hPT12JiYoZD0hMCksZi5wdXNoKF8pfWxldCBnPWkucmVzdDtyZXR1cm4gaS5yZXN0JiYoZz1yKGkucmVzdCksZyE9PWkucmVzdCYmKGQ9ITApKSxkP1EoYSx7Li4uaSxpdGVtczpmLHJlc3Q6Z30pOmF9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGkua2V5VHlwZSksZD1yKGkudmFsdWVUeXBlKTtyZXR1cm4gdT09PWkua2V5VHlwZSYmZD09PWkudmFsdWVUeXBlP2E6UShhLHsuLi5pLGtleVR5cGU6dSx2YWx1ZVR5cGU6ZH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGkudmFsdWVUeXBlKTtyZXR1cm4gdT09PWkudmFsdWVUeXBlP2E6UShhLHsuLi5pLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9aS5vcHRpb25zO2xldCBkPSExO2NvbnN0IGY9W107Zm9yKGNvbnN0IGcgb2YgdSl7Y29uc3Qgdj1yKGcpO3YhPT1nJiYoZD0hMCksZi5wdXNoKHYpfXJldHVybiBkP1EoYSx7Li4uaSxvcHRpb25zOmZ9KTphfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGkubGVmdCksZD1yKGkucmlnaHQpO3JldHVybiB1PT09aS5sZWZ0JiZkPT09aS5yaWdodD9hOlEoYSx7Li4uaSxsZWZ0OnUscmlnaHQ6ZH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoaS5pbm5lclR5cGUpO3JldHVybiB1PT09aS5pbm5lclR5cGU/YTpRKGEsey4uLmksaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoaS5pbiksZD1yKGkub3V0KTtyZXR1cm4gdT09PWkuaW4mJmQ9PT1pLm91dD9hOlEoYSx7Li4uaSxpbjp1LG91dDpkfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihpLmlucHV0KSxkPXIoaS5vdXRwdXQpO3JldHVybiB1PT09aS5pbnB1dCYmZD09PWkub3V0cHV0P2E6UShhLHsuLi5pLGlucHV0OnUsb3V0cHV0OmR9KX1jYXNlImxhenkiOntjb25zdCB1PWkuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6ZCwuLi5mfT1pO3JldHVybiBRKGEsey4uLmYsZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gYX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gcGEoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gbmYoZSx0KXtyZXR1cm4gcGEoZSk/TmwoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiB0dihlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYocGEoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiBudihlKXtpZihwYShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCBvdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6eG4sZ3Q6cWUsZ3RlOnZlLGluY2x1ZGVzOlRuLGxlbmd0aDpQdCxsb3dlcmNhc2U6U24sbHQ6TWUsbHRlOmJlLG1heExlbmd0aDp4dCxtYXhTaXplOmx0LG1pbWU6Q24sbWluTGVuZ3RoOktlLG1pblNpemU6RGUsbXVsdGlwbGVPZjpydCxuZWdhdGl2ZTpocixub25uZWdhdGl2ZTptcixub25wb3NpdGl2ZTpmcixub3JtYWxpemU6RW4sb3ZlcndyaXRlOk9lLHBvc2l0aXZlOnByLHByb3BlcnRpZXM6UG4scHJvcGVydHk6Z3IscmVnZXg6d24sc2l6ZTpJdCxzbHVnaWZ5Ok5uLHN0YXJ0c1dpdGg6SW4sdG9Mb3dlckNhc2U6T24sdG9VcHBlckNhc2U6Um4sdHJpbTpBbix1cHBlcmNhc2U6em59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksWnU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gd28oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCBvZj0oZSx0KT0+e09sLmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtadS5oYXMobil8fChadS5hZGQobiksd28obiwiZm9ybWF0IixvPT5yPT50cihvLHIpKSx3byhuLCJmbGF0dGVuIixvPT5yPT5lcihvLHIpKSx3byhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLFBvLDIpfSksd28obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsUG8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0scmY9cCgiWm9kRXJyb3IiLG9mKSxtZT1wKCJab2RFcnJvciIsb2Ysdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxoYT1tbihtZSksZmE9Z24obWUpLG1hPWJuKG1lKSxnYT12bihtZSksYmE9WHMobWUpLHZhPWVpKG1lKSx5YT10aShtZSksX2E9bmkobWUpLGthPW9pKG1lKSwkYT1yaShtZSksd2E9c2kobWUpLFNhPWlpKG1lKTtmdW5jdGlvbiBydigpe2RlLmxvY2FsZUVycm9yfHxvZShoaCgpKX1mdW5jdGlvbiBkdCgpe2RlLm1lbW9pemVyfHxvZSh7bWVtb2l6ZXI6Y3IoKX0pfWNvbnN0IEU9cCgiWm9kVHlwZSIsKGUsdCk9PihydigpLFAuaW5pdChlLHQpLGUuZGVmPXQsZS50eXBlPXQudHlwZSxlKSx7Y2hlY2soLi4uZSl7Y29uc3QgdD10aGlzLmRlZjtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0LHtjaGVja3M6Wy4uLnQuY2hlY2tzPz9bXSwuLi5lLm1hcChuPT50eXBlb2Ygbj09ImZ1bmN0aW9uIj97X3pvZDp7Y2hlY2s6bixkZWY6e2NoZWNrOiJjdXN0b20ifSxvbmF0dGFjaDpbXX19Om4pXX0pLHtwYXJlbnQ6ITB9KX0sd2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayguLi5lKX0sY2xvbmUoZSx0KXtyZXR1cm4gUSh0aGlzLGUsdCl9LGJyYW5kKCl7cmV0dXJuIHRoaXN9LHJlZ2lzdGVyKGUsdCl7cmV0dXJuIGUuYWRkKHRoaXMsdCksdGhpc30scmVmaW5lKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socnMoZSx0KSl9LHN1cGVyUmVmaW5lKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soc3MoZSx0KSl9LG92ZXJ3cml0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhPZShlKSl9LG9wdGlvbmFsKCl7cmV0dXJuIEoodGhpcyl9LGV4YWN0T3B0aW9uYWwoKXtyZXR1cm4gTXIodGhpcyl9LG51bGxhYmxlKCl7cmV0dXJuIHd0KHRoaXMpfSxudWxsaXNoKCl7cmV0dXJuIEood3QodGhpcykpfSxub25vcHRpb25hbChlKXtyZXR1cm4gSHIodGhpcyxlKX0sYXJyYXkoKXtyZXR1cm4geCh0aGlzKX0sb3IoZSl7cmV0dXJuIE8oW3RoaXMsZV0pfSxhbmQoZSl7cmV0dXJuIEJ0KHRoaXMsZSl9LHRyYW5zZm9ybShlKXtyZXR1cm4gc24odGhpcyxzbyhlKSl9LGRlZmF1bHQoZSl7cmV0dXJuIExyKHRoaXMsZSl9LHByZWZhdWx0KGUpe3JldHVybiBVcih0aGlzLGUpfSxjYXRjaChlKXtyZXR1cm4gSnIodGhpcyxlKX0scGlwZShlKXtyZXR1cm4gc24odGhpcyxlKX0scmVhZG9ubHkoKXtyZXR1cm4gUXIodGhpcyl9LGRlc2NyaWJlKGUpe2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiB3ZS5hZGQodCx7ZGVzY3JpcHRpb246ZX0pLHR9LG1ldGEoLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiB3ZS5nZXQodGhpcyk7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHdlLmFkZCh0LGVbMF0pLHR9LGlzT3B0aW9uYWwoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2Uodm9pZCAwKS5zdWNjZXNzfSxpc051bGxhYmxlKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKG51bGwpLnN1Y2Nlc3N9LGFwcGx5KGUsLi4udCl7cmV0dXJuIHQubGVuZ3RoPT09MD9lKHRoaXMpOmUodGhpcywuLi50KX0sZ2V0In5zdGFuZGFyZCIoKXtyZXR1cm4gWW8odGhpcywifnN0YW5kYXJkIix7Li4uZmkodGhpcyksanNvblNjaGVtYTp7aW5wdXQ6TnMoKSxvdXRwdXQ6TnMoKX19KX0sc2V0In5zdGFuZGFyZCIoZSl7amUodGhpcywifnN0YW5kYXJkIixlKX0scGFyc2U6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBoYSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0scGFyc2VBc3luYzphc3luYyBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGF3YWl0IGZhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxzYWZlUGFyc2UoZSx0KXtyZXR1cm4gbWEodGhpcyxlLHQpfSxhc3luYyBzYWZlUGFyc2VBc3luYyhlLHQpe3JldHVybiBnYSh0aGlzLGUsdCl9LGdldCBzcGEoKXtyZXR1cm4gdGhpcz8uc2FmZVBhcnNlQXN5bmN9LHNldCBzcGEoZSl7amUodGhpcywic3BhIixlKX0sdmFsaWRhdGUoZSx0KXtyZXR1cm4gb3IodGhpcyxlLHQpfSx2YWxpZGF0ZUFzeW5jKGUsdCl7cmV0dXJuIHJyKHRoaXMsZSx0KX0sZW5jb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYmEodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHZhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxlbmNvZGVBc3luYzphc3luYyBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGF3YWl0IHlhKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGVBc3luYzphc3luYyBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGF3YWl0IF9hKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxzYWZlRW5jb2RlKGUsdCl7cmV0dXJuIGthKHRoaXMsZSx0KX0sc2FmZURlY29kZShlLHQpe3JldHVybiAkYSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVFbmNvZGVBc3luYyhlLHQpe3JldHVybiB3YSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVEZWNvZGVBc3luYyhlLHQpe3JldHVybiBTYSh0aGlzLGUsdCl9LHRvSlNPTlNjaGVtYShlKXtyZXR1cm4gWWgoKShlKX0sZ2V0IGRlc2NyaXB0aW9uKCl7cmV0dXJuIHdlLmdldCh0aGlzKT8uZGVzY3JpcHRpb259LGdldCBfZGVmKCl7cmV0dXJuIHRoaXMuX3pvZC5kZWZ9fSksWm49cCgiX1pvZFN0cmluZyIsKGUsdCk9Pnskbi5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdiKCl9LGZuKHtmb3JtYXQ6ZT0+U2UoKS5mb3JtYXQ/P251bGwsbWluTGVuZ3RoOmU9PlNlKCkubWluaW11bT8/bnVsbCxtYXhMZW5ndGg6ZT0+U2UoKS5tYXhpbXVtPz9udWxsfSx7cmVnZXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sod24oLi4uZSkpfSxpbmNsdWRlcyguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhUbiguLi5lKSl9LHN0YXJ0c1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soSW4oLi4uZSkpfSxlbmRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayh4biguLi5lKSl9LG1pbiguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhLZSguLi5lKSl9LG1heCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayh4dCguLi5lKSl9LGxlbmd0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhQdCguLi5lKSl9LG5vbmVtcHR5KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEtlKDEsLi4uZSkpfSxsb3dlcmNhc2UoZSl7cmV0dXJuIHRoaXMuY2hlY2soU24oZSkpfSx1cHBlcmNhc2UoZSl7cmV0dXJuIHRoaXMuY2hlY2soem4oZSkpfSx0cmltKCl7cmV0dXJuIHRoaXMuY2hlY2soQW4oKSl9LG5vcm1hbGl6ZSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhFbiguLi5lKSl9LHRvTG93ZXJDYXNlKCl7cmV0dXJuIHRoaXMuY2hlY2soT24oKSl9LHRvVXBwZXJDYXNlKCl7cmV0dXJuIHRoaXMuY2hlY2soUm4oKSl9LHNsdWdpZnkoKXtyZXR1cm4gdGhpcy5jaGVjayhObigpKX19KSksRXQ9cCgiWm9kU3RyaW5nIiwoZSx0KT0+eyRuLmluaXQoZSx0KSxabi5pbml0KGUsdCl9LHtlbWFpbChlKXtyZXR1cm4gdGhpcy5jaGVjayhNaShqbixlKSl9LHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhkcihadCxlKSl9LGp3dChlKXtyZXR1cm4gdGhpcy5jaGVjayhyYShYbixlKSl9LGVtb2ppKGUpe3JldHVybiB0aGlzLmNoZWNrKEhpKHFuLGUpKX0sZ3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhxaShNbixlKSl9LHV1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRGkoQ2UsZSkpfSx1dWlkdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soTGkoQ2UsZSkpfSx1dWlkdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soQmkoQ2UsZSkpfSx1dWlkdjcoZSl7cmV0dXJuIHRoaXMuY2hlY2soVWkoQ2UsZSkpfSxuYW5vaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soRmkoRG4sZSkpfSxjdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFZpKExuLGUpKX0sY3VpZDIoZSl7cmV0dXJuIHRoaXMuY2hlY2soSmkoQm4sZSkpfSx1bGlkKGUpe3JldHVybiB0aGlzLmNoZWNrKEtpKFVuLGUpKX0sYmFzZTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKHRhKEduLGUpKX0sYmFzZTY0dXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKG5hKFFuLGUpKX0seGlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFdpKEhuLGUpKX0sa3N1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soR2koRm4sZSkpfSxpcHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKFFpKFZuLGUpKX0saXB2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhZaShKbixlKSl9LGNpZHJ2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhYaShLbixlKSl9LGNpZHJ2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhlYShXbixlKSl9LGUxNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2sob2EoWW4sZSkpfSxkYXRldGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhpYShBdCxlKSl9LGRhdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWEoT3QsZSkpfSx0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKGNhKFJ0LGUpKX0sZHVyYXRpb24oZSl7cmV0dXJuIHRoaXMuY2hlY2sodWEoTnQsZSkpfX0pO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIG1oKEV0LGUpfWNvbnN0IFU9cCgiWm9kU3RyaW5nRm9ybWF0IiwoZSx0KT0+e1YuaW5pdChlLHQpLFpuLmluaXQoZSx0KX0pLEF0PXAoIlpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3RwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pLE90PXAoIlpvZElTT0RhdGUiLChlLHQpPT57bnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSksUnQ9cCgiWm9kSVNPVGltZSIsKGUsdCk9PntvcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxOdD1wKCJab2RJU09EdXJhdGlvbiIsKGUsdCk9PntycC5pbml0KGUsdCksVS5pbml0KGUsdCl9KSxqbj1wKCJab2RFbWFpbCIsKGUsdCk9PntCZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiB6YShlKXtyZXR1cm4gTWkoam4sZSl9Y29uc3QgTW49cCgiWm9kR1VJRCIsKGUsdCk9PntEZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBUYShlKXtyZXR1cm4gcWkoTW4sZSl9Y29uc3QgQ2U9cCgiWm9kVVVJRCIsKGUsdCk9PntMZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBJYShlKXtyZXR1cm4gRGkoQ2UsZSl9ZnVuY3Rpb24geGEoZSl7cmV0dXJuIExpKENlLGUpfWZ1bmN0aW9uIFBhKGUpe3JldHVybiBCaShDZSxlKX1mdW5jdGlvbiBDYShlKXtyZXR1cm4gVWkoQ2UsZSl9Y29uc3QgWnQ9cCgiWm9kVVJMIiwoZSx0KT0+e0pkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBkcihadCxlKX1mdW5jdGlvbiBBYShlKXtyZXR1cm4gZHIoWnQse3Byb3RvY29sOmFpLGhvc3RuYW1lOnRkLC4uLnkoZSl9KX1jb25zdCBxbj1wKCJab2RFbW9qaSIsKGUsdCk9PntLZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBPYShlKXtyZXR1cm4gSGkocW4sZSl9Y29uc3QgRG49cCgiWm9kTmFub0lEIiwoZSx0KT0+e1dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBGaShEbixlKX1jb25zdCBMbj1wKCJab2RDVUlEIiwoZSx0KT0+e0dkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE5hKGUpe3JldHVybiBWaShMbixlKX1jb25zdCBCbj1wKCJab2RDVUlEMiIsKGUsdCk9PntRZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBaYShlKXtyZXR1cm4gSmkoQm4sZSl9Y29uc3QgVW49cCgiWm9kVUxJRCIsKGUsdCk9PntZZC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBqYShlKXtyZXR1cm4gS2koVW4sZSl9Y29uc3QgSG49cCgiWm9kWElEIiwoZSx0KT0+e1hkLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE1hKGUpe3JldHVybiBXaShIbixlKX1jb25zdCBGbj1wKCJab2RLU1VJRCIsKGUsdCk9PntlcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBxYShlKXtyZXR1cm4gR2koRm4sZSl9Y29uc3QgVm49cCgiWm9kSVB2NCIsKGUsdCk9PntzcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBEYShlKXtyZXR1cm4gUWkoVm4sZSl9Y29uc3QgYnI9cCgiWm9kTUFDIiwoZSx0KT0+e2FwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIExhKGUpe3JldHVybiBiaChicixlKX1jb25zdCBKbj1wKCJab2RJUHY2IiwoZSx0KT0+e2lwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEJhKGUpe3JldHVybiBZaShKbixlKX1jb25zdCBLbj1wKCJab2RDSURSdjQiLChlLHQpPT57Y3AuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVWEoZSl7cmV0dXJuIFhpKEtuLGUpfWNvbnN0IFduPXAoIlpvZENJRFJ2NiIsKGUsdCk9PntscC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBIYShlKXtyZXR1cm4gZWEoV24sZSl9Y29uc3QgR249cCgiWm9kQmFzZTY0IiwoZSx0KT0+e3BwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEZhKGUpe3JldHVybiB0YShHbixlKX1jb25zdCBRbj1wKCJab2RCYXNlNjRVUkwiLChlLHQpPT57ZnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIG5hKFFuLGUpfWNvbnN0IFluPXAoIlpvZEUxNjQiLChlLHQpPT57bXAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSmEoZSl7cmV0dXJuIG9hKFluLGUpfWNvbnN0IHZyPXAoIlpvZENyZWRpdENhcmQiLChlLHQpPT57YnAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2EoZSl7cmV0dXJuIHZoKHZyLGUpfWNvbnN0IHlyPXAoIlpvZElCQU4iLChlLHQpPT57eXAuaW5pdChlLHQpLFUuaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2EoZSl7cmV0dXJuIHloKHlyLGUpfWNvbnN0IFhuPXAoIlpvZEpXVCIsKGUsdCk9PntrcC5pbml0KGUsdCksVS5pbml0KGUsdCl9KTtmdW5jdGlvbiBHYShlKXtyZXR1cm4gcmEoWG4sZSl9Y29uc3QgR2U9cCgiWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+eyRwLmluaXQoZSx0KSxVLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFFhKGUsdCxuPXt9KXtyZXR1cm4gQ3QoR2UsZSx0LG4pfWZ1bmN0aW9uIFlhKGUpe3JldHVybiBDdChHZSwiaG9zdG5hbWUiLGVkLGUpfWZ1bmN0aW9uIFhhKGUpe3JldHVybiBDdChHZSwiaGV4IixiZCxlKX1mdW5jdGlvbiBlYyhlKXtyZXR1cm4gQ3QoR2UsImN1cnJlbmN5X2NvZGUiLG9kLGUpfWZ1bmN0aW9uIHRjKGUsdCl7Y29uc3Qgbj10Py5lbmM/PyJoZXgiLG89YCR7ZX1fJHtufWAscj1pcltvXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoYXNoIGZvcm1hdDogJHtvfWApO3JldHVybiBDdChHZSxvLHIsdCl9Y29uc3QganQ9cCgiWm9kTnVtYmVyIiwoZSx0KT0+e19pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmIoKSxlLmlzRmluaXRlPSEwfSxmbih7bWluVmFsdWU6ZT0+e2NvbnN0e21pbmltdW06dCxleGNsdXNpdmVNaW5pbXVtOm59PVNlKCk7cmV0dXJuIE1hdGgubWF4KHQ/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpfSxtYXhWYWx1ZTplPT57Y29uc3R7bWF4aW11bTp0LGV4Y2x1c2l2ZU1heGltdW06bn09U2UoKTtyZXR1cm4gTWF0aC5taW4odD8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG4/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSl9LGlzSW50OmU9Pntjb25zdHtpc0ludDp0LG11bHRpcGxlT2Y6bn09U2UoKTtyZXR1cm4hIXR8fCEhbj8uc29tZShOdW1iZXIuaXNTYWZlSW50ZWdlcil9LGZvcm1hdDplPT5TZSgpLmZvcm1hdD8/bnVsbH0se2d0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socWUoZSx0KSl9LGd0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2ZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhNZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUsdCkpfSxpbnQoZSl7cmV0dXJuIHRoaXMuY2hlY2socm4oZSkpfSxzYWZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHJuKGUpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2socWUoMCxlKSl9LG5vbm5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHZlKDAsZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhNZSgwLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYmUoMCxlKSl9LG11bHRpcGxlT2YoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhydChlLHQpKX0sc3RlcChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHJ0KGUsdCkpfSxmaW5pdGUoKXtyZXR1cm4gdGhpc319KSk7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gX2goanQsZSl9Y29uc3QgUWU9cCgiWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3dwLmluaXQoZSx0KSxqdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBybihlKXtyZXR1cm4gJGgoUWUsZSl9ZnVuY3Rpb24gbmMoZSl7cmV0dXJuIHdoKFFlLGUpfWZ1bmN0aW9uIG9jKGUpe3JldHVybiBTaChRZSxlKX1mdW5jdGlvbiByYyhlKXtyZXR1cm4gemgoUWUsZSl9ZnVuY3Rpb24gc2MoZSl7cmV0dXJuIFRoKFFlLGUpfWNvbnN0IE10PXAoIlpvZEJvb2xlYW4iLChlLHQpPT57a2kuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT52YigpfSk7ZnVuY3Rpb24gQihlKXtyZXR1cm4gSWgoTXQsZSl9Y29uc3QgcXQ9cCgiWm9kQmlnSW50IiwoZSx0KT0+eyRpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eWIoKX0sZm4oe21pblZhbHVlOmU9PlNlKCkubWluaW11bT8/bnVsbCxtYXhWYWx1ZTplPT5TZSgpLm1heGltdW0/P251bGwsZm9ybWF0OmU9PlNlKCkuZm9ybWF0Pz9udWxsfSx7Z3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodmUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKHZlKGUsdCkpfSxndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHFlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKE1lKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhiZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYmUoZSx0KSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHFlKEJpZ0ludCgwKSxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKE1lKEJpZ0ludCgwKSxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGJlKEJpZ0ludCgwKSxlKSl9LG5vbm5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHZlKEJpZ0ludCgwKSxlKSl9LG11bHRpcGxlT2YoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhydChlLHQpKX19KSk7ZnVuY3Rpb24gaWMoZSl7cmV0dXJuIFBoKHF0LGUpfWNvbnN0IGVvPXAoIlpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntTcC5pbml0KGUsdCkscXQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWMoZSl7cmV0dXJuIEVoKGVvLGUpfWZ1bmN0aW9uIGNjKGUpe3JldHVybiBBaChlbyxlKX1jb25zdCBfcj1wKCJab2RTeW1ib2wiLChlLHQpPT57enAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5fYigpfSk7ZnVuY3Rpb24gdWMoZSl7cmV0dXJuIE9oKF9yLGUpfWNvbnN0IGtyPXAoIlpvZFVuZGVmaW5lZCIsKGUsdCk9PntUcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRiKCl9KTtmdW5jdGlvbiAkdChlKXtyZXR1cm4gUmgoa3IsZSl9Y29uc3QgJHI9cCgiWm9kTnVsbCIsKGUsdCk9PntJcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtiKCl9KTtmdW5jdGlvbiB0byhlKXtyZXR1cm4gTmgoJHIsZSl9Y29uc3Qgd3I9cCgiWm9kQW55IiwoZSx0KT0+e3hwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+emIoKX0pO2Z1bmN0aW9uIG5vKCl7cmV0dXJuIFpoKHdyKX1jb25zdCBTcj1wKCJab2RVbmtub3duIiwoZSx0KT0+e1BwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VGIoKX0pO2Z1bmN0aW9uIEwoKXtyZXR1cm4gamgoU3IpfWNvbnN0IHpyPXAoIlpvZE5ldmVyIiwoZSx0KT0+e0NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2IoKX0pO2Z1bmN0aW9uIHN0KGUpe3JldHVybiBNaCh6cixlKX1jb25zdCBUcj1wKCJab2RWb2lkIiwoZSx0KT0+e0VwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+d2IoKX0pO2Z1bmN0aW9uIGxjKGUpe3JldHVybiBxaChUcixlKX1jb25zdCBvbz1wKCJab2REYXRlIiwoZSx0KT0+e0FwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWIoKSxlLm1pbj0obixvKT0+ZS5jaGVjayh2ZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhiZShuLG8pKX0sZm4oe21pbkRhdGU6ZT0+e2NvbnN0e21pbmltdW06dH09U2UoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfSxtYXhEYXRlOmU9Pntjb25zdHttYXhpbXVtOnR9PVNlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH19LHt9KSk7ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIERoKG9vLGUpfWNvbnN0IElyPXAoIlpvZEFycmF5IiwoZSx0KT0+e2R0KCksT3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5xYigpLGUuZWxlbWVudD10LmVsZW1lbnR9LHttaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhLZShlLHQpKX0sbm9uZW1wdHkoZSl7cmV0dXJuIHRoaXMuY2hlY2soS2UoMSxlKSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHh0KGUsdCkpfSxsZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhQdChlLHQpKX0sdW53cmFwKCl7cmV0dXJuIHRoaXMuZWxlbWVudH19KTtmdW5jdGlvbiB4KGUsdCl7cmV0dXJuIFVoKElyLGUsdCl9ZnVuY3Rpb24gcGMoZSl7Y29uc3QgdD1lLl96b2QuZGVmLnNoYXBlO3JldHVybiBpZShPYmplY3Qua2V5cyh0KSl9Y29uc3QgRHQ9cCgiWm9kT2JqZWN0IiwoZSx0KT0+e2R0KCksanAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5EYigpLENsKGUsInNoYXBlIixuPT5uLl96b2QuZGVmLnNoYXBlLCExKX0se2tleW9mKCl7cmV0dXJuIGllKE9iamVjdC5rZXlzKHRoaXMuX3pvZC5kZWYuc2hhcGUpKX0sY2F0Y2hhbGwoZSl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6ZX0pKX0scGFzc3Rocm91Z2goKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpMKCl9KSl9LGxvb3NlKCl7cmV0dXJuIHRoaXMuY2xvbmUodWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6TCgpfSkpfSxzdHJpY3QoKXtyZXR1cm4gdGhpcy5jbG9uZSh1ZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDpzdCgpfSkpfSxzdHJpcCgpe3JldHVybiB0aGlzLmNsb25lKHVlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOnZvaWQgMH0pKX0sZXh0ZW5kKGUpe3JldHVybiBfbCh0aGlzLGUpfSxzYWZlRXh0ZW5kKGUpe3JldHVybiAkbCh0aGlzLGUpfSxtZXJnZShlKXtyZXR1cm4gd2wodGhpcyxlKX0scGljayhlKXtyZXR1cm4gdmwodGhpcyxlKX0sb21pdChlKXtyZXR1cm4geWwodGhpcyxlKX0scGFydGlhbCguLi5lKXtyZXR1cm4gSXMoVXQsdGhpcyxlWzBdKX0sZXhhY3RQYXJ0aWFsKC4uLmUpe3JldHVybiBJcyhpbyx0aGlzLGVbMF0sImV4YWN0UGFydGlhbCIpfSxyZXF1aXJlZCguLi5lKXtyZXR1cm4gU2woYW8sdGhpcyxlWzBdKX19KTtmdW5jdGlvbiBiKGUsdCl7Y29uc3Qgbj17dHlwZToib2JqZWN0IixzaGFwZTplPz97fSwuLi55KHQpfTtyZXR1cm4gbmV3IER0KG4pfWZ1bmN0aW9uIGhjKGUsdCl7cmV0dXJuIG5ldyBEdCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOnN0KCksLi4ueSh0KX0pfWZ1bmN0aW9uIHNlKGUsdCl7cmV0dXJuIG5ldyBEdCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOkwoKSwuLi55KHQpfSl9Y29uc3QgTHQ9cCgiWm9kVW5pb24iLChlLHQpPT57YXIuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5YaCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBPKGUsdCl7cmV0dXJuIG5ldyBMdCh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSwuLi55KHQpfSl9Y29uc3QgeHI9cCgiWm9kWG9yIiwoZSx0KT0+e0x0LmluaXQoZSx0KSxNcC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIGZjKGUsdCl7cmV0dXJuIG5ldyB4cih7dHlwZToidW5pb24iLG9wdGlvbnM6ZSxpbmNsdXNpdmU6ITEsLi4ueSh0KX0pfWNvbnN0IFByPXAoIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9PntMdC5pbml0KGUsdCksRHAuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcm8oZSx0LG4pe3JldHVybiBuZXcgUHIoe3R5cGU6InVuaW9uIixvcHRpb25zOnQsZGlzY3JpbWluYXRvcjplLC4uLnkobil9KX1jb25zdCBDcj1wKCJab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57THAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5MYigpfSk7ZnVuY3Rpb24gQnQoZSx0KXtyZXR1cm4gbmV3IENyKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6ZSxyaWdodDp0fSl9Y29uc3QgRXI9cCgiWm9kVHVwbGUiLChlLHQpPT57ZHQoKSxTaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkJiKCl9LHtyZXN0KGUpe3JldHVybiB0aGlzLmNsb25lKHsuLi50aGlzLl96b2QuZGVmLHJlc3Q6ZX0pfSxwYXJ0aWFsKCl7Y29uc3QgZT10aGlzLl96b2QuZGVmO2lmKGUuY2hlY2tzPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIHR1cGxlIHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO3JldHVybiB0aGlzLmNsb25lKHsuLi5lLGl0ZW1zOmUuaXRlbXMubWFwKHQ9Pm5ldyBVdCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSkpfSl9fSk7ZnVuY3Rpb24gQXIoZSx0LG4pe2NvbnN0IG89dCBpbnN0YW5jZW9mIFAscj1vP246dCxzPW8/dDpudWxsO3JldHVybiBuZXcgRXIoe3R5cGU6InR1cGxlIixpdGVtczplLHJlc3Q6cywuLi55KHIpfSl9Y29uc3QgaXQ9cCgiWm9kUmVjb3JkIiwoZSx0KT0+e2R0KCksQnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5VYigpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGV9KTtmdW5jdGlvbiBaKGUsdCxuKXtyZXR1cm4hdHx8IXQuX3pvZD9uZXcgaXQoe3R5cGU6InJlY29yZCIsa2V5VHlwZTpoKCksdmFsdWVUeXBlOmUsLi4ueSh0KX0pOm5ldyBpdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIG1jKGUsdCxuKXtyZXR1cm4gbmV3IGl0KHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pLHBhcnRpYWw6ITB9KX1mdW5jdGlvbiBnYyhlLHQsbil7cmV0dXJuIG5ldyBpdCh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsbW9kZToibG9vc2UiLC4uLnkobil9KX1jb25zdCBPcj1wKCJab2RNYXAiLChlLHQpPT57ZHQoKSxVcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmpiKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZSxlLm1pbj0oLi4ubik9PmUuY2hlY2soRGUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhEZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2sobHQoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soSXQoLi4ubikpfSk7ZnVuY3Rpb24gYmMoZSx0LG4pe3JldHVybiBuZXcgT3Ioe3R5cGU6Im1hcCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1jb25zdCBScj1wKCJab2RTZXQiLChlLHQpPT57ZHQoKSxIcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk1iKCksZS5taW49KC4uLm4pPT5lLmNoZWNrKERlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soRGUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKGx0KC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKEl0KC4uLm4pKX0pO2Z1bmN0aW9uIHZjKGUsdCl7cmV0dXJuIG5ldyBScih7dHlwZToic2V0Iix2YWx1ZVR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgYXQ9cCgiWm9kRW51bSIsKGUsdCk9PntGcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShvLHIscyk9PnhiKCksZS5lbnVtPXQuZW50cmllcyxlLm9wdGlvbnM9Wy4uLmUuX3pvZC52YWx1ZXNdO2NvbnN0IG49bmV3IFNldChPYmplY3Qua2V5cyh0LmVudHJpZXMpKTtlLmV4dHJhY3Q9KG8scik9Pntjb25zdCBzPXt9O2Zvcihjb25zdCBhIG9mIG8paWYobi5oYXMoYSkpc1thXT10LmVudHJpZXNbYV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2F9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBhdCh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX0sZS5leGNsdWRlPShvLHIpPT57Y29uc3Qgcz17Li4udC5lbnRyaWVzfTtmb3IoY29uc3QgYSBvZiBvKWlmKG4uaGFzKGEpKWRlbGV0ZSBzW2FdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHthfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgYXQoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9fSk7ZnVuY3Rpb24gaWUoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IGF0KHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4ueSh0KX0pfWZ1bmN0aW9uIHljKGUsdCl7cmV0dXJuIG5ldyBhdCh7dHlwZToiZW51bSIsZW50cmllczplLC4uLnkodCl9KX1jb25zdCBOcj1wKCJab2RMaXRlcmFsIiwoZSx0KT0+e1ZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGIoKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gbShlLHQpe3JldHVybiBuZXcgTnIoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLnkodCl9KX1jb25zdCBacj1wKCJab2RGaWxlIiwoZSx0KT0+e0pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+QWIoKSxlLm1pbj0obixvKT0+ZS5jaGVjayhEZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhsdChuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soQ24oQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiBfYyhlKXtyZXR1cm4gSGgoWnIsZSl9Y29uc3QganI9cCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e2R0KCksS3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aYigpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgWG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaChfdChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgYT1zO2EuZmF0YWwmJihhLmNvbnRpbnVlPSExKSxhLmNvZGU/PyhhLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBhfHwoYS5pbnB1dD1uLnZhbHVlKSxhLmluc3Q/PyhhLmluc3Q9ZSksbi5pc3N1ZXMucHVzaChfdChhKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIHNvKGUpe3JldHVybiBuZXcganIoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBVdD1wKCJab2RPcHRpb25hbCIsKGUsdCk9Pnt6aS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmVmKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gSihlKXtyZXR1cm4gbmV3IFV0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBpbz1wKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e1dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZWYoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBNcihlKXtyZXR1cm4gbmV3IGlvKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBxcj1wKCJab2ROdWxsYWJsZSIsKGUsdCk9PntHcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkhiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gd3QoZSl7cmV0dXJuIG5ldyBxcih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24ga2MoZSl7cmV0dXJuIEood3QoZSkpfWNvbnN0IERyPXAoIlpvZERlZmF1bHQiLChlLHQpPT57UXAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5WYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiBMcihlLHQpe3JldHVybiBuZXcgRHIoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOkpvKHQpfX0pfWNvbnN0IEJyPXAoIlpvZFByZWZhdWx0IiwoZSx0KT0+e1lwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBVcihlLHQpe3JldHVybiBuZXcgQnIoe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTpKbyh0KX19KX1jb25zdCBhbz1wKCJab2ROb25PcHRpb25hbCIsKGUsdCk9PntYcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkZiKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gSHIoZSx0KXtyZXR1cm4gbmV3IGFvKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IEZyPXAoIlpvZFN1Y2Nlc3MiLChlLHQpPT57ZWguaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uICRjKGUpe3JldHVybiBuZXcgRnIoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3QgVnI9cCgiWm9kQ2F0Y2giLChlLHQpPT57dGguaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5LYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gSnIoZSx0KXtyZXR1cm4gbmV3IFZyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkpzKHQpfSl9Y29uc3QgS3I9cCgiWm9kTmFOIiwoZSx0KT0+e25oLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Q2IoKX0pO2Z1bmN0aW9uIHdjKGUpe3JldHVybiBCaChLcixlKX1jb25zdCBIdD1wKCJab2RQaXBlIiwoZSx0KT0+e1RpLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2IoKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBzbihlLHQpe3JldHVybiBuZXcgSHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCBGdD1wKCJab2RDb2RlYyIsKGUsdCk9PntIdC5pbml0KGUsdCksSWkuaW5pdChlLHQpfSk7ZnVuY3Rpb24gU2MoZSx0LG4pe3JldHVybiBuZXcgRnQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiB6YyhlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyBGdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3QgV3I9cCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9PntIdC5pbml0KGUsdCksb2guaW5pdChlLHQpfSksR3I9cCgiWm9kUmVhZG9ubHkiLChlLHQpPT57cmguaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFFyKGUpe3JldHVybiBuZXcgR3Ioe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0IFlyPXAoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PntzaC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkViKCl9KTtmdW5jdGlvbiBUYyhlLHQpe3JldHVybiBuZXcgWXIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4ueSh0KX0pfWNvbnN0IFhyPXAoIlpvZExhenkiLChlLHQpPT57eGkuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZYigpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24gZXMoZSl7cmV0dXJuIG5ldyBYcih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCB0cz1wKCJab2RQcm9taXNlIiwoZSx0KT0+e2FoLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBJYyhlKXtyZXR1cm4gbmV3IHRzKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IG5zPXAoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e2loLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+TmIoKX0pO2Z1bmN0aW9uIFN0KGUpe3JldHVybiBuZXcgbnMoe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9BcihlPy5pbnB1dCk6ZT8uaW5wdXQ/P3goTCgpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9MKCl9KX1jb25zdCBWdD1wKCJab2RDdXN0b20iLChlLHQpPT57Y2guaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SYigpfSk7ZnVuY3Rpb24geGMoZSl7Y29uc3QgdD1uZXcgSyh7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBvcyhlLHQpe3JldHVybiBGaChWdCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiBycyhlLHQ9e30pe3JldHVybiBWaChWdCxlLHQpfWZ1bmN0aW9uIHNzKGUsdCl7cmV0dXJuIEpoKGUsdCl9Y29uc3QgUGM9V2gsQ2M9R2gsaXM9cCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9PntWdC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUG4oZSx0KSl9fSk7ZnVuY3Rpb24gRWMoZSx0PXt9KXtjb25zdCBuPW5ldyBpcyh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IEFjPSguLi5lKT0+UWgoe0NvZGVjOkZ0LEJvb2xlYW46TXQsU3RyaW5nOkV0fSwuLi5lKTtmdW5jdGlvbiBPYyhlKXtjb25zdCB0PWVzKCgpPT5PKFtoKGUpLEMoKSxCKCksdG8oKSx4KHQpLFooaCgpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIGNvKGUsdCl7cmV0dXJuIG5ldyBXcih7dHlwZToicGlwZSIsaW46c28oZSksb3V0OnR9KX1jb25zdCBzdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55OndyLFpvZEFycmF5OklyLFpvZEJhc2U2NDpHbixab2RCYXNlNjRVUkw6UW4sWm9kQmlnSW50OnF0LFpvZEJpZ0ludEZvcm1hdDplbyxab2RCb29sZWFuOk10LFpvZENJRFJ2NDpLbixab2RDSURSdjY6V24sWm9kQ1VJRDpMbixab2RDVUlEMjpCbixab2RDYXRjaDpWcixab2RDb2RlYzpGdCxab2RDcmVkaXRDYXJkOnZyLFpvZEN1c3RvbTpWdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6R2UsWm9kRGF0ZTpvbyxab2REZWZhdWx0OkRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpQcixab2RFMTY0OlluLFpvZEVtYWlsOmpuLFpvZEVtb2ppOnFuLFpvZEVudW06YXQsWm9kRXhhY3RPcHRpb25hbDppbyxab2RGaWxlOlpyLFpvZEZ1bmN0aW9uOm5zLFpvZEdVSUQ6TW4sWm9kSUJBTjp5cixab2RJUHY0OlZuLFpvZElQdjY6Sm4sWm9kSVNPRGF0ZTpPdCxab2RJU09EYXRlVGltZTpBdCxab2RJU09EdXJhdGlvbjpOdCxab2RJU09UaW1lOlJ0LFpvZEluc3RhbmNlT2Y6aXMsWm9kSW50ZXJzZWN0aW9uOkNyLFpvZEpXVDpYbixab2RLU1VJRDpGbixab2RMYXp5OlhyLFpvZExpdGVyYWw6TnIsWm9kTUFDOmJyLFpvZE1hcDpPcixab2ROYU46S3IsWm9kTmFub0lEOkRuLFpvZE5ldmVyOnpyLFpvZE5vbk9wdGlvbmFsOmFvLFpvZE51bGw6JHIsWm9kTnVsbGFibGU6cXIsWm9kTnVtYmVyOmp0LFpvZE51bWJlckZvcm1hdDpRZSxab2RPYmplY3Q6RHQsWm9kT3B0aW9uYWw6VXQsWm9kUGlwZTpIdCxab2RQcmVmYXVsdDpCcixab2RQcmVwcm9jZXNzOldyLFpvZFByb21pc2U6dHMsWm9kUmVhZG9ubHk6R3IsWm9kUmVjb3JkOml0LFpvZFNldDpScixab2RTdHJpbmc6RXQsWm9kU3RyaW5nRm9ybWF0OlUsWm9kU3VjY2VzczpGcixab2RTeW1ib2w6X3IsWm9kVGVtcGxhdGVMaXRlcmFsOllyLFpvZFRyYW5zZm9ybTpqcixab2RUdXBsZTpFcixab2RUeXBlOkUsWm9kVUxJRDpVbixab2RVUkw6WnQsWm9kVVVJRDpDZSxab2RVbmRlZmluZWQ6a3IsWm9kVW5pb246THQsWm9kVW5rbm93bjpTcixab2RWb2lkOlRyLFpvZFhJRDpIbixab2RYb3I6eHIsX1pvZFN0cmluZzpabixfZGVmYXVsdDpMcixfZnVuY3Rpb246U3QsYW55Om5vLGFycmF5OngsYmFzZTY0OkZhLGJhc2U2NHVybDpWYSxiaWdpbnQ6aWMsYm9vbGVhbjpCLGNhdGNoOkpyLGNoZWNrOnhjLGNpZHJ2NDpVYSxjaWRydjY6SGEsY29kZWM6U2MsY3JlZGl0Q2FyZDpLYSxjdWlkOk5hLGN1aWQyOlphLGN1cnJlbmN5Q29kZTplYyxjdXN0b206b3MsZGF0ZTpkYyxkZXNjcmliZTpQYyxkaXNjcmltaW5hdGVkVW5pb246cm8sZTE2NDpKYSxlbWFpbDp6YSxlbW9qaTpPYSxlbnVtOmllLGV4YWN0T3B0aW9uYWw6TXIsZmlsZTpfYyxmbG9hdDMyOm5jLGZsb2F0NjQ6b2MsZnVuY3Rpb246U3QsZ3VpZDpUYSxoYXNoOnRjLGhleDpYYSxob3N0bmFtZTpZYSxodHRwVXJsOkFhLGliYW46V2EsaW5zdGFuY2VvZjpFYyxpbnQ6cm4saW50MzI6cmMsaW50NjQ6YWMsaW50ZXJzZWN0aW9uOkJ0LGludmVydENvZGVjOnpjLGlwdjQ6RGEsaXB2NjpCYSxqc29uOk9jLGp3dDpHYSxrZXlvZjpwYyxrc3VpZDpxYSxsYXp5OmVzLGxpdGVyYWw6bSxsb29zZU9iamVjdDpzZSxsb29zZVJlY29yZDpnYyxtYWM6TGEsbWFwOmJjLG1ldGE6Q2MsbmFuOndjLG5hbm9pZDpSYSxuYXRpdmVFbnVtOnljLG5ldmVyOnN0LG5vbm9wdGlvbmFsOkhyLG51bGw6dG8sbnVsbGFibGU6d3QsbnVsbGlzaDprYyxudW1iZXI6QyxvYmplY3Q6YixvcHRpb25hbDpKLHBhcnRpYWxSZWNvcmQ6bWMscGlwZTpzbixwcmVmYXVsdDpVcixwcmVwcm9jZXNzOmNvLHByb21pc2U6SWMscmVhZG9ubHk6UXIscmVjb3JkOloscmVmaW5lOnJzLHNldDp2YyxzdHJpY3RPYmplY3Q6aGMsc3RyaW5nOmgsc3RyaW5nRm9ybWF0OlFhLHN0cmluZ2Jvb2w6QWMsc3VjY2VzczokYyxzdXBlclJlZmluZTpzcyxzeW1ib2w6dWMsdGVtcGxhdGVMaXRlcmFsOlRjLHRyYW5zZm9ybTpzbyx0dXBsZTpBcix1aW50MzI6c2MsdWludDY0OmNjLHVsaWQ6amEsdW5kZWZpbmVkOiR0LHVuaW9uOk8sdW5rbm93bjpMLHVybDpFYSx1dWlkOklhLHV1aWR2NDp4YSx1dWlkdjY6UGEsdXVpZHY3OkNhLHZvaWQ6bGMseGlkOk1hLHhvcjpmY30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxzZj17aW52YWxpZF90eXBlOiJpbnZhbGlkX3R5cGUiLHRvb19iaWc6InRvb19iaWciLHRvb19zbWFsbDoidG9vX3NtYWxsIixpbnZhbGlkX2Zvcm1hdDoiaW52YWxpZF9mb3JtYXQiLG5vdF9tdWx0aXBsZV9vZjoibm90X211bHRpcGxlX29mIix1bnJlY29nbml6ZWRfa2V5czoidW5yZWNvZ25pemVkX2tleXMiLGludmFsaWRfdW5pb246ImludmFsaWRfdW5pb24iLGludmFsaWRfa2V5OiJpbnZhbGlkX2tleSIsaW52YWxpZF9lbGVtZW50OiJpbnZhbGlkX2VsZW1lbnQiLGludmFsaWRfdmFsdWU6ImludmFsaWRfdmFsdWUiLGN1c3RvbToiY3VzdG9tIn07ZnVuY3Rpb24gYWYoZSl7b2Uoe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiBjZigpe3JldHVybiBvZSgpLmN1c3RvbUVycm9yfXZhciBObztOb3x8KE5vPXt9KTtmdW5jdGlvbiB1ZihlKXtyZXR1cm4gaWEoQXQsZSl9ZnVuY3Rpb24gaXYoZSl7cmV0dXJuIGFhKE90LGUpfWZ1bmN0aW9uIGF2KGUpe3JldHVybiBjYShSdCxlKX1mdW5jdGlvbiBjdihlKXtyZXR1cm4gdWEoTnQsZSl9Y29uc3QgUmM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZElTT0RhdGU6T3QsWm9kSVNPRGF0ZVRpbWU6QXQsWm9kSVNPRHVyYXRpb246TnQsWm9kSVNPVGltZTpSdCxkYXRlOml2LGRhdGV0aW1lOnVmLGR1cmF0aW9uOmN2LHRpbWU6YXZ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksej17Li4uc3YsLi4ub3YsaXNvOlJjfSx1dj1uZXcgU2V0KFsiJHNjaGVtYSIsIiRyZWYiLCIkZGVmcyIsImRlZmluaXRpb25zIiwiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiLCJ0eXBlIiwiZW51bSIsImNvbnN0IiwiYW55T2YiLCJvbmVPZiIsImFsbE9mIiwibm90IiwicHJvcGVydGllcyIsInJlcXVpcmVkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsInByb3BlcnR5TmFtZXMiLCJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyIsIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJtaW5JdGVtcyIsIm1heEl0ZW1zIiwidW5pcXVlSXRlbXMiLCJjb250YWlucyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiLCJtaW5MZW5ndGgiLCJtYXhMZW5ndGgiLCJwYXR0ZXJuIiwiZm9ybWF0IiwibWluaW11bSIsIm1heGltdW0iLCJleGNsdXNpdmVNaW5pbXVtIiwiZXhjbHVzaXZlTWF4aW11bSIsIm11bHRpcGxlT2YiLCJkZXNjcmlwdGlvbiIsImRlZmF1bHQiLCJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJpZiIsInRoZW4iLCJlbHNlIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVudFJlcXVpcmVkIiwibnVsbGFibGUiLCJyZWFkT25seSJdKTtmdW5jdGlvbiBsdihlLHQpe2NvbnN0IG49ZS4kc2NoZW1hO3JldHVybiBuPT09Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj8iZHJhZnQtMjAyMC0xMiI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiPyJkcmFmdC03IjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI/ImRyYWZ0LTQiOnQ/PyJkcmFmdC0yMDIwLTEyIn1mdW5jdGlvbiBqdShlLHQpe3JldHVybiBlLm1hcCgobixvKT0+bzx0P246bi5vcHRpb25hbCgpKX1mdW5jdGlvbiBkdihlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIHB2KGUsdCl7aWYoIWUuc3RhcnRzV2l0aCgiIyIpKXRocm93IG5ldyBFcnJvcigiRXh0ZXJuYWwgJHJlZiBpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IGxvY2FsIHJlZnMgKCMvLi4uKSBhcmUgYWxsb3dlZCIpO2NvbnN0IG49ZS5zbGljZSgxKS5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKTtpZihuLmxlbmd0aD09PTApcmV0dXJuIHQucm9vdFNjaGVtYTtjb25zdCBvPXQudmVyc2lvbj09PSJkcmFmdC0yMDIwLTEyIj8iJGRlZnMiOiJkZWZpbml0aW9ucyI7aWYoblswXT09PW8pe2NvbnN0IHI9blsxXT09PXZvaWQgMD92b2lkIDA6ZHYoblsxXSk7aWYoIXJ8fCF0LmRlZnNbcl0pdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCk7cmV0dXJuIHQuZGVmc1tyXX10aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKX1mdW5jdGlvbiBodihlLHQpe3JldHVybiB6LnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKHR5cGVvZiByIT0ib2JqZWN0Inx8cj09PW51bGx8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuO2NvbnN0IHM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocik7aWYodC5taW5Qcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5Qcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gc21hbGw6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlID49JHt0Lm1pblByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5tYXhQcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4UHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIGJpZzogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPD0ke3QubWF4UHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0LmtleVNjaGVtYSlmb3IoY29uc3QgYSBvZiBzKXtjb25zdCBpPXQua2V5U2NoZW1hLnNhZmVQYXJzZShhKTtpLnN1Y2Nlc3N8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmkuZXJyb3IuaXNzdWVzLGlucHV0OmEscGF0aDpbYV0sY29udGludWU6ITB9KX19KS5waXBlKGUpfWZ1bmN0aW9uIFpzKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuInoiO2NvbnN0IG49dHlwZW9mIGU7aWYobiE9PSJvYmplY3QiKXtpZihuPT09Im51bWJlciImJk51bWJlci5pc05hTihlKSlyZXR1cm4gbnVsbDtjb25zdCBvPVN0cmluZyhlKTtyZXR1cm5gJHtuWzBdfSR7by5sZW5ndGh9OiR7b31gfWlmKHQuaGFzKGUpKXJldHVybiBudWxsO3QuYWRkKGUpO3RyeXtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCBzPVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGk9WnMoYSx0KTtpZihpPT09bnVsbClyZXR1cm4gbnVsbDtzLnB1c2goaSl9cmV0dXJuYGEke3MubGVuZ3RofTpbJHtzLmpvaW4oIiwiKX1dYH1jb25zdCBvPU9iamVjdC5rZXlzKGUpLnNvcnQoKSxyPVtdO2Zvcihjb25zdCBzIG9mIG8pe2NvbnN0IGE9WnMoZVtzXSx0KTtpZihhPT09bnVsbClyZXR1cm4gbnVsbDtyLnB1c2goYCR7cy5sZW5ndGh9OiR7c309JHthfWApfXJldHVybmBvJHtyLmxlbmd0aH06eyR7ci5qb2luKCIsIil9fWB9ZmluYWxseXt0LmRlbGV0ZShlKX19Y29uc3QgZnY9bmV3IFNldChbIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbnRhaW5zIiwicHJvcGVydHlOYW1lcyIsIm5vdCIsImlmIiwidGhlbiIsImVsc2UiLCJhbGxPZiIsImFueU9mIiwib25lT2YiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiY29udGVudFNjaGVtYSJdKSxtdj1uZXcgU2V0KFsicHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVuY2llcyIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiXSk7ZnVuY3Rpb24gZW4oZSl7cmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGw/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoZW4pOnR5cGVvZiBlLiRyZWY9PSJzdHJpbmciPyEwOk9iamVjdC5lbnRyaWVzKGUpLnNvbWUoKFt0LG5dKT0+ZnYuaGFzKHQpP2VuKG4pOiFtdi5oYXModCl8fHR5cGVvZiBuIT0ib2JqZWN0Inx8bj09PW51bGw/ITE6T2JqZWN0LnZhbHVlcyhuKS5zb21lKGVuKSl9ZnVuY3Rpb24gTXUoZSl7cmV0dXJuIGU9PT0xPyJlbGVtZW50IjoiZWxlbWVudHMifWZ1bmN0aW9uIGd2KGUsdCl7cmV0dXJuIHoudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYodC51bmlxdWVJdGVtcz09PSEwKXtjb25zdCBzPW5ldyBNYXA7Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2NvbnN0IGk9WnMoclthXSxuZXcgU2V0KTtpZihpPT09bnVsbCljb250aW51ZTtjb25zdCBsPXMuZ2V0KGkpO2lmKGw9PT12b2lkIDApe3Muc2V0KGksYSk7Y29udGludWV9by5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBpdGVtcyBtdXN0IGJlIHVuaXF1ZTogZWxlbWVudCBhdCBpbmRleCAke2F9IGR1cGxpY2F0ZXMgdGhlIG9uZSBhdCBpbmRleCAke2x9YCxpbnB1dDpyLHBhdGg6W2FdLGNvbnRpbnVlOiEwfSl9fWlmKHQuY29udGFpbnNTY2hlbWEpe2NvbnN0IHM9dC5taW5Db250YWlucz8/MSxhPXQubWF4Q29udGFpbnMhPT12b2lkIDA/dC5tYXhDb250YWlucysxOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgaT0wO2Zvcihjb25zdCBsIG9mIHIpaWYodC5jb250YWluc1NjaGVtYS5zYWZlUGFyc2UobCkuc3VjY2VzcyYmKytpPj1hKWJyZWFrO2k8cyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHtzfSBtYXRjaGluZyAke011KHMpfTsgZm91bmQgJHtpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pLHQubWF4Q29udGFpbnMhPT12b2lkIDAmJmk+dC5tYXhDb250YWlucyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke3QubWF4Q29udGFpbnN9IG1hdGNoaW5nICR7TXUodC5tYXhDb250YWlucyl9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSl9fX0pLnBpcGUoZSl9ZnVuY3Rpb24gcXUoZSx0KXtpZihlIT09ITEpcmV0dXJuIGU9PT12b2lkIDB8fGU9PT0hMD96LmFueSgpOmxlKGUsdCl9Y29uc3QgYnY9L14oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkOlswLTVdXGQoPzpcLlxkKyk/KD86WnxbKy1dKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZCkkLztmdW5jdGlvbiBsZihlLHQpe2lmKGUubm90IT09dm9pZCAwKXtpZih0eXBlb2YgZS5ub3Q9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlLm5vdCkubGVuZ3RoPT09MClyZXR1cm4gei5uZXZlcigpO3Rocm93IG5ldyBFcnJvcigibm90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWm9kIChleGNlcHQgeyBub3Q6IHt9IH0gZm9yIG5ldmVyKSIpfWlmKGUudW5ldmFsdWF0ZWRJdGVtcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkSXRlbXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmlmIT09dm9pZCAwfHxlLnRoZW4hPT12b2lkIDB8fGUuZWxzZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvbmRpdGlvbmFsIHNjaGVtYXMgKGlmL3RoZW4vZWxzZSkgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmRlcGVuZGVudFNjaGVtYXMhPT12b2lkIDB8fGUuZGVwZW5kZW50UmVxdWlyZWQhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJkZXBlbmRlbnRTY2hlbWFzIGFuZCBkZXBlbmRlbnRSZXF1aXJlZCBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuJHJlZil7Y29uc3Qgcj1lLiRyZWY7aWYodC5yZWZzLmhhcyhyKSlyZXR1cm4gdC5yZWZzLmdldChyKTtpZih0LnByb2Nlc3NpbmcuaGFzKHIpKXJldHVybiB6LmxhenkoKCk9PntpZighdC5yZWZzLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBub3QgcmVzb2x2ZWQ6ICR7cn1gKTtyZXR1cm4gdC5yZWZzLmdldChyKX0pO3QucHJvY2Vzc2luZy5hZGQocik7Y29uc3Qgcz1wdihyLHQpLGE9bGUocyx0KTtyZXR1cm4gdC5yZWZzLnNldChyLGEpLHQucHJvY2Vzc2luZy5kZWxldGUociksYX1pZihlLmVudW0hPT12b2lkIDApe2NvbnN0IHI9ZS5lbnVtO2lmKHQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJmUubnVsbGFibGU9PT0hMCYmci5sZW5ndGg9PT0xJiZyWzBdPT09bnVsbClyZXR1cm4gei5udWxsKCk7aWYoci5sZW5ndGg9PT0wKXJldHVybiB6Lm5ldmVyKCk7aWYoci5sZW5ndGg9PT0xKXJldHVybiB6LmxpdGVyYWwoclswXSk7aWYoci5ldmVyeShhPT50eXBlb2YgYT09InN0cmluZyIpKXJldHVybiB6LmVudW0ocik7Y29uc3Qgcz1yLm1hcChhPT56LmxpdGVyYWwoYSkpO3JldHVybiBzLmxlbmd0aDwyP3NbMF06ei51bmlvbihbc1swXSxzWzFdLC4uLnMuc2xpY2UoMildKX1pZihlLmNvbnN0IT09dm9pZCAwKXJldHVybiB6LmxpdGVyYWwoZS5jb25zdCk7Y29uc3Qgbj1lLnR5cGU7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3Qgcj1uLm1hcChzPT57Y29uc3QgYT17Li4uZSx0eXBlOnN9O3JldHVybiBsZihhLHQpfSk7cmV0dXJuIHIubGVuZ3RoPT09MD96Lm5ldmVyKCk6ci5sZW5ndGg9PT0xP3JbMF06ei51bmlvbihyKX1pZighbilyZXR1cm4gei5hbnkoKTtsZXQgbztzd2l0Y2gobil7Y2FzZSJzdHJpbmciOntsZXQgcj16LnN0cmluZygpO2lmKGUuZm9ybWF0KXtjb25zdCBzPWUuZm9ybWF0O3M9PT0iZW1haWwiP3I9ci5jaGVjayh6LmVtYWlsKCkpOnM9PT0idXJpInx8cz09PSJ1cmktcmVmZXJlbmNlIj9yPXIuY2hlY2soei51cmwoKSk6cz09PSJ1dWlkInx8cz09PSJndWlkIj9yPXIuY2hlY2soei51dWlkKCkpOnM9PT0iZGF0ZS10aW1lIj9yPXIuY2hlY2soei5pc28uZGF0ZXRpbWUoe29mZnNldDohMH0pKTpzPT09ImRhdGUiP3I9ci5jaGVjayh6Lmlzby5kYXRlKCkpOnM9PT0idGltZSI/cj1yLmNoZWNrKHoucmVnZXgoYnYpKTpzPT09ImR1cmF0aW9uIj9yPXIuY2hlY2soei5pc28uZHVyYXRpb24oKSk6cz09PSJob3N0bmFtZSI/cj1yLmNoZWNrKHouaG9zdG5hbWUoKSk6cz09PSJpcHY0Ij9yPXIuY2hlY2soei5pcHY0KCkpOnM9PT0iaXB2NiI/cj1yLmNoZWNrKHouaXB2NigpKTpzPT09Im1hYyI/cj1yLmNoZWNrKHoubWFjKCkpOnM9PT0iY2lkciI/cj1yLmNoZWNrKHouY2lkcnY0KCkpOnM9PT0iY2lkci12NiI/cj1yLmNoZWNrKHouY2lkcnY2KCkpOnM9PT0iYmFzZTY0Ij9yPXIuY2hlY2soei5iYXNlNjQoKSk6cz09PSJiYXNlNjR1cmwiP3I9ci5jaGVjayh6LmJhc2U2NHVybCgpKTpzPT09ImUxNjQiP3I9ci5jaGVjayh6LmUxNjQoKSk6cz09PSJjcmVkaXRfY2FyZCI/cj1yLmNoZWNrKHouY3JlZGl0Q2FyZCgpKTpzPT09ImliYW4iP3I9ci5jaGVjayh6LmliYW4oKSk6cz09PSJqd3QiP3I9ci5jaGVjayh6Lmp3dCgpKTpzPT09ImVtb2ppIj9yPXIuY2hlY2soei5lbW9qaSgpKTpzPT09Im5hbm9pZCI/cj1yLmNoZWNrKHoubmFub2lkKCkpOnM9PT0iY3VpZCI/cj1yLmNoZWNrKHouY3VpZCgpKTpzPT09ImN1aWQyIj9yPXIuY2hlY2soei5jdWlkMigpKTpzPT09InVsaWQiP3I9ci5jaGVjayh6LnVsaWQoKSk6cz09PSJ4aWQiP3I9ci5jaGVjayh6LnhpZCgpKTpzPT09ImtzdWlkIiYmKHI9ci5jaGVjayh6LmtzdWlkKCkpKX10eXBlb2YgZS5taW5MZW5ndGg9PSJudW1iZXIiJiYocj1yLm1pbihlLm1pbkxlbmd0aCkpLHR5cGVvZiBlLm1heExlbmd0aD09Im51bWJlciImJihyPXIubWF4KGUubWF4TGVuZ3RoKSksZS5wYXR0ZXJuJiYocj1yLnJlZ2V4KG5ldyBSZWdFeHAoZS5wYXR0ZXJuKSkpLG89cjticmVha31jYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjp7bGV0IHI9bj09PSJpbnRlZ2VyIj96Lm51bWJlcigpLmludCgpOnoubnVtYmVyKCk7dHlwZW9mIGUubWluaW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWluaW11bSE9PSEwJiYocj1yLm1pbihlLm1pbmltdW0pKSx0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNYXhpbXVtIT09ITAmJihyPXIubWF4KGUubWF4aW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1pbmltdW09PSJudW1iZXIiP3I9ci5ndChlLmV4Y2x1c2l2ZU1pbmltdW0pOmUuZXhjbHVzaXZlTWluaW11bT09PSEwJiZ0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmKHI9ci5ndChlLm1pbmltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNYXhpbXVtPT0ibnVtYmVyIj9yPXIubHQoZS5leGNsdXNpdmVNYXhpbXVtKTplLmV4Y2x1c2l2ZU1heGltdW09PT0hMCYmdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJihyPXIubHQoZS5tYXhpbXVtKSksdHlwZW9mIGUubXVsdGlwbGVPZj09Im51bWJlciImJihyPXIubXVsdGlwbGVPZihlLm11bHRpcGxlT2YpKSxvPXI7YnJlYWt9Y2FzZSJib29sZWFuIjp7bz16LmJvb2xlYW4oKTticmVha31jYXNlIm51bGwiOntvPXoubnVsbCgpO2JyZWFrfWNhc2Uib2JqZWN0Ijp7Y29uc3Qgcj17fSxzPWUucHJvcGVydGllc3x8e30sYT1uZXcgU2V0KGUucmVxdWlyZWR8fFtdKSxpPXR5cGVvZiBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT0ib2JqZWN0Ij9sZShlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHQpOnZvaWQgMDtmb3IoY29uc3RbZixnXW9mIE9iamVjdC5lbnRyaWVzKHMpKXtjb25zdCB2PWxlKGcsdCk7dXQocixmLGEuaGFzKGYpP3Y6di5vcHRpb25hbCgpKX1pZihlLnBhdHRlcm5Qcm9wZXJ0aWVzKXtjb25zdCBmPWUucGF0dGVyblByb3BlcnRpZXMsZz1PYmplY3Qua2V5cyhmKSx2PVtdO2Zvcihjb25zdCAkIG9mIGcpe2NvbnN0IFM9bGUoZlskXSx0KSxqPXouc3RyaW5nKCkucmVnZXgobmV3IFJlZ0V4cCgkKSk7di5wdXNoKHoubG9vc2VSZWNvcmQoaixTKSl9Y29uc3QgXz1bXTtpZihPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmXy5wdXNoKHoub2JqZWN0KHIpLnBhc3N0aHJvdWdoKCkpLF8ucHVzaCguLi52KSxfLmxlbmd0aD09PTApbz16Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKTtlbHNlIGlmKF8ubGVuZ3RoPT09MSlvPV9bMF07ZWxzZXtsZXQgJD16LmludGVyc2VjdGlvbihfWzBdLF9bMV0pO2ZvcihsZXQgUz0yO1M8Xy5sZW5ndGg7UysrKSQ9ei5pbnRlcnNlY3Rpb24oJCxfW1NdKTtvPSR9aWYoZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExKXtjb25zdCAkPU9iamVjdC5rZXlzKHIpLFM9Zy5tYXAoTj0+bmV3IFJlZ0V4cChOKSksaj1vO289by5jaGVjayhOPT57aWYoIUplKE4udmFsdWUpKXJldHVybjtjb25zdCBJPVtdO2Zvcihjb25zdCByZSBvZiBPYmplY3Qua2V5cyhOLnZhbHVlKSkkLmluY2x1ZGVzKHJlKXx8Uy5zb21lKFc9PlcudGVzdChyZSkpfHxJLnB1c2gocmUpO0kubGVuZ3RoJiZOLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czpJLGlucHV0Ok4udmFsdWUsaW5zdDpqfSl9KX19ZWxzZXtjb25zdCBmPXoub2JqZWN0KHIpO2UuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMT9vPWYuc3RyaWN0KCk6aT9vPWYuY2F0Y2hhbGwoaSk6bz1mLnBhc3N0aHJvdWdoKCl9Y29uc3QgbD1lLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJmUucHJvcGVydHlOYW1lcyE9PSEwLHU9dHlwZW9mIGUubWluUHJvcGVydGllcz09Im51bWJlciI/ZS5taW5Qcm9wZXJ0aWVzOnZvaWQgMCxkPXR5cGVvZiBlLm1heFByb3BlcnRpZXM9PSJudW1iZXIiP2UubWF4UHJvcGVydGllczp2b2lkIDA7aWYobHx8dSE9PXZvaWQgMHx8ZCE9PXZvaWQgMCl7bGV0IGY7aWYobCl7Y29uc3QgZz10eXBlb2YgZS5wcm9wZXJ0eU5hbWVzPT0ib2JqZWN0IiYmZS5wcm9wZXJ0eU5hbWVzLnR5cGU9PT12b2lkIDA/e3R5cGU6InN0cmluZyIsLi4uZS5wcm9wZXJ0eU5hbWVzfTplLnByb3BlcnR5TmFtZXM7Zj1sZShnLHQpfW89aHYobyx7a2V5U2NoZW1hOmYsbWluUHJvcGVydGllczp1LG1heFByb3BlcnRpZXM6ZH0pfWJyZWFrfWNhc2UiYXJyYXkiOntjb25zdCByPWUucHJlZml4SXRlbXMscz1lLml0ZW1zO2lmKHImJkFycmF5LmlzQXJyYXkocikpe2NvbnN0IGE9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxpPXIubWFwKGY9PmxlKGYsdCkpLGw9anUoaSxhKSx1PUFycmF5LmlzQXJyYXkocyk/dm9pZCAwOnF1KHMsdCksZD16LnR1cGxlKGwpO289dT9kLnJlc3QodSk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soei5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soei5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGE9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxpPXMubWFwKGY9PmxlKGYsdCkpLGw9anUoaSxhKSx1PXF1KGUuYWRkaXRpb25hbEl0ZW1zLHQpLGQ9ei50dXBsZShsKTtvPXU/ZC5yZXN0KHUpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHoubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHoubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihzIT09dm9pZCAwKXtjb25zdCBhPWxlKHMsdCk7bGV0IGk9ei5hcnJheShhKTt0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihpPWkubWluKGUubWluSXRlbXMpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihpPWkubWF4KGUubWF4SXRlbXMpKSxvPWl9ZWxzZSBvPXouYXJyYXkoei5hbnkoKSk7KGUudW5pcXVlSXRlbXM9PT0hMHx8ZS5jb250YWlucyE9PXZvaWQgMCkmJihvPWd2KG8se3VuaXF1ZUl0ZW1zOmUudW5pcXVlSXRlbXM9PT0hMCxjb250YWluc1NjaGVtYTplLmNvbnRhaW5zIT09dm9pZCAwP2xlKGUuY29udGFpbnMsdCk6dm9pZCAwLG1pbkNvbnRhaW5zOnR5cGVvZiBlLm1pbkNvbnRhaW5zPT0ibnVtYmVyIj9lLm1pbkNvbnRhaW5zOnZvaWQgMCxtYXhDb250YWluczp0eXBlb2YgZS5tYXhDb250YWlucz09Im51bWJlciI/ZS5tYXhDb250YWluczp2b2lkIDB9KSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGU6ICR7bn1gKX1yZXR1cm4gb31mdW5jdGlvbiBsZShlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/ei5hbnkoKTp6Lm5ldmVyKCk7bGV0IG49bGYoZSx0KTtjb25zdCBvPWUudHlwZXx8ZS5lbnVtIT09dm9pZCAwfHxlLmNvbnN0IT09dm9pZCAwO2lmKGUuYW55T2YmJkFycmF5LmlzQXJyYXkoZS5hbnlPZikpe2NvbnN0IGk9ZS5hbnlPZi5tYXAodT0+bGUodSx0KSksbD16LnVuaW9uKGkpO249bz96LmludGVyc2VjdGlvbihuLGwpOmx9aWYoZS5vbmVPZiYmQXJyYXkuaXNBcnJheShlLm9uZU9mKSl7Y29uc3QgaT1lLm9uZU9mLm1hcCh1PT5sZSh1LHQpKSxsPXoueG9yKGkpO249bz96LmludGVyc2VjdGlvbihuLGwpOmx9aWYoZS5hbGxPZiYmQXJyYXkuaXNBcnJheShlLmFsbE9mKSlpZihlLmFsbE9mLmxlbmd0aD09PTApbj1vP246ei5hbnkoKTtlbHNle2xldCBpPW8/bjpsZShlLmFsbE9mWzBdLHQpO2NvbnN0IGw9bz8wOjE7Zm9yKGxldCB1PWw7dTxlLmFsbE9mLmxlbmd0aDt1KyspaT16LmludGVyc2VjdGlvbihpLGxlKGUuYWxsT2ZbdV0sdCkpO249aX1lLm51bGxhYmxlPT09ITAmJnQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJihuPXoubnVsbGFibGUobikpLGUucmVhZE9ubHk9PT0hMCYmKG49ei5yZWFkb25seShuKSksZS5kZWZhdWx0IT09dm9pZCAwJiYobj1uLmRlZmF1bHQoZS5kZWZhdWx0KSk7Y29uc3Qgcj17fSxzPVsiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiXTtmb3IoY29uc3QgaSBvZiBzKWkgaW4gZSYmKHJbaV09ZVtpXSk7Y29uc3QgYT1bImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIl07Zm9yKGNvbnN0IGkgb2YgYSlpIGluIGUmJihyW2ldPWVbaV0pO2lmKGUudHlwZT09PSJvYmplY3QiJiZlLiRyZWY9PT12b2lkIDApe2UucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmIWVuKGUucHJvcGVydHlOYW1lcykmJihyLnByb3BlcnR5TmFtZXM9ZS5wcm9wZXJ0eU5hbWVzKTtmb3IoY29uc3QgaSBvZlsibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiXSllW2ldIT09dm9pZCAwJiYocltpXT1lW2ldKX1pZihlLnR5cGU9PT0iYXJyYXkiJiZlLiRyZWY9PT12b2lkIDApe2UuY29udGFpbnMhPT12b2lkIDAmJiFlbihlLmNvbnRhaW5zKSYmKHIuY29udGFpbnM9ZS5jb250YWlucyk7Zm9yKGNvbnN0IGkgb2ZbInVuaXF1ZUl0ZW1zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyJdKWVbaV0hPT12b2lkIDAmJihyW2ldPWVbaV0pfWZvcihjb25zdCBpIG9mIE9iamVjdC5rZXlzKGUpKXV2LmhhcyhpKXx8dXQocixpLGVbaV0pO3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmdC5yZWdpc3RyeS5hZGQobixyKSxlLmRlc2NyaXB0aW9uJiYobj1uLmRlc2NyaWJlKGUuZGVzY3JpcHRpb24pKSxufWZ1bmN0aW9uIGRmKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT96LmFueSgpOnoubmV2ZXIoKTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoImZyb21KU09OU2NoZW1hIGlucHV0IGlzIG5vdCB2YWxpZCBKU09OIChwb3NzaWJseSBjeWNsaWMpOyB1c2UgJGRlZnMvJHJlZiBmb3IgcmVjdXJzaXZlIHNjaGVtYXMiKX1jb25zdCBvPWx2KG4sdD8uZGVmYXVsdFRhcmdldCkscj1uLiRkZWZzfHxuLmRlZmluaXRpb25zfHx7fSxzPXt2ZXJzaW9uOm8sZGVmczpyLHJlZnM6bmV3IE1hcCxwcm9jZXNzaW5nOm5ldyBTZXQscm9vdFNjaGVtYTpuLHJlZ2lzdHJ5OnQ/LnJlZ2lzdHJ5Pz93ZX07cmV0dXJuIGxlKG4scyl9ZnVuY3Rpb24gcGYoZSl7cmV0dXJuIGRhKGUse29iamVjdDp0PT50LnBhcnRpYWwoKSx1bmlvbjp0PT57Y29uc3Qgbj10Ll96b2QuZGVmO3JldHVybiBuLmRpc2NyaW1pbmF0b3I9PT12b2lkIDA/dDpPKG4ub3B0aW9ucyl9fSl9ZnVuY3Rpb24gdnYoZSx0KXtpZighdD8ubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49ZS5fem9kLmRlZjtyZXR1cm4gUShlLHVlKG4se2NoZWNrczpbLi4ubi5jaGVja3M/P1tdLC4uLnRdfSkse3BhcmVudDohMH0pfWZ1bmN0aW9uIGhmKGUpe3JldHVybiB2dihlLm91dCxlLmNoZWNrcyl9ZnVuY3Rpb24geXYoZSl7cmV0dXJuIGUuaW4uX3pvZC50cmFpdHMuaGFzKCIkWm9kVHJhbnNmb3JtIik/aGYoZSk6ZS5pbn1mdW5jdGlvbiBmZihlKXtyZXR1cm4gZGEoZSx7cGlwZTp0PT55dih0Ll96b2QuZGVmKSxkZWZhdWx0Oih0LG4pPT5uP0oodC5fem9kLmRlZi5pbm5lclR5cGUpOnQsY2F0Y2g6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIG1mKGUpe3JldHVybiBkYShlLHtwaXBlOnQ9PmhmKHQuX3pvZC5kZWYpLHByZWZhdWx0Oih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBfdihlKXtyZXR1cm4gZ2goRXQsZSl9ZnVuY3Rpb24ga3YoZSl7cmV0dXJuIGtoKGp0LGUpfWZ1bmN0aW9uICR2KGUpe3JldHVybiB4aChNdCxlKX1mdW5jdGlvbiB3dihlKXtyZXR1cm4gQ2gocXQsZSl9ZnVuY3Rpb24gU3YoZSl7cmV0dXJuIExoKG9vLGUpfWNvbnN0IGdmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiaWdpbnQ6d3YsYm9vbGVhbjokdixkYXRlOlN2LG51bWJlcjprdixzdHJpbmc6X3Z9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksRHU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpHcywkaW5wdXQ6RWksJG91dHB1dDpDaSxJTlZBTElEOk9pLE5FVkVSOldzLFRpbWVQcmVjaXNpb246c2EsWm9kQW55OndyLFpvZEFycmF5OklyLFpvZEJhc2U2NDpHbixab2RCYXNlNjRVUkw6UW4sWm9kQmlnSW50OnF0LFpvZEJpZ0ludEZvcm1hdDplbyxab2RCb29sZWFuOk10LFpvZENJRFJ2NDpLbixab2RDSURSdjY6V24sWm9kQ1VJRDpMbixab2RDVUlEMjpCbixab2RDYXRjaDpWcixab2RDb2RlYzpGdCxab2RDb21waWxlQXN5bmNFcnJvcjpSaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpOaSxab2RDcmVkaXRDYXJkOnZyLFpvZEN1c3RvbTpWdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6R2UsWm9kRGF0ZTpvbyxab2REZWZhdWx0OkRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpQcixab2RFMTY0OlluLFpvZEVtYWlsOmpuLFpvZEVtb2ppOnFuLFpvZEVudW06YXQsWm9kRXJyb3I6cmYsWm9kRXhhY3RPcHRpb25hbDppbyxab2RGaWxlOlpyLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gTm99LFpvZEZ1bmN0aW9uOm5zLFpvZEdVSUQ6TW4sWm9kSUJBTjp5cixab2RJUHY0OlZuLFpvZElQdjY6Sm4sWm9kSVNPRGF0ZTpPdCxab2RJU09EYXRlVGltZTpBdCxab2RJU09EdXJhdGlvbjpOdCxab2RJU09UaW1lOlJ0LFpvZEluc3RhbmNlT2Y6aXMsWm9kSW50ZXJzZWN0aW9uOkNyLFpvZElzc3VlQ29kZTpzZixab2RKV1Q6WG4sWm9kS1NVSUQ6Rm4sWm9kTGF6eTpYcixab2RMaXRlcmFsOk5yLFpvZE1BQzpicixab2RNYXA6T3IsWm9kTmFOOktyLFpvZE5hbm9JRDpEbixab2ROZXZlcjp6cixab2ROb25PcHRpb25hbDphbyxab2ROdWxsOiRyLFpvZE51bGxhYmxlOnFyLFpvZE51bWJlcjpqdCxab2ROdW1iZXJGb3JtYXQ6UWUsWm9kT2JqZWN0OkR0LFpvZE9wdGlvbmFsOlV0LFpvZFBpcGU6SHQsWm9kUHJlZmF1bHQ6QnIsWm9kUHJlcHJvY2VzczpXcixab2RQcm9taXNlOnRzLFpvZFJlYWRvbmx5OkdyLFpvZFJlYWxFcnJvcjptZSxab2RSZWNvcmQ6aXQsWm9kU2V0OlJyLFpvZFN0cmluZzpFdCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOkZyLFpvZFN5bWJvbDpfcixab2RUZW1wbGF0ZUxpdGVyYWw6WXIsWm9kVHJhbnNmb3JtOmpyLFpvZFR1cGxlOkVyLFpvZFR5cGU6RSxab2RVTElEOlVuLFpvZFVSTDpadCxab2RVVUlEOkNlLFpvZFVuZGVmaW5lZDprcixab2RVbmlvbjpMdCxab2RVbmtub3duOlNyLFpvZFZvaWQ6VHIsWm9kWElEOkhuLFpvZFhvcjp4cixfWm9kU3RyaW5nOlpuLF9kZWZhdWx0OkxyLF9mdW5jdGlvbjpTdCxhbnk6bm8sYXJyYXk6eCxiYXNlNjQ6RmEsYmFzZTY0dXJsOlZhLGJpZ2ludDppYyxib29sZWFuOkIsY2F0Y2g6SnIsY2hlY2s6eGMsY2lkcnY0OlVhLGNpZHJ2NjpIYSxjbG9uZTpRLGNvZGVjOlNjLGNvZXJjZTpnZixjb21waWxlOlppLGNvbmZpZzpvZSxjb3JlOnRmLGNyZWRpdENhcmQ6S2EsY3VpZDpOYSxjdWlkMjpaYSxjdXJyZW5jeUNvZGU6ZWMsY3VzdG9tOm9zLGRhdGU6ZGMsZGVjb2RlOnZhLGRlY29kZUFzeW5jOl9hLGRlZXBQYXJ0aWFsOnBmLGRlc2NyaWJlOlBjLGRpc2NyaW1pbmF0ZWRVbmlvbjpybyxlMTY0OkphLGVtYWlsOnphLGVtb2ppOk9hLGVuY29kZTpiYSxlbmNvZGVBc3luYzp5YSxlbmRzV2l0aDp4bixlbnVtOmllLGV4YWN0T3B0aW9uYWw6TXIsZmlsZTpfYyxmbGF0dGVuRXJyb3I6ZXIsZmxvYXQzMjpuYyxmbG9hdDY0Om9jLGZvcm1hdEVycm9yOnRyLGZyb21KU09OU2NoZW1hOmRmLGZ1bmN0aW9uOlN0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246d2ksZ2V0RXJyb3JNYXA6Y2YsZ2xvYmFsUmVnaXN0cnk6d2UsZ3Q6cWUsZ3RlOnZlLGd1aWQ6VGEsaGFzaDp0YyxoZXg6WGEsaG9zdG5hbWU6WWEsaHR0cFVybDpBYSxpYmFuOldhLGluY2x1ZGVzOlRuLGlucHV0OmZmLGluc3RhbmNlb2Y6RWMsaW50OnJuLGludDMyOnJjLGludDY0OmFjLGludGVyc2VjdGlvbjpCdCxpbnZlcnRDb2RlYzp6YyxpcHY0OkRhLGlwdjY6QmEsaXNvOlJjLGpzb246T2Msand0OkdhLGtleW9mOnBjLGtzdWlkOnFhLGxhenk6ZXMsbGVuZ3RoOlB0LGxpdGVyYWw6bSxsb2NhbGVzOlBpLGxvb3NlT2JqZWN0OnNlLGxvb3NlUmVjb3JkOmdjLGxvd2VyY2FzZTpTbixsdDpNZSxsdGU6YmUsbWFjOkxhLG1hcDpiYyxtYXhMZW5ndGg6eHQsbWF4U2l6ZTpsdCxtZW1vaXplcjpjcixtZXRhOkNjLG1pbWU6Q24sbWluTGVuZ3RoOktlLG1pblNpemU6RGUsbXVsdGlwbGVPZjpydCxuYW46d2MsbmFub2lkOlJhLG5hdGl2ZUVudW06eWMsbmVnYXRpdmU6aHIsbmV2ZXI6c3Qsbm9ubmVnYXRpdmU6bXIsbm9ub3B0aW9uYWw6SHIsbm9ucG9zaXRpdmU6ZnIsbm9ybWFsaXplOkVuLG51bGw6dG8sbnVsbGFibGU6d3QsbnVsbGlzaDprYyxudW1iZXI6QyxvYmplY3Q6YixvcHRpb25hbDpKLG91dHB1dDptZixvdmVyd3JpdGU6T2UscGFyc2U6aGEscGFyc2VBc3luYzpmYSxwYXJ0aWFsUmVjb3JkOm1jLHBpcGU6c24scG9zaXRpdmU6cHIscHJlZmF1bHQ6VXIscHJlcHJvY2VzczpjbyxwcmV0dGlmeUVycm9yOllzLHByb21pc2U6SWMscHJvcGVydGllczpQbixwcm9wZXJ0eTpncixyZWFkb25seTpRcixyZWNvcmQ6WixyZWZpbmU6cnMscmVnZXg6d24scmVnZXhlczppcixyZWdpc3RyeTp1cixzYWZlRGVjb2RlOiRhLHNhZmVEZWNvZGVBc3luYzpTYSxzYWZlRW5jb2RlOmthLHNhZmVFbmNvZGVBc3luYzp3YSxzYWZlUGFyc2U6bWEsc2FmZVBhcnNlQXN5bmM6Z2Esc2V0OnZjLHNldEVycm9yTWFwOmFmLHNpemU6SXQsc2x1Z2lmeTpObixzdGFydHNXaXRoOkluLHN0cmljdE9iamVjdDpoYyxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6UWEsc3RyaW5nYm9vbDpBYyxzdWNjZXNzOiRjLHN1cGVyUmVmaW5lOnNzLHN5bWJvbDp1Yyx0ZW1wbGF0ZUxpdGVyYWw6VGMsdG9KU09OU2NoZW1hOmxhLHRvTG93ZXJDYXNlOk9uLHRvVXBwZXJDYXNlOlJuLHRvWm9kOkZvLHRyYW5zZm9ybTpzbyx0cmVlaWZ5RXJyb3I6UXMsdHJpbTpBbix0dXBsZTpBcix1aW50MzI6c2MsdWludDY0OmNjLHVsaWQ6amEsdW5kZWZpbmVkOiR0LHVuaW9uOk8sdW5rbm93bjpMLHVwcGVyY2FzZTp6bix1cmw6RWEsdXRpbDpLcyx1dWlkOklhLHV1aWR2NDp4YSx1dWlkdjY6UGEsdXVpZHY3OkNhLHZhbGlkYXRlOm9yLHZhbGlkYXRlQXN5bmM6cnIsdm9pZDpsYyx3aXRoUGFyc2VyOmppLHhpZDpNYSx4b3I6ZmN9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksenY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpHcywkaW5wdXQ6RWksJG91dHB1dDpDaSxJTlZBTElEOk9pLE5FVkVSOldzLFRpbWVQcmVjaXNpb246c2EsWm9kQW55OndyLFpvZEFycmF5OklyLFpvZEJhc2U2NDpHbixab2RCYXNlNjRVUkw6UW4sWm9kQmlnSW50OnF0LFpvZEJpZ0ludEZvcm1hdDplbyxab2RCb29sZWFuOk10LFpvZENJRFJ2NDpLbixab2RDSURSdjY6V24sWm9kQ1VJRDpMbixab2RDVUlEMjpCbixab2RDYXRjaDpWcixab2RDb2RlYzpGdCxab2RDb21waWxlQXN5bmNFcnJvcjpSaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpOaSxab2RDcmVkaXRDYXJkOnZyLFpvZEN1c3RvbTpWdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6R2UsWm9kRGF0ZTpvbyxab2REZWZhdWx0OkRyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpQcixab2RFMTY0OlluLFpvZEVtYWlsOmpuLFpvZEVtb2ppOnFuLFpvZEVudW06YXQsWm9kRXJyb3I6cmYsWm9kRXhhY3RPcHRpb25hbDppbyxab2RGaWxlOlpyLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gTm99LFpvZEZ1bmN0aW9uOm5zLFpvZEdVSUQ6TW4sWm9kSUJBTjp5cixab2RJUHY0OlZuLFpvZElQdjY6Sm4sWm9kSVNPRGF0ZTpPdCxab2RJU09EYXRlVGltZTpBdCxab2RJU09EdXJhdGlvbjpOdCxab2RJU09UaW1lOlJ0LFpvZEluc3RhbmNlT2Y6aXMsWm9kSW50ZXJzZWN0aW9uOkNyLFpvZElzc3VlQ29kZTpzZixab2RKV1Q6WG4sWm9kS1NVSUQ6Rm4sWm9kTGF6eTpYcixab2RMaXRlcmFsOk5yLFpvZE1BQzpicixab2RNYXA6T3IsWm9kTmFOOktyLFpvZE5hbm9JRDpEbixab2ROZXZlcjp6cixab2ROb25PcHRpb25hbDphbyxab2ROdWxsOiRyLFpvZE51bGxhYmxlOnFyLFpvZE51bWJlcjpqdCxab2ROdW1iZXJGb3JtYXQ6UWUsWm9kT2JqZWN0OkR0LFpvZE9wdGlvbmFsOlV0LFpvZFBpcGU6SHQsWm9kUHJlZmF1bHQ6QnIsWm9kUHJlcHJvY2VzczpXcixab2RQcm9taXNlOnRzLFpvZFJlYWRvbmx5OkdyLFpvZFJlYWxFcnJvcjptZSxab2RSZWNvcmQ6aXQsWm9kU2V0OlJyLFpvZFN0cmluZzpFdCxab2RTdHJpbmdGb3JtYXQ6VSxab2RTdWNjZXNzOkZyLFpvZFN5bWJvbDpfcixab2RUZW1wbGF0ZUxpdGVyYWw6WXIsWm9kVHJhbnNmb3JtOmpyLFpvZFR1cGxlOkVyLFpvZFR5cGU6RSxab2RVTElEOlVuLFpvZFVSTDpadCxab2RVVUlEOkNlLFpvZFVuZGVmaW5lZDprcixab2RVbmlvbjpMdCxab2RVbmtub3duOlNyLFpvZFZvaWQ6VHIsWm9kWElEOkhuLFpvZFhvcjp4cixfWm9kU3RyaW5nOlpuLF9kZWZhdWx0OkxyLF9mdW5jdGlvbjpTdCxhbnk6bm8sYXJyYXk6eCxiYXNlNjQ6RmEsYmFzZTY0dXJsOlZhLGJpZ2ludDppYyxib29sZWFuOkIsY2F0Y2g6SnIsY2hlY2s6eGMsY2lkcnY0OlVhLGNpZHJ2NjpIYSxjbG9uZTpRLGNvZGVjOlNjLGNvZXJjZTpnZixjb21waWxlOlppLGNvbmZpZzpvZSxjb3JlOnRmLGNyZWRpdENhcmQ6S2EsY3VpZDpOYSxjdWlkMjpaYSxjdXJyZW5jeUNvZGU6ZWMsY3VzdG9tOm9zLGRhdGU6ZGMsZGVjb2RlOnZhLGRlY29kZUFzeW5jOl9hLGRlZXBQYXJ0aWFsOnBmLGRlZmF1bHQ6RHUsZGVzY3JpYmU6UGMsZGlzY3JpbWluYXRlZFVuaW9uOnJvLGUxNjQ6SmEsZW1haWw6emEsZW1vamk6T2EsZW5jb2RlOmJhLGVuY29kZUFzeW5jOnlhLGVuZHNXaXRoOnhuLGVudW06aWUsZXhhY3RPcHRpb25hbDpNcixmaWxlOl9jLGZsYXR0ZW5FcnJvcjplcixmbG9hdDMyOm5jLGZsb2F0NjQ6b2MsZm9ybWF0RXJyb3I6dHIsZnJvbUpTT05TY2hlbWE6ZGYsZnVuY3Rpb246U3QsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjp3aSxnZXRFcnJvck1hcDpjZixnbG9iYWxSZWdpc3RyeTp3ZSxndDpxZSxndGU6dmUsZ3VpZDpUYSxoYXNoOnRjLGhleDpYYSxob3N0bmFtZTpZYSxodHRwVXJsOkFhLGliYW46V2EsaW5jbHVkZXM6VG4saW5wdXQ6ZmYsaW5zdGFuY2VvZjpFYyxpbnQ6cm4saW50MzI6cmMsaW50NjQ6YWMsaW50ZXJzZWN0aW9uOkJ0LGludmVydENvZGVjOnpjLGlwdjQ6RGEsaXB2NjpCYSxpc286UmMsanNvbjpPYyxqd3Q6R2Esa2V5b2Y6cGMsa3N1aWQ6cWEsbGF6eTplcyxsZW5ndGg6UHQsbGl0ZXJhbDptLGxvY2FsZXM6UGksbG9vc2VPYmplY3Q6c2UsbG9vc2VSZWNvcmQ6Z2MsbG93ZXJjYXNlOlNuLGx0Ok1lLGx0ZTpiZSxtYWM6TGEsbWFwOmJjLG1heExlbmd0aDp4dCxtYXhTaXplOmx0LG1lbW9pemVyOmNyLG1ldGE6Q2MsbWltZTpDbixtaW5MZW5ndGg6S2UsbWluU2l6ZTpEZSxtdWx0aXBsZU9mOnJ0LG5hbjp3YyxuYW5vaWQ6UmEsbmF0aXZlRW51bTp5YyxuZWdhdGl2ZTpocixuZXZlcjpzdCxub25uZWdhdGl2ZTptcixub25vcHRpb25hbDpIcixub25wb3NpdGl2ZTpmcixub3JtYWxpemU6RW4sbnVsbDp0byxudWxsYWJsZTp3dCxudWxsaXNoOmtjLG51bWJlcjpDLG9iamVjdDpiLG9wdGlvbmFsOkosb3V0cHV0Om1mLG92ZXJ3cml0ZTpPZSxwYXJzZTpoYSxwYXJzZUFzeW5jOmZhLHBhcnRpYWxSZWNvcmQ6bWMscGlwZTpzbixwb3NpdGl2ZTpwcixwcmVmYXVsdDpVcixwcmVwcm9jZXNzOmNvLHByZXR0aWZ5RXJyb3I6WXMscHJvbWlzZTpJYyxwcm9wZXJ0aWVzOlBuLHByb3BlcnR5OmdyLHJlYWRvbmx5OlFyLHJlY29yZDpaLHJlZmluZTpycyxyZWdleDp3bixyZWdleGVzOmlyLHJlZ2lzdHJ5OnVyLHNhZmVEZWNvZGU6JGEsc2FmZURlY29kZUFzeW5jOlNhLHNhZmVFbmNvZGU6a2Esc2FmZUVuY29kZUFzeW5jOndhLHNhZmVQYXJzZTptYSxzYWZlUGFyc2VBc3luYzpnYSxzZXQ6dmMsc2V0RXJyb3JNYXA6YWYsc2l6ZTpJdCxzbHVnaWZ5Ok5uLHN0YXJ0c1dpdGg6SW4sc3RyaWN0T2JqZWN0OmhjLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDpRYSxzdHJpbmdib29sOkFjLHN1Y2Nlc3M6JGMsc3VwZXJSZWZpbmU6c3Msc3ltYm9sOnVjLHRlbXBsYXRlTGl0ZXJhbDpUYyx0b0pTT05TY2hlbWE6bGEsdG9Mb3dlckNhc2U6T24sdG9VcHBlckNhc2U6Um4sdG9ab2Q6Rm8sdHJhbnNmb3JtOnNvLHRyZWVpZnlFcnJvcjpRcyx0cmltOkFuLHR1cGxlOkFyLHVpbnQzMjpzYyx1aW50NjQ6Y2MsdWxpZDpqYSx1bmRlZmluZWQ6JHQsdW5pb246Tyx1bmtub3duOkwsdXBwZXJjYXNlOnpuLHVybDpFYSx1dGlsOktzLHV1aWQ6SWEsdXVpZHY0OnhhLHV1aWR2NjpQYSx1dWlkdjc6Q2EsdmFsaWRhdGU6b3IsdmFsaWRhdGVBc3luYzpycix2b2lkOmxjLHdpdGhQYXJzZXI6amkseGlkOk1hLHhvcjpmYyx6OkR1fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGV0PSJpby5tb2RlbGNvbnRleHRwcm90b2NvbC9yZWxhdGVkLXRhc2siLGFzPSIyLjAiLG5lPW9zKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLGJmPU8oW2goKSxDKCkuaW50KCldKSx2Zj1oKCk7c2Uoe3R0bDpDKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6QygpLm9wdGlvbmFsKCl9KTtjb25zdCBUdj1iKHt0dGw6QygpLm9wdGlvbmFsKCl9KSxJdj1iKHt0YXNrSWQ6aCgpfSksTmM9c2Uoe3Byb2dyZXNzVG9rZW46YmYub3B0aW9uYWwoKSxbZXRdOkl2Lm9wdGlvbmFsKCl9KSxfZT1iKHtfbWV0YTpOYy5vcHRpb25hbCgpfSksdW89X2UuZXh0ZW5kKHt0YXNrOlR2Lm9wdGlvbmFsKCl9KSx4dj1lPT51by5zYWZlUGFyc2UoZSkuc3VjY2VzcyxhZT1iKHttZXRob2Q6aCgpLHBhcmFtczpfZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxUZT1iKHtfbWV0YTpOYy5vcHRpb25hbCgpfSksSWU9Yih7bWV0aG9kOmgoKSxwYXJhbXM6VGUubG9vc2UoKS5vcHRpb25hbCgpfSksY2U9c2Uoe19tZXRhOk5jLm9wdGlvbmFsKCl9KSxsbz1PKFtoKCksQygpLmludCgpXSkseWY9Yih7anNvbnJwYzptKGFzKSxpZDpsbywuLi5hZS5zaGFwZX0pLnN0cmljdCgpLEx1PWU9PnlmLnNhZmVQYXJzZShlKS5zdWNjZXNzLF9mPWIoe2pzb25ycGM6bShhcyksLi4uSWUuc2hhcGV9KS5zdHJpY3QoKSxQdj1lPT5fZi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxaYz1iKHtqc29ucnBjOm0oYXMpLGlkOmxvLHJlc3VsdDpjZX0pLnN0cmljdCgpLFNvPWU9PlpjLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBGOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoRnx8KEY9e30pKTtjb25zdCBqYz1iKHtqc29ucnBjOm0oYXMpLGlkOmxvLm9wdGlvbmFsKCksZXJyb3I6Yih7Y29kZTpDKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpMKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksQ3Y9ZT0+amMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsRXY9TyhbeWYsX2YsWmMsamNdKTtPKFtaYyxqY10pO2NvbnN0IE1jPWNlLnN0cmljdCgpLEF2PVRlLmV4dGVuZCh7cmVxdWVzdElkOmxvLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSkscWM9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6QXZ9KSxPdj1iKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOngoaCgpKS5vcHRpb25hbCgpLHRoZW1lOmllKFsibGlnaHQiLCJkYXJrIl0pLm9wdGlvbmFsKCl9KSxwbz1iKHtpY29uczp4KE92KS5vcHRpb25hbCgpfSksenQ9Yih7bmFtZTpoKCksdGl0bGU6aCgpLm9wdGlvbmFsKCl9KSxjcz16dC5leHRlbmQoey4uLnp0LnNoYXBlLC4uLnBvLnNoYXBlLHZlcnNpb246aCgpLHdlYnNpdGVVcmw6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCl9KSxSdj1CdChiKHthcHBseURlZmF1bHRzOkIoKS5vcHRpb25hbCgpfSksWihoKCksTCgpKSksTnY9Y28oZT0+ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MD97Zm9ybTp7fX06ZSxCdChiKHtmb3JtOlJ2Lm9wdGlvbmFsKCksdXJsOm5lLm9wdGlvbmFsKCl9KSxaKGgoKSxMKCkpLm9wdGlvbmFsKCkpKSxadj1zZSh7bGlzdDpuZS5vcHRpb25hbCgpLGNhbmNlbDpuZS5vcHRpb25hbCgpLHJlcXVlc3RzOnNlKHtzYW1wbGluZzpzZSh7Y3JlYXRlTWVzc2FnZTpuZS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpzZSh7Y3JlYXRlOm5lLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLGp2PXNlKHtsaXN0Om5lLm9wdGlvbmFsKCksY2FuY2VsOm5lLm9wdGlvbmFsKCkscmVxdWVzdHM6c2Uoe3Rvb2xzOnNlKHtjYWxsOm5lLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLE12PWIoe2V4cGVyaW1lbnRhbDpaKGgoKSxuZSkub3B0aW9uYWwoKSxzYW1wbGluZzpiKHtjb250ZXh0Om5lLm9wdGlvbmFsKCksdG9vbHM6bmUub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246TnYub3B0aW9uYWwoKSxyb290czpiKHtsaXN0Q2hhbmdlZDpCKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6WnYub3B0aW9uYWwoKSxleHRlbnNpb25zOlooaCgpLG5lKS5vcHRpb25hbCgpfSkscXY9X2UuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpNdixjbGllbnRJbmZvOmNzfSksRHY9YWUuZXh0ZW5kKHttZXRob2Q6bSgiaW5pdGlhbGl6ZSIpLHBhcmFtczpxdn0pLEx2PWIoe2V4cGVyaW1lbnRhbDpaKGgoKSxuZSkub3B0aW9uYWwoKSxsb2dnaW5nOm5lLm9wdGlvbmFsKCksY29tcGxldGlvbnM6bmUub3B0aW9uYWwoKSxwcm9tcHRzOmIoe2xpc3RDaGFuZ2VkOkIoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6Yih7c3Vic2NyaWJlOkIoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkIoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczpiKHtsaXN0Q2hhbmdlZDpCKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6anYub3B0aW9uYWwoKSxleHRlbnNpb25zOlooaCgpLG5lKS5vcHRpb25hbCgpfSksQnY9Y2UuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpMdixzZXJ2ZXJJbmZvOmNzLGluc3RydWN0aW9uczpoKCkub3B0aW9uYWwoKX0pLFV2PUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6VGUub3B0aW9uYWwoKX0pLHVzPWFlLmV4dGVuZCh7bWV0aG9kOm0oInBpbmciKSxwYXJhbXM6X2Uub3B0aW9uYWwoKX0pLEh2PWIoe3Byb2dyZXNzOkMoKSx0b3RhbDpKKEMoKSksbWVzc2FnZTpKKGgoKSl9KSxGdj1iKHsuLi5UZS5zaGFwZSwuLi5Idi5zaGFwZSxwcm9ncmVzc1Rva2VuOmJmfSksRGM9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpGdn0pLFZ2PV9lLmV4dGVuZCh7Y3Vyc29yOnZmLm9wdGlvbmFsKCl9KSxobz1hZS5leHRlbmQoe3BhcmFtczpWdi5vcHRpb25hbCgpfSksZm89Y2UuZXh0ZW5kKHtuZXh0Q3Vyc29yOnZmLm9wdGlvbmFsKCl9KSxKdj1pZShbIndvcmtpbmciLCJpbnB1dF9yZXF1aXJlZCIsImNvbXBsZXRlZCIsImZhaWxlZCIsImNhbmNlbGxlZCJdKSxtbz1iKHt0YXNrSWQ6aCgpLHN0YXR1czpKdix0dGw6TyhbQygpLHRvKCldKSxjcmVhdGVkQXQ6aCgpLGxhc3RVcGRhdGVkQXQ6aCgpLHBvbGxJbnRlcnZhbDpKKEMoKSksc3RhdHVzTWVzc2FnZTpKKGgoKSl9KSxMYz1jZS5leHRlbmQoe3Rhc2s6bW99KSxLdj1UZS5tZXJnZShtbyksWm89SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiKSxwYXJhbXM6S3Z9KSxCYz1hZS5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9nZXQiKSxwYXJhbXM6X2UuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxVYz1jZS5tZXJnZShtbyksSGM9YWUuZXh0ZW5kKHttZXRob2Q6bSgidGFza3MvcmVzdWx0IikscGFyYW1zOl9lLmV4dGVuZCh7dGFza0lkOmgoKX0pfSk7Y2UubG9vc2UoKTtjb25zdCBGYz1oby5leHRlbmQoe21ldGhvZDptKCJ0YXNrcy9saXN0Iil9KSxWYz1mby5leHRlbmQoe3Rhc2tzOngobW8pfSksSmM9YWUuZXh0ZW5kKHttZXRob2Q6bSgidGFza3MvY2FuY2VsIikscGFyYW1zOl9lLmV4dGVuZCh7dGFza0lkOmgoKX0pfSksV3Y9Y2UubWVyZ2UobW8pLGtmPWIoe3VyaTpoKCksbWltZVR5cGU6SihoKCkpLF9tZXRhOlooaCgpLEwoKSkub3B0aW9uYWwoKX0pLCRmPWtmLmV4dGVuZCh7dGV4dDpoKCl9KSxLYz1oKCkucmVmaW5lKGU9Pnt0cnl7cmV0dXJuIGF0b2IoZSksITB9Y2F0Y2h7cmV0dXJuITF9fSx7bWVzc2FnZToiSW52YWxpZCBCYXNlNjQgc3RyaW5nIn0pLHdmPWtmLmV4dGVuZCh7YmxvYjpLY30pLGdvPWllKFsidXNlciIsImFzc2lzdGFudCJdKSxKdD1iKHthdWRpZW5jZTp4KGdvKS5vcHRpb25hbCgpLHByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksbGFzdE1vZGlmaWVkOnVmKHtvZmZzZXQ6ITB9KS5vcHRpb25hbCgpfSksU2Y9Yih7Li4uenQuc2hhcGUsLi4ucG8uc2hhcGUsdXJpOmgoKSxkZXNjcmlwdGlvbjpKKGgoKSksbWltZVR5cGU6SihoKCkpLHNpemU6SihDKCkpLGFubm90YXRpb25zOkp0Lm9wdGlvbmFsKCksX21ldGE6SihzZSh7fSkpfSksR3Y9Yih7Li4uenQuc2hhcGUsLi4ucG8uc2hhcGUsdXJpVGVtcGxhdGU6aCgpLGRlc2NyaXB0aW9uOkooaCgpKSxtaW1lVHlwZTpKKGgoKSksYW5ub3RhdGlvbnM6SnQub3B0aW9uYWwoKSxfbWV0YTpKKHNlKHt9KSl9KSxRdj1oby5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvbGlzdCIpfSksemY9Zm8uZXh0ZW5kKHtyZXNvdXJjZXM6eChTZil9KSxZdj1oby5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvdGVtcGxhdGVzL2xpc3QiKX0pLFh2PWZvLmV4dGVuZCh7cmVzb3VyY2VUZW1wbGF0ZXM6eChHdil9KSxXYz1fZS5leHRlbmQoe3VyaTpoKCl9KSxleT1XYyx0eT1hZS5leHRlbmQoe21ldGhvZDptKCJyZXNvdXJjZXMvcmVhZCIpLHBhcmFtczpleX0pLFRmPWNlLmV4dGVuZCh7Y29udGVudHM6eChPKFskZix3Zl0pKX0pLG55PUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSksb3k9V2Mscnk9YWUuZXh0ZW5kKHttZXRob2Q6bSgicmVzb3VyY2VzL3N1YnNjcmliZSIpLHBhcmFtczpveX0pLHN5PVdjLGl5PWFlLmV4dGVuZCh7bWV0aG9kOm0oInJlc291cmNlcy91bnN1YnNjcmliZSIpLHBhcmFtczpzeX0pLGF5PVRlLmV4dGVuZCh7dXJpOmgoKX0pLGN5PUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWQiKSxwYXJhbXM6YXl9KSx1eT1iKHtuYW1lOmgoKSxkZXNjcmlwdGlvbjpKKGgoKSkscmVxdWlyZWQ6SihCKCkpfSksbHk9Yih7Li4uenQuc2hhcGUsLi4ucG8uc2hhcGUsZGVzY3JpcHRpb246SihoKCkpLGFyZ3VtZW50czpKKHgodXkpKSxfbWV0YTpKKHNlKHt9KSl9KSxkeT1oby5leHRlbmQoe21ldGhvZDptKCJwcm9tcHRzL2xpc3QiKX0pLHB5PWZvLmV4dGVuZCh7cHJvbXB0czp4KGx5KX0pLGh5PV9lLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOlooaCgpLGgoKSkub3B0aW9uYWwoKX0pLGZ5PWFlLmV4dGVuZCh7bWV0aG9kOm0oInByb21wdHMvZ2V0IikscGFyYW1zOmh5fSksR2M9Yih7dHlwZTptKCJ0ZXh0IiksdGV4dDpoKCksYW5ub3RhdGlvbnM6SnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxRYz1iKHt0eXBlOm0oImltYWdlIiksZGF0YTpLYyxtaW1lVHlwZTpoKCksYW5ub3RhdGlvbnM6SnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxZYz1iKHt0eXBlOm0oImF1ZGlvIiksZGF0YTpLYyxtaW1lVHlwZTpoKCksYW5ub3RhdGlvbnM6SnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxteT1iKHt0eXBlOm0oInRvb2xfdXNlIiksbmFtZTpoKCksaWQ6aCgpLGlucHV0OlooaCgpLEwoKSksX21ldGE6WihoKCksTCgpKS5vcHRpb25hbCgpfSksSWY9Yih7dHlwZTptKCJyZXNvdXJjZSIpLHJlc291cmNlOk8oWyRmLHdmXSksYW5ub3RhdGlvbnM6SnQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSx4Zj1TZi5leHRlbmQoe3R5cGU6bSgicmVzb3VyY2VfbGluayIpfSksYm89TyhbR2MsUWMsWWMseGYsSWZdKSxneT1iKHtyb2xlOmdvLGNvbnRlbnQ6Ym99KSxieT1jZS5leHRlbmQoe2Rlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1lc3NhZ2VzOngoZ3kpfSksdnk9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9wcm9tcHRzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpUZS5vcHRpb25hbCgpfSkseXk9Yih7dGl0bGU6aCgpLm9wdGlvbmFsKCkscmVhZE9ubHlIaW50OkIoKS5vcHRpb25hbCgpLGRlc3RydWN0aXZlSGludDpCKCkub3B0aW9uYWwoKSxpZGVtcG90ZW50SGludDpCKCkub3B0aW9uYWwoKSxvcGVuV29ybGRIaW50OkIoKS5vcHRpb25hbCgpfSksX3k9Yih7dGFza1N1cHBvcnQ6aWUoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSxYYz1iKHsuLi56dC5zaGFwZSwuLi5wby5zaGFwZSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTpiKHt0eXBlOm0oIm9iamVjdCIpLHByb3BlcnRpZXM6WihoKCksbmUpLm9wdGlvbmFsKCkscmVxdWlyZWQ6eChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChMKCkpLG91dHB1dFNjaGVtYTpiKHt0eXBlOm0oIm9iamVjdCIpLHByb3BlcnRpZXM6WihoKCksbmUpLm9wdGlvbmFsKCkscmVxdWlyZWQ6eChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChMKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6eXkub3B0aW9uYWwoKSxleGVjdXRpb246X3kub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxQZj1oby5leHRlbmQoe21ldGhvZDptKCJ0b29scy9saXN0Iil9KSxreT1mby5leHRlbmQoe3Rvb2xzOngoWGMpfSksbHM9Y2UuZXh0ZW5kKHtjb250ZW50OngoYm8pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OlooaCgpLEwoKSkub3B0aW9uYWwoKSxpc0Vycm9yOkIoKS5vcHRpb25hbCgpfSk7bHMub3IoY2UuZXh0ZW5kKHt0b29sUmVzdWx0OkwoKX0pKTtjb25zdCAkeT11by5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxDZj1hZS5leHRlbmQoe21ldGhvZDptKCJ0b29scy9jYWxsIikscGFyYW1zOiR5fSksd3k9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6VGUub3B0aW9uYWwoKX0pO2Ioe2F1dG9SZWZyZXNoOkIoKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOkMoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IEVmPWllKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxTeT1fZS5leHRlbmQoe2xldmVsOkVmfSksenk9YWUuZXh0ZW5kKHttZXRob2Q6bSgibG9nZ2luZy9zZXRMZXZlbCIpLHBhcmFtczpTeX0pLFR5PVRlLmV4dGVuZCh7bGV2ZWw6RWYsbG9nZ2VyOmgoKS5vcHRpb25hbCgpLGRhdGE6TCgpfSksSXk9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9tZXNzYWdlIikscGFyYW1zOlR5fSkseHk9Yih7bmFtZTpoKCkub3B0aW9uYWwoKX0pLFB5PWIoe2hpbnRzOngoeHkpLm9wdGlvbmFsKCksY29zdFByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksc3BlZWRQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGludGVsbGlnZW5jZVByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCl9KSxDeT1iKHttb2RlOmllKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksRXk9Yih7dHlwZTptKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpoKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6eChibykuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6Yih7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6QigpLm9wdGlvbmFsKCksX21ldGE6WihoKCksTCgpKS5vcHRpb25hbCgpfSksQXk9cm8oInR5cGUiLFtHYyxRYyxZY10pLGpvPXJvKCJ0eXBlIixbR2MsUWMsWWMsbXksRXldKSxPeT1iKHtyb2xlOmdvLGNvbnRlbnQ6Tyhbam8seChqbyldKSxfbWV0YTpaKGgoKSxMKCkpLm9wdGlvbmFsKCl9KSxSeT11by5leHRlbmQoe21lc3NhZ2VzOngoT3kpLG1vZGVsUHJlZmVyZW5jZXM6UHkub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6aCgpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6aWUoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpDKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6QygpLmludCgpLHN0b3BTZXF1ZW5jZXM6eChoKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6bmUub3B0aW9uYWwoKSx0b29sczp4KFhjKS5vcHRpb25hbCgpLHRvb2xDaG9pY2U6Q3kub3B0aW9uYWwoKX0pLE55PWFlLmV4dGVuZCh7bWV0aG9kOm0oInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6Unl9KSxBZj1jZS5leHRlbmQoe21vZGVsOmgoKSxzdG9wUmVhc29uOkooaWUoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIl0pLm9yKGgoKSkpLHJvbGU6Z28sY29udGVudDpBeX0pLE9mPWNlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246SihpZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiLCJ0b29sVXNlIl0pLm9yKGgoKSkpLHJvbGU6Z28sY29udGVudDpPKFtqbyx4KGpvKV0pfSksWnk9Yih7dHlwZTptKCJib29sZWFuIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZGVmYXVsdDpCKCkub3B0aW9uYWwoKX0pLGp5PWIoe3R5cGU6bSgic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluTGVuZ3RoOkMoKS5vcHRpb25hbCgpLG1heExlbmd0aDpDKCkub3B0aW9uYWwoKSxmb3JtYXQ6aWUoWyJlbWFpbCIsInVyaSIsImRhdGUiLCJkYXRlLXRpbWUiXSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksTXk9Yih7dHlwZTppZShbIm51bWJlciIsImludGVnZXIiXSksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluaW11bTpDKCkub3B0aW9uYWwoKSxtYXhpbXVtOkMoKS5vcHRpb25hbCgpLGRlZmF1bHQ6QygpLm9wdGlvbmFsKCl9KSxxeT1iKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06eChoKCkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxEeT1iKHt0eXBlOm0oInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG9uZU9mOngoYih7Y29uc3Q6aCgpLHRpdGxlOmgoKX0pKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksTHk9Yih7dHlwZTptKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxlbnVtOngoaCgpKSxlbnVtTmFtZXM6eChoKCkpLm9wdGlvbmFsKCksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLEJ5PU8oW3F5LER5XSksVXk9Yih7dHlwZTptKCJhcnJheSIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOkMoKS5vcHRpb25hbCgpLG1heEl0ZW1zOkMoKS5vcHRpb25hbCgpLGl0ZW1zOmIoe3R5cGU6bSgic3RyaW5nIiksZW51bTp4KGgoKSl9KSxkZWZhdWx0OngoaCgpKS5vcHRpb25hbCgpfSksSHk9Yih7dHlwZTptKCJhcnJheSIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOkMoKS5vcHRpb25hbCgpLG1heEl0ZW1zOkMoKS5vcHRpb25hbCgpLGl0ZW1zOmIoe2FueU9mOngoYih7Y29uc3Q6aCgpLHRpdGxlOmgoKX0pKX0pLGRlZmF1bHQ6eChoKCkpLm9wdGlvbmFsKCl9KSxGeT1PKFtVeSxIeV0pLFZ5PU8oW0x5LEJ5LEZ5XSksSnk9TyhbVnksWnksanksTXldKSxLeT11by5leHRlbmQoe21vZGU6bSgiZm9ybSIpLm9wdGlvbmFsKCksbWVzc2FnZTpoKCkscmVxdWVzdGVkU2NoZW1hOmIoe3R5cGU6bSgib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxKeSkscmVxdWlyZWQ6eChoKCkpLm9wdGlvbmFsKCl9KX0pLFd5PXVvLmV4dGVuZCh7bW9kZTptKCJ1cmwiKSxtZXNzYWdlOmgoKSxlbGljaXRhdGlvbklkOmgoKSx1cmw6aCgpLnVybCgpfSksR3k9TyhbS3ksV3ldKSxReT1hZS5leHRlbmQoe21ldGhvZDptKCJlbGljaXRhdGlvbi9jcmVhdGUiKSxwYXJhbXM6R3l9KSxZeT1UZS5leHRlbmQoe2VsaWNpdGF0aW9uSWQ6aCgpfSksWHk9SWUuZXh0ZW5kKHttZXRob2Q6bSgibm90aWZpY2F0aW9ucy9lbGljaXRhdGlvbi9jb21wbGV0ZSIpLHBhcmFtczpZeX0pLGVfPWNlLmV4dGVuZCh7YWN0aW9uOmllKFsiYWNjZXB0IiwiZGVjbGluZSIsImNhbmNlbCJdKSxjb250ZW50OmNvKGU9PmU9PT1udWxsP3ZvaWQgMDplLFooaCgpLE8oW2goKSxDKCksQigpLHgoaCgpKV0pKS5vcHRpb25hbCgpKX0pLHRfPWIoe3R5cGU6bSgicmVmL3Jlc291cmNlIiksdXJpOmgoKX0pLG5fPWIoe3R5cGU6bSgicmVmL3Byb21wdCIpLG5hbWU6aCgpfSksb189X2UuZXh0ZW5kKHtyZWY6Tyhbbl8sdF9dKSxhcmd1bWVudDpiKHtuYW1lOmgoKSx2YWx1ZTpoKCl9KSxjb250ZXh0OmIoe2FyZ3VtZW50czpaKGgoKSxoKCkpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkscl89YWUuZXh0ZW5kKHttZXRob2Q6bSgiY29tcGxldGlvbi9jb21wbGV0ZSIpLHBhcmFtczpvX30pLHNfPWNlLmV4dGVuZCh7Y29tcGxldGlvbjpzZSh7dmFsdWVzOngoaCgpKS5tYXgoMTAwKSx0b3RhbDpKKEMoKS5pbnQoKSksaGFzTW9yZTpKKEIoKSl9KX0pLGlfPWIoe3VyaTpoKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6aCgpLm9wdGlvbmFsKCksX21ldGE6WihoKCksTCgpKS5vcHRpb25hbCgpfSksYV89YWUuZXh0ZW5kKHttZXRob2Q6bSgicm9vdHMvbGlzdCIpLHBhcmFtczpfZS5vcHRpb25hbCgpfSksY189Y2UuZXh0ZW5kKHtyb290czp4KGlfKX0pLHVfPUllLmV4dGVuZCh7bWV0aG9kOm0oIm5vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOlRlLm9wdGlvbmFsKCl9KTtPKFt1cyxEdixyXyx6eSxmeSxkeSxRdixZdix0eSxyeSxpeSxDZixQZixCYyxIYyxGYyxKY10pO08oW3FjLERjLFV2LHVfLFpvXSk7TyhbTWMsQWYsT2YsZV8sY18sVWMsVmMsTGNdKTtPKFt1cyxOeSxReSxhXyxCYyxIYyxGYyxKY10pO08oW3FjLERjLEl5LGN5LG55LHd5LHZ5LFpvLFh5XSk7TyhbTWMsQnYsc18sYnkscHksemYsWHYsVGYsbHMsa3ksVWMsVmMsTGNdKTtjbGFzcyBEIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKGBNQ1AgZXJyb3IgJHt0fTogJHtufWApLHRoaXMuY29kZT10LHRoaXMuZGF0YT1vLHRoaXMubmFtZT0iTWNwRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCxuLG8pe2lmKHQ9PT1GLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQmJm8pe2NvbnN0IHI9bztpZihyLmVsaWNpdGF0aW9ucylyZXR1cm4gbmV3IGxfKHIuZWxpY2l0YXRpb25zLG4pfXJldHVybiBuZXcgRCh0LG4sbyl9fWNsYXNzIGxfIGV4dGVuZHMgRHtjb25zdHJ1Y3Rvcih0LG49YFVSTCBlbGljaXRhdGlvbiR7dC5sZW5ndGg+MT8icyI6IiJ9IHJlcXVpcmVkYCl7c3VwZXIoRi5VcmxFbGljaXRhdGlvblJlcXVpcmVkLG4se2VsaWNpdGF0aW9uczp0fSl9Z2V0IGVsaWNpdGF0aW9ucygpe3JldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucz8/W119fWZ1bmN0aW9uIFhlKGUpe3JldHVybiBlPT09ImNvbXBsZXRlZCJ8fGU9PT0iZmFpbGVkInx8ZT09PSJjYW5jZWxsZWQifW5ldyBTZXQoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OSIpO2Z1bmN0aW9uIEJ1KGUpe2NvbnN0IG49dHYoZSk/Lm1ldGhvZDtpZighbil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBpcyBtaXNzaW5nIGEgbWV0aG9kIGxpdGVyYWwiKTtjb25zdCBvPW52KG4pO2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBtZXRob2QgbGl0ZXJhbCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIG99ZnVuY3Rpb24gVXUoZSx0KXtjb25zdCBuPW5mKGUsdCk7aWYoIW4uc3VjY2Vzcyl0aHJvdyBuLmVycm9yO3JldHVybiBuLmRhdGF9Y29uc3QgZF89NmU0O2NsYXNzIHBfe2NvbnN0cnVjdG9yKHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkPTAsdGhpcy5fcmVxdWVzdEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzPW5ldyBNYXAsdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3RpbWVvdXRJbmZvPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnM9bmV3IFNldCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzPW5ldyBNYXAsdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKHFjLG49Pnt0aGlzLl9vbmNhbmNlbChuKX0pLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihEYyxuPT57dGhpcy5fb25wcm9ncmVzcyhuKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIodXMsbj0+KHt9KSksdGhpcy5fdGFza1N0b3JlPXQ/LnRhc2tTdG9yZSx0aGlzLl90YXNrTWVzc2FnZVF1ZXVlPXQ/LnRhc2tNZXNzYWdlUXVldWUsdGhpcy5fdGFza1N0b3JlJiYodGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihCYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuey4uLnJ9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihIYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hc3luYygpPT57Y29uc3Qgcz1uLnBhcmFtcy50YXNrSWQ7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7bGV0IGk7Zm9yKDtpPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZShzLG8uc2Vzc2lvbklkKTspe2lmKGkudHlwZT09PSJyZXNwb25zZSJ8fGkudHlwZT09PSJlcnJvciIpe2NvbnN0IGw9aS5tZXNzYWdlLHU9bC5pZCxkPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHUpO2lmKGQpaWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUodSksaS50eXBlPT09InJlc3BvbnNlIilkKGwpO2Vsc2V7Y29uc3QgZj1sLGc9bmV3IEQoZi5lcnJvci5jb2RlLGYuZXJyb3IubWVzc2FnZSxmLmVycm9yLmRhdGEpO2QoZyl9ZWxzZXtjb25zdCBmPWkudHlwZT09PSJyZXNwb25zZSI/IlJlc3BvbnNlIjoiRXJyb3IiO3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke2Z9IGhhbmRsZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3V9YCkpfWNvbnRpbnVlfWF3YWl0IHRoaXMuX3RyYW5zcG9ydD8uc2VuZChpLm1lc3NhZ2Use3JlbGF0ZWRSZXF1ZXN0SWQ6by5yZXF1ZXN0SWR9KX19Y29uc3QgYT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhzLG8uc2Vzc2lvbklkKTtpZighYSl0aHJvdyBuZXcgRChGLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke3N9YCk7aWYoIVhlKGEuc3RhdHVzKSlyZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclRhc2tVcGRhdGUocyxvLnNpZ25hbCksYXdhaXQgcigpO2lmKFhlKGEuc3RhdHVzKSl7Y29uc3QgaT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdChzLG8uc2Vzc2lvbklkKTtyZXR1cm4gdGhpcy5fY2xlYXJUYXNrUXVldWUocyksey4uLmksX21ldGE6ey4uLmkuX21ldGEsW2V0XTp7dGFza0lkOnN9fX19cmV0dXJuIGF3YWl0IHIoKX07cmV0dXJuIGF3YWl0IHIoKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoRmMsYXN5bmMobixvKT0+e3RyeXtjb25zdHt0YXNrczpyLG5leHRDdXJzb3I6c309YXdhaXQgdGhpcy5fdGFza1N0b3JlLmxpc3RUYXNrcyhuLnBhcmFtcz8uY3Vyc29yLG8uc2Vzc2lvbklkKTtyZXR1cm57dGFza3M6cixuZXh0Q3Vyc29yOnMsX21ldGE6e319fWNhdGNoKHIpe3Rocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcyxgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihKYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgRChGLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke24ucGFyYW1zLnRhc2tJZH1gKTtpZihYZShyLnN0YXR1cykpdGhyb3cgbmV3IEQoRi5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Iuc3RhdHVzfWApO2F3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKG4ucGFyYW1zLnRhc2tJZCwiY2FuY2VsbGVkIiwiQ2xpZW50IGNhbmNlbGxlZCB0YXNrIGV4ZWN1dGlvbi4iLG8uc2Vzc2lvbklkKSx0aGlzLl9jbGVhclRhc2tRdWV1ZShuLnBhcmFtcy50YXNrSWQpO2NvbnN0IHM9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcyl0aHJvdyBuZXcgRChGLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kIGFmdGVyIGNhbmNlbGxhdGlvbjogJHtuLnBhcmFtcy50YXNrSWR9YCk7cmV0dXJue19tZXRhOnt9LC4uLnN9fWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBEP3I6bmV3IEQoRi5JbnZhbGlkUmVxdWVzdCxgRmFpbGVkIHRvIGNhbmNlbCB0YXNrOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pKX1hc3luYyBfb25jYW5jZWwodCl7aWYoIXQucGFyYW1zLnJlcXVlc3RJZClyZXR1cm47dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LnBhcmFtcy5yZXF1ZXN0SWQpPy5hYm9ydCh0LnBhcmFtcy5yZWFzb24pfV9zZXR1cFRpbWVvdXQodCxuLG8scixzPSExKXt0aGlzLl90aW1lb3V0SW5mby5zZXQodCx7dGltZW91dElkOnNldFRpbWVvdXQocixuKSxzdGFydFRpbWU6RGF0ZS5ub3coKSx0aW1lb3V0Om4sbWF4VG90YWxUaW1lb3V0Om8scmVzZXRUaW1lb3V0T25Qcm9ncmVzczpzLG9uVGltZW91dDpyfSl9X3Jlc2V0VGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtpZighbilyZXR1cm4hMTtjb25zdCBvPURhdGUubm93KCktbi5zdGFydFRpbWU7aWYobi5tYXhUb3RhbFRpbWVvdXQmJm8+PW4ubWF4VG90YWxUaW1lb3V0KXRocm93IHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSxELmZyb21FcnJvcihGLlJlcXVlc3RUaW1lb3V0LCJNYXhpbXVtIHRvdGFsIHRpbWVvdXQgZXhjZWVkZWQiLHttYXhUb3RhbFRpbWVvdXQ6bi5tYXhUb3RhbFRpbWVvdXQsdG90YWxFbGFwc2VkOm99KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSxuLnRpbWVvdXRJZD1zZXRUaW1lb3V0KG4ub25UaW1lb3V0LG4udGltZW91dCksITB9X2NsZWFudXBUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO24mJihjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSl9YXN5bmMgY29ubmVjdCh0KXtpZih0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uIik7dGhpcy5fdHJhbnNwb3J0PXQ7Y29uc3Qgbj10aGlzLnRyYW5zcG9ydD8ub25jbG9zZTt0aGlzLl90cmFuc3BvcnQub25jbG9zZT0oKT0+e24/LigpLHRoaXMuX29uY2xvc2UoKX07Y29uc3Qgbz10aGlzLnRyYW5zcG9ydD8ub25lcnJvcjt0aGlzLl90cmFuc3BvcnQub25lcnJvcj1zPT57bz8uKHMpLHRoaXMuX29uZXJyb3Iocyl9O2NvbnN0IHI9dGhpcy5fdHJhbnNwb3J0Py5vbm1lc3NhZ2U7dGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZT0ocyxhKT0+e3I/LihzLGEpLFNvKHMpfHxDdihzKT90aGlzLl9vbnJlc3BvbnNlKHMpOkx1KHMpP3RoaXMuX29ucmVxdWVzdChzLGEpOlB2KHMpP3RoaXMuX29ubm90aWZpY2F0aW9uKHMpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2UgdHlwZTogJHtKU09OLnN0cmluZ2lmeShzKX1gKSl9LGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zdGFydCgpfV9vbmNsb3NlKCl7Y29uc3QgdD10aGlzLl9yZXNwb25zZUhhbmRsZXJzO3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmNsZWFyKCksdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl90aW1lb3V0SW5mby52YWx1ZXMoKSljbGVhclRpbWVvdXQoby50aW1lb3V0SWQpO3RoaXMuX3RpbWVvdXRJbmZvLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnZhbHVlcygpKW8uYWJvcnQoKTt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtjb25zdCBuPUQuZnJvbUVycm9yKEYuQ29ubmVjdGlvbkNsb3NlZCwiQ29ubmVjdGlvbiBjbG9zZWQiKTt0aGlzLl90cmFuc3BvcnQ9dm9pZCAwLHRoaXMub25jbG9zZT8uKCk7Zm9yKGNvbnN0IG8gb2YgdC52YWx1ZXMoKSlvKG4pfV9vbmVycm9yKHQpe3RoaXMub25lcnJvcj8uKHQpfV9vbm5vdGlmaWNhdGlvbih0KXtjb25zdCBuPXRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tOb3RpZmljYXRpb25IYW5kbGVyO24hPT12b2lkIDAmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm4odCkpLmNhdGNoKG89PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtvfWApKSl9X29ucmVxdWVzdCh0LG4pe2NvbnN0IG89dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcixyPXRoaXMuX3RyYW5zcG9ydCxzPXQucGFyYW1zPy5fbWV0YT8uW2V0XT8udGFza0lkO2lmKG89PT12b2lkIDApe2NvbnN0IGQ9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpGLk1ldGhvZE5vdEZvdW5kLG1lc3NhZ2U6Ik1ldGhvZCBub3QgZm91bmQifX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT90aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6ZCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKS5jYXRjaChmPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGVucXVldWUgZXJyb3IgcmVzcG9uc2U6ICR7Zn1gKSkpOnI/LnNlbmQoZCkuY2F0Y2goZj0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGFuIGVycm9yIHJlc3BvbnNlOiAke2Z9YCkpKTtyZXR1cm59Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5zZXQodC5pZCxhKTtjb25zdCBpPXh2KHQucGFyYW1zKT90LnBhcmFtcy50YXNrOnZvaWQgMCxsPXRoaXMuX3Rhc2tTdG9yZT90aGlzLnJlcXVlc3RUYXNrU3RvcmUodCxyPy5zZXNzaW9uSWQpOnZvaWQgMCx1PXtzaWduYWw6YS5zaWduYWwsc2Vzc2lvbklkOnI/LnNlc3Npb25JZCxfbWV0YTp0LnBhcmFtcz8uX21ldGEsc2VuZE5vdGlmaWNhdGlvbjphc3luYyBkPT57aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgZj17cmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYoZi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihkLGYpfSxzZW5kUmVxdWVzdDphc3luYyhkLGYsZyk9PntpZihhLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBEKEYuQ29ubmVjdGlvbkNsb3NlZCwiUmVxdWVzdCB3YXMgY2FuY2VsbGVkIik7Y29uc3Qgdj17Li4uZyxyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJiF2LnJlbGF0ZWRUYXNrJiYodi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KTtjb25zdCBfPXYucmVsYXRlZFRhc2s/LnRhc2tJZD8/cztyZXR1cm4gXyYmbCYmYXdhaXQgbC51cGRhdGVUYXNrU3RhdHVzKF8sImlucHV0X3JlcXVpcmVkIiksYXdhaXQgdGhpcy5yZXF1ZXN0KGQsZix2KX0sYXV0aEluZm86bj8uYXV0aEluZm8scmVxdWVzdElkOnQuaWQscmVxdWVzdEluZm86bj8ucmVxdWVzdEluZm8sdGFza0lkOnMsdGFza1N0b3JlOmwsdGFza1JlcXVlc3RlZFR0bDppPy50dGwsY2xvc2VTU0VTdHJlYW06bj8uY2xvc2VTU0VTdHJlYW0sY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtOm4/LmNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2kmJnRoaXMuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQubWV0aG9kKX0pLnRoZW4oKCk9Pm8odCx1KSkudGhlbihhc3luYyBkPT57aWYoYS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgZj17cmVzdWx0OmQsanNvbnJwYzoiMi4wIixpZDp0LmlkfTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJyZXNwb25zZSIsbWVzc2FnZTpmLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQoZil9LGFzeW5jIGQ9PntpZihhLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBmPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TnVtYmVyLmlzU2FmZUludGVnZXIoZC5jb2RlKT9kLmNvZGU6Ri5JbnRlcm5hbEVycm9yLG1lc3NhZ2U6ZC5tZXNzYWdlPz8iSW50ZXJuYWwgZXJyb3IiLC4uLmQuZGF0YSE9PXZvaWQgMCYme2RhdGE6ZC5kYXRhfX19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmYsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChmKX0pLmNhdGNoKGQ9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCByZXNwb25zZTogJHtkfWApKSkuZmluYWxseSgoKT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5pZCk9PT1hJiZ0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZGVsZXRlKHQuaWQpfSl9X29ucHJvZ3Jlc3ModCl7Y29uc3R7cHJvZ3Jlc3NUb2tlbjpuLC4uLm99PXQucGFyYW1zLHI9TnVtYmVyKG4pLHM9dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQocik7aWYoIXMpe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5rbm93biB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufWNvbnN0IGE9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQociksaT10aGlzLl90aW1lb3V0SW5mby5nZXQocik7aWYoaSYmYSYmaS5yZXNldFRpbWVvdXRPblByb2dyZXNzKXRyeXt0aGlzLl9yZXNldFRpbWVvdXQocil9Y2F0Y2gobCl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUociksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUociksdGhpcy5fY2xlYW51cFRpbWVvdXQociksYShsKTtyZXR1cm59cyhvKX1fb25yZXNwb25zZSh0KXtjb25zdCBuPU51bWJlcih0LmlkKSxvPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KG4pO2lmKG8pe2lmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG4pLFNvKHQpKW8odCk7ZWxzZXtjb25zdCBhPW5ldyBEKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtvKGEpfXJldHVybn1jb25zdCByPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KG4pO2lmKHI9PT12b2lkIDApe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhbiB1bmtub3duIG1lc3NhZ2UgSUQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl9jbGVhbnVwVGltZW91dChuKTtsZXQgcz0hMTtpZihTbyh0KSYmdC5yZXN1bHQmJnR5cGVvZiB0LnJlc3VsdD09Im9iamVjdCIpe2NvbnN0IGE9dC5yZXN1bHQ7aWYoYS50YXNrJiZ0eXBlb2YgYS50YXNrPT0ib2JqZWN0Iil7Y29uc3QgaT1hLnRhc2s7dHlwZW9mIGkudGFza0lkPT0ic3RyaW5nIiYmKHM9ITAsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldChpLnRhc2tJZCxuKSl9fWlmKHN8fHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLFNvKHQpKXIodCk7ZWxzZXtjb25zdCBhPUQuZnJvbUVycm9yKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtyKGEpfX1nZXQgdHJhbnNwb3J0KCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH1hc3luYyBjbG9zZSgpe2F3YWl0IHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKX1hc3luYypyZXF1ZXN0U3RyZWFtKHQsbixvKXtjb25zdHt0YXNrOnJ9PW8/P3t9O2lmKCFyKXt0cnl7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5yZXF1ZXN0KHQsbixvKX19Y2F0Y2goYSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmEgaW5zdGFuY2VvZiBEP2E6bmV3IEQoRi5JbnRlcm5hbEVycm9yLFN0cmluZyhhKSl9fXJldHVybn1sZXQgczt0cnl7Y29uc3QgYT1hd2FpdCB0aGlzLnJlcXVlc3QodCxMYyxvKTtpZihhLnRhc2spcz1hLnRhc2sudGFza0lkLHlpZWxke3R5cGU6InRhc2tDcmVhdGVkIix0YXNrOmEudGFza307ZWxzZSB0aHJvdyBuZXcgRChGLkludGVybmFsRXJyb3IsIlRhc2sgY3JlYXRpb24gZGlkIG5vdCByZXR1cm4gYSB0YXNrIik7Zm9yKDs7KXtjb25zdCBpPWF3YWl0IHRoaXMuZ2V0VGFzayh7dGFza0lkOnN9LG8pO2lmKHlpZWxke3R5cGU6InRhc2tTdGF0dXMiLHRhc2s6aX0sWGUoaS5zdGF0dXMpKXtpLnN0YXR1cz09PSJjb21wbGV0ZWQiP3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9Omkuc3RhdHVzPT09ImZhaWxlZCI/eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBEKEYuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IGZhaWxlZGApfTppLnN0YXR1cz09PSJjYW5jZWxsZWQiJiYoeWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBEKEYuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IHdhcyBjYW5jZWxsZWRgKX0pO3JldHVybn1pZihpLnN0YXR1cz09PSJpbnB1dF9yZXF1aXJlZCIpe3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9O3JldHVybn1jb25zdCBsPWkucG9sbEludGVydmFsPz90aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO2F3YWl0IG5ldyBQcm9taXNlKHU9PnNldFRpbWVvdXQodSxsKSksbz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpfX1jYXRjaChhKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6YSBpbnN0YW5jZW9mIEQ/YTpuZXcgRChGLkludGVybmFsRXJyb3IsU3RyaW5nKGEpKX19fXJlcXVlc3QodCxuLG8pe2NvbnN0e3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjphLHRhc2s6aSxyZWxhdGVkVGFzazpsfT1vPz97fTtyZXR1cm4gbmV3IFByb21pc2UoKHUsZCk9Pntjb25zdCBmPU49PntkKE4pfTtpZighdGhpcy5fdHJhbnNwb3J0KXtmKG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpKTtyZXR1cm59aWYodGhpcy5fb3B0aW9ucz8uZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcz09PSEwKXRyeXt0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodC5tZXRob2QpLGkmJnRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkodC5tZXRob2QpfWNhdGNoKE4pe2YoTik7cmV0dXJufW8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtjb25zdCBnPXRoaXMuX3JlcXVlc3RNZXNzYWdlSWQrKyx2PXsuLi50LGpzb25ycGM6IjIuMCIsaWQ6Z307bz8ub25wcm9ncmVzcyYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuc2V0KGcsby5vbnByb2dyZXNzKSx2LnBhcmFtcz17Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30scHJvZ3Jlc3NUb2tlbjpnfX0pLGkmJih2LnBhcmFtcz17Li4udi5wYXJhbXMsdGFzazppfSksbCYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyxfbWV0YTp7Li4udi5wYXJhbXM/Ll9tZXRhfHx7fSxbZXRdOmx9fSk7Y29uc3QgXz1OPT57dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUoZyksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUoZyksdGhpcy5fY2xlYW51cFRpbWVvdXQoZyksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKHtqc29ucnBjOiIyLjAiLG1ldGhvZDoibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiLHBhcmFtczp7cmVxdWVzdElkOmcscmVhc29uOlN0cmluZyhOKX19LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46YX0pLmNhdGNoKHJlPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgY2FuY2VsbGF0aW9uOiAke3JlfWApKSk7Y29uc3QgST1OIGluc3RhbmNlb2YgRD9OOm5ldyBEKEYuUmVxdWVzdFRpbWVvdXQsU3RyaW5nKE4pKTtkKEkpfTt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLnNldChnLE49PntpZighbz8uc2lnbmFsPy5hYm9ydGVkKXtpZihOIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGQoTik7dHJ5e2NvbnN0IEk9bmYobixOLnJlc3VsdCk7SS5zdWNjZXNzP3UoSS5kYXRhKTpkKEkuZXJyb3IpfWNhdGNoKEkpe2QoSSl9fX0pLG8/LnNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCgpPT57XyhvPy5zaWduYWw/LnJlYXNvbil9KTtjb25zdCAkPW8/LnRpbWVvdXQ/P2RfLFM9KCk9Pl8oRC5mcm9tRXJyb3IoRi5SZXF1ZXN0VGltZW91dCwiUmVxdWVzdCB0aW1lZCBvdXQiLHt0aW1lb3V0OiR9KSk7dGhpcy5fc2V0dXBUaW1lb3V0KGcsJCxvPy5tYXhUb3RhbFRpbWVvdXQsUyxvPy5yZXNldFRpbWVvdXRPblByb2dyZXNzPz8hMSk7Y29uc3Qgaj1sPy50YXNrSWQ7aWYoail7Y29uc3QgTj1JPT57Y29uc3QgcmU9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQoZyk7cmU/cmUoSSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc3BvbnNlIGhhbmRsZXIgbWlzc2luZyBmb3Igc2lkZS1jaGFubmVsZWQgcmVxdWVzdCAke2d9YCkpfTt0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLnNldChnLE4pLHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShqLHt0eXBlOiJyZXF1ZXN0IixtZXNzYWdlOnYsdGltZXN0YW1wOkRhdGUubm93KCl9KS5jYXRjaChJPT57dGhpcy5fY2xlYW51cFRpbWVvdXQoZyksZChJKX0pfWVsc2UgdGhpcy5fdHJhbnNwb3J0LnNlbmQodix7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmF9KS5jYXRjaChOPT57dGhpcy5fY2xlYW51cFRpbWVvdXQoZyksZChOKX0pfSl9YXN5bmMgZ2V0VGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvZ2V0IixwYXJhbXM6dH0sVWMsbil9YXN5bmMgZ2V0VGFza1Jlc3VsdCh0LG4sbyl7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9yZXN1bHQiLHBhcmFtczp0fSxuLG8pfWFzeW5jIGxpc3RUYXNrcyh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvbGlzdCIscGFyYW1zOnR9LFZjLG4pfWFzeW5jIGNhbmNlbFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2NhbmNlbCIscGFyYW1zOnR9LFd2LG4pfWFzeW5jIG5vdGlmaWNhdGlvbih0LG4pe2lmKCF0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIik7dGhpcy5hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQubWV0aG9kKTtjb25zdCBvPW4/LnJlbGF0ZWRUYXNrPy50YXNrSWQ7aWYobyl7Y29uc3QgaT17Li4udCxqc29ucnBjOiIyLjAiLHBhcmFtczp7Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30sW2V0XTpuLnJlbGF0ZWRUYXNrfX19O2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShvLHt0eXBlOiJub3RpZmljYXRpb24iLG1lc3NhZ2U6aSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pO3JldHVybn1pZigodGhpcy5fb3B0aW9ucz8uZGVib3VuY2VkTm90aWZpY2F0aW9uTWV0aG9kcz8/W10pLmluY2x1ZGVzKHQubWV0aG9kKSYmIXQucGFyYW1zJiYhbj8ucmVsYXRlZFJlcXVlc3RJZCYmIW4/LnJlbGF0ZWRUYXNrKXtpZih0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5oYXModC5tZXRob2QpKXJldHVybjt0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5hZGQodC5tZXRob2QpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpZih0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5kZWxldGUodC5tZXRob2QpLCF0aGlzLl90cmFuc3BvcnQpcmV0dXJuO2xldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtldF06bi5yZWxhdGVkVGFza319fSksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGksbikuY2F0Y2gobD0+dGhpcy5fb25lcnJvcihsKSl9KTtyZXR1cm59bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW2V0XTpuLnJlbGF0ZWRUYXNrfX19KSxhd2FpdCB0aGlzLl90cmFuc3BvcnQuc2VuZChhLG4pfXNldFJlcXVlc3RIYW5kbGVyKHQsbil7Y29uc3Qgbz1CdSh0KTt0aGlzLmFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eShvKSx0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuc2V0KG8sKHIscyk9Pntjb25zdCBhPVV1KHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKGEscykpfSl9cmVtb3ZlUmVxdWVzdEhhbmRsZXIodCl7dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmRlbGV0ZSh0KX1hc3NlcnRDYW5TZXRSZXF1ZXN0SGFuZGxlcih0KXtpZih0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgQSByZXF1ZXN0IGhhbmRsZXIgZm9yICR7dH0gYWxyZWFkeSBleGlzdHMsIHdoaWNoIHdvdWxkIGJlIG92ZXJyaWRkZW5gKX1zZXROb3RpZmljYXRpb25IYW5kbGVyKHQsbil7Y29uc3Qgbz1CdSh0KTt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5zZXQobyxyPT57Y29uc3Qgcz1VdSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihzKSl9KX1yZW1vdmVOb3RpZmljYXRpb25IYW5kbGVyKHQpe3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmRlbGV0ZSh0KX1fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIodCl7Y29uc3Qgbj10aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuZ2V0KHQpO24hPT12b2lkIDAmJih0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuZGVsZXRlKHQpKX1hc3luYyBfZW5xdWV1ZVRhc2tNZXNzYWdlKHQsbixvKXtpZighdGhpcy5fdGFza1N0b3JlfHwhdGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbnF1ZXVlIHRhc2sgbWVzc2FnZTogdGFza1N0b3JlIGFuZCB0YXNrTWVzc2FnZVF1ZXVlIGFyZSBub3QgY29uZmlndXJlZCIpO2NvbnN0IHI9dGhpcy5fb3B0aW9ucz8ubWF4VGFza1F1ZXVlU2l6ZTthd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmVucXVldWUodCxuLG8scil9YXN5bmMgX2NsZWFyVGFza1F1ZXVlKHQsbil7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7Y29uc3Qgbz1hd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmRlcXVldWVBbGwodCxuKTtmb3IoY29uc3QgciBvZiBvKWlmKHIudHlwZT09PSJyZXF1ZXN0IiYmTHUoci5tZXNzYWdlKSl7Y29uc3Qgcz1yLm1lc3NhZ2UuaWQsYT10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChzKTthPyhhKG5ldyBEKEYuSW50ZXJuYWxFcnJvciwiVGFzayBjYW5jZWxsZWQgb3IgY29tcGxldGVkIikpLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKHMpKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzb2x2ZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3N9IGR1cmluZyB0YXNrICR7dH0gY2xlYW51cGApKX19fWFzeW5jIF93YWl0Rm9yVGFza1VwZGF0ZSh0LG4pe2xldCBvPXRoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlPy5nZXRUYXNrKHQpO3I/LnBvbGxJbnRlcnZhbCYmKG89ci5wb2xsSW50ZXJ2YWwpfWNhdGNoe31yZXR1cm4gbmV3IFByb21pc2UoKHIscyk9PntpZihuLmFib3J0ZWQpe3MobmV3IEQoRi5JbnZhbGlkUmVxdWVzdCwiUmVxdWVzdCBjYW5jZWxsZWQiKSk7cmV0dXJufWNvbnN0IGE9c2V0VGltZW91dChyLG8pO24uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCgpPT57Y2xlYXJUaW1lb3V0KGEpLHMobmV3IEQoRi5JbnZhbGlkUmVxdWVzdCwiUmVxdWVzdCBjYW5jZWxsZWQiKSl9LHtvbmNlOiEwfSl9KX1yZXF1ZXN0VGFza1N0b3JlKHQsbil7Y29uc3Qgbz10aGlzLl90YXNrU3RvcmU7aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJObyB0YXNrIHN0b3JlIGNvbmZpZ3VyZWQiKTtyZXR1cm57Y3JlYXRlVGFzazphc3luYyByPT57aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJObyByZXF1ZXN0IHByb3ZpZGVkIik7cmV0dXJuIGF3YWl0IG8uY3JlYXRlVGFzayhyLHQuaWQse21ldGhvZDp0Lm1ldGhvZCxwYXJhbXM6dC5wYXJhbXN9LG4pfSxnZXRUYXNrOmFzeW5jIHI9Pntjb25zdCBzPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKCFzKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuIHN9LHN0b3JlVGFza1Jlc3VsdDphc3luYyhyLHMsYSk9Pnthd2FpdCBvLnN0b3JlVGFza1Jlc3VsdChyLHMsYSxuKTtjb25zdCBpPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGkpe2NvbnN0IGw9Wm8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczppfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24obCksWGUoaS5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGdldFRhc2tSZXN1bHQ6cj0+by5nZXRUYXNrUmVzdWx0KHIsbiksdXBkYXRlVGFza1N0YXR1czphc3luYyhyLHMsYSk9Pntjb25zdCBpPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKCFpKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcyxgVGFzayAiJHtyfSIgbm90IGZvdW5kIC0gaXQgbWF5IGhhdmUgYmVlbiBjbGVhbmVkIHVwYCk7aWYoWGUoaS5zdGF0dXMpKXRocm93IG5ldyBEKEYuSW52YWxpZFBhcmFtcyxgQ2Fubm90IHVwZGF0ZSB0YXNrICIke3J9IiBmcm9tIHRlcm1pbmFsIHN0YXR1cyAiJHtpLnN0YXR1c30iIHRvICIke3N9Ii4gVGVybWluYWwgc3RhdGVzIChjb21wbGV0ZWQsIGZhaWxlZCwgY2FuY2VsbGVkKSBjYW5ub3QgdHJhbnNpdGlvbiB0byBvdGhlciBzdGF0ZXMuYCk7YXdhaXQgby51cGRhdGVUYXNrU3RhdHVzKHIscyxhLG4pO2NvbnN0IGw9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYobCl7Y29uc3QgdT1aby5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmx9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbih1KSxYZShsLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sbGlzdFRhc2tzOnI9Pm8ubGlzdFRhc2tzKHIsbil9fX1mdW5jdGlvbiBIdShlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gaF8oZSx0KXtjb25zdCBuPXsuLi5lfTtmb3IoY29uc3QgbyBpbiB0KXtjb25zdCByPW8scz10W3JdO2lmKHM9PT12b2lkIDApY29udGludWU7Y29uc3QgYT1uW3JdO0h1KGEpJiZIdShzKT9uW3JdPXsuLi5hLC4uLnN9Om5bcl09c31yZXR1cm4gbn0oZT0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkoZSx7Z2V0Oih0LG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dClbbl19KTplKShmdW5jdGlvbihlKXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTtjbGFzcyBmXyBleHRlbmRzIHBfe19yZWdpc3RlcmVkTWV0aG9kcz1uZXcgU2V0O19ldmVudFNsb3RzPW5ldyBNYXA7b25FdmVudERpc3BhdGNoKHQsbil7fV9lbnN1cmVFdmVudFNsb3QodCl7bGV0IG49dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW4pe2xldCBvPXRoaXMuZXZlbnRTY2hlbWFzW3RdO2lmKCFvKXRocm93IEVycm9yKGBVbmtub3duIGV2ZW50OiAke1N0cmluZyh0KX1gKTtuPXtsaXN0ZW5lcnM6W119LHRoaXMuX2V2ZW50U2xvdHMuc2V0KHQsbik7bGV0IHI9by5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKHIpO2xldCBzPW47c3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihvLGE9PntsZXQgaT1hLnBhcmFtczt0aGlzLm9uRXZlbnREaXNwYXRjaCh0LGkpLHMub25IYW5kbGVyPy4oaSk7Zm9yKGxldCBsIG9mWy4uLnMubGlzdGVuZXJzXSlsKGkpfSl9cmV0dXJuIG59c2V0RXZlbnRIYW5kbGVyKHQsbil7bGV0IG89dGhpcy5fZW5zdXJlRXZlbnRTbG90KHQpO28ub25IYW5kbGVyJiZuJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gb24ke1N0cmluZyh0KX0gaGFuZGxlciByZXBsYWNlZC4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoIiR7U3RyaW5nKHQpfSIsIOKApikgdG8gYWRkIG11bHRpcGxlIGxpc3RlbmVycyB3aXRob3V0IHJlcGxhY2luZy5gKSxvLm9uSGFuZGxlcj1ufWdldEV2ZW50SGFuZGxlcih0KXtyZXR1cm4gdGhpcy5fZXZlbnRTbG90cy5nZXQodCk/Lm9uSGFuZGxlcn1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fZW5zdXJlRXZlbnRTbG90KHQpLmxpc3RlbmVycy5wdXNoKG4pfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxuKXtsZXQgbz10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbylyZXR1cm47bGV0IHI9by5saXN0ZW5lcnMuaW5kZXhPZihuKTtyIT09LTEmJm8ubGlzdGVuZXJzLnNwbGljZShyLDEpfXNldFJlcXVlc3RIYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXRSZXF1ZXN0SGFuZGxlciIpLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O3NldE5vdGlmaWNhdGlvbkhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldE5vdGlmaWNhdGlvbkhhbmRsZXIiKSxzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKHQsbil9O3dhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQodCxuLG8pe24mJm8mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSAke3R9IGhhbmRsZXIgcmVwbGFjZWQuIFByZXZpb3VzIGhhbmRsZXIgd2lsbCBubyBsb25nZXIgYmUgY2FsbGVkLmApfXJlcGxhY2VSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e2xldCBvPXQuc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtfYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LG4pe2xldCBvPXQuc2hhcGUubWV0aG9kLnZhbHVlO2lmKHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmhhcyhvKSl0aHJvdyBFcnJvcihgSGFuZGxlciBmb3IgIiR7b30iIGFscmVhZHkgcmVnaXN0ZXJlZCAodmlhICR7bn0pLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigpIHRvIGF0dGFjaCBtdWx0aXBsZSBsaXN0ZW5lcnMsIG9yIHRoZSBvbiogc2V0dGVyIGZvciByZXBsYWNlIHNlbWFudGljcy5gKTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyl9fXZhciBtXz0iMjAyNi0wMS0yNiIsZ189InVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIjtjbGFzcyBiX3tldmVudFRhcmdldDtldmVudFNvdXJjZTttZXNzYWdlTGlzdGVuZXI7Y29uc3RydWN0b3IodD13aW5kb3cucGFyZW50LG4pe3RoaXMuZXZlbnRUYXJnZXQ9dCx0aGlzLmV2ZW50U291cmNlPW4sdGhpcy5tZXNzYWdlTGlzdGVuZXI9bz0+e2lmKG4mJm8uc291cmNlIT09dGhpcy5ldmVudFNvdXJjZSl7Y29uc29sZS5kZWJ1ZygiSWdub3JpbmcgbWVzc2FnZSBmcm9tIHVua25vd24gc291cmNlIixvKTtyZXR1cm59bGV0IHI9RXYuc2FmZVBhcnNlKG8uZGF0YSk7ci5zdWNjZXNzPyhjb25zb2xlLmRlYnVnKCJQYXJzZWQgbWVzc2FnZSIsci5kYXRhKSx0aGlzLm9ubWVzc2FnZT8uKHIuZGF0YSkpOm8uZGF0YT8uanNvbnJwYyE9PSIyLjAiP2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG5vbi1KU09OLVJQQyBtZXNzYWdlIixyLmVycm9yLm1lc3NhZ2Usbyk6KGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBtZXNzYWdlIixyLmVycm9yLm1lc3NhZ2UsbyksdGhpcy5vbmVycm9yPy4oRXJyb3IoIkludmFsaWQgSlNPTi1SUEMgbWVzc2FnZSByZWNlaXZlZDogIityLmVycm9yLm1lc3NhZ2UpKSl9fWFzeW5jIHN0YXJ0KCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKX1hc3luYyBzZW5kKHQsbil7dC5tZXRob2QhPT1nXyYmY29uc29sZS5kZWJ1ZygiU2VuZGluZyBtZXNzYWdlIix0KSx0aGlzLmV2ZW50VGFyZ2V0LnBvc3RNZXNzYWdlKHQsIioiKX1hc3luYyBjbG9zZSgpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lciksdGhpcy5vbmNsb3NlPy4oKX1vbmNsb3NlO29uZXJyb3I7b25tZXNzYWdlO3Nlc3Npb25JZDtzZXRQcm90b2NvbFZlcnNpb259dmFyIHZfPU8oW20oImxpZ2h0IiksbSgiZGFyayIpXSkuZGVzY3JpYmUoIkNvbG9yIHRoZW1lIHByZWZlcmVuY2UgZm9yIHRoZSBob3N0IGVudmlyb25tZW50LiIpLGFuPU8oW20oImlubGluZSIpLG0oImZ1bGxzY3JlZW4iKSxtKCJwaXAiKV0pLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGUgZm9yIFVJIHByZXNlbnRhdGlvbi4iKSx5Xz1PKFttKCItLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnkiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtdGVydGlhcnkiKSxtKCItLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1naG9zdCIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1pbmZvIiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciIpLG0oIi0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzIiksbSgiLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmciKSxtKCItLWNvbG9yLWJhY2tncm91bmQtZGlzYWJsZWQiKSxtKCItLWNvbG9yLXRleHQtcHJpbWFyeSIpLG0oIi0tY29sb3ItdGV4dC1zZWNvbmRhcnkiKSxtKCItLWNvbG9yLXRleHQtdGVydGlhcnkiKSxtKCItLWNvbG9yLXRleHQtaW52ZXJzZSIpLG0oIi0tY29sb3ItdGV4dC1naG9zdCIpLG0oIi0tY29sb3ItdGV4dC1pbmZvIiksbSgiLS1jb2xvci10ZXh0LWRhbmdlciIpLG0oIi0tY29sb3ItdGV4dC1zdWNjZXNzIiksbSgiLS1jb2xvci10ZXh0LXdhcm5pbmciKSxtKCItLWNvbG9yLXRleHQtZGlzYWJsZWQiKSxtKCItLWNvbG9yLWJvcmRlci1wcmltYXJ5IiksbSgiLS1jb2xvci1ib3JkZXItc2Vjb25kYXJ5IiksbSgiLS1jb2xvci1ib3JkZXItdGVydGlhcnkiKSxtKCItLWNvbG9yLWJvcmRlci1pbnZlcnNlIiksbSgiLS1jb2xvci1ib3JkZXItZ2hvc3QiKSxtKCItLWNvbG9yLWJvcmRlci1pbmZvIiksbSgiLS1jb2xvci1ib3JkZXItZGFuZ2VyIiksbSgiLS1jb2xvci1ib3JkZXItc3VjY2VzcyIpLG0oIi0tY29sb3ItYm9yZGVyLXdhcm5pbmciKSxtKCItLWNvbG9yLWJvcmRlci1kaXNhYmxlZCIpLG0oIi0tY29sb3ItcmluZy1wcmltYXJ5IiksbSgiLS1jb2xvci1yaW5nLXNlY29uZGFyeSIpLG0oIi0tY29sb3ItcmluZy1pbnZlcnNlIiksbSgiLS1jb2xvci1yaW5nLWluZm8iKSxtKCItLWNvbG9yLXJpbmctZGFuZ2VyIiksbSgiLS1jb2xvci1yaW5nLXN1Y2Nlc3MiKSxtKCItLWNvbG9yLXJpbmctd2FybmluZyIpLG0oIi0tZm9udC1zYW5zIiksbSgiLS1mb250LW1vbm8iKSxtKCItLWZvbnQtd2VpZ2h0LW5vcm1hbCIpLG0oIi0tZm9udC13ZWlnaHQtbWVkaXVtIiksbSgiLS1mb250LXdlaWdodC1zZW1pYm9sZCIpLG0oIi0tZm9udC13ZWlnaHQtYm9sZCIpLG0oIi0tZm9udC10ZXh0LXhzLXNpemUiKSxtKCItLWZvbnQtdGV4dC1zbS1zaXplIiksbSgiLS1mb250LXRleHQtbWQtc2l6ZSIpLG0oIi0tZm9udC10ZXh0LWxnLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy14cy1zaXplIiksbSgiLS1mb250LWhlYWRpbmctc20tc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLW1kLXNpemUiKSxtKCItLWZvbnQtaGVhZGluZy1sZy1zaXplIiksbSgiLS1mb250LWhlYWRpbmcteGwtc2l6ZSIpLG0oIi0tZm9udC1oZWFkaW5nLTJ4bC1zaXplIiksbSgiLS1mb250LWhlYWRpbmctM3hsLXNpemUiKSxtKCItLWZvbnQtdGV4dC14cy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC10ZXh0LXNtLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LXRleHQtbWQtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtdGV4dC1sZy1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLXhzLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmctc20tbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy1tZC1saW5lLWhlaWdodCIpLG0oIi0tZm9udC1oZWFkaW5nLWxnLWxpbmUtaGVpZ2h0IiksbSgiLS1mb250LWhlYWRpbmcteGwtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy0yeGwtbGluZS1oZWlnaHQiKSxtKCItLWZvbnQtaGVhZGluZy0zeGwtbGluZS1oZWlnaHQiKSxtKCItLWJvcmRlci1yYWRpdXMteHMiKSxtKCItLWJvcmRlci1yYWRpdXMtc20iKSxtKCItLWJvcmRlci1yYWRpdXMtbWQiKSxtKCItLWJvcmRlci1yYWRpdXMtbGciKSxtKCItLWJvcmRlci1yYWRpdXMteGwiKSxtKCItLWJvcmRlci1yYWRpdXMtZnVsbCIpLG0oIi0tYm9yZGVyLXdpZHRoLXJlZ3VsYXIiKSxtKCItLXNoYWRvdy1oYWlybGluZSIpLG0oIi0tc2hhZG93LXNtIiksbSgiLS1zaGFkb3ctbWQiKSxtKCItLXNoYWRvdy1sZyIpXSkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZSBrZXlzIGF2YWlsYWJsZSB0byBNQ1AgYXBwcyBmb3IgdGhlbWluZy4iKSxfXz1aKHlfLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApLE8oW2goKSwkdCgpXSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCkpLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApO2Ioe21ldGhvZDptKCJ1aS9vcGVuLWxpbmsiKSxwYXJhbXM6Yih7dXJsOmgoKS5kZXNjcmliZSgiVVJMIHRvIG9wZW4gaW4gdGhlIGhvc3QncyBicm93c2VyIil9KX0pO3ZhciBrXz1iKHtpc0Vycm9yOkIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IGZhaWxlZCB0byBvcGVuIHRoZSBVUkwgKGUuZy4sIGR1ZSB0byBzZWN1cml0eSBwb2xpY3kpLiIpfSkucGFzc3Rocm91Z2goKSwkXz1iKHtpc0Vycm9yOkIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBkb3dubG9hZCBmYWlsZWQgKGUuZy4sIHVzZXIgY2FuY2VsbGVkIG9yIGhvc3QgZGVuaWVkKS4iKX0pLnBhc3N0aHJvdWdoKCksd189Yih7aXNFcnJvcjpCKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCByZWplY3RlZCBvciBmYWlsZWQgdG8gZGVsaXZlciB0aGUgbWVzc2FnZS4iKX0pLnBhc3N0aHJvdWdoKCk7Yih7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1wcm94eS1yZWFkeSIpLHBhcmFtczpiKHt9KX0pO3ZhciBldT1iKHtjb25uZWN0RG9tYWluczp4KGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZShgT3JpZ2lucyBmb3IgbmV0d29yayByZXF1ZXN0cyAoZmV0Y2gvWEhSL1dlYlNvY2tldCkuCgotIE1hcHMgdG8gQ1NQIFxgY29ubmVjdC1zcmNcYCBkaXJlY3RpdmUKLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXR3b3JrIGNvbm5lY3Rpb25zIChzZWN1cmUgZGVmYXVsdClgKSxyZXNvdXJjZURvbWFpbnM6eChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIHN0YXRpYyByZXNvdXJjZXMgKGltYWdlcywgc2NyaXB0cywgc3R5bGVzaGVldHMsIGZvbnRzLCBtZWRpYSkuXG5cbi0gTWFwcyB0byBDU1AgYGltZy1zcmNgLCBgc2NyaXB0LXNyY2AsIGBzdHlsZS1zcmNgLCBgZm9udC1zcmNgLCBgbWVkaWEtc3JjYCBkaXJlY3RpdmVzXG4tIFdpbGRjYXJkIHN1YmRvbWFpbnMgc3VwcG9ydGVkOiBgaHR0cHM6Ly8qLmV4YW1wbGUuY29tYFxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXR3b3JrIHJlc291cmNlcyAoc2VjdXJlIGRlZmF1bHQpIiksZnJhbWVEb21haW5zOngoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBuZXN0ZWQgaWZyYW1lcy5cblxuLSBNYXBzIHRvIENTUCBgZnJhbWUtc3JjYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmVzdGVkIGlmcmFtZXMgYWxsb3dlZCAoYGZyYW1lLXNyYyAnbm9uZSdgKSIpLGJhc2VVcmlEb21haW5zOngoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBbGxvd2VkIGJhc2UgVVJJcyBmb3IgdGhlIGRvY3VtZW50LlxuXG4tIE1hcHMgdG8gQ1NQIGBiYXNlLXVyaWAgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG9ubHkgc2FtZSBvcmlnaW4gYWxsb3dlZCAoYGJhc2UtdXJpICdzZWxmJ2ApIil9KSx0dT1iKHtjYW1lcmE6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjYW1lcmEgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjYW1lcmFgIGZlYXR1cmUuIiksbWljcm9waG9uZTpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IG1pY3JvcGhvbmUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBtaWNyb3Bob25lYCBmZWF0dXJlLiIpLGdlb2xvY2F0aW9uOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgZ2VvbG9jYXRpb24gYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBnZW9sb2NhdGlvbmAgZmVhdHVyZS4iKSxjbGlwYm9hcmRXcml0ZTpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNsaXBib2FyZCB3cml0ZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNsaXBib2FyZC13cml0ZWAgZmVhdHVyZS4iKX0pO2Ioe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3NpemUtY2hhbmdlZCIpLHBhcmFtczpiKHt3aWR0aDpDKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IHdpZHRoIGluIHBpeGVscy4iKSxoZWlnaHQ6QygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyBoZWlnaHQgaW4gcGl4ZWxzLiIpfSl9KTt2YXIgU189Yih7bWV0aG9kOm0oInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dCIpLHBhcmFtczpiKHthcmd1bWVudHM6WihoKCksTCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIil9KX0pLHpfPWIoe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCIpLHBhcmFtczpiKHthcmd1bWVudHM6WihoKCksTCgpLmRlc2NyaWJlKCJQYXJ0aWFsIHRvb2wgY2FsbCBhcmd1bWVudHMgKGluY29tcGxldGUsIG1heSBjaGFuZ2UpLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQYXJ0aWFsIHRvb2wgY2FsbCBhcmd1bWVudHMgKGluY29tcGxldGUsIG1heSBjaGFuZ2UpLiIpfSl9KSxUXz1iKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy90b29sLWNhbmNlbGxlZCIpLHBhcmFtczpiKHtyZWFzb246aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ09wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGNhbmNlbGxhdGlvbiAoZS5nLiwgInVzZXIgYWN0aW9uIiwgInRpbWVvdXQiKS4nKX0pfSksSV89Yih7Zm9udHM6aCgpLm9wdGlvbmFsKCl9KSx4Xz1iKHt2YXJpYWJsZXM6X18ub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlcyBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGNzczpJXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgYmxvY2tzIHRoYXQgYXBwcyBjYW4gaW5qZWN0LiIpfSksUF89Yih7bWV0aG9kOm0oInVpL3Jlc291cmNlLXRlYXJkb3duIikscGFyYW1zOmIoe30pfSk7WihoKCksTCgpKTt2YXIgRnU9Yih7dGV4dDpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRleHQgY29udGVudCBibG9ja3MuIiksaW1hZ2U6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBpbWFnZSBjb250ZW50IGJsb2Nrcy4iKSxhdWRpbzpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGF1ZGlvIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2UgY29udGVudCBibG9ja3MuIikscmVzb3VyY2VMaW5rOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2UgbGluayBjb250ZW50IGJsb2Nrcy4iKSxzdHJ1Y3R1cmVkQ29udGVudDpiKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHN0cnVjdHVyZWQgY29udGVudC4iKX0pO2Ioe21ldGhvZDptKCJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iKSxwYXJhbXM6Yih7fSkub3B0aW9uYWwoKX0pO3ZhciBDXz1iKHtleHBlcmltZW50YWw6WihoKCksWihoKCksbm8oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSxvcGVuTGlua3M6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBvcGVuaW5nIGV4dGVybmFsIFVSTHMuIiksZG93bmxvYWRGaWxlOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgZmlsZSBkb3dubG9hZHMgdmlhIHVpL2Rvd25sb2FkLWZpbGUuIiksc2VydmVyVG9vbHM6Yih7bGlzdENoYW5nZWQ6QigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGNhbiBwcm94eSB0b29sIGNhbGxzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLHNlcnZlclJlc291cmNlczpiKHtsaXN0Q2hhbmdlZDpCKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGNhbiBwcm94eSByZXNvdXJjZSByZWFkcyB0byB0aGUgTUNQIHNlcnZlci4iKSxsb2dnaW5nOmIoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBsb2cgbWVzc2FnZXMuIiksc2FuZGJveDpiKHtwZXJtaXNzaW9uczp0dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoZSBob3N0IChjYW1lcmEsIG1pY3JvcGhvbmUsIGdlb2xvY2F0aW9uKS4iKSxjc3A6ZXUub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NQIGRvbWFpbnMgYXBwcm92ZWQgYnkgdGhlIGhvc3QuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTYW5kYm94IGNvbmZpZ3VyYXRpb24gYXBwbGllZCBieSB0aGUgaG9zdC4iKSx1cGRhdGVNb2RlbENvbnRleHQ6RnUub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGNvbnRleHQgdXBkYXRlcyAodWkvdXBkYXRlLW1vZGVsLWNvbnRleHQpIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBtb2RlbCdzIGNvbnRleHQgZm9yIGZ1dHVyZSB0dXJucy4iKSxtZXNzYWdlOkZ1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVjZWl2aW5nIGNvbnRlbnQgbWVzc2FnZXMgKHVpL21lc3NhZ2UpIGZyb20gdGhlIHZpZXcuIiksc2FtcGxpbmc6Yih7dG9vbHM6Yih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29sIHVzZSB2aWEgYHRvb2xzYCBhbmQgYHRvb2xDaG9pY2VgIHBhcmFtZXRlcnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIExMTSBzYW1wbGluZyAoc2FtcGxpbmcvY3JlYXRlTWVzc2FnZSkgZnJvbSB0aGUgdmlldy5cbk1pcnJvcnMgdGhlIE1DUCBgQ2xpZW50Q2FwYWJpbGl0aWVzLnNhbXBsaW5nYCBzaGFwZSBzbyBob3N0cyBjYW4gcGFzcyBpdCB0aHJvdWdoLiIpfSksRV89Yih7ZXhwZXJpbWVudGFsOlooaCgpLFooaCgpLG5vKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksdG9vbHM6Yih7bGlzdENoYW5nZWQ6QigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFwcCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFwcCBleHBvc2VzIE1DUC1zdHlsZSB0b29scyB0aGF0IHRoZSBob3N0IGNhbiBjYWxsLiIpLGF2YWlsYWJsZURpc3BsYXlNb2Rlczp4KGFuKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBhcHAgc3VwcG9ydHMuIil9KTtiKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCIpLHBhcmFtczpiKHt9KS5vcHRpb25hbCgpfSk7Yih7Y3NwOmV1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGNvbmZpZ3VyYXRpb24gZm9yIFVJIHJlc291cmNlcy4iKSxwZXJtaXNzaW9uczp0dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTYW5kYm94IHBlcm1pc3Npb25zIHJlcXVlc3RlZCBieSB0aGUgVUkgcmVzb3VyY2UuIiksZG9tYWluOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBEZWRpY2F0ZWQgb3JpZ2luIGZvciB2aWV3IHNhbmRib3guCgpVc2VmdWwgd2hlbiB2aWV3cyBuZWVkIHN0YWJsZSwgZGVkaWNhdGVkIG9yaWdpbnMgZm9yIE9BdXRoIGNhbGxiYWNrcywgQ09SUyBwb2xpY2llcywgb3IgQVBJIGtleSBhbGxvd2xpc3RzLgoKKipIb3N0LWRlcGVuZGVudDoqKiBUaGUgZm9ybWF0IGFuZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciB0aGlzIGZpZWxkIGFyZSBkZXRlcm1pbmVkIGJ5IGVhY2ggaG9zdC4gU2VydmVycyBNVVNUIGNvbnN1bHQgaG9zdC1zcGVjaWZpYyBkb2N1bWVudGF0aW9uIGZvciB0aGUgZXhwZWN0ZWQgZG9tYWluIGZvcm1hdC4gQ29tbW9uIHBhdHRlcm5zIGluY2x1ZGU6Ci0gSGFzaC1iYXNlZCBzdWJkb21haW5zIChlLmcuLCBcYHtoYXNofS5jbGF1ZGVtY3Bjb250ZW50LmNvbVxgKQotIFVSTC1kZXJpdmVkIHN1YmRvbWFpbnMgKGUuZy4sIFxgd3d3LWV4YW1wbGUtY29tLm9haXVzZXJjb250ZW50LmNvbVxgKQoKSWYgb21pdHRlZCwgaG9zdCB1c2VzIGRlZmF1bHQgc2FuZGJveCBvcmlnaW4gKHR5cGljYWxseSBwZXItY29udmVyc2F0aW9uKS5gKSxwcmVmZXJzQm9yZGVyOkIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBWaXN1YWwgYm91bmRhcnkgcHJlZmVyZW5jZSAtIHRydWUgaWYgdmlldyBwcmVmZXJzIGEgdmlzaWJsZSBib3JkZXIuCgpCb29sZWFuIHJlcXVlc3Rpbmcgd2hldGhlciBhIHZpc2libGUgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIGlzIHByb3ZpZGVkIGJ5IHRoZSBob3N0LiBTcGVjaWZ5aW5nIGFuIGV4cGxpY2l0IHZhbHVlIGZvciB0aGlzIGlzIHJlY29tbWVuZGVkIGJlY2F1c2UgaG9zdHMnIGRlZmF1bHRzIG1heSB2YXJ5LgoKLSBcYHRydWVcYDogcmVxdWVzdCB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBcYGZhbHNlXGA6IHJlcXVlc3Qgbm8gdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gb21pdHRlZDogaG9zdCBkZWNpZGVzIGJvcmRlcmApfSk7Yih7bWV0aG9kOm0oInVpL3JlcXVlc3QtZGlzcGxheS1tb2RlIikscGFyYW1zOmIoe21vZGU6YW4uZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgYmVpbmcgcmVxdWVzdGVkLiIpfSl9KTt2YXIgQV89Yih7bW9kZTphbi5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSB0aGF0IHdhcyBhY3R1YWxseSBzZXQuIE1heSBkaWZmZXIgZnJvbSByZXF1ZXN0ZWQgaWYgbm90IHN1cHBvcnRlZC4iKX0pLnBhc3N0aHJvdWdoKCksT189TyhbbSgibW9kZWwiKSxtKCJhcHAiKV0pLmRlc2NyaWJlKCJUb29sIHZpc2liaWxpdHkgc2NvcGUgLSB3aG8gY2FuIGFjY2VzcyB0aGUgdG9vbC4iKTtiKHtyZXNvdXJjZVVyaTpoKCkub3B0aW9uYWwoKSx2aXNpYmlsaXR5OngoT18pLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFdobyBjYW4gYWNjZXNzIHRoaXMgdG9vbC4gRGVmYXVsdDogWyJtb2RlbCIsICJhcHAiXQotICJtb2RlbCI6IFRvb2wgdmlzaWJsZSB0byBhbmQgY2FsbGFibGUgYnkgdGhlIGFnZW50Ci0gImFwcCI6IFRvb2wgY2FsbGFibGUgYnkgdGhlIGFwcCBmcm9tIHRoaXMgc2VydmVyIG9ubHlgKSxjc3A6c3QoKS5vcHRpb25hbCgpLHBlcm1pc3Npb25zOnN0KCkub3B0aW9uYWwoKX0pO2Ioe21pbWVUeXBlczp4KGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgnQXJyYXkgb2Ygc3VwcG9ydGVkIE1JTUUgdHlwZXMgZm9yIFVJIHJlc291cmNlcy5cbk11c3QgaW5jbHVkZSBgInRleHQvaHRtbDtwcm9maWxlPW1jcC1hcHAiYCBmb3IgTUNQIEFwcHMgc3VwcG9ydC4nKX0pO2Ioe21ldGhvZDptKCJ1aS9kb3dubG9hZC1maWxlIikscGFyYW1zOmIoe2NvbnRlbnRzOngoTyhbSWYseGZdKSkuZGVzY3JpYmUoIlJlc291cmNlIGNvbnRlbnRzIHRvIGRvd25sb2FkIOKAlCBlbWJlZGRlZCAoaW5saW5lIGRhdGEpIG9yIGxpbmtlZCAoaG9zdCBmZXRjaGVzKS4gVXNlcyBzdGFuZGFyZCBNQ1AgcmVzb3VyY2UgdHlwZXMuIil9KX0pO2Ioe21ldGhvZDptKCJ1aS9tZXNzYWdlIikscGFyYW1zOmIoe3JvbGU6bSgidXNlciIpLmRlc2NyaWJlKCdNZXNzYWdlIHJvbGUsIGN1cnJlbnRseSBvbmx5ICJ1c2VyIiBpcyBzdXBwb3J0ZWQuJyksY29udGVudDp4KGJvKS5kZXNjcmliZSgiTWVzc2FnZSBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpfSl9KTtiKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXJlc291cmNlLXJlYWR5IikscGFyYW1zOmIoe2h0bWw6aCgpLmRlc2NyaWJlKCJIVE1MIGNvbnRlbnQgdG8gbG9hZCBpbnRvIHRoZSBpbm5lciBpZnJhbWUuIiksc2FuZGJveDpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRoZSBpbm5lciBpZnJhbWUncyBzYW5kYm94IGF0dHJpYnV0ZS4iKSxjc3A6ZXUub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NQIGNvbmZpZ3VyYXRpb24gZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKSxwZXJtaXNzaW9uczp0dS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTYW5kYm94IHBlcm1pc3Npb25zIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIil9KX0pO3ZhciBSXz1iKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy90b29sLXJlc3VsdCIpLHBhcmFtczpscy5kZXNjcmliZSgiU3RhbmRhcmQgTUNQIHRvb2wgZXhlY3V0aW9uIHJlc3VsdC4iKX0pLFJmPWIoe3Rvb2xJbmZvOmIoe2lkOmxvLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkpTT04tUlBDIGlkIG9mIHRoZSB0b29scy9jYWxsIHJlcXVlc3QuIiksdG9vbDpYYy5kZXNjcmliZSgiVG9vbCBkZWZpbml0aW9uIGluY2x1ZGluZyBuYW1lLCBpbnB1dFNjaGVtYSwgZXRjLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWV0YWRhdGEgb2YgdGhlIHRvb2wgY2FsbCB0aGF0IGluc3RhbnRpYXRlZCB0aGlzIEFwcC4iKSx0aGVtZTp2Xy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDdXJyZW50IGNvbG9yIHRoZW1lIHByZWZlcmVuY2UuIiksc3R5bGVzOnhfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0eWxlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxkaXNwbGF5TW9kZTphbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3cgdGhlIFVJIGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOngoYW4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGhvc3Qgc3VwcG9ydHMuIiksY29udGFpbmVyRGltZW5zaW9uczpPKFtiKHtoZWlnaHQ6QygpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pLGIoe21heEhlaWdodDpPKFtDKCksJHQoKV0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1heGltdW0gY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KV0pLmFuZChPKFtiKHt3aWR0aDpDKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KSxiKHttYXhXaWR0aDpPKFtDKCksJHQoKV0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1heGltdW0gY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pXSkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYENvbnRhaW5lciBkaW1lbnNpb25zLiBSZXByZXNlbnRzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBpZnJhbWUgb3Igb3RoZXIKY29udGFpbmVyIGhvbGRpbmcgdGhlIGFwcC4gU3BlY2lmeSBlaXRoZXIgd2lkdGggb3IgbWF4V2lkdGgsIGFuZCBlaXRoZXIgaGVpZ2h0IG9yIG1heEhlaWdodC5gKSxsb2NhbGU6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyBsYW5ndWFnZSBhbmQgcmVnaW9uIHByZWZlcmVuY2UgaW4gQkNQIDQ3IGZvcm1hdC4iKSx0aW1lWm9uZTpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIHRpbWV6b25lIGluIElBTkEgZm9ybWF0LiIpLHVzZXJBZ2VudDpoKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhcHBsaWNhdGlvbiBpZGVudGlmaWVyLiIpLHBsYXRmb3JtOk8oW20oIndlYiIpLG0oImRlc2t0b3AiKSxtKCJtb2JpbGUiKV0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBsYXRmb3JtIHR5cGUgZm9yIHJlc3BvbnNpdmUgZGVzaWduIGRlY2lzaW9ucy4iKSxkZXZpY2VDYXBhYmlsaXRpZXM6Yih7dG91Y2g6QigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyB0b3VjaCBpbnB1dC4iKSxob3ZlcjpCKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIGhvdmVyIGludGVyYWN0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRldmljZSBpbnB1dCBjYXBhYmlsaXRpZXMuIiksc2FmZUFyZWFJbnNldHM6Yih7dG9wOkMoKS5kZXNjcmliZSgiVG9wIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIikscmlnaHQ6QygpLmRlc2NyaWJlKCJSaWdodCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLGJvdHRvbTpDKCkuZGVzY3JpYmUoIkJvdHRvbSBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLGxlZnQ6QygpLmRlc2NyaWJlKCJMZWZ0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNb2JpbGUgc2FmZSBhcmVhIGJvdW5kYXJpZXMgaW4gcGl4ZWxzLiIpfSkucGFzc3Rocm91Z2goKSxOXz1iKHttZXRob2Q6bSgidWkvbm90aWZpY2F0aW9ucy9ob3N0LWNvbnRleHQtY2hhbmdlZCIpLHBhcmFtczpSZi5kZXNjcmliZSgiUGFydGlhbCBjb250ZXh0IHVwZGF0ZSBjb250YWluaW5nIG9ubHkgY2hhbmdlZCBmaWVsZHMuIil9KTtiKHttZXRob2Q6bSgidWkvdXBkYXRlLW1vZGVsLWNvbnRleHQiKSxwYXJhbXM6Yih7Y29udGVudDp4KGJvKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZXh0IGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIiksc3RydWN0dXJlZENvbnRlbnQ6WihoKCksTCgpLmRlc2NyaWJlKCJTdHJ1Y3R1cmVkIGNvbnRlbnQgZm9yIG1hY2hpbmUtcmVhZGFibGUgY29udGV4dCBkYXRhLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHJ1Y3R1cmVkIGNvbnRlbnQgZm9yIG1hY2hpbmUtcmVhZGFibGUgY29udGV4dCBkYXRhLiIpfSl9KTtiKHttZXRob2Q6bSgidWkvaW5pdGlhbGl6ZSIpLHBhcmFtczpiKHthcHBJbmZvOmNzLmRlc2NyaWJlKCJBcHAgaWRlbnRpZmljYXRpb24gKG5hbWUgYW5kIHZlcnNpb24pLiIpLGFwcENhcGFiaWxpdGllczpFXy5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyB0aGlzIGFwcCBwcm92aWRlcy4iKSxwcm90b2NvbFZlcnNpb246aCgpLmRlc2NyaWJlKCJQcm90b2NvbCB2ZXJzaW9uIHRoaXMgYXBwIHN1cHBvcnRzLiIpfSl9KTt2YXIgWl89Yih7cHJvdG9jb2xWZXJzaW9uOmgoKS5kZXNjcmliZSgnTmVnb3RpYXRlZCBwcm90b2NvbCB2ZXJzaW9uIHN0cmluZyAoZS5nLiwgIjIwMjUtMTEtMjEiKS4nKSxob3N0SW5mbzpjcy5kZXNjcmliZSgiSG9zdCBhcHBsaWNhdGlvbiBpZGVudGlmaWNhdGlvbiBhbmQgdmVyc2lvbi4iKSxob3N0Q2FwYWJpbGl0aWVzOkNfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSBob3N0LiIpLGhvc3RDb250ZXh0OlJmLmRlc2NyaWJlKCJSaWNoIGNvbnRleHQgYWJvdXQgdGhlIGhvc3QgZW52aXJvbm1lbnQuIil9KS5wYXNzdGhyb3VnaCgpLGpfPXt0YXJnZXQ6ImRyYWZ0LTIwMjAtMTIifTthc3luYyBmdW5jdGlvbiBWdShlLHQpe2xldCBuPWVbIn5zdGFuZGFyZCJdO2lmKG4uanNvblNjaGVtYSlyZXR1cm4gbi5qc29uU2NoZW1hW3RdKGpfKTtpZihuLnZlbmRvcj09PSJ6b2QiKXtsZXR7ejpvfT1hd2FpdCBkbSgoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+enYpLHZvaWQgMCxpbXBvcnQubWV0YS51cmwpO3JldHVybiBvLnRvSlNPTlNjaGVtYShlLHtpbzp0fSl9dGhyb3cgRXJyb3IoYFNjaGVtYSAodmVuZG9yOiAke24udmVuZG9yfSkgZG9lcyBub3QgaW1wbGVtZW50IFN0YW5kYXJkIEpTT04gU2NoZW1hICh+c3RhbmRhcmQuanNvblNjaGVtYSkuIFVzZSBhIGxpYnJhcnkgdGhhdCBkb2VzICh6b2QgdjQsIEFya1R5cGUsIFZhbGlib3QpIG9yIHdyYXAgeW91ciBzY2hlbWEgYWNjb3JkaW5nbHkuYCl9YXN5bmMgZnVuY3Rpb24gSnUoZSx0LG49IiIpe2xldCBvPWF3YWl0IGVbIn5zdGFuZGFyZCJdLnZhbGlkYXRlKHQpO2lmKG8uaXNzdWVzKXtsZXQgcj1vLmlzc3Vlcy5tYXAocz0+e2xldCBhPXMucGF0aD8ubWFwKGk9PnR5cGVvZiBpPT0ib2JqZWN0Ij9pLmtleTppKS5qb2luKCIuIik7cmV0dXJuIGE/YCR7YX06ICR7cy5tZXNzYWdlfWA6cy5tZXNzYWdlfSkuam9pbigiOyAiKTt0aHJvdyBFcnJvcihuK3IpfXJldHVybiBvLnZhbHVlfWZ1bmN0aW9uIE1fKGUpe2xldCB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0LnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsZSksdC5zdHlsZS5jb2xvclNjaGVtZT1lfWZ1bmN0aW9uIHFfKGUsdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe2ZvcihsZXRbbixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKW8hPT12b2lkIDAmJnQuc3R5bGUuc2V0UHJvcGVydHkobixvKX1mdW5jdGlvbiBEXyhlKXtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiX19tY3AtaG9zdC1mb250cyIpKXJldHVybjtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3QuaWQ9Il9fbWNwLWhvc3QtZm9udHMiLHQudGV4dENvbnRlbnQ9ZSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpfWNsYXNzIG51IGV4dGVuZHMgZl97X2FwcEluZm87X2NhcGFiaWxpdGllcztvcHRpb25zO19ob3N0Q2FwYWJpbGl0aWVzO19ob3N0SW5mbztfaG9zdENvbnRleHQ7X3JlZ2lzdGVyZWRUb29scz17fTtfaW5pdGlhbGl6ZWRTZW50PSExO19hc3NlcnRJbml0aWFsaXplZCh0KXtpZih0aGlzLl9pbml0aWFsaXplZFNlbnQpcmV0dXJuO2xldCBuPWBbZXh0LWFwcHNdIEFwcC4ke3R9KCkgY2FsbGVkIGJlZm9yZSBjb25uZWN0KCkgY29tcGxldGVkIHRoZSB1aS9pbml0aWFsaXplIGhhbmRzaGFrZS4gQXdhaXQgYXBwLmNvbm5lY3QoKSBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCwgb3IgbW92ZSBkYXRhIGxvYWRpbmcgdG8gYW4gb250b29scmVzdWx0IGhhbmRsZXIuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4oYCR7bn0uIFRoaXMgd2lsbCB0aHJvdyBpbiBhIGZ1dHVyZSByZWxlYXNlLmApfWV2ZW50U2NoZW1hcz17dG9vbGlucHV0OlNfLHRvb2xpbnB1dHBhcnRpYWw6el8sdG9vbHJlc3VsdDpSXyx0b29sY2FuY2VsbGVkOlRfLGhvc3Rjb250ZXh0Y2hhbmdlZDpOX307c3RhdGljIE9ORV9TSE9UX0VWRU5UUz1uZXcgU2V0KFsidG9vbGlucHV0IiwidG9vbGlucHV0cGFydGlhbCIsInRvb2xyZXN1bHQiLCJ0b29sY2FuY2VsbGVkIl0pO19ldmVySGFkTGlzdGVuZXI9bmV3IFNldDtfYXNzZXJ0SGFuZGxlclRpbWluZyh0KXtpZighbnUuT05FX1NIT1RfRVZFTlRTLmhhcyh0KXx8dGhpcy5fZXZlckhhZExpc3RlbmVyLmhhcyh0KXx8KHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5hZGQodCksIXRoaXMuX2luaXRpYWxpemVkU2VudCkpcmV0dXJuO2xldCBuPWBbZXh0LWFwcHNdICIke1N0cmluZyh0KX0iIGhhbmRsZXIgcmVnaXN0ZXJlZCBhZnRlciBjb25uZWN0KCkgY29tcGxldGVkIHRoZSB1aS9pbml0aWFsaXplIGhhbmRzaGFrZS4gVGhlIGhvc3QgbWF5IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgbm90aWZpY2F0aW9uLiBSZWdpc3RlciBoYW5kbGVycyBiZWZvcmUgY2FsbGluZyBhcHAuY29ubmVjdCgpLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKG4pfXNldEV2ZW50SGFuZGxlcih0LG4pe24mJnRoaXMuX2Fzc2VydEhhbmRsZXJUaW1pbmcodCksc3VwZXIuc2V0RXZlbnRIYW5kbGVyKHQsbil9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Fzc2VydEhhbmRsZXJUaW1pbmcodCksc3VwZXIuYWRkRXZlbnRMaXN0ZW5lcih0LG4pfW9uRXZlbnREaXNwYXRjaCh0LG4pe3Q9PT0iaG9zdGNvbnRleHRjaGFuZ2VkIiYmKHRoaXMuX2hvc3RDb250ZXh0PXsuLi50aGlzLl9ob3N0Q29udGV4dCwuLi5ufSl9Y29uc3RydWN0b3IodCxuPXt9LG89e2F1dG9SZXNpemU6ITB9KXtzdXBlcihvKSx0aGlzLl9hcHBJbmZvPXQsdGhpcy5fY2FwYWJpbGl0aWVzPW4sdGhpcy5vcHRpb25zPW8sby5hbGxvd1Vuc2FmZUV2YWx8fG9lKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcih1cyxyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1oXyh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxhPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsaT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUobCl7T2JqZWN0LmFzc2lnbih0aGlzLGwpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09aSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhsLHUpPT57aWYoIWkuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGQ7aWYoYSl7bGV0IGY9aS5pbnB1dFNjaGVtYSxnPWY/YXdhaXQgSnUoZixsPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpsPz97fTtkPWF3YWl0IG8oZyx1KX1lbHNlIGQ9YXdhaXQgbyh1KTtyZXR1cm4gaS5vdXRwdXRTY2hlbWEmJiFkLmlzRXJyb3ImJihkLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IEp1KGkub3V0cHV0U2NoZW1hLGQuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxkfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1pLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksaX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IFZ1KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IFZ1KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihQXywobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoQ2YsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihQZiwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LGxzLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LFRmLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSx6ZixuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9PZjpBZjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sd18sbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sTWMsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LGtfLG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSwkXyxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LEFfLG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPWEuc3R5bGUuaGVpZ2h0O2Euc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGw9TWF0aC5jZWlsKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTthLnN0eWxlLmhlaWdodD1pO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxsIT09bykmJihuPXUsbz1sLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpsfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgYl8od2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjptX319LFpfLG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgS3U9IiI7Y29uc3QgTmY9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PUt1JiYodC5hcHBseUhvc3RGb250cyhyKSxLdT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgYSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGk9TnVtYmVyKHNbYV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHthfWAsYCR7TnVtYmVyLmlzRmluaXRlKGkpJiZpPjA/aTowfXB4YCl9fSxaZj1lPT5lLnJlcGxhY2UoL1smPD4iJ10vZyx0PT4oeyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9KVt0XSksTF89Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEwIDMuNSA1LjUgOCAxMCAxMi41IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPicsQl89Jzxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTYgMy41IDEwLjUgOCA2IDEyLjUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+JyxVXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMy41IDYgOCAxMC41IDEyLjUgNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4nLEhfPSc8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik05LjUgMi41aDR2NE02LjUgMTMuNWgtNHYtNE0xMy41IDIuNSA5IDdNMi41IDEzLjUgNyA5IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPicsRl89ZT0+e2NvbnN0IHQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGUudG90YWwpKSxuPU1hdGgubWF4KDAsTWF0aC5mbG9vcihlLmZyb20pKSxvPU1hdGgubWF4KDAsTWF0aC5mbG9vcihlLmNvdW50KSkscj1uPjAscz1uK288dDtpZighciYmIXMpcmV0dXJuIiI7Y29uc3QgYT1lLm5vdW4/YCAke1pmKGUubm91bil9YDoiIixpPW8/YCR7bisxfeKAkyR7bitvfSBvZiAke3R9YDpgMCBvZiAke3R9YDtyZXR1cm5gPG5hdiBjbGFzcz0iY2stcGFnZXIiIGFyaWEtbGFiZWw9IlBhZ2VzIj48YnV0dG9uIGNsYXNzPSJjay1wYWdlci1idG4iIHR5cGU9ImJ1dHRvbiIgJHtlLnByZXZ9JHtyPyIiOiIgZGlzYWJsZWQifSBhcmlhLWxhYmVsPSJQcmV2aW91cyR7YX0iPiR7TF99PHNwYW4+UHJldmlvdXM8L3NwYW4+PC9idXR0b24+PHNwYW4gY2xhc3M9ImNrLXBhZ2VyLW4iPiR7aX08L3NwYW4+PGJ1dHRvbiBjbGFzcz0iY2stcGFnZXItYnRuIiB0eXBlPSJidXR0b24iICR7ZS5uZXh0fSR7cz8iIjoiIGRpc2FibGVkIn0gYXJpYS1sYWJlbD0iTmV4dCR7YX0iPjxzcGFuPk5leHQ8L3NwYW4+JHtCX308L2J1dHRvbj48L25hdj4ke2UuYWxsP2A8YnV0dG9uIGNsYXNzPSJjay1wYWdlci1hbGwiIHR5cGU9ImJ1dHRvbiIgJHtlLmFsbH0+PHNwYW4+VmlldyBhbGwgJHt0fTwvc3Bhbj4ke0hffTwvYnV0dG9uPmA6IiJ9YH0sVl89KGUsdCk9PmA8YnV0dG9uIGNsYXNzPSJjay1wYWdlci1hbGwiIHR5cGU9ImJ1dHRvbiIgJHt0fT48c3BhbiBkYXRhLWxhYmVsPiR7WmYoZSl9PC9zcGFuPiR7VV99PC9idXR0b24+YCxBZT1uZXcgbnUoe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6WyJpbmxpbmUiLCJmdWxsc2NyZWVuIl19KSxqZj17YXBwbHlEb2N1bWVudFRoZW1lOk1fLGFwcGx5SG9zdFN0eWxlVmFyaWFibGVzOnFfLGFwcGx5SG9zdEZvbnRzOkRffSxwZT1lPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxjPWU9PlN0cmluZyhlPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLHQ9PnQ9PT0iJiI/IiZhbXA7Ijp0PT09IjwiPyImbHQ7Ijp0PT09Ij4iPyImZ3Q7Ijp0PT09JyInPyImcXVvdDsiOiImIzM5OyIpO2xldCBidD0iIixrcz0iIixNZj0iIixqcz0iIixvdT17fSxydT0hMSxxZj0iIixUPXtjaGVja0luOiIiLGNoZWNrT3V0OiIiLGd1ZXN0czoyfSxZPTE7Y29uc3QgV3U9NTtsZXQgWD1udWxsLFR0PVtdLEJlPSIiLGhlPVtdLE09bnVsbCxNbz0wO2NvbnN0IEpfPW5ldyBTZXQoWyJmb3JnZXRQcmVmZXJlbmNlcyIsImFkZFRvVHJpcCIsImNsZWFyVHJpcCIsInJlcXVlc3RCb29raW5nIiwiY2FuY2VsQm9va2luZyIsImNoYW5nZUJvb2tpbmciLCJzaWduSW4iLCJzaWduT3V0Il0pLGNuPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/YGhvdGVsOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gZXh0cmFzOmJvb2tpbmc6JHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmBleHRyYXM6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMifHx0PT09InBvbGljeS1taXNzaW5nIj9gcG9saWN5OiR7ZS5ob3RlbD8uaWQ/PyIifToke2UudG9waWM/PyIifWA6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/YGNhbmNlbDoke2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImNoYW5nZS1wcmV2aWV3Ij9gY2hhbmdlOiR7ZS5jb25maXJtYXRpb25Db2RlPz9lLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJkZXN0aW5hdGlvbnMiP2BkZXN0aW5hdGlvbnM6JHtlLnNjb3BlPy5uYW1lPz8iIn1gOnQ9PT0iaG90ZWxzInx8dD09PSJuby1ob3RlbHMiP2Bob3RlbHM6JHtlLmFzaz8uY2l0eT8/IiJ9OiR7ZS5hc2s/LnF1ZXJ5Pz9lLnF1ZXJ5Pz8iIn1gOnR9LFRvPWU9PnshTXx8V18uaGFzKFN0cmluZyhNLnZpZXcpKXx8Y24oZSkhPT1jbihNKSYmKGhlPVsuLi5oZSx7cGF5bG9hZDpNLGxhYmVsOkdfKE0pLHZlcnNpb246TW99XS5zbGljZSgtNikpfSxLXz1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpLG49ZT8uc3RheT8uY2hlY2tJbj97Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9Ont9O2lmKHQ9PT0idHJpcCIpcmV0dXJue2tleToidmlld1RyaXAiLGFyZ3M6e319O2lmKHQ9PT0iYm9va2luZ3MiKXJldHVybntrZXk6Imxpc3RCb29raW5ncyIsYXJnczp7fX07aWYoKHQ9PT0iaG90ZWxzInx8dD09PSJkZXN0aW5hdGlvbnMifHx0PT09Im5vLWhvdGVscyImJmUuYXNrKSYmZS5hc2spcmV0dXJue2tleToibGlzdEhvdGVscyIsYXJnczp7Li4uZS5hc2t9fTtpZih0PT09ImNvbXBhcmlzb24iJiZBcnJheS5pc0FycmF5KGUuY29sdW1ucykpcmV0dXJue2tleToiY29tcGFyZSIsYXJnczp7Li4ubiwuLi5lLnRpdGxlP3t0aXRsZTplLnRpdGxlfTp7fSwuLi5lLnJlY29tbWVuZGVkP3tyZWNvbW1lbmRlZDplLnJlY29tbWVuZGVkfTp7fSxlbnRyaWVzOmUuY29sdW1ucy5tYXAobz0+KHtob3RlbDpvLmhvdGVsPy5pZCwuLi5vLmJlc3RGb3I/e2Jlc3RGb3I6by5iZXN0Rm9yfTp7fSwuLi5vLnByb3M/Lmxlbmd0aD97cHJvczpvLnByb3N9Ont9LC4uLm8uY29ucz8ubGVuZ3RoP3tjb25zOm8uY29uc306e319KSl9fTtpZigodD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToiZ2V0SG90ZWwiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubiwuLi5lLnJvb21zX3dhbnRlZD97cm9vbXM6ZS5yb29tc193YW50ZWR9Ont9fX07aWYodD09PSJleHRyYXMiJiZlLmZvckJvb2tpbmcpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczpmdChTdHJpbmcoZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGUpKX07aWYodD09PSJleHRyYXMiJiZlLmhvdGVsPy5pZClyZXR1cm57a2V5OiJsaXN0RXh0cmFzIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm59fTtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJue2tleToiaXRpbmVyYXJ5IixhcmdzOnt0aXRsZTplLnRpdGxlLC4uLm4sZGF5czooZS5kYXlzPz9bXSkubWFwKG89Pih7bGFiZWw6by5sYWJlbCwuLi5vLm5vdGU/e25vdGU6by5ub3RlfTp7fSxpdGVtczooby5pdGVtcz8/W10pLm1hcChyPT5yLmlkKX0pKX19fSxHdT1lPT57aGU9aGUuZmlsdGVyKHQ9PiFlLmluY2x1ZGVzKFN0cmluZyh0LnBheWxvYWQ/LnZpZXcpKSl9LFdfPW5ldyBTZXQoWyJmaW5kLWJvb2tpbmciLCJib29raW5nIiwiY2FuY2VsbGVkIiwiY2hhbmdlZCIsImVycm9yIiwibmVlZHMtZ3Vlc3QiLCJzaWduZWQtb3V0IiwibWVtYmVyLXNpZ24taW4iLCJtZW1iZXItbm90LWZvdW5kIl0pLEdfPWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJkZXN0aW5hdGlvbnMiKXJldHVybiBlLnNjb3BlPy5uYW1lP1N0cmluZyhlLnNjb3BlLm5hbWUpOiJhbGwgZGVzdGluYXRpb25zIjtpZih0PT09ImhvdGVscyIpe2lmKGUuYXNrPy5jaXR5KXJldHVybiBTdHJpbmcoZS5hc2suY2l0eSk7Y29uc3Qgbj1bLi4ubmV3IFNldCgoZS5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8uY2l0eSkpKV07cmV0dXJuIG4ubGVuZ3RoPT09MT9TdHJpbmcoblswXSk6YCR7ZS50b3RhbD8/MH0gaG90ZWxzYH1yZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciPyJ0aGUgY2FuY2VsbGF0aW9uIjp0PT09ImNoYW5nZS1wcmV2aWV3Ij8idGhlIGNoYW5nZSI6dD09PSJtZW1iZXIiPyJ5b3VyIG1lbWJlcnNoaXAiOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGFkZC1vbnMgZm9yICR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSxEZj0oKT0+e2NvbnN0IGU9cGUoImJhY2tidG4iKSx0PWhlLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IHRuPSIiLE1zPSIiLHVuPTAsc3U9ITE7Y29uc3QgTGY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihNcz10LnRyaXBJZCksdW49TnVtYmVyKHQuY291bnQ/PzApLEFycmF5LmlzQXJyYXkodC5saW5lcykmJihUdD10LmxpbmVzLHN1PSEwKSl9LFFfPWU9Pk1zP3suLi5lLHRyaXA6TXN9OmUsQmY9bmV3IE1hcCxZXz1lPT57Y29uc3QgdD1bZT8uYm9va2luZywuLi5BcnJheS5pc0FycmF5KGU/LmJvb2tpbmdzKT9lLmJvb2tpbmdzOltdXTtmb3IoY29uc3QgbiBvZiB0KW4/LmNvbmZpcm1hdGlvbkNvZGUmJm4/Lmd1ZXN0Py5lbWFpbCYmQmYuc2V0KFN0cmluZyhuLmNvbmZpcm1hdGlvbkNvZGUpLnRvVXBwZXJDYXNlKCksU3RyaW5nKG4uZ3Vlc3QuZW1haWwpKX0sZnQ9ZT0+e2NvbnN0IHQ9QmYuZ2V0KGUudG9VcHBlckNhc2UoKSk7cmV0dXJuIHQ/e2Jvb2tpbmc6ZSxlbWFpbDp0fTp7Ym9va2luZzplfX0sWF89ZT0+b3VbZV0/PyIiLGRzPWU9PiEhb3VbZV0sZWs9ZHM7bGV0IFVmPSJob2xkIixIZj0hMSxGZj0hMSxFZT1udWxsLFVlPSIiO2NvbnN0IGN0PWU9PkVlJiZlP0VlLnN1cHBsaWVycy5maW5kKHQ9PnQuaWQ9PT1lKTp2b2lkIDAsSGU9ZT0+e2NvbnN0IHQ9Y3QoZSk7aWYoIXQpcmV0dXJue25hbWU6YnQsYm9va2luZ01vZGU6VWYsZGVtbzpydSxzYW5kYm94OkhmLHBob25lUmVxdWlyZWQ6RmYsZXh0cmFzOiEwLGNoYW5nZXM6ITB9O2NvbnN0IG49dC5jYXBhYmlsaXRpZXM/P3t9O3JldHVybntuYW1lOlN0cmluZyh0Lm5hbWUpLGJvb2tpbmdNb2RlOm4uYm9va2luZz09PSJwYXktYXQtaG90ZWwiPyJwYXktYXQtaG90ZWwiOiJob2xkIixkZW1vOnQubW9kZSE9PSJsaXZlIixzYW5kYm94OnQubW9kZT09PSJzYW5kYm94IixwaG9uZVJlcXVpcmVkOiEhbi5yZXF1aXJlc1Bob25lLGV4dHJhczpuLmV4dHJhcyE9PSExLGNoYW5nZXM6bi5jaGFuZ2VzIT09ITF9fSxxbz1lPT57Y29uc3QgdD1lPy5icmFuZD9TdHJpbmcoZS5icmFuZCk6IiIsbj1jdChlPy5zdXBwbGllcik7aWYoIW4pcmV0dXJuIHQ7Y29uc3Qgbz1TdHJpbmcobi5uYW1lKTtyZXR1cm4gdCYmdCE9PW8/YCR7b30gwrcgJHt0fWA6b30sUXU9KCk9PihFZT9FZS5zdXBwbGllcnMubWFwKGU9PmUuY2FwYWJpbGl0aWVzPy5jb2RlUHJlZml4KS5maWx0ZXIoQm9vbGVhbik6anM/W2pzXTpbXSkubWFwKGU9PmAke2V9LeKApmApLmpvaW4oIiBvciAiKSxpdT1lPT5FZT9bLi4ubmV3IFNldChlLm1hcCh0PT5TdHJpbmcodC5zdXBwbGllcj8/IiIpKS5maWx0ZXIoQm9vbGVhbikpXTpbXTtsZXQgS3Q9ITE7Y29uc3QgWXU9ZT0+e0t0PWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9O2xldCBEbz0wLFZmPSIiLEpmPSIiO2NvbnN0IHR0PSgpPT57Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaGVhZCIpO2lmKCFlKXJldHVybjtjb25zdCB0PSgpPT5lLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pO3QoKSxzZXRUaW1lb3V0KHQsMTgwKX0scT0oZSx0PXt9LG49e30pPT57Y29uc3Qgbz1YXyhlKTtpZighbylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBubyB0b29sIGZvciAke2V9YCkpO2lmKEt0KXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7WXUoITApO2NvbnN0IHI9RG87cmV0dXJuIEFlLmNhbGxTZXJ2ZXJUb29sKHtuYW1lOm8sYXJndW1lbnRzOlFfKHQpfSkuZmluYWxseSgoKT0+WXUoITEpKS50aGVuKHM9PntMZihzPy5fbWV0YSk7Y29uc3QgYT1zPy5zdHJ1Y3R1cmVkQ29udGVudCxpPWEmJm4uZm9sZD9uLmZvbGQoYSk6YSxsPUpfLmhhcyhlKSYmaSYmaS52aWV3IT09ImVycm9yIjtpZihyPT09RG8mJmkpe1ZmPWE/SlNPTi5zdHJpbmdpZnkoYSk6IiIsSmY9SlNPTi5zdHJpbmdpZnkoaSk7Y29uc3QgdT1jbihpKSE9PWNuKE0pO24ucHVzaCE9PSExJiZUbyhpKSxsJiYoTW8rPTEpLGkudmlldz09PSJib29raW5nIiYmKEd1KFsidHJpcCIsIm5lZWRzLWRhdGVzIiwibmVlZHMtZ3Vlc3QiXSkseGU9bnVsbCksKGkudmlldz09PSJjYW5jZWxsZWQifHxpLnZpZXc9PT0iY2hhbmdlZCIpJiZHdShbImNhbmNlbGxhdGlvbi1wcmV2aWV3IiwiY2hhbmdlLXByZXZpZXciXSksa2UoaSksdSYmdHQoKX1lbHNlIGwmJihNbys9MSk7cmV0dXJuIHRrKHMsbi5ub3RlKSxzfSl9LHRrPShlLHQpPT57Y29uc3Qgbj0oZT8uY29udGVudD8/W10pLmZpbmQobz0+bz8udHlwZT09PSJ0ZXh0Iik/LnRleHQ7IW58fCFBZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/LnVwZGF0ZU1vZGVsQ29udGV4dHx8QWUudXBkYXRlTW9kZWxDb250ZXh0KHtjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDp0P2Ake3R9ICR7U3RyaW5nKG4pfWA6U3RyaW5nKG4pfV19KS5jYXRjaCgoKT0+e30pfTtsZXQgcHM9ITE7Y29uc3Qgbms9IihUaGUgY2FyZCBwcmljZWQgaXRzIG93biBkZWZhdWx0IGRhdGVzLCB0b25pZ2h0LCB0byBzaG93IHRoZSByb29tczsgdGhlIGd1ZXN0IGhhcyBub3QgY2hvc2VuIHRoZW0uKSIsV3Q9ZT0+e2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0xKXQ9KHQqMzErZS5jaGFyQ29kZUF0KG4pKSUzNjA7cmV0dXJuYC0tc2hvdC1hOmhzbCgke3R9IDQyJSAzNCUpOy0tc2hvdC1iOmhzbCgkeyh0KzM4KSUzNjB9IDQ2JSAyMiUpYH0sR3Q9ZT0+ZS5yZXBsYWNlKC9bXlxwe0x9XHB7Tn0gXS9ndSwiICIpLnNwbGl0KC9ccysvKS5maWx0ZXIoQm9vbGVhbikuc2xpY2UoMCwyKS5tYXAodD0+dFswXT8udG9VcHBlckNhc2UoKT8/IiIpLmpvaW4oIiIpLG9rPSc8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiBmaWxsPSJjdXJyZW50Q29sb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTIgMy41bDIuNiA1LjMgNS45LjktNC4zIDQuMSAxIDUuOEwxMiAxNi45IDYuOCAxOS42bDEtNS44TDMuNSA5LjdsNS45LS45eiIvPjwvc3ZnPicscms9ZT0+ZSYmdHlwZW9mIGUudmFsdWU9PSJudW1iZXIiP2A8c3BhbiBjbGFzcz0icmF0ZSI+JHtva30ke2MoZS52YWx1ZSl9PHNwYW4gY2xhc3M9InQtZnJvbSI+PHNtYWxsPiDCtyAke2MoZS5jb3VudCl9PC9zbWFsbD48L3NwYW4+PC9zcGFuPmA6IiIsZWU9KCk9PnJ1P2A8ZGl2IGNsYXNzPSJkZW1vIj48Yj5EZW1vPC9iPjxzcGFuPiR7YyhxZnx8IkRlbW9uc3RyYXRpb24gZGF0YTogdGhlc2UgcmF0ZXMgYW5kIHJvb20gY291bnRzIHdlcmUgbWFkZSB1cCBmb3IgdGhpcyBkZW1vLiIpfTwvc3Bhbj48L2Rpdj5gOiIiLGxuPWU9Pntjb25zdCB0PW5ldyBEYXRlKGAke2V9VDEyOjAwOjAwWmApO3JldHVybiBOdW1iZXIuaXNOYU4odC5nZXRUaW1lKCkpP2U6dC50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7d2Vla2RheToic2hvcnQiLGRheToibnVtZXJpYyIsbW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pfSxxcz0oZSx0KT0+TWF0aC5yb3VuZCgoRGF0ZS5wYXJzZShgJHt0fVQxMjowMDowMFpgKS1EYXRlLnBhcnNlKGAke2V9VDEyOjAwOjAwWmApKS84NjRlNSksWWU9ZT0+ZT8uY2hlY2tJbiYmZT8uY2hlY2tPdXQ/YCR7bG4oZS5jaGVja0luKX0g4oCTICR7bG4oZS5jaGVja091dCl9IMK3ICR7cXMoZS5jaGVja0luLGUuY2hlY2tPdXQpfSAke3FzKGUuY2hlY2tJbixlLmNoZWNrT3V0KT09PTE/Im5pZ2h0IjoibmlnaHRzIn1gOiIiLHNrPShlLHQsbik9Pntjb25zdCBvPVR0LmZpbmQocj0+ci5raW5kPT09InJvb20iJiZyLmhvdGVsSWQ9PT1lJiZyLnJvb21SZWY9PT10JiZyLnN0YXk/LmNoZWNrSW49PT1uPy5jaGVja0luJiZyLnN0YXk/LmNoZWNrT3V0PT09bj8uY2hlY2tPdXQpO3JldHVybiBOdW1iZXIobz8ucXVhbnRpdHk/PzApfSxpaz0oZSx0KT0+e2NvbnN0IG49VHQuZmluZChvPT5vLmtpbmQ9PT0iZXh0cmEiJiZvLmhvdGVsSWQ9PT1lJiZvLmV4dHJhUmVmPT09dCk7cmV0dXJuIE51bWJlcihuPy5xdWFudGl0eT8/MCl9LExvPShlLHQsbixvPTEpPT50PjA/YDxzcGFuIGNsYXNzPSJzdGVwIj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QtMX0iIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciAke2Mobil9Ij7iiJI8L2J1dHRvbj4KICAgICAgICAgPHNwYW4gY2xhc3M9Im4iPiR7dH08L3NwYW4+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0KzF9IiBhcmlhLWxhYmVsPSJPbmUgbW9yZSAke2Mobil9Ij4rPC9idXR0b24+CiAgICAgICA8L3NwYW4+YDpgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJhZGQiICR7ZX0gZGF0YS1uPSIke299IiBhcmlhLWxhYmVsPSJBZGQgJHtjKG4pfSI+CiAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIuNCIKICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTIgNXYxNE01IDEyaDE0Ii8+PC9zdmc+CiAgICAgICA8L2J1dHRvbj5gLEtmPShlLHQpPT57Y29uc3Qgbj10fHxXZigpO3JldHVybighVC5jaGVja0lufHxULmNoZWNrSW48bikmJihULmNoZWNrSW49biksKCFULmNoZWNrT3V0fHxULmNoZWNrT3V0PD1ULmNoZWNrSW4pJiYoVC5jaGVja091dD1XZShULmNoZWNrSW4sMSkpLGAKICA8ZGl2IGNsYXNzPSJzdGF5Ij4KICAgIDxsYWJlbD5DaGVjay1pbjxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY2kiIHZhbHVlPSIke2MoVC5jaGVja0luKX0iIG1pbj0iJHtjKG4pfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNvIiB2YWx1ZT0iJHtjKFQuY2hlY2tPdXQpfSIgbWluPSIke2MoV2UoVC5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICA8ZGl2IGNsYXNzPSJndWVzdHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJSb29tcyI+Um9vbXMKICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9Im4iIGlkPSJybiI+JHtjKFkpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvZGl2PgogICAgPHNwYW4gY2xhc3M9Im5pZ2h0cyIgaWQ9Im5pZ2h0cyI+JHtjKGhzKCkpfTwvc3Bhbj4KICA8L2Rpdj5gfSxocz0oKT0+e2NvbnN0IGU9VC5jaGVja0luJiZULmNoZWNrT3V0P3FzKFQuY2hlY2tJbixULmNoZWNrT3V0KTowLHQ9ZT4wP2Ake2V9ICR7ZT09PTE/Im5pZ2h0IjoibmlnaHRzIn1gOiIiLG49WT4xP2Ake1l9IHJvb21zYDoiIjtyZXR1cm5bdCxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpfSxXZT0oZSx0KT0+bmV3IERhdGUoRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSt0Kjg2NGU1KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLFdmPSgpPT5uZXcgRGF0ZShEYXRlLm5vdygpLW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSo2ZTQpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksR2Y9ZT0+e2NvbnN0IHQ9Wy4uLmU/LnRvZGF5P1tlLnRvZGF5Lm1pbixlLnRvZGF5Lm1heF06W10sLi4uKGU/LmhvdGVscz8/W10pLm1hcChvPT5TdHJpbmcoby50b2RheVRoZXJlPz8iIikpXS5maWx0ZXIobz0+L15cZHs0fS1cZHsyfS1cZHsyfSQvLnRlc3QobykpLnNvcnQoKSxuPVdmKCk7cmV0dXJue21pbjpbdFswXT8/bixuXS5zb3J0KClbMF0/P24sc3RhcnQ6dC5hdCgtMSk/P259fSxhaz1lPT57Y29uc3R7bWluOnQsc3RhcnQ6bn09R2YoZSk7KCFULmNoZWNrSW58fFQuY2hlY2tJbjx0KSYmKFQuY2hlY2tJbj1uKSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PVdlKFQuY2hlY2tJbiwxKSk7Y29uc3Qgbz1gPGRpdiBjbGFzcz0ic3RheSI+CiAgICAgICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJkY2kiIHZhbHVlPSIke2MoVC5jaGVja0luKX0iIG1pbj0iJHtjKHQpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJkY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhXZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJndWVzdHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJSb29tcyI+Um9vbXMKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im4iIGlkPSJybiI+JHtjKFkpfTwvc3Bhbj4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgICR7ZS5zY29wZT8iIjonPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQiPlNlYXJjaDwvYnV0dG9uPid9CiAgICAgIDwvZGl2PmAscj1gPGRpdiBjbGFzcz0ic2VhcmNoIj4KICAgICAgPGxhYmVsIGNsYXNzPSJ3aGVyZSI+V2hlcmUgdG88aW5wdXQgaWQ9IndoZXJlIiB0eXBlPSJzZWFyY2giIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbCIgYXJpYS1sYWJlbD0iV2hlcmUgdG8iPjwvbGFiZWw+CiAgICAgICR7b30KICAgIDwvZGl2PmAscz11PT5gPGRpdiBjbGFzcz0icGxhY2VzIj4ke3UubWFwKChkLGYpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2MoZC5uYW1lKX0iJHtmPj1udD8iIGhpZGRlbiI6IiJ9PiR7YyhkLm5hbWUpfSA8c21hbGw+JHtjKGQuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9JHt1Lmxlbmd0aD5udD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1wbGFjZXMiPiske3UubGVuZ3RoLW50fSBtb3JlPC9idXR0b24+YDoiIn08L2Rpdj5gLGE9ZS5zY29wZTtpZihhKXJldHVybltlZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGEubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKGUudG90YWwpfSAke2MoZS52b2NhYj8ubm91blBsdXJhbD8/ImhvdGVscyIpfSBpbiAke2MoKGEuY2l0aWVzPz9bXSkubGVuZ3RoKX0gY2l0aWVzPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0ic2VhcmNoIj4ke299PC9kaXY+YCxzKGEuY2l0aWVzPz9bXSksYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2UtYWxsPSIke2MoYS5uYW1lKX0iPkFsbCAke2MoZS50b3RhbCl9IGluICR7YyhhLm5hbWUpfTwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IGk9ZS5yZWdpb25zPz9bXSxsPWkuZmxhdE1hcCh1PT51LmNvdW50cmllcz8/W10pLmZsYXRNYXAodT0+dS5jaXRpZXM/P1tdKS5tYXAoKHUsZCk9Pih7Yzp1LGk6ZH0pKS5zb3J0KCh1LGQpPT5OdW1iZXIoZC5jLmNvdW50KS1OdW1iZXIodS5jLmNvdW50KXx8dS5pLWQuaSkuc2xpY2UoMCxudCkubWFwKCh7Yzp1fSk9PnUpO3JldHVybltlZSgpLHIsRWUmJkVlLnN1cHBsaWVycy5sZW5ndGg+MT9gPGRpdiBjbGFzcz0icmVnaW9uIj48ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+SG90ZWwgZ3JvdXBzPC9kaXY+PGRpdiBjbGFzcz0icGxhY2VzIGdyb3VwcyI+JHtFZS5zdXBwbGllcnMubWFwKHU9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIGdyb3VwIiB0eXBlPSJidXR0b24iIGRhdGEtZ3JvdXAtaG9tZT0iJHtjKHUuaWQpfSI+JHt1LmxvZ29Vcmw/YDxpbWcgc3JjPSIke2ModS5sb2dvVXJsKX0iIGFsdD0iIj5gOiIifSR7Yyh1Lm5hbWUpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PjwvZGl2PmA6IiIsbC5sZW5ndGg/YDxkaXYgY2xhc3M9InJlZ2lvbiI+PGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPlRvcCBjaXRpZXM8L2Rpdj4ke3MobCl9PC9kaXY+YDoiIixpLmxlbmd0aD9gPGRpdiBjbGFzcz0icmVnaW9uIj48ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+QnkgcmVnaW9uPC9kaXY+PGRpdiBjbGFzcz0icGxhY2VzIj4ke2kubWFwKCh1LGQpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSB0YWIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1yZWdpb249IiR7ZH0iIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIj4ke2ModS5uYW1lKX0gPHNtYWxsPiR7Yyh1LmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PjwvZGl2PmA6IiIsLi4uaS5tYXAoKHUsZCk9PmAKICAgICAgPGRpdiBjbGFzcz0icmVnaW9uIiBkYXRhLXJlZ2lvbi1ib2R5PSIke2R9IiBoaWRkZW4+CiAgICAgICAgJHsodS5jb3VudHJpZXM/P1tdKS5tYXAoKGYsZyk9Pntjb25zdCB2PWYuY2l0aWVzPz9bXSxfPXYubGVuZ3RoPT09MT92WzBdOnZvaWQgMDtyZXR1cm5gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXN0IiR7Zz49JHM/IiBoaWRkZW4iOiIifT4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVzdC1jb3VudHJ5IiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhmLm5hbWUpfSI+JHtjKGYubmFtZSl9JHtfJiZfLm5hbWUhPT1mLm5hbWU/YDxzbWFsbD4gwrcgJHtjKF8ubmFtZSl9PC9zbWFsbD5gOiIifSA8c21hbGwgY2xhc3M9Im4iPiR7YyhmLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPgogICAgICAgICAgICAke3YubGVuZ3RoPjE/cyh2KToiIn0KICAgICAgICAgIDwvZGl2PmB9KS5qb2luKCIiKX0KICAgICAgICAkeyh1LmNvdW50cmllcz8/W10pLmxlbmd0aD4kcz9gPGRpdiBjbGFzcz0icGxhY2VzIj48YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLWNvdW50cmllcyI+KyR7KHUuY291bnRyaWVzPz9bXSkubGVuZ3RoLSRzfSBtb3JlIGNvdW50cmllczwvYnV0dG9uPjwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PmApLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhbGwtaG90ZWxzIj5Ccm93c2UgYWxsICR7YyhlLnRvdGFsKX08L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kLWJvb2tpbmciPkZpbmQgYSBib29raW5nPC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LG50PTgsJHM9NixRZj1lPT57Y29uc3QgdD1lLmZvclN0YXk7cmV0dXJuIHQ/YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7Yyh0LnRvdGFsKX08c21hbGwgY2xhc3M9InQtc3ViIj4ke051bWJlcih0LnJvb21zKT4xP2Ake2ModC5yb29tcyl9IHJvb21zIMOXIGA6IiJ9JHtjKHQubmlnaHRzKX0gJHtOdW1iZXIodC5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifSDCtyB0YXhlcyBpbjwvc21hbGw+PC9zcGFuPmA6ZS5ub1Jvb21zRm9yU3RheT9gPHNwYW4gY2xhc3M9InQtZnJvbSB0LW5vbmUiPiR7L3NsZWVwcy8udGVzdChTdHJpbmcoZS5ub1Jvb21zRm9yU3RheSkpP2BObyByb29tIHNsZWVwcyAke2MoVC5ndWVzdHMpfWA6Ik5vIHJvb20gZm9yIHRoZXNlIGRhdGVzIn08L3NwYW4+YDpgPHNwYW4gY2xhc3M9InQtZnJvbSI+JHtlLmZyb21OaWdodGx5P2Ake2MoZS5mcm9tTmlnaHRseSl9PHNtYWxsPiAvIG5pZ2h0PC9zbWFsbD5gOiIifTwvc3Bhbj5gfSxjaz1lPT57Y29uc3QgdD1lLmZvclN0YXk7aWYoIXQpcmV0dXJuIiI7Y29uc3Qgbj1bdC5mcmVlQ2FuY2VsbGF0aW9uPyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb248L3NwYW4+JzoiIixOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7Yyh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIl0uZmlsdGVyKEJvb2xlYW4pO3JldHVybiBuLmxlbmd0aD9gPHNwYW4gY2xhc3M9InQtdGFncyI+JHtuLmpvaW4oIiIpfTwvc3Bhbj5gOiIifSxndD0oKT0+VC5jaGVja0luJiZULmNoZWNrT3V0P3tjaGVja0luOlQuY2hlY2tJbixjaGVja091dDpULmNoZWNrT3V0LGd1ZXN0czpULmd1ZXN0cywuLi5ZPjE/e3Jvb21zOll9Ont9fTp7fSx1az1lPT57Y29uc3R7Y2hlY2tJbjp0LGNoZWNrT3V0Om4sZ3Vlc3RzOm8scm9vbXM6ciwuLi5zfT1lPz97fTtyZXR1cm4gc30sbGs9KGUsdCk9Pntjb25zdHttaW46bixzdGFydDpvfT1HZih0KTtyZXR1cm4oIVQuY2hlY2tJbnx8VC5jaGVja0luPG4pJiYoVC5jaGVja0luPW8pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9V2UoVC5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjaSIgdmFsdWU9IiR7YyhULmNoZWNrSW4pfSIgbWluPSIke2Mobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ibGNvIiB2YWx1ZT0iJHtjKFQuY2hlY2tPdXQpfSIgbWluPSIke2MoV2UoVC5jaGVja0luLDEpKX0iPjwvbGFiZWw+CiAgICA8ZGl2IGNsYXNzPSJndWVzdHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJSb29tcyI+Um9vbXMKICAgICAgPHNwYW4gY2xhc3M9InN0ZXAgbGlnaHQiPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9Ii0xIiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgcm9vbSI+4oiSPC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9Im4iIGlkPSJscm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtbGlzdC1yb29tcz0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgICR7ZT9gPHNwYW4gY2xhc3M9Im5pZ2h0cyI+JHtjKGhzKCkpfTwvc3Bhbj5gOic8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icHJpY2UtbGlzdCI+U2hvdyBwcmljZXM8L2J1dHRvbj4nfQogIDwvZGl2PmB9O2xldCBQZT0iZGF0ZXMiO2NvbnN0IFlmPSJkYXRlcyIsSW89ZT0+e2NvbnN0IHQ9ZT8/e307cmV0dXJuey4uLnQuZ3JvdXB8fHQuc3VwcGxpZXI/e2dyb3VwOnQuZ3JvdXB8fHQuc3VwcGxpZXJ9Ont9LC4uLnQuYnJhbmQ/e2JyYW5kOnQuYnJhbmR9Ont9LC4uLkFycmF5LmlzQXJyYXkodC5mYWNpbGl0aWVzKSYmdC5mYWNpbGl0aWVzLmxlbmd0aD97ZmFjaWxpdGllczp0LmZhY2lsaXRpZXN9Ont9LC4uLnQuZnJlZUNhbmNlbGxhdGlvbj97ZnJlZUNhbmNlbGxhdGlvbjohMH06e30sLi4udC5icmVha2Zhc3Q/e2JyZWFrZmFzdDohMH06e319fSxYdT1lPT57Y29uc3R7Z3JvdXA6dCxzdXBwbGllcjpuLGJyYW5kOm8sZmFjaWxpdGllczpyLGZyZWVDYW5jZWxsYXRpb246cyxicmVha2Zhc3Q6YSwuLi5pfT1lPz97fTtyZXR1cm4gaX0sZGs9ZT0+e2NvbnN0IHQ9SW8oZSk7cmV0dXJuKHQuZ3JvdXA/MTowKSsodC5icmFuZD8xOjApKyh0LmZhY2lsaXRpZXM/Lmxlbmd0aD8/MCkrKHQuZnJlZUNhbmNlbGxhdGlvbj8xOjApKyh0LmJyZWFrZmFzdD8xOjApfSxwaz1lPT57Y29uc3QgdD1lLnJlZmluZTtpZighdClyZXR1cm4iIjtjb25zdCBuPShyLHMsYSxpKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2Ugc29ydCIgdHlwZT0iYnV0dG9uIiBkYXRhLWZpbHRlcj0iJHtjKHIpfSIgYXJpYS1wcmVzc2VkPSIke2k/InRydWUiOiJmYWxzZSJ9Ij4ke2Mocyl9IDxzbWFsbD4ke2MoYSl9PC9zbWFsbD48L2J1dHRvbj5gLG89KHIscyk9PnMubGVuZ3RoP2A8ZGl2IGNsYXNzPSJmZ3JvdXAiPjxzcGFuIGNsYXNzPSJzb3J0cy1rIj4ke2Mocil9PC9zcGFuPiR7cy5qb2luKCIiKX08L2Rpdj5gOiIiO3JldHVybltvKCJHcm91cCIsKHQuZ3JvdXBzPz9bXSkubWFwKHI9Pm4oYGdyb3VwOiR7ci5pZH1gLFN0cmluZyhjdChyLmlkKT8ubmFtZT8/ci5pZCksci5jb3VudCxyLm9uKSkpLG8oIkJyYW5kIiwodC5icmFuZHM/P1tdKS5tYXAocj0+bihgYnJhbmQ6JHtyLm5hbWV9YCxyLm5hbWUsci5jb3VudCxyLm9uKSkpLG8oIkhhcyIsKHQuZmFjaWxpdGllcz8/W10pLm1hcChyPT5uKGBmYWNpbGl0eToke3Iua2V5fWAsci5sYWJlbCxyLmNvdW50LHIub24pKSksbygiUm9vbSIsKHQucm9vbT8/W10pLm1hcChyPT5uKHIua2V5LHIubGFiZWwsci5jb3VudCxyLm9uKSkpXS5qb2luKCIiKX0saGs9KGUsdCk9Pntjb25zdCBuPXI9Pk51bWJlcihyLnNsaWNlKDgsMTApKSxvPXI9Pm5ldyBEYXRlKGAke3J9VDEyOjAwOjAwWmApLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHttb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSk7cmV0dXJuIG8oZSk9PT1vKHQpP2Ake24oZSl94oCTJHtuKHQpfSAke28odCl9YDpgJHtuKGUpfSAke28oZSl9IOKAkyAke24odCl9ICR7byh0KX1gfSxYZj0oZSx0LG4pPT57Y29uc3Qgbz0hIWUuc3RheT8uY2hlY2tJbixyPWRrKGUuYXNrKSxzPXBrKGUpLGE9ZW0uZmluZCgoW3VdKT0+dT09PW4pPy5bMV0/PyJEZWZhdWx0IixpPW8/YCR7aGsoZS5zdGF5LmNoZWNrSW4sZS5zdGF5LmNoZWNrT3V0KX0ke1k+MT9gIMK3ICR7WX0gcm9vbXNgOiIifWA6IkFkZCBkYXRlcyIsbD0odSxkKT0+YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UgdG9vbCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBhbmVsPSIke3V9IiBhcmlhLWV4cGFuZGVkPSIke1BlPT09dT8idHJ1ZSI6ImZhbHNlIn0iPiR7ZH08L2J1dHRvbj5gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InBsYWNlcyB0b29sYmFyIj4KICAgICAgJHtsKCJkYXRlcyIsYyhpKSl9CiAgICAgICR7dD9sKCJzb3J0IixuPT09Imdyb3VwIj8iU29ydCI6YyhhKSk6IiJ9CiAgICAgICR7c3x8cj9sKCJmaWx0ZXJzIixgRmlsdGVycyR7cj9gIMK3ICR7cn1gOiIifWApOiIifQogICAgICAke3I/JzxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJjbGVhci1maWx0ZXJzIj5DbGVhcjwvYnV0dG9uPic6IiJ9CiAgICA8L2Rpdj4KICAgIDxkaXYgZGF0YS1wYW5lbC1ib2R5PSJkYXRlcyIke1BlPT09ImRhdGVzIj8iIjoiIGhpZGRlbiJ9PiR7bGsobyxlKX08L2Rpdj4KICAgICR7dD9gPGRpdiBjbGFzcz0iZmlsdGVyLXBhbmVsIiBkYXRhLXBhbmVsLWJvZHk9InNvcnQiJHtQZT09PSJzb3J0Ij8iIjoiIGhpZGRlbiJ9PiR7dH08L2Rpdj5gOiIifQogICAgJHtzP2A8ZGl2IGNsYXNzPSJmaWx0ZXItcGFuZWwiIGRhdGEtcGFuZWwtYm9keT0iZmlsdGVycyIke1BlPT09ImZpbHRlcnMiPyIiOiIgaGlkZGVuIn0+JHtzfTwvZGl2PmA6IiJ9YH0sZW09W1siZ3JvdXAiLCJEZWZhdWx0Il0sWyJwcmljZS1sb3ciLCJMb3dlc3QgcHJpY2UiXSxbInByaWNlLWhpZ2giLCJIaWdoZXN0IHByaWNlIl0sWyJyYXRpbmciLCJSYXRpbmciXV0sZms9MztsZXQgZG49ImlubGluZSIsdG09W107Y29uc3QgcG49KCk9PmRuPT09ImZ1bGxzY3JlZW4iLGF1PSgpPT57Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY29udGVudCAudGlsZXMiKTtpZihlPy5vZmZzZXRXaWR0aCl7Y29uc3Qgcz1nZXRDb21wdXRlZFN0eWxlKGUpLmdyaWRUZW1wbGF0ZUNvbHVtbnMuc3BsaXQoIiAiKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO2lmKHM+MClyZXR1cm4gc31jb25zdCB0PXBlKCJjb250ZW50IikuY2xpZW50V2lkdGh8fHdpbmRvdy5pbm5lcldpZHRofHwwLG49dDw9NDYwLG89bj8xNTA6MTk2LHI9bj84OjEwO3JldHVybiBNYXRoLm1heCgxLE1hdGguZmxvb3IoKHQrcikvKG8rcikpKXx8Mn07bGV0IGN1PTA7Y29uc3QgZnM9KCk9Pk1hdGgubWF4KDIsKGN1fHxhdSgpKSpmayk7bGV0IEJvPTA7Y29uc3QgbWs9ZT0+e0JvPWZzKCk7Y29uc3QgdD1wbigpP2UuaG90ZWxzPz9bXTooZS5ob3RlbHM/P1tdKS5zbGljZSgwLEJvKSxuPVsuLi5uZXcgU2V0KHQubWFwKCQ9PlN0cmluZygkLmNpdHkpKSldLG89JD0+e2NvbnN0IFM9dC5maW5kKGo9PmouY2l0eT09PSQpPy5jb3VudHJ5O3JldHVybiBTJiYhU3RyaW5nKFMpLnN0YXJ0c1dpdGgoJCk/U3RyaW5nKFMpOiIifSxyPVsuLi5uZXcgU2V0KHQubWFwKCQ9PlN0cmluZygkLmNvdW50cnk/PyIiKSkpXSxzPXIubGVuZ3RoPjEsYT0kPT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke2MoJCl9JHshcyYmbygkKT9gPHNtYWxsPiDCtyAke2MobygkKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKFM9PlMuY2l0eT09PSQpLm1hcChTPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhTLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtXdChTdHJpbmcoUy5pZCkpfSI+CiAgICAgICAgICAgICAgJHtTLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKFMuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEd0KFN0cmluZyhTLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7cW8oUyk/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2MocW8oUykpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7YyhTLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHtjKG4ubGVuZ3RoPjE/Uy5hcmVhPz9TLmNpdHk6W1MuYXJlYSxTLmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgICAgICR7UWYoUyl9CiAgICAgICAgICAgICAgICAke3JrKFMucmF0aW5nKX0KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgJHtjayhTKX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCxpPU51bWJlcihlLnRvdGFsPz90Lmxlbmd0aCksbD1OdW1iZXIoZS5vZmZzZXQ/PzApLHU9aS1sLXQubGVuZ3RoLGQ9ZS5wbGFjZXM/P1tdO2UuYXNrPy5jaXR5O2NvbnN0IGY9ZC5sZW5ndGg/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2QubWFwKCgkLFMpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2MoJC5wbGFjZSl9IiR7Uz49bnQ/IiBoaWRkZW4iOiIifT4ke2MoJC5sYWJlbCl9IDxzbWFsbD4ke2MoJC5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke2QubGVuZ3RoPm50P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7ZC5sZW5ndGgtbnR9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiLGc9U3RyaW5nKGUuc29ydD8/Imdyb3VwIiksdj0hKChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MSksXz10Lmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJPcmRlciI+JHtlbS5maWx0ZXIoKFskXSk9PnZ8fCEkLnN0YXJ0c1dpdGgoInByaWNlIikpLm1hcCgoWyQsU10pPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtc29ydD0iJHskfSIgYXJpYS1wcmVzc2VkPSIkeyQ9PT1nPyJ0cnVlIjoiZmFsc2UifSI+JHtTfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiI7cmV0dXJuW2VlKCksZixYZihlLF8sZyksZS53aWRlbmVkP2A8ZGl2IGNsYXNzPSJ3YXJubm90ZSI+Tm90aGluZyBtYXRjaGVkICR7YyhlLndpZGVuZWQuZnJvbSl9LiBUaGVzZSBhcmUgJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiIsYDxkaXY+JHtzP3IubWFwKCQ9PmA8ZGl2IGNsYXNzPSJjb3VudHJ5bmFtZSI+JHtjKCQpfTwvZGl2PiR7bi5maWx0ZXIoUz0+dC5zb21lKGo9PmouY2l0eT09PVMmJlN0cmluZyhqLmNvdW50cnk/PyIiKT09PSQpKS5tYXAoYSkuam9pbigiIil9YCkuam9pbigiIik6bi5tYXAoYSkuam9pbigiIil9PC9kaXY+YCwoZS5jdXJyZW5jaWVzPz9bXSkubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlF1b3RlZCBpbiAke2MoZS5jdXJyZW5jaWVzLmpvaW4oIiwgIikpfSDigJQgbm8gcmF0ZSBpcyBhcHBsaWVkIGhlcmUsIHNvIHRoaXMgaXMgbm90IGEgcHJpY2Ugb3JkZXIuIE9uZSBjaXR5IG9yIG9uZSBjb3VudHJ5IGdpdmVzIG9uZSBjdXJyZW5jeS48L2Rpdj5gOiIiLGUub3ZlckJ1ZGdldD9gPGRpdiBjbGFzcz0ibm90ZSI+JHtjKGUub3ZlckJ1ZGdldCl9IG1vcmUgbWF0Y2hlZCBhbmQgY2FtZSBpbiBvdmVyIHRoZSBwcmljZSBjZWlsaW5nLjwvZGl2PmA6IiIscG4oKT91PjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHtsP2Ake2wrMX3igJMke2wrdC5sZW5ndGh9YDp0Lmxlbmd0aH0gb2YgJHtpfS48L2Rpdj4KICAgICAgICAgICAke1ZfKGBTaG93ICR7TWF0aC5taW4oMTIsdSl9IG1vcmVgLCdkYXRhLWFjdD0ibW9yZS1ob3RlbHMiJyl9YDoiIjpGXyh7ZnJvbTpsLGNvdW50OnQubGVuZ3RoLHRvdGFsOk51bWJlcihpKSxwcmV2OidkYXRhLWFjdD0icGFnZS1wcmV2IicsbmV4dDonZGF0YS1hY3Q9InBhZ2UtbmV4dCInLGFsbDp0bS5pbmNsdWRlcygiZnVsbHNjcmVlbiIpPydkYXRhLWFjdD0iZnVsbHNjcmVlbiInOm51bGwsbm91bjoiaG90ZWxzIn0pXS5qb2luKCIiKX0sZ2s9ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXSxuPWUud2lkZW5lZD9gPGRpdiBjbGFzcz0id2Fybm5vdGUiPk5vdGhpbmcgbWF0Y2hlZCAke2MoZS53aWRlbmVkLmZyb20pfSwgc28gdGhpcyBsb29rZWQgaW4gJHtjKGUud2lkZW5lZC50byl9LjwvZGl2PmA6IiI7cmV0dXJuIGUuYmVmb3JlRmlsdGVycz8oUGU9ImZpbHRlcnMiLFtlZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj4ke2MoZS53aHk/P2BOb25lIG9mIHRoZSAke2UuYmVmb3JlRmlsdGVyc30gaGVyZSBoYXMgYWxsIG9mIHRob3NlIHRvZ2V0aGVyLmApfTwvZGl2PmAsWGYoZSwiIixTdHJpbmcoZS5hc2s/LnNvcnQ/PyJncm91cCIpKV0uam9pbigiIikpOnQubGVuZ3RoP1tlZSgpLG4sYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7Yyh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobz0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG8uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7V3QoU3RyaW5nKG8uaWQpKX0iPgogICAgICAgICAgJHtvLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKG8uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoR3QoU3RyaW5nKG8ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtjKG8ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7Yyhbby5hcmVhLG8uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICR7UWYobyl9CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YCR7bn08ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKGUud2h5Pz9gTm90aGluZyBtYXRjaGVkJHtlLnF1ZXJ5P2AgIiR7ZS5xdWVyeX0iYDoiIn0uIFRyeSBhIGNpdHkuYCl9PC9kaXY+YH0sbm09ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke1d0KFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEd0KFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtxbyhlKT9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7YyhxbyhlKSl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7YyhlLnJhdGluZy52YWx1ZSl94piFICgke2MoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtjKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2ModCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxiaz0oZSx0LG4pPT57Y29uc3Qgbz1zayhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke1d0KGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7Yyh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmMoR3QoU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2ModC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Mocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvbkxvY2FsP2AgdW50aWwgJHtjKHQuZnJlZUNhbmNlbGxhdGlvbkxvY2FsKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgJHt0LnB1YmxpY1N0YXlUb3RhbD9gPGRpdiBjbGFzcz0icC13YXMiPiR7Yyh0LnB1YmxpY1Jvb21zVG90YWw/P3QucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7Yyh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7Yyh0Lm5pZ2h0bHkpfSAvIG5pZ2h0ICsgdGF4JHtZPjE/YCDCtyAke1l9IHJvb21zYDoiIn0gwrcgdG90YWwgdGF4ZXMgaW48L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7Yyh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke0xvKGBkYXRhLWFkZC1yb29tPSIke2ModC5pZCl9IiBkYXRhLWhvdGVsPSIke2MoZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSxZKX08L2Rpdj4KICAgIDwvZGl2PmB9LHZrPShlLHQpPT4hQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8Mj8iIjpgCiAgPGRpdiBjbGFzcz0iZmxleC1kYXRlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Ik5lYXJieSBhcnJpdmFsIGRhdGVzIj4KICAgICR7dC5tYXAobj0+YDxidXR0b24gY2xhc3M9ImZkJHtuLmNob3Nlbj8iIG9uIjoiIn0ke24uZnJvbT8iIjoiIG91dCJ9JHtuLmJlc3Q/IiBiZXN0IjoiIn0iIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKGUpfSIgZGF0YS1jaT0iJHtjKG4uY2hlY2tJbil9IiBkYXRhLWNvPSIke2Mobi5jaGVja091dCl9IiBhcmlhLWxhYmVsPSJBcnJpdmUgJHtjKGxuKFN0cmluZyhuLmNoZWNrSW4pKSl9JHtuLmZyb20/YCwgZnJvbSAke2Mobi5mcm9tKX1gOiIsIG5vdGhpbmcgbGVmdCJ9Ij4KICAgICAgICA8c3BhbiBjbGFzcz0iZmQtZGF5Ij4ke2MobG4oU3RyaW5nKG4uY2hlY2tJbikpKX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLXByaWNlIj4ke24uZnJvbT9jKG4uZnJvbSk6IkZ1bGwifTwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9CiAgPC9kaXY+YCxlbD1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUucm9vbXM/P1tdLG89ZS5zdGF5Pz9UO3JldHVybltlZSgpLG5tKHQpLEtmKFN0cmluZyh0LmlkKSx0LnRvZGF5VGhlcmUpLHZrKFN0cmluZyh0LmlkKSxlLmRhdGVzKSxlLm5lZWRzRGF0ZXM/JzxkaXYgY2xhc3M9ImVtcHR5Ij5Mb29raW5nIHVwIHJvb21z4oCmPC9kaXY+JzplLm5vUm9vbXM/YDxkaXYgY2xhc3M9ImVyciI+JHtjKGUubm9Sb29tcyl9PC9kaXY+YDpgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5iayh0LHIsbykpLmpvaW4oIiIpfTwvZGl2PmAsKGUuZXh0cmFzPz9bXSkubGVuZ3RoP2A8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWV4dHJhcz0iJHtjKHQuaWQpfSI+QWRkLW9ucyBhbmQgZXhwZXJpZW5jZXM8L2J1dHRvbj5gOiIiLChlLnBvbGljaWVzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJjaGlwcyI+JHtlLnBvbGljaWVzLm1hcChyPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBvbGljeT0iJHtjKHIudG9waWMpfSIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+JHtjKHIudGl0bGUpfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSx5az1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUuZXh0cmFzPz9bXSxvPWUuZm9yQm9va2luZztyZXR1cm4gbz9bZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPkFkZC1vbnMgZm9yICR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7Yyh0Lm5hbWUpfSDCtyAke2MoWWUoby5zdGF5KSl9PC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChyPT5gCiAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2Moci5uYW1lKX08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhyLnByaWNlKX08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij5wZXIgJHtjKHIucGVyPT09InBlcnNvbi1uaWdodCI/InBlcnNvbiBwZXIgbmlnaHQiOnIucGVyKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke0xvKGBkYXRhLWJvb2tpbmctZXh0cmE9IiR7YyhyLmlkKX0iIGRhdGEtYm9va2luZz0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9ImAsTnVtYmVyKG8uaGVsZD8uW3IuaWRdPz8wKSxTdHJpbmcoci5uYW1lKSl9PC9kaXY+CiAgICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCwnPGRpdiBjbGFzcz0ibm90ZSI+RWFjaCBjaGFuZ2UgaXMgc2hvd24gd2l0aCBpdHMgbmV3IHRvdGFsIGJlZm9yZSBhbnl0aGluZyBtb3Zlcy4gTm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuPC9kaXY+JywnPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5CYWNrIHRvIHlvdXIgYm9va2luZ3M8L2J1dHRvbj4nXS5qb2luKCIiKTpbZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7Yyh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgaXQgb2ZmZXJzIGJlc2lkZSB0aGUgcm9vbTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moci5kZXNjcmlwdGlvbil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKHIucHJpY2UpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij5wZXIgJHtjKHIucGVyPT09InBlcnNvbi1uaWdodCI/InBlcnNvbiBwZXIgbmlnaHQiOnIucGVyKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7TG8oYGRhdGEtYWRkLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWhvdGVsPSIke2ModC5pZCl9ImAsaWsoU3RyaW5nKHQuaWQpLFN0cmluZyhyLmlkKSksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij5CYWNrIHRvICR7Yyh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxfaz0oZSx0PSExKT0+e2NvbnN0IG49ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2MoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtjKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2MoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtjKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9IiR7ZS5kYXk/YCBkYXRhLWRheT0iJHtjKGUuZGF5KX0iYDoiIn1gO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3QmJmN0KGUuc3VwcGxpZXIpP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7YyhjdChlLnN1cHBsaWVyKS5uYW1lKX08L3NwYW4+IGA6IiJ9JHtjKGUua2luZD09PSJyb29tIj9gJHtlLmhvdGVsTmFtZX0gwrcgJHtZZShlLnN0YXkpfSR7ZS5yZWZ1bmRhYmxlPT09ITE/IiDCtyBub24tcmVmdW5kYWJsZSI6IiJ9YDpgJHtlLmhvdGVsTmFtZX0ke2UuZGV0YWlsP2AgwrcgJHtlLmRldGFpbH1gOiIifWApfTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhlLnRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7YyhlLnVuaXQpfSR7ZS5raW5kPT09InJvb20iPyIgLyBuaWdodCI6IiBlYWNoIn08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtMbyhuLE51bWJlcihlLmtpbmQ9PT0iZXh0cmEiP2Uub3JkZXJlZD8/ZS5xdWFudGl0eT8/MTplLnF1YW50aXR5Pz8xKSxTdHJpbmcoZS50aXRsZSkpfTwvZGl2PgogICAgPC9kaXY+YH0sdGw9KGUsdCk9PmA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7YyhlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke2MoZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0gZ29vZCI+PHNwYW4+JHtjKGUubWVtYmVyU2F2aW5nLnRpZXIpfSBtZW1iZXIgcmF0ZTwvc3Bhbj48c3Bhbj7iiJIgJHtjKGUubWVtYmVyU2F2aW5nLnNhdmVkKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7Yyh0KX08L3NwYW4+PHNwYW4+JHtjKGUudG90YWwpfTwvc3Bhbj48L2Rpdj4KICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIGVhcm5zPC9zcGFuPjxzcGFuPiR7YyhOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgIDwvZGl2PmAsbmw9ZT0+ZS5zYW5kYm94P2A8ZGl2IGNsYXNzPSJub3RlIj5UaGlzIGlzIGEgdGVzdCBlbnZpcm9ubWVudC4gQm9va2luZyBoZXJlIG1ha2VzIGEgc2ltdWxhdGVkIGJvb2tpbmcsIG5vdCBhICR7YyhlLm5hbWUpfSByZXNlcnZhdGlvbiwgYW5kIG5vdGhpbmcgaXMgcGFpZC48L2Rpdj5gOmUuYm9va2luZ01vZGU9PT0icGF5LWF0LWhvdGVsIj9gPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIEJvb2tpbmcgbWFrZXMgYSByZXNlcnZhdGlvbiB3aXRoICR7YyhlLm5hbWUpfSwgcGFpZCBhdCB0aGUgaG90ZWwsIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gOmUuZGVtbz9gPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFRoaXMgaXMgYSBkZW1vbnN0cmF0aW9uOiByZXF1ZXN0aW5nIGEgYm9va2luZyBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZSwgYnV0ICR7YyhlLm5hbWUpfSBkb2VzIG5vdCByZWNlaXZlIGl0IGFuZCBubyByb29tIGlzIGhlbGQuPC9kaXY+YDpgPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFJlcXVlc3RpbmcgYSBib29raW5nIGFza3MgJHtjKGUubmFtZSl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLGtrPWU9PmUubGVuZ3RoPDI/ZVswXT8/IiI6YCR7ZS5zbGljZSgwLC0xKS5qb2luKCIsICIpfSBhbmQgJHtlW2UubGVuZ3RoLTFdfWAsJGs9ZT0+e2NvbnN0IHQ9aXUoZSk7aWYodC5sZW5ndGg+MSl7Y29uc3Qgbz10LmluY2x1ZGVzKFVlKT9VZToiIjtyZXR1cm5bYDxkaXYgY2xhc3M9Im5vdGUiPlRoZXNlIHN0YXlzIGFyZSB3aXRoICR7Yyhrayh0Lm1hcChyPT5IZShyKS5uYW1lKSkpfS4gRWFjaCBncm91cCdzIGFyZSBib29rZWQgb24gdGhlaXIgb3duLjwvZGl2PmAsLi4udC5tYXAocj0+e2NvbnN0IHM9SGUocik7cmV0dXJuYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvJHtvJiZvIT09cj8iIHF1aWV0IjoiIn0iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIiBkYXRhLWdyb3VwPSIke2Mocil9Ij5Cb29rIHRoZSAke2Mocy5uYW1lKX0gc3RheXM8L2J1dHRvbj48L2Rpdj4ke25sKHMpfWB9KSxvP0RzKCEwLEhlKG8pKToiIl19Y29uc3Qgbj1IZSh0WzBdKTtyZXR1cm5bYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stYm9vayI+JHtuLmJvb2tpbmdNb2RlPT09InBheS1hdC1ob3RlbCI/IkJvb2siOiJSZXF1ZXN0IGJvb2tpbmcifTwvYnV0dG9uPjwvZGl2PmAsbmwobiksRHMoITEsbildfSx1dT0oKT0+SGUoVWV8fGl1KE0/LmxpbmVzPz9bXSlbMF0pLHdrPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bZWUoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtFZT9gaG90ZWxzIG9uICR7YyhidCl9YDpgJHtjKGJ0KX0gaG90ZWxzYH08L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTtjb25zdCBuPVsuLi5uZXcgU2V0KHQubWFwKG89PlN0cmluZyhvLmRheT8/IiIpKSldLnNvcnQoKTtyZXR1cm5bZWUoKSxuLm1hcChvPT5gCiAgICAgICR7bz9gPGRpdiBjbGFzcz0iZGF5Ij4ke2MobG4obykpfTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InJvd3MiPiR7dC5maWx0ZXIocj0+U3RyaW5nKHIuZGF5Pz8iIik9PT1vKS5tYXAocj0+X2socixpdSh0KS5sZW5ndGg+MSkpLmpvaW4oIiIpfTwvZGl2PmApLmpvaW4oIiIpLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG89PmAke2Moby50aXRsZSl9OiAke2Moby53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLC4uLkFycmF5LmlzQXJyYXkoZS5ncm91cHMpJiZlLmdyb3Vwcy5sZW5ndGg+MT9bYDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlZCBpbiAke2MoKGUuY3VycmVuY2llcz8/W10pLmpvaW4oIiBhbmQgIikpfSwgc2VwYXJhdGVseS4gTm90aGluZyBoZXJlIGNvbnZlcnRzIG9uZSBpbnRvIHRoZSBvdGhlcjsgZWFjaCBob3RlbCBpcyBib29rZWQgYW5kIHBhaWQgaW4gaXRzIG93bi48L2Rpdj5gLC4uLmUuZ3JvdXBzLm1hcChvPT50bChvLG8uZ29lc1dpdGhBU3RheT9gSW4gJHtvLmN1cnJlbmN5fSwgZ29lcyB3aXRoIGEgc3RheSAtIG5vdCBpbiB0aGUgdG90YWxgOmBUb3RhbCBpbiAke28uY3VycmVuY3l9YCkpXTpbdGwoZSwiVG90YWwiKV0sLi4uQXJyYXkuaXNBcnJheShlLm5lZWRzUm9vbSkmJmUubmVlZHNSb29tLmxlbmd0aD9lLm5lZWRzUm9vbS5tYXAobz0+YDxkaXYgY2xhc3M9ImFza2VkIj4KICAgICAgICAgICAgIDxiPkdvZXMgd2l0aCBhIHN0YXk8L2I+CiAgICAgICAgICAgICA8c3Bhbj4ke2MoKG8uZXh0cmFzPz9bXSkuam9pbigiIGFuZCAiKSl9IGlzICR7YyhvLmhvdGVsTmFtZSl9J3Mgc2VydmljZSBmb3IgaXRzIGd1ZXN0cywgc28gaXQgaXMgYm9va2VkIHdpdGggYSByb29tIHRoZXJlIC0gb3IgYWRkZWQgdG8gYSBib29raW5nIHlvdSBhbHJlYWR5IGhhdmUuPC9zcGFuPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhvLmhvdGVsSWQpfSI+Um9vbXMgYXQgJHtjKG8uaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPC9kaXY+YCk6Wy4uLiRrKHQpXSxYfHwhZHMoInNpZ25JbiIpPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7YyhNZnx8YnQpfSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7VW8oKX1gXS5qb2luKCIiKX0sbHU9W3tpZDoia2luZy1iZWQiLGxhYmVsOiJLaW5nIGJlZCJ9LHtpZDoidHdpbi1iZWRzIixsYWJlbDoiVHdpbiBiZWRzIn0se2lkOiJoaWdoLWZsb29yIixsYWJlbDoiSGlnaCBmbG9vciJ9LHtpZDoibG93LWZsb29yIixsYWJlbDoiTG93IGZsb29yIn0se2lkOiJxdWlldC1yb29tIixsYWJlbDoiUXVpZXQgcm9vbSJ9LHtpZDoiY29ubmVjdGluZy1yb29tcyIsbGFiZWw6IkNvbm5lY3Rpbmcgcm9vbXMifSx7aWQ6ImVhcmx5LWNoZWNrLWluIixsYWJlbDoiRWFybHkgY2hlY2staW4ifSx7aWQ6ImxhdGUtYXJyaXZhbCIsbGFiZWw6IkxhdGUgYXJyaXZhbCJ9LHtpZDoiYWNjZXNzaWJsZS1yb29tIixsYWJlbDoiQWNjZXNzaWJsZSByb29tIn1dLFNrPXsia2luZy1iZWQiOiJ0d2luLWJlZHMiLCJ0d2luLWJlZHMiOiJraW5nLWJlZCIsImhpZ2gtZmxvb3IiOiJsb3ctZmxvb3IiLCJsb3ctZmxvb3IiOiJoaWdoLWZsb29yIn07bGV0IHhlPW51bGw7Y29uc3QgRHM9KGU9ITEsdD11dSgpKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJndWVzdCIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5HdWVzdCBuYW1lPGlucHV0IGlkPSJnbmFtZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZSBib29raW5nIiB2YWx1ZT0iJHtjKHhlPy5uYW1lPz8iIil9Ij48L2xhYmVsPgogICAgICA8bGFiZWw+RW1haWw8aW5wdXQgaWQ9ImdtYWlsIiB0eXBlPSJlbWFpbCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJGb3IgdGhlIGNvbmZpcm1hdGlvbiIgdmFsdWU9IiR7Yyh4ZT8uZW1haWw/PyIiKX0iPjwvbGFiZWw+CiAgICA8L2Rpdj4ke3QucGhvbmVSZXF1aXJlZD9gCiAgICA8bGFiZWw+UGhvbmU8aW5wdXQgaWQ9ImdwaG9uZSIgdHlwZT0idGVsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgaG90ZWwgdG8gcmVhY2ggeW91IiB2YWx1ZT0iJHtjKHhlPy5waG9uZT8/IiIpfSI+PC9sYWJlbD5gOiIifQogICAgPGRpdiBjbGFzcz0iYXNrcyI+CiAgICAgIDxkaXYgY2xhc3M9ImFza3MtdCI+QXNrIHRoZSBkZXNrIGZvcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaGlwcyI+JHtsdS5tYXAobj0+YDxidXR0b24gY2xhc3M9ImNoaXAgYXNrIiB0eXBlPSJidXR0b24iIGRhdGEtYXNrPSIke2Mobi5pZCl9IiBhcmlhLXByZXNzZWQ9IiR7KHhlP3hlLnJlcXVlc3RzOlg/LnByZWZlcmVuY2VzPz9bXSkuaW5jbHVkZXMobi5pZCk/InRydWUiOiJmYWxzZSJ9Ij4ke2Mobi5sYWJlbCl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgPGxhYmVsPkFycml2aW5nIGF0PGlucHV0IGlkPSJndGltZSIgdHlwZT0idGltZSIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSIke2MoeGU/LmFycml2aW5nQXQ/PyIiKX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkFueXRoaW5nIGVsc2U8aW5wdXQgaWQ9Imdub3RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkluIHlvdXIgb3duIHdvcmRzIOKAlCBvcHRpb25hbCIgdmFsdWU9IiR7Yyh4ZT8ubm90ZXM/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj5UaGVzZSBnbyB0byB0aGUgZGVzayBhcyByZXF1ZXN0cy4gJHtjKHQubmFtZSl9IG1lZXRzIHdoYXQgaXQgY2FuIG9uIHRoZSBkYXk7IG5vbmUgb2YgaXQgaXMgaGVsZC48L2Rpdj4KICAgICAgJHtYP2A8bGFiZWwgY2xhc3M9InJlbWVtYmVyIj48aW5wdXQgaWQ9ImdyZW1lbWJlciIgdHlwZT0iY2hlY2tib3giJHt4ZT8ucmVtZW1iZXI/IiBjaGVja2VkIjoiIn0+IFJlbWVtYmVyIHRoZSBiZWQsIGZsb29yIGFuZCByb29tIHJlcXVlc3RzIG9uIG15ICR7YyhYLnByb2dyYW1tZT8/Im1lbWJlcnNoaXAiKX0gZm9yIG5leHQgdGltZTwvbGFiZWw+YDoiIn0KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPiR7dC5ib29raW5nTW9kZT09PSJwYXktYXQtaG90ZWwiPyJCb29rIHRoZXNlIHJvb21zIjp0LmRlbW8/IlJlcXVlc3QgYm9va2luZyI6IkhvbGQgdGhlc2Ugcm9vbXMifTwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0LnNhbmRib3g/IkEgdGVzdCBib29raW5nOiBub3RoaW5nIGlzIGhlbGQgYW5kIG5vdGhpbmcgaXMgcGFpZC4iOnQuYm9va2luZ01vZGU9PT0icGF5LWF0LWhvdGVsIj8iTm8gY2FyZCBpcyB0YWtlbiBoZXJlIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwYXkgYXQgdGhlIGhvdGVsLiI6dC5kZW1vPyJObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFRoaXMgaXMgYSBkZW1vbnN0cmF0aW9uOiBubyByb29tIGlzIGhlbGQuIjoiTm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uIn08L2Rpdj4KICA8L2Rpdj5gLHprPWU9PmUubGVuZ3RoPjE/YCR7ZS5zbGljZSgwLC0xKS5qb2luKCIsICIpfSBhbmQgJHtlLmF0KC0xKX1gOmVbMF0/PyIiLFRrPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke2MoemsoZS5taXNzaW5nPz9bXSl8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsRHMoITApXS5qb2luKCIiKSxJaz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW2VlKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHtjKHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgICR7dC5uYW1lP2A8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+YDonPGRpdiBjbGFzcz0id2hlcmUiPlNpZ25lZCBpbjwvZGl2Pid9CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgJHt0eXBlb2YgdC5wb2ludHM9PSJudW1iZXIiP2A8ZGl2IGNsYXNzPSJ3aGVuIj4ke2ModC5wb2ludHMudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHtjKE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke2ModC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLCh0LnByZWZlcmVuY2VzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgPGI+U2F2ZWQgZm9yIHlvdXIgbmV4dCBzdGF5czwvYj4KICAgICAgICAgICA8c3Bhbj4ke2ModC5wcmVmZXJlbmNlcy5tYXAobj0+bHUuZmluZChvPT5vLmlkPT09bik/LmxhYmVsPz9uKS5qb2luKCIsICIpKX0gLSB0aWNrZWQgb24gdGhlIGJvb2tpbmcgZm9ybSwgYW5kIGFza2VkIGZvciBvbmx5IHdoZW4geW91IGJvb2sgd2l0aCB0aGVtLjwvc3Bhbj4KICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsaW5reSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZm9yZ2V0LXByZWZzIj5Gb3JnZXQgdGhlbTwvYnV0dG9uPgogICAgICAgICA8L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0seGs9KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLFVvKCEwKV0uam9pbigiIiksVW89KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxQaz1lPT57Y29uc3QgdD1lLnJlcXVlc3RlZD8/W107cmV0dXJuIHQubGVuZ3RoP2A8ZGl2IGNsYXNzPSJhc2tlZCR7ZS5hY2Nlc3NpYmlsaXR5PyIgZmxhZyI6IiJ9Ij4KICAgIDxiPlJlcXVlc3RlZCwgbm90IGhlbGQ8L2I+CiAgICAke3QubWFwKG49PmA8c3Bhbj4ke2Mobil9PC9zcGFuPmApLmpvaW4oIiIpfQogIDwvZGl2PmA6IiJ9LHdzPWU9PmUuaG9sZFVudGlsTG9jYWw/YCR7ZS5ob2xkVW50aWxMb2NhbH0gKGhvdGVsIHRpbWUpYDpgJHtTdHJpbmcoZS5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpfSBVVENgLENrPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5ib29raW5ncykmJmUuYm9va2luZ3MubGVuZ3RoP2UuYm9va2luZ3M6W2UuYm9va2luZz8/e31dLG49dC5sZW5ndGg+MSx7bmFtZTpvLGJvb2tpbmdNb2RlOnIsZGVtbzpzLHNhbmRib3g6YSwuLi5pfT1IZSh0WzBdPy5zdXBwbGllciksbD1kPT5layhkKSYmKGQ9PT0ibGlzdEV4dHJhcyI/aS5leHRyYXM6ZD09PSJjaGFuZ2VCb29raW5nIj9pLmNoYW5nZXM6ITApLHU9KGQsZixnKT0+W2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+Q29uZmlybWF0aW9uIGNvZGU8L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKGQuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke2MoZC5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke2MoWWUoZC5zdGF5KSl9IMK3ICR7YyhkLmd1ZXN0Py5uYW1lPz8iIil9PC9kaXY+CiAgICAgICA8L2Rpdj5gLG4mJnI9PT0iaG9sZCI/YDxkaXYgY2xhc3M9Im5vdGUiPiR7cz8iRGVtb25zdHJhdGlvbiBob2xkIGxhcHNlcyBhdCI6IkhlbGQgdW50aWwifSAke2Mod3MoZCkpfS48L2Rpdj5gOiIiLHI9PT0icGF5LWF0LWhvdGVsIiYmZC5zdGF0dXM9PT0icmVxdWVzdGVkIj9gPGRpdiBjbGFzcz0ibm90ZSI+V2FpdGluZyBmb3IgJHtjKG8pfSB0byBjb25maXJtIHRoaXMgYm9va2luZyDigJQgdGhhdCB0YWtlcyB1cCB0byBlaWdodCBtaW51dGVzLiBNeSBib29raW5ncyBzaG93cyB3aGVuIGl0IGhhcy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJtb25leS1vdXQiPjxzcGFuPlRvdGFsIGZvciB0aGUgc3RheTwvc3Bhbj48c3Bhbj4ke2MoZil9PC9zcGFuPjwvZGl2PmAsUGsoZyksYDxkaXYgY2xhc3M9InJvd3MiPiR7KGQucXVvdGU/LmxpbmVzPz9bXSkubWFwKEFrKS5qb2luKCIiKX08L2Rpdj5gLG4/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgJHtsKCJsaXN0RXh0cmFzIik/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhkLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPmA6IiJ9CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKGQuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtjKGQuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bZWUoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwga2VlcHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyAke2woImNoYW5nZUJvb2tpbmciKT8iY2hhbmdlZCBvciBjYW5jZWxsZWQiOiJjYW5jZWxsZWQifSBvbiBpdHMgb3duLjwvZGl2PmA6IiIsYT9gPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPkEgdGVzdCBib29raW5nLjwvYj4KICAgICAgIDxzcGFuPk1hZGUgaW4gYSBzaW11bGF0ZWQgY29weSBvZiAke2Mobyl9J3Mgc3lzdGVtOiBub3QgYSAke2Mobyl9IHJlc2VydmF0aW9uLCBubyByb29tIGlzIGhlbGQsIGFuZCBub3RoaW5nIGlzIHBhaWQuPC9zcGFuPgogICAgIDwvZGl2PmA6cj09PSJwYXktYXQtaG90ZWwiP2A8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPiR7bj8iRWFjaCBpcyI6IlRoaXMgaXMifSAke2Mobyl9J3Mgb3duIHJlc2VydmF0aW9uLCBwYWlkIGF0IHRoZSBob3RlbC4gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmA6cz9gPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj5UaGlzIGlzIGEgZGVtb25zdHJhdGlvbiBib29raW5nOiAke2Mobyl9IGhhcyBub3QgcmVjZWl2ZWQgaXQgYW5kIG5vIHJvb20gaXMgaGVsZC4gJHtuPyJFYWNoIGRlbW9uc3RyYXRpb24gaG9sZCBsYXBzZXMgYXQgdGhlIHRpbWUgdW5kZXIgaXRzIGNvZGUuIjpgVGhlIGRlbW9uc3RyYXRpb24gaG9sZCBsYXBzZXMgYXQgJHtjKHdzKHRbMF0pKX0uYH08L3NwYW4+CiAgICAgPC9kaXY+YDpgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj4ke24/IlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCB0aGUgdGltZSB1bmRlciBlYWNoIGNvZGUuIjpgVGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7Yyh3cyh0WzBdKSl9LmB9IEEgY2FyZCBpcyBwcmVzZW50ZWQgYXQgY2hlY2staW4sIG5vdCBoZXJlLjwvc3Bhbj4KICAgICA8L2Rpdj5gLC4uLnQubWFwKGQ9Pm4/dShkLFN0cmluZyhkLnRvdGFsPz8iIiksZCk6dShkLFN0cmluZyhlLnRvdGFsPz8iIiksZSkpLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICR7bj8iIjpgJHtsKCJsaXN0RXh0cmFzIik/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj5gOiIifQogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2ModFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+YH0KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sRWs9ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLmRldGFpbD8/ZS53aHk/PyJUaGF0IGNvdWxkIG5vdCBiZSBkb25lLiIpfTwvZGl2PmAsdW4+MD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiPlZpZXcgdGhlIHRyaXA8L2J1dHRvbj48L2Rpdj4nOiIiXS5qb2luKCIiKSxBaz1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhlLmtpbmQ9PT0icm9vbSI/WWUoZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAsT2s9e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIixmYWlsZWQ6ImJhZCIsdW5jb25maXJtZWQ6Indhcm4ifSxSaz1lPT57Y29uc3QgdD1lLnJlcXVlc3RzPy5raW5kcz8/W107aWYoIXQubGVuZ3RoKXJldHVybiIiO2NvbnN0IG49dC5tYXAobz0+bHUuZmluZChyPT5yLmlkPT09byk/LmxhYmVsPz9vKTtyZXR1cm5gPGRpdiBjbGFzcz0ibWV0YSBhc2tlZC1saW5lIj5Bc2tlZCBmb3IgJHtjKG4uam9pbigiLCAiKS50b0xvd2VyQ2FzZSgpKX08L2Rpdj5gfSxOaz1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXSxuPWUubm90Rm91bmQ/YDxkaXYgY2xhc3M9ImVyciI+JHtjKGUudG9vTWFueT9lLm5vdEZvdW5kTGluZTpgTm8gYm9va2luZyBtYXRjaGVzICR7ZS5ub3RGb3VuZH0gd2l0aCB0aGF0IGVtYWlsLiBCb3RoIGhhdmUgdG8gYmUgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi5gKX08L2Rpdj5gOiIiO3JldHVybiBlLm5vdEZvdW5kJiZ0Lmxlbmd0aD09PTA/YCR7bn0KICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQtYm9va2luZyI+VHJ5IGFnYWluPC9idXR0b24+PC9kaXY+YDp0Lmxlbmd0aD09PTA/JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5ncyBpbiB0aGlzIGNvbnZlcnNhdGlvbiB5ZXQuPC9kaXY+JzpbZWUoKSxuLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QubWFwKG89PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhvLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Moby5jb25maXJtYXRpb25Db2RlKX0gwrcgJHtjKFllKG8uc3RheSkpfTwvZGl2PgogICAgICAgICAgJHtSayhvKX0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+PHNwYW4gY2xhc3M9ImJhZGdlICR7T2tbU3RyaW5nKG8uc3RhdHVzKV0/PyIifSI+JHtjKG8uc3RhdHVzKX08L3NwYW4+PC9kaXY+CiAgICAgICAgICAke28uc3RhdHVzPT09InVuY29uZmlybWVkIj9gPGRpdiBjbGFzcz0ibWV0YSI+Tm90IGtub3duIHlldCB3aGV0aGVyICR7YyhIZShvLnN1cHBsaWVyKS5uYW1lKX0gbWFkZSB0aGlzIGJvb2tpbmcg4oCUIGEgcGVyc29uIGlzIGNvbmZpcm1pbmcgaXQuPC9kaXY+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKG8ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke28uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG8uc3RhdHVzPT09ImNvbmZpcm1lZCI/YCR7ZHMoImxpc3RFeHRyYXMiKSYmSGUoby5zdXBwbGllcikuZXh0cmFzP2A8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2Moby5jb25maXJtYXRpb25Db2RlKX0iPkFkZC1vbnM8L2J1dHRvbj5gOiIifQogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKG8uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sb2w9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxlZSgpLGA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHt0PyJUaGUgaG90ZWwgY2hhcmdlcyI6IkNhbmNlbGxpbmcgd291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmZlZSl9PC9zcGFuPjwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLnJ1bGUpfTwvZGl2PmAsdD8iIjplLmNhbmNlbGxhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+S2VlcCBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gZGFuZ2VyIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jYW5jZWw9IiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoZSBib29raW5nPC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDonPGRpdiBjbGFzcz0ibm90ZSI+VGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGNhbmNlbCBvbiB0aGlzIGJvb2tpbmcuPC9kaXY+J10uam9pbigiIil9LHJsPWU9Pntjb25zdCB0PWUudmlldz09PSJjaGFuZ2VkIixuPWUuYm9va2luZz8/e30sbz1lLmZyb20/P3t9LHI9ZS50byxzPSEhciYmKHIuY2hlY2tJbiE9PW8uY2hlY2tJbnx8ci5jaGVja091dCE9PW8uY2hlY2tPdXR8fE51bWJlcihyLnJvb21zKSE9PU51bWJlcihvLnJvb21zKXx8ci5yb29tTmFtZSE9PW8ucm9vbU5hbWUpLGE9KGksbCx1KT0+bD9gPGRpdiBjbGFzcz0ibGVnJHt1PyIgd2FzIjoiIn0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2siPiR7YyhpKX08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWd2Ij4ke2MobC5jaGVja0luKX0g4oaSICR7YyhsLmNoZWNrT3V0KX0gwrcgJHtjKGwubmlnaHRzKX0gJHtOdW1iZXIobC5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ20iPiR7YyhsLnJvb21OYW1lKX0ke051bWJlcihsLnJvb21zKT4xP2AgwrcgJHtjKGwucm9vbXMpfSByb29tc2A6IiJ9IMK3ICR7YyhsLnRvdGFsKX08L2Rpdj4KICAgICAgICAgPC9kaXY+YDoiIjtyZXR1cm5bZWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7YSh0PyJXYXMiOiJOb3ciLGUuZnJvbSxzKX0ke2EodD8iTm93IjoiV291bGQgYmUiLGUudG8sITEpfTwvZGl2PmAsZS5hZGRPbj9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIj48c3Bhbj4ke2MoZS5hZGRPbi5uYW1lKX08L3NwYW4+PHNwYW4+JHtjKGUuYWRkT24uZnJvbSl9IOKGkiAke2MoZS5hZGRPbi50byl9PC9zcGFuPjwvZGl2PjwvZGl2PmA6IiIsZS5kaWZmZXJlbmNlP2A8ZGl2IGNsYXNzPSJzdW1zIj48ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7ZS5yZWZ1bmREdWU/dD8iVGhlIGRlc2sgb3dlcyI6IldvdWxkIGNvbWUgYmFjayI6dD8iVGhlIGRlc2sgYXNrcyBmb3IiOiJXb3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHtjKGUuZGlmZmVyZW5jZSl9PC9zcGFuPjwvZGl2PjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9Im5vdGUiPiR7YyhlLnJ1bGUpfTwvZGl2PmAsdD8nPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPjwvZGl2Pic6ZS5jaGFuZ2VhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TGVhdmUgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jaGFuZ2U9IiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSI+JHtlLmFkZE9uJiZlLmZyb20/LmNoZWNrSW49PT1lLnRvPy5jaGVja0luJiZlLmZyb20/LmNoZWNrT3V0PT09ZS50bz8uY2hlY2tPdXQ/IlVwZGF0ZSB0aGUgYm9va2luZyI6Ik1vdmUgdGhlIGJvb2tpbmcifTwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6IiJdLmpvaW4oIiIpfSxTcz1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUudmlldz09PSJwb2xpY3kiP2A8aDQ+JHtjKGUudGl0bGUpfTwvaDQ+JHtjKGUudGV4dCl9YDooZS50b3BpY3M/P1tdKS5tYXAobz0+YDxoND4ke2Moby50aXRsZSl9PC9oND4ke2Moby50ZXh0KX1gKS5qb2luKCIiKTtyZXR1cm5bYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2ModC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IHRoZSBob3RlbCBwdWJsaXNoZXM8L2Rpdj48L2Rpdj5gLGUudmlldz09PSJwb2xpY3ktbWlzc2luZyI/YDxkaXYgY2xhc3M9ImVtcHR5Ij4ke2ModC5uYW1lKX0gZG9lcyBub3QgcHVibGlzaCBhbnl0aGluZyBhYm91dCB0aGF0IGhlcmUuPC9kaXY+YDpgPGRpdiBjbGFzcz0icHJvc2UiPiR7bn08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2ModC5pZCl9Ij5CYWNrIHRvICR7Yyh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxaaz1lPT57Y29uc3QgdD1lLmNvbHVtbnM/P1tdLG49ZS5yb3dMYWJlbHM/P1tdLG89dC5zb21lKHM9PnMucmVjb21tZW5kZWQpLHI9cz0+YAogICAgPGRpdiBjbGFzcz0iY21wLWhlYWQke3MucmVjb21tZW5kZWQ/IiBwaWNrIjoiIn0ke28/IiBtYXJrZWQiOiIifSI+CiAgICAgICR7bz9gPGRpdiBjbGFzcz0icGlja21hcmske3MucmVjb21tZW5kZWQ/IiI6IiBub25lIn0iPiR7cy5yZWNvbW1lbmRlZD8iUmVjb21tZW5kZWQiOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxidXR0b24gY2xhc3M9InQtc2hvdCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Mocy5ob3RlbC5pZCl9IiBzdHlsZT0iJHtXdChTdHJpbmcocy5ob3RlbC5pZCkpfSI+CiAgICAgICAgJHtzLmhvdGVsLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKHMuaG90ZWwuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEd0KFN0cmluZyhzLmhvdGVsLm5hbWUpKSl9PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sLW5hbWUiPiR7YyhzLmhvdGVsLm5hbWUpfSR7Y3Qocy5ob3RlbC5zdXBwbGllcik/YDxzbWFsbCBjbGFzcz0iY29sLWdyb3VwIj4ke2MoY3Qocy5ob3RlbC5zdXBwbGllcikubmFtZSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7cy5wcmljZT9gJHtjKHMucHJpY2Uuc3RheVRvdGFsKX08c21hbGwgY2xhc3M9InN1YiI+dG90YWwgwrcgJHtjKHMucHJpY2UubmlnaHRseSl9L25pZ2h0PC9zbWFsbD5gOnMuZnJvbT9gPHNtYWxsPkZyb20gPC9zbWFsbD4ke2Mocy5mcm9tKX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9IndoeSR7cy5iZXN0Rm9yPyIiOiIgbm9uZSJ9Ij4ke3MuYmVzdEZvcj9jKHMuYmVzdEZvcik6IiJ9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InBjIj4ke1suLi4ocy5wcm9zPz9bXSkubWFwKGE9PmA8ZGl2IGNsYXNzPSJwcm8iPjxzcGFuIGNsYXNzPSJtIj4rPC9zcGFuPjxzcGFuPiR7YyhhKX08L3NwYW4+PC9kaXY+YCksLi4uKHMuY29ucz8/W10pLm1hcChhPT5gPGRpdiBjbGFzcz0iY29uIj48c3BhbiBjbGFzcz0ibSI+4oiSPC9zcGFuPjxzcGFuPiR7YyhhKX08L3NwYW4+PC9kaXY+YCldLmpvaW4oIiIpfTwvZGl2PgogICAgPC9kaXY+YDtyZXR1cm5bZWUoKSxlLnRpdGxlP2A8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj5gOiIiLGUuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKFllKGUuc3RheSkpfTwvZGl2PmA6IiIsQXJyYXkuaXNBcnJheShlLmN1cnJlbmNpZXMpJiZlLmN1cnJlbmNpZXMubGVuZ3RoPjE/YDxkaXYgY2xhc3M9Im5vdGUiPlByaWNlcyBhcmUgaW4gZWFjaCBob3RlbCdzIG93biBjdXJyZW5jeSAoJHtjKGUuY3VycmVuY2llcy5qb2luKCIsICIpKX0pLiBUaGV5IGFyZSBub3QgY29udmVydGVkLCBzbyB0aGUgY29sdW1ucyBhcmUgbm90IGEgcHJpY2UgcmFua2luZy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJjbXAtd3JhcCI+PGRpdiBjbGFzcz0iY21wJHt0Lmxlbmd0aD49ND8iIGZvdXIiOiIifSIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofTstLWhlYWQtcm93czoke28/Njo1fSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAocikuam9pbigiIil9CiAgICAgICAke24ubWFwKChzLGEpPT5gPGRpdiBjbGFzcz0iayI+JHtjKHMpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke2ElMj8iIGFsdCI6IiJ9Ij4ke2MoaS5yb3dzPy5bYV0/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChzPT5gJHtjKHMubmFtZSl9OiAke2Mocy53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHtjKGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LGprPWU9Pntjb25zdCB0PWUuZGF5cz8/W10sbj1pPT5gPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtpLmJvb2tlZHx8aS5pblRyaXA/InllcyI6Im5vIn0iPiR7aS5ib29rZWQ/YEJvb2tlZCDCtyAke2MoaS5ib29rZWQpfWA6aS5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+YCxvPWk9PmAgZGF0YS1ob3RlbD0iJHtjKGkuaWQpfSIgcm9sZT0iYnV0dG9uIiB0YWJpbmRleD0iMCIke2kuY2hlY2tJbj9gIGRhdGEtY2k9IiR7YyhpLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKGkuY2hlY2tPdXQpfSJgOiIifWAscj1pPT5pLmNoZWNrb3V0P2A8ZGl2IGNsYXNzPSJwbGFuLW5pZ2h0IiR7byhpKX0+PHNwYW4+Q2hlY2sgb3V0IMK3ICR7YyhpLm5hbWUpfTwvc3Bhbj48L2Rpdj5gOk51bWJlcihpLm5pZ2h0Pz8xKT4xP2A8ZGl2IGNsYXNzPSJwbGFuLW5pZ2h0IiR7byhpKX0+CiAgICAgICAgICAgPHNwYW4+TmlnaHQgJHtjKGkubmlnaHQpfSBvZiAke2MoaS5uaWdodHMpfSDCtyAke2MoaS5uYW1lKX08L3NwYW4+JHtuKGkpfQogICAgICAgICA8L2Rpdj5gOmA8ZGl2IGNsYXNzPSJwbGFuLXN0YXkiJHtvKGkpfT4KICAgICAgICAgICA8c3BhbiBjbGFzcz0icHMtc2hvdCIgc3R5bGU9IiR7V3QoU3RyaW5nKGkuaWQpKX0iPiR7aS5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhpLmltYWdlVXJsKX0iIGFsdD0iIj5gOmA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoR3QoU3RyaW5nKGkubmFtZSkpKX08L3NwYW4+YH08L3NwYW4+CiAgICAgICAgICAgPHNwYW4gY2xhc3M9InBzLWJvZHkiPgogICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPiR7YyhpLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRhIj4ke2MoW2kuZGV0YWlsLGkubmlnaHRzP2Ake2kubmlnaHRzfSAke2kubmlnaHRzPT09MT8ibmlnaHQiOiJuaWdodHMifSBoZXJlYDoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgICAgJHtpLnByaWNlP2A8c3BhbiBjbGFzcz0icHMtcHJpY2UiPiR7YyhpLnByaWNlKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgICR7bihpKX0KICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgIDwvZGl2PmAscz1pPT5gCiAgICA8ZGl2IGNsYXNzPSJwbGFuLWl0ZW0iPgogICAgICA8ZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhpLm5hbWUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhbaS5kZXRhaWwsaS5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke24oaSl9CiAgICA8L2Rpdj5gLGE9aT0+KGkucGxhbj8/W10pLmxlbmd0aD9gPG9sIGNsYXNzPSJtb21lbnRzIj4ke2kucGxhbi5tYXAobD0+YDxsaT4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0id2hlbiI+JHtjKGwudGltZT8/IiIpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0id2hhdCI+PGI+JHtjKGwud2hhdCl9PC9iPiR7bC5ub3RlP2A8c21hbGw+JHtjKGwubm90ZSl9PC9zbWFsbD5gOiIifTwvc3Bhbj4KICAgICAgICAgICAgPC9saT5gKS5qb2luKCIiKX08L29sPmA6IiI7cmV0dXJuW2VlKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoWWUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7YyhOdW1iZXIoZS5pblRyaXA/PzApK051bWJlcihlLmJvb2tlZD8/MCkpfS8ke2MoZS5wbGFubmVkKX08L2I+PHNwYW4+JHtjKGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKGksbCk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bCsxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHtjKGkubGFiZWwpfSR7aS5kYXRlP2A8c21hbGw+IMK3ICR7YyhNayhTdHJpbmcoaS5kYXRlKSkpfTwvc21hbGw+YDoiIn08L2Rpdj4KICAgICAgICAgICR7aS5ub3RlP2A8ZGl2IGNsYXNzPSJkYXlub3RlIj4ke2MoaS5ub3RlKX08L2Rpdj5gOiIifQogICAgICAgICAgJHthKGkpfQogICAgICAgICAgJHsoaS5pdGVtcz8/W10pLm1hcCh1PT51LmtpbmQ9PT0iaG90ZWwiP3IodSk6cyh1KSkuam9pbigiIil9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAoaT0+YCR7YyhpLm5hbWUpfTogJHtjKGkud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIl0uam9pbigiIil9LE1rPWU9Pm5ldyBEYXRlKGAke2V9VDEyOjAwOjAwWmApLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSksa2U9KGUsdD0hMSk9PntpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybjtjb25zdCBuPXQmJmUudmlldz09PSJtZW1iZXIiJiZYP3suLi5lLG1lbWJlcjpYfTplO1lfKG4pLG4udG9vbE5hbWVzJiYob3U9bi50b29sTmFtZXMpLChuLmJvb2tpbmdNb2RlPT09InBheS1hdC1ob3RlbCJ8fG4uYm9va2luZ01vZGU9PT0iaG9sZCIpJiYoVWY9bi5ib29raW5nTW9kZSksdHlwZW9mIG4udG9vbE5hbWVzPT0ib2JqZWN0IiYmKEhmPW4uc2FuZGJveD09PSEwLEZmPW4ucGhvbmVSZXF1aXJlZD09PSEwKSxuLmJyYW5kJiYoYnQ9U3RyaW5nKG4uYnJhbmQpKSxuLmxvZ29VcmwmJihrcz1TdHJpbmcobi5sb2dvVXJsKSksbi5wcm9ncmFtbWUmJihNZj1TdHJpbmcobi5wcm9ncmFtbWUpKSxuLm1hcmtldCYmQXJyYXkuaXNBcnJheShuLm1hcmtldC5zdXBwbGllcnMpJiYoRWU9bi5tYXJrZXQpLG4udmlldz09PSJib29raW5nIiYmKFVlPSIiKSxuLmNvZGVQcmVmaXgmJihqcz1TdHJpbmcobi5jb2RlUHJlZml4KSksdHlwZW9mIG4uZGVtbz09ImJvb2xlYW4iJiYocnU9bi5kZW1vKSxuLmRlbW9Ob3RlJiYocWY9U3RyaW5nKG4uZGVtb05vdGUpKSx0eXBlb2Ygbi5yb29tc193YW50ZWQ9PSJudW1iZXIiP1k9bi5yb29tc193YW50ZWQ6KG4udmlldz09PSJob3RlbHMifHxuLnZpZXc9PT0iZGVzdGluYXRpb25zInx8bi52aWV3PT09Im5vLWhvdGVscyIpJiZuLnN0YXk/LmNoZWNrSW4mJiF2dCYmKFk9TWF0aC5tYXgoMSxOdW1iZXIobi5hc2s/LnJvb21zPz8xKXx8MSkpLHR8fChuLnZpZXc9PT0ibWVtYmVyIiYmbi5tZW1iZXI/LnRpZXI/Lm5hbWU/WD1uLm1lbWJlcjpuLm1lbWJlcj8udGllcj8ubmFtZSYmKFg9WD8ucHJvZ3JhbW1lPT09bi5tZW1iZXIucHJvZ3JhbW1lJiZYPy50aWVyPy5uYW1lPT09bi5tZW1iZXIudGllci5uYW1lP3suLi5YLC4uLm4ubWVtYmVyLHByZWZlcmVuY2VzOm4ubWVtYmVyLnByZWZlcmVuY2VzfTpuLm1lbWJlciksKG4udmlldz09PSJzaWduZWQtb3V0Inx8bi5zaWduZWRJbj09PSExKSYmKFg9bnVsbCkpLG4uc3RheT8uY2hlY2tJbiYmIW5uJiYhdnQmJihUPXtjaGVja0luOm4uc3RheS5jaGVja0luLGNoZWNrT3V0Om4uc3RheS5jaGVja091dCxndWVzdHM6bi5zdGF5Lmd1ZXN0cz8/Mn0pLCFzdSYmKG4udmlldz09PSJ0cmlwInx8bi52aWV3PT09Im5lZWRzLWRhdGVzIikmJihUdD1uLmxpbmVzPz9bXSksKG4udmlldz09PSJib29raW5nInx8bi52aWV3PT09ImVtcHR5LXRyaXAiKSYmKFR0PVtdLHVuPTApLEJlPVN0cmluZyhuLnZpZXc/PyIiKSxEZigpO2NvbnN0IG89cGUoImJyYW5kIik7a3M/KG8uc3JjPWtzLG8uaGlkZGVuPSExLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KG8uaGlkZGVuPSEwLHBlKCJ0aXRsZSIpLmhpZGRlbj0hMSxwZSgidGl0bGUiKS50ZXh0Q29udGVudD1idHx8IkhvdGVscyIpLHBlKCJzdWIiKS50ZXh0Q29udGVudD1MayhuKSxVaygpLEJrKCk7Y29uc3Qgcj17aG90ZWxzOm1rLGRlc3RpbmF0aW9uczphaywibm8taG90ZWxzIjpnayxob3RlbDplbCwibm8tcm9vbXMiOmVsLCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOnlrLHRyaXA6d2ssIm5lZWRzLWRhdGVzIjpEayxib29raW5nOkNrLCJuZWVkcy1ndWVzdCI6VGssbWVtYmVyOklrLCJtZW1iZXItbm90LWZvdW5kIjp4aywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpOaywiY2FuY2VsbGF0aW9uLXByZXZpZXciOm9sLGNhbmNlbGxlZDpvbCwiY2hhbmdlLXByZXZpZXciOnJsLGNoYW5nZWQ6cmwsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOlprLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpqaywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpTcyxwb2xpY2llczpTcywicG9saWN5LW1pc3NpbmciOlNzLGVycm9yOkVrLCJmaW5kLWJvb2tpbmciOigpPT5bZWUoKSwnPGRpdiBjbGFzcz0ibm90ZSI+QSBib29raW5nIG1hZGUgaW4gYW5vdGhlciBjb252ZXJzYXRpb24gaXMgZm91bmQgd2l0aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCBpdCB3YXMgbWFkZSB3aXRoIC0gYm90aCwgYXMgdGhleSBhcmUgb24gdGhlIGNvbmZpcm1hdGlvbi48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb3JtIj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICAgICAgICAgPGxhYmVsPkNvbmZpcm1hdGlvbiBjb2RlPGlucHV0IGlkPSJmY29kZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiJHtRdSgpP2AgcGxhY2Vob2xkZXI9IiR7YyhRdSgpKX0iYDoiIn0+PC9sYWJlbD4KICAgICAgICAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZm1haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBvbmUgb24gdGhlIGJvb2tpbmciPjwvbGFiZWw+CiAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Imxvb2t1cC1ib29raW5nIj5GaW5kIGl0PC9idXR0b24+CiAgICAgICAgIDwvZGl2PmBdLmpvaW4oIiIpLCJuby1tZW1iZXIiOigpPT5gPGRpdiBjbGFzcz0iZW1wdHkiPk5vYm9keSBpcyBzaWduZWQgaW4sIHNvIHRoZXJlIGlzIG5vdGhpbmcgc2F2ZWQgdG8gZm9yZ2V0LjwvZGl2PiR7VW8oITApfWAsIm1lbWJlci1zaWduLWluIjooKT0+W2VlKCksJzxkaXYgY2xhc3M9Im5vdGUiPlNpZ24gaW4gd2l0aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIHByaW50ZWQgb24gdGhlIGNhcmQgdG8gc2VlIHRoZSBtZW1iZXIgcmF0ZSBvbiBldmVyeSBwcmljZSBoZXJlLjwvZGl2PicsVW8oITApXS5qb2luKCIiKX07KEJlPT09ImhvdGVsInx8QmU9PT0ibm8tcm9vbXMifHxCZT09PSJuZWVkcy1kYXRlcyIpJiZuLmhvdGVsPy5pZD8odG49U3RyaW5nKG4uaG90ZWwuaWQpLG4ubmVlZHNEYXRlcyYmc2V0VGltZW91dCgoKT0+bXMoMCwhcHMpLDApKToodG49IiIsZHUoKSksTT1uO2NvbnN0IHM9cltCZV07cGUoImNvbnRlbnQiKS5pbm5lckhUTUw9KHM/cyhuKTpgPGRpdiBjbGFzcz0iZXJyIj4ke2Mobi5lcnJvcj8/IlNvbWV0aGluZyBjYW1lIGJhY2sgdGhhdCB0aGlzIGNhcmQgZG9lcyBub3Qga25vdyBob3cgdG8gZHJhdy4iKX0ke24uZGV0YWlsP2A8YnI+JHtjKG4uZGV0YWlsKX1gOiIifTwvZGl2PmApK3FrKG4pLEJlPT09ImhvdGVscyImJiFwbigpJiYoY3U9YXUoKSxmcygpIT09Qm8mJmtlKG4sdCkpfSxxaz1lPT57Y29uc3QgdD0hIUFlLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8ubWVzc2FnZSxuPShlLnN1Z2dlc3Rpb25zPz9bXSkubWFwKChvLHIpPT5vPy5hc2t8fG8/LmFza3M/Lmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX08L2J1dHRvbj5gOm8/LnNheSYmdD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBzYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zdWdnZXN0PSIke3J9Ij4ke2Moby5sYWJlbCl9IDxzbWFsbD7CtyBpbiB0aGUgY2hhdDwvc21hbGw+PC9idXR0b24+YDoiIikuam9pbigiIik7cmV0dXJuIG4/YDxkaXYgY2xhc3M9InN1Z2dlc3QiPiR7bn08L2Rpdj5gOiIifSxEaz1lPT5bZWUoKSxlLmhvdGVsP25tKGUuaG90ZWwpOiIiLGA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLndoeT8/IldoaWNoIG5pZ2h0cz8gQSByb29tIG5lZWRzIGEgY2hlY2staW4gYW5kIGEgY2hlY2stb3V0IGRhdGUuIil9PC9kaXY+YCxLZihTdHJpbmcoZS5ob3RlbD8uaWQ/PyIiKSxlLmhvdGVsPy50b2RheVRoZXJlKV0uam9pbigiIiksTGs9ZT0+ZS52aWV3PT09ImhvdGVscyI/YCR7ZS50b3RhbD8/MH0gJHtOdW1iZXIoZS50b3RhbCk9PT0xPyJob3RlbCI6ImhvdGVscyJ9YDplLnZpZXc9PT0iaG90ZWwifHxlLnZpZXc9PT0ibm8tcm9vbXMiP1llKGUuc3RheSk6ZS52aWV3PT09InRyaXAiPyhlLmxpbmVzPz9bXSkubGVuZ3RoP1N0cmluZyhlLnRvdGFsPz8iIik6IiI6ZS52aWV3PT09ImNvbXBhcmlzb24iP2AkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA6ZS52aWV3PT09Iml0aW5lcmFyeSI/TnVtYmVyKGUuYm9va2VkKT4wP2Ake2UuYm9va2VkfS8ke2UucGxhbm5lZH0gYm9va2VkYDpgJHtlLmluVHJpcH0vJHtlLnBsYW5uZWR9IGluIHRoZSB0cmlwYDplLnZpZXc9PT0iYm9va2luZ3MiP2Ake2UuY291bnQ/PzB9IGJvb2tpbmcke051bWJlcihlLmNvdW50KT09PTE/IiI6InMifWA6IiIsQms9KCk9Pntjb25zdCBlPXBlKCJtZW1iZXJjaGlwIik7WD8oZS5oaWRkZW49ITEsZS50ZXh0Q29udGVudD1gJHtYLnRpZXI/Lm5hbWU/PyJNZW1iZXIifSDCtyAke01hdGgucm91bmQoKFgudGllcj8uZGlzY291bnQ/PzApKjEwMCl9JSBvZmZgLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsIm1lbWJlciIpLGUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsW1gubmFtZSxYLnByb2dyYW1tZV0uZmlsdGVyKHQ9PnR5cGVvZiB0PT0ic3RyaW5nIiYmdCkuam9pbigiIMK3ICIpKSk6KGUuaGlkZGVuPSFkcygic2lnbkluIil8fEJlPT09Im1lbWJlci1ub3QtZm91bmQiLGUudGV4dENvbnRlbnQ9Ik1lbWJlciBzaWduIGluIixlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJhc2stc2lnbi1pbiIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKX0sVWs9KCk9Pntjb25zdCBlPXBlKCJoZWFkdHJpcCIpLHQ9c3U/dW46dW58fFR0Lmxlbmd0aDtlLmhpZGRlbj10PT09MHx8QmU9PT0idHJpcCIscGUoImhlYWR0cmlwbiIpLnRleHRDb250ZW50PVN0cmluZyh0KX0sSGs9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3UiKTtUPXtjaGVja0luOmU/LnZhbHVlPz9ULmNoZWNrSW4sY2hlY2tPdXQ6dD8udmFsdWU/P1QuY2hlY2tPdXQsZ3Vlc3RzOk51bWJlcihuPy52YWx1ZT8/VC5ndWVzdHMpfHwyfX0seG89KGU9e30pPT5ULmNoZWNrSW4mJlQuY2hlY2tPdXQ/e2NoZWNrSW46VC5jaGVja0luLGNoZWNrT3V0OlQuY2hlY2tPdXQsZ3Vlc3RzOlQuZ3Vlc3RzLC4uLmV9OmU7bGV0IExzLG5uPSExO2NvbnN0IGR1PSgpPT57Y2xlYXJUaW1lb3V0KExzKSxubj0hMX0sbXM9KGU9MCx0PSExKT0+e3RuJiYoY2xlYXJUaW1lb3V0KExzKSxubj0hMCxMcz1zZXRUaW1lb3V0KCgpPT57aWYoIXRuKXtubj0hMTtyZXR1cm59aWYoS3Qpe21zKDE1MCx0KTtyZXR1cm59bm49ITEscSgiZ2V0SG90ZWwiLHtob3RlbDp0bixyb29tczpZLC4uLnhvKCl9LHQ/e25vdGU6bmt9Ont9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxBPWU9PntwZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSxbZGF0YS1ib29raW5nLWV4dHJhc10sW2RhdGEtYm9va2luZy1leHRyYV0sW2RhdGEtc3VnZ2VzdF0sW2RhdGEtcGxhY2VdLFtkYXRhLXBsYWNlLWFsbF0sW2RhdGEtc29ydF0sW2RhdGEtbGlzdC1yb29tc10sW2RhdGEtZmlsdGVyXSxbZGF0YS1wYW5lbF0sW2RhdGEtcmVnaW9uXSxbZGF0YS1ncm91cC1ob21lXSIpO2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFzayIpO2lmKG4hPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJ0cnVlIjt0LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIixTdHJpbmcoaykpO2NvbnN0IHc9U2tbbl07ayYmdyYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmFza1tkYXRhLWFzaz0iJHt3fSJdYCk/LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSxvbSgpO3JldHVybn1jb25zdCBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWxpc3Qtcm9vbXMiKTtpZihvIT09bnVsbCl7WT1NYXRoLm1pbihXdSxNYXRoLm1heCgxLFkrTnVtYmVyKG8pKSk7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibHJuIik7ayYmKGsudGV4dENvbnRlbnQ9U3RyaW5nKFkpKSxIbyg0NTApO3JldHVybn1jb25zdCByPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJvb21zLW4iKTtpZihyIT09bnVsbCl7SGsoKSxZPU1hdGgubWluKFd1LE1hdGgubWF4KDEsWStOdW1iZXIocikpKTtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJybiIpO2smJihrLnRleHRDb250ZW50PVN0cmluZyhZKSk7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7dyYmKHcudGV4dENvbnRlbnQ9aHMoKSksbXMoNDUwKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtcm9vbSIpO2lmKHMhPT1udWxsKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHc9dC5jbGFzc0xpc3QuY29udGFpbnMoImFkZCIpJiYhdC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT9ZOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLEc9dC5oYXNBdHRyaWJ1dGUoImRhdGEtY2kiKT97Y2hlY2tJbjp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpPz8iIixjaGVja091dDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1jbyIpPz8iIixndWVzdHM6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWd1Iik/PzIpfTp4bygpO3EoImFkZFRvVHJpcCIse2hvdGVsOmsscm9vbTpzLHJvb21zOncsLi4uR30pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihhIT09bnVsbCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1kYXkiKTtxKCJhZGRUb1RyaXAiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixleHRyYTphLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpLC4uLms/e2RheTprfTp7fX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZSIpO2lmKGkhPT1udWxsKXtjb25zdCBrPU0/LmFzaz8uc29ydCx3PU0/LnZpZXc9PT0iaG90ZWxzIj9NPy5hc2s/LnF1ZXJ5OnZvaWQgMDtCcygpO2NvbnN0IEc9TT8udmlldz09PSJkZXN0aW5hdGlvbnMifHwhIU0/LnN0YXk/LmNoZWNrSW47cSgibGlzdEhvdGVscyIsey4uLmk/e2NpdHk6aX06e30sLi4uaz97c29ydDprfTp7fSwuLi5pJiZ3P3txdWVyeTp3fTp7fSwuLi5NPy52aWV3PT09ImhvdGVscyI/SW8oTT8uYXNrKTp7fSwuLi5HP2d0KCk6e319KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1ncm91cC1ob21lIik7aWYobCl7cSgibGlzdEhvdGVscyIse2FsbDohMCxncm91cDpsLC4uLmd0KCl9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgdT10LmdldEF0dHJpYnV0ZSgiZGF0YS1maWx0ZXIiKTtpZih1IT09bnVsbCl7Y29uc3Qgaz1NPy5hc2s/P3t9LHc9SW8oayk7aWYodS5zdGFydHNXaXRoKCJncm91cDoiKSl7Y29uc3QgdGU9dS5zbGljZSg2KTt3Lmdyb3VwPXcuZ3JvdXA9PT10ZT92b2lkIDA6dGV9ZWxzZSBpZih1LnN0YXJ0c1dpdGgoImJyYW5kOiIpKXtjb25zdCB0ZT11LnNsaWNlKDYpO3cuYnJhbmQ9dy5icmFuZD09PXRlP3ZvaWQgMDp0ZX1lbHNlIGlmKHUuc3RhcnRzV2l0aCgiZmFjaWxpdHk6Iikpe2NvbnN0IHRlPXUuc2xpY2UoOSksUmU9dy5mYWNpbGl0aWVzPz9bXTt3LmZhY2lsaXRpZXM9UmUuaW5jbHVkZXModGUpP1JlLmZpbHRlcihRdD0+UXQhPT10ZSk6Wy4uLlJlLHRlXX1lbHNlKHU9PT0iZnJlZUNhbmNlbGxhdGlvbiJ8fHU9PT0iYnJlYWtmYXN0IikmJih3W3VdPSF3W3VdKTtjb25zdCBHPUlvKHcpO3EoImxpc3RIb3RlbHMiLHsuLi5YdShrKSwuLi5HfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBmaWx0ZXIgdGhlIGxpc3QuIikpO3JldHVybn1jb25zdCBkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXNvcnQiKTtpZihkIT09bnVsbCl7UGU9WWY7Y29uc3R7c29ydDprLC4uLnd9PU0/LmFzaz8/e307cSgibGlzdEhvdGVscyIsey4uLncsLi4uZCE9PSJncm91cCI/e3NvcnQ6ZH06e319KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IHJlb3JkZXIgdGhlIGxpc3QuIikpO3JldHVybn1jb25zdCBmPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlLWFsbCIpO2lmKGYhPT1udWxsKXtxKCJsaXN0SG90ZWxzIix7Y2l0eTpmLGFsbDohMCwuLi5ndCgpfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWNvbnN0IGc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYXMiKTtpZihnIT09bnVsbCl7cSgibGlzdEV4dHJhcyIsZnQoZykpLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB0aGUgYWRkLW9ucy4iKSk7cmV0dXJufWNvbnN0IHY9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZy1leHRyYSIpO2lmKHYhPT1udWxsKXtxKCJwcmV2aWV3Q2hhbmdlIix7Li4uZnQodC5nZXRBdHRyaWJ1dGUoImRhdGEtYm9va2luZyIpPz8iIiksZXh0cmE6dixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCBfPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKF8hPT1udWxsKXtxKCJsaXN0RXh0cmFzIix7aG90ZWw6XywuLi54bygpfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgJD10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZigkIT09bnVsbCl7cSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzokfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3QgUz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZihTIT09bnVsbCl7cSgicHJldmlld0NhbmNlbGxhdGlvbiIsZnQoUykpLmNhdGNoKCgpPT5BKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0IGo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZihqIT09bnVsbCl7cSgiY2FuY2VsQm9va2luZyIsey4uLmZ0KGopLGNvbmZpcm1lZDohMH0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgY2FuY2VsIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IE49dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jaGFuZ2UiKTtpZihOIT09bnVsbCl7Y29uc3Qgaz1NPy50bz8/e30sdz1NPy5mcm9tPz97fSxHPU0/LmFkZE9uLHRlPWsuY2hlY2tJbiYmKGsuY2hlY2tJbiE9PXcuY2hlY2tJbnx8ay5jaGVja091dCE9PXcuY2hlY2tPdXQpO3EoImNoYW5nZUJvb2tpbmciLHsuLi5mdChOKSxjb25maXJtZWQ6ITAsLi4udGU/e2NoZWNrSW46ay5jaGVja0luLGNoZWNrT3V0OmsuY2hlY2tPdXR9Ont9LC4uLkc/LmlkP3tleHRyYTpHLmlkLHF1YW50aXR5Ok51bWJlcihHLnRvKX06e30sLi4uay5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKGsucm9vbXMpIT09TnVtYmVyKHcucm9vbXMpP3tyb29tczpOdW1iZXIoay5yb29tcyl9Ont9LC4uLmsucm9vbU5hbWUmJmsucm9vbU5hbWUhPT13LnJvb21OYW1lP3tyb29tOmsucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3QgST10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZihJPT09ImJhY2siKXtzbCgpO3JldHVybn1jb25zdCByZT1JPT09ImJvb2tpbmdzIj8iYm9va2luZ3MiOnQuaGFzQXR0cmlidXRlKCJkYXRhLWhvdGVsIikmJiF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP2Bob3RlbDoke3QuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIil9YDoiIjtpZihyZSYmaGUubGVuZ3RoJiZjbihoZS5hdCgtMSk/LnBheWxvYWQpPT09cmUpe3NsKCk7cmV0dXJufWNvbnN0IFc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcmVnaW9uIik7aWYoVyE9PW51bGwpe2NvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKSE9PSJ0cnVlIjtmb3IoY29uc3QgdyBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yZWdpb25dIikpdy5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLFN0cmluZyhrJiZ3PT09dCkpO2Zvcihjb25zdCB3IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJlZ2lvbi1ib2R5XSIpKXcuaGlkZGVuPSFrfHx3LmdldEF0dHJpYnV0ZSgiZGF0YS1yZWdpb24tYm9keSIpIT09VztyZXR1cm59aWYoST09PSJtb3JlLWNvdW50cmllcyIpe2Zvcihjb25zdCBrIG9mKHQuY2xvc2VzdCgiW2RhdGEtcmVnaW9uLWJvZHldIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuZGVzdFtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5jbG9zZXN0KCIucGxhY2VzIik/LnJlbW92ZSgpO3JldHVybn1pZihJPT09Im1vcmUtcGxhY2VzIil7Zm9yKGNvbnN0IGsgb2YodC5jbG9zZXN0KCIucGxhY2VzIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuY2hpcC5wbGFjZVtoaWRkZW5dIikpay5oaWRkZW49ITE7dC5yZW1vdmUoKTtyZXR1cm59Y29uc3QgSD10LmdldEF0dHJpYnV0ZSgiZGF0YS1wYW5lbCIpO2lmKEghPT1udWxsKXtQZT1QZT09PUg/IiI6SDtmb3IoY29uc3QgayBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wYW5lbC1ib2R5XSIpKWsuaGlkZGVuPWsuZ2V0QXR0cmlidXRlKCJkYXRhLXBhbmVsLWJvZHkiKSE9PVBlO2Zvcihjb25zdCBrIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVsXSIpKWsuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoay5nZXRBdHRyaWJ1dGUoImRhdGEtcGFuZWwiKT09PVBlKSk7cmV0dXJufWlmKEk9PT0iY2xlYXItZmlsdGVycyIpe3EoImxpc3RIb3RlbHMiLFh1KE0/LmFzaykpLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgY2xlYXIgdGhlIGZpbHRlcnMuIikpO3JldHVybn1pZihJPT09ImFsbC1ob3RlbHMiKXtCcygpLHEoImxpc3RIb3RlbHMiLHthbGw6ITAsLi4uZ3QoKX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJwcmljZS1saXN0Iil7SG8oMCk7cmV0dXJufWlmKEk9PT0iZmluZC1ib29raW5nIil7Y29uc3Qgaz17dmlldzoiZmluZC1ib29raW5nIn07VG8oayksa2UoayksdHQoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJsb29rdXAtYm9va2luZyIpe2NvbnN0IGs9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZjb2RlIik/LnZhbHVlLnRyaW0oKT8/IiIsdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm1haWwiKT8udmFsdWUudHJpbSgpPz8iIjtpZigha3x8IXcuaW5jbHVkZXMoIkAiKSl7QSgiQm90aCB0aGUgY29uZmlybWF0aW9uIGNvZGUgYW5kIHRoZSBlbWFpbCB0aGUgYm9va2luZyB3YXMgbWFkZSB3aXRoLCBwbGVhc2UuIik7cmV0dXJufXEoImxpc3RCb29raW5ncyIse2Jvb2tpbmc6ayxlbWFpbDp3fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb29rIHRoYXQgdXAuIikpO3JldHVybn1pZihJPT09ImZpbmQiKXtybSgpO3JldHVybn1pZihJPT09InBhZ2UtbmV4dCJ8fEk9PT0icGFnZS1wcmV2Iil7Y29uc3Qgaz1NO2lmKCFrfHxrLnZpZXchPT0iaG90ZWxzIilyZXR1cm47Y29uc3Qgdz1mcygpLEc9TnVtYmVyKGsub2Zmc2V0Pz8wKSx0ZT1NYXRoLm1pbih3LChrLmhvdGVscz8/W10pLmxlbmd0aCk7cSgibGlzdEhvdGVscyIsey4uLmsuYXNrPz97fSxvZmZzZXQ6ST09PSJwYWdlLW5leHQiP0crdGU6TWF0aC5tYXgoMCxHLXcpLGxpbWl0Ond9KS50aGVuKHR0KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJmdWxsc2NyZWVuIil7QWUucmVxdWVzdERpc3BsYXlNb2RlKHttb2RlOiJmdWxsc2NyZWVuIn0pLnRoZW4oaz0+e2RuPVN0cmluZyhrPy5tb2RlPz9kbik7Y29uc3Qgdz1NO2lmKCF3KXJldHVybjtjb25zdCBHPU51bWJlcih3LnRvdGFsPz8wKTtwbigpJiZ3LnZpZXc9PT0iaG90ZWxzIiYmKE51bWJlcih3Lm9mZnNldD8/MCk+MHx8KHcuaG90ZWxzPz9bXSkubGVuZ3RoPE1hdGgubWluKDEyLEcpKT9xKCJsaXN0SG90ZWxzIix7Li4udy5hc2s/P3t9LGxpbWl0OjEyfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpOmtlKHcpfSkuY2F0Y2goKCk9PkEoIlRoaXMgYXBwIGNhbm5vdCBvcGVuIGZ1bGwgc2NyZWVuIGhlcmUuIikpO3JldHVybn1pZihJPT09Im1vcmUtaG90ZWxzIil7Y29uc3Qgaz1NO2lmKCFrfHxrLnZpZXchPT0iaG90ZWxzIilyZXR1cm47cSgibGlzdEhvdGVscyIsey4uLmsuYXNrPz97fSxvZmZzZXQ6TnVtYmVyKGsub2Zmc2V0Pz8wKSsoay5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MTJ9LHtmb2xkOnc9Pnc/LnZpZXc9PT0iaG90ZWxzIj97Li4udyxob3RlbHM6Wy4uLmsuaG90ZWxzPz9bXSwuLi53LmhvdGVscz8/W11dLHNob3duOihrLmhvdGVscz8/W10pLmxlbmd0aCsody5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0Ok51bWJlcihrLm9mZnNldD8/MCkscGxhY2VzOmsucGxhY2VzLC4uLmsud2lkZW5lZD97d2lkZW5lZDprLndpZGVuZWR9Ont9fTp3fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJob21lIil7cSgibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoKEk9PT0ibWVtYmVyInx8ST09PSJmaW5kLWJvb2tpbmcifHxJPT09ImFzay1zaWduLWluIikmJkt0KXJldHVybjtpZihJPT09Im1lbWJlciIpe2lmKCFYKXJldHVybjtjb25zdCBrPXt2aWV3OiJtZW1iZXIiLG1lbWJlcjpYfTtUbyhrKSxrZShrKSx0dCgpO3JldHVybn1pZihJPT09ImFzay1zaWduLWluIil7Y29uc3Qgaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2lnbmluIik7aWYoaylrLmhpZGRlbj0hMTtlbHNle2NvbnN0IHc9e3ZpZXc6Im1lbWJlci1zaWduLWluIn07VG8odyksa2UodyksdHQoKX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09InNpZ24taW4iKXtjb25zdCBrPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFrfHwhdyl7QSgiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufXEoInNpZ25JbiIse251bWJlcjprLHN1cm5hbWU6d30pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKEk9PT0iZm9yZ2V0LXByZWZzIil7cSgiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgZ2U9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc3VnZ2VzdCIpO2lmKGdlIT09bnVsbCl7Y29uc3Qgaz0oTT8uc3VnZ2VzdGlvbnM/P1tdKVtOdW1iZXIoZ2UpXTtrPy5hc2s/LnRvb2w/cShTdHJpbmcoay5hc2sudG9vbCksay5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6QXJyYXkuaXNBcnJheShrPy5hc2tzKSYmay5hc2tzLmxlbmd0aD8oYXN5bmMoKT0+e2Zvcihjb25zdFt3LEddb2Ygay5hc2tzLmVudHJpZXMoKSlhd2FpdCBxKFN0cmluZyhHLnRvb2wpLEcuYXJncz8/e30se3B1c2g6dz09PTB9KX0pKCkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBwdXQgYWxsIG9mIHRoZW0gaW4gdGhlIHRyaXAganVzdCBub3cuIikpOms/LnNheSYmQWUuc2VuZE1lc3NhZ2Uoe3JvbGU6InVzZXIiLGNvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OlN0cmluZyhrLnNheSl9XX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3Qgc2VuZCB0aGF0IHRvIHRoZSBjaGF0LiIpKTtyZXR1cm59aWYoST09PSJzaWduLW91dCIpe1g9bnVsbCxxKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKEk9PT0iYXNrLWJvb2siKXtjb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWdyb3VwIik7ayYmayE9PVVlJiYoVWU9ayxrZShNKSk7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3Vlc3QiKTt3JiYody5oaWRkZW49ITEpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09ImJvb2siKXtjb25zdHtwaG9uZVJlcXVpcmVkOmt9PXV1KCksdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIixHPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLHRlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncGhvbmUiKT8udmFsdWUudHJpbSgpPz8iIixSZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25vdGUiKT8udmFsdWUudHJpbSgpPz8iIixRdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3RpbWUiKT8udmFsdWUudHJpbSgpPz8iIixncz1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAoY209PmNtLmRhdGFzZXQuYXNrPz8iIikscHU9ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWQ7aWYoeGU9e25hbWU6dyxlbWFpbDpHLC4uLms/e3Bob25lOnRlfTp7fSxub3RlczpSZSxhcnJpdmluZ0F0OlF0LHJlcXVlc3RzOmdzLHJlbWVtYmVyOnB1fSwhd3x8IUcuaW5jbHVkZXMoIkAiKSl7QSh3PydUaGF0IGVtYWlsIGhhcyBubyAiQCIgaW4gaXQgLSB0aGUgY29uZmlybWF0aW9uIG5lZWRzIGFuIGFkZHJlc3MgaXQgY2FuIHJlYWNoLic6IlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwg4oCUIHRoZSBib29raW5nIGlzIGZvdW5kIGFnYWluIGJ5IHRoZSBlbWFpbCBhbmQgaXRzIGNvZGUuIik7cmV0dXJufWlmKGsmJnRlLnJlcGxhY2UoL1xEL2csIiIpLmxlbmd0aDw2KXtBKCJUaGUgYm9va2luZyBuZWVkcyBhIHBob25lIG51bWJlciwgc28gdGhlIGhvdGVsIGNhbiByZWFjaCB5b3UuIik7cmV0dXJufXEoInJlcXVlc3RCb29raW5nIix7bmFtZTp3LGVtYWlsOkcsLi4uaz97cGhvbmU6dGV9Ont9LC4uLkVlJiZVZT97Z3JvdXA6VWV9Ont9LC4uLlJlP3tub3RlczpSZX06e30sLi4uUXQ/e2Fycml2aW5nQXQ6UXR9Ont9LC4uLmdzLmxlbmd0aD97cmVxdWVzdHM6Z3N9Ont9LC4uLnB1P3tyZW1lbWJlclJlcXVlc3RzOiEwfTp7fX0pLmNhdGNoKCgpPT5BKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKEk9PT0iYm9va2luZ3MiKXtxKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKEk9PT0idHJpcCIpe3EoInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgcHQ9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtpZihwdCl7Y29uc3Qgaz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLHc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTtrJiZ3JiYoVC5jaGVja0luPWssVC5jaGVja091dD13KSxxKCJnZXRIb3RlbCIse2hvdGVsOnB0LC4uLnhvKCksLi4uVC5jaGVja0luJiZZPjE/e3Jvb21zOll9Ont9fSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfX0pO2NvbnN0IG9tPSgpPT57aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpKXJldHVybjtjb25zdCBlPXQ9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpPy52YWx1ZT8/IiI7eGU9e25hbWU6ZSgiZ25hbWUiKSxlbWFpbDplKCJnbWFpbCIpLC4uLnV1KCkucGhvbmVSZXF1aXJlZD97cGhvbmU6ZSgiZ3Bob25lIil9Ont9LG5vdGVzOmUoImdub3RlIiksYXJyaXZpbmdBdDplKCJndGltZSIpLHJlcXVlc3RzOlsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXNrW2FyaWEtcHJlc3NlZD0idHJ1ZSJdJyldLm1hcCh0PT50LmRhdGFzZXQuYXNrPz8iIikscmVtZW1iZXI6ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWR9fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmlkPz8iIjtbImduYW1lIiwiZ21haWwiLCJncGhvbmUiLCJnbm90ZSIsImd0aW1lIiwiZ3JlbWVtYmVyIl0uaW5jbHVkZXModCkmJm9tKCl9KTtjb25zdCBzbD0oKT0+e2Zvcig7aGUuYXQoLTEpPy5wYXlsb2FkPy52aWV3PT09Im1lbWJlciImJiFYOyloZT1oZS5zbGljZSgwLC0xKTtjb25zdCBlPWhlLmF0KC0xKTtpZighZXx8S3Qpe0RmKCk7cmV0dXJufWhlPWhlLnNsaWNlKDAsLTEpLERvKz0xLGR1KCksc20oKTtjb25zdCB0PWUudmVyc2lvbj09PU1vP3ZvaWQgMDpLXyhlLnBheWxvYWQpO3Q/KE09ZS5wYXlsb2FkLHEodC5rZXksdC5hcmdzLHtwdXNoOiExfSkuY2F0Y2goKCk9PmtlKGUucGF5bG9hZCwhMCkpLmZpbmFsbHkodHQpKTooa2UoZS5wYXlsb2FkLCEwKSx0dCgpKX0scm09KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aGVyZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFlKXtBKCJXaGVyZSB0bz8gQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbC4iKTtyZXR1cm59QnMoKTtjb25zdCBuPShNPy5yZWdpb25zPz9bXSkuZmxhdE1hcChvPT4oby5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKHI9PltyLm5hbWUsLi4uKHIuY2l0aWVzPz9bXSkubWFwKHM9PnMubmFtZSldKSkuZmluZChvPT5vLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpO3EoImxpc3RIb3RlbHMiLHsuLi5uP3tjaXR5Om59OntxdWVyeTplfSwuLi5ndCgpfSkuY2F0Y2goKCk9PkEoIkNvdWxkIG5vdCBzZWFyY2gganVzdCBub3cuIikpfSxCcz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjbyIpO2U/LnZhbHVlJiYoVC5jaGVja0luPWUudmFsdWUpLHQ/LnZhbHVlJiYoVC5jaGVja091dD10LnZhbHVlKSxlPy52YWx1ZSYmKHBzPSEwKX07bGV0IFVzLHZ0PSExO2NvbnN0IHNtPSgpPT57Y2xlYXJUaW1lb3V0KFVzKSx2dD0hMX0sRms9ZT0+ZT8udmlldz09PSJob3RlbHMifHxlPy52aWV3PT09Im5vLWhvdGVscyImJiEhZT8uYXNrLEhvPShlPTApPT57Y2xlYXJUaW1lb3V0KFVzKSx2dD0hMCxVcz1zZXRUaW1lb3V0KCgpPT57aWYoIUZrKE0pKXt2dD0hMTtyZXR1cm59aWYoS3Qpe0hvKDE1MCk7cmV0dXJufXZ0PSExLHEoImxpc3RIb3RlbHMiLHsuLi51ayhNPy5hc2spLC4uLmd0KCl9KS5jYXRjaCgoKT0+QSgiQ291bGQgbm90IHByaWNlIHRob3NlIG5pZ2h0cy4iKSl9LGUpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixlPT57aWYoZS50YXJnZXQ/LmlkPT09IndoZXJlIiYmZS5rZXk9PT0iRW50ZXIiJiYhZS5pc0NvbXBvc2luZyl7ZS5wcmV2ZW50RGVmYXVsdCgpLHJtKCk7cmV0dXJufWNvbnN0IHQ9ZS50YXJnZXQ7IXR8fHQuZ2V0QXR0cmlidXRlKCJyb2xlIikhPT0iYnV0dG9uInx8ZS5rZXkhPT0iRW50ZXIiJiZlLmtleSE9PSIgInx8KGUucHJldmVudERlZmF1bHQoKSx0LmNsaWNrKCkpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDt0Py50eXBlPT09ImRhdGUiJiYocHM9ITApO2NvbnN0IG89e2RjaTpbImRjaSIsImRjbyJdLGRjbzpbImRjaSIsImRjbyJdLGxjaTpbImxjaSIsImxjbyJdLGxjbzpbImxjaSIsImxjbyJdfVt0Py5pZD8/IiJdO2lmKG8pe2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob1swXSksbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzFdKTtpZighaXx8IWwpcmV0dXJuO2lmKHQuaWQ9PT1vWzBdJiZpLnZhbHVlKXtjb25zdCB1PVdlKGkudmFsdWUsMSk7bC5taW49dSwoIWwudmFsdWV8fGwudmFsdWU8PWkudmFsdWUpJiYobC52YWx1ZT11KX1ULmNoZWNrSW49aS52YWx1ZXx8VC5jaGVja0luLFQuY2hlY2tPdXQ9bC52YWx1ZXx8VC5jaGVja091dCxvWzBdPT09ImxjaSImJkhvKDMwMCk7cmV0dXJufWlmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIXJ8fCFzKXJldHVybjtpZih0LmlkPT09ImNpIiYmci52YWx1ZSl7Y29uc3QgaT1XZShyLnZhbHVlLDEpO3MubWluPWksKCFzLnZhbHVlfHxzLnZhbHVlPD1yLnZhbHVlKSYmKHMudmFsdWU9aSl9VC5jaGVja0luPXIudmFsdWV8fFQuY2hlY2tJbixULmNoZWNrT3V0PXMudmFsdWV8fFQuY2hlY2tPdXQ7Y29uc3QgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7YSYmKGEudGV4dENvbnRlbnQ9aHMoKSksbXMoKX0pO2NvbnN0IGltPShlLHQpPT57dHJ5e0xmKHQpO2NvbnN0IG49ZT9KU09OLnN0cmluZ2lmeShlKToiIjtpZihuJiZuPT09VmYmJkpTT04uc3RyaW5naWZ5KE0pPT09SmYpcmV0dXJuO2U/LnN0YXk/LmNoZWNrSW4mJihwcz0hMCksaGU9W10sRG8rPTEsZHUoKSxzbSgpLFBlPVlmLGtlKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxwZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07QWUub250b29scmVzdWx0PWU9PmltKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtjb25zdCBhbT1lPT57QXJyYXkuaXNBcnJheShlPy5hdmFpbGFibGVEaXNwbGF5TW9kZXMpJiYodG09ZS5hdmFpbGFibGVEaXNwbGF5TW9kZXMubWFwKFN0cmluZykpLHR5cGVvZiBlPy5kaXNwbGF5TW9kZT09InN0cmluZyImJmUuZGlzcGxheU1vZGUhPT1kbiYmKGRuPWUuZGlzcGxheU1vZGUsTT8udmlldz09PSJob3RlbHMiJiZrZShNKSl9O2xldCBpbDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e2NsZWFyVGltZW91dChpbCksaWw9c2V0VGltZW91dCgoKT0+e00/LnZpZXchPT0iaG90ZWxzInx8cG4oKXx8KGN1PWF1KCksZnMoKSE9PUJvJiZrZShNKSl9LDE1MCl9KTtBZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT57TmYoZSxqZiksYW0oZSl9O0FlLmNvbm5lY3QoKS50aGVuKCgpPT57Y29uc3QgZT1BZS5nZXRIb3N0Q29udGV4dCgpO05mKGUsamYpLGFtKGUpO2NvbnN0IHQ9ZT8udG9vbEluZm8/LnJlc3VsdD8uc3RydWN0dXJlZENvbnRlbnQ7dCYmaW0odCxlPy50b29sSW5mbz8ucmVzdWx0Py5fbWV0YSl9KS5jYXRjaCgoKT0+e3BlKCJjb250ZW50IikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlbXB0eSI+Q291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGhvc3QuPC9kaXY+J30pOzwvc2NyaXB0PgogICAgPHN0eWxlIHJlbD0ic3R5bGVzaGVldCIgY3Jvc3NvcmlnaW4+OnJvb3R7LS1raXQtYmc6ICNmZmZmZmY7LS1raXQtYmctc29mdDogI2Y2ZjdmOTstLWtpdC1mZzogIzFhMWYyYjstLWtpdC1mZy1zb2Z0OiAjNjI2YjdhOy0ta2l0LWZnLWZhaW50OiAjOGE5M2ExOy0ta2l0LWxpbmU6ICNlM2U3ZWQ7LS1raXQtYWNjZW50OiAjMWExZjJiOy0ta2l0LWFjY2VudC1mZzogI2ZmZmZmZjstLWtpdC1saW5rOiAjMjU2M2ViOy0ta2l0LWdvb2Q6ICMxYTdmNWE7LS1raXQtZ29vZC1iZzogI2RkZjNlNDstLWtpdC1iYWQ6ICNiMzI2MWU7LS1raXQtYmFkLWJnOiAjZmJlNmU0Oy0ta2l0LXdhcm46ICM4YTVhMDA7LS1raXQtd2Fybi1iZzogI2ZkZjBkNTstLWtpdC1yaW5nOiAjMjU2M2VifVtkYXRhLXRoZW1lPWRhcmtdey0ta2l0LWJnOiAjMWQxZjIzOy0ta2l0LWJnLXNvZnQ6ICMyNjI5MmU7LS1raXQtZmc6ICNlY2VlZjE7LS1raXQtZmctc29mdDogI2E0YWJiNjstLWtpdC1mZy1mYWludDogIzdjODQ5MTstLWtpdC1saW5lOiAjMzYzYTQxOy0ta2l0LWFjY2VudDogI2VjZWVmMTstLWtpdC1hY2NlbnQtZmc6ICMxZDFmMjM7LS1raXQtbGluazogIzdhYTdmZjstLWtpdC1nb29kOiAjNmZkM2EyOy0ta2l0LWdvb2QtYmc6ICMxZjNhMmQ7LS1raXQtYmFkOiAjZmY4YTgwOy0ta2l0LWJhZC1iZzogIzNkMjMyMjstLWtpdC13YXJuOiAjZjJjNDZiOy0ta2l0LXdhcm4tYmc6ICMzYTMwMjA7LS1raXQtcmluZzogIzdhYTdmZn06cm9vdHstLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnksIHZhcigtLWtpdC1iZykpOy0tYmctc29mdDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zZWNvbmRhcnksIHZhcigtLWtpdC1iZy1zb2Z0KSk7LS1mZzogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5LCB2YXIoLS1raXQtZmcpKTstLWZnLXNvZnQ6IHZhcigtLWNvbG9yLXRleHQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtZmctc29mdCkpOy0tZmctZmFpbnQ6IHZhcigtLWNvbG9yLXRleHQtdGVydGlhcnksIHZhcigtLWtpdC1mZy1mYWludCkpOy0tbGluZTogdmFyKC0tY29sb3ItYm9yZGVyLXByaW1hcnksIHZhcigtLWtpdC1saW5lKSk7LS1hY2NlbnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudCkpOy0tYWNjZW50LWZnOiB2YXIoLS1jb2xvci10ZXh0LWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQtZmcpKTstLWxpbms6IHZhcigtLWNvbG9yLXRleHQtaW5mbywgdmFyKC0ta2l0LWxpbmspKTstLWdvb2Q6IHZhcigtLWNvbG9yLXRleHQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QpKTstLWdvb2QtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcywgdmFyKC0ta2l0LWdvb2QtYmcpKTstLWJhZDogdmFyKC0tY29sb3ItdGV4dC1kYW5nZXIsIHZhcigtLWtpdC1iYWQpKTstLWJhZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIsIHZhcigtLWtpdC1iYWQtYmcpKTstLXdhcm46IHZhcigtLWNvbG9yLXRleHQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4pKTstLXdhcm4tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtd2FybmluZywgdmFyKC0ta2l0LXdhcm4tYmcpKTstLXJpbmc6IHZhcigtLWNvbG9yLXJpbmctcHJpbWFyeSwgdmFyKC0ta2l0LXJpbmcpKTstLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sZywgMTRweCk7LS1yYWRpdXMtc206IHZhcigtLWJvcmRlci1yYWRpdXMtc20sIDlweCk7LS1mb250OiB2YXIoLS1mb250LXNhbnMsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBzYW5zLXNlcmlmKTstLW1vbm86IHZhcigtLWZvbnQtbW9ubywgdWktbW9ub3NwYWNlLCAiU0YgTW9ubyIsIE1lbmxvLCBtb25vc3BhY2UpOy0tc2hhZG93OiB2YXIoLS1zaGFkb3ctc20sIDAgMXB4IDJweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCksIDAgMnB4IDVweCByZ2JhKDEwLCAyMCwgNDAsIC4wNCkpfSp7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uY2FyZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3gtc2hhZG93OnZhcigtLXNoYWRvdyk7bWF4LXdpZHRoOjU2MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0taW5zZXQtbGVmdCwgMHB4KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWluc2V0LXJpZ2h0LCAwcHgpfS5oZWFke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjE0cHggMThweCAwfS5oZWFkIC50aXRsZXtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC50aXRsZVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0jY29udGVudHtwYWRkaW5nOjEwcHggMThweCAxOHB4fS5yZWZyZXNoe21hcmdpbi1sZWZ0OjhweDthbGlnbi1zZWxmOmNlbnRlcjtmbGV4Om5vbmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O3BhZGRpbmc6MDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjEycyxjb2xvciAuMTJzfS5yZWZyZXNoOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLWZnKTtib3JkZXItY29sb3I6dmFyKC0tZmctc29mdCl9LnJlZnJlc2g6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNn0ucmVmcmVzaFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ucmVmcmVzaCBzdmd7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtkaXNwbGF5OmJsb2NrfS5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpraXQtc3BpbiAuN3MgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMga2l0LXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uZW1wdHl7cGFkZGluZzoxOHB4IDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHh9LmhpbnR7bWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vdGV7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nOjAgMCAxMHB4fS5tb25ve2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctZmFpbnQpfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcH0uYmFkZ2Uub2t7Y29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uYmFkZ2Uud2FybiwuYmFkZ2UudG9kb3tjb2xvcjp2YXIoLS13YXJuKTtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpfS5iYWRnZS5lcnJ7Y29sb3I6dmFyKC0tYmFkKTtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyl9LmJ1eXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ0cHg7cGFkZGluZzoxMXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hY2NlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NTA7Y3Vyc29yOnBvaW50ZXJ9LmJ1eTpkaXNhYmxlZHtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1jb2xvcjp2YXIoLS1saW5lKTtjb2xvcjp2YXIoLS1mZy1mYWludCk7Y3Vyc29yOmRlZmF1bHR9LmJ1eS5hbHQsLmdob3N0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSl9Lmdob3N0e2ZsZXg6MTttaW4taGVpZ2h0OjQwcHg7cGFkZGluZzo5cHggMTBweDtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Y3Vyc29yOnBvaW50ZXJ9Lmxpbmt7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6NnB4IDAgMDtjb2xvcjp2YXIoLS1saW5rKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnF0eXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHh9LnF0eSBidXR0b257d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE3cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0ucXR5IHNwYW57bWluLXdpZHRoOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTB9LmNrLXBhZ2Vye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4IDEycHg7bWFyZ2luLXRvcDoxNHB4fS5jay1wYWdlci1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6NHB4O21pbi13aWR0aDoxMTJweDtoZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30uY2stcGFnZXItYnRuIHN2ZywuY2stcGFnZXItYWxsIHN2Z3t3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2ZsZXg6bm9uZX0uY2stcGFnZXItYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0uY2stcGFnZXItYnRuOmFjdGl2ZTpub3QoOmRpc2FibGVkKXt0cmFuc2Zvcm06dHJhbnNsYXRlWSguNXB4KX0uY2stcGFnZXItYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWZnLWZhaW50KTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O29wYWNpdHk6LjY7Y3Vyc29yOmRlZmF1bHR9LmNrLXBhZ2VyLW57bWluLXdpZHRoOjhjaDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jay1wYWdlci1hbGx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O3dpZHRoOmZpdC1jb250ZW50O2hlaWdodDozMnB4O21hcmdpbjo2cHggYXV0byAwO3BhZGRpbmc6MCAxMnB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDpub25lO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LmNrLXBhZ2VyLWFsbDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnKX0uY2stcGFnZXItYWxsOmZpcnN0LWNoaWxkLC5ncmlkKy5jay1wYWdlci1hbGx7bWFyZ2luLXRvcDoxNHB4fWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0uY2stcGFnZXItYnRue21pbi13aWR0aDoxMDRweDtoZWlnaHQ6NDBweH0uY2stcGFnZXItYWxse2hlaWdodDozNnB4fS5xdHkgYnV0dG9ue3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7Zm9udC1zaXplOjE5cHh9LnJlZnJlc2h7d2lkdGg6MzRweDtoZWlnaHQ6MzRweH0uaGludCwubm90ZSwuZW1wdHl7Zm9udC1zaXplOjEzcHh9fUBtZWRpYShwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOm5vbmV9Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSNjb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHh9LmhlYWR7bWluLWhlaWdodDoyOHB4fS5ob21le2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDttYXJnaW46MDtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjttaW4td2lkdGg6MH0uaG9tZTpob3ZlcntvcGFjaXR5Oi43Mn0uaGVhZCAuYnJhbmR7bWF4LWhlaWdodDozNHB4O21heC13aWR0aDoxNTBweDtvYmplY3QtZml0OmNvbnRhaW59LmhlYWQgLnRpdGxle2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTVweDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmJhY2tidG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDExcHggNHB4IDhweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDttYXgtd2lkdGg6NDIlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2N1cnNvcjpwb2ludGVyfS5iYWNrYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmcpfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uY2FyZC5idXN5e29wYWNpdHk6LjYyfS5jYXJkLmJ1c3kgYnV0dG9uLC5jYXJkLmJ1c3kgaW5wdXQsLmNhcmQuYnVzeSBzZWxlY3R7cG9pbnRlci1ldmVudHM6bm9uZX0ubWVtYmVyY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5tZW1iZXJjaGlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lmxpbmt5e2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2NvbG9yOnZhcigtLWxpbmspO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LnAtd2Fze2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucC1tZW1iZXJ7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uc3VtLmdvb2Qgc3BhbjpsYXN0LWNoaWxke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmRlbW97ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LmRlbW8gYntmb250LXdlaWdodDo3MDB9LmNpdHlncm91cCsuY2l0eWdyb3Vwe21hcmdpbi10b3A6MTRweH0uY2l0eW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tYm90dG9tOjhweH0uY2l0eW5hbWUgc21hbGx7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwO29wYWNpdHk6Ljc1fS50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE5NnB4LDFmcikpO2dhcDoxMHB4fS50aWxle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tYmcpO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7cGFkZGluZzowfS50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1mZy1mYWludCl9LnQtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTthc3BlY3QtcmF0aW86MTYgLyAxMDtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnQtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnQtbWFya3tmb250LXNpemU6MzBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07b3BhY2l0eTouOTI7dGV4dC1zaGFkb3c6MCAxcHggMTJweCByZ2IoMCAwIDAgLyAyMiUpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udC1zaG90IGltZywuaGVybyBpbWd7ei1pbmRleDoxfS50LWJyYW5ke3otaW5kZXg6Mjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgxMTJweCwxZnIpIG1pbm1heCgxMTJweCwxZnIpIGF1dG8gMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbCwuc3RheSAuZ3Vlc3Rze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0uZmxleC1kYXRlc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZzoycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmZke2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O21pbi13aWR0aDo3OHB4O3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9LmZkOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mZC1kYXl7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtO2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOm5vd3JhcH0uZmQtcHJpY2V7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2NTA7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZmQub257YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Y3Vyc29yOmRlZmF1bHR9LmZkLm9uIC5mZC1kYXl7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtvcGFjaXR5Oi44NX0uZmQuYmVzdHtib3JkZXItY29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uZmQuYmVzdCAuZmQtcHJpY2UsLmZkLmJlc3QgLmZkLWRheXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5mZC5vdXQgLmZkLXByaWNle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtd2VpZ2h0OjUwMH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6dmFyKC0tYmcpfS5ub3Rle2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS41fS5mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHg7bWFyZ2luLXRvcDoxMHB4fS5mb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5mb3JtIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjhweCA5cHh9LmZvcm0gLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uY29uZntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweCAxMnB4fS5jb25mIC5jb2Rle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjcyMDtsZXR0ZXItc3BhY2luZzouMDZlbTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbmYgLndoZXJle2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwfS5jb25mIC53aGVue2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnVucGFpZHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ud2Fybm5vdGV7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzo5cHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udGlsZS5vdmVye29wYWNpdHk6LjgyfS5hc2tlZC1saW5le2ZvbnQtc3R5bGU6aXRhbGljfS5hc2tlZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYXNrZWQgYntmb250LXdlaWdodDo3MjA7Y29sb3I6dmFyKC0tZmcpfS5hc2tlZC5mbGFne2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLXdhcm4pfS5hc2tlZC5mbGFnIGJ7Y29sb3I6dmFyKC0td2Fybil9LmFza3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5hc2tzLXR7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcC5hc2t7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHh9LmNoaXAuYXNrW2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgYWN0aW9uIiAidGh1bWIgcHJpY2UgYWN0aW9uIn0ucm93LndpdGh0aHVtYiAudGh1bWJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDthbGlnbi1zZWxmOnN0YXJ0fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0uY21wLXdyYXB7b3ZlcmZsb3cteDphdXRvO21hcmdpbi1pbmxpbmU6LTJweDtwYWRkaW5nOjJweH0uY21we2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDc2cHgsOTZweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMTJweCwxZnIpKTthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6OHB4fS5jbXAuZm91cntncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDU2cHgsNzJweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCg5NnB4LDFmcikpfS5jbXAtY29ybmVye2dyaWQtY29sdW1uOjE7Z3JpZC1yb3c6MSAvIHNwYW4gdmFyKC0taGVhZC1yb3dzLCA1KX0uY21wLWhlYWR7ZGlzcGxheTpncmlkO2dyaWQtcm93OjEgLyBzcGFuIHZhcigtLWhlYWQtcm93cywgNSk7Z3JpZC10ZW1wbGF0ZS1yb3dzOnN1YmdyaWQ7cm93LWdhcDo2cHg7YWxpZ24tY29udGVudDpzdGFydDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjA7cGFkZGluZy1ib3R0b206MTJweH0uY21wLWhlYWQ+LmNvbC1uYW1lLC5jbXAtaGVhZD4uY29sLXByaWNlLC5jbXAtaGVhZD4ud2h5LC5jbXAtaGVhZD4ucGN7bWFyZ2luLWlubGluZToxMXB4fS5jbXAtaGVhZD4uY29sLW5hbWV7bWFyZ2luLXRvcDo0cHh9LndoeS5ub25le2JvcmRlcjowO3BhZGRpbmc6MH0ucGlja21hcmsubm9uZXt2aXNpYmlsaXR5OmhpZGRlbn0uY21wIC5re21hcmdpbi10b3A6MH0uY21wLWhlYWQucGlja3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQpfS5jbXAtaGVhZCAudC1zaG90e2FzcGVjdC1yYXRpbzoxNiAvIDk7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmNvbC1uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uY29sLWdyb3Vwe2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXAucGxhY2UuZ3JvdXAgaW1ne2hlaWdodDoyMHB4O3dpZHRoOmF1dG87Ym9yZGVyLXJhZGl1czo1cHg7bWFyZ2luLWlubGluZS1lbmQ6N3B4O3ZlcnRpY2FsLWFsaWduOi01cHh9W2RhdGEtdGhlbWU9ZGFya10gLmhlYWQgLmJyYW5ke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjJweCA1cHh9LmNvbC1wcmljZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb2wtcHJpY2Ugc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jb2wtcHJpY2Ugc21hbGwuc3Vie2Rpc3BsYXk6YmxvY2t9LndoeXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItaW5saW5lLXN0YXJ0OjJweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nLWlubGluZS1zdGFydDo4cHh9LnBje2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweDtmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDV9LnBjIGRpdntkaXNwbGF5OmZsZXg7Z2FwOjVweH0ucGMgLm17ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo3MDB9LnBjIC5wcm8gLm17Y29sb3I6dmFyKC0tZ29vZCl9LnBjIC5jb24gLm17Y29sb3I6dmFyKC0tZmctc29mdCl9LmNtcCAuaywuY21wIC52e2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NTtwYWRkaW5nOjZweCA4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY21wIC5re2dyaWQtY29sdW1uOjE7Y29sb3I6dmFyKC0tZmctc29mdCk7cG9zaXRpb246c3RpY2t5O2luc2V0LWlubGluZS1zdGFydDowO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5jbXAgLnZ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jbXAgLnYuYWx0LC5jbXAgLms6aGFzKCsudi5hbHQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czo2cHh9LnBpY2ttYXJre2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjNweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fS5kYXlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoyOHB4IDFmcjtnYXA6MTBweH0uZGF5bnVte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHh9LmRheW51bSBie2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5bnVtIGl7ZmxleDoxO3dpZHRoOjFweDtiYWNrZ3JvdW5kOnZhcigtLWxpbmUpfS5kYXlyb3c6bGFzdC1jaGlsZCAuZGF5bnVtIGl7ZGlzcGxheTpub25lfS5kYXlib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxNHB4O21pbi13aWR0aDowfS5kYXlsYWJlbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmRheW5vdGV7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9Lm1vbWVudHN7bGlzdC1zdHlsZTpub25lO21hcmdpbjoycHggMCAwO3BhZGRpbmc6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHh9Lm1vbWVudHMgbGl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczo4NHB4IDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5tb21lbnRzIC53aGVue292ZXJmbG93LXdyYXA6YW55d2hlcmU7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubW9tZW50cyAud2hhdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjR9Lm1vbWVudHMgLndoYXQgYntmb250LXdlaWdodDo2MjB9Lm1vbWVudHMgLndoYXQgc21hbGx7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6OTZweCAxZnI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpwb2ludGVyfS5wbGFuLXN0YXkgLnBzLXNob3R7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0Ojg0cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0ucGxhbi1zdGF5IC5wcy1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ucGxhbi1zdGF5IC5wcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6M3B4O3BhZGRpbmc6OXB4IDEwcHggOXB4IDA7bWluLXdpZHRoOjB9LnBsYW4tc3RheSAubmFtZXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLXN0YXkgLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4tc3RheSAucHMtcHJpY2V7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjIwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucGxhbi1uaWdodHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXRvcDoxcHggZGFzaGVkIHZhcigtLWxpbmUpO3BhZGRpbmctdG9wOjZweDtjdXJzb3I6cG9pbnRlcn0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fS5zdWdnZXN0e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21hcmdpbi10b3A6MTRweH0uc3VnZ2VzdCAuY2hpcHtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHggMTFweDtjb2xvcjp2YXIoLS1mZyl9LnN1Z2dlc3QgLmNoaXA6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LnN1Z2dlc3QgLmNoaXA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZm9ybSBsYWJlbC5yZW1lbWJlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZvbnQtd2VpZ2h0OjQwMDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtdHJhbnNmb3JtOm5vbmU7bGV0dGVyLXNwYWNpbmc6MH0uZm9ybSBsYWJlbC5yZW1lbWJlciBpbnB1dHttYXJnaW46MnB4IDAgMH0ucGxhY2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwLnBsYWNle2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtwYWRkaW5nOjRweCAxMHB4O2NvbG9yOnZhcigtLWZnKX0uY2hpcC5wbGFjZSBzbWFsbHtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNoaXAucGxhY2U6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmNoaXAucGxhY2UudGFie2ZvbnQtd2VpZ2h0OjYwMH0uY2hpcC5wbGFjZS50YWJbYXJpYS1leHBhbmRlZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5jaGlwLnBsYWNlOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LnN1Z2dlc3QgLmNoaXAuc2F5IHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpfS5maW5kZXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHh9LmZpbmRlciBpbnB1dHtmbGV4OjE7bWluLXdpZHRoOjA7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OXB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpfS5maW5kZXIgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0ucmVnaW9ue2Rpc3BsYXk6Z3JpZDtnYXA6MTBweH0uY291bnRyeW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjZweH0uY291bnRyeW5hbWUgc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0e2Rpc3BsYXk6Z3JpZDtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSl9LmRlc3Q6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOjB9LmRlc3QtY291bnRyeXtqdXN0aWZ5LXNlbGY6c3RhcnQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDpub25lO2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmxlZnR9LmRlc3QtY291bnRyeSBzbWFsbHtmb250LXdlaWdodDo0MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmRlc3QtY291bnRyeSAubntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3QtY291bnRyeTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5kZXN0LWNvdW50cnk6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZmluZGVyIC5nb3tmbGV4Om5vbmU7cGFkZGluZzo5cHggMThweDtmb250LXNpemU6MTNweH0uc29ydHMta3thbGlnbi1zZWxmOmNlbnRlcjtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1yaWdodDoycHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9LnNlYXJjaHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnNlYXJjaCAuc3RheXtwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lfS5zZWFyY2ggLndoZXJle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zZWFyY2ggLndoZXJlIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo5cHggMTFweH0uc2VhcmNoIC53aGVyZSBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5zZWFyY2ggLnN0YXkgLmdve3BhZGRpbmc6OXB4IDE0cHg7Zm9udC1zaXplOjEzcHh9LnQtdGFnc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjRweDttYXJnaW4tdG9wOjRweH0udC1mcm9tLnQtbm9uZXtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHh9LnN0YXkgLmdvLnF1aWV0e3BhZGRpbmc6OHB4IDEycHg7Zm9udC1zaXplOjEyLjVweH0uZmlsdGVyLXBhbmVse2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uZmdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udC1mcm9tIC50LXN1YntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MXB4fS5jaGlwLnNvcnRbYXJpYS1wcmVzc2VkPXRydWVdIHNtYWxse2NvbG9yOmluaGVyaXR9LmNoaXAudG9vbHtmb250LXdlaWdodDo2MDB9LmNoaXAudG9vbFthcmlhLWV4cGFuZGVkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgPGRpdiBjbGFzcz0iaGVhZCI+CiAgICAgICAgPCEtLSBUaGUgZ3JvdXAncyB3b3JkbWFyayBhcnJpdmVzIFdJVEggVEhFIERBVEEgYXMgYGxvZ29VcmxgLiBOb3RoaW5nIGlzCiAgICAgICAgICAgICBiYWtlZCBpbiBoZXJlOiBhIGxvZ28gY29tcGlsZWQgaW50byB0aGUgY2FyZCBpcyB0aGUgZmlyc3QgYnJhbmQncywKICAgICAgICAgICAgIGFuZCBldmVyeSBob3RlbCBncm91cCBhZnRlciB0aGVtIHdvdWxkIHdlYXIgaXQuIC0tPgogICAgICAgIDwhLS0gVGhlIHdheSBiYWNrLCBvbiBldmVyeSB2aWV3LiBXaXRob3V0IGl0IHRoZSB0cmlwLCB0aGUgYm9va2luZ3MgbGlzdAogICAgICAgICAgICAgYW5kIGEgY2FuY2VsbGVkIGJvb2tpbmcgYXJlIGFsbCBwbGFjZXMgYSBndWVzdCBjYW4gcmVhY2ggYW5kIG5vdAogICAgICAgICAgICAgbGVhdmUgKHJvYmluLCAyMDI2LTA5LTE4KS4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaG9tZSIgaWQ9ImhvbWUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiIGFyaWEtbGFiZWw9IkJhY2sgdG8gdGhlIGhvdGVscyI+CiAgICAgICAgICA8aW1nIGNsYXNzPSJicmFuZCIgaWQ9ImJyYW5kIiBhbHQ9IiIgaGlkZGVuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRpdGxlIiBpZD0idGl0bGUiPjwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8IS0tIE9uZSBzdGVwIGJhY2sgSU5TSURFIHRoZSBjYXJkLiBUaGUgYnJhbmQgYWJvdmUgZ29lcyBob21lLCB3aGljaCBpcyBhCiAgICAgICAgICAgICBkaWZmZXJlbnQgYW5zd2VyOyB0aGlzIGNvbWVzIGJhY2sgdG8gdGhlIG9uZSB0aGV5IHdlcmUgcmVhZGluZyAtIHRoZQogICAgICAgICAgICAgdGhyZWUgaG90ZWxzIHRoZXkgd2VyZSBjb21wYXJpbmcgd2hlbiB0aGV5IHRhcHBlZCBvbmUgKHJvYmluLAogICAgICAgICAgICAgMjAyNi0wOS0yMSkuIEhpZGRlbiB1bmxlc3MgdGhlcmUgaXMgc29tZXdoZXJlIHRvIGdvIGJhY2sgdG8sIGFuZAogICAgICAgICAgICAgY2xlYXJlZCB3aGVuZXZlciB0aGUgY29udmVyc2F0aW9uIHNlbmRzIGEgbmV3IGFuc3dlci4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFja2J0biIgaWQ9ImJhY2tidG4iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJhY2siIGhpZGRlbj48L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic3ViIiBpZD0ic3ViIj48L3NwYW4+CiAgICAgICAgPCEtLSBUaGUgdGllciwgb3IgdGhlIHdheSBpbi4gQSBtZW1iZXIgcmF0ZSBpcyBhIGZhY3QgYWJvdXQgZXZlcnkgcHJpY2UKICAgICAgICAgICAgIG9uIHRoZSBjYXJkLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBoZWFkZXIgcmF0aGVyIHRoYW4gb24gb25lIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbWJlcmNoaXAiIGlkPSJtZW1iZXJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+PC9idXR0b24+CiAgICAgICAgPCEtLSBUaGUgdHJpcCwgZnJvbSB0aGUgdG9wLiBUaGUgc2hvcHBpbmcgY2FyZCBsZWFybmVkIG9uIDIwMjYtMDktMTcgdGhhdAogICAgICAgICAgICAgYSBmb290ZXItb25seSBjYXJ0IG1lYW5zIHNjcm9sbGluZyBwYXN0IHR3ZW50eSB0aWxlcyB0byByZWFjaCBpdC4KICAgICAgICAgICAgIFNob3duIG9uY2UgdGhlIHRyaXAgaGFzIHNvbWV0aGluZyBpbiBpdCwgaGlkZGVuIG9uIHRoZSB0cmlwIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhlYWR0cmlwIiBpZD0iaGVhZHRyaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiIGhpZGRlbiBhcmlhLWxhYmVsPSJWaWV3IHRoZSB0cmlwIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIgogICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNCA4LjVoMTZ2MTFhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0xM0ExLjUgMS41IDAgMCAxIDQgMTkuNXoiIC8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDguNVY2YTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAydjIuNSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gaWQ9ImhlYWR0cmlwbiI+MDwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjxkaXYgY2xhc3M9ImVtcHR5Ij5Mb2FkaW5n4oCmPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K', 'base64').toString('utf8');
6
6
  /** sha256 of everything the card is built from (card-kit's source-hash.mjs) - the drift guard reads this. */
7
- export const HOTEL_CARD_SOURCE_SHA = '53ac1cc5caab2d02b95cac270452814dbe0ad9baafe4ba87dcd66bade754a4e7';
7
+ export const HOTEL_CARD_SOURCE_SHA = '5879945f50a521382c1fd4284901e05191a26cedac03d3f75951976b796768e2';
8
8
  //# sourceMappingURL=card.generated.js.map