@valbuild/ui 0.60.9 → 0.60.11

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.
@@ -19,13 +19,19 @@ const VAL_APP_PATH = "/app";
19
19
  const files = JSON.parse(
20
20
  `{"/assets/index-Ke_pMnnU.js":"dmFyIFFEPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZUk9KGUsdCxuKT0+dCBpbiBlP1FEKGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pOmVbdF09bjt2YXIgdnQ9KGUsdCxuKT0+KGVJKGUsdHlwZW9mIHQhPSJzeW1ib2wiP3QrIiI6dCxuKSxuKSx0ST0oZSx0LG4pPT57aWYoIXQuaGFzKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90ICIrbil9O3ZhciBCdj0oZSx0LG4pPT57aWYodC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik7dCBpbnN0YW5jZW9mIFdlYWtTZXQ/dC5hZGQoZSk6dC5zZXQoZSxuKX07dmFyIHdwPShlLHQsbik9Pih0SShlLHQsImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLG4pO2Z1bmN0aW9uIGdPKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHI9dFtuXTtpZih0eXBlb2YgciE9InN0cmluZyImJiFBcnJheS5pc0FycmF5KHIpKXtmb3IoY29uc3QgbyBpbiByKWlmKG8hPT0iZGVmYXVsdCImJiEobyBpbiBlKSl7Y29uc3QgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk7aSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyxpLmdldD9pOntlbnVtZXJhYmxlOiEwLGdldDooKT0+cltvXX0pfX19cmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKX0oZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKS5yZWxMaXN0O2lmKHQmJnQuc3VwcG9ydHMmJnQuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKSlyZXR1cm47Zm9yKGNvbnN0IG8gb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXScpKXIobyk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIobz0+e2Zvcihjb25zdCBpIG9mIG8paWYoaS50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGNvbnN0IHMgb2YgaS5hZGRlZE5vZGVzKXMudGFnTmFtZT09PSJMSU5LIiYmcy5yZWw9PT0ibW9kdWxlcHJlbG9hZCImJnIocyl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW9uIG4obyl7Y29uc3QgaT17fTtyZXR1cm4gby5pbnRlZ3JpdHkmJihpLmludGVncml0eT1vLmludGVncml0eSksby5yZWZlcnJlclBvbGljeSYmKGkucmVmZXJyZXJQb2xpY3k9by5yZWZlcnJlclBvbGljeSksby5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGVudGlhbHMiP2kuY3JlZGVudGlhbHM9ImluY2x1ZGUiOm8uY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj9pLmNyZWRlbnRpYWxzPSJvbWl0IjppLmNyZWRlbnRpYWxzPSJzYW1lLW9yaWdpbiIsaX1mdW5jdGlvbiByKG8pe2lmKG8uZXApcmV0dXJuO28uZXA9ITA7Y29uc3QgaT1uKG8pO2ZldGNoKG8uaHJlZixpKX19KSgpO3ZhciBuST10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIHNpKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gckkoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PWUuZGVmYXVsdDtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil7dmFyIG49ZnVuY3Rpb24gcigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygcj9SZWZsZWN0LmNvbnN0cnVjdCh0LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07bi5wcm90b3R5cGU9dC5wcm90b3R5cGV9ZWxzZSBuPXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4scixvLmdldD9vOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSksbn12YXIgdk89e2V4cG9ydHM6e319LFdlPXt9Oy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIEtmPVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxvST1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxpST1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLHNJPVN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksYUk9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxsST1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLGNJPVN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSx1ST1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLGRJPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksZkk9U3ltYm9sLmZvcigicmVhY3QubWVtbyIpLHBJPVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKSxfUz1TeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gaEkoZSl7cmV0dXJuIGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCI/bnVsbDooZT1fUyYmZVtfU118fGVbIkBAaXRlcmF0b3IiXSx0eXBlb2YgZT09ImZ1bmN0aW9uIj9lOm51bGwpfXZhciB5Tz17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0seE89T2JqZWN0LmFzc2lnbixiTz17fTtmdW5jdGlvbiBydShlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1iTyx0aGlzLnVwZGF0ZXI9bnx8eU99cnUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e307cnUucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QiJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmZSE9bnVsbCl0aHJvdyBFcnJvcigic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuIik7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUsdCwic2V0U3RhdGUiKX07cnUucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLCJmb3JjZVVwZGF0ZSIpfTtmdW5jdGlvbiB3Tygpe313Ty5wcm90b3R5cGU9cnUucHJvdG90eXBlO2Z1bmN0aW9uIFNiKGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWJPLHRoaXMudXBkYXRlcj1ufHx5T312YXIga2I9U2IucHJvdG90eXBlPW5ldyB3TztrYi5jb25zdHJ1Y3Rvcj1TYjt4TyhrYixydS5wcm90b3R5cGUpO2tiLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBDUz1BcnJheS5pc0FycmF5LFNPPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksRWI9e2N1cnJlbnQ6bnVsbH0sa089e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBFTyhlLHQsbil7dmFyIHIsbz17fSxpPW51bGwscz1udWxsO2lmKHQhPW51bGwpZm9yKHIgaW4gdC5yZWYhPT12b2lkIDAmJihzPXQucmVmKSx0LmtleSE9PXZvaWQgMCYmKGk9IiIrdC5rZXkpLHQpU08uY2FsbCh0LHIpJiYha08uaGFzT3duUHJvcGVydHkocikmJihvW3JdPXRbcl0pO3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgtMjtpZihhPT09MSlvLmNoaWxkcmVuPW47ZWxzZSBpZigxPGEpe2Zvcih2YXIgbD1BcnJheShhKSxjPTA7YzxhO2MrKylsW2NdPWFyZ3VtZW50c1tjKzJdO28uY2hpbGRyZW49bH1pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiBhPWUuZGVmYXVsdFByb3BzLGEpb1tyXT09PXZvaWQgMCYmKG9bcl09YVtyXSk7cmV0dXJueyQkdHlwZW9mOktmLHR5cGU6ZSxrZXk6aSxyZWY6cyxwcm9wczpvLF9vd25lcjpFYi5jdXJyZW50fX1mdW5jdGlvbiBtSShlLHQpe3JldHVybnskJHR5cGVvZjpLZix0eXBlOmUudHlwZSxrZXk6dCxyZWY6ZS5yZWYscHJvcHM6ZS5wcm9wcyxfb3duZXI6ZS5fb3duZXJ9fWZ1bmN0aW9uIF9iKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiZlLiQkdHlwZW9mPT09S2Z9ZnVuY3Rpb24gZ0koZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrZS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24obil7cmV0dXJuIHRbbl19KX12YXIgT1M9L1wvKy9nO2Z1bmN0aW9uIFV2KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJmUua2V5IT1udWxsP2dJKCIiK2Uua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBvaChlLHQsbixyLG8pe3ZhciBpPXR5cGVvZiBlOyhpPT09InVuZGVmaW5lZCJ8fGk9PT0iYm9vbGVhbiIpJiYoZT1udWxsKTt2YXIgcz0hMTtpZihlPT09bnVsbClzPSEwO2Vsc2Ugc3dpdGNoKGkpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6cz0hMDticmVhaztjYXNlIm9iamVjdCI6c3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgS2Y6Y2FzZSBvSTpzPSEwfX1pZihzKXJldHVybiBzPWUsbz1vKHMpLGU9cj09PSIiPyIuIitVdihzLDApOnIsQ1Mobyk/KG49IiIsZSE9bnVsbCYmKG49ZS5yZXBsYWNlKE9TLCIkJi8iKSsiLyIpLG9oKG8sdCxuLCIiLGZ1bmN0aW9uKGMpe3JldHVybiBjfSkpOm8hPW51bGwmJihfYihvKSYmKG89bUkobyxuKyghby5rZXl8fHMmJnMua2V5PT09by5rZXk/IiI6KCIiK28ua2V5KS5yZXBsYWNlKE9TLCIkJi8iKSsiLyIpK2UpKSx0LnB1c2gobykpLDE7aWYocz0wLHI9cj09PSIiPyIuIjpyKyI6IixDUyhlKSlmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7aT1lW2FdO3ZhciBsPXIrVXYoaSxhKTtzKz1vaChpLHQsbixsLG8pfWVsc2UgaWYobD1oSShlKSx0eXBlb2YgbD09ImZ1bmN0aW9uIilmb3IoZT1sLmNhbGwoZSksYT0wOyEoaT1lLm5leHQoKSkuZG9uZTspaT1pLnZhbHVlLGw9citVdihpLGErKykscys9b2goaSx0LG4sbCxvKTtlbHNlIGlmKGk9PT0ib2JqZWN0Iil0aHJvdyB0PVN0cmluZyhlKSxFcnJvcigiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiAiKyh0PT09IltvYmplY3QgT2JqZWN0XSI/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoZSkuam9pbigiLCAiKSsifSI6dCkrIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC4iKTtyZXR1cm4gc31mdW5jdGlvbiBTcChlLHQsbil7aWYoZT09bnVsbClyZXR1cm4gZTt2YXIgcj1bXSxvPTA7cmV0dXJuIG9oKGUsciwiIiwiIixmdW5jdGlvbihpKXtyZXR1cm4gdC5jYWxsKG4saSxvKyspfSkscn1mdW5jdGlvbiB2SShlKXtpZihlLl9zdGF0dXM9PT0tMSl7dmFyIHQ9ZS5fcmVzdWx0O3Q9dCgpLHQudGhlbihmdW5jdGlvbihuKXsoZS5fc3RhdHVzPT09MHx8ZS5fc3RhdHVzPT09LTEpJiYoZS5fc3RhdHVzPTEsZS5fcmVzdWx0PW4pfSxmdW5jdGlvbihuKXsoZS5fc3RhdHVzPT09MHx8ZS5fc3RhdHVzPT09LTEpJiYoZS5fc3RhdHVzPTIsZS5fcmVzdWx0PW4pfSksZS5fc3RhdHVzPT09LTEmJihlLl9zdGF0dXM9MCxlLl9yZXN1bHQ9dCl9aWYoZS5fc3RhdHVzPT09MSlyZXR1cm4gZS5fcmVzdWx0LmRlZmF1bHQ7dGhyb3cgZS5fcmVzdWx0fXZhciBKbj17Y3VycmVudDpudWxsfSxpaD17dHJhbnNpdGlvbjpudWxsfSx5ST17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjpKbixSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzppaCxSZWFjdEN1cnJlbnRPd25lcjpFYn07V2UuQ2hpbGRyZW49e21hcDpTcCxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXtTcChlLGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG4pfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBTcChlLGZ1bmN0aW9uKCl7dCsrfSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gU3AoZSxmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighX2IoZSkpdGhyb3cgRXJyb3IoIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLiIpO3JldHVybiBlfX07V2UuQ29tcG9uZW50PXJ1O1dlLkZyYWdtZW50PWlJO1dlLlByb2ZpbGVyPWFJO1dlLlB1cmVDb21wb25lbnQ9U2I7V2UuU3RyaWN0TW9kZT1zSTtXZS5TdXNwZW5zZT1kSTtXZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD15STtXZS5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKGU9PW51bGwpdGhyb3cgRXJyb3IoIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkICIrZSsiLiIpO3ZhciByPXhPKHt9LGUucHJvcHMpLG89ZS5rZXksaT1lLnJlZixzPWUuX293bmVyO2lmKHQhPW51bGwpe2lmKHQucmVmIT09dm9pZCAwJiYoaT10LnJlZixzPUViLmN1cnJlbnQpLHQua2V5IT09dm9pZCAwJiYobz0iIit0LmtleSksZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzKXZhciBhPWUudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGwgaW4gdClTTy5jYWxsKHQsbCkmJiFrTy5oYXNPd25Qcm9wZXJ0eShsKSYmKHJbbF09dFtsXT09PXZvaWQgMCYmYSE9PXZvaWQgMD9hW2xdOnRbbF0pfXZhciBsPWFyZ3VtZW50cy5sZW5ndGgtMjtpZihsPT09MSlyLmNoaWxkcmVuPW47ZWxzZSBpZigxPGwpe2E9QXJyYXkobCk7Zm9yKHZhciBjPTA7YzxsO2MrKylhW2NdPWFyZ3VtZW50c1tjKzJdO3IuY2hpbGRyZW49YX1yZXR1cm57JCR0eXBlb2Y6S2YsdHlwZTplLnR5cGUsa2V5Om8scmVmOmkscHJvcHM6cixfb3duZXI6c319O1dlLmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9eyQkdHlwZW9mOmNJLF9jdXJyZW50VmFsdWU6ZSxfY3VycmVudFZhbHVlMjplLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbCxfZGVmYXVsdFZhbHVlOm51bGwsX2dsb2JhbE5hbWU6bnVsbH0sZS5Qcm92aWRlcj17JCR0eXBlb2Y6bEksX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfTtXZS5jcmVhdGVFbGVtZW50PUVPO1dlLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9RU8uYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fTtXZS5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX07V2UuZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6dUkscmVuZGVyOmV9fTtXZS5pc1ZhbGlkRWxlbWVudD1fYjtXZS5sYXp5PWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpwSSxfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmV9LF9pbml0OnZJfX07V2UubWVtbz1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpmSSx0eXBlOmUsY29tcGFyZTp0PT09dm9pZCAwP251bGw6dH19O1dlLnN0YXJ0VHJhbnNpdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1paC50cmFuc2l0aW9uO2loLnRyYW5zaXRpb249e307dHJ5e2UoKX1maW5hbGx5e2loLnRyYW5zaXRpb249dH19O1dlLnVuc3RhYmxlX2FjdD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJhY3QoLi4uKSBpcyBub3Qgc3VwcG9ydGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIG9mIFJlYWN0LiIpfTtXZS51c2VDYWxsYmFjaz1mdW5jdGlvbihlLHQpe3JldHVybiBKbi5jdXJyZW50LnVzZUNhbGxiYWNrKGUsdCl9O1dlLnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEpuLmN1cnJlbnQudXNlQ29udGV4dChlKX07V2UudXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe307V2UudXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSm4uY3VycmVudC51c2VEZWZlcnJlZFZhbHVlKGUpfTtXZS51c2VFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSm4uY3VycmVudC51c2VFZmZlY3QoZSx0KX07V2UudXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSm4uY3VycmVudC51c2VJZCgpfTtXZS51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSm4uY3VycmVudC51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxuKX07V2UudXNlSW5zZXJ0aW9uRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEpuLmN1cnJlbnQudXNlSW5zZXJ0aW9uRWZmZWN0KGUsdCl9O1dlLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBKbi5jdXJyZW50LnVzZUxheW91dEVmZmVjdChlLHQpfTtXZS51c2VNZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEpuLmN1cnJlbnQudXNlTWVtbyhlLHQpfTtXZS51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSm4uY3VycmVudC51c2VSZWR1Y2VyKGUsdCxuKX07V2UudXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBKbi5jdXJyZW50LnVzZVJlZihlKX07V2UudXNlU3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpuLmN1cnJlbnQudXNlU3RhdGUoZSl9O1dlLnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSm4uY3VycmVudC51c2VTeW5jRXh0ZXJuYWxTdG9yZShlLHQsbil9O1dlLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gSm4uY3VycmVudC51c2VUcmFuc2l0aW9uKCl9O1dlLnZlcnNpb249IjE4LjIuMCI7dk8uZXhwb3J0cz1XZTt2YXIgaD12Ty5leHBvcnRzO2NvbnN0IFg9c2koaCksX089Z08oe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6WH0sW2hdKTt2YXIgeWQ9e30sQ089e2V4cG9ydHM6e319LFJyPXt9LE9PPXtleHBvcnRzOnt9fSxUTz17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChPLFIpe3ZhciBOPU8ubGVuZ3RoO08ucHVzaChSKTtlOmZvcig7MDxOOyl7dmFyIGo9Ti0xPj4+MSxHPU9bal07aWYoMDxvKEcsUikpT1tqXT1SLE9bTl09RyxOPWo7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBuKE8pe3JldHVybiBPLmxlbmd0aD09PTA/bnVsbDpPWzBdfWZ1bmN0aW9uIHIoTyl7aWYoTy5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciBSPU9bMF0sTj1PLnBvcCgpO2lmKE4hPT1SKXtPWzBdPU47ZTpmb3IodmFyIGo9MCxHPU8ubGVuZ3RoLHhlPUc+Pj4xO2o8eGU7KXt2YXIgdWU9MiooaisxKS0xLGplPU9bdWVdLENlPXVlKzEsUT1PW0NlXTtpZigwPm8oamUsTikpQ2U8RyYmMD5vKFEsamUpPyhPW2pdPVEsT1tDZV09TixqPUNlKTooT1tqXT1qZSxPW3VlXT1OLGo9dWUpO2Vsc2UgaWYoQ2U8RyYmMD5vKFEsTikpT1tqXT1RLE9bQ2VdPU4saj1DZTtlbHNlIGJyZWFrIGV9fXJldHVybiBSfWZ1bmN0aW9uIG8oTyxSKXt2YXIgTj1PLnNvcnRJbmRleC1SLnNvcnRJbmRleDtyZXR1cm4gTiE9PTA/TjpPLmlkLVIuaWR9aWYodHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIil7dmFyIGk9cGVyZm9ybWFuY2U7ZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gaS5ub3coKX19ZWxzZXt2YXIgcz1EYXRlLGE9cy5ub3coKTtlLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBzLm5vdygpLWF9fXZhciBsPVtdLGM9W10sdT0xLGQ9bnVsbCxmPTMscD0hMSxtPSExLGc9ITEseT10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0Om51bGwsdj10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDpudWxsLHg9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24gdyhPKXtmb3IodmFyIFI9bihjKTtSIT09bnVsbDspe2lmKFIuY2FsbGJhY2s9PT1udWxsKXIoYyk7ZWxzZSBpZihSLnN0YXJ0VGltZTw9TylyKGMpLFIuc29ydEluZGV4PVIuZXhwaXJhdGlvblRpbWUsdChsLFIpO2Vsc2UgYnJlYWs7Uj1uKGMpfX1mdW5jdGlvbiBrKE8pe2lmKGc9ITEsdyhPKSwhbSlpZihuKGwpIT09bnVsbCltPSEwLEMoRSk7ZWxzZXt2YXIgUj1uKGMpO1IhPT1udWxsJiZUKGssUi5zdGFydFRpbWUtTyl9fWZ1bmN0aW9uIEUoTyxSKXttPSExLGcmJihnPSExLHYoUCksUD0tMSkscD0hMDt2YXIgTj1mO3RyeXtmb3IodyhSKSxkPW4obCk7ZCE9PW51bGwmJighKGQuZXhwaXJhdGlvblRpbWU+Uil8fE8mJiFJKCkpOyl7dmFyIGo9ZC5jYWxsYmFjaztpZih0eXBlb2Ygaj09ImZ1bmN0aW9uIil7ZC5jYWxsYmFjaz1udWxsLGY9ZC5wcmlvcml0eUxldmVsO3ZhciBHPWooZC5leHBpcmF0aW9uVGltZTw9Uik7Uj1lLnVuc3RhYmxlX25vdygpLHR5cGVvZiBHPT0iZnVuY3Rpb24iP2QuY2FsbGJhY2s9RzpkPT09bihsKSYmcihsKSx3KFIpfWVsc2UgcihsKTtkPW4obCl9aWYoZCE9PW51bGwpdmFyIHhlPSEwO2Vsc2V7dmFyIHVlPW4oYyk7dWUhPT1udWxsJiZUKGssdWUuc3RhcnRUaW1lLVIpLHhlPSExfXJldHVybiB4ZX1maW5hbGx5e2Q9bnVsbCxmPU4scD0hMX19dmFyIFM9ITEsXz1udWxsLFA9LTEsTT01LEE9LTE7ZnVuY3Rpb24gSSgpe3JldHVybiEoZS51bnN0YWJsZV9ub3coKS1BPE0pfWZ1bmN0aW9uIEwoKXtpZihfIT09bnVsbCl7dmFyIE89ZS51bnN0YWJsZV9ub3coKTtBPU87dmFyIFI9ITA7dHJ5e1I9XyghMCxPKX1maW5hbGx5e1I/cmUoKTooUz0hMSxfPW51bGwpfX1lbHNlIFM9ITF9dmFyIHJlO2lmKHR5cGVvZiB4PT0iZnVuY3Rpb24iKXJlPWZ1bmN0aW9uKCl7eChMKX07ZWxzZSBpZih0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiKXt2YXIgVj1uZXcgTWVzc2FnZUNoYW5uZWwsSz1WLnBvcnQyO1YucG9ydDEub25tZXNzYWdlPUwscmU9ZnVuY3Rpb24oKXtLLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIHJlPWZ1bmN0aW9uKCl7eShMLDApfTtmdW5jdGlvbiBDKE8pe189TyxTfHwoUz0hMCxyZSgpKX1mdW5jdGlvbiBUKE8sUil7UD15KGZ1bmN0aW9uKCl7TyhlLnVuc3RhYmxlX25vdygpKX0sUil9ZS51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSxlLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsZS51bnN0YWJsZV9Mb3dQcmlvcml0eT00LGUudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MyxlLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLGUudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MixlLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKE8pe08uY2FsbGJhY2s9bnVsbH0sZS51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe218fHB8fChtPSEwLEMoRSkpfSxlLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKE8pezA+T3x8MTI1PE8/Y29uc29sZS5lcnJvcigiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkIik6TT0wPE8/TWF0aC5mbG9vcigxZTMvTyk6NX0sZS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBmfSxlLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIG4obCl9LGUudW5zdGFibGVfbmV4dD1mdW5jdGlvbihPKXtzd2l0Y2goZil7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIFI9MzticmVhaztkZWZhdWx0OlI9Zn12YXIgTj1mO2Y9Ujt0cnl7cmV0dXJuIE8oKX1maW5hbGx5e2Y9Tn19LGUudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9LGUudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7fSxlLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihPLFIpe3N3aXRjaChPKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6Tz0zfXZhciBOPWY7Zj1PO3RyeXtyZXR1cm4gUigpfWZpbmFsbHl7Zj1OfX0sZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKE8sUixOKXt2YXIgaj1lLnVuc3RhYmxlX25vdygpO3N3aXRjaCh0eXBlb2YgTj09Im9iamVjdCImJk4hPT1udWxsPyhOPU4uZGVsYXksTj10eXBlb2YgTj09Im51bWJlciImJjA8Tj9qK046aik6Tj1qLE8pe2Nhc2UgMTp2YXIgRz0tMTticmVhaztjYXNlIDI6Rz0yNTA7YnJlYWs7Y2FzZSA1Okc9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6Rz0xZTQ7YnJlYWs7ZGVmYXVsdDpHPTVlM31yZXR1cm4gRz1OK0csTz17aWQ6dSsrLGNhbGxiYWNrOlIscHJpb3JpdHlMZXZlbDpPLHN0YXJ0VGltZTpOLGV4cGlyYXRpb25UaW1lOkcsc29ydEluZGV4Oi0xfSxOPmo/KE8uc29ydEluZGV4PU4sdChjLE8pLG4obCk9PT1udWxsJiZPPT09bihjKSYmKGc/KHYoUCksUD0tMSk6Zz0hMCxUKGssTi1qKSkpOihPLnNvcnRJbmRleD1HLHQobCxPKSxtfHxwfHwobT0hMCxDKEUpKSksT30sZS51bnN0YWJsZV9zaG91bGRZaWVsZD1JLGUudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKE8pe3ZhciBSPWY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIE49ZjtmPVI7dHJ5e3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2Y9Tn19fX0pKFRPKTtPTy5leHBvcnRzPVRPO3ZhciB4ST1PTy5leHBvcnRzOy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBQTz1oLE9yPXhJO2Z1bmN0aW9uIEgoZSl7Zm9yKHZhciB0PSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Usbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgTU89bmV3IFNldCxqZD17fTtmdW5jdGlvbiBnbChlLHQpe1JjKGUsdCksUmMoZSsiQ2FwdHVyZSIsdCl9ZnVuY3Rpb24gUmMoZSx0KXtmb3IoamRbZV09dCxlPTA7ZTx0Lmxlbmd0aDtlKyspTU8uYWRkKHRbZV0pfXZhciBNaT0hKHR5cGVvZiB3aW5kb3c+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PiJ1IiksaTA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxiST0vXls6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXVs6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXC0uMC05XHUwMEI3XHUwMzAwLVx1MDM2Rlx1MjAzRi1cdTIwNDBdKiQvLFRTPXt9LFBTPXt9O2Z1bmN0aW9uIHdJKGUpe3JldHVybiBpMC5jYWxsKFBTLGUpPyEwOmkwLmNhbGwoVFMsZSk/ITE6YkkudGVzdChlKT9QU1tlXT0hMDooVFNbZV09ITAsITEpfWZ1bmN0aW9uIFNJKGUsdCxuLHIpe2lmKG4hPT1udWxsJiZuLnR5cGU9PT0wKXJldHVybiExO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnJldHVybiEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIHI/ITE6biE9PW51bGw/IW4uYWNjZXB0c0Jvb2xlYW5zOihlPWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpLGUhPT0iZGF0YS0iJiZlIT09ImFyaWEtIik7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24ga0koZSx0LG4scil7aWYodD09PW51bGx8fHR5cGVvZiB0PiJ1Inx8U0koZSx0LG4scikpcmV0dXJuITA7aWYocilyZXR1cm4hMTtpZihuIT09bnVsbClzd2l0Y2gobi50eXBlKXtjYXNlIDM6cmV0dXJuIXQ7Y2FzZSA0OnJldHVybiB0PT09ITE7Y2FzZSA1OnJldHVybiBpc05hTih0KTtjYXNlIDY6cmV0dXJuIGlzTmFOKHQpfHwxPnR9cmV0dXJuITF9ZnVuY3Rpb24gUW4oZSx0LG4scixvLGkscyl7dGhpcy5hY2NlcHRzQm9vbGVhbnM9dD09PTJ8fHQ9PT0zfHx0PT09NCx0aGlzLmF0dHJpYnV0ZU5hbWU9cix0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1vLHRoaXMubXVzdFVzZVByb3BlcnR5PW4sdGhpcy5wcm9wZXJ0eU5hbWU9ZSx0aGlzLnR5cGU9dCx0aGlzLnNhbml0aXplVVJMPWksdGhpcy5yZW1vdmVFbXB0eVN0cmluZz1zfXZhciBPbj17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7T25bZV09bmV3IFFuKGUsMCwhMSxlLG51bGwsITEsITEpfSk7W1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07T25bdF09bmV3IFFuKHQsMSwhMSxlWzFdLG51bGwsITEsITEpfSk7WyJjb250ZW50RWRpdGFibGUiLCJkcmFnZ2FibGUiLCJzcGVsbENoZWNrIiwidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09uW2VdPW5ldyBRbihlLDIsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbihlKXtPbltlXT1uZXcgUW4oZSwyLCExLGUsbnVsbCwhMSwhMSl9KTsiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09uW2VdPW5ldyBRbihlLDMsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihlKXtPbltlXT1uZXcgUW4oZSwzLCEwLGUsbnVsbCwhMSwhMSl9KTtbImNhcHR1cmUiLCJkb3dubG9hZCJdLmZvckVhY2goZnVuY3Rpb24oZSl7T25bZV09bmV3IFFuKGUsNCwhMSxlLG51bGwsITEsITEpfSk7WyJjb2xzIiwicm93cyIsInNpemUiLCJzcGFuIl0uZm9yRWFjaChmdW5jdGlvbihlKXtPbltlXT1uZXcgUW4oZSw2LCExLGUsbnVsbCwhMSwhMSl9KTtbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goZnVuY3Rpb24oZSl7T25bZV09bmV3IFFuKGUsNSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTt2YXIgQ2I9L1tcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIE9iKGUpe3JldHVybiBlWzFdLnRvVXBwZXJDYXNlKCl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKENiLE9iKTtPblt0XT1uZXcgUW4odCwxLCExLGUsbnVsbCwhMSwhMSl9KTsieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKENiLE9iKTtPblt0XT1uZXcgUW4odCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExLCExKX0pO1sieG1sOmJhc2UiLCJ4bWw6bGFuZyIsInhtbDpzcGFjZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKENiLE9iKTtPblt0XT1uZXcgUW4odCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsITEsITEpfSk7WyJ0YWJJbmRleCIsImNyb3NzT3JpZ2luIl0uZm9yRWFjaChmdW5jdGlvbihlKXtPbltlXT1uZXcgUW4oZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO09uLnhsaW5rSHJlZj1uZXcgUW4oInhsaW5rSHJlZiIsMSwhMSwieGxpbms6aHJlZiIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCEwLCExKTtbInNyYyIsImhyZWYiLCJhY3Rpb24iLCJmb3JtQWN0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihlKXtPbltlXT1uZXcgUW4oZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO2Z1bmN0aW9uIFRiKGUsdCxuLHIpe3ZhciBvPU9uLmhhc093blByb3BlcnR5KHQpP09uW3RdOm51bGw7KG8hPT1udWxsP28udHlwZSE9PTA6cnx8ISgyPHQubGVuZ3RoKXx8dFswXSE9PSJvIiYmdFswXSE9PSJPInx8dFsxXSE9PSJuIiYmdFsxXSE9PSJOIikmJihrSSh0LG4sbyxyKSYmKG49bnVsbCkscnx8bz09PW51bGw/d0kodCkmJihuPT09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK24pKTpvLm11c3RVc2VQcm9wZXJ0eT9lW28ucHJvcGVydHlOYW1lXT1uPT09bnVsbD9vLnR5cGU9PT0zPyExOiIiOm46KHQ9by5hdHRyaWJ1dGVOYW1lLHI9by5hdHRyaWJ1dGVOYW1lc3BhY2Usbj09PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG89by50eXBlLG49bz09PTN8fG89PT00JiZuPT09ITA/IiI6IiIrbixyP2Uuc2V0QXR0cmlidXRlTlMocix0LG4pOmUuc2V0QXR0cmlidXRlKHQsbikpKSl9dmFyIEJpPVBPLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELGtwPVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSx0Yz1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxuYz1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLFBiPVN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksczA9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxSTz1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLE5PPVN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSxNYj1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLGEwPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksbDA9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpLFJiPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSx2cz1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksJE89U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIiksTVM9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIGJ1KGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9TVMmJmVbTVNdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgUnQ9T2JqZWN0LmFzc2lnbixWdjtmdW5jdGlvbiBIdShlKXtpZihWdj09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgdD1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7VnY9dCYmdFsxXXx8IiJ9cmV0dXJuYApgK1Z2K2V9dmFyIEh2PSExO2Z1bmN0aW9uIFd2KGUsdCl7aWYoIWV8fEh2KXJldHVybiIiO0h2PSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYodClpZih0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKGMpe3ZhciByPWN9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaChjKXtyPWN9ZS5jYWxsKHQucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGMpe3I9Y31lKCl9fWNhdGNoKGMpe2lmKGMmJnImJnR5cGVvZiBjLnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBvPWMuc3RhY2suc3BsaXQoYApgKSxpPXIuc3RhY2suc3BsaXQoYApgKSxzPW8ubGVuZ3RoLTEsYT1pLmxlbmd0aC0xOzE8PXMmJjA8PWEmJm9bc10hPT1pW2FdOylhLS07Zm9yKDsxPD1zJiYwPD1hO3MtLSxhLS0paWYob1tzXSE9PWlbYV0pe2lmKHMhPT0xfHxhIT09MSlkbyBpZihzLS0sYS0tLDA+YXx8b1tzXSE9PWlbYV0pe3ZhciBsPWAKYCtvW3NdLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZsLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYobD1sLnJlcGxhY2UoIjxhbm9ueW1vdXM+IixlLmRpc3BsYXlOYW1lKSksbH13aGlsZSgxPD1zJiYwPD1hKTticmVha319fWZpbmFsbHl7SHY9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZToiIik/SHUoZSk6IiJ9ZnVuY3Rpb24gRUkoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDU6cmV0dXJuIEh1KGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4gSHUoIkxhenkiKTtjYXNlIDEzOnJldHVybiBIdSgiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiBIdSgiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBlPVd2KGUudHlwZSwhMSksZTtjYXNlIDExOnJldHVybiBlPVd2KGUudHlwZS5yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPVd2KGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBjMChlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIG5jOnJldHVybiJGcmFnbWVudCI7Y2FzZSB0YzpyZXR1cm4iUG9ydGFsIjtjYXNlIHMwOnJldHVybiJQcm9maWxlciI7Y2FzZSBQYjpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBhMDpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgbDA6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIGU9PSJvYmplY3QiKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIE5POnJldHVybihlLmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgUk86cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBNYjp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSBSYjpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6YzAoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgdnM6dD1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIGMwKGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gX0koZSl7dmFyIHQ9ZS50eXBlO3N3aXRjaChlLnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4odC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybih0Ll9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gZT10LnJlbmRlcixlPWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdC5kaXNwbGF5TmFtZXx8KGUhPT0iIj8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiB0O2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gYzAodCk7Y2FzZSA4OnJldHVybiB0PT09UGI/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gS3MoZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBBTyhlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PT09ImNoZWNrYm94Inx8dD09PSJyYWRpbyIpfWZ1bmN0aW9uIENJKGUpe3ZhciB0PUFPKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBvPW4uZ2V0LGk9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24ocyl7cj0iIitzLGkuY2FsbCh0aGlzLHMpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKHMpe3I9IiIrc30sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gRXAoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPUNJKGUpKX1mdW5jdGlvbiBETyhlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPUFPKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSxlPXIsZSE9PW4/KHQuc2V0VmFsdWUoZSksITApOiExfWZ1bmN0aW9uIERoKGUpe2lmKGU9ZXx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX1mdW5jdGlvbiB1MChlLHQpe3ZhciBuPXQuY2hlY2tlZDtyZXR1cm4gUnQoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gUlMoZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZT09bnVsbD8iIjp0LmRlZmF1bHRWYWx1ZSxyPXQuY2hlY2tlZCE9bnVsbD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZDtuPUtzKHQudmFsdWUhPW51bGw/dC52YWx1ZTpuKSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDp0LnR5cGU9PT0iY2hlY2tib3gifHx0LnR5cGU9PT0icmFkaW8iP3QuY2hlY2tlZCE9bnVsbDp0LnZhbHVlIT1udWxsfX1mdW5jdGlvbiBJTyhlLHQpe3Q9dC5jaGVja2VkLHQhPW51bGwmJlRiKGUsImNoZWNrZWQiLHQsITEpfWZ1bmN0aW9uIGQwKGUsdCl7SU8oZSx0KTt2YXIgbj1Lcyh0LnZhbHVlKSxyPXQudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJmUudmFsdWU9PT0iInx8ZS52YWx1ZSE9bikmJihlLnZhbHVlPSIiK24pOmUudmFsdWUhPT0iIituJiYoZS52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe2UucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn10Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP2YwKGUsdC50eXBlLG4pOnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZmMChlLHQudHlwZSxLcyh0LmRlZmF1bHRWYWx1ZSkpLHQuY2hlY2tlZD09bnVsbCYmdC5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKGUuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiBOUyhlLHQsbil7aWYodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPXQudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fHQudmFsdWUhPT12b2lkIDAmJnQudmFsdWUhPT1udWxsKSlyZXR1cm47dD0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fHQ9PT1lLnZhbHVlfHwoZS52YWx1ZT10KSxlLmRlZmF1bHRWYWx1ZT10fW49ZS5uYW1lLG4hPT0iIiYmKGUubmFtZT0iIiksZS5kZWZhdWx0Q2hlY2tlZD0hIWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJihlLm5hbWU9bil9ZnVuY3Rpb24gZjAoZSx0LG4peyh0IT09Im51bWJlciJ8fERoKGUub3duZXJEb2N1bWVudCkhPT1lKSYmKG49PW51bGw/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK24mJihlLmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIFd1PUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdmMoZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitLcyhuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bil7ZVtvXS5zZWxlY3RlZD0hMCxyJiYoZVtvXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtvXS5kaXNhYmxlZHx8KHQ9ZVtvXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gcDAoZSx0KXtpZih0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKEgoOTEpKTtyZXR1cm4gUnQoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uICRTKGUsdCl7dmFyIG49dC52YWx1ZTtpZihuPT1udWxsKXtpZihuPXQuY2hpbGRyZW4sdD10LmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZih0IT1udWxsKXRocm93IEVycm9yKEgoOTIpKTtpZihXdShuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihIKDkzKSk7bj1uWzBdfXQ9bn10PT1udWxsJiYodD0iIiksbj10fWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOktzKG4pfX1mdW5jdGlvbiBMTyhlLHQpe3ZhciBuPUtzKHQudmFsdWUpLHI9S3ModC5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PWUudmFsdWUmJihlLnZhbHVlPW4pLHQuZGVmYXVsdFZhbHVlPT1udWxsJiZlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKGUuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIEFTKGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJnQhPT0iIiYmdCE9PW51bGwmJihlLnZhbHVlPXQpfWZ1bmN0aW9uIGpPKGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gaDAoZSx0KXtyZXR1cm4gZT09bnVsbHx8ZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj9qTyh0KTplPT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmdD09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ZX12YXIgX3Asek89ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKHQsbixyLG8pe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLHIsbyl9KX06ZX0oZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKF9wPV9wfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxfcC5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9X3AuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIHpkKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIHhkPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxPST1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKHhkKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09JLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSkseGRbdF09eGRbZV19KX0pO2Z1bmN0aW9uIEZPKGUsdCxuKXtyZXR1cm4gdD09bnVsbHx8dHlwZW9mIHQ9PSJib29sZWFuInx8dD09PSIiPyIiOm58fHR5cGVvZiB0IT0ibnVtYmVyInx8dD09PTB8fHhkLmhhc093blByb3BlcnR5KGUpJiZ4ZFtlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBCTyhlLHQpe2U9ZS5zdHlsZTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLG89Rk8obix0W25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP2Uuc2V0UHJvcGVydHkobixvKTplW25dPW99fXZhciBUST1SdCh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBtMChlLHQpe2lmKHQpe2lmKFRJW2VdJiYodC5jaGlsZHJlbiE9bnVsbHx8dC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoSCgxMzcsZSkpO2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKHQuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoSCg2MCkpO2lmKHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKEgoNjEpKX1pZih0LnN0eWxlIT1udWxsJiZ0eXBlb2YgdC5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoSCg2MikpfX1mdW5jdGlvbiBnMChlLHQpe2lmKGUuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiB0LmlzPT0ic3RyaW5nIjtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgdjA9bnVsbDtmdW5jdGlvbiBOYihlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIHkwPW51bGwseWM9bnVsbCx4Yz1udWxsO2Z1bmN0aW9uIERTKGUpe2lmKGU9WWYoZSkpe2lmKHR5cGVvZiB5MCE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihIKDI4MCkpO3ZhciB0PWUuc3RhdGVOb2RlO3QmJih0PWZnKHQpLHkwKGUuc3RhdGVOb2RlLGUudHlwZSx0KSl9fWZ1bmN0aW9uIFVPKGUpe3ljP3hjP3hjLnB1c2goZSk6eGM9W2VdOnljPWV9ZnVuY3Rpb24gVk8oKXtpZih5Yyl7dmFyIGU9eWMsdD14YztpZih4Yz15Yz1udWxsLERTKGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylEUyh0W2VdKX19ZnVuY3Rpb24gSE8oZSx0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBXTygpe312YXIgS3Y9ITE7ZnVuY3Rpb24gS08oZSx0LG4pe2lmKEt2KXJldHVybiBlKHQsbik7S3Y9ITA7dHJ5e3JldHVybiBITyhlLHQsbil9ZmluYWxseXtLdj0hMSwoeWMhPT1udWxsfHx4YyE9PW51bGwpJiYoV08oKSxWTygpKX19ZnVuY3Rpb24gRmQoZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1mZyhuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09ImJ1dHRvbiJ8fGU9PT0iaW5wdXQifHxlPT09InNlbGVjdCJ8fGU9PT0idGV4dGFyZWEiKSksZT0hcjticmVhayBlO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKEgoMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgeDA9ITE7aWYoTWkpdHJ5e3ZhciB3dT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkod3UsInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt4MD0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsd3Usd3UpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0Iix3dSx3dSl9Y2F0Y2h7eDA9ITF9ZnVuY3Rpb24gUEkoZSx0LG4scixvLGkscyxhLGwpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLGMpfWNhdGNoKHUpe3RoaXMub25FcnJvcih1KX19dmFyIGJkPSExLEloPW51bGwsTGg9ITEsYjA9bnVsbCxNST17b25FcnJvcjpmdW5jdGlvbihlKXtiZD0hMCxJaD1lfX07ZnVuY3Rpb24gUkkoZSx0LG4scixvLGkscyxhLGwpe2JkPSExLEloPW51bGwsUEkuYXBwbHkoTUksYXJndW1lbnRzKX1mdW5jdGlvbiBOSShlLHQsbixyLG8saSxzLGEsbCl7aWYoUkkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGJkKXtpZihiZCl7dmFyIGM9SWg7YmQ9ITEsSWg9bnVsbH1lbHNlIHRocm93IEVycm9yKEgoMTk4KSk7TGh8fChMaD0hMCxiMD1jKX19ZnVuY3Rpb24gdmwoZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyB0PWUsdC5mbGFncyY0MDk4JiYobj10LnJldHVybiksZT10LnJldHVybjt3aGlsZShlKX1yZXR1cm4gdC50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBxTyhlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIElTKGUpe2lmKHZsKGUpIT09ZSl0aHJvdyBFcnJvcihIKDE4OCkpfWZ1bmN0aW9uICRJKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PXZsKGUpLHQ9PT1udWxsKXRocm93IEVycm9yKEgoMTg4KSk7cmV0dXJuIHQhPT1lP251bGw6ZX1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIG89bi5yZXR1cm47aWYobz09PW51bGwpYnJlYWs7dmFyIGk9by5hbHRlcm5hdGU7aWYoaT09PW51bGwpe2lmKHI9by5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihvLmNoaWxkPT09aS5jaGlsZCl7Zm9yKGk9by5jaGlsZDtpOyl7aWYoaT09PW4pcmV0dXJuIElTKG8pLGU7aWYoaT09PXIpcmV0dXJuIElTKG8pLHQ7aT1pLnNpYmxpbmd9dGhyb3cgRXJyb3IoSCgxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWk7ZWxzZXtmb3IodmFyIHM9ITEsYT1vLmNoaWxkO2E7KXtpZihhPT09bil7cz0hMCxuPW8scj1pO2JyZWFrfWlmKGE9PT1yKXtzPSEwLHI9byxuPWk7YnJlYWt9YT1hLnNpYmxpbmd9aWYoIXMpe2ZvcihhPWkuY2hpbGQ7YTspe2lmKGE9PT1uKXtzPSEwLG49aSxyPW87YnJlYWt9aWYoYT09PXIpe3M9ITAscj1pLG49bzticmVha31hPWEuc2libGluZ31pZighcyl0aHJvdyBFcnJvcihIKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoSCgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoSCgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIEdPKGUpe3JldHVybiBlPSRJKGUpLGUhPT1udWxsP1lPKGUpOm51bGx9ZnVuY3Rpb24gWU8oZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PVlPKGUpO2lmKHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfXZhciBYTz1Pci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLExTPU9yLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLEFJPU9yLnVuc3RhYmxlX3Nob3VsZFlpZWxkLERJPU9yLnVuc3RhYmxlX3JlcXVlc3RQYWludCxGdD1Pci51bnN0YWJsZV9ub3csSUk9T3IudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsJGI9T3IudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksWk89T3IudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksamg9T3IudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksTEk9T3IudW5zdGFibGVfTG93UHJpb3JpdHksSk89T3IudW5zdGFibGVfSWRsZVByaW9yaXR5LGxnPW51bGwsR289bnVsbDtmdW5jdGlvbiBqSShlKXtpZihHbyYmdHlwZW9mIEdvLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtHby5vbkNvbW1pdEZpYmVyUm9vdChsZyxlLHZvaWQgMCwoZS5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyIF9vPU1hdGguY2x6MzI/TWF0aC5jbHozMjpCSSx6ST1NYXRoLmxvZyxGST1NYXRoLkxOMjtmdW5jdGlvbiBCSShlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLSh6SShlKS9GSXwwKXwwfXZhciBDcD02NCxPcD00MTk0MzA0O2Z1bmN0aW9uIEt1KGUpe3N3aXRjaChlJi1lKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gZSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGUmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiB6aChlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsbz1lLnN1c3BlbmRlZExhbmVzLGk9ZS5waW5nZWRMYW5lcyxzPW4mMjY4NDM1NDU1O2lmKHMhPT0wKXt2YXIgYT1zJn5vO2EhPT0wP3I9S3UoYSk6KGkmPXMsaSE9PTAmJihyPUt1KGkpKSl9ZWxzZSBzPW4mfm8scyE9PTA/cj1LdShzKTppIT09MCYmKHI9S3UoaSkpO2lmKHI9PT0wKXJldHVybiAwO2lmKHQhPT0wJiZ0IT09ciYmISh0Jm8pJiYobz1yJi1yLGk9dCYtdCxvPj1pfHxvPT09MTYmJihpJjQxOTQyNDApIT09MCkpcmV0dXJuIHQ7aWYociY0JiYocnw9biYxNiksdD1lLmVudGFuZ2xlZExhbmVzLHQhPT0wKWZvcihlPWUuZW50YW5nbGVtZW50cyx0Jj1yOzA8dDspbj0zMS1fbyh0KSxvPTE8PG4scnw9ZVtuXSx0Jj1+bztyZXR1cm4gcn1mdW5jdGlvbiBVSShlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdCsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiB0KzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBWSShlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxvPWUuZXhwaXJhdGlvblRpbWVzLGk9ZS5wZW5kaW5nTGFuZXM7MDxpOyl7dmFyIHM9MzEtX28oaSksYT0xPDxzLGw9b1tzXTtsPT09LTE/KCEoYSZuKXx8YSZyKSYmKG9bc109VUkoYSx0KSk6bDw9dCYmKGUuZXhwaXJlZExhbmVzfD1hKSxpJj1+YX19ZnVuY3Rpb24gdzAoZSl7cmV0dXJuIGU9ZS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsZSE9PTA/ZTplJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIFFPKCl7dmFyIGU9Q3A7cmV0dXJuIENwPDw9MSwhKENwJjQxOTQyNDApJiYoQ3A9NjQpLGV9ZnVuY3Rpb24gcXYoZSl7Zm9yKHZhciB0PVtdLG49MDszMT5uO24rKyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gcWYoZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LHQhPT01MzY4NzA5MTImJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wKSxlPWUuZXZlbnRUaW1lcyx0PTMxLV9vKHQpLGVbdF09bn1mdW5jdGlvbiBISShlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzJn50O2UucGVuZGluZ0xhbmVzPXQsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9dCxlLm11dGFibGVSZWFkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCx0PWUuZW50YW5nbGVtZW50czt2YXIgcj1lLmV2ZW50VGltZXM7Zm9yKGU9ZS5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIG89MzEtX28obiksaT0xPDxvO3Rbb109MCxyW29dPS0xLGVbb109LTEsbiY9fml9fWZ1bmN0aW9uIEFiKGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLV9vKG4pLG89MTw8cjtvJnR8ZVtyXSZ0JiYoZVtyXXw9dCksbiY9fm99fXZhciBsdD0wO2Z1bmN0aW9uIGVUKGUpe3JldHVybiBlJj0tZSwxPGU/NDxlP2UmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIHRULERiLG5ULHJULG9ULFMwPSExLFRwPVtdLFJzPW51bGwsTnM9bnVsbCwkcz1udWxsLEJkPW5ldyBNYXAsVWQ9bmV3IE1hcCx3cz1bXSxXST0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBqUyhlLHQpe3N3aXRjaChlKXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOlJzPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjpOcz1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0Ijokcz1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6QmQuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6VWQuZGVsZXRlKHQucG9pbnRlcklkKX19ZnVuY3Rpb24gU3UoZSx0LG4scixvLGkpe3JldHVybiBlPT09bnVsbHx8ZS5uYXRpdmVFdmVudCE9PWk/KGU9e2Jsb2NrZWRPbjp0LGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDppLHRhcmdldENvbnRhaW5lcnM6W29dfSx0IT09bnVsbCYmKHQ9WWYodCksdCE9PW51bGwmJkRiKHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG8hPT1udWxsJiZ0LmluZGV4T2Yobyk9PT0tMSYmdC5wdXNoKG8pLGUpfWZ1bmN0aW9uIEtJKGUsdCxuLHIsbyl7c3dpdGNoKHQpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIFJzPVN1KFJzLGUsdCxuLHIsbyksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiBOcz1TdShOcyxlLHQsbixyLG8pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gJHM9U3UoJHMsZSx0LG4scixvKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgaT1vLnBvaW50ZXJJZDtyZXR1cm4gQmQuc2V0KGksU3UoQmQuZ2V0KGkpfHxudWxsLGUsdCxuLHIsbykpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBpPW8ucG9pbnRlcklkLFVkLnNldChpLFN1KFVkLmdldChpKXx8bnVsbCxlLHQsbixyLG8pKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBpVChlKXt2YXIgdD1QYShlLnRhcmdldCk7aWYodCE9PW51bGwpe3ZhciBuPXZsKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1xTyhuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCxvVChlLnByaW9yaXR5LGZ1bmN0aW9uKCl7blQobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBzaChlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49azAoZS5kb21FdmVudE5hbWUsZS5ldmVudFN5c3RlbUZsYWdzLHRbMF0sZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7djA9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLHYwPW51bGx9ZWxzZSByZXR1cm4gdD1ZZihuKSx0IT09bnVsbCYmRGIodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gelMoZSx0LG4pe3NoKGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBxSSgpe1MwPSExLFJzIT09bnVsbCYmc2goUnMpJiYoUnM9bnVsbCksTnMhPT1udWxsJiZzaChOcykmJihOcz1udWxsKSwkcyE9PW51bGwmJnNoKCRzKSYmKCRzPW51bGwpLEJkLmZvckVhY2goelMpLFVkLmZvckVhY2goelMpfWZ1bmN0aW9uIGt1KGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxTMHx8KFMwPSEwLE9yLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soT3IudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkscUkpKSl9ZnVuY3Rpb24gVmQoZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4ga3UobyxlKX1pZigwPFRwLmxlbmd0aCl7a3UoVHBbMF0sZSk7Zm9yKHZhciBuPTE7bjxUcC5sZW5ndGg7bisrKXt2YXIgcj1UcFtuXTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKFJzIT09bnVsbCYma3UoUnMsZSksTnMhPT1udWxsJiZrdShOcyxlKSwkcyE9PW51bGwmJmt1KCRzLGUpLEJkLmZvckVhY2godCksVWQuZm9yRWFjaCh0KSxuPTA7bjx3cy5sZW5ndGg7bisrKXI9d3Nbbl0sci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPHdzLmxlbmd0aCYmKG49d3NbMF0sbi5ibG9ja2VkT249PT1udWxsKTspaVQobiksbi5ibG9ja2VkT249PT1udWxsJiZ3cy5zaGlmdCgpfXZhciBiYz1CaS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxGaD0hMDtmdW5jdGlvbiBHSShlLHQsbixyKXt2YXIgbz1sdCxpPWJjLnRyYW5zaXRpb247YmMudHJhbnNpdGlvbj1udWxsO3RyeXtsdD0xLEliKGUsdCxuLHIpfWZpbmFsbHl7bHQ9byxiYy50cmFuc2l0aW9uPWl9fWZ1bmN0aW9uIFlJKGUsdCxuLHIpe3ZhciBvPWx0LGk9YmMudHJhbnNpdGlvbjtiYy50cmFuc2l0aW9uPW51bGw7dHJ5e2x0PTQsSWIoZSx0LG4scil9ZmluYWxseXtsdD1vLGJjLnRyYW5zaXRpb249aX19ZnVuY3Rpb24gSWIoZSx0LG4scil7aWYoRmgpe3ZhciBvPWswKGUsdCxuLHIpO2lmKG89PT1udWxsKXJ5KGUsdCxyLEJoLG4pLGpTKGUscik7ZWxzZSBpZihLSShvLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihqUyhlLHIpLHQmNCYmLTE8V0kuaW5kZXhPZihlKSl7Zm9yKDtvIT09bnVsbDspe3ZhciBpPVlmKG8pO2lmKGkhPT1udWxsJiZ0VChpKSxpPWswKGUsdCxuLHIpLGk9PT1udWxsJiZyeShlLHQscixCaCxuKSxpPT09bylicmVhaztvPWl9byE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSByeShlLHQscixudWxsLG4pfX12YXIgQmg9bnVsbDtmdW5jdGlvbiBrMChlLHQsbixyKXtpZihCaD1udWxsLGU9TmIociksZT1QYShlKSxlIT09bnVsbClpZih0PXZsKGUpLHQ9PT1udWxsKWU9bnVsbDtlbHNlIGlmKG49dC50YWcsbj09PTEzKXtpZihlPXFPKHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zKXtpZih0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiB0LnRhZz09PTM/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIHQhPT1lJiYoZT1udWxsKTtyZXR1cm4gQmg9ZSxudWxsfWZ1bmN0aW9uIHNUKGUpe3N3aXRjaChlKXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaChJSSgpKXtjYXNlICRiOnJldHVybiAxO2Nhc2UgWk86cmV0dXJuIDQ7Y2FzZSBqaDpjYXNlIExJOnJldHVybiAxNjtjYXNlIEpPOnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciBfcz1udWxsLExiPW51bGwsYWg9bnVsbDtmdW5jdGlvbiBhVCgpe2lmKGFoKXJldHVybiBhaDt2YXIgZSx0PUxiLG49dC5sZW5ndGgscixvPSJ2YWx1ZSJpbiBfcz9fcy52YWx1ZTpfcy50ZXh0Q29udGVudCxpPW8ubGVuZ3RoO2ZvcihlPTA7ZTxuJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBzPW4tZTtmb3Iocj0xO3I8PXMmJnRbbi1yXT09PW9baS1yXTtyKyspO3JldHVybiBhaD1vLnNsaWNlKGUsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIGxoKGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8oZT1lLmNoYXJDb2RlLGU9PT0wJiZ0PT09MTMmJihlPTEzKSk6ZT10LGU9PT0xMCYmKGU9MTMpLDMyPD1lfHxlPT09MTM/ZTowfWZ1bmN0aW9uIFBwKCl7cmV0dXJuITB9ZnVuY3Rpb24gRlMoKXtyZXR1cm4hMX1mdW5jdGlvbiBOcihlKXtmdW5jdGlvbiB0KG4scixvLGkscyl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1vLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9aSx0aGlzLnRhcmdldD1zLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgYSBpbiBlKWUuaGFzT3duUHJvcGVydHkoYSkmJihuPWVbYV0sdGhpc1thXT1uP24oaSk6aVthXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShpLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/aS5kZWZhdWx0UHJldmVudGVkOmkucmV0dXJuVmFsdWU9PT0hMSk/UHA6RlMsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1GUyx0aGlzfXJldHVybiBSdCh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPVBwKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVBwKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OlBwfSksdH12YXIgb3U9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0samI9TnIob3UpLEdmPVJ0KHt9LG91LHt2aWV3OjAsZGV0YWlsOjB9KSxYST1OcihHZiksR3YsWXYsRXUsY2c9UnQoe30sR2Yse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6emIsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldD09PXZvaWQgMD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09RXUmJihFdSYmZS50eXBlPT09Im1vdXNlbW92ZSI/KEd2PWUuc2NyZWVuWC1FdS5zY3JlZW5YLFl2PWUuc2NyZWVuWS1FdS5zY3JlZW5ZKTpZdj1Hdj0wLEV1PWUpLEd2KX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTpZdn19KSxCUz1OcihjZyksWkk9UnQoe30sY2cse2RhdGFUcmFuc2ZlcjowfSksSkk9TnIoWkkpLFFJPVJ0KHt9LEdmLHtyZWxhdGVkVGFyZ2V0OjB9KSxYdj1OcihRSSksZTM9UnQoe30sb3Use2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLHQzPU5yKGUzKSxuMz1SdCh7fSxvdSx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxyMz1OcihuMyksbzM9UnQoe30sb3Use2RhdGE6MH0pLFVTPU5yKG8zKSxpMz17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sczM9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSxhMz17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIGwzKGUpe3ZhciB0PXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIHQuZ2V0TW9kaWZpZXJTdGF0ZT90LmdldE1vZGlmaWVyU3RhdGUoZSk6KGU9YTNbZV0pPyEhdFtlXTohMX1mdW5jdGlvbiB6Yigpe3JldHVybiBsM312YXIgYzM9UnQoe30sR2Yse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9aTNbZS5rZXldfHxlLmtleTtpZih0IT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIHR9cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/KGU9bGgoZSksZT09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSk6ZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP3MzW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp6YixjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj9saChlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiP2xoKGUpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9lLmtleUNvZGU6MH19KSx1Mz1OcihjMyksZDM9UnQoe30sY2cse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksVlM9TnIoZDMpLGYzPVJ0KHt9LEdmLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6emJ9KSxwMz1OcihmMyksaDM9UnQoe30sb3Use3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksbTM9TnIoaDMpLGczPVJ0KHt9LGNnLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksdjM9TnIoZzMpLHkzPVs5LDEzLDI3LDMyXSxGYj1NaSYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LHdkPW51bGw7TWkmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJih3ZD1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciB4Mz1NaSYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiF3ZCxsVD1NaSYmKCFGYnx8d2QmJjg8d2QmJjExPj13ZCksSFM9IiAiLFdTPSExO2Z1bmN0aW9uIGNUKGUsdCl7c3dpdGNoKGUpe2Nhc2Uia2V5dXAiOnJldHVybiB5My5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHVUKGUpe3JldHVybiBlPWUuZGV0YWlsLHR5cGVvZiBlPT0ib2JqZWN0IiYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgcmM9ITE7ZnVuY3Rpb24gYjMoZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIHVUKHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDooV1M9ITAsSFMpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gZT10LmRhdGEsZT09PUhTJiZXUz9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gdzMoZSx0KXtpZihyYylyZXR1cm4gZT09PSJjb21wb3NpdGlvbmVuZCJ8fCFGYiYmY1QoZSx0KT8oZT1hVCgpLGFoPUxiPV9zPW51bGwscmM9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIGxUJiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIFMzPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBLUyhlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhUzNbZS50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiBkVChlLHQsbixyKXtVTyhyKSx0PVVoKHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IGpiKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgU2Q9bnVsbCxIZD1udWxsO2Z1bmN0aW9uIGszKGUpe1NUKGUsMCl9ZnVuY3Rpb24gdWcoZSl7dmFyIHQ9c2MoZSk7aWYoRE8odCkpcmV0dXJuIGV9ZnVuY3Rpb24gRTMoZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIGZUPSExO2lmKE1pKXt2YXIgWnY7aWYoTWkpe3ZhciBKdj0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighSnYpe3ZhciBxUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtxUy5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksSnY9dHlwZW9mIHFTLm9uaW5wdXQ9PSJmdW5jdGlvbiJ9WnY9SnZ9ZWxzZSBadj0hMTtmVD1adiYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBHUygpe1NkJiYoU2QuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHBUKSxIZD1TZD1udWxsKX1mdW5jdGlvbiBwVChlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJnVnKEhkKSl7dmFyIHQ9W107ZFQodCxIZCxlLE5iKGUpKSxLTyhrMyx0KX19ZnVuY3Rpb24gXzMoZSx0LG4pe2U9PT0iZm9jdXNpbiI/KEdTKCksU2Q9dCxIZD1uLFNkLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixwVCkpOmU9PT0iZm9jdXNvdXQiJiZHUygpfWZ1bmN0aW9uIEMzKGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIHVnKEhkKX1mdW5jdGlvbiBPMyhlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiB1Zyh0KX1mdW5jdGlvbiBUMyhlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIHVnKHQpfWZ1bmN0aW9uIFAzKGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgUm89dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6UDM7ZnVuY3Rpb24gV2QoZSx0KXtpZihSbyhlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aWYoIWkwLmNhbGwodCxvKXx8IVJvKGVbb10sdFtvXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gWVMoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIFhTKGUsdCl7dmFyIG49WVMoZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49WVMobil9fWZ1bmN0aW9uIGhUKGUsdCl7cmV0dXJuIGUmJnQ/ZT09PXQ/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6dCYmdC5ub2RlVHlwZT09PTM/aFQoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KTohMTohMX1mdW5jdGlvbiBtVCgpe2Zvcih2YXIgZT13aW5kb3csdD1EaCgpO3QgaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKWU9dC5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7dD1EaChlLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiBCYihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJih0PT09ImlucHV0IiYmKGUudHlwZT09PSJ0ZXh0Inx8ZS50eXBlPT09InNlYXJjaCJ8fGUudHlwZT09PSJ0ZWwifHxlLnR5cGU9PT0idXJsInx8ZS50eXBlPT09InBhc3N3b3JkIil8fHQ9PT0idGV4dGFyZWEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gTTMoZSl7dmFyIHQ9bVQoKSxuPWUuZm9jdXNlZEVsZW0scj1lLnNlbGVjdGlvblJhbmdlO2lmKHQhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJmhUKG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZCYihuKSl7aWYodD1yLnN0YXJ0LGU9ci5lbmQsZT09PXZvaWQgMCYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZT0odD1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LGUuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIG89bi50ZXh0Q29udGVudC5sZW5ndGgsaT1NYXRoLm1pbihyLnN0YXJ0LG8pO3I9ci5lbmQ9PT12b2lkIDA/aTpNYXRoLm1pbihyLmVuZCxvKSwhZS5leHRlbmQmJmk+ciYmKG89cixyPWksaT1vKSxvPVhTKG4saSk7dmFyIHM9WFMobixyKTtvJiZzJiYoZS5yYW5nZUNvdW50IT09MXx8ZS5hbmNob3JOb2RlIT09by5ub2RlfHxlLmFuY2hvck9mZnNldCE9PW8ub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PXMubm9kZXx8ZS5mb2N1c09mZnNldCE9PXMub2Zmc2V0KSYmKHQ9dC5jcmVhdGVSYW5nZSgpLHQuc2V0U3RhcnQoby5ub2RlLG8ub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGk+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChzLm5vZGUscy5vZmZzZXQpKToodC5zZXRFbmQocy5ub2RlLHMub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspZS5ub2RlVHlwZT09PTEmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0sZS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fXZhciBSMz1NaSYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxvYz1udWxsLEUwPW51bGwsa2Q9bnVsbCxfMD0hMTtmdW5jdGlvbiBaUyhlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7XzB8fG9jPT1udWxsfHxvYyE9PURoKHIpfHwocj1vYywic2VsZWN0aW9uU3RhcnQiaW4gciYmQmIocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxrZCYmV2Qoa2Qscil8fChrZD1yLHI9VWgoRTAsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKHQ9bmV3IGpiKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PW9jKSkpfWZ1bmN0aW9uIE1wKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBpYz17YW5pbWF0aW9uZW5kOk1wKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246TXAoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0Ok1wKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6TXAoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LFF2PXt9LGdUPXt9O01pJiYoZ1Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBpYy5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBpYy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBpYy5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgaWMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBkZyhlKXtpZihRdltlXSlyZXR1cm4gUXZbZV07aWYoIWljW2VdKXJldHVybiBlO3ZhciB0PWljW2VdLG47Zm9yKG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIGdUKXJldHVybiBRdltlXT10W25dO3JldHVybiBlfXZhciB2VD1kZygiYW5pbWF0aW9uZW5kIikseVQ9ZGcoImFuaW1hdGlvbml0ZXJhdGlvbiIpLHhUPWRnKCJhbmltYXRpb25zdGFydCIpLGJUPWRnKCJ0cmFuc2l0aW9uZW5kIiksd1Q9bmV3IE1hcCxKUz0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gc2EoZSx0KXt3VC5zZXQoZSx0KSxnbCh0LFtlXSl9Zm9yKHZhciBleT0wO2V5PEpTLmxlbmd0aDtleSsrKXt2YXIgdHk9SlNbZXldLE4zPXR5LnRvTG93ZXJDYXNlKCksJDM9dHlbMF0udG9VcHBlckNhc2UoKSt0eS5zbGljZSgxKTtzYShOMywib24iKyQzKX1zYSh2VCwib25BbmltYXRpb25FbmQiKTtzYSh5VCwib25BbmltYXRpb25JdGVyYXRpb24iKTtzYSh4VCwib25BbmltYXRpb25TdGFydCIpO3NhKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKTtzYSgiZm9jdXNpbiIsIm9uRm9jdXMiKTtzYSgiZm9jdXNvdXQiLCJvbkJsdXIiKTtzYShiVCwib25UcmFuc2l0aW9uRW5kIik7UmMoIm9uTW91c2VFbnRlciIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTtSYygib25Nb3VzZUxlYXZlIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO1JjKCJvblBvaW50ZXJFbnRlciIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7UmMoIm9uUG9pbnRlckxlYXZlIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtnbCgib25DaGFuZ2UiLCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7Z2woIm9uU2VsZWN0IiwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtnbCgib25CZWZvcmVJbnB1dCIsWyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXSk7Z2woIm9uQ29tcG9zaXRpb25FbmQiLCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7Z2woIm9uQ29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO2dsKCJvbkNvbXBvc2l0aW9uVXBkYXRlIiwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3ZhciBxdT0iYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksQTM9bmV3IFNldCgiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChxdSkpO2Z1bmN0aW9uIFFTKGUsdCxuKXt2YXIgcj1lLnR5cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9bixOSShyLHQsdm9pZCAwLGUpLGUuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIFNUKGUsdCl7dD0odCY0KSE9PTA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0sbz1yLmV2ZW50O3I9ci5saXN0ZW5lcnM7ZTp7dmFyIGk9dm9pZCAwO2lmKHQpZm9yKHZhciBzPXIubGVuZ3RoLTE7MDw9cztzLS0pe3ZhciBhPXJbc10sbD1hLmluc3RhbmNlLGM9YS5jdXJyZW50VGFyZ2V0O2lmKGE9YS5saXN0ZW5lcixsIT09aSYmby5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7UVMobyxhLGMpLGk9bH1lbHNlIGZvcihzPTA7czxyLmxlbmd0aDtzKyspe2lmKGE9cltzXSxsPWEuaW5zdGFuY2UsYz1hLmN1cnJlbnRUYXJnZXQsYT1hLmxpc3RlbmVyLGwhPT1pJiZvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTtRUyhvLGEsYyksaT1sfX19aWYoTGgpdGhyb3cgZT1iMCxMaD0hMSxiMD1udWxsLGV9ZnVuY3Rpb24geHQoZSx0KXt2YXIgbj10W00wXTtuPT09dm9pZCAwJiYobj10W00wXT1uZXcgU2V0KTt2YXIgcj1lKyJfX2J1YmJsZSI7bi5oYXMocil8fChrVCh0LGUsMiwhMSksbi5hZGQocikpfWZ1bmN0aW9uIG55KGUsdCxuKXt2YXIgcj0wO3QmJihyfD00KSxrVChuLGUscix0KX12YXIgUnA9Il9yZWFjdExpc3RlbmluZyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gS2QoZSl7aWYoIWVbUnBdKXtlW1JwXT0hMCxNTy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24hPT0ic2VsZWN0aW9uY2hhbmdlIiYmKEEzLmhhcyhuKXx8bnkobiwhMSxlKSxueShuLCEwLGUpKX0pO3ZhciB0PWUubm9kZVR5cGU9PT05P2U6ZS5vd25lckRvY3VtZW50O3Q9PT1udWxsfHx0W1JwXXx8KHRbUnBdPSEwLG55KCJzZWxlY3Rpb25jaGFuZ2UiLCExLHQpKX19ZnVuY3Rpb24ga1QoZSx0LG4scil7c3dpdGNoKHNUKHQpKXtjYXNlIDE6dmFyIG89R0k7YnJlYWs7Y2FzZSA0Om89WUk7YnJlYWs7ZGVmYXVsdDpvPUlifW49by5iaW5kKG51bGwsdCxuLGUpLG89dm9pZCAwLCF4MHx8dCE9PSJ0b3VjaHN0YXJ0IiYmdCE9PSJ0b3VjaG1vdmUiJiZ0IT09IndoZWVsInx8KG89ITApLHI/byE9PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLHtjYXB0dXJlOiEwLHBhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITApOm8hPT12b2lkIDA/ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7cGFzc2l2ZTpvfSk6ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSl9ZnVuY3Rpb24gcnkoZSx0LG4scixvKXt2YXIgaT1yO2lmKCEodCYxKSYmISh0JjIpJiZyIT09bnVsbCllOmZvcig7Oyl7aWYocj09PW51bGwpcmV0dXJuO3ZhciBzPXIudGFnO2lmKHM9PT0zfHxzPT09NCl7dmFyIGE9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihhPT09b3x8YS5ub2RlVHlwZT09PTgmJmEucGFyZW50Tm9kZT09PW8pYnJlYWs7aWYocz09PTQpZm9yKHM9ci5yZXR1cm47cyE9PW51bGw7KXt2YXIgbD1zLnRhZztpZigobD09PTN8fGw9PT00KSYmKGw9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxsPT09b3x8bC5ub2RlVHlwZT09PTgmJmwucGFyZW50Tm9kZT09PW8pKXJldHVybjtzPXMucmV0dXJufWZvcig7YSE9PW51bGw7KXtpZihzPVBhKGEpLHM9PT1udWxsKXJldHVybjtpZihsPXMudGFnLGw9PT01fHxsPT09Nil7cj1pPXM7Y29udGludWUgZX1hPWEucGFyZW50Tm9kZX19cj1yLnJldHVybn1LTyhmdW5jdGlvbigpe3ZhciBjPWksdT1OYihuKSxkPVtdO2U6e3ZhciBmPXdULmdldChlKTtpZihmIT09dm9pZCAwKXt2YXIgcD1qYixtPWU7c3dpdGNoKGUpe2Nhc2Uia2V5cHJlc3MiOmlmKGxoKG4pPT09MClicmVhayBlO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6cD11MzticmVhaztjYXNlImZvY3VzaW4iOm09ImZvY3VzIixwPVh2O2JyZWFrO2Nhc2UiZm9jdXNvdXQiOm09ImJsdXIiLHA9WHY7YnJlYWs7Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6cD1YdjticmVhaztjYXNlImNsaWNrIjppZihuLmJ1dHRvbj09PTIpYnJlYWsgZTtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOnA9QlM7YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6cD1KSTticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjpwPXAzO2JyZWFrO2Nhc2UgdlQ6Y2FzZSB5VDpjYXNlIHhUOnA9dDM7YnJlYWs7Y2FzZSBiVDpwPW0zO2JyZWFrO2Nhc2Uic2Nyb2xsIjpwPVhJO2JyZWFrO2Nhc2Uid2hlZWwiOnA9djM7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6cD1yMzticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjpwPVZTfXZhciBnPSh0JjQpIT09MCx5PSFnJiZlPT09InNjcm9sbCIsdj1nP2YhPT1udWxsP2YrIkNhcHR1cmUiOm51bGw6ZjtnPVtdO2Zvcih2YXIgeD1jLHc7eCE9PW51bGw7KXt3PXg7dmFyIGs9dy5zdGF0ZU5vZGU7aWYody50YWc9PT01JiZrIT09bnVsbCYmKHc9ayx2IT09bnVsbCYmKGs9RmQoeCx2KSxrIT1udWxsJiZnLnB1c2gocWQoeCxrLHcpKSkpLHkpYnJlYWs7eD14LnJldHVybn0wPGcubGVuZ3RoJiYoZj1uZXcgcChmLG0sbnVsbCxuLHUpLGQucHVzaCh7ZXZlbnQ6ZixsaXN0ZW5lcnM6Z30pKX19aWYoISh0JjcpKXtlOntpZihmPWU9PT0ibW91c2VvdmVyInx8ZT09PSJwb2ludGVyb3ZlciIscD1lPT09Im1vdXNlb3V0Inx8ZT09PSJwb2ludGVyb3V0IixmJiZuIT09djAmJihtPW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihQYShtKXx8bVtSaV0pKWJyZWFrIGU7aWYoKHB8fGYpJiYoZj11LndpbmRvdz09PXU/dTooZj11Lm93bmVyRG9jdW1lbnQpP2YuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93OndpbmRvdyxwPyhtPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQscD1jLG09bT9QYShtKTpudWxsLG0hPT1udWxsJiYoeT12bChtKSxtIT09eXx8bS50YWchPT01JiZtLnRhZyE9PTYpJiYobT1udWxsKSk6KHA9bnVsbCxtPWMpLHAhPT1tKSl7aWYoZz1CUyxrPSJvbk1vdXNlTGVhdmUiLHY9Im9uTW91c2VFbnRlciIseD0ibW91c2UiLChlPT09InBvaW50ZXJvdXQifHxlPT09InBvaW50ZXJvdmVyIikmJihnPVZTLGs9Im9uUG9pbnRlckxlYXZlIix2PSJvblBvaW50ZXJFbnRlciIseD0icG9pbnRlciIpLHk9cD09bnVsbD9mOnNjKHApLHc9bT09bnVsbD9mOnNjKG0pLGY9bmV3IGcoayx4KyJsZWF2ZSIscCxuLHUpLGYudGFyZ2V0PXksZi5yZWxhdGVkVGFyZ2V0PXcsaz1udWxsLFBhKHUpPT09YyYmKGc9bmV3IGcodix4KyJlbnRlciIsbSxuLHUpLGcudGFyZ2V0PXcsZy5yZWxhdGVkVGFyZ2V0PXksaz1nKSx5PWsscCYmbSl0Ontmb3IoZz1wLHY9bSx4PTAsdz1nO3c7dz1ObCh3KSl4Kys7Zm9yKHc9MCxrPXY7aztrPU5sKGspKXcrKztmb3IoOzA8eC13OylnPU5sKGcpLHgtLTtmb3IoOzA8dy14Oyl2PU5sKHYpLHctLTtmb3IoO3gtLTspe2lmKGc9PT12fHx2IT09bnVsbCYmZz09PXYuYWx0ZXJuYXRlKWJyZWFrIHQ7Zz1ObChnKSx2PU5sKHYpfWc9bnVsbH1lbHNlIGc9bnVsbDtwIT09bnVsbCYmZWsoZCxmLHAsZywhMSksbSE9PW51bGwmJnkhPT1udWxsJiZlayhkLHksbSxnLCEwKX19ZTp7aWYoZj1jP3NjKGMpOndpbmRvdyxwPWYubm9kZU5hbWUmJmYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPT09InNlbGVjdCJ8fHA9PT0iaW5wdXQiJiZmLnR5cGU9PT0iZmlsZSIpdmFyIEU9RTM7ZWxzZSBpZihLUyhmKSlpZihmVClFPVQzO2Vsc2V7RT1DMzt2YXIgUz1fM31lbHNlKHA9Zi5ub2RlTmFtZSkmJnAudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihmLnR5cGU9PT0iY2hlY2tib3gifHxmLnR5cGU9PT0icmFkaW8iKSYmKEU9TzMpO2lmKEUmJihFPUUoZSxjKSkpe2RUKGQsRSxuLHUpO2JyZWFrIGV9UyYmUyhlLGYsYyksZT09PSJmb2N1c291dCImJihTPWYuX3dyYXBwZXJTdGF0ZSkmJlMuY29udHJvbGxlZCYmZi50eXBlPT09Im51bWJlciImJmYwKGYsIm51bWJlciIsZi52YWx1ZSl9c3dpdGNoKFM9Yz9zYyhjKTp3aW5kb3csZSl7Y2FzZSJmb2N1c2luIjooS1MoUyl8fFMuY29udGVudEVkaXRhYmxlPT09InRydWUiKSYmKG9jPVMsRTA9YyxrZD1udWxsKTticmVhaztjYXNlImZvY3Vzb3V0IjprZD1FMD1vYz1udWxsO2JyZWFrO2Nhc2UibW91c2Vkb3duIjpfMD0hMDticmVhaztjYXNlImNvbnRleHRtZW51IjpjYXNlIm1vdXNldXAiOmNhc2UiZHJhZ2VuZCI6XzA9ITEsWlMoZCxuLHUpO2JyZWFrO2Nhc2Uic2VsZWN0aW9uY2hhbmdlIjppZihSMylicmVhaztjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOlpTKGQsbix1KX12YXIgXztpZihGYillOntzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0Ijp2YXIgUD0ib25Db21wb3NpdGlvblN0YXJ0IjticmVhayBlO2Nhc2UiY29tcG9zaXRpb25lbmQiOlA9Im9uQ29tcG9zaXRpb25FbmQiO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6UD0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgZX1QPXZvaWQgMH1lbHNlIHJjP2NUKGUsbikmJihQPSJvbkNvbXBvc2l0aW9uRW5kIik6ZT09PSJrZXlkb3duIiYmbi5rZXlDb2RlPT09MjI5JiYoUD0ib25Db21wb3NpdGlvblN0YXJ0Iik7UCYmKGxUJiZuLmxvY2FsZSE9PSJrbyImJihyY3x8UCE9PSJvbkNvbXBvc2l0aW9uU3RhcnQiP1A9PT0ib25Db21wb3NpdGlvbkVuZCImJnJjJiYoXz1hVCgpKTooX3M9dSxMYj0idmFsdWUiaW4gX3M/X3MudmFsdWU6X3MudGV4dENvbnRlbnQscmM9ITApKSxTPVVoKGMsUCksMDxTLmxlbmd0aCYmKFA9bmV3IFVTKFAsZSxudWxsLG4sdSksZC5wdXNoKHtldmVudDpQLGxpc3RlbmVyczpTfSksXz9QLmRhdGE9XzooXz11VChuKSxfIT09bnVsbCYmKFAuZGF0YT1fKSkpKSwoXz14Mz9iMyhlLG4pOnczKGUsbikpJiYoYz1VaChjLCJvbkJlZm9yZUlucHV0IiksMDxjLmxlbmd0aCYmKHU9bmV3IFVTKCJvbkJlZm9yZUlucHV0IiwiYmVmb3JlaW5wdXQiLG51bGwsbix1KSxkLnB1c2goe2V2ZW50OnUsbGlzdGVuZXJzOmN9KSx1LmRhdGE9XykpfVNUKGQsdCl9KX1mdW5jdGlvbiBxZChlLHQsbil7cmV0dXJue2luc3RhbmNlOmUsbGlzdGVuZXI6dCxjdXJyZW50VGFyZ2V0Om59fWZ1bmN0aW9uIFVoKGUsdCl7Zm9yKHZhciBuPXQrIkNhcHR1cmUiLHI9W107ZSE9PW51bGw7KXt2YXIgbz1lLGk9by5zdGF0ZU5vZGU7by50YWc9PT01JiZpIT09bnVsbCYmKG89aSxpPUZkKGUsbiksaSE9bnVsbCYmci51bnNoaWZ0KHFkKGUsaSxvKSksaT1GZChlLHQpLGkhPW51bGwmJnIucHVzaChxZChlLGksbykpKSxlPWUucmV0dXJufXJldHVybiByfWZ1bmN0aW9uIE5sKGUpe2lmKGU9PT1udWxsKXJldHVybiBudWxsO2RvIGU9ZS5yZXR1cm47d2hpbGUoZSYmZS50YWchPT01KTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBlayhlLHQsbixyLG8pe2Zvcih2YXIgaT10Ll9yZWFjdE5hbWUscz1bXTtuIT09bnVsbCYmbiE9PXI7KXt2YXIgYT1uLGw9YS5hbHRlcm5hdGUsYz1hLnN0YXRlTm9kZTtpZihsIT09bnVsbCYmbD09PXIpYnJlYWs7YS50YWc9PT01JiZjIT09bnVsbCYmKGE9YyxvPyhsPUZkKG4saSksbCE9bnVsbCYmcy51bnNoaWZ0KHFkKG4sbCxhKSkpOm98fChsPUZkKG4saSksbCE9bnVsbCYmcy5wdXNoKHFkKG4sbCxhKSkpKSxuPW4ucmV0dXJufXMubGVuZ3RoIT09MCYmZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpzfSl9dmFyIEQzPS9cclxuPy9nLEkzPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gdGsoZSl7cmV0dXJuKHR5cGVvZiBlPT0ic3RyaW5nIj9lOiIiK2UpLnJlcGxhY2UoRDMsYApgKS5yZXBsYWNlKEkzLCIiKX1mdW5jdGlvbiBOcChlLHQsbil7aWYodD10ayh0KSx0ayhlKSE9PXQmJm4pdGhyb3cgRXJyb3IoSCg0MjUpKX1mdW5jdGlvbiBWaCgpe312YXIgQzA9bnVsbCxPMD1udWxsO2Z1bmN0aW9uIFQwKGUsdCl7cmV0dXJuIGU9PT0idGV4dGFyZWEifHxlPT09Im5vc2NyaXB0Inx8dHlwZW9mIHQuY2hpbGRyZW49PSJzdHJpbmcifHx0eXBlb2YgdC5jaGlsZHJlbj09Im51bWJlciJ8fHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPT0ib2JqZWN0IiYmdC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9PW51bGwmJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIT1udWxsfXZhciBQMD10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0OnZvaWQgMCxMMz10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDp2b2lkIDAsbms9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZTp2b2lkIDAsajM9dHlwZW9mIHF1ZXVlTWljcm90YXNrPT0iZnVuY3Rpb24iP3F1ZXVlTWljcm90YXNrOnR5cGVvZiBuazwidSI/ZnVuY3Rpb24oZSl7cmV0dXJuIG5rLnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaCh6Myl9OlAwO2Z1bmN0aW9uIHozKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gb3koZSx0KXt2YXIgbj10LHI9MDtkb3t2YXIgbz1uLm5leHRTaWJsaW5nO2lmKGUucmVtb3ZlQ2hpbGQobiksbyYmby5ub2RlVHlwZT09PTgpaWYobj1vLmRhdGEsbj09PSIvJCIpe2lmKHI9PT0wKXtlLnJlbW92ZUNoaWxkKG8pLFZkKHQpO3JldHVybn1yLS19ZWxzZSBuIT09IiQiJiZuIT09IiQ/IiYmbiE9PSIkISJ8fHIrKztuPW99d2hpbGUobik7VmQodCl9ZnVuY3Rpb24gQXMoZSl7Zm9yKDtlIT1udWxsO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZih0PT09MXx8dD09PTMpYnJlYWs7aWYodD09PTgpe2lmKHQ9ZS5kYXRhLHQ9PT0iJCJ8fHQ9PT0iJCEifHx0PT09IiQ/IilicmVhaztpZih0PT09Ii8kIilyZXR1cm4gbnVsbH19cmV0dXJuIGV9ZnVuY3Rpb24gcmsoZSl7ZT1lLnByZXZpb3VzU2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoZS5ub2RlVHlwZT09PTgpe3ZhciBuPWUuZGF0YTtpZihuPT09IiQifHxuPT09IiQhInx8bj09PSIkPyIpe2lmKHQ9PT0wKXJldHVybiBlO3QtLX1lbHNlIG49PT0iLyQiJiZ0Kyt9ZT1lLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgaXU9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksVm89Il9fcmVhY3RGaWJlciQiK2l1LEdkPSJfX3JlYWN0UHJvcHMkIitpdSxSaT0iX19yZWFjdENvbnRhaW5lciQiK2l1LE0wPSJfX3JlYWN0RXZlbnRzJCIraXUsRjM9Il9fcmVhY3RMaXN0ZW5lcnMkIitpdSxCMz0iX19yZWFjdEhhbmRsZXMkIitpdTtmdW5jdGlvbiBQYShlKXt2YXIgdD1lW1ZvXTtpZih0KXJldHVybiB0O2Zvcih2YXIgbj1lLnBhcmVudE5vZGU7bjspe2lmKHQ9bltSaV18fG5bVm9dKXtpZihuPXQuYWx0ZXJuYXRlLHQuY2hpbGQhPT1udWxsfHxuIT09bnVsbCYmbi5jaGlsZCE9PW51bGwpZm9yKGU9cmsoZSk7ZSE9PW51bGw7KXtpZihuPWVbVm9dKXJldHVybiBuO2U9cmsoZSl9cmV0dXJuIHR9ZT1uLG49ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIFlmKGUpe3JldHVybiBlPWVbVm9dfHxlW1JpXSwhZXx8ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTMmJmUudGFnIT09Mz9udWxsOmV9ZnVuY3Rpb24gc2MoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGUuc3RhdGVOb2RlO3Rocm93IEVycm9yKEgoMzMpKX1mdW5jdGlvbiBmZyhlKXtyZXR1cm4gZVtHZF18fG51bGx9dmFyIFIwPVtdLGFjPS0xO2Z1bmN0aW9uIGFhKGUpe3JldHVybntjdXJyZW50OmV9fWZ1bmN0aW9uIHd0KGUpezA+YWN8fChlLmN1cnJlbnQ9UjBbYWNdLFIwW2FjXT1udWxsLGFjLS0pfWZ1bmN0aW9uIGd0KGUsdCl7YWMrKyxSMFthY109ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBxcz17fSxJbj1hYShxcyksYXI9YWEoITEpLHFhPXFzO2Z1bmN0aW9uIE5jKGUsdCl7dmFyIG49ZS50eXBlLmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gcXM7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09dClyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgbz17fSxpO2ZvcihpIGluIG4pb1tpXT10W2ldO3JldHVybiByJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9dCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PW8pLG99ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIGU9ZS5jaGlsZENvbnRleHRUeXBlcyxlIT1udWxsfWZ1bmN0aW9uIEhoKCl7d3QoYXIpLHd0KEluKX1mdW5jdGlvbiBvayhlLHQsbil7aWYoSW4uY3VycmVudCE9PXFzKXRocm93IEVycm9yKEgoMTY4KSk7Z3QoSW4sdCksZ3QoYXIsbil9ZnVuY3Rpb24gRVQoZSx0LG4pe3ZhciByPWUuc3RhdGVOb2RlO2lmKHQ9dC5jaGlsZENvbnRleHRUeXBlcyx0eXBlb2Ygci5nZXRDaGlsZENvbnRleHQhPSJmdW5jdGlvbiIpcmV0dXJuIG47cj1yLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgbyBpbiByKWlmKCEobyBpbiB0KSl0aHJvdyBFcnJvcihIKDEwOCxfSShlKXx8IlVua25vd24iLG8pKTtyZXR1cm4gUnQoe30sbixyKX1mdW5jdGlvbiBXaChlKXtyZXR1cm4gZT0oZT1lLnN0YXRlTm9kZSkmJmUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fHFzLHFhPUluLmN1cnJlbnQsZ3QoSW4sZSksZ3QoYXIsYXIuY3VycmVudCksITB9ZnVuY3Rpb24gaWsoZSx0LG4pe3ZhciByPWUuc3RhdGVOb2RlO2lmKCFyKXRocm93IEVycm9yKEgoMTY5KSk7bj8oZT1FVChlLHQscWEpLHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9ZSx3dChhciksd3QoSW4pLGd0KEluLGUpKTp3dChhciksZ3QoYXIsbil9dmFyIGJpPW51bGwscGc9ITEsaXk9ITE7ZnVuY3Rpb24gX1QoZSl7Ymk9PT1udWxsP2JpPVtlXTpiaS5wdXNoKGUpfWZ1bmN0aW9uIFUzKGUpe3BnPSEwLF9UKGUpfWZ1bmN0aW9uIGxhKCl7aWYoIWl5JiZiaSE9PW51bGwpe2l5PSEwO3ZhciBlPTAsdD1sdDt0cnl7dmFyIG49Ymk7Zm9yKGx0PTE7ZTxuLmxlbmd0aDtlKyspe3ZhciByPW5bZV07ZG8gcj1yKCEwKTt3aGlsZShyIT09bnVsbCl9Ymk9bnVsbCxwZz0hMX1jYXRjaChvKXt0aHJvdyBiaSE9PW51bGwmJihiaT1iaS5zbGljZShlKzEpKSxYTygkYixsYSksb31maW5hbGx5e2x0PXQsaXk9ITF9fXJldHVybiBudWxsfXZhciBsYz1bXSxjYz0wLEtoPW51bGwscWg9MCxVcj1bXSxWcj0wLEdhPW51bGwsU2k9MSxraT0iIjtmdW5jdGlvbiB2YShlLHQpe2xjW2NjKytdPXFoLGxjW2NjKytdPUtoLEtoPWUscWg9dH1mdW5jdGlvbiBDVChlLHQsbil7VXJbVnIrK109U2ksVXJbVnIrK109a2ksVXJbVnIrK109R2EsR2E9ZTt2YXIgcj1TaTtlPWtpO3ZhciBvPTMyLV9vKHIpLTE7ciY9figxPDxvKSxuKz0xO3ZhciBpPTMyLV9vKHQpK287aWYoMzA8aSl7dmFyIHM9by1vJTU7aT0ociYoMTw8cyktMSkudG9TdHJpbmcoMzIpLHI+Pj1zLG8tPXMsU2k9MTw8MzItX28odCkrb3xuPDxvfHIsa2k9aStlfWVsc2UgU2k9MTw8aXxuPDxvfHIsa2k9ZX1mdW5jdGlvbiBVYihlKXtlLnJldHVybiE9PW51bGwmJih2YShlLDEpLENUKGUsMSwwKSl9ZnVuY3Rpb24gVmIoZSl7Zm9yKDtlPT09S2g7KUtoPWxjWy0tY2NdLGxjW2NjXT1udWxsLHFoPWxjWy0tY2NdLGxjW2NjXT1udWxsO2Zvcig7ZT09PUdhOylHYT1VclstLVZyXSxVcltWcl09bnVsbCxraT1VclstLVZyXSxVcltWcl09bnVsbCxTaT1VclstLVZyXSxVcltWcl09bnVsbH12YXIgRXI9bnVsbCxrcj1udWxsLGt0PSExLHZvPW51bGw7ZnVuY3Rpb24gT1QoZSx0KXt2YXIgbj1Xcig1LG51bGwsbnVsbCwwKTtuLmVsZW1lbnRUeXBlPSJERUxFVEVEIixuLnN0YXRlTm9kZT10LG4ucmV0dXJuPWUsdD1lLmRlbGV0aW9ucyx0PT09bnVsbD8oZS5kZWxldGlvbnM9W25dLGUuZmxhZ3N8PTE2KTp0LnB1c2gobil9ZnVuY3Rpb24gc2soZSx0KXtzd2l0Y2goZS50YWcpe2Nhc2UgNTp2YXIgbj1lLnR5cGU7cmV0dXJuIHQ9dC5ub2RlVHlwZSE9PTF8fG4udG9Mb3dlckNhc2UoKSE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOnQsdCE9PW51bGw/KGUuc3RhdGVOb2RlPXQsRXI9ZSxrcj1Bcyh0LmZpcnN0Q2hpbGQpLCEwKTohMTtjYXNlIDY6cmV0dXJuIHQ9ZS5wZW5kaW5nUHJvcHM9PT0iInx8dC5ub2RlVHlwZSE9PTM/bnVsbDp0LHQhPT1udWxsPyhlLnN0YXRlTm9kZT10LEVyPWUsa3I9bnVsbCwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4gdD10Lm5vZGVUeXBlIT09OD9udWxsOnQsdCE9PW51bGw/KG49R2EhPT1udWxsP3tpZDpTaSxvdmVyZmxvdzpraX06bnVsbCxlLm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6dCx0cmVlQ29udGV4dDpuLHJldHJ5TGFuZToxMDczNzQxODI0fSxuPVdyKDE4LG51bGwsbnVsbCwwKSxuLnN0YXRlTm9kZT10LG4ucmV0dXJuPWUsZS5jaGlsZD1uLEVyPWUsa3I9bnVsbCwhMCk6ITE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gTjAoZSl7cmV0dXJuKGUubW9kZSYxKSE9PTAmJihlLmZsYWdzJjEyOCk9PT0wfWZ1bmN0aW9uICQwKGUpe2lmKGt0KXt2YXIgdD1rcjtpZih0KXt2YXIgbj10O2lmKCFzayhlLHQpKXtpZihOMChlKSl0aHJvdyBFcnJvcihIKDQxOCkpO3Q9QXMobi5uZXh0U2libGluZyk7dmFyIHI9RXI7dCYmc2soZSx0KT9PVChyLG4pOihlLmZsYWdzPWUuZmxhZ3MmLTQwOTd8MixrdD0hMSxFcj1lKX19ZWxzZXtpZihOMChlKSl0aHJvdyBFcnJvcihIKDQxOCkpO2UuZmxhZ3M9ZS5mbGFncyYtNDA5N3wyLGt0PSExLEVyPWV9fX1mdW5jdGlvbiBhayhlKXtmb3IoZT1lLnJldHVybjtlIT09bnVsbCYmZS50YWchPT01JiZlLnRhZyE9PTMmJmUudGFnIT09MTM7KWU9ZS5yZXR1cm47RXI9ZX1mdW5jdGlvbiAkcChlKXtpZihlIT09RXIpcmV0dXJuITE7aWYoIWt0KXJldHVybiBhayhlKSxrdD0hMCwhMTt2YXIgdDtpZigodD1lLnRhZyE9PTMpJiYhKHQ9ZS50YWchPT01KSYmKHQ9ZS50eXBlLHQ9dCE9PSJoZWFkIiYmdCE9PSJib2R5IiYmIVQwKGUudHlwZSxlLm1lbW9pemVkUHJvcHMpKSx0JiYodD1rcikpe2lmKE4wKGUpKXRocm93IFRUKCksRXJyb3IoSCg0MTgpKTtmb3IoO3Q7KU9UKGUsdCksdD1Bcyh0Lm5leHRTaWJsaW5nKX1pZihhayhlKSxlLnRhZz09PTEzKXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlPWUhPT1udWxsP2UuZGVoeWRyYXRlZDpudWxsLCFlKXRocm93IEVycm9yKEgoMzE3KSk7ZTp7Zm9yKGU9ZS5uZXh0U2libGluZyx0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIvJCIpe2lmKHQ9PT0wKXtrcj1BcyhlLm5leHRTaWJsaW5nKTticmVhayBlfXQtLX1lbHNlIG4hPT0iJCImJm4hPT0iJCEiJiZuIT09IiQ/Inx8dCsrfWU9ZS5uZXh0U2libGluZ31rcj1udWxsfX1lbHNlIGtyPUVyP0FzKGUuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIFRUKCl7Zm9yKHZhciBlPWtyO2U7KWU9QXMoZS5uZXh0U2libGluZyl9ZnVuY3Rpb24gJGMoKXtrcj1Fcj1udWxsLGt0PSExfWZ1bmN0aW9uIEhiKGUpe3ZvPT09bnVsbD92bz1bZV06dm8ucHVzaChlKX12YXIgVjM9QmkuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gaG8oZSx0KXtpZihlJiZlLmRlZmF1bHRQcm9wcyl7dD1SdCh7fSx0KSxlPWUuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09PT12b2lkIDAmJih0W25dPWVbbl0pO3JldHVybiB0fXJldHVybiB0fXZhciBHaD1hYShudWxsKSxZaD1udWxsLHVjPW51bGwsV2I9bnVsbDtmdW5jdGlvbiBLYigpe1diPXVjPVloPW51bGx9ZnVuY3Rpb24gcWIoZSl7dmFyIHQ9R2guY3VycmVudDt3dChHaCksZS5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gQTAoZSx0LG4pe2Zvcig7ZSE9PW51bGw7KXt2YXIgcj1lLmFsdGVybmF0ZTtpZigoZS5jaGlsZExhbmVzJnQpIT09dD8oZS5jaGlsZExhbmVzfD10LHIhPT1udWxsJiYoci5jaGlsZExhbmVzfD10KSk6ciE9PW51bGwmJihyLmNoaWxkTGFuZXMmdCkhPT10JiYoci5jaGlsZExhbmVzfD10KSxlPT09bilicmVhaztlPWUucmV0dXJufX1mdW5jdGlvbiB3YyhlLHQpe1loPWUsV2I9dWM9bnVsbCxlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiZlLmZpcnN0Q29udGV4dCE9PW51bGwmJihlLmxhbmVzJnQmJihpcj0hMCksZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gWHIoZSl7dmFyIHQ9ZS5fY3VycmVudFZhbHVlO2lmKFdiIT09ZSlpZihlPXtjb250ZXh0OmUsbWVtb2l6ZWRWYWx1ZTp0LG5leHQ6bnVsbH0sdWM9PT1udWxsKXtpZihZaD09PW51bGwpdGhyb3cgRXJyb3IoSCgzMDgpKTt1Yz1lLFloLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6ZX19ZWxzZSB1Yz11Yy5uZXh0PWU7cmV0dXJuIHR9dmFyIE1hPW51bGw7ZnVuY3Rpb24gR2IoZSl7TWE9PT1udWxsP01hPVtlXTpNYS5wdXNoKGUpfWZ1bmN0aW9uIFBUKGUsdCxuLHIpe3ZhciBvPXQuaW50ZXJsZWF2ZWQ7cmV0dXJuIG89PT1udWxsPyhuLm5leHQ9bixHYih0KSk6KG4ubmV4dD1vLm5leHQsby5uZXh0PW4pLHQuaW50ZXJsZWF2ZWQ9bixOaShlLHIpfWZ1bmN0aW9uIE5pKGUsdCl7ZS5sYW5lc3w9dDt2YXIgbj1lLmFsdGVybmF0ZTtmb3IobiE9PW51bGwmJihuLmxhbmVzfD10KSxuPWUsZT1lLnJldHVybjtlIT09bnVsbDspZS5jaGlsZExhbmVzfD10LG49ZS5hbHRlcm5hdGUsbiE9PW51bGwmJihuLmNoaWxkTGFuZXN8PXQpLG49ZSxlPWUucmV0dXJuO3JldHVybiBuLnRhZz09PTM/bi5zdGF0ZU5vZGU6bnVsbH12YXIgeXM9ITE7ZnVuY3Rpb24gWWIoZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiBNVChlLHQpe2U9ZS51cGRhdGVRdWV1ZSx0LnVwZGF0ZVF1ZXVlPT09ZSYmKHQudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsZWZmZWN0czplLmVmZmVjdHN9KX1mdW5jdGlvbiBPaShlLHQpe3JldHVybntldmVudFRpbWU6ZSxsYW5lOnQsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBEcyhlLHQsbil7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLFhlJjIpe3ZhciBvPXIucGVuZGluZztyZXR1cm4gbz09PW51bGw/dC5uZXh0PXQ6KHQubmV4dD1vLm5leHQsby5uZXh0PXQpLHIucGVuZGluZz10LE5pKGUsbil9cmV0dXJuIG89ci5pbnRlcmxlYXZlZCxvPT09bnVsbD8odC5uZXh0PXQsR2IocikpOih0Lm5leHQ9by5uZXh0LG8ubmV4dD10KSxyLmludGVybGVhdmVkPXQsTmkoZSxuKX1mdW5jdGlvbiBjaChlLHQsbil7aWYodD10LnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYodD10LnNoYXJlZCwobiY0MTk0MjQwKSE9PTApKXt2YXIgcj10LmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLG58PXIsdC5sYW5lcz1uLEFiKGUsbil9fWZ1bmN0aW9uIGxrKGUsdCl7dmFyIG49ZS51cGRhdGVRdWV1ZSxyPWUuYWx0ZXJuYXRlO2lmKHIhPT1udWxsJiYocj1yLnVwZGF0ZVF1ZXVlLG49PT1yKSl7dmFyIG89bnVsbCxpPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIHM9e2V2ZW50VGltZTpuLmV2ZW50VGltZSxsYW5lOm4ubGFuZSx0YWc6bi50YWcscGF5bG9hZDpuLnBheWxvYWQsY2FsbGJhY2s6bi5jYWxsYmFjayxuZXh0Om51bGx9O2k9PT1udWxsP289aT1zOmk9aS5uZXh0PXMsbj1uLm5leHR9d2hpbGUobiE9PW51bGwpO2k9PT1udWxsP289aT10Omk9aS5uZXh0PXR9ZWxzZSBvPWk9dDtuPXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm8sbGFzdEJhc2VVcGRhdGU6aSxzaGFyZWQ6ci5zaGFyZWQsZWZmZWN0czpyLmVmZmVjdHN9LGUudXBkYXRlUXVldWU9bjtyZXR1cm59ZT1uLmxhc3RCYXNlVXBkYXRlLGU9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPXQ6ZS5uZXh0PXQsbi5sYXN0QmFzZVVwZGF0ZT10fWZ1bmN0aW9uIFhoKGUsdCxuLHIpe3ZhciBvPWUudXBkYXRlUXVldWU7eXM9ITE7dmFyIGk9by5maXJzdEJhc2VVcGRhdGUscz1vLmxhc3RCYXNlVXBkYXRlLGE9by5zaGFyZWQucGVuZGluZztpZihhIT09bnVsbCl7by5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBsPWEsYz1sLm5leHQ7bC5uZXh0PW51bGwscz09PW51bGw/aT1jOnMubmV4dD1jLHM9bDt2YXIgdT1lLmFsdGVybmF0ZTt1IT09bnVsbCYmKHU9dS51cGRhdGVRdWV1ZSxhPXUubGFzdEJhc2VVcGRhdGUsYSE9PXMmJihhPT09bnVsbD91LmZpcnN0QmFzZVVwZGF0ZT1jOmEubmV4dD1jLHUubGFzdEJhc2VVcGRhdGU9bCkpfWlmKGkhPT1udWxsKXt2YXIgZD1vLmJhc2VTdGF0ZTtzPTAsdT1jPWw9bnVsbCxhPWk7ZG97dmFyIGY9YS5sYW5lLHA9YS5ldmVudFRpbWU7aWYoKHImZik9PT1mKXt1IT09bnVsbCYmKHU9dS5uZXh0PXtldmVudFRpbWU6cCxsYW5lOjAsdGFnOmEudGFnLHBheWxvYWQ6YS5wYXlsb2FkLGNhbGxiYWNrOmEuY2FsbGJhY2ssbmV4dDpudWxsfSk7ZTp7dmFyIG09ZSxnPWE7c3dpdGNoKGY9dCxwPW4sZy50YWcpe2Nhc2UgMTppZihtPWcucGF5bG9hZCx0eXBlb2YgbT09ImZ1bmN0aW9uIil7ZD1tLmNhbGwocCxkLGYpO2JyZWFrIGV9ZD1tO2JyZWFrIGU7Y2FzZSAzOm0uZmxhZ3M9bS5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihtPWcucGF5bG9hZCxmPXR5cGVvZiBtPT0iZnVuY3Rpb24iP20uY2FsbChwLGQsZik6bSxmPT1udWxsKWJyZWFrIGU7ZD1SdCh7fSxkLGYpO2JyZWFrIGU7Y2FzZSAyOnlzPSEwfX1hLmNhbGxiYWNrIT09bnVsbCYmYS5sYW5lIT09MCYmKGUuZmxhZ3N8PTY0LGY9by5lZmZlY3RzLGY9PT1udWxsP28uZWZmZWN0cz1bYV06Zi5wdXNoKGEpKX1lbHNlIHA9e2V2ZW50VGltZTpwLGxhbmU6Zix0YWc6YS50YWcscGF5bG9hZDphLnBheWxvYWQsY2FsbGJhY2s6YS5jYWxsYmFjayxuZXh0Om51bGx9LHU9PT1udWxsPyhjPXU9cCxsPWQpOnU9dS5uZXh0PXAsc3w9ZjtpZihhPWEubmV4dCxhPT09bnVsbCl7aWYoYT1vLnNoYXJlZC5wZW5kaW5nLGE9PT1udWxsKWJyZWFrO2Y9YSxhPWYubmV4dCxmLm5leHQ9bnVsbCxvLmxhc3RCYXNlVXBkYXRlPWYsby5zaGFyZWQucGVuZGluZz1udWxsfX13aGlsZSghMCk7aWYodT09PW51bGwmJihsPWQpLG8uYmFzZVN0YXRlPWwsby5maXJzdEJhc2VVcGRhdGU9YyxvLmxhc3RCYXNlVXBkYXRlPXUsdD1vLnNoYXJlZC5pbnRlcmxlYXZlZCx0IT09bnVsbCl7bz10O2RvIHN8PW8ubGFuZSxvPW8ubmV4dDt3aGlsZShvIT09dCl9ZWxzZSBpPT09bnVsbCYmKG8uc2hhcmVkLmxhbmVzPTApO1hhfD1zLGUubGFuZXM9cyxlLm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gY2soZSx0LG4pe2lmKGU9dC5lZmZlY3RzLHQuZWZmZWN0cz1udWxsLGUhPT1udWxsKWZvcih0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciByPWVbdF0sbz1yLmNhbGxiYWNrO2lmKG8hPT1udWxsKXtpZihyLmNhbGxiYWNrPW51bGwscj1uLHR5cGVvZiBvIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKEgoMTkxLG8pKTtvLmNhbGwocil9fX12YXIgUlQ9bmV3IFBPLkNvbXBvbmVudCgpLnJlZnM7ZnVuY3Rpb24gRDAoZSx0LG4scil7dD1lLm1lbW9pemVkU3RhdGUsbj1uKHIsdCksbj1uPT1udWxsP3Q6UnQoe30sdCxuKSxlLm1lbW9pemVkU3RhdGU9bixlLmxhbmVzPT09MCYmKGUudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4pfXZhciBoZz17aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybihlPWUuX3JlYWN0SW50ZXJuYWxzKT92bChlKT09PWU6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1XbigpLG89THMoZSksaT1PaShyLG8pO2kucGF5bG9hZD10LG4hPW51bGwmJihpLmNhbGxiYWNrPW4pLHQ9RHMoZSxpLG8pLHQhPT1udWxsJiYoQ28odCxlLG8sciksY2godCxlLG8pKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1XbigpLG89THMoZSksaT1PaShyLG8pO2kudGFnPTEsaS5wYXlsb2FkPXQsbiE9bnVsbCYmKGkuY2FsbGJhY2s9biksdD1EcyhlLGksbyksdCE9PW51bGwmJihDbyh0LGUsbyxyKSxjaCh0LGUsbykpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPVduKCkscj1McyhlKSxvPU9pKG4scik7by50YWc9Mix0IT1udWxsJiYoby5jYWxsYmFjaz10KSx0PURzKGUsbyxyKSx0IT09bnVsbCYmKENvKHQsZSxyLG4pLGNoKHQsZSxyKSl9fTtmdW5jdGlvbiB1ayhlLHQsbixyLG8saSxzKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixpLHMpOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hV2QobixyKXx8IVdkKG8saSk6ITB9ZnVuY3Rpb24gTlQoZSx0LG4pe3ZhciByPSExLG89cXMsaT10LmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsP2k9WHIoaSk6KG89bHIodCk/cWE6SW4uY3VycmVudCxyPXQuY29udGV4dFR5cGVzLGk9KHI9ciE9bnVsbCk/TmMoZSxvKTpxcyksdD1uZXcgdChuLGkpLGUubWVtb2l6ZWRTdGF0ZT10LnN0YXRlIT09bnVsbCYmdC5zdGF0ZSE9PXZvaWQgMD90LnN0YXRlOm51bGwsdC51cGRhdGVyPWhnLGUuc3RhdGVOb2RlPXQsdC5fcmVhY3RJbnRlcm5hbHM9ZSxyJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9byxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLHR9ZnVuY3Rpb24gZGsoZSx0LG4scil7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksdC5zdGF0ZSE9PWUmJmhnLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIEkwKGUsdCxuLHIpe3ZhciBvPWUuc3RhdGVOb2RlO28ucHJvcHM9bixvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxvLnJlZnM9UlQsWWIoZSk7dmFyIGk9dC5jb250ZXh0VHlwZTt0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsP28uY29udGV4dD1YcihpKTooaT1scih0KT9xYTpJbi5jdXJyZW50LG8uY29udGV4dD1OYyhlLGkpKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxpPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoRDAoZSx0LGksbiksby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLHR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBvLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHQ9by5zdGF0ZSx0eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJm8uY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksdCE9PW8uc3RhdGUmJmhnLmVucXVldWVSZXBsYWNlU3RhdGUobyxvLnN0YXRlLG51bGwpLFhoKGUsbixvLHIpLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2Ygby5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKGUuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIF91KGUsdCxuKXtpZihlPW4ucmVmLGUhPT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoSCgzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihIKDE0NyxlKSk7dmFyIG89cixpPSIiK2U7cmV0dXJuIHQhPT1udWxsJiZ0LnJlZiE9PW51bGwmJnR5cGVvZiB0LnJlZj09ImZ1bmN0aW9uIiYmdC5yZWYuX3N0cmluZ1JlZj09PWk/dC5yZWY6KHQ9ZnVuY3Rpb24ocyl7dmFyIGE9by5yZWZzO2E9PT1SVCYmKGE9by5yZWZzPXt9KSxzPT09bnVsbD9kZWxldGUgYVtpXTphW2ldPXN9LHQuX3N0cmluZ1JlZj1pLHQpfWlmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBFcnJvcihIKDI4NCkpO2lmKCFuLl9vd25lcil0aHJvdyBFcnJvcihIKDI5MCxlKSl9cmV0dXJuIGV9ZnVuY3Rpb24gQXAoZSx0KXt0aHJvdyBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxFcnJvcihIKDMxLGU9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjplKSl9ZnVuY3Rpb24gZmsoZSl7dmFyIHQ9ZS5faW5pdDtyZXR1cm4gdChlLl9wYXlsb2FkKX1mdW5jdGlvbiAkVChlKXtmdW5jdGlvbiB0KHYseCl7aWYoZSl7dmFyIHc9di5kZWxldGlvbnM7dz09PW51bGw/KHYuZGVsZXRpb25zPVt4XSx2LmZsYWdzfD0xNik6dy5wdXNoKHgpfX1mdW5jdGlvbiBuKHYseCl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDt4IT09bnVsbDspdCh2LHgpLHg9eC5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIodix4KXtmb3Iodj1uZXcgTWFwO3ghPT1udWxsOyl4LmtleSE9PW51bGw/di5zZXQoeC5rZXkseCk6di5zZXQoeC5pbmRleCx4KSx4PXguc2libGluZztyZXR1cm4gdn1mdW5jdGlvbiBvKHYseCl7cmV0dXJuIHY9anModix4KSx2LmluZGV4PTAsdi5zaWJsaW5nPW51bGwsdn1mdW5jdGlvbiBpKHYseCx3KXtyZXR1cm4gdi5pbmRleD13LGU/KHc9di5hbHRlcm5hdGUsdyE9PW51bGw/KHc9dy5pbmRleCx3PHg/KHYuZmxhZ3N8PTIseCk6dyk6KHYuZmxhZ3N8PTIseCkpOih2LmZsYWdzfD0xMDQ4NTc2LHgpfWZ1bmN0aW9uIHModil7cmV0dXJuIGUmJnYuYWx0ZXJuYXRlPT09bnVsbCYmKHYuZmxhZ3N8PTIpLHZ9ZnVuY3Rpb24gYSh2LHgsdyxrKXtyZXR1cm4geD09PW51bGx8fHgudGFnIT09Nj8oeD1meSh3LHYubW9kZSxrKSx4LnJldHVybj12LHgpOih4PW8oeCx3KSx4LnJldHVybj12LHgpfWZ1bmN0aW9uIGwodix4LHcsayl7dmFyIEU9dy50eXBlO3JldHVybiBFPT09bmM/dSh2LHgsdy5wcm9wcy5jaGlsZHJlbixrLHcua2V5KTp4IT09bnVsbCYmKHguZWxlbWVudFR5cGU9PT1FfHx0eXBlb2YgRT09Im9iamVjdCImJkUhPT1udWxsJiZFLiQkdHlwZW9mPT09dnMmJmZrKEUpPT09eC50eXBlKT8oaz1vKHgsdy5wcm9wcyksay5yZWY9X3Uodix4LHcpLGsucmV0dXJuPXYsayk6KGs9bWgody50eXBlLHcua2V5LHcucHJvcHMsbnVsbCx2Lm1vZGUsayksay5yZWY9X3Uodix4LHcpLGsucmV0dXJuPXYsayl9ZnVuY3Rpb24gYyh2LHgsdyxrKXtyZXR1cm4geD09PW51bGx8fHgudGFnIT09NHx8eC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PXcuY29udGFpbmVySW5mb3x8eC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT13LmltcGxlbWVudGF0aW9uPyh4PXB5KHcsdi5tb2RlLGspLHgucmV0dXJuPXYseCk6KHg9byh4LHcuY2hpbGRyZW58fFtdKSx4LnJldHVybj12LHgpfWZ1bmN0aW9uIHUodix4LHcsayxFKXtyZXR1cm4geD09PW51bGx8fHgudGFnIT09Nz8oeD1GYSh3LHYubW9kZSxrLEUpLHgucmV0dXJuPXYseCk6KHg9byh4LHcpLHgucmV0dXJuPXYseCl9ZnVuY3Rpb24gZCh2LHgsdyl7aWYodHlwZW9mIHg9PSJzdHJpbmciJiZ4IT09IiJ8fHR5cGVvZiB4PT0ibnVtYmVyIilyZXR1cm4geD1meSgiIit4LHYubW9kZSx3KSx4LnJldHVybj12LHg7aWYodHlwZW9mIHg9PSJvYmplY3QiJiZ4IT09bnVsbCl7c3dpdGNoKHguJCR0eXBlb2Ype2Nhc2Uga3A6cmV0dXJuIHc9bWgoeC50eXBlLHgua2V5LHgucHJvcHMsbnVsbCx2Lm1vZGUsdyksdy5yZWY9X3UodixudWxsLHgpLHcucmV0dXJuPXYsdztjYXNlIHRjOnJldHVybiB4PXB5KHgsdi5tb2RlLHcpLHgucmV0dXJuPXYseDtjYXNlIHZzOnZhciBrPXguX2luaXQ7cmV0dXJuIGQodixrKHguX3BheWxvYWQpLHcpfWlmKFd1KHgpfHxidSh4KSlyZXR1cm4geD1GYSh4LHYubW9kZSx3LG51bGwpLHgucmV0dXJuPXYseDtBcCh2LHgpfXJldHVybiBudWxsfWZ1bmN0aW9uIGYodix4LHcsayl7dmFyIEU9eCE9PW51bGw/eC5rZXk6bnVsbDtpZih0eXBlb2Ygdz09InN0cmluZyImJnchPT0iInx8dHlwZW9mIHc9PSJudW1iZXIiKXJldHVybiBFIT09bnVsbD9udWxsOmEodix4LCIiK3csayk7aWYodHlwZW9mIHc9PSJvYmplY3QiJiZ3IT09bnVsbCl7c3dpdGNoKHcuJCR0eXBlb2Ype2Nhc2Uga3A6cmV0dXJuIHcua2V5PT09RT9sKHYseCx3LGspOm51bGw7Y2FzZSB0YzpyZXR1cm4gdy5rZXk9PT1FP2Modix4LHcsayk6bnVsbDtjYXNlIHZzOnJldHVybiBFPXcuX2luaXQsZih2LHgsRSh3Ll9wYXlsb2FkKSxrKX1pZihXdSh3KXx8YnUodykpcmV0dXJuIEUhPT1udWxsP251bGw6dSh2LHgsdyxrLG51bGwpO0FwKHYsdyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcCh2LHgsdyxrLEUpe2lmKHR5cGVvZiBrPT0ic3RyaW5nIiYmayE9PSIifHx0eXBlb2Ygaz09Im51bWJlciIpcmV0dXJuIHY9di5nZXQodyl8fG51bGwsYSh4LHYsIiIrayxFKTtpZih0eXBlb2Ygaz09Im9iamVjdCImJmshPT1udWxsKXtzd2l0Y2goay4kJHR5cGVvZil7Y2FzZSBrcDpyZXR1cm4gdj12LmdldChrLmtleT09PW51bGw/dzprLmtleSl8fG51bGwsbCh4LHYsayxFKTtjYXNlIHRjOnJldHVybiB2PXYuZ2V0KGsua2V5PT09bnVsbD93Omsua2V5KXx8bnVsbCxjKHgsdixrLEUpO2Nhc2UgdnM6dmFyIFM9ay5faW5pdDtyZXR1cm4gcCh2LHgsdyxTKGsuX3BheWxvYWQpLEUpfWlmKFd1KGspfHxidShrKSlyZXR1cm4gdj12LmdldCh3KXx8bnVsbCx1KHgsdixrLEUsbnVsbCk7QXAoeCxrKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtKHYseCx3LGspe2Zvcih2YXIgRT1udWxsLFM9bnVsbCxfPXgsUD14PTAsTT1udWxsO18hPT1udWxsJiZQPHcubGVuZ3RoO1ArKyl7Xy5pbmRleD5QPyhNPV8sXz1udWxsKTpNPV8uc2libGluZzt2YXIgQT1mKHYsXyx3W1BdLGspO2lmKEE9PT1udWxsKXtfPT09bnVsbCYmKF89TSk7YnJlYWt9ZSYmXyYmQS5hbHRlcm5hdGU9PT1udWxsJiZ0KHYsXykseD1pKEEseCxQKSxTPT09bnVsbD9FPUE6Uy5zaWJsaW5nPUEsUz1BLF89TX1pZihQPT09dy5sZW5ndGgpcmV0dXJuIG4odixfKSxrdCYmdmEodixQKSxFO2lmKF89PT1udWxsKXtmb3IoO1A8dy5sZW5ndGg7UCsrKV89ZCh2LHdbUF0sayksXyE9PW51bGwmJih4PWkoXyx4LFApLFM9PT1udWxsP0U9XzpTLnNpYmxpbmc9XyxTPV8pO3JldHVybiBrdCYmdmEodixQKSxFfWZvcihfPXIodixfKTtQPHcubGVuZ3RoO1ArKylNPXAoXyx2LFAsd1tQXSxrKSxNIT09bnVsbCYmKGUmJk0uYWx0ZXJuYXRlIT09bnVsbCYmXy5kZWxldGUoTS5rZXk9PT1udWxsP1A6TS5rZXkpLHg9aShNLHgsUCksUz09PW51bGw/RT1NOlMuc2libGluZz1NLFM9TSk7cmV0dXJuIGUmJl8uZm9yRWFjaChmdW5jdGlvbihJKXtyZXR1cm4gdCh2LEkpfSksa3QmJnZhKHYsUCksRX1mdW5jdGlvbiBnKHYseCx3LGspe3ZhciBFPWJ1KHcpO2lmKHR5cGVvZiBFIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKEgoMTUwKSk7aWYodz1FLmNhbGwodyksdz09bnVsbCl0aHJvdyBFcnJvcihIKDE1MSkpO2Zvcih2YXIgUz1FPW51bGwsXz14LFA9eD0wLE09bnVsbCxBPXcubmV4dCgpO18hPT1udWxsJiYhQS5kb25lO1ArKyxBPXcubmV4dCgpKXtfLmluZGV4PlA/KE09XyxfPW51bGwpOk09Xy5zaWJsaW5nO3ZhciBJPWYodixfLEEudmFsdWUsayk7aWYoST09PW51bGwpe189PT1udWxsJiYoXz1NKTticmVha31lJiZfJiZJLmFsdGVybmF0ZT09PW51bGwmJnQodixfKSx4PWkoSSx4LFApLFM9PT1udWxsP0U9STpTLnNpYmxpbmc9SSxTPUksXz1NfWlmKEEuZG9uZSlyZXR1cm4gbih2LF8pLGt0JiZ2YSh2LFApLEU7aWYoXz09PW51bGwpe2Zvcig7IUEuZG9uZTtQKyssQT13Lm5leHQoKSlBPWQodixBLnZhbHVlLGspLEEhPT1udWxsJiYoeD1pKEEseCxQKSxTPT09bnVsbD9FPUE6Uy5zaWJsaW5nPUEsUz1BKTtyZXR1cm4ga3QmJnZhKHYsUCksRX1mb3IoXz1yKHYsXyk7IUEuZG9uZTtQKyssQT13Lm5leHQoKSlBPXAoXyx2LFAsQS52YWx1ZSxrKSxBIT09bnVsbCYmKGUmJkEuYWx0ZXJuYXRlIT09bnVsbCYmXy5kZWxldGUoQS5rZXk9PT1udWxsP1A6QS5rZXkpLHg9aShBLHgsUCksUz09PW51bGw/RT1BOlMuc2libGluZz1BLFM9QSk7cmV0dXJuIGUmJl8uZm9yRWFjaChmdW5jdGlvbihMKXtyZXR1cm4gdCh2LEwpfSksa3QmJnZhKHYsUCksRX1mdW5jdGlvbiB5KHYseCx3LGspe2lmKHR5cGVvZiB3PT0ib2JqZWN0IiYmdyE9PW51bGwmJncudHlwZT09PW5jJiZ3LmtleT09PW51bGwmJih3PXcucHJvcHMuY2hpbGRyZW4pLHR5cGVvZiB3PT0ib2JqZWN0IiYmdyE9PW51bGwpe3N3aXRjaCh3LiQkdHlwZW9mKXtjYXNlIGtwOmU6e2Zvcih2YXIgRT13LmtleSxTPXg7UyE9PW51bGw7KXtpZihTLmtleT09PUUpe2lmKEU9dy50eXBlLEU9PT1uYyl7aWYoUy50YWc9PT03KXtuKHYsUy5zaWJsaW5nKSx4PW8oUyx3LnByb3BzLmNoaWxkcmVuKSx4LnJldHVybj12LHY9eDticmVhayBlfX1lbHNlIGlmKFMuZWxlbWVudFR5cGU9PT1FfHx0eXBlb2YgRT09Im9iamVjdCImJkUhPT1udWxsJiZFLiQkdHlwZW9mPT09dnMmJmZrKEUpPT09Uy50eXBlKXtuKHYsUy5zaWJsaW5nKSx4PW8oUyx3LnByb3BzKSx4LnJlZj1fdSh2LFMsdykseC5yZXR1cm49dix2PXg7YnJlYWsgZX1uKHYsUyk7YnJlYWt9ZWxzZSB0KHYsUyk7Uz1TLnNpYmxpbmd9dy50eXBlPT09bmM/KHg9RmEody5wcm9wcy5jaGlsZHJlbix2Lm1vZGUsayx3LmtleSkseC5yZXR1cm49dix2PXgpOihrPW1oKHcudHlwZSx3LmtleSx3LnByb3BzLG51bGwsdi5tb2RlLGspLGsucmVmPV91KHYseCx3KSxrLnJldHVybj12LHY9ayl9cmV0dXJuIHModik7Y2FzZSB0YzplOntmb3IoUz13LmtleTt4IT09bnVsbDspe2lmKHgua2V5PT09UylpZih4LnRhZz09PTQmJnguc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT13LmNvbnRhaW5lckluZm8mJnguc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09dy5pbXBsZW1lbnRhdGlvbil7bih2LHguc2libGluZykseD1vKHgsdy5jaGlsZHJlbnx8W10pLHgucmV0dXJuPXYsdj14O2JyZWFrIGV9ZWxzZXtuKHYseCk7YnJlYWt9ZWxzZSB0KHYseCk7eD14LnNpYmxpbmd9eD1weSh3LHYubW9kZSxrKSx4LnJldHVybj12LHY9eH1yZXR1cm4gcyh2KTtjYXNlIHZzOnJldHVybiBTPXcuX2luaXQseSh2LHgsUyh3Ll9wYXlsb2FkKSxrKX1pZihXdSh3KSlyZXR1cm4gbSh2LHgsdyxrKTtpZihidSh3KSlyZXR1cm4gZyh2LHgsdyxrKTtBcCh2LHcpfXJldHVybiB0eXBlb2Ygdz09InN0cmluZyImJnchPT0iInx8dHlwZW9mIHc9PSJudW1iZXIiPyh3PSIiK3cseCE9PW51bGwmJngudGFnPT09Nj8obih2LHguc2libGluZykseD1vKHgsdykseC5yZXR1cm49dix2PXgpOihuKHYseCkseD1meSh3LHYubW9kZSxrKSx4LnJldHVybj12LHY9eCkscyh2KSk6bih2LHgpfXJldHVybiB5fXZhciBBYz0kVCghMCksQVQ9JFQoITEpLFhmPXt9LFlvPWFhKFhmKSxZZD1hYShYZiksWGQ9YWEoWGYpO2Z1bmN0aW9uIFJhKGUpe2lmKGU9PT1YZil0aHJvdyBFcnJvcihIKDE3NCkpO3JldHVybiBlfWZ1bmN0aW9uIFhiKGUsdCl7c3dpdGNoKGd0KFhkLHQpLGd0KFlkLGUpLGd0KFlvLFhmKSxlPXQubm9kZVR5cGUsZSl7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6aDAobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDplPWU9PT04P3QucGFyZW50Tm9kZTp0LHQ9ZS5uYW1lc3BhY2VVUkl8fG51bGwsZT1lLnRhZ05hbWUsdD1oMCh0LGUpfXd0KFlvKSxndChZbyx0KX1mdW5jdGlvbiBEYygpe3d0KFlvKSx3dChZZCksd3QoWGQpfWZ1bmN0aW9uIERUKGUpe1JhKFhkLmN1cnJlbnQpO3ZhciB0PVJhKFlvLmN1cnJlbnQpLG49aDAodCxlLnR5cGUpO3QhPT1uJiYoZ3QoWWQsZSksZ3QoWW8sbikpfWZ1bmN0aW9uIFpiKGUpe1lkLmN1cnJlbnQ9PT1lJiYod3QoWW8pLHd0KFlkKSl9dmFyIFR0PWFhKDApO2Z1bmN0aW9uIFpoKGUpe2Zvcih2YXIgdD1lO3QhPT1udWxsOyl7aWYodC50YWc9PT0xMyl7dmFyIG49dC5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fG4uZGF0YT09PSIkPyJ8fG4uZGF0YT09PSIkISIpKXJldHVybiB0fWVsc2UgaWYodC50YWc9PT0xOSYmdC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIT09dm9pZCAwKXtpZih0LmZsYWdzJjEyOClyZXR1cm4gdH1lbHNlIGlmKHQuY2hpbGQhPT1udWxsKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHN5PVtdO2Z1bmN0aW9uIEpiKCl7Zm9yKHZhciBlPTA7ZTxzeS5sZW5ndGg7ZSsrKXN5W2VdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7c3kubGVuZ3RoPTB9dmFyIHVoPUJpLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsYXk9QmkuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsWWE9MCxNdD1udWxsLFl0PW51bGwsdW49bnVsbCxKaD0hMSxFZD0hMSxaZD0wLEgzPTA7ZnVuY3Rpb24gUG4oKXt0aHJvdyBFcnJvcihIKDMyMSkpfWZ1bmN0aW9uIFFiKGUsdCl7aWYodD09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmbjxlLmxlbmd0aDtuKyspaWYoIVJvKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZTEoZSx0LG4scixvLGkpe2lmKFlhPWksTXQ9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLHVoLmN1cnJlbnQ9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/RzM6WTMsZT1uKHIsbyksRWQpe2k9MDtkb3tpZihFZD0hMSxaZD0wLDI1PD1pKXRocm93IEVycm9yKEgoMzAxKSk7aSs9MSx1bj1ZdD1udWxsLHQudXBkYXRlUXVldWU9bnVsbCx1aC5jdXJyZW50PVgzLGU9bihyLG8pfXdoaWxlKEVkKX1pZih1aC5jdXJyZW50PVFoLHQ9WXQhPT1udWxsJiZZdC5uZXh0IT09bnVsbCxZYT0wLHVuPVl0PU10PW51bGwsSmg9ITEsdCl0aHJvdyBFcnJvcihIKDMwMCkpO3JldHVybiBlfWZ1bmN0aW9uIHQxKCl7dmFyIGU9WmQhPT0wO3JldHVybiBaZD0wLGV9ZnVuY3Rpb24gQm8oKXt2YXIgZT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gdW49PT1udWxsP010Lm1lbW9pemVkU3RhdGU9dW49ZTp1bj11bi5uZXh0PWUsdW59ZnVuY3Rpb24gWnIoKXtpZihZdD09PW51bGwpe3ZhciBlPU10LmFsdGVybmF0ZTtlPWUhPT1udWxsP2UubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgZT1ZdC5uZXh0O3ZhciB0PXVuPT09bnVsbD9NdC5tZW1vaXplZFN0YXRlOnVuLm5leHQ7aWYodCE9PW51bGwpdW49dCxZdD1lO2Vsc2V7aWYoZT09PW51bGwpdGhyb3cgRXJyb3IoSCgzMTApKTtZdD1lLGU9e21lbW9pemVkU3RhdGU6WXQubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6WXQuYmFzZVN0YXRlLGJhc2VRdWV1ZTpZdC5iYXNlUXVldWUscXVldWU6WXQucXVldWUsbmV4dDpudWxsfSx1bj09PW51bGw/TXQubWVtb2l6ZWRTdGF0ZT11bj1lOnVuPXVuLm5leHQ9ZX1yZXR1cm4gdW59ZnVuY3Rpb24gSmQoZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIGx5KGUpe3ZhciB0PVpyKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKEgoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9WXQsbz1yLmJhc2VRdWV1ZSxpPW4ucGVuZGluZztpZihpIT09bnVsbCl7aWYobyE9PW51bGwpe3ZhciBzPW8ubmV4dDtvLm5leHQ9aS5uZXh0LGkubmV4dD1zfXIuYmFzZVF1ZXVlPW89aSxuLnBlbmRpbmc9bnVsbH1pZihvIT09bnVsbCl7aT1vLm5leHQscj1yLmJhc2VTdGF0ZTt2YXIgYT1zPW51bGwsbD1udWxsLGM9aTtkb3t2YXIgdT1jLmxhbmU7aWYoKFlhJnUpPT09dSlsIT09bnVsbCYmKGw9bC5uZXh0PXtsYW5lOjAsYWN0aW9uOmMuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6Yy5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6Yy5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9Yy5oYXNFYWdlclN0YXRlP2MuZWFnZXJTdGF0ZTplKHIsYy5hY3Rpb24pO2Vsc2V7dmFyIGQ9e2xhbmU6dSxhY3Rpb246Yy5hY3Rpb24saGFzRWFnZXJTdGF0ZTpjLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpjLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtsPT09bnVsbD8oYT1sPWQscz1yKTpsPWwubmV4dD1kLE10LmxhbmVzfD11LFhhfD11fWM9Yy5uZXh0fXdoaWxlKGMhPT1udWxsJiZjIT09aSk7bD09PW51bGw/cz1yOmwubmV4dD1hLFJvKHIsdC5tZW1vaXplZFN0YXRlKXx8KGlyPSEwKSx0Lm1lbW9pemVkU3RhdGU9cix0LmJhc2VTdGF0ZT1zLHQuYmFzZVF1ZXVlPWwsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKGU9bi5pbnRlcmxlYXZlZCxlIT09bnVsbCl7bz1lO2RvIGk9by5sYW5lLE10LmxhbmVzfD1pLFhhfD1pLG89by5uZXh0O3doaWxlKG8hPT1lKX1lbHNlIG89PT1udWxsJiYobi5sYW5lcz0wKTtyZXR1cm5bdC5tZW1vaXplZFN0YXRlLG4uZGlzcGF0Y2hdfWZ1bmN0aW9uIGN5KGUpe3ZhciB0PVpyKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKEgoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9bi5kaXNwYXRjaCxvPW4ucGVuZGluZyxpPXQubWVtb2l6ZWRTdGF0ZTtpZihvIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIHM9bz1vLm5leHQ7ZG8gaT1lKGkscy5hY3Rpb24pLHM9cy5uZXh0O3doaWxlKHMhPT1vKTtSbyhpLHQubWVtb2l6ZWRTdGF0ZSl8fChpcj0hMCksdC5tZW1vaXplZFN0YXRlPWksdC5iYXNlUXVldWU9PT1udWxsJiYodC5iYXNlU3RhdGU9aSksbi5sYXN0UmVuZGVyZWRTdGF0ZT1pfXJldHVybltpLHJdfWZ1bmN0aW9uIElUKCl7fWZ1bmN0aW9uIExUKGUsdCl7dmFyIG49TXQscj1acigpLG89dCgpLGk9IVJvKHIubWVtb2l6ZWRTdGF0ZSxvKTtpZihpJiYoci5tZW1vaXplZFN0YXRlPW8saXI9ITApLHI9ci5xdWV1ZSxuMShGVC5iaW5kKG51bGwsbixyLGUpLFtlXSksci5nZXRTbmFwc2hvdCE9PXR8fGl8fHVuIT09bnVsbCYmdW4ubWVtb2l6ZWRTdGF0ZS50YWcmMSl7aWYobi5mbGFnc3w9MjA0OCxRZCg5LHpULmJpbmQobnVsbCxuLHIsbyx0KSx2b2lkIDAsbnVsbCksaG49PT1udWxsKXRocm93IEVycm9yKEgoMzQ5KSk7WWEmMzB8fGpUKG4sdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBqVChlLHQsbil7ZS5mbGFnc3w9MTYzODQsZT17Z2V0U25hcHNob3Q6dCx2YWx1ZTpufSx0PU10LnVwZGF0ZVF1ZXVlLHQ9PT1udWxsPyh0PXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LE10LnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiB6VChlLHQsbixyKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1yLEJUKHQpJiZVVChlKX1mdW5jdGlvbiBGVChlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXtCVCh0KSYmVVQoZSl9KX1mdW5jdGlvbiBCVChlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFSbyhlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBVVChlKXt2YXIgdD1OaShlLDEpO3QhPT1udWxsJiZDbyh0LGUsMSwtMSl9ZnVuY3Rpb24gcGsoZSl7dmFyIHQ9Qm8oKTtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiImJihlPWUoKSksdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsZT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6SmQsbGFzdFJlbmRlcmVkU3RhdGU6ZX0sdC5xdWV1ZT1lLGU9ZS5kaXNwYXRjaD1xMy5iaW5kKG51bGwsTXQsZSksW3QubWVtb2l6ZWRTdGF0ZSxlXX1mdW5jdGlvbiBRZChlLHQsbixyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsZGVzdHJveTpuLGRlcHM6cixuZXh0Om51bGx9LHQ9TXQudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0sTXQudXBkYXRlUXVldWU9dCx0Lmxhc3RFZmZlY3Q9ZS5uZXh0PWUpOihuPXQubGFzdEVmZmVjdCxuPT09bnVsbD90Lmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9bi5uZXh0LG4ubmV4dD1lLGUubmV4dD1yLHQubGFzdEVmZmVjdD1lKSksZX1mdW5jdGlvbiBWVCgpe3JldHVybiBacigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gZGgoZSx0LG4scil7dmFyIG89Qm8oKTtNdC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9UWQoMXx0LG4sdm9pZCAwLHI9PT12b2lkIDA/bnVsbDpyKX1mdW5jdGlvbiBtZyhlLHQsbixyKXt2YXIgbz1acigpO3I9cj09PXZvaWQgMD9udWxsOnI7dmFyIGk9dm9pZCAwO2lmKFl0IT09bnVsbCl7dmFyIHM9WXQubWVtb2l6ZWRTdGF0ZTtpZihpPXMuZGVzdHJveSxyIT09bnVsbCYmUWIocixzLmRlcHMpKXtvLm1lbW9pemVkU3RhdGU9UWQodCxuLGkscik7cmV0dXJufX1NdC5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9UWQoMXx0LG4saSxyKX1mdW5jdGlvbiBoayhlLHQpe3JldHVybiBkaCg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBuMShlLHQpe3JldHVybiBtZygyMDQ4LDgsZSx0KX1mdW5jdGlvbiBIVChlLHQpe3JldHVybiBtZyg0LDIsZSx0KX1mdW5jdGlvbiBXVChlLHQpe3JldHVybiBtZyg0LDQsZSx0KX1mdW5jdGlvbiBLVChlLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiBlPWUoKSx0KGUpLGZ1bmN0aW9uKCl7dChudWxsKX07aWYodCE9bnVsbClyZXR1cm4gZT1lKCksdC5jdXJyZW50PWUsZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gcVQoZSx0LG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLG1nKDQsNCxLVC5iaW5kKG51bGwsdCxlKSxuKX1mdW5jdGlvbiByMSgpe31mdW5jdGlvbiBHVChlLHQpe3ZhciBuPVpyKCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZ0IT09bnVsbCYmUWIodCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gWVQoZSx0KXt2YXIgbj1acigpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmdCE9PW51bGwmJlFiKHQsclsxXSk/clswXTooZT1lKCksbi5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfWZ1bmN0aW9uIFhUKGUsdCxuKXtyZXR1cm4gWWEmMjE/KFJvKG4sdCl8fChuPVFPKCksTXQubGFuZXN8PW4sWGF8PW4sZS5iYXNlU3RhdGU9ITApLHQpOihlLmJhc2VTdGF0ZSYmKGUuYmFzZVN0YXRlPSExLGlyPSEwKSxlLm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24gVzMoZSx0KXt2YXIgbj1sdDtsdD1uIT09MCYmND5uP246NCxlKCEwKTt2YXIgcj1heS50cmFuc2l0aW9uO2F5LnRyYW5zaXRpb249e307dHJ5e2UoITEpLHQoKX1maW5hbGx5e2x0PW4sYXkudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiBaVCgpe3JldHVybiBacigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gSzMoZSx0LG4pe3ZhciByPUxzKGUpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LEpUKGUpKVFUKHQsbik7ZWxzZSBpZihuPVBUKGUsdCxuLHIpLG4hPT1udWxsKXt2YXIgbz1XbigpO0NvKG4sZSxyLG8pLGUyKG4sdCxyKX19ZnVuY3Rpb24gcTMoZSx0LG4pe3ZhciByPUxzKGUpLG89e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKEpUKGUpKVFUKHQsbyk7ZWxzZXt2YXIgaT1lLmFsdGVybmF0ZTtpZihlLmxhbmVzPT09MCYmKGk9PT1udWxsfHxpLmxhbmVzPT09MCkmJihpPXQubGFzdFJlbmRlcmVkUmVkdWNlcixpIT09bnVsbCkpdHJ5e3ZhciBzPXQubGFzdFJlbmRlcmVkU3RhdGUsYT1pKHMsbik7aWYoby5oYXNFYWdlclN0YXRlPSEwLG8uZWFnZXJTdGF0ZT1hLFJvKGEscykpe3ZhciBsPXQuaW50ZXJsZWF2ZWQ7bD09PW51bGw/KG8ubmV4dD1vLEdiKHQpKTooby5uZXh0PWwubmV4dCxsLm5leHQ9byksdC5pbnRlcmxlYXZlZD1vO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49UFQoZSx0LG8sciksbiE9PW51bGwmJihvPVduKCksQ28obixlLHIsbyksZTIobix0LHIpKX19ZnVuY3Rpb24gSlQoZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1NdHx8dCE9PW51bGwmJnQ9PT1NdH1mdW5jdGlvbiBRVChlLHQpe0VkPUpoPSEwO3ZhciBuPWUucGVuZGluZztuPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PW4ubmV4dCxuLm5leHQ9dCksZS5wZW5kaW5nPXR9ZnVuY3Rpb24gZTIoZSx0LG4pe2lmKG4mNDE5NDI0MCl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixBYihlLG4pfX12YXIgUWg9e3JlYWRDb250ZXh0OlhyLHVzZUNhbGxiYWNrOlBuLHVzZUNvbnRleHQ6UG4sdXNlRWZmZWN0OlBuLHVzZUltcGVyYXRpdmVIYW5kbGU6UG4sdXNlSW5zZXJ0aW9uRWZmZWN0OlBuLHVzZUxheW91dEVmZmVjdDpQbix1c2VNZW1vOlBuLHVzZVJlZHVjZXI6UG4sdXNlUmVmOlBuLHVzZVN0YXRlOlBuLHVzZURlYnVnVmFsdWU6UG4sdXNlRGVmZXJyZWRWYWx1ZTpQbix1c2VUcmFuc2l0aW9uOlBuLHVzZU11dGFibGVTb3VyY2U6UG4sdXNlU3luY0V4dGVybmFsU3RvcmU6UG4sdXNlSWQ6UG4sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxHMz17cmVhZENvbnRleHQ6WHIsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQm8oKS5tZW1vaXplZFN0YXRlPVtlLHQ9PT12b2lkIDA/bnVsbDp0XSxlfSx1c2VDb250ZXh0OlhyLHVzZUVmZmVjdDpoayx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxkaCg0MTk0MzA4LDQsS1QuYmluZChudWxsLHQsZSksbil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBkaCg0MTk0MzA4LDQsZSx0KX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGRoKDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49Qm8oKTtyZXR1cm4gdD10PT09dm9pZCAwP251bGw6dCxlPWUoKSxuLm1lbW9pemVkU3RhdGU9W2UsdF0sZX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9Qm8oKTtyZXR1cm4gdD1uIT09dm9pZCAwP24odCk6dCxyLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9dCxlPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOnR9LHIucXVldWU9ZSxlPWUuZGlzcGF0Y2g9SzMuYmluZChudWxsLE10LGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD1CbygpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTpwayx1c2VEZWJ1Z1ZhbHVlOnIxLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEJvKCkubWVtb2l6ZWRTdGF0ZT1lfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9cGsoITEpLHQ9ZVswXTtyZXR1cm4gZT1XMy5iaW5kKG51bGwsZVsxXSksQm8oKS5tZW1vaXplZFN0YXRlPWUsW3QsZV19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1NdCxvPUJvKCk7aWYoa3Qpe2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoSCg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLGhuPT09bnVsbCl0aHJvdyBFcnJvcihIKDM0OSkpO1lhJjMwfHxqVChyLHQsbil9by5tZW1vaXplZFN0YXRlPW47dmFyIGk9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIG8ucXVldWU9aSxoayhGVC5iaW5kKG51bGwscixpLGUpLFtlXSksci5mbGFnc3w9MjA0OCxRZCg5LHpULmJpbmQobnVsbCxyLGksbix0KSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1CbygpLHQ9aG4uaWRlbnRpZmllclByZWZpeDtpZihrdCl7dmFyIG49a2kscj1TaTtuPShyJn4oMTw8MzItX28ociktMSkpLnRvU3RyaW5nKDMyKStuLHQ9IjoiK3QrIlIiK24sbj1aZCsrLDA8biYmKHQrPSJIIituLnRvU3RyaW5nKDMyKSksdCs9IjoifWVsc2Ugbj1IMysrLHQ9IjoiK3QrInIiK24udG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sWTM9e3JlYWRDb250ZXh0OlhyLHVzZUNhbGxiYWNrOkdULHVzZUNvbnRleHQ6WHIsdXNlRWZmZWN0Om4xLHVzZUltcGVyYXRpdmVIYW5kbGU6cVQsdXNlSW5zZXJ0aW9uRWZmZWN0OkhULHVzZUxheW91dEVmZmVjdDpXVCx1c2VNZW1vOllULHVzZVJlZHVjZXI6bHksdXNlUmVmOlZULHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGx5KEpkKX0sdXNlRGVidWdWYWx1ZTpyMSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVpyKCk7cmV0dXJuIFhUKHQsWXQubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWx5KEpkKVswXSx0PVpyKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bZSx0XX0sdXNlTXV0YWJsZVNvdXJjZTpJVCx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpMVCx1c2VJZDpaVCx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LFgzPXtyZWFkQ29udGV4dDpYcix1c2VDYWxsYmFjazpHVCx1c2VDb250ZXh0OlhyLHVzZUVmZmVjdDpuMSx1c2VJbXBlcmF0aXZlSGFuZGxlOnFULHVzZUluc2VydGlvbkVmZmVjdDpIVCx1c2VMYXlvdXRFZmZlY3Q6V1QsdXNlTWVtbzpZVCx1c2VSZWR1Y2VyOmN5LHVzZVJlZjpWVCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBjeShKZCl9LHVzZURlYnVnVmFsdWU6cjEsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1acigpO3JldHVybiBZdD09PW51bGw/dC5tZW1vaXplZFN0YXRlPWU6WFQodCxZdC5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9Y3koSmQpWzBdLHQ9WnIoKS5tZW1vaXplZFN0YXRlO3JldHVybltlLHRdfSx1c2VNdXRhYmxlU291cmNlOklULHVzZVN5bmNFeHRlcm5hbFN0b3JlOkxULHVzZUlkOlpULHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24gSWMoZSx0KXt0cnl7dmFyIG49IiIscj10O2RvIG4rPUVJKHIpLHI9ci5yZXR1cm47d2hpbGUocik7dmFyIG89bn1jYXRjaChpKXtvPWAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtpLm1lc3NhZ2UrYApgK2kuc3RhY2t9cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6byxkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gdXkoZSx0LG4pe3JldHVybnt2YWx1ZTplLHNvdXJjZTpudWxsLHN0YWNrOm4/P251bGwsZGlnZXN0OnQ/P251bGx9fWZ1bmN0aW9uIEwwKGUsdCl7dHJ5e2NvbnNvbGUuZXJyb3IodC52YWx1ZSl9Y2F0Y2gobil7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IG59KX19dmFyIFozPXR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIHQyKGUsdCxuKXtuPU9pKC0xLG4pLG4udGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPXQudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXt0bXx8KHRtPSEwLHEwPXIpLEwwKGUsdCl9LG59ZnVuY3Rpb24gbjIoZSx0LG4pe249T2koLTEsbiksbi50YWc9Mzt2YXIgcj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgbz10LnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKG8pfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7TDAoZSx0KX19dmFyIGk9ZS5zdGF0ZU5vZGU7cmV0dXJuIGkhPT1udWxsJiZ0eXBlb2YgaS5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtMMChlLHQpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiYoSXM9PT1udWxsP0lzPW5ldyBTZXQoW3RoaXNdKTpJcy5hZGQodGhpcykpO3ZhciBzPXQuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaCh0LnZhbHVlLHtjb21wb25lbnRTdGFjazpzIT09bnVsbD9zOiIifSl9KSxufWZ1bmN0aW9uIG1rKGUsdCxuKXt2YXIgcj1lLnBpbmdDYWNoZTtpZihyPT09bnVsbCl7cj1lLnBpbmdDYWNoZT1uZXcgWjM7dmFyIG89bmV3IFNldDtyLnNldCh0LG8pfWVsc2Ugbz1yLmdldCh0KSxvPT09dm9pZCAwJiYobz1uZXcgU2V0LHIuc2V0KHQsbykpO28uaGFzKG4pfHwoby5hZGQobiksZT1kTC5iaW5kKG51bGwsZSx0LG4pLHQudGhlbihlLGUpKX1mdW5jdGlvbiBnayhlKXtkb3t2YXIgdDtpZigodD1lLnRhZz09PTEzKSYmKHQ9ZS5tZW1vaXplZFN0YXRlLHQ9dCE9PW51bGw/dC5kZWh5ZHJhdGVkIT09bnVsbDohMCksdClyZXR1cm4gZTtlPWUucmV0dXJufXdoaWxlKGUhPT1udWxsKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiB2ayhlLHQsbixyLG8pe3JldHVybiBlLm1vZGUmMT8oZS5mbGFnc3w9NjU1MzYsZS5sYW5lcz1vLGUpOihlPT09dD9lLmZsYWdzfD02NTUzNjooZS5mbGFnc3w9MTI4LG4uZmxhZ3N8PTEzMTA3MixuLmZsYWdzJj0tNTI4MDUsbi50YWc9PT0xJiYobi5hbHRlcm5hdGU9PT1udWxsP24udGFnPTE3Oih0PU9pKC0xLDEpLHQudGFnPTIsRHMobix0LDEpKSksbi5sYW5lc3w9MSksZSl9dmFyIEozPUJpLlJlYWN0Q3VycmVudE93bmVyLGlyPSExO2Z1bmN0aW9uIFVuKGUsdCxuLHIpe3QuY2hpbGQ9ZT09PW51bGw/QVQodCxudWxsLG4scik6QWModCxlLmNoaWxkLG4scil9ZnVuY3Rpb24geWsoZSx0LG4scixvKXtuPW4ucmVuZGVyO3ZhciBpPXQucmVmO3JldHVybiB3Yyh0LG8pLHI9ZTEoZSx0LG4scixpLG8pLG49dDEoKSxlIT09bnVsbCYmIWlyPyh0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fm8sJGkoZSx0LG8pKTooa3QmJm4mJlViKHQpLHQuZmxhZ3N8PTEsVW4oZSx0LHIsbyksdC5jaGlsZCl9ZnVuY3Rpb24geGsoZSx0LG4scixvKXtpZihlPT09bnVsbCl7dmFyIGk9bi50eXBlO3JldHVybiB0eXBlb2YgaT09ImZ1bmN0aW9uIiYmIWQxKGkpJiZpLmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbCYmbi5kZWZhdWx0UHJvcHM9PT12b2lkIDA/KHQudGFnPTE1LHQudHlwZT1pLHIyKGUsdCxpLHIsbykpOihlPW1oKG4udHlwZSxudWxsLHIsdCx0Lm1vZGUsbyksZS5yZWY9dC5yZWYsZS5yZXR1cm49dCx0LmNoaWxkPWUpfWlmKGk9ZS5jaGlsZCwhKGUubGFuZXMmbykpe3ZhciBzPWkubWVtb2l6ZWRQcm9wcztpZihuPW4uY29tcGFyZSxuPW4hPT1udWxsP246V2QsbihzLHIpJiZlLnJlZj09PXQucmVmKXJldHVybiAkaShlLHQsbyl9cmV0dXJuIHQuZmxhZ3N8PTEsZT1qcyhpLHIpLGUucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lfWZ1bmN0aW9uIHIyKGUsdCxuLHIsbyl7aWYoZSE9PW51bGwpe3ZhciBpPWUubWVtb2l6ZWRQcm9wcztpZihXZChpLHIpJiZlLnJlZj09PXQucmVmKWlmKGlyPSExLHQucGVuZGluZ1Byb3BzPXI9aSwoZS5sYW5lcyZvKSE9PTApZS5mbGFncyYxMzEwNzImJihpcj0hMCk7ZWxzZSByZXR1cm4gdC5sYW5lcz1lLmxhbmVzLCRpKGUsdCxvKX1yZXR1cm4gajAoZSx0LG4scixvKX1mdW5jdGlvbiBvMihlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbz1yLmNoaWxkcmVuLGk9ZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYoci5tb2RlPT09ImhpZGRlbiIpaWYoISh0Lm1vZGUmMSkpdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxndChmYyx5cikseXJ8PW47ZWxzZXtpZighKG4mMTA3Mzc0MTgyNCkpcmV0dXJuIGU9aSE9PW51bGw/aS5iYXNlTGFuZXN8bjpuLHQubGFuZXM9dC5jaGlsZExhbmVzPTEwNzM3NDE4MjQsdC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6ZSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSx0LnVwZGF0ZVF1ZXVlPW51bGwsZ3QoZmMseXIpLHlyfD1lLG51bGw7dC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxyPWkhPT1udWxsP2kuYmFzZUxhbmVzOm4sZ3QoZmMseXIpLHlyfD1yfWVsc2UgaSE9PW51bGw/KHI9aS5iYXNlTGFuZXN8bix0Lm1lbW9pemVkU3RhdGU9bnVsbCk6cj1uLGd0KGZjLHlyKSx5cnw9cjtyZXR1cm4gVW4oZSx0LG8sbiksdC5jaGlsZH1mdW5jdGlvbiBpMihlLHQpe3ZhciBuPXQucmVmOyhlPT09bnVsbCYmbiE9PW51bGx8fGUhPT1udWxsJiZlLnJlZiE9PW4pJiYodC5mbGFnc3w9NTEyLHQuZmxhZ3N8PTIwOTcxNTIpfWZ1bmN0aW9uIGowKGUsdCxuLHIsbyl7dmFyIGk9bHIobik/cWE6SW4uY3VycmVudDtyZXR1cm4gaT1OYyh0LGkpLHdjKHQsbyksbj1lMShlLHQsbixyLGksbykscj10MSgpLGUhPT1udWxsJiYhaXI/KHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+bywkaShlLHQsbykpOihrdCYmciYmVWIodCksdC5mbGFnc3w9MSxVbihlLHQsbixvKSx0LmNoaWxkKX1mdW5jdGlvbiBiayhlLHQsbixyLG8pe2lmKGxyKG4pKXt2YXIgaT0hMDtXaCh0KX1lbHNlIGk9ITE7aWYod2ModCxvKSx0LnN0YXRlTm9kZT09PW51bGwpZmgoZSx0KSxOVCh0LG4sciksSTAodCxuLHIsbykscj0hMDtlbHNlIGlmKGU9PT1udWxsKXt2YXIgcz10LnN0YXRlTm9kZSxhPXQubWVtb2l6ZWRQcm9wcztzLnByb3BzPWE7dmFyIGw9cy5jb250ZXh0LGM9bi5jb250ZXh0VHlwZTt0eXBlb2YgYz09Im9iamVjdCImJmMhPT1udWxsP2M9WHIoYyk6KGM9bHIobik/cWE6SW4uY3VycmVudCxjPU5jKHQsYykpO3ZhciB1PW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGQ9dHlwZW9mIHU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iO2R8fHR5cGVvZiBzLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwoYSE9PXJ8fGwhPT1jKSYmZGsodCxzLHIsYykseXM9ITE7dmFyIGY9dC5tZW1vaXplZFN0YXRlO3Muc3RhdGU9ZixYaCh0LHIscyxvKSxsPXQubWVtb2l6ZWRTdGF0ZSxhIT09cnx8ZiE9PWx8fGFyLmN1cnJlbnR8fHlzPyh0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKEQwKHQsbix1LHIpLGw9dC5tZW1vaXplZFN0YXRlKSwoYT15c3x8dWsodCxuLGEscixmLGwsYykpPyhkfHx0eXBlb2Ygcy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24iJiZ0eXBlb2Ygcy5jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiJ8fCh0eXBlb2Ygcy5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJnMuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIHMuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmcy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLHR5cGVvZiBzLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCkpOih0eXBlb2Ygcy5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1sKSxzLnByb3BzPXIscy5zdGF0ZT1sLHMuY29udGV4dD1jLHI9YSk6KHR5cGVvZiBzLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCkscj0hMSl9ZWxzZXtzPXQuc3RhdGVOb2RlLE1UKGUsdCksYT10Lm1lbW9pemVkUHJvcHMsYz10LnR5cGU9PT10LmVsZW1lbnRUeXBlP2E6aG8odC50eXBlLGEpLHMucHJvcHM9YyxkPXQucGVuZGluZ1Byb3BzLGY9cy5jb250ZXh0LGw9bi5jb250ZXh0VHlwZSx0eXBlb2YgbD09Im9iamVjdCImJmwhPT1udWxsP2w9WHIobCk6KGw9bHIobik/cWE6SW4uY3VycmVudCxsPU5jKHQsbCkpO3ZhciBwPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyh1PXR5cGVvZiBwPT0iZnVuY3Rpb24ifHx0eXBlb2Ygcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIil8fHR5cGVvZiBzLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwoYSE9PWR8fGYhPT1sKSYmZGsodCxzLHIsbCkseXM9ITEsZj10Lm1lbW9pemVkU3RhdGUscy5zdGF0ZT1mLFhoKHQscixzLG8pO3ZhciBtPXQubWVtb2l6ZWRTdGF0ZTthIT09ZHx8ZiE9PW18fGFyLmN1cnJlbnR8fHlzPyh0eXBlb2YgcD09ImZ1bmN0aW9uIiYmKEQwKHQsbixwLHIpLG09dC5tZW1vaXplZFN0YXRlKSwoYz15c3x8dWsodCxuLGMscixmLG0sbCl8fCExKT8odXx8dHlwZW9mIHMuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiImJnR5cGVvZiBzLmNvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiJ8fCh0eXBlb2Ygcy5jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZzLmNvbXBvbmVudFdpbGxVcGRhdGUocixtLGwpLHR5cGVvZiBzLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZzLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIsbSxsKSksdHlwZW9mIHMuY29tcG9uZW50RGlkVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NCksdHlwZW9mIHMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiImJih0LmZsYWdzfD0xMDI0KSk6KHR5cGVvZiBzLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8YT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxhPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCksdC5tZW1vaXplZFByb3BzPXIsdC5tZW1vaXplZFN0YXRlPW0pLHMucHJvcHM9cixzLnN0YXRlPW0scy5jb250ZXh0PWwscj1jKToodHlwZW9mIHMuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxhPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIHMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fGE9PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSxyPSExKX1yZXR1cm4gejAoZSx0LG4scixpLG8pfWZ1bmN0aW9uIHowKGUsdCxuLHIsbyxpKXtpMihlLHQpO3ZhciBzPSh0LmZsYWdzJjEyOCkhPT0wO2lmKCFyJiYhcylyZXR1cm4gbyYmaWsodCxuLCExKSwkaShlLHQsaSk7cj10LnN0YXRlTm9kZSxKMy5jdXJyZW50PXQ7dmFyIGE9cyYmdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT0iZnVuY3Rpb24iP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gdC5mbGFnc3w9MSxlIT09bnVsbCYmcz8odC5jaGlsZD1BYyh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkPUFjKHQsbnVsbCxhLGkpKTpVbihlLHQsYSxpKSx0Lm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxvJiZpayh0LG4sITApLHQuY2hpbGR9ZnVuY3Rpb24gczIoZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD9vayhlLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZvayhlLHQuY29udGV4dCwhMSksWGIoZSx0LmNvbnRhaW5lckluZm8pfWZ1bmN0aW9uIHdrKGUsdCxuLHIsbyl7cmV0dXJuICRjKCksSGIobyksdC5mbGFnc3w9MjU2LFVuKGUsdCxuLHIpLHQuY2hpbGR9dmFyIEYwPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MH07ZnVuY3Rpb24gQjAoZSl7cmV0dXJue2Jhc2VMYW5lczplLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9fWZ1bmN0aW9uIGEyKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxvPVR0LmN1cnJlbnQsaT0hMSxzPSh0LmZsYWdzJjEyOCkhPT0wLGE7aWYoKGE9cyl8fChhPWUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGU9PT1udWxsPyExOihvJjIpIT09MCksYT8oaT0hMCx0LmZsYWdzJj0tMTI5KTooZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYob3w9MSksZ3QoVHQsbyYxKSxlPT09bnVsbClyZXR1cm4gJDAodCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJihlPWUuZGVoeWRyYXRlZCxlIT09bnVsbCk/KHQubW9kZSYxP2UuZGF0YT09PSIkISI/dC5sYW5lcz04OnQubGFuZXM9MTA3Mzc0MTgyNDp0LmxhbmVzPTEsbnVsbCk6KHM9ci5jaGlsZHJlbixlPXIuZmFsbGJhY2ssaT8ocj10Lm1vZGUsaT10LmNoaWxkLHM9e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46c30sIShyJjEpJiZpIT09bnVsbD8oaS5jaGlsZExhbmVzPTAsaS5wZW5kaW5nUHJvcHM9cyk6aT15ZyhzLHIsMCxudWxsKSxlPUZhKGUscixuLG51bGwpLGkucmV0dXJuPXQsZS5yZXR1cm49dCxpLnNpYmxpbmc9ZSx0LmNoaWxkPWksdC5jaGlsZC5tZW1vaXplZFN0YXRlPUIwKG4pLHQubWVtb2l6ZWRTdGF0ZT1GMCxlKTpvMSh0LHMpKTtpZihvPWUubWVtb2l6ZWRTdGF0ZSxvIT09bnVsbCYmKGE9by5kZWh5ZHJhdGVkLGEhPT1udWxsKSlyZXR1cm4gUTMoZSx0LHMscixhLG8sbik7aWYoaSl7aT1yLmZhbGxiYWNrLHM9dC5tb2RlLG89ZS5jaGlsZCxhPW8uc2libGluZzt2YXIgbD17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpyLmNoaWxkcmVufTtyZXR1cm4hKHMmMSkmJnQuY2hpbGQhPT1vPyhyPXQuY2hpbGQsci5jaGlsZExhbmVzPTAsci5wZW5kaW5nUHJvcHM9bCx0LmRlbGV0aW9ucz1udWxsKToocj1qcyhvLGwpLHIuc3VidHJlZUZsYWdzPW8uc3VidHJlZUZsYWdzJjE0NjgwMDY0KSxhIT09bnVsbD9pPWpzKGEsaSk6KGk9RmEoaSxzLG4sbnVsbCksaS5mbGFnc3w9MiksaS5yZXR1cm49dCxyLnJldHVybj10LHIuc2libGluZz1pLHQuY2hpbGQ9cixyPWksaT10LmNoaWxkLHM9ZS5jaGlsZC5tZW1vaXplZFN0YXRlLHM9cz09PW51bGw/QjAobik6e2Jhc2VMYW5lczpzLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOnMudHJhbnNpdGlvbnN9LGkubWVtb2l6ZWRTdGF0ZT1zLGkuY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMmfm4sdC5tZW1vaXplZFN0YXRlPUYwLHJ9cmV0dXJuIGk9ZS5jaGlsZCxlPWkuc2libGluZyxyPWpzKGkse21vZGU6InZpc2libGUiLGNoaWxkcmVuOnIuY2hpbGRyZW59KSwhKHQubW9kZSYxKSYmKHIubGFuZXM9biksci5yZXR1cm49dCxyLnNpYmxpbmc9bnVsbCxlIT09bnVsbCYmKG49dC5kZWxldGlvbnMsbj09PW51bGw/KHQuZGVsZXRpb25zPVtlXSx0LmZsYWdzfD0xNik6bi5wdXNoKGUpKSx0LmNoaWxkPXIsdC5tZW1vaXplZFN0YXRlPW51bGwscn1mdW5jdGlvbiBvMShlLHQpe3JldHVybiB0PXlnKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjp0fSxlLm1vZGUsMCxudWxsKSx0LnJldHVybj1lLGUuY2hpbGQ9dH1mdW5jdGlvbiBEcChlLHQsbixyKXtyZXR1cm4gciE9PW51bGwmJkhiKHIpLEFjKHQsZS5jaGlsZCxudWxsLG4pLGU9bzEodCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksZS5mbGFnc3w9Mix0Lm1lbW9pemVkU3RhdGU9bnVsbCxlfWZ1bmN0aW9uIFEzKGUsdCxuLHIsbyxpLHMpe2lmKG4pcmV0dXJuIHQuZmxhZ3MmMjU2Pyh0LmZsYWdzJj0tMjU3LHI9dXkoRXJyb3IoSCg0MjIpKSksRHAoZSx0LHMscikpOnQubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KHQuY2hpbGQ9ZS5jaGlsZCx0LmZsYWdzfD0xMjgsbnVsbCk6KGk9ci5mYWxsYmFjayxvPXQubW9kZSxyPXlnKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpyLmNoaWxkcmVufSxvLDAsbnVsbCksaT1GYShpLG8scyxudWxsKSxpLmZsYWdzfD0yLHIucmV0dXJuPXQsaS5yZXR1cm49dCxyLnNpYmxpbmc9aSx0LmNoaWxkPXIsdC5tb2RlJjEmJkFjKHQsZS5jaGlsZCxudWxsLHMpLHQuY2hpbGQubWVtb2l6ZWRTdGF0ZT1CMChzKSx0Lm1lbW9pemVkU3RhdGU9RjAsaSk7aWYoISh0Lm1vZGUmMSkpcmV0dXJuIERwKGUsdCxzLG51bGwpO2lmKG8uZGF0YT09PSIkISIpe2lmKHI9by5uZXh0U2libGluZyYmby5uZXh0U2libGluZy5kYXRhc2V0LHIpdmFyIGE9ci5kZ3N0O3JldHVybiByPWEsaT1FcnJvcihIKDQxOSkpLHI9dXkoaSxyLHZvaWQgMCksRHAoZSx0LHMscil9aWYoYT0ocyZlLmNoaWxkTGFuZXMpIT09MCxpcnx8YSl7aWYocj1obixyIT09bnVsbCl7c3dpdGNoKHMmLXMpe2Nhc2UgNDpvPTI7YnJlYWs7Y2FzZSAxNjpvPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0Om89MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bz0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDpvPTB9bz1vJihyLnN1c3BlbmRlZExhbmVzfHMpPzA6byxvIT09MCYmbyE9PWkucmV0cnlMYW5lJiYoaS5yZXRyeUxhbmU9byxOaShlLG8pLENvKHIsZSxvLC0xKSl9cmV0dXJuIHUxKCkscj11eShFcnJvcihIKDQyMSkpKSxEcChlLHQscyxyKX1yZXR1cm4gby5kYXRhPT09IiQ/Ij8odC5mbGFnc3w9MTI4LHQuY2hpbGQ9ZS5jaGlsZCx0PWZMLmJpbmQobnVsbCxlKSxvLl9yZWFjdFJldHJ5PXQsbnVsbCk6KGU9aS50cmVlQ29udGV4dCxrcj1BcyhvLm5leHRTaWJsaW5nKSxFcj10LGt0PSEwLHZvPW51bGwsZSE9PW51bGwmJihVcltWcisrXT1TaSxVcltWcisrXT1raSxVcltWcisrXT1HYSxTaT1lLmlkLGtpPWUub3ZlcmZsb3csR2E9dCksdD1vMSh0LHIuY2hpbGRyZW4pLHQuZmxhZ3N8PTQwOTYsdCl9ZnVuY3Rpb24gU2soZSx0LG4pe2UubGFuZXN8PXQ7dmFyIHI9ZS5hbHRlcm5hdGU7ciE9PW51bGwmJihyLmxhbmVzfD10KSxBMChlLnJldHVybix0LG4pfWZ1bmN0aW9uIGR5KGUsdCxuLHIsbyl7dmFyIGk9ZS5tZW1vaXplZFN0YXRlO2k9PT1udWxsP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OnIsdGFpbDpuLHRhaWxNb2RlOm99OihpLmlzQmFja3dhcmRzPXQsaS5yZW5kZXJpbmc9bnVsbCxpLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGkubGFzdD1yLGkudGFpbD1uLGkudGFpbE1vZGU9byl9ZnVuY3Rpb24gbDIoZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzLG89ci5yZXZlYWxPcmRlcixpPXIudGFpbDtpZihVbihlLHQsci5jaGlsZHJlbixuKSxyPVR0LmN1cnJlbnQsciYyKXI9ciYxfDIsdC5mbGFnc3w9MTI4O2Vsc2V7aWYoZSE9PW51bGwmJmUuZmxhZ3MmMTI4KWU6Zm9yKGU9dC5jaGlsZDtlIT09bnVsbDspe2lmKGUudGFnPT09MTMpZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmU2soZSxuLHQpO2Vsc2UgaWYoZS50YWc9PT0xOSlTayhlLG4sdCk7ZWxzZSBpZihlLmNoaWxkIT09bnVsbCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PXQpYnJlYWsgZTtmb3IoO2Uuc2libGluZz09PW51bGw7KXtpZihlLnJldHVybj09PW51bGx8fGUucmV0dXJuPT09dClicmVhayBlO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ31yJj0xfWlmKGd0KFR0LHIpLCEodC5tb2RlJjEpKXQubWVtb2l6ZWRTdGF0ZT1udWxsO2Vsc2Ugc3dpdGNoKG8pe2Nhc2UiZm9yd2FyZHMiOmZvcihuPXQuY2hpbGQsbz1udWxsO24hPT1udWxsOyllPW4uYWx0ZXJuYXRlLGUhPT1udWxsJiZaaChlKT09PW51bGwmJihvPW4pLG49bi5zaWJsaW5nO249byxuPT09bnVsbD8obz10LmNoaWxkLHQuY2hpbGQ9bnVsbCk6KG89bi5zaWJsaW5nLG4uc2libGluZz1udWxsKSxkeSh0LCExLG8sbixpKTticmVhaztjYXNlImJhY2t3YXJkcyI6Zm9yKG49bnVsbCxvPXQuY2hpbGQsdC5jaGlsZD1udWxsO28hPT1udWxsOyl7aWYoZT1vLmFsdGVybmF0ZSxlIT09bnVsbCYmWmgoZSk9PT1udWxsKXt0LmNoaWxkPW87YnJlYWt9ZT1vLnNpYmxpbmcsby5zaWJsaW5nPW4sbj1vLG89ZX1keSh0LCEwLG4sbnVsbCxpKTticmVhaztjYXNlInRvZ2V0aGVyIjpkeSh0LCExLG51bGwsbnVsbCx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6dC5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIHQuY2hpbGR9ZnVuY3Rpb24gZmgoZSx0KXshKHQubW9kZSYxKSYmZSE9PW51bGwmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5mbGFnc3w9Mil9ZnVuY3Rpb24gJGkoZSx0LG4pe2lmKGUhPT1udWxsJiYodC5kZXBlbmRlbmNpZXM9ZS5kZXBlbmRlbmNpZXMpLFhhfD10LmxhbmVzLCEobiZ0LmNoaWxkTGFuZXMpKXJldHVybiBudWxsO2lmKGUhPT1udWxsJiZ0LmNoaWxkIT09ZS5jaGlsZCl0aHJvdyBFcnJvcihIKDE1MykpO2lmKHQuY2hpbGQhPT1udWxsKXtmb3IoZT10LmNoaWxkLG49anMoZSxlLnBlbmRpbmdQcm9wcyksdC5jaGlsZD1uLG4ucmV0dXJuPXQ7ZS5zaWJsaW5nIT09bnVsbDspZT1lLnNpYmxpbmcsbj1uLnNpYmxpbmc9anMoZSxlLnBlbmRpbmdQcm9wcyksbi5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBlTChlLHQsbil7c3dpdGNoKHQudGFnKXtjYXNlIDM6czIodCksJGMoKTticmVhaztjYXNlIDU6RFQodCk7YnJlYWs7Y2FzZSAxOmxyKHQudHlwZSkmJldoKHQpO2JyZWFrO2Nhc2UgNDpYYih0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6dmFyIHI9dC50eXBlLl9jb250ZXh0LG89dC5tZW1vaXplZFByb3BzLnZhbHVlO2d0KEdoLHIuX2N1cnJlbnRWYWx1ZSksci5fY3VycmVudFZhbHVlPW87YnJlYWs7Y2FzZSAxMzppZihyPXQubWVtb2l6ZWRTdGF0ZSxyIT09bnVsbClyZXR1cm4gci5kZWh5ZHJhdGVkIT09bnVsbD8oZ3QoVHQsVHQuY3VycmVudCYxKSx0LmZsYWdzfD0xMjgsbnVsbCk6biZ0LmNoaWxkLmNoaWxkTGFuZXM/YTIoZSx0LG4pOihndChUdCxUdC5jdXJyZW50JjEpLGU9JGkoZSx0LG4pLGUhPT1udWxsP2Uuc2libGluZzpudWxsKTtndChUdCxUdC5jdXJyZW50JjEpO2JyZWFrO2Nhc2UgMTk6aWYocj0obiZ0LmNoaWxkTGFuZXMpIT09MCxlLmZsYWdzJjEyOCl7aWYocilyZXR1cm4gbDIoZSx0LG4pO3QuZmxhZ3N8PTEyOH1pZihvPXQubWVtb2l6ZWRTdGF0ZSxvIT09bnVsbCYmKG8ucmVuZGVyaW5nPW51bGwsby50YWlsPW51bGwsby5sYXN0RWZmZWN0PW51bGwpLGd0KFR0LFR0LmN1cnJlbnQpLHIpYnJlYWs7cmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiB0LmxhbmVzPTAsbzIoZSx0LG4pfXJldHVybiAkaShlLHQsbil9dmFyIGMyLFUwLHUyLGQyO2MyPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQuY2hpbGQ7biE9PW51bGw7KXtpZihuLnRhZz09PTV8fG4udGFnPT09NillLmFwcGVuZENoaWxkKG4uc3RhdGVOb2RlKTtlbHNlIGlmKG4udGFnIT09NCYmbi5jaGlsZCE9PW51bGwpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT10KWJyZWFrO2Zvcig7bi5zaWJsaW5nPT09bnVsbDspe2lmKG4ucmV0dXJuPT09bnVsbHx8bi5yZXR1cm49PT10KXJldHVybjtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fTtVMD1mdW5jdGlvbigpe307dTI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZS5tZW1vaXplZFByb3BzO2lmKG8hPT1yKXtlPXQuc3RhdGVOb2RlLFJhKFlvLmN1cnJlbnQpO3ZhciBpPW51bGw7c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOm89dTAoZSxvKSxyPXUwKGUsciksaT1bXTticmVhaztjYXNlInNlbGVjdCI6bz1SdCh7fSxvLHt2YWx1ZTp2b2lkIDB9KSxyPVJ0KHt9LHIse3ZhbHVlOnZvaWQgMH0pLGk9W107YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6bz1wMChlLG8pLHI9cDAoZSxyKSxpPVtdO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIG8ub25DbGljayE9ImZ1bmN0aW9uIiYmdHlwZW9mIHIub25DbGljaz09ImZ1bmN0aW9uIiYmKGUub25jbGljaz1WaCl9bTAobixyKTt2YXIgcztuPW51bGw7Zm9yKGMgaW4gbylpZighci5oYXNPd25Qcm9wZXJ0eShjKSYmby5oYXNPd25Qcm9wZXJ0eShjKSYmb1tjXSE9bnVsbClpZihjPT09InN0eWxlIil7dmFyIGE9b1tjXTtmb3IocyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJihufHwobj17fSksbltzXT0iIil9ZWxzZSBjIT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiYmYyE9PSJjaGlsZHJlbiImJmMhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmYyE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiZjIT09ImF1dG9Gb2N1cyImJihqZC5oYXNPd25Qcm9wZXJ0eShjKT9pfHwoaT1bXSk6KGk9aXx8W10pLnB1c2goYyxudWxsKSk7Zm9yKGMgaW4gcil7dmFyIGw9cltjXTtpZihhPW8hPW51bGw/b1tjXTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eShjKSYmbCE9PWEmJihsIT1udWxsfHxhIT1udWxsKSlpZihjPT09InN0eWxlIilpZihhKXtmb3IocyBpbiBhKSFhLmhhc093blByb3BlcnR5KHMpfHxsJiZsLmhhc093blByb3BlcnR5KHMpfHwobnx8KG49e30pLG5bc109IiIpO2ZvcihzIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShzKSYmYVtzXSE9PWxbc10mJihufHwobj17fSksbltzXT1sW3NdKX1lbHNlIG58fChpfHwoaT1bXSksaS5wdXNoKGMsbikpLG49bDtlbHNlIGM9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhsPWw/bC5fX2h0bWw6dm9pZCAwLGE9YT9hLl9faHRtbDp2b2lkIDAsbCE9bnVsbCYmYSE9PWwmJihpPWl8fFtdKS5wdXNoKGMsbCkpOmM9PT0iY2hpbGRyZW4iP3R5cGVvZiBsIT0ic3RyaW5nIiYmdHlwZW9mIGwhPSJudW1iZXIifHwoaT1pfHxbXSkucHVzaChjLCIiK2wpOmMhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmYyE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiYoamQuaGFzT3duUHJvcGVydHkoYyk/KGwhPW51bGwmJmM9PT0ib25TY3JvbGwiJiZ4dCgic2Nyb2xsIixlKSxpfHxhPT09bHx8KGk9W10pKTooaT1pfHxbXSkucHVzaChjLGwpKX1uJiYoaT1pfHxbXSkucHVzaCgic3R5bGUiLG4pO3ZhciBjPWk7KHQudXBkYXRlUXVldWU9YykmJih0LmZsYWdzfD00KX19O2QyPWZ1bmN0aW9uKGUsdCxuLHIpe24hPT1yJiYodC5mbGFnc3w9NCl9O2Z1bmN0aW9uIEN1KGUsdCl7aWYoIWt0KXN3aXRjaChlLnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6dD1lLnRhaWw7Zm9yKHZhciBuPW51bGw7dCE9PW51bGw7KXQuYWx0ZXJuYXRlIT09bnVsbCYmKG49dCksdD10LnNpYmxpbmc7bj09PW51bGw/ZS50YWlsPW51bGw6bi5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOm49ZS50YWlsO2Zvcih2YXIgcj1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihyPW4pLG49bi5zaWJsaW5nO3I9PT1udWxsP3R8fGUudGFpbD09PW51bGw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gTW4oZSl7dmFyIHQ9ZS5hbHRlcm5hdGUhPT1udWxsJiZlLmFsdGVybmF0ZS5jaGlsZD09PWUuY2hpbGQsbj0wLHI9MDtpZih0KWZvcih2YXIgbz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyYxNDY4MDA2NCxyfD1vLmZsYWdzJjE0NjgwMDY0LG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7ZWxzZSBmb3Iobz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyxyfD1vLmZsYWdzLG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7cmV0dXJuIGUuc3VidHJlZUZsYWdzfD1yLGUuY2hpbGRMYW5lcz1uLHR9ZnVuY3Rpb24gdEwoZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzO3N3aXRjaChWYih0KSx0LnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIE1uKHQpLG51bGw7Y2FzZSAxOnJldHVybiBscih0LnR5cGUpJiZIaCgpLE1uKHQpLG51bGw7Y2FzZSAzOnJldHVybiByPXQuc3RhdGVOb2RlLERjKCksd3QoYXIpLHd0KEluKSxKYigpLHIucGVuZGluZ0NvbnRleHQmJihyLmNvbnRleHQ9ci5wZW5kaW5nQ29udGV4dCxyLnBlbmRpbmdDb250ZXh0PW51bGwpLChlPT09bnVsbHx8ZS5jaGlsZD09PW51bGwpJiYoJHAodCk/dC5mbGFnc3w9NDplPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmISh0LmZsYWdzJjI1Nil8fCh0LmZsYWdzfD0xMDI0LHZvIT09bnVsbCYmKFgwKHZvKSx2bz1udWxsKSkpLFUwKGUsdCksTW4odCksbnVsbDtjYXNlIDU6WmIodCk7dmFyIG89UmEoWGQuY3VycmVudCk7aWYobj10LnR5cGUsZSE9PW51bGwmJnQuc3RhdGVOb2RlIT1udWxsKXUyKGUsdCxuLHIsbyksZS5yZWYhPT10LnJlZiYmKHQuZmxhZ3N8PTUxMix0LmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFyKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoSCgxNjYpKTtyZXR1cm4gTW4odCksbnVsbH1pZihlPVJhKFlvLmN1cnJlbnQpLCRwKHQpKXtyPXQuc3RhdGVOb2RlLG49dC50eXBlO3ZhciBpPXQubWVtb2l6ZWRQcm9wcztzd2l0Y2gocltWb109dCxyW0dkXT1pLGU9KHQubW9kZSYxKSE9PTAsbil7Y2FzZSJkaWFsb2ciOnh0KCJjYW5jZWwiLHIpLHh0KCJjbG9zZSIscik7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjp4dCgibG9hZCIscik7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPHF1Lmxlbmd0aDtvKyspeHQocXVbb10scik7YnJlYWs7Y2FzZSJzb3VyY2UiOnh0KCJlcnJvciIscik7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6eHQoImVycm9yIixyKSx4dCgibG9hZCIscik7YnJlYWs7Y2FzZSJkZXRhaWxzIjp4dCgidG9nZ2xlIixyKTticmVhaztjYXNlImlucHV0IjpSUyhyLGkpLHh0KCJpbnZhbGlkIixyKTticmVhaztjYXNlInNlbGVjdCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWkubXVsdGlwbGV9LHh0KCJpbnZhbGlkIixyKTticmVhaztjYXNlInRleHRhcmVhIjokUyhyLGkpLHh0KCJpbnZhbGlkIixyKX1tMChuLGkpLG89bnVsbDtmb3IodmFyIHMgaW4gaSlpZihpLmhhc093blByb3BlcnR5KHMpKXt2YXIgYT1pW3NdO3M9PT0iY2hpbGRyZW4iP3R5cGVvZiBhPT0ic3RyaW5nIj9yLnRleHRDb250ZW50IT09YSYmKGkuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJk5wKHIudGV4dENvbnRlbnQsYSxlKSxvPVsiY2hpbGRyZW4iLGFdKTp0eXBlb2YgYT09Im51bWJlciImJnIudGV4dENvbnRlbnQhPT0iIithJiYoaS5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmTnAoci50ZXh0Q29udGVudCxhLGUpLG89WyJjaGlsZHJlbiIsIiIrYV0pOmpkLmhhc093blByb3BlcnR5KHMpJiZhIT1udWxsJiZzPT09Im9uU2Nyb2xsIiYmeHQoInNjcm9sbCIscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOkVwKHIpLE5TKHIsaSwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6RXAociksQVMocik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OnR5cGVvZiBpLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihyLm9uY2xpY2s9VmgpfXI9byx0LnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJih0LmZsYWdzfD00KX1lbHNle3M9by5ub2RlVHlwZT09PTk/bzpvLm93bmVyRG9jdW1lbnQsZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiYmKGU9ak8obikpLGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/bj09PSJzY3JpcHQiPyhlPXMuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsZT1lLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCkpOnR5cGVvZiByLmlzPT0ic3RyaW5nIj9lPXMuY3JlYXRlRWxlbWVudChuLHtpczpyLmlzfSk6KGU9cy5jcmVhdGVFbGVtZW50KG4pLG49PT0ic2VsZWN0IiYmKHM9ZSxyLm11bHRpcGxlP3MubXVsdGlwbGU9ITA6ci5zaXplJiYocy5zaXplPXIuc2l6ZSkpKTplPXMuY3JlYXRlRWxlbWVudE5TKGUsbiksZVtWb109dCxlW0dkXT1yLGMyKGUsdCwhMSwhMSksdC5zdGF0ZU5vZGU9ZTtlOntzd2l0Y2gocz1nMChuLHIpLG4pe2Nhc2UiZGlhbG9nIjp4dCgiY2FuY2VsIixlKSx4dCgiY2xvc2UiLGUpLG89cjticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmNhc2UiZW1iZWQiOnh0KCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPHF1Lmxlbmd0aDtvKyspeHQocXVbb10sZSk7bz1yO2JyZWFrO2Nhc2Uic291cmNlIjp4dCgiZXJyb3IiLGUpLG89cjticmVhaztjYXNlImltZyI6Y2FzZSJpbWFnZSI6Y2FzZSJsaW5rIjp4dCgiZXJyb3IiLGUpLHh0KCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjp4dCgidG9nZ2xlIixlKSxvPXI7YnJlYWs7Y2FzZSJpbnB1dCI6UlMoZSxyKSxvPXUwKGUscikseHQoImludmFsaWQiLGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpvPXI7YnJlYWs7Y2FzZSJzZWxlY3QiOmUuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxvPVJ0KHt9LHIse3ZhbHVlOnZvaWQgMH0pLHh0KCJpbnZhbGlkIixlKTticmVhaztjYXNlInRleHRhcmVhIjokUyhlLHIpLG89cDAoZSxyKSx4dCgiaW52YWxpZCIsZSk7YnJlYWs7ZGVmYXVsdDpvPXJ9bTAobixvKSxhPW87Zm9yKGkgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGkpKXt2YXIgbD1hW2ldO2k9PT0ic3R5bGUiP0JPKGUsbCk6aT09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/KGw9bD9sLl9faHRtbDp2b2lkIDAsbCE9bnVsbCYmek8oZSxsKSk6aT09PSJjaGlsZHJlbiI/dHlwZW9mIGw9PSJzdHJpbmciPyhuIT09InRleHRhcmVhInx8bCE9PSIiKSYmemQoZSxsKTp0eXBlb2YgbD09Im51bWJlciImJnpkKGUsIiIrbCk6aSE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZpIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJmkhPT0iYXV0b0ZvY3VzIiYmKGpkLmhhc093blByb3BlcnR5KGkpP2whPW51bGwmJmk9PT0ib25TY3JvbGwiJiZ4dCgic2Nyb2xsIixlKTpsIT1udWxsJiZUYihlLGksbCxzKSl9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOkVwKGUpLE5TKGUsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6RXAoZSksQVMoZSk7YnJlYWs7Y2FzZSJvcHRpb24iOnIudmFsdWUhPW51bGwmJmUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrS3Moci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLm11bHRpcGxlPSEhci5tdWx0aXBsZSxpPXIudmFsdWUsaSE9bnVsbD92YyhlLCEhci5tdWx0aXBsZSxpLCExKTpyLmRlZmF1bHRWYWx1ZSE9bnVsbCYmdmMoZSwhIXIubXVsdGlwbGUsci5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIG8ub25DbGljaz09ImZ1bmN0aW9uIiYmKGUub25jbGljaz1WaCl9c3dpdGNoKG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6cj0hIXIuYXV0b0ZvY3VzO2JyZWFrIGU7Y2FzZSJpbWciOnI9ITA7YnJlYWsgZTtkZWZhdWx0OnI9ITF9fXImJih0LmZsYWdzfD00KX10LnJlZiE9PW51bGwmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mil9cmV0dXJuIE1uKHQpLG51bGw7Y2FzZSA2OmlmKGUmJnQuc3RhdGVOb2RlIT1udWxsKWQyKGUsdCxlLm1lbW9pemVkUHJvcHMscik7ZWxzZXtpZih0eXBlb2YgciE9InN0cmluZyImJnQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihIKDE2NikpO2lmKG49UmEoWGQuY3VycmVudCksUmEoWW8uY3VycmVudCksJHAodCkpe2lmKHI9dC5zdGF0ZU5vZGUsbj10Lm1lbW9pemVkUHJvcHMscltWb109dCwoaT1yLm5vZGVWYWx1ZSE9PW4pJiYoZT1FcixlIT09bnVsbCkpc3dpdGNoKGUudGFnKXtjYXNlIDM6TnAoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCk7YnJlYWs7Y2FzZSA1OmUubWVtb2l6ZWRQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmTnAoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCl9aSYmKHQuZmxhZ3N8PTQpfWVsc2Ugcj0obi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHIpLHJbVm9dPXQsdC5zdGF0ZU5vZGU9cn1yZXR1cm4gTW4odCksbnVsbDtjYXNlIDEzOmlmKHd0KFR0KSxyPXQubWVtb2l6ZWRTdGF0ZSxlPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihrdCYma3IhPT1udWxsJiZ0Lm1vZGUmMSYmISh0LmZsYWdzJjEyOCkpVFQoKSwkYygpLHQuZmxhZ3N8PTk4NTYwLGk9ITE7ZWxzZSBpZihpPSRwKHQpLHIhPT1udWxsJiZyLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihlPT09bnVsbCl7aWYoIWkpdGhyb3cgRXJyb3IoSCgzMTgpKTtpZihpPXQubWVtb2l6ZWRTdGF0ZSxpPWkhPT1udWxsP2kuZGVoeWRyYXRlZDpudWxsLCFpKXRocm93IEVycm9yKEgoMzE3KSk7aVtWb109dH1lbHNlICRjKCksISh0LmZsYWdzJjEyOCkmJih0Lm1lbW9pemVkU3RhdGU9bnVsbCksdC5mbGFnc3w9NDtNbih0KSxpPSExfWVsc2Ugdm8hPT1udWxsJiYoWDAodm8pLHZvPW51bGwpLGk9ITA7aWYoIWkpcmV0dXJuIHQuZmxhZ3MmNjU1MzY/dDpudWxsfXJldHVybiB0LmZsYWdzJjEyOD8odC5sYW5lcz1uLHQpOihyPXIhPT1udWxsLHIhPT0oZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiZyJiYodC5jaGlsZC5mbGFnc3w9ODE5Mix0Lm1vZGUmMSYmKGU9PT1udWxsfHxUdC5jdXJyZW50JjE/WnQ9PT0wJiYoWnQ9Myk6dTEoKSkpLHQudXBkYXRlUXVldWUhPT1udWxsJiYodC5mbGFnc3w9NCksTW4odCksbnVsbCk7Y2FzZSA0OnJldHVybiBEYygpLFUwKGUsdCksZT09PW51bGwmJktkKHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLE1uKHQpLG51bGw7Y2FzZSAxMDpyZXR1cm4gcWIodC50eXBlLl9jb250ZXh0KSxNbih0KSxudWxsO2Nhc2UgMTc6cmV0dXJuIGxyKHQudHlwZSkmJkhoKCksTW4odCksbnVsbDtjYXNlIDE5OmlmKHd0KFR0KSxpPXQubWVtb2l6ZWRTdGF0ZSxpPT09bnVsbClyZXR1cm4gTW4odCksbnVsbDtpZihyPSh0LmZsYWdzJjEyOCkhPT0wLHM9aS5yZW5kZXJpbmcscz09PW51bGwpaWYocilDdShpLCExKTtlbHNle2lmKFp0IT09MHx8ZSE9PW51bGwmJmUuZmxhZ3MmMTI4KWZvcihlPXQuY2hpbGQ7ZSE9PW51bGw7KXtpZihzPVpoKGUpLHMhPT1udWxsKXtmb3IodC5mbGFnc3w9MTI4LEN1KGksITEpLHI9cy51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHQudXBkYXRlUXVldWU9cix0LmZsYWdzfD00KSx0LnN1YnRyZWVGbGFncz0wLHI9bixuPXQuY2hpbGQ7biE9PW51bGw7KWk9bixlPXIsaS5mbGFncyY9MTQ2ODAwNjYscz1pLmFsdGVybmF0ZSxzPT09bnVsbD8oaS5jaGlsZExhbmVzPTAsaS5sYW5lcz1lLGkuY2hpbGQ9bnVsbCxpLnN1YnRyZWVGbGFncz0wLGkubWVtb2l6ZWRQcm9wcz1udWxsLGkubWVtb2l6ZWRTdGF0ZT1udWxsLGkudXBkYXRlUXVldWU9bnVsbCxpLmRlcGVuZGVuY2llcz1udWxsLGkuc3RhdGVOb2RlPW51bGwpOihpLmNoaWxkTGFuZXM9cy5jaGlsZExhbmVzLGkubGFuZXM9cy5sYW5lcyxpLmNoaWxkPXMuY2hpbGQsaS5zdWJ0cmVlRmxhZ3M9MCxpLmRlbGV0aW9ucz1udWxsLGkubWVtb2l6ZWRQcm9wcz1zLm1lbW9pemVkUHJvcHMsaS5tZW1vaXplZFN0YXRlPXMubWVtb2l6ZWRTdGF0ZSxpLnVwZGF0ZVF1ZXVlPXMudXBkYXRlUXVldWUsaS50eXBlPXMudHlwZSxlPXMuZGVwZW5kZW5jaWVzLGkuZGVwZW5kZW5jaWVzPWU9PT1udWxsP251bGw6e2xhbmVzOmUubGFuZXMsZmlyc3RDb250ZXh0OmUuZmlyc3RDb250ZXh0fSksbj1uLnNpYmxpbmc7cmV0dXJuIGd0KFR0LFR0LmN1cnJlbnQmMXwyKSx0LmNoaWxkfWU9ZS5zaWJsaW5nfWkudGFpbCE9PW51bGwmJkZ0KCk+TGMmJih0LmZsYWdzfD0xMjgscj0hMCxDdShpLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYoZT1aaChzKSxlIT09bnVsbCl7aWYodC5mbGFnc3w9MTI4LHI9ITAsbj1lLnVwZGF0ZVF1ZXVlLG4hPT1udWxsJiYodC51cGRhdGVRdWV1ZT1uLHQuZmxhZ3N8PTQpLEN1KGksITApLGkudGFpbD09PW51bGwmJmkudGFpbE1vZGU9PT0iaGlkZGVuIiYmIXMuYWx0ZXJuYXRlJiYha3QpcmV0dXJuIE1uKHQpLG51bGx9ZWxzZSAyKkZ0KCktaS5yZW5kZXJpbmdTdGFydFRpbWU+TGMmJm4hPT0xMDczNzQxODI0JiYodC5mbGFnc3w9MTI4LHI9ITAsQ3UoaSwhMSksdC5sYW5lcz00MTk0MzA0KTtpLmlzQmFja3dhcmRzPyhzLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPXMpOihuPWkubGFzdCxuIT09bnVsbD9uLnNpYmxpbmc9czp0LmNoaWxkPXMsaS5sYXN0PXMpfXJldHVybiBpLnRhaWwhPT1udWxsPyh0PWkudGFpbCxpLnJlbmRlcmluZz10LGkudGFpbD10LnNpYmxpbmcsaS5yZW5kZXJpbmdTdGFydFRpbWU9RnQoKSx0LnNpYmxpbmc9bnVsbCxuPVR0LmN1cnJlbnQsZ3QoVHQscj9uJjF8MjpuJjEpLHQpOihNbih0KSxudWxsKTtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIGMxKCkscj10Lm1lbW9pemVkU3RhdGUhPT1udWxsLGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsIT09ciYmKHQuZmxhZ3N8PTgxOTIpLHImJnQubW9kZSYxP3lyJjEwNzM3NDE4MjQmJihNbih0KSx0LnN1YnRyZWVGbGFncyY2JiYodC5mbGFnc3w9ODE5MikpOk1uKHQpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKEgoMTU2LHQudGFnKSl9ZnVuY3Rpb24gbkwoZSx0KXtzd2l0Y2goVmIodCksdC50YWcpe2Nhc2UgMTpyZXR1cm4gbHIodC50eXBlKSYmSGgoKSxlPXQuZmxhZ3MsZSY2NTUzNj8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDM6cmV0dXJuIERjKCksd3QoYXIpLHd0KEluKSxKYigpLGU9dC5mbGFncyxlJjY1NTM2JiYhKGUmMTI4KT8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDU6cmV0dXJuIFpiKHQpLG51bGw7Y2FzZSAxMzppZih3dChUdCksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihIKDM0MCkpOyRjKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIHd0KFR0KSxudWxsO2Nhc2UgNDpyZXR1cm4gRGMoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHFiKHQudHlwZS5fY29udGV4dCksbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIGMxKCksbnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBJcD0hMSxBbj0hMSxyTD10eXBlb2YgV2Vha1NldD09ImZ1bmN0aW9uIj9XZWFrU2V0OlNldCxzZT1udWxsO2Z1bmN0aW9uIGRjKGUsdCl7dmFyIG49ZS5yZWY7aWYobiE9PW51bGwpaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpdHJ5e24obnVsbCl9Y2F0Y2gocil7JHQoZSx0LHIpfWVsc2Ugbi5jdXJyZW50PW51bGx9ZnVuY3Rpb24gVjAoZSx0LG4pe3RyeXtuKCl9Y2F0Y2gocil7JHQoZSx0LHIpfX12YXIga2s9ITE7ZnVuY3Rpb24gb0woZSx0KXtpZihDMD1GaCxlPW1UKCksQmIoZSkpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBlKXZhciBuPXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBlOntuPShuPWUub3duZXJEb2N1bWVudCkmJm4uZGVmYXVsdFZpZXd8fHdpbmRvdzt2YXIgcj1uLmdldFNlbGVjdGlvbiYmbi5nZXRTZWxlY3Rpb24oKTtpZihyJiZyLnJhbmdlQ291bnQhPT0wKXtuPXIuYW5jaG9yTm9kZTt2YXIgbz1yLmFuY2hvck9mZnNldCxpPXIuZm9jdXNOb2RlO3I9ci5mb2N1c09mZnNldDt0cnl7bi5ub2RlVHlwZSxpLm5vZGVUeXBlfWNhdGNoe249bnVsbDticmVhayBlfXZhciBzPTAsYT0tMSxsPS0xLGM9MCx1PTAsZD1lLGY9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBwO2QhPT1ufHxvIT09MCYmZC5ub2RlVHlwZSE9PTN8fChhPXMrbyksZCE9PWl8fHIhPT0wJiZkLm5vZGVUeXBlIT09M3x8KGw9cytyKSxkLm5vZGVUeXBlPT09MyYmKHMrPWQubm9kZVZhbHVlLmxlbmd0aCksKHA9ZC5maXJzdENoaWxkKSE9PW51bGw7KWY9ZCxkPXA7Zm9yKDs7KXtpZihkPT09ZSlicmVhayB0O2lmKGY9PT1uJiYrK2M9PT1vJiYoYT1zKSxmPT09aSYmKyt1PT09ciYmKGw9cyksKHA9ZC5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO2Q9ZixmPWQucGFyZW50Tm9kZX1kPXB9bj1hPT09LTF8fGw9PT0tMT9udWxsOntzdGFydDphLGVuZDpsfX1lbHNlIG49bnVsbH1uPW58fHtzdGFydDowLGVuZDowfX1lbHNlIG49bnVsbDtmb3IoTzA9e2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6bn0sRmg9ITEsc2U9dDtzZSE9PW51bGw7KWlmKHQ9c2UsZT10LmNoaWxkLCh0LnN1YnRyZWVGbGFncyYxMDI4KSE9PTAmJmUhPT1udWxsKWUucmV0dXJuPXQsc2U9ZTtlbHNlIGZvcig7c2UhPT1udWxsOyl7dD1zZTt0cnl7dmFyIG09dC5hbHRlcm5hdGU7aWYodC5mbGFncyYxMDI0KXN3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpicmVhaztjYXNlIDE6aWYobSE9PW51bGwpe3ZhciBnPW0ubWVtb2l6ZWRQcm9wcyx5PW0ubWVtb2l6ZWRTdGF0ZSx2PXQuc3RhdGVOb2RlLHg9di5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh0LmVsZW1lbnRUeXBlPT09dC50eXBlP2c6aG8odC50eXBlLGcpLHkpO3YuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9eH1icmVhaztjYXNlIDM6dmFyIHc9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzt3Lm5vZGVUeXBlPT09MT93LnRleHRDb250ZW50PSIiOncubm9kZVR5cGU9PT05JiZ3LmRvY3VtZW50RWxlbWVudCYmdy5yZW1vdmVDaGlsZCh3LmRvY3VtZW50RWxlbWVudCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKEgoMTYzKSl9fWNhdGNoKGspeyR0KHQsdC5yZXR1cm4sayl9aWYoZT10LnNpYmxpbmcsZSE9PW51bGwpe2UucmV0dXJuPXQucmV0dXJuLHNlPWU7YnJlYWt9c2U9dC5yZXR1cm59cmV0dXJuIG09a2ssa2s9ITEsbX1mdW5jdGlvbiBfZChlLHQsbil7dmFyIHI9dC51cGRhdGVRdWV1ZTtpZihyPXIhPT1udWxsP3IubGFzdEVmZmVjdDpudWxsLHIhPT1udWxsKXt2YXIgbz1yPXIubmV4dDtkb3tpZigoby50YWcmZSk9PT1lKXt2YXIgaT1vLmRlc3Ryb3k7by5kZXN0cm95PXZvaWQgMCxpIT09dm9pZCAwJiZWMCh0LG4saSl9bz1vLm5leHR9d2hpbGUobyE9PXIpfX1mdW5jdGlvbiBnZyhlLHQpe2lmKHQ9dC51cGRhdGVRdWV1ZSx0PXQhPT1udWxsP3QubGFzdEVmZmVjdDpudWxsLHQhPT1udWxsKXt2YXIgbj10PXQubmV4dDtkb3tpZigobi50YWcmZSk9PT1lKXt2YXIgcj1uLmNyZWF0ZTtuLmRlc3Ryb3k9cigpfW49bi5uZXh0fXdoaWxlKG4hPT10KX19ZnVuY3Rpb24gSDAoZSl7dmFyIHQ9ZS5yZWY7aWYodCE9PW51bGwpe3ZhciBuPWUuc3RhdGVOb2RlO3N3aXRjaChlLnRhZyl7Y2FzZSA1OmU9bjticmVhaztkZWZhdWx0OmU9bn10eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnQuY3VycmVudD1lfX1mdW5jdGlvbiBmMihlKXt2YXIgdD1lLmFsdGVybmF0ZTt0IT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsZjIodCkpLGUuY2hpbGQ9bnVsbCxlLmRlbGV0aW9ucz1udWxsLGUuc2libGluZz1udWxsLGUudGFnPT09NSYmKHQ9ZS5zdGF0ZU5vZGUsdCE9PW51bGwmJihkZWxldGUgdFtWb10sZGVsZXRlIHRbR2RdLGRlbGV0ZSB0W00wXSxkZWxldGUgdFtGM10sZGVsZXRlIHRbQjNdKSksZS5zdGF0ZU5vZGU9bnVsbCxlLnJldHVybj1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS5wZW5kaW5nUHJvcHM9bnVsbCxlLnN0YXRlTm9kZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBwMihlKXtyZXR1cm4gZS50YWc9PT01fHxlLnRhZz09PTN8fGUudGFnPT09NH1mdW5jdGlvbiBFayhlKXtlOmZvcig7Oyl7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHxwMihlLnJldHVybikpcmV0dXJuIG51bGw7ZT1lLnJldHVybn1mb3IoZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZztlLnRhZyE9PTUmJmUudGFnIT09NiYmZS50YWchPT0xODspe2lmKGUuZmxhZ3MmMnx8ZS5jaGlsZD09PW51bGx8fGUudGFnPT09NCljb250aW51ZSBlO2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkfWlmKCEoZS5mbGFncyYyKSlyZXR1cm4gZS5zdGF0ZU5vZGV9fWZ1bmN0aW9uIFcwKGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24ubm9kZVR5cGU9PT04P24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0KTpuLmluc2VydEJlZm9yZShlLHQpOihuLm5vZGVUeXBlPT09OD8odD1uLnBhcmVudE5vZGUsdC5pbnNlcnRCZWZvcmUoZSxuKSk6KHQ9bix0LmFwcGVuZENoaWxkKGUpKSxuPW4uX3JlYWN0Um9vdENvbnRhaW5lcixuIT1udWxsfHx0Lm9uY2xpY2shPT1udWxsfHwodC5vbmNsaWNrPVZoKSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKFcwKGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspVzAoZSx0LG4pLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIEswKGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24uaW5zZXJ0QmVmb3JlKGUsdCk6bi5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKHIhPT00JiYoZT1lLmNoaWxkLGUhPT1udWxsKSlmb3IoSzAoZSx0LG4pLGU9ZS5zaWJsaW5nO2UhPT1udWxsOylLMChlLHQsbiksZT1lLnNpYmxpbmd9dmFyIHduPW51bGwsbW89ITE7ZnVuY3Rpb24gWmkoZSx0LG4pe2ZvcihuPW4uY2hpbGQ7biE9PW51bGw7KWgyKGUsdCxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBoMihlLHQsbil7aWYoR28mJnR5cGVvZiBHby5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7R28ub25Db21taXRGaWJlclVubW91bnQobGcsbil9Y2F0Y2h7fXN3aXRjaChuLnRhZyl7Y2FzZSA1OkFufHxkYyhuLHQpO2Nhc2UgNjp2YXIgcj13bixvPW1vO3duPW51bGwsWmkoZSx0LG4pLHduPXIsbW89byx3biE9PW51bGwmJihtbz8oZT13bixuPW4uc3RhdGVOb2RlLGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTplLnJlbW92ZUNoaWxkKG4pKTp3bi5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgMTg6d24hPT1udWxsJiYobW8/KGU9d24sbj1uLnN0YXRlTm9kZSxlLm5vZGVUeXBlPT09OD9veShlLnBhcmVudE5vZGUsbik6ZS5ub2RlVHlwZT09PTEmJm95KGUsbiksVmQoZSkpOm95KHduLG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9d24sbz1tbyx3bj1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLG1vPSEwLFppKGUsdCxuKSx3bj1yLG1vPW87YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFBbiYmKHI9bi51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHI9ci5sYXN0RWZmZWN0LHIhPT1udWxsKSkpe289cj1yLm5leHQ7ZG97dmFyIGk9byxzPWkuZGVzdHJveTtpPWkudGFnLHMhPT12b2lkIDAmJihpJjJ8fGkmNCkmJlYwKG4sdCxzKSxvPW8ubmV4dH13aGlsZShvIT09cil9WmkoZSx0LG4pO2JyZWFrO2Nhc2UgMTppZighQW4mJihkYyhuLHQpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PSJmdW5jdGlvbiIpKXRyeXtyLnByb3BzPW4ubWVtb2l6ZWRQcm9wcyxyLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxyLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goYSl7JHQobix0LGEpfVppKGUsdCxuKTticmVhaztjYXNlIDIxOlppKGUsdCxuKTticmVhaztjYXNlIDIyOm4ubW9kZSYxPyhBbj0ocj1Bbil8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsWmkoZSx0LG4pLEFuPXIpOlppKGUsdCxuKTticmVhaztkZWZhdWx0OlppKGUsdCxuKX19ZnVuY3Rpb24gX2soZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZih0IT09bnVsbCl7ZS51cGRhdGVRdWV1ZT1udWxsO3ZhciBuPWUuc3RhdGVOb2RlO249PT1udWxsJiYobj1lLnN0YXRlTm9kZT1uZXcgckwpLHQuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1wTC5iaW5kKG51bGwsZSxyKTtuLmhhcyhyKXx8KG4uYWRkKHIpLHIudGhlbihvLG8pKX0pfX1mdW5jdGlvbiBhbyhlLHQpe3ZhciBuPXQuZGVsZXRpb25zO2lmKG4hPT1udWxsKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdO3RyeXt2YXIgaT1lLHM9dCxhPXM7ZTpmb3IoO2EhPT1udWxsOyl7c3dpdGNoKGEudGFnKXtjYXNlIDU6d249YS5zdGF0ZU5vZGUsbW89ITE7YnJlYWsgZTtjYXNlIDM6d249YS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxtbz0hMDticmVhayBlO2Nhc2UgNDp3bj1hLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLG1vPSEwO2JyZWFrIGV9YT1hLnJldHVybn1pZih3bj09PW51bGwpdGhyb3cgRXJyb3IoSCgxNjApKTtoMihpLHMsbyksd249bnVsbCxtbz0hMTt2YXIgbD1vLmFsdGVybmF0ZTtsIT09bnVsbCYmKGwucmV0dXJuPW51bGwpLG8ucmV0dXJuPW51bGx9Y2F0Y2goYyl7JHQobyx0LGMpfX1pZih0LnN1YnRyZWVGbGFncyYxMjg1NClmb3IodD10LmNoaWxkO3QhPT1udWxsOyltMih0LGUpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIG0yKGUsdCl7dmFyIG49ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKGFvKHQsZSksem8oZSksciY0KXt0cnl7X2QoMyxlLGUucmV0dXJuKSxnZygzLGUpfWNhdGNoKGcpeyR0KGUsZS5yZXR1cm4sZyl9dHJ5e19kKDUsZSxlLnJldHVybil9Y2F0Y2goZyl7JHQoZSxlLnJldHVybixnKX19YnJlYWs7Y2FzZSAxOmFvKHQsZSksem8oZSksciY1MTImJm4hPT1udWxsJiZkYyhuLG4ucmV0dXJuKTticmVhaztjYXNlIDU6aWYoYW8odCxlKSx6byhlKSxyJjUxMiYmbiE9PW51bGwmJmRjKG4sbi5yZXR1cm4pLGUuZmxhZ3MmMzIpe3ZhciBvPWUuc3RhdGVOb2RlO3RyeXt6ZChvLCIiKX1jYXRjaChnKXskdChlLGUucmV0dXJuLGcpfX1pZihyJjQmJihvPWUuc3RhdGVOb2RlLG8hPW51bGwpKXt2YXIgaT1lLm1lbW9pemVkUHJvcHMscz1uIT09bnVsbD9uLm1lbW9pemVkUHJvcHM6aSxhPWUudHlwZSxsPWUudXBkYXRlUXVldWU7aWYoZS51cGRhdGVRdWV1ZT1udWxsLGwhPT1udWxsKXRyeXthPT09ImlucHV0IiYmaS50eXBlPT09InJhZGlvIiYmaS5uYW1lIT1udWxsJiZJTyhvLGkpLGcwKGEscyk7dmFyIGM9ZzAoYSxpKTtmb3Iocz0wO3M8bC5sZW5ndGg7cys9Mil7dmFyIHU9bFtzXSxkPWxbcysxXTt1PT09InN0eWxlIj9CTyhvLGQpOnU9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP3pPKG8sZCk6dT09PSJjaGlsZHJlbiI/emQobyxkKTpUYihvLHUsZCxjKX1zd2l0Y2goYSl7Y2FzZSJpbnB1dCI6ZDAobyxpKTticmVhaztjYXNlInRleHRhcmVhIjpMTyhvLGkpO2JyZWFrO2Nhc2Uic2VsZWN0Ijp2YXIgZj1vLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7by5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhaS5tdWx0aXBsZTt2YXIgcD1pLnZhbHVlO3AhPW51bGw/dmMobywhIWkubXVsdGlwbGUscCwhMSk6ZiE9PSEhaS5tdWx0aXBsZSYmKGkuZGVmYXVsdFZhbHVlIT1udWxsP3ZjKG8sISFpLm11bHRpcGxlLGkuZGVmYXVsdFZhbHVlLCEwKTp2YyhvLCEhaS5tdWx0aXBsZSxpLm11bHRpcGxlP1tdOiIiLCExKSl9b1tHZF09aX1jYXRjaChnKXskdChlLGUucmV0dXJuLGcpfX1icmVhaztjYXNlIDY6aWYoYW8odCxlKSx6byhlKSxyJjQpe2lmKGUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihIKDE2MikpO289ZS5zdGF0ZU5vZGUsaT1lLm1lbW9pemVkUHJvcHM7dHJ5e28ubm9kZVZhbHVlPWl9Y2F0Y2goZyl7JHQoZSxlLnJldHVybixnKX19YnJlYWs7Y2FzZSAzOmlmKGFvKHQsZSksem8oZSksciY0JiZuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7VmQodC5jb250YWluZXJJbmZvKX1jYXRjaChnKXskdChlLGUucmV0dXJuLGcpfWJyZWFrO2Nhc2UgNDphbyh0LGUpLHpvKGUpO2JyZWFrO2Nhc2UgMTM6YW8odCxlKSx6byhlKSxvPWUuY2hpbGQsby5mbGFncyY4MTkyJiYoaT1vLm1lbW9pemVkU3RhdGUhPT1udWxsLG8uc3RhdGVOb2RlLmlzSGlkZGVuPWksIWl8fG8uYWx0ZXJuYXRlIT09bnVsbCYmby5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fChhMT1GdCgpKSksciY0JiZfayhlKTticmVhaztjYXNlIDIyOmlmKHU9biE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsZS5tb2RlJjE/KEFuPShjPUFuKXx8dSxhbyh0LGUpLEFuPWMpOmFvKHQsZSksem8oZSksciY4MTkyKXtpZihjPWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwsKGUuc3RhdGVOb2RlLmlzSGlkZGVuPWMpJiYhdSYmZS5tb2RlJjEpZm9yKHNlPWUsdT1lLmNoaWxkO3UhPT1udWxsOyl7Zm9yKGQ9c2U9dTtzZSE9PW51bGw7KXtzd2l0Y2goZj1zZSxwPWYuY2hpbGQsZi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpfZCg0LGYsZi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTpkYyhmLGYucmV0dXJuKTt2YXIgbT1mLnN0YXRlTm9kZTtpZih0eXBlb2YgbS5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIil7cj1mLG49Zi5yZXR1cm47dHJ5e3Q9cixtLnByb3BzPXQubWVtb2l6ZWRQcm9wcyxtLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxtLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goZyl7JHQocixuLGcpfX1icmVhaztjYXNlIDU6ZGMoZixmLnJldHVybik7YnJlYWs7Y2FzZSAyMjppZihmLm1lbW9pemVkU3RhdGUhPT1udWxsKXtPayhkKTtjb250aW51ZX19cCE9PW51bGw/KHAucmV0dXJuPWYsc2U9cCk6T2soZCl9dT11LnNpYmxpbmd9ZTpmb3IodT1udWxsLGQ9ZTs7KXtpZihkLnRhZz09PTUpe2lmKHU9PT1udWxsKXt1PWQ7dHJ5e289ZC5zdGF0ZU5vZGUsYz8oaT1vLnN0eWxlLHR5cGVvZiBpLnNldFByb3BlcnR5PT0iZnVuY3Rpb24iP2kuc2V0UHJvcGVydHkoImRpc3BsYXkiLCJub25lIiwiaW1wb3J0YW50Iik6aS5kaXNwbGF5PSJub25lIik6KGE9ZC5zdGF0ZU5vZGUsbD1kLm1lbW9pemVkUHJvcHMuc3R5bGUscz1sIT1udWxsJiZsLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/bC5kaXNwbGF5Om51bGwsYS5zdHlsZS5kaXNwbGF5PUZPKCJkaXNwbGF5IixzKSl9Y2F0Y2goZyl7JHQoZSxlLnJldHVybixnKX19fWVsc2UgaWYoZC50YWc9PT02KXtpZih1PT09bnVsbCl0cnl7ZC5zdGF0ZU5vZGUubm9kZVZhbHVlPWM/IiI6ZC5tZW1vaXplZFByb3BzfWNhdGNoKGcpeyR0KGUsZS5yZXR1cm4sZyl9fWVsc2UgaWYoKGQudGFnIT09MjImJmQudGFnIT09MjN8fGQubWVtb2l6ZWRTdGF0ZT09PW51bGx8fGQ9PT1lKSYmZC5jaGlsZCE9PW51bGwpe2QuY2hpbGQucmV0dXJuPWQsZD1kLmNoaWxkO2NvbnRpbnVlfWlmKGQ9PT1lKWJyZWFrIGU7Zm9yKDtkLnNpYmxpbmc9PT1udWxsOyl7aWYoZC5yZXR1cm49PT1udWxsfHxkLnJldHVybj09PWUpYnJlYWsgZTt1PT09ZCYmKHU9bnVsbCksZD1kLnJldHVybn11PT09ZCYmKHU9bnVsbCksZC5zaWJsaW5nLnJldHVybj1kLnJldHVybixkPWQuc2libGluZ319YnJlYWs7Y2FzZSAxOTphbyh0LGUpLHpvKGUpLHImNCYmX2soZSk7YnJlYWs7Y2FzZSAyMTpicmVhaztkZWZhdWx0OmFvKHQsZSksem8oZSl9fWZ1bmN0aW9uIHpvKGUpe3ZhciB0PWUuZmxhZ3M7aWYodCYyKXt0cnl7ZTp7Zm9yKHZhciBuPWUucmV0dXJuO24hPT1udWxsOyl7aWYocDIobikpe3ZhciByPW47YnJlYWsgZX1uPW4ucmV0dXJufXRocm93IEVycm9yKEgoMTYwKSl9c3dpdGNoKHIudGFnKXtjYXNlIDU6dmFyIG89ci5zdGF0ZU5vZGU7ci5mbGFncyYzMiYmKHpkKG8sIiIpLHIuZmxhZ3MmPS0zMyk7dmFyIGk9RWsoZSk7SzAoZSxpLG8pO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIHM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxhPUVrKGUpO1cwKGUsYSxzKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKEgoMTYxKSl9fWNhdGNoKGwpeyR0KGUsZS5yZXR1cm4sbCl9ZS5mbGFncyY9LTN9dCY0MDk2JiYoZS5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGlMKGUsdCxuKXtzZT1lLGcyKGUpfWZ1bmN0aW9uIGcyKGUsdCxuKXtmb3IodmFyIHI9KGUubW9kZSYxKSE9PTA7c2UhPT1udWxsOyl7dmFyIG89c2UsaT1vLmNoaWxkO2lmKG8udGFnPT09MjImJnIpe3ZhciBzPW8ubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fElwO2lmKCFzKXt2YXIgYT1vLmFsdGVybmF0ZSxsPWEhPT1udWxsJiZhLm1lbW9pemVkU3RhdGUhPT1udWxsfHxBbjthPUlwO3ZhciBjPUFuO2lmKElwPXMsKEFuPWwpJiYhYylmb3Ioc2U9bztzZSE9PW51bGw7KXM9c2UsbD1zLmNoaWxkLHMudGFnPT09MjImJnMubWVtb2l6ZWRTdGF0ZSE9PW51bGw/VGsobyk6bCE9PW51bGw/KGwucmV0dXJuPXMsc2U9bCk6VGsobyk7Zm9yKDtpIT09bnVsbDspc2U9aSxnMihpKSxpPWkuc2libGluZztzZT1vLElwPWEsQW49Y31DayhlKX1lbHNlIG8uc3VidHJlZUZsYWdzJjg3NzImJmkhPT1udWxsPyhpLnJldHVybj1vLHNlPWkpOkNrKGUpfX1mdW5jdGlvbiBDayhlKXtmb3IoO3NlIT09bnVsbDspe3ZhciB0PXNlO2lmKHQuZmxhZ3MmODc3Mil7dmFyIG49dC5hbHRlcm5hdGU7dHJ5e2lmKHQuZmxhZ3MmODc3Milzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6QW58fGdnKDUsdCk7YnJlYWs7Y2FzZSAxOnZhciByPXQuc3RhdGVOb2RlO2lmKHQuZmxhZ3MmNCYmIUFuKWlmKG49PT1udWxsKXIuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBvPXQuZWxlbWVudFR5cGU9PT10LnR5cGU/bi5tZW1vaXplZFByb3BzOmhvKHQudHlwZSxuLm1lbW9pemVkUHJvcHMpO3IuY29tcG9uZW50RGlkVXBkYXRlKG8sbi5tZW1vaXplZFN0YXRlLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBpPXQudXBkYXRlUXVldWU7aSE9PW51bGwmJmNrKHQsaSxyKTticmVhaztjYXNlIDM6dmFyIHM9dC51cGRhdGVRdWV1ZTtpZihzIT09bnVsbCl7aWYobj1udWxsLHQuY2hpbGQhPT1udWxsKXN3aXRjaCh0LmNoaWxkLnRhZyl7Y2FzZSA1Om49dC5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOm49dC5jaGlsZC5zdGF0ZU5vZGV9Y2sodCxzLG4pfWJyZWFrO2Nhc2UgNTp2YXIgYT10LnN0YXRlTm9kZTtpZihuPT09bnVsbCYmdC5mbGFncyY0KXtuPWE7dmFyIGw9dC5tZW1vaXplZFByb3BzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6bC5hdXRvRm9jdXMmJm4uZm9jdXMoKTticmVhaztjYXNlImltZyI6bC5zcmMmJihuLnNyYz1sLnNyYyl9fWJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwpe3ZhciBjPXQuYWx0ZXJuYXRlO2lmKGMhPT1udWxsKXt2YXIgdT1jLm1lbW9pemVkU3RhdGU7aWYodSE9PW51bGwpe3ZhciBkPXUuZGVoeWRyYXRlZDtkIT09bnVsbCYmVmQoZCl9fX1icmVhaztjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKEgoMTYzKSl9QW58fHQuZmxhZ3MmNTEyJiZIMCh0KX1jYXRjaChmKXskdCh0LHQucmV0dXJuLGYpfX1pZih0PT09ZSl7c2U9bnVsbDticmVha31pZihuPXQuc2libGluZyxuIT09bnVsbCl7bi5yZXR1cm49dC5yZXR1cm4sc2U9bjticmVha31zZT10LnJldHVybn19ZnVuY3Rpb24gT2soZSl7Zm9yKDtzZSE9PW51bGw7KXt2YXIgdD1zZTtpZih0PT09ZSl7c2U9bnVsbDticmVha312YXIgbj10LnNpYmxpbmc7aWYobiE9PW51bGwpe24ucmV0dXJuPXQucmV0dXJuLHNlPW47YnJlYWt9c2U9dC5yZXR1cm59fWZ1bmN0aW9uIFRrKGUpe2Zvcig7c2UhPT1udWxsOyl7dmFyIHQ9c2U7dHJ5e3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp2YXIgbj10LnJldHVybjt0cnl7Z2coNCx0KX1jYXRjaChsKXskdCh0LG4sbCl9YnJlYWs7Y2FzZSAxOnZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiByLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iKXt2YXIgbz10LnJldHVybjt0cnl7ci5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGwpeyR0KHQsbyxsKX19dmFyIGk9dC5yZXR1cm47dHJ5e0gwKHQpfWNhdGNoKGwpeyR0KHQsaSxsKX1icmVhaztjYXNlIDU6dmFyIHM9dC5yZXR1cm47dHJ5e0gwKHQpfWNhdGNoKGwpeyR0KHQscyxsKX19fWNhdGNoKGwpeyR0KHQsdC5yZXR1cm4sbCl9aWYodD09PWUpe3NlPW51bGw7YnJlYWt9dmFyIGE9dC5zaWJsaW5nO2lmKGEhPT1udWxsKXthLnJldHVybj10LnJldHVybixzZT1hO2JyZWFrfXNlPXQucmV0dXJufX12YXIgc0w9TWF0aC5jZWlsLGVtPUJpLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsaTE9QmkuUmVhY3RDdXJyZW50T3duZXIscXI9QmkuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsWGU9MCxobj1udWxsLEt0PW51bGwsRW49MCx5cj0wLGZjPWFhKDApLFp0PTAsZWY9bnVsbCxYYT0wLHZnPTAsczE9MCxDZD1udWxsLG9yPW51bGwsYTE9MCxMYz0xLzAsdmk9bnVsbCx0bT0hMSxxMD1udWxsLElzPW51bGwsTHA9ITEsQ3M9bnVsbCxubT0wLE9kPTAsRzA9bnVsbCxwaD0tMSxoaD0wO2Z1bmN0aW9uIFduKCl7cmV0dXJuIFhlJjY/RnQoKTpwaCE9PS0xP3BoOnBoPUZ0KCl9ZnVuY3Rpb24gTHMoZSl7cmV0dXJuIGUubW9kZSYxP1hlJjImJkVuIT09MD9FbiYtRW46VjMudHJhbnNpdGlvbiE9PW51bGw/KGhoPT09MCYmKGhoPVFPKCkpLGhoKTooZT1sdCxlIT09MHx8KGU9d2luZG93LmV2ZW50LGU9ZT09PXZvaWQgMD8xNjpzVChlLnR5cGUpKSxlKToxfWZ1bmN0aW9uIENvKGUsdCxuLHIpe2lmKDUwPE9kKXRocm93IE9kPTAsRzA9bnVsbCxFcnJvcihIKDE4NSkpO3FmKGUsbixyKSwoIShYZSYyKXx8ZSE9PWhuKSYmKGU9PT1obiYmKCEoWGUmMikmJih2Z3w9biksWnQ9PT00JiZTcyhlLEVuKSksY3IoZSxyKSxuPT09MSYmWGU9PT0wJiYhKHQubW9kZSYxKSYmKExjPUZ0KCkrNTAwLHBnJiZsYSgpKSl9ZnVuY3Rpb24gY3IoZSx0KXt2YXIgbj1lLmNhbGxiYWNrTm9kZTtWSShlLHQpO3ZhciByPXpoKGUsZT09PWhuP0VuOjApO2lmKHI9PT0wKW4hPT1udWxsJiZMUyhuKSxlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO2Vsc2UgaWYodD1yJi1yLGUuY2FsbGJhY2tQcmlvcml0eSE9PXQpe2lmKG4hPW51bGwmJkxTKG4pLHQ9PT0xKWUudGFnPT09MD9VMyhQay5iaW5kKG51bGwsZSkpOl9UKFBrLmJpbmQobnVsbCxlKSksajMoZnVuY3Rpb24oKXshKFhlJjYpJiZsYSgpfSksbj1udWxsO2Vsc2V7c3dpdGNoKGVUKHIpKXtjYXNlIDE6bj0kYjticmVhaztjYXNlIDQ6bj1aTzticmVhaztjYXNlIDE2Om49amg7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bj1KTzticmVhaztkZWZhdWx0Om49amh9bj1FMihuLHYyLmJpbmQobnVsbCxlKSl9ZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bn19ZnVuY3Rpb24gdjIoZSx0KXtpZihwaD0tMSxoaD0wLFhlJjYpdGhyb3cgRXJyb3IoSCgzMjcpKTt2YXIgbj1lLmNhbGxiYWNrTm9kZTtpZihTYygpJiZlLmNhbGxiYWNrTm9kZSE9PW4pcmV0dXJuIG51bGw7dmFyIHI9emgoZSxlPT09aG4/RW46MCk7aWYocj09PTApcmV0dXJuIG51bGw7aWYociYzMHx8ciZlLmV4cGlyZWRMYW5lc3x8dCl0PXJtKGUscik7ZWxzZXt0PXI7dmFyIG89WGU7WGV8PTI7dmFyIGk9eDIoKTsoaG4hPT1lfHxFbiE9PXQpJiYodmk9bnVsbCxMYz1GdCgpKzUwMCx6YShlLHQpKTtkbyB0cnl7Y0woKTticmVha31jYXRjaChhKXt5MihlLGEpfXdoaWxlKCEwKTtLYigpLGVtLmN1cnJlbnQ9aSxYZT1vLEt0IT09bnVsbD90PTA6KGhuPW51bGwsRW49MCx0PVp0KX1pZih0IT09MCl7aWYodD09PTImJihvPXcwKGUpLG8hPT0wJiYocj1vLHQ9WTAoZSxvKSkpLHQ9PT0xKXRocm93IG49ZWYsemEoZSwwKSxTcyhlLHIpLGNyKGUsRnQoKSksbjtpZih0PT09NilTcyhlLHIpO2Vsc2V7aWYobz1lLmN1cnJlbnQuYWx0ZXJuYXRlLCEociYzMCkmJiFhTChvKSYmKHQ9cm0oZSxyKSx0PT09MiYmKGk9dzAoZSksaSE9PTAmJihyPWksdD1ZMChlLGkpKSksdD09PTEpKXRocm93IG49ZWYsemEoZSwwKSxTcyhlLHIpLGNyKGUsRnQoKSksbjtzd2l0Y2goZS5maW5pc2hlZFdvcms9byxlLmZpbmlzaGVkTGFuZXM9cix0KXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKEgoMzQ1KSk7Y2FzZSAyOnlhKGUsb3IsdmkpO2JyZWFrO2Nhc2UgMzppZihTcyhlLHIpLChyJjEzMDAyMzQyNCk9PT1yJiYodD1hMSs1MDAtRnQoKSwxMDx0KSl7aWYoemgoZSwwKSE9PTApYnJlYWs7aWYobz1lLnN1c3BlbmRlZExhbmVzLChvJnIpIT09cil7V24oKSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm87YnJlYWt9ZS50aW1lb3V0SGFuZGxlPVAwKHlhLmJpbmQobnVsbCxlLG9yLHZpKSx0KTticmVha315YShlLG9yLHZpKTticmVhaztjYXNlIDQ6aWYoU3MoZSxyKSwociY0MTk0MjQwKT09PXIpYnJlYWs7Zm9yKHQ9ZS5ldmVudFRpbWVzLG89LTE7MDxyOyl7dmFyIHM9MzEtX28ocik7aT0xPDxzLHM9dFtzXSxzPm8mJihvPXMpLHImPX5pfWlmKHI9byxyPUZ0KCktcixyPSgxMjA+cj8xMjA6NDgwPnI/NDgwOjEwODA+cj8xMDgwOjE5MjA+cj8xOTIwOjNlMz5yPzNlMzo0MzIwPnI/NDMyMDoxOTYwKnNMKHIvMTk2MCkpLXIsMTA8cil7ZS50aW1lb3V0SGFuZGxlPVAwKHlhLmJpbmQobnVsbCxlLG9yLHZpKSxyKTticmVha315YShlLG9yLHZpKTticmVhaztjYXNlIDU6eWEoZSxvcix2aSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihIKDMyOSkpfX19cmV0dXJuIGNyKGUsRnQoKSksZS5jYWxsYmFja05vZGU9PT1uP3YyLmJpbmQobnVsbCxlKTpudWxsfWZ1bmN0aW9uIFkwKGUsdCl7dmFyIG49Q2Q7cmV0dXJuIGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKHphKGUsdCkuZmxhZ3N8PTI1NiksZT1ybShlLHQpLGUhPT0yJiYodD1vcixvcj1uLHQhPT1udWxsJiZYMCh0KSksZX1mdW5jdGlvbiBYMChlKXtvcj09PW51bGw/b3I9ZTpvci5wdXNoLmFwcGx5KG9yLGUpfWZ1bmN0aW9uIGFMKGUpe2Zvcih2YXIgdD1lOzspe2lmKHQuZmxhZ3MmMTYzODQpe3ZhciBuPXQudXBkYXRlUXVldWU7aWYobiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXSxpPW8uZ2V0U25hcHNob3Q7bz1vLnZhbHVlO3RyeXtpZighUm8oaSgpLG8pKXJldHVybiExfWNhdGNoe3JldHVybiExfX19aWYobj10LmNoaWxkLHQuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj10LHQ9bjtlbHNle2lmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiEwO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gU3MoZSx0KXtmb3IodCY9fnMxLHQmPX52ZyxlLnN1c3BlbmRlZExhbmVzfD10LGUucGluZ2VkTGFuZXMmPX50LGU9ZS5leHBpcmF0aW9uVGltZXM7MDx0Oyl7dmFyIG49MzEtX28odCkscj0xPDxuO2Vbbl09LTEsdCY9fnJ9fWZ1bmN0aW9uIFBrKGUpe2lmKFhlJjYpdGhyb3cgRXJyb3IoSCgzMjcpKTtTYygpO3ZhciB0PXpoKGUsMCk7aWYoISh0JjEpKXJldHVybiBjcihlLEZ0KCkpLG51bGw7dmFyIG49cm0oZSx0KTtpZihlLnRhZyE9PTAmJm49PT0yKXt2YXIgcj13MChlKTtyIT09MCYmKHQ9cixuPVkwKGUscikpfWlmKG49PT0xKXRocm93IG49ZWYsemEoZSwwKSxTcyhlLHQpLGNyKGUsRnQoKSksbjtpZihuPT09Nil0aHJvdyBFcnJvcihIKDM0NSkpO3JldHVybiBlLmZpbmlzaGVkV29yaz1lLmN1cnJlbnQuYWx0ZXJuYXRlLGUuZmluaXNoZWRMYW5lcz10LHlhKGUsb3IsdmkpLGNyKGUsRnQoKSksbnVsbH1mdW5jdGlvbiBsMShlLHQpe3ZhciBuPVhlO1hlfD0xO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5e1hlPW4sWGU9PT0wJiYoTGM9RnQoKSs1MDAscGcmJmxhKCkpfX1mdW5jdGlvbiBaYShlKXtDcyE9PW51bGwmJkNzLnRhZz09PTAmJiEoWGUmNikmJlNjKCk7dmFyIHQ9WGU7WGV8PTE7dmFyIG49cXIudHJhbnNpdGlvbixyPWx0O3RyeXtpZihxci50cmFuc2l0aW9uPW51bGwsbHQ9MSxlKXJldHVybiBlKCl9ZmluYWxseXtsdD1yLHFyLnRyYW5zaXRpb249bixYZT10LCEoWGUmNikmJmxhKCl9fWZ1bmN0aW9uIGMxKCl7eXI9ZmMuY3VycmVudCx3dChmYyl9ZnVuY3Rpb24gemEoZSx0KXtlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wO3ZhciBuPWUudGltZW91dEhhbmRsZTtpZihuIT09LTEmJihlLnRpbWVvdXRIYW5kbGU9LTEsTDMobikpLEt0IT09bnVsbClmb3Iobj1LdC5yZXR1cm47biE9PW51bGw7KXt2YXIgcj1uO3N3aXRjaChWYihyKSxyLnRhZyl7Y2FzZSAxOnI9ci50eXBlLmNoaWxkQ29udGV4dFR5cGVzLHIhPW51bGwmJkhoKCk7YnJlYWs7Y2FzZSAzOkRjKCksd3QoYXIpLHd0KEluKSxKYigpO2JyZWFrO2Nhc2UgNTpaYihyKTticmVhaztjYXNlIDQ6RGMoKTticmVhaztjYXNlIDEzOnd0KFR0KTticmVhaztjYXNlIDE5Ond0KFR0KTticmVhaztjYXNlIDEwOnFiKHIudHlwZS5fY29udGV4dCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOmMxKCl9bj1uLnJldHVybn1pZihobj1lLEt0PWU9anMoZS5jdXJyZW50LG51bGwpLEVuPXlyPXQsWnQ9MCxlZj1udWxsLHMxPXZnPVhhPTAsb3I9Q2Q9bnVsbCxNYSE9PW51bGwpe2Zvcih0PTA7dDxNYS5sZW5ndGg7dCsrKWlmKG49TWFbdF0scj1uLmludGVybGVhdmVkLHIhPT1udWxsKXtuLmludGVybGVhdmVkPW51bGw7dmFyIG89ci5uZXh0LGk9bi5wZW5kaW5nO2lmKGkhPT1udWxsKXt2YXIgcz1pLm5leHQ7aS5uZXh0PW8sci5uZXh0PXN9bi5wZW5kaW5nPXJ9TWE9bnVsbH1yZXR1cm4gZX1mdW5jdGlvbiB5MihlLHQpe2Rve3ZhciBuPUt0O3RyeXtpZihLYigpLHVoLmN1cnJlbnQ9UWgsSmgpe2Zvcih2YXIgcj1NdC5tZW1vaXplZFN0YXRlO3IhPT1udWxsOyl7dmFyIG89ci5xdWV1ZTtvIT09bnVsbCYmKG8ucGVuZGluZz1udWxsKSxyPXIubmV4dH1KaD0hMX1pZihZYT0wLHVuPVl0PU10PW51bGwsRWQ9ITEsWmQ9MCxpMS5jdXJyZW50PW51bGwsbj09PW51bGx8fG4ucmV0dXJuPT09bnVsbCl7WnQ9MSxlZj10LEt0PW51bGw7YnJlYWt9ZTp7dmFyIGk9ZSxzPW4ucmV0dXJuLGE9bixsPXQ7aWYodD1FbixhLmZsYWdzfD0zMjc2OCxsIT09bnVsbCYmdHlwZW9mIGw9PSJvYmplY3QiJiZ0eXBlb2YgbC50aGVuPT0iZnVuY3Rpb24iKXt2YXIgYz1sLHU9YSxkPXUudGFnO2lmKCEodS5tb2RlJjEpJiYoZD09PTB8fGQ9PT0xMXx8ZD09PTE1KSl7dmFyIGY9dS5hbHRlcm5hdGU7Zj8odS51cGRhdGVRdWV1ZT1mLnVwZGF0ZVF1ZXVlLHUubWVtb2l6ZWRTdGF0ZT1mLm1lbW9pemVkU3RhdGUsdS5sYW5lcz1mLmxhbmVzKToodS51cGRhdGVRdWV1ZT1udWxsLHUubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgcD1nayhzKTtpZihwIT09bnVsbCl7cC5mbGFncyY9LTI1Nyx2ayhwLHMsYSxpLHQpLHAubW9kZSYxJiZtayhpLGMsdCksdD1wLGw9Yzt2YXIgbT10LnVwZGF0ZVF1ZXVlO2lmKG09PT1udWxsKXt2YXIgZz1uZXcgU2V0O2cuYWRkKGwpLHQudXBkYXRlUXVldWU9Z31lbHNlIG0uYWRkKGwpO2JyZWFrIGV9ZWxzZXtpZighKHQmMSkpe21rKGksYyx0KSx1MSgpO2JyZWFrIGV9bD1FcnJvcihIKDQyNikpfX1lbHNlIGlmKGt0JiZhLm1vZGUmMSl7dmFyIHk9Z2socyk7aWYoeSE9PW51bGwpeyEoeS5mbGFncyY2NTUzNikmJih5LmZsYWdzfD0yNTYpLHZrKHkscyxhLGksdCksSGIoSWMobCxhKSk7YnJlYWsgZX19aT1sPUljKGwsYSksWnQhPT00JiYoWnQ9MiksQ2Q9PT1udWxsP0NkPVtpXTpDZC5wdXNoKGkpLGk9cztkb3tzd2l0Y2goaS50YWcpe2Nhc2UgMzppLmZsYWdzfD02NTUzNix0Jj0tdCxpLmxhbmVzfD10O3ZhciB2PXQyKGksbCx0KTtsayhpLHYpO2JyZWFrIGU7Y2FzZSAxOmE9bDt2YXIgeD1pLnR5cGUsdz1pLnN0YXRlTm9kZTtpZighKGkuZmxhZ3MmMTI4KSYmKHR5cGVvZiB4LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8dyE9PW51bGwmJnR5cGVvZiB3LmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoSXM9PT1udWxsfHwhSXMuaGFzKHcpKSkpe2kuZmxhZ3N8PTY1NTM2LHQmPS10LGkubGFuZXN8PXQ7dmFyIGs9bjIoaSxhLHQpO2xrKGksayk7YnJlYWsgZX19aT1pLnJldHVybn13aGlsZShpIT09bnVsbCl9dzIobil9Y2F0Y2goRSl7dD1FLEt0PT09biYmbiE9PW51bGwmJihLdD1uPW4ucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSghMCl9ZnVuY3Rpb24geDIoKXt2YXIgZT1lbS5jdXJyZW50O3JldHVybiBlbS5jdXJyZW50PVFoLGU9PT1udWxsP1FoOmV9ZnVuY3Rpb24gdTEoKXsoWnQ9PT0wfHxadD09PTN8fFp0PT09MikmJihadD00KSxobj09PW51bGx8fCEoWGEmMjY4NDM1NDU1KSYmISh2ZyYyNjg0MzU0NTUpfHxTcyhobixFbil9ZnVuY3Rpb24gcm0oZSx0KXt2YXIgbj1YZTtYZXw9Mjt2YXIgcj14MigpOyhobiE9PWV8fEVuIT09dCkmJih2aT1udWxsLHphKGUsdCkpO2RvIHRyeXtsTCgpO2JyZWFrfWNhdGNoKG8pe3kyKGUsbyl9d2hpbGUoITApO2lmKEtiKCksWGU9bixlbS5jdXJyZW50PXIsS3QhPT1udWxsKXRocm93IEVycm9yKEgoMjYxKSk7cmV0dXJuIGhuPW51bGwsRW49MCxadH1mdW5jdGlvbiBsTCgpe2Zvcig7S3QhPT1udWxsOyliMihLdCl9ZnVuY3Rpb24gY0woKXtmb3IoO0t0IT09bnVsbCYmIUFJKCk7KWIyKEt0KX1mdW5jdGlvbiBiMihlKXt2YXIgdD1rMihlLmFsdGVybmF0ZSxlLHlyKTtlLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/dzIoZSk6S3Q9dCxpMS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gdzIoZSl7dmFyIHQ9ZTtkb3t2YXIgbj10LmFsdGVybmF0ZTtpZihlPXQucmV0dXJuLHQuZmxhZ3MmMzI3Njgpe2lmKG49bkwobix0KSxuIT09bnVsbCl7bi5mbGFncyY9MzI3NjcsS3Q9bjtyZXR1cm59aWYoZSE9PW51bGwpZS5mbGFnc3w9MzI3NjgsZS5zdWJ0cmVlRmxhZ3M9MCxlLmRlbGV0aW9ucz1udWxsO2Vsc2V7WnQ9NixLdD1udWxsO3JldHVybn19ZWxzZSBpZihuPXRMKG4sdCx5ciksbiE9PW51bGwpe0t0PW47cmV0dXJufWlmKHQ9dC5zaWJsaW5nLHQhPT1udWxsKXtLdD10O3JldHVybn1LdD10PWV9d2hpbGUodCE9PW51bGwpO1p0PT09MCYmKFp0PTUpfWZ1bmN0aW9uIHlhKGUsdCxuKXt2YXIgcj1sdCxvPXFyLnRyYW5zaXRpb247dHJ5e3FyLnRyYW5zaXRpb249bnVsbCxsdD0xLHVMKGUsdCxuLHIpfWZpbmFsbHl7cXIudHJhbnNpdGlvbj1vLGx0PXJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdUwoZSx0LG4scil7ZG8gU2MoKTt3aGlsZShDcyE9PW51bGwpO2lmKFhlJjYpdGhyb3cgRXJyb3IoSCgzMjcpKTtuPWUuZmluaXNoZWRXb3JrO3ZhciBvPWUuZmluaXNoZWRMYW5lcztpZihuPT09bnVsbClyZXR1cm4gbnVsbDtpZihlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wLG49PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IoSCgxNzcpKTtlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBpPW4ubGFuZXN8bi5jaGlsZExhbmVzO2lmKEhJKGUsaSksZT09PWhuJiYoS3Q9aG49bnVsbCxFbj0wKSwhKG4uc3VidHJlZUZsYWdzJjIwNjQpJiYhKG4uZmxhZ3MmMjA2NCl8fExwfHwoTHA9ITAsRTIoamgsZnVuY3Rpb24oKXtyZXR1cm4gU2MoKSxudWxsfSkpLGk9KG4uZmxhZ3MmMTU5OTApIT09MCxuLnN1YnRyZWVGbGFncyYxNTk5MHx8aSl7aT1xci50cmFuc2l0aW9uLHFyLnRyYW5zaXRpb249bnVsbDt2YXIgcz1sdDtsdD0xO3ZhciBhPVhlO1hlfD00LGkxLmN1cnJlbnQ9bnVsbCxvTChlLG4pLG0yKG4sZSksTTMoTzApLEZoPSEhQzAsTzA9QzA9bnVsbCxlLmN1cnJlbnQ9bixpTChuKSxESSgpLFhlPWEsbHQ9cyxxci50cmFuc2l0aW9uPWl9ZWxzZSBlLmN1cnJlbnQ9bjtpZihMcCYmKExwPSExLENzPWUsbm09byksaT1lLnBlbmRpbmdMYW5lcyxpPT09MCYmKElzPW51bGwpLGpJKG4uc3RhdGVOb2RlKSxjcihlLEZ0KCkpLHQhPT1udWxsKWZvcihyPWUub25SZWNvdmVyYWJsZUVycm9yLG49MDtuPHQubGVuZ3RoO24rKylvPXRbbl0scihvLnZhbHVlLHtjb21wb25lbnRTdGFjazpvLnN0YWNrLGRpZ2VzdDpvLmRpZ2VzdH0pO2lmKHRtKXRocm93IHRtPSExLGU9cTAscTA9bnVsbCxlO3JldHVybiBubSYxJiZlLnRhZyE9PTAmJlNjKCksaT1lLnBlbmRpbmdMYW5lcyxpJjE/ZT09PUcwP09kKys6KE9kPTAsRzA9ZSk6T2Q9MCxsYSgpLG51bGx9ZnVuY3Rpb24gU2MoKXtpZihDcyE9PW51bGwpe3ZhciBlPWVUKG5tKSx0PXFyLnRyYW5zaXRpb24sbj1sdDt0cnl7aWYocXIudHJhbnNpdGlvbj1udWxsLGx0PTE2PmU/MTY6ZSxDcz09PW51bGwpdmFyIHI9ITE7ZWxzZXtpZihlPUNzLENzPW51bGwsbm09MCxYZSY2KXRocm93IEVycm9yKEgoMzMxKSk7dmFyIG89WGU7Zm9yKFhlfD00LHNlPWUuY3VycmVudDtzZSE9PW51bGw7KXt2YXIgaT1zZSxzPWkuY2hpbGQ7aWYoc2UuZmxhZ3MmMTYpe3ZhciBhPWkuZGVsZXRpb25zO2lmKGEhPT1udWxsKXtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIGM9YVtsXTtmb3Ioc2U9YztzZSE9PW51bGw7KXt2YXIgdT1zZTtzd2l0Y2godS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6X2QoOCx1LGkpfXZhciBkPXUuY2hpbGQ7aWYoZCE9PW51bGwpZC5yZXR1cm49dSxzZT1kO2Vsc2UgZm9yKDtzZSE9PW51bGw7KXt1PXNlO3ZhciBmPXUuc2libGluZyxwPXUucmV0dXJuO2lmKGYyKHUpLHU9PT1jKXtzZT1udWxsO2JyZWFrfWlmKGYhPT1udWxsKXtmLnJldHVybj1wLHNlPWY7YnJlYWt9c2U9cH19fXZhciBtPWkuYWx0ZXJuYXRlO2lmKG0hPT1udWxsKXt2YXIgZz1tLmNoaWxkO2lmKGchPT1udWxsKXttLmNoaWxkPW51bGw7ZG97dmFyIHk9Zy5zaWJsaW5nO2cuc2libGluZz1udWxsLGc9eX13aGlsZShnIT09bnVsbCl9fXNlPWl9fWlmKGkuc3VidHJlZUZsYWdzJjIwNjQmJnMhPT1udWxsKXMucmV0dXJuPWksc2U9cztlbHNlIGU6Zm9yKDtzZSE9PW51bGw7KXtpZihpPXNlLGkuZmxhZ3MmMjA0OClzd2l0Y2goaS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6X2QoOSxpLGkucmV0dXJuKX12YXIgdj1pLnNpYmxpbmc7aWYodiE9PW51bGwpe3YucmV0dXJuPWkucmV0dXJuLHNlPXY7YnJlYWsgZX1zZT1pLnJldHVybn19dmFyIHg9ZS5jdXJyZW50O2ZvcihzZT14O3NlIT09bnVsbDspe3M9c2U7dmFyIHc9cy5jaGlsZDtpZihzLnN1YnRyZWVGbGFncyYyMDY0JiZ3IT09bnVsbCl3LnJldHVybj1zLHNlPXc7ZWxzZSBlOmZvcihzPXg7c2UhPT1udWxsOyl7aWYoYT1zZSxhLmZsYWdzJjIwNDgpdHJ5e3N3aXRjaChhLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpnZyg5LGEpfX1jYXRjaChFKXskdChhLGEucmV0dXJuLEUpfWlmKGE9PT1zKXtzZT1udWxsO2JyZWFrIGV9dmFyIGs9YS5zaWJsaW5nO2lmKGshPT1udWxsKXtrLnJldHVybj1hLnJldHVybixzZT1rO2JyZWFrIGV9c2U9YS5yZXR1cm59fWlmKFhlPW8sbGEoKSxHbyYmdHlwZW9mIEdvLm9uUG9zdENvbW1pdEZpYmVyUm9vdD09ImZ1bmN0aW9uIil0cnl7R28ub25Qb3N0Q29tbWl0RmliZXJSb290KGxnLGUpfWNhdGNoe31yPSEwfXJldHVybiByfWZpbmFsbHl7bHQ9bixxci50cmFuc2l0aW9uPXR9fXJldHVybiExfWZ1bmN0aW9uIE1rKGUsdCxuKXt0PUljKG4sdCksdD10MihlLHQsMSksZT1EcyhlLHQsMSksdD1XbigpLGUhPT1udWxsJiYocWYoZSwxLHQpLGNyKGUsdCkpfWZ1bmN0aW9uICR0KGUsdCxuKXtpZihlLnRhZz09PTMpTWsoZSxlLG4pO2Vsc2UgZm9yKDt0IT09bnVsbDspe2lmKHQudGFnPT09Myl7TWsodCxlLG4pO2JyZWFrfWVsc2UgaWYodC50YWc9PT0xKXt2YXIgcj10LnN0YXRlTm9kZTtpZih0eXBlb2YgdC50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8dHlwZW9mIHIuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihJcz09PW51bGx8fCFJcy5oYXMocikpKXtlPUljKG4sZSksZT1uMih0LGUsMSksdD1Ecyh0LGUsMSksZT1XbigpLHQhPT1udWxsJiYocWYodCwxLGUpLGNyKHQsZSkpO2JyZWFrfX10PXQucmV0dXJufX1mdW5jdGlvbiBkTChlLHQsbil7dmFyIHI9ZS5waW5nQ2FjaGU7ciE9PW51bGwmJnIuZGVsZXRlKHQpLHQ9V24oKSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJm4saG49PT1lJiYoRW4mbik9PT1uJiYoWnQ9PT00fHxadD09PTMmJihFbiYxMzAwMjM0MjQpPT09RW4mJjUwMD5GdCgpLWExP3phKGUsMCk6czF8PW4pLGNyKGUsdCl9ZnVuY3Rpb24gUzIoZSx0KXt0PT09MCYmKGUubW9kZSYxPyh0PU9wLE9wPDw9MSwhKE9wJjEzMDAyMzQyNCkmJihPcD00MTk0MzA0KSk6dD0xKTt2YXIgbj1XbigpO2U9TmkoZSx0KSxlIT09bnVsbCYmKHFmKGUsdCxuKSxjcihlLG4pKX1mdW5jdGlvbiBmTChlKXt2YXIgdD1lLm1lbW9pemVkU3RhdGUsbj0wO3QhPT1udWxsJiYobj10LnJldHJ5TGFuZSksUzIoZSxuKX1mdW5jdGlvbiBwTChlLHQpe3ZhciBuPTA7c3dpdGNoKGUudGFnKXtjYXNlIDEzOnZhciByPWUuc3RhdGVOb2RlLG89ZS5tZW1vaXplZFN0YXRlO28hPT1udWxsJiYobj1vLnJldHJ5TGFuZSk7YnJlYWs7Y2FzZSAxOTpyPWUuc3RhdGVOb2RlO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoSCgzMTQpKX1yIT09bnVsbCYmci5kZWxldGUodCksUzIoZSxuKX12YXIgazI7azI9ZnVuY3Rpb24oZSx0LG4pe2lmKGUhPT1udWxsKWlmKGUubWVtb2l6ZWRQcm9wcyE9PXQucGVuZGluZ1Byb3BzfHxhci5jdXJyZW50KWlyPSEwO2Vsc2V7aWYoIShlLmxhbmVzJm4pJiYhKHQuZmxhZ3MmMTI4KSlyZXR1cm4gaXI9ITEsZUwoZSx0LG4pO2lyPSEhKGUuZmxhZ3MmMTMxMDcyKX1lbHNlIGlyPSExLGt0JiZ0LmZsYWdzJjEwNDg1NzYmJkNUKHQscWgsdC5pbmRleCk7c3dpdGNoKHQubGFuZXM9MCx0LnRhZyl7Y2FzZSAyOnZhciByPXQudHlwZTtmaChlLHQpLGU9dC5wZW5kaW5nUHJvcHM7dmFyIG89TmModCxJbi5jdXJyZW50KTt3Yyh0LG4pLG89ZTEobnVsbCx0LHIsZSxvLG4pO3ZhciBpPXQxKCk7cmV0dXJuIHQuZmxhZ3N8PTEsdHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCYmdHlwZW9mIG8ucmVuZGVyPT0iZnVuY3Rpb24iJiZvLiQkdHlwZW9mPT09dm9pZCAwPyh0LnRhZz0xLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHQudXBkYXRlUXVldWU9bnVsbCxscihyKT8oaT0hMCxXaCh0KSk6aT0hMSx0Lm1lbW9pemVkU3RhdGU9by5zdGF0ZSE9PW51bGwmJm8uc3RhdGUhPT12b2lkIDA/by5zdGF0ZTpudWxsLFliKHQpLG8udXBkYXRlcj1oZyx0LnN0YXRlTm9kZT1vLG8uX3JlYWN0SW50ZXJuYWxzPXQsSTAodCxyLGUsbiksdD16MChudWxsLHQsciwhMCxpLG4pKToodC50YWc9MCxrdCYmaSYmVWIodCksVW4obnVsbCx0LG8sbiksdD10LmNoaWxkKSx0O2Nhc2UgMTY6cj10LmVsZW1lbnRUeXBlO2U6e3N3aXRjaChmaChlLHQpLGU9dC5wZW5kaW5nUHJvcHMsbz1yLl9pbml0LHI9byhyLl9wYXlsb2FkKSx0LnR5cGU9cixvPXQudGFnPW1MKHIpLGU9aG8ocixlKSxvKXtjYXNlIDA6dD1qMChudWxsLHQscixlLG4pO2JyZWFrIGU7Y2FzZSAxOnQ9YmsobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTE6dD15ayhudWxsLHQscixlLG4pO2JyZWFrIGU7Y2FzZSAxNDp0PXhrKG51bGwsdCxyLGhvKHIudHlwZSxlKSxuKTticmVhayBlfXRocm93IEVycm9yKEgoMzA2LHIsIiIpKX1yZXR1cm4gdDtjYXNlIDA6cmV0dXJuIHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsbz10LmVsZW1lbnRUeXBlPT09cj9vOmhvKHIsbyksajAoZSx0LHIsbyxuKTtjYXNlIDE6cmV0dXJuIHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsbz10LmVsZW1lbnRUeXBlPT09cj9vOmhvKHIsbyksYmsoZSx0LHIsbyxuKTtjYXNlIDM6ZTp7aWYoczIodCksZT09PW51bGwpdGhyb3cgRXJyb3IoSCgzODcpKTtyPXQucGVuZGluZ1Byb3BzLGk9dC5tZW1vaXplZFN0YXRlLG89aS5lbGVtZW50LE1UKGUsdCksWGgodCxyLG51bGwsbik7dmFyIHM9dC5tZW1vaXplZFN0YXRlO2lmKHI9cy5lbGVtZW50LGkuaXNEZWh5ZHJhdGVkKWlmKGk9e2VsZW1lbnQ6cixpc0RlaHlkcmF0ZWQ6ITEsY2FjaGU6cy5jYWNoZSxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOnMucGVuZGluZ1N1c3BlbnNlQm91bmRhcmllcyx0cmFuc2l0aW9uczpzLnRyYW5zaXRpb25zfSx0LnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1pLHQubWVtb2l6ZWRTdGF0ZT1pLHQuZmxhZ3MmMjU2KXtvPUljKEVycm9yKEgoNDIzKSksdCksdD13ayhlLHQscixuLG8pO2JyZWFrIGV9ZWxzZSBpZihyIT09byl7bz1JYyhFcnJvcihIKDQyNCkpLHQpLHQ9d2soZSx0LHIsbixvKTticmVhayBlfWVsc2UgZm9yKGtyPUFzKHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8uZmlyc3RDaGlsZCksRXI9dCxrdD0hMCx2bz1udWxsLG49QVQodCxudWxsLHIsbiksdC5jaGlsZD1uO247KW4uZmxhZ3M9bi5mbGFncyYtM3w0MDk2LG49bi5zaWJsaW5nO2Vsc2V7aWYoJGMoKSxyPT09byl7dD0kaShlLHQsbik7YnJlYWsgZX1VbihlLHQscixuKX10PXQuY2hpbGR9cmV0dXJuIHQ7Y2FzZSA1OnJldHVybiBEVCh0KSxlPT09bnVsbCYmJDAodCkscj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxpPWUhPT1udWxsP2UubWVtb2l6ZWRQcm9wczpudWxsLHM9by5jaGlsZHJlbixUMChyLG8pP3M9bnVsbDppIT09bnVsbCYmVDAocixpKSYmKHQuZmxhZ3N8PTMyKSxpMihlLHQpLFVuKGUsdCxzLG4pLHQuY2hpbGQ7Y2FzZSA2OnJldHVybiBlPT09bnVsbCYmJDAodCksbnVsbDtjYXNlIDEzOnJldHVybiBhMihlLHQsbik7Y2FzZSA0OnJldHVybiBYYih0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHI9dC5wZW5kaW5nUHJvcHMsZT09PW51bGw/dC5jaGlsZD1BYyh0LG51bGwscixuKTpVbihlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTE6cmV0dXJuIHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsbz10LmVsZW1lbnRUeXBlPT09cj9vOmhvKHIsbykseWsoZSx0LHIsbyxuKTtjYXNlIDc6cmV0dXJuIFVuKGUsdCx0LnBlbmRpbmdQcm9wcyxuKSx0LmNoaWxkO2Nhc2UgODpyZXR1cm4gVW4oZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gVW4oZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLHQuY2hpbGQ7Y2FzZSAxMDplOntpZihyPXQudHlwZS5fY29udGV4dCxvPXQucGVuZGluZ1Byb3BzLGk9dC5tZW1vaXplZFByb3BzLHM9by52YWx1ZSxndChHaCxyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT1zLGkhPT1udWxsKWlmKFJvKGkudmFsdWUscykpe2lmKGkuY2hpbGRyZW49PT1vLmNoaWxkcmVuJiYhYXIuY3VycmVudCl7dD0kaShlLHQsbik7YnJlYWsgZX19ZWxzZSBmb3IoaT10LmNoaWxkLGkhPT1udWxsJiYoaS5yZXR1cm49dCk7aSE9PW51bGw7KXt2YXIgYT1pLmRlcGVuZGVuY2llcztpZihhIT09bnVsbCl7cz1pLmNoaWxkO2Zvcih2YXIgbD1hLmZpcnN0Q29udGV4dDtsIT09bnVsbDspe2lmKGwuY29udGV4dD09PXIpe2lmKGkudGFnPT09MSl7bD1PaSgtMSxuJi1uKSxsLnRhZz0yO3ZhciBjPWkudXBkYXRlUXVldWU7aWYoYyE9PW51bGwpe2M9Yy5zaGFyZWQ7dmFyIHU9Yy5wZW5kaW5nO3U9PT1udWxsP2wubmV4dD1sOihsLm5leHQ9dS5uZXh0LHUubmV4dD1sKSxjLnBlbmRpbmc9bH19aS5sYW5lc3w9bixsPWkuYWx0ZXJuYXRlLGwhPT1udWxsJiYobC5sYW5lc3w9biksQTAoaS5yZXR1cm4sbix0KSxhLmxhbmVzfD1uO2JyZWFrfWw9bC5uZXh0fX1lbHNlIGlmKGkudGFnPT09MTApcz1pLnR5cGU9PT10LnR5cGU/bnVsbDppLmNoaWxkO2Vsc2UgaWYoaS50YWc9PT0xOCl7aWYocz1pLnJldHVybixzPT09bnVsbCl0aHJvdyBFcnJvcihIKDM0MSkpO3MubGFuZXN8PW4sYT1zLmFsdGVybmF0ZSxhIT09bnVsbCYmKGEubGFuZXN8PW4pLEEwKHMsbix0KSxzPWkuc2libGluZ31lbHNlIHM9aS5jaGlsZDtpZihzIT09bnVsbClzLnJldHVybj1pO2Vsc2UgZm9yKHM9aTtzIT09bnVsbDspe2lmKHM9PT10KXtzPW51bGw7YnJlYWt9aWYoaT1zLnNpYmxpbmcsaSE9PW51bGwpe2kucmV0dXJuPXMucmV0dXJuLHM9aTticmVha31zPXMucmV0dXJufWk9c31VbihlLHQsby5jaGlsZHJlbixuKSx0PXQuY2hpbGR9cmV0dXJuIHQ7Y2FzZSA5OnJldHVybiBvPXQudHlwZSxyPXQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHdjKHQsbiksbz1YcihvKSxyPXIobyksdC5mbGFnc3w9MSxVbihlLHQscixuKSx0LmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIHI9dC50eXBlLG89aG8ocix0LnBlbmRpbmdQcm9wcyksbz1obyhyLnR5cGUsbykseGsoZSx0LHIsbyxuKTtjYXNlIDE1OnJldHVybiByMihlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTc6cmV0dXJuIHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsbz10LmVsZW1lbnRUeXBlPT09cj9vOmhvKHIsbyksZmgoZSx0KSx0LnRhZz0xLGxyKHIpPyhlPSEwLFdoKHQpKTplPSExLHdjKHQsbiksTlQodCxyLG8pLEkwKHQscixvLG4pLHowKG51bGwsdCxyLCEwLGUsbik7Y2FzZSAxOTpyZXR1cm4gbDIoZSx0LG4pO2Nhc2UgMjI6cmV0dXJuIG8yKGUsdCxuKX10aHJvdyBFcnJvcihIKDE1Nix0LnRhZykpfTtmdW5jdGlvbiBFMihlLHQpe3JldHVybiBYTyhlLHQpfWZ1bmN0aW9uIGhMKGUsdCxuLHIpe3RoaXMudGFnPWUsdGhpcy5rZXk9bix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPXQsdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wLHRoaXMuZGVsZXRpb25zPW51bGwsdGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MCx0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIFdyKGUsdCxuLHIpe3JldHVybiBuZXcgaEwoZSx0LG4scil9ZnVuY3Rpb24gZDEoZSl7cmV0dXJuIGU9ZS5wcm90b3R5cGUsISghZXx8IWUuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gbUwoZSl7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpcmV0dXJuIGQxKGUpPzE6MDtpZihlIT1udWxsKXtpZihlPWUuJCR0eXBlb2YsZT09PU1iKXJldHVybiAxMTtpZihlPT09UmIpcmV0dXJuIDE0fXJldHVybiAyfWZ1bmN0aW9uIGpzKGUsdCl7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG49PT1udWxsPyhuPVdyKGUudGFnLHQsZS5rZXksZS5tb2RlKSxuLmVsZW1lbnRUeXBlPWUuZWxlbWVudFR5cGUsbi50eXBlPWUudHlwZSxuLnN0YXRlTm9kZT1lLnN0YXRlTm9kZSxuLmFsdGVybmF0ZT1lLGUuYWx0ZXJuYXRlPW4pOihuLnBlbmRpbmdQcm9wcz10LG4udHlwZT1lLnR5cGUsbi5mbGFncz0wLG4uc3VidHJlZUZsYWdzPTAsbi5kZWxldGlvbnM9bnVsbCksbi5mbGFncz1lLmZsYWdzJjE0NjgwMDY0LG4uY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMsbi5sYW5lcz1lLmxhbmVzLG4uY2hpbGQ9ZS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9ZS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT1lLm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQ9ZS5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9dD09PW51bGw/bnVsbDp7bGFuZXM6dC5sYW5lcyxmaXJzdENvbnRleHQ6dC5maXJzdENvbnRleHR9LG4uc2libGluZz1lLnNpYmxpbmcsbi5pbmRleD1lLmluZGV4LG4ucmVmPWUucmVmLG59ZnVuY3Rpb24gbWgoZSx0LG4scixvLGkpe3ZhciBzPTI7aWYocj1lLHR5cGVvZiBlPT0iZnVuY3Rpb24iKWQxKGUpJiYocz0xKTtlbHNlIGlmKHR5cGVvZiBlPT0ic3RyaW5nIilzPTU7ZWxzZSBlOnN3aXRjaChlKXtjYXNlIG5jOnJldHVybiBGYShuLmNoaWxkcmVuLG8saSx0KTtjYXNlIFBiOnM9OCxvfD04O2JyZWFrO2Nhc2UgczA6cmV0dXJuIGU9V3IoMTIsbix0LG98MiksZS5lbGVtZW50VHlwZT1zMCxlLmxhbmVzPWksZTtjYXNlIGEwOnJldHVybiBlPVdyKDEzLG4sdCxvKSxlLmVsZW1lbnRUeXBlPWEwLGUubGFuZXM9aSxlO2Nhc2UgbDA6cmV0dXJuIGU9V3IoMTksbix0LG8pLGUuZWxlbWVudFR5cGU9bDAsZS5sYW5lcz1pLGU7Y2FzZSAkTzpyZXR1cm4geWcobixvLGksdCk7ZGVmYXVsdDppZih0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIFJPOnM9MTA7YnJlYWsgZTtjYXNlIE5POnM9OTticmVhayBlO2Nhc2UgTWI6cz0xMTticmVhayBlO2Nhc2UgUmI6cz0xNDticmVhayBlO2Nhc2UgdnM6cz0xNixyPW51bGw7YnJlYWsgZX10aHJvdyBFcnJvcihIKDEzMCxlPT1udWxsP2U6dHlwZW9mIGUsIiIpKX1yZXR1cm4gdD1XcihzLG4sdCxvKSx0LmVsZW1lbnRUeXBlPWUsdC50eXBlPXIsdC5sYW5lcz1pLHR9ZnVuY3Rpb24gRmEoZSx0LG4scil7cmV0dXJuIGU9V3IoNyxlLHIsdCksZS5sYW5lcz1uLGV9ZnVuY3Rpb24geWcoZSx0LG4scil7cmV0dXJuIGU9V3IoMjIsZSxyLHQpLGUuZWxlbWVudFR5cGU9JE8sZS5sYW5lcz1uLGUuc3RhdGVOb2RlPXtpc0hpZGRlbjohMX0sZX1mdW5jdGlvbiBmeShlLHQsbil7cmV0dXJuIGU9V3IoNixlLG51bGwsdCksZS5sYW5lcz1uLGV9ZnVuY3Rpb24gcHkoZSx0LG4pe3JldHVybiB0PVdyKDQsZS5jaGlsZHJlbiE9PW51bGw/ZS5jaGlsZHJlbjpbXSxlLmtleSx0KSx0LmxhbmVzPW4sdC5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86ZS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmUuaW1wbGVtZW50YXRpb259LHR9ZnVuY3Rpb24gZ0woZSx0LG4scixvKXt0aGlzLnRhZz10LHRoaXMuY29udGFpbmVySW5mbz1lLHRoaXMuZmluaXNoZWRXb3JrPXRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsLHRoaXMudGltZW91dEhhbmRsZT0tMSx0aGlzLmNhbGxiYWNrTm9kZT10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT0wLHRoaXMuZXZlbnRUaW1lcz1xdigwKSx0aGlzLmV4cGlyYXRpb25UaW1lcz1xdigtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wLHRoaXMuZW50YW5nbGVtZW50cz1xdigwKSx0aGlzLmlkZW50aWZpZXJQcmVmaXg9cix0aGlzLm9uUmVjb3ZlcmFibGVFcnJvcj1vLHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1udWxsfWZ1bmN0aW9uIGYxKGUsdCxuLHIsbyxpLHMsYSxsKXtyZXR1cm4gZT1uZXcgZ0woZSx0LG4sYSxsKSx0PT09MT8odD0xLGk9PT0hMCYmKHR8PTgpKTp0PTAsaT1XcigzLG51bGwsbnVsbCx0KSxlLmN1cnJlbnQ9aSxpLnN0YXRlTm9kZT1lLGkubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDpuLGNhY2hlOm51bGwsdHJhbnNpdGlvbnM6bnVsbCxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOm51bGx9LFliKGkpLGV9ZnVuY3Rpb24gdkwoZSx0LG4pe3ZhciByPTM8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO3JldHVybnskJHR5cGVvZjp0YyxrZXk6cj09bnVsbD9udWxsOiIiK3IsY2hpbGRyZW46ZSxjb250YWluZXJJbmZvOnQsaW1wbGVtZW50YXRpb246bn19ZnVuY3Rpb24gXzIoZSl7aWYoIWUpcmV0dXJuIHFzO2U9ZS5fcmVhY3RJbnRlcm5hbHM7ZTp7aWYodmwoZSkhPT1lfHxlLnRhZyE9PTEpdGhyb3cgRXJyb3IoSCgxNzApKTt2YXIgdD1lO2Rve3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnQ9dC5zdGF0ZU5vZGUuY29udGV4dDticmVhayBlO2Nhc2UgMTppZihscih0LnR5cGUpKXt0PXQuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGV9fXQ9dC5yZXR1cm59d2hpbGUodCE9PW51bGwpO3Rocm93IEVycm9yKEgoMTcxKSl9aWYoZS50YWc9PT0xKXt2YXIgbj1lLnR5cGU7aWYobHIobikpcmV0dXJuIEVUKGUsbix0KX1yZXR1cm4gdH1mdW5jdGlvbiBDMihlLHQsbixyLG8saSxzLGEsbCl7cmV0dXJuIGU9ZjEobixyLCEwLGUsbyxpLHMsYSxsKSxlLmNvbnRleHQ9XzIobnVsbCksbj1lLmN1cnJlbnQscj1XbigpLG89THMobiksaT1PaShyLG8pLGkuY2FsbGJhY2s9dD8/bnVsbCxEcyhuLGksbyksZS5jdXJyZW50LmxhbmVzPW8scWYoZSxvLHIpLGNyKGUsciksZX1mdW5jdGlvbiB4ZyhlLHQsbixyKXt2YXIgbz10LmN1cnJlbnQsaT1XbigpLHM9THMobyk7cmV0dXJuIG49XzIobiksdC5jb250ZXh0PT09bnVsbD90LmNvbnRleHQ9bjp0LnBlbmRpbmdDb250ZXh0PW4sdD1PaShpLHMpLHQucGF5bG9hZD17ZWxlbWVudDplfSxyPXI9PT12b2lkIDA/bnVsbDpyLHIhPT1udWxsJiYodC5jYWxsYmFjaz1yKSxlPURzKG8sdCxzKSxlIT09bnVsbCYmKENvKGUsbyxzLGkpLGNoKGUsbyxzKSksc31mdW5jdGlvbiBvbShlKXtpZihlPWUuY3VycmVudCwhZS5jaGlsZClyZXR1cm4gbnVsbDtzd2l0Y2goZS5jaGlsZC50YWcpe2Nhc2UgNTpyZXR1cm4gZS5jaGlsZC5zdGF0ZU5vZGU7ZGVmYXVsdDpyZXR1cm4gZS5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIFJrKGUsdCl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe3ZhciBuPWUucmV0cnlMYW5lO2UucmV0cnlMYW5lPW4hPT0wJiZuPHQ/bjp0fX1mdW5jdGlvbiBwMShlLHQpe1JrKGUsdCksKGU9ZS5hbHRlcm5hdGUpJiZSayhlLHQpfWZ1bmN0aW9uIHlMKCl7cmV0dXJuIG51bGx9dmFyIE8yPXR5cGVvZiByZXBvcnRFcnJvcj09ImZ1bmN0aW9uIj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfTtmdW5jdGlvbiBoMShlKXt0aGlzLl9pbnRlcm5hbFJvb3Q9ZX1iZy5wcm90b3R5cGUucmVuZGVyPWgxLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKHQ9PT1udWxsKXRocm93IEVycm9yKEgoNDA5KSk7eGcoZSx0LG51bGwsbnVsbCl9O2JnLnByb3RvdHlwZS51bm1vdW50PWgxLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKGUhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgdD1lLmNvbnRhaW5lckluZm87WmEoZnVuY3Rpb24oKXt4ZyhudWxsLGUsbnVsbCxudWxsKX0pLHRbUmldPW51bGx9fTtmdW5jdGlvbiBiZyhlKXt0aGlzLl9pbnRlcm5hbFJvb3Q9ZX1iZy5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9clQoKTtlPXtibG9ja2VkT246bnVsbCx0YXJnZXQ6ZSxwcmlvcml0eTp0fTtmb3IodmFyIG49MDtuPHdzLmxlbmd0aCYmdCE9PTAmJnQ8d3Nbbl0ucHJpb3JpdHk7bisrKTt3cy5zcGxpY2UobiwwLGUpLG49PT0wJiZpVChlKX19O2Z1bmN0aW9uIG0xKGUpe3JldHVybiEoIWV8fGUubm9kZVR5cGUhPT0xJiZlLm5vZGVUeXBlIT09OSYmZS5ub2RlVHlwZSE9PTExKX1mdW5jdGlvbiB3ZyhlKXtyZXR1cm4hKCFlfHxlLm5vZGVUeXBlIT09MSYmZS5ub2RlVHlwZSE9PTkmJmUubm9kZVR5cGUhPT0xMSYmKGUubm9kZVR5cGUhPT04fHxlLm5vZGVWYWx1ZSE9PSIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIikpfWZ1bmN0aW9uIE5rKCl7fWZ1bmN0aW9uIHhMKGUsdCxuLHIsbyl7aWYobyl7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciBpPXI7cj1mdW5jdGlvbigpe3ZhciBjPW9tKHMpO2kuY2FsbChjKX19dmFyIHM9QzIodCxyLGUsMCxudWxsLCExLCExLCIiLE5rKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPXMsZVtSaV09cy5jdXJyZW50LEtkKGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZTplKSxaYSgpLHN9Zm9yKDtvPWUubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKG8pO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgYT1yO3I9ZnVuY3Rpb24oKXt2YXIgYz1vbShsKTthLmNhbGwoYyl9fXZhciBsPWYxKGUsMCwhMSxudWxsLG51bGwsITEsITEsIiIsTmspO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI9bCxlW1JpXT1sLmN1cnJlbnQsS2QoZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLFphKGZ1bmN0aW9uKCl7eGcodCxsLG4scil9KSxsfWZ1bmN0aW9uIFNnKGUsdCxuLHIsbyl7dmFyIGk9bi5fcmVhY3RSb290Q29udGFpbmVyO2lmKGkpe3ZhciBzPWk7aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpe3ZhciBhPW87bz1mdW5jdGlvbigpe3ZhciBsPW9tKHMpO2EuY2FsbChsKX19eGcodCxzLGUsbyl9ZWxzZSBzPXhMKG4sdCxlLG8scik7cmV0dXJuIG9tKHMpfXRUPWZ1bmN0aW9uKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAzOnZhciB0PWUuc3RhdGVOb2RlO2lmKHQuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7dmFyIG49S3UodC5wZW5kaW5nTGFuZXMpO24hPT0wJiYoQWIodCxufDEpLGNyKHQsRnQoKSksIShYZSY2KSYmKExjPUZ0KCkrNTAwLGxhKCkpKX1icmVhaztjYXNlIDEzOlphKGZ1bmN0aW9uKCl7dmFyIHI9TmkoZSwxKTtpZihyIT09bnVsbCl7dmFyIG89V24oKTtDbyhyLGUsMSxvKX19KSxwMShlLDEpfX07RGI9ZnVuY3Rpb24oZSl7aWYoZS50YWc9PT0xMyl7dmFyIHQ9TmkoZSwxMzQyMTc3MjgpO2lmKHQhPT1udWxsKXt2YXIgbj1XbigpO0NvKHQsZSwxMzQyMTc3Mjgsbil9cDEoZSwxMzQyMTc3MjgpfX07blQ9ZnVuY3Rpb24oZSl7aWYoZS50YWc9PT0xMyl7dmFyIHQ9THMoZSksbj1OaShlLHQpO2lmKG4hPT1udWxsKXt2YXIgcj1XbigpO0NvKG4sZSx0LHIpfXAxKGUsdCl9fTtyVD1mdW5jdGlvbigpe3JldHVybiBsdH07b1Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj1sdDt0cnl7cmV0dXJuIGx0PWUsdCgpfWZpbmFsbHl7bHQ9bn19O3kwPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2godCl7Y2FzZSJpbnB1dCI6aWYoZDAoZSxuKSx0PW4ubmFtZSxuLnR5cGU9PT0icmFkaW8iJiZ0IT1udWxsKXtmb3Iobj1lO24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrdCkrJ11bdHlwZT0icmFkaW8iXScpLHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtpZihyIT09ZSYmci5mb3JtPT09ZS5mb3JtKXt2YXIgbz1mZyhyKTtpZighbyl0aHJvdyBFcnJvcihIKDkwKSk7RE8ociksZDAocixvKX19fWJyZWFrO2Nhc2UidGV4dGFyZWEiOkxPKGUsbik7YnJlYWs7Y2FzZSJzZWxlY3QiOnQ9bi52YWx1ZSx0IT1udWxsJiZ2YyhlLCEhbi5tdWx0aXBsZSx0LCExKX19O0hPPWwxO1dPPVphO3ZhciBiTD17dXNpbmdDbGllbnRFbnRyeVBvaW50OiExLEV2ZW50czpbWWYsc2MsZmcsVU8sVk8sbDFdfSxPdT17ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6UGEsYnVuZGxlVHlwZTowLHZlcnNpb246IjE4LjIuMCIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIn0sd0w9e2J1bmRsZVR5cGU6T3UuYnVuZGxlVHlwZSx2ZXJzaW9uOk91LnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTpPdS5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOk91LnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRFcnJvckhhbmRsZXI6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOkJpLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9R08oZSksZT09PW51bGw/bnVsbDplLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6T3UuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fHlMLGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDpudWxsLHNjaGVkdWxlUmVmcmVzaDpudWxsLHNjaGVkdWxlUm9vdDpudWxsLHNldFJlZnJlc2hIYW5kbGVyOm51bGwsZ2V0Q3VycmVudEZpYmVyOm51bGwscmVjb25jaWxlclZlcnNpb246IjE4LjIuMC1uZXh0LTllM2I3NzJiOC0yMDIyMDYwOCJ9O2lmKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX188InUiKXt2YXIganA9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCFqcC5pc0Rpc2FibGVkJiZqcC5zdXBwb3J0c0ZpYmVyKXRyeXtsZz1qcC5pbmplY3Qod0wpLEdvPWpwfWNhdGNoe319UnIuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9Ykw7UnIuY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGUsdCl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGw7aWYoIW0xKHQpKXRocm93IEVycm9yKEgoMjAwKSk7cmV0dXJuIHZMKGUsdCxudWxsLG4pfTtSci5jcmVhdGVSb290PWZ1bmN0aW9uKGUsdCl7aWYoIW0xKGUpKXRocm93IEVycm9yKEgoMjk5KSk7dmFyIG49ITEscj0iIixvPU8yO3JldHVybiB0IT1udWxsJiYodC51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihuPSEwKSx0LmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihyPXQuaWRlbnRpZmllclByZWZpeCksdC5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihvPXQub25SZWNvdmVyYWJsZUVycm9yKSksdD1mMShlLDEsITEsbnVsbCxudWxsLG4sITEscixvKSxlW1JpXT10LmN1cnJlbnQsS2QoZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLG5ldyBoMSh0KX07UnIuZmluZERPTU5vZGU9ZnVuY3Rpb24oZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihlLm5vZGVUeXBlPT09MSlyZXR1cm4gZTt2YXIgdD1lLl9yZWFjdEludGVybmFscztpZih0PT09dm9pZCAwKXRocm93IHR5cGVvZiBlLnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihIKDE4OCkpOihlPU9iamVjdC5rZXlzKGUpLmpvaW4oIiwiKSxFcnJvcihIKDI2OCxlKSkpO3JldHVybiBlPUdPKHQpLGU9ZT09PW51bGw/bnVsbDplLnN0YXRlTm9kZSxlfTtSci5mbHVzaFN5bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFphKGUpfTtSci5oeWRyYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighd2codCkpdGhyb3cgRXJyb3IoSCgyMDApKTtyZXR1cm4gU2cobnVsbCxlLHQsITAsbil9O1JyLmh5ZHJhdGVSb290PWZ1bmN0aW9uKGUsdCxuKXtpZighbTEoZSkpdGhyb3cgRXJyb3IoSCg0MDUpKTt2YXIgcj1uIT1udWxsJiZuLmh5ZHJhdGVkU291cmNlc3x8bnVsbCxvPSExLGk9IiIscz1PMjtpZihuIT1udWxsJiYobi51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihvPSEwKSxuLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihpPW4uaWRlbnRpZmllclByZWZpeCksbi5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihzPW4ub25SZWNvdmVyYWJsZUVycm9yKSksdD1DMih0LG51bGwsZSwxLG4/P251bGwsbywhMSxpLHMpLGVbUmldPXQuY3VycmVudCxLZChlKSxyKWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspbj1yW2VdLG89bi5fZ2V0VmVyc2lvbixvPW8obi5fc291cmNlKSx0Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9PW51bGw/dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtuLG9dOnQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG4sbyk7cmV0dXJuIG5ldyBiZyh0KX07UnIucmVuZGVyPWZ1bmN0aW9uKGUsdCxuKXtpZighd2codCkpdGhyb3cgRXJyb3IoSCgyMDApKTtyZXR1cm4gU2cobnVsbCxlLHQsITEsbil9O1JyLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oZSl7aWYoIXdnKGUpKXRocm93IEVycm9yKEgoNDApKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPyhaYShmdW5jdGlvbigpe1NnKG51bGwsbnVsbCxlLCExLGZ1bmN0aW9uKCl7ZS5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsZVtSaV09bnVsbH0pfSksITApOiExfTtSci51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1sMTtSci51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihlLHQsbixyKXtpZighd2cobikpdGhyb3cgRXJyb3IoSCgyMDApKTtpZihlPT1udWxsfHxlLl9yZWFjdEludGVybmFscz09PXZvaWQgMCl0aHJvdyBFcnJvcihIKDM4KSk7cmV0dXJuIFNnKGUsdCxuLCExLHIpfTtSci52ZXJzaW9uPSIxOC4yLjAtbmV4dC05ZTNiNzcyYjgtMjAyMjA2MDgiO2Z1bmN0aW9uIFQyKCl7aWYoISh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fPiJ1Inx8dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSE9ImZ1bmN0aW9uIikpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShUMil9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19VDIoKSxDTy5leHBvcnRzPVJyO3ZhciAkcj1DTy5leHBvcnRzO2NvbnN0IFAyPXNpKCRyKSxTTD1nTyh7X19wcm90b19fOm51bGwsZGVmYXVsdDpQMn0sWyRyXSk7dmFyICRrPSRyO3lkLmNyZWF0ZVJvb3Q9JGsuY3JlYXRlUm9vdCx5ZC5oeWRyYXRlUm9vdD0kay5oeWRyYXRlUm9vdDt2YXIgTTI9e2V4cG9ydHM6e319LGtnPXt9Oy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIGtMPWgsRUw9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLF9MPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksQ0w9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxPTD1rTC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixUTD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIFIyKGUsdCxuKXt2YXIgcixvPXt9LGk9bnVsbCxzPW51bGw7biE9PXZvaWQgMCYmKGk9IiIrbiksdC5rZXkhPT12b2lkIDAmJihpPSIiK3Qua2V5KSx0LnJlZiE9PXZvaWQgMCYmKHM9dC5yZWYpO2ZvcihyIGluIHQpQ0wuY2FsbCh0LHIpJiYhVEwuaGFzT3duUHJvcGVydHkocikmJihvW3JdPXRbcl0pO2lmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihyIGluIHQ9ZS5kZWZhdWx0UHJvcHMsdClvW3JdPT09dm9pZCAwJiYob1tyXT10W3JdKTtyZXR1cm57JCR0eXBlb2Y6RUwsdHlwZTplLGtleTppLHJlZjpzLHByb3BzOm8sX293bmVyOk9MLmN1cnJlbnR9fWtnLkZyYWdtZW50PV9MO2tnLmpzeD1SMjtrZy5qc3hzPVIyO00yLmV4cG9ydHM9a2c7dmFyIGI9TTIuZXhwb3J0cztmdW5jdGlvbiBaMChlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIGcxKGUsdCl7aWYoZSl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBaMChlLHQpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihuPT09Ik9iamVjdCImJmUuY29uc3RydWN0b3ImJihuPWUuY29uc3RydWN0b3IubmFtZSksbj09PSJNYXAifHxuPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20oZSk7aWYobj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gWjAoZSx0KX19ZnVuY3Rpb24gRWcoZSx0KXt2YXIgbj10eXBlb2YgU3ltYm9sPCJ1IiYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChuPWcxKGUpKXx8dCYmZSYmdHlwZW9mIGUubGVuZ3RoPT0ibnVtYmVyIil7biYmKGU9bik7dmFyIHI9MCxvPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpvLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24obCl7dGhyb3cgbH0sZjpvfX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgaT0hMCxzPSExLGE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBsPW4ubmV4dCgpO3JldHVybiBpPWwuZG9uZSxsfSxlOmZ1bmN0aW9uKGwpe3M9ITAsYT1sfSxmOmZ1bmN0aW9uKCl7dHJ5eyFpJiZuLnJldHVybiE9bnVsbCYmbi5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiB2MShlKXtyZXR1cm4gZS5sZW5ndGg+MH12YXIgWmY9T2JqZWN0LmZyZWV6ZSh7a2luZDoib2siLHZhbHVlOnZvaWQgMH0pO2Z1bmN0aW9uIF9uKGUpe3JldHVybiBlPT09dm9pZCAwP1pmOntraW5kOiJvayIsdmFsdWU6ZX19ZnVuY3Rpb24gVnQoZSl7cmV0dXJue2tpbmQ6ImVyciIsZXJyb3I6ZX19ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGU9PT1aZnx8ZS5raW5kPT09Im9rIn1mdW5jdGlvbiBfZyhlKXtyZXR1cm4gZSE9PVpmJiZlLmtpbmQ9PT0iZXJyIn1mdW5jdGlvbiBOMihlKXt2YXIgdD1bXSxuPVtdLHI9RWcoZSksbzt0cnl7Zm9yKHIucygpOyEobz1yLm4oKSkuZG9uZTspe3ZhciBpPW8udmFsdWU7c3UoaSk/dC5wdXNoKGkudmFsdWUpOm4ucHVzaChpLmVycm9yKX19Y2F0Y2gocyl7ci5lKHMpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHYxKG4pP1Z0KG4pOl9uKHQpfWZ1bmN0aW9uIFBMKGUpe3JldHVybiBOMihlKX1mdW5jdGlvbiBNTChlKXt2YXIgdD1bXSxuPUVnKGUpLHI7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgbz1yLnZhbHVlO19nKG8pJiZ0LnB1c2goby5lcnJvcil9fWNhdGNoKGkpe24uZShpKX1maW5hbGx5e24uZigpfXJldHVybiB2MSh0KT9WdCh0KTpaZn1mdW5jdGlvbiB5MShlLHQpe3JldHVybiBmdW5jdGlvbihuKXtmb3IodmFyIHI9X24odCksbz0wO288bi5sZW5ndGgmJnN1KHIpOysrbylyPWUoci52YWx1ZSxuW29dLG8pO3JldHVybiByfX1mdW5jdGlvbiBIcihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQpP19uKGUodC52YWx1ZSkpOnR9fWZ1bmN0aW9uIEphKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gc3UodCk/ZSh0LnZhbHVlKTp0fX1mdW5jdGlvbiBSTChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF9nKHQpP1Z0KGUodC5lcnJvcikpOnR9fWZ1bmN0aW9uIE5MKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKG4pP19uKG4pOlZ0KHQobikpfX12YXIgQ2c9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHN1KHIpP3Qoci52YWx1ZSk/cjpWdChuKHIudmFsdWUpKTpyfX0sYnQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdm9pZE9rOlpmLG9rOl9uLGVycjpWdCxpc09rOnN1LGlzRXJyOl9nLGFsbFQ6TjIsYWxsOlBMLGFsbFY6TUwsZmxhdE1hcFJlZHVjZTp5MSxtYXA6SHIsZmxhdE1hcDpKYSxtYXBFcnI6UkwsZnJvbVByZWRpY2F0ZTpOTCxmaWx0ZXJPckVsc2U6Q2d9KTtmdW5jdGlvbiAkTChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBaMChlKX1mdW5jdGlvbiBBTChlKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmZVtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHxlWyJAQGl0ZXJhdG9yIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gREwoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uICQyKGUpe3JldHVybiAkTChlKXx8QUwoZSl8fGcxKGUpfHxETCgpfWZ1bmN0aW9uIG1lKGUpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIG1lPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxtZShlKX1mdW5jdGlvbiBJTChlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8IWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKG4hPT12b2lkIDApe3ZhciByPW4uY2FsbChlLHR8fCJkZWZhdWx0Iik7aWYodHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKHQ9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBBMihlKXt2YXIgdD1JTChlLCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wiP3Q6U3RyaW5nKHQpfWZ1bmN0aW9uIHBlKGUsdCxuKXtyZXR1cm4gdD1BMih0KSx0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIEFrKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG8pLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gamMoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdIT1udWxsP2FyZ3VtZW50c1t0XTp7fTt0JTI/QWsoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3BlKGUscixuW3JdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkFrKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBMTChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIGpMKGUsdCl7dmFyIG49ZT09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZihuIT1udWxsKXt2YXIgcixvLGkscyxhPVtdLGw9ITAsYz0hMTt0cnl7aWYoaT0obj1uLmNhbGwoZSkpLm5leHQsdD09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2w9ITF9ZWxzZSBmb3IoOyEobD0ocj1pLmNhbGwobikpLmRvbmUpJiYoYS5wdXNoKHIudmFsdWUpLGEubGVuZ3RoIT09dCk7bD0hMCk7fWNhdGNoKHUpe2M9ITAsbz11fWZpbmFsbHl7dHJ5e2lmKCFsJiZuLnJldHVybiE9bnVsbCYmKHM9bi5yZXR1cm4oKSxPYmplY3QocykhPT1zKSlyZXR1cm59ZmluYWxseXtpZihjKXRocm93IG99fXJldHVybiBhfX1mdW5jdGlvbiB6TCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBLbihlLHQpe3JldHVybiBMTChlKXx8akwoZSx0KXx8ZzEoZSx0KXx8ekwoKX1mdW5jdGlvbiBubihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIERrKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxBMihyLmtleSkscil9fWZ1bmN0aW9uIHJuKGUsdCxuKXtyZXR1cm4gdCYmRGsoZS5wcm90b3R5cGUsdCksbiYmRGsoZSxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGltKGUpe3JldHVybiBpbT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihuKXtyZXR1cm4gbi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuKX0saW0oZSl9ZnVuY3Rpb24gRDIoKXt0cnl7dmFyIGU9IUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpfWNhdGNoe31yZXR1cm4oRDI9ZnVuY3Rpb24oKXtyZXR1cm4hIWV9KSgpfWZ1bmN0aW9uIEkyKGUpe2lmKGU9PT12b2lkIDApdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBGTChlLHQpe2lmKHQmJih0eXBlb2YgdD09Im9iamVjdCJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24iKSlyZXR1cm4gdDtpZih0IT09dm9pZCAwKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIEkyKGUpfWZ1bmN0aW9uIEFyKGUsdCxuKXtyZXR1cm4gdD1pbSh0KSxGTChlLEQyKCk/UmVmbGVjdC5jb25zdHJ1Y3QodCxufHxbXSxpbShlKS5jb25zdHJ1Y3Rvcik6dC5hcHBseShlLG4pKX1mdW5jdGlvbiBKMChlLHQpe3JldHVybiBKMD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihyLG8pe3JldHVybiByLl9fcHJvdG9fXz1vLHJ9LEowKGUsdCl9ZnVuY3Rpb24gRHIoZSx0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmdCE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmSjAoZSx0KX12YXIgSXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bm4odGhpcyxlKX1yZXR1cm4gcm4oZSxbe2tleToiYXBwZW5kVmFsaWRhdGlvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihuLHIsbyxpKXtyZXR1cm4gbj8obltyXT9uW3JdLnB1c2goe21lc3NhZ2U6byx2YWx1ZTppfSk6bltyXT1be21lc3NhZ2U6byx2YWx1ZTppfV0sbik6cGUoe30scixbe21lc3NhZ2U6byx2YWx1ZTppfV0pfX1dKSxlfSgpLFRkPVN5bWJvbCgiR2V0U2NoZW1hIiksSG49U3ltYm9sKCJQYXRoIiksWHQ9U3ltYm9sKCJHZXRTb3VyY2UiKTtmdW5jdGlvbiBCTChlKXtyZXR1cm4gZVtUZF19dmFyIHgxPXJuKGZ1bmN0aW9uIGUodCl7bm4odGhpcyxlKSx0aGlzLnNwYW49dH0pLFVMPWZ1bmN0aW9uKGUpe0RyKHQsZSk7ZnVuY3Rpb24gdChuLHIpe3ZhciBvO3JldHVybiBubih0aGlzLHQpLG89QXIodGhpcyx0LFtyXSkscGUoSTIobyksInR5cGUiLCJTeW0iKSxvLnZhbHVlPW4sb31yZXR1cm4gcm4odCxbe2tleToidHJhbnNwaWxlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfX1dKSx0fSh4MSk7bmV3IFVMKCIoKSIpO3ZhciBtbj0iX3R5cGUiLENuPSJfcmVmIixJaz0iX3RhZyIsVkw9ZnVuY3Rpb24oZSl7RHIodCxlKTtmdW5jdGlvbiB0KG4pe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBubih0aGlzLHQpLHI9QXIodGhpcyx0KSxyLm9wdGlvbnM9bixyLm9wdD1vLHJ9cmV0dXJuIHJuKHQsW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihyLG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTpvPT1udWxsP3BlKHt9LHIsW3ttZXNzYWdlOiJOb24tb3B0aW9uYWwgZmlsZSB3YXMgbnVsbCBvciB1bmRlZmluZWQuIix2YWx1ZTpvfV0pOnR5cGVvZiBvW0NuXSE9InN0cmluZyI/cGUoe30scixbe21lc3NhZ2U6IkZpbGUgZGlkIG5vdCBoYXZlIGEgZmlsZSByZWZlcmVuY2Ugc3RyaW5nLiBHb3Q6ICIuY29uY2F0KG1lKG9bQ25dKSksdmFsdWU6b31dKTpvW21uXSE9PSJmaWxlIj9wZSh7fSxyLFt7bWVzc2FnZToiRmlsZSBkaWQgbm90IGhhdmUgdGhlIHZhbGlkIGZpbGUgZXh0ZW5zaW9uIHR5cGUuIEdvdDogIi5jb25jYXQob1ttbl0pLHZhbHVlOm99XSk6by5tZXRhZGF0YT9wZSh7fSxyLFt7bWVzc2FnZToiRm91bmQgbWV0YWRhdGEsIGJ1dCBpdCBjb3VsZCBub3QgYmUgdmFsaWRhdGVkLiBGaWxlIG1ldGFkYXRhIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdGhlIHJlcXVpcmVkIHByb3BzOiB3aWR0aCAocG9zaXRpdmUgbnVtYmVyKSwgaGVpZ2h0IChwb3NpdGl2ZSBudW1iZXIpIGFuZCBzaGEyNTYgKHN0cmluZyBvZiBsZW5ndGggNjQgb2YgdGhlIGJhc2UxNiBoYXNoKS4iLHZhbHVlOm8sZml4ZXM6WyJmaWxlOmNoZWNrLW1ldGFkYXRhIl19XSk6cGUoe30scixbe21lc3NhZ2U6Ik1pc3NpbmcgRmlsZSBtZXRhZGF0YS4iLHZhbHVlOm8sZml4ZXM6WyJmaWxlOmFkZC1tZXRhZGF0YSJdfV0pfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5vcHQmJnI9PW51bGw/ITA6KHI9PW51bGw/dm9pZCAwOnJbQ25dKT09PSJmaWxlIiYmKHI9PW51bGw/dm9pZCAwOnJbbW5dKT09PSJmaWxlIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJmaWxlIixvcHRpb25zOnRoaXMub3B0aW9ucyxvcHQ6dGhpcy5vcHR9fX1dKSx0fShJciksSEw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBWTCh0KX07ZnVuY3Rpb24gTDIoZSl7dmFyIHQsbjtpZighZVtDbl0uc3RhcnRzV2l0aCgiL3B1YmxpYyIpKXt2YXIgcixvO3JldHVybnt1cmw6ZVtDbl0rKChyPWUubWV0YWRhdGEpIT09bnVsbCYmciE9PXZvaWQgMCYmci5zaGEyNTY/Ij9zaGEyNTY9Ii5jb25jYXQoKG89ZS5tZXRhZGF0YSk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLnNoYTI1Nik6IiIpLG1ldGFkYXRhOmUubWV0YWRhdGF9fXJldHVybnt1cmw6ZVtDbl0uc2xpY2UoNykrKCh0PWUubWV0YWRhdGEpIT09bnVsbCYmdCE9PXZvaWQgMCYmdC5zaGEyNTY/Ij9zaGEyNTY9Ii5jb25jYXQoKG49ZS5tZXRhZGF0YSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnNoYTI1Nik6IiIpLG1ldGFkYXRhOmUubWV0YWRhdGF9fWZ1bmN0aW9uIGoyKGUpe3JldHVybiBtZShlKT09PSJvYmplY3QiJiZlIT09bnVsbCYmZSE9PXZvaWQgMCYmKCJ2YWwiaW4gZXx8InZhbFBhdGgiaW4gZSl9ZnVuY3Rpb24gV0woZSl7cmV0dXJuIG1lKGUpPT09Im9iamVjdCImJmUhPT1udWxsJiZlIT09dm9pZCAwJiZIbiBpbiBlJiYidmFsImluIGV9ZnVuY3Rpb24gejIoZSl7cmV0dXJuIGVbSG5dfWZ1bmN0aW9uIEtMKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfWZ1bmN0aW9uIExrKGUsdCxuKXtyZXR1cm4gdD9sbihlKGxuKHQsbikpKTpsbih0LG4pfWZ1bmN0aW9uIHpzKGUpe3JldHVybiBtZShlKT09PSJvYmplY3QiJiZlIT09bnVsbCYmKFh0IGluIGV8fEhuIGluIGUpfWZ1bmN0aW9uIGxuKGUsdCxuKXtpZihtZShlKT09PSJvYmplY3QiKXtpZih6cyhlKSlyZXR1cm4gZTtpZihqMihlKSlyZXR1cm4gbG4oZS52YWwsZS52YWxQYXRoKX1pZihlJiZlW0NuXSYmZVttbl09PT0iZmlsZSIpe3ZhciByPWVbQ25dO2lmKHR5cGVvZiByIT0ic3RyaW5nIil0aHJvdyBFcnJvcigiSW52YWxpZCBmaWxlIHJlZjogIityKTtyZXR1cm4gbG4oTDIoZSksdCxuKX1zd2l0Y2gobWUoZSkpe2Nhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjp0aHJvdyBFcnJvcigiSW52YWxpZCBzZWxlY3RvciB0eXBlOiAiLmNvbmNhdChtZShlKSwiOiAiKS5jb25jYXQoZSkpO2Nhc2Uib2JqZWN0IjppZihlIT09bnVsbClyZXR1cm4gbmV3IFByb3h5KGUse2hhczpmdW5jdGlvbihpLHMpe3JldHVybiBzPT09WHR8fHM9PT1Ibnx8cz09PSJhbmRUaGVuInx8cz09PVRkPyEwOnMgaW4gaX0sZ2V0OmZ1bmN0aW9uKGkscyl7aWYocz09PVh0KXJldHVybiBlO2lmKHM9PT1IbilyZXR1cm4gdDtpZihzPT09VGQpcmV0dXJuIG47aWYocz09PSJhbmRUaGVuIilyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIExrKGwsZSx0KX07aWYoQXJyYXkuaXNBcnJheShpKSl7aWYocz09PSJmaWx0ZXIiKXJldHVybiBmdW5jdGlvbihsKXt2YXIgYz1pLm1hcChmdW5jdGlvbih1LGQpe3JldHVybiBsbih1LEtyKHQsZCksbj09bnVsbD92b2lkIDA6bi5pdGVtKX0pLmZpbHRlcihmdW5jdGlvbih1KXtyZXR1cm4gbCYmbCBpbnN0YW5jZW9mIElyP2wuYXNzZXJ0KGprKHUpKTpqayhsKHUpKX0pO3JldHVybiBsbihjLHQsbil9O2lmKHM9PT0ibWFwIilyZXR1cm4gZnVuY3Rpb24obCl7dmFyIGM9aS5tYXAoZnVuY3Rpb24odSxkKXt2YXIgZj1sKGxuKHUsS3IodCxkKSxuPT1udWxsP3ZvaWQgMDpuLml0ZW0pLGxuKGQpKTtyZXR1cm4genMoZik/ZjpsbihmKX0pO3JldHVybiBsbihjLHQsbil9fWlmKEFycmF5LmlzQXJyYXkoaSkmJnM9PT0ibGVuZ3RoIilyZXR1cm4gbG4oaS5sZW5ndGgpO3ZhciBhPVJlZmxlY3QuZ2V0KGkscyk7cmV0dXJuIEtMKGUscyk/TnVtYmVyLmlzTmFOKE51bWJlcihzKSk/bG4oYSxLcih0LHMpLG49PW51bGw/dm9pZCAwOm4uaXRlbXNbc10pOmxuKGEsS3IodCxOdW1iZXIocykpLG49PW51bGw/dm9pZCAwOm4uaXRlbSk6YX19KTtkZWZhdWx0OnJldHVybiBwZShwZShwZSh7ZXE6ZnVuY3Rpb24oaSl7dmFyIHM9aTtpZih6cyhpKSYmKHM9aVtYdF0scyBpbnN0YW5jZW9mIHgxKSl0aHJvdyBFcnJvcigiVE9ETzogQ2Fubm90IGV2YWx1YXRlIGVxdWFsaXR5IHdpdGggYW4gRXhwciIpO3JldHVybiBsbihlPT09cyx2b2lkIDApfSxhbmRUaGVuOmZ1bmN0aW9uKGkpe3JldHVybiBMayhpLGU9PT12b2lkIDA/bnVsbDplLHQpfX0sWHQsZT09PXZvaWQgMD9udWxsOmUpLEhuLHQpLFRkLG4pfX1mdW5jdGlvbiBLcihlLHQpe2lmKG1lKHQpPT09InN5bWJvbCIpdGhyb3cgRXJyb3IoIkNhbm5vdCBjcmVhdGUgdmFsIHBhdGggb2YgYXJyYXkgaXRlbSB3aXRoIHN5bWJvbCBwcm9wOiAiLmNvbmNhdCh0LnRvU3RyaW5nKCkpKTtyZXR1cm4gZSE9PXZvaWQgMD8iIi5jb25jYXQoZSwiLiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0KSk6dm9pZCAwfWZ1bmN0aW9uIGprKGUpe2lmKG1lKGUpPT09Im9iamVjdCImJihYdCBpbiBlfHxIbiBpbiBlKSl7dmFyIHQ9ZVtYdF07cmV0dXJuIHR9cmV0dXJuIGV9dmFyIGIxPWZ1bmN0aW9uKGUpe0RyKHQsZSk7ZnVuY3Rpb24gdChuKXt2YXIgcixvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gbm4odGhpcyx0KSxyPUFyKHRoaXMsdCksci5pdGVtcz1uLHIub3B0PW8scn1yZXR1cm4gcm4odCxbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKHIsbyl7dmFyIGk9dGhpcyxzPSExO3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTptZShvKSE9PSJvYmplY3QiP3BlKHt9LHIsW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICciLmNvbmNhdChtZShvKSwiJyIpfV0pOkFycmF5LmlzQXJyYXkobyk/cGUoe30scixbe21lc3NhZ2U6IkV4cGVjdGVkICdvYmplY3QnLCBnb3QgJ2FycmF5JyJ9XSk6KE9iamVjdC5lbnRyaWVzKHRoaXMuaXRlbXMpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGw9S24oYSwyKSxjPWxbMF0sdT1sWzFdLGQ9S3IocixjKTtpZighZClzPWkuYXBwZW5kVmFsaWRhdGlvbkVycm9yKHMsciwiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghciYmdHlwZW9mIHI9PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6ciwiIGF0IGtleSAiKS5jb25jYXQoYyksbyk7ZWxzZXt2YXIgZj11LnZhbGlkYXRlKGQsb1tjXSk7ZiYmcz9zPWpjKGpjKHt9LGYpLHMpOmYmJihzPWYpfX0pLHMpfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihyKXtpZih0aGlzLm9wdCYmcj09bnVsbClyZXR1cm4hMDtpZighcilyZXR1cm4hMTtmb3IodmFyIG89MCxpPU9iamVjdC5lbnRyaWVzKHRoaXMuaXRlbXMpO288aS5sZW5ndGg7bysrKXt2YXIgcz1LbihpW29dLDIpLGE9c1swXSxsPXNbMV07aWYoIWwuYXNzZXJ0KHJbYV0pKXJldHVybiExfXJldHVybiBtZShyKT09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShyKX19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLml0ZW1zLCEwKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToib2JqZWN0IixpdGVtczpPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModGhpcy5pdGVtcykubWFwKGZ1bmN0aW9uKHIpe3ZhciBvPUtuKHIsMiksaT1vWzBdLHM9b1sxXTtyZXR1cm5baSxzLnNlcmlhbGl6ZSgpXX0pKSxvcHQ6dGhpcy5vcHR9fX1dKSx0fShJcikscUw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBiMSh0KX0sRjI9ZnVuY3Rpb24oZSl7RHIodCxlKTtmdW5jdGlvbiB0KG4pe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBubih0aGlzLHQpLHI9QXIodGhpcyx0KSxyLml0ZW09bixyLm9wdD1vLHJ9cmV0dXJuIHJuKHQsW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihyLG8pe3ZhciBpPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6bWUobykhPT0ib2JqZWN0Inx8IUFycmF5LmlzQXJyYXkobyk/cGUoe30scixbe21lc3NhZ2U6IkV4cGVjdGVkICdhcnJheScsIGdvdCAnIi5jb25jYXQobWUobyksIiciKX1dKTooby5mb3JFYWNoKGZ1bmN0aW9uKGEsbCl7dmFyIGM9S3IocixsKTtpZighYylzPWkuYXBwZW5kVmFsaWRhdGlvbkVycm9yKHMsciwiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghciYmdHlwZW9mIHI9PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6ciwiIGF0IGluZGV4ICIpLmNvbmNhdChsKSxvKTtlbHNle3ZhciB1PWkuaXRlbS52YWxpZGF0ZShjLGEpO3UmJnM/cz1qYyhqYyh7fSx1KSxzKTp1JiYocz11KX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7aWYodGhpcy5vcHQmJnI9PW51bGwpcmV0dXJuITA7aWYoIXIpcmV0dXJuITE7dmFyIG89RWcociksaTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBzPWkudmFsdWU7aWYoIXRoaXMuaXRlbS5hc3NlcnQocykpcmV0dXJuITF9fWNhdGNoKGEpe28uZShhKX1maW5hbGx5e28uZigpfXJldHVybiBtZShyKT09PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KHIpfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMuaXRlbSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImFycmF5IixpdGVtOnRoaXMuaXRlbS5zZXJpYWxpemUoKSxvcHQ6dGhpcy5vcHR9fX1dKSx0fShJciksR0w9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGMih0KX0sUTA9ZnVuY3Rpb24oZSl7RHIodCxlKTtmdW5jdGlvbiB0KG4pe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBubih0aGlzLHQpLHI9QXIodGhpcyx0KSxyLnZhbHVlPW4sci5vcHQ9byxyfXJldHVybiBybih0LFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24ocixvKXtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6dHlwZW9mIG8hPSJzdHJpbmciP3BlKHt9LHIsW3ttZXNzYWdlOiJFeHBlY3RlZCAnc3RyaW5nJywgZ290ICciLmNvbmNhdChtZShvKSwiJyIpLHZhbHVlOm99XSk6byE9PXRoaXMudmFsdWU/cGUoe30scixbe21lc3NhZ2U6IkV4cGVjdGVkIGxpdGVyYWwgJyIuY29uY2F0KHRoaXMudmFsdWUsIicsIGdvdCAnIikuY29uY2F0KG8sIiciKSx2YWx1ZTpvfV0pOiExfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5vcHQmJnI9PW51bGw/ITA6dHlwZW9mIHI9PSJzdHJpbmcifX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMudmFsdWUsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJsaXRlcmFsIix2YWx1ZTp0aGlzLnZhbHVlLG9wdDp0aGlzLm9wdH19fV0pLHR9KElyKSxZTD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFEwKHQpfSxCMj1mdW5jdGlvbihlKXtEcih0LGUpO2Z1bmN0aW9uIHQobixyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMTtyZXR1cm4gbm4odGhpcyx0KSxvPUFyKHRoaXMsdCksby5rZXk9bixvLml0ZW1zPXIsby5vcHQ9aSxvfXJldHVybiBybih0LFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24ocixvKXt2YXIgaT1vLHM9ITE7aWYodGhpcy5vcHQmJmk9PW51bGwpcmV0dXJuITE7aWYoIXRoaXMua2V5KXJldHVybiBwZSh7fSxyLFt7bWVzc2FnZToiTWlzc2luZyByZXF1aXJlZCBmaXJzdCBhcmd1bWVudCBpbiB1bmlvbiJ9XSk7dmFyIGE9dGhpcy5rZXk7aWYoIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykpcmV0dXJuIHBlKHt9LHIsW3ttZXNzYWdlOiJBIHVuaW9uIHNjaGVtYSBtdXN0IHRha2UgbW9yZSB0aGFuIDEgc2NoZW1hIGFyZ3VtZW50cyIsZmF0YWw6ITB9XSk7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtpZih0aGlzLml0ZW1zLnNvbWUoZnVuY3Rpb24oUCl7cmV0dXJuIShQIGluc3RhbmNlb2YgYjEpfSkpcmV0dXJuIHBlKHt9LHIsW3ttZXNzYWdlOiJLZXkgaXMgYSBzdHJpbmcsIHNvIGFsbCBzY2hlbWEgaXRlbXMgbXVzdCBiZSBvYmplY3RzIixmYXRhbDohMH1dKTt2YXIgbD10aGlzLml0ZW1zLGM9bC5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuIFAuc2VyaWFsaXplKCl9KSx1PWMuZmlsdGVyKGZ1bmN0aW9uKFApe3JldHVybiBQLnR5cGUhPT0ib2JqZWN0Inx8UC5pdGVtc1thXS50eXBlIT09ImxpdGVyYWwifSk7aWYodS5sZW5ndGg+MClyZXR1cm4gcGUoe30scixbe21lc3NhZ2U6IkFsbCBzY2hlbWEgaXRlbXMgbXVzdCBiZSBvYmplY3RzIHdpdGggYSBrZXk6ICIuY29uY2F0KGEsIiB0aGF0IGlzIGEgbGl0ZXJhbCBzY2hlbWEuIEZvdW5kOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkodSxudWxsLDIpKSxmYXRhbDohMH1dKTt2YXIgZD1jLGY9ZC5maWx0ZXIoZnVuY3Rpb24oUCl7cmV0dXJuIFAuaXRlbXNbYV0ub3B0fSk7aWYoZi5sZW5ndGg+MSlyZXR1cm4gcGUoe30scixbe21lc3NhZ2U6IlNjaGVtYSBjYW5ub3QgaGF2ZSBhbiBvcHRpb25hbCBrZXlzOiAiLmNvbmNhdChhKSxmYXRhbDohMH1dKTtpZihtZShpKSE9PSJvYmplY3QiKXJldHVybiBwZSh7fSxyLFt7bWVzc2FnZToiRXhwZWN0ZWQgYW4gb2JqZWN0In1dKTt2YXIgcD1pO2lmKHBbYV09PT12b2lkIDApcmV0dXJuIHBlKHt9LHIsW3ttZXNzYWdlOiJNaXNzaW5nIHJlcXVpcmVkIGtleTogIi5jb25jYXQoYSl9XSk7dmFyIG09W10sZz1FZyhkKSx5O3RyeXtmb3IoZy5zKCk7ISh5PWcubigpKS5kb25lOyl7dmFyIHY9eS52YWx1ZSx4PXYuaXRlbXNbYV07aWYoeC50eXBlPT09ImxpdGVyYWwiKWlmKCFtLmluY2x1ZGVzKHgudmFsdWUpKW0ucHVzaCh4LnZhbHVlKTtlbHNlIHJldHVybiBwZSh7fSxyLFt7bWVzc2FnZToiRm91bmQgZHVwbGljYXRlIGtleSBpbiBzY2hlbWE6ICIuY29uY2F0KHgudmFsdWUpLGZhdGFsOiEwfV0pfX1jYXRjaChQKXtnLmUoUCl9ZmluYWxseXtnLmYoKX12YXIgdz1sLmZpbmQoZnVuY3Rpb24oUCl7cmV0dXJuIVAuaXRlbXNbYV0udmFsaWRhdGUocixwW2FdKX0pO2lmKCF3KXt2YXIgaz1LcihyLGEpO2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghciYmdHlwZW9mIHI9PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6ciwiIGF0IGtleSAiKS5jb25jYXQoYSkpO3JldHVybiBwZSh7fSxrLFt7bWVzc2FnZTonSW52YWxpZCBrZXk6ICInLmNvbmNhdChhLCciLiBWYWx1ZSB3YXM6ICInKS5jb25jYXQocFthXSwnIi4gVmFsaWQgdmFsdWVzOiAnKS5jb25jYXQoZC5tYXAoZnVuY3Rpb24oUCl7dmFyIE09UC5pdGVtc1thXTtpZihNLnR5cGU9PT0ibGl0ZXJhbCImJk0udmFsdWUpcmV0dXJuJyInLmNvbmNhdChNLnZhbHVlLCciJyk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBsaXRlcmFsIHNjaGVtYSwgZ290ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KE0sbnVsbCwyKSkpfSkuam9pbigiLCAiKSl9XSl9dmFyIEU9dy52YWxpZGF0ZShyLHApO2lmKEUpcmV0dXJuIEV9ZWxzZSBpZihhIGluc3RhbmNlb2YgUTApe2lmKHRoaXMuaXRlbXMuc29tZShmdW5jdGlvbihQKXtyZXR1cm4hKFAgaW5zdGFuY2VvZiBRMCl9KSlyZXR1cm4gcGUoe30scixbe21lc3NhZ2U6IktleSBpcyBhIGxpdGVyYWwgc2NoZW1hLCBzbyBhbGwgc2NoZW1hIGl0ZW1zIG11c3QgYmUgbGl0ZXJhbHMiLGZhdGFsOiEwfV0pO3ZhciBTPVthXS5jb25jYXQoJDIodGhpcy5pdGVtcykpO2lmKHR5cGVvZiBpPT0ic3RyaW5nIil7dmFyIF89Uy5zb21lKGZ1bmN0aW9uKFApe3JldHVybiFQLnZhbGlkYXRlKHIsaSl9KTtpZighXylyZXR1cm4gcGUoe30scixbe21lc3NhZ2U6IlVuaW9uIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBmb2xsb3dpbmc6ICIuY29uY2F0KFMubWFwKGZ1bmN0aW9uKFApe3JldHVybiciJy5jb25jYXQoUC52YWx1ZSwnIicpfSkuam9pbigiLCAiKSl9XSl9fWVsc2UgcmV0dXJuIHBlKHt9LHIsW3ttZXNzYWdlOiJFeHBlY3RlZCBhIHN0cmluZyBvciBsaXRlcmFsIn1dKTtyZXR1cm4gc319LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7cmV0dXJuITB9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQodGhpcy5rZXksdGhpcy5pdGVtcywhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiB0aGlzLmtleT09InN0cmluZyI/e3R5cGU6InVuaW9uIixrZXk6dGhpcy5rZXksaXRlbXM6dGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIuc2VyaWFsaXplKCl9KSxvcHQ6dGhpcy5vcHR9Ont0eXBlOiJ1bmlvbiIsa2V5OnRoaXMua2V5LnNlcmlhbGl6ZSgpLGl0ZW1zOnRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnNlcmlhbGl6ZSgpfSksb3B0OnRoaXMub3B0fX19XSksdH0oSXIpLFhMPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksbz0xO288bjtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gbmV3IEIyKHQscil9LFUyPWZ1bmN0aW9uKGUpe0RyKHQsZSk7ZnVuY3Rpb24gdChuKXt2YXIgcixvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gbm4odGhpcyx0KSxyPUFyKHRoaXMsdCksci5vcHRpb25zPW4sci5vcHQ9byxyfXJldHVybiBybih0LFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24ocixvKXtyZXR1cm4hMX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7cmV0dXJuITB9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQodGhpcy5vcHRpb25zLCEwKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmljaHRleHQiLG9wdDp0aGlzLm9wdCxvcHRpb25zOnRoaXMub3B0aW9uc319fV0pLHR9KElyKSxaTD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUyKHQ/P3t9KX0sVjI9ZnVuY3Rpb24oZSl7RHIodCxlKTtmdW5jdGlvbiB0KG4pe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBubih0aGlzLHQpLHI9QXIodGhpcyx0KSxyLm9wdGlvbnM9bixyLm9wdD1vLHJ9cmV0dXJuIHJuKHQsW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihyLG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTpvPT1udWxsP3BlKHt9LHIsW3ttZXNzYWdlOiJOb24tb3B0aW9uYWwgaW1hZ2Ugd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIsdmFsdWU6b31dKTp0eXBlb2Ygb1tDbl0hPSJzdHJpbmciP3BlKHt9LHIsW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgYSBmaWxlIHJlZmVyZW5jZSBzdHJpbmcuIEdvdDogIi5jb25jYXQobWUob1tDbl0pKSx2YWx1ZTpvfV0pOm9bbW5dIT09ImZpbGUiP3BlKHt9LHIsW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgdGhlIHZhbGlkIGZpbGUgZXh0ZW5zaW9uIHR5cGUuIEdvdDogIi5jb25jYXQob1ttbl0pLHZhbHVlOm99XSk6by5tZXRhZGF0YT9wZSh7fSxyLFt7bWVzc2FnZToiRm91bmQgbWV0YWRhdGEsIGJ1dCBpdCBjb3VsZCBub3QgYmUgdmFsaWRhdGVkLiBJbWFnZSBtZXRhZGF0YSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHRoZSByZXF1aXJlZCBwcm9wczogd2lkdGggKHBvc2l0aXZlIG51bWJlciksIGhlaWdodCAocG9zaXRpdmUgbnVtYmVyKSBhbmQgc2hhMjU2IChzdHJpbmcgb2YgbGVuZ3RoIDY0IG9mIHRoZSBiYXNlMTYgaGFzaCkuIix2YWx1ZTpvLGZpeGVzOlsiaW1hZ2U6cmVwbGFjZS1tZXRhZGF0YSJdfV0pOnBlKHt9LHIsW3ttZXNzYWdlOiJDb3VsZCBub3QgdmFsaWRhdGUgSW1hZ2UgbWV0YWRhdGEuIix2YWx1ZTpvLGZpeGVzOlsiaW1hZ2U6YWRkLW1ldGFkYXRhIl19XSl9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLm9wdCYmcj09bnVsbD8hMDoocj09bnVsbD92b2lkIDA6cltDbl0pPT09ImltYWdlIiYmKHI9PW51bGw/dm9pZCAwOnJbbW5dKT09PSJmaWxlIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsb3B0aW9uczp0aGlzLm9wdGlvbnMsb3B0OnRoaXMub3B0fX19XSksdH0oSXIpLEpMPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVjIodCl9LEgyPWZ1bmN0aW9uKGUpe0RyKHQsZSk7ZnVuY3Rpb24gdChuKXt2YXIgcixvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gbm4odGhpcyx0KSxyPUFyKHRoaXMsdCksci5pdGVtPW4sci5vcHQ9byxyfXJldHVybiBybih0LFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24ocixvKXt2YXIgaT10aGlzLHM9ITE7cmV0dXJuIHRoaXMub3B0JiZvPT1udWxsPyExOm1lKG8pIT09Im9iamVjdCI/cGUoe30scixbe21lc3NhZ2U6IkV4cGVjdGVkICdvYmplY3QnLCBnb3QgJyIuY29uY2F0KG1lKG8pLCInIil9XSk6QXJyYXkuaXNBcnJheShvKT9wZSh7fSxyLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnYXJyYXknIn1dKTooT2JqZWN0LmVudHJpZXMobykuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgbD1LbihhLDIpLGM9bFswXSx1PWxbMV0sZD1LcihyLGMpO2lmKCFkKXM9aS5hcHBlbmRWYWxpZGF0aW9uRXJyb3IocyxyLCJJbnRlcm5hbCBlcnJvcjogY291bGQgbm90IGNyZWF0ZSBwYXRoIGF0ICIuY29uY2F0KCFyJiZ0eXBlb2Ygcj09InN0cmluZyI/IjxlbXB0eSBzdHJpbmc+IjpyLCIgYXQga2V5ICIpLmNvbmNhdCh1KSxvKTtlbHNle3ZhciBmPWkuaXRlbS52YWxpZGF0ZShkLHUpO2YmJnM/cz1qYyhqYyh7fSxmKSxzKTpmJiYocz1mKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7aWYodGhpcy5vcHQmJnI9PW51bGwpcmV0dXJuITA7aWYoIXIpcmV0dXJuITE7Zm9yKHZhciBvPTAsaT1PYmplY3QuZW50cmllcyhyKTtvPGkubGVuZ3RoO28rKyl7dmFyIHM9S24oaVtvXSwyKSxhPXNbMV07aWYoIXRoaXMuaXRlbS5hc3NlcnQoYSkpcmV0dXJuITF9cmV0dXJuIG1lKHIpPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHIpfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMuaXRlbSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InJlY29yZCIsaXRlbTp0aGlzLml0ZW0uc2VyaWFsaXplKCksb3B0OnRoaXMub3B0fX19XSksdH0oSXIpLFFMPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSDIodCl9O2Z1bmN0aW9uIGU1KGUpe3ZhciB0PWVbWHRdO2lmKHQgaW5zdGFuY2VvZiB4MSl0aHJvdyBFcnJvcigiQ2Fubm90IGdldCByYXcgc291cmNlIG9mIGFuIEV4cHIiKTt2YXIgbj10O3JldHVybiBufWZ1bmN0aW9uIHQ1KGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT09PS0xP1tlLCIiXTpbZS5zbGljZSgwLGUuaW5kZXhPZigiLiIpKSxlLnNsaWNlKGUuaW5kZXhPZigiLiIpKzEpXX1mdW5jdGlvbiBuNShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGIxfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0ib2JqZWN0In1mdW5jdGlvbiByNShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEgyfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0icmVjb3JkIn1mdW5jdGlvbiBvNShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEYyfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0iYXJyYXkifWZ1bmN0aW9uIGk1KGUpe3JldHVybiBlIGluc3RhbmNlb2YgQjJ8fG1lKGUpPT09Im9iamVjdCImJiJ0eXBlImluIGUmJmUudHlwZT09PSJ1bmlvbiJ9ZnVuY3Rpb24gczUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBVMnx8bWUoZSk9PT0ib2JqZWN0IiYmInR5cGUiaW4gZSYmZS50eXBlPT09InJpY2h0ZXh0In1mdW5jdGlvbiBhNShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFYyfHxtZShlKT09PSJvYmplY3QiJiYidHlwZSJpbiBlJiZlLnR5cGU9PT0iaW1hZ2UifWZ1bmN0aW9uIGw1KGUsdCxuKXtmb3IodmFyIHI9VzIoZSksbz0kMihyKSxpPW4scz10LGE9ZnVuY3Rpb24oKXt2YXIgdT1yLnNoaWZ0KCk7aWYodT09PXZvaWQgMCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZCB1bmRlZmluZWQgcGFydCIpO2lmKG81KGkpKXtpZihOdW1iZXIuaXNOYU4oTnVtYmVyKHUpKSl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiBhcnJheSBzY2hlbWEgIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoaSksIiBtdXN0IGhhdmUgYSBudW1iZXIgYXMgcGF0aCwgYnV0IGdvdCAiKS5jb25jYXQodSwiLiBQYXRoOiAiKS5jb25jYXQoZSkpO2lmKG1lKHMpIT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHMpKXRocm93IEVycm9yKCJTY2hlbWEgdHlwZSBlcnJvcjogZXhwZWN0ZWQgc291cmNlIHRvIGJlIHR5cGUgb2YgYXJyYXksIGJ1dCBnb3QgIi5jb25jYXQobWUocykpKTtpZihzW3VdPT09dm9pZCAwKXt2YXIgZDt0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiBhcnJheSBzb3VyY2UgKGxlbmd0aDogIi5jb25jYXQoKGQ9cyk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLmxlbmd0aCwiKSBkaWQgbm90IGhhdmUgaW5kZXggIikuY29uY2F0KHUsIiBmcm9tIHBhdGg6ICIpLmNvbmNhdChlKSl9cz1zW3VdLGk9aS5pdGVtfWVsc2UgaWYocjUoaSkpe2lmKHR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiByZWNvcmQgc2NoZW1hICIuY29uY2F0KGksIiBtdXN0IGhhdmUgcGF0aDogIikuY29uY2F0KHUsIiBhcyBzdHJpbmciKSk7aWYobWUocykhPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkocykpdGhyb3cgRXJyb3IoIlNjaGVtYSB0eXBlIGVycm9yOiBleHBlY3RlZCBzb3VyY2UgdG8gYmUgdHlwZSBvZiByZWNvcmQsIGJ1dCBnb3QgIi5jb25jYXQobWUocykpKTtpZighc1t1XSl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiByZWNvcmQgc291cmNlIGRpZCBub3QgaGF2ZSBrZXkgIi5jb25jYXQodSwiIGZyb20gcGF0aDogIikuY29uY2F0KGUpKTtzPXNbdV0saT1pLml0ZW19ZWxzZSBpZihuNShpKSl7aWYobWUocykhPT0ib2JqZWN0Iil0aHJvdyBFcnJvcigiU2NoZW1hIHR5cGUgZXJyb3I6IGV4cGVjdGVkIHNvdXJjZSB0byBiZSB0eXBlIG9mIG9iamVjdCwgYnV0IGdvdCAiLmNvbmNhdChtZShzKSkpO2lmKCFzW3VdKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IG9iamVjdCBzb3VyY2UgZGlkIG5vdCBoYXZlIGtleSAiLmNvbmNhdCh1LCIgZnJvbSBwYXRoOiAiKS5jb25jYXQoZSkpO3M9c1t1XSxpPWkuaXRlbXNbdV19ZWxzZXtpZihhNShpKSlyZXR1cm57djp7cGF0aDpvLnNsaWNlKDAsby5sZW5ndGgtci5sZW5ndGgtMSkubWFwKGZ1bmN0aW9uKGcpe3JldHVybiBKU09OLnN0cmluZ2lmeShnKX0pLmpvaW4oIi4iKSxzY2hlbWE6aSxzb3VyY2U6c319O2lmKGk1KGkpKXt2YXIgZj1pLmtleTtpZih0eXBlb2YgZiE9InN0cmluZyIpcmV0dXJue3Y6e3BhdGg6by5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIE51bWJlci5pc05hTihOdW1iZXIoZykpP0pTT04uc3RyaW5naWZ5KGcpOmd9KS5qb2luKCIuIiksc2NoZW1hOmksc291cmNlOnN9fTt2YXIgcD1zW2ZdO2lmKCFwKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IHVuaW9uIHNvdXJjZSAiLmNvbmNhdChpLCIgZGlkIG5vdCBoYXZlIHJlcXVpcmVkIGtleSAiKS5jb25jYXQoZiwiIGluIHBhdGg6ICIpLmNvbmNhdChlKSk7dmFyIG09aS5pdGVtcy5maW5kKGZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybihnPT1udWxsfHwoeT1nLml0ZW1zKT09PW51bGx8fHk9PT12b2lkIDB8fCh5PXlbZl0pPT09bnVsbHx8eT09PXZvaWQgMD92b2lkIDA6eS52YWx1ZSk9PT1wfSk7aWYoIW0pdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogdW5pb24gc2NoZW1hICIuY29uY2F0KGksIiBkaWQgbm90IGhhdmUgYSBjaGlsZCBvYmplY3Qgd2l0aCAiKS5jb25jYXQoZiwiIG9mIHZhbHVlICIpLmNvbmNhdChwLCIgaW4gcGF0aDogIikuY29uY2F0KGUpKTtpPW0uaXRlbXNbdV0scz1zW3VdfWVsc2V7aWYoczUoaSkpcmV0dXJue3Y6e3BhdGg6by5zbGljZSgwLG8ubGVuZ3RoLXIubGVuZ3RoLTEpLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZyl9KS5qb2luKCIuIiksc2NoZW1hOmksc291cmNlOnN9fTt0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiAiLmNvbmNhdCh1LCIgcmVzb2x2ZWQgdG8gYW4gdW5leHBlY3RlZCBzY2hlbWEgIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGkpKSl9fX0sbDtyLmxlbmd0aD4wOylpZihsPWEoKSxsKXJldHVybiBsLnY7aWYoci5sZW5ndGg+MCl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiAiLmNvbmNhdChyLmpvaW4oIi4iKSwiIGlzIG5vdCBhIHZhbGlkIHBhdGgiKSk7cmV0dXJue3BhdGg6by5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIE51bWJlci5pc05hTihOdW1iZXIoYykpP0pTT04uc3RyaW5naWZ5KGMpOmN9KS5qb2luKCIuIiksc2NoZW1hOmksc291cmNlOnN9fWZ1bmN0aW9uIFcyKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDspe3ZhciByPSIiO2lmKGVbbl09PT0nIicpe2ZvcihuKys7bjxlLmxlbmd0aCYmZVtuXSE9PSciJzspZVtuXT09PSJcXCImJmVbbisxXT09PSciJz8ocis9JyInLG4rKyk6cis9ZVtuXSxuKys7aWYoZVtuXSE9PSciJyl7dmFyIG87dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0ICgiLmNvbmNhdChKU09OLnN0cmluZ2lmeShlKSwiKTogTWlzc2luZyBjbG9zaW5nIGRvdWJsZSBxdW90ZTogIikuY29uY2F0KChvPWVbbl0pIT09bnVsbCYmbyE9PXZvaWQgMD9vOiJhdCBlbmQgb2Ygc3RyaW5nIiwiIChjaGFyOiAiKS5jb25jYXQobiwiOyBsZW5ndGg6ICIpLmNvbmNhdChlLmxlbmd0aCwiKSIpKX19ZWxzZSBmb3IoO248ZS5sZW5ndGgmJmVbbl0hPT0iLiI7KXIrPWVbbl0sbisrO3IhPT0iIiYmdC5wdXNoKHIpLG4rK31yZXR1cm4gdH12YXIgVHI9cm4oZnVuY3Rpb24gZSh0KXtubih0aGlzLGUpLHRoaXMubWVzc2FnZT10fSksYzU9ZnVuY3Rpb24oZSl7RHIodCxlKTtmdW5jdGlvbiB0KG4pe3ZhciByLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBubih0aGlzLHQpLHI9QXIodGhpcyx0KSxyLm9wdGlvbnM9bixyLm9wdD1vLHJ9cmV0dXJuIHJuKHQsW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihyLG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTp0eXBlb2YgbyE9Im51bWJlciI/cGUoe30scixbe21lc3NhZ2U6IkV4cGVjdGVkICdudW1iZXInLCBnb3QgJyIuY29uY2F0KG1lKG8pLCInIiksdmFsdWU6b31dKTohMX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMub3B0JiZyPT1udWxsPyEwOnR5cGVvZiByPT0ibnVtYmVyIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJudW1iZXIiLG9wdGlvbnM6dGhpcy5vcHRpb25zLG9wdDp0aGlzLm9wdH19fV0pLHR9KElyKSx1NT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGM1KHQpfSxLMj1mdW5jdGlvbihlKXtEcih0LGUpO2Z1bmN0aW9uIHQobil7dmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsaT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITE7cmV0dXJuIG5uKHRoaXMsdCkscj1Bcih0aGlzLHQpLHIub3B0aW9ucz1uLHIub3B0PW8sci5pc1Jhdz1pLHJ9cmV0dXJuIHJuKHQsW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihyLG8pe3ZhciBpLHMsYTtpZih0aGlzLm9wdCYmbz09bnVsbClyZXR1cm4hMTtpZih0eXBlb2YgbyE9InN0cmluZyIpcmV0dXJuIHBlKHt9LHIsW3ttZXNzYWdlOiJFeHBlY3RlZCAnc3RyaW5nJywgZ290ICciLmNvbmNhdChtZShvKSwiJyIpLHZhbHVlOm99XSk7dmFyIGw9W107cmV0dXJuKGk9dGhpcy5vcHRpb25zKSE9PW51bGwmJmkhPT12b2lkIDAmJmkubWF4TGVuZ3RoJiZvLmxlbmd0aD50aGlzLm9wdGlvbnMubWF4TGVuZ3RoJiZsLnB1c2goe21lc3NhZ2U6IkV4cGVjdGVkIHN0cmluZyB0byBiZSBhdCBtb3N0ICIuY29uY2F0KHRoaXMub3B0aW9ucy5tYXhMZW5ndGgsIiBjaGFyYWN0ZXJzIGxvbmcsIGdvdCAiKS5jb25jYXQoby5sZW5ndGgpLHZhbHVlOm99KSwocz10aGlzLm9wdGlvbnMpIT09bnVsbCYmcyE9PXZvaWQgMCYmcy5taW5MZW5ndGgmJm8ubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGgmJmwucHVzaCh7bWVzc2FnZToiRXhwZWN0ZWQgc3RyaW5nIHRvIGJlIGF0IGxlYXN0ICIuY29uY2F0KHRoaXMub3B0aW9ucy5taW5MZW5ndGgsIiBjaGFyYWN0ZXJzIGxvbmcsIGdvdCAiKS5jb25jYXQoby5sZW5ndGgpLHZhbHVlOm99KSwoYT10aGlzLm9wdGlvbnMpIT09bnVsbCYmYSE9PXZvaWQgMCYmYS5yZWdleHAmJiF0aGlzLm9wdGlvbnMucmVnZXhwLnRlc3QobykmJmwucHVzaCh7bWVzc2FnZToiRXhwZWN0ZWQgc3RyaW5nIHRvIG1hdGNoIHJlZyBleHA6ICIuY29uY2F0KHRoaXMub3B0aW9ucy5yZWdleHAudG9TdHJpbmcoKSwiLCBnb3QgJyIpLmNvbmNhdChvLCInIiksdmFsdWU6b30pLGwubGVuZ3RoPjA/cGUoe30scixsKTohMX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMub3B0JiZyPT1udWxsPyEwOnR5cGVvZiByPT0ic3RyaW5nIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLm9wdGlvbnMsITAsdGhpcy5pc1Jhdyl9fSx7a2V5OiJyYXciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMub3B0aW9ucyx0aGlzLm9wdCwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHIsbyxpO3JldHVybnt0eXBlOiJzdHJpbmciLG9wdGlvbnM6e21heExlbmd0aDoocj10aGlzLm9wdGlvbnMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5tYXhMZW5ndGgsbWluTGVuZ3RoOihvPXRoaXMub3B0aW9ucyk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLm1pbkxlbmd0aCxyZWdleHA6KChpPXRoaXMub3B0aW9ucyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnJlZ2V4cCkmJntzb3VyY2U6dGhpcy5vcHRpb25zLnJlZ2V4cC5zb3VyY2UsZmxhZ3M6dGhpcy5vcHRpb25zLnJlZ2V4cC5mbGFnc319LG9wdDp0aGlzLm9wdCxyYXc6dGhpcy5pc1Jhd319fV0pLHR9KElyKSxkNT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEsyKHQpfSxmNT1mdW5jdGlvbihlKXtEcih0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgbixyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMTtyZXR1cm4gbm4odGhpcyx0KSxuPUFyKHRoaXMsdCksbi5vcHQ9cixufXJldHVybiBybih0LFt7a2V5OiJ2YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24ocixvKXtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6dHlwZW9mIG8hPSJib29sZWFuIj9wZSh7fSxyLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ2Jvb2xlYW4nLCBnb3QgJyIuY29uY2F0KG1lKG8pLCInIiksdmFsdWU6b31dKTohMX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMub3B0JiZyPT1udWxsPyEwOnR5cGVvZiByPT0iYm9vbGVhbiJ9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJib29sZWFuIixvcHQ6dGhpcy5vcHR9fX1dKSx0fShJcikscDU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGY1fSxoNT1mdW5jdGlvbihlKXtEcih0LGUpO2Z1bmN0aW9uIHQobixyKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMTtyZXR1cm4gbm4odGhpcyx0KSxvPUFyKHRoaXMsdCksby5zY2hlbWE9bixvLnNvdXJjZVBhdGg9cixvLm9wdD1pLG99cmV0dXJuIHJuKHQsW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihyLG8pe2lmKHRoaXMub3B0JiZvPT1udWxsKXJldHVybiExO2lmKCF0aGlzLnNjaGVtYSlyZXR1cm4gcGUoe30scixbe21lc3NhZ2U6IlNjaGVtYSBub3QgZm91bmQgZm9yIG1vZHVsZS4ga2V5T2YgbXVzdCBiZSB1c2VkIHdpdGggYSBWYWwgTW9kdWxlIn1dKTt2YXIgaT10aGlzLnNjaGVtYTtpZighKGkudHlwZT09PSJhcnJheSJ8fGkudHlwZT09PSJvYmplY3QifHxpLnR5cGU9PT0icmVjb3JkIikpcmV0dXJuIHBlKHt9LHIsW3ttZXNzYWdlOiJTY2hlbWEgaW4ga2V5T2YgbXVzdCBiZSBhbiAnYXJyYXknLCAnb2JqZWN0JyBvciAncmVjb3JkJy4gRm91bmQgJyIuY29uY2F0KGkudHlwZSwiJyIpfV0pO2lmKGkub3B0JiZvPT1udWxsKXJldHVybiExO2lmKGkudHlwZT09PSJhcnJheSImJnR5cGVvZiBvIT0ibnVtYmVyIilyZXR1cm4gcGUoe30scixbe21lc3NhZ2U6IlR5cGUgb2YgdmFsdWUgaW4ga2V5b2YgKGFycmF5KSBtdXN0IGJlICdudW1iZXInIn1dKTtpZihpLnR5cGU9PT0icmVjb3JkIiYmdHlwZW9mIG8hPSJzdHJpbmciKXJldHVybiBwZSh7fSxyLFt7bWVzc2FnZToiVHlwZSBvZiB2YWx1ZSBpbiBrZXlvZiAocmVjb3JkKSBtdXN0IGJlICdzdHJpbmcnIn1dKTtpZihpLnR5cGU9PT0ib2JqZWN0Iil7dmFyIHM9T2JqZWN0LmtleXMoaS5pdGVtcyk7aWYoIXMuaW5jbHVkZXMobykpcmV0dXJuIHBlKHt9LHIsW3ttZXNzYWdlOiJWYWx1ZSBvZiBrZXlPZiAob2JqZWN0KSBtdXN0IGJlOiAiLmNvbmNhdChzLmpvaW4oIiwgIiksIi4gRm91bmQ6ICIpLmNvbmNhdChvKX1dKX1yZXR1cm4hMX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24ocil7aWYodGhpcy5vcHQmJnI9PW51bGwpcmV0dXJuITA7dmFyIG89dGhpcy5zY2hlbWE7aWYoIW8pcmV0dXJuITE7dmFyIGk9bztpZighKGkudHlwZT09PSJhcnJheSJ8fGkudHlwZT09PSJvYmplY3QifHxpLnR5cGU9PT0icmVjb3JkIikpcmV0dXJuITE7aWYoaS5vcHQmJnI9PW51bGwpcmV0dXJuITA7aWYoaS50eXBlPT09ImFycmF5IiYmdHlwZW9mIHIhPSJudW1iZXIifHxpLnR5cGU9PT0icmVjb3JkIiYmdHlwZW9mIHIhPSJzdHJpbmciKXJldHVybiExO2lmKGkudHlwZT09PSJvYmplY3QiKXt2YXIgcz1PYmplY3Qua2V5cyhpLml0ZW1zKTtpZighcy5pbmNsdWRlcyhyKSlyZXR1cm4hMX1yZXR1cm4hMH19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLnNjaGVtYSx0aGlzLnNvdXJjZVBhdGgsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXMuc291cmNlUGF0aDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUga2V5T2Ygc2NoZW1hIHdpdGggZW1wdHkgc2VsZWN0b3IuIFRJUDoga2V5T2YgbXVzdCBiZSB1c2VkIHdpdGggYSBWYWwgTW9kdWxlLiIpO3ZhciBvPXRoaXMuc2NoZW1hO2lmKCFvKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBrZXlPZiBzY2hlbWEgd2l0aCBlbXB0eSBzZWxlY3Rvci4iKTt2YXIgaTtzd2l0Y2goby50eXBlKXtjYXNlImFycmF5IjppPSJudW1iZXIiO2JyZWFrO2Nhc2UicmVjb3JkIjppPSJzdHJpbmciO2JyZWFrO2Nhc2Uib2JqZWN0IjppPU9iamVjdC5rZXlzKG8uaXRlbXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGtleU9mIHNjaGVtYSB3aXRoIHNlbGVjdG9yIG9mIHR5cGUgJyIuY29uY2F0KG8udHlwZSwiJy4ga2V5T2YgbXVzdCBiZSB1c2VkIHdpdGggYSBWYWwgTW9kdWxlLiIpKX1yZXR1cm57dHlwZToia2V5T2YiLHBhdGg6cixzY2hlbWE6byxvcHQ6dGhpcy5vcHQsdmFsdWVzOml9fX1dKSx0fShJciksbTU9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG5ldyBoNSh0PT1udWxsfHwobj10W1RkXSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnNlcmlhbGl6ZSgpLHoyKHQpKX07ZnVuY3Rpb24gZzUoKXtyZXR1cm57c3RyaW5nOmQ1LGJvb2xlYW46cDUsYXJyYXk6R0wsb2JqZWN0OnFMLG51bWJlcjp1NSx1bmlvbjpYTCxyaWNodGV4dDpaTCxpbWFnZTpKTCxsaXRlcmFsOllMLGtleU9mOm01LHJlY29yZDpRTCxmaWxlOkhMfX12YXIgems9InJ0X2ltYWdlIjtmdW5jdGlvbiB2NShlKXtyZXR1cm4gcTIoYjUoZSkpfWZ1bmN0aW9uIHk1KGUpe3JldHVybiB6cyhlKT9tZShlW1h0XSk9PT0ib2JqZWN0IiYmZVtYdF0hPT1udWxsJiZBcnJheS5pc0FycmF5KGVbWHRdKTpBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHg1KGUpe3JldHVybiB6cyhlKT9tZShlW1h0XSk9PT0ib2JqZWN0IiYmZVtYdF0hPT1udWxsJiYhQXJyYXkuaXNBcnJheShlW1h0XSk6bWUoZSk9PT0ib2JqZWN0In1mdW5jdGlvbiBiNShlKXt2YXIgdD1sbihlKTtmdW5jdGlvbiBuKHIpe3ZhciBvPXk1KHIpLGk9eDUocik7aWYobyl7dmFyIHM9WHQgaW4gcj9yW1h0XTpyLGE9SG4gaW4gcj9yW0huXTp2b2lkIDA7cmV0dXJue3ZhbDpzLm1hcChmdW5jdGlvbih1LGQpe3JldHVybiBuKHpzKHUpP3U6bG4odSxLcihhLGQpKSl9KSx2YWxQYXRoOmF9fWVsc2UgaWYoaSl7dmFyIGw9WHQgaW4gcj9yW1h0XTpyLGM9SG4gaW4gcj9yW0huXTp2b2lkIDA7cmV0dXJue3ZhbDpsIT09bnVsbCYmT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGwpLm1hcChmdW5jdGlvbih1KXt2YXIgZD1Lbih1LDIpLGY9ZFswXSxwPWRbMV07cmV0dXJuW2Ysbih6cyhwKT9wOmxuKHAsS3IoYyxmKSkpXX0pKSx2YWxQYXRoOmN9fWVsc2UgcmV0dXJuIHpzKHIpP3t2YWw6bihyW1h0XSksdmFsUGF0aDpyW0huXX06cn1yZXR1cm4gbih0KX1mdW5jdGlvbiBleChlKXt2YXIgdD1qMihlKT9lLnZhbDplO3N3aXRjaChtZSh0KSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnRocm93IEVycm9yKCJJbnZhbGlkIHZhbCB0eXBlOiAiLmNvbmNhdChtZSh0KSkpO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdD09PW51bGw/bnVsbDpBcnJheS5pc0FycmF5KHQpP3QubWFwKGV4KTpPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModCkubWFwKGZ1bmN0aW9uKG4pe3ZhciByPUtuKG4sMiksbz1yWzBdLGk9clsxXTtyZXR1cm5bbyxpJiZleChpKV19KSk7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gcTIoZSl7dmFyIHQ9ZS52YWw7c3dpdGNoKG1lKHQpKXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6dGhyb3cgRXJyb3IoIkludmFsaWQgdmFsIHR5cGU6ICIuY29uY2F0KG1lKHQpKSk7Y2FzZSJvYmplY3QiOmlmKHQhPT1udWxsKXJldHVybiBuZXcgUHJveHkodCx7aGFzOmZ1bmN0aW9uKHIsbyl7cmV0dXJuIG89PT0idmFsInx8bz09PUhuPyEwOkZrKHIsbyl9LGdldDpmdW5jdGlvbihyLG8pe2lmKG89PT1IbilyZXR1cm4gZS52YWxQYXRoO2lmKG89PT0idmFsIilyZXR1cm4gZXgoZSk7aWYoQXJyYXkuaXNBcnJheShyKSYmbz09PSJsZW5ndGgiKXJldHVybiByLmxlbmd0aDtpZihGayh0LG8pKXt2YXIgaSxzO3JldHVybiBxMih7dmFsOlJlZmxlY3QuZ2V0KHIsbykudmFsLHZhbFBhdGg6KGk9KHM9UmVmbGVjdC5nZXQocixvKSk9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLnZhbFBhdGgpIT09bnVsbCYmaSE9PXZvaWQgMD9pOktyKGUudmFsUGF0aCxBcnJheS5pc0FycmF5KHIpP051bWJlcihvKTpvKX0pfXJldHVybiBSZWZsZWN0LmdldChyLG8pfX0pO2RlZmF1bHQ6cmV0dXJuIHBlKHBlKHt9LEhuLGUudmFsUGF0aCksInZhbCIsZS52YWwpfX1mdW5jdGlvbiBGayhlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX12YXIgdzU9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwtMTI0NTY0MzgyNSwtMzczOTU3NzIzLDk2MTk4NzE2MywxNTA4OTcwOTkzLC0xODQxMzMxNTQ4LC0xNDI0MjA0MDc1LC02NzA1ODYyMTYsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsLTIxMzI4ODkwOTAsLTE2ODAwNzkxOTMsLTEwNDY3NDQ3MTYsLTQ1OTU3Njg5NSwtMjcyNzQyNTIyLDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LC0xNzQwNzQ2NDE0LC0xNDczMTMyOTQ3LC0xMzQxOTcwNDg4LC0xMDg0NjUzNjI1LC05NTgzOTU0MDUsLTcxMDQzODU4NSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwtMjExNzk0MDk0NiwtMTgzODAxMTI1OSwtMTU2NDQ4MTM3NSwtMTQ3NDY2NDg4NSwtMTAzNTIzNjQ5NiwtOTQ5MjAyNTI1LC03Nzg5MDE0NzksLTY5NDYxNDQ5MiwtMjAwMzk1Mzg3LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwtMjA2NzIzNjg0NCwtMTkzMzExNDg3MiwtMTg2NjUzMDgyMiwtMTUzODIzMzEwOSwtMTA5MDkzNTgxNywtOTY1NjQxOTk4XSx1dD1mdW5jdGlvbihlKXtyZXR1cm4gZVtlLmlucHV0Qnl0ZXM9NjRdPSJpbnB1dEJ5dGVzIixlW2UuaW5wdXRXb3Jkcz0xNl09ImlucHV0V29yZHMiLGVbZS5oaWdoSW5kZXg9MTRdPSJoaWdoSW5kZXgiLGVbZS5sb3dJbmRleD0xNV09Imxvd0luZGV4IixlW2Uud29ya1dvcmRzPTY0XT0id29ya1dvcmRzIixlW2UuYWxsb2NCeXRlcz04MF09ImFsbG9jQnl0ZXMiLGVbZS5hbGxvY1dvcmRzPTIwXT0iYWxsb2NXb3JkcyIsZVtlLmFsbG9jVG90YWw9OGUzXT0iYWxsb2NUb3RhbCIsZX0odXR8fHt9KSxCaz17c2hhMjU2OjF9O2Z1bmN0aW9uIFM1KGUpe2lmKGUmJiFCa1tlXSYmIUJrW2UudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgbWV0aG9kIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4gbmV3IGs1fXZhciBrNT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtubih0aGlzLGUpLHBlKHRoaXMsIkEiLDE3NzkwMzM3MDMpLHBlKHRoaXMsIkIiLC0xMTUwODMzMDE5KSxwZSh0aGlzLCJDIiwxMDEzOTA0MjQyKSxwZSh0aGlzLCJEIiwtMTUyMTQ4NjUzNCkscGUodGhpcywiRSIsMTM1OTg5MzExOSkscGUodGhpcywiRiIsLTE2OTQxNDQzNzIpLHBlKHRoaXMsIkciLDUyODczNDYzNSkscGUodGhpcywiSCIsMTU0MTQ1OTIyNSkscGUodGhpcywiX3NpemUiLDApLHBlKHRoaXMsIl9zcCIsMCksKCF6cHx8VHU+PXV0LmFsbG9jVG90YWwpJiYoenA9bmV3IEFycmF5QnVmZmVyKHV0LmFsbG9jVG90YWwpLFR1PTApLHRoaXMuX2J5dGU9bmV3IFVpbnQ4QXJyYXkoenAsVHUsdXQuYWxsb2NCeXRlcyksdGhpcy5fd29yZD1uZXcgSW50MzJBcnJheSh6cCxUdSx1dC5hbGxvY1dvcmRzKSxUdSs9dXQuYWxsb2NCeXRlc31yZXR1cm4gcm4oZSxbe2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihuKXtpZih0eXBlb2Ygbj09InN0cmluZyIpcmV0dXJuIHRoaXMuX3V0Zjgobik7aWYobj09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHR5cGU6ICIrbWUobikpO3ZhciByPW4uYnl0ZU9mZnNldCxvPW4uYnl0ZUxlbmd0aCxpPW8vdXQuaW5wdXRCeXRlc3wwLHM9MDtpZihpJiYhKHImMykmJiEodGhpcy5fc2l6ZSV1dC5pbnB1dEJ5dGVzKSl7Zm9yKHZhciBhPW5ldyBJbnQzMkFycmF5KG4uYnVmZmVyLHIsaSp1dC5pbnB1dFdvcmRzKTtpLS07KXRoaXMuX2ludDMyKGEscz4+Mikscys9dXQuaW5wdXRCeXRlczt0aGlzLl9zaXplKz1zfXZhciBsPW4uQllURVNfUEVSX0VMRU1FTlQ7aWYobCE9PTEmJm4uYnVmZmVyKXt2YXIgYz1uZXcgVWludDhBcnJheShuLmJ1ZmZlcixyK3Msby1zKTtyZXR1cm4gdGhpcy5fdWludDgoYyl9cmV0dXJuIHM9PT1vP3RoaXM6dGhpcy5fdWludDgobixzKX19LHtrZXk6Il91aW50OCIsdmFsdWU6ZnVuY3Rpb24obixyKXt2YXIgbz10aGlzLl9ieXRlLGk9dGhpcy5fd29yZCxzPW4ubGVuZ3RoO2ZvcihyPXJ8MDtyPHM7KXtmb3IodmFyIGE9dGhpcy5fc2l6ZSV1dC5pbnB1dEJ5dGVzLGw9YTtyPHMmJmw8dXQuaW5wdXRCeXRlczspb1tsKytdPW5bcisrXTtsPj11dC5pbnB1dEJ5dGVzJiZ0aGlzLl9pbnQzMihpKSx0aGlzLl9zaXplKz1sLWF9cmV0dXJuIHRoaXN9fSx7a2V5OiJfdXRmOCIsdmFsdWU6ZnVuY3Rpb24obil7Zm9yKHZhciByPXRoaXMuX2J5dGUsbz10aGlzLl93b3JkLGk9bi5sZW5ndGgscz10aGlzLl9zcCxhPTA7YTxpOyl7Zm9yKHZhciBsPXRoaXMuX3NpemUldXQuaW5wdXRCeXRlcyxjPWw7YTxpJiZjPHV0LmlucHV0Qnl0ZXM7KXt2YXIgdT1uLmNoYXJDb2RlQXQoYSsrKXwwO3U8MTI4P3JbYysrXT11OnU8MjA0OD8ocltjKytdPTE5Mnx1Pj4+NixyW2MrK109MTI4fHUmNjMpOnU8NTUyOTZ8fHU+NTczNDM/KHJbYysrXT0yMjR8dT4+PjEyLHJbYysrXT0xMjh8dT4+PjYmNjMscltjKytdPTEyOHx1JjYzKTpzPyh1PSgocyYxMDIzKTw8MTApKyh1JjEwMjMpKzY1NTM2LHJbYysrXT0yNDB8dT4+PjE4LHJbYysrXT0xMjh8dT4+PjEyJjYzLHJbYysrXT0xMjh8dT4+PjYmNjMscltjKytdPTEyOHx1JjYzLHM9MCk6cz11fWM+PXV0LmlucHV0Qnl0ZXMmJih0aGlzLl9pbnQzMihvKSxvWzBdPW9bdXQuaW5wdXRXb3Jkc10pLHRoaXMuX3NpemUrPWMtbH1yZXR1cm4gdGhpcy5fc3A9cyx0aGlzfX0se2tleToiX2ludDMyIix2YWx1ZTpmdW5jdGlvbihuLHIpe3ZhciBvPXRoaXMuQSxpPXRoaXMuQixzPXRoaXMuQyxhPXRoaXMuRCxsPXRoaXMuRSxjPXRoaXMuRix1PXRoaXMuRyxkPXRoaXMuSCxmPTA7Zm9yKHI9cnwwO2Y8dXQuaW5wdXRXb3JkczspbWFbZisrXT1sbyhuW3IrK10pO2ZvcihmPXV0LmlucHV0V29yZHM7Zjx1dC53b3JrV29yZHM7ZisrKW1hW2ZdPVI1KG1hW2YtMl0pK21hW2YtN10rTTUobWFbZi0xNV0pK21hW2YtMTZdfDA7Zm9yKGY9MDtmPHV0LndvcmtXb3JkcztmKyspe3ZhciBwPWQrUDUobCkrQzUobCxjLHUpK3c1W2ZdK21hW2ZdfDAsbT1UNShvKStPNShvLGkscyl8MDtkPXUsdT1jLGM9bCxsPWErcHwwLGE9cyxzPWksaT1vLG89cCttfDB9dGhpcy5BPW8rdGhpcy5BfDAsdGhpcy5CPWkrdGhpcy5CfDAsdGhpcy5DPXMrdGhpcy5DfDAsdGhpcy5EPWErdGhpcy5EfDAsdGhpcy5FPWwrdGhpcy5FfDAsdGhpcy5GPWMrdGhpcy5GfDAsdGhpcy5HPXUrdGhpcy5HfDAsdGhpcy5IPWQrdGhpcy5IfDB9fSx7a2V5OiJkaWdlc3QiLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciByPXRoaXMuX2J5dGUsbz10aGlzLl93b3JkLGk9dGhpcy5fc2l6ZSV1dC5pbnB1dEJ5dGVzfDA7Zm9yKHJbaSsrXT0xMjg7aSYzOylyW2krK109MDtpZihpPj49MixpPnV0LmhpZ2hJbmRleCl7Zm9yKDtpPHV0LmlucHV0V29yZHM7KW9baSsrXT0wO2k9MCx0aGlzLl9pbnQzMihvKX1mb3IoO2k8dXQuaW5wdXRXb3Jkczspb1tpKytdPTA7dmFyIHM9dGhpcy5fc2l6ZSo4LGE9KHMmNDI5NDk2NzI5NSk+Pj4wLGw9KHMtYSkvNDI5NDk2NzI5NjtyZXR1cm4gbCYmKG9bdXQuaGlnaEluZGV4XT1sbyhsKSksYSYmKG9bdXQubG93SW5kZXhdPWxvKGEpKSx0aGlzLl9pbnQzMihvKSxuPT09ImhleCI/dGhpcy5faGV4KCk6dGhpcy5fYmluKCl9fSx7a2V5OiJfaGV4Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXMuQSxyPXRoaXMuQixvPXRoaXMuQyxpPXRoaXMuRCxzPXRoaXMuRSxhPXRoaXMuRixsPXRoaXMuRyxjPXRoaXMuSDtyZXR1cm4gSmkobikrSmkocikrSmkobykrSmkoaSkrSmkocykrSmkoYSkrSmkobCkrSmkoYyl9fSx7a2V5OiJfYmluIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXMuQSxyPXRoaXMuQixvPXRoaXMuQyxpPXRoaXMuRCxzPXRoaXMuRSxhPXRoaXMuRixsPXRoaXMuRyxjPXRoaXMuSCx1PXRoaXMuX2J5dGUsZD10aGlzLl93b3JkO3JldHVybiBkWzBdPWxvKG4pLGRbMV09bG8ociksZFsyXT1sbyhvKSxkWzNdPWxvKGkpLGRbNF09bG8ocyksZFs1XT1sbyhhKSxkWzZdPWxvKGwpLGRbN109bG8oYyksdS5zbGljZSgwLDMyKX19XSksZX0oKSxtYT1uZXcgSW50MzJBcnJheSh1dC53b3JrV29yZHMpLHpwLFR1PTAsSmk9ZnVuY3Rpb24odCl7cmV0dXJuKHQrNDI5NDk2NzI5NikudG9TdHJpbmcoMTYpLnN1YnN0cigtOCl9LEU1PWZ1bmN0aW9uKHQpe3JldHVybiB0PDwyNCY0Mjc4MTkwMDgwfHQ8PDgmMTY3MTE2ODB8dD4+OCY2NTI4MHx0Pj4yNCYyNTV9LF81PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxsbz1ONSgpP181OkU1LEM1PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcl50JihuXnIpfSxPNT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHQmbnxyJih0fG4pfSxUNT1mdW5jdGlvbih0KXtyZXR1cm4odD4+PjJ8dDw8MzApXih0Pj4+MTN8dDw8MTkpXih0Pj4+MjJ8dDw8MTApfSxQNT1mdW5jdGlvbih0KXtyZXR1cm4odD4+PjZ8dDw8MjYpXih0Pj4+MTF8dDw8MjEpXih0Pj4+MjV8dDw8Nyl9LE01PWZ1bmN0aW9uKHQpe3JldHVybih0Pj4+N3x0PDwyNSleKHQ+Pj4xOHx0PDwxNCledD4+PjN9LFI1PWZ1bmN0aW9uKHQpe3JldHVybih0Pj4+MTd8dDw8MTUpXih0Pj4+MTl8dDw8MTMpXnQ+Pj4xMH07ZnVuY3Rpb24gTjUoKXt2YXIgZT1uZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzY1Mjc5XSkuYnVmZmVyKTtyZXR1cm4gZVswXT09PTI1NH12YXIgJDU9ZnVuY3Rpb24odCl7cmV0dXJuIFM1KCkudXBkYXRlKHQpLmRpZ2VzdCgiaGV4Iil9O2Z1bmN0aW9uIHZyKCl7dnI9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIGUsdD17fSxuPU9iamVjdC5wcm90b3R5cGUscj1uLmhhc093blByb3BlcnR5LG89T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihDLFQsTyl7Q1tUXT1PLnZhbHVlfSxpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiI/U3ltYm9sOnt9LHM9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLGE9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixsPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKEMsVCxPKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEMsVCx7dmFsdWU6TyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLENbVF19dHJ5e2Moe30sIiIpfWNhdGNoe2M9ZnVuY3Rpb24oVCxPLFIpe3JldHVybiBUW09dPVJ9fWZ1bmN0aW9uIHUoQyxULE8sUil7dmFyIE49VCYmVC5wcm90b3R5cGUgaW5zdGFuY2VvZiB2P1Q6dixqPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpLEc9bmV3IFYoUnx8W10pO3JldHVybiBvKGosIl9pbnZva2UiLHt2YWx1ZTpBKEMsTyxHKX0pLGp9ZnVuY3Rpb24gZChDLFQsTyl7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzpDLmNhbGwoVCxPKX19Y2F0Y2goUil7cmV0dXJue3R5cGU6InRocm93Iixhcmc6Un19fXQud3JhcD11O3ZhciBmPSJzdXNwZW5kZWRTdGFydCIscD0ic3VzcGVuZGVkWWllbGQiLG09ImV4ZWN1dGluZyIsZz0iY29tcGxldGVkIix5PXt9O2Z1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geCgpe31mdW5jdGlvbiB3KCl7fXZhciBrPXt9O2MoayxzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTt2YXIgRT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsUz1FJiZFKEUoSyhbXSkpKTtTJiZTIT09biYmci5jYWxsKFMscykmJihrPVMpO3ZhciBfPXcucHJvdG90eXBlPXYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoayk7ZnVuY3Rpb24gUChDKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goZnVuY3Rpb24oVCl7YyhDLFQsZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX2ludm9rZShULE8pfSl9KX1mdW5jdGlvbiBNKEMsVCl7ZnVuY3Rpb24gTyhOLGosRyx4ZSl7dmFyIHVlPWQoQ1tOXSxDLGopO2lmKHVlLnR5cGUhPT0idGhyb3ciKXt2YXIgamU9dWUuYXJnLENlPWplLnZhbHVlO3JldHVybiBDZSYmdHlwZW9mIENlPT0ib2JqZWN0IiYmci5jYWxsKENlLCJfX2F3YWl0Iik/VC5yZXNvbHZlKENlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24oUSl7TygibmV4dCIsUSxHLHhlKX0sZnVuY3Rpb24oUSl7TygidGhyb3ciLFEsRyx4ZSl9KTpULnJlc29sdmUoQ2UpLnRoZW4oZnVuY3Rpb24oUSl7amUudmFsdWU9USxHKGplKX0sZnVuY3Rpb24oUSl7cmV0dXJuIE8oInRocm93IixRLEcseGUpfSl9eGUodWUuYXJnKX12YXIgUjtvKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihOLGope2Z1bmN0aW9uIEcoKXtyZXR1cm4gbmV3IFQoZnVuY3Rpb24oeGUsdWUpe08oTixqLHhlLHVlKX0pfXJldHVybiBSPVI/Ui50aGVuKEcsRyk6RygpfX0pfWZ1bmN0aW9uIEEoQyxULE8pe3ZhciBSPWY7cmV0dXJuIGZ1bmN0aW9uKE4sail7aWYoUj09PW0pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoUj09PWcpe2lmKE49PT0idGhyb3ciKXRocm93IGo7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19Zm9yKE8ubWV0aG9kPU4sTy5hcmc9ajs7KXt2YXIgRz1PLmRlbGVnYXRlO2lmKEcpe3ZhciB4ZT1JKEcsTyk7aWYoeGUpe2lmKHhlPT09eSljb250aW51ZTtyZXR1cm4geGV9fWlmKE8ubWV0aG9kPT09Im5leHQiKU8uc2VudD1PLl9zZW50PU8uYXJnO2Vsc2UgaWYoTy5tZXRob2Q9PT0idGhyb3ciKXtpZihSPT09Zil0aHJvdyBSPWcsTy5hcmc7Ty5kaXNwYXRjaEV4Y2VwdGlvbihPLmFyZyl9ZWxzZSBPLm1ldGhvZD09PSJyZXR1cm4iJiZPLmFicnVwdCgicmV0dXJuIixPLmFyZyk7Uj1tO3ZhciB1ZT1kKEMsVCxPKTtpZih1ZS50eXBlPT09Im5vcm1hbCIpe2lmKFI9Ty5kb25lP2c6cCx1ZS5hcmc9PT15KWNvbnRpbnVlO3JldHVybnt2YWx1ZTp1ZS5hcmcsZG9uZTpPLmRvbmV9fXVlLnR5cGU9PT0idGhyb3ciJiYoUj1nLE8ubWV0aG9kPSJ0aHJvdyIsTy5hcmc9dWUuYXJnKX19fWZ1bmN0aW9uIEkoQyxUKXt2YXIgTz1ULm1ldGhvZCxSPUMuaXRlcmF0b3JbT107aWYoUj09PWUpcmV0dXJuIFQuZGVsZWdhdGU9bnVsbCxPPT09InRocm93IiYmQy5pdGVyYXRvci5yZXR1cm4mJihULm1ldGhvZD0icmV0dXJuIixULmFyZz1lLEkoQyxUKSxULm1ldGhvZD09PSJ0aHJvdyIpfHxPIT09InJldHVybiImJihULm1ldGhvZD0idGhyb3ciLFQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrTysiJyBtZXRob2QiKSkseTt2YXIgTj1kKFIsQy5pdGVyYXRvcixULmFyZyk7aWYoTi50eXBlPT09InRocm93IilyZXR1cm4gVC5tZXRob2Q9InRocm93IixULmFyZz1OLmFyZyxULmRlbGVnYXRlPW51bGwseTt2YXIgaj1OLmFyZztyZXR1cm4gaj9qLmRvbmU/KFRbQy5yZXN1bHROYW1lXT1qLnZhbHVlLFQubmV4dD1DLm5leHRMb2MsVC5tZXRob2QhPT0icmV0dXJuIiYmKFQubWV0aG9kPSJuZXh0IixULmFyZz1lKSxULmRlbGVnYXRlPW51bGwseSk6ajooVC5tZXRob2Q9InRocm93IixULmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLFQuZGVsZWdhdGU9bnVsbCx5KX1mdW5jdGlvbiBMKEMpe3ZhciBUPXt0cnlMb2M6Q1swXX07MSBpbiBDJiYoVC5jYXRjaExvYz1DWzFdKSwyIGluIEMmJihULmZpbmFsbHlMb2M9Q1syXSxULmFmdGVyTG9jPUNbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKFQpfWZ1bmN0aW9uIHJlKEMpe3ZhciBUPUMuY29tcGxldGlvbnx8e307VC50eXBlPSJub3JtYWwiLGRlbGV0ZSBULmFyZyxDLmNvbXBsZXRpb249VH1mdW5jdGlvbiBWKEMpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxDLmZvckVhY2goTCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBLKEMpe2lmKEN8fEM9PT0iIil7dmFyIFQ9Q1tzXTtpZihUKXJldHVybiBULmNhbGwoQyk7aWYodHlwZW9mIEMubmV4dD09ImZ1bmN0aW9uIilyZXR1cm4gQztpZighaXNOYU4oQy5sZW5ndGgpKXt2YXIgTz0tMSxSPWZ1bmN0aW9uIE4oKXtmb3IoOysrTzxDLmxlbmd0aDspaWYoci5jYWxsKEMsTykpcmV0dXJuIE4udmFsdWU9Q1tPXSxOLmRvbmU9ITEsTjtyZXR1cm4gTi52YWx1ZT1lLE4uZG9uZT0hMCxOfTtyZXR1cm4gUi5uZXh0PVJ9fXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIEMrIiBpcyBub3QgaXRlcmFibGUiKX1yZXR1cm4geC5wcm90b3R5cGU9dyxvKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6dyxjb25maWd1cmFibGU6ITB9KSxvKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6eCxjb25maWd1cmFibGU6ITB9KSx4LmRpc3BsYXlOYW1lPWModyxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihDKXt2YXIgVD10eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5jb25zdHJ1Y3RvcjtyZXR1cm4hIVQmJihUPT09eHx8KFQuZGlzcGxheU5hbWV8fFQubmFtZSk9PT0iR2VuZXJhdG9yRnVuY3Rpb24iKX0sdC5tYXJrPWZ1bmN0aW9uKEMpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKEMsdyk6KEMuX19wcm90b19fPXcsYyhDLGwsIkdlbmVyYXRvckZ1bmN0aW9uIikpLEMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksQ30sdC5hd3JhcD1mdW5jdGlvbihDKXtyZXR1cm57X19hd2FpdDpDfX0sUChNLnByb3RvdHlwZSksYyhNLnByb3RvdHlwZSxhLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LkFzeW5jSXRlcmF0b3I9TSx0LmFzeW5jPWZ1bmN0aW9uKEMsVCxPLFIsTil7Tj09PXZvaWQgMCYmKE49UHJvbWlzZSk7dmFyIGo9bmV3IE0odShDLFQsTyxSKSxOKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKFQpP2o6ai5uZXh0KCkudGhlbihmdW5jdGlvbihHKXtyZXR1cm4gRy5kb25lP0cudmFsdWU6ai5uZXh0KCl9KX0sUChfKSxjKF8sbCwiR2VuZXJhdG9yIiksYyhfLHMsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGMoXywidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSx0LmtleXM9ZnVuY3Rpb24oQyl7dmFyIFQ9T2JqZWN0KEMpLE89W107Zm9yKHZhciBSIGluIFQpTy5wdXNoKFIpO3JldHVybiBPLnJldmVyc2UoKSxmdW5jdGlvbiBOKCl7Zm9yKDtPLmxlbmd0aDspe3ZhciBqPU8ucG9wKCk7aWYoaiBpbiBUKXJldHVybiBOLnZhbHVlPWosTi5kb25lPSExLE59cmV0dXJuIE4uZG9uZT0hMCxOfX0sdC52YWx1ZXM9SyxWLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VixyZXNldDpmdW5jdGlvbihDKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD1lLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPWUsdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmUpLCFDKWZvcih2YXIgVCBpbiB0aGlzKVQuY2hhckF0KDApPT09InQiJiZyLmNhbGwodGhpcyxUKSYmIWlzTmFOKCtULnNsaWNlKDEpKSYmKHRoaXNbVF09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIEM9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoQy50eXBlPT09InRocm93Iil0aHJvdyBDLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihDKXtpZih0aGlzLmRvbmUpdGhyb3cgQzt2YXIgVD10aGlzO2Z1bmN0aW9uIE8odWUsamUpe3JldHVybiBqLnR5cGU9InRocm93IixqLmFyZz1DLFQubmV4dD11ZSxqZSYmKFQubWV0aG9kPSJuZXh0IixULmFyZz1lKSwhIWplfWZvcih2YXIgUj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7Uj49MDstLVIpe3ZhciBOPXRoaXMudHJ5RW50cmllc1tSXSxqPU4uY29tcGxldGlvbjtpZihOLnRyeUxvYz09PSJyb290IilyZXR1cm4gTygiZW5kIik7aWYoTi50cnlMb2M8PXRoaXMucHJldil7dmFyIEc9ci5jYWxsKE4sImNhdGNoTG9jIikseGU9ci5jYWxsKE4sImZpbmFsbHlMb2MiKTtpZihHJiZ4ZSl7aWYodGhpcy5wcmV2PE4uY2F0Y2hMb2MpcmV0dXJuIE8oTi5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PE4uZmluYWxseUxvYylyZXR1cm4gTyhOLmZpbmFsbHlMb2MpfWVsc2UgaWYoRyl7aWYodGhpcy5wcmV2PE4uY2F0Y2hMb2MpcmV0dXJuIE8oTi5jYXRjaExvYywhMCl9ZWxzZXtpZigheGUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxOLmZpbmFsbHlMb2MpcmV0dXJuIE8oTi5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBPPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtPPj0wOy0tTyl7dmFyIFI9dGhpcy50cnlFbnRyaWVzW09dO2lmKFIudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChSLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxSLmZpbmFsbHlMb2Mpe3ZhciBOPVI7YnJlYWt9fU4mJihDPT09ImJyZWFrInx8Qz09PSJjb250aW51ZSIpJiZOLnRyeUxvYzw9VCYmVDw9Ti5maW5hbGx5TG9jJiYoTj1udWxsKTt2YXIgaj1OP04uY29tcGxldGlvbjp7fTtyZXR1cm4gai50eXBlPUMsai5hcmc9VCxOPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PU4uZmluYWxseUxvYyx5KTp0aGlzLmNvbXBsZXRlKGopfSxjb21wbGV0ZTpmdW5jdGlvbihDLFQpe2lmKEMudHlwZT09PSJ0aHJvdyIpdGhyb3cgQy5hcmc7cmV0dXJuIEMudHlwZT09PSJicmVhayJ8fEMudHlwZT09PSJjb250aW51ZSI/dGhpcy5uZXh0PUMuYXJnOkMudHlwZT09PSJyZXR1cm4iPyh0aGlzLnJ2YWw9dGhpcy5hcmc9Qy5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKTpDLnR5cGU9PT0ibm9ybWFsIiYmVCYmKHRoaXMubmV4dD1UKSx5fSxmaW5pc2g6ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtUPj0wOy0tVCl7dmFyIE89dGhpcy50cnlFbnRyaWVzW1RdO2lmKE8uZmluYWxseUxvYz09PUMpcmV0dXJuIHRoaXMuY29tcGxldGUoTy5jb21wbGV0aW9uLE8uYWZ0ZXJMb2MpLHJlKE8pLHl9fSxjYXRjaDpmdW5jdGlvbihDKXtmb3IodmFyIFQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO1Q+PTA7LS1UKXt2YXIgTz10aGlzLnRyeUVudHJpZXNbVF07aWYoTy50cnlMb2M9PT1DKXt2YXIgUj1PLmNvbXBsZXRpb247aWYoUi50eXBlPT09InRocm93Iil7dmFyIE49Ui5hcmc7cmUoTyl9cmV0dXJuIE59fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oQyxULE8pe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpLKEMpLHJlc3VsdE5hbWU6VCxuZXh0TG9jOk99LHRoaXMubWV0aG9kPT09Im5leHQiJiYodGhpcy5hcmc9ZSkseX19LHR9ZnVuY3Rpb24gVWsoZSx0LG4scixvLGkscyl7dHJ5e3ZhciBhPWVbaV0ocyksbD1hLnZhbHVlfWNhdGNoKGMpe24oYyk7cmV0dXJufWEuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKHIsbyl9ZnVuY3Rpb24gVmwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgaT1lLmFwcGx5KHQsbik7ZnVuY3Rpb24gcyhsKXtVayhpLHIsbyxzLGEsIm5leHQiLGwpfWZ1bmN0aW9uIGEobCl7VWsoaSxyLG8scyxhLCJ0aHJvdyIsbCl9cyh2b2lkIDApfSl9fXZhciB3MT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7bm4odGhpcyxlKSx0aGlzLmhvc3Q9dH1yZXR1cm4gcm4oZSxbe2tleToiZ2V0RGlzYWJsZVVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2Rpc2FibGU/cmVkaXJlY3RfdG89IikuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChuKSl9fSx7a2V5OiJnZXRMb2dpblVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2F1dGhvcml6ZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldEVuYWJsZVVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2VuYWJsZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldFBhdGNoZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9VmwodnIoKS5tYXJrKGZ1bmN0aW9uIHIobyl7dmFyIGkscyxhO3JldHVybiB2cigpLndyYXAoZnVuY3Rpb24oYyl7Zm9yKDs7KXN3aXRjaChjLnByZXY9Yy5uZXh0KXtjYXNlIDA6cmV0dXJuIGk9by5wYXRjaElkcyxzPW8uaGVhZGVycyxhPWk/Ij8iLmNvbmNhdChpLm1hcChmdW5jdGlvbih1KXtyZXR1cm4iIi5jb25jYXQodSwiPSIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQodSkpfSkuam9pbigiJiIpKToiIixjLmFicnVwdCgicmV0dXJuIixmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvcGF0Y2hlcy9+IikuY29uY2F0KGEpLHtoZWFkZXJzOnN8fHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gUWkodSl9KS5jYXRjaChnYSkpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGMuc3RvcCgpfX0scix0aGlzKX0pKTtmdW5jdGlvbiBuKHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbn0oKX0se2tleToiZGVsZXRlUGF0Y2hlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1WbCh2cigpLm1hcmsoZnVuY3Rpb24gcihvLGkpe3ZhciBzO3JldHVybiB2cigpLndyYXAoZnVuY3Rpb24obCl7Zm9yKDs7KXN3aXRjaChsLnByZXY9bC5uZXh0KXtjYXNlIDA6cmV0dXJuIHM9bmV3IFVSTFNlYXJjaFBhcmFtcyxvLmZvckVhY2goZnVuY3Rpb24oYyl7cmV0dXJuIHMuYXBwZW5kKCJpZCIsYyl9KSxsLmFicnVwdCgicmV0dXJuIixmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvcGF0Y2hlcy9+PyIpLmNvbmNhdChzKSx7bWV0aG9kOiJERUxFVEUiLGhlYWRlcnM6aXx8eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGZ1bmN0aW9uKGMpe3JldHVybiBRaShjKX0pLmNhdGNoKGdhKSk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gbC5zdG9wKCl9fSxyLHRoaXMpfSkpO2Z1bmN0aW9uIG4ocixvKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG59KCl9LHtrZXk6ImdldEVkaXRVcmwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIi9hcGkvdmFsL3N0YXRpYyJ9fSx7a2V5OiJwb3N0UGF0Y2hlcyIsdmFsdWU6ZnVuY3Rpb24obixyLG8pe3JldHVybiBmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvcGF0Y2hlcy9+Iikse2hlYWRlcnM6b3x8eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sbWV0aG9kOiJQT1NUIixib2R5OkpTT04uc3RyaW5naWZ5KHBlKHt9LG4scikpfSkudGhlbihmdW5jdGlvbigpe3ZhciBpPVZsKHZyKCkubWFyayhmdW5jdGlvbiBzKGEpe3JldHVybiB2cigpLndyYXAoZnVuY3Rpb24oYyl7Zm9yKDs7KXN3aXRjaChjLnByZXY9Yy5uZXh0KXtjYXNlIDA6cmV0dXJuIGMuYWJydXB0KCJyZXR1cm4iLFFpKGEpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBjLnN0b3AoKX19LHMpfSkpO3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChnYSl9fSx7a2V5OiJnZXRTZXNzaW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvc2Vzc2lvbiIpKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiBRaShuKS5jYXRjaChnYSl9KX19LHtrZXk6ImdldFRyZWUiLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciByPW4ucGF0Y2gsbz1yPT09dm9pZCAwPyExOnIsaT1uLmluY2x1ZGVTY2hlbWEscz1pPT09dm9pZCAwPyExOmksYT1uLmluY2x1ZGVTb3VyY2UsbD1hPT09dm9pZCAwPyExOmEsYz1uLnRyZWVQYXRoLHU9Yz09PXZvaWQgMD8iLyI6YyxkPW4uaGVhZGVycyxmPW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIGYuc2V0KCJwYXRjaCIsby50b1N0cmluZygpKSxmLnNldCgic2NoZW1hIixzLnRvU3RyaW5nKCkpLGYuc2V0KCJzb3VyY2UiLGwudG9TdHJpbmcoKSksZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3RyZWUvfiIpLmNvbmNhdCh1LCI/IikuY29uY2F0KGYudG9TdHJpbmcoKSkse2hlYWRlcnM6ZH0pLnRoZW4oZnVuY3Rpb24ocCl7cmV0dXJuIFFpKHApfSkuY2F0Y2goZ2EpfX0se2tleToicG9zdENvbW1pdCIsdmFsdWU6ZnVuY3Rpb24obil7dmFyIHI9bi5wYXRjaGVzLG89bi5oZWFkZXJzO3JldHVybiBmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvY29tbWl0Iikse21ldGhvZDoiUE9TVCIsYm9keTpKU09OLnN0cmluZ2lmeSh7cGF0Y2hlczpyfSksaGVhZGVyczpvfHx7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgaT1WbCh2cigpLm1hcmsoZnVuY3Rpb24gcyhhKXt2YXIgbDtyZXR1cm4gdnIoKS53cmFwKGZ1bmN0aW9uKHUpe2Zvcig7Oylzd2l0Y2godS5wcmV2PXUubmV4dCl7Y2FzZSAwOmlmKCFhLm9rKXt1Lm5leHQ9NDticmVha31yZXR1cm4gdS5hYnJ1cHQoInJldHVybiIsUWkoYSkpO2Nhc2UgNDppZighKGEuc3RhdHVzPT09NDAwJiZhLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKT09PSJhcHBsaWNhdGlvbi9qc29uIikpe3UubmV4dD0xMzticmVha31yZXR1cm4gdS5uZXh0PTcsYS5qc29uKCk7Y2FzZSA3OmlmKGw9dS5zZW50LCEoInZhbGlkYXRpb25FcnJvcnMiaW4gbCkpe3UubmV4dD0xMjticmVha31yZXR1cm4gdS5hYnJ1cHQoInJldHVybiIsVnQobCkpO2Nhc2UgMTI6cmV0dXJuIHUuYWJydXB0KCJyZXR1cm4iLEcyKGEuc3RhdHVzLGwsYS5zdGF0dXNUZXh0KSk7Y2FzZSAxMzpyZXR1cm4gdS5hYnJ1cHQoInJldHVybiIsUWkoYSkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB1LnN0b3AoKX19LHMpfSkpO3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChnYSl9fSx7a2V5OiJwb3N0VmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciByPW4ucGF0Y2hlcyxvPW4uaGVhZGVycztyZXR1cm4gZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3ZhbGlkYXRlIikse21ldGhvZDoiUE9TVCIsYm9keTpKU09OLnN0cmluZ2lmeSh7cGF0Y2hlczpyfSksaGVhZGVyczpvfHx7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgaT1WbCh2cigpLm1hcmsoZnVuY3Rpb24gcyhhKXtyZXR1cm4gdnIoKS53cmFwKGZ1bmN0aW9uKGMpe2Zvcig7Oylzd2l0Y2goYy5wcmV2PWMubmV4dCl7Y2FzZSAwOnJldHVybiBjLmFicnVwdCgicmV0dXJuIixRaShhKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gYy5zdG9wKCl9fSxzKX0pKTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goZ2EpfX1dKSxlfSgpO2Z1bmN0aW9uIGdhKGUpe3JldHVybiBWdCh7c3RhdHVzQ29kZTo1MDAsbWVzc2FnZTplIGluc3RhbmNlb2YgRXJyb3J8fG1lKGUpPT09Im9iamVjdCImJmUmJiJtZXNzYWdlImluIGUmJnR5cGVvZiBlLm1lc3NhZ2U9PSJzdHJpbmciP2UubWVzc2FnZToiVW5rbm93biBlcnJvciIsZGV0YWlsczptZShlKT09PSJvYmplY3QiJiZlJiYiZGV0YWlscyJpbiBlP2UuZGV0YWlsczp2b2lkIDB9KX1mdW5jdGlvbiBHMihlLHQsbil7cmV0dXJuIFZ0KHtzdGF0dXNDb2RlOmUsbWVzc2FnZTp0Lm1lc3NhZ2V8fG4sZGV0YWlsczp0LmRldGFpbHN8fE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0KS5maWx0ZXIoZnVuY3Rpb24ocil7dmFyIG89S24ociwxKSxpPW9bMF07cmV0dXJuIGkhPT0ibWVzc2FnZSJ9KSl9KX1mdW5jdGlvbiBRaShlKXtyZXR1cm4gdHguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHR4KCl7cmV0dXJuIHR4PVZsKHZyKCkubWFyayhmdW5jdGlvbiBlKHQpe3ZhciBuO3JldHVybiB2cigpLndyYXAoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoby5wcmV2PTAsIXQub2spe28ubmV4dD05O2JyZWFrfXJldHVybiBvLnQwPWJ0LG8ubmV4dD01LHQuanNvbigpO2Nhc2UgNTpyZXR1cm4gby50MT1vLnNlbnQsby5hYnJ1cHQoInJldHVybiIsby50MC5vay5jYWxsKG8udDAsby50MSkpO2Nhc2UgOTpyZXR1cm4gby5wcmV2PTksby5uZXh0PTEyLHQuanNvbigpO2Nhc2UgMTI6cmV0dXJuIG49by5zZW50LG8uYWJydXB0KCJyZXR1cm4iLEcyKHQuc3RhdHVzLG4sdC5zdGF0dXNUZXh0KSk7Y2FzZSAxNjpyZXR1cm4gby5wcmV2PTE2LG8udDI9by5jYXRjaCg5KSxvLmFicnVwdCgicmV0dXJuIixWdCh7c3RhdHVzQ29kZTp0LnN0YXR1cyxtZXNzYWdlOnQuc3RhdHVzVGV4dH0pKTtjYXNlIDE5Om8ubmV4dD0yNDticmVhaztjYXNlIDIxOnJldHVybiBvLnByZXY9MjEsby50Mz1vLmNhdGNoKDApLG8uYWJydXB0KCJyZXR1cm4iLFZ0KHttZXNzYWdlOm8udDMgaW5zdGFuY2VvZiBFcnJvcj9vLnQzLm1lc3NhZ2U6IlVua25vd24gZXJyb3IifSkpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19LGUsbnVsbCxbWzAsMjFdLFs5LDE2XV0pfSkpLHR4LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgb3Q9e2NvbnZlcnRGaWxlU291cmNlOkwyLGdldFNjaGVtYTpCTCxnZXRWYWxQYXRoOnoyLGdldFZhbDp2NSxnZXRTb3VyY2U6ZTUscmVzb2x2ZVBhdGg6bDUsc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGg6dDUsaXNWYWw6V0wsY3JlYXRlVmFsUGF0aE9mSXRlbTpLcixnZXRTSEEyNTZIYXNoOiQ1LGluaXRTY2hlbWE6ZzUsbm90RmlsZU9wOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wIT09ImZpbGUifSxpc0ZpbGVPcDpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcD09PSJmaWxlIiYmdHlwZW9mIHQuZmlsZVBhdGg9PSJzdHJpbmcifSxjcmVhdGVQYXRjaEpTT05QYXRoOmZ1bmN0aW9uKHQpe3JldHVybiIvIi5jb25jYXQodC5zcGxpdCgiLiIpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbiYmQTUobil9KS5qb2luKCIvIikpfSxjcmVhdGVQYXRjaFBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIFcyKHQpfSxwYXRjaFBhdGhUb01vZHVsZVBhdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcihuKSk/bjpKU09OLnN0cmluZ2lmeShuKX0pLmpvaW4oIi4iKX0sVkFMX0VOQUJMRV9DT09LSUVfTkFNRToidmFsX2VuYWJsZSIsVkFMX1NUQVRFX0NPT0tJRToidmFsX3N0YXRlIixWQUxfU0VTU0lPTl9DT09LSUU6InZhbF9zZXNzaW9uIn07ZnVuY3Rpb24gQTUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybiBlfX12YXIgWTI9e2V4cG9ydHM6e319Oy8qIQoJQ29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uCglMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQoJaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lcwoqLyhmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXt2YXIgdD17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBuKCl7Zm9yKHZhciBpPSIiLHM9MDtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXt2YXIgYT1hcmd1bWVudHNbc107YSYmKGk9byhpLHIoYSkpKX1yZXR1cm4gaX1mdW5jdGlvbiByKGkpe2lmKHR5cGVvZiBpPT0ic3RyaW5nInx8dHlwZW9mIGk9PSJudW1iZXIiKXJldHVybiBpO2lmKHR5cGVvZiBpIT0ib2JqZWN0IilyZXR1cm4iIjtpZihBcnJheS5pc0FycmF5KGkpKXJldHVybiBuLmFwcGx5KG51bGwsaSk7aWYoaS50b1N0cmluZyE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcmJiFpLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoIltuYXRpdmUgY29kZV0iKSlyZXR1cm4gaS50b1N0cmluZygpO3ZhciBzPSIiO2Zvcih2YXIgYSBpbiBpKXQuY2FsbChpLGEpJiZpW2FdJiYocz1vKHMsYSkpO3JldHVybiBzfWZ1bmN0aW9uIG8oaSxzKXtyZXR1cm4gcz9pP2krIiAiK3M6aStzOml9ZS5leHBvcnRzPyhuLmRlZmF1bHQ9bixlLmV4cG9ydHM9bik6d2luZG93LmNsYXNzTmFtZXM9bn0pKCl9KShZMik7dmFyIEQ1PVkyLmV4cG9ydHM7Y29uc3QgUXQ9c2koRDUpO2Z1bmN0aW9uIEYoKXtyZXR1cm4gRj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEk1KGUsdCl7dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplIT1udWxsJiYoZS5jdXJyZW50PXQpfWZ1bmN0aW9uIE9nKC4uLmUpe3JldHVybiB0PT5lLmZvckVhY2gobj0+STUobix0KSl9ZnVuY3Rpb24gcWUoLi4uZSl7cmV0dXJuIGgudXNlQ2FsbGJhY2soT2coLi4uZSksZSl9Y29uc3QgQWk9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7Y2hpbGRyZW46biwuLi5yfT1lLG89aC5DaGlsZHJlbi50b0FycmF5KG4pLGk9by5maW5kKGo1KTtpZihpKXtjb25zdCBzPWkucHJvcHMuY2hpbGRyZW4sYT1vLm1hcChsPT5sPT09aT9oLkNoaWxkcmVuLmNvdW50KHMpPjE/aC5DaGlsZHJlbi5vbmx5KG51bGwpOmguaXNWYWxpZEVsZW1lbnQocyk/cy5wcm9wcy5jaGlsZHJlbjpudWxsOmwpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQobngsRih7fSxyLHtyZWY6dH0pLGguaXNWYWxpZEVsZW1lbnQocyk/aC5jbG9uZUVsZW1lbnQocyx2b2lkIDAsYSk6bnVsbCl9cmV0dXJuIGguY3JlYXRlRWxlbWVudChueCxGKHt9LHIse3JlZjp0fSksbil9KTtBaS5kaXNwbGF5TmFtZT0iU2xvdCI7Y29uc3Qgbng9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7Y2hpbGRyZW46biwuLi5yfT1lO3JldHVybiBoLmlzVmFsaWRFbGVtZW50KG4pP2guY2xvbmVFbGVtZW50KG4sey4uLno1KHIsbi5wcm9wcykscmVmOnQ/T2codCxuLnJlZik6bi5yZWZ9KTpoLkNoaWxkcmVuLmNvdW50KG4pPjE/aC5DaGlsZHJlbi5vbmx5KG51bGwpOm51bGx9KTtueC5kaXNwbGF5TmFtZT0iU2xvdENsb25lIjtjb25zdCBMNT0oe2NoaWxkcmVuOmV9KT0+aC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxlKTtmdW5jdGlvbiBqNShlKXtyZXR1cm4gaC5pc1ZhbGlkRWxlbWVudChlKSYmZS50eXBlPT09TDV9ZnVuY3Rpb24gejUoZSx0KXtjb25zdCBuPXsuLi50fTtmb3IoY29uc3QgciBpbiB0KXtjb25zdCBvPWVbcl0saT10W3JdOy9eb25bQS1aXS8udGVzdChyKT9vJiZpP25bcl09KC4uLmEpPT57aSguLi5hKSxvKC4uLmEpfTpvJiYobltyXT1vKTpyPT09InN0eWxlIj9uW3JdPXsuLi5vLC4uLml9OnI9PT0iY2xhc3NOYW1lIiYmKG5bcl09W28saV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSl9cmV0dXJuey4uLmUsLi4ubn19Y29uc3QgRjU9WyJhIiwiYnV0dG9uIiwiZGl2IiwiZm9ybSIsImgyIiwiaDMiLCJpbWciLCJpbnB1dCIsImxhYmVsIiwibGkiLCJuYXYiLCJvbCIsInAiLCJzcGFuIiwic3ZnIiwidWwiXSxSZT1GNS5yZWR1Y2UoKGUsdCk9Pntjb25zdCBuPWguZm9yd2FyZFJlZigocixvKT0+e2NvbnN0e2FzQ2hpbGQ6aSwuLi5zfT1yLGE9aT9BaTp0O3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e3dpbmRvd1tTeW1ib2wuZm9yKCJyYWRpeC11aSIpXT0hMH0sW10pLGguY3JlYXRlRWxlbWVudChhLEYoe30scyx7cmVmOm99KSl9KTtyZXR1cm4gbi5kaXNwbGF5TmFtZT1gUHJpbWl0aXZlLiR7dH1gLHsuLi5lLFt0XTpufX0se30pO2Z1bmN0aW9uIFgyKGUsdCl7ZSYmJHIuZmx1c2hTeW5jKCgpPT5lLmRpc3BhdGNoRXZlbnQodCkpfWNvbnN0IFByPWdsb2JhbFRoaXMhPW51bGwmJmdsb2JhbFRoaXMuZG9jdW1lbnQ/aC51c2VMYXlvdXRFZmZlY3Q6KCk9Pnt9O2Z1bmN0aW9uIEI1KGUsdCl7cmV0dXJuIGgudXNlUmVkdWNlcigobixyKT0+e2NvbnN0IG89dFtuXVtyXTtyZXR1cm4gbz8/bn0sZSl9Y29uc3QgZXI9ZT0+e2NvbnN0e3ByZXNlbnQ6dCxjaGlsZHJlbjpufT1lLHI9VTUodCksbz10eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKHtwcmVzZW50OnIuaXNQcmVzZW50fSk6aC5DaGlsZHJlbi5vbmx5KG4pLGk9cWUoci5yZWYsby5yZWYpO3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uInx8ci5pc1ByZXNlbnQ/aC5jbG9uZUVsZW1lbnQobyx7cmVmOml9KTpudWxsfTtlci5kaXNwbGF5TmFtZT0iUHJlc2VuY2UiO2Z1bmN0aW9uIFU1KGUpe2NvbnN0W3Qsbl09aC51c2VTdGF0ZSgpLHI9aC51c2VSZWYoe30pLG89aC51c2VSZWYoZSksaT1oLnVzZVJlZigibm9uZSIpLHM9ZT8ibW91bnRlZCI6InVubW91bnRlZCIsW2EsbF09QjUocyx7bW91bnRlZDp7VU5NT1VOVDoidW5tb3VudGVkIixBTklNQVRJT05fT1VUOiJ1bm1vdW50U3VzcGVuZGVkIn0sdW5tb3VudFN1c3BlbmRlZDp7TU9VTlQ6Im1vdW50ZWQiLEFOSU1BVElPTl9FTkQ6InVubW91bnRlZCJ9LHVubW91bnRlZDp7TU9VTlQ6Im1vdW50ZWQifX0pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGM9RnAoci5jdXJyZW50KTtpLmN1cnJlbnQ9YT09PSJtb3VudGVkIj9jOiJub25lIn0sW2FdKSxQcigoKT0+e2NvbnN0IGM9ci5jdXJyZW50LHU9by5jdXJyZW50O2lmKHUhPT1lKXtjb25zdCBmPWkuY3VycmVudCxwPUZwKGMpO2U/bCgiTU9VTlQiKTpwPT09Im5vbmUifHwoYz09bnVsbD92b2lkIDA6Yy5kaXNwbGF5KT09PSJub25lIj9sKCJVTk1PVU5UIik6bCh1JiZmIT09cD8iQU5JTUFUSU9OX09VVCI6IlVOTU9VTlQiKSxvLmN1cnJlbnQ9ZX19LFtlLGxdKSxQcigoKT0+e2lmKHQpe2NvbnN0IGM9ZD0+e2NvbnN0IHA9RnAoci5jdXJyZW50KS5pbmNsdWRlcyhkLmFuaW1hdGlvbk5hbWUpO2QudGFyZ2V0PT09dCYmcCYmJHIuZmx1c2hTeW5jKCgpPT5sKCJBTklNQVRJT05fRU5EIikpfSx1PWQ9PntkLnRhcmdldD09PXQmJihpLmN1cnJlbnQ9RnAoci5jdXJyZW50KSl9O3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0Iix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmNhbmNlbCIsYyksdC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLGMpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25jYW5jZWwiLGMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIixjKX19ZWxzZSBsKCJBTklNQVRJT05fRU5EIil9LFt0LGxdKSx7aXNQcmVzZW50OlsibW91bnRlZCIsInVubW91bnRTdXNwZW5kZWQiXS5pbmNsdWRlcyhhKSxyZWY6aC51c2VDYWxsYmFjayhjPT57YyYmKHIuY3VycmVudD1nZXRDb21wdXRlZFN0eWxlKGMpKSxuKGMpfSxbXSl9fWZ1bmN0aW9uIEZwKGUpe3JldHVybihlPT1udWxsP3ZvaWQgMDplLmFuaW1hdGlvbk5hbWUpfHwibm9uZSJ9ZnVuY3Rpb24gdG8oZSx0PVtdKXtsZXQgbj1bXTtmdW5jdGlvbiByKGkscyl7Y29uc3QgYT1oLmNyZWF0ZUNvbnRleHQocyksbD1uLmxlbmd0aDtuPVsuLi5uLHNdO2Z1bmN0aW9uIGMoZCl7Y29uc3R7c2NvcGU6ZixjaGlsZHJlbjpwLC4uLm19PWQsZz0oZj09bnVsbD92b2lkIDA6ZltlXVtsXSl8fGEseT1oLnVzZU1lbW8oKCk9Pm0sT2JqZWN0LnZhbHVlcyhtKSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChnLlByb3ZpZGVyLHt2YWx1ZTp5fSxwKX1mdW5jdGlvbiB1KGQsZil7Y29uc3QgcD0oZj09bnVsbD92b2lkIDA6ZltlXVtsXSl8fGEsbT1oLnVzZUNvbnRleHQocCk7aWYobSlyZXR1cm4gbTtpZihzIT09dm9pZCAwKXJldHVybiBzO3Rocm93IG5ldyBFcnJvcihgXGAke2R9XGAgbXVzdCBiZSB1c2VkIHdpdGhpbiBcYCR7aX1cYGApfXJldHVybiBjLmRpc3BsYXlOYW1lPWkrIlByb3ZpZGVyIixbYyx1XX1jb25zdCBvPSgpPT57Y29uc3QgaT1uLm1hcChzPT5oLmNyZWF0ZUNvbnRleHQocykpO3JldHVybiBmdW5jdGlvbihhKXtjb25zdCBsPShhPT1udWxsP3ZvaWQgMDphW2VdKXx8aTtyZXR1cm4gaC51c2VNZW1vKCgpPT4oe1tgX19zY29wZSR7ZX1gXTp7Li4uYSxbZV06bH19KSxbYSxsXSl9fTtyZXR1cm4gby5zY29wZU5hbWU9ZSxbcixWNShvLC4uLnQpXX1mdW5jdGlvbiBWNSguLi5lKXtjb25zdCB0PWVbMF07aWYoZS5sZW5ndGg9PT0xKXJldHVybiB0O2NvbnN0IG49KCk9Pntjb25zdCByPWUubWFwKG89Pih7dXNlU2NvcGU6bygpLHNjb3BlTmFtZTpvLnNjb3BlTmFtZX0pKTtyZXR1cm4gZnVuY3Rpb24oaSl7Y29uc3Qgcz1yLnJlZHVjZSgoYSx7dXNlU2NvcGU6bCxzY29wZU5hbWU6Y30pPT57Y29uc3QgZD1sKGkpW2BfX3Njb3BlJHtjfWBdO3JldHVybnsuLi5hLC4uLmR9fSx7fSk7cmV0dXJuIGgudXNlTWVtbygoKT0+KHtbYF9fc2NvcGUke3Quc2NvcGVOYW1lfWBdOnN9KSxbc10pfX07cmV0dXJuIG4uc2NvcGVOYW1lPXQuc2NvcGVOYW1lLG59ZnVuY3Rpb24gcG4oZSl7Y29uc3QgdD1oLnVzZVJlZihlKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pnt0LmN1cnJlbnQ9ZX0pLGgudXNlTWVtbygoKT0+KC4uLm4pPT57dmFyIHI7cmV0dXJuKHI9dC5jdXJyZW50KT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY2FsbCh0LC4uLm4pfSxbXSl9Y29uc3QgSDU9aC5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gSmYoZSl7Y29uc3QgdD1oLnVzZUNvbnRleHQoSDUpO3JldHVybiBlfHx0fHwibHRyIn1mdW5jdGlvbiByeChlLFt0LG5dKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heCh0LGUpKX1mdW5jdGlvbiBhZShlLHQse2NoZWNrRm9yRGVmYXVsdFByZXZlbnRlZDpuPSEwfT17fSl7cmV0dXJuIGZ1bmN0aW9uKG8pe2lmKGU9PW51bGx8fGUobyksbj09PSExfHwhby5kZWZhdWx0UHJldmVudGVkKXJldHVybiB0PT1udWxsP3ZvaWQgMDp0KG8pfX1mdW5jdGlvbiBXNShlLHQpe3JldHVybiBoLnVzZVJlZHVjZXIoKG4scik9Pntjb25zdCBvPXRbbl1bcl07cmV0dXJuIG8/P259LGUpfWNvbnN0IFoyPSJTY3JvbGxBcmVhIixbSjIsWGxlXT10byhaMiksW0s1LG5vXT1KMihaMikscTU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bix0eXBlOnI9ImhvdmVyIixkaXI6byxzY3JvbGxIaWRlRGVsYXk6aT02MDAsLi4uc309ZSxbYSxsXT1oLnVzZVN0YXRlKG51bGwpLFtjLHVdPWgudXNlU3RhdGUobnVsbCksW2QsZl09aC51c2VTdGF0ZShudWxsKSxbcCxtXT1oLnVzZVN0YXRlKG51bGwpLFtnLHldPWgudXNlU3RhdGUobnVsbCksW3YseF09aC51c2VTdGF0ZSgwKSxbdyxrXT1oLnVzZVN0YXRlKDApLFtFLFNdPWgudXNlU3RhdGUoITEpLFtfLFBdPWgudXNlU3RhdGUoITEpLE09cWUodCxJPT5sKEkpKSxBPUpmKG8pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoSzUse3Njb3BlOm4sdHlwZTpyLGRpcjpBLHNjcm9sbEhpZGVEZWxheTppLHNjcm9sbEFyZWE6YSx2aWV3cG9ydDpjLG9uVmlld3BvcnRDaGFuZ2U6dSxjb250ZW50OmQsb25Db250ZW50Q2hhbmdlOmYsc2Nyb2xsYmFyWDpwLG9uU2Nyb2xsYmFyWENoYW5nZTptLHNjcm9sbGJhclhFbmFibGVkOkUsb25TY3JvbGxiYXJYRW5hYmxlZENoYW5nZTpTLHNjcm9sbGJhclk6ZyxvblNjcm9sbGJhcllDaGFuZ2U6eSxzY3JvbGxiYXJZRW5hYmxlZDpfLG9uU2Nyb2xsYmFyWUVuYWJsZWRDaGFuZ2U6UCxvbkNvcm5lcldpZHRoQ2hhbmdlOngsb25Db3JuZXJIZWlnaHRDaGFuZ2U6a30saC5jcmVhdGVFbGVtZW50KFJlLmRpdixGKHtkaXI6QX0scyx7cmVmOk0sc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLXdpZHRoIjp2KyJweCIsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLWhlaWdodCI6dysicHgiLC4uLmUuc3R5bGV9fSkpKX0pLEc1PSJTY3JvbGxBcmVhVmlld3BvcnQiLFk1PWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sY2hpbGRyZW46ciwuLi5vfT1lLGk9bm8oRzUsbikscz1oLnVzZVJlZihudWxsKSxhPXFlKHQscyxpLm9uVmlld3BvcnRDaGFuZ2UpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoaC5GcmFnbWVudCxudWxsLGguY3JlYXRlRWxlbWVudCgic3R5bGUiLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOiJbZGF0YS1yYWRpeC1zY3JvbGwtYXJlYS12aWV3cG9ydF17c2Nyb2xsYmFyLXdpZHRoOm5vbmU7LW1zLW92ZXJmbG93LXN0eWxlOm5vbmU7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7fVtkYXRhLXJhZGl4LXNjcm9sbC1hcmVhLXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfSJ9fSksaC5jcmVhdGVFbGVtZW50KFJlLmRpdixGKHsiZGF0YS1yYWRpeC1zY3JvbGwtYXJlYS12aWV3cG9ydCI6IiJ9LG8se3JlZjphLHN0eWxlOntvdmVyZmxvd1g6aS5zY3JvbGxiYXJYRW5hYmxlZD8ic2Nyb2xsIjoiaGlkZGVuIixvdmVyZmxvd1k6aS5zY3JvbGxiYXJZRW5hYmxlZD8ic2Nyb2xsIjoiaGlkZGVuIiwuLi5lLnN0eWxlfX0pLGguY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmkub25Db250ZW50Q2hhbmdlLHN0eWxlOnttaW5XaWR0aDoiMTAwJSIsZGlzcGxheToidGFibGUifX0scikpKX0pLFVpPSJTY3JvbGxBcmVhU2Nyb2xsYmFyIixRMj1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09ZSxvPW5vKFVpLGUuX19zY29wZVNjcm9sbEFyZWEpLHtvblNjcm9sbGJhclhFbmFibGVkQ2hhbmdlOmksb25TY3JvbGxiYXJZRW5hYmxlZENoYW5nZTpzfT1vLGE9ZS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIjtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PihhP2koITApOnMoITApLCgpPT57YT9pKCExKTpzKCExKX0pLFthLGksc10pLG8udHlwZT09PSJob3ZlciI/aC5jcmVhdGVFbGVtZW50KFg1LEYoe30scix7cmVmOnQsZm9yY2VNb3VudDpufSkpOm8udHlwZT09PSJzY3JvbGwiP2guY3JlYXRlRWxlbWVudChaNSxGKHt9LHIse3JlZjp0LGZvcmNlTW91bnQ6bn0pKTpvLnR5cGU9PT0iYXV0byI/aC5jcmVhdGVFbGVtZW50KGVQLEYoe30scix7cmVmOnQsZm9yY2VNb3VudDpufSkpOm8udHlwZT09PSJhbHdheXMiP2guY3JlYXRlRWxlbWVudChTMSxGKHt9LHIse3JlZjp0fSkpOm51bGx9KSxYNT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09ZSxvPW5vKFVpLGUuX19zY29wZVNjcm9sbEFyZWEpLFtpLHNdPWgudXNlU3RhdGUoITEpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGE9by5zY3JvbGxBcmVhO2xldCBsPTA7aWYoYSl7Y29uc3QgYz0oKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQobCkscyghMCl9LHU9KCk9PntsPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT5zKCExKSxvLnNjcm9sbEhpZGVEZWxheSl9O3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsYyksYS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLHUpLCgpPT57d2luZG93LmNsZWFyVGltZW91dChsKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsYyksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLHUpfX19LFtvLnNjcm9sbEFyZWEsby5zY3JvbGxIaWRlRGVsYXldKSxoLmNyZWF0ZUVsZW1lbnQoZXIse3ByZXNlbnQ6bnx8aX0saC5jcmVhdGVFbGVtZW50KGVQLEYoeyJkYXRhLXN0YXRlIjppPyJ2aXNpYmxlIjoiaGlkZGVuIn0scix7cmVmOnR9KSkpfSksWjU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PWUsbz1ubyhVaSxlLl9fc2NvcGVTY3JvbGxBcmVhKSxpPWUub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCIscz1QZygoKT0+bCgiU0NST0xMX0VORCIpLDEwMCksW2EsbF09VzUoImhpZGRlbiIse2hpZGRlbjp7U0NST0xMOiJzY3JvbGxpbmcifSxzY3JvbGxpbmc6e1NDUk9MTF9FTkQ6ImlkbGUiLFBPSU5URVJfRU5URVI6ImludGVyYWN0aW5nIn0saW50ZXJhY3Rpbmc6e1NDUk9MTDoiaW50ZXJhY3RpbmciLFBPSU5URVJfTEVBVkU6ImlkbGUifSxpZGxlOntISURFOiJoaWRkZW4iLFNDUk9MTDoic2Nyb2xsaW5nIixQT0lOVEVSX0VOVEVSOiJpbnRlcmFjdGluZyJ9fSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57aWYoYT09PSJpZGxlIil7Y29uc3QgYz13aW5kb3cuc2V0VGltZW91dCgoKT0+bCgiSElERSIpLG8uc2Nyb2xsSGlkZURlbGF5KTtyZXR1cm4oKT0+d2luZG93LmNsZWFyVGltZW91dChjKX19LFthLG8uc2Nyb2xsSGlkZURlbGF5LGxdKSxoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGM9by52aWV3cG9ydCx1PWk/InNjcm9sbExlZnQiOiJzY3JvbGxUb3AiO2lmKGMpe2xldCBkPWNbdV07Y29uc3QgZj0oKT0+e2NvbnN0IHA9Y1t1XTtkIT09cCYmKGwoIlNDUk9MTCIpLHMoKSksZD1wfTtyZXR1cm4gYy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGYpLCgpPT5jLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZil9fSxbby52aWV3cG9ydCxpLGwsc10pLGguY3JlYXRlRWxlbWVudChlcix7cHJlc2VudDpufHxhIT09ImhpZGRlbiJ9LGguY3JlYXRlRWxlbWVudChTMSxGKHsiZGF0YS1zdGF0ZSI6YT09PSJoaWRkZW4iPyJoaWRkZW4iOiJ2aXNpYmxlIn0scix7cmVmOnQsb25Qb2ludGVyRW50ZXI6YWUoZS5vblBvaW50ZXJFbnRlciwoKT0+bCgiUE9JTlRFUl9FTlRFUiIpKSxvblBvaW50ZXJMZWF2ZTphZShlLm9uUG9pbnRlckxlYXZlLCgpPT5sKCJQT0lOVEVSX0xFQVZFIikpfSkpKX0pLGVQPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49bm8oVWksZS5fX3Njb3BlU2Nyb2xsQXJlYSkse2ZvcmNlTW91bnQ6ciwuLi5vfT1lLFtpLHNdPWgudXNlU3RhdGUoITEpLGE9ZS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIixsPVBnKCgpPT57aWYobi52aWV3cG9ydCl7Y29uc3QgYz1uLnZpZXdwb3J0Lm9mZnNldFdpZHRoPG4udmlld3BvcnQuc2Nyb2xsV2lkdGgsdT1uLnZpZXdwb3J0Lm9mZnNldEhlaWdodDxuLnZpZXdwb3J0LnNjcm9sbEhlaWdodDtzKGE/Yzp1KX19LDEwKTtyZXR1cm4gemMobi52aWV3cG9ydCxsKSx6YyhuLmNvbnRlbnQsbCksaC5jcmVhdGVFbGVtZW50KGVyLHtwcmVzZW50OnJ8fGl9LGguY3JlYXRlRWxlbWVudChTMSxGKHsiZGF0YS1zdGF0ZSI6aT8idmlzaWJsZSI6ImhpZGRlbiJ9LG8se3JlZjp0fSkpKX0pLFMxPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e29yaWVudGF0aW9uOm49InZlcnRpY2FsIiwuLi5yfT1lLG89bm8oVWksZS5fX3Njb3BlU2Nyb2xsQXJlYSksaT1oLnVzZVJlZihudWxsKSxzPWgudXNlUmVmKDApLFthLGxdPWgudXNlU3RhdGUoe2NvbnRlbnQ6MCx2aWV3cG9ydDowLHNjcm9sbGJhcjp7c2l6ZTowLHBhZGRpbmdTdGFydDowLHBhZGRpbmdFbmQ6MH19KSxjPW9QKGEudmlld3BvcnQsYS5jb250ZW50KSx1PXsuLi5yLHNpemVzOmEsb25TaXplc0NoYW5nZTpsLGhhc1RodW1iOmM+MCYmYzwxLG9uVGh1bWJDaGFuZ2U6Zj0+aS5jdXJyZW50PWYsb25UaHVtYlBvaW50ZXJVcDooKT0+cy5jdXJyZW50PTAsb25UaHVtYlBvaW50ZXJEb3duOmY9PnMuY3VycmVudD1mfTtmdW5jdGlvbiBkKGYscCl7cmV0dXJuIGk0KGYscy5jdXJyZW50LGEscCl9cmV0dXJuIG49PT0iaG9yaXpvbnRhbCI/aC5jcmVhdGVFbGVtZW50KEo1LEYoe30sdSx7cmVmOnQsb25UaHVtYlBvc2l0aW9uQ2hhbmdlOigpPT57aWYoby52aWV3cG9ydCYmaS5jdXJyZW50KXtjb25zdCBmPW8udmlld3BvcnQuc2Nyb2xsTGVmdCxwPVZrKGYsYSxvLmRpcik7aS5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtwfXB4LCAwLCAwKWB9fSxvbldoZWVsU2Nyb2xsOmY9PntvLnZpZXdwb3J0JiYoby52aWV3cG9ydC5zY3JvbGxMZWZ0PWYpfSxvbkRyYWdTY3JvbGw6Zj0+e28udmlld3BvcnQmJihvLnZpZXdwb3J0LnNjcm9sbExlZnQ9ZChmLG8uZGlyKSl9fSkpOm49PT0idmVydGljYWwiP2guY3JlYXRlRWxlbWVudChRNSxGKHt9LHUse3JlZjp0LG9uVGh1bWJQb3NpdGlvbkNoYW5nZTooKT0+e2lmKG8udmlld3BvcnQmJmkuY3VycmVudCl7Y29uc3QgZj1vLnZpZXdwb3J0LnNjcm9sbFRvcCxwPVZrKGYsYSk7aS5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoMCwgJHtwfXB4LCAwKWB9fSxvbldoZWVsU2Nyb2xsOmY9PntvLnZpZXdwb3J0JiYoby52aWV3cG9ydC5zY3JvbGxUb3A9Zil9LG9uRHJhZ1Njcm9sbDpmPT57by52aWV3cG9ydCYmKG8udmlld3BvcnQuc2Nyb2xsVG9wPWQoZikpfX0pKTpudWxsfSksSjU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7c2l6ZXM6bixvblNpemVzQ2hhbmdlOnIsLi4ub309ZSxpPW5vKFVpLGUuX19zY29wZVNjcm9sbEFyZWEpLFtzLGFdPWgudXNlU3RhdGUoKSxsPWgudXNlUmVmKG51bGwpLGM9cWUodCxsLGkub25TY3JvbGxiYXJYQ2hhbmdlKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntsLmN1cnJlbnQmJmEoZ2V0Q29tcHV0ZWRTdHlsZShsLmN1cnJlbnQpKX0sW2xdKSxoLmNyZWF0ZUVsZW1lbnQoblAsRih7ImRhdGEtb3JpZW50YXRpb24iOiJob3Jpem9udGFsIn0sbyx7cmVmOmMsc2l6ZXM6bixzdHlsZTp7Ym90dG9tOjAsbGVmdDppLmRpcj09PSJydGwiPyJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItd2lkdGgpIjowLHJpZ2h0OmkuZGlyPT09Imx0ciI/InZhcigtLXJhZGl4LXNjcm9sbC1hcmVhLWNvcm5lci13aWR0aCkiOjAsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtdGh1bWItd2lkdGgiOlRnKG4pKyJweCIsLi4uZS5zdHlsZX0sb25UaHVtYlBvaW50ZXJEb3duOnU9PmUub25UaHVtYlBvaW50ZXJEb3duKHUueCksb25EcmFnU2Nyb2xsOnU9PmUub25EcmFnU2Nyb2xsKHUueCksb25XaGVlbFNjcm9sbDoodSxkKT0+e2lmKGkudmlld3BvcnQpe2NvbnN0IGY9aS52aWV3cG9ydC5zY3JvbGxMZWZ0K3UuZGVsdGFYO2Uub25XaGVlbFNjcm9sbChmKSxzUChmLGQpJiZ1LnByZXZlbnREZWZhdWx0KCl9fSxvblJlc2l6ZTooKT0+e2wuY3VycmVudCYmaS52aWV3cG9ydCYmcyYmcih7Y29udGVudDppLnZpZXdwb3J0LnNjcm9sbFdpZHRoLHZpZXdwb3J0Omkudmlld3BvcnQub2Zmc2V0V2lkdGgsc2Nyb2xsYmFyOntzaXplOmwuY3VycmVudC5jbGllbnRXaWR0aCxwYWRkaW5nU3RhcnQ6c20ocy5wYWRkaW5nTGVmdCkscGFkZGluZ0VuZDpzbShzLnBhZGRpbmdSaWdodCl9fSl9fSkpfSksUTU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7c2l6ZXM6bixvblNpemVzQ2hhbmdlOnIsLi4ub309ZSxpPW5vKFVpLGUuX19zY29wZVNjcm9sbEFyZWEpLFtzLGFdPWgudXNlU3RhdGUoKSxsPWgudXNlUmVmKG51bGwpLGM9cWUodCxsLGkub25TY3JvbGxiYXJZQ2hhbmdlKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntsLmN1cnJlbnQmJmEoZ2V0Q29tcHV0ZWRTdHlsZShsLmN1cnJlbnQpKX0sW2xdKSxoLmNyZWF0ZUVsZW1lbnQoblAsRih7ImRhdGEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCJ9LG8se3JlZjpjLHNpemVzOm4sc3R5bGU6e3RvcDowLHJpZ2h0OmkuZGlyPT09Imx0ciI/MDp2b2lkIDAsbGVmdDppLmRpcj09PSJydGwiPzA6dm9pZCAwLGJvdHRvbToidmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLWhlaWdodCkiLCItLXJhZGl4LXNjcm9sbC1hcmVhLXRodW1iLWhlaWdodCI6VGcobikrInB4IiwuLi5lLnN0eWxlfSxvblRodW1iUG9pbnRlckRvd246dT0+ZS5vblRodW1iUG9pbnRlckRvd24odS55KSxvbkRyYWdTY3JvbGw6dT0+ZS5vbkRyYWdTY3JvbGwodS55KSxvbldoZWVsU2Nyb2xsOih1LGQpPT57aWYoaS52aWV3cG9ydCl7Y29uc3QgZj1pLnZpZXdwb3J0LnNjcm9sbFRvcCt1LmRlbHRhWTtlLm9uV2hlZWxTY3JvbGwoZiksc1AoZixkKSYmdS5wcmV2ZW50RGVmYXVsdCgpfX0sb25SZXNpemU6KCk9PntsLmN1cnJlbnQmJmkudmlld3BvcnQmJnMmJnIoe2NvbnRlbnQ6aS52aWV3cG9ydC5zY3JvbGxIZWlnaHQsdmlld3BvcnQ6aS52aWV3cG9ydC5vZmZzZXRIZWlnaHQsc2Nyb2xsYmFyOntzaXplOmwuY3VycmVudC5jbGllbnRIZWlnaHQscGFkZGluZ1N0YXJ0OnNtKHMucGFkZGluZ1RvcCkscGFkZGluZ0VuZDpzbShzLnBhZGRpbmdCb3R0b20pfX0pfX0pKX0pLFtlNCx0UF09SjIoVWkpLG5QPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sc2l6ZXM6cixoYXNUaHVtYjpvLG9uVGh1bWJDaGFuZ2U6aSxvblRodW1iUG9pbnRlclVwOnMsb25UaHVtYlBvaW50ZXJEb3duOmEsb25UaHVtYlBvc2l0aW9uQ2hhbmdlOmwsb25EcmFnU2Nyb2xsOmMsb25XaGVlbFNjcm9sbDp1LG9uUmVzaXplOmQsLi4uZn09ZSxwPW5vKFVpLG4pLFttLGddPWgudXNlU3RhdGUobnVsbCkseT1xZSh0LE09PmcoTSkpLHY9aC51c2VSZWYobnVsbCkseD1oLnVzZVJlZigiIiksdz1wLnZpZXdwb3J0LGs9ci5jb250ZW50LXIudmlld3BvcnQsRT1wbih1KSxTPXBuKGwpLF89UGcoZCwxMCk7ZnVuY3Rpb24gUChNKXtpZih2LmN1cnJlbnQpe2NvbnN0IEE9TS5jbGllbnRYLXYuY3VycmVudC5sZWZ0LEk9TS5jbGllbnRZLXYuY3VycmVudC50b3A7Yyh7eDpBLHk6SX0pfX1yZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBNPUE9Pntjb25zdCBJPUEudGFyZ2V0OyhtPT1udWxsP3ZvaWQgMDptLmNvbnRhaW5zKEkpKSYmRShBLGspfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0se3Bhc3NpdmU6ITF9KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0se3Bhc3NpdmU6ITF9KX0sW3csbSxrLEVdKSxoLnVzZUVmZmVjdChTLFtyLFNdKSx6YyhtLF8pLHpjKHAuY29udGVudCxfKSxoLmNyZWF0ZUVsZW1lbnQoZTQse3Njb3BlOm4sc2Nyb2xsYmFyOm0saGFzVGh1bWI6byxvblRodW1iQ2hhbmdlOnBuKGkpLG9uVGh1bWJQb2ludGVyVXA6cG4ocyksb25UaHVtYlBvc2l0aW9uQ2hhbmdlOlMsb25UaHVtYlBvaW50ZXJEb3duOnBuKGEpfSxoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoe30sZix7cmVmOnksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsLi4uZi5zdHlsZX0sb25Qb2ludGVyRG93bjphZShlLm9uUG9pbnRlckRvd24sTT0+e00uYnV0dG9uPT09MCYmKE0udGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKE0ucG9pbnRlcklkKSx2LmN1cnJlbnQ9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4LmN1cnJlbnQ9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0LGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIscC52aWV3cG9ydCYmKHAudmlld3BvcnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iKSxQKE0pKX0pLG9uUG9pbnRlck1vdmU6YWUoZS5vblBvaW50ZXJNb3ZlLFApLG9uUG9pbnRlclVwOmFlKGUub25Qb2ludGVyVXAsTT0+e2NvbnN0IEE9TS50YXJnZXQ7QS5oYXNQb2ludGVyQ2FwdHVyZShNLnBvaW50ZXJJZCkmJkEucmVsZWFzZVBvaW50ZXJDYXB0dXJlKE0ucG9pbnRlcklkKSxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9eC5jdXJyZW50LHAudmlld3BvcnQmJihwLnZpZXdwb3J0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPSIiKSx2LmN1cnJlbnQ9bnVsbH0pfSkpKX0pLG94PSJTY3JvbGxBcmVhVGh1bWIiLHQ0PWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e2ZvcmNlTW91bnQ6biwuLi5yfT1lLG89dFAob3gsZS5fX3Njb3BlU2Nyb2xsQXJlYSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChlcix7cHJlc2VudDpufHxvLmhhc1RodW1ifSxoLmNyZWF0ZUVsZW1lbnQobjQsRih7cmVmOnR9LHIpKSl9KSxuND1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2Nyb2xsQXJlYTpuLHN0eWxlOnIsLi4ub309ZSxpPW5vKG94LG4pLHM9dFAob3gsbikse29uVGh1bWJQb3NpdGlvbkNoYW5nZTphfT1zLGw9cWUodCxkPT5zLm9uVGh1bWJDaGFuZ2UoZCkpLGM9aC51c2VSZWYoKSx1PVBnKCgpPT57Yy5jdXJyZW50JiYoYy5jdXJyZW50KCksYy5jdXJyZW50PXZvaWQgMCl9LDEwMCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57Y29uc3QgZD1pLnZpZXdwb3J0O2lmKGQpe2NvbnN0IGY9KCk9PntpZih1KCksIWMuY3VycmVudCl7Y29uc3QgcD1zNChkLGEpO2MuY3VycmVudD1wLGEoKX19O3JldHVybiBhKCksZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGYpLCgpPT5kLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZil9fSxbaS52aWV3cG9ydCx1LGFdKSxoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoeyJkYXRhLXN0YXRlIjpzLmhhc1RodW1iPyJ2aXNpYmxlIjoiaGlkZGVuIn0sbyx7cmVmOmwsc3R5bGU6e3dpZHRoOiJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS10aHVtYi13aWR0aCkiLGhlaWdodDoidmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtdGh1bWItaGVpZ2h0KSIsLi4ucn0sb25Qb2ludGVyRG93bkNhcHR1cmU6YWUoZS5vblBvaW50ZXJEb3duQ2FwdHVyZSxkPT57Y29uc3QgcD1kLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPWQuY2xpZW50WC1wLmxlZnQsZz1kLmNsaWVudFktcC50b3A7cy5vblRodW1iUG9pbnRlckRvd24oe3g6bSx5Omd9KX0pLG9uUG9pbnRlclVwOmFlKGUub25Qb2ludGVyVXAscy5vblRodW1iUG9pbnRlclVwKX0pKX0pLHJQPSJTY3JvbGxBcmVhQ29ybmVyIixyND1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdCBuPW5vKHJQLGUuX19zY29wZVNjcm9sbEFyZWEpLHI9ISEobi5zY3JvbGxiYXJYJiZuLnNjcm9sbGJhclkpO3JldHVybiBuLnR5cGUhPT0ic2Nyb2xsIiYmcj9oLmNyZWF0ZUVsZW1lbnQobzQsRih7fSxlLHtyZWY6dH0pKTpudWxsfSksbzQ9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6biwuLi5yfT1lLG89bm8oclAsbiksW2ksc109aC51c2VTdGF0ZSgwKSxbYSxsXT1oLnVzZVN0YXRlKDApLGM9ISEoaSYmYSk7cmV0dXJuIHpjKG8uc2Nyb2xsYmFyWCwoKT0+e3ZhciB1O2NvbnN0IGQ9KCh1PW8uc2Nyb2xsYmFyWCk9PT1udWxsfHx1PT09dm9pZCAwP3ZvaWQgMDp1Lm9mZnNldEhlaWdodCl8fDA7by5vbkNvcm5lckhlaWdodENoYW5nZShkKSxsKGQpfSksemMoby5zY3JvbGxiYXJZLCgpPT57dmFyIHU7Y29uc3QgZD0oKHU9by5zY3JvbGxiYXJZKT09PW51bGx8fHU9PT12b2lkIDA/dm9pZCAwOnUub2Zmc2V0V2lkdGgpfHwwO28ub25Db3JuZXJXaWR0aENoYW5nZShkKSxzKGQpfSksYz9oLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoe30scix7cmVmOnQsc3R5bGU6e3dpZHRoOmksaGVpZ2h0OmEscG9zaXRpb246ImFic29sdXRlIixyaWdodDpvLmRpcj09PSJsdHIiPzA6dm9pZCAwLGxlZnQ6by5kaXI9PT0icnRsIj8wOnZvaWQgMCxib3R0b206MCwuLi5lLnN0eWxlfX0pKTpudWxsfSk7ZnVuY3Rpb24gc20oZSl7cmV0dXJuIGU/cGFyc2VJbnQoZSwxMCk6MH1mdW5jdGlvbiBvUChlLHQpe2NvbnN0IG49ZS90O3JldHVybiBpc05hTihuKT8wOm59ZnVuY3Rpb24gVGcoZSl7Y29uc3QgdD1vUChlLnZpZXdwb3J0LGUuY29udGVudCksbj1lLnNjcm9sbGJhci5wYWRkaW5nU3RhcnQrZS5zY3JvbGxiYXIucGFkZGluZ0VuZCxyPShlLnNjcm9sbGJhci5zaXplLW4pKnQ7cmV0dXJuIE1hdGgubWF4KHIsMTgpfWZ1bmN0aW9uIGk0KGUsdCxuLHI9Imx0ciIpe2NvbnN0IG89VGcobiksaT1vLzIscz10fHxpLGE9by1zLGw9bi5zY3JvbGxiYXIucGFkZGluZ1N0YXJ0K3MsYz1uLnNjcm9sbGJhci5zaXplLW4uc2Nyb2xsYmFyLnBhZGRpbmdFbmQtYSx1PW4uY29udGVudC1uLnZpZXdwb3J0LGQ9cj09PSJsdHIiP1swLHVdOlt1Ki0xLDBdO3JldHVybiBpUChbbCxjXSxkKShlKX1mdW5jdGlvbiBWayhlLHQsbj0ibHRyIil7Y29uc3Qgcj1UZyh0KSxvPXQuc2Nyb2xsYmFyLnBhZGRpbmdTdGFydCt0LnNjcm9sbGJhci5wYWRkaW5nRW5kLGk9dC5zY3JvbGxiYXIuc2l6ZS1vLHM9dC5jb250ZW50LXQudmlld3BvcnQsYT1pLXIsbD1uPT09Imx0ciI/WzAsc106W3MqLTEsMF0sYz1yeChlLGwpO3JldHVybiBpUChbMCxzXSxbMCxhXSkoYyl9ZnVuY3Rpb24gaVAoZSx0KXtyZXR1cm4gbj0+e2lmKGVbMF09PT1lWzFdfHx0WzBdPT09dFsxXSlyZXR1cm4gdFswXTtjb25zdCByPSh0WzFdLXRbMF0pLyhlWzFdLWVbMF0pO3JldHVybiB0WzBdK3IqKG4tZVswXSl9fWZ1bmN0aW9uIHNQKGUsdCl7cmV0dXJuIGU+MCYmZTx0fWNvbnN0IHM0PShlLHQ9KCk9Pnt9KT0+e2xldCBuPXtsZWZ0OmUuc2Nyb2xsTGVmdCx0b3A6ZS5zY3JvbGxUb3B9LHI9MDtyZXR1cm4gZnVuY3Rpb24gbygpe2NvbnN0IGk9e2xlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0scz1uLmxlZnQhPT1pLmxlZnQsYT1uLnRvcCE9PWkudG9wOyhzfHxhKSYmdCgpLG49aSxyPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyl9KCksKCk9PndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyKX07ZnVuY3Rpb24gUGcoZSx0KXtjb25zdCBuPXBuKGUpLHI9aC51c2VSZWYoMCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT4oKT0+d2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLFtdKSxoLnVzZUNhbGxiYWNrKCgpPT57d2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLHIuY3VycmVudD13aW5kb3cuc2V0VGltZW91dChuLHQpfSxbbix0XSl9ZnVuY3Rpb24gemMoZSx0KXtjb25zdCBuPXBuKHQpO1ByKCgpPT57bGV0IHI9MDtpZihlKXtjb25zdCBvPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e2NhbmNlbEFuaW1hdGlvbkZyYW1lKHIpLHI9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pO3JldHVybiBvLm9ic2VydmUoZSksKCk9Pnt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUociksby51bm9ic2VydmUoZSl9fX0sW2Usbl0pfWNvbnN0IGFQPXE1LGE0PVk1LGw0PXI0O2Z1bmN0aW9uIGxQKGUpe3ZhciB0LG4scj0iIjtpZih0eXBlb2YgZT09InN0cmluZyJ8fHR5cGVvZiBlPT0ibnVtYmVyIilyKz1lO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBvPWUubGVuZ3RoO2Zvcih0PTA7dDxvO3QrKyllW3RdJiYobj1sUChlW3RdKSkmJihyJiYocis9IiAiKSxyKz1uKX1lbHNlIGZvcihuIGluIGUpZVtuXSYmKHImJihyKz0iICIpLHIrPW4pO3JldHVybiByfWZ1bmN0aW9uIGM0KCl7Zm9yKHZhciBlLHQsbj0wLHI9IiIsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspKGU9YXJndW1lbnRzW25dKSYmKHQ9bFAoZSkpJiYociYmKHIrPSIgIikscis9dCk7cmV0dXJuIHJ9Y29uc3QgazE9Ii0iO2Z1bmN0aW9uIHU0KGUpe2NvbnN0IHQ9ZjQoZSkse2NvbmZsaWN0aW5nQ2xhc3NHcm91cHM6bixjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6cn09ZTtmdW5jdGlvbiBvKHMpe2NvbnN0IGE9cy5zcGxpdChrMSk7cmV0dXJuIGFbMF09PT0iIiYmYS5sZW5ndGghPT0xJiZhLnNoaWZ0KCksY1AoYSx0KXx8ZDQocyl9ZnVuY3Rpb24gaShzLGEpe2NvbnN0IGw9bltzXXx8W107cmV0dXJuIGEmJnJbc10/Wy4uLmwsLi4ucltzXV06bH1yZXR1cm57Z2V0Q2xhc3NHcm91cElkOm8sZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzOml9fWZ1bmN0aW9uIGNQKGUsdCl7dmFyIHM7aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0LmNsYXNzR3JvdXBJZDtjb25zdCBuPWVbMF0scj10Lm5leHRQYXJ0LmdldChuKSxvPXI/Y1AoZS5zbGljZSgxKSxyKTp2b2lkIDA7aWYobylyZXR1cm4gbztpZih0LnZhbGlkYXRvcnMubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgaT1lLmpvaW4oazEpO3JldHVybihzPXQudmFsaWRhdG9ycy5maW5kKCh7dmFsaWRhdG9yOmF9KT0+YShpKSkpPT1udWxsP3ZvaWQgMDpzLmNsYXNzR3JvdXBJZH1jb25zdCBIaz0vXlxbKC4rKVxdJC87ZnVuY3Rpb24gZDQoZSl7aWYoSGsudGVzdChlKSl7Y29uc3QgdD1Iay5leGVjKGUpWzFdLG49dD09bnVsbD92b2lkIDA6dC5zdWJzdHJpbmcoMCx0LmluZGV4T2YoIjoiKSk7aWYobilyZXR1cm4iYXJiaXRyYXJ5Li4iK259fWZ1bmN0aW9uIGY0KGUpe2NvbnN0e3RoZW1lOnQscHJlZml4Om59PWUscj17bmV4dFBhcnQ6bmV3IE1hcCx2YWxpZGF0b3JzOltdfTtyZXR1cm4gaDQoT2JqZWN0LmVudHJpZXMoZS5jbGFzc0dyb3VwcyksbikuZm9yRWFjaCgoW2ksc10pPT57aXgocyxyLGksdCl9KSxyfWZ1bmN0aW9uIGl4KGUsdCxuLHIpe2UuZm9yRWFjaChvPT57aWYodHlwZW9mIG89PSJzdHJpbmciKXtjb25zdCBpPW89PT0iIj90OldrKHQsbyk7aS5jbGFzc0dyb3VwSWQ9bjtyZXR1cm59aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpe2lmKHA0KG8pKXtpeChvKHIpLHQsbixyKTtyZXR1cm59dC52YWxpZGF0b3JzLnB1c2goe3ZhbGlkYXRvcjpvLGNsYXNzR3JvdXBJZDpufSk7cmV0dXJufU9iamVjdC5lbnRyaWVzKG8pLmZvckVhY2goKFtpLHNdKT0+e2l4KHMsV2sodCxpKSxuLHIpfSl9KX1mdW5jdGlvbiBXayhlLHQpe2xldCBuPWU7cmV0dXJuIHQuc3BsaXQoazEpLmZvckVhY2gocj0+e24ubmV4dFBhcnQuaGFzKHIpfHxuLm5leHRQYXJ0LnNldChyLHtuZXh0UGFydDpuZXcgTWFwLHZhbGlkYXRvcnM6W119KSxuPW4ubmV4dFBhcnQuZ2V0KHIpfSksbn1mdW5jdGlvbiBwNChlKXtyZXR1cm4gZS5pc1RoZW1lR2V0dGVyfWZ1bmN0aW9uIGg0KGUsdCl7cmV0dXJuIHQ/ZS5tYXAoKFtuLHJdKT0+e2NvbnN0IG89ci5tYXAoaT0+dHlwZW9mIGk9PSJzdHJpbmciP3QraTp0eXBlb2YgaT09Im9iamVjdCI/T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGkpLm1hcCgoW3MsYV0pPT5bdCtzLGFdKSk6aSk7cmV0dXJuW24sb119KTplfWZ1bmN0aW9uIG00KGUpe2lmKGU8MSlyZXR1cm57Z2V0OigpPT57fSxzZXQ6KCk9Pnt9fTtsZXQgdD0wLG49bmV3IE1hcCxyPW5ldyBNYXA7ZnVuY3Rpb24gbyhpLHMpe24uc2V0KGkscyksdCsrLHQ+ZSYmKHQ9MCxyPW4sbj1uZXcgTWFwKX1yZXR1cm57Z2V0KGkpe2xldCBzPW4uZ2V0KGkpO2lmKHMhPT12b2lkIDApcmV0dXJuIHM7aWYoKHM9ci5nZXQoaSkpIT09dm9pZCAwKXJldHVybiBvKGkscyksc30sc2V0KGkscyl7bi5oYXMoaSk/bi5zZXQoaSxzKTpvKGkscyl9fX1jb25zdCB1UD0iISI7ZnVuY3Rpb24gZzQoZSl7Y29uc3QgdD1lLnNlcGFyYXRvcixuPXQubGVuZ3RoPT09MSxyPXRbMF0sbz10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocyl7Y29uc3QgYT1bXTtsZXQgbD0wLGM9MCx1O2ZvcihsZXQgZz0wO2c8cy5sZW5ndGg7ZysrKXtsZXQgeT1zW2ddO2lmKGw9PT0wKXtpZih5PT09ciYmKG58fHMuc2xpY2UoZyxnK28pPT09dCkpe2EucHVzaChzLnNsaWNlKGMsZykpLGM9ZytvO2NvbnRpbnVlfWlmKHk9PT0iLyIpe3U9Zztjb250aW51ZX19eT09PSJbIj9sKys6eT09PSJdIiYmbC0tfWNvbnN0IGQ9YS5sZW5ndGg9PT0wP3M6cy5zdWJzdHJpbmcoYyksZj1kLnN0YXJ0c1dpdGgodVApLHA9Zj9kLnN1YnN0cmluZygxKTpkLG09dSYmdT5jP3UtYzp2b2lkIDA7cmV0dXJue21vZGlmaWVyczphLGhhc0ltcG9ydGFudE1vZGlmaWVyOmYsYmFzZUNsYXNzTmFtZTpwLG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246bX19fWZ1bmN0aW9uIHY0KGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W107bGV0IG49W107cmV0dXJuIGUuZm9yRWFjaChyPT57clswXT09PSJbIj8odC5wdXNoKC4uLm4uc29ydCgpLHIpLG49W10pOm4ucHVzaChyKX0pLHQucHVzaCguLi5uLnNvcnQoKSksdH1mdW5jdGlvbiB5NChlKXtyZXR1cm57Y2FjaGU6bTQoZS5jYWNoZVNpemUpLHNwbGl0TW9kaWZpZXJzOmc0KGUpLC4uLnU0KGUpfX1jb25zdCB4ND0vXHMrLztmdW5jdGlvbiBiNChlLHQpe2NvbnN0e3NwbGl0TW9kaWZpZXJzOm4sZ2V0Q2xhc3NHcm91cElkOnIsZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzOm99PXQsaT1uZXcgU2V0O3JldHVybiBlLnRyaW0oKS5zcGxpdCh4NCkubWFwKHM9Pntjb25zdHttb2RpZmllcnM6YSxoYXNJbXBvcnRhbnRNb2RpZmllcjpsLGJhc2VDbGFzc05hbWU6YyxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOnV9PW4ocyk7bGV0IGQ9cih1P2Muc3Vic3RyaW5nKDAsdSk6YyksZj0hIXU7aWYoIWQpe2lmKCF1KXJldHVybntpc1RhaWx3aW5kQ2xhc3M6ITEsb3JpZ2luYWxDbGFzc05hbWU6c307aWYoZD1yKGMpLCFkKXJldHVybntpc1RhaWx3aW5kQ2xhc3M6ITEsb3JpZ2luYWxDbGFzc05hbWU6c307Zj0hMX1jb25zdCBwPXY0KGEpLmpvaW4oIjoiKTtyZXR1cm57aXNUYWlsd2luZENsYXNzOiEwLG1vZGlmaWVySWQ6bD9wK3VQOnAsY2xhc3NHcm91cElkOmQsb3JpZ2luYWxDbGFzc05hbWU6cyxoYXNQb3N0Zml4TW9kaWZpZXI6Zn19KS5yZXZlcnNlKCkuZmlsdGVyKHM9PntpZighcy5pc1RhaWx3aW5kQ2xhc3MpcmV0dXJuITA7Y29uc3R7bW9kaWZpZXJJZDphLGNsYXNzR3JvdXBJZDpsLGhhc1Bvc3RmaXhNb2RpZmllcjpjfT1zLHU9YStsO3JldHVybiBpLmhhcyh1KT8hMTooaS5hZGQodSksbyhsLGMpLmZvckVhY2goZD0+aS5hZGQoYStkKSksITApfSkucmV2ZXJzZSgpLm1hcChzPT5zLm9yaWdpbmFsQ2xhc3NOYW1lKS5qb2luKCIgIil9ZnVuY3Rpb24gdzQoKXtsZXQgZT0wLHQsbixyPSIiO2Zvcig7ZTxhcmd1bWVudHMubGVuZ3RoOykodD1hcmd1bWVudHNbZSsrXSkmJihuPWRQKHQpKSYmKHImJihyKz0iICIpLHIrPW4pO3JldHVybiByfWZ1bmN0aW9uIGRQKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZTtsZXQgdCxuPSIiO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0mJih0PWRQKGVbcl0pKSYmKG4mJihuKz0iICIpLG4rPXQpO3JldHVybiBufWZ1bmN0aW9uIFM0KGUsLi4udCl7bGV0IG4scixvLGk9cztmdW5jdGlvbiBzKGwpe2NvbnN0IGM9dC5yZWR1Y2UoKHUsZCk9PmQodSksZSgpKTtyZXR1cm4gbj15NChjKSxyPW4uY2FjaGUuZ2V0LG89bi5jYWNoZS5zZXQsaT1hLGEobCl9ZnVuY3Rpb24gYShsKXtjb25zdCBjPXIobCk7aWYoYylyZXR1cm4gYztjb25zdCB1PWI0KGwsbik7cmV0dXJuIG8obCx1KSx1fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBpKHc0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHl0KGUpe2NvbnN0IHQ9bj0+bltlXXx8W107cmV0dXJuIHQuaXNUaGVtZUdldHRlcj0hMCx0fWNvbnN0IGZQPS9eXFsoPzooW2Etei1dKyk6KT8oLispXF0kL2ksazQ9L15cZCtcL1xkKyQvLEU0PW5ldyBTZXQoWyJweCIsImZ1bGwiLCJzY3JlZW4iXSksXzQ9L14oXGQrKFwuXGQrKT8pPyh4c3xzbXxtZHxsZ3x4bCkkLyxDND0vXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcYihjYWxjfG1pbnxtYXh8Y2xhbXApXCguK1wpfF4wJC8sTzQ9L14tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKV8tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKS8sVDQ9L14odXJsfGltYWdlfGltYWdlLXNldHxjcm9zcy1mYWRlfGVsZW1lbnR8KHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsfGNvbmljKS1ncmFkaWVudClcKC4rXCkkLztmdW5jdGlvbiBjaShlKXtyZXR1cm4gTmEoZSl8fEU0LmhhcyhlKXx8azQudGVzdChlKX1mdW5jdGlvbiBlcyhlKXtyZXR1cm4gYXUoZSwibGVuZ3RoIixJNCl9ZnVuY3Rpb24gTmEoZSl7cmV0dXJuISFlJiYhTnVtYmVyLmlzTmFOKE51bWJlcihlKSl9ZnVuY3Rpb24gQnAoZSl7cmV0dXJuIGF1KGUsIm51bWJlciIsTmEpfWZ1bmN0aW9uIFB1KGUpe3JldHVybiEhZSYmTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIoZSkpfWZ1bmN0aW9uIFA0KGUpe3JldHVybiBlLmVuZHNXaXRoKCIlIikmJk5hKGUuc2xpY2UoMCwtMSkpfWZ1bmN0aW9uIE5lKGUpe3JldHVybiBmUC50ZXN0KGUpfWZ1bmN0aW9uIHRzKGUpe3JldHVybiBfNC50ZXN0KGUpfWNvbnN0IE00PW5ldyBTZXQoWyJsZW5ndGgiLCJzaXplIiwicGVyY2VudGFnZSJdKTtmdW5jdGlvbiBSNChlKXtyZXR1cm4gYXUoZSxNNCxwUCl9ZnVuY3Rpb24gTjQoZSl7cmV0dXJuIGF1KGUsInBvc2l0aW9uIixwUCl9Y29uc3QgJDQ9bmV3IFNldChbImltYWdlIiwidXJsIl0pO2Z1bmN0aW9uIEE0KGUpe3JldHVybiBhdShlLCQ0LGo0KX1mdW5jdGlvbiBENChlKXtyZXR1cm4gYXUoZSwiIixMNCl9ZnVuY3Rpb24gTXUoKXtyZXR1cm4hMH1mdW5jdGlvbiBhdShlLHQsbil7Y29uc3Qgcj1mUC5leGVjKGUpO3JldHVybiByP3JbMV0/dHlwZW9mIHQ9PSJzdHJpbmciP3JbMV09PT10OnQuaGFzKHJbMV0pOm4oclsyXSk6ITF9ZnVuY3Rpb24gSTQoZSl7cmV0dXJuIEM0LnRlc3QoZSl9ZnVuY3Rpb24gcFAoKXtyZXR1cm4hMX1mdW5jdGlvbiBMNChlKXtyZXR1cm4gTzQudGVzdChlKX1mdW5jdGlvbiBqNChlKXtyZXR1cm4gVDQudGVzdChlKX1mdW5jdGlvbiB6NCgpe2NvbnN0IGU9eXQoImNvbG9ycyIpLHQ9eXQoInNwYWNpbmciKSxuPXl0KCJibHVyIikscj15dCgiYnJpZ2h0bmVzcyIpLG89eXQoImJvcmRlckNvbG9yIiksaT15dCgiYm9yZGVyUmFkaXVzIikscz15dCgiYm9yZGVyU3BhY2luZyIpLGE9eXQoImJvcmRlcldpZHRoIiksbD15dCgiY29udHJhc3QiKSxjPXl0KCJncmF5c2NhbGUiKSx1PXl0KCJodWVSb3RhdGUiKSxkPXl0KCJpbnZlcnQiKSxmPXl0KCJnYXAiKSxwPXl0KCJncmFkaWVudENvbG9yU3RvcHMiKSxtPXl0KCJncmFkaWVudENvbG9yU3RvcFBvc2l0aW9ucyIpLGc9eXQoImluc2V0IikseT15dCgibWFyZ2luIiksdj15dCgib3BhY2l0eSIpLHg9eXQoInBhZGRpbmciKSx3PXl0KCJzYXR1cmF0ZSIpLGs9eXQoInNjYWxlIiksRT15dCgic2VwaWEiKSxTPXl0KCJza2V3IiksXz15dCgic3BhY2UiKSxQPXl0KCJ0cmFuc2xhdGUiKSxNPSgpPT5bImF1dG8iLCJjb250YWluIiwibm9uZSJdLEE9KCk9PlsiYXV0byIsImhpZGRlbiIsImNsaXAiLCJ2aXNpYmxlIiwic2Nyb2xsIl0sST0oKT0+WyJhdXRvIixOZSx0XSxMPSgpPT5bTmUsdF0scmU9KCk9PlsiIixjaSxlc10sVj0oKT0+WyJhdXRvIixOYSxOZV0sSz0oKT0+WyJib3R0b20iLCJjZW50ZXIiLCJsZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LXRvcCIsInJpZ2h0IiwicmlnaHQtYm90dG9tIiwicmlnaHQtdG9wIiwidG9wIl0sQz0oKT0+WyJzb2xpZCIsImRhc2hlZCIsImRvdHRlZCIsImRvdWJsZSIsIm5vbmUiXSxUPSgpPT5bIm5vcm1hbCIsIm11bHRpcGx5Iiwic2NyZWVuIiwib3ZlcmxheSIsImRhcmtlbiIsImxpZ2h0ZW4iLCJjb2xvci1kb2RnZSIsImNvbG9yLWJ1cm4iLCJoYXJkLWxpZ2h0Iiwic29mdC1saWdodCIsImRpZmZlcmVuY2UiLCJleGNsdXNpb24iLCJodWUiLCJzYXR1cmF0aW9uIiwiY29sb3IiLCJsdW1pbm9zaXR5IiwicGx1cy1saWdodGVyIl0sTz0oKT0+WyJzdGFydCIsImVuZCIsImNlbnRlciIsImJldHdlZW4iLCJhcm91bmQiLCJldmVubHkiLCJzdHJldGNoIl0sUj0oKT0+WyIiLCIwIixOZV0sTj0oKT0+WyJhdXRvIiwiYXZvaWQiLCJhbGwiLCJhdm9pZC1wYWdlIiwicGFnZSIsImxlZnQiLCJyaWdodCIsImNvbHVtbiJdLGo9KCk9PltOYSxCcF0sRz0oKT0+W05hLE5lXTtyZXR1cm57Y2FjaGVTaXplOjUwMCxzZXBhcmF0b3I6IjoiLHRoZW1lOntjb2xvcnM6W011XSxzcGFjaW5nOltjaSxlc10sYmx1cjpbIm5vbmUiLCIiLHRzLE5lXSxicmlnaHRuZXNzOmooKSxib3JkZXJDb2xvcjpbZV0sYm9yZGVyUmFkaXVzOlsibm9uZSIsIiIsImZ1bGwiLHRzLE5lXSxib3JkZXJTcGFjaW5nOkwoKSxib3JkZXJXaWR0aDpyZSgpLGNvbnRyYXN0OmooKSxncmF5c2NhbGU6UigpLGh1ZVJvdGF0ZTpHKCksaW52ZXJ0OlIoKSxnYXA6TCgpLGdyYWRpZW50Q29sb3JTdG9wczpbZV0sZ3JhZGllbnRDb2xvclN0b3BQb3NpdGlvbnM6W1A0LGVzXSxpbnNldDpJKCksbWFyZ2luOkkoKSxvcGFjaXR5OmooKSxwYWRkaW5nOkwoKSxzYXR1cmF0ZTpqKCksc2NhbGU6aigpLHNlcGlhOlIoKSxza2V3OkcoKSxzcGFjZTpMKCksdHJhbnNsYXRlOkwoKX0sY2xhc3NHcm91cHM6e2FzcGVjdDpbe2FzcGVjdDpbImF1dG8iLCJzcXVhcmUiLCJ2aWRlbyIsTmVdfV0sY29udGFpbmVyOlsiY29udGFpbmVyIl0sY29sdW1uczpbe2NvbHVtbnM6W3RzXX1dLCJicmVhay1hZnRlciI6W3siYnJlYWstYWZ0ZXIiOk4oKX1dLCJicmVhay1iZWZvcmUiOlt7ImJyZWFrLWJlZm9yZSI6TigpfV0sImJyZWFrLWluc2lkZSI6W3siYnJlYWstaW5zaWRlIjpbImF1dG8iLCJhdm9pZCIsImF2b2lkLXBhZ2UiLCJhdm9pZC1jb2x1bW4iXX1dLCJib3gtZGVjb3JhdGlvbiI6W3siYm94LWRlY29yYXRpb24iOlsic2xpY2UiLCJjbG9uZSJdfV0sYm94Olt7Ym94OlsiYm9yZGVyIiwiY29udGVudCJdfV0sZGlzcGxheTpbImJsb2NrIiwiaW5saW5lLWJsb2NrIiwiaW5saW5lIiwiZmxleCIsImlubGluZS1mbGV4IiwidGFibGUiLCJpbmxpbmUtdGFibGUiLCJ0YWJsZS1jYXB0aW9uIiwidGFibGUtY2VsbCIsInRhYmxlLWNvbHVtbiIsInRhYmxlLWNvbHVtbi1ncm91cCIsInRhYmxlLWZvb3Rlci1ncm91cCIsInRhYmxlLWhlYWRlci1ncm91cCIsInRhYmxlLXJvdy1ncm91cCIsInRhYmxlLXJvdyIsImZsb3ctcm9vdCIsImdyaWQiLCJpbmxpbmUtZ3JpZCIsImNvbnRlbnRzIiwibGlzdC1pdGVtIiwiaGlkZGVuIl0sZmxvYXQ6W3tmbG9hdDpbInJpZ2h0IiwibGVmdCIsIm5vbmUiLCJzdGFydCIsImVuZCJdfV0sY2xlYXI6W3tjbGVhcjpbImxlZnQiLCJyaWdodCIsImJvdGgiLCJub25lIiwic3RhcnQiLCJlbmQiXX1dLGlzb2xhdGlvbjpbImlzb2xhdGUiLCJpc29sYXRpb24tYXV0byJdLCJvYmplY3QtZml0Ijpbe29iamVjdDpbImNvbnRhaW4iLCJjb3ZlciIsImZpbGwiLCJub25lIiwic2NhbGUtZG93biJdfV0sIm9iamVjdC1wb3NpdGlvbiI6W3tvYmplY3Q6Wy4uLksoKSxOZV19XSxvdmVyZmxvdzpbe292ZXJmbG93OkEoKX1dLCJvdmVyZmxvdy14IjpbeyJvdmVyZmxvdy14IjpBKCl9XSwib3ZlcmZsb3cteSI6W3sib3ZlcmZsb3cteSI6QSgpfV0sb3ZlcnNjcm9sbDpbe292ZXJzY3JvbGw6TSgpfV0sIm92ZXJzY3JvbGwteCI6W3sib3ZlcnNjcm9sbC14IjpNKCl9XSwib3ZlcnNjcm9sbC15IjpbeyJvdmVyc2Nyb2xsLXkiOk0oKX1dLHBvc2l0aW9uOlsic3RhdGljIiwiZml4ZWQiLCJhYnNvbHV0ZSIsInJlbGF0aXZlIiwic3RpY2t5Il0saW5zZXQ6W3tpbnNldDpbZ119XSwiaW5zZXQteCI6W3siaW5zZXQteCI6W2ddfV0sImluc2V0LXkiOlt7Imluc2V0LXkiOltnXX1dLHN0YXJ0Olt7c3RhcnQ6W2ddfV0sZW5kOlt7ZW5kOltnXX1dLHRvcDpbe3RvcDpbZ119XSxyaWdodDpbe3JpZ2h0OltnXX1dLGJvdHRvbTpbe2JvdHRvbTpbZ119XSxsZWZ0Olt7bGVmdDpbZ119XSx2aXNpYmlsaXR5OlsidmlzaWJsZSIsImludmlzaWJsZSIsImNvbGxhcHNlIl0sejpbe3o6WyJhdXRvIixQdSxOZV19XSxiYXNpczpbe2Jhc2lzOkkoKX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Olsicm93Iiwicm93LXJldmVyc2UiLCJjb2wiLCJjb2wtcmV2ZXJzZSJdfV0sImZsZXgtd3JhcCI6W3tmbGV4Olsid3JhcCIsIndyYXAtcmV2ZXJzZSIsIm5vd3JhcCJdfV0sZmxleDpbe2ZsZXg6WyIxIiwiYXV0byIsImluaXRpYWwiLCJub25lIixOZV19XSxncm93Olt7Z3JvdzpSKCl9XSxzaHJpbms6W3tzaHJpbms6UigpfV0sb3JkZXI6W3tvcmRlcjpbImZpcnN0IiwibGFzdCIsIm5vbmUiLFB1LE5lXX1dLCJncmlkLWNvbHMiOlt7ImdyaWQtY29scyI6W011XX1dLCJjb2wtc3RhcnQtZW5kIjpbe2NvbDpbImF1dG8iLHtzcGFuOlsiZnVsbCIsUHUsTmVdfSxOZV19XSwiY29sLXN0YXJ0IjpbeyJjb2wtc3RhcnQiOlYoKX1dLCJjb2wtZW5kIjpbeyJjb2wtZW5kIjpWKCl9XSwiZ3JpZC1yb3dzIjpbeyJncmlkLXJvd3MiOltNdV19XSwicm93LXN0YXJ0LWVuZCI6W3tyb3c6WyJhdXRvIix7c3BhbjpbUHUsTmVdfSxOZV19XSwicm93LXN0YXJ0IjpbeyJyb3ctc3RhcnQiOlYoKX1dLCJyb3ctZW5kIjpbeyJyb3ctZW5kIjpWKCl9XSwiZ3JpZC1mbG93IjpbeyJncmlkLWZsb3ciOlsicm93IiwiY29sIiwiZGVuc2UiLCJyb3ctZGVuc2UiLCJjb2wtZGVuc2UiXX1dLCJhdXRvLWNvbHMiOlt7ImF1dG8tY29scyI6WyJhdXRvIiwibWluIiwibWF4IiwiZnIiLE5lXX1dLCJhdXRvLXJvd3MiOlt7ImF1dG8tcm93cyI6WyJhdXRvIiwibWluIiwibWF4IiwiZnIiLE5lXX1dLGdhcDpbe2dhcDpbZl19XSwiZ2FwLXgiOlt7ImdhcC14IjpbZl19XSwiZ2FwLXkiOlt7ImdhcC15IjpbZl19XSwianVzdGlmeS1jb250ZW50Ijpbe2p1c3RpZnk6WyJub3JtYWwiLC4uLk8oKV19XSwianVzdGlmeS1pdGVtcyI6W3sianVzdGlmeS1pdGVtcyI6WyJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLCJqdXN0aWZ5LXNlbGYiOlt7Imp1c3RpZnktc2VsZiI6WyJhdXRvIiwic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIl19XSwiYWxpZ24tY29udGVudCI6W3tjb250ZW50Olsibm9ybWFsIiwuLi5PKCksImJhc2VsaW5lIl19XSwiYWxpZ24taXRlbXMiOlt7aXRlbXM6WyJzdGFydCIsImVuZCIsImNlbnRlciIsImJhc2VsaW5lIiwic3RyZXRjaCJdfV0sImFsaWduLXNlbGYiOlt7c2VsZjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giLCJiYXNlbGluZSJdfV0sInBsYWNlLWNvbnRlbnQiOlt7InBsYWNlLWNvbnRlbnQiOlsuLi5PKCksImJhc2VsaW5lIl19XSwicGxhY2UtaXRlbXMiOlt7InBsYWNlLWl0ZW1zIjpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYmFzZWxpbmUiLCJzdHJldGNoIl19XSwicGxhY2Utc2VsZiI6W3sicGxhY2Utc2VsZiI6WyJhdXRvIiwic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJzdHJldGNoIl19XSxwOlt7cDpbeF19XSxweDpbe3B4Olt4XX1dLHB5Olt7cHk6W3hdfV0scHM6W3twczpbeF19XSxwZTpbe3BlOlt4XX1dLHB0Olt7cHQ6W3hdfV0scHI6W3twcjpbeF19XSxwYjpbe3BiOlt4XX1dLHBsOlt7cGw6W3hdfV0sbTpbe206W3ldfV0sbXg6W3tteDpbeV19XSxteTpbe215Olt5XX1dLG1zOlt7bXM6W3ldfV0sbWU6W3ttZTpbeV19XSxtdDpbe210Olt5XX1dLG1yOlt7bXI6W3ldfV0sbWI6W3ttYjpbeV19XSxtbDpbe21sOlt5XX1dLCJzcGFjZS14IjpbeyJzcGFjZS14IjpbX119XSwic3BhY2UteC1yZXZlcnNlIjpbInNwYWNlLXgtcmV2ZXJzZSJdLCJzcGFjZS15IjpbeyJzcGFjZS15IjpbX119XSwic3BhY2UteS1yZXZlcnNlIjpbInNwYWNlLXktcmV2ZXJzZSJdLHc6W3t3OlsiYXV0byIsIm1pbiIsIm1heCIsImZpdCIsInN2dyIsImx2dyIsImR2dyIsTmUsdF19XSwibWluLXciOlt7Im1pbi13IjpbTmUsdCwibWluIiwibWF4IiwiZml0Il19XSwibWF4LXciOlt7Im1heC13IjpbTmUsdCwibm9uZSIsImZ1bGwiLCJtaW4iLCJtYXgiLCJmaXQiLCJwcm9zZSIse3NjcmVlbjpbdHNdfSx0c119XSxoOlt7aDpbTmUsdCwiYXV0byIsIm1pbiIsIm1heCIsImZpdCIsInN2aCIsImx2aCIsImR2aCJdfV0sIm1pbi1oIjpbeyJtaW4taCI6W05lLHQsIm1pbiIsIm1heCIsImZpdCIsInN2aCIsImx2aCIsImR2aCJdfV0sIm1heC1oIjpbeyJtYXgtaCI6W05lLHQsIm1pbiIsIm1heCIsImZpdCIsInN2aCIsImx2aCIsImR2aCJdfV0sc2l6ZTpbe3NpemU6W05lLHQsImF1dG8iLCJtaW4iLCJtYXgiLCJmaXQiXX1dLCJmb250LXNpemUiOlt7dGV4dDpbImJhc2UiLHRzLGVzXX1dLCJmb250LXNtb290aGluZyI6WyJhbnRpYWxpYXNlZCIsInN1YnBpeGVsLWFudGlhbGlhc2VkIl0sImZvbnQtc3R5bGUiOlsiaXRhbGljIiwibm90LWl0YWxpYyJdLCJmb250LXdlaWdodCI6W3tmb250OlsidGhpbiIsImV4dHJhbGlnaHQiLCJsaWdodCIsIm5vcm1hbCIsIm1lZGl1bSIsInNlbWlib2xkIiwiYm9sZCIsImV4dHJhYm9sZCIsImJsYWNrIixCcF19XSwiZm9udC1mYW1pbHkiOlt7Zm9udDpbTXVdfV0sImZ2bi1ub3JtYWwiOlsibm9ybWFsLW51bXMiXSwiZnZuLW9yZGluYWwiOlsib3JkaW5hbCJdLCJmdm4tc2xhc2hlZC16ZXJvIjpbInNsYXNoZWQtemVybyJdLCJmdm4tZmlndXJlIjpbImxpbmluZy1udW1zIiwib2xkc3R5bGUtbnVtcyJdLCJmdm4tc3BhY2luZyI6WyJwcm9wb3J0aW9uYWwtbnVtcyIsInRhYnVsYXItbnVtcyJdLCJmdm4tZnJhY3Rpb24iOlsiZGlhZ29uYWwtZnJhY3Rpb25zIiwic3RhY2tlZC1mcmFjdG9ucyJdLHRyYWNraW5nOlt7dHJhY2tpbmc6WyJ0aWdodGVyIiwidGlnaHQiLCJub3JtYWwiLCJ3aWRlIiwid2lkZXIiLCJ3aWRlc3QiLE5lXX1dLCJsaW5lLWNsYW1wIjpbeyJsaW5lLWNsYW1wIjpbIm5vbmUiLE5hLEJwXX1dLGxlYWRpbmc6W3tsZWFkaW5nOlsibm9uZSIsInRpZ2h0Iiwic251ZyIsIm5vcm1hbCIsInJlbGF4ZWQiLCJsb29zZSIsY2ksTmVdfV0sImxpc3QtaW1hZ2UiOlt7Imxpc3QtaW1hZ2UiOlsibm9uZSIsTmVdfV0sImxpc3Qtc3R5bGUtdHlwZSI6W3tsaXN0Olsibm9uZSIsImRpc2MiLCJkZWNpbWFsIixOZV19XSwibGlzdC1zdHlsZS1wb3NpdGlvbiI6W3tsaXN0OlsiaW5zaWRlIiwib3V0c2lkZSJdfV0sInBsYWNlaG9sZGVyLWNvbG9yIjpbe3BsYWNlaG9sZGVyOltlXX1dLCJwbGFjZWhvbGRlci1vcGFjaXR5IjpbeyJwbGFjZWhvbGRlci1vcGFjaXR5Ijpbdl19XSwidGV4dC1hbGlnbm1lbnQiOlt7dGV4dDpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImp1c3RpZnkiLCJzdGFydCIsImVuZCJdfV0sInRleHQtY29sb3IiOlt7dGV4dDpbZV19XSwidGV4dC1vcGFjaXR5IjpbeyJ0ZXh0LW9wYWNpdHkiOlt2XX1dLCJ0ZXh0LWRlY29yYXRpb24iOlsidW5kZXJsaW5lIiwib3ZlcmxpbmUiLCJsaW5lLXRocm91Z2giLCJuby11bmRlcmxpbmUiXSwidGV4dC1kZWNvcmF0aW9uLXN0eWxlIjpbe2RlY29yYXRpb246Wy4uLkMoKSwid2F2eSJdfV0sInRleHQtZGVjb3JhdGlvbi10aGlja25lc3MiOlt7ZGVjb3JhdGlvbjpbImF1dG8iLCJmcm9tLWZvbnQiLGNpLGVzXX1dLCJ1bmRlcmxpbmUtb2Zmc2V0IjpbeyJ1bmRlcmxpbmUtb2Zmc2V0IjpbImF1dG8iLGNpLE5lXX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpbZV19XSwidGV4dC10cmFuc2Zvcm0iOlsidXBwZXJjYXNlIiwibG93ZXJjYXNlIiwiY2FwaXRhbGl6ZSIsIm5vcm1hbC1jYXNlIl0sInRleHQtb3ZlcmZsb3ciOlsidHJ1bmNhdGUiLCJ0ZXh0LWVsbGlwc2lzIiwidGV4dC1jbGlwIl0sInRleHQtd3JhcCI6W3t0ZXh0Olsid3JhcCIsIm5vd3JhcCIsImJhbGFuY2UiLCJwcmV0dHkiXX1dLGluZGVudDpbe2luZGVudDpMKCl9XSwidmVydGljYWwtYWxpZ24iOlt7YWxpZ246WyJiYXNlbGluZSIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSIsInRleHQtdG9wIiwidGV4dC1ib3R0b20iLCJzdWIiLCJzdXBlciIsTmVdfV0sd2hpdGVzcGFjZTpbe3doaXRlc3BhY2U6WyJub3JtYWwiLCJub3dyYXAiLCJwcmUiLCJwcmUtbGluZSIsInByZS13cmFwIiwiYnJlYWstc3BhY2VzIl19XSxicmVhazpbe2JyZWFrOlsibm9ybWFsIiwid29yZHMiLCJhbGwiLCJrZWVwIl19XSxoeXBoZW5zOlt7aHlwaGVuczpbIm5vbmUiLCJtYW51YWwiLCJhdXRvIl19XSxjb250ZW50Olt7Y29udGVudDpbIm5vbmUiLE5lXX1dLCJiZy1hdHRhY2htZW50Ijpbe2JnOlsiZml4ZWQiLCJsb2NhbCIsInNjcm9sbCJdfV0sImJnLWNsaXAiOlt7ImJnLWNsaXAiOlsiYm9yZGVyIiwicGFkZGluZyIsImNvbnRlbnQiLCJ0ZXh0Il19XSwiYmctb3BhY2l0eSI6W3siYmctb3BhY2l0eSI6W3ZdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50Il19XSwiYmctcG9zaXRpb24iOlt7Ymc6Wy4uLksoKSxONF19XSwiYmctcmVwZWF0Ijpbe2JnOlsibm8tcmVwZWF0Iix7cmVwZWF0OlsiIiwieCIsInkiLCJyb3VuZCIsInNwYWNlIl19XX1dLCJiZy1zaXplIjpbe2JnOlsiYXV0byIsImNvdmVyIiwiY29udGFpbiIsUjRdfV0sImJnLWltYWdlIjpbe2JnOlsibm9uZSIseyJncmFkaWVudC10byI6WyJ0IiwidHIiLCJyIiwiYnIiLCJiIiwiYmwiLCJsIiwidGwiXX0sQTRdfV0sImJnLWNvbG9yIjpbe2JnOltlXX1dLCJncmFkaWVudC1mcm9tLXBvcyI6W3tmcm9tOlttXX1dLCJncmFkaWVudC12aWEtcG9zIjpbe3ZpYTpbbV19XSwiZ3JhZGllbnQtdG8tcG9zIjpbe3RvOlttXX1dLCJncmFkaWVudC1mcm9tIjpbe2Zyb206W3BdfV0sImdyYWRpZW50LXZpYSI6W3t2aWE6W3BdfV0sImdyYWRpZW50LXRvIjpbe3RvOltwXX1dLHJvdW5kZWQ6W3tyb3VuZGVkOltpXX1dLCJyb3VuZGVkLXMiOlt7InJvdW5kZWQtcyI6W2ldfV0sInJvdW5kZWQtZSI6W3sicm91bmRlZC1lIjpbaV19XSwicm91bmRlZC10IjpbeyJyb3VuZGVkLXQiOltpXX1dLCJyb3VuZGVkLXIiOlt7InJvdW5kZWQtciI6W2ldfV0sInJvdW5kZWQtYiI6W3sicm91bmRlZC1iIjpbaV19XSwicm91bmRlZC1sIjpbeyJyb3VuZGVkLWwiOltpXX1dLCJyb3VuZGVkLXNzIjpbeyJyb3VuZGVkLXNzIjpbaV19XSwicm91bmRlZC1zZSI6W3sicm91bmRlZC1zZSI6W2ldfV0sInJvdW5kZWQtZWUiOlt7InJvdW5kZWQtZWUiOltpXX1dLCJyb3VuZGVkLWVzIjpbeyJyb3VuZGVkLWVzIjpbaV19XSwicm91bmRlZC10bCI6W3sicm91bmRlZC10bCI6W2ldfV0sInJvdW5kZWQtdHIiOlt7InJvdW5kZWQtdHIiOltpXX1dLCJyb3VuZGVkLWJyIjpbeyJyb3VuZGVkLWJyIjpbaV19XSwicm91bmRlZC1ibCI6W3sicm91bmRlZC1ibCI6W2ldfV0sImJvcmRlci13Ijpbe2JvcmRlcjpbYV19XSwiYm9yZGVyLXcteCI6W3siYm9yZGVyLXgiOlthXX1dLCJib3JkZXItdy15IjpbeyJib3JkZXIteSI6W2FdfV0sImJvcmRlci13LXMiOlt7ImJvcmRlci1zIjpbYV19XSwiYm9yZGVyLXctZSI6W3siYm9yZGVyLWUiOlthXX1dLCJib3JkZXItdy10IjpbeyJib3JkZXItdCI6W2FdfV0sImJvcmRlci13LXIiOlt7ImJvcmRlci1yIjpbYV19XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOlthXX1dLCJib3JkZXItdy1sIjpbeyJib3JkZXItbCI6W2FdfV0sImJvcmRlci1vcGFjaXR5IjpbeyJib3JkZXItb3BhY2l0eSI6W3ZdfV0sImJvcmRlci1zdHlsZSI6W3tib3JkZXI6Wy4uLkMoKSwiaGlkZGVuIl19XSwiZGl2aWRlLXgiOlt7ImRpdmlkZS14IjpbYV19XSwiZGl2aWRlLXgtcmV2ZXJzZSI6WyJkaXZpZGUteC1yZXZlcnNlIl0sImRpdmlkZS15IjpbeyJkaXZpZGUteSI6W2FdfV0sImRpdmlkZS15LXJldmVyc2UiOlsiZGl2aWRlLXktcmV2ZXJzZSJdLCJkaXZpZGUtb3BhY2l0eSI6W3siZGl2aWRlLW9wYWNpdHkiOlt2XX1dLCJkaXZpZGUtc3R5bGUiOlt7ZGl2aWRlOkMoKX1dLCJib3JkZXItY29sb3IiOlt7Ym9yZGVyOltvXX1dLCJib3JkZXItY29sb3IteCI6W3siYm9yZGVyLXgiOltvXX1dLCJib3JkZXItY29sb3IteSI6W3siYm9yZGVyLXkiOltvXX1dLCJib3JkZXItY29sb3ItdCI6W3siYm9yZGVyLXQiOltvXX1dLCJib3JkZXItY29sb3ItciI6W3siYm9yZGVyLXIiOltvXX1dLCJib3JkZXItY29sb3ItYiI6W3siYm9yZGVyLWIiOltvXX1dLCJib3JkZXItY29sb3ItbCI6W3siYm9yZGVyLWwiOltvXX1dLCJkaXZpZGUtY29sb3IiOlt7ZGl2aWRlOltvXX1dLCJvdXRsaW5lLXN0eWxlIjpbe291dGxpbmU6WyIiLC4uLkMoKV19XSwib3V0bGluZS1vZmZzZXQiOlt7Im91dGxpbmUtb2Zmc2V0IjpbY2ksTmVdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOltjaSxlc119XSwib3V0bGluZS1jb2xvciI6W3tvdXRsaW5lOltlXX1dLCJyaW5nLXciOlt7cmluZzpyZSgpfV0sInJpbmctdy1pbnNldCI6WyJyaW5nLWluc2V0Il0sInJpbmctY29sb3IiOlt7cmluZzpbZV19XSwicmluZy1vcGFjaXR5IjpbeyJyaW5nLW9wYWNpdHkiOlt2XX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W2NpLGVzXX1dLCJyaW5nLW9mZnNldC1jb2xvciI6W3sicmluZy1vZmZzZXQiOltlXX1dLHNoYWRvdzpbe3NoYWRvdzpbIiIsImlubmVyIiwibm9uZSIsdHMsRDRdfV0sInNoYWRvdy1jb2xvciI6W3tzaGFkb3c6W011XX1dLG9wYWNpdHk6W3tvcGFjaXR5Olt2XX1dLCJtaXgtYmxlbmQiOlt7Im1peC1ibGVuZCI6VCgpfV0sImJnLWJsZW5kIjpbeyJiZy1ibGVuZCI6VCgpfV0sZmlsdGVyOlt7ZmlsdGVyOlsiIiwibm9uZSJdfV0sYmx1cjpbe2JsdXI6W25dfV0sYnJpZ2h0bmVzczpbe2JyaWdodG5lc3M6W3JdfV0sY29udHJhc3Q6W3tjb250cmFzdDpbbF19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbIiIsIm5vbmUiLHRzLE5lXX1dLGdyYXlzY2FsZTpbe2dyYXlzY2FsZTpbY119XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W3VdfV0saW52ZXJ0Olt7aW52ZXJ0OltkXX1dLHNhdHVyYXRlOlt7c2F0dXJhdGU6W3ddfV0sc2VwaWE6W3tzZXBpYTpbRV19XSwiYmFja2Ryb3AtZmlsdGVyIjpbeyJiYWNrZHJvcC1maWx0ZXIiOlsiIiwibm9uZSJdfV0sImJhY2tkcm9wLWJsdXIiOlt7ImJhY2tkcm9wLWJsdXIiOltuXX1dLCJiYWNrZHJvcC1icmlnaHRuZXNzIjpbeyJiYWNrZHJvcC1icmlnaHRuZXNzIjpbcl19XSwiYmFja2Ryb3AtY29udHJhc3QiOlt7ImJhY2tkcm9wLWNvbnRyYXN0IjpbbF19XSwiYmFja2Ryb3AtZ3JheXNjYWxlIjpbeyJiYWNrZHJvcC1ncmF5c2NhbGUiOltjXX1dLCJiYWNrZHJvcC1odWUtcm90YXRlIjpbeyJiYWNrZHJvcC1odWUtcm90YXRlIjpbdV19XSwiYmFja2Ryb3AtaW52ZXJ0IjpbeyJiYWNrZHJvcC1pbnZlcnQiOltkXX1dLCJiYWNrZHJvcC1vcGFjaXR5IjpbeyJiYWNrZHJvcC1vcGFjaXR5Ijpbdl19XSwiYmFja2Ryb3Atc2F0dXJhdGUiOlt7ImJhY2tkcm9wLXNhdHVyYXRlIjpbd119XSwiYmFja2Ryb3Atc2VwaWEiOlt7ImJhY2tkcm9wLXNlcGlhIjpbRV19XSwiYm9yZGVyLWNvbGxhcHNlIjpbe2JvcmRlcjpbImNvbGxhcHNlIiwic2VwYXJhdGUiXX1dLCJib3JkZXItc3BhY2luZyI6W3siYm9yZGVyLXNwYWNpbmciOltzXX1dLCJib3JkZXItc3BhY2luZy14IjpbeyJib3JkZXItc3BhY2luZy14Ijpbc119XSwiYm9yZGVyLXNwYWNpbmcteSI6W3siYm9yZGVyLXNwYWNpbmcteSI6W3NdfV0sInRhYmxlLWxheW91dCI6W3t0YWJsZTpbImF1dG8iLCJmaXhlZCJdfV0sY2FwdGlvbjpbe2NhcHRpb246WyJ0b3AiLCJib3R0b20iXX1dLHRyYW5zaXRpb246W3t0cmFuc2l0aW9uOlsibm9uZSIsImFsbCIsIiIsImNvbG9ycyIsIm9wYWNpdHkiLCJzaGFkb3ciLCJ0cmFuc2Zvcm0iLE5lXX1dLGR1cmF0aW9uOlt7ZHVyYXRpb246RygpfV0sZWFzZTpbe2Vhc2U6WyJsaW5lYXIiLCJpbiIsIm91dCIsImluLW91dCIsTmVdfV0sZGVsYXk6W3tkZWxheTpHKCl9XSxhbmltYXRlOlt7YW5pbWF0ZTpbIm5vbmUiLCJzcGluIiwicGluZyIsInB1bHNlIiwiYm91bmNlIixOZV19XSx0cmFuc2Zvcm06W3t0cmFuc2Zvcm06WyIiLCJncHUiLCJub25lIl19XSxzY2FsZTpbe3NjYWxlOltrXX1dLCJzY2FsZS14IjpbeyJzY2FsZS14Ijpba119XSwic2NhbGUteSI6W3sic2NhbGUteSI6W2tdfV0scm90YXRlOlt7cm90YXRlOltQdSxOZV19XSwidHJhbnNsYXRlLXgiOlt7InRyYW5zbGF0ZS14IjpbUF19XSwidHJhbnNsYXRlLXkiOlt7InRyYW5zbGF0ZS15IjpbUF19XSwic2tldy14IjpbeyJza2V3LXgiOltTXX1dLCJza2V3LXkiOlt7InNrZXcteSI6W1NdfV0sInRyYW5zZm9ybS1vcmlnaW4iOlt7b3JpZ2luOlsiY2VudGVyIiwidG9wIiwidG9wLXJpZ2h0IiwicmlnaHQiLCJib3R0b20tcmlnaHQiLCJib3R0b20iLCJib3R0b20tbGVmdCIsImxlZnQiLCJ0b3AtbGVmdCIsTmVdfV0sYWNjZW50Olt7YWNjZW50OlsiYXV0byIsZV19XSxhcHBlYXJhbmNlOlt7YXBwZWFyYW5jZTpbIm5vbmUiLCJhdXRvIl19XSxjdXJzb3I6W3tjdXJzb3I6WyJhdXRvIiwiZGVmYXVsdCIsInBvaW50ZXIiLCJ3YWl0IiwidGV4dCIsIm1vdmUiLCJoZWxwIiwibm90LWFsbG93ZWQiLCJub25lIiwiY29udGV4dC1tZW51IiwicHJvZ3Jlc3MiLCJjZWxsIiwiY3Jvc3NoYWlyIiwidmVydGljYWwtdGV4dCIsImFsaWFzIiwiY29weSIsIm5vLWRyb3AiLCJncmFiIiwiZ3JhYmJpbmciLCJhbGwtc2Nyb2xsIiwiY29sLXJlc2l6ZSIsInJvdy1yZXNpemUiLCJuLXJlc2l6ZSIsImUtcmVzaXplIiwicy1yZXNpemUiLCJ3LXJlc2l6ZSIsIm5lLXJlc2l6ZSIsIm53LXJlc2l6ZSIsInNlLXJlc2l6ZSIsInN3LXJlc2l6ZSIsImV3LXJlc2l6ZSIsIm5zLXJlc2l6ZSIsIm5lc3ctcmVzaXplIiwibndzZS1yZXNpemUiLCJ6b29tLWluIiwiem9vbS1vdXQiLE5lXX1dLCJjYXJldC1jb2xvciI6W3tjYXJldDpbZV19XSwicG9pbnRlci1ldmVudHMiOlt7InBvaW50ZXItZXZlbnRzIjpbIm5vbmUiLCJhdXRvIl19XSxyZXNpemU6W3tyZXNpemU6WyJub25lIiwieSIsIngiLCIiXX1dLCJzY3JvbGwtYmVoYXZpb3IiOlt7c2Nyb2xsOlsiYXV0byIsInNtb290aCJdfV0sInNjcm9sbC1tIjpbeyJzY3JvbGwtbSI6TCgpfV0sInNjcm9sbC1teCI6W3sic2Nyb2xsLW14IjpMKCl9XSwic2Nyb2xsLW15IjpbeyJzY3JvbGwtbXkiOkwoKX1dLCJzY3JvbGwtbXMiOlt7InNjcm9sbC1tcyI6TCgpfV0sInNjcm9sbC1tZSI6W3sic2Nyb2xsLW1lIjpMKCl9XSwic2Nyb2xsLW10IjpbeyJzY3JvbGwtbXQiOkwoKX1dLCJzY3JvbGwtbXIiOlt7InNjcm9sbC1tciI6TCgpfV0sInNjcm9sbC1tYiI6W3sic2Nyb2xsLW1iIjpMKCl9XSwic2Nyb2xsLW1sIjpbeyJzY3JvbGwtbWwiOkwoKX1dLCJzY3JvbGwtcCI6W3sic2Nyb2xsLXAiOkwoKX1dLCJzY3JvbGwtcHgiOlt7InNjcm9sbC1weCI6TCgpfV0sInNjcm9sbC1weSI6W3sic2Nyb2xsLXB5IjpMKCl9XSwic2Nyb2xsLXBzIjpbeyJzY3JvbGwtcHMiOkwoKX1dLCJzY3JvbGwtcGUiOlt7InNjcm9sbC1wZSI6TCgpfV0sInNjcm9sbC1wdCI6W3sic2Nyb2xsLXB0IjpMKCl9XSwic2Nyb2xsLXByIjpbeyJzY3JvbGwtcHIiOkwoKX1dLCJzY3JvbGwtcGIiOlt7InNjcm9sbC1wYiI6TCgpfV0sInNjcm9sbC1wbCI6W3sic2Nyb2xsLXBsIjpMKCl9XSwic25hcC1hbGlnbiI6W3tzbmFwOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJhbGlnbi1ub25lIl19XSwic25hcC1zdG9wIjpbe3NuYXA6WyJub3JtYWwiLCJhbHdheXMiXX1dLCJzbmFwLXR5cGUiOlt7c25hcDpbIm5vbmUiLCJ4IiwieSIsImJvdGgiXX1dLCJzbmFwLXN0cmljdG5lc3MiOlt7c25hcDpbIm1hbmRhdG9yeSIsInByb3hpbWl0eSJdfV0sdG91Y2g6W3t0b3VjaDpbImF1dG8iLCJub25lIiwibWFuaXB1bGF0aW9uIl19XSwidG91Y2gteCI6W3sidG91Y2gtcGFuIjpbIngiLCJsZWZ0IiwicmlnaHQiXX1dLCJ0b3VjaC15IjpbeyJ0b3VjaC1wYW4iOlsieSIsInVwIiwiZG93biJdfV0sInRvdWNoLXB6IjpbInRvdWNoLXBpbmNoLXpvb20iXSxzZWxlY3Q6W3tzZWxlY3Q6WyJub25lIiwidGV4dCIsImFsbCIsImF1dG8iXX1dLCJ3aWxsLWNoYW5nZSI6W3sid2lsbC1jaGFuZ2UiOlsiYXV0byIsInNjcm9sbCIsImNvbnRlbnRzIiwidHJhbnNmb3JtIixOZV19XSxmaWxsOlt7ZmlsbDpbZSwibm9uZSJdfV0sInN0cm9rZS13Ijpbe3N0cm9rZTpbY2ksZXMsQnBdfV0sc3Ryb2tlOlt7c3Ryb2tlOltlLCJub25lIl19XSxzcjpbInNyLW9ubHkiLCJub3Qtc3Itb25seSJdLCJmb3JjZWQtY29sb3ItYWRqdXN0IjpbeyJmb3JjZWQtY29sb3ItYWRqdXN0IjpbImF1dG8iLCJub25lIl19XX0sY29uZmxpY3RpbmdDbGFzc0dyb3Vwczp7b3ZlcmZsb3c6WyJvdmVyZmxvdy14Iiwib3ZlcmZsb3cteSJdLG92ZXJzY3JvbGw6WyJvdmVyc2Nyb2xsLXgiLCJvdmVyc2Nyb2xsLXkiXSxpbnNldDpbImluc2V0LXgiLCJpbnNldC15Iiwic3RhcnQiLCJlbmQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSwiaW5zZXQteCI6WyJyaWdodCIsImxlZnQiXSwiaW5zZXQteSI6WyJ0b3AiLCJib3R0b20iXSxmbGV4OlsiYmFzaXMiLCJncm93Iiwic2hyaW5rIl0sZ2FwOlsiZ2FwLXgiLCJnYXAteSJdLHA6WyJweCIsInB5IiwicHMiLCJwZSIsInB0IiwicHIiLCJwYiIsInBsIl0scHg6WyJwciIsInBsIl0scHk6WyJwdCIsInBiIl0sbTpbIm14IiwibXkiLCJtcyIsIm1lIiwibXQiLCJtciIsIm1iIiwibWwiXSxteDpbIm1yIiwibWwiXSxteTpbIm10IiwibWIiXSxzaXplOlsidyIsImgiXSwiZm9udC1zaXplIjpbImxlYWRpbmciXSwiZnZuLW5vcm1hbCI6WyJmdm4tb3JkaW5hbCIsImZ2bi1zbGFzaGVkLXplcm8iLCJmdm4tZmlndXJlIiwiZnZuLXNwYWNpbmciLCJmdm4tZnJhY3Rpb24iXSwiZnZuLW9yZGluYWwiOlsiZnZuLW5vcm1hbCJdLCJmdm4tc2xhc2hlZC16ZXJvIjpbImZ2bi1ub3JtYWwiXSwiZnZuLWZpZ3VyZSI6WyJmdm4tbm9ybWFsIl0sImZ2bi1zcGFjaW5nIjpbImZ2bi1ub3JtYWwiXSwiZnZuLWZyYWN0aW9uIjpbImZ2bi1ub3JtYWwiXSwibGluZS1jbGFtcCI6WyJkaXNwbGF5Iiwib3ZlcmZsb3ciXSxyb3VuZGVkOlsicm91bmRlZC1zIiwicm91bmRlZC1lIiwicm91bmRlZC10Iiwicm91bmRlZC1yIiwicm91bmRlZC1iIiwicm91bmRlZC1sIiwicm91bmRlZC1zcyIsInJvdW5kZWQtc2UiLCJyb3VuZGVkLWVlIiwicm91bmRlZC1lcyIsInJvdW5kZWQtdGwiLCJyb3VuZGVkLXRyIiwicm91bmRlZC1iciIsInJvdW5kZWQtYmwiXSwicm91bmRlZC1zIjpbInJvdW5kZWQtc3MiLCJyb3VuZGVkLWVzIl0sInJvdW5kZWQtZSI6WyJyb3VuZGVkLXNlIiwicm91bmRlZC1lZSJdLCJyb3VuZGVkLXQiOlsicm91bmRlZC10bCIsInJvdW5kZWQtdHIiXSwicm91bmRlZC1yIjpbInJvdW5kZWQtdHIiLCJyb3VuZGVkLWJyIl0sInJvdW5kZWQtYiI6WyJyb3VuZGVkLWJyIiwicm91bmRlZC1ibCJdLCJyb3VuZGVkLWwiOlsicm91bmRlZC10bCIsInJvdW5kZWQtYmwiXSwiYm9yZGVyLXNwYWNpbmciOlsiYm9yZGVyLXNwYWNpbmcteCIsImJvcmRlci1zcGFjaW5nLXkiXSwiYm9yZGVyLXciOlsiYm9yZGVyLXctcyIsImJvcmRlci13LWUiLCJib3JkZXItdy10IiwiYm9yZGVyLXctciIsImJvcmRlci13LWIiLCJib3JkZXItdy1sIl0sImJvcmRlci13LXgiOlsiYm9yZGVyLXctciIsImJvcmRlci13LWwiXSwiYm9yZGVyLXcteSI6WyJib3JkZXItdy10IiwiYm9yZGVyLXctYiJdLCJib3JkZXItY29sb3IiOlsiYm9yZGVyLWNvbG9yLXQiLCJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1iIiwiYm9yZGVyLWNvbG9yLWwiXSwiYm9yZGVyLWNvbG9yLXgiOlsiYm9yZGVyLWNvbG9yLXIiLCJib3JkZXItY29sb3ItbCJdLCJib3JkZXItY29sb3IteSI6WyJib3JkZXItY29sb3ItdCIsImJvcmRlci1jb2xvci1iIl0sInNjcm9sbC1tIjpbInNjcm9sbC1teCIsInNjcm9sbC1teSIsInNjcm9sbC1tcyIsInNjcm9sbC1tZSIsInNjcm9sbC1tdCIsInNjcm9sbC1tciIsInNjcm9sbC1tYiIsInNjcm9sbC1tbCJdLCJzY3JvbGwtbXgiOlsic2Nyb2xsLW1yIiwic2Nyb2xsLW1sIl0sInNjcm9sbC1teSI6WyJzY3JvbGwtbXQiLCJzY3JvbGwtbWIiXSwic2Nyb2xsLXAiOlsic2Nyb2xsLXB4Iiwic2Nyb2xsLXB5Iiwic2Nyb2xsLXBzIiwic2Nyb2xsLXBlIiwic2Nyb2xsLXB0Iiwic2Nyb2xsLXByIiwic2Nyb2xsLXBiIiwic2Nyb2xsLXBsIl0sInNjcm9sbC1weCI6WyJzY3JvbGwtcHIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB5IjpbInNjcm9sbC1wdCIsInNjcm9sbC1wYiJdLHRvdWNoOlsidG91Y2gteCIsInRvdWNoLXkiLCJ0b3VjaC1weiJdLCJ0b3VjaC14IjpbInRvdWNoIl0sInRvdWNoLXkiOlsidG91Y2giXSwidG91Y2gtcHoiOlsidG91Y2giXX0sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnsiZm9udC1zaXplIjpbImxlYWRpbmciXX19fWNvbnN0IEY0PVM0KHo0KTtmdW5jdGlvbiBVZSguLi5lKXtyZXR1cm4gRjQoYzQoZSkpfWNvbnN0IGtjPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsaW5uZXJSZWY6biwuLi5yfSxvKT0+Yi5qc3hzKGFQLHtyZWY6byxjbGFzc05hbWU6VWUoInJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiIsZSksLi4ucixjaGlsZHJlbjpbYi5qc3goYTQse2NsYXNzTmFtZToiaC1mdWxsIHctZnVsbCByb3VuZGVkLVtpbmhlcml0XSIscmVmOm4sY2hpbGRyZW46dH0pLGIuanN4KGhQLHt9KSxiLmpzeChsNCx7fSldfSkpO2tjLmRpc3BsYXlOYW1lPWFQLmRpc3BsYXlOYW1lO2NvbnN0IGhQPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLG9yaWVudGF0aW9uOnQ9InZlcnRpY2FsIiwuLi5ufSxyKT0+Yi5qc3goUTIse3JlZjpyLG9yaWVudGF0aW9uOnQsY2xhc3NOYW1lOlVlKCJmbGV4IHRvdWNoLW5vbmUgc2VsZWN0LW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMiLHQ9PT0idmVydGljYWwiJiYiaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50IHAtWzFweF0iLHQ9PT0iaG9yaXpvbnRhbCImJiJoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCBwLVsxcHhdIixlKSwuLi5uLGNoaWxkcmVuOmIuanN4KHQ0LHtjbGFzc05hbWU6VWUoInJlbGF0aXZlIHJvdW5kZWQtZnVsbCBiZy1ib3JkZXIiLHQ9PT0idmVydGljYWwiJiYiZmxleC0xIil9KX0pKTtoUC5kaXNwbGF5TmFtZT1RMi5kaXNwbGF5TmFtZTt2YXIgQjQ9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O2NvbnN0IFU0PWU9PmUucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpLEZlPShlLHQpPT57Y29uc3Qgbj1oLmZvcndhcmRSZWYoKHtjb2xvcjpyPSJjdXJyZW50Q29sb3IiLHNpemU6bz0yNCxzdHJva2VXaWR0aDppPTIsYWJzb2x1dGVTdHJva2VXaWR0aDpzLGNoaWxkcmVuOmEsLi4ubH0sYyk9PmguY3JlYXRlRWxlbWVudCgic3ZnIix7cmVmOmMsLi4uQjQsd2lkdGg6byxoZWlnaHQ6byxzdHJva2U6cixzdHJva2VXaWR0aDpzP051bWJlcihpKSoyNC9OdW1iZXIobyk6aSxjbGFzc05hbWU6YGx1Y2lkZSBsdWNpZGUtJHtVNChlKX1gLC4uLmx9LFsuLi50Lm1hcCgoW3UsZF0pPT5oLmNyZWF0ZUVsZW1lbnQodSxkKSksLi4uKEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pfHxbXV0pKTtyZXR1cm4gbi5kaXNwbGF5TmFtZT1gJHtlfWAsbn0sVjQ9RmUoIkFsaWduSnVzdGlmeSIsW1sibGluZSIse3gxOiIzIix4MjoiMjEiLHkxOiI2Iix5MjoiNiIsa2V5OiI0bThiOTcifV0sWyJsaW5lIix7eDE6IjMiLHgyOiIyMSIseTE6IjEyIix5MjoiMTIiLGtleToiMTBkMzh3In1dLFsibGluZSIse3gxOiIzIix4MjoiMjEiLHkxOiIxOCIseTI6IjE4IixrZXk6Imt3eXl4biJ9XV0pLEg0PUZlKCJCb2xkIixbWyJwYXRoIix7ZDoiTTE0IDEyYTQgNCAwIDAgMCAwLThINnY4IixrZXk6InYyc3lseCJ9XSxbInBhdGgiLHtkOiJNMTUgMjBhNCA0IDAgMCAwIDAtOEg2djhaIixrZXk6IjFlZjV5YSJ9XV0pLEUxPUZlKCJDaGVjayIsW1sicG9seWxpbmUiLHtwb2ludHM6IjIwIDYgOSAxNyA0IDEyIixrZXk6IjEwampmaiJ9XV0pLE1nPUZlKCJDaGV2cm9uRG93biIsW1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dKSxXND1GZSgiQ2hldnJvbkxlZnQiLFtbInBhdGgiLHtkOiJtMTUgMTgtNi02IDYtNiIsa2V5OiIxd25mZzMifV1dKSxLND1GZSgiQ2hldnJvblJpZ2h0IixbWyJwYXRoIix7ZDoibTkgMTggNi02LTYtNiIsa2V5OiJtdGhod3EifV1dKSxxND1GZSgiQ2lyY2xlIixbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dXSksRzQ9RmUoIkV4dGVybmFsTGluayIsW1sicGF0aCIse2Q6Ik0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2IixrZXk6ImE2eHFxcCJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIxNSAzIDIxIDMgMjEgOSIsa2V5OiJtem55YWQifV0sWyJsaW5lIix7eDE6IjEwIix4MjoiMjEiLHkxOiIxNCIseTI6IjMiLGtleToiMThjM3M0In1dXSksWTQ9RmUoIkZpbGUiLFtbInBhdGgiLHtkOiJNMTQuNSAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWNy41TDE0LjUgMnoiLGtleToiMW5ucHkyIn1dLFsicG9seWxpbmUiLHtwb2ludHM6IjE0IDIgMTQgOCAyMCA4IixrZXk6IjFldzBjbSJ9XV0pLEtrPUZlKCJIZWFkaW5nMSIsW1sicGF0aCIse2Q6Ik00IDEyaDgiLGtleToiMTdjZmR4In1dLFsicGF0aCIse2Q6Ik00IDE4VjYiLGtleToiMXJ6M3psIn1dLFsicGF0aCIse2Q6Ik0xMiAxOFY2IixrZXk6InpxcHhxNSJ9XSxbInBhdGgiLHtkOiJtMTcgMTIgMy0ydjgiLGtleToiMWhoaGZ0In1dXSkscWs9RmUoIkhlYWRpbmcyIixbWyJwYXRoIix7ZDoiTTQgMTJoOCIsa2V5OiIxN2NmZHgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiIsa2V5OiIxcnozemwifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYiLGtleToienFweHE1In1dLFsicGF0aCIse2Q6Ik0yMSAxOGgtNGMwLTQgNC0zIDQtNiAwLTEuNS0yLTIuNS00LTEiLGtleToiOWpyNXlpIn1dXSksR2s9RmUoIkhlYWRpbmczIixbWyJwYXRoIix7ZDoiTTQgMTJoOCIsa2V5OiIxN2NmZHgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiIsa2V5OiIxcnozemwifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYiLGtleToienFweHE1In1dLFsicGF0aCIse2Q6Ik0xNy41IDEwLjVjMS43LTEgMy41IDAgMy41IDEuNWEyIDIgMCAwIDEtMiAyIixrZXk6IjY4bmNtOCJ9XSxbInBhdGgiLHtkOiJNMTcgMTcuNWMyIDEuNSA0IC4zIDQtMS41YTIgMiAwIDAgMC0yLTIiLGtleToiMWVqdWh6In1dXSksWWs9RmUoIkhlYWRpbmc0IixbWyJwYXRoIix7ZDoiTTQgMTJoOCIsa2V5OiIxN2NmZHgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiIsa2V5OiIxcnozemwifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYiLGtleToienFweHE1In1dLFsicGF0aCIse2Q6Ik0xNyAxMHY0aDQiLGtleToiMTNzdjk3In1dLFsicGF0aCIse2Q6Ik0yMSAxMHY4IixrZXk6IjFrZG1sNCJ9XV0pLFhrPUZlKCJIZWFkaW5nNSIsW1sicGF0aCIse2Q6Ik00IDEyaDgiLGtleToiMTdjZmR4In1dLFsicGF0aCIse2Q6Ik00IDE4VjYiLGtleToiMXJ6M3psIn1dLFsicGF0aCIse2Q6Ik0xMiAxOFY2IixrZXk6InpxcHhxNSJ9XSxbInBhdGgiLHtkOiJNMTcgMTN2LTNoNCIsa2V5OiIxbnZncXAifV0sWyJwYXRoIix7ZDoiTTE3IDE3LjdjLjQuMi44LjMgMS4zLjMgMS41IDAgMi43LTEuMSAyLjctMi41UzE5LjggMTMgMTguMyAxM0gxNyIsa2V5OiIybmViZG4ifV1dKSxaaz1GZSgiSGVhZGluZzYiLFtbInBhdGgiLHtkOiJNNCAxMmg4IixrZXk6IjE3Y2ZkeCJ9XSxbInBhdGgiLHtkOiJNNCAxOFY2IixrZXk6IjFyejN6bCJ9XSxbInBhdGgiLHtkOiJNMTIgMThWNiIsa2V5OiJ6cXB4cTUifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxNiIscjoiMiIsa2V5OiIxNW14NjkifV0sWyJwYXRoIix7ZDoiTTIwIDEwYy0yIDItMyAzLjUtMyA2IixrZXk6ImYzNWRsMCJ9XV0pLFg0PUZlKCJJbWFnZSIsW1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIixrZXk6IjFtM2FnbiJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiIsa2V5OiJhZjFmMGcifV0sWyJwYXRoIix7ZDoibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiLGtleToiMXhtbnQ3In1dXSksWjQ9RmUoIkl0YWxpYyIsW1sibGluZSIse3gxOiIxOSIseDI6IjEwIix5MToiNCIseTI6IjQiLGtleToiMTVqZDNwIn1dLFsibGluZSIse3gxOiIxNCIseDI6IjUiLHkxOiIyMCIseTI6IjIwIixrZXk6ImJ1MGF1MyJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiI5Iix5MToiNCIseTI6IjIwIixrZXk6InVsam54YyJ9XV0pLEo0PUZlKCJMYW5ndWFnZXMiLFtbInBhdGgiLHtkOiJtNSA4IDYgNiIsa2V5OiIxd3U1aHYifV0sWyJwYXRoIix7ZDoibTQgMTQgNi02IDItMyIsa2V5OiIxazFnOGQifV0sWyJwYXRoIix7ZDoiTTIgNWgxMiIsa2V5OiJvcjE3N2YifV0sWyJwYXRoIix7ZDoiTTcgMmgxIixrZXk6IjF0MmpzeCJ9XSxbInBhdGgiLHtkOiJtMjIgMjItNS0xMC01IDEwIixrZXk6ImRvbjduZSJ9XSxbInBhdGgiLHtkOiJNMTQgMThoNiIsa2V5OiIxbThrNnIifV1dKSxRND1GZSgiTGluayIsW1sicGF0aCIse2Q6Ik0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIixrZXk6IjFjamVxbyJ9XSxbInBhdGgiLHtkOiJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEiLGtleToiMTlxZDY3In1dXSksZWo9RmUoIkxpc3RPcmRlcmVkIixbWyJsaW5lIix7eDE6IjEwIix4MjoiMjEiLHkxOiI2Iix5MjoiNiIsa2V5OiI3NnF3NmgifV0sWyJsaW5lIix7eDE6IjEwIix4MjoiMjEiLHkxOiIxMiIseTI6IjEyIixrZXk6IjE2bm9tNCJ9XSxbImxpbmUiLHt4MToiMTAiLHgyOiIyMSIseTE6IjE4Iix5MjoiMTgiLGtleToidTNqdXJ0In1dLFsicGF0aCIse2Q6Ik00IDZoMXY0IixrZXk6ImNub3ZwcSJ9XSxbInBhdGgiLHtkOiJNNCAxMGgyIixrZXk6IjE2eHgycyJ9XSxbInBhdGgiLHtkOiJNNiAxOEg0YzAtMSAyLTIgMi0zcy0xLTEuNS0yLTEiLGtleToibTlhOTVkIn1dXSksdGo9RmUoIkxpc3QiLFtbImxpbmUiLHt4MToiOCIseDI6IjIxIix5MToiNiIseTI6IjYiLGtleToiN2V5OHBjIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMjEiLHkxOiIxMiIseTI6IjEyIixrZXk6InJqZmJsYyJ9XSxbImxpbmUiLHt4MToiOCIseDI6IjIxIix5MToiMTgiLHkyOiIxOCIsa2V5OiJjM2IxbTgifV0sWyJsaW5lIix7eDE6IjMiLHgyOiIzLjAxIix5MToiNiIseTI6IjYiLGtleToiMWc3Z3EzIn1dLFsibGluZSIse3gxOiIzIix4MjoiMy4wMSIseTE6IjEyIix5MjoiMTIiLGtleToiMXBqbHZrIn1dLFsibGluZSIse3gxOiIzIix4MjoiMy4wMSIseTE6IjE4Iix5MjoiMTgiLGtleToiMjh0Mm1jIn1dXSksSms9RmUoIkxvZ0luIixbWyJwYXRoIix7ZDoiTTE1IDNoNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTQiLGtleToidTUzczZyIn1dLFsicG9seWxpbmUiLHtwb2ludHM6IjEwIDE3IDE1IDEyIDEwIDciLGtleToiMWFpbDBoIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjMiLHkxOiIxMiIseTI6IjEyIixrZXk6InY2Z3J4OCJ9XV0pLG5qPUZlKCJNYXhpbWl6ZTIiLFtbInBvbHlsaW5lIix7cG9pbnRzOiIxNSAzIDIxIDMgMjEgOSIsa2V5OiJtem55YWQifV0sWyJwb2x5bGluZSIse3BvaW50czoiOSAyMSAzIDIxIDMgMTUiLGtleToiMWF2bjFpIn1dLFsibGluZSIse3gxOiIyMSIseDI6IjE0Iix5MToiMyIseTI6IjEwIixrZXk6Im90YTdtbiJ9XSxbImxpbmUiLHt4MToiMyIseDI6IjEwIix5MToiMjEiLHkyOiIxNCIsa2V5OiIxYXRsMHIifV1dKSxyaj1GZSgiTWVudSIsW1sibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxMiIseTI6IjEyIixrZXk6IjFlMGE5aSJ9XSxbImxpbmUiLHt4MToiNCIseDI6IjIwIix5MToiNiIseTI6IjYiLGtleToiMW93b2IzIn1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxOCIseTI6IjE4IixrZXk6InlrNXpqMSJ9XV0pLG1QPUZlKCJNaW5pbWl6ZTIiLFtbInBvbHlsaW5lIix7cG9pbnRzOiI0IDE0IDEwIDE0IDEwIDIwIixrZXk6IjExa2ZuciJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIyMCAxMCAxNCAxMCAxNCA0IixrZXk6InJsbXNjZSJ9XSxbImxpbmUiLHt4MToiMTQiLHgyOiIyMSIseTE6IjEwIix5MjoiMyIsa2V5OiJvNWxhZnoifV0sWyJsaW5lIix7eDE6IjMiLHgyOiIxMCIseTE6IjIxIix5MjoiMTQiLGtleToiMWF0bDByIn1dXSksb2o9RmUoIk1vb24iLFtbInBhdGgiLHtkOiJNMTIgM2E2IDYgMCAwIDAgOSA5IDkgOSAwIDEgMS05LTlaIixrZXk6ImE3dG4xOCJ9XV0pLGlqPUZlKCJNb3JlSG9yaXpvbnRhbCIsW1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEiLGtleToiNDFoaWxmIn1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiMTIiLHI6IjEiLGtleToiMXdqbDhpIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxMiIscjoiMSIsa2V5OiIxcGN6OGMifV1dKSxzaj1GZSgiUGF1c2UiLFtbInJlY3QiLHt3aWR0aDoiNCIsaGVpZ2h0OiIxNiIseDoiNiIseToiNCIsa2V5OiJpZmZoZTQifV0sWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiMTYiLHg6IjE0Iix5OiI0IixrZXk6InNqaW43aiJ9XV0pLGFqPUZlKCJQbGF5IixbWyJwb2x5Z29uIix7cG9pbnRzOiI1IDMgMTkgMTIgNSAyMSA1IDMiLGtleToiMTkxNjM3In1dXSksbGo9RmUoIlBsdXMiLFtbInBhdGgiLHtkOiJNNSAxMmgxNCIsa2V5OiIxYXlzMGgifV0sWyJwYXRoIix7ZDoiTTEyIDV2MTQiLGtleToiczY5OWxlIn1dXSksY2o9RmUoIlJvdGF0ZUN3IixbWyJwYXRoIix7ZDoiTTIxIDEyYTkgOSAwIDEgMS05LTljMi41MiAwIDQuOTMgMSA2Ljc0IDIuNzRMMjEgOCIsa2V5OiIxcDQ1ZjYifV0sWyJwYXRoIix7ZDoiTTIxIDN2NWgtNSIsa2V5OiIxcTd0bzAifV1dKSxnUD1GZSgiU2VuZCIsW1sicGF0aCIse2Q6Im0yMiAyLTcgMjAtNC05LTktNFoiLGtleToiMXEzdmdnIn1dLFsicGF0aCIse2Q6Ik0yMiAyIDExIDEzIixrZXk6Im56YnFlZiJ9XV0pLHVqPUZlKCJTdHJpa2V0aHJvdWdoIixbWyJwYXRoIix7ZDoiTTE2IDRIOWEzIDMgMCAwIDAtMi44MyA0IixrZXk6IjQzc3V0bSJ9XSxbInBhdGgiLHtkOiJNMTQgMTJhNCA0IDAgMCAxIDAgOEg2IixrZXk6Im5sZmoxMyJ9XSxbImxpbmUiLHt4MToiNCIseDI6IjIwIix5MToiMTIiLHkyOiIxMiIsa2V5OiIxZTBhOWkifV1dKSxkaj1GZSgiU3VuIixbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCIsa2V5OiI0ZXhpcDIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIixrZXk6IjE0OXQ2aiJ9XSxbInBhdGgiLHtkOiJtMTcuNjYgMTcuNjYgMS40MSAxLjQxIixrZXk6InB0Ymd1diJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyIixrZXk6IjF0OGY4biJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiIsa2V5OiIxcThtancifV0sWyJwYXRoIix7ZDoibTYuMzQgMTcuNjYtMS40MSAxLjQxIixrZXk6IjFtOHp6NSJ9XSxbInBhdGgiLHtkOiJtMTkuMDcgNC45My0xLjQxIDEuNDEiLGtleToiMXNobGNzIn1dXSksdlA9RmUoIlRyYXNoIixbWyJwYXRoIix7ZDoiTTMgNmgxOCIsa2V5OiJkMHdtMGoifV0sWyJwYXRoIix7ZDoiTTE5IDZ2MTRjMCAxLTEgMi0yIDJIN2MtMSAwLTItMS0yLTJWNiIsa2V5OiI0YWxydDQifV0sWyJwYXRoIix7ZDoiTTggNlY0YzAtMSAxLTIgMi0yaDRjMSAwIDIgMSAyIDJ2MiIsa2V5OiJ2MDdzMGUifV1dKSxmaj1GZSgiVW5kbzIiLFtbInBhdGgiLHtkOiJNOSAxNCA0IDlsNS01IixrZXk6IjEwMnM1cyJ9XSxbInBhdGgiLHtkOiJNNCA5aDEwLjVhNS41IDUuNSAwIDAgMSA1LjUgNS41djBhNS41IDUuNSAwIDAgMS01LjUgNS41SDExIixrZXk6ImxseDhsbiJ9XV0pLHBqPUZlKCJVbmxpbmsiLFtbInBhdGgiLHtkOiJtMTguODQgMTIuMjUgMS43Mi0xLjcxaC0uMDJhNS4wMDQgNS4wMDQgMCAwIDAtLjEyLTcuMDcgNS4wMDYgNS4wMDYgMCAwIDAtNi45NSAwbC0xLjcyIDEuNzEiLGtleToieXF6eHQ0In1dLFsicGF0aCIse2Q6Im01LjE3IDExLjc1LTEuNzEgMS43MWE1LjAwNCA1LjAwNCAwIDAgMCAuMTIgNy4wNyA1LjAwNiA1LjAwNiAwIDAgMCA2Ljk1IDBsMS43MS0xLjcxIixrZXk6IjRxaW5iMCJ9XSxbImxpbmUiLHt4MToiOCIseDI6IjgiLHkxOiIyIix5MjoiNSIsa2V5OiIxMDQxY3AifV0sWyJsaW5lIix7eDE6IjIiLHgyOiI1Iix5MToiOCIseTI6IjgiLGtleToiMTRtMXA1In1dLFsibGluZSIse3gxOiIxNiIseDI6IjE2Iix5MToiMTkiLHkyOiIyMiIsa2V5OiJyemRpcm4ifV0sWyJsaW5lIix7eDE6IjE5Iix4MjoiMjIiLHkxOiIxNiIseTI6IjE2IixrZXk6Im94OTA1ZiJ9XV0pLFJnPUZlKCJYIixbWyJwYXRoIix7ZDoiTTE4IDYgNiAxOCIsa2V5OiIxYmw1ZjgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiIsa2V5OiJkOGJrNnYifV1dKTtmdW5jdGlvbiBQZCh7Y2hpbGRyZW46ZX0pe2NvbnN0IHQ9aC51c2VSZWYobnVsbCksbj1oLnVzZVJlZihudWxsKSxyPWgudXNlUmVmKCExKSxvPWgudXNlUmVmKDApLGk9aC51c2VSZWYobnVsbCkscz1oLnVzZVJlZigwKSxbYSxsXT1oLnVzZVN0YXRlKCEwKSxjPSgpPT57ci5jdXJyZW50PSExLGkuY3VycmVudD1udWxsLG8uY3VycmVudD0wLHMuY3VycmVudD0wfSx1PXg9Pnt4LnByZXZlbnREZWZhdWx0KCk7Y29uc3Qgdz1pLmN1cnJlbnQ9PT0ibGVmdCI/dDpuO2lmKHcuY3VycmVudCYmci5jdXJyZW50KXtjb25zdCBrPWkuY3VycmVudD09PSJsZWZ0Ij94LnNjcmVlblgtby5jdXJyZW50Om8uY3VycmVudC14LnNjcmVlblg7dy5jdXJyZW50LnN0eWxlLndpZHRoPWAke01hdGgubWF4KHMuY3VycmVudCtrLDE1MCl9cHhgfX0sZD14PT53PT57aWYody50YXJnZXQpe2NvbnN0IEU9eD09PSJsZWZ0Ij90Ong9PT0icmlnaHQiP246bnVsbDtyLmN1cnJlbnQ9ITAsRSYmRS5jdXJyZW50JiYoby5jdXJyZW50PXcuc2NyZWVuWCxpLmN1cnJlbnQ9eCxFLmN1cnJlbnQmJihzLmN1cnJlbnQ9RS5jdXJyZW50Lm9mZnNldFdpZHRoKSl9fSxbZixwLG0sZyx5LHZdPWguQ2hpbGRyZW4udG9BcnJheShlKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixjKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHUpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix1KX0pLFtdKSxiLmpzeHMoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleCBoLXNjcmVlbiIsY2hpbGRyZW46W2IuanN4cygiZGl2Iix7cmVmOnQsY2xhc3NOYW1lOlF0KCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgYm9yZGVyLXIgYm9yZGVyLWJvcmRlciBtZDpyZWxhdGl2ZSB6LVsxXSBiZy1ncmFkaWVudC10by1iciBmcm9tLWNhcmQgZnJvbS01MCUgdG8tYmFja2dyb3VuZCIseyJ3LVszMDBweF0iOmEsInctMCBtZDp3LVszMDBweF0iOiFhfSksY2hpbGRyZW46W2IuanN4cyhQZC5Db2x1bW4se2NoaWxkcmVuOltiLmpzeChRayx7c2hvd09uTW9iaWxlOiFhLG9uQ2xpY2s6KCk9PntsKCFhKX0sY2hpbGRyZW46Zn0pLGIuanN4KGtjLHtzdHlsZTp7aGVpZ2h0OiJjYWxjKDEwMHZoIC0gNTBweCkifSxvbkNsaWNrOigpPT57bCghMSl9LGNoaWxkcmVuOnB9KV19KSxiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC15LTAgcmlnaHQtMCBjdXJzb3ItY29sLXJlc2l6ZSB3LVsxcHhdIGhvdmVyOnctWzNweF0gaC1mdWxsIGhvdmVyOmJnLWJvcmRlciIsb25Nb3VzZURvd246ZCgibGVmdCIpfSldfSksYi5qc3goImRpdiIse2NsYXNzTmFtZTpRdCgidy1bY2xhbXAoMjAwcHgsNzAlLDgwdncpXSIseyJ3LWZ1bGwiOiF5JiYhdn0pLGNoaWxkcmVuOmIuanN4cyhQZC5Db2x1bW4se2NoaWxkcmVuOltiLmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIixjaGlsZHJlbjpbYi5qc3goUWsse2NsYXNzTmFtZToibWQ6aGlkZGVuIixzaG93T25Nb2JpbGU6YSxvbkNsaWNrOigpPT57bCghYSl9LGNoaWxkcmVuOmZ9KSxiLmpzeCgic3BhbiIse2NsYXNzTmFtZTpRdCh7InBsLVszMDBweF0gbWQ6cGwtMCI6YX0pLGNoaWxkcmVuOm19KV19KSxiLmpzeChrYyx7c3R5bGU6e2hlaWdodDoiY2FsYygxMDB2aCAtIDUwcHgpIn0sY2hpbGRyZW46Z30pXX0pfSksKHl8fHYpJiZiLmpzeHMoImRpdiIse3JlZjpuLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIGgtc2NyZWVuIixjaGlsZHJlbjpbYi5qc3hzKFBkLkNvbHVtbix7Y2hpbGRyZW46W3ksYi5qc3goa2Mse3N0eWxlOntoZWlnaHQ6ImNhbGMoMTAwdmggLSA1MHB4KSJ9LGNoaWxkcmVuOnZ9KV19KSxiLmpzeCgiZGl2Iix7b25Nb3VzZURvd246ZCgicmlnaHQiKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgY3Vyc29yLWNvbC1yZXNpemUgdy1bMXB4XSBiZy1ib3JkZXIgaG92ZXI6dy1bM3B4XSBob3ZlcjpiZy1ib3JkZXIifSldfSldfSl9ZnVuY3Rpb24gUWsoe2NsYXNzTmFtZTplLHNob3dPbk1vYmlsZTp0LG9uQ2xpY2s6bixjaGlsZHJlbjpyfSl7cmV0dXJuIGIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOlF0KCJmbGV4IGl0ZW1zLWNlbnRlciBweC00IG1kOnB4LTQiLGUseyJoaWRkZW4gbWQ6ZmxleCI6dH0pLGNoaWxkcmVuOltiLmpzeCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJtZDpoaWRkZW4iLG9uQ2xpY2s6bixjaGlsZHJlbjpiLmpzeChyaix7fSl9KSxiLmpzeCgic3BhbiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHctZnVsbCIsY2hpbGRyZW46cn0pXX0pfVBkLkNvbHVtbj0oe2NoaWxkcmVuOmUsY2xhc3NOYW1lOnR9KT0+e2NvbnN0W24scl09aC5DaGlsZHJlbi50b0FycmF5KGUpO3JldHVybiBiLmpzeHMoImRpdiIse2NsYXNzTmFtZTpRdCgiZmxleCBmbGV4LWNvbCIsdCksY2hpbGRyZW46W2IuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ib3JkZXIiLGNoaWxkcmVuOm59KSxyXX0pfTtjb25zdCBoaj0oe2NsYXNzTmFtZTplfSk9PmIuanN4cygic3ZnIix7d2lkdGg6IjU4IixoZWlnaHQ6IjM0Iix2aWV3Qm94OiIwIDAgNTggMzQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOmUsY2hpbGRyZW46W2IuanN4KCJnIix7ZmlsdGVyOiJ1cmwoI2ZpbHRlcjBfZF8yMV8xNjc3KSIsY2hpbGRyZW46Yi5qc3goInBhdGgiLHtkOiJNNSA1LjM2NDI2QzUgNS4xNjMwOSA1LjE2MzA5IDUgNS4zNjQyNiA1SDE3LjY1ODFDMTcuODU5MyA1IDE4LjAyMjMgNS4xNjMwOSAxOC4wMjIzIDUuMzY0MjZWMjguNDk0OUMxOC4wMjIzIDI4LjY5NiAxNy44NTkzIDI4Ljg1OTEgMTcuNjU4MSAyOC44NTkxSDUuMzY0MjZDNS4xNjMwOSAyOC44NTkxIDUgMjguNjk2IDUgMjguNDk0OVY1LjM2NDI2WiIsZmlsbDoiaHNsKHZhcigtLWFjY2VudCkpIn0pfSksYi5qc3goImciLHtmaWx0ZXI6InVybCgjZmlsdGVyMV9pXzIxXzE2NzcpIixjaGlsZHJlbjpiLmpzeCgiY2lyY2xlIix7Y3g6IjExLjQ2NTYiLGN5OiIyMy43NTk1IixyOiIyLjE4NTU3IixmaWxsOiJjdXJyZW50Q29sb3IifSl9KSxiLmpzeCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZDoiTTUyLjg1ODggMjMuODM5SDQ4LjcyNTdINDguNTM3SDQ4LjExMjhDNDcuNjcxNSAyMy44MzkgNDcuNDUwOCAyMy41OTQyIDQ3LjQ1MDggMjMuMTA0NFYxMy43MjkzQzQ3LjQ1MDggMTMuNTc4NCA0Ny4zMjg1IDEzLjQ1NjEgNDcuMTc3NyAxMy40NTYxSDQ1LjgxMThDNDUuNjYwOSAxMy40NTYxIDQ1LjUzODYgMTMuNTc4NCA0NS41Mzg2IDEzLjcyOTNWMTUuMTgzNkM0NS41Mzg2IDE1LjI4NDQgNDUuNDU2OSAxNS4zNjYxIDQ1LjM1NjEgMTUuMzY2MUM0NS4yODc2IDE1LjM2NjEgNDUuMjI1IDE1LjMyNzUgNDUuMTkyNCAxNS4yNjcyQzQ0LjgwNSAxNC41NTAzIDQ0LjI4MyAxNC4wMiA0My42MjY0IDEzLjY3NjVDNDIuOTU2MyAxMy4zMDEgNDIuMjA0NSAxMy4xMTMyIDQxLjM3MDkgMTMuMTEzMkM0MC42MDI4IDEzLjExMzIgMzkuODc1NSAxMy4yNTIgMzkuMTg5IDEzLjUyOTVDMzguNTAyNiAxMy44MDcxIDM3Ljg5NzkgMTQuMjE1MiAzNy4zNzQ4IDE0Ljc1MzlDMzYuODY4MiAxNS4yNzY0IDM2LjQ2NzggMTUuOTIxMiAzNi4xNzM2IDE2LjY4ODVDMzUuODc5NCAxNy40NTU4IDM1LjczMjMgMTguMzM3NCAzNS43MzIzIDE5LjMzMzJWMTkuNzI1QzM1LjczMjMgMjAuNzM3MiAzNS44Nzk0IDIxLjYyNyAzNi4xNzM2IDIyLjM5NDJDMzYuNDY3OCAyMy4xNjE1IDM2Ljg2ODIgMjMuODE0NiAzNy4zNzQ4IDI0LjM1MzNDMzcuODk3OSAyNC44NzU3IDM4LjUwMjYgMjUuMjc1NyAzOS4xODkgMjUuNTUzMkMzOS44NzU1IDI1LjgxNDQgNDAuNjE5MSAyNS45NDUgNDEuNDIgMjUuOTQ1QzQyLjE4ODEgMjUuOTQ1IDQyLjkxNTQgMjUuNzQ5MSA0My42MDE5IDI1LjM1NzNDNDQuMjc1MSAyNC45ODIgNDQuODA1OCAyNC40MTE5IDQ1LjE5NDEgMjMuNjQ3MUM0NS4yMjU1IDIzLjU4NTIgNDUuMjg4NiAyMy41NDUyIDQ1LjM1OCAyMy41NDUySDQ1LjM5MTdDNDUuNDcyOCAyMy41NDUyIDQ1LjUzODYgMjMuNjExIDQ1LjUzODYgMjMuNjkyMUM0NS41Mzg2IDIzLjc5MDQgNDUuNTQ0IDIzLjg4NTYgNDUuNTU0NyAyMy45Nzc3VjI1LjEzOTJDNDUuNTU0NyAyNS4zOTA0IDQ1Ljc1ODQgMjUuNTk0MSA0Ni4wMDk2IDI1LjU5NDFINDcuMjI2MUM0Ny4yOTE0IDI1LjU5OTUgNDcuMzU4MSAyNS42MDIyIDQ3LjQyNjMgMjUuNjAyMkg0OC41MzdINDguNzI1N0g1Ny43MjY4QzU3Ljg3NzcgMjUuNjAyMiA1OCAyNS40Nzk5IDU4IDI1LjMyOVYyNC4xMTIyQzU4IDIzLjk2MTQgNTcuODc3NyAyMy44MzkgNTcuNzI2OCAyMy44MzlINTUuMzE3NEM1NS4xNjY1IDIzLjgzOSA1NS4wNDQyIDIzLjcxNjcgNTUuMDQ0MiAyMy41NjU5VjguNzMzNjhDNTUuMDQ0MiA4LjU4Mjc5IDU0LjkyMTkgOC40NjA0OCA1NC43NzEgOC40NjA0OEg1MC41MDU0QzUwLjM1NDUgOC40NjA0OCA1MC4yMzIyIDguNTgyNzkgNTAuMjMyMiA4LjczMzY4VjkuOTUwNDNDNTAuMjMyMiAxMC4xMDEzIDUwLjM1NDUgMTAuMjIzNiA1MC41MDU0IDEwLjIyMzZINTIuODU4OEM1My4wMDk3IDEwLjIyMzYgNTMuMTMyIDEwLjM0NTkgNTMuMTMyIDEwLjQ5NjhWMjMuNTY1OUM1My4xMzIgMjMuNzE2NyA1My4wMDk3IDIzLjgzOSA1Mi44NTg4IDIzLjgzOVpNNDEuNjE2MSAyNC4xMzI5QzQyLjE4ODEgMjQuMTMyOSA0Mi43MTExIDI0LjAyNjggNDMuMTg1MSAyMy44MTQ2QzQzLjY3NTQgMjMuNjAyMyA0NC4wOTIyIDIzLjMwMDMgNDQuNDM1NCAyMi45MDg1QzQ0Ljc3ODYgMjIuNTE2NyA0NS4wNDgzIDIyLjA1MTQgNDUuMjQ0NCAyMS41MTI3QzQ1LjQ0MDYgMjAuOTU3NiA0NS41Mzg2IDIwLjM0NTQgNDUuNTM4NiAxOS42NzYxVjE5LjM4MjJDNDUuNTM4NiAxOC43MjkyIDQ1LjQ0MDYgMTguMTMzMyA0NS4yNDQ0IDE3LjU5NDZDNDUuMDQ4MyAxNy4wMzk1IDQ0Ljc3MDUgMTYuNTY2MSA0NC40MTA5IDE2LjE3NDNDNDQuMDY3NyAxNS43ODI0IDQzLjY1MDkgMTUuNDgwNCA0My4xNjA2IDE1LjI2ODJDNDIuNjg2NiAxNS4wMzk2IDQyLjE3MTggMTQuOTI1NCA0MS42MTYxIDE0LjkyNTRDNDEuMDQ0IDE0LjkyNTQgNDAuNTIxIDE1LjAzMTUgNDAuMDQ3MSAxNS4yNDM3QzM5LjU3MzEgMTUuNDU1OSAzOS4xNTYzIDE1Ljc1OCAzOC43OTY4IDE2LjE0OThDMzguNDUzNSAxNi41MjUyIDM4LjE4MzkgMTYuOTkwNSAzNy45ODc3IDE3LjU0NTZDMzcuNzkxNiAxOC4wODQzIDM3LjY5MzYgMTguNjgwMiAzNy42OTM2IDE5LjMzMzJWMTkuNzI1QzM3LjY5MzYgMjEuMTEyNyAzOC4wNTMxIDIyLjE5ODMgMzguNzcyMiAyMi45ODJDMzkuNTA3NyAyMy43NDkzIDQwLjQ1NTcgMjQuMTMyOSA0MS42MTYxIDI0LjEzMjlaTTMxLjExMTUgMjUuNDE5MUMzMS4wNzMyIDI1LjUyODcgMzAuOTY5OCAyNS42MDIyIDMwLjg1MzYgMjUuNjAyMkgyNy40NjYxQzI3LjM1IDI1LjYwMjIgMjcuMjQ2NSAyNS41Mjg3IDI3LjIwODIgMjUuNDE5MUwyMy4xNTc4IDEzLjgxOTNDMjMuMDk1OCAxMy42NDE3IDIzLjIyNzYgMTMuNDU2MSAyMy40MTU3IDEzLjQ1NjFIMjUuMDg5QzI1LjIwNjggMTMuNDU2MSAyNS4zMTE0IDEzLjUzMTYgMjUuMzQ4NCAxMy42NDM1TDI4Ljk2NjYgMjQuNTgxQzI4Ljk5NDIgMjQuNjY0MyAyOS4wNzIxIDI0LjcyMDYgMjkuMTU5OSAyNC43MjA2QzI5LjI0NzcgMjQuNzIwNiAyOS4zMjU2IDI0LjY2NDMgMjkuMzUzMiAyNC41ODFMMzIuOTcxNCAxMy42NDM1QzMzLjAwODQgMTMuNTMxNiAzMy4xMTI5IDEzLjQ1NjEgMzMuMjMwOCAxMy40NTYxSDM0LjkwNDFDMzUuMDkyMiAxMy40NTYxIDM1LjIyNCAxMy42NDE3IDM1LjE2MiAxMy44MTkzTDMxLjExMTUgMjUuNDE5MVoiLGZpbGw6ImN1cnJlbnRDb2xvciJ9KSxiLmpzeHMoImRlZnMiLHtjaGlsZHJlbjpbYi5qc3hzKCJmaWx0ZXIiLHtpZDoiZmlsdGVyMF9kXzIxXzE2NzciLHg6IjAuMTI0NzIyIix5OiIwLjEyNDcyMiIsd2lkdGg6IjIyLjc3MjkiLGhlaWdodDoiMzMuNjA5NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbYi5qc3goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLGIuanN4KCJmZUNvbG9yTWF0cml4Iix7aW46IlNvdXJjZUFscGhhIix0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiLHJlc3VsdDoiaGFyZEFscGhhIn0pLGIuanN4KCJmZU9mZnNldCIse30pLGIuanN4KCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMi40Mzc2NCJ9KSxiLmpzeCgiZmVDb21wb3NpdGUiLHtpbjI6ImhhcmRBbHBoYSIsb3BlcmF0b3I6Im91dCJ9KSxiLmpzeCgiZmVDb2xvck1hdHJpeCIse3R5cGU6Im1hdHJpeCIsdmFsdWVzOiIwIDAgMCAwIDAuMjE5NjA4IDAgMCAwIDAgMC44MDM5MjIgMCAwIDAgMCAwLjUwMTk2MSAwIDAgMCAwLjMgMCJ9KSxiLmpzeCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoiZWZmZWN0MV9kcm9wU2hhZG93XzIxXzE2NzcifSksYi5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6ImVmZmVjdDFfZHJvcFNoYWRvd18yMV8xNjc3IixyZXN1bHQ6InNoYXBlIn0pXX0pLGIuanN4cygiZmlsdGVyIix7aWQ6ImZpbHRlcjFfaV8yMV8xNjc3Iix4OiI5LjI4MDAzIix5OiIyMS41NzM5Iix3aWR0aDoiNC4zNzExMiIsaGVpZ2h0OiI0LjM3MTEyIixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltiLmpzeCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksYi5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxiLmpzeCgiZmVDb2xvck1hdHJpeCIse2luOiJTb3VyY2VBbHBoYSIsdHlwZToibWF0cml4Iix2YWx1ZXM6IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIixyZXN1bHQ6ImhhcmRBbHBoYSJ9KSxiLmpzeCgiZmVPZmZzZXQiLHt9KSxiLmpzeCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNTQ2MzkyIn0pLGIuanN4KCJmZUNvbXBvc2l0ZSIse2luMjoiaGFyZEFscGhhIixvcGVyYXRvcjoiYXJpdGhtZXRpYyIsazI6Ii0xIixrMzoiMSJ9KSxiLmpzeCgiZmVDb2xvck1hdHJpeCIse3R5cGU6Im1hdHJpeCIsdmFsdWVzOiIwIDAgMCAwIDAuMjE5NjA4IDAgMCAwIDAgMC44MDM5MjIgMCAwIDAgMCAwLjUwMTk2MSAwIDAgMCAwLjMgMCJ9KSxiLmpzeCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW4yOiJzaGFwZSIscmVzdWx0OiJlZmZlY3QxX2lubmVyU2hhZG93XzIxXzE2NzcifSldfSldfSldfSkseVA9aGosXzE9WC5jcmVhdGVDb250ZXh0KHtnZXQgc2Vzc2lvbigpe3Rocm93IEVycm9yKCJWYWxVSUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxVSVByb3ZpZGVyISIpfSxnZXQgdGhlbWUoKXt0aHJvdyBFcnJvcigiVmFsVUlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsVUlQcm92aWRlciEiKX0sZ2V0IHNldFRoZW1lKCl7dGhyb3cgRXJyb3IoIlZhbFVJQ29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbFVJUHJvdmlkZXIhIil9LGdldCBlZGl0TW9kZSgpe3Rocm93IEVycm9yKCJWYWxVSUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxVSVByb3ZpZGVyISIpfSxnZXQgc2V0RWRpdE1vZGUoKXt0aHJvdyBFcnJvcigiVmFsVUlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsVUlQcm92aWRlciEiKX0sZ2V0IHNldFdpbmRvd1NpemUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCB3aW5kb3dTaXplKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfX0pO2Z1bmN0aW9uIE5nKCl7cmV0dXJuIFgudXNlQ29udGV4dChfMSl9LyoqCiAqIEByZW1peC1ydW4vcm91dGVyIHYxLjE0LjIKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiBBdCgpe3JldHVybiBBdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LEF0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgenQ7KGZ1bmN0aW9uKGUpe2UuUG9wPSJQT1AiLGUuUHVzaD0iUFVTSCIsZS5SZXBsYWNlPSJSRVBMQUNFIn0pKHp0fHwoenQ9e30pKTtjb25zdCBlRT0icG9wc3RhdGUiO2Z1bmN0aW9uIG1qKGUpe2U9PT12b2lkIDAmJihlPXt9KTtmdW5jdGlvbiB0KHIsbyl7bGV0e3BhdGhuYW1lOmksc2VhcmNoOnMsaGFzaDphfT1yLmxvY2F0aW9uO3JldHVybiB0ZigiIix7cGF0aG5hbWU6aSxzZWFyY2g6cyxoYXNoOmF9LG8uc3RhdGUmJm8uc3RhdGUudXNyfHxudWxsLG8uc3RhdGUmJm8uc3RhdGUua2V5fHwiZGVmYXVsdCIpfWZ1bmN0aW9uIG4ocixvKXtyZXR1cm4gdHlwZW9mIG89PSJzdHJpbmciP286UWYobyl9cmV0dXJuIHZqKHQsbixudWxsLGUpfWZ1bmN0aW9uIEhlKGUsdCl7aWYoZT09PSExfHxlPT09bnVsbHx8dHlwZW9mIGU+InUiKXRocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBRYShlLHQpe2lmKCFlKXt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2Fybih0KTt0cnl7dGhyb3cgbmV3IEVycm9yKHQpfWNhdGNoe319fWZ1bmN0aW9uIGdqKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDgpfWZ1bmN0aW9uIHRFKGUsdCl7cmV0dXJue3VzcjplLnN0YXRlLGtleTplLmtleSxpZHg6dH19ZnVuY3Rpb24gdGYoZSx0LG4scil7cmV0dXJuIG49PT12b2lkIDAmJihuPW51bGwpLEF0KHtwYXRobmFtZTp0eXBlb2YgZT09InN0cmluZyI/ZTplLnBhdGhuYW1lLHNlYXJjaDoiIixoYXNoOiIifSx0eXBlb2YgdD09InN0cmluZyI/VmkodCk6dCx7c3RhdGU6bixrZXk6dCYmdC5rZXl8fHJ8fGdqKCl9KX1mdW5jdGlvbiBRZihlKXtsZXR7cGF0aG5hbWU6dD0iLyIsc2VhcmNoOm49IiIsaGFzaDpyPSIifT1lO3JldHVybiBuJiZuIT09Ij8iJiYodCs9bi5jaGFyQXQoMCk9PT0iPyI/bjoiPyIrbiksciYmciE9PSIjIiYmKHQrPXIuY2hhckF0KDApPT09IiMiP3I6IiMiK3IpLHR9ZnVuY3Rpb24gVmkoZSl7bGV0IHQ9e307aWYoZSl7bGV0IG49ZS5pbmRleE9mKCIjIik7bj49MCYmKHQuaGFzaD1lLnN1YnN0cihuKSxlPWUuc3Vic3RyKDAsbikpO2xldCByPWUuaW5kZXhPZigiPyIpO3I+PTAmJih0LnNlYXJjaD1lLnN1YnN0cihyKSxlPWUuc3Vic3RyKDAscikpLGUmJih0LnBhdGhuYW1lPWUpfXJldHVybiB0fWZ1bmN0aW9uIHZqKGUsdCxuLHIpe3I9PT12b2lkIDAmJihyPXt9KTtsZXR7d2luZG93Om89ZG9jdW1lbnQuZGVmYXVsdFZpZXcsdjVDb21wYXQ6aT0hMX09cixzPW8uaGlzdG9yeSxhPXp0LlBvcCxsPW51bGwsYz11KCk7Yz09bnVsbCYmKGM9MCxzLnJlcGxhY2VTdGF0ZShBdCh7fSxzLnN0YXRlLHtpZHg6Y30pLCIiKSk7ZnVuY3Rpb24gdSgpe3JldHVybihzLnN0YXRlfHx7aWR4Om51bGx9KS5pZHh9ZnVuY3Rpb24gZCgpe2E9enQuUG9wO2xldCB5PXUoKSx2PXk9PW51bGw/bnVsbDp5LWM7Yz15LGwmJmwoe2FjdGlvbjphLGxvY2F0aW9uOmcubG9jYXRpb24sZGVsdGE6dn0pfWZ1bmN0aW9uIGYoeSx2KXthPXp0LlB1c2g7bGV0IHg9dGYoZy5sb2NhdGlvbix5LHYpO24mJm4oeCx5KSxjPXUoKSsxO2xldCB3PXRFKHgsYyksaz1nLmNyZWF0ZUhyZWYoeCk7dHJ5e3MucHVzaFN0YXRlKHcsIiIsayl9Y2F0Y2goRSl7aWYoRSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmRS5uYW1lPT09IkRhdGFDbG9uZUVycm9yIil0aHJvdyBFO28ubG9jYXRpb24uYXNzaWduKGspfWkmJmwmJmwoe2FjdGlvbjphLGxvY2F0aW9uOmcubG9jYXRpb24sZGVsdGE6MX0pfWZ1bmN0aW9uIHAoeSx2KXthPXp0LlJlcGxhY2U7bGV0IHg9dGYoZy5sb2NhdGlvbix5LHYpO24mJm4oeCx5KSxjPXUoKTtsZXQgdz10RSh4LGMpLGs9Zy5jcmVhdGVIcmVmKHgpO3MucmVwbGFjZVN0YXRlKHcsIiIsayksaSYmbCYmbCh7YWN0aW9uOmEsbG9jYXRpb246Zy5sb2NhdGlvbixkZWx0YTowfSl9ZnVuY3Rpb24gbSh5KXtsZXQgdj1vLmxvY2F0aW9uLm9yaWdpbiE9PSJudWxsIj9vLmxvY2F0aW9uLm9yaWdpbjpvLmxvY2F0aW9uLmhyZWYseD10eXBlb2YgeT09InN0cmluZyI/eTpRZih5KTtyZXR1cm4gSGUodiwiTm8gd2luZG93LmxvY2F0aW9uLihvcmlnaW58aHJlZikgYXZhaWxhYmxlIHRvIGNyZWF0ZSBVUkwgZm9yIGhyZWY6ICIreCksbmV3IFVSTCh4LHYpfWxldCBnPXtnZXQgYWN0aW9uKCl7cmV0dXJuIGF9LGdldCBsb2NhdGlvbigpe3JldHVybiBlKG8scyl9LGxpc3Rlbih5KXtpZihsKXRocm93IG5ldyBFcnJvcigiQSBoaXN0b3J5IG9ubHkgYWNjZXB0cyBvbmUgYWN0aXZlIGxpc3RlbmVyIik7cmV0dXJuIG8uYWRkRXZlbnRMaXN0ZW5lcihlRSxkKSxsPXksKCk9PntvLnJlbW92ZUV2ZW50TGlzdGVuZXIoZUUsZCksbD1udWxsfX0sY3JlYXRlSHJlZih5KXtyZXR1cm4gdChvLHkpfSxjcmVhdGVVUkw6bSxlbmNvZGVMb2NhdGlvbih5KXtsZXQgdj1tKHkpO3JldHVybntwYXRobmFtZTp2LnBhdGhuYW1lLHNlYXJjaDp2LnNlYXJjaCxoYXNoOnYuaGFzaH19LHB1c2g6ZixyZXBsYWNlOnAsZ28oeSl7cmV0dXJuIHMuZ28oeSl9fTtyZXR1cm4gZ312YXIgTnQ7KGZ1bmN0aW9uKGUpe2UuZGF0YT0iZGF0YSIsZS5kZWZlcnJlZD0iZGVmZXJyZWQiLGUucmVkaXJlY3Q9InJlZGlyZWN0IixlLmVycm9yPSJlcnJvciJ9KShOdHx8KE50PXt9KSk7Y29uc3QgeWo9bmV3IFNldChbImxhenkiLCJjYXNlU2Vuc2l0aXZlIiwicGF0aCIsImlkIiwiaW5kZXgiLCJjaGlsZHJlbiJdKTtmdW5jdGlvbiB4aihlKXtyZXR1cm4gZS5pbmRleD09PSEwfWZ1bmN0aW9uIHN4KGUsdCxuLHIpe3JldHVybiBuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9e30pLGUubWFwKChvLGkpPT57bGV0IHM9Wy4uLm4saV0sYT10eXBlb2Ygby5pZD09InN0cmluZyI/by5pZDpzLmpvaW4oIi0iKTtpZihIZShvLmluZGV4IT09ITB8fCFvLmNoaWxkcmVuLCJDYW5ub3Qgc3BlY2lmeSBjaGlsZHJlbiBvbiBhbiBpbmRleCByb3V0ZSIpLEhlKCFyW2FdLCdGb3VuZCBhIHJvdXRlIGlkIGNvbGxpc2lvbiBvbiBpZCAiJythK2AiLiAgUm91dGUgaWQncyBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSB3aXRoaW4gRGF0YSBSb3V0ZXIgdXNhZ2VzYCkseGoobykpe2xldCBsPUF0KHt9LG8sdChvKSx7aWQ6YX0pO3JldHVybiByW2FdPWwsbH1lbHNle2xldCBsPUF0KHt9LG8sdChvKSx7aWQ6YSxjaGlsZHJlbjp2b2lkIDB9KTtyZXR1cm4gclthXT1sLG8uY2hpbGRyZW4mJihsLmNoaWxkcmVuPXN4KG8uY2hpbGRyZW4sdCxzLHIpKSxsfX0pfWZ1bmN0aW9uIHBjKGUsdCxuKXtuPT09dm9pZCAwJiYobj0iLyIpO2xldCByPXR5cGVvZiB0PT0ic3RyaW5nIj9WaSh0KTp0LG89ZXAoci5wYXRobmFtZXx8Ii8iLG4pO2lmKG89PW51bGwpcmV0dXJuIG51bGw7bGV0IGk9eFAoZSk7d2ooaSk7bGV0IHM9bnVsbDtmb3IobGV0IGE9MDtzPT1udWxsJiZhPGkubGVuZ3RoOysrYSlzPU1qKGlbYV0sJGoobykpO3JldHVybiBzfWZ1bmN0aW9uIGJqKGUsdCl7bGV0e3JvdXRlOm4scGF0aG5hbWU6cixwYXJhbXM6b309ZTtyZXR1cm57aWQ6bi5pZCxwYXRobmFtZTpyLHBhcmFtczpvLGRhdGE6dFtuLmlkXSxoYW5kbGU6bi5oYW5kbGV9fWZ1bmN0aW9uIHhQKGUsdCxuLHIpe3Q9PT12b2lkIDAmJih0PVtdKSxuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9IiIpO2xldCBvPShpLHMsYSk9PntsZXQgbD17cmVsYXRpdmVQYXRoOmE9PT12b2lkIDA/aS5wYXRofHwiIjphLGNhc2VTZW5zaXRpdmU6aS5jYXNlU2Vuc2l0aXZlPT09ITAsY2hpbGRyZW5JbmRleDpzLHJvdXRlOml9O2wucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoIi8iKSYmKEhlKGwucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgociksJ0Fic29sdXRlIHJvdXRlIHBhdGggIicrbC5yZWxhdGl2ZVBhdGgrJyIgbmVzdGVkIHVuZGVyIHBhdGggJysoJyInK3IrJyIgaXMgbm90IHZhbGlkLiBBbiBhYnNvbHV0ZSBjaGlsZCByb3V0ZSBwYXRoICcpKyJtdXN0IHN0YXJ0IHdpdGggdGhlIGNvbWJpbmVkIHBhdGggb2YgYWxsIGl0cyBwYXJlbnQgcm91dGVzLiIpLGwucmVsYXRpdmVQYXRoPWwucmVsYXRpdmVQYXRoLnNsaWNlKHIubGVuZ3RoKSk7bGV0IGM9RnMoW3IsbC5yZWxhdGl2ZVBhdGhdKSx1PW4uY29uY2F0KGwpO2kuY2hpbGRyZW4mJmkuY2hpbGRyZW4ubGVuZ3RoPjAmJihIZShpLmluZGV4IT09ITAsIkluZGV4IHJvdXRlcyBtdXN0IG5vdCBoYXZlIGNoaWxkIHJvdXRlcy4gUGxlYXNlIHJlbW92ZSAiKygnYWxsIGNoaWxkIHJvdXRlcyBmcm9tIHJvdXRlIHBhdGggIicrYysnIi4nKSkseFAoaS5jaGlsZHJlbix0LHUsYykpLCEoaS5wYXRoPT1udWxsJiYhaS5pbmRleCkmJnQucHVzaCh7cGF0aDpjLHNjb3JlOlRqKGMsaS5pbmRleCkscm91dGVzTWV0YTp1fSl9O3JldHVybiBlLmZvckVhY2goKGkscyk9Pnt2YXIgYTtpZihpLnBhdGg9PT0iInx8ISgoYT1pLnBhdGgpIT1udWxsJiZhLmluY2x1ZGVzKCI/IikpKW8oaSxzKTtlbHNlIGZvcihsZXQgbCBvZiBiUChpLnBhdGgpKW8oaSxzLGwpfSksdH1mdW5jdGlvbiBiUChlKXtsZXQgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldFtuLC4uLnJdPXQsbz1uLmVuZHNXaXRoKCI/IiksaT1uLnJlcGxhY2UoL1w/JC8sIiIpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gbz9baSwiIl06W2ldO2xldCBzPWJQKHIuam9pbigiLyIpKSxhPVtdO3JldHVybiBhLnB1c2goLi4ucy5tYXAobD0+bD09PSIiP2k6W2ksbF0uam9pbigiLyIpKSksbyYmYS5wdXNoKC4uLnMpLGEubWFwKGw9PmUuc3RhcnRzV2l0aCgiLyIpJiZsPT09IiI/Ii8iOmwpfWZ1bmN0aW9uIHdqKGUpe2Uuc29ydCgodCxuKT0+dC5zY29yZSE9PW4uc2NvcmU/bi5zY29yZS10LnNjb3JlOlBqKHQucm91dGVzTWV0YS5tYXAocj0+ci5jaGlsZHJlbkluZGV4KSxuLnJvdXRlc01ldGEubWFwKHI9PnIuY2hpbGRyZW5JbmRleCkpKX1jb25zdCBTaj0vXjpbXHctXSskLyxraj0zLEVqPTIsX2o9MSxDaj0xMCxPaj0tMixuRT1lPT5lPT09IioiO2Z1bmN0aW9uIFRqKGUsdCl7bGV0IG49ZS5zcGxpdCgiLyIpLHI9bi5sZW5ndGg7cmV0dXJuIG4uc29tZShuRSkmJihyKz1PaiksdCYmKHIrPUVqKSxuLmZpbHRlcihvPT4hbkUobykpLnJlZHVjZSgobyxpKT0+bysoU2oudGVzdChpKT9rajppPT09IiI/X2o6Q2opLHIpfWZ1bmN0aW9uIFBqKGUsdCl7cmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGgmJmUuc2xpY2UoMCwtMSkuZXZlcnkoKHIsbyk9PnI9PT10W29dKT9lW2UubGVuZ3RoLTFdLXRbdC5sZW5ndGgtMV06MH1mdW5jdGlvbiBNaihlLHQpe2xldHtyb3V0ZXNNZXRhOm59PWUscj17fSxvPSIvIixpPVtdO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7KytzKXtsZXQgYT1uW3NdLGw9cz09PW4ubGVuZ3RoLTEsYz1vPT09Ii8iP3Q6dC5zbGljZShvLmxlbmd0aCl8fCIvIix1PVJqKHtwYXRoOmEucmVsYXRpdmVQYXRoLGNhc2VTZW5zaXRpdmU6YS5jYXNlU2Vuc2l0aXZlLGVuZDpsfSxjKTtpZighdSlyZXR1cm4gbnVsbDtPYmplY3QuYXNzaWduKHIsdS5wYXJhbXMpO2xldCBkPWEucm91dGU7aS5wdXNoKHtwYXJhbXM6cixwYXRobmFtZTpGcyhbbyx1LnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOkxqKEZzKFtvLHUucGF0aG5hbWVCYXNlXSkpLHJvdXRlOmR9KSx1LnBhdGhuYW1lQmFzZSE9PSIvIiYmKG89RnMoW28sdS5wYXRobmFtZUJhc2VdKSl9cmV0dXJuIGl9ZnVuY3Rpb24gUmooZSx0KXt0eXBlb2YgZT09InN0cmluZyImJihlPXtwYXRoOmUsY2FzZVNlbnNpdGl2ZTohMSxlbmQ6ITB9KTtsZXRbbixyXT1OaihlLnBhdGgsZS5jYXNlU2Vuc2l0aXZlLGUuZW5kKSxvPXQubWF0Y2gobik7aWYoIW8pcmV0dXJuIG51bGw7bGV0IGk9b1swXSxzPWkucmVwbGFjZSgvKC4pXC8rJC8sIiQxIiksYT1vLnNsaWNlKDEpO3JldHVybntwYXJhbXM6ci5yZWR1Y2UoKGMsdSxkKT0+e2xldHtwYXJhbU5hbWU6Zixpc09wdGlvbmFsOnB9PXU7aWYoZj09PSIqIil7bGV0IGc9YVtkXXx8IiI7cz1pLnNsaWNlKDAsaS5sZW5ndGgtZy5sZW5ndGgpLnJlcGxhY2UoLyguKVwvKyQvLCIkMSIpfWNvbnN0IG09YVtkXTtyZXR1cm4gcCYmIW0/Y1tmXT12b2lkIDA6Y1tmXT1BaihtfHwiIixmKSxjfSx7fSkscGF0aG5hbWU6aSxwYXRobmFtZUJhc2U6cyxwYXR0ZXJuOmV9fWZ1bmN0aW9uIE5qKGUsdCxuKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITApLFFhKGU9PT0iKiJ8fCFlLmVuZHNXaXRoKCIqIil8fGUuZW5kc1dpdGgoIi8qIiksJ1JvdXRlIHBhdGggIicrZSsnIiB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZSAnKygnIicrZS5yZXBsYWNlKC9cKiQvLCIvKiIpKyciIGJlY2F1c2UgdGhlIGAqYCBjaGFyYWN0ZXIgbXVzdCAnKSsiYWx3YXlzIGZvbGxvdyBhIGAvYCBpbiB0aGUgcGF0dGVybi4gVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsICIrKCdwbGVhc2UgY2hhbmdlIHRoZSByb3V0ZSBwYXRoIHRvICInK2UucmVwbGFjZSgvXCokLywiLyoiKSsnIi4nKSk7bGV0IHI9W10sbz0iXiIrZS5yZXBsYWNlKC9cLypcKj8kLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKS5yZXBsYWNlKC9bXFwuKiteJHt9fCgpW1xdXS9nLCJcXCQmIikucmVwbGFjZSgvXC86KFtcdy1dKykoXD8pPy9nLChzLGEsbCk9PihyLnB1c2goe3BhcmFtTmFtZTphLGlzT3B0aW9uYWw6bCE9bnVsbH0pLGw/Ii8/KFteXFwvXSspPyI6Ii8oW15cXC9dKykiKSk7cmV0dXJuIGUuZW5kc1dpdGgoIioiKT8oci5wdXNoKHtwYXJhbU5hbWU6IioifSksbys9ZT09PSIqInx8ZT09PSIvKiI/IiguKikkIjoiKD86XFwvKC4rKXxcXC8qKSQiKTpuP28rPSJcXC8qJCI6ZSE9PSIiJiZlIT09Ii8iJiYobys9Iig/Oig/PVxcL3wkKSkiKSxbbmV3IFJlZ0V4cChvLHQ/dm9pZCAwOiJpIikscl19ZnVuY3Rpb24gJGooZSl7dHJ5e3JldHVybiBkZWNvZGVVUkkoZSl9Y2F0Y2godCl7cmV0dXJuIFFhKCExLCdUaGUgVVJMIHBhdGggIicrZSsnIiBjb3VsZCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlIGl0IGlzIGlzIGEgbWFsZm9ybWVkIFVSTCBzZWdtZW50LiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGJhZCBwZXJjZW50ICcrKCJlbmNvZGluZyAoIit0KyIpLiIpKSxlfX1mdW5jdGlvbiBBaihlLHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKG4pe3JldHVybiBRYSghMSwnVGhlIHZhbHVlIGZvciB0aGUgVVJMIHBhcmFtICInK3QrJyIgd2lsbCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlJysoJyB0aGUgc3RyaW5nICInK2UrJyIgaXMgYSBtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHknKSsoIiBkdWUgdG8gYSBiYWQgcGVyY2VudCBlbmNvZGluZyAoIituKyIpLiIpKSxlfX1mdW5jdGlvbiBlcChlLHQpe2lmKHQ9PT0iLyIpcmV0dXJuIGU7aWYoIWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHQudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG51bGw7bGV0IG49dC5lbmRzV2l0aCgiLyIpP3QubGVuZ3RoLTE6dC5sZW5ndGgscj1lLmNoYXJBdChuKTtyZXR1cm4gciYmciE9PSIvIj9udWxsOmUuc2xpY2Uobil8fCIvIn1mdW5jdGlvbiBEaihlLHQpe3Q9PT12b2lkIDAmJih0PSIvIik7bGV0e3BhdGhuYW1lOm4sc2VhcmNoOnI9IiIsaGFzaDpvPSIifT10eXBlb2YgZT09InN0cmluZyI/VmkoZSk6ZTtyZXR1cm57cGF0aG5hbWU6bj9uLnN0YXJ0c1dpdGgoIi8iKT9uOklqKG4sdCk6dCxzZWFyY2g6amoociksaGFzaDp6aihvKX19ZnVuY3Rpb24gSWooZSx0KXtsZXQgbj10LnJlcGxhY2UoL1wvKyQvLCIiKS5zcGxpdCgiLyIpO3JldHVybiBlLnNwbGl0KCIvIikuZm9yRWFjaChvPT57bz09PSIuLiI/bi5sZW5ndGg+MSYmbi5wb3AoKTpvIT09Ii4iJiZuLnB1c2gobyl9KSxuLmxlbmd0aD4xP24uam9pbigiLyIpOiIvIn1mdW5jdGlvbiBoeShlLHQsbixyKXtyZXR1cm4iQ2Fubm90IGluY2x1ZGUgYSAnIitlKyInIGNoYXJhY3RlciBpbiBhIG1hbnVhbGx5IHNwZWNpZmllZCAiKygiYHRvLiIrdCsiYCBmaWVsZCBbIitKU09OLnN0cmluZ2lmeShyKSsiXS4gIFBsZWFzZSBzZXBhcmF0ZSBpdCBvdXQgdG8gdGhlICIpKygiYHRvLiIrbisiYCBmaWVsZC4gQWx0ZXJuYXRpdmVseSB5b3UgbWF5IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyAiKSsnYSBzdHJpbmcgaW4gPExpbmsgdG89Ii4uLiI+IGFuZCB0aGUgcm91dGVyIHdpbGwgcGFyc2UgaXQgZm9yIHlvdS4nfWZ1bmN0aW9uIHdQKGUpe3JldHVybiBlLmZpbHRlcigodCxuKT0+bj09PTB8fHQucm91dGUucGF0aCYmdC5yb3V0ZS5wYXRoLmxlbmd0aD4wKX1mdW5jdGlvbiBTUChlLHQpe2xldCBuPXdQKGUpO3JldHVybiB0P24ubWFwKChyLG8pPT5vPT09ZS5sZW5ndGgtMT9yLnBhdGhuYW1lOnIucGF0aG5hbWVCYXNlKTpuLm1hcChyPT5yLnBhdGhuYW1lQmFzZSl9ZnVuY3Rpb24ga1AoZSx0LG4scil7cj09PXZvaWQgMCYmKHI9ITEpO2xldCBvO3R5cGVvZiBlPT0ic3RyaW5nIj9vPVZpKGUpOihvPUF0KHt9LGUpLEhlKCFvLnBhdGhuYW1lfHwhby5wYXRobmFtZS5pbmNsdWRlcygiPyIpLGh5KCI/IiwicGF0aG5hbWUiLCJzZWFyY2giLG8pKSxIZSghby5wYXRobmFtZXx8IW8ucGF0aG5hbWUuaW5jbHVkZXMoIiMiKSxoeSgiIyIsInBhdGhuYW1lIiwiaGFzaCIsbykpLEhlKCFvLnNlYXJjaHx8IW8uc2VhcmNoLmluY2x1ZGVzKCIjIiksaHkoIiMiLCJzZWFyY2giLCJoYXNoIixvKSkpO2xldCBpPWU9PT0iInx8by5wYXRobmFtZT09PSIiLHM9aT8iLyI6by5wYXRobmFtZSxhO2lmKHM9PW51bGwpYT1uO2Vsc2V7bGV0IGQ9dC5sZW5ndGgtMTtpZighciYmcy5zdGFydHNXaXRoKCIuLiIpKXtsZXQgZj1zLnNwbGl0KCIvIik7Zm9yKDtmWzBdPT09Ii4uIjspZi5zaGlmdCgpLGQtPTE7by5wYXRobmFtZT1mLmpvaW4oIi8iKX1hPWQ+PTA/dFtkXToiLyJ9bGV0IGw9RGoobyxhKSxjPXMmJnMhPT0iLyImJnMuZW5kc1dpdGgoIi8iKSx1PShpfHxzPT09Ii4iKSYmbi5lbmRzV2l0aCgiLyIpO3JldHVybiFsLnBhdGhuYW1lLmVuZHNXaXRoKCIvIikmJihjfHx1KSYmKGwucGF0aG5hbWUrPSIvIiksbH1jb25zdCBGcz1lPT5lLmpvaW4oIi8iKS5yZXBsYWNlKC9cL1wvKy9nLCIvIiksTGo9ZT0+ZS5yZXBsYWNlKC9cLyskLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKSxqaj1lPT4hZXx8ZT09PSI/Ij8iIjplLnN0YXJ0c1dpdGgoIj8iKT9lOiI/IitlLHpqPWU9PiFlfHxlPT09IiMiPyIiOmUuc3RhcnRzV2l0aCgiIyIpP2U6IiMiK2U7Y2xhc3MgQzF7Y29uc3RydWN0b3IodCxuLHIsbyl7bz09PXZvaWQgMCYmKG89ITEpLHRoaXMuc3RhdHVzPXQsdGhpcy5zdGF0dXNUZXh0PW58fCIiLHRoaXMuaW50ZXJuYWw9byxyIGluc3RhbmNlb2YgRXJyb3I/KHRoaXMuZGF0YT1yLnRvU3RyaW5nKCksdGhpcy5lcnJvcj1yKTp0aGlzLmRhdGE9cn19ZnVuY3Rpb24gRVAoZSl7cmV0dXJuIGUhPW51bGwmJnR5cGVvZiBlLnN0YXR1cz09Im51bWJlciImJnR5cGVvZiBlLnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgZS5pbnRlcm5hbD09ImJvb2xlYW4iJiYiZGF0YSJpbiBlfWNvbnN0IF9QPVsicG9zdCIsInB1dCIsInBhdGNoIiwiZGVsZXRlIl0sRmo9bmV3IFNldChfUCksQmo9WyJnZXQiLC4uLl9QXSxVaj1uZXcgU2V0KEJqKSxWaj1uZXcgU2V0KFszMDEsMzAyLDMwMywzMDcsMzA4XSksSGo9bmV3IFNldChbMzA3LDMwOF0pLG15PXtzdGF0ZToiaWRsZSIsbG9jYXRpb246dm9pZCAwLGZvcm1NZXRob2Q6dm9pZCAwLGZvcm1BY3Rpb246dm9pZCAwLGZvcm1FbmNUeXBlOnZvaWQgMCxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9LFdqPXtzdGF0ZToiaWRsZSIsZGF0YTp2b2lkIDAsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH0sUnU9e3N0YXRlOiJ1bmJsb2NrZWQiLHByb2NlZWQ6dm9pZCAwLHJlc2V0OnZvaWQgMCxsb2NhdGlvbjp2b2lkIDB9LENQPS9eKD86W2Etel1bYS16MC05Ky4tXSo6fFwvXC8pL2ksS2o9ZT0+KHtoYXNFcnJvckJvdW5kYXJ5OiEhZS5oYXNFcnJvckJvdW5kYXJ5fSksT1A9InJlbWl4LXJvdXRlci10cmFuc2l0aW9ucyI7ZnVuY3Rpb24gcWooZSl7Y29uc3QgdD1lLndpbmRvdz9lLndpbmRvdzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwLG49dHlwZW9mIHQ8InUiJiZ0eXBlb2YgdC5kb2N1bWVudDwidSImJnR5cGVvZiB0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiLHI9IW47SGUoZS5yb3V0ZXMubGVuZ3RoPjAsIllvdSBtdXN0IHByb3ZpZGUgYSBub24tZW1wdHkgcm91dGVzIGFycmF5IHRvIGNyZWF0ZVJvdXRlciIpO2xldCBvO2lmKGUubWFwUm91dGVQcm9wZXJ0aWVzKW89ZS5tYXBSb3V0ZVByb3BlcnRpZXM7ZWxzZSBpZihlLmRldGVjdEVycm9yQm91bmRhcnkpe2xldCAkPWUuZGV0ZWN0RXJyb3JCb3VuZGFyeTtvPUQ9Pih7aGFzRXJyb3JCb3VuZGFyeTokKEQpfSl9ZWxzZSBvPUtqO2xldCBpPXt9LHM9c3goZS5yb3V0ZXMsbyx2b2lkIDAsaSksYSxsPWUuYmFzZW5hbWV8fCIvIixjPUF0KHt2N19mZXRjaGVyUGVyc2lzdDohMSx2N19ub3JtYWxpemVGb3JtTWV0aG9kOiExLHY3X3BhcnRpYWxIeWRyYXRpb246ITEsdjdfcHJlcGVuZEJhc2VuYW1lOiExLHY3X3JlbGF0aXZlU3BsYXRQYXRoOiExfSxlLmZ1dHVyZSksdT1udWxsLGQ9bmV3IFNldCxmPW51bGwscD1udWxsLG09bnVsbCxnPWUuaHlkcmF0aW9uRGF0YSE9bnVsbCx5PXBjKHMsZS5oaXN0b3J5LmxvY2F0aW9uLGwpLHY9bnVsbDtpZih5PT1udWxsKXtsZXQgJD1Gcig0MDQse3BhdGhuYW1lOmUuaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZX0pLHttYXRjaGVzOkQscm91dGU6en09dUUocyk7eT1ELHY9e1t6LmlkXTokfX1sZXQgeCx3PXkuc29tZSgkPT4kLnJvdXRlLmxhenkpLGs9eS5zb21lKCQ9PiQucm91dGUubG9hZGVyKTtpZih3KXg9ITE7ZWxzZSBpZighayl4PSEwO2Vsc2UgaWYoYy52N19wYXJ0aWFsSHlkcmF0aW9uKXtsZXQgJD1lLmh5ZHJhdGlvbkRhdGE/ZS5oeWRyYXRpb25EYXRhLmxvYWRlckRhdGE6bnVsbCxEPWUuaHlkcmF0aW9uRGF0YT9lLmh5ZHJhdGlvbkRhdGEuZXJyb3JzOm51bGw7eD15LmV2ZXJ5KHo9Pnoucm91dGUubG9hZGVyJiZ6LnJvdXRlLmxvYWRlci5oeWRyYXRlIT09ITAmJigkJiYkW3oucm91dGUuaWRdIT09dm9pZCAwfHxEJiZEW3oucm91dGUuaWRdIT09dm9pZCAwKSl9ZWxzZSB4PWUuaHlkcmF0aW9uRGF0YSE9bnVsbDtsZXQgRSxTPXtoaXN0b3J5QWN0aW9uOmUuaGlzdG9yeS5hY3Rpb24sbG9jYXRpb246ZS5oaXN0b3J5LmxvY2F0aW9uLG1hdGNoZXM6eSxpbml0aWFsaXplZDp4LG5hdmlnYXRpb246bXkscmVzdG9yZVNjcm9sbFBvc2l0aW9uOmUuaHlkcmF0aW9uRGF0YSE9bnVsbD8hMTpudWxsLHByZXZlbnRTY3JvbGxSZXNldDohMSxyZXZhbGlkYXRpb246ImlkbGUiLGxvYWRlckRhdGE6ZS5oeWRyYXRpb25EYXRhJiZlLmh5ZHJhdGlvbkRhdGEubG9hZGVyRGF0YXx8e30sYWN0aW9uRGF0YTplLmh5ZHJhdGlvbkRhdGEmJmUuaHlkcmF0aW9uRGF0YS5hY3Rpb25EYXRhfHxudWxsLGVycm9yczplLmh5ZHJhdGlvbkRhdGEmJmUuaHlkcmF0aW9uRGF0YS5lcnJvcnN8fHYsZmV0Y2hlcnM6bmV3IE1hcCxibG9ja2VyczpuZXcgTWFwfSxfPXp0LlBvcCxQPSExLE0sQT0hMSxJPW5ldyBNYXAsTD1udWxsLHJlPSExLFY9ITEsSz1bXSxDPVtdLFQ9bmV3IE1hcCxPPTAsUj0tMSxOPW5ldyBNYXAsaj1uZXcgU2V0LEc9bmV3IE1hcCx4ZT1uZXcgTWFwLHVlPW5ldyBTZXQsamU9bmV3IE1hcCxDZT1uZXcgTWFwLFE9ITE7ZnVuY3Rpb24gdHQoKXtpZih1PWUuaGlzdG9yeS5saXN0ZW4oJD0+e2xldHthY3Rpb246RCxsb2NhdGlvbjp6LGRlbHRhOmVlfT0kO2lmKFEpe1E9ITE7cmV0dXJufVFhKENlLnNpemU9PT0wfHxlZSE9bnVsbCwiWW91IGFyZSB0cnlpbmcgdG8gdXNlIGEgYmxvY2tlciBvbiBhIFBPUCBuYXZpZ2F0aW9uIHRvIGEgbG9jYXRpb24gdGhhdCB3YXMgbm90IGNyZWF0ZWQgYnkgQHJlbWl4LXJ1bi9yb3V0ZXIuIFRoaXMgd2lsbCBmYWlsIHNpbGVudGx5IGluIHByb2R1Y3Rpb24uIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgYXJlIG5hdmlnYXRpbmcgb3V0c2lkZSB0aGUgcm91dGVyIHZpYSBgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlYC9gd2luZG93LmxvY2F0aW9uLmhhc2hgIGluc3RlYWQgb2YgdXNpbmcgcm91dGVyIG5hdmlnYXRpb24gQVBJcy4gIFRoaXMgY2FuIGFsc28gaGFwcGVuIGlmIHlvdSBhcmUgdXNpbmcgY3JlYXRlSGFzaFJvdXRlciBhbmQgdGhlIHVzZXIgbWFudWFsbHkgY2hhbmdlcyB0aGUgVVJMLiIpO2xldCBjZT1TUyh7Y3VycmVudExvY2F0aW9uOlMubG9jYXRpb24sbmV4dExvY2F0aW9uOnosaGlzdG9yeUFjdGlvbjpEfSk7aWYoY2UmJmVlIT1udWxsKXtRPSEwLGUuaGlzdG9yeS5nbyhlZSotMSkseXAoY2Use3N0YXRlOiJibG9ja2VkIixsb2NhdGlvbjp6LHByb2NlZWQoKXt5cChjZSx7c3RhdGU6InByb2NlZWRpbmciLHByb2NlZWQ6dm9pZCAwLHJlc2V0OnZvaWQgMCxsb2NhdGlvbjp6fSksZS5oaXN0b3J5LmdvKGVlKX0scmVzZXQoKXtsZXQgemU9bmV3IE1hcChTLmJsb2NrZXJzKTt6ZS5zZXQoY2UsUnUpLFBlKHtibG9ja2Vyczp6ZX0pfX0pO3JldHVybn1yZXR1cm4geG4oRCx6KX0pLG4pe282KHQsSSk7bGV0ICQ9KCk9Pmk2KHQsSSk7dC5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsJCksTD0oKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsJCl9cmV0dXJuIFMuaW5pdGlhbGl6ZWR8fHhuKHp0LlBvcCxTLmxvY2F0aW9uLHtpbml0aWFsSHlkcmF0aW9uOiEwfSksRX1mdW5jdGlvbiBudCgpe3UmJnUoKSxMJiZMKCksZC5jbGVhcigpLE0mJk0uYWJvcnQoKSxTLmZldGNoZXJzLmZvckVhY2goKCQsRCk9PnZwKEQpKSxTLmJsb2NrZXJzLmZvckVhY2goKCQsRCk9PndTKEQpKX1mdW5jdGlvbiBydCgkKXtyZXR1cm4gZC5hZGQoJCksKCk9PmQuZGVsZXRlKCQpfWZ1bmN0aW9uIFBlKCQsRCl7RD09PXZvaWQgMCYmKEQ9e30pLFM9QXQoe30sUywkKTtsZXQgej1bXSxlZT1bXTtjLnY3X2ZldGNoZXJQZXJzaXN0JiZTLmZldGNoZXJzLmZvckVhY2goKGNlLHplKT0+e2NlLnN0YXRlPT09ImlkbGUiJiYodWUuaGFzKHplKT9lZS5wdXNoKHplKTp6LnB1c2goemUpKX0pLFsuLi5kXS5mb3JFYWNoKGNlPT5jZShTLHtkZWxldGVkRmV0Y2hlcnM6ZWUsdW5zdGFibGVfdmlld1RyYW5zaXRpb25PcHRzOkQudmlld1RyYW5zaXRpb25PcHRzLHVuc3RhYmxlX2ZsdXNoU3luYzpELmZsdXNoU3luYz09PSEwfSkpLGMudjdfZmV0Y2hlclBlcnNpc3QmJih6LmZvckVhY2goY2U9PlMuZmV0Y2hlcnMuZGVsZXRlKGNlKSksZWUuZm9yRWFjaChjZT0+dnAoY2UpKSl9ZnVuY3Rpb24gR2UoJCxELHope3ZhciBlZSxjZTtsZXR7Zmx1c2hTeW5jOnplfT16PT09dm9pZCAwP3t9OnosRWU9Uy5hY3Rpb25EYXRhIT1udWxsJiZTLm5hdmlnYXRpb24uZm9ybU1ldGhvZCE9bnVsbCYmZ28oUy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QpJiZTLm5hdmlnYXRpb24uc3RhdGU9PT0ibG9hZGluZyImJigoZWU9JC5zdGF0ZSk9PW51bGw/dm9pZCAwOmVlLl9pc1JlZGlyZWN0KSE9PSEwLGtlO0QuYWN0aW9uRGF0YT9PYmplY3Qua2V5cyhELmFjdGlvbkRhdGEpLmxlbmd0aD4wP2tlPUQuYWN0aW9uRGF0YTprZT1udWxsOkVlP2tlPVMuYWN0aW9uRGF0YTprZT1udWxsO2xldCB2ZT1ELmxvYWRlckRhdGE/Y0UoUy5sb2FkZXJEYXRhLEQubG9hZGVyRGF0YSxELm1hdGNoZXN8fFtdLEQuZXJyb3JzKTpTLmxvYWRlckRhdGEsS2U9Uy5ibG9ja2VycztLZS5zaXplPjAmJihLZT1uZXcgTWFwKEtlKSxLZS5mb3JFYWNoKChodCxibik9PktlLnNldChibixSdSkpKTtsZXQgb249UD09PSEwfHxTLm5hdmlnYXRpb24uZm9ybU1ldGhvZCE9bnVsbCYmZ28oUy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QpJiYoKGNlPSQuc3RhdGUpPT1udWxsP3ZvaWQgMDpjZS5faXNSZWRpcmVjdCkhPT0hMDthJiYocz1hLGE9dm9pZCAwKSxyZXx8Xz09PXp0LlBvcHx8KF89PT16dC5QdXNoP2UuaGlzdG9yeS5wdXNoKCQsJC5zdGF0ZSk6Xz09PXp0LlJlcGxhY2UmJmUuaGlzdG9yeS5yZXBsYWNlKCQsJC5zdGF0ZSkpO2xldCBBZTtpZihfPT09enQuUG9wKXtsZXQgaHQ9SS5nZXQoUy5sb2NhdGlvbi5wYXRobmFtZSk7aHQmJmh0LmhhcygkLnBhdGhuYW1lKT9BZT17Y3VycmVudExvY2F0aW9uOlMubG9jYXRpb24sbmV4dExvY2F0aW9uOiR9OkkuaGFzKCQucGF0aG5hbWUpJiYoQWU9e2N1cnJlbnRMb2NhdGlvbjokLG5leHRMb2NhdGlvbjpTLmxvY2F0aW9ufSl9ZWxzZSBpZihBKXtsZXQgaHQ9SS5nZXQoUy5sb2NhdGlvbi5wYXRobmFtZSk7aHQ/aHQuYWRkKCQucGF0aG5hbWUpOihodD1uZXcgU2V0KFskLnBhdGhuYW1lXSksSS5zZXQoUy5sb2NhdGlvbi5wYXRobmFtZSxodCkpLEFlPXtjdXJyZW50TG9jYXRpb246Uy5sb2NhdGlvbixuZXh0TG9jYXRpb246JH19UGUoQXQoe30sRCx7YWN0aW9uRGF0YTprZSxsb2FkZXJEYXRhOnZlLGhpc3RvcnlBY3Rpb246Xyxsb2NhdGlvbjokLGluaXRpYWxpemVkOiEwLG5hdmlnYXRpb246bXkscmV2YWxpZGF0aW9uOiJpZGxlIixyZXN0b3JlU2Nyb2xsUG9zaXRpb246RVMoJCxELm1hdGNoZXN8fFMubWF0Y2hlcykscHJldmVudFNjcm9sbFJlc2V0Om9uLGJsb2NrZXJzOktlfSkse3ZpZXdUcmFuc2l0aW9uT3B0czpBZSxmbHVzaFN5bmM6emU9PT0hMH0pLF89enQuUG9wLFA9ITEsQT0hMSxyZT0hMSxWPSExLEs9W10sQz1bXX1hc3luYyBmdW5jdGlvbiBUbigkLEQpe2lmKHR5cGVvZiAkPT0ibnVtYmVyIil7ZS5oaXN0b3J5LmdvKCQpO3JldHVybn1sZXQgej1heChTLmxvY2F0aW9uLFMubWF0Y2hlcyxsLGMudjdfcHJlcGVuZEJhc2VuYW1lLCQsYy52N19yZWxhdGl2ZVNwbGF0UGF0aCxEPT1udWxsP3ZvaWQgMDpELmZyb21Sb3V0ZUlkLEQ9PW51bGw/dm9pZCAwOkQucmVsYXRpdmUpLHtwYXRoOmVlLHN1Ym1pc3Npb246Y2UsZXJyb3I6emV9PXJFKGMudjdfbm9ybWFsaXplRm9ybU1ldGhvZCwhMSx6LEQpLEVlPVMubG9jYXRpb24sa2U9dGYoUy5sb2NhdGlvbixlZSxEJiZELnN0YXRlKTtrZT1BdCh7fSxrZSxlLmhpc3RvcnkuZW5jb2RlTG9jYXRpb24oa2UpKTtsZXQgdmU9RCYmRC5yZXBsYWNlIT1udWxsP0QucmVwbGFjZTp2b2lkIDAsS2U9enQuUHVzaDt2ZT09PSEwP0tlPXp0LlJlcGxhY2U6dmU9PT0hMXx8Y2UhPW51bGwmJmdvKGNlLmZvcm1NZXRob2QpJiZjZS5mb3JtQWN0aW9uPT09Uy5sb2NhdGlvbi5wYXRobmFtZStTLmxvY2F0aW9uLnNlYXJjaCYmKEtlPXp0LlJlcGxhY2UpO2xldCBvbj1EJiYicHJldmVudFNjcm9sbFJlc2V0ImluIEQ/RC5wcmV2ZW50U2Nyb2xsUmVzZXQ9PT0hMDp2b2lkIDAsQWU9KEQmJkQudW5zdGFibGVfZmx1c2hTeW5jKT09PSEwLGh0PVNTKHtjdXJyZW50TG9jYXRpb246RWUsbmV4dExvY2F0aW9uOmtlLGhpc3RvcnlBY3Rpb246S2V9KTtpZihodCl7eXAoaHQse3N0YXRlOiJibG9ja2VkIixsb2NhdGlvbjprZSxwcm9jZWVkKCl7eXAoaHQse3N0YXRlOiJwcm9jZWVkaW5nIixwcm9jZWVkOnZvaWQgMCxyZXNldDp2b2lkIDAsbG9jYXRpb246a2V9KSxUbigkLEQpfSxyZXNldCgpe2xldCBibj1uZXcgTWFwKFMuYmxvY2tlcnMpO2JuLnNldChodCxSdSksUGUoe2Jsb2NrZXJzOmJufSl9fSk7cmV0dXJufXJldHVybiBhd2FpdCB4bihLZSxrZSx7c3VibWlzc2lvbjpjZSxwZW5kaW5nRXJyb3I6emUscHJldmVudFNjcm9sbFJlc2V0Om9uLHJlcGxhY2U6RCYmRC5yZXBsYWNlLGVuYWJsZVZpZXdUcmFuc2l0aW9uOkQmJkQudW5zdGFibGVfdmlld1RyYW5zaXRpb24sZmx1c2hTeW5jOkFlfSl9ZnVuY3Rpb24gem4oKXtpZihEdigpLFBlKHtyZXZhbGlkYXRpb246ImxvYWRpbmcifSksUy5uYXZpZ2F0aW9uLnN0YXRlIT09InN1Ym1pdHRpbmciKXtpZihTLm5hdmlnYXRpb24uc3RhdGU9PT0iaWRsZSIpe3huKFMuaGlzdG9yeUFjdGlvbixTLmxvY2F0aW9uLHtzdGFydFVuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb246ITB9KTtyZXR1cm59eG4oX3x8Uy5oaXN0b3J5QWN0aW9uLFMubmF2aWdhdGlvbi5sb2NhdGlvbix7b3ZlcnJpZGVOYXZpZ2F0aW9uOlMubmF2aWdhdGlvbn0pfX1hc3luYyBmdW5jdGlvbiB4bigkLEQseil7TSYmTS5hYm9ydCgpLE09bnVsbCxfPSQscmU9KHomJnouc3RhcnRVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uKT09PSEwLFhEKFMubG9jYXRpb24sUy5tYXRjaGVzKSxQPSh6JiZ6LnByZXZlbnRTY3JvbGxSZXNldCk9PT0hMCxBPSh6JiZ6LmVuYWJsZVZpZXdUcmFuc2l0aW9uKT09PSEwO2xldCBlZT1hfHxzLGNlPXomJnoub3ZlcnJpZGVOYXZpZ2F0aW9uLHplPXBjKGVlLEQsbCksRWU9KHomJnouZmx1c2hTeW5jKT09PSEwO2lmKCF6ZSl7bGV0IGJuPUZyKDQwNCx7cGF0aG5hbWU6RC5wYXRobmFtZX0pLHttYXRjaGVzOnpyLHJvdXRlOnNufT11RShlZSk7SXYoKSxHZShELHttYXRjaGVzOnpyLGxvYWRlckRhdGE6e30sZXJyb3JzOntbc24uaWRdOmJufX0se2ZsdXNoU3luYzpFZX0pO3JldHVybn1pZihTLmluaXRpYWxpemVkJiYhViYmSmooUy5sb2NhdGlvbixEKSYmISh6JiZ6LnN1Ym1pc3Npb24mJmdvKHouc3VibWlzc2lvbi5mb3JtTWV0aG9kKSkpe0dlKEQse21hdGNoZXM6emV9LHtmbHVzaFN5bmM6RWV9KTtyZXR1cm59TT1uZXcgQWJvcnRDb250cm9sbGVyO2xldCBrZT0kdShlLmhpc3RvcnksRCxNLnNpZ25hbCx6JiZ6LnN1Ym1pc3Npb24pLHZlLEtlO2lmKHomJnoucGVuZGluZ0Vycm9yKUtlPXtbTWQoemUpLnJvdXRlLmlkXTp6LnBlbmRpbmdFcnJvcn07ZWxzZSBpZih6JiZ6LnN1Ym1pc3Npb24mJmdvKHouc3VibWlzc2lvbi5mb3JtTWV0aG9kKSl7bGV0IGJuPWF3YWl0IHFpKGtlLEQsei5zdWJtaXNzaW9uLHplLHtyZXBsYWNlOnoucmVwbGFjZSxmbHVzaFN5bmM6RWV9KTtpZihibi5zaG9ydENpcmN1aXRlZClyZXR1cm47dmU9Ym4ucGVuZGluZ0FjdGlvbkRhdGEsS2U9Ym4ucGVuZGluZ0FjdGlvbkVycm9yLGNlPWd5KEQsei5zdWJtaXNzaW9uKSxFZT0hMSxrZT1uZXcgUmVxdWVzdChrZS51cmwse3NpZ25hbDprZS5zaWduYWx9KX1sZXR7c2hvcnRDaXJjdWl0ZWQ6b24sbG9hZGVyRGF0YTpBZSxlcnJvcnM6aHR9PWF3YWl0IHBhKGtlLEQsemUsY2UseiYmei5zdWJtaXNzaW9uLHomJnouZmV0Y2hlclN1Ym1pc3Npb24seiYmei5yZXBsYWNlLHomJnouaW5pdGlhbEh5ZHJhdGlvbj09PSEwLEVlLHZlLEtlKTtvbnx8KE09bnVsbCxHZShELEF0KHttYXRjaGVzOnplfSx2ZT97YWN0aW9uRGF0YTp2ZX06e30se2xvYWRlckRhdGE6QWUsZXJyb3JzOmh0fSkpKX1hc3luYyBmdW5jdGlvbiBxaSgkLEQseixlZSxjZSl7Y2U9PT12b2lkIDAmJihjZT17fSksRHYoKTtsZXQgemU9bjYoRCx6KTtQZSh7bmF2aWdhdGlvbjp6ZX0se2ZsdXNoU3luYzpjZS5mbHVzaFN5bmM9PT0hMH0pO2xldCBFZSxrZT1jeChlZSxEKTtpZigha2Uucm91dGUuYWN0aW9uJiYha2Uucm91dGUubGF6eSlFZT17dHlwZTpOdC5lcnJvcixlcnJvcjpGcig0MDUse21ldGhvZDokLm1ldGhvZCxwYXRobmFtZTpELnBhdGhuYW1lLHJvdXRlSWQ6a2Uucm91dGUuaWR9KX07ZWxzZSBpZihFZT1hd2FpdCBOdSgiYWN0aW9uIiwkLGtlLGVlLGksbyxsLGMudjdfcmVsYXRpdmVTcGxhdFBhdGgpLCQuc2lnbmFsLmFib3J0ZWQpcmV0dXJue3Nob3J0Q2lyY3VpdGVkOiEwfTtpZihBYShFZSkpe2xldCB2ZTtyZXR1cm4gY2UmJmNlLnJlcGxhY2UhPW51bGw/dmU9Y2UucmVwbGFjZTp2ZT1FZS5sb2NhdGlvbj09PVMubG9jYXRpb24ucGF0aG5hbWUrUy5sb2NhdGlvbi5zZWFyY2gsYXdhaXQgTG8oUyxFZSx7c3VibWlzc2lvbjp6LHJlcGxhY2U6dmV9KSx7c2hvcnRDaXJjdWl0ZWQ6ITB9fWlmKGhjKEVlKSl7bGV0IHZlPU1kKGVlLGtlLnJvdXRlLmlkKTtyZXR1cm4oY2UmJmNlLnJlcGxhY2UpIT09ITAmJihfPXp0LlB1c2gpLHtwZW5kaW5nQWN0aW9uRGF0YTp7fSxwZW5kaW5nQWN0aW9uRXJyb3I6e1t2ZS5yb3V0ZS5pZF06RWUuZXJyb3J9fX1pZigkYShFZSkpdGhyb3cgRnIoNDAwLHt0eXBlOiJkZWZlci1hY3Rpb24ifSk7cmV0dXJue3BlbmRpbmdBY3Rpb25EYXRhOntba2Uucm91dGUuaWRdOkVlLmRhdGF9fX1hc3luYyBmdW5jdGlvbiBwYSgkLEQseixlZSxjZSx6ZSxFZSxrZSx2ZSxLZSxvbil7bGV0IEFlPWVlfHxneShELGNlKSxodD1jZXx8emV8fHBFKEFlKSxibj1hfHxzLFt6cixzbl09b0UoZS5oaXN0b3J5LFMseixodCxELGMudjdfcGFydGlhbEh5ZHJhdGlvbiYma2U9PT0hMCxWLEssQyx1ZSxHLGosYm4sbCxLZSxvbik7aWYoSXYoZnQ9PiEoeiYmei5zb21lKFN0PT5TdC5yb3V0ZS5pZD09PWZ0KSl8fHpyJiZ6ci5zb21lKFN0PT5TdC5yb3V0ZS5pZD09PWZ0KSksUj0rK08senIubGVuZ3RoPT09MCYmc24ubGVuZ3RoPT09MCl7bGV0IGZ0PXhTKCk7cmV0dXJuIEdlKEQsQXQoe21hdGNoZXM6eixsb2FkZXJEYXRhOnt9LGVycm9yczpvbnx8bnVsbH0sS2U/e2FjdGlvbkRhdGE6S2V9Ont9LGZ0P3tmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfTp7fSkse2ZsdXNoU3luYzp2ZX0pLHtzaG9ydENpcmN1aXRlZDohMH19aWYoIXJlJiYoIWMudjdfcGFydGlhbEh5ZHJhdGlvbnx8IWtlKSl7c24uZm9yRWFjaChTdD0+e2xldCBqbz1TLmZldGNoZXJzLmdldChTdC5rZXkpLGJwPUF1KHZvaWQgMCxqbz9qby5kYXRhOnZvaWQgMCk7Uy5mZXRjaGVycy5zZXQoU3Qua2V5LGJwKX0pO2xldCBmdD1LZXx8Uy5hY3Rpb25EYXRhO1BlKEF0KHtuYXZpZ2F0aW9uOkFlfSxmdD9PYmplY3Qua2V5cyhmdCkubGVuZ3RoPT09MD97YWN0aW9uRGF0YTpudWxsfTp7YWN0aW9uRGF0YTpmdH06e30sc24ubGVuZ3RoPjA/e2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9Ont9KSx7Zmx1c2hTeW5jOnZlfSl9c24uZm9yRWFjaChmdD0+e1QuaGFzKGZ0LmtleSkmJllpKGZ0LmtleSksZnQuY29udHJvbGxlciYmVC5zZXQoZnQua2V5LGZ0LmNvbnRyb2xsZXIpfSk7bGV0IFBsPSgpPT5zbi5mb3JFYWNoKGZ0PT5ZaShmdC5rZXkpKTtNJiZNLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsUGwpO2xldHtyZXN1bHRzOkx2LGxvYWRlclJlc3VsdHM6TWwsZmV0Y2hlclJlc3VsdHM6WGl9PWF3YWl0IGdTKFMubWF0Y2hlcyx6LHpyLHNuLCQpO2lmKCQuc2lnbmFsLmFib3J0ZWQpcmV0dXJue3Nob3J0Q2lyY3VpdGVkOiEwfTtNJiZNLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsUGwpLHNuLmZvckVhY2goZnQ9PlQuZGVsZXRlKGZ0LmtleSkpO2xldCBoYT1kRShMdik7aWYoaGEpe2lmKGhhLmlkeD49enIubGVuZ3RoKXtsZXQgZnQ9c25baGEuaWR4LXpyLmxlbmd0aF0ua2V5O2ouYWRkKGZ0KX1yZXR1cm4gYXdhaXQgTG8oUyxoYS5yZXN1bHQse3JlcGxhY2U6RWV9KSx7c2hvcnRDaXJjdWl0ZWQ6ITB9fWxldHtsb2FkZXJEYXRhOmp2LGVycm9yczp6dn09bEUoUyx6LHpyLE1sLG9uLHNuLFhpLGplKTtqZS5mb3JFYWNoKChmdCxTdCk9PntmdC5zdWJzY3JpYmUoam89Pnsoam98fGZ0LmRvbmUpJiZqZS5kZWxldGUoU3QpfSl9KTtsZXQgRnY9eFMoKSxSbD1iUyhSKSx4cD1Gdnx8Umx8fHNuLmxlbmd0aD4wO3JldHVybiBBdCh7bG9hZGVyRGF0YTpqdixlcnJvcnM6enZ9LHhwP3tmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfTp7fSl9ZnVuY3Rpb24gTnYoJCxELHosZWUpe2lmKHIpdGhyb3cgbmV3IEVycm9yKCJyb3V0ZXIuZmV0Y2goKSB3YXMgY2FsbGVkIGR1cmluZyB0aGUgc2VydmVyIHJlbmRlciwgYnV0IGl0IHNob3VsZG4ndCBiZS4gWW91IGFyZSBsaWtlbHkgY2FsbGluZyBhIHVzZUZldGNoZXIoKSBtZXRob2QgaW4gdGhlIGJvZHkgb2YgeW91ciBjb21wb25lbnQuIFRyeSBtb3ZpbmcgaXQgdG8gYSB1c2VFZmZlY3Qgb3IgYSBjYWxsYmFjay4iKTtULmhhcygkKSYmWWkoJCk7bGV0IGNlPShlZSYmZWUudW5zdGFibGVfZmx1c2hTeW5jKT09PSEwLHplPWF8fHMsRWU9YXgoUy5sb2NhdGlvbixTLm1hdGNoZXMsbCxjLnY3X3ByZXBlbmRCYXNlbmFtZSx6LGMudjdfcmVsYXRpdmVTcGxhdFBhdGgsRCxlZT09bnVsbD92b2lkIDA6ZWUucmVsYXRpdmUpLGtlPXBjKHplLEVlLGwpO2lmKCFrZSl7eHUoJCxELEZyKDQwNCx7cGF0aG5hbWU6RWV9KSx7Zmx1c2hTeW5jOmNlfSk7cmV0dXJufWxldHtwYXRoOnZlLHN1Ym1pc3Npb246S2UsZXJyb3I6b259PXJFKGMudjdfbm9ybWFsaXplRm9ybU1ldGhvZCwhMCxFZSxlZSk7aWYob24pe3h1KCQsRCxvbix7Zmx1c2hTeW5jOmNlfSk7cmV0dXJufWxldCBBZT1jeChrZSx2ZSk7aWYoUD0oZWUmJmVlLnByZXZlbnRTY3JvbGxSZXNldCk9PT0hMCxLZSYmZ28oS2UuZm9ybU1ldGhvZCkpeyR2KCQsRCx2ZSxBZSxrZSxjZSxLZSk7cmV0dXJufUcuc2V0KCQse3JvdXRlSWQ6RCxwYXRoOnZlfSksQXYoJCxELHZlLEFlLGtlLGNlLEtlKX1hc3luYyBmdW5jdGlvbiAkdigkLEQseixlZSxjZSx6ZSxFZSl7aWYoRHYoKSxHLmRlbGV0ZSgkKSwhZWUucm91dGUuYWN0aW9uJiYhZWUucm91dGUubGF6eSl7bGV0IFN0PUZyKDQwNSx7bWV0aG9kOkVlLmZvcm1NZXRob2QscGF0aG5hbWU6eixyb3V0ZUlkOkR9KTt4dSgkLEQsU3Qse2ZsdXNoU3luYzp6ZX0pO3JldHVybn1sZXQga2U9Uy5mZXRjaGVycy5nZXQoJCk7R2koJCxyNihFZSxrZSkse2ZsdXNoU3luYzp6ZX0pO2xldCB2ZT1uZXcgQWJvcnRDb250cm9sbGVyLEtlPSR1KGUuaGlzdG9yeSx6LHZlLnNpZ25hbCxFZSk7VC5zZXQoJCx2ZSk7bGV0IG9uPU8sQWU9YXdhaXQgTnUoImFjdGlvbiIsS2UsZWUsY2UsaSxvLGwsYy52N19yZWxhdGl2ZVNwbGF0UGF0aCk7aWYoS2Uuc2lnbmFsLmFib3J0ZWQpe1QuZ2V0KCQpPT09dmUmJlQuZGVsZXRlKCQpO3JldHVybn1pZihjLnY3X2ZldGNoZXJQZXJzaXN0JiZ1ZS5oYXMoJCkpe2lmKEFhKEFlKXx8aGMoQWUpKXtHaSgkLGxzKHZvaWQgMCkpO3JldHVybn19ZWxzZXtpZihBYShBZSkpaWYoVC5kZWxldGUoJCksUj5vbil7R2koJCxscyh2b2lkIDApKTtyZXR1cm59ZWxzZSByZXR1cm4gai5hZGQoJCksR2koJCxBdShFZSkpLExvKFMsQWUse2ZldGNoZXJTdWJtaXNzaW9uOkVlfSk7aWYoaGMoQWUpKXt4dSgkLEQsQWUuZXJyb3IpO3JldHVybn19aWYoJGEoQWUpKXRocm93IEZyKDQwMCx7dHlwZToiZGVmZXItYWN0aW9uIn0pO2xldCBodD1TLm5hdmlnYXRpb24ubG9jYXRpb258fFMubG9jYXRpb24sYm49JHUoZS5oaXN0b3J5LGh0LHZlLnNpZ25hbCksenI9YXx8cyxzbj1TLm5hdmlnYXRpb24uc3RhdGUhPT0iaWRsZSI/cGMoenIsUy5uYXZpZ2F0aW9uLmxvY2F0aW9uLGwpOlMubWF0Y2hlcztIZShzbiwiRGlkbid0IGZpbmQgYW55IG1hdGNoZXMgYWZ0ZXIgZmV0Y2hlciBhY3Rpb24iKTtsZXQgUGw9KytPO04uc2V0KCQsUGwpO2xldCBMdj1BdShFZSxBZS5kYXRhKTtTLmZldGNoZXJzLnNldCgkLEx2KTtsZXRbTWwsWGldPW9FKGUuaGlzdG9yeSxTLHNuLEVlLGh0LCExLFYsSyxDLHVlLEcsaix6cixsLHtbZWUucm91dGUuaWRdOkFlLmRhdGF9LHZvaWQgMCk7WGkuZmlsdGVyKFN0PT5TdC5rZXkhPT0kKS5mb3JFYWNoKFN0PT57bGV0IGpvPVN0LmtleSxicD1TLmZldGNoZXJzLmdldChqbyksSkQ9QXUodm9pZCAwLGJwP2JwLmRhdGE6dm9pZCAwKTtTLmZldGNoZXJzLnNldChqbyxKRCksVC5oYXMoam8pJiZZaShqbyksU3QuY29udHJvbGxlciYmVC5zZXQoam8sU3QuY29udHJvbGxlcil9KSxQZSh7ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0pO2xldCBoYT0oKT0+WGkuZm9yRWFjaChTdD0+WWkoU3Qua2V5KSk7dmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixoYSk7bGV0e3Jlc3VsdHM6anYsbG9hZGVyUmVzdWx0czp6dixmZXRjaGVyUmVzdWx0czpGdn09YXdhaXQgZ1MoUy5tYXRjaGVzLHNuLE1sLFhpLGJuKTtpZih2ZS5zaWduYWwuYWJvcnRlZClyZXR1cm47dmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixoYSksTi5kZWxldGUoJCksVC5kZWxldGUoJCksWGkuZm9yRWFjaChTdD0+VC5kZWxldGUoU3Qua2V5KSk7bGV0IFJsPWRFKGp2KTtpZihSbCl7aWYoUmwuaWR4Pj1NbC5sZW5ndGgpe2xldCBTdD1YaVtSbC5pZHgtTWwubGVuZ3RoXS5rZXk7ai5hZGQoU3QpfXJldHVybiBMbyhTLFJsLnJlc3VsdCl9bGV0e2xvYWRlckRhdGE6eHAsZXJyb3JzOmZ0fT1sRShTLFMubWF0Y2hlcyxNbCx6dix2b2lkIDAsWGksRnYsamUpO2lmKFMuZmV0Y2hlcnMuaGFzKCQpKXtsZXQgU3Q9bHMoQWUuZGF0YSk7Uy5mZXRjaGVycy5zZXQoJCxTdCl9YlMoUGwpLFMubmF2aWdhdGlvbi5zdGF0ZT09PSJsb2FkaW5nIiYmUGw+Uj8oSGUoXywiRXhwZWN0ZWQgcGVuZGluZyBhY3Rpb24iKSxNJiZNLmFib3J0KCksR2UoUy5uYXZpZ2F0aW9uLmxvY2F0aW9uLHttYXRjaGVzOnNuLGxvYWRlckRhdGE6eHAsZXJyb3JzOmZ0LGZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KSk6KFBlKHtlcnJvcnM6ZnQsbG9hZGVyRGF0YTpjRShTLmxvYWRlckRhdGEseHAsc24sZnQpLGZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KSxWPSExKX1hc3luYyBmdW5jdGlvbiBBdigkLEQseixlZSxjZSx6ZSxFZSl7bGV0IGtlPVMuZmV0Y2hlcnMuZ2V0KCQpO0dpKCQsQXUoRWUsa2U/a2UuZGF0YTp2b2lkIDApLHtmbHVzaFN5bmM6emV9KTtsZXQgdmU9bmV3IEFib3J0Q29udHJvbGxlcixLZT0kdShlLmhpc3Rvcnkseix2ZS5zaWduYWwpO1Quc2V0KCQsdmUpO2xldCBvbj1PLEFlPWF3YWl0IE51KCJsb2FkZXIiLEtlLGVlLGNlLGksbyxsLGMudjdfcmVsYXRpdmVTcGxhdFBhdGgpO2lmKCRhKEFlKSYmKEFlPWF3YWl0IE1QKEFlLEtlLnNpZ25hbCwhMCl8fEFlKSxULmdldCgkKT09PXZlJiZULmRlbGV0ZSgkKSwhS2Uuc2lnbmFsLmFib3J0ZWQpe2lmKHVlLmhhcygkKSl7R2koJCxscyh2b2lkIDApKTtyZXR1cm59aWYoQWEoQWUpKWlmKFI+b24pe0dpKCQsbHModm9pZCAwKSk7cmV0dXJufWVsc2V7ai5hZGQoJCksYXdhaXQgTG8oUyxBZSk7cmV0dXJufWlmKGhjKEFlKSl7eHUoJCxELEFlLmVycm9yKTtyZXR1cm59SGUoISRhKEFlKSwiVW5oYW5kbGVkIGZldGNoZXIgZGVmZXJyZWQgZGF0YSIpLEdpKCQsbHMoQWUuZGF0YSkpfX1hc3luYyBmdW5jdGlvbiBMbygkLEQseil7bGV0e3N1Ym1pc3Npb246ZWUsZmV0Y2hlclN1Ym1pc3Npb246Y2UscmVwbGFjZTp6ZX09ej09PXZvaWQgMD97fTp6O0QucmV2YWxpZGF0ZSYmKFY9ITApO2xldCBFZT10ZigkLmxvY2F0aW9uLEQubG9jYXRpb24se19pc1JlZGlyZWN0OiEwfSk7aWYoSGUoRWUsIkV4cGVjdGVkIGEgbG9jYXRpb24gb24gdGhlIHJlZGlyZWN0IG5hdmlnYXRpb24iKSxuKXtsZXQgaHQ9ITE7aWYoRC5yZWxvYWREb2N1bWVudClodD0hMDtlbHNlIGlmKENQLnRlc3QoRC5sb2NhdGlvbikpe2NvbnN0IGJuPWUuaGlzdG9yeS5jcmVhdGVVUkwoRC5sb2NhdGlvbik7aHQ9Ym4ub3JpZ2luIT09dC5sb2NhdGlvbi5vcmlnaW58fGVwKGJuLnBhdGhuYW1lLGwpPT1udWxsfWlmKGh0KXt6ZT90LmxvY2F0aW9uLnJlcGxhY2UoRC5sb2NhdGlvbik6dC5sb2NhdGlvbi5hc3NpZ24oRC5sb2NhdGlvbik7cmV0dXJufX1NPW51bGw7bGV0IGtlPXplPT09ITA/enQuUmVwbGFjZTp6dC5QdXNoLHtmb3JtTWV0aG9kOnZlLGZvcm1BY3Rpb246S2UsZm9ybUVuY1R5cGU6b259PSQubmF2aWdhdGlvbjshZWUmJiFjZSYmdmUmJktlJiZvbiYmKGVlPXBFKCQubmF2aWdhdGlvbikpO2xldCBBZT1lZXx8Y2U7aWYoSGouaGFzKEQuc3RhdHVzKSYmQWUmJmdvKEFlLmZvcm1NZXRob2QpKWF3YWl0IHhuKGtlLEVlLHtzdWJtaXNzaW9uOkF0KHt9LEFlLHtmb3JtQWN0aW9uOkQubG9jYXRpb259KSxwcmV2ZW50U2Nyb2xsUmVzZXQ6UH0pO2Vsc2V7bGV0IGh0PWd5KEVlLGVlKTthd2FpdCB4bihrZSxFZSx7b3ZlcnJpZGVOYXZpZ2F0aW9uOmh0LGZldGNoZXJTdWJtaXNzaW9uOmNlLHByZXZlbnRTY3JvbGxSZXNldDpQfSl9fWFzeW5jIGZ1bmN0aW9uIGdTKCQsRCx6LGVlLGNlKXtsZXQgemU9YXdhaXQgUHJvbWlzZS5hbGwoWy4uLnoubWFwKHZlPT5OdSgibG9hZGVyIixjZSx2ZSxELGksbyxsLGMudjdfcmVsYXRpdmVTcGxhdFBhdGgpKSwuLi5lZS5tYXAodmU9PnZlLm1hdGNoZXMmJnZlLm1hdGNoJiZ2ZS5jb250cm9sbGVyP051KCJsb2FkZXIiLCR1KGUuaGlzdG9yeSx2ZS5wYXRoLHZlLmNvbnRyb2xsZXIuc2lnbmFsKSx2ZS5tYXRjaCx2ZS5tYXRjaGVzLGksbyxsLGMudjdfcmVsYXRpdmVTcGxhdFBhdGgpOnt0eXBlOk50LmVycm9yLGVycm9yOkZyKDQwNCx7cGF0aG5hbWU6dmUucGF0aH0pfSldKSxFZT16ZS5zbGljZSgwLHoubGVuZ3RoKSxrZT16ZS5zbGljZSh6Lmxlbmd0aCk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFtmRSgkLHosRWUsRWUubWFwKCgpPT5jZS5zaWduYWwpLCExLFMubG9hZGVyRGF0YSksZkUoJCxlZS5tYXAodmU9PnZlLm1hdGNoKSxrZSxlZS5tYXAodmU9PnZlLmNvbnRyb2xsZXI/dmUuY29udHJvbGxlci5zaWduYWw6bnVsbCksITApXSkse3Jlc3VsdHM6emUsbG9hZGVyUmVzdWx0czpFZSxmZXRjaGVyUmVzdWx0czprZX19ZnVuY3Rpb24gRHYoKXtWPSEwLEsucHVzaCguLi5JdigpKSxHLmZvckVhY2goKCQsRCk9PntULmhhcyhEKSYmKEMucHVzaChEKSxZaShEKSl9KX1mdW5jdGlvbiBHaSgkLEQseil7ej09PXZvaWQgMCYmKHo9e30pLFMuZmV0Y2hlcnMuc2V0KCQsRCksUGUoe2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9LHtmbHVzaFN5bmM6KHomJnouZmx1c2hTeW5jKT09PSEwfSl9ZnVuY3Rpb24geHUoJCxELHosZWUpe2VlPT09dm9pZCAwJiYoZWU9e30pO2xldCBjZT1NZChTLm1hdGNoZXMsRCk7dnAoJCksUGUoe2Vycm9yczp7W2NlLnJvdXRlLmlkXTp6fSxmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSx7Zmx1c2hTeW5jOihlZSYmZWUuZmx1c2hTeW5jKT09PSEwfSl9ZnVuY3Rpb24gdlMoJCl7cmV0dXJuIGMudjdfZmV0Y2hlclBlcnNpc3QmJih4ZS5zZXQoJCwoeGUuZ2V0KCQpfHwwKSsxKSx1ZS5oYXMoJCkmJnVlLmRlbGV0ZSgkKSksUy5mZXRjaGVycy5nZXQoJCl8fFdqfWZ1bmN0aW9uIHZwKCQpe2xldCBEPVMuZmV0Y2hlcnMuZ2V0KCQpO1QuaGFzKCQpJiYhKEQmJkQuc3RhdGU9PT0ibG9hZGluZyImJk4uaGFzKCQpKSYmWWkoJCksRy5kZWxldGUoJCksTi5kZWxldGUoJCksai5kZWxldGUoJCksdWUuZGVsZXRlKCQpLFMuZmV0Y2hlcnMuZGVsZXRlKCQpfWZ1bmN0aW9uIHFEKCQpe2lmKGMudjdfZmV0Y2hlclBlcnNpc3Qpe2xldCBEPSh4ZS5nZXQoJCl8fDApLTE7RDw9MD8oeGUuZGVsZXRlKCQpLHVlLmFkZCgkKSk6eGUuc2V0KCQsRCl9ZWxzZSB2cCgkKTtQZSh7ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0pfWZ1bmN0aW9uIFlpKCQpe2xldCBEPVQuZ2V0KCQpO0hlKEQsIkV4cGVjdGVkIGZldGNoIGNvbnRyb2xsZXI6ICIrJCksRC5hYm9ydCgpLFQuZGVsZXRlKCQpfWZ1bmN0aW9uIHlTKCQpe2ZvcihsZXQgRCBvZiAkKXtsZXQgej12UyhEKSxlZT1scyh6LmRhdGEpO1MuZmV0Y2hlcnMuc2V0KEQsZWUpfX1mdW5jdGlvbiB4Uygpe2xldCAkPVtdLEQ9ITE7Zm9yKGxldCB6IG9mIGope2xldCBlZT1TLmZldGNoZXJzLmdldCh6KTtIZShlZSwiRXhwZWN0ZWQgZmV0Y2hlcjogIit6KSxlZS5zdGF0ZT09PSJsb2FkaW5nIiYmKGouZGVsZXRlKHopLCQucHVzaCh6KSxEPSEwKX1yZXR1cm4geVMoJCksRH1mdW5jdGlvbiBiUygkKXtsZXQgRD1bXTtmb3IobGV0W3osZWVdb2YgTilpZihlZTwkKXtsZXQgY2U9Uy5mZXRjaGVycy5nZXQoeik7SGUoY2UsIkV4cGVjdGVkIGZldGNoZXI6ICIreiksY2Uuc3RhdGU9PT0ibG9hZGluZyImJihZaSh6KSxOLmRlbGV0ZSh6KSxELnB1c2goeikpfXJldHVybiB5UyhEKSxELmxlbmd0aD4wfWZ1bmN0aW9uIEdEKCQsRCl7bGV0IHo9Uy5ibG9ja2Vycy5nZXQoJCl8fFJ1O3JldHVybiBDZS5nZXQoJCkhPT1EJiZDZS5zZXQoJCxEKSx6fWZ1bmN0aW9uIHdTKCQpe1MuYmxvY2tlcnMuZGVsZXRlKCQpLENlLmRlbGV0ZSgkKX1mdW5jdGlvbiB5cCgkLEQpe2xldCB6PVMuYmxvY2tlcnMuZ2V0KCQpfHxSdTtIZSh6LnN0YXRlPT09InVuYmxvY2tlZCImJkQuc3RhdGU9PT0iYmxvY2tlZCJ8fHouc3RhdGU9PT0iYmxvY2tlZCImJkQuc3RhdGU9PT0iYmxvY2tlZCJ8fHouc3RhdGU9PT0iYmxvY2tlZCImJkQuc3RhdGU9PT0icHJvY2VlZGluZyJ8fHouc3RhdGU9PT0iYmxvY2tlZCImJkQuc3RhdGU9PT0idW5ibG9ja2VkInx8ei5zdGF0ZT09PSJwcm9jZWVkaW5nIiYmRC5zdGF0ZT09PSJ1bmJsb2NrZWQiLCJJbnZhbGlkIGJsb2NrZXIgc3RhdGUgdHJhbnNpdGlvbjogIit6LnN0YXRlKyIgLT4gIitELnN0YXRlKTtsZXQgZWU9bmV3IE1hcChTLmJsb2NrZXJzKTtlZS5zZXQoJCxEKSxQZSh7YmxvY2tlcnM6ZWV9KX1mdW5jdGlvbiBTUygkKXtsZXR7Y3VycmVudExvY2F0aW9uOkQsbmV4dExvY2F0aW9uOnosaGlzdG9yeUFjdGlvbjplZX09JDtpZihDZS5zaXplPT09MClyZXR1cm47Q2Uuc2l6ZT4xJiZRYSghMSwiQSByb3V0ZXIgb25seSBzdXBwb3J0cyBvbmUgYmxvY2tlciBhdCBhIHRpbWUiKTtsZXQgY2U9QXJyYXkuZnJvbShDZS5lbnRyaWVzKCkpLFt6ZSxFZV09Y2VbY2UubGVuZ3RoLTFdLGtlPVMuYmxvY2tlcnMuZ2V0KHplKTtpZighKGtlJiZrZS5zdGF0ZT09PSJwcm9jZWVkaW5nIikmJkVlKHtjdXJyZW50TG9jYXRpb246RCxuZXh0TG9jYXRpb246eixoaXN0b3J5QWN0aW9uOmVlfSkpcmV0dXJuIHplfWZ1bmN0aW9uIEl2KCQpe2xldCBEPVtdO3JldHVybiBqZS5mb3JFYWNoKCh6LGVlKT0+eyghJHx8JChlZSkpJiYoei5jYW5jZWwoKSxELnB1c2goZWUpLGplLmRlbGV0ZShlZSkpfSksRH1mdW5jdGlvbiBZRCgkLEQseil7aWYoZj0kLG09RCxwPXp8fG51bGwsIWcmJlMubmF2aWdhdGlvbj09PW15KXtnPSEwO2xldCBlZT1FUyhTLmxvY2F0aW9uLFMubWF0Y2hlcyk7ZWUhPW51bGwmJlBlKHtyZXN0b3JlU2Nyb2xsUG9zaXRpb246ZWV9KX1yZXR1cm4oKT0+e2Y9bnVsbCxtPW51bGwscD1udWxsfX1mdW5jdGlvbiBrUygkLEQpe3JldHVybiBwJiZwKCQsRC5tYXAoZWU9PmJqKGVlLFMubG9hZGVyRGF0YSkpKXx8JC5rZXl9ZnVuY3Rpb24gWEQoJCxEKXtpZihmJiZtKXtsZXQgej1rUygkLEQpO2Zbel09bSgpfX1mdW5jdGlvbiBFUygkLEQpe2lmKGYpe2xldCB6PWtTKCQsRCksZWU9Zlt6XTtpZih0eXBlb2YgZWU9PSJudW1iZXIiKXJldHVybiBlZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBaRCgkKXtpPXt9LGE9c3goJCxvLHZvaWQgMCxpKX1yZXR1cm4gRT17Z2V0IGJhc2VuYW1lKCl7cmV0dXJuIGx9LGdldCBmdXR1cmUoKXtyZXR1cm4gY30sZ2V0IHN0YXRlKCl7cmV0dXJuIFN9LGdldCByb3V0ZXMoKXtyZXR1cm4gc30sZ2V0IHdpbmRvdygpe3JldHVybiB0fSxpbml0aWFsaXplOnR0LHN1YnNjcmliZTpydCxlbmFibGVTY3JvbGxSZXN0b3JhdGlvbjpZRCxuYXZpZ2F0ZTpUbixmZXRjaDpOdixyZXZhbGlkYXRlOnpuLGNyZWF0ZUhyZWY6JD0+ZS5oaXN0b3J5LmNyZWF0ZUhyZWYoJCksZW5jb2RlTG9jYXRpb246JD0+ZS5oaXN0b3J5LmVuY29kZUxvY2F0aW9uKCQpLGdldEZldGNoZXI6dlMsZGVsZXRlRmV0Y2hlcjpxRCxkaXNwb3NlOm50LGdldEJsb2NrZXI6R0QsZGVsZXRlQmxvY2tlcjp3UyxfaW50ZXJuYWxGZXRjaENvbnRyb2xsZXJzOlQsX2ludGVybmFsQWN0aXZlRGVmZXJyZWRzOmplLF9pbnRlcm5hbFNldFJvdXRlczpaRH0sRX1mdW5jdGlvbiBHaihlKXtyZXR1cm4gZSE9bnVsbCYmKCJmb3JtRGF0YSJpbiBlJiZlLmZvcm1EYXRhIT1udWxsfHwiYm9keSJpbiBlJiZlLmJvZHkhPT12b2lkIDApfWZ1bmN0aW9uIGF4KGUsdCxuLHIsbyxpLHMsYSl7bGV0IGwsYztpZihzKXtsPVtdO2ZvcihsZXQgZCBvZiB0KWlmKGwucHVzaChkKSxkLnJvdXRlLmlkPT09cyl7Yz1kO2JyZWFrfX1lbHNlIGw9dCxjPXRbdC5sZW5ndGgtMV07bGV0IHU9a1Aob3x8Ii4iLFNQKGwsaSksZXAoZS5wYXRobmFtZSxuKXx8ZS5wYXRobmFtZSxhPT09InBhdGgiKTtyZXR1cm4gbz09bnVsbCYmKHUuc2VhcmNoPWUuc2VhcmNoLHUuaGFzaD1lLmhhc2gpLChvPT1udWxsfHxvPT09IiJ8fG89PT0iLiIpJiZjJiZjLnJvdXRlLmluZGV4JiYhTzEodS5zZWFyY2gpJiYodS5zZWFyY2g9dS5zZWFyY2g/dS5zZWFyY2gucmVwbGFjZSgvXlw/LywiP2luZGV4JiIpOiI/aW5kZXgiKSxyJiZuIT09Ii8iJiYodS5wYXRobmFtZT11LnBhdGhuYW1lPT09Ii8iP246RnMoW24sdS5wYXRobmFtZV0pKSxRZih1KX1mdW5jdGlvbiByRShlLHQsbixyKXtpZighcnx8IUdqKHIpKXJldHVybntwYXRoOm59O2lmKHIuZm9ybU1ldGhvZCYmIXQ2KHIuZm9ybU1ldGhvZCkpcmV0dXJue3BhdGg6bixlcnJvcjpGcig0MDUse21ldGhvZDpyLmZvcm1NZXRob2R9KX07bGV0IG89KCk9Pih7cGF0aDpuLGVycm9yOkZyKDQwMCx7dHlwZToiaW52YWxpZC1ib2R5In0pfSksaT1yLmZvcm1NZXRob2R8fCJnZXQiLHM9ZT9pLnRvVXBwZXJDYXNlKCk6aS50b0xvd2VyQ2FzZSgpLGE9UFAobik7aWYoci5ib2R5IT09dm9pZCAwKXtpZihyLmZvcm1FbmNUeXBlPT09InRleHQvcGxhaW4iKXtpZighZ28ocykpcmV0dXJuIG8oKTtsZXQgZj10eXBlb2Ygci5ib2R5PT0ic3RyaW5nIj9yLmJvZHk6ci5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGF8fHIuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcz9BcnJheS5mcm9tKHIuYm9keS5lbnRyaWVzKCkpLnJlZHVjZSgocCxtKT0+e2xldFtnLHldPW07cmV0dXJuIiIrcCtnKyI9Iit5K2AKYH0sIiIpOlN0cmluZyhyLmJvZHkpO3JldHVybntwYXRoOm4sc3VibWlzc2lvbjp7Zm9ybU1ldGhvZDpzLGZvcm1BY3Rpb246YSxmb3JtRW5jVHlwZTpyLmZvcm1FbmNUeXBlLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OmZ9fX1lbHNlIGlmKHIuZm9ybUVuY1R5cGU9PT0iYXBwbGljYXRpb24vanNvbiIpe2lmKCFnbyhzKSlyZXR1cm4gbygpO3RyeXtsZXQgZj10eXBlb2Ygci5ib2R5PT0ic3RyaW5nIj9KU09OLnBhcnNlKHIuYm9keSk6ci5ib2R5O3JldHVybntwYXRoOm4sc3VibWlzc2lvbjp7Zm9ybU1ldGhvZDpzLGZvcm1BY3Rpb246YSxmb3JtRW5jVHlwZTpyLmZvcm1FbmNUeXBlLGZvcm1EYXRhOnZvaWQgMCxqc29uOmYsdGV4dDp2b2lkIDB9fX1jYXRjaHtyZXR1cm4gbygpfX19SGUodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iLCJGb3JtRGF0YSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKTtsZXQgbCxjO2lmKHIuZm9ybURhdGEpbD1seChyLmZvcm1EYXRhKSxjPXIuZm9ybURhdGE7ZWxzZSBpZihyLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSlsPWx4KHIuYm9keSksYz1yLmJvZHk7ZWxzZSBpZihyLmJvZHkgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpbD1yLmJvZHksYz1hRShsKTtlbHNlIGlmKHIuYm9keT09bnVsbClsPW5ldyBVUkxTZWFyY2hQYXJhbXMsYz1uZXcgRm9ybURhdGE7ZWxzZSB0cnl7bD1uZXcgVVJMU2VhcmNoUGFyYW1zKHIuYm9keSksYz1hRShsKX1jYXRjaHtyZXR1cm4gbygpfWxldCB1PXtmb3JtTWV0aG9kOnMsZm9ybUFjdGlvbjphLGZvcm1FbmNUeXBlOnImJnIuZm9ybUVuY1R5cGV8fCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLGZvcm1EYXRhOmMsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9O2lmKGdvKHUuZm9ybU1ldGhvZCkpcmV0dXJue3BhdGg6bixzdWJtaXNzaW9uOnV9O2xldCBkPVZpKG4pO3JldHVybiB0JiZkLnNlYXJjaCYmTzEoZC5zZWFyY2gpJiZsLmFwcGVuZCgiaW5kZXgiLCIiKSxkLnNlYXJjaD0iPyIrbCx7cGF0aDpRZihkKSxzdWJtaXNzaW9uOnV9fWZ1bmN0aW9uIFlqKGUsdCl7bGV0IG49ZTtpZih0KXtsZXQgcj1lLmZpbmRJbmRleChvPT5vLnJvdXRlLmlkPT09dCk7cj49MCYmKG49ZS5zbGljZSgwLHIpKX1yZXR1cm4gbn1mdW5jdGlvbiBvRShlLHQsbixyLG8saSxzLGEsbCxjLHUsZCxmLHAsbSxnKXtsZXQgeT1nP09iamVjdC52YWx1ZXMoZylbMF06bT9PYmplY3QudmFsdWVzKG0pWzBdOnZvaWQgMCx2PWUuY3JlYXRlVVJMKHQubG9jYXRpb24pLHg9ZS5jcmVhdGVVUkwobyksdz1nP09iamVjdC5rZXlzKGcpWzBdOnZvaWQgMCxFPVlqKG4sdykuZmlsdGVyKChfLFApPT57bGV0e3JvdXRlOk19PV87aWYoTS5sYXp5KXJldHVybiEwO2lmKE0ubG9hZGVyPT1udWxsKXJldHVybiExO2lmKGkpcmV0dXJuIE0ubG9hZGVyLmh5ZHJhdGU/ITA6dC5sb2FkZXJEYXRhW00uaWRdPT09dm9pZCAwJiYoIXQuZXJyb3JzfHx0LmVycm9yc1tNLmlkXT09PXZvaWQgMCk7aWYoWGoodC5sb2FkZXJEYXRhLHQubWF0Y2hlc1tQXSxfKXx8YS5zb21lKEw9Pkw9PT1fLnJvdXRlLmlkKSlyZXR1cm4hMDtsZXQgQT10Lm1hdGNoZXNbUF0sST1fO3JldHVybiBpRShfLEF0KHtjdXJyZW50VXJsOnYsY3VycmVudFBhcmFtczpBLnBhcmFtcyxuZXh0VXJsOngsbmV4dFBhcmFtczpJLnBhcmFtc30scix7YWN0aW9uUmVzdWx0OnksZGVmYXVsdFNob3VsZFJldmFsaWRhdGU6c3x8di5wYXRobmFtZSt2LnNlYXJjaD09PXgucGF0aG5hbWUreC5zZWFyY2h8fHYuc2VhcmNoIT09eC5zZWFyY2h8fFRQKEEsSSl9KSl9KSxTPVtdO3JldHVybiB1LmZvckVhY2goKF8sUCk9PntpZihpfHwhbi5zb21lKHJlPT5yZS5yb3V0ZS5pZD09PV8ucm91dGVJZCl8fGMuaGFzKFApKXJldHVybjtsZXQgTT1wYyhmLF8ucGF0aCxwKTtpZighTSl7Uy5wdXNoKHtrZXk6UCxyb3V0ZUlkOl8ucm91dGVJZCxwYXRoOl8ucGF0aCxtYXRjaGVzOm51bGwsbWF0Y2g6bnVsbCxjb250cm9sbGVyOm51bGx9KTtyZXR1cm59bGV0IEE9dC5mZXRjaGVycy5nZXQoUCksST1jeChNLF8ucGF0aCksTD0hMTtkLmhhcyhQKT9MPSExOmwuaW5jbHVkZXMoUCk/TD0hMDpBJiZBLnN0YXRlIT09ImlkbGUiJiZBLmRhdGE9PT12b2lkIDA/TD1zOkw9aUUoSSxBdCh7Y3VycmVudFVybDp2LGN1cnJlbnRQYXJhbXM6dC5tYXRjaGVzW3QubWF0Y2hlcy5sZW5ndGgtMV0ucGFyYW1zLG5leHRVcmw6eCxuZXh0UGFyYW1zOm5bbi5sZW5ndGgtMV0ucGFyYW1zfSxyLHthY3Rpb25SZXN1bHQ6eSxkZWZhdWx0U2hvdWxkUmV2YWxpZGF0ZTpzfSkpLEwmJlMucHVzaCh7a2V5OlAscm91dGVJZDpfLnJvdXRlSWQscGF0aDpfLnBhdGgsbWF0Y2hlczpNLG1hdGNoOkksY29udHJvbGxlcjpuZXcgQWJvcnRDb250cm9sbGVyfSl9KSxbRSxTXX1mdW5jdGlvbiBYaihlLHQsbil7bGV0IHI9IXR8fG4ucm91dGUuaWQhPT10LnJvdXRlLmlkLG89ZVtuLnJvdXRlLmlkXT09PXZvaWQgMDtyZXR1cm4gcnx8b31mdW5jdGlvbiBUUChlLHQpe2xldCBuPWUucm91dGUucGF0aDtyZXR1cm4gZS5wYXRobmFtZSE9PXQucGF0aG5hbWV8fG4hPW51bGwmJm4uZW5kc1dpdGgoIioiKSYmZS5wYXJhbXNbIioiXSE9PXQucGFyYW1zWyIqIl19ZnVuY3Rpb24gaUUoZSx0KXtpZihlLnJvdXRlLnNob3VsZFJldmFsaWRhdGUpe2xldCBuPWUucm91dGUuc2hvdWxkUmV2YWxpZGF0ZSh0KTtpZih0eXBlb2Ygbj09ImJvb2xlYW4iKXJldHVybiBufXJldHVybiB0LmRlZmF1bHRTaG91bGRSZXZhbGlkYXRlfWFzeW5jIGZ1bmN0aW9uIHNFKGUsdCxuKXtpZighZS5sYXp5KXJldHVybjtsZXQgcj1hd2FpdCBlLmxhenkoKTtpZighZS5sYXp5KXJldHVybjtsZXQgbz1uW2UuaWRdO0hlKG8sIk5vIHJvdXRlIGZvdW5kIGluIG1hbmlmZXN0Iik7bGV0IGk9e307Zm9yKGxldCBzIGluIHIpe2xldCBsPW9bc10hPT12b2lkIDAmJnMhPT0iaGFzRXJyb3JCb3VuZGFyeSI7UWEoIWwsJ1JvdXRlICInK28uaWQrJyIgaGFzIGEgc3RhdGljIHByb3BlcnR5ICInK3MrJyIgZGVmaW5lZCBidXQgaXRzIGxhenkgZnVuY3Rpb24gaXMgYWxzbyByZXR1cm5pbmcgYSB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eS4gJysoJ1RoZSBsYXp5IHJvdXRlIHByb3BlcnR5ICInK3MrJyIgd2lsbCBiZSBpZ25vcmVkLicpKSwhbCYmIXlqLmhhcyhzKSYmKGlbc109cltzXSl9T2JqZWN0LmFzc2lnbihvLGkpLE9iamVjdC5hc3NpZ24obyxBdCh7fSx0KG8pLHtsYXp5OnZvaWQgMH0pKX1hc3luYyBmdW5jdGlvbiBOdShlLHQsbixyLG8saSxzLGEsbCl7bD09PXZvaWQgMCYmKGw9e30pO2xldCBjLHUsZCxmPWc9PntsZXQgeSx2PW5ldyBQcm9taXNlKCh4LHcpPT55PXcpO3JldHVybiBkPSgpPT55KCksdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGQpLFByb21pc2UucmFjZShbZyh7cmVxdWVzdDp0LHBhcmFtczpuLnBhcmFtcyxjb250ZXh0OmwucmVxdWVzdENvbnRleHR9KSx2XSl9O3RyeXtsZXQgZz1uLnJvdXRlW2VdO2lmKG4ucm91dGUubGF6eSlpZihnKXtsZXQgeSx2PWF3YWl0IFByb21pc2UuYWxsKFtmKGcpLmNhdGNoKHg9Pnt5PXh9KSxzRShuLnJvdXRlLGksbyldKTtpZih5KXRocm93IHk7dT12WzBdfWVsc2UgaWYoYXdhaXQgc0Uobi5yb3V0ZSxpLG8pLGc9bi5yb3V0ZVtlXSxnKXU9YXdhaXQgZihnKTtlbHNlIGlmKGU9PT0iYWN0aW9uIil7bGV0IHk9bmV3IFVSTCh0LnVybCksdj15LnBhdGhuYW1lK3kuc2VhcmNoO3Rocm93IEZyKDQwNSx7bWV0aG9kOnQubWV0aG9kLHBhdGhuYW1lOnYscm91dGVJZDpuLnJvdXRlLmlkfSl9ZWxzZSByZXR1cm57dHlwZTpOdC5kYXRhLGRhdGE6dm9pZCAwfTtlbHNlIGlmKGcpdT1hd2FpdCBmKGcpO2Vsc2V7bGV0IHk9bmV3IFVSTCh0LnVybCksdj15LnBhdGhuYW1lK3kuc2VhcmNoO3Rocm93IEZyKDQwNCx7cGF0aG5hbWU6dn0pfUhlKHUhPT12b2lkIDAsIllvdSBkZWZpbmVkICIrKGU9PT0iYWN0aW9uIj8iYW4gYWN0aW9uIjoiYSBsb2FkZXIiKSsiIGZvciByb3V0ZSAiKygnIicrbi5yb3V0ZS5pZCsiXCIgYnV0IGRpZG4ndCByZXR1cm4gYW55dGhpbmcgZnJvbSB5b3VyIGAiK2UrImAgIikrImZ1bmN0aW9uLiBQbGVhc2UgcmV0dXJuIGEgdmFsdWUgb3IgYG51bGxgLiIpfWNhdGNoKGcpe2M9TnQuZXJyb3IsdT1nfWZpbmFsbHl7ZCYmdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGQpfWlmKGU2KHUpKXtsZXQgZz11LnN0YXR1cztpZihWai5oYXMoZykpe2xldCB2PXUuaGVhZGVycy5nZXQoIkxvY2F0aW9uIik7aWYoSGUodiwiUmVkaXJlY3RzIHJldHVybmVkL3Rocm93biBmcm9tIGxvYWRlcnMvYWN0aW9ucyBtdXN0IGhhdmUgYSBMb2NhdGlvbiBoZWFkZXIiKSwhQ1AudGVzdCh2KSl2PWF4KG5ldyBVUkwodC51cmwpLHIuc2xpY2UoMCxyLmluZGV4T2YobikrMSkscywhMCx2LGEpO2Vsc2UgaWYoIWwuaXNTdGF0aWNSZXF1ZXN0KXtsZXQgeD1uZXcgVVJMKHQudXJsKSx3PXYuc3RhcnRzV2l0aCgiLy8iKT9uZXcgVVJMKHgucHJvdG9jb2wrdik6bmV3IFVSTCh2KSxrPWVwKHcucGF0aG5hbWUscykhPW51bGw7dy5vcmlnaW49PT14Lm9yaWdpbiYmayYmKHY9dy5wYXRobmFtZSt3LnNlYXJjaCt3Lmhhc2gpfWlmKGwuaXNTdGF0aWNSZXF1ZXN0KXRocm93IHUuaGVhZGVycy5zZXQoIkxvY2F0aW9uIix2KSx1O3JldHVybnt0eXBlOk50LnJlZGlyZWN0LHN0YXR1czpnLGxvY2F0aW9uOnYscmV2YWxpZGF0ZTp1LmhlYWRlcnMuZ2V0KCJYLVJlbWl4LVJldmFsaWRhdGUiKSE9PW51bGwscmVsb2FkRG9jdW1lbnQ6dS5oZWFkZXJzLmdldCgiWC1SZW1peC1SZWxvYWQtRG9jdW1lbnQiKSE9PW51bGx9fWlmKGwuaXNSb3V0ZVJlcXVlc3QpdGhyb3d7dHlwZTpjPT09TnQuZXJyb3I/TnQuZXJyb3I6TnQuZGF0YSxyZXNwb25zZTp1fTtsZXQgeTt0cnl7bGV0IHY9dS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIik7diYmL1xiYXBwbGljYXRpb25cL2pzb25cYi8udGVzdCh2KT91LmJvZHk9PW51bGw/eT1udWxsOnk9YXdhaXQgdS5qc29uKCk6eT1hd2FpdCB1LnRleHQoKX1jYXRjaCh2KXtyZXR1cm57dHlwZTpOdC5lcnJvcixlcnJvcjp2fX1yZXR1cm4gYz09PU50LmVycm9yP3t0eXBlOmMsZXJyb3I6bmV3IEMxKGcsdS5zdGF0dXNUZXh0LHkpLGhlYWRlcnM6dS5oZWFkZXJzfTp7dHlwZTpOdC5kYXRhLGRhdGE6eSxzdGF0dXNDb2RlOnUuc3RhdHVzLGhlYWRlcnM6dS5oZWFkZXJzfX1pZihjPT09TnQuZXJyb3IpcmV0dXJue3R5cGU6YyxlcnJvcjp1fTtpZihRaih1KSl7dmFyIHAsbTtyZXR1cm57dHlwZTpOdC5kZWZlcnJlZCxkZWZlcnJlZERhdGE6dSxzdGF0dXNDb2RlOihwPXUuaW5pdCk9PW51bGw/dm9pZCAwOnAuc3RhdHVzLGhlYWRlcnM6KChtPXUuaW5pdCk9PW51bGw/dm9pZCAwOm0uaGVhZGVycykmJm5ldyBIZWFkZXJzKHUuaW5pdC5oZWFkZXJzKX19cmV0dXJue3R5cGU6TnQuZGF0YSxkYXRhOnV9fWZ1bmN0aW9uICR1KGUsdCxuLHIpe2xldCBvPWUuY3JlYXRlVVJMKFBQKHQpKS50b1N0cmluZygpLGk9e3NpZ25hbDpufTtpZihyJiZnbyhyLmZvcm1NZXRob2QpKXtsZXR7Zm9ybU1ldGhvZDpzLGZvcm1FbmNUeXBlOmF9PXI7aS5tZXRob2Q9cy50b1VwcGVyQ2FzZSgpLGE9PT0iYXBwbGljYXRpb24vanNvbiI/KGkuaGVhZGVycz1uZXcgSGVhZGVycyh7IkNvbnRlbnQtVHlwZSI6YX0pLGkuYm9keT1KU09OLnN0cmluZ2lmeShyLmpzb24pKTphPT09InRleHQvcGxhaW4iP2kuYm9keT1yLnRleHQ6YT09PSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiJiZyLmZvcm1EYXRhP2kuYm9keT1seChyLmZvcm1EYXRhKTppLmJvZHk9ci5mb3JtRGF0YX1yZXR1cm4gbmV3IFJlcXVlc3QobyxpKX1mdW5jdGlvbiBseChlKXtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO2ZvcihsZXRbbixyXW9mIGUuZW50cmllcygpKXQuYXBwZW5kKG4sdHlwZW9mIHI9PSJzdHJpbmciP3I6ci5uYW1lKTtyZXR1cm4gdH1mdW5jdGlvbiBhRShlKXtsZXQgdD1uZXcgRm9ybURhdGE7Zm9yKGxldFtuLHJdb2YgZS5lbnRyaWVzKCkpdC5hcHBlbmQobixyKTtyZXR1cm4gdH1mdW5jdGlvbiBaaihlLHQsbixyLG8pe2xldCBpPXt9LHM9bnVsbCxhLGw9ITEsYz17fTtyZXR1cm4gbi5mb3JFYWNoKCh1LGQpPT57bGV0IGY9dFtkXS5yb3V0ZS5pZDtpZihIZSghQWEodSksIkNhbm5vdCBoYW5kbGUgcmVkaXJlY3QgcmVzdWx0cyBpbiBwcm9jZXNzTG9hZGVyRGF0YSIpLGhjKHUpKXtsZXQgcD1NZChlLGYpLG09dS5lcnJvcjtyJiYobT1PYmplY3QudmFsdWVzKHIpWzBdLHI9dm9pZCAwKSxzPXN8fHt9LHNbcC5yb3V0ZS5pZF09PW51bGwmJihzW3Aucm91dGUuaWRdPW0pLGlbZl09dm9pZCAwLGx8fChsPSEwLGE9RVAodS5lcnJvcik/dS5lcnJvci5zdGF0dXM6NTAwKSx1LmhlYWRlcnMmJihjW2ZdPXUuaGVhZGVycyl9ZWxzZSAkYSh1KT8oby5zZXQoZix1LmRlZmVycmVkRGF0YSksaVtmXT11LmRlZmVycmVkRGF0YS5kYXRhKTppW2ZdPXUuZGF0YSx1LnN0YXR1c0NvZGUhPW51bGwmJnUuc3RhdHVzQ29kZSE9PTIwMCYmIWwmJihhPXUuc3RhdHVzQ29kZSksdS5oZWFkZXJzJiYoY1tmXT11LmhlYWRlcnMpfSksciYmKHM9cixpW09iamVjdC5rZXlzKHIpWzBdXT12b2lkIDApLHtsb2FkZXJEYXRhOmksZXJyb3JzOnMsc3RhdHVzQ29kZTphfHwyMDAsbG9hZGVySGVhZGVyczpjfX1mdW5jdGlvbiBsRShlLHQsbixyLG8saSxzLGEpe2xldHtsb2FkZXJEYXRhOmwsZXJyb3JzOmN9PVpqKHQsbixyLG8sYSk7Zm9yKGxldCB1PTA7dTxpLmxlbmd0aDt1Kyspe2xldHtrZXk6ZCxtYXRjaDpmLGNvbnRyb2xsZXI6cH09aVt1XTtIZShzIT09dm9pZCAwJiZzW3VdIT09dm9pZCAwLCJEaWQgbm90IGZpbmQgY29ycmVzcG9uZGluZyBmZXRjaGVyIHJlc3VsdCIpO2xldCBtPXNbdV07aWYoIShwJiZwLnNpZ25hbC5hYm9ydGVkKSlpZihoYyhtKSl7bGV0IGc9TWQoZS5tYXRjaGVzLGY9PW51bGw/dm9pZCAwOmYucm91dGUuaWQpO2MmJmNbZy5yb3V0ZS5pZF18fChjPUF0KHt9LGMse1tnLnJvdXRlLmlkXTptLmVycm9yfSkpLGUuZmV0Y2hlcnMuZGVsZXRlKGQpfWVsc2UgaWYoQWEobSkpSGUoITEsIlVuaGFuZGxlZCBmZXRjaGVyIHJldmFsaWRhdGlvbiByZWRpcmVjdCIpO2Vsc2UgaWYoJGEobSkpSGUoITEsIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGEiKTtlbHNle2xldCBnPWxzKG0uZGF0YSk7ZS5mZXRjaGVycy5zZXQoZCxnKX19cmV0dXJue2xvYWRlckRhdGE6bCxlcnJvcnM6Y319ZnVuY3Rpb24gY0UoZSx0LG4scil7bGV0IG89QXQoe30sdCk7Zm9yKGxldCBpIG9mIG4pe2xldCBzPWkucm91dGUuaWQ7aWYodC5oYXNPd25Qcm9wZXJ0eShzKT90W3NdIT09dm9pZCAwJiYob1tzXT10W3NdKTplW3NdIT09dm9pZCAwJiZpLnJvdXRlLmxvYWRlciYmKG9bc109ZVtzXSksciYmci5oYXNPd25Qcm9wZXJ0eShzKSlicmVha31yZXR1cm4gb31mdW5jdGlvbiBNZChlLHQpe3JldHVybih0P2Uuc2xpY2UoMCxlLmZpbmRJbmRleChyPT5yLnJvdXRlLmlkPT09dCkrMSk6Wy4uLmVdKS5yZXZlcnNlKCkuZmluZChyPT5yLnJvdXRlLmhhc0Vycm9yQm91bmRhcnk9PT0hMCl8fGVbMF19ZnVuY3Rpb24gdUUoZSl7bGV0IHQ9ZS5sZW5ndGg9PT0xP2VbMF06ZS5maW5kKG49Pm4uaW5kZXh8fCFuLnBhdGh8fG4ucGF0aD09PSIvIil8fHtpZDoiX19zaGltLWVycm9yLXJvdXRlX18ifTtyZXR1cm57bWF0Y2hlczpbe3BhcmFtczp7fSxwYXRobmFtZToiIixwYXRobmFtZUJhc2U6IiIscm91dGU6dH1dLHJvdXRlOnR9fWZ1bmN0aW9uIEZyKGUsdCl7bGV0e3BhdGhuYW1lOm4scm91dGVJZDpyLG1ldGhvZDpvLHR5cGU6aX09dD09PXZvaWQgMD97fTp0LHM9IlVua25vd24gU2VydmVyIEVycm9yIixhPSJVbmtub3duIEByZW1peC1ydW4vcm91dGVyIGVycm9yIjtyZXR1cm4gZT09PTQwMD8ocz0iQmFkIFJlcXVlc3QiLG8mJm4mJnI/YT0iWW91IG1hZGUgYSAiK28rJyByZXF1ZXN0IHRvICInK24rJyIgYnV0ICcrKCdkaWQgbm90IHByb3ZpZGUgYSBgbG9hZGVyYCBmb3Igcm91dGUgIicrcisnIiwgJykrInNvIHRoZXJlIGlzIG5vIHdheSB0byBoYW5kbGUgdGhlIHJlcXVlc3QuIjppPT09ImRlZmVyLWFjdGlvbiI/YT0iZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnMiOmk9PT0iaW52YWxpZC1ib2R5IiYmKGE9IlVuYWJsZSB0byBlbmNvZGUgc3VibWlzc2lvbiBib2R5IikpOmU9PT00MDM/KHM9IkZvcmJpZGRlbiIsYT0nUm91dGUgIicrcisnIiBkb2VzIG5vdCBtYXRjaCBVUkwgIicrbisnIicpOmU9PT00MDQ/KHM9Ik5vdCBGb3VuZCIsYT0nTm8gcm91dGUgbWF0Y2hlcyBVUkwgIicrbisnIicpOmU9PT00MDUmJihzPSJNZXRob2QgTm90IEFsbG93ZWQiLG8mJm4mJnI/YT0iWW91IG1hZGUgYSAiK28udG9VcHBlckNhc2UoKSsnIHJlcXVlc3QgdG8gIicrbisnIiBidXQgJysoJ2RpZCBub3QgcHJvdmlkZSBhbiBgYWN0aW9uYCBmb3Igcm91dGUgIicrcisnIiwgJykrInNvIHRoZXJlIGlzIG5vIHdheSB0byBoYW5kbGUgdGhlIHJlcXVlc3QuIjpvJiYoYT0nSW52YWxpZCByZXF1ZXN0IG1ldGhvZCAiJytvLnRvVXBwZXJDYXNlKCkrJyInKSksbmV3IEMxKGV8fDUwMCxzLG5ldyBFcnJvcihhKSwhMCl9ZnVuY3Rpb24gZEUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDt0LS0pe2xldCBuPWVbdF07aWYoQWEobikpcmV0dXJue3Jlc3VsdDpuLGlkeDp0fX19ZnVuY3Rpb24gUFAoZSl7bGV0IHQ9dHlwZW9mIGU9PSJzdHJpbmciP1ZpKGUpOmU7cmV0dXJuIFFmKEF0KHt9LHQse2hhc2g6IiJ9KSl9ZnVuY3Rpb24gSmooZSx0KXtyZXR1cm4gZS5wYXRobmFtZSE9PXQucGF0aG5hbWV8fGUuc2VhcmNoIT09dC5zZWFyY2g/ITE6ZS5oYXNoPT09IiI/dC5oYXNoIT09IiI6ZS5oYXNoPT09dC5oYXNoPyEwOnQuaGFzaCE9PSIifWZ1bmN0aW9uICRhKGUpe3JldHVybiBlLnR5cGU9PT1OdC5kZWZlcnJlZH1mdW5jdGlvbiBoYyhlKXtyZXR1cm4gZS50eXBlPT09TnQuZXJyb3J9ZnVuY3Rpb24gQWEoZSl7cmV0dXJuKGUmJmUudHlwZSk9PT1OdC5yZWRpcmVjdH1mdW5jdGlvbiBRaihlKXtsZXQgdD1lO3JldHVybiB0JiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiB0LmRhdGE9PSJvYmplY3QiJiZ0eXBlb2YgdC5zdWJzY3JpYmU9PSJmdW5jdGlvbiImJnR5cGVvZiB0LmNhbmNlbD09ImZ1bmN0aW9uIiYmdHlwZW9mIHQucmVzb2x2ZURhdGE9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gZTYoZSl7cmV0dXJuIGUhPW51bGwmJnR5cGVvZiBlLnN0YXR1cz09Im51bWJlciImJnR5cGVvZiBlLnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgZS5oZWFkZXJzPT0ib2JqZWN0IiYmdHlwZW9mIGUuYm9keTwidSJ9ZnVuY3Rpb24gdDYoZSl7cmV0dXJuIFVqLmhhcyhlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIGdvKGUpe3JldHVybiBGai5oYXMoZS50b0xvd2VyQ2FzZSgpKX1hc3luYyBmdW5jdGlvbiBmRShlLHQsbixyLG8saSl7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2xldCBhPW5bc10sbD10W3NdO2lmKCFsKWNvbnRpbnVlO2xldCBjPWUuZmluZChkPT5kLnJvdXRlLmlkPT09bC5yb3V0ZS5pZCksdT1jIT1udWxsJiYhVFAoYyxsKSYmKGkmJmlbbC5yb3V0ZS5pZF0pIT09dm9pZCAwO2lmKCRhKGEpJiYob3x8dSkpe2xldCBkPXJbc107SGUoZCwiRXhwZWN0ZWQgYW4gQWJvcnRTaWduYWwgZm9yIHJldmFsaWRhdGluZyBmZXRjaGVyIGRlZmVycmVkIHJlc3VsdCIpLGF3YWl0IE1QKGEsZCxvKS50aGVuKGY9PntmJiYobltzXT1mfHxuW3NdKX0pfX19YXN5bmMgZnVuY3Rpb24gTVAoZSx0LG4pe2lmKG49PT12b2lkIDAmJihuPSExKSwhYXdhaXQgZS5kZWZlcnJlZERhdGEucmVzb2x2ZURhdGEodCkpe2lmKG4pdHJ5e3JldHVybnt0eXBlOk50LmRhdGEsZGF0YTplLmRlZmVycmVkRGF0YS51bndyYXBwZWREYXRhfX1jYXRjaChvKXtyZXR1cm57dHlwZTpOdC5lcnJvcixlcnJvcjpvfX1yZXR1cm57dHlwZTpOdC5kYXRhLGRhdGE6ZS5kZWZlcnJlZERhdGEuZGF0YX19fWZ1bmN0aW9uIE8xKGUpe3JldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKGUpLmdldEFsbCgiaW5kZXgiKS5zb21lKHQ9PnQ9PT0iIil9ZnVuY3Rpb24gY3goZSx0KXtsZXQgbj10eXBlb2YgdD09InN0cmluZyI/VmkodCkuc2VhcmNoOnQuc2VhcmNoO2lmKGVbZS5sZW5ndGgtMV0ucm91dGUuaW5kZXgmJk8xKG58fCIiKSlyZXR1cm4gZVtlLmxlbmd0aC0xXTtsZXQgcj13UChlKTtyZXR1cm4gcltyLmxlbmd0aC0xXX1mdW5jdGlvbiBwRShlKXtsZXR7Zm9ybU1ldGhvZDp0LGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLHRleHQ6byxmb3JtRGF0YTppLGpzb246c309ZTtpZighKCF0fHwhbnx8IXIpKXtpZihvIT1udWxsKXJldHVybntmb3JtTWV0aG9kOnQsZm9ybUFjdGlvbjpuLGZvcm1FbmNUeXBlOnIsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6b307aWYoaSE9bnVsbClyZXR1cm57Zm9ybU1ldGhvZDp0LGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLGZvcm1EYXRhOmksanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9O2lmKHMhPT12b2lkIDApcmV0dXJue2Zvcm1NZXRob2Q6dCxmb3JtQWN0aW9uOm4sZm9ybUVuY1R5cGU6cixmb3JtRGF0YTp2b2lkIDAsanNvbjpzLHRleHQ6dm9pZCAwfX19ZnVuY3Rpb24gZ3koZSx0KXtyZXR1cm4gdD97c3RhdGU6ImxvYWRpbmciLGxvY2F0aW9uOmUsZm9ybU1ldGhvZDp0LmZvcm1NZXRob2QsZm9ybUFjdGlvbjp0LmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6dC5mb3JtRW5jVHlwZSxmb3JtRGF0YTp0LmZvcm1EYXRhLGpzb246dC5qc29uLHRleHQ6dC50ZXh0fTp7c3RhdGU6ImxvYWRpbmciLGxvY2F0aW9uOmUsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH19ZnVuY3Rpb24gbjYoZSx0KXtyZXR1cm57c3RhdGU6InN1Ym1pdHRpbmciLGxvY2F0aW9uOmUsZm9ybU1ldGhvZDp0LmZvcm1NZXRob2QsZm9ybUFjdGlvbjp0LmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6dC5mb3JtRW5jVHlwZSxmb3JtRGF0YTp0LmZvcm1EYXRhLGpzb246dC5qc29uLHRleHQ6dC50ZXh0fX1mdW5jdGlvbiBBdShlLHQpe3JldHVybiBlP3tzdGF0ZToibG9hZGluZyIsZm9ybU1ldGhvZDplLmZvcm1NZXRob2QsZm9ybUFjdGlvbjplLmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6ZS5mb3JtRW5jVHlwZSxmb3JtRGF0YTplLmZvcm1EYXRhLGpzb246ZS5qc29uLHRleHQ6ZS50ZXh0LGRhdGE6dH06e3N0YXRlOiJsb2FkaW5nIixmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwLGRhdGE6dH19ZnVuY3Rpb24gcjYoZSx0KXtyZXR1cm57c3RhdGU6InN1Ym1pdHRpbmciLGZvcm1NZXRob2Q6ZS5mb3JtTWV0aG9kLGZvcm1BY3Rpb246ZS5mb3JtQWN0aW9uLGZvcm1FbmNUeXBlOmUuZm9ybUVuY1R5cGUsZm9ybURhdGE6ZS5mb3JtRGF0YSxqc29uOmUuanNvbix0ZXh0OmUudGV4dCxkYXRhOnQ/dC5kYXRhOnZvaWQgMH19ZnVuY3Rpb24gbHMoZSl7cmV0dXJue3N0YXRlOiJpZGxlIixmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwLGRhdGE6ZX19ZnVuY3Rpb24gbzYoZSx0KXt0cnl7bGV0IG49ZS5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKE9QKTtpZihuKXtsZXQgcj1KU09OLnBhcnNlKG4pO2ZvcihsZXRbbyxpXW9mIE9iamVjdC5lbnRyaWVzKHJ8fHt9KSlpJiZBcnJheS5pc0FycmF5KGkpJiZ0LnNldChvLG5ldyBTZXQoaXx8W10pKX19Y2F0Y2h7fX1mdW5jdGlvbiBpNihlLHQpe2lmKHQuc2l6ZT4wKXtsZXQgbj17fTtmb3IobGV0W3Isb11vZiB0KW5bcl09Wy4uLm9dO3RyeXtlLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oT1AsSlNPTi5zdHJpbmdpZnkobikpfWNhdGNoKHIpe1FhKCExLCJGYWlsZWQgdG8gc2F2ZSBhcHBsaWVkIHZpZXcgdHJhbnNpdGlvbnMgaW4gc2Vzc2lvblN0b3JhZ2UgKCIrcisiKS4iKX19fS8qKgogKiBSZWFjdCBSb3V0ZXIgdjYuMjEuMgogKgogKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICoKICogQGxpY2Vuc2UgTUlUCiAqL2Z1bmN0aW9uIG5mKCl7cmV0dXJuIG5mPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbmYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0ICRnPWguY3JlYXRlQ29udGV4dChudWxsKSxSUD1oLmNyZWF0ZUNvbnRleHQobnVsbCksQWc9aC5jcmVhdGVDb250ZXh0KG51bGwpLERnPWguY3JlYXRlQ29udGV4dChudWxsKSx5bD1oLmNyZWF0ZUNvbnRleHQoe291dGxldDpudWxsLG1hdGNoZXM6W10saXNEYXRhUm91dGU6ITF9KSxOUD1oLmNyZWF0ZUNvbnRleHQobnVsbCk7ZnVuY3Rpb24gSWcoKXtyZXR1cm4gaC51c2VDb250ZXh0KERnKSE9bnVsbH1mdW5jdGlvbiAkUCgpe3JldHVybiBJZygpfHxIZSghMSksaC51c2VDb250ZXh0KERnKS5sb2NhdGlvbn1mdW5jdGlvbiBBUChlKXtoLnVzZUNvbnRleHQoQWcpLnN0YXRpY3x8aC51c2VMYXlvdXRFZmZlY3QoZSl9ZnVuY3Rpb24gVDEoKXtsZXR7aXNEYXRhUm91dGU6ZX09aC51c2VDb250ZXh0KHlsKTtyZXR1cm4gZT95NigpOnM2KCl9ZnVuY3Rpb24gczYoKXtJZygpfHxIZSghMSk7bGV0IGU9aC51c2VDb250ZXh0KCRnKSx7YmFzZW5hbWU6dCxmdXR1cmU6bixuYXZpZ2F0b3I6cn09aC51c2VDb250ZXh0KEFnKSx7bWF0Y2hlczpvfT1oLnVzZUNvbnRleHQoeWwpLHtwYXRobmFtZTppfT0kUCgpLHM9SlNPTi5zdHJpbmdpZnkoU1AobyxuLnY3X3JlbGF0aXZlU3BsYXRQYXRoKSksYT1oLnVzZVJlZighMSk7cmV0dXJuIEFQKCgpPT57YS5jdXJyZW50PSEwfSksaC51c2VDYWxsYmFjayhmdW5jdGlvbihjLHUpe2lmKHU9PT12b2lkIDAmJih1PXt9KSwhYS5jdXJyZW50KXJldHVybjtpZih0eXBlb2YgYz09Im51bWJlciIpe3IuZ28oYyk7cmV0dXJufWxldCBkPWtQKGMsSlNPTi5wYXJzZShzKSxpLHUucmVsYXRpdmU9PT0icGF0aCIpO2U9PW51bGwmJnQhPT0iLyImJihkLnBhdGhuYW1lPWQucGF0aG5hbWU9PT0iLyI/dDpGcyhbdCxkLnBhdGhuYW1lXSkpLCh1LnJlcGxhY2U/ci5yZXBsYWNlOnIucHVzaCkoZCx1LnN0YXRlLHUpfSxbdCxyLHMsaSxlXSl9ZnVuY3Rpb24gYTYoKXtsZXR7bWF0Y2hlczplfT1oLnVzZUNvbnRleHQoeWwpLHQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdD90LnBhcmFtczp7fX1mdW5jdGlvbiBsNihlLHQsbixyKXtJZygpfHxIZSghMSk7bGV0e25hdmlnYXRvcjpvfT1oLnVzZUNvbnRleHQoQWcpLHttYXRjaGVzOml9PWgudXNlQ29udGV4dCh5bCkscz1pW2kubGVuZ3RoLTFdLGE9cz9zLnBhcmFtczp7fTtzJiZzLnBhdGhuYW1lO2xldCBsPXM/cy5wYXRobmFtZUJhc2U6Ii8iO3MmJnMucm91dGU7bGV0IGM9JFAoKSx1O2lmKHQpe3ZhciBkO2xldCB5PXR5cGVvZiB0PT0ic3RyaW5nIj9WaSh0KTp0O2w9PT0iLyJ8fChkPXkucGF0aG5hbWUpIT1udWxsJiZkLnN0YXJ0c1dpdGgobCl8fEhlKCExKSx1PXl9ZWxzZSB1PWM7bGV0IGY9dS5wYXRobmFtZXx8Ii8iLHA9bD09PSIvIj9mOmYuc2xpY2UobC5sZW5ndGgpfHwiLyIsbT1wYyhlLHtwYXRobmFtZTpwfSksZz1wNihtJiZtLm1hcCh5PT5PYmplY3QuYXNzaWduKHt9LHkse3BhcmFtczpPYmplY3QuYXNzaWduKHt9LGEseS5wYXJhbXMpLHBhdGhuYW1lOkZzKFtsLG8uZW5jb2RlTG9jYXRpb24/by5lbmNvZGVMb2NhdGlvbih5LnBhdGhuYW1lKS5wYXRobmFtZTp5LnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOnkucGF0aG5hbWVCYXNlPT09Ii8iP2w6RnMoW2wsby5lbmNvZGVMb2NhdGlvbj9vLmVuY29kZUxvY2F0aW9uKHkucGF0aG5hbWVCYXNlKS5wYXRobmFtZTp5LnBhdGhuYW1lQmFzZV0pfSkpLGksbixyKTtyZXR1cm4gdCYmZz9oLmNyZWF0ZUVsZW1lbnQoRGcuUHJvdmlkZXIse3ZhbHVlOntsb2NhdGlvbjpuZih7cGF0aG5hbWU6Ii8iLHNlYXJjaDoiIixoYXNoOiIiLHN0YXRlOm51bGwsa2V5OiJkZWZhdWx0In0sdSksbmF2aWdhdGlvblR5cGU6enQuUG9wfX0sZyk6Z31mdW5jdGlvbiBjNigpe2xldCBlPXY2KCksdD1FUChlKT9lLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0OmUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6SlNPTi5zdHJpbmdpZnkoZSksbj1lIGluc3RhbmNlb2YgRXJyb3I/ZS5zdGFjazpudWxsLG89e3BhZGRpbmc6IjAuNXJlbSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDIwMCwyMDAsMjAwLCAwLjUpIn07cmV0dXJuIGguY3JlYXRlRWxlbWVudChoLkZyYWdtZW50LG51bGwsaC5jcmVhdGVFbGVtZW50KCJoMiIsbnVsbCwiVW5leHBlY3RlZCBBcHBsaWNhdGlvbiBFcnJvciEiKSxoLmNyZWF0ZUVsZW1lbnQoImgzIix7c3R5bGU6e2ZvbnRTdHlsZToiaXRhbGljIn19LHQpLG4/aC5jcmVhdGVFbGVtZW50KCJwcmUiLHtzdHlsZTpvfSxuKTpudWxsLG51bGwpfWNvbnN0IHU2PWguY3JlYXRlRWxlbWVudChjNixudWxsKTtjbGFzcyBkNiBleHRlbmRzIGguQ29tcG9uZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuc3RhdGU9e2xvY2F0aW9uOnQubG9jYXRpb24scmV2YWxpZGF0aW9uOnQucmV2YWxpZGF0aW9uLGVycm9yOnQuZXJyb3J9fXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IodCl7cmV0dXJue2Vycm9yOnR9fXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHModCxuKXtyZXR1cm4gbi5sb2NhdGlvbiE9PXQubG9jYXRpb258fG4ucmV2YWxpZGF0aW9uIT09ImlkbGUiJiZ0LnJldmFsaWRhdGlvbj09PSJpZGxlIj97ZXJyb3I6dC5lcnJvcixsb2NhdGlvbjp0LmxvY2F0aW9uLHJldmFsaWRhdGlvbjp0LnJldmFsaWRhdGlvbn06e2Vycm9yOnQuZXJyb3IhPT12b2lkIDA/dC5lcnJvcjpuLmVycm9yLGxvY2F0aW9uOm4ubG9jYXRpb24scmV2YWxpZGF0aW9uOnQucmV2YWxpZGF0aW9ufHxuLnJldmFsaWRhdGlvbn19Y29tcG9uZW50RGlkQ2F0Y2godCxuKXtjb25zb2xlLmVycm9yKCJSZWFjdCBSb3V0ZXIgY2F1Z2h0IHRoZSBmb2xsb3dpbmcgZXJyb3IgZHVyaW5nIHJlbmRlciIsdCxuKX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5lcnJvciE9PXZvaWQgMD9oLmNyZWF0ZUVsZW1lbnQoeWwuUHJvdmlkZXIse3ZhbHVlOnRoaXMucHJvcHMucm91dGVDb250ZXh0fSxoLmNyZWF0ZUVsZW1lbnQoTlAuUHJvdmlkZXIse3ZhbHVlOnRoaXMuc3RhdGUuZXJyb3IsY2hpbGRyZW46dGhpcy5wcm9wcy5jb21wb25lbnR9KSk6dGhpcy5wcm9wcy5jaGlsZHJlbn19ZnVuY3Rpb24gZjYoZSl7bGV0e3JvdXRlQ29udGV4dDp0LG1hdGNoOm4sY2hpbGRyZW46cn09ZSxvPWgudXNlQ29udGV4dCgkZyk7cmV0dXJuIG8mJm8uc3RhdGljJiZvLnN0YXRpY0NvbnRleHQmJihuLnJvdXRlLmVycm9yRWxlbWVudHx8bi5yb3V0ZS5FcnJvckJvdW5kYXJ5KSYmKG8uc3RhdGljQ29udGV4dC5fZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZD1uLnJvdXRlLmlkKSxoLmNyZWF0ZUVsZW1lbnQoeWwuUHJvdmlkZXIse3ZhbHVlOnR9LHIpfWZ1bmN0aW9uIHA2KGUsdCxuLHIpe3ZhciBvO2lmKHQ9PT12b2lkIDAmJih0PVtdKSxuPT09dm9pZCAwJiYobj1udWxsKSxyPT09dm9pZCAwJiYocj1udWxsKSxlPT1udWxsKXt2YXIgaTtpZigoaT1uKSE9bnVsbCYmaS5lcnJvcnMpZT1uLm1hdGNoZXM7ZWxzZSByZXR1cm4gbnVsbH1sZXQgcz1lLGE9KG89bik9PW51bGw/dm9pZCAwOm8uZXJyb3JzO2lmKGEhPW51bGwpe2xldCB1PXMuZmluZEluZGV4KGQ9PmQucm91dGUuaWQmJihhPT1udWxsP3ZvaWQgMDphW2Qucm91dGUuaWRdKSk7dT49MHx8SGUoITEpLHM9cy5zbGljZSgwLE1hdGgubWluKHMubGVuZ3RoLHUrMSkpfWxldCBsPSExLGM9LTE7aWYobiYmciYmci52N19wYXJ0aWFsSHlkcmF0aW9uKWZvcihsZXQgdT0wO3U8cy5sZW5ndGg7dSsrKXtsZXQgZD1zW3VdO2lmKChkLnJvdXRlLkh5ZHJhdGVGYWxsYmFja3x8ZC5yb3V0ZS5oeWRyYXRlRmFsbGJhY2tFbGVtZW50KSYmKGM9dSksZC5yb3V0ZS5pZCl7bGV0e2xvYWRlckRhdGE6ZixlcnJvcnM6cH09bixtPWQucm91dGUubG9hZGVyJiZmW2Qucm91dGUuaWRdPT09dm9pZCAwJiYoIXB8fHBbZC5yb3V0ZS5pZF09PT12b2lkIDApO2lmKGQucm91dGUubGF6eXx8bSl7bD0hMCxjPj0wP3M9cy5zbGljZSgwLGMrMSk6cz1bc1swXV07YnJlYWt9fX1yZXR1cm4gcy5yZWR1Y2VSaWdodCgodSxkLGYpPT57bGV0IHAsbT0hMSxnPW51bGwseT1udWxsO24mJihwPWEmJmQucm91dGUuaWQ/YVtkLnJvdXRlLmlkXTp2b2lkIDAsZz1kLnJvdXRlLmVycm9yRWxlbWVudHx8dTYsbCYmKGM8MCYmZj09PTA/KHg2KCJyb3V0ZS1mYWxsYmFjayIsITEpLG09ITAseT1udWxsKTpjPT09ZiYmKG09ITAseT1kLnJvdXRlLmh5ZHJhdGVGYWxsYmFja0VsZW1lbnR8fG51bGwpKSk7bGV0IHY9dC5jb25jYXQocy5zbGljZSgwLGYrMSkpLHg9KCk9PntsZXQgdztyZXR1cm4gcD93PWc6bT93PXk6ZC5yb3V0ZS5Db21wb25lbnQ/dz1oLmNyZWF0ZUVsZW1lbnQoZC5yb3V0ZS5Db21wb25lbnQsbnVsbCk6ZC5yb3V0ZS5lbGVtZW50P3c9ZC5yb3V0ZS5lbGVtZW50Onc9dSxoLmNyZWF0ZUVsZW1lbnQoZjYse21hdGNoOmQscm91dGVDb250ZXh0OntvdXRsZXQ6dSxtYXRjaGVzOnYsaXNEYXRhUm91dGU6biE9bnVsbH0sY2hpbGRyZW46d30pfTtyZXR1cm4gbiYmKGQucm91dGUuRXJyb3JCb3VuZGFyeXx8ZC5yb3V0ZS5lcnJvckVsZW1lbnR8fGY9PT0wKT9oLmNyZWF0ZUVsZW1lbnQoZDYse2xvY2F0aW9uOm4ubG9jYXRpb24scmV2YWxpZGF0aW9uOm4ucmV2YWxpZGF0aW9uLGNvbXBvbmVudDpnLGVycm9yOnAsY2hpbGRyZW46eCgpLHJvdXRlQ29udGV4dDp7b3V0bGV0Om51bGwsbWF0Y2hlczp2LGlzRGF0YVJvdXRlOiEwfX0pOngoKX0sbnVsbCl9dmFyIERQPWZ1bmN0aW9uKGUpe3JldHVybiBlLlVzZUJsb2NrZXI9InVzZUJsb2NrZXIiLGUuVXNlUmV2YWxpZGF0b3I9InVzZVJldmFsaWRhdG9yIixlLlVzZU5hdmlnYXRlU3RhYmxlPSJ1c2VOYXZpZ2F0ZSIsZX0oRFB8fHt9KSxhbT1mdW5jdGlvbihlKXtyZXR1cm4gZS5Vc2VCbG9ja2VyPSJ1c2VCbG9ja2VyIixlLlVzZUxvYWRlckRhdGE9InVzZUxvYWRlckRhdGEiLGUuVXNlQWN0aW9uRGF0YT0idXNlQWN0aW9uRGF0YSIsZS5Vc2VSb3V0ZUVycm9yPSJ1c2VSb3V0ZUVycm9yIixlLlVzZU5hdmlnYXRpb249InVzZU5hdmlnYXRpb24iLGUuVXNlUm91dGVMb2FkZXJEYXRhPSJ1c2VSb3V0ZUxvYWRlckRhdGEiLGUuVXNlTWF0Y2hlcz0idXNlTWF0Y2hlcyIsZS5Vc2VSZXZhbGlkYXRvcj0idXNlUmV2YWxpZGF0b3IiLGUuVXNlTmF2aWdhdGVTdGFibGU9InVzZU5hdmlnYXRlIixlLlVzZVJvdXRlSWQ9InVzZVJvdXRlSWQiLGV9KGFtfHx7fSk7ZnVuY3Rpb24gaDYoZSl7bGV0IHQ9aC51c2VDb250ZXh0KCRnKTtyZXR1cm4gdHx8SGUoITEpLHR9ZnVuY3Rpb24gbTYoZSl7bGV0IHQ9aC51c2VDb250ZXh0KFJQKTtyZXR1cm4gdHx8SGUoITEpLHR9ZnVuY3Rpb24gZzYoZSl7bGV0IHQ9aC51c2VDb250ZXh0KHlsKTtyZXR1cm4gdHx8SGUoITEpLHR9ZnVuY3Rpb24gSVAoZSl7bGV0IHQ9ZzYoKSxuPXQubWF0Y2hlc1t0Lm1hdGNoZXMubGVuZ3RoLTFdO3JldHVybiBuLnJvdXRlLmlkfHxIZSghMSksbi5yb3V0ZS5pZH1mdW5jdGlvbiB2Nigpe3ZhciBlO2xldCB0PWgudXNlQ29udGV4dChOUCksbj1tNihhbS5Vc2VSb3V0ZUVycm9yKSxyPUlQKGFtLlVzZVJvdXRlRXJyb3IpO3JldHVybiB0IT09dm9pZCAwP3Q6KGU9bi5lcnJvcnMpPT1udWxsP3ZvaWQgMDplW3JdfWZ1bmN0aW9uIHk2KCl7bGV0e3JvdXRlcjplfT1oNihEUC5Vc2VOYXZpZ2F0ZVN0YWJsZSksdD1JUChhbS5Vc2VOYXZpZ2F0ZVN0YWJsZSksbj1oLnVzZVJlZighMSk7cmV0dXJuIEFQKCgpPT57bi5jdXJyZW50PSEwfSksaC51c2VDYWxsYmFjayhmdW5jdGlvbihvLGkpe2k9PT12b2lkIDAmJihpPXt9KSxuLmN1cnJlbnQmJih0eXBlb2Ygbz09Im51bWJlciI/ZS5uYXZpZ2F0ZShvKTplLm5hdmlnYXRlKG8sbmYoe2Zyb21Sb3V0ZUlkOnR9LGkpKSl9LFtlLHRdKX1jb25zdCBoRT17fTtmdW5jdGlvbiB4NihlLHQsbil7IXQmJiFoRVtlXSYmKGhFW2VdPSEwKX1mdW5jdGlvbiBiNihlKXtsZXR7YmFzZW5hbWU6dD0iLyIsY2hpbGRyZW46bj1udWxsLGxvY2F0aW9uOnIsbmF2aWdhdGlvblR5cGU6bz16dC5Qb3AsbmF2aWdhdG9yOmksc3RhdGljOnM9ITEsZnV0dXJlOmF9PWU7SWcoKSYmSGUoITEpO2xldCBsPXQucmVwbGFjZSgvXlwvKi8sIi8iKSxjPWgudXNlTWVtbygoKT0+KHtiYXNlbmFtZTpsLG5hdmlnYXRvcjppLHN0YXRpYzpzLGZ1dHVyZTpuZih7djdfcmVsYXRpdmVTcGxhdFBhdGg6ITF9LGEpfSksW2wsYSxpLHNdKTt0eXBlb2Ygcj09InN0cmluZyImJihyPVZpKHIpKTtsZXR7cGF0aG5hbWU6dT0iLyIsc2VhcmNoOmQ9IiIsaGFzaDpmPSIiLHN0YXRlOnA9bnVsbCxrZXk6bT0iZGVmYXVsdCJ9PXIsZz1oLnVzZU1lbW8oKCk9PntsZXQgeT1lcCh1LGwpO3JldHVybiB5PT1udWxsP251bGw6e2xvY2F0aW9uOntwYXRobmFtZTp5LHNlYXJjaDpkLGhhc2g6ZixzdGF0ZTpwLGtleTptfSxuYXZpZ2F0aW9uVHlwZTpvfX0sW2wsdSxkLGYscCxtLG9dKTtyZXR1cm4gZz09bnVsbD9udWxsOmguY3JlYXRlRWxlbWVudChBZy5Qcm92aWRlcix7dmFsdWU6Y30saC5jcmVhdGVFbGVtZW50KERnLlByb3ZpZGVyLHtjaGlsZHJlbjpuLHZhbHVlOmd9KSl9bmV3IFByb21pc2UoKCk9Pnt9KTtmdW5jdGlvbiB3NihlKXtsZXQgdD17aGFzRXJyb3JCb3VuZGFyeTplLkVycm9yQm91bmRhcnkhPW51bGx8fGUuZXJyb3JFbGVtZW50IT1udWxsfTtyZXR1cm4gZS5Db21wb25lbnQmJk9iamVjdC5hc3NpZ24odCx7ZWxlbWVudDpoLmNyZWF0ZUVsZW1lbnQoZS5Db21wb25lbnQpLENvbXBvbmVudDp2b2lkIDB9KSxlLkh5ZHJhdGVGYWxsYmFjayYmT2JqZWN0LmFzc2lnbih0LHtoeWRyYXRlRmFsbGJhY2tFbGVtZW50OmguY3JlYXRlRWxlbWVudChlLkh5ZHJhdGVGYWxsYmFjayksSHlkcmF0ZUZhbGxiYWNrOnZvaWQgMH0pLGUuRXJyb3JCb3VuZGFyeSYmT2JqZWN0LmFzc2lnbih0LHtlcnJvckVsZW1lbnQ6aC5jcmVhdGVFbGVtZW50KGUuRXJyb3JCb3VuZGFyeSksRXJyb3JCb3VuZGFyeTp2b2lkIDB9KSx0fWZ1bmN0aW9uIExQKGU9ImRhcmsiKXtjb25zdFt0LG5dPWgudXNlU3RhdGUoZSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpPT09ImxpZ2h0Ij9uKCJsaWdodCIpOmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWwtdGhlbWUiKT09PSJkYXJrInx8d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcz9uKCJkYXJrIik6d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpLm1hdGNoZXMmJm4oImxpZ2h0Iik7Y29uc3Qgcj1vPT57bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpfHxuKG8ubWF0Y2hlcz8iZGFyayI6ImxpZ2h0Iil9O3JldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsciksKCk9Pnt3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIscil9fSxbXSksW3Qscj0+e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJ2YWwtdGhlbWUiLHIpLG4ocil9XX1mdW5jdGlvbiBkbihlKXtmb3IodmFyIHQ9ZSxuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4xP24tMTowKSxvPTE7bzxuO28rKylyW28tMV09YXJndW1lbnRzW29dO2Zvcih2YXIgaT0wLHM9cjtpPHMubGVuZ3RoO2krKyl7dmFyIGE9c1tpXTt0PWEodCl9cmV0dXJuIHR9ZnVuY3Rpb24galAoZSx0KXtjb25zdFtuLHJdPWgudXNlU3RhdGUoe30pLFtvLGldPWgudXNlU3RhdGUoMCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57ZS5zdGF0dXM9PT0ic3VjY2VzcyImJnQuZ2V0UGF0Y2hlcyh7fSkudGhlbihzPT57aWYoYnQuaXNPayhzKSl7Y29uc3QgYT17fTtmb3IoY29uc3QgbCBpbiBzLnZhbHVlKWFbbF09cy52YWx1ZVtsXS5tYXAoYz0+Yy5wYXRjaF9pZCk7cihhKX1lbHNlIGNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBsb2FkIHBhdGNoZXMiLHMuZXJyb3IpfSl9LFtlLG9dKSx7cGF0Y2hlczpuLHNldFBhdGNoUmVzZXRJZDppfX12YXIgWmU7KGZ1bmN0aW9uKGUpe2UuYXNzZXJ0RXF1YWw9bz0+bztmdW5jdGlvbiB0KG8pe31lLmFzc2VydElzPXQ7ZnVuY3Rpb24gbihvKXt0aHJvdyBuZXcgRXJyb3J9ZS5hc3NlcnROZXZlcj1uLGUuYXJyYXlUb0VudW09bz0+e2NvbnN0IGk9e307Zm9yKGNvbnN0IHMgb2YgbylpW3NdPXM7cmV0dXJuIGl9LGUuZ2V0VmFsaWRFbnVtVmFsdWVzPW89Pntjb25zdCBpPWUub2JqZWN0S2V5cyhvKS5maWx0ZXIoYT0+dHlwZW9mIG9bb1thXV0hPSJudW1iZXIiKSxzPXt9O2Zvcihjb25zdCBhIG9mIGkpc1thXT1vW2FdO3JldHVybiBlLm9iamVjdFZhbHVlcyhzKX0sZS5vYmplY3RWYWx1ZXM9bz0+ZS5vYmplY3RLZXlzKG8pLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gb1tpXX0pLGUub2JqZWN0S2V5cz10eXBlb2YgT2JqZWN0LmtleXM9PSJmdW5jdGlvbiI/bz0+T2JqZWN0LmtleXMobyk6bz0+e2NvbnN0IGk9W107Zm9yKGNvbnN0IHMgaW4gbylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobyxzKSYmaS5wdXNoKHMpO3JldHVybiBpfSxlLmZpbmQ9KG8saSk9Pntmb3IoY29uc3QgcyBvZiBvKWlmKGkocykpcmV0dXJuIHN9LGUuaXNJbnRlZ2VyPXR5cGVvZiBOdW1iZXIuaXNJbnRlZ2VyPT0iZnVuY3Rpb24iP289Pk51bWJlci5pc0ludGVnZXIobyk6bz0+dHlwZW9mIG89PSJudW1iZXIiJiZpc0Zpbml0ZShvKSYmTWF0aC5mbG9vcihvKT09PW87ZnVuY3Rpb24gcihvLGk9IiB8ICIpe3JldHVybiBvLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/YCcke3N9J2A6cykuam9pbihpKX1lLmpvaW5WYWx1ZXM9cixlLmpzb25TdHJpbmdpZnlSZXBsYWNlcj0obyxpKT0+dHlwZW9mIGk9PSJiaWdpbnQiP2kudG9TdHJpbmcoKTppfSkoWmV8fChaZT17fSkpO3ZhciB1eDsoZnVuY3Rpb24oZSl7ZS5tZXJnZVNoYXBlcz0odCxuKT0+KHsuLi50LC4uLm59KX0pKHV4fHwodXg9e30pKTtjb25zdCBvZT1aZS5hcnJheVRvRW51bShbInN0cmluZyIsIm5hbiIsIm51bWJlciIsImludGVnZXIiLCJmbG9hdCIsImJvb2xlYW4iLCJkYXRlIiwiYmlnaW50Iiwic3ltYm9sIiwiZnVuY3Rpb24iLCJ1bmRlZmluZWQiLCJudWxsIiwiYXJyYXkiLCJvYmplY3QiLCJ1bmtub3duIiwicHJvbWlzZSIsInZvaWQiLCJuZXZlciIsIm1hcCIsInNldCJdKSxrcz1lPT57c3dpdGNoKHR5cGVvZiBlKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG9lLnVuZGVmaW5lZDtjYXNlInN0cmluZyI6cmV0dXJuIG9lLnN0cmluZztjYXNlIm51bWJlciI6cmV0dXJuIGlzTmFOKGUpP29lLm5hbjpvZS5udW1iZXI7Y2FzZSJib29sZWFuIjpyZXR1cm4gb2UuYm9vbGVhbjtjYXNlImZ1bmN0aW9uIjpyZXR1cm4gb2UuZnVuY3Rpb247Y2FzZSJiaWdpbnQiOnJldHVybiBvZS5iaWdpbnQ7Y2FzZSJzeW1ib2wiOnJldHVybiBvZS5zeW1ib2w7Y2FzZSJvYmplY3QiOnJldHVybiBBcnJheS5pc0FycmF5KGUpP29lLmFycmF5OmU9PT1udWxsP29lLm51bGw6ZS50aGVuJiZ0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iJiZlLmNhdGNoJiZ0eXBlb2YgZS5jYXRjaD09ImZ1bmN0aW9uIj9vZS5wcm9taXNlOnR5cGVvZiBNYXA8InUiJiZlIGluc3RhbmNlb2YgTWFwP29lLm1hcDp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD9vZS5zZXQ6dHlwZW9mIERhdGU8InUiJiZlIGluc3RhbmNlb2YgRGF0ZT9vZS5kYXRlOm9lLm9iamVjdDtkZWZhdWx0OnJldHVybiBvZS51bmtub3dufX0sVz1aZS5hcnJheVRvRW51bShbImludmFsaWRfdHlwZSIsImludmFsaWRfbGl0ZXJhbCIsImN1c3RvbSIsImludmFsaWRfdW5pb24iLCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IiLCJpbnZhbGlkX2VudW1fdmFsdWUiLCJ1bnJlY29nbml6ZWRfa2V5cyIsImludmFsaWRfYXJndW1lbnRzIiwiaW52YWxpZF9yZXR1cm5fdHlwZSIsImludmFsaWRfZGF0ZSIsImludmFsaWRfc3RyaW5nIiwidG9vX3NtYWxsIiwidG9vX2JpZyIsImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzIiwibm90X211bHRpcGxlX29mIiwibm90X2Zpbml0ZSJdKSxTNj1lPT5KU09OLnN0cmluZ2lmeShlLG51bGwsMikucmVwbGFjZSgvIihbXiJdKykiOi9nLCIkMToiKTtjbGFzcyBPbyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5pc3N1ZXM9W10sdGhpcy5hZGRJc3N1ZT1yPT57dGhpcy5pc3N1ZXM9Wy4uLnRoaXMuaXNzdWVzLHJdfSx0aGlzLmFkZElzc3Vlcz0ocj1bXSk9Pnt0aGlzLmlzc3Vlcz1bLi4udGhpcy5pc3N1ZXMsLi4ucl19O2NvbnN0IG49bmV3LnRhcmdldC5wcm90b3R5cGU7T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG4pOnRoaXMuX19wcm90b19fPW4sdGhpcy5uYW1lPSJab2RFcnJvciIsdGhpcy5pc3N1ZXM9dH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuaXNzdWVzfWZvcm1hdCh0KXtjb25zdCBuPXR8fGZ1bmN0aW9uKGkpe3JldHVybiBpLm1lc3NhZ2V9LHI9e19lcnJvcnM6W119LG89aT0+e2Zvcihjb25zdCBzIG9mIGkuaXNzdWVzKWlmKHMuY29kZT09PSJpbnZhbGlkX3VuaW9uIilzLnVuaW9uRXJyb3JzLm1hcChvKTtlbHNlIGlmKHMuY29kZT09PSJpbnZhbGlkX3JldHVybl90eXBlIilvKHMucmV0dXJuVHlwZUVycm9yKTtlbHNlIGlmKHMuY29kZT09PSJpbnZhbGlkX2FyZ3VtZW50cyIpbyhzLmFyZ3VtZW50c0Vycm9yKTtlbHNlIGlmKHMucGF0aC5sZW5ndGg9PT0wKXIuX2Vycm9ycy5wdXNoKG4ocykpO2Vsc2V7bGV0IGE9cixsPTA7Zm9yKDtsPHMucGF0aC5sZW5ndGg7KXtjb25zdCBjPXMucGF0aFtsXTtsPT09cy5wYXRoLmxlbmd0aC0xPyhhW2NdPWFbY118fHtfZXJyb3JzOltdfSxhW2NdLl9lcnJvcnMucHVzaChuKHMpKSk6YVtjXT1hW2NdfHx7X2Vycm9yczpbXX0sYT1hW2NdLGwrK319fTtyZXR1cm4gbyh0aGlzKSxyfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubWVzc2FnZX1nZXQgbWVzc2FnZSgpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmlzc3VlcyxaZS5qc29uU3RyaW5naWZ5UmVwbGFjZXIsMil9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH1mbGF0dGVuKHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXt9LHI9W107Zm9yKGNvbnN0IG8gb2YgdGhpcy5pc3N1ZXMpby5wYXRoLmxlbmd0aD4wPyhuW28ucGF0aFswXV09bltvLnBhdGhbMF1dfHxbXSxuW28ucGF0aFswXV0ucHVzaCh0KG8pKSk6ci5wdXNoKHQobykpO3JldHVybntmb3JtRXJyb3JzOnIsZmllbGRFcnJvcnM6bn19Z2V0IGZvcm1FcnJvcnMoKXtyZXR1cm4gdGhpcy5mbGF0dGVuKCl9fU9vLmNyZWF0ZT1lPT5uZXcgT28oZSk7Y29uc3QgcmY9KGUsdCk9PntsZXQgbjtzd2l0Y2goZS5jb2RlKXtjYXNlIFcuaW52YWxpZF90eXBlOmUucmVjZWl2ZWQ9PT1vZS51bmRlZmluZWQ/bj0iUmVxdWlyZWQiOm49YEV4cGVjdGVkICR7ZS5leHBlY3RlZH0sIHJlY2VpdmVkICR7ZS5yZWNlaXZlZH1gO2JyZWFrO2Nhc2UgVy5pbnZhbGlkX2xpdGVyYWw6bj1gSW52YWxpZCBsaXRlcmFsIHZhbHVlLCBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KGUuZXhwZWN0ZWQsWmUuanNvblN0cmluZ2lmeVJlcGxhY2VyKX1gO2JyZWFrO2Nhc2UgVy51bnJlY29nbml6ZWRfa2V5czpuPWBVbnJlY29nbml6ZWQga2V5KHMpIGluIG9iamVjdDogJHtaZS5qb2luVmFsdWVzKGUua2V5cywiLCAiKX1gO2JyZWFrO2Nhc2UgVy5pbnZhbGlkX3VuaW9uOm49IkludmFsaWQgaW5wdXQiO2JyZWFrO2Nhc2UgVy5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I6bj1gSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke1plLmpvaW5WYWx1ZXMoZS5vcHRpb25zKX1gO2JyZWFrO2Nhc2UgVy5pbnZhbGlkX2VudW1fdmFsdWU6bj1gSW52YWxpZCBlbnVtIHZhbHVlLiBFeHBlY3RlZCAke1plLmpvaW5WYWx1ZXMoZS5vcHRpb25zKX0sIHJlY2VpdmVkICcke2UucmVjZWl2ZWR9J2A7YnJlYWs7Y2FzZSBXLmludmFsaWRfYXJndW1lbnRzOm49IkludmFsaWQgZnVuY3Rpb24gYXJndW1lbnRzIjticmVhaztjYXNlIFcuaW52YWxpZF9yZXR1cm5fdHlwZTpuPSJJbnZhbGlkIGZ1bmN0aW9uIHJldHVybiB0eXBlIjticmVhaztjYXNlIFcuaW52YWxpZF9kYXRlOm49IkludmFsaWQgZGF0ZSI7YnJlYWs7Y2FzZSBXLmludmFsaWRfc3RyaW5nOnR5cGVvZiBlLnZhbGlkYXRpb249PSJvYmplY3QiPyJpbmNsdWRlcyJpbiBlLnZhbGlkYXRpb24/KG49YEludmFsaWQgaW5wdXQ6IG11c3QgaW5jbHVkZSAiJHtlLnZhbGlkYXRpb24uaW5jbHVkZXN9ImAsdHlwZW9mIGUudmFsaWRhdGlvbi5wb3NpdGlvbj09Im51bWJlciImJihuPWAke259IGF0IG9uZSBvciBtb3JlIHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtlLnZhbGlkYXRpb24ucG9zaXRpb259YCkpOiJzdGFydHNXaXRoImluIGUudmFsaWRhdGlvbj9uPWBJbnZhbGlkIGlucHV0OiBtdXN0IHN0YXJ0IHdpdGggIiR7ZS52YWxpZGF0aW9uLnN0YXJ0c1dpdGh9ImA6ImVuZHNXaXRoImluIGUudmFsaWRhdGlvbj9uPWBJbnZhbGlkIGlucHV0OiBtdXN0IGVuZCB3aXRoICIke2UudmFsaWRhdGlvbi5lbmRzV2l0aH0iYDpaZS5hc3NlcnROZXZlcihlLnZhbGlkYXRpb24pOmUudmFsaWRhdGlvbiE9PSJyZWdleCI/bj1gSW52YWxpZCAke2UudmFsaWRhdGlvbn1gOm49IkludmFsaWQiO2JyZWFrO2Nhc2UgVy50b29fc21hbGw6ZS50eXBlPT09ImFycmF5Ij9uPWBBcnJheSBtdXN0IGNvbnRhaW4gJHtlLmV4YWN0PyJleGFjdGx5IjplLmluY2x1c2l2ZT8iYXQgbGVhc3QiOiJtb3JlIHRoYW4ifSAke2UubWluaW11bX0gZWxlbWVudChzKWA6ZS50eXBlPT09InN0cmluZyI/bj1gU3RyaW5nIG11c3QgY29udGFpbiAke2UuZXhhY3Q/ImV4YWN0bHkiOmUuaW5jbHVzaXZlPyJhdCBsZWFzdCI6Im92ZXIifSAke2UubWluaW11bX0gY2hhcmFjdGVyKHMpYDplLnR5cGU9PT0ibnVtYmVyIj9uPWBOdW1iZXIgbXVzdCBiZSAke2UuZXhhY3Q/ImV4YWN0bHkgZXF1YWwgdG8gIjplLmluY2x1c2l2ZT8iZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICI6ImdyZWF0ZXIgdGhhbiAifSR7ZS5taW5pbXVtfWA6ZS50eXBlPT09ImRhdGUiP249YERhdGUgbXVzdCBiZSAke2UuZXhhY3Q/ImV4YWN0bHkgZXF1YWwgdG8gIjplLmluY2x1c2l2ZT8iZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICI6ImdyZWF0ZXIgdGhhbiAifSR7bmV3IERhdGUoTnVtYmVyKGUubWluaW11bSkpfWA6bj0iSW52YWxpZCBpbnB1dCI7YnJlYWs7Y2FzZSBXLnRvb19iaWc6ZS50eXBlPT09ImFycmF5Ij9uPWBBcnJheSBtdXN0IGNvbnRhaW4gJHtlLmV4YWN0PyJleGFjdGx5IjplLmluY2x1c2l2ZT8iYXQgbW9zdCI6Imxlc3MgdGhhbiJ9ICR7ZS5tYXhpbXVtfSBlbGVtZW50KHMpYDplLnR5cGU9PT0ic3RyaW5nIj9uPWBTdHJpbmcgbXVzdCBjb250YWluICR7ZS5leGFjdD8iZXhhY3RseSI6ZS5pbmNsdXNpdmU/ImF0IG1vc3QiOiJ1bmRlciJ9ICR7ZS5tYXhpbXVtfSBjaGFyYWN0ZXIocylgOmUudHlwZT09PSJudW1iZXIiP249YE51bWJlciBtdXN0IGJlICR7ZS5leGFjdD8iZXhhY3RseSI6ZS5pbmNsdXNpdmU/Imxlc3MgdGhhbiBvciBlcXVhbCB0byI6Imxlc3MgdGhhbiJ9ICR7ZS5tYXhpbXVtfWA6ZS50eXBlPT09ImJpZ2ludCI/bj1gQmlnSW50IG11c3QgYmUgJHtlLmV4YWN0PyJleGFjdGx5IjplLmluY2x1c2l2ZT8ibGVzcyB0aGFuIG9yIGVxdWFsIHRvIjoibGVzcyB0aGFuIn0gJHtlLm1heGltdW19YDplLnR5cGU9PT0iZGF0ZSI/bj1gRGF0ZSBtdXN0IGJlICR7ZS5leGFjdD8iZXhhY3RseSI6ZS5pbmNsdXNpdmU/InNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byI6InNtYWxsZXIgdGhhbiJ9ICR7bmV3IERhdGUoTnVtYmVyKGUubWF4aW11bSkpfWA6bj0iSW52YWxpZCBpbnB1dCI7YnJlYWs7Y2FzZSBXLmN1c3RvbTpuPSJJbnZhbGlkIGlucHV0IjticmVhaztjYXNlIFcuaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM6bj0iSW50ZXJzZWN0aW9uIHJlc3VsdHMgY291bGQgbm90IGJlIG1lcmdlZCI7YnJlYWs7Y2FzZSBXLm5vdF9tdWx0aXBsZV9vZjpuPWBOdW1iZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7ZS5tdWx0aXBsZU9mfWA7YnJlYWs7Y2FzZSBXLm5vdF9maW5pdGU6bj0iTnVtYmVyIG11c3QgYmUgZmluaXRlIjticmVhaztkZWZhdWx0Om49dC5kZWZhdWx0RXJyb3IsWmUuYXNzZXJ0TmV2ZXIoZSl9cmV0dXJue21lc3NhZ2U6bn19O2xldCB6UD1yZjtmdW5jdGlvbiBrNihlKXt6UD1lfWZ1bmN0aW9uIGxtKCl7cmV0dXJuIHpQfWNvbnN0IGNtPWU9Pntjb25zdHtkYXRhOnQscGF0aDpuLGVycm9yTWFwczpyLGlzc3VlRGF0YTpvfT1lLGk9Wy4uLm4sLi4uby5wYXRofHxbXV0scz17Li4ubyxwYXRoOml9O2xldCBhPSIiO2NvbnN0IGw9ci5maWx0ZXIoYz0+ISFjKS5zbGljZSgpLnJldmVyc2UoKTtmb3IoY29uc3QgYyBvZiBsKWE9YyhzLHtkYXRhOnQsZGVmYXVsdEVycm9yOmF9KS5tZXNzYWdlO3JldHVybnsuLi5vLHBhdGg6aSxtZXNzYWdlOm8ubWVzc2FnZXx8YX19LEU2PVtdO2Z1bmN0aW9uIGllKGUsdCl7Y29uc3Qgbj1jbSh7aXNzdWVEYXRhOnQsZGF0YTplLmRhdGEscGF0aDplLnBhdGgsZXJyb3JNYXBzOltlLmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsZS5zY2hlbWFFcnJvck1hcCxsbSgpLHJmXS5maWx0ZXIocj0+ISFyKX0pO2UuY29tbW9uLmlzc3Vlcy5wdXNoKG4pfWNsYXNzIExue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0idmFsaWQifWRpcnR5KCl7dGhpcy52YWx1ZT09PSJ2YWxpZCImJih0aGlzLnZhbHVlPSJkaXJ0eSIpfWFib3J0KCl7dGhpcy52YWx1ZSE9PSJhYm9ydGVkIiYmKHRoaXMudmFsdWU9ImFib3J0ZWQiKX1zdGF0aWMgbWVyZ2VBcnJheSh0LG4pe2NvbnN0IHI9W107Zm9yKGNvbnN0IG8gb2Ygbil7aWYoby5zdGF0dXM9PT0iYWJvcnRlZCIpcmV0dXJuIE9lO28uc3RhdHVzPT09ImRpcnR5IiYmdC5kaXJ0eSgpLHIucHVzaChvLnZhbHVlKX1yZXR1cm57c3RhdHVzOnQudmFsdWUsdmFsdWU6cn19c3RhdGljIGFzeW5jIG1lcmdlT2JqZWN0QXN5bmModCxuKXtjb25zdCByPVtdO2Zvcihjb25zdCBvIG9mIG4pci5wdXNoKHtrZXk6YXdhaXQgby5rZXksdmFsdWU6YXdhaXQgby52YWx1ZX0pO3JldHVybiBMbi5tZXJnZU9iamVjdFN5bmModCxyKX1zdGF0aWMgbWVyZ2VPYmplY3RTeW5jKHQsbil7Y29uc3Qgcj17fTtmb3IoY29uc3QgbyBvZiBuKXtjb25zdHtrZXk6aSx2YWx1ZTpzfT1vO2lmKGkuc3RhdHVzPT09ImFib3J0ZWQifHxzLnN0YXR1cz09PSJhYm9ydGVkIilyZXR1cm4gT2U7aS5zdGF0dXM9PT0iZGlydHkiJiZ0LmRpcnR5KCkscy5zdGF0dXM9PT0iZGlydHkiJiZ0LmRpcnR5KCksaS52YWx1ZSE9PSJfX3Byb3RvX18iJiYodHlwZW9mIHMudmFsdWU8InUifHxvLmFsd2F5c1NldCkmJihyW2kudmFsdWVdPXMudmFsdWUpfXJldHVybntzdGF0dXM6dC52YWx1ZSx2YWx1ZTpyfX19Y29uc3QgT2U9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLEZQPWU9Pih7c3RhdHVzOiJkaXJ0eSIsdmFsdWU6ZX0pLEduPWU9Pih7c3RhdHVzOiJ2YWxpZCIsdmFsdWU6ZX0pLGR4PWU9PmUuc3RhdHVzPT09ImFib3J0ZWQiLGZ4PWU9PmUuc3RhdHVzPT09ImRpcnR5IixvZj1lPT5lLnN0YXR1cz09PSJ2YWxpZCIsdW09ZT0+dHlwZW9mIFByb21pc2U8InUiJiZlIGluc3RhbmNlb2YgUHJvbWlzZTt2YXIgeWU7KGZ1bmN0aW9uKGUpe2UuZXJyVG9PYmo9dD0+dHlwZW9mIHQ9PSJzdHJpbmciP3ttZXNzYWdlOnR9OnR8fHt9LGUudG9TdHJpbmc9dD0+dHlwZW9mIHQ9PSJzdHJpbmciP3Q6dD09bnVsbD92b2lkIDA6dC5tZXNzYWdlfSkoeWV8fCh5ZT17fSkpO2NsYXNzIFpve2NvbnN0cnVjdG9yKHQsbixyLG8pe3RoaXMuX2NhY2hlZFBhdGg9W10sdGhpcy5wYXJlbnQ9dCx0aGlzLmRhdGE9bix0aGlzLl9wYXRoPXIsdGhpcy5fa2V5PW99Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fY2FjaGVkUGF0aC5sZW5ndGh8fCh0aGlzLl9rZXkgaW5zdGFuY2VvZiBBcnJheT90aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCwuLi50aGlzLl9rZXkpOnRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLHRoaXMuX2tleSkpLHRoaXMuX2NhY2hlZFBhdGh9fWNvbnN0IG1FPShlLHQpPT57aWYob2YodCkpcmV0dXJue3N1Y2Nlc3M6ITAsZGF0YTp0LnZhbHVlfTtpZighZS5jb21tb24uaXNzdWVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZmFpbGVkIGJ1dCBubyBpc3N1ZXMgZGV0ZWN0ZWQuIik7cmV0dXJue3N1Y2Nlc3M6ITEsZ2V0IGVycm9yKCl7aWYodGhpcy5fZXJyb3IpcmV0dXJuIHRoaXMuX2Vycm9yO2NvbnN0IG49bmV3IE9vKGUuY29tbW9uLmlzc3Vlcyk7cmV0dXJuIHRoaXMuX2Vycm9yPW4sdGhpcy5fZXJyb3J9fX07ZnVuY3Rpb24gTWUoZSl7aWYoIWUpcmV0dXJue307Y29uc3R7ZXJyb3JNYXA6dCxpbnZhbGlkX3R5cGVfZXJyb3I6bixyZXF1aXJlZF9lcnJvcjpyLGRlc2NyaXB0aW9uOm99PWU7aWYodCYmKG58fHIpKXRocm93IG5ldyBFcnJvcihgQ2FuJ3QgdXNlICJpbnZhbGlkX3R5cGVfZXJyb3IiIG9yICJyZXF1aXJlZF9lcnJvciIgaW4gY29uanVuY3Rpb24gd2l0aCBjdXN0b20gZXJyb3IgbWFwLmApO3JldHVybiB0P3tlcnJvck1hcDp0LGRlc2NyaXB0aW9uOm99OntlcnJvck1hcDoocyxhKT0+cy5jb2RlIT09ImludmFsaWRfdHlwZSI/e21lc3NhZ2U6YS5kZWZhdWx0RXJyb3J9OnR5cGVvZiBhLmRhdGE+InUiP3ttZXNzYWdlOnI/P2EuZGVmYXVsdEVycm9yfTp7bWVzc2FnZTpuPz9hLmRlZmF1bHRFcnJvcn0sZGVzY3JpcHRpb246b319Y2xhc3MgSWV7Y29uc3RydWN0b3IodCl7dGhpcy5zcGE9dGhpcy5zYWZlUGFyc2VBc3luYyx0aGlzLl9kZWY9dCx0aGlzLnBhcnNlPXRoaXMucGFyc2UuYmluZCh0aGlzKSx0aGlzLnNhZmVQYXJzZT10aGlzLnNhZmVQYXJzZS5iaW5kKHRoaXMpLHRoaXMucGFyc2VBc3luYz10aGlzLnBhcnNlQXN5bmMuYmluZCh0aGlzKSx0aGlzLnNhZmVQYXJzZUFzeW5jPXRoaXMuc2FmZVBhcnNlQXN5bmMuYmluZCh0aGlzKSx0aGlzLnNwYT10aGlzLnNwYS5iaW5kKHRoaXMpLHRoaXMucmVmaW5lPXRoaXMucmVmaW5lLmJpbmQodGhpcyksdGhpcy5yZWZpbmVtZW50PXRoaXMucmVmaW5lbWVudC5iaW5kKHRoaXMpLHRoaXMuc3VwZXJSZWZpbmU9dGhpcy5zdXBlclJlZmluZS5iaW5kKHRoaXMpLHRoaXMub3B0aW9uYWw9dGhpcy5vcHRpb25hbC5iaW5kKHRoaXMpLHRoaXMubnVsbGFibGU9dGhpcy5udWxsYWJsZS5iaW5kKHRoaXMpLHRoaXMubnVsbGlzaD10aGlzLm51bGxpc2guYmluZCh0aGlzKSx0aGlzLmFycmF5PXRoaXMuYXJyYXkuYmluZCh0aGlzKSx0aGlzLnByb21pc2U9dGhpcy5wcm9taXNlLmJpbmQodGhpcyksdGhpcy5vcj10aGlzLm9yLmJpbmQodGhpcyksdGhpcy5hbmQ9dGhpcy5hbmQuYmluZCh0aGlzKSx0aGlzLnRyYW5zZm9ybT10aGlzLnRyYW5zZm9ybS5iaW5kKHRoaXMpLHRoaXMuYnJhbmQ9dGhpcy5icmFuZC5iaW5kKHRoaXMpLHRoaXMuZGVmYXVsdD10aGlzLmRlZmF1bHQuYmluZCh0aGlzKSx0aGlzLmNhdGNoPXRoaXMuY2F0Y2guYmluZCh0aGlzKSx0aGlzLmRlc2NyaWJlPXRoaXMuZGVzY3JpYmUuYmluZCh0aGlzKSx0aGlzLnBpcGU9dGhpcy5waXBlLmJpbmQodGhpcyksdGhpcy5yZWFkb25seT10aGlzLnJlYWRvbmx5LmJpbmQodGhpcyksdGhpcy5pc051bGxhYmxlPXRoaXMuaXNOdWxsYWJsZS5iaW5kKHRoaXMpLHRoaXMuaXNPcHRpb25hbD10aGlzLmlzT3B0aW9uYWwuYmluZCh0aGlzKX1nZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fZGVmLmRlc2NyaXB0aW9ufV9nZXRUeXBlKHQpe3JldHVybiBrcyh0LmRhdGEpfV9nZXRPclJldHVybkN0eCh0LG4pe3JldHVybiBufHx7Y29tbW9uOnQucGFyZW50LmNvbW1vbixkYXRhOnQuZGF0YSxwYXJzZWRUeXBlOmtzKHQuZGF0YSksc2NoZW1hRXJyb3JNYXA6dGhpcy5fZGVmLmVycm9yTWFwLHBhdGg6dC5wYXRoLHBhcmVudDp0LnBhcmVudH19X3Byb2Nlc3NJbnB1dFBhcmFtcyh0KXtyZXR1cm57c3RhdHVzOm5ldyBMbixjdHg6e2NvbW1vbjp0LnBhcmVudC5jb21tb24sZGF0YTp0LmRhdGEscGFyc2VkVHlwZTprcyh0LmRhdGEpLHNjaGVtYUVycm9yTWFwOnRoaXMuX2RlZi5lcnJvck1hcCxwYXRoOnQucGF0aCxwYXJlbnQ6dC5wYXJlbnR9fX1fcGFyc2VTeW5jKHQpe2NvbnN0IG49dGhpcy5fcGFyc2UodCk7aWYodW0obikpdGhyb3cgbmV3IEVycm9yKCJTeW5jaHJvbm91cyBwYXJzZSBlbmNvdW50ZXJlZCBwcm9taXNlLiIpO3JldHVybiBufV9wYXJzZUFzeW5jKHQpe2NvbnN0IG49dGhpcy5fcGFyc2UodCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKX1wYXJzZSh0LG4pe2NvbnN0IHI9dGhpcy5zYWZlUGFyc2UodCxuKTtpZihyLnN1Y2Nlc3MpcmV0dXJuIHIuZGF0YTt0aHJvdyByLmVycm9yfXNhZmVQYXJzZSh0LG4pe3ZhciByO2NvbnN0IG89e2NvbW1vbjp7aXNzdWVzOltdLGFzeW5jOihyPW49PW51bGw/dm9pZCAwOm4uYXN5bmMpIT09bnVsbCYmciE9PXZvaWQgMD9yOiExLGNvbnRleHR1YWxFcnJvck1hcDpuPT1udWxsP3ZvaWQgMDpuLmVycm9yTWFwfSxwYXRoOihuPT1udWxsP3ZvaWQgMDpuLnBhdGgpfHxbXSxzY2hlbWFFcnJvck1hcDp0aGlzLl9kZWYuZXJyb3JNYXAscGFyZW50Om51bGwsZGF0YTp0LHBhcnNlZFR5cGU6a3ModCl9LGk9dGhpcy5fcGFyc2VTeW5jKHtkYXRhOnQscGF0aDpvLnBhdGgscGFyZW50Om99KTtyZXR1cm4gbUUobyxpKX1hc3luYyBwYXJzZUFzeW5jKHQsbil7Y29uc3Qgcj1hd2FpdCB0aGlzLnNhZmVQYXJzZUFzeW5jKHQsbik7aWYoci5zdWNjZXNzKXJldHVybiByLmRhdGE7dGhyb3cgci5lcnJvcn1hc3luYyBzYWZlUGFyc2VBc3luYyh0LG4pe2NvbnN0IHI9e2NvbW1vbjp7aXNzdWVzOltdLGNvbnRleHR1YWxFcnJvck1hcDpuPT1udWxsP3ZvaWQgMDpuLmVycm9yTWFwLGFzeW5jOiEwfSxwYXRoOihuPT1udWxsP3ZvaWQgMDpuLnBhdGgpfHxbXSxzY2hlbWFFcnJvck1hcDp0aGlzLl9kZWYuZXJyb3JNYXAscGFyZW50Om51bGwsZGF0YTp0LHBhcnNlZFR5cGU6a3ModCl9LG89dGhpcy5fcGFyc2Uoe2RhdGE6dCxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pLGk9YXdhaXQodW0obyk/bzpQcm9taXNlLnJlc29sdmUobykpO3JldHVybiBtRShyLGkpfXJlZmluZSh0LG4pe2NvbnN0IHI9bz0+dHlwZW9mIG49PSJzdHJpbmcifHx0eXBlb2Ygbj4idSI/e21lc3NhZ2U6bn06dHlwZW9mIG49PSJmdW5jdGlvbiI/bihvKTpuO3JldHVybiB0aGlzLl9yZWZpbmVtZW50KChvLGkpPT57Y29uc3Qgcz10KG8pLGE9KCk9PmkuYWRkSXNzdWUoe2NvZGU6Vy5jdXN0b20sLi4ucihvKX0pO3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJnMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihsPT5sPyEwOihhKCksITEpKTpzPyEwOihhKCksITEpfSl9cmVmaW5lbWVudCh0LG4pe3JldHVybiB0aGlzLl9yZWZpbmVtZW50KChyLG8pPT50KHIpPyEwOihvLmFkZElzc3VlKHR5cGVvZiBuPT0iZnVuY3Rpb24iP24ocixvKTpuKSwhMSkpfV9yZWZpbmVtZW50KHQpe3JldHVybiBuZXcgTm8oe3NjaGVtYTp0aGlzLHR5cGVOYW1lOlNlLlpvZEVmZmVjdHMsZWZmZWN0Ont0eXBlOiJyZWZpbmVtZW50IixyZWZpbmVtZW50OnR9fSl9c3VwZXJSZWZpbmUodCl7cmV0dXJuIHRoaXMuX3JlZmluZW1lbnQodCl9b3B0aW9uYWwoKXtyZXR1cm4gVGkuY3JlYXRlKHRoaXMsdGhpcy5fZGVmKX1udWxsYWJsZSgpe3JldHVybiBubC5jcmVhdGUodGhpcyx0aGlzLl9kZWYpfW51bGxpc2goKXtyZXR1cm4gdGhpcy5udWxsYWJsZSgpLm9wdGlvbmFsKCl9YXJyYXkoKXtyZXR1cm4gVG8uY3JlYXRlKHRoaXMsdGhpcy5fZGVmKX1wcm9taXNlKCl7cmV0dXJuIEJjLmNyZWF0ZSh0aGlzLHRoaXMuX2RlZil9b3IodCl7cmV0dXJuIGNmLmNyZWF0ZShbdGhpcyx0XSx0aGlzLl9kZWYpfWFuZCh0KXtyZXR1cm4gdWYuY3JlYXRlKHRoaXMsdCx0aGlzLl9kZWYpfXRyYW5zZm9ybSh0KXtyZXR1cm4gbmV3IE5vKHsuLi5NZSh0aGlzLl9kZWYpLHNjaGVtYTp0aGlzLHR5cGVOYW1lOlNlLlpvZEVmZmVjdHMsZWZmZWN0Ont0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fX0pfWRlZmF1bHQodCl7Y29uc3Qgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OigpPT50O3JldHVybiBuZXcgbWYoey4uLk1lKHRoaXMuX2RlZiksaW5uZXJUeXBlOnRoaXMsZGVmYXVsdFZhbHVlOm4sdHlwZU5hbWU6U2UuWm9kRGVmYXVsdH0pfWJyYW5kKCl7cmV0dXJuIG5ldyBVUCh7dHlwZU5hbWU6U2UuWm9kQnJhbmRlZCx0eXBlOnRoaXMsLi4uTWUodGhpcy5fZGVmKX0pfWNhdGNoKHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooKT0+dDtyZXR1cm4gbmV3IGhtKHsuLi5NZSh0aGlzLl9kZWYpLGlubmVyVHlwZTp0aGlzLGNhdGNoVmFsdWU6bix0eXBlTmFtZTpTZS5ab2RDYXRjaH0pfWRlc2NyaWJlKHQpe2NvbnN0IG49dGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IG4oey4uLnRoaXMuX2RlZixkZXNjcmlwdGlvbjp0fSl9cGlwZSh0KXtyZXR1cm4gdHAuY3JlYXRlKHRoaXMsdCl9cmVhZG9ubHkoKXtyZXR1cm4gZ20uY3JlYXRlKHRoaXMpfWlzT3B0aW9uYWwoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2Uodm9pZCAwKS5zdWNjZXNzfWlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc319Y29uc3QgXzY9L15jW15ccy1dezgsfSQvaSxDNj0vXlthLXpdW2EtejAtOV0qJC8sTzY9L15bMC05QS1ISktNTlAtVFYtWl17MjZ9JC8sVDY9L15bMC05YS1mQS1GXXs4fVxiLVswLTlhLWZBLUZdezR9XGItWzAtOWEtZkEtRl17NH1cYi1bMC05YS1mQS1GXXs0fVxiLVswLTlhLWZBLUZdezEyfSQvaSxQNj0vXig/IVwuKSg/IS4qXC5cLikoW0EtWjAtOV8rLVwuXSopW0EtWjAtOV8rLV1AKFtBLVowLTldW0EtWjAtOVwtXSpcLikrW0EtWl17Mix9JC9pLE02PSJeKFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxccHtFbW9qaV9Db21wb25lbnR9KSskIjtsZXQgdnk7Y29uc3QgUjY9L14oKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSQvLE42PS9eKChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkpJC8sJDY9ZT0+ZS5wcmVjaXNpb24/ZS5vZmZzZXQ/bmV3IFJlZ0V4cChgXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9XFwuXFxkeyR7ZS5wcmVjaXNpb259fSgoWystXVxcZHsyfSg6P1xcZHsyfSk/KXxaKSRgKTpuZXcgUmVnRXhwKGBeXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn1cXC5cXGR7JHtlLnByZWNpc2lvbn19WiRgKTplLnByZWNpc2lvbj09PTA/ZS5vZmZzZXQ/bmV3IFJlZ0V4cCgiXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KChbKy1dXFxkezJ9KDo/XFxkezJ9KT8pfFopJCIpOm5ldyBSZWdFeHAoIl5cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVokIik6ZS5vZmZzZXQ/bmV3IFJlZ0V4cCgiXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KFxcLlxcZCspPygoWystXVxcZHsyfSg6P1xcZHsyfSk/KXxaKSQiKTpuZXcgUmVnRXhwKCJeXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oXFwuXFxkKyk/WiQiKTtmdW5jdGlvbiBBNihlLHQpe3JldHVybiEhKCh0PT09InY0Inx8IXQpJiZSNi50ZXN0KGUpfHwodD09PSJ2NiJ8fCF0KSYmTjYudGVzdChlKSl9Y2xhc3MgU28gZXh0ZW5kcyBJZXtfcGFyc2UodCl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKHQuZGF0YT1TdHJpbmcodC5kYXRhKSksdGhpcy5fZ2V0VHlwZSh0KSE9PW9lLnN0cmluZyl7Y29uc3QgaT10aGlzLl9nZXRPclJldHVybkN0eCh0KTtyZXR1cm4gaWUoaSx7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpvZS5zdHJpbmcscmVjZWl2ZWQ6aS5wYXJzZWRUeXBlfSksT2V9Y29uc3Qgcj1uZXcgTG47bGV0IG87Zm9yKGNvbnN0IGkgb2YgdGhpcy5fZGVmLmNoZWNrcylpZihpLmtpbmQ9PT0ibWluIil0LmRhdGEubGVuZ3RoPGkudmFsdWUmJihvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOmkudmFsdWUsdHlwZToic3RyaW5nIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTppLm1lc3NhZ2V9KSxyLmRpcnR5KCkpO2Vsc2UgaWYoaS5raW5kPT09Im1heCIpdC5kYXRhLmxlbmd0aD5pLnZhbHVlJiYobz10aGlzLl9nZXRPclJldHVybkN0eCh0LG8pLGllKG8se2NvZGU6Vy50b29fYmlnLG1heGltdW06aS52YWx1ZSx0eXBlOiJzdHJpbmciLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOmkubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihpLmtpbmQ9PT0ibGVuZ3RoIil7Y29uc3Qgcz10LmRhdGEubGVuZ3RoPmkudmFsdWUsYT10LmRhdGEubGVuZ3RoPGkudmFsdWU7KHN8fGEpJiYobz10aGlzLl9nZXRPclJldHVybkN0eCh0LG8pLHM/aWUobyx7Y29kZTpXLnRvb19iaWcsbWF4aW11bTppLnZhbHVlLHR5cGU6InN0cmluZyIsaW5jbHVzaXZlOiEwLGV4YWN0OiEwLG1lc3NhZ2U6aS5tZXNzYWdlfSk6YSYmaWUobyx7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOmkudmFsdWUsdHlwZToic3RyaW5nIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsbWVzc2FnZTppLm1lc3NhZ2V9KSxyLmRpcnR5KCkpfWVsc2UgaWYoaS5raW5kPT09ImVtYWlsIilQNi50ZXN0KHQuZGF0YSl8fChvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7dmFsaWRhdGlvbjoiZW1haWwiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmkubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihpLmtpbmQ9PT0iZW1vamkiKXZ5fHwodnk9bmV3IFJlZ0V4cChNNiwidSIpKSx2eS50ZXN0KHQuZGF0YSl8fChvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7dmFsaWRhdGlvbjoiZW1vamkiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmkubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihpLmtpbmQ9PT0idXVpZCIpVDYudGVzdCh0LmRhdGEpfHwobz10aGlzLl9nZXRPclJldHVybkN0eCh0LG8pLGllKG8se3ZhbGlkYXRpb246InV1aWQiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmkubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihpLmtpbmQ9PT0iY3VpZCIpXzYudGVzdCh0LmRhdGEpfHwobz10aGlzLl9nZXRPclJldHVybkN0eCh0LG8pLGllKG8se3ZhbGlkYXRpb246ImN1aWQiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOmkubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihpLmtpbmQ9PT0iY3VpZDIiKUM2LnRlc3QodC5kYXRhKXx8KG89dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCxvKSxpZShvLHt2YWxpZGF0aW9uOiJjdWlkMiIsY29kZTpXLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6aS5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKGkua2luZD09PSJ1bGlkIilPNi50ZXN0KHQuZGF0YSl8fChvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7dmFsaWRhdGlvbjoidWxpZCIsY29kZTpXLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6aS5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKGkua2luZD09PSJ1cmwiKXRyeXtuZXcgVVJMKHQuZGF0YSl9Y2F0Y2h7bz10aGlzLl9nZXRPclJldHVybkN0eCh0LG8pLGllKG8se3ZhbGlkYXRpb246InVybCIsY29kZTpXLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6aS5tZXNzYWdlfSksci5kaXJ0eSgpfWVsc2UgaS5raW5kPT09InJlZ2V4Ij8oaS5yZWdleC5sYXN0SW5kZXg9MCxpLnJlZ2V4LnRlc3QodC5kYXRhKXx8KG89dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCxvKSxpZShvLHt2YWxpZGF0aW9uOiJyZWdleCIsY29kZTpXLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6aS5tZXNzYWdlfSksci5kaXJ0eSgpKSk6aS5raW5kPT09InRyaW0iP3QuZGF0YT10LmRhdGEudHJpbSgpOmkua2luZD09PSJpbmNsdWRlcyI/dC5kYXRhLmluY2x1ZGVzKGkudmFsdWUsaS5wb3NpdGlvbil8fChvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7Y29kZTpXLmludmFsaWRfc3RyaW5nLHZhbGlkYXRpb246e2luY2x1ZGVzOmkudmFsdWUscG9zaXRpb246aS5wb3NpdGlvbn0sbWVzc2FnZTppLm1lc3NhZ2V9KSxyLmRpcnR5KCkpOmkua2luZD09PSJ0b0xvd2VyQ2FzZSI/dC5kYXRhPXQuZGF0YS50b0xvd2VyQ2FzZSgpOmkua2luZD09PSJ0b1VwcGVyQ2FzZSI/dC5kYXRhPXQuZGF0YS50b1VwcGVyQ2FzZSgpOmkua2luZD09PSJzdGFydHNXaXRoIj90LmRhdGEuc3RhcnRzV2l0aChpLnZhbHVlKXx8KG89dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCxvKSxpZShvLHtjb2RlOlcuaW52YWxpZF9zdHJpbmcsdmFsaWRhdGlvbjp7c3RhcnRzV2l0aDppLnZhbHVlfSxtZXNzYWdlOmkubWVzc2FnZX0pLHIuZGlydHkoKSk6aS5raW5kPT09ImVuZHNXaXRoIj90LmRhdGEuZW5kc1dpdGgoaS52YWx1ZSl8fChvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7Y29kZTpXLmludmFsaWRfc3RyaW5nLHZhbGlkYXRpb246e2VuZHNXaXRoOmkudmFsdWV9LG1lc3NhZ2U6aS5tZXNzYWdlfSksci5kaXJ0eSgpKTppLmtpbmQ9PT0iZGF0ZXRpbWUiPyQ2KGkpLnRlc3QodC5kYXRhKXx8KG89dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCxvKSxpZShvLHtjb2RlOlcuaW52YWxpZF9zdHJpbmcsdmFsaWRhdGlvbjoiZGF0ZXRpbWUiLG1lc3NhZ2U6aS5tZXNzYWdlfSksci5kaXJ0eSgpKTppLmtpbmQ9PT0iaXAiP0E2KHQuZGF0YSxpLnZlcnNpb24pfHwobz10aGlzLl9nZXRPclJldHVybkN0eCh0LG8pLGllKG8se3ZhbGlkYXRpb246ImlwIixjb2RlOlcuaW52YWxpZF9zdHJpbmcsbWVzc2FnZTppLm1lc3NhZ2V9KSxyLmRpcnR5KCkpOlplLmFzc2VydE5ldmVyKGkpO3JldHVybntzdGF0dXM6ci52YWx1ZSx2YWx1ZTp0LmRhdGF9fV9yZWdleCh0LG4scil7cmV0dXJuIHRoaXMucmVmaW5lbWVudChvPT50LnRlc3Qobykse3ZhbGlkYXRpb246bixjb2RlOlcuaW52YWxpZF9zdHJpbmcsLi4ueWUuZXJyVG9PYmoocil9KX1fYWRkQ2hlY2sodCl7cmV0dXJuIG5ldyBTbyh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx0XX0pfWVtYWlsKHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiZW1haWwiLC4uLnllLmVyclRvT2JqKHQpfSl9dXJsKHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoidXJsIiwuLi55ZS5lcnJUb09iaih0KX0pfWVtb2ppKHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiZW1vamkiLC4uLnllLmVyclRvT2JqKHQpfSl9dXVpZCh0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6InV1aWQiLC4uLnllLmVyclRvT2JqKHQpfSl9Y3VpZCh0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImN1aWQiLC4uLnllLmVyclRvT2JqKHQpfSl9Y3VpZDIodCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJjdWlkMiIsLi4ueWUuZXJyVG9PYmoodCl9KX11bGlkKHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoidWxpZCIsLi4ueWUuZXJyVG9PYmoodCl9KX1pcCh0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImlwIiwuLi55ZS5lcnJUb09iaih0KX0pfWRhdGV0aW1lKHQpe3ZhciBuO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/dGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImRhdGV0aW1lIixwcmVjaXNpb246bnVsbCxvZmZzZXQ6ITEsbWVzc2FnZTp0fSk6dGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImRhdGV0aW1lIixwcmVjaXNpb246dHlwZW9mKHQ9PW51bGw/dm9pZCAwOnQucHJlY2lzaW9uKT4idSI/bnVsbDp0PT1udWxsP3ZvaWQgMDp0LnByZWNpc2lvbixvZmZzZXQ6KG49dD09bnVsbD92b2lkIDA6dC5vZmZzZXQpIT09bnVsbCYmbiE9PXZvaWQgMD9uOiExLC4uLnllLmVyclRvT2JqKHQ9PW51bGw/dm9pZCAwOnQubWVzc2FnZSl9KX1yZWdleCh0LG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoicmVnZXgiLHJlZ2V4OnQsLi4ueWUuZXJyVG9PYmoobil9KX1pbmNsdWRlcyh0LG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiaW5jbHVkZXMiLHZhbHVlOnQscG9zaXRpb246bj09bnVsbD92b2lkIDA6bi5wb3NpdGlvbiwuLi55ZS5lcnJUb09iaihuPT1udWxsP3ZvaWQgMDpuLm1lc3NhZ2UpfSl9c3RhcnRzV2l0aCh0LG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoic3RhcnRzV2l0aCIsdmFsdWU6dCwuLi55ZS5lcnJUb09iaihuKX0pfWVuZHNXaXRoKHQsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJlbmRzV2l0aCIsdmFsdWU6dCwuLi55ZS5lcnJUb09iaihuKX0pfW1pbih0LG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWluIix2YWx1ZTp0LC4uLnllLmVyclRvT2JqKG4pfSl9bWF4KHQsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtYXgiLHZhbHVlOnQsLi4ueWUuZXJyVG9PYmoobil9KX1sZW5ndGgodCxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Imxlbmd0aCIsdmFsdWU6dCwuLi55ZS5lcnJUb09iaihuKX0pfW5vbmVtcHR5KHQpe3JldHVybiB0aGlzLm1pbigxLHllLmVyclRvT2JqKHQpKX10cmltKCl7cmV0dXJuIG5ldyBTbyh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDoidHJpbSJ9XX0pfXRvTG93ZXJDYXNlKCl7cmV0dXJuIG5ldyBTbyh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDoidG9Mb3dlckNhc2UifV19KX10b1VwcGVyQ2FzZSgpe3JldHVybiBuZXcgU28oey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3Mse2tpbmQ6InRvVXBwZXJDYXNlIn1dfSl9Z2V0IGlzRGF0ZXRpbWUoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZCh0PT50LmtpbmQ9PT0iZGF0ZXRpbWUiKX1nZXQgaXNFbWFpbCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKHQ9PnQua2luZD09PSJlbWFpbCIpfWdldCBpc1VSTCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKHQ9PnQua2luZD09PSJ1cmwiKX1nZXQgaXNFbW9qaSgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKHQ9PnQua2luZD09PSJlbW9qaSIpfWdldCBpc1VVSUQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZCh0PT50LmtpbmQ9PT0idXVpZCIpfWdldCBpc0NVSUQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZCh0PT50LmtpbmQ9PT0iY3VpZCIpfWdldCBpc0NVSUQyKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQodD0+dC5raW5kPT09ImN1aWQyIil9Z2V0IGlzVUxJRCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKHQ9PnQua2luZD09PSJ1bGlkIil9Z2V0IGlzSVAoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZCh0PT50LmtpbmQ9PT0iaXAiKX1nZXQgbWluTGVuZ3RoKCl7bGV0IHQ9bnVsbDtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKW4ua2luZD09PSJtaW4iJiYodD09PW51bGx8fG4udmFsdWU+dCkmJih0PW4udmFsdWUpO3JldHVybiB0fWdldCBtYXhMZW5ndGgoKXtsZXQgdD1udWxsO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi5jaGVja3Mpbi5raW5kPT09Im1heCImJih0PT09bnVsbHx8bi52YWx1ZTx0KSYmKHQ9bi52YWx1ZSk7cmV0dXJuIHR9fVNvLmNyZWF0ZT1lPT57dmFyIHQ7cmV0dXJuIG5ldyBTbyh7Y2hlY2tzOltdLHR5cGVOYW1lOlNlLlpvZFN0cmluZyxjb2VyY2U6KHQ9ZT09bnVsbD92b2lkIDA6ZS5jb2VyY2UpIT09bnVsbCYmdCE9PXZvaWQgMD90OiExLC4uLk1lKGUpfSl9O2Z1bmN0aW9uIEQ2KGUsdCl7Y29uc3Qgbj0oZS50b1N0cmluZygpLnNwbGl0KCIuIilbMV18fCIiKS5sZW5ndGgscj0odC50b1N0cmluZygpLnNwbGl0KCIuIilbMV18fCIiKS5sZW5ndGgsbz1uPnI/bjpyLGk9cGFyc2VJbnQoZS50b0ZpeGVkKG8pLnJlcGxhY2UoIi4iLCIiKSkscz1wYXJzZUludCh0LnRvRml4ZWQobykucmVwbGFjZSgiLiIsIiIpKTtyZXR1cm4gaSVzL01hdGgucG93KDEwLG8pfWNsYXNzIEdzIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWluPXRoaXMuZ3RlLHRoaXMubWF4PXRoaXMubHRlLHRoaXMuc3RlcD10aGlzLm11bHRpcGxlT2Z9X3BhcnNlKHQpe2lmKHRoaXMuX2RlZi5jb2VyY2UmJih0LmRhdGE9TnVtYmVyKHQuZGF0YSkpLHRoaXMuX2dldFR5cGUodCkhPT1vZS5udW1iZXIpe2NvbnN0IGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCk7cmV0dXJuIGllKGkse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6b2UubnVtYmVyLHJlY2VpdmVkOmkucGFyc2VkVHlwZX0pLE9lfWxldCByO2NvbnN0IG89bmV3IExuO2Zvcihjb25zdCBpIG9mIHRoaXMuX2RlZi5jaGVja3MpaS5raW5kPT09ImludCI/WmUuaXNJbnRlZ2VyKHQuZGF0YSl8fChyPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsciksaWUocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDoiaW50ZWdlciIscmVjZWl2ZWQ6ImZsb2F0IixtZXNzYWdlOmkubWVzc2FnZX0pLG8uZGlydHkoKSk6aS5raW5kPT09Im1pbiI/KGkuaW5jbHVzaXZlP3QuZGF0YTxpLnZhbHVlOnQuZGF0YTw9aS52YWx1ZSkmJihyPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsciksaWUocix7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOmkudmFsdWUsdHlwZToibnVtYmVyIixpbmNsdXNpdmU6aS5pbmNsdXNpdmUsZXhhY3Q6ITEsbWVzc2FnZTppLm1lc3NhZ2V9KSxvLmRpcnR5KCkpOmkua2luZD09PSJtYXgiPyhpLmluY2x1c2l2ZT90LmRhdGE+aS52YWx1ZTp0LmRhdGE+PWkudmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eCh0LHIpLGllKHIse2NvZGU6Vy50b29fYmlnLG1heGltdW06aS52YWx1ZSx0eXBlOiJudW1iZXIiLGluY2x1c2l2ZTppLmluY2x1c2l2ZSxleGFjdDohMSxtZXNzYWdlOmkubWVzc2FnZX0pLG8uZGlydHkoKSk6aS5raW5kPT09Im11bHRpcGxlT2YiP0Q2KHQuZGF0YSxpLnZhbHVlKSE9PTAmJihyPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsciksaWUocix7Y29kZTpXLm5vdF9tdWx0aXBsZV9vZixtdWx0aXBsZU9mOmkudmFsdWUsbWVzc2FnZTppLm1lc3NhZ2V9KSxvLmRpcnR5KCkpOmkua2luZD09PSJmaW5pdGUiP051bWJlci5pc0Zpbml0ZSh0LmRhdGEpfHwocj10aGlzLl9nZXRPclJldHVybkN0eCh0LHIpLGllKHIse2NvZGU6Vy5ub3RfZmluaXRlLG1lc3NhZ2U6aS5tZXNzYWdlfSksby5kaXJ0eSgpKTpaZS5hc3NlcnROZXZlcihpKTtyZXR1cm57c3RhdHVzOm8udmFsdWUsdmFsdWU6dC5kYXRhfX1ndGUodCxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWluIix0LCEwLHllLnRvU3RyaW5nKG4pKX1ndCh0LG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtaW4iLHQsITEseWUudG9TdHJpbmcobikpfWx0ZSh0LG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtYXgiLHQsITAseWUudG9TdHJpbmcobikpfWx0KHQsbil7cmV0dXJuIHRoaXMuc2V0TGltaXQoIm1heCIsdCwhMSx5ZS50b1N0cmluZyhuKSl9c2V0TGltaXQodCxuLHIsbyl7cmV0dXJuIG5ldyBHcyh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDp0LHZhbHVlOm4saW5jbHVzaXZlOnIsbWVzc2FnZTp5ZS50b1N0cmluZyhvKX1dfSl9X2FkZENoZWNrKHQpe3JldHVybiBuZXcgR3Moey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3MsdF19KX1pbnQodCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJpbnQiLG1lc3NhZ2U6eWUudG9TdHJpbmcodCl9KX1wb3NpdGl2ZSh0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1pbiIsdmFsdWU6MCxpbmNsdXNpdmU6ITEsbWVzc2FnZTp5ZS50b1N0cmluZyh0KX0pfW5lZ2F0aXZlKHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWF4Iix2YWx1ZTowLGluY2x1c2l2ZTohMSxtZXNzYWdlOnllLnRvU3RyaW5nKHQpfSl9bm9ucG9zaXRpdmUodCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtYXgiLHZhbHVlOjAsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6eWUudG9TdHJpbmcodCl9KX1ub25uZWdhdGl2ZSh0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1pbiIsdmFsdWU6MCxpbmNsdXNpdmU6ITAsbWVzc2FnZTp5ZS50b1N0cmluZyh0KX0pfW11bHRpcGxlT2YodCxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im11bHRpcGxlT2YiLHZhbHVlOnQsbWVzc2FnZTp5ZS50b1N0cmluZyhuKX0pfWZpbml0ZSh0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImZpbml0ZSIsbWVzc2FnZTp5ZS50b1N0cmluZyh0KX0pfXNhZmUodCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLGluY2x1c2l2ZTohMCx2YWx1ZTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixtZXNzYWdlOnllLnRvU3RyaW5nKHQpfSkuX2FkZENoZWNrKHtraW5kOiJtYXgiLGluY2x1c2l2ZTohMCx2YWx1ZTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixtZXNzYWdlOnllLnRvU3RyaW5nKHQpfSl9Z2V0IG1pblZhbHVlKCl7bGV0IHQ9bnVsbDtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKW4ua2luZD09PSJtaW4iJiYodD09PW51bGx8fG4udmFsdWU+dCkmJih0PW4udmFsdWUpO3JldHVybiB0fWdldCBtYXhWYWx1ZSgpe2xldCB0PW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWF4IiYmKHQ9PT1udWxsfHxuLnZhbHVlPHQpJiYodD1uLnZhbHVlKTtyZXR1cm4gdH1nZXQgaXNJbnQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZCh0PT50LmtpbmQ9PT0iaW50Inx8dC5raW5kPT09Im11bHRpcGxlT2YiJiZaZS5pc0ludGVnZXIodC52YWx1ZSkpfWdldCBpc0Zpbml0ZSgpe2xldCB0PW51bGwsbj1udWxsO2Zvcihjb25zdCByIG9mIHRoaXMuX2RlZi5jaGVja3Mpe2lmKHIua2luZD09PSJmaW5pdGUifHxyLmtpbmQ9PT0iaW50Inx8ci5raW5kPT09Im11bHRpcGxlT2YiKXJldHVybiEwO3Iua2luZD09PSJtaW4iPyhuPT09bnVsbHx8ci52YWx1ZT5uKSYmKG49ci52YWx1ZSk6ci5raW5kPT09Im1heCImJih0PT09bnVsbHx8ci52YWx1ZTx0KSYmKHQ9ci52YWx1ZSl9cmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSYmTnVtYmVyLmlzRmluaXRlKHQpfX1Hcy5jcmVhdGU9ZT0+bmV3IEdzKHtjaGVja3M6W10sdHlwZU5hbWU6U2UuWm9kTnVtYmVyLGNvZXJjZTooZT09bnVsbD92b2lkIDA6ZS5jb2VyY2UpfHwhMSwuLi5NZShlKX0pO2NsYXNzIFlzIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWluPXRoaXMuZ3RlLHRoaXMubWF4PXRoaXMubHRlfV9wYXJzZSh0KXtpZih0aGlzLl9kZWYuY29lcmNlJiYodC5kYXRhPUJpZ0ludCh0LmRhdGEpKSx0aGlzLl9nZXRUeXBlKHQpIT09b2UuYmlnaW50KXtjb25zdCBpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQpO3JldHVybiBpZShpLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLmJpZ2ludCxyZWNlaXZlZDppLnBhcnNlZFR5cGV9KSxPZX1sZXQgcjtjb25zdCBvPW5ldyBMbjtmb3IoY29uc3QgaSBvZiB0aGlzLl9kZWYuY2hlY2tzKWkua2luZD09PSJtaW4iPyhpLmluY2x1c2l2ZT90LmRhdGE8aS52YWx1ZTp0LmRhdGE8PWkudmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eCh0LHIpLGllKHIse2NvZGU6Vy50b29fc21hbGwsdHlwZToiYmlnaW50IixtaW5pbXVtOmkudmFsdWUsaW5jbHVzaXZlOmkuaW5jbHVzaXZlLG1lc3NhZ2U6aS5tZXNzYWdlfSksby5kaXJ0eSgpKTppLmtpbmQ9PT0ibWF4Ij8oaS5pbmNsdXNpdmU/dC5kYXRhPmkudmFsdWU6dC5kYXRhPj1pLnZhbHVlKSYmKHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCxyKSxpZShyLHtjb2RlOlcudG9vX2JpZyx0eXBlOiJiaWdpbnQiLG1heGltdW06aS52YWx1ZSxpbmNsdXNpdmU6aS5pbmNsdXNpdmUsbWVzc2FnZTppLm1lc3NhZ2V9KSxvLmRpcnR5KCkpOmkua2luZD09PSJtdWx0aXBsZU9mIj90LmRhdGElaS52YWx1ZSE9PUJpZ0ludCgwKSYmKHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCxyKSxpZShyLHtjb2RlOlcubm90X211bHRpcGxlX29mLG11bHRpcGxlT2Y6aS52YWx1ZSxtZXNzYWdlOmkubWVzc2FnZX0pLG8uZGlydHkoKSk6WmUuYXNzZXJ0TmV2ZXIoaSk7cmV0dXJue3N0YXR1czpvLnZhbHVlLHZhbHVlOnQuZGF0YX19Z3RlKHQsbil7cmV0dXJuIHRoaXMuc2V0TGltaXQoIm1pbiIsdCwhMCx5ZS50b1N0cmluZyhuKSl9Z3QodCxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWluIix0LCExLHllLnRvU3RyaW5nKG4pKX1sdGUodCxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWF4Iix0LCEwLHllLnRvU3RyaW5nKG4pKX1sdCh0LG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtYXgiLHQsITEseWUudG9TdHJpbmcobikpfXNldExpbWl0KHQsbixyLG8pe3JldHVybiBuZXcgWXMoey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3Mse2tpbmQ6dCx2YWx1ZTpuLGluY2x1c2l2ZTpyLG1lc3NhZ2U6eWUudG9TdHJpbmcobyl9XX0pfV9hZGRDaGVjayh0KXtyZXR1cm4gbmV3IFlzKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLHRdfSl9cG9zaXRpdmUodCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITEsbWVzc2FnZTp5ZS50b1N0cmluZyh0KX0pfW5lZ2F0aXZlKHQpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWF4Iix2YWx1ZTpCaWdJbnQoMCksaW5jbHVzaXZlOiExLG1lc3NhZ2U6eWUudG9TdHJpbmcodCl9KX1ub25wb3NpdGl2ZSh0KXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1heCIsdmFsdWU6QmlnSW50KDApLGluY2x1c2l2ZTohMCxtZXNzYWdlOnllLnRvU3RyaW5nKHQpfSl9bm9ubmVnYXRpdmUodCl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITAsbWVzc2FnZTp5ZS50b1N0cmluZyh0KX0pfW11bHRpcGxlT2YodCxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im11bHRpcGxlT2YiLHZhbHVlOnQsbWVzc2FnZTp5ZS50b1N0cmluZyhuKX0pfWdldCBtaW5WYWx1ZSgpe2xldCB0PW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWluIiYmKHQ9PT1udWxsfHxuLnZhbHVlPnQpJiYodD1uLnZhbHVlKTtyZXR1cm4gdH1nZXQgbWF4VmFsdWUoKXtsZXQgdD1udWxsO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi5jaGVja3Mpbi5raW5kPT09Im1heCImJih0PT09bnVsbHx8bi52YWx1ZTx0KSYmKHQ9bi52YWx1ZSk7cmV0dXJuIHR9fVlzLmNyZWF0ZT1lPT57dmFyIHQ7cmV0dXJuIG5ldyBZcyh7Y2hlY2tzOltdLHR5cGVOYW1lOlNlLlpvZEJpZ0ludCxjb2VyY2U6KHQ9ZT09bnVsbD92b2lkIDA6ZS5jb2VyY2UpIT09bnVsbCYmdCE9PXZvaWQgMD90OiExLC4uLk1lKGUpfSl9O2NsYXNzIHNmIGV4dGVuZHMgSWV7X3BhcnNlKHQpe2lmKHRoaXMuX2RlZi5jb2VyY2UmJih0LmRhdGE9ISF0LmRhdGEpLHRoaXMuX2dldFR5cGUodCkhPT1vZS5ib29sZWFuKXtjb25zdCByPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQpO3JldHVybiBpZShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLmJvb2xlYW4scmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksT2V9cmV0dXJuIEduKHQuZGF0YSl9fXNmLmNyZWF0ZT1lPT5uZXcgc2Yoe3R5cGVOYW1lOlNlLlpvZEJvb2xlYW4sY29lcmNlOihlPT1udWxsP3ZvaWQgMDplLmNvZXJjZSl8fCExLC4uLk1lKGUpfSk7Y2xhc3MgZWwgZXh0ZW5kcyBJZXtfcGFyc2UodCl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKHQuZGF0YT1uZXcgRGF0ZSh0LmRhdGEpKSx0aGlzLl9nZXRUeXBlKHQpIT09b2UuZGF0ZSl7Y29uc3QgaT10aGlzLl9nZXRPclJldHVybkN0eCh0KTtyZXR1cm4gaWUoaSx7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpvZS5kYXRlLHJlY2VpdmVkOmkucGFyc2VkVHlwZX0pLE9lfWlmKGlzTmFOKHQuZGF0YS5nZXRUaW1lKCkpKXtjb25zdCBpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQpO3JldHVybiBpZShpLHtjb2RlOlcuaW52YWxpZF9kYXRlfSksT2V9Y29uc3Qgcj1uZXcgTG47bGV0IG87Zm9yKGNvbnN0IGkgb2YgdGhpcy5fZGVmLmNoZWNrcylpLmtpbmQ9PT0ibWluIj90LmRhdGEuZ2V0VGltZSgpPGkudmFsdWUmJihvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7Y29kZTpXLnRvb19zbWFsbCxtZXNzYWdlOmkubWVzc2FnZSxpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWluaW11bTppLnZhbHVlLHR5cGU6ImRhdGUifSksci5kaXJ0eSgpKTppLmtpbmQ9PT0ibWF4Ij90LmRhdGEuZ2V0VGltZSgpPmkudmFsdWUmJihvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQsbyksaWUobyx7Y29kZTpXLnRvb19iaWcsbWVzc2FnZTppLm1lc3NhZ2UsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1heGltdW06aS52YWx1ZSx0eXBlOiJkYXRlIn0pLHIuZGlydHkoKSk6WmUuYXNzZXJ0TmV2ZXIoaSk7cmV0dXJue3N0YXR1czpyLnZhbHVlLHZhbHVlOm5ldyBEYXRlKHQuZGF0YS5nZXRUaW1lKCkpfX1fYWRkQ2hlY2sodCl7cmV0dXJuIG5ldyBlbCh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx0XX0pfW1pbih0LG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWluIix2YWx1ZTp0LmdldFRpbWUoKSxtZXNzYWdlOnllLnRvU3RyaW5nKG4pfSl9bWF4KHQsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtYXgiLHZhbHVlOnQuZ2V0VGltZSgpLG1lc3NhZ2U6eWUudG9TdHJpbmcobil9KX1nZXQgbWluRGF0ZSgpe2xldCB0PW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWluIiYmKHQ9PT1udWxsfHxuLnZhbHVlPnQpJiYodD1uLnZhbHVlKTtyZXR1cm4gdCE9bnVsbD9uZXcgRGF0ZSh0KTpudWxsfWdldCBtYXhEYXRlKCl7bGV0IHQ9bnVsbDtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKW4ua2luZD09PSJtYXgiJiYodD09PW51bGx8fG4udmFsdWU8dCkmJih0PW4udmFsdWUpO3JldHVybiB0IT1udWxsP25ldyBEYXRlKHQpOm51bGx9fWVsLmNyZWF0ZT1lPT5uZXcgZWwoe2NoZWNrczpbXSxjb2VyY2U6KGU9PW51bGw/dm9pZCAwOmUuY29lcmNlKXx8ITEsdHlwZU5hbWU6U2UuWm9kRGF0ZSwuLi5NZShlKX0pO2NsYXNzIGRtIGV4dGVuZHMgSWV7X3BhcnNlKHQpe2lmKHRoaXMuX2dldFR5cGUodCkhPT1vZS5zeW1ib2wpe2NvbnN0IHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCk7cmV0dXJuIGllKHIse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6b2Uuc3ltYm9sLHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLE9lfXJldHVybiBHbih0LmRhdGEpfX1kbS5jcmVhdGU9ZT0+bmV3IGRtKHt0eXBlTmFtZTpTZS5ab2RTeW1ib2wsLi4uTWUoZSl9KTtjbGFzcyBhZiBleHRlbmRzIElle19wYXJzZSh0KXtpZih0aGlzLl9nZXRUeXBlKHQpIT09b2UudW5kZWZpbmVkKXtjb25zdCByPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQpO3JldHVybiBpZShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLnVuZGVmaW5lZCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSxPZX1yZXR1cm4gR24odC5kYXRhKX19YWYuY3JlYXRlPWU9Pm5ldyBhZih7dHlwZU5hbWU6U2UuWm9kVW5kZWZpbmVkLC4uLk1lKGUpfSk7Y2xhc3MgbGYgZXh0ZW5kcyBJZXtfcGFyc2UodCl7aWYodGhpcy5fZ2V0VHlwZSh0KSE9PW9lLm51bGwpe2NvbnN0IHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCk7cmV0dXJuIGllKHIse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6b2UubnVsbCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSxPZX1yZXR1cm4gR24odC5kYXRhKX19bGYuY3JlYXRlPWU9Pm5ldyBsZih7dHlwZU5hbWU6U2UuWm9kTnVsbCwuLi5NZShlKX0pO2NsYXNzIEZjIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2FueT0hMH1fcGFyc2UodCl7cmV0dXJuIEduKHQuZGF0YSl9fUZjLmNyZWF0ZT1lPT5uZXcgRmMoe3R5cGVOYW1lOlNlLlpvZEFueSwuLi5NZShlKX0pO2NsYXNzIEJhIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Vua25vd249ITB9X3BhcnNlKHQpe3JldHVybiBHbih0LmRhdGEpfX1CYS5jcmVhdGU9ZT0+bmV3IEJhKHt0eXBlTmFtZTpTZS5ab2RVbmtub3duLC4uLk1lKGUpfSk7Y2xhc3MgRGkgZXh0ZW5kcyBJZXtfcGFyc2UodCl7Y29uc3Qgbj10aGlzLl9nZXRPclJldHVybkN0eCh0KTtyZXR1cm4gaWUobix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpvZS5uZXZlcixyZWNlaXZlZDpuLnBhcnNlZFR5cGV9KSxPZX19RGkuY3JlYXRlPWU9Pm5ldyBEaSh7dHlwZU5hbWU6U2UuWm9kTmV2ZXIsLi4uTWUoZSl9KTtjbGFzcyBmbSBleHRlbmRzIElle19wYXJzZSh0KXtpZih0aGlzLl9nZXRUeXBlKHQpIT09b2UudW5kZWZpbmVkKXtjb25zdCByPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQpO3JldHVybiBpZShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLnZvaWQscmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksT2V9cmV0dXJuIEduKHQuZGF0YSl9fWZtLmNyZWF0ZT1lPT5uZXcgZm0oe3R5cGVOYW1lOlNlLlpvZFZvaWQsLi4uTWUoZSl9KTtjbGFzcyBUbyBleHRlbmRzIElle19wYXJzZSh0KXtjb25zdHtjdHg6bixzdGF0dXM6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKHQpLG89dGhpcy5fZGVmO2lmKG4ucGFyc2VkVHlwZSE9PW9lLmFycmF5KXJldHVybiBpZShuLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLmFycmF5LHJlY2VpdmVkOm4ucGFyc2VkVHlwZX0pLE9lO2lmKG8uZXhhY3RMZW5ndGghPT1udWxsKXtjb25zdCBzPW4uZGF0YS5sZW5ndGg+by5leGFjdExlbmd0aC52YWx1ZSxhPW4uZGF0YS5sZW5ndGg8by5leGFjdExlbmd0aC52YWx1ZTsoc3x8YSkmJihpZShuLHtjb2RlOnM/Vy50b29fYmlnOlcudG9vX3NtYWxsLG1pbmltdW06YT9vLmV4YWN0TGVuZ3RoLnZhbHVlOnZvaWQgMCxtYXhpbXVtOnM/by5leGFjdExlbmd0aC52YWx1ZTp2b2lkIDAsdHlwZToiYXJyYXkiLGluY2x1c2l2ZTohMCxleGFjdDohMCxtZXNzYWdlOm8uZXhhY3RMZW5ndGgubWVzc2FnZX0pLHIuZGlydHkoKSl9aWYoby5taW5MZW5ndGghPT1udWxsJiZuLmRhdGEubGVuZ3RoPG8ubWluTGVuZ3RoLnZhbHVlJiYoaWUobix7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOm8ubWluTGVuZ3RoLnZhbHVlLHR5cGU6ImFycmF5IixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTpvLm1pbkxlbmd0aC5tZXNzYWdlfSksci5kaXJ0eSgpKSxvLm1heExlbmd0aCE9PW51bGwmJm4uZGF0YS5sZW5ndGg+by5tYXhMZW5ndGgudmFsdWUmJihpZShuLHtjb2RlOlcudG9vX2JpZyxtYXhpbXVtOm8ubWF4TGVuZ3RoLnZhbHVlLHR5cGU6ImFycmF5IixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTpvLm1heExlbmd0aC5tZXNzYWdlfSksci5kaXJ0eSgpKSxuLmNvbW1vbi5hc3luYylyZXR1cm4gUHJvbWlzZS5hbGwoWy4uLm4uZGF0YV0ubWFwKChzLGEpPT5vLnR5cGUuX3BhcnNlQXN5bmMobmV3IFpvKG4scyxuLnBhdGgsYSkpKSkudGhlbihzPT5Mbi5tZXJnZUFycmF5KHIscykpO2NvbnN0IGk9Wy4uLm4uZGF0YV0ubWFwKChzLGEpPT5vLnR5cGUuX3BhcnNlU3luYyhuZXcgWm8obixzLG4ucGF0aCxhKSkpO3JldHVybiBMbi5tZXJnZUFycmF5KHIsaSl9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZGVmLnR5cGV9bWluKHQsbil7cmV0dXJuIG5ldyBUbyh7Li4udGhpcy5fZGVmLG1pbkxlbmd0aDp7dmFsdWU6dCxtZXNzYWdlOnllLnRvU3RyaW5nKG4pfX0pfW1heCh0LG4pe3JldHVybiBuZXcgVG8oey4uLnRoaXMuX2RlZixtYXhMZW5ndGg6e3ZhbHVlOnQsbWVzc2FnZTp5ZS50b1N0cmluZyhuKX19KX1sZW5ndGgodCxuKXtyZXR1cm4gbmV3IFRvKHsuLi50aGlzLl9kZWYsZXhhY3RMZW5ndGg6e3ZhbHVlOnQsbWVzc2FnZTp5ZS50b1N0cmluZyhuKX19KX1ub25lbXB0eSh0KXtyZXR1cm4gdGhpcy5taW4oMSx0KX19VG8uY3JlYXRlPShlLHQpPT5uZXcgVG8oe3R5cGU6ZSxtaW5MZW5ndGg6bnVsbCxtYXhMZW5ndGg6bnVsbCxleGFjdExlbmd0aDpudWxsLHR5cGVOYW1lOlNlLlpvZEFycmF5LC4uLk1lKHQpfSk7ZnVuY3Rpb24gSGwoZSl7aWYoZSBpbnN0YW5jZW9mIE90KXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIGluIGUuc2hhcGUpe2NvbnN0IHI9ZS5zaGFwZVtuXTt0W25dPVRpLmNyZWF0ZShIbChyKSl9cmV0dXJuIG5ldyBPdCh7Li4uZS5fZGVmLHNoYXBlOigpPT50fSl9ZWxzZSByZXR1cm4gZSBpbnN0YW5jZW9mIFRvP25ldyBUbyh7Li4uZS5fZGVmLHR5cGU6SGwoZS5lbGVtZW50KX0pOmUgaW5zdGFuY2VvZiBUaT9UaS5jcmVhdGUoSGwoZS51bndyYXAoKSkpOmUgaW5zdGFuY2VvZiBubD9ubC5jcmVhdGUoSGwoZS51bndyYXAoKSkpOmUgaW5zdGFuY2VvZiBKbz9Kby5jcmVhdGUoZS5pdGVtcy5tYXAodD0+SGwodCkpKTplfWNsYXNzIE90IGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2NhY2hlZD1udWxsLHRoaXMubm9uc3RyaWN0PXRoaXMucGFzc3Rocm91Z2gsdGhpcy5hdWdtZW50PXRoaXMuZXh0ZW5kfV9nZXRDYWNoZWQoKXtpZih0aGlzLl9jYWNoZWQhPT1udWxsKXJldHVybiB0aGlzLl9jYWNoZWQ7Y29uc3QgdD10aGlzLl9kZWYuc2hhcGUoKSxuPVplLm9iamVjdEtleXModCk7cmV0dXJuIHRoaXMuX2NhY2hlZD17c2hhcGU6dCxrZXlzOm59fV9wYXJzZSh0KXtpZih0aGlzLl9nZXRUeXBlKHQpIT09b2Uub2JqZWN0KXtjb25zdCBjPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQpO3JldHVybiBpZShjLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLm9iamVjdCxyZWNlaXZlZDpjLnBhcnNlZFR5cGV9KSxPZX1jb25zdHtzdGF0dXM6cixjdHg6b309dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKHQpLHtzaGFwZTppLGtleXM6c309dGhpcy5fZ2V0Q2FjaGVkKCksYT1bXTtpZighKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIERpJiZ0aGlzLl9kZWYudW5rbm93bktleXM9PT0ic3RyaXAiKSlmb3IoY29uc3QgYyBpbiBvLmRhdGEpcy5pbmNsdWRlcyhjKXx8YS5wdXNoKGMpO2NvbnN0IGw9W107Zm9yKGNvbnN0IGMgb2Ygcyl7Y29uc3QgdT1pW2NdLGQ9by5kYXRhW2NdO2wucHVzaCh7a2V5OntzdGF0dXM6InZhbGlkIix2YWx1ZTpjfSx2YWx1ZTp1Ll9wYXJzZShuZXcgWm8obyxkLG8ucGF0aCxjKSksYWx3YXlzU2V0OmMgaW4gby5kYXRhfSl9aWYodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgRGkpe2NvbnN0IGM9dGhpcy5fZGVmLnVua25vd25LZXlzO2lmKGM9PT0icGFzc3Rocm91Z2giKWZvcihjb25zdCB1IG9mIGEpbC5wdXNoKHtrZXk6e3N0YXR1czoidmFsaWQiLHZhbHVlOnV9LHZhbHVlOntzdGF0dXM6InZhbGlkIix2YWx1ZTpvLmRhdGFbdV19fSk7ZWxzZSBpZihjPT09InN0cmljdCIpYS5sZW5ndGg+MCYmKGllKG8se2NvZGU6Vy51bnJlY29nbml6ZWRfa2V5cyxrZXlzOmF9KSxyLmRpcnR5KCkpO2Vsc2UgaWYoYyE9PSJzdHJpcCIpdGhyb3cgbmV3IEVycm9yKCJJbnRlcm5hbCBab2RPYmplY3QgZXJyb3I6IGludmFsaWQgdW5rbm93bktleXMgdmFsdWUuIil9ZWxzZXtjb25zdCBjPXRoaXMuX2RlZi5jYXRjaGFsbDtmb3IoY29uc3QgdSBvZiBhKXtjb25zdCBkPW8uZGF0YVt1XTtsLnB1c2goe2tleTp7c3RhdHVzOiJ2YWxpZCIsdmFsdWU6dX0sdmFsdWU6Yy5fcGFyc2UobmV3IFpvKG8sZCxvLnBhdGgsdSkpLGFsd2F5c1NldDp1IGluIG8uZGF0YX0pfX1yZXR1cm4gby5jb21tb24uYXN5bmM/UHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYygpPT57Y29uc3QgYz1bXTtmb3IoY29uc3QgdSBvZiBsKXtjb25zdCBkPWF3YWl0IHUua2V5O2MucHVzaCh7a2V5OmQsdmFsdWU6YXdhaXQgdS52YWx1ZSxhbHdheXNTZXQ6dS5hbHdheXNTZXR9KX1yZXR1cm4gY30pLnRoZW4oYz0+TG4ubWVyZ2VPYmplY3RTeW5jKHIsYykpOkxuLm1lcmdlT2JqZWN0U3luYyhyLGwpfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9kZWYuc2hhcGUoKX1zdHJpY3QodCl7cmV0dXJuIHllLmVyclRvT2JqLG5ldyBPdCh7Li4udGhpcy5fZGVmLHVua25vd25LZXlzOiJzdHJpY3QiLC4uLnQhPT12b2lkIDA/e2Vycm9yTWFwOihuLHIpPT57dmFyIG8saSxzLGE7Y29uc3QgbD0ocz0oaT0obz10aGlzLl9kZWYpLmVycm9yTWFwKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuY2FsbChvLG4scikubWVzc2FnZSkhPT1udWxsJiZzIT09dm9pZCAwP3M6ci5kZWZhdWx0RXJyb3I7cmV0dXJuIG4uY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyI/e21lc3NhZ2U6KGE9eWUuZXJyVG9PYmoodCkubWVzc2FnZSkhPT1udWxsJiZhIT09dm9pZCAwP2E6bH06e21lc3NhZ2U6bH19fTp7fX0pfXN0cmlwKCl7cmV0dXJuIG5ldyBPdCh7Li4udGhpcy5fZGVmLHVua25vd25LZXlzOiJzdHJpcCJ9KX1wYXNzdGhyb3VnaCgpe3JldHVybiBuZXcgT3Qoey4uLnRoaXMuX2RlZix1bmtub3duS2V5czoicGFzc3Rocm91Z2gifSl9ZXh0ZW5kKHQpe3JldHVybiBuZXcgT3Qoey4uLnRoaXMuX2RlZixzaGFwZTooKT0+KHsuLi50aGlzLl9kZWYuc2hhcGUoKSwuLi50fSl9KX1tZXJnZSh0KXtyZXR1cm4gbmV3IE90KHt1bmtub3duS2V5czp0Ll9kZWYudW5rbm93bktleXMsY2F0Y2hhbGw6dC5fZGVmLmNhdGNoYWxsLHNoYXBlOigpPT4oey4uLnRoaXMuX2RlZi5zaGFwZSgpLC4uLnQuX2RlZi5zaGFwZSgpfSksdHlwZU5hbWU6U2UuWm9kT2JqZWN0fSl9c2V0S2V5KHQsbil7cmV0dXJuIHRoaXMuYXVnbWVudCh7W3RdOm59KX1jYXRjaGFsbCh0KXtyZXR1cm4gbmV3IE90KHsuLi50aGlzLl9kZWYsY2F0Y2hhbGw6dH0pfXBpY2sodCl7Y29uc3Qgbj17fTtyZXR1cm4gWmUub2JqZWN0S2V5cyh0KS5mb3JFYWNoKHI9Pnt0W3JdJiZ0aGlzLnNoYXBlW3JdJiYobltyXT10aGlzLnNoYXBlW3JdKX0pLG5ldyBPdCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9b21pdCh0KXtjb25zdCBuPXt9O3JldHVybiBaZS5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2gocj0+e3Rbcl18fChuW3JdPXRoaXMuc2hhcGVbcl0pfSksbmV3IE90KHsuLi50aGlzLl9kZWYsc2hhcGU6KCk9Pm59KX1kZWVwUGFydGlhbCgpe3JldHVybiBIbCh0aGlzKX1wYXJ0aWFsKHQpe2NvbnN0IG49e307cmV0dXJuIFplLm9iamVjdEtleXModGhpcy5zaGFwZSkuZm9yRWFjaChyPT57Y29uc3Qgbz10aGlzLnNoYXBlW3JdO3QmJiF0W3JdP25bcl09bzpuW3JdPW8ub3B0aW9uYWwoKX0pLG5ldyBPdCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9cmVxdWlyZWQodCl7Y29uc3Qgbj17fTtyZXR1cm4gWmUub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKHI9PntpZih0JiYhdFtyXSluW3JdPXRoaXMuc2hhcGVbcl07ZWxzZXtsZXQgaT10aGlzLnNoYXBlW3JdO2Zvcig7aSBpbnN0YW5jZW9mIFRpOylpPWkuX2RlZi5pbm5lclR5cGU7bltyXT1pfX0pLG5ldyBPdCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9a2V5b2YoKXtyZXR1cm4gQlAoWmUub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSl9fU90LmNyZWF0ZT0oZSx0KT0+bmV3IE90KHtzaGFwZTooKT0+ZSx1bmtub3duS2V5czoic3RyaXAiLGNhdGNoYWxsOkRpLmNyZWF0ZSgpLHR5cGVOYW1lOlNlLlpvZE9iamVjdCwuLi5NZSh0KX0pO090LnN0cmljdENyZWF0ZT0oZSx0KT0+bmV3IE90KHtzaGFwZTooKT0+ZSx1bmtub3duS2V5czoic3RyaWN0IixjYXRjaGFsbDpEaS5jcmVhdGUoKSx0eXBlTmFtZTpTZS5ab2RPYmplY3QsLi4uTWUodCl9KTtPdC5sYXp5Y3JlYXRlPShlLHQpPT5uZXcgT3Qoe3NoYXBlOmUsdW5rbm93bktleXM6InN0cmlwIixjYXRjaGFsbDpEaS5jcmVhdGUoKSx0eXBlTmFtZTpTZS5ab2RPYmplY3QsLi4uTWUodCl9KTtjbGFzcyBjZiBleHRlbmRzIElle19wYXJzZSh0KXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKHQpLHI9dGhpcy5fZGVmLm9wdGlvbnM7ZnVuY3Rpb24gbyhpKXtmb3IoY29uc3QgYSBvZiBpKWlmKGEucmVzdWx0LnN0YXR1cz09PSJ2YWxpZCIpcmV0dXJuIGEucmVzdWx0O2Zvcihjb25zdCBhIG9mIGkpaWYoYS5yZXN1bHQuc3RhdHVzPT09ImRpcnR5IilyZXR1cm4gbi5jb21tb24uaXNzdWVzLnB1c2goLi4uYS5jdHguY29tbW9uLmlzc3VlcyksYS5yZXN1bHQ7Y29uc3Qgcz1pLm1hcChhPT5uZXcgT28oYS5jdHguY29tbW9uLmlzc3VlcykpO3JldHVybiBpZShuLHtjb2RlOlcuaW52YWxpZF91bmlvbix1bmlvbkVycm9yczpzfSksT2V9aWYobi5jb21tb24uYXN5bmMpcmV0dXJuIFByb21pc2UuYWxsKHIubWFwKGFzeW5jIGk9Pntjb25zdCBzPXsuLi5uLGNvbW1vbjp7Li4ubi5jb21tb24saXNzdWVzOltdfSxwYXJlbnQ6bnVsbH07cmV0dXJue3Jlc3VsdDphd2FpdCBpLl9wYXJzZUFzeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6c30pLGN0eDpzfX0pKS50aGVuKG8pO3tsZXQgaTtjb25zdCBzPVtdO2Zvcihjb25zdCBsIG9mIHIpe2NvbnN0IGM9ey4uLm4sY29tbW9uOnsuLi5uLmNvbW1vbixpc3N1ZXM6W119LHBhcmVudDpudWxsfSx1PWwuX3BhcnNlU3luYyh7ZGF0YTpuLmRhdGEscGF0aDpuLnBhdGgscGFyZW50OmN9KTtpZih1LnN0YXR1cz09PSJ2YWxpZCIpcmV0dXJuIHU7dS5zdGF0dXM9PT0iZGlydHkiJiYhaSYmKGk9e3Jlc3VsdDp1LGN0eDpjfSksYy5jb21tb24uaXNzdWVzLmxlbmd0aCYmcy5wdXNoKGMuY29tbW9uLmlzc3Vlcyl9aWYoaSlyZXR1cm4gbi5jb21tb24uaXNzdWVzLnB1c2goLi4uaS5jdHguY29tbW9uLmlzc3VlcyksaS5yZXN1bHQ7Y29uc3QgYT1zLm1hcChsPT5uZXcgT28obCkpO3JldHVybiBpZShuLHtjb2RlOlcuaW52YWxpZF91bmlvbix1bmlvbkVycm9yczphfSksT2V9fWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zfX1jZi5jcmVhdGU9KGUsdCk9Pm5ldyBjZih7b3B0aW9uczplLHR5cGVOYW1lOlNlLlpvZFVuaW9uLC4uLk1lKHQpfSk7Y29uc3QgZ2g9ZT0+ZSBpbnN0YW5jZW9mIGZmP2doKGUuc2NoZW1hKTplIGluc3RhbmNlb2YgTm8/Z2goZS5pbm5lclR5cGUoKSk6ZSBpbnN0YW5jZW9mIHBmP1tlLnZhbHVlXTplIGluc3RhbmNlb2YgWHM/ZS5vcHRpb25zOmUgaW5zdGFuY2VvZiBoZj9PYmplY3Qua2V5cyhlLmVudW0pOmUgaW5zdGFuY2VvZiBtZj9naChlLl9kZWYuaW5uZXJUeXBlKTplIGluc3RhbmNlb2YgYWY/W3ZvaWQgMF06ZSBpbnN0YW5jZW9mIGxmP1tudWxsXTpudWxsO2NsYXNzIExnIGV4dGVuZHMgSWV7X3BhcnNlKHQpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCk7aWYobi5wYXJzZWRUeXBlIT09b2Uub2JqZWN0KXJldHVybiBpZShuLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLm9iamVjdCxyZWNlaXZlZDpuLnBhcnNlZFR5cGV9KSxPZTtjb25zdCByPXRoaXMuZGlzY3JpbWluYXRvcixvPW4uZGF0YVtyXSxpPXRoaXMub3B0aW9uc01hcC5nZXQobyk7cmV0dXJuIGk/bi5jb21tb24uYXN5bmM/aS5fcGFyc2VBc3luYyh7ZGF0YTpuLmRhdGEscGF0aDpuLnBhdGgscGFyZW50Om59KTppLl9wYXJzZVN5bmMoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpufSk6KGllKG4se2NvZGU6Vy5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKHRoaXMub3B0aW9uc01hcC5rZXlzKCkpLHBhdGg6W3JdfSksT2UpfWdldCBkaXNjcmltaW5hdG9yKCl7cmV0dXJuIHRoaXMuX2RlZi5kaXNjcmltaW5hdG9yfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zfWdldCBvcHRpb25zTWFwKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zTWFwfXN0YXRpYyBjcmVhdGUodCxuLHIpe2NvbnN0IG89bmV3IE1hcDtmb3IoY29uc3QgaSBvZiBuKXtjb25zdCBzPWdoKGkuc2hhcGVbdF0pO2lmKCFzKXRocm93IG5ldyBFcnJvcihgQSBkaXNjcmltaW5hdG9yIHZhbHVlIGZvciBrZXkgXGAke3R9XGAgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGFsbCBzY2hlbWEgb3B0aW9uc2ApO2Zvcihjb25zdCBhIG9mIHMpe2lmKG8uaGFzKGEpKXRocm93IG5ldyBFcnJvcihgRGlzY3JpbWluYXRvciBwcm9wZXJ0eSAke1N0cmluZyh0KX0gaGFzIGR1cGxpY2F0ZSB2YWx1ZSAke1N0cmluZyhhKX1gKTtvLnNldChhLGkpfX1yZXR1cm4gbmV3IExnKHt0eXBlTmFtZTpTZS5ab2REaXNjcmltaW5hdGVkVW5pb24sZGlzY3JpbWluYXRvcjp0LG9wdGlvbnM6bixvcHRpb25zTWFwOm8sLi4uTWUocil9KX19ZnVuY3Rpb24gcHgoZSx0KXtjb25zdCBuPWtzKGUpLHI9a3ModCk7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYobj09PW9lLm9iamVjdCYmcj09PW9lLm9iamVjdCl7Y29uc3Qgbz1aZS5vYmplY3RLZXlzKHQpLGk9WmUub2JqZWN0S2V5cyhlKS5maWx0ZXIoYT0+by5pbmRleE9mKGEpIT09LTEpLHM9ey4uLmUsLi4udH07Zm9yKGNvbnN0IGEgb2YgaSl7Y29uc3QgbD1weChlW2FdLHRbYV0pO2lmKCFsLnZhbGlkKXJldHVybnt2YWxpZDohMX07c1thXT1sLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6c319ZWxzZSBpZihuPT09b2UuYXJyYXkmJnI9PT1vZS5hcnJheSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITF9O2NvbnN0IG89W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IHM9ZVtpXSxhPXRbaV0sbD1weChzLGEpO2lmKCFsLnZhbGlkKXJldHVybnt2YWxpZDohMX07by5wdXNoKGwuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6b319ZWxzZSByZXR1cm4gbj09PW9lLmRhdGUmJnI9PT1vZS5kYXRlJiYrZT09K3Q/e3ZhbGlkOiEwLGRhdGE6ZX06e3ZhbGlkOiExfX1jbGFzcyB1ZiBleHRlbmRzIElle19wYXJzZSh0KXtjb25zdHtzdGF0dXM6bixjdHg6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKHQpLG89KGkscyk9PntpZihkeChpKXx8ZHgocykpcmV0dXJuIE9lO2NvbnN0IGE9cHgoaS52YWx1ZSxzLnZhbHVlKTtyZXR1cm4gYS52YWxpZD8oKGZ4KGkpfHxmeChzKSkmJm4uZGlydHkoKSx7c3RhdHVzOm4udmFsdWUsdmFsdWU6YS5kYXRhfSk6KGllKHIse2NvZGU6Vy5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlc30pLE9lKX07cmV0dXJuIHIuY29tbW9uLmFzeW5jP1Byb21pc2UuYWxsKFt0aGlzLl9kZWYubGVmdC5fcGFyc2VBc3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KSx0aGlzLl9kZWYucmlnaHQuX3BhcnNlQXN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSldKS50aGVuKChbaSxzXSk9Pm8oaSxzKSk6byh0aGlzLl9kZWYubGVmdC5fcGFyc2VTeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pLHRoaXMuX2RlZi5yaWdodC5fcGFyc2VTeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pKX19dWYuY3JlYXRlPShlLHQsbik9Pm5ldyB1Zih7bGVmdDplLHJpZ2h0OnQsdHlwZU5hbWU6U2UuWm9kSW50ZXJzZWN0aW9uLC4uLk1lKG4pfSk7Y2xhc3MgSm8gZXh0ZW5kcyBJZXtfcGFyc2UodCl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyh0KTtpZihyLnBhcnNlZFR5cGUhPT1vZS5hcnJheSlyZXR1cm4gaWUocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpvZS5hcnJheSxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSxPZTtpZihyLmRhdGEubGVuZ3RoPHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpcmV0dXJuIGllKHIse2NvZGU6Vy50b29fc21hbGwsbWluaW11bTp0aGlzLl9kZWYuaXRlbXMubGVuZ3RoLGluY2x1c2l2ZTohMCxleGFjdDohMSx0eXBlOiJhcnJheSJ9KSxPZTshdGhpcy5fZGVmLnJlc3QmJnIuZGF0YS5sZW5ndGg+dGhpcy5fZGVmLml0ZW1zLmxlbmd0aCYmKGllKHIse2NvZGU6Vy50b29fYmlnLG1heGltdW06dGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsdHlwZToiYXJyYXkifSksbi5kaXJ0eSgpKTtjb25zdCBpPVsuLi5yLmRhdGFdLm1hcCgocyxhKT0+e2NvbnN0IGw9dGhpcy5fZGVmLml0ZW1zW2FdfHx0aGlzLl9kZWYucmVzdDtyZXR1cm4gbD9sLl9wYXJzZShuZXcgWm8ocixzLHIucGF0aCxhKSk6bnVsbH0pLmZpbHRlcihzPT4hIXMpO3JldHVybiByLmNvbW1vbi5hc3luYz9Qcm9taXNlLmFsbChpKS50aGVuKHM9PkxuLm1lcmdlQXJyYXkobixzKSk6TG4ubWVyZ2VBcnJheShuLGkpfWdldCBpdGVtcygpe3JldHVybiB0aGlzLl9kZWYuaXRlbXN9cmVzdCh0KXtyZXR1cm4gbmV3IEpvKHsuLi50aGlzLl9kZWYscmVzdDp0fSl9fUpvLmNyZWF0ZT0oZSx0KT0+e2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcigiWW91IG11c3QgcGFzcyBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHoudHVwbGUoWyAuLi4gXSkiKTtyZXR1cm4gbmV3IEpvKHtpdGVtczplLHR5cGVOYW1lOlNlLlpvZFR1cGxlLHJlc3Q6bnVsbCwuLi5NZSh0KX0pfTtjbGFzcyBkZiBleHRlbmRzIElle2dldCBrZXlTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLmtleVR5cGV9Z2V0IHZhbHVlU2NoZW1hKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGV9X3BhcnNlKHQpe2NvbnN0e3N0YXR1czpuLGN0eDpyfT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCk7aWYoci5wYXJzZWRUeXBlIT09b2Uub2JqZWN0KXJldHVybiBpZShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOm9lLm9iamVjdCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSxPZTtjb25zdCBvPVtdLGk9dGhpcy5fZGVmLmtleVR5cGUscz10aGlzLl9kZWYudmFsdWVUeXBlO2Zvcihjb25zdCBhIGluIHIuZGF0YSlvLnB1c2goe2tleTppLl9wYXJzZShuZXcgWm8ocixhLHIucGF0aCxhKSksdmFsdWU6cy5fcGFyc2UobmV3IFpvKHIsci5kYXRhW2FdLHIucGF0aCxhKSl9KTtyZXR1cm4gci5jb21tb24uYXN5bmM/TG4ubWVyZ2VPYmplY3RBc3luYyhuLG8pOkxuLm1lcmdlT2JqZWN0U3luYyhuLG8pfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGV9c3RhdGljIGNyZWF0ZSh0LG4scil7cmV0dXJuIG4gaW5zdGFuY2VvZiBJZT9uZXcgZGYoe2tleVR5cGU6dCx2YWx1ZVR5cGU6bix0eXBlTmFtZTpTZS5ab2RSZWNvcmQsLi4uTWUocil9KTpuZXcgZGYoe2tleVR5cGU6U28uY3JlYXRlKCksdmFsdWVUeXBlOnQsdHlwZU5hbWU6U2UuWm9kUmVjb3JkLC4uLk1lKG4pfSl9fWNsYXNzIHBtIGV4dGVuZHMgSWV7Z2V0IGtleVNjaGVtYSgpe3JldHVybiB0aGlzLl9kZWYua2V5VHlwZX1nZXQgdmFsdWVTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZX1fcGFyc2UodCl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyh0KTtpZihyLnBhcnNlZFR5cGUhPT1vZS5tYXApcmV0dXJuIGllKHIse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6b2UubWFwLHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLE9lO2NvbnN0IG89dGhpcy5fZGVmLmtleVR5cGUsaT10aGlzLl9kZWYudmFsdWVUeXBlLHM9Wy4uLnIuZGF0YS5lbnRyaWVzKCldLm1hcCgoW2EsbF0sYyk9Pih7a2V5Om8uX3BhcnNlKG5ldyBabyhyLGEsci5wYXRoLFtjLCJrZXkiXSkpLHZhbHVlOmkuX3BhcnNlKG5ldyBabyhyLGwsci5wYXRoLFtjLCJ2YWx1ZSJdKSl9KSk7aWYoci5jb21tb24uYXN5bmMpe2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYygpPT57Zm9yKGNvbnN0IGwgb2Ygcyl7Y29uc3QgYz1hd2FpdCBsLmtleSx1PWF3YWl0IGwudmFsdWU7aWYoYy5zdGF0dXM9PT0iYWJvcnRlZCJ8fHUuc3RhdHVzPT09ImFib3J0ZWQiKXJldHVybiBPZTsoYy5zdGF0dXM9PT0iZGlydHkifHx1LnN0YXR1cz09PSJkaXJ0eSIpJiZuLmRpcnR5KCksYS5zZXQoYy52YWx1ZSx1LnZhbHVlKX1yZXR1cm57c3RhdHVzOm4udmFsdWUsdmFsdWU6YX19KX1lbHNle2NvbnN0IGE9bmV3IE1hcDtmb3IoY29uc3QgbCBvZiBzKXtjb25zdCBjPWwua2V5LHU9bC52YWx1ZTtpZihjLnN0YXR1cz09PSJhYm9ydGVkInx8dS5zdGF0dXM9PT0iYWJvcnRlZCIpcmV0dXJuIE9lOyhjLnN0YXR1cz09PSJkaXJ0eSJ8fHUuc3RhdHVzPT09ImRpcnR5IikmJm4uZGlydHkoKSxhLnNldChjLnZhbHVlLHUudmFsdWUpfXJldHVybntzdGF0dXM6bi52YWx1ZSx2YWx1ZTphfX19fXBtLmNyZWF0ZT0oZSx0LG4pPT5uZXcgcG0oe3ZhbHVlVHlwZTp0LGtleVR5cGU6ZSx0eXBlTmFtZTpTZS5ab2RNYXAsLi4uTWUobil9KTtjbGFzcyB0bCBleHRlbmRzIElle19wYXJzZSh0KXtjb25zdHtzdGF0dXM6bixjdHg6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKHQpO2lmKHIucGFyc2VkVHlwZSE9PW9lLnNldClyZXR1cm4gaWUocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpvZS5zZXQscmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksT2U7Y29uc3Qgbz10aGlzLl9kZWY7by5taW5TaXplIT09bnVsbCYmci5kYXRhLnNpemU8by5taW5TaXplLnZhbHVlJiYoaWUocix7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOm8ubWluU2l6ZS52YWx1ZSx0eXBlOiJzZXQiLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOm8ubWluU2l6ZS5tZXNzYWdlfSksbi5kaXJ0eSgpKSxvLm1heFNpemUhPT1udWxsJiZyLmRhdGEuc2l6ZT5vLm1heFNpemUudmFsdWUmJihpZShyLHtjb2RlOlcudG9vX2JpZyxtYXhpbXVtOm8ubWF4U2l6ZS52YWx1ZSx0eXBlOiJzZXQiLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOm8ubWF4U2l6ZS5tZXNzYWdlfSksbi5kaXJ0eSgpKTtjb25zdCBpPXRoaXMuX2RlZi52YWx1ZVR5cGU7ZnVuY3Rpb24gcyhsKXtjb25zdCBjPW5ldyBTZXQ7Zm9yKGNvbnN0IHUgb2YgbCl7aWYodS5zdGF0dXM9PT0iYWJvcnRlZCIpcmV0dXJuIE9lO3Uuc3RhdHVzPT09ImRpcnR5IiYmbi5kaXJ0eSgpLGMuYWRkKHUudmFsdWUpfXJldHVybntzdGF0dXM6bi52YWx1ZSx2YWx1ZTpjfX1jb25zdCBhPVsuLi5yLmRhdGEudmFsdWVzKCldLm1hcCgobCxjKT0+aS5fcGFyc2UobmV3IFpvKHIsbCxyLnBhdGgsYykpKTtyZXR1cm4gci5jb21tb24uYXN5bmM/UHJvbWlzZS5hbGwoYSkudGhlbihsPT5zKGwpKTpzKGEpfW1pbih0LG4pe3JldHVybiBuZXcgdGwoey4uLnRoaXMuX2RlZixtaW5TaXplOnt2YWx1ZTp0LG1lc3NhZ2U6eWUudG9TdHJpbmcobil9fSl9bWF4KHQsbil7cmV0dXJuIG5ldyB0bCh7Li4udGhpcy5fZGVmLG1heFNpemU6e3ZhbHVlOnQsbWVzc2FnZTp5ZS50b1N0cmluZyhuKX19KX1zaXplKHQsbil7cmV0dXJuIHRoaXMubWluKHQsbikubWF4KHQsbil9bm9uZW1wdHkodCl7cmV0dXJuIHRoaXMubWluKDEsdCl9fXRsLmNyZWF0ZT0oZSx0KT0+bmV3IHRsKHt2YWx1ZVR5cGU6ZSxtaW5TaXplOm51bGwsbWF4U2l6ZTpudWxsLHR5cGVOYW1lOlNlLlpvZFNldCwuLi5NZSh0KX0pO2NsYXNzIEVjIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmFsaWRhdGU9dGhpcy5pbXBsZW1lbnR9X3BhcnNlKHQpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCk7aWYobi5wYXJzZWRUeXBlIT09b2UuZnVuY3Rpb24pcmV0dXJuIGllKG4se2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6b2UuZnVuY3Rpb24scmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksT2U7ZnVuY3Rpb24gcihhLGwpe3JldHVybiBjbSh7ZGF0YTphLHBhdGg6bi5wYXRoLGVycm9yTWFwczpbbi5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLG4uc2NoZW1hRXJyb3JNYXAsbG0oKSxyZl0uZmlsdGVyKGM9PiEhYyksaXNzdWVEYXRhOntjb2RlOlcuaW52YWxpZF9hcmd1bWVudHMsYXJndW1lbnRzRXJyb3I6bH19KX1mdW5jdGlvbiBvKGEsbCl7cmV0dXJuIGNtKHtkYXRhOmEscGF0aDpuLnBhdGgsZXJyb3JNYXBzOltuLmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsbi5zY2hlbWFFcnJvck1hcCxsbSgpLHJmXS5maWx0ZXIoYz0+ISFjKSxpc3N1ZURhdGE6e2NvZGU6Vy5pbnZhbGlkX3JldHVybl90eXBlLHJldHVyblR5cGVFcnJvcjpsfX0pfWNvbnN0IGk9e2Vycm9yTWFwOm4uY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcH0scz1uLmRhdGE7aWYodGhpcy5fZGVmLnJldHVybnMgaW5zdGFuY2VvZiBCYyl7Y29uc3QgYT10aGlzO3JldHVybiBHbihhc3luYyBmdW5jdGlvbiguLi5sKXtjb25zdCBjPW5ldyBPbyhbXSksdT1hd2FpdCBhLl9kZWYuYXJncy5wYXJzZUFzeW5jKGwsaSkuY2F0Y2gocD0+e3Rocm93IGMuYWRkSXNzdWUocihsLHApKSxjfSksZD1hd2FpdCBSZWZsZWN0LmFwcGx5KHMsdGhpcyx1KTtyZXR1cm4gYXdhaXQgYS5fZGVmLnJldHVybnMuX2RlZi50eXBlLnBhcnNlQXN5bmMoZCxpKS5jYXRjaChwPT57dGhyb3cgYy5hZGRJc3N1ZShvKGQscCkpLGN9KX0pfWVsc2V7Y29uc3QgYT10aGlzO3JldHVybiBHbihmdW5jdGlvbiguLi5sKXtjb25zdCBjPWEuX2RlZi5hcmdzLnNhZmVQYXJzZShsLGkpO2lmKCFjLnN1Y2Nlc3MpdGhyb3cgbmV3IE9vKFtyKGwsYy5lcnJvcildKTtjb25zdCB1PVJlZmxlY3QuYXBwbHkocyx0aGlzLGMuZGF0YSksZD1hLl9kZWYucmV0dXJucy5zYWZlUGFyc2UodSxpKTtpZighZC5zdWNjZXNzKXRocm93IG5ldyBPbyhbbyh1LGQuZXJyb3IpXSk7cmV0dXJuIGQuZGF0YX0pfX1wYXJhbWV0ZXJzKCl7cmV0dXJuIHRoaXMuX2RlZi5hcmdzfXJldHVyblR5cGUoKXtyZXR1cm4gdGhpcy5fZGVmLnJldHVybnN9YXJncyguLi50KXtyZXR1cm4gbmV3IEVjKHsuLi50aGlzLl9kZWYsYXJnczpKby5jcmVhdGUodCkucmVzdChCYS5jcmVhdGUoKSl9KX1yZXR1cm5zKHQpe3JldHVybiBuZXcgRWMoey4uLnRoaXMuX2RlZixyZXR1cm5zOnR9KX1pbXBsZW1lbnQodCl7cmV0dXJuIHRoaXMucGFyc2UodCl9c3RyaWN0SW1wbGVtZW50KHQpe3JldHVybiB0aGlzLnBhcnNlKHQpfXN0YXRpYyBjcmVhdGUodCxuLHIpe3JldHVybiBuZXcgRWMoe2FyZ3M6dHx8Sm8uY3JlYXRlKFtdKS5yZXN0KEJhLmNyZWF0ZSgpKSxyZXR1cm5zOm58fEJhLmNyZWF0ZSgpLHR5cGVOYW1lOlNlLlpvZEZ1bmN0aW9uLC4uLk1lKHIpfSl9fWNsYXNzIGZmIGV4dGVuZHMgSWV7Z2V0IHNjaGVtYSgpe3JldHVybiB0aGlzLl9kZWYuZ2V0dGVyKCl9X3BhcnNlKHQpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCk7cmV0dXJuIHRoaXMuX2RlZi5nZXR0ZXIoKS5fcGFyc2Uoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpufSl9fWZmLmNyZWF0ZT0oZSx0KT0+bmV3IGZmKHtnZXR0ZXI6ZSx0eXBlTmFtZTpTZS5ab2RMYXp5LC4uLk1lKHQpfSk7Y2xhc3MgcGYgZXh0ZW5kcyBJZXtfcGFyc2UodCl7aWYodC5kYXRhIT09dGhpcy5fZGVmLnZhbHVlKXtjb25zdCBuPXRoaXMuX2dldE9yUmV0dXJuQ3R4KHQpO3JldHVybiBpZShuLHtyZWNlaXZlZDpuLmRhdGEsY29kZTpXLmludmFsaWRfbGl0ZXJhbCxleHBlY3RlZDp0aGlzLl9kZWYudmFsdWV9KSxPZX1yZXR1cm57c3RhdHVzOiJ2YWxpZCIsdmFsdWU6dC5kYXRhfX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlfX1wZi5jcmVhdGU9KGUsdCk9Pm5ldyBwZih7dmFsdWU6ZSx0eXBlTmFtZTpTZS5ab2RMaXRlcmFsLC4uLk1lKHQpfSk7ZnVuY3Rpb24gQlAoZSx0KXtyZXR1cm4gbmV3IFhzKHt2YWx1ZXM6ZSx0eXBlTmFtZTpTZS5ab2RFbnVtLC4uLk1lKHQpfSl9Y2xhc3MgWHMgZXh0ZW5kcyBJZXtfcGFyc2UodCl7aWYodHlwZW9mIHQuZGF0YSE9InN0cmluZyIpe2NvbnN0IG49dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCkscj10aGlzLl9kZWYudmFsdWVzO3JldHVybiBpZShuLHtleHBlY3RlZDpaZS5qb2luVmFsdWVzKHIpLHJlY2VpdmVkOm4ucGFyc2VkVHlwZSxjb2RlOlcuaW52YWxpZF90eXBlfSksT2V9aWYodGhpcy5fZGVmLnZhbHVlcy5pbmRleE9mKHQuZGF0YSk9PT0tMSl7Y29uc3Qgbj10aGlzLl9nZXRPclJldHVybkN0eCh0KSxyPXRoaXMuX2RlZi52YWx1ZXM7cmV0dXJuIGllKG4se3JlY2VpdmVkOm4uZGF0YSxjb2RlOlcuaW52YWxpZF9lbnVtX3ZhbHVlLG9wdGlvbnM6cn0pLE9lfXJldHVybiBHbih0LmRhdGEpfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZXN9Z2V0IGVudW0oKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi52YWx1ZXMpdFtuXT1uO3JldHVybiB0fWdldCBWYWx1ZXMoKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi52YWx1ZXMpdFtuXT1uO3JldHVybiB0fWdldCBFbnVtKCl7Y29uc3QgdD17fTtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYudmFsdWVzKXRbbl09bjtyZXR1cm4gdH1leHRyYWN0KHQpe3JldHVybiBYcy5jcmVhdGUodCl9ZXhjbHVkZSh0KXtyZXR1cm4gWHMuY3JlYXRlKHRoaXMub3B0aW9ucy5maWx0ZXIobj0+IXQuaW5jbHVkZXMobikpKX19WHMuY3JlYXRlPUJQO2NsYXNzIGhmIGV4dGVuZHMgSWV7X3BhcnNlKHQpe2NvbnN0IG49WmUuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpLHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgodCk7aWYoci5wYXJzZWRUeXBlIT09b2Uuc3RyaW5nJiZyLnBhcnNlZFR5cGUhPT1vZS5udW1iZXIpe2NvbnN0IG89WmUub2JqZWN0VmFsdWVzKG4pO3JldHVybiBpZShyLHtleHBlY3RlZDpaZS5qb2luVmFsdWVzKG8pLHJlY2VpdmVkOnIucGFyc2VkVHlwZSxjb2RlOlcuaW52YWxpZF90eXBlfSksT2V9aWYobi5pbmRleE9mKHQuZGF0YSk9PT0tMSl7Y29uc3Qgbz1aZS5vYmplY3RWYWx1ZXMobik7cmV0dXJuIGllKHIse3JlY2VpdmVkOnIuZGF0YSxjb2RlOlcuaW52YWxpZF9lbnVtX3ZhbHVlLG9wdGlvbnM6b30pLE9lfXJldHVybiBHbih0LmRhdGEpfWdldCBlbnVtKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZXN9fWhmLmNyZWF0ZT0oZSx0KT0+bmV3IGhmKHt2YWx1ZXM6ZSx0eXBlTmFtZTpTZS5ab2ROYXRpdmVFbnVtLC4uLk1lKHQpfSk7Y2xhc3MgQmMgZXh0ZW5kcyBJZXt1bndyYXAoKXtyZXR1cm4gdGhpcy5fZGVmLnR5cGV9X3BhcnNlKHQpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCk7aWYobi5wYXJzZWRUeXBlIT09b2UucHJvbWlzZSYmbi5jb21tb24uYXN5bmM9PT0hMSlyZXR1cm4gaWUobix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpvZS5wcm9taXNlLHJlY2VpdmVkOm4ucGFyc2VkVHlwZX0pLE9lO2NvbnN0IHI9bi5wYXJzZWRUeXBlPT09b2UucHJvbWlzZT9uLmRhdGE6UHJvbWlzZS5yZXNvbHZlKG4uZGF0YSk7cmV0dXJuIEduKHIudGhlbihvPT50aGlzLl9kZWYudHlwZS5wYXJzZUFzeW5jKG8se3BhdGg6bi5wYXRoLGVycm9yTWFwOm4uY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcH0pKSl9fUJjLmNyZWF0ZT0oZSx0KT0+bmV3IEJjKHt0eXBlOmUsdHlwZU5hbWU6U2UuWm9kUHJvbWlzZSwuLi5NZSh0KX0pO2NsYXNzIE5vIGV4dGVuZHMgSWV7aW5uZXJUeXBlKCl7cmV0dXJuIHRoaXMuX2RlZi5zY2hlbWF9c291cmNlVHlwZSgpe3JldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9kZWYudHlwZU5hbWU9PT1TZS5ab2RFZmZlY3RzP3RoaXMuX2RlZi5zY2hlbWEuc291cmNlVHlwZSgpOnRoaXMuX2RlZi5zY2hlbWF9X3BhcnNlKHQpe2NvbnN0e3N0YXR1czpuLGN0eDpyfT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCksbz10aGlzLl9kZWYuZWZmZWN0fHxudWxsLGk9e2FkZElzc3VlOnM9PntpZShyLHMpLHMuZmF0YWw/bi5hYm9ydCgpOm4uZGlydHkoKX0sZ2V0IHBhdGgoKXtyZXR1cm4gci5wYXRofX07aWYoaS5hZGRJc3N1ZT1pLmFkZElzc3VlLmJpbmQoaSksby50eXBlPT09InByZXByb2Nlc3MiKXtjb25zdCBzPW8udHJhbnNmb3JtKHIuZGF0YSxpKTtyZXR1cm4gci5jb21tb24uaXNzdWVzLmxlbmd0aD97c3RhdHVzOiJkaXJ0eSIsdmFsdWU6ci5kYXRhfTpyLmNvbW1vbi5hc3luYz9Qcm9taXNlLnJlc29sdmUocykudGhlbihhPT50aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtkYXRhOmEscGF0aDpyLnBhdGgscGFyZW50OnJ9KSk6dGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtkYXRhOnMscGF0aDpyLnBhdGgscGFyZW50OnJ9KX1pZihvLnR5cGU9PT0icmVmaW5lbWVudCIpe2NvbnN0IHM9YT0+e2NvbnN0IGw9by5yZWZpbmVtZW50KGEsaSk7aWYoci5jb21tb24uYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShsKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHJlZmluZW1lbnQgZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuIik7cmV0dXJuIGF9O2lmKHIuY29tbW9uLmFzeW5jPT09ITEpe2NvbnN0IGE9dGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pO3JldHVybiBhLnN0YXR1cz09PSJhYm9ydGVkIj9PZTooYS5zdGF0dXM9PT0iZGlydHkiJiZuLmRpcnR5KCkscyhhLnZhbHVlKSx7c3RhdHVzOm4udmFsdWUsdmFsdWU6YS52YWx1ZX0pfWVsc2UgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlQXN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSkudGhlbihhPT5hLnN0YXR1cz09PSJhYm9ydGVkIj9PZTooYS5zdGF0dXM9PT0iZGlydHkiJiZuLmRpcnR5KCkscyhhLnZhbHVlKS50aGVuKCgpPT4oe3N0YXR1czpuLnZhbHVlLHZhbHVlOmEudmFsdWV9KSkpKX1pZihvLnR5cGU9PT0idHJhbnNmb3JtIilpZihyLmNvbW1vbi5hc3luYz09PSExKXtjb25zdCBzPXRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KTtpZighb2YocykpcmV0dXJuIHM7Y29uc3QgYT1vLnRyYW5zZm9ybShzLnZhbHVlLGkpO2lmKGEgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmNocm9ub3VzIHRyYW5zZm9ybSBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC4iKTtyZXR1cm57c3RhdHVzOm4udmFsdWUsdmFsdWU6YX19ZWxzZSByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KS50aGVuKHM9Pm9mKHMpP1Byb21pc2UucmVzb2x2ZShvLnRyYW5zZm9ybShzLnZhbHVlLGkpKS50aGVuKGE9Pih7c3RhdHVzOm4udmFsdWUsdmFsdWU6YX0pKTpzKTtaZS5hc3NlcnROZXZlcihvKX19Tm8uY3JlYXRlPShlLHQsbik9Pm5ldyBObyh7c2NoZW1hOmUsdHlwZU5hbWU6U2UuWm9kRWZmZWN0cyxlZmZlY3Q6dCwuLi5NZShuKX0pO05vLmNyZWF0ZVdpdGhQcmVwcm9jZXNzPShlLHQsbik9Pm5ldyBObyh7c2NoZW1hOnQsZWZmZWN0Ont0eXBlOiJwcmVwcm9jZXNzIix0cmFuc2Zvcm06ZX0sdHlwZU5hbWU6U2UuWm9kRWZmZWN0cywuLi5NZShuKX0pO2NsYXNzIFRpIGV4dGVuZHMgSWV7X3BhcnNlKHQpe3JldHVybiB0aGlzLl9nZXRUeXBlKHQpPT09b2UudW5kZWZpbmVkP0duKHZvaWQgMCk6dGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UodCl9dW53cmFwKCl7cmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGV9fVRpLmNyZWF0ZT0oZSx0KT0+bmV3IFRpKHtpbm5lclR5cGU6ZSx0eXBlTmFtZTpTZS5ab2RPcHRpb25hbCwuLi5NZSh0KX0pO2NsYXNzIG5sIGV4dGVuZHMgSWV7X3BhcnNlKHQpe3JldHVybiB0aGlzLl9nZXRUeXBlKHQpPT09b2UubnVsbD9HbihudWxsKTp0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh0KX11bndyYXAoKXtyZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZX19bmwuY3JlYXRlPShlLHQpPT5uZXcgbmwoe2lubmVyVHlwZTplLHR5cGVOYW1lOlNlLlpvZE51bGxhYmxlLC4uLk1lKHQpfSk7Y2xhc3MgbWYgZXh0ZW5kcyBJZXtfcGFyc2UodCl7Y29uc3R7Y3R4Om59PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyh0KTtsZXQgcj1uLmRhdGE7cmV0dXJuIG4ucGFyc2VkVHlwZT09PW9lLnVuZGVmaW5lZCYmKHI9dGhpcy5fZGVmLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7ZGF0YTpyLHBhdGg6bi5wYXRoLHBhcmVudDpufSl9cmVtb3ZlRGVmYXVsdCgpe3JldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlfX1tZi5jcmVhdGU9KGUsdCk9Pm5ldyBtZih7aW5uZXJUeXBlOmUsdHlwZU5hbWU6U2UuWm9kRGVmYXVsdCxkZWZhdWx0VmFsdWU6dHlwZW9mIHQuZGVmYXVsdD09ImZ1bmN0aW9uIj90LmRlZmF1bHQ6KCk9PnQuZGVmYXVsdCwuLi5NZSh0KX0pO2NsYXNzIGhtIGV4dGVuZHMgSWV7X3BhcnNlKHQpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCkscj17Li4ubixjb21tb246ey4uLm4uY29tbW9uLGlzc3VlczpbXX19LG89dGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2Uoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDp7Li4ucn19KTtyZXR1cm4gdW0obyk/by50aGVuKGk9Pih7c3RhdHVzOiJ2YWxpZCIsdmFsdWU6aS5zdGF0dXM9PT0idmFsaWQiP2kudmFsdWU6dGhpcy5fZGVmLmNhdGNoVmFsdWUoe2dldCBlcnJvcigpe3JldHVybiBuZXcgT28oci5jb21tb24uaXNzdWVzKX0saW5wdXQ6ci5kYXRhfSl9KSk6e3N0YXR1czoidmFsaWQiLHZhbHVlOm8uc3RhdHVzPT09InZhbGlkIj9vLnZhbHVlOnRoaXMuX2RlZi5jYXRjaFZhbHVlKHtnZXQgZXJyb3IoKXtyZXR1cm4gbmV3IE9vKHIuY29tbW9uLmlzc3Vlcyl9LGlucHV0OnIuZGF0YX0pfX1yZW1vdmVDYXRjaCgpe3JldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlfX1obS5jcmVhdGU9KGUsdCk9Pm5ldyBobSh7aW5uZXJUeXBlOmUsdHlwZU5hbWU6U2UuWm9kQ2F0Y2gsY2F0Y2hWYWx1ZTp0eXBlb2YgdC5jYXRjaD09ImZ1bmN0aW9uIj90LmNhdGNoOigpPT50LmNhdGNoLC4uLk1lKHQpfSk7Y2xhc3MgbW0gZXh0ZW5kcyBJZXtfcGFyc2UodCl7aWYodGhpcy5fZ2V0VHlwZSh0KSE9PW9lLm5hbil7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eCh0KTtyZXR1cm4gaWUocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpvZS5uYW4scmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksT2V9cmV0dXJue3N0YXR1czoidmFsaWQiLHZhbHVlOnQuZGF0YX19fW1tLmNyZWF0ZT1lPT5uZXcgbW0oe3R5cGVOYW1lOlNlLlpvZE5hTiwuLi5NZShlKX0pO2NvbnN0IEk2PVN5bWJvbCgiem9kX2JyYW5kIik7Y2xhc3MgVVAgZXh0ZW5kcyBJZXtfcGFyc2UodCl7Y29uc3R7Y3R4Om59PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyh0KSxyPW4uZGF0YTtyZXR1cm4gdGhpcy5fZGVmLnR5cGUuX3BhcnNlKHtkYXRhOnIscGF0aDpuLnBhdGgscGFyZW50Om59KX11bndyYXAoKXtyZXR1cm4gdGhpcy5fZGVmLnR5cGV9fWNsYXNzIHRwIGV4dGVuZHMgSWV7X3BhcnNlKHQpe2NvbnN0e3N0YXR1czpuLGN0eDpyfT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXModCk7aWYoci5jb21tb24uYXN5bmMpcmV0dXJuKGFzeW5jKCk9Pntjb25zdCBpPWF3YWl0IHRoaXMuX2RlZi5pbi5fcGFyc2VBc3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KTtyZXR1cm4gaS5zdGF0dXM9PT0iYWJvcnRlZCI/T2U6aS5zdGF0dXM9PT0iZGlydHkiPyhuLmRpcnR5KCksRlAoaS52YWx1ZSkpOnRoaXMuX2RlZi5vdXQuX3BhcnNlQXN5bmMoe2RhdGE6aS52YWx1ZSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pfSkoKTt7Y29uc3Qgbz10aGlzLl9kZWYuaW4uX3BhcnNlU3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KTtyZXR1cm4gby5zdGF0dXM9PT0iYWJvcnRlZCI/T2U6by5zdGF0dXM9PT0iZGlydHkiPyhuLmRpcnR5KCkse3N0YXR1czoiZGlydHkiLHZhbHVlOm8udmFsdWV9KTp0aGlzLl9kZWYub3V0Ll9wYXJzZVN5bmMoe2RhdGE6by52YWx1ZSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pfX1zdGF0aWMgY3JlYXRlKHQsbil7cmV0dXJuIG5ldyB0cCh7aW46dCxvdXQ6bix0eXBlTmFtZTpTZS5ab2RQaXBlbGluZX0pfX1jbGFzcyBnbSBleHRlbmRzIElle19wYXJzZSh0KXtjb25zdCBuPXRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHQpO3JldHVybiBvZihuKSYmKG4udmFsdWU9T2JqZWN0LmZyZWV6ZShuLnZhbHVlKSksbn19Z20uY3JlYXRlPShlLHQpPT5uZXcgZ20oe2lubmVyVHlwZTplLHR5cGVOYW1lOlNlLlpvZFJlYWRvbmx5LC4uLk1lKHQpfSk7Y29uc3QgVlA9KGUsdD17fSxuKT0+ZT9GYy5jcmVhdGUoKS5zdXBlclJlZmluZSgocixvKT0+e3ZhciBpLHM7aWYoIWUocikpe2NvbnN0IGE9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChyKTp0eXBlb2YgdD09InN0cmluZyI/e21lc3NhZ2U6dH06dCxsPShzPShpPWEuZmF0YWwpIT09bnVsbCYmaSE9PXZvaWQgMD9pOm4pIT09bnVsbCYmcyE9PXZvaWQgMD9zOiEwLGM9dHlwZW9mIGE9PSJzdHJpbmciP3ttZXNzYWdlOmF9OmE7by5hZGRJc3N1ZSh7Y29kZToiY3VzdG9tIiwuLi5jLGZhdGFsOmx9KX19KTpGYy5jcmVhdGUoKSxMNj17b2JqZWN0Ok90LmxhenljcmVhdGV9O3ZhciBTZTsoZnVuY3Rpb24oZSl7ZS5ab2RTdHJpbmc9IlpvZFN0cmluZyIsZS5ab2ROdW1iZXI9IlpvZE51bWJlciIsZS5ab2ROYU49IlpvZE5hTiIsZS5ab2RCaWdJbnQ9IlpvZEJpZ0ludCIsZS5ab2RCb29sZWFuPSJab2RCb29sZWFuIixlLlpvZERhdGU9IlpvZERhdGUiLGUuWm9kU3ltYm9sPSJab2RTeW1ib2wiLGUuWm9kVW5kZWZpbmVkPSJab2RVbmRlZmluZWQiLGUuWm9kTnVsbD0iWm9kTnVsbCIsZS5ab2RBbnk9IlpvZEFueSIsZS5ab2RVbmtub3duPSJab2RVbmtub3duIixlLlpvZE5ldmVyPSJab2ROZXZlciIsZS5ab2RWb2lkPSJab2RWb2lkIixlLlpvZEFycmF5PSJab2RBcnJheSIsZS5ab2RPYmplY3Q9IlpvZE9iamVjdCIsZS5ab2RVbmlvbj0iWm9kVW5pb24iLGUuWm9kRGlzY3JpbWluYXRlZFVuaW9uPSJab2REaXNjcmltaW5hdGVkVW5pb24iLGUuWm9kSW50ZXJzZWN0aW9uPSJab2RJbnRlcnNlY3Rpb24iLGUuWm9kVHVwbGU9IlpvZFR1cGxlIixlLlpvZFJlY29yZD0iWm9kUmVjb3JkIixlLlpvZE1hcD0iWm9kTWFwIixlLlpvZFNldD0iWm9kU2V0IixlLlpvZEZ1bmN0aW9uPSJab2RGdW5jdGlvbiIsZS5ab2RMYXp5PSJab2RMYXp5IixlLlpvZExpdGVyYWw9IlpvZExpdGVyYWwiLGUuWm9kRW51bT0iWm9kRW51bSIsZS5ab2RFZmZlY3RzPSJab2RFZmZlY3RzIixlLlpvZE5hdGl2ZUVudW09IlpvZE5hdGl2ZUVudW0iLGUuWm9kT3B0aW9uYWw9IlpvZE9wdGlvbmFsIixlLlpvZE51bGxhYmxlPSJab2ROdWxsYWJsZSIsZS5ab2REZWZhdWx0PSJab2REZWZhdWx0IixlLlpvZENhdGNoPSJab2RDYXRjaCIsZS5ab2RQcm9taXNlPSJab2RQcm9taXNlIixlLlpvZEJyYW5kZWQ9IlpvZEJyYW5kZWQiLGUuWm9kUGlwZWxpbmU9IlpvZFBpcGVsaW5lIixlLlpvZFJlYWRvbmx5PSJab2RSZWFkb25seSJ9KShTZXx8KFNlPXt9KSk7Y29uc3QgajY9KGUsdD17bWVzc2FnZTpgSW5wdXQgbm90IGluc3RhbmNlIG9mICR7ZS5uYW1lfWB9KT0+VlAobj0+biBpbnN0YW5jZW9mIGUsdCksSFA9U28uY3JlYXRlLFdQPUdzLmNyZWF0ZSx6Nj1tbS5jcmVhdGUsRjY9WXMuY3JlYXRlLEtQPXNmLmNyZWF0ZSxCNj1lbC5jcmVhdGUsVTY9ZG0uY3JlYXRlLFY2PWFmLmNyZWF0ZSxINj1sZi5jcmVhdGUsVzY9RmMuY3JlYXRlLEs2PUJhLmNyZWF0ZSxxNj1EaS5jcmVhdGUsRzY9Zm0uY3JlYXRlLFk2PVRvLmNyZWF0ZSxYNj1PdC5jcmVhdGUsWjY9T3Quc3RyaWN0Q3JlYXRlLEo2PWNmLmNyZWF0ZSxRNj1MZy5jcmVhdGUsZTc9dWYuY3JlYXRlLHQ3PUpvLmNyZWF0ZSxuNz1kZi5jcmVhdGUscjc9cG0uY3JlYXRlLG83PXRsLmNyZWF0ZSxpNz1FYy5jcmVhdGUsczc9ZmYuY3JlYXRlLGE3PXBmLmNyZWF0ZSxsNz1Ycy5jcmVhdGUsYzc9aGYuY3JlYXRlLHU3PUJjLmNyZWF0ZSxnRT1Oby5jcmVhdGUsZDc9VGkuY3JlYXRlLGY3PW5sLmNyZWF0ZSxwNz1Oby5jcmVhdGVXaXRoUHJlcHJvY2VzcyxoNz10cC5jcmVhdGUsbTc9KCk9PkhQKCkub3B0aW9uYWwoKSxnNz0oKT0+V1AoKS5vcHRpb25hbCgpLHY3PSgpPT5LUCgpLm9wdGlvbmFsKCkseTc9e3N0cmluZzplPT5Tby5jcmVhdGUoey4uLmUsY29lcmNlOiEwfSksbnVtYmVyOmU9PkdzLmNyZWF0ZSh7Li4uZSxjb2VyY2U6ITB9KSxib29sZWFuOmU9PnNmLmNyZWF0ZSh7Li4uZSxjb2VyY2U6ITB9KSxiaWdpbnQ6ZT0+WXMuY3JlYXRlKHsuLi5lLGNvZXJjZTohMH0pLGRhdGU6ZT0+ZWwuY3JlYXRlKHsuLi5lLGNvZXJjZTohMH0pfSx4Nz1PZTt2YXIgQj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0RXJyb3JNYXA6cmYsc2V0RXJyb3JNYXA6azYsZ2V0RXJyb3JNYXA6bG0sbWFrZUlzc3VlOmNtLEVNUFRZX1BBVEg6RTYsYWRkSXNzdWVUb0NvbnRleHQ6aWUsUGFyc2VTdGF0dXM6TG4sSU5WQUxJRDpPZSxESVJUWTpGUCxPSzpHbixpc0Fib3J0ZWQ6ZHgsaXNEaXJ0eTpmeCxpc1ZhbGlkOm9mLGlzQXN5bmM6dW0sZ2V0IHV0aWwoKXtyZXR1cm4gWmV9LGdldCBvYmplY3RVdGlsKCl7cmV0dXJuIHV4fSxab2RQYXJzZWRUeXBlOm9lLGdldFBhcnNlZFR5cGU6a3MsWm9kVHlwZTpJZSxab2RTdHJpbmc6U28sWm9kTnVtYmVyOkdzLFpvZEJpZ0ludDpZcyxab2RCb29sZWFuOnNmLFpvZERhdGU6ZWwsWm9kU3ltYm9sOmRtLFpvZFVuZGVmaW5lZDphZixab2ROdWxsOmxmLFpvZEFueTpGYyxab2RVbmtub3duOkJhLFpvZE5ldmVyOkRpLFpvZFZvaWQ6Zm0sWm9kQXJyYXk6VG8sWm9kT2JqZWN0Ok90LFpvZFVuaW9uOmNmLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpMZyxab2RJbnRlcnNlY3Rpb246dWYsWm9kVHVwbGU6Sm8sWm9kUmVjb3JkOmRmLFpvZE1hcDpwbSxab2RTZXQ6dGwsWm9kRnVuY3Rpb246RWMsWm9kTGF6eTpmZixab2RMaXRlcmFsOnBmLFpvZEVudW06WHMsWm9kTmF0aXZlRW51bTpoZixab2RQcm9taXNlOkJjLFpvZEVmZmVjdHM6Tm8sWm9kVHJhbnNmb3JtZXI6Tm8sWm9kT3B0aW9uYWw6VGksWm9kTnVsbGFibGU6bmwsWm9kRGVmYXVsdDptZixab2RDYXRjaDpobSxab2ROYU46bW0sQlJBTkQ6STYsWm9kQnJhbmRlZDpVUCxab2RQaXBlbGluZTp0cCxab2RSZWFkb25seTpnbSxjdXN0b206VlAsU2NoZW1hOkllLFpvZFNjaGVtYTpJZSxsYXRlOkw2LGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gU2V9LGNvZXJjZTp5Nyxhbnk6VzYsYXJyYXk6WTYsYmlnaW50OkY2LGJvb2xlYW46S1AsZGF0ZTpCNixkaXNjcmltaW5hdGVkVW5pb246UTYsZWZmZWN0OmdFLGVudW06bDcsZnVuY3Rpb246aTcsaW5zdGFuY2VvZjpqNixpbnRlcnNlY3Rpb246ZTcsbGF6eTpzNyxsaXRlcmFsOmE3LG1hcDpyNyxuYW46ejYsbmF0aXZlRW51bTpjNyxuZXZlcjpxNixudWxsOkg2LG51bGxhYmxlOmY3LG51bWJlcjpXUCxvYmplY3Q6WDYsb2Jvb2xlYW46djcsb251bWJlcjpnNyxvcHRpb25hbDpkNyxvc3RyaW5nOm03LHBpcGVsaW5lOmg3LHByZXByb2Nlc3M6cDcscHJvbWlzZTp1NyxyZWNvcmQ6bjcsc2V0Om83LHN0cmljdE9iamVjdDpaNixzdHJpbmc6SFAsc3ltYm9sOlU2LHRyYW5zZm9ybWVyOmdFLHR1cGxlOnQ3LHVuZGVmaW5lZDpWNix1bmlvbjpKNix1bmtub3duOks2LHZvaWQ6RzYsTkVWRVI6eDcsWm9kSXNzdWVDb2RlOlcscXVvdGVsZXNzSnNvbjpTNixab2RFcnJvcjpPb30pO2NvbnN0IGI3PUIudW5pb24oW0Iub2JqZWN0KHtpZDpCLnN0cmluZygpLG1vZGU6Qi5saXRlcmFsKCJwcm94eSIpLGZ1bGxfbmFtZTpCLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSx1c2VybmFtZTpCLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxhdmF0YXJfdXJsOkIuc3RyaW5nKCkudXJsKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLGVuYWJsZWQ6Qi5ib29sZWFuKCl9KSxCLm9iamVjdCh7bW9kZTpCLmxpdGVyYWwoImxvY2FsIiksZW5hYmxlZDpCLmJvb2xlYW4oKS5vcHRpb25hbCgpfSksQi5vYmplY3Qoe21vZGU6Qi5saXRlcmFsKCJ1bmF1dGhvcml6ZWQiKSxlbmFibGVkOkIuYm9vbGVhbigpLm9wdGlvbmFsKCl9KV0pO2Z1bmN0aW9uIHFQKGUpe2NvbnN0W3Qsbl09aC51c2VTdGF0ZSh7c3RhdHVzOiJub3QtYXNrZWQifSksW3Isb109aC51c2VTdGF0ZSgwKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntuKHtzdGF0dXM6ImxvYWRpbmcifSksZS5nZXRTZXNzaW9uKCkudGhlbihhc3luYyBpPT57dHJ5e2lmKGJ0LmlzT2soaSkpe2NvbnN0IHM9aS52YWx1ZTtuKHtzdGF0dXM6InN1Y2Nlc3MiLGRhdGE6YjcucGFyc2Uocyl9KX1lbHNlIGkuZXJyb3Iuc3RhdHVzQ29kZT09PTQwMT8oY29uc29sZS5lcnJvcigiVW5hdXRob3JpemVkIixpLmVycm9yKSxuKHtzdGF0dXM6InN1Y2Nlc3MiLGRhdGE6e21vZGU6InVuYXV0aG9yaXplZCJ9fSkpOnI8Mz9zZXRUaW1lb3V0KCgpPT57byhyKzEpfSwyMDAqcik6bih7c3RhdHVzOiJlcnJvciIsZXJyb3I6IkNvdWxkIG5vdCBmZXRjaCBzZXNzaW9uIn0pfWNhdGNoKHMpe2NvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBhdXRob3JpemU6IixzKSxuKHtzdGF0dXM6ImVycm9yIixlcnJvcjoiR290IGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byBnZXQgc2Vzc2lvbiJ9KX19KX0sW3JdKSx0fWZ1bmN0aW9uIHJsKHtjaGlsZHJlbjplfSl7Y29uc3QgdD1lLnNwbGl0KCIvIikuZmlsdGVyKG49Pm4pO3JldHVybiB0Lm1hcCgobixyKT0+ciE9PXQubGVuZ3RoLTE/Yi5qc3hzKGguRnJhZ21lbnQse2NoaWxkcmVuOltiLmpzeCgic3BhbiIse2NoaWxkcmVuOm59KSxiLmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtWzJweF0gdGV4dC1tdXRlZCIsY2hpbGRyZW46Ii8ifSldfSxgJHtlfS8ke259YCk6Yi5qc3godzcse2NoaWxkcmVuOm59LGUpKX1mdW5jdGlvbiB3Nyh7Y2hpbGRyZW46ZX0pe2lmKGUuaW5jbHVkZXMoIi4iKSl7Y29uc3QgdD1lLnNwbGl0KCIuIik7cmV0dXJuIHQubWFwKChuLHIpPT5yIT09dC5sZW5ndGgtMT9iLmpzeHMoaC5GcmFnbWVudCx7Y2hpbGRyZW46W2IuanN4KCJzcGFuIix7Y2hpbGRyZW46cj09PTA/bjpKU09OLnBhcnNlKG4pfSksYi5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtbXV0ZWQiLGNoaWxkcmVuOiIuIn0pXX0sYCR7ZX0uJHtufWApOmIuanN4KCJzcGFuIix7Y2hpbGRyZW46cj09PTA/bjpKU09OLnBhcnNlKG4pfSxlKSl9cmV0dXJuIGIuanN4KCJzcGFuIix7Y2hpbGRyZW46ZX0pfWZ1bmN0aW9uIEdQKGUpe3ZhciB0LG4scj0iIjtpZih0eXBlb2YgZT09InN0cmluZyJ8fHR5cGVvZiBlPT0ibnVtYmVyIilyKz1lO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdJiYobj1HUChlW3RdKSkmJihyJiYocis9IiAiKSxyKz1uKTtlbHNlIGZvcih0IGluIGUpZVt0XSYmKHImJihyKz0iICIpLHIrPXQpO3JldHVybiByfWZ1bmN0aW9uIFM3KCl7Zm9yKHZhciBlLHQsbj0wLHI9IiI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PUdQKGUpKSYmKHImJihyKz0iICIpLHIrPXQpO3JldHVybiByfWNvbnN0IHZFPWU9PnR5cGVvZiBlPT0iYm9vbGVhbiI/IiIuY29uY2F0KGUpOmU9PT0wPyIwIjplLHlFPVM3LGs3PShlLHQpPT5uPT57dmFyIHI7aWYoKHQ9PW51bGw/dm9pZCAwOnQudmFyaWFudHMpPT1udWxsKXJldHVybiB5RShlLG49PW51bGw/dm9pZCAwOm4uY2xhc3Msbj09bnVsbD92b2lkIDA6bi5jbGFzc05hbWUpO2NvbnN0e3ZhcmlhbnRzOm8sZGVmYXVsdFZhcmlhbnRzOml9PXQscz1PYmplY3Qua2V5cyhvKS5tYXAoYz0+e2NvbnN0IHU9bj09bnVsbD92b2lkIDA6bltjXSxkPWk9PW51bGw/dm9pZCAwOmlbY107aWYodT09PW51bGwpcmV0dXJuIG51bGw7Y29uc3QgZj12RSh1KXx8dkUoZCk7cmV0dXJuIG9bY11bZl19KSxhPW4mJk9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoYyx1KT0+e2xldFtkLGZdPXU7cmV0dXJuIGY9PT12b2lkIDB8fChjW2RdPWYpLGN9LHt9KSxsPXQ9PW51bGx8fChyPXQuY29tcG91bmRWYXJpYW50cyk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnJlZHVjZSgoYyx1KT0+e2xldHtjbGFzczpkLGNsYXNzTmFtZTpmLC4uLnB9PXU7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHApLmV2ZXJ5KG09PntsZXRbZyx5XT1tO3JldHVybiBBcnJheS5pc0FycmF5KHkpP3kuaW5jbHVkZXMoey4uLmksLi4uYX1bZ10pOnsuLi5pLC4uLmF9W2ddPT09eX0pP1suLi5jLGQsZl06Y30sW10pO3JldHVybiB5RShlLHMsbCxuPT1udWxsP3ZvaWQgMDpuLmNsYXNzLG49PW51bGw/dm9pZCAwOm4uY2xhc3NOYW1lKX0sRTc9azcoImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIix7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6ImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeS85MCIsZGVzdHJ1Y3RpdmU6ImJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCIsb3V0bGluZToiYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIixzZWNvbmRhcnk6ImJnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCIsZ2hvc3Q6ImhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIixsaW5rOiJ0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZSJ9LHNpemU6e2RlZmF1bHQ6ImgtMTAgcHgtNCBweS0yIixzbToiaC05IHJvdW5kZWQtbWQgcHgtMyIsbGc6ImgtMTEgcm91bmRlZC1tZCBweC04IixpY29uOiJoLTEwIHctMTAifX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OiJkZWZhdWx0IixzaXplOiJkZWZhdWx0In19KSxVYz1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSx2YXJpYW50OnQsc2l6ZTpuLGFzQ2hpbGQ6cj0hMSwuLi5vfSxpKT0+e2NvbnN0IHM9cj9BaToiYnV0dG9uIjtyZXR1cm4gYi5qc3gocyx7Y2xhc3NOYW1lOlVlKEU3KHt2YXJpYW50OnQsc2l6ZTpuLGNsYXNzTmFtZTplfSkpLHJlZjppLC4uLm99KX0pO1VjLmRpc3BsYXlOYW1lPSJCdXR0b24iO2Z1bmN0aW9uIGpnKGUpe2NvbnN0IHQ9ZSsiQ29sbGVjdGlvblByb3ZpZGVyIixbbixyXT10byh0KSxbbyxpXT1uKHQse2NvbGxlY3Rpb25SZWY6e2N1cnJlbnQ6bnVsbH0saXRlbU1hcDpuZXcgTWFwfSkscz1wPT57Y29uc3R7c2NvcGU6bSxjaGlsZHJlbjpnfT1wLHk9WC51c2VSZWYobnVsbCksdj1YLnVzZVJlZihuZXcgTWFwKS5jdXJyZW50O3JldHVybiBYLmNyZWF0ZUVsZW1lbnQobyx7c2NvcGU6bSxpdGVtTWFwOnYsY29sbGVjdGlvblJlZjp5fSxnKX0sYT1lKyJDb2xsZWN0aW9uU2xvdCIsbD1YLmZvcndhcmRSZWYoKHAsbSk9Pntjb25zdHtzY29wZTpnLGNoaWxkcmVuOnl9PXAsdj1pKGEsZykseD1xZShtLHYuY29sbGVjdGlvblJlZik7cmV0dXJuIFguY3JlYXRlRWxlbWVudChBaSx7cmVmOnh9LHkpfSksYz1lKyJDb2xsZWN0aW9uSXRlbVNsb3QiLHU9ImRhdGEtcmFkaXgtY29sbGVjdGlvbi1pdGVtIixkPVguZm9yd2FyZFJlZigocCxtKT0+e2NvbnN0e3Njb3BlOmcsY2hpbGRyZW46eSwuLi52fT1wLHg9WC51c2VSZWYobnVsbCksdz1xZShtLHgpLGs9aShjLGcpO3JldHVybiBYLnVzZUVmZmVjdCgoKT0+KGsuaXRlbU1hcC5zZXQoeCx7cmVmOngsLi4udn0pLCgpPT52b2lkIGsuaXRlbU1hcC5kZWxldGUoeCkpKSxYLmNyZWF0ZUVsZW1lbnQoQWkse1t1XToiIixyZWY6d30seSl9KTtmdW5jdGlvbiBmKHApe2NvbnN0IG09aShlKyJDb2xsZWN0aW9uQ29uc3VtZXIiLHApO3JldHVybiBYLnVzZUNhbGxiYWNrKCgpPT57Y29uc3QgeT1tLmNvbGxlY3Rpb25SZWYuY3VycmVudDtpZigheSlyZXR1cm5bXTtjb25zdCB2PUFycmF5LmZyb20oeS5xdWVyeVNlbGVjdG9yQWxsKGBbJHt1fV1gKSk7cmV0dXJuIEFycmF5LmZyb20obS5pdGVtTWFwLnZhbHVlcygpKS5zb3J0KChrLEUpPT52LmluZGV4T2Yoay5yZWYuY3VycmVudCktdi5pbmRleE9mKEUucmVmLmN1cnJlbnQpKX0sW20uY29sbGVjdGlvblJlZixtLml0ZW1NYXBdKX1yZXR1cm5be1Byb3ZpZGVyOnMsU2xvdDpsLEl0ZW1TbG90OmR9LGYscl19ZnVuY3Rpb24gUW8oe3Byb3A6ZSxkZWZhdWx0UHJvcDp0LG9uQ2hhbmdlOm49KCk9Pnt9fSl7Y29uc3RbcixvXT1fNyh7ZGVmYXVsdFByb3A6dCxvbkNoYW5nZTpufSksaT1lIT09dm9pZCAwLHM9aT9lOnIsYT1wbihuKSxsPWgudXNlQ2FsbGJhY2soYz0+e2lmKGkpe2NvbnN0IGQ9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YyhlKTpjO2QhPT1lJiZhKGQpfWVsc2UgbyhjKX0sW2ksZSxvLGFdKTtyZXR1cm5bcyxsXX1mdW5jdGlvbiBfNyh7ZGVmYXVsdFByb3A6ZSxvbkNoYW5nZTp0fSl7Y29uc3Qgbj1oLnVzZVN0YXRlKGUpLFtyXT1uLG89aC51c2VSZWYociksaT1wbih0KTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntvLmN1cnJlbnQhPT1yJiYoaShyKSxvLmN1cnJlbnQ9cil9LFtyLG8saV0pLG59Y29uc3QgQzc9X08udXNlSWR8fCgoKT0+e30pO2xldCBPNz0wO2Z1bmN0aW9uIEdyKGUpe2NvbnN0W3Qsbl09aC51c2VTdGF0ZShDNygpKTtyZXR1cm4gUHIoKCk9PntlfHxuKHI9PnI/P1N0cmluZyhPNysrKSl9LFtlXSksZXx8KHQ/YHJhZGl4LSR7dH1gOiIiKX1jb25zdCBZUD0iQ29sbGFwc2libGUiLFtUNyxYUF09dG8oWVApLFtQNyxQMV09VDcoWVApLE03PWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVDb2xsYXBzaWJsZTpuLG9wZW46cixkZWZhdWx0T3BlbjpvLGRpc2FibGVkOmksb25PcGVuQ2hhbmdlOnMsLi4uYX09ZSxbbD0hMSxjXT1Rbyh7cHJvcDpyLGRlZmF1bHRQcm9wOm8sb25DaGFuZ2U6c30pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoUDcse3Njb3BlOm4sZGlzYWJsZWQ6aSxjb250ZW50SWQ6R3IoKSxvcGVuOmwsb25PcGVuVG9nZ2xlOmgudXNlQ2FsbGJhY2soKCk9PmModT0+IXUpLFtjXSl9LGguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7ImRhdGEtc3RhdGUiOk0xKGwpLCJkYXRhLWRpc2FibGVkIjppPyIiOnZvaWQgMH0sYSx7cmVmOnR9KSkpfSksUjc9IkNvbGxhcHNpYmxlVHJpZ2dlciIsTjc9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZUNvbGxhcHNpYmxlOm4sLi4ucn09ZSxvPVAxKFI3LG4pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoUmUuYnV0dG9uLEYoe3R5cGU6ImJ1dHRvbiIsImFyaWEtY29udHJvbHMiOm8uY29udGVudElkLCJhcmlhLWV4cGFuZGVkIjpvLm9wZW58fCExLCJkYXRhLXN0YXRlIjpNMShvLm9wZW4pLCJkYXRhLWRpc2FibGVkIjpvLmRpc2FibGVkPyIiOnZvaWQgMCxkaXNhYmxlZDpvLmRpc2FibGVkfSxyLHtyZWY6dCxvbkNsaWNrOmFlKGUub25DbGljayxvLm9uT3BlblRvZ2dsZSl9KSl9KSxaUD0iQ29sbGFwc2libGVDb250ZW50IiwkNz1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09ZSxvPVAxKFpQLGUuX19zY29wZUNvbGxhcHNpYmxlKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGVyLHtwcmVzZW50Om58fG8ub3Blbn0sKHtwcmVzZW50Oml9KT0+aC5jcmVhdGVFbGVtZW50KEE3LEYoe30scix7cmVmOnQscHJlc2VudDppfSkpKX0pLEE3PWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVDb2xsYXBzaWJsZTpuLHByZXNlbnQ6cixjaGlsZHJlbjpvLC4uLml9PWUscz1QMShaUCxuKSxbYSxsXT1oLnVzZVN0YXRlKHIpLGM9aC51c2VSZWYobnVsbCksdT1xZSh0LGMpLGQ9aC51c2VSZWYoMCksZj1kLmN1cnJlbnQscD1oLnVzZVJlZigwKSxtPXAuY3VycmVudCxnPXMub3Blbnx8YSx5PWgudXNlUmVmKGcpLHY9aC51c2VSZWYoKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCB4PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eS5jdXJyZW50PSExKTtyZXR1cm4oKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoeCl9LFtdKSxQcigoKT0+e2NvbnN0IHg9Yy5jdXJyZW50O2lmKHgpe3YuY3VycmVudD12LmN1cnJlbnR8fHt0cmFuc2l0aW9uRHVyYXRpb246eC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24sYW5pbWF0aW9uTmFtZTp4LnN0eWxlLmFuaW1hdGlvbk5hbWV9LHguc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPSIwcyIseC5zdHlsZS5hbmltYXRpb25OYW1lPSJub25lIjtjb25zdCB3PXguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC5jdXJyZW50PXcuaGVpZ2h0LHAuY3VycmVudD13LndpZHRoLHkuY3VycmVudHx8KHguc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPXYuY3VycmVudC50cmFuc2l0aW9uRHVyYXRpb24seC5zdHlsZS5hbmltYXRpb25OYW1lPXYuY3VycmVudC5hbmltYXRpb25OYW1lKSxsKHIpfX0sW3Mub3BlbixyXSksaC5jcmVhdGVFbGVtZW50KFJlLmRpdixGKHsiZGF0YS1zdGF0ZSI6TTEocy5vcGVuKSwiZGF0YS1kaXNhYmxlZCI6cy5kaXNhYmxlZD8iIjp2b2lkIDAsaWQ6cy5jb250ZW50SWQsaGlkZGVuOiFnfSxpLHtyZWY6dSxzdHlsZTp7Ii0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQiOmY/YCR7Zn1weGA6dm9pZCAwLCItLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgiOm0/YCR7bX1weGA6dm9pZCAwLC4uLmUuc3R5bGV9fSksZyYmbyl9KTtmdW5jdGlvbiBNMShlKXtyZXR1cm4gZT8ib3BlbiI6ImNsb3NlZCJ9Y29uc3QgRDc9TTcsSTc9TjcsTDc9JDcsY2E9IkFjY29yZGlvbiIsajc9WyJIb21lIiwiRW5kIiwiQXJyb3dEb3duIiwiQXJyb3dVcCIsIkFycm93TGVmdCIsIkFycm93UmlnaHQiXSxbUjEsejcsRjddPWpnKGNhKSxbemcsWmxlXT10byhjYSxbRjcsWFBdKSxOMT1YUCgpLEpQPVguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3R5cGU6biwuLi5yfT1lLG89cixpPXI7cmV0dXJuIFguY3JlYXRlRWxlbWVudChSMS5Qcm92aWRlcix7c2NvcGU6ZS5fX3Njb3BlQWNjb3JkaW9ufSxuPT09Im11bHRpcGxlIj9YLmNyZWF0ZUVsZW1lbnQoSDcsRih7fSxpLHtyZWY6dH0pKTpYLmNyZWF0ZUVsZW1lbnQoVjcsRih7fSxvLHtyZWY6dH0pKSl9KTtKUC5wcm9wVHlwZXM9e3R5cGUoZSl7Y29uc3QgdD1lLnZhbHVlfHxlLmRlZmF1bHRWYWx1ZTtyZXR1cm4gZS50eXBlJiYhWyJzaW5nbGUiLCJtdWx0aXBsZSJdLmluY2x1ZGVzKGUudHlwZSk/bmV3IEVycm9yKCJJbnZhbGlkIHByb3AgYHR5cGVgIHN1cHBsaWVkIHRvIGBBY2NvcmRpb25gLiBFeHBlY3RlZCBvbmUgb2YgYHNpbmdsZSB8IG11bHRpcGxlYC4iKTplLnR5cGU9PT0ibXVsdGlwbGUiJiZ0eXBlb2YgdD09InN0cmluZyI/bmV3IEVycm9yKCJJbnZhbGlkIHByb3AgYHR5cGVgIHN1cHBsaWVkIHRvIGBBY2NvcmRpb25gLiBFeHBlY3RlZCBgc2luZ2xlYCB3aGVuIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgaXMgdHlwZSBgc3RyaW5nYC4iKTplLnR5cGU9PT0ic2luZ2xlIiYmQXJyYXkuaXNBcnJheSh0KT9uZXcgRXJyb3IoIkludmFsaWQgcHJvcCBgdHlwZWAgc3VwcGxpZWQgdG8gYEFjY29yZGlvbmAuIEV4cGVjdGVkIGBtdWx0aXBsZWAgd2hlbiBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIGlzIHR5cGUgYHN0cmluZ1tdYC4iKTpudWxsfX07Y29uc3RbUVAsQjddPXpnKGNhKSxbZU0sVTddPXpnKGNhLHtjb2xsYXBzaWJsZTohMX0pLFY3PVguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3ZhbHVlOm4sZGVmYXVsdFZhbHVlOnIsb25WYWx1ZUNoYW5nZTpvPSgpPT57fSxjb2xsYXBzaWJsZTppPSExLC4uLnN9PWUsW2EsbF09UW8oe3Byb3A6bixkZWZhdWx0UHJvcDpyLG9uQ2hhbmdlOm99KTtyZXR1cm4gWC5jcmVhdGVFbGVtZW50KFFQLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sdmFsdWU6YT9bYV06W10sb25JdGVtT3BlbjpsLG9uSXRlbUNsb3NlOlgudXNlQ2FsbGJhY2soKCk9PmkmJmwoIiIpLFtpLGxdKX0sWC5jcmVhdGVFbGVtZW50KGVNLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sY29sbGFwc2libGU6aX0sWC5jcmVhdGVFbGVtZW50KHRNLEYoe30scyx7cmVmOnR9KSkpKX0pLEg3PVguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3ZhbHVlOm4sZGVmYXVsdFZhbHVlOnIsb25WYWx1ZUNoYW5nZTpvPSgpPT57fSwuLi5pfT1lLFtzPVtdLGFdPVFvKHtwcm9wOm4sZGVmYXVsdFByb3A6cixvbkNoYW5nZTpvfSksbD1YLnVzZUNhbGxiYWNrKHU9PmEoKGQ9W10pPT5bLi4uZCx1XSksW2FdKSxjPVgudXNlQ2FsbGJhY2sodT0+YSgoZD1bXSk9PmQuZmlsdGVyKGY9PmYhPT11KSksW2FdKTtyZXR1cm4gWC5jcmVhdGVFbGVtZW50KFFQLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sdmFsdWU6cyxvbkl0ZW1PcGVuOmwsb25JdGVtQ2xvc2U6Y30sWC5jcmVhdGVFbGVtZW50KGVNLHtzY29wZTplLl9fc2NvcGVBY2NvcmRpb24sY29sbGFwc2libGU6ITB9LFguY3JlYXRlRWxlbWVudCh0TSxGKHt9LGkse3JlZjp0fSkpKSl9KSxbVzcsRmddPXpnKGNhKSx0TT1YLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sZGlzYWJsZWQ6cixkaXI6byxvcmllbnRhdGlvbjppPSJ2ZXJ0aWNhbCIsLi4uc309ZSxhPVgudXNlUmVmKG51bGwpLGw9cWUoYSx0KSxjPXo3KG4pLGQ9SmYobyk9PT0ibHRyIixmPWFlKGUub25LZXlEb3duLHA9Pnt2YXIgbTtpZighajcuaW5jbHVkZXMocC5rZXkpKXJldHVybjtjb25zdCBnPXAudGFyZ2V0LHk9YygpLmZpbHRlcihNPT57dmFyIEE7cmV0dXJuISgoQT1NLnJlZi5jdXJyZW50KSE9PW51bGwmJkEhPT12b2lkIDAmJkEuZGlzYWJsZWQpfSksdj15LmZpbmRJbmRleChNPT5NLnJlZi5jdXJyZW50PT09ZykseD15Lmxlbmd0aDtpZih2PT09LTEpcmV0dXJuO3AucHJldmVudERlZmF1bHQoKTtsZXQgdz12O2NvbnN0IGs9MCxFPXgtMSxTPSgpPT57dz12KzEsdz5FJiYodz1rKX0sXz0oKT0+e3c9di0xLHc8ayYmKHc9RSl9O3N3aXRjaChwLmtleSl7Y2FzZSJIb21lIjp3PWs7YnJlYWs7Y2FzZSJFbmQiOnc9RTticmVhaztjYXNlIkFycm93UmlnaHQiOmk9PT0iaG9yaXpvbnRhbCImJihkP1MoKTpfKCkpO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjppPT09InZlcnRpY2FsIiYmUygpO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjppPT09Imhvcml6b250YWwiJiYoZD9fKCk6UygpKTticmVhaztjYXNlIkFycm93VXAiOmk9PT0idmVydGljYWwiJiZfKCk7YnJlYWt9Y29uc3QgUD13JXg7KG09eVtQXS5yZWYuY3VycmVudCk9PT1udWxsfHxtPT09dm9pZCAwfHxtLmZvY3VzKCl9KTtyZXR1cm4gWC5jcmVhdGVFbGVtZW50KFc3LHtzY29wZTpuLGRpc2FibGVkOnIsZGlyZWN0aW9uOm8sb3JpZW50YXRpb246aX0sWC5jcmVhdGVFbGVtZW50KFIxLlNsb3Qse3Njb3BlOm59LFguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7fSxzLHsiZGF0YS1vcmllbnRhdGlvbiI6aSxyZWY6bCxvbktleURvd246cj92b2lkIDA6Zn0pKSkpfSksaHg9IkFjY29yZGlvbkl0ZW0iLFtLNywkMV09emcoaHgpLEJnPVguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246bix2YWx1ZTpyLC4uLm99PWUsaT1GZyhoeCxuKSxzPUI3KGh4LG4pLGE9TjEobiksbD1HcigpLGM9ciYmcy52YWx1ZS5pbmNsdWRlcyhyKXx8ITEsdT1pLmRpc2FibGVkfHxlLmRpc2FibGVkO3JldHVybiBYLmNyZWF0ZUVsZW1lbnQoSzcse3Njb3BlOm4sb3BlbjpjLGRpc2FibGVkOnUsdHJpZ2dlcklkOmx9LFguY3JlYXRlRWxlbWVudChENyxGKHsiZGF0YS1vcmllbnRhdGlvbiI6aS5vcmllbnRhdGlvbiwiZGF0YS1zdGF0ZSI6bk0oYyl9LGEsbyx7cmVmOnQsZGlzYWJsZWQ6dSxvcGVuOmMsb25PcGVuQ2hhbmdlOmQ9PntkP3Mub25JdGVtT3BlbihyKTpzLm9uSXRlbUNsb3NlKHIpfX0pKSl9KSxxNz0iQWNjb3JkaW9uSGVhZGVyIixHNz1YLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sLi4ucn09ZSxvPUZnKGNhLG4pLGk9JDEocTcsbik7cmV0dXJuIFguY3JlYXRlRWxlbWVudChSZS5oMyxGKHsiZGF0YS1vcmllbnRhdGlvbiI6by5vcmllbnRhdGlvbiwiZGF0YS1zdGF0ZSI6bk0oaS5vcGVuKSwiZGF0YS1kaXNhYmxlZCI6aS5kaXNhYmxlZD8iIjp2b2lkIDB9LHIse3JlZjp0fSkpfSkseEU9IkFjY29yZGlvblRyaWdnZXIiLFVnPVguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246biwuLi5yfT1lLG89RmcoY2EsbiksaT0kMSh4RSxuKSxzPVU3KHhFLG4pLGE9TjEobik7cmV0dXJuIFguY3JlYXRlRWxlbWVudChSMS5JdGVtU2xvdCx7c2NvcGU6bn0sWC5jcmVhdGVFbGVtZW50KEk3LEYoeyJhcmlhLWRpc2FibGVkIjppLm9wZW4mJiFzLmNvbGxhcHNpYmxlfHx2b2lkIDAsImRhdGEtb3JpZW50YXRpb24iOm8ub3JpZW50YXRpb24saWQ6aS50cmlnZ2VySWR9LGEscix7cmVmOnR9KSkpfSksWTc9IkFjY29yZGlvbkNvbnRlbnQiLFg3PVguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246biwuLi5yfT1lLG89RmcoY2EsbiksaT0kMShZNyxuKSxzPU4xKG4pO3JldHVybiBYLmNyZWF0ZUVsZW1lbnQoTDcsRih7cm9sZToicmVnaW9uIiwiYXJpYS1sYWJlbGxlZGJ5IjppLnRyaWdnZXJJZCwiZGF0YS1vcmllbnRhdGlvbiI6by5vcmllbnRhdGlvbn0scyxyLHtyZWY6dCxzdHlsZTp7Ii0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0IjoidmFyKC0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQpIiwiLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC13aWR0aCI6InZhcigtLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgpIiwuLi5lLnN0eWxlfX0pKX0pO2Z1bmN0aW9uIG5NKGUpe3JldHVybiBlPyJvcGVuIjoiY2xvc2VkIn1jb25zdCBaNz1KUCxKNz1CZyxRNz1HNyxyTT1VZyxvTT1YNyxWZz1aNyxpTT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+Yi5qc3goSjcse3JlZjpuLGNsYXNzTmFtZTpVZSgiYm9yZGVyLWIiLGUpLC4uLnR9KSk7aU0uZGlzcGxheU5hbWU9IkFjY29yZGlvbkl0ZW0iO2NvbnN0IHNNPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PmIuanN4KFE3LHtjbGFzc05hbWU6ImZsZXgiLGNoaWxkcmVuOmIuanN4cyhyTSx7cmVmOnIsY2xhc3NOYW1lOlVlKCJmbGV4IGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTQgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgaG92ZXI6dW5kZXJsaW5lIFsmW2RhdGEtc3RhdGU9b3Blbl0+c3ZnXTpyb3RhdGUtMTgwIixlKSwuLi5uLGNoaWxkcmVuOlt0LGIuanN4KE1nLHtjbGFzc05hbWU6InctNCBoLTQgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMjAwIHNocmluay0wIn0pXX0pfSkpO3NNLmRpc3BsYXlOYW1lPXJNLmRpc3BsYXlOYW1lO2NvbnN0IG5wPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PmIuanN4KG9NLHtyZWY6cixjbGFzc05hbWU6VWUoIm92ZXJmbG93LWhpZGRlbiB0ZXh0LXNtIHRyYW5zaXRpb24tYWxsIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1hY2NvcmRpb24tdXAgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1hY2NvcmRpb24tZG93biIsZSksLi4ubixjaGlsZHJlbjpiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwdC0wIHBiLTQiLGNoaWxkcmVuOnR9KX0pKTtucC5kaXNwbGF5TmFtZT1vTS5kaXNwbGF5TmFtZTt2YXIgYU09e2V4cG9ydHM6e319LGU4PSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCIsdDg9ZTgsbjg9dDg7ZnVuY3Rpb24gbE0oKXt9ZnVuY3Rpb24gY00oKXt9Y00ucmVzZXRXYXJuaW5nQ2FjaGU9bE07dmFyIHI4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShyLG8saSxzLGEsbCl7aWYobCE9PW44KXt2YXIgYz1uZXcgRXJyb3IoIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTt0aHJvdyBjLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24iLGN9fWUuaXNSZXF1aXJlZD1lO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZX12YXIgbj17YXJyYXk6ZSxiaWdpbnQ6ZSxib29sOmUsZnVuYzplLG51bWJlcjplLG9iamVjdDplLHN0cmluZzplLHN5bWJvbDplLGFueTplLGFycmF5T2Y6dCxlbGVtZW50OmUsZWxlbWVudFR5cGU6ZSxpbnN0YW5jZU9mOnQsbm9kZTplLG9iamVjdE9mOnQsb25lT2Y6dCxvbmVPZlR5cGU6dCxzaGFwZTp0LGV4YWN0OnQsY2hlY2tQcm9wVHlwZXM6Y00scmVzZXRXYXJuaW5nQ2FjaGU6bE19O3JldHVybiBuLlByb3BUeXBlcz1uLG59O2FNLmV4cG9ydHM9cjgoKTt2YXIgcnA9YU0uZXhwb3J0cztjb25zdCBPcz1zaShycCk7ZnVuY3Rpb24gbXgoKXtyZXR1cm4gbXg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbXguYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG84KGUsdCl7aWYoZT09bnVsbClyZXR1cm57fTt2YXIgbj1pOChlLHQpLHIsbztpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihvPTA7bzxpLmxlbmd0aDtvKyspcj1pW29dLCEodC5pbmRleE9mKHIpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihuW3JdPWVbcl0pfXJldHVybiBufWZ1bmN0aW9uIGk4KGUsdCl7aWYoZT09bnVsbClyZXR1cm57fTt2YXIgbj17fSxyPU9iamVjdC5rZXlzKGUpLG8saTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKW89cltpXSwhKHQuaW5kZXhPZihvKT49MCkmJihuW29dPWVbb10pO3JldHVybiBufXZhciBBMT1oLmZvcndhcmRSZWYoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNvbG9yLHI9bj09PXZvaWQgMD8iY3VycmVudENvbG9yIjpuLG89ZS5zaXplLGk9bz09PXZvaWQgMD8yNDpvLHM9bzgoZSxbImNvbG9yIiwic2l6ZSJdKTtyZXR1cm4gWC5jcmVhdGVFbGVtZW50KCJzdmciLG14KHtyZWY6dCx4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOmksaGVpZ2h0Omksdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LHMpLFguY3JlYXRlRWxlbWVudCgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn0pLFguY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxMiIseTE6IjgiLHgyOiIxMiIseTI6IjEyIn0pLFguY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxMiIseTE6IjE2Iix4MjoiMTIuMDEiLHkyOiIxNiJ9KSl9KTtBMS5wcm9wVHlwZXM9e2NvbG9yOk9zLnN0cmluZyxzaXplOk9zLm9uZU9mVHlwZShbT3Muc3RyaW5nLE9zLm51bWJlcl0pfTtBMS5kaXNwbGF5TmFtZT0iQWxlcnRDaXJjbGUiO2NvbnN0IHM4PUExO2Z1bmN0aW9uIGd4KCl7cmV0dXJuIGd4PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGd4LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhOChlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49bDgoZSx0KSxyLG87aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobz0wO288aS5sZW5ndGg7bysrKXI9aVtvXSwhKHQuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYobltyXT1lW3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBsOChlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyhlKSxvLGk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylvPXJbaV0sISh0LmluZGV4T2Yobyk+PTApJiYobltvXT1lW29dKTtyZXR1cm4gbn12YXIgRDE9aC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixvPWUuc2l6ZSxpPW89PT12b2lkIDA/MjQ6byxzPWE4KGUsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIFguY3JlYXRlRWxlbWVudCgic3ZnIixneCh7cmVmOnQseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDppLGhlaWdodDppLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOnIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxzKSxYLmNyZWF0ZUVsZW1lbnQoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxYLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTUiLHkxOiI5Iix4MjoiOSIseTI6IjE1In0pLFguY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI5Iix5MToiOSIseDI6IjE1Iix5MjoiMTUifSkpfSk7RDEucHJvcFR5cGVzPXtjb2xvcjpPcy5zdHJpbmcsc2l6ZTpPcy5vbmVPZlR5cGUoW09zLnN0cmluZyxPcy5udW1iZXJdKX07RDEuZGlzcGxheU5hbWU9IlhDaXJjbGUiO2NvbnN0IHVNPUQxO2Z1bmN0aW9uIGM4KGUsdCxuKXt2YXIgYyx1LGQsZjtjb25zdCByPVtdO2xldCBvLGk9e307Y29uc3Qgcz17fSxhPXt9O2Zvcihjb25zdFtwLG1db2YgT2JqZWN0LmVudHJpZXMoZSkpe2NvbnN0IGc9cDtmb3IoY29uc3QgeSBvZiBtKXtjb25zdCB2PW49PW51bGw/dm9pZCAwOm5beS5hdXRob3J8fCIiXTsoIW98fCgoYz1vLmF1dGhvcik9PW51bGw/dm9pZCAwOmMuaWQpIT09KHY9PW51bGw/dm9pZCAwOnYuaWQpKSYmKG8mJnIucHVzaCh7Li4ubyxjaGFuZ2VzOmJFKGkpfSksaT17fSxvPXthdXRob3I6dixsYXN0Q2hhbmdlZEF0OnkuY3JlYXRlZF9hdCxjaGFuZ2VDb3VudDowLGNoYW5nZXM6W119KSxpW2ddfHwoaVtnXT17fSk7Zm9yKGNvbnN0IHggb2YgeS5wYXRjaCl7by5sYXN0Q2hhbmdlZEF0PXkuY3JlYXRlZF9hdCxvLmNoYW5nZUNvdW50Kys7Y29uc3Qgdz1vdC5wYXRjaFBhdGhUb01vZHVsZVBhdGgoeC5wYXRoKTtzd2l0Y2goaVtnXVt3XXx8KGlbZ11bd109W10pLCghc1tgJHtnfS4ke3d9YF18fG5ldyBEYXRlKHkuY3JlYXRlZF9hdCkuZ2V0VGltZSgpPm5ldyBEYXRlKHNbYCR7Z30uJHt3fWBdKS5nZXRUaW1lKCkpJiYoc1tgJHtnfS4ke3d9YF09eS5jcmVhdGVkX2F0LHYmJihhW2Ake2d9LiR7d31gXT12KSkseC5vcCl7Y2FzZSJhZGQiOmNhc2UicmVtb3ZlIjpjYXNlInJlcGxhY2UiOmNhc2UibW92ZSI6e2NvbnN0IGs9KHU9aVtnXVt3XSk9PW51bGw/dm9pZCAwOnUuZmluZChFPT5FLnR5cGU9PT14Lm9wKTtrPyhrLmNvdW50Kyssay5wYXRjaElkcy5wdXNoKHkucGF0Y2hfaWQpLGsuY2hhbmdlZEF0PXkuY3JlYXRlZF9hdCk6aVtnXVt3XS5wdXNoKHt0eXBlOngub3AsY291bnQ6MSxwYXRjaElkczpbeS5wYXRjaF9pZF0sY2hhbmdlZEF0OnkuY3JlYXRlZF9hdCxjaGFuZ2VkQnk6dn0pO2JyZWFrfWNhc2UiZmlsZSI6e2NvbnN0IGs9eC5maWxlUGF0aCxFPWlbZ11bd10uZmluZChTPT5TLmZpbGVQYXRoPT09ayk7RT8oRS5jb3VudCsrLEUucGF0Y2hJZHMucHVzaCh5LnBhdGNoX2lkKSxFLmNoYW5nZWRBdD15LmNyZWF0ZWRfYXQpOmlbZ11bd10ucHVzaCh7ZmlsZVBhdGg6ayx0eXBlOiJyZXBsYWNlIixjb3VudDoxLGNoYW5nZWRBdDp5LmNyZWF0ZWRfYXQscGF0Y2hJZHM6W3kucGF0Y2hfaWRdfSk7YnJlYWt9fX19fW8mJnIucHVzaCh7Li4ubyxjaGFuZ2VzOmJFKGkpfSk7Zm9yKGNvbnN0IHAgb2Ygcil7Zm9yKGNvbnN0IG0gb2YgcC5jaGFuZ2VzKW0uaXRlbXMuc29ydCgoZyx5KT0+Zy5jaGFuZ2VkQXQmJnkuY2hhbmdlZEF0P25ldyBEYXRlKGcuY2hhbmdlZEF0KS5nZXRUaW1lKCktbmV3IERhdGUoeS5jaGFuZ2VkQXQpLmdldFRpbWUoKTowKTtwLmNoYW5nZXMuc29ydCgobSxnKT0+e2NvbnN0IHk9bS5pdGVtc1ttLml0ZW1zLmxlbmd0aC0xXS5jaGFuZ2VkQXQsdj1nLml0ZW1zW2cuaXRlbXMubGVuZ3RoLTFdLmNoYW5nZWRBdDtyZXR1cm4geT92P25ldyBEYXRlKHkpLmdldFRpbWUoKS1uZXcgRGF0ZSh2KS5nZXRUaW1lKCk6LTE6MX0pfXIuc29ydCgocCxtKT0+bmV3IERhdGUocC5sYXN0Q2hhbmdlZEF0KS5nZXRUaW1lKCktbmV3IERhdGUobS5sYXN0Q2hhbmdlZEF0KS5nZXRUaW1lKCkpO2NvbnN0IGw9W107aWYodCE9bnVsbCYmdC52YWxpZGF0aW9uRXJyb3JzKWZvcihjb25zdFtwLG1db2YgT2JqZWN0LmVudHJpZXModC52YWxpZGF0aW9uRXJyb3JzKSl7Y29uc3QgZz1wLHk9e3ZhbGlkYXRpb25zOltdfTtpZigoZD1tLmVycm9ycykhPW51bGwmJmQuZmF0YWwmJih5LmZhdGFsRXJyb3JzPW0uZXJyb3JzLmZhdGFsLm1hcCh2PT52Lm1lc3NhZ2UpKSwoZj1tLmVycm9ycykhPW51bGwmJmYudmFsaWRhdGlvbilmb3IoY29uc3Rbdix4XW9mIE9iamVjdC5lbnRyaWVzKG0uZXJyb3JzLnZhbGlkYXRpb24pKXtjb25zdCB3PXYsWyxrXT1vdC5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aCh3KTt4Lmxlbmd0aD4wJiZ5LnZhbGlkYXRpb25zLnB1c2goe3BhdGg6ayxtZXNzYWdlczp4Lm1hcChFPT4oe21lc3NhZ2U6RS5tZXNzYWdlLHNldmVyaXR5OiJ3YXJuaW5nIn0pKSxsYXN0Q2hhbmdlZEF0OnNbd10sbGFzdENoYW5nZWRCeTphW3ddfSl9bC5wdXNoKFtnLHldKX1yZXR1cm57aGlzdG9yeTpyLGVycm9yczpsLmxlbmd0aD4wP3tlcnJvcnM6T2JqZWN0LmZyb21FbnRyaWVzKGwpfTp2b2lkIDB9fWZ1bmN0aW9uIGJFKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0W24scl1vZiBPYmplY3QuZW50cmllcyhlKSl7Y29uc3Qgbz1uLGk9W107Zm9yKGNvbnN0W3MsYV1vZiBPYmplY3QuZW50cmllcyhyKSl7Y29uc3QgbD1zO2Zvcihjb25zdCBjIG9mIGEpaS5wdXNoKHtwYXRoOmwsdHlwZTpjLnR5cGUsZmlsZVBhdGg6Yy5maWxlUGF0aCxjb3VudDpjLmNvdW50LGNoYW5nZWRBdDpjLmNoYW5nZWRBdCxwYXRjaElkczpjLnBhdGNoSWRzfSl9dC5wdXNoKHttb2R1bGVJZDpvLGl0ZW1zOml9KX1yZXR1cm4gdH1jb25zdCBkTT1oLmNyZWF0ZUNvbnRleHQoMCk7ZnVuY3Rpb24gdTgoKXtyZXR1cm4gaC51c2VDb250ZXh0KGRNKX1mdW5jdGlvbiBkOChlKXtyZXR1cm4gYi5qc3hzKGI4LHtjaGlsZHJlbjpbYi5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCBwLTIiLGNoaWxkcmVuOmIuanN4KCJidXR0b24iLHtvbkNsaWNrOmUub25DYW5jZWwsY2hpbGRyZW46Yi5qc3goUmcse30pfSl9KSxiLmpzeCgiaDEiLHtjbGFzc05hbWU6ImJsb2NrIG1iLTYgZm9udC1zYW5zIHRleHQtMnhsIGZvbnQtYm9sZCIsY2hpbGRyZW46IlJldmlldyBjaGFuZ2VzIn0pLGIuanN4KGZNLHsuLi5lfSldfSl9ZnVuY3Rpb24gZk0oe2FwaTplLGlzVmFsaWRhdGluZzp0LHBhdGNoZXM6bix2YWxpZGF0aW9uUmVzcG9uc2U6cixvbkNvbW1pdDpvLG9uQ2FuY2VsOml9KXtjb25zdFtzLGFdPWgudXNlU3RhdGUoITEpO2gudXNlRWZmZWN0KCgpPT57Y29uc3QgdT1kPT57ZC5rZXk9PT0iRXNjYXBlIiYmaSYmaSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHUpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdSl9LFtdKTtjb25zdFtsLGNdPWgudXNlU3RhdGUoKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntsZXQgdT0hMTtyZXR1cm4gZS5nZXRQYXRjaGVzKG4pLnRoZW4oZD0+e2lmKCF1KWlmKGJ0LmlzRXJyKGQpKXtjb25zb2xlLmVycm9yKGQuZXJyb3IpO3JldHVybn1lbHNlIGMoZC52YWx1ZSl9KSwoKT0+e3U9ITB9fSxbbl0pLGIuanN4KGRNLlByb3ZpZGVyLHt2YWx1ZTpEYXRlLm5vdygpLGNoaWxkcmVuOmIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGp1c3RpZnktc3RhcnQgaC1mdWxsIHAtOCBnYXAteS01IixjaGlsZHJlbjpbbCYmciYmYi5qc3goZjgsey4uLmM4KGwse21vZHVsZXM6ci5tb2R1bGVzLHZhbGlkYXRpb25FcnJvcnM6ci52YWxpZGF0aW9uRXJyb3JzfSksb25EZWxldGVQYXRjaDp1PT57ZS5kZWxldGVQYXRjaGVzKFt1XSkudGhlbihkPT57aWYoYnQuaXNFcnIoZCkpe2NvbnNvbGUuZXJyb3IoZC5lcnJvcik7cmV0dXJufWMoZj0+e2NvbnN0IHA9ey4uLmZ9O2Zvcihjb25zdCBtIGluIHApe2NvbnN0IGc9bTtwW2ddPXBbZ10uZmlsdGVyKHk9PnUhPT15LnBhdGNoX2lkKX1yZXR1cm4gcH0pfSkuY2F0Y2goY29uc29sZS5lcnJvcil9fSksYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLXgtNCIsY2hpbGRyZW46W2IuanN4KFVjLHt2YXJpYW50OiJzZWNvbmRhcnkiLG9uQ2xpY2s6aSxjaGlsZHJlbjoiQ2FuY2VsIn0pLGIuanN4KFVjLHtkaXNhYmxlZDp0fHxzfHwhbHx8IXIsb25DbGljazooKT0+e2EoITApLGUucG9zdENvbW1pdCh7cGF0Y2hlczpufSkudGhlbih1PT57YnQuaXNFcnIodSk/KGNvbnNvbGUuZXJyb3IodS5lcnJvciksInZhbGlkYXRpb25FcnJvcnMiaW4gdS5lcnJvcj9hbGVydChgQ2Fubm90IGNvbW1pdCEgVmFsaWRhdGlvbiBlcnJvcnMgZGV0ZWN0ZWQ6ICR7T2JqZWN0LmVudHJpZXModS5lcnJvci52YWxpZGF0aW9uRXJyb3JzKS5tYXAoKFtkLGZdKT0+Zi5lcnJvcnMuZmF0YWw/YE1vZHVsZTogJHtkfS4gRkFUQUwgZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGYuZXJyb3JzLmZhdGFsLG51bGwsMil9YDpgTW9kdWxlOiAke2R9Ogoke0pTT04uc3RyaW5naWZ5KGYuZXJyb3JzLnZhbGlkYXRpb24sbnVsbCw0KX1gKS5qb2luKGAKYCl9YCk6YWxlcnQoIkNvdWxkIG5vdCBjb21taXQgcGF0Y2hlczogIit1LmVycm9yLm1lc3NhZ2UrKHUuZXJyb3IuZGV0YWlscz8iLiBEZXRhaWxzOiIrSlNPTi5zdHJpbmdpZnkodS5lcnJvci5kZXRhaWxzKToiLiIpKSk6KGNvbnNvbGUubG9nKCJDb21taXR0ZWQgcGF0Y2hlczogIix1LnZhbHVlKSxvKCkpfSkuZmluYWxseSgoKT0+e2EoITEpfSl9LGNoaWxkcmVuOnM/IkNvbW1pdHRpbmcuLi4iOiJDb21taXQifSldfSldfSl9KX1mdW5jdGlvbiBmOCh7aGlzdG9yeTplLGVycm9yczp0LG9uRGVsZXRlUGF0Y2g6bn0pe3JldHVybiBiLmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1mdWxsIixjaGlsZHJlbjpbYi5qc3goImgyIix7Y2xhc3NOYW1lOiJtdC0xMCBtYi02IHRleHQteGwgZm9udC1ib2xkIixjaGlsZHJlbjoiVGltZWxpbmUifSksZS5sZW5ndGg+MCYmYi5qc3goIm9sIix7Y2hpbGRyZW46ZS5tYXAoKHIsbyk9PmIuanN4KCJsaSIse2NoaWxkcmVuOmIuanN4KHY4LHtpbmRleDpvLGxhc3Q6bz09PWUubGVuZ3RoLTEsZGVmYXVsdE9wZW46IShlLmxlbmd0aD4zKSxvbkRlbGV0ZVBhdGNoOm4sY2hpbGRyZW46cn0pfSxvKSl9KSwodD09bnVsbD92b2lkIDA6dC5lcnJvcnMpJiZPYmplY3QudmFsdWVzKHQuZXJyb3JzKS5zb21lKHI9PnIuZmF0YWxFcnJvcnN8fHIudmFsaWRhdGlvbnMmJnIudmFsaWRhdGlvbnMubGVuZ3RoPjApJiZiLmpzeHMoYi5GcmFnbWVudCx7Y2hpbGRyZW46W2IuanN4KCJoMiIse2NsYXNzTmFtZToibXQtMTAgbWItNiB0ZXh0LXhsIGZvbnQtYm9sZCIsY2hpbGRyZW46IlZhbGlkYXRpb24gTm90aWZpY2F0aW9ucyJ9KSxPYmplY3QuZW50cmllcygodD09bnVsbD92b2lkIDA6dC5lcnJvcnMpfHx7fSkubWFwKChbcixvXSk9PihvLmZhdGFsRXJyb3JzJiZvLmZhdGFsRXJyb3JzLmxlbmd0aD4wfHxvLnZhbGlkYXRpb25zJiZvLnZhbGlkYXRpb25zLmxlbmd0aD4wKSYmYi5qc3gocDgse21vZHVsZUlkOnIsY2hpbGRyZW46b30scikpXX0pXX0pfWZ1bmN0aW9uIHA4KHttb2R1bGVJZDplLGNoaWxkcmVuOnR9KXtyZXR1cm4gYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im10LTYiLGNoaWxkcmVuOltiLmpzeHMoImRpdiIse2NoaWxkcmVuOltiLmpzeCgic3BhbiIse2NoaWxkcmVuOmIuanN4KHJsLHtjaGlsZHJlbjplfSl9KSx0LmZhdGFsRXJyb3JzJiZiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtdC0zIixjaGlsZHJlbjp0LmZhdGFsRXJyb3JzLm1hcCgobixyKT0+Yi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im10LTMiLGNoaWxkcmVuOltiLmpzeCh1TSx7Y2xhc3NOYW1lOiJpbmxpbmUtYmxvY2sgbXItMiJ9KSxiLmpzeCgic3BhbiIse2NoaWxkcmVuOm59KV19LHIpKX0pXX0pLGIuanN4KCJkaXYiLHtjaGlsZHJlbjp0LnZhbGlkYXRpb25zLm1hcCgobixyKT0+Yi5qc3gobTgse2NoaWxkcmVuOm59LHIpKX0pXX0pfWZ1bmN0aW9uIHBNKHthdXRob3I6ZX0pe3JldHVybiBlIT1udWxsJiZlLmF2YXRhclVybD9iLmpzeCgiaW1nIix7Y2xhc3NOYW1lOiJ3LTggaC04IGJvcmRlciByb3VuZGVkLWZ1bGwgYm9yZGVyLWJvcmRlciIsc3JjOmUuYXZhdGFyVXJsfSk6Yi5qc3goInNwYW4iLHtjbGFzc05hbWU6InctOCBoLTggdGV4dC1zbSBsZWFkaW5nLTggdGV4dC1jZW50ZXIgYm9yZGVyIHJvdW5kZWQtZnVsbCBib3JkZXItYm9yZGVyIixjaGlsZHJlbjooZT09bnVsbD92b2lkIDA6ZS5uYW1lKSYmeTgoZS5uYW1lKX0pfWNvbnN0IGg4PW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIse2RhdGVTdHlsZToic2hvcnQifSk7ZnVuY3Rpb24gSTEoKXtjb25zdCBlPXU4KCk7cmV0dXJuIGgudXNlQ2FsbGJhY2sobj0+e2NvbnN0IHI9ZS1uZXcgRGF0ZShOdW1iZXIobikpLmdldFRpbWUoKTtpZihNYXRoLmZsb29yKHIvMWUzKTw2MClyZXR1cm4ianVzdCBub3ciO2NvbnN0IGk9TWF0aC5mbG9vcihyLzFlMy82MCk7aWYoaTw2MClyZXR1cm5gJHtpfSBtaW5zIGFnb2A7Y29uc3Qgcz1NYXRoLmZsb29yKGkvNjApO2lmKHM8MjQpcmV0dXJuYCR7c30gaG91cnMgYWdvYDtjb25zdCBhPU1hdGguZmxvb3Iocy8yNCk7aWYoYTwzKXJldHVybmAke2F9IGRheXMgYWdvYDt0cnl7cmV0dXJuIGg4LmZvcm1hdChuZXcgRGF0ZShuKSl9Y2F0Y2gobCl7Y29uc29sZS5kZWJ1ZygiVmFsOiBFcnJvciBmb3JtYXR0aW5nIGRhdGUiLGwpfX0sW2VdKX1mdW5jdGlvbiBtOCh7Y2hpbGRyZW46ZX0pe2NvbnN0W3Qsbl09aC51c2VTdGF0ZSghMSkscj1JMSgpO3JldHVybiBiLmpzeChWZyx7dHlwZToic2luZ2xlIixjb2xsYXBzaWJsZTohMCxjbGFzc05hbWU6InRleHQtc20iLGRlZmF1bHRWYWx1ZToidmFsaWRhdGlvbi1lcnJvciIsb25WYWx1ZUNoYW5nZTpvPT5uKG89PT0idmFsaWRhdGlvbi1lcnJvciIpLGNoaWxkcmVuOmIuanN4cyhCZyx7dmFsdWU6InZhbGlkYXRpb24tZXJyb3IiLGNoaWxkcmVuOltiLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHctZnVsbCBtdC0zIixjaGlsZHJlbjpbYi5qc3goInNwYW4iLHtjaGlsZHJlbjpiLmpzeCgic3BhbiIse2NsYXNzTmFtZToibWluLXctWzEwMHB4XSB0ZXh0LWxlZnQgdHJ1bmNhdGUiLGRpcjoicnRsIixjaGlsZHJlbjpiLmpzeChybCx7Y2hpbGRyZW46ZS5wYXRofSl9KX0pLGIuanN4cyhVZyx7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W2IuanN4cygic3BhbiIse2NsYXNzTmFtZToidHJ1bmNhdGUiLGNoaWxkcmVuOltlLm1lc3NhZ2VzLmxlbmd0aCwiIG1lc3NhZ2VzIixlLmxhc3RDaGFuZ2VkQXQmJmAg4oCiICR7cihlLmxhc3RDaGFuZ2VkQXQpfSBgXX0pLGUubGFzdENoYW5nZWRCeSYmYi5qc3gocE0se2F1dGhvcjplLmxhc3RDaGFuZ2VkQnl9KSxiLmpzeChNZyx7Y2xhc3NOYW1lOlF0KCJ0cmFuc2l0aW9uIix7Ii1yb3RhdGUtMTgwIjp0fSl9KV19KV19KSxiLmpzeChucCx7Y2hpbGRyZW46ZS5tZXNzYWdlcy5tYXAoKG8saSk9PmIuanN4KGc4LHtjaGlsZHJlbjpvfSxpKSl9KV19KX0pfWZ1bmN0aW9uIGc4KHtjaGlsZHJlbjplfSl7Y29uc3RbdCxuXT1oLnVzZVN0YXRlKCExKSxyPSgpPT5uKG89PiFvKTtyZXR1cm4gYi5qc3hzKCJidXR0b24iLHtvbkNsaWNrOnIsY2xhc3NOYW1lOlF0KCJmbGV4IG10LTMgZ2FwLTQgbWF4LXctZnVsbCB0ZXh0LWxlZnQiLHt0cnVuY2F0ZTohdH0pLGNoaWxkcmVuOltlLnNldmVyaXR5PT09Indhcm5pbmciP2IuanN4KHM4LHtjbGFzc05hbWU6ImZsZXgtc2hyaW5rLTAgdGV4dC13YXJuaW5nIn0pOmIuanN4KHVNLHtjbGFzc05hbWU6ImZsZXgtc2hyaW5rLTAgdGV4dC1lcnJvciJ9KSxlLm1lc3NhZ2VdfSl9ZnVuY3Rpb24gdjgoe2luZGV4OmUsZGVmYXVsdE9wZW46dCxsYXN0Om4sY2hpbGRyZW46cixvbkRlbGV0ZVBhdGNoOm99KXtjb25zdCBpPUkxKCksW3MsYV09aC51c2VTdGF0ZSh0KSxsPWBoaXN0b3J5LWl0ZW0tJHtlfWA7cmV0dXJuIGIuanN4KFZnLHt0eXBlOiJzaW5nbGUiLGNvbGxhcHNpYmxlOiEwLGRlZmF1bHRWYWx1ZTp0P2w6dm9pZCAwLG9uVmFsdWVDaGFuZ2U6Yz0+e2EoYz09PWwpfSxjaGlsZHJlbjpiLmpzeHMoQmcse3ZhbHVlOmwsY2hpbGRyZW46W2IuanN4cyhVZyx7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwiLGNoaWxkcmVuOltiLmpzeChwTSx7YXV0aG9yOnIuYXV0aG9yfSksYi5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCB0ZXh0LXNtIixjaGlsZHJlbjpbYi5qc3hzKCJzcGFuIix7Y2hpbGRyZW46W3IuY2hhbmdlQ291bnQsIiBjaGFuZ2VzIixgIOKAoiAke2koci5sYXN0Q2hhbmdlZEF0KX1gXX0pLGIuanN4KE1nLHtjbGFzc05hbWU6UXQoInRyYW5zaXRpb24iLHsiLXJvdGF0ZS0xODAiOnN9KX0pXX0pXX0pLGIuanN4cygib2wiLHtjbGFzc05hbWU6InBsLTQgbXQtNCBtYi00IG1sLTQgYm9yZGVyLWwgYm9yZGVyLWJvcmRlciIsY2hpbGRyZW46WyFzJiYhbiYmYi5qc3goImRpdiIse2NsYXNzTmFtZToiaC0yIn0pLGIuanN4KG5wLHtjaGlsZHJlbjpyLmNoYW5nZXMubWFwKChjLHUpPT5iLmpzeCgiZGl2Iix7Y2hpbGRyZW46Yi5qc3goeDgse2NoYW5nZTpjLG9uRGVsZXRlUGF0Y2g6b30pfSx1KSl9KV19KV19KX0pfWZ1bmN0aW9uIHk4KGUpe3ZhciByO2NvbnN0W3QsLi4ubl09ZS5zcGxpdCgiICIpO3JldHVybiBuLmxlbmd0aD09PTA/dC5zbGljZSgwLDIpOmAke3RbMF19JHsocj1uLnNsaWNlKC0xKVswXSk9PW51bGw/dm9pZCAwOnJbMF19YH1mdW5jdGlvbiB4OCh7Y2hhbmdlOmUsb25EZWxldGVQYXRjaDp0fSl7Y29uc3Qgbj1JMSgpO3JldHVybiBiLmpzeHMoImRpdiIse2NoaWxkcmVuOltiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmb250LWJvbGQiLGNoaWxkcmVuOmIuanN4KHJsLHtjaGlsZHJlbjplLm1vZHVsZUlkfSl9KSxiLmpzeCgib2wiLHtjbGFzc05hbWU6Im1sLTIiLGNoaWxkcmVuOmUuaXRlbXMubWFwKChyLG8pPT57dmFyIGk7cmV0dXJuIGIuanN4KCJsaSIse2NoaWxkcmVuOmIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy0zIHB5LTIiLGNoaWxkcmVuOltiLmpzeCgic3BhbiIse2NoaWxkcmVuOnIuZmlsZVBhdGg/ci5maWxlUGF0aDpiLmpzeChybCx7Y2hpbGRyZW46ci5wYXRofSl9KSxiLmpzeCgic3BhbiIse2NoaWxkcmVuOnIudHlwZT09PSJyZXBsYWNlIj9gdXBkYXRlZCR7ci5jb3VudCYmci5jb3VudD4xP2AgJHtyLmNvdW50fSB0aW1lc2A6IiJ9YDpyLnR5cGU9PT0iYWRkIj8iYWRkZWQgIjpyLnR5cGU9PT0ibW92ZSI/Im1vdmVkICI6InJlbW92ZWQgIn0pLHIuY2hhbmdlZEF0JiZiLmpzeCgiZGl2Iix7Y2hpbGRyZW46bihyLmNoYW5nZWRBdCl9KSxiLmpzeChWZyx7dHlwZToic2luZ2xlIixjb2xsYXBzaWJsZTohMCxjaGlsZHJlbjpiLmpzeHMoQmcse3ZhbHVlOiJwYXRjaC1pZHMiLGNoaWxkcmVuOltiLmpzeChVZyx7Y2hpbGRyZW46IlNob3cgUGF0Y2ggSURzIn0pLGIuanN4KG5wLHtjaGlsZHJlbjooaT1yLnBhdGNoSWRzKT09bnVsbD92b2lkIDA6aS5tYXAocz0+Yi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im1yLTIiLGNoaWxkcmVuOltiLmpzeCgic3BhbiIse2NoaWxkcmVuOnN9KSxiLmpzeCgiYnV0dG9uIix7b25DbGljazooKT0+e3Qocyl9LGNoaWxkcmVuOmIuanN4KGZqLHt9KX0pXX0scykpfSldfSl9KV19KX0sbyl9KX0pXX0pfWZ1bmN0aW9uIGI4KHtjaGlsZHJlbjplfSl7cmV0dXJuIGIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCB3LWZ1bGwgcm91bmRlZC1sZyBiZy1ncmFkaWVudC10by1iciBmcm9tLWJhY2tncm91bmQvOTAgZnJvbS00MCUgdG8tYmFja2dyb3VuZCBiYWNrZHJvcC1ibHVyLWxnIHRleHQtcHJpbWFyeSBkcm9wLXNoYWRvdy0yeGwiLGNoaWxkcmVuOmV9KX1mdW5jdGlvbiBMMSgpe3JldHVybnthc3luYzohMSxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxob29rczpudWxsLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2lsZW50OiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbH19bGV0IHhsPUwxKCk7ZnVuY3Rpb24gaE0oZSl7eGw9ZX1jb25zdCBtTT0vWyY8PiInXS8sdzg9bmV3IFJlZ0V4cChtTS5zb3VyY2UsImciKSxnTT0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sUzg9bmV3IFJlZ0V4cChnTS5zb3VyY2UsImciKSxrOD17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sd0U9ZT0+azhbZV07ZnVuY3Rpb24geHIoZSx0KXtpZih0KXtpZihtTS50ZXN0KGUpKXJldHVybiBlLnJlcGxhY2Uodzgsd0UpfWVsc2UgaWYoZ00udGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKFM4LHdFKTtyZXR1cm4gZX1jb25zdCBFOD0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9pZztmdW5jdGlvbiBfOChlKXtyZXR1cm4gZS5yZXBsYWNlKEU4LCh0LG4pPT4obj1uLnRvTG93ZXJDYXNlKCksbj09PSJjb2xvbiI/IjoiOm4uY2hhckF0KDApPT09IiMiP24uY2hhckF0KDEpPT09IngiP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobi5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCtuLnN1YnN0cmluZygxKSk6IiIpKX1jb25zdCBDOD0vKF58W15cW10pXF4vZztmdW5jdGlvbiBpdChlLHQpe2U9dHlwZW9mIGU9PSJzdHJpbmciP2U6ZS5zb3VyY2UsdD10fHwiIjtjb25zdCBuPXtyZXBsYWNlOihyLG8pPT4obz10eXBlb2Ygbz09Im9iamVjdCImJiJzb3VyY2UiaW4gbz9vLnNvdXJjZTpvLG89by5yZXBsYWNlKEM4LCIkMSIpLGU9ZS5yZXBsYWNlKHIsbyksbiksZ2V0UmVnZXg6KCk9Pm5ldyBSZWdFeHAoZSx0KX07cmV0dXJuIG59ZnVuY3Rpb24gU0UoZSl7dHJ5e2U9ZW5jb2RlVVJJKGUpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGV9Y29uc3Qgdm09e2V4ZWM6KCk9Pm51bGx9O2Z1bmN0aW9uIGtFKGUsdCl7Y29uc3Qgbj1lLnJlcGxhY2UoL1x8L2csKGkscyxhKT0+e2xldCBsPSExLGM9cztmb3IoOy0tYz49MCYmYVtjXT09PSJcXCI7KWw9IWw7cmV0dXJuIGw/InwiOiIgfCJ9KSxyPW4uc3BsaXQoLyBcfC8pO2xldCBvPTA7aWYoclswXS50cmltKCl8fHIuc2hpZnQoKSxyLmxlbmd0aD4wJiYhcltyLmxlbmd0aC0xXS50cmltKCkmJnIucG9wKCksdClpZihyLmxlbmd0aD50KXIuc3BsaWNlKHQpO2Vsc2UgZm9yKDtyLmxlbmd0aDx0OylyLnB1c2goIiIpO2Zvcig7bzxyLmxlbmd0aDtvKyspcltvXT1yW29dLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gcn1mdW5jdGlvbiBVcChlLHQsbil7Y29uc3Qgcj1lLmxlbmd0aDtpZihyPT09MClyZXR1cm4iIjtsZXQgbz0wO2Zvcig7bzxyOyl7Y29uc3QgaT1lLmNoYXJBdChyLW8tMSk7aWYoaT09PXQmJiFuKW8rKztlbHNlIGlmKGkhPT10JiZuKW8rKztlbHNlIGJyZWFrfXJldHVybiBlLnNsaWNlKDAsci1vKX1mdW5jdGlvbiBPOChlLHQpe2lmKGUuaW5kZXhPZih0WzFdKT09PS0xKXJldHVybi0xO2xldCBuPTA7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXT09PSJcXCIpcisrO2Vsc2UgaWYoZVtyXT09PXRbMF0pbisrO2Vsc2UgaWYoZVtyXT09PXRbMV0mJihuLS0sbjwwKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBFRShlLHQsbixyKXtjb25zdCBvPXQuaHJlZixpPXQudGl0bGU/eHIodC50aXRsZSk6bnVsbCxzPWVbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKGVbMF0uY2hhckF0KDApIT09IiEiKXtyLnN0YXRlLmluTGluaz0hMDtjb25zdCBhPXt0eXBlOiJsaW5rIixyYXc6bixocmVmOm8sdGl0bGU6aSx0ZXh0OnMsdG9rZW5zOnIuaW5saW5lVG9rZW5zKHMpfTtyZXR1cm4gci5zdGF0ZS5pbkxpbms9ITEsYX1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzpuLGhyZWY6byx0aXRsZTppLHRleHQ6eHIocyl9fWZ1bmN0aW9uIFQ4KGUsdCl7Y29uc3Qgbj1lLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobj09PW51bGwpcmV0dXJuIHQ7Y29uc3Qgcj1uWzFdO3JldHVybiB0LnNwbGl0KGAKYCkubWFwKG89Pntjb25zdCBpPW8ubWF0Y2goL15ccysvKTtpZihpPT09bnVsbClyZXR1cm4gbztjb25zdFtzXT1pO3JldHVybiBzLmxlbmd0aD49ci5sZW5ndGg/by5zbGljZShyLmxlbmd0aCk6b30pLmpvaW4oYApgKX1jbGFzcyB5bXtjb25zdHJ1Y3Rvcih0KXt2dCh0aGlzLCJvcHRpb25zIik7dnQodGhpcywicnVsZXMiKTt2dCh0aGlzLCJsZXhlciIpO3RoaXMub3B0aW9ucz10fHx4bH1zcGFjZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKHQpO2lmKG4mJm5bMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6blswXX19Y29kZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKHQpO2lmKG4pe2NvbnN0IHI9blswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3Om5bMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9yOlVwKHIsYApgKX19fWZlbmNlcyh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWModCk7aWYobil7Y29uc3Qgcj1uWzBdLG89VDgocixuWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpyLGxhbmc6blsyXT9uWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOm5bMl0sdGV4dDpvfX19aGVhZGluZyh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHQpO2lmKG4pe2xldCByPW5bMl0udHJpbSgpO2lmKC8jJC8udGVzdChyKSl7Y29uc3Qgbz1VcChyLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IW98fC8gJC8udGVzdChvKSkmJihyPW8udHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3Om5bMF0sZGVwdGg6blsxXS5sZW5ndGgsdGV4dDpyLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyKX19fWhyKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKHQpO2lmKG4pcmV0dXJue3R5cGU6ImhyIixyYXc6blswXX19YmxvY2txdW90ZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKHQpO2lmKG4pe2NvbnN0IHI9VXAoblswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxgCmApLG89dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgaT10aGlzLmxleGVyLmJsb2NrVG9rZW5zKHIpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1vLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6blswXSx0b2tlbnM6aSx0ZXh0OnJ9fX1saXN0KHQpe2xldCBuPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHQpO2lmKG4pe2xldCByPW5bMV0udHJpbSgpO2NvbnN0IG89ci5sZW5ndGg+MSxpPXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpvLHN0YXJ0Om8/K3Iuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O3I9bz9gXFxkezEsOX1cXCR7ci5zbGljZSgtMSl9YDpgXFwke3J9YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihyPW8/cjoiWyorLV0iKTtjb25zdCBzPW5ldyBSZWdFeHAoYF4oIHswLDN9JHtyfSkoKD86WwkgXVteXFxuXSopPyg/OlxcbnwkKSlgKTtsZXQgYT0iIixsPSIiLGM9ITE7Zm9yKDt0Oyl7bGV0IHU9ITE7aWYoIShuPXMuZXhlYyh0KSl8fHRoaXMucnVsZXMuYmxvY2suaHIudGVzdCh0KSlicmVhazthPW5bMF0sdD10LnN1YnN0cmluZyhhLmxlbmd0aCk7bGV0IGQ9blsyXS5zcGxpdChgCmAsMSlbMF0ucmVwbGFjZSgvXlx0Ky8sdj0+IiAiLnJlcGVhdCgzKnYubGVuZ3RoKSksZj10LnNwbGl0KGAKYCwxKVswXSxwPTA7dGhpcy5vcHRpb25zLnBlZGFudGljPyhwPTIsbD1kLnRyaW1TdGFydCgpKToocD1uWzJdLnNlYXJjaCgvW14gXS8pLHA9cD40PzE6cCxsPWQuc2xpY2UocCkscCs9blsxXS5sZW5ndGgpO2xldCBtPSExO2lmKCFkJiYvXiAqJC8udGVzdChmKSYmKGErPWYrYApgLHQ9dC5zdWJzdHJpbmcoZi5sZW5ndGgrMSksdT0hMCksIXUpe2NvbnN0IHY9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMscC0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIAldW15cXG5dKik/KD86XFxufCQpKWApLHg9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMscC0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLHc9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMscC0xKX19KD86XGBcYFxgfH5+filgKSxrPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHAtMSl9fSNgKTtmb3IoO3Q7KXtjb25zdCBFPXQuc3BsaXQoYApgLDEpWzBdO2lmKGY9RSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihmPWYucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSx3LnRlc3QoZil8fGsudGVzdChmKXx8di50ZXN0KGYpfHx4LnRlc3QodCkpYnJlYWs7aWYoZi5zZWFyY2goL1teIF0vKT49cHx8IWYudHJpbSgpKWwrPWAKYCtmLnNsaWNlKHApO2Vsc2V7aWYobXx8ZC5zZWFyY2goL1teIF0vKT49NHx8dy50ZXN0KGQpfHxrLnRlc3QoZCl8fHgudGVzdChkKSlicmVhaztsKz1gCmArZn0hbSYmIWYudHJpbSgpJiYobT0hMCksYSs9RStgCmAsdD10LnN1YnN0cmluZyhFLmxlbmd0aCsxKSxkPWYuc2xpY2UocCl9fWkubG9vc2V8fChjP2kubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChhKSYmKGM9ITApKTtsZXQgZz1udWxsLHk7dGhpcy5vcHRpb25zLmdmbSYmKGc9L15cW1sgeFhdXF0gLy5leGVjKGwpLGcmJih5PWdbMF0hPT0iWyBdICIsbD1sLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSksaS5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzphLHRhc2s6ISFnLGNoZWNrZWQ6eSxsb29zZTohMSx0ZXh0OmwsdG9rZW5zOltdfSksaS5yYXcrPWF9aS5pdGVtc1tpLml0ZW1zLmxlbmd0aC0xXS5yYXc9YS50cmltRW5kKCksaS5pdGVtc1tpLml0ZW1zLmxlbmd0aC0xXS50ZXh0PWwudHJpbUVuZCgpLGkucmF3PWkucmF3LnRyaW1FbmQoKTtmb3IobGV0IHU9MDt1PGkuaXRlbXMubGVuZ3RoO3UrKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxpLml0ZW1zW3VdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGkuaXRlbXNbdV0udGV4dCxbXSksIWkubG9vc2Upe2NvbnN0IGQ9aS5pdGVtc1t1XS50b2tlbnMuZmlsdGVyKHA9PnAudHlwZT09PSJzcGFjZSIpLGY9ZC5sZW5ndGg+MCYmZC5zb21lKHA9Pi9cbi4qXG4vLnRlc3QocC5yYXcpKTtpLmxvb3NlPWZ9aWYoaS5sb29zZSlmb3IobGV0IHU9MDt1PGkuaXRlbXMubGVuZ3RoO3UrKylpLml0ZW1zW3VdLmxvb3NlPSEwO3JldHVybiBpfX1odG1sKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWModCk7aWYobilyZXR1cm57dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3Om5bMF0scHJlOm5bMV09PT0icHJlInx8blsxXT09PSJzY3JpcHQifHxuWzFdPT09InN0eWxlIix0ZXh0Om5bMF19fWRlZih0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWModCk7aWYobil7Y29uc3Qgcj1uWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxvPW5bMl0/blsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixpPW5bM10/blszXS5zdWJzdHJpbmcoMSxuWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOm5bM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOnIscmF3Om5bMF0saHJlZjpvLHRpdGxlOml9fX10YWJsZSh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyh0KTtpZihuKXtpZighL1s6fF0vLnRlc3QoblsyXSkpcmV0dXJuO2NvbnN0IHI9e3R5cGU6InRhYmxlIixyYXc6blswXSxoZWFkZXI6a0UoblsxXSkubWFwKG89Pih7dGV4dDpvLHRva2VuczpbXX0pKSxhbGlnbjpuWzJdLnJlcGxhY2UoL15cfHxcfCAqJC9nLCIiKS5zcGxpdCgifCIpLHJvd3M6blszXSYmblszXS50cmltKCk/blszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdChgCmApOltdfTtpZihyLmhlYWRlci5sZW5ndGg9PT1yLmFsaWduLmxlbmd0aCl7bGV0IG89ci5hbGlnbi5sZW5ndGgsaSxzLGEsbDtmb3IoaT0wO2k8bztpKyspe2NvbnN0IGM9ci5hbGlnbltpXTtjJiYoL14gKi0rOiAqJC8udGVzdChjKT9yLmFsaWduW2ldPSJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoYyk/ci5hbGlnbltpXT0iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KGMpP3IuYWxpZ25baV09ImxlZnQiOnIuYWxpZ25baV09bnVsbCl9Zm9yKG89ci5yb3dzLmxlbmd0aCxpPTA7aTxvO2krKylyLnJvd3NbaV09a0Uoci5yb3dzW2ldLHIuaGVhZGVyLmxlbmd0aCkubWFwKGM9Pih7dGV4dDpjLHRva2VuczpbXX0pKTtmb3Iobz1yLmhlYWRlci5sZW5ndGgscz0wO3M8bztzKyspci5oZWFkZXJbc10udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKHIuaGVhZGVyW3NdLnRleHQpO2ZvcihvPXIucm93cy5sZW5ndGgscz0wO3M8bztzKyspZm9yKGw9ci5yb3dzW3NdLGE9MDthPGwubGVuZ3RoO2ErKylsW2FdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShsW2FdLnRleHQpO3JldHVybiByfX19bGhlYWRpbmcodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWModCk7aWYobilyZXR1cm57dHlwZToiaGVhZGluZyIscmF3Om5bMF0sZGVwdGg6blsyXS5jaGFyQXQoMCk9PT0iPSI/MToyLHRleHQ6blsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoblsxXSl9fXBhcmFncmFwaCh0KXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWModCk7aWYobil7Y29uc3Qgcj1uWzFdLmNoYXJBdChuWzFdLmxlbmd0aC0xKT09PWAKYD9uWzFdLnNsaWNlKDAsLTEpOm5bMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3Om5bMF0sdGV4dDpyLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyKX19fXRleHQodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6blswXSx0ZXh0Om5bMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG5bMF0pfX1lc2NhcGUodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzpuWzBdLHRleHQ6eHIoblsxXSl9fXRhZyh0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKHQpO2lmKG4pcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoblswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KG5bMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoblswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KG5bMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZToiaHRtbCIscmF3Om5bMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6blswXX19bGluayh0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyh0KTtpZihuKXtjb25zdCByPW5bMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChyKSl7aWYoIS8+JC8udGVzdChyKSlyZXR1cm47Y29uc3Qgcz1VcChyLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChyLmxlbmd0aC1zLmxlbmd0aCklMj09PTApcmV0dXJufWVsc2V7Y29uc3Qgcz1POChuWzJdLCIoKSIpO2lmKHM+LTEpe2NvbnN0IGw9KG5bMF0uaW5kZXhPZigiISIpPT09MD81OjQpK25bMV0ubGVuZ3RoK3M7blsyXT1uWzJdLnN1YnN0cmluZygwLHMpLG5bMF09blswXS5zdWJzdHJpbmcoMCxsKS50cmltKCksblszXT0iIn19bGV0IG89blsyXSxpPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3Qgcz0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMobyk7cyYmKG89c1sxXSxpPXNbM10pfWVsc2UgaT1uWzNdP25bM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIG89by50cmltKCksL148Ly50ZXN0KG8pJiYodGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KHIpP289by5zbGljZSgxKTpvPW8uc2xpY2UoMSwtMSkpLEVFKG4se2hyZWY6byYmby5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmkmJmkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sblswXSx0aGlzLmxleGVyKX19cmVmbGluayh0LG4pe2xldCByO2lmKChyPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyh0KSl8fChyPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHQpKSl7bGV0IG89KHJbMl18fHJbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIik7aWYobz1uW28udG9Mb3dlckNhc2UoKV0sIW8pe2NvbnN0IGk9clswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzppLHRleHQ6aX19cmV0dXJuIEVFKHIsbyxyWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyh0LG4scj0iIil7bGV0IG89dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWModCk7aWYoIW98fG9bM10mJnIubWF0Y2goL1tccHtMfVxwe059XS91KSlyZXR1cm47aWYoIShvWzFdfHxvWzJdfHwiIil8fCFyfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKHIpKXtjb25zdCBzPVsuLi5vWzBdXS5sZW5ndGgtMTtsZXQgYSxsLGM9cyx1PTA7Y29uc3QgZD1vWzBdWzBdPT09IioiP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKGQubGFzdEluZGV4PTAsbj1uLnNsaWNlKC0xKnQubGVuZ3RoK3MpOyhvPWQuZXhlYyhuKSkhPW51bGw7KXtpZihhPW9bMV18fG9bMl18fG9bM118fG9bNF18fG9bNV18fG9bNl0sIWEpY29udGludWU7aWYobD1bLi4uYV0ubGVuZ3RoLG9bM118fG9bNF0pe2MrPWw7Y29udGludWV9ZWxzZSBpZigob1s1XXx8b1s2XSkmJnMlMyYmISgocytsKSUzKSl7dSs9bDtjb250aW51ZX1pZihjLT1sLGM+MCljb250aW51ZTtsPU1hdGgubWluKGwsbCtjK3UpO2NvbnN0IGY9Wy4uLm9bMF1dWzBdLmxlbmd0aCxwPXQuc2xpY2UoMCxzK28uaW5kZXgrZitsKTtpZihNYXRoLm1pbihzLGwpJTIpe2NvbnN0IGc9cC5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzpwLHRleHQ6Zyx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoZyl9fWNvbnN0IG09cC5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6cCx0ZXh0Om0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG0pfX19fWNvZGVzcGFuKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKHQpO2lmKG4pe2xldCByPW5bMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IG89L1teIF0vLnRlc3QociksaT0vXiAvLnRlc3QocikmJi8gJC8udGVzdChyKTtyZXR1cm4gbyYmaSYmKHI9ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKSkscj14cihyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzpuWzBdLHRleHQ6cn19fWJyKHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyh0KTtpZihuKXJldHVybnt0eXBlOiJiciIscmF3Om5bMF19fWRlbCh0KXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpO2lmKG4pcmV0dXJue3R5cGU6ImRlbCIscmF3Om5bMF0sdGV4dDpuWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhuWzJdKX19YXV0b2xpbmsodCl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKHQpO2lmKG4pe2xldCByLG87cmV0dXJuIG5bMl09PT0iQCI/KHI9eHIoblsxXSksbz0ibWFpbHRvOiIrcik6KHI9eHIoblsxXSksbz1yKSx7dHlwZToibGluayIscmF3Om5bMF0sdGV4dDpyLGhyZWY6byx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6cix0ZXh0OnJ9XX19fXVybCh0KXtsZXQgbjtpZihuPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKHQpKXtsZXQgcixvO2lmKG5bMl09PT0iQCIpcj14cihuWzBdKSxvPSJtYWlsdG86IityO2Vsc2V7bGV0IGk7ZG8gaT1uWzBdLG5bMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKG5bMF0pWzBdO3doaWxlKGkhPT1uWzBdKTtyPXhyKG5bMF0pLG5bMV09PT0id3d3LiI/bz0iaHR0cDovLyIrblswXTpvPW5bMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpuWzBdLHRleHQ6cixocmVmOm8sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX1pbmxpbmVUZXh0KHQpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKHQpO2lmKG4pe2xldCByO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s/cj1uWzBdOnI9eHIoblswXSkse3R5cGU6InRleHQiLHJhdzpuWzBdLHRleHQ6cn19fX1jb25zdCBnZT17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6dm0sbGhlYWRpbmc6L14oPyFidWxsICkoKD86Lnxcbig/IVxzKj9cbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy99O2dlLl9sYWJlbD0vKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLztnZS5fdGl0bGU9Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS87Z2UuZGVmPWl0KGdlLmRlZikucmVwbGFjZSgibGFiZWwiLGdlLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLGdlLl90aXRsZSkuZ2V0UmVnZXgoKTtnZS5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS87Z2UubGlzdEl0ZW1TdGFydD1pdCgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLGdlLmJ1bGxldCkuZ2V0UmVnZXgoKTtnZS5saXN0PWl0KGdlLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxnZS5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrZ2UuZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCk7Z2UuX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCI7Z2UuX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvO2dlLmh0bWw9aXQoZ2UuaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLGdlLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLGdlLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCk7Z2UubGhlYWRpbmc9aXQoZ2UubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxnZS5idWxsZXQpLmdldFJlZ2V4KCk7Z2UucGFyYWdyYXBoPWl0KGdlLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixnZS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixnZS5fdGFnKS5nZXRSZWdleCgpO2dlLmJsb2NrcXVvdGU9aXQoZ2UuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixnZS5wYXJhZ3JhcGgpLmdldFJlZ2V4KCk7Z2Uubm9ybWFsPXsuLi5nZX07Z2UuZ2ZtPXsuLi5nZS5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLiopXFxuIHswLDN9KCg/OlxcfCAqKT86Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKig/OlxcfCAqKT8pKD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn07Z2UuZ2ZtLnRhYmxlPWl0KGdlLmdmbS50YWJsZSkucmVwbGFjZSgiaHIiLGdlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsZ2UuX3RhZykuZ2V0UmVnZXgoKTtnZS5nZm0ucGFyYWdyYXBoPWl0KGdlLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixnZS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixnZS5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixnZS5fdGFnKS5nZXRSZWdleCgpO2dlLnBlZGFudGljPXsuLi5nZS5ub3JtYWwsaHRtbDppdChgXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86IlteIl0qInwnW14nXSonfFxcc1teJyIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSlgKS5yZXBsYWNlKCJjb21tZW50IixnZS5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6dm0sbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6aXQoZ2Uubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixnZS5ocikucmVwbGFjZSgiaGVhZGluZyIsYCAqI3sxLDZ9ICpbXgpdYCkucmVwbGFjZSgibGhlYWRpbmciLGdlLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3QgbmU9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6dm0sdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOnZtLHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307bmUuX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iO25lLnB1bmN0dWF0aW9uPWl0KG5lLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxuZS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7bmUuYmxvY2tTa2lwPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nO25lLmFueVB1bmN0dWF0aW9uPS9cXFtwdW5jdF0vZztuZS5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZztuZS5fY29tbWVudD1pdChnZS5fY29tbWVudCkucmVwbGFjZSgiKD86LS0+fCQpIiwiLS0+IikuZ2V0UmVnZXgoKTtuZS5lbVN0cm9uZy5sRGVsaW09aXQobmUuZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxuZS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7bmUuZW1TdHJvbmcuckRlbGltQXN0PWl0KG5lLmVtU3Ryb25nLnJEZWxpbUFzdCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLG5lLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtuZS5lbVN0cm9uZy5yRGVsaW1VbmQ9aXQobmUuZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csbmUuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO25lLmFueVB1bmN0dWF0aW9uPWl0KG5lLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csbmUuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO25lLl9lc2NhcGVzPWl0KG5lLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csbmUuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO25lLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vO25lLl9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvO25lLmF1dG9saW5rPWl0KG5lLmF1dG9saW5rKS5yZXBsYWNlKCJzY2hlbWUiLG5lLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixuZS5fZW1haWwpLmdldFJlZ2V4KCk7bmUuX2F0dHJpYnV0ZT0vXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJdKiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/LztuZS50YWc9aXQobmUudGFnKS5yZXBsYWNlKCJjb21tZW50IixuZS5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIixuZS5fYXR0cmlidXRlKS5nZXRSZWdleCgpO25lLl9sYWJlbD0vKD86XFsoPzpcXC58W15cW1xdXFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/LztuZS5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLztuZS5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLztuZS5saW5rPWl0KG5lLmxpbmspLnJlcGxhY2UoImxhYmVsIixuZS5fbGFiZWwpLnJlcGxhY2UoImhyZWYiLG5lLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsbmUuX3RpdGxlKS5nZXRSZWdleCgpO25lLnJlZmxpbms9aXQobmUucmVmbGluaykucmVwbGFjZSgibGFiZWwiLG5lLl9sYWJlbCkucmVwbGFjZSgicmVmIixnZS5fbGFiZWwpLmdldFJlZ2V4KCk7bmUubm9saW5rPWl0KG5lLm5vbGluaykucmVwbGFjZSgicmVmIixnZS5fbGFiZWwpLmdldFJlZ2V4KCk7bmUucmVmbGlua1NlYXJjaD1pdChuZS5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsbmUucmVmbGluaykucmVwbGFjZSgibm9saW5rIixuZS5ub2xpbmspLmdldFJlZ2V4KCk7bmUubm9ybWFsPXsuLi5uZX07bmUucGVkYW50aWM9ey4uLm5lLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6aXQoL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLG5lLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOml0KC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixuZS5fbGFiZWwpLmdldFJlZ2V4KCl9O25lLmdmbT17Li4ubmUubm9ybWFsLGVzY2FwZTppdChuZS5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99O25lLmdmbS51cmw9aXQobmUuZ2ZtLnVybCwiaSIpLnJlcGxhY2UoImVtYWlsIixuZS5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpO25lLmJyZWFrcz17Li4ubmUuZ2ZtLGJyOml0KG5lLmJyKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDppdChuZS5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9O2NsYXNzIEtve2NvbnN0cnVjdG9yKHQpe3Z0KHRoaXMsInRva2VucyIpO3Z0KHRoaXMsIm9wdGlvbnMiKTt2dCh0aGlzLCJzdGF0ZSIpO3Z0KHRoaXMsInRva2VuaXplciIpO3Z0KHRoaXMsImlubGluZVF1ZXVlIik7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9dHx8eGwsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgeW0sdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBuPXtibG9jazpnZS5ub3JtYWwsaW5saW5lOm5lLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhuLmJsb2NrPWdlLnBlZGFudGljLG4uaW5saW5lPW5lLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYobi5ibG9jaz1nZS5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9uLmlubGluZT1uZS5icmVha3M6bi5pbmxpbmU9bmUuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1ufXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6Z2UsaW5saW5lOm5lfX1zdGF0aWMgbGV4KHQsbil7cmV0dXJuIG5ldyBLbyhuKS5sZXgodCl9c3RhdGljIGxleElubGluZSh0LG4pe3JldHVybiBuZXcgS28obikuaW5saW5lVG9rZW5zKHQpfWxleCh0KXt0PXQucmVwbGFjZSgvXHJcbnxcci9nLGAKYCksdGhpcy5ibG9ja1Rva2Vucyh0LHRoaXMudG9rZW5zKTtsZXQgbjtmb3IoO249dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhuLnNyYyxuLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKHQsbj1bXSl7dGhpcy5vcHRpb25zLnBlZGFudGljP3Q9dC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6dD10LnJlcGxhY2UoL14oICopKFx0KykvZ20sKGEsbCxjKT0+bCsiICAgICIucmVwZWF0KGMubGVuZ3RoKSk7bGV0IHIsbyxpLHM7Zm9yKDt0OylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShhPT4ocj1hLmNhbGwoe2xleGVyOnRoaXN9LHQsbikpPyh0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpLCEwKTohMSkpKXtpZihyPXRoaXMudG9rZW5pemVyLnNwYWNlKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksci5yYXcubGVuZ3RoPT09MSYmbi5sZW5ndGg+MD9uW24ubGVuZ3RoLTFdLnJhdys9YApgOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmNvZGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxvPW5bbi5sZW5ndGgtMV0sbyYmKG8udHlwZT09PSJwYXJhZ3JhcGgifHxvLnR5cGU9PT0idGV4dCIpPyhvLnJhdys9YApgK3IucmF3LG8udGV4dCs9YApgK3IudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1vLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmZlbmNlcyh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmhlYWRpbmcodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5ocih0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5saXN0KHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuaHRtbCh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmRlZih0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG89bltuLmxlbmd0aC0xXSxvJiYoby50eXBlPT09InBhcmFncmFwaCJ8fG8udHlwZT09PSJ0ZXh0Iik/KG8ucmF3Kz1gCmArci5yYXcsby50ZXh0Kz1gCmArci5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9by50ZXh0KTp0aGlzLnRva2Vucy5saW5rc1tyLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tyLnRhZ109e2hyZWY6ci5ocmVmLHRpdGxlOnIudGl0bGV9KTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnRhYmxlKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYoaT10LHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgYT0xLzA7Y29uc3QgbD10LnNsaWNlKDEpO2xldCBjO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaCh1PT57Yz11LmNhbGwoe2xleGVyOnRoaXN9LGwpLHR5cGVvZiBjPT0ibnVtYmVyIiYmYz49MCYmKGE9TWF0aC5taW4oYSxjKSl9KSxhPDEvMCYmYT49MCYmKGk9dC5zdWJzdHJpbmcoMCxhKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKHI9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGkpKSl7bz1uW24ubGVuZ3RoLTFdLHMmJm8udHlwZT09PSJwYXJhZ3JhcGgiPyhvLnJhdys9YApgK3IucmF3LG8udGV4dCs9YApgK3IudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPW8udGV4dCk6bi5wdXNoKHIpLHM9aS5sZW5ndGghPT10Lmxlbmd0aCx0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCk7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50ZXh0KHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbz1uW24ubGVuZ3RoLTFdLG8mJm8udHlwZT09PSJ0ZXh0Ij8oby5yYXcrPWAKYCtyLnJhdyxvLnRleHQrPWAKYCtyLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1vLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZih0KXtjb25zdCBhPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrdC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoYSk7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYSl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxufWlubGluZSh0LG49W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzp0LHRva2VuczpufSksbn1pbmxpbmVUb2tlbnModCxuPVtdKXtsZXQgcixvLGkscz10LGEsbCxjO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCB1PU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZih1Lmxlbmd0aD4wKWZvcig7KGE9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhzKSkhPW51bGw7KXUuaW5jbHVkZXMoYVswXS5zbGljZShhWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYocz1zLnNsaWNlKDAsYS5pbmRleCkrIlsiKyJhIi5yZXBlYXQoYVswXS5sZW5ndGgtMikrIl0iK3Muc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDsoYT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMocykpIT1udWxsOylzPXMuc2xpY2UoMCxhLmluZGV4KSsiWyIrImEiLnJlcGVhdChhWzBdLmxlbmd0aC0yKSsiXSIrcy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDsoYT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhzKSkhPW51bGw7KXM9cy5zbGljZSgwLGEuaW5kZXgpKyIrKyIrcy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO3Q7KWlmKGx8fChjPSIiKSxsPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUodT0+KHI9dS5jYWxsKHtsZXhlcjp0aGlzfSx0LG4pKT8odD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKSwhMCk6ITEpKSl7aWYocj10aGlzLnRva2VuaXplci5lc2NhcGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50YWcodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxvPW5bbi5sZW5ndGgtMV0sbyYmci50eXBlPT09InRleHQiJiZvLnR5cGU9PT0idGV4dCI/KG8ucmF3Kz1yLnJhdyxvLnRleHQrPXIudGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGluayh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnJlZmxpbmsodCx0aGlzLnRva2Vucy5saW5rcykpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxvPW5bbi5sZW5ndGgtMV0sbyYmci50eXBlPT09InRleHQiJiZvLnR5cGU9PT0idGV4dCI/KG8ucmF3Kz1yLnJhdyxvLnRleHQrPXIudGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcodCxzLGMpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4odCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5icih0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmRlbCh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKHI9dGhpcy50b2tlbml6ZXIudXJsKHQpKSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihpPXQsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgdT0xLzA7Y29uc3QgZD10LnNsaWNlKDEpO2xldCBmO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2gocD0+e2Y9cC5jYWxsKHtsZXhlcjp0aGlzfSxkKSx0eXBlb2YgZj09Im51bWJlciImJmY+PTAmJih1PU1hdGgubWluKHUsZikpfSksdTwxLzAmJnU+PTAmJihpPXQuc3Vic3RyaW5nKDAsdSsxKSl9aWYocj10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGkpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksci5yYXcuc2xpY2UoLTEpIT09Il8iJiYoYz1yLnJhdy5zbGljZSgtMSkpLGw9ITAsbz1uW24ubGVuZ3RoLTFdLG8mJm8udHlwZT09PSJ0ZXh0Ij8oby5yYXcrPXIucmF3LG8udGV4dCs9ci50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYodCl7Y29uc3QgdT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK3QuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKHUpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKHUpfX1yZXR1cm4gbn19Y2xhc3MgeG17Y29uc3RydWN0b3IodCl7dnQodGhpcywib3B0aW9ucyIpO3RoaXMub3B0aW9ucz10fHx4bH1jb2RlKHQsbixyKXt2YXIgaTtjb25zdCBvPShpPShufHwiIikubWF0Y2goL15cUyovKSk9PW51bGw/dm9pZCAwOmlbMF07cmV0dXJuIHQ9dC5yZXBsYWNlKC9cbiQvLCIiKStgCmAsbz8nPHByZT48Y29kZSBjbGFzcz0ibGFuZ3VhZ2UtJyt4cihvKSsnIj4nKyhyP3Q6eHIodCwhMCkpK2A8L2NvZGU+PC9wcmU+CmA6IjxwcmU+PGNvZGU+Iisocj90OnhyKHQsITApKStgPC9jb2RlPjwvcHJlPgpgfWJsb2NrcXVvdGUodCl7cmV0dXJuYDxibG9ja3F1b3RlPgoke3R9PC9ibG9ja3F1b3RlPgpgfWh0bWwodCxuKXtyZXR1cm4gdH1oZWFkaW5nKHQsbixyKXtyZXR1cm5gPGgke259PiR7dH08L2gke259PgpgfWhyKCl7cmV0dXJuYDxocj4KYH1saXN0KHQsbixyKXtjb25zdCBvPW4/Im9sIjoidWwiLGk9biYmciE9PTE/JyBzdGFydD0iJytyKyciJzoiIjtyZXR1cm4iPCIrbytpK2A+CmArdCsiPC8iK28rYD4KYH1saXN0aXRlbSh0LG4scil7cmV0dXJuYDxsaT4ke3R9PC9saT4KYH1jaGVja2JveCh0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94Ij4nfXBhcmFncmFwaCh0KXtyZXR1cm5gPHA+JHt0fTwvcD4KYH10YWJsZSh0LG4pe3JldHVybiBuJiYobj1gPHRib2R5PiR7bn08L3Rib2R5PmApLGA8dGFibGU+Cjx0aGVhZD4KYCt0K2A8L3RoZWFkPgpgK24rYDwvdGFibGU+CmB9dGFibGVyb3codCl7cmV0dXJuYDx0cj4KJHt0fTwvdHI+CmB9dGFibGVjZWxsKHQsbil7Y29uc3Qgcj1uLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKG4uYWxpZ24/YDwke3J9IGFsaWduPSIke24uYWxpZ259Ij5gOmA8JHtyfT5gKSt0K2A8LyR7cn0+CmB9c3Ryb25nKHQpe3JldHVybmA8c3Ryb25nPiR7dH08L3N0cm9uZz5gfWVtKHQpe3JldHVybmA8ZW0+JHt0fTwvZW0+YH1jb2Rlc3Bhbih0KXtyZXR1cm5gPGNvZGU+JHt0fTwvY29kZT5gfWJyKCl7cmV0dXJuIjxicj4ifWRlbCh0KXtyZXR1cm5gPGRlbD4ke3R9PC9kZWw+YH1saW5rKHQsbixyKXtjb25zdCBvPVNFKHQpO2lmKG89PT1udWxsKXJldHVybiByO3Q9bztsZXQgaT0nPGEgaHJlZj0iJyt0KyciJztyZXR1cm4gbiYmKGkrPScgdGl0bGU9IicrbisnIicpLGkrPSI+IityKyI8L2E+IixpfWltYWdlKHQsbixyKXtjb25zdCBvPVNFKHQpO2lmKG89PT1udWxsKXJldHVybiByO3Q9bztsZXQgaT1gPGltZyBzcmM9IiR7dH0iIGFsdD0iJHtyfSJgO3JldHVybiBuJiYoaSs9YCB0aXRsZT0iJHtufSJgKSxpKz0iPiIsaX10ZXh0KHQpe3JldHVybiB0fX1jbGFzcyBqMXtzdHJvbmcodCl7cmV0dXJuIHR9ZW0odCl7cmV0dXJuIHR9Y29kZXNwYW4odCl7cmV0dXJuIHR9ZGVsKHQpe3JldHVybiB0fWh0bWwodCl7cmV0dXJuIHR9dGV4dCh0KXtyZXR1cm4gdH1saW5rKHQsbixyKXtyZXR1cm4iIityfWltYWdlKHQsbixyKXtyZXR1cm4iIityfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIHFve2NvbnN0cnVjdG9yKHQpe3Z0KHRoaXMsIm9wdGlvbnMiKTt2dCh0aGlzLCJyZW5kZXJlciIpO3Z0KHRoaXMsInRleHRSZW5kZXJlciIpO3RoaXMub3B0aW9ucz10fHx4bCx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgeG0sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgajF9c3RhdGljIHBhcnNlKHQsbil7cmV0dXJuIG5ldyBxbyhuKS5wYXJzZSh0KX1zdGF0aWMgcGFyc2VJbmxpbmUodCxuKXtyZXR1cm4gbmV3IHFvKG4pLnBhcnNlSW5saW5lKHQpfXBhcnNlKHQsbj0hMCl7bGV0IHI9IiI7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2NvbnN0IGk9dFtvXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbaS50eXBlXSl7Y29uc3Qgcz1pLGE9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW3MudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHMpO2lmKGEhPT0hMXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMocy50eXBlKSl7cis9YXx8IiI7Y29udGludWV9fXN3aXRjaChpLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOntyKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWV9Y2FzZSJoZWFkaW5nIjp7Y29uc3Qgcz1pO3IrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKHMudG9rZW5zKSxzLmRlcHRoLF84KHRoaXMucGFyc2VJbmxpbmUocy50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSk7Y29udGludWV9Y2FzZSJjb2RlIjp7Y29uc3Qgcz1pO3IrPXRoaXMucmVuZGVyZXIuY29kZShzLnRleHQscy5sYW5nLCEhcy5lc2NhcGVkKTtjb250aW51ZX1jYXNlInRhYmxlIjp7Y29uc3Qgcz1pO2xldCBhPSIiLGw9IiI7Zm9yKGxldCB1PTA7dTxzLmhlYWRlci5sZW5ndGg7dSsrKWwrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUocy5oZWFkZXJbdV0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOnMuYWxpZ25bdV19KTthKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGwpO2xldCBjPSIiO2ZvcihsZXQgdT0wO3U8cy5yb3dzLmxlbmd0aDt1Kyspe2NvbnN0IGQ9cy5yb3dzW3VdO2w9IiI7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspbCs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShkW2ZdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpzLmFsaWduW2ZdfSk7Yys9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhsKX1yKz10aGlzLnJlbmRlcmVyLnRhYmxlKGEsYyk7Y29udGludWV9Y2FzZSJibG9ja3F1b3RlIjp7Y29uc3Qgcz1pLGE9dGhpcy5wYXJzZShzLnRva2Vucyk7cis9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGEpO2NvbnRpbnVlfWNhc2UibGlzdCI6e2NvbnN0IHM9aSxhPXMub3JkZXJlZCxsPXMuc3RhcnQsYz1zLmxvb3NlO2xldCB1PSIiO2ZvcihsZXQgZD0wO2Q8cy5pdGVtcy5sZW5ndGg7ZCsrKXtjb25zdCBmPXMuaXRlbXNbZF0scD1mLmNoZWNrZWQsbT1mLnRhc2s7bGV0IGc9IiI7aWYoZi50YXNrKXtjb25zdCB5PXRoaXMucmVuZGVyZXIuY2hlY2tib3goISFwKTtjP2YudG9rZW5zLmxlbmd0aD4wJiZmLnRva2Vuc1swXS50eXBlPT09InBhcmFncmFwaCI/KGYudG9rZW5zWzBdLnRleHQ9eSsiICIrZi50b2tlbnNbMF0udGV4dCxmLnRva2Vuc1swXS50b2tlbnMmJmYudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmZi50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGU9PT0idGV4dCImJihmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD15KyIgIitmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmYudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6eSsiICJ9KTpnKz15KyIgIn1nKz10aGlzLnBhcnNlKGYudG9rZW5zLGMpLHUrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oZyxtLCEhcCl9cis9dGhpcy5yZW5kZXJlci5saXN0KHUsYSxsKTtjb250aW51ZX1jYXNlImh0bWwiOntjb25zdCBzPWk7cis9dGhpcy5yZW5kZXJlci5odG1sKHMudGV4dCxzLmJsb2NrKTtjb250aW51ZX1jYXNlInBhcmFncmFwaCI6e2NvbnN0IHM9aTtyKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKHMudG9rZW5zKSk7Y29udGludWV9Y2FzZSJ0ZXh0Ijp7bGV0IHM9aSxhPXMudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUocy50b2tlbnMpOnMudGV4dDtmb3IoO28rMTx0Lmxlbmd0aCYmdFtvKzFdLnR5cGU9PT0idGV4dCI7KXM9dFsrK29dLGErPWAKYCsocy50b2tlbnM/dGhpcy5wYXJzZUlubGluZShzLnRva2Vucyk6cy50ZXh0KTtyKz1uP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKGEpOmE7Y29udGludWV9ZGVmYXVsdDp7Y29uc3Qgcz0nVG9rZW4gd2l0aCAiJytpLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihzKSwiIjt0aHJvdyBuZXcgRXJyb3Iocyl9fX1yZXR1cm4gcn1wYXJzZUlubGluZSh0LG4pe249bnx8dGhpcy5yZW5kZXJlcjtsZXQgcj0iIjtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Y29uc3QgaT10W29dO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tpLnR5cGVdKXtjb25zdCBzPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tpLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxpKTtpZihzIT09ITF8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoaS50eXBlKSl7cis9c3x8IiI7Y29udGludWV9fXN3aXRjaChpLnR5cGUpe2Nhc2UiZXNjYXBlIjp7Y29uc3Qgcz1pO3IrPW4udGV4dChzLnRleHQpO2JyZWFrfWNhc2UiaHRtbCI6e2NvbnN0IHM9aTtyKz1uLmh0bWwocy50ZXh0KTticmVha31jYXNlImxpbmsiOntjb25zdCBzPWk7cis9bi5saW5rKHMuaHJlZixzLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUocy50b2tlbnMsbikpO2JyZWFrfWNhc2UiaW1hZ2UiOntjb25zdCBzPWk7cis9bi5pbWFnZShzLmhyZWYscy50aXRsZSxzLnRleHQpO2JyZWFrfWNhc2Uic3Ryb25nIjp7Y29uc3Qgcz1pO3IrPW4uc3Ryb25nKHRoaXMucGFyc2VJbmxpbmUocy50b2tlbnMsbikpO2JyZWFrfWNhc2UiZW0iOntjb25zdCBzPWk7cis9bi5lbSh0aGlzLnBhcnNlSW5saW5lKHMudG9rZW5zLG4pKTticmVha31jYXNlImNvZGVzcGFuIjp7Y29uc3Qgcz1pO3IrPW4uY29kZXNwYW4ocy50ZXh0KTticmVha31jYXNlImJyIjp7cis9bi5icigpO2JyZWFrfWNhc2UiZGVsIjp7Y29uc3Qgcz1pO3IrPW4uZGVsKHRoaXMucGFyc2VJbmxpbmUocy50b2tlbnMsbikpO2JyZWFrfWNhc2UidGV4dCI6e2NvbnN0IHM9aTtyKz1uLnRleHQocy50ZXh0KTticmVha31kZWZhdWx0Ontjb25zdCBzPSdUb2tlbiB3aXRoICInK2kudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKHMpLCIiO3Rocm93IG5ldyBFcnJvcihzKX19fXJldHVybiByfX1jbGFzcyBSZHtjb25zdHJ1Y3Rvcih0KXt2dCh0aGlzLCJvcHRpb25zIik7dGhpcy5vcHRpb25zPXR8fHhsfXByZXByb2Nlc3ModCl7cmV0dXJuIHR9cG9zdHByb2Nlc3ModCl7cmV0dXJuIHR9fXZ0KFJkLCJwYXNzVGhyb3VnaEhvb2tzIixuZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIl0pKTt2YXIgV2YsdngsYWcsdk07Y2xhc3MgUDh7Y29uc3RydWN0b3IoLi4udCl7QnYodGhpcyxXZik7QnYodGhpcyxhZyk7dnQodGhpcywiZGVmYXVsdHMiLEwxKCkpO3Z0KHRoaXMsIm9wdGlvbnMiLHRoaXMuc2V0T3B0aW9ucyk7dnQodGhpcywicGFyc2UiLHdwKHRoaXMsV2YsdngpLmNhbGwodGhpcyxLby5sZXgscW8ucGFyc2UpKTt2dCh0aGlzLCJwYXJzZUlubGluZSIsd3AodGhpcyxXZix2eCkuY2FsbCh0aGlzLEtvLmxleElubGluZSxxby5wYXJzZUlubGluZSkpO3Z0KHRoaXMsIlBhcnNlciIscW8pO3Z0KHRoaXMsIlJlbmRlcmVyIix4bSk7dnQodGhpcywiVGV4dFJlbmRlcmVyIixqMSk7dnQodGhpcywiTGV4ZXIiLEtvKTt2dCh0aGlzLCJUb2tlbml6ZXIiLHltKTt2dCh0aGlzLCJIb29rcyIsUmQpO3RoaXMudXNlKC4uLnQpfXdhbGtUb2tlbnModCxuKXt2YXIgbyxpO2xldCByPVtdO2Zvcihjb25zdCBzIG9mIHQpc3dpdGNoKHI9ci5jb25jYXQobi5jYWxsKHRoaXMscykpLHMudHlwZSl7Y2FzZSJ0YWJsZSI6e2NvbnN0IGE9cztmb3IoY29uc3QgbCBvZiBhLmhlYWRlcilyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhsLnRva2VucyxuKSk7Zm9yKGNvbnN0IGwgb2YgYS5yb3dzKWZvcihjb25zdCBjIG9mIGwpcj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYy50b2tlbnMsbikpO2JyZWFrfWNhc2UibGlzdCI6e2NvbnN0IGE9cztyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLml0ZW1zLG4pKTticmVha31kZWZhdWx0Ontjb25zdCBhPXM7KGk9KG89dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zKT09bnVsbD92b2lkIDA6by5jaGlsZFRva2VucykhPW51bGwmJmlbYS50eXBlXT90aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbYS50eXBlXS5mb3JFYWNoKGw9PntyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhW2xdLG4pKX0pOmEudG9rZW5zJiYocj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS50b2tlbnMsbikpKX19cmV0dXJuIHJ9dXNlKC4uLnQpe2NvbnN0IG49dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gdC5mb3JFYWNoKHI9Pntjb25zdCBvPXsuLi5yfTtpZihvLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fG8uYXN5bmN8fCExLHIuZXh0ZW5zaW9ucyYmKHIuZXh0ZW5zaW9ucy5mb3JFYWNoKGk9PntpZighaS5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZigicmVuZGVyZXIiaW4gaSl7Y29uc3Qgcz1uLnJlbmRlcmVyc1tpLm5hbWVdO3M/bi5yZW5kZXJlcnNbaS5uYW1lXT1mdW5jdGlvbiguLi5hKXtsZXQgbD1pLnJlbmRlcmVyLmFwcGx5KHRoaXMsYSk7cmV0dXJuIGw9PT0hMSYmKGw9cy5hcHBseSh0aGlzLGEpKSxsfTpuLnJlbmRlcmVyc1tpLm5hbWVdPWkucmVuZGVyZXJ9aWYoInRva2VuaXplciJpbiBpKXtpZighaS5sZXZlbHx8aS5sZXZlbCE9PSJibG9jayImJmkubGV2ZWwhPT0iaW5saW5lIil0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTtjb25zdCBzPW5baS5sZXZlbF07cz9zLnVuc2hpZnQoaS50b2tlbml6ZXIpOm5baS5sZXZlbF09W2kudG9rZW5pemVyXSxpLnN0YXJ0JiYoaS5sZXZlbD09PSJibG9jayI/bi5zdGFydEJsb2NrP24uc3RhcnRCbG9jay5wdXNoKGkuc3RhcnQpOm4uc3RhcnRCbG9jaz1baS5zdGFydF06aS5sZXZlbD09PSJpbmxpbmUiJiYobi5zdGFydElubGluZT9uLnN0YXJ0SW5saW5lLnB1c2goaS5zdGFydCk6bi5zdGFydElubGluZT1baS5zdGFydF0pKX0iY2hpbGRUb2tlbnMiaW4gaSYmaS5jaGlsZFRva2VucyYmKG4uY2hpbGRUb2tlbnNbaS5uYW1lXT1pLmNoaWxkVG9rZW5zKX0pLG8uZXh0ZW5zaW9ucz1uKSxyLnJlbmRlcmVyKXtjb25zdCBpPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyB4bSh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgcyBpbiByLnJlbmRlcmVyKXtjb25zdCBhPXIucmVuZGVyZXJbc10sbD1zLGM9aVtsXTtpW2xdPSguLi51KT0+e2xldCBkPWEuYXBwbHkoaSx1KTtyZXR1cm4gZD09PSExJiYoZD1jLmFwcGx5KGksdSkpLGR8fCIifX1vLnJlbmRlcmVyPWl9aWYoci50b2tlbml6ZXIpe2NvbnN0IGk9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyB5bSh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgcyBpbiByLnRva2VuaXplcil7Y29uc3QgYT1yLnRva2VuaXplcltzXSxsPXMsYz1pW2xdO2lbbF09KC4uLnUpPT57bGV0IGQ9YS5hcHBseShpLHUpO3JldHVybiBkPT09ITEmJihkPWMuYXBwbHkoaSx1KSksZH19by50b2tlbml6ZXI9aX1pZihyLmhvb2tzKXtjb25zdCBpPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5ldyBSZDtmb3IoY29uc3QgcyBpbiByLmhvb2tzKXtjb25zdCBhPXIuaG9va3Nbc10sbD1zLGM9aVtsXTtSZC5wYXNzVGhyb3VnaEhvb2tzLmhhcyhzKT9pW2xdPXU9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoYS5jYWxsKGksdSkpLnRoZW4oZj0+Yy5jYWxsKGksZikpO2NvbnN0IGQ9YS5jYWxsKGksdSk7cmV0dXJuIGMuY2FsbChpLGQpfTppW2xdPSguLi51KT0+e2xldCBkPWEuYXBwbHkoaSx1KTtyZXR1cm4gZD09PSExJiYoZD1jLmFwcGx5KGksdSkpLGR9fW8uaG9va3M9aX1pZihyLndhbGtUb2tlbnMpe2NvbnN0IGk9dGhpcy5kZWZhdWx0cy53YWxrVG9rZW5zLHM9ci53YWxrVG9rZW5zO28ud2Fsa1Rva2Vucz1mdW5jdGlvbihhKXtsZXQgbD1bXTtyZXR1cm4gbC5wdXNoKHMuY2FsbCh0aGlzLGEpKSxpJiYobD1sLmNvbmNhdChpLmNhbGwodGhpcyxhKSkpLGx9fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ub319KSx0aGlzfXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4udH0sdGhpc31sZXhlcih0LG4pe3JldHVybiBLby5sZXgodCxuPz90aGlzLmRlZmF1bHRzKX1wYXJzZXIodCxuKXtyZXR1cm4gcW8ucGFyc2UodCxuPz90aGlzLmRlZmF1bHRzKX19V2Y9bmV3IFdlYWtTZXQsdng9ZnVuY3Rpb24odCxuKXtyZXR1cm4ocixvKT0+e2NvbnN0IGk9ey4uLm99LHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaX07dGhpcy5kZWZhdWx0cy5hc3luYz09PSEwJiZpLmFzeW5jPT09ITEmJihzLnNpbGVudHx8Y29uc29sZS53YXJuKCJtYXJrZWQoKTogVGhlIGFzeW5jIG9wdGlvbiB3YXMgc2V0IHRvIHRydWUgYnkgYW4gZXh0ZW5zaW9uLiBUaGUgYXN5bmM6IGZhbHNlIG9wdGlvbiBzZW50IHRvIHBhcnNlIHdpbGwgYmUgaWdub3JlZC4iKSxzLmFzeW5jPSEwKTtjb25zdCBhPXdwKHRoaXMsYWcsdk0pLmNhbGwodGhpcywhIXMuc2lsZW50LCEhcy5hc3luYyk7aWYodHlwZW9mIHI+InUifHxyPT09bnVsbClyZXR1cm4gYShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYodHlwZW9mIHIhPSJzdHJpbmciKXJldHVybiBhKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihzLmhvb2tzJiYocy5ob29rcy5vcHRpb25zPXMpLHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzLmhvb2tzP3MuaG9va3MucHJlcHJvY2VzcyhyKTpyKS50aGVuKGw9PnQobCxzKSkudGhlbihsPT5zLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKGwscy53YWxrVG9rZW5zKSkudGhlbigoKT0+bCk6bCkudGhlbihsPT5uKGwscykpLnRoZW4obD0+cy5ob29rcz9zLmhvb2tzLnBvc3Rwcm9jZXNzKGwpOmwpLmNhdGNoKGEpO3RyeXtzLmhvb2tzJiYocj1zLmhvb2tzLnByZXByb2Nlc3MocikpO2NvbnN0IGw9dChyLHMpO3Mud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKGwscy53YWxrVG9rZW5zKTtsZXQgYz1uKGwscyk7cmV0dXJuIHMuaG9va3MmJihjPXMuaG9va3MucG9zdHByb2Nlc3MoYykpLGN9Y2F0Y2gobCl7cmV0dXJuIGEobCl9fX0sYWc9bmV3IFdlYWtTZXQsdk09ZnVuY3Rpb24odCxuKXtyZXR1cm4gcj0+e2lmKHIubWVzc2FnZSs9YApQbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC5gLHQpe2NvbnN0IG89IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIreHIoci5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gbj9Qcm9taXNlLnJlc29sdmUobyk6b31pZihuKXJldHVybiBQcm9taXNlLnJlamVjdChyKTt0aHJvdyByfX07Y29uc3Qgb2w9bmV3IFA4O2Z1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIG9sLnBhcnNlKGUsdCl9ZHQub3B0aW9ucz1kdC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvbC5zZXRPcHRpb25zKGUpLGR0LmRlZmF1bHRzPW9sLmRlZmF1bHRzLGhNKGR0LmRlZmF1bHRzKSxkdH07ZHQuZ2V0RGVmYXVsdHM9TDE7ZHQuZGVmYXVsdHM9eGw7ZHQudXNlPWZ1bmN0aW9uKC4uLmUpe3JldHVybiBvbC51c2UoLi4uZSksZHQuZGVmYXVsdHM9b2wuZGVmYXVsdHMsaE0oZHQuZGVmYXVsdHMpLGR0fTtkdC53YWxrVG9rZW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9sLndhbGtUb2tlbnMoZSx0KX07ZHQucGFyc2VJbmxpbmU9b2wucGFyc2VJbmxpbmU7ZHQuUGFyc2VyPXFvO2R0LnBhcnNlcj1xby5wYXJzZTtkdC5SZW5kZXJlcj14bTtkdC5UZXh0UmVuZGVyZXI9ajE7ZHQuTGV4ZXI9S287ZHQubGV4ZXI9S28ubGV4O2R0LlRva2VuaXplcj15bTtkdC5Ib29rcz1SZDtkdC5wYXJzZT1kdDtkdC5vcHRpb25zO2R0LnNldE9wdGlvbnM7ZHQudXNlO2R0LndhbGtUb2tlbnM7ZHQucGFyc2VJbmxpbmU7cW8ucGFyc2U7Y29uc3QgTTg9S28ubGV4O2Z1bmN0aW9uIHlNKGUpe3JldHVybiB2MShlKX1mdW5jdGlvbiB5eChlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKG1lKGUpPT09Im9iamVjdCImJm1lKHQpPT09Im9iamVjdCImJmUhPT1udWxsJiZ0IT09bnVsbCl7aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbilpZigheXgoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1lbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpJiYhQXJyYXkuaXNBcnJheSh0KSl7dmFyIHI9T2JqZWN0LmVudHJpZXMoZSk7aWYoci5sZW5ndGghPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTAsaT1yO288aS5sZW5ndGg7bysrKXt2YXIgcz1LbihpW29dLDIpLGE9c1swXSxsPXNbMV0sYz10W2FdO2lmKGM9PT12b2lkIDB8fCF5eChsLGMpKXJldHVybiExfXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB4eChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcCh4eCk6bWUoZSk9PT0ib2JqZWN0IiYmZSE9PW51bGw/T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLm1hcChmdW5jdGlvbih0KXt2YXIgbj1Lbih0LDIpLHI9blswXSxvPW5bMV07cmV0dXJuW3IseHgobyldfSkpOmV9ZnVuY3Rpb24gejEoZSl7cmV0dXJuL14oMHxbMS05XVswLTldKikkL2cudGVzdChlKT9fbihOdW1iZXIoZSkpOlZ0KG5ldyBUcignSW52YWxpZCBhcnJheSBpbmRleCAiJy5jb25jYXQoZSwnIicpKSl9ZnVuY3Rpb24gUjgoZSx0KXtyZXR1cm4gZT09PSItIj9fbih0Lmxlbmd0aCk6ZG4oejEoZSksQ2coZnVuY3Rpb24obil7cmV0dXJuIG48PXQubGVuZ3RofSxmdW5jdGlvbigpe3JldHVybiBuZXcgVHIoIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHMiKX0pKX1mdW5jdGlvbiB4TShlLHQpe3JldHVybiBkbih6MShlKSxDZyhmdW5jdGlvbihuKXtyZXR1cm4gbjx0Lmxlbmd0aH0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRyKCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzIil9KSl9ZnVuY3Rpb24gTjgoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGRuKHhNKHQsZSksSHIoZnVuY3Rpb24obyl7dmFyIGk9ZVtvXTtyZXR1cm4gZVtvXT1uLGl9KSk7aWYobWUoZSk9PT0ib2JqZWN0IiYmZSE9PW51bGwpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkpe3ZhciByPWVbdF07cmV0dXJuIGVbdF09bixfbihyKX1lbHNlIHJldHVybiBjb25zb2xlLmxvZyh7bm9kZTplfSksVnQobmV3IFRyKCJDYW5ub3QgcmVwbGFjZSBvYmplY3QgZWxlbWVudCB3aGljaCBkb2VzIG5vdCBleGlzdCIpKTtyZXR1cm4gVnQobmV3IFRyKCJDYW5ub3QgcmVwbGFjZSBpbiBub24tb2JqZWN0L2FycmF5IikpfWZ1bmN0aW9uICQ4KGUsdCxuKXtyZXR1cm4geU0odCk/ZG4oRjEoZSx0KSxKYShmdW5jdGlvbihyKXt2YXIgbz1LbihyLDIpLGk9b1swXSxzPW9bMV07cmV0dXJuIE44KGkscyxuKX0pLEhyKGZ1bmN0aW9uKHIpe3JldHVybltlLHJdfSkpOl9uKFtuLGVdKX1mdW5jdGlvbiBiTShlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2RuKHoxKHQpLEphKGZ1bmN0aW9uKG4pe3JldHVybiBuPj1lLmxlbmd0aD9WdChuZXcgVHIoIkFycmF5IGluZGV4IG91dCBvZiBib3VuZHMiKSk6X24oZVtuXSl9KSk6bWUoZSk9PT0ib2JqZWN0IiYmZSE9PW51bGw/T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCk/X24oZVt0XSk6X24odm9pZCAwKTpWdChuZXcgVHIoIkNhbm5vdCBhY2Nlc3Mgbm9uLW9iamVjdC9hcnJheSIpKX1mdW5jdGlvbiBGMShlLHQpe2Zvcih2YXIgbj1lLHI9dFswXSxvPTA7bzx0Lmxlbmd0aC0xOysrbyxyPXRbb10pe3ZhciBpPWJNKG4scik7aWYoX2coaSkpcmV0dXJuIGk7aWYoaS52YWx1ZT09PXZvaWQgMClyZXR1cm4gVnQobmV3IFRyKCJQYXRoIHJlZmVycyB0byBub24tZXhpc3Rpbmcgb2JqZWN0L2FycmF5IikpO249aS52YWx1ZX1yZXR1cm4gX24oW24scl0pfWZ1bmN0aW9uIHl5KGUsdCl7cmV0dXJuIGRuKHQseTEoZnVuY3Rpb24obixyKXtyZXR1cm4gZG4oYk0obixyKSxDZyhmdW5jdGlvbihvKXtyZXR1cm4gbyE9PXZvaWQgMH0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRyKCJQYXRoIHJlZmVycyB0byBub24tZXhpc3Rpbmcgb2JqZWN0L2FycmF5Iil9KSl9LGUpKX1mdW5jdGlvbiBBOChlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGRuKHhNKHQsZSksSHIoZnVuY3Rpb24ocil7dmFyIG89ZS5zcGxpY2UociwxKSxpPUtuKG8sMSkscz1pWzBdO3JldHVybiBzfSkpO2lmKG1lKGUpPT09Im9iamVjdCImJmUhPT1udWxsJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSl7dmFyIG49ZVt0XTtyZXR1cm4gZGVsZXRlIGVbdF0sX24obil9cmV0dXJuIFZ0KG5ldyBUcigiQ2Fubm90IHJlbW92ZSBmcm9tIG5vbi1vYmplY3QvYXJyYXkiKSl9ZnVuY3Rpb24gX0UoZSx0KXtyZXR1cm4gZG4oRjEoZSx0KSxKYShmdW5jdGlvbihuKXt2YXIgcj1LbihuLDIpLG89clswXSxpPXJbMV07cmV0dXJuIEE4KG8saSl9KSl9ZnVuY3Rpb24gRDgoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGRuKFI4KHQsZSksSHIoZnVuY3Rpb24obyl7ZS5zcGxpY2UobywwLG4pfSkpO2lmKG1lKGUpPT09Im9iamVjdCImJmUhPT1udWxsKXt2YXIgcjtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJihyPWVbdF0pLGVbdF09bixfbihyKX1yZXR1cm4gVnQobmV3IFRyKCJDYW5ub3QgYWRkIHRvIG5vbi1vYmplY3QvYXJyYXkiKSl9ZnVuY3Rpb24geHkoZSx0LG4pe3JldHVybiB5TSh0KT9kbihGMShlLHQpLEphKGZ1bmN0aW9uKHIpe3ZhciBvPUtuKHIsMiksaT1vWzBdLHM9b1sxXTtyZXR1cm4gRDgoaSxzLG4pfSksSHIoZnVuY3Rpb24ocil7cmV0dXJuW2Uscl19KSk6X24oW24sZV0pfWZ1bmN0aW9uIFZwKGUpe3ZhciB0PUtuKGUsMSksbj10WzBdO3JldHVybiBufXZhciBJOD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtubih0aGlzLGUpfXJldHVybiBybihlLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKG4scil7cmV0dXJuIHl5KG4scil9fSx7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZG4oeHkobixyLG8pLEhyKFZwKSl9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKG4scil7cmV0dXJuIGRuKF9FKG4sciksSHIoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX19LHtrZXk6InJlcGxhY2UiLHZhbHVlOmZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZG4oJDgobixyLG8pLEhyKFZwKSl9fSx7a2V5OiJtb3ZlIix2YWx1ZTpmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGRuKF9FKG4sciksSmEoZnVuY3Rpb24oaSl7cmV0dXJuIHh5KG4sbyxpKX0pLEhyKFZwKSl9fSx7a2V5OiJjb3B5Iix2YWx1ZTpmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGRuKHl5KG4sciksSmEoZnVuY3Rpb24oaSl7cmV0dXJuIHh5KG4sbyx4eChpKSl9KSxIcihWcCkpfX0se2tleToidGVzdCIsdmFsdWU6ZnVuY3Rpb24obixyLG8pe3JldHVybiBkbih5eShuLHIpLEhyKGZ1bmN0aW9uKGkpe3JldHVybiB5eChvLGkpfSkpfX1dKSxlfSgpO2Z1bmN0aW9uIEw4KGUsdCxuKXtzd2l0Y2gobi5vcCl7Y2FzZSJhZGQiOnJldHVybiB0LmFkZChlLG4ucGF0aCxuLnZhbHVlKTtjYXNlInJlbW92ZSI6cmV0dXJuIHQucmVtb3ZlKGUsbi5wYXRoKTtjYXNlInJlcGxhY2UiOnJldHVybiB0LnJlcGxhY2UoZSxuLnBhdGgsbi52YWx1ZSk7Y2FzZSJtb3ZlIjpyZXR1cm4gdC5tb3ZlKGUsbi5mcm9tLG4ucGF0aCk7Y2FzZSJjb3B5IjpyZXR1cm4gdC5jb3B5KGUsbi5mcm9tLG4ucGF0aCk7Y2FzZSJ0ZXN0IjpyZXR1cm4gdC50ZXN0KGUsbi5wYXRoLG4udmFsdWUpP19uKGUpOlZ0KG5ldyBUcigiVGVzdCBmYWlsZWQiKSk7Y2FzZSJmaWxlIjpyZXR1cm4gVnQobmV3IFRyKCJDYW5ub3QgYXBwbHkgYSBmaWxlIHBhdGNoIGhlcmUiKSl9fWZ1bmN0aW9uIGo4KGUsdCxuKXtyZXR1cm4gZG4obix5MShmdW5jdGlvbihyLG8pe3JldHVybiBMOChyLHQsbyl9LGUpKX1mdW5jdGlvbiB6OChlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8IWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKG4hPT12b2lkIDApe3ZhciByPW4uY2FsbChlLHR8fCJkZWZhdWx0Iik7aWYodHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKHQ9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiB3TShlKXt2YXIgdD16OChlLCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wiP3Q6U3RyaW5nKHQpfWZ1bmN0aW9uIFd0KGUsdCxuKXtyZXR1cm4gdD13TSh0KSx0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIGJ4KGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gQjEoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGJ4KGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKG49PT0iT2JqZWN0IiYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09Ik1hcCJ8fG49PT0iU2V0IilyZXR1cm4gQXJyYXkuZnJvbShlKTtpZihuPT09IkFyZ3VtZW50cyJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBieChlLHQpfX1mdW5jdGlvbiBVMShlLHQpe3ZhciBuPXR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheShlKXx8KG49QjEoZSkpfHx0JiZlJiZ0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiKXtuJiYoZT1uKTt2YXIgcj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiByPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtyKytdfX0sZTpmdW5jdGlvbihsKXt0aHJvdyBsfSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBpPSEwLHM9ITEsYTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGw9bi5uZXh0KCk7cmV0dXJuIGk9bC5kb25lLGx9LGU6ZnVuY3Rpb24obCl7cz0hMCxhPWx9LGY6ZnVuY3Rpb24oKXt0cnl7IWkmJm4ucmV0dXJuIT1udWxsJiZuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIEY4KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGJ4KGUpfWZ1bmN0aW9uIEI4KGUpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZlW1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fGVbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbShlKX1mdW5jdGlvbiBVOCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gZ2YoZSl7cmV0dXJuIEY4KGUpfHxCOChlKXx8QjEoZSl8fFU4KCl9ZnVuY3Rpb24gVjgoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX1mdW5jdGlvbiBIOChlLHQpe3ZhciBuPWU9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobiE9bnVsbCl7dmFyIHIsbyxpLHMsYT1bXSxsPSEwLGM9ITE7dHJ5e2lmKGk9KG49bi5jYWxsKGUpKS5uZXh0LHQ9PT0wKXtpZihPYmplY3QobikhPT1uKXJldHVybjtsPSExfWVsc2UgZm9yKDshKGw9KHI9aS5jYWxsKG4pKS5kb25lKSYmKGEucHVzaChyLnZhbHVlKSxhLmxlbmd0aCE9PXQpO2w9ITApO31jYXRjaCh1KXtjPSEwLG89dX1maW5hbGx5e3RyeXtpZighbCYmbi5yZXR1cm4hPW51bGwmJihzPW4ucmV0dXJuKCksT2JqZWN0KHMpIT09cykpcmV0dXJufWZpbmFsbHl7aWYoYyl0aHJvdyBvfX1yZXR1cm4gYX19ZnVuY3Rpb24gVzgoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gd3goZSx0KXtyZXR1cm4gVjgoZSl8fEg4KGUsdCl8fEIxKGUsdCl8fFc4KCl9dmFyIFNNPXt4M2Q6ImFwcGxpY2F0aW9uL3ZuZC5oem4tM2QtY3Jvc3N3b3JkIiwiM2dwIjoidmlkZW8vM2dwcCIsIjNnMiI6InZpZGVvLzNncHAyIixtc2VxOiJhcHBsaWNhdGlvbi92bmQubXNlcSIscHduOiJhcHBsaWNhdGlvbi92bmQuM20ucG9zdC1pdC1ub3RlcyIscGxiOiJhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctbGFyZ2UiLHBzYjoiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsIixwdmI6ImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnBpYy1idy12YXIiLHRjYXA6ImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi50Y2FwIiwiN3oiOiJhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQiLGFidzoiYXBwbGljYXRpb24veC1hYml3b3JkIixhY2U6ImFwcGxpY2F0aW9uL3gtYWNlLWNvbXByZXNzZWQiLGFjYzoiYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjIixhY3U6ImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbCIsYXRjOiJhcHBsaWNhdGlvbi92bmQuYWN1Y29ycCIsYWRwOiJhdWRpby9hZHBjbSIsYWFiOiJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluIixhYW06ImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1tYXAiLGFhczoiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLXNlZyIsYWlyOiJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWlyLWFwcGxpY2F0aW9uLWluc3RhbGxlci1wYWNrYWdlK3ppcCIsc3dmOiJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsZnhwOiJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZnhwIixwZGY6ImFwcGxpY2F0aW9uL3BkZiIscHBkOiJhcHBsaWNhdGlvbi92bmQuY3Vwcy1wcGQiLGRpcjoiYXBwbGljYXRpb24veC1kaXJlY3RvciIseGRwOiJhcHBsaWNhdGlvbi92bmQuYWRvYmUueGRwK3htbCIseGZkZjoiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhmZGYiLGFhYzoiYXVkaW8veC1hYWMiLGFoZWFkOiJhcHBsaWNhdGlvbi92bmQuYWhlYWQuc3BhY2UiLGF6ZjoiYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6ZiIsYXpzOiJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpzIixhenc6ImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2siLGFtaToiYXBwbGljYXRpb24vdm5kLmFtaWdhLmFtaSIsIk4vQSI6ImFwcGxpY2F0aW9uL2FuZHJldy1pbnNldCIsYXBrOiJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmUiLGNpaToiYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1jZXJ0aWZpY2F0ZS1pc3N1ZS1pbml0aWF0aW9uIixmdGk6ImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItZnVuZHMtdHJhbnNmZXItaW5pdGlhdGlvbiIsYXR4OiJhcHBsaWNhdGlvbi92bmQuYW50aXguZ2FtZS1jb21wb25lbnQiLGRtZzoiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2UiLG1wa2c6ImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5pbnN0YWxsZXIreG1sIixhdzoiYXBwbGljYXRpb24vYXBwbGl4d2FyZSIsbXAzOiJhdWRpby9tcGVnIixsZXM6ImFwcGxpY2F0aW9uL3ZuZC5oaGUubGVzc29uLXBsYXllciIsc3dpOiJhcHBsaWNhdGlvbi92bmQuYXJpc3RhbmV0d29ya3Muc3dpIixzOiJ0ZXh0L3gtYXNtIixhdG9tY2F0OiJhcHBsaWNhdGlvbi9hdG9tY2F0K3htbCIsYXRvbXN2YzoiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWwiLGF0b206ImFwcGxpY2F0aW9uL2F0b20reG1sIixhYzoiYXBwbGljYXRpb24vcGtpeC1hdHRyLWNlcnQiLGFpZjoiYXVkaW8veC1haWZmIixhdmk6InZpZGVvL3gtbXN2aWRlbyIsYWVwOiJhcHBsaWNhdGlvbi92bmQuYXVkaW9ncmFwaCIsZHhmOiJpbWFnZS92bmQuZHhmIixkd2Y6Im1vZGVsL3ZuZC5kd2YiLHBhcjoidGV4dC9wbGFpbi1iYXMiLGJjcGlvOiJhcHBsaWNhdGlvbi94LWJjcGlvIixiaW46ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsYm1wOiJpbWFnZS9ibXAiLHRvcnJlbnQ6ImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsY29kOiJhcHBsaWNhdGlvbi92bmQucmltLmNvZCIsbXBtOiJhcHBsaWNhdGlvbi92bmQuYmx1ZWljZS5tdWx0aXBhc3MiLGJtaToiYXBwbGljYXRpb24vdm5kLmJtaSIsc2g6ImFwcGxpY2F0aW9uL3gtc2giLGJ0aWY6ImltYWdlL3Bycy5idGlmIixyZXA6ImFwcGxpY2F0aW9uL3ZuZC5idXNpbmVzc29iamVjdHMiLGJ6OiJhcHBsaWNhdGlvbi94LWJ6aXAiLGJ6MjoiYXBwbGljYXRpb24veC1iemlwMiIsY3NoOiJhcHBsaWNhdGlvbi94LWNzaCIsYzoidGV4dC94LWMiLGNkeG1sOiJhcHBsaWNhdGlvbi92bmQuY2hlbWRyYXcreG1sIixjc3M6InRleHQvY3NzIixjZHg6ImNoZW1pY2FsL3gtY2R4IixjbWw6ImNoZW1pY2FsL3gtY21sIixjc21sOiJjaGVtaWNhbC94LWNzbWwiLGNkYmNtc2c6ImFwcGxpY2F0aW9uL3ZuZC5jb250YWN0LmNtc2ciLGNsYToiYXBwbGljYXRpb24vdm5kLmNsYXltb3JlIixjNGc6ImFwcGxpY2F0aW9uL3ZuZC5jbG9uay5jNGdyb3VwIixzdWI6ImltYWdlL3ZuZC5kdmIuc3VidGl0bGUiLGNkbWlhOiJhcHBsaWNhdGlvbi9jZG1pLWNhcGFiaWxpdHkiLGNkbWljOiJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lciIsY2RtaWQ6ImFwcGxpY2F0aW9uL2NkbWktZG9tYWluIixjZG1pbzoiYXBwbGljYXRpb24vY2RtaS1vYmplY3QiLGNkbWlxOiJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlIixjMTFhbWM6ImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnIixjMTFhbXo6ImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnLXBrZyIscmFzOiJpbWFnZS94LWNtdS1yYXN0ZXIiLGRhZToibW9kZWwvdm5kLmNvbGxhZGEreG1sIixjc3Y6InRleHQvY3N2IixjcHQ6ImFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvIix3bWxjOiJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiLGNnbToiaW1hZ2UvY2dtIixpY2U6IngtY29uZmVyZW5jZS94LWNvb2x0YWxrIixjbXg6ImltYWdlL3gtY214Iix4YXI6ImFwcGxpY2F0aW9uL3ZuZC54YXJhIixjbWM6ImFwcGxpY2F0aW9uL3ZuZC5jb3Ntb2NhbGxlciIsY3BpbzoiYXBwbGljYXRpb24veC1jcGlvIixjbGt4OiJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlciIsY2xrazoiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIua2V5Ym9hcmQiLGNsa3A6ImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnBhbGV0dGUiLGNsa3Q6ImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnRlbXBsYXRlIixjbGt3OiJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci53b3JkYmFuayIsd2JzOiJhcHBsaWNhdGlvbi92bmQuY3JpdGljYWx0b29scy53YnMreG1sIixjcnlwdG9ub3RlOiJhcHBsaWNhdGlvbi92bmQucmlnLmNyeXB0b25vdGUiLGNpZjoiY2hlbWljYWwveC1jaWYiLGNtZGY6ImNoZW1pY2FsL3gtY21kZiIsY3U6ImFwcGxpY2F0aW9uL2N1LXNlZW1lIixjd3c6ImFwcGxpY2F0aW9uL3Bycy5jd3ciLGN1cmw6InRleHQvdm5kLmN1cmwiLGRjdXJsOiJ0ZXh0L3ZuZC5jdXJsLmRjdXJsIixtY3VybDoidGV4dC92bmQuY3VybC5tY3VybCIsc2N1cmw6InRleHQvdm5kLmN1cmwuc2N1cmwiLGNhcjoiYXBwbGljYXRpb24vdm5kLmN1cmwuY2FyIixwY3VybDoiYXBwbGljYXRpb24vdm5kLmN1cmwucGN1cmwiLGNtcDoiYXBwbGljYXRpb24vdm5kLnllbGxvd3JpdmVyLWN1c3RvbS1tZW51Iixkc3NjOiJhcHBsaWNhdGlvbi9kc3NjK2RlciIseGRzc2M6ImFwcGxpY2F0aW9uL2Rzc2MreG1sIixkZWI6ImFwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UiLHV2YToiYXVkaW8vdm5kLmRlY2UuYXVkaW8iLHV2aToiaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpYyIsdXZoOiJ2aWRlby92bmQuZGVjZS5oZCIsdXZtOiJ2aWRlby92bmQuZGVjZS5tb2JpbGUiLHV2dToidmlkZW8vdm5kLnV2dnUubXA0Iix1dnA6InZpZGVvL3ZuZC5kZWNlLnBkIix1dnM6InZpZGVvL3ZuZC5kZWNlLnNkIix1dnY6InZpZGVvL3ZuZC5kZWNlLnZpZGVvIixkdmk6ImFwcGxpY2F0aW9uL3gtZHZpIixzZWVkOiJhcHBsaWNhdGlvbi92bmQuZmRzbi5zZWVkIixkdGI6ImFwcGxpY2F0aW9uL3gtZHRib29rK3htbCIscmVzOiJhcHBsaWNhdGlvbi94LWR0YnJlc291cmNlK3htbCIsYWl0OiJhcHBsaWNhdGlvbi92bmQuZHZiLmFpdCIsc3ZjOiJhcHBsaWNhdGlvbi92bmQuZHZiLnNlcnZpY2UiLGVvbDoiYXVkaW8vdm5kLmRpZ2l0YWwtd2luZHMiLGRqdnU6ImltYWdlL3ZuZC5kanZ1IixkdGQ6ImFwcGxpY2F0aW9uL3htbC1kdGQiLG1scDoiYXBwbGljYXRpb24vdm5kLmRvbGJ5Lm1scCIsd2FkOiJhcHBsaWNhdGlvbi94LWRvb20iLGRwZzoiYXBwbGljYXRpb24vdm5kLmRwZ3JhcGgiLGRyYToiYXVkaW8vdm5kLmRyYSIsZGZhYzoiYXBwbGljYXRpb24vdm5kLmRyZWFtZmFjdG9yeSIsZHRzOiJhdWRpby92bmQuZHRzIixkdHNoZDoiYXVkaW8vdm5kLmR0cy5oZCIsZHdnOiJpbWFnZS92bmQuZHdnIixnZW86ImFwcGxpY2F0aW9uL3ZuZC5keW5hZ2VvIixlczoiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIsbWFnOiJhcHBsaWNhdGlvbi92bmQuZWNvd2luLmNoYXJ0IixtbXI6ImltYWdlL3ZuZC5mdWppeGVyb3guZWRtaWNzLW1tciIscmxjOiJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1ybGMiLGV4aToiYXBwbGljYXRpb24vZXhpIixtZ3o6ImFwcGxpY2F0aW9uL3ZuZC5wcm90ZXVzLm1hZ2F6aW5lIixlcHViOiJhcHBsaWNhdGlvbi9lcHViK3ppcCIsZW1sOiJtZXNzYWdlL3JmYzgyMiIsbm1sOiJhcHBsaWNhdGlvbi92bmQuZW5saXZlbiIseHByOiJhcHBsaWNhdGlvbi92bmQuaXMteHByIix4aWY6ImltYWdlL3ZuZC54aWZmIix4ZmRsOiJhcHBsaWNhdGlvbi92bmQueGZkbCIsZW1tYToiYXBwbGljYXRpb24vZW1tYSt4bWwiLGV6MjoiYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtIixlejM6ImFwcGxpY2F0aW9uL3ZuZC5lenBpeC1wYWNrYWdlIixmc3Q6ImltYWdlL3ZuZC5mc3QiLGZ2dDoidmlkZW8vdm5kLmZ2dCIsZmJzOiJpbWFnZS92bmQuZmFzdGJpZHNoZWV0IixmZV9sYXVuY2g6ImFwcGxpY2F0aW9uL3ZuZC5kZW5vdm8uZmNzZWxheW91dC1saW5rIixmNHY6InZpZGVvL3gtZjR2IixmbHY6InZpZGVvL3gtZmx2IixmcHg6ImltYWdlL3ZuZC5mcHgiLG5weDoiaW1hZ2Uvdm5kLm5ldC1mcHgiLGZseDoidGV4dC92bmQuZm1pLmZsZXhzdG9yIixmbGk6InZpZGVvL3gtZmxpIixmdGM6ImFwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwIixmZGY6ImFwcGxpY2F0aW9uL3ZuZC5mZGYiLGY6InRleHQveC1mb3J0cmFuIixtaWY6ImFwcGxpY2F0aW9uL3ZuZC5taWYiLGZtOiJhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlciIsZmg6ImltYWdlL3gtZnJlZWhhbmQiLGZzYzoiYXBwbGljYXRpb24vdm5kLmZzYy53ZWJsYXVuY2giLGZuYzoiYXBwbGljYXRpb24vdm5kLmZyb2dhbnMuZm5jIixsdGY6ImFwcGxpY2F0aW9uL3ZuZC5mcm9nYW5zLmx0ZiIsZGRkOiJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRkZCIseGR3OiJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3JrcyIseGJkOiJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3Jrcy5iaW5kZXIiLG9hczoiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMiLG9hMjoiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMyIixvYTM6ImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzMyIsZmc1OiJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c2dwIixiaDI6ImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzcHJzIixzcGw6ImFwcGxpY2F0aW9uL3gtZnV0dXJlc3BsYXNoIixmenM6ImFwcGxpY2F0aW9uL3ZuZC5mdXp6eXNoZWV0IixnMzoiaW1hZ2UvZzNmYXgiLGdteDoiYXBwbGljYXRpb24vdm5kLmdteCIsZ3R3OiJtb2RlbC92bmQuZ3R3Iix0eGQ6ImFwcGxpY2F0aW9uL3ZuZC5nZW5vbWF0aXgudHV4ZWRvIixnZ2I6ImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS5maWxlIixnZ3Q6ImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sIixnZGw6Im1vZGVsL3ZuZC5nZGwiLGdleDoiYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyIixneHQ6ImFwcGxpY2F0aW9uL3ZuZC5nZW9uZXh0IixnMnc6ImFwcGxpY2F0aW9uL3ZuZC5nZW9wbGFuIixnM3c6ImFwcGxpY2F0aW9uL3ZuZC5nZW9zcGFjZSIsZ3NmOiJhcHBsaWNhdGlvbi94LWZvbnQtZ2hvc3RzY3JpcHQiLGJkZjoiYXBwbGljYXRpb24veC1mb250LWJkZiIsZ3RhcjoiYXBwbGljYXRpb24veC1ndGFyIix0ZXhpbmZvOiJhcHBsaWNhdGlvbi94LXRleGluZm8iLGdudW1lcmljOiJhcHBsaWNhdGlvbi94LWdudW1lcmljIixrbWw6ImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtZWFydGgua21sK3htbCIsa216OiJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmtteiIsZ3FmOiJhcHBsaWNhdGlvbi92bmQuZ3JhZmVxIixnaWY6ImltYWdlL2dpZiIsZ3Y6InRleHQvdm5kLmdyYXBodml6IixnYWM6ImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtYWNjb3VudCIsZ2hmOiJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWhlbHAiLGdpbToiYXBwbGljYXRpb24vdm5kLmdyb292ZS1pZGVudGl0eS1tZXNzYWdlIixncnY6ImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaW5qZWN0b3IiLGd0bToiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLW1lc3NhZ2UiLHRwbDoiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLXRlbXBsYXRlIix2Y2c6ImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdmNhcmQiLGgyNjE6InZpZGVvL2gyNjEiLGgyNjM6InZpZGVvL2gyNjMiLGgyNjQ6InZpZGVvL2gyNjQiLGhwaWQ6ImFwcGxpY2F0aW9uL3ZuZC5ocC1ocGlkIixocHM6ImFwcGxpY2F0aW9uL3ZuZC5ocC1ocHMiLGhkZjoiYXBwbGljYXRpb24veC1oZGYiLHJpcDoiYXVkaW8vdm5kLnJpcCIsaGJjaToiYXBwbGljYXRpb24vdm5kLmhiY2kiLGpsdDoiYXBwbGljYXRpb24vdm5kLmhwLWpseXQiLHBjbDoiYXBwbGljYXRpb24vdm5kLmhwLXBjbCIsaHBnbDoiYXBwbGljYXRpb24vdm5kLmhwLWhwZ2wiLGh2czoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1zY3JpcHQiLGh2ZDoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1kaWMiLGh2cDoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi12b2ljZSIsInNmZC1oZHN0eCI6ImFwcGxpY2F0aW9uL3ZuZC5oeWRyb3N0YXRpeC5zb2YtZGF0YSIsc3RrOiJhcHBsaWNhdGlvbi9oeXBlcnN0dWRpbyIsaGFsOiJhcHBsaWNhdGlvbi92bmQuaGFsK3htbCIsaHRtbDoidGV4dC9odG1sIixpcm06ImFwcGxpY2F0aW9uL3ZuZC5pYm0ucmlnaHRzLW1hbmFnZW1lbnQiLHNjOiJhcHBsaWNhdGlvbi92bmQuaWJtLnNlY3VyZS1jb250YWluZXIiLGljczoidGV4dC9jYWxlbmRhciIsaWNjOiJhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZSIsaWNvOiJpbWFnZS94LWljb24iLGlnbDoiYXBwbGljYXRpb24vdm5kLmlnbG9hZGVyIixpZWY6ImltYWdlL2llZiIsaXZwOiJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZwIixpdnU6ImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnUiLHJpZjoiYXBwbGljYXRpb24vcmVnaW5mbyt4bWwiLCIzZG1sIjoidGV4dC92bmQuaW4zZC4zZG1sIixzcG90OiJ0ZXh0L3ZuZC5pbjNkLnNwb3QiLGlnczoibW9kZWwvaWdlcyIsaTJnOiJhcHBsaWNhdGlvbi92bmQuaW50ZXJnZW8iLGNkeToiYXBwbGljYXRpb24vdm5kLmNpbmRlcmVsbGEiLHhwdzoiYXBwbGljYXRpb24vdm5kLmludGVyY29uLmZvcm1uZXQiLGZjczoiYXBwbGljYXRpb24vdm5kLmlzYWMuZmNzIixpcGZpeDoiYXBwbGljYXRpb24vaXBmaXgiLGNlcjoiYXBwbGljYXRpb24vcGtpeC1jZXJ0Iixwa2k6ImFwcGxpY2F0aW9uL3BraXhjbXAiLGNybDoiYXBwbGljYXRpb24vcGtpeC1jcmwiLHBraXBhdGg6ImFwcGxpY2F0aW9uL3BraXgtcGtpcGF0aCIsaWdtOiJhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbSIscmNwcm9maWxlOiJhcHBsaWNhdGlvbi92bmQuaXB1bnBsdWdnZWQucmNwcm9maWxlIixpcnA6ImFwcGxpY2F0aW9uL3ZuZC5pcmVwb3NpdG9yeS5wYWNrYWdlK3htbCIsamFkOiJ0ZXh0L3ZuZC5zdW4uajJtZS5hcHAtZGVzY3JpcHRvciIsamFyOiJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUiLGNsYXNzOiJhcHBsaWNhdGlvbi9qYXZhLXZtIixqbmxwOiJhcHBsaWNhdGlvbi94LWphdmEtam5scC1maWxlIixzZXI6ImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3QiLGphdmE6InRleHQveC1qYXZhLXNvdXJjZSxqYXZhIixqczoiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRpb24vanNvbiIsam9kYToiYXBwbGljYXRpb24vdm5kLmpvb3N0LmpvZGEtYXJjaGl2ZSIsanBtOiJ2aWRlby9qcG0iLGpwZWc6ImltYWdlL2pwZWciLGpwZzoiaW1hZ2UvanBlZyIscGpwZWc6ImltYWdlL3BqcGVnIixqcGd2OiJ2aWRlby9qcGVnIixrdHo6ImFwcGxpY2F0aW9uL3ZuZC5rYWhvb3R6IixtbWQ6ImFwcGxpY2F0aW9uL3ZuZC5jaGlwbnV0cy5rYXJhb2tlLW1tZCIsa2FyYm9uOiJhcHBsaWNhdGlvbi92bmQua2RlLmthcmJvbiIsY2hydDoiYXBwbGljYXRpb24vdm5kLmtkZS5rY2hhcnQiLGtmbzoiYXBwbGljYXRpb24vdm5kLmtkZS5rZm9ybXVsYSIsZmx3OiJhcHBsaWNhdGlvbi92bmQua2RlLmtpdmlvIixrb246ImFwcGxpY2F0aW9uL3ZuZC5rZGUua29udG91ciIsa3ByOiJhcHBsaWNhdGlvbi92bmQua2RlLmtwcmVzZW50ZXIiLGtzcDoiYXBwbGljYXRpb24vdm5kLmtkZS5rc3ByZWFkIixrd2Q6ImFwcGxpY2F0aW9uL3ZuZC5rZGUua3dvcmQiLGh0a2U6ImFwcGxpY2F0aW9uL3ZuZC5rZW5hbWVhYXBwIixraWE6ImFwcGxpY2F0aW9uL3ZuZC5raWRzcGlyYXRpb24iLGtuZToiYXBwbGljYXRpb24vdm5kLmtpbmFyIixzc2U6ImFwcGxpY2F0aW9uL3ZuZC5rb2Rhay1kZXNjcmlwdG9yIixsYXN4bWw6ImFwcGxpY2F0aW9uL3ZuZC5sYXMubGFzK3htbCIsbGF0ZXg6ImFwcGxpY2F0aW9uL3gtbGF0ZXgiLGxiZDoiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmRlc2t0b3AiLGxiZToiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbCIsamFtOiJhcHBsaWNhdGlvbi92bmQuamFtIiwxMjM6ImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy0xLTItMyIsYXByOiJhcHBsaWNhdGlvbi92bmQubG90dXMtYXBwcm9hY2giLHByZToiYXBwbGljYXRpb24vdm5kLmxvdHVzLWZyZWVsYW5jZSIsbnNmOiJhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXMiLG9yZzoiYXBwbGljYXRpb24vdm5kLmxvdHVzLW9yZ2FuaXplciIsc2NtOiJhcHBsaWNhdGlvbi92bmQubG90dXMtc2NyZWVuY2FtIixsd3A6ImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvIixsdnA6ImF1ZGlvL3ZuZC5sdWNlbnQudm9pY2UiLG0zdToiYXVkaW8veC1tcGVndXJsIixtNHY6InZpZGVvL3gtbTR2IixocXg6ImFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MCIscG9ydHBrZzoiYXBwbGljYXRpb24vdm5kLm1hY3BvcnRzLnBvcnRwa2ciLG1ncDoiYXBwbGljYXRpb24vdm5kLm9zZ2VvLm1hcGd1aWRlLnBhY2thZ2UiLG1yYzoiYXBwbGljYXRpb24vbWFyYyIsbXJjeDoiYXBwbGljYXRpb24vbWFyY3htbCt4bWwiLG14ZjoiYXBwbGljYXRpb24vbXhmIixuYnA6ImFwcGxpY2F0aW9uL3ZuZC53b2xmcmFtLnBsYXllciIsbWE6ImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhIixtYXRobWw6ImFwcGxpY2F0aW9uL21hdGhtbCt4bWwiLG1ib3g6ImFwcGxpY2F0aW9uL21ib3giLG1jMToiYXBwbGljYXRpb24vdm5kLm1lZGNhbGNkYXRhIixtc2NtbDoiYXBwbGljYXRpb24vbWVkaWFzZXJ2ZXJjb250cm9sK3htbCIsY2RrZXk6ImFwcGxpY2F0aW9uL3ZuZC5tZWRpYXN0YXRpb24uY2RrZXkiLG13ZjoiYXBwbGljYXRpb24vdm5kLm1mZXIiLG1mbToiYXBwbGljYXRpb24vdm5kLm1mbXAiLG1zaDoibW9kZWwvbWVzaCIsbWFkczoiYXBwbGljYXRpb24vbWFkcyt4bWwiLG1ldHM6ImFwcGxpY2F0aW9uL21ldHMreG1sIixtb2RzOiJhcHBsaWNhdGlvbi9tb2RzK3htbCIsbWV0YTQ6ImFwcGxpY2F0aW9uL21ldGFsaW5rNCt4bWwiLG1jZDoiYXBwbGljYXRpb24vdm5kLm1jZCIsZmxvOiJhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5mbG8iLGlneDoiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguaWd4IixlczM6ImFwcGxpY2F0aW9uL3ZuZC5lc3ppZ25vMyt4bWwiLG1kYjoiYXBwbGljYXRpb24veC1tc2FjY2VzcyIsYXNmOiJ2aWRlby94LW1zLWFzZiIsZXhlOiJhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQiLGNpbDoiYXBwbGljYXRpb24vdm5kLm1zLWFydGdhbHJ5IixjYWI6ImFwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCIsaW1zOiJhcHBsaWNhdGlvbi92bmQubXMtaW1zIixhcHBsaWNhdGlvbjoiYXBwbGljYXRpb24veC1tcy1hcHBsaWNhdGlvbiIsY2xwOiJhcHBsaWNhdGlvbi94LW1zY2xpcCIsbWRpOiJpbWFnZS92bmQubXMtbW9kaSIsZW90OiJhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCIseGxzOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwiLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTIiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9lbmFibGVkLjEyIix4bHRtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyIix4bHNtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9lbmFibGVkLjEyIixjaG06ImFwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCIsY3JkOiJhcHBsaWNhdGlvbi94LW1zY2FyZGZpbGUiLGxybToiYXBwbGljYXRpb24vdm5kLm1zLWxybSIsbXZiOiJhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3Iixtbnk6ImFwcGxpY2F0aW9uL3gtbXNtb25leSIscHB0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbiIsc2xkeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlIixwcHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93Iixwb3R4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGUiLHhsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Iix4bHR4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZSIsZG9jeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQiLGRvdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlIixvYmQ6ImFwcGxpY2F0aW9uL3gtbXNiaW5kZXIiLHRobXg6ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZSIsb25ldG9jOiJhcHBsaWNhdGlvbi9vbmVub3RlIixweWE6ImF1ZGlvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHlhIixweXY6InZpZGVvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHl2IixwcHQ6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50IixwcGFtOiJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5hZGRpbi5tYWNyb2VuYWJsZWQuMTIiLHNsZG06ImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlLm1hY3JvZW5hYmxlZC4xMiIscHB0bToiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQucHJlc2VudGF0aW9uLm1hY3JvZW5hYmxlZC4xMiIscHBzbToiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGVzaG93Lm1hY3JvZW5hYmxlZC4xMiIscG90bToiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyIixtcHA6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0IixwdWI6ImFwcGxpY2F0aW9uL3gtbXNwdWJsaXNoZXIiLHNjZDoiYXBwbGljYXRpb24veC1tc3NjaGVkdWxlIix4YXA6ImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQtYXBwIixzdGw6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc3RsIixjYXQ6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc2VjY2F0Iix2c2Q6ImFwcGxpY2F0aW9uL3ZuZC52aXNpbyIsdnNkeDoiYXBwbGljYXRpb24vdm5kLnZpc2lvMjAxMyIsd206InZpZGVvL3gtbXMtd20iLHdtYToiYXVkaW8veC1tcy13bWEiLHdheDoiYXVkaW8veC1tcy13YXgiLHdteDoidmlkZW8veC1tcy13bXgiLHdtZDoiYXBwbGljYXRpb24veC1tcy13bWQiLHdwbDoiYXBwbGljYXRpb24vdm5kLm1zLXdwbCIsd216OiJhcHBsaWNhdGlvbi94LW1zLXdteiIsd212OiJ2aWRlby94LW1zLXdtdiIsd3Z4OiJ2aWRlby94LW1zLXd2eCIsd21mOiJhcHBsaWNhdGlvbi94LW1zbWV0YWZpbGUiLHRybToiYXBwbGljYXRpb24veC1tc3Rlcm1pbmFsIixkb2M6ImFwcGxpY2F0aW9uL21zd29yZCIsZG9jbToiYXBwbGljYXRpb24vdm5kLm1zLXdvcmQuZG9jdW1lbnQubWFjcm9lbmFibGVkLjEyIixkb3RtOiJhcHBsaWNhdGlvbi92bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTIiLHdyaToiYXBwbGljYXRpb24veC1tc3dyaXRlIix3cHM6ImFwcGxpY2F0aW9uL3ZuZC5tcy13b3JrcyIseGJhcDoiYXBwbGljYXRpb24veC1tcy14YmFwIix4cHM6ImFwcGxpY2F0aW9uL3ZuZC5tcy14cHNkb2N1bWVudCIsbWlkOiJhdWRpby9taWRpIixtcHk6ImFwcGxpY2F0aW9uL3ZuZC5pYm0ubWluaXBheSIsYWZwOiJhcHBsaWNhdGlvbi92bmQuaWJtLm1vZGNhcCIscm1zOiJhcHBsaWNhdGlvbi92bmQuamNwLmphdmFtZS5taWRsZXQtcm1zIix0bW86ImFwcGxpY2F0aW9uL3ZuZC50bW9iaWxlLWxpdmV0diIscHJjOiJhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2siLG1iazoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tYmsiLGRpczoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXMiLHBsYzoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5wbGMiLG1xeToiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tcXkiLG1zbDoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2wiLHR4ZjoiYXBwbGljYXRpb24vdm5kLm1vYml1cy50eGYiLGRhZjoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kYWYiLGZseToidGV4dC92bmQuZmx5IixtcGM6ImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uY2VydGlmaWNhdGUiLG1wbjoiYXBwbGljYXRpb24vdm5kLm1vcGh1bi5hcHBsaWNhdGlvbiIsbWoyOiJ2aWRlby9tajIiLG1wZ2E6ImF1ZGlvL21wZWciLG14dToidmlkZW8vdm5kLm1wZWd1cmwiLG1wZWc6InZpZGVvL21wZWciLG0yMToiYXBwbGljYXRpb24vbXAyMSIsbXA0YToiYXVkaW8vbXA0IixtcDQ6InZpZGVvL21wNCIsbTN1ODoiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLG11czoiYXBwbGljYXRpb24vdm5kLm11c2ljaWFuIixtc3R5OiJhcHBsaWNhdGlvbi92bmQubXV2ZWUuc3R5bGUiLG14bWw6ImFwcGxpY2F0aW9uL3h2K3htbCIsbmdkYXQ6ImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2UuZGF0YSIsIm4tZ2FnZSI6ImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsIixuY3g6ImFwcGxpY2F0aW9uL3gtZHRibmN4K3htbCIsbmM6ImFwcGxpY2F0aW9uL3gtbmV0Y2RmIixubHU6ImFwcGxpY2F0aW9uL3ZuZC5uZXVyb2xhbmd1YWdlLm5sdSIsZG5hOiJhcHBsaWNhdGlvbi92bmQuZG5hIixubmQ6ImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1kaXJlY3RvcnkiLG5uczoiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LXNlYWxlciIsbm53OiJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtd2ViIixycHN0OiJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0IixycHNzOiJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0cyIsbjM6InRleHQvbjMiLGVkbToiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkbSIsZWR4OiJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWR4IixleHQ6ImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5leHQiLGdwaDoiYXBwbGljYXRpb24vdm5kLmZsb2dyYXBoaXQiLGVjZWxwNDgwMDoiYXVkaW8vdm5kLm51ZXJhLmVjZWxwNDgwMCIsZWNlbHA3NDcwOiJhdWRpby92bmQubnVlcmEuZWNlbHA3NDcwIixlY2VscDk2MDA6ImF1ZGlvL3ZuZC5udWVyYS5lY2VscDk2MDAiLG9kYToiYXBwbGljYXRpb24vb2RhIixvZ3g6ImFwcGxpY2F0aW9uL29nZyIsb2dhOiJhdWRpby9vZ2ciLG9ndjoidmlkZW8vb2dnIixkZDI6ImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGQyK3htbCIsb3RoOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViIixvcGY6ImFwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sIixxYm86ImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFibyIsb3h0OiJhcHBsaWNhdGlvbi92bmQub3Blbm9mZmljZW9yZy5leHRlbnNpb24iLG9zZjoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5vcGVuc2NvcmVmb3JtYXQiLHdlYmE6ImF1ZGlvL3dlYm0iLHdlYm06InZpZGVvL3dlYm0iLG9kYzoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5jaGFydCIsb3RjOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0LXRlbXBsYXRlIixvZGI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZGF0YWJhc2UiLG9kZjoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhIixvZGZ0OiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEtdGVtcGxhdGUiLG9kZzoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljcyIsb3RnOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmdyYXBoaWNzLXRlbXBsYXRlIixvZGk6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UiLG90aToiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZS10ZW1wbGF0ZSIsb2RwOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbiIsb3RwOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbi10ZW1wbGF0ZSIsb2RzOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IixvdHM6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQtdGVtcGxhdGUiLG9kdDoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0IixvZG06ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXIiLG90dDoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXRlbXBsYXRlIixrdHg6ImltYWdlL2t0eCIsc3hjOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjIixzdGM6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGMudGVtcGxhdGUiLHN4ZDoiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuZHJhdyIsc3RkOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3LnRlbXBsYXRlIixzeGk6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmltcHJlc3MiLHN0aToiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuaW1wcmVzcy50ZW1wbGF0ZSIsc3htOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5tYXRoIixzeHc6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlciIsc3hnOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXIuZ2xvYmFsIixzdHc6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci50ZW1wbGF0ZSIsb3RmOiJhcHBsaWNhdGlvbi94LWZvbnQtb3RmIixvc2Zwdmc6ImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0Lm9zZnB2Zyt4bWwiLGRwOiJhcHBsaWNhdGlvbi92bmQub3NnaS5kcCIscGRiOiJhcHBsaWNhdGlvbi92bmQucGFsbSIscDoidGV4dC94LXBhc2NhbCIscGF3OiJhcHBsaWNhdGlvbi92bmQucGF3YWFmaWxlIixwY2x4bDoiYXBwbGljYXRpb24vdm5kLmhwLXBjbHhsIixlZmlmOiJhcHBsaWNhdGlvbi92bmQucGljc2VsIixwY3g6ImltYWdlL3gtcGN4Iixwc2Q6ImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AiLHByZjoiYXBwbGljYXRpb24vcGljcy1ydWxlcyIscGljOiJpbWFnZS94LXBpY3QiLGNoYXQ6ImFwcGxpY2F0aW9uL3gtY2hhdCIscDEwOiJhcHBsaWNhdGlvbi9wa2NzMTAiLHAxMjoiYXBwbGljYXRpb24veC1wa2NzMTIiLHA3bToiYXBwbGljYXRpb24vcGtjczctbWltZSIscDdzOiJhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUiLHA3cjoiYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0cmVxcmVzcCIscDdiOiJhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRpZmljYXRlcyIscDg6ImFwcGxpY2F0aW9uL3BrY3M4IixwbGY6ImFwcGxpY2F0aW9uL3ZuZC5wb2NrZXRsZWFybiIscG5tOiJpbWFnZS94LXBvcnRhYmxlLWFueW1hcCIscGJtOiJpbWFnZS94LXBvcnRhYmxlLWJpdG1hcCIscGNmOiJhcHBsaWNhdGlvbi94LWZvbnQtcGNmIixwZnI6ImFwcGxpY2F0aW9uL2ZvbnQtdGRwZnIiLHBnbjoiYXBwbGljYXRpb24veC1jaGVzcy1wZ24iLHBnbToiaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwIixwbmc6ImltYWdlL3BuZyIscHBtOiJpbWFnZS94LXBvcnRhYmxlLXBpeG1hcCIscHNrY3htbDoiYXBwbGljYXRpb24vcHNrYyt4bWwiLHBtbDoiYXBwbGljYXRpb24vdm5kLmN0Yy1wb3NtbCIsYWk6ImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLHBmYToiYXBwbGljYXRpb24veC1mb250LXR5cGUxIixwYmQ6ImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2IixwZ3A6ImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUiLGJveDoiYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveCIscHRpZDoiYXBwbGljYXRpb24vdm5kLnB2aS5wdGlkMSIscGxzOiJhcHBsaWNhdGlvbi9wbHMreG1sIixzdHI6ImFwcGxpY2F0aW9uL3ZuZC5wZy5mb3JtYXQiLGVpNjoiYXBwbGljYXRpb24vdm5kLnBnLm9zYXNsaSIsZHNjOiJ0ZXh0L3Bycy5saW5lcy50YWciLHBzZjoiYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZiIscXBzOiJhcHBsaWNhdGlvbi92bmQucHVibGlzaGFyZS1kZWx0YS10cmVlIix3ZzoiYXBwbGljYXRpb24vdm5kLnBtaS53aWRnZXQiLHF4ZDoiYXBwbGljYXRpb24vdm5kLnF1YXJrLnF1YXJreHByZXNzIixlc2Y6ImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5lc2YiLG1zZjoiYXBwbGljYXRpb24vdm5kLmVwc29uLm1zZiIsc3NmOiJhcHBsaWNhdGlvbi92bmQuZXBzb24uc3NmIixxYW06ImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5xdWlja2FuaW1lIixxZng6ImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFmeCIscXQ6InZpZGVvL3F1aWNrdGltZSIscmFyOiJhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkIixyYW06ImF1ZGlvL3gtcG4tcmVhbGF1ZGlvIixybXA6ImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIscnNkOiJhcHBsaWNhdGlvbi9yc2QreG1sIixybToiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsYmVkOiJhcHBsaWNhdGlvbi92bmQucmVhbHZuYy5iZWQiLG14bDoiYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCIsbXVzaWN4bWw6ImFwcGxpY2F0aW9uL3ZuZC5yZWNvcmRhcmUubXVzaWN4bWwreG1sIixybmM6ImFwcGxpY2F0aW9uL3JlbGF4LW5nLWNvbXBhY3Qtc3ludGF4IixyZHo6ImFwcGxpY2F0aW9uL3ZuZC5kYXRhLXZpc2lvbi5yZHoiLHJkZjoiYXBwbGljYXRpb24vcmRmK3htbCIscnA5OiJhcHBsaWNhdGlvbi92bmQuY2xvYW50by5ycDkiLGppc3A6ImFwcGxpY2F0aW9uL3ZuZC5qaXNwIixydGY6ImFwcGxpY2F0aW9uL3J0ZiIscnR4OiJ0ZXh0L3JpY2h0ZXh0IixsaW5rNjY6ImFwcGxpY2F0aW9uL3ZuZC5yb3V0ZTY2Lmxpbms2Nit4bWwiLHJzczoiYXBwbGljYXRpb24vcnNzK3htbCIsc2hmOiJhcHBsaWNhdGlvbi9zaGYreG1sIixzdDoiYXBwbGljYXRpb24vdm5kLnNhaWxpbmd0cmFja2VyLnRyYWNrIixzdmc6ImltYWdlL3N2Zyt4bWwiLHN1czoiYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhciIsc3J1OiJhcHBsaWNhdGlvbi9zcnUreG1sIixzZXRwYXk6ImFwcGxpY2F0aW9uL3NldC1wYXltZW50LWluaXRpYXRpb24iLHNldHJlZzoiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvbi1pbml0aWF0aW9uIixzZW1hOiJhcHBsaWNhdGlvbi92bmQuc2VtYSIsc2VtZDoiYXBwbGljYXRpb24vdm5kLnNlbWQiLHNlbWY6ImFwcGxpY2F0aW9uL3ZuZC5zZW1mIixzZWU6ImFwcGxpY2F0aW9uL3ZuZC5zZWVtYWlsIixzbmY6ImFwcGxpY2F0aW9uL3gtZm9udC1zbmYiLHNwcToiYXBwbGljYXRpb24vc2N2cC12cC1yZXF1ZXN0IixzcHA6ImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVzcG9uc2UiLHNjcToiYXBwbGljYXRpb24vc2N2cC1jdi1yZXF1ZXN0IixzY3M6ImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2UiLHNkcDoiYXBwbGljYXRpb24vc2RwIixldHg6InRleHQveC1zZXRleHQiLG1vdmllOiJ2aWRlby94LXNnaS1tb3ZpZSIsaWZtOiJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuZm9ybWRhdGEiLGl0cDoiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm10ZW1wbGF0ZSIsaWlmOiJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuaW50ZXJjaGFuZ2UiLGlwazoiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLnBhY2thZ2UiLHRmaToiYXBwbGljYXRpb24vdGhyYXVkK3htbCIsc2hhcjoiYXBwbGljYXRpb24veC1zaGFyIixyZ2I6ImltYWdlL3gtcmdiIixzbHQ6ImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5zYWx0Iixhc286ImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmFzbyIsaW1wOiJhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5pbXAiLHR3ZDoiYXBwbGljYXRpb24vdm5kLnNpbXRlY2gtbWluZG1hcHBlciIsY3NwOiJhcHBsaWNhdGlvbi92bmQuY29tbW9uc3BhY2UiLHNhZjoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLWF1ZGlvIixtbWY6ImFwcGxpY2F0aW9uL3ZuZC5zbWFmIixzcGY6ImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1waHJhc2UiLHRlYWNoZXI6ImFwcGxpY2F0aW9uL3ZuZC5zbWFydC50ZWFjaGVyIixzdmQ6ImFwcGxpY2F0aW9uL3ZuZC5zdmQiLHJxOiJhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnkiLHNyeDoiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sIixncmFtOiJhcHBsaWNhdGlvbi9zcmdzIixncnhtbDoiYXBwbGljYXRpb24vc3Jncyt4bWwiLHNzbWw6ImFwcGxpY2F0aW9uL3NzbWwreG1sIixza3A6ImFwcGxpY2F0aW9uL3ZuZC5rb2FuIixzZ21sOiJ0ZXh0L3NnbWwiLHNkYzoiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5jYWxjIixzZGE6ImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uZHJhdyIsc2RkOiJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmltcHJlc3MiLHNtZjoiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5tYXRoIixzZHc6ImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyIixzZ2w6ImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyLWdsb2JhbCIsc206ImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEuc3RlcGNoYXJ0IixzaXQ6ImFwcGxpY2F0aW9uL3gtc3R1ZmZpdCIsc2l0eDoiYXBwbGljYXRpb24veC1zdHVmZml0eCIsc2RrbToiYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbCIseG86ImFwcGxpY2F0aW9uL3ZuZC5vbHBjLXN1Z2FyIixhdToiYXVkaW8vYmFzaWMiLHdxZDoiYXBwbGljYXRpb24vdm5kLndxZCIsc2lzOiJhcHBsaWNhdGlvbi92bmQuc3ltYmlhbi5pbnN0YWxsIixzbWk6ImFwcGxpY2F0aW9uL3NtaWwreG1sIix4c206ImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sIixiZG06ImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0rd2J4bWwiLHhkbToiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbSt4bWwiLHN2NGNwaW86ImFwcGxpY2F0aW9uL3gtc3Y0Y3BpbyIsc3Y0Y3JjOiJhcHBsaWNhdGlvbi94LXN2NGNyYyIsc2JtbDoiYXBwbGljYXRpb24vc2JtbCt4bWwiLHRzdjoidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIsdGlmZjoiaW1hZ2UvdGlmZiIsdGFvOiJhcHBsaWNhdGlvbi92bmQudGFvLmludGVudC1tb2R1bGUtYXJjaGl2ZSIsdGFyOiJhcHBsaWNhdGlvbi94LXRhciIsdGNsOiJhcHBsaWNhdGlvbi94LXRjbCIsdGV4OiJhcHBsaWNhdGlvbi94LXRleCIsdGZtOiJhcHBsaWNhdGlvbi94LXRleC10Zm0iLHRlaToiYXBwbGljYXRpb24vdGVpK3htbCIsdHh0OiJ0ZXh0L3BsYWluIixkeHA6ImFwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5keHAiLHNmczoiYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLnNmcyIsdHNkOiJhcHBsaWNhdGlvbi90aW1lc3RhbXBlZC1kYXRhIix0cHQ6ImFwcGxpY2F0aW9uL3ZuZC50cmlkLnRwdCIsbXhzOiJhcHBsaWNhdGlvbi92bmQudHJpc2NhcGUubXhzIix0OiJ0ZXh0L3Ryb2ZmIix0cmE6ImFwcGxpY2F0aW9uL3ZuZC50cnVlYXBwIix0dGY6ImFwcGxpY2F0aW9uL3gtZm9udC10dGYiLHR0bDoidGV4dC90dXJ0bGUiLHVtajoiYXBwbGljYXRpb24vdm5kLnVtYWppbiIsdW9tbDoiYXBwbGljYXRpb24vdm5kLnVvbWwreG1sIix1bml0eXdlYjoiYXBwbGljYXRpb24vdm5kLnVuaXR5Iix1ZmQ6ImFwcGxpY2F0aW9uL3ZuZC51ZmRsIix1cmk6InRleHQvdXJpLWxpc3QiLHV0ejoiYXBwbGljYXRpb24vdm5kLnVpcS50aGVtZSIsdXN0YXI6ImFwcGxpY2F0aW9uL3gtdXN0YXIiLHV1OiJ0ZXh0L3gtdXVlbmNvZGUiLHZjczoidGV4dC94LXZjYWxlbmRhciIsdmNmOiJ0ZXh0L3gtdmNhcmQiLHZjZDoiYXBwbGljYXRpb24veC1jZGxpbmsiLHZzZjoiYXBwbGljYXRpb24vdm5kLnZzZiIsd3JsOiJtb2RlbC92cm1sIix2Y3g6ImFwcGxpY2F0aW9uL3ZuZC52Y3giLG10czoibW9kZWwvdm5kLm10cyIsdnR1OiJtb2RlbC92bmQudnR1Iix2aXM6ImFwcGxpY2F0aW9uL3ZuZC52aXNpb25hcnkiLHZpdjoidmlkZW8vdm5kLnZpdm8iLGNjeG1sOiJhcHBsaWNhdGlvbi9jY3htbCt4bWwsIix2eG1sOiJhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWwiLHNyYzoiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZSIsd2J4bWw6ImFwcGxpY2F0aW9uL3ZuZC53YXAud2J4bWwiLHdibXA6ImltYWdlL3ZuZC53YXAud2JtcCIsd2F2OiJhdWRpby94LXdhdiIsZGF2bW91bnQ6ImFwcGxpY2F0aW9uL2Rhdm1vdW50K3htbCIsd29mZjoiYXBwbGljYXRpb24veC1mb250LXdvZmYiLHdzcG9saWN5OiJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWwiLHdlYnA6ImltYWdlL3dlYnAiLHd0YjoiYXBwbGljYXRpb24vdm5kLndlYnR1cmJvIix3Z3Q6ImFwcGxpY2F0aW9uL3dpZGdldCIsaGxwOiJhcHBsaWNhdGlvbi93aW5obHAiLHdtbDoidGV4dC92bmQud2FwLndtbCIsd21sczoidGV4dC92bmQud2FwLndtbHNjcmlwdCIsd21sc2M6ImFwcGxpY2F0aW9uL3ZuZC53YXAud21sc2NyaXB0YyIsd3BkOiJhcHBsaWNhdGlvbi92bmQud29yZHBlcmZlY3QiLHN0ZjoiYXBwbGljYXRpb24vdm5kLnd0LnN0ZiIsd3NkbDoiYXBwbGljYXRpb24vd3NkbCt4bWwiLHhibToiaW1hZ2UveC14Yml0bWFwIix4cG06ImltYWdlL3gteHBpeG1hcCIseHdkOiJpbWFnZS94LXh3aW5kb3dkdW1wIixkZXI6ImFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0IixmaWc6ImFwcGxpY2F0aW9uL3gteGZpZyIseGh0bWw6ImFwcGxpY2F0aW9uL3hodG1sK3htbCIseG1sOiJhcHBsaWNhdGlvbi94bWwiLHhkZjoiYXBwbGljYXRpb24veGNhcC1kaWZmK3htbCIseGVuYzoiYXBwbGljYXRpb24veGVuYyt4bWwiLHhlcjoiYXBwbGljYXRpb24vcGF0Y2gtb3BzLWVycm9yK3htbCIscmw6ImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzK3htbCIscnM6ImFwcGxpY2F0aW9uL3Jscy1zZXJ2aWNlcyt4bWwiLHJsZDoiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMtZGlmZit4bWwiLHhzbHQ6ImFwcGxpY2F0aW9uL3hzbHQreG1sIix4b3A6ImFwcGxpY2F0aW9uL3hvcCt4bWwiLHhwaToiYXBwbGljYXRpb24veC14cGluc3RhbGwiLHhzcGY6ImFwcGxpY2F0aW9uL3hzcGYreG1sIix4dWw6ImFwcGxpY2F0aW9uL3ZuZC5tb3ppbGxhLnh1bCt4bWwiLHh5ejoiY2hlbWljYWwveC14eXoiLHlhbWw6InRleHQveWFtbCIseWFuZzoiYXBwbGljYXRpb24veWFuZyIseWluOiJhcHBsaWNhdGlvbi95aW4reG1sIix6aXI6ImFwcGxpY2F0aW9uL3ZuZC56dWwiLHppcDoiYXBwbGljYXRpb24vemlwIix6bW06ImFwcGxpY2F0aW9uL3ZuZC5oYW5kaGVsZC1lbnRlcnRhaW5tZW50K3htbCIsemF6OiJhcHBsaWNhdGlvbi92bmQuenphenouZGVjayt4bWwifSxLOD1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoU00pLm1hcChmdW5jdGlvbihlKXt2YXIgdD13eChlLDIpLG49dFswXSxyPXRbMV07cmV0dXJuW3Isbl19KSkscTg9L15kYXRhOiguKj8pO2Jhc2U2NCwvO2Z1bmN0aW9uIEhnKGUpe3ZhciB0PXE4LmV4ZWMoZSk7aWYodCYmdFsxXSlyZXR1cm4gdFsxXX1mdW5jdGlvbiBXZyhlKXt2YXIgdD1LOFtlXTtyZXR1cm4gdHx8ZS5zcGxpdCgiLyIpWzFdfWZ1bmN0aW9uIEc4KGUpe3ZhciB0PWUuc3BsaXQoIi4iKS5wb3AoKSxuPXQmJlNNW3RdO2lmKG4pcmV0dXJuIG59ZnVuY3Rpb24gWTgoZSl7dmFyIHQ9e30sbj1lLmNvbnRlbnQubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBYOChyLHQpfSk7cmV0dXJuIFo4KG4sdCl9ZnVuY3Rpb24gWDgoZSx0KXtpZihlLnR5cGU9PT0iaGVhZGluZyIpe3ZhciBuLHIsbz0iIixpPSgobj1lLmF0dHJzKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ubGV2ZWwpfHwxO2lmKE51bWJlci5pc05hTihpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGVhZGVyIGRlcHRoIik7Zm9yKHZhciBzPTA7czxOdW1iZXIoaSk7cysrKW8rPSIjIjt2YXIgYT1bIiIuY29uY2F0KG8sIiAiKV07cmV0dXJue3R5cGU6ImJsb2NrIixjaGlsZHJlbjphLmNvbmNhdC5hcHBseShhLGdmKCgocj1lLmNvbnRlbnQpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIFN4KGQsdCl9KSl8fFtdKSl9fWVsc2UgaWYoZS50eXBlPT09InBhcmFncmFwaCIpe3ZhciBsO3JldHVybiFlLmNvbnRlbnR8fCgobD1lLmNvbnRlbnQpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5sZW5ndGgpPT09MD97dHlwZToiYmxvY2siLGNoaWxkcmVuOlsiPGJyIC8+Il19Ont0eXBlOiJibG9jayIsY2hpbGRyZW46ZS5jb250ZW50Lm1hcChmdW5jdGlvbihkKXtyZXR1cm4gU3goZCx0KX0pfX1lbHNlIGlmKGUudHlwZT09PSJidWxsZXRMaXN0Inx8ZS50eXBlPT09Im9yZGVyZWRMaXN0Iil7dmFyIGM7cmV0dXJue3R5cGU6ImJsb2NrIixjaGlsZHJlbjooKGM9ZS5jb250ZW50KT09PW51bGx8fGM9PT12b2lkIDA/dm9pZCAwOmMuZmxhdE1hcChmdW5jdGlvbihkLGYpe3JldHVybiBrTShFTShlKSxkLDAsdCxmPT09MCl9KSl8fFtdfX1lbHNle3ZhciB1PWU7dGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgbm9kZSB0eXBlOiAiLmNvbmNhdCgidHlwZSJpbiB1PyJleGhhdXN0aXZlQ2hlY2sudHlwZSI6InVua25vd24iKSl9fWZ1bmN0aW9uIFo4KGUsdCl7Zm9yKHZhciBuPVtgCmBdLHI9W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgaT1lW29dLHM9VTEoaS5jaGlsZHJlbiksYTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciBsPWEudmFsdWU7aWYodHlwZW9mIGw9PSJzdHJpbmciKW5bbi5sZW5ndGgtMV0rPWw7ZWxzZXtpZihsLl90eXBlPT09ImZpbGUiKXIucHVzaChsKTtlbHNlIGlmKGwuX3R5cGU9PT0ibGluayIpci5wdXNoKGwpO2Vsc2V7dmFyIGM9bDt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbm9kZSB0eXBlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShjLG51bGwsMikpKX1uLnB1c2goIiIpfX19Y2F0Y2godSl7cy5lKHUpfWZpbmFsbHl7cy5mKCl9bz09PWUubGVuZ3RoLTE/bltuLmxlbmd0aC0xXSs9YApgOm5bbi5sZW5ndGgtMV0rPWAKCmB9cmV0dXJuIFd0KFd0KFd0KFd0KHt9LG1uLCJyaWNodGV4dCIpLCJ0ZW1wbGF0ZVN0cmluZ3MiLG4pLCJleHBycyIsciksImZpbGVzIix0KX1mdW5jdGlvbiBDRShlKXt2YXIgdCxuPSgodD1lLm1hcmtzKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQuZmxhdE1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy50eXBlPT09ImJvbGQiP1siYm9sZCJdOnMudHlwZT09PSJpdGFsaWMiP1siaXRhbGljIl06cy50eXBlPT09InN0cmlrZSI/WyJsaW5lLXRocm91Z2giXTpbXX0pKXx8W10scj1lLnRleHQudHJpbVN0YXJ0KCksbz1lLnRleHQubGVuZ3RoLXIubGVuZ3RoO3I9ci50cmltRW5kKCk7dmFyIGk9ZS50ZXh0Lmxlbmd0aC1yLmxlbmd0aC1vO3JldHVybiBuLmluY2x1ZGVzKCJib2xkIikmJm4uaW5jbHVkZXMoIml0YWxpYyIpP3I9IioqKiIuY29uY2F0KHIsIioqKiIpOm4uaW5jbHVkZXMoImJvbGQiKT9yPSIqKiIuY29uY2F0KHIsIioqIik6bi5pbmNsdWRlcygiaXRhbGljIikmJihyPSJfIi5jb25jYXQociwiXyIpKSxuLmluY2x1ZGVzKCJsaW5lLXRocm91Z2giKSYmKHI9In5+Ii5jb25jYXQociwifn4iKSksIiIuY29uY2F0KCIgIi5yZXBlYXQobykpLmNvbmNhdChyKS5jb25jYXQoIiAiLnJlcGVhdChpKSl9ZnVuY3Rpb24gU3goZSx0KXtpZihlLnR5cGU9PT0idGV4dCIpe3ZhciBuLHI9KG49ZS5tYXJrcyk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmZpbmQoZnVuY3Rpb24oaSl7cmV0dXJuIGkudHlwZT09PSJsaW5rIn0pO3JldHVybihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09ImxpbmsiP3tfdHlwZToibGluayIsaHJlZjpyLmF0dHJzLmhyZWYsY2hpbGRyZW46W0NFKGUpXX06Q0UoZSl9ZWxzZXtpZihlLnR5cGU9PT0iaGFyZEJyZWFrIilyZXR1cm4iPGJyIC8+IjtpZihlLnR5cGU9PT0iaW1hZ2UiKXJldHVybiBROChlLHQpO3ZhciBvPWU7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIG5vZGUgdHlwZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkobykpKX19ZnVuY3Rpb24ga00oZSx0LG4scil7dmFyIG8saSxzPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSxhPXM/IiI6YApgLGw9WyIiLmNvbmNhdChhKS5jb25jYXQoIiAiLnJlcGVhdChuKSkuY29uY2F0KGUpXTtyZXR1cm4oKG89dC5jb250ZW50KT09PW51bGx8fG89PT12b2lkIDB8fChvPW9bMF0pPT09bnVsbHx8bz09PXZvaWQgMD92b2lkIDA6by50eXBlKT09PSJidWxsZXRMaXN0Inx8KChpPXQuY29udGVudCk9PT1udWxsfHxpPT09dm9pZCAwfHwoaT1pWzBdKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudHlwZSk9PT0ib3JkZXJlZExpc3QifHxsLnB1c2goIiAiKSxsLmNvbmNhdCgodC5jb250ZW50fHxbXSkuZmxhdE1hcChmdW5jdGlvbihjLHUpe3JldHVybiBjLnR5cGU9PT0iYnVsbGV0TGlzdCJ8fGMudHlwZT09PSJvcmRlcmVkTGlzdCI/KGMuY29udGVudHx8W10pLmZsYXRNYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGtNKEVNKGMpLGQsbis0LHIpfSk6KGMuY29udGVudHx8W10pLmZsYXRNYXAoZnVuY3Rpb24oZCl7dmFyIGYscCxtPVtdO3JldHVybihmPWMuY29udGVudCkhPT1udWxsJiZmIT09dm9pZCAwJiZmLmxlbmd0aCYmKChwPWMuY29udGVudCk9PT1udWxsfHxwPT09dm9pZCAwP3ZvaWQgMDpwLmxlbmd0aCk+MCYmdT4wJiZtLnB1c2goYDxiciAvPgpgKSxtLnB1c2goU3goZCxyKSksbX0pfSkpfWZ1bmN0aW9uIEVNKGUpe2lmKGUudHlwZT09PSJidWxsZXRMaXN0IilyZXR1cm4iLSI7aWYoZS50eXBlPT09Im9yZGVyZWRMaXN0IilyZXR1cm4iMS4iO3ZhciB0PWU7dGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgbGlzdCBub2RlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0KSkpfXZhciBKOD1uZXcgVGV4dEVuY29kZXI7ZnVuY3Rpb24gUTgoZSx0KXtpZihlLmF0dHJzJiZlLmF0dHJzLnNyYy5zdGFydHNXaXRoKCJkYXRhOiIpKXt2YXIgbj1vdC5nZXRTSEEyNTZIYXNoKEo4LmVuY29kZShlLmF0dHJzLnNyYykpLHI9SGcoZS5hdHRycy5zcmMpO2lmKHI9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZGV0ZWN0IE1pbWUgVHlwZSBmb3IgaW1hZ2U6ICIuY29uY2F0KGUuYXR0cnMuc3JjKSk7dmFyIG89V2cociksaT1lLmF0dHJzLmZpbGVOYW1lfHwiIi5jb25jYXQobiwiLiIpLmNvbmNhdChvKSxzPSIvcHVibGljLyIuY29uY2F0KGkpO3JldHVybiB0W3NdPWUuYXR0cnMuc3JjLFd0KFd0KFd0KFd0KHt9LG1uLCJmaWxlIiksQ24scyksSWssemspLCJtZXRhZGF0YSIse3dpZHRoOnR5cGVvZiBlLmF0dHJzLndpZHRoPT0ibnVtYmVyIj9lLmF0dHJzLndpZHRoOjAsaGVpZ2h0OnR5cGVvZiBlLmF0dHJzLmhlaWdodD09Im51bWJlciI/ZS5hdHRycy5oZWlnaHQ6MCxzaGEyNTY6bnx8IiIsbWltZVR5cGU6cn0pfWVsc2UgaWYoZS5hdHRycyl7dmFyIGE9ZXooInNoYTI1NiIsZS5hdHRycy5zcmMpLGw9ZS5hdHRycy5zcmMuc3BsaXQoIj8iKVswXTtyZXR1cm4gV3QoV3QoV3QoV3Qoe30sbW4sImZpbGUiKSxDbiwiL3B1YmxpYyIuY29uY2F0KGUuYXR0cnMuc3JjLnNwbGl0KCI/IilbMF0pKSxJayx6ayksIm1ldGFkYXRhIix7d2lkdGg6dHlwZW9mIGUuYXR0cnMud2lkdGg9PSJudW1iZXIiP2UuYXR0cnMud2lkdGg6MCxoZWlnaHQ6dHlwZW9mIGUuYXR0cnMuaGVpZ2h0PT0ibnVtYmVyIj9lLmF0dHJzLmhlaWdodDowLHNoYTI1NjphfHwiIixtaW1lVHlwZTpsJiZHOChsKXx8IiJ9KX1lbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbWFnZSBub2RlIChubyBhdHRycyk6ICIrSlNPTi5zdHJpbmdpZnkoZSkpfWZ1bmN0aW9uIGV6KGUsdCl7dmFyIG49dC5zcGxpdCgiPyIpO2lmKCEobi5sZW5ndGg8Mikpe3ZhciByPW5bMV0sbz1uZXcgVVJMU2VhcmNoUGFyYW1zKHIpO2lmKG8uaGFzKGUpKXJldHVybiBvLmdldChlKX19dmFyIGJtPSc8dmFsIHZhbHVlPSInLGt4PSciPicsRXg9IjwvdmFsPiI7ZnVuY3Rpb24gcGkoZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxvPVtdO2Z1bmN0aW9uIGkobCxjKXt2YXIgdT1waShsLnRva2Vucz9sLnRva2VuczpbXSx0LDApO28ucHVzaCh7dGFnOiJzcGFuIixjbGFzc2VzOltjXS5jb25jYXQodS5jaGlsZHJlbi5mbGF0TWFwKGZ1bmN0aW9uKGQpe3JldHVybiB0eXBlb2YgZD09InN0cmluZyI/W106ZC5jbGFzc2VzfSkpLGNoaWxkcmVuOnUuY2hpbGRyZW4uZmxhdE1hcChmdW5jdGlvbihkKXtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2Q6ZC5jaGlsZHJlbn0pfSl9Zm9yKHZhciBzPWZ1bmN0aW9uKCl7dmFyIGM9ZVtuXTtpZihjLnR5cGU9PT0iaGVhZGluZyIpby5wdXNoKHt0YWc6ImgiLmNvbmNhdChjLmRlcHRoKSxjaGlsZHJlbjpwaShjLnRva2Vucz9jLnRva2VuczpbXSx0LDApLmNoaWxkcmVufSk7ZWxzZSBpZihjLnR5cGU9PT0icGFyYWdyYXBoIilvLnB1c2goe3RhZzoicCIsY2hpbGRyZW46cGkoYy50b2tlbnM/Yy50b2tlbnM6W10sdCwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYy50eXBlPT09InN0cm9uZyIpaShjLCJib2xkIik7ZWxzZSBpZihjLnR5cGU9PT0iZW0iKWkoYywiaXRhbGljIik7ZWxzZSBpZihjLnR5cGU9PT0iZGVsIilpKGMsImxpbmUtdGhyb3VnaCIpO2Vsc2UgaWYoYy50eXBlPT09InRleHQiKWlmKCJ0b2tlbnMiaW4gYyYmQXJyYXkuaXNBcnJheShjLnRva2Vucykpby5wdXNoLmFwcGx5KG8sZ2YocGkoYy50b2tlbnMsdCxuLHIpLmNoaWxkcmVuKSk7ZWxzZSBpZihyJiZ0eXBlb2YgYy5yYXc9PSJzdHJpbmciKXt2YXIgdT1jLnJhdy5zcGxpdChgCmApLGQ9dS5mbGF0TWFwKGZ1bmN0aW9uKF8sUCl7cmV0dXJuIFA9PT11Lmxlbmd0aC0xP1tfXTpQPT09dS5sZW5ndGgtMSYmXz09PSIiP1tdOl89PT0iIj97dGFnOiJiciJ9OltfLHt0YWc6ImJyIn1dfSk7by5wdXNoLmFwcGx5KG8sZ2YoZCkpfWVsc2Ugby5wdXNoKGMucmF3KTtlbHNlIGlmKGMudHlwZT09PSJsaXN0IilvLnB1c2goe3RhZzpjLm9yZGVyZWQ/Im9sIjoidWwiLGNoaWxkcmVuOnBpKGMuaXRlbXMsdCwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYy50eXBlPT09Imxpc3RfaXRlbSIpby5wdXNoKHt0YWc6ImxpIixjaGlsZHJlbjpwaShjLnRva2Vucz9jLnRva2VuczpbXSx0LDAsITApLmNoaWxkcmVufSk7ZWxzZSBpZihjLnR5cGUhPT0ic3BhY2UiKWlmKGMudHlwZT09PSJodG1sIil7aWYoYy50ZXh0PT09RXgpcmV0dXJue3Y6e2NoaWxkcmVuOm8sY3Vyc29yOm59fTt2YXIgZj1jLnRleHQuaW5kZXhPZihreCk7aWYoYy50ZXh0LnN0YXJ0c1dpdGgoYm0pJiZmPi0xKXt2YXIgcD1OdW1iZXIoYy50ZXh0LnNsaWNlKGJtLmxlbmd0aCxmKSk7aWYoTnVtYmVyLmlzTmFOKHApKXRocm93IEVycm9yKCJJbGxlZ2FsIHZhbCBpbnRlcm1lZGlhdGUgbm9kZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYykpKTt2YXIgbT1waShlLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy50eXBlPT09ImxpbmsifHxfLnR5cGU9PT0ibGlzdCI/e3R5cGU6InRleHQiLHJhdzpfLnJhdyx0ZXh0Ol8ucmF3fTpffSksdCxuKzEpLGc9bS5jaGlsZHJlbix5PW0uY3Vyc29yLHY9dFtwXTtpZih2Ll90eXBlPT09ImxpbmsiKW8ucHVzaCh7dGFnOiJhIixocmVmOnYuaHJlZixjaGlsZHJlbjpnfSk7ZWxzZSBpZih2Ll90eXBlPT09ImZpbGUiKXt2YXIgeCx3LGs7by5wdXNoKHt0YWc6ImltZyIsc3JjOm90LmNvbnZlcnRGaWxlU291cmNlKHYpLnVybCx3aWR0aDooeD12Lm1ldGFkYXRhKT09PW51bGx8fHg9PT12b2lkIDA/dm9pZCAwOngud2lkdGgsaGVpZ2h0Oih3PXYubWV0YWRhdGEpPT09bnVsbHx8dz09PXZvaWQgMD92b2lkIDA6dy5oZWlnaHQsbWltZVR5cGU6KGs9di5tZXRhZGF0YSk9PT1udWxsfHxrPT09dm9pZCAwP3ZvaWQgMDprLm1pbWVUeXBlfSl9bj15fXZhciBFPS88YnJccypcLz8+L2dpO2lmKGMudGV4dC50cmltKCkubWF0Y2goRSkpe3ZhciBTO28ucHVzaCh7dGFnOiJiciJ9KSwoKFM9ZVtuKzFdKT09PW51bGx8fFM9PT12b2lkIDA/dm9pZCAwOlMucmF3LnRyaW0oKSk9PT0iIiYmbisrfX1lbHNlIGMudHlwZT09PSJsaW5rIj9jLnJhdz09PWMuaHJlZj9vLnB1c2goYy5yYXcpOm8ucHVzaCh7dGFnOiJhIixocmVmOmMuaHJlZixjaGlsZHJlbjpwaShjLnRva2Vucz9jLnRva2VuczpbXSx0LDApLmNoaWxkcmVufSk6Yy50eXBlPT09ImJyIj9vLnB1c2goe3RhZzoiYnIifSk6Y29uc29sZS5lcnJvcigiQ291bGQgbm90IHBhcnNlIG1hcmtkb3duOiB1bnN1cHBvcnRlZCB0b2tlbiB0eXBlOiAiLmNvbmNhdChjLnR5cGUsIi4gRm91bmQ6ICIpLmNvbmNhdChjLnJhdykpO24rK30sYTtuPGUubGVuZ3RoOylpZihhPXMoKSxhKXJldHVybiBhLnY7cmV0dXJue2NoaWxkcmVuOm8sY3Vyc29yOm59fWZ1bmN0aW9uIF9NKGUpe3ZhciB0PWUudGVtcGxhdGVTdHJpbmdzLG49ZS5leHBycyxyPXQuZmxhdE1hcChmdW5jdGlvbihsLGMpe3ZhciB1PW5bY107cmV0dXJuIHU/dVttbl09PT0ibGluayI/bC5jb25jYXQoIiIuY29uY2F0KGJtKS5jb25jYXQoYykuY29uY2F0KGt4KS5jb25jYXQodS5jaGlsZHJlblswXSkuY29uY2F0KEV4KSk6bC5jb25jYXQoIiIuY29uY2F0KGJtKS5jb25jYXQoYykuY29uY2F0KGt4KS5jb25jYXQoRXgpKTpsfSkuam9pbigiIiksbz1NOChyLHtnZm06ITB9KSxpPXBpKG8sbiwwKSxzPWkuY2hpbGRyZW4sYT1pLmN1cnNvcjtpZihhIT09by5sZW5ndGgpdGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkIG1hcmtkb3duIHBhcnNpbmcuIFBvc3NpYmxlIHJlYXNvbjogdW5jbG9zZWQgaHRtbCB0YWc/Iik7cmV0dXJuIFd0KFd0KHt9LG1uLCJyaWNodGV4dCIpLCJjaGlsZHJlbiIscyl9dmFyIENNPUIub2JqZWN0KHt0eXBlOkIudW5pb24oW0IubGl0ZXJhbCgiYm9sZCIpLEIubGl0ZXJhbCgic3RyaWtlIiksQi5saXRlcmFsKCJpdGFsaWMiKV0pfSksdHo9Qi5vYmplY3Qoe3R5cGU6Qi5saXRlcmFsKCJsaW5rIiksYXR0cnM6Qi5vYmplY3Qoe2hyZWY6Qi5zdHJpbmcoKSx0YXJnZXQ6Qi51bmlvbihbQi5saXRlcmFsKCJfYmxhbmsiKSxCLm51bGwoKV0pLGF1dG86Qi5ib29sZWFuKCl9KX0pLE9NPUIuaW50ZXJzZWN0aW9uKEIub2JqZWN0KHt0eXBlOkIubGl0ZXJhbCgidGV4dCIpLHRleHQ6Qi5zdHJpbmcoKX0pLEIub2JqZWN0KHttYXJrczpCLmFycmF5KEIudW5pb24oW0NNLHR6XSkpfSkucGFydGlhbCgpKSxUTT1CLmludGVyc2VjdGlvbihCLm9iamVjdCh7dHlwZTpCLmxpdGVyYWwoImhhcmRCcmVhayIpfSksQi5vYmplY3Qoe21hcmtzOkIuYXJyYXkoQ00pfSkucGFydGlhbCgpKSxuej1CLmludGVyc2VjdGlvbihCLm9iamVjdCh7dHlwZTpCLmxpdGVyYWwoImltYWdlIil9KSxCLm9iamVjdCh7YXR0cnM6Qi5pbnRlcnNlY3Rpb24oQi5vYmplY3Qoe3NyYzpCLnN0cmluZygpfSksQi5vYmplY3Qoe2FsaWduOkIudW5pb24oW0IubGl0ZXJhbCgiY2VudGVyIiksQi5saXRlcmFsKCJlbmQiKSxCLmxpdGVyYWwoImp1c3RpZnkiKSxCLmxpdGVyYWwoImxlZnQiKSxCLmxpdGVyYWwoIm1hdGNoLXBhcmVudCIpLEIubGl0ZXJhbCgicmlnaHQiKSxCLmxpdGVyYWwoInN0YXJ0IiksQi5udWxsKCldKSxhbHQ6Qi51bmlvbihbQi5zdHJpbmcoKSxCLm51bGwoKV0pLGhlaWdodDpCLnVuaW9uKFtCLnN0cmluZygpLEIubnVtYmVyKCksQi5udWxsKCldKSx3aWR0aDpCLnVuaW9uKFtCLnN0cmluZygpLEIubnVtYmVyKCksQi5udWxsKCldKSxyb3RhdGU6Qi51bmlvbihbQi5zdHJpbmcoKSxCLm51bGwoKV0pLHRpdGxlOkIudW5pb24oW0Iuc3RyaW5nKCksQi5udWxsKCldKSxmaWxlTmFtZTpCLnVuaW9uKFtCLnN0cmluZygpLEIubnVsbCgpXSl9KS5wYXJ0aWFsKCkpfSkucGFydGlhbCgpKSxyej1CLmludGVyc2VjdGlvbihCLm9iamVjdCh7dHlwZTpCLmxpdGVyYWwoImhlYWRpbmciKX0pLEIub2JqZWN0KHthdHRyczpCLm9iamVjdCh7bGV2ZWw6Qi5udW1iZXIoKX0pLGNvbnRlbnQ6Qi5hcnJheShCLnVuaW9uKFtPTSxUTV0pKX0pLnBhcnRpYWwoKSksUE09Qi5sYXp5KGZ1bmN0aW9uKCl7cmV0dXJuIEIuaW50ZXJzZWN0aW9uKEIub2JqZWN0KHt0eXBlOkIubGl0ZXJhbCgiYnVsbGV0TGlzdCIpfSksQi5vYmplY3Qoe2NvbnRlbnQ6Qi5hcnJheShSTSl9KS5wYXJ0aWFsKCkpfSksTU09Qi5sYXp5KGZ1bmN0aW9uKCl7cmV0dXJuIEIuaW50ZXJzZWN0aW9uKEIub2JqZWN0KHt0eXBlOkIubGl0ZXJhbCgib3JkZXJlZExpc3QiKX0pLEIub2JqZWN0KHtjb250ZW50OkIuYXJyYXkoUk0pfSkucGFydGlhbCgpKX0pLFJNPUIubGF6eShmdW5jdGlvbigpe3JldHVybiBCLmludGVyc2VjdGlvbihCLm9iamVjdCh7dHlwZTpCLmxpdGVyYWwoImxpc3RJdGVtIil9KSxCLm9iamVjdCh7Y29udGVudDpCLmFycmF5KEIudW5pb24oW05NLFBNLE1NXSkpfSkucGFydGlhbCgpKX0pLE5NPUIuaW50ZXJzZWN0aW9uKEIub2JqZWN0KHt0eXBlOkIubGl0ZXJhbCgicGFyYWdyYXBoIil9KSxCLm9iamVjdCh7Y29udGVudDpCLmFycmF5KEIudW5pb24oW09NLG56LFRNXSkpfSkucGFydGlhbCgpKSxvej1CLm9iamVjdCh7dHlwZTpCLmxpdGVyYWwoImRvYyIpLGNvbnRlbnQ6Qi5hcnJheShCLnVuaW9uKFtOTSxyeixQTSxNTV0pKX0pO2Z1bmN0aW9uIE9FKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG8pLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gd20oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdIT1udWxsP2FyZ3VtZW50c1t0XTp7fTt0JTI/T0UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe1d0KGUscixuW3JdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOk9FKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBpeihlKXtyZXR1cm57dHlwZToiZG9jIixjb250ZW50OmUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBzeih0KX0pfX1mdW5jdGlvbiBzeihlKXtzd2l0Y2goZS50YWcpe2Nhc2UiaDEiOnJldHVybiAkbCgxLGUuY2hpbGRyZW4pO2Nhc2UiaDIiOnJldHVybiAkbCgyLGUuY2hpbGRyZW4pO2Nhc2UiaDMiOnJldHVybiAkbCgzLGUuY2hpbGRyZW4pO2Nhc2UiaDQiOnJldHVybiAkbCg0LGUuY2hpbGRyZW4pO2Nhc2UiaDUiOnJldHVybiAkbCg1LGUuY2hpbGRyZW4pO2Nhc2UiaDYiOnJldHVybiAkbCg2LGUuY2hpbGRyZW4pO2Nhc2UicCI6cmV0dXJuIFRFKGUuY2hpbGRyZW4pO2Nhc2UidWwiOnJldHVybiBETShlKTtjYXNlIm9sIjpyZXR1cm4gSU0oZSk7Y2FzZSJiciI6cmV0dXJuIFRFKFtlXSk7ZGVmYXVsdDp7dmFyIHQ9ZTt0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBjaGlsZCBub2RlOiAiK0pTT04uc3RyaW5naWZ5KHQpKX19fWZ1bmN0aW9uICRsKGUsdCl7cmV0dXJue3R5cGU6ImhlYWRpbmciLGF0dHJzOntsZXZlbDplfSxjb250ZW50OnQuZmxhdE1hcCgkTSl9fWZ1bmN0aW9uIEtnKGUpe3JldHVybnt0eXBlOiJ0ZXh0Iix0ZXh0OmV9fWZ1bmN0aW9uICRNKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/W0tnKGUpXTpWMShlKX1mdW5jdGlvbiBWMShlKXtpZihlLmNsYXNzZXMubGVuZ3RoPT09MCYmZS5jaGlsZHJlbi5sZW5ndGg9PT0xKXtpZih0eXBlb2YgZS5jaGlsZHJlblswXT09InN0cmluZyIpcmV0dXJuW0tnKGUuY2hpbGRyZW5bMF0pXTt0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBhbW91bnQgb2YgY2hpbGRyZW4gaW4gc3BhbiBub2RlOiAiK0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSl9cmV0dXJuIGUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJ0ZXh0Iix0ZXh0OnQsbWFya3M6ZS5jbGFzc2VzLm1hcChmdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSJib2xkIjpyZXR1cm57dHlwZToiYm9sZCJ9O2Nhc2UiaXRhbGljIjpyZXR1cm57dHlwZToiaXRhbGljIn07Y2FzZSJsaW5lLXRocm91Z2giOnJldHVybnt0eXBlOiJzdHJpa2UifTtkZWZhdWx0Ont2YXIgcj1uO3Rocm93IEVycm9yKCJVbmV4cGVjdGVkIHNwYW4gY2xhc3M6ICIrcil9fX0pfX0pfWZ1bmN0aW9uIFRFKGUpe3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6ZS5mbGF0TWFwKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm5bS2codCldO3N3aXRjaCh0LnRhZyl7Y2FzZSJzcGFuIjpyZXR1cm4gVjEodCk7Y2FzZSJhIjpyZXR1cm4gQU0odCk7Y2FzZSJpbWciOnJldHVybltseih0KV07Y2FzZSJiciI6cmV0dXJuW2F6KCldO2RlZmF1bHQ6e3ZhciBuPXQ7dGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgcGFyYWdyYXBoIGNoaWxkOiAiK0pTT04uc3RyaW5naWZ5KG4pKX19fSl9fWZ1bmN0aW9uIGF6KCl7cmV0dXJue3R5cGU6ImhhcmRCcmVhayIsbWFya3M6W119fWZ1bmN0aW9uIEFNKGUpe3JldHVybiBlLmNoaWxkcmVuLmZsYXRNYXAoJE0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gd20od20oe30sdCkse30se21hcmtzOih0Lm1hcmtzfHxbXSkuY29uY2F0KHt0eXBlOiJsaW5rIixhdHRyczp7aHJlZjplLmhyZWYsYXV0bzohMSx0YXJnZXQ6bnVsbH19KX0pfSl9ZnVuY3Rpb24gbHooZSl7cmV0dXJue3R5cGU6ImltYWdlIixhdHRyczp7aGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUud2lkdGgsc3JjOmUuc3JjfX19ZnVuY3Rpb24gRE0oZSl7cmV0dXJue3R5cGU6ImJ1bGxldExpc3QiLGNvbnRlbnQ6ZS5jaGlsZHJlbi5tYXAoTE0pfX1mdW5jdGlvbiBJTShlKXtyZXR1cm57dHlwZToib3JkZXJlZExpc3QiLGNvbnRlbnQ6ZS5jaGlsZHJlbi5tYXAoTE0pfX1mdW5jdGlvbiBMTShlKXtyZXR1cm57dHlwZToibGlzdEl0ZW0iLGNvbnRlbnQ6Y3ooZS5jaGlsZHJlbil9fWZ1bmN0aW9uIGN6KGUpe3ZhciB0PVtdLG49VTEoZSkscjt0cnl7Zm9yKG4ucygpOyEocj1uLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWUsaT10W3QubGVuZ3RoLTFdO2l8fChpPXt0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6W119LHQucHVzaChpKSk7dmFyIHM9aS5jb250ZW50O2lmKHR5cGVvZiBvPT0ic3RyaW5nIilzLnB1c2goS2cobykpO2Vsc2Ugc3dpdGNoKG8udGFnKXtjYXNlImEiOntzLnB1c2guYXBwbHkocyxnZihBTShvKSkpO2JyZWFrfWNhc2UiYnIiOnt0LnB1c2goe3R5cGU6InBhcmFncmFwaCIsY29udGVudDpbXX0pO2JyZWFrfWNhc2Uic3BhbiI6e3MucHVzaC5hcHBseShzLGdmKFYxKG8pKSk7YnJlYWt9Y2FzZSJvbCI6e3QucHVzaChJTShvKSk7YnJlYWt9Y2FzZSJ1bCI6e3QucHVzaChETShvKSk7YnJlYWt9ZGVmYXVsdDp7dmFyIGE9bzt0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBsaXN0IGl0ZW0gY2hpbGQ6ICIrSlNPTi5zdHJpbmdpZnkoYSkpfX19fWNhdGNoKGwpe24uZShsKX1maW5hbGx5e24uZigpfXJldHVybiB0fWZ1bmN0aW9uIHByKCl7cHI9ZnVuY3Rpb24oKXtyZXR1cm4gdH07dmFyIGUsdD17fSxuPU9iamVjdC5wcm90b3R5cGUscj1uLmhhc093blByb3BlcnR5LG89T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihDLFQsTyl7Q1tUXT1PLnZhbHVlfSxpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiI/U3ltYm9sOnt9LHM9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLGE9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixsPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBjKEMsVCxPKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEMsVCx7dmFsdWU6TyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLENbVF19dHJ5e2Moe30sIiIpfWNhdGNoe2M9ZnVuY3Rpb24oVCxPLFIpe3JldHVybiBUW09dPVJ9fWZ1bmN0aW9uIHUoQyxULE8sUil7dmFyIE49VCYmVC5wcm90b3R5cGUgaW5zdGFuY2VvZiB2P1Q6dixqPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpLEc9bmV3IFYoUnx8W10pO3JldHVybiBvKGosIl9pbnZva2UiLHt2YWx1ZTpBKEMsTyxHKX0pLGp9ZnVuY3Rpb24gZChDLFQsTyl7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzpDLmNhbGwoVCxPKX19Y2F0Y2goUil7cmV0dXJue3R5cGU6InRocm93Iixhcmc6Un19fXQud3JhcD11O3ZhciBmPSJzdXNwZW5kZWRTdGFydCIscD0ic3VzcGVuZGVkWWllbGQiLG09ImV4ZWN1dGluZyIsZz0iY29tcGxldGVkIix5PXt9O2Z1bmN0aW9uIHYoKXt9ZnVuY3Rpb24geCgpe31mdW5jdGlvbiB3KCl7fXZhciBrPXt9O2MoayxzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTt2YXIgRT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsUz1FJiZFKEUoSyhbXSkpKTtTJiZTIT09biYmci5jYWxsKFMscykmJihrPVMpO3ZhciBfPXcucHJvdG90eXBlPXYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoayk7ZnVuY3Rpb24gUChDKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goZnVuY3Rpb24oVCl7YyhDLFQsZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX2ludm9rZShULE8pfSl9KX1mdW5jdGlvbiBNKEMsVCl7ZnVuY3Rpb24gTyhOLGosRyx4ZSl7dmFyIHVlPWQoQ1tOXSxDLGopO2lmKHVlLnR5cGUhPT0idGhyb3ciKXt2YXIgamU9dWUuYXJnLENlPWplLnZhbHVlO3JldHVybiBDZSYmdHlwZW9mIENlPT0ib2JqZWN0IiYmci5jYWxsKENlLCJfX2F3YWl0Iik/VC5yZXNvbHZlKENlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24oUSl7TygibmV4dCIsUSxHLHhlKX0sZnVuY3Rpb24oUSl7TygidGhyb3ciLFEsRyx4ZSl9KTpULnJlc29sdmUoQ2UpLnRoZW4oZnVuY3Rpb24oUSl7amUudmFsdWU9USxHKGplKX0sZnVuY3Rpb24oUSl7cmV0dXJuIE8oInRocm93IixRLEcseGUpfSl9eGUodWUuYXJnKX12YXIgUjtvKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbihOLGope2Z1bmN0aW9uIEcoKXtyZXR1cm4gbmV3IFQoZnVuY3Rpb24oeGUsdWUpe08oTixqLHhlLHVlKX0pfXJldHVybiBSPVI/Ui50aGVuKEcsRyk6RygpfX0pfWZ1bmN0aW9uIEEoQyxULE8pe3ZhciBSPWY7cmV0dXJuIGZ1bmN0aW9uKE4sail7aWYoUj09PW0pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoUj09PWcpe2lmKE49PT0idGhyb3ciKXRocm93IGo7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19Zm9yKE8ubWV0aG9kPU4sTy5hcmc9ajs7KXt2YXIgRz1PLmRlbGVnYXRlO2lmKEcpe3ZhciB4ZT1JKEcsTyk7aWYoeGUpe2lmKHhlPT09eSljb250aW51ZTtyZXR1cm4geGV9fWlmKE8ubWV0aG9kPT09Im5leHQiKU8uc2VudD1PLl9zZW50PU8uYXJnO2Vsc2UgaWYoTy5tZXRob2Q9PT0idGhyb3ciKXtpZihSPT09Zil0aHJvdyBSPWcsTy5hcmc7Ty5kaXNwYXRjaEV4Y2VwdGlvbihPLmFyZyl9ZWxzZSBPLm1ldGhvZD09PSJyZXR1cm4iJiZPLmFicnVwdCgicmV0dXJuIixPLmFyZyk7Uj1tO3ZhciB1ZT1kKEMsVCxPKTtpZih1ZS50eXBlPT09Im5vcm1hbCIpe2lmKFI9Ty5kb25lP2c6cCx1ZS5hcmc9PT15KWNvbnRpbnVlO3JldHVybnt2YWx1ZTp1ZS5hcmcsZG9uZTpPLmRvbmV9fXVlLnR5cGU9PT0idGhyb3ciJiYoUj1nLE8ubWV0aG9kPSJ0aHJvdyIsTy5hcmc9dWUuYXJnKX19fWZ1bmN0aW9uIEkoQyxUKXt2YXIgTz1ULm1ldGhvZCxSPUMuaXRlcmF0b3JbT107aWYoUj09PWUpcmV0dXJuIFQuZGVsZWdhdGU9bnVsbCxPPT09InRocm93IiYmQy5pdGVyYXRvci5yZXR1cm4mJihULm1ldGhvZD0icmV0dXJuIixULmFyZz1lLEkoQyxUKSxULm1ldGhvZD09PSJ0aHJvdyIpfHxPIT09InJldHVybiImJihULm1ldGhvZD0idGhyb3ciLFQuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrTysiJyBtZXRob2QiKSkseTt2YXIgTj1kKFIsQy5pdGVyYXRvcixULmFyZyk7aWYoTi50eXBlPT09InRocm93IilyZXR1cm4gVC5tZXRob2Q9InRocm93IixULmFyZz1OLmFyZyxULmRlbGVnYXRlPW51bGwseTt2YXIgaj1OLmFyZztyZXR1cm4gaj9qLmRvbmU/KFRbQy5yZXN1bHROYW1lXT1qLnZhbHVlLFQubmV4dD1DLm5leHRMb2MsVC5tZXRob2QhPT0icmV0dXJuIiYmKFQubWV0aG9kPSJuZXh0IixULmFyZz1lKSxULmRlbGVnYXRlPW51bGwseSk6ajooVC5tZXRob2Q9InRocm93IixULmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLFQuZGVsZWdhdGU9bnVsbCx5KX1mdW5jdGlvbiBMKEMpe3ZhciBUPXt0cnlMb2M6Q1swXX07MSBpbiBDJiYoVC5jYXRjaExvYz1DWzFdKSwyIGluIEMmJihULmZpbmFsbHlMb2M9Q1syXSxULmFmdGVyTG9jPUNbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKFQpfWZ1bmN0aW9uIHJlKEMpe3ZhciBUPUMuY29tcGxldGlvbnx8e307VC50eXBlPSJub3JtYWwiLGRlbGV0ZSBULmFyZyxDLmNvbXBsZXRpb249VH1mdW5jdGlvbiBWKEMpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxDLmZvckVhY2goTCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBLKEMpe2lmKEN8fEM9PT0iIil7dmFyIFQ9Q1tzXTtpZihUKXJldHVybiBULmNhbGwoQyk7aWYodHlwZW9mIEMubmV4dD09ImZ1bmN0aW9uIilyZXR1cm4gQztpZighaXNOYU4oQy5sZW5ndGgpKXt2YXIgTz0tMSxSPWZ1bmN0aW9uIE4oKXtmb3IoOysrTzxDLmxlbmd0aDspaWYoci5jYWxsKEMsTykpcmV0dXJuIE4udmFsdWU9Q1tPXSxOLmRvbmU9ITEsTjtyZXR1cm4gTi52YWx1ZT1lLE4uZG9uZT0hMCxOfTtyZXR1cm4gUi5uZXh0PVJ9fXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIEMrIiBpcyBub3QgaXRlcmFibGUiKX1yZXR1cm4geC5wcm90b3R5cGU9dyxvKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6dyxjb25maWd1cmFibGU6ITB9KSxvKHcsImNvbnN0cnVjdG9yIix7dmFsdWU6eCxjb25maWd1cmFibGU6ITB9KSx4LmRpc3BsYXlOYW1lPWModyxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihDKXt2YXIgVD10eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5jb25zdHJ1Y3RvcjtyZXR1cm4hIVQmJihUPT09eHx8KFQuZGlzcGxheU5hbWV8fFQubmFtZSk9PT0iR2VuZXJhdG9yRnVuY3Rpb24iKX0sdC5tYXJrPWZ1bmN0aW9uKEMpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKEMsdyk6KEMuX19wcm90b19fPXcsYyhDLGwsIkdlbmVyYXRvckZ1bmN0aW9uIikpLEMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXyksQ30sdC5hd3JhcD1mdW5jdGlvbihDKXtyZXR1cm57X19hd2FpdDpDfX0sUChNLnByb3RvdHlwZSksYyhNLnByb3RvdHlwZSxhLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LkFzeW5jSXRlcmF0b3I9TSx0LmFzeW5jPWZ1bmN0aW9uKEMsVCxPLFIsTil7Tj09PXZvaWQgMCYmKE49UHJvbWlzZSk7dmFyIGo9bmV3IE0odShDLFQsTyxSKSxOKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKFQpP2o6ai5uZXh0KCkudGhlbihmdW5jdGlvbihHKXtyZXR1cm4gRy5kb25lP0cudmFsdWU6ai5uZXh0KCl9KX0sUChfKSxjKF8sbCwiR2VuZXJhdG9yIiksYyhfLHMsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGMoXywidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSx0LmtleXM9ZnVuY3Rpb24oQyl7dmFyIFQ9T2JqZWN0KEMpLE89W107Zm9yKHZhciBSIGluIFQpTy5wdXNoKFIpO3JldHVybiBPLnJldmVyc2UoKSxmdW5jdGlvbiBOKCl7Zm9yKDtPLmxlbmd0aDspe3ZhciBqPU8ucG9wKCk7aWYoaiBpbiBUKXJldHVybiBOLnZhbHVlPWosTi5kb25lPSExLE59cmV0dXJuIE4uZG9uZT0hMCxOfX0sdC52YWx1ZXM9SyxWLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VixyZXNldDpmdW5jdGlvbihDKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD1lLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPWUsdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmUpLCFDKWZvcih2YXIgVCBpbiB0aGlzKVQuY2hhckF0KDApPT09InQiJiZyLmNhbGwodGhpcyxUKSYmIWlzTmFOKCtULnNsaWNlKDEpKSYmKHRoaXNbVF09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIEM9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoQy50eXBlPT09InRocm93Iil0aHJvdyBDLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihDKXtpZih0aGlzLmRvbmUpdGhyb3cgQzt2YXIgVD10aGlzO2Z1bmN0aW9uIE8odWUsamUpe3JldHVybiBqLnR5cGU9InRocm93IixqLmFyZz1DLFQubmV4dD11ZSxqZSYmKFQubWV0aG9kPSJuZXh0IixULmFyZz1lKSwhIWplfWZvcih2YXIgUj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7Uj49MDstLVIpe3ZhciBOPXRoaXMudHJ5RW50cmllc1tSXSxqPU4uY29tcGxldGlvbjtpZihOLnRyeUxvYz09PSJyb290IilyZXR1cm4gTygiZW5kIik7aWYoTi50cnlMb2M8PXRoaXMucHJldil7dmFyIEc9ci5jYWxsKE4sImNhdGNoTG9jIikseGU9ci5jYWxsKE4sImZpbmFsbHlMb2MiKTtpZihHJiZ4ZSl7aWYodGhpcy5wcmV2PE4uY2F0Y2hMb2MpcmV0dXJuIE8oTi5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PE4uZmluYWxseUxvYylyZXR1cm4gTyhOLmZpbmFsbHlMb2MpfWVsc2UgaWYoRyl7aWYodGhpcy5wcmV2PE4uY2F0Y2hMb2MpcmV0dXJuIE8oTi5jYXRjaExvYywhMCl9ZWxzZXtpZigheGUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxOLmZpbmFsbHlMb2MpcmV0dXJuIE8oTi5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBPPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtPPj0wOy0tTyl7dmFyIFI9dGhpcy50cnlFbnRyaWVzW09dO2lmKFIudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChSLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxSLmZpbmFsbHlMb2Mpe3ZhciBOPVI7YnJlYWt9fU4mJihDPT09ImJyZWFrInx8Qz09PSJjb250aW51ZSIpJiZOLnRyeUxvYzw9VCYmVDw9Ti5maW5hbGx5TG9jJiYoTj1udWxsKTt2YXIgaj1OP04uY29tcGxldGlvbjp7fTtyZXR1cm4gai50eXBlPUMsai5hcmc9VCxOPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PU4uZmluYWxseUxvYyx5KTp0aGlzLmNvbXBsZXRlKGopfSxjb21wbGV0ZTpmdW5jdGlvbihDLFQpe2lmKEMudHlwZT09PSJ0aHJvdyIpdGhyb3cgQy5hcmc7cmV0dXJuIEMudHlwZT09PSJicmVhayJ8fEMudHlwZT09PSJjb250aW51ZSI/dGhpcy5uZXh0PUMuYXJnOkMudHlwZT09PSJyZXR1cm4iPyh0aGlzLnJ2YWw9dGhpcy5hcmc9Qy5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKTpDLnR5cGU9PT0ibm9ybWFsIiYmVCYmKHRoaXMubmV4dD1UKSx5fSxmaW5pc2g6ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtUPj0wOy0tVCl7dmFyIE89dGhpcy50cnlFbnRyaWVzW1RdO2lmKE8uZmluYWxseUxvYz09PUMpcmV0dXJuIHRoaXMuY29tcGxldGUoTy5jb21wbGV0aW9uLE8uYWZ0ZXJMb2MpLHJlKE8pLHl9fSxjYXRjaDpmdW5jdGlvbihDKXtmb3IodmFyIFQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO1Q+PTA7LS1UKXt2YXIgTz10aGlzLnRyeUVudHJpZXNbVF07aWYoTy50cnlMb2M9PT1DKXt2YXIgUj1PLmNvbXBsZXRpb247aWYoUi50eXBlPT09InRocm93Iil7dmFyIE49Ui5hcmc7cmUoTyl9cmV0dXJuIE59fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oQyxULE8pe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpLKEMpLHJlc3VsdE5hbWU6VCxuZXh0TG9jOk99LHRoaXMubWV0aG9kPT09Im5leHQiJiYodGhpcy5hcmc9ZSkseX19LHR9ZnVuY3Rpb24gUEUoZSx0LG4scixvLGkscyl7dHJ5e3ZhciBhPWVbaV0ocyksbD1hLnZhbHVlfWNhdGNoKGMpe24oYyk7cmV0dXJufWEuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKHIsbyl9ZnVuY3Rpb24gRHUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgaT1lLmFwcGx5KHQsbik7ZnVuY3Rpb24gcyhsKXtQRShpLHIsbyxzLGEsIm5leHQiLGwpfWZ1bmN0aW9uIGEobCl7UEUoaSxyLG8scyxhLCJ0aHJvdyIsbCl9cyh2b2lkIDApfSl9fWZ1bmN0aW9uIHV6KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gTUUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHdNKHIua2V5KSxyKX19ZnVuY3Rpb24gZHooZSx0LG4pe3JldHVybiB0JiZNRShlLnByb3RvdHlwZSx0KSxuJiZNRShlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9dmFyIGZ6PW5ldyBJOCxIMT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG49dGhpczt1eih0aGlzLGUpLFd0KHRoaXMsInN1YnNjcmliZSIsZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBpPVJFKHIpO3JldHVybiBuLmxpc3RlbmVyc1tpXXx8KG4ubGlzdGVuZXJzW2ldPVtdLG4uc3Vic2NyaWJlcnMuc2V0KGkse30pKSxuLmxpc3RlbmVyc1tpXS5wdXNoKG8pLGZ1bmN0aW9uKCl7bi5saXN0ZW5lcnNbaV0uc3BsaWNlKG4ubGlzdGVuZXJzW2ldLmluZGV4T2YobyksMSl9fX0pLFd0KHRoaXMsImdldFNuYXBzaG90IixmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXQocil9fSksV3QodGhpcywiZ2V0U2VydmVyU25hcHNob3QiLGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmdldChyKX19KSxXdCh0aGlzLCJnZXQiLGZ1bmN0aW9uKHIpe3ZhciBvPVJFKHIpO3JldHVybiBuLnN1YnNjcmliZXJzLmdldChvKX0pLHRoaXMuYXBpPXQsdGhpcy5zdWJzY3JpYmVycz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPXt9LHRoaXMuZHJhZnRzPXt9LHRoaXMuc2NoZW1hPXt9fXJldHVybiBkeihlLFt7a2V5OiJnZXRNb2R1bGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9RHUocHIoKS5tYXJrKGZ1bmN0aW9uIHIobyl7dmFyIGkscyxhLGwsYz1hcmd1bWVudHM7cmV0dXJuIHByKCkud3JhcChmdW5jdGlvbihkKXtmb3IoOzspc3dpdGNoKGQucHJldj1kLm5leHQpe2Nhc2UgMDppZihpPWMubGVuZ3RoPjEmJmNbMV0hPT12b2lkIDA/Y1sxXTohMSwhKCFpJiZ0aGlzLmRyYWZ0c1tvXSYmdGhpcy5zY2hlbWFbb10pKXtkLm5leHQ9MzticmVha31yZXR1cm4gZC5hYnJ1cHQoInJldHVybiIsYnQub2soe3NvdXJjZTp0aGlzLmRyYWZ0c1tvXSxzY2hlbWE6dGhpcy5zY2hlbWFbb119KSk7Y2FzZSAzOnJldHVybiBkLm5leHQ9NSx0aGlzLmFwaS5nZXRUcmVlKHtwYXRjaDohMCx0cmVlUGF0aDpvLGluY2x1ZGVTb3VyY2U6ITB9KTtjYXNlIDU6aWYocz1kLnNlbnQsIWJ0LmlzT2socykpe2QubmV4dD0yMjticmVha31pZihzLnZhbHVlLm1vZHVsZXNbb10pe2QubmV4dD0xMDticmVha31yZXR1cm4gY29uc29sZS5lcnJvcigiVmFsOiBjb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlIix7bW9kdWxlSWRzOk9iamVjdC5rZXlzKHMudmFsdWUubW9kdWxlcyksbW9kdWxlSWQ6b30pLGQuYWJydXB0KCJyZXR1cm4iLGJ0LmVycih7bWVzc2FnZToiQ291bGQgbm90IGZldGNoIGRhdGEuIENvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGU6ICIrbysiLiBWZXJpZnkgdGhhdCB0aGUgbW9kdWxlIGlkIGFuZCBmaWxlIG5hbWUgaXMgY29ycmVjdC4ifSkpO2Nhc2UgMTA6aWYoYT1zLnZhbHVlLm1vZHVsZXNbb10uc291cmNlLGw9cy52YWx1ZS5tb2R1bGVzW29dLnNjaGVtYSwhKGEhPT12b2lkIDAmJmwhPT12b2lkIDApKXtkLm5leHQ9MTg7YnJlYWt9cmV0dXJuIHRoaXMuZHJhZnRzW29dPWEsdGhpcy5zY2hlbWFbb109bCxkLmFicnVwdCgicmV0dXJuIixidC5vayh7c291cmNlOmEsc2NoZW1hOmx9KSk7Y2FzZSAxODpyZXR1cm4gY29uc29sZS5lcnJvcigiVmFsOiBjb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlIHNvdXJjZSIpLGQuYWJydXB0KCJyZXR1cm4iLGJ0LmVycih7bWVzc2FnZToiQ291bGQgbm90IGZldGNoIGRhdGEuIFZlcmlmeSB0aGF0IHRoZSBtb2R1bGUgZXhpc3RzLiJ9KSk7Y2FzZSAyMDpkLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gY29uc29sZS5lcnJvcigiVmFsOiBmYWlsZWQgdG8gZ2V0IG1vZHVsZSIscy5lcnJvciksZC5hYnJ1cHQoInJldHVybiIsYnQuZXJyKHttZXNzYWdlOiJDb3VsZCBub3QgZmV0Y2ggZGF0YS4gVmVyaWZ5IHRoYXQgVmFsIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLiJ9KSk7Y2FzZSAyNDpjYXNlImVuZCI6cmV0dXJuIGQuc3RvcCgpfX0scix0aGlzKX0pKTtmdW5jdGlvbiBuKHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbn0oKX0se2tleToiYXBwbHlQYXRjaCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1EdShwcigpLm1hcmsoZnVuY3Rpb24gcihvLGkpe3ZhciBzLGEsbCxjLHUsZCxmLHAsbSxnLHksdjtyZXR1cm4gcHIoKS53cmFwKGZ1bmN0aW9uKHcpe2Zvcig7Oylzd2l0Y2gody5wcmV2PXcubmV4dCl7Y2FzZSAwOmlmKHM9dGhpcy5kcmFmdHNbb10sYT10aGlzLnNjaGVtYVtvXSwhKCFzfHwhYSkpe3cubmV4dD0yMTticmVha31yZXR1cm4gdy5uZXh0PTUsdGhpcy5hcGkuZ2V0VHJlZSh7cGF0Y2g6ITAsdHJlZVBhdGg6byxpbmNsdWRlU291cmNlOiEwfSk7Y2FzZSA1OmlmKGw9dy5zZW50LCFidC5pc09rKGwpKXt3Lm5leHQ9MTk7YnJlYWt9aWYoYz1sLnZhbHVlLm1vZHVsZXNbb10uc291cmNlLHU9bC52YWx1ZS5tb2R1bGVzW29dLnNjaGVtYSwhKGMhPT12b2lkIDAmJnUhPT12b2lkIDApKXt3Lm5leHQ9MTU7YnJlYWt9cz1jLHRoaXMuZHJhZnRzW29dPWMsdGhpcy5zY2hlbWFbb109dSx3Lm5leHQ9MTc7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gY29uc29sZS5lcnJvcigiVmFsOiBjb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlIHNvdXJjZSIpLHcuYWJydXB0KCJyZXR1cm4iLGJ0LmVycih7bWVzc2FnZToiVmFsOiBjb3VsZCBub3QgZmV0Y2ggZGF0YS4gVmVyaWZ5IHRoYXQgdGhlIG1vZHVsZSBleGlzdHMuIn0pKTtjYXNlIDE3OncubmV4dD0yMTticmVhaztjYXNlIDE5OnJldHVybiBjb25zb2xlLmVycm9yKCJWYWw6IGZhaWxlZCB0byBnZXQgbW9kdWxlIixsLmVycm9yKSx3LmFicnVwdCgicmV0dXJuIixidC5lcnIoe21lc3NhZ2U6IlZhbDogY291bGQgbm90IGZldGNoIGRhdGEuIFZlcmlmeSB0aGF0IFZhbCBpcyBjb3JyZWN0bHkgY29uZmlndXJlZC4ifSkpO2Nhc2UgMjE6cmV0dXJuIHcubmV4dD0yMyx0aGlzLmFwaS5wb3N0UGF0Y2hlcyhvLGkpO2Nhc2UgMjM6aWYoZD13LnNlbnQsIWJ0LmlzRXJyKGQpKXt3Lm5leHQ9Mjc7YnJlYWt9cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlZhbDogZmFpbGVkIHRvIHBvc3QgcGF0Y2giLGQuZXJyb3IpLHcuYWJydXB0KCJyZXR1cm4iLGQpO2Nhc2UgMjc6aWYoZj1qOChzLGZ6LGkuZmlsdGVyKG90Lm5vdEZpbGVPcCkpLCFidC5pc09rKGYpKXt3Lm5leHQ9MzU7YnJlYWt9Zm9yKHRoaXMuZHJhZnRzW29dPWYudmFsdWUsdGhpcy5lbWl0RXZlbnQobyxmLnZhbHVlKSxwPTAsbT1BcnJheS5mcm9tKHRoaXMuc3Vic2NyaWJlcnMuZW50cmllcygpKTtwPG0ubGVuZ3RoO3ArKylnPXd4KG1bcF0sMikseT1nWzBdLHY9Z1sxXSx2W29dJiYodGhpcy5zdWJzY3JpYmVycy5zZXQoeSx3bSh3bSh7fSx2KSx7fSxXdCh7fSxvLHRoaXMuZHJhZnRzW29dKSkpLHRoaXMuZW1pdENoYW5nZSh5KSk7cmV0dXJuIHcuYWJydXB0KCJyZXR1cm4iLGQpO2Nhc2UgMzU6cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlZhbDogZmFpbGVkIHRvIGFwcGx5IHBhdGNoIixmLmVycm9yKSx3LmFicnVwdCgicmV0dXJuIixmKTtjYXNlIDM3OmNhc2UiZW5kIjpyZXR1cm4gdy5zdG9wKCl9fSxyLHRoaXMpfSkpO2Z1bmN0aW9uIG4ocixvKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG59KCl9LHtrZXk6ImVtaXRFdmVudCIsdmFsdWU6ZnVuY3Rpb24obixyKXt2YXIgbz1uZXcgQ3VzdG9tRXZlbnQoInZhbC1ldmVudCIse2RldGFpbDp7dHlwZToibW9kdWxlLXVwZGF0ZSIsbW9kdWxlSWQ6bixzb3VyY2U6cn19KTt3aW5kb3cuZGlzcGF0Y2hFdmVudChvKX19LHtrZXk6InVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1EdShwcigpLm1hcmsoZnVuY3Rpb24gcihvKXt2YXIgaT10aGlzO3JldHVybiBwcigpLndyYXAoZnVuY3Rpb24oYSl7Zm9yKDs7KXN3aXRjaChhLnByZXY9YS5uZXh0KXtjYXNlIDA6cmV0dXJuIGEubmV4dD0yLFByb21pc2UuYWxsKG8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBpLnVwZGF0ZVRyZWUobCl9KSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gYS5zdG9wKCl9fSxyKX0pKTtmdW5jdGlvbiBuKHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbn0oKX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9RHUocHIoKS5tYXJrKGZ1bmN0aW9uIHIoKXtyZXR1cm4gcHIoKS53cmFwKGZ1bmN0aW9uKGkpe2Zvcig7Oylzd2l0Y2goaS5wcmV2PWkubmV4dCl7Y2FzZSAwOnJldHVybiBpLmFicnVwdCgicmV0dXJuIix0aGlzLnVwZGF0ZVRyZWUoKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gaS5zdG9wKCl9fSxyLHRoaXMpfSkpO2Z1bmN0aW9uIG4oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG59KCl9LHtrZXk6InVwZGF0ZVRyZWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9RHUocHIoKS5tYXJrKGZ1bmN0aW9uIHIobyl7dmFyIGk9dGhpcyxzLGEsbCxjLHUsZCxmLHAsbSxnLHksdix4LHc7cmV0dXJuIHByKCkud3JhcChmdW5jdGlvbihFKXtmb3IoOzspc3dpdGNoKEUucHJldj1FLm5leHQpe2Nhc2UgMDpyZXR1cm4gRS5uZXh0PTIsdGhpcy5hcGkuZ2V0VHJlZSh7cGF0Y2g6ITAsdHJlZVBhdGg6byxpbmNsdWRlU291cmNlOiEwfSk7Y2FzZSAyOmlmKHM9RS5zZW50LGE9W10sIWJ0LmlzT2socykpe0UubmV4dD0xODticmVha31sPW5ldyBNYXAsYz1BcnJheS5mcm9tKHRoaXMuc3Vic2NyaWJlcnMua2V5cygpKSx1PXByKCkubWFyayhmdW5jdGlvbiBTKCl7dmFyIF8sUCxNO3JldHVybiBwcigpLndyYXAoZnVuY3Rpb24oSSl7Zm9yKDs7KXN3aXRjaChJLnByZXY9SS5uZXh0KXtjYXNlIDA6Xz1mW2RdLGEucHVzaChfKSxQPXMudmFsdWUubW9kdWxlc1tfXS5zb3VyY2UsdHlwZW9mIFA8InUiJiYoaS5lbWl0RXZlbnQoXyxQKSxNPWMuZmluZChmdW5jdGlvbihMKXtyZXR1cm4gTC5pbmNsdWRlcyhfKX0pLE0mJmwuc2V0KE0sKGwuZ2V0KE0pfHxbXSkuY29uY2F0KF8pKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gSS5zdG9wKCl9fSxTKX0pLGQ9MCxmPU9iamVjdC5rZXlzKHMudmFsdWUubW9kdWxlcyk7Y2FzZSA5OmlmKCEoZDxmLmxlbmd0aCkpe0UubmV4dD0xNDticmVha31yZXR1cm4gRS5kZWxlZ2F0ZVlpZWxkKHUoKSwidDAiLDExKTtjYXNlIDExOmQrKyxFLm5leHQ9OTticmVhaztjYXNlIDE0OmZvcihwPTAsbT1BcnJheS5mcm9tKGwuZW50cmllcygpKTtwPG0ubGVuZ3RoO3ArKylnPXd4KG1bcF0sMikseT1nWzBdLHY9Z1sxXSx4PU9iamVjdC5mcm9tRW50cmllcyh2LmZsYXRNYXAoZnVuY3Rpb24oUyl7dmFyIF89cy52YWx1ZS5tb2R1bGVzW1NdLnNvdXJjZTtyZXR1cm4gXz9bW1MsX11dOltdfSkpLHRoaXMuc3Vic2NyaWJlcnMuc2V0KHkseCksdGhpcy5lbWl0Q2hhbmdlKHkpO3JldHVybiBFLmFicnVwdCgicmV0dXJuIixidC5vayhhKSk7Y2FzZSAxODpyZXR1cm4gdz0iRmFpbGVkIHRvIGZldGNoIGNvbnRlbnQuICIscy5lcnJvci5zdGF0dXNDb2RlPT09NDAxP3crPSJBdXRob3JpemF0aW9uIGZhaWxlZCAtIGNoZWNrIHRoYXQgeW91IGFyZSBsb2dnZWQgaW4uIjp3Kz0iR2V0IGEgZGV2ZWxvcGVyIHRvIHZlcmlmeSB0aGF0IFZhbCBpcyBjb3JyZWN0bHkgc2V0dXAuIixFLmFicnVwdCgicmV0dXJuIixidC5lcnIoe21lc3NhZ2U6dyxkZXRhaWxzOntmZXRjaEVycm9yOnMuZXJyb3J9fSkpO2Nhc2UgMjE6Y2FzZSJlbmQiOnJldHVybiBFLnN0b3AoKX19LHIsdGhpcyl9KSk7ZnVuY3Rpb24gbihyKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG59KCl9LHtrZXk6ImVtaXRDaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciByPVUxKHRoaXMubGlzdGVuZXJzW25dKSxvO3RyeXtmb3Ioci5zKCk7IShvPXIubigpKS5kb25lOyl7dmFyIGk9by52YWx1ZTtpKCl9fWNhdGNoKHMpe3IuZShzKX1maW5hbGx5e3IuZigpfX19XSksZX0oKTtmdW5jdGlvbiBSRShlKXtyZXR1cm4gZS5zbGljZSgpLnNvcnQoKS5qb2luKCImIil9Y29uc3QgcHo9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIGpNKGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e3ZhciBpO2NvbnN0IHI9KGk9ZS5jdXJyZW50VGFyZ2V0LmZpbGVzKT09bnVsbD92b2lkIDA6aVswXSxvPW5ldyBGaWxlUmVhZGVyO28uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKCk9Pntjb25zdCBzPW8ucmVzdWx0O2lmKHR5cGVvZiBzPT0ic3RyaW5nIil7Y29uc3QgYT1uZXcgSW1hZ2U7YS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IGw9b3QuZ2V0U0hBMjU2SGFzaChwei5lbmNvZGUocykpO2lmKGEubmF0dXJhbFdpZHRoJiZhLm5hdHVyYWxIZWlnaHQpe2NvbnN0IGM9SGcocyk7dCh7c3JjOnMsd2lkdGg6YS5uYXR1cmFsV2lkdGgsaGVpZ2h0OmEubmF0dXJhbEhlaWdodCxmaWxlbmFtZTpyPT1udWxsP3ZvaWQgMDpyLm5hbWUsc2hhMjU2OmwsbWltZVR5cGU6YyxmaWxlRXh0OmMmJldnKGMpfSl9ZWxzZSB0KHtzcmM6cyxmaWxlbmFtZTpyPT1udWxsP3ZvaWQgMDpyLm5hbWUsc2hhMjU2Omx9KX0pLGEuc3JjPXN9ZWxzZSBuKHM/e21lc3NhZ2U6IlVuZXhwZWN0ZWQgaW1hZ2UgcmVzdWx0IHR5cGUiLHJlc3VsdDpzfTp7bWVzc2FnZToiRW1wdHkgcmVzdWx0In0pfSksciYmby5yZWFkQXNEYXRhVVJMKHIpfSl9ZnVuY3Rpb24gek0oZSx0LG4pe2lmKCFufHwhZSlyZXR1cm4gdDtjb25zdCByPW4uc2hhMjU2LnNsaWNlKDAsNSksbz1IZyhlKT8/InVua25vd24iLGk9V2cobyk/PyJ1bmtub3duIjtpZih0KXtsZXQgcz10LnNwbGl0KCIuIikuc2xpY2UoMCwtMSkuam9pbigiLiIpfHx0O2NvbnN0IGE9cy5sYXN0SW5kZXhPZigiXyIpO3JldHVybiBzLnNsaWNlKGErMSxzLmxlbmd0aCk9PT1yJiYocz1zLnNsaWNlKDAsYSkpLGAke2VuY29kZVVSSUNvbXBvbmVudChzKS5yZXBsYWNlKC8lWzAtOUEtRmEtZl17Mn0vZywiIikudG9Mb3dlckNhc2UoKX1fJHtyfS4ke2l9YH1yZXR1cm5gJHtuLnNoYTI1Nn0uJHtpfWB9Y29uc3QgVzE9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsdHlwZTp0LC4uLm59LHIpPT5iLmpzeCgiaW5wdXQiLHt0eXBlOnQsY2xhc3NOYW1lOlVlKCJmbGV4IGgtMTAgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTMgcHktMiB0ZXh0LWJhc2UgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LXNtIGZpbGU6Zm9udC1tZWRpdW0gcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCIsZSkscmVmOnIsLi4ubn0pKTtXMS5kaXNwbGF5TmFtZT0iSW5wdXQiO2xldCBxZz0oKT0+KHtldmVudHM6e30sZW1pdChlLC4uLnQpeyh0aGlzLmV2ZW50c1tlXXx8W10pLmZvckVhY2gobj0+biguLi50KSl9LG9uKGUsdCl7cmV0dXJuKHRoaXMuZXZlbnRzW2VdPXRoaXMuZXZlbnRzW2VdfHxbXSkucHVzaCh0KSwoKT0+dGhpcy5ldmVudHNbZV09KHRoaXMuZXZlbnRzW2VdfHxbXSkuZmlsdGVyKG49Pm4hPT10KX19KTt2YXIgX3g9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBSZWZsZWN0PCJ1Ij9SZWZsZWN0LmNvbnN0cnVjdDp2b2lkIDAscj1PYmplY3QuZGVmaW5lUHJvcGVydHksbz1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtvPT09dm9pZCAwJiYobz1mdW5jdGlvbihjKXt2YXIgdT1uZXcgRXJyb3I7cihjLCJzdGFjayIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZj11LnN0YWNrO3JldHVybiByKHRoaXMsInN0YWNrIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmYsd3JpdGFibGU6ITB9KSxmfSxzZXQ6ZnVuY3Rpb24oZil7cihjLCJzdGFjayIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpmLHdyaXRhYmxlOiEwfSl9fSl9KTtmdW5jdGlvbiBpKGwpe2whPT12b2lkIDAmJnIodGhpcywibWVzc2FnZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpsLHdyaXRhYmxlOiEwfSk7dmFyIGM9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lO2MhPT12b2lkIDAmJmMhPT10aGlzLm5hbWUmJnIodGhpcywibmFtZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpjLHdyaXRhYmxlOiEwfSksbyh0aGlzLHRoaXMuY29uc3RydWN0b3IpfWkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmksd3JpdGFibGU6ITB9fSk7dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsZCl7cmV0dXJuIHIodSwibmFtZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpkfSl9dHJ5e3ZhciBjPWZ1bmN0aW9uKCl7fTtpZihsKGMsImZvbyIpLGMubmFtZT09PSJmb28iKXJldHVybiBsfWNhdGNoe319KCk7ZnVuY3Rpb24gYShsLGMpe2lmKGM9PW51bGx8fGM9PT1FcnJvciljPWk7ZWxzZSBpZih0eXBlb2YgYyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJzdXBlcl8gc2hvdWxkIGJlIGEgZnVuY3Rpb24iKTt2YXIgdTtpZih0eXBlb2YgbD09InN0cmluZyIpdT1sLGw9biE9PXZvaWQgMD9mdW5jdGlvbigpe3JldHVybiBuKGMsYXJndW1lbnRzLHRoaXMuY29uc3RydWN0b3IpfTpmdW5jdGlvbigpe2MuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzIT09dm9pZCAwJiYocyhsLHUpLHU9dm9pZCAwKTtlbHNlIGlmKHR5cGVvZiBsIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNvbnN0cnVjdG9yIHNob3VsZCBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiIpO2wuc3VwZXJfPWwuc3VwZXI9Yzt2YXIgZD17Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpsLHdyaXRhYmxlOiEwfX07cmV0dXJuIHUhPT12b2lkIDAmJihkLm5hbWU9e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp1LHdyaXRhYmxlOiEwfSksbC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSxkKSxsfXQ9ZS5leHBvcnRzPWEsdC5CYXNlRXJyb3I9aX0pKF94LF94LmV4cG9ydHMpO3ZhciBGTT1feC5leHBvcnRzLE5FPSJQcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUiLEJNPSLvv7wiLFRzPSJcMCIsJEU9Il9fc3RhdGVfb3ZlcnJpZGVfXyIsaHo9e0xhc3ROb2RlQ29tcGF0aWJsZToibGFzdE5vZGVDb21wYXRpYmxlIixGb3JtYXR0aW5nTWFyazoiZm9ybWF0dGluZ01hcmsiLEZvcm1hdHRpbmdOb2RlOiJmb3JtYXR0aW5nTm9kZSIsTm9kZUN1cnNvcjoibm9kZUN1cnNvciIsRm9udFN0eWxlOiJmb250U3R5bGUiLExpbms6ImxpbmsiLENvbG9yOiJjb2xvciIsQWxpZ25tZW50OiJhbGlnbm1lbnQiLEluZGVudGF0aW9uOiJpbmRlbnRhdGlvbiIsQmVoYXZpb3I6ImJlaGF2aW9yIixDb2RlOiJjb2RlIixJbmxpbmVOb2RlOiJpbmxpbmUiLExpc3RDb250YWluZXJOb2RlOiJsaXN0Q29udGFpbmVyIixMaXN0SXRlbU5vZGU6Imxpc3RJdGVtTm9kZSIsQmxvY2s6ImJsb2NrIixCbG9ja05vZGU6ImJsb2NrIixUZXh0QmxvY2s6InRleHRCbG9jayIsRXhjbHVkZUlucHV0UnVsZXM6ImV4Y2x1ZGVGcm9tSW5wdXRSdWxlcyIsUHJldmVudEV4aXRzOiJwcmV2ZW50c0V4aXRzIixNZWRpYToibWVkaWEifSxMZT1oeixJaT1TeW1ib2wuZm9yKCJfX3JlbWlycm9yX18iKSxnbj0oZT0+KGUuUGxhaW5FeHRlbnNpb249IlJlbWlycm9yUGxhaW5FeHRlbnNpb24iLGUuTm9kZUV4dGVuc2lvbj0iUmVtaXJyb3JOb2RlRXh0ZW5zaW9uIixlLk1hcmtFeHRlbnNpb249IlJlbWlycm9yTWFya0V4dGVuc2lvbiIsZS5QbGFpbkV4dGVuc2lvbkNvbnN0cnVjdG9yPSJSZW1pcnJvclBsYWluRXh0ZW5zaW9uQ29uc3RydWN0b3IiLGUuTm9kZUV4dGVuc2lvbkNvbnN0cnVjdG9yPSJSZW1pcnJvck5vZGVFeHRlbnNpb25Db25zdHJ1Y3RvciIsZS5NYXJrRXh0ZW5zaW9uQ29uc3RydWN0b3I9IlJlbWlycm9yTWFya0V4dGVuc2lvbkNvbnN0cnVjdG9yIixlLk1hbmFnZXI9IlJlbWlycm9yTWFuYWdlciIsZS5QcmVzZXQ9IlJlbWlycm9yUHJlc2V0IixlLlByZXNldENvbnN0cnVjdG9yPSJSZW1pcnJvclByZXNldENvbnN0cnVjdG9yIixlKSkoZ258fHt9KSxjdD0oZT0+KGVbZS5Dcml0aWNhbD0xZTZdPSJDcml0aWNhbCIsZVtlLkhpZ2hlc3Q9MWU1XT0iSGlnaGVzdCIsZVtlLkhpZ2g9MWU0XT0iSGlnaCIsZVtlLk1lZGl1bT0xZTNdPSJNZWRpdW0iLGVbZS5EZWZhdWx0PTEwMF09IkRlZmF1bHQiLGVbZS5Mb3c9MTBdPSJMb3ciLGVbZS5Mb3dlc3Q9MF09Ikxvd2VzdCIsZSkpKGN0fHx7fSkscnI9KGU9PihlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkNyZWF0ZT0xXT0iQ3JlYXRlIixlW2UuRWRpdG9yVmlldz0yXT0iRWRpdG9yVmlldyIsZVtlLlJ1bnRpbWU9M109IlJ1bnRpbWUiLGVbZS5EZXN0cm95PTRdPSJEZXN0cm95IixlKSkocnJ8fHt9KSxZPShlPT4oZS5VbmRvPSJffHVuZG98XyIsZS5SZWRvPSJffHJlZG98XyIsZS5Cb2xkPSJffGJvbGR8XyIsZS5JdGFsaWM9Il98aXRhbGljfF8iLGUuVW5kZXJsaW5lPSJffHVuZGVybGluZXxfIixlLlN0cmlrZT0iX3xzdHJpa2V8XyIsZS5Db2RlPSJffGNvZGV8XyIsZS5QYXJhZ3JhcGg9Il98cGFyYWdyYXBofF8iLGUuSDE9Il98aDF8XyIsZS5IMj0iX3xoMnxfIixlLkgzPSJffGgzfF8iLGUuSDQ9Il98aDR8XyIsZS5INT0iX3xoNXxfIixlLkg2PSJffGg2fF8iLGUuVGFza0xpc3Q9Il98dGFza3xfIixlLkJ1bGxldExpc3Q9Il98YnVsbGV0fF8iLGUuT3JkZXJlZExpc3Q9Il98bnVtYmVyfF8iLGUuUXVvdGU9Il98cXVvdGV8XyIsZS5EaXZpZGVyPSJffGRpdmlkZXJ8XyIsZS5Db2RlYmxvY2s9Il98Y29kZWJsb2NrfF8iLGUuQ2xlYXJGb3JtYXR0aW5nPSJffGNsZWFyfF8iLGUuU3VwZXJzY3JpcHQ9Il98c3VwfF8iLGUuU3Vic2NyaXB0PSJffHN1YnxfIixlLkxlZnRBbGlnbm1lbnQ9Il98bGVmdC1hbGlnbnxfIixlLkNlbnRlckFsaWdubWVudD0iX3xjZW50ZXItYWxpZ258XyIsZS5SaWdodEFsaWdubWVudD0iX3xyaWdodC1hbGlnbnxfIixlLkp1c3RpZnlBbGlnbm1lbnQ9Il98anVzdGlmeS1hbGlnbnxfIixlLkluc2VydExpbms9Il98bGlua3xfIixlLkZpbmQ9Il98ZmluZHxfIixlLkZpbmRCYWNrd2FyZHM9Il98ZmluZC1iYWNrd2FyZHN8XyIsZS5GaW5kUmVwbGFjZT0iX3xmaW5kLXJlcGxhY2V8XyIsZS5BZGRGb290bm90ZT0iX3xmb290bm90ZXxfIixlLkFkZENvbW1lbnQ9Il98Y29tbWVudHxfIixlLkNvbnRleHRNZW51PSJffGNvbnRleHQtbWVudXxfIixlLkluY3JlYXNlRm9udFNpemU9Il98aW5jLWZvbnQtc2l6ZXxfIixlLkRlY3JlYXNlRm9udFNpemU9Il98ZGVjLWZvbnQtc2l6ZXxfIixlLkluY3JlYXNlSW5kZW50PSJffGluZGVudHxfIixlLkRlY3JlYXNlSW5kZW50PSJffGRlZGVudHxfIixlLlNob3J0Y3V0cz0iX3xzaG9ydGN1dHN8XyIsZS5Db3B5PSJffGNvcHl8XyIsZS5DdXQ9Il98Y3V0fF8iLGUuUGFzdGU9Il98cGFzdGV8XyIsZS5QYXN0ZVBsYWluPSJffHBhc3RlLXBsYWlufF8iLGUuU2VsZWN0QWxsPSJffHNlbGVjdC1hbGx8XyIsZS5Gb3JtYXQ9Il98Zm9ybWF0fF8iLGUpKShZfHx7fSkscT0oZT0+KGUuUFJPRD0iUk1SMDAwMCIsZS5VTktOT1dOPSJSTVIwMDAxIixlLklOVkFMSURfQ09NTUFORF9BUkdVTUVOVFM9IlJNUjAwMDIiLGUuQ1VTVE9NPSJSTVIwMDAzIixlLkNPUkVfSEVMUEVSUz0iUk1SMDAwNCIsZS5NVVRBVElPTj0iUk1SMDAwNSIsZS5JTlRFUk5BTD0iUk1SMDAwNiIsZS5NSVNTSU5HX1JFUVVJUkVEX0VYVEVOU0lPTj0iUk1SMDAwNyIsZS5NQU5BR0VSX1BIQVNFX0VSUk9SPSJSTVIwMDA4IixlLklOVkFMSURfR0VUX0VYVEVOU0lPTj0iUk1SMDAxMCIsZS5JTlZBTElEX01BTkFHRVJfQVJHVU1FTlRTPSJSTVIwMDExIixlLlNDSEVNQT0iUk1SMDAxMiIsZS5IRUxQRVJTX0NBTExFRF9JTl9PVVRFUl9TQ09QRT0iUk1SMDAxMyIsZS5JTlZBTElEX01BTkFHRVJfRVhURU5TSU9OPSJSTVIwMDE0IixlLkRVUExJQ0FURV9DT01NQU5EX05BTUVTPSJSTVIwMDE2IixlLkRVUExJQ0FURV9IRUxQRVJfTkFNRVM9IlJNUjAwMTciLGUuTk9OX0NIQUlOQUJMRV9DT01NQU5EPSJSTVIwMDE4IixlLklOVkFMSURfRVhURU5TSU9OPSJSTVIwMDE5IixlLklOVkFMSURfQ09OVEVOVD0iUk1SMDAyMSIsZS5JTlZBTElEX05BTUU9IlJNUjAwNTAiLGUuRVhURU5TSU9OPSJSTVIwMTAwIixlLkVYVEVOU0lPTl9TUEVDPSJSTVIwMTAxIixlLkVYVEVOU0lPTl9FWFRSQV9BVFRSSUJVVEVTPSJSTVIwMTAyIixlLklOVkFMSURfU0VUX0VYVEVOU0lPTl9PUFRJT05TPSJSTVIwMTAzIixlLlJFQUNUX1BST1ZJREVSX0NPTlRFWFQ9IlJNUjAyMDAiLGUuUkVBQ1RfR0VUX1JPT1RfUFJPUFM9IlJNUjAyMDEiLGUuUkVBQ1RfRURJVE9SX1ZJRVc9IlJNUjAyMDIiLGUuUkVBQ1RfQ09OVFJPTExFRD0iUk1SMDIwMyIsZS5SRUFDVF9OT0RFX1ZJRVc9IlJNUjAyMDQiLGUuUkVBQ1RfR0VUX0NPTlRFWFQ9IlJNUjAyMDUiLGUuUkVBQ1RfQ09NUE9ORU5UUz0iUk1SMDIwNiIsZS5SRUFDVF9IT09LUz0iUk1SMDIwNyIsZS5JMThOX0NPTlRFWFQ9IlJNUjAzMDAiLGUpKShxfHx7fSksbXo9ZnVuY3Rpb24odCl7cmV0dXJuIGd6KHQpJiYhdnoodCl9O2Z1bmN0aW9uIGd6KGUpe3JldHVybiEhZSYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIHZ6KGUpe3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtyZXR1cm4gdD09PSJbb2JqZWN0IFJlZ0V4cF0ifHx0PT09IltvYmplY3QgRGF0ZV0ifHxieihlKX12YXIgeXo9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLmZvcix4ej15ej9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDM7ZnVuY3Rpb24gYnooZSl7cmV0dXJuIGUuJCR0eXBlb2Y9PT14en1mdW5jdGlvbiB3eihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTp7fX1mdW5jdGlvbiB2ZihlLHQpe3JldHVybiB0LmNsb25lIT09ITEmJnQuaXNNZXJnZWFibGVPYmplY3QoZSk/VmMod3ooZSksZSx0KTplfWZ1bmN0aW9uIFN6KGUsdCxuKXtyZXR1cm4gZS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHIpe3JldHVybiB2ZihyLG4pfSl9ZnVuY3Rpb24ga3ooZSx0KXtpZighdC5jdXN0b21NZXJnZSlyZXR1cm4gVmM7dmFyIG49dC5jdXN0b21NZXJnZShlKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/bjpWY31mdW5jdGlvbiBFeihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KX0pOltdfWZ1bmN0aW9uIEFFKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5jb25jYXQoRXooZSkpfWZ1bmN0aW9uIFVNKGUsdCl7dHJ5e3JldHVybiB0IGluIGV9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIF96KGUsdCl7cmV0dXJuIFVNKGUsdCkmJiEoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSl9ZnVuY3Rpb24gQ3ooZSx0LG4pe3ZhciByPXt9O3JldHVybiBuLmlzTWVyZ2VhYmxlT2JqZWN0KGUpJiZBRShlKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3Jbb109dmYoZVtvXSxuKX0pLEFFKHQpLmZvckVhY2goZnVuY3Rpb24obyl7X3ooZSxvKXx8KFVNKGUsbykmJm4uaXNNZXJnZWFibGVPYmplY3QodFtvXSk/cltvXT1reihvLG4pKGVbb10sdFtvXSxuKTpyW29dPXZmKHRbb10sbikpfSkscn1mdW5jdGlvbiBWYyhlLHQsbil7bj1ufHx7fSxuLmFycmF5TWVyZ2U9bi5hcnJheU1lcmdlfHxTeixuLmlzTWVyZ2VhYmxlT2JqZWN0PW4uaXNNZXJnZWFibGVPYmplY3R8fG16LG4uY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQ9dmY7dmFyIHI9QXJyYXkuaXNBcnJheSh0KSxvPUFycmF5LmlzQXJyYXkoZSksaT1yPT09bztyZXR1cm4gaT9yP24uYXJyYXlNZXJnZShlLHQsbik6Q3ooZSx0LG4pOnZmKHQsbil9VmMuYWxsPWZ1bmN0aW9uKHQsbil7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24ocixvKXtyZXR1cm4gVmMocixvLG4pfSx7fSl9O3ZhciBPej1WYyxUej1Pejtjb25zdCBQej1zaShUeik7LyohCiAqIGlzb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pc29iamVjdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiAqL3ZhciBWTT1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KHQpPT09ITF9Oy8qIQogKiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiAqL3ZhciBNej1WTTtmdW5jdGlvbiBERShlKXtyZXR1cm4gTXooZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9dmFyIFJ6PWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIShERSh0KT09PSExfHwobj10LmNvbnN0cnVjdG9yLHR5cGVvZiBuIT0iZnVuY3Rpb24iKXx8KHI9bi5wcm90b3R5cGUsREUocik9PT0hMSl8fHIuaGFzT3duUHJvcGVydHkoImlzUHJvdG90eXBlT2YiKT09PSExKX07LyohCiAqIGlzLWV4dGVuZGFibGUgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLWV4dGVuZGFibGU+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi92YXIgTno9UnosJHo9ZnVuY3Rpb24odCl7cmV0dXJuIE56KHQpfHx0eXBlb2YgdD09ImZ1bmN0aW9uInx8QXJyYXkuaXNBcnJheSh0KX07LyohCiAqIG9iamVjdC5vbWl0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9vYmplY3Qub21pdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiAqL3ZhciBBej0keixEej1mdW5jdGlvbih0LG4scil7aWYoIUF6KHQpKXJldHVybnt9O3R5cGVvZiBuPT0iZnVuY3Rpb24iJiYocj1uLG49W10pLHR5cGVvZiBuPT0ic3RyaW5nIiYmKG49W25dKTtmb3IodmFyIG89dHlwZW9mIHI9PSJmdW5jdGlvbiIsaT1PYmplY3Qua2V5cyh0KSxzPXt9LGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGw9aVthXSxjPXRbbF07KCFufHxuLmluZGV4T2YobCk9PT0tMSYmKCFvfHxyKGMsbCx0KSkpJiYoc1tsXT1jKX1yZXR1cm4gc307Y29uc3QgSzE9c2koRHopOy8qIQogKiBvYmplY3QucGljayA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvb2JqZWN0LnBpY2s+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IEpvbiBTY2hsaW5rZXJ0LCBjb250cmlidXRvcnMuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZQogKi92YXIgSXo9Vk0sTHo9ZnVuY3Rpb24odCxuKXtpZighSXoodCkmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXJldHVybnt9O3ZhciByPXt9O2lmKHR5cGVvZiBuPT0ic3RyaW5nIilyZXR1cm4gbiBpbiB0JiYocltuXT10W25dKSxyO2Zvcih2YXIgbz1uLmxlbmd0aCxpPS0xOysraTxvOyl7dmFyIHM9bltpXTtzIGluIHQmJihyW3NdPXRbc10pfXJldHVybiByfTtjb25zdCBDeD1zaShMeiksSE09L15bYS16w6Atw7bDuC3Dv10rfFtBLVrDgC3DlsOYLcOfXVthLXrDoC3DtsO4LcO/XSt8W2EtesOgLcO2w7gtw79dK3xbMC05XSt8W0EtWsOALcOWw5gtw59dKyg/IVthLXrDoC3DtsO4LcO/XSkvZyxqej0vXFMrL2c7ZnVuY3Rpb24genooZSx0KXtjb25zdCBuPXtwYXJ0czpbXSxwcmVmaXhlczpbXX0scj1lLm1hdGNoQWxsKHQpO2xldCBvPTA7Zm9yKGNvbnN0IHMgb2Ygcil7aWYodHlwZW9mIHMuaW5kZXghPSJudW1iZXIiKWNvbnRpbnVlO2NvbnN0IGE9c1swXTtuLnBhcnRzLnB1c2goYSk7Y29uc3QgbD1lLnNsaWNlKG8scy5pbmRleCkudHJpbSgpO24ucHJlZml4ZXMucHVzaChsKSxvPXMuaW5kZXgrYS5sZW5ndGh9Y29uc3QgaT1lLnNsaWNlKG8pLnRyaW0oKTtyZXR1cm4gaSYmKG4ucGFydHMucHVzaCgiIiksbi5wcmVmaXhlcy5wdXNoKGkpKSxufWZ1bmN0aW9uIFdNKGUsdCl7Y29uc3R7a2VlcFNwZWNpYWxDaGFyYWN0ZXJzOm49ITEsa2VlcDpyLHByZWZpeDpvPSIifT10fHx7fSxpPWUudHJpbSgpLm5vcm1hbGl6ZSgiTkZDIikscz1pLmluY2x1ZGVzKCIgIiksbD16eihpLHM/ano6SE0pO3JldHVybiBsLnBhcnRzLm1hcCgoYyx1KT0+e2xldCBkPWwucHJlZml4ZXNbdV18fCIiLGY9YztyZXR1cm4gbj09PSExJiYociYmKGY9Zi5ub3JtYWxpemUoIk5GRCIpLnJlcGxhY2UobmV3IFJlZ0V4cChgW15hLXpBLVrDmMOfw7gwLTkke3Iuam9pbigiIil9XWAsImciKSwiIikpLHJ8fChmPWYubm9ybWFsaXplKCJORkQiKS5yZXBsYWNlKC9bXmEtekEtWsOYw5/DuDAtOV0vZywiIiksZD0iIikpLHImJihkPWQucmVwbGFjZShuZXcgUmVnRXhwKGBbXiR7ci5qb2luKCIiKX1dYCwiZyIpLCIiKSksdT09PTA/ZCtmOiFkJiYhZj8iIjpzJiYhZCYmby5tYXRjaCgvXHMvKT8iICIrZjooZHx8bykrZn0pLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiBGeihlKXtjb25zdCB0PWUubWF0Y2hBbGwoSE0pLm5leHQoKS52YWx1ZSxuPXQ/dC5pbmRleDowO3JldHVybiBlLnNsaWNlKDAsbisxKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UobisxKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEtNKGUsdCl7cmV0dXJuIFdNKGUsdCkucmVkdWNlKChuLHIpPT5uK0Z6KHIpLCIiKX1mdW5jdGlvbiBJRShlLHQpe3JldHVybiBXTShlLHsuLi50LHByZWZpeDoiLSJ9KS5qb2luKCIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIE94KGUsdCxuLHIpe3ZhciBvLGk9ITEscz0wO2Z1bmN0aW9uIGEoKXtvJiZjbGVhclRpbWVvdXQobyl9ZnVuY3Rpb24gbCgpe2EoKSxpPSEwfXR5cGVvZiB0IT0iYm9vbGVhbiImJihyPW4sbj10LHQ9dm9pZCAwKTtmdW5jdGlvbiBjKCl7Zm9yKHZhciB1PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkodSksZj0wO2Y8dTtmKyspZFtmXT1hcmd1bWVudHNbZl07dmFyIHA9dGhpcyxtPURhdGUubm93KCktcztpZihpKXJldHVybjtmdW5jdGlvbiBnKCl7cz1EYXRlLm5vdygpLG4uYXBwbHkocCxkKX1mdW5jdGlvbiB5KCl7bz12b2lkIDB9ciYmIW8mJmcoKSxhKCkscj09PXZvaWQgMCYmbT5lP2coKTp0IT09ITAmJihvPXNldFRpbWVvdXQocj95Omcscj09PXZvaWQgMD9lLW06ZSkpfXJldHVybiBjLmNhbmNlbD1sLGN9ZnVuY3Rpb24gQnooZSx0LG4pe3JldHVybiBuPT09dm9pZCAwP094KGUsdCwhMSk6T3goZSxuLHQhPT0hMSl9ZnVuY3Rpb24gUHQoZSx0LG4pe2NvbnN0IHI9ZVt0XTtyZXR1cm4gcU0oIVlnKHIpLG4pLHJ9ZnVuY3Rpb24gcU0oZSx0KXtpZighZSl0aHJvdyBuZXcgVXoodCl9dmFyIFV6PWNsYXNzIGV4dGVuZHMgRk0uQmFzZUVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIn19O2Z1bmN0aW9uIEp0KGUpe3JldHVybiBPYmplY3QuZW50cmllcyhlKX1mdW5jdGlvbiB5ZihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSl9ZnVuY3Rpb24gR2coZSl7cmV0dXJuIE9iamVjdC52YWx1ZXMoZSl9ZnVuY3Rpb24gJG8oZSx0LG4pe3JldHVybiBlLmluY2x1ZGVzKHQsbil9ZnVuY3Rpb24gaGUoZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSxlKX1mdW5jdGlvbiBHTShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIFlNKGUpe3JldHVybiBHTShlKS5zbGljZSg4LC0xKX1mdW5jdGlvbiBvcChlLHQpe3JldHVybiBuPT50eXBlb2YgbiE9PWU/ITE6dD90KG4pOiEwfWZ1bmN0aW9uIHExKGUpe3JldHVybiB0PT5ZTSh0KT09PWV9dmFyIFlnPW9wKCJ1bmRlZmluZWQiKSxfZT1vcCgic3RyaW5nIiksTXI9b3AoIm51bWJlciIsZT0+IU51bWJlci5pc05hTihlKSkscHQ9b3AoImZ1bmN0aW9uIik7ZnVuY3Rpb24gVnooZSl7cmV0dXJuIGU9PT1udWxsfWZ1bmN0aW9uIEh6KGUpe3JldHVybiBlPT09ITB8fGU9PT0hMX1mdW5jdGlvbiBibChlKXtpZihZTShlKSE9PSJPYmplY3QiKXJldHVybiExO2NvbnN0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0PT09bnVsbHx8dD09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSl9ZnVuY3Rpb24gV3ooZSl7cmV0dXJuIGU9PW51bGx8fC9eW2Juc10vLnRlc3QodHlwZW9mIGUpfWZ1bmN0aW9uIFpzKGUpe3JldHVybiBWeihlKXx8WWcoZSl9ZnVuY3Rpb24gam4oZSl7cmV0dXJuIVpzKGUpJiYocHQoZSl8fG9wKCJvYmplY3QiKShlKSl9dmFyIEt6PXExKCJSZWdFeHAiKTtmdW5jdGlvbiBxeihlKXtyZXR1cm4gcTEoIk1hcCIpKGUpfWZ1bmN0aW9uIEd6KGUpe3JldHVybiBxMSgiU2V0IikoZSl9ZnVuY3Rpb24gU20oZSl7cmV0dXJuIGpuKGUpJiYhcXooZSkmJiFHeihlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MH12YXIgZW49QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBKcyhlKXtyZXR1cm4gZW4oZSkmJmUubGVuZ3RoPT09MH1mdW5jdGlvbiBMRShlKXtyZXR1cm4gZW4oZSkmJmUubGVuZ3RoPjB9ZnVuY3Rpb24gWGcoZSx0LG49cj0+ISFyKXt0Lmxhc3RJbmRleD0wO2NvbnN0IHI9W10sbz10LmZsYWdzO2xldCBpO28uaW5jbHVkZXMoImciKXx8KHQ9bmV3IFJlZ0V4cCh0LnNvdXJjZSxgZyR7b31gKSk7ZG8gaT10LmV4ZWMoZSksaSYmci5wdXNoKGkpO3doaWxlKG4oaSkpO3JldHVybiB0Lmxhc3RJbmRleD0wLHJ9ZnVuY3Rpb24ga20oKXtjb25zdCBlPURhdGUubm93KCksdD1rbS5sYXN0fHxlO3JldHVybiBrbS5sYXN0PWU+dD9lOnQrMX1rbS5sYXN0PTA7ZnVuY3Rpb24gRW0oZT0iIil7cmV0dXJuYCR7ZX0ke2ttKCkudG9TdHJpbmcoMzYpfWB9ZnVuY3Rpb24gWXooZSl7cmV0dXJuIEsxKGUsdD0+IVlnKHQpKX1mdW5jdGlvbiBYeihlKXtpZighYmwoZSkpdGhyb3cgbmV3IEVycm9yKCJBbiBpbnZhbGlkIHZhbHVlIHdhcyBwYXNzZWQgaW50byB0aGlzIGNsb25lIHV0aWxpdHkuIEV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0Iik7cmV0dXJuey4uLmV9fWZ1bmN0aW9uIHhmKGUsdD0hMSl7Y29uc3Qgbj10P1suLi5lXS5yZXZlcnNlKCk6ZSxyPW5ldyBTZXQobik7cmV0dXJuIHQ/Wy4uLnJdLnJldmVyc2UoKTpbLi4ucl19ZnVuY3Rpb24gWE0oKXt9ZnVuY3Rpb24gWnooLi4uZSl7cmV0dXJuIFB6LmFsbChlLHtpc01lcmdlYWJsZU9iamVjdDpibH0pfWZ1bmN0aW9uIEp6KHttaW46ZSxtYXg6dCx2YWx1ZTpufSl7cmV0dXJuIG48ZT9lOm4+dD90Om59ZnVuY3Rpb24gUXooZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19ZnVuY3Rpb24gaWwoZSx0KXtyZXR1cm5bLi4uZV0ubWFwKChuLHIpPT4oe3ZhbHVlOm4saW5kZXg6cn0pKS5zb3J0KChuLHIpPT50KG4udmFsdWUsci52YWx1ZSl8fG4uaW5kZXgtci5pbmRleCkubWFwKCh7dmFsdWU6bn0pPT5uKX1mdW5jdGlvbiBlOShlLHQsbil7dHJ5e2lmKF9lKHQpJiZ0IGluIGUpcmV0dXJuIGVbdF07ZW4odCkmJih0PWBbJyR7dC5qb2luKCInXVsnIil9J11gKTtsZXQgcj1lO3JldHVybiB0LnJlcGxhY2UoL1xbXHMqKFsiJ10pKC4qPylcMVxzKl18XlxzKihcdyspXHMqKD89XC58XFt8JCl8XC5ccyooXHcqKVxzKig/PVwufFxbfCQpfFxbXHMqKC0/XGQrKVxzKl0vZywobyxpLHMsYSxsLGMpPT4ocj1yW3N8fGF8fGx8fGNdLCIiKSkscj09PXZvaWQgMD9uOnJ9Y2F0Y2h7cmV0dXJuIG59fWZ1bmN0aW9uIHQ5KGUsdCl7Y29uc3Qgbj1Yeih0KTtsZXQgcj1uO2Zvcihjb25zdFtvLGldb2YgZS5lbnRyaWVzKCkpe2NvbnN0IHM9bz49ZS5sZW5ndGgtMTtsZXQgYT1yW2ldO2lmKHMpe2lmKGVuKHIpKXtjb25zdCBsPU51bWJlci5wYXJzZUludChpLnRvU3RyaW5nKCksMTApO01yKGwpJiZyLnNwbGljZShsLDEpfWVsc2UgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShyLGkpO3JldHVybiBufWlmKFd6KGEpKXJldHVybiBuO2E9ZW4oYSk/Wy4uLmFdOnsuLi5hfSxyW2ldPWEscj1hfXJldHVybiBufWZ1bmN0aW9uIG45KGUpe3JldHVybiB0PT5lOSh0LGUpfWZ1bmN0aW9uIFpNKGUsdCxuPSExKXtjb25zdCByPVtdLG89bmV3IFNldCxpPXB0KHQpP3Q6bjkodCkscz1uP1suLi5lXS5yZXZlcnNlKCk6ZTtmb3IoY29uc3QgYSBvZiBzKXtjb25zdCBsPWkoYSk7by5oYXMobCl8fChvLmFkZChsKSxyLnB1c2goYSkpfXJldHVybiBuP3IucmV2ZXJzZSgpOnJ9ZnVuY3Rpb24gSk0oZSx0KXtjb25zdCBuPWVuKGUpP2VbMF06ZTtyZXR1cm4gTXIodCk/bjw9dD9BcnJheS5mcm9tKHtsZW5ndGg6dCsxLW59LChyLG8pPT5vK24pOkFycmF5LmZyb20oe2xlbmd0aDpuKzEtdH0sKHIsbyk9Pi0xKm8rbik6QXJyYXkuZnJvbSh7bGVuZ3RoOk1hdGguYWJzKG4pfSwocixvKT0+KG48MD8tMToxKSpvKX1mdW5jdGlvbiBqRShlLC4uLnQpe2NvbnN0IG49dC5maWx0ZXIoTXIpO3JldHVybiBlPj1NYXRoLm1pbiguLi5uKSYmZTw9TWF0aC5tYXgoLi4ubil9ZnVuY3Rpb24gUU0oZSl7cmV0dXJuIHB0KGUpP2UoKTplfXZhciBlUj0iaHR0cHM6Ly9yZW1pcnJvci5pby9kb2NzL2Vycm9ycyIscjk9e1txLlVOS05PV05dOiJBbiBlcnJvciBvY2N1cnJlZCBidXQgd2UncmUgbm90IHF1aXRlIHN1cmUgd2h5LiDwn6eQIixbcS5JTlZBTElEX0NPTU1BTkRfQVJHVU1FTlRTXToiVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGNvbW1hbmQgbWV0aG9kIHdlcmUgaW52YWxpZC4iLFtxLkNVU1RPTV06IlRoaXMgaXMgYSBjdXN0b20gZXJyb3IsIHBvc3NpYmx5IHRocm93biBieSBhbiBleHRlcm5hbCBsaWJyYXJ5LiIsW3EuQ09SRV9IRUxQRVJTXToiQW4gZXJyb3Igb2NjdXJyZWQgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSB0aGUgYEByZW1pcnJvci9jb3JlLWhlbHBlcnNgIGxpYnJhcnkuIixbcS5NVVRBVElPTl06Ik11dGF0aW9uIG9mIGltbXV0YWJsZSB2YWx1ZSBkZXRlY3RlZC4iLFtxLklOVEVSTkFMXToiVGhpcyBpcyBhbiBlcnJvciB3aGljaCBzaG91bGQgbm90IG9jY3VyIGFuZCBpcyBpbnRlcm5hbCB0byB0aGUgcmVtaXJyb3IgY29kZWJhc2UuIixbcS5NSVNTSU5HX1JFUVVJUkVEX0VYVEVOU0lPTl06IllvdXIgZWRpdG9yIGlzIG1pc3NpbmcgYSByZXF1aXJlZCBleHRlbnNpb24uIixbcS5NQU5BR0VSX1BIQVNFX0VSUk9SXToiVGhpcyBvY2N1cnMgd2hlbiBhY2Nlc3NpbmcgYSBtZXRob2Qgb3IgcHJvcGVydHkgYmVmb3JlIGl0IGlzIGF2YWlsYWJsZS4iLFtxLklOVkFMSURfR0VUX0VYVEVOU0lPTl06IlRoZSB1c2VyIHJlcXVlc3RlZCBhbiBpbnZhbGlkIGV4dGVuc2lvbiBmcm9tIHRoZSBnZXRFeHRlbnNpb25zIG1ldGhvZC4gUGxlYXNlIGNoZWNrIHRoZSBgY3JlYXRlRXh0ZW5zaW9uc2AgcmV0dXJuIG1ldGhvZCBpcyByZXR1cm5pbmcgYW4gZXh0ZW5zaW9uIHdpdGggdGhlIGRlZmluZWQgY29uc3RydWN0b3IuIixbcS5JTlZBTElEX01BTkFHRVJfQVJHVU1FTlRTXToiSW52YWxpZCB2YWx1ZShzKSBwYXNzZWQgaW50byBgTWFuYWdlcmAgY29uc3RydWN0b3IuIE9ubHkgYFByZXNldHNgIGFuZCBgRXh0ZW5zaW9uc2AgYXJlIHN1cHBvcnRlZC4iLFtxLlNDSEVNQV06IlRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBzY2hlbWEgb3IgeW91IGFyZSB0cnlpbmcgdG8gYWNjZXNzIGEgbm9kZSAvIG1hcmsgdGhhdCBkb2Vzbid0IGV4aXN0cy4iLFtxLkhFTFBFUlNfQ0FMTEVEX0lOX09VVEVSX1NDT1BFXToiVGhlIGBoZWxwZXJzYCBtZXRob2Qgd2hpY2ggaXMgcGFzc2VkIGludG8gdGhlIGBgY3JlYXRlKmAgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoaW4gcmV0dXJuZWQgbWV0aG9kIHNpbmNlIGl0IHJlbGllcyBvbiBhbiBhY3RpdmUgdmlldyAobm90IHByZXNlbnQgaW4gdGhlIG91dGVyIHNjb3BlKS4iLFtxLklOVkFMSURfTUFOQUdFUl9FWFRFTlNJT05dOiJZb3UgcmVxdWVzdGVkIGFuIGludmFsaWQgZXh0ZW5zaW9uIGZyb20gdGhlIG1hbmFnZXIuIixbcS5EVVBMSUNBVEVfQ09NTUFORF9OQU1FU106IkNvbW1hbmQgbWV0aG9kIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZWRpdG9yLiIsW3EuRFVQTElDQVRFX0hFTFBFUl9OQU1FU106IkhlbHBlciBtZXRob2QgbmFtZXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBlZGl0b3IuIixbcS5OT05fQ0hBSU5BQkxFX0NPTU1BTkRdOiJBdHRlbXB0ZWQgdG8gY2hhaW4gYSBub24gY2hhaW5hYmxlIGNvbW1hbmQuIixbcS5JTlZBTElEX0VYVEVOU0lPTl06IlRoZSBwcm92aWRlZCBleHRlbnNpb24gaXMgaW52YWxpZC4iLFtxLklOVkFMSURfQ09OVEVOVF06IlRoZSBjb250ZW50IHByb3ZpZGVkIHRvIHRoZSBlZGl0b3IgaXMgbm90IHN1cHBvcnRlZC4iLFtxLklOVkFMSURfTkFNRV06IkFuIGludmFsaWQgbmFtZSB3YXMgdXNlZCBmb3IgdGhlIGV4dGVuc2lvbi4iLFtxLkVYVEVOU0lPTl06IkFuIGVycm9yIG9jY3VycmVkIHdpdGhpbiBhbiBleHRlbnNpb24uIE1vcmUgZGV0YWlscyBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUuIixbcS5FWFRFTlNJT05fU1BFQ106IlRoZSBzcGVjIHdhcyBkZWZpbmVkIHdpdGhvdXQgY2FsbGluZyB0aGUgYGRlZmF1bHRzYCwgYHBhcnNlYCBvciBgZG9tYCBtZXRob2RzLiIsW3EuRVhURU5TSU9OX0VYVFJBX0FUVFJJQlVURVNdOiJFeHRyYSBhdHRyaWJ1dGVzIG11c3QgZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdC4iLFtxLklOVkFMSURfU0VUX0VYVEVOU0lPTl9PUFRJT05TXToiQSBjYWxsIHRvIGBleHRlbnNpb24uc2V0T3B0aW9uc2Agd2FzIG1hZGUgd2l0aCBpbnZhbGlkIGtleXMuIixbcS5SRUFDVF9QUk9WSURFUl9DT05URVhUXToiYHVzZVJlbWlycm9yQ29udGV4dGAgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIHRoZSBgcmVtaXJyb3JgIGNvbnRleHQuIEl0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGFuIGFjdGl2ZSByZW1pcnJvciBjb250ZXh0IGNyZWF0ZWQgYnkgdGhlIGA8UmVtaXJyb3IgLz5gLiIsW3EuUkVBQ1RfR0VUX1JPT1RfUFJPUFNdOiJgZ2V0Um9vdFByb3BzYCBoYXMgYmVlbiBhdHRhY2hlZCB0byB0aGUgRE9NIG1vcmUgdGhhbiBvbmNlLiBJdCBzaG91bGQgb25seSBiZSBhdHRhY2hlZCB0byB0aGUgZG9tIG9uY2UgcGVyIGVkaXRvci4iLFtxLlJFQUNUX0VESVRPUl9WSUVXXToiQSBwcm9ibGVtIG9jY3VycmVkIGFkZGluZyB0aGUgZWRpdG9yIHZpZXcgdG8gdGhlIGRvbS4iLFtxLlJFQUNUX0NPTlRST0xMRURdOiJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB5b3VyIGNvbnRyb2xsZWQgZWRpdG9yIHNldHVwLiIsW3EuUkVBQ1RfTk9ERV9WSUVXXToiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB5b3VyIGN1c3RvbSBSZWFjdE5vZGVWaWV3IENvbXBvbmVudC4iLFtxLlJFQUNUX0dFVF9DT05URVhUXToiWW91IGF0dGVtcHRlZCB0byBjYWxsIGBnZXRDb250ZXh0YCBwcm92aWRlZCBieSB0aGUgYHVzZVJlbWlycm9yYCBwcm9wIGR1cmluZyB0aGUgZmlyc3QgcmVuZGVyIG9mIHRoZSBlZGl0b3IuIFRoaXMgaXMgbm90IHBvc3NpYmxlIGFuZCBzaG91bGQgb25seSBiZSBhZnRlciB0aGUgZWRpdG9yIGZpcnN0IG1vdW50cy4iLFtxLlJFQUNUX0NPTVBPTkVOVFNdOiJBbiBlcnJvciBvY2N1cnJlZCB3aXRoaW4gYSByZW1pcnJvciBjb21wb25lbnQuIixbcS5SRUFDVF9IT09LU106IkFuIGVycm9yIG9jY3VycmVkIHdpdGhpbiBhIHJlbWlycm9yIGhvb2suIixbcS5JMThOX0NPTlRFWFRdOiJZb3UgY2FsbGVkIGB1c2VJMThuKClgIG91dHNpZGUgb2YgYW4gYEkxOG5Qcm92aWRlcmAgY29udGV4dC4ifTtmdW5jdGlvbiBvOShlKXtyZXR1cm4gX2UoZSkmJiRvKEdnKHEpLGUpfWZ1bmN0aW9uIGk5KGUsdCl7Y29uc3Qgbj1yOVtlXSxyPW4/YCR7bn0KCmA6IiIsbz10P2Ake3R9CgpgOiIiO3JldHVybmAke3J9JHtvfUZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0ICR7ZVJ9IyR7ZS50b0xvd2VyQ2FzZSgpfWB9dmFyIHRSPWNsYXNzIGV4dGVuZHMgRk0uQmFzZUVycm9ye2NvbnN0cnVjdG9yKHtjb2RlOmUsbWVzc2FnZTp0LGRpc2FibGVMb2dnaW5nOm49ITF9PXt9KXtjb25zdCByPW85KGUpP2U6cS5DVVNUT007c3VwZXIoaTkocix0KSksdGhpcy5lcnJvckNvZGU9cix0aGlzLnVybD1gJHtlUn0jJHtyLnRvTG93ZXJDYXNlKCl9YCxufHxjb25zb2xlLmVycm9yKHRoaXMubWVzc2FnZSl9c3RhdGljIGNyZWF0ZShlPXt9KXtyZXR1cm4gbmV3IHRSKGUpfX07ZnVuY3Rpb24gYmUoZSx0KXtpZighZSl0aHJvdyB0Ui5jcmVhdGUodCl9ZnVuY3Rpb24gRGEoZSx0PXt9KXtyZXR1cm4gZX1mdW5jdGlvbiBTbihlKXt0aGlzLmNvbnRlbnQ9ZX1Tbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlNuLGZpbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLmNvbnRlbnQubGVuZ3RoO3QrPTIpaWYodGhpcy5jb250ZW50W3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZmluZChlKTtyZXR1cm4gdD09LTE/dm9pZCAwOnRoaXMuY29udGVudFt0KzFdfSx1cGRhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4mJm4hPWU/dGhpcy5yZW1vdmUobik6dGhpcyxvPXIuZmluZChlKSxpPXIuY29udGVudC5zbGljZSgpO3JldHVybiBvPT0tMT9pLnB1c2gobnx8ZSx0KTooaVtvKzFdPXQsbiYmKGlbb109bikpLG5ldyBTbihpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZmluZChlKTtpZih0PT0tMSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLmNvbnRlbnQuc2xpY2UoKTtyZXR1cm4gbi5zcGxpY2UodCwyKSxuZXcgU24obil9LGFkZFRvU3RhcnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFNuKFtlLHRdLmNvbmNhdCh0aGlzLnJlbW92ZShlKS5jb250ZW50KSl9LGFkZFRvRW5kOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5yZW1vdmUoZSkuY29udGVudC5zbGljZSgpO3JldHVybiBuLnB1c2goZSx0KSxuZXcgU24obil9LGFkZEJlZm9yZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5yZW1vdmUodCksbz1yLmNvbnRlbnQuc2xpY2UoKSxpPXIuZmluZChlKTtyZXR1cm4gby5zcGxpY2UoaT09LTE/by5sZW5ndGg6aSwwLHQsbiksbmV3IFNuKG8pfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5jb250ZW50Lmxlbmd0aDt0Kz0yKWUodGhpcy5jb250ZW50W3RdLHRoaXMuY29udGVudFt0KzFdKX0scHJlcGVuZDpmdW5jdGlvbihlKXtyZXR1cm4gZT1Tbi5mcm9tKGUpLGUuc2l6ZT9uZXcgU24oZS5jb250ZW50LmNvbmNhdCh0aGlzLnN1YnRyYWN0KGUpLmNvbnRlbnQpKTp0aGlzfSxhcHBlbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9U24uZnJvbShlKSxlLnNpemU/bmV3IFNuKHRoaXMuc3VidHJhY3QoZSkuY29udGVudC5jb25jYXQoZS5jb250ZW50KSk6dGhpc30sc3VidHJhY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlPVNuLmZyb20oZSk7Zm9yKHZhciBuPTA7bjxlLmNvbnRlbnQubGVuZ3RoO24rPTIpdD10LnJlbW92ZShlLmNvbnRlbnRbbl0pO3JldHVybiB0fSx0b09iamVjdDpmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxuKXtlW3RdPW59KSxlfSxnZXQgc2l6ZSgpe3JldHVybiB0aGlzLmNvbnRlbnQubGVuZ3RoPj4xfX07U24uZnJvbT1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgU24pcmV0dXJuIGU7dmFyIHQ9W107aWYoZSlmb3IodmFyIG4gaW4gZSl0LnB1c2gobixlW25dKTtyZXR1cm4gbmV3IFNuKHQpfTtmdW5jdGlvbiBuUihlLHQsbil7Zm9yKGxldCByPTA7O3IrKyl7aWYocj09ZS5jaGlsZENvdW50fHxyPT10LmNoaWxkQ291bnQpcmV0dXJuIGUuY2hpbGRDb3VudD09dC5jaGlsZENvdW50P251bGw6bjtsZXQgbz1lLmNoaWxkKHIpLGk9dC5jaGlsZChyKTtpZihvPT1pKXtuKz1vLm5vZGVTaXplO2NvbnRpbnVlfWlmKCFvLnNhbWVNYXJrdXAoaSkpcmV0dXJuIG47aWYoby5pc1RleHQmJm8udGV4dCE9aS50ZXh0KXtmb3IobGV0IHM9MDtvLnRleHRbc109PWkudGV4dFtzXTtzKyspbisrO3JldHVybiBufWlmKG8uY29udGVudC5zaXplfHxpLmNvbnRlbnQuc2l6ZSl7bGV0IHM9blIoby5jb250ZW50LGkuY29udGVudCxuKzEpO2lmKHMhPW51bGwpcmV0dXJuIHN9bis9by5ub2RlU2l6ZX19ZnVuY3Rpb24gclIoZSx0LG4scil7Zm9yKGxldCBvPWUuY2hpbGRDb3VudCxpPXQuY2hpbGRDb3VudDs7KXtpZihvPT0wfHxpPT0wKXJldHVybiBvPT1pP251bGw6e2E6bixiOnJ9O2xldCBzPWUuY2hpbGQoLS1vKSxhPXQuY2hpbGQoLS1pKSxsPXMubm9kZVNpemU7aWYocz09YSl7bi09bCxyLT1sO2NvbnRpbnVlfWlmKCFzLnNhbWVNYXJrdXAoYSkpcmV0dXJue2E6bixiOnJ9O2lmKHMuaXNUZXh0JiZzLnRleHQhPWEudGV4dCl7bGV0IGM9MCx1PU1hdGgubWluKHMudGV4dC5sZW5ndGgsYS50ZXh0Lmxlbmd0aCk7Zm9yKDtjPHUmJnMudGV4dFtzLnRleHQubGVuZ3RoLWMtMV09PWEudGV4dFthLnRleHQubGVuZ3RoLWMtMV07KWMrKyxuLS0sci0tO3JldHVybnthOm4sYjpyfX1pZihzLmNvbnRlbnQuc2l6ZXx8YS5jb250ZW50LnNpemUpe2xldCBjPXJSKHMuY29udGVudCxhLmNvbnRlbnQsbi0xLHItMSk7aWYoYylyZXR1cm4gY31uLT1sLHItPWx9fWNsYXNzIFV7Y29uc3RydWN0b3IodCxuKXtpZih0aGlzLmNvbnRlbnQ9dCx0aGlzLnNpemU9bnx8MCxuPT1udWxsKWZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMuc2l6ZSs9dFtyXS5ub2RlU2l6ZX1ub2Rlc0JldHdlZW4odCxuLHIsbz0wLGkpe2ZvcihsZXQgcz0wLGE9MDthPG47cysrKXtsZXQgbD10aGlzLmNvbnRlbnRbc10sYz1hK2wubm9kZVNpemU7aWYoYz50JiZyKGwsbythLGl8fG51bGwscykhPT0hMSYmbC5jb250ZW50LnNpemUpe2xldCB1PWErMTtsLm5vZGVzQmV0d2VlbihNYXRoLm1heCgwLHQtdSksTWF0aC5taW4obC5jb250ZW50LnNpemUsbi11KSxyLG8rdSl9YT1jfX1kZXNjZW5kYW50cyh0KXt0aGlzLm5vZGVzQmV0d2VlbigwLHRoaXMuc2l6ZSx0KX10ZXh0QmV0d2Vlbih0LG4scixvKXtsZXQgaT0iIixzPSEwO3JldHVybiB0aGlzLm5vZGVzQmV0d2Vlbih0LG4sKGEsbCk9PntsZXQgYz1hLmlzVGV4dD9hLnRleHQuc2xpY2UoTWF0aC5tYXgodCxsKS1sLG4tbCk6YS5pc0xlYWY/bz90eXBlb2Ygbz09ImZ1bmN0aW9uIj9vKGEpOm86YS50eXBlLnNwZWMubGVhZlRleHQ/YS50eXBlLnNwZWMubGVhZlRleHQoYSk6IiI6IiI7YS5pc0Jsb2NrJiYoYS5pc0xlYWYmJmN8fGEuaXNUZXh0YmxvY2spJiZyJiYocz9zPSExOmkrPXIpLGkrPWN9LDApLGl9YXBwZW5kKHQpe2lmKCF0LnNpemUpcmV0dXJuIHRoaXM7aWYoIXRoaXMuc2l6ZSlyZXR1cm4gdDtsZXQgbj10aGlzLmxhc3RDaGlsZCxyPXQuZmlyc3RDaGlsZCxvPXRoaXMuY29udGVudC5zbGljZSgpLGk9MDtmb3Iobi5pc1RleHQmJm4uc2FtZU1hcmt1cChyKSYmKG9bby5sZW5ndGgtMV09bi53aXRoVGV4dChuLnRleHQrci50ZXh0KSxpPTEpO2k8dC5jb250ZW50Lmxlbmd0aDtpKyspby5wdXNoKHQuY29udGVudFtpXSk7cmV0dXJuIG5ldyBVKG8sdGhpcy5zaXplK3Quc2l6ZSl9Y3V0KHQsbj10aGlzLnNpemUpe2lmKHQ9PTAmJm49PXRoaXMuc2l6ZSlyZXR1cm4gdGhpcztsZXQgcj1bXSxvPTA7aWYobj50KWZvcihsZXQgaT0wLHM9MDtzPG47aSsrKXtsZXQgYT10aGlzLmNvbnRlbnRbaV0sbD1zK2Eubm9kZVNpemU7bD50JiYoKHM8dHx8bD5uKSYmKGEuaXNUZXh0P2E9YS5jdXQoTWF0aC5tYXgoMCx0LXMpLE1hdGgubWluKGEudGV4dC5sZW5ndGgsbi1zKSk6YT1hLmN1dChNYXRoLm1heCgwLHQtcy0xKSxNYXRoLm1pbihhLmNvbnRlbnQuc2l6ZSxuLXMtMSkpKSxyLnB1c2goYSksbys9YS5ub2RlU2l6ZSkscz1sfXJldHVybiBuZXcgVShyLG8pfWN1dEJ5SW5kZXgodCxuKXtyZXR1cm4gdD09bj9VLmVtcHR5OnQ9PTAmJm49PXRoaXMuY29udGVudC5sZW5ndGg/dGhpczpuZXcgVSh0aGlzLmNvbnRlbnQuc2xpY2UodCxuKSl9cmVwbGFjZUNoaWxkKHQsbil7bGV0IHI9dGhpcy5jb250ZW50W3RdO2lmKHI9PW4pcmV0dXJuIHRoaXM7bGV0IG89dGhpcy5jb250ZW50LnNsaWNlKCksaT10aGlzLnNpemUrbi5ub2RlU2l6ZS1yLm5vZGVTaXplO3JldHVybiBvW3RdPW4sbmV3IFUobyxpKX1hZGRUb1N0YXJ0KHQpe3JldHVybiBuZXcgVShbdF0uY29uY2F0KHRoaXMuY29udGVudCksdGhpcy5zaXplK3Qubm9kZVNpemUpfWFkZFRvRW5kKHQpe3JldHVybiBuZXcgVSh0aGlzLmNvbnRlbnQuY29uY2F0KHQpLHRoaXMuc2l6ZSt0Lm5vZGVTaXplKX1lcSh0KXtpZih0aGlzLmNvbnRlbnQubGVuZ3RoIT10LmNvbnRlbnQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wO248dGhpcy5jb250ZW50Lmxlbmd0aDtuKyspaWYoIXRoaXMuY29udGVudFtuXS5lcSh0LmNvbnRlbnRbbl0pKXJldHVybiExO3JldHVybiEwfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY29udGVudC5sZW5ndGg/dGhpcy5jb250ZW50WzBdOm51bGx9Z2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNvbnRlbnQubGVuZ3RoP3RoaXMuY29udGVudFt0aGlzLmNvbnRlbnQubGVuZ3RoLTFdOm51bGx9Z2V0IGNoaWxkQ291bnQoKXtyZXR1cm4gdGhpcy5jb250ZW50Lmxlbmd0aH1jaGlsZCh0KXtsZXQgbj10aGlzLmNvbnRlbnRbdF07aWYoIW4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4ICIrdCsiIG91dCBvZiByYW5nZSBmb3IgIit0aGlzKTtyZXR1cm4gbn1tYXliZUNoaWxkKHQpe3JldHVybiB0aGlzLmNvbnRlbnRbdF18fG51bGx9Zm9yRWFjaCh0KXtmb3IobGV0IG49MCxyPTA7bjx0aGlzLmNvbnRlbnQubGVuZ3RoO24rKyl7bGV0IG89dGhpcy5jb250ZW50W25dO3QobyxyLG4pLHIrPW8ubm9kZVNpemV9fWZpbmREaWZmU3RhcnQodCxuPTApe3JldHVybiBuUih0aGlzLHQsbil9ZmluZERpZmZFbmQodCxuPXRoaXMuc2l6ZSxyPXQuc2l6ZSl7cmV0dXJuIHJSKHRoaXMsdCxuLHIpfWZpbmRJbmRleCh0LG49LTEpe2lmKHQ9PTApcmV0dXJuIEhwKDAsdCk7aWYodD09dGhpcy5zaXplKXJldHVybiBIcCh0aGlzLmNvbnRlbnQubGVuZ3RoLHQpO2lmKHQ+dGhpcy5zaXplfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBvc2l0aW9uICR7dH0gb3V0c2lkZSBvZiBmcmFnbWVudCAoJHt0aGlzfSlgKTtmb3IobGV0IHI9MCxvPTA7O3IrKyl7bGV0IGk9dGhpcy5jaGlsZChyKSxzPW8raS5ub2RlU2l6ZTtpZihzPj10KXJldHVybiBzPT10fHxuPjA/SHAocisxLHMpOkhwKHIsbyk7bz1zfX10b1N0cmluZygpe3JldHVybiI8Iit0aGlzLnRvU3RyaW5nSW5uZXIoKSsiPiJ9dG9TdHJpbmdJbm5lcigpe3JldHVybiB0aGlzLmNvbnRlbnQuam9pbigiLCAiKX10b0pTT04oKXtyZXR1cm4gdGhpcy5jb250ZW50Lmxlbmd0aD90aGlzLmNvbnRlbnQubWFwKHQ9PnQudG9KU09OKCkpOm51bGx9c3RhdGljIGZyb21KU09OKHQsbil7aWYoIW4pcmV0dXJuIFUuZW1wdHk7aWYoIUFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgaW5wdXQgZm9yIEZyYWdtZW50LmZyb21KU09OIik7cmV0dXJuIG5ldyBVKG4ubWFwKHQubm9kZUZyb21KU09OKSl9c3RhdGljIGZyb21BcnJheSh0KXtpZighdC5sZW5ndGgpcmV0dXJuIFUuZW1wdHk7bGV0IG4scj0wO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgaT10W29dO3IrPWkubm9kZVNpemUsbyYmaS5pc1RleHQmJnRbby0xXS5zYW1lTWFya3VwKGkpPyhufHwobj10LnNsaWNlKDAsbykpLG5bbi5sZW5ndGgtMV09aS53aXRoVGV4dChuW24ubGVuZ3RoLTFdLnRleHQraS50ZXh0KSk6biYmbi5wdXNoKGkpfXJldHVybiBuZXcgVShufHx0LHIpfXN0YXRpYyBmcm9tKHQpe2lmKCF0KXJldHVybiBVLmVtcHR5O2lmKHQgaW5zdGFuY2VvZiBVKXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHRoaXMuZnJvbUFycmF5KHQpO2lmKHQuYXR0cnMpcmV0dXJuIG5ldyBVKFt0XSx0Lm5vZGVTaXplKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2FuIG5vdCBjb252ZXJ0ICIrdCsiIHRvIGEgRnJhZ21lbnQiKyh0Lm5vZGVzQmV0d2Vlbj8iIChsb29rcyBsaWtlIG11bHRpcGxlIHZlcnNpb25zIG9mIHByb3NlbWlycm9yLW1vZGVsIHdlcmUgbG9hZGVkKSI6IiIpKX19VS5lbXB0eT1uZXcgVShbXSwwKTtjb25zdCBieT17aW5kZXg6MCxvZmZzZXQ6MH07ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4gYnkuaW5kZXg9ZSxieS5vZmZzZXQ9dCxieX1mdW5jdGlvbiBfbShlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKCEoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXx8ISh0JiZ0eXBlb2YgdD09Im9iamVjdCIpKXJldHVybiExO2xldCBuPUFycmF5LmlzQXJyYXkoZSk7aWYoQXJyYXkuaXNBcnJheSh0KSE9bilyZXR1cm4hMTtpZihuKXtpZihlLmxlbmd0aCE9dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspaWYoIV9tKGVbcl0sdFtyXSkpcmV0dXJuITF9ZWxzZXtmb3IobGV0IHIgaW4gZSlpZighKHIgaW4gdCl8fCFfbShlW3JdLHRbcl0pKXJldHVybiExO2ZvcihsZXQgciBpbiB0KWlmKCEociBpbiBlKSlyZXR1cm4hMX1yZXR1cm4hMH1jbGFzcyBZZXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHlwZT10LHRoaXMuYXR0cnM9bn1hZGRUb1NldCh0KXtsZXQgbixyPSExO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgaT10W29dO2lmKHRoaXMuZXEoaSkpcmV0dXJuIHQ7aWYodGhpcy50eXBlLmV4Y2x1ZGVzKGkudHlwZSkpbnx8KG49dC5zbGljZSgwLG8pKTtlbHNle2lmKGkudHlwZS5leGNsdWRlcyh0aGlzLnR5cGUpKXJldHVybiB0OyFyJiZpLnR5cGUucmFuaz50aGlzLnR5cGUucmFuayYmKG58fChuPXQuc2xpY2UoMCxvKSksbi5wdXNoKHRoaXMpLHI9ITApLG4mJm4ucHVzaChpKX19cmV0dXJuIG58fChuPXQuc2xpY2UoKSkscnx8bi5wdXNoKHRoaXMpLG59cmVtb3ZlRnJvbVNldCh0KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0aGlzLmVxKHRbbl0pKXJldHVybiB0LnNsaWNlKDAsbikuY29uY2F0KHQuc2xpY2UobisxKSk7cmV0dXJuIHR9aXNJblNldCh0KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0aGlzLmVxKHRbbl0pKXJldHVybiEwO3JldHVybiExfWVxKHQpe3JldHVybiB0aGlzPT10fHx0aGlzLnR5cGU9PXQudHlwZSYmX20odGhpcy5hdHRycyx0LmF0dHJzKX10b0pTT04oKXtsZXQgdD17dHlwZTp0aGlzLnR5cGUubmFtZX07Zm9yKGxldCBuIGluIHRoaXMuYXR0cnMpe3QuYXR0cnM9dGhpcy5hdHRyczticmVha31yZXR1cm4gdH1zdGF0aWMgZnJvbUpTT04odCxuKXtpZighbil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBpbnB1dCBmb3IgTWFyay5mcm9tSlNPTiIpO2xldCByPXQubWFya3Nbbi50eXBlXTtpZighcil0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlcmUgaXMgbm8gbWFyayB0eXBlICR7bi50eXBlfSBpbiB0aGlzIHNjaGVtYWApO3JldHVybiByLmNyZWF0ZShuLmF0dHJzKX1zdGF0aWMgc2FtZVNldCh0LG4pe2lmKHQ9PW4pcmV0dXJuITA7aWYodC5sZW5ndGghPW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWlmKCF0W3JdLmVxKG5bcl0pKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBzZXRGcm9tKHQpe2lmKCF0fHxBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD09MClyZXR1cm4gWWUubm9uZTtpZih0IGluc3RhbmNlb2YgWWUpcmV0dXJuW3RdO2xldCBuPXQuc2xpY2UoKTtyZXR1cm4gbi5zb3J0KChyLG8pPT5yLnR5cGUucmFuay1vLnR5cGUucmFuayksbn19WWUubm9uZT1bXTtjbGFzcyBDbSBleHRlbmRzIEVycm9ye31jbGFzcyBKe2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLmNvbnRlbnQ9dCx0aGlzLm9wZW5TdGFydD1uLHRoaXMub3BlbkVuZD1yfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuY29udGVudC5zaXplLXRoaXMub3BlblN0YXJ0LXRoaXMub3BlbkVuZH1pbnNlcnRBdCh0LG4pe2xldCByPWlSKHRoaXMuY29udGVudCx0K3RoaXMub3BlblN0YXJ0LG4pO3JldHVybiByJiZuZXcgSihyLHRoaXMub3BlblN0YXJ0LHRoaXMub3BlbkVuZCl9cmVtb3ZlQmV0d2Vlbih0LG4pe3JldHVybiBuZXcgSihvUih0aGlzLmNvbnRlbnQsdCt0aGlzLm9wZW5TdGFydCxuK3RoaXMub3BlblN0YXJ0KSx0aGlzLm9wZW5TdGFydCx0aGlzLm9wZW5FbmQpfWVxKHQpe3JldHVybiB0aGlzLmNvbnRlbnQuZXEodC5jb250ZW50KSYmdGhpcy5vcGVuU3RhcnQ9PXQub3BlblN0YXJ0JiZ0aGlzLm9wZW5FbmQ9PXQub3BlbkVuZH10b1N0cmluZygpe3JldHVybiB0aGlzLmNvbnRlbnQrIigiK3RoaXMub3BlblN0YXJ0KyIsIit0aGlzLm9wZW5FbmQrIikifXRvSlNPTigpe2lmKCF0aGlzLmNvbnRlbnQuc2l6ZSlyZXR1cm4gbnVsbDtsZXQgdD17Y29udGVudDp0aGlzLmNvbnRlbnQudG9KU09OKCl9O3JldHVybiB0aGlzLm9wZW5TdGFydD4wJiYodC5vcGVuU3RhcnQ9dGhpcy5vcGVuU3RhcnQpLHRoaXMub3BlbkVuZD4wJiYodC5vcGVuRW5kPXRoaXMub3BlbkVuZCksdH1zdGF0aWMgZnJvbUpTT04odCxuKXtpZighbilyZXR1cm4gSi5lbXB0eTtsZXQgcj1uLm9wZW5TdGFydHx8MCxvPW4ub3BlbkVuZHx8MDtpZih0eXBlb2YgciE9Im51bWJlciJ8fHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBpbnB1dCBmb3IgU2xpY2UuZnJvbUpTT04iKTtyZXR1cm4gbmV3IEooVS5mcm9tSlNPTih0LG4uY29udGVudCkscixvKX1zdGF0aWMgbWF4T3Blbih0LG49ITApe2xldCByPTAsbz0wO2ZvcihsZXQgaT10LmZpcnN0Q2hpbGQ7aSYmIWkuaXNMZWFmJiYobnx8IWkudHlwZS5zcGVjLmlzb2xhdGluZyk7aT1pLmZpcnN0Q2hpbGQpcisrO2ZvcihsZXQgaT10Lmxhc3RDaGlsZDtpJiYhaS5pc0xlYWYmJihufHwhaS50eXBlLnNwZWMuaXNvbGF0aW5nKTtpPWkubGFzdENoaWxkKW8rKztyZXR1cm4gbmV3IEoodCxyLG8pfX1KLmVtcHR5PW5ldyBKKFUuZW1wdHksMCwwKTtmdW5jdGlvbiBvUihlLHQsbil7bGV0e2luZGV4OnIsb2Zmc2V0Om99PWUuZmluZEluZGV4KHQpLGk9ZS5tYXliZUNoaWxkKHIpLHtpbmRleDpzLG9mZnNldDphfT1lLmZpbmRJbmRleChuKTtpZihvPT10fHxpLmlzVGV4dCl7aWYoYSE9biYmIWUuY2hpbGQocykuaXNUZXh0KXRocm93IG5ldyBSYW5nZUVycm9yKCJSZW1vdmluZyBub24tZmxhdCByYW5nZSIpO3JldHVybiBlLmN1dCgwLHQpLmFwcGVuZChlLmN1dChuKSl9aWYociE9cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVtb3Zpbmcgbm9uLWZsYXQgcmFuZ2UiKTtyZXR1cm4gZS5yZXBsYWNlQ2hpbGQocixpLmNvcHkob1IoaS5jb250ZW50LHQtby0xLG4tby0xKSkpfWZ1bmN0aW9uIGlSKGUsdCxuLHIpe2xldHtpbmRleDpvLG9mZnNldDppfT1lLmZpbmRJbmRleCh0KSxzPWUubWF5YmVDaGlsZChvKTtpZihpPT10fHxzLmlzVGV4dClyZXR1cm4gciYmIXIuY2FuUmVwbGFjZShvLG8sbik/bnVsbDplLmN1dCgwLHQpLmFwcGVuZChuKS5hcHBlbmQoZS5jdXQodCkpO2xldCBhPWlSKHMuY29udGVudCx0LWktMSxuKTtyZXR1cm4gYSYmZS5yZXBsYWNlQ2hpbGQobyxzLmNvcHkoYSkpfWZ1bmN0aW9uIHM5KGUsdCxuKXtpZihuLm9wZW5TdGFydD5lLmRlcHRoKXRocm93IG5ldyBDbSgiSW5zZXJ0ZWQgY29udGVudCBkZWVwZXIgdGhhbiBpbnNlcnRpb24gcG9zaXRpb24iKTtpZihlLmRlcHRoLW4ub3BlblN0YXJ0IT10LmRlcHRoLW4ub3BlbkVuZCl0aHJvdyBuZXcgQ20oIkluY29uc2lzdGVudCBvcGVuIGRlcHRocyIpO3JldHVybiBzUihlLHQsbiwwKX1mdW5jdGlvbiBzUihlLHQsbixyKXtsZXQgbz1lLmluZGV4KHIpLGk9ZS5ub2RlKHIpO2lmKG89PXQuaW5kZXgocikmJnI8ZS5kZXB0aC1uLm9wZW5TdGFydCl7bGV0IHM9c1IoZSx0LG4scisxKTtyZXR1cm4gaS5jb3B5KGkuY29udGVudC5yZXBsYWNlQ2hpbGQobyxzKSl9ZWxzZSBpZihuLmNvbnRlbnQuc2l6ZSlpZighbi5vcGVuU3RhcnQmJiFuLm9wZW5FbmQmJmUuZGVwdGg9PXImJnQuZGVwdGg9PXIpe2xldCBzPWUucGFyZW50LGE9cy5jb250ZW50O3JldHVybiBWYShzLGEuY3V0KDAsZS5wYXJlbnRPZmZzZXQpLmFwcGVuZChuLmNvbnRlbnQpLmFwcGVuZChhLmN1dCh0LnBhcmVudE9mZnNldCkpKX1lbHNle2xldHtzdGFydDpzLGVuZDphfT1hOShuLGUpO3JldHVybiBWYShpLGxSKGUscyxhLHQscikpfWVsc2UgcmV0dXJuIFZhKGksT20oZSx0LHIpKX1mdW5jdGlvbiBhUihlLHQpe2lmKCF0LnR5cGUuY29tcGF0aWJsZUNvbnRlbnQoZS50eXBlKSl0aHJvdyBuZXcgQ20oIkNhbm5vdCBqb2luICIrdC50eXBlLm5hbWUrIiBvbnRvICIrZS50eXBlLm5hbWUpfWZ1bmN0aW9uIFR4KGUsdCxuKXtsZXQgcj1lLm5vZGUobik7cmV0dXJuIGFSKHIsdC5ub2RlKG4pKSxyfWZ1bmN0aW9uIFVhKGUsdCl7bGV0IG49dC5sZW5ndGgtMTtuPj0wJiZlLmlzVGV4dCYmZS5zYW1lTWFya3VwKHRbbl0pP3Rbbl09ZS53aXRoVGV4dCh0W25dLnRleHQrZS50ZXh0KTp0LnB1c2goZSl9ZnVuY3Rpb24gTmQoZSx0LG4scil7bGV0IG89KHR8fGUpLm5vZGUobiksaT0wLHM9dD90LmluZGV4KG4pOm8uY2hpbGRDb3VudDtlJiYoaT1lLmluZGV4KG4pLGUuZGVwdGg+bj9pKys6ZS50ZXh0T2Zmc2V0JiYoVWEoZS5ub2RlQWZ0ZXIsciksaSsrKSk7Zm9yKGxldCBhPWk7YTxzO2ErKylVYShvLmNoaWxkKGEpLHIpO3QmJnQuZGVwdGg9PW4mJnQudGV4dE9mZnNldCYmVWEodC5ub2RlQmVmb3JlLHIpfWZ1bmN0aW9uIFZhKGUsdCl7cmV0dXJuIGUudHlwZS5jaGVja0NvbnRlbnQodCksZS5jb3B5KHQpfWZ1bmN0aW9uIGxSKGUsdCxuLHIsbyl7bGV0IGk9ZS5kZXB0aD5vJiZUeChlLHQsbysxKSxzPXIuZGVwdGg+byYmVHgobixyLG8rMSksYT1bXTtyZXR1cm4gTmQobnVsbCxlLG8sYSksaSYmcyYmdC5pbmRleChvKT09bi5pbmRleChvKT8oYVIoaSxzKSxVYShWYShpLGxSKGUsdCxuLHIsbysxKSksYSkpOihpJiZVYShWYShpLE9tKGUsdCxvKzEpKSxhKSxOZCh0LG4sbyxhKSxzJiZVYShWYShzLE9tKG4scixvKzEpKSxhKSksTmQocixudWxsLG8sYSksbmV3IFUoYSl9ZnVuY3Rpb24gT20oZSx0LG4pe2xldCByPVtdO2lmKE5kKG51bGwsZSxuLHIpLGUuZGVwdGg+bil7bGV0IG89VHgoZSx0LG4rMSk7VWEoVmEobyxPbShlLHQsbisxKSkscil9cmV0dXJuIE5kKHQsbnVsbCxuLHIpLG5ldyBVKHIpfWZ1bmN0aW9uIGE5KGUsdCl7bGV0IG49dC5kZXB0aC1lLm9wZW5TdGFydCxvPXQubm9kZShuKS5jb3B5KGUuY29udGVudCk7Zm9yKGxldCBpPW4tMTtpPj0wO2ktLSlvPXQubm9kZShpKS5jb3B5KFUuZnJvbShvKSk7cmV0dXJue3N0YXJ0Om8ucmVzb2x2ZU5vQ2FjaGUoZS5vcGVuU3RhcnQrbiksZW5kOm8ucmVzb2x2ZU5vQ2FjaGUoby5jb250ZW50LnNpemUtZS5vcGVuRW5kLW4pfX1jbGFzcyBIY3tjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5wb3M9dCx0aGlzLnBhdGg9bix0aGlzLnBhcmVudE9mZnNldD1yLHRoaXMuZGVwdGg9bi5sZW5ndGgvMy0xfXJlc29sdmVEZXB0aCh0KXtyZXR1cm4gdD09bnVsbD90aGlzLmRlcHRoOnQ8MD90aGlzLmRlcHRoK3Q6dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMubm9kZSh0aGlzLmRlcHRoKX1nZXQgZG9jKCl7cmV0dXJuIHRoaXMubm9kZSgwKX1ub2RlKHQpe3JldHVybiB0aGlzLnBhdGhbdGhpcy5yZXNvbHZlRGVwdGgodCkqM119aW5kZXgodCl7cmV0dXJuIHRoaXMucGF0aFt0aGlzLnJlc29sdmVEZXB0aCh0KSozKzFdfWluZGV4QWZ0ZXIodCl7cmV0dXJuIHQ9dGhpcy5yZXNvbHZlRGVwdGgodCksdGhpcy5pbmRleCh0KSsodD09dGhpcy5kZXB0aCYmIXRoaXMudGV4dE9mZnNldD8wOjEpfXN0YXJ0KHQpe3JldHVybiB0PXRoaXMucmVzb2x2ZURlcHRoKHQpLHQ9PTA/MDp0aGlzLnBhdGhbdCozLTFdKzF9ZW5kKHQpe3JldHVybiB0PXRoaXMucmVzb2x2ZURlcHRoKHQpLHRoaXMuc3RhcnQodCkrdGhpcy5ub2RlKHQpLmNvbnRlbnQuc2l6ZX1iZWZvcmUodCl7aWYodD10aGlzLnJlc29sdmVEZXB0aCh0KSwhdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVGhlcmUgaXMgbm8gcG9zaXRpb24gYmVmb3JlIHRoZSB0b3AtbGV2ZWwgbm9kZSIpO3JldHVybiB0PT10aGlzLmRlcHRoKzE/dGhpcy5wb3M6dGhpcy5wYXRoW3QqMy0xXX1hZnRlcih0KXtpZih0PXRoaXMucmVzb2x2ZURlcHRoKHQpLCF0KXRocm93IG5ldyBSYW5nZUVycm9yKCJUaGVyZSBpcyBubyBwb3NpdGlvbiBhZnRlciB0aGUgdG9wLWxldmVsIG5vZGUiKTtyZXR1cm4gdD09dGhpcy5kZXB0aCsxP3RoaXMucG9zOnRoaXMucGF0aFt0KjMtMV0rdGhpcy5wYXRoW3QqM10ubm9kZVNpemV9Z2V0IHRleHRPZmZzZXQoKXtyZXR1cm4gdGhpcy5wb3MtdGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19Z2V0IG5vZGVBZnRlcigpe2xldCB0PXRoaXMucGFyZW50LG49dGhpcy5pbmRleCh0aGlzLmRlcHRoKTtpZihuPT10LmNoaWxkQ291bnQpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5wb3MtdGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV0sbz10LmNoaWxkKG4pO3JldHVybiByP3QuY2hpbGQobikuY3V0KHIpOm99Z2V0IG5vZGVCZWZvcmUoKXtsZXQgdD10aGlzLmluZGV4KHRoaXMuZGVwdGgpLG49dGhpcy5wb3MtdGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV07cmV0dXJuIG4/dGhpcy5wYXJlbnQuY2hpbGQodCkuY3V0KDAsbik6dD09MD9udWxsOnRoaXMucGFyZW50LmNoaWxkKHQtMSl9cG9zQXRJbmRleCh0LG4pe249dGhpcy5yZXNvbHZlRGVwdGgobik7bGV0IHI9dGhpcy5wYXRoW24qM10sbz1uPT0wPzA6dGhpcy5wYXRoW24qMy0xXSsxO2ZvcihsZXQgaT0wO2k8dDtpKyspbys9ci5jaGlsZChpKS5ub2RlU2l6ZTtyZXR1cm4gb31tYXJrcygpe2xldCB0PXRoaXMucGFyZW50LG49dGhpcy5pbmRleCgpO2lmKHQuY29udGVudC5zaXplPT0wKXJldHVybiBZZS5ub25lO2lmKHRoaXMudGV4dE9mZnNldClyZXR1cm4gdC5jaGlsZChuKS5tYXJrcztsZXQgcj10Lm1heWJlQ2hpbGQobi0xKSxvPXQubWF5YmVDaGlsZChuKTtpZighcil7bGV0IGE9cjtyPW8sbz1hfWxldCBpPXIubWFya3M7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaVtzXS50eXBlLnNwZWMuaW5jbHVzaXZlPT09ITEmJighb3x8IWlbc10uaXNJblNldChvLm1hcmtzKSkmJihpPWlbcy0tXS5yZW1vdmVGcm9tU2V0KGkpKTtyZXR1cm4gaX1tYXJrc0Fjcm9zcyh0KXtsZXQgbj10aGlzLnBhcmVudC5tYXliZUNoaWxkKHRoaXMuaW5kZXgoKSk7aWYoIW58fCFuLmlzSW5saW5lKXJldHVybiBudWxsO2xldCByPW4ubWFya3Msbz10LnBhcmVudC5tYXliZUNoaWxkKHQuaW5kZXgoKSk7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspcltpXS50eXBlLnNwZWMuaW5jbHVzaXZlPT09ITEmJighb3x8IXJbaV0uaXNJblNldChvLm1hcmtzKSkmJihyPXJbaS0tXS5yZW1vdmVGcm9tU2V0KHIpKTtyZXR1cm4gcn1zaGFyZWREZXB0aCh0KXtmb3IobGV0IG49dGhpcy5kZXB0aDtuPjA7bi0tKWlmKHRoaXMuc3RhcnQobik8PXQmJnRoaXMuZW5kKG4pPj10KXJldHVybiBuO3JldHVybiAwfWJsb2NrUmFuZ2UodD10aGlzLG4pe2lmKHQucG9zPHRoaXMucG9zKXJldHVybiB0LmJsb2NrUmFuZ2UodGhpcyk7Zm9yKGxldCByPXRoaXMuZGVwdGgtKHRoaXMucGFyZW50LmlubGluZUNvbnRlbnR8fHRoaXMucG9zPT10LnBvcz8xOjApO3I+PTA7ci0tKWlmKHQucG9zPD10aGlzLmVuZChyKSYmKCFufHxuKHRoaXMubm9kZShyKSkpKXJldHVybiBuZXcgc2wodGhpcyx0LHIpO3JldHVybiBudWxsfXNhbWVQYXJlbnQodCl7cmV0dXJuIHRoaXMucG9zLXRoaXMucGFyZW50T2Zmc2V0PT10LnBvcy10LnBhcmVudE9mZnNldH1tYXgodCl7cmV0dXJuIHQucG9zPnRoaXMucG9zP3Q6dGhpc31taW4odCl7cmV0dXJuIHQucG9zPHRoaXMucG9zP3Q6dGhpc310b1N0cmluZygpe2xldCB0PSIiO2ZvcihsZXQgbj0xO248PXRoaXMuZGVwdGg7bisrKXQrPSh0PyIvIjoiIikrdGhpcy5ub2RlKG4pLnR5cGUubmFtZSsiXyIrdGhpcy5pbmRleChuLTEpO3JldHVybiB0KyI6Iit0aGlzLnBhcmVudE9mZnNldH1zdGF0aWMgcmVzb2x2ZSh0LG4pe2lmKCEobj49MCYmbjw9dC5jb250ZW50LnNpemUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJQb3NpdGlvbiAiK24rIiBvdXQgb2YgcmFuZ2UiKTtsZXQgcj1bXSxvPTAsaT1uO2ZvcihsZXQgcz10Ozspe2xldHtpbmRleDphLG9mZnNldDpsfT1zLmNvbnRlbnQuZmluZEluZGV4KGkpLGM9aS1sO2lmKHIucHVzaChzLGEsbytsKSwhY3x8KHM9cy5jaGlsZChhKSxzLmlzVGV4dCkpYnJlYWs7aT1jLTEsbys9bCsxfXJldHVybiBuZXcgSGMobixyLGkpfXN0YXRpYyByZXNvbHZlQ2FjaGVkKHQsbil7Zm9yKGxldCBvPTA7bzx3eS5sZW5ndGg7bysrKXtsZXQgaT13eVtvXTtpZihpLnBvcz09biYmaS5kb2M9PXQpcmV0dXJuIGl9bGV0IHI9d3lbU3ldPUhjLnJlc29sdmUodCxuKTtyZXR1cm4gU3k9KFN5KzEpJWw5LHJ9fWxldCB3eT1bXSxTeT0wLGw5PTEyO2NsYXNzIHNse2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLiRmcm9tPXQsdGhpcy4kdG89bix0aGlzLmRlcHRoPXJ9Z2V0IHN0YXJ0KCl7cmV0dXJuIHRoaXMuJGZyb20uYmVmb3JlKHRoaXMuZGVwdGgrMSl9Z2V0IGVuZCgpe3JldHVybiB0aGlzLiR0by5hZnRlcih0aGlzLmRlcHRoKzEpfWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy4kZnJvbS5ub2RlKHRoaXMuZGVwdGgpfWdldCBzdGFydEluZGV4KCl7cmV0dXJuIHRoaXMuJGZyb20uaW5kZXgodGhpcy5kZXB0aCl9Z2V0IGVuZEluZGV4KCl7cmV0dXJuIHRoaXMuJHRvLmluZGV4QWZ0ZXIodGhpcy5kZXB0aCl9fWNvbnN0IGM5PU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IEJzPWNsYXNzIFB4e2NvbnN0cnVjdG9yKHQsbixyLG89WWUubm9uZSl7dGhpcy50eXBlPXQsdGhpcy5hdHRycz1uLHRoaXMubWFya3M9byx0aGlzLmNvbnRlbnQ9cnx8VS5lbXB0eX1nZXQgbm9kZVNpemUoKXtyZXR1cm4gdGhpcy5pc0xlYWY/MToyK3RoaXMuY29udGVudC5zaXplfWdldCBjaGlsZENvdW50KCl7cmV0dXJuIHRoaXMuY29udGVudC5jaGlsZENvdW50fWNoaWxkKHQpe3JldHVybiB0aGlzLmNvbnRlbnQuY2hpbGQodCl9bWF5YmVDaGlsZCh0KXtyZXR1cm4gdGhpcy5jb250ZW50Lm1heWJlQ2hpbGQodCl9Zm9yRWFjaCh0KXt0aGlzLmNvbnRlbnQuZm9yRWFjaCh0KX1ub2Rlc0JldHdlZW4odCxuLHIsbz0wKXt0aGlzLmNvbnRlbnQubm9kZXNCZXR3ZWVuKHQsbixyLG8sdGhpcyl9ZGVzY2VuZGFudHModCl7dGhpcy5ub2Rlc0JldHdlZW4oMCx0aGlzLmNvbnRlbnQuc2l6ZSx0KX1nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5pc0xlYWYmJnRoaXMudHlwZS5zcGVjLmxlYWZUZXh0P3RoaXMudHlwZS5zcGVjLmxlYWZUZXh0KHRoaXMpOnRoaXMudGV4dEJldHdlZW4oMCx0aGlzLmNvbnRlbnQuc2l6ZSwiIil9dGV4dEJldHdlZW4odCxuLHIsbyl7cmV0dXJuIHRoaXMuY29udGVudC50ZXh0QmV0d2Vlbih0LG4scixvKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZH1nZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuY29udGVudC5sYXN0Q2hpbGR9ZXEodCl7cmV0dXJuIHRoaXM9PXR8fHRoaXMuc2FtZU1hcmt1cCh0KSYmdGhpcy5jb250ZW50LmVxKHQuY29udGVudCl9c2FtZU1hcmt1cCh0KXtyZXR1cm4gdGhpcy5oYXNNYXJrdXAodC50eXBlLHQuYXR0cnMsdC5tYXJrcyl9aGFzTWFya3VwKHQsbixyKXtyZXR1cm4gdGhpcy50eXBlPT10JiZfbSh0aGlzLmF0dHJzLG58fHQuZGVmYXVsdEF0dHJzfHxjOSkmJlllLnNhbWVTZXQodGhpcy5tYXJrcyxyfHxZZS5ub25lKX1jb3B5KHQ9bnVsbCl7cmV0dXJuIHQ9PXRoaXMuY29udGVudD90aGlzOm5ldyBQeCh0aGlzLnR5cGUsdGhpcy5hdHRycyx0LHRoaXMubWFya3MpfW1hcmsodCl7cmV0dXJuIHQ9PXRoaXMubWFya3M/dGhpczpuZXcgUHgodGhpcy50eXBlLHRoaXMuYXR0cnMsdGhpcy5jb250ZW50LHQpfWN1dCh0LG49dGhpcy5jb250ZW50LnNpemUpe3JldHVybiB0PT0wJiZuPT10aGlzLmNvbnRlbnQuc2l6ZT90aGlzOnRoaXMuY29weSh0aGlzLmNvbnRlbnQuY3V0KHQsbikpfXNsaWNlKHQsbj10aGlzLmNvbnRlbnQuc2l6ZSxyPSExKXtpZih0PT1uKXJldHVybiBKLmVtcHR5O2xldCBvPXRoaXMucmVzb2x2ZSh0KSxpPXRoaXMucmVzb2x2ZShuKSxzPXI/MDpvLnNoYXJlZERlcHRoKG4pLGE9by5zdGFydChzKSxjPW8ubm9kZShzKS5jb250ZW50LmN1dChvLnBvcy1hLGkucG9zLWEpO3JldHVybiBuZXcgSihjLG8uZGVwdGgtcyxpLmRlcHRoLXMpfXJlcGxhY2UodCxuLHIpe3JldHVybiBzOSh0aGlzLnJlc29sdmUodCksdGhpcy5yZXNvbHZlKG4pLHIpfW5vZGVBdCh0KXtmb3IobGV0IG49dGhpczs7KXtsZXR7aW5kZXg6cixvZmZzZXQ6b309bi5jb250ZW50LmZpbmRJbmRleCh0KTtpZihuPW4ubWF5YmVDaGlsZChyKSwhbilyZXR1cm4gbnVsbDtpZihvPT10fHxuLmlzVGV4dClyZXR1cm4gbjt0LT1vKzF9fWNoaWxkQWZ0ZXIodCl7bGV0e2luZGV4Om4sb2Zmc2V0OnJ9PXRoaXMuY29udGVudC5maW5kSW5kZXgodCk7cmV0dXJue25vZGU6dGhpcy5jb250ZW50Lm1heWJlQ2hpbGQobiksaW5kZXg6bixvZmZzZXQ6cn19Y2hpbGRCZWZvcmUodCl7aWYodD09MClyZXR1cm57bm9kZTpudWxsLGluZGV4OjAsb2Zmc2V0OjB9O2xldHtpbmRleDpuLG9mZnNldDpyfT10aGlzLmNvbnRlbnQuZmluZEluZGV4KHQpO2lmKHI8dClyZXR1cm57bm9kZTp0aGlzLmNvbnRlbnQuY2hpbGQobiksaW5kZXg6bixvZmZzZXQ6cn07bGV0IG89dGhpcy5jb250ZW50LmNoaWxkKG4tMSk7cmV0dXJue25vZGU6byxpbmRleDpuLTEsb2Zmc2V0OnItby5ub2RlU2l6ZX19cmVzb2x2ZSh0KXtyZXR1cm4gSGMucmVzb2x2ZUNhY2hlZCh0aGlzLHQpfXJlc29sdmVOb0NhY2hlKHQpe3JldHVybiBIYy5yZXNvbHZlKHRoaXMsdCl9cmFuZ2VIYXNNYXJrKHQsbixyKXtsZXQgbz0hMTtyZXR1cm4gbj50JiZ0aGlzLm5vZGVzQmV0d2Vlbih0LG4saT0+KHIuaXNJblNldChpLm1hcmtzKSYmKG89ITApLCFvKSksb31nZXQgaXNCbG9jaygpe3JldHVybiB0aGlzLnR5cGUuaXNCbG9ja31nZXQgaXNUZXh0YmxvY2soKXtyZXR1cm4gdGhpcy50eXBlLmlzVGV4dGJsb2NrfWdldCBpbmxpbmVDb250ZW50KCl7cmV0dXJuIHRoaXMudHlwZS5pbmxpbmVDb250ZW50fWdldCBpc0lubGluZSgpe3JldHVybiB0aGlzLnR5cGUuaXNJbmxpbmV9Z2V0IGlzVGV4dCgpe3JldHVybiB0aGlzLnR5cGUuaXNUZXh0fWdldCBpc0xlYWYoKXtyZXR1cm4gdGhpcy50eXBlLmlzTGVhZn1nZXQgaXNBdG9tKCl7cmV0dXJuIHRoaXMudHlwZS5pc0F0b219dG9TdHJpbmcoKXtpZih0aGlzLnR5cGUuc3BlYy50b0RlYnVnU3RyaW5nKXJldHVybiB0aGlzLnR5cGUuc3BlYy50b0RlYnVnU3RyaW5nKHRoaXMpO2xldCB0PXRoaXMudHlwZS5uYW1lO3JldHVybiB0aGlzLmNvbnRlbnQuc2l6ZSYmKHQrPSIoIit0aGlzLmNvbnRlbnQudG9TdHJpbmdJbm5lcigpKyIpIiksY1IodGhpcy5tYXJrcyx0KX1jb250ZW50TWF0Y2hBdCh0KXtsZXQgbj10aGlzLnR5cGUuY29udGVudE1hdGNoLm1hdGNoRnJhZ21lbnQodGhpcy5jb250ZW50LDAsdCk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDYWxsZWQgY29udGVudE1hdGNoQXQgb24gYSBub2RlIHdpdGggaW52YWxpZCBjb250ZW50Iik7cmV0dXJuIG59Y2FuUmVwbGFjZSh0LG4scj1VLmVtcHR5LG89MCxpPXIuY2hpbGRDb3VudCl7bGV0IHM9dGhpcy5jb250ZW50TWF0Y2hBdCh0KS5tYXRjaEZyYWdtZW50KHIsbyxpKSxhPXMmJnMubWF0Y2hGcmFnbWVudCh0aGlzLmNvbnRlbnQsbik7aWYoIWF8fCFhLnZhbGlkRW5kKXJldHVybiExO2ZvcihsZXQgbD1vO2w8aTtsKyspaWYoIXRoaXMudHlwZS5hbGxvd3NNYXJrcyhyLmNoaWxkKGwpLm1hcmtzKSlyZXR1cm4hMTtyZXR1cm4hMH1jYW5SZXBsYWNlV2l0aCh0LG4scixvKXtpZihvJiYhdGhpcy50eXBlLmFsbG93c01hcmtzKG8pKXJldHVybiExO2xldCBpPXRoaXMuY29udGVudE1hdGNoQXQodCkubWF0Y2hUeXBlKHIpLHM9aSYmaS5tYXRjaEZyYWdtZW50KHRoaXMuY29udGVudCxuKTtyZXR1cm4gcz9zLnZhbGlkRW5kOiExfWNhbkFwcGVuZCh0KXtyZXR1cm4gdC5jb250ZW50LnNpemU/dGhpcy5jYW5SZXBsYWNlKHRoaXMuY2hpbGRDb3VudCx0aGlzLmNoaWxkQ291bnQsdC5jb250ZW50KTp0aGlzLnR5cGUuY29tcGF0aWJsZUNvbnRlbnQodC50eXBlKX1jaGVjaygpe3RoaXMudHlwZS5jaGVja0NvbnRlbnQodGhpcy5jb250ZW50KTtsZXQgdD1ZZS5ub25lO2ZvcihsZXQgbj0wO248dGhpcy5tYXJrcy5sZW5ndGg7bisrKXQ9dGhpcy5tYXJrc1tuXS5hZGRUb1NldCh0KTtpZighWWUuc2FtZVNldCh0LHRoaXMubWFya3MpKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIGNvbGxlY3Rpb24gb2YgbWFya3MgZm9yIG5vZGUgJHt0aGlzLnR5cGUubmFtZX06ICR7dGhpcy5tYXJrcy5tYXAobj0+bi50eXBlLm5hbWUpfWApO3RoaXMuY29udGVudC5mb3JFYWNoKG49Pm4uY2hlY2soKSl9dG9KU09OKCl7bGV0IHQ9e3R5cGU6dGhpcy50eXBlLm5hbWV9O2ZvcihsZXQgbiBpbiB0aGlzLmF0dHJzKXt0LmF0dHJzPXRoaXMuYXR0cnM7YnJlYWt9cmV0dXJuIHRoaXMuY29udGVudC5zaXplJiYodC5jb250ZW50PXRoaXMuY29udGVudC50b0pTT04oKSksdGhpcy5tYXJrcy5sZW5ndGgmJih0Lm1hcmtzPXRoaXMubWFya3MubWFwKG49Pm4udG9KU09OKCkpKSx0fXN0YXRpYyBmcm9tSlNPTih0LG4pe2lmKCFuKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIGlucHV0IGZvciBOb2RlLmZyb21KU09OIik7bGV0IHI9bnVsbDtpZihuLm1hcmtzKXtpZighQXJyYXkuaXNBcnJheShuLm1hcmtzKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBtYXJrIGRhdGEgZm9yIE5vZGUuZnJvbUpTT04iKTtyPW4ubWFya3MubWFwKHQubWFya0Zyb21KU09OKX1pZihuLnR5cGU9PSJ0ZXh0Iil7aWYodHlwZW9mIG4udGV4dCE9InN0cmluZyIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGV4dCBub2RlIGluIEpTT04iKTtyZXR1cm4gdC50ZXh0KG4udGV4dCxyKX1sZXQgbz1VLmZyb21KU09OKHQsbi5jb250ZW50KTtyZXR1cm4gdC5ub2RlVHlwZShuLnR5cGUpLmNyZWF0ZShuLmF0dHJzLG8scil9fTtCcy5wcm90b3R5cGUudGV4dD12b2lkIDA7Y2xhc3MgVG0gZXh0ZW5kcyBCc3tjb25zdHJ1Y3Rvcih0LG4scixvKXtpZihzdXBlcih0LG4sbnVsbCxvKSwhcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRW1wdHkgdGV4dCBub2RlcyBhcmUgbm90IGFsbG93ZWQiKTt0aGlzLnRleHQ9cn10b1N0cmluZygpe3JldHVybiB0aGlzLnR5cGUuc3BlYy50b0RlYnVnU3RyaW5nP3RoaXMudHlwZS5zcGVjLnRvRGVidWdTdHJpbmcodGhpcyk6Y1IodGhpcy5tYXJrcyxKU09OLnN0cmluZ2lmeSh0aGlzLnRleHQpKX1nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy50ZXh0fXRleHRCZXR3ZWVuKHQsbil7cmV0dXJuIHRoaXMudGV4dC5zbGljZSh0LG4pfWdldCBub2RlU2l6ZSgpe3JldHVybiB0aGlzLnRleHQubGVuZ3RofW1hcmsodCl7cmV0dXJuIHQ9PXRoaXMubWFya3M/dGhpczpuZXcgVG0odGhpcy50eXBlLHRoaXMuYXR0cnMsdGhpcy50ZXh0LHQpfXdpdGhUZXh0KHQpe3JldHVybiB0PT10aGlzLnRleHQ/dGhpczpuZXcgVG0odGhpcy50eXBlLHRoaXMuYXR0cnMsdCx0aGlzLm1hcmtzKX1jdXQodD0wLG49dGhpcy50ZXh0Lmxlbmd0aCl7cmV0dXJuIHQ9PTAmJm49PXRoaXMudGV4dC5sZW5ndGg/dGhpczp0aGlzLndpdGhUZXh0KHRoaXMudGV4dC5zbGljZSh0LG4pKX1lcSh0KXtyZXR1cm4gdGhpcy5zYW1lTWFya3VwKHQpJiZ0aGlzLnRleHQ9PXQudGV4dH10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC50ZXh0PXRoaXMudGV4dCx0fX1mdW5jdGlvbiBjUihlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXQ9ZVtuXS50eXBlLm5hbWUrIigiK3QrIikiO3JldHVybiB0fWNsYXNzIGFse2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRFbmQ9dCx0aGlzLm5leHQ9W10sdGhpcy53cmFwQ2FjaGU9W119c3RhdGljIHBhcnNlKHQsbil7bGV0IHI9bmV3IHU5KHQsbik7aWYoci5uZXh0PT1udWxsKXJldHVybiBhbC5lbXB0eTtsZXQgbz11UihyKTtyLm5leHQmJnIuZXJyKCJVbmV4cGVjdGVkIHRyYWlsaW5nIHRleHQiKTtsZXQgaT12OShnOShvKSk7cmV0dXJuIHk5KGksciksaX1tYXRjaFR5cGUodCl7Zm9yKGxldCBuPTA7bjx0aGlzLm5leHQubGVuZ3RoO24rKylpZih0aGlzLm5leHRbbl0udHlwZT09dClyZXR1cm4gdGhpcy5uZXh0W25dLm5leHQ7cmV0dXJuIG51bGx9bWF0Y2hGcmFnbWVudCh0LG49MCxyPXQuY2hpbGRDb3VudCl7bGV0IG89dGhpcztmb3IobGV0IGk9bjtvJiZpPHI7aSsrKW89by5tYXRjaFR5cGUodC5jaGlsZChpKS50eXBlKTtyZXR1cm4gb31nZXQgaW5saW5lQ29udGVudCgpe3JldHVybiB0aGlzLm5leHQubGVuZ3RoIT0wJiZ0aGlzLm5leHRbMF0udHlwZS5pc0lubGluZX1nZXQgZGVmYXVsdFR5cGUoKXtmb3IobGV0IHQ9MDt0PHRoaXMubmV4dC5sZW5ndGg7dCsrKXtsZXR7dHlwZTpufT10aGlzLm5leHRbdF07aWYoIShuLmlzVGV4dHx8bi5oYXNSZXF1aXJlZEF0dHJzKCkpKXJldHVybiBufXJldHVybiBudWxsfWNvbXBhdGlibGUodCl7Zm9yKGxldCBuPTA7bjx0aGlzLm5leHQubGVuZ3RoO24rKylmb3IobGV0IHI9MDtyPHQubmV4dC5sZW5ndGg7cisrKWlmKHRoaXMubmV4dFtuXS50eXBlPT10Lm5leHRbcl0udHlwZSlyZXR1cm4hMDtyZXR1cm4hMX1maWxsQmVmb3JlKHQsbj0hMSxyPTApe2xldCBvPVt0aGlzXTtmdW5jdGlvbiBpKHMsYSl7bGV0IGw9cy5tYXRjaEZyYWdtZW50KHQscik7aWYobCYmKCFufHxsLnZhbGlkRW5kKSlyZXR1cm4gVS5mcm9tKGEubWFwKGM9PmMuY3JlYXRlQW5kRmlsbCgpKSk7Zm9yKGxldCBjPTA7YzxzLm5leHQubGVuZ3RoO2MrKyl7bGV0e3R5cGU6dSxuZXh0OmR9PXMubmV4dFtjXTtpZighKHUuaXNUZXh0fHx1Lmhhc1JlcXVpcmVkQXR0cnMoKSkmJm8uaW5kZXhPZihkKT09LTEpe28ucHVzaChkKTtsZXQgZj1pKGQsYS5jb25jYXQodSkpO2lmKGYpcmV0dXJuIGZ9fXJldHVybiBudWxsfXJldHVybiBpKHRoaXMsW10pfWZpbmRXcmFwcGluZyh0KXtmb3IobGV0IHI9MDtyPHRoaXMud3JhcENhY2hlLmxlbmd0aDtyKz0yKWlmKHRoaXMud3JhcENhY2hlW3JdPT10KXJldHVybiB0aGlzLndyYXBDYWNoZVtyKzFdO2xldCBuPXRoaXMuY29tcHV0ZVdyYXBwaW5nKHQpO3JldHVybiB0aGlzLndyYXBDYWNoZS5wdXNoKHQsbiksbn1jb21wdXRlV3JhcHBpbmcodCl7bGV0IG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPVt7bWF0Y2g6dGhpcyx0eXBlOm51bGwsdmlhOm51bGx9XTtmb3IoO3IubGVuZ3RoOyl7bGV0IG89ci5zaGlmdCgpLGk9by5tYXRjaDtpZihpLm1hdGNoVHlwZSh0KSl7bGV0IHM9W107Zm9yKGxldCBhPW87YS50eXBlO2E9YS52aWEpcy5wdXNoKGEudHlwZSk7cmV0dXJuIHMucmV2ZXJzZSgpfWZvcihsZXQgcz0wO3M8aS5uZXh0Lmxlbmd0aDtzKyspe2xldHt0eXBlOmEsbmV4dDpsfT1pLm5leHRbc107IWEuaXNMZWFmJiYhYS5oYXNSZXF1aXJlZEF0dHJzKCkmJiEoYS5uYW1lIGluIG4pJiYoIW8udHlwZXx8bC52YWxpZEVuZCkmJihyLnB1c2goe21hdGNoOmEuY29udGVudE1hdGNoLHR5cGU6YSx2aWE6b30pLG5bYS5uYW1lXT0hMCl9fXJldHVybiBudWxsfWdldCBlZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5uZXh0Lmxlbmd0aH1lZGdlKHQpe2lmKHQ+PXRoaXMubmV4dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZXJlJ3Mgbm8gJHt0fXRoIGVkZ2UgaW4gdGhpcyBjb250ZW50IG1hdGNoYCk7cmV0dXJuIHRoaXMubmV4dFt0XX10b1N0cmluZygpe2xldCB0PVtdO2Z1bmN0aW9uIG4ocil7dC5wdXNoKHIpO2ZvcihsZXQgbz0wO288ci5uZXh0Lmxlbmd0aDtvKyspdC5pbmRleE9mKHIubmV4dFtvXS5uZXh0KT09LTEmJm4oci5uZXh0W29dLm5leHQpfXJldHVybiBuKHRoaXMpLHQubWFwKChyLG8pPT57bGV0IGk9bysoci52YWxpZEVuZD8iKiI6IiAiKSsiICI7Zm9yKGxldCBzPTA7czxyLm5leHQubGVuZ3RoO3MrKylpKz0ocz8iLCAiOiIiKStyLm5leHRbc10udHlwZS5uYW1lKyItPiIrdC5pbmRleE9mKHIubmV4dFtzXS5uZXh0KTtyZXR1cm4gaX0pLmpvaW4oYApgKX19YWwuZW1wdHk9bmV3IGFsKCEwKTtjbGFzcyB1OXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc3RyaW5nPXQsdGhpcy5ub2RlVHlwZXM9bix0aGlzLmlubGluZT1udWxsLHRoaXMucG9zPTAsdGhpcy50b2tlbnM9dC5zcGxpdCgvXHMqKD89XGJ8XFd8JCkvKSx0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV09PSIiJiZ0aGlzLnRva2Vucy5wb3AoKSx0aGlzLnRva2Vuc1swXT09IiImJnRoaXMudG9rZW5zLnNoaWZ0KCl9Z2V0IG5leHQoKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5wb3NdfWVhdCh0KXtyZXR1cm4gdGhpcy5uZXh0PT10JiYodGhpcy5wb3MrK3x8ITApfWVycih0KXt0aHJvdyBuZXcgU3ludGF4RXJyb3IodCsiIChpbiBjb250ZW50IGV4cHJlc3Npb24gJyIrdGhpcy5zdHJpbmcrIicpIil9fWZ1bmN0aW9uIHVSKGUpe2xldCB0PVtdO2RvIHQucHVzaChkOShlKSk7d2hpbGUoZS5lYXQoInwiKSk7cmV0dXJuIHQubGVuZ3RoPT0xP3RbMF06e3R5cGU6ImNob2ljZSIsZXhwcnM6dH19ZnVuY3Rpb24gZDkoZSl7bGV0IHQ9W107ZG8gdC5wdXNoKGY5KGUpKTt3aGlsZShlLm5leHQmJmUubmV4dCE9IikiJiZlLm5leHQhPSJ8Iik7cmV0dXJuIHQubGVuZ3RoPT0xP3RbMF06e3R5cGU6InNlcSIsZXhwcnM6dH19ZnVuY3Rpb24gZjkoZSl7bGV0IHQ9bTkoZSk7Zm9yKDs7KWlmKGUuZWF0KCIrIikpdD17dHlwZToicGx1cyIsZXhwcjp0fTtlbHNlIGlmKGUuZWF0KCIqIikpdD17dHlwZToic3RhciIsZXhwcjp0fTtlbHNlIGlmKGUuZWF0KCI/IikpdD17dHlwZToib3B0IixleHByOnR9O2Vsc2UgaWYoZS5lYXQoInsiKSl0PXA5KGUsdCk7ZWxzZSBicmVhaztyZXR1cm4gdH1mdW5jdGlvbiB6RShlKXsvXEQvLnRlc3QoZS5uZXh0KSYmZS5lcnIoIkV4cGVjdGVkIG51bWJlciwgZ290ICciK2UubmV4dCsiJyIpO2xldCB0PU51bWJlcihlLm5leHQpO3JldHVybiBlLnBvcysrLHR9ZnVuY3Rpb24gcDkoZSx0KXtsZXQgbj16RShlKSxyPW47cmV0dXJuIGUuZWF0KCIsIikmJihlLm5leHQhPSJ9Ij9yPXpFKGUpOnI9LTEpLGUuZWF0KCJ9Iil8fGUuZXJyKCJVbmNsb3NlZCBicmFjZWQgcmFuZ2UiKSx7dHlwZToicmFuZ2UiLG1pbjpuLG1heDpyLGV4cHI6dH19ZnVuY3Rpb24gaDkoZSx0KXtsZXQgbj1lLm5vZGVUeXBlcyxyPW5bdF07aWYocilyZXR1cm5bcl07bGV0IG89W107Zm9yKGxldCBpIGluIG4pe2xldCBzPW5baV07cy5ncm91cHMuaW5kZXhPZih0KT4tMSYmby5wdXNoKHMpfXJldHVybiBvLmxlbmd0aD09MCYmZS5lcnIoIk5vIG5vZGUgdHlwZSBvciBncm91cCAnIit0KyInIGZvdW5kIiksb31mdW5jdGlvbiBtOShlKXtpZihlLmVhdCgiKCIpKXtsZXQgdD11UihlKTtyZXR1cm4gZS5lYXQoIikiKXx8ZS5lcnIoIk1pc3NpbmcgY2xvc2luZyBwYXJlbiIpLHR9ZWxzZSBpZigvXFcvLnRlc3QoZS5uZXh0KSllLmVycigiVW5leHBlY3RlZCB0b2tlbiAnIitlLm5leHQrIiciKTtlbHNle2xldCB0PWg5KGUsZS5uZXh0KS5tYXAobj0+KGUuaW5saW5lPT1udWxsP2UuaW5saW5lPW4uaXNJbmxpbmU6ZS5pbmxpbmUhPW4uaXNJbmxpbmUmJmUuZXJyKCJNaXhpbmcgaW5saW5lIGFuZCBibG9jayBjb250ZW50Iikse3R5cGU6Im5hbWUiLHZhbHVlOm59KSk7cmV0dXJuIGUucG9zKyssdC5sZW5ndGg9PTE/dFswXTp7dHlwZToiY2hvaWNlIixleHByczp0fX19ZnVuY3Rpb24gZzkoZSl7bGV0IHQ9W1tdXTtyZXR1cm4gbyhpKGUsMCksbigpKSx0O2Z1bmN0aW9uIG4oKXtyZXR1cm4gdC5wdXNoKFtdKS0xfWZ1bmN0aW9uIHIocyxhLGwpe2xldCBjPXt0ZXJtOmwsdG86YX07cmV0dXJuIHRbc10ucHVzaChjKSxjfWZ1bmN0aW9uIG8ocyxhKXtzLmZvckVhY2gobD0+bC50bz1hKX1mdW5jdGlvbiBpKHMsYSl7aWYocy50eXBlPT0iY2hvaWNlIilyZXR1cm4gcy5leHBycy5yZWR1Y2UoKGwsYyk9PmwuY29uY2F0KGkoYyxhKSksW10pO2lmKHMudHlwZT09InNlcSIpZm9yKGxldCBsPTA7O2wrKyl7bGV0IGM9aShzLmV4cHJzW2xdLGEpO2lmKGw9PXMuZXhwcnMubGVuZ3RoLTEpcmV0dXJuIGM7byhjLGE9bigpKX1lbHNlIGlmKHMudHlwZT09InN0YXIiKXtsZXQgbD1uKCk7cmV0dXJuIHIoYSxsKSxvKGkocy5leHByLGwpLGwpLFtyKGwpXX1lbHNlIGlmKHMudHlwZT09InBsdXMiKXtsZXQgbD1uKCk7cmV0dXJuIG8oaShzLmV4cHIsYSksbCksbyhpKHMuZXhwcixsKSxsKSxbcihsKV19ZWxzZXtpZihzLnR5cGU9PSJvcHQiKXJldHVybltyKGEpXS5jb25jYXQoaShzLmV4cHIsYSkpO2lmKHMudHlwZT09InJhbmdlIil7bGV0IGw9YTtmb3IobGV0IGM9MDtjPHMubWluO2MrKyl7bGV0IHU9bigpO28oaShzLmV4cHIsbCksdSksbD11fWlmKHMubWF4PT0tMSlvKGkocy5leHByLGwpLGwpO2Vsc2UgZm9yKGxldCBjPXMubWluO2M8cy5tYXg7YysrKXtsZXQgdT1uKCk7cihsLHUpLG8oaShzLmV4cHIsbCksdSksbD11fXJldHVybltyKGwpXX1lbHNle2lmKHMudHlwZT09Im5hbWUiKXJldHVybltyKGEsdm9pZCAwLHMudmFsdWUpXTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZXhwciB0eXBlIil9fX19ZnVuY3Rpb24gZFIoZSx0KXtyZXR1cm4gdC1lfWZ1bmN0aW9uIEZFKGUsdCl7bGV0IG49W107cmV0dXJuIHIodCksbi5zb3J0KGRSKTtmdW5jdGlvbiByKG8pe2xldCBpPWVbb107aWYoaS5sZW5ndGg9PTEmJiFpWzBdLnRlcm0pcmV0dXJuIHIoaVswXS50byk7bi5wdXNoKG8pO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXR7dGVybTphLHRvOmx9PWlbc107IWEmJm4uaW5kZXhPZihsKT09LTEmJnIobCl9fX1mdW5jdGlvbiB2OShlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBuKEZFKGUsMCkpO2Z1bmN0aW9uIG4ocil7bGV0IG89W107ci5mb3JFYWNoKHM9PntlW3NdLmZvckVhY2goKHt0ZXJtOmEsdG86bH0pPT57aWYoIWEpcmV0dXJuO2xldCBjO2ZvcihsZXQgdT0wO3U8by5sZW5ndGg7dSsrKW9bdV1bMF09PWEmJihjPW9bdV1bMV0pO0ZFKGUsbCkuZm9yRWFjaCh1PT57Y3x8by5wdXNoKFthLGM9W11dKSxjLmluZGV4T2YodSk9PS0xJiZjLnB1c2godSl9KX0pfSk7bGV0IGk9dFtyLmpvaW4oIiwiKV09bmV3IGFsKHIuaW5kZXhPZihlLmxlbmd0aC0xKT4tMSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2xldCBhPW9bc11bMV0uc29ydChkUik7aS5uZXh0LnB1c2goe3R5cGU6b1tzXVswXSxuZXh0OnRbYS5qb2luKCIsIildfHxuKGEpfSl9cmV0dXJuIGl9fWZ1bmN0aW9uIHk5KGUsdCl7Zm9yKGxldCBuPTAscj1bZV07bjxyLmxlbmd0aDtuKyspe2xldCBvPXJbbl0saT0hby52YWxpZEVuZCxzPVtdO2ZvcihsZXQgYT0wO2E8by5uZXh0Lmxlbmd0aDthKyspe2xldHt0eXBlOmwsbmV4dDpjfT1vLm5leHRbYV07cy5wdXNoKGwubmFtZSksaSYmIShsLmlzVGV4dHx8bC5oYXNSZXF1aXJlZEF0dHJzKCkpJiYoaT0hMSksci5pbmRleE9mKGMpPT0tMSYmci5wdXNoKGMpfWkmJnQuZXJyKCJPbmx5IG5vbi1nZW5lcmF0YWJsZSBub2RlcyAoIitzLmpvaW4oIiwgIikrIikgaW4gYSByZXF1aXJlZCBwb3NpdGlvbiAoc2VlIGh0dHBzOi8vcHJvc2VtaXJyb3IubmV0L2RvY3MvZ3VpZGUvI2dlbmVyYXRhYmxlKSIpfX1mdW5jdGlvbiBmUihlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgbiBpbiBlKXtsZXQgcj1lW25dO2lmKCFyLmhhc0RlZmF1bHQpcmV0dXJuIG51bGw7dFtuXT1yLmRlZmF1bHR9cmV0dXJuIHR9ZnVuY3Rpb24gcFIoZSx0KXtsZXQgbj1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgciBpbiBlKXtsZXQgbz10JiZ0W3JdO2lmKG89PT12b2lkIDApe2xldCBpPWVbcl07aWYoaS5oYXNEZWZhdWx0KW89aS5kZWZhdWx0O2Vsc2UgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIHZhbHVlIHN1cHBsaWVkIGZvciBhdHRyaWJ1dGUgIityKX1uW3JdPW99cmV0dXJuIG59ZnVuY3Rpb24gaFIoZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlKWZvcihsZXQgbiBpbiBlKXRbbl09bmV3IHg5KGVbbl0pO3JldHVybiB0fWxldCBNeD1jbGFzcyBtUntjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5uYW1lPXQsdGhpcy5zY2hlbWE9bix0aGlzLnNwZWM9cix0aGlzLm1hcmtTZXQ9bnVsbCx0aGlzLmdyb3Vwcz1yLmdyb3VwP3IuZ3JvdXAuc3BsaXQoIiAiKTpbXSx0aGlzLmF0dHJzPWhSKHIuYXR0cnMpLHRoaXMuZGVmYXVsdEF0dHJzPWZSKHRoaXMuYXR0cnMpLHRoaXMuY29udGVudE1hdGNoPW51bGwsdGhpcy5pbmxpbmVDb250ZW50PW51bGwsdGhpcy5pc0Jsb2NrPSEoci5pbmxpbmV8fHQ9PSJ0ZXh0IiksdGhpcy5pc1RleHQ9dD09InRleHQifWdldCBpc0lubGluZSgpe3JldHVybiF0aGlzLmlzQmxvY2t9Z2V0IGlzVGV4dGJsb2NrKCl7cmV0dXJuIHRoaXMuaXNCbG9jayYmdGhpcy5pbmxpbmVDb250ZW50fWdldCBpc0xlYWYoKXtyZXR1cm4gdGhpcy5jb250ZW50TWF0Y2g9PWFsLmVtcHR5fWdldCBpc0F0b20oKXtyZXR1cm4gdGhpcy5pc0xlYWZ8fCEhdGhpcy5zcGVjLmF0b219Z2V0IHdoaXRlc3BhY2UoKXtyZXR1cm4gdGhpcy5zcGVjLndoaXRlc3BhY2V8fCh0aGlzLnNwZWMuY29kZT8icHJlIjoibm9ybWFsIil9aGFzUmVxdWlyZWRBdHRycygpe2ZvcihsZXQgdCBpbiB0aGlzLmF0dHJzKWlmKHRoaXMuYXR0cnNbdF0uaXNSZXF1aXJlZClyZXR1cm4hMDtyZXR1cm4hMX1jb21wYXRpYmxlQ29udGVudCh0KXtyZXR1cm4gdGhpcz09dHx8dGhpcy5jb250ZW50TWF0Y2guY29tcGF0aWJsZSh0LmNvbnRlbnRNYXRjaCl9Y29tcHV0ZUF0dHJzKHQpe3JldHVybiF0JiZ0aGlzLmRlZmF1bHRBdHRycz90aGlzLmRlZmF1bHRBdHRyczpwUih0aGlzLmF0dHJzLHQpfWNyZWF0ZSh0PW51bGwsbixyKXtpZih0aGlzLmlzVGV4dCl0aHJvdyBuZXcgRXJyb3IoIk5vZGVUeXBlLmNyZWF0ZSBjYW4ndCBjb25zdHJ1Y3QgdGV4dCBub2RlcyIpO3JldHVybiBuZXcgQnModGhpcyx0aGlzLmNvbXB1dGVBdHRycyh0KSxVLmZyb20obiksWWUuc2V0RnJvbShyKSl9Y3JlYXRlQ2hlY2tlZCh0PW51bGwsbixyKXtyZXR1cm4gbj1VLmZyb20obiksdGhpcy5jaGVja0NvbnRlbnQobiksbmV3IEJzKHRoaXMsdGhpcy5jb21wdXRlQXR0cnModCksbixZZS5zZXRGcm9tKHIpKX1jcmVhdGVBbmRGaWxsKHQ9bnVsbCxuLHIpe2lmKHQ9dGhpcy5jb21wdXRlQXR0cnModCksbj1VLmZyb20obiksbi5zaXplKXtsZXQgcz10aGlzLmNvbnRlbnRNYXRjaC5maWxsQmVmb3JlKG4pO2lmKCFzKXJldHVybiBudWxsO249cy5hcHBlbmQobil9bGV0IG89dGhpcy5jb250ZW50TWF0Y2gubWF0Y2hGcmFnbWVudChuKSxpPW8mJm8uZmlsbEJlZm9yZShVLmVtcHR5LCEwKTtyZXR1cm4gaT9uZXcgQnModGhpcyx0LG4uYXBwZW5kKGkpLFllLnNldEZyb20ocikpOm51bGx9dmFsaWRDb250ZW50KHQpe2xldCBuPXRoaXMuY29udGVudE1hdGNoLm1hdGNoRnJhZ21lbnQodCk7aWYoIW58fCFuLnZhbGlkRW5kKXJldHVybiExO2ZvcihsZXQgcj0wO3I8dC5jaGlsZENvdW50O3IrKylpZighdGhpcy5hbGxvd3NNYXJrcyh0LmNoaWxkKHIpLm1hcmtzKSlyZXR1cm4hMTtyZXR1cm4hMH1jaGVja0NvbnRlbnQodCl7aWYoIXRoaXMudmFsaWRDb250ZW50KHQpKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIGNvbnRlbnQgZm9yIG5vZGUgJHt0aGlzLm5hbWV9OiAke3QudG9TdHJpbmcoKS5zbGljZSgwLDUwKX1gKX1hbGxvd3NNYXJrVHlwZSh0KXtyZXR1cm4gdGhpcy5tYXJrU2V0PT1udWxsfHx0aGlzLm1hcmtTZXQuaW5kZXhPZih0KT4tMX1hbGxvd3NNYXJrcyh0KXtpZih0aGlzLm1hcmtTZXQ9PW51bGwpcmV0dXJuITA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoIXRoaXMuYWxsb3dzTWFya1R5cGUodFtuXS50eXBlKSlyZXR1cm4hMTtyZXR1cm4hMH1hbGxvd2VkTWFya3ModCl7aWYodGhpcy5tYXJrU2V0PT1udWxsKXJldHVybiB0O2xldCBuO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMuYWxsb3dzTWFya1R5cGUodFtyXS50eXBlKT9uJiZuLnB1c2godFtyXSk6bnx8KG49dC5zbGljZSgwLHIpKTtyZXR1cm4gbj9uLmxlbmd0aD9uOlllLm5vbmU6dH1zdGF0aWMgY29tcGlsZSh0LG4pe2xldCByPU9iamVjdC5jcmVhdGUobnVsbCk7dC5mb3JFYWNoKChpLHMpPT5yW2ldPW5ldyBtUihpLG4scykpO2xldCBvPW4uc3BlYy50b3BOb2RlfHwiZG9jIjtpZighcltvXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgaXRzIHRvcCBub2RlIHR5cGUgKCciK28rIicpIik7aWYoIXIudGV4dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRXZlcnkgc2NoZW1hIG5lZWRzIGEgJ3RleHQnIHR5cGUiKTtmb3IobGV0IGkgaW4gci50ZXh0LmF0dHJzKXRocm93IG5ldyBSYW5nZUVycm9yKCJUaGUgdGV4dCBub2RlIHR5cGUgc2hvdWxkIG5vdCBoYXZlIGF0dHJpYnV0ZXMiKTtyZXR1cm4gcn19O2NsYXNzIHg5e2NvbnN0cnVjdG9yKHQpe3RoaXMuaGFzRGVmYXVsdD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpLHRoaXMuZGVmYXVsdD10LmRlZmF1bHR9Z2V0IGlzUmVxdWlyZWQoKXtyZXR1cm4hdGhpcy5oYXNEZWZhdWx0fX1jbGFzcyBpcHtjb25zdHJ1Y3Rvcih0LG4scixvKXt0aGlzLm5hbWU9dCx0aGlzLnJhbms9bix0aGlzLnNjaGVtYT1yLHRoaXMuc3BlYz1vLHRoaXMuYXR0cnM9aFIoby5hdHRycyksdGhpcy5leGNsdWRlZD1udWxsO2xldCBpPWZSKHRoaXMuYXR0cnMpO3RoaXMuaW5zdGFuY2U9aT9uZXcgWWUodGhpcyxpKTpudWxsfWNyZWF0ZSh0PW51bGwpe3JldHVybiF0JiZ0aGlzLmluc3RhbmNlP3RoaXMuaW5zdGFuY2U6bmV3IFllKHRoaXMscFIodGhpcy5hdHRycyx0KSl9c3RhdGljIGNvbXBpbGUodCxuKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpLG89MDtyZXR1cm4gdC5mb3JFYWNoKChpLHMpPT5yW2ldPW5ldyBpcChpLG8rKyxuLHMpKSxyfXJlbW92ZUZyb21TZXQodCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS50eXBlPT10aGlzJiYodD10LnNsaWNlKDAsbikuY29uY2F0KHQuc2xpY2UobisxKSksbi0tKTtyZXR1cm4gdH1pc0luU2V0KHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0udHlwZT09dGhpcylyZXR1cm4gdFtuXX1leGNsdWRlcyh0KXtyZXR1cm4gdGhpcy5leGNsdWRlZC5pbmRleE9mKHQpPi0xfX1jbGFzcyBiOXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmNhY2hlZD1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBuPXRoaXMuc3BlYz17fTtmb3IobGV0IG8gaW4gdCluW29dPXRbb107bi5ub2Rlcz1Tbi5mcm9tKHQubm9kZXMpLG4ubWFya3M9U24uZnJvbSh0Lm1hcmtzfHx7fSksdGhpcy5ub2Rlcz1NeC5jb21waWxlKHRoaXMuc3BlYy5ub2Rlcyx0aGlzKSx0aGlzLm1hcmtzPWlwLmNvbXBpbGUodGhpcy5zcGVjLm1hcmtzLHRoaXMpO2xldCByPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBvIGluIHRoaXMubm9kZXMpe2lmKG8gaW4gdGhpcy5tYXJrcyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihvKyIgY2FuIG5vdCBiZSBib3RoIGEgbm9kZSBhbmQgYSBtYXJrIik7bGV0IGk9dGhpcy5ub2Rlc1tvXSxzPWkuc3BlYy5jb250ZW50fHwiIixhPWkuc3BlYy5tYXJrcztpLmNvbnRlbnRNYXRjaD1yW3NdfHwocltzXT1hbC5wYXJzZShzLHRoaXMubm9kZXMpKSxpLmlubGluZUNvbnRlbnQ9aS5jb250ZW50TWF0Y2guaW5saW5lQ29udGVudCxpLm1hcmtTZXQ9YT09Il8iP251bGw6YT9CRSh0aGlzLGEuc3BsaXQoIiAiKSk6YT09IiJ8fCFpLmlubGluZUNvbnRlbnQ/W106bnVsbH1mb3IobGV0IG8gaW4gdGhpcy5tYXJrcyl7bGV0IGk9dGhpcy5tYXJrc1tvXSxzPWkuc3BlYy5leGNsdWRlcztpLmV4Y2x1ZGVkPXM9PW51bGw/W2ldOnM9PSIiP1tdOkJFKHRoaXMscy5zcGxpdCgiICIpKX10aGlzLm5vZGVGcm9tSlNPTj10aGlzLm5vZGVGcm9tSlNPTi5iaW5kKHRoaXMpLHRoaXMubWFya0Zyb21KU09OPXRoaXMubWFya0Zyb21KU09OLmJpbmQodGhpcyksdGhpcy50b3BOb2RlVHlwZT10aGlzLm5vZGVzW3RoaXMuc3BlYy50b3BOb2RlfHwiZG9jIl0sdGhpcy5jYWNoZWQud3JhcHBpbmdzPU9iamVjdC5jcmVhdGUobnVsbCl9bm9kZSh0LG49bnVsbCxyLG8pe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil0PXRoaXMubm9kZVR5cGUodCk7ZWxzZSBpZih0IGluc3RhbmNlb2YgTXgpe2lmKHQuc2NoZW1hIT10aGlzKXRocm93IG5ldyBSYW5nZUVycm9yKCJOb2RlIHR5cGUgZnJvbSBkaWZmZXJlbnQgc2NoZW1hIHVzZWQgKCIrdC5uYW1lKyIpIil9ZWxzZSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBub2RlIHR5cGU6ICIrdCk7cmV0dXJuIHQuY3JlYXRlQ2hlY2tlZChuLHIsbyl9dGV4dCh0LG4pe2xldCByPXRoaXMubm9kZXMudGV4dDtyZXR1cm4gbmV3IFRtKHIsci5kZWZhdWx0QXR0cnMsdCxZZS5zZXRGcm9tKG4pKX1tYXJrKHQsbil7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9dGhpcy5tYXJrc1t0XSksdC5jcmVhdGUobil9bm9kZUZyb21KU09OKHQpe3JldHVybiBCcy5mcm9tSlNPTih0aGlzLHQpfW1hcmtGcm9tSlNPTih0KXtyZXR1cm4gWWUuZnJvbUpTT04odGhpcyx0KX1ub2RlVHlwZSh0KXtsZXQgbj10aGlzLm5vZGVzW3RdO2lmKCFuKXRocm93IG5ldyBSYW5nZUVycm9yKCJVbmtub3duIG5vZGUgdHlwZTogIit0KTtyZXR1cm4gbn19ZnVuY3Rpb24gQkUoZSx0KXtsZXQgbj1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXSxpPWUubWFya3Nbb10scz1pO2lmKGkpbi5wdXNoKGkpO2Vsc2UgZm9yKGxldCBhIGluIGUubWFya3Mpe2xldCBsPWUubWFya3NbYV07KG89PSJfInx8bC5zcGVjLmdyb3VwJiZsLnNwZWMuZ3JvdXAuc3BsaXQoIiAiKS5pbmRleE9mKG8pPi0xKSYmbi5wdXNoKHM9bCl9aWYoIXMpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJVbmtub3duIG1hcmsgdHlwZTogJyIrdFtyXSsiJyIpfXJldHVybiBufWNsYXNzIFdje2NvbnN0cnVjdG9yKHQsbil7dGhpcy5zY2hlbWE9dCx0aGlzLnJ1bGVzPW4sdGhpcy50YWdzPVtdLHRoaXMuc3R5bGVzPVtdLG4uZm9yRWFjaChyPT57ci50YWc/dGhpcy50YWdzLnB1c2gocik6ci5zdHlsZSYmdGhpcy5zdHlsZXMucHVzaChyKX0pLHRoaXMubm9ybWFsaXplTGlzdHM9IXRoaXMudGFncy5zb21lKHI9PntpZighL14odWx8b2wpXGIvLnRlc3Qoci50YWcpfHwhci5ub2RlKXJldHVybiExO2xldCBvPXQubm9kZXNbci5ub2RlXTtyZXR1cm4gby5jb250ZW50TWF0Y2gubWF0Y2hUeXBlKG8pfSl9cGFyc2UodCxuPXt9KXtsZXQgcj1uZXcgVkUodGhpcyxuLCExKTtyZXR1cm4gci5hZGRBbGwodCxuLmZyb20sbi50byksci5maW5pc2goKX1wYXJzZVNsaWNlKHQsbj17fSl7bGV0IHI9bmV3IFZFKHRoaXMsbiwhMCk7cmV0dXJuIHIuYWRkQWxsKHQsbi5mcm9tLG4udG8pLEoubWF4T3BlbihyLmZpbmlzaCgpKX1tYXRjaFRhZyh0LG4scil7Zm9yKGxldCBvPXI/dGhpcy50YWdzLmluZGV4T2YocikrMTowO288dGhpcy50YWdzLmxlbmd0aDtvKyspe2xldCBpPXRoaXMudGFnc1tvXTtpZihrOSh0LGkudGFnKSYmKGkubmFtZXNwYWNlPT09dm9pZCAwfHx0Lm5hbWVzcGFjZVVSST09aS5uYW1lc3BhY2UpJiYoIWkuY29udGV4dHx8bi5tYXRjaGVzQ29udGV4dChpLmNvbnRleHQpKSl7aWYoaS5nZXRBdHRycyl7bGV0IHM9aS5nZXRBdHRycyh0KTtpZihzPT09ITEpY29udGludWU7aS5hdHRycz1zfHx2b2lkIDB9cmV0dXJuIGl9fX1tYXRjaFN0eWxlKHQsbixyLG8pe2ZvcihsZXQgaT1vP3RoaXMuc3R5bGVzLmluZGV4T2YobykrMTowO2k8dGhpcy5zdHlsZXMubGVuZ3RoO2krKyl7bGV0IHM9dGhpcy5zdHlsZXNbaV0sYT1zLnN0eWxlO2lmKCEoYS5pbmRleE9mKHQpIT0wfHxzLmNvbnRleHQmJiFyLm1hdGNoZXNDb250ZXh0KHMuY29udGV4dCl8fGEubGVuZ3RoPnQubGVuZ3RoJiYoYS5jaGFyQ29kZUF0KHQubGVuZ3RoKSE9NjF8fGEuc2xpY2UodC5sZW5ndGgrMSkhPW4pKSl7aWYocy5nZXRBdHRycyl7bGV0IGw9cy5nZXRBdHRycyhuKTtpZihsPT09ITEpY29udGludWU7cy5hdHRycz1sfHx2b2lkIDB9cmV0dXJuIHN9fX1zdGF0aWMgc2NoZW1hUnVsZXModCl7bGV0IG49W107ZnVuY3Rpb24gcihvKXtsZXQgaT1vLnByaW9yaXR5PT1udWxsPzUwOm8ucHJpb3JpdHkscz0wO2Zvcig7czxuLmxlbmd0aDtzKyspe2xldCBhPW5bc107aWYoKGEucHJpb3JpdHk9PW51bGw/NTA6YS5wcmlvcml0eSk8aSlicmVha31uLnNwbGljZShzLDAsbyl9Zm9yKGxldCBvIGluIHQubWFya3Mpe2xldCBpPXQubWFya3Nbb10uc3BlYy5wYXJzZURPTTtpJiZpLmZvckVhY2gocz0+e3Iocz1IRShzKSkscy5tYXJrfHxzLmlnbm9yZXx8cy5jbGVhck1hcmt8fChzLm1hcms9byl9KX1mb3IobGV0IG8gaW4gdC5ub2Rlcyl7bGV0IGk9dC5ub2Rlc1tvXS5zcGVjLnBhcnNlRE9NO2kmJmkuZm9yRWFjaChzPT57cihzPUhFKHMpKSxzLm5vZGV8fHMuaWdub3JlfHxzLm1hcmt8fChzLm5vZGU9byl9KX1yZXR1cm4gbn1zdGF0aWMgZnJvbVNjaGVtYSh0KXtyZXR1cm4gdC5jYWNoZWQuZG9tUGFyc2VyfHwodC5jYWNoZWQuZG9tUGFyc2VyPW5ldyBXYyh0LFdjLnNjaGVtYVJ1bGVzKHQpKSl9fWNvbnN0IGdSPXthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxjYW52YXM6ITAsZGQ6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZpZ2NhcHRpb246ITAsZmlndXJlOiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbGk6ITAsbm9zY3JpcHQ6ITAsb2w6ITAsb3V0cHV0OiEwLHA6ITAscHJlOiEwLHNlY3Rpb246ITAsdGFibGU6ITAsdGZvb3Q6ITAsdWw6ITB9LHc5PXtoZWFkOiEwLG5vc2NyaXB0OiEwLG9iamVjdDohMCxzY3JpcHQ6ITAsc3R5bGU6ITAsdGl0bGU6ITB9LHZSPXtvbDohMCx1bDohMH0sUG09MSxNbT0yLCRkPTQ7ZnVuY3Rpb24gVUUoZSx0LG4pe3JldHVybiB0IT1udWxsPyh0P1BtOjApfCh0PT09ImZ1bGwiP01tOjApOmUmJmUud2hpdGVzcGFjZT09InByZSI/UG18TW06biZ+JGR9Y2xhc3MgV3B7Y29uc3RydWN0b3IodCxuLHIsbyxpLHMsYSl7dGhpcy50eXBlPXQsdGhpcy5hdHRycz1uLHRoaXMubWFya3M9cix0aGlzLnBlbmRpbmdNYXJrcz1vLHRoaXMuc29saWQ9aSx0aGlzLm9wdGlvbnM9YSx0aGlzLmNvbnRlbnQ9W10sdGhpcy5hY3RpdmVNYXJrcz1ZZS5ub25lLHRoaXMuc3Rhc2hNYXJrcz1bXSx0aGlzLm1hdGNoPXN8fChhJiRkP251bGw6dC5jb250ZW50TWF0Y2gpfWZpbmRXcmFwcGluZyh0KXtpZighdGhpcy5tYXRjaCl7aWYoIXRoaXMudHlwZSlyZXR1cm5bXTtsZXQgbj10aGlzLnR5cGUuY29udGVudE1hdGNoLmZpbGxCZWZvcmUoVS5mcm9tKHQpKTtpZihuKXRoaXMubWF0Y2g9dGhpcy50eXBlLmNvbnRlbnRNYXRjaC5tYXRjaEZyYWdtZW50KG4pO2Vsc2V7bGV0IHI9dGhpcy50eXBlLmNvbnRlbnRNYXRjaCxvO3JldHVybihvPXIuZmluZFdyYXBwaW5nKHQudHlwZSkpPyh0aGlzLm1hdGNoPXIsbyk6bnVsbH19cmV0dXJuIHRoaXMubWF0Y2guZmluZFdyYXBwaW5nKHQudHlwZSl9ZmluaXNoKHQpe2lmKCEodGhpcy5vcHRpb25zJlBtKSl7bGV0IHI9dGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGgtMV0sbztpZihyJiZyLmlzVGV4dCYmKG89L1sgXHRcclxuXHUwMDBjXSskLy5leGVjKHIudGV4dCkpKXtsZXQgaT1yO3IudGV4dC5sZW5ndGg9PW9bMF0ubGVuZ3RoP3RoaXMuY29udGVudC5wb3AoKTp0aGlzLmNvbnRlbnRbdGhpcy5jb250ZW50Lmxlbmd0aC0xXT1pLndpdGhUZXh0KGkudGV4dC5zbGljZSgwLGkudGV4dC5sZW5ndGgtb1swXS5sZW5ndGgpKX19bGV0IG49VS5mcm9tKHRoaXMuY29udGVudCk7cmV0dXJuIXQmJnRoaXMubWF0Y2gmJihuPW4uYXBwZW5kKHRoaXMubWF0Y2guZmlsbEJlZm9yZShVLmVtcHR5LCEwKSkpLHRoaXMudHlwZT90aGlzLnR5cGUuY3JlYXRlKHRoaXMuYXR0cnMsbix0aGlzLm1hcmtzKTpufXBvcEZyb21TdGFzaE1hcmsodCl7Zm9yKGxldCBuPXRoaXMuc3Rhc2hNYXJrcy5sZW5ndGgtMTtuPj0wO24tLSlpZih0LmVxKHRoaXMuc3Rhc2hNYXJrc1tuXSkpcmV0dXJuIHRoaXMuc3Rhc2hNYXJrcy5zcGxpY2UobiwxKVswXX1hcHBseVBlbmRpbmcodCl7Zm9yKGxldCBuPTAscj10aGlzLnBlbmRpbmdNYXJrcztuPHIubGVuZ3RoO24rKyl7bGV0IG89cltuXTsodGhpcy50eXBlP3RoaXMudHlwZS5hbGxvd3NNYXJrVHlwZShvLnR5cGUpOl85KG8udHlwZSx0KSkmJiFvLmlzSW5TZXQodGhpcy5hY3RpdmVNYXJrcykmJih0aGlzLmFjdGl2ZU1hcmtzPW8uYWRkVG9TZXQodGhpcy5hY3RpdmVNYXJrcyksdGhpcy5wZW5kaW5nTWFya3M9by5yZW1vdmVGcm9tU2V0KHRoaXMucGVuZGluZ01hcmtzKSl9fWlubGluZUNvbnRleHQodCl7cmV0dXJuIHRoaXMudHlwZT90aGlzLnR5cGUuaW5saW5lQ29udGVudDp0aGlzLmNvbnRlbnQubGVuZ3RoP3RoaXMuY29udGVudFswXS5pc0lubGluZTp0LnBhcmVudE5vZGUmJiFnUi5oYXNPd25Qcm9wZXJ0eSh0LnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl9fWNsYXNzIFZFe2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnBhcnNlcj10LHRoaXMub3B0aW9ucz1uLHRoaXMuaXNPcGVuPXIsdGhpcy5vcGVuPTA7bGV0IG89bi50b3BOb2RlLGkscz1VRShudWxsLG4ucHJlc2VydmVXaGl0ZXNwYWNlLDApfChyPyRkOjApO28/aT1uZXcgV3Aoby50eXBlLG8uYXR0cnMsWWUubm9uZSxZZS5ub25lLCEwLG4udG9wTWF0Y2h8fG8udHlwZS5jb250ZW50TWF0Y2gscyk6cj9pPW5ldyBXcChudWxsLG51bGwsWWUubm9uZSxZZS5ub25lLCEwLG51bGwscyk6aT1uZXcgV3AodC5zY2hlbWEudG9wTm9kZVR5cGUsbnVsbCxZZS5ub25lLFllLm5vbmUsITAsbnVsbCxzKSx0aGlzLm5vZGVzPVtpXSx0aGlzLmZpbmQ9bi5maW5kUG9zaXRpb25zLHRoaXMubmVlZHNCbG9jaz0hMX1nZXQgdG9wKCl7cmV0dXJuIHRoaXMubm9kZXNbdGhpcy5vcGVuXX1hZGRET00odCl7dC5ub2RlVHlwZT09Mz90aGlzLmFkZFRleHROb2RlKHQpOnQubm9kZVR5cGU9PTEmJnRoaXMuYWRkRWxlbWVudCh0KX13aXRoU3R5bGVSdWxlcyh0LG4pe2xldCByPXQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2lmKCFyKXJldHVybiBuKCk7bGV0IG89dGhpcy5yZWFkU3R5bGVzKEU5KHIpKTtpZighbylyZXR1cm47bGV0W2ksc109byxhPXRoaXMudG9wO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXRoaXMucmVtb3ZlUGVuZGluZ01hcmsoc1tsXSxhKTtmb3IobGV0IGw9MDtsPGkubGVuZ3RoO2wrKyl0aGlzLmFkZFBlbmRpbmdNYXJrKGlbbF0pO24oKTtmb3IobGV0IGw9MDtsPGkubGVuZ3RoO2wrKyl0aGlzLnJlbW92ZVBlbmRpbmdNYXJrKGlbbF0sYSk7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspdGhpcy5hZGRQZW5kaW5nTWFyayhzW2xdKX1hZGRUZXh0Tm9kZSh0KXtsZXQgbj10Lm5vZGVWYWx1ZSxyPXRoaXMudG9wO2lmKHIub3B0aW9ucyZNbXx8ci5pbmxpbmVDb250ZXh0KHQpfHwvW14gXHRcclxuXHUwMDBjXS8udGVzdChuKSl7aWYoci5vcHRpb25zJlBtKXIub3B0aW9ucyZNbT9uPW4ucmVwbGFjZSgvXHJcbj8vZyxgCmApOm49bi5yZXBsYWNlKC9ccj9cbnxcci9nLCIgIik7ZWxzZSBpZihuPW4ucmVwbGFjZSgvWyBcdFxyXG5cdTAwMGNdKy9nLCIgIiksL15bIFx0XHJcblx1MDAwY10vLnRlc3QobikmJnRoaXMub3Blbj09dGhpcy5ub2Rlcy5sZW5ndGgtMSl7bGV0IG89ci5jb250ZW50W3IuY29udGVudC5sZW5ndGgtMV0saT10LnByZXZpb3VzU2libGluZzsoIW98fGkmJmkubm9kZU5hbWU9PSJCUiJ8fG8uaXNUZXh0JiYvWyBcdFxyXG5cdTAwMGNdJC8udGVzdChvLnRleHQpKSYmKG49bi5zbGljZSgxKSl9biYmdGhpcy5pbnNlcnROb2RlKHRoaXMucGFyc2VyLnNjaGVtYS50ZXh0KG4pKSx0aGlzLmZpbmRJblRleHQodCl9ZWxzZSB0aGlzLmZpbmRJbnNpZGUodCl9YWRkRWxlbWVudCh0LG4pe2xldCByPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxvO3ZSLmhhc093blByb3BlcnR5KHIpJiZ0aGlzLnBhcnNlci5ub3JtYWxpemVMaXN0cyYmUzkodCk7bGV0IGk9dGhpcy5vcHRpb25zLnJ1bGVGcm9tTm9kZSYmdGhpcy5vcHRpb25zLnJ1bGVGcm9tTm9kZSh0KXx8KG89dGhpcy5wYXJzZXIubWF0Y2hUYWcodCx0aGlzLG4pKTtpZihpP2kuaWdub3JlOnc5Lmhhc093blByb3BlcnR5KHIpKXRoaXMuZmluZEluc2lkZSh0KSx0aGlzLmlnbm9yZUZhbGxiYWNrKHQpO2Vsc2UgaWYoIWl8fGkuc2tpcHx8aS5jbG9zZVBhcmVudCl7aSYmaS5jbG9zZVBhcmVudD90aGlzLm9wZW49TWF0aC5tYXgoMCx0aGlzLm9wZW4tMSk6aSYmaS5za2lwLm5vZGVUeXBlJiYodD1pLnNraXApO2xldCBzLGE9dGhpcy50b3AsbD10aGlzLm5lZWRzQmxvY2s7aWYoZ1IuaGFzT3duUHJvcGVydHkocikpYS5jb250ZW50Lmxlbmd0aCYmYS5jb250ZW50WzBdLmlzSW5saW5lJiZ0aGlzLm9wZW4mJih0aGlzLm9wZW4tLSxhPXRoaXMudG9wKSxzPSEwLGEudHlwZXx8KHRoaXMubmVlZHNCbG9jaz0hMCk7ZWxzZSBpZighdC5maXJzdENoaWxkKXt0aGlzLmxlYWZGYWxsYmFjayh0KTtyZXR1cm59aSYmaS5za2lwP3RoaXMuYWRkQWxsKHQpOnRoaXMud2l0aFN0eWxlUnVsZXModCwoKT0+dGhpcy5hZGRBbGwodCkpLHMmJnRoaXMuc3luYyhhKSx0aGlzLm5lZWRzQmxvY2s9bH1lbHNlIHRoaXMud2l0aFN0eWxlUnVsZXModCwoKT0+e3RoaXMuYWRkRWxlbWVudEJ5UnVsZSh0LGksaS5jb25zdW1pbmc9PT0hMT9vOnZvaWQgMCl9KX1sZWFmRmFsbGJhY2sodCl7dC5ub2RlTmFtZT09IkJSIiYmdGhpcy50b3AudHlwZSYmdGhpcy50b3AudHlwZS5pbmxpbmVDb250ZW50JiZ0aGlzLmFkZFRleHROb2RlKHQub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgCmApKX1pZ25vcmVGYWxsYmFjayh0KXt0Lm5vZGVOYW1lPT0iQlIiJiYoIXRoaXMudG9wLnR5cGV8fCF0aGlzLnRvcC50eXBlLmlubGluZUNvbnRlbnQpJiZ0aGlzLmZpbmRQbGFjZSh0aGlzLnBhcnNlci5zY2hlbWEudGV4dCgiLSIpKX1yZWFkU3R5bGVzKHQpe2xldCBuPVllLm5vbmUscj1ZZS5ub25lO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9Milmb3IobGV0IGk9dm9pZCAwOzspe2xldCBzPXRoaXMucGFyc2VyLm1hdGNoU3R5bGUodFtvXSx0W28rMV0sdGhpcyxpKTtpZighcylicmVhaztpZihzLmlnbm9yZSlyZXR1cm4gbnVsbDtpZihzLmNsZWFyTWFyaz90aGlzLnRvcC5wZW5kaW5nTWFya3MuY29uY2F0KHRoaXMudG9wLmFjdGl2ZU1hcmtzKS5mb3JFYWNoKGE9PntzLmNsZWFyTWFyayhhKSYmKHI9YS5hZGRUb1NldChyKSl9KTpuPXRoaXMucGFyc2VyLnNjaGVtYS5tYXJrc1tzLm1hcmtdLmNyZWF0ZShzLmF0dHJzKS5hZGRUb1NldChuKSxzLmNvbnN1bWluZz09PSExKWk9cztlbHNlIGJyZWFrfXJldHVybltuLHJdfWFkZEVsZW1lbnRCeVJ1bGUodCxuLHIpe2xldCBvLGkscztuLm5vZGU/KGk9dGhpcy5wYXJzZXIuc2NoZW1hLm5vZGVzW24ubm9kZV0saS5pc0xlYWY/dGhpcy5pbnNlcnROb2RlKGkuY3JlYXRlKG4uYXR0cnMpKXx8dGhpcy5sZWFmRmFsbGJhY2sodCk6bz10aGlzLmVudGVyKGksbi5hdHRyc3x8bnVsbCxuLnByZXNlcnZlV2hpdGVzcGFjZSkpOihzPXRoaXMucGFyc2VyLnNjaGVtYS5tYXJrc1tuLm1hcmtdLmNyZWF0ZShuLmF0dHJzKSx0aGlzLmFkZFBlbmRpbmdNYXJrKHMpKTtsZXQgYT10aGlzLnRvcDtpZihpJiZpLmlzTGVhZil0aGlzLmZpbmRJbnNpZGUodCk7ZWxzZSBpZihyKXRoaXMuYWRkRWxlbWVudCh0LHIpO2Vsc2UgaWYobi5nZXRDb250ZW50KXRoaXMuZmluZEluc2lkZSh0KSxuLmdldENvbnRlbnQodCx0aGlzLnBhcnNlci5zY2hlbWEpLmZvckVhY2gobD0+dGhpcy5pbnNlcnROb2RlKGwpKTtlbHNle2xldCBsPXQ7dHlwZW9mIG4uY29udGVudEVsZW1lbnQ9PSJzdHJpbmciP2w9dC5xdWVyeVNlbGVjdG9yKG4uY29udGVudEVsZW1lbnQpOnR5cGVvZiBuLmNvbnRlbnRFbGVtZW50PT0iZnVuY3Rpb24iP2w9bi5jb250ZW50RWxlbWVudCh0KTpuLmNvbnRlbnRFbGVtZW50JiYobD1uLmNvbnRlbnRFbGVtZW50KSx0aGlzLmZpbmRBcm91bmQodCxsLCEwKSx0aGlzLmFkZEFsbChsKX1vJiZ0aGlzLnN5bmMoYSkmJnRoaXMub3Blbi0tLHMmJnRoaXMucmVtb3ZlUGVuZGluZ01hcmsocyxhKX1hZGRBbGwodCxuLHIpe2xldCBvPW58fDA7Zm9yKGxldCBpPW4/dC5jaGlsZE5vZGVzW25dOnQuZmlyc3RDaGlsZCxzPXI9PW51bGw/bnVsbDp0LmNoaWxkTm9kZXNbcl07aSE9cztpPWkubmV4dFNpYmxpbmcsKytvKXRoaXMuZmluZEF0UG9pbnQodCxvKSx0aGlzLmFkZERPTShpKTt0aGlzLmZpbmRBdFBvaW50KHQsbyl9ZmluZFBsYWNlKHQpe2xldCBuLHI7Zm9yKGxldCBvPXRoaXMub3BlbjtvPj0wO28tLSl7bGV0IGk9dGhpcy5ub2Rlc1tvXSxzPWkuZmluZFdyYXBwaW5nKHQpO2lmKHMmJighbnx8bi5sZW5ndGg+cy5sZW5ndGgpJiYobj1zLHI9aSwhcy5sZW5ndGgpfHxpLnNvbGlkKWJyZWFrfWlmKCFuKXJldHVybiExO3RoaXMuc3luYyhyKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl0aGlzLmVudGVySW5uZXIobltvXSxudWxsLCExKTtyZXR1cm4hMH1pbnNlcnROb2RlKHQpe2lmKHQuaXNJbmxpbmUmJnRoaXMubmVlZHNCbG9jayYmIXRoaXMudG9wLnR5cGUpe2xldCBuPXRoaXMudGV4dGJsb2NrRnJvbUNvbnRleHQoKTtuJiZ0aGlzLmVudGVySW5uZXIobil9aWYodGhpcy5maW5kUGxhY2UodCkpe3RoaXMuY2xvc2VFeHRyYSgpO2xldCBuPXRoaXMudG9wO24uYXBwbHlQZW5kaW5nKHQudHlwZSksbi5tYXRjaCYmKG4ubWF0Y2g9bi5tYXRjaC5tYXRjaFR5cGUodC50eXBlKSk7bGV0IHI9bi5hY3RpdmVNYXJrcztmb3IobGV0IG89MDtvPHQubWFya3MubGVuZ3RoO28rKykoIW4udHlwZXx8bi50eXBlLmFsbG93c01hcmtUeXBlKHQubWFya3Nbb10udHlwZSkpJiYocj10Lm1hcmtzW29dLmFkZFRvU2V0KHIpKTtyZXR1cm4gbi5jb250ZW50LnB1c2godC5tYXJrKHIpKSwhMH1yZXR1cm4hMX1lbnRlcih0LG4scil7bGV0IG89dGhpcy5maW5kUGxhY2UodC5jcmVhdGUobikpO3JldHVybiBvJiZ0aGlzLmVudGVySW5uZXIodCxuLCEwLHIpLG99ZW50ZXJJbm5lcih0LG49bnVsbCxyPSExLG8pe3RoaXMuY2xvc2VFeHRyYSgpO2xldCBpPXRoaXMudG9wO2kuYXBwbHlQZW5kaW5nKHQpLGkubWF0Y2g9aS5tYXRjaCYmaS5tYXRjaC5tYXRjaFR5cGUodCk7bGV0IHM9VUUodCxvLGkub3B0aW9ucyk7aS5vcHRpb25zJiRkJiZpLmNvbnRlbnQubGVuZ3RoPT0wJiYoc3w9JGQpLHRoaXMubm9kZXMucHVzaChuZXcgV3AodCxuLGkuYWN0aXZlTWFya3MsaS5wZW5kaW5nTWFya3MscixudWxsLHMpKSx0aGlzLm9wZW4rK31jbG9zZUV4dHJhKHQ9ITEpe2xldCBuPXRoaXMubm9kZXMubGVuZ3RoLTE7aWYobj50aGlzLm9wZW4pe2Zvcig7bj50aGlzLm9wZW47bi0tKXRoaXMubm9kZXNbbi0xXS5jb250ZW50LnB1c2godGhpcy5ub2Rlc1tuXS5maW5pc2godCkpO3RoaXMubm9kZXMubGVuZ3RoPXRoaXMub3BlbisxfX1maW5pc2goKXtyZXR1cm4gdGhpcy5vcGVuPTAsdGhpcy5jbG9zZUV4dHJhKHRoaXMuaXNPcGVuKSx0aGlzLm5vZGVzWzBdLmZpbmlzaCh0aGlzLmlzT3Blbnx8dGhpcy5vcHRpb25zLnRvcE9wZW4pfXN5bmModCl7Zm9yKGxldCBuPXRoaXMub3BlbjtuPj0wO24tLSlpZih0aGlzLm5vZGVzW25dPT10KXJldHVybiB0aGlzLm9wZW49biwhMDtyZXR1cm4hMX1nZXQgY3VycmVudFBvcygpe3RoaXMuY2xvc2VFeHRyYSgpO2xldCB0PTA7Zm9yKGxldCBuPXRoaXMub3BlbjtuPj0wO24tLSl7bGV0IHI9dGhpcy5ub2Rlc1tuXS5jb250ZW50O2ZvcihsZXQgbz1yLmxlbmd0aC0xO28+PTA7by0tKXQrPXJbb10ubm9kZVNpemU7biYmdCsrfXJldHVybiB0fWZpbmRBdFBvaW50KHQsbil7aWYodGhpcy5maW5kKWZvcihsZXQgcj0wO3I8dGhpcy5maW5kLmxlbmd0aDtyKyspdGhpcy5maW5kW3JdLm5vZGU9PXQmJnRoaXMuZmluZFtyXS5vZmZzZXQ9PW4mJih0aGlzLmZpbmRbcl0ucG9zPXRoaXMuY3VycmVudFBvcyl9ZmluZEluc2lkZSh0KXtpZih0aGlzLmZpbmQpZm9yKGxldCBuPTA7bjx0aGlzLmZpbmQubGVuZ3RoO24rKyl0aGlzLmZpbmRbbl0ucG9zPT1udWxsJiZ0Lm5vZGVUeXBlPT0xJiZ0LmNvbnRhaW5zKHRoaXMuZmluZFtuXS5ub2RlKSYmKHRoaXMuZmluZFtuXS5wb3M9dGhpcy5jdXJyZW50UG9zKX1maW5kQXJvdW5kKHQsbixyKXtpZih0IT1uJiZ0aGlzLmZpbmQpZm9yKGxldCBvPTA7bzx0aGlzLmZpbmQubGVuZ3RoO28rKyl0aGlzLmZpbmRbb10ucG9zPT1udWxsJiZ0Lm5vZGVUeXBlPT0xJiZ0LmNvbnRhaW5zKHRoaXMuZmluZFtvXS5ub2RlKSYmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzLmZpbmRbb10ubm9kZSkmKHI/Mjo0KSYmKHRoaXMuZmluZFtvXS5wb3M9dGhpcy5jdXJyZW50UG9zKX1maW5kSW5UZXh0KHQpe2lmKHRoaXMuZmluZClmb3IobGV0IG49MDtuPHRoaXMuZmluZC5sZW5ndGg7bisrKXRoaXMuZmluZFtuXS5ub2RlPT10JiYodGhpcy5maW5kW25dLnBvcz10aGlzLmN1cnJlbnRQb3MtKHQubm9kZVZhbHVlLmxlbmd0aC10aGlzLmZpbmRbbl0ub2Zmc2V0KSl9bWF0Y2hlc0NvbnRleHQodCl7aWYodC5pbmRleE9mKCJ8Iik+LTEpcmV0dXJuIHQuc3BsaXQoL1xzKlx8XHMqLykuc29tZSh0aGlzLm1hdGNoZXNDb250ZXh0LHRoaXMpO2xldCBuPXQuc3BsaXQoIi8iKSxyPXRoaXMub3B0aW9ucy5jb250ZXh0LG89IXRoaXMuaXNPcGVuJiYoIXJ8fHIucGFyZW50LnR5cGU9PXRoaXMubm9kZXNbMF0udHlwZSksaT0tKHI/ci5kZXB0aCsxOjApKyhvPzA6MSkscz0oYSxsKT0+e2Zvcig7YT49MDthLS0pe2xldCBjPW5bYV07aWYoYz09IiIpe2lmKGE9PW4ubGVuZ3RoLTF8fGE9PTApY29udGludWU7Zm9yKDtsPj1pO2wtLSlpZihzKGEtMSxsKSlyZXR1cm4hMDtyZXR1cm4hMX1lbHNle2xldCB1PWw+MHx8bD09MCYmbz90aGlzLm5vZGVzW2xdLnR5cGU6ciYmbD49aT9yLm5vZGUobC1pKS50eXBlOm51bGw7aWYoIXV8fHUubmFtZSE9YyYmdS5ncm91cHMuaW5kZXhPZihjKT09LTEpcmV0dXJuITE7bC0tfX1yZXR1cm4hMH07cmV0dXJuIHMobi5sZW5ndGgtMSx0aGlzLm9wZW4pfXRleHRibG9ja0Zyb21Db250ZXh0KCl7bGV0IHQ9dGhpcy5vcHRpb25zLmNvbnRleHQ7aWYodClmb3IobGV0IG49dC5kZXB0aDtuPj0wO24tLSl7bGV0IHI9dC5ub2RlKG4pLmNvbnRlbnRNYXRjaEF0KHQuaW5kZXhBZnRlcihuKSkuZGVmYXVsdFR5cGU7aWYociYmci5pc1RleHRibG9jayYmci5kZWZhdWx0QXR0cnMpcmV0dXJuIHJ9Zm9yKGxldCBuIGluIHRoaXMucGFyc2VyLnNjaGVtYS5ub2Rlcyl7bGV0IHI9dGhpcy5wYXJzZXIuc2NoZW1hLm5vZGVzW25dO2lmKHIuaXNUZXh0YmxvY2smJnIuZGVmYXVsdEF0dHJzKXJldHVybiByfX1hZGRQZW5kaW5nTWFyayh0KXtsZXQgbj1DOSh0LHRoaXMudG9wLnBlbmRpbmdNYXJrcyk7biYmdGhpcy50b3Auc3Rhc2hNYXJrcy5wdXNoKG4pLHRoaXMudG9wLnBlbmRpbmdNYXJrcz10LmFkZFRvU2V0KHRoaXMudG9wLnBlbmRpbmdNYXJrcyl9cmVtb3ZlUGVuZGluZ01hcmsodCxuKXtmb3IobGV0IHI9dGhpcy5vcGVuO3I+PTA7ci0tKXtsZXQgbz10aGlzLm5vZGVzW3JdO2lmKG8ucGVuZGluZ01hcmtzLmxhc3RJbmRleE9mKHQpPi0xKW8ucGVuZGluZ01hcmtzPXQucmVtb3ZlRnJvbVNldChvLnBlbmRpbmdNYXJrcyk7ZWxzZXtvLmFjdGl2ZU1hcmtzPXQucmVtb3ZlRnJvbVNldChvLmFjdGl2ZU1hcmtzKTtsZXQgcz1vLnBvcEZyb21TdGFzaE1hcmsodCk7cyYmby50eXBlJiZvLnR5cGUuYWxsb3dzTWFya1R5cGUocy50eXBlKSYmKG8uYWN0aXZlTWFya3M9cy5hZGRUb1NldChvLmFjdGl2ZU1hcmtzKSl9aWYobz09bilicmVha319fWZ1bmN0aW9uIFM5KGUpe2ZvcihsZXQgdD1lLmZpcnN0Q2hpbGQsbj1udWxsO3Q7dD10Lm5leHRTaWJsaW5nKXtsZXQgcj10Lm5vZGVUeXBlPT0xP3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTpudWxsO3ImJnZSLmhhc093blByb3BlcnR5KHIpJiZuPyhuLmFwcGVuZENoaWxkKHQpLHQ9bik6cj09ImxpIj9uPXQ6ciYmKG49bnVsbCl9fWZ1bmN0aW9uIGs5KGUsdCl7cmV0dXJuKGUubWF0Y2hlc3x8ZS5tc01hdGNoZXNTZWxlY3Rvcnx8ZS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGUubW96TWF0Y2hlc1NlbGVjdG9yKS5jYWxsKGUsdCl9ZnVuY3Rpb24gRTkoZSl7bGV0IHQ9L1xzKihbXHctXSspXHMqOlxzKihbXjtdKykvZyxuLHI9W107Zm9yKDtuPXQuZXhlYyhlKTspci5wdXNoKG5bMV0sblsyXS50cmltKCkpO3JldHVybiByfWZ1bmN0aW9uIEhFKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBfOShlLHQpe2xldCBuPXQuc2NoZW1hLm5vZGVzO2ZvcihsZXQgciBpbiBuKXtsZXQgbz1uW3JdO2lmKCFvLmFsbG93c01hcmtUeXBlKGUpKWNvbnRpbnVlO2xldCBpPVtdLHM9YT0+e2kucHVzaChhKTtmb3IobGV0IGw9MDtsPGEuZWRnZUNvdW50O2wrKyl7bGV0e3R5cGU6YyxuZXh0OnV9PWEuZWRnZShsKTtpZihjPT10fHxpLmluZGV4T2YodSk8MCYmcyh1KSlyZXR1cm4hMH19O2lmKHMoby5jb250ZW50TWF0Y2gpKXJldHVybiEwfX1mdW5jdGlvbiBDOShlLHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKGUuZXEodFtuXSkpcmV0dXJuIHRbbl19Y2xhc3Mga297Y29uc3RydWN0b3IodCxuKXt0aGlzLm5vZGVzPXQsdGhpcy5tYXJrcz1ufXNlcmlhbGl6ZUZyYWdtZW50KHQsbj17fSxyKXtyfHwocj1reShuKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO2xldCBvPXIsaT1bXTtyZXR1cm4gdC5mb3JFYWNoKHM9PntpZihpLmxlbmd0aHx8cy5tYXJrcy5sZW5ndGgpe2xldCBhPTAsbD0wO2Zvcig7YTxpLmxlbmd0aCYmbDxzLm1hcmtzLmxlbmd0aDspe2xldCBjPXMubWFya3NbbF07aWYoIXRoaXMubWFya3NbYy50eXBlLm5hbWVdKXtsKys7Y29udGludWV9aWYoIWMuZXEoaVthXVswXSl8fGMudHlwZS5zcGVjLnNwYW5uaW5nPT09ITEpYnJlYWs7YSsrLGwrK31mb3IoO2E8aS5sZW5ndGg7KW89aS5wb3AoKVsxXTtmb3IoO2w8cy5tYXJrcy5sZW5ndGg7KXtsZXQgYz1zLm1hcmtzW2wrK10sdT10aGlzLnNlcmlhbGl6ZU1hcmsoYyxzLmlzSW5saW5lLG4pO3UmJihpLnB1c2goW2Msb10pLG8uYXBwZW5kQ2hpbGQodS5kb20pLG89dS5jb250ZW50RE9NfHx1LmRvbSl9fW8uYXBwZW5kQ2hpbGQodGhpcy5zZXJpYWxpemVOb2RlSW5uZXIocyxuKSl9KSxyfXNlcmlhbGl6ZU5vZGVJbm5lcih0LG4pe2xldHtkb206cixjb250ZW50RE9NOm99PWtvLnJlbmRlclNwZWMoa3kobiksdGhpcy5ub2Rlc1t0LnR5cGUubmFtZV0odCkpO2lmKG8pe2lmKHQuaXNMZWFmKXRocm93IG5ldyBSYW5nZUVycm9yKCJDb250ZW50IGhvbGUgbm90IGFsbG93ZWQgaW4gYSBsZWFmIG5vZGUgc3BlYyIpO3RoaXMuc2VyaWFsaXplRnJhZ21lbnQodC5jb250ZW50LG4sbyl9cmV0dXJuIHJ9c2VyaWFsaXplTm9kZSh0LG49e30pe2xldCByPXRoaXMuc2VyaWFsaXplTm9kZUlubmVyKHQsbik7Zm9yKGxldCBvPXQubWFya3MubGVuZ3RoLTE7bz49MDtvLS0pe2xldCBpPXRoaXMuc2VyaWFsaXplTWFyayh0Lm1hcmtzW29dLHQuaXNJbmxpbmUsbik7aSYmKChpLmNvbnRlbnRET018fGkuZG9tKS5hcHBlbmRDaGlsZChyKSxyPWkuZG9tKX1yZXR1cm4gcn1zZXJpYWxpemVNYXJrKHQsbixyPXt9KXtsZXQgbz10aGlzLm1hcmtzW3QudHlwZS5uYW1lXTtyZXR1cm4gbyYma28ucmVuZGVyU3BlYyhreShyKSxvKHQsbikpfXN0YXRpYyByZW5kZXJTcGVjKHQsbixyPW51bGwpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIilyZXR1cm57ZG9tOnQuY3JlYXRlVGV4dE5vZGUobil9O2lmKG4ubm9kZVR5cGUhPW51bGwpcmV0dXJue2RvbTpufTtpZihuLmRvbSYmbi5kb20ubm9kZVR5cGUhPW51bGwpcmV0dXJuIG47bGV0IG89blswXSxpPW8uaW5kZXhPZigiICIpO2k+MCYmKHI9by5zbGljZSgwLGkpLG89by5zbGljZShpKzEpKTtsZXQgcyxhPXI/dC5jcmVhdGVFbGVtZW50TlMocixvKTp0LmNyZWF0ZUVsZW1lbnQobyksbD1uWzFdLGM9MTtpZihsJiZ0eXBlb2YgbD09Im9iamVjdCImJmwubm9kZVR5cGU9PW51bGwmJiFBcnJheS5pc0FycmF5KGwpKXtjPTI7Zm9yKGxldCB1IGluIGwpaWYobFt1XSE9bnVsbCl7bGV0IGQ9dS5pbmRleE9mKCIgIik7ZD4wP2Euc2V0QXR0cmlidXRlTlModS5zbGljZSgwLGQpLHUuc2xpY2UoZCsxKSxsW3VdKTphLnNldEF0dHJpYnV0ZSh1LGxbdV0pfX1mb3IobGV0IHU9Yzt1PG4ubGVuZ3RoO3UrKyl7bGV0IGQ9blt1XTtpZihkPT09MCl7aWYodTxuLmxlbmd0aC0xfHx1PmMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNvbnRlbnQgaG9sZSBtdXN0IGJlIHRoZSBvbmx5IGNoaWxkIG9mIGl0cyBwYXJlbnQgbm9kZSIpO3JldHVybntkb206YSxjb250ZW50RE9NOmF9fWVsc2V7bGV0e2RvbTpmLGNvbnRlbnRET006cH09a28ucmVuZGVyU3BlYyh0LGQscik7aWYoYS5hcHBlbmRDaGlsZChmKSxwKXtpZihzKXRocm93IG5ldyBSYW5nZUVycm9yKCJNdWx0aXBsZSBjb250ZW50IGhvbGVzIik7cz1wfX19cmV0dXJue2RvbTphLGNvbnRlbnRET006c319c3RhdGljIGZyb21TY2hlbWEodCl7cmV0dXJuIHQuY2FjaGVkLmRvbVNlcmlhbGl6ZXJ8fCh0LmNhY2hlZC5kb21TZXJpYWxpemVyPW5ldyBrbyh0aGlzLm5vZGVzRnJvbVNjaGVtYSh0KSx0aGlzLm1hcmtzRnJvbVNjaGVtYSh0KSkpfXN0YXRpYyBub2Rlc0Zyb21TY2hlbWEodCl7bGV0IG49V0UodC5ub2Rlcyk7cmV0dXJuIG4udGV4dHx8KG4udGV4dD1yPT5yLnRleHQpLG59c3RhdGljIG1hcmtzRnJvbVNjaGVtYSh0KXtyZXR1cm4gV0UodC5tYXJrcyl9fWZ1bmN0aW9uIFdFKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKXtsZXQgcj1lW25dLnNwZWMudG9ET007ciYmKHRbbl09cil9cmV0dXJuIHR9ZnVuY3Rpb24ga3koZSl7cmV0dXJuIGUuZG9jdW1lbnR8fHdpbmRvdy5kb2N1bWVudH1jb25zdCB5Uj02NTUzNSx4Uj1NYXRoLnBvdygyLDE2KTtmdW5jdGlvbiBPOShlLHQpe3JldHVybiBlK3QqeFJ9ZnVuY3Rpb24gS0UoZSl7cmV0dXJuIGUmeVJ9ZnVuY3Rpb24gVDkoZSl7cmV0dXJuKGUtKGUmeVIpKS94Un1jb25zdCBiUj0xLHdSPTIsdmg9NCxTUj04O2NsYXNzIFJ4e2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnBvcz10LHRoaXMuZGVsSW5mbz1uLHRoaXMucmVjb3Zlcj1yfWdldCBkZWxldGVkKCl7cmV0dXJuKHRoaXMuZGVsSW5mbyZTUik+MH1nZXQgZGVsZXRlZEJlZm9yZSgpe3JldHVybih0aGlzLmRlbEluZm8mKGJSfHZoKSk+MH1nZXQgZGVsZXRlZEFmdGVyKCl7cmV0dXJuKHRoaXMuZGVsSW5mbyYod1J8dmgpKT4wfWdldCBkZWxldGVkQWNyb3NzKCl7cmV0dXJuKHRoaXMuZGVsSW5mbyZ2aCk+MH19Y2xhc3MgU3J7Y29uc3RydWN0b3IodCxuPSExKXtpZih0aGlzLnJhbmdlcz10LHRoaXMuaW52ZXJ0ZWQ9biwhdC5sZW5ndGgmJlNyLmVtcHR5KXJldHVybiBTci5lbXB0eX1yZWNvdmVyKHQpe2xldCBuPTAscj1LRSh0KTtpZighdGhpcy5pbnZlcnRlZClmb3IobGV0IG89MDtvPHI7bysrKW4rPXRoaXMucmFuZ2VzW28qMysyXS10aGlzLnJhbmdlc1tvKjMrMV07cmV0dXJuIHRoaXMucmFuZ2VzW3IqM10rbitUOSh0KX1tYXBSZXN1bHQodCxuPTEpe3JldHVybiB0aGlzLl9tYXAodCxuLCExKX1tYXAodCxuPTEpe3JldHVybiB0aGlzLl9tYXAodCxuLCEwKX1fbWFwKHQsbixyKXtsZXQgbz0wLGk9dGhpcy5pbnZlcnRlZD8yOjEscz10aGlzLmludmVydGVkPzE6Mjtmb3IobGV0IGE9MDthPHRoaXMucmFuZ2VzLmxlbmd0aDthKz0zKXtsZXQgbD10aGlzLnJhbmdlc1thXS0odGhpcy5pbnZlcnRlZD9vOjApO2lmKGw+dClicmVhaztsZXQgYz10aGlzLnJhbmdlc1thK2ldLHU9dGhpcy5yYW5nZXNbYStzXSxkPWwrYztpZih0PD1kKXtsZXQgZj1jP3Q9PWw/LTE6dD09ZD8xOm46bixwPWwrbysoZjwwPzA6dSk7aWYocilyZXR1cm4gcDtsZXQgbT10PT0objwwP2w6ZCk/bnVsbDpPOShhLzMsdC1sKSxnPXQ9PWw/d1I6dD09ZD9iUjp2aDtyZXR1cm4objwwP3QhPWw6dCE9ZCkmJihnfD1TUiksbmV3IFJ4KHAsZyxtKX1vKz11LWN9cmV0dXJuIHI/dCtvOm5ldyBSeCh0K28sMCxudWxsKX10b3VjaGVzKHQsbil7bGV0IHI9MCxvPUtFKG4pLGk9dGhpcy5pbnZlcnRlZD8yOjEscz10aGlzLmludmVydGVkPzE6Mjtmb3IobGV0IGE9MDthPHRoaXMucmFuZ2VzLmxlbmd0aDthKz0zKXtsZXQgbD10aGlzLnJhbmdlc1thXS0odGhpcy5pbnZlcnRlZD9yOjApO2lmKGw+dClicmVhaztsZXQgYz10aGlzLnJhbmdlc1thK2ldLHU9bCtjO2lmKHQ8PXUmJmE9PW8qMylyZXR1cm4hMDtyKz10aGlzLnJhbmdlc1thK3NdLWN9cmV0dXJuITF9Zm9yRWFjaCh0KXtsZXQgbj10aGlzLmludmVydGVkPzI6MSxyPXRoaXMuaW52ZXJ0ZWQ/MToyO2ZvcihsZXQgbz0wLGk9MDtvPHRoaXMucmFuZ2VzLmxlbmd0aDtvKz0zKXtsZXQgcz10aGlzLnJhbmdlc1tvXSxhPXMtKHRoaXMuaW52ZXJ0ZWQ/aTowKSxsPXMrKHRoaXMuaW52ZXJ0ZWQ/MDppKSxjPXRoaXMucmFuZ2VzW28rbl0sdT10aGlzLnJhbmdlc1tvK3JdO3QoYSxhK2MsbCxsK3UpLGkrPXUtY319aW52ZXJ0KCl7cmV0dXJuIG5ldyBTcih0aGlzLnJhbmdlcywhdGhpcy5pbnZlcnRlZCl9dG9TdHJpbmcoKXtyZXR1cm4odGhpcy5pbnZlcnRlZD8iLSI6IiIpK0pTT04uc3RyaW5naWZ5KHRoaXMucmFuZ2VzKX1zdGF0aWMgb2Zmc2V0KHQpe3JldHVybiB0PT0wP1NyLmVtcHR5Om5ldyBTcih0PDA/WzAsLXQsMF06WzAsMCx0XSl9fVNyLmVtcHR5PW5ldyBTcihbXSk7Y2xhc3MgX2N7Y29uc3RydWN0b3IodD1bXSxuLHI9MCxvPXQubGVuZ3RoKXt0aGlzLm1hcHM9dCx0aGlzLm1pcnJvcj1uLHRoaXMuZnJvbT1yLHRoaXMudG89b31zbGljZSh0PTAsbj10aGlzLm1hcHMubGVuZ3RoKXtyZXR1cm4gbmV3IF9jKHRoaXMubWFwcyx0aGlzLm1pcnJvcix0LG4pfWNvcHkoKXtyZXR1cm4gbmV3IF9jKHRoaXMubWFwcy5zbGljZSgpLHRoaXMubWlycm9yJiZ0aGlzLm1pcnJvci5zbGljZSgpLHRoaXMuZnJvbSx0aGlzLnRvKX1hcHBlbmRNYXAodCxuKXt0aGlzLnRvPXRoaXMubWFwcy5wdXNoKHQpLG4hPW51bGwmJnRoaXMuc2V0TWlycm9yKHRoaXMubWFwcy5sZW5ndGgtMSxuKX1hcHBlbmRNYXBwaW5nKHQpe2ZvcihsZXQgbj0wLHI9dGhpcy5tYXBzLmxlbmd0aDtuPHQubWFwcy5sZW5ndGg7bisrKXtsZXQgbz10LmdldE1pcnJvcihuKTt0aGlzLmFwcGVuZE1hcCh0Lm1hcHNbbl0sbyE9bnVsbCYmbzxuP3Irbzp2b2lkIDApfX1nZXRNaXJyb3IodCl7aWYodGhpcy5taXJyb3Ipe2ZvcihsZXQgbj0wO248dGhpcy5taXJyb3IubGVuZ3RoO24rKylpZih0aGlzLm1pcnJvcltuXT09dClyZXR1cm4gdGhpcy5taXJyb3JbbisobiUyPy0xOjEpXX19c2V0TWlycm9yKHQsbil7dGhpcy5taXJyb3J8fCh0aGlzLm1pcnJvcj1bXSksdGhpcy5taXJyb3IucHVzaCh0LG4pfWFwcGVuZE1hcHBpbmdJbnZlcnRlZCh0KXtmb3IobGV0IG49dC5tYXBzLmxlbmd0aC0xLHI9dGhpcy5tYXBzLmxlbmd0aCt0Lm1hcHMubGVuZ3RoO24+PTA7bi0tKXtsZXQgbz10LmdldE1pcnJvcihuKTt0aGlzLmFwcGVuZE1hcCh0Lm1hcHNbbl0uaW52ZXJ0KCksbyE9bnVsbCYmbz5uP3Itby0xOnZvaWQgMCl9fWludmVydCgpe2xldCB0PW5ldyBfYztyZXR1cm4gdC5hcHBlbmRNYXBwaW5nSW52ZXJ0ZWQodGhpcyksdH1tYXAodCxuPTEpe2lmKHRoaXMubWlycm9yKXJldHVybiB0aGlzLl9tYXAodCxuLCEwKTtmb3IobGV0IHI9dGhpcy5mcm9tO3I8dGhpcy50bztyKyspdD10aGlzLm1hcHNbcl0ubWFwKHQsbik7cmV0dXJuIHR9bWFwUmVzdWx0KHQsbj0xKXtyZXR1cm4gdGhpcy5fbWFwKHQsbiwhMSl9X21hcCh0LG4scil7bGV0IG89MDtmb3IobGV0IGk9dGhpcy5mcm9tO2k8dGhpcy50bztpKyspe2xldCBzPXRoaXMubWFwc1tpXSxhPXMubWFwUmVzdWx0KHQsbik7aWYoYS5yZWNvdmVyIT1udWxsKXtsZXQgbD10aGlzLmdldE1pcnJvcihpKTtpZihsIT1udWxsJiZsPmkmJmw8dGhpcy50byl7aT1sLHQ9dGhpcy5tYXBzW2xdLnJlY292ZXIoYS5yZWNvdmVyKTtjb250aW51ZX19b3w9YS5kZWxJbmZvLHQ9YS5wb3N9cmV0dXJuIHI/dDpuZXcgUngodCxvLG51bGwpfX1jb25zdCBFeT1PYmplY3QuY3JlYXRlKG51bGwpO2NsYXNzIHRue2dldE1hcCgpe3JldHVybiBTci5lbXB0eX1tZXJnZSh0KXtyZXR1cm4gbnVsbH1zdGF0aWMgZnJvbUpTT04odCxuKXtpZighbnx8IW4uc3RlcFR5cGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgaW5wdXQgZm9yIFN0ZXAuZnJvbUpTT04iKTtsZXQgcj1FeVtuLnN0ZXBUeXBlXTtpZighcil0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTm8gc3RlcCB0eXBlICR7bi5zdGVwVHlwZX0gZGVmaW5lZGApO3JldHVybiByLmZyb21KU09OKHQsbil9c3RhdGljIGpzb25JRCh0LG4pe2lmKHQgaW4gRXkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkR1cGxpY2F0ZSB1c2Ugb2Ygc3RlcCBKU09OIElEICIrdCk7cmV0dXJuIEV5W3RdPW4sbi5wcm90b3R5cGUuanNvbklEPXQsbn19Y2xhc3MgQnR7Y29uc3RydWN0b3IodCxuKXt0aGlzLmRvYz10LHRoaXMuZmFpbGVkPW59c3RhdGljIG9rKHQpe3JldHVybiBuZXcgQnQodCxudWxsKX1zdGF0aWMgZmFpbCh0KXtyZXR1cm4gbmV3IEJ0KG51bGwsdCl9c3RhdGljIGZyb21SZXBsYWNlKHQsbixyLG8pe3RyeXtyZXR1cm4gQnQub2sodC5yZXBsYWNlKG4scixvKSl9Y2F0Y2goaSl7aWYoaSBpbnN0YW5jZW9mIENtKXJldHVybiBCdC5mYWlsKGkubWVzc2FnZSk7dGhyb3cgaX19fWZ1bmN0aW9uIEcxKGUsdCxuKXtsZXQgcj1bXTtmb3IobGV0IG89MDtvPGUuY2hpbGRDb3VudDtvKyspe2xldCBpPWUuY2hpbGQobyk7aS5jb250ZW50LnNpemUmJihpPWkuY29weShHMShpLmNvbnRlbnQsdCxpKSkpLGkuaXNJbmxpbmUmJihpPXQoaSxuLG8pKSxyLnB1c2goaSl9cmV0dXJuIFUuZnJvbUFycmF5KHIpfWNsYXNzIEVpIGV4dGVuZHMgdG57Y29uc3RydWN0b3IodCxuLHIpe3N1cGVyKCksdGhpcy5mcm9tPXQsdGhpcy50bz1uLHRoaXMubWFyaz1yfWFwcGx5KHQpe2xldCBuPXQuc2xpY2UodGhpcy5mcm9tLHRoaXMudG8pLHI9dC5yZXNvbHZlKHRoaXMuZnJvbSksbz1yLm5vZGUoci5zaGFyZWREZXB0aCh0aGlzLnRvKSksaT1uZXcgSihHMShuLmNvbnRlbnQsKHMsYSk9PiFzLmlzQXRvbXx8IWEudHlwZS5hbGxvd3NNYXJrVHlwZSh0aGlzLm1hcmsudHlwZSk/czpzLm1hcmsodGhpcy5tYXJrLmFkZFRvU2V0KHMubWFya3MpKSxvKSxuLm9wZW5TdGFydCxuLm9wZW5FbmQpO3JldHVybiBCdC5mcm9tUmVwbGFjZSh0LHRoaXMuZnJvbSx0aGlzLnRvLGkpfWludmVydCgpe3JldHVybiBuZXcgRW8odGhpcy5mcm9tLHRoaXMudG8sdGhpcy5tYXJrKX1tYXAodCl7bGV0IG49dC5tYXBSZXN1bHQodGhpcy5mcm9tLDEpLHI9dC5tYXBSZXN1bHQodGhpcy50bywtMSk7cmV0dXJuIG4uZGVsZXRlZCYmci5kZWxldGVkfHxuLnBvcz49ci5wb3M/bnVsbDpuZXcgRWkobi5wb3Msci5wb3MsdGhpcy5tYXJrKX1tZXJnZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVpJiZ0Lm1hcmsuZXEodGhpcy5tYXJrKSYmdGhpcy5mcm9tPD10LnRvJiZ0aGlzLnRvPj10LmZyb20/bmV3IEVpKE1hdGgubWluKHRoaXMuZnJvbSx0LmZyb20pLE1hdGgubWF4KHRoaXMudG8sdC50byksdGhpcy5tYXJrKTpudWxsfXRvSlNPTigpe3JldHVybntzdGVwVHlwZToiYWRkTWFyayIsbWFyazp0aGlzLm1hcmsudG9KU09OKCksZnJvbTp0aGlzLmZyb20sdG86dGhpcy50b319c3RhdGljIGZyb21KU09OKHQsbil7aWYodHlwZW9mIG4uZnJvbSE9Im51bWJlciJ8fHR5cGVvZiBuLnRvIT0ibnVtYmVyIil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBpbnB1dCBmb3IgQWRkTWFya1N0ZXAuZnJvbUpTT04iKTtyZXR1cm4gbmV3IEVpKG4uZnJvbSxuLnRvLHQubWFya0Zyb21KU09OKG4ubWFyaykpfX10bi5qc29uSUQoImFkZE1hcmsiLEVpKTtjbGFzcyBFbyBleHRlbmRzIHRue2NvbnN0cnVjdG9yKHQsbixyKXtzdXBlcigpLHRoaXMuZnJvbT10LHRoaXMudG89bix0aGlzLm1hcms9cn1hcHBseSh0KXtsZXQgbj10LnNsaWNlKHRoaXMuZnJvbSx0aGlzLnRvKSxyPW5ldyBKKEcxKG4uY29udGVudCxvPT5vLm1hcmsodGhpcy5tYXJrLnJlbW92ZUZyb21TZXQoby5tYXJrcykpLHQpLG4ub3BlblN0YXJ0LG4ub3BlbkVuZCk7cmV0dXJuIEJ0LmZyb21SZXBsYWNlKHQsdGhpcy5mcm9tLHRoaXMudG8scil9aW52ZXJ0KCl7cmV0dXJuIG5ldyBFaSh0aGlzLmZyb20sdGhpcy50byx0aGlzLm1hcmspfW1hcCh0KXtsZXQgbj10Lm1hcFJlc3VsdCh0aGlzLmZyb20sMSkscj10Lm1hcFJlc3VsdCh0aGlzLnRvLC0xKTtyZXR1cm4gbi5kZWxldGVkJiZyLmRlbGV0ZWR8fG4ucG9zPj1yLnBvcz9udWxsOm5ldyBFbyhuLnBvcyxyLnBvcyx0aGlzLm1hcmspfW1lcmdlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRW8mJnQubWFyay5lcSh0aGlzLm1hcmspJiZ0aGlzLmZyb208PXQudG8mJnRoaXMudG8+PXQuZnJvbT9uZXcgRW8oTWF0aC5taW4odGhpcy5mcm9tLHQuZnJvbSksTWF0aC5tYXgodGhpcy50byx0LnRvKSx0aGlzLm1hcmspOm51bGx9dG9KU09OKCl7cmV0dXJue3N0ZXBUeXBlOiJyZW1vdmVNYXJrIixtYXJrOnRoaXMubWFyay50b0pTT04oKSxmcm9tOnRoaXMuZnJvbSx0bzp0aGlzLnRvfX1zdGF0aWMgZnJvbUpTT04odCxuKXtpZih0eXBlb2Ygbi5mcm9tIT0ibnVtYmVyInx8dHlwZW9mIG4udG8hPSJudW1iZXIiKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIGlucHV0IGZvciBSZW1vdmVNYXJrU3RlcC5mcm9tSlNPTiIpO3JldHVybiBuZXcgRW8obi5mcm9tLG4udG8sdC5tYXJrRnJvbUpTT04obi5tYXJrKSl9fXRuLmpzb25JRCgicmVtb3ZlTWFyayIsRW8pO2NsYXNzIFBzIGV4dGVuZHMgdG57Y29uc3RydWN0b3IodCxuKXtzdXBlcigpLHRoaXMucG9zPXQsdGhpcy5tYXJrPW59YXBwbHkodCl7bGV0IG49dC5ub2RlQXQodGhpcy5wb3MpO2lmKCFuKXJldHVybiBCdC5mYWlsKCJObyBub2RlIGF0IG1hcmsgc3RlcCdzIHBvc2l0aW9uIik7bGV0IHI9bi50eXBlLmNyZWF0ZShuLmF0dHJzLG51bGwsdGhpcy5tYXJrLmFkZFRvU2V0KG4ubWFya3MpKTtyZXR1cm4gQnQuZnJvbVJlcGxhY2UodCx0aGlzLnBvcyx0aGlzLnBvcysxLG5ldyBKKFUuZnJvbShyKSwwLG4uaXNMZWFmPzA6MSkpfWludmVydCh0KXtsZXQgbj10Lm5vZGVBdCh0aGlzLnBvcyk7aWYobil7bGV0IHI9dGhpcy5tYXJrLmFkZFRvU2V0KG4ubWFya3MpO2lmKHIubGVuZ3RoPT1uLm1hcmtzLmxlbmd0aCl7Zm9yKGxldCBvPTA7bzxuLm1hcmtzLmxlbmd0aDtvKyspaWYoIW4ubWFya3Nbb10uaXNJblNldChyKSlyZXR1cm4gbmV3IFBzKHRoaXMucG9zLG4ubWFya3Nbb10pO3JldHVybiBuZXcgUHModGhpcy5wb3MsdGhpcy5tYXJrKX19cmV0dXJuIG5ldyBLYyh0aGlzLnBvcyx0aGlzLm1hcmspfW1hcCh0KXtsZXQgbj10Lm1hcFJlc3VsdCh0aGlzLnBvcywxKTtyZXR1cm4gbi5kZWxldGVkQWZ0ZXI/bnVsbDpuZXcgUHMobi5wb3MsdGhpcy5tYXJrKX10b0pTT04oKXtyZXR1cm57c3RlcFR5cGU6ImFkZE5vZGVNYXJrIixwb3M6dGhpcy5wb3MsbWFyazp0aGlzLm1hcmsudG9KU09OKCl9fXN0YXRpYyBmcm9tSlNPTih0LG4pe2lmKHR5cGVvZiBuLnBvcyE9Im51bWJlciIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgaW5wdXQgZm9yIEFkZE5vZGVNYXJrU3RlcC5mcm9tSlNPTiIpO3JldHVybiBuZXcgUHMobi5wb3MsdC5tYXJrRnJvbUpTT04obi5tYXJrKSl9fXRuLmpzb25JRCgiYWRkTm9kZU1hcmsiLFBzKTtjbGFzcyBLYyBleHRlbmRzIHRue2NvbnN0cnVjdG9yKHQsbil7c3VwZXIoKSx0aGlzLnBvcz10LHRoaXMubWFyaz1ufWFwcGx5KHQpe2xldCBuPXQubm9kZUF0KHRoaXMucG9zKTtpZighbilyZXR1cm4gQnQuZmFpbCgiTm8gbm9kZSBhdCBtYXJrIHN0ZXAncyBwb3NpdGlvbiIpO2xldCByPW4udHlwZS5jcmVhdGUobi5hdHRycyxudWxsLHRoaXMubWFyay5yZW1vdmVGcm9tU2V0KG4ubWFya3MpKTtyZXR1cm4gQnQuZnJvbVJlcGxhY2UodCx0aGlzLnBvcyx0aGlzLnBvcysxLG5ldyBKKFUuZnJvbShyKSwwLG4uaXNMZWFmPzA6MSkpfWludmVydCh0KXtsZXQgbj10Lm5vZGVBdCh0aGlzLnBvcyk7cmV0dXJuIW58fCF0aGlzLm1hcmsuaXNJblNldChuLm1hcmtzKT90aGlzOm5ldyBQcyh0aGlzLnBvcyx0aGlzLm1hcmspfW1hcCh0KXtsZXQgbj10Lm1hcFJlc3VsdCh0aGlzLnBvcywxKTtyZXR1cm4gbi5kZWxldGVkQWZ0ZXI/bnVsbDpuZXcgS2Mobi5wb3MsdGhpcy5tYXJrKX10b0pTT04oKXtyZXR1cm57c3RlcFR5cGU6InJlbW92ZU5vZGVNYXJrIixwb3M6dGhpcy5wb3MsbWFyazp0aGlzLm1hcmsudG9KU09OKCl9fXN0YXRpYyBmcm9tSlNPTih0LG4pe2lmKHR5cGVvZiBuLnBvcyE9Im51bWJlciIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgaW5wdXQgZm9yIFJlbW92ZU5vZGVNYXJrU3RlcC5mcm9tSlNPTiIpO3JldHVybiBuZXcgS2Mobi5wb3MsdC5tYXJrRnJvbUpTT04obi5tYXJrKSl9fXRuLmpzb25JRCgicmVtb3ZlTm9kZU1hcmsiLEtjKTtjbGFzcyBmbiBleHRlbmRzIHRue2NvbnN0cnVjdG9yKHQsbixyLG89ITEpe3N1cGVyKCksdGhpcy5mcm9tPXQsdGhpcy50bz1uLHRoaXMuc2xpY2U9cix0aGlzLnN0cnVjdHVyZT1vfWFwcGx5KHQpe3JldHVybiB0aGlzLnN0cnVjdHVyZSYmTngodCx0aGlzLmZyb20sdGhpcy50byk/QnQuZmFpbCgiU3RydWN0dXJlIHJlcGxhY2Ugd291bGQgb3ZlcndyaXRlIGNvbnRlbnQiKTpCdC5mcm9tUmVwbGFjZSh0LHRoaXMuZnJvbSx0aGlzLnRvLHRoaXMuc2xpY2UpfWdldE1hcCgpe3JldHVybiBuZXcgU3IoW3RoaXMuZnJvbSx0aGlzLnRvLXRoaXMuZnJvbSx0aGlzLnNsaWNlLnNpemVdKX1pbnZlcnQodCl7cmV0dXJuIG5ldyBmbih0aGlzLmZyb20sdGhpcy5mcm9tK3RoaXMuc2xpY2Uuc2l6ZSx0LnNsaWNlKHRoaXMuZnJvbSx0aGlzLnRvKSl9bWFwKHQpe2xldCBuPXQubWFwUmVzdWx0KHRoaXMuZnJvbSwxKSxyPXQubWFwUmVzdWx0KHRoaXMudG8sLTEpO3JldHVybiBuLmRlbGV0ZWRBY3Jvc3MmJnIuZGVsZXRlZEFjcm9zcz9udWxsOm5ldyBmbihuLnBvcyxNYXRoLm1heChuLnBvcyxyLnBvcyksdGhpcy5zbGljZSl9bWVyZ2UodCl7aWYoISh0IGluc3RhbmNlb2YgZm4pfHx0LnN0cnVjdHVyZXx8dGhpcy5zdHJ1Y3R1cmUpcmV0dXJuIG51bGw7aWYodGhpcy5mcm9tK3RoaXMuc2xpY2Uuc2l6ZT09dC5mcm9tJiYhdGhpcy5zbGljZS5vcGVuRW5kJiYhdC5zbGljZS5vcGVuU3RhcnQpe2xldCBuPXRoaXMuc2xpY2Uuc2l6ZSt0LnNsaWNlLnNpemU9PTA/Si5lbXB0eTpuZXcgSih0aGlzLnNsaWNlLmNvbnRlbnQuYXBwZW5kKHQuc2xpY2UuY29udGVudCksdGhpcy5zbGljZS5vcGVuU3RhcnQsdC5zbGljZS5vcGVuRW5kKTtyZXR1cm4gbmV3IGZuKHRoaXMuZnJvbSx0aGlzLnRvKyh0LnRvLXQuZnJvbSksbix0aGlzLnN0cnVjdHVyZSl9ZWxzZSBpZih0LnRvPT10aGlzLmZyb20mJiF0aGlzLnNsaWNlLm9wZW5TdGFydCYmIXQuc2xpY2Uub3BlbkVuZCl7bGV0IG49dGhpcy5zbGljZS5zaXplK3Quc2xpY2Uuc2l6ZT09MD9KLmVtcHR5Om5ldyBKKHQuc2xpY2UuY29udGVudC5hcHBlbmQodGhpcy5zbGljZS5jb250ZW50KSx0LnNsaWNlLm9wZW5TdGFydCx0aGlzLnNsaWNlLm9wZW5FbmQpO3JldHVybiBuZXcgZm4odC5mcm9tLHRoaXMudG8sbix0aGlzLnN0cnVjdHVyZSl9ZWxzZSByZXR1cm4gbnVsbH10b0pTT04oKXtsZXQgdD17c3RlcFR5cGU6InJlcGxhY2UiLGZyb206dGhpcy5mcm9tLHRvOnRoaXMudG99O3JldHVybiB0aGlzLnNsaWNlLnNpemUmJih0LnNsaWNlPXRoaXMuc2xpY2UudG9KU09OKCkpLHRoaXMuc3RydWN0dXJlJiYodC5zdHJ1Y3R1cmU9ITApLHR9c3RhdGljIGZyb21KU09OKHQsbil7aWYodHlwZW9mIG4uZnJvbSE9Im51bWJlciJ8fHR5cGVvZiBuLnRvIT0ibnVtYmVyIil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBpbnB1dCBmb3IgUmVwbGFjZVN0ZXAuZnJvbUpTT04iKTtyZXR1cm4gbmV3IGZuKG4uZnJvbSxuLnRvLEouZnJvbUpTT04odCxuLnNsaWNlKSwhIW4uc3RydWN0dXJlKX19dG4uanNvbklEKCJyZXBsYWNlIixmbik7Y2xhc3MgVXQgZXh0ZW5kcyB0bntjb25zdHJ1Y3Rvcih0LG4scixvLGkscyxhPSExKXtzdXBlcigpLHRoaXMuZnJvbT10LHRoaXMudG89bix0aGlzLmdhcEZyb209cix0aGlzLmdhcFRvPW8sdGhpcy5zbGljZT1pLHRoaXMuaW5zZXJ0PXMsdGhpcy5zdHJ1Y3R1cmU9YX1hcHBseSh0KXtpZih0aGlzLnN0cnVjdHVyZSYmKE54KHQsdGhpcy5mcm9tLHRoaXMuZ2FwRnJvbSl8fE54KHQsdGhpcy5nYXBUbyx0aGlzLnRvKSkpcmV0dXJuIEJ0LmZhaWwoIlN0cnVjdHVyZSBnYXAtcmVwbGFjZSB3b3VsZCBvdmVyd3JpdGUgY29udGVudCIpO2xldCBuPXQuc2xpY2UodGhpcy5nYXBGcm9tLHRoaXMuZ2FwVG8pO2lmKG4ub3BlblN0YXJ0fHxuLm9wZW5FbmQpcmV0dXJuIEJ0LmZhaWwoIkdhcCBpcyBub3QgYSBmbGF0IHJhbmdlIik7bGV0IHI9dGhpcy5zbGljZS5pbnNlcnRBdCh0aGlzLmluc2VydCxuLmNvbnRlbnQpO3JldHVybiByP0J0LmZyb21SZXBsYWNlKHQsdGhpcy5mcm9tLHRoaXMudG8scik6QnQuZmFpbCgiQ29udGVudCBkb2VzIG5vdCBmaXQgaW4gZ2FwIil9Z2V0TWFwKCl7cmV0dXJuIG5ldyBTcihbdGhpcy5mcm9tLHRoaXMuZ2FwRnJvbS10aGlzLmZyb20sdGhpcy5pbnNlcnQsdGhpcy5nYXBUbyx0aGlzLnRvLXRoaXMuZ2FwVG8sdGhpcy5zbGljZS5zaXplLXRoaXMuaW5zZXJ0XSl9aW52ZXJ0KHQpe2xldCBuPXRoaXMuZ2FwVG8tdGhpcy5nYXBGcm9tO3JldHVybiBuZXcgVXQodGhpcy5mcm9tLHRoaXMuZnJvbSt0aGlzLnNsaWNlLnNpemUrbix0aGlzLmZyb20rdGhpcy5pbnNlcnQsdGhpcy5mcm9tK3RoaXMuaW5zZXJ0K24sdC5zbGljZSh0aGlzLmZyb20sdGhpcy50bykucmVtb3ZlQmV0d2Vlbih0aGlzLmdhcEZyb20tdGhpcy5mcm9tLHRoaXMuZ2FwVG8tdGhpcy5mcm9tKSx0aGlzLmdhcEZyb20tdGhpcy5mcm9tLHRoaXMuc3RydWN0dXJlKX1tYXAodCl7bGV0IG49dC5tYXBSZXN1bHQodGhpcy5mcm9tLDEpLHI9dC5tYXBSZXN1bHQodGhpcy50bywtMSksbz10Lm1hcCh0aGlzLmdhcEZyb20sLTEpLGk9dC5tYXAodGhpcy5nYXBUbywxKTtyZXR1cm4gbi5kZWxldGVkQWNyb3NzJiZyLmRlbGV0ZWRBY3Jvc3N8fG88bi5wb3N8fGk+ci5wb3M/bnVsbDpuZXcgVXQobi5wb3Msci5wb3MsbyxpLHRoaXMuc2xpY2UsdGhpcy5pbnNlcnQsdGhpcy5zdHJ1Y3R1cmUpfXRvSlNPTigpe2xldCB0PXtzdGVwVHlwZToicmVwbGFjZUFyb3VuZCIsZnJvbTp0aGlzLmZyb20sdG86dGhpcy50byxnYXBGcm9tOnRoaXMuZ2FwRnJvbSxnYXBUbzp0aGlzLmdhcFRvLGluc2VydDp0aGlzLmluc2VydH07cmV0dXJuIHRoaXMuc2xpY2Uuc2l6ZSYmKHQuc2xpY2U9dGhpcy5zbGljZS50b0pTT04oKSksdGhpcy5zdHJ1Y3R1cmUmJih0LnN0cnVjdHVyZT0hMCksdH1zdGF0aWMgZnJvbUpTT04odCxuKXtpZih0eXBlb2Ygbi5mcm9tIT0ibnVtYmVyInx8dHlwZW9mIG4udG8hPSJudW1iZXIifHx0eXBlb2Ygbi5nYXBGcm9tIT0ibnVtYmVyInx8dHlwZW9mIG4uZ2FwVG8hPSJudW1iZXIifHx0eXBlb2Ygbi5pbnNlcnQhPSJudW1iZXIiKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIGlucHV0IGZvciBSZXBsYWNlQXJvdW5kU3RlcC5mcm9tSlNPTiIpO3JldHVybiBuZXcgVXQobi5mcm9tLG4udG8sbi5nYXBGcm9tLG4uZ2FwVG8sSi5mcm9tSlNPTih0LG4uc2xpY2UpLG4uaW5zZXJ0LCEhbi5zdHJ1Y3R1cmUpfX10bi5qc29uSUQoInJlcGxhY2VBcm91bmQiLFV0KTtmdW5jdGlvbiBOeChlLHQsbil7bGV0IHI9ZS5yZXNvbHZlKHQpLG89bi10LGk9ci5kZXB0aDtmb3IoO28+MCYmaT4wJiZyLmluZGV4QWZ0ZXIoaSk9PXIubm9kZShpKS5jaGlsZENvdW50OylpLS0sby0tO2lmKG8+MCl7bGV0IHM9ci5ub2RlKGkpLm1heWJlQ2hpbGQoci5pbmRleEFmdGVyKGkpKTtmb3IoO28+MDspe2lmKCFzfHxzLmlzTGVhZilyZXR1cm4hMDtzPXMuZmlyc3RDaGlsZCxvLS19fXJldHVybiExfWZ1bmN0aW9uIFA5KGUsdCxuLHIpe2xldCBvPVtdLGk9W10scyxhO2UuZG9jLm5vZGVzQmV0d2Vlbih0LG4sKGwsYyx1KT0+e2lmKCFsLmlzSW5saW5lKXJldHVybjtsZXQgZD1sLm1hcmtzO2lmKCFyLmlzSW5TZXQoZCkmJnUudHlwZS5hbGxvd3NNYXJrVHlwZShyLnR5cGUpKXtsZXQgZj1NYXRoLm1heChjLHQpLHA9TWF0aC5taW4oYytsLm5vZGVTaXplLG4pLG09ci5hZGRUb1NldChkKTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKylkW2ddLmlzSW5TZXQobSl8fChzJiZzLnRvPT1mJiZzLm1hcmsuZXEoZFtnXSk/cy50bz1wOm8ucHVzaChzPW5ldyBFbyhmLHAsZFtnXSkpKTthJiZhLnRvPT1mP2EudG89cDppLnB1c2goYT1uZXcgRWkoZixwLHIpKX19KSxvLmZvckVhY2gobD0+ZS5zdGVwKGwpKSxpLmZvckVhY2gobD0+ZS5zdGVwKGwpKX1mdW5jdGlvbiBNOShlLHQsbixyKXtsZXQgbz1bXSxpPTA7ZS5kb2Mubm9kZXNCZXR3ZWVuKHQsbiwocyxhKT0+e2lmKCFzLmlzSW5saW5lKXJldHVybjtpKys7bGV0IGw9bnVsbDtpZihyIGluc3RhbmNlb2YgaXApe2xldCBjPXMubWFya3MsdTtmb3IoO3U9ci5pc0luU2V0KGMpOykobHx8KGw9W10pKS5wdXNoKHUpLGM9dS5yZW1vdmVGcm9tU2V0KGMpfWVsc2Ugcj9yLmlzSW5TZXQocy5tYXJrcykmJihsPVtyXSk6bD1zLm1hcmtzO2lmKGwmJmwubGVuZ3RoKXtsZXQgYz1NYXRoLm1pbihhK3Mubm9kZVNpemUsbik7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBkPWxbdV0sZjtmb3IobGV0IHA9MDtwPG8ubGVuZ3RoO3ArKyl7bGV0IG09b1twXTttLnN0ZXA9PWktMSYmZC5lcShvW3BdLnN0eWxlKSYmKGY9bSl9Zj8oZi50bz1jLGYuc3RlcD1pKTpvLnB1c2goe3N0eWxlOmQsZnJvbTpNYXRoLm1heChhLHQpLHRvOmMsc3RlcDppfSl9fX0pLG8uZm9yRWFjaChzPT5lLnN0ZXAobmV3IEVvKHMuZnJvbSxzLnRvLHMuc3R5bGUpKSl9ZnVuY3Rpb24gUjkoZSx0LG4scj1uLmNvbnRlbnRNYXRjaCl7bGV0IG89ZS5kb2Mubm9kZUF0KHQpLGk9W10scz10KzE7Zm9yKGxldCBhPTA7YTxvLmNoaWxkQ291bnQ7YSsrKXtsZXQgbD1vLmNoaWxkKGEpLGM9cytsLm5vZGVTaXplLHU9ci5tYXRjaFR5cGUobC50eXBlKTtpZighdSlpLnB1c2gobmV3IGZuKHMsYyxKLmVtcHR5KSk7ZWxzZXtyPXU7Zm9yKGxldCBkPTA7ZDxsLm1hcmtzLmxlbmd0aDtkKyspbi5hbGxvd3NNYXJrVHlwZShsLm1hcmtzW2RdLnR5cGUpfHxlLnN0ZXAobmV3IEVvKHMsYyxsLm1hcmtzW2RdKSk7aWYobC5pc1RleHQmJiFuLnNwZWMuY29kZSl7bGV0IGQsZj0vXHI/XG58XHIvZyxwO2Zvcig7ZD1mLmV4ZWMobC50ZXh0KTspcHx8KHA9bmV3IEooVS5mcm9tKG4uc2NoZW1hLnRleHQoIiAiLG4uYWxsb3dlZE1hcmtzKGwubWFya3MpKSksMCwwKSksaS5wdXNoKG5ldyBmbihzK2QuaW5kZXgscytkLmluZGV4K2RbMF0ubGVuZ3RoLHApKX19cz1jfWlmKCFyLnZhbGlkRW5kKXtsZXQgYT1yLmZpbGxCZWZvcmUoVS5lbXB0eSwhMCk7ZS5yZXBsYWNlKHMscyxuZXcgSihhLDAsMCkpfWZvcihsZXQgYT1pLmxlbmd0aC0xO2E+PTA7YS0tKWUuc3RlcChpW2FdKX1mdW5jdGlvbiBOOShlLHQsbil7cmV0dXJuKHQ9PTB8fGUuY2FuUmVwbGFjZSh0LGUuY2hpbGRDb3VudCkpJiYobj09ZS5jaGlsZENvdW50fHxlLmNhblJlcGxhY2UoMCxuKSl9ZnVuY3Rpb24gbHUoZSl7bGV0IG49ZS5wYXJlbnQuY29udGVudC5jdXRCeUluZGV4KGUuc3RhcnRJbmRleCxlLmVuZEluZGV4KTtmb3IobGV0IHI9ZS5kZXB0aDs7LS1yKXtsZXQgbz1lLiRmcm9tLm5vZGUociksaT1lLiRmcm9tLmluZGV4KHIpLHM9ZS4kdG8uaW5kZXhBZnRlcihyKTtpZihyPGUuZGVwdGgmJm8uY2FuUmVwbGFjZShpLHMsbikpcmV0dXJuIHI7aWYocj09MHx8by50eXBlLnNwZWMuaXNvbGF0aW5nfHwhTjkobyxpLHMpKWJyZWFrfXJldHVybiBudWxsfWZ1bmN0aW9uICQ5KGUsdCxuKXtsZXR7JGZyb206ciwkdG86byxkZXB0aDppfT10LHM9ci5iZWZvcmUoaSsxKSxhPW8uYWZ0ZXIoaSsxKSxsPXMsYz1hLHU9VS5lbXB0eSxkPTA7Zm9yKGxldCBtPWksZz0hMTttPm47bS0tKWd8fHIuaW5kZXgobSk+MD8oZz0hMCx1PVUuZnJvbShyLm5vZGUobSkuY29weSh1KSksZCsrKTpsLS07bGV0IGY9VS5lbXB0eSxwPTA7Zm9yKGxldCBtPWksZz0hMTttPm47bS0tKWd8fG8uYWZ0ZXIobSsxKTxvLmVuZChtKT8oZz0hMCxmPVUuZnJvbShvLm5vZGUobSkuY29weShmKSkscCsrKTpjKys7ZS5zdGVwKG5ldyBVdChsLGMscyxhLG5ldyBKKHUuYXBwZW5kKGYpLGQscCksdS5zaXplLWQsITApKX1mdW5jdGlvbiBZMShlLHQsbj1udWxsLHI9ZSl7bGV0IG89QTkoZSx0KSxpPW8mJkQ5KHIsdCk7cmV0dXJuIGk/by5tYXAocUUpLmNvbmNhdCh7dHlwZTp0LGF0dHJzOm59KS5jb25jYXQoaS5tYXAocUUpKTpudWxsfWZ1bmN0aW9uIHFFKGUpe3JldHVybnt0eXBlOmUsYXR0cnM6bnVsbH19ZnVuY3Rpb24gQTkoZSx0KXtsZXR7cGFyZW50Om4sc3RhcnRJbmRleDpyLGVuZEluZGV4Om99PWUsaT1uLmNvbnRlbnRNYXRjaEF0KHIpLmZpbmRXcmFwcGluZyh0KTtpZighaSlyZXR1cm4gbnVsbDtsZXQgcz1pLmxlbmd0aD9pWzBdOnQ7cmV0dXJuIG4uY2FuUmVwbGFjZVdpdGgocixvLHMpP2k6bnVsbH1mdW5jdGlvbiBEOShlLHQpe2xldHtwYXJlbnQ6bixzdGFydEluZGV4OnIsZW5kSW5kZXg6b309ZSxpPW4uY2hpbGQocikscz10LmNvbnRlbnRNYXRjaC5maW5kV3JhcHBpbmcoaS50eXBlKTtpZighcylyZXR1cm4gbnVsbDtsZXQgbD0ocy5sZW5ndGg/c1tzLmxlbmd0aC0xXTp0KS5jb250ZW50TWF0Y2g7Zm9yKGxldCBjPXI7bCYmYzxvO2MrKylsPWwubWF0Y2hUeXBlKG4uY2hpbGQoYykudHlwZSk7cmV0dXJuIWx8fCFsLnZhbGlkRW5kP251bGw6c31mdW5jdGlvbiBJOShlLHQsbil7bGV0IHI9VS5lbXB0eTtmb3IobGV0IHM9bi5sZW5ndGgtMTtzPj0wO3MtLSl7aWYoci5zaXplKXtsZXQgYT1uW3NdLnR5cGUuY29udGVudE1hdGNoLm1hdGNoRnJhZ21lbnQocik7aWYoIWF8fCFhLnZhbGlkRW5kKXRocm93IG5ldyBSYW5nZUVycm9yKCJXcmFwcGVyIHR5cGUgZ2l2ZW4gdG8gVHJhbnNmb3JtLndyYXAgZG9lcyBub3QgZm9ybSB2YWxpZCBjb250ZW50IG9mIGl0cyBwYXJlbnQgd3JhcHBlciIpfXI9VS5mcm9tKG5bc10udHlwZS5jcmVhdGUobltzXS5hdHRycyxyKSl9bGV0IG89dC5zdGFydCxpPXQuZW5kO2Uuc3RlcChuZXcgVXQobyxpLG8saSxuZXcgSihyLDAsMCksbi5sZW5ndGgsITApKX1mdW5jdGlvbiBMOShlLHQsbixyLG8pe2lmKCFyLmlzVGV4dGJsb2NrKXRocm93IG5ldyBSYW5nZUVycm9yKCJUeXBlIGdpdmVuIHRvIHNldEJsb2NrVHlwZSBzaG91bGQgYmUgYSB0ZXh0YmxvY2siKTtsZXQgaT1lLnN0ZXBzLmxlbmd0aDtlLmRvYy5ub2Rlc0JldHdlZW4odCxuLChzLGEpPT57aWYocy5pc1RleHRibG9jayYmIXMuaGFzTWFya3VwKHIsbykmJmo5KGUuZG9jLGUubWFwcGluZy5zbGljZShpKS5tYXAoYSkscikpe2UuY2xlYXJJbmNvbXBhdGlibGUoZS5tYXBwaW5nLnNsaWNlKGkpLm1hcChhLDEpLHIpO2xldCBsPWUubWFwcGluZy5zbGljZShpKSxjPWwubWFwKGEsMSksdT1sLm1hcChhK3Mubm9kZVNpemUsMSk7cmV0dXJuIGUuc3RlcChuZXcgVXQoYyx1LGMrMSx1LTEsbmV3IEooVS5mcm9tKHIuY3JlYXRlKG8sbnVsbCxzLm1hcmtzKSksMCwwKSwxLCEwKSksITF9fSl9ZnVuY3Rpb24gajkoZSx0LG4pe2xldCByPWUucmVzb2x2ZSh0KSxvPXIuaW5kZXgoKTtyZXR1cm4gci5wYXJlbnQuY2FuUmVwbGFjZVdpdGgobyxvKzEsbil9ZnVuY3Rpb24gejkoZSx0LG4scixvKXtsZXQgaT1lLmRvYy5ub2RlQXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIG5vZGUgYXQgZ2l2ZW4gcG9zaXRpb24iKTtufHwobj1pLnR5cGUpO2xldCBzPW4uY3JlYXRlKHIsbnVsbCxvfHxpLm1hcmtzKTtpZihpLmlzTGVhZilyZXR1cm4gZS5yZXBsYWNlV2l0aCh0LHQraS5ub2RlU2l6ZSxzKTtpZighbi52YWxpZENvbnRlbnQoaS5jb250ZW50KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBjb250ZW50IGZvciBub2RlIHR5cGUgIituLm5hbWUpO2Uuc3RlcChuZXcgVXQodCx0K2kubm9kZVNpemUsdCsxLHQraS5ub2RlU2l6ZS0xLG5ldyBKKFUuZnJvbShzKSwwLDApLDEsITApKX1mdW5jdGlvbiBDYyhlLHQsbj0xLHIpe2xldCBvPWUucmVzb2x2ZSh0KSxpPW8uZGVwdGgtbixzPXImJnJbci5sZW5ndGgtMV18fG8ucGFyZW50O2lmKGk8MHx8by5wYXJlbnQudHlwZS5zcGVjLmlzb2xhdGluZ3x8IW8ucGFyZW50LmNhblJlcGxhY2Uoby5pbmRleCgpLG8ucGFyZW50LmNoaWxkQ291bnQpfHwhcy50eXBlLnZhbGlkQ29udGVudChvLnBhcmVudC5jb250ZW50LmN1dEJ5SW5kZXgoby5pbmRleCgpLG8ucGFyZW50LmNoaWxkQ291bnQpKSlyZXR1cm4hMTtmb3IobGV0IGM9by5kZXB0aC0xLHU9bi0yO2M+aTtjLS0sdS0tKXtsZXQgZD1vLm5vZGUoYyksZj1vLmluZGV4KGMpO2lmKGQudHlwZS5zcGVjLmlzb2xhdGluZylyZXR1cm4hMTtsZXQgcD1kLmNvbnRlbnQuY3V0QnlJbmRleChmLGQuY2hpbGRDb3VudCksbT1yJiZyW3UrMV07bSYmKHA9cC5yZXBsYWNlQ2hpbGQoMCxtLnR5cGUuY3JlYXRlKG0uYXR0cnMpKSk7bGV0IGc9ciYmclt1XXx8ZDtpZighZC5jYW5SZXBsYWNlKGYrMSxkLmNoaWxkQ291bnQpfHwhZy50eXBlLnZhbGlkQ29udGVudChwKSlyZXR1cm4hMX1sZXQgYT1vLmluZGV4QWZ0ZXIoaSksbD1yJiZyWzBdO3JldHVybiBvLm5vZGUoaSkuY2FuUmVwbGFjZVdpdGgoYSxhLGw/bC50eXBlOm8ubm9kZShpKzEpLnR5cGUpfWZ1bmN0aW9uIEY5KGUsdCxuPTEscil7bGV0IG89ZS5kb2MucmVzb2x2ZSh0KSxpPVUuZW1wdHkscz1VLmVtcHR5O2ZvcihsZXQgYT1vLmRlcHRoLGw9by5kZXB0aC1uLGM9bi0xO2E+bDthLS0sYy0tKXtpPVUuZnJvbShvLm5vZGUoYSkuY29weShpKSk7bGV0IHU9ciYmcltjXTtzPVUuZnJvbSh1P3UudHlwZS5jcmVhdGUodS5hdHRycyxzKTpvLm5vZGUoYSkuY29weShzKSl9ZS5zdGVwKG5ldyBmbih0LHQsbmV3IEooaS5hcHBlbmQocyksbixuKSwhMCkpfWZ1bmN0aW9uIHNwKGUsdCl7bGV0IG49ZS5yZXNvbHZlKHQpLHI9bi5pbmRleCgpO3JldHVybiBCOShuLm5vZGVCZWZvcmUsbi5ub2RlQWZ0ZXIpJiZuLnBhcmVudC5jYW5SZXBsYWNlKHIscisxKX1mdW5jdGlvbiBCOShlLHQpe3JldHVybiEhKGUmJnQmJiFlLmlzTGVhZiYmZS5jYW5BcHBlbmQodCkpfWZ1bmN0aW9uIFU5KGUsdCxuKXtsZXQgcj1uZXcgZm4odC1uLHQrbixKLmVtcHR5LCEwKTtlLnN0ZXAocil9ZnVuY3Rpb24ga1IoZSx0LG4pe2xldCByPWUucmVzb2x2ZSh0KTtpZihyLnBhcmVudC5jYW5SZXBsYWNlV2l0aChyLmluZGV4KCksci5pbmRleCgpLG4pKXJldHVybiB0O2lmKHIucGFyZW50T2Zmc2V0PT0wKWZvcihsZXQgbz1yLmRlcHRoLTE7bz49MDtvLS0pe2xldCBpPXIuaW5kZXgobyk7aWYoci5ub2RlKG8pLmNhblJlcGxhY2VXaXRoKGksaSxuKSlyZXR1cm4gci5iZWZvcmUobysxKTtpZihpPjApcmV0dXJuIG51bGx9aWYoci5wYXJlbnRPZmZzZXQ9PXIucGFyZW50LmNvbnRlbnQuc2l6ZSlmb3IobGV0IG89ci5kZXB0aC0xO28+PTA7by0tKXtsZXQgaT1yLmluZGV4QWZ0ZXIobyk7aWYoci5ub2RlKG8pLmNhblJlcGxhY2VXaXRoKGksaSxuKSlyZXR1cm4gci5hZnRlcihvKzEpO2lmKGk8ci5ub2RlKG8pLmNoaWxkQ291bnQpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRVIoZSx0LG4pe2xldCByPWUucmVzb2x2ZSh0KTtpZighbi5jb250ZW50LnNpemUpcmV0dXJuIHQ7bGV0IG89bi5jb250ZW50O2ZvcihsZXQgaT0wO2k8bi5vcGVuU3RhcnQ7aSsrKW89by5maXJzdENoaWxkLmNvbnRlbnQ7Zm9yKGxldCBpPTE7aTw9KG4ub3BlblN0YXJ0PT0wJiZuLnNpemU/MjoxKTtpKyspZm9yKGxldCBzPXIuZGVwdGg7cz49MDtzLS0pe2xldCBhPXM9PXIuZGVwdGg/MDpyLnBvczw9KHIuc3RhcnQocysxKStyLmVuZChzKzEpKS8yPy0xOjEsbD1yLmluZGV4KHMpKyhhPjA/MTowKSxjPXIubm9kZShzKSx1PSExO2lmKGk9PTEpdT1jLmNhblJlcGxhY2UobCxsLG8pO2Vsc2V7bGV0IGQ9Yy5jb250ZW50TWF0Y2hBdChsKS5maW5kV3JhcHBpbmcoby5maXJzdENoaWxkLnR5cGUpO3U9ZCYmYy5jYW5SZXBsYWNlV2l0aChsLGwsZFswXSl9aWYodSlyZXR1cm4gYT09MD9yLnBvczphPDA/ci5iZWZvcmUocysxKTpyLmFmdGVyKHMrMSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gWDEoZSx0LG49dCxyPUouZW1wdHkpe2lmKHQ9PW4mJiFyLnNpemUpcmV0dXJuIG51bGw7bGV0IG89ZS5yZXNvbHZlKHQpLGk9ZS5yZXNvbHZlKG4pO3JldHVybiBfUihvLGkscik/bmV3IGZuKHQsbixyKTpuZXcgVjkobyxpLHIpLmZpdCgpfWZ1bmN0aW9uIF9SKGUsdCxuKXtyZXR1cm4hbi5vcGVuU3RhcnQmJiFuLm9wZW5FbmQmJmUuc3RhcnQoKT09dC5zdGFydCgpJiZlLnBhcmVudC5jYW5SZXBsYWNlKGUuaW5kZXgoKSx0LmluZGV4KCksbi5jb250ZW50KX1jbGFzcyBWOXtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy4kZnJvbT10LHRoaXMuJHRvPW4sdGhpcy51bnBsYWNlZD1yLHRoaXMuZnJvbnRpZXI9W10sdGhpcy5wbGFjZWQ9VS5lbXB0eTtmb3IobGV0IG89MDtvPD10LmRlcHRoO28rKyl7bGV0IGk9dC5ub2RlKG8pO3RoaXMuZnJvbnRpZXIucHVzaCh7dHlwZTppLnR5cGUsbWF0Y2g6aS5jb250ZW50TWF0Y2hBdCh0LmluZGV4QWZ0ZXIobykpfSl9Zm9yKGxldCBvPXQuZGVwdGg7bz4wO28tLSl0aGlzLnBsYWNlZD1VLmZyb20odC5ub2RlKG8pLmNvcHkodGhpcy5wbGFjZWQpKX1nZXQgZGVwdGgoKXtyZXR1cm4gdGhpcy5mcm9udGllci5sZW5ndGgtMX1maXQoKXtmb3IoO3RoaXMudW5wbGFjZWQuc2l6ZTspe2xldCBjPXRoaXMuZmluZEZpdHRhYmxlKCk7Yz90aGlzLnBsYWNlTm9kZXMoYyk6dGhpcy5vcGVuTW9yZSgpfHx0aGlzLmRyb3BOb2RlKCl9bGV0IHQ9dGhpcy5tdXN0TW92ZUlubGluZSgpLG49dGhpcy5wbGFjZWQuc2l6ZS10aGlzLmRlcHRoLXRoaXMuJGZyb20uZGVwdGgscj10aGlzLiRmcm9tLG89dGhpcy5jbG9zZSh0PDA/dGhpcy4kdG86ci5kb2MucmVzb2x2ZSh0KSk7aWYoIW8pcmV0dXJuIG51bGw7bGV0IGk9dGhpcy5wbGFjZWQscz1yLmRlcHRoLGE9by5kZXB0aDtmb3IoO3MmJmEmJmkuY2hpbGRDb3VudD09MTspaT1pLmZpcnN0Q2hpbGQuY29udGVudCxzLS0sYS0tO2xldCBsPW5ldyBKKGkscyxhKTtyZXR1cm4gdD4tMT9uZXcgVXQoci5wb3MsdCx0aGlzLiR0by5wb3MsdGhpcy4kdG8uZW5kKCksbCxuKTpsLnNpemV8fHIucG9zIT10aGlzLiR0by5wb3M/bmV3IGZuKHIucG9zLG8ucG9zLGwpOm51bGx9ZmluZEZpdHRhYmxlKCl7bGV0IHQ9dGhpcy51bnBsYWNlZC5vcGVuU3RhcnQ7Zm9yKGxldCBuPXRoaXMudW5wbGFjZWQuY29udGVudCxyPTAsbz10aGlzLnVucGxhY2VkLm9wZW5FbmQ7cjx0O3IrKyl7bGV0IGk9bi5maXJzdENoaWxkO2lmKG4uY2hpbGRDb3VudD4xJiYobz0wKSxpLnR5cGUuc3BlYy5pc29sYXRpbmcmJm88PXIpe3Q9cjticmVha31uPWkuY29udGVudH1mb3IobGV0IG49MTtuPD0yO24rKylmb3IobGV0IHI9bj09MT90OnRoaXMudW5wbGFjZWQub3BlblN0YXJ0O3I+PTA7ci0tKXtsZXQgbyxpPW51bGw7cj8oaT1feSh0aGlzLnVucGxhY2VkLmNvbnRlbnQsci0xKS5maXJzdENoaWxkLG89aS5jb250ZW50KTpvPXRoaXMudW5wbGFjZWQuY29udGVudDtsZXQgcz1vLmZpcnN0Q2hpbGQ7Zm9yKGxldCBhPXRoaXMuZGVwdGg7YT49MDthLS0pe2xldHt0eXBlOmwsbWF0Y2g6Y309dGhpcy5mcm9udGllclthXSx1LGQ9bnVsbDtpZihuPT0xJiYocz9jLm1hdGNoVHlwZShzLnR5cGUpfHwoZD1jLmZpbGxCZWZvcmUoVS5mcm9tKHMpLCExKSk6aSYmbC5jb21wYXRpYmxlQ29udGVudChpLnR5cGUpKSlyZXR1cm57c2xpY2VEZXB0aDpyLGZyb250aWVyRGVwdGg6YSxwYXJlbnQ6aSxpbmplY3Q6ZH07aWYobj09MiYmcyYmKHU9Yy5maW5kV3JhcHBpbmcocy50eXBlKSkpcmV0dXJue3NsaWNlRGVwdGg6cixmcm9udGllckRlcHRoOmEscGFyZW50Omksd3JhcDp1fTtpZihpJiZjLm1hdGNoVHlwZShpLnR5cGUpKWJyZWFrfX19b3Blbk1vcmUoKXtsZXR7Y29udGVudDp0LG9wZW5TdGFydDpuLG9wZW5FbmQ6cn09dGhpcy51bnBsYWNlZCxvPV95KHQsbik7cmV0dXJuIW8uY2hpbGRDb3VudHx8by5maXJzdENoaWxkLmlzTGVhZj8hMToodGhpcy51bnBsYWNlZD1uZXcgSih0LG4rMSxNYXRoLm1heChyLG8uc2l6ZStuPj10LnNpemUtcj9uKzE6MCkpLCEwKX1kcm9wTm9kZSgpe2xldHtjb250ZW50OnQsb3BlblN0YXJ0Om4sb3BlbkVuZDpyfT10aGlzLnVucGxhY2VkLG89X3kodCxuKTtpZihvLmNoaWxkQ291bnQ8PTEmJm4+MCl7bGV0IGk9dC5zaXplLW48PW4rby5zaXplO3RoaXMudW5wbGFjZWQ9bmV3IEooR3UodCxuLTEsMSksbi0xLGk/bi0xOnIpfWVsc2UgdGhpcy51bnBsYWNlZD1uZXcgSihHdSh0LG4sMSksbixyKX1wbGFjZU5vZGVzKHtzbGljZURlcHRoOnQsZnJvbnRpZXJEZXB0aDpuLHBhcmVudDpyLGluamVjdDpvLHdyYXA6aX0pe2Zvcig7dGhpcy5kZXB0aD5uOyl0aGlzLmNsb3NlRnJvbnRpZXJOb2RlKCk7aWYoaSlmb3IobGV0IGc9MDtnPGkubGVuZ3RoO2crKyl0aGlzLm9wZW5Gcm9udGllck5vZGUoaVtnXSk7bGV0IHM9dGhpcy51bnBsYWNlZCxhPXI/ci5jb250ZW50OnMuY29udGVudCxsPXMub3BlblN0YXJ0LXQsYz0wLHU9W10se21hdGNoOmQsdHlwZTpmfT10aGlzLmZyb250aWVyW25dO2lmKG8pe2ZvcihsZXQgZz0wO2c8by5jaGlsZENvdW50O2crKyl1LnB1c2goby5jaGlsZChnKSk7ZD1kLm1hdGNoRnJhZ21lbnQobyl9bGV0IHA9YS5zaXplK3QtKHMuY29udGVudC5zaXplLXMub3BlbkVuZCk7Zm9yKDtjPGEuY2hpbGRDb3VudDspe2xldCBnPWEuY2hpbGQoYykseT1kLm1hdGNoVHlwZShnLnR5cGUpO2lmKCF5KWJyZWFrO2MrKywoYz4xfHxsPT0wfHxnLmNvbnRlbnQuc2l6ZSkmJihkPXksdS5wdXNoKENSKGcubWFyayhmLmFsbG93ZWRNYXJrcyhnLm1hcmtzKSksYz09MT9sOjAsYz09YS5jaGlsZENvdW50P3A6LTEpKSl9bGV0IG09Yz09YS5jaGlsZENvdW50O218fChwPS0xKSx0aGlzLnBsYWNlZD1ZdSh0aGlzLnBsYWNlZCxuLFUuZnJvbSh1KSksdGhpcy5mcm9udGllcltuXS5tYXRjaD1kLG0mJnA8MCYmciYmci50eXBlPT10aGlzLmZyb250aWVyW3RoaXMuZGVwdGhdLnR5cGUmJnRoaXMuZnJvbnRpZXIubGVuZ3RoPjEmJnRoaXMuY2xvc2VGcm9udGllck5vZGUoKTtmb3IobGV0IGc9MCx5PWE7ZzxwO2crKyl7bGV0IHY9eS5sYXN0Q2hpbGQ7dGhpcy5mcm9udGllci5wdXNoKHt0eXBlOnYudHlwZSxtYXRjaDp2LmNvbnRlbnRNYXRjaEF0KHYuY2hpbGRDb3VudCl9KSx5PXYuY29udGVudH10aGlzLnVucGxhY2VkPW0/dD09MD9KLmVtcHR5Om5ldyBKKEd1KHMuY29udGVudCx0LTEsMSksdC0xLHA8MD9zLm9wZW5FbmQ6dC0xKTpuZXcgSihHdShzLmNvbnRlbnQsdCxjKSxzLm9wZW5TdGFydCxzLm9wZW5FbmQpfW11c3RNb3ZlSW5saW5lKCl7aWYoIXRoaXMuJHRvLnBhcmVudC5pc1RleHRibG9jaylyZXR1cm4tMTtsZXQgdD10aGlzLmZyb250aWVyW3RoaXMuZGVwdGhdLG47aWYoIXQudHlwZS5pc1RleHRibG9ja3x8IUN5KHRoaXMuJHRvLHRoaXMuJHRvLmRlcHRoLHQudHlwZSx0Lm1hdGNoLCExKXx8dGhpcy4kdG8uZGVwdGg9PXRoaXMuZGVwdGgmJihuPXRoaXMuZmluZENsb3NlTGV2ZWwodGhpcy4kdG8pKSYmbi5kZXB0aD09dGhpcy5kZXB0aClyZXR1cm4tMTtsZXR7ZGVwdGg6cn09dGhpcy4kdG8sbz10aGlzLiR0by5hZnRlcihyKTtmb3IoO3I+MSYmbz09dGhpcy4kdG8uZW5kKC0tcik7KSsrbztyZXR1cm4gb31maW5kQ2xvc2VMZXZlbCh0KXtlOmZvcihsZXQgbj1NYXRoLm1pbih0aGlzLmRlcHRoLHQuZGVwdGgpO24+PTA7bi0tKXtsZXR7bWF0Y2g6cix0eXBlOm99PXRoaXMuZnJvbnRpZXJbbl0saT1uPHQuZGVwdGgmJnQuZW5kKG4rMSk9PXQucG9zKyh0LmRlcHRoLShuKzEpKSxzPUN5KHQsbixvLHIsaSk7aWYocyl7Zm9yKGxldCBhPW4tMTthPj0wO2EtLSl7bGV0e21hdGNoOmwsdHlwZTpjfT10aGlzLmZyb250aWVyW2FdLHU9Q3kodCxhLGMsbCwhMCk7aWYoIXV8fHUuY2hpbGRDb3VudCljb250aW51ZSBlfXJldHVybntkZXB0aDpuLGZpdDpzLG1vdmU6aT90LmRvYy5yZXNvbHZlKHQuYWZ0ZXIobisxKSk6dH19fX1jbG9zZSh0KXtsZXQgbj10aGlzLmZpbmRDbG9zZUxldmVsKHQpO2lmKCFuKXJldHVybiBudWxsO2Zvcig7dGhpcy5kZXB0aD5uLmRlcHRoOyl0aGlzLmNsb3NlRnJvbnRpZXJOb2RlKCk7bi5maXQuY2hpbGRDb3VudCYmKHRoaXMucGxhY2VkPVl1KHRoaXMucGxhY2VkLG4uZGVwdGgsbi5maXQpKSx0PW4ubW92ZTtmb3IobGV0IHI9bi5kZXB0aCsxO3I8PXQuZGVwdGg7cisrKXtsZXQgbz10Lm5vZGUociksaT1vLnR5cGUuY29udGVudE1hdGNoLmZpbGxCZWZvcmUoby5jb250ZW50LCEwLHQuaW5kZXgocikpO3RoaXMub3BlbkZyb250aWVyTm9kZShvLnR5cGUsby5hdHRycyxpKX1yZXR1cm4gdH1vcGVuRnJvbnRpZXJOb2RlKHQsbj1udWxsLHIpe2xldCBvPXRoaXMuZnJvbnRpZXJbdGhpcy5kZXB0aF07by5tYXRjaD1vLm1hdGNoLm1hdGNoVHlwZSh0KSx0aGlzLnBsYWNlZD1ZdSh0aGlzLnBsYWNlZCx0aGlzLmRlcHRoLFUuZnJvbSh0LmNyZWF0ZShuLHIpKSksdGhpcy5mcm9udGllci5wdXNoKHt0eXBlOnQsbWF0Y2g6dC5jb250ZW50TWF0Y2h9KX1jbG9zZUZyb250aWVyTm9kZSgpe2xldCBuPXRoaXMuZnJvbnRpZXIucG9wKCkubWF0Y2guZmlsbEJlZm9yZShVLmVtcHR5LCEwKTtuLmNoaWxkQ291bnQmJih0aGlzLnBsYWNlZD1ZdSh0aGlzLnBsYWNlZCx0aGlzLmZyb250aWVyLmxlbmd0aCxuKSl9fWZ1bmN0aW9uIEd1KGUsdCxuKXtyZXR1cm4gdD09MD9lLmN1dEJ5SW5kZXgobixlLmNoaWxkQ291bnQpOmUucmVwbGFjZUNoaWxkKDAsZS5maXJzdENoaWxkLmNvcHkoR3UoZS5maXJzdENoaWxkLmNvbnRlbnQsdC0xLG4pKSl9ZnVuY3Rpb24gWXUoZSx0LG4pe3JldHVybiB0PT0wP2UuYXBwZW5kKG4pOmUucmVwbGFjZUNoaWxkKGUuY2hpbGRDb3VudC0xLGUubGFzdENoaWxkLmNvcHkoWXUoZS5sYXN0Q2hpbGQuY29udGVudCx0LTEsbikpKX1mdW5jdGlvbiBfeShlLHQpe2ZvcihsZXQgbj0wO248dDtuKyspZT1lLmZpcnN0Q2hpbGQuY29udGVudDtyZXR1cm4gZX1mdW5jdGlvbiBDUihlLHQsbil7aWYodDw9MClyZXR1cm4gZTtsZXQgcj1lLmNvbnRlbnQ7cmV0dXJuIHQ+MSYmKHI9ci5yZXBsYWNlQ2hpbGQoMCxDUihyLmZpcnN0Q2hpbGQsdC0xLHIuY2hpbGRDb3VudD09MT9uLTE6MCkpKSx0PjAmJihyPWUudHlwZS5jb250ZW50TWF0Y2guZmlsbEJlZm9yZShyKS5hcHBlbmQociksbjw9MCYmKHI9ci5hcHBlbmQoZS50eXBlLmNvbnRlbnRNYXRjaC5tYXRjaEZyYWdtZW50KHIpLmZpbGxCZWZvcmUoVS5lbXB0eSwhMCkpKSksZS5jb3B5KHIpfWZ1bmN0aW9uIEN5KGUsdCxuLHIsbyl7bGV0IGk9ZS5ub2RlKHQpLHM9bz9lLmluZGV4QWZ0ZXIodCk6ZS5pbmRleCh0KTtpZihzPT1pLmNoaWxkQ291bnQmJiFuLmNvbXBhdGlibGVDb250ZW50KGkudHlwZSkpcmV0dXJuIG51bGw7bGV0IGE9ci5maWxsQmVmb3JlKGkuY29udGVudCwhMCxzKTtyZXR1cm4gYSYmIUg5KG4saS5jb250ZW50LHMpP2E6bnVsbH1mdW5jdGlvbiBIOShlLHQsbil7Zm9yKGxldCByPW47cjx0LmNoaWxkQ291bnQ7cisrKWlmKCFlLmFsbG93c01hcmtzKHQuY2hpbGQocikubWFya3MpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFc5KGUpe3JldHVybiBlLnNwZWMuZGVmaW5pbmd8fGUuc3BlYy5kZWZpbmluZ0ZvckNvbnRlbnR9ZnVuY3Rpb24gSzkoZSx0LG4scil7aWYoIXIuc2l6ZSlyZXR1cm4gZS5kZWxldGVSYW5nZSh0LG4pO2xldCBvPWUuZG9jLnJlc29sdmUodCksaT1lLmRvYy5yZXNvbHZlKG4pO2lmKF9SKG8saSxyKSlyZXR1cm4gZS5zdGVwKG5ldyBmbih0LG4scikpO2xldCBzPVRSKG8sZS5kb2MucmVzb2x2ZShuKSk7c1tzLmxlbmd0aC0xXT09MCYmcy5wb3AoKTtsZXQgYT0tKG8uZGVwdGgrMSk7cy51bnNoaWZ0KGEpO2ZvcihsZXQgZj1vLmRlcHRoLHA9by5wb3MtMTtmPjA7Zi0tLHAtLSl7bGV0IG09by5ub2RlKGYpLnR5cGUuc3BlYztpZihtLmRlZmluaW5nfHxtLmRlZmluaW5nQXNDb250ZXh0fHxtLmlzb2xhdGluZylicmVhaztzLmluZGV4T2YoZik+LTE/YT1mOm8uYmVmb3JlKGYpPT1wJiZzLnNwbGljZSgxLDAsLWYpfWxldCBsPXMuaW5kZXhPZihhKSxjPVtdLHU9ci5vcGVuU3RhcnQ7Zm9yKGxldCBmPXIuY29udGVudCxwPTA7O3ArKyl7bGV0IG09Zi5maXJzdENoaWxkO2lmKGMucHVzaChtKSxwPT1yLm9wZW5TdGFydClicmVhaztmPW0uY29udGVudH1mb3IobGV0IGY9dS0xO2Y+PTA7Zi0tKXtsZXQgcD1jW2ZdLG09VzkocC50eXBlKTtpZihtJiYhcC5zYW1lTWFya3VwKG8ubm9kZShNYXRoLmFicyhhKS0xKSkpdT1mO2Vsc2UgaWYobXx8IXAudHlwZS5pc1RleHRibG9jaylicmVha31mb3IobGV0IGY9ci5vcGVuU3RhcnQ7Zj49MDtmLS0pe2xldCBwPShmK3UrMSklKHIub3BlblN0YXJ0KzEpLG09Y1twXTtpZihtKWZvcihsZXQgZz0wO2c8cy5sZW5ndGg7ZysrKXtsZXQgeT1zWyhnK2wpJXMubGVuZ3RoXSx2PSEwO3k8MCYmKHY9ITEseT0teSk7bGV0IHg9by5ub2RlKHktMSksdz1vLmluZGV4KHktMSk7aWYoeC5jYW5SZXBsYWNlV2l0aCh3LHcsbS50eXBlLG0ubWFya3MpKXJldHVybiBlLnJlcGxhY2Uoby5iZWZvcmUoeSksdj9pLmFmdGVyKHkpOm4sbmV3IEooT1Ioci5jb250ZW50LDAsci5vcGVuU3RhcnQscCkscCxyLm9wZW5FbmQpKX19bGV0IGQ9ZS5zdGVwcy5sZW5ndGg7Zm9yKGxldCBmPXMubGVuZ3RoLTE7Zj49MCYmKGUucmVwbGFjZSh0LG4sciksIShlLnN0ZXBzLmxlbmd0aD5kKSk7Zi0tKXtsZXQgcD1zW2ZdO3A8MHx8KHQ9by5iZWZvcmUocCksbj1pLmFmdGVyKHApKX19ZnVuY3Rpb24gT1IoZSx0LG4scixvKXtpZih0PG4pe2xldCBpPWUuZmlyc3RDaGlsZDtlPWUucmVwbGFjZUNoaWxkKDAsaS5jb3B5KE9SKGkuY29udGVudCx0KzEsbixyLGkpKSl9aWYodD5yKXtsZXQgaT1vLmNvbnRlbnRNYXRjaEF0KDApLHM9aS5maWxsQmVmb3JlKGUpLmFwcGVuZChlKTtlPXMuYXBwZW5kKGkubWF0Y2hGcmFnbWVudChzKS5maWxsQmVmb3JlKFUuZW1wdHksITApKX1yZXR1cm4gZX1mdW5jdGlvbiBxOShlLHQsbixyKXtpZighci5pc0lubGluZSYmdD09biYmZS5kb2MucmVzb2x2ZSh0KS5wYXJlbnQuY29udGVudC5zaXplKXtsZXQgbz1rUihlLmRvYyx0LHIudHlwZSk7byE9bnVsbCYmKHQ9bj1vKX1lLnJlcGxhY2VSYW5nZSh0LG4sbmV3IEooVS5mcm9tKHIpLDAsMCkpfWZ1bmN0aW9uIEc5KGUsdCxuKXtsZXQgcj1lLmRvYy5yZXNvbHZlKHQpLG89ZS5kb2MucmVzb2x2ZShuKSxpPVRSKHIsbyk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBhPWlbc10sbD1zPT1pLmxlbmd0aC0xO2lmKGwmJmE9PTB8fHIubm9kZShhKS50eXBlLmNvbnRlbnRNYXRjaC52YWxpZEVuZClyZXR1cm4gZS5kZWxldGUoci5zdGFydChhKSxvLmVuZChhKSk7aWYoYT4wJiYobHx8ci5ub2RlKGEtMSkuY2FuUmVwbGFjZShyLmluZGV4KGEtMSksby5pbmRleEFmdGVyKGEtMSkpKSlyZXR1cm4gZS5kZWxldGUoci5iZWZvcmUoYSksby5hZnRlcihhKSl9Zm9yKGxldCBzPTE7czw9ci5kZXB0aCYmczw9by5kZXB0aDtzKyspaWYodC1yLnN0YXJ0KHMpPT1yLmRlcHRoLXMmJm4+ci5lbmQocykmJm8uZW5kKHMpLW4hPW8uZGVwdGgtcylyZXR1cm4gZS5kZWxldGUoci5iZWZvcmUocyksbik7ZS5kZWxldGUodCxuKX1mdW5jdGlvbiBUUihlLHQpe2xldCBuPVtdLHI9TWF0aC5taW4oZS5kZXB0aCx0LmRlcHRoKTtmb3IobGV0IG89cjtvPj0wO28tLSl7bGV0IGk9ZS5zdGFydChvKTtpZihpPGUucG9zLShlLmRlcHRoLW8pfHx0LmVuZChvKT50LnBvcysodC5kZXB0aC1vKXx8ZS5ub2RlKG8pLnR5cGUuc3BlYy5pc29sYXRpbmd8fHQubm9kZShvKS50eXBlLnNwZWMuaXNvbGF0aW5nKWJyZWFrOyhpPT10LnN0YXJ0KG8pfHxvPT1lLmRlcHRoJiZvPT10LmRlcHRoJiZlLnBhcmVudC5pbmxpbmVDb250ZW50JiZ0LnBhcmVudC5pbmxpbmVDb250ZW50JiZvJiZ0LnN0YXJ0KG8tMSk9PWktMSkmJm4ucHVzaChvKX1yZXR1cm4gbn1jbGFzcyBPYyBleHRlbmRzIHRue2NvbnN0cnVjdG9yKHQsbixyKXtzdXBlcigpLHRoaXMucG9zPXQsdGhpcy5hdHRyPW4sdGhpcy52YWx1ZT1yfWFwcGx5KHQpe2xldCBuPXQubm9kZUF0KHRoaXMucG9zKTtpZighbilyZXR1cm4gQnQuZmFpbCgiTm8gbm9kZSBhdCBhdHRyaWJ1dGUgc3RlcCdzIHBvc2l0aW9uIik7bGV0IHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGkgaW4gbi5hdHRycylyW2ldPW4uYXR0cnNbaV07clt0aGlzLmF0dHJdPXRoaXMudmFsdWU7bGV0IG89bi50eXBlLmNyZWF0ZShyLG51bGwsbi5tYXJrcyk7cmV0dXJuIEJ0LmZyb21SZXBsYWNlKHQsdGhpcy5wb3MsdGhpcy5wb3MrMSxuZXcgSihVLmZyb20obyksMCxuLmlzTGVhZj8wOjEpKX1nZXRNYXAoKXtyZXR1cm4gU3IuZW1wdHl9aW52ZXJ0KHQpe3JldHVybiBuZXcgT2ModGhpcy5wb3MsdGhpcy5hdHRyLHQubm9kZUF0KHRoaXMucG9zKS5hdHRyc1t0aGlzLmF0dHJdKX1tYXAodCl7bGV0IG49dC5tYXBSZXN1bHQodGhpcy5wb3MsMSk7cmV0dXJuIG4uZGVsZXRlZEFmdGVyP251bGw6bmV3IE9jKG4ucG9zLHRoaXMuYXR0cix0aGlzLnZhbHVlKX10b0pTT04oKXtyZXR1cm57c3RlcFR5cGU6ImF0dHIiLHBvczp0aGlzLnBvcyxhdHRyOnRoaXMuYXR0cix2YWx1ZTp0aGlzLnZhbHVlfX1zdGF0aWMgZnJvbUpTT04odCxuKXtpZih0eXBlb2Ygbi5wb3MhPSJudW1iZXIifHx0eXBlb2Ygbi5hdHRyIT0ic3RyaW5nIil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBpbnB1dCBmb3IgQXR0clN0ZXAuZnJvbUpTT04iKTtyZXR1cm4gbmV3IE9jKG4ucG9zLG4uYXR0cixuLnZhbHVlKX19dG4uanNvbklEKCJhdHRyIixPYyk7Y2xhc3MgYmYgZXh0ZW5kcyB0bntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCksdGhpcy5hdHRyPXQsdGhpcy52YWx1ZT1ufWFwcGx5KHQpe2xldCBuPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBvIGluIHQuYXR0cnMpbltvXT10LmF0dHJzW29dO25bdGhpcy5hdHRyXT10aGlzLnZhbHVlO2xldCByPXQudHlwZS5jcmVhdGUobix0LmNvbnRlbnQsdC5tYXJrcyk7cmV0dXJuIEJ0Lm9rKHIpfWdldE1hcCgpe3JldHVybiBTci5lbXB0eX1pbnZlcnQodCl7cmV0dXJuIG5ldyBiZih0aGlzLmF0dHIsdC5hdHRyc1t0aGlzLmF0dHJdKX1tYXAodCl7cmV0dXJuIHRoaXN9dG9KU09OKCl7cmV0dXJue3N0ZXBUeXBlOiJkb2NBdHRyIixhdHRyOnRoaXMuYXR0cix2YWx1ZTp0aGlzLnZhbHVlfX1zdGF0aWMgZnJvbUpTT04odCxuKXtpZih0eXBlb2Ygbi5hdHRyIT0ic3RyaW5nIil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBpbnB1dCBmb3IgRG9jQXR0clN0ZXAuZnJvbUpTT04iKTtyZXR1cm4gbmV3IGJmKG4uYXR0cixuLnZhbHVlKX19dG4uanNvbklEKCJkb2NBdHRyIixiZik7bGV0IHFjPWNsYXNzIGV4dGVuZHMgRXJyb3J7fTtxYz1mdW5jdGlvbiBlKHQpe2xldCBuPUVycm9yLmNhbGwodGhpcyx0KTtyZXR1cm4gbi5fX3Byb3RvX189ZS5wcm90b3R5cGUsbn07cWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtxYy5wcm90b3R5cGUuY29uc3RydWN0b3I9cWM7cWMucHJvdG90eXBlLm5hbWU9IlRyYW5zZm9ybUVycm9yIjtjbGFzcyBZOXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmRvYz10LHRoaXMuc3RlcHM9W10sdGhpcy5kb2NzPVtdLHRoaXMubWFwcGluZz1uZXcgX2N9Z2V0IGJlZm9yZSgpe3JldHVybiB0aGlzLmRvY3MubGVuZ3RoP3RoaXMuZG9jc1swXTp0aGlzLmRvY31zdGVwKHQpe2xldCBuPXRoaXMubWF5YmVTdGVwKHQpO2lmKG4uZmFpbGVkKXRocm93IG5ldyBxYyhuLmZhaWxlZCk7cmV0dXJuIHRoaXN9bWF5YmVTdGVwKHQpe2xldCBuPXQuYXBwbHkodGhpcy5kb2MpO3JldHVybiBuLmZhaWxlZHx8dGhpcy5hZGRTdGVwKHQsbi5kb2MpLG59Z2V0IGRvY0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5zdGVwcy5sZW5ndGg+MH1hZGRTdGVwKHQsbil7dGhpcy5kb2NzLnB1c2godGhpcy5kb2MpLHRoaXMuc3RlcHMucHVzaCh0KSx0aGlzLm1hcHBpbmcuYXBwZW5kTWFwKHQuZ2V0TWFwKCkpLHRoaXMuZG9jPW59cmVwbGFjZSh0LG49dCxyPUouZW1wdHkpe2xldCBvPVgxKHRoaXMuZG9jLHQsbixyKTtyZXR1cm4gbyYmdGhpcy5zdGVwKG8pLHRoaXN9cmVwbGFjZVdpdGgodCxuLHIpe3JldHVybiB0aGlzLnJlcGxhY2UodCxuLG5ldyBKKFUuZnJvbShyKSwwLDApKX1kZWxldGUodCxuKXtyZXR1cm4gdGhpcy5yZXBsYWNlKHQsbixKLmVtcHR5KX1pbnNlcnQodCxuKXtyZXR1cm4gdGhpcy5yZXBsYWNlV2l0aCh0LHQsbil9cmVwbGFjZVJhbmdlKHQsbixyKXtyZXR1cm4gSzkodGhpcyx0LG4sciksdGhpc31yZXBsYWNlUmFuZ2VXaXRoKHQsbixyKXtyZXR1cm4gcTkodGhpcyx0LG4sciksdGhpc31kZWxldGVSYW5nZSh0LG4pe3JldHVybiBHOSh0aGlzLHQsbiksdGhpc31saWZ0KHQsbil7cmV0dXJuICQ5KHRoaXMsdCxuKSx0aGlzfWpvaW4odCxuPTEpe3JldHVybiBVOSh0aGlzLHQsbiksdGhpc313cmFwKHQsbil7cmV0dXJuIEk5KHRoaXMsdCxuKSx0aGlzfXNldEJsb2NrVHlwZSh0LG49dCxyLG89bnVsbCl7cmV0dXJuIEw5KHRoaXMsdCxuLHIsbyksdGhpc31zZXROb2RlTWFya3VwKHQsbixyPW51bGwsbyl7cmV0dXJuIHo5KHRoaXMsdCxuLHIsbyksdGhpc31zZXROb2RlQXR0cmlidXRlKHQsbixyKXtyZXR1cm4gdGhpcy5zdGVwKG5ldyBPYyh0LG4scikpLHRoaXN9c2V0RG9jQXR0cmlidXRlKHQsbil7cmV0dXJuIHRoaXMuc3RlcChuZXcgYmYodCxuKSksdGhpc31hZGROb2RlTWFyayh0LG4pe3JldHVybiB0aGlzLnN0ZXAobmV3IFBzKHQsbikpLHRoaXN9cmVtb3ZlTm9kZU1hcmsodCxuKXtpZighKG4gaW5zdGFuY2VvZiBZZSkpe2xldCByPXRoaXMuZG9jLm5vZGVBdCh0KTtpZighcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTm8gbm9kZSBhdCBwb3NpdGlvbiAiK3QpO2lmKG49bi5pc0luU2V0KHIubWFya3MpLCFuKXJldHVybiB0aGlzfXJldHVybiB0aGlzLnN0ZXAobmV3IEtjKHQsbikpLHRoaXN9c3BsaXQodCxuPTEscil7cmV0dXJuIEY5KHRoaXMsdCxuLHIpLHRoaXN9YWRkTWFyayh0LG4scil7cmV0dXJuIFA5KHRoaXMsdCxuLHIpLHRoaXN9cmVtb3ZlTWFyayh0LG4scil7cmV0dXJuIE05KHRoaXMsdCxuLHIpLHRoaXN9Y2xlYXJJbmNvbXBhdGlibGUodCxuLHIpe3JldHVybiBSOSh0aGlzLHQsbixyKSx0aGlzfX1jb25zdCBPeT1PYmplY3QuY3JlYXRlKG51bGwpO2NsYXNzIEJle2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLiRhbmNob3I9dCx0aGlzLiRoZWFkPW4sdGhpcy5yYW5nZXM9cnx8W25ldyBYOSh0Lm1pbihuKSx0Lm1heChuKSldfWdldCBhbmNob3IoKXtyZXR1cm4gdGhpcy4kYW5jaG9yLnBvc31nZXQgaGVhZCgpe3JldHVybiB0aGlzLiRoZWFkLnBvc31nZXQgZnJvbSgpe3JldHVybiB0aGlzLiRmcm9tLnBvc31nZXQgdG8oKXtyZXR1cm4gdGhpcy4kdG8ucG9zfWdldCAkZnJvbSgpe3JldHVybiB0aGlzLnJhbmdlc1swXS4kZnJvbX1nZXQgJHRvKCl7cmV0dXJuIHRoaXMucmFuZ2VzWzBdLiR0b31nZXQgZW1wdHkoKXtsZXQgdD10aGlzLnJhbmdlcztmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLiRmcm9tLnBvcyE9dFtuXS4kdG8ucG9zKXJldHVybiExO3JldHVybiEwfWNvbnRlbnQoKXtyZXR1cm4gdGhpcy4kZnJvbS5kb2Muc2xpY2UodGhpcy5mcm9tLHRoaXMudG8sITApfXJlcGxhY2UodCxuPUouZW1wdHkpe2xldCByPW4uY29udGVudC5sYXN0Q2hpbGQsbz1udWxsO2ZvcihsZXQgYT0wO2E8bi5vcGVuRW5kO2ErKylvPXIscj1yLmxhc3RDaGlsZDtsZXQgaT10LnN0ZXBzLmxlbmd0aCxzPXRoaXMucmFuZ2VzO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXR7JGZyb206bCwkdG86Y309c1thXSx1PXQubWFwcGluZy5zbGljZShpKTt0LnJlcGxhY2VSYW5nZSh1Lm1hcChsLnBvcyksdS5tYXAoYy5wb3MpLGE/Si5lbXB0eTpuKSxhPT0wJiZYRSh0LGksKHI/ci5pc0lubGluZTpvJiZvLmlzVGV4dGJsb2NrKT8tMToxKX19cmVwbGFjZVdpdGgodCxuKXtsZXQgcj10LnN0ZXBzLmxlbmd0aCxvPXRoaXMucmFuZ2VzO2ZvcihsZXQgaT0wO2k8by5sZW5ndGg7aSsrKXtsZXR7JGZyb206cywkdG86YX09b1tpXSxsPXQubWFwcGluZy5zbGljZShyKSxjPWwubWFwKHMucG9zKSx1PWwubWFwKGEucG9zKTtpP3QuZGVsZXRlUmFuZ2UoYyx1KToodC5yZXBsYWNlUmFuZ2VXaXRoKGMsdSxuKSxYRSh0LHIsbi5pc0lubGluZT8tMToxKSl9fXN0YXRpYyBmaW5kRnJvbSh0LG4scj0hMSl7bGV0IG89dC5wYXJlbnQuaW5saW5lQ29udGVudD9uZXcgVGUodCk6V2wodC5ub2RlKDApLHQucGFyZW50LHQucG9zLHQuaW5kZXgoKSxuLHIpO2lmKG8pcmV0dXJuIG87Zm9yKGxldCBpPXQuZGVwdGgtMTtpPj0wO2ktLSl7bGV0IHM9bjwwP1dsKHQubm9kZSgwKSx0Lm5vZGUoaSksdC5iZWZvcmUoaSsxKSx0LmluZGV4KGkpLG4scik6V2wodC5ub2RlKDApLHQubm9kZShpKSx0LmFmdGVyKGkrMSksdC5pbmRleChpKSsxLG4scik7aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH1zdGF0aWMgbmVhcih0LG49MSl7cmV0dXJuIHRoaXMuZmluZEZyb20odCxuKXx8dGhpcy5maW5kRnJvbSh0LC1uKXx8bmV3IHFuKHQubm9kZSgwKSl9c3RhdGljIGF0U3RhcnQodCl7cmV0dXJuIFdsKHQsdCwwLDAsMSl8fG5ldyBxbih0KX1zdGF0aWMgYXRFbmQodCl7cmV0dXJuIFdsKHQsdCx0LmNvbnRlbnQuc2l6ZSx0LmNoaWxkQ291bnQsLTEpfHxuZXcgcW4odCl9c3RhdGljIGZyb21KU09OKHQsbil7aWYoIW58fCFuLnR5cGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgaW5wdXQgZm9yIFNlbGVjdGlvbi5mcm9tSlNPTiIpO2xldCByPU95W24udHlwZV07aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIHNlbGVjdGlvbiB0eXBlICR7bi50eXBlfSBkZWZpbmVkYCk7cmV0dXJuIHIuZnJvbUpTT04odCxuKX1zdGF0aWMganNvbklEKHQsbil7aWYodCBpbiBPeSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRHVwbGljYXRlIHVzZSBvZiBzZWxlY3Rpb24gSlNPTiBJRCAiK3QpO3JldHVybiBPeVt0XT1uLG4ucHJvdG90eXBlLmpzb25JRD10LG59Z2V0Qm9va21hcmsoKXtyZXR1cm4gVGUuYmV0d2Vlbih0aGlzLiRhbmNob3IsdGhpcy4kaGVhZCkuZ2V0Qm9va21hcmsoKX19QmUucHJvdG90eXBlLnZpc2libGU9ITA7Y2xhc3MgWDl7Y29uc3RydWN0b3IodCxuKXt0aGlzLiRmcm9tPXQsdGhpcy4kdG89bn19bGV0IEdFPSExO2Z1bmN0aW9uIFlFKGUpeyFHRSYmIWUucGFyZW50LmlubGluZUNvbnRlbnQmJihHRT0hMCxjb25zb2xlLndhcm4oIlRleHRTZWxlY3Rpb24gZW5kcG9pbnQgbm90IHBvaW50aW5nIGludG8gYSBub2RlIHdpdGggaW5saW5lIGNvbnRlbnQgKCIrZS5wYXJlbnQudHlwZS5uYW1lKyIpIikpfWNsYXNzIFRlIGV4dGVuZHMgQmV7Y29uc3RydWN0b3IodCxuPXQpe1lFKHQpLFlFKG4pLHN1cGVyKHQsbil9Z2V0ICRjdXJzb3IoKXtyZXR1cm4gdGhpcy4kYW5jaG9yLnBvcz09dGhpcy4kaGVhZC5wb3M/dGhpcy4kaGVhZDpudWxsfW1hcCh0LG4pe2xldCByPXQucmVzb2x2ZShuLm1hcCh0aGlzLmhlYWQpKTtpZighci5wYXJlbnQuaW5saW5lQ29udGVudClyZXR1cm4gQmUubmVhcihyKTtsZXQgbz10LnJlc29sdmUobi5tYXAodGhpcy5hbmNob3IpKTtyZXR1cm4gbmV3IFRlKG8ucGFyZW50LmlubGluZUNvbnRlbnQ/bzpyLHIpfXJlcGxhY2UodCxuPUouZW1wdHkpe2lmKHN1cGVyLnJlcGxhY2UodCxuKSxuPT1KLmVtcHR5KXtsZXQgcj10aGlzLiRmcm9tLm1hcmtzQWNyb3NzKHRoaXMuJHRvKTtyJiZ0LmVuc3VyZU1hcmtzKHIpfX1lcSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFRlJiZ0LmFuY2hvcj09dGhpcy5hbmNob3ImJnQuaGVhZD09dGhpcy5oZWFkfWdldEJvb2ttYXJrKCl7cmV0dXJuIG5ldyBaZyh0aGlzLmFuY2hvcix0aGlzLmhlYWQpfXRvSlNPTigpe3JldHVybnt0eXBlOiJ0ZXh0IixhbmNob3I6dGhpcy5hbmNob3IsaGVhZDp0aGlzLmhlYWR9fXN0YXRpYyBmcm9tSlNPTih0LG4pe2lmKHR5cGVvZiBuLmFuY2hvciE9Im51bWJlciJ8fHR5cGVvZiBuLmhlYWQhPSJudW1iZXIiKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIGlucHV0IGZvciBUZXh0U2VsZWN0aW9uLmZyb21KU09OIik7cmV0dXJuIG5ldyBUZSh0LnJlc29sdmUobi5hbmNob3IpLHQucmVzb2x2ZShuLmhlYWQpKX1zdGF0aWMgY3JlYXRlKHQsbixyPW4pe2xldCBvPXQucmVzb2x2ZShuKTtyZXR1cm4gbmV3IHRoaXMobyxyPT1uP286dC5yZXNvbHZlKHIpKX1zdGF0aWMgYmV0d2Vlbih0LG4scil7bGV0IG89dC5wb3Mtbi5wb3M7aWYoKCFyfHxvKSYmKHI9bz49MD8xOi0xKSwhbi5wYXJlbnQuaW5saW5lQ29udGVudCl7bGV0IGk9QmUuZmluZEZyb20obixyLCEwKXx8QmUuZmluZEZyb20obiwtciwhMCk7aWYoaSluPWkuJGhlYWQ7ZWxzZSByZXR1cm4gQmUubmVhcihuLHIpfXJldHVybiB0LnBhcmVudC5pbmxpbmVDb250ZW50fHwobz09MD90PW46KHQ9KEJlLmZpbmRGcm9tKHQsLXIsITApfHxCZS5maW5kRnJvbSh0LHIsITApKS4kYW5jaG9yLHQucG9zPG4ucG9zIT1vPDAmJih0PW4pKSksbmV3IFRlKHQsbil9fUJlLmpzb25JRCgidGV4dCIsVGUpO2NsYXNzIFpne2NvbnN0cnVjdG9yKHQsbil7dGhpcy5hbmNob3I9dCx0aGlzLmhlYWQ9bn1tYXAodCl7cmV0dXJuIG5ldyBaZyh0Lm1hcCh0aGlzLmFuY2hvciksdC5tYXAodGhpcy5oZWFkKSl9cmVzb2x2ZSh0KXtyZXR1cm4gVGUuYmV0d2Vlbih0LnJlc29sdmUodGhpcy5hbmNob3IpLHQucmVzb2x2ZSh0aGlzLmhlYWQpKX19Y2xhc3Mgd2UgZXh0ZW5kcyBCZXtjb25zdHJ1Y3Rvcih0KXtsZXQgbj10Lm5vZGVBZnRlcixyPXQubm9kZSgwKS5yZXNvbHZlKHQucG9zK24ubm9kZVNpemUpO3N1cGVyKHQsciksdGhpcy5ub2RlPW59bWFwKHQsbil7bGV0e2RlbGV0ZWQ6cixwb3M6b309bi5tYXBSZXN1bHQodGhpcy5hbmNob3IpLGk9dC5yZXNvbHZlKG8pO3JldHVybiByP0JlLm5lYXIoaSk6bmV3IHdlKGkpfWNvbnRlbnQoKXtyZXR1cm4gbmV3IEooVS5mcm9tKHRoaXMubm9kZSksMCwwKX1lcSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHdlJiZ0LmFuY2hvcj09dGhpcy5hbmNob3J9dG9KU09OKCl7cmV0dXJue3R5cGU6Im5vZGUiLGFuY2hvcjp0aGlzLmFuY2hvcn19Z2V0Qm9va21hcmsoKXtyZXR1cm4gbmV3IFoxKHRoaXMuYW5jaG9yKX1zdGF0aWMgZnJvbUpTT04odCxuKXtpZih0eXBlb2Ygbi5hbmNob3IhPSJudW1iZXIiKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIGlucHV0IGZvciBOb2RlU2VsZWN0aW9uLmZyb21KU09OIik7cmV0dXJuIG5ldyB3ZSh0LnJlc29sdmUobi5hbmNob3IpKX1zdGF0aWMgY3JlYXRlKHQsbil7cmV0dXJuIG5ldyB3ZSh0LnJlc29sdmUobikpfXN0YXRpYyBpc1NlbGVjdGFibGUodCl7cmV0dXJuIXQuaXNUZXh0JiZ0LnR5cGUuc3BlYy5zZWxlY3RhYmxlIT09ITF9fXdlLnByb3RvdHlwZS52aXNpYmxlPSExO0JlLmpzb25JRCgibm9kZSIsd2UpO2NsYXNzIFoxe2NvbnN0cnVjdG9yKHQpe3RoaXMuYW5jaG9yPXR9bWFwKHQpe2xldHtkZWxldGVkOm4scG9zOnJ9PXQubWFwUmVzdWx0KHRoaXMuYW5jaG9yKTtyZXR1cm4gbj9uZXcgWmcocixyKTpuZXcgWjEocil9cmVzb2x2ZSh0KXtsZXQgbj10LnJlc29sdmUodGhpcy5hbmNob3IpLHI9bi5ub2RlQWZ0ZXI7cmV0dXJuIHImJndlLmlzU2VsZWN0YWJsZShyKT9uZXcgd2Uobik6QmUubmVhcihuKX19Y2xhc3MgcW4gZXh0ZW5kcyBCZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LnJlc29sdmUoMCksdC5yZXNvbHZlKHQuY29udGVudC5zaXplKSl9cmVwbGFjZSh0LG49Si5lbXB0eSl7aWYobj09Si5lbXB0eSl7dC5kZWxldGUoMCx0LmRvYy5jb250ZW50LnNpemUpO2xldCByPUJlLmF0U3RhcnQodC5kb2MpO3IuZXEodC5zZWxlY3Rpb24pfHx0LnNldFNlbGVjdGlvbihyKX1lbHNlIHN1cGVyLnJlcGxhY2UodCxuKX10b0pTT04oKXtyZXR1cm57dHlwZToiYWxsIn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgcW4odCl9bWFwKHQpe3JldHVybiBuZXcgcW4odCl9ZXEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBxbn1nZXRCb29rbWFyaygpe3JldHVybiBaOX19QmUuanNvbklEKCJhbGwiLHFuKTtjb25zdCBaOT17bWFwKCl7cmV0dXJuIHRoaXN9LHJlc29sdmUoZSl7cmV0dXJuIG5ldyBxbihlKX19O2Z1bmN0aW9uIFdsKGUsdCxuLHIsbyxpPSExKXtpZih0LmlubGluZUNvbnRlbnQpcmV0dXJuIFRlLmNyZWF0ZShlLG4pO2ZvcihsZXQgcz1yLShvPjA/MDoxKTtvPjA/czx0LmNoaWxkQ291bnQ6cz49MDtzKz1vKXtsZXQgYT10LmNoaWxkKHMpO2lmKGEuaXNBdG9tKXtpZighaSYmd2UuaXNTZWxlY3RhYmxlKGEpKXJldHVybiB3ZS5jcmVhdGUoZSxuLShvPDA/YS5ub2RlU2l6ZTowKSl9ZWxzZXtsZXQgbD1XbChlLGEsbitvLG88MD9hLmNoaWxkQ291bnQ6MCxvLGkpO2lmKGwpcmV0dXJuIGx9bis9YS5ub2RlU2l6ZSpvfXJldHVybiBudWxsfWZ1bmN0aW9uIFhFKGUsdCxuKXtsZXQgcj1lLnN0ZXBzLmxlbmd0aC0xO2lmKHI8dClyZXR1cm47bGV0IG89ZS5zdGVwc1tyXTtpZighKG8gaW5zdGFuY2VvZiBmbnx8byBpbnN0YW5jZW9mIFV0KSlyZXR1cm47bGV0IGk9ZS5tYXBwaW5nLm1hcHNbcl0scztpLmZvckVhY2goKGEsbCxjLHUpPT57cz09bnVsbCYmKHM9dSl9KSxlLnNldFNlbGVjdGlvbihCZS5uZWFyKGUuZG9jLnJlc29sdmUocyksbikpfWNvbnN0IFpFPTEsS3A9MixKRT00O2NsYXNzIEo5IGV4dGVuZHMgWTl7Y29uc3RydWN0b3IodCl7c3VwZXIodC5kb2MpLHRoaXMuY3VyU2VsZWN0aW9uRm9yPTAsdGhpcy51cGRhdGVkPTAsdGhpcy5tZXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50aW1lPURhdGUubm93KCksdGhpcy5jdXJTZWxlY3Rpb249dC5zZWxlY3Rpb24sdGhpcy5zdG9yZWRNYXJrcz10LnN0b3JlZE1hcmtzfWdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJTZWxlY3Rpb25Gb3I8dGhpcy5zdGVwcy5sZW5ndGgmJih0aGlzLmN1clNlbGVjdGlvbj10aGlzLmN1clNlbGVjdGlvbi5tYXAodGhpcy5kb2MsdGhpcy5tYXBwaW5nLnNsaWNlKHRoaXMuY3VyU2VsZWN0aW9uRm9yKSksdGhpcy5jdXJTZWxlY3Rpb25Gb3I9dGhpcy5zdGVwcy5sZW5ndGgpLHRoaXMuY3VyU2VsZWN0aW9ufXNldFNlbGVjdGlvbih0KXtpZih0LiRmcm9tLmRvYyE9dGhpcy5kb2MpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlNlbGVjdGlvbiBwYXNzZWQgdG8gc2V0U2VsZWN0aW9uIG11c3QgcG9pbnQgYXQgdGhlIGN1cnJlbnQgZG9jdW1lbnQiKTtyZXR1cm4gdGhpcy5jdXJTZWxlY3Rpb249dCx0aGlzLmN1clNlbGVjdGlvbkZvcj10aGlzLnN0ZXBzLmxlbmd0aCx0aGlzLnVwZGF0ZWQ9KHRoaXMudXBkYXRlZHxaRSkmfktwLHRoaXMuc3RvcmVkTWFya3M9bnVsbCx0aGlzfWdldCBzZWxlY3Rpb25TZXQoKXtyZXR1cm4odGhpcy51cGRhdGVkJlpFKT4wfXNldFN0b3JlZE1hcmtzKHQpe3JldHVybiB0aGlzLnN0b3JlZE1hcmtzPXQsdGhpcy51cGRhdGVkfD1LcCx0aGlzfWVuc3VyZU1hcmtzKHQpe3JldHVybiBZZS5zYW1lU2V0KHRoaXMuc3RvcmVkTWFya3N8fHRoaXMuc2VsZWN0aW9uLiRmcm9tLm1hcmtzKCksdCl8fHRoaXMuc2V0U3RvcmVkTWFya3ModCksdGhpc31hZGRTdG9yZWRNYXJrKHQpe3JldHVybiB0aGlzLmVuc3VyZU1hcmtzKHQuYWRkVG9TZXQodGhpcy5zdG9yZWRNYXJrc3x8dGhpcy5zZWxlY3Rpb24uJGhlYWQubWFya3MoKSkpfXJlbW92ZVN0b3JlZE1hcmsodCl7cmV0dXJuIHRoaXMuZW5zdXJlTWFya3ModC5yZW1vdmVGcm9tU2V0KHRoaXMuc3RvcmVkTWFya3N8fHRoaXMuc2VsZWN0aW9uLiRoZWFkLm1hcmtzKCkpKX1nZXQgc3RvcmVkTWFya3NTZXQoKXtyZXR1cm4odGhpcy51cGRhdGVkJktwKT4wfWFkZFN0ZXAodCxuKXtzdXBlci5hZGRTdGVwKHQsbiksdGhpcy51cGRhdGVkPXRoaXMudXBkYXRlZCZ+S3AsdGhpcy5zdG9yZWRNYXJrcz1udWxsfXNldFRpbWUodCl7cmV0dXJuIHRoaXMudGltZT10LHRoaXN9cmVwbGFjZVNlbGVjdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24ucmVwbGFjZSh0aGlzLHQpLHRoaXN9cmVwbGFjZVNlbGVjdGlvbldpdGgodCxuPSEwKXtsZXQgcj10aGlzLnNlbGVjdGlvbjtyZXR1cm4gbiYmKHQ9dC5tYXJrKHRoaXMuc3RvcmVkTWFya3N8fChyLmVtcHR5P3IuJGZyb20ubWFya3MoKTpyLiRmcm9tLm1hcmtzQWNyb3NzKHIuJHRvKXx8WWUubm9uZSkpKSxyLnJlcGxhY2VXaXRoKHRoaXMsdCksdGhpc31kZWxldGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24ucmVwbGFjZSh0aGlzKSx0aGlzfWluc2VydFRleHQodCxuLHIpe2xldCBvPXRoaXMuZG9jLnR5cGUuc2NoZW1hO2lmKG49PW51bGwpcmV0dXJuIHQ/dGhpcy5yZXBsYWNlU2VsZWN0aW9uV2l0aChvLnRleHQodCksITApOnRoaXMuZGVsZXRlU2VsZWN0aW9uKCk7e2lmKHI9PW51bGwmJihyPW4pLHI9cj8/biwhdClyZXR1cm4gdGhpcy5kZWxldGVSYW5nZShuLHIpO2xldCBpPXRoaXMuc3RvcmVkTWFya3M7aWYoIWkpe2xldCBzPXRoaXMuZG9jLnJlc29sdmUobik7aT1yPT1uP3MubWFya3MoKTpzLm1hcmtzQWNyb3NzKHRoaXMuZG9jLnJlc29sdmUocikpfXJldHVybiB0aGlzLnJlcGxhY2VSYW5nZVdpdGgobixyLG8udGV4dCh0LGkpKSx0aGlzLnNlbGVjdGlvbi5lbXB0eXx8dGhpcy5zZXRTZWxlY3Rpb24oQmUubmVhcih0aGlzLnNlbGVjdGlvbi4kdG8pKSx0aGlzfX1zZXRNZXRhKHQsbil7cmV0dXJuIHRoaXMubWV0YVt0eXBlb2YgdD09InN0cmluZyI/dDp0LmtleV09bix0aGlzfWdldE1ldGEodCl7cmV0dXJuIHRoaXMubWV0YVt0eXBlb2YgdD09InN0cmluZyI/dDp0LmtleV19Z2V0IGlzR2VuZXJpYygpe2ZvcihsZXQgdCBpbiB0aGlzLm1ldGEpcmV0dXJuITE7cmV0dXJuITB9c2Nyb2xsSW50b1ZpZXcoKXtyZXR1cm4gdGhpcy51cGRhdGVkfD1KRSx0aGlzfWdldCBzY3JvbGxlZEludG9WaWV3KCl7cmV0dXJuKHRoaXMudXBkYXRlZCZKRSk+MH19ZnVuY3Rpb24gUUUoZSx0KXtyZXR1cm4hdHx8IWU/ZTplLmJpbmQodCl9Y2xhc3MgWHV7Y29uc3RydWN0b3IodCxuLHIpe3RoaXMubmFtZT10LHRoaXMuaW5pdD1RRShuLmluaXQsciksdGhpcy5hcHBseT1RRShuLmFwcGx5LHIpfX1jb25zdCBROT1bbmV3IFh1KCJkb2MiLHtpbml0KGUpe3JldHVybiBlLmRvY3x8ZS5zY2hlbWEudG9wTm9kZVR5cGUuY3JlYXRlQW5kRmlsbCgpfSxhcHBseShlKXtyZXR1cm4gZS5kb2N9fSksbmV3IFh1KCJzZWxlY3Rpb24iLHtpbml0KGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9ufHxCZS5hdFN0YXJ0KHQuZG9jKX0sYXBwbHkoZSl7cmV0dXJuIGUuc2VsZWN0aW9ufX0pLG5ldyBYdSgic3RvcmVkTWFya3MiLHtpbml0KGUpe3JldHVybiBlLnN0b3JlZE1hcmtzfHxudWxsfSxhcHBseShlLHQsbixyKXtyZXR1cm4gci5zZWxlY3Rpb24uJGN1cnNvcj9lLnN0b3JlZE1hcmtzOm51bGx9fSksbmV3IFh1KCJzY3JvbGxUb1NlbGVjdGlvbiIse2luaXQoKXtyZXR1cm4gMH0sYXBwbHkoZSx0KXtyZXR1cm4gZS5zY3JvbGxlZEludG9WaWV3P3QrMTp0fX0pXTtjbGFzcyBUeXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2NoZW1hPXQsdGhpcy5wbHVnaW5zPVtdLHRoaXMucGx1Z2luc0J5S2V5PU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5maWVsZHM9UTkuc2xpY2UoKSxuJiZuLmZvckVhY2gocj0+e2lmKHRoaXMucGx1Z2luc0J5S2V5W3Iua2V5XSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQWRkaW5nIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgYSBrZXllZCBwbHVnaW4gKCIrci5rZXkrIikiKTt0aGlzLnBsdWdpbnMucHVzaChyKSx0aGlzLnBsdWdpbnNCeUtleVtyLmtleV09cixyLnNwZWMuc3RhdGUmJnRoaXMuZmllbGRzLnB1c2gobmV3IFh1KHIua2V5LHIuc3BlYy5zdGF0ZSxyKSl9KX19Y2xhc3MgSWF7Y29uc3RydWN0b3IodCl7dGhpcy5jb25maWc9dH1nZXQgc2NoZW1hKCl7cmV0dXJuIHRoaXMuY29uZmlnLnNjaGVtYX1nZXQgcGx1Z2lucygpe3JldHVybiB0aGlzLmNvbmZpZy5wbHVnaW5zfWFwcGx5KHQpe3JldHVybiB0aGlzLmFwcGx5VHJhbnNhY3Rpb24odCkuc3RhdGV9ZmlsdGVyVHJhbnNhY3Rpb24odCxuPS0xKXtmb3IobGV0IHI9MDtyPHRoaXMuY29uZmlnLnBsdWdpbnMubGVuZ3RoO3IrKylpZihyIT1uKXtsZXQgbz10aGlzLmNvbmZpZy5wbHVnaW5zW3JdO2lmKG8uc3BlYy5maWx0ZXJUcmFuc2FjdGlvbiYmIW8uc3BlYy5maWx0ZXJUcmFuc2FjdGlvbi5jYWxsKG8sdCx0aGlzKSlyZXR1cm4hMX1yZXR1cm4hMH1hcHBseVRyYW5zYWN0aW9uKHQpe2lmKCF0aGlzLmZpbHRlclRyYW5zYWN0aW9uKHQpKXJldHVybntzdGF0ZTp0aGlzLHRyYW5zYWN0aW9uczpbXX07bGV0IG49W3RdLHI9dGhpcy5hcHBseUlubmVyKHQpLG89bnVsbDtmb3IoOzspe2xldCBpPSExO2ZvcihsZXQgcz0wO3M8dGhpcy5jb25maWcucGx1Z2lucy5sZW5ndGg7cysrKXtsZXQgYT10aGlzLmNvbmZpZy5wbHVnaW5zW3NdO2lmKGEuc3BlYy5hcHBlbmRUcmFuc2FjdGlvbil7bGV0IGw9bz9vW3NdLm46MCxjPW8/b1tzXS5zdGF0ZTp0aGlzLHU9bDxuLmxlbmd0aCYmYS5zcGVjLmFwcGVuZFRyYW5zYWN0aW9uLmNhbGwoYSxsP24uc2xpY2UobCk6bixjLHIpO2lmKHUmJnIuZmlsdGVyVHJhbnNhY3Rpb24odSxzKSl7aWYodS5zZXRNZXRhKCJhcHBlbmRlZFRyYW5zYWN0aW9uIix0KSwhbyl7bz1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuY29uZmlnLnBsdWdpbnMubGVuZ3RoO2QrKylvLnB1c2goZDxzP3tzdGF0ZTpyLG46bi5sZW5ndGh9OntzdGF0ZTp0aGlzLG46MH0pfW4ucHVzaCh1KSxyPXIuYXBwbHlJbm5lcih1KSxpPSEwfW8mJihvW3NdPXtzdGF0ZTpyLG46bi5sZW5ndGh9KX19aWYoIWkpcmV0dXJue3N0YXRlOnIsdHJhbnNhY3Rpb25zOm59fX1hcHBseUlubmVyKHQpe2lmKCF0LmJlZm9yZS5lcSh0aGlzLmRvYykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkFwcGx5aW5nIGEgbWlzbWF0Y2hlZCB0cmFuc2FjdGlvbiIpO2xldCBuPW5ldyBJYSh0aGlzLmNvbmZpZykscj10aGlzLmNvbmZpZy5maWVsZHM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBpPXJbb107bltpLm5hbWVdPWkuYXBwbHkodCx0aGlzW2kubmFtZV0sdGhpcyxuKX1yZXR1cm4gbn1nZXQgdHIoKXtyZXR1cm4gbmV3IEo5KHRoaXMpfXN0YXRpYyBjcmVhdGUodCl7bGV0IG49bmV3IFR5KHQuZG9jP3QuZG9jLnR5cGUuc2NoZW1hOnQuc2NoZW1hLHQucGx1Z2lucykscj1uZXcgSWEobik7Zm9yKGxldCBvPTA7bzxuLmZpZWxkcy5sZW5ndGg7bysrKXJbbi5maWVsZHNbb10ubmFtZV09bi5maWVsZHNbb10uaW5pdCh0LHIpO3JldHVybiByfXJlY29uZmlndXJlKHQpe2xldCBuPW5ldyBUeSh0aGlzLnNjaGVtYSx0LnBsdWdpbnMpLHI9bi5maWVsZHMsbz1uZXcgSWEobik7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2xldCBzPXJbaV0ubmFtZTtvW3NdPXRoaXMuaGFzT3duUHJvcGVydHkocyk/dGhpc1tzXTpyW2ldLmluaXQodCxvKX1yZXR1cm4gb310b0pTT04odCl7bGV0IG49e2RvYzp0aGlzLmRvYy50b0pTT04oKSxzZWxlY3Rpb246dGhpcy5zZWxlY3Rpb24udG9KU09OKCl9O2lmKHRoaXMuc3RvcmVkTWFya3MmJihuLnN0b3JlZE1hcmtzPXRoaXMuc3RvcmVkTWFya3MubWFwKHI9PnIudG9KU09OKCkpKSx0JiZ0eXBlb2YgdD09Im9iamVjdCIpZm9yKGxldCByIGluIHQpe2lmKHI9PSJkb2MifHxyPT0ic2VsZWN0aW9uIil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVGhlIEpTT04gZmllbGRzIGBkb2NgIGFuZCBgc2VsZWN0aW9uYCBhcmUgcmVzZXJ2ZWQiKTtsZXQgbz10W3JdLGk9by5zcGVjLnN0YXRlO2kmJmkudG9KU09OJiYobltyXT1pLnRvSlNPTi5jYWxsKG8sdGhpc1tvLmtleV0pKX1yZXR1cm4gbn1zdGF0aWMgZnJvbUpTT04odCxuLHIpe2lmKCFuKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIGlucHV0IGZvciBFZGl0b3JTdGF0ZS5mcm9tSlNPTiIpO2lmKCF0LnNjaGVtYSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZWQgY29uZmlnIGZpZWxkICdzY2hlbWEnIG1pc3NpbmciKTtsZXQgbz1uZXcgVHkodC5zY2hlbWEsdC5wbHVnaW5zKSxpPW5ldyBJYShvKTtyZXR1cm4gby5maWVsZHMuZm9yRWFjaChzPT57aWYocy5uYW1lPT0iZG9jIilpLmRvYz1Ccy5mcm9tSlNPTih0LnNjaGVtYSxuLmRvYyk7ZWxzZSBpZihzLm5hbWU9PSJzZWxlY3Rpb24iKWkuc2VsZWN0aW9uPUJlLmZyb21KU09OKGkuZG9jLG4uc2VsZWN0aW9uKTtlbHNlIGlmKHMubmFtZT09InN0b3JlZE1hcmtzIiluLnN0b3JlZE1hcmtzJiYoaS5zdG9yZWRNYXJrcz1uLnN0b3JlZE1hcmtzLm1hcCh0LnNjaGVtYS5tYXJrRnJvbUpTT04pKTtlbHNle2lmKHIpZm9yKGxldCBhIGluIHIpe2xldCBsPXJbYV0sYz1sLnNwZWMuc3RhdGU7aWYobC5rZXk9PXMubmFtZSYmYyYmYy5mcm9tSlNPTiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sYSkpe2lbcy5uYW1lXT1jLmZyb21KU09OLmNhbGwobCx0LG5bYV0saSk7cmV0dXJufX1pW3MubmFtZV09cy5pbml0KHQsaSl9fSksaX19ZnVuY3Rpb24gUFIoZSx0LG4pe2ZvcihsZXQgciBpbiBlKXtsZXQgbz1lW3JdO28gaW5zdGFuY2VvZiBGdW5jdGlvbj9vPW8uYmluZCh0KTpyPT0iaGFuZGxlRE9NRXZlbnRzIiYmKG89UFIobyx0LHt9KSksbltyXT1vfXJldHVybiBufWNsYXNzIEhpe2NvbnN0cnVjdG9yKHQpe3RoaXMuc3BlYz10LHRoaXMucHJvcHM9e30sdC5wcm9wcyYmUFIodC5wcm9wcyx0aGlzLHRoaXMucHJvcHMpLHRoaXMua2V5PXQua2V5P3Qua2V5LmtleTpNUigicGx1Z2luIil9Z2V0U3RhdGUodCl7cmV0dXJuIHRbdGhpcy5rZXldfX1jb25zdCBQeT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIE1SKGUpe3JldHVybiBlIGluIFB5P2UrIiQiKyArK1B5W2VdOihQeVtlXT0wLGUrIiQiKX1jbGFzcyBjdXtjb25zdHJ1Y3Rvcih0PSJrZXkiKXt0aGlzLmtleT1NUih0KX1nZXQodCl7cmV0dXJuIHQuY29uZmlnLnBsdWdpbnNCeUtleVt0aGlzLmtleV19Z2V0U3RhdGUodCl7cmV0dXJuIHRbdGhpcy5rZXldfX1mdW5jdGlvbiBSUigpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50Om51bGx9ZnVuY3Rpb24gTlIoZSx0KXtpZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuW2VdO3ZhciBuPVtlXTt0eXBlb2YgdD09InN0cmluZyJ8fEFycmF5LmlzQXJyYXkodCk/dD17YnJhY2tldHM6dH06dHx8KHQ9e30pO3ZhciByPXQuYnJhY2tldHM/QXJyYXkuaXNBcnJheSh0LmJyYWNrZXRzKT90LmJyYWNrZXRzOlt0LmJyYWNrZXRzXTpbInt9IiwiW10iLCIoKSJdLG89dC5lc2NhcGV8fCJfX18iLGk9ISF0LmZsYXQ7ci5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW5ldyBSZWdFeHAoWyJcXCIsbFswXSwiW15cXCIsbFswXSwiXFwiLGxbMV0sIl0qXFwiLGxbMV1dLmpvaW4oIiIpKSx1PVtdO2Z1bmN0aW9uIGQoZixwLG0pe3ZhciBnPW4ucHVzaChmLnNsaWNlKGxbMF0ubGVuZ3RoLC1sWzFdLmxlbmd0aCkpLTE7cmV0dXJuIHUucHVzaChnKSxvK2crb31uLmZvckVhY2goZnVuY3Rpb24oZixwKXtmb3IodmFyIG0sZz0wO2YhPW07KWlmKG09ZixmPWYucmVwbGFjZShjLGQpLGcrKz4xZTQpdGhyb3cgRXJyb3IoIlJlZmVyZW5jZXMgaGF2ZSBjaXJjdWxhciBkZXBlbmRlbmN5LiBQbGVhc2UsIGNoZWNrIHRoZW0uIik7bltwXT1mfSksdT11LnJldmVyc2UoKSxuPW4ubWFwKGZ1bmN0aW9uKGYpe3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24ocCl7Zj1mLnJlcGxhY2UobmV3IFJlZ0V4cCgiKFxcIitvK3ArIlxcIitvKyIpIiwiZyIpLGxbMF0rIiQxIitsWzFdKX0pLGZ9KX0pO3ZhciBzPW5ldyBSZWdFeHAoIlxcIitvKyIoWzAtOV0rKVxcIitvKTtmdW5jdGlvbiBhKGwsYyx1KXtmb3IodmFyIGQ9W10sZixwPTA7Zj1zLmV4ZWMobCk7KXtpZihwKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluIHBhcmVudGhlc2lzIik7ZC5wdXNoKGwuc2xpY2UoMCxmLmluZGV4KSksZC5wdXNoKGEoY1tmWzFdXSxjKSksbD1sLnNsaWNlKGYuaW5kZXgrZlswXS5sZW5ndGgpfXJldHVybiBkLnB1c2gobCksZH1yZXR1cm4gaT9uOmEoblswXSxuKX1mdW5jdGlvbiAkUihlLHQpe2lmKHQmJnQuZmxhdCl7dmFyIG49dCYmdC5lc2NhcGV8fCJfX18iLHI9ZVswXSxvO2lmKCFyKXJldHVybiIiO2Zvcih2YXIgaT1uZXcgUmVnRXhwKCJcXCIrbisiKFswLTldKylcXCIrbikscz0wO3IhPW87KXtpZihzKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluICIrZSk7bz1yLHI9ci5yZXBsYWNlKGksYSl9cmV0dXJuIHJ9cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uIGwoYyx1KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KSYmKHU9dS5yZWR1Y2UobCwiIikpLGMrdX0sIiIpO2Z1bmN0aW9uIGEobCxjKXtpZihlW2NdPT1udWxsKXRocm93IEVycm9yKCJSZWZlcmVuY2UgIitjKyJpcyB1bmRlZmluZWQiKTtyZXR1cm4gZVtjXX19ZnVuY3Rpb24gQVIoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8kUihlLHQpOk5SKGUsdCl9QVIucGFyc2U9TlI7QVIuc3RyaW5naWZ5PSRSO2NvbnN0IGVGPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQuY29weS5sYWJlbCIsbWVzc2FnZToiQ29weSIsY29tbWVudDoiTGFiZWwgZm9yIGNvcHkgY29tbWFuZC4ifSx0Rj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLmNvcHkuZGVzY3JpcHRpb24iLG1lc3NhZ2U6IkNvcHkgdGhlIHNlbGVjdGVkIHRleHQiLGNvbW1lbnQ6IkRlc2NyaXB0aW9uIGZvciBjb3B5IGNvbW1hbmQuIn0sbkY9e2lkOiJleHRlbnNpb24uY29tbWFuZC5jdXQubGFiZWwiLG1lc3NhZ2U6IkN1dCIsY29tbWVudDoiTGFiZWwgZm9yIGN1dCBjb21tYW5kLiJ9LHJGPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQuY3V0LmRlc2NyaXB0aW9uIixtZXNzYWdlOiJDdXQgdGhlIHNlbGVjdGVkIHRleHQiLGNvbW1lbnQ6IkRlc2NyaXB0aW9uIGZvciBjdXQgY29tbWFuZC4ifSxvRj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnBhc3RlLmxhYmVsIixtZXNzYWdlOiJQYXN0ZSIsY29tbWVudDoiTGFiZWwgZm9yIHBhc3RlIGNvbW1hbmQuIn0saUY9e2lkOiJleHRlbnNpb24uY29tbWFuZC5wYXN0ZS5kZXNjcmlwdGlvbiIsbWVzc2FnZToiUGFzdGUgY29udGVudCBpbnRvIHRoZSBlZGl0b3IiLGNvbW1lbnQ6IkRlc2NyaXB0aW9uIGZvciBwYXN0ZSBjb21tYW5kLiJ9LHNGPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQuc2VsZWN0LWFsbC5sYWJlbCIsbWVzc2FnZToiU2VsZWN0IGFsbCIsY29tbWVudDoiTGFiZWwgZm9yIHNlbGVjdCBhbGwgY29tbWFuZC4ifSxhRj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnNlbGVjdC1hbGwuZGVzY3JpcHRpb24iLG1lc3NhZ2U6IlNlbGVjdCBhbGwgY29udGVudCB3aXRoaW4gdGhlIGVkaXRvciIsY29tbWVudDoiRGVzY3JpcHRpb24gZm9yIHNlbGVjdCBhbGwgY29tbWFuZC4ifTt2YXIgUXM9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQ09QWV9ERVNDUklQVElPTjp0RixDT1BZX0xBQkVMOmVGLENVVF9ERVNDUklQVElPTjpyRixDVVRfTEFCRUw6bkYsUEFTVEVfREVTQ1JJUFRJT046aUYsUEFTVEVfTEFCRUw6b0YsU0VMRUNUX0FMTF9ERVNDUklQVElPTjphRixTRUxFQ1RfQUxMX0xBQkVMOnNGfSk7Y29uc3QgbEY9e2lkOiJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtYm9sZC5sYWJlbCIsbWVzc2FnZToiQm9sZCIsY29tbWVudDoiTGFiZWwgZm9yIGJvbGQgZm9ybWF0dGluZyBjb21tYW5kLiJ9LGNGPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWJvbGQuZGVzY3JpcHRpb24iLG1lc3NhZ2U6IkFkZCBib2xkIGZvcm1hdHRpbmcgdG8gdGhlIHNlbGVjdGVkIHRleHQiLGNvbW1lbnQ6IkRlc2NyaXB0aW9uIGZvciBib2xkIGZvcm1hdHRpbmcgY29tbWFuZC4ifTt2YXIgZV89T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsREVTQ1JJUFRJT046Y0YsTEFCRUw6bEZ9KTtjb25zdCB1Rj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1oZWFkaW5nLmxhYmVsIixtZXNzYWdlOmB7bGV2ZWwsIHNlbGVjdCwgMSB7SGVhZGluZyAxfQoyIHtIZWFkaW5nIDJ9CjMge0hlYWRpbmcgM30KNCB7SGVhZGluZyA0fQo1IHtIZWFkaW5nIDV9CjYge0hlYWRpbmcgNn0Kb3RoZXIge0hlYWRpbmd9fWAsY29tbWVudDoiTGFiZWwgZm9yIGhlYWRpbmcgY29tbWFuZCB3aXRoIHN1cHBvcnQgZm9yIGxldmVscy4ifTt2YXIgZEY9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTEFCRUw6dUZ9KTtjb25zdCBmRj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnVuZG8ubGFiZWwiLG1lc3NhZ2U6IlVuZG8iLGNvbW1lbnQ6IkxhYmVsIGZvciB1bmRvLiJ9LHBGPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQudW5kby5kZXNjcmlwdGlvbiIsbWVzc2FnZToiVW5kbyB0aGUgbW9zdCByZWNlbnQgYWN0aW9uIixjb21tZW50OiJEZXNjcmlwdGlvbiBmb3IgdW5kby4ifSxoRj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnJlZG8ubGFiZWwiLG1lc3NhZ2U6IlJlZG8iLGNvbW1lbnQ6IkxhYmVsIGZvciByZWRvLiJ9LG1GPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQucmVkby5kZXNjcmlwdGlvbiIsbWVzc2FnZToiUmVkbyB0aGUgbW9zdCByZWNlbnQgYWN0aW9uIixjb21tZW50OiJEZXNjcmlwdGlvbiBmb3IgcmVkby4ifTt2YXIgUm09T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsUkVET19ERVNDUklQVElPTjptRixSRURPX0xBQkVMOmhGLFVORE9fREVTQ1JJUFRJT046cEYsVU5ET19MQUJFTDpmRn0pO2NvbnN0IGdGPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWl0YWxpYy5sYWJlbCIsbWVzc2FnZToiSXRhbGljIixjb21tZW50OiJMYWJlbCBmb3IgaXRhbGljIGZvcm1hdHRpbmcgY29tbWFuZC4ifSx2Rj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1pdGFsaWMuZGVzY3JpcHRpb24iLG1lc3NhZ2U6Ikl0YWxpY2l6ZSB0aGUgc2VsZWN0ZWQgdGV4dCIsY29tbWVudDoiRGVzY3JpcHRpb24gZm9yIGl0YWxpYyBmb3JtYXR0aW5nIGNvbW1hbmQuIn07dmFyIHRfPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFU0NSSVBUSU9OOnZGLExBQkVMOmdGfSk7Y29uc3QgeUY9e2lkOiJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtb3JkZXJlZC1saXN0LmxhYmVsIixtZXNzYWdlOiJPcmRlcmVkIGxpc3QiLGNvbW1lbnQ6IkxhYmVsIGZvciBpbnNlcnRpbmcgYW4gb3JkZXJlZCBsaXN0IGludG8gdGhlIGVkaXRvci4ifSx4Rj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1idWxsZXQtbGlzdC5kZXNjcmlwdGlvbiIsbWVzc2FnZToiQnVsbGV0ZWQgbGlzdCIsY29tbWVudDoiRGVzY3JpcHRpb24gZm9yIGluc2VydGluZyBhIGJ1bGxldCBsaXN0IGludG8gdGhlIGVkaXRvci4ifSxiRj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS10YXNrLWxpc3QuZGVzY3JpcHRpb24iLG1lc3NhZ2U6IlRhc2tlZCBsaXN0Iixjb21tZW50OiJEZXNjcmlwdGlvbiBmb3IgaW5zZXJ0aW5nIGEgdGFzayBsaXN0IGludG8gdGhlIGVkaXRvci4ifTt2YXIgSjE9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQlVMTEVUX0xJU1RfTEFCRUw6eEYsT1JERVJFRF9MSVNUX0xBQkVMOnlGLFRBU0tfTElTVF9MQUJFTDpiRn0pO2NvbnN0IHdGPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQuaW5zZXJ0LXBhcmFncmFwaC5sYWJlbCIsbWVzc2FnZToiSW5zZXJ0IFBhcmFncmFwaCIsY29tbWVudDoiTGFiZWwgZm9yIGluc2VydGluZyBhIHBhcmFncmFwaC4ifSxTRj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLmluc2VydC1wYXJhZ3JhcGguZGVzY3JpcHRpb24iLG1lc3NhZ2U6Ikluc2VydCBhIG5ldyBwYXJhZ3JhcGgiLGNvbW1lbnQ6IkRlc2NyaXB0aW9uIGZvciBpbnNlcnRpbmcgYSBwYXJhZ3JhcGguIn0sa0Y9e2lkOiJleHRlbnNpb24uY29tbWFuZC5jb252ZXJ0LXBhcmFncmFwaC5sYWJlbCIsbWVzc2FnZToiQ29udmVydCBQYXJhZ3JhcGgiLGNvbW1lbnQ6IkxhYmVsIGZvciBjb252ZXJ0aW5nIHRoZSBjdXJyZW50IG5vZGUgaW50byBhIHBhcmFncmFwaC4ifSxFRj17aWQ6ImV4dGVuc2lvbi5jb21tYW5kLmNvbnZlcnQtcGFyYWdyYXBoLmRlc2NyaXB0aW9uIixtZXNzYWdlOiJDb252ZXJ0IGN1cnJlbnQgYmxvY2sgaW50byBhIHBhcmFncmFwaCBibG9jay4iLGNvbW1lbnQ6IkRlc2NyaXB0aW9uIGZvciBjb252ZXJ0aW5nIGEgcGFyYWdyYXBoLiJ9O3ZhciBObT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxDT05WRVJUX0RFU0NSSVBUSU9OOkVGLENPTlZFUlRfTEFCRUw6a0YsSU5TRVJUX0RFU0NSSVBUSU9OOlNGLElOU0VSVF9MQUJFTDp3Rn0pO2NvbnN0IF9GPXtpZDoiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLXN0cmlrZS5sYWJlbCIsbWVzc2FnZToiU3RyaWtldGhyb3VnaCIsY29tbWVudDoiTGFiZWwgZm9yIHN0cmlrZSBmb3JtYXR0aW5nIGNvbW1hbmQuIn0sQ0Y9e2lkOiJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtc3RyaWtlLmRlc2NyaXB0aW9uIixtZXNzYWdlOiJTdHJpa2V0aHJvdWdoIHRoZSBzZWxlY3RlZCB0ZXh0Iixjb21tZW50OiJEZXNjcmlwdGlvbiBmb3Igc3RyaWtlIGZvcm1hdHRpbmcgY29tbWFuZC4ifTt2YXIgbl89T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsREVTQ1JJUFRJT046Q0YsTEFCRUw6X0Z9KTtjbGFzcyByb3tjb25zdHJ1Y3Rvcih0LG4scj17fSl7dGhpcy5tYXRjaD10LHRoaXMubWF0Y2g9dCx0aGlzLmhhbmRsZXI9dHlwZW9mIG49PSJzdHJpbmciP09GKG4pOm4sdGhpcy51bmRvYWJsZT1yLnVuZG9hYmxlIT09ITF9fWZ1bmN0aW9uIE9GKGUpe3JldHVybiBmdW5jdGlvbih0LG4scixvKXtsZXQgaT1lO2lmKG5bMV0pe2xldCBzPW5bMF0ubGFzdEluZGV4T2YoblsxXSk7aSs9blswXS5zbGljZShzK25bMV0ubGVuZ3RoKSxyKz1zO2xldCBhPXItbzthPjAmJihpPW5bMF0uc2xpY2Uocy1hLHMpK2kscj1vKX1yZXR1cm4gdC50ci5pbnNlcnRUZXh0KGkscixvKX19Y29uc3QgVEY9NTAwO2Z1bmN0aW9uIFBGKHtydWxlczplfSl7bGV0IHQ9bmV3IEhpKHtzdGF0ZTp7aW5pdCgpe3JldHVybiBudWxsfSxhcHBseShuLHIpe2xldCBvPW4uZ2V0TWV0YSh0aGlzKTtyZXR1cm4gb3x8KG4uc2VsZWN0aW9uU2V0fHxuLmRvY0NoYW5nZWQ/bnVsbDpyKX19LHByb3BzOntoYW5kbGVUZXh0SW5wdXQobixyLG8saSl7cmV0dXJuIHJfKG4scixvLGksZSx0KX0saGFuZGxlRE9NRXZlbnRzOntjb21wb3NpdGlvbmVuZDpuPT57c2V0VGltZW91dCgoKT0+e2xldHskY3Vyc29yOnJ9PW4uc3RhdGUuc2VsZWN0aW9uO3ImJnJfKG4sci5wb3Msci5wb3MsIiIsZSx0KX0pfX19LGlzSW5wdXRSdWxlczohMH0pO3JldHVybiB0fWZ1bmN0aW9uIHJfKGUsdCxuLHIsbyxpKXtpZihlLmNvbXBvc2luZylyZXR1cm4hMTtsZXQgcz1lLnN0YXRlLGE9cy5kb2MucmVzb2x2ZSh0KTtpZihhLnBhcmVudC50eXBlLnNwZWMuY29kZSlyZXR1cm4hMTtsZXQgbD1hLnBhcmVudC50ZXh0QmV0d2VlbihNYXRoLm1heCgwLGEucGFyZW50T2Zmc2V0LVRGKSxhLnBhcmVudE9mZnNldCxudWxsLCLvv7wiKStyO2ZvcihsZXQgYz0wO2M8by5sZW5ndGg7YysrKXtsZXQgdT1vW2NdLGQ9dS5tYXRjaC5leGVjKGwpLGY9ZCYmdS5oYW5kbGVyKHMsZCx0LShkWzBdLmxlbmd0aC1yLmxlbmd0aCksbik7aWYoZilyZXR1cm4gdS51bmRvYWJsZSYmZi5zZXRNZXRhKGkse3RyYW5zZm9ybTpmLGZyb206dCx0bzpuLHRleHQ6cn0pLGUuZGlzcGF0Y2goZiksITB9cmV0dXJuITF9Y29uc3QgTUY9KGUsdCk9PntsZXQgbj1lLnBsdWdpbnM7Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspe2xldCBvPW5bcl0saTtpZihvLnNwZWMuaXNJbnB1dFJ1bGVzJiYoaT1vLmdldFN0YXRlKGUpKSl7aWYodCl7bGV0IHM9ZS50cixhPWkudHJhbnNmb3JtO2ZvcihsZXQgbD1hLnN0ZXBzLmxlbmd0aC0xO2w+PTA7bC0tKXMuc3RlcChhLnN0ZXBzW2xdLmludmVydChhLmRvY3NbbF0pKTtpZihpLnRleHQpe2xldCBsPXMuZG9jLnJlc29sdmUoaS5mcm9tKS5tYXJrcygpO3MucmVwbGFjZVdpdGgoaS5mcm9tLGkudG8sZS5zY2hlbWEudGV4dChpLnRleHQsbCkpfWVsc2Ugcy5kZWxldGUoaS5mcm9tLGkudG8pO3Qocyl9cmV0dXJuITB9fXJldHVybiExfTtuZXcgcm8oLy0tJC8sIuKAlCIpO25ldyBybygvXC5cLlwuJC8sIuKApiIpO25ldyBybygvKD86XnxbXHNce1xbXChcPCciXHUyMDE4XHUyMDFDXSkoIikkLywi4oCcIik7bmV3IHJvKC8iJC8sIuKAnSIpO25ldyBybygvKD86XnxbXHNce1xbXChcPCciXHUyMDE4XHUyMDFDXSkoJykkLywi4oCYIik7bmV3IHJvKC8nJC8sIuKAmSIpO2Z1bmN0aW9uIFExKGUsdCxuPW51bGwscil7cmV0dXJuIG5ldyBybyhlLChvLGkscyxhKT0+e2xldCBsPW4gaW5zdGFuY2VvZiBGdW5jdGlvbj9uKGkpOm4sYz1vLnRyLmRlbGV0ZShzLGEpLHU9Yy5kb2MucmVzb2x2ZShzKSxkPXUuYmxvY2tSYW5nZSgpLGY9ZCYmWTEoZCx0LGwpO2lmKCFmKXJldHVybiBudWxsO2Mud3JhcChkLGYpO2xldCBwPWMuZG9jLnJlc29sdmUocy0xKS5ub2RlQmVmb3JlO3JldHVybiBwJiZwLnR5cGU9PXQmJnNwKGMuZG9jLHMtMSkmJighcnx8cihpLHApKSYmYy5qb2luKHMtMSksY30pfWZ1bmN0aW9uIFJGKGUsdCxuPW51bGwpe3JldHVybiBuZXcgcm8oZSwocixvLGkscyk9PntsZXQgYT1yLmRvYy5yZXNvbHZlKGkpLGw9biBpbnN0YW5jZW9mIEZ1bmN0aW9uP24obyk6bjtyZXR1cm4gYS5ub2RlKC0xKS5jYW5SZXBsYWNlV2l0aChhLmluZGV4KC0xKSxhLmluZGV4QWZ0ZXIoLTEpLHQpP3IudHIuZGVsZXRlKGkscykuc2V0QmxvY2tUeXBlKGksaSx0LGwpOm51bGx9KX1jb25zdCBWbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDs7dCsrKWlmKGU9ZS5wcmV2aW91c1NpYmxpbmcsIWUpcmV0dXJuIHR9LHdmPWZ1bmN0aW9uKGUpe2xldCB0PWUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQubm9kZVR5cGU9PTExP3QuaG9zdDp0fTtsZXQgb189bnVsbDtjb25zdCB5aT1mdW5jdGlvbihlLHQsbil7bGV0IHI9b198fChvXz1kb2N1bWVudC5jcmVhdGVSYW5nZSgpKTtyZXR1cm4gci5zZXRFbmQoZSxuPz9lLm5vZGVWYWx1ZS5sZW5ndGgpLHIuc2V0U3RhcnQoZSx0fHwwKSxyfSxsbD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbiYmKGlfKGUsdCxuLHIsLTEpfHxpXyhlLHQsbixyLDEpKX0sTkY9L14oaW1nfGJyfGlucHV0fHRleHRhcmVhfGhyKSQvaTtmdW5jdGlvbiBpXyhlLHQsbixyLG8pe2Zvcig7Oyl7aWYoZT09biYmdD09cilyZXR1cm4hMDtpZih0PT0obzwwPzA6SG8oZSkpKXtsZXQgaT1lLnBhcmVudE5vZGU7aWYoIWl8fGkubm9kZVR5cGUhPTF8fGV3KGUpfHxORi50ZXN0KGUubm9kZU5hbWUpfHxlLmNvbnRlbnRFZGl0YWJsZT09ImZhbHNlIilyZXR1cm4hMTt0PVZuKGUpKyhvPDA/MDoxKSxlPWl9ZWxzZSBpZihlLm5vZGVUeXBlPT0xKXtpZihlPWUuY2hpbGROb2Rlc1t0KyhvPDA/LTE6MCldLGUuY29udGVudEVkaXRhYmxlPT0iZmFsc2UiKXJldHVybiExO3Q9bzwwP0hvKGUpOjB9ZWxzZSByZXR1cm4hMX19ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIGUubm9kZVR5cGU9PTM/ZS5ub2RlVmFsdWUubGVuZ3RoOmUuY2hpbGROb2Rlcy5sZW5ndGh9ZnVuY3Rpb24gJEYoZSx0LG4pe2ZvcihsZXQgcj10PT0wLG89dD09SG8oZSk7cnx8bzspe2lmKGU9PW4pcmV0dXJuITA7bGV0IGk9Vm4oZSk7aWYoZT1lLnBhcmVudE5vZGUsIWUpcmV0dXJuITE7cj1yJiZpPT0wLG89byYmaT09SG8oZSl9fWZ1bmN0aW9uIGV3KGUpe2xldCB0O2ZvcihsZXQgbj1lO24mJiEodD1uLnBtVmlld0Rlc2MpO249bi5wYXJlbnROb2RlKTtyZXR1cm4gdCYmdC5ub2RlJiZ0Lm5vZGUuaXNCbG9jayYmKHQuZG9tPT1lfHx0LmNvbnRlbnRET009PWUpfWNvbnN0IEpnPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZvY3VzTm9kZSYmbGwoZS5mb2N1c05vZGUsZS5mb2N1c09mZnNldCxlLmFuY2hvck5vZGUsZS5hbmNob3JPZmZzZXQpfTtmdW5jdGlvbiBUYShlLHQpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO3JldHVybiBuLmluaXRFdmVudCgia2V5ZG93biIsITAsITApLG4ua2V5Q29kZT1lLG4ua2V5PW4uY29kZT10LG59ZnVuY3Rpb24gQUYoZSl7bGV0IHQ9ZS5hY3RpdmVFbGVtZW50O2Zvcig7dCYmdC5zaGFkb3dSb290Oyl0PXQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiB0fWZ1bmN0aW9uIERGKGUsdCxuKXtpZihlLmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpdHJ5e2xldCByPWUuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCh0LG4pO2lmKHIpcmV0dXJue25vZGU6ci5vZmZzZXROb2RlLG9mZnNldDpyLm9mZnNldH19Y2F0Y2h7fWlmKGUuY2FyZXRSYW5nZUZyb21Qb2ludCl7bGV0IHI9ZS5jYXJldFJhbmdlRnJvbVBvaW50KHQsbik7aWYocilyZXR1cm57bm9kZTpyLnN0YXJ0Q29udGFpbmVyLG9mZnNldDpyLnN0YXJ0T2Zmc2V0fX19Y29uc3QgZWk9dHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yOm51bGwsc189dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudDpudWxsLHVhPWVpJiZlaS51c2VyQWdlbnR8fCIiLCR4PS9FZGdlXC8oXGQrKS8uZXhlYyh1YSksRFI9L01TSUUgXGQvLmV4ZWModWEpLEF4PS9UcmlkZW50XC8oPzpbNy05XXxcZHsyLH0pXC4uKnJ2OihcZCspLy5leGVjKHVhKSx1cj0hIShEUnx8QXh8fCR4KSxVcz1EUj9kb2N1bWVudC5kb2N1bWVudE1vZGU6QXg/K0F4WzFdOiR4PyskeFsxXTowLEFvPSF1ciYmL2dlY2tvXC8oXGQrKS9pLnRlc3QodWEpO0FvJiYrKC9GaXJlZm94XC8oXGQrKS8uZXhlYyh1YSl8fFswLDBdKVsxXTtjb25zdCBEeD0hdXImJi9DaHJvbWVcLyhcZCspLy5leGVjKHVhKSxEbj0hIUR4LElGPUR4PytEeFsxXTowLFluPSF1ciYmISFlaSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KGVpLnZlbmRvciksR2M9WW4mJigvTW9iaWxlXC9cdysvLnRlc3QodWEpfHwhIWVpJiZlaS5tYXhUb3VjaFBvaW50cz4yKSxCcj1HY3x8KGVpPy9NYWMvLnRlc3QoZWkucGxhdGZvcm0pOiExKSxMRj1laT8vV2luLy50ZXN0KGVpLnBsYXRmb3JtKTohMSx5bz0vQW5kcm9pZCBcZC8udGVzdCh1YSksYXA9ISFzXyYmIndlYmtpdEZvbnRTbW9vdGhpbmciaW4gc18uZG9jdW1lbnRFbGVtZW50LnN0eWxlLGpGPWFwPysoL1xiQXBwbGVXZWJLaXRcLyhcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpfHxbMCwwXSlbMV06MDtmdW5jdGlvbiB6RihlKXtyZXR1cm57bGVmdDowLHJpZ2h0OmUuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHRvcDowLGJvdHRvbTplLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9fWZ1bmN0aW9uIHVpKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIj9lOmVbdF19ZnVuY3Rpb24gRkYoZSl7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXQud2lkdGgvZS5vZmZzZXRXaWR0aHx8MSxyPXQuaGVpZ2h0L2Uub2Zmc2V0SGVpZ2h0fHwxO3JldHVybntsZWZ0OnQubGVmdCxyaWdodDp0LmxlZnQrZS5jbGllbnRXaWR0aCpuLHRvcDp0LnRvcCxib3R0b206dC50b3ArZS5jbGllbnRIZWlnaHQqcn19ZnVuY3Rpb24gYV8oZSx0LG4pe2xldCByPWUuc29tZVByb3AoInNjcm9sbFRocmVzaG9sZCIpfHwwLG89ZS5zb21lUHJvcCgic2Nyb2xsTWFyZ2luIil8fDUsaT1lLmRvbS5vd25lckRvY3VtZW50O2ZvcihsZXQgcz1ufHxlLmRvbTtzO3M9d2Yocykpe2lmKHMubm9kZVR5cGUhPTEpY29udGludWU7bGV0IGE9cyxsPWE9PWkuYm9keSxjPWw/ekYoaSk6RkYoYSksdT0wLGQ9MDtpZih0LnRvcDxjLnRvcCt1aShyLCJ0b3AiKT9kPS0oYy50b3AtdC50b3ArdWkobywidG9wIikpOnQuYm90dG9tPmMuYm90dG9tLXVpKHIsImJvdHRvbSIpJiYoZD10LmJvdHRvbS10LnRvcD5jLmJvdHRvbS1jLnRvcD90LnRvcCt1aShvLCJ0b3AiKS1jLnRvcDp0LmJvdHRvbS1jLmJvdHRvbSt1aShvLCJib3R0b20iKSksdC5sZWZ0PGMubGVmdCt1aShyLCJsZWZ0Iik/dT0tKGMubGVmdC10LmxlZnQrdWkobywibGVmdCIpKTp0LnJpZ2h0PmMucmlnaHQtdWkociwicmlnaHQiKSYmKHU9dC5yaWdodC1jLnJpZ2h0K3VpKG8sInJpZ2h0IikpLHV8fGQpaWYobClpLmRlZmF1bHRWaWV3LnNjcm9sbEJ5KHUsZCk7ZWxzZXtsZXQgZj1hLnNjcm9sbExlZnQscD1hLnNjcm9sbFRvcDtkJiYoYS5zY3JvbGxUb3ArPWQpLHUmJihhLnNjcm9sbExlZnQrPXUpO2xldCBtPWEuc2Nyb2xsTGVmdC1mLGc9YS5zY3JvbGxUb3AtcDt0PXtsZWZ0OnQubGVmdC1tLHRvcDp0LnRvcC1nLHJpZ2h0OnQucmlnaHQtbSxib3R0b206dC5ib3R0b20tZ319aWYobHx8L14oZml4ZWR8c3RpY2t5KSQvLnRlc3QoZ2V0Q29tcHV0ZWRTdHlsZShzKS5wb3NpdGlvbikpYnJlYWt9fWZ1bmN0aW9uIEJGKGUpe2xldCB0PWUuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49TWF0aC5tYXgoMCx0LnRvcCkscixvO2ZvcihsZXQgaT0odC5sZWZ0K3QucmlnaHQpLzIscz1uKzE7czxNYXRoLm1pbihpbm5lckhlaWdodCx0LmJvdHRvbSk7cys9NSl7bGV0IGE9ZS5yb290LmVsZW1lbnRGcm9tUG9pbnQoaSxzKTtpZighYXx8YT09ZS5kb218fCFlLmRvbS5jb250YWlucyhhKSljb250aW51ZTtsZXQgbD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGwudG9wPj1uLTIwKXtyPWEsbz1sLnRvcDticmVha319cmV0dXJue3JlZkRPTTpyLHJlZlRvcDpvLHN0YWNrOklSKGUuZG9tKX19ZnVuY3Rpb24gSVIoZSl7bGV0IHQ9W10sbj1lLm93bmVyRG9jdW1lbnQ7Zm9yKGxldCByPWU7ciYmKHQucHVzaCh7ZG9tOnIsdG9wOnIuc2Nyb2xsVG9wLGxlZnQ6ci5zY3JvbGxMZWZ0fSksZSE9bik7cj13ZihyKSk7cmV0dXJuIHR9ZnVuY3Rpb24gVUYoe3JlZkRPTTplLHJlZlRvcDp0LHN0YWNrOm59KXtsZXQgcj1lP2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOjA7TFIobixyPT0wPzA6ci10KX1mdW5jdGlvbiBMUihlLHQpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXR7ZG9tOnIsdG9wOm8sbGVmdDppfT1lW25dO3Iuc2Nyb2xsVG9wIT1vK3QmJihyLnNjcm9sbFRvcD1vK3QpLHIuc2Nyb2xsTGVmdCE9aSYmKHIuc2Nyb2xsTGVmdD1pKX19bGV0IEFsPW51bGw7ZnVuY3Rpb24gVkYoZSl7aWYoZS5zZXRBY3RpdmUpcmV0dXJuIGUuc2V0QWN0aXZlKCk7aWYoQWwpcmV0dXJuIGUuZm9jdXMoQWwpO2xldCB0PUlSKGUpO2UuZm9jdXMoQWw9PW51bGw/e2dldCBwcmV2ZW50U2Nyb2xsKCl7cmV0dXJuIEFsPXtwcmV2ZW50U2Nyb2xsOiEwfSwhMH19OnZvaWQgMCksQWx8fChBbD0hMSxMUih0LDApKX1mdW5jdGlvbiBqUihlLHQpe2xldCBuLHI9MmU4LG8saT0wLHM9dC50b3AsYT10LnRvcCxsLGM7Zm9yKGxldCB1PWUuZmlyc3RDaGlsZCxkPTA7dTt1PXUubmV4dFNpYmxpbmcsZCsrKXtsZXQgZjtpZih1Lm5vZGVUeXBlPT0xKWY9dS5nZXRDbGllbnRSZWN0cygpO2Vsc2UgaWYodS5ub2RlVHlwZT09MylmPXlpKHUpLmdldENsaWVudFJlY3RzKCk7ZWxzZSBjb250aW51ZTtmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IG09ZltwXTtpZihtLnRvcDw9cyYmbS5ib3R0b20+PWEpe3M9TWF0aC5tYXgobS5ib3R0b20scyksYT1NYXRoLm1pbihtLnRvcCxhKTtsZXQgZz1tLmxlZnQ+dC5sZWZ0P20ubGVmdC10LmxlZnQ6bS5yaWdodDx0LmxlZnQ/dC5sZWZ0LW0ucmlnaHQ6MDtpZihnPHIpe249dSxyPWcsbz1nJiZuLm5vZGVUeXBlPT0zP3tsZWZ0Om0ucmlnaHQ8dC5sZWZ0P20ucmlnaHQ6bS5sZWZ0LHRvcDp0LnRvcH06dCx1Lm5vZGVUeXBlPT0xJiZnJiYoaT1kKyh0LmxlZnQ+PShtLmxlZnQrbS5yaWdodCkvMj8xOjApKTtjb250aW51ZX19ZWxzZSBtLnRvcD50LnRvcCYmIWwmJm0ubGVmdDw9dC5sZWZ0JiZtLnJpZ2h0Pj10LmxlZnQmJihsPXUsYz17bGVmdDpNYXRoLm1heChtLmxlZnQsTWF0aC5taW4obS5yaWdodCx0LmxlZnQpKSx0b3A6bS50b3B9KTshbiYmKHQubGVmdD49bS5yaWdodCYmdC50b3A+PW0udG9wfHx0LmxlZnQ+PW0ubGVmdCYmdC50b3A+PW0uYm90dG9tKSYmKGk9ZCsxKX19cmV0dXJuIW4mJmwmJihuPWwsbz1jLHI9MCksbiYmbi5ub2RlVHlwZT09Mz9IRihuLG8pOiFufHxyJiZuLm5vZGVUeXBlPT0xP3tub2RlOmUsb2Zmc2V0Oml9OmpSKG4sbyl9ZnVuY3Rpb24gSEYoZSx0KXtsZXQgbj1lLm5vZGVWYWx1ZS5sZW5ndGgscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2ZvcihsZXQgbz0wO288bjtvKyspe3Iuc2V0RW5kKGUsbysxKSxyLnNldFN0YXJ0KGUsbyk7bGV0IGk9Y3MociwxKTtpZihpLnRvcCE9aS5ib3R0b20mJnR3KHQsaSkpcmV0dXJue25vZGU6ZSxvZmZzZXQ6bysodC5sZWZ0Pj0oaS5sZWZ0K2kucmlnaHQpLzI/MTowKX19cmV0dXJue25vZGU6ZSxvZmZzZXQ6MH19ZnVuY3Rpb24gdHcoZSx0KXtyZXR1cm4gZS5sZWZ0Pj10LmxlZnQtMSYmZS5sZWZ0PD10LnJpZ2h0KzEmJmUudG9wPj10LnRvcC0xJiZlLnRvcDw9dC5ib3R0b20rMX1mdW5jdGlvbiBXRihlLHQpe2xldCBuPWUucGFyZW50Tm9kZTtyZXR1cm4gbiYmL15saSQvaS50ZXN0KG4ubm9kZU5hbWUpJiZ0LmxlZnQ8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0P246ZX1mdW5jdGlvbiBLRihlLHQsbil7bGV0e25vZGU6cixvZmZzZXQ6b309alIodCxuKSxpPS0xO2lmKHIubm9kZVR5cGU9PTEmJiFyLmZpcnN0Q2hpbGQpe2xldCBzPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aT1zLmxlZnQhPXMucmlnaHQmJm4ubGVmdD4ocy5sZWZ0K3MucmlnaHQpLzI/MTotMX1yZXR1cm4gZS5kb2NWaWV3LnBvc0Zyb21ET00ocixvLGkpfWZ1bmN0aW9uIHFGKGUsdCxuLHIpe2xldCBvPS0xO2ZvcihsZXQgaT10LHM9ITE7aSE9ZS5kb207KXtsZXQgYT1lLmRvY1ZpZXcubmVhcmVzdERlc2MoaSwhMCk7aWYoIWEpcmV0dXJuIG51bGw7aWYoYS5kb20ubm9kZVR5cGU9PTEmJihhLm5vZGUuaXNCbG9jayYmYS5wYXJlbnQmJiFzfHwhYS5jb250ZW50RE9NKSl7bGV0IGw9YS5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoYS5ub2RlLmlzQmxvY2smJmEucGFyZW50JiYhcyYmKHM9ITAsbC5sZWZ0PnIubGVmdHx8bC50b3A+ci50b3A/bz1hLnBvc0JlZm9yZToobC5yaWdodDxyLmxlZnR8fGwuYm90dG9tPHIudG9wKSYmKG89YS5wb3NBZnRlcikpLCFhLmNvbnRlbnRET00mJm88MCYmIWEubm9kZS5pc1RleHQpcmV0dXJuKGEubm9kZS5pc0Jsb2NrP3IudG9wPChsLnRvcCtsLmJvdHRvbSkvMjpyLmxlZnQ8KGwubGVmdCtsLnJpZ2h0KS8yKT9hLnBvc0JlZm9yZTphLnBvc0FmdGVyfWk9YS5kb20ucGFyZW50Tm9kZX1yZXR1cm4gbz4tMT9vOmUuZG9jVmlldy5wb3NGcm9tRE9NKHQsbiwtMSl9ZnVuY3Rpb24gelIoZSx0LG4pe2xldCByPWUuY2hpbGROb2Rlcy5sZW5ndGg7aWYociYmbi50b3A8bi5ib3R0b20pZm9yKGxldCBvPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IocioodC50b3Atbi50b3ApLyhuLmJvdHRvbS1uLnRvcCkpLTIpKSxpPW87Oyl7bGV0IHM9ZS5jaGlsZE5vZGVzW2ldO2lmKHMubm9kZVR5cGU9PTEpe2xldCBhPXMuZ2V0Q2xpZW50UmVjdHMoKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrKyl7bGV0IGM9YVtsXTtpZih0dyh0LGMpKXJldHVybiB6UihzLHQsYyl9fWlmKChpPShpKzEpJXIpPT1vKWJyZWFrfXJldHVybiBlfWZ1bmN0aW9uIEdGKGUsdCl7bGV0IG49ZS5kb20ub3duZXJEb2N1bWVudCxyLG89MCxpPURGKG4sdC5sZWZ0LHQudG9wKTtpJiYoe25vZGU6cixvZmZzZXQ6b309aSk7bGV0IHM9KGUucm9vdC5lbGVtZW50RnJvbVBvaW50P2Uucm9vdDpuKS5lbGVtZW50RnJvbVBvaW50KHQubGVmdCx0LnRvcCksYTtpZighc3x8IWUuZG9tLmNvbnRhaW5zKHMubm9kZVR5cGUhPTE/cy5wYXJlbnROb2RlOnMpKXtsZXQgYz1lLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighdHcodCxjKXx8KHM9elIoZS5kb20sdCxjKSwhcykpcmV0dXJuIG51bGx9aWYoWW4pZm9yKGxldCBjPXM7ciYmYztjPXdmKGMpKWMuZHJhZ2dhYmxlJiYocj12b2lkIDApO2lmKHM9V0Yocyx0KSxyKXtpZihBbyYmci5ub2RlVHlwZT09MSYmKG89TWF0aC5taW4obyxyLmNoaWxkTm9kZXMubGVuZ3RoKSxvPHIuY2hpbGROb2Rlcy5sZW5ndGgpKXtsZXQgdT1yLmNoaWxkTm9kZXNbb10sZDt1Lm5vZGVOYW1lPT0iSU1HIiYmKGQ9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkucmlnaHQ8PXQubGVmdCYmZC5ib3R0b20+dC50b3AmJm8rK31sZXQgYzthcCYmbyYmci5ub2RlVHlwZT09MSYmKGM9ci5jaGlsZE5vZGVzW28tMV0pLm5vZGVUeXBlPT0xJiZjLmNvbnRlbnRFZGl0YWJsZT09ImZhbHNlIiYmYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A+PXQudG9wJiZvLS0scj09ZS5kb20mJm89PXIuY2hpbGROb2Rlcy5sZW5ndGgtMSYmci5sYXN0Q2hpbGQubm9kZVR5cGU9PTEmJnQudG9wPnIubGFzdENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbT9hPWUuc3RhdGUuZG9jLmNvbnRlbnQuc2l6ZToobz09MHx8ci5ub2RlVHlwZSE9MXx8ci5jaGlsZE5vZGVzW28tMV0ubm9kZU5hbWUhPSJCUiIpJiYoYT1xRihlLHIsbyx0KSl9YT09bnVsbCYmKGE9S0YoZSxzLHQpKTtsZXQgbD1lLmRvY1ZpZXcubmVhcmVzdERlc2MocywhMCk7cmV0dXJue3BvczphLGluc2lkZTpsP2wucG9zQXRTdGFydC1sLmJvcmRlcjotMX19ZnVuY3Rpb24gbF8oZSl7cmV0dXJuIGUudG9wPGUuYm90dG9tfHxlLmxlZnQ8ZS5yaWdodH1mdW5jdGlvbiBjcyhlLHQpe2xldCBuPWUuZ2V0Q2xpZW50UmVjdHMoKTtpZihuLmxlbmd0aCl7bGV0IHI9blt0PDA/MDpuLmxlbmd0aC0xXTtpZihsXyhyKSlyZXR1cm4gcn1yZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbmQuY2FsbChuLGxfKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jb25zdCBZRj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vO2Z1bmN0aW9uIEZSKGUsdCxuKXtsZXR7bm9kZTpyLG9mZnNldDpvLGF0b206aX09ZS5kb2NWaWV3LmRvbUZyb21Qb3ModCxuPDA/LTE6MSkscz1hcHx8QW87aWYoci5ub2RlVHlwZT09MylpZihzJiYoWUYudGVzdChyLm5vZGVWYWx1ZSl8fChuPDA/IW86bz09ci5ub2RlVmFsdWUubGVuZ3RoKSkpe2xldCBsPWNzKHlpKHIsbyxvKSxuKTtpZihBbyYmbyYmL1xzLy50ZXN0KHIubm9kZVZhbHVlW28tMV0pJiZvPHIubm9kZVZhbHVlLmxlbmd0aCl7bGV0IGM9Y3MoeWkocixvLTEsby0xKSwtMSk7aWYoYy50b3A9PWwudG9wKXtsZXQgdT1jcyh5aShyLG8sbysxKSwtMSk7aWYodS50b3AhPWwudG9wKXJldHVybiBJdSh1LHUubGVmdDxjLmxlZnQpfX1yZXR1cm4gbH1lbHNle2xldCBsPW8sYz1vLHU9bjwwPzE6LTE7cmV0dXJuIG48MCYmIW8/KGMrKyx1PS0xKTpuPj0wJiZvPT1yLm5vZGVWYWx1ZS5sZW5ndGg/KGwtLSx1PTEpOm48MD9sLS06YysrLEl1KGNzKHlpKHIsbCxjKSx1KSx1PDApfWlmKCFlLnN0YXRlLmRvYy5yZXNvbHZlKHQtKGl8fDApKS5wYXJlbnQuaW5saW5lQ29udGVudCl7aWYoaT09bnVsbCYmbyYmKG48MHx8bz09SG8ocikpKXtsZXQgbD1yLmNoaWxkTm9kZXNbby0xXTtpZihsLm5vZGVUeXBlPT0xKXJldHVybiBNeShsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCExKX1pZihpPT1udWxsJiZvPEhvKHIpKXtsZXQgbD1yLmNoaWxkTm9kZXNbb107aWYobC5ub2RlVHlwZT09MSlyZXR1cm4gTXkobC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwhMCl9cmV0dXJuIE15KHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj49MCl9aWYoaT09bnVsbCYmbyYmKG48MHx8bz09SG8ocikpKXtsZXQgbD1yLmNoaWxkTm9kZXNbby0xXSxjPWwubm9kZVR5cGU9PTM/eWkobCxIbyhsKS0ocz8wOjEpKTpsLm5vZGVUeXBlPT0xJiYobC5ub2RlTmFtZSE9IkJSInx8IWwubmV4dFNpYmxpbmcpP2w6bnVsbDtpZihjKXJldHVybiBJdShjcyhjLDEpLCExKX1pZihpPT1udWxsJiZvPEhvKHIpKXtsZXQgbD1yLmNoaWxkTm9kZXNbb107Zm9yKDtsLnBtVmlld0Rlc2MmJmwucG1WaWV3RGVzYy5pZ25vcmVGb3JDb29yZHM7KWw9bC5uZXh0U2libGluZztsZXQgYz1sP2wubm9kZVR5cGU9PTM/eWkobCwwLHM/MDoxKTpsLm5vZGVUeXBlPT0xP2w6bnVsbDpudWxsO2lmKGMpcmV0dXJuIEl1KGNzKGMsLTEpLCEwKX1yZXR1cm4gSXUoY3Moci5ub2RlVHlwZT09Mz95aShyKTpyLC1uKSxuPj0wKX1mdW5jdGlvbiBJdShlLHQpe2lmKGUud2lkdGg9PTApcmV0dXJuIGU7bGV0IG49dD9lLmxlZnQ6ZS5yaWdodDtyZXR1cm57dG9wOmUudG9wLGJvdHRvbTplLmJvdHRvbSxsZWZ0Om4scmlnaHQ6bn19ZnVuY3Rpb24gTXkoZSx0KXtpZihlLmhlaWdodD09MClyZXR1cm4gZTtsZXQgbj10P2UudG9wOmUuYm90dG9tO3JldHVybnt0b3A6bixib3R0b206bixsZWZ0OmUubGVmdCxyaWdodDplLnJpZ2h0fX1mdW5jdGlvbiBCUihlLHQsbil7bGV0IHI9ZS5zdGF0ZSxvPWUucm9vdC5hY3RpdmVFbGVtZW50O3IhPXQmJmUudXBkYXRlU3RhdGUodCksbyE9ZS5kb20mJmUuZm9jdXMoKTt0cnl7cmV0dXJuIG4oKX1maW5hbGx5e3IhPXQmJmUudXBkYXRlU3RhdGUociksbyE9ZS5kb20mJm8mJm8uZm9jdXMoKX19ZnVuY3Rpb24gWEYoZSx0LG4pe2xldCByPXQuc2VsZWN0aW9uLG89bj09InVwIj9yLiRmcm9tOnIuJHRvO3JldHVybiBCUihlLHQsKCk9PntsZXR7bm9kZTppfT1lLmRvY1ZpZXcuZG9tRnJvbVBvcyhvLnBvcyxuPT0idXAiPy0xOjEpO2Zvcig7Oyl7bGV0IGE9ZS5kb2NWaWV3Lm5lYXJlc3REZXNjKGksITApO2lmKCFhKWJyZWFrO2lmKGEubm9kZS5pc0Jsb2NrKXtpPWEuY29udGVudERPTXx8YS5kb207YnJlYWt9aT1hLmRvbS5wYXJlbnROb2RlfWxldCBzPUZSKGUsby5wb3MsMSk7Zm9yKGxldCBhPWkuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyl7bGV0IGw7aWYoYS5ub2RlVHlwZT09MSlsPWEuZ2V0Q2xpZW50UmVjdHMoKTtlbHNlIGlmKGEubm9kZVR5cGU9PTMpbD15aShhLDAsYS5ub2RlVmFsdWUubGVuZ3RoKS5nZXRDbGllbnRSZWN0cygpO2Vsc2UgY29udGludWU7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCB1PWxbY107aWYodS5ib3R0b20+dS50b3ArMSYmKG49PSJ1cCI/cy50b3AtdS50b3A+KHUuYm90dG9tLXMudG9wKSoyOnUuYm90dG9tLXMuYm90dG9tPihzLmJvdHRvbS11LnRvcCkqMikpcmV0dXJuITF9fXJldHVybiEwfSl9Y29uc3QgWkY9L1tcdTA1OTAtXHUwOGFjXS87ZnVuY3Rpb24gSkYoZSx0LG4pe2xldHskaGVhZDpyfT10LnNlbGVjdGlvbjtpZighci5wYXJlbnQuaXNUZXh0YmxvY2spcmV0dXJuITE7bGV0IG89ci5wYXJlbnRPZmZzZXQsaT0hbyxzPW89PXIucGFyZW50LmNvbnRlbnQuc2l6ZSxhPWUuZG9tU2VsZWN0aW9uKCk7cmV0dXJuIVpGLnRlc3Qoci5wYXJlbnQudGV4dENvbnRlbnQpfHwhYS5tb2RpZnk/bj09ImxlZnQifHxuPT0iYmFja3dhcmQiP2k6czpCUihlLHQsKCk9PntsZXR7Zm9jdXNOb2RlOmwsZm9jdXNPZmZzZXQ6YyxhbmNob3JOb2RlOnUsYW5jaG9yT2Zmc2V0OmR9PWUuZG9tU2VsZWN0aW9uUmFuZ2UoKSxmPWEuY2FyZXRCaWRpTGV2ZWw7YS5tb2RpZnkoIm1vdmUiLG4sImNoYXJhY3RlciIpO2xldCBwPXIuZGVwdGg/ZS5kb2NWaWV3LmRvbUFmdGVyUG9zKHIuYmVmb3JlKCkpOmUuZG9tLHtmb2N1c05vZGU6bSxmb2N1c09mZnNldDpnfT1lLmRvbVNlbGVjdGlvblJhbmdlKCkseT1tJiYhcC5jb250YWlucyhtLm5vZGVUeXBlPT0xP206bS5wYXJlbnROb2RlKXx8bD09bSYmYz09Zzt0cnl7YS5jb2xsYXBzZSh1LGQpLGwmJihsIT11fHxjIT1kKSYmYS5leHRlbmQmJmEuZXh0ZW5kKGwsYyl9Y2F0Y2h7fXJldHVybiBmIT1udWxsJiYoYS5jYXJldEJpZGlMZXZlbD1mKSx5fSl9bGV0IGNfPW51bGwsdV89bnVsbCxkXz0hMTtmdW5jdGlvbiBRRihlLHQsbil7cmV0dXJuIGNfPT10JiZ1Xz09bj9kXzooY189dCx1Xz1uLGRfPW49PSJ1cCJ8fG49PSJkb3duIj9YRihlLHQsbik6SkYoZSx0LG4pKX1jb25zdCBZcj0wLGZfPTEsTGE9Mix0aT0zO2NsYXNzIGxwe2NvbnN0cnVjdG9yKHQsbixyLG8pe3RoaXMucGFyZW50PXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMuZG9tPXIsdGhpcy5jb250ZW50RE9NPW8sdGhpcy5kaXJ0eT1ZcixyLnBtVmlld0Rlc2M9dGhpc31tYXRjaGVzV2lkZ2V0KHQpe3JldHVybiExfW1hdGNoZXNNYXJrKHQpe3JldHVybiExfW1hdGNoZXNOb2RlKHQsbixyKXtyZXR1cm4hMX1tYXRjaGVzSGFjayh0KXtyZXR1cm4hMX1wYXJzZVJ1bGUoKXtyZXR1cm4gbnVsbH1zdG9wRXZlbnQodCl7cmV0dXJuITF9Z2V0IHNpemUoKXtsZXQgdD0wO2ZvcihsZXQgbj0wO248dGhpcy5jaGlsZHJlbi5sZW5ndGg7bisrKXQrPXRoaXMuY2hpbGRyZW5bbl0uc2l6ZTtyZXR1cm4gdH1nZXQgYm9yZGVyKCl7cmV0dXJuIDB9ZGVzdHJveSgpe3RoaXMucGFyZW50PXZvaWQgMCx0aGlzLmRvbS5wbVZpZXdEZXNjPT10aGlzJiYodGhpcy5kb20ucG1WaWV3RGVzYz12b2lkIDApO2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXRoaXMuY2hpbGRyZW5bdF0uZGVzdHJveSgpfXBvc0JlZm9yZUNoaWxkKHQpe2ZvcihsZXQgbj0wLHI9dGhpcy5wb3NBdFN0YXJ0OztuKyspe2xldCBvPXRoaXMuY2hpbGRyZW5bbl07aWYobz09dClyZXR1cm4gcjtyKz1vLnNpemV9fWdldCBwb3NCZWZvcmUoKXtyZXR1cm4gdGhpcy5wYXJlbnQucG9zQmVmb3JlQ2hpbGQodGhpcyl9Z2V0IHBvc0F0U3RhcnQoKXtyZXR1cm4gdGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQucG9zQmVmb3JlQ2hpbGQodGhpcykrdGhpcy5ib3JkZXI6MH1nZXQgcG9zQWZ0ZXIoKXtyZXR1cm4gdGhpcy5wb3NCZWZvcmUrdGhpcy5zaXplfWdldCBwb3NBdEVuZCgpe3JldHVybiB0aGlzLnBvc0F0U3RhcnQrdGhpcy5zaXplLTIqdGhpcy5ib3JkZXJ9bG9jYWxQb3NGcm9tRE9NKHQsbixyKXtpZih0aGlzLmNvbnRlbnRET00mJnRoaXMuY29udGVudERPTS5jb250YWlucyh0Lm5vZGVUeXBlPT0xP3Q6dC5wYXJlbnROb2RlKSlpZihyPDApe2xldCBpLHM7aWYodD09dGhpcy5jb250ZW50RE9NKWk9dC5jaGlsZE5vZGVzW24tMV07ZWxzZXtmb3IoO3QucGFyZW50Tm9kZSE9dGhpcy5jb250ZW50RE9NOyl0PXQucGFyZW50Tm9kZTtpPXQucHJldmlvdXNTaWJsaW5nfWZvcig7aSYmISgocz1pLnBtVmlld0Rlc2MpJiZzLnBhcmVudD09dGhpcyk7KWk9aS5wcmV2aW91c1NpYmxpbmc7cmV0dXJuIGk/dGhpcy5wb3NCZWZvcmVDaGlsZChzKStzLnNpemU6dGhpcy5wb3NBdFN0YXJ0fWVsc2V7bGV0IGkscztpZih0PT10aGlzLmNvbnRlbnRET00paT10LmNoaWxkTm9kZXNbbl07ZWxzZXtmb3IoO3QucGFyZW50Tm9kZSE9dGhpcy5jb250ZW50RE9NOyl0PXQucGFyZW50Tm9kZTtpPXQubmV4dFNpYmxpbmd9Zm9yKDtpJiYhKChzPWkucG1WaWV3RGVzYykmJnMucGFyZW50PT10aGlzKTspaT1pLm5leHRTaWJsaW5nO3JldHVybiBpP3RoaXMucG9zQmVmb3JlQ2hpbGQocyk6dGhpcy5wb3NBdEVuZH1sZXQgbztpZih0PT10aGlzLmRvbSYmdGhpcy5jb250ZW50RE9NKW89bj5Wbih0aGlzLmNvbnRlbnRET00pO2Vsc2UgaWYodGhpcy5jb250ZW50RE9NJiZ0aGlzLmNvbnRlbnRET00hPXRoaXMuZG9tJiZ0aGlzLmRvbS5jb250YWlucyh0aGlzLmNvbnRlbnRET00pKW89dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzLmNvbnRlbnRET00pJjI7ZWxzZSBpZih0aGlzLmRvbS5maXJzdENoaWxkKXtpZihuPT0wKWZvcihsZXQgaT10OztpPWkucGFyZW50Tm9kZSl7aWYoaT09dGhpcy5kb20pe289ITE7YnJlYWt9aWYoaS5wcmV2aW91c1NpYmxpbmcpYnJlYWt9aWYobz09bnVsbCYmbj09dC5jaGlsZE5vZGVzLmxlbmd0aClmb3IobGV0IGk9dDs7aT1pLnBhcmVudE5vZGUpe2lmKGk9PXRoaXMuZG9tKXtvPSEwO2JyZWFrfWlmKGkubmV4dFNpYmxpbmcpYnJlYWt9fXJldHVybiBvPz9yPjA/dGhpcy5wb3NBdEVuZDp0aGlzLnBvc0F0U3RhcnR9bmVhcmVzdERlc2ModCxuPSExKXtmb3IobGV0IHI9ITAsbz10O287bz1vLnBhcmVudE5vZGUpe2xldCBpPXRoaXMuZ2V0RGVzYyhvKSxzO2lmKGkmJighbnx8aS5ub2RlKSlpZihyJiYocz1pLm5vZGVET00pJiYhKHMubm9kZVR5cGU9PTE/cy5jb250YWlucyh0Lm5vZGVUeXBlPT0xP3Q6dC5wYXJlbnROb2RlKTpzPT10KSlyPSExO2Vsc2UgcmV0dXJuIGl9fWdldERlc2ModCl7bGV0IG49dC5wbVZpZXdEZXNjO2ZvcihsZXQgcj1uO3I7cj1yLnBhcmVudClpZihyPT10aGlzKXJldHVybiBufXBvc0Zyb21ET00odCxuLHIpe2ZvcihsZXQgbz10O287bz1vLnBhcmVudE5vZGUpe2xldCBpPXRoaXMuZ2V0RGVzYyhvKTtpZihpKXJldHVybiBpLmxvY2FsUG9zRnJvbURPTSh0LG4scil9cmV0dXJuLTF9ZGVzY0F0KHQpe2ZvcihsZXQgbj0wLHI9MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyl7bGV0IG89dGhpcy5jaGlsZHJlbltuXSxpPXIrby5zaXplO2lmKHI9PXQmJmkhPXIpe2Zvcig7IW8uYm9yZGVyJiZvLmNoaWxkcmVuLmxlbmd0aDspbz1vLmNoaWxkcmVuWzBdO3JldHVybiBvfWlmKHQ8aSlyZXR1cm4gby5kZXNjQXQodC1yLW8uYm9yZGVyKTtyPWl9fWRvbUZyb21Qb3ModCxuKXtpZighdGhpcy5jb250ZW50RE9NKXJldHVybntub2RlOnRoaXMuZG9tLG9mZnNldDowLGF0b206dCsxfTtsZXQgcj0wLG89MDtmb3IobGV0IGk9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltyXSxhPWkrcy5zaXplO2lmKGE+dHx8cyBpbnN0YW5jZW9mIFZSKXtvPXQtaTticmVha31pPWF9aWYobylyZXR1cm4gdGhpcy5jaGlsZHJlbltyXS5kb21Gcm9tUG9zKG8tdGhpcy5jaGlsZHJlbltyXS5ib3JkZXIsbik7Zm9yKGxldCBpO3ImJiEoaT10aGlzLmNoaWxkcmVuW3ItMV0pLnNpemUmJmkgaW5zdGFuY2VvZiBVUiYmaS5zaWRlPj0wO3ItLSk7aWYobjw9MCl7bGV0IGkscz0hMDtmb3IoO2k9cj90aGlzLmNoaWxkcmVuW3ItMV06bnVsbCwhKCFpfHxpLmRvbS5wYXJlbnROb2RlPT10aGlzLmNvbnRlbnRET00pO3ItLSxzPSExKTtyZXR1cm4gaSYmbiYmcyYmIWkuYm9yZGVyJiYhaS5kb21BdG9tP2kuZG9tRnJvbVBvcyhpLnNpemUsbik6e25vZGU6dGhpcy5jb250ZW50RE9NLG9mZnNldDppP1ZuKGkuZG9tKSsxOjB9fWVsc2V7bGV0IGkscz0hMDtmb3IoO2k9cjx0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3JdOm51bGwsISghaXx8aS5kb20ucGFyZW50Tm9kZT09dGhpcy5jb250ZW50RE9NKTtyKysscz0hMSk7cmV0dXJuIGkmJnMmJiFpLmJvcmRlciYmIWkuZG9tQXRvbT9pLmRvbUZyb21Qb3MoMCxuKTp7bm9kZTp0aGlzLmNvbnRlbnRET00sb2Zmc2V0Omk/Vm4oaS5kb20pOnRoaXMuY29udGVudERPTS5jaGlsZE5vZGVzLmxlbmd0aH19fXBhcnNlUmFuZ2UodCxuLHI9MCl7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PTApcmV0dXJue25vZGU6dGhpcy5jb250ZW50RE9NLGZyb206dCx0bzpuLGZyb21PZmZzZXQ6MCx0b09mZnNldDp0aGlzLmNvbnRlbnRET00uY2hpbGROb2Rlcy5sZW5ndGh9O2xldCBvPS0xLGk9LTE7Zm9yKGxldCBzPXIsYT0wOzthKyspe2xldCBsPXRoaXMuY2hpbGRyZW5bYV0sYz1zK2wuc2l6ZTtpZihvPT0tMSYmdDw9Yyl7bGV0IHU9cytsLmJvcmRlcjtpZih0Pj11JiZuPD1jLWwuYm9yZGVyJiZsLm5vZGUmJmwuY29udGVudERPTSYmdGhpcy5jb250ZW50RE9NLmNvbnRhaW5zKGwuY29udGVudERPTSkpcmV0dXJuIGwucGFyc2VSYW5nZSh0LG4sdSk7dD1zO2ZvcihsZXQgZD1hO2Q+MDtkLS0pe2xldCBmPXRoaXMuY2hpbGRyZW5bZC0xXTtpZihmLnNpemUmJmYuZG9tLnBhcmVudE5vZGU9PXRoaXMuY29udGVudERPTSYmIWYuZW1wdHlDaGlsZEF0KDEpKXtvPVZuKGYuZG9tKSsxO2JyZWFrfXQtPWYuc2l6ZX1vPT0tMSYmKG89MCl9aWYobz4tMSYmKGM+bnx8YT09dGhpcy5jaGlsZHJlbi5sZW5ndGgtMSkpe249Yztmb3IobGV0IHU9YSsxO3U8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dSsrKXtsZXQgZD10aGlzLmNoaWxkcmVuW3VdO2lmKGQuc2l6ZSYmZC5kb20ucGFyZW50Tm9kZT09dGhpcy5jb250ZW50RE9NJiYhZC5lbXB0eUNoaWxkQXQoLTEpKXtpPVZuKGQuZG9tKTticmVha31uKz1kLnNpemV9aT09LTEmJihpPXRoaXMuY29udGVudERPTS5jaGlsZE5vZGVzLmxlbmd0aCk7YnJlYWt9cz1jfXJldHVybntub2RlOnRoaXMuY29udGVudERPTSxmcm9tOnQsdG86bixmcm9tT2Zmc2V0Om8sdG9PZmZzZXQ6aX19ZW1wdHlDaGlsZEF0KHQpe2lmKHRoaXMuYm9yZGVyfHwhdGhpcy5jb250ZW50RE9NfHwhdGhpcy5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuITE7bGV0IG49dGhpcy5jaGlsZHJlblt0PDA/MDp0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXTtyZXR1cm4gbi5zaXplPT0wfHxuLmVtcHR5Q2hpbGRBdCh0KX1kb21BZnRlclBvcyh0KXtsZXR7bm9kZTpuLG9mZnNldDpyfT10aGlzLmRvbUZyb21Qb3ModCwwKTtpZihuLm5vZGVUeXBlIT0xfHxyPT1uLmNoaWxkTm9kZXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJObyBub2RlIGFmdGVyIHBvcyAiK3QpO3JldHVybiBuLmNoaWxkTm9kZXNbcl19c2V0U2VsZWN0aW9uKHQsbixyLG89ITEpe2xldCBpPU1hdGgubWluKHQsbikscz1NYXRoLm1heCh0LG4pO2ZvcihsZXQgZj0wLHA9MDtmPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2YrKyl7bGV0IG09dGhpcy5jaGlsZHJlbltmXSxnPXArbS5zaXplO2lmKGk+cCYmczxnKXJldHVybiBtLnNldFNlbGVjdGlvbih0LXAtbS5ib3JkZXIsbi1wLW0uYm9yZGVyLHIsbyk7cD1nfWxldCBhPXRoaXMuZG9tRnJvbVBvcyh0LHQ/LTE6MSksbD1uPT10P2E6dGhpcy5kb21Gcm9tUG9zKG4sbj8tMToxKSxjPXIuZ2V0U2VsZWN0aW9uKCksdT0hMTtpZigoQW98fFluKSYmdD09bil7bGV0e25vZGU6ZixvZmZzZXQ6cH09YTtpZihmLm5vZGVUeXBlPT0zKXtpZih1PSEhKHAmJmYubm9kZVZhbHVlW3AtMV09PWAKYCksdSYmcD09Zi5ub2RlVmFsdWUubGVuZ3RoKWZvcihsZXQgbT1mLGc7bTttPW0ucGFyZW50Tm9kZSl7aWYoZz1tLm5leHRTaWJsaW5nKXtnLm5vZGVOYW1lPT0iQlIiJiYoYT1sPXtub2RlOmcucGFyZW50Tm9kZSxvZmZzZXQ6Vm4oZykrMX0pO2JyZWFrfWxldCB5PW0ucG1WaWV3RGVzYztpZih5JiZ5Lm5vZGUmJnkubm9kZS5pc0Jsb2NrKWJyZWFrfX1lbHNle2xldCBtPWYuY2hpbGROb2Rlc1twLTFdO3U9bSYmKG0ubm9kZU5hbWU9PSJCUiJ8fG0uY29udGVudEVkaXRhYmxlPT0iZmFsc2UiKX19aWYoQW8mJmMuZm9jdXNOb2RlJiZjLmZvY3VzTm9kZSE9bC5ub2RlJiZjLmZvY3VzTm9kZS5ub2RlVHlwZT09MSl7bGV0IGY9Yy5mb2N1c05vZGUuY2hpbGROb2Rlc1tjLmZvY3VzT2Zmc2V0XTtmJiZmLmNvbnRlbnRFZGl0YWJsZT09ImZhbHNlIiYmKG89ITApfWlmKCEob3x8dSYmWW4pJiZsbChhLm5vZGUsYS5vZmZzZXQsYy5hbmNob3JOb2RlLGMuYW5jaG9yT2Zmc2V0KSYmbGwobC5ub2RlLGwub2Zmc2V0LGMuZm9jdXNOb2RlLGMuZm9jdXNPZmZzZXQpKXJldHVybjtsZXQgZD0hMTtpZigoYy5leHRlbmR8fHQ9PW4pJiYhdSl7Yy5jb2xsYXBzZShhLm5vZGUsYS5vZmZzZXQpO3RyeXt0IT1uJiZjLmV4dGVuZChsLm5vZGUsbC5vZmZzZXQpLGQ9ITB9Y2F0Y2h7fX1pZighZCl7aWYodD5uKXtsZXQgcD1hO2E9bCxsPXB9bGV0IGY9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtmLnNldEVuZChsLm5vZGUsbC5vZmZzZXQpLGYuc2V0U3RhcnQoYS5ub2RlLGEub2Zmc2V0KSxjLnJlbW92ZUFsbFJhbmdlcygpLGMuYWRkUmFuZ2UoZil9fWlnbm9yZU11dGF0aW9uKHQpe3JldHVybiF0aGlzLmNvbnRlbnRET00mJnQudHlwZSE9InNlbGVjdGlvbiJ9Z2V0IGNvbnRlbnRMb3N0KCl7cmV0dXJuIHRoaXMuY29udGVudERPTSYmdGhpcy5jb250ZW50RE9NIT10aGlzLmRvbSYmIXRoaXMuZG9tLmNvbnRhaW5zKHRoaXMuY29udGVudERPTSl9bWFya0RpcnR5KHQsbil7Zm9yKGxldCByPTAsbz0wO288dGhpcy5jaGlsZHJlbi5sZW5ndGg7bysrKXtsZXQgaT10aGlzLmNoaWxkcmVuW29dLHM9citpLnNpemU7aWYocj09cz90PD1zJiZuPj1yOnQ8cyYmbj5yKXtsZXQgYT1yK2kuYm9yZGVyLGw9cy1pLmJvcmRlcjtpZih0Pj1hJiZuPD1sKXt0aGlzLmRpcnR5PXQ9PXJ8fG49PXM/TGE6Zl8sdD09YSYmbj09bCYmKGkuY29udGVudExvc3R8fGkuZG9tLnBhcmVudE5vZGUhPXRoaXMuY29udGVudERPTSk/aS5kaXJ0eT10aTppLm1hcmtEaXJ0eSh0LWEsbi1hKTtyZXR1cm59ZWxzZSBpLmRpcnR5PWkuZG9tPT1pLmNvbnRlbnRET00mJmkuZG9tLnBhcmVudE5vZGU9PXRoaXMuY29udGVudERPTSYmIWkuY2hpbGRyZW4ubGVuZ3RoP0xhOnRpfXI9c310aGlzLmRpcnR5PUxhfW1hcmtQYXJlbnRzRGlydHkoKXtsZXQgdD0xO2ZvcihsZXQgbj10aGlzLnBhcmVudDtuO249bi5wYXJlbnQsdCsrKXtsZXQgcj10PT0xP0xhOmZfO24uZGlydHk8ciYmKG4uZGlydHk9cil9fWdldCBkb21BdG9tKCl7cmV0dXJuITF9Z2V0IGlnbm9yZUZvckNvb3Jkcygpe3JldHVybiExfX1jbGFzcyBVUiBleHRlbmRzIGxwe2NvbnN0cnVjdG9yKHQsbixyLG8pe2xldCBpLHM9bi50eXBlLnRvRE9NO2lmKHR5cGVvZiBzPT0iZnVuY3Rpb24iJiYocz1zKHIsKCk9PntpZighaSlyZXR1cm4gbztpZihpLnBhcmVudClyZXR1cm4gaS5wYXJlbnQucG9zQmVmb3JlQ2hpbGQoaSl9KSksIW4udHlwZS5zcGVjLnJhdyl7aWYocy5ub2RlVHlwZSE9MSl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2EuYXBwZW5kQ2hpbGQocykscz1hfXMuY29udGVudEVkaXRhYmxlPSJmYWxzZSIscy5jbGFzc0xpc3QuYWRkKCJQcm9zZU1pcnJvci13aWRnZXQiKX1zdXBlcih0LFtdLHMsbnVsbCksdGhpcy53aWRnZXQ9bix0aGlzLndpZGdldD1uLGk9dGhpc31tYXRjaGVzV2lkZ2V0KHQpe3JldHVybiB0aGlzLmRpcnR5PT1ZciYmdC50eXBlLmVxKHRoaXMud2lkZ2V0LnR5cGUpfXBhcnNlUnVsZSgpe3JldHVybntpZ25vcmU6ITB9fXN0b3BFdmVudCh0KXtsZXQgbj10aGlzLndpZGdldC5zcGVjLnN0b3BFdmVudDtyZXR1cm4gbj9uKHQpOiExfWlnbm9yZU11dGF0aW9uKHQpe3JldHVybiB0LnR5cGUhPSJzZWxlY3Rpb24ifHx0aGlzLndpZGdldC5zcGVjLmlnbm9yZVNlbGVjdGlvbn1kZXN0cm95KCl7dGhpcy53aWRnZXQudHlwZS5kZXN0cm95KHRoaXMuZG9tKSxzdXBlci5kZXN0cm95KCl9Z2V0IGRvbUF0b20oKXtyZXR1cm4hMH1nZXQgc2lkZSgpe3JldHVybiB0aGlzLndpZGdldC50eXBlLnNpZGV9fWNsYXNzIGVCIGV4dGVuZHMgbHB7Y29uc3RydWN0b3IodCxuLHIsbyl7c3VwZXIodCxbXSxuLG51bGwpLHRoaXMudGV4dERPTT1yLHRoaXMudGV4dD1vfWdldCBzaXplKCl7cmV0dXJuIHRoaXMudGV4dC5sZW5ndGh9bG9jYWxQb3NGcm9tRE9NKHQsbil7cmV0dXJuIHQhPXRoaXMudGV4dERPTT90aGlzLnBvc0F0U3RhcnQrKG4/dGhpcy5zaXplOjApOnRoaXMucG9zQXRTdGFydCtufWRvbUZyb21Qb3ModCl7cmV0dXJue25vZGU6dGhpcy50ZXh0RE9NLG9mZnNldDp0fX1pZ25vcmVNdXRhdGlvbih0KXtyZXR1cm4gdC50eXBlPT09ImNoYXJhY3RlckRhdGEiJiZ0LnRhcmdldC5ub2RlVmFsdWU9PXQub2xkVmFsdWV9fWNsYXNzIGNsIGV4dGVuZHMgbHB7Y29uc3RydWN0b3IodCxuLHIsbyl7c3VwZXIodCxbXSxyLG8pLHRoaXMubWFyaz1ufXN0YXRpYyBjcmVhdGUodCxuLHIsbyl7bGV0IGk9by5ub2RlVmlld3Nbbi50eXBlLm5hbWVdLHM9aSYmaShuLG8scik7cmV0dXJuKCFzfHwhcy5kb20pJiYocz1rby5yZW5kZXJTcGVjKGRvY3VtZW50LG4udHlwZS5zcGVjLnRvRE9NKG4scikpKSxuZXcgY2wodCxuLHMuZG9tLHMuY29udGVudERPTXx8cy5kb20pfXBhcnNlUnVsZSgpe3JldHVybiB0aGlzLmRpcnR5JnRpfHx0aGlzLm1hcmsudHlwZS5zcGVjLnJlcGFyc2VJblZpZXc/bnVsbDp7bWFyazp0aGlzLm1hcmsudHlwZS5uYW1lLGF0dHJzOnRoaXMubWFyay5hdHRycyxjb250ZW50RWxlbWVudDp0aGlzLmNvbnRlbnRET019fW1hdGNoZXNNYXJrKHQpe3JldHVybiB0aGlzLmRpcnR5IT10aSYmdGhpcy5tYXJrLmVxKHQpfW1hcmtEaXJ0eSh0LG4pe2lmKHN1cGVyLm1hcmtEaXJ0eSh0LG4pLHRoaXMuZGlydHkhPVlyKXtsZXQgcj10aGlzLnBhcmVudDtmb3IoOyFyLm5vZGU7KXI9ci5wYXJlbnQ7ci5kaXJ0eTx0aGlzLmRpcnR5JiYoci5kaXJ0eT10aGlzLmRpcnR5KSx0aGlzLmRpcnR5PVlyfX1zbGljZSh0LG4scil7bGV0IG89Y2wuY3JlYXRlKHRoaXMucGFyZW50LHRoaXMubWFyaywhMCxyKSxpPXRoaXMuY2hpbGRyZW4scz10aGlzLnNpemU7bjxzJiYoaT1qeChpLG4scyxyKSksdD4wJiYoaT1qeChpLDAsdCxyKSk7Zm9yKGxldCBhPTA7YTxpLmxlbmd0aDthKyspaVthXS5wYXJlbnQ9bztyZXR1cm4gby5jaGlsZHJlbj1pLG99fWNsYXNzIFZzIGV4dGVuZHMgbHB7Y29uc3RydWN0b3IodCxuLHIsbyxpLHMsYSxsLGMpe3N1cGVyKHQsW10saSxzKSx0aGlzLm5vZGU9bix0aGlzLm91dGVyRGVjbz1yLHRoaXMuaW5uZXJEZWNvPW8sdGhpcy5ub2RlRE9NPWF9c3RhdGljIGNyZWF0ZSh0LG4scixvLGkscyl7bGV0IGE9aS5ub2RlVmlld3Nbbi50eXBlLm5hbWVdLGwsYz1hJiZhKG4saSwoKT0+e2lmKCFsKXJldHVybiBzO2lmKGwucGFyZW50KXJldHVybiBsLnBhcmVudC5wb3NCZWZvcmVDaGlsZChsKX0scixvKSx1PWMmJmMuZG9tLGQ9YyYmYy5jb250ZW50RE9NO2lmKG4uaXNUZXh0KXtpZighdSl1PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4udGV4dCk7ZWxzZSBpZih1Lm5vZGVUeXBlIT0zKXRocm93IG5ldyBSYW5nZUVycm9yKCJUZXh0IG11c3QgYmUgcmVuZGVyZWQgYXMgYSBET00gdGV4dCBub2RlIil9ZWxzZSB1fHwoe2RvbTp1LGNvbnRlbnRET006ZH09a28ucmVuZGVyU3BlYyhkb2N1bWVudCxuLnR5cGUuc3BlYy50b0RPTShuKSkpOyFkJiYhbi5pc1RleHQmJnUubm9kZU5hbWUhPSJCUiImJih1Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fCh1LmNvbnRlbnRFZGl0YWJsZT0iZmFsc2UiKSxuLnR5cGUuc3BlYy5kcmFnZ2FibGUmJih1LmRyYWdnYWJsZT0hMCkpO2xldCBmPXU7cmV0dXJuIHU9S1IodSxyLG4pLGM/bD1uZXcgdEIodCxuLHIsbyx1LGR8fG51bGwsZixjLGkscysxKTpuLmlzVGV4dD9uZXcgUWcodCxuLHIsbyx1LGYsaSk6bmV3IFZzKHQsbixyLG8sdSxkfHxudWxsLGYsaSxzKzEpfXBhcnNlUnVsZSgpe2lmKHRoaXMubm9kZS50eXBlLnNwZWMucmVwYXJzZUluVmlldylyZXR1cm4gbnVsbDtsZXQgdD17bm9kZTp0aGlzLm5vZGUudHlwZS5uYW1lLGF0dHJzOnRoaXMubm9kZS5hdHRyc307aWYodGhpcy5ub2RlLnR5cGUud2hpdGVzcGFjZT09InByZSImJih0LnByZXNlcnZlV2hpdGVzcGFjZT0iZnVsbCIpLCF0aGlzLmNvbnRlbnRET00pdC5nZXRDb250ZW50PSgpPT50aGlzLm5vZGUuY29udGVudDtlbHNlIGlmKCF0aGlzLmNvbnRlbnRMb3N0KXQuY29udGVudEVsZW1lbnQ9dGhpcy5jb250ZW50RE9NO2Vsc2V7Zm9yKGxldCBuPXRoaXMuY2hpbGRyZW4ubGVuZ3RoLTE7bj49MDtuLS0pe2xldCByPXRoaXMuY2hpbGRyZW5bbl07aWYodGhpcy5kb20uY29udGFpbnMoci5kb20ucGFyZW50Tm9kZSkpe3QuY29udGVudEVsZW1lbnQ9ci5kb20ucGFyZW50Tm9kZTticmVha319dC5jb250ZW50RWxlbWVudHx8KHQuZ2V0Q29udGVudD0oKT0+VS5lbXB0eSl9cmV0dXJuIHR9bWF0Y2hlc05vZGUodCxuLHIpe3JldHVybiB0aGlzLmRpcnR5PT1ZciYmdC5lcSh0aGlzLm5vZGUpJiZMeChuLHRoaXMub3V0ZXJEZWNvKSYmci5lcSh0aGlzLmlubmVyRGVjbyl9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5ub2RlLm5vZGVTaXplfWdldCBib3JkZXIoKXtyZXR1cm4gdGhpcy5ub2RlLmlzTGVhZj8wOjF9dXBkYXRlQ2hpbGRyZW4odCxuKXtsZXQgcj10aGlzLm5vZGUuaW5saW5lQ29udGVudCxvPW4saT10LmNvbXBvc2luZz90aGlzLmxvY2FsQ29tcG9zaXRpb25JbmZvKHQsbik6bnVsbCxzPWkmJmkucG9zPi0xP2k6bnVsbCxhPWkmJmkucG9zPDAsbD1uZXcgckIodGhpcyxzJiZzLm5vZGUsdCk7c0IodGhpcy5ub2RlLHRoaXMuaW5uZXJEZWNvLChjLHUsZCk9PntjLnNwZWMubWFya3M/bC5zeW5jVG9NYXJrcyhjLnNwZWMubWFya3Mscix0KTpjLnR5cGUuc2lkZT49MCYmIWQmJmwuc3luY1RvTWFya3ModT09dGhpcy5ub2RlLmNoaWxkQ291bnQ/WWUubm9uZTp0aGlzLm5vZGUuY2hpbGQodSkubWFya3Mscix0KSxsLnBsYWNlV2lkZ2V0KGMsdCxvKX0sKGMsdSxkLGYpPT57bC5zeW5jVG9NYXJrcyhjLm1hcmtzLHIsdCk7bGV0IHA7bC5maW5kTm9kZU1hdGNoKGMsdSxkLGYpfHxhJiZ0LnN0YXRlLnNlbGVjdGlvbi5mcm9tPm8mJnQuc3RhdGUuc2VsZWN0aW9uLnRvPG8rYy5ub2RlU2l6ZSYmKHA9bC5maW5kSW5kZXhXaXRoQ2hpbGQoaS5ub2RlKSk+LTEmJmwudXBkYXRlTm9kZUF0KGMsdSxkLHAsdCl8fGwudXBkYXRlTmV4dE5vZGUoYyx1LGQsdCxmLG8pfHxsLmFkZE5vZGUoYyx1LGQsdCxvKSxvKz1jLm5vZGVTaXplfSksbC5zeW5jVG9NYXJrcyhbXSxyLHQpLHRoaXMubm9kZS5pc1RleHRibG9jayYmbC5hZGRUZXh0YmxvY2tIYWNrcygpLGwuZGVzdHJveVJlc3QoKSwobC5jaGFuZ2VkfHx0aGlzLmRpcnR5PT1MYSkmJihzJiZ0aGlzLnByb3RlY3RMb2NhbENvbXBvc2l0aW9uKHQscyksSFIodGhpcy5jb250ZW50RE9NLHRoaXMuY2hpbGRyZW4sdCksR2MmJmFCKHRoaXMuZG9tKSl9bG9jYWxDb21wb3NpdGlvbkluZm8odCxuKXtsZXR7ZnJvbTpyLHRvOm99PXQuc3RhdGUuc2VsZWN0aW9uO2lmKCEodC5zdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBUZSl8fHI8bnx8bz5uK3RoaXMubm9kZS5jb250ZW50LnNpemUpcmV0dXJuIG51bGw7bGV0IGk9dC5kb21TZWxlY3Rpb25SYW5nZSgpLHM9bEIoaS5mb2N1c05vZGUsaS5mb2N1c09mZnNldCk7aWYoIXN8fCF0aGlzLmRvbS5jb250YWlucyhzLnBhcmVudE5vZGUpKXJldHVybiBudWxsO2lmKHRoaXMubm9kZS5pbmxpbmVDb250ZW50KXtsZXQgYT1zLm5vZGVWYWx1ZSxsPWNCKHRoaXMubm9kZS5jb250ZW50LGEsci1uLG8tbik7cmV0dXJuIGw8MD9udWxsOntub2RlOnMscG9zOmwsdGV4dDphfX1lbHNlIHJldHVybntub2RlOnMscG9zOi0xLHRleHQ6IiJ9fXByb3RlY3RMb2NhbENvbXBvc2l0aW9uKHQse25vZGU6bixwb3M6cix0ZXh0Om99KXtpZih0aGlzLmdldERlc2MobikpcmV0dXJuO2xldCBpPW47Zm9yKDtpLnBhcmVudE5vZGUhPXRoaXMuY29udGVudERPTTtpPWkucGFyZW50Tm9kZSl7Zm9yKDtpLnByZXZpb3VzU2libGluZzspaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkucHJldmlvdXNTaWJsaW5nKTtmb3IoO2kubmV4dFNpYmxpbmc7KWkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpLm5leHRTaWJsaW5nKTtpLnBtVmlld0Rlc2MmJihpLnBtVmlld0Rlc2M9dm9pZCAwKX1sZXQgcz1uZXcgZUIodGhpcyxpLG4sbyk7dC5pbnB1dC5jb21wb3NpdGlvbk5vZGVzLnB1c2gocyksdGhpcy5jaGlsZHJlbj1qeCh0aGlzLmNoaWxkcmVuLHIscitvLmxlbmd0aCx0LHMpfXVwZGF0ZSh0LG4scixvKXtyZXR1cm4gdGhpcy5kaXJ0eT09dGl8fCF0LnNhbWVNYXJrdXAodGhpcy5ub2RlKT8hMToodGhpcy51cGRhdGVJbm5lcih0LG4scixvKSwhMCl9dXBkYXRlSW5uZXIodCxuLHIsbyl7dGhpcy51cGRhdGVPdXRlckRlY28obiksdGhpcy5ub2RlPXQsdGhpcy5pbm5lckRlY289cix0aGlzLmNvbnRlbnRET00mJnRoaXMudXBkYXRlQ2hpbGRyZW4obyx0aGlzLnBvc0F0U3RhcnQpLHRoaXMuZGlydHk9WXJ9dXBkYXRlT3V0ZXJEZWNvKHQpe2lmKEx4KHQsdGhpcy5vdXRlckRlY28pKXJldHVybjtsZXQgbj10aGlzLm5vZGVET00ubm9kZVR5cGUhPTEscj10aGlzLmRvbTt0aGlzLmRvbT1XUih0aGlzLmRvbSx0aGlzLm5vZGVET00sSXgodGhpcy5vdXRlckRlY28sdGhpcy5ub2RlLG4pLEl4KHQsdGhpcy5ub2RlLG4pKSx0aGlzLmRvbSE9ciYmKHIucG1WaWV3RGVzYz12b2lkIDAsdGhpcy5kb20ucG1WaWV3RGVzYz10aGlzKSx0aGlzLm91dGVyRGVjbz10fXNlbGVjdE5vZGUoKXt0aGlzLm5vZGVET00ubm9kZVR5cGU9PTEmJnRoaXMubm9kZURPTS5jbGFzc0xpc3QuYWRkKCJQcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUiKSwodGhpcy5jb250ZW50RE9NfHwhdGhpcy5ub2RlLnR5cGUuc3BlYy5kcmFnZ2FibGUpJiYodGhpcy5kb20uZHJhZ2dhYmxlPSEwKX1kZXNlbGVjdE5vZGUoKXt0aGlzLm5vZGVET00ubm9kZVR5cGU9PTEmJnRoaXMubm9kZURPTS5jbGFzc0xpc3QucmVtb3ZlKCJQcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUiKSwodGhpcy5jb250ZW50RE9NfHwhdGhpcy5ub2RlLnR5cGUuc3BlYy5kcmFnZ2FibGUpJiZ0aGlzLmRvbS5yZW1vdmVBdHRyaWJ1dGUoImRyYWdnYWJsZSIpfWdldCBkb21BdG9tKCl7cmV0dXJuIHRoaXMubm9kZS5pc0F0b219fWZ1bmN0aW9uIHBfKGUsdCxuLHIsbyl7S1Iocix0LGUpO2xldCBpPW5ldyBWcyh2b2lkIDAsZSx0LG4scixyLHIsbywwKTtyZXR1cm4gaS5jb250ZW50RE9NJiZpLnVwZGF0ZUNoaWxkcmVuKG8sMCksaX1jbGFzcyBRZyBleHRlbmRzIFZze2NvbnN0cnVjdG9yKHQsbixyLG8saSxzLGEpe3N1cGVyKHQsbixyLG8saSxudWxsLHMsYSwwKX1wYXJzZVJ1bGUoKXtsZXQgdD10aGlzLm5vZGVET00ucGFyZW50Tm9kZTtmb3IoO3QmJnQhPXRoaXMuZG9tJiYhdC5wbUlzRGVjbzspdD10LnBhcmVudE5vZGU7cmV0dXJue3NraXA6dHx8ITB9fXVwZGF0ZSh0LG4scixvKXtyZXR1cm4gdGhpcy5kaXJ0eT09dGl8fHRoaXMuZGlydHkhPVlyJiYhdGhpcy5pblBhcmVudCgpfHwhdC5zYW1lTWFya3VwKHRoaXMubm9kZSk/ITE6KHRoaXMudXBkYXRlT3V0ZXJEZWNvKG4pLCh0aGlzLmRpcnR5IT1Zcnx8dC50ZXh0IT10aGlzLm5vZGUudGV4dCkmJnQudGV4dCE9dGhpcy5ub2RlRE9NLm5vZGVWYWx1ZSYmKHRoaXMubm9kZURPTS5ub2RlVmFsdWU9dC50ZXh0LG8udHJhY2tXcml0ZXM9PXRoaXMubm9kZURPTSYmKG8udHJhY2tXcml0ZXM9bnVsbCkpLHRoaXMubm9kZT10LHRoaXMuZGlydHk9WXIsITApfWluUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQuY29udGVudERPTTtmb3IobGV0IG49dGhpcy5ub2RlRE9NO247bj1uLnBhcmVudE5vZGUpaWYobj09dClyZXR1cm4hMDtyZXR1cm4hMX1kb21Gcm9tUG9zKHQpe3JldHVybntub2RlOnRoaXMubm9kZURPTSxvZmZzZXQ6dH19bG9jYWxQb3NGcm9tRE9NKHQsbixyKXtyZXR1cm4gdD09dGhpcy5ub2RlRE9NP3RoaXMucG9zQXRTdGFydCtNYXRoLm1pbihuLHRoaXMubm9kZS50ZXh0Lmxlbmd0aCk6c3VwZXIubG9jYWxQb3NGcm9tRE9NKHQsbixyKX1pZ25vcmVNdXRhdGlvbih0KXtyZXR1cm4gdC50eXBlIT0iY2hhcmFjdGVyRGF0YSImJnQudHlwZSE9InNlbGVjdGlvbiJ9c2xpY2UodCxuLHIpe2xldCBvPXRoaXMubm9kZS5jdXQodCxuKSxpPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8udGV4dCk7cmV0dXJuIG5ldyBRZyh0aGlzLnBhcmVudCxvLHRoaXMub3V0ZXJEZWNvLHRoaXMuaW5uZXJEZWNvLGksaSxyKX1tYXJrRGlydHkodCxuKXtzdXBlci5tYXJrRGlydHkodCxuKSx0aGlzLmRvbSE9dGhpcy5ub2RlRE9NJiYodD09MHx8bj09dGhpcy5ub2RlRE9NLm5vZGVWYWx1ZS5sZW5ndGgpJiYodGhpcy5kaXJ0eT10aSl9Z2V0IGRvbUF0b20oKXtyZXR1cm4hMX19Y2xhc3MgVlIgZXh0ZW5kcyBscHtwYXJzZVJ1bGUoKXtyZXR1cm57aWdub3JlOiEwfX1tYXRjaGVzSGFjayh0KXtyZXR1cm4gdGhpcy5kaXJ0eT09WXImJnRoaXMuZG9tLm5vZGVOYW1lPT10fWdldCBkb21BdG9tKCl7cmV0dXJuITB9Z2V0IGlnbm9yZUZvckNvb3Jkcygpe3JldHVybiB0aGlzLmRvbS5ub2RlTmFtZT09IklNRyJ9fWNsYXNzIHRCIGV4dGVuZHMgVnN7Y29uc3RydWN0b3IodCxuLHIsbyxpLHMsYSxsLGMsdSl7c3VwZXIodCxuLHIsbyxpLHMsYSxjLHUpLHRoaXMuc3BlYz1sfXVwZGF0ZSh0LG4scixvKXtpZih0aGlzLmRpcnR5PT10aSlyZXR1cm4hMTtpZih0aGlzLnNwZWMudXBkYXRlKXtsZXQgaT10aGlzLnNwZWMudXBkYXRlKHQsbixyKTtyZXR1cm4gaSYmdGhpcy51cGRhdGVJbm5lcih0LG4scixvKSxpfWVsc2UgcmV0dXJuIXRoaXMuY29udGVudERPTSYmIXQuaXNMZWFmPyExOnN1cGVyLnVwZGF0ZSh0LG4scixvKX1zZWxlY3ROb2RlKCl7dGhpcy5zcGVjLnNlbGVjdE5vZGU/dGhpcy5zcGVjLnNlbGVjdE5vZGUoKTpzdXBlci5zZWxlY3ROb2RlKCl9ZGVzZWxlY3ROb2RlKCl7dGhpcy5zcGVjLmRlc2VsZWN0Tm9kZT90aGlzLnNwZWMuZGVzZWxlY3ROb2RlKCk6c3VwZXIuZGVzZWxlY3ROb2RlKCl9c2V0U2VsZWN0aW9uKHQsbixyLG8pe3RoaXMuc3BlYy5zZXRTZWxlY3Rpb24/dGhpcy5zcGVjLnNldFNlbGVjdGlvbih0LG4scik6c3VwZXIuc2V0U2VsZWN0aW9uKHQsbixyLG8pfWRlc3Ryb3koKXt0aGlzLnNwZWMuZGVzdHJveSYmdGhpcy5zcGVjLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9c3RvcEV2ZW50KHQpe3JldHVybiB0aGlzLnNwZWMuc3RvcEV2ZW50P3RoaXMuc3BlYy5zdG9wRXZlbnQodCk6ITF9aWdub3JlTXV0YXRpb24odCl7cmV0dXJuIHRoaXMuc3BlYy5pZ25vcmVNdXRhdGlvbj90aGlzLnNwZWMuaWdub3JlTXV0YXRpb24odCk6c3VwZXIuaWdub3JlTXV0YXRpb24odCl9fWZ1bmN0aW9uIEhSKGUsdCxuKXtsZXQgcj1lLmZpcnN0Q2hpbGQsbz0hMTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7bGV0IHM9dFtpXSxhPXMuZG9tO2lmKGEucGFyZW50Tm9kZT09ZSl7Zm9yKDthIT1yOylyPWhfKHIpLG89ITA7cj1yLm5leHRTaWJsaW5nfWVsc2Ugbz0hMCxlLmluc2VydEJlZm9yZShhLHIpO2lmKHMgaW5zdGFuY2VvZiBjbCl7bGV0IGw9cj9yLnByZXZpb3VzU2libGluZzplLmxhc3RDaGlsZDtIUihzLmNvbnRlbnRET00scy5jaGlsZHJlbixuKSxyPWw/bC5uZXh0U2libGluZzplLmZpcnN0Q2hpbGR9fWZvcig7cjspcj1oXyhyKSxvPSEwO28mJm4udHJhY2tXcml0ZXM9PWUmJihuLnRyYWNrV3JpdGVzPW51bGwpfWNvbnN0IEFkPWZ1bmN0aW9uKGUpe2UmJih0aGlzLm5vZGVOYW1lPWUpfTtBZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBqYT1bbmV3IEFkXTtmdW5jdGlvbiBJeChlLHQsbil7aWYoZS5sZW5ndGg9PTApcmV0dXJuIGphO2xldCByPW4/amFbMF06bmV3IEFkLG89W3JdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcz1lW2ldLnR5cGUuYXR0cnM7aWYocyl7cy5ub2RlTmFtZSYmby5wdXNoKHI9bmV3IEFkKHMubm9kZU5hbWUpKTtmb3IobGV0IGEgaW4gcyl7bGV0IGw9c1thXTtsIT1udWxsJiYobiYmby5sZW5ndGg9PTEmJm8ucHVzaChyPW5ldyBBZCh0LmlzSW5saW5lPyJzcGFuIjoiZGl2IikpLGE9PSJjbGFzcyI/ci5jbGFzcz0oci5jbGFzcz9yLmNsYXNzKyIgIjoiIikrbDphPT0ic3R5bGUiP3Iuc3R5bGU9KHIuc3R5bGU/ci5zdHlsZSsiOyI6IiIpK2w6YSE9Im5vZGVOYW1lIiYmKHJbYV09bCkpfX19cmV0dXJuIG99ZnVuY3Rpb24gV1IoZSx0LG4scil7aWYobj09amEmJnI9PWphKXJldHVybiB0O2xldCBvPXQ7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2xldCBzPXJbaV0sYT1uW2ldO2lmKGkpe2xldCBsO2EmJmEubm9kZU5hbWU9PXMubm9kZU5hbWUmJm8hPWUmJihsPW8ucGFyZW50Tm9kZSkmJmwubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09cy5ub2RlTmFtZXx8KGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChzLm5vZGVOYW1lKSxsLnBtSXNEZWNvPSEwLGwuYXBwZW5kQ2hpbGQobyksYT1qYVswXSksbz1sfW5CKG8sYXx8amFbMF0scyl9cmV0dXJuIG99ZnVuY3Rpb24gbkIoZSx0LG4pe2ZvcihsZXQgciBpbiB0KXIhPSJjbGFzcyImJnIhPSJzdHlsZSImJnIhPSJub2RlTmFtZSImJiEociBpbiBuKSYmZS5yZW1vdmVBdHRyaWJ1dGUocik7Zm9yKGxldCByIGluIG4pciE9ImNsYXNzIiYmciE9InN0eWxlIiYmciE9Im5vZGVOYW1lIiYmbltyXSE9dFtyXSYmZS5zZXRBdHRyaWJ1dGUocixuW3JdKTtpZih0LmNsYXNzIT1uLmNsYXNzKXtsZXQgcj10LmNsYXNzP3QuY2xhc3Muc3BsaXQoIiAiKS5maWx0ZXIoQm9vbGVhbik6W10sbz1uLmNsYXNzP24uY2xhc3Muc3BsaXQoIiAiKS5maWx0ZXIoQm9vbGVhbik6W107Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspby5pbmRleE9mKHJbaV0pPT0tMSYmZS5jbGFzc0xpc3QucmVtb3ZlKHJbaV0pO2ZvcihsZXQgaT0wO2k8by5sZW5ndGg7aSsrKXIuaW5kZXhPZihvW2ldKT09LTEmJmUuY2xhc3NMaXN0LmFkZChvW2ldKTtlLmNsYXNzTGlzdC5sZW5ndGg9PTAmJmUucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpfWlmKHQuc3R5bGUhPW4uc3R5bGUpe2lmKHQuc3R5bGUpe2xldCByPS9ccyooW1x3XC1ceGExLVx1ZmZmZl0rKVxzKjooPzoiKD86XFwufFteIl0pKiJ8Jyg/OlxcLnxbXiddKSonfFwoLio/XCl8W147XSkqL2csbztmb3IoO289ci5leGVjKHQuc3R5bGUpOyllLnN0eWxlLnJlbW92ZVByb3BlcnR5KG9bMV0pfW4uc3R5bGUmJihlLnN0eWxlLmNzc1RleHQrPW4uc3R5bGUpfX1mdW5jdGlvbiBLUihlLHQsbil7cmV0dXJuIFdSKGUsZSxqYSxJeCh0LG4sZS5ub2RlVHlwZSE9MSkpfWZ1bmN0aW9uIEx4KGUsdCl7aWYoZS5sZW5ndGghPXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWlmKCFlW25dLnR5cGUuZXEodFtuXS50eXBlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoXyhlKXtsZXQgdD1lLm5leHRTaWJsaW5nO3JldHVybiBlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksdH1jbGFzcyByQntjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5sb2NrPW4sdGhpcy52aWV3PXIsdGhpcy5pbmRleD0wLHRoaXMuc3RhY2s9W10sdGhpcy5jaGFuZ2VkPSExLHRoaXMudG9wPXQsdGhpcy5wcmVNYXRjaD1vQih0Lm5vZGUuY29udGVudCx0KX1kZXN0cm95QmV0d2Vlbih0LG4pe2lmKHQhPW4pe2ZvcihsZXQgcj10O3I8bjtyKyspdGhpcy50b3AuY2hpbGRyZW5bcl0uZGVzdHJveSgpO3RoaXMudG9wLmNoaWxkcmVuLnNwbGljZSh0LG4tdCksdGhpcy5jaGFuZ2VkPSEwfX1kZXN0cm95UmVzdCgpe3RoaXMuZGVzdHJveUJldHdlZW4odGhpcy5pbmRleCx0aGlzLnRvcC5jaGlsZHJlbi5sZW5ndGgpfXN5bmNUb01hcmtzKHQsbixyKXtsZXQgbz0wLGk9dGhpcy5zdGFjay5sZW5ndGg+PjEscz1NYXRoLm1pbihpLHQubGVuZ3RoKTtmb3IoO288cyYmKG89PWktMT90aGlzLnRvcDp0aGlzLnN0YWNrW28rMTw8MV0pLm1hdGNoZXNNYXJrKHRbb10pJiZ0W29dLnR5cGUuc3BlYy5zcGFubmluZyE9PSExOylvKys7Zm9yKDtvPGk7KXRoaXMuZGVzdHJveVJlc3QoKSx0aGlzLnRvcC5kaXJ0eT1Zcix0aGlzLmluZGV4PXRoaXMuc3RhY2sucG9wKCksdGhpcy50b3A9dGhpcy5zdGFjay5wb3AoKSxpLS07Zm9yKDtpPHQubGVuZ3RoOyl7dGhpcy5zdGFjay5wdXNoKHRoaXMudG9wLHRoaXMuaW5kZXgrMSk7bGV0IGE9LTE7Zm9yKGxldCBsPXRoaXMuaW5kZXg7bDxNYXRoLm1pbih0aGlzLmluZGV4KzMsdGhpcy50b3AuY2hpbGRyZW4ubGVuZ3RoKTtsKyspe2xldCBjPXRoaXMudG9wLmNoaWxkcmVuW2xdO2lmKGMubWF0Y2hlc01hcmsodFtpXSkmJiF0aGlzLmlzTG9ja2VkKGMuZG9tKSl7YT1sO2JyZWFrfX1pZihhPi0xKWE+dGhpcy5pbmRleCYmKHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRlc3Ryb3lCZXR3ZWVuKHRoaXMuaW5kZXgsYSkpLHRoaXMudG9wPXRoaXMudG9wLmNoaWxkcmVuW3RoaXMuaW5kZXhdO2Vsc2V7bGV0IGw9Y2wuY3JlYXRlKHRoaXMudG9wLHRbaV0sbixyKTt0aGlzLnRvcC5jaGlsZHJlbi5zcGxpY2UodGhpcy5pbmRleCwwLGwpLHRoaXMudG9wPWwsdGhpcy5jaGFuZ2VkPSEwfXRoaXMuaW5kZXg9MCxpKyt9fWZpbmROb2RlTWF0Y2godCxuLHIsbyl7bGV0IGk9LTEscztpZihvPj10aGlzLnByZU1hdGNoLmluZGV4JiYocz10aGlzLnByZU1hdGNoLm1hdGNoZXNbby10aGlzLnByZU1hdGNoLmluZGV4XSkucGFyZW50PT10aGlzLnRvcCYmcy5tYXRjaGVzTm9kZSh0LG4scikpaT10aGlzLnRvcC5jaGlsZHJlbi5pbmRleE9mKHMsdGhpcy5pbmRleCk7ZWxzZSBmb3IobGV0IGE9dGhpcy5pbmRleCxsPU1hdGgubWluKHRoaXMudG9wLmNoaWxkcmVuLmxlbmd0aCxhKzUpO2E8bDthKyspe2xldCBjPXRoaXMudG9wLmNoaWxkcmVuW2FdO2lmKGMubWF0Y2hlc05vZGUodCxuLHIpJiYhdGhpcy5wcmVNYXRjaC5tYXRjaGVkLmhhcyhjKSl7aT1hO2JyZWFrfX1yZXR1cm4gaTwwPyExOih0aGlzLmRlc3Ryb3lCZXR3ZWVuKHRoaXMuaW5kZXgsaSksdGhpcy5pbmRleCsrLCEwKX11cGRhdGVOb2RlQXQodCxuLHIsbyxpKXtsZXQgcz10aGlzLnRvcC5jaGlsZHJlbltvXTtyZXR1cm4gcy5kaXJ0eT09dGkmJnMuZG9tPT1zLmNvbnRlbnRET00mJihzLmRpcnR5PUxhKSxzLnVwZGF0ZSh0LG4scixpKT8odGhpcy5kZXN0cm95QmV0d2Vlbih0aGlzLmluZGV4LG8pLHRoaXMuaW5kZXgrKywhMCk6ITF9ZmluZEluZGV4V2l0aENoaWxkKHQpe2Zvcig7Oyl7bGV0IG49dC5wYXJlbnROb2RlO2lmKCFuKXJldHVybi0xO2lmKG49PXRoaXMudG9wLmNvbnRlbnRET00pe2xldCByPXQucG1WaWV3RGVzYztpZihyKXtmb3IobGV0IG89dGhpcy5pbmRleDtvPHRoaXMudG9wLmNoaWxkcmVuLmxlbmd0aDtvKyspaWYodGhpcy50b3AuY2hpbGRyZW5bb109PXIpcmV0dXJuIG99cmV0dXJuLTF9dD1ufX11cGRhdGVOZXh0Tm9kZSh0LG4scixvLGkscyl7Zm9yKGxldCBhPXRoaXMuaW5kZXg7YTx0aGlzLnRvcC5jaGlsZHJlbi5sZW5ndGg7YSsrKXtsZXQgbD10aGlzLnRvcC5jaGlsZHJlblthXTtpZihsIGluc3RhbmNlb2YgVnMpe2xldCBjPXRoaXMucHJlTWF0Y2gubWF0Y2hlZC5nZXQobCk7aWYoYyE9bnVsbCYmYyE9aSlyZXR1cm4hMTtsZXQgdT1sLmRvbSxkLGY9dGhpcy5pc0xvY2tlZCh1KSYmISh0LmlzVGV4dCYmbC5ub2RlJiZsLm5vZGUuaXNUZXh0JiZsLm5vZGVET00ubm9kZVZhbHVlPT10LnRleHQmJmwuZGlydHkhPXRpJiZMeChuLGwub3V0ZXJEZWNvKSk7aWYoIWYmJmwudXBkYXRlKHQsbixyLG8pKXJldHVybiB0aGlzLmRlc3Ryb3lCZXR3ZWVuKHRoaXMuaW5kZXgsYSksbC5kb20hPXUmJih0aGlzLmNoYW5nZWQ9ITApLHRoaXMuaW5kZXgrKywhMDtpZighZiYmKGQ9dGhpcy5yZWNyZWF0ZVdyYXBwZXIobCx0LG4scixvLHMpKSlyZXR1cm4gdGhpcy50b3AuY2hpbGRyZW5bdGhpcy5pbmRleF09ZCxkLmNvbnRlbnRET00mJihkLmRpcnR5PUxhLGQudXBkYXRlQ2hpbGRyZW4obyxzKzEpLGQuZGlydHk9WXIpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmluZGV4KyssITA7YnJlYWt9fXJldHVybiExfXJlY3JlYXRlV3JhcHBlcih0LG4scixvLGkscyl7aWYodC5kaXJ0eXx8bi5pc0F0b218fCF0LmNoaWxkcmVuLmxlbmd0aHx8IXQubm9kZS5jb250ZW50LmVxKG4uY29udGVudCkpcmV0dXJuIG51bGw7bGV0IGE9VnMuY3JlYXRlKHRoaXMudG9wLG4scixvLGkscyk7aWYoYS5jb250ZW50RE9NKXthLmNoaWxkcmVuPXQuY2hpbGRyZW4sdC5jaGlsZHJlbj1bXTtmb3IobGV0IGwgb2YgYS5jaGlsZHJlbilsLnBhcmVudD1hfXJldHVybiB0LmRlc3Ryb3koKSxhfWFkZE5vZGUodCxuLHIsbyxpKXtsZXQgcz1Wcy5jcmVhdGUodGhpcy50b3AsdCxuLHIsbyxpKTtzLmNvbnRlbnRET00mJnMudXBkYXRlQ2hpbGRyZW4obyxpKzEpLHRoaXMudG9wLmNoaWxkcmVuLnNwbGljZSh0aGlzLmluZGV4KyssMCxzKSx0aGlzLmNoYW5nZWQ9ITB9cGxhY2VXaWRnZXQodCxuLHIpe2xldCBvPXRoaXMuaW5kZXg8dGhpcy50b3AuY2hpbGRyZW4ubGVuZ3RoP3RoaXMudG9wLmNoaWxkcmVuW3RoaXMuaW5kZXhdOm51bGw7aWYobyYmby5tYXRjaGVzV2lkZ2V0KHQpJiYodD09by53aWRnZXR8fCFvLndpZGdldC50eXBlLnRvRE9NLnBhcmVudE5vZGUpKXRoaXMuaW5kZXgrKztlbHNle2xldCBpPW5ldyBVUih0aGlzLnRvcCx0LG4scik7dGhpcy50b3AuY2hpbGRyZW4uc3BsaWNlKHRoaXMuaW5kZXgrKywwLGkpLHRoaXMuY2hhbmdlZD0hMH19YWRkVGV4dGJsb2NrSGFja3MoKXtsZXQgdD10aGlzLnRvcC5jaGlsZHJlblt0aGlzLmluZGV4LTFdLG49dGhpcy50b3A7Zm9yKDt0IGluc3RhbmNlb2YgY2w7KW49dCx0PW4uY2hpbGRyZW5bbi5jaGlsZHJlbi5sZW5ndGgtMV07KCF0fHwhKHQgaW5zdGFuY2VvZiBRZyl8fC9cbiQvLnRlc3QodC5ub2RlLnRleHQpfHx0aGlzLnZpZXcucmVxdWlyZXNHZWNrb0hhY2tOb2RlJiYvXHMkLy50ZXN0KHQubm9kZS50ZXh0KSkmJigoWW58fERuKSYmdCYmdC5kb20uY29udGVudEVkaXRhYmxlPT0iZmFsc2UiJiZ0aGlzLmFkZEhhY2tOb2RlKCJJTUciLG4pLHRoaXMuYWRkSGFja05vZGUoIkJSIix0aGlzLnRvcCkpfWFkZEhhY2tOb2RlKHQsbil7aWYobj09dGhpcy50b3AmJnRoaXMuaW5kZXg8bi5jaGlsZHJlbi5sZW5ndGgmJm4uY2hpbGRyZW5bdGhpcy5pbmRleF0ubWF0Y2hlc0hhY2sodCkpdGhpcy5pbmRleCsrO2Vsc2V7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTt0PT0iSU1HIiYmKHIuY2xhc3NOYW1lPSJQcm9zZU1pcnJvci1zZXBhcmF0b3IiLHIuYWx0PSIiKSx0PT0iQlIiJiYoci5jbGFzc05hbWU9IlByb3NlTWlycm9yLXRyYWlsaW5nQnJlYWsiKTtsZXQgbz1uZXcgVlIodGhpcy50b3AsW10scixudWxsKTtuIT10aGlzLnRvcD9uLmNoaWxkcmVuLnB1c2gobyk6bi5jaGlsZHJlbi5zcGxpY2UodGhpcy5pbmRleCsrLDAsbyksdGhpcy5jaGFuZ2VkPSEwfX1pc0xvY2tlZCh0KXtyZXR1cm4gdGhpcy5sb2NrJiYodD09dGhpcy5sb2NrfHx0Lm5vZGVUeXBlPT0xJiZ0LmNvbnRhaW5zKHRoaXMubG9jay5wYXJlbnROb2RlKSl9fWZ1bmN0aW9uIG9CKGUsdCl7bGV0IG49dCxyPW4uY2hpbGRyZW4ubGVuZ3RoLG89ZS5jaGlsZENvdW50LGk9bmV3IE1hcCxzPVtdO2U6Zm9yKDtvPjA7KXtsZXQgYTtmb3IoOzspaWYocil7bGV0IGM9bi5jaGlsZHJlbltyLTFdO2lmKGMgaW5zdGFuY2VvZiBjbCluPWMscj1jLmNoaWxkcmVuLmxlbmd0aDtlbHNle2E9YyxyLS07YnJlYWt9fWVsc2V7aWYobj09dClicmVhayBlO3I9bi5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihuKSxuPW4ucGFyZW50fWxldCBsPWEubm9kZTtpZihsKXtpZihsIT1lLmNoaWxkKG8tMSkpYnJlYWs7LS1vLGkuc2V0KGEsbykscy5wdXNoKGEpfX1yZXR1cm57aW5kZXg6byxtYXRjaGVkOmksbWF0Y2hlczpzLnJldmVyc2UoKX19ZnVuY3Rpb24gaUIoZSx0KXtyZXR1cm4gZS50eXBlLnNpZGUtdC50eXBlLnNpZGV9ZnVuY3Rpb24gc0IoZSx0LG4scil7bGV0IG89dC5sb2NhbHMoZSksaT0wO2lmKG8ubGVuZ3RoPT0wKXtmb3IobGV0IGM9MDtjPGUuY2hpbGRDb3VudDtjKyspe2xldCB1PWUuY2hpbGQoYyk7cih1LG8sdC5mb3JDaGlsZChpLHUpLGMpLGkrPXUubm9kZVNpemV9cmV0dXJufWxldCBzPTAsYT1bXSxsPW51bGw7Zm9yKGxldCBjPTA7Oyl7bGV0IHUsZDtmb3IoO3M8by5sZW5ndGgmJm9bc10udG89PWk7KXtsZXQgeT1vW3MrK107eS53aWRnZXQmJih1PyhkfHwoZD1bdV0pKS5wdXNoKHkpOnU9eSl9aWYodSlpZihkKXtkLnNvcnQoaUIpO2ZvcihsZXQgeT0wO3k8ZC5sZW5ndGg7eSsrKW4oZFt5XSxjLCEhbCl9ZWxzZSBuKHUsYywhIWwpO2xldCBmLHA7aWYobClwPS0xLGY9bCxsPW51bGw7ZWxzZSBpZihjPGUuY2hpbGRDb3VudClwPWMsZj1lLmNoaWxkKGMrKyk7ZWxzZSBicmVhaztmb3IobGV0IHk9MDt5PGEubGVuZ3RoO3krKylhW3ldLnRvPD1pJiZhLnNwbGljZSh5LS0sMSk7Zm9yKDtzPG8ubGVuZ3RoJiZvW3NdLmZyb208PWkmJm9bc10udG8+aTspYS5wdXNoKG9bcysrXSk7bGV0IG09aStmLm5vZGVTaXplO2lmKGYuaXNUZXh0KXtsZXQgeT1tO3M8by5sZW5ndGgmJm9bc10uZnJvbTx5JiYoeT1vW3NdLmZyb20pO2ZvcihsZXQgdj0wO3Y8YS5sZW5ndGg7disrKWFbdl0udG88eSYmKHk9YVt2XS50byk7eTxtJiYobD1mLmN1dCh5LWkpLGY9Zi5jdXQoMCx5LWkpLG09eSxwPS0xKX1lbHNlIGZvcig7czxvLmxlbmd0aCYmb1tzXS50bzxtOylzKys7bGV0IGc9Zi5pc0lubGluZSYmIWYuaXNMZWFmP2EuZmlsdGVyKHk9PiF5LmlubGluZSk6YS5zbGljZSgpO3IoZixnLHQuZm9yQ2hpbGQoaSxmKSxwKSxpPW19fWZ1bmN0aW9uIGFCKGUpe2lmKGUubm9kZU5hbWU9PSJVTCJ8fGUubm9kZU5hbWU9PSJPTCIpe2xldCB0PWUuc3R5bGUuY3NzVGV4dDtlLnN0eWxlLmNzc1RleHQ9dCsiOyBsaXN0LXN0eWxlOiBzcXVhcmUgIWltcG9ydGFudCIsd2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkubGlzdFN0eWxlLGUuc3R5bGUuY3NzVGV4dD10fX1mdW5jdGlvbiBsQihlLHQpe2Zvcig7Oyl7aWYoZS5ub2RlVHlwZT09MylyZXR1cm4gZTtpZihlLm5vZGVUeXBlPT0xJiZ0PjApe2lmKGUuY2hpbGROb2Rlcy5sZW5ndGg+dCYmZS5jaGlsZE5vZGVzW3RdLm5vZGVUeXBlPT0zKXJldHVybiBlLmNoaWxkTm9kZXNbdF07ZT1lLmNoaWxkTm9kZXNbdC0xXSx0PUhvKGUpfWVsc2UgaWYoZS5ub2RlVHlwZT09MSYmdDxlLmNoaWxkTm9kZXMubGVuZ3RoKWU9ZS5jaGlsZE5vZGVzW3RdLHQ9MDtlbHNlIHJldHVybiBudWxsfX1mdW5jdGlvbiBjQihlLHQsbixyKXtmb3IobGV0IG89MCxpPTA7bzxlLmNoaWxkQ291bnQmJmk8PXI7KXtsZXQgcz1lLmNoaWxkKG8rKyksYT1pO2lmKGkrPXMubm9kZVNpemUsIXMuaXNUZXh0KWNvbnRpbnVlO2xldCBsPXMudGV4dDtmb3IoO288ZS5jaGlsZENvdW50Oyl7bGV0IGM9ZS5jaGlsZChvKyspO2lmKGkrPWMubm9kZVNpemUsIWMuaXNUZXh0KWJyZWFrO2wrPWMudGV4dH1pZihpPj1uKXtpZihpPj1yJiZsLnNsaWNlKHItdC5sZW5ndGgtYSxyLWEpPT10KXJldHVybiByLXQubGVuZ3RoO2xldCBjPWE8cj9sLmxhc3RJbmRleE9mKHQsci1hLTEpOi0xO2lmKGM+PTAmJmMrdC5sZW5ndGgrYT49bilyZXR1cm4gYStjO2lmKG49PXImJmwubGVuZ3RoPj1yK3QubGVuZ3RoLWEmJmwuc2xpY2Uoci1hLHItYSt0Lmxlbmd0aCk9PXQpcmV0dXJuIHJ9fXJldHVybi0xfWZ1bmN0aW9uIGp4KGUsdCxuLHIsbyl7bGV0IGk9W107Zm9yKGxldCBzPTAsYT0wO3M8ZS5sZW5ndGg7cysrKXtsZXQgbD1lW3NdLGM9YSx1PWErPWwuc2l6ZTtjPj1ufHx1PD10P2kucHVzaChsKTooYzx0JiZpLnB1c2gobC5zbGljZSgwLHQtYyxyKSksbyYmKGkucHVzaChvKSxvPXZvaWQgMCksdT5uJiZpLnB1c2gobC5zbGljZShuLWMsbC5zaXplLHIpKSl9cmV0dXJuIGl9ZnVuY3Rpb24gbncoZSx0PW51bGwpe2xldCBuPWUuZG9tU2VsZWN0aW9uUmFuZ2UoKSxyPWUuc3RhdGUuZG9jO2lmKCFuLmZvY3VzTm9kZSlyZXR1cm4gbnVsbDtsZXQgbz1lLmRvY1ZpZXcubmVhcmVzdERlc2Mobi5mb2N1c05vZGUpLGk9byYmby5zaXplPT0wLHM9ZS5kb2NWaWV3LnBvc0Zyb21ET00obi5mb2N1c05vZGUsbi5mb2N1c09mZnNldCwxKTtpZihzPDApcmV0dXJuIG51bGw7bGV0IGE9ci5yZXNvbHZlKHMpLGwsYztpZihKZyhuKSl7Zm9yKGw9YTtvJiYhby5ub2RlOylvPW8ucGFyZW50O2xldCB1PW8ubm9kZTtpZihvJiZ1LmlzQXRvbSYmd2UuaXNTZWxlY3RhYmxlKHUpJiZvLnBhcmVudCYmISh1LmlzSW5saW5lJiYkRihuLmZvY3VzTm9kZSxuLmZvY3VzT2Zmc2V0LG8uZG9tKSkpe2xldCBkPW8ucG9zQmVmb3JlO2M9bmV3IHdlKHM9PWQ/YTpyLnJlc29sdmUoZCkpfX1lbHNle2xldCB1PWUuZG9jVmlldy5wb3NGcm9tRE9NKG4uYW5jaG9yTm9kZSxuLmFuY2hvck9mZnNldCwxKTtpZih1PDApcmV0dXJuIG51bGw7bD1yLnJlc29sdmUodSl9aWYoIWMpe2xldCB1PXQ9PSJwb2ludGVyInx8ZS5zdGF0ZS5zZWxlY3Rpb24uaGVhZDxhLnBvcyYmIWk/MTotMTtjPXJ3KGUsbCxhLHUpfXJldHVybiBjfWZ1bmN0aW9uIHFSKGUpe3JldHVybiBlLmVkaXRhYmxlP2UuaGFzRm9jdXMoKTpZUihlKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jb250YWlucyhlLmRvbSl9ZnVuY3Rpb24gUGkoZSx0PSExKXtsZXQgbj1lLnN0YXRlLnNlbGVjdGlvbjtpZihHUihlLG4pLCEhcVIoZSkpe2lmKCF0JiZlLmlucHV0Lm1vdXNlRG93biYmZS5pbnB1dC5tb3VzZURvd24uYWxsb3dEZWZhdWx0JiZEbil7bGV0IHI9ZS5kb21TZWxlY3Rpb25SYW5nZSgpLG89ZS5kb21PYnNlcnZlci5jdXJyZW50U2VsZWN0aW9uO2lmKHIuYW5jaG9yTm9kZSYmby5hbmNob3JOb2RlJiZsbChyLmFuY2hvck5vZGUsci5hbmNob3JPZmZzZXQsby5hbmNob3JOb2RlLG8uYW5jaG9yT2Zmc2V0KSl7ZS5pbnB1dC5tb3VzZURvd24uZGVsYXllZFNlbGVjdGlvblN5bmM9ITAsZS5kb21PYnNlcnZlci5zZXRDdXJTZWxlY3Rpb24oKTtyZXR1cm59fWlmKGUuZG9tT2JzZXJ2ZXIuZGlzY29ubmVjdFNlbGVjdGlvbigpLGUuY3Vyc29yV3JhcHBlcilkQihlKTtlbHNle2xldHthbmNob3I6cixoZWFkOm99PW4saSxzO21fJiYhKG4gaW5zdGFuY2VvZiBUZSkmJihuLiRmcm9tLnBhcmVudC5pbmxpbmVDb250ZW50fHwoaT1nXyhlLG4uZnJvbSkpLCFuLmVtcHR5JiYhbi4kZnJvbS5wYXJlbnQuaW5saW5lQ29udGVudCYmKHM9Z18oZSxuLnRvKSkpLGUuZG9jVmlldy5zZXRTZWxlY3Rpb24ocixvLGUucm9vdCx0KSxtXyYmKGkmJnZfKGkpLHMmJnZfKHMpKSxuLnZpc2libGU/ZS5kb20uY2xhc3NMaXN0LnJlbW92ZSgiUHJvc2VNaXJyb3ItaGlkZXNlbGVjdGlvbiIpOihlLmRvbS5jbGFzc0xpc3QuYWRkKCJQcm9zZU1pcnJvci1oaWRlc2VsZWN0aW9uIiksIm9uc2VsZWN0aW9uY2hhbmdlImluIGRvY3VtZW50JiZ1QihlKSl9ZS5kb21PYnNlcnZlci5zZXRDdXJTZWxlY3Rpb24oKSxlLmRvbU9ic2VydmVyLmNvbm5lY3RTZWxlY3Rpb24oKX19Y29uc3QgbV89WW58fERuJiZJRjw2MztmdW5jdGlvbiBnXyhlLHQpe2xldHtub2RlOm4sb2Zmc2V0OnJ9PWUuZG9jVmlldy5kb21Gcm9tUG9zKHQsMCksbz1yPG4uY2hpbGROb2Rlcy5sZW5ndGg/bi5jaGlsZE5vZGVzW3JdOm51bGwsaT1yP24uY2hpbGROb2Rlc1tyLTFdOm51bGw7aWYoWW4mJm8mJm8uY29udGVudEVkaXRhYmxlPT0iZmFsc2UiKXJldHVybiBSeShvKTtpZigoIW98fG8uY29udGVudEVkaXRhYmxlPT0iZmFsc2UiKSYmKCFpfHxpLmNvbnRlbnRFZGl0YWJsZT09ImZhbHNlIikpe2lmKG8pcmV0dXJuIFJ5KG8pO2lmKGkpcmV0dXJuIFJ5KGkpfX1mdW5jdGlvbiBSeShlKXtyZXR1cm4gZS5jb250ZW50RWRpdGFibGU9InRydWUiLFluJiZlLmRyYWdnYWJsZSYmKGUuZHJhZ2dhYmxlPSExLGUud2FzRHJhZ2dhYmxlPSEwKSxlfWZ1bmN0aW9uIHZfKGUpe2UuY29udGVudEVkaXRhYmxlPSJmYWxzZSIsZS53YXNEcmFnZ2FibGUmJihlLmRyYWdnYWJsZT0hMCxlLndhc0RyYWdnYWJsZT1udWxsKX1mdW5jdGlvbiB1QihlKXtsZXQgdD1lLmRvbS5vd25lckRvY3VtZW50O3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixlLmlucHV0LmhpZGVTZWxlY3Rpb25HdWFyZCk7bGV0IG49ZS5kb21TZWxlY3Rpb25SYW5nZSgpLHI9bi5hbmNob3JOb2RlLG89bi5hbmNob3JPZmZzZXQ7dC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLGUuaW5wdXQuaGlkZVNlbGVjdGlvbkd1YXJkPSgpPT57KG4uYW5jaG9yTm9kZSE9cnx8bi5hbmNob3JPZmZzZXQhPW8pJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLGUuaW5wdXQuaGlkZVNlbGVjdGlvbkd1YXJkKSxzZXRUaW1lb3V0KCgpPT57KCFxUihlKXx8ZS5zdGF0ZS5zZWxlY3Rpb24udmlzaWJsZSkmJmUuZG9tLmNsYXNzTGlzdC5yZW1vdmUoIlByb3NlTWlycm9yLWhpZGVzZWxlY3Rpb24iKX0sMjApKX0pfWZ1bmN0aW9uIGRCKGUpe2xldCB0PWUuZG9tU2VsZWN0aW9uKCksbj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLHI9ZS5jdXJzb3JXcmFwcGVyLmRvbSxvPXIubm9kZU5hbWU9PSJJTUciO28/bi5zZXRFbmQoci5wYXJlbnROb2RlLFZuKHIpKzEpOm4uc2V0RW5kKHIsMCksbi5jb2xsYXBzZSghMSksdC5yZW1vdmVBbGxSYW5nZXMoKSx0LmFkZFJhbmdlKG4pLCFvJiYhZS5zdGF0ZS5zZWxlY3Rpb24udmlzaWJsZSYmdXImJlVzPD0xMSYmKHIuZGlzYWJsZWQ9ITAsci5kaXNhYmxlZD0hMSl9ZnVuY3Rpb24gR1IoZSx0KXtpZih0IGluc3RhbmNlb2Ygd2Upe2xldCBuPWUuZG9jVmlldy5kZXNjQXQodC5mcm9tKTtuIT1lLmxhc3RTZWxlY3RlZFZpZXdEZXNjJiYoeV8oZSksbiYmbi5zZWxlY3ROb2RlKCksZS5sYXN0U2VsZWN0ZWRWaWV3RGVzYz1uKX1lbHNlIHlfKGUpfWZ1bmN0aW9uIHlfKGUpe2UubGFzdFNlbGVjdGVkVmlld0Rlc2MmJihlLmxhc3RTZWxlY3RlZFZpZXdEZXNjLnBhcmVudCYmZS5sYXN0U2VsZWN0ZWRWaWV3RGVzYy5kZXNlbGVjdE5vZGUoKSxlLmxhc3RTZWxlY3RlZFZpZXdEZXNjPXZvaWQgMCl9ZnVuY3Rpb24gcncoZSx0LG4scil7cmV0dXJuIGUuc29tZVByb3AoImNyZWF0ZVNlbGVjdGlvbkJldHdlZW4iLG89Pm8oZSx0LG4pKXx8VGUuYmV0d2Vlbih0LG4scil9ZnVuY3Rpb24geF8oZSl7cmV0dXJuIGUuZWRpdGFibGUmJiFlLmhhc0ZvY3VzKCk/ITE6WVIoZSl9ZnVuY3Rpb24gWVIoZSl7bGV0IHQ9ZS5kb21TZWxlY3Rpb25SYW5nZSgpO2lmKCF0LmFuY2hvck5vZGUpcmV0dXJuITE7dHJ5e3JldHVybiBlLmRvbS5jb250YWlucyh0LmFuY2hvck5vZGUubm9kZVR5cGU9PTM/dC5hbmNob3JOb2RlLnBhcmVudE5vZGU6dC5hbmNob3JOb2RlKSYmKGUuZWRpdGFibGV8fGUuZG9tLmNvbnRhaW5zKHQuZm9jdXNOb2RlLm5vZGVUeXBlPT0zP3QuZm9jdXNOb2RlLnBhcmVudE5vZGU6dC5mb2N1c05vZGUpKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZkIoZSl7bGV0IHQ9ZS5kb2NWaWV3LmRvbUZyb21Qb3MoZS5zdGF0ZS5zZWxlY3Rpb24uYW5jaG9yLDApLG49ZS5kb21TZWxlY3Rpb25SYW5nZSgpO3JldHVybiBsbCh0Lm5vZGUsdC5vZmZzZXQsbi5hbmNob3JOb2RlLG4uYW5jaG9yT2Zmc2V0KX1mdW5jdGlvbiB6eChlLHQpe2xldHskYW5jaG9yOm4sJGhlYWQ6cn09ZS5zZWxlY3Rpb24sbz10PjA/bi5tYXgocik6bi5taW4ociksaT1vLnBhcmVudC5pbmxpbmVDb250ZW50P28uZGVwdGg/ZS5kb2MucmVzb2x2ZSh0PjA/by5hZnRlcigpOm8uYmVmb3JlKCkpOm51bGw6bztyZXR1cm4gaSYmQmUuZmluZEZyb20oaSx0KX1mdW5jdGlvbiB4cyhlLHQpe3JldHVybiBlLmRpc3BhdGNoKGUuc3RhdGUudHIuc2V0U2VsZWN0aW9uKHQpLnNjcm9sbEludG9WaWV3KCkpLCEwfWZ1bmN0aW9uIGJfKGUsdCxuKXtsZXQgcj1lLnN0YXRlLnNlbGVjdGlvbjtpZihyIGluc3RhbmNlb2YgVGUpaWYobi5pbmRleE9mKCJzIik+LTEpe2xldHskaGVhZDpvfT1yLGk9by50ZXh0T2Zmc2V0P251bGw6dDwwP28ubm9kZUJlZm9yZTpvLm5vZGVBZnRlcjtpZighaXx8aS5pc1RleHR8fCFpLmlzTGVhZilyZXR1cm4hMTtsZXQgcz1lLnN0YXRlLmRvYy5yZXNvbHZlKG8ucG9zK2kubm9kZVNpemUqKHQ8MD8tMToxKSk7cmV0dXJuIHhzKGUsbmV3IFRlKHIuJGFuY2hvcixzKSl9ZWxzZSBpZihyLmVtcHR5KXtpZihlLmVuZE9mVGV4dGJsb2NrKHQ+MD8iZm9yd2FyZCI6ImJhY2t3YXJkIikpe2xldCBvPXp4KGUuc3RhdGUsdCk7cmV0dXJuIG8mJm8gaW5zdGFuY2VvZiB3ZT94cyhlLG8pOiExfWVsc2UgaWYoIShCciYmbi5pbmRleE9mKCJtIik+LTEpKXtsZXQgbz1yLiRoZWFkLGk9by50ZXh0T2Zmc2V0P251bGw6dDwwP28ubm9kZUJlZm9yZTpvLm5vZGVBZnRlcixzO2lmKCFpfHxpLmlzVGV4dClyZXR1cm4hMTtsZXQgYT10PDA/by5wb3MtaS5ub2RlU2l6ZTpvLnBvcztyZXR1cm4gaS5pc0F0b218fChzPWUuZG9jVmlldy5kZXNjQXQoYSkpJiYhcy5jb250ZW50RE9NP3dlLmlzU2VsZWN0YWJsZShpKT94cyhlLG5ldyB3ZSh0PDA/ZS5zdGF0ZS5kb2MucmVzb2x2ZShvLnBvcy1pLm5vZGVTaXplKTpvKSk6YXA/eHMoZSxuZXcgVGUoZS5zdGF0ZS5kb2MucmVzb2x2ZSh0PDA/YTphK2kubm9kZVNpemUpKSk6ITE6ITF9fWVsc2UgcmV0dXJuITE7ZWxzZXtpZihyIGluc3RhbmNlb2Ygd2UmJnIubm9kZS5pc0lubGluZSlyZXR1cm4geHMoZSxuZXcgVGUodD4wP3IuJHRvOnIuJGZyb20pKTt7bGV0IG89engoZS5zdGF0ZSx0KTtyZXR1cm4gbz94cyhlLG8pOiExfX19ZnVuY3Rpb24gJG0oZSl7cmV0dXJuIGUubm9kZVR5cGU9PTM/ZS5ub2RlVmFsdWUubGVuZ3RoOmUuY2hpbGROb2Rlcy5sZW5ndGh9ZnVuY3Rpb24gRGQoZSx0KXtsZXQgbj1lLnBtVmlld0Rlc2M7cmV0dXJuIG4mJm4uc2l6ZT09MCYmKHQ8MHx8ZS5uZXh0U2libGluZ3x8ZS5ub2RlTmFtZSE9IkJSIil9ZnVuY3Rpb24gRGwoZSx0KXtyZXR1cm4gdDwwP3BCKGUpOmhCKGUpfWZ1bmN0aW9uIHBCKGUpe2xldCB0PWUuZG9tU2VsZWN0aW9uUmFuZ2UoKSxuPXQuZm9jdXNOb2RlLHI9dC5mb2N1c09mZnNldDtpZighbilyZXR1cm47bGV0IG8saSxzPSExO2ZvcihBbyYmbi5ub2RlVHlwZT09MSYmcjwkbShuKSYmRGQobi5jaGlsZE5vZGVzW3JdLC0xKSYmKHM9ITApOzspaWYocj4wKXtpZihuLm5vZGVUeXBlIT0xKWJyZWFrO3tsZXQgYT1uLmNoaWxkTm9kZXNbci0xXTtpZihEZChhLC0xKSlvPW4saT0tLXI7ZWxzZSBpZihhLm5vZGVUeXBlPT0zKW49YSxyPW4ubm9kZVZhbHVlLmxlbmd0aDtlbHNlIGJyZWFrfX1lbHNle2lmKFhSKG4pKWJyZWFrO3tsZXQgYT1uLnByZXZpb3VzU2libGluZztmb3IoO2EmJkRkKGEsLTEpOylvPW4ucGFyZW50Tm9kZSxpPVZuKGEpLGE9YS5wcmV2aW91c1NpYmxpbmc7aWYoYSluPWEscj0kbShuKTtlbHNle2lmKG49bi5wYXJlbnROb2RlLG49PWUuZG9tKWJyZWFrO3I9MH19fXM/RngoZSxuLHIpOm8mJkZ4KGUsbyxpKX1mdW5jdGlvbiBoQihlKXtsZXQgdD1lLmRvbVNlbGVjdGlvblJhbmdlKCksbj10LmZvY3VzTm9kZSxyPXQuZm9jdXNPZmZzZXQ7aWYoIW4pcmV0dXJuO2xldCBvPSRtKG4pLGkscztmb3IoOzspaWYocjxvKXtpZihuLm5vZGVUeXBlIT0xKWJyZWFrO2xldCBhPW4uY2hpbGROb2Rlc1tyXTtpZihEZChhLDEpKWk9bixzPSsrcjtlbHNlIGJyZWFrfWVsc2V7aWYoWFIobikpYnJlYWs7e2xldCBhPW4ubmV4dFNpYmxpbmc7Zm9yKDthJiZEZChhLDEpOylpPWEucGFyZW50Tm9kZSxzPVZuKGEpKzEsYT1hLm5leHRTaWJsaW5nO2lmKGEpbj1hLHI9MCxvPSRtKG4pO2Vsc2V7aWYobj1uLnBhcmVudE5vZGUsbj09ZS5kb20pYnJlYWs7cj1vPTB9fX1pJiZGeChlLGkscyl9ZnVuY3Rpb24gWFIoZSl7bGV0IHQ9ZS5wbVZpZXdEZXNjO3JldHVybiB0JiZ0Lm5vZGUmJnQubm9kZS5pc0Jsb2NrfWZ1bmN0aW9uIG1CKGUsdCl7Zm9yKDtlJiZ0PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYhZXcoZSk7KXQ9Vm4oZSkrMSxlPWUucGFyZW50Tm9kZTtmb3IoO2UmJnQ8ZS5jaGlsZE5vZGVzLmxlbmd0aDspe2xldCBuPWUuY2hpbGROb2Rlc1t0XTtpZihuLm5vZGVUeXBlPT0zKXJldHVybiBuO2lmKG4ubm9kZVR5cGU9PTEmJm4uY29udGVudEVkaXRhYmxlPT0iZmFsc2UiKWJyZWFrO2U9bix0PTB9fWZ1bmN0aW9uIGdCKGUsdCl7Zm9yKDtlJiYhdCYmIWV3KGUpOyl0PVZuKGUpLGU9ZS5wYXJlbnROb2RlO2Zvcig7ZSYmdDspe2xldCBuPWUuY2hpbGROb2Rlc1t0LTFdO2lmKG4ubm9kZVR5cGU9PTMpcmV0dXJuIG47aWYobi5ub2RlVHlwZT09MSYmbi5jb250ZW50RWRpdGFibGU9PSJmYWxzZSIpYnJlYWs7ZT1uLHQ9ZS5jaGlsZE5vZGVzLmxlbmd0aH19ZnVuY3Rpb24gRngoZSx0LG4pe2lmKHQubm9kZVR5cGUhPTMpe2xldCBpLHM7KHM9bUIodCxuKSk/KHQ9cyxuPTApOihpPWdCKHQsbikpJiYodD1pLG49aS5ub2RlVmFsdWUubGVuZ3RoKX1sZXQgcj1lLmRvbVNlbGVjdGlvbigpO2lmKEpnKHIpKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2kuc2V0RW5kKHQsbiksaS5zZXRTdGFydCh0LG4pLHIucmVtb3ZlQWxsUmFuZ2VzKCksci5hZGRSYW5nZShpKX1lbHNlIHIuZXh0ZW5kJiZyLmV4dGVuZCh0LG4pO2UuZG9tT2JzZXJ2ZXIuc2V0Q3VyU2VsZWN0aW9uKCk7bGV0e3N0YXRlOm99PWU7c2V0VGltZW91dCgoKT0+e2Uuc3RhdGU9PW8mJlBpKGUpfSw1MCl9ZnVuY3Rpb24gd18oZSx0KXtsZXQgbj1lLnN0YXRlLmRvYy5yZXNvbHZlKHQpO2lmKCEoRG58fExGKSYmbi5wYXJlbnQuaW5saW5lQ29udGVudCl7bGV0IG89ZS5jb29yZHNBdFBvcyh0KTtpZih0Pm4uc3RhcnQoKSl7bGV0IGk9ZS5jb29yZHNBdFBvcyh0LTEpLHM9KGkudG9wK2kuYm90dG9tKS8yO2lmKHM+by50b3AmJnM8by5ib3R0b20mJk1hdGguYWJzKGkubGVmdC1vLmxlZnQpPjEpcmV0dXJuIGkubGVmdDxvLmxlZnQ/Imx0ciI6InJ0bCJ9aWYodDxuLmVuZCgpKXtsZXQgaT1lLmNvb3Jkc0F0UG9zKHQrMSkscz0oaS50b3AraS5ib3R0b20pLzI7aWYocz5vLnRvcCYmczxvLmJvdHRvbSYmTWF0aC5hYnMoaS5sZWZ0LW8ubGVmdCk+MSlyZXR1cm4gaS5sZWZ0Pm8ubGVmdD8ibHRyIjoicnRsIn19cmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZS5kb20pLmRpcmVjdGlvbj09InJ0bCI/InJ0bCI6Imx0ciJ9ZnVuY3Rpb24gU18oZSx0LG4pe2xldCByPWUuc3RhdGUuc2VsZWN0aW9uO2lmKHIgaW5zdGFuY2VvZiBUZSYmIXIuZW1wdHl8fG4uaW5kZXhPZigicyIpPi0xfHxCciYmbi5pbmRleE9mKCJtIik+LTEpcmV0dXJuITE7bGV0eyRmcm9tOm8sJHRvOml9PXI7aWYoIW8ucGFyZW50LmlubGluZUNvbnRlbnR8fGUuZW5kT2ZUZXh0YmxvY2sodDwwPyJ1cCI6ImRvd24iKSl7bGV0IHM9engoZS5zdGF0ZSx0KTtpZihzJiZzIGluc3RhbmNlb2Ygd2UpcmV0dXJuIHhzKGUscyl9aWYoIW8ucGFyZW50LmlubGluZUNvbnRlbnQpe2xldCBzPXQ8MD9vOmksYT1yIGluc3RhbmNlb2YgcW4/QmUubmVhcihzLHQpOkJlLmZpbmRGcm9tKHMsdCk7cmV0dXJuIGE/eHMoZSxhKTohMX1yZXR1cm4hMX1mdW5jdGlvbiBrXyhlLHQpe2lmKCEoZS5zdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBUZSkpcmV0dXJuITA7bGV0eyRoZWFkOm4sJGFuY2hvcjpyLGVtcHR5Om99PWUuc3RhdGUuc2VsZWN0aW9uO2lmKCFuLnNhbWVQYXJlbnQocikpcmV0dXJuITA7aWYoIW8pcmV0dXJuITE7aWYoZS5lbmRPZlRleHRibG9jayh0PjA/ImZvcndhcmQiOiJiYWNrd2FyZCIpKXJldHVybiEwO2xldCBpPSFuLnRleHRPZmZzZXQmJih0PDA/bi5ub2RlQmVmb3JlOm4ubm9kZUFmdGVyKTtpZihpJiYhaS5pc1RleHQpe2xldCBzPWUuc3RhdGUudHI7cmV0dXJuIHQ8MD9zLmRlbGV0ZShuLnBvcy1pLm5vZGVTaXplLG4ucG9zKTpzLmRlbGV0ZShuLnBvcyxuLnBvcytpLm5vZGVTaXplKSxlLmRpc3BhdGNoKHMpLCEwfXJldHVybiExfWZ1bmN0aW9uIEVfKGUsdCxuKXtlLmRvbU9ic2VydmVyLnN0b3AoKSx0LmNvbnRlbnRFZGl0YWJsZT1uLGUuZG9tT2JzZXJ2ZXIuc3RhcnQoKX1mdW5jdGlvbiB2QihlKXtpZighWW58fGUuc3RhdGUuc2VsZWN0aW9uLiRoZWFkLnBhcmVudE9mZnNldD4wKXJldHVybiExO2xldHtmb2N1c05vZGU6dCxmb2N1c09mZnNldDpufT1lLmRvbVNlbGVjdGlvblJhbmdlKCk7aWYodCYmdC5ub2RlVHlwZT09MSYmbj09MCYmdC5maXJzdENoaWxkJiZ0LmZpcnN0Q2hpbGQuY29udGVudEVkaXRhYmxlPT0iZmFsc2UiKXtsZXQgcj10LmZpcnN0Q2hpbGQ7RV8oZSxyLCJ0cnVlIiksc2V0VGltZW91dCgoKT0+RV8oZSxyLCJmYWxzZSIpLDIwKX1yZXR1cm4hMX1mdW5jdGlvbiB5QihlKXtsZXQgdD0iIjtyZXR1cm4gZS5jdHJsS2V5JiYodCs9ImMiKSxlLm1ldGFLZXkmJih0Kz0ibSIpLGUuYWx0S2V5JiYodCs9ImEiKSxlLnNoaWZ0S2V5JiYodCs9InMiKSx0fWZ1bmN0aW9uIHhCKGUsdCl7bGV0IG49dC5rZXlDb2RlLHI9eUIodCk7aWYobj09OHx8QnImJm49PTcyJiZyPT0iYyIpcmV0dXJuIGtfKGUsLTEpfHxEbChlLC0xKTtpZihuPT00NiYmIXQuc2hpZnRLZXl8fEJyJiZuPT02OCYmcj09ImMiKXJldHVybiBrXyhlLDEpfHxEbChlLDEpO2lmKG49PTEzfHxuPT0yNylyZXR1cm4hMDtpZihuPT0zN3x8QnImJm49PTY2JiZyPT0iYyIpe2xldCBvPW49PTM3P3dfKGUsZS5zdGF0ZS5zZWxlY3Rpb24uZnJvbSk9PSJsdHIiPy0xOjE6LTE7cmV0dXJuIGJfKGUsbyxyKXx8RGwoZSxvKX1lbHNlIGlmKG49PTM5fHxCciYmbj09NzAmJnI9PSJjIil7bGV0IG89bj09Mzk/d18oZSxlLnN0YXRlLnNlbGVjdGlvbi5mcm9tKT09Imx0ciI/MTotMToxO3JldHVybiBiXyhlLG8scil8fERsKGUsbyl9ZWxzZXtpZihuPT0zOHx8QnImJm49PTgwJiZyPT0iYyIpcmV0dXJuIFNfKGUsLTEscil8fERsKGUsLTEpO2lmKG49PTQwfHxCciYmbj09NzgmJnI9PSJjIilyZXR1cm4gdkIoZSl8fFNfKGUsMSxyKXx8RGwoZSwxKTtpZihyPT0oQnI/Im0iOiJjIikmJihuPT02Nnx8bj09NzN8fG49PTg5fHxuPT05MCkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWlIoZSx0KXtlLnNvbWVQcm9wKCJ0cmFuc2Zvcm1Db3BpZWQiLHA9Pnt0PXAodCxlKX0pO2xldCBuPVtdLHtjb250ZW50OnIsb3BlblN0YXJ0Om8sb3BlbkVuZDppfT10O2Zvcig7bz4xJiZpPjEmJnIuY2hpbGRDb3VudD09MSYmci5maXJzdENoaWxkLmNoaWxkQ291bnQ9PTE7KXtvLS0saS0tO2xldCBwPXIuZmlyc3RDaGlsZDtuLnB1c2gocC50eXBlLm5hbWUscC5hdHRycyE9cC50eXBlLmRlZmF1bHRBdHRycz9wLmF0dHJzOm51bGwpLHI9cC5jb250ZW50fWxldCBzPWUuc29tZVByb3AoImNsaXBib2FyZFNlcmlhbGl6ZXIiKXx8a28uZnJvbVNjaGVtYShlLnN0YXRlLnNjaGVtYSksYT1yTigpLGw9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmFwcGVuZENoaWxkKHMuc2VyaWFsaXplRnJhZ21lbnQocix7ZG9jdW1lbnQ6YX0pKTtsZXQgYz1sLmZpcnN0Q2hpbGQsdSxkPTA7Zm9yKDtjJiZjLm5vZGVUeXBlPT0xJiYodT1uTltjLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKTspe2ZvcihsZXQgcD11Lmxlbmd0aC0xO3A+PTA7cC0tKXtsZXQgbT1hLmNyZWF0ZUVsZW1lbnQodVtwXSk7Zm9yKDtsLmZpcnN0Q2hpbGQ7KW0uYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKTtsLmFwcGVuZENoaWxkKG0pLGQrK31jPWwuZmlyc3RDaGlsZH1jJiZjLm5vZGVUeXBlPT0xJiZjLnNldEF0dHJpYnV0ZSgiZGF0YS1wbS1zbGljZSIsYCR7b30gJHtpfSR7ZD9gIC0ke2R9YDoiIn0gJHtKU09OLnN0cmluZ2lmeShuKX1gKTtsZXQgZj1lLnNvbWVQcm9wKCJjbGlwYm9hcmRUZXh0U2VyaWFsaXplciIscD0+cCh0LGUpKXx8dC5jb250ZW50LnRleHRCZXR3ZWVuKDAsdC5jb250ZW50LnNpemUsYAoKYCk7cmV0dXJue2RvbTpsLHRleHQ6Zn19ZnVuY3Rpb24gSlIoZSx0LG4scixvKXtsZXQgaT1vLnBhcmVudC50eXBlLnNwZWMuY29kZSxzLGE7aWYoIW4mJiF0KXJldHVybiBudWxsO2xldCBsPXQmJihyfHxpfHwhbik7aWYobCl7aWYoZS5zb21lUHJvcCgidHJhbnNmb3JtUGFzdGVkVGV4dCIsZj0+e3Q9Zih0LGl8fHIsZSl9KSxpKXJldHVybiB0P25ldyBKKFUuZnJvbShlLnN0YXRlLnNjaGVtYS50ZXh0KHQucmVwbGFjZSgvXHJcbj8vZyxgCmApKSksMCwwKTpKLmVtcHR5O2xldCBkPWUuc29tZVByb3AoImNsaXBib2FyZFRleHRQYXJzZXIiLGY9PmYodCxvLHIsZSkpO2lmKGQpYT1kO2Vsc2V7bGV0IGY9by5tYXJrcygpLHtzY2hlbWE6cH09ZS5zdGF0ZSxtPWtvLmZyb21TY2hlbWEocCk7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0LnNwbGl0KC8oPzpcclxuP3xcbikrLykuZm9yRWFjaChnPT57bGV0IHk9cy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikpO2cmJnkuYXBwZW5kQ2hpbGQobS5zZXJpYWxpemVOb2RlKHAudGV4dChnLGYpKSl9KX19ZWxzZSBlLnNvbWVQcm9wKCJ0cmFuc2Zvcm1QYXN0ZWRIVE1MIixkPT57bj1kKG4sZSl9KSxzPVNCKG4pLGFwJiZrQihzKTtsZXQgYz1zJiZzLnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXBtLXNsaWNlXSIpLHU9YyYmL14oXGQrKSAoXGQrKSg/OiAtKFxkKykpPyAoLiopLy5leGVjKGMuZ2V0QXR0cmlidXRlKCJkYXRhLXBtLXNsaWNlIil8fCIiKTtpZih1JiZ1WzNdKWZvcihsZXQgZD0rdVszXTtkPjA7ZC0tKXtsZXQgZj1zLmZpcnN0Q2hpbGQ7Zm9yKDtmJiZmLm5vZGVUeXBlIT0xOylmPWYubmV4dFNpYmxpbmc7aWYoIWYpYnJlYWs7cz1mfWlmKGF8fChhPShlLnNvbWVQcm9wKCJjbGlwYm9hcmRQYXJzZXIiKXx8ZS5zb21lUHJvcCgiZG9tUGFyc2VyIil8fFdjLmZyb21TY2hlbWEoZS5zdGF0ZS5zY2hlbWEpKS5wYXJzZVNsaWNlKHMse3ByZXNlcnZlV2hpdGVzcGFjZTohIShsfHx1KSxjb250ZXh0Om8scnVsZUZyb21Ob2RlKGYpe3JldHVybiBmLm5vZGVOYW1lPT0iQlIiJiYhZi5uZXh0U2libGluZyYmZi5wYXJlbnROb2RlJiYhYkIudGVzdChmLnBhcmVudE5vZGUubm9kZU5hbWUpP3tpZ25vcmU6ITB9Om51bGx9fSkpLHUpYT1FQihfXyhhLCt1WzFdLCt1WzJdKSx1WzRdKTtlbHNlIGlmKGE9Si5tYXhPcGVuKHdCKGEuY29udGVudCxvKSwhMCksYS5vcGVuU3RhcnR8fGEub3BlbkVuZCl7bGV0IGQ9MCxmPTA7Zm9yKGxldCBwPWEuY29udGVudC5maXJzdENoaWxkO2Q8YS5vcGVuU3RhcnQmJiFwLnR5cGUuc3BlYy5pc29sYXRpbmc7ZCsrLHA9cC5maXJzdENoaWxkKTtmb3IobGV0IHA9YS5jb250ZW50Lmxhc3RDaGlsZDtmPGEub3BlbkVuZCYmIXAudHlwZS5zcGVjLmlzb2xhdGluZztmKysscD1wLmxhc3RDaGlsZCk7YT1fXyhhLGQsZil9cmV0dXJuIGUuc29tZVByb3AoInRyYW5zZm9ybVBhc3RlZCIsZD0+e2E9ZChhLGUpfSksYX1jb25zdCBiQj0vXihhfGFiYnJ8YWNyb255bXxifGNpdGV8Y29kZXxkZWx8ZW18aXxpbnN8a2JkfGxhYmVsfG91dHB1dHxxfHJ1Ynl8c3xzYW1wfHNwYW58c3Ryb25nfHN1YnxzdXB8dGltZXx1fHR0fHZhcikkL2k7ZnVuY3Rpb24gd0IoZSx0KXtpZihlLmNoaWxkQ291bnQ8MilyZXR1cm4gZTtmb3IobGV0IG49dC5kZXB0aDtuPj0wO24tLSl7bGV0IG89dC5ub2RlKG4pLmNvbnRlbnRNYXRjaEF0KHQuaW5kZXgobikpLGkscz1bXTtpZihlLmZvckVhY2goYT0+e2lmKCFzKXJldHVybjtsZXQgbD1vLmZpbmRXcmFwcGluZyhhLnR5cGUpLGM7aWYoIWwpcmV0dXJuIHM9bnVsbDtpZihjPXMubGVuZ3RoJiZpLmxlbmd0aCYmZU4obCxpLGEsc1tzLmxlbmd0aC0xXSwwKSlzW3MubGVuZ3RoLTFdPWM7ZWxzZXtzLmxlbmd0aCYmKHNbcy5sZW5ndGgtMV09dE4oc1tzLmxlbmd0aC0xXSxpLmxlbmd0aCkpO2xldCB1PVFSKGEsbCk7cy5wdXNoKHUpLG89by5tYXRjaFR5cGUodS50eXBlKSxpPWx9fSkscylyZXR1cm4gVS5mcm9tKHMpfXJldHVybiBlfWZ1bmN0aW9uIFFSKGUsdCxuPTApe2ZvcihsZXQgcj10Lmxlbmd0aC0xO3I+PW47ci0tKWU9dFtyXS5jcmVhdGUobnVsbCxVLmZyb20oZSkpO3JldHVybiBlfWZ1bmN0aW9uIGVOKGUsdCxuLHIsbyl7aWYobzxlLmxlbmd0aCYmbzx0Lmxlbmd0aCYmZVtvXT09dFtvXSl7bGV0IGk9ZU4oZSx0LG4sci5sYXN0Q2hpbGQsbysxKTtpZihpKXJldHVybiByLmNvcHkoci5jb250ZW50LnJlcGxhY2VDaGlsZChyLmNoaWxkQ291bnQtMSxpKSk7aWYoci5jb250ZW50TWF0Y2hBdChyLmNoaWxkQ291bnQpLm1hdGNoVHlwZShvPT1lLmxlbmd0aC0xP24udHlwZTplW28rMV0pKXJldHVybiByLmNvcHkoci5jb250ZW50LmFwcGVuZChVLmZyb20oUVIobixlLG8rMSkpKSl9fWZ1bmN0aW9uIHROKGUsdCl7aWYodD09MClyZXR1cm4gZTtsZXQgbj1lLmNvbnRlbnQucmVwbGFjZUNoaWxkKGUuY2hpbGRDb3VudC0xLHROKGUubGFzdENoaWxkLHQtMSkpLHI9ZS5jb250ZW50TWF0Y2hBdChlLmNoaWxkQ291bnQpLmZpbGxCZWZvcmUoVS5lbXB0eSwhMCk7cmV0dXJuIGUuY29weShuLmFwcGVuZChyKSl9ZnVuY3Rpb24gQngoZSx0LG4scixvLGkpe2xldCBzPXQ8MD9lLmZpcnN0Q2hpbGQ6ZS5sYXN0Q2hpbGQsYT1zLmNvbnRlbnQ7cmV0dXJuIGUuY2hpbGRDb3VudD4xJiYoaT0wKSxvPHItMSYmKGE9QngoYSx0LG4scixvKzEsaSkpLG8+PW4mJihhPXQ8MD9zLmNvbnRlbnRNYXRjaEF0KDApLmZpbGxCZWZvcmUoYSxpPD1vKS5hcHBlbmQoYSk6YS5hcHBlbmQocy5jb250ZW50TWF0Y2hBdChzLmNoaWxkQ291bnQpLmZpbGxCZWZvcmUoVS5lbXB0eSwhMCkpKSxlLnJlcGxhY2VDaGlsZCh0PDA/MDplLmNoaWxkQ291bnQtMSxzLmNvcHkoYSkpfWZ1bmN0aW9uIF9fKGUsdCxuKXtyZXR1cm4gdDxlLm9wZW5TdGFydCYmKGU9bmV3IEooQngoZS5jb250ZW50LC0xLHQsZS5vcGVuU3RhcnQsMCxlLm9wZW5FbmQpLHQsZS5vcGVuRW5kKSksbjxlLm9wZW5FbmQmJihlPW5ldyBKKEJ4KGUuY29udGVudCwxLG4sZS5vcGVuRW5kLDAsMCksZS5vcGVuU3RhcnQsbikpLGV9Y29uc3Qgbk49e3RoZWFkOlsidGFibGUiXSx0Ym9keTpbInRhYmxlIl0sdGZvb3Q6WyJ0YWJsZSJdLGNhcHRpb246WyJ0YWJsZSJdLGNvbGdyb3VwOlsidGFibGUiXSxjb2w6WyJ0YWJsZSIsImNvbGdyb3VwIl0sdHI6WyJ0YWJsZSIsInRib2R5Il0sdGQ6WyJ0YWJsZSIsInRib2R5IiwidHIiXSx0aDpbInRhYmxlIiwidGJvZHkiLCJ0ciJdfTtsZXQgQ189bnVsbDtmdW5jdGlvbiByTigpe3JldHVybiBDX3x8KENfPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGl0bGUiKSl9ZnVuY3Rpb24gU0IoZSl7bGV0IHQ9L14oXHMqPG1ldGEgW14+XSo+KSovLmV4ZWMoZSk7dCYmKGU9ZS5zbGljZSh0WzBdLmxlbmd0aCkpO2xldCBuPXJOKCkuY3JlYXRlRWxlbWVudCgiZGl2Iikscj0vPChbYS16XVtePlxzXSspL2kuZXhlYyhlKSxvO2lmKChvPXImJm5OW3JbMV0udG9Mb3dlckNhc2UoKV0pJiYoZT1vLm1hcChpPT4iPCIraSsiPiIpLmpvaW4oIiIpK2Urby5tYXAoaT0+IjwvIitpKyI+IikucmV2ZXJzZSgpLmpvaW4oIiIpKSxuLmlubmVySFRNTD1lLG8pZm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspbj1uLnF1ZXJ5U2VsZWN0b3Iob1tpXSl8fG47cmV0dXJuIG59ZnVuY3Rpb24ga0IoZSl7bGV0IHQ9ZS5xdWVyeVNlbGVjdG9yQWxsKERuPyJzcGFuOm5vdChbY2xhc3NdKTpub3QoW3N0eWxlXSkiOiJzcGFuLkFwcGxlLWNvbnZlcnRlZC1zcGFjZSIpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgcj10W25dO3IuY2hpbGROb2Rlcy5sZW5ndGg9PTEmJnIudGV4dENvbnRlbnQ9PSLCoCImJnIucGFyZW50Tm9kZSYmci5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSxyKX19ZnVuY3Rpb24gRUIoZSx0KXtpZighZS5zaXplKXJldHVybiBlO2xldCBuPWUuY29udGVudC5maXJzdENoaWxkLnR5cGUuc2NoZW1hLHI7dHJ5e3I9SlNPTi5wYXJzZSh0KX1jYXRjaHtyZXR1cm4gZX1sZXR7Y29udGVudDpvLG9wZW5TdGFydDppLG9wZW5FbmQ6c309ZTtmb3IobGV0IGE9ci5sZW5ndGgtMjthPj0wO2EtPTIpe2xldCBsPW4ubm9kZXNbclthXV07aWYoIWx8fGwuaGFzUmVxdWlyZWRBdHRycygpKWJyZWFrO289VS5mcm9tKGwuY3JlYXRlKHJbYSsxXSxvKSksaSsrLHMrK31yZXR1cm4gbmV3IEoobyxpLHMpfWNvbnN0IFhuPXt9LFpuPXt9LF9CPXt0b3VjaHN0YXJ0OiEwLHRvdWNobW92ZTohMH07Y2xhc3MgQ0J7Y29uc3RydWN0b3IoKXt0aGlzLnNoaWZ0S2V5PSExLHRoaXMubW91c2VEb3duPW51bGwsdGhpcy5sYXN0S2V5Q29kZT1udWxsLHRoaXMubGFzdEtleUNvZGVUaW1lPTAsdGhpcy5sYXN0Q2xpY2s9e3RpbWU6MCx4OjAseTowLHR5cGU6IiJ9LHRoaXMubGFzdFNlbGVjdGlvbk9yaWdpbj1udWxsLHRoaXMubGFzdFNlbGVjdGlvblRpbWU9MCx0aGlzLmxhc3RJT1NFbnRlcj0wLHRoaXMubGFzdElPU0VudGVyRmFsbGJhY2tUaW1lb3V0PS0xLHRoaXMubGFzdEZvY3VzPTAsdGhpcy5sYXN0VG91Y2g9MCx0aGlzLmxhc3RBbmRyb2lkRGVsZXRlPTAsdGhpcy5jb21wb3Npbmc9ITEsdGhpcy5jb21wb3NpbmdUaW1lb3V0PS0xLHRoaXMuY29tcG9zaXRpb25Ob2Rlcz1bXSx0aGlzLmNvbXBvc2l0aW9uRW5kZWRBdD0tMmU4LHRoaXMuY29tcG9zaXRpb25JRD0xLHRoaXMuY29tcG9zaXRpb25QZW5kaW5nQ2hhbmdlcz0wLHRoaXMuZG9tQ2hhbmdlQ291bnQ9MCx0aGlzLmV2ZW50SGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmhpZGVTZWxlY3Rpb25HdWFyZD1udWxsfX1mdW5jdGlvbiBPQihlKXtmb3IobGV0IHQgaW4gWG4pe2xldCBuPVhuW3RdO2UuZG9tLmFkZEV2ZW50TGlzdGVuZXIodCxlLmlucHV0LmV2ZW50SGFuZGxlcnNbdF09cj0+e1BCKGUscikmJiFvdyhlLHIpJiYoZS5lZGl0YWJsZXx8IShyLnR5cGUgaW4gWm4pKSYmbihlLHIpfSxfQlt0XT97cGFzc2l2ZTohMH06dm9pZCAwKX1ZbiYmZS5kb20uYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCgpPT5udWxsKSxVeChlKX1mdW5jdGlvbiBNcyhlLHQpe2UuaW5wdXQubGFzdFNlbGVjdGlvbk9yaWdpbj10LGUuaW5wdXQubGFzdFNlbGVjdGlvblRpbWU9RGF0ZS5ub3coKX1mdW5jdGlvbiBUQihlKXtlLmRvbU9ic2VydmVyLnN0b3AoKTtmb3IobGV0IHQgaW4gZS5pbnB1dC5ldmVudEhhbmRsZXJzKWUuZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLmlucHV0LmV2ZW50SGFuZGxlcnNbdF0pO2NsZWFyVGltZW91dChlLmlucHV0LmNvbXBvc2luZ1RpbWVvdXQpLGNsZWFyVGltZW91dChlLmlucHV0Lmxhc3RJT1NFbnRlckZhbGxiYWNrVGltZW91dCl9ZnVuY3Rpb24gVXgoZSl7ZS5zb21lUHJvcCgiaGFuZGxlRE9NRXZlbnRzIix0PT57Zm9yKGxldCBuIGluIHQpZS5pbnB1dC5ldmVudEhhbmRsZXJzW25dfHxlLmRvbS5hZGRFdmVudExpc3RlbmVyKG4sZS5pbnB1dC5ldmVudEhhbmRsZXJzW25dPXI9Pm93KGUscikpfSl9ZnVuY3Rpb24gb3coZSx0KXtyZXR1cm4gZS5zb21lUHJvcCgiaGFuZGxlRE9NRXZlbnRzIixuPT57bGV0IHI9blt0LnR5cGVdO3JldHVybiByP3IoZSx0KXx8dC5kZWZhdWx0UHJldmVudGVkOiExfSl9ZnVuY3Rpb24gUEIoZSx0KXtpZighdC5idWJibGVzKXJldHVybiEwO2lmKHQuZGVmYXVsdFByZXZlbnRlZClyZXR1cm4hMTtmb3IobGV0IG49dC50YXJnZXQ7biE9ZS5kb207bj1uLnBhcmVudE5vZGUpaWYoIW58fG4ubm9kZVR5cGU9PTExfHxuLnBtVmlld0Rlc2MmJm4ucG1WaWV3RGVzYy5zdG9wRXZlbnQodCkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTUIoZSx0KXshb3coZSx0KSYmWG5bdC50eXBlXSYmKGUuZWRpdGFibGV8fCEodC50eXBlIGluIFpuKSkmJlhuW3QudHlwZV0oZSx0KX1abi5rZXlkb3duPShlLHQpPT57bGV0IG49dDtpZihlLmlucHV0LnNoaWZ0S2V5PW4ua2V5Q29kZT09MTZ8fG4uc2hpZnRLZXksIWlOKGUsbikmJihlLmlucHV0Lmxhc3RLZXlDb2RlPW4ua2V5Q29kZSxlLmlucHV0Lmxhc3RLZXlDb2RlVGltZT1EYXRlLm5vdygpLCEoeW8mJkRuJiZuLmtleUNvZGU9PTEzKSkpaWYobi5rZXlDb2RlIT0yMjkmJmUuZG9tT2JzZXJ2ZXIuZm9yY2VGbHVzaCgpLEdjJiZuLmtleUNvZGU9PTEzJiYhbi5jdHJsS2V5JiYhbi5hbHRLZXkmJiFuLm1ldGFLZXkpe2xldCByPURhdGUubm93KCk7ZS5pbnB1dC5sYXN0SU9TRW50ZXI9cixlLmlucHV0Lmxhc3RJT1NFbnRlckZhbGxiYWNrVGltZW91dD1zZXRUaW1lb3V0KCgpPT57ZS5pbnB1dC5sYXN0SU9TRW50ZXI9PXImJihlLnNvbWVQcm9wKCJoYW5kbGVLZXlEb3duIixvPT5vKGUsVGEoMTMsIkVudGVyIikpKSxlLmlucHV0Lmxhc3RJT1NFbnRlcj0wKX0sMjAwKX1lbHNlIGUuc29tZVByb3AoImhhbmRsZUtleURvd24iLHI9PnIoZSxuKSl8fHhCKGUsbik/bi5wcmV2ZW50RGVmYXVsdCgpOk1zKGUsImtleSIpfTtabi5rZXl1cD0oZSx0KT0+e3Qua2V5Q29kZT09MTYmJihlLmlucHV0LnNoaWZ0S2V5PSExKX07Wm4ua2V5cHJlc3M9KGUsdCk9PntsZXQgbj10O2lmKGlOKGUsbil8fCFuLmNoYXJDb2RlfHxuLmN0cmxLZXkmJiFuLmFsdEtleXx8QnImJm4ubWV0YUtleSlyZXR1cm47aWYoZS5zb21lUHJvcCgiaGFuZGxlS2V5UHJlc3MiLG89Pm8oZSxuKSkpe24ucHJldmVudERlZmF1bHQoKTtyZXR1cm59bGV0IHI9ZS5zdGF0ZS5zZWxlY3Rpb247aWYoIShyIGluc3RhbmNlb2YgVGUpfHwhci4kZnJvbS5zYW1lUGFyZW50KHIuJHRvKSl7bGV0IG89U3RyaW5nLmZyb21DaGFyQ29kZShuLmNoYXJDb2RlKTshL1tcclxuXS8udGVzdChvKSYmIWUuc29tZVByb3AoImhhbmRsZVRleHRJbnB1dCIsaT0+aShlLHIuJGZyb20ucG9zLHIuJHRvLnBvcyxvKSkmJmUuZGlzcGF0Y2goZS5zdGF0ZS50ci5pbnNlcnRUZXh0KG8pLnNjcm9sbEludG9WaWV3KCkpLG4ucHJldmVudERlZmF1bHQoKX19O2Z1bmN0aW9uIGV2KGUpe3JldHVybntsZWZ0OmUuY2xpZW50WCx0b3A6ZS5jbGllbnRZfX1mdW5jdGlvbiBSQihlLHQpe2xldCBuPXQueC1lLmNsaWVudFgscj10LnktZS5jbGllbnRZO3JldHVybiBuKm4rcipyPDEwMH1mdW5jdGlvbiBpdyhlLHQsbixyLG8pe2lmKHI9PS0xKXJldHVybiExO2xldCBpPWUuc3RhdGUuZG9jLnJlc29sdmUocik7Zm9yKGxldCBzPWkuZGVwdGgrMTtzPjA7cy0tKWlmKGUuc29tZVByb3AodCxhPT5zPmkuZGVwdGg/YShlLG4saS5ub2RlQWZ0ZXIsaS5iZWZvcmUocyksbywhMCk6YShlLG4saS5ub2RlKHMpLGkuYmVmb3JlKHMpLG8sITEpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBUYyhlLHQsbil7ZS5mb2N1c2VkfHxlLmZvY3VzKCk7bGV0IHI9ZS5zdGF0ZS50ci5zZXRTZWxlY3Rpb24odCk7bj09InBvaW50ZXIiJiZyLnNldE1ldGEoInBvaW50ZXIiLCEwKSxlLmRpc3BhdGNoKHIpfWZ1bmN0aW9uIE5CKGUsdCl7aWYodD09LTEpcmV0dXJuITE7bGV0IG49ZS5zdGF0ZS5kb2MucmVzb2x2ZSh0KSxyPW4ubm9kZUFmdGVyO3JldHVybiByJiZyLmlzQXRvbSYmd2UuaXNTZWxlY3RhYmxlKHIpPyhUYyhlLG5ldyB3ZShuKSwicG9pbnRlciIpLCEwKTohMX1mdW5jdGlvbiAkQihlLHQpe2lmKHQ9PS0xKXJldHVybiExO2xldCBuPWUuc3RhdGUuc2VsZWN0aW9uLHIsbztuIGluc3RhbmNlb2Ygd2UmJihyPW4ubm9kZSk7bGV0IGk9ZS5zdGF0ZS5kb2MucmVzb2x2ZSh0KTtmb3IobGV0IHM9aS5kZXB0aCsxO3M+MDtzLS0pe2xldCBhPXM+aS5kZXB0aD9pLm5vZGVBZnRlcjppLm5vZGUocyk7aWYod2UuaXNTZWxlY3RhYmxlKGEpKXtyJiZuLiRmcm9tLmRlcHRoPjAmJnM+PW4uJGZyb20uZGVwdGgmJmkuYmVmb3JlKG4uJGZyb20uZGVwdGgrMSk9PW4uJGZyb20ucG9zP289aS5iZWZvcmUobi4kZnJvbS5kZXB0aCk6bz1pLmJlZm9yZShzKTticmVha319cmV0dXJuIG8hPW51bGw/KFRjKGUsd2UuY3JlYXRlKGUuc3RhdGUuZG9jLG8pLCJwb2ludGVyIiksITApOiExfWZ1bmN0aW9uIEFCKGUsdCxuLHIsbyl7cmV0dXJuIGl3KGUsImhhbmRsZUNsaWNrT24iLHQsbixyKXx8ZS5zb21lUHJvcCgiaGFuZGxlQ2xpY2siLGk9PmkoZSx0LHIpKXx8KG8/JEIoZSxuKTpOQihlLG4pKX1mdW5jdGlvbiBEQihlLHQsbixyKXtyZXR1cm4gaXcoZSwiaGFuZGxlRG91YmxlQ2xpY2tPbiIsdCxuLHIpfHxlLnNvbWVQcm9wKCJoYW5kbGVEb3VibGVDbGljayIsbz0+byhlLHQscikpfWZ1bmN0aW9uIElCKGUsdCxuLHIpe3JldHVybiBpdyhlLCJoYW5kbGVUcmlwbGVDbGlja09uIix0LG4scil8fGUuc29tZVByb3AoImhhbmRsZVRyaXBsZUNsaWNrIixvPT5vKGUsdCxyKSl8fExCKGUsbixyKX1mdW5jdGlvbiBMQihlLHQsbil7aWYobi5idXR0b24hPTApcmV0dXJuITE7bGV0IHI9ZS5zdGF0ZS5kb2M7aWYodD09LTEpcmV0dXJuIHIuaW5saW5lQ29udGVudD8oVGMoZSxUZS5jcmVhdGUociwwLHIuY29udGVudC5zaXplKSwicG9pbnRlciIpLCEwKTohMTtsZXQgbz1yLnJlc29sdmUodCk7Zm9yKGxldCBpPW8uZGVwdGgrMTtpPjA7aS0tKXtsZXQgcz1pPm8uZGVwdGg/by5ub2RlQWZ0ZXI6by5ub2RlKGkpLGE9by5iZWZvcmUoaSk7aWYocy5pbmxpbmVDb250ZW50KVRjKGUsVGUuY3JlYXRlKHIsYSsxLGErMStzLmNvbnRlbnQuc2l6ZSksInBvaW50ZXIiKTtlbHNlIGlmKHdlLmlzU2VsZWN0YWJsZShzKSlUYyhlLHdlLmNyZWF0ZShyLGEpLCJwb2ludGVyIik7ZWxzZSBjb250aW51ZTtyZXR1cm4hMH19ZnVuY3Rpb24gc3coZSl7cmV0dXJuIEFtKGUpfWNvbnN0IG9OPUJyPyJtZXRhS2V5IjoiY3RybEtleSI7WG4ubW91c2Vkb3duPShlLHQpPT57bGV0IG49dDtlLmlucHV0LnNoaWZ0S2V5PW4uc2hpZnRLZXk7bGV0IHI9c3coZSksbz1EYXRlLm5vdygpLGk9InNpbmdsZUNsaWNrIjtvLWUuaW5wdXQubGFzdENsaWNrLnRpbWU8NTAwJiZSQihuLGUuaW5wdXQubGFzdENsaWNrKSYmIW5bb05dJiYoZS5pbnB1dC5sYXN0Q2xpY2sudHlwZT09InNpbmdsZUNsaWNrIj9pPSJkb3VibGVDbGljayI6ZS5pbnB1dC5sYXN0Q2xpY2sudHlwZT09ImRvdWJsZUNsaWNrIiYmKGk9InRyaXBsZUNsaWNrIikpLGUuaW5wdXQubGFzdENsaWNrPXt0aW1lOm8seDpuLmNsaWVudFgseTpuLmNsaWVudFksdHlwZTppfTtsZXQgcz1lLnBvc0F0Q29vcmRzKGV2KG4pKTtzJiYoaT09InNpbmdsZUNsaWNrIj8oZS5pbnB1dC5tb3VzZURvd24mJmUuaW5wdXQubW91c2VEb3duLmRvbmUoKSxlLmlucHV0Lm1vdXNlRG93bj1uZXcgakIoZSxzLG4sISFyKSk6KGk9PSJkb3VibGVDbGljayI/REI6SUIpKGUscy5wb3Mscy5pbnNpZGUsbik/bi5wcmV2ZW50RGVmYXVsdCgpOk1zKGUsInBvaW50ZXIiKSl9O2NsYXNzIGpCe2NvbnN0cnVjdG9yKHQsbixyLG8pe3RoaXMudmlldz10LHRoaXMucG9zPW4sdGhpcy5ldmVudD1yLHRoaXMuZmx1c2hlZD1vLHRoaXMuZGVsYXllZFNlbGVjdGlvblN5bmM9ITEsdGhpcy5taWdodERyYWc9bnVsbCx0aGlzLnN0YXJ0RG9jPXQuc3RhdGUuZG9jLHRoaXMuc2VsZWN0Tm9kZT0hIXJbb05dLHRoaXMuYWxsb3dEZWZhdWx0PXIuc2hpZnRLZXk7bGV0IGkscztpZihuLmluc2lkZT4tMSlpPXQuc3RhdGUuZG9jLm5vZGVBdChuLmluc2lkZSkscz1uLmluc2lkZTtlbHNle2xldCB1PXQuc3RhdGUuZG9jLnJlc29sdmUobi5wb3MpO2k9dS5wYXJlbnQscz11LmRlcHRoP3UuYmVmb3JlKCk6MH1jb25zdCBhPW8/bnVsbDpyLnRhcmdldCxsPWE/dC5kb2NWaWV3Lm5lYXJlc3REZXNjKGEsITApOm51bGw7dGhpcy50YXJnZXQ9bD9sLmRvbTpudWxsO2xldHtzZWxlY3Rpb246Y309dC5zdGF0ZTsoci5idXR0b249PTAmJmkudHlwZS5zcGVjLmRyYWdnYWJsZSYmaS50eXBlLnNwZWMuc2VsZWN0YWJsZSE9PSExfHxjIGluc3RhbmNlb2Ygd2UmJmMuZnJvbTw9cyYmYy50bz5zKSYmKHRoaXMubWlnaHREcmFnPXtub2RlOmkscG9zOnMsYWRkQXR0cjohISh0aGlzLnRhcmdldCYmIXRoaXMudGFyZ2V0LmRyYWdnYWJsZSksc2V0VW5lZGl0YWJsZTohISh0aGlzLnRhcmdldCYmQW8mJiF0aGlzLnRhcmdldC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRFZGl0YWJsZSIpKX0pLHRoaXMudGFyZ2V0JiZ0aGlzLm1pZ2h0RHJhZyYmKHRoaXMubWlnaHREcmFnLmFkZEF0dHJ8fHRoaXMubWlnaHREcmFnLnNldFVuZWRpdGFibGUpJiYodGhpcy52aWV3LmRvbU9ic2VydmVyLnN0b3AoKSx0aGlzLm1pZ2h0RHJhZy5hZGRBdHRyJiYodGhpcy50YXJnZXQuZHJhZ2dhYmxlPSEwKSx0aGlzLm1pZ2h0RHJhZy5zZXRVbmVkaXRhYmxlJiZzZXRUaW1lb3V0KCgpPT57dGhpcy52aWV3LmlucHV0Lm1vdXNlRG93bj09dGhpcyYmdGhpcy50YXJnZXQuc2V0QXR0cmlidXRlKCJjb250ZW50RWRpdGFibGUiLCJmYWxzZSIpfSwyMCksdGhpcy52aWV3LmRvbU9ic2VydmVyLnN0YXJ0KCkpLHQucm9vdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnVwPXRoaXMudXAuYmluZCh0aGlzKSksdC5yb290LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3ZlPXRoaXMubW92ZS5iaW5kKHRoaXMpKSxNcyh0LCJwb2ludGVyIil9ZG9uZSgpe3RoaXMudmlldy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMudXApLHRoaXMudmlldy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3ZlKSx0aGlzLm1pZ2h0RHJhZyYmdGhpcy50YXJnZXQmJih0aGlzLnZpZXcuZG9tT2JzZXJ2ZXIuc3RvcCgpLHRoaXMubWlnaHREcmFnLmFkZEF0dHImJnRoaXMudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiksdGhpcy5taWdodERyYWcuc2V0VW5lZGl0YWJsZSYmdGhpcy50YXJnZXQucmVtb3ZlQXR0cmlidXRlKCJjb250ZW50RWRpdGFibGUiKSx0aGlzLnZpZXcuZG9tT2JzZXJ2ZXIuc3RhcnQoKSksdGhpcy5kZWxheWVkU2VsZWN0aW9uU3luYyYmc2V0VGltZW91dCgoKT0+UGkodGhpcy52aWV3KSksdGhpcy52aWV3LmlucHV0Lm1vdXNlRG93bj1udWxsfXVwKHQpe2lmKHRoaXMuZG9uZSgpLCF0aGlzLnZpZXcuZG9tLmNvbnRhaW5zKHQudGFyZ2V0KSlyZXR1cm47bGV0IG49dGhpcy5wb3M7dGhpcy52aWV3LnN0YXRlLmRvYyE9dGhpcy5zdGFydERvYyYmKG49dGhpcy52aWV3LnBvc0F0Q29vcmRzKGV2KHQpKSksdGhpcy51cGRhdGVBbGxvd0RlZmF1bHQodCksdGhpcy5hbGxvd0RlZmF1bHR8fCFuP01zKHRoaXMudmlldywicG9pbnRlciIpOkFCKHRoaXMudmlldyxuLnBvcyxuLmluc2lkZSx0LHRoaXMuc2VsZWN0Tm9kZSk/dC5wcmV2ZW50RGVmYXVsdCgpOnQuYnV0dG9uPT0wJiYodGhpcy5mbHVzaGVkfHxZbiYmdGhpcy5taWdodERyYWcmJiF0aGlzLm1pZ2h0RHJhZy5ub2RlLmlzQXRvbXx8RG4mJiF0aGlzLnZpZXcuc3RhdGUuc2VsZWN0aW9uLnZpc2libGUmJk1hdGgubWluKE1hdGguYWJzKG4ucG9zLXRoaXMudmlldy5zdGF0ZS5zZWxlY3Rpb24uZnJvbSksTWF0aC5hYnMobi5wb3MtdGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi50bykpPD0yKT8oVGModGhpcy52aWV3LEJlLm5lYXIodGhpcy52aWV3LnN0YXRlLmRvYy5yZXNvbHZlKG4ucG9zKSksInBvaW50ZXIiKSx0LnByZXZlbnREZWZhdWx0KCkpOk1zKHRoaXMudmlldywicG9pbnRlciIpfW1vdmUodCl7dGhpcy51cGRhdGVBbGxvd0RlZmF1bHQodCksTXModGhpcy52aWV3LCJwb2ludGVyIiksdC5idXR0b25zPT0wJiZ0aGlzLmRvbmUoKX11cGRhdGVBbGxvd0RlZmF1bHQodCl7IXRoaXMuYWxsb3dEZWZhdWx0JiYoTWF0aC5hYnModGhpcy5ldmVudC54LXQuY2xpZW50WCk+NHx8TWF0aC5hYnModGhpcy5ldmVudC55LXQuY2xpZW50WSk+NCkmJih0aGlzLmFsbG93RGVmYXVsdD0hMCl9fVhuLnRvdWNoc3RhcnQ9ZT0+e2UuaW5wdXQubGFzdFRvdWNoPURhdGUubm93KCksc3coZSksTXMoZSwicG9pbnRlciIpfTtYbi50b3VjaG1vdmU9ZT0+e2UuaW5wdXQubGFzdFRvdWNoPURhdGUubm93KCksTXMoZSwicG9pbnRlciIpfTtYbi5jb250ZXh0bWVudT1lPT5zdyhlKTtmdW5jdGlvbiBpTihlLHQpe3JldHVybiBlLmNvbXBvc2luZz8hMDpZbiYmTWF0aC5hYnModC50aW1lU3RhbXAtZS5pbnB1dC5jb21wb3NpdGlvbkVuZGVkQXQpPDUwMD8oZS5pbnB1dC5jb21wb3NpdGlvbkVuZGVkQXQ9LTJlOCwhMCk6ITF9Y29uc3QgekI9eW8/NWUzOi0xO1puLmNvbXBvc2l0aW9uc3RhcnQ9Wm4uY29tcG9zaXRpb251cGRhdGU9ZT0+e2lmKCFlLmNvbXBvc2luZyl7ZS5kb21PYnNlcnZlci5mbHVzaCgpO2xldHtzdGF0ZTp0fT1lLG49dC5zZWxlY3Rpb24uJGZyb207aWYodC5zZWxlY3Rpb24uZW1wdHkmJih0LnN0b3JlZE1hcmtzfHwhbi50ZXh0T2Zmc2V0JiZuLnBhcmVudE9mZnNldCYmbi5ub2RlQmVmb3JlLm1hcmtzLnNvbWUocj0+ci50eXBlLnNwZWMuaW5jbHVzaXZlPT09ITEpKSllLm1hcmtDdXJzb3I9ZS5zdGF0ZS5zdG9yZWRNYXJrc3x8bi5tYXJrcygpLEFtKGUsITApLGUubWFya0N1cnNvcj1udWxsO2Vsc2UgaWYoQW0oZSksQW8mJnQuc2VsZWN0aW9uLmVtcHR5JiZuLnBhcmVudE9mZnNldCYmIW4udGV4dE9mZnNldCYmbi5ub2RlQmVmb3JlLm1hcmtzLmxlbmd0aCl7bGV0IHI9ZS5kb21TZWxlY3Rpb25SYW5nZSgpO2ZvcihsZXQgbz1yLmZvY3VzTm9kZSxpPXIuZm9jdXNPZmZzZXQ7byYmby5ub2RlVHlwZT09MSYmaSE9MDspe2xldCBzPWk8MD9vLmxhc3RDaGlsZDpvLmNoaWxkTm9kZXNbaS0xXTtpZighcylicmVhaztpZihzLm5vZGVUeXBlPT0zKXtlLmRvbVNlbGVjdGlvbigpLmNvbGxhcHNlKHMscy5ub2RlVmFsdWUubGVuZ3RoKTticmVha31lbHNlIG89cyxpPS0xfX1lLmlucHV0LmNvbXBvc2luZz0hMH1zTihlLHpCKX07Wm4uY29tcG9zaXRpb25lbmQ9KGUsdCk9PntlLmNvbXBvc2luZyYmKGUuaW5wdXQuY29tcG9zaW5nPSExLGUuaW5wdXQuY29tcG9zaXRpb25FbmRlZEF0PXQudGltZVN0YW1wLGUuaW5wdXQuY29tcG9zaXRpb25QZW5kaW5nQ2hhbmdlcz1lLmRvbU9ic2VydmVyLnBlbmRpbmdSZWNvcmRzKCkubGVuZ3RoP2UuaW5wdXQuY29tcG9zaXRpb25JRDowLGUuaW5wdXQuY29tcG9zaXRpb25QZW5kaW5nQ2hhbmdlcyYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZS5kb21PYnNlcnZlci5mbHVzaCgpKSxlLmlucHV0LmNvbXBvc2l0aW9uSUQrKyxzTihlLDIwKSl9O2Z1bmN0aW9uIHNOKGUsdCl7Y2xlYXJUaW1lb3V0KGUuaW5wdXQuY29tcG9zaW5nVGltZW91dCksdD4tMSYmKGUuaW5wdXQuY29tcG9zaW5nVGltZW91dD1zZXRUaW1lb3V0KCgpPT5BbShlKSx0KSl9ZnVuY3Rpb24gYU4oZSl7Zm9yKGUuY29tcG9zaW5nJiYoZS5pbnB1dC5jb21wb3Npbmc9ITEsZS5pbnB1dC5jb21wb3NpdGlvbkVuZGVkQXQ9RkIoKSk7ZS5pbnB1dC5jb21wb3NpdGlvbk5vZGVzLmxlbmd0aD4wOyllLmlucHV0LmNvbXBvc2l0aW9uTm9kZXMucG9wKCkubWFya1BhcmVudHNEaXJ0eSgpfWZ1bmN0aW9uIEZCKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KCJldmVudCIsITAsITApLGUudGltZVN0YW1wfWZ1bmN0aW9uIEFtKGUsdD0hMSl7aWYoISh5byYmZS5kb21PYnNlcnZlci5mbHVzaGluZ1Nvb24+PTApKXtpZihlLmRvbU9ic2VydmVyLmZvcmNlRmx1c2goKSxhTihlKSx0fHxlLmRvY1ZpZXcmJmUuZG9jVmlldy5kaXJ0eSl7bGV0IG49bncoZSk7cmV0dXJuIG4mJiFuLmVxKGUuc3RhdGUuc2VsZWN0aW9uKT9lLmRpc3BhdGNoKGUuc3RhdGUudHIuc2V0U2VsZWN0aW9uKG4pKTplLnVwZGF0ZVN0YXRlKGUuc3RhdGUpLCEwfXJldHVybiExfX1mdW5jdGlvbiBCQihlLHQpe2lmKCFlLmRvbS5wYXJlbnROb2RlKXJldHVybjtsZXQgbj1lLmRvbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtuLmFwcGVuZENoaWxkKHQpLG4uc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGZpeGVkOyBsZWZ0OiAtMTAwMDBweDsgdG9wOiAxMHB4IjtsZXQgcj1nZXRTZWxlY3Rpb24oKSxvPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7by5zZWxlY3ROb2RlQ29udGVudHModCksZS5kb20uYmx1cigpLHIucmVtb3ZlQWxsUmFuZ2VzKCksci5hZGRSYW5nZShvKSxzZXRUaW1lb3V0KCgpPT57bi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksZS5mb2N1cygpfSw1MCl9Y29uc3QgU2Y9dXImJlVzPDE1fHxHYyYmakY8NjA0O1huLmNvcHk9Wm4uY3V0PShlLHQpPT57bGV0IG49dCxyPWUuc3RhdGUuc2VsZWN0aW9uLG89bi50eXBlPT0iY3V0IjtpZihyLmVtcHR5KXJldHVybjtsZXQgaT1TZj9udWxsOm4uY2xpcGJvYXJkRGF0YSxzPXIuY29udGVudCgpLHtkb206YSx0ZXh0Omx9PVpSKGUscyk7aT8obi5wcmV2ZW50RGVmYXVsdCgpLGkuY2xlYXJEYXRhKCksaS5zZXREYXRhKCJ0ZXh0L2h0bWwiLGEuaW5uZXJIVE1MKSxpLnNldERhdGEoInRleHQvcGxhaW4iLGwpKTpCQihlLGEpLG8mJmUuZGlzcGF0Y2goZS5zdGF0ZS50ci5kZWxldGVTZWxlY3Rpb24oKS5zY3JvbGxJbnRvVmlldygpLnNldE1ldGEoInVpRXZlbnQiLCJjdXQiKSl9O2Z1bmN0aW9uIFVCKGUpe3JldHVybiBlLm9wZW5TdGFydD09MCYmZS5vcGVuRW5kPT0wJiZlLmNvbnRlbnQuY2hpbGRDb3VudD09MT9lLmNvbnRlbnQuZmlyc3RDaGlsZDpudWxsfWZ1bmN0aW9uIFZCKGUsdCl7aWYoIWUuZG9tLnBhcmVudE5vZGUpcmV0dXJuO2xldCBuPWUuaW5wdXQuc2hpZnRLZXl8fGUuc3RhdGUuc2VsZWN0aW9uLiRmcm9tLnBhcmVudC50eXBlLnNwZWMuY29kZSxyPWUuZG9tLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuPyJ0ZXh0YXJlYSI6ImRpdiIpKTtufHwoci5jb250ZW50RWRpdGFibGU9InRydWUiKSxyLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgbGVmdDogLTEwMDAwcHg7IHRvcDogMTBweCIsci5mb2N1cygpO2xldCBvPWUuaW5wdXQuc2hpZnRLZXkmJmUuaW5wdXQubGFzdEtleUNvZGUhPTQ1O3NldFRpbWVvdXQoKCk9PntlLmZvY3VzKCksci5wYXJlbnROb2RlJiZyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQociksbj9rZihlLHIudmFsdWUsbnVsbCxvLHQpOmtmKGUsci50ZXh0Q29udGVudCxyLmlubmVySFRNTCxvLHQpfSw1MCl9ZnVuY3Rpb24ga2YoZSx0LG4scixvKXtsZXQgaT1KUihlLHQsbixyLGUuc3RhdGUuc2VsZWN0aW9uLiRmcm9tKTtpZihlLnNvbWVQcm9wKCJoYW5kbGVQYXN0ZSIsbD0+bChlLG8saXx8Si5lbXB0eSkpKXJldHVybiEwO2lmKCFpKXJldHVybiExO2xldCBzPVVCKGkpLGE9cz9lLnN0YXRlLnRyLnJlcGxhY2VTZWxlY3Rpb25XaXRoKHMscik6ZS5zdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uKGkpO3JldHVybiBlLmRpc3BhdGNoKGEuc2Nyb2xsSW50b1ZpZXcoKS5zZXRNZXRhKCJwYXN0ZSIsITApLnNldE1ldGEoInVpRXZlbnQiLCJwYXN0ZSIpKSwhMH1mdW5jdGlvbiBsTihlKXtsZXQgdD1lLmdldERhdGEoInRleHQvcGxhaW4iKXx8ZS5nZXREYXRhKCJUZXh0Iik7aWYodClyZXR1cm4gdDtsZXQgbj1lLmdldERhdGEoInRleHQvdXJpLWxpc3QiKTtyZXR1cm4gbj9uLnJlcGxhY2UoL1xyP1xuL2csIiAiKToiIn1abi5wYXN0ZT0oZSx0KT0+e2xldCBuPXQ7aWYoZS5jb21wb3NpbmcmJiF5bylyZXR1cm47bGV0IHI9U2Y/bnVsbDpuLmNsaXBib2FyZERhdGEsbz1lLmlucHV0LnNoaWZ0S2V5JiZlLmlucHV0Lmxhc3RLZXlDb2RlIT00NTtyJiZrZihlLGxOKHIpLHIuZ2V0RGF0YSgidGV4dC9odG1sIiksbyxuKT9uLnByZXZlbnREZWZhdWx0KCk6VkIoZSxuKX07Y2xhc3MgY057Y29uc3RydWN0b3IodCxuLHIpe3RoaXMuc2xpY2U9dCx0aGlzLm1vdmU9bix0aGlzLm5vZGU9cn19Y29uc3QgdU49QnI/ImFsdEtleSI6ImN0cmxLZXkiO1huLmRyYWdzdGFydD0oZSx0KT0+e2xldCBuPXQscj1lLmlucHV0Lm1vdXNlRG93bjtpZihyJiZyLmRvbmUoKSwhbi5kYXRhVHJhbnNmZXIpcmV0dXJuO2xldCBvPWUuc3RhdGUuc2VsZWN0aW9uLGk9by5lbXB0eT9udWxsOmUucG9zQXRDb29yZHMoZXYobikpLHM7aWYoIShpJiZpLnBvcz49by5mcm9tJiZpLnBvczw9KG8gaW5zdGFuY2VvZiB3ZT9vLnRvLTE6by50bykpKXtpZihyJiZyLm1pZ2h0RHJhZylzPXdlLmNyZWF0ZShlLnN0YXRlLmRvYyxyLm1pZ2h0RHJhZy5wb3MpO2Vsc2UgaWYobi50YXJnZXQmJm4udGFyZ2V0Lm5vZGVUeXBlPT0xKXtsZXQgdT1lLmRvY1ZpZXcubmVhcmVzdERlc2Mobi50YXJnZXQsITApO3UmJnUubm9kZS50eXBlLnNwZWMuZHJhZ2dhYmxlJiZ1IT1lLmRvY1ZpZXcmJihzPXdlLmNyZWF0ZShlLnN0YXRlLmRvYyx1LnBvc0JlZm9yZSkpfX1sZXQgYT0oc3x8ZS5zdGF0ZS5zZWxlY3Rpb24pLmNvbnRlbnQoKSx7ZG9tOmwsdGV4dDpjfT1aUihlLGEpO24uZGF0YVRyYW5zZmVyLmNsZWFyRGF0YSgpLG4uZGF0YVRyYW5zZmVyLnNldERhdGEoU2Y/IlRleHQiOiJ0ZXh0L2h0bWwiLGwuaW5uZXJIVE1MKSxuLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5TW92ZSIsU2Z8fG4uZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLGMpLGUuZHJhZ2dpbmc9bmV3IGNOKGEsIW5bdU5dLHMpfTtYbi5kcmFnZW5kPWU9PntsZXQgdD1lLmRyYWdnaW5nO3dpbmRvdy5zZXRUaW1lb3V0KCgpPT57ZS5kcmFnZ2luZz09dCYmKGUuZHJhZ2dpbmc9bnVsbCl9LDUwKX07Wm4uZHJhZ292ZXI9Wm4uZHJhZ2VudGVyPShlLHQpPT50LnByZXZlbnREZWZhdWx0KCk7Wm4uZHJvcD0oZSx0KT0+e2xldCBuPXQscj1lLmRyYWdnaW5nO2lmKGUuZHJhZ2dpbmc9bnVsbCwhbi5kYXRhVHJhbnNmZXIpcmV0dXJuO2xldCBvPWUucG9zQXRDb29yZHMoZXYobikpO2lmKCFvKXJldHVybjtsZXQgaT1lLnN0YXRlLmRvYy5yZXNvbHZlKG8ucG9zKSxzPXImJnIuc2xpY2U7cz9lLnNvbWVQcm9wKCJ0cmFuc2Zvcm1QYXN0ZWQiLG09PntzPW0ocyxlKX0pOnM9SlIoZSxsTihuLmRhdGFUcmFuc2ZlciksU2Y/bnVsbDpuLmRhdGFUcmFuc2Zlci5nZXREYXRhKCJ0ZXh0L2h0bWwiKSwhMSxpKTtsZXQgYT0hIShyJiYhblt1Tl0pO2lmKGUuc29tZVByb3AoImhhbmRsZURyb3AiLG09Pm0oZSxuLHN8fEouZW1wdHksYSkpKXtuLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKCFzKXJldHVybjtuLnByZXZlbnREZWZhdWx0KCk7bGV0IGw9cz9FUihlLnN0YXRlLmRvYyxpLnBvcyxzKTppLnBvcztsPT1udWxsJiYobD1pLnBvcyk7bGV0IGM9ZS5zdGF0ZS50cjtpZihhKXtsZXR7bm9kZTptfT1yO20/bS5yZXBsYWNlKGMpOmMuZGVsZXRlU2VsZWN0aW9uKCl9bGV0IHU9Yy5tYXBwaW5nLm1hcChsKSxkPXMub3BlblN0YXJ0PT0wJiZzLm9wZW5FbmQ9PTAmJnMuY29udGVudC5jaGlsZENvdW50PT0xLGY9Yy5kb2M7aWYoZD9jLnJlcGxhY2VSYW5nZVdpdGgodSx1LHMuY29udGVudC5maXJzdENoaWxkKTpjLnJlcGxhY2VSYW5nZSh1LHUscyksYy5kb2MuZXEoZikpcmV0dXJuO2xldCBwPWMuZG9jLnJlc29sdmUodSk7aWYoZCYmd2UuaXNTZWxlY3RhYmxlKHMuY29udGVudC5maXJzdENoaWxkKSYmcC5ub2RlQWZ0ZXImJnAubm9kZUFmdGVyLnNhbWVNYXJrdXAocy5jb250ZW50LmZpcnN0Q2hpbGQpKWMuc2V0U2VsZWN0aW9uKG5ldyB3ZShwKSk7ZWxzZXtsZXQgbT1jLm1hcHBpbmcubWFwKGwpO2MubWFwcGluZy5tYXBzW2MubWFwcGluZy5tYXBzLmxlbmd0aC0xXS5mb3JFYWNoKChnLHksdix4KT0+bT14KSxjLnNldFNlbGVjdGlvbihydyhlLHAsYy5kb2MucmVzb2x2ZShtKSkpfWUuZm9jdXMoKSxlLmRpc3BhdGNoKGMuc2V0TWV0YSgidWlFdmVudCIsImRyb3AiKSl9O1huLmZvY3VzPWU9PntlLmlucHV0Lmxhc3RGb2N1cz1EYXRlLm5vdygpLGUuZm9jdXNlZHx8KGUuZG9tT2JzZXJ2ZXIuc3RvcCgpLGUuZG9tLmNsYXNzTGlzdC5hZGQoIlByb3NlTWlycm9yLWZvY3VzZWQiKSxlLmRvbU9ic2VydmVyLnN0YXJ0KCksZS5mb2N1c2VkPSEwLHNldFRpbWVvdXQoKCk9PntlLmRvY1ZpZXcmJmUuaGFzRm9jdXMoKSYmIWUuZG9tT2JzZXJ2ZXIuY3VycmVudFNlbGVjdGlvbi5lcShlLmRvbVNlbGVjdGlvblJhbmdlKCkpJiZQaShlKX0sMjApKX07WG4uYmx1cj0oZSx0KT0+e2xldCBuPXQ7ZS5mb2N1c2VkJiYoZS5kb21PYnNlcnZlci5zdG9wKCksZS5kb20uY2xhc3NMaXN0LnJlbW92ZSgiUHJvc2VNaXJyb3ItZm9jdXNlZCIpLGUuZG9tT2JzZXJ2ZXIuc3RhcnQoKSxuLnJlbGF0ZWRUYXJnZXQmJmUuZG9tLmNvbnRhaW5zKG4ucmVsYXRlZFRhcmdldCkmJmUuZG9tT2JzZXJ2ZXIuY3VycmVudFNlbGVjdGlvbi5jbGVhcigpLGUuZm9jdXNlZD0hMSl9O1huLmJlZm9yZWlucHV0PShlLHQpPT57aWYoRG4mJnlvJiZ0LmlucHV0VHlwZT09ImRlbGV0ZUNvbnRlbnRCYWNrd2FyZCIpe2UuZG9tT2JzZXJ2ZXIuZmx1c2hTb29uKCk7bGV0e2RvbUNoYW5nZUNvdW50OnJ9PWUuaW5wdXQ7c2V0VGltZW91dCgoKT0+e2lmKGUuaW5wdXQuZG9tQ2hhbmdlQ291bnQhPXJ8fChlLmRvbS5ibHVyKCksZS5mb2N1cygpLGUuc29tZVByb3AoImhhbmRsZUtleURvd24iLGk9PmkoZSxUYSg4LCJCYWNrc3BhY2UiKSkpKSlyZXR1cm47bGV0eyRjdXJzb3I6b309ZS5zdGF0ZS5zZWxlY3Rpb247byYmby5wb3M+MCYmZS5kaXNwYXRjaChlLnN0YXRlLnRyLmRlbGV0ZShvLnBvcy0xLG8ucG9zKS5zY3JvbGxJbnRvVmlldygpKX0sNTApfX07Zm9yKGxldCBlIGluIFpuKVhuW2VdPVpuW2VdO2Z1bmN0aW9uIEVmKGUsdCl7aWYoZT09dClyZXR1cm4hMDtmb3IobGV0IG4gaW4gZSlpZihlW25dIT09dFtuXSlyZXR1cm4hMTtmb3IobGV0IG4gaW4gdClpZighKG4gaW4gZSkpcmV0dXJuITE7cmV0dXJuITB9Y2xhc3MgRG17Y29uc3RydWN0b3IodCxuKXt0aGlzLnRvRE9NPXQsdGhpcy5zcGVjPW58fEhhLHRoaXMuc2lkZT10aGlzLnNwZWMuc2lkZXx8MH1tYXAodCxuLHIsbyl7bGV0e3BvczppLGRlbGV0ZWQ6c309dC5tYXBSZXN1bHQobi5mcm9tK28sdGhpcy5zaWRlPDA/LTE6MSk7cmV0dXJuIHM/bnVsbDpuZXcgRXQoaS1yLGktcix0aGlzKX12YWxpZCgpe3JldHVybiEwfWVxKHQpe3JldHVybiB0aGlzPT10fHx0IGluc3RhbmNlb2YgRG0mJih0aGlzLnNwZWMua2V5JiZ0aGlzLnNwZWMua2V5PT10LnNwZWMua2V5fHx0aGlzLnRvRE9NPT10LnRvRE9NJiZFZih0aGlzLnNwZWMsdC5zcGVjKSl9ZGVzdHJveSh0KXt0aGlzLnNwZWMuZGVzdHJveSYmdGhpcy5zcGVjLmRlc3Ryb3kodCl9fWNsYXNzIEhze2NvbnN0cnVjdG9yKHQsbil7dGhpcy5hdHRycz10LHRoaXMuc3BlYz1ufHxIYX1tYXAodCxuLHIsbyl7bGV0IGk9dC5tYXAobi5mcm9tK28sdGhpcy5zcGVjLmluY2x1c2l2ZVN0YXJ0Py0xOjEpLXIscz10Lm1hcChuLnRvK28sdGhpcy5zcGVjLmluY2x1c2l2ZUVuZD8xOi0xKS1yO3JldHVybiBpPj1zP251bGw6bmV3IEV0KGkscyx0aGlzKX12YWxpZCh0LG4pe3JldHVybiBuLmZyb208bi50b31lcSh0KXtyZXR1cm4gdGhpcz09dHx8dCBpbnN0YW5jZW9mIEhzJiZFZih0aGlzLmF0dHJzLHQuYXR0cnMpJiZFZih0aGlzLnNwZWMsdC5zcGVjKX1zdGF0aWMgaXModCl7cmV0dXJuIHQudHlwZSBpbnN0YW5jZW9mIEhzfWRlc3Ryb3koKXt9fWNsYXNzIGF3e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5hdHRycz10LHRoaXMuc3BlYz1ufHxIYX1tYXAodCxuLHIsbyl7bGV0IGk9dC5tYXBSZXN1bHQobi5mcm9tK28sMSk7aWYoaS5kZWxldGVkKXJldHVybiBudWxsO2xldCBzPXQubWFwUmVzdWx0KG4udG8rbywtMSk7cmV0dXJuIHMuZGVsZXRlZHx8cy5wb3M8PWkucG9zP251bGw6bmV3IEV0KGkucG9zLXIscy5wb3Mtcix0aGlzKX12YWxpZCh0LG4pe2xldHtpbmRleDpyLG9mZnNldDpvfT10LmNvbnRlbnQuZmluZEluZGV4KG4uZnJvbSksaTtyZXR1cm4gbz09bi5mcm9tJiYhKGk9dC5jaGlsZChyKSkuaXNUZXh0JiZvK2kubm9kZVNpemU9PW4udG99ZXEodCl7cmV0dXJuIHRoaXM9PXR8fHQgaW5zdGFuY2VvZiBhdyYmRWYodGhpcy5hdHRycyx0LmF0dHJzKSYmRWYodGhpcy5zcGVjLHQuc3BlYyl9ZGVzdHJveSgpe319Y2xhc3MgRXR7Y29uc3RydWN0b3IodCxuLHIpe3RoaXMuZnJvbT10LHRoaXMudG89bix0aGlzLnR5cGU9cn1jb3B5KHQsbil7cmV0dXJuIG5ldyBFdCh0LG4sdGhpcy50eXBlKX1lcSh0LG49MCl7cmV0dXJuIHRoaXMudHlwZS5lcSh0LnR5cGUpJiZ0aGlzLmZyb20rbj09dC5mcm9tJiZ0aGlzLnRvK249PXQudG99bWFwKHQsbixyKXtyZXR1cm4gdGhpcy50eXBlLm1hcCh0LHRoaXMsbixyKX1zdGF0aWMgd2lkZ2V0KHQsbixyKXtyZXR1cm4gbmV3IEV0KHQsdCxuZXcgRG0obixyKSl9c3RhdGljIGlubGluZSh0LG4scixvKXtyZXR1cm4gbmV3IEV0KHQsbixuZXcgSHMocixvKSl9c3RhdGljIG5vZGUodCxuLHIsbyl7cmV0dXJuIG5ldyBFdCh0LG4sbmV3IGF3KHIsbykpfWdldCBzcGVjKCl7cmV0dXJuIHRoaXMudHlwZS5zcGVjfWdldCBpbmxpbmUoKXtyZXR1cm4gdGhpcy50eXBlIGluc3RhbmNlb2YgSHN9Z2V0IHdpZGdldCgpe3JldHVybiB0aGlzLnR5cGUgaW5zdGFuY2VvZiBEbX19Y29uc3QgS2w9W10sSGE9e307Y2xhc3MgZXR7Y29uc3RydWN0b3IodCxuKXt0aGlzLmxvY2FsPXQubGVuZ3RoP3Q6S2wsdGhpcy5jaGlsZHJlbj1uLmxlbmd0aD9uOktsfXN0YXRpYyBjcmVhdGUodCxuKXtyZXR1cm4gbi5sZW5ndGg/SW0obix0LDAsSGEpOiRufWZpbmQodCxuLHIpe2xldCBvPVtdO3JldHVybiB0aGlzLmZpbmRJbm5lcih0Pz8wLG4/PzFlOSxvLDAsciksb31maW5kSW5uZXIodCxuLHIsbyxpKXtmb3IobGV0IHM9MDtzPHRoaXMubG9jYWwubGVuZ3RoO3MrKyl7bGV0IGE9dGhpcy5sb2NhbFtzXTthLmZyb208PW4mJmEudG8+PXQmJighaXx8aShhLnNwZWMpKSYmci5wdXNoKGEuY29weShhLmZyb20rbyxhLnRvK28pKX1mb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrPTMpaWYodGhpcy5jaGlsZHJlbltzXTxuJiZ0aGlzLmNoaWxkcmVuW3MrMV0+dCl7bGV0IGE9dGhpcy5jaGlsZHJlbltzXSsxO3RoaXMuY2hpbGRyZW5bcysyXS5maW5kSW5uZXIodC1hLG4tYSxyLG8rYSxpKX19bWFwKHQsbixyKXtyZXR1cm4gdGhpcz09JG58fHQubWFwcy5sZW5ndGg9PTA/dGhpczp0aGlzLm1hcElubmVyKHQsbiwwLDAscnx8SGEpfW1hcElubmVyKHQsbixyLG8saSl7bGV0IHM7Zm9yKGxldCBhPTA7YTx0aGlzLmxvY2FsLmxlbmd0aDthKyspe2xldCBsPXRoaXMubG9jYWxbYV0ubWFwKHQscixvKTtsJiZsLnR5cGUudmFsaWQobixsKT8oc3x8KHM9W10pKS5wdXNoKGwpOmkub25SZW1vdmUmJmkub25SZW1vdmUodGhpcy5sb2NhbFthXS5zcGVjKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg/SEIodGhpcy5jaGlsZHJlbixzfHxbXSx0LG4scixvLGkpOnM/bmV3IGV0KHMuc29ydChXYSksS2wpOiRufWFkZCh0LG4pe3JldHVybiBuLmxlbmd0aD90aGlzPT0kbj9ldC5jcmVhdGUodCxuKTp0aGlzLmFkZElubmVyKHQsbiwwKTp0aGlzfWFkZElubmVyKHQsbixyKXtsZXQgbyxpPTA7dC5mb3JFYWNoKChhLGwpPT57bGV0IGM9bCtyLHU7aWYodT1mTihuLGEsYykpe2ZvcihvfHwobz10aGlzLmNoaWxkcmVuLnNsaWNlKCkpO2k8by5sZW5ndGgmJm9baV08bDspaSs9MztvW2ldPT1sP29baSsyXT1vW2krMl0uYWRkSW5uZXIoYSx1LGMrMSk6by5zcGxpY2UoaSwwLGwsbCthLm5vZGVTaXplLEltKHUsYSxjKzEsSGEpKSxpKz0zfX0pO2xldCBzPWROKGk/cE4obik6biwtcik7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspc1thXS50eXBlLnZhbGlkKHQsc1thXSl8fHMuc3BsaWNlKGEtLSwxKTtyZXR1cm4gbmV3IGV0KHMubGVuZ3RoP3RoaXMubG9jYWwuY29uY2F0KHMpLnNvcnQoV2EpOnRoaXMubG9jYWwsb3x8dGhpcy5jaGlsZHJlbil9cmVtb3ZlKHQpe3JldHVybiB0Lmxlbmd0aD09MHx8dGhpcz09JG4/dGhpczp0aGlzLnJlbW92ZUlubmVyKHQsMCl9cmVtb3ZlSW5uZXIodCxuKXtsZXQgcj10aGlzLmNoaWxkcmVuLG89dGhpcy5sb2NhbDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krPTMpe2xldCBzLGE9cltpXStuLGw9cltpKzFdK247Zm9yKGxldCB1PTAsZDt1PHQubGVuZ3RoO3UrKykoZD10W3VdKSYmZC5mcm9tPmEmJmQudG88bCYmKHRbdV09bnVsbCwoc3x8KHM9W10pKS5wdXNoKGQpKTtpZighcyljb250aW51ZTtyPT10aGlzLmNoaWxkcmVuJiYocj10aGlzLmNoaWxkcmVuLnNsaWNlKCkpO2xldCBjPXJbaSsyXS5yZW1vdmVJbm5lcihzLGErMSk7YyE9JG4/cltpKzJdPWM6KHIuc3BsaWNlKGksMyksaS09Myl9aWYoby5sZW5ndGgpe2ZvcihsZXQgaT0wLHM7aTx0Lmxlbmd0aDtpKyspaWYocz10W2ldKWZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV0uZXEocyxuKSYmKG89PXRoaXMubG9jYWwmJihvPXRoaXMubG9jYWwuc2xpY2UoKSksby5zcGxpY2UoYS0tLDEpKX1yZXR1cm4gcj09dGhpcy5jaGlsZHJlbiYmbz09dGhpcy5sb2NhbD90aGlzOm8ubGVuZ3RofHxyLmxlbmd0aD9uZXcgZXQobyxyKTokbn1mb3JDaGlsZCh0LG4pe2lmKHRoaXM9PSRuKXJldHVybiB0aGlzO2lmKG4uaXNMZWFmKXJldHVybiBldC5lbXB0eTtsZXQgcixvO2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YSs9MylpZih0aGlzLmNoaWxkcmVuW2FdPj10KXt0aGlzLmNoaWxkcmVuW2FdPT10JiYocj10aGlzLmNoaWxkcmVuW2ErMl0pO2JyZWFrfWxldCBpPXQrMSxzPWkrbi5jb250ZW50LnNpemU7Zm9yKGxldCBhPTA7YTx0aGlzLmxvY2FsLmxlbmd0aDthKyspe2xldCBsPXRoaXMubG9jYWxbYV07aWYobC5mcm9tPHMmJmwudG8+aSYmbC50eXBlIGluc3RhbmNlb2YgSHMpe2xldCBjPU1hdGgubWF4KGksbC5mcm9tKS1pLHU9TWF0aC5taW4ocyxsLnRvKS1pO2M8dSYmKG98fChvPVtdKSkucHVzaChsLmNvcHkoYyx1KSl9fWlmKG8pe2xldCBhPW5ldyBldChvLnNvcnQoV2EpLEtsKTtyZXR1cm4gcj9uZXcgRXMoW2Escl0pOmF9cmV0dXJuIHJ8fCRufWVxKHQpe2lmKHRoaXM9PXQpcmV0dXJuITA7aWYoISh0IGluc3RhbmNlb2YgZXQpfHx0aGlzLmxvY2FsLmxlbmd0aCE9dC5sb2NhbC5sZW5ndGh8fHRoaXMuY2hpbGRyZW4ubGVuZ3RoIT10LmNoaWxkcmVuLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MDtuPHRoaXMubG9jYWwubGVuZ3RoO24rKylpZighdGhpcy5sb2NhbFtuXS5lcSh0LmxvY2FsW25dKSlyZXR1cm4hMTtmb3IobGV0IG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rPTMpaWYodGhpcy5jaGlsZHJlbltuXSE9dC5jaGlsZHJlbltuXXx8dGhpcy5jaGlsZHJlbltuKzFdIT10LmNoaWxkcmVuW24rMV18fCF0aGlzLmNoaWxkcmVuW24rMl0uZXEodC5jaGlsZHJlbltuKzJdKSlyZXR1cm4hMTtyZXR1cm4hMH1sb2NhbHModCl7cmV0dXJuIGx3KHRoaXMubG9jYWxzSW5uZXIodCkpfWxvY2Fsc0lubmVyKHQpe2lmKHRoaXM9PSRuKXJldHVybiBLbDtpZih0LmlubGluZUNvbnRlbnR8fCF0aGlzLmxvY2FsLnNvbWUoSHMuaXMpKXJldHVybiB0aGlzLmxvY2FsO2xldCBuPVtdO2ZvcihsZXQgcj0wO3I8dGhpcy5sb2NhbC5sZW5ndGg7cisrKXRoaXMubG9jYWxbcl0udHlwZSBpbnN0YW5jZW9mIEhzfHxuLnB1c2godGhpcy5sb2NhbFtyXSk7cmV0dXJuIG59fWV0LmVtcHR5PW5ldyBldChbXSxbXSk7ZXQucmVtb3ZlT3ZlcmxhcD1sdztjb25zdCAkbj1ldC5lbXB0eTtjbGFzcyBFc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1lbWJlcnM9dH1tYXAodCxuKXtjb25zdCByPXRoaXMubWVtYmVycy5tYXAobz0+by5tYXAodCxuLEhhKSk7cmV0dXJuIEVzLmZyb20ocil9Zm9yQ2hpbGQodCxuKXtpZihuLmlzTGVhZilyZXR1cm4gZXQuZW1wdHk7bGV0IHI9W107Zm9yKGxldCBvPTA7bzx0aGlzLm1lbWJlcnMubGVuZ3RoO28rKyl7bGV0IGk9dGhpcy5tZW1iZXJzW29dLmZvckNoaWxkKHQsbik7aSE9JG4mJihpIGluc3RhbmNlb2YgRXM/cj1yLmNvbmNhdChpLm1lbWJlcnMpOnIucHVzaChpKSl9cmV0dXJuIEVzLmZyb20ocil9ZXEodCl7aWYoISh0IGluc3RhbmNlb2YgRXMpfHx0Lm1lbWJlcnMubGVuZ3RoIT10aGlzLm1lbWJlcnMubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wO248dGhpcy5tZW1iZXJzLmxlbmd0aDtuKyspaWYoIXRoaXMubWVtYmVyc1tuXS5lcSh0Lm1lbWJlcnNbbl0pKXJldHVybiExO3JldHVybiEwfWxvY2Fscyh0KXtsZXQgbixyPSEwO2ZvcihsZXQgbz0wO288dGhpcy5tZW1iZXJzLmxlbmd0aDtvKyspe2xldCBpPXRoaXMubWVtYmVyc1tvXS5sb2NhbHNJbm5lcih0KTtpZihpLmxlbmd0aClpZighbiluPWk7ZWxzZXtyJiYobj1uLnNsaWNlKCkscj0hMSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspbi5wdXNoKGlbc10pfX1yZXR1cm4gbj9sdyhyP246bi5zb3J0KFdhKSk6S2x9c3RhdGljIGZyb20odCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuICRuO2Nhc2UgMTpyZXR1cm4gdFswXTtkZWZhdWx0OnJldHVybiBuZXcgRXModC5ldmVyeShuPT5uIGluc3RhbmNlb2YgZXQpP3Q6dC5yZWR1Y2UoKG4scik9Pm4uY29uY2F0KHIgaW5zdGFuY2VvZiBldD9yOnIubWVtYmVycyksW10pKX19fWZ1bmN0aW9uIEhCKGUsdCxuLHIsbyxpLHMpe2xldCBhPWUuc2xpY2UoKTtmb3IobGV0IGM9MCx1PWk7YzxuLm1hcHMubGVuZ3RoO2MrKyl7bGV0IGQ9MDtuLm1hcHNbY10uZm9yRWFjaCgoZixwLG0sZyk9PntsZXQgeT1nLW0tKHAtZik7Zm9yKGxldCB2PTA7djxhLmxlbmd0aDt2Kz0zKXtsZXQgeD1hW3YrMV07aWYoeDwwfHxmPngrdS1kKWNvbnRpbnVlO2xldCB3PWFbdl0rdS1kO3A+PXc/YVt2KzFdPWY8PXc/LTI6LTE6Zj49dSYmeSYmKGFbdl0rPXksYVt2KzFdKz15KX1kKz15fSksdT1uLm1hcHNbY10ubWFwKHUsLTEpfWxldCBsPSExO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7Yys9MylpZihhW2MrMV08MCl7aWYoYVtjKzFdPT0tMil7bD0hMCxhW2MrMV09LTE7Y29udGludWV9bGV0IHU9bi5tYXAoZVtjXStpKSxkPXUtbztpZihkPDB8fGQ+PXIuY29udGVudC5zaXplKXtsPSEwO2NvbnRpbnVlfWxldCBmPW4ubWFwKGVbYysxXStpLC0xKSxwPWYtbyx7aW5kZXg6bSxvZmZzZXQ6Z309ci5jb250ZW50LmZpbmRJbmRleChkKSx5PXIubWF5YmVDaGlsZChtKTtpZih5JiZnPT1kJiZnK3kubm9kZVNpemU9PXApe2xldCB2PWFbYysyXS5tYXBJbm5lcihuLHksdSsxLGVbY10raSsxLHMpO3YhPSRuPyhhW2NdPWQsYVtjKzFdPXAsYVtjKzJdPXYpOihhW2MrMV09LTIsbD0hMCl9ZWxzZSBsPSEwfWlmKGwpe2xldCBjPVdCKGEsZSx0LG4sbyxpLHMpLHU9SW0oYyxyLDAscyk7dD11LmxvY2FsO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCs9MylhW2QrMV08MCYmKGEuc3BsaWNlKGQsMyksZC09Myk7Zm9yKGxldCBkPTAsZj0wO2Q8dS5jaGlsZHJlbi5sZW5ndGg7ZCs9Myl7bGV0IHA9dS5jaGlsZHJlbltkXTtmb3IoO2Y8YS5sZW5ndGgmJmFbZl08cDspZis9MzthLnNwbGljZShmLDAsdS5jaGlsZHJlbltkXSx1LmNoaWxkcmVuW2QrMV0sdS5jaGlsZHJlbltkKzJdKX19cmV0dXJuIG5ldyBldCh0LnNvcnQoV2EpLGEpfWZ1bmN0aW9uIGROKGUsdCl7aWYoIXR8fCFlLmxlbmd0aClyZXR1cm4gZTtsZXQgbj1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtuLnB1c2gobmV3IEV0KG8uZnJvbSt0LG8udG8rdCxvLnR5cGUpKX1yZXR1cm4gbn1mdW5jdGlvbiBXQihlLHQsbixyLG8saSxzKXtmdW5jdGlvbiBhKGwsYyl7Zm9yKGxldCB1PTA7dTxsLmxvY2FsLmxlbmd0aDt1Kyspe2xldCBkPWwubG9jYWxbdV0ubWFwKHIsbyxjKTtkP24ucHVzaChkKTpzLm9uUmVtb3ZlJiZzLm9uUmVtb3ZlKGwubG9jYWxbdV0uc3BlYyl9Zm9yKGxldCB1PTA7dTxsLmNoaWxkcmVuLmxlbmd0aDt1Kz0zKWEobC5jaGlsZHJlblt1KzJdLGwuY2hpbGRyZW5bdV0rYysxKX1mb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrPTMpZVtsKzFdPT0tMSYmYShlW2wrMl0sdFtsXStpKzEpO3JldHVybiBufWZ1bmN0aW9uIGZOKGUsdCxuKXtpZih0LmlzTGVhZilyZXR1cm4gbnVsbDtsZXQgcj1uK3Qubm9kZVNpemUsbz1udWxsO2ZvcihsZXQgaT0wLHM7aTxlLmxlbmd0aDtpKyspKHM9ZVtpXSkmJnMuZnJvbT5uJiZzLnRvPHImJigob3x8KG89W10pKS5wdXNoKHMpLGVbaV09bnVsbCk7cmV0dXJuIG99ZnVuY3Rpb24gcE4oZSl7bGV0IHQ9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSE9bnVsbCYmdC5wdXNoKGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIEltKGUsdCxuLHIpe2xldCBvPVtdLGk9ITE7dC5mb3JFYWNoKChhLGwpPT57bGV0IGM9Zk4oZSxhLGwrbik7aWYoYyl7aT0hMDtsZXQgdT1JbShjLGEsbitsKzEscik7dSE9JG4mJm8ucHVzaChsLGwrYS5ub2RlU2l6ZSx1KX19KTtsZXQgcz1kTihpP3BOKGUpOmUsLW4pLnNvcnQoV2EpO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXNbYV0udHlwZS52YWxpZCh0LHNbYV0pfHwoci5vblJlbW92ZSYmci5vblJlbW92ZShzW2FdLnNwZWMpLHMuc3BsaWNlKGEtLSwxKSk7cmV0dXJuIHMubGVuZ3RofHxvLmxlbmd0aD9uZXcgZXQocyxvKTokbn1mdW5jdGlvbiBXYShlLHQpe3JldHVybiBlLmZyb20tdC5mcm9tfHxlLnRvLXQudG99ZnVuY3Rpb24gbHcoZSl7bGV0IHQ9ZTtmb3IobGV0IG49MDtuPHQubGVuZ3RoLTE7bisrKXtsZXQgcj10W25dO2lmKHIuZnJvbSE9ci50bylmb3IobGV0IG89bisxO288dC5sZW5ndGg7bysrKXtsZXQgaT10W29dO2lmKGkuZnJvbT09ci5mcm9tKXtpLnRvIT1yLnRvJiYodD09ZSYmKHQ9ZS5zbGljZSgpKSx0W29dPWkuY29weShpLmZyb20sci50byksT18odCxvKzEsaS5jb3B5KHIudG8saS50bykpKTtjb250aW51ZX1lbHNle2kuZnJvbTxyLnRvJiYodD09ZSYmKHQ9ZS5zbGljZSgpKSx0W25dPXIuY29weShyLmZyb20saS5mcm9tKSxPXyh0LG8sci5jb3B5KGkuZnJvbSxyLnRvKSkpO2JyZWFrfX19cmV0dXJuIHR9ZnVuY3Rpb24gT18oZSx0LG4pe2Zvcig7dDxlLmxlbmd0aCYmV2EobixlW3RdKT4wOyl0Kys7ZS5zcGxpY2UodCwwLG4pfWZ1bmN0aW9uIE55KGUpe2xldCB0PVtdO3JldHVybiBlLnNvbWVQcm9wKCJkZWNvcmF0aW9ucyIsbj0+e2xldCByPW4oZS5zdGF0ZSk7ciYmciE9JG4mJnQucHVzaChyKX0pLGUuY3Vyc29yV3JhcHBlciYmdC5wdXNoKGV0LmNyZWF0ZShlLnN0YXRlLmRvYyxbZS5jdXJzb3JXcmFwcGVyLmRlY29dKSksRXMuZnJvbSh0KX1jb25zdCBLQj17Y2hpbGRMaXN0OiEwLGNoYXJhY3RlckRhdGE6ITAsY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiEwLGF0dHJpYnV0ZXM6ITAsYXR0cmlidXRlT2xkVmFsdWU6ITAsc3VidHJlZTohMH0scUI9dXImJlVzPD0xMTtjbGFzcyBHQntjb25zdHJ1Y3Rvcigpe3RoaXMuYW5jaG9yTm9kZT1udWxsLHRoaXMuYW5jaG9yT2Zmc2V0PTAsdGhpcy5mb2N1c05vZGU9bnVsbCx0aGlzLmZvY3VzT2Zmc2V0PTB9c2V0KHQpe3RoaXMuYW5jaG9yTm9kZT10LmFuY2hvck5vZGUsdGhpcy5hbmNob3JPZmZzZXQ9dC5hbmNob3JPZmZzZXQsdGhpcy5mb2N1c05vZGU9dC5mb2N1c05vZGUsdGhpcy5mb2N1c09mZnNldD10LmZvY3VzT2Zmc2V0fWNsZWFyKCl7dGhpcy5hbmNob3JOb2RlPXRoaXMuZm9jdXNOb2RlPW51bGx9ZXEodCl7cmV0dXJuIHQuYW5jaG9yTm9kZT09dGhpcy5hbmNob3JOb2RlJiZ0LmFuY2hvck9mZnNldD09dGhpcy5hbmNob3JPZmZzZXQmJnQuZm9jdXNOb2RlPT10aGlzLmZvY3VzTm9kZSYmdC5mb2N1c09mZnNldD09dGhpcy5mb2N1c09mZnNldH19Y2xhc3MgWUJ7Y29uc3RydWN0b3IodCxuKXt0aGlzLnZpZXc9dCx0aGlzLmhhbmRsZURPTUNoYW5nZT1uLHRoaXMucXVldWU9W10sdGhpcy5mbHVzaGluZ1Nvb249LTEsdGhpcy5vYnNlcnZlcj1udWxsLHRoaXMuY3VycmVudFNlbGVjdGlvbj1uZXcgR0IsdGhpcy5vbkNoYXJEYXRhPW51bGwsdGhpcy5zdXBwcmVzc2luZ1NlbGVjdGlvblVwZGF0ZXM9ITEsdGhpcy5vYnNlcnZlcj13aW5kb3cuTXV0YXRpb25PYnNlcnZlciYmbmV3IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKHI9Pntmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLnF1ZXVlLnB1c2gocltvXSk7dXImJlVzPD0xMSYmci5zb21lKG89Pm8udHlwZT09ImNoaWxkTGlzdCImJm8ucmVtb3ZlZE5vZGVzLmxlbmd0aHx8by50eXBlPT0iY2hhcmFjdGVyRGF0YSImJm8ub2xkVmFsdWUubGVuZ3RoPm8udGFyZ2V0Lm5vZGVWYWx1ZS5sZW5ndGgpP3RoaXMuZmx1c2hTb29uKCk6dGhpcy5mbHVzaCgpfSkscUImJih0aGlzLm9uQ2hhckRhdGE9cj0+e3RoaXMucXVldWUucHVzaCh7dGFyZ2V0OnIudGFyZ2V0LHR5cGU6ImNoYXJhY3RlckRhdGEiLG9sZFZhbHVlOnIucHJldlZhbHVlfSksdGhpcy5mbHVzaFNvb24oKX0pLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpfWZsdXNoU29vbigpe3RoaXMuZmx1c2hpbmdTb29uPDAmJih0aGlzLmZsdXNoaW5nU29vbj13aW5kb3cuc2V0VGltZW91dCgoKT0+e3RoaXMuZmx1c2hpbmdTb29uPS0xLHRoaXMuZmx1c2goKX0sMjApKX1mb3JjZUZsdXNoKCl7dGhpcy5mbHVzaGluZ1Nvb24+LTEmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuZmx1c2hpbmdTb29uKSx0aGlzLmZsdXNoaW5nU29vbj0tMSx0aGlzLmZsdXNoKCkpfXN0YXJ0KCl7dGhpcy5vYnNlcnZlciYmKHRoaXMub2JzZXJ2ZXIudGFrZVJlY29yZHMoKSx0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy52aWV3LmRvbSxLQikpLHRoaXMub25DaGFyRGF0YSYmdGhpcy52aWV3LmRvbS5hZGRFdmVudExpc3RlbmVyKCJET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQiLHRoaXMub25DaGFyRGF0YSksdGhpcy5jb25uZWN0U2VsZWN0aW9uKCl9c3RvcCgpe2lmKHRoaXMub2JzZXJ2ZXIpe2xldCB0PXRoaXMub2JzZXJ2ZXIudGFrZVJlY29yZHMoKTtpZih0Lmxlbmd0aCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5xdWV1ZS5wdXNoKHRbbl0pO3dpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLmZsdXNoKCksMjApfXRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpfXRoaXMub25DaGFyRGF0YSYmdGhpcy52aWV3LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQiLHRoaXMub25DaGFyRGF0YSksdGhpcy5kaXNjb25uZWN0U2VsZWN0aW9uKCl9Y29ubmVjdFNlbGVjdGlvbigpe3RoaXMudmlldy5kb20ub3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHRoaXMub25TZWxlY3Rpb25DaGFuZ2UpfWRpc2Nvbm5lY3RTZWxlY3Rpb24oKXt0aGlzLnZpZXcuZG9tLm93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIix0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKX1zdXBwcmVzc1NlbGVjdGlvblVwZGF0ZXMoKXt0aGlzLnN1cHByZXNzaW5nU2VsZWN0aW9uVXBkYXRlcz0hMCxzZXRUaW1lb3V0KCgpPT50aGlzLnN1cHByZXNzaW5nU2VsZWN0aW9uVXBkYXRlcz0hMSw1MCl9b25TZWxlY3Rpb25DaGFuZ2UoKXtpZih4Xyh0aGlzLnZpZXcpKXtpZih0aGlzLnN1cHByZXNzaW5nU2VsZWN0aW9uVXBkYXRlcylyZXR1cm4gUGkodGhpcy52aWV3KTtpZih1ciYmVXM8PTExJiYhdGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi5lbXB0eSl7bGV0IHQ9dGhpcy52aWV3LmRvbVNlbGVjdGlvblJhbmdlKCk7aWYodC5mb2N1c05vZGUmJmxsKHQuZm9jdXNOb2RlLHQuZm9jdXNPZmZzZXQsdC5hbmNob3JOb2RlLHQuYW5jaG9yT2Zmc2V0KSlyZXR1cm4gdGhpcy5mbHVzaFNvb24oKX10aGlzLmZsdXNoKCl9fXNldEN1clNlbGVjdGlvbigpe3RoaXMuY3VycmVudFNlbGVjdGlvbi5zZXQodGhpcy52aWV3LmRvbVNlbGVjdGlvblJhbmdlKCkpfWlnbm9yZVNlbGVjdGlvbkNoYW5nZSh0KXtpZighdC5mb2N1c05vZGUpcmV0dXJuITA7bGV0IG49bmV3IFNldCxyO2ZvcihsZXQgaT10LmZvY3VzTm9kZTtpO2k9d2YoaSkpbi5hZGQoaSk7Zm9yKGxldCBpPXQuYW5jaG9yTm9kZTtpO2k9d2YoaSkpaWYobi5oYXMoaSkpe3I9aTticmVha31sZXQgbz1yJiZ0aGlzLnZpZXcuZG9jVmlldy5uZWFyZXN0RGVzYyhyKTtpZihvJiZvLmlnbm9yZU11dGF0aW9uKHt0eXBlOiJzZWxlY3Rpb24iLHRhcmdldDpyLm5vZGVUeXBlPT0zP3IucGFyZW50Tm9kZTpyfSkpcmV0dXJuIHRoaXMuc2V0Q3VyU2VsZWN0aW9uKCksITB9cGVuZGluZ1JlY29yZHMoKXtpZih0aGlzLm9ic2VydmVyKWZvcihsZXQgdCBvZiB0aGlzLm9ic2VydmVyLnRha2VSZWNvcmRzKCkpdGhpcy5xdWV1ZS5wdXNoKHQpO3JldHVybiB0aGlzLnF1ZXVlfWZsdXNoKCl7bGV0e3ZpZXc6dH09dGhpcztpZighdC5kb2NWaWV3fHx0aGlzLmZsdXNoaW5nU29vbj4tMSlyZXR1cm47bGV0IG49dGhpcy5wZW5kaW5nUmVjb3JkcygpO24ubGVuZ3RoJiYodGhpcy5xdWV1ZT1bXSk7bGV0IHI9dC5kb21TZWxlY3Rpb25SYW5nZSgpLG89IXRoaXMuc3VwcHJlc3NpbmdTZWxlY3Rpb25VcGRhdGVzJiYhdGhpcy5jdXJyZW50U2VsZWN0aW9uLmVxKHIpJiZ4Xyh0KSYmIXRoaXMuaWdub3JlU2VsZWN0aW9uQ2hhbmdlKHIpLGk9LTEscz0tMSxhPSExLGw9W107aWYodC5lZGl0YWJsZSlmb3IobGV0IHU9MDt1PG4ubGVuZ3RoO3UrKyl7bGV0IGQ9dGhpcy5yZWdpc3Rlck11dGF0aW9uKG5bdV0sbCk7ZCYmKGk9aTwwP2QuZnJvbTpNYXRoLm1pbihkLmZyb20saSkscz1zPDA/ZC50bzpNYXRoLm1heChkLnRvLHMpLGQudHlwZU92ZXImJihhPSEwKSl9aWYoQW8mJmwubGVuZ3RoPjEpe2xldCB1PWwuZmlsdGVyKGQ9PmQubm9kZU5hbWU9PSJCUiIpO2lmKHUubGVuZ3RoPT0yKXtsZXQgZD11WzBdLGY9dVsxXTtkLnBhcmVudE5vZGUmJmQucGFyZW50Tm9kZS5wYXJlbnROb2RlPT1mLnBhcmVudE5vZGU/Zi5yZW1vdmUoKTpkLnJlbW92ZSgpfX1sZXQgYz1udWxsO2k8MCYmbyYmdC5pbnB1dC5sYXN0Rm9jdXM+RGF0ZS5ub3coKS0yMDAmJk1hdGgubWF4KHQuaW5wdXQubGFzdFRvdWNoLHQuaW5wdXQubGFzdENsaWNrLnRpbWUpPERhdGUubm93KCktMzAwJiZKZyhyKSYmKGM9bncodCkpJiZjLmVxKEJlLm5lYXIodC5zdGF0ZS5kb2MucmVzb2x2ZSgwKSwxKSk/KHQuaW5wdXQubGFzdEZvY3VzPTAsUGkodCksdGhpcy5jdXJyZW50U2VsZWN0aW9uLnNldChyKSx0LnNjcm9sbFRvU2VsZWN0aW9uKCkpOihpPi0xfHxvKSYmKGk+LTEmJih0LmRvY1ZpZXcubWFya0RpcnR5KGkscyksWEIodCkpLHRoaXMuaGFuZGxlRE9NQ2hhbmdlKGkscyxhLGwpLHQuZG9jVmlldyYmdC5kb2NWaWV3LmRpcnR5P3QudXBkYXRlU3RhdGUodC5zdGF0ZSk6dGhpcy5jdXJyZW50U2VsZWN0aW9uLmVxKHIpfHxQaSh0KSx0aGlzLmN1cnJlbnRTZWxlY3Rpb24uc2V0KHIpKX1yZWdpc3Rlck11dGF0aW9uKHQsbil7aWYobi5pbmRleE9mKHQudGFyZ2V0KT4tMSlyZXR1cm4gbnVsbDtsZXQgcj10aGlzLnZpZXcuZG9jVmlldy5uZWFyZXN0RGVzYyh0LnRhcmdldCk7aWYodC50eXBlPT0iYXR0cmlidXRlcyImJihyPT10aGlzLnZpZXcuZG9jVmlld3x8dC5hdHRyaWJ1dGVOYW1lPT0iY29udGVudGVkaXRhYmxlInx8dC5hdHRyaWJ1dGVOYW1lPT0ic3R5bGUiJiYhdC5vbGRWYWx1ZSYmIXQudGFyZ2V0LmdldEF0dHJpYnV0ZSgic3R5bGUiKSl8fCFyfHxyLmlnbm9yZU11dGF0aW9uKHQpKXJldHVybiBudWxsO2lmKHQudHlwZT09ImNoaWxkTGlzdCIpe2ZvcihsZXQgdT0wO3U8dC5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspbi5wdXNoKHQuYWRkZWROb2Rlc1t1XSk7aWYoci5jb250ZW50RE9NJiZyLmNvbnRlbnRET00hPXIuZG9tJiYhci5jb250ZW50RE9NLmNvbnRhaW5zKHQudGFyZ2V0KSlyZXR1cm57ZnJvbTpyLnBvc0JlZm9yZSx0bzpyLnBvc0FmdGVyfTtsZXQgbz10LnByZXZpb3VzU2libGluZyxpPXQubmV4dFNpYmxpbmc7aWYodXImJlVzPD0xMSYmdC5hZGRlZE5vZGVzLmxlbmd0aClmb3IobGV0IHU9MDt1PHQuYWRkZWROb2Rlcy5sZW5ndGg7dSsrKXtsZXR7cHJldmlvdXNTaWJsaW5nOmQsbmV4dFNpYmxpbmc6Zn09dC5hZGRlZE5vZGVzW3VdOyghZHx8QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LmFkZGVkTm9kZXMsZCk8MCkmJihvPWQpLCghZnx8QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LmFkZGVkTm9kZXMsZik8MCkmJihpPWYpfWxldCBzPW8mJm8ucGFyZW50Tm9kZT09dC50YXJnZXQ/Vm4obykrMTowLGE9ci5sb2NhbFBvc0Zyb21ET00odC50YXJnZXQscywtMSksbD1pJiZpLnBhcmVudE5vZGU9PXQudGFyZ2V0P1ZuKGkpOnQudGFyZ2V0LmNoaWxkTm9kZXMubGVuZ3RoLGM9ci5sb2NhbFBvc0Zyb21ET00odC50YXJnZXQsbCwxKTtyZXR1cm57ZnJvbTphLHRvOmN9fWVsc2UgcmV0dXJuIHQudHlwZT09ImF0dHJpYnV0ZXMiP3tmcm9tOnIucG9zQXRTdGFydC1yLmJvcmRlcix0bzpyLnBvc0F0RW5kK3IuYm9yZGVyfTp7ZnJvbTpyLnBvc0F0U3RhcnQsdG86ci5wb3NBdEVuZCx0eXBlT3Zlcjp0LnRhcmdldC5ub2RlVmFsdWU9PXQub2xkVmFsdWV9fX1sZXQgVF89bmV3IFdlYWtNYXAsUF89ITE7ZnVuY3Rpb24gWEIoZSl7aWYoIVRfLmhhcyhlKSYmKFRfLnNldChlLG51bGwpLFsibm9ybWFsIiwibm93cmFwIiwicHJlLWxpbmUiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZS5kb20pLndoaXRlU3BhY2UpIT09LTEpKXtpZihlLnJlcXVpcmVzR2Vja29IYWNrTm9kZT1BbyxQXylyZXR1cm47Y29uc29sZS53YXJuKCJQcm9zZU1pcnJvciBleHBlY3RzIHRoZSBDU1Mgd2hpdGUtc3BhY2UgcHJvcGVydHkgdG8gYmUgc2V0LCBwcmVmZXJhYmx5IHRvICdwcmUtd3JhcCcuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGxvYWQgc3R5bGUvcHJvc2VtaXJyb3IuY3NzIGZyb20gdGhlIHByb3NlbWlycm9yLXZpZXcgcGFja2FnZS4iKSxQXz0hMH19ZnVuY3Rpb24gWkIoZSl7bGV0IHQ7ZnVuY3Rpb24gbihsKXtsLnByZXZlbnREZWZhdWx0KCksbC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0PWwuZ2V0VGFyZ2V0UmFuZ2VzKClbMF19ZS5kb20uYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLG4sITApLGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpbmRlbnQiKSxlLmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsbiwhMCk7bGV0IHI9dC5zdGFydENvbnRhaW5lcixvPXQuc3RhcnRPZmZzZXQsaT10LmVuZENvbnRhaW5lcixzPXQuZW5kT2Zmc2V0LGE9ZS5kb21BdFBvcyhlLnN0YXRlLnNlbGVjdGlvbi5hbmNob3IpO3JldHVybiBsbChhLm5vZGUsYS5vZmZzZXQsaSxzKSYmKFtyLG8saSxzXT1baSxzLHIsb10pLHthbmNob3JOb2RlOnIsYW5jaG9yT2Zmc2V0Om8sZm9jdXNOb2RlOmksZm9jdXNPZmZzZXQ6c319ZnVuY3Rpb24gSkIoZSx0LG4pe2xldHtub2RlOnIsZnJvbU9mZnNldDpvLHRvT2Zmc2V0OmksZnJvbTpzLHRvOmF9PWUuZG9jVmlldy5wYXJzZVJhbmdlKHQsbiksbD1lLmRvbVNlbGVjdGlvblJhbmdlKCksYyx1PWwuYW5jaG9yTm9kZTtpZih1JiZlLmRvbS5jb250YWlucyh1Lm5vZGVUeXBlPT0xP3U6dS5wYXJlbnROb2RlKSYmKGM9W3tub2RlOnUsb2Zmc2V0OmwuYW5jaG9yT2Zmc2V0fV0sSmcobCl8fGMucHVzaCh7bm9kZTpsLmZvY3VzTm9kZSxvZmZzZXQ6bC5mb2N1c09mZnNldH0pKSxEbiYmZS5pbnB1dC5sYXN0S2V5Q29kZT09PTgpZm9yKGxldCB5PWk7eT5vO3ktLSl7bGV0IHY9ci5jaGlsZE5vZGVzW3ktMV0seD12LnBtVmlld0Rlc2M7aWYodi5ub2RlTmFtZT09IkJSIiYmIXgpe2k9eTticmVha31pZigheHx8eC5zaXplKWJyZWFrfWxldCBkPWUuc3RhdGUuZG9jLGY9ZS5zb21lUHJvcCgiZG9tUGFyc2VyIil8fFdjLmZyb21TY2hlbWEoZS5zdGF0ZS5zY2hlbWEpLHA9ZC5yZXNvbHZlKHMpLG09bnVsbCxnPWYucGFyc2Uocix7dG9wTm9kZTpwLnBhcmVudCx0b3BNYXRjaDpwLnBhcmVudC5jb250ZW50TWF0Y2hBdChwLmluZGV4KCkpLHRvcE9wZW46ITAsZnJvbTpvLHRvOmkscHJlc2VydmVXaGl0ZXNwYWNlOnAucGFyZW50LnR5cGUud2hpdGVzcGFjZT09InByZSI/ImZ1bGwiOiEwLGZpbmRQb3NpdGlvbnM6YyxydWxlRnJvbU5vZGU6UUIsY29udGV4dDpwfSk7aWYoYyYmY1swXS5wb3MhPW51bGwpe2xldCB5PWNbMF0ucG9zLHY9Y1sxXSYmY1sxXS5wb3M7dj09bnVsbCYmKHY9eSksbT17YW5jaG9yOnkrcyxoZWFkOnYrc319cmV0dXJue2RvYzpnLHNlbDptLGZyb206cyx0bzphfX1mdW5jdGlvbiBRQihlKXtsZXQgdD1lLnBtVmlld0Rlc2M7aWYodClyZXR1cm4gdC5wYXJzZVJ1bGUoKTtpZihlLm5vZGVOYW1lPT0iQlIiJiZlLnBhcmVudE5vZGUpe2lmKFluJiYvXih1bHxvbCkkL2kudGVzdChlLnBhcmVudE5vZGUubm9kZU5hbWUpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpKSx7c2tpcDpufX1lbHNlIGlmKGUucGFyZW50Tm9kZS5sYXN0Q2hpbGQ9PWV8fFluJiYvXih0cnx0YWJsZSkkL2kudGVzdChlLnBhcmVudE5vZGUubm9kZU5hbWUpKXJldHVybntpZ25vcmU6ITB9fWVsc2UgaWYoZS5ub2RlTmFtZT09IklNRyImJmUuZ2V0QXR0cmlidXRlKCJtYXJrLXBsYWNlaG9sZGVyIikpcmV0dXJue2lnbm9yZTohMH07cmV0dXJuIG51bGx9Y29uc3QgZVU9L14oYXxhYmJyfGFjcm9ueW18YnxiZFtpb118YmlnfGJyfGJ1dHRvbnxjaXRlfGNvZGV8ZGF0YShsaXN0KT98ZGVsfGRmbnxlbXxpfGluc3xrYmR8bGFiZWx8bWFwfG1hcmt8bWV0ZXJ8b3V0cHV0fHF8cnVieXxzfHNhbXB8c21hbGx8c3BhbnxzdHJvbmd8c3VbYnBdfHRpbWV8dXx0dHx2YXIpJC9pO2Z1bmN0aW9uIHRVKGUsdCxuLHIsbyl7bGV0IGk9ZS5pbnB1dC5jb21wb3NpdGlvblBlbmRpbmdDaGFuZ2VzfHwoZS5jb21wb3Npbmc/ZS5pbnB1dC5jb21wb3NpdGlvbklEOjApO2lmKGUuaW5wdXQuY29tcG9zaXRpb25QZW5kaW5nQ2hhbmdlcz0wLHQ8MCl7bGV0IE09ZS5pbnB1dC5sYXN0U2VsZWN0aW9uVGltZT5EYXRlLm5vdygpLTUwP2UuaW5wdXQubGFzdFNlbGVjdGlvbk9yaWdpbjpudWxsLEE9bncoZSxNKTtpZihBJiYhZS5zdGF0ZS5zZWxlY3Rpb24uZXEoQSkpe2lmKERuJiZ5byYmZS5pbnB1dC5sYXN0S2V5Q29kZT09PTEzJiZEYXRlLm5vdygpLTEwMDxlLmlucHV0Lmxhc3RLZXlDb2RlVGltZSYmZS5zb21lUHJvcCgiaGFuZGxlS2V5RG93biIsTD0+TChlLFRhKDEzLCJFbnRlciIpKSkpcmV0dXJuO2xldCBJPWUuc3RhdGUudHIuc2V0U2VsZWN0aW9uKEEpO009PSJwb2ludGVyIj9JLnNldE1ldGEoInBvaW50ZXIiLCEwKTpNPT0ia2V5IiYmSS5zY3JvbGxJbnRvVmlldygpLGkmJkkuc2V0TWV0YSgiY29tcG9zaXRpb24iLGkpLGUuZGlzcGF0Y2goSSl9cmV0dXJufWxldCBzPWUuc3RhdGUuZG9jLnJlc29sdmUodCksYT1zLnNoYXJlZERlcHRoKG4pO3Q9cy5iZWZvcmUoYSsxKSxuPWUuc3RhdGUuZG9jLnJlc29sdmUobikuYWZ0ZXIoYSsxKTtsZXQgbD1lLnN0YXRlLnNlbGVjdGlvbixjPUpCKGUsdCxuKSx1PWUuc3RhdGUuZG9jLGQ9dS5zbGljZShjLmZyb20sYy50byksZixwO2UuaW5wdXQubGFzdEtleUNvZGU9PT04JiZEYXRlLm5vdygpLTEwMDxlLmlucHV0Lmxhc3RLZXlDb2RlVGltZT8oZj1lLnN0YXRlLnNlbGVjdGlvbi50byxwPSJlbmQiKTooZj1lLnN0YXRlLnNlbGVjdGlvbi5mcm9tLHA9InN0YXJ0IiksZS5pbnB1dC5sYXN0S2V5Q29kZT1udWxsO2xldCBtPW9VKGQuY29udGVudCxjLmRvYy5jb250ZW50LGMuZnJvbSxmLHApO2lmKChHYyYmZS5pbnB1dC5sYXN0SU9TRW50ZXI+RGF0ZS5ub3coKS0yMjV8fHlvKSYmby5zb21lKE09Pk0ubm9kZVR5cGU9PTEmJiFlVS50ZXN0KE0ubm9kZU5hbWUpKSYmKCFtfHxtLmVuZEE+PW0uZW5kQikmJmUuc29tZVByb3AoImhhbmRsZUtleURvd24iLE09Pk0oZSxUYSgxMywiRW50ZXIiKSkpKXtlLmlucHV0Lmxhc3RJT1NFbnRlcj0wO3JldHVybn1pZighbSlpZihyJiZsIGluc3RhbmNlb2YgVGUmJiFsLmVtcHR5JiZsLiRoZWFkLnNhbWVQYXJlbnQobC4kYW5jaG9yKSYmIWUuY29tcG9zaW5nJiYhKGMuc2VsJiZjLnNlbC5hbmNob3IhPWMuc2VsLmhlYWQpKW09e3N0YXJ0OmwuZnJvbSxlbmRBOmwudG8sZW5kQjpsLnRvfTtlbHNle2lmKGMuc2VsKXtsZXQgTT1NXyhlLGUuc3RhdGUuZG9jLGMuc2VsKTtpZihNJiYhTS5lcShlLnN0YXRlLnNlbGVjdGlvbikpe2xldCBBPWUuc3RhdGUudHIuc2V0U2VsZWN0aW9uKE0pO2kmJkEuc2V0TWV0YSgiY29tcG9zaXRpb24iLGkpLGUuZGlzcGF0Y2goQSl9fXJldHVybn1pZihEbiYmZS5jdXJzb3JXcmFwcGVyJiZjLnNlbCYmYy5zZWwuYW5jaG9yPT1lLmN1cnNvcldyYXBwZXIuZGVjby5mcm9tJiZjLnNlbC5oZWFkPT1jLnNlbC5hbmNob3Ipe2xldCBNPW0uZW5kQi1tLnN0YXJ0O2Muc2VsPXthbmNob3I6Yy5zZWwuYW5jaG9yK00saGVhZDpjLnNlbC5hbmNob3IrTX19ZS5pbnB1dC5kb21DaGFuZ2VDb3VudCsrLGUuc3RhdGUuc2VsZWN0aW9uLmZyb208ZS5zdGF0ZS5zZWxlY3Rpb24udG8mJm0uc3RhcnQ9PW0uZW5kQiYmZS5zdGF0ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBUZSYmKG0uc3RhcnQ+ZS5zdGF0ZS5zZWxlY3Rpb24uZnJvbSYmbS5zdGFydDw9ZS5zdGF0ZS5zZWxlY3Rpb24uZnJvbSsyJiZlLnN0YXRlLnNlbGVjdGlvbi5mcm9tPj1jLmZyb20/bS5zdGFydD1lLnN0YXRlLnNlbGVjdGlvbi5mcm9tOm0uZW5kQTxlLnN0YXRlLnNlbGVjdGlvbi50byYmbS5lbmRBPj1lLnN0YXRlLnNlbGVjdGlvbi50by0yJiZlLnN0YXRlLnNlbGVjdGlvbi50bzw9Yy50byYmKG0uZW5kQis9ZS5zdGF0ZS5zZWxlY3Rpb24udG8tbS5lbmRBLG0uZW5kQT1lLnN0YXRlLnNlbGVjdGlvbi50bykpLHVyJiZVczw9MTEmJm0uZW5kQj09bS5zdGFydCsxJiZtLmVuZEE9PW0uc3RhcnQmJm0uc3RhcnQ+Yy5mcm9tJiZjLmRvYy50ZXh0QmV0d2VlbihtLnN0YXJ0LWMuZnJvbS0xLG0uc3RhcnQtYy5mcm9tKzEpPT0iIMKgIiYmKG0uc3RhcnQtLSxtLmVuZEEtLSxtLmVuZEItLSk7bGV0IGc9Yy5kb2MucmVzb2x2ZU5vQ2FjaGUobS5zdGFydC1jLmZyb20pLHk9Yy5kb2MucmVzb2x2ZU5vQ2FjaGUobS5lbmRCLWMuZnJvbSksdj11LnJlc29sdmUobS5zdGFydCkseD1nLnNhbWVQYXJlbnQoeSkmJmcucGFyZW50LmlubGluZUNvbnRlbnQmJnYuZW5kKCk+PW0uZW5kQSx3O2lmKChHYyYmZS5pbnB1dC5sYXN0SU9TRW50ZXI+RGF0ZS5ub3coKS0yMjUmJigheHx8by5zb21lKE09Pk0ubm9kZU5hbWU9PSJESVYifHxNLm5vZGVOYW1lPT0iUCIpKXx8IXgmJmcucG9zPGMuZG9jLmNvbnRlbnQuc2l6ZSYmIWcuc2FtZVBhcmVudCh5KSYmKHc9QmUuZmluZEZyb20oYy5kb2MucmVzb2x2ZShnLnBvcysxKSwxLCEwKSkmJncuaGVhZD09eS5wb3MpJiZlLnNvbWVQcm9wKCJoYW5kbGVLZXlEb3duIixNPT5NKGUsVGEoMTMsIkVudGVyIikpKSl7ZS5pbnB1dC5sYXN0SU9TRW50ZXI9MDtyZXR1cm59aWYoZS5zdGF0ZS5zZWxlY3Rpb24uYW5jaG9yPm0uc3RhcnQmJnJVKHUsbS5zdGFydCxtLmVuZEEsZyx5KSYmZS5zb21lUHJvcCgiaGFuZGxlS2V5RG93biIsTT0+TShlLFRhKDgsIkJhY2tzcGFjZSIpKSkpe3lvJiZEbiYmZS5kb21PYnNlcnZlci5zdXBwcmVzc1NlbGVjdGlvblVwZGF0ZXMoKTtyZXR1cm59RG4mJnlvJiZtLmVuZEI9PW0uc3RhcnQmJihlLmlucHV0Lmxhc3RBbmRyb2lkRGVsZXRlPURhdGUubm93KCkpLHlvJiYheCYmZy5zdGFydCgpIT15LnN0YXJ0KCkmJnkucGFyZW50T2Zmc2V0PT0wJiZnLmRlcHRoPT15LmRlcHRoJiZjLnNlbCYmYy5zZWwuYW5jaG9yPT1jLnNlbC5oZWFkJiZjLnNlbC5oZWFkPT1tLmVuZEEmJihtLmVuZEItPTIseT1jLmRvYy5yZXNvbHZlTm9DYWNoZShtLmVuZEItYy5mcm9tKSxzZXRUaW1lb3V0KCgpPT57ZS5zb21lUHJvcCgiaGFuZGxlS2V5RG93biIsZnVuY3Rpb24oTSl7cmV0dXJuIE0oZSxUYSgxMywiRW50ZXIiKSl9KX0sMjApKTtsZXQgaz1tLnN0YXJ0LEU9bS5lbmRBLFMsXyxQO2lmKHgpe2lmKGcucG9zPT15LnBvcyl1ciYmVXM8PTExJiZnLnBhcmVudE9mZnNldD09MCYmKGUuZG9tT2JzZXJ2ZXIuc3VwcHJlc3NTZWxlY3Rpb25VcGRhdGVzKCksc2V0VGltZW91dCgoKT0+UGkoZSksMjApKSxTPWUuc3RhdGUudHIuZGVsZXRlKGssRSksXz11LnJlc29sdmUobS5zdGFydCkubWFya3NBY3Jvc3ModS5yZXNvbHZlKG0uZW5kQSkpO2Vsc2UgaWYobS5lbmRBPT1tLmVuZEImJihQPW5VKGcucGFyZW50LmNvbnRlbnQuY3V0KGcucGFyZW50T2Zmc2V0LHkucGFyZW50T2Zmc2V0KSx2LnBhcmVudC5jb250ZW50LmN1dCh2LnBhcmVudE9mZnNldCxtLmVuZEEtdi5zdGFydCgpKSkpKVM9ZS5zdGF0ZS50cixQLnR5cGU9PSJhZGQiP1MuYWRkTWFyayhrLEUsUC5tYXJrKTpTLnJlbW92ZU1hcmsoayxFLFAubWFyayk7ZWxzZSBpZihnLnBhcmVudC5jaGlsZChnLmluZGV4KCkpLmlzVGV4dCYmZy5pbmRleCgpPT15LmluZGV4KCktKHkudGV4dE9mZnNldD8wOjEpKXtsZXQgTT1nLnBhcmVudC50ZXh0QmV0d2VlbihnLnBhcmVudE9mZnNldCx5LnBhcmVudE9mZnNldCk7aWYoZS5zb21lUHJvcCgiaGFuZGxlVGV4dElucHV0IixBPT5BKGUsayxFLE0pKSlyZXR1cm47Uz1lLnN0YXRlLnRyLmluc2VydFRleHQoTSxrLEUpfX1pZihTfHwoUz1lLnN0YXRlLnRyLnJlcGxhY2UoayxFLGMuZG9jLnNsaWNlKG0uc3RhcnQtYy5mcm9tLG0uZW5kQi1jLmZyb20pKSksYy5zZWwpe2xldCBNPU1fKGUsUy5kb2MsYy5zZWwpO00mJiEoRG4mJnlvJiZlLmNvbXBvc2luZyYmTS5lbXB0eSYmKG0uc3RhcnQhPW0uZW5kQnx8ZS5pbnB1dC5sYXN0QW5kcm9pZERlbGV0ZTxEYXRlLm5vdygpLTEwMCkmJihNLmhlYWQ9PWt8fE0uaGVhZD09Uy5tYXBwaW5nLm1hcChFKS0xKXx8dXImJk0uZW1wdHkmJk0uaGVhZD09aykmJlMuc2V0U2VsZWN0aW9uKE0pfV8mJlMuZW5zdXJlTWFya3MoXyksaSYmUy5zZXRNZXRhKCJjb21wb3NpdGlvbiIsaSksZS5kaXNwYXRjaChTLnNjcm9sbEludG9WaWV3KCkpfWZ1bmN0aW9uIE1fKGUsdCxuKXtyZXR1cm4gTWF0aC5tYXgobi5hbmNob3Isbi5oZWFkKT50LmNvbnRlbnQuc2l6ZT9udWxsOnJ3KGUsdC5yZXNvbHZlKG4uYW5jaG9yKSx0LnJlc29sdmUobi5oZWFkKSl9ZnVuY3Rpb24gblUoZSx0KXtsZXQgbj1lLmZpcnN0Q2hpbGQubWFya3Mscj10LmZpcnN0Q2hpbGQubWFya3Msbz1uLGk9cixzLGEsbDtmb3IobGV0IHU9MDt1PHIubGVuZ3RoO3UrKylvPXJbdV0ucmVtb3ZlRnJvbVNldChvKTtmb3IobGV0IHU9MDt1PG4ubGVuZ3RoO3UrKylpPW5bdV0ucmVtb3ZlRnJvbVNldChpKTtpZihvLmxlbmd0aD09MSYmaS5sZW5ndGg9PTApYT1vWzBdLHM9ImFkZCIsbD11PT51Lm1hcmsoYS5hZGRUb1NldCh1Lm1hcmtzKSk7ZWxzZSBpZihvLmxlbmd0aD09MCYmaS5sZW5ndGg9PTEpYT1pWzBdLHM9InJlbW92ZSIsbD11PT51Lm1hcmsoYS5yZW1vdmVGcm9tU2V0KHUubWFya3MpKTtlbHNlIHJldHVybiBudWxsO2xldCBjPVtdO2ZvcihsZXQgdT0wO3U8dC5jaGlsZENvdW50O3UrKyljLnB1c2gobCh0LmNoaWxkKHUpKSk7aWYoVS5mcm9tKGMpLmVxKGUpKXJldHVybnttYXJrOmEsdHlwZTpzfX1mdW5jdGlvbiByVShlLHQsbixyLG8pe2lmKCFyLnBhcmVudC5pc1RleHRibG9ja3x8bi10PD1vLnBvcy1yLnBvc3x8JHkociwhMCwhMSk8by5wb3MpcmV0dXJuITE7bGV0IGk9ZS5yZXNvbHZlKHQpO2lmKGkucGFyZW50T2Zmc2V0PGkucGFyZW50LmNvbnRlbnQuc2l6ZXx8IWkucGFyZW50LmlzVGV4dGJsb2NrKXJldHVybiExO2xldCBzPWUucmVzb2x2ZSgkeShpLCEwLCEwKSk7cmV0dXJuIXMucGFyZW50LmlzVGV4dGJsb2NrfHxzLnBvcz5ufHwkeShzLCEwLCExKTxuPyExOnIucGFyZW50LmNvbnRlbnQuY3V0KHIucGFyZW50T2Zmc2V0KS5lcShzLnBhcmVudC5jb250ZW50KX1mdW5jdGlvbiAkeShlLHQsbil7bGV0IHI9ZS5kZXB0aCxvPXQ/ZS5lbmQoKTplLnBvcztmb3IoO3I+MCYmKHR8fGUuaW5kZXhBZnRlcihyKT09ZS5ub2RlKHIpLmNoaWxkQ291bnQpOylyLS0sbysrLHQ9ITE7aWYobil7bGV0IGk9ZS5ub2RlKHIpLm1heWJlQ2hpbGQoZS5pbmRleEFmdGVyKHIpKTtmb3IoO2kmJiFpLmlzTGVhZjspaT1pLmZpcnN0Q2hpbGQsbysrfXJldHVybiBvfWZ1bmN0aW9uIG9VKGUsdCxuLHIsbyl7bGV0IGk9ZS5maW5kRGlmZlN0YXJ0KHQsbik7aWYoaT09bnVsbClyZXR1cm4gbnVsbDtsZXR7YTpzLGI6YX09ZS5maW5kRGlmZkVuZCh0LG4rZS5zaXplLG4rdC5zaXplKTtpZihvPT0iZW5kIil7bGV0IGw9TWF0aC5tYXgoMCxpLU1hdGgubWluKHMsYSkpO3ItPXMrbC1pfWlmKHM8aSYmZS5zaXplPHQuc2l6ZSl7bGV0IGw9cjw9aSYmcj49cz9pLXI6MDtpLT1sLGkmJmk8dC5zaXplJiZSXyh0LnRleHRCZXR3ZWVuKGktMSxpKzEpKSYmKGkrPWw/MTotMSksYT1pKyhhLXMpLHM9aX1lbHNlIGlmKGE8aSl7bGV0IGw9cjw9aSYmcj49YT9pLXI6MDtpLT1sLGkmJmk8ZS5zaXplJiZSXyhlLnRleHRCZXR3ZWVuKGktMSxpKzEpKSYmKGkrPWw/MTotMSkscz1pKyhzLWEpLGE9aX1yZXR1cm57c3RhcnQ6aSxlbmRBOnMsZW5kQjphfX1mdW5jdGlvbiBSXyhlKXtpZihlLmxlbmd0aCE9MilyZXR1cm4hMTtsZXQgdD1lLmNoYXJDb2RlQXQoMCksbj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIHQ+PTU2MzIwJiZ0PD01NzM0MyYmbj49NTUyOTYmJm48PTU2MzE5fWNsYXNzIGlVe2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fcm9vdD1udWxsLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnRyYWNrV3JpdGVzPW51bGwsdGhpcy5tb3VudGVkPSExLHRoaXMubWFya0N1cnNvcj1udWxsLHRoaXMuY3Vyc29yV3JhcHBlcj1udWxsLHRoaXMubGFzdFNlbGVjdGVkVmlld0Rlc2M9dm9pZCAwLHRoaXMuaW5wdXQ9bmV3IENCLHRoaXMucHJldkRpcmVjdFBsdWdpbnM9W10sdGhpcy5wbHVnaW5WaWV3cz1bXSx0aGlzLnJlcXVpcmVzR2Vja29IYWNrTm9kZT0hMSx0aGlzLmRyYWdnaW5nPW51bGwsdGhpcy5fcHJvcHM9bix0aGlzLnN0YXRlPW4uc3RhdGUsdGhpcy5kaXJlY3RQbHVnaW5zPW4ucGx1Z2luc3x8W10sdGhpcy5kaXJlY3RQbHVnaW5zLmZvckVhY2goSV8pLHRoaXMuZGlzcGF0Y2g9dGhpcy5kaXNwYXRjaC5iaW5kKHRoaXMpLHRoaXMuZG9tPXQmJnQubW91bnR8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQmJih0LmFwcGVuZENoaWxkP3QuYXBwZW5kQ2hpbGQodGhpcy5kb20pOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3QodGhpcy5kb20pOnQubW91bnQmJih0aGlzLm1vdW50ZWQ9ITApKSx0aGlzLmVkaXRhYmxlPUFfKHRoaXMpLCRfKHRoaXMpLHRoaXMubm9kZVZpZXdzPURfKHRoaXMpLHRoaXMuZG9jVmlldz1wXyh0aGlzLnN0YXRlLmRvYyxOXyh0aGlzKSxOeSh0aGlzKSx0aGlzLmRvbSx0aGlzKSx0aGlzLmRvbU9ic2VydmVyPW5ldyBZQih0aGlzLChyLG8saSxzKT0+dFUodGhpcyxyLG8saSxzKSksdGhpcy5kb21PYnNlcnZlci5zdGFydCgpLE9CKHRoaXMpLHRoaXMudXBkYXRlUGx1Z2luVmlld3MoKX1nZXQgY29tcG9zaW5nKCl7cmV0dXJuIHRoaXMuaW5wdXQuY29tcG9zaW5nfWdldCBwcm9wcygpe2lmKHRoaXMuX3Byb3BzLnN0YXRlIT10aGlzLnN0YXRlKXtsZXQgdD10aGlzLl9wcm9wczt0aGlzLl9wcm9wcz17fTtmb3IobGV0IG4gaW4gdCl0aGlzLl9wcm9wc1tuXT10W25dO3RoaXMuX3Byb3BzLnN0YXRlPXRoaXMuc3RhdGV9cmV0dXJuIHRoaXMuX3Byb3BzfXVwZGF0ZSh0KXt0LmhhbmRsZURPTUV2ZW50cyE9dGhpcy5fcHJvcHMuaGFuZGxlRE9NRXZlbnRzJiZVeCh0aGlzKTtsZXQgbj10aGlzLl9wcm9wczt0aGlzLl9wcm9wcz10LHQucGx1Z2lucyYmKHQucGx1Z2lucy5mb3JFYWNoKElfKSx0aGlzLmRpcmVjdFBsdWdpbnM9dC5wbHVnaW5zKSx0aGlzLnVwZGF0ZVN0YXRlSW5uZXIodC5zdGF0ZSxuKX1zZXRQcm9wcyh0KXtsZXQgbj17fTtmb3IobGV0IHIgaW4gdGhpcy5fcHJvcHMpbltyXT10aGlzLl9wcm9wc1tyXTtuLnN0YXRlPXRoaXMuc3RhdGU7Zm9yKGxldCByIGluIHQpbltyXT10W3JdO3RoaXMudXBkYXRlKG4pfXVwZGF0ZVN0YXRlKHQpe3RoaXMudXBkYXRlU3RhdGVJbm5lcih0LHRoaXMuX3Byb3BzKX11cGRhdGVTdGF0ZUlubmVyKHQsbil7dmFyIHI7bGV0IG89dGhpcy5zdGF0ZSxpPSExLHM9ITE7dC5zdG9yZWRNYXJrcyYmdGhpcy5jb21wb3NpbmcmJihhTih0aGlzKSxzPSEwKSx0aGlzLnN0YXRlPXQ7bGV0IGE9by5wbHVnaW5zIT10LnBsdWdpbnN8fHRoaXMuX3Byb3BzLnBsdWdpbnMhPW4ucGx1Z2lucztpZihhfHx0aGlzLl9wcm9wcy5wbHVnaW5zIT1uLnBsdWdpbnN8fHRoaXMuX3Byb3BzLm5vZGVWaWV3cyE9bi5ub2RlVmlld3Mpe2xldCBwPURfKHRoaXMpO2FVKHAsdGhpcy5ub2RlVmlld3MpJiYodGhpcy5ub2RlVmlld3M9cCxpPSEwKX0oYXx8bi5oYW5kbGVET01FdmVudHMhPXRoaXMuX3Byb3BzLmhhbmRsZURPTUV2ZW50cykmJlV4KHRoaXMpLHRoaXMuZWRpdGFibGU9QV8odGhpcyksJF8odGhpcyk7bGV0IGw9TnkodGhpcyksYz1OXyh0aGlzKSx1PW8ucGx1Z2lucyE9dC5wbHVnaW5zJiYhby5kb2MuZXEodC5kb2MpPyJyZXNldCI6dC5zY3JvbGxUb1NlbGVjdGlvbj5vLnNjcm9sbFRvU2VsZWN0aW9uPyJ0byBzZWxlY3Rpb24iOiJwcmVzZXJ2ZSIsZD1pfHwhdGhpcy5kb2NWaWV3Lm1hdGNoZXNOb2RlKHQuZG9jLGMsbCk7KGR8fCF0LnNlbGVjdGlvbi5lcShvLnNlbGVjdGlvbikpJiYocz0hMCk7bGV0IGY9dT09InByZXNlcnZlIiYmcyYmdGhpcy5kb20uc3R5bGUub3ZlcmZsb3dBbmNob3I9PW51bGwmJkJGKHRoaXMpO2lmKHMpe3RoaXMuZG9tT2JzZXJ2ZXIuc3RvcCgpO2xldCBwPWQmJih1cnx8RG4pJiYhdGhpcy5jb21wb3NpbmcmJiFvLnNlbGVjdGlvbi5lbXB0eSYmIXQuc2VsZWN0aW9uLmVtcHR5JiZzVShvLnNlbGVjdGlvbix0LnNlbGVjdGlvbik7aWYoZCl7bGV0IG09RG4/dGhpcy50cmFja1dyaXRlcz10aGlzLmRvbVNlbGVjdGlvblJhbmdlKCkuZm9jdXNOb2RlOm51bGw7KGl8fCF0aGlzLmRvY1ZpZXcudXBkYXRlKHQuZG9jLGMsbCx0aGlzKSkmJih0aGlzLmRvY1ZpZXcudXBkYXRlT3V0ZXJEZWNvKFtdKSx0aGlzLmRvY1ZpZXcuZGVzdHJveSgpLHRoaXMuZG9jVmlldz1wXyh0LmRvYyxjLGwsdGhpcy5kb20sdGhpcykpLG0mJiF0aGlzLnRyYWNrV3JpdGVzJiYocD0hMCl9cHx8ISh0aGlzLmlucHV0Lm1vdXNlRG93biYmdGhpcy5kb21PYnNlcnZlci5jdXJyZW50U2VsZWN0aW9uLmVxKHRoaXMuZG9tU2VsZWN0aW9uUmFuZ2UoKSkmJmZCKHRoaXMpKT9QaSh0aGlzLHApOihHUih0aGlzLHQuc2VsZWN0aW9uKSx0aGlzLmRvbU9ic2VydmVyLnNldEN1clNlbGVjdGlvbigpKSx0aGlzLmRvbU9ic2VydmVyLnN0YXJ0KCl9dGhpcy51cGRhdGVQbHVnaW5WaWV3cyhvKSwhKChyPXRoaXMuZHJhZ2dpbmcpPT09bnVsbHx8cj09PXZvaWQgMCkmJnIubm9kZSYmIW8uZG9jLmVxKHQuZG9jKSYmdGhpcy51cGRhdGVEcmFnZ2VkTm9kZSh0aGlzLmRyYWdnaW5nLG8pLHU9PSJyZXNldCI/dGhpcy5kb20uc2Nyb2xsVG9wPTA6dT09InRvIHNlbGVjdGlvbiI/dGhpcy5zY3JvbGxUb1NlbGVjdGlvbigpOmYmJlVGKGYpfXNjcm9sbFRvU2VsZWN0aW9uKCl7bGV0IHQ9dGhpcy5kb21TZWxlY3Rpb25SYW5nZSgpLmZvY3VzTm9kZTtpZighdGhpcy5zb21lUHJvcCgiaGFuZGxlU2Nyb2xsVG9TZWxlY3Rpb24iLG49Pm4odGhpcykpKWlmKHRoaXMuc3RhdGUuc2VsZWN0aW9uIGluc3RhbmNlb2Ygd2Upe2xldCBuPXRoaXMuZG9jVmlldy5kb21BZnRlclBvcyh0aGlzLnN0YXRlLnNlbGVjdGlvbi5mcm9tKTtuLm5vZGVUeXBlPT0xJiZhXyh0aGlzLG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCl9ZWxzZSBhXyh0aGlzLHRoaXMuY29vcmRzQXRQb3ModGhpcy5zdGF0ZS5zZWxlY3Rpb24uaGVhZCwxKSx0KX1kZXN0cm95UGx1Z2luVmlld3MoKXtsZXQgdDtmb3IoO3Q9dGhpcy5wbHVnaW5WaWV3cy5wb3AoKTspdC5kZXN0cm95JiZ0LmRlc3Ryb3koKX11cGRhdGVQbHVnaW5WaWV3cyh0KXtpZighdHx8dC5wbHVnaW5zIT10aGlzLnN0YXRlLnBsdWdpbnN8fHRoaXMuZGlyZWN0UGx1Z2lucyE9dGhpcy5wcmV2RGlyZWN0UGx1Z2lucyl7dGhpcy5wcmV2RGlyZWN0UGx1Z2lucz10aGlzLmRpcmVjdFBsdWdpbnMsdGhpcy5kZXN0cm95UGx1Z2luVmlld3MoKTtmb3IobGV0IG49MDtuPHRoaXMuZGlyZWN0UGx1Z2lucy5sZW5ndGg7bisrKXtsZXQgcj10aGlzLmRpcmVjdFBsdWdpbnNbbl07ci5zcGVjLnZpZXcmJnRoaXMucGx1Z2luVmlld3MucHVzaChyLnNwZWMudmlldyh0aGlzKSl9Zm9yKGxldCBuPTA7bjx0aGlzLnN0YXRlLnBsdWdpbnMubGVuZ3RoO24rKyl7bGV0IHI9dGhpcy5zdGF0ZS5wbHVnaW5zW25dO3Iuc3BlYy52aWV3JiZ0aGlzLnBsdWdpblZpZXdzLnB1c2goci5zcGVjLnZpZXcodGhpcykpfX1lbHNlIGZvcihsZXQgbj0wO248dGhpcy5wbHVnaW5WaWV3cy5sZW5ndGg7bisrKXtsZXQgcj10aGlzLnBsdWdpblZpZXdzW25dO3IudXBkYXRlJiZyLnVwZGF0ZSh0aGlzLHQpfX11cGRhdGVEcmFnZ2VkTm9kZSh0LG4pe2xldCByPXQubm9kZSxvPS0xO2lmKHRoaXMuc3RhdGUuZG9jLm5vZGVBdChyLmZyb20pPT1yLm5vZGUpbz1yLmZyb207ZWxzZXtsZXQgaT1yLmZyb20rKHRoaXMuc3RhdGUuZG9jLmNvbnRlbnQuc2l6ZS1uLmRvYy5jb250ZW50LnNpemUpOyhpPjAmJnRoaXMuc3RhdGUuZG9jLm5vZGVBdChpKSk9PXIubm9kZSYmKG89aSl9dGhpcy5kcmFnZ2luZz1uZXcgY04odC5zbGljZSx0Lm1vdmUsbzwwP3ZvaWQgMDp3ZS5jcmVhdGUodGhpcy5zdGF0ZS5kb2MsbykpfXNvbWVQcm9wKHQsbil7bGV0IHI9dGhpcy5fcHJvcHMmJnRoaXMuX3Byb3BzW3RdLG87aWYociE9bnVsbCYmKG89bj9uKHIpOnIpKXJldHVybiBvO2ZvcihsZXQgcz0wO3M8dGhpcy5kaXJlY3RQbHVnaW5zLmxlbmd0aDtzKyspe2xldCBhPXRoaXMuZGlyZWN0UGx1Z2luc1tzXS5wcm9wc1t0XTtpZihhIT1udWxsJiYobz1uP24oYSk6YSkpcmV0dXJuIG99bGV0IGk9dGhpcy5zdGF0ZS5wbHVnaW5zO2lmKGkpZm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBhPWlbc10ucHJvcHNbdF07aWYoYSE9bnVsbCYmKG89bj9uKGEpOmEpKXJldHVybiBvfX1oYXNGb2N1cygpe2lmKHVyKXtsZXQgdD10aGlzLnJvb3QuYWN0aXZlRWxlbWVudDtpZih0PT10aGlzLmRvbSlyZXR1cm4hMDtpZighdHx8IXRoaXMuZG9tLmNvbnRhaW5zKHQpKXJldHVybiExO2Zvcig7dCYmdGhpcy5kb20hPXQmJnRoaXMuZG9tLmNvbnRhaW5zKHQpOyl7aWYodC5jb250ZW50RWRpdGFibGU9PSJmYWxzZSIpcmV0dXJuITE7dD10LnBhcmVudEVsZW1lbnR9cmV0dXJuITB9cmV0dXJuIHRoaXMucm9vdC5hY3RpdmVFbGVtZW50PT10aGlzLmRvbX1mb2N1cygpe3RoaXMuZG9tT2JzZXJ2ZXIuc3RvcCgpLHRoaXMuZWRpdGFibGUmJlZGKHRoaXMuZG9tKSxQaSh0aGlzKSx0aGlzLmRvbU9ic2VydmVyLnN0YXJ0KCl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzLl9yb290O2lmKHQ9PW51bGwpe2ZvcihsZXQgbj10aGlzLmRvbS5wYXJlbnROb2RlO247bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZT09OXx8bi5ub2RlVHlwZT09MTEmJm4uaG9zdClyZXR1cm4gbi5nZXRTZWxlY3Rpb258fChPYmplY3QuZ2V0UHJvdG90eXBlT2YobikuZ2V0U2VsZWN0aW9uPSgpPT5uLm93bmVyRG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkpLHRoaXMuX3Jvb3Q9bn1yZXR1cm4gdHx8ZG9jdW1lbnR9dXBkYXRlUm9vdCgpe3RoaXMuX3Jvb3Q9bnVsbH1wb3NBdENvb3Jkcyh0KXtyZXR1cm4gR0YodGhpcyx0KX1jb29yZHNBdFBvcyh0LG49MSl7cmV0dXJuIEZSKHRoaXMsdCxuKX1kb21BdFBvcyh0LG49MCl7cmV0dXJuIHRoaXMuZG9jVmlldy5kb21Gcm9tUG9zKHQsbil9bm9kZURPTSh0KXtsZXQgbj10aGlzLmRvY1ZpZXcuZGVzY0F0KHQpO3JldHVybiBuP24ubm9kZURPTTpudWxsfXBvc0F0RE9NKHQsbixyPS0xKXtsZXQgbz10aGlzLmRvY1ZpZXcucG9zRnJvbURPTSh0LG4scik7aWYobz09bnVsbCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRE9NIHBvc2l0aW9uIG5vdCBpbnNpZGUgdGhlIGVkaXRvciIpO3JldHVybiBvfWVuZE9mVGV4dGJsb2NrKHQsbil7cmV0dXJuIFFGKHRoaXMsbnx8dGhpcy5zdGF0ZSx0KX1wYXN0ZUhUTUwodCxuKXtyZXR1cm4ga2YodGhpcywiIix0LCExLG58fG5ldyBDbGlwYm9hcmRFdmVudCgicGFzdGUiKSl9cGFzdGVUZXh0KHQsbil7cmV0dXJuIGtmKHRoaXMsdCxudWxsLCEwLG58fG5ldyBDbGlwYm9hcmRFdmVudCgicGFzdGUiKSl9ZGVzdHJveSgpe3RoaXMuZG9jVmlldyYmKFRCKHRoaXMpLHRoaXMuZGVzdHJveVBsdWdpblZpZXdzKCksdGhpcy5tb3VudGVkPyh0aGlzLmRvY1ZpZXcudXBkYXRlKHRoaXMuc3RhdGUuZG9jLFtdLE55KHRoaXMpLHRoaXMpLHRoaXMuZG9tLnRleHRDb250ZW50PSIiKTp0aGlzLmRvbS5wYXJlbnROb2RlJiZ0aGlzLmRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZG9tKSx0aGlzLmRvY1ZpZXcuZGVzdHJveSgpLHRoaXMuZG9jVmlldz1udWxsKX1nZXQgaXNEZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5kb2NWaWV3PT1udWxsfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIE1CKHRoaXMsdCl9ZGlzcGF0Y2godCl7bGV0IG49dGhpcy5fcHJvcHMuZGlzcGF0Y2hUcmFuc2FjdGlvbjtuP24uY2FsbCh0aGlzLHQpOnRoaXMudXBkYXRlU3RhdGUodGhpcy5zdGF0ZS5hcHBseSh0KSl9ZG9tU2VsZWN0aW9uUmFuZ2UoKXtyZXR1cm4gWW4mJnRoaXMucm9vdC5ub2RlVHlwZT09PTExJiZBRih0aGlzLmRvbS5vd25lckRvY3VtZW50KT09dGhpcy5kb20/WkIodGhpcyk6dGhpcy5kb21TZWxlY3Rpb24oKX1kb21TZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290LmdldFNlbGVjdGlvbigpfX1mdW5jdGlvbiBOXyhlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB0LmNsYXNzPSJQcm9zZU1pcnJvciIsdC5jb250ZW50ZWRpdGFibGU9U3RyaW5nKGUuZWRpdGFibGUpLGUuc29tZVByb3AoImF0dHJpYnV0ZXMiLG49PntpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIiYmKG49bihlLnN0YXRlKSksbilmb3IobGV0IHIgaW4gbilyPT0iY2xhc3MiP3QuY2xhc3MrPSIgIituW3JdOnI9PSJzdHlsZSI/dC5zdHlsZT0odC5zdHlsZT90LnN0eWxlKyI7IjoiIikrbltyXTohdFtyXSYmciE9ImNvbnRlbnRlZGl0YWJsZSImJnIhPSJub2RlTmFtZSImJih0W3JdPVN0cmluZyhuW3JdKSl9KSx0LnRyYW5zbGF0ZXx8KHQudHJhbnNsYXRlPSJubyIpLFtFdC5ub2RlKDAsZS5zdGF0ZS5kb2MuY29udGVudC5zaXplLHQpXX1mdW5jdGlvbiAkXyhlKXtpZihlLm1hcmtDdXJzb3Ipe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO3QuY2xhc3NOYW1lPSJQcm9zZU1pcnJvci1zZXBhcmF0b3IiLHQuc2V0QXR0cmlidXRlKCJtYXJrLXBsYWNlaG9sZGVyIiwidHJ1ZSIpLHQuc2V0QXR0cmlidXRlKCJhbHQiLCIiKSxlLmN1cnNvcldyYXBwZXI9e2RvbTp0LGRlY286RXQud2lkZ2V0KGUuc3RhdGUuc2VsZWN0aW9uLmhlYWQsdCx7cmF3OiEwLG1hcmtzOmUubWFya0N1cnNvcn0pfX1lbHNlIGUuY3Vyc29yV3JhcHBlcj1udWxsfWZ1bmN0aW9uIEFfKGUpe3JldHVybiFlLnNvbWVQcm9wKCJlZGl0YWJsZSIsdD0+dChlLnN0YXRlKT09PSExKX1mdW5jdGlvbiBzVShlLHQpe2xldCBuPU1hdGgubWluKGUuJGFuY2hvci5zaGFyZWREZXB0aChlLmhlYWQpLHQuJGFuY2hvci5zaGFyZWREZXB0aCh0LmhlYWQpKTtyZXR1cm4gZS4kYW5jaG9yLnN0YXJ0KG4pIT10LiRhbmNob3Iuc3RhcnQobil9ZnVuY3Rpb24gRF8oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBuKHIpe2ZvcihsZXQgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pfHwodFtvXT1yW29dKX1yZXR1cm4gZS5zb21lUHJvcCgibm9kZVZpZXdzIixuKSxlLnNvbWVQcm9wKCJtYXJrVmlld3MiLG4pLHR9ZnVuY3Rpb24gYVUoZSx0KXtsZXQgbj0wLHI9MDtmb3IobGV0IG8gaW4gZSl7aWYoZVtvXSE9dFtvXSlyZXR1cm4hMDtuKyt9Zm9yKGxldCBvIGluIHQpcisrO3JldHVybiBuIT1yfWZ1bmN0aW9uIElfKGUpe2lmKGUuc3BlYy5zdGF0ZXx8ZS5zcGVjLmZpbHRlclRyYW5zYWN0aW9ufHxlLnNwZWMuYXBwZW5kVHJhbnNhY3Rpb24pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlBsdWdpbnMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSB2aWV3IG11c3Qgbm90IGhhdmUgYSBzdGF0ZSBjb21wb25lbnQiKX12YXIgbFU9ZT0+e2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpO3JldHVybiBlLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCJcXCQmIikucmVwbGFjZSgvLS9nLCJcXHgyZCIpfTtjb25zdCBjVT1zaShsVSk7dmFyIGhOPShlLHQsbik9PntpZighdC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgIituKX0sRGU9KGUsdCxuKT0+KGhOKGUsdCwicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSxuP24uY2FsbChlKTp0LmdldChlKSksZGk9KGUsdCxuKT0+e2lmKHQuaGFzKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpO3QgaW5zdGFuY2VvZiBXZWFrU2V0P3QuYWRkKGUpOnQuc2V0KGUsbil9LG10PShlLHQsbixyKT0+KGhOKGUsdCwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLHI/ci5jYWxsKGUsbik6dC5zZXQoZSxuKSxuKTtmdW5jdGlvbiB1VShlKXtyZXR1cm4hIShlLnByZXYmJmUubmV4dCYmZS5wcmV2LnRleHQuZnVsbCE9PWUubmV4dC50ZXh0LmZ1bGwpfWZ1bmN0aW9uIGRVKGUpe3JldHVybiEhKGUucHJldiYmZS5uZXh0JiZlLnByZXYucmFuZ2UuY3Vyc29yIT09ZS5uZXh0LnJhbmdlLmN1cnNvcil9ZnVuY3Rpb24gZlUoZSl7cmV0dXJuISEoIWUucHJldiYmZS5uZXh0KX1mdW5jdGlvbiBwVShlKXtyZXR1cm4hIShlLnByZXYmJiFlLm5leHQpfWZ1bmN0aW9uIGhVKGUpe3JldHVybiEhKGUucHJldiYmZS5uZXh0JiZlLnByZXYucmFuZ2UuZnJvbSE9PWUubmV4dC5yYW5nZS5mcm9tKX1mdW5jdGlvbiBtVShlKXtyZXR1cm4gZT09PSJpbnZhbGlkLWV4aXQtc3BsaXQifXZhciBnVT1bImp1bXAtYmFja3dhcmQtZXhpdCIsImp1bXAtZm9yd2FyZC1leGl0Il0sdlU9WyJqdW1wLWJhY2t3YXJkLWNoYW5nZSIsImp1bXAtZm9yd2FyZC1jaGFuZ2UiXTtmdW5jdGlvbiB5VShlKXt2YXIgdCxuO3JldHVybiAkbyhnVSwodD1lLmV4aXQpPT1udWxsP3ZvaWQgMDp0LmV4aXRSZWFzb24pfHwkbyh2VSwobj1lLmNoYW5nZSk9PW51bGw/dm9pZCAwOm4uY2hhbmdlUmVhc29uKX1mdW5jdGlvbiBMXyhlKXtyZXR1cm4hIShlJiZlLnF1ZXJ5LmZ1bGwubGVuZ3RoPj1lLnN1Z2dlc3Rlci5tYXRjaE9mZnNldCl9ZnVuY3Rpb24gal8oZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgVGV9ZnVuY3Rpb24gc3IoZSl7Y29uc3R7bWF0Y2g6dCxjaGFuZ2VSZWFzb246bixleGl0UmVhc29uOnJ9PWU7cmV0dXJuey4uLnQsY2hhbmdlUmVhc29uOm4sZXhpdFJlYXNvbjpyfX1mdW5jdGlvbiB4VShlLHQpe2NvbnN0e2ludmFsaWRQcmVmaXhDaGFyYWN0ZXJzOm4sdmFsaWRQcmVmaXhDaGFyYWN0ZXJzOnJ9PXQ7cmV0dXJuIG4/IW5ldyBSZWdFeHAoSHgobikpLnRlc3QoZSk6bmV3IFJlZ0V4cChIeChyKSkudGVzdChlKX1mdW5jdGlvbiBiVShlKXtjb25zdHt0ZXh0OnQscmVnZXhwOm4sJHBvczpyLHN1Z2dlc3RlcjpvfT1lLGk9ci5zdGFydCgpO2xldCBzO3JldHVybiBYZyh0LG4pLmZvckVhY2goYT0+e2NvbnN0IGw9YS5pbnB1dC5zbGljZShNYXRoLm1heCgwLGEuaW5kZXgtMSksYS5pbmRleCk7aWYoeFUobCxvKSl7Y29uc3QgYz1hLmluZGV4K2ksdT1hWzBdLGQ9YVsxXTtpZighX2UodSl8fCFfZShkKSlyZXR1cm47Y29uc3QgZj1jK3UubGVuZ3RoLHA9TWF0aC5taW4oZixyLnBvcyksbT1wLWM7YzxyLnBvcyYmZj49ci5wb3MmJihzPXtyYW5nZTp7ZnJvbTpjLHRvOmYsY3Vyc29yOnB9LG1hdGNoOmEscXVlcnk6e3BhcnRpYWw6dS5zbGljZShkLmxlbmd0aCxtKSxmdWxsOnUuc2xpY2UoZC5sZW5ndGgpfSx0ZXh0OntwYXJ0aWFsOnUuc2xpY2UoMCxtKSxmdWxsOnV9LHRleHRBZnRlcjpyLmRvYy50ZXh0QmV0d2VlbihmLHIuZW5kKCksVHMsVHMpLHRleHRCZWZvcmU6ci5kb2MudGV4dEJldHdlZW4oaSxjLFRzLFRzKSxzdWdnZXN0ZXI6b30pfX0pLHN9ZnVuY3Rpb24gbU4oZSl7Y29uc3R7JHBvczp0LHN1Z2dlc3RlcjpufT1lLHtjaGFyOnIsbmFtZTpvLHN0YXJ0T2ZMaW5lOmksc3VwcG9ydGVkQ2hhcmFjdGVyczpzLG1hdGNoT2Zmc2V0OmEsbXVsdGlsaW5lOmwsY2FzZUluc2Vuc2l0aXZlOmMsdW5pY29kZTp1fT1uLGQ9UFUoe2NoYXI6cixtYXRjaE9mZnNldDphLHN0YXJ0T2ZMaW5lOmksc3VwcG9ydGVkQ2hhcmFjdGVyczpzLG11bHRpbGluZTpsLGNhc2VJbnNlbnNpdGl2ZTpjLHVuaWNvZGU6dX0pLGY9dC5kb2MudGV4dEJldHdlZW4odC5iZWZvcmUoKSx0LmVuZCgpLFRzLFRzKTtyZXR1cm4gYlUoe3N1Z2dlc3RlcjpuLHRleHQ6ZixyZWdleHA6ZCwkcG9zOnQsY2hhcjpyLG5hbWU6b30pfWZ1bmN0aW9uIGdOKGUpe2NvbnN0e3N0YXRlOnQsbWF0Y2g6bn09ZTt0cnl7cmV0dXJuIG1OKHskcG9zOnQuZG9jLnJlc29sdmUobi5yYW5nZS5jdXJzb3IpLHN1Z2dlc3RlcjpuLnN1Z2dlc3Rlcn0pfWNhdGNoe3JldHVybn19ZnVuY3Rpb24gdk4oZSl7Y29uc3R7cHJldjp0LG5leHQ6bixzdGF0ZTpyfT1lO3JldHVybiFuJiZ0LnJhbmdlLmZyb20+PXIuZG9jLm5vZGVTaXplP3tleGl0OnNyKHttYXRjaDp0LGV4aXRSZWFzb246ImRlbGV0ZSJ9KX06IW58fCF0LnF1ZXJ5LnBhcnRpYWw/e2V4aXQ6c3Ioe21hdGNoOnQsZXhpdFJlYXNvbjoiaW52YWxpZC1leGl0LXNwbGl0In0pfTp0LnJhbmdlLnRvPT09bi5yYW5nZS5jdXJzb3I/e2V4aXQ6c3Ioe21hdGNoOm4sZXhpdFJlYXNvbjoiZXhpdC1lbmQifSl9OnQucXVlcnkucGFydGlhbD97ZXhpdDpzcih7bWF0Y2g6bixleGl0UmVhc29uOiJleGl0LXNwbGl0In0pfTp7fX1mdW5jdGlvbiB3VShlKXtjb25zdHtwcmV2OnQsbmV4dDpuLHN0YXRlOnJ9PWUsbz1oZSgpLGk9Z04oe3N0YXRlOnIsbWF0Y2g6dH0pLHtleGl0OnN9PWkmJmkucXVlcnkuZnVsbCE9PXQucXVlcnkuZnVsbD92Tih7cHJldjp0LG5leHQ6aSxzdGF0ZTpyfSk6bztyZXR1cm4gdC5yYW5nZS5mcm9tPG4ucmFuZ2UuZnJvbT97ZXhpdDpzPz9zcih7bWF0Y2g6dCxleGl0UmVhc29uOiJqdW1wLWZvcndhcmQtZXhpdCJ9KSxjaGFuZ2U6c3Ioe21hdGNoOm4sY2hhbmdlUmVhc29uOiJqdW1wLWZvcndhcmQtY2hhbmdlIn0pfTp7ZXhpdDpzPz9zcih7bWF0Y2g6dCxleGl0UmVhc29uOiJqdW1wLWJhY2t3YXJkLWV4aXQifSksY2hhbmdlOnNyKHttYXRjaDpuLGNoYW5nZVJlYXNvbjoianVtcC1iYWNrd2FyZC1jaGFuZ2UifSl9fWZ1bmN0aW9uIFNVKGUpe2NvbnN0e21hdGNoOnQsc3RhdGU6biwkcG9zOnJ9PWUse3NlbGVjdGlvbjpvfT1uLGk9Z04oe21hdGNoOnQsc3RhdGU6bn0pO3JldHVybiFpfHxpLnRleHQuZnVsbCE9PXQudGV4dC5mdWxsP3ZOKHtwcmV2OnQsbmV4dDppLHN0YXRlOm59KTohby5lbXB0eSYmKG8uZnJvbTw9dC5yYW5nZS5mcm9tfHxvLnRvPj10LnJhbmdlLnRvKT97ZXhpdDpzcih7bWF0Y2g6dCxleGl0UmVhc29uOiJzZWxlY3Rpb24tb3V0c2lkZSJ9KX06ci5wb3M+dC5yYW5nZS50bz97ZXhpdDpzcih7bWF0Y2g6dCxleGl0UmVhc29uOiJtb3ZlLWVuZCJ9KX06ci5wb3M8PXQucmFuZ2UuZnJvbT97ZXhpdDpzcih7bWF0Y2g6dCxleGl0UmVhc29uOiJtb3ZlLXN0YXJ0In0pfTp7fX1mdW5jdGlvbiBrVShlKXtjb25zdHtwcmV2OnQsbmV4dDpuLHN0YXRlOnIsJHBvczpvfT1lLGk9aGUoKTtpZighdCYmIW4pcmV0dXJuIGk7Y29uc3Qgcz17cHJldjp0LG5leHQ6bn07cmV0dXJuIGhVKHMpP3dVKHtwcmV2OnMucHJldixuZXh0OnMubmV4dCxzdGF0ZTpyfSk6ZlUocyk/e2NoYW5nZTpzcih7bWF0Y2g6cy5uZXh0LGNoYW5nZVJlYXNvbjoic3RhcnQifSl9OnBVKHMpP1NVKHskcG9zOm8sbWF0Y2g6cy5wcmV2LHN0YXRlOnJ9KTp1VShzKT97Y2hhbmdlOnNyKHttYXRjaDpzLm5leHQsY2hhbmdlUmVhc29uOiJjaGFuZ2UtY2hhcmFjdGVyIn0pfTpkVShzKT97Y2hhbmdlOnNyKHttYXRjaDpzLm5leHQsY2hhbmdlUmVhc29uOnIuc2VsZWN0aW9uLmVtcHR5PyJtb3ZlIjoic2VsZWN0aW9uLWluc2lkZSJ9KX06aX1mdW5jdGlvbiB6XyhlLHQpe2ZvcihsZXQgbj1lLmRlcHRoO24+MDtuLS0pe2NvbnN0IHI9ZS5ub2RlKG4pO2lmKHQuaW5jbHVkZXMoci50eXBlLm5hbWUpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFZ4KGUsdCl7Y29uc3R7JGZyb206biwkdG86cn09ZTtyZXR1cm4geU4oZSx0KT8hMDpKTShuLnBvcyxyLnBvcykuc29tZShvPT5FVShuLmRvYy5yZXNvbHZlKG8pLHQpKX1mdW5jdGlvbiB5TihlLHQpe2NvbnN0eyRmcm9tOm4sJHRvOnJ9PWUsbz1uZXcgU2V0KChuLm1hcmtzQWNyb3NzKHIpPz9bXSkubWFwKGk9PmkudHlwZS5uYW1lKSk7cmV0dXJuIHQuc29tZShpPT5vLmhhcyhpKSl9ZnVuY3Rpb24gRVUoZSx0KXtjb25zdCBuPW5ldyBTZXQoZS5tYXJrcygpLm1hcChyPT5yLnR5cGUubmFtZSkpO3JldHVybiB0LnNvbWUocj0+bi5oYXMocikpfWZ1bmN0aW9uIF9VKGUsdCl7Y29uc3R7JGN1cnNvcjpufT10LHt2YWxpZE1hcmtzOnIsdmFsaWROb2RlczpvLGludmFsaWRNYXJrczppLGludmFsaWROb2RlczpzfT1lO3JldHVybiFyJiYhbyYmSnMoaSkmJkpzKHMpPyEwOiEociYmIXlOKHQscil8fG8mJiF6XyhuLG8pfHwhciYmVngodCxpKXx8IW8mJnpfKG4scykpfWZ1bmN0aW9uIEZfKGUpe2NvbnN0e3N1Z2dlc3RlcnM6dCwkcG9zOm4sc2VsZWN0aW9uRW1wdHk6cn09ZTtmb3IoY29uc3QgbyBvZiB0KWlmKCEoby5lbXB0eVNlbGVjdGlvbnNPbmx5JiYhcikpdHJ5e2NvbnN0IGk9bU4oe3N1Z2dlc3RlcjpvLCRwb3M6bn0pO2lmKCFpKWNvbnRpbnVlO2NvbnN0IHM9eyRmcm9tOm4uZG9jLnJlc29sdmUoaS5yYW5nZS5mcm9tKSwkdG86bi5kb2MucmVzb2x2ZShpLnJhbmdlLnRvKSwkY3Vyc29yOm59O2lmKF9VKG8scykmJm8uaXNWYWxpZFBvc2l0aW9uKHMsaSkpcmV0dXJuIGl9Y2F0Y2h7fX1mdW5jdGlvbiBIeChlKXtyZXR1cm4gS3ooZSk/ZS5zb3VyY2U6ZX1mdW5jdGlvbiBDVShlKXtyZXR1cm4gZT8iXiI6IiJ9ZnVuY3Rpb24gT1UoZSx0KXtyZXR1cm5gKD86JHtIeChlKX0peyR7dH0sfWB9ZnVuY3Rpb24gVFUoZSl7cmV0dXJuIF9lKGUpP25ldyBSZWdFeHAoY1UoZSkpOmV9ZnVuY3Rpb24gUFUoZSl7Y29uc3R7Y2hhcjp0LG1hdGNoT2Zmc2V0Om4sc3RhcnRPZkxpbmU6cixzdXBwb3J0ZWRDaGFyYWN0ZXJzOm8sY2FwdHVyZUNoYXI6aT0hMCxjYXNlSW5zZW5zaXRpdmU6cz0hMSxtdWx0aWxpbmU6YT0hMSx1bmljb2RlOmw9ITF9PWUsYz1gZyR7YT8ibSI6IiJ9JHtzPyJpIjoiIn0ke2w/InUiOiIifWA7bGV0IHU9VFUodCkuc291cmNlO3JldHVybiBpJiYodT1gKCR7dX0pYCksbmV3IFJlZ0V4cChgJHtDVShyKX0ke3V9JHtPVShvLG4pfWAsYyl9dmFyIE1VPXthcHBlbmRUcmFuc2FjdGlvbjohMSxwcmlvcml0eTo1MCxpZ25vcmVkVGFnOiJzcGFuIixtYXRjaE9mZnNldDowLGRpc2FibGVEZWNvcmF0aW9uczohMSxzdGFydE9mTGluZTohMSxzdWdnZXN0Q2xhc3NOYW1lOiJzdWdnZXN0IixzdWdnZXN0VGFnOiJzcGFuIixzdXBwb3J0ZWRDaGFyYWN0ZXJzOi9cdysvLHZhbGlkUHJlZml4Q2hhcmFjdGVyczovXltcc1wwXT8kLyxpbnZhbGlkUHJlZml4Q2hhcmFjdGVyczpudWxsLGlnbm9yZWRDbGFzc05hbWU6bnVsbCxpbnZhbGlkTWFya3M6W10saW52YWxpZE5vZGVzOltdLHZhbGlkTWFya3M6bnVsbCx2YWxpZE5vZGVzOm51bGwsaXNWYWxpZFBvc2l0aW9uOigpPT4hMCxjaGVja05leHRWYWxpZFNlbGVjdGlvbjpudWxsLGVtcHR5U2VsZWN0aW9uc09ubHk6ITEsY2FzZUluc2Vuc2l0aXZlOiExLG11bHRpbGluZTohMSx1bmljb2RlOiExLGNhcHR1cmVDaGFyOiEwfSx4Tj0iX19pZ25vcmVfcHJvc2VtaXJyb3Jfc3VnZ2VzdF91cGRhdGVfXyIseWgsWnUsYW4sdXMscWwsRm8sR3QsZHMsR2wsYk49Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZGkodGhpcyx5aCwhMSksZGkodGhpcyxadSwhMSksZGkodGhpcyxhbix2b2lkIDApLGRpKHRoaXMsdXMsdm9pZCAwKSxkaSh0aGlzLHFsLHZvaWQgMCksZGkodGhpcyxGbyxoZSgpKSxkaSh0aGlzLEd0LGV0LmVtcHR5KSxkaSh0aGlzLGRzLCExKSxkaSh0aGlzLEdsLCExKSx0aGlzLnNldE1hcmtSZW1vdmVkPSgpPT57bXQodGhpcyxkcywhMCl9LHRoaXMuZmluZE5leHRUZXh0U2VsZWN0aW9uPW49Pntjb25zdCByPW4uJGZyb20uZG9jLG89TWF0aC5taW4oci5ub2RlU2l6ZS0yLG4udG8rMSksaT1yLnJlc29sdmUobykscz1CZS5maW5kRnJvbShpLDEsITApO2lmKGpfKHMpKXJldHVybiBzfSx0aGlzLmlnbm9yZU5leHRFeGl0PSgpPT57bXQodGhpcyxadSwhMCl9LHRoaXMuYWRkSWdub3JlZD0oe2Zyb206bixuYW1lOnIsc3BlY2lmaWM6bz0hMX0pPT57Y29uc3QgaT1EZSh0aGlzLGFuKS5maW5kKHU9PnUubmFtZT09PXIpO2lmKCFpKXRocm93IG5ldyBFcnJvcihgTm8gc3VnZ2VzdGVyIGV4aXN0cyBmb3IgdGhlIG5hbWUgcHJvdmlkZWQ6ICR7cn1gKTtjb25zdCBzPV9lKGkuY2hhcik/aS5jaGFyLmxlbmd0aDoxLGE9bitzLGw9aS5pZ25vcmVkQ2xhc3NOYW1lP3tjbGFzczppLmlnbm9yZWRDbGFzc05hbWV9Ont9LGM9RXQuaW5saW5lKG4sYSx7bm9kZU5hbWU6aS5pZ25vcmVkVGFnLC4uLmx9LHtuYW1lOnIsc3BlY2lmaWM6byxjaGFyOmkuY2hhcn0pO210KHRoaXMsR3QsRGUodGhpcyxHdCkuYWRkKHRoaXMudmlldy5zdGF0ZS5kb2MsW2NdKSl9LHRoaXMucmVtb3ZlSWdub3JlZD0oe2Zyb206bixuYW1lOnJ9KT0+e2NvbnN0IG89RGUodGhpcyxhbikuZmluZChhPT5hLm5hbWU9PT1yKTtpZighbyl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Z2dlc3RlciBleGlzdHMgZm9yIHRoZSBuYW1lIHByb3ZpZGVkOiAke3J9YCk7Y29uc3QgaT1fZShvLmNoYXIpP28uY2hhci5sZW5ndGg6MSxzPURlKHRoaXMsR3QpLmZpbmQobixuK2kpWzBdOyFzfHxzLnNwZWMubmFtZSE9PXJ8fG10KHRoaXMsR3QsRGUodGhpcyxHdCkucmVtb3ZlKFtzXSkpfSx0aGlzLmNsZWFySWdub3JlZD1uPT57aWYoIW4pe210KHRoaXMsR3QsZXQuZW1wdHkpO3JldHVybn1jb25zdCBvPURlKHRoaXMsR3QpLmZpbmQoKS5maWx0ZXIoKHtzcGVjOml9KT0+aS5uYW1lPT09bik7bXQodGhpcyxHdCxEZSh0aGlzLEd0KS5yZW1vdmUobykpfSx0aGlzLmZpbmRNYXRjaEF0UG9zaXRpb249KG4scik9Pntjb25zdCBvPXI/RGUodGhpcyxhbikuZmlsdGVyKGk9PmkubmFtZT09PXIpOkRlKHRoaXMsYW4pO3JldHVybiBGXyh7c3VnZ2VzdGVyczpvLCRwb3M6bixkb2NDaGFuZ2VkOiExLHNlbGVjdGlvbkVtcHR5OiEwfSl9LHRoaXMuc2V0TGFzdENoYW5nZUZyb21BcHBlbmQ9KCk9PnttdCh0aGlzLEdsLCEwKX07Y29uc3QgdD1CXygpO210KHRoaXMsYW4sZS5tYXAodCkpLG10KHRoaXMsYW4saWwoRGUodGhpcyxhbiksKG4scik9PnIucHJpb3JpdHktbi5wcmlvcml0eSkpfXN0YXRpYyBjcmVhdGUoZSl7cmV0dXJuIG5ldyBiTihlKX1nZXQgZGVjb3JhdGlvblNldCgpe3JldHVybiBEZSh0aGlzLEd0KX1nZXQgcmVtb3ZlZCgpe3JldHVybiBEZSh0aGlzLGRzKX1nZXQgbWF0Y2goKXtyZXR1cm4gRGUodGhpcyx1cyk/RGUodGhpcyx1cyk6RGUodGhpcyxxbCkmJkRlKHRoaXMsRm8pLmV4aXQ/RGUodGhpcyxxbCk6dm9pZCAwfWluaXQoZSl7cmV0dXJuIHRoaXMudmlldz1lLHRoaXN9Y3JlYXRlUHJvcHMoZSl7Y29uc3R7bmFtZTp0LGNoYXI6bn09ZS5zdWdnZXN0ZXI7cmV0dXJue3ZpZXc6dGhpcy52aWV3LGFkZElnbm9yZWQ6dGhpcy5hZGRJZ25vcmVkLGNsZWFySWdub3JlZDp0aGlzLmNsZWFySWdub3JlZCxpZ25vcmVOZXh0RXhpdDp0aGlzLmlnbm9yZU5leHRFeGl0LHNldE1hcmtSZW1vdmVkOnRoaXMuc2V0TWFya1JlbW92ZWQsbmFtZTp0LGNoYXI6biwuLi5lfX1zaG91bGRSdW5FeGl0KCl7cmV0dXJuIERlKHRoaXMsWnUpPyhtdCh0aGlzLFp1LCExKSwhMSk6ITB9dXBkYXRlV2l0aE5leHRTZWxlY3Rpb24oZSl7dmFyIHQsbixyO2NvbnN0IG89dGhpcy5maW5kTmV4dFRleHRTZWxlY3Rpb24oZS5zZWxlY3Rpb24pO2lmKG8pZm9yKGNvbnN0IGkgb2YgRGUodGhpcyxhbikpe2NvbnN0IHM9KHQ9RGUodGhpcyxGbykuY2hhbmdlKT09bnVsbD92b2lkIDA6dC5zdWdnZXN0ZXIubmFtZSxhPShuPURlKHRoaXMsRm8pLmV4aXQpPT1udWxsP3ZvaWQgMDpuLnN1Z2dlc3Rlci5uYW1lOyhyPWkuY2hlY2tOZXh0VmFsaWRTZWxlY3Rpb24pPT1udWxsfHxyLmNhbGwoaSxvLiRmcm9tLGUse2NoYW5nZTpzLGV4aXQ6YX0pfX1jaGFuZ2VIYW5kbGVyKGUsdCl7Y29uc3R7Y2hhbmdlOm4sZXhpdDpyfT1EZSh0aGlzLEZvKSxvPXRoaXMubWF0Y2g7aWYoIW4mJiFyfHwhTF8obykpcmV0dXJuO2NvbnN0IGk9dD09PShyPT1udWxsP3ZvaWQgMDpyLnN1Z2dlc3Rlci5hcHBlbmRUcmFuc2FjdGlvbikmJnRoaXMuc2hvdWxkUnVuRXhpdCgpLHM9dD09PShuPT1udWxsP3ZvaWQgMDpuLnN1Z2dlc3Rlci5hcHBlbmRUcmFuc2FjdGlvbik7aWYoISghaSYmIXMpKXtpZihuJiZyJiZ5VSh7Y2hhbmdlOm4sZXhpdDpyfSkpe2NvbnN0IGE9dGhpcy5jcmVhdGVQcm9wcyhyKSxsPXRoaXMuY3JlYXRlUHJvcHMobiksYz1yLnJhbmdlLmZyb208bi5yYW5nZS5mcm9tO2kmJnIuc3VnZ2VzdGVyLm9uQ2hhbmdlKGEsZSkscyYmbi5zdWdnZXN0ZXIub25DaGFuZ2UobCxlKSxpJiZtdCh0aGlzLGRzLCExKTtyZXR1cm59biYmcyYmbi5zdWdnZXN0ZXIub25DaGFuZ2UodGhpcy5jcmVhdGVQcm9wcyhuKSxlKSxyJiZpJiYoci5zdWdnZXN0ZXIub25DaGFuZ2UodGhpcy5jcmVhdGVQcm9wcyhyKSxlKSxtdCh0aGlzLGRzLCExKSxtVShyLmV4aXRSZWFzb24pJiZtdCh0aGlzLEZvLGhlKCkpKX19bWFwSWdub3JlZERlY29yYXRpb25zKGUpe2NvbnN0IHQ9RGUodGhpcyxHdCkubWFwKGUubWFwcGluZyxlLmRvYykscj10LmZpbmQoKS5maWx0ZXIoKHtmcm9tOm8sdG86aSxzcGVjOnN9KT0+e2NvbnN0IGE9X2Uocy5jaGFyKT9zLmNoYXIubGVuZ3RoOjE7cmV0dXJuIGktbyE9PWF9KTttdCh0aGlzLEd0LHQucmVtb3ZlKHIpKX1zaG91bGRJZ25vcmVNYXRjaCh7cmFuZ2U6ZSxzdWdnZXN0ZXI6e25hbWU6dH19KXtyZXR1cm4gRGUodGhpcyxHdCkuZmluZCgpLnNvbWUoKHtzcGVjOm8sZnJvbTppfSk9PmkhPT1lLmZyb20/ITE6by5zcGVjaWZpYz9vLm5hbWU9PT10OiEwKX1yZXNldFN0YXRlKCl7bXQodGhpcyxGbyxoZSgpKSxtdCh0aGlzLHVzLHZvaWQgMCksbXQodGhpcyxkcywhMSksbXQodGhpcyxHbCwhMSl9dXBkYXRlUmVhc29ucyhlKXtjb25zdHskcG9zOnQsc3RhdGU6bn09ZSxyPURlKHRoaXMseWgpLG89RGUodGhpcyxhbiksaT1uLnNlbGVjdGlvbi5lbXB0eSxzPWpfKG4uc2VsZWN0aW9uKT9GXyh7c3VnZ2VzdGVyczpvLCRwb3M6dCxkb2NDaGFuZ2VkOnIsc2VsZWN0aW9uRW1wdHk6aX0pOnZvaWQgMDttdCh0aGlzLHVzLHMmJnRoaXMuc2hvdWxkSWdub3JlTWF0Y2gocyk/dm9pZCAwOnMpLG10KHRoaXMsRm8sa1Uoe25leHQ6RGUodGhpcyx1cykscHJldjpEZSh0aGlzLHFsKSxzdGF0ZTpuLCRwb3M6dH0pKX1hZGRTdWdnZXN0ZXIoZSl7Y29uc3QgdD1EZSh0aGlzLGFuKS5maW5kKHI9PnIubmFtZT09PWUubmFtZSksbj1CXygpO2lmKHQpbXQodGhpcyxhbixEZSh0aGlzLGFuKS5tYXAocj0+cj09PXQ/bihlKTpyKSk7ZWxzZXtjb25zdCByPVsuLi5EZSh0aGlzLGFuKSxuKGUpXTttdCh0aGlzLGFuLGlsKHIsKG8saSk9PmkucHJpb3JpdHktby5wcmlvcml0eSkpfXJldHVybigpPT50aGlzLnJlbW92ZVN1Z2dlc3RlcihlLm5hbWUpfXJlbW92ZVN1Z2dlc3RlcihlKXtjb25zdCB0PV9lKGUpP2U6ZS5uYW1lO210KHRoaXMsYW4sRGUodGhpcyxhbikuZmlsdGVyKG49Pm4ubmFtZSE9PXQpKSx0aGlzLmNsZWFySWdub3JlZCh0KX10b0pTT04oKXtyZXR1cm4gdGhpcy5tYXRjaH1hcHBseShlKXtjb25zdHtleGl0OnQsY2hhbmdlOm59PURlKHRoaXMsRm8pO2lmKERlKHRoaXMsR2wpJiYobXQodGhpcyxHbCwhMSksISh0IT1udWxsJiZ0LnN1Z2dlc3Rlci5hcHBlbmRUcmFuc2FjdGlvbikmJiEobiE9bnVsbCYmbi5zdWdnZXN0ZXIuYXBwZW5kVHJhbnNhY3Rpb24pKSlyZXR1cm4gdGhpcztjb25zdHt0cjpyLHN0YXRlOm99PWUsaT1yLmRvY0NoYW5nZWR8fHIuc2VsZWN0aW9uU2V0O3JldHVybiByLmdldE1ldGEoeE4pfHwhaSYmIURlKHRoaXMsZHMpP3RoaXM6KG10KHRoaXMseWgsci5kb2NDaGFuZ2VkKSx0aGlzLm1hcElnbm9yZWREZWNvcmF0aW9ucyhyKSx0JiZ0aGlzLnJlc2V0U3RhdGUoKSxtdCh0aGlzLHFsLERlKHRoaXMsdXMpKSx0aGlzLnVwZGF0ZVJlYXNvbnMoeyRwb3M6ci5zZWxlY3Rpb24uJGZyb20sc3RhdGU6b30pLHRoaXMpfWNyZWF0ZURlY29yYXRpb25zKGUpe2NvbnN0IHQ9dGhpcy5tYXRjaDtpZighTF8odCkpcmV0dXJuIERlKHRoaXMsR3QpO2NvbnN0e2Rpc2FibGVEZWNvcmF0aW9uczpufT10LnN1Z2dlc3RlcjtpZihwdChuKT9uKGUsdCk6bilyZXR1cm4gRGUodGhpcyxHdCk7Y29uc3R7cmFuZ2U6byxzdWdnZXN0ZXI6aX09dCx7bmFtZTpzLHN1Z2dlc3RUYWc6YSxzdWdnZXN0Q2xhc3NOYW1lOmx9PWkse2Zyb206Yyx0bzp1fT1vO3JldHVybiB0aGlzLnNob3VsZElnbm9yZU1hdGNoKHQpP0RlKHRoaXMsR3QpOkRlKHRoaXMsR3QpLmFkZChlLmRvYyxbRXQuaW5saW5lKGMsdSx7bm9kZU5hbWU6YSxjbGFzczpzP2Ake2x9IHN1Z2dlc3QtJHtzfWA6bH0se25hbWU6c30pXSl9fSxSVT1iTjt5aD1uZXcgV2Vha01hcDtadT1uZXcgV2Vha01hcDthbj1uZXcgV2Vha01hcDt1cz1uZXcgV2Vha01hcDtxbD1uZXcgV2Vha01hcDtGbz1uZXcgV2Vha01hcDtHdD1uZXcgV2Vha01hcDtkcz1uZXcgV2Vha01hcDtHbD1uZXcgV2Vha01hcDtmdW5jdGlvbiBCXygpe2NvbnN0IGU9bmV3IFNldDtyZXR1cm4gdD0+e2lmKGUuaGFzKHQubmFtZSkpdGhyb3cgbmV3IEVycm9yKGBBIHN1Z2dlc3RlciBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoZSBuYW1lICcke3QubmFtZX0nLiBUaGUgbmFtZSBwcm92aWRlZCBtdXN0IGJlIHVuaXF1ZS5gKTtjb25zdCBuPXsuLi5NVSwuLi50fTtyZXR1cm4gZS5hZGQodC5uYW1lKSxufX12YXIgd049bmV3IGN1KCJzdWdnZXN0Iik7ZnVuY3Rpb24gY3coZSl7cmV0dXJuIHdOLmdldFN0YXRlKGUpfWZ1bmN0aW9uIFVfKGUsdCl7cmV0dXJuIGN3KGUpLmFkZFN1Z2dlc3Rlcih0KX1mdW5jdGlvbiBWXyhlKXtlLnNldE1ldGEoeE4sITApfWZ1bmN0aW9uIE5VKGUsdCl7cmV0dXJuIGN3KGUpLnJlbW92ZVN1Z2dlc3Rlcih0KX1mdW5jdGlvbiAkVSguLi5lKXtjb25zdCB0PVJVLmNyZWF0ZShlKTtyZXR1cm4gbmV3IEhpKHtrZXk6d04sdmlldzpuPT4odC5pbml0KG4pLHt1cGRhdGU6cj0+dC5jaGFuZ2VIYW5kbGVyKHIuc3RhdGUudHIsITEpfSksc3RhdGU6e2luaXQ6KCk9PnQsYXBwbHk6KG4scixvLGkpPT50LmFwcGx5KHt0cjpuLHN0YXRlOml9KX0sYXBwZW5kVHJhbnNhY3Rpb246KG4scixvKT0+e2NvbnN0IGk9by50cjtyZXR1cm4gdC51cGRhdGVXaXRoTmV4dFNlbGVjdGlvbihpKSx0LmNoYW5nZUhhbmRsZXIoaSwhMCksaS5kb2NDaGFuZ2VkfHxpLnN0ZXBzLmxlbmd0aD4wfHxpLnNlbGVjdGlvblNldHx8aS5zdG9yZWRNYXJrc1NldD8odC5zZXRMYXN0Q2hhbmdlRnJvbUFwcGVuZCgpLGkpOm51bGx9LHByb3BzOntkZWNvcmF0aW9uczpuPT50LmNyZWF0ZURlY29yYXRpb25zKG4pfX0pfWZ1bmN0aW9uIHV3KGUsdCl7Y29uc3Qgbj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7bGV0IHI9ZS5zZWxlY3Rpb24sbz1lLmRvYyxpPWUuc3RvcmVkTWFya3M7Y29uc3Qgcz1oZSgpO2Zvcihjb25zdFthLGxdb2YgT2JqZWN0LmVudHJpZXModCkpc1thXT17dmFsdWU6bH07cmV0dXJuIE9iamVjdC5jcmVhdGUobix7Li4ucyxzdG9yZWRNYXJrczp7Z2V0KCl7cmV0dXJuIGl9fSxzZWxlY3Rpb246e2dldCgpe3JldHVybiByfX0sZG9jOntnZXQoKXtyZXR1cm4gb319LHRyOntnZXQoKXtyZXR1cm4gcj1lLnNlbGVjdGlvbixvPWUuZG9jLGk9ZS5zdG9yZWRNYXJrcyxlfX19KX1mdW5jdGlvbiBJZChlKXtyZXR1cm4oe3N0YXRlOnQsZGlzcGF0Y2g6bix2aWV3OnIsdHI6b30pPT5lKHV3KG8sdCksbixyKX1mdW5jdGlvbiBIXyhlKXtyZXR1cm4gdD0+e3ZhciBuO3JldHVybiBiZSh0LmRpc3BhdGNoPT09dm9pZCAwfHx0LmRpc3BhdGNoPT09KChuPXQudmlldyk9PW51bGw/dm9pZCAwOm4uZGlzcGF0Y2gpLHtjb2RlOnEuTk9OX0NIQUlOQUJMRV9DT01NQU5EfSksZSh0KX19ZnVuY3Rpb24gQVUoLi4uZSl7cmV0dXJuKHtzdGF0ZTp0LGRpc3BhdGNoOm4sdmlldzpyLHRyOm8sLi4uaX0pPT57Zm9yKGNvbnN0IHMgb2YgZSlpZihzKHtzdGF0ZTp0LGRpc3BhdGNoOm4sdmlldzpyLHRyOm8sLi4uaX0pKXJldHVybiEwO3JldHVybiExfX12YXIgeG89e2dldCBpc0Jyb3dzZXIoKXtyZXR1cm4hISh0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJndpbmRvdy5uYXZpZ2F0b3ImJndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX0sZ2V0IGlzSlNET00oKXtyZXR1cm4geG8uaXNCcm93c2VyJiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcygianNkb20iKX0sZ2V0IGlzTm9kZSgpe3JldHVybiB0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MudmVyc2lvbnMhPW51bGwmJnByb2Nlc3MudmVyc2lvbnMubm9kZSE9bnVsbH0sZ2V0IGlzSW9zKCl7cmV0dXJuIHhvLmlzQnJvd3NlciYmL2lQb2R8aVBob25lfGlQYWQvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKX0sZ2V0IGlzTWFjKCl7cmV0dXJuIHhvLmlzQnJvd3NlciYmL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSl9LGdldCBpc0FwcGxlKCl7cmV0dXJuIHhvLmlzTm9kZT9wcm9jZXNzLnBsYXRmb3JtPT09ImRhcndpbiI6eG8uaXNCcm93c2VyPy9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKTohMX0sZ2V0IGlzRGV2ZWxvcG1lbnQoKXtyZXR1cm4hMX0sZ2V0IGlzVGVzdCgpe3JldHVybiExfSxnZXQgaXNQcm9kdWN0aW9uKCl7cmV0dXJuITB9fTtmdW5jdGlvbiBucyhlLHQpe3ZhciBuO2NvbnN0IHI9c1YoZSk7cmV0dXJuKChuPXI9PW51bGw/dm9pZCAwOnIuZ2V0Q29tcHV0ZWRTdHlsZShlKSk9PW51bGw/dm9pZCAwOm4uZ2V0UHJvcGVydHlWYWx1ZSh0KSk/PyIifWZ1bmN0aW9uIE5uKGUsdCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oZS5zdHlsZSx0KX1mdW5jdGlvbiBXeChlKXtyZXR1cm4gam4oZSkmJk1yKGUubm9kZVR5cGUpJiZfZShlLm5vZGVOYW1lKX1mdW5jdGlvbiBuaShlKXtyZXR1cm4gV3goZSkmJmUubm9kZVR5cGU9PT0xfWZ1bmN0aW9uIGR3KGUpe2NvbnN0e3R5cGVzOnQsbm9kZTpufT1lO2lmKCFuKXJldHVybiExO2NvbnN0IHI9bz0+bz09PW4udHlwZXx8bz09PW4udHlwZS5uYW1lO3JldHVybiBlbih0KT90LnNvbWUocik6cih0KX1mdW5jdGlvbiBEVShlLHQpe2NvbnN0e3RyOm59PXQ7cmV0dXJuIGUuZm9yRWFjaChyPT57ci5zdGVwcy5mb3JFYWNoKG89PntuLnN0ZXAobyl9KX0pLG59ZnVuY3Rpb24gdHYoZSl7Y29uc3R7cHJlZGljYXRlOnQsc2VsZWN0aW9uOm59PWUscj1rTihuKT9uLnNlbGVjdGlvbi4kZnJvbTpodyhuKT9uLiRmcm9tOm47Zm9yKGxldCBvPXIuZGVwdGg7bz4wO28tLSl7Y29uc3QgaT1yLm5vZGUobykscz1vPjA/ci5iZWZvcmUobyk6MCxhPXIuc3RhcnQobyksbD1zK2kubm9kZVNpemU7aWYodChpLHMpKXJldHVybntwb3M6cyxkZXB0aDpvLG5vZGU6aSxzdGFydDphLGVuZDpsfX19ZnVuY3Rpb24gSVUoZSl7Y29uc3R7ZGVwdGg6dH09ZSxuPXQ+MD9lLmJlZm9yZSh0KTowLHI9ZS5ub2RlKHQpLG89ZS5zdGFydCh0KSxpPW4rci5ub2RlU2l6ZTtyZXR1cm57cG9zOm4sc3RhcnQ6byxub2RlOnIsZW5kOmksZGVwdGg6dH19ZnVuY3Rpb24gX2YoZSl7Y29uc3R7dHlwZXM6dCxzZWxlY3Rpb246bn09ZTtyZXR1cm4gdHYoe3ByZWRpY2F0ZTpyPT5kdyh7dHlwZXM6dCxub2RlOnJ9KSxzZWxlY3Rpb246bn0pfWZ1bmN0aW9uIExVKGUpe2NvbnN0e3R5cGVzOnQsc2VsZWN0aW9uOm59PWU7aWYoISghcnYobil8fCFkdyh7dHlwZXM6dCxub2RlOm4ubm9kZX0pKSlyZXR1cm57cG9zOm4uJGZyb20ucG9zLGRlcHRoOm4uJGZyb20uZGVwdGgsc3RhcnQ6bi4kZnJvbS5zdGFydCgpLGVuZDpuLiRmcm9tLnBvcytuLm5vZGUubm9kZVNpemUsbm9kZTpuLm5vZGV9fWZ1bmN0aW9uIGZ3KGUpe3JldHVybiBodyhlKT9lLmVtcHR5OmUuc2VsZWN0aW9uLmVtcHR5fWZ1bmN0aW9uIGpVKGUpe3JldHVybiBlLmRvY0NoYW5nZWR8fGUuc2VsZWN0aW9uU2V0fWZ1bmN0aW9uIHpVKGUpe3JldHVybiEhQ2YoZSl9ZnVuY3Rpb24gQ2YoZSl7Y29uc3R7c3RhdGU6dCx0eXBlOm4sYXR0cnM6cn09ZSx7c2VsZWN0aW9uOm8sZG9jOml9PXQscz1fZShuKT9pLnR5cGUuc2NoZW1hLm5vZGVzW25dOm47YmUocyx7Y29kZTpxLlNDSEVNQSxtZXNzYWdlOmBObyBub2RlIGV4aXN0cyBmb3IgJHtufWB9KTtjb25zdCBhPUxVKHtzZWxlY3Rpb246byx0eXBlczpufSk/P3R2KHtwcmVkaWNhdGU6bD0+bC50eXBlPT09cyxzZWxlY3Rpb246b30pO3JldHVybiFyfHxTbShyKXx8IWF8fGEubm9kZS5oYXNNYXJrdXAocyx7Li4uYS5ub2RlLmF0dHJzLC4uLnJ9KT9hOnZvaWQgMH1mdW5jdGlvbiBMbSguLi5lKXtyZXR1cm4gdD0+e2lmKCFMRShlKSlyZXR1cm4hMTtjb25zdFtuLC4uLnJdPWU7bGV0IG89ITE7Y29uc3QgaT0oLi4ubCk9PigpPT57aWYoIUxFKGwpKXJldHVybiExO289ITA7Y29uc3RbLC4uLmNdPWw7cmV0dXJuIExtKC4uLmwpKHsuLi50LG5leHQ6aSguLi5jKX0pfSxzPWkoLi4uciksYT1uKHsuLi50LG5leHQ6c30pO3JldHVybiBvfHxhP2E6cygpfX1mdW5jdGlvbiBGVShlLHQpe2NvbnN0IG49bmV3IE1hcCxyPWhlKCk7Zm9yKGNvbnN0IG8gb2YgZSlmb3IoY29uc3RbaSxzXW9mIEp0KG8pKXtjb25zdCBsPVsuLi5uLmdldChpKT8/W10sc10sYz1MbSguLi5sKTtuLnNldChpLGwpLHJbaV09dChjKX1yZXR1cm4gcn1mdW5jdGlvbiBCVShlKXtyZXR1cm4gRlUoZSx0PT4obixyLG8pPT50KHtzdGF0ZTpuLGRpc3BhdGNoOnIsdmlldzpvLHRyOm4udHIsbmV4dDooKT0+ITF9KSl9ZnVuY3Rpb24gcHcoZSx0KXtjb25zdCBuPWUuYXR0cnM/P3t9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5ldmVyeSgoW3Isb10pPT5uW3JdPT09byl9ZnVuY3Rpb24gVVUoZSl7cmV0dXJuIF9OKGUsW0VpLFV0LGZuLEVvXSl9ZnVuY3Rpb24gdXUoZSl7cmV0dXJuIGpuKGUpfWZ1bmN0aW9uIGR1KGUsdCl7cmV0dXJuIGVuKHQpPyRvKHQsZVtJaV0pOnQ9PT1lW0lpXX1mdW5jdGlvbiBWVShlKXtyZXR1cm4gam4oZSkmJmUgaW5zdGFuY2VvZiBNeH1mdW5jdGlvbiBIVShlLHQpe3JldHVybiBfZShlKT9QdCh0Lm5vZGVzLGUpOmV9ZnVuY3Rpb24gU04oZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgaXB9ZnVuY3Rpb24gV1UoZSx0KXtyZXR1cm4gX2UoZSk/UHQodC5tYXJrcyxlKTplfWZ1bmN0aW9uIG52KGUpe3JldHVybiBqbihlKSYmZSBpbnN0YW5jZW9mIEJzfWZ1bmN0aW9uIEtVKGUpe3JldHVybiBqbihlKSYmZSBpbnN0YW5jZW9mIFV9ZnVuY3Rpb24gcVUoZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgWWV9ZnVuY3Rpb24ga04oZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgSWF9ZnVuY3Rpb24gd2woZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgVGV9ZnVuY3Rpb24gR1UoZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgcW59ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgQmV9ZnVuY3Rpb24gWVUoZSl7cmV0dXJuIGpuKGUpJiZlIGluc3RhbmNlb2YgSGN9ZnVuY3Rpb24gV18oZSl7Y29uc3R7dHJTdGF0ZTp0LGZyb206bix0bzpyLHR5cGU6byxhdHRyczppPXt9fT1lLHtkb2M6c309dCxhPVdVKG8scy50eXBlLnNjaGVtYSk7aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPT09MClyZXR1cm4gcy5yYW5nZUhhc01hcmsobixyLGEpO2xldCBsPSExO3JldHVybiByPm4mJnMubm9kZXNCZXR3ZWVuKG4scixjPT5sPyExOihsPShjLm1hcmtzPz9bXSkuc29tZShkPT5kLnR5cGUhPT1hPyExOnB3KGQsaSkpLCFsKSksbH1mdW5jdGlvbiBydihlKXtyZXR1cm4gam4oZSkmJmUgaW5zdGFuY2VvZiB3ZX1mdW5jdGlvbiBqbShlKXtjb25zdHt0clN0YXRlOnQsdHlwZTpuLGF0dHJzOnI9e30sZnJvbTpvLHRvOml9PWUse3NlbGVjdGlvbjpzLGRvYzphLHN0b3JlZE1hcmtzOmx9PXQsYz1fZShuKT9hLnR5cGUuc2NoZW1hLm1hcmtzW25dOm47aWYoYmUoYyx7Y29kZTpxLlNDSEVNQSxtZXNzYWdlOmBNYXJrIHR5cGU6ICR7bn0gZG9lcyBub3QgZXhpc3Qgb24gdGhlIGN1cnJlbnQgc2NoZW1hLmB9KSxvJiZpKXRyeXtyZXR1cm4gTWF0aC5tYXgobyxpKTxhLm5vZGVTaXplJiZXXyh7Li4uZSxmcm9tOm8sdG86aX0pfWNhdGNoe3JldHVybiExfXJldHVybiBzLmVtcHR5PyhsPz9zLiRmcm9tLm1hcmtzKCkpLnNvbWUoZD0+ZC50eXBlIT09bj8hMTpwdyhkLHI/P3t9KSk6V18oey4uLmUsZnJvbTpzLmZyb20sdG86cy50b30pfWZ1bmN0aW9uIG13KGUsdD17fSl7Y29uc3Qgbj1YVShlLnR5cGUuc2NoZW1hKTtpZighbilyZXR1cm4hMTtjb25zdHtpZ25vcmVBdHRyaWJ1dGVzOnIsaWdub3JlRG9jQXR0cmlidXRlczpvfT10O3JldHVybiByP0VOKG4sZSk6bz9uLmNvbnRlbnQuZXEoZS5jb250ZW50KTpuLmVxKGUpfWZ1bmN0aW9uIEVOKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7Y29uc3Qgbj1lLnR5cGU9PT10LnR5cGUmJlllLnNhbWVTZXQoZS5tYXJrcyx0Lm1hcmtzKTtmdW5jdGlvbiByKCl7aWYoZS5jb250ZW50PT09dC5jb250ZW50KXJldHVybiEwO2lmKGUuY29udGVudC5zaXplIT09dC5jb250ZW50LnNpemUpcmV0dXJuITE7Y29uc3Qgbz1bXSxpPVtdO2UuY29udGVudC5mb3JFYWNoKHM9Pm8ucHVzaChzKSksdC5jb250ZW50LmZvckVhY2gocz0+aS5wdXNoKHMpKTtmb3IoY29uc3RbcyxhXW9mIG8uZW50cmllcygpKXtjb25zdCBsPWlbc107aWYoIWx8fCFFTihhLGwpKXJldHVybiExfXJldHVybiEwfXJldHVybiBuJiZyKCl9ZnVuY3Rpb24gWFUoZSl7dmFyIHQ7cmV0dXJuKCh0PWUubm9kZXMuZG9jKT09bnVsbD92b2lkIDA6dC5jcmVhdGVBbmRGaWxsKCkpPz92b2lkIDB9ZnVuY3Rpb24gb3YoZSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LnZhbHVlcyhlLm5vZGVzKSlpZih0Lm5hbWUhPT0iZG9jIiYmKHQuaXNCbG9ja3x8dC5pc1RleHRibG9jaykpcmV0dXJuIHQ7YmUoITEse2NvZGU6cS5TQ0hFTUEsbWVzc2FnZToiTm8gZGVmYXVsdCBibG9jayBub2RlIGZvdW5kIGZvciB0aGUgcHJvdmlkZWQgc2NoZW1hLiJ9KX1mdW5jdGlvbiBaVShlKXtyZXR1cm4gZS50eXBlPT09b3YoZS50eXBlLnNjaGVtYSl9ZnVuY3Rpb24gZ3coZSl7cmV0dXJuISFlJiZlLnR5cGUuaXNCbG9jayYmIWUudGV4dENvbnRlbnQmJiFlLmNoaWxkQ291bnR9ZnVuY3Rpb24gTGkoZSx0LG4pe2NvbnN0IHI9ZS5wYXJlbnQuY2hpbGRBZnRlcihlLnBhcmVudE9mZnNldCk7aWYoIXIubm9kZSlyZXR1cm47Y29uc3Qgbz1fZSh0KT90OnQubmFtZSxpPXIubm9kZS5tYXJrcy5maW5kKCh7dHlwZTpkfSk9PmQubmFtZT09PW8pO2xldCBzPWUuaW5kZXgoKSxhPWUuc3RhcnQoKStyLm9mZnNldCxsPXMrMSxjPWErci5ub2RlLm5vZGVTaXplO2lmKCFpKXJldHVybiBuJiZjPG4ucG9zP0xpKGUuZG9jLnJlc29sdmUoYysxKSx0LG4pOnZvaWQgMDtmb3IoO3M+MCYmaS5pc0luU2V0KGUucGFyZW50LmNoaWxkKHMtMSkubWFya3MpOylzLT0xLGEtPWUucGFyZW50LmNoaWxkKHMpLm5vZGVTaXplO2Zvcig7bDxlLnBhcmVudC5jaGlsZENvdW50JiZpLmlzSW5TZXQoZS5wYXJlbnQuY2hpbGQobCkubWFya3MpOyljKz1lLnBhcmVudC5jaGlsZChsKS5ub2RlU2l6ZSxsKz0xO2NvbnN0IHU9ZS5kb2MudGV4dEJldHdlZW4oYSxjLEJNLGAKCmApO3JldHVybntmcm9tOmEsdG86Yyx0ZXh0OnUsbWFyazppfX1mdW5jdGlvbiBfTihlLHQpe3JldHVybiB0Lmxlbmd0aD09PTB8fHQuc29tZShuPT5lIGluc3RhbmNlb2Ygbil9ZnVuY3Rpb24gSlUoZSl7cmV0dXJuIFpNKGUsKHtmcm9tOm4sdG86cixwcmV2RnJvbTpvLHByZXZUbzppfSk9PmAke259XyR7cn1fJHtvfV8ke2l9YCkuZmlsdGVyKChuLHIsbyk9PiFvLnNvbWUoKGkscyk9PnI9PT1zPyExOm4ucHJldkZyb20+PWkucHJldkZyb20mJm4ucHJldlRvPD1pLnByZXZUbyYmbi5mcm9tPj1pLmZyb20mJm4udG88PWkudG8pKX1mdW5jdGlvbiBRVShlLHQ9W10pe2NvbnN0IG49W10se3N0ZXBzOnIsbWFwcGluZzpvfT1lLGk9by5pbnZlcnQoKTtyLmZvckVhY2goKGEsbCk9PntpZighX04oYSx0KSlyZXR1cm47Y29uc3QgYz1bXSx1PWEuZ2V0TWFwKCksZD1vLnNsaWNlKGwpO2lmKHUucmFuZ2VzLmxlbmd0aD09PTAmJlVVKGEpKXtjb25zdHtmcm9tOmYsdG86cH09YTtjLnB1c2goe2Zyb206Zix0bzpwfSl9ZWxzZSB1LmZvckVhY2goKGYscCk9PntjLnB1c2goe2Zyb206Zix0bzpwfSl9KTtjLmZvckVhY2goZj0+e2NvbnN0IHA9ZC5tYXAoZi5mcm9tLC0xKSxtPWQubWFwKGYudG8pO24ucHVzaCh7ZnJvbTpwLHRvOm0scHJldkZyb206aS5tYXAocCwtMSkscHJldlRvOmkubWFwKG0pfSl9KX0pO2NvbnN0IHM9aWwobiwoYSxsKT0+YS5mcm9tLWwuZnJvbSk7cmV0dXJuIEpVKHMpfWZ1bmN0aW9uIGVWKGUpe3ZhciB0O3JldHVybigodD1lLmNvbnRlbnQuZmlyc3RDaGlsZCk9PW51bGw/dm9pZCAwOnQudGV4dENvbnRlbnQpPz8iIn1mdW5jdGlvbiB0VihlLHQpe2lmKCF3bChlLnNlbGVjdGlvbikpcmV0dXJuO2xldHtmcm9tOm4sdG86cn09ZS5zZWxlY3Rpb247Y29uc3Qgbz0ocyxhKT0+ZVYoVGUuYmV0d2VlbihlLmRvYy5yZXNvbHZlKHMpLGUuZG9jLnJlc29sdmUoYSkpLmNvbnRlbnQoKSk7Zm9yKGxldCBzPW8obi0xLG4pO3MmJiF0LnRlc3Qocyk7bi0tLHM9byhuLTEsbikpO2ZvcihsZXQgcz1vKHIscisxKTtzJiYhdC50ZXN0KHMpO3IrKyxzPW8ocixyKzEpKTtpZihuPT09cilyZXR1cm47Y29uc3QgaT1lLmRvYy50ZXh0QmV0d2VlbihuLHIsQk0sYAoKYCk7cmV0dXJue2Zyb206bix0bzpyLHRleHQ6aX19ZnVuY3Rpb24gQ04oZSl7cmV0dXJuIHRWKGUsL1xXLyl9ZnVuY3Rpb24gTGQoZSx0PTApe2NvbnN0IG49ZW4oZSk/ZVt0XTplO3JldHVybiBxTShfZShuKSxgTm8gbWF0Y2ggc3RyaW5nIGZvdW5kIGZvciBtYXRjaCAke2V9YCksbj8/IiJ9ZnVuY3Rpb24gblYoZSl7cmV0dXJuIHdsKGUpP2UuJGN1cnNvcjp2b2lkIDB9ZnVuY3Rpb24gclYoZSx0KXtyZXR1cm4gbnYoZSk/dD9lLnR5cGU9PT10Lm5vZGVzLmRvYzplLnR5cGUubmFtZT09PSJkb2MiOiExfWZ1bmN0aW9uIG9WKGUpe3JldHVybiBqbihlKSYmTXIoZS5hbmNob3IpJiZNcihlLmhlYWQpfWZ1bmN0aW9uIEpyKGUsdCl7Y29uc3Qgbj10Lm5vZGVTaXplLTIscj0wO2xldCBvO2NvbnN0IGk9bD0+Snooe21pbjpyLG1heDpuLHZhbHVlOmx9KTtpZihodyhlKSlyZXR1cm4gZTtpZihlPT09ImFsbCIpcmV0dXJuIG5ldyBxbih0KTtpZihlPT09InN0YXJ0Ij9vPXI6ZT09PSJlbmQiP289bjpZVShlKT9vPWUucG9zOm89ZSxNcihvKSlyZXR1cm4gbz1pKG8pLFRlLm5lYXIodC5yZXNvbHZlKG8pKTtpZihvVihvKSl7Y29uc3QgbD1pKG8uYW5jaG9yKSxjPWkoby5oZWFkKTtyZXR1cm4gVGUuYmV0d2Vlbih0LnJlc29sdmUobCksdC5yZXNvbHZlKGMpKX1jb25zdCBzPWkoby5mcm9tKSxhPWkoby50byk7cmV0dXJuIFRlLmJldHdlZW4odC5yZXNvbHZlKHMpLHQucmVzb2x2ZShhKSl9dmFyIGlWPTM7ZnVuY3Rpb24gT04oZSl7Y29uc3R7Y29udGVudDp0LHNjaGVtYTpuLGRvY3VtZW50OnIsc3RyaW5nSGFuZGxlcjpvLG9uRXJyb3I6aSxhdHRlbXB0czpzPTB9PWUsYT1pJiZzPD1pVnx8cz09PTA7aWYoYmUoYSx7Y29kZTpxLklOVkFMSURfQ09OVEVOVCxtZXNzYWdlOiJUaGUgaW52YWxpZCBjb250ZW50IGhhcyBiZWVuIGNhbGxlZCByZWN1cnNpdmVseSBtb3JlIHRoYW4gJHtNQVhfQVRURU1QVFN9IHRpbWVzLiBUaGUgY29udGVudCBpcyBpbnZhbGlkIGFuZCB0aGUgZXJyb3IgaGFuZGxlciBoYXMgbm90IGJlZW4gYWJsZSB0byByZWNvdmVyIHByb3Blcmx5LiJ9KSxfZSh0KSlyZXR1cm4gYmUobyx7Y29kZTpxLklOVkFMSURfQ09OVEVOVCxtZXNzYWdlOmBUaGUgc3RyaW5nICcke3R9JyB3YXMgYWRkZWQgdG8gdGhlIGVkaXRvciwgYnV0IG5vIFxgc3RyaW5nSGFuZGxlclxgIHdhcyBhZGRlZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzdHJpbmcgaGFuZGxlciB3aGljaCB0cmFuc2Zvcm1zIHlvdXIgY29udGVudCB0byBhIFxgUHJvc2VtaXJyb3JOb2RlXGAgdG8gcHJldmVudCB0aGlzIGVycm9yLmB9KSxvKHtkb2N1bWVudDpyLGNvbnRlbnQ6dCxzY2hlbWE6bn0pO2lmKGtOKHQpKXJldHVybiB0LmRvYztpZihudih0KSlyZXR1cm4gdDt0cnl7cmV0dXJuIG4ubm9kZUZyb21KU09OKHQpfWNhdGNoKGwpe2NvbnN0IGM9ZlYoe3NjaGVtYTpuLGVycm9yOmwsanNvbjp0fSksdT1pPT1udWxsP3ZvaWQgMDppKGMpO3JldHVybiBiZSh1LHtjb2RlOnEuSU5WQUxJRF9DT05URU5ULG1lc3NhZ2U6YEFuIGVycm9yIG9jY3VycmVkIHdoZW4gcHJvY2Vzc2luZyB0aGUgY29udGVudC4gUGxlYXNlIHByb3ZpZGUgYW4gXGBvbkVycm9yXGAgaGFuZGxlciB0byBwcm9jZXNzIHRoZSBpbnZhbGlkIGNvbnRlbnQ6ICR7SlNPTi5zdHJpbmdpZnkoYy5pbnZhbGlkQ29udGVudCxudWxsLDIpfWB9KSxPTih7Li4uZSxjb250ZW50OnUsYXR0ZW1wdHM6cysxfSl9fWZ1bmN0aW9uIGl2KCl7Y29uc3QgZT1SUigpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmV0cmlldmUgdGhlIGRvY3VtZW50IGZyb20gdGhlIGdsb2JhbCBzY29wZS4gCkl0IHNlZW1zIHRoYXQgeW91IGFyZSBydW5uaW5nIFJlbWlycm9yIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIFJlbWlycm9yIG5lZWQgYnJvd3NlciBBUElzIHRvIHdvcmsuIApJZiB5b3UgYXJlIHVzaW5nIEplc3QgKG9yIG90aGVyIHRlc3RpbmcgZnJhbWV3b3JrcyksIG1ha2Ugc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIEpTRE9NIGVudmlyb25tZW50IChodHRwczovL2plc3Rqcy5pby9kb2NzLzI5LjAvY29uZmlndXJhdGlvbiN0ZXN0ZW52aXJvbm1lbnQtc3RyaW5nKS4gCklmIHlvdSBhcmUgdXNpbmcgTmV4dC5qcyAob3Igb3RoZXIgc2VydmVyLXNpZGUgcmVuZGVyaW5nIGZyYW1ld29ya3MpLCBwbGVhc2UgdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggXGBzc3I6IGZhbHNlXGAgdG8gbG9hZCB0aGUgZWRpdG9yIGNvbXBvbmVudCB3aXRob3V0IHJlbmRlcmluZyBpdCBvbiB0aGUgc2VydmVyIChodHRwczovL25leHRqcy5vcmcvZG9jcy9hZHZhbmNlZC1mZWF0dXJlcy9keW5hbWljLWltcG9ydCN3aXRoLW5vLXNzcikuIApJZiB5b3UgYXJlIHVzaW5nIE5vZGUuanMsIHlvdSBjYW4gaW5zdGFsbCBKU0RPTSBhbmQgUmVtaXJyb3Igd2lsbCB0cnkgdG8gdXNlIGl0IGF1dG9tYXRpY2FsbHksIG9yIHlvdSBjYW4gY3JlYXRlIGEgZmFrZSBkb2N1bWVudCBhbmQgcGFzcyBpdCB0byBSZW1pcnJvcmApfWZ1bmN0aW9uIFROKGUpe3ZhciB0O3JldHVybihlPT1udWxsP3ZvaWQgMDplLmRlZmF1bHRWaWV3KT8/KHR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDApPz8oKHQ9UlIoKSk9PW51bGw/dm9pZCAwOnQuZGVmYXVsdFZpZXcpfWZ1bmN0aW9uIHNWKGUpe3JldHVybiBUTihlPT1udWxsP3ZvaWQgMDplLm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIGFWKGUpe2NvbnN0IHQ9VE4oZSk/P2l2KCkuZGVmYXVsdFZpZXc7aWYodClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXRyaWV2ZSB0aGUgd2luZG93IGZyb20gdGhlIGdsb2JhbCBzY29wZSIpfWZ1bmN0aW9uIGxWKGUsdD1pdigpKXtjb25zdCBuPXJWKGUsZS50eXBlLnNjaGVtYSk/ZS5jb250ZW50OlUuZnJvbShlKTtyZXR1cm4ga28uZnJvbVNjaGVtYShlLnR5cGUuc2NoZW1hKS5zZXJpYWxpemVGcmFnbWVudChuLHtkb2N1bWVudDp0fSl9ZnVuY3Rpb24gY1YoZSx0KXtyZXR1cm4gbmV3KGFWKHQpKS5ET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYDxib2R5PiR7ZX08L2JvZHk+YCwidGV4dC9odG1sIikuYm9keX1mdW5jdGlvbiB1VihlLHQ9aXYoKSl7Y29uc3Qgbj10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBuLmFwcGVuZChsVihlLHQpKSxuLmlubmVySFRNTH1mdW5jdGlvbiBLeChlKXtjb25zdHtjb250ZW50OnQsc2NoZW1hOm4sZG9jdW1lbnQ6cixmcmFnbWVudDpvPSExLC4uLml9PWUscz1jVih0LHIpLGE9V2MuZnJvbVNjaGVtYShuKTtyZXR1cm4gbz9hLnBhcnNlU2xpY2Uocyx7Li4uS18sLi4uaX0pLmNvbnRlbnQ6YS5wYXJzZShzLHsuLi5LXywuLi5pfSl9dmFyIEtfPXtwcmVzZXJ2ZVdoaXRlc3BhY2U6ITF9O2Z1bmN0aW9uIFBOKGUsdCl7Y29uc3Qgbj15Zih0LmRlZmF1bHRzKCkpO3JldHVybiBLMSh7Li4uZX0sbil9dmFyIGRWPXtyZW1vdmUoZSx0KXtsZXQgbj1lO2Zvcihjb25zdCByIG9mIHQpci5pbnZhbGlkUGFyZW50Tm9kZXx8KG49dDkoci5wYXRoLG4pKTtyZXR1cm4gbn19O2Z1bmN0aW9uIGZWKHtqc29uOmUsc2NoZW1hOnQsLi4ubn0pe2NvbnN0IHI9bmV3IFNldCh5Zih0Lm1hcmtzKSksbz1uZXcgU2V0KHlmKHQubm9kZXMpKSxpPU1OKHtqc29uOmUscGF0aDpbXSx2YWxpZE5vZGVzOm8sdmFsaWRNYXJrczpyfSk7cmV0dXJue2pzb246ZSxpbnZhbGlkQ29udGVudDppLHRyYW5zZm9ybWVyczpkViwuLi5ufX1mdW5jdGlvbiBNTihlKXtjb25zdHtqc29uOnQsdmFsaWRNYXJrczpuLHZhbGlkTm9kZXM6cixwYXRoOm89W119PWUsaT17dmFsaWRNYXJrczpuLHZhbGlkTm9kZXM6cn0scz1bXSx7dHlwZTphLG1hcmtzOmwsY29udGVudDpjfT10O2xldHtpbnZhbGlkUGFyZW50TWFyazp1PSExLGludmFsaWRQYXJlbnROb2RlOmQ9ITF9PWU7aWYobCl7Y29uc3QgZj1bXTtmb3IoY29uc3RbcCxtXW9mIGwuZW50cmllcygpKXtjb25zdCBnPV9lKG0pP206bS50eXBlO24uaGFzKGcpfHwoZi51bnNoaWZ0KHtuYW1lOmcscGF0aDpbLi4ubywibWFya3MiLGAke3B9YF0sdHlwZToibWFyayIsaW52YWxpZFBhcmVudE1hcms6dSxpbnZhbGlkUGFyZW50Tm9kZTpkfSksdT0hMCl9cy5wdXNoKC4uLmYpfWlmKHIuaGFzKGEpfHwocy5wdXNoKHtuYW1lOmEsdHlwZToibm9kZSIscGF0aDpvLGludmFsaWRQYXJlbnRNYXJrOnUsaW52YWxpZFBhcmVudE5vZGU6ZH0pLGQ9ITApLGMpe2NvbnN0IGY9W107Zm9yKGNvbnN0W3AsbV1vZiBjLmVudHJpZXMoKSlmLnVuc2hpZnQoLi4uTU4oey4uLmksanNvbjptLHBhdGg6Wy4uLm8sImNvbnRlbnQiLGAke3B9YF0saW52YWxpZFBhcmVudE1hcms6dSxpbnZhbGlkUGFyZW50Tm9kZTpkfSkpO3MudW5zaGlmdCguLi5mKX1yZXR1cm4gc31mdW5jdGlvbiBwVihlKXtyZXR1cm4hISh3bChlKSYmZS4kY3Vyc29yJiZlLiRjdXJzb3IucGFyZW50T2Zmc2V0Pj1lLiRjdXJzb3IucGFyZW50LmNvbnRlbnQuc2l6ZSl9ZnVuY3Rpb24gcXgoZSl7cmV0dXJuISEod2woZSkmJmUuJGN1cnNvciYmZS4kY3Vyc29yLnBhcmVudE9mZnNldDw9MCl9ZnVuY3Rpb24gcV8oZSl7Y29uc3QgdD1CZS5hdFN0YXJ0KGUuJGFuY2hvci5kb2MpO3JldHVybiEhKHF4KGUpJiZ0LmFuY2hvcj09PWUuYW5jaG9yKX1mdW5jdGlvbiBoVihlKXtyZXR1cm4oe2Rpc3BhdGNoOnQsdHI6bn0pPT57Y29uc3R7dHlwZTpyLGF0dHJzOm89aGUoKSxhcHBlbmRUZXh0OmkscmFuZ2U6c309ZSxhPXM/VGUuYmV0d2VlbihuLmRvYy5yZXNvbHZlKHMuZnJvbSksbi5kb2MucmVzb2x2ZShzLnRvKSk6bi5zZWxlY3Rpb24seyRmcm9tOmwsZnJvbTpjLHRvOnV9PWE7bGV0IGQ9bC5kZXB0aD09PTA/bi5kb2MudHlwZS5hbGxvd3NNYXJrVHlwZShyKTohMTtyZXR1cm4gbi5kb2Mubm9kZXNCZXR3ZWVuKGMsdSxmPT57aWYoZClyZXR1cm4hMTtpZihmLmlubGluZUNvbnRlbnQmJmYudHlwZS5hbGxvd3NNYXJrVHlwZShyKSl7ZD0hMDtyZXR1cm59fSksZD8odD09bnVsbHx8dChuLmFkZE1hcmsoYyx1LHIuY3JlYXRlKG8pKSYmaT9uLmluc2VydFRleHQoaSk6biksITApOiExfX1mdW5jdGlvbiBtVih7dHI6ZSxkaXNwYXRjaDp0fSl7Y29uc3R7JGZyb206biwkdG86cn09ZS5zZWxlY3Rpb24sbz1uLmJsb2NrUmFuZ2UociksaT1vJiZsdShvKTtyZXR1cm4hTXIoaSl8fCFvPyExOih0PT1udWxsfHx0KGUubGlmdChvLGkpLnNjcm9sbEludG9WaWV3KCkpLCEwKX1mdW5jdGlvbiBSTihlLHQ9e30sbil7cmV0dXJuIGZ1bmN0aW9uKHIpe2NvbnN0e3RyOm8sZGlzcGF0Y2g6aSxzdGF0ZTpzfT1yLGE9X2UoZSk/UHQocy5zY2hlbWEubm9kZXMsZSk6ZSx7ZnJvbTpsLHRvOmN9PUpyKG4/P28uc2VsZWN0aW9uLG8uZG9jKSx1PW8uZG9jLnJlc29sdmUobCksZD1vLmRvYy5yZXNvbHZlKGMpLGY9dS5ibG9ja1JhbmdlKGQpLHA9ZiYmWTEoZixhLHQpO3JldHVybiFwfHwhZj8hMTooaT09bnVsbHx8aShvLndyYXAoZixwKS5zY3JvbGxJbnRvVmlldygpKSwhMCl9fWZ1bmN0aW9uIGdWKGUsdD17fSxuKXtyZXR1cm4gcj0+e2NvbnN0e3RyOm8sc3RhdGU6aX09cixzPV9lKGUpP1B0KGkuc2NoZW1hLm5vZGVzLGUpOmU7cmV0dXJuIENmKHtzdGF0ZTpvLHR5cGU6cyxhdHRyczp0fSk/bVYocik6Uk4oZSx0LG4pKHIpfX1mdW5jdGlvbiB6bShlLHQsbixyPSEwKXtyZXR1cm4gZnVuY3Rpb24obyl7Y29uc3R7dHI6aSxkaXNwYXRjaDpzLHN0YXRlOmF9PW8sbD1fZShlKT9QdChhLnNjaGVtYS5ub2RlcyxlKTplLHtmcm9tOmMsdG86dX09SnIobj8/aS5zZWxlY3Rpb24saS5kb2MpO2xldCBkPSExLGY7cmV0dXJuIGkuZG9jLm5vZGVzQmV0d2VlbihjLHUsKHAsbSk9PntpZihkKXJldHVybiExO2lmKCFwLmlzVGV4dGJsb2NrfHxwLmhhc01hcmt1cChsLHQpKXJldHVybjtpZihwLnR5cGU9PT1sKXtkPSEwLGY9cC5hdHRycztyZXR1cm59Y29uc3QgZz1pLmRvYy5yZXNvbHZlKG0pLHk9Zy5pbmRleCgpO2Q9Zy5wYXJlbnQuY2FuUmVwbGFjZVdpdGgoeSx5KzEsbCksZCYmKGY9Zy5wYXJlbnQuYXR0cnMpfSksZD8ocz09bnVsbHx8cyhpLnNldEJsb2NrVHlwZShjLHUsbCx7Li4ucj9mOnt9LC4uLnR9KS5zY3JvbGxJbnRvVmlldygpKSwhMCk6ITF9fWZ1bmN0aW9uIE5OKGUpe3JldHVybiB0PT57Y29uc3R7dHI6bixzdGF0ZTpyfT10LHt0eXBlOm8sYXR0cnM6aSxwcmVzZXJ2ZUF0dHJzOnM9ITB9PWUsYT1DZih7c3RhdGU6bix0eXBlOm8sYXR0cnM6aX0pLGw9ZS50b2dnbGVUeXBlPz9vdihyLnNjaGVtYSk7aWYoYSlyZXR1cm4gem0obCx7Li4ucz9hLm5vZGUuYXR0cnM6e30sLi4uaX0pKHQpO2NvbnN0IGM9Q2Yoe3N0YXRlOm4sdHlwZTpsLGF0dHJzOml9KTtyZXR1cm4gem0obyx7Li4ucz9jPT1udWxsP3ZvaWQgMDpjLm5vZGUuYXR0cnM6e30sLi4uaX0pKHQpfX1mdW5jdGlvbiB2VihlPTApe2NvbnN0IHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb20oZXxpdW0pXC8oXGQrKVwuLyk7cmV0dXJuIHQ/TnVtYmVyLnBhcnNlSW50KFB0KHQsMiksMTApPj1lOiExfWZ1bmN0aW9uIHlWKGUsdCl7bGV0e2hlYWQ6bixlbXB0eTpyLGFuY2hvcjpvfT1lO2Zvcihjb25zdCBpIG9mIHQuc3RlcHMpbj1pLmdldE1hcCgpLm1hcChuKTtyP3Quc2V0U2VsZWN0aW9uKFRlLm5lYXIodC5kb2MucmVzb2x2ZShuKSkpOnQuc2V0U2VsZWN0aW9uKFRlLmJldHdlZW4odC5kb2MucmVzb2x2ZShvKSx0LmRvYy5yZXNvbHZlKG4pKSl9ZnVuY3Rpb24geFYoZSl7Y29uc3R7YXR0cnM6dD17fSxhcHBlbmRUZXh0Om49IiIsY29udGVudDpyPSIiLGtlZXBTZWxlY3Rpb246bz0hMSxyYW5nZTppfT1lO3JldHVybih7c3RhdGU6cyx0cjphLGRpc3BhdGNoOmx9KT0+e3ZhciBjO2NvbnN0IHU9cy5zY2hlbWEsZD1KcihlLnNlbGVjdGlvbj8/aT8/YS5zZWxlY3Rpb24sYS5kb2MpLGY9ZC4kZnJvbS5pbmRleCgpLHtmcm9tOnAsdG86bSwkZnJvbTpnfT1kLHk9X2UoZS50eXBlKT91Lm5vZGVzW2UudHlwZV0/P3UubWFya3NbZS50eXBlXTplLnR5cGU7aWYoYmUoX2UoZS50eXBlKT95OiEwLHtjb2RlOnEuU0NIRU1BLG1lc3NhZ2U6YFNjaGVtYSBjb250YWlucyBubyBtYXJrcyBvciBub2RlcyB3aXRoIG5hbWUgJHt5fWB9KSxWVSh5KSl7aWYoIWcucGFyZW50LmNhblJlcGxhY2VXaXRoKGYsZix5KSlyZXR1cm4hMTthLnJlcGxhY2VXaXRoKHAsbSx5LmNyZWF0ZSh0LHI/dS50ZXh0KHIpOnZvaWQgMCkpfWVsc2UgYmUocix7bWVzc2FnZToiYHJlcGxhY2VUZXh0YCBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgY29udGVudCB3aGVuIHVzaW5nIGEgbWFyayB0eXBlIn0pLGEucmVwbGFjZVdpdGgocCxtLHUudGV4dChyLFNOKHkpP1t5LmNyZWF0ZSh0KV06dm9pZCAwKSk7cmV0dXJuIG4mJmEuaW5zZXJ0VGV4dChuKSxvJiZ5VihzLnNlbGVjdGlvbixhKSxsJiYodlYoNjApJiYoKGM9ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkpPT1udWxsfHxjLmVtcHR5KCkpLGwoYSkpLCEwfX1mdW5jdGlvbiAkTihlLHQpe2NvbnN0IG49ZS5wYXJlbnQuY2hpbGRBZnRlcihlLnBhcmVudE9mZnNldCk7aWYoIW4ubm9kZSlyZXR1cm47Y29uc3R7bWFya3M6cixub2RlU2l6ZTpvfT1uLm5vZGU7aWYoclswXSlyZXR1cm4gclswXS50eXBlO2NvbnN0IHM9ZS5zdGFydCgpK24ub2Zmc2V0K287cmV0dXJuICROKGUuZG9jLnJlc29sdmUocysxKSl9ZnVuY3Rpb24gQU4oZSl7cmV0dXJuKHtkaXNwYXRjaDp0LHRyOm4sc3RhdGU6cn0pPT57Y29uc3R7dHlwZTpvLGV4cGFuZDppPSEwLHJhbmdlOnN9PWUsYT1KcihlLnNlbGVjdGlvbj8/cz8/bi5zZWxlY3Rpb24sbi5kb2MpO2xldHtmcm9tOmwsdG86YywkZnJvbTp1LCR0bzpkfT1hO2NvbnN0IGY9X2Uobyk/ci5zY2hlbWEubWFya3Nbb106bztmIT09bnVsbCYmYmUoZix7Y29kZTpxLlNDSEVNQSxtZXNzYWdlOmBNYXJrIHR5cGU6ICR7b30gZG9lcyBub3QgZXhpc3Qgb24gdGhlIGN1cnJlbnQgc2NoZW1hLmB9KTtjb25zdCBwPWY/PyROKHUpO2lmKCFwKXJldHVybiExO2NvbnN0IG09TGkodSxwLGQpO3JldHVybiBpJiZtJiYobD1NYXRoLm1heCgwLE1hdGgubWluKGwsbS5mcm9tKSksYz1NYXRoLm1pbihNYXRoLm1heChjLG0udG8pLG4uZG9jLm5vZGVTaXplLTIpKSx0PT1udWxsfHx0KG4ucmVtb3ZlTWFyayhsLE1yKGMpP2M6bCxTTihmKT9mOnZvaWQgMCkpLCEwfX1mdW5jdGlvbiBGbShlKXtjb25zdHtyZWdleHA6dCx0eXBlOm4sZ2V0QXR0cmlidXRlczpyLGlnbm9yZVdoaXRlc3BhY2U6bz0hMSxiZWZvcmVEaXNwYXRjaDppLHVwZGF0ZUNhcHR1cmVkOnMsc2hvdWxkU2tpcDphLGludmFsaWRNYXJrczpsfT1lO2xldCBjO2NvbnN0IHU9bmV3IHJvKHQsKGQsZixwLG0pPT57Y29uc3R7dHI6ZyxzY2hlbWE6eX09ZDtjfHwoYz1fZShuKT95Lm1hcmtzW25dOm4sYmUoYyx7Y29kZTpxLlNDSEVNQSxtZXNzYWdlOmBNYXJrIHR5cGU6ICR7bn0gZG9lcyBub3QgZXhpc3Qgb24gdGhlIGN1cnJlbnQgc2NoZW1hLmB9KSk7bGV0IHY9ZlsxXSx4PWZbMF07Y29uc3Qgdz1iVih7Y2FwdHVyZUdyb3VwOnYsZnVsbE1hdGNoOngsZW5kOm0sc3RhcnQ6cCxydWxlOnUsc3RhdGU6ZCxpZ25vcmVXaGl0ZXNwYWNlOm8saW52YWxpZE1hcmtzOmwsc2hvdWxkU2tpcDphLHVwZGF0ZUNhcHR1cmVkOnN9KTtpZighdylyZXR1cm4gbnVsbDsoe3N0YXJ0OnAsZW5kOm0sY2FwdHVyZUdyb3VwOnYsZnVsbE1hdGNoOnh9PXcpO2NvbnN0IGs9cHQocik/cihmKTpyO2xldCBFPW0sUz1bXTtpZih2KXtjb25zdCBfPXguc2VhcmNoKC9cUy8pLFA9cCt4LmluZGV4T2YodiksTT1QK3YubGVuZ3RoO1M9Zy5zdG9yZWRNYXJrcz8/W10sTTxtJiZnLmRlbGV0ZShNLG0pLFA+cCYmZy5kZWxldGUocCtfLFApLEU9cCtfK3YubGVuZ3RofXJldHVybiBnLmFkZE1hcmsocCxFLGMuY3JlYXRlKGspKSxnLnNldFN0b3JlZE1hcmtzKFMpLGk9PW51bGx8fGkoe3RyOmcsbWF0Y2g6ZixzdGFydDpwLGVuZDptfSksZ30pO3JldHVybiB1fWZ1bmN0aW9uIGJWKHtjYXB0dXJlR3JvdXA6ZSxmdWxsTWF0Y2g6dCxlbmQ6bixzdGFydDpyLHJ1bGU6byxpZ25vcmVXaGl0ZXNwYWNlOmksc2hvdWxkU2tpcDpzLHVwZGF0ZUNhcHR1cmVkOmEsc3RhdGU6bCxpbnZhbGlkTWFya3M6Y30pe3ZhciB1O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Y29uc3QgZD0oYT09bnVsbD92b2lkIDA6YSh7Y2FwdHVyZUdyb3VwOmUsZnVsbE1hdGNoOnQsc3RhcnQ6cixlbmQ6bn0pKT8/e307ZT1kLmNhcHR1cmVHcm91cD8/ZSx0PWQuZnVsbE1hdGNoPz90LHI9ZC5zdGFydD8/cixuPWQuZW5kPz9uO2NvbnN0IGY9bC5kb2MucmVzb2x2ZShyKSxwPWwuZG9jLnJlc29sdmUobik7cmV0dXJuIGMmJlZ4KHskZnJvbTpmLCR0bzpwfSxjKXx8by5pbnZhbGlkTWFya3MmJlZ4KHskZnJvbTpmLCR0bzpwfSxvLmludmFsaWRNYXJrcyl8fGkmJihlPT1udWxsP3ZvaWQgMDplLnRyaW0oKSk9PT0iInx8cyE9bnVsbCYmcyh7c3RhdGU6bCxjYXB0dXJlR3JvdXA6ZSxmdWxsTWF0Y2g6dCxzdGFydDpyLGVuZDpuLHJ1bGVUeXBlOiJtYXJrIn0pfHwodT1vLnNob3VsZFNraXApIT1udWxsJiZ1LmNhbGwobyx7c3RhdGU6bCxjYXB0dXJlR3JvdXA6ZSxmdWxsTWF0Y2g6dCxzdGFydDpyLGVuZDpuLHJ1bGVUeXBlOiJtYXJrIn0pP251bGw6e2NhcHR1cmVHcm91cDplLGVuZDpuLGZ1bGxNYXRjaDp0LHN0YXJ0OnJ9fXZhciB3Vj1mdW5jdGlvbigpe2NvbnN0IHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5maWx0ZXIoQm9vbGVhbiksbj17fSxyPVtdO3QuZm9yRWFjaChpPT57KGk/aS5zcGxpdCgiICIpOltdKS5mb3JFYWNoKGE9PntpZihhLnN0YXJ0c1dpdGgoImF0bV8iKSl7Y29uc3RbLGxdPWEuc3BsaXQoIl8iKTtuW2xdPWF9ZWxzZSByLnB1c2goYSl9KX0pO2NvbnN0IG89W107Zm9yKGNvbnN0IGkgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKSYmby5wdXNoKG5baV0pO3JldHVybiBvLnB1c2goLi4uciksby5qb2luKCIgIil9LFNWPXdWO2NvbnN0IEROPShlLHQpPT5lLnNlbGVjdGlvbi5lbXB0eT8hMToodCYmdChlLnRyLmRlbGV0ZVNlbGVjdGlvbigpLnNjcm9sbEludG9WaWV3KCkpLCEwKTtmdW5jdGlvbiBrVihlLHQpe2xldHskY3Vyc29yOm59PWUuc2VsZWN0aW9uO3JldHVybiFufHwodD8hdC5lbmRPZlRleHRibG9jaygiYmFja3dhcmQiLGUpOm4ucGFyZW50T2Zmc2V0PjApP251bGw6bn1jb25zdCBJTj0oZSx0LG4pPT57bGV0IHI9a1YoZSxuKTtpZighcilyZXR1cm4hMTtsZXQgbz1MTihyKTtpZighbyl7bGV0IHM9ci5ibG9ja1JhbmdlKCksYT1zJiZsdShzKTtyZXR1cm4gYT09bnVsbD8hMToodCYmdChlLnRyLmxpZnQocyxhKS5zY3JvbGxJbnRvVmlldygpKSwhMCl9bGV0IGk9by5ub2RlQmVmb3JlO2lmKCFpLnR5cGUuc3BlYy5pc29sYXRpbmcmJkZOKGUsbyx0KSlyZXR1cm4hMDtpZihyLnBhcmVudC5jb250ZW50LnNpemU9PTAmJihZYyhpLCJlbmQiKXx8d2UuaXNTZWxlY3RhYmxlKGkpKSl7bGV0IHM9WDEoZS5kb2Msci5iZWZvcmUoKSxyLmFmdGVyKCksSi5lbXB0eSk7aWYocyYmcy5zbGljZS5zaXplPHMudG8tcy5mcm9tKXtpZih0KXtsZXQgYT1lLnRyLnN0ZXAocyk7YS5zZXRTZWxlY3Rpb24oWWMoaSwiZW5kIik/QmUuZmluZEZyb20oYS5kb2MucmVzb2x2ZShhLm1hcHBpbmcubWFwKG8ucG9zLC0xKSksLTEpOndlLmNyZWF0ZShhLmRvYyxvLnBvcy1pLm5vZGVTaXplKSksdChhLnNjcm9sbEludG9WaWV3KCkpfXJldHVybiEwfX1yZXR1cm4gaS5pc0F0b20mJm8uZGVwdGg9PXIuZGVwdGgtMT8odCYmdChlLnRyLmRlbGV0ZShvLnBvcy1pLm5vZGVTaXplLG8ucG9zKS5zY3JvbGxJbnRvVmlldygpKSwhMCk6ITF9O2Z1bmN0aW9uIFljKGUsdCxuPSExKXtmb3IobGV0IHI9ZTtyO3I9dD09InN0YXJ0Ij9yLmZpcnN0Q2hpbGQ6ci5sYXN0Q2hpbGQpe2lmKHIuaXNUZXh0YmxvY2spcmV0dXJuITA7aWYobiYmci5jaGlsZENvdW50IT0xKXJldHVybiExfXJldHVybiExfWNvbnN0IEVWPShlLHQsbik9PntsZXR7JGhlYWQ6cixlbXB0eTpvfT1lLnNlbGVjdGlvbixpPXI7aWYoIW8pcmV0dXJuITE7aWYoci5wYXJlbnQuaXNUZXh0YmxvY2spe2lmKG4/IW4uZW5kT2ZUZXh0YmxvY2soImJhY2t3YXJkIixlKTpyLnBhcmVudE9mZnNldD4wKXJldHVybiExO2k9TE4ocil9bGV0IHM9aSYmaS5ub2RlQmVmb3JlO3JldHVybiFzfHwhd2UuaXNTZWxlY3RhYmxlKHMpPyExOih0JiZ0KGUudHIuc2V0U2VsZWN0aW9uKHdlLmNyZWF0ZShlLmRvYyxpLnBvcy1zLm5vZGVTaXplKSkuc2Nyb2xsSW50b1ZpZXcoKSksITApfTtmdW5jdGlvbiBMTihlKXtpZighZS5wYXJlbnQudHlwZS5zcGVjLmlzb2xhdGluZylmb3IobGV0IHQ9ZS5kZXB0aC0xO3Q+PTA7dC0tKXtpZihlLmluZGV4KHQpPjApcmV0dXJuIGUuZG9jLnJlc29sdmUoZS5iZWZvcmUodCsxKSk7aWYoZS5ub2RlKHQpLnR5cGUuc3BlYy5pc29sYXRpbmcpYnJlYWt9cmV0dXJuIG51bGx9ZnVuY3Rpb24gX1YoZSx0KXtsZXR7JGN1cnNvcjpufT1lLnNlbGVjdGlvbjtyZXR1cm4hbnx8KHQ/IXQuZW5kT2ZUZXh0YmxvY2soImZvcndhcmQiLGUpOm4ucGFyZW50T2Zmc2V0PG4ucGFyZW50LmNvbnRlbnQuc2l6ZSk/bnVsbDpufWNvbnN0IENWPShlLHQsbik9PntsZXQgcj1fVihlLG4pO2lmKCFyKXJldHVybiExO2xldCBvPWpOKHIpO2lmKCFvKXJldHVybiExO2xldCBpPW8ubm9kZUFmdGVyO2lmKEZOKGUsbyx0KSlyZXR1cm4hMDtpZihyLnBhcmVudC5jb250ZW50LnNpemU9PTAmJihZYyhpLCJzdGFydCIpfHx3ZS5pc1NlbGVjdGFibGUoaSkpKXtsZXQgcz1YMShlLmRvYyxyLmJlZm9yZSgpLHIuYWZ0ZXIoKSxKLmVtcHR5KTtpZihzJiZzLnNsaWNlLnNpemU8cy50by1zLmZyb20pe2lmKHQpe2xldCBhPWUudHIuc3RlcChzKTthLnNldFNlbGVjdGlvbihZYyhpLCJzdGFydCIpP0JlLmZpbmRGcm9tKGEuZG9jLnJlc29sdmUoYS5tYXBwaW5nLm1hcChvLnBvcykpLDEpOndlLmNyZWF0ZShhLmRvYyxhLm1hcHBpbmcubWFwKG8ucG9zKSkpLHQoYS5zY3JvbGxJbnRvVmlldygpKX1yZXR1cm4hMH19cmV0dXJuIGkuaXNBdG9tJiZvLmRlcHRoPT1yLmRlcHRoLTE/KHQmJnQoZS50ci5kZWxldGUoby5wb3Msby5wb3MraS5ub2RlU2l6ZSkuc2Nyb2xsSW50b1ZpZXcoKSksITApOiExfSxPVj0oZSx0LG4pPT57bGV0eyRoZWFkOnIsZW1wdHk6b309ZS5zZWxlY3Rpb24saT1yO2lmKCFvKXJldHVybiExO2lmKHIucGFyZW50LmlzVGV4dGJsb2NrKXtpZihuPyFuLmVuZE9mVGV4dGJsb2NrKCJmb3J3YXJkIixlKTpyLnBhcmVudE9mZnNldDxyLnBhcmVudC5jb250ZW50LnNpemUpcmV0dXJuITE7aT1qTihyKX1sZXQgcz1pJiZpLm5vZGVBZnRlcjtyZXR1cm4hc3x8IXdlLmlzU2VsZWN0YWJsZShzKT8hMToodCYmdChlLnRyLnNldFNlbGVjdGlvbih3ZS5jcmVhdGUoZS5kb2MsaS5wb3MpKS5zY3JvbGxJbnRvVmlldygpKSwhMCl9O2Z1bmN0aW9uIGpOKGUpe2lmKCFlLnBhcmVudC50eXBlLnNwZWMuaXNvbGF0aW5nKWZvcihsZXQgdD1lLmRlcHRoLTE7dD49MDt0LS0pe2xldCBuPWUubm9kZSh0KTtpZihlLmluZGV4KHQpKzE8bi5jaGlsZENvdW50KXJldHVybiBlLmRvYy5yZXNvbHZlKGUuYWZ0ZXIodCsxKSk7aWYobi50eXBlLnNwZWMuaXNvbGF0aW5nKWJyZWFrfXJldHVybiBudWxsfWNvbnN0IFRWPShlLHQpPT57bGV0eyRoZWFkOm4sJGFuY2hvcjpyfT1lLnNlbGVjdGlvbjtyZXR1cm4hbi5wYXJlbnQudHlwZS5zcGVjLmNvZGV8fCFuLnNhbWVQYXJlbnQocik/ITE6KHQmJnQoZS50ci5pbnNlcnRUZXh0KGAKYCkuc2Nyb2xsSW50b1ZpZXcoKSksITApfTtmdW5jdGlvbiB2dyhlKXtmb3IobGV0IHQ9MDt0PGUuZWRnZUNvdW50O3QrKyl7bGV0e3R5cGU6bn09ZS5lZGdlKHQpO2lmKG4uaXNUZXh0YmxvY2smJiFuLmhhc1JlcXVpcmVkQXR0cnMoKSlyZXR1cm4gbn1yZXR1cm4gbnVsbH1jb25zdCB6Tj0oZSx0KT0+e2xldHskaGVhZDpuLCRhbmNob3I6cn09ZS5zZWxlY3Rpb247aWYoIW4ucGFyZW50LnR5cGUuc3BlYy5jb2RlfHwhbi5zYW1lUGFyZW50KHIpKXJldHVybiExO2xldCBvPW4ubm9kZSgtMSksaT1uLmluZGV4QWZ0ZXIoLTEpLHM9dncoby5jb250ZW50TWF0Y2hBdChpKSk7aWYoIXN8fCFvLmNhblJlcGxhY2VXaXRoKGksaSxzKSlyZXR1cm4hMTtpZih0KXtsZXQgYT1uLmFmdGVyKCksbD1lLnRyLnJlcGxhY2VXaXRoKGEsYSxzLmNyZWF0ZUFuZEZpbGwoKSk7bC5zZXRTZWxlY3Rpb24oQmUubmVhcihsLmRvYy5yZXNvbHZlKGEpLDEpKSx0KGwuc2Nyb2xsSW50b1ZpZXcoKSl9cmV0dXJuITB9LFBWPShlLHQpPT57bGV0IG49ZS5zZWxlY3Rpb24seyRmcm9tOnIsJHRvOm99PW47aWYobiBpbnN0YW5jZW9mIHFufHxyLnBhcmVudC5pbmxpbmVDb250ZW50fHxvLnBhcmVudC5pbmxpbmVDb250ZW50KXJldHVybiExO2xldCBpPXZ3KG8ucGFyZW50LmNvbnRlbnRNYXRjaEF0KG8uaW5kZXhBZnRlcigpKSk7aWYoIWl8fCFpLmlzVGV4dGJsb2NrKXJldHVybiExO2lmKHQpe2xldCBzPSghci5wYXJlbnRPZmZzZXQmJm8uaW5kZXgoKTxvLnBhcmVudC5jaGlsZENvdW50P3I6bykucG9zLGE9ZS50ci5pbnNlcnQocyxpLmNyZWF0ZUFuZEZpbGwoKSk7YS5zZXRTZWxlY3Rpb24oVGUuY3JlYXRlKGEuZG9jLHMrMSkpLHQoYS5zY3JvbGxJbnRvVmlldygpKX1yZXR1cm4hMH0sTVY9KGUsdCk9PntsZXR7JGN1cnNvcjpufT1lLnNlbGVjdGlvbjtpZighbnx8bi5wYXJlbnQuY29udGVudC5zaXplKXJldHVybiExO2lmKG4uZGVwdGg+MSYmbi5hZnRlcigpIT1uLmVuZCgtMSkpe2xldCBpPW4uYmVmb3JlKCk7aWYoQ2MoZS5kb2MsaSkpcmV0dXJuIHQmJnQoZS50ci5zcGxpdChpKS5zY3JvbGxJbnRvVmlldygpKSwhMH1sZXQgcj1uLmJsb2NrUmFuZ2UoKSxvPXImJmx1KHIpO3JldHVybiBvPT1udWxsPyExOih0JiZ0KGUudHIubGlmdChyLG8pLnNjcm9sbEludG9WaWV3KCkpLCEwKX07ZnVuY3Rpb24gUlYoZSl7cmV0dXJuKHQsbik9PntsZXR7JGZyb206ciwkdG86b309dC5zZWxlY3Rpb247aWYodC5zZWxlY3Rpb24gaW5zdGFuY2VvZiB3ZSYmdC5zZWxlY3Rpb24ubm9kZS5pc0Jsb2NrKXJldHVybiFyLnBhcmVudE9mZnNldHx8IUNjKHQuZG9jLHIucG9zKT8hMToobiYmbih0LnRyLnNwbGl0KHIucG9zKS5zY3JvbGxJbnRvVmlldygpKSwhMCk7aWYoIXIucGFyZW50LmlzQmxvY2spcmV0dXJuITE7aWYobil7bGV0IGk9by5wYXJlbnRPZmZzZXQ9PW8ucGFyZW50LmNvbnRlbnQuc2l6ZSxzPXQudHI7KHQuc2VsZWN0aW9uIGluc3RhbmNlb2YgVGV8fHQuc2VsZWN0aW9uIGluc3RhbmNlb2YgcW4pJiZzLmRlbGV0ZVNlbGVjdGlvbigpO2xldCBhPXIuZGVwdGg9PTA/bnVsbDp2dyhyLm5vZGUoLTEpLmNvbnRlbnRNYXRjaEF0KHIuaW5kZXhBZnRlcigtMSkpKSxsPWUmJmUoby5wYXJlbnQsaSksYz1sP1tsXTppJiZhP1t7dHlwZTphfV06dm9pZCAwLHU9Q2Mocy5kb2Mscy5tYXBwaW5nLm1hcChyLnBvcyksMSxjKTtpZighYyYmIXUmJkNjKHMuZG9jLHMubWFwcGluZy5tYXAoci5wb3MpLDEsYT9be3R5cGU6YX1dOnZvaWQgMCkmJihhJiYoYz1be3R5cGU6YX1dKSx1PSEwKSx1JiYocy5zcGxpdChzLm1hcHBpbmcubWFwKHIucG9zKSwxLGMpLCFpJiYhci5wYXJlbnRPZmZzZXQmJnIucGFyZW50LnR5cGUhPWEpKXtsZXQgZD1zLm1hcHBpbmcubWFwKHIuYmVmb3JlKCkpLGY9cy5kb2MucmVzb2x2ZShkKTthJiZyLm5vZGUoLTEpLmNhblJlcGxhY2VXaXRoKGYuaW5kZXgoKSxmLmluZGV4KCkrMSxhKSYmcy5zZXROb2RlTWFya3VwKHMubWFwcGluZy5tYXAoci5iZWZvcmUoKSksYSl9bihzLnNjcm9sbEludG9WaWV3KCkpfXJldHVybiEwfX1jb25zdCBOVj1SVigpLCRWPShlLHQpPT57bGV0eyRmcm9tOm4sdG86cn09ZS5zZWxlY3Rpb24sbyxpPW4uc2hhcmVkRGVwdGgocik7cmV0dXJuIGk9PTA/ITE6KG89bi5iZWZvcmUoaSksdCYmdChlLnRyLnNldFNlbGVjdGlvbih3ZS5jcmVhdGUoZS5kb2MsbykpKSwhMCl9LEFWPShlLHQpPT4odCYmdChlLnRyLnNldFNlbGVjdGlvbihuZXcgcW4oZS5kb2MpKSksITApO2Z1bmN0aW9uIERWKGUsdCxuKXtsZXQgcj10Lm5vZGVCZWZvcmUsbz10Lm5vZGVBZnRlcixpPXQuaW5kZXgoKTtyZXR1cm4hcnx8IW98fCFyLnR5cGUuY29tcGF0aWJsZUNvbnRlbnQoby50eXBlKT8hMTohci5jb250ZW50LnNpemUmJnQucGFyZW50LmNhblJlcGxhY2UoaS0xLGkpPyhuJiZuKGUudHIuZGVsZXRlKHQucG9zLXIubm9kZVNpemUsdC5wb3MpLnNjcm9sbEludG9WaWV3KCkpLCEwKTohdC5wYXJlbnQuY2FuUmVwbGFjZShpLGkrMSl8fCEoby5pc1RleHRibG9ja3x8c3AoZS5kb2MsdC5wb3MpKT8hMToobiYmbihlLnRyLmNsZWFySW5jb21wYXRpYmxlKHQucG9zLHIudHlwZSxyLmNvbnRlbnRNYXRjaEF0KHIuY2hpbGRDb3VudCkpLmpvaW4odC5wb3MpLnNjcm9sbEludG9WaWV3KCkpLCEwKX1mdW5jdGlvbiBGTihlLHQsbil7bGV0IHI9dC5ub2RlQmVmb3JlLG89dC5ub2RlQWZ0ZXIsaSxzO2lmKHIudHlwZS5zcGVjLmlzb2xhdGluZ3x8by50eXBlLnNwZWMuaXNvbGF0aW5nKXJldHVybiExO2lmKERWKGUsdCxuKSlyZXR1cm4hMDtsZXQgYT10LnBhcmVudC5jYW5SZXBsYWNlKHQuaW5kZXgoKSx0LmluZGV4KCkrMSk7aWYoYSYmKGk9KHM9ci5jb250ZW50TWF0Y2hBdChyLmNoaWxkQ291bnQpKS5maW5kV3JhcHBpbmcoby50eXBlKSkmJnMubWF0Y2hUeXBlKGlbMF18fG8udHlwZSkudmFsaWRFbmQpe2lmKG4pe2xldCBkPXQucG9zK28ubm9kZVNpemUsZj1VLmVtcHR5O2ZvcihsZXQgZz1pLmxlbmd0aC0xO2c+PTA7Zy0tKWY9VS5mcm9tKGlbZ10uY3JlYXRlKG51bGwsZikpO2Y9VS5mcm9tKHIuY29weShmKSk7bGV0IHA9ZS50ci5zdGVwKG5ldyBVdCh0LnBvcy0xLGQsdC5wb3MsZCxuZXcgSihmLDEsMCksaS5sZW5ndGgsITApKSxtPWQrMippLmxlbmd0aDtzcChwLmRvYyxtKSYmcC5qb2luKG0pLG4ocC5zY3JvbGxJbnRvVmlldygpKX1yZXR1cm4hMH1sZXQgbD1CZS5maW5kRnJvbSh0LDEpLGM9bCYmbC4kZnJvbS5ibG9ja1JhbmdlKGwuJHRvKSx1PWMmJmx1KGMpO2lmKHUhPW51bGwmJnU+PXQuZGVwdGgpcmV0dXJuIG4mJm4oZS50ci5saWZ0KGMsdSkuc2Nyb2xsSW50b1ZpZXcoKSksITA7aWYoYSYmWWMobywic3RhcnQiLCEwKSYmWWMociwiZW5kIikpe2xldCBkPXIsZj1bXTtmb3IoO2YucHVzaChkKSwhZC5pc1RleHRibG9jazspZD1kLmxhc3RDaGlsZDtsZXQgcD1vLG09MTtmb3IoOyFwLmlzVGV4dGJsb2NrO3A9cC5maXJzdENoaWxkKW0rKztpZihkLmNhblJlcGxhY2UoZC5jaGlsZENvdW50LGQuY2hpbGRDb3VudCxwLmNvbnRlbnQpKXtpZihuKXtsZXQgZz1VLmVtcHR5O2ZvcihsZXQgdj1mLmxlbmd0aC0xO3Y+PTA7di0tKWc9VS5mcm9tKGZbdl0uY29weShnKSk7bGV0IHk9ZS50ci5zdGVwKG5ldyBVdCh0LnBvcy1mLmxlbmd0aCx0LnBvcytvLm5vZGVTaXplLHQucG9zK20sdC5wb3Mrby5ub2RlU2l6ZS1tLG5ldyBKKGcsZi5sZW5ndGgsMCksMCwhMCkpO24oeS5zY3JvbGxJbnRvVmlldygpKX1yZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gQk4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7bGV0IHI9dC5zZWxlY3Rpb24sbz1lPDA/ci4kZnJvbTpyLiR0byxpPW8uZGVwdGg7Zm9yKDtvLm5vZGUoaSkuaXNJbmxpbmU7KXtpZighaSlyZXR1cm4hMTtpLS19cmV0dXJuIG8ubm9kZShpKS5pc1RleHRibG9jaz8obiYmbih0LnRyLnNldFNlbGVjdGlvbihUZS5jcmVhdGUodC5kb2MsZTwwP28uc3RhcnQoaSk6by5lbmQoaSkpKSksITApOiExfX1jb25zdCBJVj1CTigtMSksTFY9Qk4oMSk7ZnVuY3Rpb24galYoZSx0LG4pe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXR7JGZyb206bywkdG86aX09dFtyXSxzPW8uZGVwdGg9PTA/ZS5pbmxpbmVDb250ZW50JiZlLnR5cGUuYWxsb3dzTWFya1R5cGUobik6ITE7aWYoZS5ub2Rlc0JldHdlZW4oby5wb3MsaS5wb3MsYT0+e2lmKHMpcmV0dXJuITE7cz1hLmlubGluZUNvbnRlbnQmJmEudHlwZS5hbGxvd3NNYXJrVHlwZShuKX0pLHMpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gelYoZSx0PW51bGwpe3JldHVybiBmdW5jdGlvbihuLHIpe2xldHtlbXB0eTpvLCRjdXJzb3I6aSxyYW5nZXM6c309bi5zZWxlY3Rpb247aWYobyYmIWl8fCFqVihuLmRvYyxzLGUpKXJldHVybiExO2lmKHIpaWYoaSllLmlzSW5TZXQobi5zdG9yZWRNYXJrc3x8aS5tYXJrcygpKT9yKG4udHIucmVtb3ZlU3RvcmVkTWFyayhlKSk6cihuLnRyLmFkZFN0b3JlZE1hcmsoZS5jcmVhdGUodCkpKTtlbHNle2xldCBhPSExLGw9bi50cjtmb3IobGV0IGM9MDshYSYmYzxzLmxlbmd0aDtjKyspe2xldHskZnJvbTp1LCR0bzpkfT1zW2NdO2E9bi5kb2MucmFuZ2VIYXNNYXJrKHUucG9zLGQucG9zLGUpfWZvcihsZXQgYz0wO2M8cy5sZW5ndGg7YysrKXtsZXR7JGZyb206dSwkdG86ZH09c1tjXTtpZihhKWwucmVtb3ZlTWFyayh1LnBvcyxkLnBvcyxlKTtlbHNle2xldCBmPXUucG9zLHA9ZC5wb3MsbT11Lm5vZGVBZnRlcixnPWQubm9kZUJlZm9yZSx5PW0mJm0uaXNUZXh0Py9eXHMqLy5leGVjKG0udGV4dClbMF0ubGVuZ3RoOjAsdj1nJiZnLmlzVGV4dD8vXHMqJC8uZXhlYyhnLnRleHQpWzBdLmxlbmd0aDowO2YreTxwJiYoZis9eSxwLT12KSxsLmFkZE1hcmsoZixwLGUuY3JlYXRlKHQpKX19cihsLnNjcm9sbEludG9WaWV3KCkpfXJldHVybiEwfX1mdW5jdGlvbiBzdiguLi5lKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKWlmKGVbb10odCxuLHIpKXJldHVybiEwO3JldHVybiExfX1sZXQgQXk9c3YoRE4sSU4sRVYpLEdfPXN2KEROLENWLE9WKTtjb25zdCB3aT17RW50ZXI6c3YoVFYsUFYsTVYsTlYpLCJNb2QtRW50ZXIiOnpOLEJhY2tzcGFjZTpBeSwiTW9kLUJhY2tzcGFjZSI6QXksIlNoaWZ0LUJhY2tzcGFjZSI6QXksRGVsZXRlOkdfLCJNb2QtRGVsZXRlIjpHXywiTW9kLWEiOkFWfSxVTj17IkN0cmwtaCI6d2kuQmFja3NwYWNlLCJBbHQtQmFja3NwYWNlIjp3aVsiTW9kLUJhY2tzcGFjZSJdLCJDdHJsLWQiOndpLkRlbGV0ZSwiQ3RybC1BbHQtQmFja3NwYWNlIjp3aVsiTW9kLURlbGV0ZSJdLCJBbHQtRGVsZXRlIjp3aVsiTW9kLURlbGV0ZSJdLCJBbHQtZCI6d2lbIk1vZC1EZWxldGUiXSwiQ3RybC1hIjpJViwiQ3RybC1lIjpMVn07Zm9yKGxldCBlIGluIHdpKVVOW2VdPXdpW2VdO2NvbnN0IEZWPXR5cGVvZiBuYXZpZ2F0b3I8InUiPy9NYWN8aVAoaG9uZXxbb2FdZCkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTp0eXBlb2Ygb3M8InUiJiZvcy5wbGF0Zm9ybT9vcy5wbGF0Zm9ybSgpPT0iZGFyd2luIjohMSxEeT1GVj9VTjp3aTt2YXIgZWE9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMDoiRW50ZXIiLDEyOiJOdW1Mb2NrIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDIwOiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJBcnJvd1VwIiwzOToiQXJyb3dSaWdodCIsNDA6IkFycm93RG93biIsNDQ6IlByaW50U2NyZWVuIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiw1OToiOyIsNjE6Ij0iLDkxOiJNZXRhIiw5MjoiTWV0YSIsMTA2OiIqIiwxMDc6IisiLDEwODoiLCIsMTA5OiItIiwxMTA6Ii4iLDExMToiLyIsMTQ0OiJOdW1Mb2NrIiwxNDU6IlNjcm9sbExvY2siLDE2MDoiU2hpZnQiLDE2MToiU2hpZnQiLDE2MjoiQ29udHJvbCIsMTYzOiJDb250cm9sIiwxNjQ6IkFsdCIsMTY1OiJBbHQiLDE3MzoiLSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIn0sQm09ezQ4OiIpIiw0OToiISIsNTA6IkAiLDUxOiIjIiw1MjoiJCIsNTM6IiUiLDU0OiJeIiw1NToiJiIsNTY6IioiLDU3OiIoIiw1OToiOiIsNjE6IisiLDE3MzoiXyIsMTg2OiI6IiwxODc6IisiLDE4ODoiPCIsMTg5OiJfIiwxOTA6Ij4iLDE5MToiPyIsMTkyOiJ+IiwyMTk6InsiLDIyMDoifCIsMjIxOiJ9IiwyMjI6JyInfSxCVj10eXBlb2YgbmF2aWdhdG9yPCJ1IiYmL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVWPXR5cGVvZiBuYXZpZ2F0b3I8InUiJiYvTVNJRSBcZHxUcmlkZW50XC8oPzpbNy05XXxcZHsyLH0pXC4uKnJ2OihcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO2Zvcih2YXIga249MDtrbjwxMDtrbisrKWVhWzQ4K2tuXT1lYVs5Nitrbl09U3RyaW5nKGtuKTtmb3IodmFyIGtuPTE7a248PTI0O2tuKyspZWFba24rMTExXT0iRiIra247Zm9yKHZhciBrbj02NTtrbjw9OTA7a24rKyllYVtrbl09U3RyaW5nLmZyb21DaGFyQ29kZShrbiszMiksQm1ba25dPVN0cmluZy5mcm9tQ2hhckNvZGUoa24pO2Zvcih2YXIgSXkgaW4gZWEpQm0uaGFzT3duUHJvcGVydHkoSXkpfHwoQm1bSXldPWVhW0l5XSk7ZnVuY3Rpb24gVlYoZSl7dmFyIHQ9QlYmJmUubWV0YUtleSYmZS5zaGlmdEtleSYmIWUuY3RybEtleSYmIWUuYWx0S2V5fHxVViYmZS5zaGlmdEtleSYmZS5rZXkmJmUua2V5Lmxlbmd0aD09MXx8ZS5rZXk9PSJVbmlkZW50aWZpZWQiLG49IXQmJmUua2V5fHwoZS5zaGlmdEtleT9CbTplYSlbZS5rZXlDb2RlXXx8ZS5rZXl8fCJVbmlkZW50aWZpZWQiO3JldHVybiBuPT0iRXNjIiYmKG49IkVzY2FwZSIpLG49PSJEZWwiJiYobj0iRGVsZXRlIiksbj09IkxlZnQiJiYobj0iQXJyb3dMZWZ0Iiksbj09IlVwIiYmKG49IkFycm93VXAiKSxuPT0iUmlnaHQiJiYobj0iQXJyb3dSaWdodCIpLG49PSJEb3duIiYmKG49IkFycm93RG93biIpLG59Y29uc3QgSFY9dHlwZW9mIG5hdmlnYXRvcjwidSI/L01hY3xpUChob25lfFtvYV1kKS8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOiExO2Z1bmN0aW9uIFdWKGUpe2xldCB0PWUuc3BsaXQoLy0oPyEkKS8pLG49dFt0Lmxlbmd0aC0xXTtuPT0iU3BhY2UiJiYobj0iICIpO2xldCByLG8saSxzO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGgtMTthKyspe2xldCBsPXRbYV07aWYoL14oY21kfG1ldGF8bSkkL2kudGVzdChsKSlzPSEwO2Vsc2UgaWYoL15hKGx0KT8kL2kudGVzdChsKSlyPSEwO2Vsc2UgaWYoL14oY3xjdHJsfGNvbnRyb2wpJC9pLnRlc3QobCkpbz0hMDtlbHNlIGlmKC9ecyhoaWZ0KT8kL2kudGVzdChsKSlpPSEwO2Vsc2UgaWYoL15tb2QkL2kudGVzdChsKSlIVj9zPSEwOm89ITA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiAiK2wpfXJldHVybiByJiYobj0iQWx0LSIrbiksbyYmKG49IkN0cmwtIituKSxzJiYobj0iTWV0YS0iK24pLGkmJihuPSJTaGlmdC0iK24pLG59ZnVuY3Rpb24gS1YoZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IG4gaW4gZSl0W1dWKG4pXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIEx5KGUsdCxuPSEwKXtyZXR1cm4gdC5hbHRLZXkmJihlPSJBbHQtIitlKSx0LmN0cmxLZXkmJihlPSJDdHJsLSIrZSksdC5tZXRhS2V5JiYoZT0iTWV0YS0iK2UpLG4mJnQuc2hpZnRLZXkmJihlPSJTaGlmdC0iK2UpLGV9ZnVuY3Rpb24gVk4oZSl7bGV0IHQ9S1YoZSk7cmV0dXJuIGZ1bmN0aW9uKG4scil7bGV0IG89VlYociksaSxzPXRbTHkobyxyKV07aWYocyYmcyhuLnN0YXRlLG4uZGlzcGF0Y2gsbikpcmV0dXJuITA7aWYoby5sZW5ndGg9PTEmJm8hPSIgIil7aWYoci5zaGlmdEtleSl7bGV0IGE9dFtMeShvLHIsITEpXTtpZihhJiZhKG4uc3RhdGUsbi5kaXNwYXRjaCxuKSlyZXR1cm4hMH1pZigoci5zaGlmdEtleXx8ci5hbHRLZXl8fHIubWV0YUtleXx8by5jaGFyQ29kZUF0KDApPjEyNykmJihpPWVhW3Iua2V5Q29kZV0pJiZpIT1vKXtsZXQgYT10W0x5KGkscildO2lmKGEmJmEobi5zdGF0ZSxuLmRpc3BhdGNoLG4pKXJldHVybiEwfX1yZXR1cm4hMX19ZnVuY3Rpb24gcVYoZSl7Y29uc3QgdD1pbChlLChpLHMpPT4ocy5wcmlvcml0eT8/Y3QuTG93KS0oaS5wcmlvcml0eT8/Y3QuTG93KSksbj1bXSxyPVtdO2Zvcihjb25zdCBpIG9mIHQpZUgoaSk/bi5wdXNoKGkpOnIucHVzaChpKTtsZXQgbztyZXR1cm4gbmV3IEhpKHtrZXk6R1YsdmlldzppPT4obz1pLHt9KSxwcm9wczp7dHJhbnNmb3JtUGFzdGVkOmk9Pnt2YXIgcyxhLGw7Y29uc3QgYz1vLnN0YXRlLnNlbGVjdGlvbi4kZnJvbSx1PWMubm9kZSgpLnR5cGUubmFtZSxkPW5ldyBTZXQoYy5tYXJrcygpLm1hcChmPT5mLnR5cGUubmFtZSkpO2Zvcihjb25zdCBmIG9mIG4pe2lmKChzPWYuaWdub3JlZE5vZGVzKSE9bnVsbCYmcy5pbmNsdWRlcyh1KXx8KGE9Zi5pZ25vcmVkTWFya3MpIT1udWxsJiZhLnNvbWUoeD0+ZC5oYXMoeCkpKWNvbnRpbnVlO2NvbnN0IHA9KChsPWkuY29udGVudC5maXJzdENoaWxkKT09bnVsbD92b2lkIDA6bC50ZXh0Q29udGVudCk/PyIiLG09IW8uc3RhdGUuc2VsZWN0aW9uLmVtcHR5JiZpLmNvbnRlbnQuY2hpbGRDb3VudD09PTEmJnAsZz1YZyhwLGYucmVnZXhwKVswXTtpZihtJiZnJiZmLnR5cGU9PT0ibWFyayImJmYucmVwbGFjZVNlbGVjdGlvbil7Y29uc3R7ZnJvbTp4LHRvOnd9PW8uc3RhdGUuc2VsZWN0aW9uLGs9by5zdGF0ZS5kb2Muc2xpY2UoeCx3KSxFPWsuY29udGVudC50ZXh0QmV0d2VlbigwLGsuY29udGVudC5zaXplKTtpZih0eXBlb2YgZi5yZXBsYWNlU2VsZWN0aW9uIT0iYm9vbGVhbiI/Zi5yZXBsYWNlU2VsZWN0aW9uKEUpOmYucmVwbGFjZVNlbGVjdGlvbil7Y29uc3QgUz1bXSx7Z2V0QXR0cmlidXRlczpfLG1hcmtUeXBlOlB9PWYsTT1wdChfKT9fKGcsITApOl8sQT1QLmNyZWF0ZShNKTtyZXR1cm4gay5jb250ZW50LmZvckVhY2goST0+e2lmKEkuaXNUZXh0KXtjb25zdCBMPUEuYWRkVG9TZXQoSS5tYXJrcyk7Uy5wdXNoKEkubWFyayhMKSl9fSksSi5tYXhPcGVuKFUuZnJvbUFycmF5KFMpKX19Y29uc3R7bm9kZXM6eSx0cmFuc2Zvcm1lZDp2fT1KVihpLmNvbnRlbnQsZixvLnN0YXRlLnNjaGVtYSk7diYmKGk9Zi50eXBlPT09Im5vZGUiJiZmLm5vZGVUeXBlLmlzQmxvY2s/bmV3IEooVS5mcm9tQXJyYXkoeSksMCwwKTpuZXcgSihVLmZyb21BcnJheSh5KSxpLm9wZW5TdGFydCxpLm9wZW5FbmQpKX1yZXR1cm4gb0goaSl9LGhhbmRsZURPTUV2ZW50czp7cGFzdGU6KGkscyk9Pnt2YXIgYSxsO2NvbnN0IGM9cztpZighKChsPShhPWkucHJvcHMpLmVkaXRhYmxlKSE9bnVsbCYmbC5jYWxsKGEsaS5zdGF0ZSkpKXJldHVybiExO2NvbnN0e2NsaXBib2FyZERhdGE6dX09YztpZighdSlyZXR1cm4hMTtjb25zdCBkPVsuLi51Lml0ZW1zXS5tYXAocD0+cC5nZXRBc0ZpbGUoKSkuZmlsdGVyKHA9PiEhcCk7aWYoZC5sZW5ndGg9PT0wKXJldHVybiExO2NvbnN0e3NlbGVjdGlvbjpmfT1pLnN0YXRlO2Zvcihjb25zdHtmaWxlSGFuZGxlcjpwLHJlZ2V4cDptfW9mIHIpe2NvbnN0IGc9bT9kLmZpbHRlcih5PT5tLnRlc3QoeS50eXBlKSk6ZDtpZihnLmxlbmd0aCE9PTAmJnAoe2V2ZW50OmMsZmlsZXM6ZyxzZWxlY3Rpb246Zix2aWV3OmksdHlwZToicGFzdGUifSkpcmV0dXJuIGMucHJldmVudERlZmF1bHQoKSwhMH1yZXR1cm4hMX0sZHJvcDooaSxzKT0+e3ZhciBhLGwsYztjb25zdCB1PXM7aWYoISgobD0oYT1pLnByb3BzKS5lZGl0YWJsZSkhPW51bGwmJmwuY2FsbChhLGkuc3RhdGUpKSlyZXR1cm4hMTtjb25zdHtkYXRhVHJhbnNmZXI6ZCxjbGllbnRYOmYsY2xpZW50WTpwfT11O2lmKCFkKXJldHVybiExO2NvbnN0IG09ckgodSk7aWYobS5sZW5ndGg9PT0wKXJldHVybiExO2NvbnN0IGc9KChjPWkucG9zQXRDb29yZHMoe2xlZnQ6Zix0b3A6cH0pKT09bnVsbD92b2lkIDA6Yy5wb3MpPz9pLnN0YXRlLnNlbGVjdGlvbi5hbmNob3I7Zm9yKGNvbnN0e2ZpbGVIYW5kbGVyOnkscmVnZXhwOnZ9b2Ygcil7Y29uc3QgeD12P20uZmlsdGVyKHc9PnYudGVzdCh3LnR5cGUpKTptO2lmKHgubGVuZ3RoIT09MCYmeSh7ZXZlbnQ6dSxmaWxlczp4LHBvczpnLHZpZXc6aSx0eXBlOiJkcm9wIn0pKXJldHVybiB1LnByZXZlbnREZWZhdWx0KCksITB9cmV0dXJuITF9fX19KX12YXIgR1Y9bmV3IGN1KCJwYXN0ZVJ1bGUiKTtmdW5jdGlvbiBqeShlLHQpe3JldHVybiBmdW5jdGlvbiBuKHIpe2NvbnN0e2ZyYWdtZW50Om8scnVsZTppLG5vZGVzOnN9PXIse3JlZ2V4cDphLGlnbm9yZVdoaXRlc3BhY2U6bCxpZ25vcmVkTWFya3M6YyxpZ25vcmVkTm9kZXM6dX09aTtsZXQgZD0hMTtyZXR1cm4gby5mb3JFYWNoKGY9PntpZih1IT1udWxsJiZ1LmluY2x1ZGVzKGYudHlwZS5uYW1lKXx8dEgoZikpe3MucHVzaChmKTtyZXR1cm59aWYoIWYuaXNUZXh0KXtjb25zdCBnPW4oe2ZyYWdtZW50OmYuY29udGVudCxydWxlOmksbm9kZXM6W119KTtkfHwoZD1nLnRyYW5zZm9ybWVkKTtjb25zdCB5PVUuZnJvbUFycmF5KGcubm9kZXMpO2YudHlwZS52YWxpZENvbnRlbnQoeSk/cy5wdXNoKGYuY29weSh5KSk6cy5wdXNoKC4uLmcubm9kZXMpO3JldHVybn1pZihmLm1hcmtzLnNvbWUoZz0+bkgoZyl8fChjPT1udWxsP3ZvaWQgMDpjLmluY2x1ZGVzKGcudHlwZS5uYW1lKSkpKXtzLnB1c2goZik7cmV0dXJufWNvbnN0IHA9Zi50ZXh0Pz8iIjtsZXQgbT0wO2Zvcihjb25zdCBnIG9mIFhnKHAsYSkpe2NvbnN0IHk9Z1sxXSx2PWdbMF07aWYobCYmKHk9PW51bGw/dm9pZCAwOnkudHJpbSgpKT09PSIifHwhdilyZXR1cm47Y29uc3QgeD1nLmluZGV4LHc9eCt2Lmxlbmd0aDt4Pm0mJnMucHVzaChmLmN1dChtLHgpKTtsZXQgaz1mLmN1dCh4LHcpO2lmKHYmJnkpe2NvbnN0IEU9di5zZWFyY2goL1xTLyksUz14K3YuaW5kZXhPZih5KSxfPVMreS5sZW5ndGg7RSYmcy5wdXNoKGYuY3V0KHgseCtFKSksaz1mLmN1dChTLF8pfWUoe25vZGVzOnMscnVsZTppLHRleHROb2RlOmssbWF0Y2g6ZyxzY2hlbWE6dH0pLGQ9ITAsbT13fXAmJm08cC5sZW5ndGgmJnMucHVzaChmLmN1dChtKSl9KSx7bm9kZXM6cyx0cmFuc2Zvcm1lZDpkfX19ZnVuY3Rpb24gWVYoZSl7Y29uc3R7bm9kZXM6dCxydWxlOm4sdGV4dE5vZGU6cixtYXRjaDpvLHNjaGVtYTppfT1lLHt0cmFuc2Zvcm1NYXRjaDpzLGdldEF0dHJpYnV0ZXM6YSxtYXJrVHlwZTpsfT1uLGM9cHQoYSk/YShvLCExKTphLHU9ci50ZXh0Pz8iIixkPWwuY3JlYXRlKGMpLGY9cz09bnVsbD92b2lkIDA6cyhvKTtpZihmPT09IiIpcmV0dXJuO2lmKGY9PT0hMSl7dC5wdXNoKGkudGV4dCh1LHIubWFya3MpKTtyZXR1cm59Y29uc3QgcD1kLmFkZFRvU2V0KHIubWFya3MpO3QucHVzaChpLnRleHQoZj8/dSxwKSl9ZnVuY3Rpb24gWFYoZSl7Y29uc3R7bm9kZXM6dCxydWxlOm4sdGV4dE5vZGU6cixtYXRjaDpvLHNjaGVtYTppfT1lLHt0cmFuc2Zvcm1NYXRjaDpzfT1uLGE9cz09bnVsbD92b2lkIDA6cyhvKTtpZihhPT09IiJ8fGE9PT0hMSlyZXR1cm47Y29uc3QgbD1hPz9yLnRleHQ/PyIiO3QucHVzaChpLnRleHQobCxyLm1hcmtzKSl9ZnVuY3Rpb24gWlYoZSl7Y29uc3R7bm9kZXM6dCxydWxlOm4sdGV4dE5vZGU6cixtYXRjaDpvfT1lLHtnZXRBdHRyaWJ1dGVzOmksbm9kZVR5cGU6cyxnZXRDb250ZW50OmF9PW4sbD1wdChpKT9pKG8sITEpOmksYz0oYT9hKG8pOnIpfHx2b2lkIDA7dC5wdXNoKHMuY3JlYXRlQ2hlY2tlZChsLGMpKX1mdW5jdGlvbiBKVihlLHQsbil7Y29uc3Qgcj1bXTtzd2l0Y2godC50eXBlKXtjYXNlIm1hcmsiOnJldHVybiBqeShZVixuKSh7ZnJhZ21lbnQ6ZSxub2RlczpyLHJ1bGU6dH0pO2Nhc2Uibm9kZSI6cmV0dXJuIGp5KFpWLG4pKHtmcmFnbWVudDplLG5vZGVzOnIscnVsZTp0fSk7ZGVmYXVsdDpyZXR1cm4gankoWFYsbikoe2ZyYWdtZW50OmUsbm9kZXM6cixydWxlOnR9KX19dmFyIFFWPVsibWFyayIsIm5vZGUiLCJ0ZXh0Il07ZnVuY3Rpb24gZUgoZSl7cmV0dXJuICRvKFFWLGUudHlwZSl9ZnVuY3Rpb24gdEgoZSl7dmFyIHQ7cmV0dXJuIGUudHlwZS5zcGVjLmNvZGV8fCgodD1lLnR5cGUuc3BlYy5ncm91cCk9PW51bGw/dm9pZCAwOnQuc3BsaXQoIiAiKS5pbmNsdWRlcygiY29kZSIpKX1mdW5jdGlvbiBuSChlKXt2YXIgdDtyZXR1cm4gZS50eXBlLm5hbWU9PT0iY29kZSJ8fCgodD1lLnR5cGUuc3BlYy5ncm91cCk9PW51bGw/dm9pZCAwOnQuc3BsaXQoIiAiKS5pbmNsdWRlcygiY29kZSIpKX1mdW5jdGlvbiBySChlKXt2YXIgdCxuO2NvbnN0e2RhdGFUcmFuc2ZlcjpyfT1lO3JldHVybiByPygodD1yLmZpbGVzKT09bnVsbD92b2lkIDA6dC5sZW5ndGgpPjA/Wy4uLnIuZmlsZXNdOihuPXIuaXRlbXMpIT1udWxsJiZuLmxlbmd0aD9bLi4uci5pdGVtc10ubWFwKG89Pm8uZ2V0QXNGaWxlKCkpLmZpbHRlcihvPT4hIW8pOltdOltdfWZ1bmN0aW9uIG9IKGUpe2NvbnN0IHQ9Si5tYXhPcGVuKGUuY29udGVudCk7cmV0dXJuIHQub3BlblN0YXJ0PGUub3BlblN0YXJ0fHx0Lm9wZW5FbmQ8ZS5vcGVuRW5kP3Q6ZX12YXIgaUg9T2JqZWN0LmRlZmluZVByb3BlcnR5LHNIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbGU9KGUsdCxuLHIpPT57Zm9yKHZhciBvPXI+MT92b2lkIDA6cj9zSCh0LG4pOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShyP3ModCxuLG8pOnMobykpfHxvKTtyZXR1cm4gciYmbyYmaUgodCxuLG8pLG99LEhOPShlLHQsbik9PntpZighdC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgIituKX0sdGU9KGUsdCxuKT0+KEhOKGUsdCwicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSxuP24uY2FsbChlKTp0LmdldChlKSksSHQ9KGUsdCxuKT0+e2lmKHQuaGFzKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpO3QgaW5zdGFuY2VvZiBXZWFrU2V0P3QuYWRkKGUpOnQuc2V0KGUsbil9LGNuPShlLHQsbixyKT0+KEhOKGUsdCwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLHI/ci5jYWxsKGUsbik6dC5zZXQoZSxuKSxuKTtmdW5jdGlvbiBhSChlLHQpe3JldHVybiBlPT09dH1mdW5jdGlvbiBZXyhlKXtjb25zdHtwcmV2aW91c09wdGlvbnM6dCx1cGRhdGU6bixlcXVhbHM6cj1hSH09ZSxvPURhKHsuLi50LC4uLm59KSxpPWhlKCkscz15Zih0KTtmb3IoY29uc3QgbCBvZiBzKXtjb25zdCBjPXRbbF0sdT1vW2xdO2lmKHIoYyx1KSl7aVtsXT17Y2hhbmdlZDohMX07Y29udGludWV9aVtsXT17Y2hhbmdlZDohMCxwcmV2aW91c1ZhbHVlOmMsdmFsdWU6dX19Y29uc3QgYT1sPT57Y29uc3QgYz1oZSgpO2Zvcihjb25zdCB1IG9mIGwpe2NvbnN0IGQ9aVt1XTtkIT1udWxsJiZkLmNoYW5nZWQmJihjW3VdPWQudmFsdWUpfXJldHVybiBjfTtyZXR1cm57Y2hhbmdlczpEYShpKSxvcHRpb25zOm8scGlja0NoYW5nZWQ6YX19dmFyIGxIPXtbcS5EVVBMSUNBVEVfSEVMUEVSX05BTUVTXToiaGVscGVyIG1ldGhvZCIsW3EuRFVQTElDQVRFX0NPTU1BTkRfTkFNRVNdOiJjb21tYW5kIG1ldGhvZCJ9O2Z1bmN0aW9uIFdOKGUpe2NvbnN0e25hbWU6dCxzZXQ6bixjb2RlOnJ9PWUsbz1sSFtyXTtiZSghbi5oYXModCkse2NvZGU6cixtZXNzYWdlOmBUaGVyZSBpcyBhIG5hbWluZyBjb25mbGljdCBmb3IgdGhlIG5hbWU6ICR7dH0gdXNlZCBpbiB0aGlzICcke299Jy4gUGxlYXNlIHJlbmFtZSBvciByZW1vdmUgZnJvbSB0aGUgZWRpdG9yIHRvIGF2b2lkIHJ1bnRpbWUgZXJyb3JzLmB9KSxuLmFkZCh0KX1mdW5jdGlvbiBHeCguLi5lKXtyZXR1cm4geGYoU1YoLi4uZSkuc3BsaXQoIiAiKSkuam9pbigiICIpfXZhciBYXz0iX19JR05PUkVfXyIsY0g9Il9fQUxMX18iLGZ1PWNsYXNze2NvbnN0cnVjdG9yKGUsLi4uW3RdKXt0aGlzWyJ+TyJdPXt9LHRoaXMuX21hcHBlZEhhbmRsZXJzPWhlKCksdGhpcy5wb3B1bGF0ZU1hcHBlZEhhbmRsZXJzKCksdGhpcy5fb3B0aW9ucz10aGlzLl9pbml0aWFsT3B0aW9ucz1aeihlLHRoaXMuY29uc3RydWN0b3IuZGVmYXVsdE9wdGlvbnMsdD8/aGUoKSx0aGlzLmNyZWF0ZURlZmF1bHRIYW5kbGVyT3B0aW9ucygpKSx0aGlzLl9keW5hbWljS2V5cz10aGlzLmdldER5bmFtaWNLZXlzKCksdGhpcy5pbml0KCl9Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5fb3B0aW9uc31nZXQgZHluYW1pY0tleXMoKXtyZXR1cm4gdGhpcy5fZHluYW1pY0tleXN9Z2V0IGluaXRpYWxPcHRpb25zKCl7cmV0dXJuIHRoaXMuX2luaXRpYWxPcHRpb25zfWluaXQoKXt9Z2V0RHluYW1pY0tleXMoKXtjb25zdCBlPVtdLHtjdXN0b21IYW5kbGVyS2V5czp0LGhhbmRsZXJLZXlzOm4sc3RhdGljS2V5czpyfT10aGlzLmNvbnN0cnVjdG9yO2Zvcihjb25zdCBvIG9mIHlmKHRoaXMuX29wdGlvbnMpKXIuaW5jbHVkZXMobyl8fG4uaW5jbHVkZXMobyl8fHQuaW5jbHVkZXMobyl8fGUucHVzaChvKTtyZXR1cm4gZX1lbnN1cmVBbGxLZXlzQXJlRHluYW1pYyhlKXt9c2V0T3B0aW9ucyhlKXt2YXIgdDtjb25zdCBuPXRoaXMuZ2V0RHluYW1pY09wdGlvbnMoKTt0aGlzLmVuc3VyZUFsbEtleXNBcmVEeW5hbWljKGUpO2NvbnN0e2NoYW5nZXM6cixvcHRpb25zOm8scGlja0NoYW5nZWQ6aX09WV8oe3ByZXZpb3VzT3B0aW9uczpuLHVwZGF0ZTplfSk7dGhpcy51cGRhdGVEeW5hbWljT3B0aW9ucyhvKSwodD10aGlzLm9uU2V0T3B0aW9ucyk9PW51bGx8fHQuY2FsbCh0aGlzLHtyZWFzb246InNldCIsY2hhbmdlczpyLG9wdGlvbnM6byxwaWNrQ2hhbmdlZDppLGluaXRpYWxPcHRpb25zOnRoaXMuX2luaXRpYWxPcHRpb25zfSl9cmVzZXRPcHRpb25zKCl7dmFyIGU7Y29uc3QgdD10aGlzLmdldER5bmFtaWNPcHRpb25zKCkse2NoYW5nZXM6bixvcHRpb25zOnIscGlja0NoYW5nZWQ6b309WV8oe3ByZXZpb3VzT3B0aW9uczp0LHVwZGF0ZTp0aGlzLl9pbml0aWFsT3B0aW9uc30pO3RoaXMudXBkYXRlRHluYW1pY09wdGlvbnMociksKGU9dGhpcy5vblNldE9wdGlvbnMpPT1udWxsfHxlLmNhbGwodGhpcyx7cmVhc29uOiJyZXNldCIsb3B0aW9uczpyLGNoYW5nZXM6bixwaWNrQ2hhbmdlZDpvLGluaXRpYWxPcHRpb25zOnRoaXMuX2luaXRpYWxPcHRpb25zfSl9Z2V0RHluYW1pY09wdGlvbnMoKXtyZXR1cm4gSzEodGhpcy5fb3B0aW9ucyxbLi4udGhpcy5jb25zdHJ1Y3Rvci5jdXN0b21IYW5kbGVyS2V5cywuLi50aGlzLmNvbnN0cnVjdG9yLmhhbmRsZXJLZXlzXSl9dXBkYXRlRHluYW1pY09wdGlvbnMoZSl7dGhpcy5fb3B0aW9ucz17Li4udGhpcy5fb3B0aW9ucywuLi5lfX1wb3B1bGF0ZU1hcHBlZEhhbmRsZXJzKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5jb25zdHJ1Y3Rvci5oYW5kbGVyS2V5cyl0aGlzLl9tYXBwZWRIYW5kbGVyc1tlXT1bXX1jcmVhdGVEZWZhdWx0SGFuZGxlck9wdGlvbnMoKXtjb25zdCBlPWhlKCk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5jb25zdHJ1Y3Rvci5oYW5kbGVyS2V5cyllW3RdPSguLi5uKT0+e3ZhciByO2NvbnN0e2hhbmRsZXJLZXlPcHRpb25zOm99PXRoaXMuY29uc3RydWN0b3IsaT0ocj1vW3RdKT09bnVsbD92b2lkIDA6ci5yZWR1Y2VyO2xldCBzPWk9PW51bGw/dm9pZCAwOmkuZ2V0RGVmYXVsdCguLi5uKTtmb3IoY29uc3RbLGFdb2YgdGhpcy5fbWFwcGVkSGFuZGxlcnNbdF0pe2NvbnN0IGw9YSguLi5uKTtpZihzPWk/aS5hY2N1bXVsYXRvcihzLGwsLi4ubik6bCx1SChvLHMsdCkpcmV0dXJuIHN9cmV0dXJuIHN9O3JldHVybiBlfWFkZEhhbmRsZXIoZSx0LG49Y3QuRGVmYXVsdCl7cmV0dXJuIHRoaXMuX21hcHBlZEhhbmRsZXJzW2VdLnB1c2goW24sdF0pLHRoaXMuc29ydEhhbmRsZXJzKGUpLCgpPT50aGlzLl9tYXBwZWRIYW5kbGVyc1tlXT10aGlzLl9tYXBwZWRIYW5kbGVyc1tlXS5maWx0ZXIoKFsscl0pPT5yIT09dCl9aGFzSGFuZGxlcnMoZSl7cmV0dXJuKHRoaXMuX21hcHBlZEhhbmRsZXJzW2VdPz9bXSkubGVuZ3RoPjB9c29ydEhhbmRsZXJzKGUpe3RoaXMuX21hcHBlZEhhbmRsZXJzW2VdPWlsKHRoaXMuX21hcHBlZEhhbmRsZXJzW2VdLChbdF0sW25dKT0+bi10KX1hZGRDdXN0b21IYW5kbGVyKGUsdCl7dmFyIG47cmV0dXJuKChuPXRoaXMub25BZGRDdXN0b21IYW5kbGVyKT09bnVsbD92b2lkIDA6bi5jYWxsKHRoaXMse1tlXTp0fSkpPz9YTX19O2Z1LmRlZmF1bHRPcHRpb25zPXt9O2Z1LnN0YXRpY0tleXM9W107ZnUuaGFuZGxlcktleXM9W107ZnUuaGFuZGxlcktleU9wdGlvbnM9e307ZnUuY3VzdG9tSGFuZGxlcktleXM9W107ZnVuY3Rpb24gdUgoZSx0LG4pe2NvbnN0e1tjSF06cn09ZSxvPWVbbl07cmV0dXJuIXImJiFvPyExOiEhKG8mJm8uZWFybHlSZXR1cm5WYWx1ZSE9PVhfJiYocHQoby5lYXJseVJldHVyblZhbHVlKT9vLmVhcmx5UmV0dXJuVmFsdWUodCk9PT0hMDp0PT09by5lYXJseVJldHVyblZhbHVlKXx8ciYmci5lYXJseVJldHVyblZhbHVlIT09WF8mJihwdChyLmVhcmx5UmV0dXJuVmFsdWUpP3IuZWFybHlSZXR1cm5WYWx1ZSh0KT09PSEwOnQ9PT1yLmVhcmx5UmV0dXJuVmFsdWUpKX12YXIgYXY9Y2xhc3MgZXh0ZW5kcyBmdXtjb25zdHJ1Y3RvciguLi5lKXtzdXBlcihkSCwuLi5lKSx0aGlzWyJ+RSJdPXt9LHRoaXMuX2V4dGVuc2lvbnM9Wk0odGhpcy5jcmVhdGVFeHRlbnNpb25zKCksdD0+dC5jb25zdHJ1Y3RvciksdGhpcy5leHRlbnNpb25NYXA9bmV3IE1hcDtmb3IoY29uc3QgdCBvZiB0aGlzLl9leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uTWFwLnNldCh0LmNvbnN0cnVjdG9yLHQpfWdldCBwcmlvcml0eSgpe3JldHVybiB0aGlzLnByaW9yaXR5T3ZlcnJpZGU/P3RoaXMub3B0aW9ucy5wcmlvcml0eT8/dGhpcy5jb25zdHJ1Y3Rvci5kZWZhdWx0UHJpb3JpdHl9Z2V0IGNvbnN0cnVjdG9yTmFtZSgpe3JldHVybmAke0tNKHRoaXMubmFtZSl9RXh0ZW5zaW9uYH1nZXQgc3RvcmUoKXtyZXR1cm4gYmUodGhpcy5fc3RvcmUse2NvZGU6cS5NQU5BR0VSX1BIQVNFX0VSUk9SLG1lc3NhZ2U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gYWNjZXNzIHRoZSAnZXh0ZW5zaW9uLnN0b3JlJyB3aGVuIHRoZSBNYW5hZ2VyIGhhcyBub3QgeWV0IHNldCBjcmVhdGVkIHRoZSBsaWZlY3ljbGUgbWV0aG9kcy4ifSksRGEodGhpcy5fc3RvcmUse3JlcXVpcmVLZXlzOiEwfSl9Z2V0IGV4dGVuc2lvbnMoKXtyZXR1cm4gdGhpcy5fZXh0ZW5zaW9uc31yZXBsYWNlQ2hpbGRFeHRlbnNpb24oZSx0KXt0aGlzLmV4dGVuc2lvbk1hcC5oYXMoZSkmJih0aGlzLmV4dGVuc2lvbk1hcC5zZXQoZSx0KSx0aGlzLl9leHRlbnNpb25zPXRoaXMuZXh0ZW5zaW9ucy5tYXAobj0+dC5jb25zdHJ1Y3Rvcj09PWU/dDpuKSl9Y3JlYXRlRXh0ZW5zaW9ucygpe3JldHVybltdfWdldEV4dGVuc2lvbihlKXtjb25zdCB0PXRoaXMuZXh0ZW5zaW9uTWFwLmdldChlKTtyZXR1cm4gYmUodCx7Y29kZTpxLklOVkFMSURfR0VUX0VYVEVOU0lPTixtZXNzYWdlOmAnJHtlLm5hbWV9JyBkb2VzIG5vdCBleGlzdCB3aXRoaW4gdGhlIHByZXNldDogJyR7dGhpcy5uYW1lfSdgfSksdH1pc09mVHlwZShlKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvcj09PWV9c2V0U3RvcmUoZSl7dGhpcy5fc3RvcmV8fCh0aGlzLl9zdG9yZT1lKX1jbG9uZSguLi5lKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoLi4uZSl9c2V0UHJpb3JpdHkoZSl7dGhpcy5wcmlvcml0eU92ZXJyaWRlPWV9fTthdi5kZWZhdWx0UHJpb3JpdHk9Y3QuRGVmYXVsdDt2YXIgX3Q9Y2xhc3MgZXh0ZW5kcyBhdntzdGF0aWMgZ2V0W0lpXSgpe3JldHVybiBnbi5QbGFpbkV4dGVuc2lvbkNvbnN0cnVjdG9yfWdldFtJaV0oKXtyZXR1cm4gZ24uUGxhaW5FeHRlbnNpb259fSxjcD1jbGFzcyBleHRlbmRzIGF2e3N0YXRpYyBnZXRbSWldKCl7cmV0dXJuIGduLk1hcmtFeHRlbnNpb25Db25zdHJ1Y3Rvcn1nZXRbSWldKCl7cmV0dXJuIGduLk1hcmtFeHRlbnNpb259Z2V0IHR5cGUoKXtyZXR1cm4gUHQodGhpcy5zdG9yZS5zY2hlbWEubWFya3MsdGhpcy5uYW1lKX1jb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKX19O2NwLmRpc2FibGVFeHRyYUF0dHJpYnV0ZXM9ITE7dmFyIG9vPWNsYXNzIGV4dGVuZHMgYXZ7c3RhdGljIGdldFtJaV0oKXtyZXR1cm4gZ24uTm9kZUV4dGVuc2lvbkNvbnN0cnVjdG9yfWdldFtJaV0oKXtyZXR1cm4gZ24uTm9kZUV4dGVuc2lvbn1nZXQgdHlwZSgpe3JldHVybiBQdCh0aGlzLnN0b3JlLnNjaGVtYS5ub2Rlcyx0aGlzLm5hbWUpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpfX07b28uZGlzYWJsZUV4dHJhQXR0cmlidXRlcz0hMTt2YXIgZEg9e3ByaW9yaXR5OnZvaWQgMCxleHRyYUF0dHJpYnV0ZXM6e30sZGlzYWJsZUV4dHJhQXR0cmlidXRlczohMSxleGNsdWRlOnt9fTtmdW5jdGlvbiBLTihlKXtyZXR1cm4gdXUoZSkmJmR1KGUsW2duLlBsYWluRXh0ZW5zaW9uLGduLk1hcmtFeHRlbnNpb24sZ24uTm9kZUV4dGVuc2lvbl0pfWZ1bmN0aW9uIGZIKGUpe3JldHVybiB1dShlKSYmZHUoZSxbZ24uUGxhaW5FeHRlbnNpb25Db25zdHJ1Y3Rvcixnbi5NYXJrRXh0ZW5zaW9uQ29uc3RydWN0b3IsZ24uTm9kZUV4dGVuc2lvbkNvbnN0cnVjdG9yXSl9ZnVuY3Rpb24gcU4oZSl7cmV0dXJuIHV1KGUpJiZkdShlLGduLlBsYWluRXh0ZW5zaW9uKX1mdW5jdGlvbiB1cChlKXtyZXR1cm4gdXUoZSkmJmR1KGUsZ24uTm9kZUV4dGVuc2lvbil9ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIHV1KGUpJiZkdShlLGduLk1hcmtFeHRlbnNpb24pfWZ1bmN0aW9uIEplKGUpe3JldHVybiB0PT57Y29uc3R7ZGVmYXVsdE9wdGlvbnM6bixjdXN0b21IYW5kbGVyS2V5czpyLGhhbmRsZXJLZXlzOm8sc3RhdGljS2V5czppLGRlZmF1bHRQcmlvcml0eTpzLGhhbmRsZXJLZXlPcHRpb25zOmEsLi4ubH09ZSxjPXQ7biYmKGMuZGVmYXVsdE9wdGlvbnM9bikscyYmKGMuZGVmYXVsdFByaW9yaXR5PXMpLGEmJihjLmhhbmRsZXJLZXlPcHRpb25zPWEpLGMuc3RhdGljS2V5cz1pPz9bXSxjLmhhbmRsZXJLZXlzPW8/P1tdLGMuY3VzdG9tSGFuZGxlcktleXM9cj8/W107Zm9yKGNvbnN0W3UsZF1vZiBPYmplY3QuZW50cmllcyhsKSljW3VdfHwoY1t1XT1kKTtyZXR1cm4gY319dmFyIHBIPWNsYXNzIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYXR0cmlidXRlTGlzdD1bXSx0aGlzLmF0dHJpYnV0ZU9iamVjdD1oZSgpLHRoaXMudXBkYXRlQXR0cmlidXRlcz0oZT0hMCk9Pnt0aGlzLnRyYW5zZm9ybUF0dHJpYnV0ZXMoKSxlJiZ0aGlzLnN0b3JlLmNvbW1hbmRzLmZvcmNlVXBkYXRlKCJhdHRyaWJ1dGVzIil9fWdldCBuYW1lKCl7cmV0dXJuImF0dHJpYnV0ZXMifW9uQ3JlYXRlKCl7dGhpcy50cmFuc2Zvcm1BdHRyaWJ1dGVzKCksdGhpcy5zdG9yZS5zZXRFeHRlbnNpb25TdG9yZSgidXBkYXRlQXR0cmlidXRlcyIsdGhpcy51cGRhdGVBdHRyaWJ1dGVzKX10cmFuc2Zvcm1BdHRyaWJ1dGVzKCl7dmFyIGUsdCxuO2lmKHRoaXMuYXR0cmlidXRlT2JqZWN0PWhlKCksKGU9dGhpcy5zdG9yZS5tYW5hZ2VyU2V0dGluZ3MuZXhjbHVkZSkhPW51bGwmJmUuYXR0cmlidXRlcyl7dGhpcy5zdG9yZS5zZXRTdG9yZUtleSgiYXR0cmlidXRlcyIsdGhpcy5hdHRyaWJ1dGVPYmplY3QpO3JldHVybn10aGlzLmF0dHJpYnV0ZUxpc3Q9W107Zm9yKGNvbnN0IHIgb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKXtpZigodD1yLm9wdGlvbnMuZXhjbHVkZSkhPW51bGwmJnQuYXR0cmlidXRlcyljb250aW51ZTtjb25zdCBvPShuPXIuY3JlYXRlQXR0cmlidXRlcyk9PW51bGw/dm9pZCAwOm4uY2FsbChyKSxpPXsuLi5vLGNsYXNzOkd4KC4uLnIuY2xhc3NOYW1lcz8/W10sbz09bnVsbD92b2lkIDA6by5jbGFzcyl9O3RoaXMuYXR0cmlidXRlTGlzdC51bnNoaWZ0KGkpfWZvcihjb25zdCByIG9mIHRoaXMuYXR0cmlidXRlTGlzdCl0aGlzLmF0dHJpYnV0ZU9iamVjdD17Li4udGhpcy5hdHRyaWJ1dGVPYmplY3QsLi4ucixjbGFzczpHeCh0aGlzLmF0dHJpYnV0ZU9iamVjdC5jbGFzcyxyLmNsYXNzKX07dGhpcy5zdG9yZS5zZXRTdG9yZUtleSgiYXR0cmlidXRlcyIsdGhpcy5hdHRyaWJ1dGVPYmplY3QpfX07ZnVuY3Rpb24gSXQoZT17fSl7cmV0dXJuKHQsbixyKT0+eyh0LmRlY29yYXRlZEhlbHBlcnM/Pyh0LmRlY29yYXRlZEhlbHBlcnM9e30pKVtuXT1lfX1mdW5jdGlvbiBkZShlPXt9KXtyZXR1cm4odCxuLHIpPT57KHQuZGVjb3JhdGVkQ29tbWFuZHM/Pyh0LmRlY29yYXRlZENvbW1hbmRzPXt9KSlbbl09ZX19ZnVuY3Rpb24gTHIoZSl7cmV0dXJuKHQsbixyKT0+eyh0LmRlY29yYXRlZEtleWJpbmRpbmdzPz8odC5kZWNvcmF0ZWRLZXliaW5kaW5ncz17fSkpW25dPWV9fXZhciBoSD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnByb21pc2VDcmVhdG9yPWUsdGhpcy5mYWlsdXJlSGFuZGxlcnM9W10sdGhpcy5zdWNjZXNzSGFuZGxlcnM9W10sdGhpcy52YWxpZGF0ZUhhbmRsZXJzPVtdLHRoaXMuZ2VuZXJhdGVDb21tYW5kPSgpPT50PT57bGV0IG49ITA7Y29uc3R7dmlldzpyLHRyOm8sZGlzcGF0Y2g6aX09dDtpZighcilyZXR1cm4hMTtmb3IoY29uc3QgYSBvZiB0aGlzLnZhbGlkYXRlSGFuZGxlcnMpaWYoIWEoey4uLnQsZGlzcGF0Y2g6KCk9Pnt9fSkpe249ITE7YnJlYWt9cmV0dXJuIWl8fCFuP246KHRoaXMucHJvbWlzZUNyZWF0b3IodCkudGhlbihhPT57dGhpcy5ydW5IYW5kbGVycyh0aGlzLnN1Y2Nlc3NIYW5kbGVycyx7dmFsdWU6YSxzdGF0ZTpyLnN0YXRlLHRyOnIuc3RhdGUudHIsZGlzcGF0Y2g6ci5kaXNwYXRjaCx2aWV3OnJ9KX0pLmNhdGNoKGE9Pnt0aGlzLnJ1bkhhbmRsZXJzKHRoaXMuZmFpbHVyZUhhbmRsZXJzLHtlcnJvcjphLHN0YXRlOnIuc3RhdGUsdHI6ci5zdGF0ZS50cixkaXNwYXRjaDpyLmRpc3BhdGNoLHZpZXc6cn0pfSksaShvKSwhMCl9fXZhbGlkYXRlKGUsdD0icHVzaCIpe3JldHVybiB0aGlzLnZhbGlkYXRlSGFuZGxlcnNbdF0oZSksdGhpc31zdWNjZXNzKGUsdD0icHVzaCIpe3JldHVybiB0aGlzLnN1Y2Nlc3NIYW5kbGVyc1t0XShlKSx0aGlzfWZhaWx1cmUoZSx0PSJwdXNoIil7cmV0dXJuIHRoaXMuZmFpbHVyZUhhbmRsZXJzW3RdKGUpLHRoaXN9cnVuSGFuZGxlcnMoZSx0KXt2YXIgbjtmb3IoY29uc3QgciBvZiBlKWlmKCFyKHsuLi50LGRpc3BhdGNoOigpPT57fX0pKWJyZWFrOyhuPXQuZGlzcGF0Y2gpPT1udWxsfHxuLmNhbGwodCx0LnRyKX19O2Z1bmN0aW9uIE9mKGUpe2NvbnN0e3R5cGU6dCxhdHRyczpuLHJhbmdlOnIsc2VsZWN0aW9uOm99PWU7cmV0dXJuIGk9Pntjb25zdHtkaXNwYXRjaDpzLHRyOmEsc3RhdGU6bH09aSxjPV9lKHQpP2wuc2NoZW1hLm1hcmtzW3RdOnQ7aWYoYmUoYyx7Y29kZTpxLlNDSEVNQSxtZXNzYWdlOmBNYXJrIHR5cGU6ICR7dH0gZG9lcyBub3QgZXhpc3Qgb24gdGhlIGN1cnJlbnQgc2NoZW1hLmB9KSxyfHxvKXtjb25zdHtmcm9tOnUsdG86ZH09SnIobz8/cj8/YS5zZWxlY3Rpb24sYS5kb2MpO3JldHVybiBqbSh7dHJTdGF0ZTphLHR5cGU6dCwuLi5yfSk/cz09bnVsbHx8cyhhLnJlbW92ZU1hcmsodSxkLGMpKTpzPT1udWxsfHxzKGEuYWRkTWFyayh1LGQsYy5jcmVhdGUobikpKSwhMH1yZXR1cm4gSWQoelYoYyxuKSkoaSl9fWZ1bmN0aW9uIG1IKGUsdCxuKXtmb3IoY29uc3R7JGZyb206ciwkdG86b31vZiBuKXtsZXQgaT1yLmRlcHRoPT09MD90LnR5cGUuYWxsb3dzTWFya1R5cGUoZSk6ITE7aWYodC5ub2Rlc0JldHdlZW4oci5wb3Msby5wb3Mscz0+e2lmKGkpcmV0dXJuITE7aT1zLmlubGluZUNvbnRlbnQmJnMudHlwZS5hbGxvd3NNYXJrVHlwZShlKX0pLGkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZ0goZSx0LG4pe3JldHVybih7dHI6cixkaXNwYXRjaDpvLHN0YXRlOml9KT0+e2NvbnN0IHM9SnIobj8/ci5zZWxlY3Rpb24sci5kb2MpLGE9blYocyksbD1fZShlKT9pLnNjaGVtYS5tYXJrc1tlXTplO2lmKGJlKGwse2NvZGU6cS5TQ0hFTUEsbWVzc2FnZTpgTWFyayB0eXBlOiAke2V9IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBjdXJyZW50IHNjaGVtYS5gfSkscy5lbXB0eSYmIWF8fCFtSChsLHIuZG9jLHMucmFuZ2VzKSlyZXR1cm4hMTtpZighbylyZXR1cm4hMDtpZihhKXJldHVybiByLnJlbW92ZVN0b3JlZE1hcmsobCksdCYmci5hZGRTdG9yZWRNYXJrKGwuY3JlYXRlKHQpKSxvKHIpLCEwO2xldCBjPSExO2Zvcihjb25zdHskZnJvbTp1LCR0bzpkfW9mIHMucmFuZ2VzKXtpZihjKWJyZWFrO2M9ci5kb2MucmFuZ2VIYXNNYXJrKHUucG9zLGQucG9zLGwpfWZvcihjb25zdHskZnJvbTp1LCR0bzpkfW9mIHMucmFuZ2VzKWMmJnIucmVtb3ZlTWFyayh1LnBvcyxkLnBvcyxsKSx0JiZyLmFkZE1hcmsodS5wb3MsZC5wb3MsbC5jcmVhdGUodCkpO3JldHVybiBvKHIpLCEwfX1mdW5jdGlvbiB2SChlLHQ9e30pe3JldHVybih7dHI6bixkaXNwYXRjaDpyLHN0YXRlOm99KT0+e2NvbnN0IGk9by5zY2hlbWEscz1uLnNlbGVjdGlvbix7ZnJvbTphPXMuZnJvbSx0bzpsPWE/P3MudG8sbWFya3M6Yz17fX09dDtpZighcilyZXR1cm4hMDtuLmluc2VydFRleHQoZSxhLGwpO2NvbnN0IHU9UHQobi5zdGVwcyxuLnN0ZXBzLmxlbmd0aC0xKS5nZXRNYXAoKS5tYXAobCk7Zm9yKGNvbnN0W2QsZl1vZiBKdChjKSluLmFkZE1hcmsoYSx1LFB0KGkubWFya3MsZCkuY3JlYXRlKGYpKTtyZXR1cm4gcihuKSwhMH19dmFyIFZlPWNsYXNzIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGVjb3JhdGVkPW5ldyBNYXAsdGhpcy5mb3JjZVVwZGF0ZVRyYW5zYWN0aW9uPShlLC4uLnQpPT57Y29uc3R7Zm9yY2VkVXBkYXRlczpufT10aGlzLmdldENvbW1hbmRNZXRhKGUpO3JldHVybiB0aGlzLnNldENvbW1hbmRNZXRhKGUse2ZvcmNlZFVwZGF0ZXM6eGYoWy4uLm4sLi4udF0pfSksZX19Z2V0IG5hbWUoKXtyZXR1cm4iY29tbWFuZHMifWdldCB0cmFuc2FjdGlvbigpe2NvbnN0IGU9dGhpcy5zdG9yZS5nZXRTdGF0ZSgpO3RoaXMuX3RyYW5zYWN0aW9ufHwodGhpcy5fdHJhbnNhY3Rpb249ZS50cik7Y29uc3QgdD10aGlzLl90cmFuc2FjdGlvbi5iZWZvcmUuZXEoZS5kb2MpLG49IUpzKHRoaXMuX3RyYW5zYWN0aW9uLnN0ZXBzKTtpZighdCl7Y29uc3Qgcj1lLnRyO2lmKG4pZm9yKGNvbnN0IG8gb2YgdGhpcy5fdHJhbnNhY3Rpb24uc3RlcHMpci5zdGVwKG8pO3RoaXMuX3RyYW5zYWN0aW9uPXJ9cmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9ufW9uQ3JlYXRlKCl7dGhpcy5zdG9yZS5zZXRTdG9yZUtleSgiZ2V0Rm9yY2VkVXBkYXRlcyIsdGhpcy5nZXRGb3JjZWRVcGRhdGVzLmJpbmQodGhpcykpfW9uVmlldyhlKXt2YXIgdDtjb25zdHtleHRlbnNpb25zOm4saGVscGVyczpyfT10aGlzLnN0b3JlLG89aGUoKSxpPW5ldyBTZXQ7bGV0IHM9aGUoKTtjb25zdCBhPWM9Pnt2YXIgdTtjb25zdCBkPWhlKCksZj0oKT0+Yz8/dGhpcy50cmFuc2FjdGlvbjtsZXQgcD1bXTtjb25zdCBtPSgpPT5wO2Zvcihjb25zdFt5LHZdb2YgT2JqZWN0LmVudHJpZXMobykpKHU9c1t5XSkhPW51bGwmJnUuZGlzYWJsZUNoYWluaW5nfHwoZFt5XT10aGlzLmNoYWluZWRGYWN0b3J5KHtjaGFpbjpkLGNvbW1hbmQ6di5vcmlnaW5hbCxnZXRUcjpmLGdldENoYWluOm19KSk7Y29uc3QgZz15PT57YmUoeT09PWYoKSx7bWVzc2FnZToiQ2hhaW5pbmcgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYENvbW1hbmRGdW5jdGlvbmAgbWV0aG9kcyB3aGljaCBkbyBub3QgdXNlIHRoZSBgc3RhdGUudHJgIHByb3BlcnR5LiBJbnN0ZWFkIHlvdSBzaG91bGQgdXNlIHRoZSBwcm92aWRlZCBgdHJgIHByb3BlcnR5LiJ9KX07cmV0dXJuIGQucnVuPSh5PXt9KT0+e2NvbnN0IHY9cDtwPVtdO2Zvcihjb25zdCB4IG9mIHYpaWYoIXgoZykmJnkuZXhpdEVhcmx5KXJldHVybjtlLmRpc3BhdGNoKGYoKSl9LGQudHI9KCk9Pntjb25zdCB5PXA7cD1bXTtmb3IoY29uc3QgdiBvZiB5KXYoZyk7cmV0dXJuIGYoKX0sZC5lbmFibGVkPSgpPT57Zm9yKGNvbnN0IHkgb2YgcClpZigheSgpKXJldHVybiExO3JldHVybiEwfSxkLm5ldz15PT5hKHkpLGR9O2Zvcihjb25zdCBjIG9mIG4pe2NvbnN0IHU9KCh0PWMuY3JlYXRlQ29tbWFuZHMpPT1udWxsP3ZvaWQgMDp0LmNhbGwoYykpPz97fSxkPWMuZGVjb3JhdGVkQ29tbWFuZHM/P3t9LGY9e307cz17Li4ucyxkZWNvcmF0ZWRDb21tYW5kczpkfTtmb3IoY29uc3RbcCxtXW9mIE9iamVjdC5lbnRyaWVzKGQpKXtjb25zdCBnPV9lKG0uc2hvcnRjdXQpJiZtLnNob3J0Y3V0LnN0YXJ0c1dpdGgoIl98Iik/e3Nob3J0Y3V0OnIuZ2V0TmFtZWRTaG9ydGN1dChtLnNob3J0Y3V0LGMub3B0aW9ucyl9OnZvaWQgMDt0aGlzLnVwZGF0ZURlY29yYXRlZChwLHsuLi5tLG5hbWU6Yy5uYW1lLC4uLmd9KSx1W3BdPWNbcF0uYmluZChjKSxtLmFjdGl2ZSYmKGZbcF09KCk9Pnt2YXIgeTtyZXR1cm4oKHk9bS5hY3RpdmUpPT1udWxsP3ZvaWQgMDp5LmNhbGwobSxjLm9wdGlvbnMsdGhpcy5zdG9yZSkpPz8hMX0pfVNtKHUpfHx0aGlzLmFkZENvbW1hbmRzKHthY3RpdmU6ZixuYW1lczppLGNvbW1hbmRzOm8sZXh0ZW5zaW9uQ29tbWFuZHM6dX0pfWNvbnN0IGw9YSgpO2Zvcihjb25zdFtjLHVdb2YgT2JqZWN0LmVudHJpZXMobCkpYVtjXT11O3RoaXMuc3RvcmUuc2V0U3RvcmVLZXkoImNvbW1hbmRzIixvKSx0aGlzLnN0b3JlLnNldFN0b3JlS2V5KCJjaGFpbiIsYSksdGhpcy5zdG9yZS5zZXRFeHRlbnNpb25TdG9yZSgiY29tbWFuZHMiLG8pLHRoaXMuc3RvcmUuc2V0RXh0ZW5zaW9uU3RvcmUoImNoYWluIixhKX1vblN0YXRlVXBkYXRlKHtzdGF0ZTplfSl7dGhpcy5fdHJhbnNhY3Rpb249ZS50cn1jcmVhdGVQbHVnaW4oKXtyZXR1cm57fX1jdXN0b21EaXNwYXRjaChlKXtyZXR1cm4gZX1pbnNlcnRUZXh0KGUsdD17fSl7cmV0dXJuIF9lKGUpP3ZIKGUsdCk6dGhpcy5zdG9yZS5jcmVhdGVQbGFjZWhvbGRlckNvbW1hbmQoe3Byb21pc2U6ZSxwbGFjZWhvbGRlcjp7dHlwZToiaW5saW5lIn0sb25TdWNjZXNzOihuLHIsbyk9PnRoaXMuaW5zZXJ0VGV4dChuLHsuLi50LC4uLnJ9KShvKX0pLmdlbmVyYXRlQ29tbWFuZCgpfXNlbGVjdFRleHQoZSx0PXt9KXtyZXR1cm4oe3RyOm4sZGlzcGF0Y2g6cn0pPT57Y29uc3Qgbz1KcihlLG4uZG9jKTtyZXR1cm4gbi5zZWxlY3Rpb24uYW5jaG9yPT09by5hbmNob3ImJm4uc2VsZWN0aW9uLmhlYWQ9PT1vLmhlYWQmJiF0LmZvcmNlVXBkYXRlPyExOihyPT1udWxsfHxyKG4uc2V0U2VsZWN0aW9uKG8pKSwhMCl9fXNlbGVjdE1hcmsoZSl7cmV0dXJuIHQ9Pntjb25zdHt0cjpufT10LHI9TGkobi5zZWxlY3Rpb24uJGZyb20sZSk7cmV0dXJuIHI/dGhpcy5zdG9yZS5jb21tYW5kcy5zZWxlY3RUZXh0Lm9yaWdpbmFsKHtmcm9tOnIuZnJvbSx0bzpyLnRvfSkodCk6ITF9fWRlbGV0ZShlKXtyZXR1cm4oe3RyOnQsZGlzcGF0Y2g6bn0pPT57Y29uc3R7ZnJvbTpyLHRvOm99PWU/P3Quc2VsZWN0aW9uO3JldHVybiBuPT1udWxsfHxuKHQuZGVsZXRlKHIsbykpLCEwfX1lbXB0eVVwZGF0ZShlKXtyZXR1cm4oe3RyOnQsZGlzcGF0Y2g6bn0pPT4obiYmKGU9PW51bGx8fGUoKSxuKHQpKSwhMCl9Zm9yY2VVcGRhdGUoLi4uZSl7cmV0dXJuKHt0cjp0LGRpc3BhdGNoOm59KT0+KG49PW51bGx8fG4odGhpcy5mb3JjZVVwZGF0ZVRyYW5zYWN0aW9uKHQsLi4uZSkpLCEwKX11cGRhdGVOb2RlQXR0cmlidXRlcyhlLHQpe3JldHVybih7dHI6bixkaXNwYXRjaDpyfSk9PihyPT1udWxsfHxyKG4uc2V0Tm9kZU1hcmt1cChlLHZvaWQgMCx0KSksITApfXNldENvbnRlbnQoZSx0KXtyZXR1cm4gbj0+e2NvbnN0e3RyOnIsZGlzcGF0Y2g6b309bixpPXRoaXMuc3RvcmUubWFuYWdlci5jcmVhdGVTdGF0ZSh7Y29udGVudDplLHNlbGVjdGlvbjp0fSk7cmV0dXJuIGk/KG89PW51bGx8fG8oci5yZXBsYWNlUmFuZ2VXaXRoKDAsci5kb2Mubm9kZVNpemUtMixpLmRvYykpLCEwKTohMX19cmVzZXRDb250ZW50KCl7cmV0dXJuIGU9Pntjb25zdHt0cjp0LGRpc3BhdGNoOm59PWUscj10aGlzLnN0b3JlLm1hbmFnZXIuY3JlYXRlRW1wdHlEb2MoKTtyZXR1cm4gcj90aGlzLnNldENvbnRlbnQocikoZSk6KG49PW51bGx8fG4odC5kZWxldGUoMCx0LmRvYy5ub2RlU2l6ZSkpLCEwKX19ZW1wdHlTZWxlY3Rpb24oKXtyZXR1cm4oe3RyOmUsZGlzcGF0Y2g6dH0pPT5lLnNlbGVjdGlvbi5lbXB0eT8hMToodD09bnVsbHx8dChlLnNldFNlbGVjdGlvbihUZS5uZWFyKGUuc2VsZWN0aW9uLiRhbmNob3IpKSksITApfWluc2VydE5ld0xpbmUoKXtyZXR1cm4oe2Rpc3BhdGNoOmUsdHI6dH0pPT53bCh0LnNlbGVjdGlvbik/KGU9PW51bGx8fGUodC5pbnNlcnRUZXh0KGAKYCkpLCEwKTohMX1pbnNlcnROb2RlKGUsdD17fSl7cmV0dXJuKHtkaXNwYXRjaDpuLHRyOnIsc3RhdGU6b30pPT57dmFyIGk7Y29uc3R7YXR0cnM6cyxyYW5nZTphLHNlbGVjdGlvbjpsLHJlcGxhY2VFbXB0eVBhcmVudEJsb2NrOmM9ITF9PXQse2Zyb206dSx0bzpkLCRmcm9tOmZ9PUpyKGw/P2E/P3Iuc2VsZWN0aW9uLHIuZG9jKTtpZihudihlKXx8S1UoZSkpe2NvbnN0IHY9Zi5iZWZvcmUoZi5kZXB0aCk7cmV0dXJuIG49PW51bGx8fG4oYyYmdT09PWQmJmd3KGYucGFyZW50KT9yLnJlcGxhY2VXaXRoKHYsditmLnBhcmVudC5ub2RlU2l6ZSxlKTpyLnJlcGxhY2VXaXRoKHUsZCxlKSksITB9Y29uc3QgcD1fZShlKT9vLnNjaGVtYS5ub2Rlc1tlXTplO2JlKHAse2NvZGU6cS5TQ0hFTUEsbWVzc2FnZTpgVGhlIHJlcXVlc3RlZCBub2RlIHR5cGUgJHtlfSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc2NoZW1hLmB9KTtjb25zdCBtPShpPXQubWFya3MpPT1udWxsP3ZvaWQgMDppLm1hcCh2PT57aWYodiBpbnN0YW5jZW9mIFllKXJldHVybiB2O2NvbnN0IHg9X2Uodik/by5zY2hlbWEubWFya3Nbdl06djtyZXR1cm4gYmUoeCx7Y29kZTpxLlNDSEVNQSxtZXNzYWdlOmBUaGUgcmVxdWVzdGVkIG1hcmsgdHlwZSAke3Z9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBzY2hlbWEuYH0pLHguY3JlYXRlKCl9KSxnPXAuY3JlYXRlQW5kRmlsbChzLF9lKHQuY29udGVudCk/by5zY2hlbWEudGV4dCh0LmNvbnRlbnQpOnQuY29udGVudCxtKTtpZighZylyZXR1cm4hMTtjb25zdCB5PXUhPT1kO3JldHVybiBuPT1udWxsfHxuKHk/ci5yZXBsYWNlUmFuZ2VXaXRoKHUsZCxnKTpyLmluc2VydCh1LGcpKSwhMH19Zm9jdXMoZSl7cmV0dXJuIHQ9Pntjb25zdHtkaXNwYXRjaDpuLHRyOnJ9PXQse3ZpZXc6b309dGhpcy5zdG9yZTtpZihlPT09ITF8fG8uaGFzRm9jdXMoKSYmKGU9PT12b2lkIDB8fGU9PT0hMCkpcmV0dXJuITE7aWYoZT09PXZvaWQgMHx8ZT09PSEwKXtjb25zdHtmcm9tOmk9MCx0bzpzPWl9PXIuc2VsZWN0aW9uO2U9e2Zyb206aSx0bzpzfX1yZXR1cm4gbiYmdGhpcy5kZWxheWVkRm9jdXMoKSx0aGlzLnNlbGVjdFRleHQoZSkodCl9fWJsdXIoZSl7cmV0dXJuIHQ9Pntjb25zdHt2aWV3Om59PXRoaXMuc3RvcmU7cmV0dXJuIG4uaGFzRm9jdXMoKT8ocmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bi5kb20uYmx1cigpfSksZT90aGlzLnNlbGVjdFRleHQoZSkodCk6ITApOiExfX1zZXRCbG9ja05vZGVUeXBlKGUsdCxuLHI9ITApe3JldHVybiB6bShlLHQsbixyKX10b2dnbGVXcmFwcGluZ05vZGUoZSx0LG4pe3JldHVybiBnVihlLHQsbil9dG9nZ2xlQmxvY2tOb2RlSXRlbShlKXtyZXR1cm4gTk4oZSl9d3JhcEluTm9kZShlLHQsbil7cmV0dXJuIFJOKGUsdCxuKX1hcHBseU1hcmsoZSx0LG4pe3JldHVybiBnSChlLHQsbil9dG9nZ2xlTWFyayhlKXtyZXR1cm4gT2YoZSl9cmVtb3ZlTWFyayhlKXtyZXR1cm4gQU4oZSl9c2V0TWV0YShlLHQpe3JldHVybih7dHI6bn0pPT4obi5zZXRNZXRhKGUsdCksITApfXNlbGVjdEFsbCgpe3JldHVybiB0aGlzLnNlbGVjdFRleHQoImFsbCIpfWNvcHkoKXtyZXR1cm4gZT0+ZS50ci5zZWxlY3Rpb24uZW1wdHk/ITE6KGUuZGlzcGF0Y2gmJmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksITApfXBhc3RlKCl7cmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlUGxhY2Vob2xkZXJDb21tYW5kKHtwcm9taXNlOmFzeW5jKCk9Pnt2YXIgZTtyZXR1cm4oZT1uYXZpZ2F0b3IuY2xpcGJvYXJkKSE9bnVsbCYmZS5yZWFkVGV4dD9hd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLnJlYWRUZXh0KCk6IiJ9LHBsYWNlaG9sZGVyOnt0eXBlOiJpbmxpbmUifSxvblN1Y2Nlc3M6KGUsdCxuKT0+dGhpcy5pbnNlcnROb2RlKEt4KHtjb250ZW50OmUsc2NoZW1hOm4uc3RhdGUuc2NoZW1hfSkse3NlbGVjdGlvbjp0fSkobil9KS5nZW5lcmF0ZUNvbW1hbmQoKX1jdXQoKXtyZXR1cm4gZT0+ZS50ci5zZWxlY3Rpb24uZW1wdHk/ITE6KGUuZGlzcGF0Y2gmJmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjdXQiKSwhMCl9cmVwbGFjZVRleHQoZSl7cmV0dXJuIHhWKGUpfWdldEFsbENvbW1hbmRPcHRpb25zKCl7Y29uc3QgZT17fTtmb3IoY29uc3RbdCxuXW9mIHRoaXMuZGVjb3JhdGVkKVNtKG4pfHwoZVt0XT1uKTtyZXR1cm4gZX1nZXRDb21tYW5kT3B0aW9ucyhlKXtyZXR1cm4gdGhpcy5kZWNvcmF0ZWQuZ2V0KGUpfWdldENvbW1hbmRQcm9wKCl7cmV0dXJue3RyOnRoaXMudHJhbnNhY3Rpb24sZGlzcGF0Y2g6dGhpcy5zdG9yZS52aWV3LmRpc3BhdGNoLHN0YXRlOnRoaXMuc3RvcmUudmlldy5zdGF0ZSx2aWV3OnRoaXMuc3RvcmUudmlld319dXBkYXRlRGVjb3JhdGVkKGUsdCl7aWYoIXQpe3RoaXMuZGVjb3JhdGVkLmRlbGV0ZShlKTtyZXR1cm59Y29uc3Qgbj10aGlzLmRlY29yYXRlZC5nZXQoZSk/P3tuYW1lOiIifTt0aGlzLmRlY29yYXRlZC5zZXQoZSx7Li4ubiwuLi50fSl9aGFuZGxlSW9zRm9jdXMoKXt4by5pc0lvcyYmdGhpcy5zdG9yZS52aWV3LmRvbS5mb2N1cygpfWRlbGF5ZWRGb2N1cygpe3RoaXMuaGFuZGxlSW9zRm9jdXMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnN0b3JlLnZpZXcuZm9jdXMoKSx0aGlzLnN0b3JlLnZpZXcuZGlzcGF0Y2godGhpcy50cmFuc2FjdGlvbi5zY3JvbGxJbnRvVmlldygpKX0pfWdldEZvcmNlZFVwZGF0ZXMoZSl7cmV0dXJuIHRoaXMuZ2V0Q29tbWFuZE1ldGEoZSkuZm9yY2VkVXBkYXRlc31nZXRDb21tYW5kTWV0YShlKXtjb25zdCB0PWUuZ2V0TWV0YSh0aGlzLnBsdWdpbktleSk/P3t9O3JldHVybnsuLi55SCwuLi50fX1zZXRDb21tYW5kTWV0YShlLHQpe2NvbnN0IG49dGhpcy5nZXRDb21tYW5kTWV0YShlKTtlLnNldE1ldGEodGhpcy5wbHVnaW5LZXksey4uLm4sLi4udH0pfWFkZENvbW1hbmRzKGUpe2NvbnN0e2V4dGVuc2lvbkNvbW1hbmRzOnQsY29tbWFuZHM6bixuYW1lczpyLGFjdGl2ZTpvfT1lO2Zvcihjb25zdFtpLHNdb2YgSnQodCkpV04oe25hbWU6aSxzZXQ6cixjb2RlOnEuRFVQTElDQVRFX0NPTU1BTkRfTkFNRVN9KSxiZSgheEguaGFzKGkpLHtjb2RlOnEuRFVQTElDQVRFX0NPTU1BTkRfTkFNRVMsbWVzc2FnZToiVGhlIGNvbW1hbmQgbmFtZSB5b3UgY2hvc2UgaXMgZm9yYmlkZGVuLiJ9KSxuW2ldPXRoaXMuY3JlYXRlVW5jaGFpbmVkQ29tbWFuZChzLG9baV0pfXVuY2hhaW5lZEZhY3RvcnkoZSl7cmV0dXJuKC4uLnQpPT57Y29uc3R7c2hvdWxkRGlzcGF0Y2g6bj0hMCxjb21tYW5kOnJ9PWUse3ZpZXc6b309dGhpcy5zdG9yZSx7c3RhdGU6aX09bztsZXQgcztyZXR1cm4gbiYmKHM9by5kaXNwYXRjaCksciguLi50KSh7c3RhdGU6aSxkaXNwYXRjaDpzLHZpZXc6byx0cjppLnRyfSl9fWNyZWF0ZVVuY2hhaW5lZENvbW1hbmQoZSx0KXtjb25zdCBuPXRoaXMudW5jaGFpbmVkRmFjdG9yeSh7Y29tbWFuZDplfSk7cmV0dXJuIG4uZW5hYmxlZD10aGlzLnVuY2hhaW5lZEZhY3Rvcnkoe2NvbW1hbmQ6ZSxzaG91bGREaXNwYXRjaDohMX0pLG4uaXNFbmFibGVkPW4uZW5hYmxlZCxuLm9yaWdpbmFsPWUsbi5hY3RpdmU9dCxufWNoYWluZWRGYWN0b3J5KGUpe3JldHVybiguLi50KT0+e2NvbnN0e2NoYWluOm4sY29tbWFuZDpyLGdldFRyOm8sZ2V0Q2hhaW46aX09ZSxzPWkoKSx7dmlldzphfT10aGlzLnN0b3JlLHtzdGF0ZTpsfT1hO3JldHVybiBzLnB1c2goYz0+ciguLi50KSh7c3RhdGU6bCxkaXNwYXRjaDpjLHZpZXc6YSx0cjpvKCl9KSksbn19fTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJjdXN0b21EaXNwYXRjaCIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwiaW5zZXJ0VGV4dCIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwic2VsZWN0VGV4dCIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwic2VsZWN0TWFyayIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwiZGVsZXRlIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJlbXB0eVVwZGF0ZSIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwiZm9yY2VVcGRhdGUiLDEpO2xlKFtkZSgpXSxWZS5wcm90b3R5cGUsInVwZGF0ZU5vZGVBdHRyaWJ1dGVzIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJzZXRDb250ZW50IiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJyZXNldENvbnRlbnQiLDEpO2xlKFtkZSgpXSxWZS5wcm90b3R5cGUsImVtcHR5U2VsZWN0aW9uIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJpbnNlcnROZXdMaW5lIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJpbnNlcnROb2RlIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJmb2N1cyIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwiYmx1ciIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwic2V0QmxvY2tOb2RlVHlwZSIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwidG9nZ2xlV3JhcHBpbmdOb2RlIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJ0b2dnbGVCbG9ja05vZGVJdGVtIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJ3cmFwSW5Ob2RlIiwxKTtsZShbZGUoKV0sVmUucHJvdG90eXBlLCJhcHBseU1hcmsiLDEpO2xlKFtkZSgpXSxWZS5wcm90b3R5cGUsInRvZ2dsZU1hcmsiLDEpO2xlKFtkZSgpXSxWZS5wcm90b3R5cGUsInJlbW92ZU1hcmsiLDEpO2xlKFtkZSgpXSxWZS5wcm90b3R5cGUsInNldE1ldGEiLDEpO2xlKFtkZSh7ZGVzY3JpcHRpb246KHt0OmV9KT0+ZShRcy5TRUxFQ1RfQUxMX0RFU0NSSVBUSU9OKSxsYWJlbDooe3Q6ZX0pPT5lKFFzLlNFTEVDVF9BTExfTEFCRUwpLHNob3J0Y3V0OlkuU2VsZWN0QWxsfSldLFZlLnByb3RvdHlwZSwic2VsZWN0QWxsIiwxKTtsZShbZGUoe2Rlc2NyaXB0aW9uOih7dDplfSk9PmUoUXMuQ09QWV9ERVNDUklQVElPTiksbGFiZWw6KHt0OmV9KT0+ZShRcy5DT1BZX0xBQkVMKSxzaG9ydGN1dDpZLkNvcHksaWNvbjoiZmlsZUNvcHlMaW5lIn0pXSxWZS5wcm90b3R5cGUsImNvcHkiLDEpO2xlKFtkZSh7ZGVzY3JpcHRpb246KHt0OmV9KT0+ZShRcy5QQVNURV9ERVNDUklQVElPTiksbGFiZWw6KHt0OmV9KT0+ZShRcy5QQVNURV9MQUJFTCksc2hvcnRjdXQ6WS5QYXN0ZSxpY29uOiJjbGlwYm9hcmRMaW5lIn0pXSxWZS5wcm90b3R5cGUsInBhc3RlIiwxKTtsZShbZGUoe2Rlc2NyaXB0aW9uOih7dDplfSk9PmUoUXMuQ1VUX0RFU0NSSVBUSU9OKSxsYWJlbDooe3Q6ZX0pPT5lKFFzLkNVVF9MQUJFTCksc2hvcnRjdXQ6WS5DdXQsaWNvbjoic2Npc3NvcnNGaWxsIn0pXSxWZS5wcm90b3R5cGUsImN1dCIsMSk7bGUoW2RlKCldLFZlLnByb3RvdHlwZSwicmVwbGFjZVRleHQiLDEpO2xlKFtJdCgpXSxWZS5wcm90b3R5cGUsImdldEFsbENvbW1hbmRPcHRpb25zIiwxKTtsZShbSXQoKV0sVmUucHJvdG90eXBlLCJnZXRDb21tYW5kT3B0aW9ucyIsMSk7bGUoW0l0KCldLFZlLnByb3RvdHlwZSwiZ2V0Q29tbWFuZFByb3AiLDEpO1ZlPWxlKFtKZSh7ZGVmYXVsdFByaW9yaXR5OmN0LkhpZ2hlc3QsZGVmYXVsdE9wdGlvbnM6e3RyYWNrZXJDbGFzc05hbWU6InJlbWlycm9yLXRyYWNrZXItcG9zaXRpb24iLHRyYWNrZXJOb2RlTmFtZToic3BhbiJ9LHN0YXRpY0tleXM6WyJ0cmFja2VyQ2xhc3NOYW1lIiwidHJhY2tlck5vZGVOYW1lIl19KV0sVmUpO3ZhciB5SD17Zm9yY2VkVXBkYXRlczpbXX0seEg9bmV3IFNldChbInJ1biIsImNoYWluIiwib3JpZ2luYWwiLCJyYXciLCJlbmFibGVkIiwidHIiLCJuZXciXSksRG89Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wbGFjZWhvbGRlcnM9ZXQuZW1wdHksdGhpcy5wbGFjZWhvbGRlcldpZGdldHM9bmV3IE1hcCx0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyQ29tbWFuZD1lPT57Y29uc3QgdD1FbSgpLHtwcm9taXNlOm4scGxhY2Vob2xkZXI6cixvbkZhaWx1cmU6byxvblN1Y2Nlc3M6aX09ZTtyZXR1cm4gbmV3IGhIKG4pLnZhbGlkYXRlKHM9PnRoaXMuYWRkUGxhY2Vob2xkZXIodCxyKShzKSkuc3VjY2VzcyhzPT57Y29uc3R7c3RhdGU6YSx0cjpsLGRpc3BhdGNoOmMsdmlldzp1LHZhbHVlOmR9PXMsZj10aGlzLnN0b3JlLmhlbHBlcnMuZmluZFBsYWNlaG9sZGVyKHQpO2lmKCFmKXtjb25zdCBwPW5ldyBFcnJvcigiVGhlIHBsYWNlaG9sZGVyIGhhcyBiZWVuIHJlbW92ZWQiKTtyZXR1cm4obz09bnVsbD92b2lkIDA6byh7ZXJyb3I6cCxzdGF0ZTphLHRyOmwsZGlzcGF0Y2g6Yyx2aWV3OnV9KSk/PyExfXJldHVybiB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKHQpKHtzdGF0ZTphLHRyOmwsdmlldzp1LGRpc3BhdGNoOigpPT57fX0pLGkoZCxmLHtzdGF0ZTphLHRyOmwsZGlzcGF0Y2g6Yyx2aWV3OnV9KX0pLmZhaWx1cmUocz0+KHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIodCkoey4uLnMsZGlzcGF0Y2g6KCk9Pnt9fSksKG89PW51bGw/dm9pZCAwOm8ocykpPz8hMSkpfX1nZXQgbmFtZSgpe3JldHVybiJkZWNvcmF0aW9ucyJ9b25DcmVhdGUoKXt0aGlzLnN0b3JlLnNldEV4dGVuc2lvblN0b3JlKCJjcmVhdGVQbGFjZWhvbGRlckNvbW1hbmQiLHRoaXMuY3JlYXRlUGxhY2Vob2xkZXJDb21tYW5kKX1jcmVhdGVQbHVnaW4oKXtyZXR1cm57c3RhdGU6e2luaXQ6KCk9Pnt9LGFwcGx5OmU9Pnt2YXIgdCxuLHIsbyxpLHM7Y29uc3R7YWRkZWQ6YSxjbGVhclRyYWNrZXJzOmwscmVtb3ZlZDpjLHVwZGF0ZWQ6dX09dGhpcy5nZXRNZXRhKGUpO2lmKGwpe3RoaXMucGxhY2Vob2xkZXJzPWV0LmVtcHR5O2Zvcihjb25zdFssZF1vZiB0aGlzLnBsYWNlaG9sZGVyV2lkZ2V0cykobj0odD1kLnNwZWMpLm9uRGVzdHJveSk9PW51bGx8fG4uY2FsbCh0LHRoaXMuc3RvcmUudmlldyxkLnNwZWMuZWxlbWVudCk7dGhpcy5wbGFjZWhvbGRlcldpZGdldHMuY2xlYXIoKTtyZXR1cm59dGhpcy5wbGFjZWhvbGRlcnM9dGhpcy5wbGFjZWhvbGRlcnMubWFwKGUubWFwcGluZyxlLmRvYyx7b25SZW1vdmU6ZD0+e3ZhciBmLHA7Y29uc3QgbT10aGlzLnBsYWNlaG9sZGVyV2lkZ2V0cy5nZXQoZC5pZCk7bSYmKChwPShmPW0uc3BlYykub25EZXN0cm95KT09bnVsbHx8cC5jYWxsKGYsdGhpcy5zdG9yZS52aWV3LG0uc3BlYy5lbGVtZW50KSl9fSk7Zm9yKGNvbnN0WyxkXW9mIHRoaXMucGxhY2Vob2xkZXJXaWRnZXRzKShvPShyPWQuc3BlYykub25VcGRhdGUpPT1udWxsfHxvLmNhbGwocix0aGlzLnN0b3JlLnZpZXcsZC5mcm9tLGQuc3BlYy5lbGVtZW50LGQuc3BlYy5kYXRhKTtmb3IoY29uc3QgZCBvZiBhKXtpZihkLnR5cGU9PT0iaW5saW5lIil7dGhpcy5hZGRJbmxpbmVQbGFjZWhvbGRlcihkLGUpO2NvbnRpbnVlfWlmKGQudHlwZT09PSJub2RlIil7dGhpcy5hZGROb2RlUGxhY2Vob2xkZXIoZCxlKTtjb250aW51ZX1pZihkLnR5cGU9PT0id2lkZ2V0Iil7dGhpcy5hZGRXaWRnZXRQbGFjZWhvbGRlcihkLGUpO2NvbnRpbnVlfX1mb3IoY29uc3R7aWQ6ZCxkYXRhOmZ9b2YgdSl7Y29uc3QgcD10aGlzLnBsYWNlaG9sZGVyV2lkZ2V0cy5nZXQoZCk7aWYoIXApY29udGludWU7Y29uc3QgbT1FdC53aWRnZXQocC5mcm9tLHAuc3BlYy5lbGVtZW50LHsuLi5wLnNwZWMsZGF0YTpmfSk7dGhpcy5wbGFjZWhvbGRlcnM9dGhpcy5wbGFjZWhvbGRlcnMucmVtb3ZlKFtwXSkuYWRkKGUuZG9jLFttXSksdGhpcy5wbGFjZWhvbGRlcldpZGdldHMuc2V0KGQsbSl9Zm9yKGNvbnN0IGQgb2YgYyl7Y29uc3QgZj10aGlzLnBsYWNlaG9sZGVycy5maW5kKHZvaWQgMCx2b2lkIDAsbT0+bS5pZD09PWQmJm0uX190eXBlPT09SWwpLHA9dGhpcy5wbGFjZWhvbGRlcldpZGdldHMuZ2V0KGQpO3AmJigocz0oaT1wLnNwZWMpLm9uRGVzdHJveSk9PW51bGx8fHMuY2FsbChpLHRoaXMuc3RvcmUudmlldyxwLnNwZWMuZWxlbWVudCkpLHRoaXMucGxhY2Vob2xkZXJzPXRoaXMucGxhY2Vob2xkZXJzLnJlbW92ZShmKSx0aGlzLnBsYWNlaG9sZGVyV2lkZ2V0cy5kZWxldGUoZCl9fX0scHJvcHM6e2RlY29yYXRpb25zOmU9PntsZXQgdD10aGlzLm9wdGlvbnMuZGVjb3JhdGlvbnMoZSk7dD10LmFkZChlLmRvYyx0aGlzLnBsYWNlaG9sZGVycy5maW5kKCkpO2Zvcihjb25zdCBuIG9mIHRoaXMuc3RvcmUuZXh0ZW5zaW9ucyl7aWYoIW4uY3JlYXRlRGVjb3JhdGlvbnMpY29udGludWU7Y29uc3Qgcj1uLmNyZWF0ZURlY29yYXRpb25zKGUpLmZpbmQoKTt0PXQuYWRkKGUuZG9jLHIpfXJldHVybiB0fSxoYW5kbGVET01FdmVudHM6e2JsdXI6ZT0+KHRoaXMub3B0aW9ucy5wZXJzaXN0ZW50U2VsZWN0aW9uQ2xhc3MmJmUuZGlzcGF0Y2goZS5zdGF0ZS50ci5zZXRNZXRhKFpfLCExKSksITEpLGZvY3VzOmU9Pih0aGlzLm9wdGlvbnMucGVyc2lzdGVudFNlbGVjdGlvbkNsYXNzJiZlLmRpc3BhdGNoKGUuc3RhdGUudHIuc2V0TWV0YShaXywhMCkpLCExKX19fX11cGRhdGVEZWNvcmF0aW9ucygpe3JldHVybih7dHI6ZSxkaXNwYXRjaDp0fSk9Pih0PT1udWxsfHx0KGUpLCEwKX1hZGRQbGFjZWhvbGRlcihlLHQsbil7cmV0dXJuKHtkaXNwYXRjaDpyLHRyOm99KT0+dGhpcy5hZGRQbGFjZWhvbGRlclRyYW5zYWN0aW9uKGUsdCxvLCFyKT8ocj09bnVsbHx8cihuP28uZGVsZXRlU2VsZWN0aW9uKCk6byksITApOiExfXVwZGF0ZVBsYWNlaG9sZGVyKGUsdCl7cmV0dXJuKHtkaXNwYXRjaDpuLHRyOnJ9KT0+dGhpcy51cGRhdGVQbGFjZWhvbGRlclRyYW5zYWN0aW9uKHtpZDplLGRhdGE6dCx0cjpyLGNoZWNrT25seTohbn0pPyhuPT1udWxsfHxuKHIpLCEwKTohMX1yZW1vdmVQbGFjZWhvbGRlcihlKXtyZXR1cm4oe2Rpc3BhdGNoOnQsdHI6bn0pPT50aGlzLnJlbW92ZVBsYWNlaG9sZGVyVHJhbnNhY3Rpb24oe2lkOmUsdHI6bixjaGVja09ubHk6IXR9KT8odD09bnVsbHx8dChuKSwhMCk6ITF9Y2xlYXJQbGFjZWhvbGRlcnMoKXtyZXR1cm4oe3RyOmUsZGlzcGF0Y2g6dH0pPT50aGlzLmNsZWFyUGxhY2Vob2xkZXJzVHJhbnNhY3Rpb24oe3RyOmUsY2hlY2tPbmx5OiF0fSk/KHQ9PW51bGx8fHQoZSksITApOiExfWZpbmRQbGFjZWhvbGRlcihlKXtyZXR1cm4gdGhpcy5maW5kQWxsUGxhY2Vob2xkZXJzKCkuZ2V0KGUpfWZpbmRBbGxQbGFjZWhvbGRlcnMoKXtjb25zdCBlPW5ldyBNYXAsdD10aGlzLnBsYWNlaG9sZGVycy5maW5kKHZvaWQgMCx2b2lkIDAsbj0+bi5fX3R5cGU9PT1JbCk7Zm9yKGNvbnN0IG4gb2YgdCllLnNldChuLnNwZWMuaWQse2Zyb206bi5mcm9tLHRvOm4udG99KTtyZXR1cm4gZX1jcmVhdGVEZWNvcmF0aW9ucyhlKXt2YXIgdCxuLHI7Y29uc3R7cGVyc2lzdGVudFNlbGVjdGlvbkNsYXNzOm99PXRoaXMub3B0aW9ucztyZXR1cm4hb3x8KHQ9dGhpcy5zdG9yZS52aWV3KSE9bnVsbCYmdC5oYXNGb2N1cygpfHwocj0obj10aGlzLnN0b3JlLmhlbHBlcnMpLmlzSW50ZXJhY3RpbmcpIT1udWxsJiZyLmNhbGwobik/ZXQuZW1wdHk6d0goZSxldC5lbXB0eSx7Y2xhc3M6X2Uobyk/bzoic2VsZWN0aW9uIn0pfW9uQXBwbHlTdGF0ZSgpe31hZGRXaWRnZXRQbGFjZWhvbGRlcihlLHQpe2NvbnN0e3BvczpuLGNyZWF0ZUVsZW1lbnQ6cixvbkRlc3Ryb3k6byxvblVwZGF0ZTppLGNsYXNzTmFtZTpzLG5vZGVOYW1lOmEsaWQ6bCx0eXBlOmN9PWUsdT0ocj09bnVsbD92b2lkIDA6cih0aGlzLnN0b3JlLnZpZXcsbikpPz9kb2N1bWVudC5jcmVhdGVFbGVtZW50KGEpO3UuY2xhc3NMaXN0LmFkZChzKTtjb25zdCBkPUV0LndpZGdldChuLHUse2lkOmwsX190eXBlOklsLHR5cGU6YyxlbGVtZW50OnUsb25EZXN0cm95Om8sb25VcGRhdGU6aX0pO3RoaXMucGxhY2Vob2xkZXJXaWRnZXRzLnNldChsLGQpLHRoaXMucGxhY2Vob2xkZXJzPXRoaXMucGxhY2Vob2xkZXJzLmFkZCh0LmRvYyxbZF0pfWFkZElubGluZVBsYWNlaG9sZGVyKGUsdCl7Y29uc3R7ZnJvbTpuPXQuc2VsZWN0aW9uLmZyb20sdG86cj10LnNlbGVjdGlvbi50byxjbGFzc05hbWU6byxub2RlTmFtZTppLGlkOnMsdHlwZTphfT1lO2xldCBsO2lmKG49PT1yKXtjb25zdCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaSk7Yy5jbGFzc0xpc3QuYWRkKG8pLGw9RXQud2lkZ2V0KG4sYyx7aWQ6cyx0eXBlOmEsX190eXBlOklsLHdpZGdldDpjfSl9ZWxzZSBsPUV0LmlubGluZShuLHIse25vZGVOYW1lOmksY2xhc3M6b30se2lkOnMsX190eXBlOklsfSk7dGhpcy5wbGFjZWhvbGRlcnM9dGhpcy5wbGFjZWhvbGRlcnMuYWRkKHQuZG9jLFtsXSl9YWRkTm9kZVBsYWNlaG9sZGVyKGUsdCl7Y29uc3R7cG9zOm4sY2xhc3NOYW1lOnIsbm9kZU5hbWU6byxpZDppfT1lLHM9TXIobik/dC5kb2MucmVzb2x2ZShuKTp0LnNlbGVjdGlvbi4kZnJvbSxhPU1yKG4pP3Mubm9kZUFmdGVyP3twb3M6bixlbmQ6cy5ub2RlQWZ0ZXIubm9kZVNpemV9OnZvaWQgMDpJVShzKTtpZighYSlyZXR1cm47Y29uc3QgbD1FdC5ub2RlKGEucG9zLGEuZW5kLHtub2RlTmFtZTpvLGNsYXNzOnJ9LHtpZDppLF9fdHlwZTpJbH0pO3RoaXMucGxhY2Vob2xkZXJzPXRoaXMucGxhY2Vob2xkZXJzLmFkZCh0LmRvYyxbbF0pfXdpdGhSZXF1aXJlZEJhc2UoZSx0KXtjb25zdHtwbGFjZWhvbGRlck5vZGVOYW1lOm4scGxhY2Vob2xkZXJDbGFzc05hbWU6cn09dGhpcy5vcHRpb25zLHtub2RlTmFtZTpvPW4sY2xhc3NOYW1lOmksLi4uc309dCxhPShpP1tyLGldOltyXSkuam9pbigiICIpO3JldHVybntub2RlTmFtZTpvLGNsYXNzTmFtZTphLC4uLnMsaWQ6ZX19Z2V0TWV0YShlKXtjb25zdCB0PWUuZ2V0TWV0YSh0aGlzLnBsdWdpbktleSk/P3t9O3JldHVybnsuLi5iSCwuLi50fX1zZXRNZXRhKGUsdCl7Y29uc3Qgbj10aGlzLmdldE1ldGEoZSk7ZS5zZXRNZXRhKHRoaXMucGx1Z2luS2V5LHsuLi5uLC4uLnR9KX1hZGRQbGFjZWhvbGRlclRyYW5zYWN0aW9uKGUsdCxuLHI9ITEpe2lmKHRoaXMuZmluZFBsYWNlaG9sZGVyKGUpKXJldHVybiExO2lmKHIpcmV0dXJuITA7Y29uc3R7YWRkZWQ6aX09dGhpcy5nZXRNZXRhKG4pO3JldHVybiB0aGlzLnNldE1ldGEobix7YWRkZWQ6Wy4uLmksdGhpcy53aXRoUmVxdWlyZWRCYXNlKGUsdCldfSksITB9dXBkYXRlUGxhY2Vob2xkZXJUcmFuc2FjdGlvbihlKXtjb25zdHtpZDp0LHRyOm4sY2hlY2tPbmx5OnI9ITEsZGF0YTpvfT1lO2lmKCF0aGlzLmZpbmRQbGFjZWhvbGRlcih0KSlyZXR1cm4hMTtpZihyKXJldHVybiEwO2NvbnN0e3VwZGF0ZWQ6c309dGhpcy5nZXRNZXRhKG4pO3JldHVybiB0aGlzLnNldE1ldGEobix7dXBkYXRlZDp4ZihbLi4ucyx7aWQ6dCxkYXRhOm99XSl9KSwhMH1yZW1vdmVQbGFjZWhvbGRlclRyYW5zYWN0aW9uKGUpe2NvbnN0e2lkOnQsdHI6bixjaGVja09ubHk6cj0hMX09ZTtpZighdGhpcy5maW5kUGxhY2Vob2xkZXIodCkpcmV0dXJuITE7aWYocilyZXR1cm4hMDtjb25zdHtyZW1vdmVkOml9PXRoaXMuZ2V0TWV0YShuKTtyZXR1cm4gdGhpcy5zZXRNZXRhKG4se3JlbW92ZWQ6eGYoWy4uLmksdF0pfSksITB9Y2xlYXJQbGFjZWhvbGRlcnNUcmFuc2FjdGlvbihlKXtjb25zdHt0cjp0LGNoZWNrT25seTpuPSExfT1lO3JldHVybiB0aGlzLmdldFBsdWdpblN0YXRlKCk9PT1ldC5lbXB0eT8hMToobnx8dGhpcy5zZXRNZXRhKHQse2NsZWFyVHJhY2tlcnM6ITB9KSwhMCl9fTtsZShbZGUoKV0sRG8ucHJvdG90eXBlLCJ1cGRhdGVEZWNvcmF0aW9ucyIsMSk7bGUoW2RlKCldLERvLnByb3RvdHlwZSwiYWRkUGxhY2Vob2xkZXIiLDEpO2xlKFtkZSgpXSxEby5wcm90b3R5cGUsInVwZGF0ZVBsYWNlaG9sZGVyIiwxKTtsZShbZGUoKV0sRG8ucHJvdG90eXBlLCJyZW1vdmVQbGFjZWhvbGRlciIsMSk7bGUoW2RlKCldLERvLnByb3RvdHlwZSwiY2xlYXJQbGFjZWhvbGRlcnMiLDEpO2xlKFtJdCgpXSxEby5wcm90b3R5cGUsImZpbmRQbGFjZWhvbGRlciIsMSk7bGUoW0l0KCldLERvLnByb3RvdHlwZSwiZmluZEFsbFBsYWNlaG9sZGVycyIsMSk7RG89bGUoW0plKHtkZWZhdWx0T3B0aW9uczp7cGVyc2lzdGVudFNlbGVjdGlvbkNsYXNzOnZvaWQgMCxwbGFjZWhvbGRlckNsYXNzTmFtZToicGxhY2Vob2xkZXIiLHBsYWNlaG9sZGVyTm9kZU5hbWU6InNwYW4ifSxzdGF0aWNLZXlzOlsicGxhY2Vob2xkZXJDbGFzc05hbWUiLCJwbGFjZWhvbGRlck5vZGVOYW1lIl0saGFuZGxlcktleXM6WyJkZWNvcmF0aW9ucyJdLGhhbmRsZXJLZXlPcHRpb25zOntkZWNvcmF0aW9uczp7cmVkdWNlcjp7YWNjdW11bGF0b3I6KGUsdCxuKT0+ZS5hZGQobi5kb2MsdC5maW5kKCkpLGdldERlZmF1bHQ6KCk9PmV0LmVtcHR5fX19LGRlZmF1bHRQcmlvcml0eTpjdC5Mb3d9KV0sRG8pO3ZhciBiSD17YWRkZWQ6W10sdXBkYXRlZDpbXSxjbGVhclRyYWNrZXJzOiExLHJlbW92ZWQ6W119LElsPSJwbGFjZWhvbGRlckRlY29yYXRpb24iLFpfPSJwZXJzaXN0ZW50U2VsZWN0aW9uRm9jdXMiO2Z1bmN0aW9uIHdIKGUsdCxuKXtjb25zdHtzZWxlY3Rpb246cixkb2M6b309ZTtpZihyLmVtcHR5KXJldHVybiB0O2NvbnN0e2Zyb206aSx0bzpzfT1yLGE9cnYocik/RXQubm9kZShpLHMsbik6RXQuaW5saW5lKGkscyxuKTtyZXR1cm4gdC5hZGQobyxbYV0pfXZhciBVbT1jbGFzcyBleHRlbmRzIF90e2dldCBuYW1lKCl7cmV0dXJuImRvY0NoYW5nZWQifW9uU3RhdGVVcGRhdGUoZSl7Y29uc3R7Zmlyc3RVcGRhdGU6dCx0cmFuc2FjdGlvbnM6bix0cjpyfT1lO3R8fChuPz9bcl0pLnNvbWUobz0+bz09bnVsbD92b2lkIDA6by5kb2NDaGFuZ2VkKSYmdGhpcy5vcHRpb25zLmRvY0NoYW5nZWQoZSl9fTtVbT1sZShbSmUoe2hhbmRsZXJLZXlzOlsiZG9jQ2hhbmdlZCJdLGhhbmRsZXJLZXlPcHRpb25zOntkb2NDaGFuZ2VkOntlYXJseVJldHVyblZhbHVlOiExfX0sZGVmYXVsdFByaW9yaXR5OmN0Lkxvd2VzdH0pXSxVbSk7dmFyIFFyPWNsYXNzIGV4dGVuZHMgX3R7Z2V0IG5hbWUoKXtyZXR1cm4iaGVscGVycyJ9b25DcmVhdGUoKXt2YXIgZTt0aGlzLnN0b3JlLnNldFN0cmluZ0hhbmRsZXIoInRleHQiLHRoaXMudGV4dFRvUHJvc2VtaXJyb3JOb2RlLmJpbmQodGhpcykpLHRoaXMuc3RvcmUuc2V0U3RyaW5nSGFuZGxlcigiaHRtbCIsS3gpO2NvbnN0IHQ9aGUoKSxuPWhlKCkscj1oZSgpLG89bmV3IFNldDtmb3IoY29uc3QgaSBvZiB0aGlzLnN0b3JlLmV4dGVuc2lvbnMpe3VwKGkpJiYobltpLm5hbWVdPWE9PnpVKHtzdGF0ZTp0aGlzLnN0b3JlLmdldFN0YXRlKCksdHlwZTppLnR5cGUsYXR0cnM6YX0pLHJbaS5uYW1lXT1hPT57dmFyIGw7cmV0dXJuKGw9Q2Yoe3N0YXRlOnRoaXMuc3RvcmUuZ2V0U3RhdGUoKSx0eXBlOmkudHlwZSxhdHRyczphfSkpPT1udWxsP3ZvaWQgMDpsLm5vZGUuYXR0cnN9KSxsdihpKSYmKG5baS5uYW1lXT1hPT5qbSh7dHJTdGF0ZTp0aGlzLnN0b3JlLmdldFN0YXRlKCksdHlwZTppLnR5cGUsYXR0cnM6YX0pLHJbaS5uYW1lXT1hPT57Y29uc3QgbD1MaSh0aGlzLnN0b3JlLmdldFN0YXRlKCkuc2VsZWN0aW9uLiRmcm9tLGkudHlwZSk7aWYoIWx8fCFhKXJldHVybiBsPT1udWxsP3ZvaWQgMDpsLm1hcmsuYXR0cnM7aWYocHcobC5tYXJrLGEpKXJldHVybiBsLm1hcmsuYXR0cnN9KTtjb25zdCBzPSgoZT1pLmNyZWF0ZUhlbHBlcnMpPT1udWxsP3ZvaWQgMDplLmNhbGwoaSkpPz97fTtmb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhpLmRlY29yYXRlZEhlbHBlcnM/P3t9KSlzW2FdPWlbYV0uYmluZChpKTtpZighU20ocykpZm9yKGNvbnN0W2EsbF1vZiBKdChzKSlXTih7bmFtZTphLHNldDpvLGNvZGU6cS5EVVBMSUNBVEVfSEVMUEVSX05BTUVTfSksdFthXT1sfXRoaXMuc3RvcmUuc2V0U3RvcmVLZXkoImF0dHJzIixyKSx0aGlzLnN0b3JlLnNldFN0b3JlS2V5KCJhY3RpdmUiLG4pLHRoaXMuc3RvcmUuc2V0U3RvcmVLZXkoImhlbHBlcnMiLHQpLHRoaXMuc3RvcmUuc2V0RXh0ZW5zaW9uU3RvcmUoImF0dHJzIixyKSx0aGlzLnN0b3JlLnNldEV4dGVuc2lvblN0b3JlKCJhY3RpdmUiLG4pLHRoaXMuc3RvcmUuc2V0RXh0ZW5zaW9uU3RvcmUoImhlbHBlcnMiLHQpfWlzU2VsZWN0aW9uRW1wdHkoZT10aGlzLnN0b3JlLmdldFN0YXRlKCkpe3JldHVybiBmdyhlKX1pc1ZpZXdFZGl0YWJsZShlPXRoaXMuc3RvcmUuZ2V0U3RhdGUoKSl7dmFyIHQsbjtyZXR1cm4oKG49KHQ9dGhpcy5zdG9yZS52aWV3LnByb3BzKS5lZGl0YWJsZSk9PW51bGw/dm9pZCAwOm4uY2FsbCh0LGUpKT8/ITF9Z2V0U3RhdGVKU09OKGU9dGhpcy5zdG9yZS5nZXRTdGF0ZSgpKXtyZXR1cm4gZS50b0pTT04oKX1nZXRKU09OKGU9dGhpcy5zdG9yZS5nZXRTdGF0ZSgpKXtyZXR1cm4gZS5kb2MudG9KU09OKCl9Z2V0UmVtaXJyb3JKU09OKGU9dGhpcy5zdG9yZS5nZXRTdGF0ZSgpKXtyZXR1cm4gdGhpcy5nZXRKU09OKGUpfWluc2VydEh0bWwoZSx0KXtyZXR1cm4gbj0+e2NvbnN0e3N0YXRlOnJ9PW4sbz1LeCh7Y29udGVudDplLHNjaGVtYTpyLnNjaGVtYSxmcmFnbWVudDohMH0pO3JldHVybiB0aGlzLnN0b3JlLmNvbW1hbmRzLmluc2VydE5vZGUub3JpZ2luYWwobyx0KShuKX19Z2V0VGV4dCh7bGluZUJyZWFrRGl2aWRlcjplPWAKCmAsc3RhdGU6dD10aGlzLnN0b3JlLmdldFN0YXRlKCl9PXt9KXtyZXR1cm4gdC5kb2MudGV4dEJldHdlZW4oMCx0LmRvYy5jb250ZW50LnNpemUsZSxUcyl9Z2V0VGV4dEJldHdlZW4oZSx0LG49dGhpcy5zdG9yZS5nZXRTdGF0ZSgpLmRvYyl7cmV0dXJuIG4udGV4dEJldHdlZW4oZSx0LGAKCmAsVHMpfWdldEhUTUwoZT10aGlzLnN0b3JlLmdldFN0YXRlKCkpe3JldHVybiB1VihlLmRvYyx0aGlzLnN0b3JlLmRvY3VtZW50KX10ZXh0VG9Qcm9zZW1pcnJvck5vZGUoZSl7Y29uc3QgdD1gPHByZT4ke2UuY29udGVudH08L3ByZT5gO3JldHVybiB0aGlzLnN0b3JlLnN0cmluZ0hhbmRsZXJzLmh0bWwoey4uLmUsY29udGVudDp0fSl9fTtsZShbSXQoKV0sUXIucHJvdG90eXBlLCJpc1NlbGVjdGlvbkVtcHR5IiwxKTtsZShbSXQoKV0sUXIucHJvdG90eXBlLCJpc1ZpZXdFZGl0YWJsZSIsMSk7bGUoW0l0KCldLFFyLnByb3RvdHlwZSwiZ2V0U3RhdGVKU09OIiwxKTtsZShbSXQoKV0sUXIucHJvdG90eXBlLCJnZXRKU09OIiwxKTtsZShbSXQoKV0sUXIucHJvdG90eXBlLCJnZXRSZW1pcnJvckpTT04iLDEpO2xlKFtkZSgpXSxRci5wcm90b3R5cGUsImluc2VydEh0bWwiLDEpO2xlKFtJdCgpXSxRci5wcm90b3R5cGUsImdldFRleHQiLDEpO2xlKFtJdCgpXSxRci5wcm90b3R5cGUsImdldFRleHRCZXR3ZWVuIiwxKTtsZShbSXQoKV0sUXIucHJvdG90eXBlLCJnZXRIVE1MIiwxKTtRcj1sZShbSmUoe30pXSxRcik7dmFyIFl4PWNsYXNzIGV4dGVuZHMgX3R7Z2V0IG5hbWUoKXtyZXR1cm4iaW5wdXRSdWxlcyJ9b25DcmVhdGUoKXt0aGlzLnN0b3JlLnNldEV4dGVuc2lvblN0b3JlKCJyZWJ1aWxkSW5wdXRSdWxlcyIsdGhpcy5yZWJ1aWxkSW5wdXRSdWxlcy5iaW5kKHRoaXMpKX1jcmVhdGVFeHRlcm5hbFBsdWdpbnMoKXtyZXR1cm5bdGhpcy5nZW5lcmF0ZUlucHV0UnVsZXNQbHVnaW4oKV19Z2VuZXJhdGVJbnB1dFJ1bGVzUGx1Z2luKCl7dmFyIGUsdDtjb25zdCBuPVtdLHI9dGhpcy5zdG9yZS5tYXJrVGFnc1tMZS5FeGNsdWRlSW5wdXRSdWxlc107Zm9yKGNvbnN0IG8gb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKWlmKCEoKGU9dGhpcy5zdG9yZS5tYW5hZ2VyU2V0dGluZ3MuZXhjbHVkZSkhPW51bGwmJmUuaW5wdXRSdWxlc3x8IW8uY3JlYXRlSW5wdXRSdWxlc3x8KHQ9by5vcHRpb25zLmV4Y2x1ZGUpIT1udWxsJiZ0LmlucHV0UnVsZXMpKWZvcihjb25zdCBpIG9mIG8uY3JlYXRlSW5wdXRSdWxlcygpKWkuc2hvdWxkU2tpcD10aGlzLm9wdGlvbnMuc2hvdWxkU2tpcElucHV0UnVsZSxpLmludmFsaWRNYXJrcz1yLG4ucHVzaChpKTtyZXR1cm4gUEYoe3J1bGVzOm59KX1yZWJ1aWxkSW5wdXRSdWxlcygpe3RoaXMuc3RvcmUudXBkYXRlRXh0ZW5zaW9uUGx1Z2lucyh0aGlzKX19O1l4PWxlKFtKZSh7ZGVmYXVsdFByaW9yaXR5OmN0LkRlZmF1bHQsaGFuZGxlcktleXM6WyJzaG91bGRTa2lwSW5wdXRSdWxlIl0saGFuZGxlcktleU9wdGlvbnM6e3Nob3VsZFNraXBJbnB1dFJ1bGU6e2Vhcmx5UmV0dXJuVmFsdWU6ITB9fX0pXSxZeCk7dmFyIGJvPWNsYXNzIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZXh0cmFLZXlCaW5kaW5ncz1bXSx0aGlzLmJhY2t3YXJkTWFya0V4aXRUcmFja2VyPW5ldyBNYXAsdGhpcy5rZXlkb3duSGFuZGxlcj1udWxsLHRoaXMub25BZGRDdXN0b21IYW5kbGVyPSh7a2V5bWFwOmV9KT0+e3ZhciB0LG47aWYoZSlyZXR1cm4gdGhpcy5leHRyYUtleUJpbmRpbmdzPVsuLi50aGlzLmV4dHJhS2V5QmluZGluZ3MsZV0sKG49KHQ9dGhpcy5zdG9yZSkucmVidWlsZEtleW1hcCk9PW51bGx8fG4uY2FsbCh0KSwoKT0+e3ZhciByLG87dGhpcy5leHRyYUtleUJpbmRpbmdzPXRoaXMuZXh0cmFLZXlCaW5kaW5ncy5maWx0ZXIoaT0+aSE9PWUpLChvPShyPXRoaXMuc3RvcmUpLnJlYnVpbGRLZXltYXApPT1udWxsfHxvLmNhbGwocil9fSx0aGlzLnJlYnVpbGRLZXltYXA9KCk9Pnt0aGlzLnNldHVwS2V5ZG93bkhhbmRsZXIoKX19Z2V0IG5hbWUoKXtyZXR1cm4ia2V5bWFwIn1nZXQgc2hvcnRjdXRNYXAoKXtjb25zdHtzaG9ydGN1dHM6ZX09dGhpcy5vcHRpb25zO3JldHVybiBfZShlKT9fSFtlXTplfW9uQ3JlYXRlKCl7dGhpcy5zdG9yZS5zZXRFeHRlbnNpb25TdG9yZSgicmVidWlsZEtleW1hcCIsdGhpcy5yZWJ1aWxkS2V5bWFwKX1jcmVhdGVFeHRlcm5hbFBsdWdpbnMoKXt2YXIgZTtyZXR1cm4oZT10aGlzLnN0b3JlLm1hbmFnZXJTZXR0aW5ncy5leGNsdWRlKSE9bnVsbCYmZS5rZXltYXA/W106KHRoaXMuc2V0dXBLZXlkb3duSGFuZGxlcigpLFtuZXcgSGkoe3Byb3BzOntoYW5kbGVLZXlEb3duOih0LG4pPT57dmFyIHI7cmV0dXJuKHI9dGhpcy5rZXlkb3duSGFuZGxlcik9PW51bGw/dm9pZCAwOnIuY2FsbCh0aGlzLHQsbil9fX0pXSl9c2V0dXBLZXlkb3duSGFuZGxlcigpe2NvbnN0IGU9dGhpcy5nZW5lcmF0ZUtleW1hcEJpbmRpbmdzKCk7dGhpcy5rZXlkb3duSGFuZGxlcj1WTihlKX1nZW5lcmF0ZUtleW1hcEJpbmRpbmdzKCl7dmFyIGU7Y29uc3QgdD1bXSxuPXRoaXMuc2hvcnRjdXRNYXAscj10aGlzLnN0b3JlLmdldEV4dGVuc2lvbihWZSksbz1hPT5sPT54aCh7c2hvcnRjdXQ6bCxtYXA6bixzdG9yZTp0aGlzLnN0b3JlLG9wdGlvbnM6YS5vcHRpb25zfSk7Zm9yKGNvbnN0IGEgb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKXtjb25zdCBsPWEuZGVjb3JhdGVkS2V5YmluZGluZ3M/P3t9O2lmKCEoKGU9YS5vcHRpb25zLmV4Y2x1ZGUpIT1udWxsJiZlLmtleW1hcCkpe2EuY3JlYXRlS2V5bWFwJiZ0LnB1c2goa0goYS5jcmVhdGVLZXltYXAobyhhKSksbikpO2Zvcihjb25zdFtjLHVdb2YgSnQobCkpe2lmKHUuaXNBY3RpdmUmJiF1LmlzQWN0aXZlKGEub3B0aW9ucyx0aGlzLnN0b3JlKSljb250aW51ZTtjb25zdCBkPWFbY10uYmluZChhKSxmPXhoKHtzaG9ydGN1dDp1LnNob3J0Y3V0LG1hcDpuLG9wdGlvbnM6YS5vcHRpb25zLHN0b3JlOnRoaXMuc3RvcmV9KSxwPXB0KHUucHJpb3JpdHkpP3UucHJpb3JpdHkoYS5vcHRpb25zLHRoaXMuc3RvcmUpOnUucHJpb3JpdHk/P2N0LkxvdyxtPWhlKCk7Zm9yKGNvbnN0IGcgb2YgZiltW2ddPWQ7dC5wdXNoKFtwLG1dKSx1LmNvbW1hbmQmJnIudXBkYXRlRGVjb3JhdGVkKHUuY29tbWFuZCx7c2hvcnRjdXQ6Zn0pfX19Y29uc3QgaT10aGlzLnNvcnRLZXltYXBzKFsuLi50aGlzLmV4dHJhS2V5QmluZGluZ3MsLi4udF0pO3JldHVybiBCVShpKX1hcnJvd1JpZ2h0U2hvcnRjdXQoZSl7Y29uc3QgdD10aGlzLnN0b3JlLm1hcmtUYWdzW0xlLlByZXZlbnRFeGl0c10sbj10aGlzLnN0b3JlLm5vZGVUYWdzW0xlLlByZXZlbnRFeGl0c107cmV0dXJuIHRoaXMuZXhpdE1hcmtGb3J3YXJkcyh0LG4pKGUpfWFycm93TGVmdFNob3J0Y3V0KGUpe2NvbnN0IHQ9dGhpcy5zdG9yZS5tYXJrVGFnc1tMZS5QcmV2ZW50RXhpdHNdLG49dGhpcy5zdG9yZS5ub2RlVGFnc1tMZS5QcmV2ZW50RXhpdHNdO3JldHVybiBMbSh0aGlzLmV4aXROb2RlQmFja3dhcmRzKG4pLHRoaXMuZXhpdE1hcmtCYWNrd2FyZHModCxuKSkoZSl9YmFja3NwYWNlKGUpe2NvbnN0IHQ9dGhpcy5zdG9yZS5tYXJrVGFnc1tMZS5QcmV2ZW50RXhpdHNdLG49dGhpcy5zdG9yZS5ub2RlVGFnc1tMZS5QcmV2ZW50RXhpdHNdO3JldHVybiBMbSh0aGlzLmV4aXROb2RlQmFja3dhcmRzKG4sITApLHRoaXMuZXhpdE1hcmtCYWNrd2FyZHModCxuLCEwKSkoZSl9Y3JlYXRlS2V5bWFwKCl7Y29uc3R7c2VsZWN0UGFyZW50Tm9kZU9uRXNjYXBlOmUsdW5kb0lucHV0UnVsZU9uQmFja3NwYWNlOnQsZXhjbHVkZUJhc2VLZXltYXA6bn09dGhpcy5vcHRpb25zLHI9aGUoKTtpZighbilmb3IoY29uc3RbbyxpXW9mIEp0KER5KSlyW29dPUlkKGkpO3JldHVybiB0JiZEeS5CYWNrc3BhY2UmJihyLkJhY2tzcGFjZT1JZChzdihNRixEeS5CYWNrc3BhY2UpKSksZSYmKHIuRXNjYXBlPUlkKCRWKSksW2N0LkxvdyxyXX1nZXROYW1lZFNob3J0Y3V0KGUsdD17fSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiX3wiKT94aCh7c2hvcnRjdXQ6ZSxtYXA6dGhpcy5zaG9ydGN1dE1hcCxzdG9yZTp0aGlzLnN0b3JlLG9wdGlvbnM6dH0pOltlXX1vblNldE9wdGlvbnMoZSl7dmFyIHQsbjtjb25zdHtjaGFuZ2VzOnJ9PWU7KHIuZXhjbHVkZUJhc2VLZXltYXAuY2hhbmdlZHx8ci5zZWxlY3RQYXJlbnROb2RlT25Fc2NhcGUuY2hhbmdlZHx8ci51bmRvSW5wdXRSdWxlT25CYWNrc3BhY2UuY2hhbmdlZCkmJigobj0odD10aGlzLnN0b3JlKS5yZWJ1aWxkS2V5bWFwKT09bnVsbHx8bi5jYWxsKHQpKX1zb3J0S2V5bWFwcyhlKXtyZXR1cm4gaWwoZS5tYXAodD0+ZW4odCk/dDpbY3QuRGVmYXVsdCx0XSksKHQsbik9Pm5bMF0tdFswXSkubWFwKHQ9PnRbMV0pfWV4aXRNYXJrRm9yd2FyZHMoZSx0KXtyZXR1cm4gbj0+e2NvbnN0e3RyOnIsZGlzcGF0Y2g6b309bjtpZighcFYoci5zZWxlY3Rpb24pfHxfZih7c2VsZWN0aW9uOnIuc2VsZWN0aW9uLHR5cGVzOnR9KSlyZXR1cm4hMTtjb25zdCBhPXIuc2VsZWN0aW9uLiRmcm9tLm1hcmtzKCkuZmlsdGVyKGw9PiFlLmluY2x1ZGVzKGwudHlwZS5uYW1lKSk7aWYoSnMoYSkpcmV0dXJuITE7aWYoIW8pcmV0dXJuITA7Zm9yKGNvbnN0IGwgb2YgYSlyLnJlbW92ZVN0b3JlZE1hcmsobCk7cmV0dXJuIG8oci5pbnNlcnRUZXh0KCIgIixyLnNlbGVjdGlvbi5mcm9tKSksITB9fWV4aXROb2RlQmFja3dhcmRzKGUsdD0hMSl7cmV0dXJuIG49Pntjb25zdHt0cjpyfT1uO2lmKCEodD9xXzpxeCkoci5zZWxlY3Rpb24pKXJldHVybiExO2NvbnN0IGk9ci5zZWxlY3Rpb24uJGFuY2hvci5ub2RlKCk7cmV0dXJuIWd3KGkpfHxaVShpKXx8ZS5pbmNsdWRlcyhpLnR5cGUubmFtZSk/ITE6dGhpcy5zdG9yZS5jb21tYW5kcy50b2dnbGVCbG9ja05vZGVJdGVtLm9yaWdpbmFsKHt0eXBlOmkudHlwZX0pKG4pfX1leGl0TWFya0JhY2t3YXJkcyhlLHQsbj0hMSl7cmV0dXJuIHI9Pntjb25zdHt0cjpvLGRpc3BhdGNoOml9PXI7aWYoIShuP3FfOnF4KShvLnNlbGVjdGlvbil8fHRoaXMuYmFja3dhcmRNYXJrRXhpdFRyYWNrZXIuaGFzKG8uc2VsZWN0aW9uLmFuY2hvcikpcmV0dXJuIHRoaXMuYmFja3dhcmRNYXJrRXhpdFRyYWNrZXIuY2xlYXIoKSwhMTtpZihfZih7c2VsZWN0aW9uOm8uc2VsZWN0aW9uLHR5cGVzOnR9KSlyZXR1cm4hMTtjb25zdCBsPVsuLi5vLnN0b3JlZE1hcmtzPz9bXSwuLi5vLnNlbGVjdGlvbi4kZnJvbS5tYXJrcygpXS5maWx0ZXIoYz0+IWUuaW5jbHVkZXMoYy50eXBlLm5hbWUpKTtpZihKcyhsKSlyZXR1cm4hMTtpZighaSlyZXR1cm4hMDtmb3IoY29uc3QgYyBvZiBsKW8ucmVtb3ZlU3RvcmVkTWFyayhjKTtyZXR1cm4gdGhpcy5iYWNrd2FyZE1hcmtFeGl0VHJhY2tlci5zZXQoby5zZWxlY3Rpb24uYW5jaG9yLCEwKSxpKG8pLCEwfX19O2xlKFtMcih7c2hvcnRjdXQ6IkFycm93UmlnaHQiLGlzQWN0aXZlOmU9PmUuZXhpdE1hcmtzT25BcnJvd1ByZXNzfSldLGJvLnByb3RvdHlwZSwiYXJyb3dSaWdodFNob3J0Y3V0IiwxKTtsZShbTHIoe3Nob3J0Y3V0OiJBcnJvd0xlZnQiLGlzQWN0aXZlOmU9PmUuZXhpdE1hcmtzT25BcnJvd1ByZXNzfSldLGJvLnByb3RvdHlwZSwiYXJyb3dMZWZ0U2hvcnRjdXQiLDEpO2xlKFtMcih7c2hvcnRjdXQ6IkJhY2tzcGFjZSIsaXNBY3RpdmU6ZT0+ZS5leGl0TWFya3NPbkFycm93UHJlc3N9KV0sYm8ucHJvdG90eXBlLCJiYWNrc3BhY2UiLDEpO2xlKFtJdCgpXSxiby5wcm90b3R5cGUsImdldE5hbWVkU2hvcnRjdXQiLDEpO2JvPWxlKFtKZSh7ZGVmYXVsdFByaW9yaXR5OmN0LkxvdyxkZWZhdWx0T3B0aW9uczp7c2hvcnRjdXRzOiJkZWZhdWx0Iix1bmRvSW5wdXRSdWxlT25CYWNrc3BhY2U6ITAsc2VsZWN0UGFyZW50Tm9kZU9uRXNjYXBlOiExLGV4Y2x1ZGVCYXNlS2V5bWFwOiExLGV4aXRNYXJrc09uQXJyb3dQcmVzczohMH0sY3VzdG9tSGFuZGxlcktleXM6WyJrZXltYXAiXX0pXSxibyk7ZnVuY3Rpb24gU0goZSl7cmV0dXJuICRvKEdnKFkpLGUpfWZ1bmN0aW9uIHhoKHtzaG9ydGN1dDplLG1hcDp0LG9wdGlvbnM6bixzdG9yZTpyfSl7cmV0dXJuIF9lKGUpP1tYeChlLHQpXTplbihlKT9lLm1hcChvPT5YeChvLHQpKTooZT1lKG4scikseGgoe3Nob3J0Y3V0OmUsbWFwOnQsb3B0aW9uczpuLHN0b3JlOnJ9KSl9ZnVuY3Rpb24gWHgoZSx0KXtyZXR1cm4gU0goZSk/dFtlXTplfWZ1bmN0aW9uIGtIKGUsdCl7Y29uc3Qgbj17fTtsZXQgcixvO2VuKGUpP1tvLHJdPWU6cj1lO2Zvcihjb25zdFtpLHNdb2YgSnQocikpbltYeChpLHQpXT1zO3JldHVybiBZZyhvKT9uOltvLG5dfXZhciBHTj17W1kuQ29weV06Ik1vZC1jIixbWS5DdXRdOiJNb2QteCIsW1kuUGFzdGVdOiJNb2QtdiIsW1kuUGFzdGVQbGFpbl06Ik1vZC1TaGlmdC12IixbWS5TZWxlY3RBbGxdOiJNb2QtYSIsW1kuVW5kb106Ik1vZC16IixbWS5SZWRvXTp4by5pc01hYz8iU2hpZnQtTW9kLXoiOiJNb2QteSIsW1kuQm9sZF06Ik1vZC1iIixbWS5JdGFsaWNdOiJNb2QtaSIsW1kuVW5kZXJsaW5lXToiTW9kLXUiLFtZLlN0cmlrZV06Ik1vZC1kIixbWS5Db2RlXToiTW9kLWAiLFtZLlBhcmFncmFwaF06Ik1vZC1TaGlmdC0wIixbWS5IMV06Ik1vZC1TaGlmdC0xIixbWS5IMl06Ik1vZC1TaGlmdC0yIixbWS5IM106Ik1vZC1TaGlmdC0zIixbWS5INF06Ik1vZC1TaGlmdC00IixbWS5INV06Ik1vZC1TaGlmdC01IixbWS5INl06Ik1vZC1TaGlmdC02IixbWS5UYXNrTGlzdF06Ik1vZC1TaGlmdC03IixbWS5CdWxsZXRMaXN0XToiTW9kLVNoaWZ0LTgiLFtZLk9yZGVyZWRMaXN0XToiTW9kLVNoaWZ0LTkiLFtZLlF1b3RlXToiTW9kLT4iLFtZLkRpdmlkZXJdOiJNb2QtU2hpZnQtfCIsW1kuQ29kZWJsb2NrXToiTW9kLVNoaWZ0LX4iLFtZLkNsZWFyRm9ybWF0dGluZ106Ik1vZC1TaGlmdC1DIixbWS5TdXBlcnNjcmlwdF06Ik1vZC0uIixbWS5TdWJzY3JpcHRdOiJNb2QtLCIsW1kuTGVmdEFsaWdubWVudF06Ik1vZC1TaGlmdC1MIixbWS5DZW50ZXJBbGlnbm1lbnRdOiJNb2QtU2hpZnQtRSIsW1kuUmlnaHRBbGlnbm1lbnRdOiJNb2QtU2hpZnQtUiIsW1kuSnVzdGlmeUFsaWdubWVudF06Ik1vZC1TaGlmdC1KIixbWS5JbnNlcnRMaW5rXToiTW9kLWsiLFtZLkZpbmRdOiJNb2QtZiIsW1kuRmluZEJhY2t3YXJkc106Ik1vZC1TaGlmdC1mIixbWS5GaW5kUmVwbGFjZV06Ik1vZC1TaGlmdC1IIixbWS5BZGRGb290bm90ZV06Ik1vZC1BbHQtZiIsW1kuQWRkQ29tbWVudF06Ik1vZC1BbHQtbSIsW1kuQ29udGV4dE1lbnVdOiJNb2QtU2hpZnQtXFwiLFtZLkluY3JlYXNlRm9udFNpemVdOiJNb2QtU2hpZnQtLiIsW1kuRGVjcmVhc2VGb250U2l6ZV06Ik1vZC1TaGlmdC0sIixbWS5JbmNyZWFzZUluZGVudF06IlRhYiIsW1kuRGVjcmVhc2VJbmRlbnRdOiJTaGlmdC1UYWIiLFtZLlNob3J0Y3V0c106Ik1vZC0vIixbWS5Gb3JtYXRdOnhvLmlzTWFjPyJBbHQtU2hpZnQtZiI6IlNoaWZ0LUN0cmwtZiJ9LEVIPXsuLi5HTixbWS5TdHJpa2VdOiJNb2QtU2hpZnQtUyIsW1kuQ29kZV06Ik1vZC1TaGlmdC1NIixbWS5QYXJhZ3JhcGhdOiJNb2QtQWx0LTAiLFtZLkgxXToiTW9kLUFsdC0xIixbWS5IMl06Ik1vZC1BbHQtMiIsW1kuSDNdOiJNb2QtQWx0LTMiLFtZLkg0XToiTW9kLUFsdC00IixbWS5INV06Ik1vZC1BbHQtNSIsW1kuSDZdOiJNb2QtQWx0LTYiLFtZLk9yZGVyZWRMaXN0XToiTW9kLUFsdC03IixbWS5CdWxsZXRMaXN0XToiTW9kLUFsdC04IixbWS5RdW90ZV06Ik1vZC1BbHQtOSIsW1kuQ2xlYXJGb3JtYXR0aW5nXToiTW9kLVxcIixbWS5JbmNyZWFzZUluZGVudF06Ik1vZC1bIixbWS5EZWNyZWFzZUluZGVudF06Ik1vZC1dIn0sX0g9e2RlZmF1bHQ6R04sZ29vZ2xlRG9jOkVIfSxDSD1jbGFzcyBleHRlbmRzIF90e2dldCBuYW1lKCl7cmV0dXJuIm5vZGVWaWV3cyJ9Y3JlYXRlUGx1Z2luKCl7Y29uc3QgZT1bXSx0PWhlKCk7Zm9yKGNvbnN0IG4gb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKXtpZighbi5jcmVhdGVOb2RlVmlld3MpY29udGludWU7Y29uc3Qgcj1uLmNyZWF0ZU5vZGVWaWV3cygpO2UudW5zaGlmdChwdChyKT97W24ubmFtZV06cn06cil9ZS51bnNoaWZ0KHRoaXMuc3RvcmUubWFuYWdlclNldHRpbmdzLm5vZGVWaWV3cz8/e30pO2Zvcihjb25zdCBuIG9mIGUpT2JqZWN0LmFzc2lnbih0LG4pO3JldHVybntwcm9wczp7bm9kZVZpZXdzOnR9fX19LE9IPWNsYXNzIGV4dGVuZHMgX3R7Z2V0IG5hbWUoKXtyZXR1cm4icGFzdGVSdWxlcyJ9Y3JlYXRlRXh0ZXJuYWxQbHVnaW5zKCl7cmV0dXJuW3RoaXMuZ2VuZXJhdGVQYXN0ZVJ1bGVzUGx1Z2luKCldfWdlbmVyYXRlUGFzdGVSdWxlc1BsdWdpbigpe3ZhciBlLHQ7Y29uc3Qgbj1bXTtmb3IoY29uc3QgciBvZiB0aGlzLnN0b3JlLmV4dGVuc2lvbnMpe2lmKChlPXRoaXMuc3RvcmUubWFuYWdlclNldHRpbmdzLmV4Y2x1ZGUpIT1udWxsJiZlLnBhc3RlUnVsZXN8fCFyLmNyZWF0ZVBhc3RlUnVsZXN8fCh0PXIub3B0aW9ucy5leGNsdWRlKSE9bnVsbCYmdC5wYXN0ZVJ1bGVzKWNvbnRpbnVlO2NvbnN0IG89ci5jcmVhdGVQYXN0ZVJ1bGVzKCksaT1lbihvKT9vOltvXTtuLnB1c2goLi4uaSl9cmV0dXJuIHFWKG4pfX0sWng9Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wbHVnaW5zPVtdLHRoaXMubWFuYWdlclBsdWdpbnM9W10sdGhpcy5hcHBseVN0YXRlSGFuZGxlcnM9W10sdGhpcy5pbml0U3RhdGVIYW5kbGVycz1bXSx0aGlzLmFwcGVuZFRyYW5zYWN0aW9uSGFuZGxlcnM9W10sdGhpcy5wbHVnaW5LZXlzPWhlKCksdGhpcy5zdGF0ZUdldHRlcnM9bmV3IE1hcCx0aGlzLmdldFBsdWdpblN0YXRlQ3JlYXRvcj1lPT50PT5lLmdldFN0YXRlKHQ/P3RoaXMuc3RvcmUuZ2V0U3RhdGUoKSksdGhpcy5nZXRTdGF0ZUJ5TmFtZT1lPT57Y29uc3QgdD10aGlzLnN0YXRlR2V0dGVycy5nZXQoZSk7cmV0dXJuIGJlKHQse21lc3NhZ2U6Ik5vIHBsdWdpbiBleGlzdHMgZm9yIHRoZSByZXF1ZXN0ZWQgZXh0ZW5zaW9uIG5hbWUuIn0pLHQoKX19Z2V0IG5hbWUoKXtyZXR1cm4icGx1Z2lucyJ9b25DcmVhdGUoKXtjb25zdHtzZXRTdG9yZUtleTplLHNldEV4dGVuc2lvblN0b3JlOnQsbWFuYWdlclNldHRpbmdzOm4sZXh0ZW5zaW9uczpyfT10aGlzLnN0b3JlO3RoaXMudXBkYXRlRXh0ZW5zaW9uU3RvcmUoKTtjb25zdHtwbHVnaW5zOm89W119PW47dGhpcy51cGRhdGVQbHVnaW5zKG8sdGhpcy5tYW5hZ2VyUGx1Z2lucyk7Zm9yKGNvbnN0IGkgb2YgcilpLm9uQXBwbHlTdGF0ZSYmdGhpcy5hcHBseVN0YXRlSGFuZGxlcnMucHVzaChpLm9uQXBwbHlTdGF0ZS5iaW5kKGkpKSxpLm9uSW5pdFN0YXRlJiZ0aGlzLmluaXRTdGF0ZUhhbmRsZXJzLnB1c2goaS5vbkluaXRTdGF0ZS5iaW5kKGkpKSxpLm9uQXBwZW5kVHJhbnNhY3Rpb24mJnRoaXMuYXBwZW5kVHJhbnNhY3Rpb25IYW5kbGVycy5wdXNoKGkub25BcHBlbmRUcmFuc2FjdGlvbi5iaW5kKGkpKSx0aGlzLmV4dHJhY3RFeHRlbnNpb25QbHVnaW5zKGkpO3RoaXMubWFuYWdlclBsdWdpbnM9byx0aGlzLnN0b3JlLnNldFN0b3JlS2V5KCJwbHVnaW5zIix0aGlzLnBsdWdpbnMpLGUoInBsdWdpbktleXMiLHRoaXMucGx1Z2luS2V5cyksZSgiZ2V0UGx1Z2luU3RhdGUiLHRoaXMuZ2V0U3RhdGVCeU5hbWUpLHQoImdldFBsdWdpblN0YXRlIix0aGlzLmdldFN0YXRlQnlOYW1lKX1jcmVhdGVQbHVnaW4oKXtyZXR1cm57YXBwZW5kVHJhbnNhY3Rpb246KGUsdCxuKT0+e2NvbnN0IHI9bi50cixvPXtwcmV2aW91c1N0YXRlOnQsdHI6cix0cmFuc2FjdGlvbnM6ZSxzdGF0ZTpufTtmb3IoY29uc3QgaSBvZiB0aGlzLmFwcGVuZFRyYW5zYWN0aW9uSGFuZGxlcnMpaShvKTtyZXR1cm4gdGhpcy5vcHRpb25zLmFwcGVuZFRyYW5zYWN0aW9uKG8pLHIuZG9jQ2hhbmdlZHx8ci5zdGVwcy5sZW5ndGg+MHx8ci5zZWxlY3Rpb25TZXR8fHIuc3RvcmVkTWFya3NTZXQ/cjp2b2lkIDB9LHN0YXRlOntpbml0OihlLHQpPT57Zm9yKGNvbnN0IG4gb2YgdGhpcy5pbml0U3RhdGVIYW5kbGVycyluKHQpfSxhcHBseTooZSx0LG4scik9Pntjb25zdCBvPXtwcmV2aW91c1N0YXRlOm4sc3RhdGU6cix0cjplfTtmb3IoY29uc3QgaSBvZiB0aGlzLmFwcGx5U3RhdGVIYW5kbGVycylpKG8pO3RoaXMub3B0aW9ucy5hcHBseVN0YXRlKG8pfX19fWV4dHJhY3RFeHRlbnNpb25QbHVnaW5zKGUpe3ZhciB0LG47aWYoISghZS5jcmVhdGVQbHVnaW4mJiFlLmNyZWF0ZUV4dGVybmFsUGx1Z2luc3x8KHQ9dGhpcy5zdG9yZS5tYW5hZ2VyU2V0dGluZ3MuZXhjbHVkZSkhPW51bGwmJnQucGx1Z2luc3x8KG49ZS5vcHRpb25zLmV4Y2x1ZGUpIT1udWxsJiZuLnBsdWdpbnMpKXtpZihlLmNyZWF0ZVBsdWdpbil7Y29uc3Qgbz1uZXcgY3UoZS5uYW1lKTt0aGlzLnBsdWdpbktleXNbZS5uYW1lXT1vO2NvbnN0IGk9dGhpcy5nZXRQbHVnaW5TdGF0ZUNyZWF0b3Iobyk7ZS5wbHVnaW5LZXk9byxlLmdldFBsdWdpblN0YXRlPWksdGhpcy5zdGF0ZUdldHRlcnMuc2V0KGUubmFtZSxpKSx0aGlzLnN0YXRlR2V0dGVycy5zZXQoZS5jb25zdHJ1Y3RvcixpKTtjb25zdCBzPXsuLi5lLmNyZWF0ZVBsdWdpbigpLGtleTpvfSxhPW5ldyBIaShzKTt0aGlzLnVwZGF0ZVBsdWdpbnMoW2FdLGUucGx1Z2luP1tlLnBsdWdpbl06dm9pZCAwKSxlLnBsdWdpbj1hfWlmKGUuY3JlYXRlRXh0ZXJuYWxQbHVnaW5zKXtjb25zdCBvPWUuY3JlYXRlRXh0ZXJuYWxQbHVnaW5zKCk7dGhpcy51cGRhdGVQbHVnaW5zKG8sZS5leHRlcm5hbFBsdWdpbnMpLGUuZXh0ZXJuYWxQbHVnaW5zPW99fX11cGRhdGVQbHVnaW5zKGUsdCl7aWYoIXR8fEpzKHQpKXt0aGlzLnBsdWdpbnM9Wy4uLnRoaXMucGx1Z2lucywuLi5lXTtyZXR1cm59aWYoZS5sZW5ndGghPT10Lmxlbmd0aCl7dGhpcy5wbHVnaW5zPVsuLi50aGlzLnBsdWdpbnMuZmlsdGVyKHI9PiF0LmluY2x1ZGVzKHIpKSwuLi5lXTtyZXR1cm59Y29uc3Qgbj1uZXcgTWFwO2Zvcihjb25zdFtyLG9db2YgZS5lbnRyaWVzKCkpbi5zZXQoUHQodCxyKSxvKTt0aGlzLnBsdWdpbnM9dGhpcy5wbHVnaW5zLm1hcChyPT50LmluY2x1ZGVzKHIpP24uZ2V0KHIpOnIpfXVwZGF0ZUV4dGVuc2lvblN0b3JlKCl7Y29uc3R7c2V0RXh0ZW5zaW9uU3RvcmU6ZX09dGhpcy5zdG9yZTtlKCJ1cGRhdGVQbHVnaW5zIix0aGlzLnVwZGF0ZVBsdWdpbnMuYmluZCh0aGlzKSksZSgiZGlzcGF0Y2hQbHVnaW5VcGRhdGUiLHRoaXMuZGlzcGF0Y2hQbHVnaW5VcGRhdGUuYmluZCh0aGlzKSksZSgidXBkYXRlRXh0ZW5zaW9uUGx1Z2lucyIsdGhpcy51cGRhdGVFeHRlbnNpb25QbHVnaW5zLmJpbmQodGhpcykpfXVwZGF0ZUV4dGVuc2lvblBsdWdpbnMoZSl7Y29uc3QgdD1LTihlKT9lOmZIKGUpP3RoaXMuc3RvcmUubWFuYWdlci5nZXRFeHRlbnNpb24oZSk6dGhpcy5zdG9yZS5leHRlbnNpb25zLmZpbmQobj0+bi5uYW1lPT09ZSk7YmUodCx7Y29kZTpxLklOVkFMSURfTUFOQUdFUl9FWFRFTlNJT04sbWVzc2FnZTpgVGhlIGV4dGVuc2lvbiAke2V9IGRvZXMgbm90IGV4aXN0IHdpdGhpbiB0aGUgZWRpdG9yLmB9KSx0aGlzLmV4dHJhY3RFeHRlbnNpb25QbHVnaW5zKHQpLHRoaXMuc3RvcmUuc2V0U3RvcmVLZXkoInBsdWdpbnMiLHRoaXMucGx1Z2lucyksdGhpcy5kaXNwYXRjaFBsdWdpblVwZGF0ZSgpfWRpc3BhdGNoUGx1Z2luVXBkYXRlKCl7YmUodGhpcy5zdG9yZS5waGFzZT49cnIuRWRpdG9yVmlldyx7Y29kZTpxLk1BTkFHRVJfUEhBU0VfRVJST1IsbWVzc2FnZToiYGRpc3BhdGNoUGx1Z2luVXBkYXRlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHZpZXcgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIG1hbmFnZXIuIn0pO2NvbnN0e3ZpZXc6ZSx1cGRhdGVTdGF0ZTp0fT10aGlzLnN0b3JlLG49ZS5zdGF0ZS5yZWNvbmZpZ3VyZSh7cGx1Z2luczp0aGlzLnBsdWdpbnN9KTt0KG4pfX07Wng9bGUoW0plKHtkZWZhdWx0UHJpb3JpdHk6Y3QuSGlnaGVzdCxoYW5kbGVyS2V5czpbImFwcGx5U3RhdGUiLCJhcHBlbmRUcmFuc2FjdGlvbiJdfSldLFp4KTt2YXIgSng9Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5keW5hbWljQXR0cmlidXRlcz17bWFya3M6aGUoKSxub2RlczpoZSgpfX1nZXQgbmFtZSgpe3JldHVybiJzY2hlbWEifW9uQ3JlYXRlKCl7Y29uc3R7bWFuYWdlclNldHRpbmdzOmUsdGFnczp0LG1hcmtOYW1lczpuLG5vZGVOYW1lczpyLGV4dGVuc2lvbnM6b309dGhpcy5zdG9yZSx7ZGVmYXVsdEJsb2NrTm9kZTppLGRpc2FibGVFeHRyYUF0dHJpYnV0ZXM6cyxub2RlT3ZlcnJpZGU6YSxtYXJrT3ZlcnJpZGU6bH09ZSxjPW09PiEhKG0mJnRbTGUuQmxvY2tdLmluY2x1ZGVzKG0pKTtpZihlLnNjaGVtYSl7Y29uc3R7bm9kZXM6bSxtYXJrczpnfT1ESChlLnNjaGVtYSk7dGhpcy5hZGRTY2hlbWEoZS5zY2hlbWEsbSxnKTtyZXR1cm59Y29uc3QgdT1jKGkpP3tkb2M6aGUoKSxbaV06aGUoKX06aGUoKSxkPWhlKCksZj1USCh7c2V0dGluZ3M6ZSxnYXRoZXJlZFNjaGVtYUF0dHJpYnV0ZXM6dGhpcy5nYXRoZXJFeHRyYUF0dHJpYnV0ZXMobyksbm9kZU5hbWVzOnIsbWFya05hbWVzOm4sdGFnczp0fSk7Zm9yKGNvbnN0IG0gb2Ygbyl7ZlttLm5hbWVdPXsuLi5mW20ubmFtZV0sLi4ubS5vcHRpb25zLmV4dHJhQXR0cmlidXRlc307Y29uc3QgZz1zPT09ITB8fG0ub3B0aW9ucy5kaXNhYmxlRXh0cmFBdHRyaWJ1dGVzPT09ITB8fG0uY29uc3RydWN0b3IuZGlzYWJsZUV4dHJhQXR0cmlidXRlcz09PSEwO2lmKHVwKG0pKXtjb25zdHtzcGVjOnksZHluYW1pYzp2fT1KXyh7Y3JlYXRlRXh0ZW5zaW9uU3BlYzooeCx3KT0+bS5jcmVhdGVOb2RlU3BlYyh4LHcpLGV4dHJhQXR0cmlidXRlczpQdChmLG0ubmFtZSksb3ZlcnJpZGU6ey4uLmEsLi4ubS5vcHRpb25zLm5vZGVPdmVycmlkZX0saWdub3JlRXh0cmFBdHRyaWJ1dGVzOmcsbmFtZTptLmNvbnN0cnVjdG9yTmFtZSx0YWdzOm0udGFnc30pO20uc3BlYz15LHVbbS5uYW1lXT15LE9iamVjdC5rZXlzKHYpLmxlbmd0aD4wJiYodGhpcy5keW5hbWljQXR0cmlidXRlcy5ub2Rlc1ttLm5hbWVdPXYpfWlmKGx2KG0pKXtjb25zdHtzcGVjOnksZHluYW1pYzp2fT1KXyh7Y3JlYXRlRXh0ZW5zaW9uU3BlYzooeCx3KT0+bS5jcmVhdGVNYXJrU3BlYyh4LHcpLGV4dHJhQXR0cmlidXRlczpQdChmLG0ubmFtZSksb3ZlcnJpZGU6ey4uLmwsLi4ubS5vcHRpb25zLm1hcmtPdmVycmlkZX0saWdub3JlRXh0cmFBdHRyaWJ1dGVzOmcsbmFtZTptLmNvbnN0cnVjdG9yTmFtZSx0YWdzOm0udGFncz8/W119KTttLnNwZWM9eSxkW20ubmFtZV09eSxPYmplY3Qua2V5cyh2KS5sZW5ndGg+MCYmKHRoaXMuZHluYW1pY0F0dHJpYnV0ZXMubWFya3NbbS5uYW1lXT12KX19Y29uc3QgcD1uZXcgYjkoe25vZGVzOnUsbWFya3M6ZCx0b3BOb2RlOiJkb2MifSk7dGhpcy5hZGRTY2hlbWEocCx1LGQpfWNyZWF0ZVBsdWdpbigpe3JldHVybnthcHBlbmRUcmFuc2FjdGlvbjooZSx0LG4pPT57Y29uc3R7dHI6cn09bjtyZXR1cm4hZS5zb21lKGk9PmkuZG9jQ2hhbmdlZCl8fE9iamVjdC5rZXlzKHRoaXMuZHluYW1pY0F0dHJpYnV0ZXMubm9kZXMpLmxlbmd0aD09PTAmJk9iamVjdC5rZXlzKHRoaXMuZHluYW1pY0F0dHJpYnV0ZXMubWFya3MpLmxlbmd0aD09PTA/bnVsbDooci5kb2MuZGVzY2VuZGFudHMoKGkscyk9Pih0aGlzLmNoZWNrQW5kVXBkYXRlRHluYW1pY05vZGVzKGkscyxyKSx0aGlzLmNoZWNrQW5kVXBkYXRlRHluYW1pY01hcmtzKGkscyxyKSwhMCkpLHIuc3RlcHMubGVuZ3RoPjA/cjpudWxsKX19fWFkZFNjaGVtYShlLHQsbil7dGhpcy5zdG9yZS5zZXRTdG9yZUtleSgibm9kZXMiLHQpLHRoaXMuc3RvcmUuc2V0U3RvcmVLZXkoIm1hcmtzIixuKSx0aGlzLnN0b3JlLnNldFN0b3JlS2V5KCJzY2hlbWEiLGUpLHRoaXMuc3RvcmUuc2V0RXh0ZW5zaW9uU3RvcmUoInNjaGVtYSIsZSksdGhpcy5zdG9yZS5zZXRTdG9yZUtleSgiZGVmYXVsdEJsb2NrTm9kZSIsb3YoZSkubmFtZSk7Zm9yKGNvbnN0IHIgb2YgT2JqZWN0LnZhbHVlcyhlLm5vZGVzKSlpZihyLm5hbWUhPT0iZG9jIiYmKHIuaXNCbG9ja3x8ci5pc1RleHRibG9jaykpYnJlYWt9Y2hlY2tBbmRVcGRhdGVEeW5hbWljTm9kZXMoZSx0LG4pe2Zvcihjb25zdFtyLG9db2YgSnQodGhpcy5keW5hbWljQXR0cmlidXRlcy5ub2RlcykpaWYoZS50eXBlLm5hbWU9PT1yKWZvcihjb25zdFtpLHNdb2YgSnQobykpe2lmKCFacyhlLmF0dHJzW2ldKSljb250aW51ZTtjb25zdCBhPXsuLi5lLmF0dHJzLFtpXTpzKGUpfTtuLnNldE5vZGVNYXJrdXAodCx2b2lkIDAsYSksVl8obil9fWNoZWNrQW5kVXBkYXRlRHluYW1pY01hcmtzKGUsdCxuKXtmb3IoY29uc3RbcixvXW9mIEp0KHRoaXMuZHluYW1pY0F0dHJpYnV0ZXMubWFya3MpKXtjb25zdCBpPVB0KHRoaXMuc3RvcmUuc2NoZW1hLm1hcmtzLHIpLHM9ZS5tYXJrcy5maW5kKGE9PmEudHlwZS5uYW1lPT09cik7aWYocylmb3IoY29uc3RbYSxsXW9mIEp0KG8pKXtpZighWnMocy5hdHRyc1thXSkpY29udGludWU7Y29uc3QgYz1MaShuLmRvYy5yZXNvbHZlKHQpLGkpO2lmKCFjKWNvbnRpbnVlO2NvbnN0e2Zyb206dSx0bzpkfT1jLGY9aS5jcmVhdGUoey4uLnMuYXR0cnMsW2FdOmwocyl9KTtuLnJlbW92ZU1hcmsodSxkLGkpLmFkZE1hcmsodSxkLGYpLFZfKG4pfX19Z2F0aGVyRXh0cmFBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSluLmNyZWF0ZVNjaGVtYUF0dHJpYnV0ZXMmJnQucHVzaCguLi5uLmNyZWF0ZVNjaGVtYUF0dHJpYnV0ZXMoKSk7cmV0dXJuIHR9fTtKeD1sZShbSmUoe2RlZmF1bHRQcmlvcml0eTpjdC5IaWdoZXN0fSldLEp4KTtmdW5jdGlvbiBUSChlKXtjb25zdHtzZXR0aW5nczp0LGdhdGhlcmVkU2NoZW1hQXR0cmlidXRlczpuLG5vZGVOYW1lczpyLG1hcmtOYW1lczpvLHRhZ3M6aX09ZSxzPWhlKCk7aWYodC5kaXNhYmxlRXh0cmFBdHRyaWJ1dGVzKXJldHVybiBzO2NvbnN0IGE9Wy4uLm4sLi4udC5leHRyYUF0dHJpYnV0ZXM/P1tdXTtmb3IoY29uc3QgbCBvZiBhPz9bXSl7Y29uc3QgYz1NSCh7aWRlbnRpZmllcnM6bC5pZGVudGlmaWVycyxub2RlTmFtZXM6cixtYXJrTmFtZXM6byx0YWdzOml9KTtmb3IoY29uc3QgdSBvZiBjKXtjb25zdCBkPXNbdV0/P3t9O3NbdV09ey4uLmQsLi4ubC5hdHRyaWJ1dGVzfX19cmV0dXJuIHN9ZnVuY3Rpb24gUEgoZSl7cmV0dXJuIGJsKGUpJiZlbihlLnRhZ3MpfWZ1bmN0aW9uIE1IKGUpe2NvbnN0e2lkZW50aWZpZXJzOnQsbm9kZU5hbWVzOm4sbWFya05hbWVzOnIsdGFnczpvfT1lO2lmKHQ9PT0ibm9kZXMiKXJldHVybiBuO2lmKHQ9PT0ibWFya3MiKXJldHVybiByO2lmKHQ9PT0iYWxsIilyZXR1cm5bLi4ubiwuLi5yXTtpZihlbih0KSlyZXR1cm4gdDtiZShQSCh0KSx7Y29kZTpxLkVYVEVOU0lPTl9FWFRSQV9BVFRSSUJVVEVTLG1lc3NhZ2U6IkludmFsaWQgdmFsdWUgcGFzc2VkIGFzIGFuIGlkZW50aWZpZXIgd2hlbiBjcmVhdGluZyBgZXh0cmFBdHRyaWJ1dGVzYC4ifSk7Y29uc3R7dGFnczppPVtdLG5hbWVzOnM9W10sYmVoYXZpb3I6YT0iYW55IixleGNsdWRlTmFtZXM6bCxleGNsdWRlVGFnczpjLHR5cGU6dX09dCxkPW5ldyBTZXQsZj11PT09Im1hcmsiP3I6dT09PSJub2RlIj9uOlsuLi5yLC4uLm5dLHA9Zz0+Zi5pbmNsdWRlcyhnKSYmIShsIT1udWxsJiZsLmluY2x1ZGVzKGcpKTtmb3IoY29uc3QgZyBvZiBzKXAoZykmJmQuYWRkKGcpO2NvbnN0IG09bmV3IE1hcDtmb3IoY29uc3QgZyBvZiBpKWlmKCEoYyE9bnVsbCYmYy5pbmNsdWRlcyhnKSkpZm9yKGNvbnN0IHkgb2Ygb1tnXSl7aWYoIXAoeSkpY29udGludWU7aWYoYT09PSJhbnkiKXtkLmFkZCh5KTtjb250aW51ZX1jb25zdCB2PW0uZ2V0KHkpPz9uZXcgU2V0O3YuYWRkKGcpLG0uc2V0KHksdil9Zm9yKGNvbnN0W2cseV1vZiBtKXkuc2l6ZT09PWkubGVuZ3RoJiZkLmFkZChnKTtyZXR1cm5bLi4uZF19ZnVuY3Rpb24gSl8oZSl7dmFyIHQ7Y29uc3R7Y3JlYXRlRXh0ZW5zaW9uU3BlYzpuLGV4dHJhQXR0cmlidXRlczpyLGlnbm9yZUV4dHJhQXR0cmlidXRlczpvLG5hbWU6aSx0YWdzOnMsb3ZlcnJpZGU6YX09ZSxsPWhlKCk7ZnVuY3Rpb24gYyh5LHYpe2xbeV09dn1sZXQgdT0hMTtmdW5jdGlvbiBkKCl7dT0hMH1jb25zdCBmPVJIKHIsbyxkLGMpLHA9TkgocixvKSxtPSRIKHIsbyksZz1uKHtkZWZhdWx0czpmLHBhcnNlOnAsZG9tOm19LGEpO3JldHVybiBiZShvfHx1LHtjb2RlOnEuRVhURU5TSU9OX1NQRUMsbWVzc2FnZTpgV2hlbiBjcmVhdGluZyBhIG5vZGUgc3BlY2lmaWNhdGlvbiB5b3UgbXVzdCBjYWxsIHRoZSAnZGVmYXVsdHMnLCBhbmQgcGFyc2UsIGFuZCAnZG9tJyBtZXRob2RzLiBUbyBhdm9pZCB0aGlzIGVycm9yIHlvdSBjYW4gc2V0IHRoZSBzdGF0aWMgcHJvcGVydHkgJ2Rpc2FibGVFeHRyYUF0dHJpYnV0ZXMnIG9mICcke2l9JyB0byAndHJ1ZScuYH0pLGcuZ3JvdXA9Wy4uLigodD1nLmdyb3VwKT09bnVsbD92b2lkIDA6dC5zcGxpdCgiICIpKT8/W10sLi4uc10uam9pbigiICIpfHx2b2lkIDAse3NwZWM6ZyxkeW5hbWljOmx9fWZ1bmN0aW9uIHl3KGUpe3JldHVybiBfZShlKXx8cHQoZSk/e2RlZmF1bHQ6ZX06KGJlKGUse21lc3NhZ2U6YCR7R00oZSl9IGlzIG5vdCBzdXBwb3J0ZWRgLGNvZGU6cS5FWFRFTlNJT05fRVhUUkFfQVRUUklCVVRFU30pLGUpfWZ1bmN0aW9uIFJIKGUsdCxuLHIpe3JldHVybigpPT57bigpO2NvbnN0IG89aGUoKTtpZih0KXJldHVybiBvO2Zvcihjb25zdFtpLHNdb2YgSnQoZSkpe2xldCBsPXl3KHMpLmRlZmF1bHQ7cHQobCkmJihyKGksbCksbD1udWxsKSxvW2ldPWw9PT12b2lkIDA/e306e2RlZmF1bHQ6bH19cmV0dXJuIG99fWZ1bmN0aW9uIE5IKGUsdCl7cmV0dXJuIG49Pntjb25zdCByPWhlKCk7aWYodClyZXR1cm4gcjtmb3IoY29uc3RbbyxpXW9mIEp0KGUpKXtjb25zdHtwYXJzZURPTTpzLC4uLmF9PXl3KGkpO2lmKG5pKG4pKXtpZihacyhzKSl7cltvXT1uLmdldEF0dHJpYnV0ZShvKT8/YS5kZWZhdWx0O2NvbnRpbnVlfWlmKHB0KHMpKXtyW29dPXMobik/P2EuZGVmYXVsdDtjb250aW51ZX1yW29dPW4uZ2V0QXR0cmlidXRlKHMpPz9hLmRlZmF1bHR9fXJldHVybiByfX1mdW5jdGlvbiAkSChlLHQpe3JldHVybiBuPT57Y29uc3Qgcj1oZSgpO2lmKHQpcmV0dXJuIHI7ZnVuY3Rpb24gbyhpLHMpe2lmKGkpe2lmKF9lKGkpKXtyW3NdPWk7cmV0dXJufWlmKGVuKGkpKXtjb25zdFthLGxdPWk7clthXT1sPz9uLmF0dHJzW3NdO3JldHVybn1mb3IoY29uc3RbYSxsXW9mIEp0KGkpKXJbYV09bH19Zm9yKGNvbnN0W2ksc11vZiBKdChlKSl7Y29uc3R7dG9ET006YSxwYXJzZURPTTpsfT15dyhzKTtpZihacyhhKSl7Y29uc3QgYz1fZShsKT9sOmk7cltjXT1uLmF0dHJzW2ldO2NvbnRpbnVlfWlmKHB0KGEpKXtvKGEobi5hdHRycyxBSChuKSksaSk7Y29udGludWV9byhhLGkpfXJldHVybiByfX1mdW5jdGlvbiBBSChlKXtyZXR1cm4gbnYoZSk/e25vZGU6ZX06cVUoZSk/e21hcms6ZX06e319ZnVuY3Rpb24gREgoZSl7Y29uc3QgdD1oZSgpLG49aGUoKTtmb3IoY29uc3RbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUubm9kZXMpKXRbcl09by5zcGVjO2Zvcihjb25zdFtyLG9db2YgT2JqZWN0LmVudHJpZXMoZS5tYXJrcykpbltyXT1vLnNwZWM7cmV0dXJue25vZGVzOnQsbWFya3M6bn19dmFyIFhjPWNsYXNzIGV4dGVuZHMgX3R7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub25BZGRDdXN0b21IYW5kbGVyPSh7c3VnZ2VzdGVyOmV9KT0+e3ZhciB0O2lmKCEoIWV8fCh0PXRoaXMuc3RvcmUubWFuYWdlclNldHRpbmdzLmV4Y2x1ZGUpIT1udWxsJiZ0LnN1Z2dlc3RlcnMpKXJldHVybiBVXyh0aGlzLnN0b3JlLmdldFN0YXRlKCksZSl9fWdldCBuYW1lKCl7cmV0dXJuInN1Z2dlc3QifW9uQ3JlYXRlKCl7dGhpcy5zdG9yZS5zZXRFeHRlbnNpb25TdG9yZSgiYWRkU3VnZ2VzdGVyIixlPT5VXyh0aGlzLnN0b3JlLmdldFN0YXRlKCksZSkpLHRoaXMuc3RvcmUuc2V0RXh0ZW5zaW9uU3RvcmUoInJlbW92ZVN1Z2dlc3RlciIsZT0+TlUodGhpcy5zdG9yZS5nZXRTdGF0ZSgpLGUpKX1jcmVhdGVFeHRlcm5hbFBsdWdpbnMoKXt2YXIgZSx0O2NvbnN0IG49W107Zm9yKGNvbnN0IHIgb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKXtpZigoZT10aGlzLnN0b3JlLm1hbmFnZXJTZXR0aW5ncy5leGNsdWRlKSE9bnVsbCYmZS5zdWdnZXN0ZXJzKWJyZWFrO2lmKCFyLmNyZWF0ZVN1Z2dlc3RlcnN8fCh0PXIub3B0aW9ucy5leGNsdWRlKSE9bnVsbCYmdC5zdWdnZXN0ZXJzKWNvbnRpbnVlO2NvbnN0IG89ci5jcmVhdGVTdWdnZXN0ZXJzKCksaT1lbihvKT9vOltvXTtuLnB1c2goLi4uaSl9cmV0dXJuWyRVKC4uLm4pXX1nZXRTdWdnZXN0U3RhdGUoZSl7cmV0dXJuIGN3KGU/P3RoaXMuc3RvcmUuZ2V0U3RhdGUoKSl9Z2V0U3VnZ2VzdE1ldGhvZHMoKXtjb25zdHthZGRJZ25vcmVkOmUsY2xlYXJJZ25vcmVkOnQscmVtb3ZlSWdub3JlZDpuLGlnbm9yZU5leHRFeGl0OnIsc2V0TWFya1JlbW92ZWQ6byxmaW5kTWF0Y2hBdFBvc2l0aW9uOmksZmluZE5leHRUZXh0U2VsZWN0aW9uOnMsc2V0TGFzdENoYW5nZUZyb21BcHBlbmQ6YX09dGhpcy5nZXRTdWdnZXN0U3RhdGUoKTtyZXR1cm57YWRkSWdub3JlZDplLGNsZWFySWdub3JlZDp0LHJlbW92ZUlnbm9yZWQ6bixpZ25vcmVOZXh0RXhpdDpyLHNldE1hcmtSZW1vdmVkOm8sZmluZE1hdGNoQXRQb3NpdGlvbjppLGZpbmROZXh0VGV4dFNlbGVjdGlvbjpzLHNldExhc3RDaGFuZ2VGcm9tQXBwZW5kOmF9fWlzU3VnZ2VzdGVyQWN0aXZlKGUpe3ZhciB0O3JldHVybiAkbyhlbihlKT9lOltlXSwodD10aGlzLmdldFN1Z2dlc3RTdGF0ZSgpLm1hdGNoKT09bnVsbD92b2lkIDA6dC5zdWdnZXN0ZXIubmFtZSl9fTtsZShbSXQoKV0sWGMucHJvdG90eXBlLCJnZXRTdWdnZXN0U3RhdGUiLDEpO2xlKFtJdCgpXSxYYy5wcm90b3R5cGUsImdldFN1Z2dlc3RNZXRob2RzIiwxKTtsZShbSXQoKV0sWGMucHJvdG90eXBlLCJpc1N1Z2dlc3RlckFjdGl2ZSIsMSk7WGM9bGUoW0plKHtjdXN0b21IYW5kbGVyS2V5czpbInN1Z2dlc3RlciJdfSldLFhjKTt2YXIgUXg9Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hbGxUYWdzPWhlKCksdGhpcy5wbGFpblRhZ3M9aGUoKSx0aGlzLm1hcmtUYWdzPWhlKCksdGhpcy5ub2RlVGFncz1oZSgpfWdldCBuYW1lKCl7cmV0dXJuInRhZ3MifW9uQ3JlYXRlKCl7dGhpcy5yZXNldFRhZ3MoKTtmb3IoY29uc3QgZSBvZiB0aGlzLnN0b3JlLmV4dGVuc2lvbnMpdGhpcy51cGRhdGVUYWdGb3JFeHRlbnNpb24oZSk7dGhpcy5zdG9yZS5zZXRTdG9yZUtleSgidGFncyIsdGhpcy5hbGxUYWdzKSx0aGlzLnN0b3JlLnNldEV4dGVuc2lvblN0b3JlKCJ0YWdzIix0aGlzLmFsbFRhZ3MpLHRoaXMuc3RvcmUuc2V0U3RvcmVLZXkoInBsYWluVGFncyIsdGhpcy5wbGFpblRhZ3MpLHRoaXMuc3RvcmUuc2V0RXh0ZW5zaW9uU3RvcmUoInBsYWluVGFncyIsdGhpcy5wbGFpblRhZ3MpLHRoaXMuc3RvcmUuc2V0U3RvcmVLZXkoIm1hcmtUYWdzIix0aGlzLm1hcmtUYWdzKSx0aGlzLnN0b3JlLnNldEV4dGVuc2lvblN0b3JlKCJtYXJrVGFncyIsdGhpcy5tYXJrVGFncyksdGhpcy5zdG9yZS5zZXRTdG9yZUtleSgibm9kZVRhZ3MiLHRoaXMubm9kZVRhZ3MpLHRoaXMuc3RvcmUuc2V0RXh0ZW5zaW9uU3RvcmUoIm5vZGVUYWdzIix0aGlzLm5vZGVUYWdzKX1yZXNldFRhZ3MoKXtjb25zdCBlPWhlKCksdD1oZSgpLG49aGUoKSxyPWhlKCk7Zm9yKGNvbnN0IG8gb2YgR2coTGUpKWVbb109W10sdFtvXT1bXSxuW29dPVtdLHJbb109W107dGhpcy5hbGxUYWdzPWUsdGhpcy5wbGFpblRhZ3M9dCx0aGlzLm1hcmtUYWdzPW4sdGhpcy5ub2RlVGFncz1yfXVwZGF0ZVRhZ0ZvckV4dGVuc2lvbihlKXt2YXIgdCxuO2NvbnN0IHI9bmV3IFNldChbLi4uZS50YWdzPz9bXSwuLi4oKHQ9ZS5jcmVhdGVUYWdzKT09bnVsbD92b2lkIDA6dC5jYWxsKGUpKT8/W10sLi4uZS5vcHRpb25zLmV4dHJhVGFncz8/W10sLi4uKChuPXRoaXMuc3RvcmUubWFuYWdlclNldHRpbmdzLmV4dHJhVGFncyk9PW51bGw/dm9pZCAwOm5bZS5uYW1lXSk/P1tdXSk7Zm9yKGNvbnN0IG8gb2YgciliZShJSChvKSx7Y29kZTpxLkVYVEVOU0lPTixtZXNzYWdlOmBUaGUgdGFnIHByb3ZpZGVkIGJ5IHRoZSBleHRlbnNpb246ICR7ZS5jb25zdHJ1Y3Rvck5hbWV9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVkaXRvci4gVG8gYWRkIGN1c3RvbSB0YWdzIHlvdSBjYW4gdXNlIHRoZSAnbXV0YXRlVGFnJyBtZXRob2QuYH0pLHRoaXMuYWxsVGFnc1tvXS5wdXNoKGUubmFtZSkscU4oZSkmJnRoaXMucGxhaW5UYWdzW29dLnB1c2goZS5uYW1lKSxsdihlKSYmdGhpcy5tYXJrVGFnc1tvXS5wdXNoKGUubmFtZSksdXAoZSkmJnRoaXMubm9kZVRhZ3Nbb10ucHVzaChlLm5hbWUpO2UudGFncz1bLi4ucl19fTtReD1sZShbSmUoe2RlZmF1bHRQcmlvcml0eTpjdC5IaWdoZXN0fSldLFF4KTtmdW5jdGlvbiBJSChlKXtyZXR1cm4gJG8oR2coTGUpLGUpfXZhciBMSD1uZXcgY3UoInJlbWlycm9yRmlsZVBsYWNlaG9sZGVyUGx1Z2luIik7ZnVuY3Rpb24gakgoKXtjb25zdCBlPW5ldyBIaSh7a2V5OkxILHN0YXRlOntpbml0KCl7cmV0dXJue3NldDpldC5lbXB0eSxwYXlsb2FkczpuZXcgTWFwfX0sYXBwbHkodCx7c2V0Om4scGF5bG9hZHM6cn0pe249bi5tYXAodC5tYXBwaW5nLHQuZG9jKTtjb25zdCBvPXQuZ2V0TWV0YShlKTtpZihvKWlmKG8udHlwZT09PTApe2NvbnN0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGxhY2Vob2xkZXIiKSxzPUV0LndpZGdldChvLnBvcyxpLHtpZDpvLmlkfSk7bj1uLmFkZCh0LmRvYyxbc10pLHIuc2V0KG8uaWQsby5wYXlsb2FkKX1lbHNlIG8udHlwZT09PTEmJihuPW4ucmVtb3ZlKG4uZmluZCh2b2lkIDAsdm9pZCAwLGk9PmkuaWQ9PT1vLmlkKSksci5kZWxldGUoby5pZCkpO3JldHVybntzZXQ6bixwYXlsb2FkczpyfX19LHByb3BzOntkZWNvcmF0aW9ucyh0KXt2YXIgbjtyZXR1cm4oKG49ZS5nZXRTdGF0ZSh0KSk9PW51bGw/dm9pZCAwOm4uc2V0KT8/bnVsbH19fSk7cmV0dXJuIGV9dmFyIHpIPWNsYXNzIGV4dGVuZHMgX3R7Z2V0IG5hbWUoKXtyZXR1cm4idXBsb2FkIn1jcmVhdGVFeHRlcm5hbFBsdWdpbnMoKXtyZXR1cm5bakgoKV19fTtmdW5jdGlvbiBGSChlPXt9KXtlPXsuLi57ZXhpdE1hcmtzT25BcnJvd1ByZXNzOmJvLmRlZmF1bHRPcHRpb25zLmV4aXRNYXJrc09uQXJyb3dQcmVzcyxleGNsdWRlQmFzZUtleW1hcDpiby5kZWZhdWx0T3B0aW9ucy5leGNsdWRlQmFzZUtleW1hcCxzZWxlY3RQYXJlbnROb2RlT25Fc2NhcGU6Ym8uZGVmYXVsdE9wdGlvbnMuc2VsZWN0UGFyZW50Tm9kZU9uRXNjYXBlLHVuZG9JbnB1dFJ1bGVPbkJhY2tzcGFjZTpiby5kZWZhdWx0T3B0aW9ucy51bmRvSW5wdXRSdWxlT25CYWNrc3BhY2UscGVyc2lzdGVudFNlbGVjdGlvbkNsYXNzOkRvLmRlZmF1bHRPcHRpb25zLnBlcnNpc3RlbnRTZWxlY3Rpb25DbGFzc30sLi4uZX07Y29uc3Qgbj1DeChlLFsiZXhjbHVkZUJhc2VLZXltYXAiLCJzZWxlY3RQYXJlbnROb2RlT25Fc2NhcGUiLCJ1bmRvSW5wdXRSdWxlT25CYWNrc3BhY2UiXSkscj1DeChlLFsicGVyc2lzdGVudFNlbGVjdGlvbkNsYXNzIl0pO3JldHVybltuZXcgUXgsbmV3IEp4LG5ldyBwSCxuZXcgWngsbmV3IFl4LG5ldyBPSCxuZXcgQ0gsbmV3IFhjLG5ldyBWZSxuZXcgUXIsbmV3IGJvKG4pLG5ldyBVbSxuZXcgekgsbmV3IERvKHIpXX12YXIgUV89Y2xhc3MgZXh0ZW5kcyBfdHtnZXQgbmFtZSgpe3JldHVybiJtZXRhIn1vbkNyZWF0ZSgpe2lmKHRoaXMuc3RvcmUuc2V0U3RvcmVLZXkoImdldENvbW1hbmRNZXRhIix0aGlzLmdldENvbW1hbmRNZXRhLmJpbmQodGhpcykpLCEhdGhpcy5vcHRpb25zLmNhcHR1cmUpZm9yKGNvbnN0IGUgb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKXRoaXMuY2FwdHVyZUNvbW1hbmRzKGUpLHRoaXMuY2FwdHVyZUtleWJpbmRpbmdzKGUpfWNyZWF0ZVBsdWdpbigpe3JldHVybnt9fWNhcHR1cmVDb21tYW5kcyhlKXtjb25zdCB0PWUuZGVjb3JhdGVkQ29tbWFuZHM/P3t9LG49ZS5jcmVhdGVDb21tYW5kcztmb3IoY29uc3QgciBvZiBPYmplY3Qua2V5cyh0KSl7Y29uc3Qgbz1lW3JdO2Vbcl09KC4uLmkpPT5zPT57dmFyIGE7Y29uc3QgbD1vKC4uLmkpKHMpO3JldHVybiBzLmRpc3BhdGNoJiZsJiZ0aGlzLnNldENvbW1hbmRNZXRhKHMudHIse3R5cGU6ImNvbW1hbmQiLGNoYWluOnMuZGlzcGF0Y2ghPT0oKGE9cy52aWV3KT09bnVsbD92b2lkIDA6YS5kaXNwYXRjaCksbmFtZTpyLGV4dGVuc2lvbjplLm5hbWUsZGVjb3JhdGVkOiEwfSksbH19biYmKGUuY3JlYXRlQ29tbWFuZHM9KCk9Pntjb25zdCByPW4oKTtmb3IoY29uc3RbbyxpXW9mIE9iamVjdC5lbnRyaWVzKHIpKXJbb109KC4uLnMpPT5hPT57dmFyIGw7Y29uc3QgYz1pKC4uLnMpKGEpO3JldHVybiBhLmRpc3BhdGNoJiZjJiZ0aGlzLnNldENvbW1hbmRNZXRhKGEudHIse3R5cGU6ImNvbW1hbmQiLGNoYWluOmEuZGlzcGF0Y2ghPT0oKGw9YS52aWV3KT09bnVsbD92b2lkIDA6bC5kaXNwYXRjaCksbmFtZTpvLGV4dGVuc2lvbjplLm5hbWUsZGVjb3JhdGVkOiExfSksY307cmV0dXJuIHJ9KX1jYXB0dXJlS2V5YmluZGluZ3MoZSl7fWdldENvbW1hbmRNZXRhKGUpe3JldHVybiBlLmdldE1ldGEodGhpcy5wbHVnaW5LZXkpPz9bXX1zZXRDb21tYW5kTWV0YShlLHQpe2NvbnN0IG49dGhpcy5nZXRDb21tYW5kTWV0YShlKTtlLnNldE1ldGEodGhpcy5wbHVnaW5LZXksWy4uLm4sdF0pfX07UV89bGUoW0plKHtkZWZhdWx0T3B0aW9uczp7Y2FwdHVyZTp4by5pc0RldmVsb3BtZW50fSxzdGF0aWNLZXlzOlsiY2FwdHVyZSJdLGRlZmF1bHRQcmlvcml0eTpjdC5IaWdoZXN0fSldLFFfKTt2YXIgYmgsSnUsd2gsWWwsZnMsU2gsa2gsQkg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7SHQodGhpcyxiaCxFbSgpKSxIdCh0aGlzLEp1LHZvaWQgMCksSHQodGhpcyx3aCx2b2lkIDApLEh0KHRoaXMsWWwsITApLEh0KHRoaXMsZnMscWcoKSksSHQodGhpcyxTaCx2b2lkIDApLEh0KHRoaXMsa2gsdm9pZCAwKSx0aGlzLmdldFN0YXRlPSgpPT50aGlzLnZpZXcuc3RhdGU/P3RoaXMuaW5pdGlhbEVkaXRvclN0YXRlLHRoaXMuZ2V0UHJldmlvdXNTdGF0ZT0oKT0+dGhpcy5wcmV2aW91c1N0YXRlLHRoaXMuZGlzcGF0Y2hUcmFuc2FjdGlvbj1pPT57dmFyIHMsYTtiZSghdGhpcy5tYW5hZ2VyLmRlc3Ryb3llZCx7Y29kZTpxLk1BTkFHRVJfUEhBU0VfRVJST1IsbWVzc2FnZToiQSB0cmFuc2FjdGlvbiB3YXMgZGlzcGF0Y2hlZCB0byBhIG1hbmFnZXIgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4gUGxlYXNlIGNoZWNrIHlvdXIgc2V0IHVwLCBvciBvcGVuIGFuIGlzc3VlLiJ9KSxpPSgoYT0ocz10aGlzLnByb3BzKS5vbkRpc3BhdGNoVHJhbnNhY3Rpb24pPT1udWxsP3ZvaWQgMDphLmNhbGwocyxpLHRoaXMuZ2V0U3RhdGUoKSkpPz9pO2NvbnN0IGw9dGhpcy5nZXRTdGF0ZSgpLHtzdGF0ZTpjLHRyYW5zYWN0aW9uczp1fT1sLmFwcGx5VHJhbnNhY3Rpb24oaSk7Y24odGhpcyx3aCxsKSx0aGlzLnVwZGF0ZVN0YXRlKHtzdGF0ZTpjLHRyOmksdHJhbnNhY3Rpb25zOnV9KTtjb25zdCBkPXRoaXMubWFuYWdlci5zdG9yZS5nZXRGb3JjZWRVcGRhdGVzKGkpO0pzKGQpfHx0aGlzLnVwZGF0ZVZpZXdQcm9wcyguLi5kKX0sdGhpcy5vbkNoYW5nZT0oaT1oZSgpKT0+e3ZhciBzLGE7Y29uc3QgbD10aGlzLmV2ZW50TGlzdGVuZXJQcm9wcyhpKTt0ZSh0aGlzLFlsKSYmY24odGhpcyxZbCwhMSksKGE9KHM9dGhpcy5wcm9wcykub25DaGFuZ2UpPT1udWxsfHxhLmNhbGwocyxsKX0sdGhpcy5vbkJsdXI9aT0+e3ZhciBzLGE7Y29uc3QgbD10aGlzLmV2ZW50TGlzdGVuZXJQcm9wcygpOyhhPShzPXRoaXMucHJvcHMpLm9uQmx1cik9PW51bGx8fGEuY2FsbChzLGwsaSksdGUodGhpcyxmcykuZW1pdCgiYmx1ciIsbCxpKX0sdGhpcy5vbkZvY3VzPWk9Pnt2YXIgcyxhO2NvbnN0IGw9dGhpcy5ldmVudExpc3RlbmVyUHJvcHMoKTsoYT0ocz10aGlzLnByb3BzKS5vbkZvY3VzKT09bnVsbHx8YS5jYWxsKHMsbCxpKSx0ZSh0aGlzLGZzKS5lbWl0KCJmb2N1cyIsbCxpKX0sdGhpcy5zZXRDb250ZW50PShpLHt0cmlnZ2VyQ2hhbmdlOnM9ITF9PXt9KT0+e2NvbnN0e2RvYzphfT10aGlzLm1hbmFnZXIuY3JlYXRlU3RhdGUoe2NvbnRlbnQ6aX0pLGw9dGhpcy5nZXRTdGF0ZSgpLHtzdGF0ZTpjfT10aGlzLmdldFN0YXRlKCkuYXBwbHlUcmFuc2FjdGlvbihsLnRyLnJlcGxhY2VSYW5nZVdpdGgoMCxsLmRvYy5ub2RlU2l6ZS0yLGEpKTtpZihzKXJldHVybiB0aGlzLnVwZGF0ZVN0YXRlKHtzdGF0ZTpjLHRyaWdnZXJDaGFuZ2U6c30pO3RoaXMudmlldy51cGRhdGVTdGF0ZShjKX0sdGhpcy5jbGVhckNvbnRlbnQ9KHt0cmlnZ2VyQ2hhbmdlOmk9ITF9PXt9KT0+e3RoaXMuc2V0Q29udGVudCh0aGlzLm1hbmFnZXIuY3JlYXRlRW1wdHlEb2MoKSx7dHJpZ2dlckNoYW5nZTppfSl9LHRoaXMuY3JlYXRlU3RhdGVGcm9tQ29udGVudD0oaSxzKT0+dGhpcy5tYW5hZ2VyLmNyZWF0ZVN0YXRlKHtjb250ZW50Omksc2VsZWN0aW9uOnN9KSx0aGlzLmZvY3VzPWk9Pnt0aGlzLm1hbmFnZXIuc3RvcmUuY29tbWFuZHMuZm9jdXMoaSl9LHRoaXMuYmx1cj1pPT57dGhpcy5tYW5hZ2VyLnN0b3JlLmNvbW1hbmRzLmJsdXIoaSl9O2NvbnN0e2dldFByb3BzOnQsaW5pdGlhbEVkaXRvclN0YXRlOm4sZWxlbWVudDpyfT1lO2lmKGNuKHRoaXMsSnUsdCksY24odGhpcyxraCxuKSx0aGlzLm1hbmFnZXIuYXR0YWNoRnJhbWV3b3JrKHRoaXMsdGhpcy51cGRhdGVMaXN0ZW5lci5iaW5kKHRoaXMpKSx0aGlzLm1hbmFnZXIudmlldylyZXR1cm47Y29uc3Qgbz10aGlzLmNyZWF0ZVZpZXcobixyKTt0aGlzLm1hbmFnZXIuYWRkVmlldyhvKX1nZXQgYWRkSGFuZGxlcigpe3JldHVybiB0ZSh0aGlzLFNoKT8/Y24odGhpcyxTaCx0ZSh0aGlzLGZzKS5vbi5iaW5kKHRlKHRoaXMsZnMpKSl9Z2V0IHVwZGF0YWJsZVZpZXdQcm9wcygpe3JldHVybnthdHRyaWJ1dGVzOigpPT50aGlzLmdldEF0dHJpYnV0ZXMoKSxlZGl0YWJsZTooKT0+dGhpcy5wcm9wcy5lZGl0YWJsZT8/ITB9fWdldCBmaXJzdFJlbmRlcigpe3JldHVybiB0ZSh0aGlzLFlsKX1nZXQgcHJvcHMoKXtyZXR1cm4gdGUodGhpcyxKdSkuY2FsbCh0aGlzKX1nZXQgcHJldmlvdXNTdGF0ZSgpe3JldHVybiB0aGlzLnByZXZpb3VzU3RhdGVPdmVycmlkZT8/dGUodGhpcyx3aCk/P3RoaXMuaW5pdGlhbEVkaXRvclN0YXRlfWdldCBtYW5hZ2VyKCl7cmV0dXJuIHRoaXMucHJvcHMubWFuYWdlcn1nZXQgdmlldygpe3JldHVybiB0aGlzLm1hbmFnZXIudmlld31nZXQgdWlkKCl7cmV0dXJuIHRlKHRoaXMsYmgpfWdldCBpbml0aWFsRWRpdG9yU3RhdGUoKXtyZXR1cm4gdGUodGhpcyxraCl9dXBkYXRlTGlzdGVuZXIoZSl7Y29uc3R7c3RhdGU6dCx0cjpufT1lO3JldHVybiB0ZSh0aGlzLGZzKS5lbWl0KCJ1cGRhdGVkIix0aGlzLmV2ZW50TGlzdGVuZXJQcm9wcyh7c3RhdGU6dCx0cjpufSkpfXVwZGF0ZShlKXtjb25zdHtnZXRQcm9wczp0fT1lO3JldHVybiBjbih0aGlzLEp1LHQpLHRoaXN9dXBkYXRlVmlld1Byb3BzKC4uLmUpe2NvbnN0IHQ9Q3godGhpcy51cGRhdGFibGVWaWV3UHJvcHMsZSk7dGhpcy52aWV3LnNldFByb3BzKHsuLi50aGlzLnZpZXcucHJvcHMsLi4udH0pfWdldEF0dHJpYnV0ZXMoZSl7dmFyIHQ7Y29uc3R7YXR0cmlidXRlczpuLGF1dG9Gb2N1czpyLGNsYXNzTmFtZXM6bz1bXSxsYWJlbDppLGVkaXRhYmxlOnN9PXRoaXMucHJvcHMsYT0odD10aGlzLm1hbmFnZXIuc3RvcmUpPT1udWxsP3ZvaWQgMDp0LmF0dHJpYnV0ZXMsbD1wdChuKT9uKHRoaXMuZXZlbnRMaXN0ZW5lclByb3BzKCkpOm47bGV0IGM9e307KHJ8fE1yKHIpKSYmKGM9ZT97YXV0b0ZvY3VzOiEwfTp7YXV0b2ZvY3VzOiJ0cnVlIn0pO2NvbnN0IHU9eGYoR3goZSYmIlByb3NlbWlycm9yIiwicmVtaXJyb3ItZWRpdG9yIixhPT1udWxsP3ZvaWQgMDphLmNsYXNzLC4uLm8pLnNwbGl0KCIgIikpLmpvaW4oIiAiKSxkPXtyb2xlOiJ0ZXh0Ym94IiwuLi5jLCJhcmlhLW11bHRpbGluZSI6InRydWUiLC4uLnM/PyEwP3t9OnsiYXJpYS1yZWFkb25seSI6InRydWUifSwiYXJpYS1sYWJlbCI6aT8/IiIsLi4uYSxjbGFzczp1fTtyZXR1cm4gWXooey4uLmQsLi4ubH0pfWFkZEZvY3VzTGlzdGVuZXJzKCl7dGhpcy52aWV3LmRvbS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLm9uQmx1ciksdGhpcy52aWV3LmRvbS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5vbkZvY3VzKX1yZW1vdmVGb2N1c0xpc3RlbmVycygpe3RoaXMudmlldy5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5vbkJsdXIpLHRoaXMudmlldy5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMub25Gb2N1cyl9ZGVzdHJveSgpe3RlKHRoaXMsZnMpLmVtaXQoImRlc3Ryb3kiKSx0aGlzLnZpZXcmJnRoaXMucmVtb3ZlRm9jdXNMaXN0ZW5lcnMoKX1ldmVudExpc3RlbmVyUHJvcHMoZT1oZSgpKXtjb25zdHtzdGF0ZTp0LHRyOm4sdHJhbnNhY3Rpb25zOnJ9PWU7cmV0dXJue3RyOm4sdHJhbnNhY3Rpb25zOnIsaW50ZXJuYWxVcGRhdGU6IW4sdmlldzp0aGlzLnZpZXcsZmlyc3RSZW5kZXI6dGUodGhpcyxZbCksc3RhdGU6dD8/dGhpcy5nZXRTdGF0ZSgpLGNyZWF0ZVN0YXRlRnJvbUNvbnRlbnQ6dGhpcy5jcmVhdGVTdGF0ZUZyb21Db250ZW50LHByZXZpb3VzU3RhdGU6dGhpcy5wcmV2aW91c1N0YXRlLGhlbHBlcnM6dGhpcy5tYW5hZ2VyLnN0b3JlLmhlbHBlcnN9fWdldCBiYXNlT3V0cHV0KCl7cmV0dXJue21hbmFnZXI6dGhpcy5tYW5hZ2VyLC4uLnRoaXMubWFuYWdlci5zdG9yZSxhZGRIYW5kbGVyOnRoaXMuYWRkSGFuZGxlcixmb2N1czp0aGlzLmZvY3VzLGJsdXI6dGhpcy5ibHVyLHVpZDp0ZSh0aGlzLGJoKSx2aWV3OnRoaXMudmlldyxnZXRTdGF0ZTp0aGlzLmdldFN0YXRlLGdldFByZXZpb3VzU3RhdGU6dGhpcy5nZXRQcmV2aW91c1N0YXRlLGdldEV4dGVuc2lvbjp0aGlzLm1hbmFnZXIuZ2V0RXh0ZW5zaW9uLmJpbmQodGhpcy5tYW5hZ2VyKSxoYXNFeHRlbnNpb246dGhpcy5tYW5hZ2VyLmhhc0V4dGVuc2lvbi5iaW5kKHRoaXMubWFuYWdlciksY2xlYXJDb250ZW50OnRoaXMuY2xlYXJDb250ZW50LHNldENvbnRlbnQ6dGhpcy5zZXRDb250ZW50fX19O2JoPW5ldyBXZWFrTWFwO0p1PW5ldyBXZWFrTWFwO3doPW5ldyBXZWFrTWFwO1lsPW5ldyBXZWFrTWFwO2ZzPW5ldyBXZWFrTWFwO1NoPW5ldyBXZWFrTWFwO2toPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFVIKGUsdCl7Y29uc3Qgbj1bXSxyPW5ldyBXZWFrTWFwLG89W10saT1uZXcgV2Vha01hcDtsZXQgcz1bXTtjb25zdCBhPXtkdXBsaWNhdGVNYXA6aSxwYXJlbnRFeHRlbnNpb25zOm8sZ2F0aGVyZWRFeHRlbnNpb25zOnMsc2V0dGluZ3M6dH07Zm9yKGNvbnN0IGQgb2YgZSlZTihhLHtleHRlbnNpb246ZH0pO3M9aWwocywoZCxmKT0+Zi5wcmlvcml0eS1kLnByaW9yaXR5KTtjb25zdCBsPW5ldyBXZWFrU2V0LGM9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBzKXtjb25zdCBmPWQuY29uc3RydWN0b3IscD1kLm5hbWUsbT1pLmdldChmKTtiZShtLHttZXNzYWdlOmBObyBlbnRyaWVzIHdlcmUgZm91bmQgZm9yIHRoZSBFeHRlbnNpb25Db25zdHJ1Y3RvciAke2QubmFtZX1gLGNvZGU6cS5JTlRFUk5BTH0pLCEobC5oYXMoZil8fGMuaGFzKHApKSYmKGwuYWRkKGYpLGMuYWRkKHApLG4ucHVzaChkKSxyLnNldChmLGQpLG0uZm9yRWFjaChnPT5nPT1udWxsP3ZvaWQgMDpnLnJlcGxhY2VDaGlsZEV4dGVuc2lvbihmLGQpKSl9Y29uc3QgdT1bXTtmb3IoY29uc3QgZCBvZiBuKVZIKHtleHRlbnNpb246ZCxmb3VuZDpsLG1pc3Npbmc6dX0pO3JldHVybiBiZShKcyh1KSx7Y29kZTpxLk1JU1NJTkdfUkVRVUlSRURfRVhURU5TSU9OLG1lc3NhZ2U6dS5tYXAoKHtDb25zdHJ1Y3RvcjpkLGV4dGVuc2lvbjpmfSk9PmBUaGUgZXh0ZW5zaW9uICcke2YubmFtZX0nIHJlcXVpcmVzICcke2QubmFtZX0gaW4gb3JkZXIgdG8gcnVuIGNvcnJlY3RseS5gKS5qb2luKGAKYCl9KSx7ZXh0ZW5zaW9uczpuLGV4dGVuc2lvbk1hcDpyfX1mdW5jdGlvbiBZTihlLHQpe3ZhciBuO2NvbnN0e2dhdGhlcmVkRXh0ZW5zaW9uczpyLGR1cGxpY2F0ZU1hcDpvLHBhcmVudEV4dGVuc2lvbnM6aSxzZXR0aW5nczpzfT1lLHtleHRlbnNpb246YSxwYXJlbnRFeHRlbnNpb246bH09dDtsZXR7bmFtZXM6Yz1bXX09dDtiZShLTihhKSx7Y29kZTpxLklOVkFMSURfTUFOQUdFUl9FWFRFTlNJT04sbWVzc2FnZTpgQW4gaW52YWxpZCBleHRlbnNpb246ICR7YX0gd2FzIHByb3ZpZGVkIHRvIHRoZSBbW1xgUmVtaXJyb3JNYW5hZ2VyXGBdXS5gfSk7Y29uc3QgdT1hLmV4dGVuc2lvbnM7aWYoYS5zZXRQcmlvcml0eSgobj1zLnByaW9yaXR5KT09bnVsbD92b2lkIDA6blthLm5hbWVdKSxyLnB1c2goYSksSEgoe2R1cGxpY2F0ZU1hcDpvLGV4dGVuc2lvbjphLHBhcmVudEV4dGVuc2lvbjpsfSksdS5sZW5ndGghPT0wKXtpZihjLmluY2x1ZGVzKGEubmFtZSkpe2Ake2Muam9pbigiID4gIil9JHthLm5hbWV9YDtyZXR1cm59Yz1bLi4uYyxhLm5hbWVdLGkucHVzaChhKTtmb3IoY29uc3QgZCBvZiB1KVlOKGUse25hbWVzOmMsZXh0ZW5zaW9uOmQscGFyZW50RXh0ZW5zaW9uOmF9KX19ZnVuY3Rpb24gVkgoZSl7Y29uc3R7ZXh0ZW5zaW9uOnQsZm91bmQ6bixtaXNzaW5nOnJ9PWU7aWYodC5yZXF1aXJlZEV4dGVuc2lvbnMpZm9yKGNvbnN0IG8gb2YgdC5yZXF1aXJlZEV4dGVuc2lvbnM/P1tdKW4uaGFzKG8pfHxyLnB1c2goe0NvbnN0cnVjdG9yOm8sZXh0ZW5zaW9uOnR9KX1mdW5jdGlvbiBISChlKXtjb25zdHtkdXBsaWNhdGVNYXA6dCxleHRlbnNpb246bixwYXJlbnRFeHRlbnNpb246cn09ZSxvPW4uY29uc3RydWN0b3IsaT10LmdldChvKSxzPXI/W3JdOltdO3Quc2V0KG8saT9bLi4uaSwuLi5zXTpzKX1mdW5jdGlvbiBXSChlKXt2YXIgdCxuLHIsbztjb25zdHtleHRlbnNpb246aSxub2RlTmFtZXM6cyxtYXJrTmFtZXM6YSxwbGFpbk5hbWVzOmwsc3RvcmU6YyxoYW5kbGVyczp1fT1lO2kuc2V0U3RvcmUoYyk7Y29uc3QgZD0odD1pLm9uQ3JlYXRlKT09bnVsbD92b2lkIDA6dC5iaW5kKGkpLGY9KG49aS5vblZpZXcpPT1udWxsP3ZvaWQgMDpuLmJpbmQoaSkscD0ocj1pLm9uU3RhdGVVcGRhdGUpPT1udWxsP3ZvaWQgMDpyLmJpbmQoaSksbT0obz1pLm9uRGVzdHJveSk9PW51bGw/dm9pZCAwOm8uYmluZChpKTtkJiZ1LmNyZWF0ZS5wdXNoKGQpLGYmJnUudmlldy5wdXNoKGYpLHAmJnUudXBkYXRlLnB1c2gocCksbSYmdS5kZXN0cm95LnB1c2gobSksbHYoaSkmJmEucHVzaChpLm5hbWUpLHVwKGkpJiZpLm5hbWUhPT0iZG9jIiYmcy5wdXNoKGkubmFtZSkscU4oaSkmJmwucHVzaChpLm5hbWUpfXZhciBwcyxRdSxjbyxoaSxlZCxocix4YSx0ZCxiYSxuZCx3YSx1byxyZCxFaD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9e30pe0h0KHRoaXMscHMsdm9pZCAwKSxIdCh0aGlzLFF1LGhlKCkpLEh0KHRoaXMsY28saGUoKSksSHQodGhpcyxoaSx2b2lkIDApLEh0KHRoaXMsZWQsdm9pZCAwKSxIdCh0aGlzLGhyLHJyLk5vbmUpLEh0KHRoaXMseGEsdm9pZCAwKSxIdCh0aGlzLHRkLCEwKSxIdCh0aGlzLGJhLHtjcmVhdGU6W10sdmlldzpbXSx1cGRhdGU6W10sZGVzdHJveTpbXX0pLEh0KHRoaXMsbmQsW10pLEh0KHRoaXMsd2EscWcoKSksSHQodGhpcyx1byx2b2lkIDApLEh0KHRoaXMscmQsdm9pZCAwKSx0aGlzLmdldFN0YXRlPSgpPT57dmFyIG87cmV0dXJuIHRlKHRoaXMsaHIpPj1yci5FZGl0b3JWaWV3P3RoaXMudmlldy5zdGF0ZTooYmUodGUodGhpcyx1bykse2NvZGU6cS5NQU5BR0VSX1BIQVNFX0VSUk9SLG1lc3NhZ2U6ImBnZXRTdGF0ZWAgY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRoZSBgRnJhbWV3b3JrYCBvciB0aGUgYEVkaXRvclZpZXdgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBtYW5hZ2VyYC4gQ2hlY2sgeW91ciBwbHVnaW5zIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvcmF0aW9ucyBjYWxsYmFjayB1c2VzIHRoZSBzdGF0ZSBhcmd1bWVudC4ifSksKG89dGUodGhpcyx1bykpPT1udWxsP3ZvaWQgMDpvLmluaXRpYWxFZGl0b3JTdGF0ZSl9LHRoaXMudXBkYXRlU3RhdGU9bz0+e2NvbnN0IGk9dGhpcy5nZXRTdGF0ZSgpO3RoaXMudmlldy51cGRhdGVTdGF0ZShvKSx0aGlzLm9uU3RhdGVVcGRhdGUoe3ByZXZpb3VzU3RhdGU6aSxzdGF0ZTpvfSl9O2NvbnN0e2V4dGVuc2lvbnM6bixleHRlbnNpb25NYXA6cn09VUgoZSx0KTtjbih0aGlzLHhhLHQpLGNuKHRoaXMsaGksRGEobikpLGNuKHRoaXMsZWQsciksY24odGhpcyxwcyx0aGlzLmNyZWF0ZUV4dGVuc2lvblN0b3JlKCkpLGNuKHRoaXMsaHIscnIuQ3JlYXRlKSx0aGlzLnNldHVwTGlmZWN5Y2xlSGFuZGxlcnMoKTtmb3IoY29uc3QgbyBvZiB0ZSh0aGlzLGJhKS5jcmVhdGUpe2NvbnN0IGk9bygpO2kmJnRlKHRoaXMsbmQpLnB1c2goaSl9fXN0YXRpYyBjcmVhdGUoZSx0PXt9KXtyZXR1cm4gbmV3IEVoKFsuLi5RTShlKSwuLi5GSCh0LmJ1aWx0aW4pXSx0KX1nZXRbSWldKCl7cmV0dXJuIGduLk1hbmFnZXJ9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0ZSh0aGlzLGhyKT09PXJyLkRlc3Ryb3l9Z2V0IG1vdW50ZWQoKXtyZXR1cm4gdGUodGhpcyxocik+PXJyLkVkaXRvclZpZXcmJnRlKHRoaXMsaHIpPHJyLkRlc3Ryb3l9Z2V0IG91dHB1dCgpe3ZhciBlO3JldHVybihlPXRlKHRoaXMsdW8pKT09bnVsbD92b2lkIDA6ZS5mcmFtZXdvcmtPdXRwdXR9Z2V0IGZyYW1ld29ya0F0dGFjaGVkKCl7cmV0dXJuISF0ZSh0aGlzLHVvKX1nZXQgZXh0ZW5zaW9ucygpe3JldHVybiB0ZSh0aGlzLGhpKX1nZXQgc3RyaW5nSGFuZGxlcnMoKXtyZXR1cm4gdGUodGhpcyxRdSl9Z2V0IHN0b3JlKCl7cmV0dXJuIERhKHRlKHRoaXMsY28pKX1nZXQgZXh0ZW5zaW9uU3RvcmUoKXtyZXR1cm4gRGEodGUodGhpcyxwcykpfWdldCB0cigpe3JldHVybiB0aGlzLmdldEV4dGVuc2lvbihWZSkudHJhbnNhY3Rpb259Z2V0IG5vZGVzKCl7cmV0dXJuIHRlKHRoaXMsY28pLm5vZGVzfWdldCBtYXJrcygpe3JldHVybiB0ZSh0aGlzLGNvKS5tYXJrc31nZXQgc2NoZW1hKCl7cmV0dXJuIHRlKHRoaXMsY28pLnNjaGVtYX1nZXQgZXh0ZW5zaW9uVGFncygpe3JldHVybiB0ZSh0aGlzLGNvKS50YWdzfWdldCB2aWV3KCl7cmV0dXJuIHRlKHRoaXMsY28pLnZpZXd9Z2V0IHNldHRpbmdzKCl7cmV0dXJuIHRlKHRoaXMseGEpfWdldCBkb2N1bWVudCgpe3JldHVybiB0ZSh0aGlzLHhhKS5kb2N1bWVudD8/aXYoKX1zZXR1cExpZmVjeWNsZUhhbmRsZXJzKCl7Y29uc3QgZT10ZSh0aGlzLHBzKSx0PXRlKHRoaXMsYmEpLG49W10scj1bXSxvPVtdO2Uubm9kZU5hbWVzPW4sZS5tYXJrTmFtZXM9cixlLnBsYWluTmFtZXM9bztmb3IoY29uc3QgaSBvZiB0ZSh0aGlzLGhpKSlXSCh7ZXh0ZW5zaW9uOmksbm9kZU5hbWVzOm4sbWFya05hbWVzOnIscGxhaW5OYW1lczpvLGhhbmRsZXJzOnQsc3RvcmU6ZX0pfXNldFN0cmluZ0hhbmRsZXIoZSx0KXt0ZSh0aGlzLFF1KVtlXT10fXNldFN0b3JlS2V5KGUsdCl7dGUodGhpcyxjbylbZV09dH1nZXRTdG9yZUtleShlKXtjb25zdCB0PXRlKHRoaXMsY28pW2VdO3JldHVybiBiZSghWnModCkse2NvZGU6cS5NQU5BR0VSX1BIQVNFX0VSUk9SLG1lc3NhZ2U6ImBnZXRTdG9yZUtleWAgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSB2YWx1ZXMgYXJlIGF2YWlsYWJsZS4ifSksdH1zZXRFeHRlbnNpb25TdG9yZShlLHQpe2JlKHRlKHRoaXMsaHIpPD1yci5FZGl0b3JWaWV3LHtjb2RlOnEuTUFOQUdFUl9QSEFTRV9FUlJPUixtZXNzYWdlOiJgc2V0RXh0ZW5zaW9uU3RvcmVgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgdGhlIGBvbkNyZWF0ZWAgbGlmZWN5Y2xlIGhvb2suIE1ha2Ugc3VyZSB0byBvbmx5IGNhbGwgaXQgd2l0aGluIHRoZSByZXR1cm5lZCBtZXRob2RzLiJ9KSx0ZSh0aGlzLHBzKVtlXT10fWNyZWF0ZUV4dGVuc2lvblN0b3JlKCl7Y29uc3QgZT1oZSgpLHQ9ITA7bGV0IG4scjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7ZXh0ZW5zaW9uczp7Z2V0OigpPT50ZSh0aGlzLGhpKSxlbnVtZXJhYmxlOnR9LHBoYXNlOntnZXQ6KCk9PnRlKHRoaXMsaHIpLGVudW1lcmFibGU6dH0sdmlldzp7Z2V0OigpPT50aGlzLnZpZXcsZW51bWVyYWJsZTp0fSxtYW5hZ2VyU2V0dGluZ3M6e2dldDooKT0+RGEodGUodGhpcyx4YSkpLGVudW1lcmFibGU6dH0sZ2V0U3RhdGU6e3ZhbHVlOnRoaXMuZ2V0U3RhdGUsZW51bWVyYWJsZTp0fSx1cGRhdGVTdGF0ZTp7dmFsdWU6dGhpcy51cGRhdGVTdGF0ZSxlbnVtZXJhYmxlOnR9LGlzTW91bnRlZDp7dmFsdWU6KCk9PnRoaXMubW91bnRlZCxlbnVtZXJhYmxlOnR9LGdldEV4dGVuc2lvbjp7dmFsdWU6dGhpcy5nZXRFeHRlbnNpb24uYmluZCh0aGlzKSxlbnVtZXJhYmxlOnR9LG1hbmFnZXI6e2dldDooKT0+dGhpcyxlbnVtZXJhYmxlOnR9LGRvY3VtZW50OntnZXQ6KCk9PnRoaXMuZG9jdW1lbnQsZW51bWVyYWJsZTp0fSxzdHJpbmdIYW5kbGVyczp7Z2V0OigpPT50ZSh0aGlzLFF1KSxlbnVtZXJhYmxlOnR9LGN1cnJlbnRTdGF0ZTp7Z2V0OigpPT5uPz8obj10aGlzLmdldFN0YXRlKCkpLHNldDpvPT57bj1vfSxlbnVtZXJhYmxlOnR9LHByZXZpb3VzU3RhdGU6e2dldDooKT0+cixzZXQ6bz0+e3I9b30sZW51bWVyYWJsZTp0fX0pLGUuZ2V0U3RvcmVLZXk9dGhpcy5nZXRTdG9yZUtleS5iaW5kKHRoaXMpLGUuc2V0U3RvcmVLZXk9dGhpcy5zZXRTdG9yZUtleS5iaW5kKHRoaXMpLGUuc2V0RXh0ZW5zaW9uU3RvcmU9dGhpcy5zZXRFeHRlbnNpb25TdG9yZS5iaW5kKHRoaXMpLGUuc2V0U3RyaW5nSGFuZGxlcj10aGlzLnNldFN0cmluZ0hhbmRsZXIuYmluZCh0aGlzKSxlfWFkZFZpZXcoZSl7aWYodGUodGhpcyxocik+PXJyLkVkaXRvclZpZXcpcmV0dXJuIHRoaXM7Y24odGhpcyx0ZCwhMCksY24odGhpcyxocixyci5FZGl0b3JWaWV3KSx0ZSh0aGlzLGNvKS52aWV3PWU7Zm9yKGNvbnN0IHQgb2YgdGUodGhpcyxiYSkudmlldyl7Y29uc3Qgbj10KGUpO24mJnRlKHRoaXMsbmQpLnB1c2gobil9cmV0dXJuIHRoaXN9YXR0YWNoRnJhbWV3b3JrKGUsdCl7dmFyIG47dGUodGhpcyx1bykhPT1lJiYodGUodGhpcyx1bykmJih0ZSh0aGlzLHVvKS5kZXN0cm95KCksKG49dGUodGhpcyxyZCkpPT1udWxsfHxuLmNhbGwodGhpcykpLGNuKHRoaXMsdW8sZSksY24odGhpcyxyZCx0aGlzLmFkZEhhbmRsZXIoInN0YXRlVXBkYXRlIix0KSkpfWNyZWF0ZUVtcHR5RG9jKCl7dmFyIGU7Y29uc3QgdD0oZT10aGlzLnNjaGVtYS5ub2Rlcy5kb2MpPT1udWxsP3ZvaWQgMDplLmNyZWF0ZUFuZEZpbGwoKTtyZXR1cm4gYmUodCx7Y29kZTpxLklOVkFMSURfQ09OVEVOVCxtZXNzYWdlOiJBbiBlbXB0eSBub2RlIGNvdWxkIG5vdCBiZSBjcmVhdGVkIGR1ZSB0byBhbiBpbnZhbGlkIHNjaGVtYS4ifSksdH1jcmVhdGVTdGF0ZShlPXt9KXtjb25zdHtvbkVycm9yOnQsZGVmYXVsdFNlbGVjdGlvbjpuPSJlbmQifT10aGlzLnNldHRpbmdzLHtjb250ZW50OnI9dGhpcy5jcmVhdGVFbXB0eURvYygpLHNlbGVjdGlvbjpvPW4sc3RyaW5nSGFuZGxlcjppPXRoaXMuc2V0dGluZ3Muc3RyaW5nSGFuZGxlcn09ZSx7c2NoZW1hOnMscGx1Z2luczphfT10aGlzLnN0b3JlLGw9T04oe3N0cmluZ0hhbmRsZXI6X2UoaSk/dGhpcy5zdHJpbmdIYW5kbGVyc1tpXTppLGRvY3VtZW50OnRoaXMuZG9jdW1lbnQsY29udGVudDpyLG9uRXJyb3I6dCxzY2hlbWE6cyxzZWxlY3Rpb246b30pO3JldHVybiBJYS5jcmVhdGUoe3NjaGVtYTpzLGRvYzpsLHBsdWdpbnM6YSxzZWxlY3Rpb246SnIobyxsKX0pfWFkZEhhbmRsZXIoZSx0KXtyZXR1cm4gdGUodGhpcyx3YSkub24oZSx0KX1vblN0YXRlVXBkYXRlKGUpe2NvbnN0IHQ9dGUodGhpcyx0ZCk7dGUodGhpcyxwcykuY3VycmVudFN0YXRlPWUuc3RhdGUsdGUodGhpcyxwcykucHJldmlvdXNTdGF0ZT1lLnByZXZpb3VzU3RhdGUsdCYmKGNuKHRoaXMsaHIscnIuUnVudGltZSksY24odGhpcyx0ZCwhMSkpO2NvbnN0IG49ey4uLmUsZmlyc3RVcGRhdGU6dH07Zm9yKGNvbnN0IHIgb2YgdGUodGhpcyxiYSkudXBkYXRlKXIobik7dGUodGhpcyx3YSkuZW1pdCgic3RhdGVVcGRhdGUiLG4pfWdldEV4dGVuc2lvbihlKXtjb25zdCB0PXRlKHRoaXMsZWQpLmdldChlKTtyZXR1cm4gYmUodCx7Y29kZTpxLklOVkFMSURfTUFOQUdFUl9FWFRFTlNJT04sbWVzc2FnZTpgJyR7ZS5uYW1lfScgZG9lc24ndCBleGlzdCB3aXRoaW4gdGhpcyBtYW5hZ2VyLiBNYWtlIHN1cmUgaXQgaXMgcHJvcGVybHkgYWRkZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGl0LmB9KSx0fWhhc0V4dGVuc2lvbihlKXtyZXR1cm4hIXRlKHRoaXMsZWQpLmdldChlKX1jbG9uZSgpe2NvbnN0IGU9dGUodGhpcyxoaSkubWFwKG49Pm4uY2xvbmUobi5vcHRpb25zKSksdD1FaC5jcmVhdGUoKCk9PmUsdGUodGhpcyx4YSkpO3JldHVybiB0ZSh0aGlzLHdhKS5lbWl0KCJjbG9uZSIsdCksdH1yZWNyZWF0ZShlPVtdLHQ9e30pe2NvbnN0IG49dGUodGhpcyxoaSkubWFwKG89Pm8uY2xvbmUoby5pbml0aWFsT3B0aW9ucykpLHI9RWguY3JlYXRlKCgpPT5bLi4ubiwuLi5lXSx0KTtyZXR1cm4gdGUodGhpcyx3YSkuZW1pdCgicmVjcmVhdGUiLHIpLHJ9ZGVzdHJveSgpe3ZhciBlLHQsbixyLG8saTtjbih0aGlzLGhyLHJyLkRlc3Ryb3kpO2Zvcihjb25zdCBzIG9mKChlPXRoaXMudmlldyk9PW51bGw/dm9pZCAwOmUuc3RhdGUucGx1Z2lucyk/P1tdKShuPSh0PXMuZ2V0U3RhdGUodGhpcy52aWV3LnN0YXRlKSk9PW51bGw/dm9pZCAwOnQuZGVzdHJveSk9PW51bGx8fG4uY2FsbCh0KTsocj10ZSh0aGlzLHVvKSk9PW51bGx8fHIuZGVzdHJveSgpLChvPXRlKHRoaXMscmQpKT09bnVsbHx8by5jYWxsKHRoaXMpO2Zvcihjb25zdCBzIG9mIHRlKHRoaXMsbmQpKXMoKTtmb3IoY29uc3QgcyBvZiB0ZSh0aGlzLGJhKS5kZXN0cm95KXMoKTsoaT10aGlzLnZpZXcpPT1udWxsfHxpLmRlc3Ryb3koKSx0ZSh0aGlzLHdhKS5lbWl0KCJkZXN0cm95Iil9aW5jbHVkZXMoZSl7Y29uc3QgdD1bXSxuPVtdO2Zvcihjb25zdCByIG9mIHRlKHRoaXMsaGkpKXQucHVzaChyLm5hbWUsci5jb25zdHJ1Y3Rvck5hbWUpLG4ucHVzaChyLmNvbnN0cnVjdG9yKTtyZXR1cm4gZS5ldmVyeShyPT5fZShyKT8kbyh0LHIpOiRvKG4scikpfX0sS0g9RWg7cHM9bmV3IFdlYWtNYXA7UXU9bmV3IFdlYWtNYXA7Y289bmV3IFdlYWtNYXA7aGk9bmV3IFdlYWtNYXA7ZWQ9bmV3IFdlYWtNYXA7aHI9bmV3IFdlYWtNYXA7eGE9bmV3IFdlYWtNYXA7dGQ9bmV3IFdlYWtNYXA7YmE9bmV3IFdlYWtNYXA7bmQ9bmV3IFdlYWtNYXA7d2E9bmV3IFdlYWtNYXA7dW89bmV3IFdlYWtNYXA7cmQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcUgoZSx0KXtyZXR1cm4hdXUoZSl8fCFkdShlLGduLk1hbmFnZXIpPyExOnQ/ZS5pbmNsdWRlcyh0KTohMH12YXIgR0g9T2JqZWN0LmRlZmluZVByb3BlcnR5LFlIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWEg9KGUsdCxuLHIpPT57Zm9yKHZhciBvPXI+MT92b2lkIDA6cj9ZSCh0LG4pOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShyP3ModCxuLG8pOnMobykpfHxvKTtyZXR1cm4gciYmbyYmR0godCxuLG8pLG99LFhOPShlLHQsbik9PntpZighdC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgIituKX0sZmU9KGUsdCxuKT0+KFhOKGUsdCwicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSxuP24uY2FsbChlKTp0LmdldChlKSksbXI9KGUsdCxuKT0+e2lmKHQuaGFzKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpO3QgaW5zdGFuY2VvZiBXZWFrU2V0P3QuYWRkKGUpOnQuc2V0KGUsbil9LGZyPShlLHQsbixyKT0+KFhOKGUsdCwid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLHI/ci5jYWxsKGUsbik6dC5zZXQoZSxuKSxuKSxvZCxaSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9ydGFscz1uZXcgTWFwLG1yKHRoaXMsb2QscWcoKSksdGhpcy5vbj1lPT5mZSh0aGlzLG9kKS5vbigidXBkYXRlIixlKSx0aGlzLm9uY2U9ZT0+e2NvbnN0IHQ9ZmUodGhpcyxvZCkub24oInVwZGF0ZSIsbj0+e3QoKSxlKG4pfSk7cmV0dXJuIHR9fXVwZGF0ZSgpe2ZlKHRoaXMsb2QpLmVtaXQoInVwZGF0ZSIsdGhpcy5wb3J0YWxzKX1yZW5kZXIoe0NvbXBvbmVudDplLGNvbnRhaW5lcjp0fSl7Y29uc3Qgbj10aGlzLnBvcnRhbHMuZ2V0KHQpO3RoaXMucG9ydGFscy5zZXQodCx7Q29tcG9uZW50OmUsa2V5OihuPT1udWxsP3ZvaWQgMDpuLmtleSk/P0VtKCl9KSx0aGlzLnVwZGF0ZSgpfWZvcmNlVXBkYXRlKCl7Zm9yKGNvbnN0W2Use0NvbXBvbmVudDp0fV1vZiB0aGlzLnBvcnRhbHMpdGhpcy5wb3J0YWxzLnNldChlLHtDb21wb25lbnQ6dCxrZXk6RW0oKX0pfXJlbW92ZShlKXt0aGlzLnBvcnRhbHMuZGVsZXRlKGUpLHRoaXMudXBkYXRlKCl9fTtvZD1uZXcgV2Vha01hcDt2YXIgSkg9ZT0+e2NvbnN0e3BvcnRhbHM6dH09ZTtyZXR1cm4gWC5jcmVhdGVFbGVtZW50KFguRnJhZ21lbnQsbnVsbCx0Lm1hcCgoW24se0NvbXBvbmVudDpyLGtleTpvfV0pPT4kci5jcmVhdGVQb3J0YWwoWC5jcmVhdGVFbGVtZW50KHIsbnVsbCksbixvKSkpfTtmdW5jdGlvbiBRSChlKXtjb25zdFt0LG5dPWgudXNlU3RhdGUoKCk9PkFycmF5LmZyb20oZS5wb3J0YWxzLmVudHJpZXMoKSkpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+ZS5vbihyPT57bihBcnJheS5mcm9tKHIuZW50cmllcygpKSl9KSxbZV0pLGgudXNlTWVtbygoKT0+dCxbdF0pfXZhciBDdCxpZCxTYSxzZCxfaCxhZCxYbCxsZCxDaCxtaSxGbixlYixaTj1jbGFzc3tjb25zdHJ1Y3Rvcih7Z2V0UG9zaXRpb246ZSxub2RlOnQscG9ydGFsQ29udGFpbmVyOm4sdmlldzpyLFJlYWN0Q29tcG9uZW50Om8sb3B0aW9uczppfSl7bXIodGhpcyxDdCx2b2lkIDApLG1yKHRoaXMsaWQsW10pLG1yKHRoaXMsU2Esdm9pZCAwKSxtcih0aGlzLHNkLHZvaWQgMCksbXIodGhpcyxfaCx2b2lkIDApLG1yKHRoaXMsYWQsdm9pZCAwKSxtcih0aGlzLFhsLHZvaWQgMCksbXIodGhpcyxsZCwhMSksbXIodGhpcyxDaCx2b2lkIDApLG1yKHRoaXMsbWksdm9pZCAwKSxtcih0aGlzLEZuLHZvaWQgMCksbXIodGhpcyxlYixsPT57bCYmKGJlKGZlKHRoaXMsbWkpLHtjb2RlOnEuUkVBQ1RfTk9ERV9WSUVXLG1lc3NhZ2U6YFlvdSBoYXZlIGFwcGxpZWQgYSByZWYgdG8gYSBub2RlIHZpZXcgcHJvdmlkZWQgZm9yICcke2ZlKHRoaXMsQ3QpLnR5cGUubmFtZX0nIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBjb250ZW50LmB9KSxsLmFwcGVuZChmZSh0aGlzLG1pKSkpfSksdGhpcy5Db21wb25lbnQ9KCk9Pntjb25zdCBsPWZlKHRoaXMsX2gpO3JldHVybiBiZShsLHtjb2RlOnEuUkVBQ1RfTk9ERV9WSUVXLG1lc3NhZ2U6YFRoZSBjdXN0b20gcmVhY3Qgbm9kZSB2aWV3IHByb3ZpZGVkIGZvciAke2ZlKHRoaXMsQ3QpLnR5cGUubmFtZX0gZG9lc24ndCBoYXZlIGEgdmFsaWQgUmVhY3RDb21wb25lbnRgfSksWC5jcmVhdGVFbGVtZW50KGwse3VwZGF0ZUF0dHJpYnV0ZXM6dGhpcy51cGRhdGVBdHRyaWJ1dGVzLHNlbGVjdGVkOnRoaXMuc2VsZWN0ZWQsdmlldzpmZSh0aGlzLFNhKSxnZXRQb3NpdGlvbjpmZSh0aGlzLGFkKSxub2RlOmZlKHRoaXMsQ3QpLGZvcndhcmRSZWY6ZmUodGhpcyxlYiksZGVjb3JhdGlvbnM6ZmUodGhpcyxpZCl9KX0sdGhpcy51cGRhdGVBdHRyaWJ1dGVzPWw9PntpZighZmUodGhpcyxTYSkuZWRpdGFibGUpcmV0dXJuO2NvbnN0IGM9ZmUodGhpcyxhZCkuY2FsbCh0aGlzKTtpZihjPT1udWxsKXJldHVybjtjb25zdCB1PWZlKHRoaXMsU2EpLnN0YXRlLnRyLnNldE5vZGVNYXJrdXAoYyx2b2lkIDAsey4uLmZlKHRoaXMsQ3QpLmF0dHJzLC4uLmx9KTtmZSh0aGlzLFNhKS5kaXNwYXRjaCh1KX0sYmUocHQoZSkse21lc3NhZ2U6IllvdSBhcmUgYXR0ZW1wdGluZyB0byB1c2UgYSBub2RlIHZpZXcgZm9yIGEgbWFyayB0eXBlLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBQbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uLiJ9KSxmcih0aGlzLEN0LHQpLGZyKHRoaXMsU2EsciksZnIodGhpcyxzZCxuKSxmcih0aGlzLF9oLG8pLGZyKHRoaXMsYWQsZSksZnIodGhpcyxYbCxpKSxmcih0aGlzLEZuLHRoaXMuY3JlYXRlRG9tKCkpO2NvbnN0e2NvbnRlbnRET006cyx3cmFwcGVyOmF9PXRoaXMuY3JlYXRlQ29udGVudERvbSgpPz97fTtmcih0aGlzLENoLHM/P3ZvaWQgMCksZnIodGhpcyxtaSxhKSxmZSh0aGlzLG1pKSYmZmUodGhpcyxGbikuYXBwZW5kKGZlKHRoaXMsbWkpKSx0aGlzLnNldERvbUF0dHJpYnV0ZXMoZmUodGhpcyxDdCksZmUodGhpcyxGbikpLHRoaXMuQ29tcG9uZW50LmRpc3BsYXlOYW1lPUtNKGAke2ZlKHRoaXMsQ3QpLnR5cGUubmFtZX1Ob2RlVmlld2ApLHRoaXMucmVuZGVyQ29tcG9uZW50KCl9c3RhdGljIGNyZWF0ZShlKXtjb25zdHtwb3J0YWxDb250YWluZXI6dCxSZWFjdENvbXBvbmVudDpuLG9wdGlvbnM6cn09ZTtyZXR1cm4obyxpLHMpPT5uZXcgWk4oe29wdGlvbnM6cixub2RlOm8sdmlldzppLGdldFBvc2l0aW9uOnMscG9ydGFsQ29udGFpbmVyOnQsUmVhY3RDb21wb25lbnQ6bn0pfWdldCBzZWxlY3RlZCgpe3JldHVybiBmZSh0aGlzLGxkKX1nZXQgY29udGVudERPTSgpe3JldHVybiBmZSh0aGlzLENoKX1nZXQgZG9tKCl7cmV0dXJuIGZlKHRoaXMsRm4pfXJlbmRlckNvbXBvbmVudCgpe2ZlKHRoaXMsc2QpLnJlbmRlcih7Q29tcG9uZW50OnRoaXMuQ29tcG9uZW50LGNvbnRhaW5lcjpmZSh0aGlzLEZuKX0pfWNyZWF0ZURvbSgpe2NvbnN0e2RlZmF1bHRCbG9ja05vZGU6ZSxkZWZhdWx0SW5saW5lTm9kZTp0fT1mZSh0aGlzLFhsKSxuPWZlKHRoaXMsQ3QpLmlzSW5saW5lP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gbi5jbGFzc0xpc3QuYWRkKGAke0lFKGZlKHRoaXMsQ3QpLnR5cGUubmFtZSl9LW5vZGUtdmlldy13cmFwcGVyYCksbn1jcmVhdGVDb250ZW50RG9tKCl7dmFyIGUsdDtpZihmZSh0aGlzLEN0KS5pc0xlYWYpcmV0dXJuO2NvbnN0IG49KHQ9KGU9ZmUodGhpcyxDdCkudHlwZS5zcGVjKS50b0RPTSk9PW51bGw/dm9pZCAwOnQuY2FsbChlLGZlKHRoaXMsQ3QpKTtpZighbilyZXR1cm47Y29uc3R7Y29udGVudERPTTpyLGRvbTpvfT1rby5yZW5kZXJTcGVjKGRvY3VtZW50LG4pO2xldCBpO2lmKG5pKG8pKXJldHVybiBpPW8sbz09PXImJihpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxpLmNsYXNzTGlzdC5hZGQoYCR7SUUoZmUodGhpcyxDdCkudHlwZS5uYW1lKX0tbm9kZS12aWV3LWNvbnRlbnQtd3JhcHBlcmApLGkuYXBwZW5kKHIpKSxuaShyKSx7d3JhcHBlcjppLGNvbnRlbnRET006cn19dXBkYXRlKGUsdCl7cmV0dXJuIGR3KHt0eXBlczpmZSh0aGlzLEN0KS50eXBlLG5vZGU6ZX0pPyhmZSh0aGlzLEN0KT09PWUmJmZlKHRoaXMsaWQpPT09dHx8KGZlKHRoaXMsQ3QpLnNhbWVNYXJrdXAoZSl8fHRoaXMuc2V0RG9tQXR0cmlidXRlcyhlLGZlKHRoaXMsRm4pKSxmcih0aGlzLEN0LGUpLGZyKHRoaXMsaWQsdCksdGhpcy5yZW5kZXJDb21wb25lbnQoKSksITApOiExfXNldERvbUF0dHJpYnV0ZXMoZSx0KXtjb25zdHt0b0RPTTpufT1mZSh0aGlzLEN0KS50eXBlLnNwZWM7bGV0IHI9ZS5hdHRycztpZihuKXtjb25zdCBvPW4oZSk7aWYoX2Uobyl8fGVXKG8pKXJldHVybjtibChvWzFdKSYmKHI9b1sxXSl9Zm9yKGNvbnN0W28saV1vZiBKdChyKSl0LnNldEF0dHJpYnV0ZShvLGkpfXNlbGVjdE5vZGUoKXtmcih0aGlzLGxkLCEwKSxmZSh0aGlzLEZuKSYmZmUodGhpcyxGbikuY2xhc3NMaXN0LmFkZChORSksdGhpcy5yZW5kZXJDb21wb25lbnQoKX1kZXNlbGVjdE5vZGUoKXtmcih0aGlzLGxkLCExKSxmZSh0aGlzLEZuKSYmZmUodGhpcyxGbikuY2xhc3NMaXN0LnJlbW92ZShORSksdGhpcy5yZW5kZXJDb21wb25lbnQoKX1kZXN0cm95KCl7ZmUodGhpcyxzZCkucmVtb3ZlKGZlKHRoaXMsRm4pKX1pZ25vcmVNdXRhdGlvbihlKXtyZXR1cm4gZS50eXBlPT09InNlbGVjdGlvbiI/IWZlKHRoaXMsQ3QpLnR5cGUuc3BlYy5zZWxlY3RhYmxlOmZlKHRoaXMsbWkpPyFmZSh0aGlzLG1pKS5jb250YWlucyhlLnRhcmdldCk6ITB9c3RvcEV2ZW50KGUpe3ZhciB0O2lmKCFmZSh0aGlzLEZuKSlyZXR1cm4hMTtpZihwdChmZSh0aGlzLFhsKS5zdG9wRXZlbnQpKXJldHVybiBmZSh0aGlzLFhsKS5zdG9wRXZlbnQoe2V2ZW50OmV9KTtjb25zdCBuPWUudGFyZ2V0O2lmKCEoZmUodGhpcyxGbikuY29udGFpbnMobikmJiEoKHQ9dGhpcy5jb250ZW50RE9NKSE9bnVsbCYmdC5jb250YWlucyhuKSkpKXJldHVybiExO2NvbnN0IG89ZS50eXBlPT09ImRyb3AiO2lmKChbIklOUFVUIiwiQlVUVE9OIiwiU0VMRUNUIiwiVEVYVEFSRUEiXS5pbmNsdWRlcyhuLnRhZ05hbWUpfHxuLmlzQ29udGVudEVkaXRhYmxlKSYmIW8pcmV0dXJuITA7Y29uc3Qgcz0hIWZlKHRoaXMsQ3QpLnR5cGUuc3BlYy5kcmFnZ2FibGUsYT13ZS5pc1NlbGVjdGFibGUoZmUodGhpcyxDdCkpLGw9ZS50eXBlPT09ImNvcHkiLGM9ZS50eXBlPT09InBhc3RlIix1PWUudHlwZT09PSJjdXQiLGQ9ZS50eXBlPT09Im1vdXNlZG93biIsZj1lLnR5cGUuc3RhcnRzV2l0aCgiZHJhZyIpO3JldHVybiFzJiZhJiZmJiZlLnByZXZlbnREZWZhdWx0KCksIShmfHxvfHxsfHxjfHx1fHxkJiZhKX19LGVDPVpOO0N0PW5ldyBXZWFrTWFwO2lkPW5ldyBXZWFrTWFwO1NhPW5ldyBXZWFrTWFwO3NkPW5ldyBXZWFrTWFwO19oPW5ldyBXZWFrTWFwO2FkPW5ldyBXZWFrTWFwO1hsPW5ldyBXZWFrTWFwO2xkPW5ldyBXZWFrTWFwO0NoPW5ldyBXZWFrTWFwO21pPW5ldyBXZWFrTWFwO0ZuPW5ldyBXZWFrTWFwO2ViPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGVXKGUpe3JldHVybiBXeChlKXx8YmwoZSkmJld4KGUuZG9tKX12YXIgVGY9Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wb3J0YWxDb250YWluZXI9bmV3IFpIfWdldCBuYW1lKCl7cmV0dXJuInJlYWN0Q29tcG9uZW50In1vbkNyZWF0ZSgpe3RoaXMuc3RvcmUuc2V0U3RvcmVLZXkoInBvcnRhbENvbnRhaW5lciIsdGhpcy5wb3J0YWxDb250YWluZXIpfWNyZWF0ZU5vZGVWaWV3cygpe2NvbnN0IGU9aGUoKSx0PXRoaXMuc3RvcmUubWFuYWdlclNldHRpbmdzLm5vZGVWaWV3Q29tcG9uZW50cz8/e307Zm9yKGNvbnN0IHIgb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKSFyLlJlYWN0Q29tcG9uZW50fHwhdXAocil8fHIucmVhY3RDb21wb25lbnRFbnZpcm9ubWVudD09PSJzc3IifHwoZVtyLm5hbWVdPWVDLmNyZWF0ZSh7b3B0aW9uczp0aGlzLm9wdGlvbnMsUmVhY3RDb21wb25lbnQ6ci5SZWFjdENvbXBvbmVudCxwb3J0YWxDb250YWluZXI6dGhpcy5wb3J0YWxDb250YWluZXJ9KSk7Y29uc3Qgbj1KdCh7Li4udGhpcy5vcHRpb25zLm5vZGVWaWV3Q29tcG9uZW50cywuLi50fSk7Zm9yKGNvbnN0W3Isb11vZiBuKWVbcl09ZUMuY3JlYXRlKHtvcHRpb25zOnRoaXMub3B0aW9ucyxSZWFjdENvbXBvbmVudDpvLHBvcnRhbENvbnRhaW5lcjp0aGlzLnBvcnRhbENvbnRhaW5lcn0pO3JldHVybiBlfX07VGY9WEgoW0plKHtkZWZhdWx0T3B0aW9uczp7ZGVmYXVsdEJsb2NrTm9kZToiZGl2IixkZWZhdWx0SW5saW5lTm9kZToic3BhbiIsZGVmYXVsdENvbnRlbnROb2RlOiJzcGFuIixkZWZhdWx0RW52aXJvbm1lbnQ6ImJvdGgiLG5vZGVWaWV3Q29tcG9uZW50czp7fSxzdG9wRXZlbnQ6bnVsbH0sc3RhdGljS2V5czpbImRlZmF1bHRCbG9ja05vZGUiLCJkZWZhdWx0SW5saW5lTm9kZSIsImRlZmF1bHRDb250ZW50Tm9kZSIsImRlZmF1bHRFbnZpcm9ubWVudCJdfSldLFRmKTtmdW5jdGlvbiB0VyhlKXtjb25zdCB0PWguY3JlYXRlQ29udGV4dChudWxsKSxuPW5XKHQpO3JldHVybltvPT57Y29uc3QgaT1lKG8pO3JldHVybiBYLmNyZWF0ZUVsZW1lbnQodC5Qcm92aWRlcix7dmFsdWU6aX0sby5jaGlsZHJlbil9LG4sdF19ZnVuY3Rpb24gblcoZSl7cmV0dXJuKHQsbik9Pntjb25zdCByPWgudXNlQ29udGV4dChlKSxvPXJXKHIpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiYHVzZUNvbnRleHRIb29rYCBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgdGhlIGBQcm92aWRlcmAgcmV0dXJuZWQgYnkgdGhlIGBjcmVhdGVDb250ZXh0U3RhdGVgIG1ldGhvZCIpO2lmKCF0KXJldHVybiByO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBgdXNlQ29udGV4dEhvb2tgLiBUaGlzIGhvb2sgbXVzdCBiZSBjYWxsZWQgd2l0aCB6ZXJvIGFyZ3VtZW50cywgYSBnZXR0ZXIgZnVuY3Rpb24gb3IgYSBwYXRoIHN0cmluZy4iKTtjb25zdCBpPXQocik7aWYoIW98fCFuKXJldHVybiBpO2NvbnN0IHM9dChvKTtyZXR1cm4gbihzLGkpP3M6aX19ZnVuY3Rpb24gclcoZSl7Y29uc3QgdD1oLnVzZVJlZigpO3JldHVybiBvVygoKT0+e3QuY3VycmVudD1lfSksdC5jdXJyZW50fXZhciBvVz10eXBlb2YgZG9jdW1lbnQ8InUiP2gudXNlTGF5b3V0RWZmZWN0OmgudXNlRWZmZWN0O2Z1bmN0aW9uIGlXKGUsdCl7cmV0dXJuIHRXKG49Pntjb25zdCByPWgudXNlUmVmKG51bGwpLG89aC51c2VSZWYoKSxpPXQ9PW51bGw/dm9pZCAwOnQobiksW3MsYV09aC51c2VTdGF0ZSgoKT0+ZSh7Z2V0OnRDKHIpLHNldDpuQyhvKSxwcmV2aW91c0NvbnRleHQ6dm9pZCAwLHByb3BzOm4sc3RhdGU6aX0pKSxsPVsuLi5PYmplY3QudmFsdWVzKG4pLGldO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2wubGVuZ3RoIT09MCYmYShjPT5lKHtnZXQ6dEMociksc2V0Om5DKG8pLHByZXZpb3VzQ29udGV4dDpjLHByb3BzOm4sc3RhdGU6aX0pKX0sbCksci5jdXJyZW50PXMsby5jdXJyZW50PWEsc30pfWZ1bmN0aW9uIHRDKGUpe3JldHVybiB0PT57aWYoIWUuY3VycmVudCl0aHJvdyBuZXcgRXJyb3IoImBnZXRgIGNhbGxlZCBvdXRzaWRlIG9mIGZ1bmN0aW9uIHNjb3BlLiBgZ2V0YCBjYW4gb25seSBiZSBjYWxsZWQgd2l0aGluIGEgZnVuY3Rpb24uIik7aWYoIXQpcmV0dXJuIGUuY3VycmVudDtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gYHVzZUNvbnRleHRIb29rYC4gVGhlIGhvb2sgbXVzdCBiZSBjYWxsZWQgd2l0aCB6ZXJvIGFyZ3VtZW50cywgYSBnZXR0ZXIgZnVuY3Rpb24gb3IgYSBwYXRoIHN0cmluZy4iKTtyZXR1cm4gdChlLmN1cnJlbnQpfX1mdW5jdGlvbiBuQyhlKXtyZXR1cm4gdD0+e2lmKCFlLmN1cnJlbnQpdGhyb3cgbmV3IEVycm9yKCJgc2V0YCBjYWxsZWQgb3V0c2lkZSBvZiBmdW5jdGlvbiBzY29wZS4gYHNldGAgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGhpbiBhIGZ1bmN0aW9uLiIpO2UuY3VycmVudChuPT4oey4uLm4sLi4udHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChuKTp0fSkpfX12YXIgSk49e30sUU49e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlLmVycm9yTWVzc2FnZXM9ZS5FcnJvclR5cGU9dm9pZCAwO3ZhciB0OyhmdW5jdGlvbihuKXtuLk1hbGZvcm1lZFVuaWNvZGU9Ik1BTEZPUk1FRF9VTklDT0RFIixuLk1hbGZvcm1lZEhleGFkZWNpbWFsPSJNQUxGT1JNRURfSEVYQURFQ0lNQUwiLG4uQ29kZVBvaW50TGltaXQ9IkNPREVfUE9JTlRfTElNSVQiLG4uT2N0YWxEZXByZWNhdGlvbj0iT0NUQUxfREVQUkVDQVRJT04iLG4uRW5kT2ZTdHJpbmc9IkVORF9PRl9TVFJJTkcifSkodD1lLkVycm9yVHlwZXx8KGUuRXJyb3JUeXBlPXt9KSksZS5lcnJvck1lc3NhZ2VzPW5ldyBNYXAoW1t0Lk1hbGZvcm1lZFVuaWNvZGUsIm1hbGZvcm1lZCBVbmljb2RlIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UiXSxbdC5NYWxmb3JtZWRIZXhhZGVjaW1hbCwibWFsZm9ybWVkIGhleGFkZWNpbWFsIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UiXSxbdC5Db2RlUG9pbnRMaW1pdCwiVW5pY29kZSBjb2RlcG9pbnQgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIDB4MTBGRkZGIGluIGVzY2FwZSBzZXF1ZW5jZSJdLFt0Lk9jdGFsRGVwcmVjYXRpb24sJyIwIi1wcmVmaXhlZCBvY3RhbCBsaXRlcmFscyBhbmQgb2N0YWwgZXNjYXBlIHNlcXVlbmNlcyBhcmUgZGVwcmVjYXRlZDsgZm9yIG9jdGFsIGxpdGVyYWxzIHVzZSB0aGUgIjBvIiBwcmVmaXggaW5zdGVhZCddLFt0LkVuZE9mU3RyaW5nLCJtYWxmb3JtZWQgZXNjYXBlIHNlcXVlbmNlIGF0IGVuZCBvZiBzdHJpbmciXV0pfSkoUU4pOyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS51bnJhdz1lLmVycm9yTWVzc2FnZXM9ZS5FcnJvclR5cGU9dm9pZCAwO2NvbnN0IHQ9UU47T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkVycm9yVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuRXJyb3JUeXBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJlcnJvck1lc3NhZ2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lcnJvck1lc3NhZ2VzfX0pO2Z1bmN0aW9uIG4ocCl7cmV0dXJuIXAubWF0Y2goL1teYS1mMC05XS9pKT9wYXJzZUludChwLDE2KTpOYU59ZnVuY3Rpb24gcihwLG0sZyl7Y29uc3QgeT1uKHApO2lmKE51bWJlci5pc05hTih5KXx8ZyE9PXZvaWQgMCYmZyE9PXAubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcih0LmVycm9yTWVzc2FnZXMuZ2V0KG0pKTtyZXR1cm4geX1mdW5jdGlvbiBvKHApe2NvbnN0IG09cihwLHQuRXJyb3JUeXBlLk1hbGZvcm1lZEhleGFkZWNpbWFsLDIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG0pfWZ1bmN0aW9uIGkocCxtKXtjb25zdCBnPXIocCx0LkVycm9yVHlwZS5NYWxmb3JtZWRVbmljb2RlLDQpO2lmKG0hPT12b2lkIDApe2NvbnN0IHk9cihtLHQuRXJyb3JUeXBlLk1hbGZvcm1lZFVuaWNvZGUsNCk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZyx5KX1yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShnKX1mdW5jdGlvbiBzKHApe3JldHVybiBwLmNoYXJBdCgwKT09PSJ7IiYmcC5jaGFyQXQocC5sZW5ndGgtMSk9PT0ifSJ9ZnVuY3Rpb24gYShwKXtpZighcyhwKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IodC5lcnJvck1lc3NhZ2VzLmdldCh0LkVycm9yVHlwZS5NYWxmb3JtZWRVbmljb2RlKSk7Y29uc3QgbT1wLnNsaWNlKDEsLTEpLGc9cihtLHQuRXJyb3JUeXBlLk1hbGZvcm1lZFVuaWNvZGUpO3RyeXtyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoZyl9Y2F0Y2goeSl7dGhyb3cgeSBpbnN0YW5jZW9mIFJhbmdlRXJyb3I/bmV3IFN5bnRheEVycm9yKHQuZXJyb3JNZXNzYWdlcy5nZXQodC5FcnJvclR5cGUuQ29kZVBvaW50TGltaXQpKTp5fX1mdW5jdGlvbiBsKHAsbT0hMSl7aWYobSl0aHJvdyBuZXcgU3ludGF4RXJyb3IodC5lcnJvck1lc3NhZ2VzLmdldCh0LkVycm9yVHlwZS5PY3RhbERlcHJlY2F0aW9uKSk7Y29uc3QgZz1wYXJzZUludChwLDgpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGcpfWNvbnN0IGM9bmV3IE1hcChbWyJiIiwiXGIiXSxbImYiLCJcZiJdLFsibiIsYApgXSxbInIiLCJcciJdLFsidCIsIgkiXSxbInYiLCJcdiJdLFsiMCIsIlwwIl1dKTtmdW5jdGlvbiB1KHApe3JldHVybiBjLmdldChwKXx8cH1jb25zdCBkPS9cXCg/OihcXCl8eChbXHNcU117MCwyfSl8dShce1tefV0qXH0/KXx1KFtcc1xTXXs0fSlcXHUoW157XVtcc1xTXXswLDN9KXx1KFtcc1xTXXswLDR9KXwoWzAtM10/WzAtN117MSwyfSl8KFtcc1xTXSl8JCkvZztmdW5jdGlvbiBmKHAsbT0hMSl7cmV0dXJuIHAucmVwbGFjZShkLGZ1bmN0aW9uKGcseSx2LHgsdyxrLEUsUyxfKXtpZih5IT09dm9pZCAwKXJldHVybiJcXCI7aWYodiE9PXZvaWQgMClyZXR1cm4gbyh2KTtpZih4IT09dm9pZCAwKXJldHVybiBhKHgpO2lmKHchPT12b2lkIDApcmV0dXJuIGkodyxrKTtpZihFIT09dm9pZCAwKXJldHVybiBpKEUpO2lmKFM9PT0iMCIpcmV0dXJuIlwwIjtpZihTIT09dm9pZCAwKXJldHVybiBsKFMsIW0pO2lmKF8hPT12b2lkIDApcmV0dXJuIHUoXyk7dGhyb3cgbmV3IFN5bnRheEVycm9yKHQuZXJyb3JNZXNzYWdlcy5nZXQodC5FcnJvclR5cGUuRW5kT2ZTdHJpbmcpKX0pfWUudW5yYXc9ZixlLmRlZmF1bHQ9Zn0pKEpOKTtjb25zdCBzVz1zaShKTiksS2E9ZT0+dHlwZW9mIGU9PSJzdHJpbmciLGFXPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iLHJDPW5ldyBNYXAsZSQ9ImVuIjtmdW5jdGlvbiB4dyhlKXtyZXR1cm5bLi4uQXJyYXkuaXNBcnJheShlKT9lOltlXSxlJF19ZnVuY3Rpb24gdCQoZSx0LG4pe2NvbnN0IHI9eHcoZSk7cmV0dXJuIFZtKCgpPT5IbSgiZGF0ZSIscixuKSwoKT0+bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQocixuKSkuZm9ybWF0KEthKHQpP25ldyBEYXRlKHQpOnQpfWZ1bmN0aW9uIHRiKGUsdCxuKXtjb25zdCByPXh3KGUpO3JldHVybiBWbSgoKT0+SG0oIm51bWJlciIscixuKSwoKT0+bmV3IEludGwuTnVtYmVyRm9ybWF0KHIsbikpLmZvcm1hdCh0KX1mdW5jdGlvbiBvQyhlLHQsbix7b2Zmc2V0OnI9MCwuLi5vfSl7Y29uc3QgaT14dyhlKSxzPXQ/Vm0oKCk9PkhtKCJwbHVyYWwtb3JkaW5hbCIsaSksKCk9Pm5ldyBJbnRsLlBsdXJhbFJ1bGVzKGkse3R5cGU6Im9yZGluYWwifSkpOlZtKCgpPT5IbSgicGx1cmFsLWNhcmRpbmFsIixpKSwoKT0+bmV3IEludGwuUGx1cmFsUnVsZXMoaSx7dHlwZToiY2FyZGluYWwifSkpO3JldHVybiBvW25dPz9vW3Muc2VsZWN0KG4tcildPz9vLm90aGVyfWZ1bmN0aW9uIFZtKGUsdCl7Y29uc3Qgbj1lKCk7bGV0IHI9ckMuZ2V0KG4pO3JldHVybiByfHwocj10KCksckMuc2V0KG4scikpLHJ9ZnVuY3Rpb24gSG0oZSx0LG4pe2NvbnN0IHI9dC5qb2luKCItIik7cmV0dXJuYCR7ZX0tJHtyfS0ke0pTT04uc3RyaW5naWZ5KG4pfWB9Y29uc3QgbiQ9L1xcdVthLWZBLUYwLTldezR9fFxceFthLWZBLUYwLTldezJ9L2csbFc9KGUsdCxuPXt9KT0+e2NvbnN0IHI9dHx8ZSxvPXM9PnR5cGVvZiBzPT0ib2JqZWN0Ij9zOm5bc118fHtzdHlsZTpzfSxpPShzLGEpPT57Y29uc3QgbD1PYmplY3Qua2V5cyhuKS5sZW5ndGg/bygibnVtYmVyIik6dm9pZCAwLGM9dGIocixzLGwpO3JldHVybiBhLnJlcGxhY2UoIiMiLGMpfTtyZXR1cm57cGx1cmFsOihzLGEpPT57Y29uc3R7b2Zmc2V0Omw9MH09YSxjPW9DKHIsITEscyxhKTtyZXR1cm4gaShzLWwsYyl9LHNlbGVjdG9yZGluYWw6KHMsYSk9Pntjb25zdHtvZmZzZXQ6bD0wfT1hLGM9b0MociwhMCxzLGEpO3JldHVybiBpKHMtbCxjKX0sc2VsZWN0OmNXLG51bWJlcjoocyxhKT0+dGIocixzLG8oYSkpLGRhdGU6KHMsYSk9PnQkKHIscyxvKGEpKSx1bmRlZmluZWQ6dVd9fSxjVz0oZSx0KT0+dFtlXT8/dC5vdGhlcix1Vz1lPT5lO2Z1bmN0aW9uIGRXKGUsdCxuKXtyZXR1cm4ocj17fSxvKT0+e2NvbnN0IGk9bFcodCxuLG8pLHM9bD0+QXJyYXkuaXNBcnJheShsKT9sLnJlZHVjZSgoYyx1KT0+e2lmKEthKHUpKXJldHVybiBjK3U7Y29uc3RbZCxmLHBdPXU7bGV0IG09e307cCE9bnVsbCYmdHlwZW9mIHA9PSJvYmplY3QiP09iamVjdC5lbnRyaWVzKHApLmZvckVhY2goKFt2LHhdKT0+e21bdl09cyh4KX0pOm09cDtjb25zdCBnPWlbZl0seT1nKHJbZF0sbSk7cmV0dXJuIHk9PW51bGw/YzpjK3l9LCIiKTpsLGE9cyhlKTtyZXR1cm4gS2EoYSkmJm4kLnRlc3QoYSk/c1coYS50cmltKCkpOkthKGEpP2EudHJpbSgpOmE/U3RyaW5nKGEpOiIifX12YXIgZlc9T2JqZWN0LmRlZmluZVByb3BlcnR5LHBXPShlLHQsbik9PnQgaW4gZT9mVyhlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KTplW3RdPW4saFc9KGUsdCxuKT0+KHBXKGUsdHlwZW9mIHQhPSJzeW1ib2wiP3QrIiI6dCxuKSxuKTtjbGFzcyBtV3tjb25zdHJ1Y3Rvcigpe2hXKHRoaXMsIl9ldmVudHMiLHt9KX1vbih0LG4pe3ZhciByO3JldHVybihyPXRoaXMuX2V2ZW50cylbdF0/PyhyW3RdPVtdKSx0aGlzLl9ldmVudHNbdF0ucHVzaChuKSwoKT0+dGhpcy5yZW1vdmVMaXN0ZW5lcih0LG4pfXJlbW92ZUxpc3RlbmVyKHQsbil7Y29uc3Qgcj10aGlzLl9nZXRMaXN0ZW5lcnModCk7aWYoIXIpcmV0dXJuO2NvbnN0IG89ci5pbmRleE9mKG4pO35vJiZyLnNwbGljZShvLDEpfWVtaXQodCwuLi5uKXtjb25zdCByPXRoaXMuX2dldExpc3RlbmVycyh0KTtyJiZyLm1hcChvPT5vLmFwcGx5KHRoaXMsbikpfV9nZXRMaXN0ZW5lcnModCl7Y29uc3Qgbj10aGlzLl9ldmVudHNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjohMX19dmFyIGdXPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx2Vz0oZSx0LG4pPT50IGluIGU/Z1coZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSk6ZVt0XT1uLExsPShlLHQsbik9Pih2VyhlLHR5cGVvZiB0IT0ic3ltYm9sIj90KyIiOnQsbiksbik7Y2xhc3MgeVcgZXh0ZW5kcyBtV3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLExsKHRoaXMsIl9sb2NhbGUiLCIiKSxMbCh0aGlzLCJfbG9jYWxlcyIpLExsKHRoaXMsIl9sb2NhbGVEYXRhIix7fSksTGwodGhpcywiX21lc3NhZ2VzIix7fSksTGwodGhpcywiX21pc3NpbmciKSxMbCh0aGlzLCJ0Iix0aGlzLl8uYmluZCh0aGlzKSksdC5taXNzaW5nIT1udWxsJiYodGhpcy5fbWlzc2luZz10Lm1pc3NpbmcpLHQubWVzc2FnZXMhPW51bGwmJnRoaXMubG9hZCh0Lm1lc3NhZ2VzKSx0LmxvY2FsZURhdGEhPW51bGwmJnRoaXMubG9hZExvY2FsZURhdGEodC5sb2NhbGVEYXRhKSwodHlwZW9mIHQubG9jYWxlPT0ic3RyaW5nInx8dC5sb2NhbGVzKSYmdGhpcy5hY3RpdmF0ZSh0LmxvY2FsZT8/ZSQsdC5sb2NhbGVzKX1nZXQgbG9jYWxlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX1nZXQgbG9jYWxlcygpe3JldHVybiB0aGlzLl9sb2NhbGVzfWdldCBtZXNzYWdlcygpe3JldHVybiB0aGlzLl9tZXNzYWdlc1t0aGlzLl9sb2NhbGVdPz97fX1nZXQgbG9jYWxlRGF0YSgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRhW3RoaXMuX2xvY2FsZV0/P3t9fV9sb2FkTG9jYWxlRGF0YSh0LG4pe2NvbnN0IHI9dGhpcy5fbG9jYWxlRGF0YVt0XTtyP09iamVjdC5hc3NpZ24ocixuKTp0aGlzLl9sb2NhbGVEYXRhW3RdPW59bG9hZExvY2FsZURhdGEodCxuKXtuIT1udWxsP3RoaXMuX2xvYWRMb2NhbGVEYXRhKHQsbik6T2JqZWN0LmtleXModCkuZm9yRWFjaChyPT50aGlzLl9sb2FkTG9jYWxlRGF0YShyLHRbcl0pKSx0aGlzLmVtaXQoImNoYW5nZSIpfV9sb2FkKHQsbil7Y29uc3Qgcj10aGlzLl9tZXNzYWdlc1t0XTtyP09iamVjdC5hc3NpZ24ocixuKTp0aGlzLl9tZXNzYWdlc1t0XT1ufWxvYWQodCxuKXt0eXBlb2YgdD09InN0cmluZyImJnR5cGVvZiBuPT0ib2JqZWN0Ij90aGlzLl9sb2FkKHQsbik6T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW3Isb10pPT50aGlzLl9sb2FkKHIsbykpLHRoaXMuZW1pdCgiY2hhbmdlIil9bG9hZEFuZEFjdGl2YXRlKHtsb2NhbGU6dCxsb2NhbGVzOm4sbWVzc2FnZXM6cn0pe3RoaXMuX2xvY2FsZT10LHRoaXMuX2xvY2FsZXM9bnx8dm9pZCAwLHRoaXMuX21lc3NhZ2VzW3RoaXMuX2xvY2FsZV09cix0aGlzLmVtaXQoImNoYW5nZSIpfWFjdGl2YXRlKHQsbil7dGhpcy5fbG9jYWxlPXQsdGhpcy5fbG9jYWxlcz1uLHRoaXMuZW1pdCgiY2hhbmdlIil9Xyh0LG4scil7bGV0IG89cj09bnVsbD92b2lkIDA6ci5tZXNzYWdlO0thKHQpfHwobj10LnZhbHVlc3x8bixvPXQubWVzc2FnZSx0PXQuaWQpO2NvbnN0IGk9dGhpcy5tZXNzYWdlc1t0XSxzPWk9PT12b2lkIDAsYT10aGlzLl9taXNzaW5nO2lmKGEmJnMpcmV0dXJuIGFXKGEpP2EodGhpcy5fbG9jYWxlLHQpOmE7cyYmdGhpcy5lbWl0KCJtaXNzaW5nIix7aWQ6dCxsb2NhbGU6dGhpcy5fbG9jYWxlfSk7bGV0IGw9aXx8b3x8dDtyZXR1cm4gS2EobCkmJm4kLnRlc3QobCk/SlNPTi5wYXJzZShgIiR7bH0iYCk6S2EobCk/bDpkVyhsLHRoaXMuX2xvY2FsZSx0aGlzLl9sb2NhbGVzKShuLHI9PW51bGw/dm9pZCAwOnIuZm9ybWF0cyl9ZGF0ZSh0LG4pe3JldHVybiB0JCh0aGlzLl9sb2NhbGVzfHx0aGlzLl9sb2NhbGUsdCxuKX1udW1iZXIodCxuKXtyZXR1cm4gdGIodGhpcy5fbG9jYWxlc3x8dGhpcy5fbG9jYWxlLHQsbil9fWZ1bmN0aW9uIHhXKGU9e30pe3JldHVybiBuZXcgeVcoZSl9Y29uc3QgY3Y9eFcoKTtmdW5jdGlvbiBaKGUsdCl7cmV0dXJuIHQ/Im90aGVyIjplPT0xPyJvbmUiOiJvdGhlciJ9ZnVuY3Rpb24gV2koZSx0KXtyZXR1cm4gdD8ib3RoZXIiOmU9PTB8fGU9PTE/Im9uZSI6Im90aGVyIn1mdW5jdGlvbiBkcihlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9IW5bMV07cmV0dXJuIHQ/Im90aGVyIjplPT0xJiZyPyJvbmUiOiJvdGhlciJ9ZnVuY3Rpb24gc3QoZSx0KXtyZXR1cm4ib3RoZXIifWZ1bmN0aW9uIGRhKGUsdCl7cmV0dXJuIHQ/Im90aGVyIjplPT0xPyJvbmUiOmU9PTI/InR3byI6Im90aGVyIn1jb25zdCBiVz1zdCx3Vz1aLFNXPVdpO2Z1bmN0aW9uIGtXKGUsdCl7cmV0dXJuIHQ/Im90aGVyIjplPj0wJiZlPD0xPyJvbmUiOiJvdGhlciJ9Y29uc3QgRVc9WjtmdW5jdGlvbiBfVyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9TnVtYmVyKG5bMF0pPT1lLG89ciYmblswXS5zbGljZSgtMik7cmV0dXJuIHQ/Im90aGVyIjplPT0wPyJ6ZXJvIjplPT0xPyJvbmUiOmU9PTI/InR3byI6bz49MyYmbzw9MTA/ImZldyI6bz49MTEmJm88PTk5PyJtYW55Ijoib3RoZXIifWZ1bmN0aW9uIENXKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1OdW1iZXIoblswXSk9PWUsbz1yJiZuWzBdLnNsaWNlKC0yKTtyZXR1cm4gdD8ib3RoZXIiOmU9PTA/Inplcm8iOmU9PTE/Im9uZSI6ZT09Mj8idHdvIjpvPj0zJiZvPD0xMD8iZmV3IjpvPj0xMSYmbzw9OTk/Im1hbnkiOiJvdGhlciJ9ZnVuY3Rpb24gT1coZSx0KXtyZXR1cm4gdD9lPT0xfHxlPT01fHxlPT03fHxlPT04fHxlPT05fHxlPT0xMD8ib25lIjplPT0yfHxlPT0zPyJ0d28iOmU9PTQ/ImZldyI6ZT09Nj8ibWFueSI6Im90aGVyIjplPj0wJiZlPD0xPyJvbmUiOiJvdGhlciJ9Y29uc3QgVFc9WixQVz1kcjtmdW5jdGlvbiBNVyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPXIuc2xpY2UoLTEpLGk9ci5zbGljZSgtMikscz1yLnNsaWNlKC0zKTtyZXR1cm4gdD9vPT0xfHxvPT0yfHxvPT01fHxvPT03fHxvPT04fHxpPT0yMHx8aT09NTB8fGk9PTcwfHxpPT04MD8ib25lIjpvPT0zfHxvPT00fHxzPT0xMDB8fHM9PTIwMHx8cz09MzAwfHxzPT00MDB8fHM9PTUwMHx8cz09NjAwfHxzPT03MDB8fHM9PTgwMHx8cz09OTAwPyJmZXciOnI9PTB8fG89PTZ8fGk9PTQwfHxpPT02MHx8aT09OTA/Im1hbnkiOiJvdGhlciI6ZT09MT8ib25lIjoib3RoZXIifWZ1bmN0aW9uIFJXKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1OdW1iZXIoblswXSk9PWUsbz1yJiZuWzBdLnNsaWNlKC0xKSxpPXImJm5bMF0uc2xpY2UoLTIpO3JldHVybiB0PyhvPT0yfHxvPT0zKSYmaSE9MTImJmkhPTEzPyJmZXciOiJvdGhlciI6bz09MSYmaSE9MTE/Im9uZSI6bz49MiYmbzw9NCYmKGk8MTJ8fGk+MTQpPyJmZXciOnImJm89PTB8fG8+PTUmJm88PTl8fGk+PTExJiZpPD0xND8ibWFueSI6Im90aGVyIn1jb25zdCBOVz1aLCRXPVosQVc9WixEVz1XaSxJVz1zdDtmdW5jdGlvbiBMVyhlLHQpe3JldHVybiB0P2U9PTF8fGU9PTV8fGU9PTd8fGU9PTh8fGU9PTl8fGU9PTEwPyJvbmUiOmU9PTJ8fGU9PTM/InR3byI6ZT09ND8iZmV3IjplPT02PyJtYW55Ijoib3RoZXIiOmU+PTAmJmU8PTE/Im9uZSI6Im90aGVyIn1jb25zdCBqVz1zdDtmdW5jdGlvbiB6VyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9TnVtYmVyKG5bMF0pPT1lLG89ciYmblswXS5zbGljZSgtMSksaT1yJiZuWzBdLnNsaWNlKC0yKSxzPXImJm5bMF0uc2xpY2UoLTYpO3JldHVybiB0PyJvdGhlciI6bz09MSYmaSE9MTEmJmkhPTcxJiZpIT05MT8ib25lIjpvPT0yJiZpIT0xMiYmaSE9NzImJmkhPTkyPyJ0d28iOihvPT0zfHxvPT00fHxvPT05KSYmKGk8MTB8fGk+MTkpJiYoaTw3MHx8aT43OSkmJihpPDkwfHxpPjk5KT8iZmV3IjplIT0wJiZyJiZzPT0wPyJtYW55Ijoib3RoZXIifWNvbnN0IEZXPVo7ZnVuY3Rpb24gQlcoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMF0sbz1uWzFdfHwiIixpPSFuWzFdLHM9ci5zbGljZSgtMSksYT1yLnNsaWNlKC0yKSxsPW8uc2xpY2UoLTEpLGM9by5zbGljZSgtMik7cmV0dXJuIHQ/Im90aGVyIjppJiZzPT0xJiZhIT0xMXx8bD09MSYmYyE9MTE/Im9uZSI6aSYmcz49MiYmczw9NCYmKGE8MTJ8fGE+MTQpfHxsPj0yJiZsPD00JiYoYzwxMnx8Yz4xNCk/ImZldyI6Im90aGVyIn1mdW5jdGlvbiBVVyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9IW5bMV07cmV0dXJuIHQ/ZT09MXx8ZT09Mz8ib25lIjplPT0yPyJ0d28iOmU9PTQ/ImZldyI6Im90aGVyIjplPT0xJiZyPyJvbmUiOiJvdGhlciJ9Y29uc3QgVlc9WjtmdW5jdGlvbiBIVyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPW5bMV18fCIiLGk9IW5bMV0scz1yLnNsaWNlKC0xKSxhPW8uc2xpY2UoLTEpO3JldHVybiB0PyJvdGhlciI6aSYmKHI9PTF8fHI9PTJ8fHI9PTMpfHxpJiZzIT00JiZzIT02JiZzIT05fHwhaSYmYSE9NCYmYSE9NiYmYSE9OT8ib25lIjoib3RoZXIifWNvbnN0IFdXPVosS1c9WixxVz1aO2Z1bmN0aW9uIEdXKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89IW5bMV07cmV0dXJuIHQ/Im90aGVyIjplPT0xJiZvPyJvbmUiOnI+PTImJnI8PTQmJm8/ImZldyI6bz8ib3RoZXIiOiJtYW55In1mdW5jdGlvbiBZVyhlLHQpe3JldHVybiB0P2U9PTB8fGU9PTd8fGU9PTh8fGU9PTk/Inplcm8iOmU9PTE/Im9uZSI6ZT09Mj8idHdvIjplPT0zfHxlPT00PyJmZXciOmU9PTV8fGU9PTY/Im1hbnkiOiJvdGhlciI6ZT09MD8iemVybyI6ZT09MT8ib25lIjplPT0yPyJ0d28iOmU9PTM/ImZldyI6ZT09Nj8ibWFueSI6Im90aGVyIn1mdW5jdGlvbiBYVyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPU51bWJlcihuWzBdKT09ZTtyZXR1cm4gdD8ib3RoZXIiOmU9PTF8fCFvJiYocj09MHx8cj09MSk/Im9uZSI6Im90aGVyIn1jb25zdCBaVz1kcjtmdW5jdGlvbiBKVyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPW5bMV18fCIiLGk9IW5bMV0scz1yLnNsaWNlKC0yKSxhPW8uc2xpY2UoLTIpO3JldHVybiB0PyJvdGhlciI6aSYmcz09MXx8YT09MT8ib25lIjppJiZzPT0yfHxhPT0yPyJ0d28iOmkmJihzPT0zfHxzPT00KXx8YT09M3x8YT09ND8iZmV3Ijoib3RoZXIifWNvbnN0IFFXPVosZUs9c3QsdEs9WixuSz1aO2Z1bmN0aW9uIHJLKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj0hblsxXSxvPU51bWJlcihuWzBdKT09ZSxpPW8mJm5bMF0uc2xpY2UoLTEpLHM9byYmblswXS5zbGljZSgtMik7cmV0dXJuIHQ/aT09MSYmcyE9MTE/Im9uZSI6aT09MiYmcyE9MTI/InR3byI6aT09MyYmcyE9MTM/ImZldyI6Im90aGVyIjplPT0xJiZyPyJvbmUiOiJvdGhlciJ9Y29uc3Qgb0s9WixpSz1aLHNLPWRyLGFLPVo7ZnVuY3Rpb24gbEsoZSx0KXtyZXR1cm4gdD8ib3RoZXIiOmU+PTAmJmU8PTE/Im9uZSI6Im90aGVyIn1mdW5jdGlvbiBjSyhlLHQpe3JldHVybiB0PyJvdGhlciI6ZT49MCYmZTwyPyJvbmUiOiJvdGhlciJ9Y29uc3QgdUs9ZHI7ZnVuY3Rpb24gZEsoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMF0sbz1uWzFdfHwiIixpPSFuWzFdLHM9ci5zbGljZSgtMSksYT1vLnNsaWNlKC0xKTtyZXR1cm4gdD9lPT0xPyJvbmUiOiJvdGhlciI6aSYmKHI9PTF8fHI9PTJ8fHI9PTMpfHxpJiZzIT00JiZzIT02JiZzIT05fHwhaSYmYSE9NCYmYSE9NiYmYSE9OT8ib25lIjoib3RoZXIifWNvbnN0IGZLPVo7ZnVuY3Rpb24gcEsoZSx0KXtyZXR1cm4gdD9lPT0xPyJvbmUiOiJvdGhlciI6ZT49MCYmZTwyPyJvbmUiOiJvdGhlciJ9Y29uc3QgaEs9WixtSz1kcjtmdW5jdGlvbiBnSyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9TnVtYmVyKG5bMF0pPT1lO3JldHVybiB0P2U9PTE/Im9uZSI6Im90aGVyIjplPT0xPyJvbmUiOmU9PTI/InR3byI6ciYmZT49MyYmZTw9Nj8iZmV3IjpyJiZlPj03JiZlPD0xMD8ibWFueSI6Im90aGVyIn1mdW5jdGlvbiB2SyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9TnVtYmVyKG5bMF0pPT1lO3JldHVybiB0P2U9PTF8fGU9PTExPyJvbmUiOmU9PTJ8fGU9PTEyPyJ0d28iOmU9PTN8fGU9PTEzPyJmZXciOiJvdGhlciI6ZT09MXx8ZT09MTE/Im9uZSI6ZT09Mnx8ZT09MTI/InR3byI6ciYmZT49MyYmZTw9MTB8fHImJmU+PTEzJiZlPD0xOT8iZmV3Ijoib3RoZXIifWNvbnN0IHlLPWRyLHhLPVo7ZnVuY3Rpb24gYksoZSx0KXtyZXR1cm4gdD9lPT0xPyJvbmUiOmU9PTJ8fGU9PTM/InR3byI6ZT09ND8iZmV3IjplPT02PyJtYW55Ijoib3RoZXIiOmU+PTAmJmU8PTE/Im9uZSI6Im90aGVyIn1jb25zdCB3Sz1XaTtmdW5jdGlvbiBTSyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPSFuWzFdLGk9ci5zbGljZSgtMSkscz1yLnNsaWNlKC0yKTtyZXR1cm4gdD8ib3RoZXIiOm8mJmk9PTE/Im9uZSI6byYmaT09Mj8idHdvIjpvJiYocz09MHx8cz09MjB8fHM9PTQwfHxzPT02MHx8cz09ODApPyJmZXciOm8/Im90aGVyIjoibWFueSJ9Y29uc3Qga0s9WixFSz1aO2Z1bmN0aW9uIF9LKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89IW5bMV0saT1OdW1iZXIoblswXSk9PWUscz1pJiZuWzBdLnNsaWNlKC0xKTtyZXR1cm4gdD8ib3RoZXIiOmU9PTEmJm8/Im9uZSI6cj09MiYmbz8idHdvIjpvJiYoZTwwfHxlPjEwKSYmaSYmcz09MD8ibWFueSI6Im90aGVyIn1mdW5jdGlvbiBDSyhlLHQpe3JldHVybiB0P2U9PTE/Im9uZSI6ZT09Mnx8ZT09Mz8idHdvIjplPT00PyJmZXciOmU9PTY/Im1hbnkiOiJvdGhlciI6ZT49MCYmZTw9MT8ib25lIjoib3RoZXIifWZ1bmN0aW9uIE9LKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89blsxXXx8IiIsaT0hblsxXSxzPXIuc2xpY2UoLTEpLGE9ci5zbGljZSgtMiksbD1vLnNsaWNlKC0xKSxjPW8uc2xpY2UoLTIpO3JldHVybiB0PyJvdGhlciI6aSYmcz09MSYmYSE9MTF8fGw9PTEmJmMhPTExPyJvbmUiOmkmJnM+PTImJnM8PTQmJihhPDEyfHxhPjE0KXx8bD49MiYmbDw9NCYmKGM8MTJ8fGM+MTQpPyJmZXciOiJvdGhlciJ9ZnVuY3Rpb24gVEsoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMF0sbz1uWzFdfHwiIixpPSFuWzFdLHM9ci5zbGljZSgtMiksYT1vLnNsaWNlKC0yKTtyZXR1cm4gdD8ib3RoZXIiOmkmJnM9PTF8fGE9PTE/Im9uZSI6aSYmcz09Mnx8YT09Mj8idHdvIjppJiYocz09M3x8cz09NCl8fGE9PTN8fGE9PTQ/ImZldyI6Im90aGVyIn1mdW5jdGlvbiBQSyhlLHQpe3JldHVybiB0P2U9PTF8fGU9PTU/Im9uZSI6Im90aGVyIjplPT0xPyJvbmUiOiJvdGhlciJ9ZnVuY3Rpb24gTUsoZSx0KXtyZXR1cm4gdD9lPT0xPyJvbmUiOiJvdGhlciI6ZT49MCYmZTwyPyJvbmUiOiJvdGhlciJ9Y29uc3QgUks9ZHIsTks9c3QsJEs9c3QsQUs9c3QsREs9ZHI7ZnVuY3Rpb24gSUsoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMF0sbz1OdW1iZXIoblswXSk9PWUsaT1yLnNsaWNlKC0xKSxzPXIuc2xpY2UoLTIpO3JldHVybiB0PyJvdGhlciI6byYmaT09MSYmcyE9MTF8fCFvPyJvbmUiOiJvdGhlciJ9ZnVuY3Rpb24gTEsoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPSFuWzFdO3JldHVybiB0P2U9PTExfHxlPT04fHxlPT04MHx8ZT09ODAwPyJtYW55Ijoib3RoZXIiOmU9PTEmJnI/Im9uZSI6Im90aGVyIn1jb25zdCBqSz1kYTtmdW5jdGlvbiB6SyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPSFuWzFdLGk9TnVtYmVyKG5bMF0pPT1lLHM9aSYmblswXS5zbGljZSgtMSk7cmV0dXJuIHQ/Im90aGVyIjplPT0xJiZvPyJvbmUiOnI9PTImJm8/InR3byI6byYmKGU8MHx8ZT4xMCkmJmkmJnM9PTA/Im1hbnkiOiJvdGhlciJ9Y29uc3QgRks9c3QsQks9c3QsVUs9WixWSz1kcixISz1aLFdLPXN0LEtLPXN0O2Z1bmN0aW9uIHFLKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89ci5zbGljZSgtMik7cmV0dXJuIHQ/cj09MT8ib25lIjpyPT0wfHxvPj0yJiZvPD0yMHx8bz09NDB8fG89PTYwfHxvPT04MD8ibWFueSI6Im90aGVyIjplPT0xPyJvbmUiOiJvdGhlciJ9ZnVuY3Rpb24gR0soZSx0KXtyZXR1cm4gdD8ib3RoZXIiOmU+PTAmJmU8Mj8ib25lIjoib3RoZXIifWNvbnN0IFlLPVosWEs9WixaSz1zdCxKSz1zdDtmdW5jdGlvbiBRSyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9TnVtYmVyKG5bMF0pPT1lLG89ciYmblswXS5zbGljZSgtMSk7cmV0dXJuIHQ/bz09Nnx8bz09OXx8ciYmbz09MCYmZSE9MD8ibWFueSI6Im90aGVyIjplPT0xPyJvbmUiOiJvdGhlciJ9Y29uc3QgZXE9Wix0cT1aLG5xPXN0O2Z1bmN0aW9uIHJxKGUsdCl7cmV0dXJuIHQ/Im90aGVyIjplPj0wJiZlPD0xPyJvbmUiOiJvdGhlciJ9Y29uc3Qgb3E9c3QsaXE9WixzcT1aO2Z1bmN0aW9uIGFxKGUsdCl7cmV0dXJuIHQ/Im90aGVyIjplPT0wPyJ6ZXJvIjplPT0xPyJvbmUiOiJvdGhlciJ9Y29uc3QgbHE9WjtmdW5jdGlvbiBjcShlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9TnVtYmVyKG5bMF0pPT1lLG89ciYmblswXS5zbGljZSgtMiksaT1yJiZuWzBdLnNsaWNlKC0zKSxzPXImJm5bMF0uc2xpY2UoLTUpLGE9ciYmblswXS5zbGljZSgtNik7cmV0dXJuIHQ/ciYmZT49MSYmZTw9NHx8bz49MSYmbzw9NHx8bz49MjEmJm88PTI0fHxvPj00MSYmbzw9NDR8fG8+PTYxJiZvPD02NHx8bz49ODEmJm88PTg0PyJvbmUiOmU9PTV8fG89PTU/Im1hbnkiOiJvdGhlciI6ZT09MD8iemVybyI6ZT09MT8ib25lIjpvPT0yfHxvPT0yMnx8bz09NDJ8fG89PTYyfHxvPT04Mnx8ciYmaT09MCYmKHM+PTFlMyYmczw9MmU0fHxzPT00ZTR8fHM9PTZlNHx8cz09OGU0KXx8ZSE9MCYmYT09MWU1PyJ0d28iOm89PTN8fG89PTIzfHxvPT00M3x8bz09NjN8fG89PTgzPyJmZXciOmUhPTEmJihvPT0xfHxvPT0yMXx8bz09NDF8fG89PTYxfHxvPT04MSk/Im1hbnkiOiJvdGhlciJ9Y29uc3QgdXE9WjtmdW5jdGlvbiBkcShlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXTtyZXR1cm4gdD8ib3RoZXIiOmU9PTA/Inplcm8iOihyPT0wfHxyPT0xKSYmZSE9MD8ib25lIjoib3RoZXIifWNvbnN0IGZxPVoscHE9WixocT1zdCxtcT1XaTtmdW5jdGlvbiBncShlLHQpe3JldHVybiB0JiZlPT0xPyJvbmUiOiJvdGhlciJ9ZnVuY3Rpb24gdnEoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMV18fCIiLG89TnVtYmVyKG5bMF0pPT1lLGk9byYmblswXS5zbGljZSgtMSkscz1vJiZuWzBdLnNsaWNlKC0yKTtyZXR1cm4gdD8ib3RoZXIiOmk9PTEmJihzPDExfHxzPjE5KT8ib25lIjppPj0yJiZpPD05JiYoczwxMXx8cz4xOSk/ImZldyI6ciE9MD8ibWFueSI6Im90aGVyIn1mdW5jdGlvbiB5cShlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blsxXXx8IiIsbz1yLmxlbmd0aCxpPU51bWJlcihuWzBdKT09ZSxzPWkmJm5bMF0uc2xpY2UoLTEpLGE9aSYmblswXS5zbGljZSgtMiksbD1yLnNsaWNlKC0yKSxjPXIuc2xpY2UoLTEpO3JldHVybiB0PyJvdGhlciI6aSYmcz09MHx8YT49MTEmJmE8PTE5fHxvPT0yJiZsPj0xMSYmbDw9MTk/Inplcm8iOnM9PTEmJmEhPTExfHxvPT0yJiZjPT0xJiZsIT0xMXx8byE9MiYmYz09MT8ib25lIjoib3RoZXIifWNvbnN0IHhxPVosYnE9V2ksd3E9WjtmdW5jdGlvbiBTcShlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPW5bMV18fCIiLGk9IW5bMV0scz1yLnNsaWNlKC0xKSxhPXIuc2xpY2UoLTIpLGw9by5zbGljZSgtMSksYz1vLnNsaWNlKC0yKTtyZXR1cm4gdD9zPT0xJiZhIT0xMT8ib25lIjpzPT0yJiZhIT0xMj8idHdvIjoocz09N3x8cz09OCkmJmEhPTE3JiZhIT0xOD8ibWFueSI6Im90aGVyIjppJiZzPT0xJiZhIT0xMXx8bD09MSYmYyE9MTE/Im9uZSI6Im90aGVyIn1jb25zdCBrcT1aLEVxPVo7ZnVuY3Rpb24gX3EoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPSFuWzFdLG89TnVtYmVyKG5bMF0pPT1lLGk9byYmblswXS5zbGljZSgtMik7cmV0dXJuIHQ/ZT09MT8ib25lIjoib3RoZXIiOmU9PTEmJnI/Im9uZSI6IXJ8fGU9PTB8fGk+PTImJmk8PTE5PyJmZXciOiJvdGhlciJ9ZnVuY3Rpb24gQ3EoZSx0KXtyZXR1cm4gdD9lPT0xPyJvbmUiOmU9PTJ8fGU9PTM/InR3byI6ZT09ND8iZmV3Ijoib3RoZXIiOmU9PTE/Im9uZSI6Im90aGVyIn1mdW5jdGlvbiBPcShlLHQpe3JldHVybiB0JiZlPT0xPyJvbmUiOiJvdGhlciJ9ZnVuY3Rpb24gVHEoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPU51bWJlcihuWzBdKT09ZSxvPXImJm5bMF0uc2xpY2UoLTIpO3JldHVybiB0PyJvdGhlciI6ZT09MT8ib25lIjplPT0wfHxvPj0yJiZvPD0xMD8iZmV3IjpvPj0xMSYmbzw9MTk/Im1hbnkiOiJvdGhlciJ9Y29uc3QgUHE9c3QsTXE9WixScT1kYSxOcT1aLCRxPVo7ZnVuY3Rpb24gQXEoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPU51bWJlcihuWzBdKT09ZTtyZXR1cm4gdD9yJiZlPj0xJiZlPD00PyJvbmUiOiJvdGhlciI6ZT09MT8ib25lIjoib3RoZXIifWNvbnN0IERxPWRyLElxPVosTHE9WixqcT1aLHpxPXN0LEZxPVosQnE9V2ksVXE9WixWcT1aLEhxPVo7ZnVuY3Rpb24gV3EoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPU51bWJlcihuWzBdKT09ZTtyZXR1cm4gdD9lPT0xfHxlPT01fHxyJiZlPj03JiZlPD05PyJvbmUiOmU9PTJ8fGU9PTM/InR3byI6ZT09ND8iZmV3IjplPT02PyJtYW55Ijoib3RoZXIiOmU9PTE/Im9uZSI6Im90aGVyIn1jb25zdCBLcT1aLHFxPXN0LEdxPVdpLFlxPVo7ZnVuY3Rpb24gWHEoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMF0sbz0hblsxXSxpPXIuc2xpY2UoLTEpLHM9ci5zbGljZSgtMik7cmV0dXJuIHQ/Im90aGVyIjplPT0xJiZvPyJvbmUiOm8mJmk+PTImJmk8PTQmJihzPDEyfHxzPjE0KT8iZmV3IjpvJiZyIT0xJiYoaT09MHx8aT09MSl8fG8mJmk+PTUmJmk8PTl8fG8mJnM+PTEyJiZzPD0xND8ibWFueSI6Im90aGVyIn1mdW5jdGlvbiBacShlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blsxXXx8IiIsbz1yLmxlbmd0aCxpPU51bWJlcihuWzBdKT09ZSxzPWkmJm5bMF0uc2xpY2UoLTEpLGE9aSYmblswXS5zbGljZSgtMiksbD1yLnNsaWNlKC0yKSxjPXIuc2xpY2UoLTEpO3JldHVybiB0PyJvdGhlciI6aSYmcz09MHx8YT49MTEmJmE8PTE5fHxvPT0yJiZsPj0xMSYmbDw9MTk/Inplcm8iOnM9PTEmJmEhPTExfHxvPT0yJiZjPT0xJiZsIT0xMXx8byE9MiYmYz09MT8ib25lIjoib3RoZXIifWNvbnN0IEpxPVo7ZnVuY3Rpb24gUXEoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMF07cmV0dXJuIHQ/Im90aGVyIjpyPT0wfHxyPT0xPyJvbmUiOiJvdGhlciJ9Y29uc3QgZUc9ZHIsdEc9WjtmdW5jdGlvbiBuRyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9IW5bMV0sbz1OdW1iZXIoblswXSk9PWUsaT1vJiZuWzBdLnNsaWNlKC0yKTtyZXR1cm4gdD9lPT0xPyJvbmUiOiJvdGhlciI6ZT09MSYmcj8ib25lIjohcnx8ZT09MHx8aT49MiYmaTw9MTk/ImZldyI6Im90aGVyIn1jb25zdCByRz1aLG9HPXN0O2Z1bmN0aW9uIGlHKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89IW5bMV0saT1yLnNsaWNlKC0xKSxzPXIuc2xpY2UoLTIpO3JldHVybiB0PyJvdGhlciI6byYmaT09MSYmcyE9MTE/Im9uZSI6byYmaT49MiYmaTw9NCYmKHM8MTJ8fHM+MTQpPyJmZXciOm8mJmk9PTB8fG8mJmk+PTUmJmk8PTl8fG8mJnM+PTExJiZzPD0xND8ibWFueSI6Im90aGVyIn1jb25zdCBzRz1aLGFHPXN0LGxHPVo7ZnVuY3Rpb24gY0coZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPSFuWzFdO3JldHVybiB0P2U9PTExfHxlPT04fHxlPT04MHx8ZT09ODAwPyJtYW55Ijoib3RoZXIiOmU9PTEmJnI/Im9uZSI6Im90aGVyIn1mdW5jdGlvbiB1RyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9IW5bMV07cmV0dXJuIHQ/ZT09MTF8fGU9PTh8fGU9PTgwfHxlPT04MDA/Im1hbnkiOiJvdGhlciI6ZT09MSYmcj8ib25lIjoib3RoZXIifWNvbnN0IGRHPVosZkc9WixwRz1kYSxoRz1aLG1HPXN0LGdHPXN0O2Z1bmN0aW9uIHZHKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89blsxXXx8IiIsaT0hblsxXSxzPXIuc2xpY2UoLTEpLGE9ci5zbGljZSgtMiksbD1vLnNsaWNlKC0xKSxjPW8uc2xpY2UoLTIpO3JldHVybiB0PyJvdGhlciI6aSYmcz09MSYmYSE9MTF8fGw9PTEmJmMhPTExPyJvbmUiOmkmJnM+PTImJnM8PTQmJihhPDEyfHxhPjE0KXx8bD49MiYmbDw9NCYmKGM8MTJ8fGM+MTQpPyJmZXciOiJvdGhlciJ9ZnVuY3Rpb24geUcoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPU51bWJlcihuWzBdKT09ZTtyZXR1cm4gdD8ib3RoZXIiOmU+PTAmJmU8PTE/Im9uZSI6ciYmZT49MiYmZTw9MTA/ImZldyI6Im90aGVyIn1mdW5jdGlvbiB4RyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPW5bMV18fCIiO3JldHVybiB0PyJvdGhlciI6ZT09MHx8ZT09MXx8cj09MCYmbz09MT8ib25lIjoib3RoZXIifWZ1bmN0aW9uIGJHKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1uWzBdLG89IW5bMV07cmV0dXJuIHQ/Im90aGVyIjplPT0xJiZvPyJvbmUiOnI+PTImJnI8PTQmJm8/ImZldyI6bz8ib3RoZXIiOiJtYW55In1mdW5jdGlvbiB3RyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPSFuWzFdLGk9ci5zbGljZSgtMik7cmV0dXJuIHQ/Im90aGVyIjpvJiZpPT0xPyJvbmUiOm8mJmk9PTI/InR3byI6byYmKGk9PTN8fGk9PTQpfHwhbz8iZmV3Ijoib3RoZXIifWNvbnN0IFNHPWRhLGtHPWRhLEVHPWRhLF9HPWRhLENHPWRhLE9HPVosVEc9WjtmdW5jdGlvbiBQRyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9TnVtYmVyKG5bMF0pPT1lLG89ciYmblswXS5zbGljZSgtMSksaT1yJiZuWzBdLnNsaWNlKC0yKTtyZXR1cm4gdD9lPT0xPyJvbmUiOm89PTQmJmkhPTE0PyJtYW55Ijoib3RoZXIiOmU9PTE/Im9uZSI6Im90aGVyIn1mdW5jdGlvbiBNRyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPW5bMV18fCIiLGk9IW5bMV0scz1yLnNsaWNlKC0xKSxhPXIuc2xpY2UoLTIpLGw9by5zbGljZSgtMSksYz1vLnNsaWNlKC0yKTtyZXR1cm4gdD8ib3RoZXIiOmkmJnM9PTEmJmEhPTExfHxsPT0xJiZjIT0xMT8ib25lIjppJiZzPj0yJiZzPD00JiYoYTwxMnx8YT4xNCl8fGw+PTImJmw8PTQmJihjPDEyfHxjPjE0KT8iZmV3Ijoib3RoZXIifWNvbnN0IFJHPVosTkc9WiwkRz1aLEFHPXN0O2Z1bmN0aW9uIERHKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj0hblsxXSxvPU51bWJlcihuWzBdKT09ZSxpPW8mJm5bMF0uc2xpY2UoLTEpLHM9byYmblswXS5zbGljZSgtMik7cmV0dXJuIHQ/KGk9PTF8fGk9PTIpJiZzIT0xMSYmcyE9MTI/Im9uZSI6Im90aGVyIjplPT0xJiZyPyJvbmUiOiJvdGhlciJ9Y29uc3QgSUc9ZHIsTEc9WixqRz1aLHpHPVosRkc9WixCRz1zdCxVRz1XaSxWRz1aO2Z1bmN0aW9uIEhHKGUsdCl7dmFyIG49U3RyaW5nKGUpLnNwbGl0KCIuIikscj1OdW1iZXIoblswXSk9PWUsbz1yJiZuWzBdLnNsaWNlKC0xKTtyZXR1cm4gdD9vPT02fHxvPT05fHxlPT0xMD8iZmV3Ijoib3RoZXIiOmU9PTE/Im9uZSI6Im90aGVyIn1mdW5jdGlvbiBXRyhlLHQpe3ZhciBuPVN0cmluZyhlKS5zcGxpdCgiLiIpLHI9blswXSxvPW5bMV18fCIiLGk9IW5bMV0scz1yLnNsaWNlKC0xKSxhPW8uc2xpY2UoLTEpO3JldHVybiB0P2U9PTE/Im9uZSI6Im90aGVyIjppJiYocj09MXx8cj09Mnx8cj09Myl8fGkmJnMhPTQmJnMhPTYmJnMhPTl8fCFpJiZhIT00JiZhIT02JiZhIT05PyJvbmUiOiJvdGhlciJ9Y29uc3QgS0c9WixxRz1zdCxHRz1aLFlHPVo7ZnVuY3Rpb24gWEcoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPU51bWJlcihuWzBdKT09ZTtyZXR1cm4gdD8ib3RoZXIiOmU9PTB8fGU9PTF8fHImJmU+PTExJiZlPD05OT8ib25lIjoib3RoZXIifWNvbnN0IFpHPVo7ZnVuY3Rpb24gSkcoZSx0KXt2YXIgbj1TdHJpbmcoZSkuc3BsaXQoIi4iKSxyPW5bMF0sbz0hblsxXSxpPU51bWJlcihuWzBdKT09ZSxzPWkmJm5bMF0uc2xpY2UoLTEpLGE9aSYmblswXS5zbGljZSgtMiksbD1yLnNsaWNlKC0xKSxjPXIuc2xpY2UoLTIpO3JldHVybiB0P3M9PTMmJmEhPTEzPyJmZXciOiJvdGhlciI6byYmbD09MSYmYyE9MTE/Im9uZSI6byYmbD49MiYmbDw9NCYmKGM8MTJ8fGM+MTQpPyJmZXciOm8mJmw9PTB8fG8mJmw+PTUmJmw8PTl8fG8mJmM+PTExJiZjPD0xND8ibWFueSI6Im90aGVyIn1jb25zdCBRRz1kcixlWT1aLHRZPVo7ZnVuY3Rpb24gblkoZSx0KXtyZXR1cm4gdCYmZT09MT8ib25lIjoib3RoZXIifWNvbnN0IHJZPVosb1k9WixpWT1XaSxzWT1aLGFZPXN0LGxZPVosY1k9Wix1WT1kcixkWT1zdCxmWT1zdCxwWT1zdDtmdW5jdGlvbiBoWShlLHQpe3JldHVybiB0PyJvdGhlciI6ZT49MCYmZTw9MT8ib25lIjoib3RoZXIifWNvbnN0IG1ZPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxfaW46YlcsYWY6d1csYWs6U1csYW06a1csYW46RVcsYXI6X1csYXJzOkNXLGFzOk9XLGFzYTpUVyxhc3Q6UFcsYXo6TVcsYmU6UlcsYmVtOk5XLGJlejokVyxiZzpBVyxiaG86RFcsYm06SVcsYm46TFcsYm86alcsYnI6elcsYnJ4OkZXLGJzOkJXLGNhOlVXLGNlOlZXLGNlYjpIVyxjZ2c6V1csY2hyOktXLGNrYjpxVyxjczpHVyxjeTpZVyxkYTpYVyxkZTpaVyxkc2I6SlcsZHY6UVcsZHo6ZUssZWU6dEssZWw6bkssZW46ckssZW86b0ssZXM6aUssZXQ6c0ssZXU6YUssZmE6bEssZmY6Y0ssZmk6dUssZmlsOmRLLGZvOmZLLGZyOnBLLGZ1cjpoSyxmeTptSyxnYTpnSyxnZDp2SyxnbDp5Syxnc3c6eEssZ3U6YkssZ3V3OndLLGd2OlNLLGhhOmtLLGhhdzpFSyxoZTpfSyxoaTpDSyxocjpPSyxoc2I6VEssaHU6UEssaHk6TUssaWE6UkssaWQ6TkssaWc6JEssaWk6QUssaW86REssaXM6SUssaXQ6TEssaXU6akssaXc6ekssamE6RkssamJvOkJLLGpnbzpVSyxqaTpWSyxqbWM6SEssanY6V0ssanc6S0ssa2E6cUssa2FiOkdLLGthajpZSyxrY2c6WEssa2RlOlpLLGtlYTpKSyxrazpRSyxra2o6ZXEsa2w6dHEsa206bnEsa246cnEsa286b3Esa3M6aXEsa3NiOnNxLGtzaDphcSxrdTpscSxrdzpjcSxreTp1cSxsYWc6ZHEsbGI6ZnEsbGc6cHEsbGt0OmhxLGxuOm1xLGxvOmdxLGx0OnZxLGx2OnlxLG1hczp4cSxtZzpicSxtZ286d3EsbWs6U3EsbWw6a3EsbW46RXEsbW86X3EsbXI6Q3EsbXM6T3EsbXQ6VHEsbXk6UHEsbmFoOk1xLG5hcTpScSxuYjpOcSxuZDokcSxuZTpBcSxubDpEcSxubjpJcSxubmg6THEsbm86anEsbnFvOnpxLG5yOkZxLG5zbzpCcSxueTpVcSxueW46VnEsb206SHEsb3I6V3Esb3M6S3Esb3NhOnFxLHBhOkdxLHBhcDpZcSxwbDpYcSxwcmc6WnEscHM6SnEscHQ6UXEscHRfUFQ6ZUcscm06dEcscm86bkcscm9mOnJHLHJvb3Q6b0cscnU6aUcscndrOnNHLHNhaDphRyxzYXE6bEcsc2M6Y0csc2NuOnVHLHNkOmRHLHNkaDpmRyxzZTpwRyxzZWg6aEcsc2VzOm1HLHNnOmdHLHNoOnZHLHNoaTp5RyxzaTp4RyxzazpiRyxzbDp3RyxzbWE6U0csc21pOmtHLHNtajpFRyxzbW46X0csc21zOkNHLHNuOk9HLHNvOlRHLHNxOlBHLHNyOk1HLHNzOlJHLHNzeTpORyxzdDokRyxzdTpBRyxzdjpERyxzdzpJRyxzeXI6TEcsdGE6akcsdGU6ekcsdGVvOkZHLHRoOkJHLHRpOlVHLHRpZzpWRyx0azpIRyx0bDpXRyx0bjpLRyx0bzpxRyx0cjpHRyx0czpZRyx0em06WEcsdWc6WkcsdWs6SkcsdXI6UUcsdXo6ZVksdmU6dFksdmk6blksdm86clksdnVuOm9ZLHdhOmlZLHdhZTpzWSx3bzphWSx4aDpsWSx4b2c6Y1kseWk6dVkseW86ZFkseXVlOmZZLHpoOnBZLHp1OmhZfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBnWT1PYmplY3QuZGVmaW5lUHJvcGVydHksdlk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix5WT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyx4WT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGlDPShlLHQsbixyKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBvIG9mIHlZKHQpKSF4WS5jYWxsKGUsbykmJm8hPT1uJiZnWShlLG8se2dldDooKT0+dFtvXSxlbnVtZXJhYmxlOiEocj12WSh0LG8pKXx8ci5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9LGJZPShlLHQsbik9PihpQyhlLHQsImRlZmF1bHQiKSxuJiZpQyhuLHQsImRlZmF1bHQiKSksd1k9SlNPTi5wYXJzZSgneyJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtdXBwZXItY2FzZS5sYWJlbCI6W1siY2FzZSIsInNlbGVjdCIseyJ1cHBlciI6IlVwcGVyY2FzZSIsImxvd2VyIjoiTG93ZXJjYXNlIiwiY2FwaXRhbGl6ZSI6IlNlbnRlbmNlIGNhc2UiLCJzbWFsbENhcHMiOiJTbWFsbCBjYXBzIiwib3RoZXIiOiJUZXh0IGNhc2UifV1dLCJleHRlbnNpb24udGFibGUuY29sdW1uX2NvdW50IjpbWyJjb3VudCIsInBsdXJhbCIseyJvbmUiOlsiIyIsIiBjb2x1bW4iXSwib3RoZXIiOlsiIyIsIiBjb2x1bW5zIl19XV0sImV4dGVuc2lvbi50YWJsZS5yb3dfY291bnQiOltbImNvdW50IiwicGx1cmFsIix7Im9uZSI6WyIjIiwiIHJvdyJdLCJvdGhlciI6WyIjIiwiIHJvd3MiXX1dXSwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWNvbHVtbnMuZGVzY3JpcHRpb24iOltbImNvdW50Iiwic2VsZWN0Iix7IjIiOiJTcGxpdCB0aGUgYmxvY2sgaW50byB0d28gY29sdW1ucyIsIjMiOiJTcGxpdCB0aGUgY3VycmVudCBibG9jayBpbnRvIHRocmVlIGNvbHVtbnMiLCI0IjoiU3BsaXQgdGhlIGN1cnJlbnQgYmxvY2sgaW50byBmb3VyIGNvbHVtbnMiLCJvdGhlciI6IlNwbGl0IHRoZSBjdXJyZW50IGJsb2NrIGludG8gbXVsdGlwbGUgY29sdW1ucyJ9XV0sImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1jb2x1bW5zLmxhYmVsIjpbWyJjb3VudCIsInNlbGVjdCIseyIyIjoiVHdvIENvbHVtbiBCbG9jayIsIjMiOiJUaHJlZSBDb2x1bW4gQmxvY2siLCI0IjoiRm91ciBDb2x1bW4gQmxvY2siLCJvdGhlciI6Ik11bHRpIENvbHVtbiBCbG9jayJ9XV0sImV4dGVuc2lvbi5jb21tYW5kLnNldC10ZXh0LWRpcmVjdGlvbi5sYWJlbCI6W1siZGlyIiwic2VsZWN0Iix7Imx0ciI6IkxlZnQtVG8tUmlnaHQiLCJydGwiOiJSaWdodC1Uby1MZWZ0Iiwib3RoZXIiOiJSZXNldCBEaXJlY3Rpb24ifV1dLCJleHRlbnNpb24uY29tbWFuZC5zZXQtdGV4dC1kaXJlY3Rpb24uZGVzY3JpcHRpb24iOltbImRpciIsInNlbGVjdCIseyJsdHIiOiJTZXQgdGhlIHRleHQgZGlyZWN0aW9uIGZyb20gbGVmdCB0byByaWdodCIsInJ0bCI6IlNldCB0aGUgdGV4dCBkaXJlY3Rpb24gZnJvbSByaWdodCB0byBsZWZ0Iiwib3RoZXIiOiJSZXNldCB0ZXh0IGRpcmVjdGlvbiJ9XV0sImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1oZWFkaW5nLmxhYmVsIjpbWyJsZXZlbCIsInNlbGVjdCIseyIxIjoiSGVhZGluZyAxIiwiMiI6IkhlYWRpbmcgMiIsIjMiOiJIZWFkaW5nIDMiLCI0IjoiSGVhZGluZyA0IiwiNSI6IkhlYWRpbmcgNSIsIjYiOiJIZWFkaW5nIDYiLCJvdGhlciI6IkhlYWRpbmcifV1dLCJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtY2FsbG91dC5kZXNjcmlwdGlvbiI6W1sidHlwZSIsInNlbGVjdCIseyJpbmZvIjoiQ3JlYXRlIGFuIGluZm9ybWF0aW9uIGNhbGxvdXQgYmxvY2siLCJ3YXJuaW5nIjoiQ3JlYXRlIGEgd2FybmluZyBjYWxsb3V0IGJsb2NrIiwiZXJyb3IiOiJDcmVhdGUgYW4gZXJyb3IgY2FsbG91dCBibG9jayIsInN1Y2Nlc3MiOiJDcmVhdGUgYSBzdWNjZXNzIGNhbGxvdXQgYmxvY2siLCJvdGhlciI6IkNyZWF0ZSBhIGNhbGxvdXQgYmxvY2sifV1dLCJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtY2FsbG91dC5sYWJlbCI6W1sidHlwZSIsInNlbGVjdCIseyJpbmZvIjoiSW5mb3JtYXRpb24gQ2FsbG91dCIsIndhcm5pbmciOiJXYXJuaW5nIENhbGxvdXQiLCJlcnJvciI6IkVycm9yIENhbGxvdXQiLCJzdWNjZXNzIjoiU3VjY2VzcyBDYWxsb3V0Iiwib3RoZXIiOiJDYWxsb3V0In1dXSwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWNvZGUtYmxvY2suZGVzY3JpcHRpb24iOiJBZGQgYSBjb2RlIGJsb2NrIiwiZXh0ZW5zaW9uLmNvbW1hbmQuYWRkLWFubm90YXRpb24ubGFiZWwiOiJBZGQgYW5ub3RhdGlvbiIsImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1ibG9ja3F1b3RlLmRlc2NyaXB0aW9uIjoiQWRkIGJsb2NrcXVvdGUgZm9ybWF0dGluZyB0byB0aGUgc2VsZWN0ZWQgdGV4dCIsImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1ib2xkLmRlc2NyaXB0aW9uIjoiQWRkIGJvbGQgZm9ybWF0dGluZyB0byB0aGUgc2VsZWN0ZWQgdGV4dCIsImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1jb2RlLmRlc2NyaXB0aW9uIjoiQWRkIGlubGluZSBjb2RlIGZvcm1hdHRpbmcgdG8gdGhlIHNlbGVjdGVkIHRleHQiLCJrZXlib2FyZC5zaG9ydGN1dC5hbHQiOiJBbHQiLCJrZXlib2FyZC5zaG9ydGN1dC5hcnJvd0Rvd24iOiJBcnJvdyBEb3duIiwia2V5Ym9hcmQuc2hvcnRjdXQuYXJyb3dMZWZ0IjoiQXJyb3cgTGVmdCIsImtleWJvYXJkLnNob3J0Y3V0LmFycm93UmlnaHQiOiJBcnJvdyBSaWdodCIsImtleWJvYXJkLnNob3J0Y3V0LmFycm93VXAiOiJBcnJvdyBVcCIsImtleWJvYXJkLnNob3J0Y3V0LmJhY2tzcGFjZSI6IkJhY2tzcGFjZSIsInVpLnRleHQtY29sb3IuYmxhY2siOiJCbGFjayIsImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1ibG9ja3F1b3RlLmxhYmVsIjoiQmxvY2txdW90ZSIsInVpLnRleHQtY29sb3IuYmx1ZSI6IkJsdWUiLCJ1aS50ZXh0LWNvbG9yLmJsdWUuaHVlIjpbIkJsdWUgIixbImh1ZSJdXSwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWJvbGQubGFiZWwiOiJCb2xkIiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWJ1bGxldC1saXN0LmRlc2NyaXB0aW9uIjoiQnVsbGV0ZWQgbGlzdCIsImtleWJvYXJkLnNob3J0Y3V0LmNhcHNMb2NrIjoiQ2FwcyBMb2NrIiwiZXh0ZW5zaW9uLmNvbW1hbmQuY2VudGVyLWFsaWduLmxhYmVsIjoiQ2VudGVyIGFsaWduIiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWNvZGUubGFiZWwiOiJDb2RlIiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLWNvZGUtYmxvY2subGFiZWwiOiJDb2RlYmxvY2siLCJrZXlib2FyZC5zaG9ydGN1dC5jb21tYW5kIjoiQ29tbWFuZCIsIlFjUE5kNiI6IkltYWdlIGRlc2NyaXB0aW9uIiwib2dyVXpKIjoiQWRkIGEgc2hvcnQgZGVzY3JpcHRpb24gaGVyZS4iLCJ5cWR5enIiOiJJbWFnZSIsIjYvMDJGNCI6IkltYWdlIHNvdXJjZSIsIlg4SDkxdiI6IkltYWdlIiwiemhRN1p0IjoiSXRhbGljIiwiWkw3RTdsIjoiVW5kZXJsaW5lIiwia2V5Ym9hcmQuc2hvcnRjdXQuY29udHJvbCI6IkNvbnRyb2wiLCJleHRlbnNpb24uY29tbWFuZC5jb252ZXJ0LXBhcmFncmFwaC5kZXNjcmlwdGlvbiI6IkNvbnZlcnQgY3VycmVudCBibG9jayBpbnRvIGEgcGFyYWdyYXBoIGJsb2NrLiIsImV4dGVuc2lvbi5jb21tYW5kLmNvbnZlcnQtcGFyYWdyYXBoLmxhYmVsIjoiQ29udmVydCBQYXJhZ3JhcGgiLCJleHRlbnNpb24uY29tbWFuZC5jb3B5LmxhYmVsIjoiQ29weSIsImV4dGVuc2lvbi5jb21tYW5kLmNvcHkuZGVzY3JpcHRpb24iOiJDb3B5IHRoZSBzZWxlY3RlZCB0ZXh0IiwiZXh0ZW5zaW9uLmNvbW1hbmQuY3JlYXRlLXRhYmxlLmRlc2NyaXB0aW9uIjoiQ3JlYXRlIGEgdGFibGUgd2l0aCBzZXQgbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuIiwiZXh0ZW5zaW9uLmNvbW1hbmQuY3JlYXRlLXRhYmxlLmxhYmVsIjoiQ3JlYXRlIHRhYmxlIiwiZXh0ZW5zaW9uLmNvbW1hbmQuY3V0LmxhYmVsIjoiQ3V0IiwiZXh0ZW5zaW9uLmNvbW1hbmQuY3V0LmRlc2NyaXB0aW9uIjoiQ3V0IHRoZSBzZWxlY3RlZCB0ZXh0IiwidWkudGV4dC1jb2xvci5jeWFuIjoiQ3lhbiIsInVpLnRleHQtY29sb3IuY3lhbi5odWUiOlsiQ3lhbiAiLFsiaHVlIl1dLCJleHRlbnNpb24uY29tbWFuZC5kZWNyZWFzZS1mb250LXNpemUubGFiZWwiOiJEZWNyZWFzZSIsImV4dGVuc2lvbi5jb21tYW5kLmRlY3JlYXNlLWluZGVudC5sYWJlbCI6IkRlY3JlYXNlIGluZGVudGF0aW9uIiwiZXh0ZW5zaW9uLmNvbW1hbmQuZGVjcmVhc2UtZm9udC1zaXplLmRlc2NyaXB0aW9uIjoiRGVjcmVhc2UgdGhlIGZvbnQgc2l6ZS4iLCJrZXlib2FyZC5zaG9ydGN1dC5kZWxldGUiOiJEZWxldGUiLCJleHRlbnNpb24uY29tbWFuZC5pbnNlcnQtaG9yaXpvbnRhbC1ydWxlLmxhYmVsIjoiRGl2aWRlciIsImtleWJvYXJkLnNob3J0Y3V0LmVuZCI6IkVuZCIsImtleWJvYXJkLnNob3J0Y3V0LmVzY2FwZSI6IkVudGVyIiwia2V5Ym9hcmQuc2hvcnRjdXQuZW50ZXIiOiJFbnRlciIsIjZQanJPRiI6IkFkZCBhbm5vdGF0aW9uIiwiT1RxNVdDIjoiQ2VudGVyIGFsaWduIiwib2VaM294IjoiQ29udmVydCBjdXJyZW50IGJsb2NrIGludG8gYSBwYXJhZ3JhcGggYmxvY2suIiwibTFraHMrIjoiQ29udmVydCBQYXJhZ3JhcGgiLCJ3LzFVKzMiOiJDb3B5IHRoZSBzZWxlY3RlZCB0ZXh0Iiwia2RvZGkwIjoiQ29weSIsImswS1IvdSI6IkNyZWF0ZSBhIHRhYmxlIHdpdGggc2V0IG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zLiIsInpyd015RCI6IkNyZWF0ZSB0YWJsZSIsIkQvbld4aCI6IkN1dCB0aGUgc2VsZWN0ZWQgdGV4dCIsImpIUHY1bSI6IkN1dCIsIjVjTmdSeCI6IkRlY3JlYXNlIHRoZSBmb250IHNpemUuIiwidnlSTld4IjoiRGVjcmVhc2UiLCJKZ2lvbDQiOiJEZWNyZWFzZSBpbmRlbnRhdGlvbiIsIjFnSlNISCI6IkluY3JlYXNlIHRoZSBmb250IHNpemUiLCJPUVhKWHoiOiJJbmNyZWFzZSIsIjcyVExociI6IkluY3JlYXNlIGluZGVudGF0aW9uIiwiSEZsZnpKIjoiSW5zZXJ0IEVtb2ppIiwiUlBxOWZZIjoiU2VwYXJhdGUgY29udGVudCB3aXRoIGEgZGl2aW5nIGhvcml6b250YWwgbGluZSIsIk9LUUYrZSI6IkRpdmlkZXIiLCJ6alliOUMiOiJJbnNlcnQgYSBuZXcgcGFyYWdyYXBoIiwiNE00c1hDIjoiSW5zZXJ0IFBhcmFncmFwaCIsIjFRK2VWYyI6Ikp1c3RpZnkiLCJlaldXdFAiOiJMZWZ0IGFsaWduIiwid1ZxcnBTIjoiUGFzdGUgY29udGVudCBpbnRvIHRoZSBlZGl0b3IiLCIwN3Y5YXciOiJQYXN0ZSIsInpVWWZvdSI6IlJlZG8gdGhlIG1vc3QgcmVjZW50IGFjdGlvbiIsIjlOcTl6ciI6IlJlZG8iLCIwdXhhWmUiOiJSZW1vdmUgYW5ub3RhdGlvbiIsImlKV1pBeiI6IlJpZ2h0IGFsaWduIiwiZzVXcFBuIjoiU2VsZWN0IGFsbCBjb250ZW50IHdpdGhpbiB0aGUgZWRpdG9yIiwiMitwWkRUIjoiU2VsZWN0IGFsbCIsInlDaENSMSI6IlNldCB0ZXh0IGNhc2UiLCJHTXpBQy8iOiJTZXQgdGhlIGZvbnQgc2l6ZSBmb3IgdGhlIHNlbGVjdGVkIHRleHQuIiwidnpFeXJ2IjoiRm9udCBzaXplIiwiN1ZDa0o4IjoiU2V0IHRoZSB0ZXh0IGNvbG9yIGZvciB0aGUgc2VsZWN0ZWQgdGV4dC4iLCJxaldGYVIiOiJUZXh0IGNvbG9yIiwiTFZXZ0Z1IjpbWyJkaXIiLCJzZWxlY3QiLHsibHRyIjoiU2V0IHRoZSB0ZXh0IGRpcmVjdGlvbiBmcm9tIGxlZnQgdG8gcmlnaHQiLCJydGwiOiJTZXQgdGhlIHRleHQgZGlyZWN0aW9uIGZyb20gcmlnaHQgdG8gbGVmdCIsIm90aGVyIjoiUmVzZXQgdGV4dCBkaXJlY3Rpb24ifV1dLCJXWHdSeTEiOltbImRpciIsInNlbGVjdCIseyJsdHIiOiJMZWZ0LVRvLVJpZ2h0IiwicnRsIjoiUmlnaHQtVG8tTGVmdCIsIm90aGVyIjoiUmVzZXQgRGlyZWN0aW9uIn1dXSwiRy9vMzE1IjoiU2V0IHRoZSB0ZXh0IGhpZ2hsaWdodCBjb2xvciBmb3IgdGhlIHNlbGVjdGVkIHRleHQuIiwieHRIZzZkIjoiVGV4dCBoaWdobGlnaHQiLCIxcDFXL3AiOiJBZGQgYmxvY2txdW90ZSBmb3JtYXR0aW5nIHRvIHRoZSBzZWxlY3RlZCB0ZXh0IiwiNityaDZJIjoiQmxvY2txdW90ZSIsIjB5QjNMViI6IkFkZCBib2xkIGZvcm1hdHRpbmcgdG8gdGhlIHNlbGVjdGVkIHRleHQiLCJzRk1vNFoiOiJCb2xkIiwiU01LRy9zIjoiQnVsbGV0ZWQgbGlzdCIsIi9CWUNNaSI6W1sidHlwZSIsInNlbGVjdCIseyJpbmZvIjoiQ3JlYXRlIGFuIGluZm9ybWF0aW9uIGNhbGxvdXQgYmxvY2siLCJ3YXJuaW5nIjoiQ3JlYXRlIGEgd2FybmluZyBjYWxsb3V0IGJsb2NrIiwiZXJyb3IiOiJDcmVhdGUgYW4gZXJyb3IgY2FsbG91dCBibG9jayIsInN1Y2Nlc3MiOiJDcmVhdGUgYSBzdWNjZXNzIGNhbGxvdXQgYmxvY2siLCJvdGhlciI6IkNyZWF0ZSBhIGNhbGxvdXQgYmxvY2sifV1dLCJWKzNJQmUiOltbInR5cGUiLCJzZWxlY3QiLHsiaW5mbyI6IkluZm9ybWF0aW9uIENhbGxvdXQiLCJ3YXJuaW5nIjoiV2FybmluZyBDYWxsb3V0IiwiZXJyb3IiOiJFcnJvciBDYWxsb3V0Iiwic3VjY2VzcyI6IlN1Y2Nlc3MgQ2FsbG91dCIsIm90aGVyIjoiQ2FsbG91dCJ9XV0sImhiSW80TCI6IkFkZCBhIGNvZGUgYmxvY2siLCI3R2tNY3giOiJDb2RlYmxvY2siLCIycjRKWWwiOiJBZGQgaW5saW5lIGNvZGUgZm9ybWF0dGluZyB0byB0aGUgc2VsZWN0ZWQgdGV4dCIsIlVwOFRwZSI6IkNvZGUiLCJBVEhTUFMiOltbImNvdW50Iiwic2VsZWN0Iix7IjIiOiJTcGxpdCB0aGUgYmxvY2sgaW50byB0d28gY29sdW1ucyIsIjMiOiJTcGxpdCB0aGUgY3VycmVudCBibG9jayBpbnRvIHRocmVlIGNvbHVtbnMiLCI0IjoiU3BsaXQgdGhlIGN1cnJlbnQgYmxvY2sgaW50byBmb3VyIGNvbHVtbnMiLCJvdGhlciI6IlNwbGl0IHRoZSBjdXJyZW50IGJsb2NrIGludG8gbXVsdGlwbGUgY29sdW1ucyJ9XV0sIjdEQzFWRSI6W1siY291bnQiLCJzZWxlY3QiLHsiMiI6IlR3byBDb2x1bW4gQmxvY2siLCIzIjoiVGhyZWUgQ29sdW1uIEJsb2NrIiwiNCI6IkZvdXIgQ29sdW1uIEJsb2NrIiwib3RoZXIiOiJNdWx0aSBDb2x1bW4gQmxvY2sifV1dLCJobnJCZW8iOltbImxldmVsIiwic2VsZWN0Iix7IjEiOiJIZWFkaW5nIDEiLCIyIjoiSGVhZGluZyAyIiwiMyI6IkhlYWRpbmcgMyIsIjQiOiJIZWFkaW5nIDQiLCI1IjoiSGVhZGluZyA1IiwiNiI6IkhlYWRpbmcgNiIsIm90aGVyIjoiSGVhZGluZyJ9XV0sIk5rWkFjdyI6Ikl0YWxpY2l6ZSB0aGUgc2VsZWN0ZWQgdGV4dCIsIjJmVFc5ZSI6Ikl0YWxpYyIsImM3NTlSYSI6Ik9yZGVyZWQgbGlzdCIsInVRd3JadSI6IlN0cmlrZXRocm91Z2ggdGhlIHNlbGVjdGVkIHRleHQiLCJwVDNxbHkiOiJTdHJpa2V0aHJvdWdoIiwiQkhrK3p1IjoiU3Vic2NyaXB0IiwiMThCVndNIjoiU3VwZXJzY3JpcHQiLCJ0T0lWQ1YiOiJUYXNrZWQgbGlzdCIsIjRKYW54MyI6IlVuZGVybGluZSB0aGUgc2VsZWN0ZWQgdGV4dCIsImRDSHQrRCI6IlVuZGVybGluZSIsIllZQXBycyI6W1siY2FzZSIsInNlbGVjdCIseyJ1cHBlciI6IlVwcGVyY2FzZSIsImxvd2VyIjoiTG93ZXJjYXNlIiwiY2FwaXRhbGl6ZSI6IlNlbnRlbmNlIGNhc2UiLCJzbWFsbENhcHMiOiJTbWFsbCBjYXBzIiwib3RoZXIiOiJUZXh0IGNhc2UifV1dLCJ0Y3p5WkwiOiJTaG93IGhpZGRlbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4geW91ciBlZGl0b3IuIiwiMHFBWDIzIjoiVG9nZ2xlIFdoaXRlc3BhY2UiLCJlek1BRFUiOiJVbmRvIHRoZSBtb3N0IHJlY2VudCBhY3Rpb24iLCJOM1A3RUMiOiJVbmRvIiwiMm5qLytzIjoiVXBkYXRlIGFubm90YXRpb24iLCJkV0Q3dTQiOltbImNvdW50IiwicGx1cmFsIix7Im9uZSI6WyIjIiwiIGNvbHVtbiJdLCJvdGhlciI6WyIjIiwiIGNvbHVtbnMiXX1dXSwicVhxZ1ZUIjpbWyJjb3VudCIsInBsdXJhbCIseyJvbmUiOlsiIyIsIiByb3ciXSwib3RoZXIiOlsiIyIsIiByb3dzIl19XV0sImV4dGVuc2lvbi5jb21tYW5kLnNldC1mb250LXNpemUubGFiZWwiOiJGb250IHNpemUiLCJ1aS50ZXh0LWNvbG9yLmdyYXBlIjoiR3JhcGUiLCJ1aS50ZXh0LWNvbG9yLmdyYXBlLmh1ZSI6WyJHcmFwZSAiLFsiaHVlIl1dLCJ1aS50ZXh0LWNvbG9yLmdyYXkiOiJHcmF5IiwidWkudGV4dC1jb2xvci5ncmF5Lmh1ZSI6WyJHcmF5ICIsWyJodWUiXV0sInVpLnRleHQtY29sb3IuZ3JlZW4iOiJHcmVlbiIsInVpLnRleHQtY29sb3IuZ3JlZW4uaHVlIjpbIkdyZWVuICIsWyJodWUiXV0sImtleWJvYXJkLnNob3J0Y3V0LmhvbWUiOiJIb21lIiwiZXh0ZW5zaW9uLmNvbW1hbmQuaW5jcmVhc2UtZm9udC1zaXplLmxhYmVsIjoiSW5jcmVhc2UiLCJleHRlbnNpb24uY29tbWFuZC5pbmNyZWFzZS1pbmRlbnQubGFiZWwiOiJJbmNyZWFzZSBpbmRlbnRhdGlvbiIsImV4dGVuc2lvbi5jb21tYW5kLmluY3JlYXNlLWZvbnQtc2l6ZS5kZXNjcmlwdGlvbiI6IkluY3JlYXNlIHRoZSBmb250IHNpemUiLCJ1aS50ZXh0LWNvbG9yLmluZGlnbyI6IkluZGlnbyIsInVpLnRleHQtY29sb3IuaW5kaWdvLmh1ZSI6WyJJbmRpZ28gIixbImh1ZSJdXSwiZXh0ZW5zaW9uLmNvbW1hbmQuaW5zZXJ0LXBhcmFncmFwaC5kZXNjcmlwdGlvbiI6Ikluc2VydCBhIG5ldyBwYXJhZ3JhcGgiLCJleHRlbnNpb24uY29tbWFuZC5pbnNlcnQtZW1vamkubGFiZWwiOiJJbnNlcnQgRW1vamkiLCJleHRlbnNpb24uY29tbWFuZC5pbnNlcnQtcGFyYWdyYXBoLmxhYmVsIjoiSW5zZXJ0IFBhcmFncmFwaCIsImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1pdGFsaWMubGFiZWwiOiJJdGFsaWMiLCJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtaXRhbGljLmRlc2NyaXB0aW9uIjoiSXRhbGljaXplIHRoZSBzZWxlY3RlZCB0ZXh0IiwiZXh0ZW5zaW9uLmNvbW1hbmQuanVzdGlmeS1hbGlnbi5sYWJlbCI6Ikp1c3RpZnkiLCJSN05sQ3ciOiJBbHQiLCJSYkRpSzUiOiJBcnJvdyBEb3duIiwiRGd5ZCtFIjoiQXJyb3cgTGVmdCIsIjhwZENrNCI6IkFycm93IFJpZ2h0IiwiR3AvMzQzIjoiQXJyb3cgVXAiLCJQRlBWMEEiOiJCYWNrc3BhY2UiLCIwSVJZdnAiOiJDYXBzIExvY2siLCJYN0hYMEQiOiJDb21tYW5kIiwienEwQWREIjoiQ29udHJvbCIsIjhTZlRvTiI6IkRlbGV0ZSIsIllzL3VhaCI6IkVuZCIsIjNLNWh3dyI6IkVudGVyIiwidmVRdDFqIjoiRW50ZXIiLCJ5U3Y3aSsiOiJIb21lIiwiZTZSVUkxIjoiUGFnZSBEb3duIiwiRUVKazMxIjoiUGFnZSBVcCIsIjdzYmhBVSI6IlNoaWZ0IiwiUTRlcGxUIjoiU3BhY2UiLCJTVWhWVkMiOiJUYWIiLCJleHRlbnNpb24uY29tbWFuZC5sZWZ0LWFsaWduLmxhYmVsIjoiTGVmdCBhbGlnbiIsInVpLnRleHQtY29sb3IubGltZSI6IkxpbWUiLCJ1aS50ZXh0LWNvbG9yLmxpbWUuaHVlIjpbIkxpbWUgIixbImh1ZSJdXSwicmVhY3QtY29tcG9uZW50cy5tZW50aW9uLWF0b20tY29tcG9uZW50Lnplcm8taXRlbXMiOiJObyBpdGVtcyBhdmFpbGFibGUiLCJ1aS50ZXh0LWNvbG9yLm9yYW5nZSI6Ik9yYW5nZSIsInVpLnRleHQtY29sb3Iub3JhbmdlLmh1ZSI6WyJPcmFuZ2UgIixbImh1ZSJdXSwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLW9yZGVyZWQtbGlzdC5sYWJlbCI6Ik9yZGVyZWQgbGlzdCIsImtleWJvYXJkLnNob3J0Y3V0LnBhZ2VEb3duIjoiUGFnZSBEb3duIiwia2V5Ym9hcmQuc2hvcnRjdXQucGFnZVVwIjoiUGFnZSBVcCIsImV4dGVuc2lvbi5jb21tYW5kLnBhc3RlLmxhYmVsIjoiUGFzdGUiLCJleHRlbnNpb24uY29tbWFuZC5wYXN0ZS5kZXNjcmlwdGlvbiI6IlBhc3RlIGNvbnRlbnQgaW50byB0aGUgZWRpdG9yIiwidWkudGV4dC1jb2xvci5waW5rIjoiUGluayIsInVpLnRleHQtY29sb3IucGluay5odWUiOlsiUGluayAiLFsiaHVlIl1dLCJ6dk1mSUEiOiJObyBpdGVtcyBhdmFpbGFibGUiLCJwRWpodGkiOiJTdGF0aWMgTWVudSIsInVpLnRleHQtY29sb3IucmVkIjoiUmVkIiwidWkudGV4dC1jb2xvci5yZWQuaHVlIjpbIlJlZCAiLFsiaHVlIl1dLCJleHRlbnNpb24uY29tbWFuZC5yZWRvLmxhYmVsIjoiUmVkbyIsImV4dGVuc2lvbi5jb21tYW5kLnJlZG8uZGVzY3JpcHRpb24iOiJSZWRvIHRoZSBtb3N0IHJlY2VudCBhY3Rpb24iLCJleHRlbnNpb24uY29tbWFuZC5yZW1vdmUtYW5ub3RhdGlvbi5sYWJlbCI6IlJlbW92ZSBhbm5vdGF0aW9uIiwiZXh0ZW5zaW9uLmNvbW1hbmQucmlnaHQtYWxpZ24ubGFiZWwiOiJSaWdodCBhbGlnbiIsImV4dGVuc2lvbi5jb21tYW5kLnNlbGVjdC1hbGwubGFiZWwiOiJTZWxlY3QgYWxsIiwiZXh0ZW5zaW9uLmNvbW1hbmQuc2VsZWN0LWFsbC5kZXNjcmlwdGlvbiI6IlNlbGVjdCBhbGwgY29udGVudCB3aXRoaW4gdGhlIGVkaXRvciIsImV4dGVuc2lvbi5jb21tYW5kLmluc2VydC1ob3Jpem9udGFsLXJ1bGUuZGVzY3JpcHRpb24iOiJTZXBhcmF0ZSBjb250ZW50IHdpdGggYSBkaXZpbmcgaG9yaXpvbnRhbCBsaW5lIiwiZXh0ZW5zaW9uLmNvbW1hbmQuc2V0LWNhc2luZy5sYWJlbCI6IlNldCB0ZXh0IGNhc2UiLCJleHRlbnNpb24uY29tbWFuZC5zZXQtZm9udC1zaXplLmRlc2NyaXB0aW9uIjoiU2V0IHRoZSBmb250IHNpemUgZm9yIHRoZSBzZWxlY3RlZCB0ZXh0LiIsImV4dGVuc2lvbi5jb21tYW5kLnNldC10ZXh0LWNvbG9yLmRlc2NyaXB0aW9uIjoiU2V0IHRoZSB0ZXh0IGNvbG9yIGZvciB0aGUgc2VsZWN0ZWQgdGV4dC4iLCJleHRlbnNpb24uY29tbWFuZC5zZXQtdGV4dC1oaWdobGlnaHQuZGVzY3JpcHRpb24iOiJTZXQgdGhlIHRleHQgaGlnaGxpZ2h0IGNvbG9yIGZvciB0aGUgc2VsZWN0ZWQgdGV4dC4iLCJrZXlib2FyZC5zaG9ydGN1dC5zaGlmdCI6IlNoaWZ0IiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLXdoaXRlc3BhY2UuZGVzY3JpcHRpb24iOiJTaG93IGhpZGRlbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4geW91ciBlZGl0b3IuIiwia2V5Ym9hcmQuc2hvcnRjdXQuc3BhY2UiOiJTcGFjZSIsImV4dGVuc2lvbi5jb21tYW5kLnRvZ2dsZS1zdHJpa2UubGFiZWwiOiJTdHJpa2V0aHJvdWdoIiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLXN0cmlrZS5kZXNjcmlwdGlvbiI6IlN0cmlrZXRocm91Z2ggdGhlIHNlbGVjdGVkIHRleHQiLCJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtc3Vic2NyaXB0LmxhYmVsIjoiU3Vic2NyaXB0IiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLXN1cGVyc2NyaXB0LmxhYmVsIjoiU3VwZXJzY3JpcHQiLCJrZXlib2FyZC5zaG9ydGN1dC50YWIiOiJUYWIiLCJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtdGFzay1saXN0LmRlc2NyaXB0aW9uIjoiVGFza2VkIGxpc3QiLCJ1aS50ZXh0LWNvbG9yLnRlYWwiOiJUZWFsIiwidWkudGV4dC1jb2xvci50ZWFsLmh1ZSI6WyJUZWFsICIsWyJodWUiXV0sImV4dGVuc2lvbi5jb21tYW5kLnNldC10ZXh0LWNvbG9yLmxhYmVsIjoiVGV4dCBjb2xvciIsImV4dGVuc2lvbi5jb21tYW5kLnNldC10ZXh0LWhpZ2hsaWdodC5sYWJlbCI6IlRleHQgaGlnaGxpZ2h0IiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLXdoaXRlc3BhY2UubGFiZWwiOiJUb2dnbGUgV2hpdGVzcGFjZSIsInVpLnRleHQtY29sb3IudHJhbnNwYXJlbnQiOiJUcmFuc3BhcmVudCIsInNsckIxYyI6IkJsYWNrIiwiNlFNTDMwIjoiQmx1ZSIsInh3K2tlTiI6WyJCbHVlICIsWyJodWUiXV0sIjM4UkhxUCI6IkN5YW4iLCJEODl5UGYiOlsiQ3lhbiAiLFsiaHVlIl1dLCJWakJMbmQiOiJHcmFwZSIsIlJwNDB5diI6WyJHcmFwZSAiLFsiaHVlIl1dLCI1RG05RDEiOiJHcmF5IiwiSEdqWGpDIjpbIkdyYXkgIixbImh1ZSJdXSwiYjlmeituIjoiR3JlZW4iLCIxOGpvM00iOlsiR3JlZW4gIixbImh1ZSJdXSwiQ0Z6cUNWIjoiSW5kaWdvIiwiYVZsRGt1IjpbIkluZGlnbyAiLFsiaHVlIl1dLCIwNFBmTGMiOiJMaW1lIiwiS1JUSzZZIjpbIkxpbWUgIixbImh1ZSJdXSwicFNuWEZkIjoiT3JhbmdlIiwidmUvTUpaIjpbIk9yYW5nZSAiLFsiaHVlIl1dLCJPdkNnRGEiOiJQaW5rIiwibDdOcXlUIjpbIlBpbmsgIixbImh1ZSJdXSwiSVQ5azBqIjoiUmVkIiwiQWR5SjcvIjpbIlJlZCAiLFsiaHVlIl1dLCIzRDJVV2MiOiJUZWFsIiwiRGNxMFkxIjpbIlRlYWwgIixbImh1ZSJdXSwiYnNpMmlrIjoiVHJhbnNwYXJlbnQiLCJUajNQUlIiOiJWaW9sZXQiLCJ4eE1INU4iOlsiVmlvbGV0ICIsWyJodWUiXV0sIlJ1bTBhaCI6IldoaXRlIiwiNGdhdy9RIjoiWWVsbG93IiwiaGhhdWMzIjpbIlllbGxvdyAiLFsiaHVlIl1dLCJleHRlbnNpb24uY29tbWFuZC50b2dnbGUtdW5kZXJsaW5lLmxhYmVsIjoiVW5kZXJsaW5lIiwiZXh0ZW5zaW9uLmNvbW1hbmQudG9nZ2xlLXVuZGVybGluZS5kZXNjcmlwdGlvbiI6IlVuZGVybGluZSB0aGUgc2VsZWN0ZWQgdGV4dCIsImV4dGVuc2lvbi5jb21tYW5kLnVuZG8ubGFiZWwiOiJVbmRvIiwiZXh0ZW5zaW9uLmNvbW1hbmQudW5kby5kZXNjcmlwdGlvbiI6IlVuZG8gdGhlIG1vc3QgcmVjZW50IGFjdGlvbiIsImV4dGVuc2lvbi5jb21tYW5kLnVwZGF0ZS1hbm5vdGF0aW9uLmxhYmVsIjoiVXBkYXRlIGFubm90YXRpb24iLCJ1aS50ZXh0LWNvbG9yLnZpb2xldCI6IlZpb2xldCIsInVpLnRleHQtY29sb3IudmlvbGV0Lmh1ZSI6WyJWaW9sZXQgIixbImh1ZSJdXSwidWkudGV4dC1jb2xvci53aGl0ZSI6IldoaXRlIiwidWkudGV4dC1jb2xvci55ZWxsb3ciOiJZZWxsb3ciLCJ1aS50ZXh0LWNvbG9yLnllbGxvdy5odWUiOlsiWWVsbG93ICIsWyJodWUiXV19JyksciQ9e307YlkociQsbVkpO2N2LmxvYWRMb2NhbGVEYXRhKCJlbiIse3BsdXJhbHM6ciQuZW59KTtjdi5sb2FkKCJlbiIsd1kpO2N2LmFjdGl2YXRlKCJlbiIpO3ZhciBTWT1PYmplY3QuZGVmaW5lUHJvcGVydHksa1k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixidz0oZSx0LG4scik9Pntmb3IodmFyIG89cj4xP3ZvaWQgMDpyP2tZKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiZTWSh0LG4sbyksb30sWmM9Y2xhc3MgZXh0ZW5kcyBvb3tnZXQgbmFtZSgpe3JldHVybiJkb2MifWNyZWF0ZU5vZGVTcGVjKGUsdCl7Y29uc3R7ZG9jQXR0cmlidXRlczpuLGNvbnRlbnQ6cn09dGhpcy5vcHRpb25zLG89aGUoKTtpZihibChuKSlmb3IoY29uc3RbaSxzXW9mIEp0KG4pKW9baV09e2RlZmF1bHQ6c307ZWxzZSBmb3IoY29uc3QgaSBvZiBuKW9baV09e2RlZmF1bHQ6bnVsbH07cmV0dXJue2F0dHJzOm8sY29udGVudDpyLC4uLnR9fXNldERvY0F0dHJpYnV0ZXMoZSl7cmV0dXJuKHt0cjp0LGRpc3BhdGNoOm59KT0+e2lmKG4pe2Zvcihjb25zdFtyLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpdC5zdGVwKG5ldyBQZihyLG8pKTtuKHQpfXJldHVybiEwfX1pc0RlZmF1bHREb2NOb2RlKHtzdGF0ZTplPXRoaXMuc3RvcmUuZ2V0U3RhdGUoKSxvcHRpb25zOnR9PXt9KXtyZXR1cm4gbXcoZS5kb2MsdCl9fTtidyhbZGUoKV0sWmMucHJvdG90eXBlLCJzZXREb2NBdHRyaWJ1dGVzIiwxKTtidyhbSXQoKV0sWmMucHJvdG90eXBlLCJpc0RlZmF1bHREb2NOb2RlIiwxKTtaYz1idyhbSmUoe2RlZmF1bHRPcHRpb25zOntjb250ZW50OiJibG9jaysiLGRvY0F0dHJpYnV0ZXM6W119LGRlZmF1bHRQcmlvcml0eTpjdC5NZWRpdW0sc3RhdGljS2V5czpbImNvbnRlbnQiLCJkb2NBdHRyaWJ1dGVzIl0sZGlzYWJsZUV4dHJhQXR0cmlidXRlczohMH0pXSxaYyk7dmFyIG8kPSJTZXREb2NBdHRyaWJ1dGUiLGkkPSJSZXZlcnRTZXREb2NBdHRyaWJ1dGUiLFBmPWNsYXNzIGV4dGVuZHMgdG57Y29uc3RydWN0b3IoZSx0LG49byQpe3N1cGVyKCksdGhpcy5zdGVwVHlwZT1uLHRoaXMua2V5PWUsdGhpcy52YWx1ZT10fXN0YXRpYyBmcm9tSlNPTihlLHQpe3JldHVybiBuZXcgUGYodC5rZXksdC52YWx1ZSx0LnN0ZXBUeXBlKX1hcHBseShlKXt0aGlzLnByZXZpb3VzPWUuYXR0cnNbdGhpcy5rZXldO2NvbnN0IHQ9ey4uLmUuYXR0cnMsW3RoaXMua2V5XTp0aGlzLnZhbHVlfTtyZXR1cm4gQnQub2soZS50eXBlLmNyZWF0ZSh0LGUuY29udGVudCxlLm1hcmtzKSl9aW52ZXJ0KCl7cmV0dXJuIG5ldyBQZih0aGlzLmtleSx0aGlzLnByZXZpb3VzLGkkKX1tYXAoKXtyZXR1cm4gdGhpc310b0pTT04oKXtyZXR1cm57c3RlcFR5cGU6dGhpcy5zdGVwVHlwZSxrZXk6dGhpcy5rZXksdmFsdWU6dGhpcy52YWx1ZX19fTt0cnl7dG4uanNvbklEKG8kLFBmKSx0bi5qc29uSUQoaSQsUGYpfWNhdGNoKGUpe2lmKCFlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgiRHVwbGljYXRlIHVzZSBvZiBzdGVwIEpTT04gSUQiKSl0aHJvdyBlfXZhciBFWT1PYmplY3QuZGVmaW5lUHJvcGVydHksX1k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzJD0oZSx0LG4scik9Pntmb3IodmFyIG89cj4xP3ZvaWQgMDpyP19ZKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiZFWSh0LG4sbyksb307ZnVuY3Rpb24gQ1koZSx0LG4scil7Y29uc3Qgbz1lLmRvY1ZpZXcucG9zRnJvbURPTSh0LG4scik7cmV0dXJuIG89PT1udWxsfHxvPDA/bnVsbDpvfWZ1bmN0aW9uIE9ZKGUsdCl7Y29uc3Qgbj10LnRhcmdldDtpZihuKXtjb25zdCByPUNZKGUsbiwwKTtpZihyIT09bnVsbCl7Y29uc3Qgbz1lLnN0YXRlLmRvYy5yZXNvbHZlKHIpLGk9by5ub2RlKCkuaXNMZWFmPzA6MSxzPW8uc3RhcnQoKS1pO3JldHVybntwb3M6cixpbnNpZGU6c319fXJldHVybiBlLnBvc0F0Q29vcmRzKHtsZWZ0OnQuY2xpZW50WCx0b3A6dC5jbGllbnRZfSk/P3ZvaWQgMH12YXIgV209Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb3VzZWRvd249ITEsdGhpcy5tb3VzZW92ZXI9ITEsdGhpcy5jcmVhdGVNb3VzZUV2ZW50SGFuZGxlcj1lPT4odCxuKT0+e2NvbnN0IHI9bixvPU9ZKHQscik7aWYoIW8pcmV0dXJuITE7Y29uc3QgaT1bXSxzPVtdLHtpbnNpZGU6YSxwb3M6bH09bztpZihhPT09LTEpcmV0dXJuITE7Y29uc3QgYz10LnN0YXRlLmRvYy5yZXNvbHZlKGwpLHU9Yy5kZXB0aCsxO2Zvcihjb25zdCBkIG9mIEpNKHUsMSkpaS5wdXNoKHtub2RlOmQ+Yy5kZXB0aCYmYy5ub2RlQWZ0ZXI/Yy5ub2RlQWZ0ZXI6Yy5ub2RlKGQpLHBvczpjLmJlZm9yZShkKX0pO2Zvcihjb25zdHt0eXBlOmR9b2YgYy5tYXJrc0Fjcm9zcyhjKT8/W10pe2NvbnN0IGY9TGkoYyxkKTtmJiZzLnB1c2goZil9cmV0dXJuIGUocix7dmlldzp0LG5vZGVzOmksbWFya3M6cyxnZXRNYXJrOmQ9Pntjb25zdCBmPV9lKGQpP3Quc3RhdGUuc2NoZW1hLm1hcmtzW2RdOmQ7cmV0dXJuIGJlKGYse2NvZGU6cS5FWFRFTlNJT04sbWVzc2FnZTpgVGhlIG1hcmsgJHtkfSBiZWluZyBjaGVja2VkIGRvZXMgbm90IGV4aXN0IHdpdGhpbiB0aGUgZWRpdG9yIHNjaGVtYS5gfSkscy5maW5kKHA9PnAubWFyay50eXBlPT09Zil9LGdldE5vZGU6ZD0+e3ZhciBmO2NvbnN0IHA9X2UoZCk/dC5zdGF0ZS5zY2hlbWEubm9kZXNbZF06ZDtiZShwLHtjb2RlOnEuRVhURU5TSU9OLG1lc3NhZ2U6IlRoZSBub2RlIGJlaW5nIGNoZWNrZWQgZG9lcyBub3QgZXhpc3QifSk7Y29uc3QgbT1pLmZpbmQoKHtub2RlOmd9KT0+Zy50eXBlPT09cCk7aWYobSlyZXR1cm57Li4ubSxpc1Jvb3Q6ISEoKGY9aVswXSkhPW51bGwmJmYubm9kZS5lcShtLm5vZGUpKX19fSl9fWdldCBuYW1lKCl7cmV0dXJuImV2ZW50cyJ9b25WaWV3KCl7dmFyIGUsdDtpZighKChlPXRoaXMuc3RvcmUubWFuYWdlclNldHRpbmdzLmV4Y2x1ZGUpIT1udWxsJiZlLmNsaWNrSGFuZGxlcikpZm9yKGNvbnN0IG4gb2YgdGhpcy5zdG9yZS5leHRlbnNpb25zKXtpZighbi5jcmVhdGVFdmVudEhhbmRsZXJzfHwodD1uLm9wdGlvbnMuZXhjbHVkZSkhPW51bGwmJnQuY2xpY2tIYW5kbGVyKWNvbnRpbnVlO2NvbnN0IHI9bi5jcmVhdGVFdmVudEhhbmRsZXJzKCk7Zm9yKGNvbnN0W28saV1vZiBKdChyKSl0aGlzLmFkZEhhbmRsZXIobyxpKX19Y3JlYXRlUGx1Z2luKCl7Y29uc3QgZT1uZXcgV2Vha01hcCx0PShuLHIsbyxpLHMsYSxsLGMpPT57Y29uc3QgdT10aGlzLnN0b3JlLmN1cnJlbnRTdGF0ZSx7c2NoZW1hOmQsZG9jOmZ9PXUscD1mLnJlc29sdmUoaSksbT1lLmhhcyhsKSxnPVRZKHskcG9zOnAsaGFuZGxlZDptLHZpZXc6byxzdGF0ZTp1fSk7bGV0IHk9ITE7bXx8KHk9bihsLGcpfHx5KTtjb25zdCB2PXsuLi5nLHBvczppLGRpcmVjdDpjLG5vZGVXaXRoUG9zaXRpb246e25vZGU6cyxwb3M6YX0sZ2V0Tm9kZTp4PT57Y29uc3Qgdz1fZSh4KT9kLm5vZGVzW3hdOng7cmV0dXJuIGJlKHcse2NvZGU6cS5FWFRFTlNJT04sbWVzc2FnZToiVGhlIG5vZGUgYmVpbmcgY2hlY2tlZCBkb2VzIG5vdCBleGlzdCJ9KSx3PT09cy50eXBlP3tub2RlOnMscG9zOmF9OnZvaWQgMH19O3JldHVybiBlLnNldChsLCEwKSxyKGwsdil8fHl9O3JldHVybntwcm9wczp7aGFuZGxlS2V5UHJlc3M6KG4scik9PnRoaXMub3B0aW9ucy5rZXlwcmVzcyhyKXx8ITEsaGFuZGxlS2V5RG93bjoobixyKT0+dGhpcy5vcHRpb25zLmtleWRvd24ocil8fCExLGhhbmRsZVRleHRJbnB1dDoobixyLG8saSk9PnRoaXMub3B0aW9ucy50ZXh0SW5wdXQoe2Zyb206cix0bzpvLHRleHQ6aX0pfHwhMSxoYW5kbGVDbGlja09uOihuLHIsbyxpLHMsYSk9PnQodGhpcy5vcHRpb25zLmNsaWNrTWFyayx0aGlzLm9wdGlvbnMuY2xpY2ssbixyLG8saSxzLGEpLGhhbmRsZURvdWJsZUNsaWNrT246KG4scixvLGkscyxhKT0+dCh0aGlzLm9wdGlvbnMuZG91YmxlQ2xpY2tNYXJrLHRoaXMub3B0aW9ucy5kb3VibGVDbGljayxuLHIsbyxpLHMsYSksaGFuZGxlVHJpcGxlQ2xpY2tPbjoobixyLG8saSxzLGEpPT50KHRoaXMub3B0aW9ucy50cmlwbGVDbGlja01hcmssdGhpcy5vcHRpb25zLnRyaXBsZUNsaWNrLG4scixvLGkscyxhKSxoYW5kbGVET01FdmVudHM6e2ZvY3VzOihuLHIpPT50aGlzLm9wdGlvbnMuZm9jdXMocil8fCExLGJsdXI6KG4scik9PnRoaXMub3B0aW9ucy5ibHVyKHIpfHwhMSxtb3VzZWRvd246KG4scik9Pih0aGlzLnN0YXJ0TW91c2VvdmVyKCksdGhpcy5vcHRpb25zLm1vdXNlZG93bihyKXx8ITEpLG1vdXNldXA6KG4scik9Pih0aGlzLmVuZE1vdXNlb3ZlcigpLHRoaXMub3B0aW9ucy5tb3VzZXVwKHIpfHwhMSksbW91c2VsZWF2ZToobixyKT0+KHRoaXMubW91c2VvdmVyPSExLHRoaXMub3B0aW9ucy5tb3VzZWxlYXZlKHIpfHwhMSksbW91c2VlbnRlcjoobixyKT0+KHRoaXMubW91c2VvdmVyPSEwLHRoaXMub3B0aW9ucy5tb3VzZWVudGVyKHIpfHwhMSksa2V5dXA6KG4scik9PnRoaXMub3B0aW9ucy5rZXl1cChyKXx8ITEsbW91c2VvdXQ6dGhpcy5jcmVhdGVNb3VzZUV2ZW50SGFuZGxlcigobixyKT0+e2NvbnN0IG89ey4uLnIsaG92ZXJpbmc6ITF9O3JldHVybiB0aGlzLm9wdGlvbnMuaG92ZXIobixvKXx8ITF9KSxtb3VzZW92ZXI6dGhpcy5jcmVhdGVNb3VzZUV2ZW50SGFuZGxlcigobixyKT0+e2NvbnN0IG89ey4uLnIsaG92ZXJpbmc6ITB9O3JldHVybiB0aGlzLm9wdGlvbnMuaG92ZXIobixvKXx8ITF9KSxjb250ZXh0bWVudTp0aGlzLmNyZWF0ZU1vdXNlRXZlbnRIYW5kbGVyKChuLHIpPT50aGlzLm9wdGlvbnMuY29udGV4dG1lbnUobixyKXx8ITEpLHNjcm9sbDoobixyKT0+dGhpcy5vcHRpb25zLnNjcm9sbChyKXx8ITEsY29weToobixyKT0+dGhpcy5vcHRpb25zLmNvcHkocil8fCExLGN1dDoobixyKT0+dGhpcy5vcHRpb25zLmN1dChyKXx8ITEscGFzdGU6KG4scik9PnRoaXMub3B0aW9ucy5wYXN0ZShyKXx8ITF9fSx2aWV3Om49PntsZXQgcj1uLmVkaXRhYmxlO2NvbnN0IG89dGhpcy5vcHRpb25zO3JldHVybnt1cGRhdGUoaSl7Y29uc3Qgcz1pLmVkaXRhYmxlO3MhPT1yJiYoby5lZGl0YWJsZShzKSxyPXMpfX19fX1pc0ludGVyYWN0aW5nKCl7cmV0dXJuIHRoaXMubW91c2Vkb3duJiZ0aGlzLm1vdXNlb3Zlcn1zdGFydE1vdXNlb3Zlcigpe3RoaXMubW91c2VvdmVyPSEwLCF0aGlzLm1vdXNlZG93biYmKHRoaXMubW91c2Vkb3duPSEwLHRoaXMuc3RvcmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5lbmRNb3VzZW92ZXIoKX0se29uY2U6ITB9KSl9ZW5kTW91c2VvdmVyKCl7dGhpcy5tb3VzZWRvd24mJih0aGlzLm1vdXNlZG93bj0hMSx0aGlzLnN0b3JlLmNvbW1hbmRzLmVtcHR5VXBkYXRlKCkpfX07cyQoW0l0KCldLFdtLnByb3RvdHlwZSwiaXNJbnRlcmFjdGluZyIsMSk7V209cyQoW0plKHtoYW5kbGVyS2V5czpbImJsdXIiLCJmb2N1cyIsIm1vdXNlZG93biIsIm1vdXNldXAiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInRleHRJbnB1dCIsImtleXByZXNzIiwia2V5dXAiLCJrZXlkb3duIiwiY2xpY2siLCJjbGlja01hcmsiLCJkb3VibGVDbGljayIsImRvdWJsZUNsaWNrTWFyayIsInRyaXBsZUNsaWNrIiwidHJpcGxlQ2xpY2tNYXJrIiwiY29udGV4dG1lbnUiLCJob3ZlciIsInNjcm9sbCIsImNvcHkiLCJjdXQiLCJwYXN0ZSIsImVkaXRhYmxlIl0saGFuZGxlcktleU9wdGlvbnM6e2JsdXI6e2Vhcmx5UmV0dXJuVmFsdWU6ITB9LGZvY3VzOntlYXJseVJldHVyblZhbHVlOiEwfSxtb3VzZWRvd246e2Vhcmx5UmV0dXJuVmFsdWU6ITB9LG1vdXNlbGVhdmU6e2Vhcmx5UmV0dXJuVmFsdWU6ITB9LG1vdXNldXA6e2Vhcmx5UmV0dXJuVmFsdWU6ITB9LGNsaWNrOntlYXJseVJldHVyblZhbHVlOiEwfSxkb3VibGVDbGljazp7ZWFybHlSZXR1cm5WYWx1ZTohMH0sdHJpcGxlQ2xpY2s6e2Vhcmx5UmV0dXJuVmFsdWU6ITB9LGhvdmVyOntlYXJseVJldHVyblZhbHVlOiEwfSxjb250ZXh0bWVudTp7ZWFybHlSZXR1cm5WYWx1ZTohMH0sc2Nyb2xsOntlYXJseVJldHVyblZhbHVlOiEwfSxjb3B5OntlYXJseVJldHVyblZhbHVlOiEwfSxjdXQ6e2Vhcmx5UmV0dXJuVmFsdWU6ITB9LHBhc3RlOntlYXJseVJldHVyblZhbHVlOiEwfX0sZGVmYXVsdFByaW9yaXR5OmN0LkhpZ2h9KV0sV20pO2Z1bmN0aW9uIFRZKGUpe2NvbnN0e2hhbmRsZWQ6dCx2aWV3Om4sJHBvczpyLHN0YXRlOm99PWUsaT17Z2V0TWFyazpYTSxtYXJrUmFuZ2VzOltdLHZpZXc6bixzdGF0ZTpvfTtpZih0KXJldHVybiBpO2Zvcihjb25zdHt0eXBlOnN9b2Ygci5tYXJrc0Fjcm9zcyhyKT8/W10pe2NvbnN0IGE9TGkocixzKTthJiZpLm1hcmtSYW5nZXMucHVzaChhKX1yZXR1cm4gaS5nZXRNYXJrPXM9Pntjb25zdCBhPV9lKHMpP28uc2NoZW1hLm1hcmtzW3NdOnM7cmV0dXJuIGJlKGEse2NvZGU6cS5FWFRFTlNJT04sbWVzc2FnZTpgVGhlIG1hcmsgJHtzfSBiZWluZyBjaGVja2VkIGRvZXMgbm90IGV4aXN0IHdpdGhpbiB0aGUgZWRpdG9yIHNjaGVtYS5gfSksaS5tYXJrUmFuZ2VzLmZpbmQobD0+bC5tYXJrLnR5cGU9PT1hKX0saX1jbGFzcyBEdCBleHRlbmRzIEJle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsdCl9bWFwKHQsbil7bGV0IHI9dC5yZXNvbHZlKG4ubWFwKHRoaXMuaGVhZCkpO3JldHVybiBEdC52YWxpZChyKT9uZXcgRHQocik6QmUubmVhcihyKX1jb250ZW50KCl7cmV0dXJuIEouZW1wdHl9ZXEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEdCYmdC5oZWFkPT10aGlzLmhlYWR9dG9KU09OKCl7cmV0dXJue3R5cGU6ImdhcGN1cnNvciIscG9zOnRoaXMuaGVhZH19c3RhdGljIGZyb21KU09OKHQsbil7aWYodHlwZW9mIG4ucG9zIT0ibnVtYmVyIil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBpbnB1dCBmb3IgR2FwQ3Vyc29yLmZyb21KU09OIik7cmV0dXJuIG5ldyBEdCh0LnJlc29sdmUobi5wb3MpKX1nZXRCb29rbWFyaygpe3JldHVybiBuZXcgd3codGhpcy5hbmNob3IpfXN0YXRpYyB2YWxpZCh0KXtsZXQgbj10LnBhcmVudDtpZihuLmlzVGV4dGJsb2NrfHwhUFkodCl8fCFNWSh0KSlyZXR1cm4hMTtsZXQgcj1uLnR5cGUuc3BlYy5hbGxvd0dhcEN1cnNvcjtpZihyIT1udWxsKXJldHVybiByO2xldCBvPW4uY29udGVudE1hdGNoQXQodC5pbmRleCgpKS5kZWZhdWx0VHlwZTtyZXR1cm4gbyYmby5pc1RleHRibG9ja31zdGF0aWMgZmluZEdhcEN1cnNvckZyb20odCxuLHI9ITEpe2U6Zm9yKDs7KXtpZighciYmRHQudmFsaWQodCkpcmV0dXJuIHQ7bGV0IG89dC5wb3MsaT1udWxsO2ZvcihsZXQgcz10LmRlcHRoOztzLS0pe2xldCBhPXQubm9kZShzKTtpZihuPjA/dC5pbmRleEFmdGVyKHMpPGEuY2hpbGRDb3VudDp0LmluZGV4KHMpPjApe2k9YS5jaGlsZChuPjA/dC5pbmRleEFmdGVyKHMpOnQuaW5kZXgocyktMSk7YnJlYWt9ZWxzZSBpZihzPT0wKXJldHVybiBudWxsO28rPW47bGV0IGw9dC5kb2MucmVzb2x2ZShvKTtpZihEdC52YWxpZChsKSlyZXR1cm4gbH1mb3IoOzspe2xldCBzPW4+MD9pLmZpcnN0Q2hpbGQ6aS5sYXN0Q2hpbGQ7aWYoIXMpe2lmKGkuaXNBdG9tJiYhaS5pc1RleHQmJiF3ZS5pc1NlbGVjdGFibGUoaSkpe3Q9dC5kb2MucmVzb2x2ZShvK2kubm9kZVNpemUqbikscj0hMTtjb250aW51ZSBlfWJyZWFrfWk9cyxvKz1uO2xldCBhPXQuZG9jLnJlc29sdmUobyk7aWYoRHQudmFsaWQoYSkpcmV0dXJuIGF9cmV0dXJuIG51bGx9fX1EdC5wcm90b3R5cGUudmlzaWJsZT0hMTtEdC5maW5kRnJvbT1EdC5maW5kR2FwQ3Vyc29yRnJvbTtCZS5qc29uSUQoImdhcGN1cnNvciIsRHQpO2NsYXNzIHd3e2NvbnN0cnVjdG9yKHQpe3RoaXMucG9zPXR9bWFwKHQpe3JldHVybiBuZXcgd3codC5tYXAodGhpcy5wb3MpKX1yZXNvbHZlKHQpe2xldCBuPXQucmVzb2x2ZSh0aGlzLnBvcyk7cmV0dXJuIER0LnZhbGlkKG4pP25ldyBEdChuKTpCZS5uZWFyKG4pfX1mdW5jdGlvbiBQWShlKXtmb3IobGV0IHQ9ZS5kZXB0aDt0Pj0wO3QtLSl7bGV0IG49ZS5pbmRleCh0KSxyPWUubm9kZSh0KTtpZihuPT0wKXtpZihyLnR5cGUuc3BlYy5pc29sYXRpbmcpcmV0dXJuITA7Y29udGludWV9Zm9yKGxldCBvPXIuY2hpbGQobi0xKTs7bz1vLmxhc3RDaGlsZCl7aWYoby5jaGlsZENvdW50PT0wJiYhby5pbmxpbmVDb250ZW50fHxvLmlzQXRvbXx8by50eXBlLnNwZWMuaXNvbGF0aW5nKXJldHVybiEwO2lmKG8uaW5saW5lQ29udGVudClyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gTVkoZSl7Zm9yKGxldCB0PWUuZGVwdGg7dD49MDt0LS0pe2xldCBuPWUuaW5kZXhBZnRlcih0KSxyPWUubm9kZSh0KTtpZihuPT1yLmNoaWxkQ291bnQpe2lmKHIudHlwZS5zcGVjLmlzb2xhdGluZylyZXR1cm4hMDtjb250aW51ZX1mb3IobGV0IG89ci5jaGlsZChuKTs7bz1vLmZpcnN0Q2hpbGQpe2lmKG8uY2hpbGRDb3VudD09MCYmIW8uaW5saW5lQ29udGVudHx8by5pc0F0b218fG8udHlwZS5zcGVjLmlzb2xhdGluZylyZXR1cm4hMDtpZihvLmlubGluZUNvbnRlbnQpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIFJZKCl7cmV0dXJuIG5ldyBIaSh7cHJvcHM6e2RlY29yYXRpb25zOkRZLGNyZWF0ZVNlbGVjdGlvbkJldHdlZW4oZSx0LG4pe3JldHVybiB0LnBvcz09bi5wb3MmJkR0LnZhbGlkKG4pP25ldyBEdChuKTpudWxsfSxoYW5kbGVDbGljazokWSxoYW5kbGVLZXlEb3duOk5ZLGhhbmRsZURPTUV2ZW50czp7YmVmb3JlaW5wdXQ6QVl9fX0pfWNvbnN0IE5ZPVZOKHtBcnJvd0xlZnQ6cXAoImhvcml6IiwtMSksQXJyb3dSaWdodDpxcCgiaG9yaXoiLDEpLEFycm93VXA6cXAoInZlcnQiLC0xKSxBcnJvd0Rvd246cXAoInZlcnQiLDEpfSk7ZnVuY3Rpb24gcXAoZSx0KXtjb25zdCBuPWU9PSJ2ZXJ0Ij90PjA/ImRvd24iOiJ1cCI6dD4wPyJyaWdodCI6ImxlZnQiO3JldHVybiBmdW5jdGlvbihyLG8saSl7bGV0IHM9ci5zZWxlY3Rpb24sYT10PjA/cy4kdG86cy4kZnJvbSxsPXMuZW1wdHk7aWYocyBpbnN0YW5jZW9mIFRlKXtpZighaS5lbmRPZlRleHRibG9jayhuKXx8YS5kZXB0aD09MClyZXR1cm4hMTtsPSExLGE9ci5kb2MucmVzb2x2ZSh0PjA/YS5hZnRlcigpOmEuYmVmb3JlKCkpfWxldCBjPUR0LmZpbmRHYXBDdXJzb3JGcm9tKGEsdCxsKTtyZXR1cm4gYz8obyYmbyhyLnRyLnNldFNlbGVjdGlvbihuZXcgRHQoYykpKSwhMCk6ITF9fWZ1bmN0aW9uICRZKGUsdCxuKXtpZighZXx8IWUuZWRpdGFibGUpcmV0dXJuITE7bGV0IHI9ZS5zdGF0ZS5kb2MucmVzb2x2ZSh0KTtpZighRHQudmFsaWQocikpcmV0dXJuITE7bGV0IG89ZS5wb3NBdENvb3Jkcyh7bGVmdDpuLmNsaWVudFgsdG9wOm4uY2xpZW50WX0pO3JldHVybiBvJiZvLmluc2lkZT4tMSYmd2UuaXNTZWxlY3RhYmxlKGUuc3RhdGUuZG9jLm5vZGVBdChvLmluc2lkZSkpPyExOihlLmRpc3BhdGNoKGUuc3RhdGUudHIuc2V0U2VsZWN0aW9uKG5ldyBEdChyKSkpLCEwKX1mdW5jdGlvbiBBWShlLHQpe2lmKHQuaW5wdXRUeXBlIT0iaW5zZXJ0Q29tcG9zaXRpb25UZXh0Inx8IShlLnN0YXRlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIER0KSlyZXR1cm4hMTtsZXR7JGZyb206bn09ZS5zdGF0ZS5zZWxlY3Rpb24scj1uLnBhcmVudC5jb250ZW50TWF0Y2hBdChuLmluZGV4KCkpLmZpbmRXcmFwcGluZyhlLnN0YXRlLnNjaGVtYS5ub2Rlcy50ZXh0KTtpZighcilyZXR1cm4hMTtsZXQgbz1VLmVtcHR5O2ZvcihsZXQgcz1yLmxlbmd0aC0xO3M+PTA7cy0tKW89VS5mcm9tKHJbc10uY3JlYXRlQW5kRmlsbChudWxsLG8pKTtsZXQgaT1lLnN0YXRlLnRyLnJlcGxhY2Uobi5wb3Msbi5wb3MsbmV3IEoobywwLDApKTtyZXR1cm4gaS5zZXRTZWxlY3Rpb24oVGUubmVhcihpLmRvYy5yZXNvbHZlKG4ucG9zKzEpKSksZS5kaXNwYXRjaChpKSwhMX1mdW5jdGlvbiBEWShlKXtpZighKGUuc2VsZWN0aW9uIGluc3RhbmNlb2YgRHQpKXJldHVybiBudWxsO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0iUHJvc2VNaXJyb3ItZ2FwY3Vyc29yIixldC5jcmVhdGUoZS5kb2MsW0V0LndpZGdldChlLnNlbGVjdGlvbi5oZWFkLHQse2tleToiZ2FwY3Vyc29yIn0pXSl9dmFyIElZPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxMWT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGpZPShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/TFkodCxuKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0ocj9zKHQsbixvKTpzKG8pKXx8byk7cmV0dXJuIHImJm8mJklZKHQsbixvKSxvfSxuYj1jbGFzcyBleHRlbmRzIF90e2dldCBuYW1lKCl7cmV0dXJuImdhcEN1cnNvciJ9Y3JlYXRlRXh0ZXJuYWxQbHVnaW5zKCl7cmV0dXJuW1JZKCldfX07bmI9alkoW0plKHt9KV0sbmIpO3ZhciBLbT0yMDAsdm49ZnVuY3Rpb24oKXt9O3ZuLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPyh0PXZuLmZyb20odCksIXRoaXMubGVuZ3RoJiZ0fHx0Lmxlbmd0aDxLbSYmdGhpcy5sZWFmQXBwZW5kKHQpfHx0aGlzLmxlbmd0aDxLbSYmdC5sZWFmUHJlcGVuZCh0aGlzKXx8dGhpcy5hcHBlbmRJbm5lcih0KSk6dGhpc307dm4ucHJvdG90eXBlLnByZXBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoP3ZuLmZyb20odCkuYXBwZW5kKHRoaXMpOnRoaXN9O3ZuLnByb3RvdHlwZS5hcHBlbmRJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHpZKHRoaXMsdCl9O3ZuLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LG4pe3JldHVybiB0PT09dm9pZCAwJiYodD0wKSxuPT09dm9pZCAwJiYobj10aGlzLmxlbmd0aCksdD49bj92bi5lbXB0eTp0aGlzLnNsaWNlSW5uZXIoTWF0aC5tYXgoMCx0KSxNYXRoLm1pbih0aGlzLmxlbmd0aCxuKSl9O3ZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYoISh0PDB8fHQ+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5nZXRJbm5lcih0KX07dm4ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxuLHIpe249PT12b2lkIDAmJihuPTApLHI9PT12b2lkIDAmJihyPXRoaXMubGVuZ3RoKSxuPD1yP3RoaXMuZm9yRWFjaElubmVyKHQsbixyLDApOnRoaXMuZm9yRWFjaEludmVydGVkSW5uZXIodCxuLHIsMCl9O3ZuLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCxuLHIpe249PT12b2lkIDAmJihuPTApLHI9PT12b2lkIDAmJihyPXRoaXMubGVuZ3RoKTt2YXIgbz1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGkscyl7cmV0dXJuIG8ucHVzaCh0KGkscykpfSxuLHIpLG99O3ZuLmZyb209ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2bj90OnQmJnQubGVuZ3RoP25ldyBhJCh0KTp2bi5lbXB0eX07dmFyIGEkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7ZS5jYWxsKHRoaXMpLHRoaXMudmFsdWVzPXJ9ZSYmKHQuX19wcm90b19fPWUpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQ7dmFyIG49e2xlbmd0aDp7Y29uZmlndXJhYmxlOiEwfSxkZXB0aDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHQucHJvdG90eXBlLmZsYXR0ZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXN9LHQucHJvdG90eXBlLnNsaWNlSW5uZXI9ZnVuY3Rpb24obyxpKXtyZXR1cm4gbz09MCYmaT09dGhpcy5sZW5ndGg/dGhpczpuZXcgdCh0aGlzLnZhbHVlcy5zbGljZShvLGkpKX0sdC5wcm90b3R5cGUuZ2V0SW5uZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHRoaXMudmFsdWVzW29dfSx0LnByb3RvdHlwZS5mb3JFYWNoSW5uZXI9ZnVuY3Rpb24obyxpLHMsYSl7Zm9yKHZhciBsPWk7bDxzO2wrKylpZihvKHRoaXMudmFsdWVzW2xdLGErbCk9PT0hMSlyZXR1cm4hMX0sdC5wcm90b3R5cGUuZm9yRWFjaEludmVydGVkSW5uZXI9ZnVuY3Rpb24obyxpLHMsYSl7Zm9yKHZhciBsPWktMTtsPj1zO2wtLSlpZihvKHRoaXMudmFsdWVzW2xdLGErbCk9PT0hMSlyZXR1cm4hMX0sdC5wcm90b3R5cGUubGVhZkFwcGVuZD1mdW5jdGlvbihvKXtpZih0aGlzLmxlbmd0aCtvLmxlbmd0aDw9S20pcmV0dXJuIG5ldyB0KHRoaXMudmFsdWVzLmNvbmNhdChvLmZsYXR0ZW4oKSkpfSx0LnByb3RvdHlwZS5sZWFmUHJlcGVuZD1mdW5jdGlvbihvKXtpZih0aGlzLmxlbmd0aCtvLmxlbmd0aDw9S20pcmV0dXJuIG5ldyB0KG8uZmxhdHRlbigpLmNvbmNhdCh0aGlzLnZhbHVlcykpfSxuLmxlbmd0aC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RofSxuLmRlcHRoLmdldD1mdW5jdGlvbigpe3JldHVybiAwfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LnByb3RvdHlwZSxuKSx0fSh2bik7dm4uZW1wdHk9bmV3IGEkKFtdKTt2YXIgelk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe2UuY2FsbCh0aGlzKSx0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PXIsdGhpcy5sZW5ndGg9bi5sZW5ndGgrci5sZW5ndGgsdGhpcy5kZXB0aD1NYXRoLm1heChuLmRlcHRoLHIuZGVwdGgpKzF9cmV0dXJuIGUmJih0Ll9fcHJvdG9fXz1lKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLmZsYXR0ZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0LmZsYXR0ZW4oKS5jb25jYXQodGhpcy5yaWdodC5mbGF0dGVuKCkpfSx0LnByb3RvdHlwZS5nZXRJbm5lcj1mdW5jdGlvbihyKXtyZXR1cm4gcjx0aGlzLmxlZnQubGVuZ3RoP3RoaXMubGVmdC5nZXQocik6dGhpcy5yaWdodC5nZXQoci10aGlzLmxlZnQubGVuZ3RoKX0sdC5wcm90b3R5cGUuZm9yRWFjaElubmVyPWZ1bmN0aW9uKHIsbyxpLHMpe3ZhciBhPXRoaXMubGVmdC5sZW5ndGg7aWYobzxhJiZ0aGlzLmxlZnQuZm9yRWFjaElubmVyKHIsbyxNYXRoLm1pbihpLGEpLHMpPT09ITF8fGk+YSYmdGhpcy5yaWdodC5mb3JFYWNoSW5uZXIocixNYXRoLm1heChvLWEsMCksTWF0aC5taW4odGhpcy5sZW5ndGgsaSktYSxzK2EpPT09ITEpcmV0dXJuITF9LHQucHJvdG90eXBlLmZvckVhY2hJbnZlcnRlZElubmVyPWZ1bmN0aW9uKHIsbyxpLHMpe3ZhciBhPXRoaXMubGVmdC5sZW5ndGg7aWYobz5hJiZ0aGlzLnJpZ2h0LmZvckVhY2hJbnZlcnRlZElubmVyKHIsby1hLE1hdGgubWF4KGksYSktYSxzK2EpPT09ITF8fGk8YSYmdGhpcy5sZWZ0LmZvckVhY2hJbnZlcnRlZElubmVyKHIsTWF0aC5taW4obyxhKSxpLHMpPT09ITEpcmV0dXJuITF9LHQucHJvdG90eXBlLnNsaWNlSW5uZXI9ZnVuY3Rpb24ocixvKXtpZihyPT0wJiZvPT10aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgaT10aGlzLmxlZnQubGVuZ3RoO3JldHVybiBvPD1pP3RoaXMubGVmdC5zbGljZShyLG8pOnI+PWk/dGhpcy5yaWdodC5zbGljZShyLWksby1pKTp0aGlzLmxlZnQuc2xpY2UocixpKS5hcHBlbmQodGhpcy5yaWdodC5zbGljZSgwLG8taSkpfSx0LnByb3RvdHlwZS5sZWFmQXBwZW5kPWZ1bmN0aW9uKHIpe3ZhciBvPXRoaXMucmlnaHQubGVhZkFwcGVuZChyKTtpZihvKXJldHVybiBuZXcgdCh0aGlzLmxlZnQsbyl9LHQucHJvdG90eXBlLmxlYWZQcmVwZW5kPWZ1bmN0aW9uKHIpe3ZhciBvPXRoaXMubGVmdC5sZWFmUHJlcGVuZChyKTtpZihvKXJldHVybiBuZXcgdChvLHRoaXMucmlnaHQpfSx0LnByb3RvdHlwZS5hcHBlbmRJbm5lcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5sZWZ0LmRlcHRoPj1NYXRoLm1heCh0aGlzLnJpZ2h0LmRlcHRoLHIuZGVwdGgpKzE/bmV3IHQodGhpcy5sZWZ0LG5ldyB0KHRoaXMucmlnaHQscikpOm5ldyB0KHRoaXMscil9LHR9KHZuKTtjb25zdCBGWT01MDA7Y2xhc3Mgd297Y29uc3RydWN0b3IodCxuKXt0aGlzLml0ZW1zPXQsdGhpcy5ldmVudENvdW50PW59cG9wRXZlbnQodCxuKXtpZih0aGlzLmV2ZW50Q291bnQ9PTApcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5pdGVtcy5sZW5ndGg7Zm9yKDs7ci0tKWlmKHRoaXMuaXRlbXMuZ2V0KHItMSkuc2VsZWN0aW9uKXstLXI7YnJlYWt9bGV0IG8saTtuJiYobz10aGlzLnJlbWFwcGluZyhyLHRoaXMuaXRlbXMubGVuZ3RoKSxpPW8ubWFwcy5sZW5ndGgpO2xldCBzPXQudHIsYSxsLGM9W10sdT1bXTtyZXR1cm4gdGhpcy5pdGVtcy5mb3JFYWNoKChkLGYpPT57aWYoIWQuc3RlcCl7b3x8KG89dGhpcy5yZW1hcHBpbmcocixmKzEpLGk9by5tYXBzLmxlbmd0aCksaS0tLHUucHVzaChkKTtyZXR1cm59aWYobyl7dS5wdXNoKG5ldyBVbyhkLm1hcCkpO2xldCBwPWQuc3RlcC5tYXAoby5zbGljZShpKSksbTtwJiZzLm1heWJlU3RlcChwKS5kb2MmJihtPXMubWFwcGluZy5tYXBzW3MubWFwcGluZy5tYXBzLmxlbmd0aC0xXSxjLnB1c2gobmV3IFVvKG0sdm9pZCAwLHZvaWQgMCxjLmxlbmd0aCt1Lmxlbmd0aCkpKSxpLS0sbSYmby5hcHBlbmRNYXAobSxpKX1lbHNlIHMubWF5YmVTdGVwKGQuc3RlcCk7aWYoZC5zZWxlY3Rpb24pcmV0dXJuIGE9bz9kLnNlbGVjdGlvbi5tYXAoby5zbGljZShpKSk6ZC5zZWxlY3Rpb24sbD1uZXcgd28odGhpcy5pdGVtcy5zbGljZSgwLHIpLmFwcGVuZCh1LnJldmVyc2UoKS5jb25jYXQoYykpLHRoaXMuZXZlbnRDb3VudC0xKSwhMX0sdGhpcy5pdGVtcy5sZW5ndGgsMCkse3JlbWFpbmluZzpsLHRyYW5zZm9ybTpzLHNlbGVjdGlvbjphfX1hZGRUcmFuc2Zvcm0odCxuLHIsbyl7bGV0IGk9W10scz10aGlzLmV2ZW50Q291bnQsYT10aGlzLml0ZW1zLGw9IW8mJmEubGVuZ3RoP2EuZ2V0KGEubGVuZ3RoLTEpOm51bGw7Zm9yKGxldCB1PTA7dTx0LnN0ZXBzLmxlbmd0aDt1Kyspe2xldCBkPXQuc3RlcHNbdV0uaW52ZXJ0KHQuZG9jc1t1XSksZj1uZXcgVW8odC5tYXBwaW5nLm1hcHNbdV0sZCxuKSxwOyhwPWwmJmwubWVyZ2UoZikpJiYoZj1wLHU/aS5wb3AoKTphPWEuc2xpY2UoMCxhLmxlbmd0aC0xKSksaS5wdXNoKGYpLG4mJihzKyssbj12b2lkIDApLG98fChsPWYpfWxldCBjPXMtci5kZXB0aDtyZXR1cm4gYz5VWSYmKGE9QlkoYSxjKSxzLT1jKSxuZXcgd28oYS5hcHBlbmQoaSkscyl9cmVtYXBwaW5nKHQsbil7bGV0IHI9bmV3IF9jO3JldHVybiB0aGlzLml0ZW1zLmZvckVhY2goKG8saSk9PntsZXQgcz1vLm1pcnJvck9mZnNldCE9bnVsbCYmaS1vLm1pcnJvck9mZnNldD49dD9yLm1hcHMubGVuZ3RoLW8ubWlycm9yT2Zmc2V0OnZvaWQgMDtyLmFwcGVuZE1hcChvLm1hcCxzKX0sdCxuKSxyfWFkZE1hcHModCl7cmV0dXJuIHRoaXMuZXZlbnRDb3VudD09MD90aGlzOm5ldyB3byh0aGlzLml0ZW1zLmFwcGVuZCh0Lm1hcChuPT5uZXcgVW8obikpKSx0aGlzLmV2ZW50Q291bnQpfXJlYmFzZWQodCxuKXtpZighdGhpcy5ldmVudENvdW50KXJldHVybiB0aGlzO2xldCByPVtdLG89TWF0aC5tYXgoMCx0aGlzLml0ZW1zLmxlbmd0aC1uKSxpPXQubWFwcGluZyxzPXQuc3RlcHMubGVuZ3RoLGE9dGhpcy5ldmVudENvdW50O3RoaXMuaXRlbXMuZm9yRWFjaChmPT57Zi5zZWxlY3Rpb24mJmEtLX0sbyk7bGV0IGw9bjt0aGlzLml0ZW1zLmZvckVhY2goZj0+e2xldCBwPWkuZ2V0TWlycm9yKC0tbCk7aWYocD09bnVsbClyZXR1cm47cz1NYXRoLm1pbihzLHApO2xldCBtPWkubWFwc1twXTtpZihmLnN0ZXApe2xldCBnPXQuc3RlcHNbcF0uaW52ZXJ0KHQuZG9jc1twXSkseT1mLnNlbGVjdGlvbiYmZi5zZWxlY3Rpb24ubWFwKGkuc2xpY2UobCsxLHApKTt5JiZhKyssci5wdXNoKG5ldyBVbyhtLGcseSkpfWVsc2Ugci5wdXNoKG5ldyBVbyhtKSl9LG8pO2xldCBjPVtdO2ZvcihsZXQgZj1uO2Y8cztmKyspYy5wdXNoKG5ldyBVbyhpLm1hcHNbZl0pKTtsZXQgdT10aGlzLml0ZW1zLnNsaWNlKDAsbykuYXBwZW5kKGMpLmFwcGVuZChyKSxkPW5ldyB3byh1LGEpO3JldHVybiBkLmVtcHR5SXRlbUNvdW50KCk+RlkmJihkPWQuY29tcHJlc3ModGhpcy5pdGVtcy5sZW5ndGgtci5sZW5ndGgpKSxkfWVtcHR5SXRlbUNvdW50KCl7bGV0IHQ9MDtyZXR1cm4gdGhpcy5pdGVtcy5mb3JFYWNoKG49PntuLnN0ZXB8fHQrK30pLHR9Y29tcHJlc3ModD10aGlzLml0ZW1zLmxlbmd0aCl7bGV0IG49dGhpcy5yZW1hcHBpbmcoMCx0KSxyPW4ubWFwcy5sZW5ndGgsbz1bXSxpPTA7cmV0dXJuIHRoaXMuaXRlbXMuZm9yRWFjaCgocyxhKT0+e2lmKGE+PXQpby5wdXNoKHMpLHMuc2VsZWN0aW9uJiZpKys7ZWxzZSBpZihzLnN0ZXApe2xldCBsPXMuc3RlcC5tYXAobi5zbGljZShyKSksYz1sJiZsLmdldE1hcCgpO2lmKHItLSxjJiZuLmFwcGVuZE1hcChjLHIpLGwpe2xldCB1PXMuc2VsZWN0aW9uJiZzLnNlbGVjdGlvbi5tYXAobi5zbGljZShyKSk7dSYmaSsrO2xldCBkPW5ldyBVbyhjLmludmVydCgpLGwsdSksZixwPW8ubGVuZ3RoLTE7KGY9by5sZW5ndGgmJm9bcF0ubWVyZ2UoZCkpP29bcF09ZjpvLnB1c2goZCl9fWVsc2Ugcy5tYXAmJnItLX0sdGhpcy5pdGVtcy5sZW5ndGgsMCksbmV3IHdvKHZuLmZyb20oby5yZXZlcnNlKCkpLGkpfX13by5lbXB0eT1uZXcgd28odm4uZW1wdHksMCk7ZnVuY3Rpb24gQlkoZSx0KXtsZXQgbjtyZXR1cm4gZS5mb3JFYWNoKChyLG8pPT57aWYoci5zZWxlY3Rpb24mJnQtLT09MClyZXR1cm4gbj1vLCExfSksZS5zbGljZShuKX1jbGFzcyBVb3tjb25zdHJ1Y3Rvcih0LG4scixvKXt0aGlzLm1hcD10LHRoaXMuc3RlcD1uLHRoaXMuc2VsZWN0aW9uPXIsdGhpcy5taXJyb3JPZmZzZXQ9b31tZXJnZSh0KXtpZih0aGlzLnN0ZXAmJnQuc3RlcCYmIXQuc2VsZWN0aW9uKXtsZXQgbj10LnN0ZXAubWVyZ2UodGhpcy5zdGVwKTtpZihuKXJldHVybiBuZXcgVW8obi5nZXRNYXAoKS5pbnZlcnQoKSxuLHRoaXMuc2VsZWN0aW9uKX19fWNsYXNzIGJze2NvbnN0cnVjdG9yKHQsbixyLG8saSl7dGhpcy5kb25lPXQsdGhpcy51bmRvbmU9bix0aGlzLnByZXZSYW5nZXM9cix0aGlzLnByZXZUaW1lPW8sdGhpcy5wcmV2Q29tcG9zaXRpb249aX19Y29uc3QgVVk9MjA7ZnVuY3Rpb24gVlkoZSx0LG4scil7bGV0IG89bi5nZXRNZXRhKFhvKSxpO2lmKG8pcmV0dXJuIG8uaGlzdG9yeVN0YXRlO24uZ2V0TWV0YShXWSkmJihlPW5ldyBicyhlLmRvbmUsZS51bmRvbmUsbnVsbCwwLC0xKSk7bGV0IHM9bi5nZXRNZXRhKCJhcHBlbmRlZFRyYW5zYWN0aW9uIik7aWYobi5zdGVwcy5sZW5ndGg9PTApcmV0dXJuIGU7aWYocyYmcy5nZXRNZXRhKFhvKSlyZXR1cm4gcy5nZXRNZXRhKFhvKS5yZWRvP25ldyBicyhlLmRvbmUuYWRkVHJhbnNmb3JtKG4sdm9pZCAwLHIsT2godCkpLGUudW5kb25lLHNDKG4ubWFwcGluZy5tYXBzW24uc3RlcHMubGVuZ3RoLTFdKSxlLnByZXZUaW1lLGUucHJldkNvbXBvc2l0aW9uKTpuZXcgYnMoZS5kb25lLGUudW5kb25lLmFkZFRyYW5zZm9ybShuLHZvaWQgMCxyLE9oKHQpKSxudWxsLGUucHJldlRpbWUsZS5wcmV2Q29tcG9zaXRpb24pO2lmKG4uZ2V0TWV0YSgiYWRkVG9IaXN0b3J5IikhPT0hMSYmIShzJiZzLmdldE1ldGEoImFkZFRvSGlzdG9yeSIpPT09ITEpKXtsZXQgYT1uLmdldE1ldGEoImNvbXBvc2l0aW9uIiksbD1lLnByZXZUaW1lPT0wfHwhcyYmZS5wcmV2Q29tcG9zaXRpb24hPWEmJihlLnByZXZUaW1lPChuLnRpbWV8fDApLXIubmV3R3JvdXBEZWxheXx8IUhZKG4sZS5wcmV2UmFuZ2VzKSksYz1zP3p5KGUucHJldlJhbmdlcyxuLm1hcHBpbmcpOnNDKG4ubWFwcGluZy5tYXBzW24uc3RlcHMubGVuZ3RoLTFdKTtyZXR1cm4gbmV3IGJzKGUuZG9uZS5hZGRUcmFuc2Zvcm0obixsP3Quc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk6dm9pZCAwLHIsT2godCkpLHdvLmVtcHR5LGMsbi50aW1lLGE/P2UucHJldkNvbXBvc2l0aW9uKX1lbHNlIHJldHVybihpPW4uZ2V0TWV0YSgicmViYXNlZCIpKT9uZXcgYnMoZS5kb25lLnJlYmFzZWQobixpKSxlLnVuZG9uZS5yZWJhc2VkKG4saSksenkoZS5wcmV2UmFuZ2VzLG4ubWFwcGluZyksZS5wcmV2VGltZSxlLnByZXZDb21wb3NpdGlvbik6bmV3IGJzKGUuZG9uZS5hZGRNYXBzKG4ubWFwcGluZy5tYXBzKSxlLnVuZG9uZS5hZGRNYXBzKG4ubWFwcGluZy5tYXBzKSx6eShlLnByZXZSYW5nZXMsbi5tYXBwaW5nKSxlLnByZXZUaW1lLGUucHJldkNvbXBvc2l0aW9uKX1mdW5jdGlvbiBIWShlLHQpe2lmKCF0KXJldHVybiExO2lmKCFlLmRvY0NoYW5nZWQpcmV0dXJuITA7bGV0IG49ITE7cmV0dXJuIGUubWFwcGluZy5tYXBzWzBdLmZvckVhY2goKHIsbyk9Pntmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTIpcjw9dFtpKzFdJiZvPj10W2ldJiYobj0hMCl9KSxufWZ1bmN0aW9uIHNDKGUpe2xldCB0PVtdO3JldHVybiBlLmZvckVhY2goKG4scixvLGkpPT50LnB1c2gobyxpKSksdH1mdW5jdGlvbiB6eShlLHQpe2lmKCFlKXJldHVybiBudWxsO2xldCBuPVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cis9Mil7bGV0IG89dC5tYXAoZVtyXSwxKSxpPXQubWFwKGVbcisxXSwtMSk7bzw9aSYmbi5wdXNoKG8saSl9cmV0dXJuIG59ZnVuY3Rpb24gbCQoZSx0LG4scil7bGV0IG89T2godCksaT1Yby5nZXQodCkuc3BlYy5jb25maWcscz0ocj9lLnVuZG9uZTplLmRvbmUpLnBvcEV2ZW50KHQsbyk7aWYoIXMpcmV0dXJuO2xldCBhPXMuc2VsZWN0aW9uLnJlc29sdmUocy50cmFuc2Zvcm0uZG9jKSxsPShyP2UuZG9uZTplLnVuZG9uZSkuYWRkVHJhbnNmb3JtKHMudHJhbnNmb3JtLHQuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCksaSxvKSxjPW5ldyBicyhyP2w6cy5yZW1haW5pbmcscj9zLnJlbWFpbmluZzpsLG51bGwsMCwtMSk7bihzLnRyYW5zZm9ybS5zZXRTZWxlY3Rpb24oYSkuc2V0TWV0YShYbyx7cmVkbzpyLGhpc3RvcnlTdGF0ZTpjfSkuc2Nyb2xsSW50b1ZpZXcoKSl9bGV0IEZ5PSExLGFDPW51bGw7ZnVuY3Rpb24gT2goZSl7bGV0IHQ9ZS5wbHVnaW5zO2lmKGFDIT10KXtGeT0hMSxhQz10O2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uc3BlYy5oaXN0b3J5UHJlc2VydmVJdGVtcyl7Rnk9ITA7YnJlYWt9fXJldHVybiBGeX1jb25zdCBYbz1uZXcgY3UoImhpc3RvcnkiKSxXWT1uZXcgY3UoImNsb3NlSGlzdG9yeSIpO2Z1bmN0aW9uIEtZKGU9e30pe3JldHVybiBlPXtkZXB0aDplLmRlcHRofHwxMDAsbmV3R3JvdXBEZWxheTplLm5ld0dyb3VwRGVsYXl8fDUwMH0sbmV3IEhpKHtrZXk6WG8sc3RhdGU6e2luaXQoKXtyZXR1cm4gbmV3IGJzKHdvLmVtcHR5LHdvLmVtcHR5LG51bGwsMCwtMSl9LGFwcGx5KHQsbixyKXtyZXR1cm4gVlkobixyLHQsZSl9fSxjb25maWc6ZSxwcm9wczp7aGFuZGxlRE9NRXZlbnRzOntiZWZvcmVpbnB1dCh0LG4pe2xldCByPW4uaW5wdXRUeXBlLG89cj09Imhpc3RvcnlVbmRvIj9UaDpyPT0iaGlzdG9yeVJlZG8iP2NkOm51bGw7cmV0dXJuIG8/KG4ucHJldmVudERlZmF1bHQoKSxvKHQuc3RhdGUsdC5kaXNwYXRjaCkpOiExfX19fSl9Y29uc3QgVGg9KGUsdCk9PntsZXQgbj1Yby5nZXRTdGF0ZShlKTtyZXR1cm4hbnx8bi5kb25lLmV2ZW50Q291bnQ9PTA/ITE6KHQmJmwkKG4sZSx0LCExKSwhMCl9LGNkPShlLHQpPT57bGV0IG49WG8uZ2V0U3RhdGUoZSk7cmV0dXJuIW58fG4udW5kb25lLmV2ZW50Q291bnQ9PTA/ITE6KHQmJmwkKG4sZSx0LCEwKSwhMCl9O2Z1bmN0aW9uIHJiKGUpe2xldCB0PVhvLmdldFN0YXRlKGUpO3JldHVybiB0P3QuZG9uZS5ldmVudENvdW50OjB9ZnVuY3Rpb24gcVkoZSl7bGV0IHQ9WG8uZ2V0U3RhdGUoZSk7cmV0dXJuIHQ/dC51bmRvbmUuZXZlbnRDb3VudDowfXZhciBHWT1PYmplY3QuZGVmaW5lUHJvcGVydHksWVk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixTbD0oZSx0LG4scik9Pntmb3IodmFyIG89cj4xP3ZvaWQgMDpyP1lZKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiZHWSh0LG4sbyksb30scmk9Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy53cmFwTWV0aG9kPShlLHQpPT4oe3N0YXRlOm4sZGlzcGF0Y2g6cix2aWV3Om99KT0+e2NvbnN0e2dldFN0YXRlOmksZ2V0RGlzcGF0Y2g6c309dGhpcy5vcHRpb25zLGE9cHQoaSk/aSgpOm4sbD1wdChzKSYmcj9zKCk6cixjPWUoYSxsLG8pO3JldHVybiB0PT1udWxsfHx0KGMpLGN9fWdldCBuYW1lKCl7cmV0dXJuImhpc3RvcnkifWNyZWF0ZUtleW1hcCgpe3JldHVybnsiTW9kLXkiOnhvLmlzTWFjPygpPT4hMTp0aGlzLndyYXBNZXRob2QoY2QsdGhpcy5vcHRpb25zLm9uUmVkbyksIk1vZC16Ijp0aGlzLndyYXBNZXRob2QoVGgsdGhpcy5vcHRpb25zLm9uVW5kbyksIlNoaWZ0LU1vZC16Ijp0aGlzLndyYXBNZXRob2QoY2QsdGhpcy5vcHRpb25zLm9uUmVkbyl9fXVuZG9TaG9ydGN1dChlKXtyZXR1cm4gdGhpcy53cmFwTWV0aG9kKFRoLHRoaXMub3B0aW9ucy5vblVuZG8pKGUpfXJlZG9TaG9ydGN1dChlKXtyZXR1cm4gdGhpcy53cmFwTWV0aG9kKGNkLHRoaXMub3B0aW9ucy5vblJlZG8pKGUpfWNyZWF0ZUV4dGVybmFsUGx1Z2lucygpe2NvbnN0e2RlcHRoOmUsbmV3R3JvdXBEZWxheTp0fT10aGlzLm9wdGlvbnM7cmV0dXJuW0tZKHtkZXB0aDplLG5ld0dyb3VwRGVsYXk6dH0pXX11bmRvKCl7cmV0dXJuIEhfKHRoaXMud3JhcE1ldGhvZChUaCx0aGlzLm9wdGlvbnMub25VbmRvKSl9cmVkbygpe3JldHVybiBIXyh0aGlzLndyYXBNZXRob2QoY2QsdGhpcy5vcHRpb25zLm9uUmVkbykpfXVuZG9EZXB0aChlPXRoaXMuc3RvcmUuZ2V0U3RhdGUoKSl7cmV0dXJuIHJiKGUpfXJlZG9EZXB0aChlPXRoaXMuc3RvcmUuZ2V0U3RhdGUoKSl7cmV0dXJuIHFZKGUpfX07U2woW0xyKHtzaG9ydGN1dDpZLlVuZG8sY29tbWFuZDoidW5kbyJ9KV0scmkucHJvdG90eXBlLCJ1bmRvU2hvcnRjdXQiLDEpO1NsKFtMcih7c2hvcnRjdXQ6WS5SZWRvLGNvbW1hbmQ6InJlZG8ifSldLHJpLnByb3RvdHlwZSwicmVkb1Nob3J0Y3V0IiwxKTtTbChbZGUoe2Rpc2FibGVDaGFpbmluZzohMCxkZXNjcmlwdGlvbjooe3Q6ZX0pPT5lKFJtLlVORE9fREVTQ1JJUFRJT04pLGxhYmVsOih7dDplfSk9PmUoUm0uVU5ET19MQUJFTCksaWNvbjoiYXJyb3dHb0JhY2tGaWxsIn0pXSxyaS5wcm90b3R5cGUsInVuZG8iLDEpO1NsKFtkZSh7ZGlzYWJsZUNoYWluaW5nOiEwLGRlc2NyaXB0aW9uOih7dDplfSk9PmUoUm0uUkVET19ERVNDUklQVElPTiksbGFiZWw6KHt0OmV9KT0+ZShSbS5SRURPX0xBQkVMKSxpY29uOiJhcnJvd0dvRm9yd2FyZEZpbGwifSldLHJpLnByb3RvdHlwZSwicmVkbyIsMSk7U2woW0l0KCldLHJpLnByb3RvdHlwZSwidW5kb0RlcHRoIiwxKTtTbChbSXQoKV0scmkucHJvdG90eXBlLCJyZWRvRGVwdGgiLDEpO3JpPVNsKFtKZSh7ZGVmYXVsdE9wdGlvbnM6e2RlcHRoOjEwMCxuZXdHcm91cERlbGF5OjUwMCxnZXREaXNwYXRjaDp2b2lkIDAsZ2V0U3RhdGU6dm9pZCAwfSxzdGF0aWNLZXlzOlsiZGVwdGgiLCJuZXdHcm91cERlbGF5Il0saGFuZGxlcktleXM6WyJvblVuZG8iLCJvblJlZG8iXX0pXSxyaSk7dmFyIFhZPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxaWT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHV2PShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/WlkodCxuKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0ocj9zKHQsbixvKTpzKG8pKXx8byk7cmV0dXJuIHImJm8mJlhZKHQsbixvKSxvfSxKWT17aWNvbjoicGFyYWdyYXBoIixsYWJlbDooe3Q6ZX0pPT5lKE5tLklOU0VSVF9MQUJFTCksZGVzY3JpcHRpb246KHt0OmV9KT0+ZShObS5JTlNFUlRfREVTQ1JJUFRJT04pfSxRWT17aWNvbjoicGFyYWdyYXBoIixsYWJlbDooe3Q6ZX0pPT5lKE5tLkNPTlZFUlRfTEFCRUwpLGRlc2NyaXB0aW9uOih7dDplfSk9PmUoTm0uQ09OVkVSVF9ERVNDUklQVElPTil9LHVsPWNsYXNzIGV4dGVuZHMgb297Z2V0IG5hbWUoKXtyZXR1cm4icGFyYWdyYXBoIn1jcmVhdGVUYWdzKCl7cmV0dXJuW0xlLkxhc3ROb2RlQ29tcGF0aWJsZSxMZS5UZXh0QmxvY2ssTGUuQmxvY2ssTGUuRm9ybWF0dGluZ05vZGVdfWNyZWF0ZU5vZGVTcGVjKGUsdCl7cmV0dXJue2NvbnRlbnQ6ImlubGluZSoiLGRyYWdnYWJsZTohMSwuLi50LGF0dHJzOnsuLi5lLmRlZmF1bHRzKCl9LHBhcnNlRE9NOlt7dGFnOiJwIixnZXRBdHRyczpuPT4oey4uLmUucGFyc2Uobil9KX0sLi4udC5wYXJzZURPTT8/W11dLHRvRE9NOm49PlsicCIsZS5kb20obiksMF19fWNvbnZlcnRQYXJhZ3JhcGgoZT17fSl7Y29uc3R7YXR0cnM6dCxzZWxlY3Rpb246bixwcmVzZXJ2ZUF0dHJzOnJ9PWU7cmV0dXJuIHRoaXMuc3RvcmUuY29tbWFuZHMuc2V0QmxvY2tOb2RlVHlwZS5vcmlnaW5hbCh0aGlzLnR5cGUsdCxuLHIpfWluc2VydFBhcmFncmFwaChlLHQ9e30pe2NvbnN0e3NlbGVjdGlvbjpuLGF0dHJzOnJ9PXQ7cmV0dXJuIHRoaXMuc3RvcmUuY29tbWFuZHMuaW5zZXJ0Tm9kZS5vcmlnaW5hbCh0aGlzLnR5cGUse2NvbnRlbnQ6ZSxzZWxlY3Rpb246bixhdHRyczpyfSl9c2hvcnRjdXQoZSl7cmV0dXJuIHRoaXMuY29udmVydFBhcmFncmFwaCgpKGUpfX07dXYoW2RlKFFZKV0sdWwucHJvdG90eXBlLCJjb252ZXJ0UGFyYWdyYXBoIiwxKTt1dihbZGUoSlkpXSx1bC5wcm90b3R5cGUsImluc2VydFBhcmFncmFwaCIsMSk7dXYoW0xyKHtzaG9ydGN1dDpZLlBhcmFncmFwaCxjb21tYW5kOiJjb252ZXJ0UGFyYWdyYXBoIn0pXSx1bC5wcm90b3R5cGUsInNob3J0Y3V0IiwxKTt1bD11dihbSmUoe2RlZmF1bHRQcmlvcml0eTpjdC5NZWRpdW19KV0sdWwpO2Z1bmN0aW9uIF9pKGUsdCxuKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSxuKSx0KX1jbGFzcyBlWCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKGBGYWlsZWQgdG8gcGFyc2UgY29sb3I6ICIke3R9ImApfX12YXIgdWQ9ZVg7ZnVuY3Rpb24gU3coZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyB1ZChlKTtpZihlLnRyaW0oKS50b0xvd2VyQ2FzZSgpPT09InRyYW5zcGFyZW50IilyZXR1cm5bMCwwLDAsMF07bGV0IHQ9ZS50cmltKCk7dD1sWC50ZXN0KGUpP3JYKGUpOmU7Y29uc3Qgbj1vWC5leGVjKHQpO2lmKG4pe2NvbnN0IHM9QXJyYXkuZnJvbShuKS5zbGljZSgxKTtyZXR1cm5bLi4ucy5zbGljZSgwLDMpLm1hcChhPT5wYXJzZUludChNZihhLDIpLDE2KSkscGFyc2VJbnQoTWYoc1szXXx8ImYiLDIpLDE2KS8yNTVdfWNvbnN0IHI9aVguZXhlYyh0KTtpZihyKXtjb25zdCBzPUFycmF5LmZyb20ocikuc2xpY2UoMSk7cmV0dXJuWy4uLnMuc2xpY2UoMCwzKS5tYXAoYT0+cGFyc2VJbnQoYSwxNikpLHBhcnNlSW50KHNbM118fCJmZiIsMTYpLzI1NV19Y29uc3Qgbz1zWC5leGVjKHQpO2lmKG8pe2NvbnN0IHM9QXJyYXkuZnJvbShvKS5zbGljZSgxKTtyZXR1cm5bLi4ucy5zbGljZSgwLDMpLm1hcChhPT5wYXJzZUludChhLDEwKSkscGFyc2VGbG9hdChzWzNdfHwiMSIpXX1jb25zdCBpPWFYLmV4ZWModCk7aWYoaSl7Y29uc3RbcyxhLGwsY109QXJyYXkuZnJvbShpKS5zbGljZSgxKS5tYXAocGFyc2VGbG9hdCk7aWYoX2koMCwxMDAsYSkhPT1hKXRocm93IG5ldyB1ZChlKTtpZihfaSgwLDEwMCxsKSE9PWwpdGhyb3cgbmV3IHVkKGUpO3JldHVyblsuLi5jWChzLGEsbCksTnVtYmVyLmlzTmFOKGMpPzE6Y119dGhyb3cgbmV3IHVkKGUpfWZ1bmN0aW9uIHRYKGUpe2xldCB0PTUzODEsbj1lLmxlbmd0aDtmb3IoO247KXQ9dCozM15lLmNoYXJDb2RlQXQoLS1uKTtyZXR1cm4odD4+PjApJTIzNDF9Y29uc3QgbEM9ZT0+cGFyc2VJbnQoZS5yZXBsYWNlKC9fL2csIiIpLDM2KSxuWD0iMXEyOWVoaGIgMW4wOXNnazcgMWtsMWVrZl8gX3lsNHpzbm8gMTZ6OWVpdjMgMXAyOWxocDggX2JkOXpnMDQgMTd1MF9fX18gX2l3OXpoZTUgX3RvNzNfX18gX3I0NWUzMWUgXzdsNmcwMTYgX2poOG91aXYgX3puM3FiYTggMWp5NHpzaHMgMTF1ODdrMHUgMXJvOXl2eW8gMWFqM3hhZWwgMWd6OXpqejAgXzN3OGw0eG8gMWJmMWVrZl8gX2tlM3ZfX18gXzRycmtiX18gMTNqNzc2eXogXzY0Nm1iaGwgX25yanI0X18gX2xlNm1iaGwgMW4zN2Voa2IgX203NWY5MW4gX3FqM2J6ZnogMTkzOXl5Z3cgMTFpNXo2eDggXzFrNWY4eHMgMTUwOTQ0MW0gMTV0NWx3Z2YgX2FlMnRoMW4gX3RnMXVnY3YgMWxwMXVnY3YgMTZlMTR1cF8gX2g1NXJ3N24gX255OXlhdm4gXzdhMTF4Yl8gMWloNDQyZzkgX3B2NDQyZzkgMW12MTZ4b2YgMTRlNnk3dHUgMW9vOXprZHMgMTdkMWNpc2kgXzR2OXk3MGYgX3k5OG04a2MgMTAxOXBxMHYgMTJvOXpkYTggXzM0OGo0ZjQgMWV0NTBpMm8gXzhlcGE4X18gX3RzNnNlbmogMW8zNTBpMm8gMW1pOWVpdW8gMTI1OXlycDAgMWxuODBnbncgXzYzMnhjb3kgMWNuOXpsZGMgX2YyOWVkdTQgMW40OTBjOHEgXzlmOXppZXQgMWI5NHZrNzQgX200OXprY3QgMWt6NnM3M2EgMWV1OWR0b2cgX3E1OHMxcnogMWR5OXNqaXEgX191ODlqbzMgX2FqNW5rd2cgX2xkODlqbzMgMTNoOXo2d3ggX3FhOXoyaWkgX2wxMTl4Z3EgX2JzNWFyanUgMWhqNG53azkgMXF0NG53azkgMWdlNndhdTYgMTRqOXpsY3cgMTFwMWVkY18gX21zMXpjeGUgXzQzOXNoazYgX2p0OXk3MGYgXzc1NHpzb3cgMWxhNDBlanUgX29xNXBfX18gX3gyNzlxa3ogMWZhNXIzcnYgX3lkMmQ5aXAgXzQyNHRja3UgXzh5MWRpMl8gX3ppMnVhYncgX3l5N3JuOWggMTJ5ejk4MF8gX18zOWxqcDYgMWI1OXpnMHggX24zOXpmenAgMWZ5OXplc3QgX2IzM2tfX18gX2hwOXdxOTIgMWlsNTBoejQgX2lvNDcydWIgX2xqOXozZW8gMTl6OXlrZzAgXzh0OGl1M2EgMTJiOWJsNGEgMWFrNXl3MG8gXzg5NnY0a3UgX3RiOGs4bHYgX3M1OXppNnQgX2MwOXplMHAgMWxnODBvcW4gMWlkOXo4d2IgXzIzOG5iYTUgMWtxNndnZGkgXzE1NHpzc2cgX3RuM3prNDkgX2RhOXk2dGMgMXNnN2N2NGYgX3IxMmp2dHQgMWdxNWZta3ogMWNzOXJ2Y2kgX2xwOWpuMWMgX3h3MXRkbmIgMTNmOXpqZTYgMTZmNjk3M2ggX3ZvN2lyNDAgX2J0NWFyamYgX3JjNDVlNHQgX2hyNGUxMDAgMTB2NGUxMDAgX2hjOXprZTIgX3c5MWVndl8gX3NqMnIxa2sgMTNjODd5eDggX3ZxcGRzX18gX25pOGdnazggX3RqOXlxZmIgMWlhMmo0cjQgXzd4OWIxMHUgMWZjOWxkNGogMWVxOXpsZHIgXzVqOWxocHggX2V6OXpsNm8gX21kNjFmem0iLnNwbGl0KCIgIikucmVkdWNlKChlLHQpPT57Y29uc3Qgbj1sQyh0LnN1YnN0cmluZygwLDMpKSxyPWxDKHQuc3Vic3RyaW5nKDMpKS50b1N0cmluZygxNik7bGV0IG89IiI7Zm9yKGxldCBpPTA7aTw2LXIubGVuZ3RoO2krKylvKz0iMCI7cmV0dXJuIGVbbl09YCR7b30ke3J9YCxlfSx7fSk7ZnVuY3Rpb24gclgoZSl7Y29uc3QgdD1lLnRvTG93ZXJDYXNlKCkudHJpbSgpLG49blhbdFgodCldO2lmKCFuKXRocm93IG5ldyB1ZChlKTtyZXR1cm5gIyR7bn1gfWNvbnN0IE1mPShlLHQpPT5BcnJheS5mcm9tKEFycmF5KHQpKS5tYXAoKCk9PmUpLmpvaW4oIiIpLG9YPW5ldyBSZWdFeHAoYF4jJHtNZigiKFthLWYwLTldKSIsMyl9KFthLWYwLTldKT8kYCwiaSIpLGlYPW5ldyBSZWdFeHAoYF4jJHtNZigiKFthLWYwLTldezJ9KSIsMyl9KFthLWYwLTldezJ9KT8kYCwiaSIpLHNYPW5ldyBSZWdFeHAoYF5yZ2JhP1xcKFxccyooXFxkKylcXHMqJHtNZigiLFxccyooXFxkKylcXHMqIiwyKX0oPzosXFxzKihbXFxkLl0rKSk/XFxzKlxcKSRgLCJpIiksYVg9L15oc2xhP1woXHMqKFtcZC5dKylccyosXHMqKFtcZC5dKyklXHMqLFxzKihbXGQuXSspJSg/OlxzKixccyooW1xkLl0rKSk/XHMqXCkkL2ksbFg9L15bYS16XSskL2ksY0M9ZT0+TWF0aC5yb3VuZChlKjI1NSksY1g9KGUsdCxuKT0+e2xldCByPW4vMTAwO2lmKHQ9PT0wKXJldHVybltyLHIscl0ubWFwKGNDKTtjb25zdCBvPShlJTM2MCszNjApJTM2MC82MCxpPSgxLU1hdGguYWJzKDIqci0xKSkqKHQvMTAwKSxzPWkqKDEtTWF0aC5hYnMobyUyLTEpKTtsZXQgYT0wLGw9MCxjPTA7bz49MCYmbzwxPyhhPWksbD1zKTpvPj0xJiZvPDI/KGE9cyxsPWkpOm8+PTImJm88Mz8obD1pLGM9cyk6bz49MyYmbzw0PyhsPXMsYz1pKTpvPj00JiZvPDU/KGE9cyxjPWkpOm8+PTUmJm88NiYmKGE9aSxjPXMpO2NvbnN0IHU9ci1pLzIsZD1hK3UsZj1sK3UscD1jK3U7cmV0dXJuW2QsZixwXS5tYXAoY0MpfTtmdW5jdGlvbiB1WChlKXtjb25zdFt0LG4scixvXT1TdyhlKS5tYXAoKGQsZik9PmY9PT0zP2Q6ZC8yNTUpLGk9TWF0aC5tYXgodCxuLHIpLHM9TWF0aC5taW4odCxuLHIpLGE9KGkrcykvMjtpZihpPT09cylyZXR1cm5bMCwwLGEsb107Y29uc3QgbD1pLXMsYz1hPi41P2wvKDItaS1zKTpsLyhpK3MpO3JldHVybls2MCoodD09PWk/KG4tcikvbCsobjxyPzY6MCk6bj09PWk/KHItdCkvbCsyOih0LW4pL2wrNCksYyxhLG9dfWZ1bmN0aW9uIGRYKGUsdCxuLHIpe3JldHVybmBoc2xhKCR7KGUlMzYwKS50b0ZpeGVkKCl9LCAke19pKDAsMTAwLHQqMTAwKS50b0ZpeGVkKCl9JSwgJHtfaSgwLDEwMCxuKjEwMCkudG9GaXhlZCgpfSUsICR7cGFyc2VGbG9hdChfaSgwLDEscikudG9GaXhlZCgzKSl9KWB9ZnVuY3Rpb24gYnIoZSx0KXtjb25zdFtuLHIsbyxpXT11WChlKTtyZXR1cm4gZFgobixyLG8tdCxpKX1mdW5jdGlvbiBmWChlKXtpZihlPT09InRyYW5zcGFyZW50IilyZXR1cm4gMDtmdW5jdGlvbiB0KGkpe2NvbnN0IHM9aS8yNTU7cmV0dXJuIHM8PS4wNDA0NT9zLzEyLjkyOk1hdGgucG93KChzKy4wNTUpLzEuMDU1LDIuNCl9Y29uc3RbbixyLG9dPVN3KGUpO3JldHVybiAuMjEyNip0KG4pKy43MTUyKnQocikrLjA3MjIqdChvKX1mdW5jdGlvbiBwWChlLHQsbixyKXtyZXR1cm5gcmdiYSgke19pKDAsMjU1LGUpLnRvRml4ZWQoKX0sICR7X2koMCwyNTUsdCkudG9GaXhlZCgpfSwgJHtfaSgwLDI1NSxuKS50b0ZpeGVkKCl9LCAke3BhcnNlRmxvYXQoX2koMCwxLHIpLnRvRml4ZWQoMykpfSlgfWZ1bmN0aW9uIFBoKGUsdCl7cmV0dXJuIGJyKGUsLXQpfWZ1bmN0aW9uIHFtKGUsdCl7Y29uc3RbbixyLG8saV09U3coZSk7cmV0dXJuIHBYKG4scixvLGktdCl9ZnVuY3Rpb24gaFgoZSl7cmV0dXJuIGZYKGUpPi4xNzl9ZnVuY3Rpb24gUGMoZSl7cmV0dXJuIGhYKGUpPyIjMDAwIjoiI2ZmZiJ9Y29uc3QgbVg9InJlbWlycm9yLWVkaXRvci13cmFwcGVyIixnWD0icmVtaXJyb3ItYnV0dG9uLWFjdGl2ZSIsdlg9InJlbWlycm9yLWJ1dHRvbiIseVg9InJlbWlycm9yLWNvbXBvc2l0ZSIseFg9InJlbWlycm9yLWRpYWxvZyIsYlg9InJlbWlycm9yLWRpYWxvZy1iYWNrZHJvcCIsd1g9InJlbWlycm9yLWZvcm0iLFNYPSJyZW1pcnJvci1mb3JtLW1lc3NhZ2UiLGtYPSJyZW1pcnJvci1mb3JtLWxhYmVsIixFWD0icmVtaXJyb3ItZm9ybS1ncm91cCIsX1g9InJlbWlycm9yLWdyb3VwIixDWD0icmVtaXJyb3ItaW5wdXQiLE9YPSJyZW1pcnJvci1tZW51IixUWD0icmVtaXJyb3ItbWVudS1wYW5lIixQWD0icmVtaXJyb3ItbWVudS1wYW5lLWFjdGl2ZSIsTVg9InJlbWlycm9yLW1lbnUtZHJvcGRvd24tbGFiZWwiLFJYPSJyZW1pcnJvci1tZW51LXBhbmUtaWNvbiIsTlg9InJlbWlycm9yLW1lbnUtcGFuZS1sYWJlbCIsJFg9InJlbWlycm9yLW1lbnUtcGFuZS1zaG9ydGN1dCIsQVg9InJlbWlycm9yLW1lbnUtYnV0dG9uLWxlZnQiLERYPSJyZW1pcnJvci1tZW51LWJ1dHRvbi1yaWdodCIsSVg9InJlbWlycm9yLW1lbnUtYnV0dG9uLW5lc3RlZC1sZWZ0IixMWD0icmVtaXJyb3ItbWVudS1idXR0b24tbmVzdGVkLXJpZ2h0IixqWD0icmVtaXJyb3ItbWVudS1idXR0b24iLHpYPSJyZW1pcnJvci1tZW51LWJhciIsRlg9InJlbWlycm9yLWZsZXgtY29sdW1uIixCWD0icmVtaXJyb3ItZmxleC1yb3ciLFVYPSJyZW1pcnJvci1tZW51LWl0ZW0iLFZYPSJyZW1pcnJvci1tZW51LWl0ZW0tcm93IixIWD0icmVtaXJyb3ItbWVudS1pdGVtLWNvbHVtbiIsV1g9InJlbWlycm9yLW1lbnUtaXRlbS1jaGVja2JveCIsS1g9InJlbWlycm9yLW1lbnUtaXRlbS1yYWRpbyIscVg9InJlbWlycm9yLW1lbnUtZ3JvdXAiLEdYPSJyZW1pcnJvci1mbG9hdGluZy1wb3BvdmVyIixZWD0icmVtaXJyb3ItcG9wb3ZlciIsWFg9InJlbWlycm9yLWFuaW1hdGVkLXBvcG92ZXIiLFpYPSJyZW1pcnJvci1yb2xlIixKWD0icmVtaXJyb3Itc2VwYXJhdG9yIixRWD0icmVtaXJyb3ItdGFiIixlWj0icmVtaXJyb3ItdGFiLWxpc3QiLHRaPSJyZW1pcnJvci10YWJiYWJsZSIsblo9InJlbWlycm9yLXRvb2xiYXIiLHJaPSJyZW1pcnJvci10b29sdGlwIixvWj0icmVtaXJyb3ItdGFibGUtc2l6ZS1lZGl0b3IiLGlaPSJyZW1pcnJvci10YWJsZS1zaXplLWVkaXRvci1ib2R5IixzWj0icmVtaXJyb3ItdGFibGUtc2l6ZS1lZGl0b3ItY2VsbCIsYVo9InJlbWlycm9yLXRhYmxlLXNpemUtZWRpdG9yLWNlbGwtc2VsZWN0ZWQiLGxaPSJyZW1pcnJvci10YWJsZS1zaXplLWVkaXRvci1mb290ZXIiLGNaPSJyZW1pcnJvci1jb2xvci1waWNrZXIiLHVaPSJyZW1pcnJvci1jb2xvci1waWNrZXItY2VsbCIsZFo9InJlbWlycm9yLWNvbG9yLXBpY2tlci1jZWxsLXNlbGVjdGVkIjt2YXIgZlo9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQU5JTUFURURfUE9QT1ZFUjpYWCxCVVRUT046dlgsQlVUVE9OX0FDVElWRTpnWCxDT0xPUl9QSUNLRVI6Y1osQ09MT1JfUElDS0VSX0NFTEw6dVosQ09MT1JfUElDS0VSX0NFTExfU0VMRUNURUQ6ZFosQ09NUE9TSVRFOnlYLERJQUxPRzp4WCxESUFMT0dfQkFDS0RST1A6YlgsRURJVE9SX1dSQVBQRVI6bVgsRkxFWF9DT0xVTU46RlgsRkxFWF9ST1c6QlgsRkxPQVRJTkdfUE9QT1ZFUjpHWCxGT1JNOndYLEZPUk1fR1JPVVA6RVgsRk9STV9MQUJFTDprWCxGT1JNX01FU1NBR0U6U1gsR1JPVVA6X1gsSU5QVVQ6Q1gsTUVOVTpPWCxNRU5VX0JBUjp6WCxNRU5VX0JVVFRPTjpqWCxNRU5VX0JVVFRPTl9MRUZUOkFYLE1FTlVfQlVUVE9OX05FU1RFRF9MRUZUOklYLE1FTlVfQlVUVE9OX05FU1RFRF9SSUdIVDpMWCxNRU5VX0JVVFRPTl9SSUdIVDpEWCxNRU5VX0RST1BET1dOX0xBQkVMOk1YLE1FTlVfR1JPVVA6cVgsTUVOVV9JVEVNOlVYLE1FTlVfSVRFTV9DSEVDS0JPWDpXWCxNRU5VX0lURU1fQ09MVU1OOkhYLE1FTlVfSVRFTV9SQURJTzpLWCxNRU5VX0lURU1fUk9XOlZYLE1FTlVfUEFORTpUWCxNRU5VX1BBTkVfQUNUSVZFOlBYLE1FTlVfUEFORV9JQ09OOlJYLE1FTlVfUEFORV9MQUJFTDpOWCxNRU5VX1BBTkVfU0hPUlRDVVQ6JFgsUE9QT1ZFUjpZWCxST0xFOlpYLFNFUEFSQVRPUjpKWCxUQUI6UVgsVEFCQkFCTEU6dFosVEFCTEVfU0laRV9FRElUT1I6b1osVEFCTEVfU0laRV9FRElUT1JfQk9EWTppWixUQUJMRV9TSVpFX0VESVRPUl9DRUxMOnNaLFRBQkxFX1NJWkVfRURJVE9SX0NFTExfU0VMRUNURUQ6YVosVEFCTEVfU0laRV9FRElUT1JfRk9PVEVSOmxaLFRBQl9MSVNUOmVaLFRPT0xCQVI6blosVE9PTFRJUDpyWn0pO2NvbnN0IHBaPSJyZW1pcnJvci1pbWFnZS1sb2FkZXIiO3ZhciBoWj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxJTUFHRV9MT0FERVI6cFp9KTtjb25zdCBtWj0icmVtaXJyb3ItbGlzdC1pdGVtLXdpdGgtY3VzdG9tLW1hcmsiLGdaPSJyZW1pcnJvci11bC1saXN0LWNvbnRlbnQiLHZaPSJyZW1pcnJvci1lZGl0b3IiLHlaPSJyZW1pcnJvci1saXN0LWl0ZW0tbWFya2VyLWNvbnRhaW5lciIseFo9InJlbWlycm9yLWxpc3QtaXRlbS1jaGVja2JveCIsYlo9InJlbWlycm9yLWNvbGxhcHNpYmxlLWxpc3QtaXRlbS1jbG9zZWQiLHdaPSJyZW1pcnJvci1jb2xsYXBzaWJsZS1saXN0LWl0ZW0tYnV0dG9uIixTWj0icmVtaXJyb3ItbGlzdC1zcGluZSI7dmFyIHRhPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLENPTExBUFNJQkxFX0xJU1RfSVRFTV9CVVRUT046d1osQ09MTEFQU0lCTEVfTElTVF9JVEVNX0NMT1NFRDpiWixFRElUT1I6dlosTElTVF9JVEVNX0NIRUNLQk9YOnhaLExJU1RfSVRFTV9NQVJLRVJfQ09OVEFJTkVSOnlaLExJU1RfSVRFTV9XSVRIX0NVU1RPTV9NQVJLRVI6bVosTElTVF9TUElORTpTWixVTF9MSVNUX0NPTlRFTlQ6Z1p9KTtjb25zdCBrWj0icmVtaXJyb3ItaXMtZW1wdHkiO3ZhciBFWj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxJU19FTVBUWTprWn0pO2NvbnN0IF9aPSJyZW1pcnJvci1lZGl0b3IiLENaPSJyZW1pcnJvci1wb3NpdGlvbmVyIixPWj0icmVtaXJyb3ItcG9zaXRpb25lci13aWRnZXQiO3ZhciBUWj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxFRElUT1I6X1osUE9TSVRJT05FUjpDWixQT1NJVElPTkVSX1dJREdFVDpPWn0pO2NvbnN0IGZvPXtncmF5OlsiI2Y4ZjlmYSIsIiNmMWYzZjUiLCIjZTllY2VmIiwiI2RlZTJlNiIsIiNjZWQ0ZGEiLCIjYWRiNWJkIiwiIzg2OGU5NiIsIiM0OTUwNTciLCIjMzQzYTQwIiwiIzIxMjUyOSJdLHJlZDpbIiNmZmY1ZjUiLCIjZmZlM2UzIiwiI2ZmYzljOSIsIiNmZmE4YTgiLCIjZmY4Nzg3IiwiI2ZmNmI2YiIsIiNmYTUyNTIiLCIjZjAzZTNlIiwiI2UwMzEzMSIsIiNjOTJhMmEiXSxwaW5rOlsiI2ZmZjBmNiIsIiNmZmRlZWIiLCIjZmNjMmQ3IiwiI2ZhYTJjMSIsIiNmNzgzYWMiLCIjZjA2NTk1IiwiI2U2NDk4MCIsIiNkNjMzNmMiLCIjYzIyNTVjIiwiI2E2MWU0ZCJdLGdyYXBlOlsiI2Y4ZjBmYyIsIiNmM2Q5ZmEiLCIjZWViZWZhIiwiI2U1OTlmNyIsIiNkYTc3ZjIiLCIjY2M1ZGU4IiwiI2JlNGJkYiIsIiNhZTNlYzkiLCIjOWMzNmI1IiwiIzg2MmU5YyJdLHZpb2xldDpbIiNmM2YwZmYiLCIjZTVkYmZmIiwiI2QwYmZmZiIsIiNiMTk3ZmMiLCIjOTc3NWZhIiwiIzg0NWVmNyIsIiM3OTUwZjIiLCIjNzA0OGU4IiwiIzY3NDFkOSIsIiM1ZjNkYzQiXSxpbmRpZ286WyIjZWRmMmZmIiwiI2RiZTRmZiIsIiNiYWM4ZmYiLCIjOTFhN2ZmIiwiIzc0OGZmYyIsIiM1YzdjZmEiLCIjNGM2ZWY1IiwiIzQyNjNlYiIsIiMzYjViZGIiLCIjMzY0ZmM3Il0sYmx1ZTpbIiNlN2Y1ZmYiLCIjZDBlYmZmIiwiI2E1ZDhmZiIsIiM3NGMwZmMiLCIjNGRhYmY3IiwiIzMzOWFmMCIsIiMyMjhiZTYiLCIjMWM3ZWQ2IiwiIzE5NzFjMiIsIiMxODY0YWIiXSxjeWFuOlsiI2UzZmFmYyIsIiNjNWY2ZmEiLCIjOTllOWYyIiwiIzY2ZDllOCIsIiMzYmM5ZGIiLCIjMjJiOGNmIiwiIzE1YWFiZiIsIiMxMDk4YWQiLCIjMGM4NTk5IiwiIzBiNzI4NSJdLHRlYWw6WyIjZTZmY2Y1IiwiI2MzZmFlOCIsIiM5NmYyZDciLCIjNjNlNmJlIiwiIzM4ZDlhOSIsIiMyMGM5OTciLCIjMTJiODg2IiwiIzBjYTY3OCIsIiMwOTkyNjgiLCIjMDg3ZjViIl0sZ3JlZW46WyIjZWJmYmVlIiwiI2QzZjlkOCIsIiNiMmYyYmIiLCIjOGNlOTlhIiwiIzY5ZGI3YyIsIiM1MWNmNjYiLCIjNDBjMDU3IiwiIzM3YjI0ZCIsIiMyZjllNDQiLCIjMmI4YTNlIl0sbGltZTpbIiNmNGZjZTMiLCIjZTlmYWM4IiwiI2Q4ZjVhMiIsIiNjMGViNzUiLCIjYTllMzRiIiwiIzk0ZDgyZCIsIiM4MmM5MWUiLCIjNzRiODE2IiwiIzY2YTgwZiIsIiM1Yzk0MGQiXSx5ZWxsb3c6WyIjZmZmOWRiIiwiI2ZmZjNiZiIsIiNmZmVjOTkiLCIjZmZlMDY2IiwiI2ZmZDQzYiIsIiNmY2M0MTkiLCIjZmFiMDA1IiwiI2Y1OWYwMCIsIiNmMDhjMDAiLCIjZTY3NzAwIl0sb3JhbmdlOlsiI2ZmZjRlNiIsIiNmZmU4Y2MiLCIjZmZkOGE4IiwiI2ZmYzA3OCIsIiNmZmE5NGQiLCIjZmY5MjJiIiwiI2ZkN2UxNCIsIiNmNzY3MDciLCIjZTg1OTBjIiwiI2Q5NDgwZiJdfSxDaT0iIzAwMDAwMCIsa3c9IiNmZmZmZmYiLFBaPSIjMjUyMTAzIixFdz1xbShDaSwuNzUpLGR2PSIjNzk2M2QyIixfdz0iI2JjZDI2MyIsTVo9IiNmZmYiLFJaPSIjZmZmIixDdz1mby5ncmF5WzFdLHVDPSJyZ2JhKDEwLDMxLDY4LDAuMDgpIixkQz0icmdiYSgxMCwzMSw2OCwwLjEwKSIsZkM9InJnYmEoMTAsMzEsNjgsMC4xMikiLE5aPVBoKHFtKENpLC4xKSwuMTMpLE93PXtiYWNrZ3JvdW5kOmt3LGJvcmRlcjpFdyxmb3JlZ3JvdW5kOkNpLG11dGVkOkN3LHByaW1hcnk6ZHYsc2Vjb25kYXJ5Ol93LHByaW1hcnlUZXh0Ok1aLHNlY29uZGFyeVRleHQ6UlosdGV4dDpQWixmYWRlZDpOWn0sJFo9ey4uLk93LGJhY2tncm91bmQ6YnIoa3csLjE1KSxib3JkZXI6YnIoRXcsLjE1KSxmb3JlZ3JvdW5kOmJyKENpLC4xNSksbXV0ZWQ6YnIoQ3csLjE1KSxwcmltYXJ5OmJyKGR2LC4xNSksc2Vjb25kYXJ5OmJyKF93LC4xNSksZ2V0IHRleHQoKXtyZXR1cm4gUGModGhpcy5iYWNrZ3JvdW5kKX0sZ2V0IHByaW1hcnlUZXh0KCl7cmV0dXJuIFBjKHRoaXMucHJpbWFyeSl9LGdldCBzZWNvbmRhcnlUZXh0KCl7cmV0dXJuIFBjKHRoaXMuc2Vjb25kYXJ5KX19LEFaPXsuLi5PdyxiYWNrZ3JvdW5kOmJyKGt3LC4wNzUpLGJvcmRlcjpicihFdywuMDc1KSxmb3JlZ3JvdW5kOmJyKENpLC4wNzUpLG11dGVkOmJyKEN3LC4wNzUpLHByaW1hcnk6YnIoZHYsLjA3NSksc2Vjb25kYXJ5OmJyKF93LC4wNzUpLGdldCB0ZXh0KCl7cmV0dXJuIFBjKHRoaXMuYmFja2dyb3VuZCl9LGdldCBwcmltYXJ5VGV4dCgpe3JldHVybiBQYyh0aGlzLnByaW1hcnkpfSxnZXQgc2Vjb25kYXJ5VGV4dCgpe3JldHVybiBQYyh0aGlzLnNlY29uZGFyeSl9fTsoey4uLk93LGJhY2tkcm9wOnFtKENpLC4xKSxvdXRsaW5lOnFtKGR2LC42KSx0YWJsZTooUGgoQ2ksLjgpLFBoKENpLC40KSxmby5ncmF5WzNdLGZvLmJsdWVbN10sZm8uYmx1ZVsxXSxmby5ibHVlWzVdLGZvLmJsdWVbN10sUGgoQ2ksLjQpLGZvLmJsdWVbNV0sZm8ucmVkWzddLGZvLnJlZFsxXSxmby5yZWRbNV0pfSxgJHt1Q31gLGAke2RDfWAsYCR7ZkN9YCk7dmFyIERaPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxJWj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFR3PShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/SVoodCxuKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0ocj9zKHQsbixvKTpzKG8pKXx8byk7cmV0dXJuIHImJm8mJkRaKHQsbixvKSxvfSxjJD0oZSx0LG4pPT57aWYoIXQuaGFzKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90ICIrbil9LHF0PShlLHQsbik9PihjJChlLHQsInJlYWQgZnJvbSBwcml2YXRlIGZpZWxkIiksbj9uLmNhbGwoZSk6dC5nZXQoZSkpLGZpPShlLHQsbik9PntpZih0LmhhcyhlKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKTt0IGluc3RhbmNlb2YgV2Vha1NldD90LmFkZChlKTp0LnNldChlLG4pfSxycz0oZSx0LG4scik9PihjJChlLHQsIndyaXRlIHRvIHByaXZhdGUgZmllbGQiKSxyP3IuY2FsbChlLG4pOnQuc2V0KGUsbiksbiksZGQsZmQsWmwscGQsTWgsaGQsbWQsZ2QsdmQsUmg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZmkodGhpcyxkZCxxZygpKSxmaSh0aGlzLGZkLFtdKSxmaSh0aGlzLFpsLG5ldyBNYXApLGZpKHRoaXMscGQsW10pLGZpKHRoaXMsTWgsITEpLGZpKHRoaXMsaGQsdm9pZCAwKSxmaSh0aGlzLG1kLHZvaWQgMCksZmkodGhpcyxnZCx2b2lkIDApLGZpKHRoaXMsdmQsdm9pZCAwKSx0aGlzLmFkZExpc3RlbmVyPSh0LG4pPT5xdCh0aGlzLGRkKS5vbih0LG4pLHJzKHRoaXMsaGQsZSkscnModGhpcyxtZCxlLmdldEFjdGl2ZSkscnModGhpcyx2ZCxlLmdldFBvc2l0aW9uKSxycyh0aGlzLGdkLGUuZ2V0SUQpLHRoaXMuaGFzQ2hhbmdlZD1lLmhhc0NoYW5nZWQsdGhpcy5ldmVudHM9ZS5ldmVudHM/P1sic3RhdGUiLCJzY3JvbGwiXX1zdGF0aWMgY3JlYXRlKGUpe3JldHVybiBuZXcgUmgoZSl9c3RhdGljIGZyb21Qb3NpdGlvbmVyKGUsdCl7cmV0dXJuIFJoLmNyZWF0ZSh7Li4uZS5iYXNlUG9zaXRpb25lciwuLi50fSl9Z2V0IGJhc2VQb3NpdGlvbmVyKCl7cmV0dXJue2dldEFjdGl2ZTpxdCh0aGlzLG1kKSxnZXRQb3NpdGlvbjpxdCh0aGlzLHZkKSxoYXNDaGFuZ2VkOnRoaXMuaGFzQ2hhbmdlZCxldmVudHM6dGhpcy5ldmVudHMsZ2V0SUQ6cXQodGhpcyxnZCl9fW9uQWN0aXZlQ2hhbmdlZChlKXt0aGlzLnJlY2VudFVwZGF0ZT1lO2NvbnN0IHQ9cXQodGhpcyxtZCkuY2FsbCh0aGlzLGUpO3JzKHRoaXMsZmQsdCkscnModGhpcyxabCxuZXcgTWFwKSxycyh0aGlzLE1oLCExKSxycyh0aGlzLHBkLFtdKTtjb25zdCBuPVtdO2Zvcihjb25zdFtyLG9db2YgdC5lbnRyaWVzKCkpe2NvbnN0IGk9dGhpcy5nZXRJRChvLHIpO3F0KHRoaXMscGQpLnB1c2goaSksbi5wdXNoKHtzZXRFbGVtZW50OnM9PnRoaXMuYWRkUHJvcHMoey4uLmUsZGF0YTpvLGVsZW1lbnQ6c30sciksaWQ6aSxkYXRhOm99KX1xdCh0aGlzLGRkKS5lbWl0KCJ1cGRhdGUiLG4pfWdldElEKGUsdCl7dmFyIG47cmV0dXJuKChuPXF0KHRoaXMsZ2QpKT09bnVsbD92b2lkIDA6bi5jYWxsKHRoaXMsZSx0KSk/P3QudG9TdHJpbmcoKX1hZGRQcm9wcyhlLHQpe2lmKHF0KHRoaXMsTWgpfHwocXQodGhpcyxabCkuc2V0KHQsZSkscXQodGhpcyxabCkuc2l6ZTxxdCh0aGlzLGZkKS5sZW5ndGgpKXJldHVybjtjb25zdCBuPVtdO2Zvcihjb25zdCByIG9mIHF0KHRoaXMsZmQpLmtleXMoKSl7Y29uc3Qgbz1xdCh0aGlzLFpsKS5nZXQocik7YmUobyx7Y29kZTpxLklOVEVSTkFMLG1lc3NhZ2U6IlNvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4gcmV0cmlldmluZyB0aGUgcGFyYW1ldGVycyJ9KTtjb25zdCBpPXF0KHRoaXMscGQpW3JdO2lmKCFpKXJldHVybjtuLnB1c2goe3Bvc2l0aW9uOnF0KHRoaXMsdmQpLmNhbGwodGhpcyxvKSxlbGVtZW50Om8uZWxlbWVudCxpZDppfSl9cXQodGhpcyxkZCkuZW1pdCgiZG9uZSIsbil9Y2xvbmUoZSl7cmV0dXJuIFJoLmNyZWF0ZSh7Li4ucXQodGhpcyxoZCksLi4ucHQoZSk/ZShxdCh0aGlzLGhkKSk6ZX0pfWFjdGl2ZShlKXtjb25zdCB0PXB0KGUpP2U6KCk9PmU7cmV0dXJuIHRoaXMuY2xvbmUobj0+KHtnZXRBY3RpdmU6cj0+bi5nZXRBY3RpdmUocikuZmlsdGVyKHQpfSkpfX0sUG89Umg7ZGQ9bmV3IFdlYWtNYXA7ZmQ9bmV3IFdlYWtNYXA7Wmw9bmV3IFdlYWtNYXA7cGQ9bmV3IFdlYWtNYXA7TWg9bmV3IFdlYWtNYXA7aGQ9bmV3IFdlYWtNYXA7bWQ9bmV3IFdlYWtNYXA7Z2Q9bmV3IFdlYWtNYXA7dmQ9bmV3IFdlYWtNYXA7UG8uRU1QVFk9W107ZnVuY3Rpb24gTFooZSx0PXAkKXtjb25zdHtrZXk6bn09KGU9PW51bGw/dm9pZCAwOmUuZ2V0TWV0YShmJCkpPz97fTtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gdSQoZSl7Y29uc3R7dHI6dCxzdGF0ZTpuLHByZXZpb3VzU3RhdGU6cn09ZTtyZXR1cm4hcnx8dCYmTFoodCk/ITA6dD9qVSh0KTohbi5kb2MuZXEoci5kb2MpfHwhbi5zZWxlY3Rpb24uZXEoci5zZWxlY3Rpb24pfWZ1bmN0aW9uIGQkKGUsdCxuPXt9KXtjb25zdCByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2FjY291bnRGb3JQYWRkaW5nOm89ITF9PW47bGV0IGk9MCxzPTAsYT0wLGw9MDtpZihuaSh0KSYmbyl7Y29uc3QgdT1OdW1iZXIucGFyc2VGbG9hdChucyh0LCJwYWRkaW5nLWxlZnQiKS5yZXBsYWNlKCJweCIsIiIpKSxkPU51bWJlci5wYXJzZUZsb2F0KG5zKHQsInBhZGRpbmctcmlnaHQiKS5yZXBsYWNlKCJweCIsIiIpKSxmPU51bWJlci5wYXJzZUZsb2F0KG5zKHQsInBhZGRpbmctdG9wIikucmVwbGFjZSgicHgiLCIiKSkscD1OdW1iZXIucGFyc2VGbG9hdChucyh0LCJwYWRkaW5nLWJvdHRvbSIpLnJlcGxhY2UoInB4IiwiIikpLG09TnVtYmVyLnBhcnNlRmxvYXQobnModCwiYm9yZGVyLWxlZnQiKS5yZXBsYWNlKCJweCIsIiIpKSxnPU51bWJlci5wYXJzZUZsb2F0KG5zKHQsImJvcmRlci1yaWdodCIpLnJlcGxhY2UoInB4IiwiIikpLHk9TnVtYmVyLnBhcnNlRmxvYXQobnModCwiYm9yZGVyLXRvcCIpLnJlcGxhY2UoInB4IiwiIikpLHY9TnVtYmVyLnBhcnNlRmxvYXQobnModCwiYm9yZGVyLWJvdHRvbSIpLnJlcGxhY2UoInB4IiwiIikpLHg9dC5vZmZzZXRXaWR0aC10LmNsaWVudFdpZHRoLHc9dC5vZmZzZXRIZWlnaHQtdC5jbGllbnRIZWlnaHQ7aSs9dSttKyh0LmRpcj09PSJydGwiP3g6MCkscys9ZCtnKyh0LmRpcj09PSJydGwiPzA6eCksYSs9Zit5LGwrPXArdit3fWNvbnN0IGM9bmV3IERPTVJlY3Qoci5sZWZ0K2ksci50b3ArYSxyLndpZHRoLXMsci5oZWlnaHQtbCk7Zm9yKGNvbnN0W3UsZF1vZltbZS50b3AsZS5sZWZ0XSxbZS50b3AsZS5yaWdodF0sW2UuYm90dG9tLGUubGVmdF0sW2UuYm90dG9tLGUucmlnaHRdXSlpZihqRSh1LGMudG9wLGMuYm90dG9tKSYmakUoZCxjLmxlZnQsYy5yaWdodCkpcmV0dXJuITA7cmV0dXJuITF9dmFyIGpaPSJyZW1pcnJvci1wb3NpdGlvbmVyLXdpZGdldCIsZiQ9InBvc2l0aW9uZXJVcGRhdGUiLHAkPSJfX2FsbF9wb3NpdGlvbmVyc19fIixoJD17eTotOTk5OTk5LHg6LTk5OTk5OSx3aWR0aDowLGhlaWdodDowfSxwQz17Li4uaCQsbGVmdDotOTk5OTk5LHRvcDotOTk5OTk5LGJvdHRvbTotOTk5OTk5LHJpZ2h0Oi05OTk5OTl9LHpaPXsuLi5oJCxyZWN0OnsuLi5wQyx0b0pTT046KCk9PnBDfSx2aXNpYmxlOiExfSxGWj1Qby5jcmVhdGUoe2hhc0NoYW5nZWQ6dSQsZ2V0QWN0aXZlKGUpe2NvbnN0e3N0YXRlOnR9PWU7aWYoIWZ3KHQpfHx0LnNlbGVjdGlvbi4kYW5jaG9yLmRlcHRoPjIpcmV0dXJuIFBvLkVNUFRZO2NvbnN0IG49dHYoe3ByZWRpY2F0ZTpyPT5yLnR5cGUuaXNCbG9jayxzZWxlY3Rpb246dH0pO3JldHVybiBuP1tuXTpQby5FTVBUWX0sZ2V0UG9zaXRpb24oZSl7Y29uc3R7dmlldzp0LGRhdGE6bn09ZSxyPXQubm9kZURPTShuLnBvcyk7aWYoIW5pKHIpKXJldHVybiB6Wjtjb25zdCBvPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10LmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPW8uaGVpZ2h0LGE9by53aWR0aCxsPXQuZG9tLnNjcm9sbExlZnQrby5sZWZ0LWkubGVmdCxjPXQuZG9tLnNjcm9sbFRvcCtvLnRvcC1pLnRvcCx1PWQkKG8sdC5kb20pO3JldHVybnt5OmMseDpsLGhlaWdodDpzLHdpZHRoOmEscmVjdDpvLHZpc2libGU6dX19fSksbSQ9RlouY2xvbmUoKHtnZXRBY3RpdmU6ZX0pPT4oe2dldEFjdGl2ZTp0PT57Y29uc3Rbbl09ZSh0KTtyZXR1cm4gbiYmZ3cobi5ub2RlKSYmbi5ub2RlLnR5cGU9PT1vdih0LnN0YXRlLnNjaGVtYSk/W25dOlBvLkVNUFRZfX0pKTttJC5jbG9uZSgoe2dldFBvc2l0aW9uOmV9KT0+KHtnZXRQb3NpdGlvbjp0PT4oey4uLmUodCksd2lkdGg6MX0pfSkpO20kLmNsb25lKCh7Z2V0UG9zaXRpb246ZX0pPT4oe2dldFBvc2l0aW9uOnQ9Pntjb25zdHt3aWR0aDpuLHg6cix5Om8saGVpZ2h0Oml9PWUodCk7cmV0dXJuey4uLmUodCksd2lkdGg6MSx4Om4rcixyZWN0Om5ldyBET01SZWN0KG4rcixvLDEsaSl9fX0pKTtmdW5jdGlvbiBQdyhlKXtyZXR1cm4gUG8uY3JlYXRlKHtoYXNDaGFuZ2VkOnUkLGdldEFjdGl2ZTp0PT57Y29uc3R7c3RhdGU6bix2aWV3OnJ9PXQ7aWYoIWUobil8fCF3bChuLnNlbGVjdGlvbikpcmV0dXJuIFBvLkVNUFRZO3RyeXtjb25zdHtoZWFkOm8sYW5jaG9yOml9PW4uc2VsZWN0aW9uO3JldHVyblt7ZnJvbTpyLmNvb3Jkc0F0UG9zKGkpLHRvOnIuY29vcmRzQXRQb3Mobyl9XX1jYXRjaHtyZXR1cm4gUG8uRU1QVFl9fSxnZXRQb3NpdGlvbih0KXtjb25zdHtlbGVtZW50Om4sZGF0YTpyLHZpZXc6b309dCx7ZnJvbTppLHRvOnN9PXIsYT1uLm9mZnNldFBhcmVudD8/by5kb20sbD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9TWF0aC5hYnMocy5ib3R0b20taS50b3ApLHU9Yz5pLmJvdHRvbS1pLnRvcCxkPU1hdGgubWluKGkubGVmdCxzLmxlZnQpLGY9TWF0aC5taW4oaS50b3Ascy50b3ApLHA9YS5zY3JvbGxMZWZ0Kyh1P3MubGVmdC1sLmxlZnQ6ZC1sLmxlZnQpLG09YS5zY3JvbGxUb3ArZi1sLnRvcCxnPXU/MTpNYXRoLmFicyhpLmxlZnQtcy5yaWdodCkseT1uZXcgRE9NUmVjdCh1P3MubGVmdDpkLGYsZyxjKSx2PWQkKHksby5kb20pO3JldHVybntyZWN0OnkseTptLHg6cCxoZWlnaHQ6Yyx3aWR0aDpnLHZpc2libGU6dn19fSl9dmFyIEJaPVB3KGU9PiFlLnNlbGVjdGlvbi5lbXB0eSk7UHcoZT0+ZS5zZWxlY3Rpb24uZW1wdHkpO1B3KCgpPT4hMCk7QlouY2xvbmUoKCk9Pih7Z2V0QWN0aXZlOmU9Pntjb25zdHtzdGF0ZTp0LHZpZXc6bn09ZTtpZighdC5zZWxlY3Rpb24uZW1wdHkpcmV0dXJuIFBvLkVNUFRZO2NvbnN0IHI9Q04odCk7aWYoIXIpcmV0dXJuIFBvLkVNUFRZO3RyeXtyZXR1cm5be2Zyb206bi5jb29yZHNBdFBvcyhyLmZyb20pLHRvOm4uY29vcmRzQXRQb3Moci50byl9XX1jYXRjaHtyZXR1cm4gUG8uRU1QVFl9fX0pKTt2YXIgUmY9Y2xhc3MgZXh0ZW5kcyBfdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wb3NpdGlvbmVycz1bXSx0aGlzLm9uQWRkQ3VzdG9tSGFuZGxlcj0oe3Bvc2l0aW9uZXI6ZX0pPT57aWYoZSlyZXR1cm4gdGhpcy5wb3NpdGlvbmVycz1bLi4udGhpcy5wb3NpdGlvbmVycyxlXSx0aGlzLnN0b3JlLmNvbW1hbmRzLmZvcmNlVXBkYXRlKCksKCk9Pnt0aGlzLnBvc2l0aW9uZXJzPXRoaXMucG9zaXRpb25lcnMuZmlsdGVyKHQ9PnQhPT1lKX19fWdldCBuYW1lKCl7cmV0dXJuInBvc2l0aW9uZXIifWNyZWF0ZUF0dHJpYnV0ZXMoKXtyZXR1cm57Y2xhc3M6VFouRURJVE9SfX1pbml0KCl7dGhpcy5vblNjcm9sbD1Ceih0aGlzLm9wdGlvbnMuc2Nyb2xsRGVib3VuY2UsdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKX1jcmVhdGVFdmVudEhhbmRsZXJzKCl7cmV0dXJue3Njcm9sbDooKT0+KHRoaXMub25TY3JvbGwoKSwhMSksaG92ZXI6KGUsdCk9Pih0aGlzLnBvc2l0aW9uZXIodGhpcy5nZXRCYXNlUHJvcHMoImhvdmVyIix7aG92ZXI6dH0pKSwhMSksY29udGV4dG1lbnU6KGUsdCk9Pih0aGlzLnBvc2l0aW9uZXIodGhpcy5nZXRCYXNlUHJvcHMoImNvbnRleHRtZW51Iix7Y29udGV4dG1lbnU6dH0pKSwhMSl9fW9uU3RhdGVVcGRhdGUoZSl7dGhpcy5wb3NpdGlvbmVyKHsuLi5lLHByZXZpb3VzU3RhdGU6ZS5maXJzdFVwZGF0ZT92b2lkIDA6ZS5wcmV2aW91c1N0YXRlLGV2ZW50OiJzdGF0ZSIsaGVscGVyczp0aGlzLnN0b3JlLmhlbHBlcnN9KX1jcmVhdGVEZWNvcmF0aW9ucyhlKXtpZih0aGlzLmVsZW1lbnQ/Pyh0aGlzLmVsZW1lbnQ9dGhpcy5jcmVhdGVFbGVtZW50KCkpLCF0aGlzLmVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKXJldHVybiBldC5lbXB0eTtjb25zdCB0PUV0LndpZGdldCgwLHRoaXMuZWxlbWVudCx7a2V5OiJwb3NpdGlvbmVyLXdpZGdldCIsc2lkZTotMSxzdG9wRXZlbnQ6KCk9PiEwfSk7cmV0dXJuIGV0LmNyZWF0ZShlLmRvYyxbdF0pfWZvcmNlVXBkYXRlUG9zaXRpb25lcnMoZT1wJCl7cmV0dXJuKHt0cjp0LGRpc3BhdGNoOm59KT0+KG49PW51bGx8fG4odC5zZXRNZXRhKGYkLHtrZXk6ZX0pKSwhMCl9Z2V0UG9zaXRpb25lcldpZGdldCgpe3JldHVybiB0aGlzLmVsZW1lbnQ/Pyh0aGlzLmVsZW1lbnQ9dGhpcy5jcmVhdGVFbGVtZW50KCkpfWNyZWF0ZUVsZW1lbnQoKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gZS5kYXRhc2V0LmlkPWpaLGUuc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksZX10cmlnZ2VyUG9zaXRpb25lcihlLHQpe2UuaGFzQ2hhbmdlZCh0KSYmZS5vbkFjdGl2ZUNoYW5nZWQoey4uLnQsdmlldzp0aGlzLnN0b3JlLnZpZXd9KX1wb3NpdGlvbmVyKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMucG9zaXRpb25lcnMpdC5ldmVudHMuaW5jbHVkZXMoZS5ldmVudCkmJnRoaXMudHJpZ2dlclBvc2l0aW9uZXIodCxlKX1nZXRCYXNlUHJvcHMoZSx0KXtjb25zdCBuPXRoaXMuc3RvcmUuZ2V0U3RhdGUoKSxyPXRoaXMuc3RvcmUucHJldmlvdXNTdGF0ZTtyZXR1cm57aGVscGVyczp0aGlzLnN0b3JlLmhlbHBlcnMsZXZlbnQ6ZSxmaXJzdFVwZGF0ZTohMSxwcmV2aW91c1N0YXRlOnIsc3RhdGU6biwuLi50fX1vblNjcm9sbCgpe3RoaXMucG9zaXRpb25lcih0aGlzLmdldEJhc2VQcm9wcygic2Nyb2xsIix7c2Nyb2xsOntzY3JvbGxUb3A6dGhpcy5zdG9yZS52aWV3LmRvbS5zY3JvbGxUb3B9fSkpfX07VHcoW2RlKCldLFJmLnByb3RvdHlwZSwiZm9yY2VVcGRhdGVQb3NpdGlvbmVycyIsMSk7VHcoW0l0KCldLFJmLnByb3RvdHlwZSwiZ2V0UG9zaXRpb25lcldpZGdldCIsMSk7UmY9VHcoW0plKHtkZWZhdWx0T3B0aW9uczp7c2Nyb2xsRGVib3VuY2U6MTAwfSxjdXN0b21IYW5kbGVyS2V5czpbInBvc2l0aW9uZXIiXSxzdGF0aWNLZXlzOlsic2Nyb2xsRGVib3VuY2UiXX0pXSxSZik7dmFyIFVaPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWWj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEhaPShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/VloodCxuKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0ocj9zKHQsbixvKTpzKG8pKXx8byk7cmV0dXJuIHImJm8mJlVaKHQsbixvKSxvfSxvYj1jbGFzcyBleHRlbmRzIG9ve2dldCBuYW1lKCl7cmV0dXJuInRleHQifWNyZWF0ZVRhZ3MoKXtyZXR1cm5bTGUuSW5saW5lTm9kZV19Y3JlYXRlTm9kZVNwZWMoKXtyZXR1cm57fX19O29iPUhaKFtKZSh7ZGlzYWJsZUV4dHJhQXR0cmlidXRlczohMCxkZWZhdWx0UHJpb3JpdHk6Y3QuTWVkaXVtfSldLG9iKTt2YXIgV1o9ey4uLlpjLmRlZmF1bHRPcHRpb25zLC4uLnVsLmRlZmF1bHRPcHRpb25zLC4uLnJpLmRlZmF1bHRPcHRpb25zLGV4Y2x1ZGVFeHRlbnNpb25zOltdfTtmdW5jdGlvbiBLWihlPXt9KXtlPXsuLi5XWiwuLi5lfTtjb25zdHtjb250ZW50OnQsZGVwdGg6bixnZXREaXNwYXRjaDpyLGdldFN0YXRlOm8sbmV3R3JvdXBEZWxheTppLGV4Y2x1ZGVFeHRlbnNpb25zOnN9PWUsYT17fTtmb3IoY29uc3QgYyBvZiBzPz9bXSlhW2NdPSEwO2NvbnN0IGw9W107aWYoIWEuaGlzdG9yeSl7Y29uc3QgYz1uZXcgcmkoe2RlcHRoOm4sZ2V0RGlzcGF0Y2g6cixnZXRTdGF0ZTpvLG5ld0dyb3VwRGVsYXk6aX0pO2wucHVzaChjKX1yZXR1cm4gYS5kb2N8fGwucHVzaChuZXcgWmMoe2NvbnRlbnQ6dH0pKSxhLnRleHR8fGwucHVzaChuZXcgb2IpLGEucGFyYWdyYXBofHxsLnB1c2gobmV3IHVsKSxhLnBvc2l0aW9uZXJ8fGwucHVzaChuZXcgUmYpLGEuZ2FwQ3Vyc29yfHxsLnB1c2gobmV3IG5iKSxhLmV2ZW50c3x8bC5wdXNoKG5ldyBXbSksbH12YXIgcVo9T2JqZWN0LmRlZmluZVByb3BlcnR5LEdaPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWVo9KGUsdCxuLHIpPT57Zm9yKHZhciBvPXI+MT92b2lkIDA6cj9HWih0LG4pOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShyP3ModCxuLG8pOnMobykpfHxvKTtyZXR1cm4gciYmbyYmcVoodCxuLG8pLG99LGRsPWNsYXNzIGV4dGVuZHMgX3R7Z2V0IG5hbWUoKXtyZXR1cm4icGxhY2Vob2xkZXIifWNyZWF0ZUF0dHJpYnV0ZXMoKXtyZXR1cm57ImFyaWEtcGxhY2Vob2xkZXIiOnRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcn19Y3JlYXRlUGx1Z2luKCl7cmV0dXJue3N0YXRlOntpbml0OihlLHQpPT4oey4uLnRoaXMub3B0aW9ucyxlbXB0eTptdyh0LmRvYyx7aWdub3JlQXR0cmlidXRlczohMH0pfSksYXBwbHk6KGUsdCxuLHIpPT5YWih7cGx1Z2luU3RhdGU6dCx0cjplLGV4dGVuc2lvbjp0aGlzLHN0YXRlOnJ9KX0scHJvcHM6e2RlY29yYXRpb25zOmU9PlpaKHtzdGF0ZTplLGV4dGVuc2lvbjp0aGlzfSl9fX1vblNldE9wdGlvbnMoZSl7Y29uc3R7Y2hhbmdlczp0fT1lO3QucGxhY2Vob2xkZXIuY2hhbmdlZCYmdGhpcy5zdG9yZS5waGFzZT49cnIuRWRpdG9yVmlldyYmdGhpcy5zdG9yZS51cGRhdGVBdHRyaWJ1dGVzKCl9fTtkbD1ZWihbSmUoe2RlZmF1bHRPcHRpb25zOntlbXB0eU5vZGVDbGFzczpFWi5JU19FTVBUWSxwbGFjZWhvbGRlcjoiIn19KV0sZGwpO2Z1bmN0aW9uIFhaKGUpe2NvbnN0e3BsdWdpblN0YXRlOnQsZXh0ZW5zaW9uOm4sdHI6cixzdGF0ZTpvfT1lO3JldHVybiByLmRvY0NoYW5nZWQ/ey4uLm4ub3B0aW9ucyxlbXB0eTptdyhvLmRvYyl9OnR9ZnVuY3Rpb24gWlooZSl7Y29uc3R7ZXh0ZW5zaW9uOnQsc3RhdGU6bn09ZSx7ZW1wdHk6cn09dC5wbHVnaW5LZXkuZ2V0U3RhdGUobikse2VtcHR5Tm9kZUNsYXNzOm8scGxhY2Vob2xkZXI6aX09dC5vcHRpb25zO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IHM9W107cmV0dXJuIG4uZG9jLmRlc2NlbmRhbnRzKChhLGwpPT57Y29uc3QgYz1FdC5ub2RlKGwsbCthLm5vZGVTaXplLHtjbGFzczpvLCJkYXRhLXBsYWNlaG9sZGVyIjppfSk7cy5wdXNoKGMpfSksZXQuY3JlYXRlKG4uZG9jLHMpfXZhciBKWj1PYmplY3QuZGVmaW5lUHJvcGVydHksUVo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixlSj0oZSx0LG4scik9Pntmb3IodmFyIG89cj4xP3ZvaWQgMDpyP1FaKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiZKWih0LG4sbyksb30sdEo9ey4uLmRsLmRlZmF1bHRPcHRpb25zLC4uLlRmLmRlZmF1bHRPcHRpb25zfSxuSj1bLi4uZGwuc3RhdGljS2V5cywuLi5UZi5zdGF0aWNLZXlzXSxOZj1jbGFzcyBleHRlbmRzIF90e2dldCBuYW1lKCl7cmV0dXJuInJlYWN0In1vblNldE9wdGlvbnMoZSl7Y29uc3R7cGlja0NoYW5nZWQ6dH09ZTt0aGlzLmdldEV4dGVuc2lvbihkbCkuc2V0T3B0aW9ucyh0KFsicGxhY2Vob2xkZXIiXSkpfWNyZWF0ZUV4dGVuc2lvbnMoKXtjb25zdHtlbXB0eU5vZGVDbGFzczplLHBsYWNlaG9sZGVyOnQsZGVmYXVsdEJsb2NrTm9kZTpuLGRlZmF1bHRDb250ZW50Tm9kZTpyLGRlZmF1bHRFbnZpcm9ubWVudDpvLGRlZmF1bHRJbmxpbmVOb2RlOmksbm9kZVZpZXdDb21wb25lbnRzOnN9PXRoaXMub3B0aW9ucztyZXR1cm5bbmV3IGRsKHtlbXB0eU5vZGVDbGFzczplLHBsYWNlaG9sZGVyOnQscHJpb3JpdHk6Y3QuTG93fSksbmV3IFRmKHtkZWZhdWx0QmxvY2tOb2RlOm4sZGVmYXVsdENvbnRlbnROb2RlOnIsZGVmYXVsdEVudmlyb25tZW50Om8sZGVmYXVsdElubGluZU5vZGU6aSxub2RlVmlld0NvbXBvbmVudHM6c30pXX19O05mPWVKKFtKZSh7ZGVmYXVsdE9wdGlvbnM6dEosc3RhdGljS2V5czpuSn0pXSxOZik7dmFyIGckPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShnJCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZnVuY3Rpb24gckooKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07aWYoZS5sZW5ndGg9PT0yKXJldHVybiBtQyhlWzBdLGVbMV0pfHxudWxsO3ZhciBuPWUuc2xpY2UoMSkucmVkdWNlKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIG1DKHIsbyl9LGVbMF0pO3JldHVybiBufHxudWxsfXZhciBMdT1nJC5kZWZhdWx0PXJKLGhDPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG1DKGUsdCl7aWYoZSYmdCl7dmFyIG49aEMuZ2V0KGUpfHxuZXcgV2Vha01hcDtoQy5zZXQoZSxuKTt2YXIgcj1uLmdldCh0KXx8ZnVuY3Rpb24obyl7Z0MoZSxvKSxnQyh0LG8pfTtyZXR1cm4gbi5zZXQodCxyKSxyfXJldHVybiBlfHx0fWZ1bmN0aW9uIGdDKGUsdCl7dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplLmN1cnJlbnQ9dH12YXIgdiQ9KGUsdCxuKT0+e2lmKCF0LmhhcyhlKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCAiK24pfSxCeT0oZSx0LG4pPT4odiQoZSx0LCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZCIpLG4/bi5jYWxsKGUpOnQuZ2V0KGUpKSxvSj0oZSx0LG4pPT57aWYodC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik7dCBpbnN0YW5jZW9mIFdlYWtTZXQ/dC5hZGQoZSk6dC5zZXQoZSxuKX0saUo9KGUsdCxuLHIpPT4odiQoZSx0LCJ3cml0ZSB0byBwcml2YXRlIGZpZWxkIikscj9yLmNhbGwoZSxuKTp0LnNldChlLG4pLG4pO2Z1bmN0aW9uIHNKKCl7Y29uc3RbLGVdPWgudXNlU3RhdGUoaGUoKSk7cmV0dXJuIGgudXNlQ2FsbGJhY2soKCk9PntlKGhlKCkpfSxbXSl9dmFyIHkkPWguY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBwdShlKXtjb25zdCB0PWgudXNlQ29udGV4dCh5JCksbj1oLnVzZVJlZihzSigpKTtiZSh0LHtjb2RlOnEuUkVBQ1RfUFJPVklERVJfQ09OVEVYVH0pO2NvbnN0e2FkZEhhbmRsZXI6cn09dDtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntsZXQgbz1lO2lmKG8pe2lmKGJsKG8pKXtjb25zdHthdXRvVXBkYXRlOml9PW87bz1pPygpPT5uLmN1cnJlbnQoKTp2b2lkIDB9aWYocHQobykpcmV0dXJuIHIoInVwZGF0ZWQiLG8pfX0sW3IsZV0pLHR9ZnVuY3Rpb24gYUooZT0hMCl7cmV0dXJuIHB1KHthdXRvVXBkYXRlOmV9KS5hY3RpdmV9ZnVuY3Rpb24gbEooZT0hMSl7cmV0dXJuIHB1KGU/e2F1dG9VcGRhdGU6ITB9OnZvaWQgMCkuYXR0cnN9ZnVuY3Rpb24gTXcoKXtyZXR1cm4gcHUoKS5jaGFpbi5uZXcoKX1mdW5jdGlvbiBjSihlLHQ9dm9pZCAwLG4pe2NvbnN0e2dldEV4dGVuc2lvbjpyfT1wdSgpLG89aC51c2VNZW1vKCgpPT5yKGUpLFtlLHJdKTtsZXQgaTtpZihwdCh0KT9pPW4/W28sLi4ubl06W28sdF06aT10P1tvLC4uLk9iamVjdC52YWx1ZXModCldOltdLGgudXNlRWZmZWN0KCgpPT57cHQodCl8fCF0fHxvLnNldE9wdGlvbnModCl9LGkpLGgudXNlRWZmZWN0KCgpPT57aWYocHQodCkpcmV0dXJuIHQoe2FkZEhhbmRsZXI6by5hZGRIYW5kbGVyLmJpbmQobyksYWRkQ3VzdG9tSGFuZGxlcjpvLmFkZEN1c3RvbUhhbmRsZXIuYmluZChvKSxleHRlbnNpb246b30pfSxpKSwhdClyZXR1cm4gb31mdW5jdGlvbiB1SihlLHQsbil7Y29uc3Qgcj1oLnVzZUNhbGxiYWNrKCh7YWRkSGFuZGxlcjpvfSk9Pm8odCxuKSxbbix0XSk7cmV0dXJuIGNKKGUscil9ZnVuY3Rpb24gZEooZSl7dUooVW0sImRvY0NoYW5nZWQiLGUpfWZ1bmN0aW9uIGZKKGU9ITEpe3JldHVybiBwdShlP3thdXRvVXBkYXRlOiEwfTp2b2lkIDApLmhlbHBlcnN9dmFyW3BKLEpsZV09aVcoKHtwcm9wczplfSk9Pntjb25zdCB0PWUubG9jYWxlPz8iZW4iLG49ZS5pMThuPz9jdixyPWUuc3VwcG9ydGVkTG9jYWxlcz8/W3RdLG89bi5fLmJpbmQobik7cmV0dXJue2xvY2FsZTp0LGkxOG46bixzdXBwb3J0ZWRMb2NhbGVzOnIsdDpvfX0pO2Z1bmN0aW9uIHZDKGUsdD17fSl7Y29uc3R7Y29yZTpuLHJlYWN0OnIsLi4ub309dDtyZXR1cm4gcUgoZSk/ZTpLSC5jcmVhdGUoKCk9PlsuLi5RTShlKSxuZXcgTmYociksLi4uS1oobildLG8pfWZ1bmN0aW9uIGhKKGUsdD17fSl7Y29uc3Qgbj1oLnVzZVJlZihlKSxyPWgudXNlUmVmKHQpLFtvLGldPWgudXNlU3RhdGUoKCk9PnZDKGUsdCkpO3JldHVybiBuLmN1cnJlbnQ9ZSxyLmN1cnJlbnQ9dCxoLnVzZUVmZmVjdCgoKT0+by5hZGRIYW5kbGVyKCJkZXN0cm95IiwoKT0+e2koKCk9PnZDKG4uY3VycmVudCxyLmN1cnJlbnQpKX0pLFtvXSksb312YXIgbUo9dHlwZW9mIEx1PT0ib2JqZWN0IiYmTHUuX19lc01vZHVsZSYmTHUuZGVmYXVsdD9MdS5kZWZhdWx0Okx1LEpsLGdKPWNsYXNzIGV4dGVuZHMgQkh7Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSksb0oodGhpcyxKbCx2b2lkIDApLHRoaXMucm9vdFByb3BzQ29uZmlnPXtjYWxsZWQ6ITEsY291bnQ6MH0sdGhpcy5nZXRSb290UHJvcHM9dD0+dGhpcy5pbnRlcm5hbEdldFJvb3RQcm9wcyh0LG51bGwpLHRoaXMuaW50ZXJuYWxHZXRSb290UHJvcHM9KHQsbik9Pnt0aGlzLnJvb3RQcm9wc0NvbmZpZy5jYWxsZWQ9ITA7Y29uc3R7cmVmS2V5OnI9InJlZiIscmVmOm8sLi4uaX09dD8/aGUoKTtyZXR1cm57W3JdOm1KKG8sdGhpcy5vblJlZiksa2V5OnRoaXMudWlkLC4uLmksY2hpbGRyZW46bn19LHRoaXMub25SZWY9dD0+e3QmJih0aGlzLnJvb3RQcm9wc0NvbmZpZy5jb3VudCs9MSxiZSh0aGlzLnJvb3RQcm9wc0NvbmZpZy5jb3VudDw9MSx7Y29kZTpxLlJFQUNUX0dFVF9ST09UX1BST1BTLG1lc3NhZ2U6YENhbGxlZCAke3RoaXMucm9vdFByb3BzQ29uZmlnLmNvdW50fSB0aW1lc2B9KSxpSih0aGlzLEpsLHQpLHRoaXMub25SZWZMb2FkKCkpfSx0aGlzLm1hbmFnZXIudmlldyl7dGhpcy5tYW5hZ2VyLnZpZXcuc2V0UHJvcHMoe3N0YXRlOnRoaXMubWFuYWdlci52aWV3LnN0YXRlLGRpc3BhdGNoVHJhbnNhY3Rpb246dGhpcy5kaXNwYXRjaFRyYW5zYWN0aW9uLGF0dHJpYnV0ZXM6KCk9PnRoaXMuZ2V0QXR0cmlidXRlcygpLGVkaXRhYmxlOigpPT50aGlzLnByb3BzLmVkaXRhYmxlPz8hMH0pO3JldHVybn10aGlzLm1hbmFnZXIuZ2V0RXh0ZW5zaW9uKGRsKS5zZXRPcHRpb25zKHtwbGFjZWhvbGRlcjp0aGlzLnByb3BzLnBsYWNlaG9sZGVyPz8iIn0pfWdldCBuYW1lKCl7cmV0dXJuInJlYWN0In11cGRhdGUoZSl7cmV0dXJuIHN1cGVyLnVwZGF0ZShlKSx0aGlzfWNyZWF0ZVZpZXcoZSl7cmV0dXJuIG5ldyBpVShudWxsLHtzdGF0ZTplLGRpc3BhdGNoVHJhbnNhY3Rpb246dGhpcy5kaXNwYXRjaFRyYW5zYWN0aW9uLGF0dHJpYnV0ZXM6KCk9PnRoaXMuZ2V0QXR0cmlidXRlcygpLGVkaXRhYmxlOigpPT50aGlzLnByb3BzLmVkaXRhYmxlPz8hMCxwbHVnaW5zOltdfSl9dXBkYXRlU3RhdGUoe3N0YXRlOmUsLi4udH0pe2NvbnN0e3RyaWdnZXJDaGFuZ2U6bj0hMCx0cjpyLHRyYW5zYWN0aW9uczpvfT10O2lmKHRoaXMucHJvcHMuc3RhdGUpe2NvbnN0e29uQ2hhbmdlOml9PXRoaXMucHJvcHM7YmUoaSx7Y29kZTpxLlJFQUNUX0NPTlRST0xMRUQsbWVzc2FnZToiWW91IGFyZSByZXF1aXJlZCB0byBwcm92aWRlIHRoZSBgb25DaGFuZ2VgIGhhbmRsZXIgd2hlbiBjcmVhdGluZyBhIGNvbnRyb2xsZWQgZWRpdG9yLiJ9KSxiZShuLHtjb2RlOnEuUkVBQ1RfQ09OVFJPTExFRCxtZXNzYWdlOiJDb250cm9sbGVkIGVkaXRvcnMgZG8gbm90IHN1cHBvcnQgYGNsZWFyQ29udGVudGAgb3IgYHNldENvbnRlbnRgIHdoZXJlIGB0cmlnZ2VyQ2hhbmdlYCBpcyBgdHJ1ZWAuIFVwZGF0ZSB0aGUgYHN0YXRlYCBwcm9wIGluc3RlYWQuIn0pLHRoaXMucHJldmlvdXNTdGF0ZU92ZXJyaWRlfHwodGhpcy5wcmV2aW91c1N0YXRlT3ZlcnJpZGU9dGhpcy5nZXRTdGF0ZSgpKSx0aGlzLm9uQ2hhbmdlKHtzdGF0ZTplLHRyOnIsdHJhbnNhY3Rpb25zOm99KTtyZXR1cm59IXImJiFvJiYoZT1lLmFwcGx5KGUudHIuc2V0TWV0YSgkRSx7fSkpKSx0aGlzLnZpZXcudXBkYXRlU3RhdGUoZSksbiYmKG89PW51bGw/dm9pZCAwOm8ubGVuZ3RoKSE9PTAmJnRoaXMub25DaGFuZ2Uoe3N0YXRlOmUsdHI6cix0cmFuc2FjdGlvbnM6b30pLHRoaXMubWFuYWdlci5vblN0YXRlVXBkYXRlKHtwcmV2aW91c1N0YXRlOnRoaXMucHJldmlvdXNTdGF0ZSxzdGF0ZTplLHRyOnIsdHJhbnNhY3Rpb25zOm99KX11cGRhdGVDb250cm9sbGVkU3RhdGUoZSx0KXt0aGlzLnByZXZpb3VzU3RhdGVPdmVycmlkZT10LGU9ZS5hcHBseShlLnRyLnNldE1ldGEoJEUse30pKSx0aGlzLnZpZXcudXBkYXRlU3RhdGUoZSksdGhpcy5tYW5hZ2VyLm9uU3RhdGVVcGRhdGUoe3ByZXZpb3VzU3RhdGU6dGhpcy5wcmV2aW91c1N0YXRlLHN0YXRlOmV9KSx0aGlzLnByZXZpb3VzU3RhdGVPdmVycmlkZT12b2lkIDB9YWRkUHJvc2VtaXJyb3JWaWV3VG9Eb20oZSx0KXt0aGlzLnByb3BzLmluc2VydFBvc2l0aW9uPT09InN0YXJ0Ij9lLmluc2VydEJlZm9yZSh0LGUuZmlyc3RDaGlsZCk6ZS5hcHBlbmQodCl9b25SZWZMb2FkKCl7YmUoQnkodGhpcyxKbCkse2NvZGU6cS5SRUFDVF9FRElUT1JfVklFVyxtZXNzYWdlOiJTb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIGluaXRpYWxpemluZyB0aGUgdGV4dCBlZGl0b3IuIFBsZWFzZSBjaGVjayB5b3VyIHNldHVwLiJ9KTtjb25zdHthdXRvRm9jdXM6ZX09dGhpcy5wcm9wczt0aGlzLmFkZFByb3NlbWlycm9yVmlld1RvRG9tKEJ5KHRoaXMsSmwpLHRoaXMudmlldy5kb20pLGUmJnRoaXMuZm9jdXMoZSksdGhpcy5vbkNoYW5nZSgpLHRoaXMuYWRkRm9jdXNMaXN0ZW5lcnMoKX1vblVwZGF0ZSgpe3RoaXMudmlldyYmQnkodGhpcyxKbCkmJnRoaXMudmlldy5zZXRQcm9wcyh7Li4udGhpcy52aWV3LnByb3BzLGVkaXRhYmxlOigpPT50aGlzLnByb3BzLmVkaXRhYmxlPz8hMH0pfWdldCBmcmFtZXdvcmtPdXRwdXQoKXtyZXR1cm57Li4udGhpcy5iYXNlT3V0cHV0LGdldFJvb3RQcm9wczp0aGlzLmdldFJvb3RQcm9wcyxwb3J0YWxDb250YWluZXI6dGhpcy5tYW5hZ2VyLnN0b3JlLnBvcnRhbENvbnRhaW5lcn19cmVzZXRSZW5kZXIoKXt0aGlzLnJvb3RQcm9wc0NvbmZpZy5jYWxsZWQ9ITEsdGhpcy5yb290UHJvcHNDb25maWcuY291bnQ9MH19O0psPW5ldyBXZWFrTWFwO3ZhciB4JD10eXBlb2YgZG9jdW1lbnQ8InUiP2gudXNlTGF5b3V0RWZmZWN0OmgudXNlRWZmZWN0O2Z1bmN0aW9uIHZKKGUpe2NvbnN0IHQ9aC51c2VSZWYoKTtyZXR1cm4geCQoKCk9Pnt0LmN1cnJlbnQ9ZX0pLHQuY3VycmVudH1mdW5jdGlvbiB5SihlKXtjb25zdHttYW5hZ2VyOnQsc3RhdGU6bn09ZSx7cGxhY2Vob2xkZXI6cixlZGl0YWJsZTpvfT1lO2gudXNlUmVmKCEwKS5jdXJyZW50JiYhWnMocikmJnQuZ2V0RXh0ZW5zaW9uKE5mKS5zZXRPcHRpb25zKHtwbGFjZWhvbGRlcjpyfSksaC51c2VFZmZlY3QoKCk9PntyIT1udWxsJiZ0LmdldEV4dGVuc2lvbihOZikuc2V0T3B0aW9ucyh7cGxhY2Vob2xkZXI6cn0pfSxbcix0XSk7Y29uc3Rbc109aC51c2VTdGF0ZSgoKT0+e2lmKG4pcmV0dXJuIG47Y29uc3QgbD10LmNyZWF0ZUVtcHR5RG9jKCksW2MsdV09ZW4oZS5pbml0aWFsQ29udGVudCk/ZS5pbml0aWFsQ29udGVudDpbZS5pbml0aWFsQ29udGVudD8/bF07cmV0dXJuIHQuY3JlYXRlU3RhdGUoe2NvbnRlbnQ6YyxzZWxlY3Rpb246dX0pfSksYT14Sih7aW5pdGlhbEVkaXRvclN0YXRlOnMsZ2V0UHJvcHM6KCk9PmV9KTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PigpPT57YS5kZXN0cm95KCl9LFthXSksaC51c2VFZmZlY3QoKCk9PnthLm9uVXBkYXRlKCl9LFtvLGFdKSxiSihhKSxhLmZyYW1ld29ya091dHB1dH1mdW5jdGlvbiB4SihlKXtjb25zdCB0PWgudXNlUmVmKGUpO3QuY3VycmVudD1lO2NvbnN0IG49aC51c2VNZW1vKCgpPT5uZXcgZ0oodC5jdXJyZW50KSxbXSk7cmV0dXJuIG4udXBkYXRlKGUpLG59ZnVuY3Rpb24gYkooZSl7Y29uc3R7c3RhdGU6dH09ZS5wcm9wcyxuPWgudXNlUmVmKCEhdCkscj12Sih0KTt4JCgoKT0+e2NvbnN0IG89dD9uLmN1cnJlbnQ9PT0hMDpuLmN1cnJlbnQ9PT0hMTtiZShvLHtjb2RlOnEuUkVBQ1RfQ09OVFJPTExFRCxtZXNzYWdlOm4uY3VycmVudD8iWW91IGhhdmUgYXR0ZW1wdGVkIHRvIHN3aXRjaCBmcm9tIGEgY29udHJvbGxlZCB0byBhbiB1bmNvbnRyb2xsZWQgZWRpdG9yLiBPbmNlIHlvdSBzZXQgdXAgYW4gZWRpdG9yIGFzIGEgY29udHJvbGxlZCBlZGl0b3IgaXQgbXVzdCBhbHdheXMgcHJvdmlkZSBhIGBzdGF0ZWAgcHJvcC4iOiJZb3UgaGF2ZSBwcm92aWRlZCBhIGBzdGF0ZWAgcHJvcCB0byBhbiB1bmNvbnRyb2xsZWQgZWRpdG9yLiBJbiBvcmRlciB0byBzZXQgdXAgeW91ciBlZGl0b3IgYXMgY29udHJvbGxlZCB5b3UgbXVzdCBwcm92aWRlIHRoZSBgc3RhdGVgIHByb3AgZnJvbSB0aGUgdmVyeSBmaXJzdCByZW5kZXIuIn0pLCEoIXR8fHQ9PT1yKSYmZS51cGRhdGVDb250cm9sbGVkU3RhdGUodCxyPz92b2lkIDApfSxbdCxyLGVdKX1mdW5jdGlvbiB3SihlPXt9KXtjb25zdHtjb250ZW50OnQsZG9jdW1lbnQ6bixzZWxlY3Rpb246cixleHRlbnNpb25zOm8sLi4uaX09ZSxzPWhKKG8/PygoKT0+W10pLGkpLFthLGxdPWgudXNlU3RhdGUoKCk9PnMuY3JlYXRlU3RhdGUoe3NlbGVjdGlvbjpyLGNvbnRlbnQ6dD8/cy5jcmVhdGVFbXB0eURvYygpfSkpLGM9aC51c2VDYWxsYmFjaygoe3N0YXRlOmR9KT0+e2woZCl9LFtdKSx1PWgudXNlQ2FsbGJhY2soKCk9PnMub3V0cHV0LFtzXSk7cmV0dXJuIGgudXNlTWVtbygoKT0+KHtzdGF0ZTphLHNldFN0YXRlOmwsbWFuYWdlcjpzLG9uQ2hhbmdlOmMsZ2V0Q29udGV4dDp1fSksW3UscyxjLGFdKX12YXIgU0o9KHtvbkNoYW5nZTplfSk9Pntjb25zdHtnZXRKU09OOnR9PWZKKCk7cmV0dXJuIGRKKGgudXNlQ2FsbGJhY2soKHtzdGF0ZTpufSk9Pntjb25zdCByPXQobik7ZShyKX0sW2UsdF0pKSxudWxsfSxpYj0oKT0+WC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ZlouRURJVE9SX1dSQVBQRVIsLi4ucHUoKS5nZXRSb290UHJvcHMoKX0pLGtKPWU9PihlLmhvb2soKSxudWxsKTtmdW5jdGlvbiBFSihlKXtjb25zdHtjaGlsZHJlbjp0LGF1dG9SZW5kZXI6bixpMThuOnIsbG9jYWxlOm8sc3VwcG9ydGVkTG9jYWxlczppLGhvb2tzOnM9W10sLi4uYX09ZSxsPXlKKGEpLGM9UUgobC5wb3J0YWxDb250YWluZXIpLHU9bj09PSJzdGFydCJ8fG49PT0hMHx8IXQmJlpzKG4pLGQ9bj09PSJlbmQiO3JldHVybiBYLmNyZWF0ZUVsZW1lbnQocEose2kxOG46cixsb2NhbGU6byxzdXBwb3J0ZWRMb2NhbGVzOml9LFguY3JlYXRlRWxlbWVudCh5JC5Qcm92aWRlcix7dmFsdWU6bH0sWC5jcmVhdGVFbGVtZW50KEpILHtwb3J0YWxzOmN9KSxzLm1hcCgoZixwKT0+WC5jcmVhdGVFbGVtZW50KGtKLHtob29rOmYsa2V5OnB9KSksdSYmWC5jcmVhdGVFbGVtZW50KGliLG51bGwpLHQsZCYmWC5jcmVhdGVFbGVtZW50KGliLG51bGwpKSl9Y29uc3QgX0o9WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxuYT1NYXRoLm1pbix3cj1NYXRoLm1heCxHbT1NYXRoLnJvdW5kLEdwPU1hdGguZmxvb3IscmE9ZT0+KHt4OmUseTplfSksQ0o9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsYm90dG9tOiJ0b3AiLHRvcDoiYm90dG9tIn0sT0o9e3N0YXJ0OiJlbmQiLGVuZDoic3RhcnQifTtmdW5jdGlvbiBzYihlLHQsbil7cmV0dXJuIHdyKGUsbmEodCxuKSl9ZnVuY3Rpb24gamkoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplfWZ1bmN0aW9uIHppKGUpe3JldHVybiBlLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gaHUoZSl7cmV0dXJuIGUuc3BsaXQoIi0iKVsxXX1mdW5jdGlvbiBSdyhlKXtyZXR1cm4gZT09PSJ4Ij8ieSI6IngifWZ1bmN0aW9uIE53KGUpe3JldHVybiBlPT09InkiPyJoZWlnaHQiOiJ3aWR0aCJ9ZnVuY3Rpb24gbXUoZSl7cmV0dXJuWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh6aShlKSk/InkiOiJ4In1mdW5jdGlvbiAkdyhlKXtyZXR1cm4gUncobXUoZSkpfWZ1bmN0aW9uIFRKKGUsdCxuKXtuPT09dm9pZCAwJiYobj0hMSk7Y29uc3Qgcj1odShlKSxvPSR3KGUpLGk9Tncobyk7bGV0IHM9bz09PSJ4Ij9yPT09KG4/ImVuZCI6InN0YXJ0Iik/InJpZ2h0IjoibGVmdCI6cj09PSJzdGFydCI/ImJvdHRvbSI6InRvcCI7cmV0dXJuIHQucmVmZXJlbmNlW2ldPnQuZmxvYXRpbmdbaV0mJihzPVltKHMpKSxbcyxZbShzKV19ZnVuY3Rpb24gUEooZSl7Y29uc3QgdD1ZbShlKTtyZXR1cm5bYWIoZSksdCxhYih0KV19ZnVuY3Rpb24gYWIoZSl7cmV0dXJuIGUucmVwbGFjZSgvc3RhcnR8ZW5kL2csdD0+T0pbdF0pfWZ1bmN0aW9uIE1KKGUsdCxuKXtjb25zdCByPVsibGVmdCIsInJpZ2h0Il0sbz1bInJpZ2h0IiwibGVmdCJdLGk9WyJ0b3AiLCJib3R0b20iXSxzPVsiYm90dG9tIiwidG9wIl07c3dpdGNoKGUpe2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6cmV0dXJuIG4/dD9vOnI6dD9yOm87Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpyZXR1cm4gdD9pOnM7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gUkooZSx0LG4scil7Y29uc3Qgbz1odShlKTtsZXQgaT1NSih6aShlKSxuPT09InN0YXJ0IixyKTtyZXR1cm4gbyYmKGk9aS5tYXAocz0+cysiLSIrbyksdCYmKGk9aS5jb25jYXQoaS5tYXAoYWIpKSkpLGl9ZnVuY3Rpb24gWW0oZSl7cmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csdD0+Q0pbdF0pfWZ1bmN0aW9uIE5KKGUpe3JldHVybnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi5lfX1mdW5jdGlvbiBiJChlKXtyZXR1cm4gdHlwZW9mIGUhPSJudW1iZXIiP05KKGUpOnt0b3A6ZSxyaWdodDplLGJvdHRvbTplLGxlZnQ6ZX19ZnVuY3Rpb24gWG0oZSl7cmV0dXJuey4uLmUsdG9wOmUueSxsZWZ0OmUueCxyaWdodDplLngrZS53aWR0aCxib3R0b206ZS55K2UuaGVpZ2h0fX1mdW5jdGlvbiB5QyhlLHQsbil7bGV0e3JlZmVyZW5jZTpyLGZsb2F0aW5nOm99PWU7Y29uc3QgaT1tdSh0KSxzPSR3KHQpLGE9TncocyksbD16aSh0KSxjPWk9PT0ieSIsdT1yLngrci53aWR0aC8yLW8ud2lkdGgvMixkPXIueStyLmhlaWdodC8yLW8uaGVpZ2h0LzIsZj1yW2FdLzItb1thXS8yO2xldCBwO3N3aXRjaChsKXtjYXNlInRvcCI6cD17eDp1LHk6ci55LW8uaGVpZ2h0fTticmVhaztjYXNlImJvdHRvbSI6cD17eDp1LHk6ci55K3IuaGVpZ2h0fTticmVhaztjYXNlInJpZ2h0IjpwPXt4OnIueCtyLndpZHRoLHk6ZH07YnJlYWs7Y2FzZSJsZWZ0IjpwPXt4OnIueC1vLndpZHRoLHk6ZH07YnJlYWs7ZGVmYXVsdDpwPXt4OnIueCx5OnIueX19c3dpdGNoKGh1KHQpKXtjYXNlInN0YXJ0IjpwW3NdLT1mKihuJiZjPy0xOjEpO2JyZWFrO2Nhc2UiZW5kIjpwW3NdKz1mKihuJiZjPy0xOjEpO2JyZWFrfXJldHVybiBwfWNvbnN0ICRKPWFzeW5jKGUsdCxuKT0+e2NvbnN0e3BsYWNlbWVudDpyPSJib3R0b20iLHN0cmF0ZWd5Om89ImFic29sdXRlIixtaWRkbGV3YXJlOmk9W10scGxhdGZvcm06c309bixhPWkuZmlsdGVyKEJvb2xlYW4pLGw9YXdhaXQocy5pc1JUTD09bnVsbD92b2lkIDA6cy5pc1JUTCh0KSk7bGV0IGM9YXdhaXQgcy5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6b30pLHt4OnUseTpkfT15QyhjLHIsbCksZj1yLHA9e30sbT0wO2ZvcihsZXQgZz0wO2c8YS5sZW5ndGg7ZysrKXtjb25zdHtuYW1lOnksZm46dn09YVtnXSx7eCx5OncsZGF0YTprLHJlc2V0OkV9PWF3YWl0IHYoe3g6dSx5OmQsaW5pdGlhbFBsYWNlbWVudDpyLHBsYWNlbWVudDpmLHN0cmF0ZWd5Om8sbWlkZGxld2FyZURhdGE6cCxyZWN0czpjLHBsYXRmb3JtOnMsZWxlbWVudHM6e3JlZmVyZW5jZTplLGZsb2F0aW5nOnR9fSk7aWYodT14Pz91LGQ9dz8/ZCxwPXsuLi5wLFt5XTp7Li4ucFt5XSwuLi5rfX0sRSYmbTw9NTApe20rKyx0eXBlb2YgRT09Im9iamVjdCImJihFLnBsYWNlbWVudCYmKGY9RS5wbGFjZW1lbnQpLEUucmVjdHMmJihjPUUucmVjdHM9PT0hMD9hd2FpdCBzLmdldEVsZW1lbnRSZWN0cyh7cmVmZXJlbmNlOmUsZmxvYXRpbmc6dCxzdHJhdGVneTpvfSk6RS5yZWN0cykse3g6dSx5OmR9PXlDKGMsZixsKSksZz0tMTtjb250aW51ZX19cmV0dXJue3g6dSx5OmQscGxhY2VtZW50OmYsc3RyYXRlZ3k6byxtaWRkbGV3YXJlRGF0YTpwfX07YXN5bmMgZnVuY3Rpb24gJGYoZSx0KXt2YXIgbjt0PT09dm9pZCAwJiYodD17fSk7Y29uc3R7eDpyLHk6byxwbGF0Zm9ybTppLHJlY3RzOnMsZWxlbWVudHM6YSxzdHJhdGVneTpsfT1lLHtib3VuZGFyeTpjPSJjbGlwcGluZ0FuY2VzdG9ycyIscm9vdEJvdW5kYXJ5OnU9InZpZXdwb3J0IixlbGVtZW50Q29udGV4dDpkPSJmbG9hdGluZyIsYWx0Qm91bmRhcnk6Zj0hMSxwYWRkaW5nOnA9MH09amkodCxlKSxtPWIkKHApLHk9YVtmP2Q9PT0iZmxvYXRpbmciPyJyZWZlcmVuY2UiOiJmbG9hdGluZyI6ZF0sdj1YbShhd2FpdCBpLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDoobj1hd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQoeSkpKT09bnVsbHx8bj95OnkuY29udGV4dEVsZW1lbnR8fGF3YWl0KGkuZ2V0RG9jdW1lbnRFbGVtZW50PT1udWxsP3ZvaWQgMDppLmdldERvY3VtZW50RWxlbWVudChhLmZsb2F0aW5nKSksYm91bmRhcnk6Yyxyb290Qm91bmRhcnk6dSxzdHJhdGVneTpsfSkpLHg9ZD09PSJmbG9hdGluZyI/ey4uLnMuZmxvYXRpbmcseDpyLHk6b306cy5yZWZlcmVuY2Usdz1hd2FpdChpLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6aS5nZXRPZmZzZXRQYXJlbnQoYS5mbG9hdGluZykpLGs9YXdhaXQoaS5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmkuaXNFbGVtZW50KHcpKT9hd2FpdChpLmdldFNjYWxlPT1udWxsP3ZvaWQgMDppLmdldFNjYWxlKHcpKXx8e3g6MSx5OjF9Ont4OjEseToxfSxFPVhtKGkuY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Q/YXdhaXQgaS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7cmVjdDp4LG9mZnNldFBhcmVudDp3LHN0cmF0ZWd5Omx9KTp4KTtyZXR1cm57dG9wOih2LnRvcC1FLnRvcCttLnRvcCkvay55LGJvdHRvbTooRS5ib3R0b20tdi5ib3R0b20rbS5ib3R0b20pL2sueSxsZWZ0Oih2LmxlZnQtRS5sZWZ0K20ubGVmdCkvay54LHJpZ2h0OihFLnJpZ2h0LXYucmlnaHQrbS5yaWdodCkvay54fX1jb25zdCBBSj1lPT4oe25hbWU6ImFycm93IixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6byxyZWN0czppLHBsYXRmb3JtOnMsZWxlbWVudHM6YSxtaWRkbGV3YXJlRGF0YTpsfT10LHtlbGVtZW50OmMscGFkZGluZzp1PTB9PWppKGUsdCl8fHt9O2lmKGM9PW51bGwpcmV0dXJue307Y29uc3QgZD1iJCh1KSxmPXt4Om4seTpyfSxwPSR3KG8pLG09TncocCksZz1hd2FpdCBzLmdldERpbWVuc2lvbnMoYykseT1wPT09InkiLHY9eT8idG9wIjoibGVmdCIseD15PyJib3R0b20iOiJyaWdodCIsdz15PyJjbGllbnRIZWlnaHQiOiJjbGllbnRXaWR0aCIsaz1pLnJlZmVyZW5jZVttXStpLnJlZmVyZW5jZVtwXS1mW3BdLWkuZmxvYXRpbmdbbV0sRT1mW3BdLWkucmVmZXJlbmNlW3BdLFM9YXdhaXQocy5nZXRPZmZzZXRQYXJlbnQ9PW51bGw/dm9pZCAwOnMuZ2V0T2Zmc2V0UGFyZW50KGMpKTtsZXQgXz1TP1Nbd106MDsoIV98fCFhd2FpdChzLmlzRWxlbWVudD09bnVsbD92b2lkIDA6cy5pc0VsZW1lbnQoUykpKSYmKF89YS5mbG9hdGluZ1t3XXx8aS5mbG9hdGluZ1ttXSk7Y29uc3QgUD1rLzItRS8yLE09Xy8yLWdbbV0vMi0xLEE9bmEoZFt2XSxNKSxJPW5hKGRbeF0sTSksTD1BLHJlPV8tZ1ttXS1JLFY9Xy8yLWdbbV0vMitQLEs9c2IoTCxWLHJlKSxDPSFsLmFycm93JiZodShvKSE9bnVsbCYmViE9SyYmaS5yZWZlcmVuY2VbbV0vMi0oVjxMP0E6SSktZ1ttXS8yPDAsVD1DP1Y8TD9WLUw6Vi1yZTowO3JldHVybntbcF06ZltwXStULGRhdGE6e1twXTpLLGNlbnRlck9mZnNldDpWLUstVCwuLi5DJiZ7YWxpZ25tZW50T2Zmc2V0OlR9fSxyZXNldDpDfX19KSxESj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOiJmbGlwIixvcHRpb25zOmUsYXN5bmMgZm4odCl7dmFyIG4scjtjb25zdHtwbGFjZW1lbnQ6byxtaWRkbGV3YXJlRGF0YTppLHJlY3RzOnMsaW5pdGlhbFBsYWNlbWVudDphLHBsYXRmb3JtOmwsZWxlbWVudHM6Y309dCx7bWFpbkF4aXM6dT0hMCxjcm9zc0F4aXM6ZD0hMCxmYWxsYmFja1BsYWNlbWVudHM6ZixmYWxsYmFja1N0cmF0ZWd5OnA9ImJlc3RGaXQiLGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb246bT0ibm9uZSIsZmxpcEFsaWdubWVudDpnPSEwLC4uLnl9PWppKGUsdCk7aWYoKG49aS5hcnJvdykhPW51bGwmJm4uYWxpZ25tZW50T2Zmc2V0KXJldHVybnt9O2NvbnN0IHY9emkobykseD16aShhKT09PWEsdz1hd2FpdChsLmlzUlRMPT1udWxsP3ZvaWQgMDpsLmlzUlRMKGMuZmxvYXRpbmcpKSxrPWZ8fCh4fHwhZz9bWW0oYSldOlBKKGEpKTshZiYmbSE9PSJub25lIiYmay5wdXNoKC4uLlJKKGEsZyxtLHcpKTtjb25zdCBFPVthLC4uLmtdLFM9YXdhaXQgJGYodCx5KSxfPVtdO2xldCBQPSgocj1pLmZsaXApPT1udWxsP3ZvaWQgMDpyLm92ZXJmbG93cyl8fFtdO2lmKHUmJl8ucHVzaChTW3ZdKSxkKXtjb25zdCBMPVRKKG8scyx3KTtfLnB1c2goU1tMWzBdXSxTW0xbMV1dKX1pZihQPVsuLi5QLHtwbGFjZW1lbnQ6byxvdmVyZmxvd3M6X31dLCFfLmV2ZXJ5KEw9Pkw8PTApKXt2YXIgTSxBO2NvbnN0IEw9KCgoTT1pLmZsaXApPT1udWxsP3ZvaWQgMDpNLmluZGV4KXx8MCkrMSxyZT1FW0xdO2lmKHJlKXJldHVybntkYXRhOntpbmRleDpMLG92ZXJmbG93czpQfSxyZXNldDp7cGxhY2VtZW50OnJlfX07bGV0IFY9KEE9UC5maWx0ZXIoSz0+Sy5vdmVyZmxvd3NbMF08PTApLnNvcnQoKEssQyk9Pksub3ZlcmZsb3dzWzFdLUMub3ZlcmZsb3dzWzFdKVswXSk9PW51bGw/dm9pZCAwOkEucGxhY2VtZW50O2lmKCFWKXN3aXRjaChwKXtjYXNlImJlc3RGaXQiOnt2YXIgSTtjb25zdCBLPShJPVAubWFwKEM9PltDLnBsYWNlbWVudCxDLm92ZXJmbG93cy5maWx0ZXIoVD0+VD4wKS5yZWR1Y2UoKFQsTyk9PlQrTywwKV0pLnNvcnQoKEMsVCk9PkNbMV0tVFsxXSlbMF0pPT1udWxsP3ZvaWQgMDpJWzBdO0smJihWPUspO2JyZWFrfWNhc2UiaW5pdGlhbFBsYWNlbWVudCI6Vj1hO2JyZWFrfWlmKG8hPT1WKXJldHVybntyZXNldDp7cGxhY2VtZW50OlZ9fX1yZXR1cm57fX19fTtmdW5jdGlvbiB4QyhlLHQpe3JldHVybnt0b3A6ZS50b3AtdC5oZWlnaHQscmlnaHQ6ZS5yaWdodC10LndpZHRoLGJvdHRvbTplLmJvdHRvbS10LmhlaWdodCxsZWZ0OmUubGVmdC10LndpZHRofX1mdW5jdGlvbiBiQyhlKXtyZXR1cm4gX0ouc29tZSh0PT5lW3RdPj0wKX1jb25zdCBJSj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOiJoaWRlIixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7cmVjdHM6bn09dCx7c3RyYXRlZ3k6cj0icmVmZXJlbmNlSGlkZGVuIiwuLi5vfT1qaShlLHQpO3N3aXRjaChyKXtjYXNlInJlZmVyZW5jZUhpZGRlbiI6e2NvbnN0IGk9YXdhaXQgJGYodCx7Li4ubyxlbGVtZW50Q29udGV4dDoicmVmZXJlbmNlIn0pLHM9eEMoaSxuLnJlZmVyZW5jZSk7cmV0dXJue2RhdGE6e3JlZmVyZW5jZUhpZGRlbk9mZnNldHM6cyxyZWZlcmVuY2VIaWRkZW46YkMocyl9fX1jYXNlImVzY2FwZWQiOntjb25zdCBpPWF3YWl0ICRmKHQsey4uLm8sYWx0Qm91bmRhcnk6ITB9KSxzPXhDKGksbi5mbG9hdGluZyk7cmV0dXJue2RhdGE6e2VzY2FwZWRPZmZzZXRzOnMsZXNjYXBlZDpiQyhzKX19fWRlZmF1bHQ6cmV0dXJue319fX19O2FzeW5jIGZ1bmN0aW9uIExKKGUsdCl7Y29uc3R7cGxhY2VtZW50Om4scGxhdGZvcm06cixlbGVtZW50czpvfT1lLGk9YXdhaXQoci5pc1JUTD09bnVsbD92b2lkIDA6ci5pc1JUTChvLmZsb2F0aW5nKSkscz16aShuKSxhPWh1KG4pLGw9bXUobik9PT0ieSIsYz1bImxlZnQiLCJ0b3AiXS5pbmNsdWRlcyhzKT8tMToxLHU9aSYmbD8tMToxLGQ9amkodCxlKTtsZXR7bWFpbkF4aXM6Zixjcm9zc0F4aXM6cCxhbGlnbm1lbnRBeGlzOm19PXR5cGVvZiBkPT0ibnVtYmVyIj97bWFpbkF4aXM6ZCxjcm9zc0F4aXM6MCxhbGlnbm1lbnRBeGlzOm51bGx9OnttYWluQXhpczowLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbCwuLi5kfTtyZXR1cm4gYSYmdHlwZW9mIG09PSJudW1iZXIiJiYocD1hPT09ImVuZCI/bSotMTptKSxsP3t4OnAqdSx5OmYqY306e3g6ZipjLHk6cCp1fX1jb25zdCBqSj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCkse25hbWU6Im9mZnNldCIsb3B0aW9uczplLGFzeW5jIGZuKHQpe3ZhciBuLHI7Y29uc3R7eDpvLHk6aSxwbGFjZW1lbnQ6cyxtaWRkbGV3YXJlRGF0YTphfT10LGw9YXdhaXQgTEoodCxlKTtyZXR1cm4gcz09PSgobj1hLm9mZnNldCk9PW51bGw/dm9pZCAwOm4ucGxhY2VtZW50KSYmKHI9YS5hcnJvdykhPW51bGwmJnIuYWxpZ25tZW50T2Zmc2V0P3t9Ont4Om8rbC54LHk6aStsLnksZGF0YTp7Li4ubCxwbGFjZW1lbnQ6c319fX19LHpKPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6b309dCx7bWFpbkF4aXM6aT0hMCxjcm9zc0F4aXM6cz0hMSxsaW1pdGVyOmE9e2ZuOnk9PntsZXR7eDp2LHk6eH09eTtyZXR1cm57eDp2LHk6eH19fSwuLi5sfT1qaShlLHQpLGM9e3g6bix5OnJ9LHU9YXdhaXQgJGYodCxsKSxkPW11KHppKG8pKSxmPVJ3KGQpO2xldCBwPWNbZl0sbT1jW2RdO2lmKGkpe2NvbnN0IHk9Zj09PSJ5Ij8idG9wIjoibGVmdCIsdj1mPT09InkiPyJib3R0b20iOiJyaWdodCIseD1wK3VbeV0sdz1wLXVbdl07cD1zYih4LHAsdyl9aWYocyl7Y29uc3QgeT1kPT09InkiPyJ0b3AiOiJsZWZ0Iix2PWQ9PT0ieSI/ImJvdHRvbSI6InJpZ2h0Iix4PW0rdVt5XSx3PW0tdVt2XTttPXNiKHgsbSx3KX1jb25zdCBnPWEuZm4oey4uLnQsW2ZdOnAsW2RdOm19KTtyZXR1cm57Li4uZyxkYXRhOnt4OmcueC1uLHk6Zy55LXJ9fX19fSxGSj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtvcHRpb25zOmUsZm4odCl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6byxyZWN0czppLG1pZGRsZXdhcmVEYXRhOnN9PXQse29mZnNldDphPTAsbWFpbkF4aXM6bD0hMCxjcm9zc0F4aXM6Yz0hMH09amkoZSx0KSx1PXt4Om4seTpyfSxkPW11KG8pLGY9UncoZCk7bGV0IHA9dVtmXSxtPXVbZF07Y29uc3QgZz1qaShhLHQpLHk9dHlwZW9mIGc9PSJudW1iZXIiP3ttYWluQXhpczpnLGNyb3NzQXhpczowfTp7bWFpbkF4aXM6MCxjcm9zc0F4aXM6MCwuLi5nfTtpZihsKXtjb25zdCB3PWY9PT0ieSI/ImhlaWdodCI6IndpZHRoIixrPWkucmVmZXJlbmNlW2ZdLWkuZmxvYXRpbmdbd10reS5tYWluQXhpcyxFPWkucmVmZXJlbmNlW2ZdK2kucmVmZXJlbmNlW3ddLXkubWFpbkF4aXM7cDxrP3A9azpwPkUmJihwPUUpfWlmKGMpe3ZhciB2LHg7Y29uc3Qgdz1mPT09InkiPyJ3aWR0aCI6ImhlaWdodCIsaz1bInRvcCIsImxlZnQiXS5pbmNsdWRlcyh6aShvKSksRT1pLnJlZmVyZW5jZVtkXS1pLmZsb2F0aW5nW3ddKyhrJiYoKHY9cy5vZmZzZXQpPT1udWxsP3ZvaWQgMDp2W2RdKXx8MCkrKGs/MDp5LmNyb3NzQXhpcyksUz1pLnJlZmVyZW5jZVtkXStpLnJlZmVyZW5jZVt3XSsoaz8wOigoeD1zLm9mZnNldCk9PW51bGw/dm9pZCAwOnhbZF0pfHwwKS0oaz95LmNyb3NzQXhpczowKTttPEU/bT1FOm0+UyYmKG09Uyl9cmV0dXJue1tmXTpwLFtkXTptfX19fSxCSj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOiJzaXplIixvcHRpb25zOmUsYXN5bmMgZm4odCl7Y29uc3R7cGxhY2VtZW50Om4scmVjdHM6cixwbGF0Zm9ybTpvLGVsZW1lbnRzOml9PXQse2FwcGx5OnM9KCk9Pnt9LC4uLmF9PWppKGUsdCksbD1hd2FpdCAkZih0LGEpLGM9emkobiksdT1odShuKSxkPW11KG4pPT09InkiLHt3aWR0aDpmLGhlaWdodDpwfT1yLmZsb2F0aW5nO2xldCBtLGc7Yz09PSJ0b3AifHxjPT09ImJvdHRvbSI/KG09YyxnPXU9PT0oYXdhaXQoby5pc1JUTD09bnVsbD92b2lkIDA6by5pc1JUTChpLmZsb2F0aW5nKSk/InN0YXJ0IjoiZW5kIik/ImxlZnQiOiJyaWdodCIpOihnPWMsbT11PT09ImVuZCI/InRvcCI6ImJvdHRvbSIpO2NvbnN0IHk9cC1sW21dLHY9Zi1sW2ddLHg9IXQubWlkZGxld2FyZURhdGEuc2hpZnQ7bGV0IHc9eSxrPXY7aWYoZCl7Y29uc3QgUz1mLWwubGVmdC1sLnJpZ2h0O2s9dXx8eD9uYSh2LFMpOlN9ZWxzZXtjb25zdCBTPXAtbC50b3AtbC5ib3R0b207dz11fHx4P25hKHksUyk6U31pZih4JiYhdSl7Y29uc3QgUz13cihsLmxlZnQsMCksXz13cihsLnJpZ2h0LDApLFA9d3IobC50b3AsMCksTT13cihsLmJvdHRvbSwwKTtkP2s9Zi0yKihTIT09MHx8XyE9PTA/UytfOndyKGwubGVmdCxsLnJpZ2h0KSk6dz1wLTIqKFAhPT0wfHxNIT09MD9QK006d3IobC50b3AsbC5ib3R0b20pKX1hd2FpdCBzKHsuLi50LGF2YWlsYWJsZVdpZHRoOmssYXZhaWxhYmxlSGVpZ2h0Ond9KTtjb25zdCBFPWF3YWl0IG8uZ2V0RGltZW5zaW9ucyhpLmZsb2F0aW5nKTtyZXR1cm4gZiE9PUUud2lkdGh8fHAhPT1FLmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fX07ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIHckKGUpPyhlLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKToiI2RvY3VtZW50In1mdW5jdGlvbiBfcihlKXt2YXIgdDtyZXR1cm4oZT09bnVsbHx8KHQ9ZS5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6dC5kZWZhdWx0Vmlldyl8fHdpbmRvd31mdW5jdGlvbiBLaShlKXt2YXIgdDtyZXR1cm4odD0odyQoZSk/ZS5vd25lckRvY3VtZW50OmUuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiB3JChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE5vZGV8fGUgaW5zdGFuY2VvZiBfcihlKS5Ob2RlfWZ1bmN0aW9uIEZpKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRWxlbWVudHx8ZSBpbnN0YW5jZW9mIF9yKGUpLkVsZW1lbnR9ZnVuY3Rpb24gb2koZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZSBpbnN0YW5jZW9mIF9yKGUpLkhUTUxFbGVtZW50fWZ1bmN0aW9uIHdDKGUpe3JldHVybiB0eXBlb2YgU2hhZG93Um9vdD4idSI/ITE6ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fGUgaW5zdGFuY2VvZiBfcihlKS5TaGFkb3dSb290fWZ1bmN0aW9uIGRwKGUpe2NvbnN0e292ZXJmbG93OnQsb3ZlcmZsb3dYOm4sb3ZlcmZsb3dZOnIsZGlzcGxheTpvfT1lbyhlKTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdCh0K3IrbikmJiFbImlubGluZSIsImNvbnRlbnRzIl0uaW5jbHVkZXMobyl9ZnVuY3Rpb24gVUooZSl7cmV0dXJuWyJ0YWJsZSIsInRkIiwidGgiXS5pbmNsdWRlcyhvYShlKSl9ZnVuY3Rpb24gQXcoZSl7Y29uc3QgdD1EdygpLG49ZW8oZSk7cmV0dXJuIG4udHJhbnNmb3JtIT09Im5vbmUifHxuLnBlcnNwZWN0aXZlIT09Im5vbmUifHwobi5jb250YWluZXJUeXBlP24uY29udGFpbmVyVHlwZSE9PSJub3JtYWwiOiExKXx8IXQmJihuLmJhY2tkcm9wRmlsdGVyP24uYmFja2Ryb3BGaWx0ZXIhPT0ibm9uZSI6ITEpfHwhdCYmKG4uZmlsdGVyP24uZmlsdGVyIT09Im5vbmUiOiExKXx8WyJ0cmFuc2Zvcm0iLCJwZXJzcGVjdGl2ZSIsImZpbHRlciJdLnNvbWUocj0+KG4ud2lsbENoYW5nZXx8IiIpLmluY2x1ZGVzKHIpKXx8WyJwYWludCIsImxheW91dCIsInN0cmljdCIsImNvbnRlbnQiXS5zb21lKHI9PihuLmNvbnRhaW58fCIiKS5pbmNsdWRlcyhyKSl9ZnVuY3Rpb24gVkooZSl7bGV0IHQ9SmMoZSk7Zm9yKDtvaSh0KSYmIWZ2KHQpOyl7aWYoQXcodCkpcmV0dXJuIHQ7dD1KYyh0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEdygpe3JldHVybiB0eXBlb2YgQ1NTPiJ1Inx8IUNTUy5zdXBwb3J0cz8hMTpDU1Muc3VwcG9ydHMoIi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIiwibm9uZSIpfWZ1bmN0aW9uIGZ2KGUpe3JldHVyblsiaHRtbCIsImJvZHkiLCIjZG9jdW1lbnQiXS5pbmNsdWRlcyhvYShlKSl9ZnVuY3Rpb24gZW8oZSl7cmV0dXJuIF9yKGUpLmdldENvbXB1dGVkU3R5bGUoZSl9ZnVuY3Rpb24gcHYoZSl7cmV0dXJuIEZpKGUpP3tzY3JvbGxMZWZ0OmUuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6ZS5zY3JvbGxUb3B9OntzY3JvbGxMZWZ0OmUucGFnZVhPZmZzZXQsc2Nyb2xsVG9wOmUucGFnZVlPZmZzZXR9fWZ1bmN0aW9uIEpjKGUpe2lmKG9hKGUpPT09Imh0bWwiKXJldHVybiBlO2NvbnN0IHQ9ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8d0MoZSkmJmUuaG9zdHx8S2koZSk7cmV0dXJuIHdDKHQpP3QuaG9zdDp0fWZ1bmN0aW9uIFMkKGUpe2NvbnN0IHQ9SmMoZSk7cmV0dXJuIGZ2KHQpP2Uub3duZXJEb2N1bWVudD9lLm93bmVyRG9jdW1lbnQuYm9keTplLmJvZHk6b2kodCkmJmRwKHQpP3Q6UyQodCl9ZnVuY3Rpb24gQWYoZSx0LG4pe3ZhciByO3Q9PT12b2lkIDAmJih0PVtdKSxuPT09dm9pZCAwJiYobj0hMCk7Y29uc3Qgbz1TJChlKSxpPW89PT0oKHI9ZS5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6ci5ib2R5KSxzPV9yKG8pO3JldHVybiBpP3QuY29uY2F0KHMscy52aXN1YWxWaWV3cG9ydHx8W10sZHAobyk/bzpbXSxzLmZyYW1lRWxlbWVudCYmbj9BZihzLmZyYW1lRWxlbWVudCk6W10pOnQuY29uY2F0KG8sQWYobyxbXSxuKSl9ZnVuY3Rpb24gayQoZSl7Y29uc3QgdD1lbyhlKTtsZXQgbj1wYXJzZUZsb2F0KHQud2lkdGgpfHwwLHI9cGFyc2VGbG9hdCh0LmhlaWdodCl8fDA7Y29uc3Qgbz1vaShlKSxpPW8/ZS5vZmZzZXRXaWR0aDpuLHM9bz9lLm9mZnNldEhlaWdodDpyLGE9R20obikhPT1pfHxHbShyKSE9PXM7cmV0dXJuIGEmJihuPWkscj1zKSx7d2lkdGg6bixoZWlnaHQ6ciwkOmF9fWZ1bmN0aW9uIEl3KGUpe3JldHVybiBGaShlKT9lOmUuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gTWMoZSl7Y29uc3QgdD1JdyhlKTtpZighb2kodCkpcmV0dXJuIHJhKDEpO2NvbnN0IG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6cixoZWlnaHQ6bywkOml9PWskKHQpO2xldCBzPShpP0dtKG4ud2lkdGgpOm4ud2lkdGgpL3IsYT0oaT9HbShuLmhlaWdodCk6bi5oZWlnaHQpL287cmV0dXJuKCFzfHwhTnVtYmVyLmlzRmluaXRlKHMpKSYmKHM9MSksKCFhfHwhTnVtYmVyLmlzRmluaXRlKGEpKSYmKGE9MSkse3g6cyx5OmF9fWNvbnN0IEhKPXJhKDApO2Z1bmN0aW9uIEUkKGUpe2NvbnN0IHQ9X3IoZSk7cmV0dXJuIUR3KCl8fCF0LnZpc3VhbFZpZXdwb3J0P0hKOnt4OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCx5OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wfX1mdW5jdGlvbiBXSihlLHQsbil7cmV0dXJuIHQ9PT12b2lkIDAmJih0PSExKSwhbnx8dCYmbiE9PV9yKGUpPyExOnR9ZnVuY3Rpb24gZmwoZSx0LG4scil7dD09PXZvaWQgMCYmKHQ9ITEpLG49PT12b2lkIDAmJihuPSExKTtjb25zdCBvPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1JdyhlKTtsZXQgcz1yYSgxKTt0JiYocj9GaShyKSYmKHM9TWMocikpOnM9TWMoZSkpO2NvbnN0IGE9V0ooaSxuLHIpP0UkKGkpOnJhKDApO2xldCBsPShvLmxlZnQrYS54KS9zLngsYz0oby50b3ArYS55KS9zLnksdT1vLndpZHRoL3MueCxkPW8uaGVpZ2h0L3MueTtpZihpKXtjb25zdCBmPV9yKGkpLHA9ciYmRmkocik/X3Iocik6cjtsZXQgbT1mLmZyYW1lRWxlbWVudDtmb3IoO20mJnImJnAhPT1mOyl7Y29uc3QgZz1NYyhtKSx5PW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1lbyhtKSx4PXkubGVmdCsobS5jbGllbnRMZWZ0K3BhcnNlRmxvYXQodi5wYWRkaW5nTGVmdCkpKmcueCx3PXkudG9wKyhtLmNsaWVudFRvcCtwYXJzZUZsb2F0KHYucGFkZGluZ1RvcCkpKmcueTtsKj1nLngsYyo9Zy55LHUqPWcueCxkKj1nLnksbCs9eCxjKz13LG09X3IobSkuZnJhbWVFbGVtZW50fX1yZXR1cm4gWG0oe3dpZHRoOnUsaGVpZ2h0OmQseDpsLHk6Y30pfWZ1bmN0aW9uIEtKKGUpe2xldHtyZWN0OnQsb2Zmc2V0UGFyZW50Om4sc3RyYXRlZ3k6cn09ZTtjb25zdCBvPW9pKG4pLGk9S2kobik7aWYobj09PWkpcmV0dXJuIHQ7bGV0IHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sYT1yYSgxKTtjb25zdCBsPXJhKDApO2lmKChvfHwhbyYmciE9PSJmaXhlZCIpJiYoKG9hKG4pIT09ImJvZHkifHxkcChpKSkmJihzPXB2KG4pKSxvaShuKSkpe2NvbnN0IGM9Zmwobik7YT1NYyhuKSxsLng9Yy54K24uY2xpZW50TGVmdCxsLnk9Yy55K24uY2xpZW50VG9wfXJldHVybnt3aWR0aDp0LndpZHRoKmEueCxoZWlnaHQ6dC5oZWlnaHQqYS55LHg6dC54KmEueC1zLnNjcm9sbExlZnQqYS54K2wueCx5OnQueSphLnktcy5zY3JvbGxUb3AqYS55K2wueX19ZnVuY3Rpb24gcUooZSl7cmV0dXJuIEFycmF5LmZyb20oZS5nZXRDbGllbnRSZWN0cygpKX1mdW5jdGlvbiBfJChlKXtyZXR1cm4gZmwoS2koZSkpLmxlZnQrcHYoZSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBHSihlKXtjb25zdCB0PUtpKGUpLG49cHYoZSkscj1lLm93bmVyRG9jdW1lbnQuYm9keSxvPXdyKHQuc2Nyb2xsV2lkdGgsdC5jbGllbnRXaWR0aCxyLnNjcm9sbFdpZHRoLHIuY2xpZW50V2lkdGgpLGk9d3IodC5zY3JvbGxIZWlnaHQsdC5jbGllbnRIZWlnaHQsci5zY3JvbGxIZWlnaHQsci5jbGllbnRIZWlnaHQpO2xldCBzPS1uLnNjcm9sbExlZnQrXyQoZSk7Y29uc3QgYT0tbi5zY3JvbGxUb3A7cmV0dXJuIGVvKHIpLmRpcmVjdGlvbj09PSJydGwiJiYocys9d3IodC5jbGllbnRXaWR0aCxyLmNsaWVudFdpZHRoKS1vKSx7d2lkdGg6byxoZWlnaHQ6aSx4OnMseTphfX1mdW5jdGlvbiBZSihlLHQpe2NvbnN0IG49X3IoZSkscj1LaShlKSxvPW4udmlzdWFsVmlld3BvcnQ7bGV0IGk9ci5jbGllbnRXaWR0aCxzPXIuY2xpZW50SGVpZ2h0LGE9MCxsPTA7aWYobyl7aT1vLndpZHRoLHM9by5oZWlnaHQ7Y29uc3QgYz1EdygpOyghY3x8YyYmdD09PSJmaXhlZCIpJiYoYT1vLm9mZnNldExlZnQsbD1vLm9mZnNldFRvcCl9cmV0dXJue3dpZHRoOmksaGVpZ2h0OnMseDphLHk6bH19ZnVuY3Rpb24gWEooZSx0KXtjb25zdCBuPWZsKGUsITAsdD09PSJmaXhlZCIpLHI9bi50b3ArZS5jbGllbnRUb3Asbz1uLmxlZnQrZS5jbGllbnRMZWZ0LGk9b2koZSk/TWMoZSk6cmEoMSkscz1lLmNsaWVudFdpZHRoKmkueCxhPWUuY2xpZW50SGVpZ2h0KmkueSxsPW8qaS54LGM9cippLnk7cmV0dXJue3dpZHRoOnMsaGVpZ2h0OmEseDpsLHk6Y319ZnVuY3Rpb24gU0MoZSx0LG4pe2xldCByO2lmKHQ9PT0idmlld3BvcnQiKXI9WUooZSxuKTtlbHNlIGlmKHQ9PT0iZG9jdW1lbnQiKXI9R0ooS2koZSkpO2Vsc2UgaWYoRmkodCkpcj1YSih0LG4pO2Vsc2V7Y29uc3Qgbz1FJChlKTtyPXsuLi50LHg6dC54LW8ueCx5OnQueS1vLnl9fXJldHVybiBYbShyKX1mdW5jdGlvbiBDJChlLHQpe2NvbnN0IG49SmMoZSk7cmV0dXJuIG49PT10fHwhRmkobil8fGZ2KG4pPyExOmVvKG4pLnBvc2l0aW9uPT09ImZpeGVkInx8QyQobix0KX1mdW5jdGlvbiBaSihlLHQpe2NvbnN0IG49dC5nZXQoZSk7aWYobilyZXR1cm4gbjtsZXQgcj1BZihlLFtdLCExKS5maWx0ZXIoYT0+RmkoYSkmJm9hKGEpIT09ImJvZHkiKSxvPW51bGw7Y29uc3QgaT1lbyhlKS5wb3NpdGlvbj09PSJmaXhlZCI7bGV0IHM9aT9KYyhlKTplO2Zvcig7RmkocykmJiFmdihzKTspe2NvbnN0IGE9ZW8ocyksbD1BdyhzKTshbCYmYS5wb3NpdGlvbj09PSJmaXhlZCImJihvPW51bGwpLChpPyFsJiYhbzohbCYmYS5wb3NpdGlvbj09PSJzdGF0aWMiJiYhIW8mJlsiYWJzb2x1dGUiLCJmaXhlZCJdLmluY2x1ZGVzKG8ucG9zaXRpb24pfHxkcChzKSYmIWwmJkMkKGUscykpP3I9ci5maWx0ZXIodT0+dSE9PXMpOm89YSxzPUpjKHMpfXJldHVybiB0LnNldChlLHIpLHJ9ZnVuY3Rpb24gSkooZSl7bGV0e2VsZW1lbnQ6dCxib3VuZGFyeTpuLHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Om99PWU7Y29uc3Qgcz1bLi4ubj09PSJjbGlwcGluZ0FuY2VzdG9ycyI/WkoodCx0aGlzLl9jKTpbXS5jb25jYXQobikscl0sYT1zWzBdLGw9cy5yZWR1Y2UoKGMsdSk9Pntjb25zdCBkPVNDKHQsdSxvKTtyZXR1cm4gYy50b3A9d3IoZC50b3AsYy50b3ApLGMucmlnaHQ9bmEoZC5yaWdodCxjLnJpZ2h0KSxjLmJvdHRvbT1uYShkLmJvdHRvbSxjLmJvdHRvbSksYy5sZWZ0PXdyKGQubGVmdCxjLmxlZnQpLGN9LFNDKHQsYSxvKSk7cmV0dXJue3dpZHRoOmwucmlnaHQtbC5sZWZ0LGhlaWdodDpsLmJvdHRvbS1sLnRvcCx4OmwubGVmdCx5OmwudG9wfX1mdW5jdGlvbiBRSihlKXtjb25zdHt3aWR0aDp0LGhlaWdodDpufT1rJChlKTtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6bn19ZnVuY3Rpb24gZVEoZSx0LG4pe2NvbnN0IHI9b2kodCksbz1LaSh0KSxpPW49PT0iZml4ZWQiLHM9ZmwoZSwhMCxpLHQpO2xldCBhPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9O2NvbnN0IGw9cmEoMCk7aWYocnx8IXImJiFpKWlmKChvYSh0KSE9PSJib2R5Inx8ZHAobykpJiYoYT1wdih0KSkscil7Y29uc3QgYz1mbCh0LCEwLGksdCk7bC54PWMueCt0LmNsaWVudExlZnQsbC55PWMueSt0LmNsaWVudFRvcH1lbHNlIG8mJihsLng9XyQobykpO3JldHVybnt4OnMubGVmdCthLnNjcm9sbExlZnQtbC54LHk6cy50b3ArYS5zY3JvbGxUb3AtbC55LHdpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0fX1mdW5jdGlvbiBrQyhlLHQpe3JldHVybiFvaShlKXx8ZW8oZSkucG9zaXRpb249PT0iZml4ZWQiP251bGw6dD90KGUpOmUub2Zmc2V0UGFyZW50fWZ1bmN0aW9uIE8kKGUsdCl7Y29uc3Qgbj1fcihlKTtpZighb2koZSkpcmV0dXJuIG47bGV0IHI9a0MoZSx0KTtmb3IoO3ImJlVKKHIpJiZlbyhyKS5wb3NpdGlvbj09PSJzdGF0aWMiOylyPWtDKHIsdCk7cmV0dXJuIHImJihvYShyKT09PSJodG1sInx8b2Eocik9PT0iYm9keSImJmVvKHIpLnBvc2l0aW9uPT09InN0YXRpYyImJiFBdyhyKSk/bjpyfHxWSihlKXx8bn1jb25zdCB0UT1hc3luYyBmdW5jdGlvbihlKXtsZXR7cmVmZXJlbmNlOnQsZmxvYXRpbmc6bixzdHJhdGVneTpyfT1lO2NvbnN0IG89dGhpcy5nZXRPZmZzZXRQYXJlbnR8fE8kLGk9dGhpcy5nZXREaW1lbnNpb25zO3JldHVybntyZWZlcmVuY2U6ZVEodCxhd2FpdCBvKG4pLHIpLGZsb2F0aW5nOnt4OjAseTowLC4uLmF3YWl0IGkobil9fX07ZnVuY3Rpb24gblEoZSl7cmV0dXJuIGVvKGUpLmRpcmVjdGlvbj09PSJydGwifWNvbnN0IHJRPXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpLSixnZXREb2N1bWVudEVsZW1lbnQ6S2ksZ2V0Q2xpcHBpbmdSZWN0OkpKLGdldE9mZnNldFBhcmVudDpPJCxnZXRFbGVtZW50UmVjdHM6dFEsZ2V0Q2xpZW50UmVjdHM6cUosZ2V0RGltZW5zaW9uczpRSixnZXRTY2FsZTpNYyxpc0VsZW1lbnQ6RmksaXNSVEw6blF9O2Z1bmN0aW9uIG9RKGUsdCl7bGV0IG49bnVsbCxyO2NvbnN0IG89S2koZSk7ZnVuY3Rpb24gaSgpe2NsZWFyVGltZW91dChyKSxuJiZuLmRpc2Nvbm5lY3QoKSxuPW51bGx9ZnVuY3Rpb24gcyhhLGwpe2E9PT12b2lkIDAmJihhPSExKSxsPT09dm9pZCAwJiYobD0xKSxpKCk7Y29uc3R7bGVmdDpjLHRvcDp1LHdpZHRoOmQsaGVpZ2h0OmZ9PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoYXx8dCgpLCFkfHwhZilyZXR1cm47Y29uc3QgcD1HcCh1KSxtPUdwKG8uY2xpZW50V2lkdGgtKGMrZCkpLGc9R3Aoby5jbGllbnRIZWlnaHQtKHUrZikpLHk9R3AoYykseD17cm9vdE1hcmdpbjotcCsicHggIistbSsicHggIistZysicHggIisteSsicHgiLHRocmVzaG9sZDp3cigwLG5hKDEsbCkpfHwxfTtsZXQgdz0hMDtmdW5jdGlvbiBrKEUpe2NvbnN0IFM9RVswXS5pbnRlcnNlY3Rpb25SYXRpbztpZihTIT09bCl7aWYoIXcpcmV0dXJuIHMoKTtTP3MoITEsUyk6cj1zZXRUaW1lb3V0KCgpPT57cyghMSwxZS03KX0sMTAwKX13PSExfXRyeXtuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihrLHsuLi54LHJvb3Q6by5vd25lckRvY3VtZW50fSl9Y2F0Y2h7bj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoayx4KX1uLm9ic2VydmUoZSl9cmV0dXJuIHMoITApLGl9ZnVuY3Rpb24gaVEoZSx0LG4scil7cj09PXZvaWQgMCYmKHI9e30pO2NvbnN0e2FuY2VzdG9yU2Nyb2xsOm89ITAsYW5jZXN0b3JSZXNpemU6aT0hMCxlbGVtZW50UmVzaXplOnM9dHlwZW9mIFJlc2l6ZU9ic2VydmVyPT0iZnVuY3Rpb24iLGxheW91dFNoaWZ0OmE9dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyPT0iZnVuY3Rpb24iLGFuaW1hdGlvbkZyYW1lOmw9ITF9PXIsYz1JdyhlKSx1PW98fGk/Wy4uLmM/QWYoYyk6W10sLi4uQWYodCldOltdO3UuZm9yRWFjaCh2PT57byYmdi5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLG4se3Bhc3NpdmU6ITB9KSxpJiZ2LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbil9KTtjb25zdCBkPWMmJmE/b1EoYyxuKTpudWxsO2xldCBmPS0xLHA9bnVsbDtzJiYocD1uZXcgUmVzaXplT2JzZXJ2ZXIodj0+e2xldFt4XT12O3gmJngudGFyZ2V0PT09YyYmcCYmKHAudW5vYnNlcnZlKHQpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGYpLGY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cCYmcC5vYnNlcnZlKHQpfSkpLG4oKX0pLGMmJiFsJiZwLm9ic2VydmUoYykscC5vYnNlcnZlKHQpKTtsZXQgbSxnPWw/ZmwoZSk6bnVsbDtsJiZ5KCk7ZnVuY3Rpb24geSgpe2NvbnN0IHY9ZmwoZSk7ZyYmKHYueCE9PWcueHx8di55IT09Zy55fHx2LndpZHRoIT09Zy53aWR0aHx8di5oZWlnaHQhPT1nLmhlaWdodCkmJm4oKSxnPXYsbT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeSl9cmV0dXJuIG4oKSwoKT0+e3UuZm9yRWFjaCh2PT57byYmdi5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLG4pLGkmJnYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKX0pLGQmJmQoKSxwJiZwLmRpc2Nvbm5lY3QoKSxwPW51bGwsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUobSl9fWNvbnN0IHNRPXpKLGFRPURKLGxRPUJKLGNRPUlKLEVDPUFKLHVRPUZKLGRRPShlLHQsbik9Pntjb25zdCByPW5ldyBNYXAsbz17cGxhdGZvcm06clEsLi4ubn0saT17Li4uby5wbGF0Zm9ybSxfYzpyfTtyZXR1cm4gJEooZSx0LHsuLi5vLHBsYXRmb3JtOml9KX0sZlE9ZT0+e2Z1bmN0aW9uIHQobil7cmV0dXJue30uaGFzT3duUHJvcGVydHkuY2FsbChuLCJjdXJyZW50Iil9cmV0dXJue25hbWU6ImFycm93IixvcHRpb25zOmUsZm4obil7Y29uc3R7ZWxlbWVudDpyLHBhZGRpbmc6b309dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByJiZ0KHIpP3IuY3VycmVudCE9bnVsbD9FQyh7ZWxlbWVudDpyLmN1cnJlbnQscGFkZGluZzpvfSkuZm4obik6e306cj9FQyh7ZWxlbWVudDpyLHBhZGRpbmc6b30pLmZuKG4pOnt9fX19O3ZhciBOaD10eXBlb2YgZG9jdW1lbnQ8InUiP2gudXNlTGF5b3V0RWZmZWN0OmgudXNlRWZmZWN0O2Z1bmN0aW9uIFptKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYodHlwZW9mIGUhPXR5cGVvZiB0KXJldHVybiExO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlLnRvU3RyaW5nKCk9PT10LnRvU3RyaW5nKCkpcmV0dXJuITA7bGV0IG4scixvO2lmKGUmJnQmJnR5cGVvZiBlPT0ib2JqZWN0Iil7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYobj1lLmxlbmd0aCxuIT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iocj1uO3ItLSE9PTA7KWlmKCFabShlW3JdLHRbcl0pKXJldHVybiExO3JldHVybiEwfWlmKG89T2JqZWN0LmtleXMoZSksbj1vLmxlbmd0aCxuIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspaWYoIXt9Lmhhc093blByb3BlcnR5LmNhbGwodCxvW3JdKSlyZXR1cm4hMTtmb3Iocj1uO3ItLSE9PTA7KXtjb25zdCBpPW9bcl07aWYoIShpPT09Il9vd25lciImJmUuJCR0eXBlb2YpJiYhWm0oZVtpXSx0W2ldKSlyZXR1cm4hMX1yZXR1cm4hMH1yZXR1cm4gZSE9PWUmJnQhPT10fWZ1bmN0aW9uIFQkKGUpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij8xOihlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZGV2aWNlUGl4ZWxSYXRpb3x8MX1mdW5jdGlvbiBfQyhlLHQpe2NvbnN0IG49VCQoZSk7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufWZ1bmN0aW9uIENDKGUpe2NvbnN0IHQ9aC51c2VSZWYoZSk7cmV0dXJuIE5oKCgpPT57dC5jdXJyZW50PWV9KSx0fWZ1bmN0aW9uIHBRKGUpe2U9PT12b2lkIDAmJihlPXt9KTtjb25zdHtwbGFjZW1lbnQ6dD0iYm90dG9tIixzdHJhdGVneTpuPSJhYnNvbHV0ZSIsbWlkZGxld2FyZTpyPVtdLHBsYXRmb3JtOm8sZWxlbWVudHM6e3JlZmVyZW5jZTppLGZsb2F0aW5nOnN9PXt9LHRyYW5zZm9ybTphPSEwLHdoaWxlRWxlbWVudHNNb3VudGVkOmwsb3BlbjpjfT1lLFt1LGRdPWgudXNlU3RhdGUoe3g6MCx5OjAsc3RyYXRlZ3k6bixwbGFjZW1lbnQ6dCxtaWRkbGV3YXJlRGF0YTp7fSxpc1Bvc2l0aW9uZWQ6ITF9KSxbZixwXT1oLnVzZVN0YXRlKHIpO1ptKGYscil8fHAocik7Y29uc3RbbSxnXT1oLnVzZVN0YXRlKG51bGwpLFt5LHZdPWgudXNlU3RhdGUobnVsbCkseD1oLnVzZUNhbGxiYWNrKEM9PntDIT1TLmN1cnJlbnQmJihTLmN1cnJlbnQ9QyxnKEMpKX0sW2ddKSx3PWgudXNlQ2FsbGJhY2soQz0+e0MhPT1fLmN1cnJlbnQmJihfLmN1cnJlbnQ9Qyx2KEMpKX0sW3ZdKSxrPWl8fG0sRT1zfHx5LFM9aC51c2VSZWYobnVsbCksXz1oLnVzZVJlZihudWxsKSxQPWgudXNlUmVmKHUpLE09Q0MobCksQT1DQyhvKSxJPWgudXNlQ2FsbGJhY2soKCk9PntpZighUy5jdXJyZW50fHwhXy5jdXJyZW50KXJldHVybjtjb25zdCBDPXtwbGFjZW1lbnQ6dCxzdHJhdGVneTpuLG1pZGRsZXdhcmU6Zn07QS5jdXJyZW50JiYoQy5wbGF0Zm9ybT1BLmN1cnJlbnQpLGRRKFMuY3VycmVudCxfLmN1cnJlbnQsQykudGhlbihUPT57Y29uc3QgTz17Li4uVCxpc1Bvc2l0aW9uZWQ6ITB9O0wuY3VycmVudCYmIVptKFAuY3VycmVudCxPKSYmKFAuY3VycmVudD1PLCRyLmZsdXNoU3luYygoKT0+e2QoTyl9KSl9KX0sW2YsdCxuLEFdKTtOaCgoKT0+e2M9PT0hMSYmUC5jdXJyZW50LmlzUG9zaXRpb25lZCYmKFAuY3VycmVudC5pc1Bvc2l0aW9uZWQ9ITEsZChDPT4oey4uLkMsaXNQb3NpdGlvbmVkOiExfSkpKX0sW2NdKTtjb25zdCBMPWgudXNlUmVmKCExKTtOaCgoKT0+KEwuY3VycmVudD0hMCwoKT0+e0wuY3VycmVudD0hMX0pLFtdKSxOaCgoKT0+e2lmKGsmJihTLmN1cnJlbnQ9ayksRSYmKF8uY3VycmVudD1FKSxrJiZFKXtpZihNLmN1cnJlbnQpcmV0dXJuIE0uY3VycmVudChrLEUsSSk7SSgpfX0sW2ssRSxJLE1dKTtjb25zdCByZT1oLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOlMsZmxvYXRpbmc6XyxzZXRSZWZlcmVuY2U6eCxzZXRGbG9hdGluZzp3fSksW3gsd10pLFY9aC51c2VNZW1vKCgpPT4oe3JlZmVyZW5jZTprLGZsb2F0aW5nOkV9KSxbayxFXSksSz1oLnVzZU1lbW8oKCk9Pntjb25zdCBDPXtwb3NpdGlvbjpuLGxlZnQ6MCx0b3A6MH07aWYoIVYuZmxvYXRpbmcpcmV0dXJuIEM7Y29uc3QgVD1fQyhWLmZsb2F0aW5nLHUueCksTz1fQyhWLmZsb2F0aW5nLHUueSk7cmV0dXJuIGE/ey4uLkMsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitUKyJweCwgIitPKyJweCkiLC4uLlQkKFYuZmxvYXRpbmcpPj0xLjUmJnt3aWxsQ2hhbmdlOiJ0cmFuc2Zvcm0ifX06e3Bvc2l0aW9uOm4sbGVmdDpULHRvcDpPfX0sW24sYSxWLmZsb2F0aW5nLHUueCx1LnldKTtyZXR1cm4gaC51c2VNZW1vKCgpPT4oey4uLnUsdXBkYXRlOkkscmVmczpyZSxlbGVtZW50czpWLGZsb2F0aW5nU3R5bGVzOkt9KSxbdSxJLHJlLFYsS10pfWZ1bmN0aW9uIGhRKGUsdD1udWxsKXtyZXR1cm4gZnVuY3Rpb24obixyKXtsZXR7JGZyb206bywkdG86aX09bi5zZWxlY3Rpb24scz1vLmJsb2NrUmFuZ2UoaSksYT0hMSxsPXM7aWYoIXMpcmV0dXJuITE7aWYocy5kZXB0aD49MiYmby5ub2RlKHMuZGVwdGgtMSkudHlwZS5jb21wYXRpYmxlQ29udGVudChlKSYmcy5zdGFydEluZGV4PT0wKXtpZihvLmluZGV4KHMuZGVwdGgtMSk9PTApcmV0dXJuITE7bGV0IHU9bi5kb2MucmVzb2x2ZShzLnN0YXJ0LTIpO2w9bmV3IHNsKHUsdSxzLmRlcHRoKSxzLmVuZEluZGV4PHMucGFyZW50LmNoaWxkQ291bnQmJihzPW5ldyBzbChvLG4uZG9jLnJlc29sdmUoaS5lbmQocy5kZXB0aCkpLHMuZGVwdGgpKSxhPSEwfWxldCBjPVkxKGwsZSx0LHMpO3JldHVybiBjPyhyJiZyKG1RKG4udHIscyxjLGEsZSkuc2Nyb2xsSW50b1ZpZXcoKSksITApOiExfX1mdW5jdGlvbiBtUShlLHQsbixyLG8pe2xldCBpPVUuZW1wdHk7Zm9yKGxldCB1PW4ubGVuZ3RoLTE7dT49MDt1LS0paT1VLmZyb20oblt1XS50eXBlLmNyZWF0ZShuW3VdLmF0dHJzLGkpKTtlLnN0ZXAobmV3IFV0KHQuc3RhcnQtKHI/MjowKSx0LmVuZCx0LnN0YXJ0LHQuZW5kLG5ldyBKKGksMCwwKSxuLmxlbmd0aCwhMCkpO2xldCBzPTA7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kyspblt1XS50eXBlPT1vJiYocz11KzEpO2xldCBhPW4ubGVuZ3RoLXMsbD10LnN0YXJ0K24ubGVuZ3RoLShyPzI6MCksYz10LnBhcmVudDtmb3IobGV0IHU9dC5zdGFydEluZGV4LGQ9dC5lbmRJbmRleCxmPSEwO3U8ZDt1KyssZj0hMSkhZiYmQ2MoZS5kb2MsbCxhKSYmKGUuc3BsaXQobCxhKSxsKz0yKmEpLGwrPWMuY2hpbGQodSkubm9kZVNpemU7cmV0dXJuIGV9ZnVuY3Rpb24gZ1EoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7bGV0eyRmcm9tOnIsJHRvOm99PXQuc2VsZWN0aW9uLGk9ci5ibG9ja1JhbmdlKG8scz0+cy5jaGlsZENvdW50PjAmJnMuZmlyc3RDaGlsZC50eXBlPT1lKTtyZXR1cm4gaT9uP3Iubm9kZShpLmRlcHRoLTEpLnR5cGU9PWU/dlEodCxuLGUsaSk6eVEodCxuLGkpOiEwOiExfX1mdW5jdGlvbiB2UShlLHQsbixyKXtsZXQgbz1lLnRyLGk9ci5lbmQscz1yLiR0by5lbmQoci5kZXB0aCk7aTxzJiYoby5zdGVwKG5ldyBVdChpLTEscyxpLHMsbmV3IEooVS5mcm9tKG4uY3JlYXRlKG51bGwsci5wYXJlbnQuY29weSgpKSksMSwwKSwxLCEwKSkscj1uZXcgc2woby5kb2MucmVzb2x2ZShyLiRmcm9tLnBvcyksby5kb2MucmVzb2x2ZShzKSxyLmRlcHRoKSk7Y29uc3QgYT1sdShyKTtpZihhPT1udWxsKXJldHVybiExO28ubGlmdChyLGEpO2xldCBsPW8ubWFwcGluZy5tYXAoaSwtMSktMTtyZXR1cm4gc3Aoby5kb2MsbCkmJm8uam9pbihsKSx0KG8uc2Nyb2xsSW50b1ZpZXcoKSksITB9ZnVuY3Rpb24geVEoZSx0LG4pe2xldCByPWUudHIsbz1uLnBhcmVudDtmb3IobGV0IHA9bi5lbmQsbT1uLmVuZEluZGV4LTEsZz1uLnN0YXJ0SW5kZXg7bT5nO20tLSlwLT1vLmNoaWxkKG0pLm5vZGVTaXplLHIuZGVsZXRlKHAtMSxwKzEpO2xldCBpPXIuZG9jLnJlc29sdmUobi5zdGFydCkscz1pLm5vZGVBZnRlcjtpZihyLm1hcHBpbmcubWFwKG4uZW5kKSE9bi5zdGFydCtpLm5vZGVBZnRlci5ub2RlU2l6ZSlyZXR1cm4hMTtsZXQgYT1uLnN0YXJ0SW5kZXg9PTAsbD1uLmVuZEluZGV4PT1vLmNoaWxkQ291bnQsYz1pLm5vZGUoLTEpLHU9aS5pbmRleCgtMSk7aWYoIWMuY2FuUmVwbGFjZSh1KyhhPzA6MSksdSsxLHMuY29udGVudC5hcHBlbmQobD9VLmVtcHR5OlUuZnJvbShvKSkpKXJldHVybiExO2xldCBkPWkucG9zLGY9ZCtzLm5vZGVTaXplO3JldHVybiByLnN0ZXAobmV3IFV0KGQtKGE/MTowKSxmKyhsPzE6MCksZCsxLGYtMSxuZXcgSigoYT9VLmVtcHR5OlUuZnJvbShvLmNvcHkoVS5lbXB0eSkpKS5hcHBlbmQobD9VLmVtcHR5OlUuZnJvbShvLmNvcHkoVS5lbXB0eSkpKSxhPzA6MSxsPzA6MSksYT8wOjEpKSx0KHIuc2Nyb2xsSW50b1ZpZXcoKSksITB9dmFyIHhRPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxiUT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGlvPShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/YlEodCxuKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0ocj9zKHQsbixvKTpzKG8pKXx8byk7cmV0dXJuIHImJm8mJnhRKHQsbixvKSxvfTtmdW5jdGlvbiBsYihlKXt2YXIgdDtyZXR1cm4hISgodD1lLnNwZWMuZ3JvdXApIT1udWxsJiZ0LmluY2x1ZGVzKExlLkxpc3RDb250YWluZXJOb2RlKSl9ZnVuY3Rpb24gd1EoZSl7dmFyIHQ7cmV0dXJuISEoKHQ9ZS5zcGVjLmdyb3VwKSE9bnVsbCYmdC5pbmNsdWRlcyhMZS5MaXN0SXRlbU5vZGUpKX1mdW5jdGlvbiBpYShlKXtyZXR1cm4gbGIoZS50eXBlKX1mdW5jdGlvbiBXcyhlKXtyZXR1cm4gd1EoZS50eXBlKX1mdW5jdGlvbiBMdyhlLHQpe3JldHVybiBuPT57Y29uc3R7ZGlzcGF0Y2g6cix0cjpvfT1uLGk9dXcobyxuLnN0YXRlKSx7JGZyb206cywkdG86YX09by5zZWxlY3Rpb24sbD1zLmJsb2NrUmFuZ2UoYSk7aWYoIWwpcmV0dXJuITE7Y29uc3QgYz10dih7cHJlZGljYXRlOnU9PmxiKHUudHlwZSksc2VsZWN0aW9uOm8uc2VsZWN0aW9ufSk7aWYoYyYmbC5kZXB0aC1jLmRlcHRoPD0xJiZsLnN0YXJ0SW5kZXg9PT0wKXtpZihjLm5vZGUudHlwZT09PWUpcmV0dXJuIFIkKHQpKG4pO2lmKGxiKGMubm9kZS50eXBlKSlyZXR1cm4gZS52YWxpZENvbnRlbnQoYy5ub2RlLmNvbnRlbnQpPyhyPT1udWxsfHxyKG8uc2V0Tm9kZU1hcmt1cChjLnBvcyxlKSksITApOlNRKG8sYyxlLHQpPyhyPT1udWxsfHxyKG8uc2Nyb2xsSW50b1ZpZXcoKSksITApOiExfXJldHVybiBoUShlKShpLHIpfX1mdW5jdGlvbiBQJChlLHQ9WyJjaGVja2VkIl0pe3JldHVybiBmdW5jdGlvbih7dHI6bixkaXNwYXRjaDpyLHN0YXRlOm99KXt2YXIgaSxzO2NvbnN0IGE9SFUoZSxvLnNjaGVtYSkseyRmcm9tOmwsJHRvOmN9PW4uc2VsZWN0aW9uO2lmKHJ2KG4uc2VsZWN0aW9uKSYmbi5zZWxlY3Rpb24ubm9kZS5pc0Jsb2NrfHxsLmRlcHRoPDJ8fCFsLnNhbWVQYXJlbnQoYykpcmV0dXJuITE7Y29uc3QgdT1sLm5vZGUoLTEpO2lmKHUudHlwZSE9PWEpcmV0dXJuITE7aWYobC5wYXJlbnQuY29udGVudC5zaXplPT09MCYmbC5ub2RlKC0xKS5jaGlsZENvdW50PT09bC5pbmRleEFmdGVyKC0xKSl7aWYobC5kZXB0aD09PTJ8fGwubm9kZSgtMykudHlwZSE9PWF8fGwuaW5kZXgoLTIpIT09bC5ub2RlKC0yKS5jaGlsZENvdW50LTEpcmV0dXJuITE7aWYocil7Y29uc3QgZz1sLmluZGV4KC0xKT4wO2xldCB5PVUuZW1wdHk7Zm9yKGxldCB3PWwuZGVwdGgtKGc/MToyKTt3Pj1sLmRlcHRoLTM7dy0tKXk9VS5mcm9tKGwubm9kZSh3KS5jb3B5KHkpKTtjb25zdCB2PSgoaT1hLmNvbnRlbnRNYXRjaC5kZWZhdWx0VHlwZSk9PW51bGw/dm9pZCAwOmkuY3JlYXRlQW5kRmlsbCgpKXx8dm9pZCAwO3k9eS5hcHBlbmQoVS5mcm9tKGEuY3JlYXRlQW5kRmlsbChudWxsLHYpfHx2b2lkIDApKTtjb25zdCB4PWwuaW5kZXhBZnRlcigtMSk8bC5ub2RlKC0yKS5jaGlsZENvdW50PzE6bC5pbmRleEFmdGVyKC0yKTxsLm5vZGUoLTMpLmNoaWxkQ291bnQ/MjozO24ucmVwbGFjZShsLmJlZm9yZShnP3ZvaWQgMDotMSksbC5hZnRlcigteCksbmV3IEooeSxnPzM6MiwyKSksbi5zZXRTZWxlY3Rpb24obi5zZWxlY3Rpb24uY29uc3RydWN0b3IubmVhcihuLmRvYy5yZXNvbHZlKGwucG9zKyhnPzM6MikpKSkscihuLnNjcm9sbEludG9WaWV3KCkpfXJldHVybiEwfWlmKHUuYXR0cnMuY2xvc2VkJiZsLnNhbWVQYXJlbnQoYykmJmMucG9zPT09Yy5lbmQoKSl7aWYocil7Y29uc3QgZz1sLmFmdGVyKC0xKSx5PSgocz1hLmNvbnRlbnRNYXRjaC5kZWZhdWx0VHlwZSk9PW51bGw/dm9pZCAwOnMuY3JlYXRlQW5kRmlsbCgpKXx8dm9pZCAwLHY9YS5jcmVhdGVBbmRGaWxsKG51bGwseSk7diYmKG4uaW5zZXJ0KGcsdiksbi5zZXRTZWxlY3Rpb24oVGUubmVhcihuLmRvYy5yZXNvbHZlKGcrMSkpKSksbi5kZWxldGUobC5wb3MsYy5wb3MpLHIobi5zY3JvbGxJbnRvVmlldygpKX1yZXR1cm4hMH1jb25zdCBkPU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh1LmF0dHJzKS5maWx0ZXIoKFtnXSk9PiF0LmluY2x1ZGVzKGcpKSksZj1jLnBvcz09PWwuZW5kKCk/dS5jb250ZW50TWF0Y2hBdCgwKS5kZWZhdWx0VHlwZTpudWxsLHA9ey4uLmwubm9kZSgpLmF0dHJzfTtuLmRlbGV0ZShsLnBvcyxjLnBvcyk7Y29uc3QgbT1mP1t7dHlwZTphLGF0dHJzOmR9LHt0eXBlOmYsYXR0cnM6cH1dOlt7dHlwZTphLGF0dHJzOmR9XTtyZXR1cm4gQ2Mobi5kb2MsbC5wb3MsMik/KHImJnIobi5zcGxpdChsLnBvcywyLG0pLnNjcm9sbEludG9WaWV3KCkpLCEwKTohMX19ZnVuY3Rpb24gU1EoZSx0LG4scil7Y29uc3Qgbz10Lm5vZGUsaT1lLmRvYy5yZXNvbHZlKHQuc3RhcnQpLHM9aS5ub2RlKC0xKSxhPWkuaW5kZXgoLTEpO2lmKCFzfHwhcy5jYW5SZXBsYWNlKGEsYSsxLFUuZnJvbShuLmNyZWF0ZSgpKSkpcmV0dXJuITE7Y29uc3QgbD1bXTtmb3IobGV0IHA9MDtwPG8uY2hpbGRDb3VudDtwKyspe2NvbnN0IG09by5jaGlsZChwKTtpZighci52YWxpZENvbnRlbnQobS5jb250ZW50KSlyZXR1cm4hMTtjb25zdCBnPXIuY3JlYXRlQ2hlY2tlZChudWxsLG0uY29udGVudCk7bC5wdXNoKGcpfWNvbnN0IGM9bi5jcmVhdGVDaGVja2VkKG51bGwsbCksdT10LnBvcyxkPXUrby5ub2RlU2l6ZSxmPWUuc2VsZWN0aW9uLmZyb207cmV0dXJuIGUucmVwbGFjZVJhbmdlV2l0aCh1LGQsYyksZS5zZXRTZWxlY3Rpb24oZS5zZWxlY3Rpb24uY29uc3RydWN0b3IubmVhcihlLmRvYy5yZXNvbHZlKGYpKSksITB9ZnVuY3Rpb24ga1Eoe2xpc3RUeXBlOmUsaXRlbVR5cGU6dCx0cjpuLHJhbmdlOnJ9KXt2YXIgbztjb25zdCBpPXIucGFyZW50LHM9bi5kb2Muc2xpY2Uoci5zdGFydCxyLmVuZCk7aWYoaS50eXBlPT09ZSYmKChvPXMuY29udGVudC5maXJzdENoaWxkKT09bnVsbD92b2lkIDA6by50eXBlKT09PXQpcmV0dXJuITE7Y29uc3QgYT1bXTtmb3IobGV0IGM9MDtjPHMuY29udGVudC5jaGlsZENvdW50O2MrKyl7Y29uc3QgdT1zLmNvbnRlbnQuY2hpbGQoYyk7aWYoIXQudmFsaWRDb250ZW50KHUuY29udGVudCkpcmV0dXJuITE7Y29uc3QgZD10LmNyZWF0ZUNoZWNrZWQobnVsbCx1LmNvbnRlbnQpO2EucHVzaChkKX1jb25zdCBsPWUuY3JlYXRlQ2hlY2tlZChudWxsLGEpO3JldHVybiBuLnJlcGxhY2VSYW5nZShyLnN0YXJ0LHIuZW5kLG5ldyBKKFUuZnJvbShsKSwwLDApKSwhMH1mdW5jdGlvbiBRYyh7bGlzdFR5cGU6ZSxpdGVtVHlwZTp0LHRyOm59KXtjb25zdCByPUptKG4uc2VsZWN0aW9uKTtpZighcilyZXR1cm4hMTtjb25zdCBvPXIuc3RhcnRJbmRleD09PTAse2Zyb206aSx0bzpzfT1uLnNlbGVjdGlvbjtyZXR1cm4ga1Eoe2xpc3RUeXBlOmUsaXRlbVR5cGU6dCx0cjpuLHJhbmdlOnJ9KT8obi5zZXRTZWxlY3Rpb24oVGUuYmV0d2VlbihuLmRvYy5yZXNvbHZlKG8/aTppKzIpLG4uZG9jLnJlc29sdmUobz9zOnMrMikpKSxuLnNjcm9sbEludG9WaWV3KCksITApOiExfWZ1bmN0aW9uIEVRKGUsdCxuKXtjb25zdCByPWUudHIsbz1uLnBhcmVudCxpPXIubWFwcGluZy5tYXBzLmxlbmd0aDtmb3IobGV0IG09bi5lbmQsZz1uLmVuZEluZGV4LTEseT1uLnN0YXJ0SW5kZXg7Zz55O2ctLSltLT1vLmNoaWxkKGcpLm5vZGVTaXplLHIuZGVsZXRlKG0tMSxtKzEpO2NvbnN0IHM9ci5kb2MucmVzb2x2ZShuLnN0YXJ0KSxhPXMubm9kZUFmdGVyO2lmKCFhfHxyLm1hcHBpbmcuc2xpY2UoaSkubWFwKG4uZW5kKSE9PW4uc3RhcnQrYS5ub2RlU2l6ZSlyZXR1cm4hMTtjb25zdCBsPW4uc3RhcnRJbmRleD09PTAsYz1uLmVuZEluZGV4PT09by5jaGlsZENvdW50LHU9cy5ub2RlKC0xKSxkPXMuaW5kZXgoLTEpO2lmKCF1LmNhblJlcGxhY2UoZCsobD8wOjEpLGQrMSxhLmNvbnRlbnQuYXBwZW5kKGM/VS5lbXB0eTpVLmZyb20obykpKSlyZXR1cm4hMTtjb25zdCBmPXMucG9zLHA9ZithLm5vZGVTaXplO3JldHVybiByLnN0ZXAobmV3IFV0KGYtKGw/MTowKSxwKyhjPzE6MCksZisxLHAtMSxuZXcgSigobD9VLmVtcHR5OlUuZnJvbShvLmNvcHkoVS5lbXB0eSkpKS5hcHBlbmQoYz9VLmVtcHR5OlUuZnJvbShvLmNvcHkoVS5lbXB0eSkpKSxsPzA6MSxjPzA6MSksbD8wOjEpKSx0KHIuc2Nyb2xsSW50b1ZpZXcoKSksITB9ZnVuY3Rpb24gTSQoZSx0KXtjb25zdCBuPXR8fGUuc2VsZWN0aW9uLiRmcm9tO2xldCByPVtdLG8saSxzLGE7Zm9yKGxldCBjPW4uZGVwdGg7Yz49MDtjLS0pe2lmKGk9bi5ub2RlKGMpLG89bi5pbmRleChjKSxzPWkubWF5YmVDaGlsZChvLTEpLGE9aS5tYXliZUNoaWxkKG8pLHMmJmEmJnMudHlwZS5uYW1lPT09YS50eXBlLm5hbWUmJmlhKHMpKXtjb25zdCB1PW4uYmVmb3JlKGMrMSk7ci5wdXNoKHUpfWlmKG89bi5pbmRleEFmdGVyKGMpLHM9aS5tYXliZUNoaWxkKG8tMSksYT1pLm1heWJlQ2hpbGQobykscyYmYSYmcy50eXBlLm5hbWU9PT1hLnR5cGUubmFtZSYmaWEocykpe2NvbnN0IHU9bi5hZnRlcihjKzEpO3IucHVzaCh1KX19cj1bLi4ubmV3IFNldChyKV0uc29ydCgoYyx1KT0+dS1jKTtsZXQgbD0hMTtmb3IoY29uc3QgYyBvZiByKXNwKGUuZG9jLGMpJiYoZS5qb2luKGMpLGw9ITApO3JldHVybiBsfWZ1bmN0aW9uIFIkKGUpe3JldHVybiB0PT57Y29uc3R7ZGlzcGF0Y2g6bix0cjpyfT10LG89dXcocix0LnN0YXRlKSxpPV9RKGUsci5zZWxlY3Rpb24pO3JldHVybiBpPyhuJiZFUShvLG4saSksITApOiExfX1mdW5jdGlvbiBfUShlLHQpe2NvbnN0eyRmcm9tOm4sJHRvOnJ9PXQ7cmV0dXJuIG4uYmxvY2tSYW5nZShyLGk9Pnt2YXIgcztyZXR1cm4oKHM9aS5maXJzdENoaWxkKT09bnVsbD92b2lkIDA6cy50eXBlKT09PWV9KX1mdW5jdGlvbiBKbShlKXtjb25zdHskZnJvbTp0LCR0bzpufT1lO3JldHVybiB0LmJsb2NrUmFuZ2UobixpYSl9ZnVuY3Rpb24gQ1EoZSl7Y29uc3QgdD1lLnNlbGVjdGlvbi4kZnJvbSxuPXQuYmxvY2tSYW5nZSgpO2lmKCFufHwhV3Mobi5wYXJlbnQpfHxuLnN0YXJ0SW5kZXghPT0wKXJldHVybiExO2NvbnN0IHI9dC5ub2RlKG4uZGVwdGgtMiksbz10LmluZGV4KG4uZGVwdGgpLGk9dC5pbmRleChuLmRlcHRoLTEpLHM9dC5pbmRleChuLmRlcHRoLTIpLGE9ci5tYXliZUNoaWxkKHMtMSksbD1hPT1udWxsP3ZvaWQgMDphLmxhc3RDaGlsZDtpZihvIT09MHx8aSE9PTApcmV0dXJuITE7aWYoYSYmaWEoYSkmJmwmJldzKGwpKXJldHVybiBRYyh7bGlzdFR5cGU6YS50eXBlLGl0ZW1UeXBlOmwudHlwZSx0cjplfSk7aWYoV3Mocikpe2NvbnN0IGM9cix1PXQubm9kZShuLmRlcHRoLTMpO2lmKGlhKHUpKXJldHVybiBRYyh7bGlzdFR5cGU6dS50eXBlLGl0ZW1UeXBlOmMudHlwZSx0cjplfSl9cmV0dXJuITF9ZnVuY3Rpb24gT0Moe3ZpZXc6ZX0pe2lmKCFlKXJldHVybiExO3tjb25zdCB0PWUuc3RhdGUuc2VsZWN0aW9uLiRjdXJzb3I7aWYoIXR8fHQucGFyZW50T2Zmc2V0PjApcmV0dXJuITE7Y29uc3Qgbj10LmJsb2NrUmFuZ2UoKTtpZighbnx8IVdzKG4ucGFyZW50KXx8bi5zdGFydEluZGV4IT09MClyZXR1cm4hMX17Y29uc3QgdD1lLnN0YXRlLnRyO0NRKHQpJiZlLmRpc3BhdGNoKHQpfXtjb25zdCB0PWUuc3RhdGUuc2VsZWN0aW9uLiRjdXJzb3I7aWYoIXR8fHQucGFyZW50T2Zmc2V0PjApcmV0dXJuITE7Y29uc3Qgbj10LmJsb2NrUmFuZ2UoKTtpZighbnx8IVdzKG4ucGFyZW50KXx8bi5zdGFydEluZGV4IT09MClyZXR1cm4hMTtjb25zdCByPXQuaW5kZXgobi5kZXB0aCksbz10LmluZGV4KG4uZGVwdGgtMSksaT10LmluZGV4KG4uZGVwdGgtMikscz1uLmRlcHRoLTI+PTEmJldzKHQubm9kZShuLmRlcHRoLTIpKTtyPT09MCYmbz09PTAmJmk8PTEmJnMmJmdRKG4ucGFyZW50LnR5cGUpKGUuc3RhdGUsZS5kaXNwYXRjaCl9cmV0dXJuIElOKGUuc3RhdGUsZS5kaXNwYXRjaCxlKSwhMH1mdW5jdGlvbiBOJCh7bm9kZTplLG1hcms6dCx1cGRhdGVET006bix1cGRhdGVNYXJrOnJ9KXtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7by5jb250ZW50RWRpdGFibGU9ImZhbHNlIixvLmNsYXNzTGlzdC5hZGQodGEuTElTVF9JVEVNX01BUktFUl9DT05UQUlORVIpLG8uYXBwZW5kKHQpO2NvbnN0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikscz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpO3MuY2xhc3NMaXN0LmFkZCh0YS5MSVNUX0lURU1fV0lUSF9DVVNUT01fTUFSS0VSKSxzLmFwcGVuZChvKSxzLmFwcGVuZChpKTtjb25zdCBhPWw9PmwudHlwZSE9PWUudHlwZT8hMTooZT1sLG4oZSxzKSxyKGUsdCksITApO3JldHVybiBhKGUpLHtkb206cyxjb250ZW50RE9NOmksdXBkYXRlOmF9fWZ1bmN0aW9uIE9RKGUsdCl7Y29uc3Qgbj1lLm5vZGUodC5kZXB0aC0xKSxyPWUubm9kZSh0LmRlcHRoLTIpO3JldHVybiFXcyhuKXx8IWlhKHIpPyExOntwYXJlbnRJdGVtOm4scGFyZW50TGlzdDpyfX1mdW5jdGlvbiBUUShlLHQpe2NvbnN0IG49dC5wYXJlbnQscj10LnBhcmVudC5jaGlsZCh0LmVuZEluZGV4LTEpLG89dC5lbmQsaT10LiR0by5lbmQodC5kZXB0aCk7cmV0dXJuIG88aT8oZS5zdGVwKG5ldyBVdChvLTEsaSxvLGksbmV3IEooVS5mcm9tKHIudHlwZS5jcmVhdGUobnVsbCxuLmNvcHkoKSkpLDEsMCksMSwhMCkpLG5ldyBzbChlLmRvYy5yZXNvbHZlKHQuJGZyb20ucG9zKSxlLmRvYy5yZXNvbHZlKGkpLHQuZGVwdGgpKTp0fWZ1bmN0aW9uIFBRKGUsdCl7Y29uc3Qgbj10LnBhcmVudCxyPXQucGFyZW50LmNoaWxkKHQuZW5kSW5kZXgtMSksbz10LmVuZCxpPXQuJHRvLmVuZCh0LmRlcHRoLTEpO3JldHVybiBvKzE8aT8oZS5zdGVwKG5ldyBVdChvLTEsaSxvKzEsaSxuZXcgSihVLmZyb20obi50eXBlLmNyZWF0ZShudWxsLHIudHlwZS5jcmVhdGUobnVsbCkpKSwyLDApLDAsITApKSxuZXcgc2woZS5zZWxlY3Rpb24uJGZyb20sZS5zZWxlY3Rpb24uJHRvLHQuZGVwdGgpKTp0fWZ1bmN0aW9uIE1RKGUsdCxuLHIpe3JldHVybiBRYyh7bGlzdFR5cGU6bi50eXBlLGl0ZW1UeXBlOnIudHlwZSx0cjplfSk/bmV3IHNsKGUuc2VsZWN0aW9uLiRmcm9tLGUuc2VsZWN0aW9uLiR0byx0LmRlcHRoKTp0fWZ1bmN0aW9uIFJRKGUpe2xldCB0PUptKGUuc2VsZWN0aW9uKTtpZighdClyZXR1cm4hMTtjb25zdCBuPU9RKGUuc2VsZWN0aW9uLiRmcm9tLHQpO2lmKCFuKXJldHVybiExO2NvbnN0e3BhcmVudEl0ZW06cixwYXJlbnRMaXN0Om99PW47dD1UUShlLHQpLHQ9UFEoZSx0KSx0PU1RKGUsdCxvLHIpO2NvbnN0IGk9bHUodCk7cmV0dXJuIHR5cGVvZiBpIT0ibnVtYmVyInx8KGUubGlmdCh0LGkpLHQ9Sm0oZS5zZWxlY3Rpb24pLHQmJk0kKGUsZS5kb2MucmVzb2x2ZSh0LmVuZC0yKSkpLCEwfXZhciBOUT0oe3RyOmUsZGlzcGF0Y2g6dH0pPT5SUShlKT8odD09bnVsbHx8dChlLnNjcm9sbEludG9WaWV3KCkpLCEwKTohMTtmdW5jdGlvbiAkUShlLHQsbil7bGV0IHIsbyxpLHM7Y29uc3QgYT10LmRvYztpZihuLnN0YXJ0SW5kZXg+PTEpe3I9ZS5jaGlsZChuLnN0YXJ0SW5kZXgtMSksbz1lLHM9YS5yZXNvbHZlKG4uc3RhcnQpLnN0YXJ0KG4uZGVwdGgpLGk9cysxO2ZvcihsZXQgbD0wO2w8bi5zdGFydEluZGV4LTE7bCsrKWkrPW8uY2hpbGQobCkubm9kZVNpemV9ZWxzZXtjb25zdCBsPXQuaW5kZXgobi5kZXB0aC0xKTtpZihsPj0xKXtjb25zdCBjPXQubm9kZShuLmRlcHRoLTEpLHU9dC5zdGFydChuLmRlcHRoLTEpO2lmKG89Yy5jaGlsZChsLTEpLCFpYShvKSlyZXR1cm4hMTtzPXUrMTtmb3IobGV0IGQ9MDtkPGwtMTtkKyspcys9Yy5jaGlsZChkKS5ub2RlU2l6ZTtpZihyPW8uY2hpbGQoby5jaGlsZENvdW50LTEpLGk9cytvLm5vZGVTaXplLXIubm9kZVNpemUtMSwhV3MocikpcmV0dXJuITF9ZWxzZSByZXR1cm4hMX1yZXR1cm57cHJldmlvdXNJdGVtOnIscHJldmlvdXNMaXN0Om8scHJldmlvdXNJdGVtU3RhcnQ6aSxwcmV2aW91c0xpc3RTdGFydDpzfX1mdW5jdGlvbiBBUShlLHQsbil7bGV0IHIsbztjb25zdCBpPW4uc3RhcnQscz10LmRlcHRoPj1uLmRlcHRoKzI/dC5lbmQobi5kZXB0aCsyKTpuLmVuZC0xLGE9bi5lbmQ7cmV0dXJuIHMrMT49YT8ocj1lLnNsaWNlKGksYSksbz1udWxsKToocj1lLnNsaWNlKGkscyksbz1lLnNsaWNlKHMrMSxhLTEpKSx7c2VsZWN0ZWRTbGljZTpyLHVuc2VsZWN0ZWRTbGljZTpvfX1mdW5jdGlvbiBEUShlKXtjb25zdHskZnJvbTp0LCR0bzpufT1lLnNlbGVjdGlvbixyPUptKGUuc2VsZWN0aW9uKTtpZighcilyZXR1cm4hMTtjb25zdCBvPWUuZG9jLnJlc29sdmUoci5zdGFydCkubm9kZSgpO2lmKCFpYShvKSlyZXR1cm4hMTtjb25zdCBpPSRRKG8sdCxyKTtpZighaSlyZXR1cm4hMTtjb25zdHtwcmV2aW91c0l0ZW06cyxwcmV2aW91c0xpc3Q6YSxwcmV2aW91c0l0ZW1TdGFydDpsfT1pLHtzZWxlY3RlZFNsaWNlOmMsdW5zZWxlY3RlZFNsaWNlOnV9PUFRKGUuZG9jLG4sciksZD1zLmNvbnRlbnQuYXBwZW5kKFUuZnJvbUFycmF5KFtvLmNvcHkoYy5jb250ZW50KV0pKS5hcHBlbmQodT91LmNvbnRlbnQ6VS5lbXB0eSk7ZS5kZWxldGVSYW5nZShyLnN0YXJ0LHIuZW5kKTtjb25zdCBmPWwrcy5ub2RlU2l6ZS0yLHA9cy5jb3B5KGQpO3JldHVybiBwLmNoZWNrKCksZS5yZXBsYWNlUmFuZ2VXaXRoKGwtMSxmKzEscCksZS5zZXRTZWxlY3Rpb24oYT09PW8/VGUuYmV0d2VlbihlLmRvYy5yZXNvbHZlKHQucG9zKSxlLmRvYy5yZXNvbHZlKG4ucG9zKSk6VGUuYmV0d2VlbihlLmRvYy5yZXNvbHZlKHQucG9zLTIpLGUuZG9jLnJlc29sdmUobi5wb3MtMikpKSwhMH12YXIgSVE9KHt0cjplLGRpc3BhdGNoOnR9KT0+RFEoZSk/KHQ9PW51bGx8fHQoZS5zY3JvbGxJbnRvVmlldygpKSwhMCk6ITEsJCQ9Y2xhc3MgZXh0ZW5kcyBfdHtnZXQgbmFtZSgpe3JldHVybiJsaXN0SXRlbVNoYXJlZCJ9Y3JlYXRlS2V5bWFwKCl7Y29uc3QgZT17VGFiOklRLCJTaGlmdC1UYWIiOk5RLEJhY2tzcGFjZTpPQywiTW9kLUJhY2tzcGFjZSI6T0N9O2lmKHhvLmlzTWFjKXtjb25zdCB0PXsiQ3RybC1oIjplLkJhY2tzcGFjZSwiQWx0LUJhY2tzcGFjZSI6ZVsiTW9kLUJhY2tzcGFjZSJdfTtyZXR1cm57Li4uZSwuLi50fX1yZXR1cm4gZX1jcmVhdGVQbHVnaW4oKXtyZXR1cm57YXBwZW5kVHJhbnNhY3Rpb246KGUsdCxuKT0+e2NvbnN0IHI9bi50cjtyZXR1cm4gTSQocik/cjpudWxsfX19fSxldT1jbGFzcyBleHRlbmRzIG9ve2dldCBuYW1lKCl7cmV0dXJuImxpc3RJdGVtIn1jcmVhdGVUYWdzKCl7cmV0dXJuW0xlLkxpc3RJdGVtTm9kZV19Y3JlYXRlTm9kZVNwZWMoZSx0KXtyZXR1cm57Y29udGVudDoicGFyYWdyYXBoIGJsb2NrKiIsZGVmaW5pbmc6ITAsZHJhZ2dhYmxlOiExLC4uLnQsYXR0cnM6ey4uLmUuZGVmYXVsdHMoKSxjbG9zZWQ6e2RlZmF1bHQ6ITF9LG5lc3RlZDp7ZGVmYXVsdDohMX19LHBhcnNlRE9NOlt7dGFnOiJsaSIsZ2V0QXR0cnM6ZS5wYXJzZSxwcmlvcml0eTpjdC5Mb3dlc3R9LC4uLnQucGFyc2VET00/P1tdXSx0b0RPTTpuPT5bImxpIixlLmRvbShuKSwwXX19Y3JlYXRlTm9kZVZpZXdzKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5lbmFibGVDb2xsYXBzaWJsZT8oZSx0LG4pPT57Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKHRhLkNPTExBUFNJQkxFX0xJU1RfSVRFTV9CVVRUT04pLHIuY29udGVudEVkaXRhYmxlPSJmYWxzZSIsci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntpZihyLmNsYXNzTGlzdC5jb250YWlucygiZGlzYWJsZWQiKSlyZXR1cm47Y29uc3Qgbz1uKCksaT13ZS5jcmVhdGUodC5zdGF0ZS5kb2Msbyk7cmV0dXJuIHQuZGlzcGF0Y2godC5zdGF0ZS50ci5zZXRTZWxlY3Rpb24oaSkpLHRoaXMuc3RvcmUuY29tbWFuZHMudG9nZ2xlTGlzdEl0ZW1DbG9zZWQoKSwhMH0pLE4kKHttYXJrOnIsbm9kZTplLHVwZGF0ZURPTTpMUSx1cGRhdGVNYXJrOmpRfSl9Ont9fWNyZWF0ZUtleW1hcCgpe3JldHVybntFbnRlcjpQJCh0aGlzLnR5cGUpfX1jcmVhdGVFeHRlbnNpb25zKCl7cmV0dXJuW25ldyAkJF19dG9nZ2xlTGlzdEl0ZW1DbG9zZWQoZSl7cmV0dXJuKHtzdGF0ZTp7dHI6dCxzZWxlY3Rpb246bn0sZGlzcGF0Y2g6cn0pPT57aWYoIXJ2KG4pfHxuLm5vZGUudHlwZS5uYW1lIT09dGhpcy5uYW1lKXJldHVybiExO2NvbnN0e25vZGU6byxmcm9tOml9PW47cmV0dXJuIGU9SHooZSk/ZTohby5hdHRycy5jbG9zZWQscj09bnVsbHx8cih0LnNldE5vZGVNYXJrdXAoaSx2b2lkIDAsey4uLm8uYXR0cnMsY2xvc2VkOmV9KSksITB9fWxpZnRMaXN0SXRlbU91dE9mTGlzdChlKXtyZXR1cm4gUiQoZT8/dGhpcy50eXBlKX19O2lvKFtkZSgpXSxldS5wcm90b3R5cGUsInRvZ2dsZUxpc3RJdGVtQ2xvc2VkIiwxKTtpbyhbZGUoKV0sZXUucHJvdG90eXBlLCJsaWZ0TGlzdEl0ZW1PdXRPZkxpc3QiLDEpO2V1PWlvKFtKZSh7ZGVmYXVsdE9wdGlvbnM6e2VuYWJsZUNvbGxhcHNpYmxlOiExfSxzdGF0aWNLZXlzOlsiZW5hYmxlQ29sbGFwc2libGUiXX0pXSxldSk7ZnVuY3Rpb24gTFEoZSx0KXtlLmF0dHJzLmNsb3NlZD90LmNsYXNzTGlzdC5hZGQodGEuQ09MTEFQU0lCTEVfTElTVF9JVEVNX0NMT1NFRCk6dC5jbGFzc0xpc3QucmVtb3ZlKHRhLkNPTExBUFNJQkxFX0xJU1RfSVRFTV9DTE9TRUQpfWZ1bmN0aW9uIGpRKGUsdCl7ZS5jaGlsZENvdW50PD0xP3QuY2xhc3NMaXN0LmFkZCgiZGlzYWJsZWQiKTp0LmNsYXNzTGlzdC5yZW1vdmUoImRpc2FibGVkIil9dmFyIERmPWNsYXNzIGV4dGVuZHMgb297Z2V0IG5hbWUoKXtyZXR1cm4iYnVsbGV0TGlzdCJ9Y3JlYXRlVGFncygpe3JldHVybltMZS5CbG9jayxMZS5MaXN0Q29udGFpbmVyTm9kZV19Y3JlYXRlTm9kZVNwZWMoZSx0KXtyZXR1cm57Y29udGVudDoibGlzdEl0ZW0rIiwuLi50LGF0dHJzOmUuZGVmYXVsdHMoKSxwYXJzZURPTTpbe3RhZzoidWwiLGdldEF0dHJzOmUucGFyc2V9LC4uLnQucGFyc2VET00/P1tdXSx0b0RPTTpuPT5bInVsIixlLmRvbShuKSwwXX19Y3JlYXRlTm9kZVZpZXdzKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5lbmFibGVTcGluZT8oZSx0LG4pPT57dmFyIHI7Y29uc3Qgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7Y29uc3QgaT1uKCkscz10LnN0YXRlLmRvYy5yZXNvbHZlKGkrMSksYT1zLm5vZGUocy5kZXB0aC0xKTtpZighKCgocj1hPT1udWxsP3ZvaWQgMDphLnR5cGUpPT1udWxsP3ZvaWQgMDpyLm5hbWUpIT09Imxpc3RJdGVtIikpe2NvbnN0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jb250ZW50RWRpdGFibGU9ImZhbHNlIix1LmNsYXNzTGlzdC5hZGQodGEuTElTVF9TUElORSksdS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZD0+e2NvbnN0IGY9bigpLHA9dC5zdGF0ZS5kb2MucmVzb2x2ZShmKzEpLG09cC5zdGFydChwLmRlcHRoLTEpLGc9d2UuY3JlYXRlKHQuc3RhdGUuZG9jLG0tMSk7dC5kaXNwYXRjaCh0LnN0YXRlLnRyLnNldFNlbGVjdGlvbihnKSksdGhpcy5zdG9yZS5jb21tYW5kcy50b2dnbGVMaXN0SXRlbUNsb3NlZCgpLGQucHJldmVudERlZmF1bHQoKSxkLnN0b3BQcm9wYWdhdGlvbigpfSksby5hcHBlbmQodSl9Y29uc3QgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ1bCIpO3JldHVybiBjLmNsYXNzTGlzdC5hZGQodGEuVUxfTElTVF9DT05URU5UKSxvLmFwcGVuZChjKSx7ZG9tOm8sY29udGVudERPTTpjfX06e319Y3JlYXRlRXh0ZW5zaW9ucygpe3JldHVybltuZXcgZXUoe3ByaW9yaXR5OmN0LkxvdyxlbmFibGVDb2xsYXBzaWJsZTp0aGlzLm9wdGlvbnMuZW5hYmxlU3BpbmV9KV19dG9nZ2xlQnVsbGV0TGlzdCgpe3JldHVybiBMdyh0aGlzLnR5cGUsUHQodGhpcy5zdG9yZS5zY2hlbWEubm9kZXMsImxpc3RJdGVtIikpfWxpc3RTaG9ydGN1dChlKXtyZXR1cm4gdGhpcy50b2dnbGVCdWxsZXRMaXN0KCkoZSl9Y3JlYXRlSW5wdXRSdWxlcygpe2NvbnN0IGU9L15ccyooWyorLV0pXHMkLztyZXR1cm5bUTEoZSx0aGlzLnR5cGUpLG5ldyBybyhlLCh0LG4scixvKT0+e2NvbnN0IGk9dC50cjtyZXR1cm4gaS5kZWxldGVSYW5nZShyLG8pLFFjKHtsaXN0VHlwZTp0aGlzLnR5cGUsaXRlbVR5cGU6UHQodGhpcy5zdG9yZS5zY2hlbWEubm9kZXMsImxpc3RJdGVtIiksdHI6aX0pP2k6bnVsbH0pXX19O2lvKFtkZSh7aWNvbjoibGlzdFVub3JkZXJlZCIsbGFiZWw6KHt0OmV9KT0+ZShKMS5CVUxMRVRfTElTVF9MQUJFTCl9KV0sRGYucHJvdG90eXBlLCJ0b2dnbGVCdWxsZXRMaXN0IiwxKTtpbyhbTHIoe3Nob3J0Y3V0OlkuQnVsbGV0TGlzdCxjb21tYW5kOiJ0b2dnbGVCdWxsZXRMaXN0In0pXSxEZi5wcm90b3R5cGUsImxpc3RTaG9ydGN1dCIsMSk7RGY9aW8oW0plKHtkZWZhdWx0T3B0aW9uczp7ZW5hYmxlU3BpbmU6ITF9LHN0YXRpY0tleXM6WyJlbmFibGVTcGluZSJdfSldLERmKTt2YXIgSWY9Y2xhc3MgZXh0ZW5kcyBvb3tnZXQgbmFtZSgpe3JldHVybiJvcmRlcmVkTGlzdCJ9Y3JlYXRlVGFncygpe3JldHVybltMZS5CbG9jayxMZS5MaXN0Q29udGFpbmVyTm9kZV19Y3JlYXRlTm9kZVNwZWMoZSx0KXtyZXR1cm57Y29udGVudDoibGlzdEl0ZW0rIiwuLi50LGF0dHJzOnsuLi5lLmRlZmF1bHRzKCksb3JkZXI6e2RlZmF1bHQ6MX19LHBhcnNlRE9NOlt7dGFnOiJvbCIsZ2V0QXR0cnM6bj0+bmkobik/ey4uLmUucGFyc2Uobiksb3JkZXI6KyhuLmdldEF0dHJpYnV0ZSgic3RhcnQiKT8/MSl9Ont9fSwuLi50LnBhcnNlRE9NPz9bXV0sdG9ET006bj0+e2NvbnN0IHI9ZS5kb20obik7cmV0dXJuIG4uYXR0cnMub3JkZXI9PT0xP1sib2wiLHIsMF06WyJvbCIsey4uLnIsc3RhcnQ6bi5hdHRycy5vcmRlcn0sMF19fX1jcmVhdGVFeHRlbnNpb25zKCl7cmV0dXJuW25ldyBldSh7cHJpb3JpdHk6Y3QuTG93fSldfXRvZ2dsZU9yZGVyZWRMaXN0KCl7cmV0dXJuIEx3KHRoaXMudHlwZSxQdCh0aGlzLnN0b3JlLnNjaGVtYS5ub2RlcywibGlzdEl0ZW0iKSl9bGlzdFNob3J0Y3V0KGUpe3JldHVybiB0aGlzLnRvZ2dsZU9yZGVyZWRMaXN0KCkoZSl9Y3JlYXRlSW5wdXRSdWxlcygpe2NvbnN0IGU9L14oXGQrKVwuXHMkLztyZXR1cm5bUTEoZSx0aGlzLnR5cGUsdD0+KHtvcmRlcjorUHQodCwxKX0pLCh0LG4pPT5uLmNoaWxkQ291bnQrbi5hdHRycy5vcmRlcj09PStQdCh0LDEpKSxuZXcgcm8oZSwodCxuLHIsbyk9Pntjb25zdCBpPXQudHI7aWYoaS5kZWxldGVSYW5nZShyLG8pLCFRYyh7bGlzdFR5cGU6dGhpcy50eXBlLGl0ZW1UeXBlOlB0KHRoaXMuc3RvcmUuc2NoZW1hLm5vZGVzLCJsaXN0SXRlbSIpLHRyOml9KSlyZXR1cm4gbnVsbDtjb25zdCBhPStQdChuLDEpO2lmKGEhPT0xKXtjb25zdCBsPV9mKHtzZWxlY3Rpb246aS5zZWxlY3Rpb24sdHlwZXM6dGhpcy50eXBlfSk7bCYmaS5zZXROb2RlTWFya3VwKGwucG9zLHZvaWQgMCx7b3JkZXI6YX0pfXJldHVybiBpfSldfX07aW8oW2RlKHtpY29uOiJsaXN0T3JkZXJlZCIsbGFiZWw6KHt0OmV9KT0+ZShKMS5PUkRFUkVEX0xJU1RfTEFCRUwpfSldLElmLnByb3RvdHlwZSwidG9nZ2xlT3JkZXJlZExpc3QiLDEpO2lvKFtMcih7c2hvcnRjdXQ6WS5PcmRlcmVkTGlzdCxjb21tYW5kOiJ0b2dnbGVPcmRlcmVkTGlzdCJ9KV0sSWYucHJvdG90eXBlLCJsaXN0U2hvcnRjdXQiLDEpO0lmPWlvKFtKZSh7fSldLElmKTt2YXIgQSQ9Y2xhc3MgZXh0ZW5kcyBvb3tnZXQgbmFtZSgpe3JldHVybiJ0YXNrTGlzdEl0ZW0ifWNyZWF0ZVRhZ3MoKXtyZXR1cm5bTGUuTGlzdEl0ZW1Ob2RlXX1jcmVhdGVOb2RlU3BlYyhlLHQpe3JldHVybntjb250ZW50OiJwYXJhZ3JhcGggYmxvY2sqIixkZWZpbmluZzohMCxkcmFnZ2FibGU6ITEsLi4udCxhdHRyczp7Li4uZS5kZWZhdWx0cygpLGNoZWNrZWQ6e2RlZmF1bHQ6ITF9fSxwYXJzZURPTTpbe3RhZzoibGlbZGF0YS10YXNrLWxpc3QtaXRlbV0iLGdldEF0dHJzOm49PntsZXQgcj0hMTtyZXR1cm4gbmkobikmJm4uZ2V0QXR0cmlidXRlKCJkYXRhLWNoZWNrZWQiKSE9PW51bGwmJihyPSEwKSx7Y2hlY2tlZDpyLC4uLmUucGFyc2Uobil9fSxwcmlvcml0eTpjdC5NZWRpdW19LC4uLnQucGFyc2VET00/P1tdXSx0b0RPTTpuPT5bImxpIix7Li4uZS5kb20obiksImRhdGEtdGFzay1saXN0LWl0ZW0iOiIiLCJkYXRhLWNoZWNrZWQiOm4uYXR0cnMuY2hlY2tlZD8iIjp2b2lkIDB9LDBdfX1jcmVhdGVOb2RlVmlld3MoKXtyZXR1cm4oZSx0LG4pPT57Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiByLnR5cGU9ImNoZWNrYm94IixyLmNsYXNzTGlzdC5hZGQodGEuTElTVF9JVEVNX0NIRUNLQk9YKSxyLmNvbnRlbnRFZGl0YWJsZT0iZmFsc2UiLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLG89Pnt0LmVkaXRhYmxlfHxvLnByZXZlbnREZWZhdWx0KCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKCk9Pntjb25zdCBvPW4oKSxpPXQuc3RhdGUuZG9jLnJlc29sdmUobysxKTt0aGlzLnN0b3JlLmNvbW1hbmRzLnRvZ2dsZUNoZWNrYm94Q2hlY2tlZCh7JHBvczppfSl9KSxyLmNoZWNrZWQ9ZS5hdHRycy5jaGVja2VkLE4kKHtub2RlOmUsbWFyazpyLHVwZGF0ZURPTTp6USx1cGRhdGVNYXJrOkZRfSl9fWNyZWF0ZUtleW1hcCgpe3JldHVybntFbnRlcjpQJCh0aGlzLnR5cGUpfX1jcmVhdGVFeHRlbnNpb25zKCl7cmV0dXJuW25ldyAkJF19dG9nZ2xlQ2hlY2tib3hDaGVja2VkKGUpe2xldCB0LG47cmV0dXJuIHR5cGVvZiBlPT0iYm9vbGVhbiI/dD1lOmUmJih0PWUuY2hlY2tlZCxuPWUuJHBvcyksKHt0cjpyLGRpc3BhdGNoOm99KT0+e2NvbnN0IGk9X2Yoe3NlbGVjdGlvbjpuPz9yLnNlbGVjdGlvbi4kZnJvbSx0eXBlczp0aGlzLnR5cGV9KTtpZighaSlyZXR1cm4hMTtjb25zdHtub2RlOnMscG9zOmF9PWksbD17Li4ucy5hdHRycyxjaGVja2VkOnQ/PyFzLmF0dHJzLmNoZWNrZWR9O3JldHVybiBvPT1udWxsfHxvKHIuc2V0Tm9kZU1hcmt1cChhLHZvaWQgMCxsKSksITB9fWNyZWF0ZUlucHV0UnVsZXMoKXtjb25zdCBlPS9eXHMqKFxbKCA/fHh8WCldXHMpJC87cmV0dXJuW1ExKGUsdGhpcy50eXBlLHQ9Pih7Y2hlY2tlZDpbIngiLCJYIl0uaW5jbHVkZXMoTGQodCwyKSl9KSksbmV3IHJvKGUsKHQsbixyLG8pPT57Y29uc3QgaT10LnRyO2lmKGkuZGVsZXRlUmFuZ2UocixvKSwhUWMoe2xpc3RUeXBlOlB0KHRoaXMuc3RvcmUuc2NoZW1hLm5vZGVzLCJ0YXNrTGlzdCIpLGl0ZW1UeXBlOnRoaXMudHlwZSx0cjppfSkpcmV0dXJuIG51bGw7Y29uc3QgYT1bIngiLCJYIl0uaW5jbHVkZXMoTGQobiwyKSk7aWYoYSl7Y29uc3QgbD1fZih7c2VsZWN0aW9uOmkuc2VsZWN0aW9uLHR5cGVzOnRoaXMudHlwZX0pO2wmJmkuc2V0Tm9kZU1hcmt1cChsLnBvcyx2b2lkIDAse2NoZWNrZWQ6YX0pfXJldHVybiBpfSldfX07aW8oW2RlKCldLEEkLnByb3RvdHlwZSwidG9nZ2xlQ2hlY2tib3hDaGVja2VkIiwxKTtmdW5jdGlvbiB6UShlLHQpe2UuYXR0cnMuY2hlY2tlZD90LnNldEF0dHJpYnV0ZSgiZGF0YS1jaGVja2VkIiwiIik6dC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtY2hlY2tlZCIpLHQuc2V0QXR0cmlidXRlKCJkYXRhLXRhc2stbGlzdC1pdGVtIiwiIil9ZnVuY3Rpb24gRlEoZSx0KXt0LmNoZWNrZWQ9ISFlLmF0dHJzLmNoZWNrZWR9dmFyIEQkPWNsYXNzIGV4dGVuZHMgb297Z2V0IG5hbWUoKXtyZXR1cm4idGFza0xpc3QifWNyZWF0ZVRhZ3MoKXtyZXR1cm5bTGUuQmxvY2ssTGUuTGlzdENvbnRhaW5lck5vZGVdfWNyZWF0ZU5vZGVTcGVjKGUsdCl7cmV0dXJue2NvbnRlbnQ6InRhc2tMaXN0SXRlbSsiLC4uLnQsYXR0cnM6ZS5kZWZhdWx0cygpLHBhcnNlRE9NOlt7dGFnOiJ1bFtkYXRhLXRhc2stbGlzdF0iLGdldEF0dHJzOmUucGFyc2UscHJpb3JpdHk6Y3QuTWVkaXVtfSwuLi50LnBhcnNlRE9NPz9bXV0sdG9ET006bj0+WyJ1bCIsey4uLmUuZG9tKG4pLCJkYXRhLXRhc2stbGlzdCI6IiJ9LDBdfX1jcmVhdGVFeHRlbnNpb25zKCl7cmV0dXJuW25ldyBBJCh7fSldfXRvZ2dsZVRhc2tMaXN0KCl7cmV0dXJuIEx3KHRoaXMudHlwZSxQdCh0aGlzLnN0b3JlLnNjaGVtYS5ub2RlcywidGFza0xpc3RJdGVtIikpfWxpc3RTaG9ydGN1dChlKXtyZXR1cm4gdGhpcy50b2dnbGVUYXNrTGlzdCgpKGUpfX07aW8oW2RlKHtpY29uOiJjaGVja2JveE11bHRpcGxlTGluZSIsbGFiZWw6KHt0OmV9KT0+ZShKMS5UQVNLX0xJU1RfTEFCRUwpfSldLEQkLnByb3RvdHlwZSwidG9nZ2xlVGFza0xpc3QiLDEpO2lvKFtMcih7c2hvcnRjdXQ6WS5UYXNrTGlzdCxjb21tYW5kOiJ0b2dnbGVUYXNrTGlzdCJ9KV0sRCQucHJvdG90eXBlLCJsaXN0U2hvcnRjdXQiLDEpO3ZhciBCUT1mdW5jdGlvbihlKXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO3ZhciB0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO3JldHVybiB0Lm93bmVyRG9jdW1lbnQuYm9keX0samw9bmV3IFdlYWtNYXAsWXA9bmV3IFdlYWtNYXAsWHA9e30sVXk9MCxJJD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmKGUuaG9zdHx8SSQoZS5wYXJlbnROb2RlKSl9LFVRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKG4pe2lmKGUuY29udGFpbnMobikpcmV0dXJuIG47dmFyIHI9SSQobik7cmV0dXJuIHImJmUuY29udGFpbnMocik/cjooY29uc29sZS5lcnJvcigiYXJpYS1oaWRkZW4iLG4sImluIG5vdCBjb250YWluZWQgaW5zaWRlIixlLCIuIERvaW5nIG5vdGhpbmciKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hIW59KX0sVlE9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89VVEodCxBcnJheS5pc0FycmF5KGUpP2U6W2VdKTtYcFtuXXx8KFhwW25dPW5ldyBXZWFrTWFwKTt2YXIgaT1YcFtuXSxzPVtdLGE9bmV3IFNldCxsPW5ldyBTZXQobyksYz1mdW5jdGlvbihkKXshZHx8YS5oYXMoZCl8fChhLmFkZChkKSxjKGQucGFyZW50Tm9kZSkpfTtvLmZvckVhY2goYyk7dmFyIHU9ZnVuY3Rpb24oZCl7IWR8fGwuaGFzKGQpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGQuY2hpbGRyZW4sZnVuY3Rpb24oZil7aWYoYS5oYXMoZikpdShmKTtlbHNle3ZhciBwPWYuZ2V0QXR0cmlidXRlKHIpLG09cCE9PW51bGwmJnAhPT0iZmFsc2UiLGc9KGpsLmdldChmKXx8MCkrMSx5PShpLmdldChmKXx8MCkrMTtqbC5zZXQoZixnKSxpLnNldChmLHkpLHMucHVzaChmKSxnPT09MSYmbSYmWXAuc2V0KGYsITApLHk9PT0xJiZmLnNldEF0dHJpYnV0ZShuLCJ0cnVlIiksbXx8Zi5zZXRBdHRyaWJ1dGUociwidHJ1ZSIpfX0pfTtyZXR1cm4gdSh0KSxhLmNsZWFyKCksVXkrKyxmdW5jdGlvbigpe3MuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgZj1qbC5nZXQoZCktMSxwPWkuZ2V0KGQpLTE7amwuc2V0KGQsZiksaS5zZXQoZCxwKSxmfHwoWXAuaGFzKGQpfHxkLnJlbW92ZUF0dHJpYnV0ZShyKSxZcC5kZWxldGUoZCkpLHB8fGQucmVtb3ZlQXR0cmlidXRlKG4pfSksVXktLSxVeXx8KGpsPW5ldyBXZWFrTWFwLGpsPW5ldyBXZWFrTWFwLFlwPW5ldyBXZWFrTWFwLFhwPXt9KX19LGh2PWZ1bmN0aW9uKGUsdCxuKXtuPT09dm9pZCAwJiYobj0iZGF0YS1hcmlhLWhpZGRlbiIpO3ZhciByPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheShlKT9lOltlXSksbz10fHxCUShlKTtyZXR1cm4gbz8oci5wdXNoLmFwcGx5KHIsQXJyYXkuZnJvbShvLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxpdmVdIikpKSxWUShyLG8sbiwiYXJpYS1oaWRkZW4iKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIEhRKGUsdD1nbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50KXtjb25zdCBuPXBuKGUpO2gudXNlRWZmZWN0KCgpPT57Y29uc3Qgcj1vPT57by5rZXk9PT0iRXNjYXBlIiYmbihvKX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsciksKCk9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscil9LFtuLHRdKX1jb25zdCBjYj0iZGlzbWlzc2FibGVMYXllci51cGRhdGUiLFdRPSJkaXNtaXNzYWJsZUxheWVyLnBvaW50ZXJEb3duT3V0c2lkZSIsS1E9ImRpc21pc3NhYmxlTGF5ZXIuZm9jdXNPdXRzaWRlIjtsZXQgVEM7Y29uc3QgcVE9aC5jcmVhdGVDb250ZXh0KHtsYXllcnM6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LGJyYW5jaGVzOm5ldyBTZXR9KSxtdj1oLmZvcndhcmRSZWYoKGUsdCk9Pnt2YXIgbjtjb25zdHtkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6cj0hMSxvbkVzY2FwZUtleURvd246byxvblBvaW50ZXJEb3duT3V0c2lkZTppLG9uRm9jdXNPdXRzaWRlOnMsb25JbnRlcmFjdE91dHNpZGU6YSxvbkRpc21pc3M6bCwuLi5jfT1lLHU9aC51c2VDb250ZXh0KHFRKSxbZCxmXT1oLnVzZVN0YXRlKG51bGwpLHA9KG49ZD09bnVsbD92b2lkIDA6ZC5vd25lckRvY3VtZW50KSE9PW51bGwmJm4hPT12b2lkIDA/bjpnbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50LFssbV09aC51c2VTdGF0ZSh7fSksZz1xZSh0LFA9PmYoUCkpLHk9QXJyYXkuZnJvbSh1LmxheWVycyksW3ZdPVsuLi51LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSkseD15LmluZGV4T2Yodiksdz1kP3kuaW5kZXhPZihkKTotMSxrPXUubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT4wLEU9dz49eCxTPUdRKFA9Pntjb25zdCBNPVAudGFyZ2V0LEE9Wy4uLnUuYnJhbmNoZXNdLnNvbWUoST0+SS5jb250YWlucyhNKSk7IUV8fEF8fChpPT1udWxsfHxpKFApLGE9PW51bGx8fGEoUCksUC5kZWZhdWx0UHJldmVudGVkfHxsPT1udWxsfHxsKCkpfSxwKSxfPVlRKFA9Pntjb25zdCBNPVAudGFyZ2V0O1suLi51LmJyYW5jaGVzXS5zb21lKEk9PkkuY29udGFpbnMoTSkpfHwocz09bnVsbHx8cyhQKSxhPT1udWxsfHxhKFApLFAuZGVmYXVsdFByZXZlbnRlZHx8bD09bnVsbHx8bCgpKX0scCk7cmV0dXJuIEhRKFA9Pnt3PT09dS5sYXllcnMuc2l6ZS0xJiYobz09bnVsbHx8byhQKSwhUC5kZWZhdWx0UHJldmVudGVkJiZsJiYoUC5wcmV2ZW50RGVmYXVsdCgpLGwoKSkpfSxwKSxoLnVzZUVmZmVjdCgoKT0+e2lmKGQpcmV0dXJuIHImJih1LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoVEM9cC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMscC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKSx1LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChkKSksdS5sYXllcnMuYWRkKGQpLFBDKCksKCk9PntyJiZ1LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0xJiYocC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9VEMpfX0sW2QscCxyLHVdKSxoLnVzZUVmZmVjdCgoKT0+KCk9PntkJiYodS5sYXllcnMuZGVsZXRlKGQpLHUubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKGQpLFBDKCkpfSxbZCx1XSksaC51c2VFZmZlY3QoKCk9Pntjb25zdCBQPSgpPT5tKHt9KTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjYixQKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihjYixQKX0sW10pLGguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7fSxjLHtyZWY6ZyxzdHlsZTp7cG9pbnRlckV2ZW50czprP0U/ImF1dG8iOiJub25lIjp2b2lkIDAsLi4uZS5zdHlsZX0sb25Gb2N1c0NhcHR1cmU6YWUoZS5vbkZvY3VzQ2FwdHVyZSxfLm9uRm9jdXNDYXB0dXJlKSxvbkJsdXJDYXB0dXJlOmFlKGUub25CbHVyQ2FwdHVyZSxfLm9uQmx1ckNhcHR1cmUpLG9uUG9pbnRlckRvd25DYXB0dXJlOmFlKGUub25Qb2ludGVyRG93bkNhcHR1cmUsUy5vblBvaW50ZXJEb3duQ2FwdHVyZSl9KSl9KTtmdW5jdGlvbiBHUShlLHQ9Z2xvYmFsVGhpcz09bnVsbD92b2lkIDA6Z2xvYmFsVGhpcy5kb2N1bWVudCl7Y29uc3Qgbj1wbihlKSxyPWgudXNlUmVmKCExKSxvPWgudXNlUmVmKCgpPT57fSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57Y29uc3QgaT1hPT57aWYoYS50YXJnZXQmJiFyLmN1cnJlbnQpe2xldCB1PWZ1bmN0aW9uKCl7TCQoV1EsbixjLHtkaXNjcmV0ZTohMH0pfTt2YXIgbD11O2NvbnN0IGM9e29yaWdpbmFsRXZlbnQ6YX07YS5wb2ludGVyVHlwZT09PSJ0b3VjaCI/KHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLG8uY3VycmVudCksby5jdXJyZW50PXUsdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsby5jdXJyZW50LHtvbmNlOiEwfSkpOnUoKX1lbHNlIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLG8uY3VycmVudCk7ci5jdXJyZW50PSExfSxzPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57dC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaSl9LDApO3JldHVybigpPT57d2luZG93LmNsZWFyVGltZW91dChzKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixpKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixvLmN1cnJlbnQpfX0sW3Qsbl0pLHtvblBvaW50ZXJEb3duQ2FwdHVyZTooKT0+ci5jdXJyZW50PSEwfX1mdW5jdGlvbiBZUShlLHQ9Z2xvYmFsVGhpcz09bnVsbD92b2lkIDA6Z2xvYmFsVGhpcy5kb2N1bWVudCl7Y29uc3Qgbj1wbihlKSxyPWgudXNlUmVmKCExKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBvPWk9PntpLnRhcmdldCYmIXIuY3VycmVudCYmTCQoS1Esbix7b3JpZ2luYWxFdmVudDppfSx7ZGlzY3JldGU6ITF9KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsbyksKCk9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsbyl9LFt0LG5dKSx7b25Gb2N1c0NhcHR1cmU6KCk9PnIuY3VycmVudD0hMCxvbkJsdXJDYXB0dXJlOigpPT5yLmN1cnJlbnQ9ITF9fWZ1bmN0aW9uIFBDKCl7Y29uc3QgZT1uZXcgQ3VzdG9tRXZlbnQoY2IpO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQoZSl9ZnVuY3Rpb24gTCQoZSx0LG4se2Rpc2NyZXRlOnJ9KXtjb25zdCBvPW4ub3JpZ2luYWxFdmVudC50YXJnZXQsaT1uZXcgQ3VzdG9tRXZlbnQoZSx7YnViYmxlczohMSxjYW5jZWxhYmxlOiEwLGRldGFpbDpufSk7dCYmby5hZGRFdmVudExpc3RlbmVyKGUsdCx7b25jZTohMH0pLHI/WDIobyxpKTpvLmRpc3BhdGNoRXZlbnQoaSl9bGV0IFZ5PTA7ZnVuY3Rpb24gZ3YoKXtoLnVzZUVmZmVjdCgoKT0+e3ZhciBlLHQ7Y29uc3Qgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yYWRpeC1mb2N1cy1ndWFyZF0iKTtyZXR1cm4gZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyYmVnaW4iLChlPW5bMF0pIT09bnVsbCYmZSE9PXZvaWQgMD9lOk1DKCkpLGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLCh0PW5bMV0pIT09bnVsbCYmdCE9PXZvaWQgMD90Ok1DKCkpLFZ5KyssKCk9PntWeT09PTEmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJhZGl4LWZvY3VzLWd1YXJkXSIpLmZvckVhY2gocj0+ci5yZW1vdmUoKSksVnktLX19LFtdKX1mdW5jdGlvbiBNQygpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiBlLnNldEF0dHJpYnV0ZSgiZGF0YS1yYWRpeC1mb2N1cy1ndWFyZCIsIiIpLGUudGFiSW5kZXg9MCxlLnN0eWxlLmNzc1RleHQ9Im91dGxpbmU6IG5vbmU7IG9wYWNpdHk6IDA7IHBvc2l0aW9uOiBmaXhlZDsgcG9pbnRlci1ldmVudHM6IG5vbmUiLGV9Y29uc3QgSHk9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Nb3VudCIsV3k9ImZvY3VzU2NvcGUuYXV0b0ZvY3VzT25Vbm1vdW50IixSQz17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSx2dj1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtsb29wOm49ITEsdHJhcHBlZDpyPSExLG9uTW91bnRBdXRvRm9jdXM6byxvblVubW91bnRBdXRvRm9jdXM6aSwuLi5zfT1lLFthLGxdPWgudXNlU3RhdGUobnVsbCksYz1wbihvKSx1PXBuKGkpLGQ9aC51c2VSZWYobnVsbCksZj1xZSh0LGc9PmwoZykpLHA9aC51c2VSZWYoe3BhdXNlZDohMSxwYXVzZSgpe3RoaXMucGF1c2VkPSEwfSxyZXN1bWUoKXt0aGlzLnBhdXNlZD0hMX19KS5jdXJyZW50O2gudXNlRWZmZWN0KCgpPT57aWYocil7bGV0IHg9ZnVuY3Rpb24oUyl7aWYocC5wYXVzZWR8fCFhKXJldHVybjtjb25zdCBfPVMudGFyZ2V0O2EuY29udGFpbnMoXyk/ZC5jdXJyZW50PV86aHMoZC5jdXJyZW50LHtzZWxlY3Q6ITB9KX0sdz1mdW5jdGlvbihTKXtpZihwLnBhdXNlZHx8IWEpcmV0dXJuO2NvbnN0IF89Uy5yZWxhdGVkVGFyZ2V0O18hPT1udWxsJiYoYS5jb250YWlucyhfKXx8aHMoZC5jdXJyZW50LHtzZWxlY3Q6ITB9KSl9LGs9ZnVuY3Rpb24oUyl7aWYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWRvY3VtZW50LmJvZHkpZm9yKGNvbnN0IFAgb2YgUylQLnJlbW92ZWROb2Rlcy5sZW5ndGg+MCYmaHMoYSl9O3ZhciBnPXgseT13LHY9aztkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIix4KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdyk7Y29uc3QgRT1uZXcgTXV0YXRpb25PYnNlcnZlcihrKTtyZXR1cm4gYSYmRS5vYnNlcnZlKGEse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIix4KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdyksRS5kaXNjb25uZWN0KCl9fX0sW3IsYSxwLnBhdXNlZF0pLGgudXNlRWZmZWN0KCgpPT57aWYoYSl7JEMuYWRkKHApO2NvbnN0IGc9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZighYS5jb250YWlucyhnKSl7Y29uc3Qgdj1uZXcgQ3VzdG9tRXZlbnQoSHksUkMpO2EuYWRkRXZlbnRMaXN0ZW5lcihIeSxjKSxhLmRpc3BhdGNoRXZlbnQodiksdi5kZWZhdWx0UHJldmVudGVkfHwoWFEodGVlKGokKGEpKSx7c2VsZWN0OiEwfSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWcmJmhzKGEpKX1yZXR1cm4oKT0+e2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihIeSxjKSxzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1uZXcgQ3VzdG9tRXZlbnQoV3ksUkMpO2EuYWRkRXZlbnRMaXN0ZW5lcihXeSx1KSxhLmRpc3BhdGNoRXZlbnQodiksdi5kZWZhdWx0UHJldmVudGVkfHxocyhnPz9kb2N1bWVudC5ib2R5LHtzZWxlY3Q6ITB9KSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoV3ksdSksJEMucmVtb3ZlKHApfSwwKX19fSxbYSxjLHUscF0pO2NvbnN0IG09aC51c2VDYWxsYmFjayhnPT57aWYoIW4mJiFyfHxwLnBhdXNlZClyZXR1cm47Y29uc3QgeT1nLmtleT09PSJUYWIiJiYhZy5hbHRLZXkmJiFnLmN0cmxLZXkmJiFnLm1ldGFLZXksdj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKHkmJnYpe2NvbnN0IHg9Zy5jdXJyZW50VGFyZ2V0LFt3LGtdPVpRKHgpO3cmJms/IWcuc2hpZnRLZXkmJnY9PT1rPyhnLnByZXZlbnREZWZhdWx0KCksbiYmaHModyx7c2VsZWN0OiEwfSkpOmcuc2hpZnRLZXkmJnY9PT13JiYoZy5wcmV2ZW50RGVmYXVsdCgpLG4mJmhzKGsse3NlbGVjdDohMH0pKTp2PT09eCYmZy5wcmV2ZW50RGVmYXVsdCgpfX0sW24scixwLnBhdXNlZF0pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoe3RhYkluZGV4Oi0xfSxzLHtyZWY6ZixvbktleURvd246bX0pKX0pO2Z1bmN0aW9uIFhRKGUse3NlbGVjdDp0PSExfT17fSl7Y29uc3Qgbj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2Zvcihjb25zdCByIG9mIGUpaWYoaHMocix7c2VsZWN0OnR9KSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bilyZXR1cm59ZnVuY3Rpb24gWlEoZSl7Y29uc3QgdD1qJChlKSxuPU5DKHQsZSkscj1OQyh0LnJldmVyc2UoKSxlKTtyZXR1cm5bbixyXX1mdW5jdGlvbiBqJChlKXtjb25zdCB0PVtdLG49ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULHthY2NlcHROb2RlOnI9Pntjb25zdCBvPXIudGFnTmFtZT09PSJJTlBVVCImJnIudHlwZT09PSJoaWRkZW4iO3JldHVybiByLmRpc2FibGVkfHxyLmhpZGRlbnx8bz9Ob2RlRmlsdGVyLkZJTFRFUl9TS0lQOnIudGFiSW5kZXg+PTA/Tm9kZUZpbHRlci5GSUxURVJfQUNDRVBUOk5vZGVGaWx0ZXIuRklMVEVSX1NLSVB9fSk7Zm9yKDtuLm5leHROb2RlKCk7KXQucHVzaChuLmN1cnJlbnROb2RlKTtyZXR1cm4gdH1mdW5jdGlvbiBOQyhlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYoIUpRKG4se3VwVG86dH0pKXJldHVybiBufWZ1bmN0aW9uIEpRKGUse3VwVG86dH0pe2lmKGdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eT09PSJoaWRkZW4iKXJldHVybiEwO2Zvcig7ZTspe2lmKHQhPT12b2lkIDAmJmU9PT10KXJldHVybiExO2lmKGdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheT09PSJub25lIilyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1mdW5jdGlvbiBRUShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJiJzZWxlY3QiaW4gZX1mdW5jdGlvbiBocyhlLHtzZWxlY3Q6dD0hMX09e30pe2lmKGUmJmUuZm9jdXMpe2NvbnN0IG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksZSE9PW4mJlFRKGUpJiZ0JiZlLnNlbGVjdCgpfX1jb25zdCAkQz1lZWUoKTtmdW5jdGlvbiBlZWUoKXtsZXQgZT1bXTtyZXR1cm57YWRkKHQpe2NvbnN0IG49ZVswXTt0IT09biYmKG49PW51bGx8fG4ucGF1c2UoKSksZT1BQyhlLHQpLGUudW5zaGlmdCh0KX0scmVtb3ZlKHQpe3ZhciBuO2U9QUMoZSx0KSwobj1lWzBdKT09PW51bGx8fG49PT12b2lkIDB8fG4ucmVzdW1lKCl9fX1mdW5jdGlvbiBBQyhlLHQpe2NvbnN0IG49Wy4uLmVdLHI9bi5pbmRleE9mKHQpO3JldHVybiByIT09LTEmJm4uc3BsaWNlKHIsMSksbn1mdW5jdGlvbiB0ZWUoZSl7cmV0dXJuIGUuZmlsdGVyKHQ9PnQudGFnTmFtZSE9PSJBIil9ZnVuY3Rpb24geiQoZSl7Y29uc3RbdCxuXT1oLnVzZVN0YXRlKHZvaWQgMCk7cmV0dXJuIFByKCgpPT57aWYoZSl7bih7d2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9KTtjb25zdCByPW5ldyBSZXNpemVPYnNlcnZlcihvPT57aWYoIUFycmF5LmlzQXJyYXkobyl8fCFvLmxlbmd0aClyZXR1cm47Y29uc3QgaT1vWzBdO2xldCBzLGE7aWYoImJvcmRlckJveFNpemUiaW4gaSl7Y29uc3QgbD1pLmJvcmRlckJveFNpemUsYz1BcnJheS5pc0FycmF5KGwpP2xbMF06bDtzPWMuaW5saW5lU2l6ZSxhPWMuYmxvY2tTaXplfWVsc2Ugcz1lLm9mZnNldFdpZHRoLGE9ZS5vZmZzZXRIZWlnaHQ7bih7d2lkdGg6cyxoZWlnaHQ6YX0pfSk7cmV0dXJuIHIub2JzZXJ2ZShlLHtib3g6ImJvcmRlci1ib3gifSksKCk9PnIudW5vYnNlcnZlKGUpfWVsc2Ugbih2b2lkIDApfSxbZV0pLHR9Y29uc3QgRiQ9IlBvcHBlciIsW0IkLGd1XT10byhGJCksW25lZSxVJF09QiQoRiQpLHJlZT1lPT57Y29uc3R7X19zY29wZVBvcHBlcjp0LGNoaWxkcmVuOm59PWUsW3Isb109aC51c2VTdGF0ZShudWxsKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KG5lZSx7c2NvcGU6dCxhbmNob3I6cixvbkFuY2hvckNoYW5nZTpvfSxuKX0sb2VlPSJQb3BwZXJBbmNob3IiLGllZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlUG9wcGVyOm4sdmlydHVhbFJlZjpyLC4uLm99PWUsaT1VJChvZWUsbikscz1oLnVzZVJlZihudWxsKSxhPXFlKHQscyk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57aS5vbkFuY2hvckNoYW5nZSgocj09bnVsbD92b2lkIDA6ci5jdXJyZW50KXx8cy5jdXJyZW50KX0pLHI/bnVsbDpoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoe30sbyx7cmVmOmF9KSl9KSxWJD0iUG9wcGVyQ29udGVudCIsW3NlZSxRbGVdPUIkKFYkKSxhZWU9aC5mb3J3YXJkUmVmKChlLHQpPT57dmFyIG4scixvLGkscyxhLGwsYztjb25zdHtfX3Njb3BlUG9wcGVyOnUsc2lkZTpkPSJib3R0b20iLHNpZGVPZmZzZXQ6Zj0wLGFsaWduOnA9ImNlbnRlciIsYWxpZ25PZmZzZXQ6bT0wLGFycm93UGFkZGluZzpnPTAsYXZvaWRDb2xsaXNpb25zOnk9ITAsY29sbGlzaW9uQm91bmRhcnk6dj1bXSxjb2xsaXNpb25QYWRkaW5nOng9MCxzdGlja3k6dz0icGFydGlhbCIsaGlkZVdoZW5EZXRhY2hlZDprPSExLHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6RT0ib3B0aW1pemVkIixvblBsYWNlZDpTLC4uLl99PWUsUD1VJChWJCx1KSxbTSxBXT1oLnVzZVN0YXRlKG51bGwpLEk9cWUodCx4bj0+QSh4bikpLFtMLHJlXT1oLnVzZVN0YXRlKG51bGwpLFY9eiQoTCksSz0obj1WPT1udWxsP3ZvaWQgMDpWLndpZHRoKSE9PW51bGwmJm4hPT12b2lkIDA/bjowLEM9KHI9Vj09bnVsbD92b2lkIDA6Vi5oZWlnaHQpIT09bnVsbCYmciE9PXZvaWQgMD9yOjAsVD1kKyhwIT09ImNlbnRlciI/Ii0iK3A6IiIpLE89dHlwZW9mIHg9PSJudW1iZXIiP3g6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLnh9LFI9QXJyYXkuaXNBcnJheSh2KT92Olt2XSxOPVIubGVuZ3RoPjAsaj17cGFkZGluZzpPLGJvdW5kYXJ5OlIuZmlsdGVyKGxlZSksYWx0Qm91bmRhcnk6Tn0se3JlZnM6RyxmbG9hdGluZ1N0eWxlczp4ZSxwbGFjZW1lbnQ6dWUsaXNQb3NpdGlvbmVkOmplLG1pZGRsZXdhcmVEYXRhOkNlfT1wUSh7c3RyYXRlZ3k6ImZpeGVkIixwbGFjZW1lbnQ6VCx3aGlsZUVsZW1lbnRzTW91bnRlZDooLi4ueG4pPT5pUSguLi54bix7YW5pbWF0aW9uRnJhbWU6RT09PSJhbHdheXMifSksZWxlbWVudHM6e3JlZmVyZW5jZTpQLmFuY2hvcn0sbWlkZGxld2FyZTpbakooe21haW5BeGlzOmYrQyxhbGlnbm1lbnRBeGlzOm19KSx5JiZzUSh7bWFpbkF4aXM6ITAsY3Jvc3NBeGlzOiExLGxpbWl0ZXI6dz09PSJwYXJ0aWFsIj91USgpOnZvaWQgMCwuLi5qfSkseSYmYVEoey4uLmp9KSxsUSh7Li4uaixhcHBseTooe2VsZW1lbnRzOnhuLHJlY3RzOnFpLGF2YWlsYWJsZVdpZHRoOnBhLGF2YWlsYWJsZUhlaWdodDpOdn0pPT57Y29uc3R7d2lkdGg6JHYsaGVpZ2h0OkF2fT1xaS5yZWZlcmVuY2UsTG89eG4uZmxvYXRpbmcuc3R5bGU7TG8uc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCIsYCR7cGF9cHhgKSxMby5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCIsYCR7TnZ9cHhgKSxMby5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoIixgJHskdn1weGApLExvLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0IixgJHtBdn1weGApfX0pLEwmJmZRKHtlbGVtZW50OkwscGFkZGluZzpnfSksY2VlKHthcnJvd1dpZHRoOkssYXJyb3dIZWlnaHQ6Q30pLGsmJmNRKHtzdHJhdGVneToicmVmZXJlbmNlSGlkZGVuIiwuLi5qfSldfSksW1EsdHRdPUgkKHVlKSxudD1wbihTKTtQcigoKT0+e2plJiYobnQ9PW51bGx8fG50KCkpfSxbamUsbnRdKTtjb25zdCBydD0obz1DZS5hcnJvdyk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLngsUGU9KGk9Q2UuYXJyb3cpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS55LEdlPSgocz1DZS5hcnJvdyk9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLmNlbnRlck9mZnNldCkhPT0wLFtUbix6bl09aC51c2VTdGF0ZSgpO3JldHVybiBQcigoKT0+e00mJnpuKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKE0pLnpJbmRleCl9LFtNXSksaC5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6Ry5zZXRGbG9hdGluZywiZGF0YS1yYWRpeC1wb3BwZXItY29udGVudC13cmFwcGVyIjoiIixzdHlsZTp7Li4ueGUsdHJhbnNmb3JtOmplP3hlLnRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yMDAlKSIsbWluV2lkdGg6Im1heC1jb250ZW50Iix6SW5kZXg6VG4sIi0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4iOlsoYT1DZS50cmFuc2Zvcm1PcmlnaW4pPT09bnVsbHx8YT09PXZvaWQgMD92b2lkIDA6YS54LChsPUNlLnRyYW5zZm9ybU9yaWdpbik9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLnldLmpvaW4oIiAiKX0sZGlyOmUuZGlyfSxoLmNyZWF0ZUVsZW1lbnQoc2VlLHtzY29wZTp1LHBsYWNlZFNpZGU6USxvbkFycm93Q2hhbmdlOnJlLGFycm93WDpydCxhcnJvd1k6UGUsc2hvdWxkSGlkZUFycm93OkdlfSxoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoeyJkYXRhLXNpZGUiOlEsImRhdGEtYWxpZ24iOnR0fSxfLHtyZWY6SSxzdHlsZTp7Li4uXy5zdHlsZSxhbmltYXRpb246amU/dm9pZCAwOiJub25lIixvcGFjaXR5OihjPUNlLmhpZGUpIT09bnVsbCYmYyE9PXZvaWQgMCYmYy5yZWZlcmVuY2VIaWRkZW4/MDp2b2lkIDB9fSkpKSl9KTtmdW5jdGlvbiBsZWUoZSl7cmV0dXJuIGUhPT1udWxsfWNvbnN0IGNlZT1lPT4oe25hbWU6InRyYW5zZm9ybU9yaWdpbiIsb3B0aW9uczplLGZuKHQpe3ZhciBuLHIsbyxpLHM7Y29uc3R7cGxhY2VtZW50OmEscmVjdHM6bCxtaWRkbGV3YXJlRGF0YTpjfT10LGQ9KChuPWMuYXJyb3cpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jZW50ZXJPZmZzZXQpIT09MCxmPWQ/MDplLmFycm93V2lkdGgscD1kPzA6ZS5hcnJvd0hlaWdodCxbbSxnXT1IJChhKSx5PXtzdGFydDoiMCUiLGNlbnRlcjoiNTAlIixlbmQ6IjEwMCUifVtnXSx2PSgocj0obz1jLmFycm93KT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ueCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MCkrZi8yLHg9KChpPShzPWMuYXJyb3cpPT09bnVsbHx8cz09PXZvaWQgMD92b2lkIDA6cy55KSE9PW51bGwmJmkhPT12b2lkIDA/aTowKStwLzI7bGV0IHc9IiIsaz0iIjtyZXR1cm4gbT09PSJib3R0b20iPyh3PWQ/eTpgJHt2fXB4YCxrPWAkey1wfXB4YCk6bT09PSJ0b3AiPyh3PWQ/eTpgJHt2fXB4YCxrPWAke2wuZmxvYXRpbmcuaGVpZ2h0K3B9cHhgKTptPT09InJpZ2h0Ij8odz1gJHstcH1weGAsaz1kP3k6YCR7eH1weGApOm09PT0ibGVmdCImJih3PWAke2wuZmxvYXRpbmcud2lkdGgrcH1weGAsaz1kP3k6YCR7eH1weGApLHtkYXRhOnt4OncseTprfX19fSk7ZnVuY3Rpb24gSCQoZSl7Y29uc3RbdCxuPSJjZW50ZXIiXT1lLnNwbGl0KCItIik7cmV0dXJuW3Qsbl19Y29uc3Qganc9cmVlLHp3PWllZSxGdz1hZWUseXY9aC5mb3J3YXJkUmVmKChlLHQpPT57dmFyIG47Y29uc3R7Y29udGFpbmVyOnI9Z2xvYmFsVGhpcz09bnVsbHx8KG49Z2xvYmFsVGhpcy5kb2N1bWVudCk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmJvZHksLi4ub309ZTtyZXR1cm4gcj9QMi5jcmVhdGVQb3J0YWwoaC5jcmVhdGVFbGVtZW50KFJlLmRpdixGKHt9LG8se3JlZjp0fSkpLHIpOm51bGx9KSxLeT0icm92aW5nRm9jdXNHcm91cC5vbkVudHJ5Rm9jdXMiLHVlZT17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxCdz0iUm92aW5nRm9jdXNHcm91cCIsW3ViLFckLGRlZV09amcoQncpLFtmZWUsSyRdPXRvKEJ3LFtkZWVdKSxbcGVlLGhlZV09ZmVlKEJ3KSxtZWU9aC5mb3J3YXJkUmVmKChlLHQpPT5oLmNyZWF0ZUVsZW1lbnQodWIuUHJvdmlkZXIse3Njb3BlOmUuX19zY29wZVJvdmluZ0ZvY3VzR3JvdXB9LGguY3JlYXRlRWxlbWVudCh1Yi5TbG90LHtzY29wZTplLl9fc2NvcGVSb3ZpbmdGb2N1c0dyb3VwfSxoLmNyZWF0ZUVsZW1lbnQoZ2VlLEYoe30sZSx7cmVmOnR9KSkpKSksZ2VlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVSb3ZpbmdGb2N1c0dyb3VwOm4sb3JpZW50YXRpb246cixsb29wOm89ITEsZGlyOmksY3VycmVudFRhYlN0b3BJZDpzLGRlZmF1bHRDdXJyZW50VGFiU3RvcElkOmEsb25DdXJyZW50VGFiU3RvcElkQ2hhbmdlOmwsb25FbnRyeUZvY3VzOmMsLi4udX09ZSxkPWgudXNlUmVmKG51bGwpLGY9cWUodCxkKSxwPUpmKGkpLFttPW51bGwsZ109UW8oe3Byb3A6cyxkZWZhdWx0UHJvcDphLG9uQ2hhbmdlOmx9KSxbeSx2XT1oLnVzZVN0YXRlKCExKSx4PXBuKGMpLHc9VyQobiksaz1oLnVzZVJlZighMSksW0UsU109aC51c2VTdGF0ZSgwKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBfPWQuY3VycmVudDtpZihfKXJldHVybiBfLmFkZEV2ZW50TGlzdGVuZXIoS3kseCksKCk9Pl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihLeSx4KX0sW3hdKSxoLmNyZWF0ZUVsZW1lbnQocGVlLHtzY29wZTpuLG9yaWVudGF0aW9uOnIsZGlyOnAsbG9vcDpvLGN1cnJlbnRUYWJTdG9wSWQ6bSxvbkl0ZW1Gb2N1czpoLnVzZUNhbGxiYWNrKF89PmcoXyksW2ddKSxvbkl0ZW1TaGlmdFRhYjpoLnVzZUNhbGxiYWNrKCgpPT52KCEwKSxbXSksb25Gb2N1c2FibGVJdGVtQWRkOmgudXNlQ2FsbGJhY2soKCk9PlMoXz0+XysxKSxbXSksb25Gb2N1c2FibGVJdGVtUmVtb3ZlOmgudXNlQ2FsbGJhY2soKCk9PlMoXz0+Xy0xKSxbXSl9LGguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7dGFiSW5kZXg6eXx8RT09PTA/LTE6MCwiZGF0YS1vcmllbnRhdGlvbiI6cn0sdSx7cmVmOmYsc3R5bGU6e291dGxpbmU6Im5vbmUiLC4uLmUuc3R5bGV9LG9uTW91c2VEb3duOmFlKGUub25Nb3VzZURvd24sKCk9PntrLmN1cnJlbnQ9ITB9KSxvbkZvY3VzOmFlKGUub25Gb2N1cyxfPT57Y29uc3QgUD0hay5jdXJyZW50O2lmKF8udGFyZ2V0PT09Xy5jdXJyZW50VGFyZ2V0JiZQJiYheSl7Y29uc3QgTT1uZXcgQ3VzdG9tRXZlbnQoS3ksdWVlKTtpZihfLmN1cnJlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudChNKSwhTS5kZWZhdWx0UHJldmVudGVkKXtjb25zdCBBPXcoKS5maWx0ZXIoSz0+Sy5mb2N1c2FibGUpLEk9QS5maW5kKEs9PksuYWN0aXZlKSxMPUEuZmluZChLPT5LLmlkPT09bSksVj1bSSxMLC4uLkFdLmZpbHRlcihCb29sZWFuKS5tYXAoSz0+Sy5yZWYuY3VycmVudCk7cSQoVil9fWsuY3VycmVudD0hMX0pLG9uQmx1cjphZShlLm9uQmx1ciwoKT0+dighMSkpfSkpKX0pLHZlZT0iUm92aW5nRm9jdXNHcm91cEl0ZW0iLHllZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlUm92aW5nRm9jdXNHcm91cDpuLGZvY3VzYWJsZTpyPSEwLGFjdGl2ZTpvPSExLHRhYlN0b3BJZDppLC4uLnN9PWUsYT1HcigpLGw9aXx8YSxjPWhlZSh2ZWUsbiksdT1jLmN1cnJlbnRUYWJTdG9wSWQ9PT1sLGQ9VyQobikse29uRm9jdXNhYmxlSXRlbUFkZDpmLG9uRm9jdXNhYmxlSXRlbVJlbW92ZTpwfT1jO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2lmKHIpcmV0dXJuIGYoKSwoKT0+cCgpfSxbcixmLHBdKSxoLmNyZWF0ZUVsZW1lbnQodWIuSXRlbVNsb3Qse3Njb3BlOm4saWQ6bCxmb2N1c2FibGU6cixhY3RpdmU6b30saC5jcmVhdGVFbGVtZW50KFJlLnNwYW4sRih7dGFiSW5kZXg6dT8wOi0xLCJkYXRhLW9yaWVudGF0aW9uIjpjLm9yaWVudGF0aW9ufSxzLHtyZWY6dCxvbk1vdXNlRG93bjphZShlLm9uTW91c2VEb3duLG09PntyP2Mub25JdGVtRm9jdXMobCk6bS5wcmV2ZW50RGVmYXVsdCgpfSksb25Gb2N1czphZShlLm9uRm9jdXMsKCk9PmMub25JdGVtRm9jdXMobCkpLG9uS2V5RG93bjphZShlLm9uS2V5RG93bixtPT57aWYobS5rZXk9PT0iVGFiIiYmbS5zaGlmdEtleSl7Yy5vbkl0ZW1TaGlmdFRhYigpO3JldHVybn1pZihtLnRhcmdldCE9PW0uY3VycmVudFRhcmdldClyZXR1cm47Y29uc3QgZz13ZWUobSxjLm9yaWVudGF0aW9uLGMuZGlyKTtpZihnIT09dm9pZCAwKXttLnByZXZlbnREZWZhdWx0KCk7bGV0IHY9ZCgpLmZpbHRlcih4PT54LmZvY3VzYWJsZSkubWFwKHg9PngucmVmLmN1cnJlbnQpO2lmKGc9PT0ibGFzdCIpdi5yZXZlcnNlKCk7ZWxzZSBpZihnPT09InByZXYifHxnPT09Im5leHQiKXtnPT09InByZXYiJiZ2LnJldmVyc2UoKTtjb25zdCB4PXYuaW5kZXhPZihtLmN1cnJlbnRUYXJnZXQpO3Y9Yy5sb29wP1NlZSh2LHgrMSk6di5zbGljZSh4KzEpfXNldFRpbWVvdXQoKCk9PnEkKHYpKX19KX0pKSl9KSx4ZWU9e0Fycm93TGVmdDoicHJldiIsQXJyb3dVcDoicHJldiIsQXJyb3dSaWdodDoibmV4dCIsQXJyb3dEb3duOiJuZXh0IixQYWdlVXA6ImZpcnN0IixIb21lOiJmaXJzdCIsUGFnZURvd246Imxhc3QiLEVuZDoibGFzdCJ9O2Z1bmN0aW9uIGJlZShlLHQpe3JldHVybiB0IT09InJ0bCI/ZTplPT09IkFycm93TGVmdCI/IkFycm93UmlnaHQiOmU9PT0iQXJyb3dSaWdodCI/IkFycm93TGVmdCI6ZX1mdW5jdGlvbiB3ZWUoZSx0LG4pe2NvbnN0IHI9YmVlKGUua2V5LG4pO2lmKCEodD09PSJ2ZXJ0aWNhbCImJlsiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCJdLmluY2x1ZGVzKHIpKSYmISh0PT09Imhvcml6b250YWwiJiZbIkFycm93VXAiLCJBcnJvd0Rvd24iXS5pbmNsdWRlcyhyKSkpcmV0dXJuIHhlZVtyXX1mdW5jdGlvbiBxJChlKXtjb25zdCB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IG4gb2YgZSlpZihuPT09dHx8KG4uZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dCkpcmV0dXJufWZ1bmN0aW9uIFNlZShlLHQpe3JldHVybiBlLm1hcCgobixyKT0+ZVsodCtyKSVlLmxlbmd0aF0pfWNvbnN0IGtlZT1tZWUsRWVlPXllZTt2YXIgV289ZnVuY3Rpb24oKXtyZXR1cm4gV289T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MSxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKyl7bj1hcmd1bWVudHNbcl07Zm9yKHZhciBpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJih0W2ldPW5baV0pfXJldHVybiB0fSxXby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIEckKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJnQuaW5kZXhPZihyKTwwJiYobltyXT1lW3JdKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIG89MCxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxyLmxlbmd0aDtvKyspdC5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHJbb10pJiYobltyW29dXT1lW3Jbb11dKTtyZXR1cm4gbn1mdW5jdGlvbiBfZWUoZSx0LG4pe2lmKG58fGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgcj0wLG89dC5sZW5ndGgsaTtyPG87cisrKShpfHwhKHIgaW4gdCkpJiYoaXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLHIpKSxpW3JdPXRbcl0pO3JldHVybiBlLmNvbmNhdChpfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9dmFyICRoPSJyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uIixBaD0id2lkdGgtYmVmb3JlLXNjcm9sbC1iYXIiLENlZT0id2l0aC1zY3JvbGwtYmFycy1oaWRkZW4iLE9lZT0iLS1yZW1vdmVkLWJvZHktc2Nyb2xsLWJhci1zaXplIjtmdW5jdGlvbiBxeShlLHQpe3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj9lKHQpOmUmJihlLmN1cnJlbnQ9dCksZX1mdW5jdGlvbiBUZWUoZSx0KXt2YXIgbj1oLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlOmUsY2FsbGJhY2s6dCxmYWNhZGU6e2dldCBjdXJyZW50KCl7cmV0dXJuIG4udmFsdWV9LHNldCBjdXJyZW50KHIpe3ZhciBvPW4udmFsdWU7byE9PXImJihuLnZhbHVlPXIsbi5jYWxsYmFjayhyLG8pKX19fX0pWzBdO3JldHVybiBuLmNhbGxiYWNrPXQsbi5mYWNhZGV9dmFyIERDPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFBlZShlLHQpe3ZhciBuPVRlZSh0fHxudWxsLGZ1bmN0aW9uKHIpe3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obyl7cmV0dXJuIHF5KG8scil9KX0pO3JldHVybiBoLnVzZUxheW91dEVmZmVjdChmdW5jdGlvbigpe3ZhciByPURDLmdldChuKTtpZihyKXt2YXIgbz1uZXcgU2V0KHIpLGk9bmV3IFNldChlKSxzPW4uY3VycmVudDtvLmZvckVhY2goZnVuY3Rpb24oYSl7aS5oYXMoYSl8fHF5KGEsbnVsbCl9KSxpLmZvckVhY2goZnVuY3Rpb24oYSl7by5oYXMoYSl8fHF5KGEscyl9KX1EQy5zZXQobixlKX0sW2VdKSxufWZ1bmN0aW9uIE1lZShlKXtyZXR1cm4gZX1mdW5jdGlvbiBSZWUoZSx0KXt0PT09dm9pZCAwJiYodD1NZWUpO3ZhciBuPVtdLHI9ITEsbz17cmVhZDpmdW5jdGlvbigpe2lmKHIpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4iKTtyZXR1cm4gbi5sZW5ndGg/bltuLmxlbmd0aC0xXTplfSx1c2VNZWRpdW06ZnVuY3Rpb24oaSl7dmFyIHM9dChpLHIpO3JldHVybiBuLnB1c2gocyksZnVuY3Rpb24oKXtuPW4uZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT09c30pfX0sYXNzaWduU3luY01lZGl1bTpmdW5jdGlvbihpKXtmb3Iocj0hMDtuLmxlbmd0aDspe3ZhciBzPW47bj1bXSxzLmZvckVhY2goaSl9bj17cHVzaDpmdW5jdGlvbihhKXtyZXR1cm4gaShhKX0sZmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG59fX0sYXNzaWduTWVkaXVtOmZ1bmN0aW9uKGkpe3I9ITA7dmFyIHM9W107aWYobi5sZW5ndGgpe3ZhciBhPW47bj1bXSxhLmZvckVhY2goaSkscz1ufXZhciBsPWZ1bmN0aW9uKCl7dmFyIHU9cztzPVtdLHUuZm9yRWFjaChpKX0sYz1mdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGwpfTtjKCksbj17cHVzaDpmdW5jdGlvbih1KXtzLnB1c2godSksYygpfSxmaWx0ZXI6ZnVuY3Rpb24odSl7cmV0dXJuIHM9cy5maWx0ZXIodSksbn19fX07cmV0dXJuIG99ZnVuY3Rpb24gTmVlKGUpe2U9PT12b2lkIDAmJihlPXt9KTt2YXIgdD1SZWUobnVsbCk7cmV0dXJuIHQub3B0aW9ucz1Xbyh7YXN5bmM6ITAsc3NyOiExfSxlKSx0fXZhciBZJD1mdW5jdGlvbihlKXt2YXIgdD1lLnNpZGVDYXIsbj1HJChlLFsic2lkZUNhciJdKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlNpZGVjYXI6IHBsZWFzZSBwcm92aWRlIGBzaWRlQ2FyYCBwcm9wZXJ0eSB0byBpbXBvcnQgdGhlIHJpZ2h0IGNhciIpO3ZhciByPXQucmVhZCgpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiU2lkZWNhciBtZWRpdW0gbm90IGZvdW5kIik7cmV0dXJuIGguY3JlYXRlRWxlbWVudChyLFdvKHt9LG4pKX07WSQuaXNTaWRlQ2FyRXhwb3J0PSEwO2Z1bmN0aW9uICRlZShlLHQpe3JldHVybiBlLnVzZU1lZGl1bSh0KSxZJH12YXIgWCQ9TmVlKCksR3k9ZnVuY3Rpb24oKXt9LHh2PWguZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3ZhciBuPWgudXNlUmVmKG51bGwpLHI9aC51c2VTdGF0ZSh7b25TY3JvbGxDYXB0dXJlOkd5LG9uV2hlZWxDYXB0dXJlOkd5LG9uVG91Y2hNb3ZlQ2FwdHVyZTpHeX0pLG89clswXSxpPXJbMV0scz1lLmZvcndhcmRQcm9wcyxhPWUuY2hpbGRyZW4sbD1lLmNsYXNzTmFtZSxjPWUucmVtb3ZlU2Nyb2xsQmFyLHU9ZS5lbmFibGVkLGQ9ZS5zaGFyZHMsZj1lLnNpZGVDYXIscD1lLm5vSXNvbGF0aW9uLG09ZS5pbmVydCxnPWUuYWxsb3dQaW5jaFpvb20seT1lLmFzLHY9eT09PXZvaWQgMD8iZGl2Ijp5LHg9RyQoZSxbImZvcndhcmRQcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicmVtb3ZlU2Nyb2xsQmFyIiwiZW5hYmxlZCIsInNoYXJkcyIsInNpZGVDYXIiLCJub0lzb2xhdGlvbiIsImluZXJ0IiwiYWxsb3dQaW5jaFpvb20iLCJhcyJdKSx3PWYsaz1QZWUoW24sdF0pLEU9V28oV28oe30seCksbyk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChoLkZyYWdtZW50LG51bGwsdSYmaC5jcmVhdGVFbGVtZW50KHcse3NpZGVDYXI6WCQscmVtb3ZlU2Nyb2xsQmFyOmMsc2hhcmRzOmQsbm9Jc29sYXRpb246cCxpbmVydDptLHNldENhbGxiYWNrczppLGFsbG93UGluY2hab29tOiEhZyxsb2NrUmVmOm59KSxzP2guY2xvbmVFbGVtZW50KGguQ2hpbGRyZW4ub25seShhKSxXbyhXbyh7fSxFKSx7cmVmOmt9KSk6aC5jcmVhdGVFbGVtZW50KHYsV28oe30sRSx7Y2xhc3NOYW1lOmwscmVmOmt9KSxhKSl9KTt4di5kZWZhdWx0UHJvcHM9e2VuYWJsZWQ6ITAscmVtb3ZlU2Nyb2xsQmFyOiEwLGluZXJ0OiExfTt4di5jbGFzc05hbWVzPXtmdWxsV2lkdGg6QWgsemVyb1JpZ2h0OiRofTt2YXIgQWVlPWZ1bmN0aW9uKCl7aWYodHlwZW9mIF9fd2VicGFja19ub25jZV9fPCJ1IilyZXR1cm4gX193ZWJwYWNrX25vbmNlX199O2Z1bmN0aW9uIERlZSgpe2lmKCFkb2N1bWVudClyZXR1cm4gbnVsbDt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2UudHlwZT0idGV4dC9jc3MiO3ZhciB0PUFlZSgpO3JldHVybiB0JiZlLnNldEF0dHJpYnV0ZSgibm9uY2UiLHQpLGV9ZnVuY3Rpb24gSWVlKGUsdCl7ZS5zdHlsZVNoZWV0P2Uuc3R5bGVTaGVldC5jc3NUZXh0PXQ6ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KSl9ZnVuY3Rpb24gTGVlKGUpe3ZhciB0PWRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07dC5hcHBlbmRDaGlsZChlKX12YXIgamVlPWZ1bmN0aW9uKCl7dmFyIGU9MCx0PW51bGw7cmV0dXJue2FkZDpmdW5jdGlvbihuKXtlPT0wJiYodD1EZWUoKSkmJihJZWUodCxuKSxMZWUodCkpLGUrK30scmVtb3ZlOmZ1bmN0aW9uKCl7ZS0tLCFlJiZ0JiYodC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsKX19fSx6ZWU9ZnVuY3Rpb24oKXt2YXIgZT1qZWUoKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBlLmFkZCh0KSxmdW5jdGlvbigpe2UucmVtb3ZlKCl9fSxbdCYmbl0pfX0sWiQ9ZnVuY3Rpb24oKXt2YXIgZT16ZWUoKSx0PWZ1bmN0aW9uKG4pe3ZhciByPW4uc3R5bGVzLG89bi5keW5hbWljO3JldHVybiBlKHIsbyksbnVsbH07cmV0dXJuIHR9LEZlZT17bGVmdDowLHRvcDowLHJpZ2h0OjAsZ2FwOjB9LFl5PWZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUludChlfHwiIiwxMCl8fDB9LEJlZT1mdW5jdGlvbihlKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KSxuPXRbZT09PSJwYWRkaW5nIj8icGFkZGluZ0xlZnQiOiJtYXJnaW5MZWZ0Il0scj10W2U9PT0icGFkZGluZyI/InBhZGRpbmdUb3AiOiJtYXJnaW5Ub3AiXSxvPXRbZT09PSJwYWRkaW5nIj8icGFkZGluZ1JpZ2h0IjoibWFyZ2luUmlnaHQiXTtyZXR1cm5bWXkobiksWXkociksWXkobyldfSxVZWU9ZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMCYmKGU9Im1hcmdpbiIpLHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBGZWU7dmFyIHQ9QmVlKGUpLG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLHI9d2luZG93LmlubmVyV2lkdGg7cmV0dXJue2xlZnQ6dFswXSx0b3A6dFsxXSxyaWdodDp0WzJdLGdhcDpNYXRoLm1heCgwLHItbit0WzJdLXRbMF0pfX0sVmVlPVokKCksSGVlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUubGVmdCxpPWUudG9wLHM9ZS5yaWdodCxhPWUuZ2FwO3JldHVybiBuPT09dm9pZCAwJiYobj0ibWFyZ2luIiksYAogIC5gLmNvbmNhdChDZWUsYCB7CiAgIG92ZXJmbG93OiBoaWRkZW4gYCkuY29uY2F0KHIsYDsKICAgcGFkZGluZy1yaWdodDogYCkuY29uY2F0KGEsInB4ICIpLmNvbmNhdChyLGA7CiAgfQogIGJvZHkgewogICAgb3ZlcmZsb3c6IGhpZGRlbiBgKS5jb25jYXQocixgOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIGApLmNvbmNhdChbdCYmInBvc2l0aW9uOiByZWxhdGl2ZSAiLmNvbmNhdChyLCI7Iiksbj09PSJtYXJnaW4iJiZgCiAgICBwYWRkaW5nLWxlZnQ6IGAuY29uY2F0KG8sYHB4OwogICAgcGFkZGluZy10b3A6IGApLmNvbmNhdChpLGBweDsKICAgIHBhZGRpbmctcmlnaHQ6IGApLmNvbmNhdChzLGBweDsKICAgIG1hcmdpbi1sZWZ0OjA7CiAgICBtYXJnaW4tdG9wOjA7CiAgICBtYXJnaW4tcmlnaHQ6IGApLmNvbmNhdChhLCJweCAiKS5jb25jYXQocixgOwogICAgYCksbj09PSJwYWRkaW5nIiYmInBhZGRpbmctcmlnaHQ6ICIuY29uY2F0KGEsInB4ICIpLmNvbmNhdChyLCI7IildLmZpbHRlcihCb29sZWFuKS5qb2luKCIiKSxgCiAgfQogIAogIC5gKS5jb25jYXQoJGgsYCB7CiAgICByaWdodDogYCkuY29uY2F0KGEsInB4ICIpLmNvbmNhdChyLGA7CiAgfQogIAogIC5gKS5jb25jYXQoQWgsYCB7CiAgICBtYXJnaW4tcmlnaHQ6IGApLmNvbmNhdChhLCJweCAiKS5jb25jYXQocixgOwogIH0KICAKICAuYCkuY29uY2F0KCRoLCIgLiIpLmNvbmNhdCgkaCxgIHsKICAgIHJpZ2h0OiAwIGApLmNvbmNhdChyLGA7CiAgfQogIAogIC5gKS5jb25jYXQoQWgsIiAuIikuY29uY2F0KEFoLGAgewogICAgbWFyZ2luLXJpZ2h0OiAwIGApLmNvbmNhdChyLGA7CiAgfQogIAogIGJvZHkgewogICAgYCkuY29uY2F0KE9lZSwiOiAiKS5jb25jYXQoYSxgcHg7CiAgfQpgKX0sV2VlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9SZWxhdGl2ZSxuPWUubm9JbXBvcnRhbnQscj1lLmdhcE1vZGUsbz1yPT09dm9pZCAwPyJtYXJnaW4iOnIsaT1oLnVzZU1lbW8oZnVuY3Rpb24oKXtyZXR1cm4gVWVlKG8pfSxbb10pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoVmVlLHtzdHlsZXM6SGVlKGksIXQsbyxuPyIiOiIhaW1wb3J0YW50Iil9KX0sZGI9ITE7aWYodHlwZW9mIHdpbmRvdzwidSIpdHJ5e3ZhciBacD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZGI9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLFpwLFpwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsWnAsWnApfWNhdGNoe2RiPSExfXZhciB6bD1kYj97cGFzc2l2ZTohMX06ITEsS2VlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWU9PT0iVEVYVEFSRUEifSxKJD1mdW5jdGlvbihlLHQpe3ZhciBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiBuW3RdIT09ImhpZGRlbiImJiEobi5vdmVyZmxvd1k9PT1uLm92ZXJmbG93WCYmIUtlZShlKSYmblt0XT09PSJ2aXNpYmxlIil9LHFlZT1mdW5jdGlvbihlKXtyZXR1cm4gSiQoZSwib3ZlcmZsb3dZIil9LEdlZT1mdW5jdGlvbihlKXtyZXR1cm4gSiQoZSwib3ZlcmZsb3dYIil9LElDPWZ1bmN0aW9uKGUsdCl7dmFyIG49dDtkb3t0eXBlb2YgU2hhZG93Um9vdDwidSImJm4gaW5zdGFuY2VvZiBTaGFkb3dSb290JiYobj1uLmhvc3QpO3ZhciByPVEkKGUsbik7aWYocil7dmFyIG89ZUEoZSxuKSxpPW9bMV0scz1vWzJdO2lmKGk+cylyZXR1cm4hMH1uPW4ucGFyZW50Tm9kZX13aGlsZShuJiZuIT09ZG9jdW1lbnQuYm9keSk7cmV0dXJuITF9LFllZT1mdW5jdGlvbihlKXt2YXIgdD1lLnNjcm9sbFRvcCxuPWUuc2Nyb2xsSGVpZ2h0LHI9ZS5jbGllbnRIZWlnaHQ7cmV0dXJuW3QsbixyXX0sWGVlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2Nyb2xsTGVmdCxuPWUuc2Nyb2xsV2lkdGgscj1lLmNsaWVudFdpZHRoO3JldHVyblt0LG4scl19LFEkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0idiI/cWVlKHQpOkdlZSh0KX0sZUE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJ2Ij9ZZWUodCk6WGVlKHQpfSxaZWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PSJoIiYmdD09PSJydGwiPy0xOjF9LEplZT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPVplZShlLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmRpcmVjdGlvbikscz1pKnIsYT1uLnRhcmdldCxsPXQuY29udGFpbnMoYSksYz0hMSx1PXM+MCxkPTAsZj0wO2Rve3ZhciBwPWVBKGUsYSksbT1wWzBdLGc9cFsxXSx5PXBbMl0sdj1nLXktaSptOyhtfHx2KSYmUSQoZSxhKSYmKGQrPXYsZis9bSksYT1hLnBhcmVudE5vZGV9d2hpbGUoIWwmJmEhPT1kb2N1bWVudC5ib2R5fHxsJiYodC5jb250YWlucyhhKXx8dD09PWEpKTtyZXR1cm4odSYmKG8mJmQ9PT0wfHwhbyYmcz5kKXx8IXUmJihvJiZmPT09MHx8IW8mJi1zPmYpKSYmKGM9ITApLGN9LEpwPWZ1bmN0aW9uKGUpe3JldHVybiJjaGFuZ2VkVG91Y2hlcyJpbiBlP1tlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgsZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZXTpbMCwwXX0sTEM9ZnVuY3Rpb24oZSl7cmV0dXJuW2UuZGVsdGFYLGUuZGVsdGFZXX0sakM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJjdXJyZW50ImluIGU/ZS5jdXJyZW50OmV9LFFlZT1mdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPT09dFswXSYmZVsxXT09PXRbMV19LGV0ZT1mdW5jdGlvbihlKXtyZXR1cm5gCiAgLmJsb2NrLWludGVyYWN0aXZpdHktYC5jb25jYXQoZSxgIHtwb2ludGVyLWV2ZW50czogbm9uZTt9CiAgLmFsbG93LWludGVyYWN0aXZpdHktYCkuY29uY2F0KGUsYCB7cG9pbnRlci1ldmVudHM6IGFsbDt9CmApfSx0dGU9MCxGbD1bXTtmdW5jdGlvbiBudGUoZSl7dmFyIHQ9aC51c2VSZWYoW10pLG49aC51c2VSZWYoWzAsMF0pLHI9aC51c2VSZWYoKSxvPWgudXNlU3RhdGUodHRlKyspWzBdLGk9aC51c2VTdGF0ZShmdW5jdGlvbigpe3JldHVybiBaJCgpfSlbMF0scz1oLnVzZVJlZihlKTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3MuY3VycmVudD1lfSxbZV0pLGgudXNlRWZmZWN0KGZ1bmN0aW9uKCl7aWYoZS5pbmVydCl7ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJibG9jay1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KG8pKTt2YXIgZz1fZWUoW2UubG9ja1JlZi5jdXJyZW50XSwoZS5zaGFyZHN8fFtdKS5tYXAoakMpLCEwKS5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbih5KXtyZXR1cm4geS5jbGFzc0xpc3QuYWRkKCJhbGxvdy1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KG8pKX0pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJibG9jay1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KG8pKSxnLmZvckVhY2goZnVuY3Rpb24oeSl7cmV0dXJuIHkuY2xhc3NMaXN0LnJlbW92ZSgiYWxsb3ctaW50ZXJhY3Rpdml0eS0iLmNvbmNhdChvKSl9KX19fSxbZS5pbmVydCxlLmxvY2tSZWYuY3VycmVudCxlLnNoYXJkc10pO3ZhciBhPWgudXNlQ2FsbGJhY2soZnVuY3Rpb24oZyx5KXtpZigidG91Y2hlcyJpbiBnJiZnLnRvdWNoZXMubGVuZ3RoPT09MilyZXR1cm4hcy5jdXJyZW50LmFsbG93UGluY2hab29tO3ZhciB2PUpwKGcpLHg9bi5jdXJyZW50LHc9ImRlbHRhWCJpbiBnP2cuZGVsdGFYOnhbMF0tdlswXSxrPSJkZWx0YVkiaW4gZz9nLmRlbHRhWTp4WzFdLXZbMV0sRSxTPWcudGFyZ2V0LF89TWF0aC5hYnModyk+TWF0aC5hYnMoayk/ImgiOiJ2IjtpZigidG91Y2hlcyJpbiBnJiZfPT09ImgiJiZTLnR5cGU9PT0icmFuZ2UiKXJldHVybiExO3ZhciBQPUlDKF8sUyk7aWYoIVApcmV0dXJuITA7aWYoUD9FPV86KEU9Xz09PSJ2Ij8iaCI6InYiLFA9SUMoXyxTKSksIVApcmV0dXJuITE7aWYoIXIuY3VycmVudCYmImNoYW5nZWRUb3VjaGVzImluIGcmJih3fHxrKSYmKHIuY3VycmVudD1FKSwhRSlyZXR1cm4hMDt2YXIgTT1yLmN1cnJlbnR8fEU7cmV0dXJuIEplZShNLHksZyxNPT09ImgiP3c6aywhMCl9LFtdKSxsPWgudXNlQ2FsbGJhY2soZnVuY3Rpb24oZyl7dmFyIHk9ZztpZighKCFGbC5sZW5ndGh8fEZsW0ZsLmxlbmd0aC0xXSE9PWkpKXt2YXIgdj0iZGVsdGFZImluIHk/TEMoeSk6SnAoeSkseD10LmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uKEUpe3JldHVybiBFLm5hbWU9PT15LnR5cGUmJkUudGFyZ2V0PT09eS50YXJnZXQmJlFlZShFLmRlbHRhLHYpfSlbMF07aWYoeCYmeC5zaG91bGQpe3kuY2FuY2VsYWJsZSYmeS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZigheCl7dmFyIHc9KHMuY3VycmVudC5zaGFyZHN8fFtdKS5tYXAoakMpLmZpbHRlcihCb29sZWFuKS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29udGFpbnMoeS50YXJnZXQpfSksaz13Lmxlbmd0aD4wP2EoeSx3WzBdKTohcy5jdXJyZW50Lm5vSXNvbGF0aW9uO2smJnkuY2FuY2VsYWJsZSYmeS5wcmV2ZW50RGVmYXVsdCgpfX19LFtdKSxjPWgudXNlQ2FsbGJhY2soZnVuY3Rpb24oZyx5LHYseCl7dmFyIHc9e25hbWU6ZyxkZWx0YTp5LHRhcmdldDp2LHNob3VsZDp4fTt0LmN1cnJlbnQucHVzaCh3KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5jdXJyZW50PXQuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGshPT13fSl9LDEpfSxbXSksdT1oLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKGcpe24uY3VycmVudD1KcChnKSxyLmN1cnJlbnQ9dm9pZCAwfSxbXSksZD1oLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKGcpe2MoZy50eXBlLExDKGcpLGcudGFyZ2V0LGEoZyxlLmxvY2tSZWYuY3VycmVudCkpfSxbXSksZj1oLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKGcpe2MoZy50eXBlLEpwKGcpLGcudGFyZ2V0LGEoZyxlLmxvY2tSZWYuY3VycmVudCkpfSxbXSk7aC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gRmwucHVzaChpKSxlLnNldENhbGxiYWNrcyh7b25TY3JvbGxDYXB0dXJlOmQsb25XaGVlbENhcHR1cmU6ZCxvblRvdWNoTW92ZUNhcHR1cmU6Zn0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixsLHpsKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLGwsemwpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHUsemwpLGZ1bmN0aW9uKCl7Rmw9RmwuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiBnIT09aX0pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixsLHpsKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLGwsemwpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHUsemwpfX0sW10pO3ZhciBwPWUucmVtb3ZlU2Nyb2xsQmFyLG09ZS5pbmVydDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxtP2guY3JlYXRlRWxlbWVudChpLHtzdHlsZXM6ZXRlKG8pfSk6bnVsbCxwP2guY3JlYXRlRWxlbWVudChXZWUse2dhcE1vZGU6Im1hcmdpbiJ9KTpudWxsKX1jb25zdCBydGU9JGVlKFgkLG50ZSk7dmFyIHRBPWguZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoeHYsV28oe30sZSx7cmVmOnQsc2lkZUNhcjpydGV9KSl9KTt0QS5jbGFzc05hbWVzPXh2LmNsYXNzTmFtZXM7Y29uc3QgYnY9dEEsZmI9WyJFbnRlciIsIiAiXSxvdGU9WyJBcnJvd0Rvd24iLCJQYWdlVXAiLCJIb21lIl0sbkE9WyJBcnJvd1VwIiwiUGFnZURvd24iLCJFbmQiXSxpdGU9Wy4uLm90ZSwuLi5uQV0sc3RlPXtsdHI6Wy4uLmZiLCJBcnJvd1JpZ2h0Il0scnRsOlsuLi5mYiwiQXJyb3dMZWZ0Il19LGF0ZT17bHRyOlsiQXJyb3dMZWZ0Il0scnRsOlsiQXJyb3dSaWdodCJdfSx3dj0iTWVudSIsW0xmLGx0ZSxjdGVdPWpnKHd2KSxba2wsckFdPXRvKHd2LFtjdGUsZ3UsSyRdKSxVdz1ndSgpLG9BPUskKCksW3V0ZSxFbF09a2wod3YpLFtkdGUsZnBdPWtsKHd2KSxmdGU9ZT0+e2NvbnN0e19fc2NvcGVNZW51OnQsb3BlbjpuPSExLGNoaWxkcmVuOnIsZGlyOm8sb25PcGVuQ2hhbmdlOmksbW9kYWw6cz0hMH09ZSxhPVV3KHQpLFtsLGNdPWgudXNlU3RhdGUobnVsbCksdT1oLnVzZVJlZighMSksZD1wbihpKSxmPUpmKG8pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHA9KCk9Pnt1LmN1cnJlbnQ9ITAsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG0se2NhcHR1cmU6ITAsb25jZTohMH0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixtLHtjYXB0dXJlOiEwLG9uY2U6ITB9KX0sbT0oKT0+dS5jdXJyZW50PSExO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixwLHtjYXB0dXJlOiEwfSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixwLHtjYXB0dXJlOiEwfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG0se2NhcHR1cmU6ITB9KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsbSx7Y2FwdHVyZTohMH0pfX0sW10pLGguY3JlYXRlRWxlbWVudChqdyxhLGguY3JlYXRlRWxlbWVudCh1dGUse3Njb3BlOnQsb3BlbjpuLG9uT3BlbkNoYW5nZTpkLGNvbnRlbnQ6bCxvbkNvbnRlbnRDaGFuZ2U6Y30saC5jcmVhdGVFbGVtZW50KGR0ZSx7c2NvcGU6dCxvbkNsb3NlOmgudXNlQ2FsbGJhY2soKCk9PmQoITEpLFtkXSksaXNVc2luZ0tleWJvYXJkUmVmOnUsZGlyOmYsbW9kYWw6c30scikpKX0saUE9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZU1lbnU6biwuLi5yfT1lLG89VXcobik7cmV0dXJuIGguY3JlYXRlRWxlbWVudCh6dyxGKHt9LG8scix7cmVmOnR9KSl9KSxzQT0iTWVudVBvcnRhbCIsW3B0ZSxhQV09a2woc0Ese2ZvcmNlTW91bnQ6dm9pZCAwfSksaHRlPWU9Pntjb25zdHtfX3Njb3BlTWVudTp0LGZvcmNlTW91bnQ6bixjaGlsZHJlbjpyLGNvbnRhaW5lcjpvfT1lLGk9RWwoc0EsdCk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChwdGUse3Njb3BlOnQsZm9yY2VNb3VudDpufSxoLmNyZWF0ZUVsZW1lbnQoZXIse3ByZXNlbnQ6bnx8aS5vcGVufSxoLmNyZWF0ZUVsZW1lbnQoeXYse2FzQ2hpbGQ6ITAsY29udGFpbmVyOm99LHIpKSl9LE1vPSJNZW51Q29udGVudCIsW210ZSxWd109a2woTW8pLGd0ZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdCBuPWFBKE1vLGUuX19zY29wZU1lbnUpLHtmb3JjZU1vdW50OnI9bi5mb3JjZU1vdW50LC4uLm99PWUsaT1FbChNbyxlLl9fc2NvcGVNZW51KSxzPWZwKE1vLGUuX19zY29wZU1lbnUpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoTGYuUHJvdmlkZXIse3Njb3BlOmUuX19zY29wZU1lbnV9LGguY3JlYXRlRWxlbWVudChlcix7cHJlc2VudDpyfHxpLm9wZW59LGguY3JlYXRlRWxlbWVudChMZi5TbG90LHtzY29wZTplLl9fc2NvcGVNZW51fSxzLm1vZGFsP2guY3JlYXRlRWxlbWVudCh2dGUsRih7fSxvLHtyZWY6dH0pKTpoLmNyZWF0ZUVsZW1lbnQoeXRlLEYoe30sbyx7cmVmOnR9KSkpKSl9KSx2dGU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3Qgbj1FbChNbyxlLl9fc2NvcGVNZW51KSxyPWgudXNlUmVmKG51bGwpLG89cWUodCxyKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBpPXIuY3VycmVudDtpZihpKXJldHVybiBodihpKX0sW10pLGguY3JlYXRlRWxlbWVudChIdyxGKHt9LGUse3JlZjpvLHRyYXBGb2N1czpuLm9wZW4sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOm4ub3BlbixkaXNhYmxlT3V0c2lkZVNjcm9sbDohMCxvbkZvY3VzT3V0c2lkZTphZShlLm9uRm9jdXNPdXRzaWRlLGk9PmkucHJldmVudERlZmF1bHQoKSx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOiExfSksb25EaXNtaXNzOigpPT5uLm9uT3BlbkNoYW5nZSghMSl9KSl9KSx5dGU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3Qgbj1FbChNbyxlLl9fc2NvcGVNZW51KTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEh3LEYoe30sZSx7cmVmOnQsdHJhcEZvY3VzOiExLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czohMSxkaXNhYmxlT3V0c2lkZVNjcm9sbDohMSxvbkRpc21pc3M6KCk9Pm4ub25PcGVuQ2hhbmdlKCExKX0pKX0pLEh3PWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVNZW51Om4sbG9vcDpyPSExLHRyYXBGb2N1czpvLG9uT3BlbkF1dG9Gb2N1czppLG9uQ2xvc2VBdXRvRm9jdXM6cyxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6YSxvbkVudHJ5Rm9jdXM6bCxvbkVzY2FwZUtleURvd246YyxvblBvaW50ZXJEb3duT3V0c2lkZTp1LG9uRm9jdXNPdXRzaWRlOmQsb25JbnRlcmFjdE91dHNpZGU6ZixvbkRpc21pc3M6cCxkaXNhYmxlT3V0c2lkZVNjcm9sbDptLC4uLmd9PWUseT1FbChNbyxuKSx2PWZwKE1vLG4pLHg9VXcobiksdz1vQShuKSxrPWx0ZShuKSxbRSxTXT1oLnVzZVN0YXRlKG51bGwpLF89aC51c2VSZWYobnVsbCksUD1xZSh0LF8seS5vbkNvbnRlbnRDaGFuZ2UpLE09aC51c2VSZWYoMCksQT1oLnVzZVJlZigiIiksST1oLnVzZVJlZigwKSxMPWgudXNlUmVmKG51bGwpLHJlPWgudXNlUmVmKCJyaWdodCIpLFY9aC51c2VSZWYoMCksSz1tP2J2OmguRnJhZ21lbnQsQz1tP3thczpBaSxhbGxvd1BpbmNoWm9vbTohMH06dm9pZCAwLFQ9Uj0+e3ZhciBOLGo7Y29uc3QgRz1BLmN1cnJlbnQrUix4ZT1rKCkuZmlsdGVyKG50PT4hbnQuZGlzYWJsZWQpLHVlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsamU9KE49eGUuZmluZChudD0+bnQucmVmLmN1cnJlbnQ9PT11ZSkpPT09bnVsbHx8Tj09PXZvaWQgMD92b2lkIDA6Ti50ZXh0VmFsdWUsQ2U9eGUubWFwKG50PT5udC50ZXh0VmFsdWUpLFE9QXRlKENlLEcsamUpLHR0PShqPXhlLmZpbmQobnQ9Pm50LnRleHRWYWx1ZT09PVEpKT09PW51bGx8fGo9PT12b2lkIDA/dm9pZCAwOmoucmVmLmN1cnJlbnQ7KGZ1bmN0aW9uIG50KHJ0KXtBLmN1cnJlbnQ9cnQsd2luZG93LmNsZWFyVGltZW91dChNLmN1cnJlbnQpLHJ0IT09IiImJihNLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCk9Pm50KCIiKSwxZTMpKX0pKEcpLHR0JiZzZXRUaW1lb3V0KCgpPT50dC5mb2N1cygpKX07aC51c2VFZmZlY3QoKCk9PigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KE0uY3VycmVudCksW10pLGd2KCk7Y29uc3QgTz1oLnVzZUNhbGxiYWNrKFI9Pnt2YXIgTixqO3JldHVybiByZS5jdXJyZW50PT09KChOPUwuY3VycmVudCk9PT1udWxsfHxOPT09dm9pZCAwP3ZvaWQgMDpOLnNpZGUpJiZJdGUoUiwoaj1MLmN1cnJlbnQpPT09bnVsbHx8aj09PXZvaWQgMD92b2lkIDA6ai5hcmVhKX0sW10pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQobXRlLHtzY29wZTpuLHNlYXJjaFJlZjpBLG9uSXRlbUVudGVyOmgudXNlQ2FsbGJhY2soUj0+e08oUikmJlIucHJldmVudERlZmF1bHQoKX0sW09dKSxvbkl0ZW1MZWF2ZTpoLnVzZUNhbGxiYWNrKFI9Pnt2YXIgTjtPKFIpfHwoKE49Xy5jdXJyZW50KT09PW51bGx8fE49PT12b2lkIDB8fE4uZm9jdXMoKSxTKG51bGwpKX0sW09dKSxvblRyaWdnZXJMZWF2ZTpoLnVzZUNhbGxiYWNrKFI9PntPKFIpJiZSLnByZXZlbnREZWZhdWx0KCl9LFtPXSkscG9pbnRlckdyYWNlVGltZXJSZWY6SSxvblBvaW50ZXJHcmFjZUludGVudENoYW5nZTpoLnVzZUNhbGxiYWNrKFI9PntMLmN1cnJlbnQ9Un0sW10pfSxoLmNyZWF0ZUVsZW1lbnQoSyxDLGguY3JlYXRlRWxlbWVudCh2dix7YXNDaGlsZDohMCx0cmFwcGVkOm8sb25Nb3VudEF1dG9Gb2N1czphZShpLFI9Pnt2YXIgTjtSLnByZXZlbnREZWZhdWx0KCksKE49Xy5jdXJyZW50KT09PW51bGx8fE49PT12b2lkIDB8fE4uZm9jdXMoKX0pLG9uVW5tb3VudEF1dG9Gb2N1czpzfSxoLmNyZWF0ZUVsZW1lbnQobXYse2FzQ2hpbGQ6ITAsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOmEsb25Fc2NhcGVLZXlEb3duOmMsb25Qb2ludGVyRG93bk91dHNpZGU6dSxvbkZvY3VzT3V0c2lkZTpkLG9uSW50ZXJhY3RPdXRzaWRlOmYsb25EaXNtaXNzOnB9LGguY3JlYXRlRWxlbWVudChrZWUsRih7YXNDaGlsZDohMH0sdyx7ZGlyOnYuZGlyLG9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIsbG9vcDpyLGN1cnJlbnRUYWJTdG9wSWQ6RSxvbkN1cnJlbnRUYWJTdG9wSWRDaGFuZ2U6UyxvbkVudHJ5Rm9jdXM6YWUobCxSPT57di5pc1VzaW5nS2V5Ym9hcmRSZWYuY3VycmVudHx8Ui5wcmV2ZW50RGVmYXVsdCgpfSl9KSxoLmNyZWF0ZUVsZW1lbnQoRncsRih7cm9sZToibWVudSIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImRhdGEtc3RhdGUiOmZBKHkub3BlbiksImRhdGEtcmFkaXgtbWVudS1jb250ZW50IjoiIixkaXI6di5kaXJ9LHgsZyx7cmVmOlAsc3R5bGU6e291dGxpbmU6Im5vbmUiLC4uLmcuc3R5bGV9LG9uS2V5RG93bjphZShnLm9uS2V5RG93bixSPT57Y29uc3Qgaj1SLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1yYWRpeC1tZW51LWNvbnRlbnRdIik9PT1SLmN1cnJlbnRUYXJnZXQsRz1SLmN0cmxLZXl8fFIuYWx0S2V5fHxSLm1ldGFLZXkseGU9Ui5rZXkubGVuZ3RoPT09MTtqJiYoUi5rZXk9PT0iVGFiIiYmUi5wcmV2ZW50RGVmYXVsdCgpLCFHJiZ4ZSYmVChSLmtleSkpO2NvbnN0IHVlPV8uY3VycmVudDtpZihSLnRhcmdldCE9PXVlfHwhaXRlLmluY2x1ZGVzKFIua2V5KSlyZXR1cm47Ui5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IENlPWsoKS5maWx0ZXIoUT0+IVEuZGlzYWJsZWQpLm1hcChRPT5RLnJlZi5jdXJyZW50KTtuQS5pbmNsdWRlcyhSLmtleSkmJkNlLnJldmVyc2UoKSxOdGUoQ2UpfSksb25CbHVyOmFlKGUub25CbHVyLFI9PntSLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoUi50YXJnZXQpfHwod2luZG93LmNsZWFyVGltZW91dChNLmN1cnJlbnQpLEEuY3VycmVudD0iIil9KSxvblBvaW50ZXJNb3ZlOmFlKGUub25Qb2ludGVyTW92ZSxqZihSPT57Y29uc3QgTj1SLnRhcmdldCxqPVYuY3VycmVudCE9PVIuY2xpZW50WDtpZihSLmN1cnJlbnRUYXJnZXQuY29udGFpbnMoTikmJmope2NvbnN0IEc9Ui5jbGllbnRYPlYuY3VycmVudD8icmlnaHQiOiJsZWZ0IjtyZS5jdXJyZW50PUcsVi5jdXJyZW50PVIuY2xpZW50WH19KSl9KSkpKSkpKX0pLHh0ZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlTWVudTpuLC4uLnJ9PWU7cmV0dXJuIGguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7fSxyLHtyZWY6dH0pKX0pLHBiPSJNZW51SXRlbSIsekM9Im1lbnUuaXRlbVNlbGVjdCIsV3c9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7ZGlzYWJsZWQ6bj0hMSxvblNlbGVjdDpyLC4uLm99PWUsaT1oLnVzZVJlZihudWxsKSxzPWZwKHBiLGUuX19zY29wZU1lbnUpLGE9VncocGIsZS5fX3Njb3BlTWVudSksbD1xZSh0LGkpLGM9aC51c2VSZWYoITEpLHU9KCk9Pntjb25zdCBkPWkuY3VycmVudDtpZighbiYmZCl7Y29uc3QgZj1uZXcgQ3VzdG9tRXZlbnQoekMse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pO2QuYWRkRXZlbnRMaXN0ZW5lcih6QyxwPT5yPT1udWxsP3ZvaWQgMDpyKHApLHtvbmNlOiEwfSksWDIoZCxmKSxmLmRlZmF1bHRQcmV2ZW50ZWQ/Yy5jdXJyZW50PSExOnMub25DbG9zZSgpfX07cmV0dXJuIGguY3JlYXRlRWxlbWVudChsQSxGKHt9LG8se3JlZjpsLGRpc2FibGVkOm4sb25DbGljazphZShlLm9uQ2xpY2ssdSksb25Qb2ludGVyRG93bjpkPT57dmFyIGY7KGY9ZS5vblBvaW50ZXJEb3duKT09PW51bGx8fGY9PT12b2lkIDB8fGYuY2FsbChlLGQpLGMuY3VycmVudD0hMH0sb25Qb2ludGVyVXA6YWUoZS5vblBvaW50ZXJVcCxkPT57dmFyIGY7Yy5jdXJyZW50fHwoZj1kLmN1cnJlbnRUYXJnZXQpPT09bnVsbHx8Zj09PXZvaWQgMHx8Zi5jbGljaygpfSksb25LZXlEb3duOmFlKGUub25LZXlEb3duLGQ9Pntjb25zdCBmPWEuc2VhcmNoUmVmLmN1cnJlbnQhPT0iIjtufHxmJiZkLmtleT09PSIgInx8ZmIuaW5jbHVkZXMoZC5rZXkpJiYoZC5jdXJyZW50VGFyZ2V0LmNsaWNrKCksZC5wcmV2ZW50RGVmYXVsdCgpKX0pfSkpfSksbEE9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZU1lbnU6bixkaXNhYmxlZDpyPSExLHRleHRWYWx1ZTpvLC4uLml9PWUscz1WdyhwYixuKSxhPW9BKG4pLGw9aC51c2VSZWYobnVsbCksYz1xZSh0LGwpLFt1LGRdPWgudXNlU3RhdGUoITEpLFtmLHBdPWgudXNlU3RhdGUoIiIpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IG09bC5jdXJyZW50O2lmKG0pe3ZhciBnO3AoKChnPW0udGV4dENvbnRlbnQpIT09bnVsbCYmZyE9PXZvaWQgMD9nOiIiKS50cmltKCkpfX0sW2kuY2hpbGRyZW5dKSxoLmNyZWF0ZUVsZW1lbnQoTGYuSXRlbVNsb3Qse3Njb3BlOm4sZGlzYWJsZWQ6cix0ZXh0VmFsdWU6bz8/Zn0saC5jcmVhdGVFbGVtZW50KEVlZSxGKHthc0NoaWxkOiEwfSxhLHtmb2N1c2FibGU6IXJ9KSxoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoe3JvbGU6Im1lbnVpdGVtIiwiZGF0YS1oaWdobGlnaHRlZCI6dT8iIjp2b2lkIDAsImFyaWEtZGlzYWJsZWQiOnJ8fHZvaWQgMCwiZGF0YS1kaXNhYmxlZCI6cj8iIjp2b2lkIDB9LGkse3JlZjpjLG9uUG9pbnRlck1vdmU6YWUoZS5vblBvaW50ZXJNb3ZlLGpmKG09PntyP3Mub25JdGVtTGVhdmUobSk6KHMub25JdGVtRW50ZXIobSksbS5kZWZhdWx0UHJldmVudGVkfHxtLmN1cnJlbnRUYXJnZXQuZm9jdXMoKSl9KSksb25Qb2ludGVyTGVhdmU6YWUoZS5vblBvaW50ZXJMZWF2ZSxqZihtPT5zLm9uSXRlbUxlYXZlKG0pKSksb25Gb2N1czphZShlLm9uRm9jdXMsKCk9PmQoITApKSxvbkJsdXI6YWUoZS5vbkJsdXIsKCk9PmQoITEpKX0pKSkpfSksYnRlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e2NoZWNrZWQ6bj0hMSxvbkNoZWNrZWRDaGFuZ2U6ciwuLi5vfT1lO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQodUEse3Njb3BlOmUuX19zY29wZU1lbnUsY2hlY2tlZDpufSxoLmNyZWF0ZUVsZW1lbnQoV3csRih7cm9sZToibWVudWl0ZW1jaGVja2JveCIsImFyaWEtY2hlY2tlZCI6UW0obik/Im1peGVkIjpufSxvLHtyZWY6dCwiZGF0YS1zdGF0ZSI6S3cobiksb25TZWxlY3Q6YWUoby5vblNlbGVjdCwoKT0+cj09bnVsbD92b2lkIDA6cihRbShuKT8hMDohbikse2NoZWNrRm9yRGVmYXVsdFByZXZlbnRlZDohMX0pfSkpKX0pLHd0ZT0iTWVudVJhZGlvR3JvdXAiLFtlY2UsU3RlXT1rbCh3dGUse3ZhbHVlOnZvaWQgMCxvblZhbHVlQ2hhbmdlOigpPT57fX0pLGt0ZT0iTWVudVJhZGlvSXRlbSIsRXRlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e3ZhbHVlOm4sLi4ucn09ZSxvPVN0ZShrdGUsZS5fX3Njb3BlTWVudSksaT1uPT09by52YWx1ZTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KHVBLHtzY29wZTplLl9fc2NvcGVNZW51LGNoZWNrZWQ6aX0saC5jcmVhdGVFbGVtZW50KFd3LEYoe3JvbGU6Im1lbnVpdGVtcmFkaW8iLCJhcmlhLWNoZWNrZWQiOml9LHIse3JlZjp0LCJkYXRhLXN0YXRlIjpLdyhpKSxvblNlbGVjdDphZShyLm9uU2VsZWN0LCgpPT57dmFyIHM7cmV0dXJuKHM9by5vblZhbHVlQ2hhbmdlKT09PW51bGx8fHM9PT12b2lkIDA/dm9pZCAwOnMuY2FsbChvLG4pfSx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOiExfSl9KSkpfSksY0E9Ik1lbnVJdGVtSW5kaWNhdG9yIixbdUEsX3RlXT1rbChjQSx7Y2hlY2tlZDohMX0pLEN0ZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlTWVudTpuLGZvcmNlTW91bnQ6ciwuLi5vfT1lLGk9X3RlKGNBLG4pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoZXIse3ByZXNlbnQ6cnx8UW0oaS5jaGVja2VkKXx8aS5jaGVja2VkPT09ITB9LGguY3JlYXRlRWxlbWVudChSZS5zcGFuLEYoe30sbyx7cmVmOnQsImRhdGEtc3RhdGUiOkt3KGkuY2hlY2tlZCl9KSkpfSksT3RlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVNZW51Om4sLi4ucn09ZTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFJlLmRpdixGKHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoiaG9yaXpvbnRhbCJ9LHIse3JlZjp0fSkpfSksVHRlPSJNZW51U3ViIixbdGNlLGRBXT1rbChUdGUpLFFwPSJNZW51U3ViVHJpZ2dlciIsUHRlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49RWwoUXAsZS5fX3Njb3BlTWVudSkscj1mcChRcCxlLl9fc2NvcGVNZW51KSxvPWRBKFFwLGUuX19zY29wZU1lbnUpLGk9VncoUXAsZS5fX3Njb3BlTWVudSkscz1oLnVzZVJlZihudWxsKSx7cG9pbnRlckdyYWNlVGltZXJSZWY6YSxvblBvaW50ZXJHcmFjZUludGVudENoYW5nZTpsfT1pLGM9e19fc2NvcGVNZW51OmUuX19zY29wZU1lbnV9LHU9aC51c2VDYWxsYmFjaygoKT0+e3MuY3VycmVudCYmd2luZG93LmNsZWFyVGltZW91dChzLmN1cnJlbnQpLHMuY3VycmVudD1udWxsfSxbXSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT51LFt1XSksaC51c2VFZmZlY3QoKCk9Pntjb25zdCBkPWEuY3VycmVudDtyZXR1cm4oKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoZCksbChudWxsKX19LFthLGxdKSxoLmNyZWF0ZUVsZW1lbnQoaUEsRih7YXNDaGlsZDohMH0sYyksaC5jcmVhdGVFbGVtZW50KGxBLEYoe2lkOm8udHJpZ2dlcklkLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOm4ub3BlbiwiYXJpYS1jb250cm9scyI6by5jb250ZW50SWQsImRhdGEtc3RhdGUiOmZBKG4ub3Blbil9LGUse3JlZjpPZyh0LG8ub25UcmlnZ2VyQ2hhbmdlKSxvbkNsaWNrOmQ9Pnt2YXIgZjsoZj1lLm9uQ2xpY2spPT09bnVsbHx8Zj09PXZvaWQgMHx8Zi5jYWxsKGUsZCksIShlLmRpc2FibGVkfHxkLmRlZmF1bHRQcmV2ZW50ZWQpJiYoZC5jdXJyZW50VGFyZ2V0LmZvY3VzKCksbi5vcGVufHxuLm9uT3BlbkNoYW5nZSghMCkpfSxvblBvaW50ZXJNb3ZlOmFlKGUub25Qb2ludGVyTW92ZSxqZihkPT57aS5vbkl0ZW1FbnRlcihkKSwhZC5kZWZhdWx0UHJldmVudGVkJiYhZS5kaXNhYmxlZCYmIW4ub3BlbiYmIXMuY3VycmVudCYmKGkub25Qb2ludGVyR3JhY2VJbnRlbnRDaGFuZ2UobnVsbCkscy5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57bi5vbk9wZW5DaGFuZ2UoITApLHUoKX0sMTAwKSl9KSksb25Qb2ludGVyTGVhdmU6YWUoZS5vblBvaW50ZXJMZWF2ZSxqZihkPT57dmFyIGY7dSgpO2NvbnN0IHA9KGY9bi5jb250ZW50KT09PW51bGx8fGY9PT12b2lkIDA/dm9pZCAwOmYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYocCl7dmFyIG07Y29uc3QgZz0obT1uLmNvbnRlbnQpPT09bnVsbHx8bT09PXZvaWQgMD92b2lkIDA6bS5kYXRhc2V0LnNpZGUseT1nPT09InJpZ2h0Iix2PXk/LTU6NSx4PXBbeT8ibGVmdCI6InJpZ2h0Il0sdz1wW3k/InJpZ2h0IjoibGVmdCJdO2kub25Qb2ludGVyR3JhY2VJbnRlbnRDaGFuZ2Uoe2FyZWE6W3t4OmQuY2xpZW50WCt2LHk6ZC5jbGllbnRZfSx7eCx5OnAudG9wfSx7eDp3LHk6cC50b3B9LHt4OncseTpwLmJvdHRvbX0se3gseTpwLmJvdHRvbX1dLHNpZGU6Z30pLHdpbmRvdy5jbGVhclRpbWVvdXQoYS5jdXJyZW50KSxhLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCk9Pmkub25Qb2ludGVyR3JhY2VJbnRlbnRDaGFuZ2UobnVsbCksMzAwKX1lbHNle2lmKGkub25UcmlnZ2VyTGVhdmUoZCksZC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpLm9uUG9pbnRlckdyYWNlSW50ZW50Q2hhbmdlKG51bGwpfX0pKSxvbktleURvd246YWUoZS5vbktleURvd24sZD0+e2NvbnN0IGY9aS5zZWFyY2hSZWYuY3VycmVudCE9PSIiO2lmKCEoZS5kaXNhYmxlZHx8ZiYmZC5rZXk9PT0iICIpJiZzdGVbci5kaXJdLmluY2x1ZGVzKGQua2V5KSl7dmFyIHA7bi5vbk9wZW5DaGFuZ2UoITApLChwPW4uY29udGVudCk9PT1udWxsfHxwPT09dm9pZCAwfHxwLmZvY3VzKCksZC5wcmV2ZW50RGVmYXVsdCgpfX0pfSkpKX0pLE10ZT0iTWVudVN1YkNvbnRlbnQiLFJ0ZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdCBuPWFBKE1vLGUuX19zY29wZU1lbnUpLHtmb3JjZU1vdW50OnI9bi5mb3JjZU1vdW50LC4uLm99PWUsaT1FbChNbyxlLl9fc2NvcGVNZW51KSxzPWZwKE1vLGUuX19zY29wZU1lbnUpLGE9ZEEoTXRlLGUuX19zY29wZU1lbnUpLGw9aC51c2VSZWYobnVsbCksYz1xZSh0LGwpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoTGYuUHJvdmlkZXIse3Njb3BlOmUuX19zY29wZU1lbnV9LGguY3JlYXRlRWxlbWVudChlcix7cHJlc2VudDpyfHxpLm9wZW59LGguY3JlYXRlRWxlbWVudChMZi5TbG90LHtzY29wZTplLl9fc2NvcGVNZW51fSxoLmNyZWF0ZUVsZW1lbnQoSHcsRih7aWQ6YS5jb250ZW50SWQsImFyaWEtbGFiZWxsZWRieSI6YS50cmlnZ2VySWR9LG8se3JlZjpjLGFsaWduOiJzdGFydCIsc2lkZTpzLmRpcj09PSJydGwiPyJsZWZ0IjoicmlnaHQiLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czohMSxkaXNhYmxlT3V0c2lkZVNjcm9sbDohMSx0cmFwRm9jdXM6ITEsb25PcGVuQXV0b0ZvY3VzOnU9Pnt2YXIgZDtzLmlzVXNpbmdLZXlib2FyZFJlZi5jdXJyZW50JiYoKGQ9bC5jdXJyZW50KT09PW51bGx8fGQ9PT12b2lkIDB8fGQuZm9jdXMoKSksdS5wcmV2ZW50RGVmYXVsdCgpfSxvbkNsb3NlQXV0b0ZvY3VzOnU9PnUucHJldmVudERlZmF1bHQoKSxvbkZvY3VzT3V0c2lkZTphZShlLm9uRm9jdXNPdXRzaWRlLHU9Pnt1LnRhcmdldCE9PWEudHJpZ2dlciYmaS5vbk9wZW5DaGFuZ2UoITEpfSksb25Fc2NhcGVLZXlEb3duOmFlKGUub25Fc2NhcGVLZXlEb3duLHU9PntzLm9uQ2xvc2UoKSx1LnByZXZlbnREZWZhdWx0KCl9KSxvbktleURvd246YWUoZS5vbktleURvd24sdT0+e2NvbnN0IGQ9dS5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHUudGFyZ2V0KSxmPWF0ZVtzLmRpcl0uaW5jbHVkZXModS5rZXkpO2lmKGQmJmYpe3ZhciBwO2kub25PcGVuQ2hhbmdlKCExKSwocD1hLnRyaWdnZXIpPT09bnVsbHx8cD09PXZvaWQgMHx8cC5mb2N1cygpLHUucHJldmVudERlZmF1bHQoKX19KX0pKSkpKX0pO2Z1bmN0aW9uIGZBKGUpe3JldHVybiBlPyJvcGVuIjoiY2xvc2VkIn1mdW5jdGlvbiBRbShlKXtyZXR1cm4gZT09PSJpbmRldGVybWluYXRlIn1mdW5jdGlvbiBLdyhlKXtyZXR1cm4gUW0oZSk/ImluZGV0ZXJtaW5hdGUiOmU/ImNoZWNrZWQiOiJ1bmNoZWNrZWQifWZ1bmN0aW9uIE50ZShlKXtjb25zdCB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IG4gb2YgZSlpZihuPT09dHx8KG4uZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dCkpcmV0dXJufWZ1bmN0aW9uICR0ZShlLHQpe3JldHVybiBlLm1hcCgobixyKT0+ZVsodCtyKSVlLmxlbmd0aF0pfWZ1bmN0aW9uIEF0ZShlLHQsbil7Y29uc3Qgbz10Lmxlbmd0aD4xJiZBcnJheS5mcm9tKHQpLmV2ZXJ5KGM9PmM9PT10WzBdKT90WzBdOnQsaT1uP2UuaW5kZXhPZihuKTotMTtsZXQgcz0kdGUoZSxNYXRoLm1heChpLDApKTtvLmxlbmd0aD09PTEmJihzPXMuZmlsdGVyKGM9PmMhPT1uKSk7Y29uc3QgbD1zLmZpbmQoYz0+Yy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoby50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIGwhPT1uP2w6dm9pZCAwfWZ1bmN0aW9uIER0ZShlLHQpe2NvbnN0e3g6bix5OnJ9PWU7bGV0IG89ITE7Zm9yKGxldCBpPTAscz10Lmxlbmd0aC0xO2k8dC5sZW5ndGg7cz1pKyspe2NvbnN0IGE9dFtpXS54LGw9dFtpXS55LGM9dFtzXS54LHU9dFtzXS55O2w+ciE9dT5yJiZuPChjLWEpKihyLWwpLyh1LWwpK2EmJihvPSFvKX1yZXR1cm4gb31mdW5jdGlvbiBJdGUoZSx0KXtpZighdClyZXR1cm4hMTtjb25zdCBuPXt4OmUuY2xpZW50WCx5OmUuY2xpZW50WX07cmV0dXJuIER0ZShuLHQpfWZ1bmN0aW9uIGpmKGUpe3JldHVybiB0PT50LnBvaW50ZXJUeXBlPT09Im1vdXNlIj9lKHQpOnZvaWQgMH1jb25zdCBMdGU9ZnRlLGp0ZT1pQSx6dGU9aHRlLEZ0ZT1ndGUsQnRlPXh0ZSxVdGU9V3csVnRlPWJ0ZSxIdGU9RXRlLFd0ZT1DdGUsS3RlPU90ZSxxdGU9UHRlLEd0ZT1SdGUscEE9IkRyb3Bkb3duTWVudSIsW1l0ZSxuY2VdPXRvKHBBLFtyQV0pLHNvPXJBKCksW1h0ZSxoQV09WXRlKHBBKSxadGU9ZT0+e2NvbnN0e19fc2NvcGVEcm9wZG93bk1lbnU6dCxjaGlsZHJlbjpuLGRpcjpyLG9wZW46byxkZWZhdWx0T3BlbjppLG9uT3BlbkNoYW5nZTpzLG1vZGFsOmE9ITB9PWUsbD1zbyh0KSxjPWgudXNlUmVmKG51bGwpLFt1PSExLGRdPVFvKHtwcm9wOm8sZGVmYXVsdFByb3A6aSxvbkNoYW5nZTpzfSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChYdGUse3Njb3BlOnQsdHJpZ2dlcklkOkdyKCksdHJpZ2dlclJlZjpjLGNvbnRlbnRJZDpHcigpLG9wZW46dSxvbk9wZW5DaGFuZ2U6ZCxvbk9wZW5Ub2dnbGU6aC51c2VDYWxsYmFjaygoKT0+ZChmPT4hZiksW2RdKSxtb2RhbDphfSxoLmNyZWF0ZUVsZW1lbnQoTHRlLEYoe30sbCx7b3Blbjp1LG9uT3BlbkNoYW5nZTpkLGRpcjpyLG1vZGFsOmF9KSxuKSl9LEp0ZT0iRHJvcGRvd25NZW51VHJpZ2dlciIsUXRlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVEcm9wZG93bk1lbnU6bixkaXNhYmxlZDpyPSExLC4uLm99PWUsaT1oQShKdGUsbikscz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGp0ZSxGKHthc0NoaWxkOiEwfSxzKSxoLmNyZWF0ZUVsZW1lbnQoUmUuYnV0dG9uLEYoe3R5cGU6ImJ1dHRvbiIsaWQ6aS50cmlnZ2VySWQsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6aS5vcGVuLCJhcmlhLWNvbnRyb2xzIjppLm9wZW4/aS5jb250ZW50SWQ6dm9pZCAwLCJkYXRhLXN0YXRlIjppLm9wZW4/Im9wZW4iOiJjbG9zZWQiLCJkYXRhLWRpc2FibGVkIjpyPyIiOnZvaWQgMCxkaXNhYmxlZDpyfSxvLHtyZWY6T2codCxpLnRyaWdnZXJSZWYpLG9uUG9pbnRlckRvd246YWUoZS5vblBvaW50ZXJEb3duLGE9PnshciYmYS5idXR0b249PT0wJiZhLmN0cmxLZXk9PT0hMSYmKGkub25PcGVuVG9nZ2xlKCksaS5vcGVufHxhLnByZXZlbnREZWZhdWx0KCkpfSksb25LZXlEb3duOmFlKGUub25LZXlEb3duLGE9PntyfHwoWyJFbnRlciIsIiAiXS5pbmNsdWRlcyhhLmtleSkmJmkub25PcGVuVG9nZ2xlKCksYS5rZXk9PT0iQXJyb3dEb3duIiYmaS5vbk9wZW5DaGFuZ2UoITApLFsiRW50ZXIiLCIgIiwiQXJyb3dEb3duIl0uaW5jbHVkZXMoYS5rZXkpJiZhLnByZXZlbnREZWZhdWx0KCkpfSl9KSkpfSksZW5lPWU9Pntjb25zdHtfX3Njb3BlRHJvcGRvd25NZW51OnQsLi4ubn09ZSxyPXNvKHQpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoenRlLEYoe30scixuKSl9LHRuZT0iRHJvcGRvd25NZW51Q29udGVudCIsbm5lPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVEcm9wZG93bk1lbnU6biwuLi5yfT1lLG89aEEodG5lLG4pLGk9c28obikscz1oLnVzZVJlZighMSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChGdGUsRih7aWQ6by5jb250ZW50SWQsImFyaWEtbGFiZWxsZWRieSI6by50cmlnZ2VySWR9LGkscix7cmVmOnQsb25DbG9zZUF1dG9Gb2N1czphZShlLm9uQ2xvc2VBdXRvRm9jdXMsYT0+e3ZhciBsO3MuY3VycmVudHx8KGw9by50cmlnZ2VyUmVmLmN1cnJlbnQpPT09bnVsbHx8bD09PXZvaWQgMHx8bC5mb2N1cygpLHMuY3VycmVudD0hMSxhLnByZXZlbnREZWZhdWx0KCl9KSxvbkludGVyYWN0T3V0c2lkZTphZShlLm9uSW50ZXJhY3RPdXRzaWRlLGE9Pntjb25zdCBsPWEuZGV0YWlsLm9yaWdpbmFsRXZlbnQsYz1sLmJ1dHRvbj09PTAmJmwuY3RybEtleT09PSEwLHU9bC5idXR0b249PT0yfHxjOyghby5tb2RhbHx8dSkmJihzLmN1cnJlbnQ9ITApfSksc3R5bGU6ey4uLmUuc3R5bGUsIi0tcmFkaXgtZHJvcGRvd24tbWVudS1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4iOiJ2YXIoLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbikiLCItLXJhZGl4LWRyb3Bkb3duLW1lbnUtY29udGVudC1hdmFpbGFibGUtd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKSIsIi0tcmFkaXgtZHJvcGRvd24tbWVudS1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCkiLCItLXJhZGl4LWRyb3Bkb3duLW1lbnUtdHJpZ2dlci13aWR0aCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3Itd2lkdGgpIiwiLS1yYWRpeC1kcm9wZG93bi1tZW51LXRyaWdnZXItaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci1oZWlnaHQpIn19KSl9KSxybmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEJ0ZSxGKHt9LG8scix7cmVmOnR9KSl9KSxvbmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFV0ZSxGKHt9LG8scix7cmVmOnR9KSl9KSxpbmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFZ0ZSxGKHt9LG8scix7cmVmOnR9KSl9KSxzbmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEh0ZSxGKHt9LG8scix7cmVmOnR9KSl9KSxhbmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFd0ZSxGKHt9LG8scix7cmVmOnR9KSl9KSxsbmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEt0ZSxGKHt9LG8scix7cmVmOnR9KSl9KSxjbmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KHF0ZSxGKHt9LG8scix7cmVmOnR9KSl9KSx1bmU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURyb3Bkb3duTWVudTpuLC4uLnJ9PWUsbz1zbyhuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEd0ZSxGKHt9LG8scix7cmVmOnQsc3R5bGU6ey4uLmUuc3R5bGUsIi0tcmFkaXgtZHJvcGRvd24tbWVudS1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4iOiJ2YXIoLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbikiLCItLXJhZGl4LWRyb3Bkb3duLW1lbnUtY29udGVudC1hdmFpbGFibGUtd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKSIsIi0tcmFkaXgtZHJvcGRvd24tbWVudS1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCkiLCItLXJhZGl4LWRyb3Bkb3duLW1lbnUtdHJpZ2dlci13aWR0aCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3Itd2lkdGgpIiwiLS1yYWRpeC1kcm9wZG93bi1tZW51LXRyaWdnZXItaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci1oZWlnaHQpIn19KSl9KSxkbmU9WnRlLGZuZT1RdGUscG5lPWVuZSxtQT1ubmUsZ0E9cm5lLHZBPW9uZSx5QT1pbmUseEE9c25lLGJBPWFuZSx3QT1sbmUsU0E9Y25lLGtBPXVuZSxobmU9ZG5lLG1uZT1mbmUsZ25lPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGluc2V0OnQsY2hpbGRyZW46biwuLi5yfSxvKT0+Yi5qc3hzKFNBLHtyZWY6byxjbGFzc05hbWU6VWUoImZsZXggY3Vyc29yLWRlZmF1bHQgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgZm9jdXM6YmctYWNjZW50IGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCIsdCYmInBsLTgiLGUpLC4uLnIsY2hpbGRyZW46W24sYi5qc3goSzQse2NsYXNzTmFtZToidy00IGgtNCBtbC1hdXRvIn0pXX0pKTtnbmUuZGlzcGxheU5hbWU9U0EuZGlzcGxheU5hbWU7Y29uc3Qgdm5lPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeChrQSx7cmVmOm4sY2xhc3NOYW1lOlVlKCJ6LTUwIG1pbi13LVs4cmVtXSBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYmctcG9wb3ZlciBwLTEgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LWxnIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiIsZSksLi4udH0pKTt2bmUuZGlzcGxheU5hbWU9a0EuZGlzcGxheU5hbWU7Y29uc3QgRUE9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsc2lkZU9mZnNldDp0PTQsY29udGFpbmVyOm4sLi4ucn0sbyk9PmIuanN4KHBuZSx7Y29udGFpbmVyOm4sY2hpbGRyZW46Yi5qc3gobUEse3JlZjpvLHNpZGVPZmZzZXQ6dCxjbGFzc05hbWU6VWUoInotNTAgbWluLXctWzhyZW1dIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlciBiZy1wb3BvdmVyIHAtMSB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIixlKSwuLi5yfSl9KSk7RUEuZGlzcGxheU5hbWU9bUEuZGlzcGxheU5hbWU7Y29uc3QgbXM9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsaW5zZXQ6dCwuLi5ufSxyKT0+Yi5qc3godkEse3JlZjpyLGNsYXNzTmFtZTpVZSgicmVsYXRpdmUgZmxleCBjdXJzb3ItZGVmYXVsdCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweC0yIHB5LTEuNSB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCIsdCYmInBsLTgiLGUpLC4uLm59KSk7bXMuZGlzcGxheU5hbWU9dkEuZGlzcGxheU5hbWU7Y29uc3QgeW5lPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsY2hlY2tlZDpuLC4uLnJ9LG8pPT5iLmpzeHMoeUEse3JlZjpvLGNsYXNzTmFtZTpVZSgicmVsYXRpdmUgZmxleCBjdXJzb3ItZGVmYXVsdCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweS0xLjUgcGwtOCBwci0yIHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIixlKSxjaGVja2VkOm4sLi4ucixjaGlsZHJlbjpbYi5qc3goInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGxlZnQtMiBmbGV4IGgtMy41IHctMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46Yi5qc3goYkEse2NoaWxkcmVuOmIuanN4KEUxLHtjbGFzc05hbWU6InctNCBoLTQifSl9KX0pLHRdfSkpO3luZS5kaXNwbGF5TmFtZT15QS5kaXNwbGF5TmFtZTtjb25zdCB4bmU9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCwuLi5ufSxyKT0+Yi5qc3hzKHhBLHtyZWY6cixjbGFzc05hbWU6VWUoInJlbGF0aXZlIGZsZXggY3Vyc29yLWRlZmF1bHQgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHktMS41IHBsLTggcHItMiB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCIsZSksLi4ubixjaGlsZHJlbjpbYi5qc3goInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGxlZnQtMiBmbGV4IGgtMy41IHctMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46Yi5qc3goYkEse2NoaWxkcmVuOmIuanN4KHE0LHtjbGFzc05hbWU6InctMiBoLTIgZmlsbC1jdXJyZW50In0pfSl9KSx0XX0pKTt4bmUuZGlzcGxheU5hbWU9eEEuZGlzcGxheU5hbWU7Y29uc3QgYm5lPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGluc2V0OnQsLi4ubn0scik9PmIuanN4KGdBLHtyZWY6cixjbGFzc05hbWU6VWUoInB4LTIgcHktMS41IHRleHQtc20gZm9udC1zZW1pYm9sZCIsdCYmInBsLTgiLGUpLC4uLm59KSk7Ym5lLmRpc3BsYXlOYW1lPWdBLmRpc3BsYXlOYW1lO2NvbnN0IHduZT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+Yi5qc3god0Ese3JlZjpuLGNsYXNzTmFtZTpVZSgiLW14LTEgbXktMSBoLXB4IGJnLW11dGVkIixlKSwuLi50fSkpO3duZS5kaXNwbGF5TmFtZT13QS5kaXNwbGF5TmFtZTtmdW5jdGlvbiBlZyhlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBlZz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZWcoZSl9ZnVuY3Rpb24gcGwoZSl7aWYoZT09PW51bGx8fGU9PT0hMHx8ZT09PSExKXJldHVybiBOYU47dmFyIHQ9TnVtYmVyKGUpO3JldHVybiBpc05hTih0KT90OnQ8MD9NYXRoLmNlaWwodCk6TWF0aC5mbG9vcih0KX1mdW5jdGlvbiB5bihlLHQpe2lmKHQubGVuZ3RoPGUpdGhyb3cgbmV3IFR5cGVFcnJvcihlKyIgYXJndW1lbnQiKyhlPjE/InMiOiIiKSsiIHJlcXVpcmVkLCBidXQgb25seSAiK3QubGVuZ3RoKyIgcHJlc2VudCIpfWZ1bmN0aW9uIGpyKGUpe3luKDEsYXJndW1lbnRzKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlfHxlZyhlKT09PSJvYmplY3QiJiZ0PT09IltvYmplY3QgRGF0ZV0iP25ldyBEYXRlKGUuZ2V0VGltZSgpKTp0eXBlb2YgZT09Im51bWJlciJ8fHQ9PT0iW29iamVjdCBOdW1iZXJdIj9uZXcgRGF0ZShlKTooKHR5cGVvZiBlPT0ic3RyaW5nInx8dD09PSJbb2JqZWN0IFN0cmluZ10iKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYoY29uc29sZS53YXJuKCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBkYXRlIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI3N0cmluZy1hcmd1bWVudHMiKSxjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spKSxuZXcgRGF0ZShOYU4pKX1mdW5jdGlvbiBTbmUoZSx0KXt5bigyLGFyZ3VtZW50cyk7dmFyIG49anIoZSkuZ2V0VGltZSgpLHI9cGwodCk7cmV0dXJuIG5ldyBEYXRlKG4rcil9dmFyIGtuZT17fTtmdW5jdGlvbiBTdigpe3JldHVybiBrbmV9ZnVuY3Rpb24gRW5lKGUpe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCksZS5nZXRIb3VycygpLGUuZ2V0TWludXRlcygpLGUuZ2V0U2Vjb25kcygpLGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkpLGUuZ2V0VGltZSgpLXQuZ2V0VGltZSgpfWZ1bmN0aW9uIEZDKGUpe3luKDEsYXJndW1lbnRzKTt2YXIgdD1qcihlKTtyZXR1cm4gdC5zZXRIb3VycygwLDAsMCwwKSx0fWZ1bmN0aW9uIF9uZShlKXtyZXR1cm4geW4oMSxhcmd1bWVudHMpLGUgaW5zdGFuY2VvZiBEYXRlfHxlZyhlKT09PSJvYmplY3QiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT0iW29iamVjdCBEYXRlXSJ9ZnVuY3Rpb24gQ25lKGUpe2lmKHluKDEsYXJndW1lbnRzKSwhX25lKGUpJiZ0eXBlb2YgZSE9Im51bWJlciIpcmV0dXJuITE7dmFyIHQ9anIoZSk7cmV0dXJuIWlzTmFOKE51bWJlcih0KSl9ZnVuY3Rpb24gT25lKGUpe3luKDEsYXJndW1lbnRzKTt2YXIgdD1qcihlKSxuPXQuZ2V0TW9udGgoKTtyZXR1cm4gdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCksbisxLDApLHQuc2V0SG91cnMoMjMsNTksNTksOTk5KSx0fWZ1bmN0aW9uIFRuZShlKXt5bigxLGFyZ3VtZW50cyk7dmFyIHQ9anIoZSk7cmV0dXJuIHQuc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApLHR9ZnVuY3Rpb24gUG5lKGUsdCl7eW4oMixhcmd1bWVudHMpO3ZhciBuPXBsKHQpO3JldHVybiBTbmUoZSwtbil9dmFyIE1uZT04NjRlNTtmdW5jdGlvbiBSbmUoZSl7eW4oMSxhcmd1bWVudHMpO3ZhciB0PWpyKGUpLG49dC5nZXRUaW1lKCk7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCk7dmFyIHI9dC5nZXRUaW1lKCksbz1uLXI7cmV0dXJuIE1hdGguZmxvb3Ioby9NbmUpKzF9ZnVuY3Rpb24gdGcoZSl7eW4oMSxhcmd1bWVudHMpO3ZhciB0PTEsbj1qcihlKSxyPW4uZ2V0VVRDRGF5KCksbz0ocjx0Pzc6MCkrci10O3JldHVybiBuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktbyksbi5zZXRVVENIb3VycygwLDAsMCwwKSxufWZ1bmN0aW9uIF9BKGUpe3luKDEsYXJndW1lbnRzKTt2YXIgdD1qcihlKSxuPXQuZ2V0VVRDRnVsbFllYXIoKSxyPW5ldyBEYXRlKDApO3Iuc2V0VVRDRnVsbFllYXIobisxLDAsNCksci5zZXRVVENIb3VycygwLDAsMCwwKTt2YXIgbz10ZyhyKSxpPW5ldyBEYXRlKDApO2kuc2V0VVRDRnVsbFllYXIobiwwLDQpLGkuc2V0VVRDSG91cnMoMCwwLDAsMCk7dmFyIHM9dGcoaSk7cmV0dXJuIHQuZ2V0VGltZSgpPj1vLmdldFRpbWUoKT9uKzE6dC5nZXRUaW1lKCk+PXMuZ2V0VGltZSgpP246bi0xfWZ1bmN0aW9uIE5uZShlKXt5bigxLGFyZ3VtZW50cyk7dmFyIHQ9X0EoZSksbj1uZXcgRGF0ZSgwKTtuLnNldFVUQ0Z1bGxZZWFyKHQsMCw0KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApO3ZhciByPXRnKG4pO3JldHVybiByfXZhciAkbmU9NjA0OGU1O2Z1bmN0aW9uIEFuZShlKXt5bigxLGFyZ3VtZW50cyk7dmFyIHQ9anIoZSksbj10Zyh0KS5nZXRUaW1lKCktTm5lKHQpLmdldFRpbWUoKTtyZXR1cm4gTWF0aC5yb3VuZChuLyRuZSkrMX1mdW5jdGlvbiBuZyhlLHQpe3ZhciBuLHIsbyxpLHMsYSxsLGM7eW4oMSxhcmd1bWVudHMpO3ZhciB1PVN2KCksZD1wbCgobj0ocj0obz0oaT10PT1udWxsP3ZvaWQgMDp0LndlZWtTdGFydHNPbikhPT1udWxsJiZpIT09dm9pZCAwP2k6dD09bnVsbHx8KHM9dC5sb2NhbGUpPT09bnVsbHx8cz09PXZvaWQgMHx8KGE9cy5vcHRpb25zKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEud2Vla1N0YXJ0c09uKSE9PW51bGwmJm8hPT12b2lkIDA/bzp1LndlZWtTdGFydHNPbikhPT1udWxsJiZyIT09dm9pZCAwP3I6KGw9dS5sb2NhbGUpPT09bnVsbHx8bD09PXZvaWQgMHx8KGM9bC5vcHRpb25zKT09PW51bGx8fGM9PT12b2lkIDA/dm9pZCAwOmMud2Vla1N0YXJ0c09uKSE9PW51bGwmJm4hPT12b2lkIDA/bjowKTtpZighKGQ+PTAmJmQ8PTYpKXRocm93IG5ldyBSYW5nZUVycm9yKCJ3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHkiKTt2YXIgZj1qcihlKSxwPWYuZ2V0VVRDRGF5KCksbT0ocDxkPzc6MCkrcC1kO3JldHVybiBmLnNldFVUQ0RhdGUoZi5nZXRVVENEYXRlKCktbSksZi5zZXRVVENIb3VycygwLDAsMCwwKSxmfWZ1bmN0aW9uIENBKGUsdCl7dmFyIG4scixvLGkscyxhLGwsYzt5bigxLGFyZ3VtZW50cyk7dmFyIHU9anIoZSksZD11LmdldFVUQ0Z1bGxZZWFyKCksZj1TdigpLHA9cGwoKG49KHI9KG89KGk9dD09bnVsbD92b2lkIDA6dC5maXJzdFdlZWtDb250YWluc0RhdGUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOnQ9PW51bGx8fChzPXQubG9jYWxlKT09PW51bGx8fHM9PT12b2lkIDB8fChhPXMub3B0aW9ucyk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkhPT1udWxsJiZvIT09dm9pZCAwP286Zi5maXJzdFdlZWtDb250YWluc0RhdGUpIT09bnVsbCYmciE9PXZvaWQgMD9yOihsPWYubG9jYWxlKT09PW51bGx8fGw9PT12b2lkIDB8fChjPWwub3B0aW9ucyk9PT1udWxsfHxjPT09dm9pZCAwP3ZvaWQgMDpjLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkhPT1udWxsJiZuIT09dm9pZCAwP246MSk7aWYoIShwPj0xJiZwPD03KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Iik7dmFyIG09bmV3IERhdGUoMCk7bS5zZXRVVENGdWxsWWVhcihkKzEsMCxwKSxtLnNldFVUQ0hvdXJzKDAsMCwwLDApO3ZhciBnPW5nKG0sdCkseT1uZXcgRGF0ZSgwKTt5LnNldFVUQ0Z1bGxZZWFyKGQsMCxwKSx5LnNldFVUQ0hvdXJzKDAsMCwwLDApO3ZhciB2PW5nKHksdCk7cmV0dXJuIHUuZ2V0VGltZSgpPj1nLmdldFRpbWUoKT9kKzE6dS5nZXRUaW1lKCk+PXYuZ2V0VGltZSgpP2Q6ZC0xfWZ1bmN0aW9uIERuZShlLHQpe3ZhciBuLHIsbyxpLHMsYSxsLGM7eW4oMSxhcmd1bWVudHMpO3ZhciB1PVN2KCksZD1wbCgobj0ocj0obz0oaT10PT1udWxsP3ZvaWQgMDp0LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkhPT1udWxsJiZpIT09dm9pZCAwP2k6dD09bnVsbHx8KHM9dC5sb2NhbGUpPT09bnVsbHx8cz09PXZvaWQgMHx8KGE9cy5vcHRpb25zKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSE9PW51bGwmJm8hPT12b2lkIDA/bzp1LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkhPT1udWxsJiZyIT09dm9pZCAwP3I6KGw9dS5sb2NhbGUpPT09bnVsbHx8bD09PXZvaWQgMHx8KGM9bC5vcHRpb25zKT09PW51bGx8fGM9PT12b2lkIDA/dm9pZCAwOmMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSE9PW51bGwmJm4hPT12b2lkIDA/bjoxKSxmPUNBKGUsdCkscD1uZXcgRGF0ZSgwKTtwLnNldFVUQ0Z1bGxZZWFyKGYsMCxkKSxwLnNldFVUQ0hvdXJzKDAsMCwwLDApO3ZhciBtPW5nKHAsdCk7cmV0dXJuIG19dmFyIEluZT02MDQ4ZTU7ZnVuY3Rpb24gTG5lKGUsdCl7eW4oMSxhcmd1bWVudHMpO3ZhciBuPWpyKGUpLHI9bmcobix0KS5nZXRUaW1lKCktRG5lKG4sdCkuZ2V0VGltZSgpO3JldHVybiBNYXRoLnJvdW5kKHIvSW5lKSsxfWZ1bmN0aW9uIGF0KGUsdCl7Zm9yKHZhciBuPWU8MD8iLSI6IiIscj1NYXRoLmFicyhlKS50b1N0cmluZygpO3IubGVuZ3RoPHQ7KXI9IjAiK3I7cmV0dXJuIG4rcn12YXIgam5lPXt5OmZ1bmN0aW9uKHQsbil7dmFyIHI9dC5nZXRVVENGdWxsWWVhcigpLG89cj4wP3I6MS1yO3JldHVybiBhdChuPT09Inl5Ij9vJTEwMDpvLG4ubGVuZ3RoKX0sTTpmdW5jdGlvbih0LG4pe3ZhciByPXQuZ2V0VVRDTW9udGgoKTtyZXR1cm4gbj09PSJNIj9TdHJpbmcocisxKTphdChyKzEsMil9LGQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXQodC5nZXRVVENEYXRlKCksbi5sZW5ndGgpfSxhOmZ1bmN0aW9uKHQsbil7dmFyIHI9dC5nZXRVVENIb3VycygpLzEyPj0xPyJwbSI6ImFtIjtzd2l0Y2gobil7Y2FzZSJhIjpjYXNlImFhIjpyZXR1cm4gci50b1VwcGVyQ2FzZSgpO2Nhc2UiYWFhIjpyZXR1cm4gcjtjYXNlImFhYWFhIjpyZXR1cm4gclswXTtjYXNlImFhYWEiOmRlZmF1bHQ6cmV0dXJuIHI9PT0iYW0iPyJhLm0uIjoicC5tLiJ9fSxoOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGF0KHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsbi5sZW5ndGgpfSxIOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGF0KHQuZ2V0VVRDSG91cnMoKSxuLmxlbmd0aCl9LG06ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXQodC5nZXRVVENNaW51dGVzKCksbi5sZW5ndGgpfSxzOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGF0KHQuZ2V0VVRDU2Vjb25kcygpLG4ubGVuZ3RoKX0sUzpmdW5jdGlvbih0LG4pe3ZhciByPW4ubGVuZ3RoLG89dC5nZXRVVENNaWxsaXNlY29uZHMoKSxpPU1hdGguZmxvb3IobypNYXRoLnBvdygxMCxyLTMpKTtyZXR1cm4gYXQoaSxuLmxlbmd0aCl9fTtjb25zdCBpcz1qbmU7dmFyIEJsPXthbToiYW0iLHBtOiJwbSIsbWlkbmlnaHQ6Im1pZG5pZ2h0Iixub29uOiJub29uIixtb3JuaW5nOiJtb3JuaW5nIixhZnRlcm5vb246ImFmdGVybm9vbiIsZXZlbmluZzoiZXZlbmluZyIsbmlnaHQ6Im5pZ2h0In0sem5lPXtHOmZ1bmN0aW9uKHQsbixyKXt2YXIgbz10LmdldFVUQ0Z1bGxZZWFyKCk+MD8xOjA7c3dpdGNoKG4pe2Nhc2UiRyI6Y2FzZSJHRyI6Y2FzZSJHR0ciOnJldHVybiByLmVyYShvLHt3aWR0aDoiYWJicmV2aWF0ZWQifSk7Y2FzZSJHR0dHRyI6cmV0dXJuIHIuZXJhKG8se3dpZHRoOiJuYXJyb3cifSk7Y2FzZSJHR0dHIjpkZWZhdWx0OnJldHVybiByLmVyYShvLHt3aWR0aDoid2lkZSJ9KX19LHk6ZnVuY3Rpb24odCxuLHIpe2lmKG49PT0ieW8iKXt2YXIgbz10LmdldFVUQ0Z1bGxZZWFyKCksaT1vPjA/bzoxLW87cmV0dXJuIHIub3JkaW5hbE51bWJlcihpLHt1bml0OiJ5ZWFyIn0pfXJldHVybiBpcy55KHQsbil9LFk6ZnVuY3Rpb24odCxuLHIsbyl7dmFyIGk9Q0EodCxvKSxzPWk+MD9pOjEtaTtpZihuPT09IllZIil7dmFyIGE9cyUxMDA7cmV0dXJuIGF0KGEsMil9cmV0dXJuIG49PT0iWW8iP3Iub3JkaW5hbE51bWJlcihzLHt1bml0OiJ5ZWFyIn0pOmF0KHMsbi5sZW5ndGgpfSxSOmZ1bmN0aW9uKHQsbil7dmFyIHI9X0EodCk7cmV0dXJuIGF0KHIsbi5sZW5ndGgpfSx1OmZ1bmN0aW9uKHQsbil7dmFyIHI9dC5nZXRVVENGdWxsWWVhcigpO3JldHVybiBhdChyLG4ubGVuZ3RoKX0sUTpmdW5jdGlvbih0LG4scil7dmFyIG89TWF0aC5jZWlsKCh0LmdldFVUQ01vbnRoKCkrMSkvMyk7c3dpdGNoKG4pe2Nhc2UiUSI6cmV0dXJuIFN0cmluZyhvKTtjYXNlIlFRIjpyZXR1cm4gYXQobywyKTtjYXNlIlFvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKG8se3VuaXQ6InF1YXJ0ZXIifSk7Y2FzZSJRUVEiOnJldHVybiByLnF1YXJ0ZXIobyx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiUVFRUVEiOnJldHVybiByLnF1YXJ0ZXIobyx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIlFRUVEiOmRlZmF1bHQ6cmV0dXJuIHIucXVhcnRlcihvLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LHE6ZnVuY3Rpb24odCxuLHIpe3ZhciBvPU1hdGguY2VpbCgodC5nZXRVVENNb250aCgpKzEpLzMpO3N3aXRjaChuKXtjYXNlInEiOnJldHVybiBTdHJpbmcobyk7Y2FzZSJxcSI6cmV0dXJuIGF0KG8sMik7Y2FzZSJxbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihvLHt1bml0OiJxdWFydGVyIn0pO2Nhc2UicXFxIjpyZXR1cm4gci5xdWFydGVyKG8se3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtjYXNlInFxcXFxIjpyZXR1cm4gci5xdWFydGVyKG8se3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJxcXFxIjpkZWZhdWx0OnJldHVybiByLnF1YXJ0ZXIobyx7d2lkdGg6IndpZGUiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fSxNOmZ1bmN0aW9uKHQsbixyKXt2YXIgbz10LmdldFVUQ01vbnRoKCk7c3dpdGNoKG4pe2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIGlzLk0odCxuKTtjYXNlIk1vIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKG8rMSx7dW5pdDoibW9udGgifSk7Y2FzZSJNTU0iOnJldHVybiByLm1vbnRoKG8se3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIk1NTU1NIjpyZXR1cm4gci5tb250aChvLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiTU1NTSI6ZGVmYXVsdDpyZXR1cm4gci5tb250aChvLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LEw6ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQuZ2V0VVRDTW9udGgoKTtzd2l0Y2gobil7Y2FzZSJMIjpyZXR1cm4gU3RyaW5nKG8rMSk7Y2FzZSJMTCI6cmV0dXJuIGF0KG8rMSwyKTtjYXNlIkxvIjpyZXR1cm4gci5vcmRpbmFsTnVtYmVyKG8rMSx7dW5pdDoibW9udGgifSk7Y2FzZSJMTEwiOnJldHVybiByLm1vbnRoKG8se3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtjYXNlIkxMTExMIjpyZXR1cm4gci5tb250aChvLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiTExMTCI6ZGVmYXVsdDpyZXR1cm4gci5tb250aChvLHt3aWR0aDoid2lkZSIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19LHc6ZnVuY3Rpb24odCxuLHIsbyl7dmFyIGk9TG5lKHQsbyk7cmV0dXJuIG49PT0id28iP3Iub3JkaW5hbE51bWJlcihpLHt1bml0OiJ3ZWVrIn0pOmF0KGksbi5sZW5ndGgpfSxJOmZ1bmN0aW9uKHQsbixyKXt2YXIgbz1BbmUodCk7cmV0dXJuIG49PT0iSW8iP3Iub3JkaW5hbE51bWJlcihvLHt1bml0OiJ3ZWVrIn0pOmF0KG8sbi5sZW5ndGgpfSxkOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbj09PSJkbyI/ci5vcmRpbmFsTnVtYmVyKHQuZ2V0VVRDRGF0ZSgpLHt1bml0OiJkYXRlIn0pOmlzLmQodCxuKX0sRDpmdW5jdGlvbih0LG4scil7dmFyIG89Um5lKHQpO3JldHVybiBuPT09IkRvIj9yLm9yZGluYWxOdW1iZXIobyx7dW5pdDoiZGF5T2ZZZWFyIn0pOmF0KG8sbi5sZW5ndGgpfSxFOmZ1bmN0aW9uKHQsbixyKXt2YXIgbz10LmdldFVUQ0RheSgpO3N3aXRjaChuKXtjYXNlIkUiOmNhc2UiRUUiOmNhc2UiRUVFIjpyZXR1cm4gci5kYXkobyx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiRUVFRUUiOnJldHVybiByLmRheShvLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiRUVFRUVFIjpyZXR1cm4gci5kYXkobyx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiRUVFRSI6ZGVmYXVsdDpyZXR1cm4gci5kYXkobyx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxlOmZ1bmN0aW9uKHQsbixyLG8pe3ZhciBpPXQuZ2V0VVRDRGF5KCkscz0oaS1vLndlZWtTdGFydHNPbis4KSU3fHw3O3N3aXRjaChuKXtjYXNlImUiOnJldHVybiBTdHJpbmcocyk7Y2FzZSJlZSI6cmV0dXJuIGF0KHMsMik7Y2FzZSJlbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihzLHt1bml0OiJkYXkifSk7Y2FzZSJlZWUiOnJldHVybiByLmRheShpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJlZWVlZSI6cmV0dXJuIHIuZGF5KGkse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJlZWVlZWUiOnJldHVybiByLmRheShpLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJlZWVlIjpkZWZhdWx0OnJldHVybiByLmRheShpLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LGM6ZnVuY3Rpb24odCxuLHIsbyl7dmFyIGk9dC5nZXRVVENEYXkoKSxzPShpLW8ud2Vla1N0YXJ0c09uKzgpJTd8fDc7c3dpdGNoKG4pe2Nhc2UiYyI6cmV0dXJuIFN0cmluZyhzKTtjYXNlImNjIjpyZXR1cm4gYXQocyxuLmxlbmd0aCk7Y2FzZSJjbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihzLHt1bml0OiJkYXkifSk7Y2FzZSJjY2MiOnJldHVybiByLmRheShpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjYyI6cmV0dXJuIHIuZGF5KGkse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjY2MiOnJldHVybiByLmRheShpLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjIjpkZWZhdWx0OnJldHVybiByLmRheShpLHt3aWR0aDoid2lkZSIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19LGk6ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQuZ2V0VVRDRGF5KCksaT1vPT09MD83Om87c3dpdGNoKG4pe2Nhc2UiaSI6cmV0dXJuIFN0cmluZyhpKTtjYXNlImlpIjpyZXR1cm4gYXQoaSxuLmxlbmd0aCk7Y2FzZSJpbyI6cmV0dXJuIHIub3JkaW5hbE51bWJlcihpLHt1bml0OiJkYXkifSk7Y2FzZSJpaWkiOnJldHVybiByLmRheShvLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJpaWlpaSI6cmV0dXJuIHIuZGF5KG8se3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJpaWlpaWkiOnJldHVybiByLmRheShvLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJpaWlpIjpkZWZhdWx0OnJldHVybiByLmRheShvLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LGE6ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQuZ2V0VVRDSG91cnMoKSxpPW8vMTI+PTE/InBtIjoiYW0iO3N3aXRjaChuKXtjYXNlImEiOmNhc2UiYWEiOnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJhYWEiOnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSkudG9Mb3dlckNhc2UoKTtjYXNlImFhYWFhIjpyZXR1cm4gci5kYXlQZXJpb2QoaSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImFhYWEiOmRlZmF1bHQ6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0sYjpmdW5jdGlvbih0LG4scil7dmFyIG89dC5nZXRVVENIb3VycygpLGk7c3dpdGNoKG89PT0xMj9pPUJsLm5vb246bz09PTA/aT1CbC5taWRuaWdodDppPW8vMTI+PTE/InBtIjoiYW0iLG4pe2Nhc2UiYiI6Y2FzZSJiYiI6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImJiYiI6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KS50b0xvd2VyQ2FzZSgpO2Nhc2UiYmJiYmIiOnJldHVybiByLmRheVBlcmlvZChpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiYmJiYiI6ZGVmYXVsdDpyZXR1cm4gci5kYXlQZXJpb2QoaSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxCOmZ1bmN0aW9uKHQsbixyKXt2YXIgbz10LmdldFVUQ0hvdXJzKCksaTtzd2l0Y2gobz49MTc/aT1CbC5ldmVuaW5nOm8+PTEyP2k9QmwuYWZ0ZXJub29uOm8+PTQ/aT1CbC5tb3JuaW5nOmk9QmwubmlnaHQsbil7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkJCQkJCIjpyZXR1cm4gci5kYXlQZXJpb2QoaSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkJCQkIiOmRlZmF1bHQ6cmV0dXJuIHIuZGF5UGVyaW9kKGkse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0saDpmdW5jdGlvbih0LG4scil7aWYobj09PSJobyIpe3ZhciBvPXQuZ2V0VVRDSG91cnMoKSUxMjtyZXR1cm4gbz09PTAmJihvPTEyKSxyLm9yZGluYWxOdW1iZXIobyx7dW5pdDoiaG91ciJ9KX1yZXR1cm4gaXMuaCh0LG4pfSxIOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbj09PSJIbyI/ci5vcmRpbmFsTnVtYmVyKHQuZ2V0VVRDSG91cnMoKSx7dW5pdDoiaG91ciJ9KTppcy5IKHQsbil9LEs6ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQuZ2V0VVRDSG91cnMoKSUxMjtyZXR1cm4gbj09PSJLbyI/ci5vcmRpbmFsTnVtYmVyKG8se3VuaXQ6ImhvdXIifSk6YXQobyxuLmxlbmd0aCl9LGs6ZnVuY3Rpb24odCxuLHIpe3ZhciBvPXQuZ2V0VVRDSG91cnMoKTtyZXR1cm4gbz09PTAmJihvPTI0KSxuPT09ImtvIj9yLm9yZGluYWxOdW1iZXIobyx7dW5pdDoiaG91ciJ9KTphdChvLG4ubGVuZ3RoKX0sbTpmdW5jdGlvbih0LG4scil7cmV0dXJuIG49PT0ibW8iP3Iub3JkaW5hbE51bWJlcih0LmdldFVUQ01pbnV0ZXMoKSx7dW5pdDoibWludXRlIn0pOmlzLm0odCxuKX0sczpmdW5jdGlvbih0LG4scil7cmV0dXJuIG49PT0ic28iP3Iub3JkaW5hbE51bWJlcih0LmdldFVUQ1NlY29uZHMoKSx7dW5pdDoic2Vjb25kIn0pOmlzLnModCxuKX0sUzpmdW5jdGlvbih0LG4pe3JldHVybiBpcy5TKHQsbil9LFg6ZnVuY3Rpb24odCxuLHIsbyl7dmFyIGk9by5fb3JpZ2luYWxEYXRlfHx0LHM9aS5nZXRUaW1lem9uZU9mZnNldCgpO2lmKHM9PT0wKXJldHVybiJaIjtzd2l0Y2gobil7Y2FzZSJYIjpyZXR1cm4gVUMocyk7Y2FzZSJYWFhYIjpjYXNlIlhYIjpyZXR1cm4ga2Eocyk7Y2FzZSJYWFhYWCI6Y2FzZSJYWFgiOmRlZmF1bHQ6cmV0dXJuIGthKHMsIjoiKX19LHg6ZnVuY3Rpb24odCxuLHIsbyl7dmFyIGk9by5fb3JpZ2luYWxEYXRlfHx0LHM9aS5nZXRUaW1lem9uZU9mZnNldCgpO3N3aXRjaChuKXtjYXNlIngiOnJldHVybiBVQyhzKTtjYXNlInh4eHgiOmNhc2UieHgiOnJldHVybiBrYShzKTtjYXNlInh4eHh4IjpjYXNlInh4eCI6ZGVmYXVsdDpyZXR1cm4ga2EocywiOiIpfX0sTzpmdW5jdGlvbih0LG4scixvKXt2YXIgaT1vLl9vcmlnaW5hbERhdGV8fHQscz1pLmdldFRpbWV6b25lT2Zmc2V0KCk7c3dpdGNoKG4pe2Nhc2UiTyI6Y2FzZSJPTyI6Y2FzZSJPT08iOnJldHVybiJHTVQiK0JDKHMsIjoiKTtjYXNlIk9PT08iOmRlZmF1bHQ6cmV0dXJuIkdNVCIra2EocywiOiIpfX0sejpmdW5jdGlvbih0LG4scixvKXt2YXIgaT1vLl9vcmlnaW5hbERhdGV8fHQscz1pLmdldFRpbWV6b25lT2Zmc2V0KCk7c3dpdGNoKG4pe2Nhc2UieiI6Y2FzZSJ6eiI6Y2FzZSJ6enoiOnJldHVybiJHTVQiK0JDKHMsIjoiKTtjYXNlInp6enoiOmRlZmF1bHQ6cmV0dXJuIkdNVCIra2EocywiOiIpfX0sdDpmdW5jdGlvbih0LG4scixvKXt2YXIgaT1vLl9vcmlnaW5hbERhdGV8fHQscz1NYXRoLmZsb29yKGkuZ2V0VGltZSgpLzFlMyk7cmV0dXJuIGF0KHMsbi5sZW5ndGgpfSxUOmZ1bmN0aW9uKHQsbixyLG8pe3ZhciBpPW8uX29yaWdpbmFsRGF0ZXx8dCxzPWkuZ2V0VGltZSgpO3JldHVybiBhdChzLG4ubGVuZ3RoKX19O2Z1bmN0aW9uIEJDKGUsdCl7dmFyIG49ZT4wPyItIjoiKyIscj1NYXRoLmFicyhlKSxvPU1hdGguZmxvb3Ioci82MCksaT1yJTYwO2lmKGk9PT0wKXJldHVybiBuK1N0cmluZyhvKTt2YXIgcz10fHwiIjtyZXR1cm4gbitTdHJpbmcobykrcythdChpLDIpfWZ1bmN0aW9uIFVDKGUsdCl7aWYoZSU2MD09PTApe3ZhciBuPWU+MD8iLSI6IisiO3JldHVybiBuK2F0KE1hdGguYWJzKGUpLzYwLDIpfXJldHVybiBrYShlLHQpfWZ1bmN0aW9uIGthKGUsdCl7dmFyIG49dHx8IiIscj1lPjA/Ii0iOiIrIixvPU1hdGguYWJzKGUpLGk9YXQoTWF0aC5mbG9vcihvLzYwKSwyKSxzPWF0KG8lNjAsMik7cmV0dXJuIHIraStuK3N9dmFyIFZDPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UiUCI6cmV0dXJuIG4uZGF0ZSh7d2lkdGg6InNob3J0In0pO2Nhc2UiUFAiOnJldHVybiBuLmRhdGUoe3dpZHRoOiJtZWRpdW0ifSk7Y2FzZSJQUFAiOnJldHVybiBuLmRhdGUoe3dpZHRoOiJsb25nIn0pO2Nhc2UiUFBQUCI6ZGVmYXVsdDpyZXR1cm4gbi5kYXRlKHt3aWR0aDoiZnVsbCJ9KX19LE9BPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UicCI6cmV0dXJuIG4udGltZSh7d2lkdGg6InNob3J0In0pO2Nhc2UicHAiOnJldHVybiBuLnRpbWUoe3dpZHRoOiJtZWRpdW0ifSk7Y2FzZSJwcHAiOnJldHVybiBuLnRpbWUoe3dpZHRoOiJsb25nIn0pO2Nhc2UicHBwcCI6ZGVmYXVsdDpyZXR1cm4gbi50aW1lKHt3aWR0aDoiZnVsbCJ9KX19LEZuZT1mdW5jdGlvbih0LG4pe3ZhciByPXQubWF0Y2goLyhQKykocCspPy8pfHxbXSxvPXJbMV0saT1yWzJdO2lmKCFpKXJldHVybiBWQyh0LG4pO3ZhciBzO3N3aXRjaChvKXtjYXNlIlAiOnM9bi5kYXRlVGltZSh7d2lkdGg6InNob3J0In0pO2JyZWFrO2Nhc2UiUFAiOnM9bi5kYXRlVGltZSh7d2lkdGg6Im1lZGl1bSJ9KTticmVhaztjYXNlIlBQUCI6cz1uLmRhdGVUaW1lKHt3aWR0aDoibG9uZyJ9KTticmVhaztjYXNlIlBQUFAiOmRlZmF1bHQ6cz1uLmRhdGVUaW1lKHt3aWR0aDoiZnVsbCJ9KTticmVha31yZXR1cm4gcy5yZXBsYWNlKCJ7e2RhdGV9fSIsVkMobyxuKSkucmVwbGFjZSgie3t0aW1lfX0iLE9BKGksbikpfSxCbmU9e3A6T0EsUDpGbmV9LFVuZT1bIkQiLCJERCJdLFZuZT1bIllZIiwiWVlZWSJdO2Z1bmN0aW9uIEhuZShlKXtyZXR1cm4gVW5lLmluZGV4T2YoZSkhPT0tMX1mdW5jdGlvbiBXbmUoZSl7cmV0dXJuIFZuZS5pbmRleE9mKGUpIT09LTF9ZnVuY3Rpb24gSEMoZSx0LG4pe2lmKGU9PT0iWVlZWSIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGAiLmNvbmNhdCh0LCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYCIpLmNvbmNhdChuLCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWQiKSk7aWYoZT09PSJZWSIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYCIuY29uY2F0KHQsImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgIikuY29uY2F0KG4sImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZCIpKTtpZihlPT09IkQiKXRocm93IG5ldyBSYW5nZUVycm9yKCJVc2UgYGRgIGluc3RlYWQgb2YgYERgIChpbiBgIi5jb25jYXQodCwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGAiKS5jb25jYXQobiwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kIikpO2lmKGU9PT0iREQiKXRocm93IG5ldyBSYW5nZUVycm9yKCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGAiLmNvbmNhdCh0LCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYCIpLmNvbmNhdChuLCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWQiKSl9dmFyIEtuZT17bGVzc1RoYW5YU2Vjb25kczp7b25lOiJsZXNzIHRoYW4gYSBzZWNvbmQiLG90aGVyOiJsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMifSx4U2Vjb25kczp7b25lOiIxIHNlY29uZCIsb3RoZXI6Int7Y291bnR9fSBzZWNvbmRzIn0saGFsZkFNaW51dGU6ImhhbGYgYSBtaW51dGUiLGxlc3NUaGFuWE1pbnV0ZXM6e29uZToibGVzcyB0aGFuIGEgbWludXRlIixvdGhlcjoibGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzIn0seE1pbnV0ZXM6e29uZToiMSBtaW51dGUiLG90aGVyOiJ7e2NvdW50fX0gbWludXRlcyJ9LGFib3V0WEhvdXJzOntvbmU6ImFib3V0IDEgaG91ciIsb3RoZXI6ImFib3V0IHt7Y291bnR9fSBob3VycyJ9LHhIb3Vyczp7b25lOiIxIGhvdXIiLG90aGVyOiJ7e2NvdW50fX0gaG91cnMifSx4RGF5czp7b25lOiIxIGRheSIsb3RoZXI6Int7Y291bnR9fSBkYXlzIn0sYWJvdXRYV2Vla3M6e29uZToiYWJvdXQgMSB3ZWVrIixvdGhlcjoiYWJvdXQge3tjb3VudH19IHdlZWtzIn0seFdlZWtzOntvbmU6IjEgd2VlayIsb3RoZXI6Int7Y291bnR9fSB3ZWVrcyJ9LGFib3V0WE1vbnRoczp7b25lOiJhYm91dCAxIG1vbnRoIixvdGhlcjoiYWJvdXQge3tjb3VudH19IG1vbnRocyJ9LHhNb250aHM6e29uZToiMSBtb250aCIsb3RoZXI6Int7Y291bnR9fSBtb250aHMifSxhYm91dFhZZWFyczp7b25lOiJhYm91dCAxIHllYXIiLG90aGVyOiJhYm91dCB7e2NvdW50fX0geWVhcnMifSx4WWVhcnM6e29uZToiMSB5ZWFyIixvdGhlcjoie3tjb3VudH19IHllYXJzIn0sb3ZlclhZZWFyczp7b25lOiJvdmVyIDEgeWVhciIsb3RoZXI6Im92ZXIge3tjb3VudH19IHllYXJzIn0sYWxtb3N0WFllYXJzOntvbmU6ImFsbW9zdCAxIHllYXIiLG90aGVyOiJhbG1vc3Qge3tjb3VudH19IHllYXJzIn19LHFuZT1mdW5jdGlvbih0LG4scil7dmFyIG8saT1LbmVbdF07cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9vPWk6bj09PTE/bz1pLm9uZTpvPWkub3RoZXIucmVwbGFjZSgie3tjb3VudH19IixuLnRvU3RyaW5nKCkpLHIhPW51bGwmJnIuYWRkU3VmZml4P3IuY29tcGFyaXNvbiYmci5jb21wYXJpc29uPjA/ImluICIrbzpvKyIgYWdvIjpvfTtjb25zdCBHbmU9cW5lO2Z1bmN0aW9uIFh5KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxuPXQud2lkdGg/U3RyaW5nKHQud2lkdGgpOmUuZGVmYXVsdFdpZHRoLHI9ZS5mb3JtYXRzW25dfHxlLmZvcm1hdHNbZS5kZWZhdWx0V2lkdGhdO3JldHVybiByfX12YXIgWW5lPXtmdWxsOiJFRUVFLCBNTU1NIGRvLCB5Iixsb25nOiJNTU1NIGRvLCB5IixtZWRpdW06Ik1NTSBkLCB5IixzaG9ydDoiTU0vZGQveXl5eSJ9LFhuZT17ZnVsbDoiaDptbTpzcyBhIHp6enoiLGxvbmc6Img6bW06c3MgYSB6IixtZWRpdW06Img6bW06c3MgYSIsc2hvcnQ6Img6bW0gYSJ9LFpuZT17ZnVsbDoie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsbG9uZzoie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsbWVkaXVtOiJ7e2RhdGV9fSwge3t0aW1lfX0iLHNob3J0OiJ7e2RhdGV9fSwge3t0aW1lfX0ifSxKbmU9e2RhdGU6WHkoe2Zvcm1hdHM6WW5lLGRlZmF1bHRXaWR0aDoiZnVsbCJ9KSx0aW1lOlh5KHtmb3JtYXRzOlhuZSxkZWZhdWx0V2lkdGg6ImZ1bGwifSksZGF0ZVRpbWU6WHkoe2Zvcm1hdHM6Wm5lLGRlZmF1bHRXaWR0aDoiZnVsbCJ9KX07Y29uc3QgUW5lPUpuZTt2YXIgZXJlPXtsYXN0V2VlazoiJ2xhc3QnIGVlZWUgJ2F0JyBwIix5ZXN0ZXJkYXk6Iid5ZXN0ZXJkYXkgYXQnIHAiLHRvZGF5OiIndG9kYXkgYXQnIHAiLHRvbW9ycm93OiIndG9tb3Jyb3cgYXQnIHAiLG5leHRXZWVrOiJlZWVlICdhdCcgcCIsb3RoZXI6IlAifSx0cmU9ZnVuY3Rpb24odCxuLHIsbyl7cmV0dXJuIGVyZVt0XX07Y29uc3QgbnJlPXRyZTtmdW5jdGlvbiBqdShlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1uIT1udWxsJiZuLmNvbnRleHQ/U3RyaW5nKG4uY29udGV4dCk6InN0YW5kYWxvbmUiLG87aWYocj09PSJmb3JtYXR0aW5nIiYmZS5mb3JtYXR0aW5nVmFsdWVzKXt2YXIgaT1lLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGh8fGUuZGVmYXVsdFdpZHRoLHM9biE9bnVsbCYmbi53aWR0aD9TdHJpbmcobi53aWR0aCk6aTtvPWUuZm9ybWF0dGluZ1ZhbHVlc1tzXXx8ZS5mb3JtYXR0aW5nVmFsdWVzW2ldfWVsc2V7dmFyIGE9ZS5kZWZhdWx0V2lkdGgsbD1uIT1udWxsJiZuLndpZHRoP1N0cmluZyhuLndpZHRoKTplLmRlZmF1bHRXaWR0aDtvPWUudmFsdWVzW2xdfHxlLnZhbHVlc1thXX12YXIgYz1lLmFyZ3VtZW50Q2FsbGJhY2s/ZS5hcmd1bWVudENhbGxiYWNrKHQpOnQ7cmV0dXJuIG9bY119fXZhciBycmU9e25hcnJvdzpbIkIiLCJBIl0sYWJicmV2aWF0ZWQ6WyJCQyIsIkFEIl0sd2lkZTpbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdfSxvcmU9e25hcnJvdzpbIjEiLCIyIiwiMyIsIjQiXSxhYmJyZXZpYXRlZDpbIlExIiwiUTIiLCJRMyIsIlE0Il0sd2lkZTpbIjFzdCBxdWFydGVyIiwiMm5kIHF1YXJ0ZXIiLCIzcmQgcXVhcnRlciIsIjR0aCBxdWFydGVyIl19LGlyZT17bmFycm93OlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sYWJicmV2aWF0ZWQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSx3aWRlOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sc3JlPXtuYXJyb3c6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sc2hvcnQ6WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGFiYnJldmlhdGVkOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sd2lkZTpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LGFyZT17bmFycm93OnthbToiYSIscG06InAiLG1pZG5pZ2h0OiJtaSIsbm9vbjoibiIsbW9ybmluZzoibW9ybmluZyIsYWZ0ZXJub29uOiJhZnRlcm5vb24iLGV2ZW5pbmc6ImV2ZW5pbmciLG5pZ2h0OiJuaWdodCJ9LGFiYnJldmlhdGVkOnthbToiQU0iLHBtOiJQTSIsbWlkbmlnaHQ6Im1pZG5pZ2h0Iixub29uOiJub29uIixtb3JuaW5nOiJtb3JuaW5nIixhZnRlcm5vb246ImFmdGVybm9vbiIsZXZlbmluZzoiZXZlbmluZyIsbmlnaHQ6Im5pZ2h0In0sd2lkZTp7YW06ImEubS4iLHBtOiJwLm0uIixtaWRuaWdodDoibWlkbmlnaHQiLG5vb246Im5vb24iLG1vcm5pbmc6Im1vcm5pbmciLGFmdGVybm9vbjoiYWZ0ZXJub29uIixldmVuaW5nOiJldmVuaW5nIixuaWdodDoibmlnaHQifX0sbHJlPXtuYXJyb3c6e2FtOiJhIixwbToicCIsbWlkbmlnaHQ6Im1pIixub29uOiJuIixtb3JuaW5nOiJpbiB0aGUgbW9ybmluZyIsYWZ0ZXJub29uOiJpbiB0aGUgYWZ0ZXJub29uIixldmVuaW5nOiJpbiB0aGUgZXZlbmluZyIsbmlnaHQ6ImF0IG5pZ2h0In0sYWJicmV2aWF0ZWQ6e2FtOiJBTSIscG06IlBNIixtaWRuaWdodDoibWlkbmlnaHQiLG5vb246Im5vb24iLG1vcm5pbmc6ImluIHRoZSBtb3JuaW5nIixhZnRlcm5vb246ImluIHRoZSBhZnRlcm5vb24iLGV2ZW5pbmc6ImluIHRoZSBldmVuaW5nIixuaWdodDoiYXQgbmlnaHQifSx3aWRlOnthbToiYS5tLiIscG06InAubS4iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoiaW4gdGhlIG1vcm5pbmciLGFmdGVybm9vbjoiaW4gdGhlIGFmdGVybm9vbiIsZXZlbmluZzoiaW4gdGhlIGV2ZW5pbmciLG5pZ2h0OiJhdCBuaWdodCJ9fSxjcmU9ZnVuY3Rpb24odCxuKXt2YXIgcj1OdW1iZXIodCksbz1yJTEwMDtpZihvPjIwfHxvPDEwKXN3aXRjaChvJTEwKXtjYXNlIDE6cmV0dXJuIHIrInN0IjtjYXNlIDI6cmV0dXJuIHIrIm5kIjtjYXNlIDM6cmV0dXJuIHIrInJkIn1yZXR1cm4gcisidGgifSx1cmU9e29yZGluYWxOdW1iZXI6Y3JlLGVyYTpqdSh7dmFsdWVzOnJyZSxkZWZhdWx0V2lkdGg6IndpZGUifSkscXVhcnRlcjpqdSh7dmFsdWVzOm9yZSxkZWZhdWx0V2lkdGg6IndpZGUiLGFyZ3VtZW50Q2FsbGJhY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHQtMX19KSxtb250aDpqdSh7dmFsdWVzOmlyZSxkZWZhdWx0V2lkdGg6IndpZGUifSksZGF5Omp1KHt2YWx1ZXM6c3JlLGRlZmF1bHRXaWR0aDoid2lkZSJ9KSxkYXlQZXJpb2Q6anUoe3ZhbHVlczphcmUsZGVmYXVsdFdpZHRoOiJ3aWRlIixmb3JtYXR0aW5nVmFsdWVzOmxyZSxkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiJ3aWRlIn0pfTtjb25zdCBkcmU9dXJlO2Z1bmN0aW9uIHp1KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30scj1uLndpZHRoLG89ciYmZS5tYXRjaFBhdHRlcm5zW3JdfHxlLm1hdGNoUGF0dGVybnNbZS5kZWZhdWx0TWF0Y2hXaWR0aF0saT10Lm1hdGNoKG8pO2lmKCFpKXJldHVybiBudWxsO3ZhciBzPWlbMF0sYT1yJiZlLnBhcnNlUGF0dGVybnNbcl18fGUucGFyc2VQYXR0ZXJuc1tlLmRlZmF1bHRQYXJzZVdpZHRoXSxsPUFycmF5LmlzQXJyYXkoYSk/cHJlKGEsZnVuY3Rpb24oZCl7cmV0dXJuIGQudGVzdChzKX0pOmZyZShhLGZ1bmN0aW9uKGQpe3JldHVybiBkLnRlc3Qocyl9KSxjO2M9ZS52YWx1ZUNhbGxiYWNrP2UudmFsdWVDYWxsYmFjayhsKTpsLGM9bi52YWx1ZUNhbGxiYWNrP24udmFsdWVDYWxsYmFjayhjKTpjO3ZhciB1PXQuc2xpY2Uocy5sZW5ndGgpO3JldHVybnt2YWx1ZTpjLHJlc3Q6dX19fWZ1bmN0aW9uIGZyZShlLHQpe2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikmJnQoZVtuXSkpcmV0dXJuIG59ZnVuY3Rpb24gcHJlKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYodChlW25dKSlyZXR1cm4gbn1mdW5jdGlvbiBocmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxyPXQubWF0Y2goZS5tYXRjaFBhdHRlcm4pO2lmKCFyKXJldHVybiBudWxsO3ZhciBvPXJbMF0saT10Lm1hdGNoKGUucGFyc2VQYXR0ZXJuKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgcz1lLnZhbHVlQ2FsbGJhY2s/ZS52YWx1ZUNhbGxiYWNrKGlbMF0pOmlbMF07cz1uLnZhbHVlQ2FsbGJhY2s/bi52YWx1ZUNhbGxiYWNrKHMpOnM7dmFyIGE9dC5zbGljZShvLmxlbmd0aCk7cmV0dXJue3ZhbHVlOnMscmVzdDphfX19dmFyIG1yZT0vXihcZCspKHRofHN0fG5kfHJkKT8vaSxncmU9L1xkKy9pLHZyZT17bmFycm93Oi9eKGJ8YSkvaSxhYmJyZXZpYXRlZDovXihiXC4/XHM/Y1wuP3xiXC4/XHM/Y1wuP1xzP2VcLj98YVwuP1xzP2RcLj98Y1wuP1xzP2VcLj8pL2ksd2lkZTovXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2l9LHlyZT17YW55OlsvXmIvaSwvXihhfGMpL2ldfSx4cmU9e25hcnJvdzovXlsxMjM0XS9pLGFiYnJldmlhdGVkOi9ecVsxMjM0XS9pLHdpZGU6L15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2l9LGJyZT17YW55OlsvMS9pLC8yL2ksLzMvaSwvNC9pXX0sd3JlPXtuYXJyb3c6L15bamZtYXNvbmRdL2ksYWJicmV2aWF0ZWQ6L14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksd2lkZTovXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pfSxTcmU9e25hcnJvdzpbL15qL2ksL15mL2ksL15tL2ksL15hL2ksL15tL2ksL15qL2ksL15qL2ksL15hL2ksL15zL2ksL15vL2ksL15uL2ksL15kL2ldLGFueTpbL15qYS9pLC9eZi9pLC9ebWFyL2ksL15hcC9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYXUvaSwvXnMvaSwvXm8vaSwvXm4vaSwvXmQvaV19LGtyZT17bmFycm93Oi9eW3NtdHdmXS9pLHNob3J0Oi9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLGFiYnJldmlhdGVkOi9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSx3aWRlOi9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pfSxFcmU9e25hcnJvdzpbL15zL2ksL15tL2ksL150L2ksL153L2ksL150L2ksL15mL2ksL15zL2ldLGFueTpbL15zdS9pLC9ebS9pLC9edHUvaSwvXncvaSwvXnRoL2ksL15mL2ksL15zYS9pXX0sX3JlPXtuYXJyb3c6L14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLGFueTovXihbYXBdXC4/XHM/bVwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaX0sQ3JlPXthbnk6e2FtOi9eYS9pLHBtOi9ecC9pLG1pZG5pZ2h0Oi9ebWkvaSxub29uOi9ebm8vaSxtb3JuaW5nOi9tb3JuaW5nL2ksYWZ0ZXJub29uOi9hZnRlcm5vb24vaSxldmVuaW5nOi9ldmVuaW5nL2ksbmlnaHQ6L25pZ2h0L2l9fSxPcmU9e29yZGluYWxOdW1iZXI6aHJlKHttYXRjaFBhdHRlcm46bXJlLHBhcnNlUGF0dGVybjpncmUsdmFsdWVDYWxsYmFjazpmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VJbnQodCwxMCl9fSksZXJhOnp1KHttYXRjaFBhdHRlcm5zOnZyZSxkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczp5cmUsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KSxxdWFydGVyOnp1KHttYXRjaFBhdHRlcm5zOnhyZSxkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczpicmUsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSIsdmFsdWVDYWxsYmFjazpmdW5jdGlvbih0KXtyZXR1cm4gdCsxfX0pLG1vbnRoOnp1KHttYXRjaFBhdHRlcm5zOndyZSxkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczpTcmUsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KSxkYXk6enUoe21hdGNoUGF0dGVybnM6a3JlLGRlZmF1bHRNYXRjaFdpZHRoOiJ3aWRlIixwYXJzZVBhdHRlcm5zOkVyZSxkZWZhdWx0UGFyc2VXaWR0aDoiYW55In0pLGRheVBlcmlvZDp6dSh7bWF0Y2hQYXR0ZXJuczpfcmUsZGVmYXVsdE1hdGNoV2lkdGg6ImFueSIscGFyc2VQYXR0ZXJuczpDcmUsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KX07Y29uc3QgVHJlPU9yZTt2YXIgUHJlPXtjb2RlOiJlbi1VUyIsZm9ybWF0RGlzdGFuY2U6R25lLGZvcm1hdExvbmc6UW5lLGZvcm1hdFJlbGF0aXZlOm5yZSxsb2NhbGl6ZTpkcmUsbWF0Y2g6VHJlLG9wdGlvbnM6e3dlZWtTdGFydHNPbjowLGZpcnN0V2Vla0NvbnRhaW5zRGF0ZToxfX07Y29uc3QgVEE9UHJlO3ZhciBNcmU9L1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZyxScmU9L1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2csTnJlPS9eJyhbXl0qPyknPyQvLCRyZT0vJycvZyxBcmU9L1thLXpBLVpdLztmdW5jdGlvbiBfbChlLHQsbil7dmFyIHIsbyxpLHMsYSxsLGMsdSxkLGYscCxtLGcseSx2LHgsdyxrO3luKDIsYXJndW1lbnRzKTt2YXIgRT1TdHJpbmcodCksUz1TdigpLF89KHI9KG89bj09bnVsbD92b2lkIDA6bi5sb2NhbGUpIT09bnVsbCYmbyE9PXZvaWQgMD9vOlMubG9jYWxlKSE9PW51bGwmJnIhPT12b2lkIDA/cjpUQSxQPXBsKChpPShzPShhPShsPW49PW51bGw/dm9pZCAwOm4uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSE9PW51bGwmJmwhPT12b2lkIDA/bDpuPT1udWxsfHwoYz1uLmxvY2FsZSk9PT1udWxsfHxjPT09dm9pZCAwfHwodT1jLm9wdGlvbnMpPT09bnVsbHx8dT09PXZvaWQgMD92b2lkIDA6dS5maXJzdFdlZWtDb250YWluc0RhdGUpIT09bnVsbCYmYSE9PXZvaWQgMD9hOlMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSE9PW51bGwmJnMhPT12b2lkIDA/czooZD1TLmxvY2FsZSk9PT1udWxsfHxkPT09dm9pZCAwfHwoZj1kLm9wdGlvbnMpPT09bnVsbHx8Zj09PXZvaWQgMD92b2lkIDA6Zi5maXJzdFdlZWtDb250YWluc0RhdGUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOjEpO2lmKCEoUD49MSYmUDw9NykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseSIpO3ZhciBNPXBsKChwPShtPShnPSh5PW49PW51bGw/dm9pZCAwOm4ud2Vla1N0YXJ0c09uKSE9PW51bGwmJnkhPT12b2lkIDA/eTpuPT1udWxsfHwodj1uLmxvY2FsZSk9PT1udWxsfHx2PT09dm9pZCAwfHwoeD12Lm9wdGlvbnMpPT09bnVsbHx8eD09PXZvaWQgMD92b2lkIDA6eC53ZWVrU3RhcnRzT24pIT09bnVsbCYmZyE9PXZvaWQgMD9nOlMud2Vla1N0YXJ0c09uKSE9PW51bGwmJm0hPT12b2lkIDA/bToodz1TLmxvY2FsZSk9PT1udWxsfHx3PT09dm9pZCAwfHwoaz13Lm9wdGlvbnMpPT09bnVsbHx8az09PXZvaWQgMD92b2lkIDA6ay53ZWVrU3RhcnRzT24pIT09bnVsbCYmcCE9PXZvaWQgMD9wOjApO2lmKCEoTT49MCYmTTw9NikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIndlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseSIpO2lmKCFfLmxvY2FsaXplKXRocm93IG5ldyBSYW5nZUVycm9yKCJsb2NhbGUgbXVzdCBjb250YWluIGxvY2FsaXplIHByb3BlcnR5Iik7aWYoIV8uZm9ybWF0TG9uZyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigibG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Iik7dmFyIEE9anIoZSk7aWYoIUNuZShBKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIEk9RW5lKEEpLEw9UG5lKEEsSSkscmU9e2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZTpQLHdlZWtTdGFydHNPbjpNLGxvY2FsZTpfLF9vcmlnaW5hbERhdGU6QX0sVj1FLm1hdGNoKFJyZSkubWFwKGZ1bmN0aW9uKEspe3ZhciBDPUtbMF07aWYoQz09PSJwInx8Qz09PSJQIil7dmFyIFQ9Qm5lW0NdO3JldHVybiBUKEssXy5mb3JtYXRMb25nKX1yZXR1cm4gS30pLmpvaW4oIiIpLm1hdGNoKE1yZSkubWFwKGZ1bmN0aW9uKEspe2lmKEs9PT0iJyciKXJldHVybiInIjt2YXIgQz1LWzBdO2lmKEM9PT0iJyIpcmV0dXJuIERyZShLKTt2YXIgVD16bmVbQ107aWYoVClyZXR1cm4hKG4hPW51bGwmJm4udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSYmV25lKEspJiZIQyhLLHQsU3RyaW5nKGUpKSwhKG4hPW51bGwmJm4udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykmJkhuZShLKSYmSEMoSyx0LFN0cmluZyhlKSksVChMLEssXy5sb2NhbGl6ZSxyZSk7aWYoQy5tYXRjaChBcmUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCIrQysiYCIpO3JldHVybiBLfSkuam9pbigiIik7cmV0dXJuIFZ9ZnVuY3Rpb24gRHJlKGUpe3ZhciB0PWUubWF0Y2goTnJlKTtyZXR1cm4gdD90WzFdLnJlcGxhY2UoJHJlLCInIik6ZX12YXIganQ9ZnVuY3Rpb24oKXtyZXR1cm4ganQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MSxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKyl7bj1hcmd1bWVudHNbcl07Zm9yKHZhciBpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJih0W2ldPW5baV0pfXJldHVybiB0fSxqdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBQQT17ZXhwb3J0czp7fX0sRnU9e307LyoqCiAqIEBsaWNlbnNlIFJlYWN0CiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgV0M7ZnVuY3Rpb24gSXJlKCl7aWYoV0MpcmV0dXJuIEZ1O1dDPTE7dmFyIGU9WCx0PVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxuPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iikscj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG89ZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixpPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gcyhhLGwsYyl7dmFyIHUsZD17fSxmPW51bGwscD1udWxsO2MhPT12b2lkIDAmJihmPSIiK2MpLGwua2V5IT09dm9pZCAwJiYoZj0iIitsLmtleSksbC5yZWYhPT12b2lkIDAmJihwPWwucmVmKTtmb3IodSBpbiBsKXIuY2FsbChsLHUpJiYhaS5oYXNPd25Qcm9wZXJ0eSh1KSYmKGRbdV09bFt1XSk7aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKHUgaW4gbD1hLmRlZmF1bHRQcm9wcyxsKWRbdV09PT12b2lkIDAmJihkW3VdPWxbdV0pO3JldHVybnskJHR5cGVvZjp0LHR5cGU6YSxrZXk6ZixyZWY6cCxwcm9wczpkLF9vd25lcjpvLmN1cnJlbnR9fXJldHVybiBGdS5GcmFnbWVudD1uLEZ1LmpzeD1zLEZ1LmpzeHM9cyxGdX1QQS5leHBvcnRzPUlyZSgpO3ZhciBNQT1QQS5leHBvcnRzO2Z1bmN0aW9uIExyZShlKXtyZXR1cm4gZS5tb2RlPT09Im11bHRpcGxlIn1mdW5jdGlvbiBqcmUoZSl7cmV0dXJuIGUubW9kZT09PSJyYW5nZSJ9ZnVuY3Rpb24genJlKGUpe3JldHVybiBlLm1vZGU9PT0ic2luZ2xlIn12YXIgRnJlPXtyb290OiJyZHAiLG11bHRpcGxlX21vbnRoczoicmRwLW11bHRpcGxlX21vbnRocyIsd2l0aF93ZWVrbnVtYmVyOiJyZHAtd2l0aF93ZWVrbnVtYmVyIix2aGlkZGVuOiJyZHAtdmhpZGRlbiIsYnV0dG9uX3Jlc2V0OiJyZHAtYnV0dG9uX3Jlc2V0IixidXR0b246InJkcC1idXR0b24iLGNhcHRpb246InJkcC1jYXB0aW9uIixjYXB0aW9uX3N0YXJ0OiJyZHAtY2FwdGlvbl9zdGFydCIsY2FwdGlvbl9lbmQ6InJkcC1jYXB0aW9uX2VuZCIsY2FwdGlvbl9iZXR3ZWVuOiJyZHAtY2FwdGlvbl9iZXR3ZWVuIixjYXB0aW9uX2xhYmVsOiJyZHAtY2FwdGlvbl9sYWJlbCIsY2FwdGlvbl9kcm9wZG93bnM6InJkcC1jYXB0aW9uX2Ryb3Bkb3ducyIsZHJvcGRvd246InJkcC1kcm9wZG93biIsZHJvcGRvd25fbW9udGg6InJkcC1kcm9wZG93bl9tb250aCIsZHJvcGRvd25feWVhcjoicmRwLWRyb3Bkb3duX3llYXIiLGRyb3Bkb3duX2ljb246InJkcC1kcm9wZG93bl9pY29uIixtb250aHM6InJkcC1tb250aHMiLG1vbnRoOiJyZHAtbW9udGgiLHRhYmxlOiJyZHAtdGFibGUiLHRib2R5OiJyZHAtdGJvZHkiLHRmb290OiJyZHAtdGZvb3QiLGhlYWQ6InJkcC1oZWFkIixoZWFkX3JvdzoicmRwLWhlYWRfcm93IixoZWFkX2NlbGw6InJkcC1oZWFkX2NlbGwiLG5hdjoicmRwLW5hdiIsbmF2X2J1dHRvbjoicmRwLW5hdl9idXR0b24iLG5hdl9idXR0b25fcHJldmlvdXM6InJkcC1uYXZfYnV0dG9uX3ByZXZpb3VzIixuYXZfYnV0dG9uX25leHQ6InJkcC1uYXZfYnV0dG9uX25leHQiLG5hdl9pY29uOiJyZHAtbmF2X2ljb24iLHJvdzoicmRwLXJvdyIsd2Vla251bWJlcjoicmRwLXdlZWtudW1iZXIiLGNlbGw6InJkcC1jZWxsIixkYXk6InJkcC1kYXkiLGRheV90b2RheToicmRwLWRheV90b2RheSIsZGF5X291dHNpZGU6InJkcC1kYXlfb3V0c2lkZSIsZGF5X3NlbGVjdGVkOiJyZHAtZGF5X3NlbGVjdGVkIixkYXlfZGlzYWJsZWQ6InJkcC1kYXlfZGlzYWJsZWQiLGRheV9oaWRkZW46InJkcC1kYXlfaGlkZGVuIixkYXlfcmFuZ2Vfc3RhcnQ6InJkcC1kYXlfcmFuZ2Vfc3RhcnQiLGRheV9yYW5nZV9lbmQ6InJkcC1kYXlfcmFuZ2VfZW5kIixkYXlfcmFuZ2VfbWlkZGxlOiJyZHAtZGF5X3JhbmdlX21pZGRsZSJ9O2Z1bmN0aW9uIEJyZShlLHQpe3JldHVybiBfbChlLCJMTExMIHkiLHQpfWZ1bmN0aW9uIFVyZShlLHQpe3JldHVybiBfbChlLCJkIix0KX1mdW5jdGlvbiBWcmUoZSx0KXtyZXR1cm4gX2woZSwiTExMTCIsdCl9ZnVuY3Rpb24gSHJlKGUpe3JldHVybiIiLmNvbmNhdChlKX1mdW5jdGlvbiBXcmUoZSx0KXtyZXR1cm4gX2woZSwiY2NjY2NjIix0KX1mdW5jdGlvbiBLcmUoZSx0KXtyZXR1cm4gX2woZSwieXl5eSIsdCl9dmFyIHFyZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxmb3JtYXRDYXB0aW9uOkJyZSxmb3JtYXREYXk6VXJlLGZvcm1hdE1vbnRoQ2FwdGlvbjpWcmUsZm9ybWF0V2Vla051bWJlcjpIcmUsZm9ybWF0V2Vla2RheU5hbWU6V3JlLGZvcm1hdFllYXJDYXB0aW9uOktyZX0pLEdyZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIF9sKGUsImRvIE1NTU0gKEVFRUUpIixuKX0sWXJlPWZ1bmN0aW9uKCl7cmV0dXJuIk1vbnRoOiAifSxYcmU9ZnVuY3Rpb24oKXtyZXR1cm4iR28gdG8gbmV4dCBtb250aCJ9LFpyZT1mdW5jdGlvbigpe3JldHVybiJHbyB0byBwcmV2aW91cyBtb250aCJ9LEpyZT1mdW5jdGlvbihlLHQpe3JldHVybiBfbChlLCJjY2NjIix0KX0sUXJlPWZ1bmN0aW9uKGUpe3JldHVybiJXZWVrIG4uICIuY29uY2F0KGUpfSxlb2U9ZnVuY3Rpb24oKXtyZXR1cm4iWWVhcjogIn0sdG9lPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGxhYmVsRGF5OkdyZSxsYWJlbE1vbnRoRHJvcGRvd246WXJlLGxhYmVsTmV4dDpYcmUsbGFiZWxQcmV2aW91czpacmUsbGFiZWxXZWVrTnVtYmVyOlFyZSxsYWJlbFdlZWtkYXk6SnJlLGxhYmVsWWVhckRyb3Bkb3duOmVvZX0pO2Z1bmN0aW9uIG5vZSgpe3ZhciBlPSJidXR0b25zIix0PUZyZSxuPVRBLHI9e30sbz17fSxpPTEscz17fSxhPW5ldyBEYXRlO3JldHVybntjYXB0aW9uTGF5b3V0OmUsY2xhc3NOYW1lczp0LGZvcm1hdHRlcnM6cXJlLGxhYmVsczp0b2UsbG9jYWxlOm4sbW9kaWZpZXJzQ2xhc3NOYW1lczpyLG1vZGlmaWVyczpvLG51bWJlck9mTW9udGhzOmksc3R5bGVzOnMsdG9kYXk6YSxtb2RlOiJkZWZhdWx0In19ZnVuY3Rpb24gcm9lKGUpe3ZhciB0PWUuZnJvbVllYXIsbj1lLnRvWWVhcixyPWUuZnJvbU1vbnRoLG89ZS50b01vbnRoLGk9ZS5mcm9tRGF0ZSxzPWUudG9EYXRlO3JldHVybiByP2k9VG5lKHIpOnQmJihpPW5ldyBEYXRlKHQsMCwxKSksbz9zPU9uZShvKTpuJiYocz1uZXcgRGF0ZShuLDExLDMxKSkse2Zyb21EYXRlOmk/RkMoaSk6dm9pZCAwLHRvRGF0ZTpzP0ZDKHMpOnZvaWQgMH19dmFyIFJBPWguY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIG9vZShlKXt2YXIgdCxuPWUuaW5pdGlhbFByb3BzLHI9bm9lKCksbz1yb2UobiksaT1vLmZyb21EYXRlLHM9by50b0RhdGUsYT0odD1uLmNhcHRpb25MYXlvdXQpIT09bnVsbCYmdCE9PXZvaWQgMD90OnIuY2FwdGlvbkxheW91dDthIT09ImJ1dHRvbnMiJiYoIWl8fCFzKSYmKGE9ImJ1dHRvbnMiKTt2YXIgbDsoenJlKG4pfHxMcmUobil8fGpyZShuKSkmJihsPW4ub25TZWxlY3QpO3ZhciBjPWp0KGp0KGp0KHt9LHIpLG4pLHtjYXB0aW9uTGF5b3V0OmEsY2xhc3NOYW1lczpqdChqdCh7fSxyLmNsYXNzTmFtZXMpLG4uY2xhc3NOYW1lcyksY29tcG9uZW50czpqdCh7fSxuLmNvbXBvbmVudHMpLGZvcm1hdHRlcnM6anQoanQoe30sci5mb3JtYXR0ZXJzKSxuLmZvcm1hdHRlcnMpLGZyb21EYXRlOmksbGFiZWxzOmp0KGp0KHt9LHIubGFiZWxzKSxuLmxhYmVscyksbW9kZTpuLm1vZGV8fHIubW9kZSxtb2RpZmllcnM6anQoanQoe30sci5tb2RpZmllcnMpLG4ubW9kaWZpZXJzKSxtb2RpZmllcnNDbGFzc05hbWVzOmp0KGp0KHt9LHIubW9kaWZpZXJzQ2xhc3NOYW1lcyksbi5tb2RpZmllcnNDbGFzc05hbWVzKSxvblNlbGVjdDpsLHN0eWxlczpqdChqdCh7fSxyLnN0eWxlcyksbi5zdHlsZXMpLHRvRGF0ZTpzfSk7cmV0dXJuIE1BLmpzeChSQS5Qcm92aWRlcix7dmFsdWU6YyxjaGlsZHJlbjplLmNoaWxkcmVufSl9ZnVuY3Rpb24gaW9lKCl7dmFyIGU9aC51c2VDb250ZXh0KFJBKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVzZURheVBpY2tlciBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRGF5UGlja2VyUHJvdmlkZXIuIik7cmV0dXJuIGV9aC5jcmVhdGVDb250ZXh0KHZvaWQgMCk7aC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsdCl7dmFyIG49aW9lKCkscj1uLmNsYXNzTmFtZXMsbz1uLnN0eWxlcyxpPVtyLmJ1dHRvbl9yZXNldCxyLmJ1dHRvbl07ZS5jbGFzc05hbWUmJmkucHVzaChlLmNsYXNzTmFtZSk7dmFyIHM9aS5qb2luKCIgIiksYT1qdChqdCh7fSxvLmJ1dHRvbl9yZXNldCksby5idXR0b24pO3JldHVybiBlLnN0eWxlJiZPYmplY3QuYXNzaWduKGEsZS5zdHlsZSksTUEuanN4KCJidXR0b24iLGp0KHt9LGUse3JlZjp0LHR5cGU6ImJ1dHRvbiIsY2xhc3NOYW1lOnMsc3R5bGU6YX0pKX0pO2guY3JlYXRlQ29udGV4dCh2b2lkIDApO2guY3JlYXRlQ29udGV4dCh2b2lkIDApO3ZhciBpaTsoZnVuY3Rpb24oZSl7ZS5PdXRzaWRlPSJvdXRzaWRlIixlLkRpc2FibGVkPSJkaXNhYmxlZCIsZS5TZWxlY3RlZD0ic2VsZWN0ZWQiLGUuSGlkZGVuPSJoaWRkZW4iLGUuVG9kYXk9InRvZGF5IixlLlJhbmdlU3RhcnQ9InJhbmdlX3N0YXJ0IixlLlJhbmdlRW5kPSJyYW5nZV9lbmQiLGUuUmFuZ2VNaWRkbGU9InJhbmdlX21pZGRsZSJ9KShpaXx8KGlpPXt9KSk7aWkuU2VsZWN0ZWQ7aWkuRGlzYWJsZWQ7aWkuSGlkZGVuO2lpLlRvZGF5O2lpLlJhbmdlRW5kO2lpLlJhbmdlTWlkZGxlO2lpLlJhbmdlU3RhcnQ7aWkuT3V0c2lkZTtoLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtoLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtoLmNyZWF0ZUNvbnRleHQodm9pZCAwKTt2YXIgc29lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxhb2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixwcD0oZSx0LG4scik9Pntmb3IodmFyIG89cj4xP3ZvaWQgMDpyP2FvZSh0LG4pOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShyP3ModCxuLG8pOnMobykpfHxvKTtyZXR1cm4gciYmbyYmc29lKHQsbixvKSxvfSxsb2U9e2ljb246ImJvbGQiLGxhYmVsOih7dDplfSk9PmUoZV8uTEFCRUwpLGRlc2NyaXB0aW9uOih7dDplfSk9PmUoZV8uREVTQ1JJUFRJT04pfSxobD1jbGFzcyBleHRlbmRzIGNwe2dldCBuYW1lKCl7cmV0dXJuImJvbGQifWNyZWF0ZVRhZ3MoKXtyZXR1cm5bTGUuRm9ybWF0dGluZ01hcmssTGUuRm9udFN0eWxlXX1jcmVhdGVNYXJrU3BlYyhlLHQpe3JldHVybnsuLi50LGF0dHJzOmUuZGVmYXVsdHMoKSxwYXJzZURPTTpbe3RhZzoic3Ryb25nIixnZXRBdHRyczplLnBhcnNlfSx7dGFnOiJiIixnZXRBdHRyczpuPT5uaShuKSYmbi5zdHlsZS5mb250V2VpZ2h0IT09Im5vcm1hbCI/ZS5wYXJzZShuKTohMX0se3N0eWxlOiJmb250LXdlaWdodCIsZ2V0QXR0cnM6bj0+X2UobikmJi9eKGJvbGQoZXIpP3xbNS05XVxkezIsfSkkLy50ZXN0KG4pP251bGw6ITF9LC4uLnQucGFyc2VET00/P1tdXSx0b0RPTTpuPT57Y29uc3R7d2VpZ2h0OnJ9PXRoaXMub3B0aW9ucztyZXR1cm4gcj9bInN0cm9uZyIseyJmb250LXdlaWdodCI6ci50b1N0cmluZygpfSwwXTpbInN0cm9uZyIsZS5kb20obiksMF19fX1jcmVhdGVJbnB1dFJ1bGVzKCl7cmV0dXJuW0ZtKHtyZWdleHA6Lyg/OlwqXCp8X18pKFteKl9dKykoPzpcKlwqfF9fKSQvLHR5cGU6dGhpcy50eXBlLGlnbm9yZVdoaXRlc3BhY2U6ITB9KV19dG9nZ2xlQm9sZChlKXtyZXR1cm4gT2Yoe3R5cGU6dGhpcy50eXBlLHNlbGVjdGlvbjplfSl9c2V0Qm9sZChlKXtyZXR1cm4oe3RyOnQsZGlzcGF0Y2g6bn0pPT57Y29uc3R7ZnJvbTpyLHRvOm99PUpyKGU/P3Quc2VsZWN0aW9uLHQuZG9jKTtyZXR1cm4gbj09bnVsbHx8bih0LmFkZE1hcmsocixvLHRoaXMudHlwZS5jcmVhdGUoKSkpLCEwfX1yZW1vdmVCb2xkKGUpe3JldHVybih7dHI6dCxkaXNwYXRjaDpufSk9Pntjb25zdHtmcm9tOnIsdG86b309SnIoZT8/dC5zZWxlY3Rpb24sdC5kb2MpO3JldHVybiB0LmRvYy5yYW5nZUhhc01hcmsocixvLHRoaXMudHlwZSk/KG49PW51bGx8fG4odC5yZW1vdmVNYXJrKHIsbyx0aGlzLnR5cGUpKSwhMCk6ITF9fXNob3J0Y3V0KGUpe3JldHVybiB0aGlzLnRvZ2dsZUJvbGQoKShlKX19O3BwKFtkZShsb2UpXSxobC5wcm90b3R5cGUsInRvZ2dsZUJvbGQiLDEpO3BwKFtkZSgpXSxobC5wcm90b3R5cGUsInNldEJvbGQiLDEpO3BwKFtkZSgpXSxobC5wcm90b3R5cGUsInJlbW92ZUJvbGQiLDEpO3BwKFtMcih7c2hvcnRjdXQ6WS5Cb2xkLGNvbW1hbmQ6InRvZ2dsZUJvbGQifSldLGhsLnByb3RvdHlwZSwic2hvcnRjdXQiLDEpO2hsPXBwKFtKZSh7ZGVmYXVsdE9wdGlvbnM6e3dlaWdodDp2b2lkIDB9LHN0YXRpY0tleXM6WyJ3ZWlnaHQiXX0pXSxobCk7dmFyIGNvZT1PYmplY3QuZGVmaW5lUHJvcGVydHksdW9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IscXc9KGUsdCxuLHIpPT57Zm9yKHZhciBvPXI+MT92b2lkIDA6cj91b2UodCxuKTp0LGk9ZS5sZW5ndGgtMSxzO2k+PTA7aS0tKShzPWVbaV0pJiYobz0ocj9zKHQsbixvKTpzKG8pKXx8byk7cmV0dXJuIHImJm8mJmNvZSh0LG4sbyksb30sZG9lPXtpY29uOiJpdGFsaWMiLGxhYmVsOih7dDplfSk9PmUodF8uTEFCRUwpLGRlc2NyaXB0aW9uOih7dDplfSk9PmUodF8uREVTQ1JJUFRJT04pfSx6Zj1jbGFzcyBleHRlbmRzIGNwe2dldCBuYW1lKCl7cmV0dXJuIml0YWxpYyJ9Y3JlYXRlVGFncygpe3JldHVybltMZS5Gb250U3R5bGUsTGUuRm9ybWF0dGluZ01hcmtdfWNyZWF0ZU1hcmtTcGVjKGUsdCl7cmV0dXJuey4uLnQsYXR0cnM6ZS5kZWZhdWx0cygpLHBhcnNlRE9NOlt7dGFnOiJpIixnZXRBdHRyczplLnBhcnNlfSx7dGFnOiJlbSIsZ2V0QXR0cnM6ZS5wYXJzZX0se3N0eWxlOiJmb250LXN0eWxlPWl0YWxpYyJ9LC4uLnQucGFyc2VET00/P1tdXSx0b0RPTTpuPT5bImVtIixlLmRvbShuKSwwXX19Y3JlYXRlS2V5bWFwKCl7cmV0dXJueyJNb2QtaSI6T2Yoe3R5cGU6dGhpcy50eXBlfSl9fWNyZWF0ZUlucHV0UnVsZXMoKXtyZXR1cm5bRm0oe3JlZ2V4cDovKD86XnxbXipdKVwqKFteKl0rKVwqJC8sdHlwZTp0aGlzLnR5cGUsaWdub3JlV2hpdGVzcGFjZTohMCx1cGRhdGVDYXB0dXJlZDooe2Z1bGxNYXRjaDplLHN0YXJ0OnR9KT0+ZS5zdGFydHNXaXRoKCIqIik/e306e2Z1bGxNYXRjaDplLnNsaWNlKDEpLHN0YXJ0OnQrMX19KSxGbSh7cmVnZXhwOi8oPzpefFxXKV8oW15fXSspXyQvLHR5cGU6dGhpcy50eXBlLGlnbm9yZVdoaXRlc3BhY2U6ITAsdXBkYXRlQ2FwdHVyZWQ6KHtmdWxsTWF0Y2g6ZSxzdGFydDp0fSk9PmUuc3RhcnRzV2l0aCgiXyIpP3t9OntmdWxsTWF0Y2g6ZS5zbGljZSgxKSxzdGFydDp0KzF9fSldfWNyZWF0ZVBhc3RlUnVsZXMoKXtyZXR1cm5be3R5cGU6Im1hcmsiLG1hcmtUeXBlOnRoaXMudHlwZSxyZWdleHA6Lyg/Ol58XFcpXyhbXl9dKylfL2d9LHt0eXBlOiJtYXJrIixtYXJrVHlwZTp0aGlzLnR5cGUscmVnZXhwOi9cKihbXipdKylcKi9nfV19dG9nZ2xlSXRhbGljKGUpe3JldHVybiBPZih7dHlwZTp0aGlzLnR5cGUsc2VsZWN0aW9uOmV9KX1zaG9ydGN1dChlKXtyZXR1cm4gdGhpcy50b2dnbGVJdGFsaWMoKShlKX19O3F3KFtkZShkb2UpXSx6Zi5wcm90b3R5cGUsInRvZ2dsZUl0YWxpYyIsMSk7cXcoW0xyKHtzaG9ydGN1dDpZLkl0YWxpYyxjb21tYW5kOiJ0b2dnbGVJdGFsaWMifSldLHpmLnByb3RvdHlwZSwic2hvcnRjdXQiLDEpO3pmPXF3KFtKZSh7fSldLHpmKTt2YXIgZm9lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxwb2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixHdz0oZSx0LG4scik9Pntmb3IodmFyIG89cj4xP3ZvaWQgMDpyP3BvZSh0LG4pOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShyP3ModCxuLG8pOnMobykpfHxvKTtyZXR1cm4gciYmbyYmZm9lKHQsbixvKSxvfSxob2U9e2ljb246InN0cmlrZXRocm91Z2giLGxhYmVsOih7dDplfSk9PmUobl8uTEFCRUwpLGRlc2NyaXB0aW9uOih7dDplfSk9PmUobl8uREVTQ1JJUFRJT04pfSxGZj1jbGFzcyBleHRlbmRzIGNwe2dldCBuYW1lKCl7cmV0dXJuInN0cmlrZSJ9Y3JlYXRlVGFncygpe3JldHVybltMZS5Gb250U3R5bGUsTGUuRm9ybWF0dGluZ01hcmtdfWNyZWF0ZU1hcmtTcGVjKGUsdCl7cmV0dXJuey4uLnQsYXR0cnM6ZS5kZWZhdWx0cygpLHBhcnNlRE9NOlt7dGFnOiJzIixnZXRBdHRyczplLnBhcnNlfSx7dGFnOiJkZWwiLGdldEF0dHJzOmUucGFyc2V9LHt0YWc6InN0cmlrZSIsZ2V0QXR0cnM6ZS5wYXJzZX0se3N0eWxlOiJ0ZXh0LWRlY29yYXRpb24iLGdldEF0dHJzOm49Pm49PT0ibGluZS10aHJvdWdoIj97fTohMX0sLi4udC5wYXJzZURPTT8/W11dLHRvRE9NOm49PlsicyIsZS5kb20obiksMF19fXRvZ2dsZVN0cmlrZSgpe3JldHVybiBPZih7dHlwZTp0aGlzLnR5cGV9KX1zaG9ydGN1dChlKXtyZXR1cm4gdGhpcy50b2dnbGVTdHJpa2UoKShlKX1jcmVhdGVJbnB1dFJ1bGVzKCl7cmV0dXJuW0ZtKHtyZWdleHA6L34oW15+XSspfiQvLHR5cGU6dGhpcy50eXBlLGlnbm9yZVdoaXRlc3BhY2U6ITB9KV19Y3JlYXRlUGFzdGVSdWxlcygpe3JldHVyblt7cmVnZXhwOi9+KFtefl0rKX4vZyx0eXBlOiJtYXJrIixtYXJrVHlwZTp0aGlzLnR5cGV9XX19O0d3KFtkZShob2UpXSxGZi5wcm90b3R5cGUsInRvZ2dsZVN0cmlrZSIsMSk7R3coW0xyKHtzaG9ydGN1dDpZLlN0cmlrZSxjb21tYW5kOiJ0b2dnbGVTdHJpa2UifSldLEZmLnByb3RvdHlwZSwic2hvcnRjdXQiLDEpO0ZmPUd3KFtKZSh7fSldLEZmKTt2YXIgTkE9KGUsdCxuKT0+e2lmKCF0LmhhcyhlKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCAiK24pfSxRZT0oZSx0LG4pPT4oTkEoZSx0LCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZCIpLG4/bi5jYWxsKGUpOnQuZ2V0KGUpKSxRbD0oZSx0LG4pPT57aWYodC5oYXMoZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik7dCBpbnN0YW5jZW9mIFdlYWtTZXQ/dC5hZGQoZSk6dC5zZXQoZSxuKX0sZ3M9KGUsdCxuLHIpPT4oTkEoZSx0LCJ3cml0ZSB0byBwcml2YXRlIGZpZWxkIikscj9yLmNhbGwoZSxuKTp0LnNldChlLG4pLG4pLG1vZT0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOCAxOCIgd2lkdGg9IjIyIiBoZWlnaHQ9IjIyIiBmaWxsPSJyZ2JhKDAsIDAsIDAsIDAuNjUpIiBzdHJva2U9InJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSIgdHJhbnNmb3JtPSJyb3RhdGUoOTApIiB4bWxuczp2PSJodHRwczovL3ZlY3RhLmlvL25hbm8iPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE0IDBhMiAyIDAgMCAwLTIgMnYxMEgyYTIgMiAwIDEgMCAwIDRoMTJhMiAyIDAgMCAwIDItMlYyYTIgMiAwIDAgMC0yLTJ6Ii8+PC9zdmc+Jyxnb2U9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0icmdiYSgwLCAwLCAwLCAwLjY1KSIgc3Ryb2tlPSJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkiIHRyYW5zZm9ybT0ibWF0cml4KDAgMSAxIDAgMCAwKSIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCAwYTIgMiAwIDAgMC0yIDJ2MTBIMmEyIDIgMCAxIDAgMCA0aDEyYTIgMiAwIDAgMCAyLTJWMmEyIDIgMCAwIDAtMi0yeiIvPjwvc3ZnPicsdm9lPWVuY29kZVVSSUNvbXBvbmVudChtb2UpLHlvZT1lbmNvZGVVUklDb21wb25lbnQoZ29lKSxucix4b2U9Y2xhc3N7Y29uc3RydWN0b3IoZSl7UWwodGhpcyxucix2b2lkIDApO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmRvbT10LGdzKHRoaXMsbnIsbiksdGhpcy50eXBlPWUsdGhpcy5jcmVhdGVIYW5kbGUoZSl9Y3JlYXRlSGFuZGxlKGUpe3N3aXRjaChObih0aGlzLmRvbSx7cG9zaXRpb246ImFic29sdXRlIixwb2ludGVyRXZlbnRzOiJhdXRvIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHpJbmRleDoiMTAwIn0pLE5uKFFlKHRoaXMsbnIpLHtvcGFjaXR5OiIwIix0cmFuc2l0aW9uOiJvcGFjaXR5IDMwMG1zIGVhc2UtaW4gMHMifSksUWUodGhpcyxucikuZGF0YXNldC5kcmFnZ2luZz0iIixlKXtjYXNlIDA6Tm4odGhpcy5kb20se3JpZ2h0OiIwcHgiLHRvcDoiMHB4IixoZWlnaHQ6IjEwMCUiLHdpZHRoOiIxNXB4IixjdXJzb3I6ImNvbC1yZXNpemUifSksTm4oUWUodGhpcyxucikse3dpZHRoOiIgNHB4IixoZWlnaHQ6IjM2cHgiLG1heEhlaWdodDoiNTAlIixib3hTaXppbmc6ImNvbnRlbnQtYm94IixiYWNrZ3JvdW5kOiJyZ2JhKDAsIDAsIDAsIDAuNjUpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkiLGJvcmRlclJhZGl1czoiNnB4In0pO2JyZWFrO2Nhc2UgMTpObih0aGlzLmRvbSx7bGVmdDoiMHB4Iix0b3A6IjBweCIsaGVpZ2h0OiIxMDAlIix3aWR0aDoiMTVweCIsY3Vyc29yOiJjb2wtcmVzaXplIn0pLE5uKFFlKHRoaXMsbnIpLHt3aWR0aDoiIDRweCIsaGVpZ2h0OiIzNnB4IixtYXhIZWlnaHQ6IjUwJSIsYm94U2l6aW5nOiJjb250ZW50LWJveCIsYmFja2dyb3VuZDoicmdiYSgwLCAwLCAwLCAwLjY1KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpIixib3JkZXJSYWRpdXM6IjZweCJ9KTticmVhaztjYXNlIDI6Tm4odGhpcy5kb20se2JvdHRvbToiMHB4Iix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxNHB4IixjdXJzb3I6InJvdy1yZXNpemUifSksTm4oUWUodGhpcyxucikse3dpZHRoOiIgNDJweCIsaGVpZ2h0OiI0cHgiLGJveFNpemluZzoiY29udGVudC1ib3giLG1heFdpZHRoOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMCwgMCwgMCwgMC42NSkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSIsYm9yZGVyUmFkaXVzOiI2cHgifSk7YnJlYWs7Y2FzZSAzOk5uKHRoaXMuZG9tLHtyaWdodDoiLTFweCIsYm90dG9tOiItMnB4Iix3aWR0aDoiMzBweCIsaGVpZ2h0OiIzMHB4IixjdXJzb3I6Im53c2UtcmVzaXplIix6SW5kZXg6IjEwMSJ9KSxObihRZSh0aGlzLG5yKSx7aGVpZ2h0OiIyMnB4Iix3aWR0aDoiMjJweCIsYmFja2dyb3VuZFJlcGVhdDoibm8tcmVwZWF0IixiYWNrZ3JvdW5kSW1hZ2U6YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCR7eW9lfSIpIGB9KTticmVhaztjYXNlIDQ6Tm4odGhpcy5kb20se2xlZnQ6Ii0xcHgiLGJvdHRvbToiLTJweCIsd2lkdGg6IjMwcHgiLGhlaWdodDoiMzBweCIsY3Vyc29yOiJuZXN3LXJlc2l6ZSIsekluZGV4OiIxMDEifSksTm4oUWUodGhpcyxucikse2hlaWdodDoiMjJweCIsd2lkdGg6IjIycHgiLGJhY2tncm91bmRSZXBlYXQ6Im5vLXJlcGVhdCIsYmFja2dyb3VuZEltYWdlOmB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwke3ZvZX0iKSBgfSk7YnJlYWt9dGhpcy5kb20uYXBwZW5kKFFlKHRoaXMsbnIpKX1zZXRIYW5kbGVWaXNpYmlsaXR5KGUpe2NvbnN0IHQ9ZXx8ISFRZSh0aGlzLG5yKS5kYXRhc2V0LmRyYWdnaW5nO1FlKHRoaXMsbnIpLnN0eWxlLm9wYWNpdHk9dD8iMSI6IjAifWRhdGFTZXREcmFnZ2luZyhlKXtRZSh0aGlzLG5yKS5kYXRhc2V0LmRyYWdnaW5nPWU/InRydWUiOiIifX07bnI9bmV3IFdlYWtNYXA7dmFyIGVoPTUwLCRBPShlPT4oZVtlLkZpeGVkPTBdPSJGaXhlZCIsZVtlLkZsZXhpYmxlPTFdPSJGbGV4aWJsZSIsZSkpKCRBfHx7fSksRWEsX2EsQ2EsZ2ksT2EsYm9lPWNsYXNze2NvbnN0cnVjdG9yKHtub2RlOmUsdmlldzp0LGdldFBvczpuLGFzcGVjdFJhdGlvOnI9MCxvcHRpb25zOm8saW5pdGlhbFNpemU6aX0pe1FsKHRoaXMsRWEsdm9pZCAwKSxRbCh0aGlzLF9hLHZvaWQgMCksUWwodGhpcyxDYSxbXSksUWwodGhpcyxnaSx2b2lkIDApLFFsKHRoaXMsT2Esdm9pZCAwKTtjb25zdCBzPXRoaXMuY3JlYXRlV3JhcHBlcihlLGkpLGE9dGhpcy5jcmVhdGVFbGVtZW50KHtub2RlOmUsdmlldzp0LGdldFBvczpuLG9wdGlvbnM6b30pLGM9KHI9PT0xP1swLDEsMiwzLDRdOlswLDFdKS5tYXAoZj0+bmV3IHhvZShmKSk7Zm9yKGNvbnN0IGYgb2YgYyl7Y29uc3QgcD1tPT57dGhpcy5zdGFydFJlc2l6aW5nKG0sdCxuLGYpfTtmLmRvbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHApLFFlKHRoaXMsQ2EpLnB1c2goKCk9PmYuZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIscCkpLHMuYXBwZW5kKGYuZG9tKX1jb25zdCB1PSgpPT57Yy5mb3JFYWNoKGY9PmYuc2V0SGFuZGxlVmlzaWJpbGl0eSghMCkpfSxkPSgpPT57Yy5mb3JFYWNoKGY9PmYuc2V0SGFuZGxlVmlzaWJpbGl0eSghMSkpfTtzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdSkscy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsZCksUWUodGhpcyxDYSkucHVzaCgoKT0+cy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLCgpPT5zLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixkKSkscy5hcHBlbmQoYSksdGhpcy5kb209cyxncyh0aGlzLF9hLGUpLGdzKHRoaXMsRWEsYSksdGhpcy5hc3BlY3RSYXRpbz1yfWNyZWF0ZVdyYXBwZXIoZSx0KXtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBuLmNsYXNzTGlzdC5hZGQoInJlbWlycm9yLXJlc2l6YWJsZS12aWV3Iiksbi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQ/Tm4obix7d2lkdGg6S0ModC53aWR0aCksYXNwZWN0UmF0aW86YCR7dC53aWR0aH0gLyAke3QuaGVpZ2h0fWB9KTpObihuLHt3aWR0aDpLQyhlLmF0dHJzLndpZHRoKSxhc3BlY3RSYXRpbzpgJHtlLmF0dHJzLndpZHRofSAvICR7ZS5hdHRycy5oZWlnaHR9YH0pLE5uKG4se21heFdpZHRoOiIxMDAlIixtaW5XaWR0aDpgJHtlaH1weGAsdmVydGljYWxBbGlnbjoiYm90dG9tIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGxpbmVIZWlnaHQ6IjAiLHRyYW5zaXRpb246IndpZHRoIDAuMTVzIGVhc2Utb3V0LCBoZWlnaHQgMC4xNXMgZWFzZS1vdXQifSksbn1zdGFydFJlc2l6aW5nKGUsdCxuLHIpe3ZhciBvLGk7ZS5wcmV2ZW50RGVmYXVsdCgpLHIuZGF0YVNldERyYWdnaW5nKCEwKSxRZSh0aGlzLEVhKS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIjtjb25zdCBzPWUucGFnZVgsYT1lLnBhZ2VZLGw9KChvPVFlKHRoaXMsRWEpKT09bnVsbD92b2lkIDA6by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCl8fDAsYz0oKGk9UWUodGhpcyxFYSkpPT1udWxsP3ZvaWQgMDppLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCl8fDAsdT1PeCgxMDAsITEsZj0+e2NvbnN0IHA9Zi5wYWdlWCxtPWYucGFnZVksZz1wLXMseT1tLWE7bGV0IHY9bnVsbCx4PW51bGw7aWYodGhpcy5hc3BlY3RSYXRpbz09PTAmJmwmJmMpc3dpdGNoKHIudHlwZSl7Y2FzZSAwOmNhc2UgMzp2PWwrZyx4PWMvbCp2O2JyZWFrO2Nhc2UgMTpjYXNlIDQ6dj1sLWcseD1jL2wqdjticmVhaztjYXNlIDI6eD1jK3ksdj1sL2MqeDticmVha31lbHNlIGlmKHRoaXMuYXNwZWN0UmF0aW89PT0xKXN3aXRjaChyLnR5cGUpe2Nhc2UgMDp2PWwrZzticmVhaztjYXNlIDE6dj1sLWc7YnJlYWs7Y2FzZSAyOng9Yyt5O2JyZWFrO2Nhc2UgMzp2PWwrZyx4PWMreTticmVhaztjYXNlIDQ6dj1sLWcseD1jK3k7YnJlYWt9dHlwZW9mIHY9PSJudW1iZXIiJiZ2PGVoJiYodGhpcy5hc3BlY3RSYXRpbz09PTAmJmwmJmM/KHY9ZWgseD1jL2wqdik6dGhpcy5hc3BlY3RSYXRpbz09PTEmJih2PWVoKSksdiYmKGdzKHRoaXMsZ2ksTWF0aC5yb3VuZCh2KSksdGhpcy5kb20uc3R5bGUud2lkdGg9YCR7UWUodGhpcyxnaSl9cHhgKSx4JiZncyh0aGlzLE9hLE1hdGgucm91bmQoeCkpLCh2fHx4KSYmKHRoaXMuZG9tLnN0eWxlLmFzcGVjdFJhdGlvPWAke1FlKHRoaXMsZ2kpfSAvICR7UWUodGhpcyxPYSl9YCl9KSxkPWY9PntmLnByZXZlbnREZWZhdWx0KCksci5kYXRhU2V0RHJhZ2dpbmcoITEpLHIuc2V0SGFuZGxlVmlzaWJpbGl0eSghMSksUWUodGhpcyxFYSkuc3R5bGUucG9pbnRlckV2ZW50cz0iYXV0byIsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix1KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixkKTtjb25zdCBwPW4oKSxtPXQuc3RhdGUudHIuc2V0Tm9kZU1hcmt1cChwLHZvaWQgMCx7Li4uUWUodGhpcyxfYSkuYXR0cnMsd2lkdGg6UWUodGhpcyxnaSksaGVpZ2h0OlFlKHRoaXMsT2EpfSk7dC5kaXNwYXRjaChtKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix1KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixkKSxRZSh0aGlzLENhKS5wdXNoKCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHUpKSxRZSh0aGlzLENhKS5wdXNoKCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixkKSl9dXBkYXRlKGUpe3JldHVybiBlLnR5cGUhPT1RZSh0aGlzLF9hKS50eXBlfHx0aGlzLmFzcGVjdFJhdGlvPT09MCYmZS5hdHRycy53aWR0aCYmZS5hdHRycy53aWR0aCE9PVFlKHRoaXMsZ2kpfHx0aGlzLmFzcGVjdFJhdGlvPT09MSYmZS5hdHRycy53aWR0aCYmZS5hdHRycy5oZWlnaHQmJmUuYXR0cnMud2lkdGghPT1RZSh0aGlzLGdpKSYmZS5hdHRycy5oZWlnaHQhPT1RZSh0aGlzLE9hKXx8IXdvZShRZSh0aGlzLF9hKSxlLFsid2lkdGgiLCJoZWlnaHQiXSk/ITE6KGdzKHRoaXMsX2EsZSksZ3ModGhpcyxnaSxlLmF0dHJzLndpZHRoKSxncyh0aGlzLE9hLGUuYXR0cnMuaGVpZ2h0KSwhMCl9ZGVzdHJveSgpe1FlKHRoaXMsQ2EpLmZvckVhY2goZT0+ZSgpKX19O0VhPW5ldyBXZWFrTWFwO19hPW5ldyBXZWFrTWFwO0NhPW5ldyBXZWFrTWFwO2dpPW5ldyBXZWFrTWFwO09hPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHdvZShlLHQsbil7cmV0dXJuIGU9PT10fHxTb2UoZSx0LG4pJiZlLmNvbnRlbnQuZXEodC5jb250ZW50KX1mdW5jdGlvbiBTb2UoZSx0LG4pe2NvbnN0IHI9ZS5hdHRycyxvPXQuYXR0cnMsaT17fTtmb3IoY29uc3QgYSBvZiBuKWlbYV09bnVsbDtlLmF0dHJzPXsuLi5yLC4uLml9LHQuYXR0cnM9ey4uLm8sLi4uaX07Y29uc3Qgcz1lLnNhbWVNYXJrdXAodCk7cmV0dXJuIGUuYXR0cnM9cix0LmF0dHJzPW8sc31mdW5jdGlvbiBLQyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJudW1iZXIiP2Ake2V9cHhgOmV8fHZvaWQgMH12YXIga29lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxFb2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixZdz0oZSx0LG4scik9Pntmb3IodmFyIG89cj4xP3ZvaWQgMDpyP0VvZSh0LG4pOnQsaT1lLmxlbmd0aC0xLHM7aT49MDtpLS0pKHM9ZVtpXSkmJihvPShyP3ModCxuLG8pOnMobykpfHxvKTtyZXR1cm4gciYmbyYma29lKHQsbixvKSxvfSxfb2U9Y2xhc3MgZXh0ZW5kcyBib2V7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKHtub2RlOmUsdmlldzp0LGdldFBvczpuLGFzcGVjdFJhdGlvOiRBLkZpeGVkfSl9Y3JlYXRlRWxlbWVudCh7bm9kZTplfSl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoInNyYyIsZS5hdHRycy5zcmMpLE5uKHQse3dpZHRoOiIxMDAlIixtaW5XaWR0aDoiNTBweCIsb2JqZWN0Rml0OiJjb250YWluIn0pLHR9fSxCZj1jbGFzcyBleHRlbmRzIG9ve2dldCBuYW1lKCl7cmV0dXJuImltYWdlIn1jcmVhdGVUYWdzKCl7cmV0dXJuW0xlLklubGluZU5vZGUsTGUuTWVkaWFdfWNyZWF0ZU5vZGVTcGVjKGUsdCl7Y29uc3R7cHJlZmVyUGFzdGVkVGV4dENvbnRlbnQ6bn09dGhpcy5vcHRpb25zO3JldHVybntpbmxpbmU6ITAsZHJhZ2dhYmxlOiEwLHNlbGVjdGFibGU6ITEsLi4udCxhdHRyczp7Li4uZS5kZWZhdWx0cygpLGFsdDp7ZGVmYXVsdDoiIn0sY3JvcDp7ZGVmYXVsdDpudWxsfSxoZWlnaHQ6e2RlZmF1bHQ6bnVsbH0sd2lkdGg6e2RlZmF1bHQ6bnVsbH0scm90YXRlOntkZWZhdWx0Om51bGx9LHNyYzp7ZGVmYXVsdDpudWxsfSx0aXRsZTp7ZGVmYXVsdDoiIn0sZmlsZU5hbWU6e2RlZmF1bHQ6bnVsbH0scmVzaXphYmxlOntkZWZhdWx0OiExfX0scGFyc2VET006W3t0YWc6ImltZ1tzcmNdIixnZXRBdHRyczpyPT57dmFyIG87aWYobmkocikpe2NvbnN0IGk9T29lKHtlbGVtZW50OnIscGFyc2U6ZS5wYXJzZX0pO3JldHVybiBuJiYoKG89aS5zcmMpIT1udWxsJiZvLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpPyExOml9cmV0dXJue319fSwuLi50LnBhcnNlRE9NPz9bXV0sdG9ET006cj0+e2NvbnN0IG89UE4oci5hdHRycyxlKTtyZXR1cm5bImltZyIsey4uLmUuZG9tKHIpLC4uLm99XX19fWluc2VydEltYWdlKGUsdCl7cmV0dXJuKHt0cjpuLGRpc3BhdGNoOnJ9KT0+e2NvbnN0e2Zyb206byx0bzppfT1Kcih0Pz9uLnNlbGVjdGlvbixuLmRvYykscz10aGlzLnR5cGUuY3JlYXRlKGUpO3JldHVybiByPT1udWxsfHxyKG4ucmVwbGFjZVJhbmdlV2l0aChvLGkscykpLCEwfX11cGxvYWRJbWFnZShlLHQpe2NvbnN0e3VwZGF0ZVBsYWNlaG9sZGVyOm4sZGVzdHJveVBsYWNlaG9sZGVyOnIsY3JlYXRlUGxhY2Vob2xkZXI6b309dGhpcy5vcHRpb25zO3JldHVybiBpPT57Y29uc3R7dHI6c309aTtsZXQgYT1zLnNlbGVjdGlvbi5mcm9tO3JldHVybiB0aGlzLnN0b3JlLmNyZWF0ZVBsYWNlaG9sZGVyQ29tbWFuZCh7cHJvbWlzZTplLHBsYWNlaG9sZGVyOnt0eXBlOiJ3aWRnZXQiLGdldCBwb3MoKXtyZXR1cm4gYX0sY3JlYXRlRWxlbWVudDoobCxjKT0+e2NvbnN0IHU9byhsLGMpO3JldHVybiB0PT1udWxsfHx0KHUpLHV9LG9uVXBkYXRlOihsLGMsdSxkKT0+e24obCxjLHUsZCl9LG9uRGVzdHJveToobCxjKT0+e3IobCxjKX19LG9uU3VjY2VzczoobCxjLHUpPT50aGlzLmluc2VydEltYWdlKGwsYykodSl9KS52YWxpZGF0ZSgoe3RyOmwsZGlzcGF0Y2g6Y30pPT57Y29uc3QgdT1rUihsLmRvYyxhLHRoaXMudHlwZSk7cmV0dXJuIHU9PW51bGw/ITE6KGE9dSxsLnNlbGVjdGlvbi5lbXB0eXx8Yz09bnVsbHx8YyhsLmRlbGV0ZVNlbGVjdGlvbigpKSwhMCl9LCJ1bnNoaWZ0IikuZ2VuZXJhdGVDb21tYW5kKCkoaSl9fWZpbGVVcGxvYWRGaWxlSGFuZGxlcihlLHQsbil7dmFyIHI7Y29uc3R7cHJlZmVyUGFzdGVkVGV4dENvbnRlbnQ6byx1cGxvYWRIYW5kbGVyOml9PXRoaXMub3B0aW9ucztpZihvJiZNb2UodCkmJigocj10LmNsaXBib2FyZERhdGEpIT1udWxsJiZyLmdldERhdGEoInRleHQvcGxhaW4iKSkpcmV0dXJuITE7Y29uc3R7Y29tbWFuZHM6cyxjaGFpbjphfT10aGlzLnN0b3JlLGw9ZS5tYXAoKHUsZCk9Pih7ZmlsZTp1LHByb2dyZXNzOmY9PntzLnVwZGF0ZVBsYWNlaG9sZGVyKGNbZF0sZil9fSkpLGM9aShsKTtNcihuKSYmYS5zZWxlY3RUZXh0KG4pO2Zvcihjb25zdCB1IG9mIGMpYS51cGxvYWRJbWFnZSh1KTtyZXR1cm4gYS5ydW4oKSwhMH1jcmVhdGVQYXN0ZVJ1bGVzKCl7cmV0dXJuW3t0eXBlOiJmaWxlIixyZWdleHA6L2ltYWdlL2ksZmlsZUhhbmRsZXI6ZT0+e2NvbnN0IHQ9ZS50eXBlPT09ImRyb3AiP2UucG9zOnZvaWQgMDtyZXR1cm4gdGhpcy5maWxlVXBsb2FkRmlsZUhhbmRsZXIoZS5maWxlcyxlLmV2ZW50LHQpfX1dfWNyZWF0ZU5vZGVWaWV3cygpe3JldHVybiB0aGlzLm9wdGlvbnMuZW5hYmxlUmVzaXppbmc/KGUsdCxuKT0+bmV3IF9vZShlLHQsbik6e319fTtZdyhbZGUoKV0sQmYucHJvdG90eXBlLCJpbnNlcnRJbWFnZSIsMSk7WXcoW2RlKCldLEJmLnByb3RvdHlwZSwidXBsb2FkSW1hZ2UiLDEpO0JmPVl3KFtKZSh7ZGVmYXVsdE9wdGlvbnM6e2NyZWF0ZVBsYWNlaG9sZGVyOlRvZSx1cGRhdGVQbGFjZWhvbGRlcjooKT0+e30sZGVzdHJveVBsYWNlaG9sZGVyOigpPT57fSx1cGxvYWRIYW5kbGVyOlBvZSxlbmFibGVSZXNpemluZzohMSxwcmVmZXJQYXN0ZWRUZXh0Q29udGVudDohMH19KV0sQmYpO2Z1bmN0aW9uIENvZShlKXtsZXR7d2lkdGg6dCxoZWlnaHQ6bn09ZS5zdHlsZTtyZXR1cm4gdD10fHxlLmdldEF0dHJpYnV0ZSgid2lkdGgiKXx8IiIsbj1ufHxlLmdldEF0dHJpYnV0ZSgiaGVpZ2h0Iil8fCIiLHt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiBPb2Uoe2VsZW1lbnQ6ZSxwYXJzZTp0fSl7Y29uc3R7d2lkdGg6bixoZWlnaHQ6cn09Q29lKGUpO3JldHVybnsuLi50KGUpLGFsdDplLmdldEF0dHJpYnV0ZSgiYWx0Iik/PyIiLGhlaWdodDpOdW1iZXIucGFyc2VJbnQocnx8IjAiLDEwKXx8bnVsbCxzcmM6ZS5nZXRBdHRyaWJ1dGUoInNyYyIpPz9udWxsLHRpdGxlOmUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpPz8iIix3aWR0aDpOdW1iZXIucGFyc2VJbnQobnx8IjAiLDEwKXx8bnVsbCxmaWxlTmFtZTplLmdldEF0dHJpYnV0ZSgiZGF0YS1maWxlLW5hbWUiKT8/bnVsbH19ZnVuY3Rpb24gVG9lKGUsdCl7Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gbi5jbGFzc0xpc3QuYWRkKGhaLklNQUdFX0xPQURFUiksbn1mdW5jdGlvbiBQb2UoZSl7YmUoZS5sZW5ndGg+MCx7Y29kZTpxLkVYVEVOU0lPTixtZXNzYWdlOiJUaGUgdXBsb2FkIGhhbmRsZXIgd2FzIGFwcGxpZWQgZm9yIHRoZSBpbWFnZSBleHRlbnNpb24gd2l0aG91dCBhbnkgdmFsaWQgZmlsZXMifSk7bGV0IHQ9MDtjb25zdCBuPVtdO2Zvcihjb25zdHtmaWxlOnIscHJvZ3Jlc3M6b31vZiBlKW4ucHVzaCgoKT0+bmV3IFByb21pc2UoaT0+e2NvbnN0IHM9bmV3IEZpbGVSZWFkZXI7cy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixhPT57dmFyIGw7dCs9MSxvKHQvZS5sZW5ndGgpLGkoe3NyYzoobD1hLnRhcmdldCk9PW51bGw/dm9pZCAwOmwucmVzdWx0LGZpbGVOYW1lOnIubmFtZX0pfSx7b25jZTohMH0pLHMucmVhZEFzRGF0YVVSTChyKX0pKTtyZXR1cm4gbn1mdW5jdGlvbiBNb2UoZSl7cmV0dXJuIGUuY2xpcGJvYXJkRGF0YSE9PXZvaWQgMH1mdW5jdGlvbiBSb2UoZT17fSl7cmV0dXJuIG5ldyBIaSh7dmlldyh0KXtyZXR1cm4gbmV3IE5vZSh0LGUpfX0pfWNsYXNzIE5vZXtjb25zdHJ1Y3Rvcih0LG4pe3ZhciByO3RoaXMuZWRpdG9yVmlldz10LHRoaXMuY3Vyc29yUG9zPW51bGwsdGhpcy5lbGVtZW50PW51bGwsdGhpcy50aW1lb3V0PS0xLHRoaXMud2lkdGg9KHI9bi53aWR0aCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MSx0aGlzLmNvbG9yPW4uY29sb3I9PT0hMT92b2lkIDA6bi5jb2xvcnx8ImJsYWNrIix0aGlzLmNsYXNzPW4uY2xhc3MsdGhpcy5oYW5kbGVycz1bImRyYWdvdmVyIiwiZHJhZ2VuZCIsImRyb3AiLCJkcmFnbGVhdmUiXS5tYXAobz0+e2xldCBpPXM9Pnt0aGlzW29dKHMpfTtyZXR1cm4gdC5kb20uYWRkRXZlbnRMaXN0ZW5lcihvLGkpLHtuYW1lOm8saGFuZGxlcjppfX0pfWRlc3Ryb3koKXt0aGlzLmhhbmRsZXJzLmZvckVhY2goKHtuYW1lOnQsaGFuZGxlcjpufSk9PnRoaXMuZWRpdG9yVmlldy5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pKX11cGRhdGUodCxuKXt0aGlzLmN1cnNvclBvcyE9bnVsbCYmbi5kb2MhPXQuc3RhdGUuZG9jJiYodGhpcy5jdXJzb3JQb3M+dC5zdGF0ZS5kb2MuY29udGVudC5zaXplP3RoaXMuc2V0Q3Vyc29yKG51bGwpOnRoaXMudXBkYXRlT3ZlcmxheSgpKX1zZXRDdXJzb3IodCl7dCE9dGhpcy5jdXJzb3JQb3MmJih0aGlzLmN1cnNvclBvcz10LHQ9PW51bGw/KHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCksdGhpcy5lbGVtZW50PW51bGwpOnRoaXMudXBkYXRlT3ZlcmxheSgpKX11cGRhdGVPdmVybGF5KCl7bGV0IHQ9dGhpcy5lZGl0b3JWaWV3LnN0YXRlLmRvYy5yZXNvbHZlKHRoaXMuY3Vyc29yUG9zKSxuPSF0LnBhcmVudC5pbmxpbmVDb250ZW50LHI7aWYobil7bGV0IGE9dC5ub2RlQmVmb3JlLGw9dC5ub2RlQWZ0ZXI7aWYoYXx8bCl7bGV0IGM9dGhpcy5lZGl0b3JWaWV3Lm5vZGVET00odGhpcy5jdXJzb3JQb3MtKGE/YS5ub2RlU2l6ZTowKSk7aWYoYyl7bGV0IHU9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWE/dS5ib3R0b206dS50b3A7YSYmbCYmKGQ9KGQrdGhpcy5lZGl0b3JWaWV3Lm5vZGVET00odGhpcy5jdXJzb3JQb3MpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCkvMikscj17bGVmdDp1LmxlZnQscmlnaHQ6dS5yaWdodCx0b3A6ZC10aGlzLndpZHRoLzIsYm90dG9tOmQrdGhpcy53aWR0aC8yfX19fWlmKCFyKXtsZXQgYT10aGlzLmVkaXRvclZpZXcuY29vcmRzQXRQb3ModGhpcy5jdXJzb3JQb3MpO3I9e2xlZnQ6YS5sZWZ0LXRoaXMud2lkdGgvMixyaWdodDphLmxlZnQrdGhpcy53aWR0aC8yLHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWxldCBvPXRoaXMuZWRpdG9yVmlldy5kb20ub2Zmc2V0UGFyZW50O3RoaXMuZWxlbWVudHx8KHRoaXMuZWxlbWVudD1vLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSx0aGlzLmNsYXNzJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZT10aGlzLmNsYXNzKSx0aGlzLmVsZW1lbnQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiA1MDsgcG9pbnRlci1ldmVudHM6IG5vbmU7Iix0aGlzLmNvbG9yJiYodGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yKSksdGhpcy5lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoInByb3NlbWlycm9yLWRyb3BjdXJzb3ItYmxvY2siLG4pLHRoaXMuZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCJwcm9zZW1pcnJvci1kcm9wY3Vyc29yLWlubGluZSIsIW4pO2xldCBpLHM7aWYoIW98fG89PWRvY3VtZW50LmJvZHkmJmdldENvbXB1dGVkU3R5bGUobykucG9zaXRpb249PSJzdGF0aWMiKWk9LXBhZ2VYT2Zmc2V0LHM9LXBhZ2VZT2Zmc2V0O2Vsc2V7bGV0IGE9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpPWEubGVmdC1vLnNjcm9sbExlZnQscz1hLnRvcC1vLnNjcm9sbFRvcH10aGlzLmVsZW1lbnQuc3R5bGUubGVmdD1yLmxlZnQtaSsicHgiLHRoaXMuZWxlbWVudC5zdHlsZS50b3A9ci50b3AtcysicHgiLHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aD1yLnJpZ2h0LXIubGVmdCsicHgiLHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQ9ci5ib3R0b20tci50b3ArInB4In1zY2hlZHVsZVJlbW92YWwodCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuc2V0Q3Vyc29yKG51bGwpLHQpfWRyYWdvdmVyKHQpe2lmKCF0aGlzLmVkaXRvclZpZXcuZWRpdGFibGUpcmV0dXJuO2xldCBuPXRoaXMuZWRpdG9yVmlldy5wb3NBdENvb3Jkcyh7bGVmdDp0LmNsaWVudFgsdG9wOnQuY2xpZW50WX0pLHI9biYmbi5pbnNpZGU+PTAmJnRoaXMuZWRpdG9yVmlldy5zdGF0ZS5kb2Mubm9kZUF0KG4uaW5zaWRlKSxvPXImJnIudHlwZS5zcGVjLmRpc2FibGVEcm9wQ3Vyc29yLGk9dHlwZW9mIG89PSJmdW5jdGlvbiI/byh0aGlzLmVkaXRvclZpZXcsbix0KTpvO2lmKG4mJiFpKXtsZXQgcz1uLnBvcztpZih0aGlzLmVkaXRvclZpZXcuZHJhZ2dpbmcmJnRoaXMuZWRpdG9yVmlldy5kcmFnZ2luZy5zbGljZSl7bGV0IGE9RVIodGhpcy5lZGl0b3JWaWV3LnN0YXRlLmRvYyxzLHRoaXMuZWRpdG9yVmlldy5kcmFnZ2luZy5zbGljZSk7YSE9bnVsbCYmKHM9YSl9dGhpcy5zZXRDdXJzb3IocyksdGhpcy5zY2hlZHVsZVJlbW92YWwoNWUzKX19ZHJhZ2VuZCgpe3RoaXMuc2NoZWR1bGVSZW1vdmFsKDIwKX1kcm9wKCl7dGhpcy5zY2hlZHVsZVJlbW92YWwoMjApfWRyYWdsZWF2ZSh0KXsodC50YXJnZXQ9PXRoaXMuZWRpdG9yVmlldy5kb218fCF0aGlzLmVkaXRvclZpZXcuZG9tLmNvbnRhaW5zKHQucmVsYXRlZFRhcmdldCkpJiZ0aGlzLnNldEN1cnNvcihudWxsKX19dmFyICRvZT1PYmplY3QuZGVmaW5lUHJvcGVydHksQW9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsRG9lPShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/QW9lKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiYkb2UodCxuLG8pLG99LGhiPWNsYXNzIGV4dGVuZHMgX3R7Z2V0IG5hbWUoKXtyZXR1cm4iZHJvcEN1cnNvciJ9Y3JlYXRlRXh0ZXJuYWxQbHVnaW5zKCl7Y29uc3R7Y29sb3I6ZSx3aWR0aDp0fT10aGlzLm9wdGlvbnM7cmV0dXJuW1JvZSh7Y29sb3I6ZSx3aWR0aDp0fSldfX07aGI9RG9lKFtKZSh7ZGVmYXVsdE9wdGlvbnM6e2NvbG9yOiJibGFjayIsd2lkdGg6MX19KV0saGIpO3ZhciBJb2U9T2JqZWN0LmRlZmluZVByb3BlcnR5LExvZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEFBPShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/TG9lKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiZJb2UodCxuLG8pLG99LHtMQUJFTDpqb2V9PWRGLHpvZT17aWNvbjooe2F0dHJzOmV9KT0+YGgkeyhlPT1udWxsP3ZvaWQgMDplLmxldmVsKT8/IjEifWAsbGFiZWw6KHt0OmUsYXR0cnM6dH0pPT5lKHsuLi5qb2UsdmFsdWVzOntsZXZlbDp0PT1udWxsP3ZvaWQgMDp0LmxldmVsfX0pfSxGb2U9W1kuSDEsWS5IMixZLkgzLFkuSDQsWS5INSxZLkg2XSxyZz1jbGFzcyBleHRlbmRzIG9ve2dldCBuYW1lKCl7cmV0dXJuImhlYWRpbmcifWNyZWF0ZVRhZ3MoKXtyZXR1cm5bTGUuQmxvY2ssTGUuVGV4dEJsb2NrLExlLkZvcm1hdHRpbmdOb2RlXX1jcmVhdGVOb2RlU3BlYyhlLHQpe3JldHVybntjb250ZW50OiJpbmxpbmUqIixkZWZpbmluZzohMCxkcmFnZ2FibGU6ITEsLi4udCxhdHRyczp7Li4uZS5kZWZhdWx0cygpLGxldmVsOntkZWZhdWx0OnRoaXMub3B0aW9ucy5kZWZhdWx0TGV2ZWx9fSxwYXJzZURPTTpbLi4udGhpcy5vcHRpb25zLmxldmVscy5tYXAobj0+KHt0YWc6YGgke259YCxnZXRBdHRyczpyPT4oey4uLmUucGFyc2UociksbGV2ZWw6bn0pfSkpLC4uLnQucGFyc2VET00/P1tdXSx0b0RPTTpuPT50aGlzLm9wdGlvbnMubGV2ZWxzLmluY2x1ZGVzKG4uYXR0cnMubGV2ZWwpP1tgaCR7bi5hdHRycy5sZXZlbH1gLGUuZG9tKG4pLDBdOltgaCR7dGhpcy5vcHRpb25zLmRlZmF1bHRMZXZlbH1gLGUuZG9tKG4pLDBdfX10b2dnbGVIZWFkaW5nKGU9e30pe3JldHVybiBOTih7dHlwZTp0aGlzLnR5cGUsdG9nZ2xlVHlwZToicGFyYWdyYXBoIixhdHRyczplfSl9Y3JlYXRlS2V5bWFwKGUpe2NvbnN0IHQ9dGhpcy5zdG9yZS5nZXRFeHRlbnNpb24oVmUpLG49aGUoKSxyPVtdO2Zvcihjb25zdCBvIG9mIHRoaXMub3B0aW9ucy5sZXZlbHMpe2NvbnN0IGk9Rm9lW28tMV0/P1kuSDE7bltpXT16bSh0aGlzLnR5cGUse2xldmVsOm99KSxyLnB1c2goe2F0dHJzOntsZXZlbDpvfSxzaG9ydGN1dDplKGkpWzBdfSl9cmV0dXJuIHQudXBkYXRlRGVjb3JhdGVkKCJ0b2dnbGVIZWFkaW5nIix7c2hvcnRjdXQ6cn0pLG59Y3JlYXRlSW5wdXRSdWxlcygpe3JldHVybiB0aGlzLm9wdGlvbnMubGV2ZWxzLm1hcChlPT5SRihuZXcgUmVnRXhwKGBeKCN7MSwke2V9fSlcXHMkYCksdGhpcy50eXBlLCgpPT4oe2xldmVsOmV9KSkpfWNyZWF0ZVBhc3RlUnVsZXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmxldmVscy5tYXAoZT0+KHt0eXBlOiJub2RlIixub2RlVHlwZTp0aGlzLnR5cGUscmVnZXhwOm5ldyBSZWdFeHAoYF4jeyR7ZX19XFxzKFtcXHNcXHddKykkYCksZ2V0QXR0cmlidXRlczooKT0+KHtsZXZlbDplfSksc3RhcnRPZlRleHRCbG9jazohMH0pKX19O0FBKFtkZSh6b2UpXSxyZy5wcm90b3R5cGUsInRvZ2dsZUhlYWRpbmciLDEpO3JnPUFBKFtKZSh7ZGVmYXVsdE9wdGlvbnM6e2xldmVsczpbMSwyLDMsNCw1LDZdLGRlZmF1bHRMZXZlbDoxfSxzdGF0aWNLZXlzOlsiZGVmYXVsdExldmVsIiwibGV2ZWxzIl19KV0scmcpO3ZhciBEQT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7KGZ1bmN0aW9uKG4scil7ZS5leHBvcnRzPXIoKX0pKHR5cGVvZiBzZWxmPCJ1Ij9zZWxmOm5JLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoaSl7aWYob1tpXSlyZXR1cm4gb1tpXS5leHBvcnRzO3ZhciBzPW9baV09e2ksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gbltpXS5jYWxsKHMuZXhwb3J0cyxzLHMuZXhwb3J0cyxyKSxzLmw9ITAscy5leHBvcnRzfXZhciBvPXt9O3JldHVybiByLm09bixyLmM9byxyLmQ9ZnVuY3Rpb24oaSxzLGEpe3IubyhpLHMpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxzLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6YX0pfSxyLm49ZnVuY3Rpb24oaSl7dmFyIHM9aSYmaS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gaX07cmV0dXJuIHIuZChzLCJhIixzKSxzfSxyLm89ZnVuY3Rpb24oaSxzKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscyl9LHIucD0iIixyKHIucz0wKX0oW2Z1bmN0aW9uKG4scixvKXtmdW5jdGlvbiBpKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGdpdmVuIFVSTCBpcyBub3QgYSBzdHJpbmcuIFBsZWFzZSB2ZXJpZnkgeW91ciBzdHJpbmd8YXJyYXkuIil9ZnVuY3Rpb24gcyhjKXt0eXBlb2YgYyE9InN0cmluZyImJmkoKTtmb3IodmFyIHU9MCxkPTAsZj0wLHA9Yy5sZW5ndGgsbT0wO3AtLSYmKyttJiYhKHUmJi0xPGEuaW5kZXhPZihjW21dKSk7KWNbbV09PT0iLiImJigrK3UsZD1tKTtmb3IodT1tLG09ZDttLS07KWlmKGwuaW5kZXhPZihjW21dKSE9PS0xKXtmPW0rMTticmVha31yZXR1cm4gMj5mPyIiOmMuc2xpY2UoZix1KX12YXIgYT1bIi8iLCI6IiwiPyIsIiMiXSxsPVsiLiIsIi8iLCJAIl07bi5leHBvcnRzPWZ1bmN0aW9uKGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIilyZXR1cm4gcyhjKTtpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgdT1bXSxkLGY9MDtmb3IoZD1jLmxlbmd0aDtmPGQ7ZisrKXUucHVzaChzKGNbZl0pKTtyZXR1cm4gdX1pKCl9fV0pfSl9KShEQSk7dmFyIEJvZT1EQS5leHBvcnRzO2NvbnN0IFVvZT1zaShCb2UpO3ZhciBWb2U9T2JqZWN0LmRlZmluZVByb3BlcnR5LEhvZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGhwPShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/SG9lKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiZWb2UodCxuLG8pLG99LFdvZT1bImNvbSIsImRlIiwibmV0Iiwib3JnIiwidWsiLCJjbiIsImdhIiwibmwiLCJjZiIsIm1sIiwidGsiLCJydSIsImJyIiwiZ3EiLCJ4eXoiLCJmciIsImV1IiwiaW5mbyIsImNvIiwiYXUiLCJjYSIsIml0IiwiaW4iLCJjaCIsInBsIiwiZXMiLCJvbmxpbmUiLCJ1cyIsInRvcCIsImJlIiwianAiLCJiaXoiLCJzZSIsImF0IiwiZGsiLCJjeiIsInphIiwibWUiLCJpciIsImljdSIsInNob3AiLCJrciIsInNpdGUiLCJteCIsImh1IiwiaW8iLCJjYyIsImNsdWIiLCJubyIsImN5b3UiXSxxQz0idXBkYXRlTGluayIsS29lPS8oPzooPzooPzpodHRwcz98ZnRwKTopP1wvXC8pPyg/OlxTKyg/OjpcUyopP0ApPyg/Oig/OltcZGEtelx1MDBBMS1cdUZGRkZdW1x3XHUwMEExLVx1RkZGRi1dezAsNjJ9KT9bXGRhLXpcdTAwQTEtXHVGRkZGXVwuKSooPzooPzpcZCg/IVwuKXxbYS16XHUwMEExLVx1RkZGRl0pKD86W1xkYS16XHUwMEExLVx1RkZGRl1bXHdcdTAwQTEtXHVGRkZGLV17MCw2Mn0pP1tcZGEtelx1MDBBMS1cdUZGRkZdXC4pK1thLXpcdTAwQTEtXHVGRkZGXXsyLH0oPzo6XGR7Miw1fSk/KD86WyMvP11cUyopPy9naSxtbD1jbGFzcyBleHRlbmRzIGNwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9hdXRvTGlua1JlZ2V4Tm9uR2xvYmFsPXZvaWQgMH1nZXQgbmFtZSgpe3JldHVybiJsaW5rIn1jcmVhdGVUYWdzKCl7cmV0dXJuW0xlLkxpbmssTGUuRXhjbHVkZUlucHV0UnVsZXNdfWNyZWF0ZU1hcmtTcGVjKGUsdCl7Y29uc3Qgbj0iZGF0YS1saW5rLWF1dG8iLHI9bz0+e2NvbnN0e2RlZmF1bHRUYXJnZXQ6aSxzdXBwb3J0ZWRUYXJnZXRzOnN9PXRoaXMub3B0aW9ucyxhPWk/Wy4uLnMsaV06cztyZXR1cm4gbyYmJG8oYSxvKT97dGFyZ2V0Om99OnZvaWQgMH07cmV0dXJue2luY2x1c2l2ZTohMSxleGNsdWRlczoiXyIsLi4udCxhdHRyczp7Li4uZS5kZWZhdWx0cygpLGhyZWY6e30sdGFyZ2V0OntkZWZhdWx0OnRoaXMub3B0aW9ucy5kZWZhdWx0VGFyZ2V0fSxhdXRvOntkZWZhdWx0OiExfX0scGFyc2VET006W3t0YWc6ImFbaHJlZl0iLGdldEF0dHJzOm89PntpZighbmkobykpcmV0dXJuITE7Y29uc3QgaT1vLmdldEF0dHJpYnV0ZSgiaHJlZiIpLHM9by50ZXh0Q29udGVudCxhPXRoaXMub3B0aW9ucy5hdXRvTGluayYmKG8uaGFzQXR0cmlidXRlKG4pfHxpPT09c3x8KGk9PW51bGw/dm9pZCAwOmkucmVwbGFjZShgJHt0aGlzLm9wdGlvbnMuZGVmYXVsdFByb3RvY29sfS8vYCwiIikpPT09cyk7cmV0dXJuey4uLmUucGFyc2UobyksaHJlZjppLGF1dG86YSwuLi5yKG8uZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKSl9fX0sLi4udC5wYXJzZURPTT8/W11dLHRvRE9NOm89Pntjb25zdHthdXRvOmksdGFyZ2V0OnMsLi4uYX09UE4oby5hdHRycyxlKSxsPW8uYXR0cnMuYXV0bz97W25dOiIifTp7fTtyZXR1cm5bImEiLHsuLi5lLmRvbShvKSwuLi5hLHJlbDoibm9vcGVuZXIgbm9yZWZlcnJlciBub2ZvbGxvdyIsLi4ubCwuLi5yKG8uYXR0cnMudGFyZ2V0KX0sMF19fX1vbkNyZWF0ZSgpe2NvbnN0e2F1dG9MaW5rUmVnZXg6ZX09dGhpcy5vcHRpb25zO3RoaXMuX2F1dG9MaW5rUmVnZXhOb25HbG9iYWw9bmV3IFJlZ0V4cChgXiR7ZS5zb3VyY2V9JGAsZS5mbGFncy5yZXBsYWNlKCJnIiwiIikpfXNob3J0Y3V0KHt0cjplfSl7bGV0IHQ9IiIse2Zyb206bix0bzpyLGVtcHR5Om8sJGZyb206aX09ZS5zZWxlY3Rpb24scz0hMTtjb25zdCBhPUxpKGksdGhpcy50eXBlKTtpZihvKXtjb25zdCBsPWE/P0NOKGUpO2lmKCFsKXJldHVybiExOyh7dGV4dDp0LGZyb206bix0bzpyfT1sKSxzPSEwfXJldHVybiBuPT09cj8hMTooc3x8KHQ9ZS5kb2MudGV4dEJldHdlZW4obixyKSksdGhpcy5vcHRpb25zLm9uQWN0aXZhdGVMaW5rKHQpLHRoaXMub3B0aW9ucy5vblNob3J0Y3V0KHthY3RpdmVMaW5rOmE/e2F0dHJzOmEubWFyay5hdHRycyxmcm9tOmEuZnJvbSx0bzphLnRvfTp2b2lkIDAsc2VsZWN0ZWRUZXh0OnQsZnJvbTpuLHRvOnJ9KSwhMCl9dXBkYXRlTGluayhlLHQpe3JldHVybiBuPT57Y29uc3R7dHI6cn09bjtyZXR1cm4hKHdsKHIuc2VsZWN0aW9uKSYmIWZ3KHIuc2VsZWN0aW9uKXx8R1Uoci5zZWxlY3Rpb24pfHxqbSh7dHJTdGF0ZTpyLHR5cGU6dGhpcy50eXBlfSkpJiYhdD8hMTooci5zZXRNZXRhKHRoaXMubmFtZSx7Y29tbWFuZDpxQyxhdHRyczplLHJhbmdlOnR9KSxoVih7dHlwZTp0aGlzLnR5cGUsYXR0cnM6ZSxyYW5nZTp0fSkobikpfX1zZWxlY3RMaW5rKCl7cmV0dXJuIHRoaXMuc3RvcmUuY29tbWFuZHMuc2VsZWN0TWFyay5vcmlnaW5hbCh0aGlzLnR5cGUpfXJlbW92ZUxpbmsoZSl7cmV0dXJuIHQ9Pntjb25zdHt0cjpufT10O3JldHVybiBqbSh7dHJTdGF0ZTpuLHR5cGU6dGhpcy50eXBlLC4uLmV9KT9BTih7dHlwZTp0aGlzLnR5cGUsZXhwYW5kOiEwLHJhbmdlOmV9KSh0KTohMX19Y3JlYXRlUGFzdGVSdWxlcygpe3JldHVyblt7dHlwZToibWFyayIscmVnZXhwOnRoaXMub3B0aW9ucy5hdXRvTGlua1JlZ2V4LG1hcmtUeXBlOnRoaXMudHlwZSxnZXRBdHRyaWJ1dGVzOihlLHQpPT4oe2hyZWY6dGhpcy5idWlsZEhyZWYoTGQoZSkpLGF1dG86IXR9KSx0cmFuc2Zvcm1NYXRjaDplPT57Y29uc3QgdD1MZChlKTtyZXR1cm4hdHx8IXRoaXMuaXNWYWxpZFVybCh0KT8hMTp0fX1dfWNyZWF0ZUV2ZW50SGFuZGxlcnMoKXtyZXR1cm57Y2xpY2tNYXJrOihlLHQpPT57Y29uc3Qgbj10LmdldE1hcmsodGhpcy50eXBlKTtpZighbilyZXR1cm47Y29uc3Qgcj1uLm1hcmsuYXR0cnMsbz17Li4uciwuLi5ufTtpZih0aGlzLm9wdGlvbnMub25DbGljayhlLG8pKXJldHVybiEwO2lmKCF0aGlzLnN0b3JlLnZpZXcuZWRpdGFibGUpcmV0dXJuO2xldCBpPSExO2lmKHRoaXMub3B0aW9ucy5vcGVuTGlua09uQ2xpY2spe2k9ITA7Y29uc3Qgcz1yLmhyZWY7d2luZG93Lm9wZW4ocywiX2JsYW5rIil9cmV0dXJuIHRoaXMub3B0aW9ucy5zZWxlY3RUZXh0T25DbGljayYmKGk9ITAsdGhpcy5zdG9yZS5jb21tYW5kcy5zZWxlY3RUZXh0KG4pKSxpfX19Y3JlYXRlUGx1Z2luKCl7cmV0dXJue2FwcGVuZFRyYW5zYWN0aW9uOihlLHQsbik9PntpZihlLmZpbHRlcihwPT4hIXAuZ2V0TWV0YSh0aGlzLm5hbWUpKS5mb3JFYWNoKHA9Pntjb25zdCBtPXAuZ2V0TWV0YSh0aGlzLm5hbWUpO2lmKG0uY29tbWFuZD09PXFDKXtjb25zdHtyYW5nZTpnLGF0dHJzOnl9PW0se3NlbGVjdGlvbjp2LGRvYzp4fT1uLHc9e3JhbmdlOmcsc2VsZWN0aW9uOnYsZG9jOngsYXR0cnM6eX0se2Zyb206ayx0bzpFfT1nPz92O3RoaXMub3B0aW9ucy5vblVwZGF0ZUxpbmsoeC50ZXh0QmV0d2VlbihrLEUpLHcpfX0pLCF0aGlzLm9wdGlvbnMuYXV0b0xpbmt8fHJiKHQpLXJiKG4pPT09MXx8IWUuc29tZShwPT5wLmRvY0NoYW5nZWQpKXJldHVybjtjb25zdCBzPURVKGUsdCksYT1RVShzLFtVdCxmbl0pLHttYXBwaW5nOmx9PXMse3RyOmMsZG9jOnV9PW4se3VwZGF0ZUxpbms6ZCxyZW1vdmVMaW5rOmZ9PXRoaXMuc3RvcmUuY2hhaW4oYyk7aWYoYS5mb3JFYWNoKCh7cHJldkZyb206cCxwcmV2VG86bSxmcm9tOmcsdG86eX0pPT57Y29uc3Qgdj1bXSx4PXktZz09PTIsdz10aGlzLmdldExpbmtNYXJrc0luUmFuZ2UodC5kb2MscCxtLCEwKS5maWx0ZXIoaz0+ay5tYXJrLnR5cGU9PT10aGlzLnR5cGUpLm1hcCgoe2Zyb206ayx0bzpFLHRleHQ6U30pPT4oe21hcHBlZEZyb206bC5tYXAoayksbWFwcGVkVG86bC5tYXAoRSksdGV4dDpTLGZyb206ayx0bzpFfSkpO3cuZm9yRWFjaCgoe21hcHBlZEZyb206ayxtYXBwZWRUbzpFLGZyb206Uyx0bzpffSxQKT0+dGhpcy5nZXRMaW5rTWFya3NJblJhbmdlKHUsayxFLCEwKS5maWx0ZXIoTT0+TS5tYXJrLnR5cGU9PT10aGlzLnR5cGUpLmZvckVhY2goTT0+e2NvbnN0IEE9dC5kb2MudGV4dEJldHdlZW4oUyxfLHZvaWQgMCwiICIpLEk9dS50ZXh0QmV0d2VlbihNLmZyb20sTS50bysxLHZvaWQgMCwiICIpLnRyaW0oKSxMPXRoaXMuaXNWYWxpZFVybChBKTt0aGlzLmlzVmFsaWRVcmwoSSl8fChMJiYoZih7ZnJvbTpNLmZyb20sdG86TS50b30pLnRyKCksdy5zcGxpY2UoUCwxKSksIXgmJmc9PT15JiZ0aGlzLmZpbmRBdXRvTGlua3MoSSkubWFwKFY9PnRoaXMuYWRkTGlua1Byb3BlcnRpZXMoey4uLlYsZnJvbTprK1Yuc3RhcnQsdG86aytWLmVuZH0pKS5mb3JFYWNoKCh7YXR0cnM6VixyYW5nZTpLLHRleHQ6Q30pPT57ZChWLEspLnRyKCksdi5wdXNoKHthdHRyczpWLHJhbmdlOkssdGV4dDpDfSl9KSl9KSksdGhpcy5maW5kVGV4dEJsb2Nrc0luUmFuZ2UodSx7ZnJvbTpnLHRvOnl9KS5mb3JFYWNoKCh7dGV4dDprLHBvc2l0aW9uU3RhcnQ6RX0pPT57dGhpcy5maW5kQXV0b0xpbmtzKGspLm1hcChTPT50aGlzLmFkZExpbmtQcm9wZXJ0aWVzKHsuLi5TLGZyb206RStTLnN0YXJ0KzEsdG86RStTLmVuZCsxfSkpLmZpbHRlcigoe3JhbmdlOlN9KT0+e2NvbnN0IF89Zz49Uy5mcm9tJiZnPD1TLnRvLFA9eT49Uy5mcm9tJiZ5PD1TLnRvO3JldHVybiBffHxQfHx4fSkuZmlsdGVyKCh7cmFuZ2U6U30pPT50aGlzLmdldExpbmtNYXJrc0luUmFuZ2UoYy5kb2MsUy5mcm9tLFMudG8sITEpLmxlbmd0aD09PTApLmZpbHRlcigoe3JhbmdlOntmcm9tOlN9LHRleHQ6X30pPT4hdy5zb21lKCh7dGV4dDpQLG1hcHBlZEZyb206TX0pPT5NPT09UyYmUD09PV8pKS5mb3JFYWNoKCh7YXR0cnM6Uyx0ZXh0Ol8scmFuZ2U6UH0pPT57ZChTLFApLnRyKCksdi5wdXNoKHthdHRyczpTLHJhbmdlOlAsdGV4dDpffSl9KX0pLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2LmZvckVhY2goKHthdHRyczprLHJhbmdlOkUsdGV4dDpTfSk9Pntjb25zdHtkb2M6XyxzZWxlY3Rpb246UH09Yzt0aGlzLm9wdGlvbnMub25VcGRhdGVMaW5rKFMse2F0dHJzOmssZG9jOl8scmFuZ2U6RSxzZWxlY3Rpb246UH0pfSl9KX0pLGMuc3RlcHMubGVuZ3RoIT09MClyZXR1cm4gY319fWJ1aWxkSHJlZihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLmV4dHJhY3RIcmVmKHt1cmw6ZSxkZWZhdWx0UHJvdG9jb2w6dGhpcy5vcHRpb25zLmRlZmF1bHRQcm90b2NvbH0pfWdldExpbmtNYXJrc0luUmFuZ2UoZSx0LG4scil7Y29uc3Qgbz1bXTtpZih0PT09bil7Y29uc3QgaT1NYXRoLm1heCh0LTEsMCkscz1lLnJlc29sdmUoaSksYT1MaShzLHRoaXMudHlwZSk7KGE9PW51bGw/dm9pZCAwOmEubWFyay5hdHRycy5hdXRvKT09PXImJm8ucHVzaChhKX1lbHNlIGUubm9kZXNCZXR3ZWVuKHQsbiwoaSxzKT0+e2NvbnN0IGw9KGkubWFya3M/P1tdKS5maW5kKCh7dHlwZTpjLGF0dHJzOnV9KT0+Yz09PXRoaXMudHlwZSYmdS5hdXRvPT09cik7bCYmby5wdXNoKHtmcm9tOnMsdG86cytpLm5vZGVTaXplLG1hcms6bCx0ZXh0OmkudGV4dENvbnRlbnR9KX0pO3JldHVybiBvfWZpbmRUZXh0QmxvY2tzSW5SYW5nZShlLHQpe2NvbnN0IG49W107cmV0dXJuIGUubm9kZXNCZXR3ZWVuKHQuZnJvbSx0LnRvLChyLG8pPT57IXIuaXNUZXh0YmxvY2t8fCFyLnR5cGUuYWxsb3dzTWFya1R5cGUodGhpcy50eXBlKXx8bi5wdXNoKHtub2RlOnIscG9zOm99KX0pLG4ubWFwKHI9Pih7dGV4dDplLnRleHRCZXR3ZWVuKHIucG9zLHIucG9zK3Iubm9kZS5ub2RlU2l6ZSx2b2lkIDAsIiAiKSxwb3NpdGlvblN0YXJ0OnIucG9zfSkpfWFkZExpbmtQcm9wZXJ0aWVzKHtmcm9tOmUsdG86dCxocmVmOm4sLi4ucn0pe3JldHVybnsuLi5yLHJhbmdlOntmcm9tOmUsdG86dH0sYXR0cnM6e2hyZWY6bixhdXRvOiEwfX19ZmluZEF1dG9MaW5rcyhlKXtpZih0aGlzLm9wdGlvbnMuZmluZEF1dG9MaW5rcylyZXR1cm4gdGhpcy5vcHRpb25zLmZpbmRBdXRvTGlua3MoZSx0aGlzLm9wdGlvbnMuZGVmYXVsdFByb3RvY29sKTtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIFhnKGUsdGhpcy5vcHRpb25zLmF1dG9MaW5rUmVnZXgpKXtjb25zdCByPUxkKG4pO2lmKCFyKWNvbnRpbnVlO2NvbnN0IG89dGhpcy5idWlsZEhyZWYocik7IXRoaXMuaXNWYWxpZFRMRChvKSYmIW8uc3RhcnRzV2l0aCgidGVsOiIpfHx0LnB1c2goe3RleHQ6cixocmVmOm8sc3RhcnQ6bi5pbmRleCxlbmQ6bi5pbmRleCtyLmxlbmd0aH0pfXJldHVybiB0fWlzVmFsaWRVcmwoZSl7dmFyIHQ7cmV0dXJuIHRoaXMub3B0aW9ucy5pc1ZhbGlkVXJsP3RoaXMub3B0aW9ucy5pc1ZhbGlkVXJsKGUsdGhpcy5vcHRpb25zLmRlZmF1bHRQcm90b2NvbCk6dGhpcy5pc1ZhbGlkVExEKHRoaXMuYnVpbGRIcmVmKGUpKSYmISEoKHQ9dGhpcy5fYXV0b0xpbmtSZWdleE5vbkdsb2JhbCkhPW51bGwmJnQudGVzdChlKSl9aXNWYWxpZFRMRChlKXtjb25zdHthdXRvTGlua0FsbG93ZWRUTERzOnR9PXRoaXMub3B0aW9ucztpZih0Lmxlbmd0aD09PTApcmV0dXJuITA7Y29uc3Qgbj1Vb2UoZSk7aWYobj09PSIiKXJldHVybiEwO2NvbnN0IHI9UXoobi5zcGxpdCgiLiIpKTtyZXR1cm4gdC5pbmNsdWRlcyhyKX19O2hwKFtMcih7c2hvcnRjdXQ6WS5JbnNlcnRMaW5rfSldLG1sLnByb3RvdHlwZSwic2hvcnRjdXQiLDEpO2hwKFtkZSgpXSxtbC5wcm90b3R5cGUsInVwZGF0ZUxpbmsiLDEpO2hwKFtkZSgpXSxtbC5wcm90b3R5cGUsInNlbGVjdExpbmsiLDEpO2hwKFtkZSgpXSxtbC5wcm90b3R5cGUsInJlbW92ZUxpbmsiLDEpO21sPWhwKFtKZSh7ZGVmYXVsdE9wdGlvbnM6e2F1dG9MaW5rOiExLGRlZmF1bHRQcm90b2NvbDoiIixzZWxlY3RUZXh0T25DbGljazohMSxvcGVuTGlua09uQ2xpY2s6ITEsYXV0b0xpbmtSZWdleDpLb2UsYXV0b0xpbmtBbGxvd2VkVExEczpXb2UsZmluZEF1dG9MaW5rczp2b2lkIDAsaXNWYWxpZFVybDp2b2lkIDAsZGVmYXVsdFRhcmdldDpudWxsLHN1cHBvcnRlZFRhcmdldHM6W10sZXh0cmFjdEhyZWY6cW9lfSxzdGF0aWNLZXlzOlsiYXV0b0xpbmtSZWdleCJdLGhhbmRsZXJLZXlPcHRpb25zOntvbkNsaWNrOntlYXJseVJldHVyblZhbHVlOiEwfX0saGFuZGxlcktleXM6WyJvbkFjdGl2YXRlTGluayIsIm9uU2hvcnRjdXQiLCJvblVwZGF0ZUxpbmsiLCJvbkNsaWNrIl0sZGVmYXVsdFByaW9yaXR5OmN0Lk1lZGl1bX0pXSxtbCk7ZnVuY3Rpb24gcW9lKHt1cmw6ZSxkZWZhdWx0UHJvdG9jb2w6dH0pe2NvbnN0IG49L14oKD86aHR0cHM/fGZ0cCk/OilcL1wvLy50ZXN0KGUpO3JldHVybiFuJiZlLmluY2x1ZGVzKCJAIik/YG1haWx0bzoke2V9YDpuP2U6YCR7dH0vLyR7ZX1gfXZhciBHb2U9T2JqZWN0LmRlZmluZVByb3BlcnR5LFlvZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLElBPShlLHQsbixyKT0+e2Zvcih2YXIgbz1yPjE/dm9pZCAwOnI/WW9lKHQsbik6dCxpPWUubGVuZ3RoLTEscztpPj0wO2ktLSkocz1lW2ldKSYmKG89KHI/cyh0LG4sbyk6cyhvKSl8fG8pO3JldHVybiByJiZvJiZHb2UodCxuLG8pLG99LG9nPWNsYXNzIGV4dGVuZHMgb297Z2V0IG5hbWUoKXtyZXR1cm4iaGFyZEJyZWFrIn1jcmVhdGVUYWdzKCl7cmV0dXJuW0xlLklubGluZU5vZGVdfWNyZWF0ZU5vZGVTcGVjKGUsdCl7cmV0dXJue2lubGluZTohMCxzZWxlY3RhYmxlOiExLGF0b206ITAsbGVhZlRleHQ6KCk9PmAKYCwuLi50LGF0dHJzOmUuZGVmYXVsdHMoKSxwYXJzZURPTTpbe3RhZzoiYnIiLGdldEF0dHJzOmUucGFyc2V9LC4uLnQucGFyc2VET00/P1tdXSx0b0RPTTpuPT5bImJyIixlLmRvbShuKV19fWNyZWF0ZUtleW1hcCgpe2NvbnN0IGU9QVUoSWQoek4pLCgpPT4odGhpcy5zdG9yZS5jb21tYW5kcy5pbnNlcnRIYXJkQnJlYWsoKSwhMCkpO3JldHVybnsiTW9kLUVudGVyIjplLCJTaGlmdC1FbnRlciI6ZX19aW5zZXJ0SGFyZEJyZWFrKCl7cmV0dXJuIGU9Pntjb25zdHt0cjp0LGRpc3BhdGNoOm59PWU7cmV0dXJuIG49PW51bGx8fG4odC5yZXBsYWNlU2VsZWN0aW9uV2l0aCh0aGlzLnR5cGUuY3JlYXRlKCkpLnNjcm9sbEludG9WaWV3KCkpLCEwfX19O0lBKFtkZSgpXSxvZy5wcm90b3R5cGUsImluc2VydEhhcmRCcmVhayIsMSk7b2c9SUEoW0plKHtkZWZhdWx0UHJpb3JpdHk6Y3QuTG93fSldLG9nKTtjb25zdCBYb2U9W25ldyBobCxuZXcgemYsbmV3IEZmLG5ldyBCZih7ZW5hYmxlUmVzaXppbmc6ITF9KSxuZXcgaGIsbmV3IHJnKHtsZXZlbHM6WzEsMiwzLDQsNSw2XSxkZWZhdWx0TGV2ZWw6MX0pLG5ldyBEZixuZXcgSWYsbmV3IG1sKHthdXRvTGluazohMH0pLG5ldyBvZ107ZnVuY3Rpb24gWm9lKGUpe2NvbnN0e21hbmFnZXI6dCxzdGF0ZTpufT13Sih7ZXh0ZW5zaW9uczooKT0+WG9lLnNsaWNlKCksY29udGVudDplLHNlbGVjdGlvbjoic3RhcnQifSk7cmV0dXJue21hbmFnZXI6dCxzdGF0ZTpufX1mdW5jdGlvbiBKb2Uoe3N0YXRlOmUsbWFuYWdlcjp0LG9wdGlvbnM6bixvbkNoYW5nZTpyLGRlYnVnOm99KXtjb25zdCBpPW4mJk9iamVjdC5lbnRyaWVzKG4pLnNvbWUoKFssY10pPT5jKSxbcyxhXT1oLnVzZVN0YXRlKGkpLGw9UXQoInAtNCBib3JkZXIgcm91bmRlZC1tZCBvdXRsaW5lLW5vbmUgYXBwZWFyYW5jZS1ub25lIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIix7InJvdW5kZWQtdC1ub25lIGJvcmRlci10LTAiOnN9KTtyZXR1cm4gYi5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1iYXNlIHZhbC1yaWNoLXRleHQtZWRpdG9yIixjaGlsZHJlbjpiLmpzeChFSix7bWFuYWdlcjp0LGluaXRpYWxDb250ZW50OmUsY2xhc3NOYW1lczpbbF0sY2hpbGRyZW46Yi5qc3hzKG9vZSx7aW5pdGlhbFByb3BzOnttb2RlOiJkZWZhdWx0In0sY2hpbGRyZW46W2IuanN4KFFvZSx7aGFzT3B0aW9uczppLG9wdGlvbnM6bixkZWJ1ZzpvLG9uU2hvd1Rvb2xiYXI6Yz0+e2EoYyl9fSksYi5qc3goaWIse30pLHImJmIuanN4KFNKLHtvbkNoYW5nZTpyfSldfSl9KX0pfWNvbnN0IFFvZT0oe29wdGlvbnM6ZSxoYXNPcHRpb25zOnQsb25TaG93VG9vbGJhcjpuLGRlYnVnOnJ9KT0+e3ZhciBsLGMsdSxkLGYscDtjb25zdCBvPU13KCksaT1hSigpLHM9dHx8aS5oZWFkaW5nKCl8fGkuaW1hZ2UoKXx8aS5saW5rKCl8fGkuYnVsbGV0TGlzdCgpfHxpLm9yZGVyZWRMaXN0KCl8fGkuYm9sZCgpfHxpLml0YWxpYygpfHxpLnN0cmlrZSgpO2gudXNlRWZmZWN0KCgpPT57bihzKX0sW3NdKTtjb25zdCBhPWgudXNlUmVmKG51bGwpO3JldHVybiBiLmpzeHMoYi5GcmFnbWVudCx7Y2hpbGRyZW46W2IuanN4KCJkaXYiLHtjbGFzc05hbWU6ImgtMCIscmVmOmF9KSxiLmpzeHMoImRpdiIse2NsYXNzTmFtZTpRdCgic3RpY2t5IHRvcC0wIGZsZXggZmxleC1jb2wgcHktMiB6LVs0MF0gYm9yZGVyIGRpdmlkZS15IHJvdW5kZWQtbWQgcm91bmRlZC1iLW5vbmUgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQiLHtoaWRkZW46IXN9KSxjaGlsZHJlbjpbYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgcHgtNCBweS0xIGdhcC14LTMiLGNoaWxkcmVuOlsoKGU9PW51bGw/dm9pZCAwOmUuaGVhZGluZ3MpfHxpLmhlYWRpbmcoKSkmJmIuanN4cyhobmUse2NoaWxkcmVuOltiLmpzeChtbmUse2FzQ2hpbGQ6ITAsY2xhc3NOYW1lOiJwci00IixjaGlsZHJlbjpiLmpzeHMoImJ1dHRvbiIse2NoaWxkcmVuOltpLmhlYWRpbmcoe2xldmVsOjF9KSYmYi5qc3goS2sse3NpemU6MjJ9KSxpLmhlYWRpbmcoe2xldmVsOjJ9KSYmYi5qc3gocWsse3NpemU6MjJ9KSxpLmhlYWRpbmcoe2xldmVsOjN9KSYmYi5qc3goR2sse3NpemU6MjJ9KSxpLmhlYWRpbmcoe2xldmVsOjR9KSYmYi5qc3goWWsse3NpemU6MjJ9KSxpLmhlYWRpbmcoe2xldmVsOjV9KSYmYi5qc3goWGsse3NpemU6MjJ9KSxpLmhlYWRpbmcoe2xldmVsOjZ9KSYmYi5qc3goWmsse3NpemU6MjJ9KSwhaS5oZWFkaW5nKCkmJiJOb3JtYWwiXX0pfSksYi5qc3hzKEVBLHtjb250YWluZXI6YS5jdXJyZW50LGNoaWxkcmVuOltiLmpzeChtcyx7b25DbGljazooKT0+e28uc2V0QmxvY2tOb2RlVHlwZSgicGFyYWdyYXBoIikuZm9jdXMoKS5ydW4oKX0sY2hpbGRyZW46Ik5vcm1hbCJ9KSwoKGw9ZT09bnVsbD92b2lkIDA6ZS5oZWFkaW5ncyk9PW51bGw/dm9pZCAwOmwuaW5jbHVkZXMoImgxIikpJiZiLmpzeChtcyx7b25DbGljazooKT0+e28uc2V0QmxvY2tOb2RlVHlwZSgiaGVhZGluZyIse2xldmVsOjF9KS5mb2N1cygpLnJ1bigpfSxjaGlsZHJlbjpiLmpzeChLayx7c2l6ZToxNn0pfSksKChjPWU9PW51bGw/dm9pZCAwOmUuaGVhZGluZ3MpPT1udWxsP3ZvaWQgMDpjLmluY2x1ZGVzKCJoMiIpKSYmYi5qc3gobXMse29uQ2xpY2s6KCk9PntvLnNldEJsb2NrTm9kZVR5cGUoImhlYWRpbmciLHtsZXZlbDoyfSkuZm9jdXMoKS5ydW4oKX0sY2hpbGRyZW46Yi5qc3gocWsse3NpemU6MTZ9KX0pLCgodT1lPT1udWxsP3ZvaWQgMDplLmhlYWRpbmdzKT09bnVsbD92b2lkIDA6dS5pbmNsdWRlcygiaDMiKSkmJmIuanN4KG1zLHtvbkNsaWNrOigpPT57by5zZXRCbG9ja05vZGVUeXBlKCJoZWFkaW5nIix7bGV2ZWw6M30pLmZvY3VzKCkucnVuKCl9LGNoaWxkcmVuOmIuanN4KEdrLHtzaXplOjE2fSl9KSwoKGQ9ZT09bnVsbD92b2lkIDA6ZS5oZWFkaW5ncyk9PW51bGw/dm9pZCAwOmQuaW5jbHVkZXMoImg0IikpJiZiLmpzeChtcyx7b25DbGljazooKT0+e28uc2V0QmxvY2tOb2RlVHlwZSgiaGVhZGluZyIse2xldmVsOjR9KS5mb2N1cygpLnJ1bigpfSxjaGlsZHJlbjpiLmpzeChZayx7c2l6ZToxNn0pfSksKChmPWU9PW51bGw/dm9pZCAwOmUuaGVhZGluZ3MpPT1udWxsP3ZvaWQgMDpmLmluY2x1ZGVzKCJoNSIpKSYmYi5qc3gobXMse29uQ2xpY2s6KCk9PntvLnNldEJsb2NrTm9kZVR5cGUoImhlYWRpbmciLHtsZXZlbDo1fSkuZm9jdXMoKS5ydW4oKX0sY2hpbGRyZW46Yi5qc3goWGsse3NpemU6MTZ9KX0pLCgocD1lPT1udWxsP3ZvaWQgMDplLmhlYWRpbmdzKT09bnVsbD92b2lkIDA6cC5pbmNsdWRlcygiaDUiKSkmJmIuanN4KG1zLHtvbkNsaWNrOigpPT57by5zZXRCbG9ja05vZGVUeXBlKCJoZWFkaW5nIix7bGV2ZWw6Nn0pLmZvY3VzKCkucnVuKCl9LGNoaWxkcmVuOmIuanN4KFprLHtzaXplOjE2fSl9KV19KV19KSxiLmpzeChVbCx7aWNvbjpiLmpzeChINCx7c2l6ZToxOH0pLHN0cm9rZTozLG1hcms6ImJvbGQiLGlzT3B0aW9uOmU9PW51bGw/dm9pZCAwOmUuYm9sZCxpc0FjdGl2ZTppLmJvbGQoKSxvblRvZ2dsZTptPT5tLnRvZ2dsZUJvbGQoKS5mb2N1cygpLnJ1bigpfSksYi5qc3goVWwse2ljb246Yi5qc3godWose3NpemU6MTh9KSxzdHJva2U6MyxtYXJrOiJzdHJpa2UiLGlzT3B0aW9uOmU9PW51bGw/dm9pZCAwOmUubGluZVRocm91Z2gsaXNBY3RpdmU6aS5zdHJpa2UoKSxvblRvZ2dsZTptPT5tLnRvZ2dsZVN0cmlrZSgpLmZvY3VzKCkucnVuKCl9KSxiLmpzeChVbCx7aWNvbjpiLmpzeChaNCx7c2l6ZToxOH0pLHN0cm9rZTozLG1hcms6Iml0YWxpYyIsaXNPcHRpb246ZT09bnVsbD92b2lkIDA6ZS5pdGFsaWMsaXNBY3RpdmU6aS5pdGFsaWMoKSxvblRvZ2dsZTptPT5tLnRvZ2dsZUl0YWxpYygpLmZvY3VzKCkucnVuKCl9KSxiLmpzeChVbCx7aWNvbjpiLmpzeCh0aix7c2l6ZToxOH0pLHN0cm9rZTozLG1hcms6ImJ1bGxldExpc3QiLGlzT3B0aW9uOmU9PW51bGw/dm9pZCAwOmUudWwsaXNBY3RpdmU6aS5idWxsZXRMaXN0KCksb25Ub2dnbGU6bT0+bS50b2dnbGVCdWxsZXRMaXN0KCkuZm9jdXMoKS5ydW4oKX0pLGIuanN4KFVsLHtpY29uOmIuanN4KGVqLHtzaXplOjE4fSksc3Ryb2tlOjMsbWFyazoibGlzdCIsaXNPcHRpb246ZT09bnVsbD92b2lkIDA6ZS5vbCxpc0FjdGl2ZTppLm9yZGVyZWRMaXN0KCksb25Ub2dnbGU6bT0+bS50b2dnbGVPcmRlcmVkTGlzdCgpLmZvY3VzKCkucnVuKCl9KSxiLmpzeChVbCx7aWNvbjpiLmpzeChRNCx7c2l6ZToxOH0pLHN0cm9rZTozLG1hcms6ImxpbmsiLGlzT3B0aW9uOmU9PW51bGw/dm9pZCAwOmUub2wsaXNBY3RpdmU6aS5saW5rKCksb25Ub2dnbGU6bT0+bS5zZWxlY3RNYXJrKCJsaW5rIikudXBkYXRlTGluayh7aHJlZjoiIn0pLmZvY3VzKCkucnVuKCl9KSwoKGU9PW51bGw/dm9pZCAwOmUuaW1nKXx8aS5pbWFnZSgpKSYmYi5qc3hzKCJsYWJlbCIse2NsYXNzTmFtZToiY3Vyc29yLXBvaW50ZXIiLGh0bWxGb3I6InZhbC10b29sYmFyLWltYWdlLXNlbGVjdCIsY2hpbGRyZW46W2IuanN4KCJpbnB1dCIse2hpZGRlbjohMCxpZDoidmFsLXRvb2xiYXItaW1hZ2Utc2VsZWN0IixhY2NlcHQ6ImltYWdlLyoiLHR5cGU6ImZpbGUiLG9uQ2hhbmdlOm09PntqTShtKS50aGVuKGc9PntvLmluc2VydEltYWdlKHtzcmM6Zy5zcmMsd2lkdGg6Zy53aWR0aCxoZWlnaHQ6Zy5oZWlnaHQsZmlsZU5hbWU6ek0oZy5zcmMsZy5maWxlbmFtZT8/bnVsbCx7d2lkdGg6Zy53aWR0aCxoZWlnaHQ6Zy5oZWlnaHQsc2hhMjU2Omcuc2hhMjU2LG1pbWVUeXBlOmcubWltZVR5cGV9KT8/dm9pZCAwfSkuZm9jdXMoKS5ydW4oKX0pfX0pLGIuanN4KFg0LHtzaXplOjE4LGNsYXNzTmFtZTpgJHtpLmltYWdlKCkmJiJzdHJva2UtWzNweF0ifWB9KV19KSxyJiZiLmpzeCgiYnV0dG9uIix7b25Nb3VzZURvd246bT0+bS5wcmV2ZW50RGVmYXVsdCgpLG9uQ2xpY2s6KCk9Pm8uaW5zZXJ0SGFyZEJyZWFrKCkucnVuKCksY2hpbGRyZW46IkJyIn0pXX0pLGIuanN4KGVpZSx7fSldfSldfSl9O2Z1bmN0aW9uIGVpZSgpe2NvbnN0IGU9TXcoKSxbdCxuXT1oLnVzZVN0YXRlKCkscj1sSigpLmxpbmsoKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBpPXR5cGVvZiByPT0ib2JqZWN0IiYmImhyZWYiaW4gciYmdHlwZW9mIHIuaHJlZj09InN0cmluZyI/ci5ocmVmOnZvaWQgMDtuKGkpfSxbcj09bnVsbD92b2lkIDA6ci5ocmVmXSksciE9PXZvaWQgMD9iLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBweC00IHB0LTEgZ2FwLXgtMiIsY2hpbGRyZW46W2IuanN4KCJpbnB1dCIse2NsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgdGV4dC1hY2NlbnQiLG9uQ2hhbmdlOmk9PntuKGkudGFyZ2V0LnZhbHVlKX0sZGVmYXVsdFZhbHVlOnQscGxhY2Vob2xkZXI6Imh0dHBzOi8vIn0pLGIuanN4KCJidXR0b24iLHtjbGFzc05hbWU6InAtMiIsdGl0bGU6IlVwZGF0ZSIsZGlzYWJsZWQ6dD09PXZvaWQgMCxvbkNsaWNrOigpPT57dCE9PXZvaWQgMCYmZS5zZWxlY3RNYXJrKCJsaW5rIikudXBkYXRlTGluayh7aHJlZjp0fSkuZm9jdXMoKS5ydW4oKX0sY2hpbGRyZW46Yi5qc3goRTEse3NpemU6MTR9KX0pLGIuanN4KCJidXR0b24iLHtjbGFzc05hbWU6InAtMiIsdGl0bGU6IlJlbW92ZSIsb25DbGljazooKT0+e2UucmVtb3ZlTGluaygpLmZvY3VzKCkucnVuKCl9LGNoaWxkcmVuOmIuanN4KHBqLHtzaXplOjEzfSl9KV19KTpudWxsfWZ1bmN0aW9uIFVsKHtzdHJva2U6ZSxtYXJrOnQsaXNPcHRpb246bixpc0FjdGl2ZTpyLG9uVG9nZ2xlOm8saWNvbjppfSl7Y29uc3Qgcz1NdygpO3JldHVybiFuJiYhcj9udWxsOmIuanN4KCJidXR0b24iLHtjbGFzc05hbWU6UXQoeyJ0ZXh0LWFjY2VudCI6ciwic3Ryb2tlLVsycHhdIjpyJiZlPT09Miwic3Ryb2tlLVszcHhdIjpyJiZlPT09M30pLG9uQ2xpY2s6YT0+e2EucHJldmVudERlZmF1bHQoKSxvKG4/czpzLnNlbGVjdE1hcmsodCkpfSxjaGlsZHJlbjppfSl9ZnVuY3Rpb24gTEEoZSl7Y29uc3QgdD1oLnVzZVJlZih7dmFsdWU6ZSxwcmV2aW91czplfSk7cmV0dXJuIGgudXNlTWVtbygoKT0+KHQuY3VycmVudC52YWx1ZSE9PWUmJih0LmN1cnJlbnQucHJldmlvdXM9dC5jdXJyZW50LnZhbHVlLHQuY3VycmVudC52YWx1ZT1lKSx0LmN1cnJlbnQucHJldmlvdXMpLFtlXSl9Y29uc3QgdGllPWguZm9yd2FyZFJlZigoZSx0KT0+aC5jcmVhdGVFbGVtZW50KFJlLnNwYW4sRih7fSxlLHtyZWY6dCxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixib3JkZXI6MCx3aWR0aDoxLGhlaWdodDoxLHBhZGRpbmc6MCxtYXJnaW46LTEsb3ZlcmZsb3c6ImhpZGRlbiIsY2xpcDoicmVjdCgwLCAwLCAwLCAwKSIsd2hpdGVTcGFjZToibm93cmFwIix3b3JkV3JhcDoibm9ybWFsIiwuLi5lLnN0eWxlfX0pKSksbmllPVsiICIsIkVudGVyIiwiQXJyb3dVcCIsIkFycm93RG93biJdLHJpZT1bIiAiLCJFbnRlciJdLGt2PSJTZWxlY3QiLFtFdixYdyxvaWVdPWpnKGt2KSxbdnUscmNlXT10byhrdixbb2llLGd1XSksWnc9Z3UoKSxbaWllLENsXT12dShrdiksW3NpZSxhaWVdPXZ1KGt2KSxsaWU9ZT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6dCxjaGlsZHJlbjpuLG9wZW46cixkZWZhdWx0T3BlbjpvLG9uT3BlbkNoYW5nZTppLHZhbHVlOnMsZGVmYXVsdFZhbHVlOmEsb25WYWx1ZUNoYW5nZTpsLGRpcjpjLG5hbWU6dSxhdXRvQ29tcGxldGU6ZCxkaXNhYmxlZDpmLHJlcXVpcmVkOnB9PWUsbT1adyh0KSxbZyx5XT1oLnVzZVN0YXRlKG51bGwpLFt2LHhdPWgudXNlU3RhdGUobnVsbCksW3csa109aC51c2VTdGF0ZSghMSksRT1KZihjKSxbUz0hMSxfXT1Rbyh7cHJvcDpyLGRlZmF1bHRQcm9wOm8sb25DaGFuZ2U6aX0pLFtQLE1dPVFvKHtwcm9wOnMsZGVmYXVsdFByb3A6YSxvbkNoYW5nZTpsfSksQT1oLnVzZVJlZihudWxsKSxJPWc/ISFnLmNsb3Nlc3QoImZvcm0iKTohMCxbTCxyZV09aC51c2VTdGF0ZShuZXcgU2V0KSxWPUFycmF5LmZyb20oTCkubWFwKEs9PksucHJvcHMudmFsdWUpLmpvaW4oIjsiKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGp3LG0saC5jcmVhdGVFbGVtZW50KGlpZSx7cmVxdWlyZWQ6cCxzY29wZTp0LHRyaWdnZXI6ZyxvblRyaWdnZXJDaGFuZ2U6eSx2YWx1ZU5vZGU6dixvblZhbHVlTm9kZUNoYW5nZTp4LHZhbHVlTm9kZUhhc0NoaWxkcmVuOncsb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTprLGNvbnRlbnRJZDpHcigpLHZhbHVlOlAsb25WYWx1ZUNoYW5nZTpNLG9wZW46Uyxvbk9wZW5DaGFuZ2U6XyxkaXI6RSx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6QSxkaXNhYmxlZDpmfSxoLmNyZWF0ZUVsZW1lbnQoRXYuUHJvdmlkZXIse3Njb3BlOnR9LGguY3JlYXRlRWxlbWVudChzaWUse3Njb3BlOmUuX19zY29wZVNlbGVjdCxvbk5hdGl2ZU9wdGlvbkFkZDpoLnVzZUNhbGxiYWNrKEs9PntyZShDPT5uZXcgU2V0KEMpLmFkZChLKSl9LFtdKSxvbk5hdGl2ZU9wdGlvblJlbW92ZTpoLnVzZUNhbGxiYWNrKEs9PntyZShDPT57Y29uc3QgVD1uZXcgU2V0KEMpO3JldHVybiBULmRlbGV0ZShLKSxUfSl9LFtdKX0sbikpLEk/aC5jcmVhdGVFbGVtZW50KEJBLHtrZXk6ViwiYXJpYS1oaWRkZW4iOiEwLHJlcXVpcmVkOnAsdGFiSW5kZXg6LTEsbmFtZTp1LGF1dG9Db21wbGV0ZTpkLHZhbHVlOlAsb25DaGFuZ2U6Sz0+TShLLnRhcmdldC52YWx1ZSksZGlzYWJsZWQ6Zn0sUD09PXZvaWQgMD9oLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOiIifSk6bnVsbCxBcnJheS5mcm9tKEwpKTpudWxsKSl9LGNpZT0iU2VsZWN0VHJpZ2dlciIsdWllPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixkaXNhYmxlZDpyPSExLC4uLm99PWUsaT1adyhuKSxzPUNsKGNpZSxuKSxhPXMuZGlzYWJsZWR8fHIsbD1xZSh0LHMub25UcmlnZ2VyQ2hhbmdlKSxjPVh3KG4pLFt1LGQsZl09VUEobT0+e2NvbnN0IGc9YygpLmZpbHRlcih4PT4heC5kaXNhYmxlZCkseT1nLmZpbmQoeD0+eC52YWx1ZT09PXMudmFsdWUpLHY9VkEoZyxtLHkpO3YhPT12b2lkIDAmJnMub25WYWx1ZUNoYW5nZSh2LnZhbHVlKX0pLHA9KCk9PnthfHwocy5vbk9wZW5DaGFuZ2UoITApLGYoKSl9O3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoencsRih7YXNDaGlsZDohMH0saSksaC5jcmVhdGVFbGVtZW50KFJlLmJ1dHRvbixGKHt0eXBlOiJidXR0b24iLHJvbGU6ImNvbWJvYm94IiwiYXJpYS1jb250cm9scyI6cy5jb250ZW50SWQsImFyaWEtZXhwYW5kZWQiOnMub3BlbiwiYXJpYS1yZXF1aXJlZCI6cy5yZXF1aXJlZCwiYXJpYS1hdXRvY29tcGxldGUiOiJub25lIixkaXI6cy5kaXIsImRhdGEtc3RhdGUiOnMub3Blbj8ib3BlbiI6ImNsb3NlZCIsZGlzYWJsZWQ6YSwiZGF0YS1kaXNhYmxlZCI6YT8iIjp2b2lkIDAsImRhdGEtcGxhY2Vob2xkZXIiOkZBKHMudmFsdWUpPyIiOnZvaWQgMH0sbyx7cmVmOmwsb25DbGljazphZShvLm9uQ2xpY2ssbT0+e20uY3VycmVudFRhcmdldC5mb2N1cygpfSksb25Qb2ludGVyRG93bjphZShvLm9uUG9pbnRlckRvd24sbT0+e2NvbnN0IGc9bS50YXJnZXQ7Zy5oYXNQb2ludGVyQ2FwdHVyZShtLnBvaW50ZXJJZCkmJmcucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG0ucG9pbnRlcklkKSxtLmJ1dHRvbj09PTAmJm0uY3RybEtleT09PSExJiYocCgpLHMudHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ9e3g6TWF0aC5yb3VuZChtLnBhZ2VYKSx5Ok1hdGgucm91bmQobS5wYWdlWSl9LG0ucHJldmVudERlZmF1bHQoKSl9KSxvbktleURvd246YWUoby5vbktleURvd24sbT0+e2NvbnN0IGc9dS5jdXJyZW50IT09IiI7IShtLmN0cmxLZXl8fG0uYWx0S2V5fHxtLm1ldGFLZXkpJiZtLmtleS5sZW5ndGg9PT0xJiZkKG0ua2V5KSwhKGcmJm0ua2V5PT09IiAiKSYmbmllLmluY2x1ZGVzKG0ua2V5KSYmKHAoKSxtLnByZXZlbnREZWZhdWx0KCkpfSl9KSkpfSksZGllPSJTZWxlY3RWYWx1ZSIsZmllPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixjbGFzc05hbWU6cixzdHlsZTpvLGNoaWxkcmVuOmkscGxhY2Vob2xkZXI6cz0iIiwuLi5hfT1lLGw9Q2woZGllLG4pLHtvblZhbHVlTm9kZUhhc0NoaWxkcmVuQ2hhbmdlOmN9PWwsdT1pIT09dm9pZCAwLGQ9cWUodCxsLm9uVmFsdWVOb2RlQ2hhbmdlKTtyZXR1cm4gUHIoKCk9PntjKHUpfSxbYyx1XSksaC5jcmVhdGVFbGVtZW50KFJlLnNwYW4sRih7fSxhLHtyZWY6ZCxzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9fSksRkEobC52YWx1ZSk/aC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxzKTppKX0pLHBpZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sY2hpbGRyZW46ciwuLi5vfT1lO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoUmUuc3BhbixGKHsiYXJpYS1oaWRkZW4iOiEwfSxvLHtyZWY6dH0pLHJ8fCLilrwiKX0pLGhpZT1lPT5oLmNyZWF0ZUVsZW1lbnQoeXYsRih7YXNDaGlsZDohMH0sZSkpLHR1PSJTZWxlY3RDb250ZW50IixtaWU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3Qgbj1DbCh0dSxlLl9fc2NvcGVTZWxlY3QpLFtyLG9dPWgudXNlU3RhdGUoKTtpZihQcigoKT0+e28obmV3IERvY3VtZW50RnJhZ21lbnQpfSxbXSksIW4ub3Blbil7Y29uc3QgaT1yO3JldHVybiBpPyRyLmNyZWF0ZVBvcnRhbChoLmNyZWF0ZUVsZW1lbnQoakEse3Njb3BlOmUuX19zY29wZVNlbGVjdH0saC5jcmVhdGVFbGVtZW50KEV2LlNsb3Qse3Njb3BlOmUuX19zY29wZVNlbGVjdH0saC5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsZS5jaGlsZHJlbikpKSxpKTpudWxsfXJldHVybiBoLmNyZWF0ZUVsZW1lbnQoZ2llLEYoe30sZSx7cmVmOnR9KSl9KSx4aT0xMCxbakEsX3ZdPXZ1KHR1KSxnaWU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLHBvc2l0aW9uOnI9Iml0ZW0tYWxpZ25lZCIsb25DbG9zZUF1dG9Gb2N1czpvLG9uRXNjYXBlS2V5RG93bjppLG9uUG9pbnRlckRvd25PdXRzaWRlOnMsc2lkZTphLHNpZGVPZmZzZXQ6bCxhbGlnbjpjLGFsaWduT2Zmc2V0OnUsYXJyb3dQYWRkaW5nOmQsY29sbGlzaW9uQm91bmRhcnk6Zixjb2xsaXNpb25QYWRkaW5nOnAsc3RpY2t5Om0saGlkZVdoZW5EZXRhY2hlZDpnLGF2b2lkQ29sbGlzaW9uczp5LC4uLnZ9PWUseD1DbCh0dSxuKSxbdyxrXT1oLnVzZVN0YXRlKG51bGwpLFtFLFNdPWgudXNlU3RhdGUobnVsbCksXz1xZSh0LFE9PmsoUSkpLFtQLE1dPWgudXNlU3RhdGUobnVsbCksW0EsSV09aC51c2VTdGF0ZShudWxsKSxMPVh3KG4pLFtyZSxWXT1oLnVzZVN0YXRlKCExKSxLPWgudXNlUmVmKCExKTtoLnVzZUVmZmVjdCgoKT0+e2lmKHcpcmV0dXJuIGh2KHcpfSxbd10pLGd2KCk7Y29uc3QgQz1oLnVzZUNhbGxiYWNrKFE9Pntjb25zdFt0dCwuLi5udF09TCgpLm1hcChHZT0+R2UucmVmLmN1cnJlbnQpLFtydF09bnQuc2xpY2UoLTEpLFBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IEdlIG9mIFEpaWYoR2U9PT1QZXx8KEdlPT1udWxsfHxHZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QifSksR2U9PT10dCYmRSYmKEUuc2Nyb2xsVG9wPTApLEdlPT09cnQmJkUmJihFLnNjcm9sbFRvcD1FLnNjcm9sbEhlaWdodCksR2U9PW51bGx8fEdlLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PVBlKSlyZXR1cm59LFtMLEVdKSxUPWgudXNlQ2FsbGJhY2soKCk9PkMoW1Asd10pLFtDLFAsd10pO2gudXNlRWZmZWN0KCgpPT57cmUmJlQoKX0sW3JlLFRdKTtjb25zdHtvbk9wZW5DaGFuZ2U6Tyx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6Un09eDtoLnVzZUVmZmVjdCgoKT0+e2lmKHcpe2xldCBRPXt4OjAseTowfTtjb25zdCB0dD1ydD0+e3ZhciBQZSxHZSxUbix6bjtRPXt4Ok1hdGguYWJzKE1hdGgucm91bmQocnQucGFnZVgpLSgoUGU9KEdlPVIuY3VycmVudCk9PT1udWxsfHxHZT09PXZvaWQgMD92b2lkIDA6R2UueCkhPT1udWxsJiZQZSE9PXZvaWQgMD9QZTowKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKHJ0LnBhZ2VZKS0oKFRuPSh6bj1SLmN1cnJlbnQpPT09bnVsbHx8em49PT12b2lkIDA/dm9pZCAwOnpuLnkpIT09bnVsbCYmVG4hPT12b2lkIDA/VG46MCkpfX0sbnQ9cnQ9PntRLng8PTEwJiZRLnk8PTEwP3J0LnByZXZlbnREZWZhdWx0KCk6dy5jb250YWlucyhydC50YXJnZXQpfHxPKCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsdHQpLFIuY3VycmVudD1udWxsfTtyZXR1cm4gUi5jdXJyZW50IT09bnVsbCYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0dCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixudCx7Y2FwdHVyZTohMCxvbmNlOiEwfSkpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHR0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLG50LHtjYXB0dXJlOiEwfSl9fX0sW3csTyxSXSksaC51c2VFZmZlY3QoKCk9Pntjb25zdCBRPSgpPT5PKCExKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFEpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFEpfX0sW09dKTtjb25zdFtOLGpdPVVBKFE9Pntjb25zdCB0dD1MKCkuZmlsdGVyKFBlPT4hUGUuZGlzYWJsZWQpLG50PXR0LmZpbmQoUGU9PlBlLnJlZi5jdXJyZW50PT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkscnQ9VkEodHQsUSxudCk7cnQmJnNldFRpbWVvdXQoKCk9PnJ0LnJlZi5jdXJyZW50LmZvY3VzKCkpfSksRz1oLnVzZUNhbGxiYWNrKChRLHR0LG50KT0+e2NvbnN0IHJ0PSFLLmN1cnJlbnQmJiFudDsoeC52YWx1ZSE9PXZvaWQgMCYmeC52YWx1ZT09PXR0fHxydCkmJihNKFEpLHJ0JiYoSy5jdXJyZW50PSEwKSl9LFt4LnZhbHVlXSkseGU9aC51c2VDYWxsYmFjaygoKT0+dz09bnVsbD92b2lkIDA6dy5mb2N1cygpLFt3XSksdWU9aC51c2VDYWxsYmFjaygoUSx0dCxudCk9Pntjb25zdCBydD0hSy5jdXJyZW50JiYhbnQ7KHgudmFsdWUhPT12b2lkIDAmJngudmFsdWU9PT10dHx8cnQpJiZJKFEpfSxbeC52YWx1ZV0pLGplPXI9PT0icG9wcGVyIj9HQzp2aWUsQ2U9amU9PT1HQz97c2lkZTphLHNpZGVPZmZzZXQ6bCxhbGlnbjpjLGFsaWduT2Zmc2V0OnUsYXJyb3dQYWRkaW5nOmQsY29sbGlzaW9uQm91bmRhcnk6Zixjb2xsaXNpb25QYWRkaW5nOnAsc3RpY2t5Om0saGlkZVdoZW5EZXRhY2hlZDpnLGF2b2lkQ29sbGlzaW9uczp5fTp7fTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGpBLHtzY29wZTpuLGNvbnRlbnQ6dyx2aWV3cG9ydDpFLG9uVmlld3BvcnRDaGFuZ2U6UyxpdGVtUmVmQ2FsbGJhY2s6RyxzZWxlY3RlZEl0ZW06UCxvbkl0ZW1MZWF2ZTp4ZSxpdGVtVGV4dFJlZkNhbGxiYWNrOnVlLGZvY3VzU2VsZWN0ZWRJdGVtOlQsc2VsZWN0ZWRJdGVtVGV4dDpBLHBvc2l0aW9uOnIsaXNQb3NpdGlvbmVkOnJlLHNlYXJjaFJlZjpOfSxoLmNyZWF0ZUVsZW1lbnQoYnYse2FzOkFpLGFsbG93UGluY2hab29tOiEwfSxoLmNyZWF0ZUVsZW1lbnQodnYse2FzQ2hpbGQ6ITAsdHJhcHBlZDp4Lm9wZW4sb25Nb3VudEF1dG9Gb2N1czpRPT57US5wcmV2ZW50RGVmYXVsdCgpfSxvblVubW91bnRBdXRvRm9jdXM6YWUobyxRPT57dmFyIHR0Oyh0dD14LnRyaWdnZXIpPT09bnVsbHx8dHQ9PT12b2lkIDB8fHR0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksUS5wcmV2ZW50RGVmYXVsdCgpfSl9LGguY3JlYXRlRWxlbWVudChtdix7YXNDaGlsZDohMCxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITAsb25Fc2NhcGVLZXlEb3duOmksb25Qb2ludGVyRG93bk91dHNpZGU6cyxvbkZvY3VzT3V0c2lkZTpRPT5RLnByZXZlbnREZWZhdWx0KCksb25EaXNtaXNzOigpPT54Lm9uT3BlbkNoYW5nZSghMSl9LGguY3JlYXRlRWxlbWVudChqZSxGKHtyb2xlOiJsaXN0Ym94IixpZDp4LmNvbnRlbnRJZCwiZGF0YS1zdGF0ZSI6eC5vcGVuPyJvcGVuIjoiY2xvc2VkIixkaXI6eC5kaXIsb25Db250ZXh0TWVudTpRPT5RLnByZXZlbnREZWZhdWx0KCl9LHYsQ2Use29uUGxhY2VkOigpPT5WKCEwKSxyZWY6XyxzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixvdXRsaW5lOiJub25lIiwuLi52LnN0eWxlfSxvbktleURvd246YWUodi5vbktleURvd24sUT0+e2NvbnN0IHR0PVEuY3RybEtleXx8US5hbHRLZXl8fFEubWV0YUtleTtpZihRLmtleT09PSJUYWIiJiZRLnByZXZlbnREZWZhdWx0KCksIXR0JiZRLmtleS5sZW5ndGg9PT0xJiZqKFEua2V5KSxbIkFycm93VXAiLCJBcnJvd0Rvd24iLCJIb21lIiwiRW5kIl0uaW5jbHVkZXMoUS5rZXkpKXtsZXQgcnQ9TCgpLmZpbHRlcihQZT0+IVBlLmRpc2FibGVkKS5tYXAoUGU9PlBlLnJlZi5jdXJyZW50KTtpZihbIkFycm93VXAiLCJFbmQiXS5pbmNsdWRlcyhRLmtleSkmJihydD1ydC5zbGljZSgpLnJldmVyc2UoKSksWyJBcnJvd1VwIiwiQXJyb3dEb3duIl0uaW5jbHVkZXMoUS5rZXkpKXtjb25zdCBQZT1RLnRhcmdldCxHZT1ydC5pbmRleE9mKFBlKTtydD1ydC5zbGljZShHZSsxKX1zZXRUaW1lb3V0KCgpPT5DKHJ0KSksUS5wcmV2ZW50RGVmYXVsdCgpfX0pfSkpKSkpKX0pLHZpZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sb25QbGFjZWQ6ciwuLi5vfT1lLGk9Q2wodHUsbikscz1fdih0dSxuKSxbYSxsXT1oLnVzZVN0YXRlKG51bGwpLFtjLHVdPWgudXNlU3RhdGUobnVsbCksZD1xZSh0LF89PnUoXykpLGY9WHcobikscD1oLnVzZVJlZighMSksbT1oLnVzZVJlZighMCkse3ZpZXdwb3J0Omcsc2VsZWN0ZWRJdGVtOnksc2VsZWN0ZWRJdGVtVGV4dDp2LGZvY3VzU2VsZWN0ZWRJdGVtOnh9PXMsdz1oLnVzZUNhbGxiYWNrKCgpPT57aWYoaS50cmlnZ2VyJiZpLnZhbHVlTm9kZSYmYSYmYyYmZyYmeSYmdil7Y29uc3QgXz1pLnRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLE09aS52YWx1ZU5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQT12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGkuZGlyIT09InJ0bCIpe2NvbnN0IFBlPUEubGVmdC1QLmxlZnQsR2U9TS5sZWZ0LVBlLFRuPV8ubGVmdC1HZSx6bj1fLndpZHRoK1RuLHhuPU1hdGgubWF4KHpuLFAud2lkdGgpLHFpPXdpbmRvdy5pbm5lcldpZHRoLXhpLHBhPXJ4KEdlLFt4aSxxaS14bl0pO2Euc3R5bGUubWluV2lkdGg9em4rInB4IixhLnN0eWxlLmxlZnQ9cGErInB4In1lbHNle2NvbnN0IFBlPVAucmlnaHQtQS5yaWdodCxHZT13aW5kb3cuaW5uZXJXaWR0aC1NLnJpZ2h0LVBlLFRuPXdpbmRvdy5pbm5lcldpZHRoLV8ucmlnaHQtR2Usem49Xy53aWR0aCtUbix4bj1NYXRoLm1heCh6bixQLndpZHRoKSxxaT13aW5kb3cuaW5uZXJXaWR0aC14aSxwYT1yeChHZSxbeGkscWkteG5dKTthLnN0eWxlLm1pbldpZHRoPXpuKyJweCIsYS5zdHlsZS5yaWdodD1wYSsicHgifWNvbnN0IEk9ZigpLEw9d2luZG93LmlubmVySGVpZ2h0LXhpKjIscmU9Zy5zY3JvbGxIZWlnaHQsVj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKSxLPXBhcnNlSW50KFYuYm9yZGVyVG9wV2lkdGgsMTApLEM9cGFyc2VJbnQoVi5wYWRkaW5nVG9wLDEwKSxUPXBhcnNlSW50KFYuYm9yZGVyQm90dG9tV2lkdGgsMTApLE89cGFyc2VJbnQoVi5wYWRkaW5nQm90dG9tLDEwKSxSPUsrQytyZStPK1QsTj1NYXRoLm1pbih5Lm9mZnNldEhlaWdodCo1LFIpLGo9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZyksRz1wYXJzZUludChqLnBhZGRpbmdUb3AsMTApLHhlPXBhcnNlSW50KGoucGFkZGluZ0JvdHRvbSwxMCksdWU9Xy50b3ArXy5oZWlnaHQvMi14aSxqZT1MLXVlLENlPXkub2Zmc2V0SGVpZ2h0LzIsUT15Lm9mZnNldFRvcCtDZSx0dD1LK0MrUSxudD1SLXR0O2lmKHR0PD11ZSl7Y29uc3QgUGU9eT09PUlbSS5sZW5ndGgtMV0ucmVmLmN1cnJlbnQ7YS5zdHlsZS5ib3R0b209IjBweCI7Y29uc3QgR2U9Yy5jbGllbnRIZWlnaHQtZy5vZmZzZXRUb3AtZy5vZmZzZXRIZWlnaHQsVG49TWF0aC5tYXgoamUsQ2UrKFBlP3hlOjApK0dlK1QpLHpuPXR0K1RuO2Euc3R5bGUuaGVpZ2h0PXpuKyJweCJ9ZWxzZXtjb25zdCBQZT15PT09SVswXS5yZWYuY3VycmVudDthLnN0eWxlLnRvcD0iMHB4Ijtjb25zdCBUbj1NYXRoLm1heCh1ZSxLK2cub2Zmc2V0VG9wKyhQZT9HOjApK0NlKStudDthLnN0eWxlLmhlaWdodD1UbisicHgiLGcuc2Nyb2xsVG9wPXR0LXVlK2cub2Zmc2V0VG9wfWEuc3R5bGUubWFyZ2luPWAke3hpfXB4IDBgLGEuc3R5bGUubWluSGVpZ2h0PU4rInB4IixhLnN0eWxlLm1heEhlaWdodD1MKyJweCIscj09bnVsbHx8cigpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cC5jdXJyZW50PSEwKX19LFtmLGkudHJpZ2dlcixpLnZhbHVlTm9kZSxhLGMsZyx5LHYsaS5kaXIscl0pO1ByKCgpPT53KCksW3ddKTtjb25zdFtrLEVdPWgudXNlU3RhdGUoKTtQcigoKT0+e2MmJkUod2luZG93LmdldENvbXB1dGVkU3R5bGUoYykuekluZGV4KX0sW2NdKTtjb25zdCBTPWgudXNlQ2FsbGJhY2soXz0+e18mJm0uY3VycmVudD09PSEwJiYodygpLHg9PW51bGx8fHgoKSxtLmN1cnJlbnQ9ITEpfSxbdyx4XSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudCh5aWUse3Njb3BlOm4sY29udGVudFdyYXBwZXI6YSxzaG91bGRFeHBhbmRPblNjcm9sbFJlZjpwLG9uU2Nyb2xsQnV0dG9uQ2hhbmdlOlN9LGguY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmwsc3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIscG9zaXRpb246ImZpeGVkIix6SW5kZXg6a319LGguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7fSxvLHtyZWY6ZCxzdHlsZTp7Ym94U2l6aW5nOiJib3JkZXItYm94IixtYXhIZWlnaHQ6IjEwMCUiLC4uLm8uc3R5bGV9fSkpKSl9KSxHQz1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sYWxpZ246cj0ic3RhcnQiLGNvbGxpc2lvblBhZGRpbmc6bz14aSwuLi5pfT1lLHM9Wncobik7cmV0dXJuIGguY3JlYXRlRWxlbWVudChGdyxGKHt9LHMsaSx7cmVmOnQsYWxpZ246cixjb2xsaXNpb25QYWRkaW5nOm8sc3R5bGU6e2JveFNpemluZzoiYm9yZGVyLWJveCIsLi4uaS5zdHlsZSwiLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjoidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pIiwiLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKSIsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtaGVpZ2h0KSIsIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKSIsIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci1oZWlnaHQpIn19KSl9KSxbeWllLHhpZV09dnUodHUse30pLFlDPSJTZWxlY3RWaWV3cG9ydCIsYmllPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lLG89X3YoWUMsbiksaT14aWUoWUMsbikscz1xZSh0LG8ub25WaWV3cG9ydENoYW5nZSksYT1oLnVzZVJlZigwKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxoLmNyZWF0ZUVsZW1lbnQoInN0eWxlIix7ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDoiW2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XXtzY3JvbGxiYXItd2lkdGg6bm9uZTstbXMtb3ZlcmZsb3ctc3R5bGU6bm9uZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt9W2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfSJ9fSksaC5jcmVhdGVFbGVtZW50KEV2LlNsb3Qse3Njb3BlOm59LGguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7ImRhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0IjoiIixyb2xlOiJwcmVzZW50YXRpb24ifSxyLHtyZWY6cyxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsb3ZlcmZsb3c6ImF1dG8iLC4uLnIuc3R5bGV9LG9uU2Nyb2xsOmFlKHIub25TY3JvbGwsbD0+e2NvbnN0IGM9bC5jdXJyZW50VGFyZ2V0LHtjb250ZW50V3JhcHBlcjp1LHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOmR9PWk7aWYoZCE9bnVsbCYmZC5jdXJyZW50JiZ1KXtjb25zdCBmPU1hdGguYWJzKGEuY3VycmVudC1jLnNjcm9sbFRvcCk7aWYoZj4wKXtjb25zdCBwPXdpbmRvdy5pbm5lckhlaWdodC14aSoyLG09cGFyc2VGbG9hdCh1LnN0eWxlLm1pbkhlaWdodCksZz1wYXJzZUZsb2F0KHUuc3R5bGUuaGVpZ2h0KSx5PU1hdGgubWF4KG0sZyk7aWYoeTxwKXtjb25zdCB2PXkrZix4PU1hdGgubWluKHAsdiksdz12LXg7dS5zdHlsZS5oZWlnaHQ9eCsicHgiLHUuc3R5bGUuYm90dG9tPT09IjBweCImJihjLnNjcm9sbFRvcD13PjA/dzowLHUuc3R5bGUuanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIil9fX1hLmN1cnJlbnQ9Yy5zY3JvbGxUb3B9KX0pKSkpfSksd2llPSJTZWxlY3RHcm91cCIsW1NpZSxraWVdPXZ1KHdpZSksRWllPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT1lLG89R3IoKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFNpZSx7c2NvcGU6bixpZDpvfSxoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoe3JvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbGxlZGJ5IjpvfSxyLHtyZWY6dH0pKSl9KSxfaWU9IlNlbGVjdExhYmVsIixDaWU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLC4uLnJ9PWUsbz1raWUoX2llLG4pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoUmUuZGl2LEYoe2lkOm8uaWR9LHIse3JlZjp0fSkpfSksbWI9IlNlbGVjdEl0ZW0iLFtPaWUsekFdPXZ1KG1iKSxUaWU9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLHZhbHVlOnIsZGlzYWJsZWQ6bz0hMSx0ZXh0VmFsdWU6aSwuLi5zfT1lLGE9Q2wobWIsbiksbD1fdihtYixuKSxjPWEudmFsdWU9PT1yLFt1LGRdPWgudXNlU3RhdGUoaT8/IiIpLFtmLHBdPWgudXNlU3RhdGUoITEpLG09cWUodCx2PT57dmFyIHg7cmV0dXJuKHg9bC5pdGVtUmVmQ2FsbGJhY2spPT09bnVsbHx8eD09PXZvaWQgMD92b2lkIDA6eC5jYWxsKGwsdixyLG8pfSksZz1HcigpLHk9KCk9PntvfHwoYS5vblZhbHVlQ2hhbmdlKHIpLGEub25PcGVuQ2hhbmdlKCExKSl9O2lmKHI9PT0iIil0aHJvdyBuZXcgRXJyb3IoIkEgPFNlbGVjdC5JdGVtIC8+IG11c3QgaGF2ZSBhIHZhbHVlIHByb3AgdGhhdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGJlY2F1c2UgdGhlIFNlbGVjdCB2YWx1ZSBjYW4gYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgc2VsZWN0aW9uIGFuZCBzaG93IHRoZSBwbGFjZWhvbGRlci4iKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KE9pZSx7c2NvcGU6bix2YWx1ZTpyLGRpc2FibGVkOm8sdGV4dElkOmcsaXNTZWxlY3RlZDpjLG9uSXRlbVRleHRDaGFuZ2U6aC51c2VDYWxsYmFjayh2PT57ZCh4PT57dmFyIHc7cmV0dXJuIHh8fCgodz12PT1udWxsP3ZvaWQgMDp2LnRleHRDb250ZW50KSE9PW51bGwmJnchPT12b2lkIDA/dzoiIikudHJpbSgpfSl9LFtdKX0saC5jcmVhdGVFbGVtZW50KEV2Lkl0ZW1TbG90LHtzY29wZTpuLHZhbHVlOnIsZGlzYWJsZWQ6byx0ZXh0VmFsdWU6dX0saC5jcmVhdGVFbGVtZW50KFJlLmRpdixGKHtyb2xlOiJvcHRpb24iLCJhcmlhLWxhYmVsbGVkYnkiOmcsImRhdGEtaGlnaGxpZ2h0ZWQiOmY/IiI6dm9pZCAwLCJhcmlhLXNlbGVjdGVkIjpjJiZmLCJkYXRhLXN0YXRlIjpjPyJjaGVja2VkIjoidW5jaGVja2VkIiwiYXJpYS1kaXNhYmxlZCI6b3x8dm9pZCAwLCJkYXRhLWRpc2FibGVkIjpvPyIiOnZvaWQgMCx0YWJJbmRleDpvP3ZvaWQgMDotMX0scyx7cmVmOm0sb25Gb2N1czphZShzLm9uRm9jdXMsKCk9PnAoITApKSxvbkJsdXI6YWUocy5vbkJsdXIsKCk9PnAoITEpKSxvblBvaW50ZXJVcDphZShzLm9uUG9pbnRlclVwLHkpLG9uUG9pbnRlck1vdmU6YWUocy5vblBvaW50ZXJNb3ZlLHY9PntpZihvKXt2YXIgeDsoeD1sLm9uSXRlbUxlYXZlKT09PW51bGx8fHg9PT12b2lkIDB8fHguY2FsbChsKX1lbHNlIHYuY3VycmVudFRhcmdldC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSksb25Qb2ludGVyTGVhdmU6YWUocy5vblBvaW50ZXJMZWF2ZSx2PT57aWYodi5jdXJyZW50VGFyZ2V0PT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl7dmFyIHg7KHg9bC5vbkl0ZW1MZWF2ZSk9PT1udWxsfHx4PT09dm9pZCAwfHx4LmNhbGwobCl9fSksb25LZXlEb3duOmFlKHMub25LZXlEb3duLHY9Pnt2YXIgeDsoKHg9bC5zZWFyY2hSZWYpPT09bnVsbHx8eD09PXZvaWQgMD92b2lkIDA6eC5jdXJyZW50KSE9PSIiJiZ2LmtleT09PSIgInx8KHJpZS5pbmNsdWRlcyh2LmtleSkmJnkoKSx2LmtleT09PSIgIiYmdi5wcmV2ZW50RGVmYXVsdCgpKX0pfSkpKSl9KSx0aD0iU2VsZWN0SXRlbVRleHQiLFBpZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sY2xhc3NOYW1lOnIsc3R5bGU6bywuLi5pfT1lLHM9Q2wodGgsbiksYT1fdih0aCxuKSxsPXpBKHRoLG4pLGM9YWllKHRoLG4pLFt1LGRdPWgudXNlU3RhdGUobnVsbCksZj1xZSh0LHY9PmQodiksbC5vbkl0ZW1UZXh0Q2hhbmdlLHY9Pnt2YXIgeDtyZXR1cm4oeD1hLml0ZW1UZXh0UmVmQ2FsbGJhY2spPT09bnVsbHx8eD09PXZvaWQgMD92b2lkIDA6eC5jYWxsKGEsdixsLnZhbHVlLGwuZGlzYWJsZWQpfSkscD11PT1udWxsP3ZvaWQgMDp1LnRleHRDb250ZW50LG09aC51c2VNZW1vKCgpPT5oLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse2tleTpsLnZhbHVlLHZhbHVlOmwudmFsdWUsZGlzYWJsZWQ6bC5kaXNhYmxlZH0scCksW2wuZGlzYWJsZWQsbC52YWx1ZSxwXSkse29uTmF0aXZlT3B0aW9uQWRkOmcsb25OYXRpdmVPcHRpb25SZW1vdmU6eX09YztyZXR1cm4gUHIoKCk9PihnKG0pLCgpPT55KG0pKSxbZyx5LG1dKSxoLmNyZWF0ZUVsZW1lbnQoaC5GcmFnbWVudCxudWxsLGguY3JlYXRlRWxlbWVudChSZS5zcGFuLEYoe2lkOmwudGV4dElkfSxpLHtyZWY6Zn0pKSxsLmlzU2VsZWN0ZWQmJnMudmFsdWVOb2RlJiYhcy52YWx1ZU5vZGVIYXNDaGlsZHJlbj8kci5jcmVhdGVQb3J0YWwoaS5jaGlsZHJlbixzLnZhbHVlTm9kZSk6bnVsbCl9KSxNaWU9IlNlbGVjdEl0ZW1JbmRpY2F0b3IiLFJpZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sLi4ucn09ZTtyZXR1cm4gekEoTWllLG4pLmlzU2VsZWN0ZWQ/aC5jcmVhdGVFbGVtZW50KFJlLnNwYW4sRih7ImFyaWEtaGlkZGVuIjohMH0scix7cmVmOnR9KSk6bnVsbH0pLE5pZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sLi4ucn09ZTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFJlLmRpdixGKHsiYXJpYS1oaWRkZW4iOiEwfSxyLHtyZWY6dH0pKX0pO2Z1bmN0aW9uIEZBKGUpe3JldHVybiBlPT09IiJ8fGU9PT12b2lkIDB9Y29uc3QgQkE9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7dmFsdWU6biwuLi5yfT1lLG89aC51c2VSZWYobnVsbCksaT1xZSh0LG8pLHM9TEEobik7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57Y29uc3QgYT1vLmN1cnJlbnQsbD13aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLCJ2YWx1ZSIpLnNldDtpZihzIT09biYmdSl7Y29uc3QgZD1uZXcgRXZlbnQoImNoYW5nZSIse2J1YmJsZXM6ITB9KTt1LmNhbGwoYSxuKSxhLmRpc3BhdGNoRXZlbnQoZCl9fSxbcyxuXSksaC5jcmVhdGVFbGVtZW50KHRpZSx7YXNDaGlsZDohMH0saC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLEYoe30scix7cmVmOmksZGVmYXVsdFZhbHVlOm59KSkpfSk7QkEuZGlzcGxheU5hbWU9IkJ1YmJsZVNlbGVjdCI7ZnVuY3Rpb24gVUEoZSl7Y29uc3QgdD1wbihlKSxuPWgudXNlUmVmKCIiKSxyPWgudXNlUmVmKDApLG89aC51c2VDYWxsYmFjayhzPT57Y29uc3QgYT1uLmN1cnJlbnQrczt0KGEpLGZ1bmN0aW9uIGwoYyl7bi5jdXJyZW50PWMsd2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLGMhPT0iIiYmKHIuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+bCgiIiksMWUzKSl9KGEpfSxbdF0pLGk9aC51c2VDYWxsYmFjaygoKT0+e24uY3VycmVudD0iIix3aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCl9LFtdKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCksW10pLFtuLG8saV19ZnVuY3Rpb24gVkEoZSx0LG4pe2NvbnN0IG89dC5sZW5ndGg+MSYmQXJyYXkuZnJvbSh0KS5ldmVyeShjPT5jPT09dFswXSk/dFswXTp0LGk9bj9lLmluZGV4T2Yobik6LTE7bGV0IHM9JGllKGUsTWF0aC5tYXgoaSwwKSk7by5sZW5ndGg9PT0xJiYocz1zLmZpbHRlcihjPT5jIT09bikpO2NvbnN0IGw9cy5maW5kKGM9PmMudGV4dFZhbHVlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gbCE9PW4/bDp2b2lkIDB9ZnVuY3Rpb24gJGllKGUsdCl7cmV0dXJuIGUubWFwKChuLHIpPT5lWyh0K3IpJWUubGVuZ3RoXSl9Y29uc3QgQWllPWxpZSxIQT11aWUsRGllPWZpZSxJaWU9cGllLExpZT1oaWUsV0E9bWllLGppZT1iaWUsemllPUVpZSxLQT1DaWUscUE9VGllLEZpZT1QaWUsQmllPVJpZSxHQT1OaWUsWUE9QWllLFVpZT16aWUsWEE9RGllLEp3PWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PmIuanN4cyhIQSx7cmVmOnIsY2xhc3NOYW1lOlVlKCJmbGV4IGgtMTAgdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJpbmcgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCIsZSksLi4ubixjaGlsZHJlbjpbdCxiLmpzeChJaWUse2FzQ2hpbGQ6ITAsY2hpbGRyZW46Yi5qc3goTWcse2NsYXNzTmFtZToidy00IGgtNCBvcGFjaXR5LTUwIn0pfSldfSkpO0p3LmRpc3BsYXlOYW1lPUhBLmRpc3BsYXlOYW1lO2NvbnN0IFF3PWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQscG9zaXRpb246bj0icG9wcGVyIiwuLi5yfSxvKT0+Yi5qc3goTGllLHtjaGlsZHJlbjpiLmpzeChXQSx7cmVmOm8sY2xhc3NOYW1lOlVlKCJyZWxhdGl2ZSB6LTUwIG1pbi13LVs4cmVtXSBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIixuPT09InBvcHBlciImJiJkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xIixlKSxwb3NpdGlvbjpuLC4uLnIsY2hpbGRyZW46Yi5qc3goamllLHtjbGFzc05hbWU6VWUoInAtMSIsbj09PSJwb3BwZXIiJiYiaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIiksY2hpbGRyZW46dH0pfSl9KSk7UXcuZGlzcGxheU5hbWU9V0EuZGlzcGxheU5hbWU7Y29uc3QgVmllPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeChLQSx7cmVmOm4sY2xhc3NOYW1lOlVlKCJweS0xLjUgcGwtOCBwci0yIHRleHQtc20gZm9udC1zZW1pYm9sZCIsZSksLi4udH0pKTtWaWUuZGlzcGxheU5hbWU9S0EuZGlzcGxheU5hbWU7Y29uc3QgZVM9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCwuLi5ufSxyKT0+Yi5qc3hzKHFBLHtyZWY6cixjbGFzc05hbWU6VWUoInJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB5LTEuNSBwbC04IHByLTIgdGV4dC1zbSBvdXRsaW5lLW5vbmUgZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAiLGUpLC4uLm4sY2hpbGRyZW46W2IuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBsZWZ0LTIgZmxleCBoLTMuNSB3LTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiLGNoaWxkcmVuOmIuanN4KEJpZSx7Y2hpbGRyZW46Yi5qc3goRTEse2NsYXNzTmFtZToidy00IGgtNCJ9KX0pfSksYi5qc3goRmllLHtjaGlsZHJlbjp0fSldfSkpO2VTLmRpc3BsYXlOYW1lPXFBLmRpc3BsYXlOYW1lO2NvbnN0IEhpZT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+Yi5qc3goR0Ese3JlZjpuLGNsYXNzTmFtZTpVZSgiLW14LTEgbXktMSBoLXB4IGJnLW11dGVkIixlKSwuLi50fSkpO0hpZS5kaXNwbGF5TmFtZT1HQS5kaXNwbGF5TmFtZTtmdW5jdGlvbiBaQSh7cGF0aDplLGRpc2FibGVkOnQsc291cmNlOm4sc2NoZW1hOnIsb25TdWJtaXQ6b30pe2lmKCh0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ic3RyaW5nIilyZXR1cm4gYi5qc3goUWllLHtwYXRoOmUsZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6dCxzY2hlbWE6cixvblN1Ym1pdDpvfSk7aWYoKHR5cGVvZiBuPT0ibnVtYmVyInx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJudW1iZXIiKXJldHVybiBiLmpzeChaQyx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6dCxvblN1Ym1pdDpvfSk7aWYoKHR5cGVvZiBuPT0ibnVtYmVyInx8dHlwZW9mIG49PSJzdHJpbmcifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09ImtleU9mIilyZXR1cm4gYi5qc3goWEMse2RlZmF1bHRWYWx1ZTpuLGRpc2FibGVkOnQsb25TdWJtaXQ6byxzZWxlY3RvcjpyLnBhdGh9KTtpZigodHlwZW9mIG49PSJudW1iZXIifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09Im51bWJlciIpcmV0dXJuIGIuanN4KFpDLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDp0LG9uU3VibWl0Om99KTtpZigodHlwZW9mIG49PSJudW1iZXIifHx0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ia2V5T2YiKXJldHVybiBiLmpzeChYQyx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6dCxvblN1Ym1pdDpvLHNlbGVjdG9yOnIucGF0aH0pO2lmKCh0eXBlb2Ygbj09Im9iamVjdCJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0icmljaHRleHQiKXJldHVybiBiLmpzeChKaWUse3NjaGVtYTpyLG9uU3VibWl0Om8sZGVmYXVsdFZhbHVlOm59KTtpZigodHlwZW9mIG49PSJvYmplY3QifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09ImltYWdlIilyZXR1cm4gYi5qc3goWGllLHtwYXRoOmUsb25TdWJtaXQ6byxkZWZhdWx0VmFsdWU6bn0pO2lmKCh0eXBlb2Ygbj09Im9iamVjdCJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0iZmlsZSIpcmV0dXJuIGIuanN4KFlpZSx7cGF0aDplLG9uU3VibWl0Om8sZGVmYXVsdFZhbHVlOm59KTtpZigodHlwZW9mIG49PSJzdHJpbmcifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09InVuaW9uIiYmdHlwZW9mIHIua2V5IT0ic3RyaW5nIilpZihyLmtleS50eXBlIT09ImxpdGVyYWwiKWNvbnNvbGUuZXJyb3IoIlZhbDogZm91bmQgdW5pb24gd2l0aCBub24tbGl0ZXJhbCBrZXkgdHlwZS4gQ2hlY2sgc2NoZW1hIGNvcnJlc3BvbmRpbmcgdG8gcGF0aDoiLGUpO2Vsc2UgcmV0dXJuIGIuanN4KFdpZSx7cGF0aDplLG9wdGlvbnM6ci5pdGVtcy5mbGF0TWFwKGk9PmkudHlwZT09PSJsaXRlcmFsIj9baS52YWx1ZV06W10pLG9uU3VibWl0Om8sZGVmYXVsdFZhbHVlOm59KTtyZXR1cm4gYi5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIlVuc3VwcG9ydGVkIHNjaGVtYTogIixyLnR5cGUsIiAoc291cmNlIHR5cGU6ICIsdHlwZW9mIG4sIiBzb3VyY2U6IiwiICIsSlNPTi5zdHJpbmdpZnkobiksIikiXX0pfWZ1bmN0aW9uIFdpZSh7b25TdWJtaXQ6ZSxvcHRpb25zOnQsZGVmYXVsdFZhbHVlOm59KXtjb25zdFtyLG9dPWgudXNlU3RhdGUoKTtoLnVzZUVmZmVjdCgoKT0+e2NvbnNvbGUubG9nKHtkZWZhdWx0VmFsdWU6bn0pLG4hPW51bGwmJm8obil9LFtuXSk7Y29uc3RbaSxzXT1oLnVzZVN0YXRlKCExKTtyZXR1cm4gYi5qc3hzKGZhLHtjaGlsZHJlbjpbYi5qc3hzKFlBLHt2YWx1ZTpyLG9uVmFsdWVDaGFuZ2U6YT0+byhhKSxjaGlsZHJlbjpbYi5qc3goSncse2NsYXNzTmFtZToidy1bMTgwcHhdIixjaGlsZHJlbjpiLmpzeChYQSx7cGxhY2Vob2xkZXI6IlNlbGVjdCJ9KX0pLGIuanN4KFF3LHtjaGlsZHJlbjpiLmpzeChVaWUse2NoaWxkcmVuOnQubWFwKGE9PmIuanN4KGVTLHt2YWx1ZTphLGNoaWxkcmVuOmF9LGEpKX0pfSldfSksZSYmYi5qc3goT2wse2xvYWRpbmc6aSxlbmFibGVkOiEhciYmdC5pbmNsdWRlcyhyKSxvbkNsaWNrOigpPT57ciYmKHMoITApLGUoYT0+UHJvbWlzZS5yZXNvbHZlKEtpZShhLHIpKSkuZmluYWxseSgoKT0+e3MoITEpfSkpfX0pXX0pfWZ1bmN0aW9uIEtpZShlLHQpe3JldHVyblt7dmFsdWU6dCxvcDoicmVwbGFjZSIscGF0aDplfV19ZnVuY3Rpb24gSkEoZSx0LG4scil7Y29uc3Qgbz16TSh0LG4scik7cmV0dXJuIW98fCFyP1tdOlt7dmFsdWU6e1tDbl06YC9wdWJsaWMvJHtvfWAsW21uXToiZmlsZSIsbWV0YWRhdGE6cn0sb3A6InJlcGxhY2UiLHBhdGg6ZX0se3ZhbHVlOnQsb3A6ImZpbGUiLHBhdGg6ZSxmaWxlUGF0aDpgL3B1YmxpYy8ke299YH1dfWZ1bmN0aW9uIFFBKGUsdCl7Y29uc3Qgbj1lLmNvbmNhdCgibWV0YWRhdGEiKTtyZXR1cm5be3ZhbHVlOnQsb3A6InJlcGxhY2UiLHBhdGg6bn1dfWNvbnN0IHFpZT1uZXcgVGV4dEVuY29kZXI7ZnVuY3Rpb24gR2llKGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e3ZhciBpO2NvbnN0IHI9KGk9ZS5jdXJyZW50VGFyZ2V0LmZpbGVzKT09bnVsbD92b2lkIDA6aVswXSxvPW5ldyBGaWxlUmVhZGVyO28uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKCk9Pntjb25zdCBzPW8ucmVzdWx0O2lmKHR5cGVvZiBzPT0ic3RyaW5nIil7Y29uc3QgYT1vdC5nZXRTSEEyNTZIYXNoKHFpZS5lbmNvZGUocykpLGw9SGcocyk7dCh7c3JjOnMsZmlsZW5hbWU6cj09bnVsbD92b2lkIDA6ci5uYW1lLHNoYTI1NjphLG1pbWVUeXBlOmwsZmlsZUV4dDpsJiZXZyhsKX0pfWVsc2UgbihzP3ttZXNzYWdlOiJVbmV4cGVjdGVkIGZpbGUgcmVzdWx0IHR5cGUiLHJlc3VsdDpzfTp7bWVzc2FnZToiRW1wdHkgcmVzdWx0In0pfSksciYmby5yZWFkQXNEYXRhVVJMKHIpfSl9ZnVuY3Rpb24gWWllKHtwYXRoOmUsZGVmYXVsdFZhbHVlOnQsb25TdWJtaXQ6bn0pe3ZhciBkLGY7Y29uc3RbcixvXT1oLnVzZVN0YXRlKG51bGwpLFtpLHNdPWgudXNlU3RhdGUoITEpLFthLGxdPWgudXNlU3RhdGUoKSxbYyx1XT1oLnVzZVN0YXRlKCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57Y29uc3QgcD10JiZvdC5jb252ZXJ0RmlsZVNvdXJjZSh0KS51cmw7dShwKX0sW3RdKSxiLmpzeHMoZmEse2NoaWxkcmVuOltiLmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1maXQiLGNoaWxkcmVuOltiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGp1c3RpZnktc3RhcnQgcC0yIGJvcmRlciBib3JkZXItYi0wIHJvdW5kZWQtc20gcm91bmRlZC1iLW5vbmUgZ2FwLXktNCBiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZCBib3JkZXItaW5wdXQiLGNoaWxkcmVuOnJ8fGM/Yi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIG1pbi1oLVsxMDBweF0gbWluLXctWzIwMHB4XSIsY2hpbGRyZW46W2IuanN4KCJkaXYiLHtjaGlsZHJlbjpiLmpzeChZNCx7fSl9KSxiLmpzeCgiZGl2Iix7Y2hpbGRyZW46cj09bnVsbD92b2lkIDA6ci5maWxlbmFtZX0pXX0pOmIuanN4KCJkaXYiLHtjaGlsZHJlbjoiU2VsZWN0IGZpbGUgYmVsb3cifSl9LGUpLGIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgYm9yZGVyIGJvcmRlci10LTAgcm91bmRlZC1iLXNtIGJnLWJhY2tncm91bmQgYm9yZGVyLWlucHV0IixjaGlsZHJlbjpbYi5qc3goImxhYmVsIix7aHRtbEZvcjpgaW1nX2lucHV0OiR7ZX1gLGNsYXNzTmFtZToiYmxvY2sgcHgtMSBweS0yIHRleHQtc20gdGV4dC1jZW50ZXIgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBiZy1wcmltYXJ5IHRleHQtYmFja2dyb3VuZCIsY2hpbGRyZW46IlVwZGF0ZSJ9KSxiLmpzeCgiaW5wdXQiLHtoaWRkZW46ITAsaWQ6YGltZ19pbnB1dDoke2V9YCx0eXBlOiJmaWxlIixvbkNoYW5nZTpwPT57R2llKHApLnRoZW4obT0+e28oe3NyYzptLnNyYyxmaWxlbmFtZTptLmZpbGVuYW1lfSksbS5taW1lVHlwZT9sKHtzaGEyNTY6bS5zaGEyNTYsbWltZVR5cGU6bS5taW1lVHlwZX0pOmwodm9pZCAwKX0pLmNhdGNoKG09Pntjb25zb2xlLmVycm9yKG0ubWVzc2FnZSksbyhudWxsKSxsKHZvaWQgMCl9KX19KV19KV19KSxuJiZiLmpzeChPbCx7bG9hZGluZzppLGVuYWJsZWQ6ISFyfHwoKGQ9dD09bnVsbD92b2lkIDA6dC5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOmQubWltZVR5cGUpIT09KGE9PW51bGw/dm9pZCAwOmEubWltZVR5cGUpfHwoKGY9dD09bnVsbD92b2lkIDA6dC5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOmYuc2hhMjU2KSE9PShhPT1udWxsP3ZvaWQgMDphLnNoYTI1Niksb25DbGljazooKT0+e3I/KHMoITApLG4ocD0+UHJvbWlzZS5yZXNvbHZlKEpBKHAsci5zcmMsci5maWxlbmFtZT8/bnVsbCxhKSkpLmZpbmFsbHkoKCk9PntzKCExKSxvKG51bGwpLGwodm9pZCAwKX0pKTphJiYocyghMCksbihwPT5Qcm9taXNlLnJlc29sdmUoUUEocCxhKSkpLmZpbmFsbHkoKCk9PntzKCExKSxvKG51bGwpLGwodm9pZCAwKX0pKX19KV19KX1mdW5jdGlvbiBYaWUoe3BhdGg6ZSxkZWZhdWx0VmFsdWU6dCxvblN1Ym1pdDpufSl7dmFyIHAsbSxnLHksdix4LHcsayxFLFMsXyxQO2NvbnN0W3Isb109aC51c2VTdGF0ZShudWxsKSxbaSxzXT1oLnVzZVN0YXRlKCExKSxbYSxsXT1oLnVzZVN0YXRlKCksW2MsdV09aC51c2VTdGF0ZSgpLFtkLGZdPWgudXNlU3RhdGUoKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntmKHQmJiIvYXBpL3ZhbC9maWxlcy9wdWJsaWMiK290LmNvbnZlcnRGaWxlU291cmNlKHQpLnVybCl9LFt0XSksaC51c2VFZmZlY3QoKCk9Pnt2YXIgTTtpZihjKWlmKGEpe2NvbnN0IEE9ey4uLmEsaG90c3BvdDpjfTtsKEEpfWVsc2UgdCE9bnVsbCYmdC5tZXRhZGF0YT9sKHsuLi50Lm1ldGFkYXRhLGhvdHNwb3Q6Y30pOmNvbnNvbGUuZXJyb3IoIk5laXRoZXIgaW1hZ2UgbWV0YWRhdGEgbm9yIHZhbHVlIGlzIHNldCIpO2Vsc2UoTT10PT1udWxsP3ZvaWQgMDp0Lm1ldGFkYXRhKSE9bnVsbCYmTS5ob3RzcG90JiZ1KHQubWV0YWRhdGEuaG90c3BvdCl9LFtjLHRdKSxiLmpzeHMoZmEse2NoaWxkcmVuOltiLmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1maXQiLGNoaWxkcmVuOltiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGp1c3RpZnktc3RhcnQgcC0yIGJvcmRlciBib3JkZXItYi0wIHJvdW5kZWQtc20gcm91bmRlZC1iLW5vbmUgZ2FwLXktNCBiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZCBib3JkZXItaW5wdXQiLGNoaWxkcmVuOnJ8fGQ/Yi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbYyYmYi5qc3goImRpdiIse2NsYXNzTmFtZToicm91bmRlZC1mdWxsIGgtWzEycHhdIHctWzEycHhdIGJnLWJhY2tncm91bmQgbWl4LWJsZW5kLWRpZmZlcmVuY2UgYm9yZGVyLWFjY2VudCBib3JkZXItMiBhYnNvbHV0ZSBwb2ludGVyLWV2ZW50cy1ub25lIixzdHlsZTp7dG9wOmAke2MueSoxMDB9JWAsbGVmdDpgJHtjLngqMTAwfSVgfX0pLGIuanN4KCJpbWciLHtzcmM6KHI9PW51bGw/dm9pZCAwOnIuc3JjKXx8ZCxkcmFnZ2FibGU6ITEsY2xhc3NOYW1lOiJvYmplY3QtY29udGFpbiB3LWZ1bGwgbWF4LWgtWzUwMHB4XSIsc3R5bGU6e2N1cnNvcjoiY3Jvc3NoYWlyIn0sb25DbGljazpNPT57Y29uc3R7d2lkdGg6QSxoZWlnaHQ6SSxsZWZ0OkwsdG9wOnJlfT1NLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksVj0oTS5jbGllbnRYLTYtTCkvQSxLPShNLmNsaWVudFktNi1yZSkvSTt1KHt4OlYseTpLLHdpZHRoOjEsaGVpZ2h0OjF9KX19KV19KTpiLmpzeCgiZGl2Iix7Y2hpbGRyZW46IlNlbGVjdCBpbWFnZSBiZWxvdyJ9KX0sZSksYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNCBib3JkZXIgYm9yZGVyLXQtMCByb3VuZGVkLWItc20gYmctYmFja2dyb3VuZCBib3JkZXItaW5wdXQiLGNoaWxkcmVuOltiLmpzeCgibGFiZWwiLHtodG1sRm9yOmBpbWdfaW5wdXQ6JHtlfWAsY2xhc3NOYW1lOiJibG9jayBweC0xIHB5LTIgdGV4dC1zbSB0ZXh0LWNlbnRlciByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGJnLXByaW1hcnkgdGV4dC1iYWNrZ3JvdW5kIixjaGlsZHJlbjoiVXBkYXRlIn0pLGIuanN4KCJpbnB1dCIse2hpZGRlbjohMCxpZDpgaW1nX2lucHV0OiR7ZX1gLHR5cGU6ImZpbGUiLG9uQ2hhbmdlOk09PntqTShNKS50aGVuKEE9PntvKHtzcmM6QS5zcmMsZmlsZW5hbWU6QS5maWxlbmFtZX0pLEEud2lkdGgmJkEuaGVpZ2h0JiZBLm1pbWVUeXBlP2woe3NoYTI1NjpBLnNoYTI1Nix3aWR0aDpBLndpZHRoLGhlaWdodDpBLmhlaWdodCxtaW1lVHlwZTpBLm1pbWVUeXBlLGhvdHNwb3Q6Y30pOihsKHZvaWQgMCksdSh2b2lkIDApKX0pLmNhdGNoKEE9Pntjb25zb2xlLmVycm9yKEEubWVzc2FnZSksbyhudWxsKSx1KHZvaWQgMCksbCh2b2lkIDApfSl9fSldfSldfSksbiYmYi5qc3goT2wse2xvYWRpbmc6aSxlbmFibGVkOiEhcnx8KChtPShwPXQ9PW51bGw/dm9pZCAwOnQubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDpwLmhvdHNwb3QpPT1udWxsP3ZvaWQgMDptLmhlaWdodCkhPT0oYz09bnVsbD92b2lkIDA6Yy5oZWlnaHQpfHwoKHk9KGc9dD09bnVsbD92b2lkIDA6dC5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOmcuaG90c3BvdCk9PW51bGw/dm9pZCAwOnkud2lkdGgpIT09KGM9PW51bGw/dm9pZCAwOmMud2lkdGgpfHwoKHg9KHY9dD09bnVsbD92b2lkIDA6dC5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOnYuaG90c3BvdCk9PW51bGw/dm9pZCAwOngueCkhPT0oYz09bnVsbD92b2lkIDA6Yy54KXx8KChrPSh3PXQ9PW51bGw/dm9pZCAwOnQubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDp3LmhvdHNwb3QpPT1udWxsP3ZvaWQgMDprLnkpIT09KGM9PW51bGw/dm9pZCAwOmMueSl8fCgoRT10PT1udWxsP3ZvaWQgMDp0Lm1ldGFkYXRhKT09bnVsbD92b2lkIDA6RS53aWR0aCkhPT0oYT09bnVsbD92b2lkIDA6YS53aWR0aCl8fCgoUz10PT1udWxsP3ZvaWQgMDp0Lm1ldGFkYXRhKT09bnVsbD92b2lkIDA6Uy5oZWlnaHQpIT09KGE9PW51bGw/dm9pZCAwOmEuaGVpZ2h0KXx8KChfPXQ9PW51bGw/dm9pZCAwOnQubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDpfLm1pbWVUeXBlKSE9PShhPT1udWxsP3ZvaWQgMDphLm1pbWVUeXBlKXx8KChQPXQ9PW51bGw/dm9pZCAwOnQubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDpQLnNoYTI1NikhPT0oYT09bnVsbD92b2lkIDA6YS5zaGEyNTYpLG9uQ2xpY2s6KCk9PntyPyhzKCEwKSxuKE09PlByb21pc2UucmVzb2x2ZShKQShNLHIuc3JjLHIuZmlsZW5hbWU/P251bGwsYSkpKS5maW5hbGx5KCgpPT57cyghMSl9KSk6YSYmKHMoITApLG4oTT0+UHJvbWlzZS5yZXNvbHZlKFFBKE0sYSkpKS5maW5hbGx5KCgpPT57cyghMSl9KSl9fSldfSl9ZnVuY3Rpb24gWmllKGUsdCl7Y29uc3R7dGVtcGxhdGVTdHJpbmdzOm4sZXhwcnM6cixmaWxlczpvfT10P1k4KHQpOntbbW5dOiJyaWNodGV4dCIsdGVtcGxhdGVTdHJpbmdzOlsiIl0sZXhwcnM6W10sZmlsZXM6e319O3JldHVyblt7b3A6InJlcGxhY2UiLHBhdGg6ZSx2YWx1ZTp7dGVtcGxhdGVTdHJpbmdzOm4sZXhwcnM6cixbbW5dOiJyaWNodGV4dCJ9fSwuLi5PYmplY3QuZW50cmllcyhvKS5tYXAoKFtpLHNdKT0+KHtvcDoiZmlsZSIscGF0aDplLGZpbGVQYXRoOmksdmFsdWU6c30pKV19ZnVuY3Rpb24gSmllKHtkZWZhdWx0VmFsdWU6ZSxzY2hlbWE6dCxvblN1Ym1pdDpufSl7Y29uc3RbcixvXT1oLnVzZVN0YXRlKCExKSxbaSxzXT1oLnVzZVN0YXRlKCExKSxbYSxsXT1oLnVzZVN0YXRlKCk7aC51c2VFZmZlY3QoKCk9PntvKCEwKSxsKHZvaWQgMCl9LFtlXSk7Y29uc3R7c3RhdGU6YyxtYW5hZ2VyOnV9PVpvZShlJiZpeihfTShlKSkpO3JldHVybiBiLmpzeHMoZmEse2NoaWxkcmVuOltiLmpzeChKb2Use29wdGlvbnM6dC5vcHRpb25zLG9uQ2hhbmdlOmQ9PntvKCEwKSxsKGQpfSxzdGF0ZTpjLG1hbmFnZXI6dX0pLG4mJmIuanN4KE9sLHtsb2FkaW5nOmksZW5hYmxlZDpyLG9uQ2xpY2s6KCk9PntpZihhKXtzKCEwKTtjb25zdCBkPW96LnNhZmVQYXJzZShhKTtkLnN1Y2Nlc3M/bihhc3luYyBmPT5aaWUoZixkLmRhdGEpKS5maW5hbGx5KCgpPT57cyghMSksbyghMSl9KToocyghMSksYWxlcnQoYENvdWxkIG5vdCBwYXJzZSBSaWNoIFRleHQKYCtKU09OLnN0cmluZ2lmeShkLmVycm9yLG51bGwsMikpKX19fSldfSl9ZnVuY3Rpb24gWEMoe2Rpc2FibGVkOmUsZGVmYXVsdFZhbHVlOnQsb25TdWJtaXQ6bixzZWxlY3RvcjpyfSl7cmV0dXJuIGIuanN4KCJkaXYiLHtjaGlsZHJlbjoiVE9ETyJ9KX1mdW5jdGlvbiBaQyh7ZGlzYWJsZWQ6ZSxkZWZhdWx0VmFsdWU6dCxvblN1Ym1pdDpufSl7Y29uc3RbcixvXT1oLnVzZVN0YXRlKHR8fDApLFtpLHNdPWgudXNlU3RhdGUoITEpO2gudXNlRWZmZWN0KCgpPT57cyhlKX0sW2VdKTtjb25zdCBhPWgudXNlUmVmKG51bGwpO3JldHVybiBiLmpzeHMoZmEse2NoaWxkcmVuOltiLmpzeChXMSx7cmVmOmEsZGlzYWJsZWQ6aSxkZWZhdWx0VmFsdWU6cj8/MCxvbkNoYW5nZTpsPT5vKE51bWJlcihsLnRhcmdldC52YWx1ZSkpLHR5cGU6Im51bWJlciJ9KSxuJiZiLmpzeChPbCx7bG9hZGluZzppLGVuYWJsZWQ6dCE9PXIsb25DbGljazooKT0+e3MoITApLG4oYXN5bmMgbD0+e3ZhciBjO3JldHVyblt7b3A6InJlcGxhY2UiLHBhdGg6bCx2YWx1ZTpOdW1iZXIoKGM9YS5jdXJyZW50KT09bnVsbD92b2lkIDA6Yy52YWx1ZSl8fDB9XX0pLmZpbmFsbHkoKCk9PntzKCExKX0pfX0pXX0pfWZ1bmN0aW9uIFFpZSh7ZGlzYWJsZWQ6ZSxkZWZhdWx0VmFsdWU6dCxwYXRoOm4sc2NoZW1hOnIsb25TdWJtaXQ6b30pe2NvbnN0W2ksc109aC51c2VTdGF0ZSh0fHwiIiksW2EsbF09aC51c2VTdGF0ZSghMSk7aC51c2VFZmZlY3QoKCk9PntsKGUpfSxbZV0pO2NvbnN0IGM9aC51c2VSZWYobnVsbCksZD1uZXcgSzIoci5vcHRpb25zP3suLi5yLm9wdGlvbnMscmVnZXhwOnIub3B0aW9ucy5yZWdleHA/bmV3IFJlZ0V4cChyLm9wdGlvbnMucmVnZXhwLnNvdXJjZSxyLm9wdGlvbnMucmVnZXhwLmZsYWdzKTp2b2lkIDB9OnZvaWQgMCkudmFsaWRhdGUobixpKTtyZXR1cm4gYi5qc3hzKGZhLHtjaGlsZHJlbjpbYi5qc3goVzEse3JlZjpjLGRpc2FibGVkOmEsZGVmYXVsdFZhbHVlOmk/PyIiLG9uQ2hhbmdlOmY9PnMoZi50YXJnZXQudmFsdWUpfSksbyYmYi5qc3goT2wse3ZhbGlkYXRpb25FcnJvcnM6ZCYmZFtuXSxsb2FkaW5nOmEsZW5hYmxlZDohMCxvbkNsaWNrOigpPT57bCghMCksbyhhc3luYyBmPT57dmFyIHA7cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDpmLHZhbHVlOigocD1jLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpwLnZhbHVlKXx8IiJ9XX0pLmZpbmFsbHkoKCk9PntsKCExKX0pfX0pXX0pfWZ1bmN0aW9uIGVzZSh7ZXJyb3JzOmV9KXtyZXR1cm4gYi5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBwLTIgdGV4dC1zbSByb3VuZGVkLW1kIGdhcC15LTEgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjplLm1hcCgodCxuKT0+Yi5qc3goImRpdiIse2NoaWxkcmVuOnQubWVzc2FnZX0sbikpfSl9ZnVuY3Rpb24gZmEoe2NoaWxkcmVuOmUsY2xhc3NOYW1lOnR9KXtyZXR1cm4gYi5qc3goImRpdiIse2NsYXNzTmFtZTpRdCgicmVsYXRpdmUgbWF4LXctbGcgcHgtNCBwdC00Iix0KSxjaGlsZHJlbjplfSl9ZnVuY3Rpb24gT2woe2xvYWRpbmc6ZSxlbmFibGVkOnQsdmFsaWRhdGlvbkVycm9yczpuLG9uQ2xpY2s6cn0pe2NvbnN0e3Nlc3Npb246b309TmcoKSxpPW8uc3RhdHVzPT09InN1Y2Nlc3MiJiZvLmRhdGEubW9kZT09PSJwcm94eSI7cmV0dXJuIGIuanN4KCJkaXYiLHtjbGFzc05hbWU6InN0aWNreSBib3R0b20tMCBtLTQgbXQtMiBtbC0wIixjaGlsZHJlbjpiLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBqdXN0aWZ5LXN0YXJ0IGdhcC0yIHRleHQiLGNoaWxkcmVuOltuP2IuanN4KGVzZSx7ZXJyb3JzOm58fFtdfSk6Yi5qc3goInNwYW4iLHt9KSxiLmpzeChVYyx7ZGlzYWJsZWQ6ZXx8IXQsb25DbGljazpyLGNoaWxkcmVuOmU/aT8iU3RhZ2luZy4uLiI6IlNhdmluZy4uLiI6aT8iU3RhZ2UiOiJTYXZlIn0pLCIgIl19KX0pfWNvbnN0IHRTPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOlVlKCJyb3VuZGVkLWxnIGJvcmRlciBiZy1jYXJkIHRleHQtY2FyZC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSIsZSksLi4udH0pKTt0Uy5kaXNwbGF5TmFtZT0iQ2FyZCI7Y29uc3QgdHNlPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOlVlKCJmbGV4IGZsZXgtY29sIHNwYWNlLXktMS41IHAtNiIsZSksLi4udH0pKTt0c2UuZGlzcGxheU5hbWU9IkNhcmRIZWFkZXIiO2NvbnN0IG5zZT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+Yi5qc3goImgzIix7cmVmOm4sY2xhc3NOYW1lOlVlKCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCIsZSksLi4udH0pKTtuc2UuZGlzcGxheU5hbWU9IkNhcmRUaXRsZSI7Y29uc3QgcnNlPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeCgicCIse3JlZjpuLGNsYXNzTmFtZTpVZSgidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGUpLC4uLnR9KSk7cnNlLmRpc3BsYXlOYW1lPSJDYXJkRGVzY3JpcHRpb24iO2NvbnN0IG9zZT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+Yi5qc3goImRpdiIse3JlZjpuLGNsYXNzTmFtZTpVZSgicC02IHB0LTAiLGUpLC4uLnR9KSk7b3NlLmRpc3BsYXlOYW1lPSJDYXJkQ29udGVudCI7Y29uc3QgaXNlPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOlVlKCJmbGV4IGl0ZW1zLWNlbnRlciBwLTYgcHQtMCIsZSksLi4udH0pKTtpc2UuZGlzcGxheU5hbWU9IkNhcmRGb290ZXIiO2NvbnN0IGVEPSJTd2l0Y2giLFtzc2Usb2NlXT10byhlRCksW2FzZSxsc2VdPXNzZShlRCksY3NlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVTd2l0Y2g6bixuYW1lOnIsY2hlY2tlZDpvLGRlZmF1bHRDaGVja2VkOmkscmVxdWlyZWQ6cyxkaXNhYmxlZDphLHZhbHVlOmw9Im9uIixvbkNoZWNrZWRDaGFuZ2U6YywuLi51fT1lLFtkLGZdPWgudXNlU3RhdGUobnVsbCkscD1xZSh0LHg9PmYoeCkpLG09aC51c2VSZWYoITEpLGc9ZD8hIWQuY2xvc2VzdCgiZm9ybSIpOiEwLFt5PSExLHZdPVFvKHtwcm9wOm8sZGVmYXVsdFByb3A6aSxvbkNoYW5nZTpjfSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChhc2Use3Njb3BlOm4sY2hlY2tlZDp5LGRpc2FibGVkOmF9LGguY3JlYXRlRWxlbWVudChSZS5idXR0b24sRih7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOnksImFyaWEtcmVxdWlyZWQiOnMsImRhdGEtc3RhdGUiOm5EKHkpLCJkYXRhLWRpc2FibGVkIjphPyIiOnZvaWQgMCxkaXNhYmxlZDphLHZhbHVlOmx9LHUse3JlZjpwLG9uQ2xpY2s6YWUoZS5vbkNsaWNrLHg9Pnt2KHc9PiF3KSxnJiYobS5jdXJyZW50PXguaXNQcm9wYWdhdGlvblN0b3BwZWQoKSxtLmN1cnJlbnR8fHguc3RvcFByb3BhZ2F0aW9uKCkpfSl9KSksZyYmaC5jcmVhdGVFbGVtZW50KGRzZSx7Y29udHJvbDpkLGJ1YmJsZXM6IW0uY3VycmVudCxuYW1lOnIsdmFsdWU6bCxjaGVja2VkOnkscmVxdWlyZWQ6cyxkaXNhYmxlZDphLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTEwMCUpIn19KSl9KSx1c2U9IlN3aXRjaFRodW1iIix0RD1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlU3dpdGNoOm4sLi4ucn09ZSxvPWxzZSh1c2Usbik7cmV0dXJuIGguY3JlYXRlRWxlbWVudChSZS5zcGFuLEYoeyJkYXRhLXN0YXRlIjpuRChvLmNoZWNrZWQpLCJkYXRhLWRpc2FibGVkIjpvLmRpc2FibGVkPyIiOnZvaWQgMH0scix7cmVmOnR9KSl9KSxkc2U9ZT0+e2NvbnN0e2NvbnRyb2w6dCxjaGVja2VkOm4sYnViYmxlczpyPSEwLC4uLm99PWUsaT1oLnVzZVJlZihudWxsKSxzPUxBKG4pLGE9eiQodCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57Y29uc3QgbD1pLmN1cnJlbnQsYz13aW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsImNoZWNrZWQiKS5zZXQ7aWYocyE9PW4mJmQpe2NvbnN0IGY9bmV3IEV2ZW50KCJjbGljayIse2J1YmJsZXM6cn0pO2QuY2FsbChsLG4pLGwuZGlzcGF0Y2hFdmVudChmKX19LFtzLG4scl0pLGguY3JlYXRlRWxlbWVudCgiaW5wdXQiLEYoe3R5cGU6ImNoZWNrYm94IiwiYXJpYS1oaWRkZW4iOiEwLGRlZmF1bHRDaGVja2VkOm59LG8se3RhYkluZGV4Oi0xLHJlZjppLHN0eWxlOnsuLi5lLnN0eWxlLC4uLmEscG9zaXRpb246ImFic29sdXRlIixwb2ludGVyRXZlbnRzOiJub25lIixvcGFjaXR5OjAsbWFyZ2luOjB9fSkpfTtmdW5jdGlvbiBuRChlKXtyZXR1cm4gZT8iY2hlY2tlZCI6InVuY2hlY2tlZCJ9Y29uc3QgblM9Y3NlLGZzZT10RCxyRD1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+Yi5qc3goblMse2NsYXNzTmFtZTpVZSgicGVlciBpbmxpbmUtZmxleCBoLVsyMnB4XSB3LVs0NHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOmJnLXByaW1hcnkiLGUpLC4uLnQscmVmOm4sY2hpbGRyZW46Yi5qc3goZnNlLHtjbGFzc05hbWU6VWUoInBvaW50ZXItZXZlbnRzLW5vbmUgYmxvY2sgaC1bMThweF0gdy01IHJvdW5kZWQtZnVsbCBiZy1iYWNrZ3JvdW5kIHNoYWRvdy1sZyByaW5nLTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZGF0YS1bc3RhdGU9Y2hlY2tlZF06dHJhbnNsYXRlLXgtNSBkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOnRyYW5zbGF0ZS14LTAiKX0pfSkpO3JELmRpc3BsYXlOYW1lPW5TLmRpc3BsYXlOYW1lO2NvbnN0IG9EPSJEaWFsb2ciLFtpRCxpY2VdPXRvKG9EKSxbcHNlLElvXT1pRChvRCksaHNlPWU9Pntjb25zdHtfX3Njb3BlRGlhbG9nOnQsY2hpbGRyZW46bixvcGVuOnIsZGVmYXVsdE9wZW46byxvbk9wZW5DaGFuZ2U6aSxtb2RhbDpzPSEwfT1lLGE9aC51c2VSZWYobnVsbCksbD1oLnVzZVJlZihudWxsKSxbYz0hMSx1XT1Rbyh7cHJvcDpyLGRlZmF1bHRQcm9wOm8sb25DaGFuZ2U6aX0pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQocHNlLHtzY29wZTp0LHRyaWdnZXJSZWY6YSxjb250ZW50UmVmOmwsY29udGVudElkOkdyKCksdGl0bGVJZDpHcigpLGRlc2NyaXB0aW9uSWQ6R3IoKSxvcGVuOmMsb25PcGVuQ2hhbmdlOnUsb25PcGVuVG9nZ2xlOmgudXNlQ2FsbGJhY2soKCk9PnUoZD0+IWQpLFt1XSksbW9kYWw6c30sbil9LG1zZT0iRGlhbG9nVHJpZ2dlciIsZ3NlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVEaWFsb2c6biwuLi5yfT1lLG89SW8obXNlLG4pLGk9cWUodCxvLnRyaWdnZXJSZWYpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoUmUuYnV0dG9uLEYoe3R5cGU6ImJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiOiJkaWFsb2ciLCJhcmlhLWV4cGFuZGVkIjpvLm9wZW4sImFyaWEtY29udHJvbHMiOm8uY29udGVudElkLCJkYXRhLXN0YXRlIjpyUyhvLm9wZW4pfSxyLHtyZWY6aSxvbkNsaWNrOmFlKGUub25DbGljayxvLm9uT3BlblRvZ2dsZSl9KSl9KSxzRD0iRGlhbG9nUG9ydGFsIixbdnNlLGFEXT1pRChzRCx7Zm9yY2VNb3VudDp2b2lkIDB9KSx5c2U9ZT0+e2NvbnN0e19fc2NvcGVEaWFsb2c6dCxmb3JjZU1vdW50Om4sY2hpbGRyZW46cixjb250YWluZXI6b309ZSxpPUlvKHNELHQpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQodnNlLHtzY29wZTp0LGZvcmNlTW91bnQ6bn0saC5DaGlsZHJlbi5tYXAocixzPT5oLmNyZWF0ZUVsZW1lbnQoZXIse3ByZXNlbnQ6bnx8aS5vcGVufSxoLmNyZWF0ZUVsZW1lbnQoeXYse2FzQ2hpbGQ6ITAsY29udGFpbmVyOm99LHMpKSkpfSxnYj0iRGlhbG9nT3ZlcmxheSIseHNlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49YUQoZ2IsZS5fX3Njb3BlRGlhbG9nKSx7Zm9yY2VNb3VudDpyPW4uZm9yY2VNb3VudCwuLi5vfT1lLGk9SW8oZ2IsZS5fX3Njb3BlRGlhbG9nKTtyZXR1cm4gaS5tb2RhbD9oLmNyZWF0ZUVsZW1lbnQoZXIse3ByZXNlbnQ6cnx8aS5vcGVufSxoLmNyZWF0ZUVsZW1lbnQoYnNlLEYoe30sbyx7cmVmOnR9KSkpOm51bGx9KSxic2U9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3R7X19zY29wZURpYWxvZzpuLC4uLnJ9PWUsbz1JbyhnYixuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGJ2LHthczpBaSxhbGxvd1BpbmNoWm9vbTohMCxzaGFyZHM6W28uY29udGVudFJlZl19LGguY3JlYXRlRWxlbWVudChSZS5kaXYsRih7ImRhdGEtc3RhdGUiOnJTKG8ub3Blbil9LHIse3JlZjp0LHN0eWxlOntwb2ludGVyRXZlbnRzOiJhdXRvIiwuLi5yLnN0eWxlfX0pKSl9KSxVZj0iRGlhbG9nQ29udGVudCIsd3NlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49YUQoVWYsZS5fX3Njb3BlRGlhbG9nKSx7Zm9yY2VNb3VudDpyPW4uZm9yY2VNb3VudCwuLi5vfT1lLGk9SW8oVWYsZS5fX3Njb3BlRGlhbG9nKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGVyLHtwcmVzZW50OnJ8fGkub3Blbn0saS5tb2RhbD9oLmNyZWF0ZUVsZW1lbnQoU3NlLEYoe30sbyx7cmVmOnR9KSk6aC5jcmVhdGVFbGVtZW50KGtzZSxGKHt9LG8se3JlZjp0fSkpKX0pLFNzZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdCBuPUlvKFVmLGUuX19zY29wZURpYWxvZykscj1oLnVzZVJlZihudWxsKSxvPXFlKHQsbi5jb250ZW50UmVmLHIpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGk9ci5jdXJyZW50O2lmKGkpcmV0dXJuIGh2KGkpfSxbXSksaC5jcmVhdGVFbGVtZW50KGxELEYoe30sZSx7cmVmOm8sdHJhcEZvY3VzOm4ub3BlbixkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITAsb25DbG9zZUF1dG9Gb2N1czphZShlLm9uQ2xvc2VBdXRvRm9jdXMsaT0+e3ZhciBzO2kucHJldmVudERlZmF1bHQoKSwocz1uLnRyaWdnZXJSZWYuY3VycmVudCk9PT1udWxsfHxzPT09dm9pZCAwfHxzLmZvY3VzKCl9KSxvblBvaW50ZXJEb3duT3V0c2lkZTphZShlLm9uUG9pbnRlckRvd25PdXRzaWRlLGk9Pntjb25zdCBzPWkuZGV0YWlsLm9yaWdpbmFsRXZlbnQsYT1zLmJ1dHRvbj09PTAmJnMuY3RybEtleT09PSEwOyhzLmJ1dHRvbj09PTJ8fGEpJiZpLnByZXZlbnREZWZhdWx0KCl9KSxvbkZvY3VzT3V0c2lkZTphZShlLm9uRm9jdXNPdXRzaWRlLGk9PmkucHJldmVudERlZmF1bHQoKSl9KSl9KSxrc2U9aC5mb3J3YXJkUmVmKChlLHQpPT57Y29uc3Qgbj1JbyhVZixlLl9fc2NvcGVEaWFsb2cpLHI9aC51c2VSZWYoITEpLG89aC51c2VSZWYoITEpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQobEQsRih7fSxlLHtyZWY6dCx0cmFwRm9jdXM6ITEsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiExLG9uQ2xvc2VBdXRvRm9jdXM6aT0+e3ZhciBzO2lmKChzPWUub25DbG9zZUF1dG9Gb2N1cyk9PT1udWxsfHxzPT09dm9pZCAwfHxzLmNhbGwoZSxpKSwhaS5kZWZhdWx0UHJldmVudGVkKXt2YXIgYTtyLmN1cnJlbnR8fChhPW4udHJpZ2dlclJlZi5jdXJyZW50KT09PW51bGx8fGE9PT12b2lkIDB8fGEuZm9jdXMoKSxpLnByZXZlbnREZWZhdWx0KCl9ci5jdXJyZW50PSExLG8uY3VycmVudD0hMX0sb25JbnRlcmFjdE91dHNpZGU6aT0+e3ZhciBzLGE7KHM9ZS5vbkludGVyYWN0T3V0c2lkZSk9PT1udWxsfHxzPT09dm9pZCAwfHxzLmNhbGwoZSxpKSxpLmRlZmF1bHRQcmV2ZW50ZWR8fChyLmN1cnJlbnQ9ITAsaS5kZXRhaWwub3JpZ2luYWxFdmVudC50eXBlPT09InBvaW50ZXJkb3duIiYmKG8uY3VycmVudD0hMCkpO2NvbnN0IGw9aS50YXJnZXQ7KChhPW4udHJpZ2dlclJlZi5jdXJyZW50KT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEuY29udGFpbnMobCkpJiZpLnByZXZlbnREZWZhdWx0KCksaS5kZXRhaWwub3JpZ2luYWxFdmVudC50eXBlPT09ImZvY3VzaW4iJiZvLmN1cnJlbnQmJmkucHJldmVudERlZmF1bHQoKX19KSl9KSxsRD1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlRGlhbG9nOm4sdHJhcEZvY3VzOnIsb25PcGVuQXV0b0ZvY3VzOm8sb25DbG9zZUF1dG9Gb2N1czppLC4uLnN9PWUsYT1JbyhVZixuKSxsPWgudXNlUmVmKG51bGwpLGM9cWUodCxsKTtyZXR1cm4gZ3YoKSxoLmNyZWF0ZUVsZW1lbnQoaC5GcmFnbWVudCxudWxsLGguY3JlYXRlRWxlbWVudCh2dix7YXNDaGlsZDohMCxsb29wOiEwLHRyYXBwZWQ6cixvbk1vdW50QXV0b0ZvY3VzOm8sb25Vbm1vdW50QXV0b0ZvY3VzOml9LGguY3JlYXRlRWxlbWVudChtdixGKHtyb2xlOiJkaWFsb2ciLGlkOmEuY29udGVudElkLCJhcmlhLWRlc2NyaWJlZGJ5IjphLmRlc2NyaXB0aW9uSWQsImFyaWEtbGFiZWxsZWRieSI6YS50aXRsZUlkLCJkYXRhLXN0YXRlIjpyUyhhLm9wZW4pfSxzLHtyZWY6YyxvbkRpc21pc3M6KCk9PmEub25PcGVuQ2hhbmdlKCExKX0pKSksITEpfSksRXNlPSJEaWFsb2dUaXRsZSIsX3NlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVEaWFsb2c6biwuLi5yfT1lLG89SW8oRXNlLG4pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoUmUuaDIsRih7aWQ6by50aXRsZUlkfSxyLHtyZWY6dH0pKX0pLENzZT0iRGlhbG9nRGVzY3JpcHRpb24iLE9zZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlRGlhbG9nOm4sLi4ucn09ZSxvPUlvKENzZSxuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFJlLnAsRih7aWQ6by5kZXNjcmlwdGlvbklkfSxyLHtyZWY6dH0pKX0pLFRzZT0iRGlhbG9nQ2xvc2UiLFBzZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdHtfX3Njb3BlRGlhbG9nOm4sLi4ucn09ZSxvPUlvKFRzZSxuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KFJlLmJ1dHRvbixGKHt0eXBlOiJidXR0b24ifSxyLHtyZWY6dCxvbkNsaWNrOmFlKGUub25DbGljaywoKT0+by5vbk9wZW5DaGFuZ2UoITEpKX0pKX0pO2Z1bmN0aW9uIHJTKGUpe3JldHVybiBlPyJvcGVuIjoiY2xvc2VkIn1jb25zdCBNc2U9aHNlLFJzZT1nc2UsTnNlPXlzZSxjRD14c2UsdUQ9d3NlLGREPV9zZSxmRD1Pc2UscEQ9UHNlLCRzZT1Nc2UsQXNlPVJzZSxEc2U9TnNlLEpDPXBELGhEPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeChjRCx7cmVmOm4sY2xhc3NOYW1lOlVlKCJmaXhlZCBpbnNldC0wIHotNTAgYmctYmFja2dyb3VuZC84MCBiYWNrZHJvcC1ibHVyLXNtIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIixlKSwuLi50fSkpO2hELmRpc3BsYXlOYW1lPWNELmRpc3BsYXlOYW1lO2NvbnN0IG1EPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGNoaWxkcmVuOnQsLi4ubn0scik9PmIuanN4cyhEc2Use2NoaWxkcmVuOltiLmpzeChoRCx7fSksYi5qc3hzKHVELHtyZWY6cixjbGFzc05hbWU6VWUoImZpeGVkIGxlZnQtWzUwJV0gdG9wLVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctbGcgdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCBib3JkZXIgYmctYmFja2dyb3VuZCBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tbGVmdC0xLzIgZGF0YS1bc3RhdGU9Y2xvc2VkXTpzbGlkZS1vdXQtdG8tdG9wLVs0OCVdIGRhdGEtW3N0YXRlPW9wZW5dOnNsaWRlLWluLWZyb20tbGVmdC0xLzIgZGF0YS1bc3RhdGU9b3Blbl06c2xpZGUtaW4tZnJvbS10b3AtWzQ4JV0gc206cm91bmRlZC1sZyBtZDp3LWZ1bGwiLGUpLC4uLm4sY2hpbGRyZW46W3QsYi5qc3hzKHBELHtjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTQgdG9wLTQgcm91bmRlZC1zbSBvcGFjaXR5LTcwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1yaW5nIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbYi5qc3goUmcse2NsYXNzTmFtZToidy00IGgtNCJ9KSxiLmpzeCgic3BhbiIse2NsYXNzTmFtZToic3Itb25seSIsY2hpbGRyZW46IkNsb3NlIn0pXX0pXX0pXX0pKTttRC5kaXNwbGF5TmFtZT11RC5kaXNwbGF5TmFtZTtjb25zdCBnRD0oe2NsYXNzTmFtZTplLC4uLnR9KT0+Yi5qc3goImRpdiIse2NsYXNzTmFtZTpVZSgiZmxleCBmbGV4LWNvbCBzcGFjZS15LTEuNSB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQiLGUpLC4uLnR9KTtnRC5kaXNwbGF5TmFtZT0iRGlhbG9nSGVhZGVyIjtjb25zdCB2RD0oe2NsYXNzTmFtZTplLC4uLnR9KT0+Yi5qc3goImRpdiIse2NsYXNzTmFtZTpVZSgiZmxleCBmbGV4LWNvbC1yZXZlcnNlIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kIHNtOnNwYWNlLXgtMiIsZSksLi4udH0pO3ZELmRpc3BsYXlOYW1lPSJEaWFsb2dGb290ZXIiO2NvbnN0IHlEPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLC4uLnR9LG4pPT5iLmpzeChkRCx7cmVmOm4sY2xhc3NOYW1lOlVlKCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgbGVhZGluZy1ub25lIHRyYWNraW5nLXRpZ2h0IixlKSwuLi50fSkpO3lELmRpc3BsYXlOYW1lPWRELmRpc3BsYXlOYW1lO2NvbnN0IElzZT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6ZSwuLi50fSxuKT0+Yi5qc3goZkQse3JlZjpuLGNsYXNzTmFtZTpVZSgidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQiLGUpLC4uLnR9KSk7SXNlLmRpc3BsYXlOYW1lPWZELmRpc3BsYXlOYW1lO2Z1bmN0aW9uIEN2KHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsZmllbGQ6byxpbml0T25TdWJtaXQ6aSx0b3A6c30pe2lmKG4ub3B0KXJldHVybiBiLmpzeChCc2Use3BhdGg6ZSxzb3VyY2U6dCxzY2hlbWE6bixmaWVsZDpvLGluaXRPblN1Ym1pdDppLHNldFNlbGVjdGVkUGF0aDpyfSk7aWYodD09PW51bGwpcmV0dXJuIGIuanN4KHdELHtzb3VyY2U6dCxzY2hlbWE6bixwYXRoOmUsc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Oml9KTtpZihuLnR5cGU9PT0ib2JqZWN0IilyZXR1cm4gdHlwZW9mIHQhPSJvYmplY3QifHxtYyh0KT9iLmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGV4cGVjdGVkIG9iamVjdCwgYnV0IGZvdW5kICIsdHlwZW9mIHRdfSk6Yi5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbbyYmYi5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1sZWZ0IixjaGlsZHJlbjpvfSksYi5qc3goeEQse3NvdXJjZTp0LHBhdGg6ZSxzY2hlbWE6bixpbml0T25TdWJtaXQ6aSxzZXRTZWxlY3RlZFBhdGg6cix0b3A6c30pXX0pO2lmKG4udHlwZT09PSJhcnJheSIpcmV0dXJuIHR5cGVvZiB0IT0ib2JqZWN0Inx8IW1jKHQpP2IuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJFUlJPUjogZXhwZWN0ZWQgYXJyYXksIGJ1dCBmb3VuZCAiLHR5cGVvZiB0XX0pOmIuanN4cygiZGl2Iix7Y2hpbGRyZW46W28mJmIuanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQtbGVmdCIsY2hpbGRyZW46b30pLGIuanN4KGJELHtzb3VyY2U6dCxwYXRoOmUsc2NoZW1hOm4saW5pdE9uU3VibWl0Omksc2V0U2VsZWN0ZWRQYXRoOnJ9KV19KTtpZihuLnR5cGU9PT0icmVjb3JkIilyZXR1cm4gdHlwZW9mIHQhPSJvYmplY3QiP2IuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJFUlJPUjogZXhwZWN0ZWQgb2JqZWN0IGZvciAiLG4udHlwZSwiLCBidXQgZm91bmQgIix0eXBlb2YgdF19KTptYyh0KT9iLmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGRpZCBub3QgZXhwZWN0IGFycmF5IGZvciAiLG4udHlwZV19KTpiLmpzeHMoImRpdiIse2NoaWxkcmVuOltvJiZiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWxlZnQiLGNoaWxkcmVuOm99KSxiLmpzeChqc2Use3NvdXJjZTp0LHBhdGg6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pXX0pO2lmKChuPT1udWxsP3ZvaWQgMDpuLnR5cGUpPT09InVuaW9uIil7aWYodHlwZW9mIG4ua2V5PT0ic3RyaW5nIiYmdHlwZW9mIHQ9PSJvYmplY3QiJiYhbWModCkpcmV0dXJuIGIuanN4KExzZSx7ZmllbGQ6byx0YWc6bi5rZXksc291cmNlOnQscGF0aDplLHNjaGVtYTpuLGluaXRPblN1Ym1pdDppLHNldFNlbGVjdGVkUGF0aDpyLHRvcDpzfSl9ZWxzZSBpZigobj09bnVsbD92b2lkIDA6bi50eXBlKT09PSJsaXRlcmFsIilyZXR1cm4gYi5qc3goYi5GcmFnbWVudCx7fSk7cmV0dXJuIGIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJweS0yIGdhcC15LTQiLGNoaWxkcmVuOltvJiZiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWxlZnQiLGNoaWxkcmVuOm99KSxiLmpzeChaQSx7cGF0aDplLGRpc2FibGVkOiExLHNvdXJjZTp0LHNjaGVtYTpuLG9uU3VibWl0OmkoZSl9KV19KX1mdW5jdGlvbiBMc2Uoe3RhZzplLGZpZWxkOnQscGF0aDpuLHNvdXJjZTpyLHNjaGVtYTpvLHNldFNlbGVjdGVkUGF0aDppLGluaXRPblN1Ym1pdDpzLHRvcDphfSl7Y29uc3RbbCxjXT1oLnVzZVN0YXRlKG51bGwpLFt1LGRdPWgudXNlU3RhdGUobnVsbCksZj1vLml0ZW1zLmZsYXRNYXAoZz0+e2lmKGcudHlwZT09PSJvYmplY3QiJiZnLml0ZW1zW2VdKXtjb25zdCB5PWcuaXRlbXNbZV07aWYoeS50eXBlPT09ImxpdGVyYWwiKXJldHVyblt5LnZhbHVlXX1yZXR1cm5bXX0pO2gudXNlRWZmZWN0KCgpPT57aWYobCl7Y29uc3QgZz1yW2VdLHk9by5pdGVtcy5maW5kKHY9PntpZih2LnR5cGU9PT0ib2JqZWN0IiYmdi5pdGVtc1tlXSl7Y29uc3QgeD12Lml0ZW1zW2VdO3JldHVybiB4LnR5cGU9PT0ibGl0ZXJhbCI/eC52YWx1ZT09PWw6ITF9fSk7ZyYmdHlwZW9mIGc9PSJzdHJpbmciJiZ5P2Qoe3NvdXJjZTpyLHNjaGVtYTp5fSk6eT9kKHtzY2hlbWE6eX0pOihjb25zb2xlLmVycm9yKCJDb3VsZCBub3QgZmluZCBzb3VyY2Ugb3Igc2NoZW1hIG9mIGtleSIsbCxyLG8pLGQobnVsbCkpfWVsc2V7Y29uc3QgZz1yPT1udWxsP3ZvaWQgMDpyW2VdO2cmJnR5cGVvZiBnPT0ic3RyaW5nIiYmYyhnKX19LFtsLHIsZSxvLGZdKSxmLmxlbmd0aCE9PW8uaXRlbXMubGVuZ3RoJiZjb25zb2xlLndhcm4oIk5vdCBhbGwgaXRlbXMgaGF2ZSB0YWc6IixlKTtjb25zdCBwPSExLG09cyhuKTtyZXR1cm4gYi5qc3hzKGZhLHtjbGFzc05hbWU6UXQoImZsZXggZmxleC1jb2wgZ2FwLXktNCIseyJib3JkZXItbC0yIGJvcmRlci1ib3JkZXIgcGwtNiI6IWF9KSxjaGlsZHJlbjpbKHR8fG8ua2V5KSYmYi5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1sZWZ0IixjaGlsZHJlbjp0fHxvLmtleX0pLGIuanN4cyhZQSx7dmFsdWU6bD8/dm9pZCAwLGRpc2FibGVkOnAsb25WYWx1ZUNoYW5nZTpnPT57YyhnKX0sY2hpbGRyZW46W2IuanN4KEp3LHtjaGlsZHJlbjpiLmpzeChYQSx7cGxhY2Vob2xkZXI6IlNlbGVjdCB0eXBlIn0pfSksYi5qc3goUXcse2NoaWxkcmVuOmYubWFwKGc9PmIuanN4KGVTLHt2YWx1ZTpnLnRvU3RyaW5nKCksY2hpbGRyZW46Zy50b1N0cmluZygpfSxnKSl9KV19KSxiLmpzeChPbCx7bG9hZGluZzpwLGVuYWJsZWQ6ITEsb25DbGljazooKT0+bShhc3luYygpPT5bXSl9KSx1JiZiLmpzeChDdix7cGF0aDpuLHNvdXJjZTp1LnNvdXJjZT8/bnVsbCxzY2hlbWE6dS5zY2hlbWEsc2V0U2VsZWN0ZWRQYXRoOmksaW5pdE9uU3VibWl0OnMsdG9wOmF9KV19LG4pfWZ1bmN0aW9uIHhEKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om8sdG9wOml9KXtyZXR1cm4gYi5qc3goImRpdiIse2NsYXNzTmFtZTpRdCgiZmxleCBmbGV4LWNvbCBnYXAteS0xIix7ImJvcmRlci1sLTIgYm9yZGVyLWJvcmRlciBwbC02IjohaX0pLGNoaWxkcmVuOk9iamVjdC5lbnRyaWVzKG4uaXRlbXMpLm1hcCgoW3MsYV0pPT57Y29uc3QgbD1udShlLHMpO3JldHVybiBiLmpzeChDdix7cGF0aDpsLHNvdXJjZToodD09bnVsbD92b2lkIDA6dFtzXSk/P251bGwsc2NoZW1hOmEsc2V0U2VsZWN0ZWRQYXRoOnIsZmllbGQ6cyxpbml0T25TdWJtaXQ6b30sbCl9KX0sZSl9ZnVuY3Rpb24ganNlKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnJ9KXtjb25zdCBvPVQxKCk7cmV0dXJuIGIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTQgcC0yIixjaGlsZHJlbjpPYmplY3QuZW50cmllcyh0KS5tYXAoKFtpLHNdKT0+e2NvbnN0IGE9bnUoZSxpKTtyZXR1cm4gYi5qc3goImJ1dHRvbiIse29uQ2xpY2s6KCk9PntyKGEpLG8oYSl9LGNoaWxkcmVuOmIuanN4KHpzZSx7cmVjb3JkS2V5OmkscGF0aDphLHNvdXJjZTpzLHNjaGVtYTpuLml0ZW19KX0sYSl9KX0sZSl9Y29uc3QgdmI9MTcwO2Z1bmN0aW9uIHpzZSh7cmVjb3JkS2V5OmUscGF0aDp0LHNvdXJjZTpuLHNjaGVtYTpyfSl7Y29uc3Qgbz1YLnVzZVJlZihudWxsKSxbaSxzXT1oLnVzZVN0YXRlKCExKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntvLmN1cnJlbnQmJm8uY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ+PXZiJiZzKCEwKX0sW10pLGIuanN4cyh0Uyx7cmVmOm8sY2xhc3NOYW1lOiJyZWxhdGl2ZSBweC00IHB0LTIgcGItNCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyIGdhcC15LTIiLHN0eWxlOnttYXhIZWlnaHQ6dmJ9LGNoaWxkcmVuOltiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwYi00IGZvbnQtc2VyaWYgdGV4dC1sZWZ0IHRleHQtYWNjZW50IixjaGlsZHJlbjplfSksYi5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC14cyIsY2hpbGRyZW46Yi5qc3gob1Mse3BhdGg6dCxzb3VyY2U6bixzY2hlbWE6cn0pfSksaSYmYi5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHctZnVsbCBoLVsyMHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tdHJhbnNwYXJlbnQgdG8tYmFja2dyb3VuZCJ9KV19LHQpfWZ1bmN0aW9uIGJEKHtwYXRoOmUsc291cmNlOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om99KXtjb25zdCBpPW8oZSksWyxzXT1vdC5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aChlKTtyZXR1cm4gYi5qc3hzKGZhLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTQgcC0yIHBiLTgiLGNoaWxkcmVuOltiLmpzeCgiYnV0dG9uIix7b25DbGljazooKT0+e2koYXN5bmMoKT0+e2NvbnN0IGE9W107cmV0dXJuIHQ9PT1udWxsJiZhLnB1c2goe29wOiJyZXBsYWNlIixwYXRoOm90LmNyZWF0ZVBhdGNoUGF0aChzKSx2YWx1ZTpbXX0pLGEucHVzaCh7b3A6ImFkZCIscGF0aDpvdC5jcmVhdGVQYXRjaFBhdGgobnUocyx0Lmxlbmd0aCkpLHZhbHVlOlZmKG4uaXRlbSl9KSxhfSl9LGNoaWxkcmVuOmIuanN4KGxqLHt9KX0pLHQubWFwKChhLGwpPT57Y29uc3QgYz1udShlLGwpLHU9byhjKTtyZXR1cm4gYi5qc3goRnNlLHtpbmRleDpsLHBhdGg6Yyxzb3VyY2U6YSxsb2FkaW5nOiExLHNjaGVtYTpuLml0ZW0sb25EZWxldGU6KCk9Pnt1KGFzeW5jIGQ9PmQubGVuZ3RoPjA/W3tvcDoicmVtb3ZlIixwYXRoOmR9XTooY29uc29sZS5lcnJvcigiQ2Fubm90IGRlbGV0ZSBhIHJvb3QgZWxlbWVudCIpLFtdKSl9LHNldFNlbGVjdGVkUGF0aDpyfSxjKX0pXX0sZSl9Y29uc3QgUUM9dmI7ZnVuY3Rpb24gRnNlKHtpbmRleDplLHBhdGg6dCxzb3VyY2U6bixzY2hlbWE6cixsb2FkaW5nOm8sc2V0U2VsZWN0ZWRQYXRoOmksb25EZWxldGU6c30pe2NvbnN0IGE9VDEoKSxsPVgudXNlUmVmKG51bGwpLFtjLHVdPWgudXNlU3RhdGUoITEpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2wuY3VycmVudCYmbC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodD49UUMmJnUoITApfSxbXSksYi5qc3hzKHRTLHtyZWY6bCxjbGFzc05hbWU6InJlbGF0aXZlIHB4LTQgcHQtMiBwYi00IG92ZXJmbG93LWhpZGRlbiBib3JkZXIgZ2FwLXktMiIsc3R5bGU6e21heEhlaWdodDpRQ30sY2hpbGRyZW46W2IuanN4KCJidXR0b24iLHtjbGFzc05hbWU6ImJsb2NrIixkaXNhYmxlZDpvLG9uQ2xpY2s6cyxjaGlsZHJlbjpvP2IuanN4KGNqLHtjbGFzc05hbWU6ImFuaW1hdGUtc3BpbiJ9KTpiLmpzeCh2UCx7fSl9KSxiLmpzeHMoImJ1dHRvbiIse2NsYXNzTmFtZToiYmxvY2siLGRpc2FibGVkOm8sb25DbGljazooKT0+e2kodCksYSh0KX0sY2hpbGRyZW46W2IuanN4KCJkaXYiLHtjbGFzc05hbWU6InBiLTQgZm9udC1zZXJpZiB0ZXh0LWxlZnQgdXBwZXJjYXNlIHRleHQtYWNjZW50IixjaGlsZHJlbjplKzE8MTA/YDAke2UrMX1gOmUrMX0pLGIuanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQteHMiLGNoaWxkcmVuOmIuanN4KG9TLHtwYXRoOnQsc291cmNlOm4sc2NoZW1hOnJ9KX0pLGMmJmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCB3LWZ1bGwgaC1bMjBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLXRyYW5zcGFyZW50IHRvLWJhY2tncm91bmQifSldfSldfSl9ZnVuY3Rpb24gbnUoZSx0KXtjb25zdCBuPW90LmNyZWF0ZVZhbFBhdGhPZkl0ZW0oZSx0KTtpZighbil0aHJvdyBFcnJvcihgQ291bGQgbm90IGNyZWF0ZSB2YWwgcGF0aDogJHtlfSBvZiAke3Q9PW51bGw/dm9pZCAwOnQudG9TdHJpbmcoKX1gKTtyZXR1cm4gbn1mdW5jdGlvbiBvUyh7cGF0aDplLHNvdXJjZTp0LHNjaGVtYTpufSl7dmFyIHM7Y29uc3RbcixvXT1oLnVzZVN0YXRlKG51bGwpLGk9KHM9V3NlKCkpPT1udWxsP3ZvaWQgMDpzLmhvdmVyRWxlbTtpZihuLnR5cGU9PT0ib2JqZWN0IilyZXR1cm4gYi5qc3goImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtW21pbi1jb250ZW50XzFmcl0gZ2FwLTIgdGV4dC1sZWZ0IixjaGlsZHJlbjpPYmplY3QuZW50cmllcyhuLml0ZW1zKS5tYXAoKFthXSk9PmIuanN4cyhoLkZyYWdtZW50LHtjaGlsZHJlbjpbYi5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LW11dGVkIixjaGlsZHJlbjpbYSwiOiJdfSksYi5qc3goInNwYW4iLHtjaGlsZHJlbjpiLmpzeChvUyx7c291cmNlOih0PT1udWxsP3ZvaWQgMDp0W2FdKT8/bnVsbCxzY2hlbWE6bi5pdGVtc1thXSxwYXRoOm51KGUsYSl9KX0pXX0sbnUoZSxhKSkpfSxlKTtpZihuLnR5cGU9PT0iYXJyYXkiKXJldHVybiB0PT09bnVsbD9iLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LGUpOkFycmF5LmlzQXJyYXkodCk/Yi5qc3hzKCJzcGFuIix7Y2hpbGRyZW46W2IuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46dC5sZW5ndGh9KSxiLmpzeCgic3BhbiIse2NoaWxkcmVuOnQubGVuZ3RoPT09MT8iIGl0ZW0iOiIgaXRlbXMifSldfSxlKTpiLmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtMiBiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQiLGNoaWxkcmVuOiJVbmtub3duIGxlbmd0aCJ9LGUpO2lmKG4udHlwZT09PSJyaWNodGV4dCIpcmV0dXJuIHQ9PT1udWxsP2IuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk6dHlwZW9mIHQhPSJvYmplY3QiP2IuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjpbIkVSUk9SOiAiLHR5cGVvZiB0LCIgbm90IGFuIG9iamVjdCJdfSxlKTohKG1uIGluIHQpfHx0W21uXSE9PSJyaWNodGV4dCI/Yi5qc3goImRpdiIse2NsYXNzTmFtZToicC00IHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBiZy1kZXN0cnVjdGl2ZSIsY2hpbGRyZW46IkVSUk9SOiBvYmplY3QgaXMgbm90IHJpY2h0ZXh0In0sZSk6Yi5qc3goSHNlLHtjaGlsZHJlbjpfTSh0KX0sZSk7aWYobi50eXBlPT09InN0cmluZyIpcmV0dXJuIHQ9PT1udWxsP2IuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk6Yi5qc3goInNwYW4iLHtjaGlsZHJlbjp0fSk7aWYobi50eXBlPT09ImltYWdlIil7aWYodD09PW51bGwpcmV0dXJuIGIuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sZSk7aWYodHlwZW9mIHQhPSJvYmplY3QiKXJldHVybiBiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjoiRVJST1I6IG5vdCBhbiBvYmplY3QifSxlKTtpZighKENuIGluIHQpfHx0eXBlb2YgdFtDbl0hPSJzdHJpbmciKXJldHVybiBiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjoiRVJST1I6IG9iamVjdCBpcyBub3QgYW4gaW1hZ2UifSxlKTtjb25zdCBhPW90LmNvbnZlcnRGaWxlU291cmNlKHQpLnVybDtyZXR1cm4gYi5qc3hzKCJzcGFuIix7b25Nb3VzZU92ZXI6bD0+e28oe3g6bC5jbGllbnRYLHk6bC5jbGllbnRZfSl9LG9uTW91c2VMZWF2ZTooKT0+e28obnVsbCl9LGNsYXNzTmFtZToicmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMSIsY2hpbGRyZW46W2IuanN4KCJhIix7aHJlZjphLGNsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHVuZGVybGluZSB0cnVuY2F0ZSAiLGNoaWxkcmVuOnRbQ25dfSksciYmaSYmJHIuY3JlYXRlUG9ydGFsKGIuanN4KCJpbWciLHtjbGFzc05hbWU6ImFic29sdXRlIHotWzVdIG1heC13LVsxMHZ3XSIsc3R5bGU6e2xlZnQ6ci54KzEwLHRvcDpyLnkrMTB9LHNyYzphfSksaSldfSxlKX1lbHNle2lmKG4udHlwZT09PSJib29sZWFuIilyZXR1cm4gdD09PW51bGw/Yi5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSxlKTpiLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOnQ/InRydWUiOiJmYWxzZSJ9LGUpO2lmKG4udHlwZT09PSJudW1iZXIiKXJldHVybiB0PT09bnVsbD9iLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LGUpOmIuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46dC50b1N0cmluZygpfSk7aWYobi50eXBlPT09ImtleU9mIilyZXR1cm4gdD09PW51bGw/Yi5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSxlKTpiLmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOnQudG9TdHJpbmcoKX0sZSl9cmV0dXJuIGIuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJUT0RPOiAiLG4udHlwZV19LGUpfWZ1bmN0aW9uIEJzZSh7cGF0aDplLHNvdXJjZTp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvLGZpZWxkOml9KXtjb25zdFtzLGFdPWgudXNlU3RhdGUodCE9PW51bGwpLHtlZGl0TW9kZTpsfT1OZygpLGM9byhlKSxbdSxkXT1oLnVzZVN0YXRlKCExKTtyZXR1cm4gYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLXktMiIsY2hpbGRyZW46W2IuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGdhcC14LTQiLGNoaWxkcmVuOltsPT09ImZ1bGwiJiYhcyYmYi5qc3gockQse2Rpc2FibGVkOnUsY2hlY2tlZDpzLG9uQ2xpY2s6KCk9PnthKGY9PiFmKX19KSxsPT09ImZ1bGwiJiZzJiZiLmpzeHMoJHNlLHtjaGlsZHJlbjpbYi5qc3goQXNlLHtjaGlsZHJlbjpiLmpzeCh2UCx7fSl9KSxiLmpzeChtRCx7Y2hpbGRyZW46Yi5qc3hzKGdELHtjaGlsZHJlbjpbYi5qc3goeUQse2NoaWxkcmVuOiJBYm91dCB0byBkZWxldGUuIEFyZSB5b3Ugc3VyZT8ifSksYi5qc3hzKHZELHtjbGFzc05hbWU6InNtOmp1c3RpZnktc3RhcnQiLGNoaWxkcmVuOltiLmpzeChKQyx7YXNDaGlsZDohMCxjaGlsZHJlbjpiLmpzeChVYyx7dHlwZToiYnV0dG9uIix2YXJpYW50OiJzZWNvbmRhcnkiLG9uQ2xpY2s6YXN5bmMoKT0+e2QoITApLGEoITEpO2NvbnN0WyxmXT1vdC5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aChlKTtjKGFzeW5jKCk9Plt7b3A6InJlcGxhY2UiLHBhdGg6b3QuY3JlYXRlUGF0Y2hQYXRoKGYpLHZhbHVlOm51bGx9XSkuY2F0Y2gocD0+e2NvbnNvbGUuZXJyb3IocCksYSghMCl9KS5maW5hbGx5KCgpPT57ZCghMSl9KX0sY2hpbGRyZW46IlllcyJ9KX0pLGIuanN4KEpDLHthc0NoaWxkOiEwLGNoaWxkcmVuOmIuanN4KFVjLHt0eXBlOiJidXR0b24iLGNoaWxkcmVuOiJDYW5jZWwifSl9KV19KV19KX0pXX0pLGIuanN4KCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIG1heC13LVszMDBweF0gdGV4dC1sZWZ0Iix0aXRsZTplLGRpcjoicnRsIixjaGlsZHJlbjppfHxiLmpzeChybCx7Y2hpbGRyZW46ZX0pfSldfSkscyYmYi5qc3god0Qse3NvdXJjZTp0PT09bnVsbD9WZihuKTp0LHNjaGVtYTpuLHBhdGg6ZSxzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6Zj0+YXN5bmMgcD0+e2NvbnN0WyxtXT1vdC5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aChlKSxbLGddPW90LnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKGYpLHk9YXdhaXQgcChvdC5jcmVhdGVQYXRjaFBhdGgoZykpO2MoYXN5bmMoKT0+dD09PW51bGw/W3tvcDoicmVwbGFjZSIscGF0aDpvdC5jcmVhdGVQYXRjaFBhdGgobSksdmFsdWU6VmYobil9XS5jb25jYXQoeSk6eSl9fSldfSxlKX1mdW5jdGlvbiBWZihlKXtpZihlLnR5cGU9PT0ib2JqZWN0IilyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKGUuaXRlbXMpLm1hcChuPT5bbixWZihlLml0ZW1zW25dKV0pKTtpZihlLnR5cGU9PT0iYXJyYXkiKXJldHVybltdO2lmKGUudHlwZT09PSJyZWNvcmQiKXJldHVybnt9O2lmKGUub3B0KXJldHVybiBudWxsO2lmKGUudHlwZT09PSJyaWNodGV4dCIpcmV0dXJue1ttbl06InJpY2h0ZXh0Iix0ZW1wbGF0ZVN0cmluZ3M6WyIiXSxleHByczpbXX07aWYoZS50eXBlPT09InN0cmluZyIpcmV0dXJuIiI7aWYoZS50eXBlPT09ImJvb2xlYW4iKXJldHVybiExO2lmKGUudHlwZT09PSJudW1iZXIiKXJldHVybiAwO2lmKGUudHlwZT09PSJrZXlPZiIpcmV0dXJuIGUudmFsdWVzPT09Im51bWJlciI/MDplLnZhbHVlcz09PSJzdHJpbmciPyIiOmUudmFsdWVzWzBdO2lmKGUudHlwZT09PSJmaWxlIilyZXR1cm57X3JlZjoiL3B1YmxpYy8iLF90eXBlOiJmaWxlIixtZXRhZGF0YTp7c2hhMjU2OiIifX07aWYoZS50eXBlPT09ImltYWdlIilyZXR1cm57X3JlZjoiL3B1YmxpYy8iLF90eXBlOiJmaWxlIixtZXRhZGF0YTp7aGVpZ2h0OjAsd2lkdGg6MCxtaW1lVHlwZToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIixzaGEyNTY6IiJ9fTtpZihlLnR5cGU9PT0ibGl0ZXJhbCIpcmV0dXJuIGUudmFsdWU7aWYoZS50eXBlPT09InVuaW9uIilyZXR1cm4gVmYoZS5pdGVtc1swXSk7dGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgc2NoZW1hIHR5cGU6ICIrSlNPTi5zdHJpbmdpZnkoZSkpfWZ1bmN0aW9uIHdEKHtzb3VyY2U6ZSxwYXRoOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om99KXtpZihuLnR5cGU9PT0iYXJyYXkiKXtpZih0eXBlb2YgZT09Im9iamVjdCImJihlPT09bnVsbHx8bWMoZSkpKXJldHVybiBiLmpzeChiRCx7aW5pdE9uU3VibWl0Om8sc291cmNlOmU9PT1udWxsP1tdOmUscGF0aDp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSl9ZWxzZSBpZihuLnR5cGU9PT0ib2JqZWN0Iil7aWYodHlwZW9mIGU9PSJvYmplY3QiJiYoZT09PW51bGx8fCFtYyhlKSkpcmV0dXJuIGIuanN4KHhELHtzb3VyY2U6ZSxwYXRoOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om99KX1lbHNlIGlmKG4udHlwZT09PSJyaWNodGV4dCJ8fG4udHlwZT09PSJzdHJpbmcifHxuLnR5cGU9PT0iaW1hZ2UifHxuLnR5cGU9PT0ibnVtYmVyInx8bi50eXBlPT09ImtleU9mInx8bi50eXBlPT09ImJvb2xlYW4ifHxuLnR5cGU9PT0ibGl0ZXJhbCJ8fG4udHlwZT09PSJ1bmlvbiIpcmV0dXJuIGIuanN4KFpBLHtwYXRoOnQsZGlzYWJsZWQ6ITEsc291cmNlOmUsc2NoZW1hOm4sb25TdWJtaXQ6byh0KX0sdCk7cmV0dXJuIGIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbIkVSUk9SOiB1bmV4cGVjdGVkIHNvdXJjZSB0eXBlICIsdHlwZW9mIGUsIiBmb3Igc2NoZW1hIHR5cGUiLCIgIixuLnR5cGVdfSl9ZnVuY3Rpb24gbWMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gVXNlKGUpe2NvbnN0IHQ9e307cmV0dXJuIGUuZm9yRWFjaChuPT57Y29uc3Qgcj1uLnNwbGl0KCIvIikuZmlsdGVyKG89Pm8hPT0iIik7aWYoci5sZW5ndGg9PT0xKXRbIiJdfHwodFsiIl09W10pLHRbIiJdLnB1c2goclswXSk7ZWxzZSBpZihyLmxlbmd0aD4xKXtjb25zdCBvPXIuc2xpY2UoMCxyLmxlbmd0aC0xKS5qb2luKCIvIiksaT1yLnNsaWNlKC0xKVswXTt0W29dfHwodFtvXT1bXSksdFtvXS5wdXNoKGkpfX0pLHR9ZnVuY3Rpb24gVnNlKHtzZWxlY3RlZFBhdGg6ZSxwYXRoczp0LHNldFNlbGVjdGVkTW9kdWxlSWQ6bn0pe2NvbnN0IHI9VXNlKHQpLG89ZSYmb3Quc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgoZSlbMF07cmV0dXJuIGIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgdy1mdWxsIHB5LTIgdGV4dC14cyIsY2hpbGRyZW46T2JqZWN0LmVudHJpZXMocikubWFwKChbaSxzXSk9PmIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHB5LTIiLGNoaWxkcmVuOltpJiZiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmb250LWJvbGQgdHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLHRpdGxlOmksY2hpbGRyZW46Yi5qc3gocmwse2NoaWxkcmVuOml9KX0pLGIuanN4KCJkaXYiLHtjbGFzc05hbWU6UXQoeyJmbGV4IGZsZXgtY29sIHB5LTIganVzdGlmeS1zdGFydCBpdGVtcy1zdGFydCI6ISFpfSksY2hpbGRyZW46cy5tYXAoYT0+e2NvbnN0IGw9YC8ke2l9LyR7YX1gO3JldHVybiBiLmpzeCgiYnV0dG9uIix7Y2xhc3NOYW1lOlF0KCJibG9jayBweC0yIHB5LTEgcm91bmRlZC1mdWxsIix7ImJnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIjpvPT09bH0pLG9uQ2xpY2s6KCk9PntuKGwpfSxjaGlsZHJlbjphfSxsKX0pfSldfSxgLyR7aX1gKSl9KX1jb25zdCBlTz17dGFnczp7aDE6ImZvbnQtYm9sZCIsaDI6ImZvbnQtYm9sZCIsaDM6ImZvbnQtYm9sZCIsaDQ6ImZvbnQtYm9sZCIsaDU6ImZvbnQtYm9sZCIsaDY6ImZvbnQtYm9sZCIscDoiIn0sY2xhc3Nlczp7Ym9sZDoiZm9udC1ib2xkIixpdGFsaWM6Iml0YWxpYyIsbGluZVRocm91Z2g6ImxpbmUtdGhyb3VnaCJ9fTtmdW5jdGlvbiBIc2Uoe2NoaWxkcmVuOmV9KXtjb25zdCB0PWU7ZnVuY3Rpb24gbihpLHMpe2NvbnN0IGE9ZU8udGFnc1tpXTtyZXR1cm4gYSYmcz9bcyxhXS5qb2luKCIgIik6YXx8c31mdW5jdGlvbiByKGkscyl7Y29uc3QgYT1lTy5jbGFzc2VzW2ldO3JldHVybiBhJiZzP1tzLGFdLmpvaW4oIiAiKTphfHxzfWZ1bmN0aW9uIG8oaSxzKXt2YXIgYyx1O2lmKHR5cGVvZiBpPT0ic3RyaW5nIilyZXR1cm4gaTtpZihpLnRhZz09PSJwIilyZXR1cm4gYi5qc3goInAiLHtjbGFzc05hbWU6bigicCIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJpbWciKXJldHVybiBiLmpzeCgiaW1nIix7Y2xhc3NOYW1lOm4oImltZyIpLHNyYzppLnNyY30scyk7aWYoaS50YWc9PT0idWwiKXJldHVybiBiLmpzeCgidWwiLHtjbGFzc05hbWU6bigidWwiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0scyk7aWYoaS50YWc9PT0ib2wiKXJldHVybiBiLmpzeCgib2wiLHtjbGFzc05hbWU6bigib2wiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0scyk7aWYoaS50YWc9PT0ibGkiKXJldHVybiBiLmpzeCgibGkiLHtjbGFzc05hbWU6bigibGkiKSxjaGlsZHJlbjppLmNoaWxkcmVuLm1hcCgoZCxmKT0+byhkLGYpKX0scyk7aWYoaS50YWc9PT0ic3BhbiIpcmV0dXJuIGIuanN4KCJzcGFuIix7Y2xhc3NOYW1lOmkuY2xhc3Nlcy5tYXAoZD0+e3N3aXRjaChkKXtjYXNlImJvbGQiOnJldHVybiByKCJib2xkIik7Y2FzZSJsaW5lLXRocm91Z2giOnJldHVybiByKCJsaW5lVGhyb3VnaCIpO2Nhc2UiaXRhbGljIjpyZXR1cm4gcigiaXRhbGljIil9fSkuam9pbigiICIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJoMSIpcmV0dXJuIGIuanN4KCJoMSIse2NsYXNzTmFtZTpuKCJoMSIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJoMiIpcmV0dXJuIGIuanN4KCJoMiIse2NsYXNzTmFtZTpuKCJoMiIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJoMyIpcmV0dXJuIGIuanN4KCJoMyIse2NsYXNzTmFtZTpuKCJoMyIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJoNCIpcmV0dXJuIGIuanN4KCJoNCIse2NsYXNzTmFtZTpuKCJoNCIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJoNSIpcmV0dXJuIGIuanN4KCJoNSIse2NsYXNzTmFtZTpuKCJoNSIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJoNiIpcmV0dXJuIGIuanN4KCJoNiIse2NsYXNzTmFtZTpuKCJoNiIpLGNoaWxkcmVuOmkuY2hpbGRyZW4ubWFwKChkLGYpPT5vKGQsZikpfSxzKTtpZihpLnRhZz09PSJiciIpcmV0dXJuIGIuanN4KCJiciIse30scyk7aWYoaS50YWc9PT0iYSIpcmV0dXJuIGIuanN4KCJhIix7aHJlZjppLmhyZWYsY2hpbGRyZW46aS5jaGlsZHJlbi5tYXAoKGQsZik9Pm8oZCxmKSl9LHMpO2NvbnNvbGUuZXJyb3IoIlVua25vd24gdGFnIixpLnRhZyk7Y29uc3QgbD1pLnRhZztyZXR1cm4gbCE9bnVsbCYmbC50YWc/WC5jcmVhdGVFbGVtZW50KGwudGFnLHtrZXk6cyxjbGFzc05hbWU6KGM9bC5jbGFzcyk9PW51bGw/dm9pZCAwOmMuam9pbigiICIpLGNoaWxkcmVuOih1PWwuY2hpbGRyZW4pPT1udWxsP3ZvaWQgMDp1Lm1hcChvKX0pOm51bGx9cmV0dXJuIGIuanN4KCJzcGFuIix7ImRhdGEtdmFsLXBhdGgiOnQudmFsUGF0aCxjaGlsZHJlbjp0LmNoaWxkcmVuLm1hcCgoaSxzKT0+byhpLHMpKX0pfWNvbnN0IFNEPVguY3JlYXRlQ29udGV4dCh7aG92ZXJFbGVtOm51bGx9KSxXc2U9KCk9PlgudXNlQ29udGV4dChTRCksa0Q9KHthcGk6ZSxzdG9yZTp0fSk9Pntjb25zdHsiKiI6bn09YTYoKSxbcixvXT1oLnVzZVN0YXRlKG51bGwpLFtpLHNdPWgudXNlU3RhdGUoKSxbYSxsXT1oLnVzZVN0YXRlKCk7aC51c2VFZmZlY3QoKCk9PntzKG4/YC8ke259YDppKX0sW25dKSxoLnVzZUVmZmVjdCgoKT0+e3QucmVzZXQoKS50aGVuKEU9PntidC5pc09rKEUpP2woRS52YWx1ZSk6byhFLmVycm9yLm1lc3NhZ2UpfSl9LFtdKTtjb25zdCBjPXFQKGUpLHU9VDEoKSxbZCxmXT1MUCgpLHtwYXRjaGVzOnAsc2V0UGF0Y2hSZXNldElkOm19PWpQKGMsZSksZz1YLnVzZVJlZihudWxsKSx5PWgudXNlQ2FsbGJhY2soRT0+YXN5bmMgUz0+e2NvbnN0W18sUF09b3Quc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgoRSksTT1hd2FpdCBTKG90LmNyZWF0ZVBhdGNoUGF0aChQKSk7dC5hcHBseVBhdGNoKF8sTSksbShBPT5BKzEpfSxbXSksW3YseF09aC51c2VTdGF0ZSghMSksW3csa109aC51c2VTdGF0ZSgpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2xldCBFPSExO3JldHVybiB4KCEwKSxlLnBvc3RWYWxpZGF0ZSh7cGF0Y2hlczpwfSkudGhlbihTPT57RXx8KGJ0LmlzT2soUyk/ayh7Z2xvYmFsRXJyb3I6bnVsbCx2YWxpZGF0aW9uRXJyb3JzOlMudmFsdWV9KTprKHtnbG9iYWxFcnJvcjp7bWVzc2FnZToiQ291bGQgbm90IHZhbGlkYXRlIGNoYW5nZXM6IGNoZWNrIGlmIFZhbCBpcyBjb3JyZWN0bHkgc2V0dXAuIixkZXRhaWxzOlMuZXJyb3J9fSkseCghMSkpfSkuY2F0Y2goUz0+e0V8fChrKHtnbG9iYWxFcnJvcjp7bWVzc2FnZToiQ291bGQgbm90IHZhbGlkYXRlIGNoYW5nZXM6IGNoZWNrIHRoZSBpbnRlcm5ldCBjb25uZWN0aW9uLiIsZGV0YWlsczpTfX0pLHgoITEpKX0pLCgpPT57RT0hMH19LFtwXSksYi5qc3goXzEuUHJvdmlkZXIse3ZhbHVlOnt0aGVtZTpkLHNldFRoZW1lOmYsZWRpdE1vZGU6ImZ1bGwiLHNlc3Npb246YyxzZXRFZGl0TW9kZTooKT0+e30sc2V0V2luZG93U2l6ZTooKT0+e319LGNoaWxkcmVuOmIuanN4cygiZGl2Iix7aWQ6InZhbC1mdWxsc2NyZWVuLWNvbnRhaW5lciIsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgaC1bMTAwXSBvdmVyZmxvdy1oaWRkZW4gZm9udC1zZXJpZiBhbnRpYWxpYXNlZCBiZy1iYWNrZ3JvdW5kIHRleHQtcHJpbWFyeSIsImRhdGEtbW9kZSI6ZCxjaGlsZHJlbjpbYi5qc3goImRpdiIse2lkOiJ2YWwtZnVsbHNjcmVlbi1ob3ZlciIscmVmOmd9KSxiLmpzeChTRC5Qcm92aWRlcix7dmFsdWU6e2hvdmVyRWxlbTpnPT1udWxsP3ZvaWQgMDpnLmN1cnJlbnR9LGNoaWxkcmVuOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQtcHJpbWFyeSIsY2hpbGRyZW46Yi5qc3hzKFBkLHtjaGlsZHJlbjpbYi5qc3goImRpdiIse2NsYXNzTmFtZToicHgtNCBoLVs1MHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46Yi5qc3goeVAse30pfSksYi5qc3goa2Mse2NsYXNzTmFtZToicHgtNCIsY2hpbGRyZW46YT9iLmpzeChWc2Use3NlbGVjdGVkUGF0aDppLHBhdGhzOmEsc2V0U2VsZWN0ZWRNb2R1bGVJZDpFPT57dShFKX19KTohciYmYi5qc3goImRpdiIse2NsYXNzTmFtZToicHktNCIsY2hpbGRyZW46IkxvYWRpbmcuLi4ifSl9KSxiLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBoLVs1MHB4XSBnYXAtMiBmb250LXNlcmlmIHRleHQteHMiLGNoaWxkcmVuOltiLmpzeCgiYnV0dG9uIix7b25DbGljazooKT0+e2hpc3RvcnkuYmFjaygpfSxjaGlsZHJlbjpiLmpzeChXNCx7fSl9KSxiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSBtYXgtdy1bMzAwcHhdIHRleHQtbGVmdCIsZGlyOiJydGwiLHRpdGxlOmksY2hpbGRyZW46Yi5qc3gocmwse2NoaWxkcmVuOml8fCIvIn0pfSldfSksYi5qc3goS3NlLHtwYXRoOmksZXJyb3I6cixpbml0T25TdWJtaXQ6eSxzZXNzaW9uOmMsc2V0U2VsZWN0ZWRQYXRoOnMsYXBpOmUsc3RvcmU6dH0pLGIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgaC1bNTBweF0gZ2FwLTIgZm9udC1zZXJpZiB0ZXh0LXhzIHB4LTYiLGNoaWxkcmVuOltiLmpzeCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJweC00IHB5LTIgYm9yZGVyIHJvdW5kZWQgYm9yZGVyLWJvcmRlciIsY2hpbGRyZW46Yi5qc3gobVAse3NpemU6MTR9KX0pLGIuanN4KCJidXR0b24iLHtjbGFzc05hbWU6InB4LTQgcHktMiBib3JkZXIgcm91bmRlZCBib3JkZXItYm9yZGVyIixjaGlsZHJlbjpiLmpzeChKNCx7c2l6ZToxNH0pfSksYi5qc3goImJ1dHRvbiIse2NsYXNzTmFtZToicHgtNCBweS0yIGJvcmRlciByb3VuZGVkIGJvcmRlci1ib3JkZXIgYmctYm9yZGVyIixjaGlsZHJlbjpiLmpzeChnUCx7c2l6ZToxNH0pfSldfSksYi5qc3goZk0se3BhdGNoZXM6cCxpc1ZhbGlkYXRpbmc6dix2YWxpZGF0aW9uUmVzcG9uc2U6dyxhcGk6ZSxvbkNvbW1pdDooKT0+e20oRT0+RSsxKX19KV19KX0pfSldfSl9KX07ZnVuY3Rpb24gS3NlKHtwYXRoOmUsYXBpOnQsc3RvcmU6bixlcnJvcjpyLHNlc3Npb246byxzZXRTZWxlY3RlZFBhdGg6aSxpbml0T25TdWJtaXQ6c30pe3ZhciBtO2NvbnN0W2EsbF09aC51c2VTdGF0ZSghMSksW2MsdV09aC51c2VTdGF0ZSgpLFtkLGZdPWgudXNlU3RhdGUobnVsbCksW3BdPWU/b3Quc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgoZSk6W3ZvaWQgMCx2b2lkIDBdO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2xldCBnPSExO3JldHVybiBwPyhmKG51bGwpLGwoITApLG4uZ2V0TW9kdWxlKHApLnRoZW4oeT0+e2d8fG8uc3RhdHVzPT09InN1Y2Nlc3MiJiZvLmRhdGEuZW5hYmxlZCYmKGJ0LmlzT2soeSk/Zih5LnZhbHVlKTp1KHkuZXJyb3IubWVzc2FnZSkpfSkuZmluYWxseSgoKT0+e2d8fGwoITEpfSkpOmYobnVsbCksKCk9PntnPSEwfX0sW3AsZSxvXSksYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNCIsY2hpbGRyZW46WyhyfHxjKSYmYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Im1heC13LXhsIHAtNCB0ZXh0LWxnIGJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCIsY2hpbGRyZW46WyJFUlJPUjogIixyfHxjXX0pLG8uc3RhdHVzPT09InN1Y2Nlc3MiJiZvLmRhdGEubW9kZT09PSJ1bmF1dGhvcml6ZWQiJiZiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtdy14bCBwLTQgdGV4dC1sZyBiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQiLGNoaWxkcmVuOiJOb3QgYXV0aG9yaXplZCJ9KSxvLnN0YXR1cz09PSJzdWNjZXNzIiYmIW8uZGF0YS5lbmFibGVkJiZiLmpzeHMoImRpdiIse2NsYXNzTmFtZToibWF4LXcteGwgcC00IHRleHQtbGciLGNoaWxkcmVuOltiLmpzeCgiZGl2Iix7Y2hpbGRyZW46IlZhbCBpcyBjdXJyZW50bHkgbm90IGVuYWJsZWQifSksYi5qc3goImEiLHtocmVmOnQuZ2V0RW5hYmxlVXJsKCgobT13aW5kb3c9PW51bGw/dm9pZCAwOndpbmRvdy5sb2NhdGlvbik9PW51bGw/dm9pZCAwOm0uaHJlZil8fCIvdmFsIiksY2hpbGRyZW46IkVuYWJsZSBWYWwifSldfSksYSYmYi5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBwbGFjZS1jb250ZW50LWNlbnRlciIsY2hpbGRyZW46IkxvYWRpbmcuLi4ifSksZCYmZSYmYi5qc3gocXNlLHtwYXRoOmUsc291cmNlOmQuc291cmNlLHNjaGVtYTpkLnNjaGVtYSxzZXRTZWxlY3RlZFBhdGg6aSxpbml0T25TdWJtaXQ6c30pXX0pfWZ1bmN0aW9uIHFzZSh7cGF0aDplLHNvdXJjZTp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvfSl7Y29uc3RbLGldPW90LnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKGUpLHM9b3QucmVzb2x2ZVBhdGgoaSx0LG4pO2lmKCFzKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSBtb2R1bGU6ICIrZSk7cmV0dXJuIGIuanN4KEN2LHtwYXRoOmUsc291cmNlOnMuc291cmNlLHNjaGVtYTpzLnNjaGVtYSxzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6byx0b3A6ITB9KX1jb25zdCBHc2U9aC5jcmVhdGVDb250ZXh0KG51bGwpLFp5PXtkaWRDYXRjaDohMSxlcnJvcjpudWxsfTtjbGFzcyBpUyBleHRlbmRzIGguQ29tcG9uZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMucmVzZXRFcnJvckJvdW5kYXJ5PXRoaXMucmVzZXRFcnJvckJvdW5kYXJ5LmJpbmQodGhpcyksdGhpcy5zdGF0ZT1aeX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKHQpe3JldHVybntkaWRDYXRjaDohMCxlcnJvcjp0fX1yZXNldEVycm9yQm91bmRhcnkoKXtjb25zdHtlcnJvcjp0fT10aGlzLnN0YXRlO2lmKHQhPT1udWxsKXtmb3IodmFyIG4scixvPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobykscz0wO3M8bztzKyspaVtzXT1hcmd1bWVudHNbc107KG49KHI9dGhpcy5wcm9wcykub25SZXNldCk9PT1udWxsfHxuPT09dm9pZCAwfHxuLmNhbGwocix7YXJnczppLHJlYXNvbjoiaW1wZXJhdGl2ZS1hcGkifSksdGhpcy5zZXRTdGF0ZShaeSl9fWNvbXBvbmVudERpZENhdGNoKHQsbil7dmFyIHIsbzsocj0obz10aGlzLnByb3BzKS5vbkVycm9yKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChvLHQsbil9Y29tcG9uZW50RGlkVXBkYXRlKHQsbil7Y29uc3R7ZGlkQ2F0Y2g6cn09dGhpcy5zdGF0ZSx7cmVzZXRLZXlzOm99PXRoaXMucHJvcHM7aWYociYmbi5lcnJvciE9PW51bGwmJllzZSh0LnJlc2V0S2V5cyxvKSl7dmFyIGksczsoaT0ocz10aGlzLnByb3BzKS5vblJlc2V0KT09PW51bGx8fGk9PT12b2lkIDB8fGkuY2FsbChzLHtuZXh0Om8scHJldjp0LnJlc2V0S2V5cyxyZWFzb246ImtleXMifSksdGhpcy5zZXRTdGF0ZShaeSl9fXJlbmRlcigpe2NvbnN0e2NoaWxkcmVuOnQsZmFsbGJhY2tSZW5kZXI6bixGYWxsYmFja0NvbXBvbmVudDpyLGZhbGxiYWNrOm99PXRoaXMucHJvcHMse2RpZENhdGNoOmksZXJyb3I6c309dGhpcy5zdGF0ZTtsZXQgYT10O2lmKGkpe2NvbnN0IGw9e2Vycm9yOnMscmVzZXRFcnJvckJvdW5kYXJ5OnRoaXMucmVzZXRFcnJvckJvdW5kYXJ5fTtpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIilhPW4obCk7ZWxzZSBpZihyKWE9aC5jcmVhdGVFbGVtZW50KHIsbCk7ZWxzZSBpZihvPT09bnVsbHx8aC5pc1ZhbGlkRWxlbWVudChvKSlhPW87ZWxzZSB0aHJvdyBzfXJldHVybiBoLmNyZWF0ZUVsZW1lbnQoR3NlLlByb3ZpZGVyLHt2YWx1ZTp7ZGlkQ2F0Y2g6aSxlcnJvcjpzLHJlc2V0RXJyb3JCb3VuZGFyeTp0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeX19LGEpfX1mdW5jdGlvbiBZc2UoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06W107cmV0dXJuIGUubGVuZ3RoIT09dC5sZW5ndGh8fGUuc29tZSgobixyKT0+IU9iamVjdC5pcyhuLHRbcl0pKX0vKioKICogUmVhY3QgUm91dGVyIERPTSB2Ni4yMS4yCiAqCiAqIENvcHlyaWdodCAoYykgUmVtaXggU29mdHdhcmUgSW5jLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRS5tZCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKgogKiBAbGljZW5zZSBNSVQKICovZnVuY3Rpb24gaWcoKXtyZXR1cm4gaWc9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxpZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRUQoZSx0KXtyZXR1cm4gcWooe2Jhc2VuYW1lOnQ9PW51bGw/dm9pZCAwOnQuYmFzZW5hbWUsZnV0dXJlOmlnKHt9LHQ9PW51bGw/dm9pZCAwOnQuZnV0dXJlLHt2N19wcmVwZW5kQmFzZW5hbWU6ITB9KSxoaXN0b3J5Om1qKHt3aW5kb3c6dD09bnVsbD92b2lkIDA6dC53aW5kb3d9KSxoeWRyYXRpb25EYXRhOih0PT1udWxsP3ZvaWQgMDp0Lmh5ZHJhdGlvbkRhdGEpfHxYc2UoKSxyb3V0ZXM6ZSxtYXBSb3V0ZVByb3BlcnRpZXM6dzYsd2luZG93OnQ9PW51bGw/dm9pZCAwOnQud2luZG93fSkuaW5pdGlhbGl6ZSgpfWZ1bmN0aW9uIFhzZSgpe3ZhciBlO2xldCB0PShlPXdpbmRvdyk9PW51bGw/dm9pZCAwOmUuX19zdGF0aWNSb3V0ZXJIeWRyYXRpb25EYXRhO3JldHVybiB0JiZ0LmVycm9ycyYmKHQ9aWcoe30sdCx7ZXJyb3JzOlpzZSh0LmVycm9ycyl9KSksdH1mdW5jdGlvbiBac2UoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9T2JqZWN0LmVudHJpZXMoZSksbj17fTtmb3IobGV0W3Isb11vZiB0KWlmKG8mJm8uX190eXBlPT09IlJvdXRlRXJyb3JSZXNwb25zZSIpbltyXT1uZXcgQzEoby5zdGF0dXMsby5zdGF0dXNUZXh0LG8uZGF0YSxvLmludGVybmFsPT09ITApO2Vsc2UgaWYobyYmby5fX3R5cGU9PT0iRXJyb3IiKXtpZihvLl9fc3ViVHlwZSl7bGV0IGk9d2luZG93W28uX19zdWJUeXBlXTtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIil0cnl7bGV0IHM9bmV3IGkoby5tZXNzYWdlKTtzLnN0YWNrPSIiLG5bcl09c31jYXRjaHt9fWlmKG5bcl09PW51bGwpe2xldCBpPW5ldyBFcnJvcihvLm1lc3NhZ2UpO2kuc3RhY2s9IiIsbltyXT1pfX1lbHNlIG5bcl09bztyZXR1cm4gbn1jb25zdCBKc2U9aC5jcmVhdGVDb250ZXh0KHtpc1RyYW5zaXRpb25pbmc6ITF9KSxRc2U9aC5jcmVhdGVDb250ZXh0KG5ldyBNYXApLGVhZT0ic3RhcnRUcmFuc2l0aW9uIix0Tz1fT1tlYWVdLHRhZT0iZmx1c2hTeW5jIixuTz1TTFt0YWVdO2Z1bmN0aW9uIG5hZShlKXt0Tz90TyhlKTplKCl9ZnVuY3Rpb24gQnUoZSl7bk8/bk8oZSk6ZSgpfWNsYXNzIHJhZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdHVzPSJwZW5kaW5nIix0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKHQsbik9Pnt0aGlzLnJlc29sdmU9cj0+e3RoaXMuc3RhdHVzPT09InBlbmRpbmciJiYodGhpcy5zdGF0dXM9InJlc29sdmVkIix0KHIpKX0sdGhpcy5yZWplY3Q9cj0+e3RoaXMuc3RhdHVzPT09InBlbmRpbmciJiYodGhpcy5zdGF0dXM9InJlamVjdGVkIixuKHIpKX19KX19ZnVuY3Rpb24gX0QoZSl7bGV0e2ZhbGxiYWNrRWxlbWVudDp0LHJvdXRlcjpuLGZ1dHVyZTpyfT1lLFtvLGldPWgudXNlU3RhdGUobi5zdGF0ZSksW3MsYV09aC51c2VTdGF0ZSgpLFtsLGNdPWgudXNlU3RhdGUoe2lzVHJhbnNpdGlvbmluZzohMX0pLFt1LGRdPWgudXNlU3RhdGUoKSxbZixwXT1oLnVzZVN0YXRlKCksW20sZ109aC51c2VTdGF0ZSgpLHk9aC51c2VSZWYobmV3IE1hcCkse3Y3X3N0YXJ0VHJhbnNpdGlvbjp2fT1yfHx7fSx4PWgudXNlQ2FsbGJhY2soXz0+e3Y/bmFlKF8pOl8oKX0sW3ZdKSx3PWgudXNlQ2FsbGJhY2soKF8sUCk9PntsZXR7ZGVsZXRlZEZldGNoZXJzOk0sdW5zdGFibGVfZmx1c2hTeW5jOkEsdW5zdGFibGVfdmlld1RyYW5zaXRpb25PcHRzOkl9PVA7TS5mb3JFYWNoKHJlPT55LmN1cnJlbnQuZGVsZXRlKHJlKSksXy5mZXRjaGVycy5mb3JFYWNoKChyZSxWKT0+e3JlLmRhdGEhPT12b2lkIDAmJnkuY3VycmVudC5zZXQoVixyZS5kYXRhKX0pO2xldCBMPW4ud2luZG93PT1udWxsfHx0eXBlb2Ygbi53aW5kb3cuZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbiE9ImZ1bmN0aW9uIjtpZighSXx8TCl7QT9CdSgoKT0+aShfKSk6eCgoKT0+aShfKSk7cmV0dXJufWlmKEEpe0J1KCgpPT57ZiYmKHUmJnUucmVzb2x2ZSgpLGYuc2tpcFRyYW5zaXRpb24oKSksYyh7aXNUcmFuc2l0aW9uaW5nOiEwLGZsdXNoU3luYzohMCxjdXJyZW50TG9jYXRpb246SS5jdXJyZW50TG9jYXRpb24sbmV4dExvY2F0aW9uOkkubmV4dExvY2F0aW9ufSl9KTtsZXQgcmU9bi53aW5kb3cuZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+e0J1KCgpPT5pKF8pKX0pO3JlLmZpbmlzaGVkLmZpbmFsbHkoKCk9PntCdSgoKT0+e2Qodm9pZCAwKSxwKHZvaWQgMCksYSh2b2lkIDApLGMoe2lzVHJhbnNpdGlvbmluZzohMX0pfSl9KSxCdSgoKT0+cChyZSkpO3JldHVybn1mPyh1JiZ1LnJlc29sdmUoKSxmLnNraXBUcmFuc2l0aW9uKCksZyh7c3RhdGU6XyxjdXJyZW50TG9jYXRpb246SS5jdXJyZW50TG9jYXRpb24sbmV4dExvY2F0aW9uOkkubmV4dExvY2F0aW9ufSkpOihhKF8pLGMoe2lzVHJhbnNpdGlvbmluZzohMCxmbHVzaFN5bmM6ITEsY3VycmVudExvY2F0aW9uOkkuY3VycmVudExvY2F0aW9uLG5leHRMb2NhdGlvbjpJLm5leHRMb2NhdGlvbn0pKX0sW24ud2luZG93LGYsdSx5LHhdKTtoLnVzZUxheW91dEVmZmVjdCgoKT0+bi5zdWJzY3JpYmUodyksW24sd10pLGgudXNlRWZmZWN0KCgpPT57bC5pc1RyYW5zaXRpb25pbmcmJiFsLmZsdXNoU3luYyYmZChuZXcgcmFlKX0sW2xdKSxoLnVzZUVmZmVjdCgoKT0+e2lmKHUmJnMmJm4ud2luZG93KXtsZXQgXz1zLFA9dS5wcm9taXNlLE09bi53aW5kb3cuZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihhc3luYygpPT57eCgoKT0+aShfKSksYXdhaXQgUH0pO00uZmluaXNoZWQuZmluYWxseSgoKT0+e2Qodm9pZCAwKSxwKHZvaWQgMCksYSh2b2lkIDApLGMoe2lzVHJhbnNpdGlvbmluZzohMX0pfSkscChNKX19LFt4LHMsdSxuLndpbmRvd10pLGgudXNlRWZmZWN0KCgpPT57dSYmcyYmby5sb2NhdGlvbi5rZXk9PT1zLmxvY2F0aW9uLmtleSYmdS5yZXNvbHZlKCl9LFt1LGYsby5sb2NhdGlvbixzXSksaC51c2VFZmZlY3QoKCk9PnshbC5pc1RyYW5zaXRpb25pbmcmJm0mJihhKG0uc3RhdGUpLGMoe2lzVHJhbnNpdGlvbmluZzohMCxmbHVzaFN5bmM6ITEsY3VycmVudExvY2F0aW9uOm0uY3VycmVudExvY2F0aW9uLG5leHRMb2NhdGlvbjptLm5leHRMb2NhdGlvbn0pLGcodm9pZCAwKSl9LFtsLmlzVHJhbnNpdGlvbmluZyxtXSksaC51c2VFZmZlY3QoKCk9Pnt9LFtdKTtsZXQgaz1oLnVzZU1lbW8oKCk9Pih7Y3JlYXRlSHJlZjpuLmNyZWF0ZUhyZWYsZW5jb2RlTG9jYXRpb246bi5lbmNvZGVMb2NhdGlvbixnbzpfPT5uLm5hdmlnYXRlKF8pLHB1c2g6KF8sUCxNKT0+bi5uYXZpZ2F0ZShfLHtzdGF0ZTpQLHByZXZlbnRTY3JvbGxSZXNldDpNPT1udWxsP3ZvaWQgMDpNLnByZXZlbnRTY3JvbGxSZXNldH0pLHJlcGxhY2U6KF8sUCxNKT0+bi5uYXZpZ2F0ZShfLHtyZXBsYWNlOiEwLHN0YXRlOlAscHJldmVudFNjcm9sbFJlc2V0Ok09PW51bGw/dm9pZCAwOk0ucHJldmVudFNjcm9sbFJlc2V0fSl9KSxbbl0pLEU9bi5iYXNlbmFtZXx8Ii8iLFM9aC51c2VNZW1vKCgpPT4oe3JvdXRlcjpuLG5hdmlnYXRvcjprLHN0YXRpYzohMSxiYXNlbmFtZTpFfSksW24sayxFXSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChoLkZyYWdtZW50LG51bGwsaC5jcmVhdGVFbGVtZW50KCRnLlByb3ZpZGVyLHt2YWx1ZTpTfSxoLmNyZWF0ZUVsZW1lbnQoUlAuUHJvdmlkZXIse3ZhbHVlOm99LGguY3JlYXRlRWxlbWVudChRc2UuUHJvdmlkZXIse3ZhbHVlOnkuY3VycmVudH0saC5jcmVhdGVFbGVtZW50KEpzZS5Qcm92aWRlcix7dmFsdWU6bH0saC5jcmVhdGVFbGVtZW50KGI2LHtiYXNlbmFtZTpFLGxvY2F0aW9uOm8ubG9jYXRpb24sbmF2aWdhdGlvblR5cGU6by5oaXN0b3J5QWN0aW9uLG5hdmlnYXRvcjprLGZ1dHVyZTp7djdfcmVsYXRpdmVTcGxhdFBhdGg6bi5mdXR1cmUudjdfcmVsYXRpdmVTcGxhdFBhdGh9fSxvLmluaXRpYWxpemVkfHxuLmZ1dHVyZS52N19wYXJ0aWFsSHlkcmF0aW9uP2guY3JlYXRlRWxlbWVudChvYWUse3JvdXRlczpuLnJvdXRlcyxmdXR1cmU6bi5mdXR1cmUsc3RhdGU6b30pOnQpKSkpKSxudWxsKX1mdW5jdGlvbiBvYWUoZSl7bGV0e3JvdXRlczp0LGZ1dHVyZTpuLHN0YXRlOnJ9PWU7cmV0dXJuIGw2KHQsdm9pZCAwLHIsbil9dmFyIHJPOyhmdW5jdGlvbihlKXtlLlVzZVNjcm9sbFJlc3RvcmF0aW9uPSJ1c2VTY3JvbGxSZXN0b3JhdGlvbiIsZS5Vc2VTdWJtaXQ9InVzZVN1Ym1pdCIsZS5Vc2VTdWJtaXRGZXRjaGVyPSJ1c2VTdWJtaXRGZXRjaGVyIixlLlVzZUZldGNoZXI9InVzZUZldGNoZXIiLGUudXNlVmlld1RyYW5zaXRpb25TdGF0ZT0idXNlVmlld1RyYW5zaXRpb25TdGF0ZSJ9KShyT3x8KHJPPXt9KSk7dmFyIG9POyhmdW5jdGlvbihlKXtlLlVzZUZldGNoZXI9InVzZUZldGNoZXIiLGUuVXNlRmV0Y2hlcnM9InVzZUZldGNoZXJzIixlLlVzZVNjcm9sbFJlc3RvcmF0aW9uPSJ1c2VTY3JvbGxSZXN0b3JhdGlvbiJ9KShvT3x8KG9PPXt9KSk7ZnVuY3Rpb24gc1Moe2Vycm9yOmUscmVzZXRFcnJvckJvdW5kYXJ5OnR9KXtyZXR1cm4gY29uc29sZS5lcnJvcihlKSxiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1zY3JlZW4gaC1zY3JlZW4gYmctY2FyZC1mb3JlZ3JvdW5kIixjaGlsZHJlbjpiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIHAtMTAiLGNoaWxkcmVuOmIuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIHAtMTAgYmctY2FyZCB0ZXh0LXByaW1hcnkiLGNoaWxkcmVuOltiLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIixjaGlsZHJlbjpbYi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC1bMC41ZW1dIHRleHQtbGcgZm9udC1ib2xkIHRleHQtY2VudGVyIHB5LTIiLGNoaWxkcmVuOltiLmpzeCh5UCx7fSksIiBlbmNvdW50ZXJlZCBhbiBlcnJvciJdfSksYi5qc3goImJ1dHRvbiIse29uQ2xpY2s6dCxjaGlsZHJlbjpiLmpzeChSZyx7fSl9KV19KSxiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LTR4bCBmb250LW5vcm1hbCAiLGNoaWxkcmVuOiJNZXNzYWdlOiJ9KSxiLmpzeCgicHJlIix7Y2hpbGRyZW46ZS5tZXNzYWdlfSksZS5zdGFjayYmYi5qc3goVmcse3R5cGU6InNpbmdsZSIsY2xhc3NOYW1lOiJmb250LXNlcmlmIixjb2xsYXBzaWJsZTohMCxkZWZhdWx0VmFsdWU6ImVycm9yIixjaGlsZHJlbjpiLmpzeHMoaU0se3ZhbHVlOiJlcnJvciIsY2hpbGRyZW46W2IuanN4KHNNLHtjaGlsZHJlbjoiU3RhY2sgdHJhY2U6In0pLGIuanN4KG5wLHtjbGFzc05hbWU6InAtNCBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIixjaGlsZHJlbjplLnN0YWNrJiZiLmpzeCgicHJlIix7Y2hpbGRyZW46ZS5zdGFja30pfSldfSl9KV19KX0pfSl9ZnVuY3Rpb24gaWFlKCl7Y29uc3QgZT1oLnVzZU1lbW8oKCk9Pntjb25zdCB0PW5ldyB3MSgiL2FwaS92YWwiKSxuPW5ldyBIMSh0KTtyZXR1cm4gRUQoW3twYXRoOiIvKiIsZWxlbWVudDpiLmpzeChpUyx7ZmFsbGJhY2tSZW5kZXI6c1MsY2hpbGRyZW46Yi5qc3goa0Qse2FwaTp0LHN0b3JlOm59KX0pfV0se2Jhc2VuYW1lOiIvdmFsIn0pfSxbXSk7cmV0dXJuIGIuanN4KF9ELHtyb3V0ZXI6ZX0pfWZ1bmN0aW9uIHNhZSgpe2NvbnN0IGU9bmV3IHcxKCIvYXBpL3ZhbCIpLHQ9bmV3IEgxKGUpLG49RUQoW3twYXRoOiIvKiIsZWxlbWVudDpiLmpzeChpUyx7ZmFsbGJhY2tSZW5kZXI6c1MsY2hpbGRyZW46Yi5qc3goa0Qse2FwaTplLHN0b3JlOnR9KX0pfV0se2Jhc2VuYW1lOiIvYXBpL3ZhbC9zdGF0aWMifSk7cmV0dXJuIGIuanN4KF9ELHtyb3V0ZXI6bn0pfWZ1bmN0aW9uIGFhZSh7cm9vdDplLGNoaWxkcmVuOnR9KXtyZXR1cm4gJHIuY3JlYXRlUG9ydGFsKHQsZSl9Y29uc3QgbGFlPSh7Y2hpbGRyZW46ZSxzdHlsZTp0fSk9Pntjb25zdCBuPWgudXNlUmVmKG51bGwpLFtyLG9dPWgudXNlU3RhdGUobnVsbCk7cmV0dXJuIGgudXNlTGF5b3V0RWZmZWN0KCgpPT57aWYobi5jdXJyZW50KWlmKG4uY3VycmVudC5zaGFkb3dSb290KW8obi5jdXJyZW50LnNoYWRvd1Jvb3QpO2Vsc2V7Y29uc3QgaT1uLmN1cnJlbnQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pO28oaSl9fSxbXSksYi5qc3goImRpdiIse3JlZjpuLHN0eWxlOnQsaWQ6InZhbC1zaGFkb3ctcm9vdCIsY2hpbGRyZW46ciYmYi5qc3goYWFlLHtyb290OnIsY2hpbGRyZW46ZX0pfSl9LGNhZT0iL3NwYS9pbmRleC5jc3MiLHVhZT0idmFsLWFwcCIsZGFlPSJ2YWwtb3ZlcmxheSIsQ0Q9IlBvcG92ZXIiLFtPRCxzY2VdPXRvKENELFtndV0pLGFTPWd1KCksW2ZhZSx5dV09T0QoQ0QpLHBhZT1lPT57Y29uc3R7X19zY29wZVBvcG92ZXI6dCxjaGlsZHJlbjpuLG9wZW46cixkZWZhdWx0T3BlbjpvLG9uT3BlbkNoYW5nZTppLG1vZGFsOnM9ITF9PWUsYT1hUyh0KSxsPWgudXNlUmVmKG51bGwpLFtjLHVdPWgudXNlU3RhdGUoITEpLFtkPSExLGZdPVFvKHtwcm9wOnIsZGVmYXVsdFByb3A6byxvbkNoYW5nZTppfSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChqdyxhLGguY3JlYXRlRWxlbWVudChmYWUse3Njb3BlOnQsY29udGVudElkOkdyKCksdHJpZ2dlclJlZjpsLG9wZW46ZCxvbk9wZW5DaGFuZ2U6Zixvbk9wZW5Ub2dnbGU6aC51c2VDYWxsYmFjaygoKT0+ZihwPT4hcCksW2ZdKSxoYXNDdXN0b21BbmNob3I6YyxvbkN1c3RvbUFuY2hvckFkZDpoLnVzZUNhbGxiYWNrKCgpPT51KCEwKSxbXSksb25DdXN0b21BbmNob3JSZW1vdmU6aC51c2VDYWxsYmFjaygoKT0+dSghMSksW10pLG1vZGFsOnN9LG4pKX0saGFlPSJQb3BvdmVyVHJpZ2dlciIsbWFlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVQb3BvdmVyOm4sLi4ucn09ZSxvPXl1KGhhZSxuKSxpPWFTKG4pLHM9cWUodCxvLnRyaWdnZXJSZWYpLGE9aC5jcmVhdGVFbGVtZW50KFJlLmJ1dHRvbixGKHt0eXBlOiJidXR0b24iLCJhcmlhLWhhc3BvcHVwIjoiZGlhbG9nIiwiYXJpYS1leHBhbmRlZCI6by5vcGVuLCJhcmlhLWNvbnRyb2xzIjpvLmNvbnRlbnRJZCwiZGF0YS1zdGF0ZSI6TUQoby5vcGVuKX0scix7cmVmOnMsb25DbGljazphZShlLm9uQ2xpY2ssby5vbk9wZW5Ub2dnbGUpfSkpO3JldHVybiBvLmhhc0N1c3RvbUFuY2hvcj9hOmguY3JlYXRlRWxlbWVudCh6dyxGKHthc0NoaWxkOiEwfSxpKSxhKX0pLFREPSJQb3BvdmVyUG9ydGFsIixbZ2FlLHZhZV09T0QoVEQse2ZvcmNlTW91bnQ6dm9pZCAwfSkseWFlPWU9Pntjb25zdHtfX3Njb3BlUG9wb3Zlcjp0LGZvcmNlTW91bnQ6bixjaGlsZHJlbjpyLGNvbnRhaW5lcjpvfT1lLGk9eXUoVEQsdCk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChnYWUse3Njb3BlOnQsZm9yY2VNb3VudDpufSxoLmNyZWF0ZUVsZW1lbnQoZXIse3ByZXNlbnQ6bnx8aS5vcGVufSxoLmNyZWF0ZUVsZW1lbnQoeXYse2FzQ2hpbGQ6ITAsY29udGFpbmVyOm99LHIpKSl9LEhmPSJQb3BvdmVyQ29udGVudCIseGFlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49dmFlKEhmLGUuX19zY29wZVBvcG92ZXIpLHtmb3JjZU1vdW50OnI9bi5mb3JjZU1vdW50LC4uLm99PWUsaT15dShIZixlLl9fc2NvcGVQb3BvdmVyKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGVyLHtwcmVzZW50OnJ8fGkub3Blbn0saS5tb2RhbD9oLmNyZWF0ZUVsZW1lbnQoYmFlLEYoe30sbyx7cmVmOnR9KSk6aC5jcmVhdGVFbGVtZW50KHdhZSxGKHt9LG8se3JlZjp0fSkpKX0pLGJhZT1oLmZvcndhcmRSZWYoKGUsdCk9Pntjb25zdCBuPXl1KEhmLGUuX19zY29wZVBvcG92ZXIpLHI9aC51c2VSZWYobnVsbCksbz1xZSh0LHIpLGk9aC51c2VSZWYoITEpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHM9ci5jdXJyZW50O2lmKHMpcmV0dXJuIGh2KHMpfSxbXSksaC5jcmVhdGVFbGVtZW50KGJ2LHthczpBaSxhbGxvd1BpbmNoWm9vbTohMH0saC5jcmVhdGVFbGVtZW50KFBELEYoe30sZSx7cmVmOm8sdHJhcEZvY3VzOm4ub3BlbixkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITAsb25DbG9zZUF1dG9Gb2N1czphZShlLm9uQ2xvc2VBdXRvRm9jdXMscz0+e3ZhciBhO3MucHJldmVudERlZmF1bHQoKSxpLmN1cnJlbnR8fChhPW4udHJpZ2dlclJlZi5jdXJyZW50KT09PW51bGx8fGE9PT12b2lkIDB8fGEuZm9jdXMoKX0pLG9uUG9pbnRlckRvd25PdXRzaWRlOmFlKGUub25Qb2ludGVyRG93bk91dHNpZGUscz0+e2NvbnN0IGE9cy5kZXRhaWwub3JpZ2luYWxFdmVudCxsPWEuYnV0dG9uPT09MCYmYS5jdHJsS2V5PT09ITAsYz1hLmJ1dHRvbj09PTJ8fGw7aS5jdXJyZW50PWN9LHtjaGVja0ZvckRlZmF1bHRQcmV2ZW50ZWQ6ITF9KSxvbkZvY3VzT3V0c2lkZTphZShlLm9uRm9jdXNPdXRzaWRlLHM9PnMucHJldmVudERlZmF1bHQoKSx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOiExfSl9KSkpfSksd2FlPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0IG49eXUoSGYsZS5fX3Njb3BlUG9wb3Zlcikscj1oLnVzZVJlZighMSksbz1oLnVzZVJlZighMSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChQRCxGKHt9LGUse3JlZjp0LHRyYXBGb2N1czohMSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6ITEsb25DbG9zZUF1dG9Gb2N1czppPT57dmFyIHM7aWYoKHM9ZS5vbkNsb3NlQXV0b0ZvY3VzKT09PW51bGx8fHM9PT12b2lkIDB8fHMuY2FsbChlLGkpLCFpLmRlZmF1bHRQcmV2ZW50ZWQpe3ZhciBhO3IuY3VycmVudHx8KGE9bi50cmlnZ2VyUmVmLmN1cnJlbnQpPT09bnVsbHx8YT09PXZvaWQgMHx8YS5mb2N1cygpLGkucHJldmVudERlZmF1bHQoKX1yLmN1cnJlbnQ9ITEsby5jdXJyZW50PSExfSxvbkludGVyYWN0T3V0c2lkZTppPT57dmFyIHMsYTsocz1lLm9uSW50ZXJhY3RPdXRzaWRlKT09PW51bGx8fHM9PT12b2lkIDB8fHMuY2FsbChlLGkpLGkuZGVmYXVsdFByZXZlbnRlZHx8KHIuY3VycmVudD0hMCxpLmRldGFpbC5vcmlnaW5hbEV2ZW50LnR5cGU9PT0icG9pbnRlcmRvd24iJiYoby5jdXJyZW50PSEwKSk7Y29uc3QgbD1pLnRhcmdldDsoKGE9bi50cmlnZ2VyUmVmLmN1cnJlbnQpPT09bnVsbHx8YT09PXZvaWQgMD92b2lkIDA6YS5jb250YWlucyhsKSkmJmkucHJldmVudERlZmF1bHQoKSxpLmRldGFpbC5vcmlnaW5hbEV2ZW50LnR5cGU9PT0iZm9jdXNpbiImJm8uY3VycmVudCYmaS5wcmV2ZW50RGVmYXVsdCgpfX0pKX0pLFBEPWguZm9yd2FyZFJlZigoZSx0KT0+e2NvbnN0e19fc2NvcGVQb3BvdmVyOm4sdHJhcEZvY3VzOnIsb25PcGVuQXV0b0ZvY3VzOm8sb25DbG9zZUF1dG9Gb2N1czppLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czpzLG9uRXNjYXBlS2V5RG93bjphLG9uUG9pbnRlckRvd25PdXRzaWRlOmwsb25Gb2N1c091dHNpZGU6YyxvbkludGVyYWN0T3V0c2lkZTp1LC4uLmR9PWUsZj15dShIZixuKSxwPWFTKG4pO3JldHVybiBndigpLGguY3JlYXRlRWxlbWVudCh2dix7YXNDaGlsZDohMCxsb29wOiEwLHRyYXBwZWQ6cixvbk1vdW50QXV0b0ZvY3VzOm8sb25Vbm1vdW50QXV0b0ZvY3VzOml9LGguY3JlYXRlRWxlbWVudChtdix7YXNDaGlsZDohMCxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6cyxvbkludGVyYWN0T3V0c2lkZTp1LG9uRXNjYXBlS2V5RG93bjphLG9uUG9pbnRlckRvd25PdXRzaWRlOmwsb25Gb2N1c091dHNpZGU6YyxvbkRpc21pc3M6KCk9PmYub25PcGVuQ2hhbmdlKCExKX0saC5jcmVhdGVFbGVtZW50KEZ3LEYoeyJkYXRhLXN0YXRlIjpNRChmLm9wZW4pLHJvbGU6ImRpYWxvZyIsaWQ6Zi5jb250ZW50SWR9LHAsZCx7cmVmOnQsc3R5bGU6ey4uLmQuc3R5bGUsIi0tcmFkaXgtcG9wb3Zlci1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4iOiJ2YXIoLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbikiLCItLXJhZGl4LXBvcG92ZXItY29udGVudC1hdmFpbGFibGUtd2lkdGgiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKSIsIi0tcmFkaXgtcG9wb3Zlci1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCkiLCItLXJhZGl4LXBvcG92ZXItdHJpZ2dlci13aWR0aCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3Itd2lkdGgpIiwiLS1yYWRpeC1wb3BvdmVyLXRyaWdnZXItaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci1oZWlnaHQpIn19KSkpKX0pO2Z1bmN0aW9uIE1EKGUpe3JldHVybiBlPyJvcGVuIjoiY2xvc2VkIn1jb25zdCBTYWU9cGFlLGthZT1tYWUsUkQ9eWFlLGxTPXhhZSxFYWU9U2FlLF9hZT1rYWUsQ2FlPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTplLGFsaWduOnQ9ImNlbnRlciIsc2lkZU9mZnNldDpuPTQsLi4ucn0sbyk9PmIuanN4KFJELHtjaGlsZHJlbjpiLmpzeChsUyx7cmVmOm8sYWxpZ246dCxzaWRlT2Zmc2V0Om4sY2xhc3NOYW1lOlVlKCJ6LTUwIHctNzIgcm91bmRlZC1tZCBib3JkZXIgYmctcG9wb3ZlciBwLTQgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kIG91dGxpbmUtbm9uZSBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIiLGUpLC4uLnJ9KX0pKTtDYWUuZGlzcGxheU5hbWU9bFMuZGlzcGxheU5hbWU7Y29uc3QgY1M9InAtMSBib3JkZXIgcm91bmRlZC1mdWxsIHNoYWRvdyBib3JkZXItYWNjZW50IixpTz0idmFsYnVpbGQ6dXJsQmVmb3JlTmF2aWdhdGlvbiI7ZnVuY3Rpb24gT2FlKHthcGk6ZSxwYXRjaGVzOnQsZGlyZWN0aW9uOm4sb25DbGlja1BhdGNoZXM6cn0pe2NvbnN0e3RoZW1lOm8sc2V0VGhlbWU6aSxlZGl0TW9kZTpzLHNldEVkaXRNb2RlOmEsc2Vzc2lvbjpsfT1OZygpO2lmKGwuc3RhdHVzPT09InN1Y2Nlc3MiJiZsLmRhdGEubW9kZT09PSJ1bmF1dGhvcml6ZWQiKXJldHVybiBiLmpzeHMoc08se2RpcmVjdGlvbjpuLGhyZWY6ZS5nZXRMb2dpblVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46W2IuanN4KCJzcGFuIix7Y2hpbGRyZW46IkxvZ2luIn0pLGIuanN4KEprLHtzaXplOjE4fSldfSk7aWYobC5zdGF0dXM9PT0ic3VjY2VzcyImJiFsLmRhdGEuZW5hYmxlZClyZXR1cm4gYi5qc3hzKHNPLHtkaXJlY3Rpb246bixocmVmOmUuZ2V0RW5hYmxlVXJsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxjaGlsZHJlbjpbYi5qc3goInNwYW4iLHtjaGlsZHJlbjoiRW5hYmxlIn0pLGIuanN4KEprLHtzaXplOjE4fSldfSk7Y29uc3RbYyx1XT1oLnVzZVN0YXRlKCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57bGV0IGQ9MDtmb3IoY29uc3QgZiBpbiB0KWQrPXRbZl0ubGVuZ3RoO3UoZCl9LFt0XSksYi5qc3hzKE5ELHtkaXJlY3Rpb246bixjaGlsZHJlbjpbYi5qc3goSnkse2FjdGl2ZTpzPT09ImhvdmVyInx8cz09PSJ3aW5kb3ciLG9uQ2xpY2s6KCk9PnthKGQ9PmQ9PT0iaG92ZXIifHxzPT09IndpbmRvdyI/Im9mZiI6ImhvdmVyIil9LGNoaWxkcmVuOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpzPT09ImhvdmVyInx8cz09PSJ3aW5kb3ciP2IuanN4KHNqLHtzaXplOjE4fSk6Yi5qc3goYWose3NpemU6MTh9KX0pfSksYi5qc3goSnkse2FjdGl2ZTpzPT09ImZ1bGwiLG9uQ2xpY2s6KCk9PntpZihzIT09ImZ1bGwiKWxvY2FsU3RvcmFnZS5zZXRJdGVtKGlPLHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx3aW5kb3cubG9jYXRpb24uaHJlZj1lLmdldEVkaXRVcmwoKTtlbHNlIGlmKHM9PT0iZnVsbCIpe2NvbnN0IGQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oaU8pO3dpbmRvdy5sb2NhdGlvbi5ocmVmPWR8fCIvIn19LGNoaWxkcmVuOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpzPT09ImZ1bGwiP2IuanN4KG1QLHtzaXplOjE1fSk6Yi5qc3gobmose3NpemU6MTV9KX0pfSksYyE9PXZvaWQgMCYmYi5qc3goSnkse29uQ2xpY2s6KCk9PntjPjAmJnIoKX0sY2hpbGRyZW46Yi5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpbYi5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgLXJpZ2h0LVsxMHB4XSAtdG9wLVsxMHB4XSBib3JkZXIgYm9yZGVyLWJvcmRlciByb3VuZGVkLWZ1bGwgcHgtMSBmb250LXNhbnMgdGV4dC14cyBiZy1jYXJkIHRleHQtYWNjZW50IixjaGlsZHJlbjpjfSksYi5qc3goZ1Ase3NpemU6MTh9KV19KX0pLGIuanN4KF9hZSx7Y2xhc3NOYW1lOmNTLGNoaWxkcmVuOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImgtWzI0cHhdIHctWzI0cHhdICBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46Yi5qc3goaWose3NpemU6MTh9KX0pfSksYi5qc3gobFMse2FsaWduOiJzdGFydCIsc2lkZU9mZnNldDoxMixzaWRlOiJyaWdodCIsY2xhc3NOYW1lOiJ6LTUwIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXBvcG92ZXIgcC00IHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZCBvdXRsaW5lLW5vbmUgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIixjaGlsZHJlbjpiLmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCBqdXN0aWZ5LWNlbnRlciBwLTQgZ2FwLXgtNCIsY2hpbGRyZW46W2IuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtZW5kIGp1c3RpZnktZW5kIHctZnVsbCIsY2hpbGRyZW46Yi5qc3goImRpdiIse2NsYXNzTmFtZToiaC1bMzRweF0gdy1bMzRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOmIuanN4cyhuUyx7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBwZWVyIGlubGluZS1mbGV4IGgtWzI0cHhdIHctWzM0cHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LWJhY2tncm91bmQgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ymctc2xhdGUtODAwIGRhdGEtW3N0YXRlPXVuY2hlY2tlZF06Ymctc2xhdGUtODAwIixkZWZhdWx0Q2hlY2tlZDpvPT09ImxpZ2h0IixvbkNsaWNrOigpPT57aShvPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiKX0sY2hpbGRyZW46W289PT0iZGFyayImJmIuanN4KG9qLHtzaXplOjEzLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVs0cHhdIGxlZnQtWzE3cHhdIHRleHQtd2hpdGUifSksYi5qc3godEQse2NsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBibG9jayBoLVsxNnB4XSB3LVsxNnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUgc2hhZG93LWxnIHJpbmctMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0cmFuc2xhdGUteC1bMTVweF0gZGF0YS1bc3RhdGU9dW5jaGVja2VkXTp0cmFuc2xhdGUteC0wIn0pLG89PT0ibGlnaHQiJiZiLmpzeChkaix7c2l6ZToxMyxjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bNHB4XSBsZWZ0LVsxcHhdIHRleHQtd2hpdGUifSldfSl9KX0pLGIuanN4KCJkaXYiLHtjaGlsZHJlbjpiLmpzeHMoImEiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGZvbnQtYm9sZCBoLVszNHB4XSBnYXAteC0xIixocmVmOmUuZ2V0RGlzYWJsZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46W2IuanN4KCJzcGFuIix7Y2hpbGRyZW46IkRpc2FibGUifSksYi5qc3goRzQse3NpemU6MTh9KV19KX0pXX0pfSldfSl9ZnVuY3Rpb24gc08oe2hyZWY6ZSxkaXJlY3Rpb246dCxjaGlsZHJlbjpufSl7cmV0dXJuIGIuanN4KE5ELHtkaXJlY3Rpb246dCxib3JkZXI6ITEsY2hpbGRyZW46Yi5qc3goImEiLHtjbGFzc05hbWU6Y1MsaHJlZjplLGNoaWxkcmVuOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTIgZ2FwLXktMiIsY2hpbGRyZW46bn0pfSl9KX1mdW5jdGlvbiBORCh7Y2hpbGRyZW46ZSxkaXJlY3Rpb246dCxib3JkZXI6bj0hMH0pe3JldHVybiBiLmpzeCgiZGl2Iix7Y2xhc3NOYW1lOlF0KCJmbGV4IGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgcHgtMiBweS0yIGZvbnQtc2FucyByb3VuZGVkLWZ1bGwgZ2FwLTMgdGV4dC1wcmltYXJ5IGJvcmRlci1maWxsIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tYmFja2dyb3VuZC85MCBmcm9tLTQwJSB0by1iYWNrZ3JvdW5kIGJhY2tkcm9wLWJsdXItbGcgZHJvcC1zaGFkb3ctMnhsIix7ImZsZXgtY29sIGl0ZW1zLXN0YXJ0Ijp0PT09InZlcnRpY2FsIiwiZmxleC1yb3cgaXRlbXMtY2VudGVyIjp0PT09Imhvcml6b250YWwifSx7Ym9yZGVyOm59KSxjaGlsZHJlbjplfSl9ZnVuY3Rpb24gSnkoe2FjdGl2ZTplLG9uQ2xpY2s6dCxjaGlsZHJlbjpufSl7cmV0dXJuIGIuanN4KCJidXR0b24iLHtjbGFzc05hbWU6UXQoY1MseyJiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkcm9wLXNoYWRvdy1bMHB4XzBweF8xMnB4X2hzbCh2YXIoLS1hY2NlbnQpKV0iOmV9KSxvbkNsaWNrOnQsY2hpbGRyZW46bn0pfXZhciB1Uz17ZXhwb3J0czp7fX0sbXA9e30sT3Y9e2V4cG9ydHM6e319LCREPXt9O2Z1bmN0aW9uIEFEKGUpe3ZhciB0LG4scj0iIjtpZih0eXBlb2YgZT09InN0cmluZyJ8fHR5cGVvZiBlPT0ibnVtYmVyIilyKz1lO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdJiYobj1BRChlW3RdKSkmJihyJiYocis9IiAiKSxyKz1uKTtlbHNlIGZvcih0IGluIGUpZVt0XSYmKHImJihyKz0iICIpLHIrPXQpO3JldHVybiByfWZ1bmN0aW9uIGFPKCl7Zm9yKHZhciBlLHQsbj0wLHI9IiI7bjxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbbisrXSkmJih0PUFEKGUpKSYmKHImJihyKz0iICIpLHIrPXQpO3JldHVybiByfWNvbnN0IFRhZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsY2xzeDphTyxkZWZhdWx0OmFPfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFBhZT1ySShUYWUpO3ZhciBMdD17fSxhaT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2FpLmRvbnRTZXRNZT1BYWU7YWkuZmluZEluQXJyYXk9TWFlO2FpLmludD0kYWU7YWkuaXNGdW5jdGlvbj1SYWU7YWkuaXNOdW09TmFlO2Z1bmN0aW9uIE1hZShlLHQpe2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZih0LmFwcGx5KHQsW2Vbbl0sbixlXSkpcmV0dXJuIGVbbl19ZnVuY3Rpb24gUmFlKGUpe3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uInx8T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgRnVuY3Rpb25dIn1mdW5jdGlvbiBOYWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmIWlzTmFOKGUpfWZ1bmN0aW9uICRhZShlKXtyZXR1cm4gcGFyc2VJbnQoZSwxMCl9ZnVuY3Rpb24gQWFlKGUsdCxuKXtpZihlW3RdKXJldHVybiBuZXcgRXJyb3IoIkludmFsaWQgcHJvcCAiLmNvbmNhdCh0LCIgcGFzc2VkIHRvICIpLmNvbmNhdChuLCIgLSBkbyBub3Qgc2V0IHRoaXMsIHNldCBpdCBvbiB0aGUgY2hpbGQuIikpfXZhciBUbD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO1RsLmJyb3dzZXJQcmVmaXhUb0tleT1JRDtUbC5icm93c2VyUHJlZml4VG9TdHlsZT1EYWU7VGwuZGVmYXVsdD12b2lkIDA7VGwuZ2V0UHJlZml4PUREO2NvbnN0IFF5PVsiTW96IiwiV2Via2l0IiwiTyIsIm1zIl07ZnVuY3Rpb24gREQoKXt2YXIgZTtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06InRyYW5zZm9ybSI7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIiI7Y29uc3Qgbj0oZT13aW5kb3cuZG9jdW1lbnQpPT09bnVsbHx8ZT09PXZvaWQgMHx8KGU9ZS5kb2N1bWVudEVsZW1lbnQpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5zdHlsZTtpZighbnx8dCBpbiBuKXJldHVybiIiO2ZvcihsZXQgcj0wO3I8UXkubGVuZ3RoO3IrKylpZihJRCh0LFF5W3JdKWluIG4pcmV0dXJuIFF5W3JdO3JldHVybiIifWZ1bmN0aW9uIElEKGUsdCl7cmV0dXJuIHQ/IiIuY29uY2F0KHQpLmNvbmNhdChJYWUoZSkpOmV9ZnVuY3Rpb24gRGFlKGUsdCl7cmV0dXJuIHQ/Ii0iLmNvbmNhdCh0LnRvTG93ZXJDYXNlKCksIi0iKS5jb25jYXQoZSk6ZX1mdW5jdGlvbiBJYWUoZSl7bGV0IHQ9IiIsbj0hMDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyluPyh0Kz1lW3JdLnRvVXBwZXJDYXNlKCksbj0hMSk6ZVtyXT09PSItIj9uPSEwOnQrPWVbcl07cmV0dXJuIHR9VGwuZGVmYXVsdD1ERCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShMdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7THQuYWRkQ2xhc3NOYW1lPXpEO0x0LmFkZEV2ZW50PXphZTtMdC5hZGRVc2VyU2VsZWN0U3R5bGVzPVhhZTtMdC5jcmVhdGVDU1NUcmFuc2Zvcm09S2FlO0x0LmNyZWF0ZVNWR1RyYW5zZm9ybT1xYWU7THQuZ2V0VG91Y2g9R2FlO0x0LmdldFRvdWNoSWRlbnRpZmllcj1ZYWU7THQuZ2V0VHJhbnNsYXRpb249ZFM7THQuaW5uZXJIZWlnaHQ9VmFlO0x0LmlubmVyV2lkdGg9SGFlO0x0Lm1hdGNoZXNTZWxlY3Rvcj1qRDtMdC5tYXRjaGVzU2VsZWN0b3JBbmRQYXJlbnRzVG89amFlO0x0Lm9mZnNldFhZRnJvbVBhcmVudD1XYWU7THQub3V0ZXJIZWlnaHQ9QmFlO0x0Lm91dGVyV2lkdGg9VWFlO0x0LnJlbW92ZUNsYXNzTmFtZT1GRDtMdC5yZW1vdmVFdmVudD1GYWU7THQucmVtb3ZlVXNlclNlbGVjdFN0eWxlcz1aYWU7dmFyIENyPWFpLGxPPUxhZShUbCk7ZnVuY3Rpb24gTEQoZSl7aWYodHlwZW9mIFdlYWtNYXAhPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IFdlYWtNYXAsbj1uZXcgV2Vha01hcDtyZXR1cm4oTEQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI/bjp0fSkoZSl9ZnVuY3Rpb24gTGFlKGUsdCl7aWYoIXQmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTtpZihlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIilyZXR1cm57ZGVmYXVsdDplfTt2YXIgbj1MRCh0KTtpZihuJiZuLmhhcyhlKSlyZXR1cm4gbi5nZXQoZSk7dmFyIHI9e30sbz1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Zm9yKHZhciBpIGluIGUpaWYoaSE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkpe3ZhciBzPW8/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpOm51bGw7cyYmKHMuZ2V0fHxzLnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsaSxzKTpyW2ldPWVbaV19cmV0dXJuIHIuZGVmYXVsdD1lLG4mJm4uc2V0KGUscikscn1sZXQgbmg9IiI7ZnVuY3Rpb24gakQoZSx0KXtyZXR1cm4gbmh8fChuaD0oMCxDci5maW5kSW5BcnJheSkoWyJtYXRjaGVzIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJvTWF0Y2hlc1NlbGVjdG9yIl0sZnVuY3Rpb24obil7cmV0dXJuKDAsQ3IuaXNGdW5jdGlvbikoZVtuXSl9KSksKDAsQ3IuaXNGdW5jdGlvbikoZVtuaF0pP2VbbmhdKHQpOiExfWZ1bmN0aW9uIGphZShlLHQsbil7bGV0IHI9ZTtkb3tpZihqRChyLHQpKXJldHVybiEwO2lmKHI9PT1uKXJldHVybiExO3I9ci5wYXJlbnROb2RlfXdoaWxlKHIpO3JldHVybiExfWZ1bmN0aW9uIHphZShlLHQsbixyKXtpZighZSlyZXR1cm47Y29uc3Qgbz17Y2FwdHVyZTohMCwuLi5yfTtlLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKHQsbixvKTplLmF0dGFjaEV2ZW50P2UuYXR0YWNoRXZlbnQoIm9uIit0LG4pOmVbIm9uIit0XT1ufWZ1bmN0aW9uIEZhZShlLHQsbixyKXtpZighZSlyZXR1cm47Y29uc3Qgbz17Y2FwdHVyZTohMCwuLi5yfTtlLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixvKTplLmRldGFjaEV2ZW50P2UuZGV0YWNoRXZlbnQoIm9uIit0LG4pOmVbIm9uIit0XT1udWxsfWZ1bmN0aW9uIEJhZShlKXtsZXQgdD1lLmNsaWVudEhlaWdodDtjb25zdCBuPWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiB0Kz0oMCxDci5pbnQpKG4uYm9yZGVyVG9wV2lkdGgpLHQrPSgwLENyLmludCkobi5ib3JkZXJCb3R0b21XaWR0aCksdH1mdW5jdGlvbiBVYWUoZSl7bGV0IHQ9ZS5jbGllbnRXaWR0aDtjb25zdCBuPWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUpO3JldHVybiB0Kz0oMCxDci5pbnQpKG4uYm9yZGVyTGVmdFdpZHRoKSx0Kz0oMCxDci5pbnQpKG4uYm9yZGVyUmlnaHRXaWR0aCksdH1mdW5jdGlvbiBWYWUoZSl7bGV0IHQ9ZS5jbGllbnRIZWlnaHQ7Y29uc3Qgbj1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm4gdC09KDAsQ3IuaW50KShuLnBhZGRpbmdUb3ApLHQtPSgwLENyLmludCkobi5wYWRkaW5nQm90dG9tKSx0fWZ1bmN0aW9uIEhhZShlKXtsZXQgdD1lLmNsaWVudFdpZHRoO2NvbnN0IG49ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSk7cmV0dXJuIHQtPSgwLENyLmludCkobi5wYWRkaW5nTGVmdCksdC09KDAsQ3IuaW50KShuLnBhZGRpbmdSaWdodCksdH1mdW5jdGlvbiBXYWUoZSx0LG4pe2NvbnN0IG89dD09PXQub3duZXJEb2N1bWVudC5ib2R5P3tsZWZ0OjAsdG9wOjB9OnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oZS5jbGllbnRYK3Quc2Nyb2xsTGVmdC1vLmxlZnQpL24scz0oZS5jbGllbnRZK3Quc2Nyb2xsVG9wLW8udG9wKS9uO3JldHVybnt4OmkseTpzfX1mdW5jdGlvbiBLYWUoZSx0KXtjb25zdCBuPWRTKGUsdCwicHgiKTtyZXR1cm57WygwLGxPLmJyb3dzZXJQcmVmaXhUb0tleSkoInRyYW5zZm9ybSIsbE8uZGVmYXVsdCldOm59fWZ1bmN0aW9uIHFhZShlLHQpe3JldHVybiBkUyhlLHQsIiIpfWZ1bmN0aW9uIGRTKGUsdCxuKXtsZXR7eDpyLHk6b309ZSxpPSJ0cmFuc2xhdGUoIi5jb25jYXQocikuY29uY2F0KG4sIiwiKS5jb25jYXQobykuY29uY2F0KG4sIikiKTtpZih0KXtjb25zdCBzPSIiLmNvbmNhdCh0eXBlb2YgdC54PT0ic3RyaW5nIj90Lng6dC54K24pLGE9IiIuY29uY2F0KHR5cGVvZiB0Lnk9PSJzdHJpbmciP3QueTp0Lnkrbik7aT0idHJhbnNsYXRlKCIuY29uY2F0KHMsIiwgIikuY29uY2F0KGEsIikiKStpfXJldHVybiBpfWZ1bmN0aW9uIEdhZShlLHQpe3JldHVybiBlLnRhcmdldFRvdWNoZXMmJigwLENyLmZpbmRJbkFycmF5KShlLnRhcmdldFRvdWNoZXMsbj0+dD09PW4uaWRlbnRpZmllcil8fGUuY2hhbmdlZFRvdWNoZXMmJigwLENyLmZpbmRJbkFycmF5KShlLmNoYW5nZWRUb3VjaGVzLG49PnQ9PT1uLmlkZW50aWZpZXIpfWZ1bmN0aW9uIFlhZShlKXtpZihlLnRhcmdldFRvdWNoZXMmJmUudGFyZ2V0VG91Y2hlc1swXSlyZXR1cm4gZS50YXJnZXRUb3VjaGVzWzBdLmlkZW50aWZpZXI7aWYoZS5jaGFuZ2VkVG91Y2hlcyYmZS5jaGFuZ2VkVG91Y2hlc1swXSlyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfWZ1bmN0aW9uIFhhZShlKXtpZighZSlyZXR1cm47bGV0IHQ9ZS5nZXRFbGVtZW50QnlJZCgicmVhY3QtZHJhZ2dhYmxlLXN0eWxlLWVsIik7dHx8KHQ9ZS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHQudHlwZT0idGV4dC9jc3MiLHQuaWQ9InJlYWN0LWRyYWdnYWJsZS1zdHlsZS1lbCIsdC5pbm5lckhUTUw9YC5yZWFjdC1kcmFnZ2FibGUtdHJhbnNwYXJlbnQtc2VsZWN0aW9uICo6Oi1tb3otc2VsZWN0aW9uIHthbGw6IGluaGVyaXQ7fQpgLHQuaW5uZXJIVE1MKz1gLnJlYWN0LWRyYWdnYWJsZS10cmFuc3BhcmVudC1zZWxlY3Rpb24gKjo6c2VsZWN0aW9uIHthbGw6IGluaGVyaXQ7fQpgLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh0KSksZS5ib2R5JiZ6RChlLmJvZHksInJlYWN0LWRyYWdnYWJsZS10cmFuc3BhcmVudC1zZWxlY3Rpb24iKX1mdW5jdGlvbiBaYWUoZSl7aWYoZSl0cnl7aWYoZS5ib2R5JiZGRChlLmJvZHksInJlYWN0LWRyYWdnYWJsZS10cmFuc3BhcmVudC1zZWxlY3Rpb24iKSxlLnNlbGVjdGlvbillLnNlbGVjdGlvbi5lbXB0eSgpO2Vsc2V7Y29uc3QgdD0oZS5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKTt0JiZ0LnR5cGUhPT0iQ2FyZXQiJiZ0LnJlbW92ZUFsbFJhbmdlcygpfX1jYXRjaHt9fWZ1bmN0aW9uIHpEKGUsdCl7ZS5jbGFzc0xpc3Q/ZS5jbGFzc0xpc3QuYWRkKHQpOmUuY2xhc3NOYW1lLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIuY29uY2F0KHQsIig/IVxcUykiKSkpfHwoZS5jbGFzc05hbWUrPSIgIi5jb25jYXQodCkpfWZ1bmN0aW9uIEZEKGUsdCl7ZS5jbGFzc0xpc3Q/ZS5jbGFzc0xpc3QucmVtb3ZlKHQpOmUuY2xhc3NOYW1lPWUuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKD86XnxcXHMpIi5jb25jYXQodCwiKD8hXFxTKSIpLCJnIiksIiIpfXZhciBsaT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2xpLmNhbkRyYWdYPWVsZTtsaS5jYW5EcmFnWT10bGU7bGkuY3JlYXRlQ29yZURhdGE9cmxlO2xpLmNyZWF0ZURyYWdnYWJsZURhdGE9b2xlO2xpLmdldEJvdW5kUG9zaXRpb249SmFlO2xpLmdldENvbnRyb2xQb3NpdGlvbj1ubGU7bGkuc25hcFRvR3JpZD1RYWU7dmFyIGdyPWFpLGdjPUx0O2Z1bmN0aW9uIEphZShlLHQsbil7aWYoIWUucHJvcHMuYm91bmRzKXJldHVyblt0LG5dO2xldHtib3VuZHM6cn09ZS5wcm9wcztyPXR5cGVvZiByPT0ic3RyaW5nIj9yOmlsZShyKTtjb25zdCBvPWZTKGUpO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7Y29uc3R7b3duZXJEb2N1bWVudDppfT1vLHM9aS5kZWZhdWx0VmlldztsZXQgYTtpZihyPT09InBhcmVudCI/YT1vLnBhcmVudE5vZGU6YT1pLnF1ZXJ5U2VsZWN0b3IociksIShhIGluc3RhbmNlb2Ygcy5IVE1MRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKCdCb3VuZHMgc2VsZWN0b3IgIicrcisnIiBjb3VsZCBub3QgZmluZCBhbiBlbGVtZW50LicpO2NvbnN0IGw9YSxjPXMuZ2V0Q29tcHV0ZWRTdHlsZShvKSx1PXMuZ2V0Q29tcHV0ZWRTdHlsZShsKTtyPXtsZWZ0Oi1vLm9mZnNldExlZnQrKDAsZ3IuaW50KSh1LnBhZGRpbmdMZWZ0KSsoMCxnci5pbnQpKGMubWFyZ2luTGVmdCksdG9wOi1vLm9mZnNldFRvcCsoMCxnci5pbnQpKHUucGFkZGluZ1RvcCkrKDAsZ3IuaW50KShjLm1hcmdpblRvcCkscmlnaHQ6KDAsZ2MuaW5uZXJXaWR0aCkobCktKDAsZ2Mub3V0ZXJXaWR0aCkobyktby5vZmZzZXRMZWZ0KygwLGdyLmludCkodS5wYWRkaW5nUmlnaHQpLSgwLGdyLmludCkoYy5tYXJnaW5SaWdodCksYm90dG9tOigwLGdjLmlubmVySGVpZ2h0KShsKS0oMCxnYy5vdXRlckhlaWdodCkobyktby5vZmZzZXRUb3ArKDAsZ3IuaW50KSh1LnBhZGRpbmdCb3R0b20pLSgwLGdyLmludCkoYy5tYXJnaW5Cb3R0b20pfX1yZXR1cm4oMCxnci5pc051bSkoci5yaWdodCkmJih0PU1hdGgubWluKHQsci5yaWdodCkpLCgwLGdyLmlzTnVtKShyLmJvdHRvbSkmJihuPU1hdGgubWluKG4sci5ib3R0b20pKSwoMCxnci5pc051bSkoci5sZWZ0KSYmKHQ9TWF0aC5tYXgodCxyLmxlZnQpKSwoMCxnci5pc051bSkoci50b3ApJiYobj1NYXRoLm1heChuLHIudG9wKSksW3Qsbl19ZnVuY3Rpb24gUWFlKGUsdCxuKXtjb25zdCByPU1hdGgucm91bmQodC9lWzBdKSplWzBdLG89TWF0aC5yb3VuZChuL2VbMV0pKmVbMV07cmV0dXJuW3Isb119ZnVuY3Rpb24gZWxlKGUpe3JldHVybiBlLnByb3BzLmF4aXM9PT0iYm90aCJ8fGUucHJvcHMuYXhpcz09PSJ4In1mdW5jdGlvbiB0bGUoZSl7cmV0dXJuIGUucHJvcHMuYXhpcz09PSJib3RoInx8ZS5wcm9wcy5heGlzPT09InkifWZ1bmN0aW9uIG5sZShlLHQsbil7Y29uc3Qgcj10eXBlb2YgdD09Im51bWJlciI/KDAsZ2MuZ2V0VG91Y2gpKGUsdCk6bnVsbDtpZih0eXBlb2YgdD09Im51bWJlciImJiFyKXJldHVybiBudWxsO2NvbnN0IG89ZlMobiksaT1uLnByb3BzLm9mZnNldFBhcmVudHx8by5vZmZzZXRQYXJlbnR8fG8ub3duZXJEb2N1bWVudC5ib2R5O3JldHVybigwLGdjLm9mZnNldFhZRnJvbVBhcmVudCkocnx8ZSxpLG4ucHJvcHMuc2NhbGUpfWZ1bmN0aW9uIHJsZShlLHQsbil7Y29uc3Qgcj0hKDAsZ3IuaXNOdW0pKGUubGFzdFgpLG89ZlMoZSk7cmV0dXJuIHI/e25vZGU6byxkZWx0YVg6MCxkZWx0YVk6MCxsYXN0WDp0LGxhc3RZOm4seDp0LHk6bn06e25vZGU6byxkZWx0YVg6dC1lLmxhc3RYLGRlbHRhWTpuLWUubGFzdFksbGFzdFg6ZS5sYXN0WCxsYXN0WTplLmxhc3RZLHg6dCx5Om59fWZ1bmN0aW9uIG9sZShlLHQpe2NvbnN0IG49ZS5wcm9wcy5zY2FsZTtyZXR1cm57bm9kZTp0Lm5vZGUseDplLnN0YXRlLngrdC5kZWx0YVgvbix5OmUuc3RhdGUueSt0LmRlbHRhWS9uLGRlbHRhWDp0LmRlbHRhWC9uLGRlbHRhWTp0LmRlbHRhWS9uLGxhc3RYOmUuc3RhdGUueCxsYXN0WTplLnN0YXRlLnl9fWZ1bmN0aW9uIGlsZShlKXtyZXR1cm57bGVmdDplLmxlZnQsdG9wOmUudG9wLHJpZ2h0OmUucmlnaHQsYm90dG9tOmUuYm90dG9tfX1mdW5jdGlvbiBmUyhlKXtjb25zdCB0PWUuZmluZERPTU5vZGUoKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIjxEcmFnZ2FibGVDb3JlPjogVW5tb3VudGVkIGR1cmluZyBldmVudCEiKTtyZXR1cm4gdH12YXIgVHY9e30sUHY9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFB2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtQdi5kZWZhdWx0PXNsZTtmdW5jdGlvbiBzbGUoKXt9T2JqZWN0LmRlZmluZVByb3BlcnR5KFR2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtUdi5kZWZhdWx0PXZvaWQgMDt2YXIgZTA9bGxlKGgpLHRyPXBTKHJwKSxhbGU9cFMoJHIpLFJuPUx0LHNzPWxpLHQwPWFpLFV1PXBTKFB2KTtmdW5jdGlvbiBwUyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gQkQoZSl7aWYodHlwZW9mIFdlYWtNYXAhPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IFdlYWtNYXAsbj1uZXcgV2Vha01hcDtyZXR1cm4oQkQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI/bjp0fSkoZSl9ZnVuY3Rpb24gbGxlKGUsdCl7aWYoIXQmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTtpZihlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIilyZXR1cm57ZGVmYXVsdDplfTt2YXIgbj1CRCh0KTtpZihuJiZuLmhhcyhlKSlyZXR1cm4gbi5nZXQoZSk7dmFyIHI9e30sbz1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Zm9yKHZhciBpIGluIGUpaWYoaSE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkpe3ZhciBzPW8/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpOm51bGw7cyYmKHMuZ2V0fHxzLnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsaSxzKTpyW2ldPWVbaV19cmV0dXJuIHIuZGVmYXVsdD1lLG4mJm4uc2V0KGUscikscn1mdW5jdGlvbiBCbihlLHQsbil7cmV0dXJuIHQ9Y2xlKHQpLHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gY2xlKGUpe3ZhciB0PXVsZShlLCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wiP3Q6U3RyaW5nKHQpfWZ1bmN0aW9uIHVsZShlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKG4hPT12b2lkIDApe3ZhciByPW4uY2FsbChlLHR8fCJkZWZhdWx0Iik7aWYodHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKHQ9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKShlKX1jb25zdCBwbz17dG91Y2g6e3N0YXJ0OiJ0b3VjaHN0YXJ0Iixtb3ZlOiJ0b3VjaG1vdmUiLHN0b3A6InRvdWNoZW5kIn0sbW91c2U6e3N0YXJ0OiJtb3VzZWRvd24iLG1vdmU6Im1vdXNlbW92ZSIsc3RvcDoibW91c2V1cCJ9fTtsZXQgYXM9cG8ubW91c2UsTXY9Y2xhc3MgZXh0ZW5kcyBlMC5Db21wb25lbnR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLEJuKHRoaXMsImRyYWdnaW5nIiwhMSksQm4odGhpcywibGFzdFgiLE5hTiksQm4odGhpcywibGFzdFkiLE5hTiksQm4odGhpcywidG91Y2hJZGVudGlmaWVyIixudWxsKSxCbih0aGlzLCJtb3VudGVkIiwhMSksQm4odGhpcywiaGFuZGxlRHJhZ1N0YXJ0Iix0PT57aWYodGhpcy5wcm9wcy5vbk1vdXNlRG93bih0KSwhdGhpcy5wcm9wcy5hbGxvd0FueUNsaWNrJiZ0eXBlb2YgdC5idXR0b249PSJudW1iZXIiJiZ0LmJ1dHRvbiE9PTApcmV0dXJuITE7Y29uc3Qgbj10aGlzLmZpbmRET01Ob2RlKCk7aWYoIW58fCFuLm93bmVyRG9jdW1lbnR8fCFuLm93bmVyRG9jdW1lbnQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIjxEcmFnZ2FibGVDb3JlPiBub3QgbW91bnRlZCBvbiBEcmFnU3RhcnQhIik7Y29uc3R7b3duZXJEb2N1bWVudDpyfT1uO2lmKHRoaXMucHJvcHMuZGlzYWJsZWR8fCEodC50YXJnZXQgaW5zdGFuY2VvZiByLmRlZmF1bHRWaWV3Lk5vZGUpfHx0aGlzLnByb3BzLmhhbmRsZSYmISgwLFJuLm1hdGNoZXNTZWxlY3RvckFuZFBhcmVudHNUbykodC50YXJnZXQsdGhpcy5wcm9wcy5oYW5kbGUsbil8fHRoaXMucHJvcHMuY2FuY2VsJiYoMCxSbi5tYXRjaGVzU2VsZWN0b3JBbmRQYXJlbnRzVG8pKHQudGFyZ2V0LHRoaXMucHJvcHMuY2FuY2VsLG4pKXJldHVybjt0LnR5cGU9PT0idG91Y2hzdGFydCImJnQucHJldmVudERlZmF1bHQoKTtjb25zdCBvPSgwLFJuLmdldFRvdWNoSWRlbnRpZmllcikodCk7dGhpcy50b3VjaElkZW50aWZpZXI9bztjb25zdCBpPSgwLHNzLmdldENvbnRyb2xQb3NpdGlvbikodCxvLHRoaXMpO2lmKGk9PW51bGwpcmV0dXJuO2NvbnN0e3g6cyx5OmF9PWksbD0oMCxzcy5jcmVhdGVDb3JlRGF0YSkodGhpcyxzLGEpOygwLFV1LmRlZmF1bHQpKCJEcmFnZ2FibGVDb3JlOiBoYW5kbGVEcmFnU3RhcnQ6ICVqIixsKSwoMCxVdS5kZWZhdWx0KSgiY2FsbGluZyIsdGhpcy5wcm9wcy5vblN0YXJ0KSwhKHRoaXMucHJvcHMub25TdGFydCh0LGwpPT09ITF8fHRoaXMubW91bnRlZD09PSExKSYmKHRoaXMucHJvcHMuZW5hYmxlVXNlclNlbGVjdEhhY2smJigwLFJuLmFkZFVzZXJTZWxlY3RTdHlsZXMpKHIpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5sYXN0WD1zLHRoaXMubGFzdFk9YSwoMCxSbi5hZGRFdmVudCkocixhcy5tb3ZlLHRoaXMuaGFuZGxlRHJhZyksKDAsUm4uYWRkRXZlbnQpKHIsYXMuc3RvcCx0aGlzLmhhbmRsZURyYWdTdG9wKSl9KSxCbih0aGlzLCJoYW5kbGVEcmFnIix0PT57Y29uc3Qgbj0oMCxzcy5nZXRDb250cm9sUG9zaXRpb24pKHQsdGhpcy50b3VjaElkZW50aWZpZXIsdGhpcyk7aWYobj09bnVsbClyZXR1cm47bGV0e3g6cix5Om99PW47aWYoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmdyaWQpKXtsZXQgYT1yLXRoaXMubGFzdFgsbD1vLXRoaXMubGFzdFk7aWYoW2EsbF09KDAsc3Muc25hcFRvR3JpZCkodGhpcy5wcm9wcy5ncmlkLGEsbCksIWEmJiFsKXJldHVybjtyPXRoaXMubGFzdFgrYSxvPXRoaXMubGFzdFkrbH1jb25zdCBpPSgwLHNzLmNyZWF0ZUNvcmVEYXRhKSh0aGlzLHIsbyk7aWYoKDAsVXUuZGVmYXVsdCkoIkRyYWdnYWJsZUNvcmU6IGhhbmRsZURyYWc6ICVqIixpKSx0aGlzLnByb3BzLm9uRHJhZyh0LGkpPT09ITF8fHRoaXMubW91bnRlZD09PSExKXt0cnl7dGhpcy5oYW5kbGVEcmFnU3RvcChuZXcgTW91c2VFdmVudCgibW91c2V1cCIpKX1jYXRjaHtjb25zdCBsPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpO2wuaW5pdE1vdXNlRXZlbnQoIm1vdXNldXAiLCEwLCEwLHdpbmRvdywwLDAsMCwwLDAsITEsITEsITEsITEsMCxudWxsKSx0aGlzLmhhbmRsZURyYWdTdG9wKGwpfXJldHVybn10aGlzLmxhc3RYPXIsdGhpcy5sYXN0WT1vfSksQm4odGhpcywiaGFuZGxlRHJhZ1N0b3AiLHQ9PntpZighdGhpcy5kcmFnZ2luZylyZXR1cm47Y29uc3Qgbj0oMCxzcy5nZXRDb250cm9sUG9zaXRpb24pKHQsdGhpcy50b3VjaElkZW50aWZpZXIsdGhpcyk7aWYobj09bnVsbClyZXR1cm47bGV0e3g6cix5Om99PW47aWYoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmdyaWQpKXtsZXQgbD1yLXRoaXMubGFzdFh8fDAsYz1vLXRoaXMubGFzdFl8fDA7W2wsY109KDAsc3Muc25hcFRvR3JpZCkodGhpcy5wcm9wcy5ncmlkLGwsYykscj10aGlzLmxhc3RYK2wsbz10aGlzLmxhc3RZK2N9Y29uc3QgaT0oMCxzcy5jcmVhdGVDb3JlRGF0YSkodGhpcyxyLG8pO2lmKHRoaXMucHJvcHMub25TdG9wKHQsaSk9PT0hMXx8dGhpcy5tb3VudGVkPT09ITEpcmV0dXJuITE7Y29uc3QgYT10aGlzLmZpbmRET01Ob2RlKCk7YSYmdGhpcy5wcm9wcy5lbmFibGVVc2VyU2VsZWN0SGFjayYmKDAsUm4ucmVtb3ZlVXNlclNlbGVjdFN0eWxlcykoYS5vd25lckRvY3VtZW50KSwoMCxVdS5kZWZhdWx0KSgiRHJhZ2dhYmxlQ29yZTogaGFuZGxlRHJhZ1N0b3A6ICVqIixpKSx0aGlzLmRyYWdnaW5nPSExLHRoaXMubGFzdFg9TmFOLHRoaXMubGFzdFk9TmFOLGEmJigoMCxVdS5kZWZhdWx0KSgiRHJhZ2dhYmxlQ29yZTogUmVtb3ZpbmcgaGFuZGxlcnMiKSwoMCxSbi5yZW1vdmVFdmVudCkoYS5vd25lckRvY3VtZW50LGFzLm1vdmUsdGhpcy5oYW5kbGVEcmFnKSwoMCxSbi5yZW1vdmVFdmVudCkoYS5vd25lckRvY3VtZW50LGFzLnN0b3AsdGhpcy5oYW5kbGVEcmFnU3RvcCkpfSksQm4odGhpcywib25Nb3VzZURvd24iLHQ9Pihhcz1wby5tb3VzZSx0aGlzLmhhbmRsZURyYWdTdGFydCh0KSkpLEJuKHRoaXMsIm9uTW91c2VVcCIsdD0+KGFzPXBvLm1vdXNlLHRoaXMuaGFuZGxlRHJhZ1N0b3AodCkpKSxCbih0aGlzLCJvblRvdWNoU3RhcnQiLHQ9Pihhcz1wby50b3VjaCx0aGlzLmhhbmRsZURyYWdTdGFydCh0KSkpLEJuKHRoaXMsIm9uVG91Y2hFbmQiLHQ9Pihhcz1wby50b3VjaCx0aGlzLmhhbmRsZURyYWdTdG9wKHQpKSl9Y29tcG9uZW50RGlkTW91bnQoKXt0aGlzLm1vdW50ZWQ9ITA7Y29uc3QgdD10aGlzLmZpbmRET01Ob2RlKCk7dCYmKDAsUm4uYWRkRXZlbnQpKHQscG8udG91Y2guc3RhcnQsdGhpcy5vblRvdWNoU3RhcnQse3Bhc3NpdmU6ITF9KX1jb21wb25lbnRXaWxsVW5tb3VudCgpe3RoaXMubW91bnRlZD0hMTtjb25zdCB0PXRoaXMuZmluZERPTU5vZGUoKTtpZih0KXtjb25zdHtvd25lckRvY3VtZW50Om59PXQ7KDAsUm4ucmVtb3ZlRXZlbnQpKG4scG8ubW91c2UubW92ZSx0aGlzLmhhbmRsZURyYWcpLCgwLFJuLnJlbW92ZUV2ZW50KShuLHBvLnRvdWNoLm1vdmUsdGhpcy5oYW5kbGVEcmFnKSwoMCxSbi5yZW1vdmVFdmVudCkobixwby5tb3VzZS5zdG9wLHRoaXMuaGFuZGxlRHJhZ1N0b3ApLCgwLFJuLnJlbW92ZUV2ZW50KShuLHBvLnRvdWNoLnN0b3AsdGhpcy5oYW5kbGVEcmFnU3RvcCksKDAsUm4ucmVtb3ZlRXZlbnQpKHQscG8udG91Y2guc3RhcnQsdGhpcy5vblRvdWNoU3RhcnQse3Bhc3NpdmU6ITF9KSx0aGlzLnByb3BzLmVuYWJsZVVzZXJTZWxlY3RIYWNrJiYoMCxSbi5yZW1vdmVVc2VyU2VsZWN0U3R5bGVzKShuKX19ZmluZERPTU5vZGUoKXt2YXIgdCxuO3JldHVybih0PXRoaXMucHJvcHMpIT09bnVsbCYmdCE9PXZvaWQgMCYmdC5ub2RlUmVmPyhuPXRoaXMucHJvcHMpPT09bnVsbHx8bj09PXZvaWQgMHx8KG49bi5ub2RlUmVmKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uY3VycmVudDphbGUuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKX1yZW5kZXIoKXtyZXR1cm4gZTAuY2xvbmVFbGVtZW50KGUwLkNoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbikse29uTW91c2VEb3duOnRoaXMub25Nb3VzZURvd24sb25Nb3VzZVVwOnRoaXMub25Nb3VzZVVwLG9uVG91Y2hFbmQ6dGhpcy5vblRvdWNoRW5kfSl9fTtUdi5kZWZhdWx0PU12O0JuKE12LCJkaXNwbGF5TmFtZSIsIkRyYWdnYWJsZUNvcmUiKTtCbihNdiwicHJvcFR5cGVzIix7YWxsb3dBbnlDbGljazp0ci5kZWZhdWx0LmJvb2wsY2hpbGRyZW46dHIuZGVmYXVsdC5ub2RlLmlzUmVxdWlyZWQsZGlzYWJsZWQ6dHIuZGVmYXVsdC5ib29sLGVuYWJsZVVzZXJTZWxlY3RIYWNrOnRyLmRlZmF1bHQuYm9vbCxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oZSx0KXtpZihlW3RdJiZlW3RdLm5vZGVUeXBlIT09MSl0aHJvdyBuZXcgRXJyb3IoIkRyYWdnYWJsZSdzIG9mZnNldFBhcmVudCBtdXN0IGJlIGEgRE9NIE5vZGUuIil9LGdyaWQ6dHIuZGVmYXVsdC5hcnJheU9mKHRyLmRlZmF1bHQubnVtYmVyKSxoYW5kbGU6dHIuZGVmYXVsdC5zdHJpbmcsY2FuY2VsOnRyLmRlZmF1bHQuc3RyaW5nLG5vZGVSZWY6dHIuZGVmYXVsdC5vYmplY3Qsb25TdGFydDp0ci5kZWZhdWx0LmZ1bmMsb25EcmFnOnRyLmRlZmF1bHQuZnVuYyxvblN0b3A6dHIuZGVmYXVsdC5mdW5jLG9uTW91c2VEb3duOnRyLmRlZmF1bHQuZnVuYyxzY2FsZTp0ci5kZWZhdWx0Lm51bWJlcixjbGFzc05hbWU6dDAuZG9udFNldE1lLHN0eWxlOnQwLmRvbnRTZXRNZSx0cmFuc2Zvcm06dDAuZG9udFNldE1lfSk7Qm4oTXYsImRlZmF1bHRQcm9wcyIse2FsbG93QW55Q2xpY2s6ITEsZGlzYWJsZWQ6ITEsZW5hYmxlVXNlclNlbGVjdEhhY2s6ITAsb25TdGFydDpmdW5jdGlvbigpe30sb25EcmFnOmZ1bmN0aW9uKCl7fSxvblN0b3A6ZnVuY3Rpb24oKXt9LG9uTW91c2VEb3duOmZ1bmN0aW9uKCl7fSxzY2FsZToxfSk7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiRHJhZ2dhYmxlQ29yZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdH19KSxlLmRlZmF1bHQ9dm9pZCAwO3ZhciB0PWYoaCksbj11KHJwKSxyPXUoJHIpLG89dShQYWUpLGk9THQscz1saSxhPWFpLGw9dShUdiksYz11KFB2KTtmdW5jdGlvbiB1KHgpe3JldHVybiB4JiZ4Ll9fZXNNb2R1bGU/eDp7ZGVmYXVsdDp4fX1mdW5jdGlvbiBkKHgpe2lmKHR5cGVvZiBXZWFrTWFwIT0iZnVuY3Rpb24iKXJldHVybiBudWxsO3ZhciB3PW5ldyBXZWFrTWFwLGs9bmV3IFdlYWtNYXA7cmV0dXJuKGQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEU/azp3fSkoeCl9ZnVuY3Rpb24gZih4LHcpe2lmKCF3JiZ4JiZ4Ll9fZXNNb2R1bGUpcmV0dXJuIHg7aWYoeD09PW51bGx8fHR5cGVvZiB4IT0ib2JqZWN0IiYmdHlwZW9mIHghPSJmdW5jdGlvbiIpcmV0dXJue2RlZmF1bHQ6eH07dmFyIGs9ZCh3KTtpZihrJiZrLmhhcyh4KSlyZXR1cm4gay5nZXQoeCk7dmFyIEU9e30sUz1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Zm9yKHZhciBfIGluIHgpaWYoXyE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsXykpe3ZhciBQPVM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih4LF8pOm51bGw7UCYmKFAuZ2V0fHxQLnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KEUsXyxQKTpFW19dPXhbX119cmV0dXJuIEUuZGVmYXVsdD14LGsmJmsuc2V0KHgsRSksRX1mdW5jdGlvbiBwKCl7cmV0dXJuIHA9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbih4KXtmb3IodmFyIHc9MTt3PGFyZ3VtZW50cy5sZW5ndGg7dysrKXt2YXIgaz1hcmd1bWVudHNbd107Zm9yKHZhciBFIGluIGspT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSkmJih4W0VdPWtbRV0pfXJldHVybiB4fSxwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBtKHgsdyxrKXtyZXR1cm4gdz1nKHcpLHcgaW4geD9PYmplY3QuZGVmaW5lUHJvcGVydHkoeCx3LHt2YWx1ZTprLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6eFt3XT1rLHh9ZnVuY3Rpb24gZyh4KXt2YXIgdz15KHgsInN0cmluZyIpO3JldHVybiB0eXBlb2Ygdz09InN5bWJvbCI/dzpTdHJpbmcodyl9ZnVuY3Rpb24geSh4LHcpe2lmKHR5cGVvZiB4IT0ib2JqZWN0Inx8eD09PW51bGwpcmV0dXJuIHg7dmFyIGs9eFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKGshPT12b2lkIDApe3ZhciBFPWsuY2FsbCh4LHd8fCJkZWZhdWx0Iik7aWYodHlwZW9mIEUhPSJvYmplY3QiKXJldHVybiBFO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKHc9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKSh4KX1jbGFzcyB2IGV4dGVuZHMgdC5Db21wb25lbnR7c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3LGspe2xldHtwb3NpdGlvbjpFfT13LHtwcmV2UHJvcHNQb3NpdGlvbjpTfT1rO3JldHVybiBFJiYoIVN8fEUueCE9PVMueHx8RS55IT09Uy55KT8oKDAsYy5kZWZhdWx0KSgiRHJhZ2dhYmxlOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgJWoiLHtwb3NpdGlvbjpFLHByZXZQcm9wc1Bvc2l0aW9uOlN9KSx7eDpFLngseTpFLnkscHJldlByb3BzUG9zaXRpb246ey4uLkV9fSk6bnVsbH1jb25zdHJ1Y3Rvcih3KXtzdXBlcih3KSxtKHRoaXMsIm9uRHJhZ1N0YXJ0IiwoayxFKT0+e2lmKCgwLGMuZGVmYXVsdCkoIkRyYWdnYWJsZTogb25EcmFnU3RhcnQ6ICVqIixFKSx0aGlzLnByb3BzLm9uU3RhcnQoaywoMCxzLmNyZWF0ZURyYWdnYWJsZURhdGEpKHRoaXMsRSkpPT09ITEpcmV0dXJuITE7dGhpcy5zZXRTdGF0ZSh7ZHJhZ2dpbmc6ITAsZHJhZ2dlZDohMH0pfSksbSh0aGlzLCJvbkRyYWciLChrLEUpPT57aWYoIXRoaXMuc3RhdGUuZHJhZ2dpbmcpcmV0dXJuITE7KDAsYy5kZWZhdWx0KSgiRHJhZ2dhYmxlOiBvbkRyYWc6ICVqIixFKTtjb25zdCBTPSgwLHMuY3JlYXRlRHJhZ2dhYmxlRGF0YSkodGhpcyxFKSxfPXt4OlMueCx5OlMueSxzbGFja1g6MCxzbGFja1k6MH07aWYodGhpcy5wcm9wcy5ib3VuZHMpe2NvbnN0e3g6TSx5OkF9PV87Xy54Kz10aGlzLnN0YXRlLnNsYWNrWCxfLnkrPXRoaXMuc3RhdGUuc2xhY2tZO2NvbnN0W0ksTF09KDAscy5nZXRCb3VuZFBvc2l0aW9uKSh0aGlzLF8ueCxfLnkpO18ueD1JLF8ueT1MLF8uc2xhY2tYPXRoaXMuc3RhdGUuc2xhY2tYKyhNLV8ueCksXy5zbGFja1k9dGhpcy5zdGF0ZS5zbGFja1krKEEtXy55KSxTLng9Xy54LFMueT1fLnksUy5kZWx0YVg9Xy54LXRoaXMuc3RhdGUueCxTLmRlbHRhWT1fLnktdGhpcy5zdGF0ZS55fWlmKHRoaXMucHJvcHMub25EcmFnKGssUyk9PT0hMSlyZXR1cm4hMTt0aGlzLnNldFN0YXRlKF8pfSksbSh0aGlzLCJvbkRyYWdTdG9wIiwoayxFKT0+e2lmKCF0aGlzLnN0YXRlLmRyYWdnaW5nfHx0aGlzLnByb3BzLm9uU3RvcChrLCgwLHMuY3JlYXRlRHJhZ2dhYmxlRGF0YSkodGhpcyxFKSk9PT0hMSlyZXR1cm4hMTsoMCxjLmRlZmF1bHQpKCJEcmFnZ2FibGU6IG9uRHJhZ1N0b3A6ICVqIixFKTtjb25zdCBfPXtkcmFnZ2luZzohMSxzbGFja1g6MCxzbGFja1k6MH07aWYoISF0aGlzLnByb3BzLnBvc2l0aW9uKXtjb25zdHt4Ok0seTpBfT10aGlzLnByb3BzLnBvc2l0aW9uO18ueD1NLF8ueT1BfXRoaXMuc2V0U3RhdGUoXyl9KSx0aGlzLnN0YXRlPXtkcmFnZ2luZzohMSxkcmFnZ2VkOiExLHg6dy5wb3NpdGlvbj93LnBvc2l0aW9uLng6dy5kZWZhdWx0UG9zaXRpb24ueCx5OncucG9zaXRpb24/dy5wb3NpdGlvbi55OncuZGVmYXVsdFBvc2l0aW9uLnkscHJldlByb3BzUG9zaXRpb246ey4uLncucG9zaXRpb259LHNsYWNrWDowLHNsYWNrWTowLGlzRWxlbWVudFNWRzohMX0sdy5wb3NpdGlvbiYmISh3Lm9uRHJhZ3x8dy5vblN0b3ApJiZjb25zb2xlLndhcm4oIkEgYHBvc2l0aW9uYCB3YXMgYXBwbGllZCB0byB0aGlzIDxEcmFnZ2FibGU+LCB3aXRob3V0IGRyYWcgaGFuZGxlcnMuIFRoaXMgd2lsbCBtYWtlIHRoaXMgY29tcG9uZW50IGVmZmVjdGl2ZWx5IHVuZHJhZ2dhYmxlLiBQbGVhc2UgYXR0YWNoIGBvbkRyYWdgIG9yIGBvblN0b3BgIGhhbmRsZXJzIHNvIHlvdSBjYW4gYWRqdXN0IHRoZSBgcG9zaXRpb25gIG9mIHRoaXMgZWxlbWVudC4iKX1jb21wb25lbnREaWRNb3VudCgpe3R5cGVvZiB3aW5kb3cuU1ZHRWxlbWVudDwidSImJnRoaXMuZmluZERPTU5vZGUoKWluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQmJnRoaXMuc2V0U3RhdGUoe2lzRWxlbWVudFNWRzohMH0pfWNvbXBvbmVudFdpbGxVbm1vdW50KCl7dGhpcy5zZXRTdGF0ZSh7ZHJhZ2dpbmc6ITF9KX1maW5kRE9NTm9kZSgpe3ZhciB3LGs7cmV0dXJuKHc9KGs9dGhpcy5wcm9wcyk9PT1udWxsfHxrPT09dm9pZCAwfHwoaz1rLm5vZGVSZWYpPT09bnVsbHx8az09PXZvaWQgMD92b2lkIDA6ay5jdXJyZW50KSE9PW51bGwmJnchPT12b2lkIDA/dzpyLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyl9cmVuZGVyKCl7Y29uc3R7YXhpczp3LGJvdW5kczprLGNoaWxkcmVuOkUsZGVmYXVsdFBvc2l0aW9uOlMsZGVmYXVsdENsYXNzTmFtZTpfLGRlZmF1bHRDbGFzc05hbWVEcmFnZ2luZzpQLGRlZmF1bHRDbGFzc05hbWVEcmFnZ2VkOk0scG9zaXRpb246QSxwb3NpdGlvbk9mZnNldDpJLHNjYWxlOkwsLi4ucmV9PXRoaXMucHJvcHM7bGV0IFY9e30sSz1udWxsO2NvbnN0IFQ9ISEhQXx8dGhpcy5zdGF0ZS5kcmFnZ2luZyxPPUF8fFMsUj17eDooMCxzLmNhbkRyYWdYKSh0aGlzKSYmVD90aGlzLnN0YXRlLng6Ty54LHk6KDAscy5jYW5EcmFnWSkodGhpcykmJlQ/dGhpcy5zdGF0ZS55Ok8ueX07dGhpcy5zdGF0ZS5pc0VsZW1lbnRTVkc/Sz0oMCxpLmNyZWF0ZVNWR1RyYW5zZm9ybSkoUixJKTpWPSgwLGkuY3JlYXRlQ1NTVHJhbnNmb3JtKShSLEkpO2NvbnN0IE49KDAsby5kZWZhdWx0KShFLnByb3BzLmNsYXNzTmFtZXx8IiIsXyx7W1BdOnRoaXMuc3RhdGUuZHJhZ2dpbmcsW01dOnRoaXMuc3RhdGUuZHJhZ2dlZH0pO3JldHVybiB0LmNyZWF0ZUVsZW1lbnQobC5kZWZhdWx0LHAoe30scmUse29uU3RhcnQ6dGhpcy5vbkRyYWdTdGFydCxvbkRyYWc6dGhpcy5vbkRyYWcsb25TdG9wOnRoaXMub25EcmFnU3RvcH0pLHQuY2xvbmVFbGVtZW50KHQuQ2hpbGRyZW4ub25seShFKSx7Y2xhc3NOYW1lOk4sc3R5bGU6ey4uLkUucHJvcHMuc3R5bGUsLi4uVn0sdHJhbnNmb3JtOkt9KSl9fWUuZGVmYXVsdD12LG0odiwiZGlzcGxheU5hbWUiLCJEcmFnZ2FibGUiKSxtKHYsInByb3BUeXBlcyIsey4uLmwuZGVmYXVsdC5wcm9wVHlwZXMsYXhpczpuLmRlZmF1bHQub25lT2YoWyJib3RoIiwieCIsInkiLCJub25lIl0pLGJvdW5kczpuLmRlZmF1bHQub25lT2ZUeXBlKFtuLmRlZmF1bHQuc2hhcGUoe2xlZnQ6bi5kZWZhdWx0Lm51bWJlcixyaWdodDpuLmRlZmF1bHQubnVtYmVyLHRvcDpuLmRlZmF1bHQubnVtYmVyLGJvdHRvbTpuLmRlZmF1bHQubnVtYmVyfSksbi5kZWZhdWx0LnN0cmluZyxuLmRlZmF1bHQub25lT2YoWyExXSldKSxkZWZhdWx0Q2xhc3NOYW1lOm4uZGVmYXVsdC5zdHJpbmcsZGVmYXVsdENsYXNzTmFtZURyYWdnaW5nOm4uZGVmYXVsdC5zdHJpbmcsZGVmYXVsdENsYXNzTmFtZURyYWdnZWQ6bi5kZWZhdWx0LnN0cmluZyxkZWZhdWx0UG9zaXRpb246bi5kZWZhdWx0LnNoYXBlKHt4Om4uZGVmYXVsdC5udW1iZXIseTpuLmRlZmF1bHQubnVtYmVyfSkscG9zaXRpb25PZmZzZXQ6bi5kZWZhdWx0LnNoYXBlKHt4Om4uZGVmYXVsdC5vbmVPZlR5cGUoW24uZGVmYXVsdC5udW1iZXIsbi5kZWZhdWx0LnN0cmluZ10pLHk6bi5kZWZhdWx0Lm9uZU9mVHlwZShbbi5kZWZhdWx0Lm51bWJlcixuLmRlZmF1bHQuc3RyaW5nXSl9KSxwb3NpdGlvbjpuLmRlZmF1bHQuc2hhcGUoe3g6bi5kZWZhdWx0Lm51bWJlcix5Om4uZGVmYXVsdC5udW1iZXJ9KSxjbGFzc05hbWU6YS5kb250U2V0TWUsc3R5bGU6YS5kb250U2V0TWUsdHJhbnNmb3JtOmEuZG9udFNldE1lfSksbSh2LCJkZWZhdWx0UHJvcHMiLHsuLi5sLmRlZmF1bHQuZGVmYXVsdFByb3BzLGF4aXM6ImJvdGgiLGJvdW5kczohMSxkZWZhdWx0Q2xhc3NOYW1lOiJyZWFjdC1kcmFnZ2FibGUiLGRlZmF1bHRDbGFzc05hbWVEcmFnZ2luZzoicmVhY3QtZHJhZ2dhYmxlLWRyYWdnaW5nIixkZWZhdWx0Q2xhc3NOYW1lRHJhZ2dlZDoicmVhY3QtZHJhZ2dhYmxlLWRyYWdnZWQiLGRlZmF1bHRQb3NpdGlvbjp7eDowLHk6MH0sc2NhbGU6MX0pfSkoJEQpO2NvbnN0e2RlZmF1bHQ6VUQsRHJhZ2dhYmxlQ29yZTpkbGV9PSREO092LmV4cG9ydHM9VUQ7T3YuZXhwb3J0cy5kZWZhdWx0PVVEO092LmV4cG9ydHMuRHJhZ2dhYmxlQ29yZT1kbGU7dmFyIGZsZT1Pdi5leHBvcnRzLGhTPXt9O2hTLl9fZXNNb2R1bGU9ITA7aFMuY2xvbmVFbGVtZW50PXlsZTt2YXIgcGxlPWhsZShoKTtmdW5jdGlvbiBobGUoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGNPKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG8pLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gdU8oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdIT1udWxsP2FyZ3VtZW50c1t0XTp7fTt0JTI/Y08oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe21sZShlLHIsbltyXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpjTyhPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24ocil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scikpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gbWxlKGUsdCxuKXtyZXR1cm4gdD1nbGUodCksdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBnbGUoZSl7dmFyIHQ9dmxlKGUsInN0cmluZyIpO3JldHVybiB0eXBlb2YgdD09InN5bWJvbCI/dDpTdHJpbmcodCl9ZnVuY3Rpb24gdmxlKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbClyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8ImRlZmF1bHQiKTtpZih0eXBlb2YgciE9Im9iamVjdCIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4odD09PSJzdHJpbmciP1N0cmluZzpOdW1iZXIpKGUpfWZ1bmN0aW9uIHlsZShlLHQpe3JldHVybiB0LnN0eWxlJiZlLnByb3BzLnN0eWxlJiYodC5zdHlsZT11Tyh1Tyh7fSxlLnByb3BzLnN0eWxlKSx0LnN0eWxlKSksdC5jbGFzc05hbWUmJmUucHJvcHMuY2xhc3NOYW1lJiYodC5jbGFzc05hbWU9ZS5wcm9wcy5jbGFzc05hbWUrIiAiK3QuY2xhc3NOYW1lKSxwbGUuZGVmYXVsdC5jbG9uZUVsZW1lbnQoZSx0KX12YXIgZ3A9e307Z3AuX19lc01vZHVsZT0hMDtncC5yZXNpemFibGVQcm9wcz12b2lkIDA7dmFyICRlPXhsZShycCk7ZnVuY3Rpb24geGxlKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgYmxlPXtheGlzOiRlLmRlZmF1bHQub25lT2YoWyJib3RoIiwieCIsInkiLCJub25lIl0pLGNsYXNzTmFtZTokZS5kZWZhdWx0LnN0cmluZyxjaGlsZHJlbjokZS5kZWZhdWx0LmVsZW1lbnQuaXNSZXF1aXJlZCxkcmFnZ2FibGVPcHRzOiRlLmRlZmF1bHQuc2hhcGUoe2FsbG93QW55Q2xpY2s6JGUuZGVmYXVsdC5ib29sLGNhbmNlbDokZS5kZWZhdWx0LnN0cmluZyxjaGlsZHJlbjokZS5kZWZhdWx0Lm5vZGUsZGlzYWJsZWQ6JGUuZGVmYXVsdC5ib29sLGVuYWJsZVVzZXJTZWxlY3RIYWNrOiRlLmRlZmF1bHQuYm9vbCxvZmZzZXRQYXJlbnQ6JGUuZGVmYXVsdC5ub2RlLGdyaWQ6JGUuZGVmYXVsdC5hcnJheU9mKCRlLmRlZmF1bHQubnVtYmVyKSxoYW5kbGU6JGUuZGVmYXVsdC5zdHJpbmcsbm9kZVJlZjokZS5kZWZhdWx0Lm9iamVjdCxvblN0YXJ0OiRlLmRlZmF1bHQuZnVuYyxvbkRyYWc6JGUuZGVmYXVsdC5mdW5jLG9uU3RvcDokZS5kZWZhdWx0LmZ1bmMsb25Nb3VzZURvd246JGUuZGVmYXVsdC5mdW5jLHNjYWxlOiRlLmRlZmF1bHQubnVtYmVyfSksaGVpZ2h0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07dmFyIG89blswXTtpZihvLmF4aXM9PT0iYm90aCJ8fG8uYXhpcz09PSJ5Iil7dmFyIGk7cmV0dXJuKGk9JGUuZGVmYXVsdC5udW1iZXIpLmlzUmVxdWlyZWQuYXBwbHkoaSxuKX1yZXR1cm4gJGUuZGVmYXVsdC5udW1iZXIuYXBwbHkoJGUuZGVmYXVsdCxuKX0saGFuZGxlOiRlLmRlZmF1bHQub25lT2ZUeXBlKFskZS5kZWZhdWx0Lm5vZGUsJGUuZGVmYXVsdC5mdW5jXSksaGFuZGxlU2l6ZTokZS5kZWZhdWx0LmFycmF5T2YoJGUuZGVmYXVsdC5udW1iZXIpLGxvY2tBc3BlY3RSYXRpbzokZS5kZWZhdWx0LmJvb2wsbWF4Q29uc3RyYWludHM6JGUuZGVmYXVsdC5hcnJheU9mKCRlLmRlZmF1bHQubnVtYmVyKSxtaW5Db25zdHJhaW50czokZS5kZWZhdWx0LmFycmF5T2YoJGUuZGVmYXVsdC5udW1iZXIpLG9uUmVzaXplU3RvcDokZS5kZWZhdWx0LmZ1bmMsb25SZXNpemVTdGFydDokZS5kZWZhdWx0LmZ1bmMsb25SZXNpemU6JGUuZGVmYXVsdC5mdW5jLHJlc2l6ZUhhbmRsZXM6JGUuZGVmYXVsdC5hcnJheU9mKCRlLmRlZmF1bHQub25lT2YoWyJzIiwidyIsImUiLCJuIiwic3ciLCJudyIsInNlIiwibmUiXSkpLHRyYW5zZm9ybVNjYWxlOiRlLmRlZmF1bHQubnVtYmVyLHdpZHRoOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07dmFyIG89blswXTtpZihvLmF4aXM9PT0iYm90aCJ8fG8uYXhpcz09PSJ4Iil7dmFyIGk7cmV0dXJuKGk9JGUuZGVmYXVsdC5udW1iZXIpLmlzUmVxdWlyZWQuYXBwbHkoaSxuKX1yZXR1cm4gJGUuZGVmYXVsdC5udW1iZXIuYXBwbHkoJGUuZGVmYXVsdCxuKX19O2dwLnJlc2l6YWJsZVByb3BzPWJsZTttcC5fX2VzTW9kdWxlPSEwO21wLmRlZmF1bHQ9dm9pZCAwO3ZhciBWdT1fbGUoaCksd2xlPWZsZSxTbGU9aFMsa2xlPWdwLEVsZT1bImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZHJhZ2dhYmxlT3B0cyIsIndpZHRoIiwiaGVpZ2h0IiwiaGFuZGxlIiwiaGFuZGxlU2l6ZSIsImxvY2tBc3BlY3RSYXRpbyIsImF4aXMiLCJtaW5Db25zdHJhaW50cyIsIm1heENvbnN0cmFpbnRzIiwib25SZXNpemUiLCJvblJlc2l6ZVN0b3AiLCJvblJlc2l6ZVN0YXJ0IiwicmVzaXplSGFuZGxlcyIsInRyYW5zZm9ybVNjYWxlIl07ZnVuY3Rpb24gVkQoZSl7aWYodHlwZW9mIFdlYWtNYXAhPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7dmFyIHQ9bmV3IFdlYWtNYXAsbj1uZXcgV2Vha01hcDtyZXR1cm4oVkQ9ZnVuY3Rpb24obyl7cmV0dXJuIG8/bjp0fSkoZSl9ZnVuY3Rpb24gX2xlKGUsdCl7aWYoIXQmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTtpZihlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIilyZXR1cm57ZGVmYXVsdDplfTt2YXIgbj1WRCh0KTtpZihuJiZuLmhhcyhlKSlyZXR1cm4gbi5nZXQoZSk7dmFyIHI9e30sbz1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Zm9yKHZhciBpIGluIGUpaWYoaSE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkpe3ZhciBzPW8/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpOm51bGw7cyYmKHMuZ2V0fHxzLnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsaSxzKTpyW2ldPWVbaV19cmV0dXJuIHIuZGVmYXVsdD1lLG4mJm4uc2V0KGUscikscn1mdW5jdGlvbiB5Yigpe3JldHVybiB5Yj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHliLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBDbGUoZSx0KXtpZihlPT1udWxsKXJldHVybnt9O3ZhciBuPXt9LHI9T2JqZWN0LmtleXMoZSksbyxpO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspbz1yW2ldLCEodC5pbmRleE9mKG8pPj0wKSYmKG5bb109ZVtvXSk7cmV0dXJuIG59ZnVuY3Rpb24gZE8oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbykuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBuMChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF0hPW51bGw/YXJndW1lbnRzW3RdOnt9O3QlMj9kTyhPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24ocil7T2xlKGUscixuW3JdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmRPKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBPbGUoZSx0LG4pe3JldHVybiB0PVRsZSh0KSx0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfWZ1bmN0aW9uIFRsZShlKXt2YXIgdD1QbGUoZSwic3RyaW5nIik7cmV0dXJuIHR5cGVvZiB0PT0ic3ltYm9sIj90OlN0cmluZyh0KX1mdW5jdGlvbiBQbGUoZSx0KXtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybih0PT09InN0cmluZyI/U3RyaW5nOk51bWJlcikoZSl9ZnVuY3Rpb24gTWxlKGUsdCl7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSx4YihlLHQpfWZ1bmN0aW9uIHhiKGUsdCl7cmV0dXJuIHhiPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHIsbyl7cmV0dXJuIHIuX19wcm90b19fPW8scn0seGIoZSx0KX12YXIgbVM9ZnVuY3Rpb24oZSl7TWxlKHQsZSk7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgcixvPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobykscz0wO3M8bztzKyspaVtzXT1hcmd1bWVudHNbc107cmV0dXJuIHI9ZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSl8fHRoaXMsci5oYW5kbGVSZWZzPXt9LHIubGFzdEhhbmRsZVJlY3Q9bnVsbCxyLnNsYWNrPW51bGwscn12YXIgbj10LnByb3RvdHlwZTtyZXR1cm4gbi5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMucmVzZXREYXRhKCl9LG4ucmVzZXREYXRhPWZ1bmN0aW9uKCl7dGhpcy5sYXN0SGFuZGxlUmVjdD10aGlzLnNsYWNrPW51bGx9LG4ucnVuQ29uc3RyYWludHM9ZnVuY3Rpb24obyxpKXt2YXIgcz10aGlzLnByb3BzLGE9cy5taW5Db25zdHJhaW50cyxsPXMubWF4Q29uc3RyYWludHMsYz1zLmxvY2tBc3BlY3RSYXRpbztpZighYSYmIWwmJiFjKXJldHVybltvLGldO2lmKGMpe3ZhciB1PXRoaXMucHJvcHMud2lkdGgvdGhpcy5wcm9wcy5oZWlnaHQsZD1vLXRoaXMucHJvcHMud2lkdGgsZj1pLXRoaXMucHJvcHMuaGVpZ2h0O01hdGguYWJzKGQpPk1hdGguYWJzKGYqdSk/aT1vL3U6bz1pKnV9dmFyIHA9byxtPWksZz10aGlzLnNsYWNrfHxbMCwwXSx5PWdbMF0sdj1nWzFdO3JldHVybiBvKz15LGkrPXYsYSYmKG89TWF0aC5tYXgoYVswXSxvKSxpPU1hdGgubWF4KGFbMV0saSkpLGwmJihvPU1hdGgubWluKGxbMF0sbyksaT1NYXRoLm1pbihsWzFdLGkpKSx0aGlzLnNsYWNrPVt5KyhwLW8pLHYrKG0taSldLFtvLGldfSxuLnJlc2l6ZUhhbmRsZXI9ZnVuY3Rpb24obyxpKXt2YXIgcz10aGlzO3JldHVybiBmdW5jdGlvbihhLGwpe3ZhciBjPWwubm9kZSx1PWwuZGVsdGFYLGQ9bC5kZWx0YVk7bz09PSJvblJlc2l6ZVN0YXJ0IiYmcy5yZXNldERhdGEoKTt2YXIgZj0ocy5wcm9wcy5heGlzPT09ImJvdGgifHxzLnByb3BzLmF4aXM9PT0ieCIpJiZpIT09Im4iJiZpIT09InMiLHA9KHMucHJvcHMuYXhpcz09PSJib3RoInx8cy5wcm9wcy5heGlzPT09InkiKSYmaSE9PSJlIiYmaSE9PSJ3IjtpZighKCFmJiYhcCkpe3ZhciBtPWlbMF0sZz1pW2kubGVuZ3RoLTFdLHk9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihzLmxhc3RIYW5kbGVSZWN0IT1udWxsKXtpZihnPT09InciKXt2YXIgdj15LmxlZnQtcy5sYXN0SGFuZGxlUmVjdC5sZWZ0O3UrPXZ9aWYobT09PSJuIil7dmFyIHg9eS50b3Atcy5sYXN0SGFuZGxlUmVjdC50b3A7ZCs9eH19cy5sYXN0SGFuZGxlUmVjdD15LGc9PT0idyImJih1PS11KSxtPT09Im4iJiYoZD0tZCk7dmFyIHc9cy5wcm9wcy53aWR0aCsoZj91L3MucHJvcHMudHJhbnNmb3JtU2NhbGU6MCksaz1zLnByb3BzLmhlaWdodCsocD9kL3MucHJvcHMudHJhbnNmb3JtU2NhbGU6MCksRT1zLnJ1bkNvbnN0cmFpbnRzKHcsayk7dz1FWzBdLGs9RVsxXTt2YXIgUz13IT09cy5wcm9wcy53aWR0aHx8ayE9PXMucHJvcHMuaGVpZ2h0LF89dHlwZW9mIHMucHJvcHNbb109PSJmdW5jdGlvbiI/cy5wcm9wc1tvXTpudWxsLFA9bz09PSJvblJlc2l6ZSImJiFTO18mJiFQJiYoYS5wZXJzaXN0PT1udWxsfHxhLnBlcnNpc3QoKSxfKGEse25vZGU6YyxzaXplOnt3aWR0aDp3LGhlaWdodDprfSxoYW5kbGU6aX0pKSxvPT09Im9uUmVzaXplU3RvcCImJnMucmVzZXREYXRhKCl9fX0sbi5yZW5kZXJSZXNpemVIYW5kbGU9ZnVuY3Rpb24obyxpKXt2YXIgcz10aGlzLnByb3BzLmhhbmRsZTtpZighcylyZXR1cm4gVnUuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToicmVhY3QtcmVzaXphYmxlLWhhbmRsZSByZWFjdC1yZXNpemFibGUtaGFuZGxlLSIrbyxyZWY6aX0pO2lmKHR5cGVvZiBzPT0iZnVuY3Rpb24iKXJldHVybiBzKG8saSk7dmFyIGE9dHlwZW9mIHMudHlwZT09InN0cmluZyIsbD1uMCh7cmVmOml9LGE/e306e2hhbmRsZUF4aXM6b30pO3JldHVybiBWdS5jbG9uZUVsZW1lbnQocyxsKX0sbi5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgbz10aGlzLGk9dGhpcy5wcm9wcyxzPWkuY2hpbGRyZW4sYT1pLmNsYXNzTmFtZSxsPWkuZHJhZ2dhYmxlT3B0cztpLndpZHRoLGkuaGVpZ2h0LGkuaGFuZGxlLGkuaGFuZGxlU2l6ZSxpLmxvY2tBc3BlY3RSYXRpbyxpLmF4aXMsaS5taW5Db25zdHJhaW50cyxpLm1heENvbnN0cmFpbnRzLGkub25SZXNpemUsaS5vblJlc2l6ZVN0b3AsaS5vblJlc2l6ZVN0YXJ0O3ZhciBjPWkucmVzaXplSGFuZGxlcztpLnRyYW5zZm9ybVNjYWxlO3ZhciB1PUNsZShpLEVsZSk7cmV0dXJuKDAsU2xlLmNsb25lRWxlbWVudCkocyxuMChuMCh7fSx1KSx7fSx7Y2xhc3NOYW1lOihhP2ErIiAiOiIiKSsicmVhY3QtcmVzaXphYmxlIixjaGlsZHJlbjpbXS5jb25jYXQocy5wcm9wcy5jaGlsZHJlbixjLm1hcChmdW5jdGlvbihkKXt2YXIgZixwPShmPW8uaGFuZGxlUmVmc1tkXSkhPW51bGw/ZjpvLmhhbmRsZVJlZnNbZF09VnUuY3JlYXRlUmVmKCk7cmV0dXJuIFZ1LmNyZWF0ZUVsZW1lbnQod2xlLkRyYWdnYWJsZUNvcmUseWIoe30sbCx7bm9kZVJlZjpwLGtleToicmVzaXphYmxlSGFuZGxlLSIrZCxvblN0b3A6by5yZXNpemVIYW5kbGVyKCJvblJlc2l6ZVN0b3AiLGQpLG9uU3RhcnQ6by5yZXNpemVIYW5kbGVyKCJvblJlc2l6ZVN0YXJ0IixkKSxvbkRyYWc6by5yZXNpemVIYW5kbGVyKCJvblJlc2l6ZSIsZCl9KSxvLnJlbmRlclJlc2l6ZUhhbmRsZShkLHApKX0pKX0pKX0sdH0oVnUuQ29tcG9uZW50KTttcC5kZWZhdWx0PW1TO21TLnByb3BUeXBlcz1rbGUucmVzaXphYmxlUHJvcHM7bVMuZGVmYXVsdFByb3BzPXtheGlzOiJib3RoIixoYW5kbGVTaXplOlsyMCwyMF0sbG9ja0FzcGVjdFJhdGlvOiExLG1pbkNvbnN0cmFpbnRzOlsyMCwyMF0sbWF4Q29uc3RyYWludHM6WzEvMCwxLzBdLHJlc2l6ZUhhbmRsZXM6WyJzZSJdLHRyYW5zZm9ybVNjYWxlOjF9O3ZhciBSdj17fTtSdi5fX2VzTW9kdWxlPSEwO1J2LmRlZmF1bHQ9dm9pZCAwO3ZhciByMD1EbGUoaCksUmxlPUhEKHJwKSxObGU9SEQobXApLCRsZT1ncCxBbGU9WyJoYW5kbGUiLCJoYW5kbGVTaXplIiwib25SZXNpemUiLCJvblJlc2l6ZVN0YXJ0Iiwib25SZXNpemVTdG9wIiwiZHJhZ2dhYmxlT3B0cyIsIm1pbkNvbnN0cmFpbnRzIiwibWF4Q29uc3RyYWludHMiLCJsb2NrQXNwZWN0UmF0aW8iLCJheGlzIiwid2lkdGgiLCJoZWlnaHQiLCJyZXNpemVIYW5kbGVzIiwic3R5bGUiLCJ0cmFuc2Zvcm1TY2FsZSJdO2Z1bmN0aW9uIEhEKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBXRChlKXtpZih0eXBlb2YgV2Vha01hcCE9ImZ1bmN0aW9uIilyZXR1cm4gbnVsbDt2YXIgdD1uZXcgV2Vha01hcCxuPW5ldyBXZWFrTWFwO3JldHVybihXRD1mdW5jdGlvbihvKXtyZXR1cm4gbz9uOnR9KShlKX1mdW5jdGlvbiBEbGUoZSx0KXtpZighdCYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCImJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybntkZWZhdWx0OmV9O3ZhciBuPVdEKHQpO2lmKG4mJm4uaGFzKGUpKXJldHVybiBuLmdldChlKTt2YXIgcj17fSxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmb3IodmFyIGkgaW4gZSlpZihpIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSl7dmFyIHM9bz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSk6bnVsbDtzJiYocy5nZXR8fHMuc2V0KT9PYmplY3QuZGVmaW5lUHJvcGVydHkocixpLHMpOnJbaV09ZVtpXX1yZXR1cm4gci5kZWZhdWx0PWUsbiYmbi5zZXQoZSxyKSxyfWZ1bmN0aW9uIGJiKCl7cmV0dXJuIGJiPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sYmIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGZPKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG8pLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gc2coZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdIT1udWxsP2FyZ3VtZW50c1t0XTp7fTt0JTI/Zk8oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe0lsZShlLHIsbltyXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpmTyhPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24ocil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scikpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gSWxlKGUsdCxuKXtyZXR1cm4gdD1MbGUodCksdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBMbGUoZSl7dmFyIHQ9amxlKGUsInN0cmluZyIpO3JldHVybiB0eXBlb2YgdD09InN5bWJvbCI/dDpTdHJpbmcodCl9ZnVuY3Rpb24gamxlKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbClyZXR1cm4gZTt2YXIgbj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYobiE9PXZvaWQgMCl7dmFyIHI9bi5jYWxsKGUsdHx8ImRlZmF1bHQiKTtpZih0eXBlb2YgciE9Im9iamVjdCIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4odD09PSJzdHJpbmciP1N0cmluZzpOdW1iZXIpKGUpfWZ1bmN0aW9uIHpsZShlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyhlKSxvLGk7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylvPXJbaV0sISh0LmluZGV4T2Yobyk+PTApJiYobltvXT1lW29dKTtyZXR1cm4gbn1mdW5jdGlvbiBGbGUoZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLHdiKGUsdCl9ZnVuY3Rpb24gd2IoZSx0KXtyZXR1cm4gd2I9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24ocixvKXtyZXR1cm4gci5fX3Byb3RvX189byxyfSx3YihlLHQpfXZhciBLRD1mdW5jdGlvbihlKXtGbGUodCxlKTtmdW5jdGlvbiB0KCl7Zm9yKHZhciByLG89YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylpW3NdPWFyZ3VtZW50c1tzXTtyZXR1cm4gcj1lLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKXx8dGhpcyxyLnN0YXRlPXt3aWR0aDpyLnByb3BzLndpZHRoLGhlaWdodDpyLnByb3BzLmhlaWdodCxwcm9wc1dpZHRoOnIucHJvcHMud2lkdGgscHJvcHNIZWlnaHQ6ci5wcm9wcy5oZWlnaHR9LHIub25SZXNpemU9ZnVuY3Rpb24oYSxsKXt2YXIgYz1sLnNpemU7ci5wcm9wcy5vblJlc2l6ZT8oYS5wZXJzaXN0PT1udWxsfHxhLnBlcnNpc3QoKSxyLnNldFN0YXRlKGMsZnVuY3Rpb24oKXtyZXR1cm4gci5wcm9wcy5vblJlc2l6ZSYmci5wcm9wcy5vblJlc2l6ZShhLGwpfSkpOnIuc2V0U3RhdGUoYyl9LHJ9dC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9ZnVuY3Rpb24obyxpKXtyZXR1cm4gaS5wcm9wc1dpZHRoIT09by53aWR0aHx8aS5wcm9wc0hlaWdodCE9PW8uaGVpZ2h0P3t3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodCxwcm9wc1dpZHRoOm8ud2lkdGgscHJvcHNIZWlnaHQ6by5oZWlnaHR9Om51bGx9O3ZhciBuPXQucHJvdG90eXBlO3JldHVybiBuLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBvPXRoaXMucHJvcHMsaT1vLmhhbmRsZSxzPW8uaGFuZGxlU2l6ZTtvLm9uUmVzaXplO3ZhciBhPW8ub25SZXNpemVTdGFydCxsPW8ub25SZXNpemVTdG9wLGM9by5kcmFnZ2FibGVPcHRzLHU9by5taW5Db25zdHJhaW50cyxkPW8ubWF4Q29uc3RyYWludHMsZj1vLmxvY2tBc3BlY3RSYXRpbyxwPW8uYXhpcztvLndpZHRoLG8uaGVpZ2h0O3ZhciBtPW8ucmVzaXplSGFuZGxlcyxnPW8uc3R5bGUseT1vLnRyYW5zZm9ybVNjYWxlLHY9emxlKG8sQWxlKTtyZXR1cm4gcjAuY3JlYXRlRWxlbWVudChObGUuZGVmYXVsdCx7YXhpczpwLGRyYWdnYWJsZU9wdHM6YyxoYW5kbGU6aSxoYW5kbGVTaXplOnMsaGVpZ2h0OnRoaXMuc3RhdGUuaGVpZ2h0LGxvY2tBc3BlY3RSYXRpbzpmLG1heENvbnN0cmFpbnRzOmQsbWluQ29uc3RyYWludHM6dSxvblJlc2l6ZVN0YXJ0OmEsb25SZXNpemU6dGhpcy5vblJlc2l6ZSxvblJlc2l6ZVN0b3A6bCxyZXNpemVIYW5kbGVzOm0sdHJhbnNmb3JtU2NhbGU6eSx3aWR0aDp0aGlzLnN0YXRlLndpZHRofSxyMC5jcmVhdGVFbGVtZW50KCJkaXYiLGJiKHt9LHYse3N0eWxlOnNnKHNnKHt9LGcpLHt9LHt3aWR0aDp0aGlzLnN0YXRlLndpZHRoKyJweCIsaGVpZ2h0OnRoaXMuc3RhdGUuaGVpZ2h0KyJweCJ9KX0pKSl9LHR9KHIwLkNvbXBvbmVudCk7UnYuZGVmYXVsdD1LRDtLRC5wcm9wVHlwZXM9c2coc2coe30sJGxlLnJlc2l6YWJsZVByb3BzKSx7fSx7Y2hpbGRyZW46UmxlLmRlZmF1bHQuZWxlbWVudH0pO3VTLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkRvbid0IGluc3RhbnRpYXRlIFJlc2l6YWJsZSBkaXJlY3RseSEgVXNlIHJlcXVpcmUoJ3JlYWN0LXJlc2l6YWJsZScpLlJlc2l6YWJsZSIpfTt2YXIgQmxlPXVTLmV4cG9ydHMuUmVzaXphYmxlPW1wLmRlZmF1bHQ7dVMuZXhwb3J0cy5SZXNpemFibGVCb3g9UnYuZGVmYXVsdDtjb25zdCBlYz00MDAsbzA9MjUwO2Z1bmN0aW9uIFVsZSh7cG9zaXRpb246ZSxvbkNsb3NlOnQsY2hpbGRyZW46bn0pe2NvbnN0W3Isb109aC51c2VTdGF0ZSh7aGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aH0pO2gudXNlRWZmZWN0KCgpPT57Y29uc3QgZz0oKT0+e3dpbmRvdy52aXN1YWxWaWV3cG9ydD9vKHtoZWlnaHQ6d2luZG93LnZpc3VhbFZpZXdwb3J0LmhlaWdodCx3aWR0aDp3aW5kb3cudmlzdWFsVmlld3BvcnQud2lkdGh9KTpvKHtoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHdpZHRoOndpbmRvdy5pbm5lcldpZHRofSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixnKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLGcpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIixnKX19LFtdKTtjb25zdFtpLHMsYSxsLGNdPVZsZSh7cG9zaXRpb246ZSxnbG9iYWxTaXplOnJ9KTtoLnVzZUVmZmVjdCgoKT0+e2Moe2xlZnQ6ci53aWR0aC1lYy03NCx0b3A6MTZ9KX0sW3JdKSxoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGc9eT0+e3kua2V5PT09IkVzY2FwZSImJnQoKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixnKSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixnKX19LFtdKTtjb25zdHt3aW5kb3dTaXplOnUsc2V0V2luZG93U2l6ZTpkfT1OZygpLGY9ci53aWR0aDw9NjAwfHxyLmhlaWdodDw9NjAwO2gudXNlRWZmZWN0KCgpPT57dmFyIGcseTtkKHtoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LTMwLHdpZHRoOmVjLGlubmVySGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodC0zMC0oNjQrKCgoeT0oZz1wLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKT09bnVsbD92b2lkIDA6eS5oZWlnaHQpfHwwKSl9KX0sW10pO2NvbnN0IHA9aC51c2VSZWYobnVsbCk7aC51c2VFZmZlY3QoKCk9PntpZihmKXtjKHt0b3A6MCxsZWZ0OjB9KSxkKHtoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHdpZHRoOndpbmRvdy5pbm5lcldpZHRoLGlubmVySGVpZ2h0OndpbmRvdy5pbm5lckhlaWdodC02NH0pO2NvbnN0IGc9ZG9jdW1lbnQub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQseT1nLmJvZHkuc3R5bGUub3ZlcmZsb3c7cmV0dXJuIGcuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIiwoKT0+e2cuYm9keS5zdHlsZS5vdmVyZmxvdz15fX19LFtmLHJdKTtjb25zdCBtPWgudXNlUmVmKCk7cmV0dXJuIGIuanN4KEJsZSx7bWluQ29uc3RyYWludHM6Zj92b2lkIDA6W2VjLG8wXSx3aWR0aDoodT09bnVsbD92b2lkIDA6dS53aWR0aCl8fGVjLGhlaWdodDoodT09bnVsbD92b2lkIDA6dS5oZWlnaHQpfHxvMCxvblJlc2l6ZTooZyx7c2l6ZTp5fSk9Pnt2YXIgdix4O3JldHVybiFmJiZkKHsuLi55LGlubmVySGVpZ2h0OnkuaGVpZ2h0LSg2NCsoKCh4PSh2PXAuY3VycmVudCk9PW51bGw/dm9pZCAwOnYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPT1udWxsP3ZvaWQgMDp4LmhlaWdodCl8fDApKX0pfSxoYW5kbGU6Zj9udWxsOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIGJvdHRvbS0wIHJpZ2h0LTAgY3Vyc29yLXNlLXJlc2l6ZSIsY2hpbGRyZW46Yi5qc3goInN2ZyIse2hlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAxOCAxOCIsd2lkdGg6IjE4Iix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOmIuanN4KCJwYXRoIix7ZDoibTE0LjIyOCAxNi4yMjdhMSAxIDAgMCAxIC0uNzA3LTEuNzA3bDEtMWExIDEgMCAwIDEgMS40MTYgMS40MTRsLTEgMWExIDEgMCAwIDEgLS43MDcuMjkzem0tNS42MzggMGExIDEgMCAwIDEgLS43MDctMS43MDdsNi42MzgtNi42MzhhMSAxIDAgMCAxIDEuNDE2IDEuNDE0bC02LjYzOCA2LjYzOGExIDEgMCAwIDEgLS43MDcuMjkzem0tNS44NCAwYTEgMSAwIDAgMSAtLjcwNy0xLjcwN2wxMi40NzctMTIuNDc3YTEgMSAwIDEgMSAxLjQxNSAxLjQxNGwtMTIuNDc4IDEyLjQ3N2ExIDEgMCAwIDEgLS43MDcuMjkzeiIsZmlsbDoiY3VycmVudENvbG9yIn0pfSl9KSxjbGFzc05hbWU6UXQoImFic29sdXRlIGluc2V0LTAgdGFibGV0OnctYXV0byB0YWJsZXQ6aC1hdXRvIHRhYmxldDptaW4taC1maXQgbWF4LWgtc3ZoIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tYmFja2dyb3VuZC85MCBmcm9tLTQwJSB0by1iYWNrZ3JvdW5kIGJhY2tkcm9wLWJsdXItbGcgdGV4dC1wcmltYXJ5IGRyb3Atc2hhZG93LTJ4bCBtaW4tdy1bMzIwcHhdIix7Im9wYWNpdHktMCI6IXMsIm9wYWNpdHktMTAwIjpzLCJyb3VuZGVkLWxnIjohZn0pLGNoaWxkcmVuOmIuanN4cygiZGl2Iix7c3R5bGU6e3dpZHRoOih1PT1udWxsP3ZvaWQgMDp1LndpZHRoKXx8ZWMsaGVpZ2h0Oih1PT1udWxsP3ZvaWQgMDp1LmhlaWdodCl8fG8wLGxlZnQ6aS5sZWZ0LHRvcDppLnRvcCxyaWdodDppLnJpZ2h0LGJvdHRvbTppLmJvdHRvbX0sY2hpbGRyZW46W2IuanN4cygiZGl2Iix7cmVmOmEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC0yIHB5LTIgdGV4dC1wcmltYXJ5IixvblRvdWNoU3RhcnQ6Zz0+e3ZhciB2O2NvbnN0IHk9KHY9Zy5jaGFuZ2VkVG91Y2hlcyk9PW51bGw/dm9pZCAwOnZbMF07eSYmKG0uY3VycmVudD17dGltZTpEYXRlLm5vdygpLHk6eS5jbGllbnRZfSl9LG9uVG91Y2hFbmQ6Zz0+e3ZhciB2O2NvbnN0IHk9KHY9Zy5jaGFuZ2VkVG91Y2hlcyk9PW51bGw/dm9pZCAwOnZbMF07eSYmbS5jdXJyZW50JiZ5LmNsaWVudFktbS5jdXJyZW50Lnk+MjAmJnkuY2xpZW50WS1tLmN1cnJlbnQueTwxMDAmJkRhdGUubm93KCktbS5jdXJyZW50LnRpbWU8MTUwJiYoZy5wcmV2ZW50RGVmYXVsdCgpLHQoKSl9LGNoaWxkcmVuOltmP2IuanN4KCJkaXYiLHtjbGFzc05hbWU6InB5LTYiLGNoaWxkcmVuOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgaC1bOHB4XSB3LVs4MHB4XSB0b3AtNCBiZy1wcmltYXJ5IHJvdW5kZWQtbGcifSl9KTpiLmpzeChWNCx7c2l6ZToxNixjbGFzc05hbWU6ImJsb2NrIHctZnVsbCBjdXJzb3ItZ3JhYiIsb25Nb3VzZURvd246Zz0+e2Z8fChnLnByZXZlbnREZWZhdWx0KCksZy5zdG9wUHJvcGFnYXRpb24oKSxsKCkpfX0pLGIuanN4KCJidXR0b24iLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgcHgtNCBweS0yIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtYWNjZW50IixvbkNsaWNrOnQsY2hpbGRyZW46Yi5qc3goUmcse3NpemU6Zj8zMjoxNn0pfSldfSksYi5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbQXJyYXkuaXNBcnJheShuKSYmbi5zbGljZSgwLDEpLGIuanN4KGtjLHtjbGFzc05hbWU6InJlbGF0aXZlIixzdHlsZTp7aGVpZ2h0OnU9PW51bGw/dm9pZCAwOnUuaW5uZXJIZWlnaHR9LGNoaWxkcmVuOkFycmF5LmlzQXJyYXkobik/bi5zbGljZSgxLC0xKTpufSksYi5qc3goImRpdiIse3JlZjpwLGNsYXNzTmFtZToidy1mdWxsIHB4LTQgcGItMCIsY2hpbGRyZW46QXJyYXkuaXNBcnJheShuKSYmbi5zbGljZSgtMSl9KV19KV19KX0pfWZ1bmN0aW9uIFZsZSh7cG9zaXRpb246ZSxnbG9iYWxTaXplOnR9KXt2YXIgYyx1O2NvbnN0W24scl09aC51c2VTdGF0ZSh7bGVmdDp0LndpZHRoLWVjLTc0LHRvcDoxNn0pO2gudXNlRWZmZWN0KCgpPT57ZSYmcihlKX0sW2VdKTtjb25zdFtvLGldPWgudXNlU3RhdGUoITEpLHM9aC51c2VSZWYobnVsbCk7aC51c2VFZmZlY3QoKCk9Pntjb25zdCBkPSgpPT57aSghMSl9LGY9cD0+e3ZhciBtLGcseSx2O2lmKG8pe3AucHJldmVudERlZmF1bHQoKSxwLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IHg9LSgoKChnPShtPXM9PW51bGw/dm9pZCAwOnMuY3VycmVudCk9PW51bGw/dm9pZCAwOm0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPT1udWxsP3ZvaWQgMDpnLndpZHRoKXx8MCkvMikrcC5jbGllbnRYLHc9LSgoKCh2PSh5PXM9PW51bGw/dm9pZCAwOnMuY3VycmVudCk9PW51bGw/dm9pZCAwOnkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpPT1udWxsP3ZvaWQgMDp2LmhlaWdodCl8fDApLzIpKyArcC5jbGllbnRZO3Ioe2xlZnQ6eDwwPzA6eCx0b3A6dzwwPzA6d30pfX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZiksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixkKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGYpfX0sW29dKTtjb25zdCBhPSgpPT5pKCEwKSxsPSEhKCh1PShjPXM9PW51bGw/dm9pZCAwOnMuY3VycmVudCk9PW51bGw/dm9pZCAwOmMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpIT1udWxsJiZ1LndpZHRoKTtyZXR1cm5bbixsLHMsYSxyXX1mdW5jdGlvbiBIbGUoe2RlZmF1bHRUaGVtZTplLGFwaTp0LHN0b3JlOm4sb25TdWJtaXQ6cn0pe2NvbnN0W28saV09TFAoZSkscz1xUCh0KSxbYSxsXT1xbGUoKSxbYyx1XT1LbGUoYSksW2QsZl09aC51c2VTdGF0ZShudWxsKSxwPWQhPW51bGwmJmQucGF0aD9kLnBhdGguc3BsaXQoIiwiKTpbXSxbbSxnXT1oLnVzZVN0YXRlKE9iamVjdC5mcm9tRW50cmllcyhwLm1hcChJPT5bSSx7c3RhdHVzOiJub3QtYXNrZWQifV0pKSk7aC51c2VFZmZlY3QoKCk9PntnKE9iamVjdC5mcm9tRW50cmllcyhwLm1hcChMPT5bTCx7c3RhdHVzOiJsb2FkaW5nIn1dKSkpO2FzeW5jIGZ1bmN0aW9uIEkoKXtjb25zdCBMPWF3YWl0IFByb21pc2UuYWxsKHAubWFwKGFzeW5jIHJlPT57Y29uc3RbVixLXT1vdC5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aChyZSksQz1hd2FpdCBuLmdldE1vZHVsZShWLCExKTtpZihidC5pc0VycihDKSlyZXR1cm5bVix7c3RhdHVzOiJlcnJvciIsZXJyb3I6Qy5lcnJvci5tZXNzYWdlfV07e2NvbnN0e3NvdXJjZTpULHNjaGVtYTpPfT1DLnZhbHVlO2lmKCFUfHwhTylyZXR1cm5bVix7c3RhdHVzOiJlcnJvciIsZXJyb3I6IlZhbCBjb3VsZCBsb2FkIHRoaXMgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi4ifV07e2NvbnN0IFI9b3QucmVzb2x2ZVBhdGgoSyxULE8pO3JldHVybiFSLnNvdXJjZXx8IVIuc2NoZW1hP1tWLHtzdGF0dXM6ImVycm9yIixlcnJvcjoiVmFsIGNvdWxkIG5vdCBpbnRlcm5hbGx5IHJlc29sdmUgdGhpcyBjb250ZW50LiBUaGlzIGlzIHBvc3NpYmx5IGR1ZSB0byBhIG1pc2NvbmZpZ3VyYXRpb24gb3IgYSBidWcgaW4gVmFsLiJ9XTpbcmUse3N0YXR1czoic3VjY2VzcyIsZGF0YTp7c291cmNlOlIuc291cmNlLHNjaGVtYTpSLnNjaGVtYX19XX19fSkpO2coT2JqZWN0LmZyb21FbnRyaWVzKEwpKX1JKCl9LFtwLmpvaW4oIjsiKV0pO2NvbnN0W3ksdl09aC51c2VTdGF0ZSgpO2gudXNlRWZmZWN0KCgpPT57bi5yZXNldCgpfSxbXSk7Y29uc3R7cGF0Y2hlczp4LHNldFBhdGNoUmVzZXRJZDp3fT1qUChzLHQpLGs9aC51c2VDYWxsYmFjayhJPT5hc3luYyBMPT57Y29uc3RbcmUsVl09b3Quc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgoSSksSz1hd2FpdCBMKG90LmNyZWF0ZVBhdGNoUGF0aChWKSk7bi5hcHBseVBhdGNoKHJlLEspLHcoQz0+QysxKSxyKCEwKX0sW10pLFtFLFNdPWgudXNlU3RhdGUoITEpLFtfLFBdPWgudXNlU3RhdGUoe2dsb2JhbEVycm9yOm51bGx9KSxbTSxBXT1oLnVzZVN0YXRlKCExKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntsZXQgST0hMTtyZXR1cm4gT2JqZWN0LmtleXMoeCkubGVuZ3RoPjAmJihBKCEwKSx0LnBvc3RWYWxpZGF0ZSh7cGF0Y2hlczp4fSkudGhlbihMPT57SXx8KGJ0LmlzRXJyKEwpP1Aoe2dsb2JhbEVycm9yOnttZXNzYWdlOkwuZXJyb3IubWVzc2FnZX19KTpQKHtnbG9iYWxFcnJvcjpudWxsLC4uLkwudmFsdWV9KSl9KS5maW5hbGx5KCgpPT57SXx8QSghMSl9KSksKCk9PntJPSEwfX0sW3hdKSxiLmpzeChfMS5Qcm92aWRlcix7dmFsdWU6e3RoZW1lOm8sc2Vzc2lvbjpzLGVkaXRNb2RlOmEsc2V0RWRpdE1vZGU6bCxzZXRUaGVtZTppLHdpbmRvd1NpemU6eSxzZXRXaW5kb3dTaXplOnZ9LGNoaWxkcmVuOmIuanN4cygiZGl2Iix7ImRhdGEtbW9kZSI6byxjbGFzc05hbWU6ImZvbnQtc2VyaWYgYW50aWFsaWFzZWQiLHN0eWxlOntwb3NpdGlvbjoiZml4ZWQiLHRvcDowLGxlZnQ6MCx6SW5kZXg6ODk5OX0sY2hpbGRyZW46W0UmJmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIHotNSB0b3AtWzE2cHhdIGxlZnQtWzE2cHhdIHctW2NhbGMoMTAwJS0zMnB4LTUwcHgtMTZweCldIGgtW2NhbGMoMTAwc3ZoLTMycHgpXSIsY2hpbGRyZW46Yi5qc3goZDgse3BhdGNoZXM6eCxpc1ZhbGlkYXRpbmc6TSx2YWxpZGF0aW9uUmVzcG9uc2U6XyxhcGk6dCxvbkNhbmNlbDooKT0+e1MoITEpfSxvbkNvbW1pdDooKT0+e3coST0+SSsxKX19KX0pLGIuanN4cyhFYWUse2NoaWxkcmVuOltiLmpzeChSRCx7fSksYi5qc3goImRpdiIse2NsYXNzTmFtZToiZml4ZWQgLXRyYW5zbGF0ZS15LTEvMiByaWdodC00IHRvcC0xLzIgei1vdmVybGF5IixjaGlsZHJlbjpiLmpzeChPYWUse2RpcmVjdGlvbjoidmVydGljYWwiLGFwaTp0LHBhdGNoZXM6eCxvbkNsaWNrUGF0Y2hlczooKT0+UyhJPT4hSSl9KX0pXX0pLHMuc3RhdHVzPT09InN1Y2Nlc3MiJiZzLmRhdGEuZW5hYmxlZCYmKGE9PT0iaG92ZXIifHxhPT09IndpbmRvdyIpJiZjLnBhdGgmJmIuanN4KFdsZSx7aG92ZXJUYXJnZXQ6YyxzZXRIb3ZlclRhcmdldDp1LHNldEVkaXRNb2RlOmwsc2V0V2luZG93VGFyZ2V0OmZ9KSxhPT09IndpbmRvdyImJmQmJmIuanN4KFVsZSx7b25DbG9zZTooKT0+e2YobnVsbCksbCgiaG92ZXIiKX0sY2hpbGRyZW46Yi5qc3goImRpdiIse2NsYXNzTmFtZToicC00IixzdHlsZTp7bWF4SGVpZ2h0Onk9PW51bGw/dm9pZCAwOnkuaW5uZXJIZWlnaHQsbWF4V2lkdGg6eT09bnVsbD92b2lkIDA6eS53aWR0aH0sY2hpbGRyZW46T2JqZWN0LmVudHJpZXMobSkubWFwKChbSSxMXSk9PntpZihMLnN0YXR1cyE9PSJzdWNjZXNzIilyZXR1cm4gYi5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbYi5qc3hzKCJzcGFuIix7Y2hpbGRyZW46W0ksIjogIixMLnN0YXR1c119KSxMLnN0YXR1cz09PSJlcnJvciImJmIuanN4KCJwcmUiLHtjaGlsZHJlbjpMLmVycm9yfSldfSxJKTtjb25zdHtzb3VyY2U6cmUsc2NoZW1hOlZ9PUwuZGF0YTtyZXR1cm4hcmV8fCFWP2IuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJNb2R1bGU6ICIsSSwiIGlzIG1pc3Npbmcgc291cmNlIG9yIHNjaGVtYSJdfSk6Yi5qc3goQ3Yse2luaXRPblN1Ym1pdDprLHBhdGg6SSxzY2hlbWE6Vixzb3VyY2U6cmUsc2V0U2VsZWN0ZWRQYXRoOigpPT57fSx0b3A6ITB9LEkpfSl9KX0pXX0pfSl9ZnVuY3Rpb24gV2xlKHtob3ZlclRhcmdldDplLHNldEVkaXRNb2RlOnQsc2V0V2luZG93VGFyZ2V0Om4sc2V0SG92ZXJUYXJnZXQ6cn0pe3ZhciBpO2NvbnN0IG89KGk9ZS5lbGVtZW50KT09bnVsbD92b2lkIDA6aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntpZihlLnBhdGgpe2NvbnN0IHM9YT0+e2EudGFyZ2V0JiZhLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZhLnRhcmdldC5pZCE9PSJ2YWwtc2hhZG93LXJvb3QiJiZuKHsuLi5lLHBhdGg6ZS5wYXRoLG1vdXNlOnt4OmEucGFnZVgseTphLnBhZ2VZfX0pLHQoIndpbmRvdyIpLHIobnVsbCksYS5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHMpLCgpPT57ZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIscyl9fX0sW2VdKSxiLmpzeCgiZGl2Iix7aWQ6InZhbC1ob3ZlciIsY2xhc3NOYW1lOiJmaXhlZCBib3JkZXItMiBjdXJzb3ItcG9pbnRlciB6LW92ZXJsYXktaG92ZXIgYm9yZGVyLWFjY2VudCIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUiLHRvcDpvPT1udWxsP3ZvaWQgMDpvLnRvcCxsZWZ0Om89PW51bGw/dm9pZCAwOm8ubGVmdCx3aWR0aDpvPT1udWxsP3ZvaWQgMDpvLndpZHRoLGhlaWdodDpvPT1udWxsP3ZvaWQgMDpvLmhlaWdodH0sY2hpbGRyZW46Yi5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgdy1mdWxsIHRleHQteHMiLGNoaWxkcmVuOmIuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTMgcHktMSBib3JkZXItYi0yIGJvcmRlci1sLTIgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBiZy1hY2NlbnQgYm9yZGVyLWFjY2VudCIsc3R5bGU6e21heEhlaWdodDoobz09bnVsbD92b2lkIDA6by5oZWlnaHQpJiZvLmhlaWdodC00LGZvbnRTaXplOm8hPW51bGwmJm8uaGVpZ2h0JiZvLmhlaWdodDw9MTY/by5oZWlnaHQtNDp2b2lkIDB9LGNoaWxkcmVuOiJFZGl0In0pfSl9KX1mdW5jdGlvbiBLbGUoZSl7Y29uc3RbdCxuXT1oLnVzZVN0YXRlKCksW3Isb109aC51c2VTdGF0ZSgpLFtpLHNdPWgudXNlU3RhdGUoKTtmdW5jdGlvbiBhKGwpe2lmKGwpe2NvbnN0IGM9W107bC5kYXRhc2V0LnZhbFBhdGgmJmMucHVzaChsLmRhdGFzZXQudmFsUGF0aCk7Zm9yKGNvbnN0IHUgb2YgQXJyYXkuZnJvbShsLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSkpaWYodSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXtjb25zdCBkPXUuZGF0YXNldC52YWxQYXRoO2QmJmMucHVzaChkKX1jLmxlbmd0aD4wJiYobihsKSxvKGMuam9pbigiLCIpKSxzKGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKX19cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57aWYoZT09PSJob3ZlciJ8fGU9PT0id2luZG93Iil7Y29uc3QgbD1jPT57YShjLnRhcmdldCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGwpLCgpPT57bih2b2lkIDApLG8odm9pZCAwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGwpfX19LFtlXSksaC51c2VFZmZlY3QoKCk9Pntjb25zdCBsPSgpPT57dCYmcyh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKX0sYz1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9Pnt0JiZzKHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfSksdT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmFsLXNoYWRvdy1yb290Iik7cmV0dXJuIHQmJnUmJmMub2JzZXJ2ZSh1KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGwse3Bhc3NpdmU6ITB9KSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbCksYy5kaXNjb25uZWN0KCl9fSxbdF0pLFt7cGF0aDpyLGVsZW1lbnQ6dCxyZWN0Oml9LGw9Pnt2YXIgYztuKGw9PW51bGw/dm9pZCAwOmwuZWxlbWVudCksbyhsPT1udWxsP3ZvaWQgMDpsLnBhdGgpLHMoKGM9bD09bnVsbD92b2lkIDA6bC5lbGVtZW50KT09bnVsbD92b2lkIDA6Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9XX1jb25zdCByaD0idmFsLWVkaXQtbW9kZSI7ZnVuY3Rpb24gcWxlKCl7Y29uc3RbZSx0XT1oLnVzZVN0YXRlKCJvZmYiKTtoLnVzZUVmZmVjdCgoKT0+e3RyeXtjb25zdCByPWxvY2FsU3RvcmFnZS5nZXRJdGVtKHJoKTtyPT09Im9mZiJ8fHI9PT0iaG92ZXIifHxyPT09IndpbmRvdyJ8fHI9PT0iZnVsbCI/dChyPT09IndpbmRvdyI/ImhvdmVyIjpyKToobG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocmgpLHQoIm9mZiIpKX1jYXRjaHt0KCJvZmYiKX19LFtdKTtjb25zdCBuPWgudXNlQ2FsbGJhY2socj0+e3R5cGVvZiByPT0iZnVuY3Rpb24iP3Qobz0+e2NvbnN0IGk9cihvKTtyZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0ocmgsaSksaX0pOihsb2NhbFN0b3JhZ2Uuc2V0SXRlbShyaCxyKSx0KHIpKX0sW10pO3JldHVybltlLG5dfWZ1bmN0aW9uIEdsZSgpe2NvbnN0IGU9Ii9hcGkvdmFsIix0PW5ldyB3MShlKSxuPW5ldyBIMSh0KTtyZXR1cm4gYi5qc3goaVMse2ZhbGxiYWNrUmVuZGVyOnNTLGNoaWxkcmVuOmIuanN4cyhsYWUse2NoaWxkcmVuOltiLmpzeCgibGluayIse3JlbDoicHJlY29ubmVjdCIsaHJlZjoiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSJ9KSxiLmpzeCgibGluayIse3JlbDoicHJlY29ubmVjdCIsaHJlZjoiaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIsY3Jvc3NPcmlnaW46ImFub255bW91cyJ9KSxiLmpzeCgibGluayIse2hyZWY6Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9U3BhY2UrTW9ubzppdGFsLHdnaHRAMCw0MDA7MCw3MDA7MSw0MDAmZGlzcGxheT1zd2FwIixyZWw6InN0eWxlc2hlZXQifSksYi5qc3goImxpbmsiLHtocmVmOiJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVJvYm90bzppdGFsLHdnaHRAMCwxMDA7MCwzMDA7MCw0MDA7MCw1MDA7MCw3MDA7MSwxMDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw3MDAmZmFtaWx5PVNwYWNlK01vbm86aXRhbCx3Z2h0QDAsNDAwOzAsNzAwOzEsNDAwJmRpc3BsYXk9c3dhcCIscmVsOiJzdHlsZXNoZWV0In0pLGIuanN4KCJsaW5rIix7cmVsOiJzdHlsZXNoZWV0IixocmVmOmAke2V9L3N0YXRpYyR7Y2FlfWB9KSxiLmpzeChIbGUse2FwaTp0LHN0b3JlOm4sb25TdWJtaXQ6KCk9Pntjb25zdCByPW5ldyBDdXN0b21FdmVudCgidmFsLWV2ZW50Iix7ZGV0YWlsOnt0eXBlOiJvdmVybGF5LXN1Ym1pdCIscmVmcmVzaFJlcXVpcmVkOiEwfX0pO3dpbmRvdy5kaXNwYXRjaEV2ZW50KHIpfX0pXX0pfSl9Y29uc3QgcE89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodWFlKSxoTz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkYWUpLG1PPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2YWwtYXBwLXN0YXRpYyIpO3BPP3lkLmNyZWF0ZVJvb3QocE8pLnJlbmRlcihYLmNyZWF0ZUVsZW1lbnQoWC5TdHJpY3RNb2RlLG51bGwsWC5jcmVhdGVFbGVtZW50KGlhZSxudWxsKSkpOm1PP3lkLmNyZWF0ZVJvb3QobU8pLnJlbmRlcihYLmNyZWF0ZUVsZW1lbnQoWC5TdHJpY3RNb2RlLG51bGwsWC5jcmVhdGVFbGVtZW50KHNhZSxudWxsKSkpOmhPP3lkLmNyZWF0ZVJvb3QoaE8pLnJlbmRlcihYLmNyZWF0ZUVsZW1lbnQoWC5TdHJpY3RNb2RlLG51bGwsWC5jcmVhdGVFbGVtZW50KEdsZSxudWxsKSkpOmNvbnNvbGUuZXJyb3IoIlZhbDogY291bGQgbm90IG1vdW50IFZhbCBlbGVtZW50LiBDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uIik7Cg==","/assets/index-LluHZKVE.css":"LnJlbWlycm9yLWVkaXRvci13cmFwcGVye3BhZGRpbmctdG9wOnZhcigtLXJtci1zcGFjZS0zKX0ucmVtaXJyb3ItYnV0dG9uLWFjdGl2ZXtjb2xvcjp2YXIoLS1ybXItY29sb3ItcHJpbWFyeS10ZXh0KSFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItcHJpbWFyeSkhaW1wb3J0YW50fS5yZW1pcnJvci1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtmb250LXdlaWdodDo0MDA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3BhZGRpbmc6LjM3NWVtIC43NWVtO2xpbmUtaGVpZ2h0OjEuNTtib3JkZXItcmFkaXVzOnZhcigtLXJtci1yYWRpdXMtYm9yZGVyKTt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXJtci1jb2xvci1ib3JkZXIpO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1ybXItY29sb3ItdGV4dCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItYmFja2dyb3VuZCk7dHJhbnNpdGlvbjpjb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQ7Zm9udC1zaXplOjEwMCV9LnJlbWlycm9yLWJ1dHRvblthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjphdXRvfS5yZW1pcnJvci1idXR0b246bm90KFthcmlhLWRpc2FibGVkPXRydWVdKTpob3Zlcntjb2xvcjp2YXIoLS1ybXItY29sb3ItaG92ZXItcHJpbWFyeS10ZXh0KTtib3JkZXItY29sb3I6dmFyKC0tcm1yLWNvbG9yLWhvdmVyLWJvcmRlcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItaG92ZXItcHJpbWFyeSl9LnJlbWlycm9yLWJ1dHRvbjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pOmFjdGl2ZSwucmVtaXJyb3ItYnV0dG9uOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSlbZGF0YS1hY3RpdmVdLC5yZW1pcnJvci1idXR0b246bm90KFthcmlhLWRpc2FibGVkPXRydWVdKVthcmlhLWV4cGFuZGVkPXRydWVde2NvbG9yOnZhcigtLXJtci1jb2xvci1hY3RpdmUtcHJpbWFyeS10ZXh0KTtib3JkZXItY29sb3I6dmFyKC0tcm1yLWNvbG9yLWFjdGl2ZS1ib3JkZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLWFjdGl2ZS1wcmltYXJ5KX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7LnJlbWlycm9yLWJ1dHRvbntib3JkZXI6MnB4IHNvbGlkIGN1cnJlbnRjb2xvcn19LnJlbWlycm9yLWNvbXBvc2l0ZXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOi4zNzVlbSAuNzVlbTtmb250LXNpemU6MTAwJTtib3JkZXI6MDtjb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdH0ucmVtaXJyb3ItY29tcG9zaXRlOm5vdChbYXJpYS1zZWxlY3RlZD10cnVlXSl7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9W2FyaWEtYWN0aXZlZGVzY2VuZGFudD0iKiJdOmZvY3VzIC5yZW1pcnJvci1jb21wb3NpdGVbYXJpYS1zZWxlY3RlZD10cnVlXSxbYXJpYS1hY3RpdmVkZXNjZW5kYW50PSIqIl06Zm9jdXN+KiAucmVtaXJyb3ItY29tcG9zaXRlW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV17Y29sb3I6dmFyKC0tcm1yLWNvbG9yLXRleHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLWJhY2tncm91bmQpfS5yZW1pcnJvci1kaWFsb2d7cG9zaXRpb246Zml4ZWQ7dG9wOjI4cHg7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKTtib3JkZXItcmFkaXVzOnZhcigtLXJtci1yYWRpdXMtYm9yZGVyKTtwYWRkaW5nOjFlbTttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSA1NnB4KTtvdXRsaW5lOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ybXItY29sb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1ybXItY29sb3ItdGV4dCk7ei1pbmRleDo5OTl9LnJlbWlycm9yLWRpYWxvZzpmb2N1c3tib3gtc2hhZG93OjAgMCAwIC4yZW0gdmFyKC0tcm1yLWNvbG9yLXNoYWRvdy0xKX0ucmVtaXJyb3ItZGlhbG9nLWJhY2tkcm9we2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLWJhY2tkcm9wKTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4Ojk5OX0ucmVtaXJyb3ItZm9ybT4qOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6MXJlbX0ucmVtaXJyb3ItZm9ybS1tZXNzYWdle2ZvbnQtc2l6ZTouOGVtO21hcmdpbi10b3A6LjVyZW0haW1wb3J0YW50fS5yZW1pcnJvci1mb3JtLWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjAgMCAuNXJlbSFpbXBvcnRhbnR9aW5wdXRbdHlwZT1jaGVja2JveF0rLnJlbWlycm9yLWZvcm0tbGFiZWwsaW5wdXRbdHlwZT1yYWRpb10rLnJlbWlycm9yLWZvcm0tbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjAgMCAwIC41cmVtIWltcG9ydGFudH0ucmVtaXJyb3ItZm9ybS1ncm91cHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLXJtci1jb2xvci10ZXh0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXJtci1jb2xvci1ib3JkZXIpO2JvcmRlci1yYWRpdXM6dmFyKC0tcm1yLXJhZGl1cy1ib3JkZXIpO3BhZGRpbmc6LjVyZW0gMXJlbSAxcmVtfS5yZW1pcnJvci1mb3JtLWdyb3VwPip7ZGlzcGxheTpibG9ja30ucmVtaXJyb3ItZ3JvdXB7ZGlzcGxheTpmbGV4fS5yZW1pcnJvci1ncm91cD46bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLWxlZnQ6LTFweH0ucmVtaXJyb3ItZ3JvdXA+Om5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5maXJzdC1jaGlsZCk6bm90KC5sYXN0LWNoaWxkKXtib3JkZXItcmFkaXVzOjB9LnJlbWlycm9yLWdyb3VwPjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpLC5yZW1pcnJvci1ncm91cD4uZmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5yZW1pcnJvci1ncm91cD46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSwucmVtaXJyb3ItZ3JvdXA+Lmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ucmVtaXJyb3ItaW5wdXR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2JvcmRlci1yYWRpdXM6dmFyKC0tcm1yLXJhZGl1cy1ib3JkZXIpO3BhZGRpbmc6LjVlbSAuNzVlbTtmb250LXNpemU6MTAwJTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXJtci1odWUtZ3JheS0yKTtjb2xvcjp2YXIoLS1ybXItaHVlLWdyYXktNSk7bWFyZ2luOjAhaW1wb3J0YW50fS5yZW1pcnJvci1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tcm1yLWh1ZS1ncmF5LTMpfS5yZW1pcnJvci1tZW51e2Rpc3BsYXk6ZmxleDtib3JkZXItcmFkaXVzOjB9LnJlbWlycm9yLW1lbnUtcGFuZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctdG9wOnZhcigtLXJtci1zcGFjZS0xKTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1ybXItc3BhY2UtMSk7cGFkZGluZy1yaWdodDp2YXIoLS1ybXItc3BhY2UtMil9LnJlbWlycm9yLW1lbnUtcGFuZS1hY3RpdmV7Y29sb3I6dmFyKC0tcm1yLWNvbG9yLXByaW1hcnktdGV4dCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItcHJpbWFyeSl9LnJlbWlycm9yLW1lbnUtZHJvcGRvd24tbGFiZWx7cGFkZGluZzowIHZhcigtLXJtci1zcGFjZS0yKX0ucmVtaXJyb3ItbWVudS1wYW5lLWljb257cG9zaXRpb246YWJzb2x1dGU7bGVmdDo4cHg7d2lkdGg6MjBweDtjb2xvcjp2YXIoLS1ybXItaHVlLWdyYXktNyl9YnV0dG9uOmhvdmVyIC5yZW1pcnJvci1tZW51LXBhbmUtaWNvbixidXR0b246YWN0aXZlIC5yZW1pcnJvci1tZW51LXBhbmUtaWNvbixbYXJpYS1jaGVja2VkPXRydWVdIC5yZW1pcnJvci1tZW51LXBhbmUtaWNvbntjb2xvcjp2YXIoLS1ybXItaHVlLWdyYXktMSl9LnJlbWlycm9yLW1lbnUtcGFuZS1sYWJlbHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cGFkZGluZy1yaWdodDp2YXIoLS1ybXItc3BhY2UtMyl9LnJlbWlycm9yLW1lbnUtcGFuZS1zaG9ydGN1dHthbGlnbi1zZWxmOmZsZXgtZW5kO2NvbG9yOnZhcigtLXJtci1odWUtZ3JheS02KX1idXR0b246aG92ZXIgLnJlbWlycm9yLW1lbnUtcGFuZS1zaG9ydGN1dCxidXR0b246YWN0aXZlIC5yZW1pcnJvci1tZW51LXBhbmUtc2hvcnRjdXQsW2FyaWEtY2hlY2tlZD10cnVlXSAucmVtaXJyb3ItbWVudS1wYW5lLXNob3J0Y3V0e2NvbG9yOnZhcigtLXJtci1odWUtZ3JheS0xKX1bcm9sZT1tZW51XT4ucmVtaXJyb3ItbWVudS1idXR0b24tbGVmdHtsZWZ0OnZhcigtLXJtci1zcGFjZS0yKX1bcm9sZT1tZW51XT4ucmVtaXJyb3ItbWVudS1idXR0b24tcmlnaHR7cmlnaHQ6dmFyKC0tcm1yLXNwYWNlLTIpfS5yZW1pcnJvci1tZW51LWJ1dHRvbi1uZXN0ZWQtbGVmdCBzdmd7bWFyZ2luLXJpZ2h0OnZhcigtLXJtci1zcGFjZS0yKX1bcm9sZT1tZW51XT4ucmVtaXJyb3ItbWVudS1idXR0b24tbmVzdGVkLXJpZ2h0e3BhZGRpbmctcmlnaHQ6MmVtIWltcG9ydGFudH0ucmVtaXJyb3ItbWVudS1idXR0b24tbmVzdGVkLXJpZ2h0IHN2Z3ttYXJnaW4tbGVmdDp2YXIoLS1ybXItc3BhY2UtMil9LnJlbWlycm9yLW1lbnUtYnV0dG9ue3Bvc2l0aW9uOnJlbGF0aXZlfS5yZW1pcnJvci1tZW51LWJ1dHRvbiBzdmd7ZmlsbDpjdXJyZW50Q29sb3I7d2lkdGg6LjY1ZW07aGVpZ2h0Oi42NWVtfVtyb2xlPW1lbnVdPi5yZW1pcnJvci1tZW51LWJ1dHRvbiBzdmd7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX1bcm9sZT1tZW51YmFyXT4ucmVtaXJyb3ItbWVudS1idXR0b24gc3Zne2Rpc3BsYXk6bm9uZX0ucmVtaXJyb3ItbWVudS1iYXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5yZW1pcnJvci1tZW51LWJhclthcmlhLW9yaWVudGF0aW9uPXZlcnRpY2FsXXtwYWRkaW5nOi4yNWVtIDB9LnJlbWlycm9yLW1lbnUtYmFyW2FyaWEtb3JpZW50YXRpb249aG9yaXpvbnRhbF17cGFkZGluZzowfS5yZW1pcnJvci1mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnJlbWlycm9yLWZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30ucmVtaXJyb3ItbWVudS1pdGVte2xpbmUtaGVpZ2h0OjEuNTt0ZXh0LWFsaWduOmxlZnQ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZToxMDAlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0tcm1yLWNvbG9yLWZvcmVncm91bmQpO21hcmdpbjowOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdDt0ZXh0LWRlY29yYXRpb246bm9uZX0ucmVtaXJyb3ItbWVudS1pdGVtOmZvY3VzLC5yZW1pcnJvci1tZW51LWl0ZW1bYXJpYS1leHBhbmRlZD10cnVlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1jb2xvci1wcmltYXJ5KTtjb2xvcjp2YXIoLS1ybXItY29sb3ItcHJpbWFyeS10ZXh0KTtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5yZW1pcnJvci1tZW51LWl0ZW06YWN0aXZlLC5yZW1pcnJvci1tZW51LWl0ZW1bZGF0YS1hY3RpdmVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLWFjdGl2ZS1wcmltYXJ5KSFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0tcm1yLWNvbG9yLWFjdGl2ZS1wcmltYXJ5LXRleHQpIWltcG9ydGFudH0ucmVtaXJyb3ItbWVudS1pdGVtOmRpc2FibGVke29wYWNpdHk6LjV9LnJlbWlycm9yLW1lbnUtaXRlbS1yb3d7cGFkZGluZzowIHZhcigtLXJtci1zcGFjZS0yKX0ucmVtaXJyb3ItbWVudS1pdGVtLWNvbHVtbntwYWRkaW5nOjAgdmFyKC0tcm1yLXNwYWNlLTQpfS5yZW1pcnJvci1tZW51LWl0ZW0tY2hlY2tib3h7cG9zaXRpb246cmVsYXRpdmU7b3V0bGluZTowfS5yZW1pcnJvci1tZW51LWl0ZW0tY2hlY2tib3hbYXJpYS1jaGVja2VkPXRydWVdOmJlZm9yZXtjb250ZW50OiLinJMiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6LjRlbTt3aWR0aDoxZW07aGVpZ2h0OjFlbX0ucmVtaXJyb3ItbWVudS1pdGVtLXJhZGlve3Bvc2l0aW9uOnJlbGF0aXZlO291dGxpbmU6MH0ucmVtaXJyb3ItbWVudS1pdGVtLXJhZGlvW2FyaWEtY2hlY2tlZD10cnVlXTpiZWZvcmV7Y29udGVudDoi4oCiIjtwb3NpdGlvbjphYnNvbHV0ZTtmb250LXNpemU6MS40ZW07dG9wOi0uMjVlbTtsZWZ0Oi4zNWVtO3dpZHRoOi43MTQyODU3MTQzZW07aGVpZ2h0Oi43MTQyODU3MTQzZW19LnJlbWlycm9yLW1lbnUtZ3JvdXB7ZGlzcGxheTppbmhlcml0O2ZsZXgtZGlyZWN0aW9uOmluaGVyaXR9LnJlbWlycm9yLWZsb2F0aW5nLXBvcG92ZXJ7cGFkZGluZzowO2JvcmRlcjpub25lO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDU2cHgpfS5yZW1pcnJvci1wb3BvdmVyIFtkYXRhLWFycm93XXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5yZW1pcnJvci1wb3BvdmVyIFtkYXRhLWFycm93XSAuc3Ryb2tle2ZpbGw6dmFyKC0tcm1yLWNvbG9yLWJvcmRlcil9LnJlbWlycm9yLXBvcG92ZXIgW2RhdGEtYXJyb3ddIC5maWxse2ZpbGw6dmFyKC0tcm1yLWNvbG9yLWJhY2tncm91bmQpfS5yZW1pcnJvci1hbmltYXRlZC1wb3BvdmVye3RyYW5zaXRpb246b3BhY2l0eSAuMjVzIGVhc2UtaW4tb3V0LHRyYW5zZm9ybSAuMjVzIGVhc2UtaW4tb3V0O29wYWNpdHk6MDt0cmFuc2Zvcm0tb3JpZ2luOnRvcCBjZW50ZXI7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCl9W2RhdGEtZW50ZXJdIC5yZW1pcnJvci1hbmltYXRlZC1wb3BvdmVye29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ucmVtaXJyb3Itcm9sZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7Zm9udC1mYW1pbHk6dmFyKC0tcm1yLWZvbnQtZmFtaWx5LWRlZmF1bHQpO2NvbG9yOnZhcigtLXJtci1jb2xvci10ZXh0KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1jb2xvci1iYWNrZ3JvdW5kKX0ucmVtaXJyb3Itc2VwYXJhdG9ye2JvcmRlcjoxcHggc29saWQgdmFyKC0tcm1yLWNvbG9yLWJvcmRlcik7Ym9yZGVyLXdpZHRoOjAgMXB4IDAgMDttYXJnaW46MCAuNWVtO3BhZGRpbmc6MDt3aWR0aDowO2hlaWdodDphdXRvfS5yZW1pcnJvci1zZXBhcmF0b3JbYXJpYS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXXtib3JkZXItd2lkdGg6MCAwIDFweCAwO21hcmdpbjouNWVtIDA7d2lkdGg6YXV0bztoZWlnaHQ6MH0ucmVtaXJyb3ItdGFie2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MXB4IDFweCAwIDFweDtib3JkZXItcmFkaXVzOnZhcigtLXJtci1yYWRpdXMtYm9yZGVyKSB2YXIoLS1ybXItcmFkaXVzLWJvcmRlcikgMCAwO2ZvbnQtc2l6ZToxMDAlO3BhZGRpbmc6LjVlbSAxZW07bWFyZ2luOjAgMCAtMXB4fS5yZW1pcnJvci10YWJbYXJpYS1zZWxlY3RlZD10cnVlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1jb2xvci1iYWNrZ3JvdW5kKTtib3JkZXItY29sb3I6dmFyKC0tcm1yLWNvbG9yLWJvcmRlcil9W2FyaWEtb3JpZW50YXRpb249dmVydGljYWxdIC5yZW1pcnJvci10YWJ7Ym9yZGVyLXdpZHRoOjFweCAwIDFweCAxcHg7Ym9yZGVyLXJhZGl1czouMmVtIDAgMCAuMmVtO21hcmdpbjowIC0xcHggMCAwfS5yZW1pcnJvci10YWItbGlzdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2JvcmRlcjoxcHggc29saWQgdmFyKC0tcm1yLWNvbG9yLWJvcmRlcik7Ym9yZGVyLXdpZHRoOjAgMCAxcHggMDttYXJnaW46MCAwIDFlbX0ucmVtaXJyb3ItdGFiLWxpc3RbYXJpYS1vcmllbnRhdGlvbj12ZXJ0aWNhbF17ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci13aWR0aDowIDFweCAwIDA7bWFyZ2luOjAgMWVtIDAgMH0ucmVtaXJyb3ItdGFiYmFibGU6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhZGlvXSl7b3V0bGluZTowfS5yZW1pcnJvci10YWJiYWJsZTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFkaW9dKTpmb2N1c3tib3gtc2hhZG93OnZhcigtLXJtci1jb2xvci1vdXRsaW5lKSAwIDAgMCAuMmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6Mn0ucmVtaXJyb3ItdGFiYmFibGU6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhZGlvXSk6aG92ZXJ7ei1pbmRleDoyfS5yZW1pcnJvci10YWJiYWJsZVthcmlhLWRpc2FibGVkPXRydWVde29wYWNpdHk6LjV9LnJlbWlycm9yLXRvb2xiYXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztvdmVyZmxvdy15OmF1dG99LnJlbWlycm9yLXRvb2xiYXI+Kjpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW46MCAwIDAgLjVlbX0ucmVtaXJyb3ItdG9vbGJhclthcmlhLW9yaWVudGF0aW9uPXZlcnRpY2FsXXtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ucmVtaXJyb3ItdG9vbGJhclthcmlhLW9yaWVudGF0aW9uPXZlcnRpY2FsXT4qOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbjouNWVtIDAgMH0ucmVtaXJyb3ItdG9vbHRpcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1jb2xvci1mYWRlZCk7Y29sb3I6I2ZmZjtmb250LXNpemU6LjhlbTtwYWRkaW5nOi41cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tcm1yLXJhZGl1cy1ib3JkZXIpO3otaW5kZXg6OTk5fS5yZW1pcnJvci10b29sdGlwIFtkYXRhLWFycm93XXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5yZW1pcnJvci10b29sdGlwIFtkYXRhLWFycm93XSAuc3Ryb2tle2ZpbGw6dHJhbnNwYXJlbnR9LnJlbWlycm9yLXRvb2x0aXAgW2RhdGEtYXJyb3ddIC5maWxse2ZpbGw6dmFyKC0tcm1yLWh1ZS1ncmF5LTgpfS5yZW1pcnJvci10YWJsZS1zaXplLWVkaXRvcntiYWNrZ3JvdW5kOnZhcigtLXJtci1jb2xvci1iYWNrZ3JvdW5kKTtib3gtc2hhZG93OnZhcigtLXJtci1jb2xvci1zaGFkb3ctMSk7Zm9udC1mYW1pbHk6dmFyKC0tcm1yLWZvbnQtZmFtaWx5LWRlZmF1bHQpO2ZvbnQtc2l6ZTp2YXIoLS1ybXItZm9udC1zaXplLTEpfS5yZW1pcnJvci10YWJsZS1zaXplLWVkaXRvci1ib2R5e3Bvc2l0aW9uOnJlbGF0aXZlfS5yZW1pcnJvci10YWJsZS1zaXplLWVkaXRvci1ib2R5OmFmdGVye2JhY2tncm91bmQ6IzAwMDA7Ym90dG9tOi01MHB4O2NvbnRlbnQ6IiI7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01MHB4O3RvcDotNTBweH0ucmVtaXJyb3ItdGFibGUtc2l6ZS1lZGl0b3ItY2VsbHtib3JkZXI6dmFyKC0tcm1yLWNvbG9yLWJvcmRlcik7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoyfS5yZW1pcnJvci10YWJsZS1zaXplLWVkaXRvci1jZWxsLXNlbGVjdGVke2JhY2tncm91bmQ6dmFyKC0tcm1yLWNvbG9yLXRhYmxlLXNlbGVjdGVkLWJvcmRlcik7Ym9yZGVyLWNvbG9yOnZhcigtLXJtci1jb2xvci1ib3JkZXIpfS5yZW1pcnJvci10YWJsZS1zaXplLWVkaXRvci1mb290ZXJ7cGFkZGluZy1ib3R0b206dmFyKC0tcm1yLXNwYWNlLTEpO3RleHQtYWxpZ246Y2VudGVyfS5yZW1pcnJvci1jb2xvci1waWNrZXJ7YmFja2dyb3VuZDp2YXIoLS1ybXItY29sb3ItYmFja2dyb3VuZCk7Ym94LXNoYWRvdzp2YXIoLS1ybXItYm94LXNoYWRvdy0xKTtmb250LWZhbWlseTp2YXIoLS1ybXItZm9udC1mYW1pbHktZGVmYXVsdCk7Zm9udC1zaXplOnZhcigtLXJtci1mb250LXNpemUtMSk7cGFkZGluZzp2YXIoLS1ybXItc3BhY2UtMikgdmFyKC0tcm1yLXNwYWNlLTMpfS5yZW1pcnJvci1lZGl0b3IuUHJvc2VNaXJyb3J7d29yZC13cmFwOmJyZWFrLXdvcmQ7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d2hpdGUtc3BhY2U6YnJlYWstc3BhY2VzO3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9uZTtmb250LWZlYXR1cmUtc2V0dGluZ3M6ImxpZ2EiIDA7b3ZlcmZsb3cteTpzY3JvbGx9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciBwcmV7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciBsaXtwb3NpdGlvbjpyZWxhdGl2ZX0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIGhye2JvcmRlci1jb2xvcjojMmUyZTJlfS5yZW1pcnJvci1lZGl0b3IuUHJvc2VNaXJyb3IgaW1nLlByb3NlTWlycm9yLXNlcGFyYXRvcntkaXNwbGF5OmlubGluZSFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmUhaW1wb3J0YW50O21hcmdpbjowIWltcG9ydGFudH0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yLWhpZGVzZWxlY3Rpb24gKjo6c2VsZWN0aW9ue2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdH0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yLWhpZGVzZWxlY3Rpb24gKjo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0fS5yZW1pcnJvci1lZGl0b3IuUHJvc2VNaXJyb3ItaGlkZXNlbGVjdGlvbntjYXJldC1jb2xvcjp0cmFuc3BhcmVudH0ucmVtaXJyb3ItZWRpdG9yIC5Qcm9zZU1pcnJvci1zZWxlY3RlZG5vZGV7b3V0bGluZToycHggc29saWQgIzhjZn0ucmVtaXJyb3ItZWRpdG9yIGxpLlByb3NlTWlycm9yLXNlbGVjdGVkbm9kZXtvdXRsaW5lOm5vbmV9LnJlbWlycm9yLWVkaXRvciBsaS5Qcm9zZU1pcnJvci1zZWxlY3RlZG5vZGU6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0zMnB4O3JpZ2h0Oi0ycHg7dG9wOi0ycHg7Ym90dG9tOi0ycHg7Ym9yZGVyOjJweCBzb2xpZCAjOGNmO3BvaW50ZXItZXZlbnRzOm5vbmV9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciBibG9ja3F1b3Rle2JvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1ybXItaHVlLWdyYXktMyk7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTBweDtmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIGJsb2NrcXVvdGUgcHtjb2xvcjojODg4fS5yZW1pcnJvci1lZGl0b3IgZGl2W2RhdGEtY2FsbG91dC10eXBlXXtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjEwcHg7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkIHRyYW5zcGFyZW50fS5yZW1pcnJvci1lZGl0b3IgZGl2W2RhdGEtY2FsbG91dC10eXBlXT46bm90KC5yZW1pcnJvci1jYWxsb3V0LWVtb2ppLXdyYXBwZXIpe21hcmdpbi1sZWZ0OjhweDtmbGV4LWdyb3c6MX0ucmVtaXJyb3ItZWRpdG9yIGRpdltkYXRhLWNhbGxvdXQtdHlwZT1pbmZvXXtiYWNrZ3JvdW5kOiNlZWY2ZmM7Ym9yZGVyLWxlZnQtY29sb3I6IzMyOThkY30ucmVtaXJyb3ItZWRpdG9yIGRpdltkYXRhLWNhbGxvdXQtdHlwZT13YXJuaW5nXXtiYWNrZ3JvdW5kOiNmZmZiZWI7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZGQ1N30ucmVtaXJyb3ItZWRpdG9yIGRpdltkYXRhLWNhbGxvdXQtdHlwZT1lcnJvcl17YmFja2dyb3VuZDojZmVlY2YwO2JvcmRlci1sZWZ0LWNvbG9yOiNmMTQ2Njh9LnJlbWlycm9yLWVkaXRvciBkaXZbZGF0YS1jYWxsb3V0LXR5cGU9c3VjY2Vzc117YmFja2dyb3VuZDojZWZmYWYzO2JvcmRlci1sZWZ0LWNvbG9yOiM0OGM3NzR9LnJlbWlycm9yLWVkaXRvciBkaXZbZGF0YS1jYWxsb3V0LXR5cGU9Ymxhbmtde2JhY2tncm91bmQ6I2Y4ZjhmOH0ucmVtaXJyb3Itd3JhcHt3aGl0ZS1zcGFjZTpwcmUtd3JhcCFpbXBvcnRhbnR9LnJlbWlycm9yLWxhbmd1YWdlLXNlbGVjdC1wb3NpdGlvbmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDp2YXIoLS15KTtsZWZ0OnZhcigtLXgpfS5yZW1pcnJvci1sYW5ndWFnZS1zZWxlY3Qtd2lkdGh7d2lkdGg6dmFyKC0tdyl9LnJlbWlycm9yLWExMXktZGFyayBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1hMTF5LWRhcmsgcHJlW2NsYXNzKj1sYW5ndWFnZS1de2NvbG9yOiNmOGY4ZjI7YmFja2dyb3VuZDpub25lO2ZvbnQtZmFtaWx5OkNvbnNvbGFzLE1vbmFjbyxBbmRhbGUgTW9ubyxVYnVudHUgTW9ubyxtb25vc3BhY2U7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOnByZTt3b3JkLXNwYWNpbmc6bm9ybWFsO3dvcmQtYnJlYWs6bm9ybWFsO3dvcmQtd3JhcDpub3JtYWw7bGluZS1oZWlnaHQ6MS41Oy1tb3otdGFiLXNpemU6NDstby10YWItc2l6ZTo0O3RhYi1zaXplOjQ7LXdlYmtpdC1oeXBoZW5zOm5vbmU7aHlwaGVuczpub25lfS5yZW1pcnJvci1hMTF5LWRhcmsgcHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MWVtO21hcmdpbjouNWVtIDA7b3ZlcmZsb3c6YXV0bztib3JkZXItcmFkaXVzOi4zZW19LnJlbWlycm9yLWExMXktZGFyayA6aGFzKC5yZW1pcnJvci1sYW5ndWFnZS1zZWxlY3QtcG9zaXRpb25lcil+cHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MmVtIDFlbX0ucmVtaXJyb3ItYTExeS1kYXJrIDpub3QocHJlKT5jb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1hMTF5LWRhcmsgcHJlW2NsYXNzKj1sYW5ndWFnZS1de2JhY2tncm91bmQ6IzJiMmIyYn0ucmVtaXJyb3ItYTExeS1kYXJrIDpub3QocHJlKT5jb2RlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6LjFlbTtib3JkZXItcmFkaXVzOi4zZW07d2hpdGUtc3BhY2U6bm9ybWFsfS5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmNvbW1lbnQsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4ucHJvbG9nLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uY2RhdGF7Y29sb3I6I2Q0ZDBhYn0ucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5wdW5jdHVhdGlvbiwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5wdW5jdHVhdGlvbi5pbXBvcnRhbnR7Y29sb3I6I2ZlZmVmZX0ucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5wcm9wZXJ0eSwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi50YWcsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uY29uc3RhbnQsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uc3ltYm9sLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmRlbGV0ZWR7Y29sb3I6I2ZmYTA3YX0ucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5ib29sZWFuLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLm51bWJlcntjb2xvcjojMDBlMGUwfS5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmF0dHItbmFtZSwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uY2hhciwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5idWlsdGluLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmluc2VydGVke2NvbG9yOiNhYmUzMzh9LnJlbWlycm9yLWExMXktZGFyayAudG9rZW4ub3BlcmF0b3IsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uZW50aXR5LC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLnVybCwucmVtaXJyb3ItYTExeS1kYXJrIC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItYTExeS1kYXJrIC5zdHlsZSAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLnZhcmlhYmxle2NvbG9yOiMwMGUwZTB9LnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uYXRydWxlLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmF0dHItdmFsdWUsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uZnVuY3Rpb257Y29sb3I6Z29sZH0ucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5rZXl3b3Jke2NvbG9yOiMwMGUwZTB9LnJlbWlycm9yLWExMXktZGFyayAudG9rZW4ucmVnZXgsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uaW1wb3J0YW50e2NvbG9yOmdvbGR9LnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5lbnRpdHl7Y3Vyc29yOmhlbHB9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5yZW1pcnJvci1hMTF5LWRhcmsgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3ItYTExeS1kYXJrIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtjb2xvcjp3aW5kb3dUZXh0O2JhY2tncm91bmQ6d2luZG93fS5yZW1pcnJvci1hMTF5LWRhcmsgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV0sLnJlbWlycm9yLWExMXktZGFyayBwcmVbY2xhc3MqPWxhbmd1YWdlLV17YmFja2dyb3VuZDp3aW5kb3d9LnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uaW1wb3J0YW50e2JhY2tncm91bmQ6aGlnaGxpZ2h0O2NvbG9yOndpbmRvdztmb250LXdlaWdodDo0MDB9LnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uYXRydWxlLC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmF0dHItdmFsdWUsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uZnVuY3Rpb24sLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5vcGVyYXRvciwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5zZWxlY3Rvcntmb250LXdlaWdodDo3MDB9LnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uYXR0ci12YWx1ZSwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5jb21tZW50LC5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4uZnVuY3Rpb24sLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5vcGVyYXRvciwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5wcm9wZXJ0eSwucmVtaXJyb3ItYTExeS1kYXJrIC50b2tlbi5zdHJpbmd7Y29sb3I6aGlnaGxpZ2h0fS5yZW1pcnJvci1hMTF5LWRhcmsgLnRva2VuLmF0dHItdmFsdWUsLnJlbWlycm9yLWExMXktZGFyayAudG9rZW4udXJse2ZvbnQtd2VpZ2h0OjQwMH19LnJlbWlycm9yLWF0b20tZGFyayBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1hdG9tLWRhcmsgcHJlW2NsYXNzKj1sYW5ndWFnZS1de2NvbG9yOiNjNWM4YzY7dGV4dC1zaGFkb3c6MCAxcHggcmdiYSgwLDAsMCwuMyk7Zm9udC1mYW1pbHk6SW5jb25zb2xhdGEsTW9uYWNvLENvbnNvbGFzLENvdXJpZXIgTmV3LENvdXJpZXIsbW9ub3NwYWNlO2RpcmVjdGlvbjpsdHI7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOnByZTt3b3JkLXNwYWNpbmc6bm9ybWFsO3dvcmQtYnJlYWs6bm9ybWFsO2xpbmUtaGVpZ2h0OjEuNTstbW96LXRhYi1zaXplOjQ7LW8tdGFiLXNpemU6NDt0YWItc2l6ZTo0Oy13ZWJraXQtaHlwaGVuczpub25lO2h5cGhlbnM6bm9uZX0ucmVtaXJyb3ItYXRvbS1kYXJrIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjFlbTttYXJnaW46LjVlbSAwO292ZXJmbG93OmF1dG87Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1hdG9tLWRhcmsgOmhhcygucmVtaXJyb3ItbGFuZ3VhZ2Utc2VsZWN0LXBvc2l0aW9uZXIpfnByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjJlbSAxZW19LnJlbWlycm9yLWF0b20tZGFyayA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3ItYXRvbS1kYXJrIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtiYWNrZ3JvdW5kOiMxZDFmMjF9LnJlbWlycm9yLWF0b20tZGFyayA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xZW07Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmNvbW1lbnQsLnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4ucHJvbG9nLC5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4uY2RhdGF7Y29sb3I6IzdjN2M3Y30ucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5wdW5jdHVhdGlvbiwucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5wdW5jdHVhdGlvbi5pbXBvcnRhbnR7Y29sb3I6I2M1YzhjNn0ucmVtaXJyb3ItYXRvbS1kYXJrIC5uYW1lc3BhY2V7b3BhY2l0eTouN30ucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5wcm9wZXJ0eSwucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5rZXl3b3JkLC5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLnRhZ3tjb2xvcjojOTZjYmZlfS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmNsYXNzLW5hbWV7Y29sb3I6I2ZmZmZiNjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmJvb2xlYW4sLnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4uY29uc3RhbnR7Y29sb3I6IzljOX0ucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5zeW1ib2wsLnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4uZGVsZXRlZHtjb2xvcjojZjkyNjcyfS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLm51bWJlcntjb2xvcjojZmY3M2ZkfS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmF0dHItbmFtZSwucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4uY2hhciwucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5idWlsdGluLC5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmluc2VydGVke2NvbG9yOiNhOGZmNjB9LnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4udmFyaWFibGV7Y29sb3I6I2M2YzVmZX0ucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5vcGVyYXRvcntjb2xvcjojZWRlZGVkfS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmVudGl0eXtjb2xvcjojZmZmZmI2fS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLnVybHtjb2xvcjojOTZjYmZlfS5yZW1pcnJvci1hdG9tLWRhcmsgLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1hdG9tLWRhcmsgLnN0eWxlIC50b2tlbi5zdHJpbmd7Y29sb3I6Izg3YzM4YX0ucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5hdHJ1bGUsLnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4uYXR0ci12YWx1ZXtjb2xvcjojZjllZTk4fS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmZ1bmN0aW9ue2NvbG9yOiNkYWQwODV9LnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4ucmVnZXh7Y29sb3I6I2U5YzA2Mn0ucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5pbXBvcnRhbnR7Y29sb3I6I2ZkOTcxZn0ucmVtaXJyb3ItYXRvbS1kYXJrIC50b2tlbi5pbXBvcnRhbnQsLnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4uYm9sZHtmb250LXdlaWdodDo3MDB9LnJlbWlycm9yLWF0b20tZGFyayAudG9rZW4uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5yZW1pcnJvci1hdG9tLWRhcmsgLnRva2VuLmVudGl0eXtjdXJzb3I6aGVscH0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtmb250LWZhbWlseTpDb25zb2xhcyxNZW5sbyxNb25hY28sQW5kYWxlIE1vbm8gV1QsQW5kYWxlIE1vbm8sTHVjaWRhIENvbnNvbGUsTHVjaWRhIFNhbnMgVHlwZXdyaXRlcixEZWphVnUgU2FucyBNb25vLEJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubyxMaWJlcmF0aW9uIE1vbm8sTmltYnVzIE1vbm8gTCxDb3VyaWVyIE5ldyxDb3VyaWVyLG1vbm9zcGFjZTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjM3NTtkaXJlY3Rpb246bHRyO3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpwcmU7d29yZC1zcGFjaW5nOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDstbW96LXRhYi1zaXplOjQ7LW8tdGFiLXNpemU6NDt0YWItc2l6ZTo0Oy13ZWJraXQtaHlwaGVuczpub25lO2h5cGhlbnM6bm9uZTtiYWNrZ3JvdW5kOiNmNWY3ZmY7Y29sb3I6IzVlNjY4N30ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCBwcmVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbnt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQ6I2RmZTJmMX0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCBwcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb24sLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6c2VsZWN0aW9uLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiNkZmUyZjF9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgcHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MWVtO21hcmdpbjouNWVtIDA7b3ZlcmZsb3c6YXV0b30ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCA6aGFzKC5yZW1pcnJvci1sYW5ndWFnZS1zZWxlY3QtcG9zaXRpb25lcil+cHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MmVtIDFlbX0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xZW07Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5jb21tZW50LC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5wcm9sb2csLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmNkYXRhe2NvbG9yOiM4OThlYTR9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLnB1bmN0dWF0aW9uLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5wdW5jdHVhdGlvbi5pbXBvcnRhbnR7Y29sb3I6IzVlNjY4N30ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4ubmFtZXNwYWNle29wYWNpdHk6Ljd9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLm9wZXJhdG9yLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5ib29sZWFuLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5udW1iZXJ7Y29sb3I6I2M3NmIyOX0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4ucHJvcGVydHl7Y29sb3I6I2MwOGIzMH0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4udGFne2NvbG9yOiMzZDhmZDF9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLnN0cmluZ3tjb2xvcjojMjJhMmM5fS5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5zZWxlY3Rvcntjb2xvcjojNjY3OWNjfS5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5hdHRyLW5hbWV7Y29sb3I6I2M3NmIyOX0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4uZW50aXR5LC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi51cmwsLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC5zdHlsZSAudG9rZW4uc3RyaW5ne2NvbG9yOiMyMmEyYzl9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmF0dHItdmFsdWUsLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmtleXdvcmQsLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmNvbnRyb2wsLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmRpcmVjdGl2ZSwucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4udW5pdHtjb2xvcjojYWM5NzM5fS5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5zdGF0ZW1lbnQsLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLnJlZ2V4LC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5hdHJ1bGV7Y29sb3I6IzIyYTJjOX0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4ucGxhY2Vob2xkZXIsLnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLnZhcmlhYmxle2NvbG9yOiMzZDhmZDF9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmRlbGV0ZWR7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4uaW5zZXJ0ZWR7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICMyMDI3NDY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci1iYXNlMTYtYXRlbGllcnN1bHBodXJwb29sLWxpZ2h0IC50b2tlbi5ib2xke2ZvbnQtd2VpZ2h0OjcwMH0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAudG9rZW4uaW1wb3J0YW50e2NvbG9yOiNjOTQ5MjJ9LnJlbWlycm9yLWJhc2UxNi1hdGVsaWVyc3VscGh1cnBvb2wtbGlnaHQgLnRva2VuLmVudGl0eXtjdXJzb3I6aGVscH0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCBwcmU+Y29kZS5oaWdobGlnaHR7b3V0bGluZTouNGVtIHNvbGlkICNjOTQ5MjI7b3V0bGluZS1vZmZzZXQ6LjRlbX0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAubGluZS1udW1iZXJzIC5saW5lLW51bWJlcnMtcm93c3tib3JkZXItcmlnaHQtY29sb3I6I2RmZTJmMX0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAubGluZS1udW1iZXJzLXJvd3M+c3BhbjpiZWZvcmV7Y29sb3I6Izk3OWRiNH0ucmVtaXJyb3ItYmFzZTE2LWF0ZWxpZXJzdWxwaHVycG9vbC1saWdodCAubGluZS1oaWdobGlnaHR7YmFja2dyb3VuZDojNmI3Mzk0MzM7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzZiNzM5NDMzIDcwJSwjNmI3Mzk0MDApfS5yZW1pcnJvci1jYiBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1jYiBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDFweCAxcHggIzAwMDtmb250LWZhbWlseTpNZW5sbyxNb25hY28sQ291cmllciBOZXcsbW9ub3NwYWNlO2RpcmVjdGlvbjpsdHI7dGV4dC1hbGlnbjpsZWZ0O3dvcmQtc3BhY2luZzpub3JtYWw7d2hpdGUtc3BhY2U6cHJlO3dvcmQtd3JhcDpub3JtYWw7bGluZS1oZWlnaHQ6MS40O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MDstbW96LXRhYi1zaXplOjQ7LW8tdGFiLXNpemU6NDt0YWItc2l6ZTo0Oy13ZWJraXQtaHlwaGVuczpub25lO2h5cGhlbnM6bm9uZX0ucmVtaXJyb3ItY2IgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGV7ZmxvYXQ6bGVmdDtwYWRkaW5nOjAgMTVweCAwIDB9LnJlbWlycm9yLWNiIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3ItY2IgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV17YmFja2dyb3VuZDojMjIyfS5yZW1pcnJvci1jYiBwcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoxNXB4O21hcmdpbjoxZW0gMDtvdmVyZmxvdzphdXRvO2JvcmRlci1yYWRpdXM6OHB4fS5yZW1pcnJvci1jYiA6aGFzKC5yZW1pcnJvci1sYW5ndWFnZS1zZWxlY3QtcG9zaXRpb25lcil+cHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MmVtIDFlbX0ucmVtaXJyb3ItY2IgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzo1cHggMTBweDtsaW5lLWhlaWdodDoxO2JvcmRlci1yYWRpdXM6M3B4fS5yZW1pcnJvci1jYiAudG9rZW4uY29tbWVudCwucmVtaXJyb3ItY2IgLnRva2VuLnByb2xvZywucmVtaXJyb3ItY2IgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWNiIC50b2tlbi5jZGF0YXtjb2xvcjojNzk3OTc5fS5yZW1pcnJvci1jYiAudG9rZW4uc2VsZWN0b3IsLnJlbWlycm9yLWNiIC50b2tlbi5vcGVyYXRvciwucmVtaXJyb3ItY2IgLnRva2VuLnB1bmN0dWF0aW9uLC5yZW1pcnJvci1jYiAudG9rZW4ucHVuY3R1YXRpb24uaW1wb3J0YW50e2NvbG9yOiNmZmZ9LnJlbWlycm9yLWNiIC50b2tlbi5uYW1lc3BhY2V7b3BhY2l0eTouN30ucmVtaXJyb3ItY2IgLnRva2VuLnRhZywucmVtaXJyb3ItY2IgLnRva2VuLmJvb2xlYW57Y29sb3I6I2ZmZDg5M30ucmVtaXJyb3ItY2IgLnRva2VuLmF0cnVsZSwucmVtaXJyb3ItY2IgLnRva2VuLmF0dHItdmFsdWUsLnJlbWlycm9yLWNiIC50b2tlbi5oZXgsLnJlbWlycm9yLWNiIC50b2tlbi5zdHJpbmd7Y29sb3I6I2IwYzk3NX0ucmVtaXJyb3ItY2IgLnRva2VuLnByb3BlcnR5LC5yZW1pcnJvci1jYiAudG9rZW4uZW50aXR5LC5yZW1pcnJvci1jYiAudG9rZW4udXJsLC5yZW1pcnJvci1jYiAudG9rZW4uYXR0ci1uYW1lLC5yZW1pcnJvci1jYiAudG9rZW4ua2V5d29yZHtjb2xvcjojYzI3NjI4fS5yZW1pcnJvci1jYiAudG9rZW4ucmVnZXh7Y29sb3I6IzliNzFjNn0ucmVtaXJyb3ItY2IgLnRva2VuLmVudGl0eXtjdXJzb3I6aGVscH0ucmVtaXJyb3ItY2IgLnRva2VuLmZ1bmN0aW9uLC5yZW1pcnJvci1jYiAudG9rZW4uY29uc3RhbnR7Y29sb3I6I2U1YTYzOH0ucmVtaXJyb3ItY2IgLnRva2VuLnZhcmlhYmxle2NvbG9yOiNmZGZiYTh9LnJlbWlycm9yLWNiIC50b2tlbi5udW1iZXJ7Y29sb3I6Izg3OTliMH0ucmVtaXJyb3ItY2IgLnRva2VuLmltcG9ydGFudCwucmVtaXJyb3ItY2IgLnRva2VuLmRlbGltaW5hdG9ye2NvbG9yOiNlNDU3MzR9LnJlbWlycm9yLWNiIHByZVtkYXRhLWxpbmVde3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MWVtIDAgMWVtIDNlbX0ucmVtaXJyb3ItY2IgLmxpbmUtaGlnaGxpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO21hcmdpbi10b3A6MWVtO2JhY2tncm91bmQ6I2ZmZjM7cG9pbnRlci1ldmVudHM6bm9uZTtsaW5lLWhlaWdodDppbmhlcml0O3doaXRlLXNwYWNlOnByZX0ucmVtaXJyb3ItY2IgLmxpbmUtaGlnaGxpZ2h0OmJlZm9yZSwucmVtaXJyb3ItY2IgLmxpbmUtaGlnaGxpZ2h0W2RhdGEtZW5kXTphZnRlcntjb250ZW50OmF0dHIoZGF0YS1zdGFydCk7cG9zaXRpb246YWJzb2x1dGU7dG9wOi4zZW07bGVmdDouNmVtO21pbi13aWR0aDoxZW07cGFkZGluZzowIC41ZW07YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmNGQ7Y29sb3I6I2ZmZjtmb250OjcwMCA2NSUvMS41IHNhbnMtc2VyaWY7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXJhZGl1czo4cHg7dGV4dC1zaGFkb3c6bm9uZX0ucmVtaXJyb3ItY2IgLmxpbmUtaGlnaGxpZ2h0W2RhdGEtZW5kXTphZnRlcntjb250ZW50OmF0dHIoZGF0YS1lbmQpO3RvcDphdXRvO2JvdHRvbTouNGVtfS5yZW1pcnJvci1jYiAubGluZS1udW1iZXJzLXJvd3N7bWFyZ2luOjB9LnJlbWlycm9yLWNiIC5saW5lLW51bWJlcnMtcm93cyBzcGFue3BhZGRpbmctcmlnaHQ6MTBweDtib3JkZXItcmlnaHQ6M3B4ICNkOWQzMzYgc29saWR9LnJlbWlycm9yLWRhcmN1bGEgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3ItZGFyY3VsYSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Y29sb3I6I2E5YjdjNjtmb250LWZhbWlseTpDb25zb2xhcyxNb25hY28sQW5kYWxlIE1vbm8sbW9ub3NwYWNlO2RpcmVjdGlvbjpsdHI7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOnByZTt3b3JkLXNwYWNpbmc6bm9ybWFsO3dvcmQtYnJlYWs6bm9ybWFsO2xpbmUtaGVpZ2h0OjEuNTstbW96LXRhYi1zaXplOjQ7LW8tdGFiLXNpemU6NDt0YWItc2l6ZTo0Oy13ZWJraXQtaHlwaGVuczpub25lO2h5cGhlbnM6bm9uZX0ucmVtaXJyb3ItZGFyY3VsYSBwcmVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kYXJjdWxhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kYXJjdWxhIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kYXJjdWxhIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6IzIxNDI4M2Q5fS5yZW1pcnJvci1kYXJjdWxhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6c2VsZWN0aW9uLC5yZW1pcnJvci1kYXJjdWxhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6OnNlbGVjdGlvbiwucmVtaXJyb3ItZGFyY3VsYSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLWRhcmN1bGEgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6OnNlbGVjdGlvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6IzIxNDI4M2Q5fS5yZW1pcnJvci1kYXJjdWxhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjFlbTttYXJnaW46LjVlbSAwO292ZXJmbG93OmF1dG99LnJlbWlycm9yLWRhcmN1bGEgOmhhcygucmVtaXJyb3ItbGFuZ3VhZ2Utc2VsZWN0LXBvc2l0aW9uZXIpfnByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjJlbSAxZW19LnJlbWlycm9yLWRhcmN1bGEgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV0sLnJlbWlycm9yLWRhcmN1bGEgcHJlW2NsYXNzKj1sYW5ndWFnZS1de2JhY2tncm91bmQ6IzJiMmIyYn0ucmVtaXJyb3ItZGFyY3VsYSA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xZW07Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5jb21tZW50LC5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5wcm9sb2csLnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLmNkYXRhe2NvbG9yOmdyYXl9LnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLmRlbGltaXRlciwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uYm9vbGVhbiwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uc2VsZWN0b3IsLnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLmltcG9ydGFudCwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uYXRydWxle2NvbG9yOiNjYzc4MzJ9LnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLm9wZXJhdG9yLC5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5wdW5jdHVhdGlvbiwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uYXR0ci1uYW1le2NvbG9yOiNhOWI3YzZ9LnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLnRhZywucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4udGFnIC5wdW5jdHVhdGlvbiwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uZG9jdHlwZSwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uYnVpbHRpbntjb2xvcjojZThiZjZhfS5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5lbnRpdHksLnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLm51bWJlciwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uc3ltYm9se2NvbG9yOiM2ODk3YmJ9LnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLnByb3BlcnR5LC5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5jb25zdGFudCwucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4udmFyaWFibGV7Y29sb3I6Izk4NzZhYX0ucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5jaGFye2NvbG9yOiM2YTg3NTl9LnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLmF0dHItdmFsdWUsLnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLmF0dHItdmFsdWUgLnB1bmN0dWF0aW9ue2NvbG9yOiNhNWMyNjF9LnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLmF0dHItdmFsdWUgLnB1bmN0dWF0aW9uOmZpcnN0LW9mLXR5cGV7Y29sb3I6I2E5YjdjNn0ucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4udXJse2NvbG9yOiMyODdiZGU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uZnVuY3Rpb257Y29sb3I6I2ZmYzY2ZH0ucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4ucmVnZXh7YmFja2dyb3VuZDojMzY0MTM1fS5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5ib2xke2ZvbnQtd2VpZ2h0OjcwMH0ucmVtaXJyb3ItZGFyY3VsYSAudG9rZW4uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5pbnNlcnRlZHtiYWNrZ3JvdW5kOiMyOTQ0MzZ9LnJlbWlycm9yLWRhcmN1bGEgLnRva2VuLmRlbGV0ZWR7YmFja2dyb3VuZDojNDg0YTRhfS5yZW1pcnJvci1kYXJjdWxhIGNvZGUubGFuZ3VhZ2UtY3NzIC50b2tlbi5wcm9wZXJ0eSwucmVtaXJyb3ItZGFyY3VsYSBjb2RlLmxhbmd1YWdlLWNzcyAudG9rZW4ucHJvcGVydHkrLnRva2VuLnB1bmN0dWF0aW9uLC5yZW1pcnJvci1kYXJjdWxhIC50b2tlbi5wdW5jdHVhdGlvbi5pbXBvcnRhbnR7Y29sb3I6I2E5YjdjNn0ucmVtaXJyb3ItZGFyY3VsYSBjb2RlLmxhbmd1YWdlLWNzcyAudG9rZW4uaWR7Y29sb3I6I2ZmYzY2ZH0ucmVtaXJyb3ItZGFyY3VsYSBjb2RlLmxhbmd1YWdlLWNzcyAudG9rZW4uc2VsZWN0b3I+LnRva2VuLmNsYXNzLC5yZW1pcnJvci1kYXJjdWxhIGNvZGUubGFuZ3VhZ2UtY3NzIC50b2tlbi5zZWxlY3Rvcj4udG9rZW4uYXR0cmlidXRlLC5yZW1pcnJvci1kYXJjdWxhIGNvZGUubGFuZ3VhZ2UtY3NzIC50b2tlbi5zZWxlY3Rvcj4udG9rZW4ucHNldWRvLWNsYXNzLC5yZW1pcnJvci1kYXJjdWxhIGNvZGUubGFuZ3VhZ2UtY3NzIC50b2tlbi5zZWxlY3Rvcj4udG9rZW4ucHNldWRvLWVsZW1lbnR7Y29sb3I6I2ZmYzY2ZH0ucmVtaXJyb3ItZHJhY3VsYSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1kcmFjdWxhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtjb2xvcjojZjhmOGYyO2JhY2tncm91bmQ6bm9uZTt0ZXh0LXNoYWRvdzowIDFweCByZ2JhKDAsMCwwLC4zKTtmb250LWZhbWlseTpDb25zb2xhcyxNb25hY28sQW5kYWxlIE1vbm8sVWJ1bnR1IE1vbm8sbW9ub3NwYWNlO3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpwcmU7d29yZC1zcGFjaW5nOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDt3b3JkLXdyYXA6bm9ybWFsO2xpbmUtaGVpZ2h0OjEuNTstbW96LXRhYi1zaXplOjQ7LW8tdGFiLXNpemU6NDt0YWItc2l6ZTo0Oy13ZWJraXQtaHlwaGVuczpub25lO2h5cGhlbnM6bm9uZX0ucmVtaXJyb3ItZHJhY3VsYSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoxZW07bWFyZ2luOi41ZW0gMDtvdmVyZmxvdzphdXRvO2JvcmRlci1yYWRpdXM6LjNlbX0ucmVtaXJyb3ItZHJhY3VsYSA6aGFzKC5yZW1pcnJvci1sYW5ndWFnZS1zZWxlY3QtcG9zaXRpb25lcil+cHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MmVtIDFlbX0ucmVtaXJyb3ItZHJhY3VsYSA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3ItZHJhY3VsYSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17YmFja2dyb3VuZDojMjgyYTM2fS5yZW1pcnJvci1kcmFjdWxhIDpub3QocHJlKT5jb2RlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6LjFlbTtib3JkZXItcmFkaXVzOi4zZW07d2hpdGUtc3BhY2U6bm9ybWFsfS5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5jb21tZW50LC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5wcm9sb2csLnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLmNkYXRhe2NvbG9yOiM2MjcyYTR9LnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLnB1bmN0dWF0aW9uLC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5wdW5jdHVhdGlvbi5pbXBvcnRhbnR7Y29sb3I6I2Y4ZjhmMn0ucmVtaXJyb3ItZHJhY3VsYSAubmFtZXNwYWNle29wYWNpdHk6Ljd9LnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLnByb3BlcnR5LC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi50YWcsLnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLmNvbnN0YW50LC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5zeW1ib2wsLnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLmRlbGV0ZWR7Y29sb3I6I2ZmNzljNn0ucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uYm9vbGVhbiwucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4ubnVtYmVye2NvbG9yOiNiZDkzZjl9LnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5hdHRyLW5hbWUsLnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uY2hhciwucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uYnVpbHRpbiwucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uaW5zZXJ0ZWR7Y29sb3I6IzUwZmE3Yn0ucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4ub3BlcmF0b3IsLnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLmVudGl0eSwucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4udXJsLC5yZW1pcnJvci1kcmFjdWxhIC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHJhY3VsYSAuc3R5bGUgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4udmFyaWFibGV7Y29sb3I6I2Y4ZjhmMn0ucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uYXRydWxlLC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5hdHRyLXZhbHVlLC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5mdW5jdGlvbiwucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uY2xhc3MtbmFtZXtjb2xvcjojZjFmYThjfS5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5rZXl3b3Jke2NvbG9yOiM4YmU5ZmR9LnJlbWlycm9yLWRyYWN1bGEgLnRva2VuLnJlZ2V4LC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5pbXBvcnRhbnR7Y29sb3I6I2ZmYjg2Y30ucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5ib2xke2ZvbnQtd2VpZ2h0OjcwMH0ucmVtaXJyb3ItZHJhY3VsYSAudG9rZW4uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5yZW1pcnJvci1kcmFjdWxhIC50b2tlbi5lbnRpdHl7Y3Vyc29yOmhlbHB9LnJlbWlycm9yLWR1b3RvbmUtZGFyayBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1kdW90b25lLWRhcmsgcHJlW2NsYXNzKj1sYW5ndWFnZS1de2ZvbnQtZmFtaWx5OkNvbnNvbGFzLE1lbmxvLE1vbmFjbyxBbmRhbGUgTW9ubyBXVCxBbmRhbGUgTW9ubyxMdWNpZGEgQ29uc29sZSxMdWNpZGEgU2FucyBUeXBld3JpdGVyLERlamFWdSBTYW5zIE1vbm8sQml0c3RyZWFtIFZlcmEgU2FucyBNb25vLExpYmVyYXRpb24gTW9ubyxOaW1idXMgTW9ubyBMLENvdXJpZXIgTmV3LENvdXJpZXIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuMzc1O2RpcmVjdGlvbjpsdHI7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOnByZTt3b3JkLXNwYWNpbmc6bm9ybWFsO3dvcmQtYnJlYWs6bm9ybWFsOy1tb3otdGFiLXNpemU6NDstby10YWItc2l6ZTo0O3RhYi1zaXplOjQ7LXdlYmtpdC1oeXBoZW5zOm5vbmU7aHlwaGVuczpub25lO2JhY2tncm91bmQ6IzJhMjczNDtjb2xvcjojOWE4NmZkfS5yZW1pcnJvci1kdW90b25lLWRhcmsgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWRhcmsgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtZGFyayBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6LW1vei1zZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiM2YTUxZTZ9LnJlbWlycm9yLWR1b3RvbmUtZGFyayBwcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiM2YTUxZTZ9LnJlbWlycm9yLWR1b3RvbmUtZGFyayBwcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoxZW07bWFyZ2luOi41ZW0gMDtvdmVyZmxvdzphdXRvfS5yZW1pcnJvci1kdW90b25lLWRhcmsgOmhhcygucmVtaXJyb3ItbGFuZ3VhZ2Utc2VsZWN0LXBvc2l0aW9uZXIpfnByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjJlbSAxZW19LnJlbWlycm9yLWR1b3RvbmUtZGFyayA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xZW07Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLmNvbW1lbnQsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4ucHJvbG9nLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uY2RhdGEsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4ucHVuY3R1YXRpb24sLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4ucHVuY3R1YXRpb24uaW1wb3J0YW50e2NvbG9yOiM2YzY3ODN9LnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4ubmFtZXNwYWNle29wYWNpdHk6Ljd9LnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4udGFnLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLm9wZXJhdG9yLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLm51bWJlcntjb2xvcjojZTA5MTQyfS5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLnByb3BlcnR5LC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLmZ1bmN0aW9ue2NvbG9yOiM5YTg2ZmR9LnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4udGFnLWlkLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLmF0cnVsZS1pZHtjb2xvcjojZWVlYmZmfS5yZW1pcnJvci1kdW90b25lLWRhcmsgY29kZS5sYW5ndWFnZS1qYXZhc2NyaXB0LC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLmF0dHItbmFtZXtjb2xvcjojYzRiOWZlfS5yZW1pcnJvci1kdW90b25lLWRhcmsgY29kZS5sYW5ndWFnZS1jc3MsLnJlbWlycm9yLWR1b3RvbmUtZGFyayBjb2RlLmxhbmd1YWdlLXNjc3MsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uYm9vbGVhbiwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uZW50aXR5LC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLnVybCwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC5sYW5ndWFnZS1zY3NzIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAuc3R5bGUgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC50b2tlbi5hdHRyLXZhbHVlLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLmtleXdvcmQsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uY29udHJvbCwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC50b2tlbi5kaXJlY3RpdmUsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4udW5pdCwucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC50b2tlbi5zdGF0ZW1lbnQsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4ucmVnZXgsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uYXRydWxlLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLnBsYWNlaG9sZGVyLC5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLnZhcmlhYmxle2NvbG9yOiNmYzl9LnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uZGVsZXRlZHt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLmluc2VydGVke2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjZWVlYmZmO3RleHQtZGVjb3JhdGlvbjpub25lfS5yZW1pcnJvci1kdW90b25lLWRhcmsgLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC50b2tlbi5pbXBvcnRhbnQsLnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uYm9sZHtmb250LXdlaWdodDo3MDB9LnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uaW1wb3J0YW50e2NvbG9yOiNjNGI5ZmV9LnJlbWlycm9yLWR1b3RvbmUtZGFyayAudG9rZW4uZW50aXR5e2N1cnNvcjpoZWxwfS5yZW1pcnJvci1kdW90b25lLWRhcmsgcHJlPmNvZGUuaGlnaGxpZ2h0e291dGxpbmU6LjRlbSBzb2xpZCAjOGE3NWY1O291dGxpbmUtb2Zmc2V0Oi40ZW19LnJlbWlycm9yLWR1b3RvbmUtZGFyayAubGluZS1udW1iZXJzIC5saW5lLW51bWJlcnMtcm93c3tib3JkZXItcmlnaHQtY29sb3I6IzJjMjkzN30ucmVtaXJyb3ItZHVvdG9uZS1kYXJrIC5saW5lLW51bWJlcnMtcm93cz5zcGFuOmJlZm9yZXtjb2xvcjojM2MzOTQ5fS5yZW1pcnJvci1kdW90b25lLWRhcmsgLmxpbmUtaGlnaGxpZ2h0e2JhY2tncm91bmQ6I2UwOTE0MjMzO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCNlMDkxNDIzMyA3MCUsI2UwOTE0MjAwKX0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtmb250LWZhbWlseTpDb25zb2xhcyxNZW5sbyxNb25hY28sQW5kYWxlIE1vbm8gV1QsQW5kYWxlIE1vbm8sTHVjaWRhIENvbnNvbGUsTHVjaWRhIFNhbnMgVHlwZXdyaXRlcixEZWphVnUgU2FucyBNb25vLEJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubyxMaWJlcmF0aW9uIE1vbm8sTmltYnVzIE1vbm8gTCxDb3VyaWVyIE5ldyxDb3VyaWVyLG1vbm9zcGFjZTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjM3NTtkaXJlY3Rpb246bHRyO3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpwcmU7d29yZC1zcGFjaW5nOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDstbW96LXRhYi1zaXplOjQ7LW8tdGFiLXNpemU6NDt0YWItc2l6ZTo0Oy13ZWJraXQtaHlwaGVuczpub25lO2h5cGhlbnM6bm9uZTtiYWNrZ3JvdW5kOiMzMjJkMjk7Y29sb3I6Izg4Nzg2ZH0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCBwcmVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV06Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbnt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQ6IzZmNTg0OX0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCBwcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtZWFydGggY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6c2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiM2ZjU4NDl9LnJlbWlycm9yLWR1b3RvbmUtZWFydGggcHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MWVtO21hcmdpbjouNWVtIDA7b3ZlcmZsb3c6YXV0b30ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCA6aGFzKC5yZW1pcnJvci1sYW5ndWFnZS1zZWxlY3QtcG9zaXRpb25lcil+cHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MmVtIDFlbX0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xZW07Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5jb21tZW50LC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5wcm9sb2csLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmNkYXRhLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5wdW5jdHVhdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4ucHVuY3R1YXRpb24uaW1wb3J0YW50e2NvbG9yOiM2YTVmNTh9LnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLm5hbWVzcGFjZXtvcGFjaXR5Oi43fS5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi50YWcsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLm9wZXJhdG9yLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5udW1iZXJ7Y29sb3I6I2JmYTA1YX0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4ucHJvcGVydHksLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmZ1bmN0aW9ue2NvbG9yOiM4ODc4NmR9LnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLnRhZy1pZCwucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4uc2VsZWN0b3IsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmF0cnVsZS1pZHtjb2xvcjojZmZmM2VifS5yZW1pcnJvci1kdW90b25lLWVhcnRoIGNvZGUubGFuZ3VhZ2UtamF2YXNjcmlwdCwucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4uYXR0ci1uYW1le2NvbG9yOiNhNDg3NzR9LnJlbWlycm9yLWR1b3RvbmUtZWFydGggY29kZS5sYW5ndWFnZS1jc3MsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggY29kZS5sYW5ndWFnZS1zY3NzLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5ib29sZWFuLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmVudGl0eSwucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4udXJsLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAubGFuZ3VhZ2Utc2NzcyAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC5zdHlsZSAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5hdHRyLXZhbHVlLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5rZXl3b3JkLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5jb250cm9sLC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5kaXJlY3RpdmUsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLnVuaXQsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLnN0YXRlbWVudCwucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4ucmVnZXgsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmF0cnVsZSwucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4ucGxhY2Vob2xkZXIsLnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLnZhcmlhYmxle2NvbG9yOiNmY2M0NDB9LnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmRlbGV0ZWR7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4uaW5zZXJ0ZWR7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNmZmYzZWI7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci1kdW90b25lLWVhcnRoIC50b2tlbi5ib2xke2ZvbnQtd2VpZ2h0OjcwMH0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAudG9rZW4uaW1wb3J0YW50e2NvbG9yOiNhNDg3NzR9LnJlbWlycm9yLWR1b3RvbmUtZWFydGggLnRva2VuLmVudGl0eXtjdXJzb3I6aGVscH0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCBwcmU+Y29kZS5oaWdobGlnaHR7b3V0bGluZTouNGVtIHNvbGlkICM4MTZkNWY7b3V0bGluZS1vZmZzZXQ6LjRlbX0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAubGluZS1udW1iZXJzIC5saW5lLW51bWJlcnMtcm93c3tib3JkZXItcmlnaHQtY29sb3I6IzM1MzAyYn0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAubGluZS1udW1iZXJzLXJvd3M+c3BhbjpiZWZvcmV7Y29sb3I6IzQ2NDAzZH0ucmVtaXJyb3ItZHVvdG9uZS1lYXJ0aCAubGluZS1oaWdobGlnaHR7YmFja2dyb3VuZDojYmZhMDVhMzM7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsI2JmYTA1YTMzIDcwJSwjYmZhMDVhMDApfS5yZW1pcnJvci1kdW90b25lLWZvcmVzdCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Zm9udC1mYW1pbHk6Q29uc29sYXMsTWVubG8sTW9uYWNvLEFuZGFsZSBNb25vIFdULEFuZGFsZSBNb25vLEx1Y2lkYSBDb25zb2xlLEx1Y2lkYSBTYW5zIFR5cGV3cml0ZXIsRGVqYVZ1IFNhbnMgTW9ubyxCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8sTGliZXJhdGlvbiBNb25vLE5pbWJ1cyBNb25vIEwsQ291cmllciBOZXcsQ291cmllcixtb25vc3BhY2U7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS4zNzU7ZGlyZWN0aW9uOmx0cjt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6cHJlO3dvcmQtc3BhY2luZzpub3JtYWw7d29yZC1icmVhazpub3JtYWw7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmU7YmFja2dyb3VuZDojMmEyZDJhO2NvbG9yOiM2ODdkNjh9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9ue3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZDojNDM1NjQzfS5yZW1pcnJvci1kdW90b25lLWZvcmVzdCBwcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiM0MzU2NDN9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjFlbTttYXJnaW46LjVlbSAwO292ZXJmbG93OmF1dG99LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IDpoYXMoLnJlbWlycm9yLWxhbmd1YWdlLXNlbGVjdC1wb3NpdGlvbmVyKX5wcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoyZW0gMWVtfS5yZW1pcnJvci1kdW90b25lLWZvcmVzdCA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xZW07Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAudG9rZW4uY29tbWVudCwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLnByb2xvZywucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5jZGF0YSwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLnB1bmN0dWF0aW9uLC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAudG9rZW4ucHVuY3R1YXRpb24uaW1wb3J0YW50e2NvbG9yOiM1MzVmNTN9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5uYW1lc3BhY2V7b3BhY2l0eTouN30ucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLnRhZywucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLm9wZXJhdG9yLC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAudG9rZW4ubnVtYmVye2NvbG9yOiNhMmIzNGR9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5wcm9wZXJ0eSwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLmZ1bmN0aW9ue2NvbG9yOiM2ODdkNjh9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi50YWctaWQsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5zZWxlY3RvciwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLmF0cnVsZS1pZHtjb2xvcjojZjBmZmYwfS5yZW1pcnJvci1kdW90b25lLWZvcmVzdCBjb2RlLmxhbmd1YWdlLWphdmFzY3JpcHQsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5hdHRyLW5hbWV7Y29sb3I6I2IzZDZiM30ucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgY29kZS5sYW5ndWFnZS1jc3MsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IGNvZGUubGFuZ3VhZ2Utc2NzcywucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLmJvb2xlYW4sLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5lbnRpdHksLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi51cmwsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLmxhbmd1YWdlLXNjc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnN0eWxlIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5hdHRyLXZhbHVlLC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLmNvbnRyb2wsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5kaXJlY3RpdmUsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi51bml0LC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAudG9rZW4uc3RhdGVtZW50LC5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAudG9rZW4ucmVnZXgsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5hdHJ1bGUsLnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5wbGFjZWhvbGRlciwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLnZhcmlhYmxle2NvbG9yOiNlNWZiNzl9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5kZWxldGVke3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5pbnNlcnRlZHtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgI2YwZmZmMDt0ZXh0LWRlY29yYXRpb246bm9uZX0ucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLmltcG9ydGFudCwucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLnRva2VuLmJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAudG9rZW4uaW1wb3J0YW50e2NvbG9yOiNiM2Q2YjN9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC50b2tlbi5lbnRpdHl7Y3Vyc29yOmhlbHB9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IHByZT5jb2RlLmhpZ2hsaWdodHtvdXRsaW5lOi40ZW0gc29saWQgIzVjNzA1YztvdXRsaW5lLW9mZnNldDouNGVtfS5yZW1pcnJvci1kdW90b25lLWZvcmVzdCAubGluZS1udW1iZXJzIC5saW5lLW51bWJlcnMtcm93c3tib3JkZXItcmlnaHQtY29sb3I6IzJjMzAyY30ucmVtaXJyb3ItZHVvdG9uZS1mb3Jlc3QgLmxpbmUtbnVtYmVycy1yb3dzPnNwYW46YmVmb3Jle2NvbG9yOiMzYjQyM2J9LnJlbWlycm9yLWR1b3RvbmUtZm9yZXN0IC5saW5lLWhpZ2hsaWdodHtiYWNrZ3JvdW5kOiNhMmIzNGQzMztiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwjYTJiMzRkMzMgNzAlLCNhMmIzNGQwMCl9LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3ItZHVvdG9uZS1saWdodCBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Zm9udC1mYW1pbHk6Q29uc29sYXMsTWVubG8sTW9uYWNvLEFuZGFsZSBNb25vIFdULEFuZGFsZSBNb25vLEx1Y2lkYSBDb25zb2xlLEx1Y2lkYSBTYW5zIFR5cGV3cml0ZXIsRGVqYVZ1IFNhbnMgTW9ubyxCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8sTGliZXJhdGlvbiBNb25vLE5pbWJ1cyBNb25vIEwsQ291cmllciBOZXcsQ291cmllcixtb25vc3BhY2U7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS4zNzU7ZGlyZWN0aW9uOmx0cjt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6cHJlO3dvcmQtc3BhY2luZzpub3JtYWw7d29yZC1icmVhazpub3JtYWw7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmU7YmFja2dyb3VuZDojZmFmOGY1O2NvbG9yOiM3MjhmY2J9LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1saWdodCBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1saWdodCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1saWdodCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6LW1vei1zZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiNmYWY4ZjV9LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1saWdodCBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9ue3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZDojZmFmOGY1fS5yZW1pcnJvci1kdW90b25lLWxpZ2h0IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjFlbTttYXJnaW46LjVlbSAwO292ZXJmbG93OmF1dG99LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgOmhhcygucmVtaXJyb3ItbGFuZ3VhZ2Utc2VsZWN0LXBvc2l0aW9uZXIpfnByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjJlbSAxZW19LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzouMWVtO2JvcmRlci1yYWRpdXM6LjNlbX0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uY29tbWVudCwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4ucHJvbG9nLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5kb2N0eXBlLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5jZGF0YSwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4ucHVuY3R1YXRpb24sLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLnB1bmN0dWF0aW9uLmltcG9ydGFudHtjb2xvcjojYjZhZDlhfS5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5uYW1lc3BhY2V7b3BhY2l0eTouN30ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4udGFnLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5vcGVyYXRvciwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4ubnVtYmVye2NvbG9yOiMwNjMyODl9LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLnByb3BlcnR5LC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5mdW5jdGlvbntjb2xvcjojYjI5NzYyfS5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi50YWctaWQsLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5hdHJ1bGUtaWR7Y29sb3I6IzJkMjAwNn0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCBjb2RlLmxhbmd1YWdlLWphdmFzY3JpcHQsLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLmF0dHItbmFtZXtjb2xvcjojODk2NzI0fS5yZW1pcnJvci1kdW90b25lLWxpZ2h0IGNvZGUubGFuZ3VhZ2UtY3NzLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IGNvZGUubGFuZ3VhZ2Utc2NzcywucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uYm9vbGVhbiwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5lbnRpdHksLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLnVybCwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAubGFuZ3VhZ2UtY3NzIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLmxhbmd1YWdlLXNjc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1saWdodCAuc3R5bGUgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uYXR0ci12YWx1ZSwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uY29udHJvbCwucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uZGlyZWN0aXZlLC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi51bml0LC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5zdGF0ZW1lbnQsLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLnJlZ2V4LC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5hdHJ1bGV7Y29sb3I6IzcyOGZjYn0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4ucGxhY2Vob2xkZXIsLnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLnZhcmlhYmxle2NvbG9yOiM5M2FiZGN9LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLmRlbGV0ZWR7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uaW5zZXJ0ZWR7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICMyZDIwMDY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci1kdW90b25lLWxpZ2h0IC50b2tlbi5ib2xke2ZvbnQtd2VpZ2h0OjcwMH0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAudG9rZW4uaW1wb3J0YW50e2NvbG9yOiM4OTY3MjR9LnJlbWlycm9yLWR1b3RvbmUtbGlnaHQgLnRva2VuLmVudGl0eXtjdXJzb3I6aGVscH0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCBwcmU+Y29kZS5oaWdobGlnaHR7b3V0bGluZTouNGVtIHNvbGlkICM4OTY3MjQ7b3V0bGluZS1vZmZzZXQ6LjRlbX0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAubGluZS1udW1iZXJzIC5saW5lLW51bWJlcnMtcm93c3tib3JkZXItcmlnaHQtY29sb3I6I2VjZThkZX0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAubGluZS1udW1iZXJzLXJvd3M+c3BhbjpiZWZvcmV7Y29sb3I6I2NkYzRiMX0ucmVtaXJyb3ItZHVvdG9uZS1saWdodCAubGluZS1oaWdobGlnaHR7YmFja2dyb3VuZDojMmQyMDA2MzM7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzJkMjAwNjMzIDcwJSwjMmQyMDA2MDApfS5yZW1pcnJvci1kdW90b25lLXNlYSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1kdW90b25lLXNlYSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Zm9udC1mYW1pbHk6Q29uc29sYXMsTWVubG8sTW9uYWNvLEFuZGFsZSBNb25vIFdULEFuZGFsZSBNb25vLEx1Y2lkYSBDb25zb2xlLEx1Y2lkYSBTYW5zIFR5cGV3cml0ZXIsRGVqYVZ1IFNhbnMgTW9ubyxCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8sTGliZXJhdGlvbiBNb25vLE5pbWJ1cyBNb25vIEwsQ291cmllciBOZXcsQ291cmllcixtb25vc3BhY2U7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS4zNzU7ZGlyZWN0aW9uOmx0cjt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6cHJlO3dvcmQtc3BhY2luZzpub3JtYWw7d29yZC1icmVhazpub3JtYWw7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmU7YmFja2dyb3VuZDojMWQyNjJmO2NvbG9yOiM1NzcxOGV9LnJlbWlycm9yLWR1b3RvbmUtc2VhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtc2VhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLXNlYSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1zZWEgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9ue3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZDojMDA0YTllfS5yZW1pcnJvci1kdW90b25lLXNlYSBwcmVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1zZWEgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLXNlYSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtc2VhIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiMwMDRhOWV9LnJlbWlycm9yLWR1b3RvbmUtc2VhIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjFlbTttYXJnaW46LjVlbSAwO292ZXJmbG93OmF1dG99LnJlbWlycm9yLWR1b3RvbmUtc2VhIDpoYXMoLnJlbWlycm9yLWxhbmd1YWdlLXNlbGVjdC1wb3NpdGlvbmVyKX5wcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoyZW0gMWVtfS5yZW1pcnJvci1kdW90b25lLXNlYSA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xZW07Ym9yZGVyLXJhZGl1czouM2VtfS5yZW1pcnJvci1kdW90b25lLXNlYSAudG9rZW4uY29tbWVudCwucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLnByb2xvZywucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5jZGF0YSwucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLnB1bmN0dWF0aW9uLC5yZW1pcnJvci1kdW90b25lLXNlYSAudG9rZW4ucHVuY3R1YXRpb24uaW1wb3J0YW50e2NvbG9yOiM0YTVmNzh9LnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5uYW1lc3BhY2V7b3BhY2l0eTouN30ucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLnRhZywucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLm9wZXJhdG9yLC5yZW1pcnJvci1kdW90b25lLXNlYSAudG9rZW4ubnVtYmVye2NvbG9yOiMwYWEzNzB9LnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5wcm9wZXJ0eSwucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLmZ1bmN0aW9ue2NvbG9yOiM1NzcxOGV9LnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi50YWctaWQsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5zZWxlY3RvciwucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLmF0cnVsZS1pZHtjb2xvcjojZWJmNGZmfS5yZW1pcnJvci1kdW90b25lLXNlYSBjb2RlLmxhbmd1YWdlLWphdmFzY3JpcHQsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5hdHRyLW5hbWV7Y29sb3I6IzdlYjZmNn0ucmVtaXJyb3ItZHVvdG9uZS1zZWEgY29kZS5sYW5ndWFnZS1jc3MsLnJlbWlycm9yLWR1b3RvbmUtc2VhIGNvZGUubGFuZ3VhZ2Utc2NzcywucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLmJvb2xlYW4sLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5lbnRpdHksLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi51cmwsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1zZWEgLmxhbmd1YWdlLXNjc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnN0eWxlIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5hdHRyLXZhbHVlLC5yZW1pcnJvci1kdW90b25lLXNlYSAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLmNvbnRyb2wsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5kaXJlY3RpdmUsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi51bml0LC5yZW1pcnJvci1kdW90b25lLXNlYSAudG9rZW4uc3RhdGVtZW50LC5yZW1pcnJvci1kdW90b25lLXNlYSAudG9rZW4ucmVnZXgsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5hdHJ1bGUsLnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5wbGFjZWhvbGRlciwucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLnZhcmlhYmxle2NvbG9yOiM0N2ViYjR9LnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5kZWxldGVke3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5pbnNlcnRlZHtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgI2ViZjRmZjt0ZXh0LWRlY29yYXRpb246bm9uZX0ucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLmltcG9ydGFudCwucmVtaXJyb3ItZHVvdG9uZS1zZWEgLnRva2VuLmJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5yZW1pcnJvci1kdW90b25lLXNlYSAudG9rZW4uaW1wb3J0YW50e2NvbG9yOiM3ZWI2ZjZ9LnJlbWlycm9yLWR1b3RvbmUtc2VhIC50b2tlbi5lbnRpdHl7Y3Vyc29yOmhlbHB9LnJlbWlycm9yLWR1b3RvbmUtc2VhIHByZT5jb2RlLmhpZ2hsaWdodHtvdXRsaW5lOi40ZW0gc29saWQgIzM0NjU5ZDtvdXRsaW5lLW9mZnNldDouNGVtfS5yZW1pcnJvci1kdW90b25lLXNlYSAubGluZS1udW1iZXJzIC5saW5lLW51bWJlcnMtcm93c3tib3JkZXItcmlnaHQtY29sb3I6IzFmMjkzMn0ucmVtaXJyb3ItZHVvdG9uZS1zZWEgLmxpbmUtbnVtYmVycy1yb3dzPnNwYW46YmVmb3Jle2NvbG9yOiMyYzM4NDd9LnJlbWlycm9yLWR1b3RvbmUtc2VhIC5saW5lLWhpZ2hsaWdodHtiYWNrZ3JvdW5kOiMwYWEzNzAzMztiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwjMGFhMzcwMzMgNzAlLCMwYWEzNzAwMCl9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Zm9udC1mYW1pbHk6Q29uc29sYXMsTWVubG8sTW9uYWNvLEFuZGFsZSBNb25vIFdULEFuZGFsZSBNb25vLEx1Y2lkYSBDb25zb2xlLEx1Y2lkYSBTYW5zIFR5cGV3cml0ZXIsRGVqYVZ1IFNhbnMgTW9ubyxCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8sTGliZXJhdGlvbiBNb25vLE5pbWJ1cyBNb25vIEwsQ291cmllciBOZXcsQ291cmllcixtb25vc3BhY2U7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS4zNzU7ZGlyZWN0aW9uOmx0cjt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6cHJlO3dvcmQtc3BhY2luZzpub3JtYWw7d29yZC1icmVhazpub3JtYWw7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmU7YmFja2dyb3VuZDojMjQyNDJlO2NvbG9yOiM3Njc2OTN9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6LW1vei1zZWxlY3Rpb257dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOiM1MTUxZTZ9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9uLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV06OnNlbGVjdGlvbiwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9ue3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZDojNTE1MWU2fS5yZW1pcnJvci1kdW90b25lLXNwYWNlIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjFlbTttYXJnaW46LjVlbSAwO292ZXJmbG93OmF1dG99LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgOmhhcygucmVtaXJyb3ItbGFuZ3VhZ2Utc2VsZWN0LXBvc2l0aW9uZXIpfnByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjJlbSAxZW19LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzouMWVtO2JvcmRlci1yYWRpdXM6LjNlbX0ucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4uY29tbWVudCwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4ucHJvbG9nLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5kb2N0eXBlLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5jZGF0YSwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4ucHVuY3R1YXRpb24sLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLnB1bmN0dWF0aW9uLmltcG9ydGFudHtjb2xvcjojNWI1Yjc2fS5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5uYW1lc3BhY2V7b3BhY2l0eTouN30ucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4udGFnLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5vcGVyYXRvciwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4ubnVtYmVye2NvbG9yOiNkZDY3MmN9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLnByb3BlcnR5LC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5mdW5jdGlvbntjb2xvcjojNzY3NjkzfS5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi50YWctaWQsLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5hdHJ1bGUtaWR7Y29sb3I6I2ViZWJmZn0ucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSBjb2RlLmxhbmd1YWdlLWphdmFzY3JpcHQsLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLmF0dHItbmFtZXtjb2xvcjojYWFhYWNhfS5yZW1pcnJvci1kdW90b25lLXNwYWNlIGNvZGUubGFuZ3VhZ2UtY3NzLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIGNvZGUubGFuZ3VhZ2Utc2NzcywucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4uYm9vbGVhbiwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5lbnRpdHksLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLnVybCwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAubGFuZ3VhZ2UtY3NzIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLmxhbmd1YWdlLXNjc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAuc3R5bGUgLnRva2VuLnN0cmluZywucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4uYXR0ci12YWx1ZSwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4uY29udHJvbCwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4uZGlyZWN0aXZlLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi51bml0LC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5zdGF0ZW1lbnQsLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLnJlZ2V4LC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5hdHJ1bGUsLnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLnBsYWNlaG9sZGVyLC5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi52YXJpYWJsZXtjb2xvcjojZmU4YzUyfS5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5kZWxldGVke3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLmluc2VydGVke2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjZWJlYmZmO3RleHQtZGVjb3JhdGlvbjpub25lfS5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLmltcG9ydGFudCwucmVtaXJyb3ItZHVvdG9uZS1zcGFjZSAudG9rZW4uYm9sZHtmb250LXdlaWdodDo3MDB9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLnRva2VuLmltcG9ydGFudHtjb2xvcjojYWFhYWNhfS5yZW1pcnJvci1kdW90b25lLXNwYWNlIC50b2tlbi5lbnRpdHl7Y3Vyc29yOmhlbHB9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgcHJlPmNvZGUuaGlnaGxpZ2h0e291dGxpbmU6LjRlbSBzb2xpZCAjNzY3NmY0O291dGxpbmUtb2Zmc2V0Oi40ZW19LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLmxpbmUtbnVtYmVycyAubGluZS1udW1iZXJzLXJvd3N7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMyNjI2MzF9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLmxpbmUtbnVtYmVycy1yb3dzPnNwYW46YmVmb3Jle2NvbG9yOiMzOTM5NDl9LnJlbWlycm9yLWR1b3RvbmUtc3BhY2UgLmxpbmUtaGlnaGxpZ2h0e2JhY2tncm91bmQ6I2RkNjcyYzMzO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCNkZDY3MmMzMyA3MCUsI2RkNjcyYzAwKX0ucmVtaXJyb3ItZ2gtY29sb3JzIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0sLnJlbWlycm9yLWdoLWNvbG9ycyBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Y29sb3I6IzM5M2EzNDtmb250LWZhbWlseTpDb25zb2xhcyxCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8sQ291cmllciBOZXcsQ291cmllcixtb25vc3BhY2U7ZGlyZWN0aW9uOmx0cjt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6cHJlO3dvcmQtc3BhY2luZzpub3JtYWw7d29yZC1icmVhazpub3JtYWw7Zm9udC1zaXplOi45NWVtO2xpbmUtaGVpZ2h0OjEuMmVtOy1tb3otdGFiLXNpemU6NDstby10YWItc2l6ZTo0O3RhYi1zaXplOjQ7LXdlYmtpdC1oeXBoZW5zOm5vbmU7aHlwaGVuczpub25lfS5yZW1pcnJvci1naC1jb2xvcnMgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItZ2gtY29sb3JzIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci1naC1jb2xvcnMgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24sLnJlbWlycm9yLWdoLWNvbG9ycyBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZDojYjNkNGZjfS5yZW1pcnJvci1naC1jb2xvcnMgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLWdoLWNvbG9ycyBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gOjpzZWxlY3Rpb24sLnJlbWlycm9yLWdoLWNvbG9ycyBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLWdoLWNvbG9ycyBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9ue2JhY2tncm91bmQ6I2IzZDRmY30ucmVtaXJyb3ItZ2gtY29sb3JzIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjFlbTttYXJnaW46LjVlbSAwO292ZXJmbG93OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjZGRkZGRkO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ucmVtaXJyb3ItZ2gtY29sb3JzIDpoYXMoLnJlbWlycm9yLWxhbmd1YWdlLXNlbGVjdC1wb3NpdGlvbmVyKX5wcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoyZW0gMWVtfS5yZW1pcnJvci1naC1jb2xvcnMgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoxcHggLjJlbTtiYWNrZ3JvdW5kOiNmOGY4Zjg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkZGRkfS5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLmNvbW1lbnQsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4ucHJvbG9nLC5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4uY2RhdGF7Y29sb3I6Izk5ODtmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5uYW1lc3BhY2V7b3BhY2l0eTouN30ucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4uYXR0ci12YWx1ZXtjb2xvcjojZTMxMTZjfS5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLnB1bmN0dWF0aW9uLC5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLm9wZXJhdG9ye2NvbG9yOiMzOTNhMzR9LnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4uZW50aXR5LC5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLnVybCwucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5zeW1ib2wsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4ubnVtYmVyLC5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLmJvb2xlYW4sLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4udmFyaWFibGUsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4uY29uc3RhbnQsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4ucHJvcGVydHksLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4ucmVnZXgsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4uaW5zZXJ0ZWR7Y29sb3I6IzM2YWNhYX0ucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5hdHJ1bGUsLnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4ua2V5d29yZCwucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5hdHRyLW5hbWUsLnJlbWlycm9yLWdoLWNvbG9ycyAubGFuZ3VhZ2UtYXV0b2hvdGtleSAudG9rZW4uc2VsZWN0b3J7Y29sb3I6IzAwYTRkYn0ucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5mdW5jdGlvbiwucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5kZWxldGVkLC5yZW1pcnJvci1naC1jb2xvcnMgLmxhbmd1YWdlLWF1dG9ob3RrZXkgLnRva2VuLnRhZ3tjb2xvcjojOWEwNTBmfS5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLnRhZywucmVtaXJyb3ItZ2gtY29sb3JzIC50b2tlbi5zZWxlY3RvciwucmVtaXJyb3ItZ2gtY29sb3JzIC5sYW5ndWFnZS1hdXRvaG90a2V5IC50b2tlbi5rZXl3b3Jke2NvbG9yOiMwMDAwOWZ9LnJlbWlycm9yLWdoLWNvbG9ycyAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLmZ1bmN0aW9uLC5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLmJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5yZW1pcnJvci1naC1jb2xvcnMgLnRva2VuLml0YWxpY3tmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItaG9wc2NvdGNoIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0sLnJlbWlycm9yLWhvcHNjb3RjaCBwcmVbY2xhc3MqPWxhbmd1YWdlLV17Y29sb3I6I2ZmZjtmb250LWZhbWlseTpGaXJhIE1vbm8sTWVubG8sTW9uYWNvLEx1Y2lkYSBDb25zb2xlLENvdXJpZXIgTmV3LENvdXJpZXIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuMzc1O2RpcmVjdGlvbjpsdHI7dGV4dC1hbGlnbjpsZWZ0O3dvcmQtc3BhY2luZzpub3JtYWw7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmU7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtd3JhcDpicmVhay13b3JkO2JhY2tncm91bmQ6IzMyMjkzMTtjb2xvcjojYjliNWI4fS5yZW1pcnJvci1ob3BzY290Y2ggcHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MWVtO21hcmdpbjouNWVtIDA7b3ZlcmZsb3c6YXV0b30ucmVtaXJyb3ItaG9wc2NvdGNoIDpoYXMoLnJlbWlycm9yLWxhbmd1YWdlLXNlbGVjdC1wb3NpdGlvbmVyKX5wcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoyZW0gMWVtfS5yZW1pcnJvci1ob3BzY290Y2ggOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzouMWVtO2JvcmRlci1yYWRpdXM6LjNlbX0ucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5jb21tZW50LC5yZW1pcnJvci1ob3BzY290Y2ggLnRva2VuLnByb2xvZywucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5kb2N0eXBlLC5yZW1pcnJvci1ob3BzY290Y2ggLnRva2VuLmNkYXRhe2NvbG9yOiM3OTczNzl9LnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4ucHVuY3R1YXRpb24sLnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4ucHVuY3R1YXRpb24uaW1wb3J0YW50e2NvbG9yOiNiOWI1Yjh9LnJlbWlycm9yLWhvcHNjb3RjaCAubmFtZXNwYWNle29wYWNpdHk6Ljd9LnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4ubnVsbCwucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5vcGVyYXRvciwucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5ib29sZWFuLC5yZW1pcnJvci1ob3BzY290Y2ggLnRva2VuLm51bWJlcntjb2xvcjojZmQ4YjE5fS5yZW1pcnJvci1ob3BzY290Y2ggLnRva2VuLnByb3BlcnR5e2NvbG9yOiNmZGNjNTl9LnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4udGFne2NvbG9yOiMxMjkwYmZ9LnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4uc3RyaW5ne2NvbG9yOiMxNDliOTN9LnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4uc2VsZWN0b3J7Y29sb3I6I2M4NWU3Y30ucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5hdHRyLW5hbWV7Y29sb3I6I2ZkOGIxOX0ucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5lbnRpdHksLnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4udXJsLC5yZW1pcnJvci1ob3BzY290Y2ggLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1ob3BzY290Y2ggLnN0eWxlIC50b2tlbi5zdHJpbmd7Y29sb3I6IzE0OWI5M30ucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5hdHRyLXZhbHVlLC5yZW1pcnJvci1ob3BzY290Y2ggLnRva2VuLmtleXdvcmQsLnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4uY29udHJvbCwucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5kaXJlY3RpdmUsLnJlbWlycm9yLWhvcHNjb3RjaCAudG9rZW4udW5pdHtjb2xvcjojOGZjMTNlfS5yZW1pcnJvci1ob3BzY290Y2ggLnRva2VuLnN0YXRlbWVudCwucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5yZWdleCwucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5hdHJ1bGV7Y29sb3I6IzE0OWI5M30ucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5wbGFjZWhvbGRlciwucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi52YXJpYWJsZXtjb2xvcjojMTI5MGJmfS5yZW1pcnJvci1ob3BzY290Y2ggLnRva2VuLmltcG9ydGFudHtjb2xvcjojZGQ0NjRjO2ZvbnQtd2VpZ2h0OjcwMH0ucmVtaXJyb3ItaG9wc2NvdGNoIC50b2tlbi5lbnRpdHl7Y3Vyc29yOmhlbHB9LnJlbWlycm9yLWhvcHNjb3RjaCBwcmU+Y29kZS5oaWdobGlnaHR7b3V0bGluZTouNGVtIHNvbGlkIHJlZDtvdXRsaW5lLW9mZnNldDouNGVtfS5yZW1pcnJvci1wb2pvYXF1ZSBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1wb2pvYXF1ZSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmU7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtd3JhcDpicmVhay13b3JkO2ZvbnQtZmFtaWx5Ok1lbmxvLE1vbmFjbyxDb3VyaWVyIE5ldyxtb25vc3BhY2U7Zm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOiNkY2NmOGY7dGV4dC1zaGFkb3c6MH0ucmVtaXJyb3ItcG9qb2FxdWUgcHJlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci1wb2pvYXF1ZSA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtib3JkZXItcmFkaXVzOjVweDtib3JkZXI6MXB4IHNvbGlkICMwMDA7Y29sb3I6I2RjY2Y4ZjtiYWNrZ3JvdW5kOiMxODE5MTQgdXJsKGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFnQUFaQUJrQUFELzdBQVJSSFZqYTNrQUFRQUVBQUFBTUFBQS8rNEFEa0ZrYjJKbEFHVEFBQUFBQWYvYkFJUUFDUVlHQmdjR0NRY0hDUTBJQndnTkR3c0pDUXNQRVE0T0R3NE9FUkVORGc0T0RnMFJFUlFVRmhRVUVSb2FIQndhR2lZbUppWW1LeXNyS3lzckt5c3JLd0VKQ0FnSkNna01DZ29NRHd3T0RBOFREZzRPRGhNVkRnNFBEZzRWR2hNUkVSRVJFeG9YR2hZV0Zob1hIUjBhR2gwZEpDUWpKQ1FyS3lzckt5c3JLeXNyLzhBQUVRZ0FqQUNNQXdFaUFBSVJBUU1SQWYvRUFGNEFBUUVCQUFBQUFBQUFBQUFBQUFBQUFBQUJCd0VCQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUlRQUFFREF3SUhBUUVBQUFBQUFBQUFBQUR3QVJFaFlhRXhrVUZSY1lHeHdkSGg4UkVCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9hQUF3REFRQUNFUU1SQUQ4QXlHRkVqSGFCUzJmRERzMnpraEttQktrdGI3a20rWnd3Q25YUGtMVm1DVE1JdGo2QVhGeFJTNDY1L0JUbmtBSnZrTGtKZSs3QUtLb2kyQXRSUzJ6dUFXc0NiNUdPbEJOOGdLZm11R0haOE1GcUl0aDNBTG1Gb0Z3YndLV3lBbFRBcDE3dUtxQnZnQkQ4c000ZlRqaHZBaGt6aGFSa0JNS0JyZnM3akdQSXB6eTdnRnJBcW5DMEMwZ0IwRVd3QkRXMmNCVlF3bStRdFBwYTN3Qk8zc1Z2c3pDbkxBaGt6Z0w1L1JMZjEzY0xRZDgvQUdsdTBDYjVIVHg5S3VBRWllR0pFZGNlaFMzZVJUcDJBVGR0M0NwSW0rUXRad0FoUk9YRmViN3N3cC9haGFNM2tCRS9qU0lVQmMvQVdyZ0JOOHVORkFsK2I3c0FYRnhGbjJZTFVVNU5zN2dGWDhDNGliK2hOOGdGV1h3SzNiWmdseEVKbStnS2RjaUxQc0ZWL1RDbHNnSlV3S0o1RlZBN3R2SUZyZlpoVmZHSkRjc0NLYVlnQXF2NllSYkUrUldPV0J0dTcrQUwzeVJhbFhMeUtxQUlJZmsrekFSYkRnRnlFc25jWXdKdmxnRlJXK0dFV250SWkyUDBCb295RnhjTnI4RXAzK0FOTGJNTytReWh2YmlxZGdDMGtWdmdVVWlMWWdCUzJRdFBiaVZJMS9zZ09tRzl1TytZOERXKzdqUzJ6QU9uajZPMkJuZHd1SUFVdGtkUk44Z0ZvSzN3d1hNUXlad0hWYkNsc3VOTGQ0RTN5QVVSNkZWREJSK0JhZlFHdDkzTFZNeEpUdjhBQnRzNENWTGhjZllXc0NiNWtDOS9CSGRVOENMWUZZNWJNQWQrZVg5TUd0aGhwYkExdnU0QjcrUktrYVcyWXE0QVF0VkJCRnNBSlUvQXVJWEJoTjhnR1duc3RlZmhpWnlXdkxBRW5iWVMxdXpTRlA2SnZuNEJheHg3MEpLa1FvakxpYjVBVlRleTFqamdrS0pHTzBBS1d5T203TjdjU3BnU3BBZFBIMFRmZC9ncDF6NUMxWmdLcU45SjJ3RnhjVVV1QUZMWkFtK1FDMEZiNFlVVlJGc0FPdmo0S1cyZHd0WUUzeUFXay93Uy9QTE1LZm11R0haOE1BWEYvSmEzMllpNWhhQUtXejRZZG0yY1NwZ1U2OTNBdGI3a20rWnd3aCtXR2NQcHh3M2dBa3pDTFkraVlVRFcvWjNBZGMvZ3B6eUZyQXFuQUxrSmUrN0RvSXRnQXRSUzJ6dUtxR0UzeUF4MG9KdmtkdllyZlptQUxVUmJEdUw1L1JMZjEzY0F1RGVCUzJScGJ0QW0rUUZWQTN3UiszZlV0RkhvQkRKbkMwaklYSDBIV3NnTVk4aW5QTHVPa2Q5Y2hwNHoyMEFMUUxTQThjSTlqWUFJYTJ6anpqQmQ4Z1JhZlMxdmdpVWhvL2tBS2NzQ0dUT0dXdm9PcGtBdEIzejhIbTh4MkZmNUFEcDQrbFhBbEl2Y213SC8yUT09KSByZXBlYXQgbGVmdCB0b3B9LnJlbWlycm9yLXBvam9hcXVlIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjEycHg7b3ZlcmZsb3c6YXV0b30ucmVtaXJyb3ItcG9qb2FxdWUgOmhhcygucmVtaXJyb3ItbGFuZ3VhZ2Utc2VsZWN0LXBvc2l0aW9uZXIpfnByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjJlbSAxZW19LnJlbWlycm9yLXBvam9hcXVlIDpub3QocHJlKT5jb2RlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MnB4IDZweH0ucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLm5hbWVzcGFjZXtvcGFjaXR5Oi43fS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uY29tbWVudCwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLnByb2xvZywucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5jZGF0YXtjb2xvcjojNTg2ZTc1O2ZvbnQtc3R5bGU6aXRhbGljfS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4ubnVtYmVyLC5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uY2hhciwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLmJ1aWx0aW4sLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5pbnNlcnRlZHtjb2xvcjojNDY4OTY2fS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uYXR0ci1uYW1le2NvbG9yOiNiODk4NTl9LnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5vcGVyYXRvciwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLmVudGl0eSwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLnVybCwucmVtaXJyb3ItcG9qb2FxdWUgLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLC5yZW1pcnJvci1wb2pvYXF1ZSAuc3R5bGUgLnRva2VuLnN0cmluZ3tjb2xvcjojZGNjZjhmfS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uc2VsZWN0b3IsLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5yZWdleHtjb2xvcjojODU5OTAwfS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uYXRydWxlLC5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4ua2V5d29yZHtjb2xvcjojY2I0YjE2fS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uYXR0ci12YWx1ZXtjb2xvcjojNDY4OTY2fS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uZnVuY3Rpb24sLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi52YXJpYWJsZSwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLnBsYWNlaG9sZGVye2NvbG9yOiNiNTg5MDB9LnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5wcm9wZXJ0eSwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLnRhZywucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLmJvb2xlYW4sLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5udW1iZXIsLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5jb25zdGFudCwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLnN5bWJvbHtjb2xvcjojYjg5ODU5fS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4udGFne2NvbG9yOiNmZmIwM2J9LnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5pbXBvcnRhbnQsLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5zdGF0ZW1lbnQsLnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5kZWxldGVke2NvbG9yOiNkYzMyMmZ9LnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5wdW5jdHVhdGlvbiwucmVtaXJyb3ItcG9qb2FxdWUgLnRva2VuLnB1bmN0dWF0aW9uLmltcG9ydGFudHtjb2xvcjojZGNjZjhmfS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uZW50aXR5e2N1cnNvcjpoZWxwfS5yZW1pcnJvci1wb2pvYXF1ZSAudG9rZW4uYm9sZHtmb250LXdlaWdodDo3MDB9LnJlbWlycm9yLXBvam9hcXVlIC50b2tlbi5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnJlbWlycm9yLXZzIGNvZGVbY2xhc3MqPWxhbmd1YWdlLV0sLnJlbWlycm9yLXZzIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtjb2xvcjojMzkzYTM0O2ZvbnQtZmFtaWx5OkNvbnNvbGFzLEJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubyxDb3VyaWVyIE5ldyxDb3VyaWVyLG1vbm9zcGFjZTtkaXJlY3Rpb246bHRyO3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpwcmU7d29yZC1zcGFjaW5nOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDtmb250LXNpemU6Ljk1ZW07bGluZS1oZWlnaHQ6MS4yZW07LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmV9LnJlbWlycm9yLXZzIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6LW1vei1zZWxlY3Rpb24sLnJlbWlycm9yLXZzIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9uLC5yZW1pcnJvci12cyBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dOjotbW96LXNlbGVjdGlvbiwucmVtaXJyb3ItdnMgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQ6I2MxZGVmMX0ucmVtaXJyb3ItdnMgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjpzZWxlY3Rpb24sLnJlbWlycm9yLXZzIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSA6OnNlbGVjdGlvbiwucmVtaXJyb3ItdnMgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXTo6c2VsZWN0aW9uLC5yZW1pcnJvci12cyBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dIDo6c2VsZWN0aW9ue2JhY2tncm91bmQ6I2MxZGVmMX0ucmVtaXJyb3ItdnMgcHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MWVtO21hcmdpbjouNWVtIDA7b3ZlcmZsb3c6YXV0bztib3JkZXI6MXB4IHNvbGlkICNkZGRkZGQ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5yZW1pcnJvci12cyA6aGFzKC5yZW1pcnJvci1sYW5ndWFnZS1zZWxlY3QtcG9zaXRpb25lcil+cHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6MmVtIDFlbX0ucmVtaXJyb3ItdnMgOm5vdChwcmUpPmNvZGVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoxcHggLjJlbTtiYWNrZ3JvdW5kOiNmOGY4Zjg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkZGRkfS5yZW1pcnJvci12cyAudG9rZW4uY29tbWVudCwucmVtaXJyb3ItdnMgLnRva2VuLnByb2xvZywucmVtaXJyb3ItdnMgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLXZzIC50b2tlbi5jZGF0YXtjb2xvcjpncmVlbjtmb250LXN0eWxlOml0YWxpY30ucmVtaXJyb3ItdnMgLnRva2VuLm5hbWVzcGFjZXtvcGFjaXR5Oi43fS5yZW1pcnJvci12cyAudG9rZW4uc3RyaW5ne2NvbG9yOiNhMzE1MTV9LnJlbWlycm9yLXZzIC50b2tlbi5wdW5jdHVhdGlvbiwucmVtaXJyb3ItdnMgLnRva2VuLm9wZXJhdG9ye2NvbG9yOiMzOTNhMzR9LnJlbWlycm9yLXZzIC50b2tlbi51cmwsLnJlbWlycm9yLXZzIC50b2tlbi5zeW1ib2wsLnJlbWlycm9yLXZzIC50b2tlbi5udW1iZXIsLnJlbWlycm9yLXZzIC50b2tlbi5ib29sZWFuLC5yZW1pcnJvci12cyAudG9rZW4udmFyaWFibGUsLnJlbWlycm9yLXZzIC50b2tlbi5jb25zdGFudCwucmVtaXJyb3ItdnMgLnRva2VuLmluc2VydGVke2NvbG9yOiMzNmFjYWF9LnJlbWlycm9yLXZzIC50b2tlbi5hdHJ1bGUsLnJlbWlycm9yLXZzIC50b2tlbi5rZXl3b3JkLC5yZW1pcnJvci12cyAudG9rZW4uYXR0ci12YWx1ZSwucmVtaXJyb3ItdnMgLmxhbmd1YWdlLWF1dG9ob3RrZXkgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci12cyAubGFuZ3VhZ2UtanNvbiAudG9rZW4uYm9vbGVhbiwucmVtaXJyb3ItdnMgLmxhbmd1YWdlLWpzb24gLnRva2VuLm51bWJlciwucmVtaXJyb3ItdnMgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtY3NzXXtjb2xvcjojMDBmfS5yZW1pcnJvci12cyAudG9rZW4uZnVuY3Rpb257Y29sb3I6IzM5M2EzNH0ucmVtaXJyb3ItdnMgLnRva2VuLmRlbGV0ZWQsLnJlbWlycm9yLXZzIC5sYW5ndWFnZS1hdXRvaG90a2V5IC50b2tlbi50YWd7Y29sb3I6IzlhMDUwZn0ucmVtaXJyb3ItdnMgLnRva2VuLnNlbGVjdG9yLC5yZW1pcnJvci12cyAubGFuZ3VhZ2UtYXV0b2hvdGtleSAudG9rZW4ua2V5d29yZHtjb2xvcjojMDAwMDlmfS5yZW1pcnJvci12cyAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci12cyAudG9rZW4uYm9sZHtmb250LXdlaWdodDo3MDB9LnJlbWlycm9yLXZzIC50b2tlbi5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnJlbWlycm9yLXZzIC50b2tlbi5jbGFzcy1uYW1lLC5yZW1pcnJvci12cyAubGFuZ3VhZ2UtanNvbiAudG9rZW4ucHJvcGVydHl7Y29sb3I6IzJiOTFhZn0ucmVtaXJyb3ItdnMgLnRva2VuLnRhZywucmVtaXJyb3ItdnMgLnRva2VuLnNlbGVjdG9ye2NvbG9yOm1hcm9vbn0ucmVtaXJyb3ItdnMgLnRva2VuLmF0dHItbmFtZSwucmVtaXJyb3ItdnMgLnRva2VuLnByb3BlcnR5LC5yZW1pcnJvci12cyAudG9rZW4ucmVnZXgsLnJlbWlycm9yLXZzIC50b2tlbi5lbnRpdHl7Y29sb3I6cmVkfS5yZW1pcnJvci12cyAudG9rZW4uZGlyZWN0aXZlLnRhZyAudGFne2JhY2tncm91bmQ6I2ZmMDtjb2xvcjojMzkzYTM0fS5yZW1pcnJvci12cyAubGluZS1udW1iZXJzIC5saW5lLW51bWJlcnMtcm93c3tib3JkZXItcmlnaHQtY29sb3I6I2E1YTVhNX0ucmVtaXJyb3ItdnMgLmxpbmUtbnVtYmVycy1yb3dzPnNwYW46YmVmb3Jle2NvbG9yOiMyYjkxYWZ9LnJlbWlycm9yLXZzIC5saW5lLWhpZ2hsaWdodHtiYWNrZ3JvdW5kOiNjMWRlZjEzMztiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwjYzFkZWYxMzMgNzAlLCNkZGRlZjEwMCl9LnJlbWlycm9yLXhvbm9rYWkgY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXSwucmVtaXJyb3IteG9ub2thaSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17LW1vei10YWItc2l6ZToyOy1vLXRhYi1zaXplOjI7dGFiLXNpemU6Mjstd2Via2l0LWh5cGhlbnM6bm9uZTtoeXBoZW5zOm5vbmU7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtd3JhcDpub3JtYWw7Zm9udC1mYW1pbHk6TWVubG8sTW9uYWNvLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LXNpemU6MTRweDtjb2xvcjojNzZkOWU2O3RleHQtc2hhZG93Om5vbmV9LnJlbWlycm9yLXhvbm9rYWkgcHJlW2NsYXNzKj1sYW5ndWFnZS1dLC5yZW1pcnJvci14b25va2FpIDpub3QocHJlKT5jb2RlW2NsYXNzKj1sYW5ndWFnZS1de2JhY2tncm91bmQ6IzJhMmEyYX0ucmVtaXJyb3IteG9ub2thaSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoxNXB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI2UxZTFlODtvdmVyZmxvdzphdXRvfS5yZW1pcnJvci14b25va2FpIDpoYXMoLnJlbWlycm9yLWxhbmd1YWdlLXNlbGVjdC1wb3NpdGlvbmVyKX5wcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzoyZW0gMWVtfS5yZW1pcnJvci14b25va2FpIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwb3NpdGlvbjpyZWxhdGl2ZX0ucmVtaXJyb3IteG9ub2thaSBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gY29kZXt3aGl0ZS1zcGFjZTpwcmU7ZGlzcGxheTpibG9ja30ucmVtaXJyb3IteG9ub2thaSA6bm90KHByZSk+Y29kZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOi4xNWVtIC4yZW0gLjA1ZW07Ym9yZGVyLXJhZGl1czouM2VtO2JvcmRlcjouMTNlbSBzb2xpZCAjN2E2NjUyO2JveC1zaGFkb3c6MXB4IDFweCAuM2VtIC0uMWVtICMwMDAgaW5zZXR9LnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLm5hbWVzcGFjZXtvcGFjaXR5Oi43fS5yZW1pcnJvci14b25va2FpIC50b2tlbi5jb21tZW50LC5yZW1pcnJvci14b25va2FpIC50b2tlbi5wcm9sb2csLnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLmRvY3R5cGUsLnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLmNkYXRhe2NvbG9yOiM2ZjcwNWV9LnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLm9wZXJhdG9yLC5yZW1pcnJvci14b25va2FpIC50b2tlbi5ib29sZWFuLC5yZW1pcnJvci14b25va2FpIC50b2tlbi5udW1iZXJ7Y29sb3I6I2E3N2FmZX0ucmVtaXJyb3IteG9ub2thaSAudG9rZW4uYXR0ci1uYW1lLC5yZW1pcnJvci14b25va2FpIC50b2tlbi5zdHJpbmcsLnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLmVudGl0eSwucmVtaXJyb3IteG9ub2thaSAudG9rZW4udXJsLC5yZW1pcnJvci14b25va2FpIC5sYW5ndWFnZS1jc3MgLnRva2VuLnN0cmluZywucmVtaXJyb3IteG9ub2thaSAuc3R5bGUgLnRva2VuLnN0cmluZ3tjb2xvcjojZTZkMDZjfS5yZW1pcnJvci14b25va2FpIC50b2tlbi5zZWxlY3RvciwucmVtaXJyb3IteG9ub2thaSAudG9rZW4uaW5zZXJ0ZWR7Y29sb3I6I2E2ZTIyZH0ucmVtaXJyb3IteG9ub2thaSAudG9rZW4uYXRydWxlLC5yZW1pcnJvci14b25va2FpIC50b2tlbi5hdHRyLXZhbHVlLC5yZW1pcnJvci14b25va2FpIC50b2tlbi5rZXl3b3JkLC5yZW1pcnJvci14b25va2FpIC50b2tlbi5pbXBvcnRhbnQsLnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLmRlbGV0ZWR7Y29sb3I6I2VmM2I3ZH0ucmVtaXJyb3IteG9ub2thaSAudG9rZW4ucmVnZXgsLnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLnN0YXRlbWVudHtjb2xvcjojNzZkOWU2fS5yZW1pcnJvci14b25va2FpIC50b2tlbi5wbGFjZWhvbGRlciwucmVtaXJyb3IteG9ub2thaSAudG9rZW4udmFyaWFibGV7Y29sb3I6I2ZmZn0ucmVtaXJyb3IteG9ub2thaSAudG9rZW4uaW1wb3J0YW50LC5yZW1pcnJvci14b25va2FpIC50b2tlbi5zdGF0ZW1lbnQsLnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLmJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5yZW1pcnJvci14b25va2FpIC50b2tlbi5wdW5jdHVhdGlvbiwucmVtaXJyb3IteG9ub2thaSAudG9rZW4ucHVuY3R1YXRpb24uaW1wb3J0YW50e2NvbG9yOiNiZWJlYzV9LnJlbWlycm9yLXhvbm9rYWkgLnRva2VuLmVudGl0eXtjdXJzb3I6aGVscH0ucmVtaXJyb3IteG9ub2thaSAudG9rZW4uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5yZW1pcnJvci14b25va2FpIGNvZGUubGFuZ3VhZ2UtbWFya3Vwe2NvbG9yOiNmOWY5Zjl9LnJlbWlycm9yLXhvbm9rYWkgY29kZS5sYW5ndWFnZS1tYXJrdXAgLnRva2VuLnRhZ3tjb2xvcjojZWYzYjdkfS5yZW1pcnJvci14b25va2FpIGNvZGUubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi5hdHRyLW5hbWV7Y29sb3I6I2E2ZTIyZH0ucmVtaXJyb3IteG9ub2thaSBjb2RlLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4uYXR0ci12YWx1ZXtjb2xvcjojZTZkMDZjfS5yZW1pcnJvci14b25va2FpIGNvZGUubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi5zdHlsZSwucmVtaXJyb3IteG9ub2thaSBjb2RlLmxhbmd1YWdlLW1hcmt1cCAudG9rZW4uc2NyaXB0LC5yZW1pcnJvci14b25va2FpIGNvZGUubGFuZ3VhZ2UtbWFya3VwIC50b2tlbi5zY3JpcHQgLnRva2VuLmtleXdvcmR7Y29sb3I6Izc2ZDllNn0ucmVtaXJyb3IteG9ub2thaSBwcmVbY2xhc3MqPWxhbmd1YWdlLV1bZGF0YS1saW5lXXtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjFlbSAwIDFlbSAzZW19LnJlbWlycm9yLXhvbm9rYWkgcHJlW2RhdGEtbGluZV0gLmxpbmUtaGlnaGxpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO3BhZGRpbmc6MDttYXJnaW4tdG9wOjFlbTtiYWNrZ3JvdW5kOiNmZmZmZmYxNDtwb2ludGVyLWV2ZW50czpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2hpdGUtc3BhY2U6cHJlfS5yZW1pcnJvci14b25va2FpIHByZVtkYXRhLWxpbmVdIC5saW5lLWhpZ2hsaWdodDpiZWZvcmUsLnJlbWlycm9yLXhvbm9rYWkgcHJlW2RhdGEtbGluZV0gLmxpbmUtaGlnaGxpZ2h0W2RhdGEtZW5kXTphZnRlcntjb250ZW50OmF0dHIoZGF0YS1zdGFydCk7cG9zaXRpb246YWJzb2x1dGU7dG9wOi40ZW07bGVmdDouNmVtO21pbi13aWR0aDoxZW07cGFkZGluZzouMmVtIC41ZW07YmFja2dyb3VuZC1jb2xvcjojZmZmNjtjb2xvcjojMDAwO2ZvbnQ6NzAwIDY1JS8xIHNhbnMtc2VyaWY7aGVpZ2h0OjFlbTtsaW5lLWhlaWdodDoxZW07dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXJhZGl1czo5OTlweDt0ZXh0LXNoYWRvdzpub25lO2JveC1zaGFkb3c6MCAxcHggMXB4ICNmZmZmZmZiM30ucmVtaXJyb3IteG9ub2thaSBwcmVbZGF0YS1saW5lXSAubGluZS1oaWdobGlnaHRbZGF0YS1lbmRdOmFmdGVye2NvbnRlbnQ6YXR0cihkYXRhLWVuZCk7dG9wOmF1dG87Ym90dG9tOi40ZW19LnJlbWlycm9yLWVkaXRvciBzcGFuLnJlbWlycm9yLW1heC1jb3VudC1leGNlZWRlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1odWUtcmVkLTQpfS5yZW1pcnJvci1lbW9qaS1pbWFnZXstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWluO3dpZHRoOjEuMzc1ZW07aGVpZ2h0OjEuMzc1ZW07dmVydGljYWwtYWxpZ246Ym90dG9tfS5yZW1pcnJvci1lbW9qaS13cmFwcGVye3RleHQtaW5kZW50Oi05OTk5OXB4fS5yZW1pcnJvci1lbW9qaS1wb3B1cC1pdGVte3BhZGRpbmc6OHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjI1MHB4O3dpZHRoOjI1MHB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6I2ZmZn0ucmVtaXJyb3ItZW1vamktcG9wdXAtaG92ZXJlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1odWUtZ3JheS0yKX0ucmVtaXJyb3ItZW1vamktcG9wdXAtaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWh1ZS1ncmF5LTMpfS5yZW1pcnJvci1lbW9qaS1wb3B1cC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweDttYXJnaW46MCBhdXRvO2JvcmRlci1yYWRpdXM6OHB4O2JveC1zaGFkb3c6IzBiMmI0MTQwIDAgNHB4IDhweCwjMGIyYjQxNGYgMCAwIDFweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDoxMDttYXgtaGVpZ2h0OjI1MHB4O292ZXJmbG93LXk6c2Nyb2xsfS5yZW1pcnJvci1lbW9qaS1wb3B1cC1uYW1le2NvbG9yOiM3OTgxODZ9LnJlbWlycm9yLWVtb2ppLXBvcHVwLWNoYXJ7Zm9udC1zaXplOjEuMjVlbTtwYWRkaW5nLXJpZ2h0OjVweH0ucmVtaXJyb3ItZmlsZS1yb290e2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjojZThlY2YxO2NvbG9yOiMwMDA7bWFyZ2luOjhweCBhdXRvO21pbi1oZWlnaHQ6MzJweDt3aWR0aDoxMDAlO21heC13aWR0aDo2MDBweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5yZW1pcnJvci1maWxlLW5hbWV7Zm9udC1zaXplOjFyZW07bWFyZ2luLWxlZnQ6OHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ucmVtaXJyb3ItZmlsZS1zaXple2ZvbnQtc2l6ZTouOHJlbTttYXJnaW4tbGVmdDo4cHg7Y29sb3I6Z3JheTt3aGl0ZS1zcGFjZTpub3dyYXB9LnJlbWlycm9yLWZpbGUtdXBsb2FkLXByb2dyZXNze2ZvbnQtc2l6ZTouOHJlbTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjhweDtjb2xvcjpncmF5O2ZvbnQtZmFtaWx5Ok1lbmxvLE1vbmFjbyxDb3VyaWVyIE5ldyxtb25vc3BhY2V9LnJlbWlycm9yLWZpbGUtZXJyb3J7Zm9udC1zaXplOi44cmVtO2NvbG9yOnJlZH0ucmVtaXJyb3ItZmlsZS1pY29uLWJ1dHRvbntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMH0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIC5Qcm9zZU1pcnJvci1nYXBjdXJzb3J7ZGlzcGxheTpub25lO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGV9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciAuUHJvc2VNaXJyb3ItZ2FwY3Vyc29yOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTJweDt3aWR0aDoyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIGJsYWNrO2FuaW1hdGlvbjpQcm9zZU1pcnJvci1jdXJzb3ItYmxpbmsgMS4xcyBzdGVwcygyLHN0YXJ0KSBpbmZpbml0ZX1Aa2V5ZnJhbWVzIFByb3NlTWlycm9yLWN1cnNvci1ibGlua3t0b3t2aXNpYmlsaXR5OmhpZGRlbn19LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciAuUHJvc2VNaXJyb3ItZm9jdXNlZCAuUHJvc2VNaXJyb3ItZ2FwY3Vyc29yLC5yZW1pcnJvci1lZGl0b3IuUHJvc2VNaXJyb3IuUHJvc2VNaXJyb3ItZm9jdXNlZCAuUHJvc2VNaXJyb3ItZ2FwY3Vyc29ye2Rpc3BsYXk6YmxvY2t9LnJlbWlycm9yLWltYWdlLWxvYWRlcntib3JkZXI6MTZweCBzb2xpZCAjZjNmM2YzO2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlci10b3A6MTZweCBzb2xpZCAjMzQ5OGRiO3dpZHRoOjEyMHB4O2hlaWdodDoxMjBweDthbmltYXRpb246c3BpbiAycyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBzcGluezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0ucmVtaXJyb3ItZWRpdG9yIG9sPmxpPi5yZW1pcnJvci1saXN0LWl0ZW0tbWFya2VyLWNvbnRhaW5lcntkaXNwbGF5Om5vbmV9LnJlbWlycm9yLWVkaXRvciB1bD5saS5yZW1pcnJvci1saXN0LWl0ZW0td2l0aC1jdXN0b20tbWFya3tsaXN0LXN0eWxlOm5vbmV9LnJlbWlycm9yLWVkaXRvciAucmVtaXJyb3ItdWwtbGlzdC1jb250ZW50PmxpLnJlbWlycm9yLWxpc3QtaXRlbS13aXRoLWN1c3RvbS1tYXJre2xpc3Qtc3R5bGU6bm9uZX0ucmVtaXJyb3ItZWRpdG9yIHVsIHVsK3Vse21hcmdpbi1ibG9jay1zdGFydDoxZW19LnJlbWlycm9yLWxpc3QtaXRlbS1tYXJrZXItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTMycHg7d2lkdGg6MjRweDtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnJlbWlycm9yLWxpc3QtaXRlbS1jaGVja2JveHtmaWx0ZXI6aHVlLXJvdGF0ZSg2MGRlZyl9LnJlbWlycm9yLWNvbGxhcHNpYmxlLWxpc3QtaXRlbS1jbG9zZWQgbGl7ZGlzcGxheTpub25lfS5yZW1pcnJvci1jb2xsYXBzaWJsZS1saXN0LWl0ZW0tY2xvc2VkIC5yZW1pcnJvci1jb2xsYXBzaWJsZS1saXN0LWl0ZW0tYnV0dG9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWh1ZS1ncmF5LTYpfS5yZW1pcnJvci1jb2xsYXBzaWJsZS1saXN0LWl0ZW0tYnV0dG9ue3dpZHRoOjhweDtoZWlnaHQ6OHB4O2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgZWFzZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1jb2xvci1ib3JkZXIpfS5yZW1pcnJvci1jb2xsYXBzaWJsZS1saXN0LWl0ZW0tYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLXByaW1hcnkpfS5yZW1pcnJvci1jb2xsYXBzaWJsZS1saXN0LWl0ZW0tYnV0dG9uLmRpc2FibGVkLC5yZW1pcnJvci1jb2xsYXBzaWJsZS1saXN0LWl0ZW0tYnV0dG9uLmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLWJvcmRlcik7Y3Vyc29yOmRlZmF1bHR9LnJlbWlycm9yLWxpc3Qtc3BpbmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjRweDtib3R0b206MDtsZWZ0Oi0yMHB4O3dpZHRoOjE2cHg7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQtY29sb3IgLjI1cyBlYXNlO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLXJtci1jb2xvci1ib3JkZXIpO2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXdpZHRoOjFweH0ucmVtaXJyb3ItbGlzdC1zcGluZTpob3Zlcntib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1ybXItY29sb3ItcHJpbWFyeSl9LnJlbWlycm9yLW1lbnRpb24tYXRvbXtiYWNrZ3JvdW5kOnZhcigtLXJtci1odWUtZ3JheS0yKTtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOi45ZW07Zm9udC1zdHlsZTpub3JtYWw7Ym9yZGVyLXJhZGl1czp2YXIoLS1ybXItcmFkaXVzLWJvcmRlcik7cGFkZGluZzouMnJlbSAuNXJlbTt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tcm1yLWNvbG9yLXByaW1hcnkpfS5yZW1pcnJvci1zdWdnZXN0LWF0b217Y29sb3I6IzAwMDl9LnJlbWlycm9yLW1lbnRpb24tYXRvbS1wb3B1cC1pdGVte3BhZGRpbmc6OHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjI1MHB4O3dpZHRoOjI1MHB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6I2ZmZn0ucmVtaXJyb3ItbWVudGlvbi1hdG9tLXBvcHVwLWhvdmVyZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItaHVlLWdyYXktMil9LnJlbWlycm9yLW1lbnRpb24tYXRvbS1wb3B1cC1oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItaHVlLWdyYXktMyl9LnJlbWlycm9yLW1lbnRpb24tYXRvbS1wb3B1cC13cmFwcGVye3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweDttYXJnaW46MCBhdXRvO2JvcmRlci1yYWRpdXM6OHB4O2JveC1zaGFkb3c6IzBiMmI0MTQwIDAgNHB4IDhweCwjMGIyYjQxNGYgMCAwIDFweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDoxMDttYXgtaGVpZ2h0OjI1MHB4O292ZXJmbG93LXk6c2Nyb2xsfS5yZW1pcnJvci1tZW50aW9uLWF0b20tcG9wdXAtbmFtZSwucmVtaXJyb3ItbWVudGlvbi1hdG9tLXplcm8taXRlbXN7Y29sb3I6Izc5ODE4Nn0ucmVtaXJyb3ItbWVudGlvbi1hdG9tLXBvcHVwLWNoYXJ7Zm9udC1zaXplOjEuMjVlbTtwYWRkaW5nLXJpZ2h0OjVweH0ucmVtaXJyb3ItaXMtZW1wdHk6Zmlyc3Qtb2YtdHlwZTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Y29sb3I6I2FhYTtwb2ludGVyLWV2ZW50czpub25lO2hlaWdodDowO2ZvbnQtc3R5bGU6aXRhbGljO2NvbnRlbnQ6YXR0cihkYXRhLXBsYWNlaG9sZGVyKX0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5yZW1pcnJvci1wb3NpdGlvbmVye3Bvc2l0aW9uOmFic29sdXRlO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHg7cG9pbnRlci1ldmVudHM6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOm5vbmU7ei1pbmRleDotMX0ucmVtaXJyb3ItcG9zaXRpb25lci13aWRnZXR7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZX0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIC50YWJsZVdyYXBwZXJ7b3ZlcmZsb3cteDphdXRvfS5yZW1pcnJvci1lZGl0b3IuUHJvc2VNaXJyb3IgdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbn0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIHRkLC5yZW1pcnJvci1lZGl0b3IuUHJvc2VNaXJyb3IgdGh7dmVydGljYWwtYWxpZ246dG9wO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tcm1yLWNvbG9yLXRhYmxlLWRlZmF1bHQtYm9yZGVyKX0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIC5jb2x1bW4tcmVzaXplLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMnB4O3RvcDowO2JvdHRvbTowO3dpZHRoOjRweDt6LWluZGV4OjQwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWh1ZS1ibHVlLTcpO3BvaW50ZXItZXZlbnRzOm5vbmV9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvci5yZXNpemUtY3Vyc29ye2N1cnNvcjpldy1yZXNpemU7Y3Vyc29yOmNvbC1yZXNpemV9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciB0aC5zZWxlY3RlZENlbGwsLnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciB0ZC5zZWxlY3RlZENlbGx7Ym9yZGVyLXN0eWxlOmRvdWJsZTtib3JkZXItY29sb3I6dmFyKC0tcm1yLWNvbG9yLXRhYmxlLXNlbGVjdGVkLWJvcmRlcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtc2VsZWN0ZWQtY2VsbCl9LnJlbWlycm9yLXRhYmxlLWNvbGdyb3VwPmNvbDpmaXJzdC1vZi10eXBle3dpZHRoOjEzcHg7b3ZlcmZsb3c6dmlzaWJsZX0ucmVtaXJyb3ItY29udHJvbGxlcnMtdG9nZ2xle3Zpc2liaWxpdHk6aGlkZGVufS5yZW1pcnJvci10YWJsZS1zaG93LWNvbnRyb2xsZXJzIC5yZW1pcnJvci1jb250cm9sbGVycy10b2dnbGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5yZW1pcnJvci10YWJsZS1pbnNlcnQtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7ei1pbmRleDoyNTtjdXJzb3I6cG9pbnRlcjtib3JkZXItcmFkaXVzOjRweDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlO2JhY2tncm91bmQtY29sb3I6I2RjZGNkY30ucmVtaXJyb3ItdGFibGUtaW5zZXJ0LWJ1dHRvbiBzdmd7ZmlsbDojZmZmfS5yZW1pcnJvci10YWJsZS1pbnNlcnQtYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzEzNmJkYX0ucmVtaXJyb3ItdGFibGUtaW5zZXJ0LWJ1dHRvbjpob3ZlciBzdmd7ZmlsbDojZmZmfS5yZW1pcnJvci10YWJsZS1kZWxldGUtaW5uZXItYnV0dG9ue2JvcmRlcjpub25lO3BhZGRpbmc6MDt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MzA7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLXJhZGl1czo0cHg7YmFja2dyb3VuZC1jb2xvcjojY2VjZWNlO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2V9LnJlbWlycm9yLXRhYmxlLWRlbGV0ZS1pbm5lci1idXR0b246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY3ODg0fS5yZW1pcnJvci10YWJsZS1kZWxldGUtdGFibGUtaW5uZXItYnV0dG9ue3RvcDpjYWxjKHZhcigtLXJlbWlycm9yLXRhYmxlLWRlbGV0ZS1idXR0b24teSkgLSA5cHgpO2xlZnQ6Y2FsYyh2YXIoLS1yZW1pcnJvci10YWJsZS1kZWxldGUtYnV0dG9uLXgpIC0gOXB4KX0ucmVtaXJyb3ItdGFibGUtZGVsZXRlLXJvdy1jb2x1bW4taW5uZXItYnV0dG9ue3RvcDpjYWxjKHZhcigtLXJlbWlycm9yLXRhYmxlLWRlbGV0ZS1yb3ctY29sdW1uLWJ1dHRvbi15KSAtIDlweCk7bGVmdDpjYWxjKHZhcigtLXJlbWlycm9yLXRhYmxlLWRlbGV0ZS1yb3ctY29sdW1uLWJ1dHRvbi14KSAtIDlweCl9LnJlbWlycm9yLXRhYmxlLXdpdGgtY29udHJvbGxlcnN7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1ib3R0b206NDBweDtoZWlnaHQ6MXB4fS5Qcm9zZU1pcnJvciB0YWJsZS5yZW1pcnJvci10YWJsZS13aXRoLWNvbnRyb2xsZXJze292ZXJmbG93OnZpc2libGV9LnJlbWlycm9yLXRhYmxlLXdhaXR0aW5nLWNvbnRyb2xsZXJze2Rpc3BsYXk6bm9uZX0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZSgxKXtoZWlnaHQ6MTJweDtvdmVyZmxvdzp2aXNpYmxlfS5yZW1pcnJvci10YWJsZS10Ym9keS13aXRoLWNvbnRyb2xsZXJzPnRyOm50aC1vZi10eXBlKDEpIHRoOm50aC1vZi10eXBlKDEpe292ZXJmbG93OnZpc2libGU7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTU7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZSgxKSB0aDpudGgtb2YtdHlwZSgxKSBkaXYucmVtaXJyb3ItdGFibGUtY29udHJvbGxlci13cmFwcGVye292ZXJmbG93OnZpc2libGU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpmbGV4LWVuZDt3aWR0aDoxMnB4O2hlaWdodDoxMnB4fS5yZW1pcnJvci10YWJsZS10Ym9keS13aXRoLWNvbnRyb2xsZXJzPnRyOm50aC1vZi10eXBlKDEpIHRoOm50aC1vZi10eXBlKDEpIGRpdi5yZW1pcnJvci10YWJsZS1jb250cm9sbGVyLXRyaWdnZXItYXJlYXtmbGV4OjE7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDtkaXNwbGF5Om5vbmV9LnJlbWlycm9yLXRhYmxlLXRib2R5LXdpdGgtY29udHJvbGxlcnM+dHI6bnRoLW9mLXR5cGUoMSkgdGg6bnRoLW9mLXR5cGUoMSkgZGl2LnJlbWlycm9yLXRhYmxlLWNvbnRyb2xsZXItbWFyay1yb3ctY29ybmVye2JvdHRvbTotMnB4O2xlZnQ6LTEycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MHB4O2hlaWdodDowcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtbWFyayk7Ym9yZGVyLXdpZHRoOjJweH0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZSgxKSB0aDpudGgtb2YtdHlwZSgxKSBkaXYucmVtaXJyb3ItdGFibGUtY29udHJvbGxlci1tYXJrLWNvbHVtbi1jb3JuZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MHB4O2hlaWdodDowcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtbWFyayk7Ym9yZGVyLXdpZHRoOjJweDtyaWdodDotMnB4O3RvcDotMTJweH0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZSgxKSB0aDpudGgtb2YtdHlwZShuKzIpe292ZXJmbG93OnZpc2libGU7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTU7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEycHh9LnJlbWlycm9yLXRhYmxlLXRib2R5LXdpdGgtY29udHJvbGxlcnM+dHI6bnRoLW9mLXR5cGUoMSkgdGg6bnRoLW9mLXR5cGUobisyKSBkaXYucmVtaXJyb3ItdGFibGUtY29udHJvbGxlci13cmFwcGVye292ZXJmbG93OnZpc2libGU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpmbGV4LWVuZDt3aWR0aDoxMDAlO2hlaWdodDoxMnB4O2ZsZXgtZGlyZWN0aW9uOnJvd30ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZSgxKSB0aDpudGgtb2YtdHlwZShuKzIpIGRpdi5yZW1pcnJvci10YWJsZS1jb250cm9sbGVyLXRyaWdnZXItYXJlYXtmbGV4OjE7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDtoZWlnaHQ6MzZweH0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZSgxKSB0aDpudGgtb2YtdHlwZShuKzIpIGRpdi5yZW1pcnJvci10YWJsZS1jb250cm9sbGVyLW1hcmstcm93LWNvcm5lcntkaXNwbGF5Om5vbmV9LnJlbWlycm9yLXRhYmxlLXRib2R5LXdpdGgtY29udHJvbGxlcnM+dHI6bnRoLW9mLXR5cGUoMSkgdGg6bnRoLW9mLXR5cGUobisyKSBkaXYucmVtaXJyb3ItdGFibGUtY29udHJvbGxlci1tYXJrLWNvbHVtbi1jb3JuZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MHB4O2hlaWdodDowcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtbWFyayk7Ym9yZGVyLXdpZHRoOjJweDtyaWdodDotMnB4O3RvcDotMTJweH0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZShuKzIpIHRoe292ZXJmbG93OnZpc2libGU7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTJweH0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycz50cjpudGgtb2YtdHlwZShuKzIpIHRoIGRpdi5yZW1pcnJvci10YWJsZS1jb250cm9sbGVyLXdyYXBwZXJ7b3ZlcmZsb3c6dmlzaWJsZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDoxMDAlO3dpZHRoOjEycHg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5yZW1pcnJvci10YWJsZS10Ym9keS13aXRoLWNvbnRyb2xsZXJzPnRyOm50aC1vZi10eXBlKG4rMikgdGggZGl2LnJlbWlycm9yLXRhYmxlLWNvbnRyb2xsZXItdHJpZ2dlci1hcmVhe2ZsZXg6MTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwO3dpZHRoOjM2cHh9LnJlbWlycm9yLXRhYmxlLXRib2R5LXdpdGgtY29udHJvbGxlcnM+dHI6bnRoLW9mLXR5cGUobisyKSB0aCBkaXYucmVtaXJyb3ItdGFibGUtY29udHJvbGxlci1tYXJrLXJvdy1jb3JuZXJ7Ym90dG9tOi0ycHg7bGVmdDotMTJweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowcHg7aGVpZ2h0OjBweDtib3JkZXItcmFkaXVzOjUwJTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLXJtci1jb2xvci10YWJsZS1tYXJrKTtib3JkZXItd2lkdGg6MnB4fS5yZW1pcnJvci10YWJsZS10Ym9keS13aXRoLWNvbnRyb2xsZXJzPnRyOm50aC1vZi10eXBlKG4rMikgdGggZGl2LnJlbWlycm9yLXRhYmxlLWNvbnRyb2xsZXItbWFyay1jb2x1bW4tY29ybmVye2Rpc3BsYXk6bm9uZX0ucmVtaXJyb3ItdGFibGUtdGJvZHktd2l0aC1jb250cm9sbGVycyB0aC5yZW1pcnJvci10YWJsZS1jb250cm9sbGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLXRhYmxlLWRlZmF1bHQtY29udHJvbGxlcil9LnJlbWlycm9yLXRhYmxlLXRib2R5LXdpdGgtY29udHJvbGxlcnMgdGguc2VsZWN0ZWRDZWxsLnJlbWlycm9yLXRhYmxlLWNvbnRyb2xsZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtc2VsZWN0ZWQtY29udHJvbGxlcil9LnJlbWlycm9yLXRhYmxlLXNob3ctcHJlZGVsZXRlIHRoLnNlbGVjdGVkQ2VsbC5yZW1pcnJvci10YWJsZS1jb250cm9sbGVyLC5yZW1pcnJvci10YWJsZS1zaG93LXByZWRlbGV0ZSB0ZC5zZWxlY3RlZENlbGx7Ym9yZGVyLWNvbG9yOnZhcigtLXJtci1jb2xvci10YWJsZS1wcmVkZWxldGUtYm9yZGVyKSFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtcHJlZGVsZXRlLWNlbGwpIWltcG9ydGFudH0ucmVtaXJyb3ItdGFibGUtc2hvdy1wcmVkZWxldGUgdGguc2VsZWN0ZWRDZWxsLnJlbWlycm9yLXRhYmxlLWNvbnRyb2xsZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtcHJlZGVsZXRlLWNvbnRyb2xsZXIpIWltcG9ydGFudH0ucmVtaXJyb3ItdGFibGUtc2hvdy1wcmVkZWxldGUucmVtaXJyb3ItdGFibGUtcHJlc2VsZWN0LWFsbCB0aC5yZW1pcnJvci10YWJsZS1jb250cm9sbGVyLC5yZW1pcnJvci10YWJsZS1zaG93LXByZWRlbGV0ZS5yZW1pcnJvci10YWJsZS1wcmVzZWxlY3QtYWxsIHRke2JvcmRlci1jb2xvcjp2YXIoLS1ybXItY29sb3ItdGFibGUtcHJlZGVsZXRlLWJvcmRlcikhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tcm1yLWNvbG9yLXRhYmxlLXByZWRlbGV0ZS1jZWxsKSFpbXBvcnRhbnR9LnJlbWlycm9yLXRhYmxlLXNob3ctcHJlZGVsZXRlLnJlbWlycm9yLXRhYmxlLXByZXNlbGVjdC1hbGwgdGgucmVtaXJyb3ItdGFibGUtY29udHJvbGxlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXJtci1jb2xvci10YWJsZS1wcmVkZWxldGUtY29udHJvbGxlcikhaW1wb3J0YW50fS5yZW1pcnJvci1lZGl0b3IuUHJvc2VNaXJyb3IgLndoaXRlc3BhY2V7cG9pbnRlci1ldmVudHM6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciAud2hpdGVzcGFjZTpiZWZvcmV7Y2FyZXQtY29sb3I6aW5oZXJpdDtjb2xvcjpncmF5O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtsaW5lLWhlaWdodDoxZW07d2lkdGg6MH0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIC53aGl0ZXNwYWNlLS1zOmJlZm9yZXtjb250ZW50OiLCtyJ9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciAud2hpdGVzcGFjZS0tYnI6YmVmb3Jle2NvbnRlbnQ6IsKsIn0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yIC53aGl0ZXNwYWNlLS1wOmJlZm9yZXtjb250ZW50OiLCtiJ9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciAuUHJvc2VNaXJyb3IteWpzLWN1cnNvcntwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItbGVmdDpibGFjaztib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC13aWR0aDoycHg7Ym9yZGVyLWNvbG9yOm9yYW5nZTtoZWlnaHQ6MWVtO3dvcmQtYnJlYWs6bm9ybWFsO3BvaW50ZXItZXZlbnRzOm5vbmV9LnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvciAuUHJvc2VNaXJyb3IteWpzLWN1cnNvcj5kaXZ7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xLjA1ZW07Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZC1jb2xvcjojZmE4MTAwO2ZvbnQtZmFtaWx5OnNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2NvbG9yOiNmZmY7cGFkZGluZy1sZWZ0OjJweDtwYWRkaW5nLXJpZ2h0OjJweH0ucmVtaXJyb3ItZWRpdG9yLlByb3NlTWlycm9yPi5Qcm9zZU1pcnJvci15anMtY3Vyc29yOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MTZweH0ucmVtaXJyb3ItZWRpdG9yICN5LWZ1bmN0aW9uc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjBweDtyaWdodDoyMHB4fS5yZW1pcnJvci1lZGl0b3IgI3ktZnVuY3Rpb25zPip7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnJlbWlycm9yLXRoZW1le2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucmVtaXJyb3ItdGhlbWUgKiwucmVtaXJyb3ItdGhlbWUgKjpiZWZvcmUsLnJlbWlycm9yLXRoZW1lICo6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fS5yZW1pcnJvci10aGVtZXstLXJtci1jb2xvci1iYWNrZ3JvdW5kOiAjZmZmZmZmOy0tcm1yLWNvbG9yLWJvcmRlcjogcmdiYSgwLCAwLCAwLCAuMjUpOy0tcm1yLWNvbG9yLWZvcmVncm91bmQ6ICMwMDAwMDA7LS1ybXItY29sb3ItbXV0ZWQ6ICNmMWYzZjU7LS1ybXItY29sb3ItcHJpbWFyeTogIzc5NjNkMjstLXJtci1jb2xvci1zZWNvbmRhcnk6ICNiY2QyNjM7LS1ybXItY29sb3ItcHJpbWFyeS10ZXh0OiAjZmZmOy0tcm1yLWNvbG9yLXNlY29uZGFyeS10ZXh0OiAjZmZmOy0tcm1yLWNvbG9yLXRleHQ6ICMyNTIxMDM7LS1ybXItY29sb3ItZmFkZWQ6IGhzbGEoMCwgMCUsIDEzJSwgLjkpOy0tcm1yLWNvbG9yLWFjdGl2ZS1iYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCA4NSUsIDEpOy0tcm1yLWNvbG9yLWFjdGl2ZS1ib3JkZXI6IGhzbGEoMCwgMCUsIDAlLCAuMjUpOy0tcm1yLWNvbG9yLWFjdGl2ZS1mb3JlZ3JvdW5kOiBoc2xhKDAsIDAlLCAwJSwgMSk7LS1ybXItY29sb3ItYWN0aXZlLW11dGVkOiBoc2xhKDIxMCwgMTclLCA4MCUsIDEpOy0tcm1yLWNvbG9yLWFjdGl2ZS1wcmltYXJ5OiBoc2xhKDI1MiwgNTUlLCA0NiUsIDEpOy0tcm1yLWNvbG9yLWFjdGl2ZS1zZWNvbmRhcnk6IGhzbGEoNzIsIDU1JSwgNDYlLCAxKTstLXJtci1jb2xvci1hY3RpdmUtcHJpbWFyeS10ZXh0OiAjZmZmOy0tcm1yLWNvbG9yLWFjdGl2ZS1zZWNvbmRhcnktdGV4dDogIzAwMDstLXJtci1jb2xvci1hY3RpdmUtdGV4dDogIzAwMDstLXJtci1jb2xvci1hY3RpdmUtZmFkZWQ6IGhzbGEoMCwgMCUsIDEzJSwgLjkpOy0tcm1yLWNvbG9yLWhvdmVyLWJhY2tncm91bmQ6IGhzbGEoMCwgMCUsIDkzJSwgMSk7LS1ybXItY29sb3ItaG92ZXItYm9yZGVyOiBoc2xhKDAsIDAlLCAwJSwgLjI1KTstLXJtci1jb2xvci1ob3Zlci1mb3JlZ3JvdW5kOiBoc2xhKDAsIDAlLCAwJSwgMSk7LS1ybXItY29sb3ItaG92ZXItbXV0ZWQ6IGhzbGEoMjEwLCAxNyUsIDg4JSwgMSk7LS1ybXItY29sb3ItaG92ZXItcHJpbWFyeTogaHNsYSgyNTIsIDU1JSwgNTMlLCAxKTstLXJtci1jb2xvci1ob3Zlci1zZWNvbmRhcnk6IGhzbGEoNzIsIDU1JSwgNTMlLCAxKTstLXJtci1jb2xvci1ob3Zlci1wcmltYXJ5LXRleHQ6ICNmZmY7LS1ybXItY29sb3ItaG92ZXItc2Vjb25kYXJ5LXRleHQ6ICMwMDA7LS1ybXItY29sb3ItaG92ZXItdGV4dDogIzAwMDstLXJtci1jb2xvci1ob3Zlci1mYWRlZDogaHNsYSgwLCAwJSwgMTMlLCAuOSk7LS1ybXItY29sb3Itc2hhZG93LTE6IHJnYmEoMTAsIDMxLCA2OCwgLjA4KTstLXJtci1jb2xvci1zaGFkb3ctMjogcmdiYSgxMCwgMzEsIDY4LCAuMSk7LS1ybXItY29sb3Itc2hhZG93LTM6IHJnYmEoMTAsIDMxLCA2OCwgLjEyKTstLXJtci1jb2xvci1iYWNrZHJvcDogcmdiYSgwLCAwLCAwLCAuOSk7LS1ybXItY29sb3Itb3V0bGluZTogcmdiYSgxMjEsIDk5LCAyMTAsIC40KTstLXJtci1jb2xvci10YWJsZS1kZWZhdWx0LWJvcmRlcjogaHNsYSgwLCAwJSwgODAlLCAxKTstLXJtci1jb2xvci10YWJsZS1kZWZhdWx0LWNlbGw6IGhzbGEoMCwgMCUsIDQwJSwgMSk7LS1ybXItY29sb3ItdGFibGUtZGVmYXVsdC1jb250cm9sbGVyOiAjZGVlMmU2Oy0tcm1yLWNvbG9yLXRhYmxlLXNlbGVjdGVkLWJvcmRlcjogIzFjN2VkNjstLXJtci1jb2xvci10YWJsZS1zZWxlY3RlZC1jZWxsOiAjZDBlYmZmOy0tcm1yLWNvbG9yLXRhYmxlLXNlbGVjdGVkLWNvbnRyb2xsZXI6ICMzMzlhZjA7LS1ybXItY29sb3ItdGFibGUtcHJlc2VsZWN0LWJvcmRlcjogIzFjN2VkNjstLXJtci1jb2xvci10YWJsZS1wcmVzZWxlY3QtY2VsbDogaHNsYSgwLCAwJSwgNDAlLCAxKTstLXJtci1jb2xvci10YWJsZS1wcmVzZWxlY3QtY29udHJvbGxlcjogIzMzOWFmMDstLXJtci1jb2xvci10YWJsZS1wcmVkZWxldGUtYm9yZGVyOiAjZjAzZTNlOy0tcm1yLWNvbG9yLXRhYmxlLXByZWRlbGV0ZS1jZWxsOiAjZmZlM2UzOy0tcm1yLWNvbG9yLXRhYmxlLXByZWRlbGV0ZS1jb250cm9sbGVyOiAjZmY2YjZiOy0tcm1yLWNvbG9yLXRhYmxlLW1hcms6ICM5MTkxOTE5NjstLXJtci1odWUtZ3JheS0wOiAjZjhmOWZhOy0tcm1yLWh1ZS1ncmF5LTE6ICNmMWYzZjU7LS1ybXItaHVlLWdyYXktMjogI2U5ZWNlZjstLXJtci1odWUtZ3JheS0zOiAjZGVlMmU2Oy0tcm1yLWh1ZS1ncmF5LTQ6ICNjZWQ0ZGE7LS1ybXItaHVlLWdyYXktNTogI2FkYjViZDstLXJtci1odWUtZ3JheS02OiAjODY4ZTk2Oy0tcm1yLWh1ZS1ncmF5LTc6ICM0OTUwNTc7LS1ybXItaHVlLWdyYXktODogIzM0M2E0MDstLXJtci1odWUtZ3JheS05OiAjMjEyNTI5Oy0tcm1yLWh1ZS1yZWQtMDogI2ZmZjVmNTstLXJtci1odWUtcmVkLTE6ICNmZmUzZTM7LS1ybXItaHVlLXJlZC0yOiAjZmZjOWM5Oy0tcm1yLWh1ZS1yZWQtMzogI2ZmYThhODstLXJtci1odWUtcmVkLTQ6ICNmZjg3ODc7LS1ybXItaHVlLXJlZC01OiAjZmY2YjZiOy0tcm1yLWh1ZS1yZWQtNjogI2ZhNTI1MjstLXJtci1odWUtcmVkLTc6ICNmMDNlM2U7LS1ybXItaHVlLXJlZC04OiAjZTAzMTMxOy0tcm1yLWh1ZS1yZWQtOTogI2M5MmEyYTstLXJtci1odWUtcGluay0wOiAjZmZmMGY2Oy0tcm1yLWh1ZS1waW5rLTE6ICNmZmRlZWI7LS1ybXItaHVlLXBpbmstMjogI2ZjYzJkNzstLXJtci1odWUtcGluay0zOiAjZmFhMmMxOy0tcm1yLWh1ZS1waW5rLTQ6ICNmNzgzYWM7LS1ybXItaHVlLXBpbmstNTogI2YwNjU5NTstLXJtci1odWUtcGluay02OiAjZTY0OTgwOy0tcm1yLWh1ZS1waW5rLTc6ICNkNjMzNmM7LS1ybXItaHVlLXBpbmstODogI2MyMjU1YzstLXJtci1odWUtcGluay05OiAjYTYxZTRkOy0tcm1yLWh1ZS1ncmFwZS0wOiAjZjhmMGZjOy0tcm1yLWh1ZS1ncmFwZS0xOiAjZjNkOWZhOy0tcm1yLWh1ZS1ncmFwZS0yOiAjZWViZWZhOy0tcm1yLWh1ZS1ncmFwZS0zOiAjZTU5OWY3Oy0tcm1yLWh1ZS1ncmFwZS00OiAjZGE3N2YyOy0tcm1yLWh1ZS1ncmFwZS01OiAjY2M1ZGU4Oy0tcm1yLWh1ZS1ncmFwZS02OiAjYmU0YmRiOy0tcm1yLWh1ZS1ncmFwZS03OiAjYWUzZWM5Oy0tcm1yLWh1ZS1ncmFwZS04OiAjOWMzNmI1Oy0tcm1yLWh1ZS1ncmFwZS05OiAjODYyZTljOy0tcm1yLWh1ZS12aW9sZXQtMDogI2YzZjBmZjstLXJtci1odWUtdmlvbGV0LTE6ICNlNWRiZmY7LS1ybXItaHVlLXZpb2xldC0yOiAjZDBiZmZmOy0tcm1yLWh1ZS12aW9sZXQtMzogI2IxOTdmYzstLXJtci1odWUtdmlvbGV0LTQ6ICM5Nzc1ZmE7LS1ybXItaHVlLXZpb2xldC01OiAjODQ1ZWY3Oy0tcm1yLWh1ZS12aW9sZXQtNjogIzc5NTBmMjstLXJtci1odWUtdmlvbGV0LTc6ICM3MDQ4ZTg7LS1ybXItaHVlLXZpb2xldC04OiAjNjc0MWQ5Oy0tcm1yLWh1ZS12aW9sZXQtOTogIzVmM2RjNDstLXJtci1odWUtaW5kaWdvLTA6ICNlZGYyZmY7LS1ybXItaHVlLWluZGlnby0xOiAjZGJlNGZmOy0tcm1yLWh1ZS1pbmRpZ28tMjogI2JhYzhmZjstLXJtci1odWUtaW5kaWdvLTM6ICM5MWE3ZmY7LS1ybXItaHVlLWluZGlnby00OiAjNzQ4ZmZjOy0tcm1yLWh1ZS1pbmRpZ28tNTogIzVjN2NmYTstLXJtci1odWUtaW5kaWdvLTY6ICM0YzZlZjU7LS1ybXItaHVlLWluZGlnby03OiAjNDI2M2ViOy0tcm1yLWh1ZS1pbmRpZ28tODogIzNiNWJkYjstLXJtci1odWUtaW5kaWdvLTk6ICMzNjRmYzc7LS1ybXItaHVlLWJsdWUtMDogI2U3ZjVmZjstLXJtci1odWUtYmx1ZS0xOiAjZDBlYmZmOy0tcm1yLWh1ZS1ibHVlLTI6ICNhNWQ4ZmY7LS1ybXItaHVlLWJsdWUtMzogIzc0YzBmYzstLXJtci1odWUtYmx1ZS00OiAjNGRhYmY3Oy0tcm1yLWh1ZS1ibHVlLTU6ICMzMzlhZjA7LS1ybXItaHVlLWJsdWUtNjogIzIyOGJlNjstLXJtci1odWUtYmx1ZS03OiAjMWM3ZWQ2Oy0tcm1yLWh1ZS1ibHVlLTg6ICMxOTcxYzI7LS1ybXItaHVlLWJsdWUtOTogIzE4NjRhYjstLXJtci1odWUtY3lhbi0wOiAjZTNmYWZjOy0tcm1yLWh1ZS1jeWFuLTE6ICNjNWY2ZmE7LS1ybXItaHVlLWN5YW4tMjogIzk5ZTlmMjstLXJtci1odWUtY3lhbi0zOiAjNjZkOWU4Oy0tcm1yLWh1ZS1jeWFuLTQ6ICMzYmM5ZGI7LS1ybXItaHVlLWN5YW4tNTogIzIyYjhjZjstLXJtci1odWUtY3lhbi02OiAjMTVhYWJmOy0tcm1yLWh1ZS1jeWFuLTc6ICMxMDk4YWQ7LS1ybXItaHVlLWN5YW4tODogIzBjODU5OTstLXJtci1odWUtY3lhbi05OiAjMGI3Mjg1Oy0tcm1yLWh1ZS10ZWFsLTA6ICNlNmZjZjU7LS1ybXItaHVlLXRlYWwtMTogI2MzZmFlODstLXJtci1odWUtdGVhbC0yOiAjOTZmMmQ3Oy0tcm1yLWh1ZS10ZWFsLTM6ICM2M2U2YmU7LS1ybXItaHVlLXRlYWwtNDogIzM4ZDlhOTstLXJtci1odWUtdGVhbC01OiAjMjBjOTk3Oy0tcm1yLWh1ZS10ZWFsLTY6ICMxMmI4ODY7LS1ybXItaHVlLXRlYWwtNzogIzBjYTY3ODstLXJtci1odWUtdGVhbC04OiAjMDk5MjY4Oy0tcm1yLWh1ZS10ZWFsLTk6ICMwODdmNWI7LS1ybXItaHVlLWdyZWVuLTA6ICNlYmZiZWU7LS1ybXItaHVlLWdyZWVuLTE6ICNkM2Y5ZDg7LS1ybXItaHVlLWdyZWVuLTI6ICNiMmYyYmI7LS1ybXItaHVlLWdyZWVuLTM6ICM4Y2U5OWE7LS1ybXItaHVlLWdyZWVuLTQ6ICM2OWRiN2M7LS1ybXItaHVlLWdyZWVuLTU6ICM1MWNmNjY7LS1ybXItaHVlLWdyZWVuLTY6ICM0MGMwNTc7LS1ybXItaHVlLWdyZWVuLTc6ICMzN2IyNGQ7LS1ybXItaHVlLWdyZWVuLTg6ICMyZjllNDQ7LS1ybXItaHVlLWdyZWVuLTk6ICMyYjhhM2U7LS1ybXItaHVlLWxpbWUtMDogI2Y0ZmNlMzstLXJtci1odWUtbGltZS0xOiAjZTlmYWM4Oy0tcm1yLWh1ZS1saW1lLTI6ICNkOGY1YTI7LS1ybXItaHVlLWxpbWUtMzogI2MwZWI3NTstLXJtci1odWUtbGltZS00OiAjYTllMzRiOy0tcm1yLWh1ZS1saW1lLTU6ICM5NGQ4MmQ7LS1ybXItaHVlLWxpbWUtNjogIzgyYzkxZTstLXJtci1odWUtbGltZS03OiAjNzRiODE2Oy0tcm1yLWh1ZS1saW1lLTg6ICM2NmE4MGY7LS1ybXItaHVlLWxpbWUtOTogIzVjOTQwZDstLXJtci1odWUteWVsbG93LTA6ICNmZmY5ZGI7LS1ybXItaHVlLXllbGxvdy0xOiAjZmZmM2JmOy0tcm1yLWh1ZS15ZWxsb3ctMjogI2ZmZWM5OTstLXJtci1odWUteWVsbG93LTM6ICNmZmUwNjY7LS1ybXItaHVlLXllbGxvdy00OiAjZmZkNDNiOy0tcm1yLWh1ZS15ZWxsb3ctNTogI2ZjYzQxOTstLXJtci1odWUteWVsbG93LTY6ICNmYWIwMDU7LS1ybXItaHVlLXllbGxvdy03OiAjZjU5ZjAwOy0tcm1yLWh1ZS15ZWxsb3ctODogI2YwOGMwMDstLXJtci1odWUteWVsbG93LTk6ICNlNjc3MDA7LS1ybXItaHVlLW9yYW5nZS0wOiAjZmZmNGU2Oy0tcm1yLWh1ZS1vcmFuZ2UtMTogI2ZmZThjYzstLXJtci1odWUtb3JhbmdlLTI6ICNmZmQ4YTg7LS1ybXItaHVlLW9yYW5nZS0zOiAjZmZjMDc4Oy0tcm1yLWh1ZS1vcmFuZ2UtNDogI2ZmYTk0ZDstLXJtci1odWUtb3JhbmdlLTU6ICNmZjkyMmI7LS1ybXItaHVlLW9yYW5nZS02OiAjZmQ3ZTE0Oy0tcm1yLWh1ZS1vcmFuZ2UtNzogI2Y3NjcwNzstLXJtci1odWUtb3JhbmdlLTg6ICNlODU5MGM7LS1ybXItaHVlLW9yYW5nZS05OiAjZDk0ODBmOy0tcm1yLXJhZGl1cy1ib3JkZXI6IC4yNXJlbTstLXJtci1yYWRpdXMtZXh0cmE6IC41cmVtOy0tcm1yLXJhZGl1cy1jaXJjbGU6IDUwJTstLXJtci1mb250LWZhbWlseS1kZWZhdWx0OiBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOy0tcm1yLWZvbnQtZmFtaWx5LWhlYWRpbmc6IGluaGVyaXQ7LS1ybXItZm9udC1mYW1pbHktbW9ubzogTWVubG8sIG1vbm9zcGFjZTstLXJtci1mb250LXNpemUtMDogMTJweDstLXJtci1mb250LXNpemUtMTogMTRweDstLXJtci1mb250LXNpemUtMjogMTZweDstLXJtci1mb250LXNpemUtMzogMjBweDstLXJtci1mb250LXNpemUtNDogMjRweDstLXJtci1mb250LXNpemUtNTogMzJweDstLXJtci1mb250LXNpemUtNjogNDhweDstLXJtci1mb250LXNpemUtNzogNjRweDstLXJtci1mb250LXNpemUtODogOTZweDstLXJtci1mb250LXNpemUtZGVmYXVsdDogMTZweDstLXJtci1zcGFjZS0xOiA0cHg7LS1ybXItc3BhY2UtMjogOHB4Oy0tcm1yLXNwYWNlLTM6IDE2cHg7LS1ybXItc3BhY2UtNDogMzJweDstLXJtci1zcGFjZS01OiA2NHB4Oy0tcm1yLXNwYWNlLTY6IDEyOHB4Oy0tcm1yLXNwYWNlLTc6IDI1NnB4Oy0tcm1yLXNwYWNlLTg6IDUxMnB4Oy0tcm1yLWZvbnQtd2VpZ2h0LWJvbGQ6IDcwMDstLXJtci1mb250LXdlaWdodC1kZWZhdWx0OiA0MDA7LS1ybXItZm9udC13ZWlnaHQtaGVhZGluZzogNzAwOy0tcm1yLWxldHRlci1zcGFjaW5nLXRpZ2h0OiAtMXB4Oy0tcm1yLWxldHRlci1zcGFjaW5nLWRlZmF1bHQ6IG5vcm1hbDstLXJtci1sZXR0ZXItc3BhY2luZy1sb29zZTogMXB4Oy0tcm1yLWxldHRlci1zcGFjaW5nLXdpZGU6IDNweDstLXJtci1saW5lLWhlaWdodC1oZWFkaW5nOiAxLjI1ZW07LS1ybXItbGluZS1oZWlnaHQtZGVmYXVsdDogMS41ZW07LS1ybXItYm94LXNoYWRvdy0xOiAwIDFweCAxcHggcmdiYSgxMCwgMzEsIDY4LCAuMDgpOy0tcm1yLWJveC1zaGFkb3ctMjogMCAxcHggMXB4IHJnYmEoMTAsIDMxLCA2OCwgLjEpOy0tcm1yLWJveC1zaGFkb3ctMzogMCAxcHggMXB4IHJnYmEoMTAsIDMxLCA2OCwgLjEyKTtmb250LWZhbWlseTp2YXIoLS1ybXItZm9udC1mYW1pbHktZGVmYXVsdCk7bGluZS1oZWlnaHQ6dmFyKC0tcm1yLWxpbmUtaGVpZ2h0LWRlZmF1bHQpO2ZvbnQtd2VpZ2h0OnZhcigtLXJtci1mb250LXdlaWdodC1kZWZhdWx0KX0ucmVtaXJyb3ItdGhlbWUgaDEsLnJlbWlycm9yLXRoZW1lIGgyLC5yZW1pcnJvci10aGVtZSBoMywucmVtaXJyb3ItdGhlbWUgaDQsLnJlbWlycm9yLXRoZW1lIGg1LC5yZW1pcnJvci10aGVtZSBoNntjb2xvcjp2YXIoLS1ybXItY29sb3ItdGV4dCk7Zm9udC1mYW1pbHk6dmFyKC0tcm1yLWZvbnQtZmFtaWx5LWhlYWRpbmcpO2xpbmUtaGVpZ2h0OnZhcigtLXJtci1saW5lLWhlaWdodC1oZWFkaW5nKTtmb250LXdlaWdodDp2YXIoLS1ybXItZm9udC13ZWlnaHQtaGVhZGluZyl9LnJlbWlycm9yLXRoZW1lIGgxe2ZvbnQtc2l6ZTp2YXIoLS1ybXItZm9udC1zaXplLTUpfS5yZW1pcnJvci10aGVtZSBoMntmb250LXNpemU6dmFyKC0tcm1yLWZvbnQtc2l6ZS00KX0ucmVtaXJyb3ItdGhlbWUgaDN7Zm9udC1zaXplOnZhcigtLXJtci1mb250LXNpemUtMyl9LnJlbWlycm9yLXRoZW1lIGg0e2ZvbnQtc2l6ZTp2YXIoLS1ybXItZm9udC1zaXplLTIpfS5yZW1pcnJvci10aGVtZSBoNXtmb250LXNpemU6dmFyKC0tcm1yLWZvbnQtc2l6ZS0xKX0ucmVtaXJyb3ItdGhlbWUgaDZ7Zm9udC1zaXplOnZhcigtLXJtci1mb250LXNpemUtMCl9LnJlbWlycm9yLXRoZW1lIC5Qcm9zZU1pcnJvcnttaW4taGVpZ2h0OnZhcigtLXJtci1zcGFjZS02KTtib3gtc2hhZG93OnZhcigtLXJtci1jb2xvci1ib3JkZXIpIDAgMCAwIC4xZW07cGFkZGluZzp2YXIoLS1ybXItc3BhY2UtMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1ybXItcmFkaXVzLWJvcmRlcik7b3V0bGluZTpub25lfS5yZW1pcnJvci10aGVtZSAuUHJvc2VNaXJyb3I6YWN0aXZlLC5yZW1pcnJvci10aGVtZSAuUHJvc2VNaXJyb3I6Zm9jdXN7Ym94LXNoYWRvdzp2YXIoLS1ybXItY29sb3Itb3V0bGluZSkgMCAwIDAgLjJlbX0ucmVtaXJyb3ItdGhlbWUgLlByb3NlTWlycm9yIHAsLnJlbWlycm9yLXRoZW1lIC5Qcm9zZU1pcnJvciBoMSwucmVtaXJyb3ItdGhlbWUgLlByb3NlTWlycm9yIGgyLC5yZW1pcnJvci10aGVtZSAuUHJvc2VNaXJyb3IgaDMsLnJlbWlycm9yLXRoZW1lIC5Qcm9zZU1pcnJvciBoNCwucmVtaXJyb3ItdGhlbWUgLlByb3NlTWlycm9yIGg1LC5yZW1pcnJvci10aGVtZSAuUHJvc2VNaXJyb3IgaDYsLnJlbWlycm9yLXRoZW1lIC5Qcm9zZU1pcnJvciBzcGFue21hcmdpbjowfS8qISB0YWlsd2luZGNzcyB2My40LjEgfCBNSVQgTGljZW5zZSB8IGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tCiAqLyosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci13aWR0aDowO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2U1ZTdlYn06YmVmb3JlLDphZnRlcnstLXR3LWNvbnRlbnQ6ICIifWh0bWwsOmhvc3R7bGluZS1oZWlnaHQ6MS41Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGFiLXNpemU6NDstby10YWItc2l6ZTo0O3RhYi1zaXplOjQ7Zm9udC1mYW1pbHk6Um9ib3RvLHNhbnMtc2VyaWY7Zm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczpub3JtYWw7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWJvZHl7bWFyZ2luOjA7bGluZS1oZWlnaHQ6aW5oZXJpdH1ocntoZWlnaHQ6MDtjb2xvcjppbmhlcml0O2JvcmRlci10b3Atd2lkdGg6MXB4fWFiYnI6d2hlcmUoW3RpdGxlXSl7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWF7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLE1vbmFjbyxDb25zb2xhcyxMaWJlcmF0aW9uIE1vbm8sQ291cmllciBOZXcsbW9ub3NwYWNlO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6bm9ybWFsO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O21hcmdpbjowO3BhZGRpbmc6MH1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF17LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZX06LW1vei1mb2N1c3Jpbmd7b3V0bGluZTphdXRvfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1ibG9ja3F1b3RlLGRsLGRkLGgxLGgyLGgzLGg0LGg1LGg2LGhyLGZpZ3VyZSxwLHByZXttYXJnaW46MH1maWVsZHNldHttYXJnaW46MDtwYWRkaW5nOjB9bGVnZW5ke3BhZGRpbmc6MH1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9ZGlhbG9ne3BhZGRpbmc6MH10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9aW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIsdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eToxO2NvbG9yOiM5Y2EzYWZ9aW5wdXQ6OnBsYWNlaG9sZGVyLHRleHRhcmVhOjpwbGFjZWhvbGRlcntvcGFjaXR5OjE7Y29sb3I6IzljYTNhZn1idXR0b24sW3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn06ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9aW1nLHN2Zyx2aWRlbyxjYW52YXMsYXVkaW8saWZyYW1lLGVtYmVkLG9iamVjdHtkaXNwbGF5OmJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1pbWcsdmlkZW97bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG99W2hpZGRlbl17ZGlzcGxheTpub25lfTpob3N0ey0tYmFja2dyb3VuZDogMCAwJSAxMDAlOy0tZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1jYXJkOiAwIDAlIDEwMCU7LS1jYXJkLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tcG9wb3ZlcjogMCAwJSAxMDAlOy0tcG9wb3Zlci1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLXByaW1hcnk6IDIyMi4yIDQ3LjQlIDExLjIlOy0tcHJpbWFyeS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLXNlY29uZGFyeTogMjEwIDQwJSA5Ni4xJTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAyMjIuMiA0Ny40JSAxMS4yJTstLW11dGVkOiAwIDAlIDU3LjMlOy0tbXV0ZWQtZm9yZWdyb3VuZDogMjE1LjQgMTYuMyUgNDYuOSU7LS1hY2NlbnQ6IDI3MyA2MCUgNTElOy0tYWNjZW50LWZvcmVncm91bmQ6IDExMCAxMCUgOTQlOy0tZGVzdHJ1Y3RpdmU6IDAgODQuMiUgNjAuMiU7LS1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLWJvcmRlcjogMjE0LjMgMzEuOCUgOTEuNCU7LS1pbnB1dDogMjE0LjMgMzEuOCUgOTEuNCU7LS1yaW5nOiAyMjIuMiA4NCUgNC45JTstLXJhZGl1czogLjVyZW19OnJvb3R7LS1iYWNrZ3JvdW5kOiAxMTAgMTAlIDk0JTstLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tY2FyZDogMCAwJSAxMDAlOy0tY2FyZC1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLXBvcG92ZXI6IDAgMCUgMTAwJTstLXBvcG92ZXItZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wcmltYXJ5OiAyMjIuMiA0Ny40JSAxMS4yJTstLXByaW1hcnktZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1zZWNvbmRhcnk6IDIxMCA0MCUgOTYuMSU7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDogMjIyLjIgNDcuNCUgMTEuMiU7LS1tdXRlZDogMCAwJSA1Ny4zJTstLW11dGVkLWZvcmVncm91bmQ6IDIxNS40IDE2LjMlIDQ2LjklOy0tYWNjZW50OiAyNzMgNjAlIDUxJTstLWFjY2VudC1mb3JlZ3JvdW5kOiAxMTAgMTAlIDk0JTstLWRlc3RydWN0aXZlOiAwIDg0LjIlIDYwLjIlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1ib3JkZXI6IDIxNC4zIDMxLjglIDkxLjQlOy0taW5wdXQ6IDIxMi43IDkuMSUgNzYuMyU7LS1yaW5nOiAyMjIuMiA4NCUgNC45JTstLXJhZGl1czogLjVyZW19KltkYXRhLW1vZGU9ZGFya117LS1iYWNrZ3JvdW5kOiAwIDAlIDQlOy0tZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1jYXJkOiAyMjIuMiA4NCUgNC45JTstLWNhcmQtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1wb3BvdmVyOiAyMjIuMiA4NCUgNC45JTstLXBvcG92ZXItZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1wcmltYXJ5OiAyMTAgNDAlIDk4JTstLXByaW1hcnktZm9yZWdyb3VuZDogMjIyLjIgNDcuNCUgMTEuMiU7LS1zZWNvbmRhcnk6IDIxNy4yIDMyLjYlIDE3LjUlOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tbXV0ZWQ6IDE3OCAyMyUgNzYlOy0tbXV0ZWQtZm9yZWdyb3VuZDogMjE1IDIwLjIlIDY1LjElOy0tYWNjZW50OiAxNTkgNjAlIDUxJTstLWFjY2VudC1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLWRlc3RydWN0aXZlOiAwIDYyLjglIDMwLjYlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1ib3JkZXI6IDIxNy4yIDMyLjYlIDE3LjUlOy0taW5wdXQ6IDIxNy4yIDMyLjYlIDE3LjUlOy0tcmluZzogMjEyLjcgMjYuOCUgODMuOSV9Kntib3JkZXItY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfWJvZHl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkpO2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSl9Kiw6YmVmb3JlLDphZnRlcnstLXR3LWJvcmRlci1zcGFjaW5nLXg6IDA7LS10dy1ib3JkZXItc3BhY2luZy15OiAwOy0tdHctdHJhbnNsYXRlLXg6IDA7LS10dy10cmFuc2xhdGUteTogMDstLXR3LXJvdGF0ZTogMDstLXR3LXNrZXcteDogMDstLXR3LXNrZXcteTogMDstLXR3LXNjYWxlLXg6IDE7LS10dy1zY2FsZS15OiAxOy0tdHctcGFuLXg6IDstLXR3LXBhbi15OiA7LS10dy1waW5jaC16b29tOiA7LS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzOiBwcm94aW1pdHk7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC12aWEtcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uOiA7LS10dy1vcmRpbmFsOiA7LS10dy1zbGFzaGVkLXplcm86IDstLXR3LW51bWVyaWMtZmlndXJlOiA7LS10dy1udW1lcmljLXNwYWNpbmc6IDstLXR3LW51bWVyaWMtZnJhY3Rpb246IDstLXR3LXJpbmctaW5zZXQ6IDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAwcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjogI2ZmZjstLXR3LXJpbmctY29sb3I6IHJnYig1OSAxMzAgMjQ2IC8gLjUpOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OiAwIDAgIzAwMDA7LS10dy1yaW5nLXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3JlZDogMCAwICMwMDAwOy0tdHctYmx1cjogOy0tdHctYnJpZ2h0bmVzczogOy0tdHctY29udHJhc3Q6IDstLXR3LWdyYXlzY2FsZTogOy0tdHctaHVlLXJvdGF0ZTogOy0tdHctaW52ZXJ0OiA7LS10dy1zYXR1cmF0ZTogOy0tdHctc2VwaWE6IDstLXR3LWRyb3Atc2hhZG93OiA7LS10dy1iYWNrZHJvcC1ibHVyOiA7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOiA7LS10dy1iYWNrZHJvcC1jb250cmFzdDogOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOiA7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOiA7LS10dy1iYWNrZHJvcC1pbnZlcnQ6IDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6IDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOiA7LS10dy1iYWNrZHJvcC1zZXBpYTogfTo6YmFja2Ryb3B7LS10dy1ib3JkZXItc3BhY2luZy14OiAwOy0tdHctYm9yZGVyLXNwYWNpbmcteTogMDstLXR3LXRyYW5zbGF0ZS14OiAwOy0tdHctdHJhbnNsYXRlLXk6IDA7LS10dy1yb3RhdGU6IDA7LS10dy1za2V3LXg6IDA7LS10dy1za2V3LXk6IDA7LS10dy1zY2FsZS14OiAxOy0tdHctc2NhbGUteTogMTstLXR3LXBhbi14OiA7LS10dy1wYW4teTogOy0tdHctcGluY2gtem9vbTogOy0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzczogcHJveGltaXR5Oy0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdmlhLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC10by1wb3NpdGlvbjogOy0tdHctb3JkaW5hbDogOy0tdHctc2xhc2hlZC16ZXJvOiA7LS10dy1udW1lcmljLWZpZ3VyZTogOy0tdHctbnVtZXJpYy1zcGFjaW5nOiA7LS10dy1udW1lcmljLWZyYWN0aW9uOiA7LS10dy1yaW5nLWluc2V0OiA7LS10dy1yaW5nLW9mZnNldC13aWR0aDogMHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6ICNmZmY7LS10dy1yaW5nLWNvbG9yOiByZ2IoNTkgMTMwIDI0NiAvIC41KTstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogMCAwICMwMDAwOy0tdHctcmluZy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMCAjMDAwMDstLXR3LWJsdXI6IDstLXR3LWJyaWdodG5lc3M6IDstLXR3LWNvbnRyYXN0OiA7LS10dy1ncmF5c2NhbGU6IDstLXR3LWh1ZS1yb3RhdGU6IDstLXR3LWludmVydDogOy0tdHctc2F0dXJhdGU6IDstLXR3LXNlcGlhOiA7LS10dy1kcm9wLXNoYWRvdzogOy0tdHctYmFja2Ryb3AtYmx1cjogOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczogOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6IDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTogOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTogOy0tdHctYmFja2Ryb3AtaW52ZXJ0OiA7LS10dy1iYWNrZHJvcC1vcGFjaXR5OiA7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTogOy0tdHctYmFja2Ryb3Atc2VwaWE6IH0uY29udGFpbmVye3dpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0bztwYWRkaW5nLXJpZ2h0OjJyZW07cGFkZGluZy1sZWZ0OjJyZW19QG1lZGlhIChtaW4td2lkdGg6IDYwMHB4KXsuY29udGFpbmVye21heC13aWR0aDo2MDBweH19QG1lZGlhIChtaW4td2lkdGg6IDE0MDBweCl7LmNvbnRhaW5lcnttYXgtd2lkdGg6MTQwMHB4fX0udmFsLXJpY2gtdGV4dC1lZGl0b3IgLnJlbWlycm9yLWVkaXRvci5Qcm9zZU1pcnJvcntvdmVyZmxvdy15OmhpZGRlbn0udmFsLXJpY2gtdGV4dC1lZGl0b3IgaDF7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoycmVtO2ZvbnQtd2VpZ2h0OjcwMH0udmFsLXJpY2gtdGV4dC1lZGl0b3IgaDJ7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbTtmb250LXdlaWdodDo3MDB9LnZhbC1yaWNoLXRleHQtZWRpdG9yIGgze2ZvbnQtc2l6ZToxLjEyNXJlbTtsaW5lLWhlaWdodDoxLjc1cmVtO2ZvbnQtd2VpZ2h0OjcwMH0udmFsLXJpY2gtdGV4dC1lZGl0b3IgaDR7Zm9udC1zaXplOjFyZW07bGluZS1oZWlnaHQ6MS41cmVtO2ZvbnQtd2VpZ2h0OjcwMH0udmFsLXJpY2gtdGV4dC1lZGl0b3IgaDV7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS4yNXJlbTtmb250LXdlaWdodDo3MDB9LnZhbC1yaWNoLXRleHQtZWRpdG9yIGg2e2ZvbnQtc2l6ZTouNzVyZW07bGluZS1oZWlnaHQ6MXJlbTtmb250LXdlaWdodDo3MDB9LnZhbC1yaWNoLXRleHQtZWRpdG9yIHB7Zm9udC1zaXplOjFyZW07bGluZS1oZWlnaHQ6MS41cmVtfS52YWwtcmljaC10ZXh0LWVkaXRvciB1bHtsaXN0LXN0eWxlLXR5cGU6ZGlzY30udmFsLXJpY2gtdGV4dC1lZGl0b3Igb2x7bGlzdC1zdHlsZS10eXBlOmRlY2ltYWx9LnZhbC1yaWNoLXRleHQtZWRpdG9yIGxpe21hcmdpbi1sZWZ0OjIwcHh9LnZhbC1yaWNoLXRleHQtZWRpdG9yIGF7Y29sb3I6aHNsKHZhcigtLWFjY2VudCkpO3RleHQtZGVjb3JhdGlvbi1saW5lOnVuZGVybGluZX0uc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDtwYWRkaW5nOjA7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO2NsaXA6cmVjdCgwLDAsMCwwKTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLXdpZHRoOjB9LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5maXhlZHtwb3NpdGlvbjpmaXhlZH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowfS5pbnNldC15LTB7dG9wOjA7Ym90dG9tOjB9Li1sZWZ0LTJ7bGVmdDotLjVyZW19Li1yaWdodC1cWzEwcHhcXXtyaWdodDotMTBweH0uLXRvcC1cWzEwcHhcXXt0b3A6LTEwcHh9Li10b3AtXFs0cHhcXXt0b3A6LTRweH0uYm90dG9tLTB7Ym90dG9tOjB9LmxlZnQtMHtsZWZ0OjB9LmxlZnQtMXtsZWZ0Oi4yNXJlbX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJ7bGVmdDouNXJlbX0ubGVmdC1cWzE2cHhcXXtsZWZ0OjE2cHh9LmxlZnQtXFsxN3B4XF17bGVmdDoxN3B4fS5sZWZ0LVxbMXB4XF17bGVmdDoxcHh9LmxlZnQtXFs1MFwlXF17bGVmdDo1MCV9LnJpZ2h0LTB7cmlnaHQ6MH0ucmlnaHQtMXtyaWdodDouMjVyZW19LnJpZ2h0LTR7cmlnaHQ6MXJlbX0udG9wLTB7dG9wOjB9LnRvcC0xXC8ye3RvcDo1MCV9LnRvcC00e3RvcDoxcmVtfS50b3AtXFsxNnB4XF17dG9wOjE2cHh9LnRvcC1cWzRweFxde3RvcDo0cHh9LnRvcC1cWzUwXCVcXXt0b3A6NTAlfS56LTV7ei1pbmRleDo1fS56LTUwe3otaW5kZXg6NTB9LnotXFsxXF17ei1pbmRleDoxfS56LVxbNDBcXXt6LWluZGV4OjQwfS56LVxbNVxde3otaW5kZXg6NX0uei1vdmVybGF5e3otaW5kZXg6NH0ubS00e21hcmdpbjoxcmVtfS4tbXgtMXttYXJnaW4tbGVmdDotLjI1cmVtO21hcmdpbi1yaWdodDotLjI1cmVtfS5teS0xe21hcmdpbi10b3A6LjI1cmVtO21hcmdpbi1ib3R0b206LjI1cmVtfS5tYi00e21hcmdpbi1ib3R0b206MXJlbX0ubWItNnttYXJnaW4tYm90dG9tOjEuNXJlbX0ubWwtMHttYXJnaW4tbGVmdDowfS5tbC0ye21hcmdpbi1sZWZ0Oi41cmVtfS5tbC00e21hcmdpbi1sZWZ0OjFyZW19Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30ubXItMnttYXJnaW4tcmlnaHQ6LjVyZW19Lm10LTEwe21hcmdpbi10b3A6Mi41cmVtfS5tdC0ye21hcmdpbi10b3A6LjVyZW19Lm10LTN7bWFyZ2luLXRvcDouNzVyZW19Lm10LTR7bWFyZ2luLXRvcDoxcmVtfS5tdC02e21hcmdpbi10b3A6MS41cmVtfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uYXNwZWN0LXNxdWFyZXthc3BlY3QtcmF0aW86MSAvIDF9LmgtMHtoZWlnaHQ6MHB4fS5oLTEwe2hlaWdodDoyLjVyZW19LmgtMTF7aGVpZ2h0OjIuNzVyZW19LmgtMntoZWlnaHQ6LjVyZW19LmgtMlwuNXtoZWlnaHQ6LjYyNXJlbX0uaC0ze2hlaWdodDouNzVyZW19LmgtM1wuNXtoZWlnaHQ6Ljg3NXJlbX0uaC00e2hlaWdodDoxcmVtfS5oLTd7aGVpZ2h0OjEuNzVyZW19LmgtOHtoZWlnaHQ6MnJlbX0uaC05e2hlaWdodDoyLjI1cmVtfS5oLVxbMTAwXF17aGVpZ2h0OjEwMH0uaC1cWzEycHhcXXtoZWlnaHQ6MTJweH0uaC1cWzE2cHhcXXtoZWlnaHQ6MTZweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzFweFxde2hlaWdodDoxcHh9LmgtXFsyMHB4XF17aGVpZ2h0OjIwcHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNHB4XF17aGVpZ2h0OjI0cHh9LmgtXFszMnB4XF17aGVpZ2h0OjMycHh9LmgtXFszNHB4XF17aGVpZ2h0OjM0cHh9LmgtXFs1MHB4XF17aGVpZ2h0OjUwcHh9LmgtXFs4cHhcXXtoZWlnaHQ6OHB4fS5oLVxbY2FsY1woMTAwc3ZoLTMycHhcKVxde2hlaWdodDpjYWxjKDEwMHN2aCAtIDMycHgpfS5oLVxbdmFyXCgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpXF17aGVpZ2h0OnZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCl9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLVxbMzAwcHhcXXttYXgtaGVpZ2h0OjMwMHB4fS5tYXgtaC1cWzUwMHB4XF17bWF4LWhlaWdodDo1MDBweH0ubWF4LWgtc3Zoe21heC1oZWlnaHQ6MTAwc3ZofS5taW4taC1cWzEwMHB4XF17bWluLWhlaWdodDoxMDBweH0udy0we3dpZHRoOjBweH0udy0xMHt3aWR0aDoyLjVyZW19LnctMnt3aWR0aDouNXJlbX0udy0yXC41e3dpZHRoOi42MjVyZW19LnctM3t3aWR0aDouNzVyZW19LnctM1wuNXt3aWR0aDouODc1cmVtfS53LTR7d2lkdGg6MXJlbX0udy01e3dpZHRoOjEuMjVyZW19LnctN3t3aWR0aDoxLjc1cmVtfS53LTcye3dpZHRoOjE4cmVtfS53LTh7d2lkdGg6MnJlbX0udy05e3dpZHRoOjIuMjVyZW19LnctXFsxMnB4XF17d2lkdGg6MTJweH0udy1cWzE2cHhcXXt3aWR0aDoxNnB4fS53LVxbMTgwcHhcXXt3aWR0aDoxODBweH0udy1cWzFweFxde3dpZHRoOjFweH0udy1cWzI0cHhcXXt3aWR0aDoyNHB4fS53LVxbMzAwcHhcXXt3aWR0aDozMDBweH0udy1cWzMycHhcXXt3aWR0aDozMnB4fS53LVxbMzRweFxde3dpZHRoOjM0cHh9LnctXFs0NHB4XF17d2lkdGg6NDRweH0udy1cWzgwcHhcXXt3aWR0aDo4MHB4fS53LVxbY2FsY1woMTAwXCUtMzJweC01MHB4LTE2cHhcKVxde3dpZHRoOmNhbGMoMTAwJSAtIDk4cHgpfS53LVxbY2xhbXBcKDIwMHB4XCw3MFwlXCw4MHZ3XClcXXt3aWR0aDpjbGFtcCgyMDBweCw3MCUsODB2dyl9LnctZml0e3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9LnctZnVsbHt3aWR0aDoxMDAlfS53LXNjcmVlbnt3aWR0aDoxMDB2d30ubWluLXctXFsxMDBweFxde21pbi13aWR0aDoxMDBweH0ubWluLXctXFsyMDBweFxde21pbi13aWR0aDoyMDBweH0ubWluLXctXFszMjBweFxde21pbi13aWR0aDozMjBweH0ubWluLXctXFs4cmVtXF17bWluLXdpZHRoOjhyZW19Lm1pbi13LVxbdmFyXCgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoXClcXXttaW4td2lkdGg6dmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpfS5tYXgtdy1cWzEwdndcXXttYXgtd2lkdGg6MTB2d30ubWF4LXctXFszMDBweFxde21heC13aWR0aDozMDBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWF4LXctbGd7bWF4LXdpZHRoOjMycmVtfS5tYXgtdy14bHttYXgtd2lkdGg6MzZyZW19LmZsZXgtMXtmbGV4OjEgMSAwJX0uZmxleC1zaHJpbmstMCwuc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uYm9yZGVyLWNvbGxhcHNle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNsYXRlLXgtXFstNTBcJVxdey0tdHctdHJhbnNsYXRlLXg6IC01MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnRyYW5zbGF0ZS15LVxbLTUwXCVcXXstLXR3LXRyYW5zbGF0ZS15OiAtNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS4tcm90YXRlLTE4MHstLXR3LXJvdGF0ZTogLTE4MGRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNmb3Jte3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfUBrZXlmcmFtZXMgc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5hbmltYXRlLXNwaW57YW5pbWF0aW9uOnNwaW4gMXMgbGluZWFyIGluZmluaXRlfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ncmFie2N1cnNvcjpncmFifS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXNlLXJlc2l6ZXtjdXJzb3I6c2UtcmVzaXplfS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0uYXBwZWFyYW5jZS1ub25ley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZX0uZ3JpZC1jb2xzLTN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLG1pbm1heCgwLDFmcikpfS5ncmlkLWNvbHMtXFttaW4tY29udGVudF8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWluLWNvbnRlbnQgMWZyfS5ncmlkLXJvd3MtXFsxZnJcLF9taW4tY29udGVudFxde2dyaWQtdGVtcGxhdGUtcm93czoxZnIgbWluLWNvbnRlbnR9LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LWNvbC1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS5wbGFjZS1jb250ZW50LWNlbnRlcntwbGFjZS1jb250ZW50OmNlbnRlcn0uaXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uaXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZ2FwLTF7Z2FwOi4yNXJlbX0uZ2FwLTJ7Z2FwOi41cmVtfS5nYXAtM3tnYXA6Ljc1cmVtfS5nYXAtNHtnYXA6MXJlbX0uZ2FwLVxbMFwuNWVtXF17Z2FwOi41ZW19LmdhcC14LTF7LW1vei1jb2x1bW4tZ2FwOi4yNXJlbTtjb2x1bW4tZ2FwOi4yNXJlbX0uZ2FwLXgtMnstbW96LWNvbHVtbi1nYXA6LjVyZW07Y29sdW1uLWdhcDouNXJlbX0uZ2FwLXgtM3stbW96LWNvbHVtbi1nYXA6Ljc1cmVtO2NvbHVtbi1nYXA6Ljc1cmVtfS5nYXAteC00ey1tb3otY29sdW1uLWdhcDoxcmVtO2NvbHVtbi1nYXA6MXJlbX0uZ2FwLXktMXtyb3ctZ2FwOi4yNXJlbX0uZ2FwLXktMntyb3ctZ2FwOi41cmVtfS5nYXAteS00e3Jvdy1nYXA6MXJlbX0uZ2FwLXktNXtyb3ctZ2FwOjEuMjVyZW19LnNwYWNlLXgtMT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDttYXJnaW4tcmlnaHQ6Y2FsYyguMjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX0uc3BhY2UteS0xPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTFcLjU+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC4zNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4zNzVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS0yPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LmRpdmlkZS15Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctZGl2aWRlLXktcmV2ZXJzZTogMDtib3JkZXItdG9wLXdpZHRoOmNhbGMoMXB4ICogY2FsYygxIC0gdmFyKC0tdHctZGl2aWRlLXktcmV2ZXJzZSkpKTtib3JkZXItYm90dG9tLXdpZHRoOmNhbGMoMXB4ICogdmFyKC0tdHctZGl2aWRlLXktcmV2ZXJzZSkpfS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy1zY3JvbGx7b3ZlcmZsb3c6c2Nyb2xsfS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5vdmVyZmxvdy14LWhpZGRlbntvdmVyZmxvdy14OmhpZGRlbn0udHJ1bmNhdGV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFtpbmhlcml0XF17Ym9yZGVyLXJhZGl1czppbmhlcml0fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czo5OTk5cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0ucm91bmRlZC1zbXtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDRweCl9LnJvdW5kZWQtYi1ub25le2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5yb3VuZGVkLWItc217Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDRweCl9LnJvdW5kZWQtdC1ub25le2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5ib3JkZXJ7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTIsLmJvcmRlci1cWzJweFxde2JvcmRlci13aWR0aDoycHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYi0we2JvcmRlci1ib3R0b20td2lkdGg6MHB4fS5ib3JkZXItYi0ye2JvcmRlci1ib3R0b20td2lkdGg6MnB4fS5ib3JkZXItbHtib3JkZXItbGVmdC13aWR0aDoxcHh9LmJvcmRlci1sLTJ7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItdHtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLXQtMHtib3JkZXItdG9wLXdpZHRoOjBweH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5ib3JkZXItYm9yZGVye2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6aHNsKHZhcigtLWlucHV0KSl9LmJvcmRlci1wcmltYXJ5e2JvcmRlci1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5ib3JkZXItdHJhbnNwYXJlbnR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5ib3JkZXItbC10cmFuc3BhcmVudHtib3JkZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudH0uYm9yZGVyLXQtdHJhbnNwYXJlbnR7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudH0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5iZy1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0uYmctYmFja2dyb3VuZFwvODB7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAuOCl9LmJnLWJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpKX0uYmctY2FyZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkKSl9LmJnLWNhcmQtZm9yZWdyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1jYXJkLWZvcmVncm91bmQpKX0uYmctZGVzdHJ1Y3RpdmV7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKX0uYmctbXV0ZWR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpKX0uYmctcG9wb3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wb3BvdmVyKSl9LmJnLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5iZy1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tc2Vjb25kYXJ5KSl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJnLXdoaXRley0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigyNTUgMjU1IDI1NSAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uYmctZ3JhZGllbnQtdG8tYntiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdmFyKC0tdHctZ3JhZGllbnQtc3RvcHMpKX0uYmctZ3JhZGllbnQtdG8tYnJ7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tIHJpZ2h0LHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSl9LmZyb20tYmFja2dyb3VuZFwvOTB7LS10dy1ncmFkaWVudC1mcm9tOiBoc2wodmFyKC0tYmFja2dyb3VuZCkgLyAuOSkgdmFyKC0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbik7LS10dy1ncmFkaWVudC10bzogaHNsKHZhcigtLWJhY2tncm91bmQpIC8gMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6IHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCB2YXIoLS10dy1ncmFkaWVudC10byl9LmZyb20tY2FyZHstLXR3LWdyYWRpZW50LWZyb206IGhzbCh2YXIoLS1jYXJkKSkgdmFyKC0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbik7LS10dy1ncmFkaWVudC10bzogaHNsKHZhcigtLWNhcmQpIC8gMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6IHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCB2YXIoLS10dy1ncmFkaWVudC10byl9LmZyb20tdHJhbnNwYXJlbnR7LS10dy1ncmFkaWVudC1mcm9tOiB0cmFuc3BhcmVudCB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXRvOiByZ2IoMCAwIDAgLyAwKSB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbik7LS10dy1ncmFkaWVudC1zdG9wczogdmFyKC0tdHctZ3JhZGllbnQtZnJvbSksIHZhcigtLXR3LWdyYWRpZW50LXRvKX0uZnJvbS00MFwley0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbjogNDAlfS5mcm9tLTUwXCV7LS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uOiA1MCV9LnRvLWJhY2tncm91bmR7LS10dy1ncmFkaWVudC10bzogaHNsKHZhcigtLWJhY2tncm91bmQpKSB2YXIoLS10dy1ncmFkaWVudC10by1wb3NpdGlvbil9LmZpbGwtY3VycmVudHtmaWxsOmN1cnJlbnRDb2xvcn0uc3Ryb2tlLVxbMnB4XF17c3Ryb2tlLXdpZHRoOjJweH0uc3Ryb2tlLVxbM3B4XF17c3Ryb2tlLXdpZHRoOjNweH0ub2JqZWN0LWNvbnRhaW57LW8tb2JqZWN0LWZpdDpjb250YWluO29iamVjdC1maXQ6Y29udGFpbn0ucC0we3BhZGRpbmc6MH0ucC0xe3BhZGRpbmc6LjI1cmVtfS5wLTEwe3BhZGRpbmc6Mi41cmVtfS5wLTJ7cGFkZGluZzouNXJlbX0ucC0ze3BhZGRpbmc6Ljc1cmVtfS5wLTR7cGFkZGluZzoxcmVtfS5wLTZ7cGFkZGluZzoxLjVyZW19LnAtOHtwYWRkaW5nOjJyZW19LnAtXFsxcHhcXXtwYWRkaW5nOjFweH0ucHgtMXtwYWRkaW5nLWxlZnQ6LjI1cmVtO3BhZGRpbmctcmlnaHQ6LjI1cmVtfS5weC0ye3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5weC0yXC41e3BhZGRpbmctbGVmdDouNjI1cmVtO3BhZGRpbmctcmlnaHQ6LjYyNXJlbX0ucHgtM3twYWRkaW5nLWxlZnQ6Ljc1cmVtO3BhZGRpbmctcmlnaHQ6Ljc1cmVtfS5weC00e3BhZGRpbmctbGVmdDoxcmVtO3BhZGRpbmctcmlnaHQ6MXJlbX0ucHgtNXtwYWRkaW5nLWxlZnQ6MS4yNXJlbTtwYWRkaW5nLXJpZ2h0OjEuMjVyZW19LnB4LTZ7cGFkZGluZy1sZWZ0OjEuNXJlbTtwYWRkaW5nLXJpZ2h0OjEuNXJlbX0ucHgtOHtwYWRkaW5nLWxlZnQ6MnJlbTtwYWRkaW5nLXJpZ2h0OjJyZW19LnB4LVxbMjRweFxde3BhZGRpbmctbGVmdDoyNHB4O3BhZGRpbmctcmlnaHQ6MjRweH0ucHgtXFsycHhcXXtwYWRkaW5nLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MnB4fS5weS0xe3BhZGRpbmctdG9wOi4yNXJlbTtwYWRkaW5nLWJvdHRvbTouMjVyZW19LnB5LTFcLjV7cGFkZGluZy10b3A6LjM3NXJlbTtwYWRkaW5nLWJvdHRvbTouMzc1cmVtfS5weS0ye3BhZGRpbmctdG9wOi41cmVtO3BhZGRpbmctYm90dG9tOi41cmVtfS5weS0ze3BhZGRpbmctdG9wOi43NXJlbTtwYWRkaW5nLWJvdHRvbTouNzVyZW19LnB5LTR7cGFkZGluZy10b3A6MXJlbTtwYWRkaW5nLWJvdHRvbToxcmVtfS5weS02e3BhZGRpbmctdG9wOjEuNXJlbTtwYWRkaW5nLWJvdHRvbToxLjVyZW19LnBiLTB7cGFkZGluZy1ib3R0b206MH0ucGItNHtwYWRkaW5nLWJvdHRvbToxcmVtfS5wYi04e3BhZGRpbmctYm90dG9tOjJyZW19LnBsLTB7cGFkZGluZy1sZWZ0OjB9LnBsLTR7cGFkZGluZy1sZWZ0OjFyZW19LnBsLTZ7cGFkZGluZy1sZWZ0OjEuNXJlbX0ucGwtOHtwYWRkaW5nLWxlZnQ6MnJlbX0ucGwtXFszMDBweFxde3BhZGRpbmctbGVmdDozMDBweH0ucHItMntwYWRkaW5nLXJpZ2h0Oi41cmVtfS5wci00e3BhZGRpbmctcmlnaHQ6MXJlbX0ucHQtMHtwYWRkaW5nLXRvcDowfS5wdC0xe3BhZGRpbmctdG9wOi4yNXJlbX0ucHQtMntwYWRkaW5nLXRvcDouNXJlbX0ucHQtNHtwYWRkaW5nLXRvcDoxcmVtfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZm9udC1zYW5ze2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmfS5mb250LXNlcmlme2ZvbnQtZmFtaWx5OlNwYWNlIE1vbm8sbW9ub3NwYWNlfS50ZXh0LTJ4bHtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjJyZW19LnRleHQtNHhse2ZvbnQtc2l6ZToyLjI1cmVtO2xpbmUtaGVpZ2h0OjIuNXJlbX0udGV4dC1cWzBcLjhyZW1cXXtmb250LXNpemU6LjhyZW19LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtYmFzZXtmb250LXNpemU6MXJlbTtsaW5lLWhlaWdodDoxLjVyZW19LnRleHQtbGd7Zm9udC1zaXplOjEuMTI1cmVtO2xpbmUtaGVpZ2h0OjEuNzVyZW19LnRleHQtc217Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS4yNXJlbX0udGV4dC14bHtmb250LXNpemU6MS4yNXJlbTtsaW5lLWhlaWdodDoxLjc1cmVtfS50ZXh0LXhze2ZvbnQtc2l6ZTouNzVyZW07bGluZS1oZWlnaHQ6MXJlbX0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1tZWRpdW17Zm9udC13ZWlnaHQ6NTAwfS5mb250LW5vcm1hbHtmb250LXdlaWdodDo0MDB9LmZvbnQtc2VtaWJvbGR7Zm9udC13ZWlnaHQ6NjAwfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LmxlYWRpbmctOHtsaW5lLWhlaWdodDoycmVtfS5sZWFkaW5nLW5vbmV7bGluZS1oZWlnaHQ6MX0udHJhY2tpbmctdGlnaHR7bGV0dGVyLXNwYWNpbmc6LS4wMjVlbX0udHJhY2tpbmctd2lkZXN0e2xldHRlci1zcGFjaW5nOi4xZW19LnRleHQtYWNjZW50e2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0udGV4dC1hY2NlbnQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0udGV4dC1iYWNrZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LnRleHQtY2FyZC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1jYXJkLWZvcmVncm91bmQpKX0udGV4dC1jdXJyZW50e2NvbG9yOmN1cnJlbnRDb2xvcn0udGV4dC1kZXN0cnVjdGl2ZXtjb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpKX0udGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kKSl9LnRleHQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS50ZXh0LW11dGVke2NvbG9yOmhzbCh2YXIoLS1tdXRlZCkpfS50ZXh0LW11dGVkLWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0udGV4dC1wb3BvdmVyLWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLXBvcG92ZXItZm9yZWdyb3VuZCkpfS50ZXh0LXByaW1hcnl7Y29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0udGV4dC1wcmltYXJ5LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS50ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCkpfS50ZXh0LXdoaXRley0tdHctdGV4dC1vcGFjaXR5OiAxO2NvbG9yOnJnYigyNTUgMjU1IDI1NSAvIHZhcigtLXR3LXRleHQtb3BhY2l0eSkpfS51bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uLWxpbmU6dW5kZXJsaW5lfS5saW5lLXRocm91Z2h7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bGluZS10aHJvdWdofS51bmRlcmxpbmUtb2Zmc2V0LTR7dGV4dC11bmRlcmxpbmUtb2Zmc2V0OjRweH0uYW50aWFsaWFzZWR7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktMTAwe29wYWNpdHk6MX0ub3BhY2l0eS01MHtvcGFjaXR5Oi41fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktNzB7b3BhY2l0eTouN30ubWl4LWJsZW5kLWRpZmZlcmVuY2V7bWl4LWJsZW5kLW1vZGU6ZGlmZmVyZW5jZX0uc2hhZG93ey0tdHctc2hhZG93OiAwIDFweCAzcHggMCByZ2IoMCAwIDAgLyAuMSksIDAgMXB4IDJweCAtMXB4IHJnYigwIDAgMCAvIC4xKTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1sZ3stLXR3LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2IoMCAwIDAgLyAuMSksIDAgNHB4IDZweCAtNHB4IHJnYigwIDAgMCAvIC4xKTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDEwcHggMTVweCAtM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgNHB4IDZweCAtNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LW1key0tdHctc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2IoMCAwIDAgLyAuMSksIDAgMnB4IDRweCAtMnB4IHJnYigwIDAgMCAvIC4xKTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDRweCA2cHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpLCAwIDJweCA0cHggLTJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1zbXstLXR3LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gLjA1KTstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDFweCAycHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLHZhcigtLXR3LXNoYWRvdyl9Lm91dGxpbmUtbm9uZXtvdXRsaW5lOjJweCBzb2xpZCB0cmFuc3BhcmVudDtvdXRsaW5lLW9mZnNldDoycHh9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTpzb2xpZH0ucmluZy0wey0tdHctcmluZy1vZmZzZXQtc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkgdmFyKC0tdHctcmluZy1vZmZzZXQtY29sb3IpOy0tdHctcmluZy1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIGNhbGMoMHB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdywgMCAwICMwMDAwKX0ucmluZy1vZmZzZXQtYmFja2dyb3VuZHstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiBoc2wodmFyKC0tYmFja2dyb3VuZCkpfS5kcm9wLXNoYWRvdy0yeGx7LS10dy1kcm9wLXNoYWRvdzogZHJvcC1zaGFkb3coMCAyNXB4IDI1cHggcmdiKDAgMCAwIC8gLjE1KSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIpIHZhcigtLXR3LWJyaWdodG5lc3MpIHZhcigtLXR3LWNvbnRyYXN0KSB2YXIoLS10dy1ncmF5c2NhbGUpIHZhcigtLXR3LWh1ZS1yb3RhdGUpIHZhcigtLXR3LWludmVydCkgdmFyKC0tdHctc2F0dXJhdGUpIHZhcigtLXR3LXNlcGlhKSB2YXIoLS10dy1kcm9wLXNoYWRvdyl9LmRyb3Atc2hhZG93LVxbMHB4XzBweF8xMnB4X2hzbFwodmFyXCgtLWFjY2VudFwpXClcXXstLXR3LWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdygwcHggMHB4IDEycHggaHNsKHZhcigtLWFjY2VudCkpKTtmaWx0ZXI6dmFyKC0tdHctYmx1cikgdmFyKC0tdHctYnJpZ2h0bmVzcykgdmFyKC0tdHctY29udHJhc3QpIHZhcigtLXR3LWdyYXlzY2FsZSkgdmFyKC0tdHctaHVlLXJvdGF0ZSkgdmFyKC0tdHctaW52ZXJ0KSB2YXIoLS10dy1zYXR1cmF0ZSkgdmFyKC0tdHctc2VwaWEpIHZhcigtLXR3LWRyb3Atc2hhZG93KX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5iYWNrZHJvcC1ibHVyLWxney0tdHctYmFja2Ryb3AtYmx1cjogYmx1cigxNnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyKSB2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzKSB2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCkgdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlKSB2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlKSB2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQpIHZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHkpIHZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlKSB2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKX0uYmFja2Ryb3AtYmx1ci1zbXstLXR3LWJhY2tkcm9wLWJsdXI6IGJsdXIoNHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyKSB2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzKSB2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCkgdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlKSB2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlKSB2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQpIHZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHkpIHZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlKSB2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKX0udHJhbnNpdGlvbnt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLGZpbHRlcixiYWNrZHJvcC1maWx0ZXI7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2Usb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSxmaWx0ZXIsYmFja2Ryb3AtZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30udHJhbnNpdGlvbi1hbGx7dHJhbnNpdGlvbi1wcm9wZXJ0eTphbGw7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS50cmFuc2l0aW9uLXRyYW5zZm9ybXt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc31Aa2V5ZnJhbWVzIGVudGVyezAle29wYWNpdHk6dmFyKC0tdHctZW50ZXItb3BhY2l0eSwgMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1lbnRlci10cmFuc2xhdGUteSwgMCksMCkgc2NhbGUzZCh2YXIoLS10dy1lbnRlci1zY2FsZSwgMSksdmFyKC0tdHctZW50ZXItc2NhbGUsIDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLCAxKSkgcm90YXRlKHZhcigtLXR3LWVudGVyLXJvdGF0ZSwgMCkpfX1Aa2V5ZnJhbWVzIGV4aXR7dG97b3BhY2l0eTp2YXIoLS10dy1leGl0LW9wYWNpdHksIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS15LCAwKSwwKSBzY2FsZTNkKHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpKSByb3RhdGUodmFyKC0tdHctZXhpdC1yb3RhdGUsIDApKX19LmFuaW1hdGUtaW57YW5pbWF0aW9uLW5hbWU6ZW50ZXI7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1lbnRlci1vcGFjaXR5OiBpbml0aWFsOy0tdHctZW50ZXItc2NhbGU6IGluaXRpYWw7LS10dy1lbnRlci1yb3RhdGU6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteDogaW5pdGlhbDstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiBpbml0aWFsfS5mYWRlLWluLTB7LS10dy1lbnRlci1vcGFjaXR5OiAwfS56b29tLWluLTk1ey0tdHctZW50ZXItc2NhbGU6IC45NX0uZHVyYXRpb24tMjAwe2FuaW1hdGlvbi1kdXJhdGlvbjouMnN9LmZpbGVcOmJvcmRlci0wOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3JkZXItd2lkdGg6MHB4fS5maWxlXDpiZy10cmFuc3BhcmVudDo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZmlsZVw6dGV4dC1zbTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS4yNXJlbX0uZmlsZVw6Zm9udC1tZWRpdW06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQtd2VpZ2h0OjUwMH0ucGxhY2Vob2xkZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjpwbGFjZWhvbGRlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5mb2N1cy13aXRoaW5cOnJlbGF0aXZlOmZvY3VzLXdpdGhpbntwb3NpdGlvbjpyZWxhdGl2ZX0uaG92ZXJcOnctXFszcHhcXTpob3Zlcnt3aWR0aDozcHh9LmhvdmVyXDpiZy1hY2NlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmhvdmVyXDpiZy1ib3JkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmhvdmVyXDpiZy1kZXN0cnVjdGl2ZVwvOTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tZGVzdHJ1Y3RpdmUpIC8gLjkpfS5ob3Zlclw6YmctbXV0ZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tbXV0ZWQpKX0uaG92ZXJcOmJnLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5ob3Zlclw6YmctcHJpbWFyeVwvOTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkgLyAuOSl9LmhvdmVyXDpiZy1zZWNvbmRhcnlcLzgwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXNlY29uZGFyeSkgLyAuOCl9LmhvdmVyXDp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmhvdmVyXDp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmhvdmVyXDp1bmRlcmxpbmU6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uLWxpbmU6dW5kZXJsaW5lfS5ob3Zlclw6b3BhY2l0eS0xMDA6aG92ZXJ7b3BhY2l0eToxfS5mb2N1c1w6YmctYWNjZW50OmZvY3Vze2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5mb2N1c1w6YmctcHJpbWFyeTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmZvY3VzXDp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kOmZvY3Vze2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpfS5mb2N1c1w6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQ6Zm9jdXN7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS5mb2N1c1w6b3V0bGluZS1ub25lOmZvY3Vze291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXNcOnJpbmctMjpmb2N1c3stLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LmZvY3VzXDpyaW5nLXJpbmc6Zm9jdXN7LS10dy1yaW5nLWNvbG9yOiBoc2wodmFyKC0tcmluZykpfS5mb2N1c1w6cmluZy1vZmZzZXQtMjpmb2N1c3stLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtbm9uZTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1hY2NlbnQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZm9jdXMtdmlzaWJsZVw6cmluZy0yOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSB2YXIoLS10dy1yaW5nLW9mZnNldC1jb2xvcik7LS10dy1yaW5nLXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93LCAwIDAgIzAwMDApfS5mb2N1cy12aXNpYmxlXDpyaW5nLXJpbmc6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6IGhzbCh2YXIoLS1yaW5nKSl9LmZvY3VzLXZpc2libGVcOnJpbmctb2Zmc2V0LTI6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOiAycHh9LmZvY3VzLXZpc2libGVcOnJpbmctb2Zmc2V0LWJhY2tncm91bmQ6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiBoc2wodmFyKC0tYmFja2dyb3VuZCkpfS5kaXNhYmxlZFw6cG9pbnRlci1ldmVudHMtbm9uZTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX0ucGVlcjpkaXNhYmxlZH4ucGVlci1kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0ucGVlcjpkaXNhYmxlZH4ucGVlci1kaXNhYmxlZFw6b3BhY2l0eS03MHtvcGFjaXR5Oi43fS5hcmlhLXNlbGVjdGVkXDpiZy1hY2NlbnRbYXJpYS1zZWxlY3RlZD10cnVlXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uYXJpYS1zZWxlY3RlZFw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFthcmlhLXNlbGVjdGVkPXRydWVde2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpfS5hcmlhLXNlbGVjdGVkXDpvcGFjaXR5LTEwMFthcmlhLXNlbGVjdGVkPXRydWVde29wYWNpdHk6MX0uZGF0YS1cW2Rpc2FibGVkXF1cOnBvaW50ZXItZXZlbnRzLW5vbmVbZGF0YS1kaXNhYmxlZF17cG9pbnRlci1ldmVudHM6bm9uZX0uZGF0YS1cW3NpZGVcPWJvdHRvbVxdXDp0cmFuc2xhdGUteS0xW2RhdGEtc2lkZT1ib3R0b21dey0tdHctdHJhbnNsYXRlLXk6IC4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6LXRyYW5zbGF0ZS14LTFbZGF0YS1zaWRlPWxlZnRdey0tdHctdHJhbnNsYXRlLXg6IC0uMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzaWRlXD1yaWdodFxdXDp0cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1yaWdodF17LS10dy10cmFuc2xhdGUteDogLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc2lkZVw9dG9wXF1cOi10cmFuc2xhdGUteS0xW2RhdGEtc2lkZT10b3Bdey0tdHctdHJhbnNsYXRlLXk6IC0uMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzdGF0ZVw9Y2hlY2tlZFxdXDp0cmFuc2xhdGUteC01W2RhdGEtc3RhdGU9Y2hlY2tlZF17LS10dy10cmFuc2xhdGUteDogMS4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOnRyYW5zbGF0ZS14LVxbMTVweFxdW2RhdGEtc3RhdGU9Y2hlY2tlZF17LS10dy10cmFuc2xhdGUteDogMTVweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3N0YXRlXD11bmNoZWNrZWRcXVw6dHJhbnNsYXRlLXgtMFtkYXRhLXN0YXRlPXVuY2hlY2tlZF17LS10dy10cmFuc2xhdGUteDogMHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfUBrZXlmcmFtZXMgYWNjb3JkaW9uLXVwezAle2hlaWdodDp2YXIoLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQpfXRve2hlaWdodDowfX0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6YW5pbWF0ZS1hY2NvcmRpb24tdXBbZGF0YS1zdGF0ZT1jbG9zZWRde2FuaW1hdGlvbjphY2NvcmRpb24tdXAgLjJzIGVhc2Utb3V0fUBrZXlmcmFtZXMgYWNjb3JkaW9uLWRvd257MCV7aGVpZ2h0OjB9dG97aGVpZ2h0OnZhcigtLXJhZGl4LWFjY29yZGlvbi1jb250ZW50LWhlaWdodCl9fS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YW5pbWF0ZS1hY2NvcmRpb24tZG93bltkYXRhLXN0YXRlPW9wZW5de2FuaW1hdGlvbjphY2NvcmRpb24tZG93biAuMnMgZWFzZS1vdXR9LmRhdGEtXFtzdGF0ZVw9YWN0aXZlXF1cOmJnLWJhY2tncm91bmRbZGF0YS1zdGF0ZT1hY3RpdmVde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOmJnLWFjY2VudFtkYXRhLXN0YXRlPWNoZWNrZWRde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6YmctcHJpbWFyeVtkYXRhLXN0YXRlPWNoZWNrZWRde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOmJnLXNsYXRlLTgwMFtkYXRhLXN0YXRlPWNoZWNrZWRdey0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigzMCA0MSA1OSAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uZGF0YS1cW3N0YXRlXD1vblxdXDpiZy1hY2NlbnRbZGF0YS1zdGF0ZT1vbl0sLmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpiZy1hY2NlbnRbZGF0YS1zdGF0ZT1vcGVuXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZGF0YS1cW3N0YXRlXD11bmNoZWNrZWRcXVw6YmctcHJpbWFyeVtkYXRhLXN0YXRlPXVuY2hlY2tlZF17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS5kYXRhLVxbc3RhdGVcPXVuY2hlY2tlZFxdXDpiZy1zbGF0ZS04MDBbZGF0YS1zdGF0ZT11bmNoZWNrZWRdey0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigzMCA0MSA1OSAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uZGF0YS1cW3N0YXRlXD1hY3RpdmVcXVw6dGV4dC1mb3JlZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmRbZGF0YS1zdGF0ZT1jaGVja2VkXXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9uXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9wZW5de2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtkaXNhYmxlZFxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWRde29wYWNpdHk6LjV9LmRhdGEtXFtzdGF0ZVw9YWN0aXZlXF1cOnNoYWRvdy1zbVtkYXRhLXN0YXRlPWFjdGl2ZV17LS10dy1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIC4wNSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggMnB4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YW5pbWF0ZS1pbltkYXRhLXN0YXRlPW9wZW5de2FuaW1hdGlvbi1uYW1lOmVudGVyO2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZW50ZXItb3BhY2l0eTogaW5pdGlhbDstLXR3LWVudGVyLXNjYWxlOiBpbml0aWFsOy0tdHctZW50ZXItcm90YXRlOiBpbml0aWFsOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6YW5pbWF0ZS1vdXRbZGF0YS1zdGF0ZT1jbG9zZWRde2FuaW1hdGlvbi1uYW1lOmV4aXQ7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1leGl0LW9wYWNpdHk6IGluaXRpYWw7LS10dy1leGl0LXNjYWxlOiBpbml0aWFsOy0tdHctZXhpdC1yb3RhdGU6IGluaXRpYWw7LS10dy1leGl0LXRyYW5zbGF0ZS14OiBpbml0aWFsOy0tdHctZXhpdC10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6ZmFkZS1vdXQtMFtkYXRhLXN0YXRlPWNsb3NlZF17LS10dy1leGl0LW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpmYWRlLWluLTBbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnpvb20tb3V0LTk1W2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtc2NhbGU6IC45NX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnpvb20taW4tOTVbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiAtLjVyZW19LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOnNsaWRlLWluLWZyb20tcmlnaHQtMltkYXRhLXNpZGU9bGVmdF17LS10dy1lbnRlci10cmFuc2xhdGUteDogLjVyZW19LmRhdGEtXFtzaWRlXD1yaWdodFxdXDpzbGlkZS1pbi1mcm9tLWxlZnQtMltkYXRhLXNpZGU9cmlnaHRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IC0uNXJlbX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC41cmVtfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpzbGlkZS1vdXQtdG8tbGVmdC0xXC8yW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IC01MCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by10b3AtXFs0OFwlXF1bZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC10cmFuc2xhdGUteTogLTQ4JX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tbGVmdC0xXC8yW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteDogLTUwJX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tdG9wLVxbNDhcJVxdW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteTogLTQ4JX06aXMoW2RhdGEtbW9kZT1kYXJrXSAuZGFya1w6Ym9yZGVyLXdoaXRlKXstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpfUBtZWRpYSAobWluLXdpZHRoOiA2NDBweCl7LnNtXDptdC0we21hcmdpbi10b3A6MH0uc21cOmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uc21cOmp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnNtXDpqdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnNtXDpzcGFjZS14LTI+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS14LXJldmVyc2U6IDA7bWFyZ2luLXJpZ2h0OmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfS5zbVw6c3BhY2UteC00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteC1yZXZlcnNlOiAwO21hcmdpbi1yaWdodDpjYWxjKDFyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKDFyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9LnNtXDpzcGFjZS15LTA+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKDBweCAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMHB4ICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNtXDpyb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uc21cOnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7Lm1kXDpyZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWRcOmZsZXh7ZGlzcGxheTpmbGV4fS5tZFw6aGlkZGVue2Rpc3BsYXk6bm9uZX0ubWRcOnctXFszMDBweFxde3dpZHRoOjMwMHB4fS5tZFw6dy1mdWxse3dpZHRoOjEwMCV9Lm1kXDpweC00e3BhZGRpbmctbGVmdDoxcmVtO3BhZGRpbmctcmlnaHQ6MXJlbX0ubWRcOnBsLTB7cGFkZGluZy1sZWZ0OjB9fS5cW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXClcXVw6YmctYWNjZW50OmhhcyhbYXJpYS1zZWxlY3RlZF0pe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5maXJzdFw6XFtcJlw6aGFzXChcW2FyaWEtc2VsZWN0ZWRcXVwpXF1cOnJvdW5kZWQtbC1tZDpoYXMoW2FyaWEtc2VsZWN0ZWRdKTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5sYXN0XDpcW1wmXDpoYXNcKFxbYXJpYS1zZWxlY3RlZFxdXClcXVw6cm91bmRlZC1yLW1kOmhhcyhbYXJpYS1zZWxlY3RlZF0pOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5cW1wmXFtkYXRhLXN0YXRlXD1vcGVuXF1cPnN2Z1xdXDpyb3RhdGUtMTgwW2RhdGEtc3RhdGU9b3Blbl0+c3Zney0tdHctcm90YXRlOiAxODBkZWc7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDpweC0yIFtjbWRrLWdyb3VwLWhlYWRpbmdde3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6cHktMVwuNSBbY21kay1ncm91cC1oZWFkaW5nXXtwYWRkaW5nLXRvcDouMzc1cmVtO3BhZGRpbmctYm90dG9tOi4zNzVyZW19LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDp0ZXh0LXhzIFtjbWRrLWdyb3VwLWhlYWRpbmdde2ZvbnQtc2l6ZTouNzVyZW07bGluZS1oZWlnaHQ6MXJlbX0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOmZvbnQtbWVkaXVtIFtjbWRrLWdyb3VwLWhlYWRpbmdde2ZvbnQtd2VpZ2h0OjUwMH0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbY21kay1ncm91cC1oZWFkaW5nXXtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5cW1wmX1xbY21kay1ncm91cFxdXDpub3RcKFxbaGlkZGVuXF1cKV9cflxbY21kay1ncm91cFxdXF1cOnB0LTAgW2NtZGstZ3JvdXBdOm5vdChbaGlkZGVuXSl+W2NtZGstZ3JvdXBde3BhZGRpbmctdG9wOjB9LlxbXCZfXFtjbWRrLWdyb3VwXF1cXVw6cHgtMiBbY21kay1ncm91cF17cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LlxbXCZfXFtjbWRrLWlucHV0LXdyYXBwZXJcXV9zdmdcXVw6aC01IFtjbWRrLWlucHV0LXdyYXBwZXJdIHN2Z3toZWlnaHQ6MS4yNXJlbX0uXFtcJl9cW2NtZGstaW5wdXQtd3JhcHBlclxdX3N2Z1xdXDp3LTUgW2NtZGstaW5wdXQtd3JhcHBlcl0gc3Zne3dpZHRoOjEuMjVyZW19LlxbXCZfXFtjbWRrLWlucHV0XF1cXVw6aC0xMiBbY21kay1pbnB1dF17aGVpZ2h0OjNyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXVxdXDpweC0yIFtjbWRrLWl0ZW1de3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1pdGVtXF1cXVw6cHktMyBbY21kay1pdGVtXXtwYWRkaW5nLXRvcDouNzVyZW07cGFkZGluZy1ib3R0b206Ljc1cmVtfS5cW1wmX1xbY21kay1pdGVtXF1fc3ZnXF1cOmgtNSBbY21kay1pdGVtXSBzdmd7aGVpZ2h0OjEuMjVyZW19LlxbXCZfXFtjbWRrLWl0ZW1cXV9zdmdcXVw6dy01IFtjbWRrLWl0ZW1dIHN2Z3t3aWR0aDoxLjI1cmVtfQo=","/index.html":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+VmFsPC90aXRsZT4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbiBzcmM9Ii9hcGkvdmFsL3N0YXRpYy9hc3NldHMvaW5kZXgtS2VfcE1ublUuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYXBpL3ZhbC9zdGF0aWMvYXNzZXRzL2luZGV4LUxsdUhaS1ZFLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0idmFsLWFwcC1zdGF0aWMiPjwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo="}`
21
21
  );
22
+ const decodedFiles = Object.fromEntries(
23
+ Object.entries(files).map(([key, value]) => [
24
+ key,
25
+ Buffer.from(value, "base64").toString("utf-8")
26
+ ])
27
+ );
22
28
  function createUIRequestHandler() {
23
29
  if (typeof files !== "object") {
24
30
  throw new Error(
25
31
  "Val UI files missing (error: is not an object)! This Val version or build is corrupted!"
26
32
  );
27
33
  }
28
- const jsFiles = Object.keys(files).filter(
34
+ const jsFiles = Object.keys(decodedFiles).filter(
29
35
  (path) => path.endsWith(".js") || path.endsWith(".jsx")
30
36
  );
31
37
  if (jsFiles.length === 0) {
@@ -40,7 +46,9 @@ function createUIRequestHandler() {
40
46
  );
41
47
  }
42
48
  const MAIN_FILE = jsFiles[0];
43
- const cssFiles = Object.keys(files).filter((path) => path.endsWith(".css"));
49
+ const cssFiles = Object.keys(decodedFiles).filter(
50
+ (path) => path.endsWith(".css")
51
+ );
44
52
  if (cssFiles.length === 0) {
45
53
  throw new Error(
46
54
  "Val UI files missing (error: no .css files found)! This Val version or build is corrupted!"
@@ -53,6 +61,12 @@ function createUIRequestHandler() {
53
61
  );
54
62
  }
55
63
  const MAIN_CSS_FILE = cssFiles[0];
64
+ const htmlPage = decodedFiles["/index.html"];
65
+ if (!htmlPage) {
66
+ throw new Error(
67
+ "Val UI files missing (error: no index.html file found)! This Val version or build is corrupted!"
68
+ );
69
+ }
56
70
  return async (path, url) => {
57
71
  if (path === VAL_APP_PATH) {
58
72
  return {
@@ -70,20 +84,19 @@ function createUIRequestHandler() {
70
84
  status: 200,
71
85
  headers: {
72
86
  "Content-Type": getServerMimeType(path) || "",
73
- "Cache-Control": "max-age=90"
74
- // TODO: change this to something more aggressive
87
+ "Cache-Control": "public, max-age=31536000, immutable"
75
88
  },
76
- body: Buffer.from(files[path], "base64").toString("utf-8")
89
+ body: decodedFiles[path]
77
90
  };
78
91
  } else {
79
92
  return {
80
- status: 404,
81
- json: {
82
- message: `Val UI file not found: ${path}`,
83
- details: {
84
- files: Object.keys(files)
85
- }
86
- }
93
+ status: 200,
94
+ headers: {
95
+ "Content-Type": getServerMimeType(path) || "",
96
+ "Cache-Control": "max-age=90"
97
+ // TODO: change this to something more aggressive
98
+ },
99
+ body: htmlPage
87
100
  };
88
101
  }
89
102
  }