diff --git a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py index 065cf443c..19840f56e 100644 --- a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py +++ b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py @@ -1 +1 @@ -__version__ = "7.2.1" +__version__ = "7.2.2" diff --git a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py index 925df5dd3..d6c4bc791 100644 --- a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py +++ b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjIuMCIsUkE9RnQ7dmFyIFJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRj1SdDt2YXIgYnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09YnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEYuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEYuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEYuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE89VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sQmU9TnQ7dmFyIGJBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PUYuVUludDgscj1CZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSx1ZT1iQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIGNlPVR0O3ZhciBVQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgdWUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKWNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sQ2U9VUE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgQ2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLEk9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgSShvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKyljKj10LnNpemVbc107bGV0IGw9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsYypsKSxsKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgTkE9R3Q7dmFyIFRBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sSSk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxJLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLkl9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPUksbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9bi5yZXN1bHRzO24ucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sR0E9VEE7dmFyIEx0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEU9THQ7dmFyIEVlPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLE90PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHhBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxMQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksSUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLFFlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHh0PXtjYW5IYW5kbGU6QT0+UWUoQSkmJkFbRWVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGRlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxQQShBKX19LFB0PXtjYW5IYW5kbGU6QT0+UWUoQSkmJklBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxwZT1uZXcgTWFwKFtbInByb3h5Iix4dF0sWyJ0aHJvdyIsUHRdXSk7ZnVuY3Rpb24gSnQoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGRlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIUp0KHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpvLHBhdGg6SX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxjPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEgpLGw7dHJ5e2xldCBzPUkuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLGE9SS5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpsPWE7YnJlYWs7Y2FzZSJTRVQiOnNbSS5zbGljZSgtMSlbMF1dPUgobi5kYXRhLnZhbHVlKSxsPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmw9YS5hcHBseShzLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGEoLi4uYyk7bD1xdChmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2RlKEEsQiksbD1KQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpsPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gocyl7bD17dmFsdWU6cyxbSUFdOjB9fVByb21pc2UucmVzb2x2ZShsKS5jYXRjaChzPT4oe3ZhbHVlOnMsW0lBXTowfSkpLnRoZW4ocz0+e2xldFthLGZdPUJBKHMpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDppfSksZiksbz09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksbWUoZSksTEEgaW4gQSYmdHlwZW9mIEFbTEFdPT0iZnVuY3Rpb24iJiZBW0xBXSgpKX0pLmNhdGNoKHM9PntsZXRbYSxmXT1CQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW0lBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxmKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIEh0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIG1lKEEpe0h0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gUEEoQSxlKXtyZXR1cm4gT0EoQSxbXSxlKX1mdW5jdGlvbiBzQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaGUoQSl7cmV0dXJuIFcoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57bWUoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsbEE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSxlKSxlPT09MCYmaGUoQSl9KTtmdW5jdGlvbiBNdChBLGUpe2xldCB0PShnQS5nZXQoZSl8fDApKzE7Z0Euc2V0KGUsdCksbEEmJmxBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBXdChBKXtsQSYmbEEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBPQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChpLG8pe2lmKHNBKHIpLG89PT14QSlyZXR1cm4oKT0+e1d0KG4pLGhlKEEpLHI9ITB9O2lmKG89PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IEk9VyhBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oSCk7cmV0dXJuIEkudGhlbi5iaW5kKEkpfXJldHVybiBPQShBLFsuLi5lLG9dKX0sc2V0KGksbyxJKXtzQShyKTtsZXRbYyxsXT1CQShJKTtyZXR1cm4gVyhBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsb10ubWFwKHM9PnMudG9TdHJpbmcoKSksdmFsdWU6Y30sbCkudGhlbihIKX0sYXBwbHkoaSxvLEkpe3NBKHIpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PU90KXJldHVybiBXKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oSCk7aWYoYz09PSJiaW5kIilyZXR1cm4gT0EoQSxlLnNsaWNlKDAsLTEpKTtsZXRbbCxzXT1mZShJKTtyZXR1cm4gVyhBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpsfSxzKS50aGVuKEgpfSxjb25zdHJ1Y3QoaSxvKXtzQShyKTtsZXRbSSxjXT1mZShvKTtyZXR1cm4gVyhBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6SX0sYykudGhlbihIKX19KTtyZXR1cm4gTXQobixBKSxufWZ1bmN0aW9uIFl0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGZlKEEpe2xldCBlPUEubWFwKEJBKTtyZXR1cm5bZS5tYXAodD0+dFswXSksWXQoZS5tYXAodD0+dFsxXSkpXX12YXIgeWU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gSkEoQSxlKXtyZXR1cm4geWUuc2V0KEEsZSksQX1mdW5jdGlvbiBxdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbRWVdOiEwfSl9ZnVuY3Rpb24gQkEoQSl7Zm9yKGxldFtlLHRdb2YgcGUpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSx5ZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBIKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHBlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gVyhBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj1LdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiBLdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gWChBLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KGUsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOnZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpXQX09T2JqZWN0LGNBPShBPT5lPT57bGV0IHQ9dnQuY2FsbChlKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLGU9PmNBKGUpPT09QSksQ0E9QT0+ZT0+dHlwZW9mIGU9PT1BLHtpc0FycmF5Oll9PUFycmF5LCQ9Q0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGp0KEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmVChBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIga2U9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBfdChBKXtsZXQgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOmU9QSYmQS5idWZmZXImJmtlKEEuYnVmZmVyKSxlfXZhciB6dD1DQSgic3RyaW5nIiksVD1DQSgiZnVuY3Rpb24iKSxGZT1DQSgibnVtYmVyIiksZkE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixWdD1BPT5BPT09ITB8fEE9PT0hMSx1QT1BPT57aWYoY0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgZT1XQShBKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxadD1HKCJEYXRlIiksWHQ9RygiRmlsZSIpLCR0PUcoIkJsb2IiKSxBcj1HKCJGaWxlTGlzdCIpLGVyPUE9PmZBKEEpJiZUKEEucGlwZSksdHI9QT0+e2xldCBlO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFQoQS5hcHBlbmQpJiYoKGU9Y0EoQSkpPT09ImZvcm1kYXRhInx8ZT09PSJvYmplY3QiJiZUKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHJyPUcoIlVSTFNlYXJjaFBhcmFtcyIpLGlyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBBQShBLGUse2FsbE93bktleXM6dD0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCByLG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLFkoQSkpZm9yKHI9MCxuPUEubGVuZ3RoO3I8bjtyKyspZS5jYWxsKG51bGwsQVtyXSxyLEEpO2Vsc2V7bGV0IGk9dD9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPWkubGVuZ3RoLEk7Zm9yKHI9MDtyPG87cisrKUk9aVtyXSxlLmNhbGwobnVsbCxBW0ldLEksQSl9fWZ1bmN0aW9uIFJlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHQ9T2JqZWN0LmtleXMoQSkscj10Lmxlbmd0aCxuO2Zvcig7ci0tID4wOylpZihuPXRbcl0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgYmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxVZT1BPT4hJChBKSYmQSE9PWJlO2Z1bmN0aW9uIE1BKCl7bGV0e2Nhc2VsZXNzOkF9PVVlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsbik9PntsZXQgaT1BJiZSZShlLG4pfHxuO3VBKGVbaV0pJiZ1QShyKT9lW2ldPU1BKGVbaV0scik6dUEocik/ZVtpXT1NQSh7fSxyKTpZKHIpP2VbaV09ci5zbGljZSgpOmVbaV09cn07Zm9yKGxldCByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspYXJndW1lbnRzW3JdJiZBQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIG5yPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihBQShlLChuLGkpPT57dCYmVChuKT9BW2ldPVgobix0KTpBW2ldPW59LHthbGxPd25LZXlzOnJ9KSxBKSxvcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGFyPShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LHNyPShBLGUsdCxyKT0+e2xldCBuLGksbyxJPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxpPW4ubGVuZ3RoO2ktLSA+MDspbz1uW2ldLCghcnx8cihvLEEsZSkpJiYhSVtvXSYmKGVbb109QVtvXSxJW29dPSEwKTtBPXQhPT0hMSYmV0EoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LElyPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sZ3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKFkoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIUZlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxscj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmV0EoVWludDhBcnJheSkpLEJyPShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IGk9bi52YWx1ZTtlLmNhbGwoQSxpWzBdLGlbMV0pfX0sdXI9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sY3I9RygiSFRNTEZvcm1FbGVtZW50IiksQ3I9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLERlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxmcj1HKCJSZWdFeHAiKSxOZT0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307QUEodCwobixpKT0+e2xldCBvOyhvPWUobixpLEEpKSE9PSExJiYocltpXT1vfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEscil9LEVyPUE9PntOZShBLChlLHQpPT57aWYoVChBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9QVt0XTtpZihUKHIpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LFFyPShBLGUpPT57bGV0IHQ9e30scj1uPT57bi5mb3JFYWNoKGk9Pnt0W2ldPSEwfSl9O3JldHVybiBZKEEpP3IoQSk6cihTdHJpbmcoQSkuc3BsaXQoZSkpLHR9LHByPSgpPT57fSxkcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksSEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixTZT0iMDEyMzQ1Njc4OSIsVGU9e0RJR0lUOlNlLEFMUEhBOkhBLEFMUEhBX0RJR0lUOkhBK0hBLnRvVXBwZXJDYXNlKCkrU2V9LG1yPShBPTE2LGU9VGUuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gaHIoQSl7cmV0dXJuISEoQSYmVChBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHlyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsbik9PntpZihmQShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2Vbbl09cjtsZXQgaT1ZKHIpP1tdOnt9O3JldHVybiBBQShyLChvLEkpPT57bGV0IGM9dChvLG4rMSk7ISQoYykmJihpW0ldPWMpfSksZVtuXT12b2lkIDAsaX19cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LHdyPUcoIkFzeW5jRnVuY3Rpb24iKSxEcj1BPT5BJiYoZkEoQSl8fFQoQSkpJiZUKEEudGhlbikmJlQoQS5jYXRjaCksZz17aXNBcnJheTpZLGlzQXJyYXlCdWZmZXI6a2UsaXNCdWZmZXI6anQsaXNGb3JtRGF0YTp0cixpc0FycmF5QnVmZmVyVmlldzpfdCxpc1N0cmluZzp6dCxpc051bWJlcjpGZSxpc0Jvb2xlYW46VnQsaXNPYmplY3Q6ZkEsaXNQbGFpbk9iamVjdDp1QSxpc1VuZGVmaW5lZDokLGlzRGF0ZTpadCxpc0ZpbGU6WHQsaXNCbG9iOiR0LGlzUmVnRXhwOmZyLGlzRnVuY3Rpb246VCxpc1N0cmVhbTplcixpc1VSTFNlYXJjaFBhcmFtczpycixpc1R5cGVkQXJyYXk6bHIsaXNGaWxlTGlzdDpBcixmb3JFYWNoOkFBLG1lcmdlOk1BLGV4dGVuZDpucix0cmltOmlyLHN0cmlwQk9NOm9yLGluaGVyaXRzOmFyLHRvRmxhdE9iamVjdDpzcixraW5kT2Y6Y0Esa2luZE9mVGVzdDpHLGVuZHNXaXRoOklyLHRvQXJyYXk6Z3IsZm9yRWFjaEVudHJ5OkJyLG1hdGNoQWxsOnVyLGlzSFRNTEZvcm06Y3IsaGFzT3duUHJvcGVydHk6RGUsaGFzT3duUHJvcDpEZSxyZWR1Y2VEZXNjcmlwdG9yczpOZSxmcmVlemVNZXRob2RzOkVyLHRvT2JqZWN0U2V0OlFyLHRvQ2FtZWxDYXNlOkNyLG5vb3A6cHIsdG9GaW5pdGVOdW1iZXI6ZHIsZmluZEtleTpSZSxnbG9iYWw6YmUsaXNDb250ZXh0RGVmaW5lZDpVZSxBTFBIQUJFVDpUZSxnZW5lcmF0ZVN0cmluZzptcixpc1NwZWNDb21wbGlhbnRGb3JtOmhyLHRvSlNPTk9iamVjdDp5cixpc0FzeW5jRm46d3IsaXNUaGVuYWJsZTpEcn07ZnVuY3Rpb24gcShBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1nLmluaGVyaXRzKHEsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpnLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBHZT1xLnByb3RvdHlwZSxMZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhxLExlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoR2UsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7cS5mcm9tPShBLGUsdCxyLG4saSk9PntsZXQgbz1PYmplY3QuY3JlYXRlKEdlKTtyZXR1cm4gZy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGMpe3JldHVybiBjIT09RXJyb3IucHJvdG90eXBlfSxJPT5JIT09ImlzQXhpb3NFcnJvciIpLHEuY2FsbChvLEEubWVzc2FnZSxlLHQscixuKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxpJiZPYmplY3QuYXNzaWduKG8saSksb307dmFyIGQ9cTt2YXIgRUE9bnVsbDtmdW5jdGlvbiBZQShBKXtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KEEpfHxnLmlzQXJyYXkoQSl9ZnVuY3Rpb24geGUoQSl7cmV0dXJuIGcuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gT2UoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLGkpe3JldHVybiBuPXhlKG4pLCF0JiZpPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBTcihBKXtyZXR1cm4gZy5pc0FycmF5KEEpJiYhQS5zb21lKFlBKX12YXIga3I9Zy50b0ZsYXRPYmplY3QoZyx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIEZyKEEsZSx0KXtpZighZy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhFQXx8Rm9ybURhdGEpLHQ9Zy50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHUsUSl7cmV0dXJuIWcuaXNVbmRlZmluZWQoUVt1XSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fHMsaT10LmRvdHMsbz10LmluZGV4ZXMsYz0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZnLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWcuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGwoQyl7aWYoQz09PW51bGwpcmV0dXJuIiI7aWYoZy5pc0RhdGUoQykpcmV0dXJuIEMudG9JU09TdHJpbmcoKTtpZighYyYmZy5pc0Jsb2IoQykpdGhyb3cgbmV3IGQoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGcuaXNBcnJheUJ1ZmZlcihDKXx8Zy5pc1R5cGVkQXJyYXkoQyk/YyYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0NdKTpCdWZmZXIuZnJvbShDKTpDfWZ1bmN0aW9uIHMoQyx1LFEpe2xldCBwPUM7aWYoQyYmIVEmJnR5cGVvZiBDPT0ib2JqZWN0Iil7aWYoZy5lbmRzV2l0aCh1LCJ7fSIpKXU9cj91OnUuc2xpY2UoMCwtMiksQz1KU09OLnN0cmluZ2lmeShDKTtlbHNlIGlmKGcuaXNBcnJheShDKSYmU3IoQyl8fChnLmlzRmlsZUxpc3QoQyl8fGcuZW5kc1dpdGgodSwiW10iKSkmJihwPWcudG9BcnJheShDKSkpcmV0dXJuIHU9eGUodSkscC5mb3JFYWNoKGZ1bmN0aW9uKFMsWil7IShnLmlzVW5kZWZpbmVkKFMpfHxTPT09bnVsbCkmJmUuYXBwZW5kKG89PT0hMD9PZShbdV0sWixpKTpvPT09bnVsbD91OnUrIltdIixsKFMpKX0pLCExfXJldHVybiBZQShDKT8hMDooZS5hcHBlbmQoT2UoUSx1LGkpLGwoQykpLCExKX1sZXQgYT1bXSxmPU9iamVjdC5hc3NpZ24oa3Ise2RlZmF1bHRWaXNpdG9yOnMsY29udmVydFZhbHVlOmwsaXNWaXNpdGFibGU6WUF9KTtmdW5jdGlvbiBCKEMsdSl7aWYoIWcuaXNVbmRlZmluZWQoQykpe2lmKGEuaW5kZXhPZihDKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIit1LmpvaW4oIi4iKSk7YS5wdXNoKEMpLGcuZm9yRWFjaChDLGZ1bmN0aW9uKHAsbSl7KCEoZy5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZuLmNhbGwoZSxwLGcuaXNTdHJpbmcobSk/bS50cmltKCk6bSx1LGYpKT09PSEwJiZCKHAsdT91LmNvbmNhdChtKTpbbV0pfSksYS5wb3AoKX19aWYoIWcuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLGV9dmFyIHg9RnI7ZnVuY3Rpb24gUGUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbcl19KX1mdW5jdGlvbiBKZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJngoQSx0aGlzLGUpfXZhciBIZT1KZS5wcm90b3R5cGU7SGUuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcGFpcnMucHVzaChbZSx0XSl9O0hlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCB0PWU/ZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUGUpfTpQZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KG5bMF0pKyI9Iit0KG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgUUE9SmU7ZnVuY3Rpb24gUnIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gZUEoQSxlLHQpe2lmKCFlKXJldHVybiBBO2xldCByPXQmJnQuZW5jb2RlfHxScixuPXQmJnQuc2VyaWFsaXplLGk7aWYobj9pPW4oZSx0KTppPWcuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBRQShlLHQpLnRvU3RyaW5nKHIpLGkpe2xldCBvPUEuaW5kZXhPZigiIyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBBfXZhciBxQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOnI/ci5zeW5jaHJvbm91czohMSxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7Zy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24ocil7ciE9PW51bGwmJmUocil9KX19LEtBPXFBO3ZhciBwQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIE1lPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpRQTt2YXIgV2U9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBZZT10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBxZT17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpNZSxGb3JtRGF0YTpXZSxCbG9iOlllfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIHZBPXt9O2t0KHZBLHtoYXNCcm93c2VyRW52OigpPT5LZSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PmJyLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+VXJ9KTt2YXIgS2U9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsYnI9KEE9PktlJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksVXI9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciBiPXsuLi52QSwuLi5xZX07ZnVuY3Rpb24gakEoQSxlKXtyZXR1cm4geChBLG5ldyBiLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIGIuaXNOb2RlJiZnLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6aS5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gTnIoQSl7cmV0dXJuIGcubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBUcihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsbj10Lmxlbmd0aCxpO2ZvcihyPTA7cjxuO3IrKylpPXRbcl0sZVtpXT1BW2ldO3JldHVybiBlfWZ1bmN0aW9uIEdyKEEpe2Z1bmN0aW9uIGUodCxyLG4saSl7bGV0IG89dFtpKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgST1OdW1iZXIuaXNGaW5pdGUoK28pLGM9aT49dC5sZW5ndGg7cmV0dXJuIG89IW8mJmcuaXNBcnJheShuKT9uLmxlbmd0aDpvLGM/KGcuaGFzT3duUHJvcChuLG8pP25bb109W25bb10scl06bltvXT1yLCFJKTooKCFuW29dfHwhZy5pc09iamVjdChuW29dKSkmJihuW29dPVtdKSxlKHQscixuW29dLGkpJiZnLmlzQXJyYXkobltvXSkmJihuW29dPVRyKG5bb10pKSwhSSl9aWYoZy5pc0Zvcm1EYXRhKEEpJiZnLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIGcuZm9yRWFjaEVudHJ5KEEsKHIsbik9PntlKE5yKHIpLG4sdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIGRBPUdyO2Z1bmN0aW9uIExyKEEsZSx0KXtpZihnLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSksZy50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBfQT17dHJhbnNpdGlvbmFsOnBBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtsZXQgcj10LmdldENvbnRlbnRUeXBlKCl8fCIiLG49ci5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsaT1nLmlzT2JqZWN0KGUpO2lmKGkmJmcuaXNIVE1MRm9ybShlKSYmKGU9bmV3IEZvcm1EYXRhKGUpKSxnLmlzRm9ybURhdGEoZSkpcmV0dXJuIG4/SlNPTi5zdHJpbmdpZnkoZEEoZSkpOmU7aWYoZy5pc0FycmF5QnVmZmVyKGUpfHxnLmlzQnVmZmVyKGUpfHxnLmlzU3RyZWFtKGUpfHxnLmlzRmlsZShlKXx8Zy5pc0Jsb2IoZSkpcmV0dXJuIGU7aWYoZy5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYoZy5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IEk7aWYoaSl7aWYoci5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gakEoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChJPWcuaXNGaWxlTGlzdChlKSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIHgoST97ImZpbGVzW10iOmV9OmUsYyYmbmV3IGMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBpfHxuPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksTHIoZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy50cmFuc2l0aW9uYWx8fF9BLnRyYW5zaXRpb25hbCxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihlJiZnLmlzU3RyaW5nKGUpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7bGV0IG89ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goSSl7aWYobyl0aHJvdyBJLm5hbWU9PT0iU3ludGF4RXJyb3IiP2QuZnJvbShJLGQuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6SX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOmIuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOmIuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2cuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57X0EuaGVhZGVyc1tBXT17fX0pO3ZhciBLPV9BO3ZhciBPcj1nLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLHZlPUE9PntsZXQgZT17fSx0LHIsbjtyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24obyl7bj1vLmluZGV4T2YoIjoiKSx0PW8uc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCkscj1vLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhKCF0fHxlW3RdJiZPclt0XSkmJih0PT09InNldC1jb29raWUiP2VbdF0/ZVt0XS5wdXNoKHIpOmVbdF09W3JdOmVbdF09ZVt0XT9lW3RdKyIsICIrcjpyKX0pLGV9O3ZhciBqZT1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHRBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbUEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmcuaXNBcnJheShBKT9BLm1hcChtQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIHhyKEEpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nLHI7Zm9yKDtyPXQuZXhlYyhBKTspZVtyWzFdXT1yWzJdO3JldHVybiBlfXZhciBQcj1BPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiB6QShBLGUsdCxyLG4pe2lmKGcuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsZSx0KTtpZihuJiYoZT10KSwhIWcuaXNTdHJpbmcoZSkpe2lmKGcuaXNTdHJpbmcocikpcmV0dXJuIGUuaW5kZXhPZihyKSE9PS0xO2lmKGcuaXNSZWdFeHAocikpcmV0dXJuIHIudGVzdChlKX19ZnVuY3Rpb24gSnIoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSx0LHIpPT50LnRvVXBwZXJDYXNlKCkrcil9ZnVuY3Rpb24gSHIoQSxlKXtsZXQgdD1nLnRvQ2FtZWxDYXNlKCIgIitlKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2gocj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHIrdCx7dmFsdWU6ZnVuY3Rpb24obixpLG8pe3JldHVybiB0aGlzW3JdLmNhbGwodGhpcyxlLG4saSxvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgdj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSx0LHIpe2xldCBuPXRoaXM7ZnVuY3Rpb24gaShJLGMsbCl7bGV0IHM9dEEoYyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPWcuZmluZEtleShuLHMpOyghYXx8blthXT09PXZvaWQgMHx8bD09PSEwfHxsPT09dm9pZCAwJiZuW2FdIT09ITEpJiYoblthfHxjXT1tQShJKSl9bGV0IG89KEksYyk9PmcuZm9yRWFjaChJLChsLHMpPT5pKGwscyxjKSk7cmV0dXJuIGcuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/byhlLHQpOmcuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIVByKGUpP28odmUoZSksdCk6ZSE9bnVsbCYmaSh0LGUsciksdGhpc31nZXQoZSx0KXtpZihlPXRBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO2lmKHIpe2xldCBuPXRoaXNbcl07aWYoIXQpcmV0dXJuIG47aWYodD09PSEwKXJldHVybiB4cihuKTtpZihnLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLG4scik7aWYoZy5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSx0KXtpZihlPXRBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO3JldHVybiEhKHImJnRoaXNbcl0hPT12b2lkIDAmJighdHx8ekEodGhpcyx0aGlzW3JdLHIsdCkpKX1yZXR1cm4hMX1kZWxldGUoZSx0KXtsZXQgcj10aGlzLG49ITE7ZnVuY3Rpb24gaShvKXtpZihvPXRBKG8pLG8pe2xldCBJPWcuZmluZEtleShyLG8pO0kmJighdHx8ekEocixyW0ldLEksdCkpJiYoZGVsZXRlIHJbSV0sbj0hMCl9fXJldHVybiBnLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksbn1jbGVhcihlKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzKSxyPXQubGVuZ3RoLG49ITE7Zm9yKDtyLS07KXtsZXQgaT10W3JdOyghZXx8ekEodGhpcyx0aGlzW2ldLGksZSwhMCkpJiYoZGVsZXRlIHRoaXNbaV0sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCB0PXRoaXMscj17fTtyZXR1cm4gZy5mb3JFYWNoKHRoaXMsKG4saSk9PntsZXQgbz1nLmZpbmRLZXkocixpKTtpZihvKXt0W29dPW1BKG4pLGRlbGV0ZSB0W2ldO3JldHVybn1sZXQgST1lP0pyKGkpOlN0cmluZyhpKS50cmltKCk7SSE9PWkmJmRlbGV0ZSB0W2ldLHRbSV09bUEobikscltJXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBnLmZvckVhY2godGhpcywocixuKT0+e3IhPW51bGwmJnIhPT0hMSYmKHRbbl09ZSYmZy5pc0FycmF5KHIpP3Iuam9pbigiLCAiKTpyKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2UsdF0pPT5lKyI6ICIrdCkuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnQpe2xldCByPW5ldyB0aGlzKGUpO3JldHVybiB0LmZvckVhY2gobj0+ci5zZXQobikpLHJ9c3RhdGljIGFjY2Vzc29yKGUpe2xldCByPSh0aGlzW2plXT10aGlzW2plXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gaShvKXtsZXQgST10QShvKTtyW0ldfHwoSHIobixvKSxyW0ldPSEwKX1yZXR1cm4gZy5pc0FycmF5KGUpP2UuZm9yRWFjaChpKTppKGUpLHRoaXN9fTt2LmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtnLnJlZHVjZURlc2NyaXB0b3JzKHYucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChyKXt0aGlzW3RdPXJ9fX0pO2cuZnJlZXplTWV0aG9kcyh2KTt2YXIgVT12O2Z1bmN0aW9uIHJBKEEsZSl7bGV0IHQ9dGhpc3x8SyxyPWV8fHQsbj1VLmZyb20oci5oZWFkZXJzKSxpPXIuZGF0YTtyZXR1cm4gZy5mb3JFYWNoKEEsZnVuY3Rpb24oSSl7aT1JLmNhbGwodCxpLG4ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksbi5ub3JtYWxpemUoKSxpfWZ1bmN0aW9uIGlBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gX2UoQSxlLHQpe2QuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsZC5FUlJfQ0FOQ0VMRUQsZSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWcuaW5oZXJpdHMoX2UsZCx7X19DQU5DRUxfXzohMH0pO3ZhciBQPV9lO2Z1bmN0aW9uIFZBKEEsZSx0KXtsZXQgcj10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFyfHxyKHQuc3RhdHVzKT9BKHQpOmUobmV3IGQoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbZC5FUlJfQkFEX1JFUVVFU1QsZC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX12YXIgemU9Yi5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSx0LHIsbixpKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTtnLmlzTnVtYmVyKHQpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxnLmlzU3RyaW5nKHIpJiZvLnB1c2goInBhdGg9IityKSxnLmlzU3RyaW5nKG4pJiZvLnB1c2goImRvbWFpbj0iK24pLGk9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gWkEoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiBYQShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gbkEoQSxlKXtyZXR1cm4gQSYmIVpBKGUpP1hBKEEsZSk6ZX12YXIgVmU9Yi5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHI7ZnVuY3Rpb24gbihpKXtsZXQgbz1pO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiByPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBJPWcuaXNTdHJpbmcobyk/bihvKTpvO3JldHVybiBJLnByb3RvY29sPT09ci5wcm90b2NvbCYmSS5ob3N0PT09ci5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiAkQShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gTXIoQSxlKXtBPUF8fDEwO2xldCB0PW5ldyBBcnJheShBKSxyPW5ldyBBcnJheShBKSxuPTAsaT0wLG87cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihjKXtsZXQgbD1EYXRlLm5vdygpLHM9cltpXTtvfHwobz1sKSx0W25dPWMscltuXT1sO2xldCBhPWksZj0wO2Zvcig7YSE9PW47KWYrPXRbYSsrXSxhPWElQTtpZihuPShuKzEpJUEsbj09PWkmJihpPShpKzEpJUEpLGwtbzxlKXJldHVybjtsZXQgQj1zJiZsLXM7cmV0dXJuIEI/TWF0aC5yb3VuZChmKjFlMy9CKTp2b2lkIDB9fXZhciBaZT1NcjtmdW5jdGlvbiBYZShBLGUpe2xldCB0PTAscj1aZSg1MCwyNTApO3JldHVybiBuPT57bGV0IGk9bi5sb2FkZWQsbz1uLmxlbmd0aENvbXB1dGFibGU/bi50b3RhbDp2b2lkIDAsST1pLXQsYz1yKEkpLGw9aTw9bzt0PWk7bGV0IHM9e2xvYWRlZDppLHRvdGFsOm8scHJvZ3Jlc3M6bz9pL286dm9pZCAwLGJ5dGVzOkkscmF0ZTpjfHx2b2lkIDAsZXN0aW1hdGVkOmMmJm8mJmw/KG8taSkvYzp2b2lkIDAsZXZlbnQ6bn07c1tlPyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEocyl9fXZhciBXcj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLCRlPVdyJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgbj1BLmRhdGEsaT1VLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpJfT1BLGM7ZnVuY3Rpb24gbCgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYyksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKX1sZXQgcztpZihnLmlzRm9ybURhdGEobikpe2lmKGIuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxiLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilpLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChzPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W3UsLi4uUV09cz9zLnNwbGl0KCI7IikubWFwKHA9PnAudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbdXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLlFdLmpvaW4oIjsgIikpfX1sZXQgYT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgdT1BLmF1dGgudXNlcm5hbWV8fCIiLFE9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSh1KyI6IitRKSl9bGV0IGY9bkEoQS5iYXNlVVJMLEEudXJsKTthLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxlQShmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGEudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gQigpe2lmKCFhKXJldHVybjtsZXQgdT1VLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBhJiZhLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxwPXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2EucmVzcG9uc2VUZXh0OmEucmVzcG9uc2Usc3RhdHVzOmEuc3RhdHVzLHN0YXR1c1RleHQ6YS5zdGF0dXNUZXh0LGhlYWRlcnM6dSxjb25maWc6QSxyZXF1ZXN0OmF9O1ZBKGZ1bmN0aW9uKFMpe3QoUyksbCgpfSxmdW5jdGlvbihTKXtyKFMpLGwoKX0scCksYT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gYT9hLm9ubG9hZGVuZD1COmEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWF8fGEucmVhZHlTdGF0ZSE9PTR8fGEuc3RhdHVzPT09MCYmIShhLnJlc3BvbnNlVVJMJiZhLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChCKX0sYS5vbmFib3J0PWZ1bmN0aW9uKCl7YSYmKHIobmV3IGQoIlJlcXVlc3QgYWJvcnRlZCIsZC5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsKX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgZCgiTmV0d29yayBFcnJvciIsZC5FUlJfTkVUV09SSyxBLGEpKSxhPW51bGx9LGEub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFE9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHA9QS50cmFuc2l0aW9uYWx8fHBBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKFE9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBkKFEscC5jbGFyaWZ5VGltZW91dEVycm9yP2QuRVRJTUVET1VUOmQuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbH0sYi5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZnLmlzRnVuY3Rpb24oSSkmJihJPUkoQSkpLEl8fEkhPT0hMSYmVmUoZikpKXtsZXQgdT1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZ6ZS5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO3UmJmkuc2V0KEEueHNyZkhlYWRlck5hbWUsdSl9bj09PXZvaWQgMCYmaS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBhJiZnLmZvckVhY2goaS50b0pTT04oKSxmdW5jdGlvbihRLHApe2Euc2V0UmVxdWVzdEhlYWRlcihwLFEpfSksZy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChhLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoYS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWGUoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLnVwbG9hZCYmYS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLFhlKEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihjPXU9PnthJiYocighdXx8dS50eXBlP25ldyBQKG51bGwsQSxhKTp1KSxhLmFib3J0KCksYT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYyksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2MoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYykpKTtsZXQgQz0kQShmKTtpZihDJiZiLnByb3RvY29scy5pbmRleE9mKEMpPT09LTEpe3IobmV3IGQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrQysiOiIsZC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1hLnNlbmQobnx8bnVsbCl9KX07dmFyIEFlPXtodHRwOkVBLHhocjokZX07Zy5mb3JFYWNoKEFlLChBLGUpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6ZX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTplfSl9fSk7dmFyIEF0PUE9PmAtICR7QX1gLFlyPUE9PmcuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxoQT17Z2V0QWRhcHRlcjpBPT57QT1nLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDplfT1BLHQscixuPXt9O2ZvcihsZXQgaT0wO2k8ZTtpKyspe3Q9QVtpXTtsZXQgbztpZihyPXQsIVlyKHQpJiYocj1BZVsobz1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLHI9PT12b2lkIDApKXRocm93IG5ldyBkKGBVbmtub3duIGFkYXB0ZXIgJyR7b30nYCk7aWYocilicmVhaztuW298fCIjIitpXT1yfWlmKCFyKXtsZXQgaT1PYmplY3QuZW50cmllcyhuKS5tYXAoKFtJLGNdKT0+YGFkYXB0ZXIgJHtJfSBgKyhjPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbz1lP2kubGVuZ3RoPjE/YHNpbmNlIDoKYCtpLm1hcChBdCkuam9pbihgCmApOiIgIitBdChpWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBkKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHJ9LGFkYXB0ZXJzOkFlfTtmdW5jdGlvbiBlZShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgUChudWxsLEEpfWZ1bmN0aW9uIHlBKEEpe3JldHVybiBlZShBKSxBLmhlYWRlcnM9VS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPXJBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxoQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Sy5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiBlZShBKSxyLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usciksci5oZWFkZXJzPVUuZnJvbShyLmhlYWRlcnMpLHJ9LGZ1bmN0aW9uKHIpe3JldHVybiBpQShyKXx8KGVlKEEpLHImJnIucmVzcG9uc2UmJihyLnJlc3BvbnNlLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usci5yZXNwb25zZSksci5yZXNwb25zZS5oZWFkZXJzPVUuZnJvbShyLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3Qocil9KX12YXIgZXQ9QT0+QSBpbnN0YW5jZW9mIFU/ey4uLkF9OkE7ZnVuY3Rpb24gTChBLGUpe2U9ZXx8e307bGV0IHQ9e307ZnVuY3Rpb24gcihsLHMsYSl7cmV0dXJuIGcuaXNQbGFpbk9iamVjdChsKSYmZy5pc1BsYWluT2JqZWN0KHMpP2cubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6YX0sbCxzKTpnLmlzUGxhaW5PYmplY3Qocyk/Zy5tZXJnZSh7fSxzKTpnLmlzQXJyYXkocyk/cy5zbGljZSgpOnN9ZnVuY3Rpb24gbihsLHMsYSl7aWYoZy5pc1VuZGVmaW5lZChzKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwsYSl9ZWxzZSByZXR1cm4gcihsLHMsYSl9ZnVuY3Rpb24gaShsLHMpe2lmKCFnLmlzVW5kZWZpbmVkKHMpKXJldHVybiByKHZvaWQgMCxzKX1mdW5jdGlvbiBvKGwscyl7aWYoZy5pc1VuZGVmaW5lZChzKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwpfWVsc2UgcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIEkobCxzLGEpe2lmKGEgaW4gZSlyZXR1cm4gcihsLHMpO2lmKGEgaW4gQSlyZXR1cm4gcih2b2lkIDAsbCl9bGV0IGM9e3VybDppLG1ldGhvZDppLGRhdGE6aSxiYXNlVVJMOm8sdHJhbnNmb3JtUmVxdWVzdDpvLHRyYW5zZm9ybVJlc3BvbnNlOm8scGFyYW1zU2VyaWFsaXplcjpvLHRpbWVvdXQ6byx0aW1lb3V0TWVzc2FnZTpvLHdpdGhDcmVkZW50aWFsczpvLHdpdGhYU1JGVG9rZW46byxhZGFwdGVyOm8scmVzcG9uc2VUeXBlOm8seHNyZkNvb2tpZU5hbWU6byx4c3JmSGVhZGVyTmFtZTpvLG9uVXBsb2FkUHJvZ3Jlc3M6byxvbkRvd25sb2FkUHJvZ3Jlc3M6byxkZWNvbXByZXNzOm8sbWF4Q29udGVudExlbmd0aDpvLG1heEJvZHlMZW5ndGg6byxiZWZvcmVSZWRpcmVjdDpvLHRyYW5zcG9ydDpvLGh0dHBBZ2VudDpvLGh0dHBzQWdlbnQ6byxjYW5jZWxUb2tlbjpvLHNvY2tldFBhdGg6byxyZXNwb25zZUVuY29kaW5nOm8sdmFsaWRhdGVTdGF0dXM6SSxoZWFkZXJzOihsLHMpPT5uKGV0KGwpLGV0KHMpLCEwKX07cmV0dXJuIGcuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsZSkpLGZ1bmN0aW9uKHMpe2xldCBhPWNbc118fG4sZj1hKEFbc10sZVtzXSxzKTtnLmlzVW5kZWZpbmVkKGYpJiZhIT09SXx8KHRbc109Zil9KSx0fXZhciB3QT0iMS42LjgiO3ZhciB0ZT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsZSk9Pnt0ZVtBXT1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI9PT1BfHwiYSIrKGU8MT8ibiAiOiIgIikrQX19KTt2YXIgdHQ9e307dGUudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGksbyl7cmV0dXJuIltBeGlvcyB2Iit3QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2krIiciK28rKHI/Ii4gIityOiIiKX1yZXR1cm4oaSxvLEkpPT57aWYoZT09PSExKXRocm93IG5ldyBkKG4obywiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSksZC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiF0dFtvXSYmKHR0W29dPSEwLGNvbnNvbGUud2FybihuKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksZT9lKGksbyxJKTohMH19O2Z1bmN0aW9uIHFyKEEsZSx0KXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGQoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCByPU9iamVjdC5rZXlzKEEpLG49ci5sZW5ndGg7Zm9yKDtuLS0gPjA7KXtsZXQgaT1yW25dLG89ZVtpXTtpZihvKXtsZXQgST1BW2ldLGM9ST09PXZvaWQgMHx8byhJLGksQSk7aWYoYyE9PSEwKXRocm93IG5ldyBkKCJvcHRpb24gIitpKyIgbXVzdCBiZSAiK2MsZC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IG5ldyBkKCJVbmtub3duIG9wdGlvbiAiK2ksZC5FUlJfQkFEX09QVElPTil9fXZhciBEQT17YXNzZXJ0T3B0aW9uczpxcix2YWxpZGF0b3JzOnRlfTt2YXIgSj1EQS52YWxpZGF0b3JzLGo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBLQSxyZXNwb25zZTpuZXcgS0F9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBuO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG49e30pOm49bmV3IEVycm9yO2xldCBpPW4uc3RhY2s/bi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3Iuc3RhY2s/aSYmIVN0cmluZyhyLnN0YWNrKS5lbmRzV2l0aChpLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKHIuc3RhY2srPWAKYCtpKTpyLnN0YWNrPWl9dGhyb3cgcn19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PUwodGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjpuLGhlYWRlcnM6aX09dDtyIT09dm9pZCAwJiZEQS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbil9LCExKSxuIT1udWxsJiYoZy5pc0Z1bmN0aW9uKG4pP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOm59OkRBLmFzc2VydE9wdGlvbnMobix7ZW5jb2RlOkouZnVuY3Rpb24sc2VyaWFsaXplOkouZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89aSYmZy5tZXJnZShpLmNvbW1vbixpW3QubWV0aG9kXSk7aSYmZy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEM9PntkZWxldGUgaVtDXX0pLHQuaGVhZGVycz1VLmNvbmNhdChvLGkpO2xldCBJPVtdLGM9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKHUpe3R5cGVvZiB1LnJ1bldoZW49PSJmdW5jdGlvbiImJnUucnVuV2hlbih0KT09PSExfHwoYz1jJiZ1LnN5bmNocm9ub3VzLEkudW5zaGlmdCh1LmZ1bGZpbGxlZCx1LnJlamVjdGVkKSl9KTtsZXQgbD1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2wucHVzaCh1LmZ1bGZpbGxlZCx1LnJlamVjdGVkKX0pO2xldCBzLGE9MCxmO2lmKCFjKXtsZXQgQz1beUEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihDLnVuc2hpZnQuYXBwbHkoQyxJKSxDLnB1c2guYXBwbHkoQyxsKSxmPUMubGVuZ3RoLHM9UHJvbWlzZS5yZXNvbHZlKHQpO2E8Zjspcz1zLnRoZW4oQ1thKytdLENbYSsrXSk7cmV0dXJuIHN9Zj1JLmxlbmd0aDtsZXQgQj10O2ZvcihhPTA7YTxmOyl7bGV0IEM9SVthKytdLHU9SVthKytdO3RyeXtCPUMoQil9Y2F0Y2goUSl7dS5jYWxsKHRoaXMsUSk7YnJlYWt9fXRyeXtzPXlBLmNhbGwodGhpcyxCKX1jYXRjaChDKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoQyl9Zm9yKGE9MCxmPWwubGVuZ3RoO2E8Zjspcz1zLnRoZW4obFthKytdLGxbYSsrXSk7cmV0dXJuIHN9Z2V0VXJpKGUpe2U9TCh0aGlzLmRlZmF1bHRzLGUpO2xldCB0PW5BKGUuYmFzZVVSTCxlLnVybCk7cmV0dXJuIGVBKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O2cuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7ai5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pO2cuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJuIGZ1bmN0aW9uKGksbyxJKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwoSXx8e30se21ldGhvZDplLGhlYWRlcnM6cj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6aSxkYXRhOm99KSl9fWoucHJvdG90eXBlW2VdPXQoKSxqLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KTt2YXIgb0E9ajt2YXIgcmU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3Q9aX0pO2xldCByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCFyLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtpLS0gPjA7KXIuX2xpc3RlbmVyc1tpXShuKTtyLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgaSxvPW5ldyBQcm9taXNlKEk9PntyLnN1YnNjcmliZShJKSxpPUl9KS50aGVuKG4pO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUoaSl9LG99LGUoZnVuY3Rpb24oaSxvLEkpe3IucmVhc29ufHwoci5yZWFzb249bmV3IFAoaSxvLEkpLHQoci5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LHJ0PXJlO2Z1bmN0aW9uIGllKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBuZShBKXtyZXR1cm4gZy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgb2U9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKG9lKS5mb3JFYWNoKChbQSxlXSk9PntvZVtlXT1BfSk7dmFyIGl0PW9lO2Z1bmN0aW9uIG50KEEpe2xldCBlPW5ldyBvQShBKSx0PVgob0EucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIGcuZXh0ZW5kKHQsb0EucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxnLmV4dGVuZCh0LGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBudChMKEEsbikpfSx0fXZhciBEPW50KEspO0QuQXhpb3M9b0E7RC5DYW5jZWxlZEVycm9yPVA7RC5DYW5jZWxUb2tlbj1ydDtELmlzQ2FuY2VsPWlBO0QuVkVSU0lPTj13QTtELnRvRm9ybURhdGE9eDtELkF4aW9zRXJyb3I9ZDtELkNhbmNlbD1ELkNhbmNlbGVkRXJyb3I7RC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTtELnNwcmVhZD1pZTtELmlzQXhpb3NFcnJvcj1uZTtELm1lcmdlQ29uZmlnPUw7RC5BeGlvc0hlYWRlcnM9VTtELmZvcm1Ub0pTT049QT0+ZEEoZy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtELmdldEFkYXB0ZXI9aEEuZ2V0QWRhcHRlcjtELkh0dHBTdGF0dXNDb2RlPWl0O0QuZGVmYXVsdD1EO3ZhciBfPUQ7dmFye0F4aW9zOllhLEF4aW9zRXJyb3I6cWEsQ2FuY2VsZWRFcnJvcjpLYSxpc0NhbmNlbDp2YSxDYW5jZWxUb2tlbjpqYSxWRVJTSU9OOl9hLGFsbDp6YSxDYW5jZWw6VmEsaXNBeGlvc0Vycm9yOlphLHNwcmVhZDpYYSx0b0Zvcm1EYXRhOiRhLEF4aW9zSGVhZGVyczpBcyxIdHRwU3RhdHVzQ29kZTplcyxmb3JtVG9KU09OOnRzLGdldEFkYXB0ZXI6cnMsbWVyZ2VDb25maWc6aXN9PV87YXN5bmMgZnVuY3Rpb24gS3IoQSxlKXtsZXQgdD1BLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IF8uZ2V0KHQse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxpPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTtyPW5ldyBXb3JrZXIoaSx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKHQse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgYUE9S3I7ZnVuY3Rpb24gb3QoQSl7bGV0IGU9UEEoQSksdD1BO3JldHVybiB0LnRlcm1pbmF0ZWQ9ITEsdC53b3JrZXJQcm94eT1lLHQub3JpZ2luYWxUZXJtaW5hdGU9dC50ZXJtaW5hdGUsdC50ZXJtaW5hdGU9KCk9Pnt0LnRlcm1pbmF0ZWQ9ITAsdC53b3JrZXJQcm94eVt4QV0oKSx0Lm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjp0fX1hc3luYyBmdW5jdGlvbiB2cihBLGUsdCl7bGV0IHI7aWYoQSE9bnVsbCl7bGV0IGk9QTtyZXR1cm4gaS53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1pLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjppfSk6b3QoQSl9bGV0IG49YXdhaXQgYUEoZSx0KTtyZXR1cm4gb3Qobil9dmFyIGF0PXZyO2FzeW5jIGZ1bmN0aW9uIGpyKEEsZSx0KXtsZXQgcj0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3I9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3I9QTpyPXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbj1gJHtyfS53YXNtYCxvPShhd2FpdCBfLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpvfSl9dmFyIHN0PWpyO3ZhciBJdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgQnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsZ3Q9bmV3IFRleHRFbmNvZGVyLGx0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBfcihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksaT1BLmZzX3N0YXQoZSkuc2l6ZSxvPW51bGw7QnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoaSk6bz1uZXcgQXJyYXlCdWZmZXIoaSk7bGV0IEk9bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChyLEksMCxpLDApLEEuZnNfY2xvc2UociksSX1mdW5jdGlvbiB1dChBLGUsdCl7bGV0IHI9bnVsbDtCdD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbj1uZXcgVWludDhBcnJheShyKSxpPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBuLnNldChpKSxufWZ1bmN0aW9uIFIoQSxlLHQscil7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiB6KEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsaT1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsbl0pO0Euc3RyaW5nVG9VVEY4KHIsaSxuKX1mdW5jdGlvbiBOKEEsZSx0LHIpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbz11dChBLG4saSk7cmV0dXJuIE8ocixvLmJ1ZmZlcil9ZnVuY3Rpb24gYWUoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIHpyKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihsLHMpe3N3aXRjaChsLnR5cGUpe2Nhc2UgRS5UZXh0U3RyZWFtOntsZXQgYT1ndC5lbmNvZGUobC5kYXRhLmRhdGEpLGY9UihBLGEscywwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07eihBLEIscyk7YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgYT1ndC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkobC5kYXRhKSksZj1SKEEsYSxzLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTt6KEEsQixzKTticmVha31jYXNlIEUuQmluYXJ5U3RyZWFtOntsZXQgYT1sLmRhdGEuZGF0YSxmPVIoQSxhLHMsMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O3ooQSxCLHMpO2JyZWFrfWNhc2UgRS5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUobC5kYXRhLnBhdGgsbC5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShsLmRhdGEucGF0aCxsLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkltYWdlOntsZXQgYT1sLmRhdGEsZj1SKEEsYS5kYXRhLHMsMCksQj1SKEEsYS5kaXJlY3Rpb24scywxKSxDPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSx1PXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkN9O3ooQSx1LHMpO2JyZWFrfWNhc2UgRS5NZXNoOntsZXQgYT1sLmRhdGEsZj1SKEEsYS5wb2ludHMscywwKSxCPVIoQSxhLmNlbGxzLHMsMSksQz1SKEEsYS5wb2ludERhdGEscywyKSx1PVIoQSxhLmNlbGxEYXRhLHMsMyksUT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O3ooQSxRLHMpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IGE9bC5kYXRhLGY9UihBLGEucG9pbnRzLHMsMCksQj1SKEEsYS52ZXJ0aWNlcyxzLDEpLEM9UihBLGEubGluZXMscywyKSx1PVIoQSxhLnBvbHlnb25zLHMsMyksUT1SKEEsYS50cmlhbmdsZVN0cmlwcyxzLDQpLHA9UihBLGEucG9pbnREYXRhLHMsNSksbT1SKEEsYS5wb2ludERhdGEscyw2KSxTPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHttfWB9O3ooQSxTLHMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChsKXt0aHJvdyB0eXBlb2YgbD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShsKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxsfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxJPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihsLHMpe2xldCBhPW51bGw7c3dpdGNoKGwudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixDKTthPXtkYXRhOmx0LmRlY29kZSh1KX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsQyk7YT1KU09OLnBhcnNlKGx0LmRlY29kZSh1KSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKTthPXtkYXRhOnV0KEEsQixDKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOnthPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShsLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOnthPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6X3IoQSxsLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IEI9YWUoQSxzKTtCLmRhdGE9TihBLHMsMCxCLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxCLmRpcmVjdGlvbj1OKEEscywxLE0uRmxvYXQ2NCksQi5tZXRhZGF0YT1uZXcgTWFwKEIubWV0YWRhdGEpLGE9QjticmVha31jYXNlIEUuTWVzaDp7bGV0IEI9YWUoQSxzKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9TihBLHMsMCxCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9TyhCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxscz4wP0IuY2VsbHM9TihBLHMsMSxCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpCLmNlbGxzPU8oQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPU4oQSxzLDIsQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9TyhCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPU4oQSxzLDMsQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU8oQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IEI9YWUoQSxzKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9TihBLHMsMCxNLkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPU4oQSxzLDEsRi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1OKEEscywyLEYuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9TihBLHMsMyxGLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPU4oQSxzLDQsRi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPU4oQSxzLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPU8oQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9TihBLHMsNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU8oQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmwudHlwZSxkYXRhOmF9O2MucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTppLHN0ZG91dDpvLHN0ZGVycjpJLG91dHB1dHM6Y319dmFyIGN0PXpyO3ZhciBWcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gWnIoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj1YcihBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24gWHIoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxWciYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIEN0PVpyO2Z1bmN0aW9uICRyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBmdD0kcjtmdW5jdGlvbiBBaShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgRXQ9QWk7ZnVuY3Rpb24gZWkoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIFF0PWVpO3ZhciB0aTtmdW5jdGlvbiBTQSgpe3JldHVybiB0aX12YXIgcmk7ZnVuY3Rpb24gcHQoKXtyZXR1cm4gcml9dmFyIGlpO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIGlpfXZhciBzZT1uZXcgTWFwO2Z1bmN0aW9uIG5pKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIGR0KCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gRkEoKXtsZXQgQT1wdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIG9pKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksc2UuaGFzKG4pKXJldHVybiBzZS5nZXQobik7e2xldCBpPWF3YWl0IHN0KEEsZT8udG9TdHJpbmcoKT8/ZHQoKSx0Pz9GQSgpKTtyZXR1cm4gc2Uuc2V0KG4saSksaX19YXN5bmMgZnVuY3Rpb24gYWkoQSxlLHQscixuKXtpZighYXdhaXQgSXQoKSl7bGV0IFE9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KFEpLG5ldyBFcnJvcihRKX1sZXQgaT1uPy53ZWJXb3JrZXI/P251bGw7aWYoaT09PSExKXtsZXQgUT1hd2FpdCBvaShBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO3JldHVybiBjdChRLGUsdCxyKX1sZXQgbz1pLEk9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P25pKCksYz10eXBlb2YgSSE9InN0cmluZyImJnR5cGVvZiBJPy5ocmVmPCJ1Ij9JLmhyZWY6SSx7d29ya2VyUHJveHk6bCx3b3JrZXI6c309YXdhaXQgYXQobyxjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO289cztsZXQgYT1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoUS50eXBlPT09RS5CaW5hcnlTdHJlYW0pe2xldCBwPVEuZGF0YS5kYXRhO2EucHVzaChwKX1lbHNlIGlmKFEudHlwZT09PUUuQmluYXJ5RmlsZSl7bGV0IHA9US5kYXRhLmRhdGE7YS5wdXNoKHApfWVsc2UgaWYoUS50eXBlPT09RS5JbWFnZSl7bGV0IHA9US5kYXRhO3AuZGF0YSE9PW51bGwmJmEucHVzaCguLi5mdChwKSl9ZWxzZSBpZihRLnR5cGU9PT1FLk1lc2gpe2xldCBwPVEuZGF0YTthLnB1c2goLi4uRXQocCkpfWVsc2UgaWYoUS50eXBlPT09RS5Qb2x5RGF0YSl7bGV0IHA9US5kYXRhO2EucHVzaCguLi5RdChwKSl9fSk7bGV0IGY9bj8ucGlwZWxpbmVCYXNlVXJsPz9kdCgpLEI9dHlwZW9mIGYhPSJzdHJpbmciJiZ0eXBlb2YgZj8uaHJlZjwidSI/Zi5ocmVmOmYsQz1yIT1udWxsP0pBKHIsQ3QoYSxuPy5ub0NvcHkpKTpudWxsLHU9YXdhaXQgbC5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQixlLHQsQyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9GQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6dS5yZXR1cm5WYWx1ZSxzdGRvdXQ6dS5zdGRvdXQsc3RkZXJyOnUuc3RkZXJyLG91dHB1dHM6dS5vdXRwdXRzLHdlYldvcmtlcjpvfX12YXIgeT1haTt2YXIgc2k9bnVsbDtmdW5jdGlvbiBtdCgpe3JldHVybiBzaX12YXIgSWUsSWk9YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2RpY29tQCR7UkF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBfcyhBKXtJZT1BfWZ1bmN0aW9uIHcoKXtpZih0eXBlb2YgSWU8InUiKXJldHVybiBJZTtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpJaX12YXIgZ2UsZ2k9bnVsbDtmdW5jdGlvbiBodChBKXtnZT1BfWZ1bmN0aW9uIGgoKXtpZih0eXBlb2YgZ2U8InUiKXJldHVybiBnZTtsZXQgQT1rQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpnaX12YXIgVj1udWxsO2FzeW5jIGZ1bmN0aW9uIHl0KCl7bGV0IEE9aCgpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7Vj1hd2FpdCBhQShlKX1mdW5jdGlvbiBlSShBKXtWPUF9YXN5bmMgZnVuY3Rpb24gaygpe2lmKFYhPT1udWxsKXJldHVybiBWLnRlcm1pbmF0ZWQmJmF3YWl0IHl0KCksVjtsZXQgQT1tdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCB5dCgpLFYpfWFzeW5jIGZ1bmN0aW9uIGxpKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6RS5JbWFnZX1dLG49QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IFM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO249e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUyl9fWxldCBpPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBTPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFMpfX1sZXQgbz1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6bn0se3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6aX1dLEk9W10sYz1uLnBhdGg7SS5wdXNoKGMpO2xldCBsPWkucGF0aDtJLnB1c2gobCksSS5wdXNoKCIwIiksSS5wdXNoKCIxIiksSS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuY29sb3JPdXRwdXQmJnQuY29sb3JPdXRwdXQmJkkucHVzaCgiLS1jb2xvci1vdXRwdXQiKSx0LmNvbmZpZ0ZpbGUmJkkucHVzaCgiLS1jb25maWctZmlsZSIsdC5jb25maWdGaWxlLnRvU3RyaW5nKCkpLHQuZnJhbWUmJkkucHVzaCgiLS1mcmFtZSIsdC5mcmFtZS50b1N0cmluZygpKSx0Lm5vUHJlc2VudGF0aW9uU3RhdGVPdXRwdXQmJnQubm9QcmVzZW50YXRpb25TdGF0ZU91dHB1dCYmSS5wdXNoKCItLW5vLXByZXNlbnRhdGlvbi1zdGF0ZS1vdXRwdXQiKSx0Lm5vQml0bWFwT3V0cHV0JiZ0Lm5vQml0bWFwT3V0cHV0JiZJLnB1c2goIi0tbm8tYml0bWFwLW91dHB1dCIpO2xldCBmPSJhcHBseS1wcmVzZW50YXRpb24tc3RhdGUtdG8taW1hZ2UiLEI9dD8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IGsoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOnUsc3RkZXJyOlEsb3V0cHV0czpwfT1hd2FpdCB5KGYsSSxyLG8se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmUSE9PSIiKXRocm93IG5ldyBFcnJvcihRKTtyZXR1cm57d2ViV29ya2VyOkMscHJlc2VudGF0aW9uU3RhdGVPdXRTdHJlYW06cFswXT8uZGF0YSxvdXRwdXRJbWFnZTpwWzFdPy5kYXRhfX12YXIgQmk9bGk7YXN5bmMgZnVuY3Rpb24gdWkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5CaW5hcnlTdHJlYW19XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHUpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLnJlYWRGaWxlT25seSYmZS5yZWFkRmlsZU9ubHkmJmkucHVzaCgiLS1yZWFkLWZpbGUtb25seSIpLGUucmVhZERhdGFzZXQmJmUucmVhZERhdGFzZXQmJmkucHVzaCgiLS1yZWFkLWRhdGFzZXQiKSxlLnJlYWRYZmVyQXV0byYmZS5yZWFkWGZlckF1dG8mJmkucHVzaCgiLS1yZWFkLXhmZXItYXV0byIpLGUucmVhZFhmZXJEZXRlY3QmJmUucmVhZFhmZXJEZXRlY3QmJmkucHVzaCgiLS1yZWFkLXhmZXItZGV0ZWN0IiksZS5yZWFkWGZlckxpdHRsZSYmZS5yZWFkWGZlckxpdHRsZSYmaS5wdXNoKCItLXJlYWQteGZlci1saXR0bGUiKSxlLnJlYWRYZmVyQmlnJiZlLnJlYWRYZmVyQmlnJiZpLnB1c2goIi0tcmVhZC14ZmVyLWJpZyIpLGUucmVhZFhmZXJJbXBsaWNpdCYmZS5yZWFkWGZlckltcGxpY2l0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWltcGxpY2l0IiksZS5hY2NlcHRPZGRMZW5ndGgmJmUuYWNjZXB0T2RkTGVuZ3RoJiZpLnB1c2goIi0tYWNjZXB0LW9kZC1sZW5ndGgiKSxlLmFzc3VtZUV2ZW5MZW5ndGgmJmUuYXNzdW1lRXZlbkxlbmd0aCYmaS5wdXNoKCItLWFzc3VtZS1ldmVuLWxlbmd0aCIpLGUuZW5hYmxlQ3AyNDYmJmUuZW5hYmxlQ3AyNDYmJmkucHVzaCgiLS1lbmFibGUtY3AyNDYiKSxlLmRpc2FibGVDcDI0NiYmZS5kaXNhYmxlQ3AyNDYmJmkucHVzaCgiLS1kaXNhYmxlLWNwMjQ2IiksZS5yZXRhaW5VbiYmZS5yZXRhaW5VbiYmaS5wdXNoKCItLXJldGFpbi11biIpLGUuY29udmVydFVuJiZlLmNvbnZlcnRVbiYmaS5wdXNoKCItLWNvbnZlcnQtdW4iKSxlLmVuYWJsZUNvcnJlY3Rpb24mJmUuZW5hYmxlQ29ycmVjdGlvbiYmaS5wdXNoKCItLWVuYWJsZS1jb3JyZWN0aW9uIiksZS5kaXNhYmxlQ29ycmVjdGlvbiYmZS5kaXNhYmxlQ29ycmVjdGlvbiYmaS5wdXNoKCItLWRpc2FibGUtY29ycmVjdGlvbiIpO2xldCBjPSJyZWFkLWRpY29tLWVuY2Fwc3VsYXRlZC1wZGYiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IGsoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpCfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMscGRmQmluYXJ5T3V0cHV0OihCWzBdPy5kYXRhKS5kYXRhfX12YXIgY2k9dWk7YXN5bmMgZnVuY3Rpb24gQ2koQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5UZXh0U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2lmKGkucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5yZWFkRmlsZU9ubHkmJmUucmVhZEZpbGVPbmx5JiZpLnB1c2goIi0tcmVhZC1maWxlLW9ubHkiKSxlLnJlYWREYXRhc2V0JiZlLnJlYWREYXRhc2V0JiZpLnB1c2goIi0tcmVhZC1kYXRhc2V0IiksZS5yZWFkWGZlckF1dG8mJmUucmVhZFhmZXJBdXRvJiZpLnB1c2goIi0tcmVhZC14ZmVyLWF1dG8iKSxlLnJlYWRYZmVyRGV0ZWN0JiZlLnJlYWRYZmVyRGV0ZWN0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWRldGVjdCIpLGUucmVhZFhmZXJMaXR0bGUmJmUucmVhZFhmZXJMaXR0bGUmJmkucHVzaCgiLS1yZWFkLXhmZXItbGl0dGxlIiksZS5yZWFkWGZlckJpZyYmZS5yZWFkWGZlckJpZyYmaS5wdXNoKCItLXJlYWQteGZlci1iaWciKSxlLnJlYWRYZmVySW1wbGljaXQmJmUucmVhZFhmZXJJbXBsaWNpdCYmaS5wdXNoKCItLXJlYWQteGZlci1pbXBsaWNpdCIpLGUucHJvY2Vzc2luZ0RldGFpbHMmJmUucHJvY2Vzc2luZ0RldGFpbHMmJmkucHVzaCgiLS1wcm9jZXNzaW5nLWRldGFpbHMiKSxlLnVua25vd25SZWxhdGlvbnNoaXAmJmUudW5rbm93blJlbGF0aW9uc2hpcCYmaS5wdXNoKCItLXVua25vd24tcmVsYXRpb25zaGlwIiksZS5pbnZhbGlkSXRlbVZhbHVlJiZlLmludmFsaWRJdGVtVmFsdWUmJmkucHVzaCgiLS1pbnZhbGlkLWl0ZW0tdmFsdWUiKSxlLmlnbm9yZUNvbnN0cmFpbnRzJiZlLmlnbm9yZUNvbnN0cmFpbnRzJiZpLnB1c2goIi0taWdub3JlLWNvbnN0cmFpbnRzIiksZS5pZ25vcmVJdGVtRXJyb3JzJiZlLmlnbm9yZUl0ZW1FcnJvcnMmJmkucHVzaCgiLS1pZ25vcmUtaXRlbS1lcnJvcnMiKSxlLnNraXBJbnZhbGlkSXRlbXMmJmUuc2tpcEludmFsaWRJdGVtcyYmaS5wdXNoKCItLXNraXAtaW52YWxpZC1pdGVtcyIpLGUuZGlzYWJsZVZyQ2hlY2tlciYmZS5kaXNhYmxlVnJDaGVja2VyJiZpLnB1c2goIi0tZGlzYWJsZS12ci1jaGVja2VyIiksZS5jaGFyc2V0UmVxdWlyZSYmZS5jaGFyc2V0UmVxdWlyZSYmaS5wdXNoKCItLWNoYXJzZXQtcmVxdWlyZSIpLGUuY2hhcnNldEFzc3VtZSYmaS5wdXNoKCItLWNoYXJzZXQtYXNzdW1lIixlLmNoYXJzZXRBc3N1bWUudG9TdHJpbmcoKSksZS5jaGFyc2V0Q2hlY2tBbGwmJmUuY2hhcnNldENoZWNrQWxsJiZpLnB1c2goIi0tY2hhcnNldC1jaGVjay1hbGwiKSxlLmNvbnZlcnRUb1V0ZjgmJmUuY29udmVydFRvVXRmOCYmaS5wdXNoKCItLWNvbnZlcnQtdG8tdXRmOCIpLGUudXJsUHJlZml4JiZpLnB1c2goIi0tdXJsLXByZWZpeCIsZS51cmxQcmVmaXgudG9TdHJpbmcoKSksZS5odG1sMzImJmUuaHRtbDMyJiZpLnB1c2goIi0taHRtbC0zMiIpLGUuaHRtbDQwJiZlLmh0bWw0MCYmaS5wdXNoKCItLWh0bWwtNDAiKSxlLnhodG1sMTEmJmUueGh0bWwxMSYmaS5wdXNoKCItLXhodG1sLTExIiksZS5hZGREb2N1bWVudFR5cGUmJmUuYWRkRG9jdW1lbnRUeXBlJiZpLnB1c2goIi0tYWRkLWRvY3VtZW50LXR5cGUiKSxlLmNzc1JlZmVyZW5jZSl7bGV0IHU9bi5sZW5ndGgudG9TdHJpbmcoKTtuLnB1c2goe3R5cGU6RS5UZXh0U3RyZWFtLGRhdGE6e2RhdGE6ZS5jc3NSZWZlcmVuY2V9fSksaS5wdXNoKCItLWNzcy1yZWZlcmVuY2UiLHUpfWlmKGUuY3NzRmlsZSl7bGV0IHU9ZS5jc3NGaWxlLFE9dTtpZih1IGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgdS5hcnJheUJ1ZmZlcigpO1E9e3BhdGg6dS5uYW1lLGRhdGE6bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG0pfX1pLnB1c2goIi0tY3NzLWZpbGUiKSxuLnB1c2goe3R5cGU6RS5UZXh0RmlsZSxkYXRhOlF9KTtsZXQgcD11IGluc3RhbmNlb2YgRmlsZT91Lm5hbWU6dS5wYXRoO2kucHVzaChwKX1lLmV4cGFuZElubGluZSYmZS5leHBhbmRJbmxpbmUmJmkucHVzaCgiLS1leHBhbmQtaW5saW5lIiksZS5uZXZlckV4cGFuZElubGluZSYmZS5uZXZlckV4cGFuZElubGluZSYmaS5wdXNoKCItLW5ldmVyLWV4cGFuZC1pbmxpbmUiKSxlLmFsd2F5c0V4cGFuZElubGluZSYmZS5hbHdheXNFeHBhbmRJbmxpbmUmJmkucHVzaCgiLS1hbHdheXMtZXhwYW5kLWlubGluZSIpLGUucmVuZGVyRnVsbERhdGEmJmUucmVuZGVyRnVsbERhdGEmJmkucHVzaCgiLS1yZW5kZXItZnVsbC1kYXRhIiksZS5zZWN0aW9uVGl0bGVJbmxpbmUmJmUuc2VjdGlvblRpdGxlSW5saW5lJiZpLnB1c2goIi0tc2VjdGlvbi10aXRsZS1pbmxpbmUiKSxlLmRvY3VtZW50VHlwZVRpdGxlJiZlLmRvY3VtZW50VHlwZVRpdGxlJiZpLnB1c2goIi0tZG9jdW1lbnQtdHlwZS10aXRsZSIpLGUucGF0aWVudEluZm9UaXRsZSYmZS5wYXRpZW50SW5mb1RpdGxlJiZpLnB1c2goIi0tcGF0aWVudC1pbmZvLXRpdGxlIiksZS5ub0RvY3VtZW50SGVhZGVyJiZlLm5vRG9jdW1lbnRIZWFkZXImJmkucHVzaCgiLS1uby1kb2N1bWVudC1oZWFkZXIiKSxlLnJlbmRlcklubGluZUNvZGVzJiZlLnJlbmRlcklubGluZUNvZGVzJiZpLnB1c2goIi0tcmVuZGVyLWlubGluZS1jb2RlcyIpLGUuY29uY2VwdE5hbWVDb2RlcyYmZS5jb25jZXB0TmFtZUNvZGVzJiZpLnB1c2goIi0tY29uY2VwdC1uYW1lLWNvZGVzIiksZS5udW1lcmljVW5pdENvZGVzJiZlLm51bWVyaWNVbml0Q29kZXMmJmkucHVzaCgiLS1udW1lcmljLXVuaXQtY29kZXMiKSxlLmNvZGVWYWx1ZVVuaXQmJmUuY29kZVZhbHVlVW5pdCYmaS5wdXNoKCItLWNvZGUtdmFsdWUtdW5pdCIpLGUuY29kZU1lYW5pbmdVbml0JiZlLmNvZGVNZWFuaW5nVW5pdCYmaS5wdXNoKCItLWNvZGUtbWVhbmluZy11bml0IiksZS5yZW5kZXJBbGxDb2RlcyYmZS5yZW5kZXJBbGxDb2RlcyYmaS5wdXNoKCItLXJlbmRlci1hbGwtY29kZXMiKSxlLmNvZGVEZXRhaWxzVG9vbHRpcCYmZS5jb2RlRGV0YWlsc1Rvb2x0aXAmJmkucHVzaCgiLS1jb2RlLWRldGFpbHMtdG9vbHRpcCIpO2xldCBjPSJzdHJ1Y3R1cmVkLXJlcG9ydC10by1odG1sIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBrKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpmLG91dHB1dHM6Qn09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJmYhPT0iIil0aHJvdyBuZXcgRXJyb3IoZik7cmV0dXJue3dlYldvcmtlcjpzLG91dHB1dFRleHQ6KEJbMF0/LmRhdGEpLmRhdGF9fXZhciBmaT1DaTthc3luYyBmdW5jdGlvbiBFaShBLGU9e30pe2xldCB0PVt7dHlwZTpFLlRleHRTdHJlYW19XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHUpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLnVua25vd25SZWxhdGlvbnNoaXAmJmUudW5rbm93blJlbGF0aW9uc2hpcCYmaS5wdXNoKCItLXVua25vd24tcmVsYXRpb25zaGlwIiksZS5pbnZhbGlkSXRlbVZhbHVlJiZlLmludmFsaWRJdGVtVmFsdWUmJmkucHVzaCgiLS1pbnZhbGlkLWl0ZW0tdmFsdWUiKSxlLmlnbm9yZUNvbnN0cmFpbnRzJiZlLmlnbm9yZUNvbnN0cmFpbnRzJiZpLnB1c2goIi0taWdub3JlLWNvbnN0cmFpbnRzIiksZS5pZ25vcmVJdGVtRXJyb3JzJiZlLmlnbm9yZUl0ZW1FcnJvcnMmJmkucHVzaCgiLS1pZ25vcmUtaXRlbS1lcnJvcnMiKSxlLnNraXBJbnZhbGlkSXRlbXMmJmUuc2tpcEludmFsaWRJdGVtcyYmaS5wdXNoKCItLXNraXAtaW52YWxpZC1pdGVtcyIpLGUubm9Eb2N1bWVudEhlYWRlciYmZS5ub0RvY3VtZW50SGVhZGVyJiZpLnB1c2goIi0tbm8tZG9jdW1lbnQtaGVhZGVyIiksZS5udW1iZXJOZXN0ZWRJdGVtcyYmZS5udW1iZXJOZXN0ZWRJdGVtcyYmaS5wdXNoKCItLW51bWJlci1uZXN0ZWQtaXRlbXMiKSxlLnNob3J0ZW5Mb25nVmFsdWVzJiZlLnNob3J0ZW5Mb25nVmFsdWVzJiZpLnB1c2goIi0tc2hvcnRlbi1sb25nLXZhbHVlcyIpLGUucHJpbnRJbnN0YW5jZVVpZCYmZS5wcmludEluc3RhbmNlVWlkJiZpLnB1c2goIi0tcHJpbnQtaW5zdGFuY2UtdWlkIiksZS5wcmludFNvcGNsYXNzU2hvcnQmJmUucHJpbnRTb3BjbGFzc1Nob3J0JiZpLnB1c2goIi0tcHJpbnQtc29wY2xhc3Mtc2hvcnQiKSxlLnByaW50U29wY2xhc3NMb25nJiZlLnByaW50U29wY2xhc3NMb25nJiZpLnB1c2goIi0tcHJpbnQtc29wY2xhc3MtbG9uZyIpLGUucHJpbnRTb3BjbGFzc1VpZCYmZS5wcmludFNvcGNsYXNzVWlkJiZpLnB1c2goIi0tcHJpbnQtc29wY2xhc3MtdWlkIiksZS5wcmludEFsbENvZGVzJiZlLnByaW50QWxsQ29kZXMmJmkucHVzaCgiLS1wcmludC1hbGwtY29kZXMiKSxlLnByaW50SW52YWxpZENvZGVzJiZlLnByaW50SW52YWxpZENvZGVzJiZpLnB1c2goIi0tcHJpbnQtaW52YWxpZC1jb2RlcyIpLGUucHJpbnRUZW1wbGF0ZUlkJiZlLnByaW50VGVtcGxhdGVJZCYmaS5wdXNoKCItLXByaW50LXRlbXBsYXRlLWlkIiksZS5pbmRpY2F0ZUVuaGFuY2VkJiZlLmluZGljYXRlRW5oYW5jZWQmJmkucHVzaCgiLS1pbmRpY2F0ZS1lbmhhbmNlZCIpLGUucHJpbnRDb2xvciYmZS5wcmludENvbG9yJiZpLnB1c2goIi0tcHJpbnQtY29sb3IiKTtsZXQgYz0ic3RydWN0dXJlZC1yZXBvcnQtdG8tdGV4dCIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOkJ9PWF3YWl0IHkoYyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXRUZXh0OihCWzBdPy5kYXRhKS5kYXRhfX12YXIgUWk9RWk7YXN5bmMgZnVuY3Rpb24gcGkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQyl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpZihpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBlLnRhZ3NUb1JlYWQ8InUiKXtsZXQgQz1uLmxlbmd0aC50b1N0cmluZygpO24ucHVzaCh7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZS50YWdzVG9SZWFkfSksaS5wdXNoKCItLXRhZ3MtdG8tcmVhZCIsQyl9bGV0IGM9InJlYWQtZGljb20tdGFncyIse3dlYldvcmtlcjpsLHJldHVyblZhbHVlOnMsc3RkZXJyOmEsb3V0cHV0czpmfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjplPy53ZWJXb3JrZXI/P251bGx9KTtpZihzIT09MCl0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpsLHRhZ3M6ZlswXS5kYXRhfX12YXIgZGk9cGk7YXN5bmMgZnVuY3Rpb24gbWkoQSxlPSExLHQ9e30pe2xldCByPVt7dHlwZTpFLkltYWdlfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0sbj1bXSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxpLnB1c2goIi0taW5wdXQtaW1hZ2VzIiksQS5mb3JFYWNoKEM9PntuLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6Q30pLGkucHVzaChDLnBhdGgpfSksdHlwZW9mIGU8InUiJiZlJiZpLnB1c2goIi0tc2luZ2xlLXNvcnRlZC1zZXJpZXMiKTtsZXQgYz0icmVhZC1pbWFnZS1kaWNvbS1maWxlLXNlcmllcyIse3dlYldvcmtlcjpsLHJldHVyblZhbHVlOnMsc3RkZXJyOmEsb3V0cHV0czpmfT1hd2FpdCB5KGMsaSxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjp0Py53ZWJXb3JrZXI/P251bGx9KTtpZihzIT09MCl0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpsLG91dHB1dEltYWdlOmZbMF0uZGF0YSxzb3J0ZWRGaWxlbmFtZXM6ZlsxXS5kYXRhfX12YXIgbGU9bWk7dmFyIGhpPXR5cGVvZiBnbG9iYWxUaGlzLm5hdmlnYXRvcj8uaGFyZHdhcmVDb25jdXJyZW5jeT09Im51bWJlciI/Z2xvYmFsVGhpcy5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTo0LHd0PTg7YXN5bmMgZnVuY3Rpb24geWkoQT17aW5wdXRJbWFnZXM6W119KXtsZXQgZT1BLndlYldvcmtlclBvb2w/P251bGw7ZT09PW51bGwmJihlPW5ldyBHQShoaSxsZSkpO2xldCB0PVtdO2lmKEEuaW5wdXRJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCciaW5wdXQtaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2lmKGF3YWl0IFByb21pc2UuYWxsKEEuaW5wdXRJbWFnZXMubWFwKGFzeW5jIHI9PntsZXQgbj1yO2lmKHIgaW5zdGFuY2VvZiBGaWxlKXtsZXQgaT1hd2FpdCByLmFycmF5QnVmZmVyKCk7bj17cGF0aDpyLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShpKX19dC5wdXNoKG4pfSkpLEEuc2luZ2xlU29ydGVkU2VyaWVzKXtsZXQgcj1bXTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrPXd0KXtsZXQgbD10LnNsaWNlKGMsYyt3dCk7ci5wdXNoKFtsLEEuc2luZ2xlU29ydGVkU2VyaWVzLHt9XSl9bGV0IG49YXdhaXQgZS5ydW5UYXNrcyhyKS5wcm9taXNlLGk9bi5tYXAoYz0+Yy5vdXRwdXRJbWFnZSksbz1uLnJlZHVjZSgoYyxsKT0+Yy5jb25jYXQobC5zb3J0ZWRGaWxlbmFtZXMpLFtdKTtyZXR1cm57b3V0cHV0SW1hZ2U6TkEoaSksd2ViV29ya2VyUG9vbDplLHNvcnRlZEZpbGVuYW1lczpvfX1lbHNle2xldCByPVtbdCxBLnNpbmdsZVNvcnRlZFNlcmllcyx7fV1dLG49YXdhaXQgZS5ydW5UYXNrcyhyKS5wcm9taXNlO3JldHVybntvdXRwdXRJbWFnZTpuWzBdLm91dHB1dEltYWdlLHdlYldvcmtlclBvb2w6ZSxzb3J0ZWRGaWxlbmFtZXM6blswXS5zb3J0ZWRGaWxlbmFtZXN9fX12YXIgd2k9eWk7YXN5bmMgZnVuY3Rpb24gRGkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpO2xldCBsPSJyZWFkLXNlZ21lbnRhdGlvbiIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6ZixzdGRlcnI6QixvdXRwdXRzOkN9PWF3YWl0IHkobCxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGYhPT0wJiZCIT09IiIpdGhyb3cgbmV3IEVycm9yKEIpO3JldHVybnt3ZWJXb3JrZXI6YSxzZWdJbWFnZTpDWzBdPy5kYXRhLG1ldGFJbmZvOkNbMV0/LmRhdGF9fXZhciBTaT1EaTthc3luYyBmdW5jdGlvbiBraShBLGU9e30pe2xldCB0PVt7dHlwZTpFLkltYWdlfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5tZXJnZVNlZ21lbnRzJiZlLm1lcmdlU2VnbWVudHMmJmkucHVzaCgiLS1tZXJnZS1zZWdtZW50cyIpO2xldCBsPSJyZWFkLW92ZXJsYXBwaW5nLXNlZ21lbnRhdGlvbiIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6ZixzdGRlcnI6QixvdXRwdXRzOkN9PWF3YWl0IHkobCxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGYhPT0wJiZCIT09IiIpdGhyb3cgbmV3IEVycm9yKEIpO3JldHVybnt3ZWJXb3JrZXI6YSxzZWdJbWFnZTpDWzBdPy5kYXRhLG1ldGFJbmZvOkNbMV0/LmRhdGF9fXZhciBGaT1raTthc3luYyBmdW5jdGlvbiBSaShBLGUsdCxyPXtyZWZEaWNvbVNlcmllczpbXX0pe2xldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0saT1be3R5cGU6RS5JbWFnZSxkYXRhOkF9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjEiKTtsZXQgbD10O2lmKG8ucHVzaChsKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksci5yZWZEaWNvbVNlcmllcyl7aWYoci5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO28ucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwoci5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgcD0+e2xldCBtPXA7aWYocCBpbnN0YW5jZW9mIEZpbGUpe2xldCBaPWF3YWl0IHAuYXJyYXlCdWZmZXIoKTttPXtwYXRoOnAubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFopfX1pLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6bX0pO2xldCBTPXAgaW5zdGFuY2VvZiBGaWxlP3AubmFtZTptLnBhdGg7by5wdXNoKFMpfSkpfXIuc2tpcEVtcHR5U2xpY2VzJiZyLnNraXBFbXB0eVNsaWNlcyYmby5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJm8ucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IHM9IndyaXRlLXNlZ21lbnRhdGlvbiIsYT1yPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOmYscmV0dXJuVmFsdWU6QixzdGRlcnI6QyxvdXRwdXRzOnV9PWF3YWl0IHkocyxvLG4saSx7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmEsbm9Db3B5OnI/Lm5vQ29weX0pO2lmKEIhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZixvdXRwdXREaWNvbUZpbGU6dVswXT8uZGF0YX19dmFyIGJpPVJpO2FzeW5jIGZ1bmN0aW9uIFVpKEEsZSx0LHI9e3JlZkRpY29tU2VyaWVzOltdfSl7bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxpPVt7dHlwZTpFLkltYWdlLGRhdGE6QX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmV9XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMSIpO2xldCBsPXQ7aWYoby5wdXNoKGwpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxyLnJlZkRpY29tU2VyaWVzKXtpZihyLnJlZkRpY29tU2VyaWVzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInJlZi1kaWNvbS1zZXJpZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7by5wdXNoKCItLXJlZi1kaWNvbS1zZXJpZXMiKSxhd2FpdCBQcm9taXNlLmFsbChyLnJlZkRpY29tU2VyaWVzLm1hcChhc3luYyBwPT57bGV0IG09cDtpZihwIGluc3RhbmNlb2YgRmlsZSl7bGV0IFo9YXdhaXQgcC5hcnJheUJ1ZmZlcigpO209e3BhdGg6cC5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoWil9fWkucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTptfSk7bGV0IFM9cCBpbnN0YW5jZW9mIEZpbGU/cC5uYW1lOm0ucGF0aDtvLnB1c2goUyl9KSl9ci5za2lwRW1wdHlTbGljZXMmJnIuc2tpcEVtcHR5U2xpY2VzJiZvLnB1c2goIi0tc2tpcC1lbXB0eS1zbGljZXMiKSxyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJnIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmby5wdXNoKCItLXVzZS1sYWJlbGlkLWFzLXNlZ21lbnRudW1iZXIiKTtsZXQgcz0id3JpdGUtb3ZlcmxhcHBpbmctc2VnbWVudGF0aW9uIixhPXI/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBrKCkpO2xldHt3ZWJXb3JrZXI6ZixyZXR1cm5WYWx1ZTpCLHN0ZGVycjpDLG91dHB1dHM6dX09YXdhaXQgeShzLG8sbixpLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6YSxub0NvcHk6cj8ubm9Db3B5fSk7aWYoQiE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpmLG91dHB1dERpY29tRmlsZTp1WzBdPy5kYXRhfX12YXIgTmk9VWk7YXN5bmMgZnVuY3Rpb24gVGkoQSxlLHQ9e3JlZkRpY29tU2VyaWVzOltdLHNlZ0ltYWdlczpbXX0pe2xldCByPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpO2xldCBJPWU7aWYoaS5wdXNoKEkpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LnJlZkRpY29tU2VyaWVzKXtpZih0LnJlZkRpY29tU2VyaWVzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInJlZi1kaWNvbS1zZXJpZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7aS5wdXNoKCItLXJlZi1kaWNvbS1zZXJpZXMiKSxhd2FpdCBQcm9taXNlLmFsbCh0LnJlZkRpY29tU2VyaWVzLm1hcChhc3luYyB1PT57bGV0IFE9dTtpZih1IGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgdS5hcnJheUJ1ZmZlcigpO1E9e3BhdGg6dS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fW4ucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpRfSk7bGV0IHA9dSBpbnN0YW5jZW9mIEZpbGU/dS5uYW1lOlEucGF0aDtpLnB1c2gocCl9KSl9aWYodC5zZWdJbWFnZXMpe2lmKHQuc2VnSW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNlZy1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7aS5wdXNoKCItLXNlZy1pbWFnZXMiKSxhd2FpdCBQcm9taXNlLmFsbCh0LnNlZ0ltYWdlcy5tYXAoYXN5bmMgdT0+e2xldCBRPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBtPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtRPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG0pfX1uLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6UX0pO2xldCBwPXUgaW5zdGFuY2VvZiBGaWxlP3UubmFtZTpRLnBhdGg7aS5wdXNoKHApfSkpfXQuc2tpcEVtcHR5U2xpY2VzJiZ0LnNraXBFbXB0eVNsaWNlcyYmaS5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksdC51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZ0LnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJmkucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IGM9IndyaXRlLW11bHRpLXNlZ21lbnRhdGlvbiIsbD10Py53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOkJ9PWF3YWl0IHkoYyxpLHIsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmwsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXREaWNvbUZpbGU6QlswXT8uZGF0YX19dmFyIEdpPVRpO3ZhciBEdD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgdHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBldD0oQSxJKT0+e2Zvcih2YXIgdCBpbiBJKXR0KEEsdCx7Z2V0OklbdF0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ3Q9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikscnQ9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLG1BPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsaXQ9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTpJLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gb0EoQSxJKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLHN0KEEpfX0sb3Q9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgSTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP0k9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTpJPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtJLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEFJPW5ldyBNYXAoW1sicHJveHkiLGl0XSxbInRocm93IixvdF1dKTtmdW5jdGlvbiBCdChBLEkpe2ZvcihsZXQgdCBvZiBBKWlmKEk9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoSSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gb0EoQSxJPWdsb2JhbFRoaXMsdD1bIioiXSl7SS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQnQodCxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6aSxwYXRoOnN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQz1zLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixuKT0+ZltuXSxBKSxvPXMucmVkdWNlKChmLG4pPT5mW25dLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6UT1vO2JyZWFrO2Nhc2UiU0VUIjpDW3Muc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPW8uYXBwbHkoQyxhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBvKC4uLmEpO1E9YXQoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOm59PW5ldyBNZXNzYWdlQ2hhbm5lbDtvQShBLG4pLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEMpe1E9e3ZhbHVlOkMsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQz0+KHt2YWx1ZTpDLFtlQV06MH0pKS50aGVuKEM9PntsZXRbbyxmXT1pQShDKTtJLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7aWQ6cn0pLGYpLGk9PT0iUkVMRUFTRSImJihJLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLElJKEkpLG1BIGluIEEmJnR5cGVvZiBBW21BXT09ImZ1bmN0aW9uIiYmQVttQV0oKSl9KS5jYXRjaChDPT57bGV0W28sZl09aUEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO0kucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtpZDpyfSksZil9KX0pLEkuc3RhcnQmJkkuc3RhcnQoKX1mdW5jdGlvbiBDdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBJSShBKXtDdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHN0KEEsSSl7cmV0dXJuIHBBKEEsW10sSSl9ZnVuY3Rpb24gdEEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIHRJKEEpe3JldHVybiBNKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0lJKEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBJPShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsSSksST09PTAmJnRJKEEpfSk7ZnVuY3Rpb24gbnQoQSxJKXtsZXQgdD0oZ0EuZ2V0KEkpfHwwKSsxO2dBLnNldChJLHQpLHJBJiZyQS5yZWdpc3RlcihBLEksQSl9ZnVuY3Rpb24gUXQoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gcEEoQSxJPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eSh0LHtnZXQocixpKXtpZih0QShlKSxpPT09cnQpcmV0dXJuKCk9PntRdChnKSx0SShBKSxlPSEwfTtpZihpPT09InRoZW4iKXtpZihJLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBzPU0oQSx7dHlwZToiR0VUIixwYXRoOkkubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBzLnRoZW4uYmluZChzKX1yZXR1cm4gcEEoQSxbLi4uSSxpXSl9LHNldChyLGkscyl7dEEoZSk7bGV0W2EsUV09aUEocyk7cmV0dXJuIE0oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5JLGldLm1hcChDPT5DLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsaSxzKXt0QShlKTtsZXQgYT1JW0kubGVuZ3RoLTFdO2lmKGE9PT1ndClyZXR1cm4gTShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIHBBKEEsSS5zbGljZSgwLC0xKSk7bGV0W1EsQ109X0Eocyk7cmV0dXJuIE0oQSx7dHlwZToiQVBQTFkiLHBhdGg6SS5tYXAobz0+by50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQykudGhlbihiKX0sY29uc3RydWN0KHIsaSl7dEEoZSk7bGV0W3MsYV09X0EoaSk7cmV0dXJuIE0oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOkkubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OnN9LGEpLnRoZW4oYil9fSk7cmV0dXJuIG50KGcsQSksZ31mdW5jdGlvbiBFdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgST1BLm1hcChpQSk7cmV0dXJuW0kubWFwKHQ9PnRbMF0pLEV0KEkubWFwKHQ9PnRbMV0pKV19dmFyIGVJPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsSSl7cmV0dXJuIGVJLnNldChBLEkpLEF9ZnVuY3Rpb24gYXQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIGlBKEEpe2ZvcihsZXRbSSx0XW9mIEFJKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6SSx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZUkuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBSS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIE0oQSxJLHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y3QoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIoaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LEkpLHQpfSl9ZnVuY3Rpb24gY3QoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSxJKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShJLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmdH09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6TkF9PU9iamVjdCxDQT0oQT0+ST0+e2xldCB0PWZ0LmNhbGwoSSk7cmV0dXJuIEFbdF18fChBW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSxJPT5DQShJKT09PUEpLHNBPUE9Pkk9PnR5cGVvZiBJPT09QSx7aXNBcnJheTpxfT1BcnJheSxaPXNBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsdChBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJlMoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIG9JPVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gRHQoQSl7bGV0IEk7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9JPUFycmF5QnVmZmVyLmlzVmlldyhBKTpJPUEmJkEuYnVmZmVyJiZvSShBLmJ1ZmZlciksSX12YXIgdXQ9c0EoInN0cmluZyIpLFM9c0EoImZ1bmN0aW9uIiksQkk9c0EoIm51bWJlciIpLG5BPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaHQ9QT0+QT09PSEwfHxBPT09ITEsQkE9QT0+e2lmKENBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IEk9TkEoQSk7cmV0dXJuKEk9PT1udWxsfHxJPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEkpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZHQ9VSgiRGF0ZSIpLHl0PVUoIkZpbGUiKSx3dD1VKCJCbG9iIiksbXQ9VSgiRmlsZUxpc3QiKSxwdD1BPT5uQShBKSYmUyhBLnBpcGUpLEZ0PUE9PntsZXQgSTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxTKEEuYXBwZW5kKSYmKChJPUNBKEEpKT09PSJmb3JtZGF0YSJ8fEk9PT0ib2JqZWN0IiYmUyhBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxTdD1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSdD1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLEkse2FsbE93bktleXM6dD0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLHEoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspSS5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9dD9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPXIubGVuZ3RoLHM7Zm9yKGU9MDtlPGk7ZSsrKXM9cltlXSxJLmNhbGwobnVsbCxBW3NdLHMsQSl9fWZ1bmN0aW9uIENJKEEsSSl7ST1JLnRvTG93ZXJDYXNlKCk7bGV0IHQ9T2JqZWN0LmtleXMoQSksZT10Lmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPXRbZV0sST09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgc0k9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxuST1BPT4hWihBKSYmQSE9PXNJO2Z1bmN0aW9uIFJBKCl7bGV0e2Nhc2VsZXNzOkF9PW5JKHRoaXMpJiZ0aGlzfHx7fSxJPXt9LHQ9KGUsZyk9PntsZXQgcj1BJiZDSShJLGcpfHxnO0JBKElbcl0pJiZCQShlKT9JW3JdPVJBKElbcl0sZSk6QkEoZSk/SVtyXT1SQSh7fSxlKTpxKGUpP0lbcl09ZS5zbGljZSgpOklbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSx0KTtyZXR1cm4gSX12YXIgTnQ9KEEsSSx0LHthbGxPd25LZXlzOmV9PXt9KT0+KFYoSSwoZyxyKT0+e3QmJlMoZyk/QVtyXT1XKGcsdCk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVXQ9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHdD0oQSxJLHQsZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6SS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxrdD0oQSxJLHQsZSk9PntsZXQgZyxyLGkscz17fTtpZihJPUl8fHt9LEE9PW51bGwpcmV0dXJuIEk7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KWk9Z1tyXSwoIWV8fGUoaSxBLEkpKSYmIXNbaV0mJihJW2ldPUFbaV0sc1tpXT0hMCk7QT10IT09ITEmJk5BKEEpfXdoaWxlKEEmJighdHx8dChBLEkpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBJfSxMdD0oQSxJLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09SS5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKEksdCk7cmV0dXJuIGUhPT0tMSYmZT09PXR9LEp0PUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihxKEEpKXJldHVybiBBO2xldCBJPUEubGVuZ3RoO2lmKCFCSShJKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoSSk7Zm9yKDtJLS0gPjA7KXRbSV09QVtJXTtyZXR1cm4gdH0sSHQ9KEE9Pkk9PkEmJkkgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk5BKFVpbnQ4QXJyYXkpKSxZdD0oQSxJKT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7SS5jYWxsKEEsclswXSxyWzFdKX19LGJ0PShBLEkpPT57bGV0IHQsZT1bXTtmb3IoOyh0PUEuZXhlYyhJKSkhPT1udWxsOyllLnB1c2godCk7cmV0dXJuIGV9LE10PVUoIkhUTUxGb3JtRWxlbWVudCIpLHF0PUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKHQsZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxyST0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihJLHQpPT5BLmNhbGwoSSx0KSkoT2JqZWN0LnByb3RvdHlwZSksS3Q9VSgiUmVnRXhwIiksUUk9KEEsSSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YodCwoZyxyKT0+e2xldCBpOyhpPUkoZyxyLEEpKSE9PSExJiYoZVtyXT1pfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE90PUE9PntRSShBLChJLHQpPT57aWYoUyhBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IGU9QVt0XTtpZihTKGUpKXtpZihJLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEkpe0kud3JpdGFibGU9ITE7cmV0dXJufUkuc2V0fHwoSS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK3QrIlwnIil9KX19KX0sVHQ9KEEsSSk9PntsZXQgdD17fSxlPWc9PntnLmZvckVhY2gocj0+e3Rbcl09ITB9KX07cmV0dXJuIHEoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdChJKSksdH0seHQ9KCk9Pnt9LFB0PShBLEkpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTpJKSxTQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLGlJPSIwMTIzNDU2Nzg5IixFST17RElHSVQ6aUksQUxQSEE6U0EsQUxQSEFfRElHSVQ6U0ErU0EudG9VcHBlckNhc2UoKStpSX0sanQ9KEE9MTYsST1FSS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOmV9PUk7Zm9yKDtBLS07KXQrPUlbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiB0fTtmdW5jdGlvbiBXdChBKXtyZXR1cm4hIShBJiZTKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWnQ9QT0+e2xldCBJPW5ldyBBcnJheSgxMCksdD0oZSxnKT0+e2lmKG5BKGUpKXtpZihJLmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7SVtnXT1lO2xldCByPXEoZSk/W106e307cmV0dXJuIFYoZSwoaSxzKT0+e2xldCBhPXQoaSxnKzEpOyFaKGEpJiYocltzXT1hKX0pLElbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gdChBLDApfSxWdD1VKCJBc3luY0Z1bmN0aW9uIiksWHQ9QT0+QSYmKG5BKEEpfHxTKEEpKSYmUyhBLnRoZW4pJiZTKEEuY2F0Y2gpLEI9e2lzQXJyYXk6cSxpc0FycmF5QnVmZmVyOm9JLGlzQnVmZmVyOmx0LGlzRm9ybURhdGE6RnQsaXNBcnJheUJ1ZmZlclZpZXc6RHQsaXNTdHJpbmc6dXQsaXNOdW1iZXI6QkksaXNCb29sZWFuOmh0LGlzT2JqZWN0Om5BLGlzUGxhaW5PYmplY3Q6QkEsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZHQsaXNGaWxlOnl0LGlzQmxvYjp3dCxpc1JlZ0V4cDpLdCxpc0Z1bmN0aW9uOlMsaXNTdHJlYW06cHQsaXNVUkxTZWFyY2hQYXJhbXM6U3QsaXNUeXBlZEFycmF5Okh0LGlzRmlsZUxpc3Q6bXQsZm9yRWFjaDpWLG1lcmdlOlJBLGV4dGVuZDpOdCx0cmltOlJ0LHN0cmlwQk9NOlV0LGluaGVyaXRzOkd0LHRvRmxhdE9iamVjdDprdCxraW5kT2Y6Q0Esa2luZE9mVGVzdDpVLGVuZHNXaXRoOkx0LHRvQXJyYXk6SnQsZm9yRWFjaEVudHJ5Oll0LG1hdGNoQWxsOmJ0LGlzSFRNTEZvcm06TXQsaGFzT3duUHJvcGVydHk6ckksaGFzT3duUHJvcDpySSxyZWR1Y2VEZXNjcmlwdG9yczpRSSxmcmVlemVNZXRob2RzOk90LHRvT2JqZWN0U2V0OlR0LHRvQ2FtZWxDYXNlOnF0LG5vb3A6eHQsdG9GaW5pdGVOdW1iZXI6UHQsZmluZEtleTpDSSxnbG9iYWw6c0ksaXNDb250ZXh0RGVmaW5lZDpuSSxBTFBIQUJFVDpFSSxnZW5lcmF0ZVN0cmluZzpqdCxpc1NwZWNDb21wbGlhbnRGb3JtOld0LHRvSlNPTk9iamVjdDpadCxpc0FzeW5jRm46VnQsaXNUaGVuYWJsZTpYdH07ZnVuY3Rpb24gSyhBLEksdCxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsSSYmKHRoaXMuY29kZT1JKSx0JiYodGhpcy5jb25maWc9dCksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1CLmluaGVyaXRzKEssRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpCLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhST1LLnByb3RvdHlwZSxjST17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjSVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLGNJKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYUksImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Sy5mcm9tPShBLEksdCxlLGcscik9PntsZXQgaT1PYmplY3QuY3JlYXRlKGFJKTtyZXR1cm4gQi50b0ZsYXRPYmplY3QoQSxpLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxzPT5zIT09ImlzQXhpb3NFcnJvciIpLEsuY2FsbChpLEEubWVzc2FnZSxJLHQsZSxnKSxpLmNhdXNlPUEsaS5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKGksciksaX07dmFyIGw9Szt2YXIgUUE9bnVsbDtmdW5jdGlvbiBVQShBKXtyZXR1cm4gQi5pc1BsYWluT2JqZWN0KEEpfHxCLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbEkoQSl7cmV0dXJuIEIuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZkkoQSxJLHQpe3JldHVybiBBP0EuY29uY2F0KEkpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWxJKGcpLCF0JiZyPyJbIitnKyJdIjpnfSkuam9pbih0PyIuIjoiIik6SX1mdW5jdGlvbiB6dChBKXtyZXR1cm4gQi5pc0FycmF5KEEpJiYhQS5zb21lKFVBKX12YXIgX3Q9Qi50b0ZsYXRPYmplY3QoQix7fSxudWxsLGZ1bmN0aW9uKEkpe3JldHVybi9eaXNbQS1aXS8udGVzdChJKX0pO2Z1bmN0aW9uIHZ0KEEsSSx0KXtpZighQi5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtJPUl8fG5ldyhRQXx8Rm9ybURhdGEpLHQ9Qi50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUIuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT10Lm1ldGFUb2tlbnMsZz10LnZpc2l0b3J8fEMscj10LmRvdHMsaT10LmluZGV4ZXMsYT0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZCLmlzU3BlY0NvbXBsaWFudEZvcm0oSSk7aWYoIUIuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQi5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQi5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEIuaXNBcnJheUJ1ZmZlcihFKXx8Qi5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEMoRSxjLHUpe2xldCBkPUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQi5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEIuaXNBcnJheShFKSYmenQoRSl8fChCLmlzRmlsZUxpc3QoRSl8fEIuZW5kc1dpdGgoYywiW10iKSkmJihkPUIudG9BcnJheShFKSkpcmV0dXJuIGM9bEkoYyksZC5mb3JFYWNoKGZ1bmN0aW9uKE4sSXQpeyEoQi5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZJLmFwcGVuZChpPT09ITA/ZkkoW2NdLEl0LHIpOmk9PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIFVBKEUpPyEwOihJLmFwcGVuZChmSSh1LGMsciksUShFKSksITEpfWxldCBvPVtdLGY9T2JqZWN0LmFzc2lnbihfdCx7ZGVmYXVsdFZpc2l0b3I6Qyxjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpVQX0pO2Z1bmN0aW9uIG4oRSxjKXtpZighQi5pc1VuZGVmaW5lZChFKSl7aWYoby5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtvLnB1c2goRSksQi5mb3JFYWNoKEUsZnVuY3Rpb24oZCxSKXsoIShCLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJmcuY2FsbChJLGQsQi5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJm4oZCxjP2MuY29uY2F0KFIpOltSXSl9KSxvLnBvcCgpfX1pZighQi5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIG4oQSksSX12YXIgTD12dDtmdW5jdGlvbiBESShBKXtsZXQgST17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gSVtlXX0pfWZ1bmN0aW9uIHVJKEEsSSl7dGhpcy5fcGFpcnM9W10sQSYmTChBLHRoaXMsSSl9dmFyIGhJPXVJLnByb3RvdHlwZTtoSS5hcHBlbmQ9ZnVuY3Rpb24oSSx0KXt0aGlzLl9wYWlycy5wdXNoKFtJLHRdKX07aEkudG9TdHJpbmc9ZnVuY3Rpb24oSSl7bGV0IHQ9ST9mdW5jdGlvbihlKXtyZXR1cm4gSS5jYWxsKHRoaXMsZSxESSl9OkRJO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHQoZ1swXSkrIj0iK3QoZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11STtmdW5jdGlvbiAkdChBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsSSx0KXtpZighSSlyZXR1cm4gQTtsZXQgZT10JiZ0LmVuY29kZXx8JHQsZz10JiZ0LnNlcmlhbGl6ZSxyO2lmKGc/cj1nKEksdCk6cj1CLmlzVVJMU2VhcmNoUGFyYW1zKEkpP0kudG9TdHJpbmcoKTpuZXcgRUEoSSx0KS50b1N0cmluZyhlKSxyKXtsZXQgaT1BLmluZGV4T2YoIiUyMyIpO2khPT0tMSYmKEE9QS5zbGljZSgwLGkpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBHQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKEksdCxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6SSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KEkpe3RoaXMuaGFuZGxlcnNbSV0mJih0aGlzLmhhbmRsZXJzW0ldPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goSSl7Qi5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJkkoZSl9KX19LGtBPUdBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGRJPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeUk9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3ST10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtST17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkSSxGb3JtRGF0YTp5SSxCbG9iOndJfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIExBPXt9O2V0KExBLHtoYXNCcm93c2VyRW52OigpPT5wSSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+SWV9KTt2YXIgcEk9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnBJJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksSWU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5MQSwuLi5tSX07ZnVuY3Rpb24gSkEoQSxJKXtyZXR1cm4gTChBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZCLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChlLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxJKSl9ZnVuY3Rpb24gdGUoQSl7cmV0dXJuIEIubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcChJPT5JWzBdPT09IltdIj8iIjpJWzFdfHxJWzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgST17fSx0PU9iamVjdC5rZXlzKEEpLGUsZz10Lmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPXRbZV0sSVtyXT1BW3JdO3JldHVybiBJfWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIEkodCxlLGcscil7bGV0IGk9dFtyKytdO2lmKGk9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgcz1OdW1iZXIuaXNGaW5pdGUoK2kpLGE9cj49dC5sZW5ndGg7cmV0dXJuIGk9IWkmJkIuaXNBcnJheShnKT9nLmxlbmd0aDppLGE/KEIuaGFzT3duUHJvcChnLGkpP2dbaV09W2dbaV0sZV06Z1tpXT1lLCFzKTooKCFnW2ldfHwhQi5pc09iamVjdChnW2ldKSkmJihnW2ldPVtdKSxJKHQsZSxnW2ldLHIpJiZCLmlzQXJyYXkoZ1tpXSkmJihnW2ldPWVlKGdbaV0pKSwhcyl9aWYoQi5pc0Zvcm1EYXRhKEEpJiZCLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIEIuZm9yRWFjaEVudHJ5KEEsKGUsZyk9PntJKHRlKGUpLGcsdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsSSx0KXtpZihCLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oSXx8SlNPTi5wYXJzZSkoQSksQi50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBIQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oSSx0KXtsZXQgZT10LmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1CLmlzT2JqZWN0KEkpO2lmKHImJkIuaXNIVE1MRm9ybShJKSYmKEk9bmV3IEZvcm1EYXRhKEkpKSxCLmlzRm9ybURhdGEoSSkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EoSSkpOkk7aWYoQi5pc0FycmF5QnVmZmVyKEkpfHxCLmlzQnVmZmVyKEkpfHxCLmlzU3RyZWFtKEkpfHxCLmlzRmlsZShJKXx8Qi5pc0Jsb2IoSSkpcmV0dXJuIEk7aWYoQi5pc0FycmF5QnVmZmVyVmlldyhJKSlyZXR1cm4gSS5idWZmZXI7aWYoQi5pc1VSTFNlYXJjaFBhcmFtcyhJKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxJLnRvU3RyaW5nKCk7bGV0IHM7aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSkEoSSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChzPUIuaXNGaWxlTGlzdChJKSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEwocz97ImZpbGVzW10iOkl9OkksYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUoSSkpOkl9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oSSl7bGV0IHQ9dGhpcy50cmFuc2l0aW9uYWx8fEhBLnRyYW5zaXRpb25hbCxlPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihJJiZCLmlzU3RyaW5nKEkpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IGk9ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UoSSl9Y2F0Y2gocyl7aWYoaSl0aHJvdyBzLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShzLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6c319cmV0dXJuIEl9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihJKXtyZXR1cm4gST49MjAwJiZJPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0IuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57SEEuaGVhZGVyc1tBXT17fX0pO3ZhciBPPUhBO3ZhciBpZT1CLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLEZJPUE9PntsZXQgST17fSx0LGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihpKXtnPWkuaW5kZXhPZigiOiIpLHQ9aS5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPWkuc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIXR8fElbdF0mJmllW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/SVt0XT9JW3RdLnB1c2goZSk6SVt0XT1bZV06SVt0XT1JW3RdP0lbdF0rIiwgIitlOmUpfSksSX07dmFyIFNJPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpCLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBvZShBKXtsZXQgST1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT10LmV4ZWMoQSk7KUlbZVsxXV09ZVsyXTtyZXR1cm4gSX12YXIgQmU9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWUEoQSxJLHQsZSxnKXtpZihCLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLEksdCk7aWYoZyYmKEk9dCksISFCLmlzU3RyaW5nKEkpKXtpZihCLmlzU3RyaW5nKGUpKXJldHVybiBJLmluZGV4T2YoZSkhPT0tMTtpZihCLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QoSSl9fWZ1bmN0aW9uIENlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywoSSx0LGUpPT50LnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gc2UoQSxJKXtsZXQgdD1CLnRvQ2FtZWxDYXNlKCIgIitJKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrdCx7dmFsdWU6ZnVuY3Rpb24oZyxyLGkpe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyxJLGcscixpKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVD1jbGFzc3tjb25zdHJ1Y3RvcihJKXtJJiZ0aGlzLnNldChJKX1zZXQoSSx0LGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihzLGEsUSl7bGV0IEM9eihhKTtpZighQyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IG89Qi5maW5kS2V5KGcsQyk7KCFvfHxnW29dPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbb10hPT0hMSkmJihnW298fGFdPWZBKHMpKX1sZXQgaT0ocyxhKT0+Qi5mb3JFYWNoKHMsKFEsQyk9PnIoUSxDLGEpKTtyZXR1cm4gQi5pc1BsYWluT2JqZWN0KEkpfHxJIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9pKEksdCk6Qi5pc1N0cmluZyhJKSYmKEk9SS50cmltKCkpJiYhQmUoSSk/aShGSShJKSx0KTpJIT1udWxsJiZyKHQsSSxlKSx0aGlzfWdldChJLHQpe2lmKEk9eihJKSxJKXtsZXQgZT1CLmZpbmRLZXkodGhpcyxJKTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCF0KXJldHVybiBnO2lmKHQ9PT0hMClyZXR1cm4gb2UoZyk7aWYoQi5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxnLGUpO2lmKEIuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEksdCl7aWYoST16KEkpLEkpe2xldCBlPUIuZmluZEtleSh0aGlzLEkpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighdHx8WUEodGhpcyx0aGlzW2VdLGUsdCkpKX1yZXR1cm4hMX1kZWxldGUoSSx0KXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihpKXtpZihpPXooaSksaSl7bGV0IHM9Qi5maW5kS2V5KGUsaSk7cyYmKCF0fHxZQShlLGVbc10scyx0KSkmJihkZWxldGUgZVtzXSxnPSEwKX19cmV0dXJuIEIuaXNBcnJheShJKT9JLmZvckVhY2gocik6cihJKSxnfWNsZWFyKEkpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLGU9dC5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPXRbZV07KCFJfHxZQSh0aGlzLHRoaXNbcl0scixJLCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUoSSl7bGV0IHQ9dGhpcyxlPXt9O3JldHVybiBCLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBpPUIuZmluZEtleShlLHIpO2lmKGkpe3RbaV09ZkEoZyksZGVsZXRlIHRbcl07cmV0dXJufWxldCBzPUk/Q2Uocik6U3RyaW5nKHIpLnRyaW0oKTtzIT09ciYmZGVsZXRlIHRbcl0sdFtzXT1mQShnKSxlW3NdPSEwfSksdGhpc31jb25jYXQoLi4uSSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uSSl9dG9KU09OKEkpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEIuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYodFtnXT1JJiZCLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbSSx0XSk9PkkrIjogIit0KS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEkpe3JldHVybiBJIGluc3RhbmNlb2YgdGhpcz9JOm5ldyB0aGlzKEkpfXN0YXRpYyBjb25jYXQoSSwuLi50KXtsZXQgZT1uZXcgdGhpcyhJKTtyZXR1cm4gdC5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3NvcihJKXtsZXQgZT0odGhpc1tTSV09dGhpc1tTSV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIoaSl7bGV0IHM9eihpKTtlW3NdfHwoc2UoZyxpKSxlW3NdPSEwKX1yZXR1cm4gQi5pc0FycmF5KEkpP0kuZm9yRWFjaChyKTpyKEkpLHRoaXN9fTtULmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtCLnJlZHVjZURlc2NyaXB0b3JzKFQucHJvdG90eXBlLCh7dmFsdWU6QX0sSSk9PntsZXQgdD1JWzBdLnRvVXBwZXJDYXNlKCkrSS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW3RdPWV9fX0pO0IuZnJlZXplTWV0aG9kcyhUKTt2YXIgbT1UO2Z1bmN0aW9uIF8oQSxJKXtsZXQgdD10aGlzfHxPLGU9SXx8dCxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBCLmZvckVhY2goQSxmdW5jdGlvbihzKXtyPXMuY2FsbCh0LHIsZy5ub3JtYWxpemUoKSxJP0kuc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJJKEEsSSx0KXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELEksdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1CLmluaGVyaXRzKFJJLGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSj1SSTtmdW5jdGlvbiBiQShBLEksdCl7bGV0IGU9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhZXx8ZSh0LnN0YXR1cyk/QSh0KTpJKG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIE5JPXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLEksdCxlLGcscil7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChJKV07Qi5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksQi5pc1N0cmluZyhlKSYmaS5wdXNoKCJwYXRoPSIrZSksQi5pc1N0cmluZyhnKSYmaS5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgST1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIEk/ZGVjb2RlVVJJQ29tcG9uZW50KElbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gTUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gcUEoQSxJKXtyZXR1cm4gST9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK0kucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSxJKXtyZXR1cm4gQSYmIU1BKEkpP3FBKEEsSSk6SX12YXIgVUk9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgST0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgaT1yO3JldHVybiBJJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLGk9dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSkse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGkpe2xldCBzPUIuaXNTdHJpbmcoaSk/ZyhpKTppO3JldHVybiBzLnByb3RvY29sPT09ZS5wcm90b2NvbCYmcy5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBLQShBKXtsZXQgST0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gSSYmSVsxXXx8IiJ9ZnVuY3Rpb24gbmUoQSxJKXtBPUF8fDEwO2xldCB0PW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLGk7cmV0dXJuIEk9SSE9PXZvaWQgMD9JOjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEM9ZVtyXTtpfHwoaT1RKSx0W2ddPWEsZVtnXT1RO2xldCBvPXIsZj0wO2Zvcig7byE9PWc7KWYrPXRbbysrXSxvPW8lQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtaTxJKXJldHVybjtsZXQgbj1DJiZRLUM7cmV0dXJuIG4/TWF0aC5yb3VuZChmKjFlMy9uKTp2b2lkIDB9fXZhciBHST1uZTtmdW5jdGlvbiBrSShBLEkpe2xldCB0PTAsZT1HSSg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsaT1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAscz1yLXQsYT1lKHMpLFE9cjw9aTt0PXI7bGV0IEM9e2xvYWRlZDpyLHRvdGFsOmkscHJvZ3Jlc3M6aT9yL2k6dm9pZCAwLGJ5dGVzOnMscmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJmkmJlE/KGktcikvYTp2b2lkIDAsZXZlbnQ6Z307Q1tJPyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQyl9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLExJPVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOmksd2l0aFhTUkZUb2tlbjpzfT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQztpZihCLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChDPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qz9DLnNwbGl0KCI7IikubWFwKGQ9PmQudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgbz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO28ub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxvLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIG4oKXtpZighbylyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gbyYmby5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9vLnJlc3BvbnNlVGV4dDpvLnJlc3BvbnNlLHN0YXR1czpvLnN0YXR1cyxzdGF0dXNUZXh0Om8uc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDpvfTtiQShmdW5jdGlvbihOKXt0KE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LGQpLG89bnVsbH1pZigib25sb2FkZW5kImluIG8/by5vbmxvYWRlbmQ9bjpvLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFvfHxvLnJlYWR5U3RhdGUhPT00fHxvLnN0YXR1cz09PTAmJiEoby5yZXNwb25zZVVSTCYmby5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQobil9LG8ub25hYm9ydD1mdW5jdGlvbigpe28mJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsbykpLG89bnVsbCl9LG8ub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxvKSksbz1udWxsfSxvLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLG8pKSxvPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYocyYmQi5pc0Z1bmN0aW9uKHMpJiYocz1zKEEpKSxzfHxzIT09ITEmJlVJKGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTkkucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gbyYmQi5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSxkKXtvLnNldFJlcXVlc3RIZWFkZXIoZCx1KX0pLEIuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoby53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKG8ucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm8uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGtJKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmby51cGxvYWQmJm8udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrSShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57byYmKGUoIWN8fGMudHlwZT9uZXcgSihudWxsLEEsbyk6Yyksby5hYm9ydCgpLG89bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9S0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59by5zZW5kKGd8fG51bGwpfSl9O3ZhciBPQT17aHR0cDpRQSx4aHI6TEl9O0IuZm9yRWFjaChPQSwoQSxJKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOkl9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6SX0pfX0pO3ZhciBKST1BPT5gLSAke0F9YCxFZT1BPT5CLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qi5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6SX09QSx0LGUsZz17fTtmb3IobGV0IHI9MDtyPEk7cisrKXt0PUFbcl07bGV0IGk7aWYoZT10LCFFZSh0KSYmKGU9T0FbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtpfVwnYCk7aWYoZSlicmVhaztnW2l8fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW3MsYV0pPT5gYWRhcHRlciAke3N9IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxpPUk/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSkkpLmpvaW4oYCUwQWApOiIgIitKSShyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIraSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOk9BfTtmdW5jdGlvbiBUQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSihudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBUQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxPLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFRBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFRBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIST1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBHKEEsSSl7ST1JfHx7fTtsZXQgdD17fTtmdW5jdGlvbiBlKFEsQyxvKXtyZXR1cm4gQi5pc1BsYWluT2JqZWN0KFEpJiZCLmlzUGxhaW5PYmplY3QoQyk/Qi5tZXJnZS5jYWxsKHtjYXNlbGVzczpvfSxRLEMpOkIuaXNQbGFpbk9iamVjdChDKT9CLm1lcmdlKHt9LEMpOkIuaXNBcnJheShDKT9DLnNsaWNlKCk6Q31mdW5jdGlvbiBnKFEsQyxvKXtpZihCLmlzVW5kZWZpbmVkKEMpKXtpZighQi5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxvKX1lbHNlIHJldHVybiBlKFEsQyxvKX1mdW5jdGlvbiByKFEsQyl7aWYoIUIuaXNVbmRlZmluZWQoQykpcmV0dXJuIGUodm9pZCAwLEMpfWZ1bmN0aW9uIGkoUSxDKXtpZihCLmlzVW5kZWZpbmVkKEMpKXtpZighQi5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQyl9ZnVuY3Rpb24gcyhRLEMsbyl7aWYobyBpbiBJKXJldHVybiBlKFEsQyk7aWYobyBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6aSx0cmFuc2Zvcm1SZXF1ZXN0OmksdHJhbnNmb3JtUmVzcG9uc2U6aSxwYXJhbXNTZXJpYWxpemVyOmksdGltZW91dDppLHRpbWVvdXRNZXNzYWdlOmksd2l0aENyZWRlbnRpYWxzOmksd2l0aFhTUkZUb2tlbjppLGFkYXB0ZXI6aSxyZXNwb25zZVR5cGU6aSx4c3JmQ29va2llTmFtZTppLHhzcmZIZWFkZXJOYW1lOmksb25VcGxvYWRQcm9ncmVzczppLG9uRG93bmxvYWRQcm9ncmVzczppLGRlY29tcHJlc3M6aSxtYXhDb250ZW50TGVuZ3RoOmksbWF4Qm9keUxlbmd0aDppLGJlZm9yZVJlZGlyZWN0OmksdHJhbnNwb3J0OmksaHR0cEFnZW50OmksaHR0cHNBZ2VudDppLGNhbmNlbFRva2VuOmksc29ja2V0UGF0aDppLHJlc3BvbnNlRW5jb2Rpbmc6aSx2YWxpZGF0ZVN0YXR1czpzLGhlYWRlcnM6KFEsQyk9PmcoSEkoUSksSEkoQyksITApfTtyZXR1cm4gQi5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxJKSksZnVuY3Rpb24oQyl7bGV0IG89YVtDXXx8ZyxmPW8oQVtDXSxJW0NdLEMpO0IuaXNVbmRlZmluZWQoZikmJm8hPT1zfHwodFtDXT1mKX0pLHR9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxJKT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisoSTwxPyJuICI6IiAiKStBfX0pO3ZhciBZST17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oSSx0LGUpe2Z1bmN0aW9uIGcocixpKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitpKyhlPyIuICIrZToiIil9cmV0dXJuKHIsaSxzKT0+e2lmKEk9PT0hMSl0aHJvdyBuZXcgbChnKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhWUlbaV0mJihZSVtpXT0hMCxjb25zb2xlLndhcm4oZyhpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLEk/SShyLGkscyk6ITB9fTtmdW5jdGlvbiBhZShBLEksdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxpPUlbcl07aWYoaSl7bGV0IHM9QVtyXSxhPXM9PT12b2lkIDB8fGkocyxyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIEg9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKEkpe3RoaXMuZGVmYXVsdHM9SSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcga0EscmVzcG9uc2U6bmV3IGtBfX1hc3luYyByZXF1ZXN0KEksdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KEksdCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QoSSx0KXt0eXBlb2YgST09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9SSk6dD1JfHx7fSx0PUcodGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09dDtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQi5pc0Z1bmN0aW9uKGcpP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOkguZnVuY3Rpb24sc2VyaWFsaXplOkguZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGk9ciYmQi5tZXJnZShyLmNvbW1vbixyW3QubWV0aG9kXSk7ciYmQi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLHQuaGVhZGVycz1tLmNvbmNhdChpLHIpO2xldCBzPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbih0KT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLHMudW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBDLG89MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxzKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEM9UHJvbWlzZS5yZXNvbHZlKHQpO288ZjspQz1DLnRoZW4oRVtvKytdLEVbbysrXSk7cmV0dXJuIEN9Zj1zLmxlbmd0aDtsZXQgbj10O2ZvcihvPTA7bzxmOyl7bGV0IEU9c1tvKytdLGM9c1tvKytdO3RyeXtuPUUobil9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtDPURBLmNhbGwodGhpcyxuKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKG89MCxmPVEubGVuZ3RoO288ZjspQz1DLnRoZW4oUVtvKytdLFFbbysrXSk7cmV0dXJuIEN9Z2V0VXJpKEkpe0k9Ryh0aGlzLmRlZmF1bHRzLEkpO2xldCB0PSQoSS5iYXNlVVJMLEkudXJsKTtyZXR1cm4gWCh0LEkucGFyYW1zLEkucGFyYW1zU2VyaWFsaXplcil9fTtCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEkpe3gucHJvdG90eXBlW0ldPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKGV8fHt9LHttZXRob2Q6SSx1cmw6dCxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtCLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihJKXtmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbihyLGkscyl7cmV0dXJuIHRoaXMucmVxdWVzdChHKHN8fHt9LHttZXRob2Q6SSxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTppfSkpfX14LnByb3RvdHlwZVtJXT10KCkseC5wcm90b3R5cGVbSSsiRm9ybSJdPXQoITApfSk7dmFyIEFBPXg7dmFyIFBBPWNsYXNzIEF7Y29uc3RydWN0b3IoSSl7aWYodHlwZW9mIEkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXt0PXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsaT1uZXcgUHJvbWlzZShzPT57ZS5zdWJzY3JpYmUocykscj1zfSkudGhlbihnKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxpfSxJKGZ1bmN0aW9uKHIsaSxzKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBKKHIsaSxzKSx0KGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEkpe2lmKHRoaXMucmVhc29uKXtJKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEkpOnRoaXMuX2xpc3RlbmVycz1bSV19dW5zdWJzY3JpYmUoSSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoSSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBJO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXtJPWd9KSxjYW5jZWw6SX19fSxiST1QQTtmdW5jdGlvbiBqQShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gV0EoQSl7cmV0dXJuIEIuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFpBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhaQSkuZm9yRWFjaCgoW0EsSV0pPT57WkFbSV09QX0pO3ZhciBNST1aQTtmdW5jdGlvbiBxSShBKXtsZXQgST1uZXcgQUEoQSksdD1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LEkpO3JldHVybiBCLmV4dGVuZCh0LEFBLnByb3RvdHlwZSxJLHthbGxPd25LZXlzOiEwfSksQi5leHRlbmQodCxJLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcUkoRyhBLGcpKX0sdH12YXIgaD1xSShPKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1KO2guQ2FuY2VsVG9rZW49Ykk7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9TDtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24oSSl7cmV0dXJuIFByb21pc2UuYWxsKEkpfTtoLnNwcmVhZD1qQTtoLmlzQXhpb3NFcnJvcj1XQTtoLm1lcmdlQ29uZmlnPUc7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQi5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU1JO2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczpvaSxBeGlvc0Vycm9yOkJpLENhbmNlbGVkRXJyb3I6Q2ksaXNDYW5jZWw6c2ksQ2FuY2VsVG9rZW46bmksVkVSU0lPTjpRaSxhbGw6RWksQ2FuY2VsOmFpLGlzQXhpb3NFcnJvcjpjaSxzcHJlYWQ6ZmksdG9Gb3JtRGF0YTpsaSxBeGlvc0hlYWRlcnM6RGksSHR0cFN0YXR1c0NvZGU6dWksZm9ybVRvSlNPTjpoaSxnZXRBZGFwdGVyOmRpLG1lcmdlQ29uZmlnOnlpfT1kQTt2YXIgSUEsayxYQSxWQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe1hBPW5ldyBVaW50OEFycmF5KGsuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIElBfHwodHlwZW9mIGZldGNoPCJ1Ij9JQT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0tJKS50aGVuKEk9PkkuYXJyYXlCdWZmZXIoKSkudGhlbihJPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShJLFZBKSkudGhlbih0aGlzLl9pbml0KTpJQT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLSSwiYmFzZTY0IiksVkEpLnRoZW4odGhpcy5faW5pdCksSUEpfV9pbml0KEkpe2s9SS5pbnN0YW5jZSxWQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUoSSx0PTApe2lmKCFrKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPUkuYnl0ZUxlbmd0aCxnPWsuZXhwb3J0cy5tYWxsb2MoZSk7WEEuc2V0KEksZyksdD10fHxOdW1iZXIoay5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9ay5leHBvcnRzLm1hbGxvYyh0KSxpPWsuZXhwb3J0cy5aU1REX2RlY29tcHJlc3Mocix0LGcsZSkscz1YQS5zbGljZShyLHIraSk7cmV0dXJuIGsuZXhwb3J0cy5mcmVlKGcpLGsuZXhwb3J0cy5mcmVlKHIpLHN9fSxLST0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPST1uZXcgeUEsVEk9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSxJLHQpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke0l9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pO1RJfHwoYXdhaXQgT0kuaW5pdCgpLFRJPSEwKTtsZXQgcz1PSS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpzfSl9dmFyIHhJPWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsSSx0KXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLHhJKGUsSSx0KSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIFBJPWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LHA9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxQPXVlO2Z1bmN0aW9uIGhlKEEsSSl7bGV0IHQ9bnVsbDtzd2l0Y2goQSl7Y2FzZSBwLlVJbnQ4Ont0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ4Ont0PW5ldyBJbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQxNjp7dD1uZXcgVWludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDE2Ont0PW5ldyBJbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MzI6e3Q9bmV3IFVpbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQzMjp7dD1uZXcgSW50MzJBcnJheShJKTticmVha31jYXNlIHAuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdVaW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdJbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0MzI6e3Q9bmV3IEZsb2F0MzJBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQ2NDp7dD1uZXcgRmxvYXQ2NEFycmF5KEkpO2JyZWFrfWNhc2UibnVsbCI6e3Q9bnVsbDticmVha31jYXNlIG51bGw6e3Q9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiB0fXZhciBZPWhlO3ZhciBaST10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqST1uZXcgVGV4dEVuY29kZXIsV0k9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsSSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4oSSx0LmZsYWdzKSxyPUEuZnNfc3RhdChJKS5zaXplLGk9bnVsbDtaST9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTppPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgcz1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKGUscywwLHIsMCksQS5mc19jbG9zZShlKSxzfWZ1bmN0aW9uIFZJKEEsSSx0KXtsZXQgZT1udWxsO1pJP2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmU9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksdCk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24geShBLEksdCxlKXtsZXQgZz0wO3JldHVybiBJIT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlLEkuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoSS5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIGooQSxJLHQpe2xldCBlPUpTT04uc3RyaW5naWZ5KEkpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIEYoQSxJLHQsZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxpPVZJKEEsZyxyKTtyZXR1cm4gWShlLGkuYnVmZmVyKX1mdW5jdGlvbiB6QShBLEkpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsSV0pLGU9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSxJLHQsZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBvPWpJLmVuY29kZShRLmRhdGEuZGF0YSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBvPWpJLmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBvPVEuZGF0YS5kYXRhLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBvPVEuZGF0YSxmPXkoQSxvLmRhdGEsQywwKSxuPXkoQSxvLmRpcmVjdGlvbixDLDEpLEU9dHlwZW9mIG8ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oby5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTpvLmltYWdlVHlwZSxuYW1lOm8ubmFtZSxvcmlnaW46by5vcmlnaW4sc3BhY2luZzpvLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLHNpemU6by5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07aihBLGMsQyk7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8uY2VsbHMsQywxKSxFPXkoQSxvLnBvaW50RGF0YSxDLDIpLGM9eShBLG8uY2VsbERhdGEsQywzKSx1PXttZXNoVHlwZTpvLm1lc2hUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6by5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGNlbGxCdWZmZXJTaXplOm8uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07aihBLHUsQyk7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLnZlcnRpY2VzLEMsMSksRT15KEEsby5saW5lcyxDLDIpLGM9eShBLG8ucG9seWdvbnMsQywzKSx1PXkoQSxvLnRyaWFuZ2xlU3RyaXBzLEMsNCksZD15KEEsby5wb2ludERhdGEsQyw1KSxSPXkoQSxvLnBvaW50RGF0YSxDLDYpLE49e3BvbHlEYXRhVHlwZTpvLnBvbHlEYXRhVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6by52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsbGluZXNCdWZmZXJTaXplOm8ubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpvLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6by50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07aihBLE4sQyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbihJLnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLHM9QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZyPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7bGV0IG89bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289e2RhdGE6V0kuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPUpTT04ucGFyc2UoV0kuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pO289e2RhdGE6VkkoQSxuLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbj16QShBLEMpO24uZGF0YT1GKEEsQywwLG4uaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLG4uZGlyZWN0aW9uPUYoQSxDLDEsUC5GbG9hdDY0KSxuLm1ldGFkYXRhPW5ldyBNYXAobi5tZXRhZGF0YSksbz1uO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpuLnBvaW50cz1ZKG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxzPjA/bi5jZWxscz1GKEEsQywxLG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOm4uY2VsbHM9WShuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsMixuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsMyxuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLFAuRmxvYXQzMik6bi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxuLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP24udmVydGljZXM9RihBLEMsMSxwLlVJbnQzMik6bi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksbi5saW5lc0J1ZmZlclNpemU+MD9uLmxpbmVzPUYoQSxDLDIscC5VSW50MzIpOm4ubGluZXM9bmV3IFVpbnQzMkFycmF5LG4ucG9seWdvbnNCdWZmZXJTaXplPjA/bi5wb2x5Z29ucz1GKEEsQywzLHAuVUludDMyKTpuLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxuLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP24udHJpYW5nbGVTdHJpcHM9RihBLEMsNCxwLlVJbnQzMik6bi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsNSxuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQyw2LG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6b307YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Omksc3RkZXJyOnMsb3V0cHV0czphfX12YXIgWEk9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sSSk7ZyE9PW51bGwmJnQucHVzaChnKX1yZXR1cm4gdH1mdW5jdGlvbiBwZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLHdlJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDpJP3Q6dC5zbGljZSgwKX12YXIgekk9bWU7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF9JPUZlO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2ST1TZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJEk9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSxJLHQsZSl7bGV0IGc9WEkoQSxJLHQsZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaS50eXBlPT09RC5CaW5hcnlTdHJlYW18fGkudHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IHM9aS5kYXRhO3IucHVzaChzKX1lbHNlIGlmKGkudHlwZT09PUQuSW1hZ2Upe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uX0kocykpfWVsc2UgaWYoaS50eXBlPT09RC5NZXNoKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLnZJKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuUG9seURhdGEpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uJEkocykpfX0pLEZBKGcsekkociwhMCkpfXZhciBBdD1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsSSx0LGUsZyxyKXtsZXQgaT1hd2FpdCBQSShBLEkscik7cmV0dXJuIGF3YWl0IEF0KGksdCxlLGcpfX07b0EoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7aHQoRHQpO2V4cG9ydHtCaSBhcyBhcHBseVByZXNlbnRhdGlvblN0YXRlVG9JbWFnZSxrIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsaCBhcyBnZXRQaXBlbGluZVdvcmtlclVybCx3IGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsY2kgYXMgcmVhZERpY29tRW5jYXBzdWxhdGVkUGRmLGRpIGFzIHJlYWREaWNvbVRhZ3Msd2kgYXMgcmVhZEltYWdlRGljb21GaWxlU2VyaWVzLGxlIGFzIHJlYWRJbWFnZURpY29tRmlsZVNlcmllc1dvcmtlckZ1bmN0aW9uLEZpIGFzIHJlYWRPdmVybGFwcGluZ1NlZ21lbnRhdGlvbixTaSBhcyByZWFkU2VnbWVudGF0aW9uLGVJIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsaHQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsX3MgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxmaSBhcyBzdHJ1Y3R1cmVkUmVwb3J0VG9IdG1sLFFpIGFzIHN0cnVjdHVyZWRSZXBvcnRUb1RleHQsUkEgYXMgdmVyc2lvbixHaSBhcyB3cml0ZU11bHRpU2VnbWVudGF0aW9uLE5pIGFzIHdyaXRlT3ZlcmxhcHBpbmdTZWdtZW50YXRpb24sYmkgYXMgd3JpdGVTZWdtZW50YXRpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" +default_js_module = """data:text/javascript;base64,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjIuMSIsUkE9RnQ7dmFyIFJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRj1SdDt2YXIgYnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09YnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEYuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEYuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEYuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE89VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sQmU9TnQ7dmFyIGJBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PUYuVUludDgscj1CZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSx1ZT1iQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIGNlPVR0O3ZhciBVQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgdWUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKWNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sQ2U9VUE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgQ2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLEk9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgSShvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKyljKj10LnNpemVbc107bGV0IGw9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsYypsKSxsKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgTkE9R3Q7dmFyIFRBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sSSk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxJLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLkl9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPUksbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9bi5yZXN1bHRzO24ucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sR0E9VEE7dmFyIEx0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEU9THQ7dmFyIEVlPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLE90PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHhBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxMQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksSUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLFFlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHh0PXtjYW5IYW5kbGU6QT0+UWUoQSkmJkFbRWVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGRlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxQQShBKX19LFB0PXtjYW5IYW5kbGU6QT0+UWUoQSkmJklBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxwZT1uZXcgTWFwKFtbInByb3h5Iix4dF0sWyJ0aHJvdyIsUHRdXSk7ZnVuY3Rpb24gSnQoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGRlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIUp0KHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpvLHBhdGg6SX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxjPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEgpLGw7dHJ5e2xldCBzPUkuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLGE9SS5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpsPWE7YnJlYWs7Y2FzZSJTRVQiOnNbSS5zbGljZSgtMSlbMF1dPUgobi5kYXRhLnZhbHVlKSxsPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmw9YS5hcHBseShzLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGEoLi4uYyk7bD1xdChmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2RlKEEsQiksbD1KQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpsPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gocyl7bD17dmFsdWU6cyxbSUFdOjB9fVByb21pc2UucmVzb2x2ZShsKS5jYXRjaChzPT4oe3ZhbHVlOnMsW0lBXTowfSkpLnRoZW4ocz0+e2xldFthLGZdPUJBKHMpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDppfSksZiksbz09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksbWUoZSksTEEgaW4gQSYmdHlwZW9mIEFbTEFdPT0iZnVuY3Rpb24iJiZBW0xBXSgpKX0pLmNhdGNoKHM9PntsZXRbYSxmXT1CQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW0lBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxmKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIEh0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIG1lKEEpe0h0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gUEEoQSxlKXtyZXR1cm4gT0EoQSxbXSxlKX1mdW5jdGlvbiBzQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaGUoQSl7cmV0dXJuIFcoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57bWUoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsbEE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSxlKSxlPT09MCYmaGUoQSl9KTtmdW5jdGlvbiBNdChBLGUpe2xldCB0PShnQS5nZXQoZSl8fDApKzE7Z0Euc2V0KGUsdCksbEEmJmxBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBXdChBKXtsQSYmbEEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBPQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChpLG8pe2lmKHNBKHIpLG89PT14QSlyZXR1cm4oKT0+e1d0KG4pLGhlKEEpLHI9ITB9O2lmKG89PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IEk9VyhBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oSCk7cmV0dXJuIEkudGhlbi5iaW5kKEkpfXJldHVybiBPQShBLFsuLi5lLG9dKX0sc2V0KGksbyxJKXtzQShyKTtsZXRbYyxsXT1CQShJKTtyZXR1cm4gVyhBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsb10ubWFwKHM9PnMudG9TdHJpbmcoKSksdmFsdWU6Y30sbCkudGhlbihIKX0sYXBwbHkoaSxvLEkpe3NBKHIpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PU90KXJldHVybiBXKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oSCk7aWYoYz09PSJiaW5kIilyZXR1cm4gT0EoQSxlLnNsaWNlKDAsLTEpKTtsZXRbbCxzXT1mZShJKTtyZXR1cm4gVyhBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpsfSxzKS50aGVuKEgpfSxjb25zdHJ1Y3QoaSxvKXtzQShyKTtsZXRbSSxjXT1mZShvKTtyZXR1cm4gVyhBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6SX0sYykudGhlbihIKX19KTtyZXR1cm4gTXQobixBKSxufWZ1bmN0aW9uIFl0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGZlKEEpe2xldCBlPUEubWFwKEJBKTtyZXR1cm5bZS5tYXAodD0+dFswXSksWXQoZS5tYXAodD0+dFsxXSkpXX12YXIgeWU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gSkEoQSxlKXtyZXR1cm4geWUuc2V0KEEsZSksQX1mdW5jdGlvbiBxdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbRWVdOiEwfSl9ZnVuY3Rpb24gQkEoQSl7Zm9yKGxldFtlLHRdb2YgcGUpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSx5ZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBIKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHBlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gVyhBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj1LdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiBLdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gWChBLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KGUsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOnZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpXQX09T2JqZWN0LGNBPShBPT5lPT57bGV0IHQ9dnQuY2FsbChlKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLGU9PmNBKGUpPT09QSksQ0E9QT0+ZT0+dHlwZW9mIGU9PT1BLHtpc0FycmF5Oll9PUFycmF5LCQ9Q0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGp0KEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmVChBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIga2U9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBfdChBKXtsZXQgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOmU9QSYmQS5idWZmZXImJmtlKEEuYnVmZmVyKSxlfXZhciB6dD1DQSgic3RyaW5nIiksVD1DQSgiZnVuY3Rpb24iKSxGZT1DQSgibnVtYmVyIiksZkE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixWdD1BPT5BPT09ITB8fEE9PT0hMSx1QT1BPT57aWYoY0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgZT1XQShBKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxadD1HKCJEYXRlIiksWHQ9RygiRmlsZSIpLCR0PUcoIkJsb2IiKSxBcj1HKCJGaWxlTGlzdCIpLGVyPUE9PmZBKEEpJiZUKEEucGlwZSksdHI9QT0+e2xldCBlO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFQoQS5hcHBlbmQpJiYoKGU9Y0EoQSkpPT09ImZvcm1kYXRhInx8ZT09PSJvYmplY3QiJiZUKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHJyPUcoIlVSTFNlYXJjaFBhcmFtcyIpLGlyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBBQShBLGUse2FsbE93bktleXM6dD0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCByLG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLFkoQSkpZm9yKHI9MCxuPUEubGVuZ3RoO3I8bjtyKyspZS5jYWxsKG51bGwsQVtyXSxyLEEpO2Vsc2V7bGV0IGk9dD9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPWkubGVuZ3RoLEk7Zm9yKHI9MDtyPG87cisrKUk9aVtyXSxlLmNhbGwobnVsbCxBW0ldLEksQSl9fWZ1bmN0aW9uIFJlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHQ9T2JqZWN0LmtleXMoQSkscj10Lmxlbmd0aCxuO2Zvcig7ci0tID4wOylpZihuPXRbcl0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgYmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxVZT1BPT4hJChBKSYmQSE9PWJlO2Z1bmN0aW9uIE1BKCl7bGV0e2Nhc2VsZXNzOkF9PVVlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsbik9PntsZXQgaT1BJiZSZShlLG4pfHxuO3VBKGVbaV0pJiZ1QShyKT9lW2ldPU1BKGVbaV0scik6dUEocik/ZVtpXT1NQSh7fSxyKTpZKHIpP2VbaV09ci5zbGljZSgpOmVbaV09cn07Zm9yKGxldCByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspYXJndW1lbnRzW3JdJiZBQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIG5yPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihBQShlLChuLGkpPT57dCYmVChuKT9BW2ldPVgobix0KTpBW2ldPW59LHthbGxPd25LZXlzOnJ9KSxBKSxvcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGFyPShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LHNyPShBLGUsdCxyKT0+e2xldCBuLGksbyxJPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxpPW4ubGVuZ3RoO2ktLSA+MDspbz1uW2ldLCghcnx8cihvLEEsZSkpJiYhSVtvXSYmKGVbb109QVtvXSxJW29dPSEwKTtBPXQhPT0hMSYmV0EoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LElyPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sZ3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKFkoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIUZlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxscj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmV0EoVWludDhBcnJheSkpLEJyPShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IGk9bi52YWx1ZTtlLmNhbGwoQSxpWzBdLGlbMV0pfX0sdXI9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sY3I9RygiSFRNTEZvcm1FbGVtZW50IiksQ3I9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLERlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxmcj1HKCJSZWdFeHAiKSxOZT0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307QUEodCwobixpKT0+e2xldCBvOyhvPWUobixpLEEpKSE9PSExJiYocltpXT1vfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEscil9LEVyPUE9PntOZShBLChlLHQpPT57aWYoVChBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9QVt0XTtpZihUKHIpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LFFyPShBLGUpPT57bGV0IHQ9e30scj1uPT57bi5mb3JFYWNoKGk9Pnt0W2ldPSEwfSl9O3JldHVybiBZKEEpP3IoQSk6cihTdHJpbmcoQSkuc3BsaXQoZSkpLHR9LHByPSgpPT57fSxkcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksSEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixTZT0iMDEyMzQ1Njc4OSIsVGU9e0RJR0lUOlNlLEFMUEhBOkhBLEFMUEhBX0RJR0lUOkhBK0hBLnRvVXBwZXJDYXNlKCkrU2V9LG1yPShBPTE2LGU9VGUuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gaHIoQSl7cmV0dXJuISEoQSYmVChBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHlyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsbik9PntpZihmQShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2Vbbl09cjtsZXQgaT1ZKHIpP1tdOnt9O3JldHVybiBBQShyLChvLEkpPT57bGV0IGM9dChvLG4rMSk7ISQoYykmJihpW0ldPWMpfSksZVtuXT12b2lkIDAsaX19cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LHdyPUcoIkFzeW5jRnVuY3Rpb24iKSxEcj1BPT5BJiYoZkEoQSl8fFQoQSkpJiZUKEEudGhlbikmJlQoQS5jYXRjaCksZz17aXNBcnJheTpZLGlzQXJyYXlCdWZmZXI6a2UsaXNCdWZmZXI6anQsaXNGb3JtRGF0YTp0cixpc0FycmF5QnVmZmVyVmlldzpfdCxpc1N0cmluZzp6dCxpc051bWJlcjpGZSxpc0Jvb2xlYW46VnQsaXNPYmplY3Q6ZkEsaXNQbGFpbk9iamVjdDp1QSxpc1VuZGVmaW5lZDokLGlzRGF0ZTpadCxpc0ZpbGU6WHQsaXNCbG9iOiR0LGlzUmVnRXhwOmZyLGlzRnVuY3Rpb246VCxpc1N0cmVhbTplcixpc1VSTFNlYXJjaFBhcmFtczpycixpc1R5cGVkQXJyYXk6bHIsaXNGaWxlTGlzdDpBcixmb3JFYWNoOkFBLG1lcmdlOk1BLGV4dGVuZDpucix0cmltOmlyLHN0cmlwQk9NOm9yLGluaGVyaXRzOmFyLHRvRmxhdE9iamVjdDpzcixraW5kT2Y6Y0Esa2luZE9mVGVzdDpHLGVuZHNXaXRoOklyLHRvQXJyYXk6Z3IsZm9yRWFjaEVudHJ5OkJyLG1hdGNoQWxsOnVyLGlzSFRNTEZvcm06Y3IsaGFzT3duUHJvcGVydHk6RGUsaGFzT3duUHJvcDpEZSxyZWR1Y2VEZXNjcmlwdG9yczpOZSxmcmVlemVNZXRob2RzOkVyLHRvT2JqZWN0U2V0OlFyLHRvQ2FtZWxDYXNlOkNyLG5vb3A6cHIsdG9GaW5pdGVOdW1iZXI6ZHIsZmluZEtleTpSZSxnbG9iYWw6YmUsaXNDb250ZXh0RGVmaW5lZDpVZSxBTFBIQUJFVDpUZSxnZW5lcmF0ZVN0cmluZzptcixpc1NwZWNDb21wbGlhbnRGb3JtOmhyLHRvSlNPTk9iamVjdDp5cixpc0FzeW5jRm46d3IsaXNUaGVuYWJsZTpEcn07ZnVuY3Rpb24gcShBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1nLmluaGVyaXRzKHEsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpnLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBHZT1xLnByb3RvdHlwZSxMZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhxLExlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoR2UsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7cS5mcm9tPShBLGUsdCxyLG4saSk9PntsZXQgbz1PYmplY3QuY3JlYXRlKEdlKTtyZXR1cm4gZy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGMpe3JldHVybiBjIT09RXJyb3IucHJvdG90eXBlfSxJPT5JIT09ImlzQXhpb3NFcnJvciIpLHEuY2FsbChvLEEubWVzc2FnZSxlLHQscixuKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxpJiZPYmplY3QuYXNzaWduKG8saSksb307dmFyIGQ9cTt2YXIgRUE9bnVsbDtmdW5jdGlvbiBZQShBKXtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KEEpfHxnLmlzQXJyYXkoQSl9ZnVuY3Rpb24geGUoQSl7cmV0dXJuIGcuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gT2UoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLGkpe3JldHVybiBuPXhlKG4pLCF0JiZpPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBTcihBKXtyZXR1cm4gZy5pc0FycmF5KEEpJiYhQS5zb21lKFlBKX12YXIga3I9Zy50b0ZsYXRPYmplY3QoZyx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIEZyKEEsZSx0KXtpZighZy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhFQXx8Rm9ybURhdGEpLHQ9Zy50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHUsUSl7cmV0dXJuIWcuaXNVbmRlZmluZWQoUVt1XSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fHMsaT10LmRvdHMsbz10LmluZGV4ZXMsYz0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZnLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWcuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGwoQyl7aWYoQz09PW51bGwpcmV0dXJuIiI7aWYoZy5pc0RhdGUoQykpcmV0dXJuIEMudG9JU09TdHJpbmcoKTtpZighYyYmZy5pc0Jsb2IoQykpdGhyb3cgbmV3IGQoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGcuaXNBcnJheUJ1ZmZlcihDKXx8Zy5pc1R5cGVkQXJyYXkoQyk/YyYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0NdKTpCdWZmZXIuZnJvbShDKTpDfWZ1bmN0aW9uIHMoQyx1LFEpe2xldCBwPUM7aWYoQyYmIVEmJnR5cGVvZiBDPT0ib2JqZWN0Iil7aWYoZy5lbmRzV2l0aCh1LCJ7fSIpKXU9cj91OnUuc2xpY2UoMCwtMiksQz1KU09OLnN0cmluZ2lmeShDKTtlbHNlIGlmKGcuaXNBcnJheShDKSYmU3IoQyl8fChnLmlzRmlsZUxpc3QoQyl8fGcuZW5kc1dpdGgodSwiW10iKSkmJihwPWcudG9BcnJheShDKSkpcmV0dXJuIHU9eGUodSkscC5mb3JFYWNoKGZ1bmN0aW9uKFMsWil7IShnLmlzVW5kZWZpbmVkKFMpfHxTPT09bnVsbCkmJmUuYXBwZW5kKG89PT0hMD9PZShbdV0sWixpKTpvPT09bnVsbD91OnUrIltdIixsKFMpKX0pLCExfXJldHVybiBZQShDKT8hMDooZS5hcHBlbmQoT2UoUSx1LGkpLGwoQykpLCExKX1sZXQgYT1bXSxmPU9iamVjdC5hc3NpZ24oa3Ise2RlZmF1bHRWaXNpdG9yOnMsY29udmVydFZhbHVlOmwsaXNWaXNpdGFibGU6WUF9KTtmdW5jdGlvbiBCKEMsdSl7aWYoIWcuaXNVbmRlZmluZWQoQykpe2lmKGEuaW5kZXhPZihDKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIit1LmpvaW4oIi4iKSk7YS5wdXNoKEMpLGcuZm9yRWFjaChDLGZ1bmN0aW9uKHAsbSl7KCEoZy5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZuLmNhbGwoZSxwLGcuaXNTdHJpbmcobSk/bS50cmltKCk6bSx1LGYpKT09PSEwJiZCKHAsdT91LmNvbmNhdChtKTpbbV0pfSksYS5wb3AoKX19aWYoIWcuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLGV9dmFyIHg9RnI7ZnVuY3Rpb24gUGUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbcl19KX1mdW5jdGlvbiBKZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJngoQSx0aGlzLGUpfXZhciBIZT1KZS5wcm90b3R5cGU7SGUuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcGFpcnMucHVzaChbZSx0XSl9O0hlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCB0PWU/ZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUGUpfTpQZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KG5bMF0pKyI9Iit0KG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgUUE9SmU7ZnVuY3Rpb24gUnIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gZUEoQSxlLHQpe2lmKCFlKXJldHVybiBBO2xldCByPXQmJnQuZW5jb2RlfHxScixuPXQmJnQuc2VyaWFsaXplLGk7aWYobj9pPW4oZSx0KTppPWcuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBRQShlLHQpLnRvU3RyaW5nKHIpLGkpe2xldCBvPUEuaW5kZXhPZigiIyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBBfXZhciBxQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOnI/ci5zeW5jaHJvbm91czohMSxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7Zy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24ocil7ciE9PW51bGwmJmUocil9KX19LEtBPXFBO3ZhciBwQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIE1lPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpRQTt2YXIgV2U9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBZZT10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBxZT17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpNZSxGb3JtRGF0YTpXZSxCbG9iOlllfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIHZBPXt9O2t0KHZBLHtoYXNCcm93c2VyRW52OigpPT5LZSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PmJyLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+VXJ9KTt2YXIgS2U9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsYnI9KEE9PktlJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksVXI9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciBiPXsuLi52QSwuLi5xZX07ZnVuY3Rpb24gakEoQSxlKXtyZXR1cm4geChBLG5ldyBiLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIGIuaXNOb2RlJiZnLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6aS5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gTnIoQSl7cmV0dXJuIGcubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBUcihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsbj10Lmxlbmd0aCxpO2ZvcihyPTA7cjxuO3IrKylpPXRbcl0sZVtpXT1BW2ldO3JldHVybiBlfWZ1bmN0aW9uIEdyKEEpe2Z1bmN0aW9uIGUodCxyLG4saSl7bGV0IG89dFtpKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgST1OdW1iZXIuaXNGaW5pdGUoK28pLGM9aT49dC5sZW5ndGg7cmV0dXJuIG89IW8mJmcuaXNBcnJheShuKT9uLmxlbmd0aDpvLGM/KGcuaGFzT3duUHJvcChuLG8pP25bb109W25bb10scl06bltvXT1yLCFJKTooKCFuW29dfHwhZy5pc09iamVjdChuW29dKSkmJihuW29dPVtdKSxlKHQscixuW29dLGkpJiZnLmlzQXJyYXkobltvXSkmJihuW29dPVRyKG5bb10pKSwhSSl9aWYoZy5pc0Zvcm1EYXRhKEEpJiZnLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIGcuZm9yRWFjaEVudHJ5KEEsKHIsbik9PntlKE5yKHIpLG4sdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIGRBPUdyO2Z1bmN0aW9uIExyKEEsZSx0KXtpZihnLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSksZy50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBfQT17dHJhbnNpdGlvbmFsOnBBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtsZXQgcj10LmdldENvbnRlbnRUeXBlKCl8fCIiLG49ci5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsaT1nLmlzT2JqZWN0KGUpO2lmKGkmJmcuaXNIVE1MRm9ybShlKSYmKGU9bmV3IEZvcm1EYXRhKGUpKSxnLmlzRm9ybURhdGEoZSkpcmV0dXJuIG4/SlNPTi5zdHJpbmdpZnkoZEEoZSkpOmU7aWYoZy5pc0FycmF5QnVmZmVyKGUpfHxnLmlzQnVmZmVyKGUpfHxnLmlzU3RyZWFtKGUpfHxnLmlzRmlsZShlKXx8Zy5pc0Jsb2IoZSkpcmV0dXJuIGU7aWYoZy5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYoZy5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IEk7aWYoaSl7aWYoci5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gakEoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChJPWcuaXNGaWxlTGlzdChlKSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIHgoST97ImZpbGVzW10iOmV9OmUsYyYmbmV3IGMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBpfHxuPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksTHIoZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy50cmFuc2l0aW9uYWx8fF9BLnRyYW5zaXRpb25hbCxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihlJiZnLmlzU3RyaW5nKGUpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7bGV0IG89ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goSSl7aWYobyl0aHJvdyBJLm5hbWU9PT0iU3ludGF4RXJyb3IiP2QuZnJvbShJLGQuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6SX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOmIuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOmIuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2cuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57X0EuaGVhZGVyc1tBXT17fX0pO3ZhciBLPV9BO3ZhciBPcj1nLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLHZlPUE9PntsZXQgZT17fSx0LHIsbjtyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24obyl7bj1vLmluZGV4T2YoIjoiKSx0PW8uc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCkscj1vLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhKCF0fHxlW3RdJiZPclt0XSkmJih0PT09InNldC1jb29raWUiP2VbdF0/ZVt0XS5wdXNoKHIpOmVbdF09W3JdOmVbdF09ZVt0XT9lW3RdKyIsICIrcjpyKX0pLGV9O3ZhciBqZT1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHRBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbUEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmcuaXNBcnJheShBKT9BLm1hcChtQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIHhyKEEpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nLHI7Zm9yKDtyPXQuZXhlYyhBKTspZVtyWzFdXT1yWzJdO3JldHVybiBlfXZhciBQcj1BPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiB6QShBLGUsdCxyLG4pe2lmKGcuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsZSx0KTtpZihuJiYoZT10KSwhIWcuaXNTdHJpbmcoZSkpe2lmKGcuaXNTdHJpbmcocikpcmV0dXJuIGUuaW5kZXhPZihyKSE9PS0xO2lmKGcuaXNSZWdFeHAocikpcmV0dXJuIHIudGVzdChlKX19ZnVuY3Rpb24gSnIoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSx0LHIpPT50LnRvVXBwZXJDYXNlKCkrcil9ZnVuY3Rpb24gSHIoQSxlKXtsZXQgdD1nLnRvQ2FtZWxDYXNlKCIgIitlKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2gocj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHIrdCx7dmFsdWU6ZnVuY3Rpb24obixpLG8pe3JldHVybiB0aGlzW3JdLmNhbGwodGhpcyxlLG4saSxvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgdj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSx0LHIpe2xldCBuPXRoaXM7ZnVuY3Rpb24gaShJLGMsbCl7bGV0IHM9dEEoYyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPWcuZmluZEtleShuLHMpOyghYXx8blthXT09PXZvaWQgMHx8bD09PSEwfHxsPT09dm9pZCAwJiZuW2FdIT09ITEpJiYoblthfHxjXT1tQShJKSl9bGV0IG89KEksYyk9PmcuZm9yRWFjaChJLChsLHMpPT5pKGwscyxjKSk7cmV0dXJuIGcuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/byhlLHQpOmcuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIVByKGUpP28odmUoZSksdCk6ZSE9bnVsbCYmaSh0LGUsciksdGhpc31nZXQoZSx0KXtpZihlPXRBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO2lmKHIpe2xldCBuPXRoaXNbcl07aWYoIXQpcmV0dXJuIG47aWYodD09PSEwKXJldHVybiB4cihuKTtpZihnLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLG4scik7aWYoZy5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSx0KXtpZihlPXRBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO3JldHVybiEhKHImJnRoaXNbcl0hPT12b2lkIDAmJighdHx8ekEodGhpcyx0aGlzW3JdLHIsdCkpKX1yZXR1cm4hMX1kZWxldGUoZSx0KXtsZXQgcj10aGlzLG49ITE7ZnVuY3Rpb24gaShvKXtpZihvPXRBKG8pLG8pe2xldCBJPWcuZmluZEtleShyLG8pO0kmJighdHx8ekEocixyW0ldLEksdCkpJiYoZGVsZXRlIHJbSV0sbj0hMCl9fXJldHVybiBnLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksbn1jbGVhcihlKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzKSxyPXQubGVuZ3RoLG49ITE7Zm9yKDtyLS07KXtsZXQgaT10W3JdOyghZXx8ekEodGhpcyx0aGlzW2ldLGksZSwhMCkpJiYoZGVsZXRlIHRoaXNbaV0sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCB0PXRoaXMscj17fTtyZXR1cm4gZy5mb3JFYWNoKHRoaXMsKG4saSk9PntsZXQgbz1nLmZpbmRLZXkocixpKTtpZihvKXt0W29dPW1BKG4pLGRlbGV0ZSB0W2ldO3JldHVybn1sZXQgST1lP0pyKGkpOlN0cmluZyhpKS50cmltKCk7SSE9PWkmJmRlbGV0ZSB0W2ldLHRbSV09bUEobikscltJXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBnLmZvckVhY2godGhpcywocixuKT0+e3IhPW51bGwmJnIhPT0hMSYmKHRbbl09ZSYmZy5pc0FycmF5KHIpP3Iuam9pbigiLCAiKTpyKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2UsdF0pPT5lKyI6ICIrdCkuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnQpe2xldCByPW5ldyB0aGlzKGUpO3JldHVybiB0LmZvckVhY2gobj0+ci5zZXQobikpLHJ9c3RhdGljIGFjY2Vzc29yKGUpe2xldCByPSh0aGlzW2plXT10aGlzW2plXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gaShvKXtsZXQgST10QShvKTtyW0ldfHwoSHIobixvKSxyW0ldPSEwKX1yZXR1cm4gZy5pc0FycmF5KGUpP2UuZm9yRWFjaChpKTppKGUpLHRoaXN9fTt2LmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtnLnJlZHVjZURlc2NyaXB0b3JzKHYucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChyKXt0aGlzW3RdPXJ9fX0pO2cuZnJlZXplTWV0aG9kcyh2KTt2YXIgVT12O2Z1bmN0aW9uIHJBKEEsZSl7bGV0IHQ9dGhpc3x8SyxyPWV8fHQsbj1VLmZyb20oci5oZWFkZXJzKSxpPXIuZGF0YTtyZXR1cm4gZy5mb3JFYWNoKEEsZnVuY3Rpb24oSSl7aT1JLmNhbGwodCxpLG4ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksbi5ub3JtYWxpemUoKSxpfWZ1bmN0aW9uIGlBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gX2UoQSxlLHQpe2QuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsZC5FUlJfQ0FOQ0VMRUQsZSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWcuaW5oZXJpdHMoX2UsZCx7X19DQU5DRUxfXzohMH0pO3ZhciBQPV9lO2Z1bmN0aW9uIFZBKEEsZSx0KXtsZXQgcj10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFyfHxyKHQuc3RhdHVzKT9BKHQpOmUobmV3IGQoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbZC5FUlJfQkFEX1JFUVVFU1QsZC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX12YXIgemU9Yi5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSx0LHIsbixpKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTtnLmlzTnVtYmVyKHQpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxnLmlzU3RyaW5nKHIpJiZvLnB1c2goInBhdGg9IityKSxnLmlzU3RyaW5nKG4pJiZvLnB1c2goImRvbWFpbj0iK24pLGk9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gWkEoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiBYQShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gbkEoQSxlKXtyZXR1cm4gQSYmIVpBKGUpP1hBKEEsZSk6ZX12YXIgVmU9Yi5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHI7ZnVuY3Rpb24gbihpKXtsZXQgbz1pO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiByPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBJPWcuaXNTdHJpbmcobyk/bihvKTpvO3JldHVybiBJLnByb3RvY29sPT09ci5wcm90b2NvbCYmSS5ob3N0PT09ci5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiAkQShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gTXIoQSxlKXtBPUF8fDEwO2xldCB0PW5ldyBBcnJheShBKSxyPW5ldyBBcnJheShBKSxuPTAsaT0wLG87cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihjKXtsZXQgbD1EYXRlLm5vdygpLHM9cltpXTtvfHwobz1sKSx0W25dPWMscltuXT1sO2xldCBhPWksZj0wO2Zvcig7YSE9PW47KWYrPXRbYSsrXSxhPWElQTtpZihuPShuKzEpJUEsbj09PWkmJihpPShpKzEpJUEpLGwtbzxlKXJldHVybjtsZXQgQj1zJiZsLXM7cmV0dXJuIEI/TWF0aC5yb3VuZChmKjFlMy9CKTp2b2lkIDB9fXZhciBaZT1NcjtmdW5jdGlvbiBYZShBLGUpe2xldCB0PTAscj1aZSg1MCwyNTApO3JldHVybiBuPT57bGV0IGk9bi5sb2FkZWQsbz1uLmxlbmd0aENvbXB1dGFibGU/bi50b3RhbDp2b2lkIDAsST1pLXQsYz1yKEkpLGw9aTw9bzt0PWk7bGV0IHM9e2xvYWRlZDppLHRvdGFsOm8scHJvZ3Jlc3M6bz9pL286dm9pZCAwLGJ5dGVzOkkscmF0ZTpjfHx2b2lkIDAsZXN0aW1hdGVkOmMmJm8mJmw/KG8taSkvYzp2b2lkIDAsZXZlbnQ6bn07c1tlPyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEocyl9fXZhciBXcj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLCRlPVdyJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgbj1BLmRhdGEsaT1VLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpJfT1BLGM7ZnVuY3Rpb24gbCgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYyksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKX1sZXQgcztpZihnLmlzRm9ybURhdGEobikpe2lmKGIuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxiLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilpLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChzPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W3UsLi4uUV09cz9zLnNwbGl0KCI7IikubWFwKHA9PnAudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbdXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLlFdLmpvaW4oIjsgIikpfX1sZXQgYT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgdT1BLmF1dGgudXNlcm5hbWV8fCIiLFE9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSh1KyI6IitRKSl9bGV0IGY9bkEoQS5iYXNlVVJMLEEudXJsKTthLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxlQShmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGEudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gQigpe2lmKCFhKXJldHVybjtsZXQgdT1VLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBhJiZhLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxwPXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2EucmVzcG9uc2VUZXh0OmEucmVzcG9uc2Usc3RhdHVzOmEuc3RhdHVzLHN0YXR1c1RleHQ6YS5zdGF0dXNUZXh0LGhlYWRlcnM6dSxjb25maWc6QSxyZXF1ZXN0OmF9O1ZBKGZ1bmN0aW9uKFMpe3QoUyksbCgpfSxmdW5jdGlvbihTKXtyKFMpLGwoKX0scCksYT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gYT9hLm9ubG9hZGVuZD1COmEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWF8fGEucmVhZHlTdGF0ZSE9PTR8fGEuc3RhdHVzPT09MCYmIShhLnJlc3BvbnNlVVJMJiZhLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChCKX0sYS5vbmFib3J0PWZ1bmN0aW9uKCl7YSYmKHIobmV3IGQoIlJlcXVlc3QgYWJvcnRlZCIsZC5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsKX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgZCgiTmV0d29yayBFcnJvciIsZC5FUlJfTkVUV09SSyxBLGEpKSxhPW51bGx9LGEub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFE9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHA9QS50cmFuc2l0aW9uYWx8fHBBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKFE9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBkKFEscC5jbGFyaWZ5VGltZW91dEVycm9yP2QuRVRJTUVET1VUOmQuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbH0sYi5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZnLmlzRnVuY3Rpb24oSSkmJihJPUkoQSkpLEl8fEkhPT0hMSYmVmUoZikpKXtsZXQgdT1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZ6ZS5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO3UmJmkuc2V0KEEueHNyZkhlYWRlck5hbWUsdSl9bj09PXZvaWQgMCYmaS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBhJiZnLmZvckVhY2goaS50b0pTT04oKSxmdW5jdGlvbihRLHApe2Euc2V0UmVxdWVzdEhlYWRlcihwLFEpfSksZy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChhLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoYS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWGUoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLnVwbG9hZCYmYS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLFhlKEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihjPXU9PnthJiYocighdXx8dS50eXBlP25ldyBQKG51bGwsQSxhKTp1KSxhLmFib3J0KCksYT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYyksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2MoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYykpKTtsZXQgQz0kQShmKTtpZihDJiZiLnByb3RvY29scy5pbmRleE9mKEMpPT09LTEpe3IobmV3IGQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrQysiOiIsZC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1hLnNlbmQobnx8bnVsbCl9KX07dmFyIEFlPXtodHRwOkVBLHhocjokZX07Zy5mb3JFYWNoKEFlLChBLGUpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6ZX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTplfSl9fSk7dmFyIEF0PUE9PmAtICR7QX1gLFlyPUE9PmcuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxoQT17Z2V0QWRhcHRlcjpBPT57QT1nLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDplfT1BLHQscixuPXt9O2ZvcihsZXQgaT0wO2k8ZTtpKyspe3Q9QVtpXTtsZXQgbztpZihyPXQsIVlyKHQpJiYocj1BZVsobz1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLHI9PT12b2lkIDApKXRocm93IG5ldyBkKGBVbmtub3duIGFkYXB0ZXIgJyR7b30nYCk7aWYocilicmVhaztuW298fCIjIitpXT1yfWlmKCFyKXtsZXQgaT1PYmplY3QuZW50cmllcyhuKS5tYXAoKFtJLGNdKT0+YGFkYXB0ZXIgJHtJfSBgKyhjPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbz1lP2kubGVuZ3RoPjE/YHNpbmNlIDoKYCtpLm1hcChBdCkuam9pbihgCmApOiIgIitBdChpWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBkKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHJ9LGFkYXB0ZXJzOkFlfTtmdW5jdGlvbiBlZShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgUChudWxsLEEpfWZ1bmN0aW9uIHlBKEEpe3JldHVybiBlZShBKSxBLmhlYWRlcnM9VS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPXJBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxoQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Sy5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiBlZShBKSxyLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usciksci5oZWFkZXJzPVUuZnJvbShyLmhlYWRlcnMpLHJ9LGZ1bmN0aW9uKHIpe3JldHVybiBpQShyKXx8KGVlKEEpLHImJnIucmVzcG9uc2UmJihyLnJlc3BvbnNlLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usci5yZXNwb25zZSksci5yZXNwb25zZS5oZWFkZXJzPVUuZnJvbShyLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3Qocil9KX12YXIgZXQ9QT0+QSBpbnN0YW5jZW9mIFU/ey4uLkF9OkE7ZnVuY3Rpb24gTChBLGUpe2U9ZXx8e307bGV0IHQ9e307ZnVuY3Rpb24gcihsLHMsYSl7cmV0dXJuIGcuaXNQbGFpbk9iamVjdChsKSYmZy5pc1BsYWluT2JqZWN0KHMpP2cubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6YX0sbCxzKTpnLmlzUGxhaW5PYmplY3Qocyk/Zy5tZXJnZSh7fSxzKTpnLmlzQXJyYXkocyk/cy5zbGljZSgpOnN9ZnVuY3Rpb24gbihsLHMsYSl7aWYoZy5pc1VuZGVmaW5lZChzKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwsYSl9ZWxzZSByZXR1cm4gcihsLHMsYSl9ZnVuY3Rpb24gaShsLHMpe2lmKCFnLmlzVW5kZWZpbmVkKHMpKXJldHVybiByKHZvaWQgMCxzKX1mdW5jdGlvbiBvKGwscyl7aWYoZy5pc1VuZGVmaW5lZChzKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwpfWVsc2UgcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIEkobCxzLGEpe2lmKGEgaW4gZSlyZXR1cm4gcihsLHMpO2lmKGEgaW4gQSlyZXR1cm4gcih2b2lkIDAsbCl9bGV0IGM9e3VybDppLG1ldGhvZDppLGRhdGE6aSxiYXNlVVJMOm8sdHJhbnNmb3JtUmVxdWVzdDpvLHRyYW5zZm9ybVJlc3BvbnNlOm8scGFyYW1zU2VyaWFsaXplcjpvLHRpbWVvdXQ6byx0aW1lb3V0TWVzc2FnZTpvLHdpdGhDcmVkZW50aWFsczpvLHdpdGhYU1JGVG9rZW46byxhZGFwdGVyOm8scmVzcG9uc2VUeXBlOm8seHNyZkNvb2tpZU5hbWU6byx4c3JmSGVhZGVyTmFtZTpvLG9uVXBsb2FkUHJvZ3Jlc3M6byxvbkRvd25sb2FkUHJvZ3Jlc3M6byxkZWNvbXByZXNzOm8sbWF4Q29udGVudExlbmd0aDpvLG1heEJvZHlMZW5ndGg6byxiZWZvcmVSZWRpcmVjdDpvLHRyYW5zcG9ydDpvLGh0dHBBZ2VudDpvLGh0dHBzQWdlbnQ6byxjYW5jZWxUb2tlbjpvLHNvY2tldFBhdGg6byxyZXNwb25zZUVuY29kaW5nOm8sdmFsaWRhdGVTdGF0dXM6SSxoZWFkZXJzOihsLHMpPT5uKGV0KGwpLGV0KHMpLCEwKX07cmV0dXJuIGcuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsZSkpLGZ1bmN0aW9uKHMpe2xldCBhPWNbc118fG4sZj1hKEFbc10sZVtzXSxzKTtnLmlzVW5kZWZpbmVkKGYpJiZhIT09SXx8KHRbc109Zil9KSx0fXZhciB3QT0iMS42LjgiO3ZhciB0ZT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsZSk9Pnt0ZVtBXT1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI9PT1BfHwiYSIrKGU8MT8ibiAiOiIgIikrQX19KTt2YXIgdHQ9e307dGUudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGksbyl7cmV0dXJuIltBeGlvcyB2Iit3QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2krIiciK28rKHI/Ii4gIityOiIiKX1yZXR1cm4oaSxvLEkpPT57aWYoZT09PSExKXRocm93IG5ldyBkKG4obywiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSksZC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiF0dFtvXSYmKHR0W29dPSEwLGNvbnNvbGUud2FybihuKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksZT9lKGksbyxJKTohMH19O2Z1bmN0aW9uIHFyKEEsZSx0KXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGQoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCByPU9iamVjdC5rZXlzKEEpLG49ci5sZW5ndGg7Zm9yKDtuLS0gPjA7KXtsZXQgaT1yW25dLG89ZVtpXTtpZihvKXtsZXQgST1BW2ldLGM9ST09PXZvaWQgMHx8byhJLGksQSk7aWYoYyE9PSEwKXRocm93IG5ldyBkKCJvcHRpb24gIitpKyIgbXVzdCBiZSAiK2MsZC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IG5ldyBkKCJVbmtub3duIG9wdGlvbiAiK2ksZC5FUlJfQkFEX09QVElPTil9fXZhciBEQT17YXNzZXJ0T3B0aW9uczpxcix2YWxpZGF0b3JzOnRlfTt2YXIgSj1EQS52YWxpZGF0b3JzLGo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBLQSxyZXNwb25zZTpuZXcgS0F9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBuO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG49e30pOm49bmV3IEVycm9yO2xldCBpPW4uc3RhY2s/bi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3Iuc3RhY2s/aSYmIVN0cmluZyhyLnN0YWNrKS5lbmRzV2l0aChpLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKHIuc3RhY2srPWAKYCtpKTpyLnN0YWNrPWl9dGhyb3cgcn19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PUwodGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjpuLGhlYWRlcnM6aX09dDtyIT09dm9pZCAwJiZEQS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbil9LCExKSxuIT1udWxsJiYoZy5pc0Z1bmN0aW9uKG4pP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOm59OkRBLmFzc2VydE9wdGlvbnMobix7ZW5jb2RlOkouZnVuY3Rpb24sc2VyaWFsaXplOkouZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89aSYmZy5tZXJnZShpLmNvbW1vbixpW3QubWV0aG9kXSk7aSYmZy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEM9PntkZWxldGUgaVtDXX0pLHQuaGVhZGVycz1VLmNvbmNhdChvLGkpO2xldCBJPVtdLGM9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKHUpe3R5cGVvZiB1LnJ1bldoZW49PSJmdW5jdGlvbiImJnUucnVuV2hlbih0KT09PSExfHwoYz1jJiZ1LnN5bmNocm9ub3VzLEkudW5zaGlmdCh1LmZ1bGZpbGxlZCx1LnJlamVjdGVkKSl9KTtsZXQgbD1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2wucHVzaCh1LmZ1bGZpbGxlZCx1LnJlamVjdGVkKX0pO2xldCBzLGE9MCxmO2lmKCFjKXtsZXQgQz1beUEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihDLnVuc2hpZnQuYXBwbHkoQyxJKSxDLnB1c2guYXBwbHkoQyxsKSxmPUMubGVuZ3RoLHM9UHJvbWlzZS5yZXNvbHZlKHQpO2E8Zjspcz1zLnRoZW4oQ1thKytdLENbYSsrXSk7cmV0dXJuIHN9Zj1JLmxlbmd0aDtsZXQgQj10O2ZvcihhPTA7YTxmOyl7bGV0IEM9SVthKytdLHU9SVthKytdO3RyeXtCPUMoQil9Y2F0Y2goUSl7dS5jYWxsKHRoaXMsUSk7YnJlYWt9fXRyeXtzPXlBLmNhbGwodGhpcyxCKX1jYXRjaChDKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoQyl9Zm9yKGE9MCxmPWwubGVuZ3RoO2E8Zjspcz1zLnRoZW4obFthKytdLGxbYSsrXSk7cmV0dXJuIHN9Z2V0VXJpKGUpe2U9TCh0aGlzLmRlZmF1bHRzLGUpO2xldCB0PW5BKGUuYmFzZVVSTCxlLnVybCk7cmV0dXJuIGVBKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O2cuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7ai5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pO2cuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJuIGZ1bmN0aW9uKGksbyxJKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwoSXx8e30se21ldGhvZDplLGhlYWRlcnM6cj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6aSxkYXRhOm99KSl9fWoucHJvdG90eXBlW2VdPXQoKSxqLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KTt2YXIgb0E9ajt2YXIgcmU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3Q9aX0pO2xldCByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCFyLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtpLS0gPjA7KXIuX2xpc3RlbmVyc1tpXShuKTtyLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgaSxvPW5ldyBQcm9taXNlKEk9PntyLnN1YnNjcmliZShJKSxpPUl9KS50aGVuKG4pO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUoaSl9LG99LGUoZnVuY3Rpb24oaSxvLEkpe3IucmVhc29ufHwoci5yZWFzb249bmV3IFAoaSxvLEkpLHQoci5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LHJ0PXJlO2Z1bmN0aW9uIGllKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBuZShBKXtyZXR1cm4gZy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgb2U9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKG9lKS5mb3JFYWNoKChbQSxlXSk9PntvZVtlXT1BfSk7dmFyIGl0PW9lO2Z1bmN0aW9uIG50KEEpe2xldCBlPW5ldyBvQShBKSx0PVgob0EucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIGcuZXh0ZW5kKHQsb0EucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxnLmV4dGVuZCh0LGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBudChMKEEsbikpfSx0fXZhciBEPW50KEspO0QuQXhpb3M9b0E7RC5DYW5jZWxlZEVycm9yPVA7RC5DYW5jZWxUb2tlbj1ydDtELmlzQ2FuY2VsPWlBO0QuVkVSU0lPTj13QTtELnRvRm9ybURhdGE9eDtELkF4aW9zRXJyb3I9ZDtELkNhbmNlbD1ELkNhbmNlbGVkRXJyb3I7RC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTtELnNwcmVhZD1pZTtELmlzQXhpb3NFcnJvcj1uZTtELm1lcmdlQ29uZmlnPUw7RC5BeGlvc0hlYWRlcnM9VTtELmZvcm1Ub0pTT049QT0+ZEEoZy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtELmdldEFkYXB0ZXI9aEEuZ2V0QWRhcHRlcjtELkh0dHBTdGF0dXNDb2RlPWl0O0QuZGVmYXVsdD1EO3ZhciBfPUQ7dmFye0F4aW9zOllhLEF4aW9zRXJyb3I6cWEsQ2FuY2VsZWRFcnJvcjpLYSxpc0NhbmNlbDp2YSxDYW5jZWxUb2tlbjpqYSxWRVJTSU9OOl9hLGFsbDp6YSxDYW5jZWw6VmEsaXNBeGlvc0Vycm9yOlphLHNwcmVhZDpYYSx0b0Zvcm1EYXRhOiRhLEF4aW9zSGVhZGVyczpBcyxIdHRwU3RhdHVzQ29kZTplcyxmb3JtVG9KU09OOnRzLGdldEFkYXB0ZXI6cnMsbWVyZ2VDb25maWc6aXN9PV87YXN5bmMgZnVuY3Rpb24gS3IoQSxlKXtsZXQgdD1BLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IF8uZ2V0KHQse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxpPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTtyPW5ldyBXb3JrZXIoaSx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKHQse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgYUE9S3I7ZnVuY3Rpb24gb3QoQSl7bGV0IGU9UEEoQSksdD1BO3JldHVybiB0LnRlcm1pbmF0ZWQ9ITEsdC53b3JrZXJQcm94eT1lLHQub3JpZ2luYWxUZXJtaW5hdGU9dC50ZXJtaW5hdGUsdC50ZXJtaW5hdGU9KCk9Pnt0LnRlcm1pbmF0ZWQ9ITAsdC53b3JrZXJQcm94eVt4QV0oKSx0Lm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjp0fX1hc3luYyBmdW5jdGlvbiB2cihBLGUsdCl7bGV0IHI7aWYoQSE9bnVsbCl7bGV0IGk9QTtyZXR1cm4gaS53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1pLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjppfSk6b3QoQSl9bGV0IG49YXdhaXQgYUEoZSx0KTtyZXR1cm4gb3Qobil9dmFyIGF0PXZyO2FzeW5jIGZ1bmN0aW9uIGpyKEEsZSx0KXtsZXQgcj0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3I9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3I9QTpyPXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbj1gJHtyfS53YXNtYCxvPShhd2FpdCBfLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpvfSl9dmFyIHN0PWpyO3ZhciBJdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgQnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsZ3Q9bmV3IFRleHRFbmNvZGVyLGx0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBfcihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksaT1BLmZzX3N0YXQoZSkuc2l6ZSxvPW51bGw7QnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoaSk6bz1uZXcgQXJyYXlCdWZmZXIoaSk7bGV0IEk9bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChyLEksMCxpLDApLEEuZnNfY2xvc2UociksSX1mdW5jdGlvbiB1dChBLGUsdCl7bGV0IHI9bnVsbDtCdD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbj1uZXcgVWludDhBcnJheShyKSxpPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBuLnNldChpKSxufWZ1bmN0aW9uIFIoQSxlLHQscil7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiB6KEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsaT1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsbl0pO0Euc3RyaW5nVG9VVEY4KHIsaSxuKX1mdW5jdGlvbiBOKEEsZSx0LHIpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbz11dChBLG4saSk7cmV0dXJuIE8ocixvLmJ1ZmZlcil9ZnVuY3Rpb24gYWUoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIHpyKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihsLHMpe3N3aXRjaChsLnR5cGUpe2Nhc2UgRS5UZXh0U3RyZWFtOntsZXQgYT1ndC5lbmNvZGUobC5kYXRhLmRhdGEpLGY9UihBLGEscywwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07eihBLEIscyk7YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgYT1ndC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkobC5kYXRhKSksZj1SKEEsYSxzLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTt6KEEsQixzKTticmVha31jYXNlIEUuQmluYXJ5U3RyZWFtOntsZXQgYT1sLmRhdGEuZGF0YSxmPVIoQSxhLHMsMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O3ooQSxCLHMpO2JyZWFrfWNhc2UgRS5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUobC5kYXRhLnBhdGgsbC5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShsLmRhdGEucGF0aCxsLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkltYWdlOntsZXQgYT1sLmRhdGEsZj1SKEEsYS5kYXRhLHMsMCksQj1SKEEsYS5kaXJlY3Rpb24scywxKSxDPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSx1PXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkN9O3ooQSx1LHMpO2JyZWFrfWNhc2UgRS5NZXNoOntsZXQgYT1sLmRhdGEsZj1SKEEsYS5wb2ludHMscywwKSxCPVIoQSxhLmNlbGxzLHMsMSksQz1SKEEsYS5wb2ludERhdGEscywyKSx1PVIoQSxhLmNlbGxEYXRhLHMsMyksUT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O3ooQSxRLHMpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IGE9bC5kYXRhLGY9UihBLGEucG9pbnRzLHMsMCksQj1SKEEsYS52ZXJ0aWNlcyxzLDEpLEM9UihBLGEubGluZXMscywyKSx1PVIoQSxhLnBvbHlnb25zLHMsMyksUT1SKEEsYS50cmlhbmdsZVN0cmlwcyxzLDQpLHA9UihBLGEucG9pbnREYXRhLHMsNSksbT1SKEEsYS5wb2ludERhdGEscyw2KSxTPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHttfWB9O3ooQSxTLHMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChsKXt0aHJvdyB0eXBlb2YgbD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShsKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxsfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxJPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihsLHMpe2xldCBhPW51bGw7c3dpdGNoKGwudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixDKTthPXtkYXRhOmx0LmRlY29kZSh1KX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsQyk7YT1KU09OLnBhcnNlKGx0LmRlY29kZSh1KSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKTthPXtkYXRhOnV0KEEsQixDKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOnthPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShsLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOnthPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6X3IoQSxsLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IEI9YWUoQSxzKTtCLmRhdGE9TihBLHMsMCxCLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxCLmRpcmVjdGlvbj1OKEEscywxLE0uRmxvYXQ2NCksQi5tZXRhZGF0YT1uZXcgTWFwKEIubWV0YWRhdGEpLGE9QjticmVha31jYXNlIEUuTWVzaDp7bGV0IEI9YWUoQSxzKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9TihBLHMsMCxCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9TyhCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxscz4wP0IuY2VsbHM9TihBLHMsMSxCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpCLmNlbGxzPU8oQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPU4oQSxzLDIsQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9TyhCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPU4oQSxzLDMsQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU8oQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IEI9YWUoQSxzKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9TihBLHMsMCxNLkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPU4oQSxzLDEsRi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1OKEEscywyLEYuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9TihBLHMsMyxGLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPU4oQSxzLDQsRi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPU4oQSxzLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPU8oQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9TihBLHMsNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU8oQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmwudHlwZSxkYXRhOmF9O2MucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTppLHN0ZG91dDpvLHN0ZGVycjpJLG91dHB1dHM6Y319dmFyIGN0PXpyO3ZhciBWcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gWnIoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj1YcihBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24gWHIoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxWciYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIEN0PVpyO2Z1bmN0aW9uICRyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBmdD0kcjtmdW5jdGlvbiBBaShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgRXQ9QWk7ZnVuY3Rpb24gZWkoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIFF0PWVpO3ZhciB0aTtmdW5jdGlvbiBTQSgpe3JldHVybiB0aX12YXIgcmk7ZnVuY3Rpb24gcHQoKXtyZXR1cm4gcml9dmFyIGlpO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIGlpfXZhciBzZT1uZXcgTWFwO2Z1bmN0aW9uIG5pKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIGR0KCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gRkEoKXtsZXQgQT1wdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIG9pKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksc2UuaGFzKG4pKXJldHVybiBzZS5nZXQobik7e2xldCBpPWF3YWl0IHN0KEEsZT8udG9TdHJpbmcoKT8/ZHQoKSx0Pz9GQSgpKTtyZXR1cm4gc2Uuc2V0KG4saSksaX19YXN5bmMgZnVuY3Rpb24gYWkoQSxlLHQscixuKXtpZighYXdhaXQgSXQoKSl7bGV0IFE9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KFEpLG5ldyBFcnJvcihRKX1sZXQgaT1uPy53ZWJXb3JrZXI/P251bGw7aWYoaT09PSExKXtsZXQgUT1hd2FpdCBvaShBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO3JldHVybiBjdChRLGUsdCxyKX1sZXQgbz1pLEk9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P25pKCksYz10eXBlb2YgSSE9InN0cmluZyImJnR5cGVvZiBJPy5ocmVmPCJ1Ij9JLmhyZWY6SSx7d29ya2VyUHJveHk6bCx3b3JrZXI6c309YXdhaXQgYXQobyxjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO289cztsZXQgYT1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoUS50eXBlPT09RS5CaW5hcnlTdHJlYW0pe2xldCBwPVEuZGF0YS5kYXRhO2EucHVzaChwKX1lbHNlIGlmKFEudHlwZT09PUUuQmluYXJ5RmlsZSl7bGV0IHA9US5kYXRhLmRhdGE7YS5wdXNoKHApfWVsc2UgaWYoUS50eXBlPT09RS5JbWFnZSl7bGV0IHA9US5kYXRhO3AuZGF0YSE9PW51bGwmJmEucHVzaCguLi5mdChwKSl9ZWxzZSBpZihRLnR5cGU9PT1FLk1lc2gpe2xldCBwPVEuZGF0YTthLnB1c2goLi4uRXQocCkpfWVsc2UgaWYoUS50eXBlPT09RS5Qb2x5RGF0YSl7bGV0IHA9US5kYXRhO2EucHVzaCguLi5RdChwKSl9fSk7bGV0IGY9bj8ucGlwZWxpbmVCYXNlVXJsPz9kdCgpLEI9dHlwZW9mIGYhPSJzdHJpbmciJiZ0eXBlb2YgZj8uaHJlZjwidSI/Zi5ocmVmOmYsQz1yIT1udWxsP0pBKHIsQ3QoYSxuPy5ub0NvcHkpKTpudWxsLHU9YXdhaXQgbC5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQixlLHQsQyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9GQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6dS5yZXR1cm5WYWx1ZSxzdGRvdXQ6dS5zdGRvdXQsc3RkZXJyOnUuc3RkZXJyLG91dHB1dHM6dS5vdXRwdXRzLHdlYldvcmtlcjpvfX12YXIgeT1haTt2YXIgc2k9bnVsbDtmdW5jdGlvbiBtdCgpe3JldHVybiBzaX12YXIgSWUsSWk9YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2RpY29tQCR7UkF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBfcyhBKXtJZT1BfWZ1bmN0aW9uIHcoKXtpZih0eXBlb2YgSWU8InUiKXJldHVybiBJZTtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpJaX12YXIgZ2UsZ2k9bnVsbDtmdW5jdGlvbiBodChBKXtnZT1BfWZ1bmN0aW9uIGgoKXtpZih0eXBlb2YgZ2U8InUiKXJldHVybiBnZTtsZXQgQT1rQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpnaX12YXIgVj1udWxsO2FzeW5jIGZ1bmN0aW9uIHl0KCl7bGV0IEE9aCgpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7Vj1hd2FpdCBhQShlKX1mdW5jdGlvbiBlSShBKXtWPUF9YXN5bmMgZnVuY3Rpb24gaygpe2lmKFYhPT1udWxsKXJldHVybiBWLnRlcm1pbmF0ZWQmJmF3YWl0IHl0KCksVjtsZXQgQT1tdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCB5dCgpLFYpfWFzeW5jIGZ1bmN0aW9uIGxpKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6RS5JbWFnZX1dLG49QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IFM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO249e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUyl9fWxldCBpPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBTPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFMpfX1sZXQgbz1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6bn0se3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6aX1dLEk9W10sYz1uLnBhdGg7SS5wdXNoKGMpO2xldCBsPWkucGF0aDtJLnB1c2gobCksSS5wdXNoKCIwIiksSS5wdXNoKCIxIiksSS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuY29sb3JPdXRwdXQmJnQuY29sb3JPdXRwdXQmJkkucHVzaCgiLS1jb2xvci1vdXRwdXQiKSx0LmNvbmZpZ0ZpbGUmJkkucHVzaCgiLS1jb25maWctZmlsZSIsdC5jb25maWdGaWxlLnRvU3RyaW5nKCkpLHQuZnJhbWUmJkkucHVzaCgiLS1mcmFtZSIsdC5mcmFtZS50b1N0cmluZygpKSx0Lm5vUHJlc2VudGF0aW9uU3RhdGVPdXRwdXQmJnQubm9QcmVzZW50YXRpb25TdGF0ZU91dHB1dCYmSS5wdXNoKCItLW5vLXByZXNlbnRhdGlvbi1zdGF0ZS1vdXRwdXQiKSx0Lm5vQml0bWFwT3V0cHV0JiZ0Lm5vQml0bWFwT3V0cHV0JiZJLnB1c2goIi0tbm8tYml0bWFwLW91dHB1dCIpO2xldCBmPSJhcHBseS1wcmVzZW50YXRpb24tc3RhdGUtdG8taW1hZ2UiLEI9dD8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IGsoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOnUsc3RkZXJyOlEsb3V0cHV0czpwfT1hd2FpdCB5KGYsSSxyLG8se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmUSE9PSIiKXRocm93IG5ldyBFcnJvcihRKTtyZXR1cm57d2ViV29ya2VyOkMscHJlc2VudGF0aW9uU3RhdGVPdXRTdHJlYW06cFswXT8uZGF0YSxvdXRwdXRJbWFnZTpwWzFdPy5kYXRhfX12YXIgQmk9bGk7YXN5bmMgZnVuY3Rpb24gdWkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5CaW5hcnlTdHJlYW19XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHUpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLnJlYWRGaWxlT25seSYmZS5yZWFkRmlsZU9ubHkmJmkucHVzaCgiLS1yZWFkLWZpbGUtb25seSIpLGUucmVhZERhdGFzZXQmJmUucmVhZERhdGFzZXQmJmkucHVzaCgiLS1yZWFkLWRhdGFzZXQiKSxlLnJlYWRYZmVyQXV0byYmZS5yZWFkWGZlckF1dG8mJmkucHVzaCgiLS1yZWFkLXhmZXItYXV0byIpLGUucmVhZFhmZXJEZXRlY3QmJmUucmVhZFhmZXJEZXRlY3QmJmkucHVzaCgiLS1yZWFkLXhmZXItZGV0ZWN0IiksZS5yZWFkWGZlckxpdHRsZSYmZS5yZWFkWGZlckxpdHRsZSYmaS5wdXNoKCItLXJlYWQteGZlci1saXR0bGUiKSxlLnJlYWRYZmVyQmlnJiZlLnJlYWRYZmVyQmlnJiZpLnB1c2goIi0tcmVhZC14ZmVyLWJpZyIpLGUucmVhZFhmZXJJbXBsaWNpdCYmZS5yZWFkWGZlckltcGxpY2l0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWltcGxpY2l0IiksZS5hY2NlcHRPZGRMZW5ndGgmJmUuYWNjZXB0T2RkTGVuZ3RoJiZpLnB1c2goIi0tYWNjZXB0LW9kZC1sZW5ndGgiKSxlLmFzc3VtZUV2ZW5MZW5ndGgmJmUuYXNzdW1lRXZlbkxlbmd0aCYmaS5wdXNoKCItLWFzc3VtZS1ldmVuLWxlbmd0aCIpLGUuZW5hYmxlQ3AyNDYmJmUuZW5hYmxlQ3AyNDYmJmkucHVzaCgiLS1lbmFibGUtY3AyNDYiKSxlLmRpc2FibGVDcDI0NiYmZS5kaXNhYmxlQ3AyNDYmJmkucHVzaCgiLS1kaXNhYmxlLWNwMjQ2IiksZS5yZXRhaW5VbiYmZS5yZXRhaW5VbiYmaS5wdXNoKCItLXJldGFpbi11biIpLGUuY29udmVydFVuJiZlLmNvbnZlcnRVbiYmaS5wdXNoKCItLWNvbnZlcnQtdW4iKSxlLmVuYWJsZUNvcnJlY3Rpb24mJmUuZW5hYmxlQ29ycmVjdGlvbiYmaS5wdXNoKCItLWVuYWJsZS1jb3JyZWN0aW9uIiksZS5kaXNhYmxlQ29ycmVjdGlvbiYmZS5kaXNhYmxlQ29ycmVjdGlvbiYmaS5wdXNoKCItLWRpc2FibGUtY29ycmVjdGlvbiIpO2xldCBjPSJyZWFkLWRpY29tLWVuY2Fwc3VsYXRlZC1wZGYiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IGsoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpCfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMscGRmQmluYXJ5T3V0cHV0OihCWzBdPy5kYXRhKS5kYXRhfX12YXIgY2k9dWk7YXN5bmMgZnVuY3Rpb24gQ2koQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5UZXh0U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2lmKGkucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5yZWFkRmlsZU9ubHkmJmUucmVhZEZpbGVPbmx5JiZpLnB1c2goIi0tcmVhZC1maWxlLW9ubHkiKSxlLnJlYWREYXRhc2V0JiZlLnJlYWREYXRhc2V0JiZpLnB1c2goIi0tcmVhZC1kYXRhc2V0IiksZS5yZWFkWGZlckF1dG8mJmUucmVhZFhmZXJBdXRvJiZpLnB1c2goIi0tcmVhZC14ZmVyLWF1dG8iKSxlLnJlYWRYZmVyRGV0ZWN0JiZlLnJlYWRYZmVyRGV0ZWN0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWRldGVjdCIpLGUucmVhZFhmZXJMaXR0bGUmJmUucmVhZFhmZXJMaXR0bGUmJmkucHVzaCgiLS1yZWFkLXhmZXItbGl0dGxlIiksZS5yZWFkWGZlckJpZyYmZS5yZWFkWGZlckJpZyYmaS5wdXNoKCItLXJlYWQteGZlci1iaWciKSxlLnJlYWRYZmVySW1wbGljaXQmJmUucmVhZFhmZXJJbXBsaWNpdCYmaS5wdXNoKCItLXJlYWQteGZlci1pbXBsaWNpdCIpLGUucHJvY2Vzc2luZ0RldGFpbHMmJmUucHJvY2Vzc2luZ0RldGFpbHMmJmkucHVzaCgiLS1wcm9jZXNzaW5nLWRldGFpbHMiKSxlLnVua25vd25SZWxhdGlvbnNoaXAmJmUudW5rbm93blJlbGF0aW9uc2hpcCYmaS5wdXNoKCItLXVua25vd24tcmVsYXRpb25zaGlwIiksZS5pbnZhbGlkSXRlbVZhbHVlJiZlLmludmFsaWRJdGVtVmFsdWUmJmkucHVzaCgiLS1pbnZhbGlkLWl0ZW0tdmFsdWUiKSxlLmlnbm9yZUNvbnN0cmFpbnRzJiZlLmlnbm9yZUNvbnN0cmFpbnRzJiZpLnB1c2goIi0taWdub3JlLWNvbnN0cmFpbnRzIiksZS5pZ25vcmVJdGVtRXJyb3JzJiZlLmlnbm9yZUl0ZW1FcnJvcnMmJmkucHVzaCgiLS1pZ25vcmUtaXRlbS1lcnJvcnMiKSxlLnNraXBJbnZhbGlkSXRlbXMmJmUuc2tpcEludmFsaWRJdGVtcyYmaS5wdXNoKCItLXNraXAtaW52YWxpZC1pdGVtcyIpLGUuZGlzYWJsZVZyQ2hlY2tlciYmZS5kaXNhYmxlVnJDaGVja2VyJiZpLnB1c2goIi0tZGlzYWJsZS12ci1jaGVja2VyIiksZS5jaGFyc2V0UmVxdWlyZSYmZS5jaGFyc2V0UmVxdWlyZSYmaS5wdXNoKCItLWNoYXJzZXQtcmVxdWlyZSIpLGUuY2hhcnNldEFzc3VtZSYmaS5wdXNoKCItLWNoYXJzZXQtYXNzdW1lIixlLmNoYXJzZXRBc3N1bWUudG9TdHJpbmcoKSksZS5jaGFyc2V0Q2hlY2tBbGwmJmUuY2hhcnNldENoZWNrQWxsJiZpLnB1c2goIi0tY2hhcnNldC1jaGVjay1hbGwiKSxlLmNvbnZlcnRUb1V0ZjgmJmUuY29udmVydFRvVXRmOCYmaS5wdXNoKCItLWNvbnZlcnQtdG8tdXRmOCIpLGUudXJsUHJlZml4JiZpLnB1c2goIi0tdXJsLXByZWZpeCIsZS51cmxQcmVmaXgudG9TdHJpbmcoKSksZS5odG1sMzImJmUuaHRtbDMyJiZpLnB1c2goIi0taHRtbC0zMiIpLGUuaHRtbDQwJiZlLmh0bWw0MCYmaS5wdXNoKCItLWh0bWwtNDAiKSxlLnhodG1sMTEmJmUueGh0bWwxMSYmaS5wdXNoKCItLXhodG1sLTExIiksZS5hZGREb2N1bWVudFR5cGUmJmUuYWRkRG9jdW1lbnRUeXBlJiZpLnB1c2goIi0tYWRkLWRvY3VtZW50LXR5cGUiKSxlLmNzc1JlZmVyZW5jZSl7bGV0IHU9bi5sZW5ndGgudG9TdHJpbmcoKTtuLnB1c2goe3R5cGU6RS5UZXh0U3RyZWFtLGRhdGE6e2RhdGE6ZS5jc3NSZWZlcmVuY2V9fSksaS5wdXNoKCItLWNzcy1yZWZlcmVuY2UiLHUpfWlmKGUuY3NzRmlsZSl7bGV0IHU9ZS5jc3NGaWxlLFE9dTtpZih1IGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgdS5hcnJheUJ1ZmZlcigpO1E9e3BhdGg6dS5uYW1lLGRhdGE6bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG0pfX1pLnB1c2goIi0tY3NzLWZpbGUiKSxuLnB1c2goe3R5cGU6RS5UZXh0RmlsZSxkYXRhOlF9KTtsZXQgcD11IGluc3RhbmNlb2YgRmlsZT91Lm5hbWU6dS5wYXRoO2kucHVzaChwKX1lLmV4cGFuZElubGluZSYmZS5leHBhbmRJbmxpbmUmJmkucHVzaCgiLS1leHBhbmQtaW5saW5lIiksZS5uZXZlckV4cGFuZElubGluZSYmZS5uZXZlckV4cGFuZElubGluZSYmaS5wdXNoKCItLW5ldmVyLWV4cGFuZC1pbmxpbmUiKSxlLmFsd2F5c0V4cGFuZElubGluZSYmZS5hbHdheXNFeHBhbmRJbmxpbmUmJmkucHVzaCgiLS1hbHdheXMtZXhwYW5kLWlubGluZSIpLGUucmVuZGVyRnVsbERhdGEmJmUucmVuZGVyRnVsbERhdGEmJmkucHVzaCgiLS1yZW5kZXItZnVsbC1kYXRhIiksZS5zZWN0aW9uVGl0bGVJbmxpbmUmJmUuc2VjdGlvblRpdGxlSW5saW5lJiZpLnB1c2goIi0tc2VjdGlvbi10aXRsZS1pbmxpbmUiKSxlLmRvY3VtZW50VHlwZVRpdGxlJiZlLmRvY3VtZW50VHlwZVRpdGxlJiZpLnB1c2goIi0tZG9jdW1lbnQtdHlwZS10aXRsZSIpLGUucGF0aWVudEluZm9UaXRsZSYmZS5wYXRpZW50SW5mb1RpdGxlJiZpLnB1c2goIi0tcGF0aWVudC1pbmZvLXRpdGxlIiksZS5ub0RvY3VtZW50SGVhZGVyJiZlLm5vRG9jdW1lbnRIZWFkZXImJmkucHVzaCgiLS1uby1kb2N1bWVudC1oZWFkZXIiKSxlLnJlbmRlcklubGluZUNvZGVzJiZlLnJlbmRlcklubGluZUNvZGVzJiZpLnB1c2goIi0tcmVuZGVyLWlubGluZS1jb2RlcyIpLGUuY29uY2VwdE5hbWVDb2RlcyYmZS5jb25jZXB0TmFtZUNvZGVzJiZpLnB1c2goIi0tY29uY2VwdC1uYW1lLWNvZGVzIiksZS5udW1lcmljVW5pdENvZGVzJiZlLm51bWVyaWNVbml0Q29kZXMmJmkucHVzaCgiLS1udW1lcmljLXVuaXQtY29kZXMiKSxlLmNvZGVWYWx1ZVVuaXQmJmUuY29kZVZhbHVlVW5pdCYmaS5wdXNoKCItLWNvZGUtdmFsdWUtdW5pdCIpLGUuY29kZU1lYW5pbmdVbml0JiZlLmNvZGVNZWFuaW5nVW5pdCYmaS5wdXNoKCItLWNvZGUtbWVhbmluZy11bml0IiksZS5yZW5kZXJBbGxDb2RlcyYmZS5yZW5kZXJBbGxDb2RlcyYmaS5wdXNoKCItLXJlbmRlci1hbGwtY29kZXMiKSxlLmNvZGVEZXRhaWxzVG9vbHRpcCYmZS5jb2RlRGV0YWlsc1Rvb2x0aXAmJmkucHVzaCgiLS1jb2RlLWRldGFpbHMtdG9vbHRpcCIpO2xldCBjPSJzdHJ1Y3R1cmVkLXJlcG9ydC10by1odG1sIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBrKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpmLG91dHB1dHM6Qn09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJmYhPT0iIil0aHJvdyBuZXcgRXJyb3IoZik7cmV0dXJue3dlYldvcmtlcjpzLG91dHB1dFRleHQ6KEJbMF0/LmRhdGEpLmRhdGF9fXZhciBmaT1DaTthc3luYyBmdW5jdGlvbiBFaShBLGU9e30pe2xldCB0PVt7dHlwZTpFLlRleHRTdHJlYW19XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHUpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLnVua25vd25SZWxhdGlvbnNoaXAmJmUudW5rbm93blJlbGF0aW9uc2hpcCYmaS5wdXNoKCItLXVua25vd24tcmVsYXRpb25zaGlwIiksZS5pbnZhbGlkSXRlbVZhbHVlJiZlLmludmFsaWRJdGVtVmFsdWUmJmkucHVzaCgiLS1pbnZhbGlkLWl0ZW0tdmFsdWUiKSxlLmlnbm9yZUNvbnN0cmFpbnRzJiZlLmlnbm9yZUNvbnN0cmFpbnRzJiZpLnB1c2goIi0taWdub3JlLWNvbnN0cmFpbnRzIiksZS5pZ25vcmVJdGVtRXJyb3JzJiZlLmlnbm9yZUl0ZW1FcnJvcnMmJmkucHVzaCgiLS1pZ25vcmUtaXRlbS1lcnJvcnMiKSxlLnNraXBJbnZhbGlkSXRlbXMmJmUuc2tpcEludmFsaWRJdGVtcyYmaS5wdXNoKCItLXNraXAtaW52YWxpZC1pdGVtcyIpLGUubm9Eb2N1bWVudEhlYWRlciYmZS5ub0RvY3VtZW50SGVhZGVyJiZpLnB1c2goIi0tbm8tZG9jdW1lbnQtaGVhZGVyIiksZS5udW1iZXJOZXN0ZWRJdGVtcyYmZS5udW1iZXJOZXN0ZWRJdGVtcyYmaS5wdXNoKCItLW51bWJlci1uZXN0ZWQtaXRlbXMiKSxlLnNob3J0ZW5Mb25nVmFsdWVzJiZlLnNob3J0ZW5Mb25nVmFsdWVzJiZpLnB1c2goIi0tc2hvcnRlbi1sb25nLXZhbHVlcyIpLGUucHJpbnRJbnN0YW5jZVVpZCYmZS5wcmludEluc3RhbmNlVWlkJiZpLnB1c2goIi0tcHJpbnQtaW5zdGFuY2UtdWlkIiksZS5wcmludFNvcGNsYXNzU2hvcnQmJmUucHJpbnRTb3BjbGFzc1Nob3J0JiZpLnB1c2goIi0tcHJpbnQtc29wY2xhc3Mtc2hvcnQiKSxlLnByaW50U29wY2xhc3NMb25nJiZlLnByaW50U29wY2xhc3NMb25nJiZpLnB1c2goIi0tcHJpbnQtc29wY2xhc3MtbG9uZyIpLGUucHJpbnRTb3BjbGFzc1VpZCYmZS5wcmludFNvcGNsYXNzVWlkJiZpLnB1c2goIi0tcHJpbnQtc29wY2xhc3MtdWlkIiksZS5wcmludEFsbENvZGVzJiZlLnByaW50QWxsQ29kZXMmJmkucHVzaCgiLS1wcmludC1hbGwtY29kZXMiKSxlLnByaW50SW52YWxpZENvZGVzJiZlLnByaW50SW52YWxpZENvZGVzJiZpLnB1c2goIi0tcHJpbnQtaW52YWxpZC1jb2RlcyIpLGUucHJpbnRUZW1wbGF0ZUlkJiZlLnByaW50VGVtcGxhdGVJZCYmaS5wdXNoKCItLXByaW50LXRlbXBsYXRlLWlkIiksZS5pbmRpY2F0ZUVuaGFuY2VkJiZlLmluZGljYXRlRW5oYW5jZWQmJmkucHVzaCgiLS1pbmRpY2F0ZS1lbmhhbmNlZCIpLGUucHJpbnRDb2xvciYmZS5wcmludENvbG9yJiZpLnB1c2goIi0tcHJpbnQtY29sb3IiKTtsZXQgYz0ic3RydWN0dXJlZC1yZXBvcnQtdG8tdGV4dCIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOkJ9PWF3YWl0IHkoYyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXRUZXh0OihCWzBdPy5kYXRhKS5kYXRhfX12YXIgUWk9RWk7YXN5bmMgZnVuY3Rpb24gcGkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQyl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpZihpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBlLnRhZ3NUb1JlYWQ8InUiKXtsZXQgQz1uLmxlbmd0aC50b1N0cmluZygpO24ucHVzaCh7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZS50YWdzVG9SZWFkfSksaS5wdXNoKCItLXRhZ3MtdG8tcmVhZCIsQyl9bGV0IGM9InJlYWQtZGljb20tdGFncyIse3dlYldvcmtlcjpsLHJldHVyblZhbHVlOnMsc3RkZXJyOmEsb3V0cHV0czpmfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjplPy53ZWJXb3JrZXI/P251bGx9KTtpZihzIT09MCl0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpsLHRhZ3M6ZlswXS5kYXRhfX12YXIgZGk9cGk7YXN5bmMgZnVuY3Rpb24gbWkoQSxlPSExLHQ9e30pe2xldCByPVt7dHlwZTpFLkltYWdlfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0sbj1bXSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxpLnB1c2goIi0taW5wdXQtaW1hZ2VzIiksQS5mb3JFYWNoKEM9PntuLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6Q30pLGkucHVzaChDLnBhdGgpfSksdHlwZW9mIGU8InUiJiZlJiZpLnB1c2goIi0tc2luZ2xlLXNvcnRlZC1zZXJpZXMiKTtsZXQgYz0icmVhZC1pbWFnZS1kaWNvbS1maWxlLXNlcmllcyIse3dlYldvcmtlcjpsLHJldHVyblZhbHVlOnMsc3RkZXJyOmEsb3V0cHV0czpmfT1hd2FpdCB5KGMsaSxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjp0Py53ZWJXb3JrZXI/P251bGx9KTtpZihzIT09MCl0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpsLG91dHB1dEltYWdlOmZbMF0uZGF0YSxzb3J0ZWRGaWxlbmFtZXM6ZlsxXS5kYXRhfX12YXIgbGU9bWk7dmFyIGhpPXR5cGVvZiBnbG9iYWxUaGlzLm5hdmlnYXRvcj8uaGFyZHdhcmVDb25jdXJyZW5jeT09Im51bWJlciI/Z2xvYmFsVGhpcy5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTo0LHd0PTg7YXN5bmMgZnVuY3Rpb24geWkoQT17aW5wdXRJbWFnZXM6W119KXtsZXQgZT1BLndlYldvcmtlclBvb2w/P251bGw7ZT09PW51bGwmJihlPW5ldyBHQShoaSxsZSkpO2xldCB0PVtdO2lmKEEuaW5wdXRJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCciaW5wdXQtaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2lmKGF3YWl0IFByb21pc2UuYWxsKEEuaW5wdXRJbWFnZXMubWFwKGFzeW5jIHI9PntsZXQgbj1yO2lmKHIgaW5zdGFuY2VvZiBGaWxlKXtsZXQgaT1hd2FpdCByLmFycmF5QnVmZmVyKCk7bj17cGF0aDpyLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShpKX19dC5wdXNoKG4pfSkpLEEuc2luZ2xlU29ydGVkU2VyaWVzKXtsZXQgcj1bXTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrPXd0KXtsZXQgbD10LnNsaWNlKGMsYyt3dCk7ci5wdXNoKFtsLEEuc2luZ2xlU29ydGVkU2VyaWVzLHt9XSl9bGV0IG49YXdhaXQgZS5ydW5UYXNrcyhyKS5wcm9taXNlLGk9bi5tYXAoYz0+Yy5vdXRwdXRJbWFnZSksbz1uLnJlZHVjZSgoYyxsKT0+Yy5jb25jYXQobC5zb3J0ZWRGaWxlbmFtZXMpLFtdKTtyZXR1cm57b3V0cHV0SW1hZ2U6TkEoaSksd2ViV29ya2VyUG9vbDplLHNvcnRlZEZpbGVuYW1lczpvfX1lbHNle2xldCByPVtbdCxBLnNpbmdsZVNvcnRlZFNlcmllcyx7fV1dLG49YXdhaXQgZS5ydW5UYXNrcyhyKS5wcm9taXNlO3JldHVybntvdXRwdXRJbWFnZTpuWzBdLm91dHB1dEltYWdlLHdlYldvcmtlclBvb2w6ZSxzb3J0ZWRGaWxlbmFtZXM6blswXS5zb3J0ZWRGaWxlbmFtZXN9fX12YXIgd2k9eWk7YXN5bmMgZnVuY3Rpb24gRGkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpO2xldCBsPSJyZWFkLXNlZ21lbnRhdGlvbiIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6ZixzdGRlcnI6QixvdXRwdXRzOkN9PWF3YWl0IHkobCxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGYhPT0wJiZCIT09IiIpdGhyb3cgbmV3IEVycm9yKEIpO3JldHVybnt3ZWJXb3JrZXI6YSxzZWdJbWFnZTpDWzBdPy5kYXRhLG1ldGFJbmZvOkNbMV0/LmRhdGF9fXZhciBTaT1EaTthc3luYyBmdW5jdGlvbiBraShBLGU9e30pe2xldCB0PVt7dHlwZTpFLkltYWdlfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5tZXJnZVNlZ21lbnRzJiZlLm1lcmdlU2VnbWVudHMmJmkucHVzaCgiLS1tZXJnZS1zZWdtZW50cyIpO2xldCBsPSJyZWFkLW92ZXJsYXBwaW5nLXNlZ21lbnRhdGlvbiIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6ZixzdGRlcnI6QixvdXRwdXRzOkN9PWF3YWl0IHkobCxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGYhPT0wJiZCIT09IiIpdGhyb3cgbmV3IEVycm9yKEIpO3JldHVybnt3ZWJXb3JrZXI6YSxzZWdJbWFnZTpDWzBdPy5kYXRhLG1ldGFJbmZvOkNbMV0/LmRhdGF9fXZhciBGaT1raTthc3luYyBmdW5jdGlvbiBSaShBLGUsdCxyPXtyZWZEaWNvbVNlcmllczpbXX0pe2xldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0saT1be3R5cGU6RS5JbWFnZSxkYXRhOkF9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjEiKTtsZXQgbD10O2lmKG8ucHVzaChsKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksci5yZWZEaWNvbVNlcmllcyl7aWYoci5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO28ucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwoci5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgcD0+e2xldCBtPXA7aWYocCBpbnN0YW5jZW9mIEZpbGUpe2xldCBaPWF3YWl0IHAuYXJyYXlCdWZmZXIoKTttPXtwYXRoOnAubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFopfX1pLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6bX0pO2xldCBTPXAgaW5zdGFuY2VvZiBGaWxlP3AubmFtZTptLnBhdGg7by5wdXNoKFMpfSkpfXIuc2tpcEVtcHR5U2xpY2VzJiZyLnNraXBFbXB0eVNsaWNlcyYmby5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJm8ucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IHM9IndyaXRlLXNlZ21lbnRhdGlvbiIsYT1yPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOmYscmV0dXJuVmFsdWU6QixzdGRlcnI6QyxvdXRwdXRzOnV9PWF3YWl0IHkocyxvLG4saSx7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmEsbm9Db3B5OnI/Lm5vQ29weX0pO2lmKEIhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZixvdXRwdXREaWNvbUZpbGU6dVswXT8uZGF0YX19dmFyIGJpPVJpO2FzeW5jIGZ1bmN0aW9uIFVpKEEsZSx0LHI9e3JlZkRpY29tU2VyaWVzOltdfSl7bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxpPVt7dHlwZTpFLkltYWdlLGRhdGE6QX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmV9XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMSIpO2xldCBsPXQ7aWYoby5wdXNoKGwpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxyLnJlZkRpY29tU2VyaWVzKXtpZihyLnJlZkRpY29tU2VyaWVzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInJlZi1kaWNvbS1zZXJpZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7by5wdXNoKCItLXJlZi1kaWNvbS1zZXJpZXMiKSxhd2FpdCBQcm9taXNlLmFsbChyLnJlZkRpY29tU2VyaWVzLm1hcChhc3luYyBwPT57bGV0IG09cDtpZihwIGluc3RhbmNlb2YgRmlsZSl7bGV0IFo9YXdhaXQgcC5hcnJheUJ1ZmZlcigpO209e3BhdGg6cC5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoWil9fWkucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTptfSk7bGV0IFM9cCBpbnN0YW5jZW9mIEZpbGU/cC5uYW1lOm0ucGF0aDtvLnB1c2goUyl9KSl9ci5za2lwRW1wdHlTbGljZXMmJnIuc2tpcEVtcHR5U2xpY2VzJiZvLnB1c2goIi0tc2tpcC1lbXB0eS1zbGljZXMiKSxyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJnIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmby5wdXNoKCItLXVzZS1sYWJlbGlkLWFzLXNlZ21lbnRudW1iZXIiKTtsZXQgcz0id3JpdGUtb3ZlcmxhcHBpbmctc2VnbWVudGF0aW9uIixhPXI/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBrKCkpO2xldHt3ZWJXb3JrZXI6ZixyZXR1cm5WYWx1ZTpCLHN0ZGVycjpDLG91dHB1dHM6dX09YXdhaXQgeShzLG8sbixpLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6YSxub0NvcHk6cj8ubm9Db3B5fSk7aWYoQiE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpmLG91dHB1dERpY29tRmlsZTp1WzBdPy5kYXRhfX12YXIgTmk9VWk7YXN5bmMgZnVuY3Rpb24gVGkoQSxlLHQ9e3JlZkRpY29tU2VyaWVzOltdLHNlZ0ltYWdlczpbXX0pe2xldCByPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpO2xldCBJPWU7aWYoaS5wdXNoKEkpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LnJlZkRpY29tU2VyaWVzKXtpZih0LnJlZkRpY29tU2VyaWVzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInJlZi1kaWNvbS1zZXJpZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7aS5wdXNoKCItLXJlZi1kaWNvbS1zZXJpZXMiKSxhd2FpdCBQcm9taXNlLmFsbCh0LnJlZkRpY29tU2VyaWVzLm1hcChhc3luYyB1PT57bGV0IFE9dTtpZih1IGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgdS5hcnJheUJ1ZmZlcigpO1E9e3BhdGg6dS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fW4ucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpRfSk7bGV0IHA9dSBpbnN0YW5jZW9mIEZpbGU/dS5uYW1lOlEucGF0aDtpLnB1c2gocCl9KSl9aWYodC5zZWdJbWFnZXMpe2lmKHQuc2VnSW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNlZy1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7aS5wdXNoKCItLXNlZy1pbWFnZXMiKSxhd2FpdCBQcm9taXNlLmFsbCh0LnNlZ0ltYWdlcy5tYXAoYXN5bmMgdT0+e2xldCBRPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBtPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtRPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG0pfX1uLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6UX0pO2xldCBwPXUgaW5zdGFuY2VvZiBGaWxlP3UubmFtZTpRLnBhdGg7aS5wdXNoKHApfSkpfXQuc2tpcEVtcHR5U2xpY2VzJiZ0LnNraXBFbXB0eVNsaWNlcyYmaS5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksdC51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZ0LnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJmkucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IGM9IndyaXRlLW11bHRpLXNlZ21lbnRhdGlvbiIsbD10Py53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgaygpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOkJ9PWF3YWl0IHkoYyxpLHIsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmwsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXREaWNvbUZpbGU6QlswXT8uZGF0YX19dmFyIEdpPVRpO3ZhciBEdD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgdHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBldD0oQSxJKT0+e2Zvcih2YXIgdCBpbiBJKXR0KEEsdCx7Z2V0OklbdF0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ3Q9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikscnQ9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLG1BPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsaXQ9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTpJLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gb0EoQSxJKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLHN0KEEpfX0sb3Q9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgSTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP0k9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTpJPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtJLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEFJPW5ldyBNYXAoW1sicHJveHkiLGl0XSxbInRocm93IixvdF1dKTtmdW5jdGlvbiBCdChBLEkpe2ZvcihsZXQgdCBvZiBBKWlmKEk9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoSSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gb0EoQSxJPWdsb2JhbFRoaXMsdD1bIioiXSl7SS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQnQodCxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6aSxwYXRoOnN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQz1zLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixuKT0+ZltuXSxBKSxvPXMucmVkdWNlKChmLG4pPT5mW25dLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6UT1vO2JyZWFrO2Nhc2UiU0VUIjpDW3Muc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPW8uYXBwbHkoQyxhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBvKC4uLmEpO1E9YXQoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOm59PW5ldyBNZXNzYWdlQ2hhbm5lbDtvQShBLG4pLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEMpe1E9e3ZhbHVlOkMsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQz0+KHt2YWx1ZTpDLFtlQV06MH0pKS50aGVuKEM9PntsZXRbbyxmXT1pQShDKTtJLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7aWQ6cn0pLGYpLGk9PT0iUkVMRUFTRSImJihJLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLElJKEkpLG1BIGluIEEmJnR5cGVvZiBBW21BXT09ImZ1bmN0aW9uIiYmQVttQV0oKSl9KS5jYXRjaChDPT57bGV0W28sZl09aUEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO0kucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtpZDpyfSksZil9KX0pLEkuc3RhcnQmJkkuc3RhcnQoKX1mdW5jdGlvbiBDdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBJSShBKXtDdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHN0KEEsSSl7cmV0dXJuIHBBKEEsW10sSSl9ZnVuY3Rpb24gdEEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIHRJKEEpe3JldHVybiBNKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0lJKEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBJPShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsSSksST09PTAmJnRJKEEpfSk7ZnVuY3Rpb24gbnQoQSxJKXtsZXQgdD0oZ0EuZ2V0KEkpfHwwKSsxO2dBLnNldChJLHQpLHJBJiZyQS5yZWdpc3RlcihBLEksQSl9ZnVuY3Rpb24gUXQoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gcEEoQSxJPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eSh0LHtnZXQocixpKXtpZih0QShlKSxpPT09cnQpcmV0dXJuKCk9PntRdChnKSx0SShBKSxlPSEwfTtpZihpPT09InRoZW4iKXtpZihJLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBzPU0oQSx7dHlwZToiR0VUIixwYXRoOkkubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBzLnRoZW4uYmluZChzKX1yZXR1cm4gcEEoQSxbLi4uSSxpXSl9LHNldChyLGkscyl7dEEoZSk7bGV0W2EsUV09aUEocyk7cmV0dXJuIE0oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5JLGldLm1hcChDPT5DLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsaSxzKXt0QShlKTtsZXQgYT1JW0kubGVuZ3RoLTFdO2lmKGE9PT1ndClyZXR1cm4gTShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIHBBKEEsSS5zbGljZSgwLC0xKSk7bGV0W1EsQ109X0Eocyk7cmV0dXJuIE0oQSx7dHlwZToiQVBQTFkiLHBhdGg6SS5tYXAobz0+by50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQykudGhlbihiKX0sY29uc3RydWN0KHIsaSl7dEEoZSk7bGV0W3MsYV09X0EoaSk7cmV0dXJuIE0oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOkkubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OnN9LGEpLnRoZW4oYil9fSk7cmV0dXJuIG50KGcsQSksZ31mdW5jdGlvbiBFdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgST1BLm1hcChpQSk7cmV0dXJuW0kubWFwKHQ9PnRbMF0pLEV0KEkubWFwKHQ9PnRbMV0pKV19dmFyIGVJPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsSSl7cmV0dXJuIGVJLnNldChBLEkpLEF9ZnVuY3Rpb24gYXQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIGlBKEEpe2ZvcihsZXRbSSx0XW9mIEFJKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6SSx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZUkuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBSS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIE0oQSxJLHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y3QoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIoaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LEkpLHQpfSl9ZnVuY3Rpb24gY3QoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSxJKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShJLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmdH09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6TkF9PU9iamVjdCxDQT0oQT0+ST0+e2xldCB0PWZ0LmNhbGwoSSk7cmV0dXJuIEFbdF18fChBW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSxJPT5DQShJKT09PUEpLHNBPUE9Pkk9PnR5cGVvZiBJPT09QSx7aXNBcnJheTpxfT1BcnJheSxaPXNBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsdChBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJlMoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIG9JPVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gRHQoQSl7bGV0IEk7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9JPUFycmF5QnVmZmVyLmlzVmlldyhBKTpJPUEmJkEuYnVmZmVyJiZvSShBLmJ1ZmZlciksSX12YXIgdXQ9c0EoInN0cmluZyIpLFM9c0EoImZ1bmN0aW9uIiksQkk9c0EoIm51bWJlciIpLG5BPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaHQ9QT0+QT09PSEwfHxBPT09ITEsQkE9QT0+e2lmKENBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IEk9TkEoQSk7cmV0dXJuKEk9PT1udWxsfHxJPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEkpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZHQ9VSgiRGF0ZSIpLHl0PVUoIkZpbGUiKSx3dD1VKCJCbG9iIiksbXQ9VSgiRmlsZUxpc3QiKSxwdD1BPT5uQShBKSYmUyhBLnBpcGUpLEZ0PUE9PntsZXQgSTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxTKEEuYXBwZW5kKSYmKChJPUNBKEEpKT09PSJmb3JtZGF0YSJ8fEk9PT0ib2JqZWN0IiYmUyhBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxTdD1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSdD1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLEkse2FsbE93bktleXM6dD0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLHEoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspSS5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9dD9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPXIubGVuZ3RoLHM7Zm9yKGU9MDtlPGk7ZSsrKXM9cltlXSxJLmNhbGwobnVsbCxBW3NdLHMsQSl9fWZ1bmN0aW9uIENJKEEsSSl7ST1JLnRvTG93ZXJDYXNlKCk7bGV0IHQ9T2JqZWN0LmtleXMoQSksZT10Lmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPXRbZV0sST09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgc0k9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxuST1BPT4hWihBKSYmQSE9PXNJO2Z1bmN0aW9uIFJBKCl7bGV0e2Nhc2VsZXNzOkF9PW5JKHRoaXMpJiZ0aGlzfHx7fSxJPXt9LHQ9KGUsZyk9PntsZXQgcj1BJiZDSShJLGcpfHxnO0JBKElbcl0pJiZCQShlKT9JW3JdPVJBKElbcl0sZSk6QkEoZSk/SVtyXT1SQSh7fSxlKTpxKGUpP0lbcl09ZS5zbGljZSgpOklbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSx0KTtyZXR1cm4gSX12YXIgTnQ9KEEsSSx0LHthbGxPd25LZXlzOmV9PXt9KT0+KFYoSSwoZyxyKT0+e3QmJlMoZyk/QVtyXT1XKGcsdCk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVXQ9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHdD0oQSxJLHQsZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6SS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxrdD0oQSxJLHQsZSk9PntsZXQgZyxyLGkscz17fTtpZihJPUl8fHt9LEE9PW51bGwpcmV0dXJuIEk7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KWk9Z1tyXSwoIWV8fGUoaSxBLEkpKSYmIXNbaV0mJihJW2ldPUFbaV0sc1tpXT0hMCk7QT10IT09ITEmJk5BKEEpfXdoaWxlKEEmJighdHx8dChBLEkpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBJfSxMdD0oQSxJLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09SS5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKEksdCk7cmV0dXJuIGUhPT0tMSYmZT09PXR9LEp0PUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihxKEEpKXJldHVybiBBO2xldCBJPUEubGVuZ3RoO2lmKCFCSShJKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoSSk7Zm9yKDtJLS0gPjA7KXRbSV09QVtJXTtyZXR1cm4gdH0sSHQ9KEE9Pkk9PkEmJkkgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk5BKFVpbnQ4QXJyYXkpKSxZdD0oQSxJKT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7SS5jYWxsKEEsclswXSxyWzFdKX19LGJ0PShBLEkpPT57bGV0IHQsZT1bXTtmb3IoOyh0PUEuZXhlYyhJKSkhPT1udWxsOyllLnB1c2godCk7cmV0dXJuIGV9LE10PVUoIkhUTUxGb3JtRWxlbWVudCIpLHF0PUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKHQsZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxyST0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihJLHQpPT5BLmNhbGwoSSx0KSkoT2JqZWN0LnByb3RvdHlwZSksS3Q9VSgiUmVnRXhwIiksUUk9KEEsSSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YodCwoZyxyKT0+e2xldCBpOyhpPUkoZyxyLEEpKSE9PSExJiYoZVtyXT1pfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE90PUE9PntRSShBLChJLHQpPT57aWYoUyhBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IGU9QVt0XTtpZihTKGUpKXtpZihJLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEkpe0kud3JpdGFibGU9ITE7cmV0dXJufUkuc2V0fHwoSS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK3QrIlwnIil9KX19KX0sVHQ9KEEsSSk9PntsZXQgdD17fSxlPWc9PntnLmZvckVhY2gocj0+e3Rbcl09ITB9KX07cmV0dXJuIHEoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdChJKSksdH0seHQ9KCk9Pnt9LFB0PShBLEkpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTpJKSxTQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLGlJPSIwMTIzNDU2Nzg5IixFST17RElHSVQ6aUksQUxQSEE6U0EsQUxQSEFfRElHSVQ6U0ErU0EudG9VcHBlckNhc2UoKStpSX0sanQ9KEE9MTYsST1FSS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOmV9PUk7Zm9yKDtBLS07KXQrPUlbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiB0fTtmdW5jdGlvbiBXdChBKXtyZXR1cm4hIShBJiZTKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWnQ9QT0+e2xldCBJPW5ldyBBcnJheSgxMCksdD0oZSxnKT0+e2lmKG5BKGUpKXtpZihJLmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7SVtnXT1lO2xldCByPXEoZSk/W106e307cmV0dXJuIFYoZSwoaSxzKT0+e2xldCBhPXQoaSxnKzEpOyFaKGEpJiYocltzXT1hKX0pLElbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gdChBLDApfSxWdD1VKCJBc3luY0Z1bmN0aW9uIiksWHQ9QT0+QSYmKG5BKEEpfHxTKEEpKSYmUyhBLnRoZW4pJiZTKEEuY2F0Y2gpLEI9e2lzQXJyYXk6cSxpc0FycmF5QnVmZmVyOm9JLGlzQnVmZmVyOmx0LGlzRm9ybURhdGE6RnQsaXNBcnJheUJ1ZmZlclZpZXc6RHQsaXNTdHJpbmc6dXQsaXNOdW1iZXI6QkksaXNCb29sZWFuOmh0LGlzT2JqZWN0Om5BLGlzUGxhaW5PYmplY3Q6QkEsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZHQsaXNGaWxlOnl0LGlzQmxvYjp3dCxpc1JlZ0V4cDpLdCxpc0Z1bmN0aW9uOlMsaXNTdHJlYW06cHQsaXNVUkxTZWFyY2hQYXJhbXM6U3QsaXNUeXBlZEFycmF5Okh0LGlzRmlsZUxpc3Q6bXQsZm9yRWFjaDpWLG1lcmdlOlJBLGV4dGVuZDpOdCx0cmltOlJ0LHN0cmlwQk9NOlV0LGluaGVyaXRzOkd0LHRvRmxhdE9iamVjdDprdCxraW5kT2Y6Q0Esa2luZE9mVGVzdDpVLGVuZHNXaXRoOkx0LHRvQXJyYXk6SnQsZm9yRWFjaEVudHJ5Oll0LG1hdGNoQWxsOmJ0LGlzSFRNTEZvcm06TXQsaGFzT3duUHJvcGVydHk6ckksaGFzT3duUHJvcDpySSxyZWR1Y2VEZXNjcmlwdG9yczpRSSxmcmVlemVNZXRob2RzOk90LHRvT2JqZWN0U2V0OlR0LHRvQ2FtZWxDYXNlOnF0LG5vb3A6eHQsdG9GaW5pdGVOdW1iZXI6UHQsZmluZEtleTpDSSxnbG9iYWw6c0ksaXNDb250ZXh0RGVmaW5lZDpuSSxBTFBIQUJFVDpFSSxnZW5lcmF0ZVN0cmluZzpqdCxpc1NwZWNDb21wbGlhbnRGb3JtOld0LHRvSlNPTk9iamVjdDpadCxpc0FzeW5jRm46VnQsaXNUaGVuYWJsZTpYdH07ZnVuY3Rpb24gSyhBLEksdCxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsSSYmKHRoaXMuY29kZT1JKSx0JiYodGhpcy5jb25maWc9dCksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1CLmluaGVyaXRzKEssRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpCLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhST1LLnByb3RvdHlwZSxjST17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjSVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLGNJKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYUksImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Sy5mcm9tPShBLEksdCxlLGcscik9PntsZXQgaT1PYmplY3QuY3JlYXRlKGFJKTtyZXR1cm4gQi50b0ZsYXRPYmplY3QoQSxpLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxzPT5zIT09ImlzQXhpb3NFcnJvciIpLEsuY2FsbChpLEEubWVzc2FnZSxJLHQsZSxnKSxpLmNhdXNlPUEsaS5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKGksciksaX07dmFyIGw9Szt2YXIgUUE9bnVsbDtmdW5jdGlvbiBVQShBKXtyZXR1cm4gQi5pc1BsYWluT2JqZWN0KEEpfHxCLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbEkoQSl7cmV0dXJuIEIuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZkkoQSxJLHQpe3JldHVybiBBP0EuY29uY2F0KEkpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWxJKGcpLCF0JiZyPyJbIitnKyJdIjpnfSkuam9pbih0PyIuIjoiIik6SX1mdW5jdGlvbiB6dChBKXtyZXR1cm4gQi5pc0FycmF5KEEpJiYhQS5zb21lKFVBKX12YXIgX3Q9Qi50b0ZsYXRPYmplY3QoQix7fSxudWxsLGZ1bmN0aW9uKEkpe3JldHVybi9eaXNbQS1aXS8udGVzdChJKX0pO2Z1bmN0aW9uIHZ0KEEsSSx0KXtpZighQi5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtJPUl8fG5ldyhRQXx8Rm9ybURhdGEpLHQ9Qi50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUIuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT10Lm1ldGFUb2tlbnMsZz10LnZpc2l0b3J8fEMscj10LmRvdHMsaT10LmluZGV4ZXMsYT0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZCLmlzU3BlY0NvbXBsaWFudEZvcm0oSSk7aWYoIUIuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQi5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQi5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEIuaXNBcnJheUJ1ZmZlcihFKXx8Qi5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEMoRSxjLHUpe2xldCBkPUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQi5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEIuaXNBcnJheShFKSYmenQoRSl8fChCLmlzRmlsZUxpc3QoRSl8fEIuZW5kc1dpdGgoYywiW10iKSkmJihkPUIudG9BcnJheShFKSkpcmV0dXJuIGM9bEkoYyksZC5mb3JFYWNoKGZ1bmN0aW9uKE4sSXQpeyEoQi5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZJLmFwcGVuZChpPT09ITA/ZkkoW2NdLEl0LHIpOmk9PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIFVBKEUpPyEwOihJLmFwcGVuZChmSSh1LGMsciksUShFKSksITEpfWxldCBvPVtdLGY9T2JqZWN0LmFzc2lnbihfdCx7ZGVmYXVsdFZpc2l0b3I6Qyxjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpVQX0pO2Z1bmN0aW9uIG4oRSxjKXtpZighQi5pc1VuZGVmaW5lZChFKSl7aWYoby5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtvLnB1c2goRSksQi5mb3JFYWNoKEUsZnVuY3Rpb24oZCxSKXsoIShCLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJmcuY2FsbChJLGQsQi5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJm4oZCxjP2MuY29uY2F0KFIpOltSXSl9KSxvLnBvcCgpfX1pZighQi5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIG4oQSksSX12YXIgTD12dDtmdW5jdGlvbiBESShBKXtsZXQgST17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gSVtlXX0pfWZ1bmN0aW9uIHVJKEEsSSl7dGhpcy5fcGFpcnM9W10sQSYmTChBLHRoaXMsSSl9dmFyIGhJPXVJLnByb3RvdHlwZTtoSS5hcHBlbmQ9ZnVuY3Rpb24oSSx0KXt0aGlzLl9wYWlycy5wdXNoKFtJLHRdKX07aEkudG9TdHJpbmc9ZnVuY3Rpb24oSSl7bGV0IHQ9ST9mdW5jdGlvbihlKXtyZXR1cm4gSS5jYWxsKHRoaXMsZSxESSl9OkRJO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHQoZ1swXSkrIj0iK3QoZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11STtmdW5jdGlvbiAkdChBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsSSx0KXtpZighSSlyZXR1cm4gQTtsZXQgZT10JiZ0LmVuY29kZXx8JHQsZz10JiZ0LnNlcmlhbGl6ZSxyO2lmKGc/cj1nKEksdCk6cj1CLmlzVVJMU2VhcmNoUGFyYW1zKEkpP0kudG9TdHJpbmcoKTpuZXcgRUEoSSx0KS50b1N0cmluZyhlKSxyKXtsZXQgaT1BLmluZGV4T2YoIiUyMyIpO2khPT0tMSYmKEE9QS5zbGljZSgwLGkpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBHQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKEksdCxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6SSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KEkpe3RoaXMuaGFuZGxlcnNbSV0mJih0aGlzLmhhbmRsZXJzW0ldPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goSSl7Qi5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJkkoZSl9KX19LGtBPUdBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGRJPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeUk9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3ST10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtST17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkSSxGb3JtRGF0YTp5SSxCbG9iOndJfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIExBPXt9O2V0KExBLHtoYXNCcm93c2VyRW52OigpPT5wSSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+SWV9KTt2YXIgcEk9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnBJJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksSWU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5MQSwuLi5tSX07ZnVuY3Rpb24gSkEoQSxJKXtyZXR1cm4gTChBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZCLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChlLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxJKSl9ZnVuY3Rpb24gdGUoQSl7cmV0dXJuIEIubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcChJPT5JWzBdPT09IltdIj8iIjpJWzFdfHxJWzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgST17fSx0PU9iamVjdC5rZXlzKEEpLGUsZz10Lmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPXRbZV0sSVtyXT1BW3JdO3JldHVybiBJfWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIEkodCxlLGcscil7bGV0IGk9dFtyKytdO2lmKGk9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgcz1OdW1iZXIuaXNGaW5pdGUoK2kpLGE9cj49dC5sZW5ndGg7cmV0dXJuIGk9IWkmJkIuaXNBcnJheShnKT9nLmxlbmd0aDppLGE/KEIuaGFzT3duUHJvcChnLGkpP2dbaV09W2dbaV0sZV06Z1tpXT1lLCFzKTooKCFnW2ldfHwhQi5pc09iamVjdChnW2ldKSkmJihnW2ldPVtdKSxJKHQsZSxnW2ldLHIpJiZCLmlzQXJyYXkoZ1tpXSkmJihnW2ldPWVlKGdbaV0pKSwhcyl9aWYoQi5pc0Zvcm1EYXRhKEEpJiZCLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIEIuZm9yRWFjaEVudHJ5KEEsKGUsZyk9PntJKHRlKGUpLGcsdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsSSx0KXtpZihCLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oSXx8SlNPTi5wYXJzZSkoQSksQi50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBIQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oSSx0KXtsZXQgZT10LmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1CLmlzT2JqZWN0KEkpO2lmKHImJkIuaXNIVE1MRm9ybShJKSYmKEk9bmV3IEZvcm1EYXRhKEkpKSxCLmlzRm9ybURhdGEoSSkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EoSSkpOkk7aWYoQi5pc0FycmF5QnVmZmVyKEkpfHxCLmlzQnVmZmVyKEkpfHxCLmlzU3RyZWFtKEkpfHxCLmlzRmlsZShJKXx8Qi5pc0Jsb2IoSSkpcmV0dXJuIEk7aWYoQi5pc0FycmF5QnVmZmVyVmlldyhJKSlyZXR1cm4gSS5idWZmZXI7aWYoQi5pc1VSTFNlYXJjaFBhcmFtcyhJKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxJLnRvU3RyaW5nKCk7bGV0IHM7aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSkEoSSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChzPUIuaXNGaWxlTGlzdChJKSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEwocz97ImZpbGVzW10iOkl9OkksYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUoSSkpOkl9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oSSl7bGV0IHQ9dGhpcy50cmFuc2l0aW9uYWx8fEhBLnRyYW5zaXRpb25hbCxlPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihJJiZCLmlzU3RyaW5nKEkpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IGk9ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UoSSl9Y2F0Y2gocyl7aWYoaSl0aHJvdyBzLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShzLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6c319cmV0dXJuIEl9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihJKXtyZXR1cm4gST49MjAwJiZJPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0IuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57SEEuaGVhZGVyc1tBXT17fX0pO3ZhciBPPUhBO3ZhciBpZT1CLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLEZJPUE9PntsZXQgST17fSx0LGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihpKXtnPWkuaW5kZXhPZigiOiIpLHQ9aS5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPWkuc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIXR8fElbdF0mJmllW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/SVt0XT9JW3RdLnB1c2goZSk6SVt0XT1bZV06SVt0XT1JW3RdP0lbdF0rIiwgIitlOmUpfSksSX07dmFyIFNJPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpCLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBvZShBKXtsZXQgST1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT10LmV4ZWMoQSk7KUlbZVsxXV09ZVsyXTtyZXR1cm4gSX12YXIgQmU9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWUEoQSxJLHQsZSxnKXtpZihCLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLEksdCk7aWYoZyYmKEk9dCksISFCLmlzU3RyaW5nKEkpKXtpZihCLmlzU3RyaW5nKGUpKXJldHVybiBJLmluZGV4T2YoZSkhPT0tMTtpZihCLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QoSSl9fWZ1bmN0aW9uIENlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywoSSx0LGUpPT50LnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gc2UoQSxJKXtsZXQgdD1CLnRvQ2FtZWxDYXNlKCIgIitJKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrdCx7dmFsdWU6ZnVuY3Rpb24oZyxyLGkpe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyxJLGcscixpKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVD1jbGFzc3tjb25zdHJ1Y3RvcihJKXtJJiZ0aGlzLnNldChJKX1zZXQoSSx0LGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihzLGEsUSl7bGV0IEM9eihhKTtpZighQyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IG89Qi5maW5kS2V5KGcsQyk7KCFvfHxnW29dPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbb10hPT0hMSkmJihnW298fGFdPWZBKHMpKX1sZXQgaT0ocyxhKT0+Qi5mb3JFYWNoKHMsKFEsQyk9PnIoUSxDLGEpKTtyZXR1cm4gQi5pc1BsYWluT2JqZWN0KEkpfHxJIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9pKEksdCk6Qi5pc1N0cmluZyhJKSYmKEk9SS50cmltKCkpJiYhQmUoSSk/aShGSShJKSx0KTpJIT1udWxsJiZyKHQsSSxlKSx0aGlzfWdldChJLHQpe2lmKEk9eihJKSxJKXtsZXQgZT1CLmZpbmRLZXkodGhpcyxJKTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCF0KXJldHVybiBnO2lmKHQ9PT0hMClyZXR1cm4gb2UoZyk7aWYoQi5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxnLGUpO2lmKEIuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEksdCl7aWYoST16KEkpLEkpe2xldCBlPUIuZmluZEtleSh0aGlzLEkpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighdHx8WUEodGhpcyx0aGlzW2VdLGUsdCkpKX1yZXR1cm4hMX1kZWxldGUoSSx0KXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihpKXtpZihpPXooaSksaSl7bGV0IHM9Qi5maW5kS2V5KGUsaSk7cyYmKCF0fHxZQShlLGVbc10scyx0KSkmJihkZWxldGUgZVtzXSxnPSEwKX19cmV0dXJuIEIuaXNBcnJheShJKT9JLmZvckVhY2gocik6cihJKSxnfWNsZWFyKEkpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLGU9dC5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPXRbZV07KCFJfHxZQSh0aGlzLHRoaXNbcl0scixJLCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUoSSl7bGV0IHQ9dGhpcyxlPXt9O3JldHVybiBCLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBpPUIuZmluZEtleShlLHIpO2lmKGkpe3RbaV09ZkEoZyksZGVsZXRlIHRbcl07cmV0dXJufWxldCBzPUk/Q2Uocik6U3RyaW5nKHIpLnRyaW0oKTtzIT09ciYmZGVsZXRlIHRbcl0sdFtzXT1mQShnKSxlW3NdPSEwfSksdGhpc31jb25jYXQoLi4uSSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uSSl9dG9KU09OKEkpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEIuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYodFtnXT1JJiZCLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbSSx0XSk9PkkrIjogIit0KS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEkpe3JldHVybiBJIGluc3RhbmNlb2YgdGhpcz9JOm5ldyB0aGlzKEkpfXN0YXRpYyBjb25jYXQoSSwuLi50KXtsZXQgZT1uZXcgdGhpcyhJKTtyZXR1cm4gdC5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3NvcihJKXtsZXQgZT0odGhpc1tTSV09dGhpc1tTSV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIoaSl7bGV0IHM9eihpKTtlW3NdfHwoc2UoZyxpKSxlW3NdPSEwKX1yZXR1cm4gQi5pc0FycmF5KEkpP0kuZm9yRWFjaChyKTpyKEkpLHRoaXN9fTtULmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtCLnJlZHVjZURlc2NyaXB0b3JzKFQucHJvdG90eXBlLCh7dmFsdWU6QX0sSSk9PntsZXQgdD1JWzBdLnRvVXBwZXJDYXNlKCkrSS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW3RdPWV9fX0pO0IuZnJlZXplTWV0aG9kcyhUKTt2YXIgbT1UO2Z1bmN0aW9uIF8oQSxJKXtsZXQgdD10aGlzfHxPLGU9SXx8dCxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBCLmZvckVhY2goQSxmdW5jdGlvbihzKXtyPXMuY2FsbCh0LHIsZy5ub3JtYWxpemUoKSxJP0kuc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJJKEEsSSx0KXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELEksdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1CLmluaGVyaXRzKFJJLGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSj1SSTtmdW5jdGlvbiBiQShBLEksdCl7bGV0IGU9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhZXx8ZSh0LnN0YXR1cyk/QSh0KTpJKG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIE5JPXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLEksdCxlLGcscil7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChJKV07Qi5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksQi5pc1N0cmluZyhlKSYmaS5wdXNoKCJwYXRoPSIrZSksQi5pc1N0cmluZyhnKSYmaS5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgST1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIEk/ZGVjb2RlVVJJQ29tcG9uZW50KElbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gTUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gcUEoQSxJKXtyZXR1cm4gST9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK0kucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSxJKXtyZXR1cm4gQSYmIU1BKEkpP3FBKEEsSSk6SX12YXIgVUk9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgST0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgaT1yO3JldHVybiBJJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLGk9dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSkse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGkpe2xldCBzPUIuaXNTdHJpbmcoaSk/ZyhpKTppO3JldHVybiBzLnByb3RvY29sPT09ZS5wcm90b2NvbCYmcy5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBLQShBKXtsZXQgST0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gSSYmSVsxXXx8IiJ9ZnVuY3Rpb24gbmUoQSxJKXtBPUF8fDEwO2xldCB0PW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLGk7cmV0dXJuIEk9SSE9PXZvaWQgMD9JOjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEM9ZVtyXTtpfHwoaT1RKSx0W2ddPWEsZVtnXT1RO2xldCBvPXIsZj0wO2Zvcig7byE9PWc7KWYrPXRbbysrXSxvPW8lQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtaTxJKXJldHVybjtsZXQgbj1DJiZRLUM7cmV0dXJuIG4/TWF0aC5yb3VuZChmKjFlMy9uKTp2b2lkIDB9fXZhciBHST1uZTtmdW5jdGlvbiBrSShBLEkpe2xldCB0PTAsZT1HSSg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsaT1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAscz1yLXQsYT1lKHMpLFE9cjw9aTt0PXI7bGV0IEM9e2xvYWRlZDpyLHRvdGFsOmkscHJvZ3Jlc3M6aT9yL2k6dm9pZCAwLGJ5dGVzOnMscmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJmkmJlE/KGktcikvYTp2b2lkIDAsZXZlbnQ6Z307Q1tJPyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQyl9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLExJPVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOmksd2l0aFhTUkZUb2tlbjpzfT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQztpZihCLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChDPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qz9DLnNwbGl0KCI7IikubWFwKGQ9PmQudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgbz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO28ub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxvLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIG4oKXtpZighbylyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gbyYmby5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9vLnJlc3BvbnNlVGV4dDpvLnJlc3BvbnNlLHN0YXR1czpvLnN0YXR1cyxzdGF0dXNUZXh0Om8uc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDpvfTtiQShmdW5jdGlvbihOKXt0KE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LGQpLG89bnVsbH1pZigib25sb2FkZW5kImluIG8/by5vbmxvYWRlbmQ9bjpvLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFvfHxvLnJlYWR5U3RhdGUhPT00fHxvLnN0YXR1cz09PTAmJiEoby5yZXNwb25zZVVSTCYmby5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQobil9LG8ub25hYm9ydD1mdW5jdGlvbigpe28mJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsbykpLG89bnVsbCl9LG8ub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxvKSksbz1udWxsfSxvLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLG8pKSxvPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYocyYmQi5pc0Z1bmN0aW9uKHMpJiYocz1zKEEpKSxzfHxzIT09ITEmJlVJKGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTkkucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gbyYmQi5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSxkKXtvLnNldFJlcXVlc3RIZWFkZXIoZCx1KX0pLEIuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoby53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKG8ucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm8uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGtJKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmby51cGxvYWQmJm8udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrSShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57byYmKGUoIWN8fGMudHlwZT9uZXcgSihudWxsLEEsbyk6Yyksby5hYm9ydCgpLG89bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9S0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59by5zZW5kKGd8fG51bGwpfSl9O3ZhciBPQT17aHR0cDpRQSx4aHI6TEl9O0IuZm9yRWFjaChPQSwoQSxJKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOkl9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6SX0pfX0pO3ZhciBKST1BPT5gLSAke0F9YCxFZT1BPT5CLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qi5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6SX09QSx0LGUsZz17fTtmb3IobGV0IHI9MDtyPEk7cisrKXt0PUFbcl07bGV0IGk7aWYoZT10LCFFZSh0KSYmKGU9T0FbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtpfVwnYCk7aWYoZSlicmVhaztnW2l8fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW3MsYV0pPT5gYWRhcHRlciAke3N9IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxpPUk/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSkkpLmpvaW4oYCUwQWApOiIgIitKSShyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIraSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOk9BfTtmdW5jdGlvbiBUQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSihudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBUQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxPLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFRBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFRBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIST1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBHKEEsSSl7ST1JfHx7fTtsZXQgdD17fTtmdW5jdGlvbiBlKFEsQyxvKXtyZXR1cm4gQi5pc1BsYWluT2JqZWN0KFEpJiZCLmlzUGxhaW5PYmplY3QoQyk/Qi5tZXJnZS5jYWxsKHtjYXNlbGVzczpvfSxRLEMpOkIuaXNQbGFpbk9iamVjdChDKT9CLm1lcmdlKHt9LEMpOkIuaXNBcnJheShDKT9DLnNsaWNlKCk6Q31mdW5jdGlvbiBnKFEsQyxvKXtpZihCLmlzVW5kZWZpbmVkKEMpKXtpZighQi5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxvKX1lbHNlIHJldHVybiBlKFEsQyxvKX1mdW5jdGlvbiByKFEsQyl7aWYoIUIuaXNVbmRlZmluZWQoQykpcmV0dXJuIGUodm9pZCAwLEMpfWZ1bmN0aW9uIGkoUSxDKXtpZihCLmlzVW5kZWZpbmVkKEMpKXtpZighQi5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQyl9ZnVuY3Rpb24gcyhRLEMsbyl7aWYobyBpbiBJKXJldHVybiBlKFEsQyk7aWYobyBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6aSx0cmFuc2Zvcm1SZXF1ZXN0OmksdHJhbnNmb3JtUmVzcG9uc2U6aSxwYXJhbXNTZXJpYWxpemVyOmksdGltZW91dDppLHRpbWVvdXRNZXNzYWdlOmksd2l0aENyZWRlbnRpYWxzOmksd2l0aFhTUkZUb2tlbjppLGFkYXB0ZXI6aSxyZXNwb25zZVR5cGU6aSx4c3JmQ29va2llTmFtZTppLHhzcmZIZWFkZXJOYW1lOmksb25VcGxvYWRQcm9ncmVzczppLG9uRG93bmxvYWRQcm9ncmVzczppLGRlY29tcHJlc3M6aSxtYXhDb250ZW50TGVuZ3RoOmksbWF4Qm9keUxlbmd0aDppLGJlZm9yZVJlZGlyZWN0OmksdHJhbnNwb3J0OmksaHR0cEFnZW50OmksaHR0cHNBZ2VudDppLGNhbmNlbFRva2VuOmksc29ja2V0UGF0aDppLHJlc3BvbnNlRW5jb2Rpbmc6aSx2YWxpZGF0ZVN0YXR1czpzLGhlYWRlcnM6KFEsQyk9PmcoSEkoUSksSEkoQyksITApfTtyZXR1cm4gQi5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxJKSksZnVuY3Rpb24oQyl7bGV0IG89YVtDXXx8ZyxmPW8oQVtDXSxJW0NdLEMpO0IuaXNVbmRlZmluZWQoZikmJm8hPT1zfHwodFtDXT1mKX0pLHR9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxJKT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisoSTwxPyJuICI6IiAiKStBfX0pO3ZhciBZST17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oSSx0LGUpe2Z1bmN0aW9uIGcocixpKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitpKyhlPyIuICIrZToiIil9cmV0dXJuKHIsaSxzKT0+e2lmKEk9PT0hMSl0aHJvdyBuZXcgbChnKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhWUlbaV0mJihZSVtpXT0hMCxjb25zb2xlLndhcm4oZyhpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLEk/SShyLGkscyk6ITB9fTtmdW5jdGlvbiBhZShBLEksdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxpPUlbcl07aWYoaSl7bGV0IHM9QVtyXSxhPXM9PT12b2lkIDB8fGkocyxyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIEg9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKEkpe3RoaXMuZGVmYXVsdHM9SSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcga0EscmVzcG9uc2U6bmV3IGtBfX1hc3luYyByZXF1ZXN0KEksdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KEksdCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QoSSx0KXt0eXBlb2YgST09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9SSk6dD1JfHx7fSx0PUcodGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09dDtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQi5pc0Z1bmN0aW9uKGcpP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOkguZnVuY3Rpb24sc2VyaWFsaXplOkguZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGk9ciYmQi5tZXJnZShyLmNvbW1vbixyW3QubWV0aG9kXSk7ciYmQi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLHQuaGVhZGVycz1tLmNvbmNhdChpLHIpO2xldCBzPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbih0KT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLHMudW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBDLG89MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxzKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEM9UHJvbWlzZS5yZXNvbHZlKHQpO288ZjspQz1DLnRoZW4oRVtvKytdLEVbbysrXSk7cmV0dXJuIEN9Zj1zLmxlbmd0aDtsZXQgbj10O2ZvcihvPTA7bzxmOyl7bGV0IEU9c1tvKytdLGM9c1tvKytdO3RyeXtuPUUobil9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtDPURBLmNhbGwodGhpcyxuKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKG89MCxmPVEubGVuZ3RoO288ZjspQz1DLnRoZW4oUVtvKytdLFFbbysrXSk7cmV0dXJuIEN9Z2V0VXJpKEkpe0k9Ryh0aGlzLmRlZmF1bHRzLEkpO2xldCB0PSQoSS5iYXNlVVJMLEkudXJsKTtyZXR1cm4gWCh0LEkucGFyYW1zLEkucGFyYW1zU2VyaWFsaXplcil9fTtCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEkpe3gucHJvdG90eXBlW0ldPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKGV8fHt9LHttZXRob2Q6SSx1cmw6dCxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtCLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihJKXtmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbihyLGkscyl7cmV0dXJuIHRoaXMucmVxdWVzdChHKHN8fHt9LHttZXRob2Q6SSxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTppfSkpfX14LnByb3RvdHlwZVtJXT10KCkseC5wcm90b3R5cGVbSSsiRm9ybSJdPXQoITApfSk7dmFyIEFBPXg7dmFyIFBBPWNsYXNzIEF7Y29uc3RydWN0b3IoSSl7aWYodHlwZW9mIEkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXt0PXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsaT1uZXcgUHJvbWlzZShzPT57ZS5zdWJzY3JpYmUocykscj1zfSkudGhlbihnKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxpfSxJKGZ1bmN0aW9uKHIsaSxzKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBKKHIsaSxzKSx0KGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEkpe2lmKHRoaXMucmVhc29uKXtJKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEkpOnRoaXMuX2xpc3RlbmVycz1bSV19dW5zdWJzY3JpYmUoSSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoSSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBJO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXtJPWd9KSxjYW5jZWw6SX19fSxiST1QQTtmdW5jdGlvbiBqQShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gV0EoQSl7cmV0dXJuIEIuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFpBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhaQSkuZm9yRWFjaCgoW0EsSV0pPT57WkFbSV09QX0pO3ZhciBNST1aQTtmdW5jdGlvbiBxSShBKXtsZXQgST1uZXcgQUEoQSksdD1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LEkpO3JldHVybiBCLmV4dGVuZCh0LEFBLnByb3RvdHlwZSxJLHthbGxPd25LZXlzOiEwfSksQi5leHRlbmQodCxJLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcUkoRyhBLGcpKX0sdH12YXIgaD1xSShPKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1KO2guQ2FuY2VsVG9rZW49Ykk7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9TDtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24oSSl7cmV0dXJuIFByb21pc2UuYWxsKEkpfTtoLnNwcmVhZD1qQTtoLmlzQXhpb3NFcnJvcj1XQTtoLm1lcmdlQ29uZmlnPUc7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQi5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU1JO2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczpvaSxBeGlvc0Vycm9yOkJpLENhbmNlbGVkRXJyb3I6Q2ksaXNDYW5jZWw6c2ksQ2FuY2VsVG9rZW46bmksVkVSU0lPTjpRaSxhbGw6RWksQ2FuY2VsOmFpLGlzQXhpb3NFcnJvcjpjaSxzcHJlYWQ6ZmksdG9Gb3JtRGF0YTpsaSxBeGlvc0hlYWRlcnM6RGksSHR0cFN0YXR1c0NvZGU6dWksZm9ybVRvSlNPTjpoaSxnZXRBZGFwdGVyOmRpLG1lcmdlQ29uZmlnOnlpfT1kQTt2YXIgSUEsayxYQSxWQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe1hBPW5ldyBVaW50OEFycmF5KGsuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIElBfHwodHlwZW9mIGZldGNoPCJ1Ij9JQT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0tJKS50aGVuKEk9PkkuYXJyYXlCdWZmZXIoKSkudGhlbihJPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShJLFZBKSkudGhlbih0aGlzLl9pbml0KTpJQT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLSSwiYmFzZTY0IiksVkEpLnRoZW4odGhpcy5faW5pdCksSUEpfV9pbml0KEkpe2s9SS5pbnN0YW5jZSxWQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUoSSx0PTApe2lmKCFrKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPUkuYnl0ZUxlbmd0aCxnPWsuZXhwb3J0cy5tYWxsb2MoZSk7WEEuc2V0KEksZyksdD10fHxOdW1iZXIoay5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9ay5leHBvcnRzLm1hbGxvYyh0KSxpPWsuZXhwb3J0cy5aU1REX2RlY29tcHJlc3Mocix0LGcsZSkscz1YQS5zbGljZShyLHIraSk7cmV0dXJuIGsuZXhwb3J0cy5mcmVlKGcpLGsuZXhwb3J0cy5mcmVlKHIpLHN9fSxLST0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPST1uZXcgeUEsVEk9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSxJLHQpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke0l9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pO1RJfHwoYXdhaXQgT0kuaW5pdCgpLFRJPSEwKTtsZXQgcz1PSS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpzfSl9dmFyIHhJPWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsSSx0KXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLHhJKGUsSSx0KSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIFBJPWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LHA9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxQPXVlO2Z1bmN0aW9uIGhlKEEsSSl7bGV0IHQ9bnVsbDtzd2l0Y2goQSl7Y2FzZSBwLlVJbnQ4Ont0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ4Ont0PW5ldyBJbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQxNjp7dD1uZXcgVWludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDE2Ont0PW5ldyBJbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MzI6e3Q9bmV3IFVpbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQzMjp7dD1uZXcgSW50MzJBcnJheShJKTticmVha31jYXNlIHAuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdVaW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdJbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0MzI6e3Q9bmV3IEZsb2F0MzJBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQ2NDp7dD1uZXcgRmxvYXQ2NEFycmF5KEkpO2JyZWFrfWNhc2UibnVsbCI6e3Q9bnVsbDticmVha31jYXNlIG51bGw6e3Q9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiB0fXZhciBZPWhlO3ZhciBaST10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqST1uZXcgVGV4dEVuY29kZXIsV0k9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsSSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4oSSx0LmZsYWdzKSxyPUEuZnNfc3RhdChJKS5zaXplLGk9bnVsbDtaST9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTppPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgcz1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKGUscywwLHIsMCksQS5mc19jbG9zZShlKSxzfWZ1bmN0aW9uIFZJKEEsSSx0KXtsZXQgZT1udWxsO1pJP2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmU9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksdCk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24geShBLEksdCxlKXtsZXQgZz0wO3JldHVybiBJIT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlLEkuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoSS5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIGooQSxJLHQpe2xldCBlPUpTT04uc3RyaW5naWZ5KEkpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIEYoQSxJLHQsZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxpPVZJKEEsZyxyKTtyZXR1cm4gWShlLGkuYnVmZmVyKX1mdW5jdGlvbiB6QShBLEkpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsSV0pLGU9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSxJLHQsZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBvPWpJLmVuY29kZShRLmRhdGEuZGF0YSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBvPWpJLmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBvPVEuZGF0YS5kYXRhLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBvPVEuZGF0YSxmPXkoQSxvLmRhdGEsQywwKSxuPXkoQSxvLmRpcmVjdGlvbixDLDEpLEU9dHlwZW9mIG8ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oby5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTpvLmltYWdlVHlwZSxuYW1lOm8ubmFtZSxvcmlnaW46by5vcmlnaW4sc3BhY2luZzpvLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLHNpemU6by5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07aihBLGMsQyk7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8uY2VsbHMsQywxKSxFPXkoQSxvLnBvaW50RGF0YSxDLDIpLGM9eShBLG8uY2VsbERhdGEsQywzKSx1PXttZXNoVHlwZTpvLm1lc2hUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6by5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGNlbGxCdWZmZXJTaXplOm8uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07aihBLHUsQyk7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLnZlcnRpY2VzLEMsMSksRT15KEEsby5saW5lcyxDLDIpLGM9eShBLG8ucG9seWdvbnMsQywzKSx1PXkoQSxvLnRyaWFuZ2xlU3RyaXBzLEMsNCksZD15KEEsby5wb2ludERhdGEsQyw1KSxSPXkoQSxvLnBvaW50RGF0YSxDLDYpLE49e3BvbHlEYXRhVHlwZTpvLnBvbHlEYXRhVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6by52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsbGluZXNCdWZmZXJTaXplOm8ubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpvLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6by50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07aihBLE4sQyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbihJLnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLHM9QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZyPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7bGV0IG89bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289e2RhdGE6V0kuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPUpTT04ucGFyc2UoV0kuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pO289e2RhdGE6VkkoQSxuLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbj16QShBLEMpO24uZGF0YT1GKEEsQywwLG4uaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLG4uZGlyZWN0aW9uPUYoQSxDLDEsUC5GbG9hdDY0KSxuLm1ldGFkYXRhPW5ldyBNYXAobi5tZXRhZGF0YSksbz1uO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpuLnBvaW50cz1ZKG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxzPjA/bi5jZWxscz1GKEEsQywxLG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOm4uY2VsbHM9WShuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsMixuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsMyxuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLFAuRmxvYXQzMik6bi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxuLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP24udmVydGljZXM9RihBLEMsMSxwLlVJbnQzMik6bi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksbi5saW5lc0J1ZmZlclNpemU+MD9uLmxpbmVzPUYoQSxDLDIscC5VSW50MzIpOm4ubGluZXM9bmV3IFVpbnQzMkFycmF5LG4ucG9seWdvbnNCdWZmZXJTaXplPjA/bi5wb2x5Z29ucz1GKEEsQywzLHAuVUludDMyKTpuLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxuLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP24udHJpYW5nbGVTdHJpcHM9RihBLEMsNCxwLlVJbnQzMik6bi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsNSxuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQyw2LG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6b307YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Omksc3RkZXJyOnMsb3V0cHV0czphfX12YXIgWEk9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sSSk7ZyE9PW51bGwmJnQucHVzaChnKX1yZXR1cm4gdH1mdW5jdGlvbiBwZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLHdlJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDpJP3Q6dC5zbGljZSgwKX12YXIgekk9bWU7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF9JPUZlO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2ST1TZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJEk9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSxJLHQsZSl7bGV0IGc9WEkoQSxJLHQsZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaS50eXBlPT09RC5CaW5hcnlTdHJlYW18fGkudHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IHM9aS5kYXRhO3IucHVzaChzKX1lbHNlIGlmKGkudHlwZT09PUQuSW1hZ2Upe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uX0kocykpfWVsc2UgaWYoaS50eXBlPT09RC5NZXNoKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLnZJKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuUG9seURhdGEpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uJEkocykpfX0pLEZBKGcsekkociwhMCkpfXZhciBBdD1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsSSx0LGUsZyxyKXtsZXQgaT1hd2FpdCBQSShBLEkscik7cmV0dXJuIGF3YWl0IEF0KGksdCxlLGcpfX07b0EoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7aHQoRHQpO2V4cG9ydHtCaSBhcyBhcHBseVByZXNlbnRhdGlvblN0YXRlVG9JbWFnZSxrIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsaCBhcyBnZXRQaXBlbGluZVdvcmtlclVybCx3IGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsY2kgYXMgcmVhZERpY29tRW5jYXBzdWxhdGVkUGRmLGRpIGFzIHJlYWREaWNvbVRhZ3Msd2kgYXMgcmVhZEltYWdlRGljb21GaWxlU2VyaWVzLGxlIGFzIHJlYWRJbWFnZURpY29tRmlsZVNlcmllc1dvcmtlckZ1bmN0aW9uLEZpIGFzIHJlYWRPdmVybGFwcGluZ1NlZ21lbnRhdGlvbixTaSBhcyByZWFkU2VnbWVudGF0aW9uLGVJIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsaHQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsX3MgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxmaSBhcyBzdHJ1Y3R1cmVkUmVwb3J0VG9IdG1sLFFpIGFzIHN0cnVjdHVyZWRSZXBvcnRUb1RleHQsUkEgYXMgdmVyc2lvbixHaSBhcyB3cml0ZU11bHRpU2VnbWVudGF0aW9uLE5pIGFzIHdyaXRlT3ZlcmxhcHBpbmdTZWdtZW50YXRpb24sYmkgYXMgd3JpdGVTZWdtZW50YXRpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py index 065cf443c..19840f56e 100644 --- a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py +++ b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py @@ -1 +1 @@ -__version__ = "7.2.1" +__version__ = "7.2.2" diff --git a/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py b/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py index 065cf443c..19840f56e 100644 --- a/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py +++ b/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py @@ -1 +1 @@ -__version__ = "7.2.1" +__version__ = "7.2.2" diff --git a/packages/dicom/typescript/package.json b/packages/dicom/typescript/package.json index 08f02cb59..dc68501c4 100644 --- a/packages/dicom/typescript/package.json +++ b/packages/dicom/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/dicom", - "version": "7.2.1", + "version": "7.2.2", "packageManager": "pnpm@9.6.0", "description": "Read files and images related to DICOM file format.", "type": "module", diff --git a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py index bf2561596..daa50c7cf 100644 --- a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py +++ b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.4.1" +__version__ = "1.4.2" diff --git a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py index 0e7dc2c0f..08ee4451b 100644 --- a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py +++ b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFF0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgY3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlRdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjQuMCIsUkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRD1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBELlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFQ9ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGY9bXQ7dmFyIG9lPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGh0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFVBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxGQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksc0E9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGFlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHl0PXtjYW5IYW5kbGU6QT0+YWUoQSkmJkFbb2VdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIEllKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxOQShBKX19LHd0PXtjYW5IYW5kbGU6QT0+YWUoQSkmJnNBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxzZT1uZXcgTWFwKFtbInByb3h5Iix5dF0sWyJ0aHJvdyIsd3RdXSk7ZnVuY3Rpb24gRHQoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEllKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIUR0KHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpvLHBhdGg6Z309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxsPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEgpLEM7dHJ5e2xldCBJPWcuc2xpY2UoMCwtMSkucmVkdWNlKChRLEIpPT5RW0JdLEEpLGE9Zy5yZWR1Y2UoKFEsQik9PlFbQl0sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpDPWE7YnJlYWs7Y2FzZSJTRVQiOklbZy5zbGljZSgtMSlbMF1dPUgobi5kYXRhLnZhbHVlKSxDPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOkM9YS5hcHBseShJLGwpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IFE9bmV3IGEoLi4ubCk7Qz1idChRKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOlEscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO0llKEEsQiksQz1HQShRLFtRXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpDPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goSSl7Qz17dmFsdWU6SSxbc0FdOjB9fVByb21pc2UucmVzb2x2ZShDKS5jYXRjaChJPT4oe3ZhbHVlOkksW3NBXTowfSkpLnRoZW4oST0+e2xldFthLFFdPUJBKEkpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDppfSksUSksbz09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZ2UoZSksRkEgaW4gQSYmdHlwZW9mIEFbRkFdPT0iZnVuY3Rpb24iJiZBW0ZBXSgpKX0pLmNhdGNoKEk9PntsZXRbYSxRXT1CQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW3NBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxRKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIFN0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGdlKEEpe1N0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gTkEoQSxlKXtyZXR1cm4gYkEoQSxbXSxlKX1mdW5jdGlvbiBhQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIFkoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57Z2UoQSl9KX12YXIgSUE9bmV3IFdlYWtNYXAsZ0E9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KElBLmdldChBKXx8MCktMTtJQS5zZXQoQSxlKSxlPT09MCYmQmUoQSl9KTtmdW5jdGlvbiBrdChBLGUpe2xldCB0PShJQS5nZXQoZSl8fDApKzE7SUEuc2V0KGUsdCksZ0EmJmdBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBSdChBKXtnQSYmZ0EudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBiQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChpLG8pe2lmKGFBKHIpLG89PT1VQSlyZXR1cm4oKT0+e1J0KG4pLEJlKEEpLHI9ITB9O2lmKG89PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IGc9WShBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKX0pLnRoZW4oSCk7cmV0dXJuIGcudGhlbi5iaW5kKGcpfXJldHVybiBiQShBLFsuLi5lLG9dKX0sc2V0KGksbyxnKXthQShyKTtsZXRbbCxDXT1CQShnKTtyZXR1cm4gWShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsb10ubWFwKEk9PkkudG9TdHJpbmcoKSksdmFsdWU6bH0sQykudGhlbihIKX0sYXBwbHkoaSxvLGcpe2FBKHIpO2xldCBsPWVbZS5sZW5ndGgtMV07aWYobD09PWh0KXJldHVybiBZKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oSCk7aWYobD09PSJiaW5kIilyZXR1cm4gYkEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbQyxJXT1pZShnKTtyZXR1cm4gWShBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxJKS50aGVuKEgpfSxjb25zdHJ1Y3QoaSxvKXthQShyKTtsZXRbZyxsXT1pZShvKTtyZXR1cm4gWShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAoQz0+Qy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Z30sbCkudGhlbihIKX19KTtyZXR1cm4ga3QobixBKSxufWZ1bmN0aW9uIEZ0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGllKEEpe2xldCBlPUEubWFwKEJBKTtyZXR1cm5bZS5tYXAodD0+dFswXSksRnQoZS5tYXAodD0+dFsxXSkpXX12YXIgQ2U9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gR0EoQSxlKXtyZXR1cm4gQ2Uuc2V0KEEsZSksQX1mdW5jdGlvbiBidChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbb2VdOiEwfSl9ZnVuY3Rpb24gQkEoQSl7Zm9yKGxldFtlLHRdb2Ygc2UpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxDZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBIKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHNlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gWShBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj1VdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiBVdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gWihBLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KGUsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOk50fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpUQX09T2JqZWN0LGxBPShBPT5lPT57bGV0IHQ9TnQuY2FsbChlKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLE49QT0+KEE9QS50b0xvd2VyQ2FzZSgpLGU9PmxBKGUpPT09QSksRUE9QT0+ZT0+dHlwZW9mIGU9PT1BLHtpc0FycmF5OnF9PUFycmF5LFg9RUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIEd0KEEpe3JldHVybiBBIT09bnVsbCYmIVgoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWChBLmNvbnN0cnVjdG9yKSYmayhBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgY2U9TigiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBMdChBKXtsZXQgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOmU9QSYmQS5idWZmZXImJmNlKEEuYnVmZmVyKSxlfXZhciBPdD1FQSgic3RyaW5nIiksaz1FQSgiZnVuY3Rpb24iKSx1ZT1FQSgibnVtYmVyIiksUUE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixUdD1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYobEEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgZT1UQShBKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxQdD1OKCJEYXRlIikseHQ9TigiRmlsZSIpLEp0PU4oIkJsb2IiKSxIdD1OKCJGaWxlTGlzdCIpLE10PUE9PlFBKEEpJiZrKEEucGlwZSksWXQ9QT0+e2xldCBlO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fGsoQS5hcHBlbmQpJiYoKGU9bEEoQSkpPT09ImZvcm1kYXRhInx8ZT09PSJvYmplY3QiJiZrKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHF0PU4oIlVSTFNlYXJjaFBhcmFtcyIpLEt0PUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiAkKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89aS5sZW5ndGgsZztmb3Iocj0wO3I8bztyKyspZz1pW3JdLGUuY2FsbChudWxsLEFbZ10sZyxBKX19ZnVuY3Rpb24gZmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBwZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLGRlPUE9PiFYKEEpJiZBIT09cGU7ZnVuY3Rpb24gT0EoKXtsZXR7Y2FzZWxlc3M6QX09ZGUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBpPUEmJmZlKGUsbil8fG47Q0EoZVtpXSkmJkNBKHIpP2VbaV09T0EoZVtpXSxyKTpDQShyKT9lW2ldPU9BKHt9LHIpOnEocik/ZVtpXT1yLnNsaWNlKCk6ZVtpXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJiQoYXJndW1lbnRzW3JdLHQpO3JldHVybiBlfXZhciBXdD0oQSxlLHQse2FsbE93bktleXM6cn09e30pPT4oJChlLChuLGkpPT57dCYmayhuKT9BW2ldPVoobix0KTpBW2ldPW59LHthbGxPd25LZXlzOnJ9KSxBKSxqdD1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLHZ0PShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LF90PShBLGUsdCxyKT0+e2xldCBuLGksbyxnPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxpPW4ubGVuZ3RoO2ktLSA+MDspbz1uW2ldLCghcnx8cihvLEEsZSkpJiYhZ1tvXSYmKGVbb109QVtvXSxnW29dPSEwKTtBPXQhPT0hMSYmVEEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LHp0PShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sVnQ9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHEoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIXVlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxadD0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVEEoVWludDhBcnJheSkpLFh0PShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IGk9bi52YWx1ZTtlLmNhbGwoQSxpWzBdLGlbMV0pfX0sJHQ9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sQXI9TigiSFRNTEZvcm1FbGVtZW50IiksZXI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLEVlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSx0cj1OKCJSZWdFeHAiKSxtZT0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307JCh0LChuLGkpPT57bGV0IG87KG89ZShuLGksQSkpIT09ITEmJihyW2ldPW98fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0scnI9QT0+e21lKEEsKGUsdCk9PntpZihrKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKGsocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0sbnI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0saXI9KCk9Pnt9LG9yPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxMQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFFlPSIwMTIzNDU2Nzg5IixoZT17RElHSVQ6UWUsQUxQSEE6TEEsQUxQSEFfRElHSVQ6TEErTEEudG9VcHBlckNhc2UoKStRZX0sYXI9KEE9MTYsZT1oZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBzcihBKXtyZXR1cm4hIShBJiZrKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgSXI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKFFBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBpPXEocik/W106e307cmV0dXJuICQociwobyxnKT0+e2xldCBsPXQobyxuKzEpOyFYKGwpJiYoaVtnXT1sKX0pLGVbbl09dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChBLDApfSxncj1OKCJBc3luY0Z1bmN0aW9uIiksQnI9QT0+QSYmKFFBKEEpfHxrKEEpKSYmayhBLnRoZW4pJiZrKEEuY2F0Y2gpLHM9e2lzQXJyYXk6cSxpc0FycmF5QnVmZmVyOmNlLGlzQnVmZmVyOkd0LGlzRm9ybURhdGE6WXQsaXNBcnJheUJ1ZmZlclZpZXc6THQsaXNTdHJpbmc6T3QsaXNOdW1iZXI6dWUsaXNCb29sZWFuOlR0LGlzT2JqZWN0OlFBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6WCxpc0RhdGU6UHQsaXNGaWxlOnh0LGlzQmxvYjpKdCxpc1JlZ0V4cDp0cixpc0Z1bmN0aW9uOmssaXNTdHJlYW06TXQsaXNVUkxTZWFyY2hQYXJhbXM6cXQsaXNUeXBlZEFycmF5Olp0LGlzRmlsZUxpc3Q6SHQsZm9yRWFjaDokLG1lcmdlOk9BLGV4dGVuZDpXdCx0cmltOkt0LHN0cmlwQk9NOmp0LGluaGVyaXRzOnZ0LHRvRmxhdE9iamVjdDpfdCxraW5kT2Y6bEEsa2luZE9mVGVzdDpOLGVuZHNXaXRoOnp0LHRvQXJyYXk6VnQsZm9yRWFjaEVudHJ5Olh0LG1hdGNoQWxsOiR0LGlzSFRNTEZvcm06QXIsaGFzT3duUHJvcGVydHk6RWUsaGFzT3duUHJvcDpFZSxyZWR1Y2VEZXNjcmlwdG9yczptZSxmcmVlemVNZXRob2RzOnJyLHRvT2JqZWN0U2V0Om5yLHRvQ2FtZWxDYXNlOmVyLG5vb3A6aXIsdG9GaW5pdGVOdW1iZXI6b3IsZmluZEtleTpmZSxnbG9iYWw6cGUsaXNDb250ZXh0RGVmaW5lZDpkZSxBTFBIQUJFVDpoZSxnZW5lcmF0ZVN0cmluZzphcixpc1NwZWNDb21wbGlhbnRGb3JtOnNyLHRvSlNPTk9iamVjdDpJcixpc0FzeW5jRm46Z3IsaXNUaGVuYWJsZTpCcn07ZnVuY3Rpb24gSyhBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1zLmluaGVyaXRzKEssRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciB5ZT1LLnByb3RvdHlwZSx3ZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9Pnt3ZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLHdlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Sy5mcm9tPShBLGUsdCxyLG4saSk9PntsZXQgbz1PYmplY3QuY3JlYXRlKHllKTtyZXR1cm4gcy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGwpe3JldHVybiBsIT09RXJyb3IucHJvdG90eXBlfSxnPT5nIT09ImlzQXhpb3NFcnJvciIpLEsuY2FsbChvLEEubWVzc2FnZSxlLHQscixuKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxpJiZPYmplY3QuYXNzaWduKG8saSksb307dmFyIHA9Szt2YXIgY0E9bnVsbDtmdW5jdGlvbiBQQShBKXtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KEEpfHxzLmlzQXJyYXkoQSl9ZnVuY3Rpb24gU2UoQSl7cmV0dXJuIHMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gRGUoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLGkpe3JldHVybiBuPVNlKG4pLCF0JiZpPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBDcihBKXtyZXR1cm4gcy5pc0FycmF5KEEpJiYhQS5zb21lKFBBKX12YXIgbHI9cy50b0ZsYXRPYmplY3Qocyx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIEVyKEEsZSx0KXtpZighcy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhjQXx8Rm9ybURhdGEpLHQ9cy50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIXMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fEksaT10LmRvdHMsbz10LmluZGV4ZXMsbD0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZzLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIXMuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIEMoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYocy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighbCYmcy5pc0Jsb2IoRSkpdGhyb3cgbmV3IHAoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIHMuaXNBcnJheUJ1ZmZlcihFKXx8cy5pc1R5cGVkQXJyYXkoRSk/bCYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEkoRSxjLHUpe2xldCBkPUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYocy5lbmRzV2l0aChjLCJ7fSIpKWM9cj9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKHMuaXNBcnJheShFKSYmQ3IoRSl8fChzLmlzRmlsZUxpc3QoRSl8fHMuZW5kc1dpdGgoYywiW10iKSkmJihkPXMudG9BcnJheShFKSkpcmV0dXJuIGM9U2UoYyksZC5mb3JFYWNoKGZ1bmN0aW9uKFUsRXQpeyEocy5pc1VuZGVmaW5lZChVKXx8VT09PW51bGwpJiZlLmFwcGVuZChvPT09ITA/RGUoW2NdLEV0LGkpOm89PT1udWxsP2M6YysiW10iLEMoVSkpfSksITF9cmV0dXJuIFBBKEUpPyEwOihlLmFwcGVuZChEZSh1LGMsaSksQyhFKSksITEpfWxldCBhPVtdLFE9T2JqZWN0LmFzc2lnbihscix7ZGVmYXVsdFZpc2l0b3I6SSxjb252ZXJ0VmFsdWU6Qyxpc1Zpc2l0YWJsZTpQQX0pO2Z1bmN0aW9uIEIoRSxjKXtpZighcy5pc1VuZGVmaW5lZChFKSl7aWYoYS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTthLnB1c2goRSkscy5mb3JFYWNoKEUsZnVuY3Rpb24oZCxiKXsoIShzLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJm4uY2FsbChlLGQscy5pc1N0cmluZyhiKT9iLnRyaW0oKTpiLGMsUSkpPT09ITAmJkIoZCxjP2MuY29uY2F0KGIpOltiXSl9KSxhLnBvcCgpfX1pZighcy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEIoQSksZX12YXIgUD1FcjtmdW5jdGlvbiBrZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIFJlKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmUChBLHRoaXMsZSl9dmFyIEZlPVJlLnByb3RvdHlwZTtGZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07RmUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscixrZSl9OmtlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciB1QT1SZTtmdW5jdGlvbiBRcihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBBQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fFFyLG49dCYmdC5zZXJpYWxpemUsaTtpZihuP2k9bihlLHQpOmk9cy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IHVBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIHhBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtzLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sSkE9eEE7dmFyIGZBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgYmU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnVBO3ZhciBVZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIE5lPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIEdlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmJlLEZvcm1EYXRhOlVlLEJsb2I6TmV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSEE9e307Y3QoSEEse2hhc0Jyb3dzZXJFbnY6KCk9PkxlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+Y3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT51cn0pO3ZhciBMZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixjcj0oQT0+TGUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx1cj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHk9ey4uLkhBLC4uLkdlfTtmdW5jdGlvbiBNQShBLGUpe3JldHVybiBQKEEsbmV3IHkuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixpKXtyZXR1cm4geS5pc05vZGUmJnMuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBmcihBKXtyZXR1cm4gcy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIHByKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG47cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gZHIoQSl7ZnVuY3Rpb24gZSh0LHIsbixpKXtsZXQgbz10W2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBnPU51bWJlci5pc0Zpbml0ZSgrbyksbD1pPj10Lmxlbmd0aDtyZXR1cm4gbz0hbyYmcy5pc0FycmF5KG4pP24ubGVuZ3RoOm8sbD8ocy5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSxyXTpuW29dPXIsIWcpOigoIW5bb118fCFzLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUodCxyLG5bb10saSkmJnMuaXNBcnJheShuW29dKSYmKG5bb109cHIobltvXSkpLCFnKX1pZihzLmlzRm9ybURhdGEoQSkmJnMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gcy5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoZnIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgcEE9ZHI7ZnVuY3Rpb24gbXIoQSxlLHQpe2lmKHMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxzLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6ZkEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPXMuaXNPYmplY3QoZSk7aWYoaSYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShwQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKSlyZXR1cm4gZTtpZihzLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihzLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgZztpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBNQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGc9cy5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gUChnP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxtcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJnMuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChnKXtpZihvKXRocm93IGcubmFtZT09PSJTeW50YXhFcnJvciI/cC5mcm9tKGcscC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpnfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6eS5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6eS5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFc9WUE7dmFyIGhyPXMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksT2U9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJmhyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIFRlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gZUEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6cy5pc0FycmF5KEEpP0EubWFwKGRBKTpTdHJpbmcoQSl9ZnVuY3Rpb24geXIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIHdyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIHFBKEEsZSx0LHIsbil7aWYocy5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhcy5pc1N0cmluZyhlKSl7aWYocy5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYocy5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBEcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBTcihBLGUpe2xldCB0PXMudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBqPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBpKGcsbCxDKXtsZXQgST1lQShsKTtpZighSSl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9cy5maW5kS2V5KG4sSSk7KCFhfHxuW2FdPT09dm9pZCAwfHxDPT09ITB8fEM9PT12b2lkIDAmJm5bYV0hPT0hMSkmJihuW2F8fGxdPWRBKGcpKX1sZXQgbz0oZyxsKT0+cy5mb3JFYWNoKGcsKEMsSSk9PmkoQyxJLGwpKTtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKGUsdCk6cy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhd3IoZSk/byhPZShlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9cy5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIHlyKG4pO2lmKHMuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihzLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9cy5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxxQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89ZUEobyksbyl7bGV0IGc9cy5maW5kS2V5KHIsbyk7ZyYmKCF0fHxxQShyLHJbZ10sZyx0KSkmJihkZWxldGUgcltnXSxuPSEwKX19cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxxQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBzLmZvckVhY2godGhpcywobixpKT0+e2xldCBvPXMuZmluZEtleShyLGkpO2lmKG8pe3Rbb109ZEEobiksZGVsZXRlIHRbaV07cmV0dXJufWxldCBnPWU/RHIoaSk6U3RyaW5nKGkpLnRyaW0oKTtnIT09aSYmZGVsZXRlIHRbaV0sdFtnXT1kQShuKSxyW2ddPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZzLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbVGVdPXRoaXNbVGVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG8pe2xldCBnPWVBKG8pO3JbZ118fChTcihuLG8pLHJbZ109ITApfXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O2ouYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO3MucmVkdWNlRGVzY3JpcHRvcnMoai5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7cy5mcmVlemVNZXRob2RzKGopO3ZhciB3PWo7ZnVuY3Rpb24gdEEoQSxlKXtsZXQgdD10aGlzfHxXLHI9ZXx8dCxuPXcuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBzLmZvckVhY2goQSxmdW5jdGlvbihnKXtpPWcuY2FsbCh0LGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBQZShBLGUsdCl7cC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixwLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9cy5pbmhlcml0cyhQZSxwLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9UGU7ZnVuY3Rpb24gS0EoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgcCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFtwLkVSUl9CQURfUkVRVUVTVCxwLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciB4ZT15Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO3MuaXNOdW1iZXIodCkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLHMuaXNTdHJpbmcocikmJm8ucHVzaCgicGF0aD0iK3IpLHMuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBXQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIGpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBuQShBLGUpe3JldHVybiBBJiYhV0EoZSk/akEoQSxlKTplfXZhciBKZT15Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IGc9cy5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIGcucHJvdG9jb2w9PT1yLnByb3RvY29sJiZnLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIHZBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBrcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBDPURhdGUubm93KCksST1yW2ldO298fChvPUMpLHRbbl09bCxyW25dPUM7bGV0IGE9aSxRPTA7Zm9yKDthIT09bjspUSs9dFthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksQy1vPGUpcmV0dXJuO2xldCBCPUkmJkMtSTtyZXR1cm4gQj9NYXRoLnJvdW5kKFEqMWUzL0IpOnZvaWQgMH19dmFyIEhlPWtyO2Z1bmN0aW9uIE1lKEEsZSl7bGV0IHQ9MCxyPUhlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxnPWktdCxsPXIoZyksQz1pPD1vO3Q9aTtsZXQgST17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6ZyxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmbyYmQz8oby1pKS9sOnZvaWQgMCxldmVudDpufTtJW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShJKX19dmFyIFJyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWWU9UnImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxpPXcuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOmd9PUEsbDtmdW5jdGlvbiBDKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBJO2lmKHMuaXNGb3JtRGF0YShuKSl7aWYoeS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHkuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEk9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1JP0kuc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgUT1uQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEFBKFEsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBCKCl7aWYoIWEpcmV0dXJuO2xldCBjPXcuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGQ9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6YX07S0EoZnVuY3Rpb24oVSl7dChVKSxDKCl9LGZ1bmN0aW9uKFUpe3IoVSksQygpfSxkKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPUI6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KEIpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgcCgiUmVxdWVzdCBhYm9ydGVkIixwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBwKCJOZXR3b3JrIEVycm9yIixwLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsZD1BLnRyYW5zaXRpb25hbHx8ZkE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IHAodSxkLmNsYXJpZnlUaW1lb3V0RXJyb3I/cC5FVElNRURPVVQ6cC5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSx5Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKGcmJnMuaXNGdW5jdGlvbihnKSYmKGc9ZyhBKSksZ3x8ZyE9PSExJiZKZShRKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnhlLnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJnMuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKHUsZCl7YS5zZXRSZXF1ZXN0SGVhZGVyKGQsdSl9KSxzLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsTWUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGw9Yz0+e2EmJihyKCFjfHxjLnR5cGU/bmV3IHgobnVsbCxBLGEpOmMpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShsKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/bCgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixsKSkpO2xldCBFPXZBKFEpO2lmKEUmJnkucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7cihuZXcgcCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixwLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgX0E9e2h0dHA6Y0EseGhyOlllfTtzLmZvckVhY2goX0EsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgcWU9QT0+YC0gJHtBfWAsRnI9QT0+cy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLG1BPXtnZXRBZGFwdGVyOkE9PntBPXMuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBvO2lmKHI9dCwhRnIodCkmJihyPV9BWyhvPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IHAoYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZihyKWJyZWFrO25bb3x8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2csbF0pPT5gYWRhcHRlciAke2d9IGArKGw9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKHFlKS5qb2luKGAKYCk6IiAiK3FlKGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHAoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6X0F9O2Z1bmN0aW9uIHpBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24gaEEoQSl7cmV0dXJuIHpBKEEpLEEuaGVhZGVycz13LmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9dEEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLG1BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxXLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHpBKEEpLHIuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9dy5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIHJBKHIpfHwoekEoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9dy5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBLZT1BPT5BIGluc3RhbmNlb2Ygdz97Li4uQX06QTtmdW5jdGlvbiBPKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKEMsSSxhKXtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KEMpJiZzLmlzUGxhaW5PYmplY3QoSSk/cy5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxDLEkpOnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlKHt9LEkpOnMuaXNBcnJheShJKT9JLnNsaWNlKCk6SX1mdW5jdGlvbiBuKEMsSSxhKXtpZihzLmlzVW5kZWZpbmVkKEkpKXtpZighcy5pc1VuZGVmaW5lZChDKSlyZXR1cm4gcih2b2lkIDAsQyxhKX1lbHNlIHJldHVybiByKEMsSSxhKX1mdW5jdGlvbiBpKEMsSSl7aWYoIXMuaXNVbmRlZmluZWQoSSkpcmV0dXJuIHIodm9pZCAwLEkpfWZ1bmN0aW9uIG8oQyxJKXtpZihzLmlzVW5kZWZpbmVkKEkpKXtpZighcy5pc1VuZGVmaW5lZChDKSlyZXR1cm4gcih2b2lkIDAsQyl9ZWxzZSByZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gZyhDLEksYSl7aWYoYSBpbiBlKXJldHVybiByKEMsSSk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCxDKX1sZXQgbD17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpnLGhlYWRlcnM6KEMsSSk9Pm4oS2UoQyksS2UoSSksITApfTtyZXR1cm4gcy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24oSSl7bGV0IGE9bFtJXXx8bixRPWEoQVtJXSxlW0ldLEkpO3MuaXNVbmRlZmluZWQoUSkmJmEhPT1nfHwodFtJXT1RKX0pLHR9dmFyIHlBPSIxLjYuOCI7dmFyIFZBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e1ZBW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBXZT17fTtWQS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3lBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihpLG8sZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IHAobihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxwLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIVdlW29dJiYoV2Vbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLGcpOiEwfX07ZnVuY3Rpb24gYnIoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgcCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIscC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXJbbl0sbz1lW2ldO2lmKG8pe2xldCBnPUFbaV0sbD1nPT09dm9pZCAwfHxvKGcsaSxBKTtpZihsIT09ITApdGhyb3cgbmV3IHAoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrbCxwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IHAoIlVua25vd24gb3B0aW9uICIraSxwLkVSUl9CQURfT1BUSU9OKX19dmFyIHdBPXthc3NlcnRPcHRpb25zOmJyLHZhbGlkYXRvcnM6VkF9O3ZhciBKPXdBLnZhbGlkYXRvcnMsdj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEpBLHJlc3BvbnNlOm5ldyBKQX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9Tyh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT10O3IhPT12b2lkIDAmJndBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKX0sITEpLG4hPW51bGwmJihzLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06d0EuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6Si5mdW5jdGlvbixzZXJpYWxpemU6Si5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZzLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBpW0VdfSksdC5oZWFkZXJzPXcuY29uY2F0KG8saSk7bGV0IGc9W10sbD0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChsPWwmJmMuc3luY2hyb25vdXMsZy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBDPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7Qy5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEksYT0wLFE7aWYoIWwpe2xldCBFPVtoQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLGcpLEUucHVzaC5hcHBseShFLEMpLFE9RS5sZW5ndGgsST1Qcm9taXNlLnJlc29sdmUodCk7YTxROylJPUkudGhlbihFW2ErK10sRVthKytdKTtyZXR1cm4gSX1RPWcubGVuZ3RoO2xldCBCPXQ7Zm9yKGE9MDthPFE7KXtsZXQgRT1nW2ErK10sYz1nW2ErK107dHJ5e0I9RShCKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0k9aEEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoYT0wLFE9Qy5sZW5ndGg7YTxROylJPUkudGhlbihDW2ErK10sQ1thKytdKTtyZXR1cm4gSX1nZXRVcmkoZSl7ZT1PKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gQUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXt2LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTyhyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7cy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxvLGcpe3JldHVybiB0aGlzLnJlcXVlc3QoTyhnfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6b30pKX19di5wcm90b3R5cGVbZV09dCgpLHYucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBpQT12O3ZhciBaQT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBpLG89bmV3IFByb21pc2UoZz0+e3Iuc3Vic2NyaWJlKGcpLGk9Z30pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sb30sZShmdW5jdGlvbihpLG8sZyl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgeChpLG8sZyksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0samU9WkE7ZnVuY3Rpb24gWEEoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uICRBKEEpe3JldHVybiBzLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBBZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQWUpLmZvckVhY2goKFtBLGVdKT0+e0FlW2VdPUF9KTt2YXIgdmU9QWU7ZnVuY3Rpb24gX2UoQSl7bGV0IGU9bmV3IGlBKEEpLHQ9WihpQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gcy5leHRlbmQodCxpQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLHMuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIF9lKE8oQSxuKSl9LHR9dmFyIG09X2UoVyk7bS5BeGlvcz1pQTttLkNhbmNlbGVkRXJyb3I9eDttLkNhbmNlbFRva2VuPWplO20uaXNDYW5jZWw9ckE7bS5WRVJTSU9OPXlBO20udG9Gb3JtRGF0YT1QO20uQXhpb3NFcnJvcj1wO20uQ2FuY2VsPW0uQ2FuY2VsZWRFcnJvcjttLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O20uc3ByZWFkPVhBO20uaXNBeGlvc0Vycm9yPSRBO20ubWVyZ2VDb25maWc9TzttLkF4aW9zSGVhZGVycz13O20uZm9ybVRvSlNPTj1BPT5wQShzLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO20uZ2V0QWRhcHRlcj1tQS5nZXRBZGFwdGVyO20uSHR0cFN0YXR1c0NvZGU9dmU7bS5kZWZhdWx0PW07dmFyIF89bTt2YXJ7QXhpb3M6Wm8sQXhpb3NFcnJvcjpYbyxDYW5jZWxlZEVycm9yOiRvLGlzQ2FuY2VsOkFhLENhbmNlbFRva2VuOmVhLFZFUlNJT046dGEsYWxsOnJhLENhbmNlbDpuYSxpc0F4aW9zRXJyb3I6aWEsc3ByZWFkOm9hLHRvRm9ybURhdGE6YWEsQXhpb3NIZWFkZXJzOnNhLEh0dHBTdGF0dXNDb2RlOklhLGZvcm1Ub0pTT046Z2EsZ2V0QWRhcHRlcjpCYSxtZXJnZUNvbmZpZzpDYX09Xzthc3luYyBmdW5jdGlvbiBVcihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgXy5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBvQT1VcjtmdW5jdGlvbiB6ZShBKXtsZXQgZT1OQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W1VBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIE5yKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgaT1BO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTp6ZShBKX1sZXQgbj1hd2FpdCBvQShlLHQpO3JldHVybiB6ZShuKX12YXIgVmU9TnI7YXN5bmMgZnVuY3Rpb24gR3IoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLG89KGF3YWl0IF8uZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om99KX12YXIgWmU9R3I7dmFyIFhlPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBldD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIiwkZT1uZXcgVGV4dEVuY29kZXIsQXQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIExyKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxpPUEuZnNfc3RhdChlKS5zaXplLG89bnVsbDtldD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpvPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgZz1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKHIsZywwLGksMCksQS5mc19jbG9zZShyKSxnfWZ1bmN0aW9uIHR0KEEsZSx0KXtsZXQgcj1udWxsO2V0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KGkpLG59ZnVuY3Rpb24gaChBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIHooQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixpLG4pfWZ1bmN0aW9uIFMoQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPXR0KEEsbixpKTtyZXR1cm4gVChyLG8uYnVmZmVyKX1mdW5jdGlvbiBlZShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gT3IoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7c3dpdGNoKEMudHlwZSl7Y2FzZSBmLlRleHRTdHJlYW06e2xldCBhPSRlLmVuY29kZShDLmRhdGEuZGF0YSksUT1oKEEsYSxJLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTt6KEEsQixJKTticmVha31jYXNlIGYuSnNvbkNvbXBhdGlibGU6e2xldCBhPSRlLmVuY29kZShKU09OLnN0cmluZ2lmeShDLmRhdGEpKSxRPWgoQSxhLEksMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O3ooQSxCLEkpO2JyZWFrfWNhc2UgZi5CaW5hcnlTdHJlYW06e2xldCBhPUMuZGF0YS5kYXRhLFE9aChBLGEsSSwwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07eihBLEIsSSk7YnJlYWt9Y2FzZSBmLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShDLmRhdGEucGF0aCxDLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBmLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIGYuSW1hZ2U6e2xldCBhPUMuZGF0YSxRPWgoQSxhLmRhdGEsSSwwKSxCPWgoQSxhLmRpcmVjdGlvbixJLDEpLEU9dHlwZW9mIGEubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oYS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTphLmltYWdlVHlwZSxuYW1lOmEubmFtZSxvcmlnaW46YS5vcmlnaW4sc3BhY2luZzphLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6YS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbWV0YWRhdGE6RX07eihBLGMsSSk7YnJlYWt9Y2FzZSBmLk1lc2g6e2xldCBhPUMuZGF0YSxRPWgoQSxhLnBvaW50cyxJLDApLEI9aChBLGEuY2VsbHMsSSwxKSxFPWgoQSxhLnBvaW50RGF0YSxJLDIpLGM9aChBLGEuY2VsbERhdGEsSSwzKSx1PXttZXNoVHlwZTphLm1lc2hUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mQ2VsbHM6YS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOmEuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07eihBLHUsSSk7YnJlYWt9Y2FzZSBmLlBvbHlEYXRhOntsZXQgYT1DLmRhdGEsUT1oKEEsYS5wb2ludHMsSSwwKSxCPWgoQSxhLnZlcnRpY2VzLEksMSksRT1oKEEsYS5saW5lcyxJLDIpLGM9aChBLGEucG9seWdvbnMsSSwzKSx1PWgoQSxhLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEsYS5wb2ludERhdGEsSSw1KSxiPWgoQSxhLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTphLnBvbHlEYXRhVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6YS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOmEubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTphLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6YS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2J9YH07eihBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxpPTA7dHJ5e2k9QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZpPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7bGV0IGE9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIGYuVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO2E9e2RhdGE6QXQuZGVjb2RlKGMpfTticmVha31jYXNlIGYuSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTthPUpTT04ucGFyc2UoQXQuZGVjb2RlKGMpKTticmVha31jYXNlIGYuQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO2E9e2RhdGE6dHQoQSxCLEUpfTticmVha31jYXNlIGYuVGV4dEZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBmLkJpbmFyeUZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpMcihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBmLkltYWdlOntsZXQgQj1lZShBLEkpO0IuZGF0YT1TKEEsSSwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPVMoQSxJLDEsTS5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSksYT1CO2JyZWFrfWNhc2UgZi5NZXNoOntsZXQgQj1lZShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1TKEEsSSwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1UKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1TKEEsSSwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9VChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9UyhBLEksMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1UKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9UyhBLEksMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9VChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9Y2FzZSBmLlBvbHlEYXRhOntsZXQgQj1lZShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1TKEEsSSwwLE0uRmxvYXQzMik6Qi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxCLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0IudmVydGljZXM9UyhBLEksMSxELlVJbnQzMik6Qi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQi5saW5lc0J1ZmZlclNpemU+MD9CLmxpbmVzPVMoQSxJLDIsRC5VSW50MzIpOkIubGluZXM9bmV3IFVpbnQzMkFycmF5LEIucG9seWdvbnNCdWZmZXJTaXplPjA/Qi5wb2x5Z29ucz1TKEEsSSwzLEQuVUludDMyKTpCLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxCLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0IudHJpYW5nbGVTdHJpcHM9UyhBLEksNCxELlVJbnQzMik6Qi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9UyhBLEksNSxCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9VChCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1TKEEsSSw2LEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9VChCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IFE9e3R5cGU6Qy50eXBlLGRhdGE6YX07bC5wdXNoKFEpfSkse3JldHVyblZhbHVlOmksc3Rkb3V0Om8sc3RkZXJyOmcsb3V0cHV0czpsfX12YXIgcnQ9T3I7dmFyIFRyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBQcihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCByPTA7cjxBLmxlbmd0aDtyKyspe2xldCBuPXhyKEFbcl0sZSk7biE9PW51bGwmJnQucHVzaChuKX1yZXR1cm4gdH1mdW5jdGlvbiB4cihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLFRyJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3Q6dC5zbGljZSgwKX12YXIgbnQ9UHI7ZnVuY3Rpb24gSnIoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIGl0PUpyO2Z1bmN0aW9uIEhyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBvdD1IcjtmdW5jdGlvbiBNcihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgYXQ9TXI7dmFyIFlyO2Z1bmN0aW9uIERBKCl7cmV0dXJuIFlyfXZhciBxcjtmdW5jdGlvbiBzdCgpe3JldHVybiBxcn12YXIgS3I7ZnVuY3Rpb24gU0EoKXtyZXR1cm4gS3J9dmFyIHRlPW5ldyBNYXA7ZnVuY3Rpb24gV3IoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gSXQoKXtsZXQgQT1EQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBrQSgpe2xldCBBPXN0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24ganIoQSxlLHQpe2xldCByPUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHI9bmV3IFVSTChBLmhyZWYpLG49ci5ocmVmKSx0ZS5oYXMobikpcmV0dXJuIHRlLmdldChuKTt7bGV0IGk9YXdhaXQgWmUoQSxlPy50b1N0cmluZygpPz9JdCgpLHQ/P2tBKCkpO3JldHVybiB0ZS5zZXQobixpKSxpfX1hc3luYyBmdW5jdGlvbiB2cihBLGUsdCxyLG4pe2lmKCFhd2FpdCBYZSgpKXtsZXQgdT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQodSksbmV3IEVycm9yKHUpfWxldCBpPW4/LndlYldvcmtlcj8/bnVsbDtpZihpPT09ITEpe2xldCB1PWF3YWl0IGpyKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7cmV0dXJuIHJ0KHUsZSx0LHIpfWxldCBvPWksZz1uPy5waXBlbGluZVdvcmtlclVybD8/V3IoKSxsPXR5cGVvZiBnIT0ic3RyaW5nIiYmdHlwZW9mIGc/LmhyZWY8InUiP2cuaHJlZjpnLHt3b3JrZXJQcm94eTpDLHdvcmtlcjpJfT1hd2FpdCBWZShvLGwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7bz1JO2xldCBhPVtdO3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LnR5cGU9PT1mLkJpbmFyeVN0cmVhbSl7bGV0IGQ9dS5kYXRhLmRhdGE7YS5wdXNoKGQpfWVsc2UgaWYodS50eXBlPT09Zi5CaW5hcnlGaWxlKXtsZXQgZD11LmRhdGEuZGF0YTthLnB1c2goZCl9ZWxzZSBpZih1LnR5cGU9PT1mLkltYWdlKXtsZXQgZD11LmRhdGE7ZC5kYXRhIT09bnVsbCYmYS5wdXNoKC4uLml0KGQpKX1lbHNlIGlmKHUudHlwZT09PWYuTWVzaCl7bGV0IGQ9dS5kYXRhO2EucHVzaCguLi5vdChkKSl9ZWxzZSBpZih1LnR5cGU9PT1mLlBvbHlEYXRhKXtsZXQgZD11LmRhdGE7YS5wdXNoKC4uLmF0KGQpKX19KTtsZXQgUT1uPy5waXBlbGluZUJhc2VVcmw/P0l0KCksQj10eXBlb2YgUSE9InN0cmluZyImJnR5cGVvZiBRPy5ocmVmPCJ1Ij9RLmhyZWY6USxFPXIhPW51bGw/R0EocixudChhLG4/Lm5vQ29weSkpOm51bGwsYz1hd2FpdCBDLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxCLGUsdCxFLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P2tBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpjLnJldHVyblZhbHVlLHN0ZG91dDpjLnN0ZG91dCxzdGRlcnI6Yy5zdGRlcnIsb3V0cHV0czpjLm91dHB1dHMsd2ViV29ya2VyOm99fXZhciBGPXZyO3ZhciBfcj1udWxsO2Z1bmN0aW9uIGd0KCl7cmV0dXJuIF9yfXZhciByZSx6cj1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vZG93bnNhbXBsZUAke1JBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gdHMoQSl7cmU9QX1mdW5jdGlvbiBHKCl7aWYodHlwZW9mIHJlPCJ1IilyZXR1cm4gcmU7bGV0IEE9REEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6enJ9dmFyIG5lLFZyPW51bGw7ZnVuY3Rpb24gQnQoQSl7bmU9QX1mdW5jdGlvbiBSKCl7aWYodHlwZW9mIG5lPCJ1IilyZXR1cm4gbmU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6VnJ9dmFyIFY9bnVsbDthc3luYyBmdW5jdGlvbiBDdCgpe2xldCBBPVIoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO1Y9YXdhaXQgb0EoZSl9ZnVuY3Rpb24gSXMoQSl7Vj1BfWFzeW5jIGZ1bmN0aW9uIEwoKXtpZihWIT09bnVsbClyZXR1cm4gVi50ZXJtaW5hdGVkJiZhd2FpdCBDdCgpLFY7bGV0IEE9Z3QoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgQ3QoKSxWKX1hc3luYyBmdW5jdGlvbiBacihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6Zi5JbWFnZX1dLHI9W3t0eXBlOmYuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9ZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZuLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBnPSJkb3duc2FtcGxlLWJpbi1zaHJpbmsiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IEwoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBGKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpHKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6UVswXT8uZGF0YX19dmFyIFhyPVpyO2FzeW5jIGZ1bmN0aW9uICRyKEEsZT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCB0PVt7dHlwZTpmLkltYWdlfV0scj1be3R5cGU6Zi5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnNocmlua0ZhY3RvcnMpe2lmKGUuc2hyaW5rRmFjdG9ycy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChlLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIEU9PntuLnB1c2goRS50b1N0cmluZygpKX0pKX1pZihlLmNyb3BSYWRpdXMpe2lmKGUuY3JvcFJhZGl1cy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJjcm9wLXJhZGl1cyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tY3JvcC1yYWRpdXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmNyb3BSYWRpdXMubWFwKGFzeW5jIEU9PntuLnB1c2goRS50b1N0cmluZygpKX0pKX1sZXQgZz0iZG93bnNhbXBsZS1sYWJlbC1pbWFnZSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgTCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6SSxzdGRlcnI6YSxvdXRwdXRzOlF9PWF3YWl0IEYoZyxuLHQscix7cGlwZWxpbmVCYXNlVXJsOkcoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qyxkb3duc2FtcGxlZDpRWzBdPy5kYXRhfX12YXIgQW49JHI7YXN5bmMgZnVuY3Rpb24gZW4oQT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCBlPVt7dHlwZTpmLkpzb25Db21wYXRpYmxlfV0sdD1bXSxyPVtdO2lmKHIucHVzaCgiMCIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgQS5zaHJpbmtGYWN0b3JzPCJ1Iil7aWYoQS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgUT0+e3IucHVzaChRLnRvU3RyaW5nKCkpfSkpfWxldCBpPSJkb3duc2FtcGxlLXNpZ21hIixvPUE/LndlYldvcmtlcjtvPT09dm9pZCAwJiYobz1hd2FpdCBMKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpDLG91dHB1dHM6SX09YXdhaXQgRihpLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6RygpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6byxub0NvcHk6QT8ubm9Db3B5fSk7aWYobCE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHNpZ21hOklbMF0/LmRhdGF9fXZhciB0bj1lbjthc3luYyBmdW5jdGlvbiBybihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6Zi5JbWFnZX1dLHI9W3t0eXBlOmYuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IEwoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBGKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpHKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6UVswXT8uZGF0YX19dmFyIG5uPXJuO2FzeW5jIGZ1bmN0aW9uIG9uKEE9e3NpemU6WzEsMV0sc2lnbWE6WzEsMV19KXtsZXQgZT1be3R5cGU6Zi5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2l6ZTwidSIpe2lmKEEuc2l6ZS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaXplIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaXplIiksYXdhaXQgUHJvbWlzZS5hbGwoQS5zaXplLm1hcChhc3luYyBRPT57ci5wdXNoKFEudG9TdHJpbmcoKSl9KSl9aWYodHlwZW9mIEEuc2lnbWE8InUiKXtpZihBLnNpZ21hLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNpZ21hIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaWdtYSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2lnbWEubWFwKGFzeW5jIFE9PntyLnB1c2goUS50b1N0cmluZygpKX0pKX10eXBlb2YgQS5tYXhLZXJuZWxXaWR0aDwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLXdpZHRoIixBLm1heEtlcm5lbFdpZHRoLnRvU3RyaW5nKCkpLHR5cGVvZiBBLm1heEtlcm5lbEVycm9yPCJ1IiYmci5wdXNoKCItLW1heC1rZXJuZWwtZXJyb3IiLEEubWF4S2VybmVsRXJyb3IudG9TdHJpbmcoKSk7bGV0IGk9ImdhdXNzaWFuLWtlcm5lbC1yYWRpdXMiLG89QT8ud2ViV29ya2VyO289PT12b2lkIDAmJihvPWF3YWl0IEwoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOmwsc3RkZXJyOkMsb3V0cHV0czpJfT1hd2FpdCBGKGkscixlLHQse3BpcGVsaW5lQmFzZVVybDpHKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpvLG5vQ29weTpBPy5ub0NvcHl9KTtpZihsIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmcscmFkaXVzOklbMF0/LmRhdGF9fXZhciBhbj1vbjt2YXIgbHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZXQ9KEEsSSk9Pntmb3IodmFyIHQgaW4gSSl0dChBLHQse2dldDpJW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGd0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxtQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGl0PXtjYW5IYW5kbGU6QT0+JEEoQSkmJkFbdkFdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6SSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIG9BKEEsSSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxzdChBKX19LG90PXtjYW5IYW5kbGU6QT0+JEEoQSkmJmVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IEk7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9JPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ST17aXNFcnJvcjohMSx2YWx1ZTpBfSxbSSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxBST1uZXcgTWFwKFtbInByb3h5IixpdF0sWyJ0aHJvdyIsb3RdXSk7ZnVuY3Rpb24gQnQoQSxJKXtmb3IobGV0IHQgb2YgQSlpZihJPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KEkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG9BKEEsST1nbG9iYWxUaGlzLHQ9WyIqIl0pe0kuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gZShnKXtpZighZ3x8IWcuZGF0YSlyZXR1cm47aWYoIUJ0KHQsZy5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtnLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6cix0eXBlOmkscGF0aDpzfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxnLmRhdGEpLGE9KGcuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoYiksUTt0cnl7bGV0IEM9cy5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsbik9PmZbbl0sQSksbz1zLnJlZHVjZSgoZixuKT0+ZltuXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOlE9bzticmVhaztjYXNlIlNFVCI6Q1tzLnNsaWNlKC0xKVswXV09YihnLmRhdGEudmFsdWUpLFE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6UT1vLmFwcGx5KEMsYSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgbyguLi5hKTtRPWF0KGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpufT1uZXcgTWVzc2FnZUNoYW5uZWw7b0EoQSxuKSxRPUZBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOlE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChDKXtRPXt2YWx1ZTpDLFtlQV06MH19UHJvbWlzZS5yZXNvbHZlKFEpLmNhdGNoKEM9Pih7dmFsdWU6QyxbZUFdOjB9KSkudGhlbihDPT57bGV0W28sZl09aUEoQyk7SS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOnJ9KSxmKSxpPT09IlJFTEVBU0UiJiYoSS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixlKSxJSShJKSxtQSBpbiBBJiZ0eXBlb2YgQVttQV09PSJmdW5jdGlvbiImJkFbbUFdKCkpfSkuY2F0Y2goQz0+e2xldFtvLGZdPWlBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbZUFdOjB9KTtJLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7aWQ6cn0pLGYpfSl9KSxJLnN0YXJ0JiZJLnN0YXJ0KCl9ZnVuY3Rpb24gQ3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gSUkoQSl7Q3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBzdChBLEkpe3JldHVybiBwQShBLFtdLEkpfWZ1bmN0aW9uIHRBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiB0SShBKXtyZXR1cm4gTShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntJSShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxyQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgST0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLEkpLEk9PT0wJiZ0SShBKX0pO2Z1bmN0aW9uIG50KEEsSSl7bGV0IHQ9KGdBLmdldChJKXx8MCkrMTtnQS5zZXQoSSx0KSxyQSYmckEucmVnaXN0ZXIoQSxJLEEpfWZ1bmN0aW9uIFF0KEEpe3JBJiZyQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHBBKEEsST1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IGU9ITEsZz1uZXcgUHJveHkodCx7Z2V0KHIsaSl7aWYodEEoZSksaT09PXJ0KXJldHVybigpPT57UXQoZyksdEkoQSksZT0hMH07aWYoaT09PSJ0aGVuIil7aWYoSS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5nfTtsZXQgcz1NKEEse3R5cGU6IkdFVCIscGF0aDpJLm1hcChhPT5hLnRvU3RyaW5nKCkpfSkudGhlbihiKTtyZXR1cm4gcy50aGVuLmJpbmQocyl9cmV0dXJuIHBBKEEsWy4uLkksaV0pfSxzZXQocixpLHMpe3RBKGUpO2xldFthLFFdPWlBKHMpO3JldHVybiBNKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uSSxpXS5tYXAoQz0+Qy50b1N0cmluZygpKSx2YWx1ZTphfSxRKS50aGVuKGIpfSxhcHBseShyLGkscyl7dEEoZSk7bGV0IGE9SVtJLmxlbmd0aC0xXTtpZihhPT09Z3QpcmV0dXJuIE0oQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihiKTtpZihhPT09ImJpbmQiKXJldHVybiBwQShBLEkuc2xpY2UoMCwtMSkpO2xldFtRLENdPV9BKHMpO3JldHVybiBNKEEse3R5cGU6IkFQUExZIixwYXRoOkkubWFwKG89Pm8udG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OlF9LEMpLnRoZW4oYil9LGNvbnN0cnVjdChyLGkpe3RBKGUpO2xldFtzLGFdPV9BKGkpO3JldHVybiBNKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDpJLm1hcChRPT5RLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpzfSxhKS50aGVuKGIpfX0pO3JldHVybiBudChnLEEpLGd9ZnVuY3Rpb24gRXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gX0EoQSl7bGV0IEk9QS5tYXAoaUEpO3JldHVybltJLm1hcCh0PT50WzBdKSxFdChJLm1hcCh0PT50WzFdKSldfXZhciBlST1uZXcgV2Vha01hcDtmdW5jdGlvbiBGQShBLEkpe3JldHVybiBlSS5zZXQoQSxJKSxBfWZ1bmN0aW9uIGF0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t2QV06ITB9KX1mdW5jdGlvbiBpQShBKXtmb3IobGV0W0ksdF1vZiBBSSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W2UsZ109dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOkksdmFsdWU6ZX0sZ119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGVJLmdldChBKXx8W11dfWZ1bmN0aW9uIGIoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gQUkuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBNKEEsSSx0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e2xldCBnPWN0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PWd8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLGUoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpnfSxJKSx0KX0pfWZ1bmN0aW9uIGN0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBXKEEsSSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoSSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6ZnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOk5BfT1PYmplY3QsQ0E9KEE9Pkk9PntsZXQgdD1mdC5jYWxsKEkpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVT1BPT4oQT1BLnRvTG93ZXJDYXNlKCksST0+Q0EoSSk9PT1BKSxzQT1BPT5JPT50eXBlb2YgST09PUEse2lzQXJyYXk6cX09QXJyYXksWj1zQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEEhPT1udWxsJiYhWihBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFaKEEuY29uc3RydWN0b3IpJiZTKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBvST1VKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIER0KEEpe2xldCBJO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ST1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ST1BJiZBLmJ1ZmZlciYmb0koQS5idWZmZXIpLEl9dmFyIHV0PXNBKCJzdHJpbmciKSxTPXNBKCJmdW5jdGlvbiIpLEJJPXNBKCJudW1iZXIiKSxuQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLGh0PUE9PkE9PT0hMHx8QT09PSExLEJBPUE9PntpZihDQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBJPU5BKEEpO3JldHVybihJPT09bnVsbHx8ST09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihJKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGR0PVUoIkRhdGUiKSx5dD1VKCJGaWxlIiksd3Q9VSgiQmxvYiIpLG10PVUoIkZpbGVMaXN0IikscHQ9QT0+bkEoQSkmJlMoQS5waXBlKSxGdD1BPT57bGV0IEk7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8UyhBLmFwcGVuZCkmJigoST1DQShBKSk9PT0iZm9ybWRhdGEifHxJPT09Im9iamVjdCImJlMoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sU3Q9VSgiVVJMU2VhcmNoUGFyYW1zIiksUnQ9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIFYoQSxJLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgZSxnO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxxKEEpKWZvcihlPTAsZz1BLmxlbmd0aDtlPGc7ZSsrKUkuY2FsbChudWxsLEFbZV0sZSxBKTtlbHNle2xldCByPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1yLmxlbmd0aCxzO2ZvcihlPTA7ZTxpO2UrKylzPXJbZV0sSS5jYWxsKG51bGwsQVtzXSxzLEEpfX1mdW5jdGlvbiBDSShBLEkpe0k9SS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLGU9dC5sZW5ndGgsZztmb3IoO2UtLSA+MDspaWYoZz10W2VdLEk9PT1nLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGc7cmV0dXJuIG51bGx9dmFyIHNJPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsbkk9QT0+IVooQSkmJkEhPT1zSTtmdW5jdGlvbiBSQSgpe2xldHtjYXNlbGVzczpBfT1uSSh0aGlzKSYmdGhpc3x8e30sST17fSx0PShlLGcpPT57bGV0IHI9QSYmQ0koSSxnKXx8ZztCQShJW3JdKSYmQkEoZSk/SVtyXT1SQShJW3JdLGUpOkJBKGUpP0lbcl09UkEoe30sZSk6cShlKT9JW3JdPWUuc2xpY2UoKTpJW3JdPWV9O2ZvcihsZXQgZT0wLGc9YXJndW1lbnRzLmxlbmd0aDtlPGc7ZSsrKWFyZ3VtZW50c1tlXSYmVihhcmd1bWVudHNbZV0sdCk7cmV0dXJuIEl9dmFyIE50PShBLEksdCx7YWxsT3duS2V5czplfT17fSk9PihWKEksKGcscik9Pnt0JiZTKGcpP0Fbcl09VyhnLHQpOkFbcl09Z30se2FsbE93bktleXM6ZX0pLEEpLFV0PUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksR3Q9KEEsSSx0LGUpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSxlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOkkucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sa3Q9KEEsSSx0LGUpPT57bGV0IGcscixpLHM9e307aWYoST1JfHx7fSxBPT1udWxsKXJldHVybiBJO2Rve2ZvcihnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLHI9Zy5sZW5ndGg7ci0tID4wOylpPWdbcl0sKCFlfHxlKGksQSxJKSkmJiFzW2ldJiYoSVtpXT1BW2ldLHNbaV09ITApO0E9dCE9PSExJiZOQShBKX13aGlsZShBJiYoIXR8fHQoQSxJKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gSX0sTHQ9KEEsSSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPUkubGVuZ3RoO2xldCBlPUEuaW5kZXhPZihJLHQpO3JldHVybiBlIT09LTEmJmU9PT10fSxKdD1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgST1BLmxlbmd0aDtpZighQkkoSSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KEkpO2Zvcig7SS0tID4wOyl0W0ldPUFbSV07cmV0dXJuIHR9LEh0PShBPT5JPT5BJiZJIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZOQShVaW50OEFycmF5KSksWXQ9KEEsSSk9PntsZXQgZT0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLGc7Zm9yKDsoZz1lLm5leHQoKSkmJiFnLmRvbmU7KXtsZXQgcj1nLnZhbHVlO0kuY2FsbChBLHJbMF0sclsxXSl9fSxidD0oQSxJKT0+e2xldCB0LGU9W107Zm9yKDsodD1BLmV4ZWMoSSkpIT09bnVsbDspZS5wdXNoKHQpO3JldHVybiBlfSxNdD1VKCJIVE1MRm9ybUVsZW1lbnQiKSxxdD1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbih0LGUsZyl7cmV0dXJuIGUudG9VcHBlckNhc2UoKStnfSksckk9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oSSx0KT0+QS5jYWxsKEksdCkpKE9iamVjdC5wcm90b3R5cGUpLEt0PVUoIlJlZ0V4cCIpLFFJPShBLEkpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksZT17fTtWKHQsKGcscik9PntsZXQgaTsoaT1JKGcscixBKSkhPT0hMSYmKGVbcl09aXx8Zyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLGUpfSxPdD1BPT57UUkoQSwoSSx0KT0+e2lmKFMoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCBlPUFbdF07aWYoUyhlKSl7aWYoSS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBJKXtJLndyaXRhYmxlPSExO3JldHVybn1JLnNldHx8KEkuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIit0KyJcJyIpfSl9fSl9LFR0PShBLEkpPT57bGV0IHQ9e30sZT1nPT57Zy5mb3JFYWNoKHI9Pnt0W3JdPSEwfSl9O3JldHVybiBxKEEpP2UoQSk6ZShTdHJpbmcoQSkuc3BsaXQoSSkpLHR9LHh0PSgpPT57fSxQdD0oQSxJKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6SSksU0E9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixpST0iMDEyMzQ1Njc4OSIsRUk9e0RJR0lUOmlJLEFMUEhBOlNBLEFMUEhBX0RJR0lUOlNBK1NBLnRvVXBwZXJDYXNlKCkraUl9LGp0PShBPTE2LEk9RUkuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDplfT1JO2Zvcig7QS0tOyl0Kz1JW01hdGgucmFuZG9tKCkqZXwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gV3QoQSl7cmV0dXJuISEoQSYmUyhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFp0PUE9PntsZXQgST1uZXcgQXJyYXkoMTApLHQ9KGUsZyk9PntpZihuQShlKSl7aWYoSS5pbmRleE9mKGUpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gZSkpe0lbZ109ZTtsZXQgcj1xKGUpP1tdOnt9O3JldHVybiBWKGUsKGkscyk9PntsZXQgYT10KGksZysxKTshWihhKSYmKHJbc109YSl9KSxJW2ddPXZvaWQgMCxyfX1yZXR1cm4gZX07cmV0dXJuIHQoQSwwKX0sVnQ9VSgiQXN5bmNGdW5jdGlvbiIpLFh0PUE9PkEmJihuQShBKXx8UyhBKSkmJlMoQS50aGVuKSYmUyhBLmNhdGNoKSxCPXtpc0FycmF5OnEsaXNBcnJheUJ1ZmZlcjpvSSxpc0J1ZmZlcjpsdCxpc0Zvcm1EYXRhOkZ0LGlzQXJyYXlCdWZmZXJWaWV3OkR0LGlzU3RyaW5nOnV0LGlzTnVtYmVyOkJJLGlzQm9vbGVhbjpodCxpc09iamVjdDpuQSxpc1BsYWluT2JqZWN0OkJBLGlzVW5kZWZpbmVkOlosaXNEYXRlOmR0LGlzRmlsZTp5dCxpc0Jsb2I6d3QsaXNSZWdFeHA6S3QsaXNGdW5jdGlvbjpTLGlzU3RyZWFtOnB0LGlzVVJMU2VhcmNoUGFyYW1zOlN0LGlzVHlwZWRBcnJheTpIdCxpc0ZpbGVMaXN0Om10LGZvckVhY2g6VixtZXJnZTpSQSxleHRlbmQ6TnQsdHJpbTpSdCxzdHJpcEJPTTpVdCxpbmhlcml0czpHdCx0b0ZsYXRPYmplY3Q6a3Qsa2luZE9mOkNBLGtpbmRPZlRlc3Q6VSxlbmRzV2l0aDpMdCx0b0FycmF5Okp0LGZvckVhY2hFbnRyeTpZdCxtYXRjaEFsbDpidCxpc0hUTUxGb3JtOk10LGhhc093blByb3BlcnR5OnJJLGhhc093blByb3A6ckkscmVkdWNlRGVzY3JpcHRvcnM6UUksZnJlZXplTWV0aG9kczpPdCx0b09iamVjdFNldDpUdCx0b0NhbWVsQ2FzZTpxdCxub29wOnh0LHRvRmluaXRlTnVtYmVyOlB0LGZpbmRLZXk6Q0ksZ2xvYmFsOnNJLGlzQ29udGV4dERlZmluZWQ6bkksQUxQSEFCRVQ6RUksZ2VuZXJhdGVTdHJpbmc6anQsaXNTcGVjQ29tcGxpYW50Rm9ybTpXdCx0b0pTT05PYmplY3Q6WnQsaXNBc3luY0ZuOlZ0LGlzVGhlbmFibGU6WHR9O2Z1bmN0aW9uIEsoQSxJLHQsZSxnKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLEkmJih0aGlzLmNvZGU9SSksdCYmKHRoaXMuY29uZmlnPXQpLGUmJih0aGlzLnJlcXVlc3Q9ZSksZyYmKHRoaXMucmVzcG9uc2U9Zyl9Qi5pbmhlcml0cyhLLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Qi50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgYUk9Sy5wcm90b3R5cGUsY0k9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57Y0lbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSyxjSSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFJLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO0suZnJvbT0oQSxJLHQsZSxnLHIpPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShhSSk7cmV0dXJuIEIudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PUVycm9yLnByb3RvdHlwZX0scz0+cyE9PSJpc0F4aW9zRXJyb3IiKSxLLmNhbGwoaSxBLm1lc3NhZ2UsSSx0LGUsZyksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsciYmT2JqZWN0LmFzc2lnbihpLHIpLGl9O3ZhciBsPUs7dmFyIFFBPW51bGw7ZnVuY3Rpb24gVUEoQSl7cmV0dXJuIEIuaXNQbGFpbk9iamVjdChBKXx8Qi5pc0FycmF5KEEpfWZ1bmN0aW9uIGxJKEEpe3JldHVybiBCLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIGZJKEEsSSx0KXtyZXR1cm4gQT9BLmNvbmNhdChJKS5tYXAoZnVuY3Rpb24oZyxyKXtyZXR1cm4gZz1sSShnKSwhdCYmcj8iWyIrZysiXSI6Z30pLmpvaW4odD8iLiI6IiIpOkl9ZnVuY3Rpb24genQoQSl7cmV0dXJuIEIuaXNBcnJheShBKSYmIUEuc29tZShVQSl9dmFyIF90PUIudG9GbGF0T2JqZWN0KEIse30sbnVsbCxmdW5jdGlvbihJKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoSSl9KTtmdW5jdGlvbiB2dChBLEksdCl7aWYoIUIuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ST1JfHxuZXcoUUF8fEZvcm1EYXRhKSx0PUIudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihjLHUpe3JldHVybiFCLmlzVW5kZWZpbmVkKHVbY10pfSk7bGV0IGU9dC5tZXRhVG9rZW5zLGc9dC52aXNpdG9yfHxDLHI9dC5kb3RzLGk9dC5pbmRleGVzLGE9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmQi5pc1NwZWNDb21wbGlhbnRGb3JtKEkpO2lmKCFCLmlzRnVuY3Rpb24oZykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBRKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKEIuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIWEmJkIuaXNCbG9iKEUpKXRocm93IG5ldyBsKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBCLmlzQXJyYXlCdWZmZXIoRSl8fEIuaXNUeXBlZEFycmF5KEUpP2EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBDKEUsYyx1KXtsZXQgZD1FO2lmKEUmJiF1JiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKEIuZW5kc1dpdGgoYywie30iKSljPWU/YzpjLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihCLmlzQXJyYXkoRSkmJnp0KEUpfHwoQi5pc0ZpbGVMaXN0KEUpfHxCLmVuZHNXaXRoKGMsIltdIikpJiYoZD1CLnRvQXJyYXkoRSkpKXJldHVybiBjPWxJKGMpLGQuZm9yRWFjaChmdW5jdGlvbihOLEl0KXshKEIuaXNVbmRlZmluZWQoTil8fE49PT1udWxsKSYmSS5hcHBlbmQoaT09PSEwP2ZJKFtjXSxJdCxyKTppPT09bnVsbD9jOmMrIltdIixRKE4pKX0pLCExfXJldHVybiBVQShFKT8hMDooSS5hcHBlbmQoZkkodSxjLHIpLFEoRSkpLCExKX1sZXQgbz1bXSxmPU9iamVjdC5hc3NpZ24oX3Qse2RlZmF1bHRWaXNpdG9yOkMsY29udmVydFZhbHVlOlEsaXNWaXNpdGFibGU6VUF9KTtmdW5jdGlvbiBuKEUsYyl7aWYoIUIuaXNVbmRlZmluZWQoRSkpe2lmKG8uaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitjLmpvaW4oIi4iKSk7by5wdXNoKEUpLEIuZm9yRWFjaChFLGZ1bmN0aW9uKGQsUil7KCEoQi5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZnLmNhbGwoSSxkLEIuaXNTdHJpbmcoUik/Ui50cmltKCk6UixjLGYpKT09PSEwJiZuKGQsYz9jLmNvbmNhdChSKTpbUl0pfSksby5wb3AoKX19aWYoIUIuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBuKEEpLEl9dmFyIEw9dnQ7ZnVuY3Rpb24gREkoQSl7bGV0IEk9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oZSl7cmV0dXJuIElbZV19KX1mdW5jdGlvbiB1SShBLEkpe3RoaXMuX3BhaXJzPVtdLEEmJkwoQSx0aGlzLEkpfXZhciBoST11SS5wcm90b3R5cGU7aEkuYXBwZW5kPWZ1bmN0aW9uKEksdCl7dGhpcy5fcGFpcnMucHVzaChbSSx0XSl9O2hJLnRvU3RyaW5nPWZ1bmN0aW9uKEkpe2xldCB0PUk/ZnVuY3Rpb24oZSl7cmV0dXJuIEkuY2FsbCh0aGlzLGUsREkpfTpESTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKGcpe3JldHVybiB0KGdbMF0pKyI9Iit0KGdbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRUE9dUk7ZnVuY3Rpb24gJHQoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLEksdCl7aWYoIUkpcmV0dXJuIEE7bGV0IGU9dCYmdC5lbmNvZGV8fCR0LGc9dCYmdC5zZXJpYWxpemUscjtpZihnP3I9ZyhJLHQpOnI9Qi5pc1VSTFNlYXJjaFBhcmFtcyhJKT9JLnRvU3RyaW5nKCk6bmV3IEVBKEksdCkudG9TdHJpbmcoZSkscil7bGV0IGk9QS5pbmRleE9mKCIlMjMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIgR0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShJLHQsZSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkkscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czplP2Uuc3luY2hyb25vdXM6ITEscnVuV2hlbjplP2UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChJKXt0aGlzLmhhbmRsZXJzW0ldJiYodGhpcy5oYW5kbGVyc1tJXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEkpe0IuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGUpe2UhPT1udWxsJiZJKGUpfSl9fSxrQT1HQTt2YXIgYUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBkST10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6RUE7dmFyIHlJPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgd0k9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgbUk9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6ZEksRm9ybURhdGE6eUksQmxvYjp3SX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBMQT17fTtldChMQSx7aGFzQnJvd3NlckVudjooKT0+cEksaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5BZSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PkllfSk7dmFyIHBJPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEFlPShBPT5wSSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEllPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uTEEsLi4ubUl9O2Z1bmN0aW9uIEpBKEEsSSl7cmV0dXJuIEwoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQsZSxnLHIpe3JldHVybiB3LmlzTm9kZSYmQi5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQoZSx0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sSSkpfWZ1bmN0aW9uIHRlKEEpe3JldHVybiBCLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAoST0+SVswXT09PSJbXSI/IiI6SVsxXXx8SVswXSl9ZnVuY3Rpb24gZWUoQSl7bGV0IEk9e30sdD1PYmplY3Qua2V5cyhBKSxlLGc9dC5sZW5ndGgscjtmb3IoZT0wO2U8ZztlKyspcj10W2VdLElbcl09QVtyXTtyZXR1cm4gSX1mdW5jdGlvbiBnZShBKXtmdW5jdGlvbiBJKHQsZSxnLHIpe2xldCBpPXRbcisrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IHM9TnVtYmVyLmlzRmluaXRlKCtpKSxhPXI+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZCLmlzQXJyYXkoZyk/Zy5sZW5ndGg6aSxhPyhCLmhhc093blByb3AoZyxpKT9nW2ldPVtnW2ldLGVdOmdbaV09ZSwhcyk6KCghZ1tpXXx8IUIuaXNPYmplY3QoZ1tpXSkpJiYoZ1tpXT1bXSksSSh0LGUsZ1tpXSxyKSYmQi5pc0FycmF5KGdbaV0pJiYoZ1tpXT1lZShnW2ldKSksIXMpfWlmKEIuaXNGb3JtRGF0YShBKSYmQi5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBCLmZvckVhY2hFbnRyeShBLChlLGcpPT57SSh0ZShlKSxnLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBjQT1nZTtmdW5jdGlvbiByZShBLEksdCl7aWYoQi5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKEl8fEpTT04ucGFyc2UpKEEpLEIudHJpbShBKX1jYXRjaChlKXtpZihlLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGV9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgSEE9e3RyYW5zaXRpb25hbDphQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEksdCl7bGV0IGU9dC5nZXRDb250ZW50VHlwZSgpfHwiIixnPWUuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Qi5pc09iamVjdChJKTtpZihyJiZCLmlzSFRNTEZvcm0oSSkmJihJPW5ldyBGb3JtRGF0YShJKSksQi5pc0Zvcm1EYXRhKEkpKXJldHVybiBnP0pTT04uc3RyaW5naWZ5KGNBKEkpKTpJO2lmKEIuaXNBcnJheUJ1ZmZlcihJKXx8Qi5pc0J1ZmZlcihJKXx8Qi5pc1N0cmVhbShJKXx8Qi5pc0ZpbGUoSSl8fEIuaXNCbG9iKEkpKXJldHVybiBJO2lmKEIuaXNBcnJheUJ1ZmZlclZpZXcoSSkpcmV0dXJuIEkuYnVmZmVyO2lmKEIuaXNVUkxTZWFyY2hQYXJhbXMoSSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksSS50b1N0cmluZygpO2xldCBzO2lmKHIpe2lmKGUuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEpBKEksdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigocz1CLmlzRmlsZUxpc3QoSSkpfHxlLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKHM/eyJmaWxlc1tdIjpJfTpJLGEmJm5ldyBhLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8Zz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLHJlKEkpKTpJfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEkpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxIQS50cmFuc2l0aW9uYWwsZT10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGc9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoSSYmQi5pc1N0cmluZyhJKSYmKGUmJiF0aGlzLnJlc3BvbnNlVHlwZXx8Zykpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJmc7dHJ5e3JldHVybiBKU09OLnBhcnNlKEkpfWNhdGNoKHMpe2lmKGkpdGhyb3cgcy5uYW1lPT09IlN5bnRheEVycm9yIj9sLmZyb20ocyxsLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOnN9fXJldHVybiBJfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oSSl7cmV0dXJuIEk+PTIwMCYmSTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e0hBLmhlYWRlcnNbQV09e319KTt2YXIgTz1IQTt2YXIgaWU9Qi50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxGST1BPT57bGV0IEk9e30sdCxlLGc7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24oaSl7Zz1pLmluZGV4T2YoIjoiKSx0PWkuc3Vic3RyaW5nKDAsZykudHJpbSgpLnRvTG93ZXJDYXNlKCksZT1pLnN1YnN0cmluZyhnKzEpLnRyaW0oKSwhKCF0fHxJW3RdJiZpZVt0XSkmJih0PT09InNldC1jb29raWUiP0lbdF0/SVt0XS5wdXNoKGUpOklbdF09W2VdOklbdF09SVt0XT9JW3RdKyIsICIrZTplKX0pLEl9O3ZhciBTST1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHooQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBmQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Qi5pc0FycmF5KEEpP0EubWFwKGZBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gb2UoQSl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csZTtmb3IoO2U9dC5leGVjKEEpOylJW2VbMV1dPWVbMl07cmV0dXJuIEl9dmFyIEJlPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFlBKEEsSSx0LGUsZyl7aWYoQi5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyxJLHQpO2lmKGcmJihJPXQpLCEhQi5pc1N0cmluZyhJKSl7aWYoQi5pc1N0cmluZyhlKSlyZXR1cm4gSS5pbmRleE9mKGUpIT09LTE7aWYoQi5pc1JlZ0V4cChlKSlyZXR1cm4gZS50ZXN0KEkpfX1mdW5jdGlvbiBDZShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKEksdCxlKT0+dC50b1VwcGVyQ2FzZSgpK2UpfWZ1bmN0aW9uIHNlKEEsSSl7bGV0IHQ9Qi50b0NhbWVsQ2FzZSgiICIrSSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxlK3Qse3ZhbHVlOmZ1bmN0aW9uKGcscixpKXtyZXR1cm4gdGhpc1tlXS5jYWxsKHRoaXMsSSxnLHIsaSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFQ9Y2xhc3N7Y29uc3RydWN0b3IoSSl7SSYmdGhpcy5zZXQoSSl9c2V0KEksdCxlKXtsZXQgZz10aGlzO2Z1bmN0aW9uIHIocyxhLFEpe2xldCBDPXooYSk7aWYoIUMpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBvPUIuZmluZEtleShnLEMpOyghb3x8Z1tvXT09PXZvaWQgMHx8UT09PSEwfHxRPT09dm9pZCAwJiZnW29dIT09ITEpJiYoZ1tvfHxhXT1mQShzKSl9bGV0IGk9KHMsYSk9PkIuZm9yRWFjaChzLChRLEMpPT5yKFEsQyxhKSk7cmV0dXJuIEIuaXNQbGFpbk9iamVjdChJKXx8SSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/aShJLHQpOkIuaXNTdHJpbmcoSSkmJihJPUkudHJpbSgpKSYmIUJlKEkpP2koRkkoSSksdCk6SSE9bnVsbCYmcih0LEksZSksdGhpc31nZXQoSSx0KXtpZihJPXooSSksSSl7bGV0IGU9Qi5maW5kS2V5KHRoaXMsSSk7aWYoZSl7bGV0IGc9dGhpc1tlXTtpZighdClyZXR1cm4gZztpZih0PT09ITApcmV0dXJuIG9lKGcpO2lmKEIuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsZyxlKTtpZihCLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMoZyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhJLHQpe2lmKEk9eihJKSxJKXtsZXQgZT1CLmZpbmRLZXkodGhpcyxJKTtyZXR1cm4hIShlJiZ0aGlzW2VdIT09dm9pZCAwJiYoIXR8fFlBKHRoaXMsdGhpc1tlXSxlLHQpKSl9cmV0dXJuITF9ZGVsZXRlKEksdCl7bGV0IGU9dGhpcyxnPSExO2Z1bmN0aW9uIHIoaSl7aWYoaT16KGkpLGkpe2xldCBzPUIuZmluZEtleShlLGkpO3MmJighdHx8WUEoZSxlW3NdLHMsdCkpJiYoZGVsZXRlIGVbc10sZz0hMCl9fXJldHVybiBCLmlzQXJyYXkoSSk/SS5mb3JFYWNoKHIpOnIoSSksZ31jbGVhcihJKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzKSxlPXQubGVuZ3RoLGc9ITE7Zm9yKDtlLS07KXtsZXQgcj10W2VdOyghSXx8WUEodGhpcyx0aGlzW3JdLHIsSSwhMCkpJiYoZGVsZXRlIHRoaXNbcl0sZz0hMCl9cmV0dXJuIGd9bm9ybWFsaXplKEkpe2xldCB0PXRoaXMsZT17fTtyZXR1cm4gQi5mb3JFYWNoKHRoaXMsKGcscik9PntsZXQgaT1CLmZpbmRLZXkoZSxyKTtpZihpKXt0W2ldPWZBKGcpLGRlbGV0ZSB0W3JdO3JldHVybn1sZXQgcz1JP0NlKHIpOlN0cmluZyhyKS50cmltKCk7cyE9PXImJmRlbGV0ZSB0W3JdLHRbc109ZkEoZyksZVtzXT0hMH0pLHRoaXN9Y29uY2F0KC4uLkkpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLkkpfXRvSlNPTihJKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBCLmZvckVhY2godGhpcywoZSxnKT0+e2UhPW51bGwmJmUhPT0hMSYmKHRbZ109SSYmQi5pc0FycmF5KGUpP2Uuam9pbigiLCAiKTplKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW0ksdF0pPT5JKyI6ICIrdCkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIHRoaXM/STpuZXcgdGhpcyhJKX1zdGF0aWMgY29uY2F0KEksLi4udCl7bGV0IGU9bmV3IHRoaXMoSSk7cmV0dXJuIHQuZm9yRWFjaChnPT5lLnNldChnKSksZX1zdGF0aWMgYWNjZXNzb3IoSSl7bGV0IGU9KHRoaXNbU0ldPXRoaXNbU0ldPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsZz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiByKGkpe2xldCBzPXooaSk7ZVtzXXx8KHNlKGcsaSksZVtzXT0hMCl9cmV0dXJuIEIuaXNBcnJheShJKT9JLmZvckVhY2gocik6cihJKSx0aGlzfX07VC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Qi5yZWR1Y2VEZXNjcmlwdG9ycyhULnByb3RvdHlwZSwoe3ZhbHVlOkF9LEkpPT57bGV0IHQ9SVswXS50b1VwcGVyQ2FzZSgpK0kuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoZSl7dGhpc1t0XT1lfX19KTtCLmZyZWV6ZU1ldGhvZHMoVCk7dmFyIG09VDtmdW5jdGlvbiBfKEEsSSl7bGV0IHQ9dGhpc3x8TyxlPUl8fHQsZz1tLmZyb20oZS5oZWFkZXJzKSxyPWUuZGF0YTtyZXR1cm4gQi5mb3JFYWNoKEEsZnVuY3Rpb24ocyl7cj1zLmNhbGwodCxyLGcubm9ybWFsaXplKCksST9JLnN0YXR1czp2b2lkIDApfSksZy5ub3JtYWxpemUoKSxyfWZ1bmN0aW9uIHYoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBSSShBLEksdCl7bC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixsLkVSUl9DQU5DRUxFRCxJLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Qi5pbmhlcml0cyhSSSxsLHtfX0NBTkNFTF9fOiEwfSk7dmFyIEo9Ukk7ZnVuY3Rpb24gYkEoQSxJLHQpe2xldCBlPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IWV8fGUodC5zdGF0dXMpP0EodCk6SShuZXcgbCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFtsLkVSUl9CQURfUkVRVUVTVCxsLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciBOST13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxJLHQsZSxnLHIpe2xldCBpPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoSSldO0IuaXNOdW1iZXIodCkmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLEIuaXNTdHJpbmcoZSkmJmkucHVzaCgicGF0aD0iK2UpLEIuaXNTdHJpbmcoZykmJmkucHVzaCgiZG9tYWluPSIrZykscj09PSEwJiZpLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1pLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IEk9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBJP2RlY29kZVVSSUNvbXBvbmVudChJWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIE1BKEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHFBKEEsSSl7cmV0dXJuIEk/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIitJLnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiAkKEEsSSl7cmV0dXJuIEEmJiFNQShJKT9xQShBLEkpOkl9dmFyIFVJPXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IEk9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxlO2Z1bmN0aW9uIGcocil7bGV0IGk9cjtyZXR1cm4gSSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gZT1nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgcz1CLmlzU3RyaW5nKGkpP2coaSk6aTtyZXR1cm4gcy5wcm90b2NvbD09PWUucHJvdG9jb2wmJnMuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gS0EoQSl7bGV0IEk9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIEkmJklbMV18fCIifWZ1bmN0aW9uIG5lKEEsSSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSksZT1uZXcgQXJyYXkoQSksZz0wLHI9MCxpO3JldHVybiBJPUkhPT12b2lkIDA/SToxZTMsZnVuY3Rpb24oYSl7bGV0IFE9RGF0ZS5ub3coKSxDPWVbcl07aXx8KGk9USksdFtnXT1hLGVbZ109UTtsZXQgbz1yLGY9MDtmb3IoO28hPT1nOylmKz10W28rK10sbz1vJUE7aWYoZz0oZysxKSVBLGc9PT1yJiYocj0ocisxKSVBKSxRLWk8SSlyZXR1cm47bGV0IG49QyYmUS1DO3JldHVybiBuP01hdGgucm91bmQoZioxZTMvbik6dm9pZCAwfX12YXIgR0k9bmU7ZnVuY3Rpb24ga0koQSxJKXtsZXQgdD0wLGU9R0koNTAsMjUwKTtyZXR1cm4gZz0+e2xldCByPWcubG9hZGVkLGk9Zy5sZW5ndGhDb21wdXRhYmxlP2cudG90YWw6dm9pZCAwLHM9ci10LGE9ZShzKSxRPXI8PWk7dD1yO2xldCBDPXtsb2FkZWQ6cix0b3RhbDppLHByb2dyZXNzOmk/ci9pOnZvaWQgMCxieXRlczpzLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZpJiZRPyhpLXIpL2E6dm9pZCAwLGV2ZW50Omd9O0NbST8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEMpfX12YXIgUWU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixMST1RZSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bGV0IGc9QS5kYXRhLHI9bS5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46c309QSxhO2Z1bmN0aW9uIFEoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IEM7aWYoQi5pc0Zvcm1EYXRhKGcpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoQz1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPUM/Qy5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IG89bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBmPSQoQS5iYXNlVVJMLEEudXJsKTtvLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxYKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksby50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBuKCl7aWYoIW8pcmV0dXJuO2xldCBjPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIG8mJm8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGQ9e2RhdGE6IWl8fGk9PT0idGV4dCJ8fGk9PT0ianNvbiI/by5yZXNwb25zZVRleHQ6by5yZXNwb25zZSxzdGF0dXM6by5zdGF0dXMsc3RhdHVzVGV4dDpvLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6b307YkEoZnVuY3Rpb24oTil7dChOKSxRKCl9LGZ1bmN0aW9uKE4pe2UoTiksUSgpfSxkKSxvPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBvP28ub25sb2FkZW5kPW46by5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshb3x8by5yZWFkeVN0YXRlIT09NHx8by5zdGF0dXM9PT0wJiYhKG8ucmVzcG9uc2VVUkwmJm8ucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KG4pfSxvLm9uYWJvcnQ9ZnVuY3Rpb24oKXtvJiYoZShuZXcgbCgiUmVxdWVzdCBhYm9ydGVkIixsLkVDT05OQUJPUlRFRCxBLG8pKSxvPW51bGwpfSxvLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBsKCJOZXR3b3JrIEVycm9yIixsLkVSUl9ORVRXT1JLLEEsbykpLG89bnVsbH0sby5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsZD1BLnRyYW5zaXRpb25hbHx8YUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGUobmV3IGwodSxkLmNsYXJpZnlUaW1lb3V0RXJyb3I/bC5FVElNRURPVVQ6bC5FQ09OTkFCT1JURUQsQSxvKSksbz1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHMmJkIuaXNGdW5jdGlvbihzKSYmKHM9cyhBKSksc3x8cyE9PSExJiZVSShmKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJk5JLnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmci5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1nPT09dm9pZCAwJiZyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIG8mJkIuZm9yRWFjaChyLnRvSlNPTigpLGZ1bmN0aW9uKHUsZCl7by5zZXRSZXF1ZXN0SGVhZGVyKGQsdSl9KSxCLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KG8ud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLGkmJmkhPT0ianNvbiImJihvLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZvLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrSShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm8udXBsb2FkJiZvLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa0koQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGE9Yz0+e28mJihlKCFjfHxjLnR5cGU/bmV3IEoobnVsbCxBLG8pOmMpLG8uYWJvcnQoKSxvPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShhKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YSgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixhKSkpO2xldCBFPUtBKGYpO2lmKEUmJncucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7ZShuZXcgbCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixsLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufW8uc2VuZChnfHxudWxsKX0pfTt2YXIgT0E9e2h0dHA6UUEseGhyOkxJfTtCLmZvckVhY2goT0EsKEEsSSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTpJfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOkl9KX19KTt2YXIgSkk9QT0+YC0gJHtBfWAsRWU9QT0+Qi5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGxBPXtnZXRBZGFwdGVyOkE9PntBPUIuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOkl9PUEsdCxlLGc9e307Zm9yKGxldCByPTA7cjxJO3IrKyl7dD1BW3JdO2xldCBpO2lmKGU9dCwhRWUodCkmJihlPU9BWyhpPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0sZT09PXZvaWQgMCkpdGhyb3cgbmV3IGwoYFVua25vd24gYWRhcHRlciBcJyR7aX1cJ2ApO2lmKGUpYnJlYWs7Z1tpfHwiJTIzIityXT1lfWlmKCFlKXtsZXQgcj1PYmplY3QuZW50cmllcyhnKS5tYXAoKFtzLGFdKT0+YGFkYXB0ZXIgJHtzfSBgKyhhPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksaT1JP3IubGVuZ3RoPjE/YHNpbmNlIDolMEFgK3IubWFwKEpJKS5qb2luKGAlMEFgKToiICIrSkkoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBlfSxhZGFwdGVyczpPQX07ZnVuY3Rpb24gVEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEoobnVsbCxBKX1mdW5jdGlvbiBEQShBKXtyZXR1cm4gVEEoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxsQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Ty5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBUQShBKSxlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlKSxlLmhlYWRlcnM9bS5mcm9tKGUuaGVhZGVycyksZX0sZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl8fChUQShBKSxlJiZlLnJlc3BvbnNlJiYoZS5yZXNwb25zZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZS5yZXNwb25zZSksZS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShlLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoZSl9KX12YXIgSEk9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gRyhBLEkpe0k9SXx8e307bGV0IHQ9e307ZnVuY3Rpb24gZShRLEMsbyl7cmV0dXJuIEIuaXNQbGFpbk9iamVjdChRKSYmQi5pc1BsYWluT2JqZWN0KEMpP0IubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6b30sUSxDKTpCLmlzUGxhaW5PYmplY3QoQyk/Qi5tZXJnZSh7fSxDKTpCLmlzQXJyYXkoQyk/Qy5zbGljZSgpOkN9ZnVuY3Rpb24gZyhRLEMsbyl7aWYoQi5pc1VuZGVmaW5lZChDKSl7aWYoIUIuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEsbyl9ZWxzZSByZXR1cm4gZShRLEMsbyl9ZnVuY3Rpb24gcihRLEMpe2lmKCFCLmlzVW5kZWZpbmVkKEMpKXJldHVybiBlKHZvaWQgMCxDKX1mdW5jdGlvbiBpKFEsQyl7aWYoQi5pc1VuZGVmaW5lZChDKSl7aWYoIUIuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEpfWVsc2UgcmV0dXJuIGUodm9pZCAwLEMpfWZ1bmN0aW9uIHMoUSxDLG8pe2lmKG8gaW4gSSlyZXR1cm4gZShRLEMpO2lmKG8gaW4gQSlyZXR1cm4gZSh2b2lkIDAsUSl9bGV0IGE9e3VybDpyLG1ldGhvZDpyLGRhdGE6cixiYXNlVVJMOmksdHJhbnNmb3JtUmVxdWVzdDppLHRyYW5zZm9ybVJlc3BvbnNlOmkscGFyYW1zU2VyaWFsaXplcjppLHRpbWVvdXQ6aSx0aW1lb3V0TWVzc2FnZTppLHdpdGhDcmVkZW50aWFsczppLHdpdGhYU1JGVG9rZW46aSxhZGFwdGVyOmkscmVzcG9uc2VUeXBlOmkseHNyZkNvb2tpZU5hbWU6aSx4c3JmSGVhZGVyTmFtZTppLG9uVXBsb2FkUHJvZ3Jlc3M6aSxvbkRvd25sb2FkUHJvZ3Jlc3M6aSxkZWNvbXByZXNzOmksbWF4Q29udGVudExlbmd0aDppLG1heEJvZHlMZW5ndGg6aSxiZWZvcmVSZWRpcmVjdDppLHRyYW5zcG9ydDppLGh0dHBBZ2VudDppLGh0dHBzQWdlbnQ6aSxjYW5jZWxUb2tlbjppLHNvY2tldFBhdGg6aSxyZXNwb25zZUVuY29kaW5nOmksdmFsaWRhdGVTdGF0dXM6cyxoZWFkZXJzOihRLEMpPT5nKEhJKFEpLEhJKEMpLCEwKX07cmV0dXJuIEIuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsSSkpLGZ1bmN0aW9uKEMpe2xldCBvPWFbQ118fGcsZj1vKEFbQ10sSVtDXSxDKTtCLmlzVW5kZWZpbmVkKGYpJiZvIT09c3x8KHRbQ109Zil9KSx0fXZhciB1QT0iMS42LjgiO3ZhciB4QT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsSSk9Pnt4QVtBXT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT1BfHwiYSIrKEk8MT8ibiAiOiIgIikrQX19KTt2YXIgWUk9e307eEEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKEksdCxlKXtmdW5jdGlvbiBnKHIsaSl7cmV0dXJuIltBeGlvcyB2Iit1QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIityKyJcJyIraSsoZT8iLiAiK2U6IiIpfXJldHVybihyLGkscyk9PntpZihJPT09ITEpdGhyb3cgbmV3IGwoZyhpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxsLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIVlJW2ldJiYoWUlbaV09ITAsY29uc29sZS53YXJuKGcoaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxJP0kocixpLHMpOiEwfX07ZnVuY3Rpb24gYWUoQSxJLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IGU9T2JqZWN0LmtleXMoQSksZz1lLmxlbmd0aDtmb3IoO2ctLSA+MDspe2xldCByPWVbZ10saT1JW3JdO2lmKGkpe2xldCBzPUFbcl0sYT1zPT09dm9pZCAwfHxpKHMscixBKTtpZihhIT09ITApdGhyb3cgbmV3IGwoIm9wdGlvbiAiK3IrIiBtdXN0IGJlICIrYSxsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IGwoIlVua25vd24gb3B0aW9uICIrcixsLkVSUl9CQURfT1BUSU9OKX19dmFyIGhBPXthc3NlcnRPcHRpb25zOmFlLHZhbGlkYXRvcnM6eEF9O3ZhciBIPWhBLnZhbGlkYXRvcnMseD1jbGFzc3tjb25zdHJ1Y3RvcihJKXt0aGlzLmRlZmF1bHRzPUksdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGtBLHJlc3BvbnNlOm5ldyBrQX19YXN5bmMgcmVxdWVzdChJLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChJLHQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7bGV0IGc7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZz17fSk6Zz1uZXcgRXJyb3I7bGV0IHI9Zy5zdGFjaz9nLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO2Uuc3RhY2s/ciYmIVN0cmluZyhlLnN0YWNrKS5lbmRzV2l0aChyLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoZS5zdGFjays9YCUwQWArcik6ZS5zdGFjaz1yfXRocm93IGV9fV9yZXF1ZXN0KEksdCl7dHlwZW9mIEk9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPUkpOnQ9SXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDplLHBhcmFtc1NlcmlhbGl6ZXI6ZyxoZWFkZXJzOnJ9PXQ7ZSE9PXZvaWQgMCYmaEEuYXNzZXJ0T3B0aW9ucyhlLHtzaWxlbnRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pfSwhMSksZyE9bnVsbCYmKEIuaXNGdW5jdGlvbihnKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpnfTpoQS5hc3NlcnRPcHRpb25zKGcse2VuY29kZTpILmZ1bmN0aW9uLHNlcmlhbGl6ZTpILmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPXImJkIubWVyZ2Uoci5jb21tb24sclt0Lm1ldGhvZF0pO3ImJkIuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIHJbRV19KSx0LmhlYWRlcnM9bS5jb25jYXQoaSxyKTtsZXQgcz1bXSxhPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4odCk9PT0hMXx8KGE9YSYmYy5zeW5jaHJvbm91cyxzLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IFE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtRLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgQyxvPTAsZjtpZighYSl7bGV0IEU9W0RBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUscyksRS5wdXNoLmFwcGx5KEUsUSksZj1FLmxlbmd0aCxDPVByb21pc2UucmVzb2x2ZSh0KTtvPGY7KUM9Qy50aGVuKEVbbysrXSxFW28rK10pO3JldHVybiBDfWY9cy5sZW5ndGg7bGV0IG49dDtmb3Iobz0wO288Zjspe2xldCBFPXNbbysrXSxjPXNbbysrXTt0cnl7bj1FKG4pfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7Qz1EQS5jYWxsKHRoaXMsbil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihvPTAsZj1RLmxlbmd0aDtvPGY7KUM9Qy50aGVuKFFbbysrXSxRW28rK10pO3JldHVybiBDfWdldFVyaShJKXtJPUcodGhpcy5kZWZhdWx0cyxJKTtsZXQgdD0kKEkuYmFzZVVSTCxJLnVybCk7cmV0dXJuIFgodCxJLnBhcmFtcyxJLnBhcmFtc1NlcmlhbGl6ZXIpfX07Qi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihJKXt4LnByb3RvdHlwZVtJXT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlcXVlc3QoRyhlfHx7fSx7bWV0aG9kOkksdXJsOnQsZGF0YTooZXx8e30pLmRhdGF9KSl9fSk7Qi5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oSSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24ocixpLHMpe3JldHVybiB0aGlzLnJlcXVlc3QoRyhzfHx7fSx7bWV0aG9kOkksaGVhZGVyczplP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpyLGRhdGE6aX0pKX19eC5wcm90b3R5cGVbSV09dCgpLHgucHJvdG90eXBlW0krIkZvcm0iXT10KCEwKX0pO3ZhciBBQT14O3ZhciBQQT1jbGFzcyBBe2NvbnN0cnVjdG9yKEkpe2lmKHR5cGVvZiBJIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24ocil7dD1yfSk7bGV0IGU9dGhpczt0aGlzLnByb21pc2UudGhlbihnPT57aWYoIWUuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9ZS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO3ItLSA+MDspZS5fbGlzdGVuZXJzW3JdKGcpO2UuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49Zz0+e2xldCByLGk9bmV3IFByb21pc2Uocz0+e2Uuc3Vic2NyaWJlKHMpLHI9c30pLnRoZW4oZyk7cmV0dXJuIGkuY2FuY2VsPWZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZShyKX0saX0sSShmdW5jdGlvbihyLGkscyl7ZS5yZWFzb258fChlLnJlYXNvbj1uZXcgSihyLGkscyksdChlLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShJKXtpZih0aGlzLnJlYXNvbil7SSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChJKTp0aGlzLl9saXN0ZW5lcnM9W0ldfXVuc3Vic2NyaWJlKEkpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKEkpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgSTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24oZyl7ST1nfSksY2FuY2VsOkl9fX0sYkk9UEE7ZnVuY3Rpb24gakEoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIFdBKEEpe3JldHVybiBCLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBaQT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoWkEpLmZvckVhY2goKFtBLEldKT0+e1pBW0ldPUF9KTt2YXIgTUk9WkE7ZnVuY3Rpb24gcUkoQSl7bGV0IEk9bmV3IEFBKEEpLHQ9VyhBQS5wcm90b3R5cGUucmVxdWVzdCxJKTtyZXR1cm4gQi5leHRlbmQodCxBQS5wcm90b3R5cGUsSSx7YWxsT3duS2V5czohMH0pLEIuZXh0ZW5kKHQsSSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHFJKEcoQSxnKSl9LHR9dmFyIGg9cUkoTyk7aC5BeGlvcz1BQTtoLkNhbmNlbGVkRXJyb3I9SjtoLkNhbmNlbFRva2VuPWJJO2guaXNDYW5jZWw9djtoLlZFUlNJT049dUE7aC50b0Zvcm1EYXRhPUw7aC5BeGlvc0Vycm9yPWw7aC5DYW5jZWw9aC5DYW5jZWxlZEVycm9yO2guYWxsPWZ1bmN0aW9uKEkpe3JldHVybiBQcm9taXNlLmFsbChJKX07aC5zcHJlYWQ9akE7aC5pc0F4aW9zRXJyb3I9V0E7aC5tZXJnZUNvbmZpZz1HO2guQXhpb3NIZWFkZXJzPW07aC5mb3JtVG9KU09OPUE9PmNBKEIuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7aC5nZXRBZGFwdGVyPWxBLmdldEFkYXB0ZXI7aC5IdHRwU3RhdHVzQ29kZT1NSTtoLmRlZmF1bHQ9aDt2YXIgZEE9aDt2YXJ7QXhpb3M6b2ksQXhpb3NFcnJvcjpCaSxDYW5jZWxlZEVycm9yOkNpLGlzQ2FuY2VsOnNpLENhbmNlbFRva2VuOm5pLFZFUlNJT046UWksYWxsOkVpLENhbmNlbDphaSxpc0F4aW9zRXJyb3I6Y2ksc3ByZWFkOmZpLHRvRm9ybURhdGE6bGksQXhpb3NIZWFkZXJzOkRpLEh0dHBTdGF0dXNDb2RlOnVpLGZvcm1Ub0pTT046aGksZ2V0QWRhcHRlcjpkaSxtZXJnZUNvbmZpZzp5aX09ZEE7dmFyIElBLGssWEEsVkE9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXtYQT1uZXcgVWludDhBcnJheShrLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0seUE9Y2xhc3N7aW5pdCgpe3JldHVybiBJQXx8KHR5cGVvZiBmZXRjaDwidSI/SUE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIitLSSkudGhlbihJPT5JLmFycmF5QnVmZmVyKCkpLnRoZW4oST0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoSSxWQSkpLnRoZW4odGhpcy5faW5pdCk6SUE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS0ksImJhc2U2NCIpLFZBKS50aGVuKHRoaXMuX2luaXQpLElBKX1faW5pdChJKXtrPUkuaW5zdGFuY2UsVkEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKEksdD0wKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT1JLmJ5dGVMZW5ndGgsZz1rLmV4cG9ydHMubWFsbG9jKGUpO1hBLnNldChJLGcpLHQ9dHx8TnVtYmVyKGsuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPWsuZXhwb3J0cy5tYWxsb2ModCksaT1rLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsdCxnLGUpLHM9WEEuc2xpY2UocixyK2kpO3JldHVybiBrLmV4cG9ydHMuZnJlZShnKSxrLmV4cG9ydHMuZnJlZShyKSxzfX0sS0k9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT0k9bmV3IHlBLFRJPSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsSSx0KXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHtJfS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KTtUSXx8KGF3YWl0IE9JLmluaXQoKSxUST0hMCk7bGV0IHM9T0kuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6c30pfXZhciB4ST1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLEksdCl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyx4SShlLEksdCkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciBQST1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxwPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sUD11ZTtmdW5jdGlvbiBoZShBLEkpe2xldCB0PW51bGw7c3dpdGNoKEEpe2Nhc2UgcC5VSW50ODp7dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIHAuSW50ODp7dD1uZXcgSW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShJKTticmVha31jYXNlIHAuVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShJKTticmVha31jYXNlIHAuSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIHAuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShJKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgWT1oZTt2YXIgWkk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsakk9bmV3IFRleHRFbmNvZGVyLFdJPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLEkpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKEksdC5mbGFncykscj1BLmZzX3N0YXQoSSkuc2l6ZSxpPW51bGw7Wkk/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6aT1uZXcgQXJyYXlCdWZmZXIocik7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZChlLHMsMCxyLDApLEEuZnNfY2xvc2UoZSksc31mdW5jdGlvbiBWSShBLEksdCl7bGV0IGU9bnVsbDtaST9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTplPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixJLHQpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIHkoQSxJLHQsZSl7bGV0IGc9MDtyZXR1cm4gSSE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZSxJLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KEkuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBqKEEsSSx0KXtsZXQgZT1KU09OLnN0cmluZ2lmeShJKSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBGKEEsSSx0LGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSksaT1WSShBLGcscik7cmV0dXJuIFkoZSxpLmJ1ZmZlcil9ZnVuY3Rpb24gekEoQSxJKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLEldKSxlPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsSSx0LGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEMpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbz1qSS5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgbz1qSS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbz1RLmRhdGEuZGF0YSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbz1RLmRhdGEsZj15KEEsby5kYXRhLEMsMCksbj15KEEsby5kaXJlY3Rpb24sQywxKSxFPXR5cGVvZiBvLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKG8ubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6by5pbWFnZVR5cGUsbmFtZTpvLm5hbWUsb3JpZ2luOm8ub3JpZ2luLHNwYWNpbmc6by5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxzaXplOm8uc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O2ooQSxjLEMpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLmNlbGxzLEMsMSksRT15KEEsby5wb2ludERhdGEsQywyKSxjPXkoQSxvLmNlbGxEYXRhLEMsMyksdT17bWVzaFR5cGU6by5tZXNoVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOm8ubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxjZWxsQnVmZmVyU2l6ZTpvLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6by5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6by5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O2ooQSx1LEMpO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby52ZXJ0aWNlcyxDLDEpLEU9eShBLG8ubGluZXMsQywyKSxjPXkoQSxvLnBvbHlnb25zLEMsMyksdT15KEEsby50cmlhbmdsZVN0cmlwcyxDLDQpLGQ9eShBLG8ucG9pbnREYXRhLEMsNSksUj15KEEsby5wb2ludERhdGEsQyw2KSxOPXtwb2x5RGF0YVR5cGU6by5wb2x5RGF0YVR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOm8udmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGxpbmVzQnVmZmVyU2l6ZTpvLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6by5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOm8udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6by5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2R9YCxudW1iZXJPZkNlbGxQaXhlbHM6by5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtSfWB9O2ooQSxOLEMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBnPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4oSS5zbGljZSgpKX1jYXRjaChRKXt0aHJvdyB0eXBlb2YgUT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShRKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxRfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoZyl9bGV0IGk9QS5nZXRNb2R1bGVTdGRvdXQoKSxzPUEuZ2V0TW9kdWxlU3RkZXJyKCksYT1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmcj09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihRLEMpe2xldCBvPW51bGw7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPXtkYXRhOldJLmRlY29kZShjKX07YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz1KU09OLnBhcnNlKFdJLmRlY29kZShjKSk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKTtvPXtkYXRhOlZJKEEsbixFKX07YnJlYWt9Y2FzZSBELlRleHRGaWxlOntvPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShRLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntvPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6ZGUoQSxRLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG49ekEoQSxDKTtuLmRhdGE9RihBLEMsMCxuLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxuLmRpcmVjdGlvbj1GKEEsQywxLFAuRmxvYXQ2NCksbi5tZXRhZGF0YT1uZXcgTWFwKG4ubWV0YWRhdGEpLG89bjticmVha31jYXNlIEQuTWVzaDp7bGV0IG49ekEoQSxDKTtuLm51bWJlck9mUG9pbnRzPjA/bi5wb2ludHM9RihBLEMsMCxuLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bi5wb2ludHM9WShuLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxscz4wP24uY2VsbHM9RihBLEMsMSxuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpuLmNlbGxzPVkobi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZQb2ludFBpeGVscz4wP24ucG9pbnREYXRhPUYoQSxDLDIsbi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDMsbi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpuLmNlbGxEYXRhPVkobi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IG49ekEoQSxDKTtuLm51bWJlck9mUG9pbnRzPjA/bi5wb2ludHM9RihBLEMsMCxQLkZsb2F0MzIpOm4ucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksbi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9uLnZlcnRpY2VzPUYoQSxDLDEscC5VSW50MzIpOm4udmVydGljZXM9bmV3IFVpbnQzMkFycmF5LG4ubGluZXNCdWZmZXJTaXplPjA/bi5saW5lcz1GKEEsQywyLHAuVUludDMyKTpuLmxpbmVzPW5ldyBVaW50MzJBcnJheSxuLnBvbHlnb25zQnVmZmVyU2l6ZT4wP24ucG9seWdvbnM9RihBLEMsMyxwLlVJbnQzMik6bi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksbi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9uLnRyaWFuZ2xlU3RyaXBzPUYoQSxDLDQscC5VSW50MzIpOm4udHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LG4ubnVtYmVyT2ZQb2ludFBpeGVscz4wP24ucG9pbnREYXRhPUYoQSxDLDUsbi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsNixuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpuLmNlbGxEYXRhPVkobi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOm99O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDppLHN0ZGVycjpzLG91dHB1dHM6YX19dmFyIFhJPXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSxJKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLEkpO2chPT1udWxsJiZ0LnB1c2goZyl9cmV0dXJuIHR9ZnVuY3Rpb24gcGUoQSxJKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSx3ZSYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ST90OnQuc2xpY2UoMCl9dmFyIHpJPW1lO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfST1GZTtmdW5jdGlvbiBTZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdkk9U2U7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICRJPVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsSSx0LGUpe2xldCBnPVhJKEEsSSx0LGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKGkudHlwZT09PUQuQmluYXJ5U3RyZWFtfHxpLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBzPWkuZGF0YTtyLnB1c2gocyl9ZWxzZSBpZihpLnR5cGU9PT1ELkltYWdlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLl9JKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuTWVzaCl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi52SShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLiRJKHMpKX19KSxGQShnLHpJKHIsITApKX12YXIgQXQ9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLEksdCxlLGcscil7bGV0IGk9YXdhaXQgUEkoQSxJLHIpO3JldHVybiBhd2FpdCBBdChpLHQsZSxnKX19O29BKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO0J0KGx0KTtleHBvcnR7bm4gYXMgZG93bnNhbXBsZSxYciBhcyBkb3duc2FtcGxlQmluU2hyaW5rLEFuIGFzIGRvd25zYW1wbGVMYWJlbEltYWdlLHRuIGFzIGRvd25zYW1wbGVTaWdtYSxhbiBhcyBnYXVzc2lhbktlcm5lbFJhZGl1cyxMIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsUiBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxHIGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsSXMgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixCdCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCx0cyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLFJBIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" +default_js_module = """data:text/javascript;base64,dmFyIFF0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgY3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlRdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjQuMSIsUkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRD1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBELlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFQ9ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGY9bXQ7dmFyIG9lPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGh0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFVBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxGQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksc0E9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGFlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHl0PXtjYW5IYW5kbGU6QT0+YWUoQSkmJkFbb2VdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIEllKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxOQShBKX19LHd0PXtjYW5IYW5kbGU6QT0+YWUoQSkmJnNBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxzZT1uZXcgTWFwKFtbInByb3h5Iix5dF0sWyJ0aHJvdyIsd3RdXSk7ZnVuY3Rpb24gRHQoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEllKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIUR0KHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpvLHBhdGg6Z309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxsPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEgpLEM7dHJ5e2xldCBJPWcuc2xpY2UoMCwtMSkucmVkdWNlKChRLEIpPT5RW0JdLEEpLGE9Zy5yZWR1Y2UoKFEsQik9PlFbQl0sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpDPWE7YnJlYWs7Y2FzZSJTRVQiOklbZy5zbGljZSgtMSlbMF1dPUgobi5kYXRhLnZhbHVlKSxDPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOkM9YS5hcHBseShJLGwpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IFE9bmV3IGEoLi4ubCk7Qz1idChRKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOlEscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO0llKEEsQiksQz1HQShRLFtRXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpDPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goSSl7Qz17dmFsdWU6SSxbc0FdOjB9fVByb21pc2UucmVzb2x2ZShDKS5jYXRjaChJPT4oe3ZhbHVlOkksW3NBXTowfSkpLnRoZW4oST0+e2xldFthLFFdPUJBKEkpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDppfSksUSksbz09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZ2UoZSksRkEgaW4gQSYmdHlwZW9mIEFbRkFdPT0iZnVuY3Rpb24iJiZBW0ZBXSgpKX0pLmNhdGNoKEk9PntsZXRbYSxRXT1CQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW3NBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxRKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIFN0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGdlKEEpe1N0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gTkEoQSxlKXtyZXR1cm4gYkEoQSxbXSxlKX1mdW5jdGlvbiBhQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIFkoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57Z2UoQSl9KX12YXIgSUE9bmV3IFdlYWtNYXAsZ0E9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KElBLmdldChBKXx8MCktMTtJQS5zZXQoQSxlKSxlPT09MCYmQmUoQSl9KTtmdW5jdGlvbiBrdChBLGUpe2xldCB0PShJQS5nZXQoZSl8fDApKzE7SUEuc2V0KGUsdCksZ0EmJmdBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBSdChBKXtnQSYmZ0EudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBiQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChpLG8pe2lmKGFBKHIpLG89PT1VQSlyZXR1cm4oKT0+e1J0KG4pLEJlKEEpLHI9ITB9O2lmKG89PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IGc9WShBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKX0pLnRoZW4oSCk7cmV0dXJuIGcudGhlbi5iaW5kKGcpfXJldHVybiBiQShBLFsuLi5lLG9dKX0sc2V0KGksbyxnKXthQShyKTtsZXRbbCxDXT1CQShnKTtyZXR1cm4gWShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsb10ubWFwKEk9PkkudG9TdHJpbmcoKSksdmFsdWU6bH0sQykudGhlbihIKX0sYXBwbHkoaSxvLGcpe2FBKHIpO2xldCBsPWVbZS5sZW5ndGgtMV07aWYobD09PWh0KXJldHVybiBZKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oSCk7aWYobD09PSJiaW5kIilyZXR1cm4gYkEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbQyxJXT1pZShnKTtyZXR1cm4gWShBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxJKS50aGVuKEgpfSxjb25zdHJ1Y3QoaSxvKXthQShyKTtsZXRbZyxsXT1pZShvKTtyZXR1cm4gWShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAoQz0+Qy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Z30sbCkudGhlbihIKX19KTtyZXR1cm4ga3QobixBKSxufWZ1bmN0aW9uIEZ0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGllKEEpe2xldCBlPUEubWFwKEJBKTtyZXR1cm5bZS5tYXAodD0+dFswXSksRnQoZS5tYXAodD0+dFsxXSkpXX12YXIgQ2U9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gR0EoQSxlKXtyZXR1cm4gQ2Uuc2V0KEEsZSksQX1mdW5jdGlvbiBidChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbb2VdOiEwfSl9ZnVuY3Rpb24gQkEoQSl7Zm9yKGxldFtlLHRdb2Ygc2UpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxDZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBIKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHNlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gWShBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj1VdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiBVdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gWihBLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KGUsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOk50fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpUQX09T2JqZWN0LGxBPShBPT5lPT57bGV0IHQ9TnQuY2FsbChlKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLE49QT0+KEE9QS50b0xvd2VyQ2FzZSgpLGU9PmxBKGUpPT09QSksRUE9QT0+ZT0+dHlwZW9mIGU9PT1BLHtpc0FycmF5OnF9PUFycmF5LFg9RUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIEd0KEEpe3JldHVybiBBIT09bnVsbCYmIVgoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWChBLmNvbnN0cnVjdG9yKSYmayhBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgY2U9TigiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBMdChBKXtsZXQgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOmU9QSYmQS5idWZmZXImJmNlKEEuYnVmZmVyKSxlfXZhciBPdD1FQSgic3RyaW5nIiksaz1FQSgiZnVuY3Rpb24iKSx1ZT1FQSgibnVtYmVyIiksUUE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixUdD1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYobEEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgZT1UQShBKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxQdD1OKCJEYXRlIikseHQ9TigiRmlsZSIpLEp0PU4oIkJsb2IiKSxIdD1OKCJGaWxlTGlzdCIpLE10PUE9PlFBKEEpJiZrKEEucGlwZSksWXQ9QT0+e2xldCBlO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fGsoQS5hcHBlbmQpJiYoKGU9bEEoQSkpPT09ImZvcm1kYXRhInx8ZT09PSJvYmplY3QiJiZrKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHF0PU4oIlVSTFNlYXJjaFBhcmFtcyIpLEt0PUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiAkKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89aS5sZW5ndGgsZztmb3Iocj0wO3I8bztyKyspZz1pW3JdLGUuY2FsbChudWxsLEFbZ10sZyxBKX19ZnVuY3Rpb24gZmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBwZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLGRlPUE9PiFYKEEpJiZBIT09cGU7ZnVuY3Rpb24gT0EoKXtsZXR7Y2FzZWxlc3M6QX09ZGUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBpPUEmJmZlKGUsbil8fG47Q0EoZVtpXSkmJkNBKHIpP2VbaV09T0EoZVtpXSxyKTpDQShyKT9lW2ldPU9BKHt9LHIpOnEocik/ZVtpXT1yLnNsaWNlKCk6ZVtpXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJiQoYXJndW1lbnRzW3JdLHQpO3JldHVybiBlfXZhciBXdD0oQSxlLHQse2FsbE93bktleXM6cn09e30pPT4oJChlLChuLGkpPT57dCYmayhuKT9BW2ldPVoobix0KTpBW2ldPW59LHthbGxPd25LZXlzOnJ9KSxBKSxqdD1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLHZ0PShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LF90PShBLGUsdCxyKT0+e2xldCBuLGksbyxnPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxpPW4ubGVuZ3RoO2ktLSA+MDspbz1uW2ldLCghcnx8cihvLEEsZSkpJiYhZ1tvXSYmKGVbb109QVtvXSxnW29dPSEwKTtBPXQhPT0hMSYmVEEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LHp0PShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sVnQ9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHEoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIXVlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxadD0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVEEoVWludDhBcnJheSkpLFh0PShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IGk9bi52YWx1ZTtlLmNhbGwoQSxpWzBdLGlbMV0pfX0sJHQ9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sQXI9TigiSFRNTEZvcm1FbGVtZW50IiksZXI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLEVlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSx0cj1OKCJSZWdFeHAiKSxtZT0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307JCh0LChuLGkpPT57bGV0IG87KG89ZShuLGksQSkpIT09ITEmJihyW2ldPW98fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0scnI9QT0+e21lKEEsKGUsdCk9PntpZihrKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKGsocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0sbnI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0saXI9KCk9Pnt9LG9yPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxMQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFFlPSIwMTIzNDU2Nzg5IixoZT17RElHSVQ6UWUsQUxQSEE6TEEsQUxQSEFfRElHSVQ6TEErTEEudG9VcHBlckNhc2UoKStRZX0sYXI9KEE9MTYsZT1oZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBzcihBKXtyZXR1cm4hIShBJiZrKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgSXI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKFFBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBpPXEocik/W106e307cmV0dXJuICQociwobyxnKT0+e2xldCBsPXQobyxuKzEpOyFYKGwpJiYoaVtnXT1sKX0pLGVbbl09dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChBLDApfSxncj1OKCJBc3luY0Z1bmN0aW9uIiksQnI9QT0+QSYmKFFBKEEpfHxrKEEpKSYmayhBLnRoZW4pJiZrKEEuY2F0Y2gpLHM9e2lzQXJyYXk6cSxpc0FycmF5QnVmZmVyOmNlLGlzQnVmZmVyOkd0LGlzRm9ybURhdGE6WXQsaXNBcnJheUJ1ZmZlclZpZXc6THQsaXNTdHJpbmc6T3QsaXNOdW1iZXI6dWUsaXNCb29sZWFuOlR0LGlzT2JqZWN0OlFBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6WCxpc0RhdGU6UHQsaXNGaWxlOnh0LGlzQmxvYjpKdCxpc1JlZ0V4cDp0cixpc0Z1bmN0aW9uOmssaXNTdHJlYW06TXQsaXNVUkxTZWFyY2hQYXJhbXM6cXQsaXNUeXBlZEFycmF5Olp0LGlzRmlsZUxpc3Q6SHQsZm9yRWFjaDokLG1lcmdlOk9BLGV4dGVuZDpXdCx0cmltOkt0LHN0cmlwQk9NOmp0LGluaGVyaXRzOnZ0LHRvRmxhdE9iamVjdDpfdCxraW5kT2Y6bEEsa2luZE9mVGVzdDpOLGVuZHNXaXRoOnp0LHRvQXJyYXk6VnQsZm9yRWFjaEVudHJ5Olh0LG1hdGNoQWxsOiR0LGlzSFRNTEZvcm06QXIsaGFzT3duUHJvcGVydHk6RWUsaGFzT3duUHJvcDpFZSxyZWR1Y2VEZXNjcmlwdG9yczptZSxmcmVlemVNZXRob2RzOnJyLHRvT2JqZWN0U2V0Om5yLHRvQ2FtZWxDYXNlOmVyLG5vb3A6aXIsdG9GaW5pdGVOdW1iZXI6b3IsZmluZEtleTpmZSxnbG9iYWw6cGUsaXNDb250ZXh0RGVmaW5lZDpkZSxBTFBIQUJFVDpoZSxnZW5lcmF0ZVN0cmluZzphcixpc1NwZWNDb21wbGlhbnRGb3JtOnNyLHRvSlNPTk9iamVjdDpJcixpc0FzeW5jRm46Z3IsaXNUaGVuYWJsZTpCcn07ZnVuY3Rpb24gSyhBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1zLmluaGVyaXRzKEssRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciB5ZT1LLnByb3RvdHlwZSx3ZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9Pnt3ZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLHdlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Sy5mcm9tPShBLGUsdCxyLG4saSk9PntsZXQgbz1PYmplY3QuY3JlYXRlKHllKTtyZXR1cm4gcy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGwpe3JldHVybiBsIT09RXJyb3IucHJvdG90eXBlfSxnPT5nIT09ImlzQXhpb3NFcnJvciIpLEsuY2FsbChvLEEubWVzc2FnZSxlLHQscixuKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxpJiZPYmplY3QuYXNzaWduKG8saSksb307dmFyIHA9Szt2YXIgY0E9bnVsbDtmdW5jdGlvbiBQQShBKXtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KEEpfHxzLmlzQXJyYXkoQSl9ZnVuY3Rpb24gU2UoQSl7cmV0dXJuIHMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gRGUoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLGkpe3JldHVybiBuPVNlKG4pLCF0JiZpPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBDcihBKXtyZXR1cm4gcy5pc0FycmF5KEEpJiYhQS5zb21lKFBBKX12YXIgbHI9cy50b0ZsYXRPYmplY3Qocyx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIEVyKEEsZSx0KXtpZighcy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhjQXx8Rm9ybURhdGEpLHQ9cy50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIXMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fEksaT10LmRvdHMsbz10LmluZGV4ZXMsbD0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZzLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIXMuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIEMoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYocy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighbCYmcy5pc0Jsb2IoRSkpdGhyb3cgbmV3IHAoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIHMuaXNBcnJheUJ1ZmZlcihFKXx8cy5pc1R5cGVkQXJyYXkoRSk/bCYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEkoRSxjLHUpe2xldCBkPUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYocy5lbmRzV2l0aChjLCJ7fSIpKWM9cj9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKHMuaXNBcnJheShFKSYmQ3IoRSl8fChzLmlzRmlsZUxpc3QoRSl8fHMuZW5kc1dpdGgoYywiW10iKSkmJihkPXMudG9BcnJheShFKSkpcmV0dXJuIGM9U2UoYyksZC5mb3JFYWNoKGZ1bmN0aW9uKFUsRXQpeyEocy5pc1VuZGVmaW5lZChVKXx8VT09PW51bGwpJiZlLmFwcGVuZChvPT09ITA/RGUoW2NdLEV0LGkpOm89PT1udWxsP2M6YysiW10iLEMoVSkpfSksITF9cmV0dXJuIFBBKEUpPyEwOihlLmFwcGVuZChEZSh1LGMsaSksQyhFKSksITEpfWxldCBhPVtdLFE9T2JqZWN0LmFzc2lnbihscix7ZGVmYXVsdFZpc2l0b3I6SSxjb252ZXJ0VmFsdWU6Qyxpc1Zpc2l0YWJsZTpQQX0pO2Z1bmN0aW9uIEIoRSxjKXtpZighcy5pc1VuZGVmaW5lZChFKSl7aWYoYS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTthLnB1c2goRSkscy5mb3JFYWNoKEUsZnVuY3Rpb24oZCxiKXsoIShzLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJm4uY2FsbChlLGQscy5pc1N0cmluZyhiKT9iLnRyaW0oKTpiLGMsUSkpPT09ITAmJkIoZCxjP2MuY29uY2F0KGIpOltiXSl9KSxhLnBvcCgpfX1pZighcy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEIoQSksZX12YXIgUD1FcjtmdW5jdGlvbiBrZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIFJlKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmUChBLHRoaXMsZSl9dmFyIEZlPVJlLnByb3RvdHlwZTtGZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07RmUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscixrZSl9OmtlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciB1QT1SZTtmdW5jdGlvbiBRcihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBBQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fFFyLG49dCYmdC5zZXJpYWxpemUsaTtpZihuP2k9bihlLHQpOmk9cy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IHVBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIHhBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtzLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sSkE9eEE7dmFyIGZBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgYmU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnVBO3ZhciBVZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIE5lPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIEdlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmJlLEZvcm1EYXRhOlVlLEJsb2I6TmV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSEE9e307Y3QoSEEse2hhc0Jyb3dzZXJFbnY6KCk9PkxlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+Y3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT51cn0pO3ZhciBMZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixjcj0oQT0+TGUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx1cj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHk9ey4uLkhBLC4uLkdlfTtmdW5jdGlvbiBNQShBLGUpe3JldHVybiBQKEEsbmV3IHkuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixpKXtyZXR1cm4geS5pc05vZGUmJnMuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBmcihBKXtyZXR1cm4gcy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIHByKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG47cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gZHIoQSl7ZnVuY3Rpb24gZSh0LHIsbixpKXtsZXQgbz10W2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBnPU51bWJlci5pc0Zpbml0ZSgrbyksbD1pPj10Lmxlbmd0aDtyZXR1cm4gbz0hbyYmcy5pc0FycmF5KG4pP24ubGVuZ3RoOm8sbD8ocy5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSxyXTpuW29dPXIsIWcpOigoIW5bb118fCFzLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUodCxyLG5bb10saSkmJnMuaXNBcnJheShuW29dKSYmKG5bb109cHIobltvXSkpLCFnKX1pZihzLmlzRm9ybURhdGEoQSkmJnMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gcy5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoZnIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgcEE9ZHI7ZnVuY3Rpb24gbXIoQSxlLHQpe2lmKHMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxzLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6ZkEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPXMuaXNPYmplY3QoZSk7aWYoaSYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShwQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKSlyZXR1cm4gZTtpZihzLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihzLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgZztpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBNQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGc9cy5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gUChnP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxtcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJnMuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChnKXtpZihvKXRocm93IGcubmFtZT09PSJTeW50YXhFcnJvciI/cC5mcm9tKGcscC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpnfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6eS5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6eS5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFc9WUE7dmFyIGhyPXMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksT2U9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJmhyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIFRlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gZUEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6cy5pc0FycmF5KEEpP0EubWFwKGRBKTpTdHJpbmcoQSl9ZnVuY3Rpb24geXIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIHdyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIHFBKEEsZSx0LHIsbil7aWYocy5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhcy5pc1N0cmluZyhlKSl7aWYocy5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYocy5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBEcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBTcihBLGUpe2xldCB0PXMudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBqPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBpKGcsbCxDKXtsZXQgST1lQShsKTtpZighSSl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9cy5maW5kS2V5KG4sSSk7KCFhfHxuW2FdPT09dm9pZCAwfHxDPT09ITB8fEM9PT12b2lkIDAmJm5bYV0hPT0hMSkmJihuW2F8fGxdPWRBKGcpKX1sZXQgbz0oZyxsKT0+cy5mb3JFYWNoKGcsKEMsSSk9PmkoQyxJLGwpKTtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKGUsdCk6cy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhd3IoZSk/byhPZShlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9cy5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIHlyKG4pO2lmKHMuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihzLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9cy5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxxQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89ZUEobyksbyl7bGV0IGc9cy5maW5kS2V5KHIsbyk7ZyYmKCF0fHxxQShyLHJbZ10sZyx0KSkmJihkZWxldGUgcltnXSxuPSEwKX19cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxxQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBzLmZvckVhY2godGhpcywobixpKT0+e2xldCBvPXMuZmluZEtleShyLGkpO2lmKG8pe3Rbb109ZEEobiksZGVsZXRlIHRbaV07cmV0dXJufWxldCBnPWU/RHIoaSk6U3RyaW5nKGkpLnRyaW0oKTtnIT09aSYmZGVsZXRlIHRbaV0sdFtnXT1kQShuKSxyW2ddPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZzLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbVGVdPXRoaXNbVGVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG8pe2xldCBnPWVBKG8pO3JbZ118fChTcihuLG8pLHJbZ109ITApfXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O2ouYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO3MucmVkdWNlRGVzY3JpcHRvcnMoai5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7cy5mcmVlemVNZXRob2RzKGopO3ZhciB3PWo7ZnVuY3Rpb24gdEEoQSxlKXtsZXQgdD10aGlzfHxXLHI9ZXx8dCxuPXcuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBzLmZvckVhY2goQSxmdW5jdGlvbihnKXtpPWcuY2FsbCh0LGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBQZShBLGUsdCl7cC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixwLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9cy5pbmhlcml0cyhQZSxwLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9UGU7ZnVuY3Rpb24gS0EoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgcCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFtwLkVSUl9CQURfUkVRVUVTVCxwLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciB4ZT15Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO3MuaXNOdW1iZXIodCkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLHMuaXNTdHJpbmcocikmJm8ucHVzaCgicGF0aD0iK3IpLHMuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBXQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIGpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBuQShBLGUpe3JldHVybiBBJiYhV0EoZSk/akEoQSxlKTplfXZhciBKZT15Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IGc9cy5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIGcucHJvdG9jb2w9PT1yLnByb3RvY29sJiZnLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIHZBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBrcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBDPURhdGUubm93KCksST1yW2ldO298fChvPUMpLHRbbl09bCxyW25dPUM7bGV0IGE9aSxRPTA7Zm9yKDthIT09bjspUSs9dFthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksQy1vPGUpcmV0dXJuO2xldCBCPUkmJkMtSTtyZXR1cm4gQj9NYXRoLnJvdW5kKFEqMWUzL0IpOnZvaWQgMH19dmFyIEhlPWtyO2Z1bmN0aW9uIE1lKEEsZSl7bGV0IHQ9MCxyPUhlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxnPWktdCxsPXIoZyksQz1pPD1vO3Q9aTtsZXQgST17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6ZyxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmbyYmQz8oby1pKS9sOnZvaWQgMCxldmVudDpufTtJW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShJKX19dmFyIFJyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWWU9UnImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxpPXcuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOmd9PUEsbDtmdW5jdGlvbiBDKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBJO2lmKHMuaXNGb3JtRGF0YShuKSl7aWYoeS5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHkuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEk9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1JP0kuc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgUT1uQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEFBKFEsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBCKCl7aWYoIWEpcmV0dXJuO2xldCBjPXcuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGQ9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6YX07S0EoZnVuY3Rpb24oVSl7dChVKSxDKCl9LGZ1bmN0aW9uKFUpe3IoVSksQygpfSxkKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPUI6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KEIpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgcCgiUmVxdWVzdCBhYm9ydGVkIixwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBwKCJOZXR3b3JrIEVycm9yIixwLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsZD1BLnRyYW5zaXRpb25hbHx8ZkE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IHAodSxkLmNsYXJpZnlUaW1lb3V0RXJyb3I/cC5FVElNRURPVVQ6cC5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSx5Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKGcmJnMuaXNGdW5jdGlvbihnKSYmKGc9ZyhBKSksZ3x8ZyE9PSExJiZKZShRKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnhlLnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJnMuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKHUsZCl7YS5zZXRSZXF1ZXN0SGVhZGVyKGQsdSl9KSxzLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsTWUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGw9Yz0+e2EmJihyKCFjfHxjLnR5cGU/bmV3IHgobnVsbCxBLGEpOmMpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShsKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/bCgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixsKSkpO2xldCBFPXZBKFEpO2lmKEUmJnkucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7cihuZXcgcCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixwLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgX0E9e2h0dHA6Y0EseGhyOlllfTtzLmZvckVhY2goX0EsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgcWU9QT0+YC0gJHtBfWAsRnI9QT0+cy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLG1BPXtnZXRBZGFwdGVyOkE9PntBPXMuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBvO2lmKHI9dCwhRnIodCkmJihyPV9BWyhvPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IHAoYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZihyKWJyZWFrO25bb3x8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2csbF0pPT5gYWRhcHRlciAke2d9IGArKGw9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKHFlKS5qb2luKGAKYCk6IiAiK3FlKGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHAoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6X0F9O2Z1bmN0aW9uIHpBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24gaEEoQSl7cmV0dXJuIHpBKEEpLEEuaGVhZGVycz13LmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9dEEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLG1BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxXLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHpBKEEpLHIuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9dy5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIHJBKHIpfHwoekEoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9dy5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBLZT1BPT5BIGluc3RhbmNlb2Ygdz97Li4uQX06QTtmdW5jdGlvbiBPKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKEMsSSxhKXtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KEMpJiZzLmlzUGxhaW5PYmplY3QoSSk/cy5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxDLEkpOnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlKHt9LEkpOnMuaXNBcnJheShJKT9JLnNsaWNlKCk6SX1mdW5jdGlvbiBuKEMsSSxhKXtpZihzLmlzVW5kZWZpbmVkKEkpKXtpZighcy5pc1VuZGVmaW5lZChDKSlyZXR1cm4gcih2b2lkIDAsQyxhKX1lbHNlIHJldHVybiByKEMsSSxhKX1mdW5jdGlvbiBpKEMsSSl7aWYoIXMuaXNVbmRlZmluZWQoSSkpcmV0dXJuIHIodm9pZCAwLEkpfWZ1bmN0aW9uIG8oQyxJKXtpZihzLmlzVW5kZWZpbmVkKEkpKXtpZighcy5pc1VuZGVmaW5lZChDKSlyZXR1cm4gcih2b2lkIDAsQyl9ZWxzZSByZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gZyhDLEksYSl7aWYoYSBpbiBlKXJldHVybiByKEMsSSk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCxDKX1sZXQgbD17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpnLGhlYWRlcnM6KEMsSSk9Pm4oS2UoQyksS2UoSSksITApfTtyZXR1cm4gcy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24oSSl7bGV0IGE9bFtJXXx8bixRPWEoQVtJXSxlW0ldLEkpO3MuaXNVbmRlZmluZWQoUSkmJmEhPT1nfHwodFtJXT1RKX0pLHR9dmFyIHlBPSIxLjYuOCI7dmFyIFZBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e1ZBW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBXZT17fTtWQS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3lBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihpLG8sZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IHAobihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxwLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIVdlW29dJiYoV2Vbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLGcpOiEwfX07ZnVuY3Rpb24gYnIoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgcCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIscC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXJbbl0sbz1lW2ldO2lmKG8pe2xldCBnPUFbaV0sbD1nPT09dm9pZCAwfHxvKGcsaSxBKTtpZihsIT09ITApdGhyb3cgbmV3IHAoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrbCxwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IHAoIlVua25vd24gb3B0aW9uICIraSxwLkVSUl9CQURfT1BUSU9OKX19dmFyIHdBPXthc3NlcnRPcHRpb25zOmJyLHZhbGlkYXRvcnM6VkF9O3ZhciBKPXdBLnZhbGlkYXRvcnMsdj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEpBLHJlc3BvbnNlOm5ldyBKQX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9Tyh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT10O3IhPT12b2lkIDAmJndBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKX0sITEpLG4hPW51bGwmJihzLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06d0EuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6Si5mdW5jdGlvbixzZXJpYWxpemU6Si5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZzLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBpW0VdfSksdC5oZWFkZXJzPXcuY29uY2F0KG8saSk7bGV0IGc9W10sbD0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChsPWwmJmMuc3luY2hyb25vdXMsZy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBDPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7Qy5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEksYT0wLFE7aWYoIWwpe2xldCBFPVtoQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLGcpLEUucHVzaC5hcHBseShFLEMpLFE9RS5sZW5ndGgsST1Qcm9taXNlLnJlc29sdmUodCk7YTxROylJPUkudGhlbihFW2ErK10sRVthKytdKTtyZXR1cm4gSX1RPWcubGVuZ3RoO2xldCBCPXQ7Zm9yKGE9MDthPFE7KXtsZXQgRT1nW2ErK10sYz1nW2ErK107dHJ5e0I9RShCKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0k9aEEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoYT0wLFE9Qy5sZW5ndGg7YTxROylJPUkudGhlbihDW2ErK10sQ1thKytdKTtyZXR1cm4gSX1nZXRVcmkoZSl7ZT1PKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gQUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXt2LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTyhyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7cy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxvLGcpe3JldHVybiB0aGlzLnJlcXVlc3QoTyhnfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6b30pKX19di5wcm90b3R5cGVbZV09dCgpLHYucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBpQT12O3ZhciBaQT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBpLG89bmV3IFByb21pc2UoZz0+e3Iuc3Vic2NyaWJlKGcpLGk9Z30pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sb30sZShmdW5jdGlvbihpLG8sZyl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgeChpLG8sZyksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0samU9WkE7ZnVuY3Rpb24gWEEoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uICRBKEEpe3JldHVybiBzLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBBZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQWUpLmZvckVhY2goKFtBLGVdKT0+e0FlW2VdPUF9KTt2YXIgdmU9QWU7ZnVuY3Rpb24gX2UoQSl7bGV0IGU9bmV3IGlBKEEpLHQ9WihpQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gcy5leHRlbmQodCxpQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLHMuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIF9lKE8oQSxuKSl9LHR9dmFyIG09X2UoVyk7bS5BeGlvcz1pQTttLkNhbmNlbGVkRXJyb3I9eDttLkNhbmNlbFRva2VuPWplO20uaXNDYW5jZWw9ckE7bS5WRVJTSU9OPXlBO20udG9Gb3JtRGF0YT1QO20uQXhpb3NFcnJvcj1wO20uQ2FuY2VsPW0uQ2FuY2VsZWRFcnJvcjttLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O20uc3ByZWFkPVhBO20uaXNBeGlvc0Vycm9yPSRBO20ubWVyZ2VDb25maWc9TzttLkF4aW9zSGVhZGVycz13O20uZm9ybVRvSlNPTj1BPT5wQShzLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO20uZ2V0QWRhcHRlcj1tQS5nZXRBZGFwdGVyO20uSHR0cFN0YXR1c0NvZGU9dmU7bS5kZWZhdWx0PW07dmFyIF89bTt2YXJ7QXhpb3M6Wm8sQXhpb3NFcnJvcjpYbyxDYW5jZWxlZEVycm9yOiRvLGlzQ2FuY2VsOkFhLENhbmNlbFRva2VuOmVhLFZFUlNJT046dGEsYWxsOnJhLENhbmNlbDpuYSxpc0F4aW9zRXJyb3I6aWEsc3ByZWFkOm9hLHRvRm9ybURhdGE6YWEsQXhpb3NIZWFkZXJzOnNhLEh0dHBTdGF0dXNDb2RlOklhLGZvcm1Ub0pTT046Z2EsZ2V0QWRhcHRlcjpCYSxtZXJnZUNvbmZpZzpDYX09Xzthc3luYyBmdW5jdGlvbiBVcihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgXy5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBvQT1VcjtmdW5jdGlvbiB6ZShBKXtsZXQgZT1OQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W1VBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIE5yKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgaT1BO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTp6ZShBKX1sZXQgbj1hd2FpdCBvQShlLHQpO3JldHVybiB6ZShuKX12YXIgVmU9TnI7YXN5bmMgZnVuY3Rpb24gR3IoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLG89KGF3YWl0IF8uZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om99KX12YXIgWmU9R3I7dmFyIFhlPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBldD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIiwkZT1uZXcgVGV4dEVuY29kZXIsQXQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIExyKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxpPUEuZnNfc3RhdChlKS5zaXplLG89bnVsbDtldD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpvPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgZz1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKHIsZywwLGksMCksQS5mc19jbG9zZShyKSxnfWZ1bmN0aW9uIHR0KEEsZSx0KXtsZXQgcj1udWxsO2V0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KGkpLG59ZnVuY3Rpb24gaChBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIHooQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixpLG4pfWZ1bmN0aW9uIFMoQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPXR0KEEsbixpKTtyZXR1cm4gVChyLG8uYnVmZmVyKX1mdW5jdGlvbiBlZShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gT3IoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7c3dpdGNoKEMudHlwZSl7Y2FzZSBmLlRleHRTdHJlYW06e2xldCBhPSRlLmVuY29kZShDLmRhdGEuZGF0YSksUT1oKEEsYSxJLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTt6KEEsQixJKTticmVha31jYXNlIGYuSnNvbkNvbXBhdGlibGU6e2xldCBhPSRlLmVuY29kZShKU09OLnN0cmluZ2lmeShDLmRhdGEpKSxRPWgoQSxhLEksMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O3ooQSxCLEkpO2JyZWFrfWNhc2UgZi5CaW5hcnlTdHJlYW06e2xldCBhPUMuZGF0YS5kYXRhLFE9aChBLGEsSSwwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07eihBLEIsSSk7YnJlYWt9Y2FzZSBmLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShDLmRhdGEucGF0aCxDLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBmLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIGYuSW1hZ2U6e2xldCBhPUMuZGF0YSxRPWgoQSxhLmRhdGEsSSwwKSxCPWgoQSxhLmRpcmVjdGlvbixJLDEpLEU9dHlwZW9mIGEubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oYS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTphLmltYWdlVHlwZSxuYW1lOmEubmFtZSxvcmlnaW46YS5vcmlnaW4sc3BhY2luZzphLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6YS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbWV0YWRhdGE6RX07eihBLGMsSSk7YnJlYWt9Y2FzZSBmLk1lc2g6e2xldCBhPUMuZGF0YSxRPWgoQSxhLnBvaW50cyxJLDApLEI9aChBLGEuY2VsbHMsSSwxKSxFPWgoQSxhLnBvaW50RGF0YSxJLDIpLGM9aChBLGEuY2VsbERhdGEsSSwzKSx1PXttZXNoVHlwZTphLm1lc2hUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mQ2VsbHM6YS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOmEuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07eihBLHUsSSk7YnJlYWt9Y2FzZSBmLlBvbHlEYXRhOntsZXQgYT1DLmRhdGEsUT1oKEEsYS5wb2ludHMsSSwwKSxCPWgoQSxhLnZlcnRpY2VzLEksMSksRT1oKEEsYS5saW5lcyxJLDIpLGM9aChBLGEucG9seWdvbnMsSSwzKSx1PWgoQSxhLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEsYS5wb2ludERhdGEsSSw1KSxiPWgoQSxhLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTphLnBvbHlEYXRhVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6YS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOmEubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTphLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6YS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2J9YH07eihBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxpPTA7dHJ5e2k9QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZpPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7bGV0IGE9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIGYuVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO2E9e2RhdGE6QXQuZGVjb2RlKGMpfTticmVha31jYXNlIGYuSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTthPUpTT04ucGFyc2UoQXQuZGVjb2RlKGMpKTticmVha31jYXNlIGYuQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO2E9e2RhdGE6dHQoQSxCLEUpfTticmVha31jYXNlIGYuVGV4dEZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBmLkJpbmFyeUZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpMcihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBmLkltYWdlOntsZXQgQj1lZShBLEkpO0IuZGF0YT1TKEEsSSwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPVMoQSxJLDEsTS5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSksYT1CO2JyZWFrfWNhc2UgZi5NZXNoOntsZXQgQj1lZShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1TKEEsSSwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1UKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1TKEEsSSwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9VChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9UyhBLEksMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1UKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9UyhBLEksMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9VChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9Y2FzZSBmLlBvbHlEYXRhOntsZXQgQj1lZShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1TKEEsSSwwLE0uRmxvYXQzMik6Qi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxCLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0IudmVydGljZXM9UyhBLEksMSxELlVJbnQzMik6Qi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQi5saW5lc0J1ZmZlclNpemU+MD9CLmxpbmVzPVMoQSxJLDIsRC5VSW50MzIpOkIubGluZXM9bmV3IFVpbnQzMkFycmF5LEIucG9seWdvbnNCdWZmZXJTaXplPjA/Qi5wb2x5Z29ucz1TKEEsSSwzLEQuVUludDMyKTpCLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxCLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0IudHJpYW5nbGVTdHJpcHM9UyhBLEksNCxELlVJbnQzMik6Qi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9UyhBLEksNSxCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9VChCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1TKEEsSSw2LEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9VChCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IFE9e3R5cGU6Qy50eXBlLGRhdGE6YX07bC5wdXNoKFEpfSkse3JldHVyblZhbHVlOmksc3Rkb3V0Om8sc3RkZXJyOmcsb3V0cHV0czpsfX12YXIgcnQ9T3I7dmFyIFRyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBQcihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCByPTA7cjxBLmxlbmd0aDtyKyspe2xldCBuPXhyKEFbcl0sZSk7biE9PW51bGwmJnQucHVzaChuKX1yZXR1cm4gdH1mdW5jdGlvbiB4cihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLFRyJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3Q6dC5zbGljZSgwKX12YXIgbnQ9UHI7ZnVuY3Rpb24gSnIoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIGl0PUpyO2Z1bmN0aW9uIEhyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBvdD1IcjtmdW5jdGlvbiBNcihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgYXQ9TXI7dmFyIFlyO2Z1bmN0aW9uIERBKCl7cmV0dXJuIFlyfXZhciBxcjtmdW5jdGlvbiBzdCgpe3JldHVybiBxcn12YXIgS3I7ZnVuY3Rpb24gU0EoKXtyZXR1cm4gS3J9dmFyIHRlPW5ldyBNYXA7ZnVuY3Rpb24gV3IoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gSXQoKXtsZXQgQT1EQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBrQSgpe2xldCBBPXN0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24ganIoQSxlLHQpe2xldCByPUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHI9bmV3IFVSTChBLmhyZWYpLG49ci5ocmVmKSx0ZS5oYXMobikpcmV0dXJuIHRlLmdldChuKTt7bGV0IGk9YXdhaXQgWmUoQSxlPy50b1N0cmluZygpPz9JdCgpLHQ/P2tBKCkpO3JldHVybiB0ZS5zZXQobixpKSxpfX1hc3luYyBmdW5jdGlvbiB2cihBLGUsdCxyLG4pe2lmKCFhd2FpdCBYZSgpKXtsZXQgdT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQodSksbmV3IEVycm9yKHUpfWxldCBpPW4/LndlYldvcmtlcj8/bnVsbDtpZihpPT09ITEpe2xldCB1PWF3YWl0IGpyKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7cmV0dXJuIHJ0KHUsZSx0LHIpfWxldCBvPWksZz1uPy5waXBlbGluZVdvcmtlclVybD8/V3IoKSxsPXR5cGVvZiBnIT0ic3RyaW5nIiYmdHlwZW9mIGc/LmhyZWY8InUiP2cuaHJlZjpnLHt3b3JrZXJQcm94eTpDLHdvcmtlcjpJfT1hd2FpdCBWZShvLGwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7bz1JO2xldCBhPVtdO3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LnR5cGU9PT1mLkJpbmFyeVN0cmVhbSl7bGV0IGQ9dS5kYXRhLmRhdGE7YS5wdXNoKGQpfWVsc2UgaWYodS50eXBlPT09Zi5CaW5hcnlGaWxlKXtsZXQgZD11LmRhdGEuZGF0YTthLnB1c2goZCl9ZWxzZSBpZih1LnR5cGU9PT1mLkltYWdlKXtsZXQgZD11LmRhdGE7ZC5kYXRhIT09bnVsbCYmYS5wdXNoKC4uLml0KGQpKX1lbHNlIGlmKHUudHlwZT09PWYuTWVzaCl7bGV0IGQ9dS5kYXRhO2EucHVzaCguLi5vdChkKSl9ZWxzZSBpZih1LnR5cGU9PT1mLlBvbHlEYXRhKXtsZXQgZD11LmRhdGE7YS5wdXNoKC4uLmF0KGQpKX19KTtsZXQgUT1uPy5waXBlbGluZUJhc2VVcmw/P0l0KCksQj10eXBlb2YgUSE9InN0cmluZyImJnR5cGVvZiBRPy5ocmVmPCJ1Ij9RLmhyZWY6USxFPXIhPW51bGw/R0EocixudChhLG4/Lm5vQ29weSkpOm51bGwsYz1hd2FpdCBDLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxCLGUsdCxFLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P2tBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpjLnJldHVyblZhbHVlLHN0ZG91dDpjLnN0ZG91dCxzdGRlcnI6Yy5zdGRlcnIsb3V0cHV0czpjLm91dHB1dHMsd2ViV29ya2VyOm99fXZhciBGPXZyO3ZhciBfcj1udWxsO2Z1bmN0aW9uIGd0KCl7cmV0dXJuIF9yfXZhciByZSx6cj1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vZG93bnNhbXBsZUAke1JBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gdHMoQSl7cmU9QX1mdW5jdGlvbiBHKCl7aWYodHlwZW9mIHJlPCJ1IilyZXR1cm4gcmU7bGV0IEE9REEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6enJ9dmFyIG5lLFZyPW51bGw7ZnVuY3Rpb24gQnQoQSl7bmU9QX1mdW5jdGlvbiBSKCl7aWYodHlwZW9mIG5lPCJ1IilyZXR1cm4gbmU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6VnJ9dmFyIFY9bnVsbDthc3luYyBmdW5jdGlvbiBDdCgpe2xldCBBPVIoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO1Y9YXdhaXQgb0EoZSl9ZnVuY3Rpb24gSXMoQSl7Vj1BfWFzeW5jIGZ1bmN0aW9uIEwoKXtpZihWIT09bnVsbClyZXR1cm4gVi50ZXJtaW5hdGVkJiZhd2FpdCBDdCgpLFY7bGV0IEE9Z3QoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgQ3QoKSxWKX1hc3luYyBmdW5jdGlvbiBacihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6Zi5JbWFnZX1dLHI9W3t0eXBlOmYuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9ZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZuLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBnPSJkb3duc2FtcGxlLWJpbi1zaHJpbmsiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IEwoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBGKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpHKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6UVswXT8uZGF0YX19dmFyIFhyPVpyO2FzeW5jIGZ1bmN0aW9uICRyKEEsZT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCB0PVt7dHlwZTpmLkltYWdlfV0scj1be3R5cGU6Zi5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnNocmlua0ZhY3RvcnMpe2lmKGUuc2hyaW5rRmFjdG9ycy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChlLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIEU9PntuLnB1c2goRS50b1N0cmluZygpKX0pKX1pZihlLmNyb3BSYWRpdXMpe2lmKGUuY3JvcFJhZGl1cy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJjcm9wLXJhZGl1cyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tY3JvcC1yYWRpdXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmNyb3BSYWRpdXMubWFwKGFzeW5jIEU9PntuLnB1c2goRS50b1N0cmluZygpKX0pKX1sZXQgZz0iZG93bnNhbXBsZS1sYWJlbC1pbWFnZSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgTCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6SSxzdGRlcnI6YSxvdXRwdXRzOlF9PWF3YWl0IEYoZyxuLHQscix7cGlwZWxpbmVCYXNlVXJsOkcoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qyxkb3duc2FtcGxlZDpRWzBdPy5kYXRhfX12YXIgQW49JHI7YXN5bmMgZnVuY3Rpb24gZW4oQT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCBlPVt7dHlwZTpmLkpzb25Db21wYXRpYmxlfV0sdD1bXSxyPVtdO2lmKHIucHVzaCgiMCIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgQS5zaHJpbmtGYWN0b3JzPCJ1Iil7aWYoQS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgUT0+e3IucHVzaChRLnRvU3RyaW5nKCkpfSkpfWxldCBpPSJkb3duc2FtcGxlLXNpZ21hIixvPUE/LndlYldvcmtlcjtvPT09dm9pZCAwJiYobz1hd2FpdCBMKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpDLG91dHB1dHM6SX09YXdhaXQgRihpLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6RygpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6byxub0NvcHk6QT8ubm9Db3B5fSk7aWYobCE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHNpZ21hOklbMF0/LmRhdGF9fXZhciB0bj1lbjthc3luYyBmdW5jdGlvbiBybihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6Zi5JbWFnZX1dLHI9W3t0eXBlOmYuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IEwoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBGKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpHKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6UVswXT8uZGF0YX19dmFyIG5uPXJuO2FzeW5jIGZ1bmN0aW9uIG9uKEE9e3NpemU6WzEsMV0sc2lnbWE6WzEsMV19KXtsZXQgZT1be3R5cGU6Zi5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2l6ZTwidSIpe2lmKEEuc2l6ZS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaXplIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaXplIiksYXdhaXQgUHJvbWlzZS5hbGwoQS5zaXplLm1hcChhc3luYyBRPT57ci5wdXNoKFEudG9TdHJpbmcoKSl9KSl9aWYodHlwZW9mIEEuc2lnbWE8InUiKXtpZihBLnNpZ21hLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNpZ21hIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaWdtYSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2lnbWEubWFwKGFzeW5jIFE9PntyLnB1c2goUS50b1N0cmluZygpKX0pKX10eXBlb2YgQS5tYXhLZXJuZWxXaWR0aDwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLXdpZHRoIixBLm1heEtlcm5lbFdpZHRoLnRvU3RyaW5nKCkpLHR5cGVvZiBBLm1heEtlcm5lbEVycm9yPCJ1IiYmci5wdXNoKCItLW1heC1rZXJuZWwtZXJyb3IiLEEubWF4S2VybmVsRXJyb3IudG9TdHJpbmcoKSk7bGV0IGk9ImdhdXNzaWFuLWtlcm5lbC1yYWRpdXMiLG89QT8ud2ViV29ya2VyO289PT12b2lkIDAmJihvPWF3YWl0IEwoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOmwsc3RkZXJyOkMsb3V0cHV0czpJfT1hd2FpdCBGKGkscixlLHQse3BpcGVsaW5lQmFzZVVybDpHKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpvLG5vQ29weTpBPy5ub0NvcHl9KTtpZihsIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmcscmFkaXVzOklbMF0/LmRhdGF9fXZhciBhbj1vbjt2YXIgbHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZXQ9KEEsSSk9Pntmb3IodmFyIHQgaW4gSSl0dChBLHQse2dldDpJW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGd0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxtQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGl0PXtjYW5IYW5kbGU6QT0+JEEoQSkmJkFbdkFdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6SSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIG9BKEEsSSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxzdChBKX19LG90PXtjYW5IYW5kbGU6QT0+JEEoQSkmJmVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IEk7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9JPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ST17aXNFcnJvcjohMSx2YWx1ZTpBfSxbSSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxBST1uZXcgTWFwKFtbInByb3h5IixpdF0sWyJ0aHJvdyIsb3RdXSk7ZnVuY3Rpb24gQnQoQSxJKXtmb3IobGV0IHQgb2YgQSlpZihJPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KEkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG9BKEEsST1nbG9iYWxUaGlzLHQ9WyIqIl0pe0kuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gZShnKXtpZighZ3x8IWcuZGF0YSlyZXR1cm47aWYoIUJ0KHQsZy5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtnLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6cix0eXBlOmkscGF0aDpzfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxnLmRhdGEpLGE9KGcuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoYiksUTt0cnl7bGV0IEM9cy5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsbik9PmZbbl0sQSksbz1zLnJlZHVjZSgoZixuKT0+ZltuXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOlE9bzticmVhaztjYXNlIlNFVCI6Q1tzLnNsaWNlKC0xKVswXV09YihnLmRhdGEudmFsdWUpLFE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6UT1vLmFwcGx5KEMsYSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgbyguLi5hKTtRPWF0KGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpufT1uZXcgTWVzc2FnZUNoYW5uZWw7b0EoQSxuKSxRPUZBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOlE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChDKXtRPXt2YWx1ZTpDLFtlQV06MH19UHJvbWlzZS5yZXNvbHZlKFEpLmNhdGNoKEM9Pih7dmFsdWU6QyxbZUFdOjB9KSkudGhlbihDPT57bGV0W28sZl09aUEoQyk7SS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOnJ9KSxmKSxpPT09IlJFTEVBU0UiJiYoSS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixlKSxJSShJKSxtQSBpbiBBJiZ0eXBlb2YgQVttQV09PSJmdW5jdGlvbiImJkFbbUFdKCkpfSkuY2F0Y2goQz0+e2xldFtvLGZdPWlBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbZUFdOjB9KTtJLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7aWQ6cn0pLGYpfSl9KSxJLnN0YXJ0JiZJLnN0YXJ0KCl9ZnVuY3Rpb24gQ3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gSUkoQSl7Q3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBzdChBLEkpe3JldHVybiBwQShBLFtdLEkpfWZ1bmN0aW9uIHRBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiB0SShBKXtyZXR1cm4gTShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntJSShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxyQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgST0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLEkpLEk9PT0wJiZ0SShBKX0pO2Z1bmN0aW9uIG50KEEsSSl7bGV0IHQ9KGdBLmdldChJKXx8MCkrMTtnQS5zZXQoSSx0KSxyQSYmckEucmVnaXN0ZXIoQSxJLEEpfWZ1bmN0aW9uIFF0KEEpe3JBJiZyQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHBBKEEsST1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IGU9ITEsZz1uZXcgUHJveHkodCx7Z2V0KHIsaSl7aWYodEEoZSksaT09PXJ0KXJldHVybigpPT57UXQoZyksdEkoQSksZT0hMH07aWYoaT09PSJ0aGVuIil7aWYoSS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5nfTtsZXQgcz1NKEEse3R5cGU6IkdFVCIscGF0aDpJLm1hcChhPT5hLnRvU3RyaW5nKCkpfSkudGhlbihiKTtyZXR1cm4gcy50aGVuLmJpbmQocyl9cmV0dXJuIHBBKEEsWy4uLkksaV0pfSxzZXQocixpLHMpe3RBKGUpO2xldFthLFFdPWlBKHMpO3JldHVybiBNKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uSSxpXS5tYXAoQz0+Qy50b1N0cmluZygpKSx2YWx1ZTphfSxRKS50aGVuKGIpfSxhcHBseShyLGkscyl7dEEoZSk7bGV0IGE9SVtJLmxlbmd0aC0xXTtpZihhPT09Z3QpcmV0dXJuIE0oQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihiKTtpZihhPT09ImJpbmQiKXJldHVybiBwQShBLEkuc2xpY2UoMCwtMSkpO2xldFtRLENdPV9BKHMpO3JldHVybiBNKEEse3R5cGU6IkFQUExZIixwYXRoOkkubWFwKG89Pm8udG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OlF9LEMpLnRoZW4oYil9LGNvbnN0cnVjdChyLGkpe3RBKGUpO2xldFtzLGFdPV9BKGkpO3JldHVybiBNKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDpJLm1hcChRPT5RLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpzfSxhKS50aGVuKGIpfX0pO3JldHVybiBudChnLEEpLGd9ZnVuY3Rpb24gRXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gX0EoQSl7bGV0IEk9QS5tYXAoaUEpO3JldHVybltJLm1hcCh0PT50WzBdKSxFdChJLm1hcCh0PT50WzFdKSldfXZhciBlST1uZXcgV2Vha01hcDtmdW5jdGlvbiBGQShBLEkpe3JldHVybiBlSS5zZXQoQSxJKSxBfWZ1bmN0aW9uIGF0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t2QV06ITB9KX1mdW5jdGlvbiBpQShBKXtmb3IobGV0W0ksdF1vZiBBSSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W2UsZ109dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOkksdmFsdWU6ZX0sZ119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGVJLmdldChBKXx8W11dfWZ1bmN0aW9uIGIoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gQUkuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBNKEEsSSx0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e2xldCBnPWN0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PWd8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLGUoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpnfSxJKSx0KX0pfWZ1bmN0aW9uIGN0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBXKEEsSSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoSSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6ZnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOk5BfT1PYmplY3QsQ0E9KEE9Pkk9PntsZXQgdD1mdC5jYWxsKEkpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVT1BPT4oQT1BLnRvTG93ZXJDYXNlKCksST0+Q0EoSSk9PT1BKSxzQT1BPT5JPT50eXBlb2YgST09PUEse2lzQXJyYXk6cX09QXJyYXksWj1zQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEEhPT1udWxsJiYhWihBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFaKEEuY29uc3RydWN0b3IpJiZTKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBvST1VKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIER0KEEpe2xldCBJO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ST1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ST1BJiZBLmJ1ZmZlciYmb0koQS5idWZmZXIpLEl9dmFyIHV0PXNBKCJzdHJpbmciKSxTPXNBKCJmdW5jdGlvbiIpLEJJPXNBKCJudW1iZXIiKSxuQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLGh0PUE9PkE9PT0hMHx8QT09PSExLEJBPUE9PntpZihDQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBJPU5BKEEpO3JldHVybihJPT09bnVsbHx8ST09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihJKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGR0PVUoIkRhdGUiKSx5dD1VKCJGaWxlIiksd3Q9VSgiQmxvYiIpLG10PVUoIkZpbGVMaXN0IikscHQ9QT0+bkEoQSkmJlMoQS5waXBlKSxGdD1BPT57bGV0IEk7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8UyhBLmFwcGVuZCkmJigoST1DQShBKSk9PT0iZm9ybWRhdGEifHxJPT09Im9iamVjdCImJlMoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sU3Q9VSgiVVJMU2VhcmNoUGFyYW1zIiksUnQ9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIFYoQSxJLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgZSxnO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxxKEEpKWZvcihlPTAsZz1BLmxlbmd0aDtlPGc7ZSsrKUkuY2FsbChudWxsLEFbZV0sZSxBKTtlbHNle2xldCByPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1yLmxlbmd0aCxzO2ZvcihlPTA7ZTxpO2UrKylzPXJbZV0sSS5jYWxsKG51bGwsQVtzXSxzLEEpfX1mdW5jdGlvbiBDSShBLEkpe0k9SS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLGU9dC5sZW5ndGgsZztmb3IoO2UtLSA+MDspaWYoZz10W2VdLEk9PT1nLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGc7cmV0dXJuIG51bGx9dmFyIHNJPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsbkk9QT0+IVooQSkmJkEhPT1zSTtmdW5jdGlvbiBSQSgpe2xldHtjYXNlbGVzczpBfT1uSSh0aGlzKSYmdGhpc3x8e30sST17fSx0PShlLGcpPT57bGV0IHI9QSYmQ0koSSxnKXx8ZztCQShJW3JdKSYmQkEoZSk/SVtyXT1SQShJW3JdLGUpOkJBKGUpP0lbcl09UkEoe30sZSk6cShlKT9JW3JdPWUuc2xpY2UoKTpJW3JdPWV9O2ZvcihsZXQgZT0wLGc9YXJndW1lbnRzLmxlbmd0aDtlPGc7ZSsrKWFyZ3VtZW50c1tlXSYmVihhcmd1bWVudHNbZV0sdCk7cmV0dXJuIEl9dmFyIE50PShBLEksdCx7YWxsT3duS2V5czplfT17fSk9PihWKEksKGcscik9Pnt0JiZTKGcpP0Fbcl09VyhnLHQpOkFbcl09Z30se2FsbE93bktleXM6ZX0pLEEpLFV0PUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksR3Q9KEEsSSx0LGUpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSxlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOkkucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sa3Q9KEEsSSx0LGUpPT57bGV0IGcscixpLHM9e307aWYoST1JfHx7fSxBPT1udWxsKXJldHVybiBJO2Rve2ZvcihnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLHI9Zy5sZW5ndGg7ci0tID4wOylpPWdbcl0sKCFlfHxlKGksQSxJKSkmJiFzW2ldJiYoSVtpXT1BW2ldLHNbaV09ITApO0E9dCE9PSExJiZOQShBKX13aGlsZShBJiYoIXR8fHQoQSxJKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gSX0sTHQ9KEEsSSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPUkubGVuZ3RoO2xldCBlPUEuaW5kZXhPZihJLHQpO3JldHVybiBlIT09LTEmJmU9PT10fSxKdD1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgST1BLmxlbmd0aDtpZighQkkoSSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KEkpO2Zvcig7SS0tID4wOyl0W0ldPUFbSV07cmV0dXJuIHR9LEh0PShBPT5JPT5BJiZJIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZOQShVaW50OEFycmF5KSksWXQ9KEEsSSk9PntsZXQgZT0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLGc7Zm9yKDsoZz1lLm5leHQoKSkmJiFnLmRvbmU7KXtsZXQgcj1nLnZhbHVlO0kuY2FsbChBLHJbMF0sclsxXSl9fSxidD0oQSxJKT0+e2xldCB0LGU9W107Zm9yKDsodD1BLmV4ZWMoSSkpIT09bnVsbDspZS5wdXNoKHQpO3JldHVybiBlfSxNdD1VKCJIVE1MRm9ybUVsZW1lbnQiKSxxdD1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbih0LGUsZyl7cmV0dXJuIGUudG9VcHBlckNhc2UoKStnfSksckk9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oSSx0KT0+QS5jYWxsKEksdCkpKE9iamVjdC5wcm90b3R5cGUpLEt0PVUoIlJlZ0V4cCIpLFFJPShBLEkpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksZT17fTtWKHQsKGcscik9PntsZXQgaTsoaT1JKGcscixBKSkhPT0hMSYmKGVbcl09aXx8Zyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLGUpfSxPdD1BPT57UUkoQSwoSSx0KT0+e2lmKFMoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCBlPUFbdF07aWYoUyhlKSl7aWYoSS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBJKXtJLndyaXRhYmxlPSExO3JldHVybn1JLnNldHx8KEkuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIit0KyJcJyIpfSl9fSl9LFR0PShBLEkpPT57bGV0IHQ9e30sZT1nPT57Zy5mb3JFYWNoKHI9Pnt0W3JdPSEwfSl9O3JldHVybiBxKEEpP2UoQSk6ZShTdHJpbmcoQSkuc3BsaXQoSSkpLHR9LHh0PSgpPT57fSxQdD0oQSxJKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6SSksU0E9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixpST0iMDEyMzQ1Njc4OSIsRUk9e0RJR0lUOmlJLEFMUEhBOlNBLEFMUEhBX0RJR0lUOlNBK1NBLnRvVXBwZXJDYXNlKCkraUl9LGp0PShBPTE2LEk9RUkuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDplfT1JO2Zvcig7QS0tOyl0Kz1JW01hdGgucmFuZG9tKCkqZXwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gV3QoQSl7cmV0dXJuISEoQSYmUyhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFp0PUE9PntsZXQgST1uZXcgQXJyYXkoMTApLHQ9KGUsZyk9PntpZihuQShlKSl7aWYoSS5pbmRleE9mKGUpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gZSkpe0lbZ109ZTtsZXQgcj1xKGUpP1tdOnt9O3JldHVybiBWKGUsKGkscyk9PntsZXQgYT10KGksZysxKTshWihhKSYmKHJbc109YSl9KSxJW2ddPXZvaWQgMCxyfX1yZXR1cm4gZX07cmV0dXJuIHQoQSwwKX0sVnQ9VSgiQXN5bmNGdW5jdGlvbiIpLFh0PUE9PkEmJihuQShBKXx8UyhBKSkmJlMoQS50aGVuKSYmUyhBLmNhdGNoKSxCPXtpc0FycmF5OnEsaXNBcnJheUJ1ZmZlcjpvSSxpc0J1ZmZlcjpsdCxpc0Zvcm1EYXRhOkZ0LGlzQXJyYXlCdWZmZXJWaWV3OkR0LGlzU3RyaW5nOnV0LGlzTnVtYmVyOkJJLGlzQm9vbGVhbjpodCxpc09iamVjdDpuQSxpc1BsYWluT2JqZWN0OkJBLGlzVW5kZWZpbmVkOlosaXNEYXRlOmR0LGlzRmlsZTp5dCxpc0Jsb2I6d3QsaXNSZWdFeHA6S3QsaXNGdW5jdGlvbjpTLGlzU3RyZWFtOnB0LGlzVVJMU2VhcmNoUGFyYW1zOlN0LGlzVHlwZWRBcnJheTpIdCxpc0ZpbGVMaXN0Om10LGZvckVhY2g6VixtZXJnZTpSQSxleHRlbmQ6TnQsdHJpbTpSdCxzdHJpcEJPTTpVdCxpbmhlcml0czpHdCx0b0ZsYXRPYmplY3Q6a3Qsa2luZE9mOkNBLGtpbmRPZlRlc3Q6VSxlbmRzV2l0aDpMdCx0b0FycmF5Okp0LGZvckVhY2hFbnRyeTpZdCxtYXRjaEFsbDpidCxpc0hUTUxGb3JtOk10LGhhc093blByb3BlcnR5OnJJLGhhc093blByb3A6ckkscmVkdWNlRGVzY3JpcHRvcnM6UUksZnJlZXplTWV0aG9kczpPdCx0b09iamVjdFNldDpUdCx0b0NhbWVsQ2FzZTpxdCxub29wOnh0LHRvRmluaXRlTnVtYmVyOlB0LGZpbmRLZXk6Q0ksZ2xvYmFsOnNJLGlzQ29udGV4dERlZmluZWQ6bkksQUxQSEFCRVQ6RUksZ2VuZXJhdGVTdHJpbmc6anQsaXNTcGVjQ29tcGxpYW50Rm9ybTpXdCx0b0pTT05PYmplY3Q6WnQsaXNBc3luY0ZuOlZ0LGlzVGhlbmFibGU6WHR9O2Z1bmN0aW9uIEsoQSxJLHQsZSxnKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLEkmJih0aGlzLmNvZGU9SSksdCYmKHRoaXMuY29uZmlnPXQpLGUmJih0aGlzLnJlcXVlc3Q9ZSksZyYmKHRoaXMucmVzcG9uc2U9Zyl9Qi5pbmhlcml0cyhLLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Qi50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgYUk9Sy5wcm90b3R5cGUsY0k9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57Y0lbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSyxjSSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFJLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO0suZnJvbT0oQSxJLHQsZSxnLHIpPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShhSSk7cmV0dXJuIEIudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PUVycm9yLnByb3RvdHlwZX0scz0+cyE9PSJpc0F4aW9zRXJyb3IiKSxLLmNhbGwoaSxBLm1lc3NhZ2UsSSx0LGUsZyksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsciYmT2JqZWN0LmFzc2lnbihpLHIpLGl9O3ZhciBsPUs7dmFyIFFBPW51bGw7ZnVuY3Rpb24gVUEoQSl7cmV0dXJuIEIuaXNQbGFpbk9iamVjdChBKXx8Qi5pc0FycmF5KEEpfWZ1bmN0aW9uIGxJKEEpe3JldHVybiBCLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIGZJKEEsSSx0KXtyZXR1cm4gQT9BLmNvbmNhdChJKS5tYXAoZnVuY3Rpb24oZyxyKXtyZXR1cm4gZz1sSShnKSwhdCYmcj8iWyIrZysiXSI6Z30pLmpvaW4odD8iLiI6IiIpOkl9ZnVuY3Rpb24genQoQSl7cmV0dXJuIEIuaXNBcnJheShBKSYmIUEuc29tZShVQSl9dmFyIF90PUIudG9GbGF0T2JqZWN0KEIse30sbnVsbCxmdW5jdGlvbihJKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoSSl9KTtmdW5jdGlvbiB2dChBLEksdCl7aWYoIUIuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ST1JfHxuZXcoUUF8fEZvcm1EYXRhKSx0PUIudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihjLHUpe3JldHVybiFCLmlzVW5kZWZpbmVkKHVbY10pfSk7bGV0IGU9dC5tZXRhVG9rZW5zLGc9dC52aXNpdG9yfHxDLHI9dC5kb3RzLGk9dC5pbmRleGVzLGE9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmQi5pc1NwZWNDb21wbGlhbnRGb3JtKEkpO2lmKCFCLmlzRnVuY3Rpb24oZykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBRKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKEIuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIWEmJkIuaXNCbG9iKEUpKXRocm93IG5ldyBsKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBCLmlzQXJyYXlCdWZmZXIoRSl8fEIuaXNUeXBlZEFycmF5KEUpP2EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBDKEUsYyx1KXtsZXQgZD1FO2lmKEUmJiF1JiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKEIuZW5kc1dpdGgoYywie30iKSljPWU/YzpjLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihCLmlzQXJyYXkoRSkmJnp0KEUpfHwoQi5pc0ZpbGVMaXN0KEUpfHxCLmVuZHNXaXRoKGMsIltdIikpJiYoZD1CLnRvQXJyYXkoRSkpKXJldHVybiBjPWxJKGMpLGQuZm9yRWFjaChmdW5jdGlvbihOLEl0KXshKEIuaXNVbmRlZmluZWQoTil8fE49PT1udWxsKSYmSS5hcHBlbmQoaT09PSEwP2ZJKFtjXSxJdCxyKTppPT09bnVsbD9jOmMrIltdIixRKE4pKX0pLCExfXJldHVybiBVQShFKT8hMDooSS5hcHBlbmQoZkkodSxjLHIpLFEoRSkpLCExKX1sZXQgbz1bXSxmPU9iamVjdC5hc3NpZ24oX3Qse2RlZmF1bHRWaXNpdG9yOkMsY29udmVydFZhbHVlOlEsaXNWaXNpdGFibGU6VUF9KTtmdW5jdGlvbiBuKEUsYyl7aWYoIUIuaXNVbmRlZmluZWQoRSkpe2lmKG8uaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitjLmpvaW4oIi4iKSk7by5wdXNoKEUpLEIuZm9yRWFjaChFLGZ1bmN0aW9uKGQsUil7KCEoQi5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZnLmNhbGwoSSxkLEIuaXNTdHJpbmcoUik/Ui50cmltKCk6UixjLGYpKT09PSEwJiZuKGQsYz9jLmNvbmNhdChSKTpbUl0pfSksby5wb3AoKX19aWYoIUIuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBuKEEpLEl9dmFyIEw9dnQ7ZnVuY3Rpb24gREkoQSl7bGV0IEk9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oZSl7cmV0dXJuIElbZV19KX1mdW5jdGlvbiB1SShBLEkpe3RoaXMuX3BhaXJzPVtdLEEmJkwoQSx0aGlzLEkpfXZhciBoST11SS5wcm90b3R5cGU7aEkuYXBwZW5kPWZ1bmN0aW9uKEksdCl7dGhpcy5fcGFpcnMucHVzaChbSSx0XSl9O2hJLnRvU3RyaW5nPWZ1bmN0aW9uKEkpe2xldCB0PUk/ZnVuY3Rpb24oZSl7cmV0dXJuIEkuY2FsbCh0aGlzLGUsREkpfTpESTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKGcpe3JldHVybiB0KGdbMF0pKyI9Iit0KGdbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRUE9dUk7ZnVuY3Rpb24gJHQoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLEksdCl7aWYoIUkpcmV0dXJuIEE7bGV0IGU9dCYmdC5lbmNvZGV8fCR0LGc9dCYmdC5zZXJpYWxpemUscjtpZihnP3I9ZyhJLHQpOnI9Qi5pc1VSTFNlYXJjaFBhcmFtcyhJKT9JLnRvU3RyaW5nKCk6bmV3IEVBKEksdCkudG9TdHJpbmcoZSkscil7bGV0IGk9QS5pbmRleE9mKCIlMjMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIgR0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShJLHQsZSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkkscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czplP2Uuc3luY2hyb25vdXM6ITEscnVuV2hlbjplP2UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChJKXt0aGlzLmhhbmRsZXJzW0ldJiYodGhpcy5oYW5kbGVyc1tJXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEkpe0IuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGUpe2UhPT1udWxsJiZJKGUpfSl9fSxrQT1HQTt2YXIgYUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBkST10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6RUE7dmFyIHlJPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgd0k9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgbUk9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6ZEksRm9ybURhdGE6eUksQmxvYjp3SX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBMQT17fTtldChMQSx7aGFzQnJvd3NlckVudjooKT0+cEksaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5BZSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PkllfSk7dmFyIHBJPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEFlPShBPT5wSSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEllPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uTEEsLi4ubUl9O2Z1bmN0aW9uIEpBKEEsSSl7cmV0dXJuIEwoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQsZSxnLHIpe3JldHVybiB3LmlzTm9kZSYmQi5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQoZSx0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sSSkpfWZ1bmN0aW9uIHRlKEEpe3JldHVybiBCLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAoST0+SVswXT09PSJbXSI/IiI6SVsxXXx8SVswXSl9ZnVuY3Rpb24gZWUoQSl7bGV0IEk9e30sdD1PYmplY3Qua2V5cyhBKSxlLGc9dC5sZW5ndGgscjtmb3IoZT0wO2U8ZztlKyspcj10W2VdLElbcl09QVtyXTtyZXR1cm4gSX1mdW5jdGlvbiBnZShBKXtmdW5jdGlvbiBJKHQsZSxnLHIpe2xldCBpPXRbcisrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IHM9TnVtYmVyLmlzRmluaXRlKCtpKSxhPXI+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZCLmlzQXJyYXkoZyk/Zy5sZW5ndGg6aSxhPyhCLmhhc093blByb3AoZyxpKT9nW2ldPVtnW2ldLGVdOmdbaV09ZSwhcyk6KCghZ1tpXXx8IUIuaXNPYmplY3QoZ1tpXSkpJiYoZ1tpXT1bXSksSSh0LGUsZ1tpXSxyKSYmQi5pc0FycmF5KGdbaV0pJiYoZ1tpXT1lZShnW2ldKSksIXMpfWlmKEIuaXNGb3JtRGF0YShBKSYmQi5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBCLmZvckVhY2hFbnRyeShBLChlLGcpPT57SSh0ZShlKSxnLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBjQT1nZTtmdW5jdGlvbiByZShBLEksdCl7aWYoQi5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKEl8fEpTT04ucGFyc2UpKEEpLEIudHJpbShBKX1jYXRjaChlKXtpZihlLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGV9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgSEE9e3RyYW5zaXRpb25hbDphQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEksdCl7bGV0IGU9dC5nZXRDb250ZW50VHlwZSgpfHwiIixnPWUuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Qi5pc09iamVjdChJKTtpZihyJiZCLmlzSFRNTEZvcm0oSSkmJihJPW5ldyBGb3JtRGF0YShJKSksQi5pc0Zvcm1EYXRhKEkpKXJldHVybiBnP0pTT04uc3RyaW5naWZ5KGNBKEkpKTpJO2lmKEIuaXNBcnJheUJ1ZmZlcihJKXx8Qi5pc0J1ZmZlcihJKXx8Qi5pc1N0cmVhbShJKXx8Qi5pc0ZpbGUoSSl8fEIuaXNCbG9iKEkpKXJldHVybiBJO2lmKEIuaXNBcnJheUJ1ZmZlclZpZXcoSSkpcmV0dXJuIEkuYnVmZmVyO2lmKEIuaXNVUkxTZWFyY2hQYXJhbXMoSSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksSS50b1N0cmluZygpO2xldCBzO2lmKHIpe2lmKGUuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEpBKEksdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigocz1CLmlzRmlsZUxpc3QoSSkpfHxlLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKHM/eyJmaWxlc1tdIjpJfTpJLGEmJm5ldyBhLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8Zz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLHJlKEkpKTpJfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEkpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxIQS50cmFuc2l0aW9uYWwsZT10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGc9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoSSYmQi5pc1N0cmluZyhJKSYmKGUmJiF0aGlzLnJlc3BvbnNlVHlwZXx8Zykpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJmc7dHJ5e3JldHVybiBKU09OLnBhcnNlKEkpfWNhdGNoKHMpe2lmKGkpdGhyb3cgcy5uYW1lPT09IlN5bnRheEVycm9yIj9sLmZyb20ocyxsLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOnN9fXJldHVybiBJfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oSSl7cmV0dXJuIEk+PTIwMCYmSTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e0hBLmhlYWRlcnNbQV09e319KTt2YXIgTz1IQTt2YXIgaWU9Qi50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxGST1BPT57bGV0IEk9e30sdCxlLGc7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24oaSl7Zz1pLmluZGV4T2YoIjoiKSx0PWkuc3Vic3RyaW5nKDAsZykudHJpbSgpLnRvTG93ZXJDYXNlKCksZT1pLnN1YnN0cmluZyhnKzEpLnRyaW0oKSwhKCF0fHxJW3RdJiZpZVt0XSkmJih0PT09InNldC1jb29raWUiP0lbdF0/SVt0XS5wdXNoKGUpOklbdF09W2VdOklbdF09SVt0XT9JW3RdKyIsICIrZTplKX0pLEl9O3ZhciBTST1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHooQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBmQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Qi5pc0FycmF5KEEpP0EubWFwKGZBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gb2UoQSl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csZTtmb3IoO2U9dC5leGVjKEEpOylJW2VbMV1dPWVbMl07cmV0dXJuIEl9dmFyIEJlPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFlBKEEsSSx0LGUsZyl7aWYoQi5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyxJLHQpO2lmKGcmJihJPXQpLCEhQi5pc1N0cmluZyhJKSl7aWYoQi5pc1N0cmluZyhlKSlyZXR1cm4gSS5pbmRleE9mKGUpIT09LTE7aWYoQi5pc1JlZ0V4cChlKSlyZXR1cm4gZS50ZXN0KEkpfX1mdW5jdGlvbiBDZShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKEksdCxlKT0+dC50b1VwcGVyQ2FzZSgpK2UpfWZ1bmN0aW9uIHNlKEEsSSl7bGV0IHQ9Qi50b0NhbWVsQ2FzZSgiICIrSSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxlK3Qse3ZhbHVlOmZ1bmN0aW9uKGcscixpKXtyZXR1cm4gdGhpc1tlXS5jYWxsKHRoaXMsSSxnLHIsaSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFQ9Y2xhc3N7Y29uc3RydWN0b3IoSSl7SSYmdGhpcy5zZXQoSSl9c2V0KEksdCxlKXtsZXQgZz10aGlzO2Z1bmN0aW9uIHIocyxhLFEpe2xldCBDPXooYSk7aWYoIUMpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBvPUIuZmluZEtleShnLEMpOyghb3x8Z1tvXT09PXZvaWQgMHx8UT09PSEwfHxRPT09dm9pZCAwJiZnW29dIT09ITEpJiYoZ1tvfHxhXT1mQShzKSl9bGV0IGk9KHMsYSk9PkIuZm9yRWFjaChzLChRLEMpPT5yKFEsQyxhKSk7cmV0dXJuIEIuaXNQbGFpbk9iamVjdChJKXx8SSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/aShJLHQpOkIuaXNTdHJpbmcoSSkmJihJPUkudHJpbSgpKSYmIUJlKEkpP2koRkkoSSksdCk6SSE9bnVsbCYmcih0LEksZSksdGhpc31nZXQoSSx0KXtpZihJPXooSSksSSl7bGV0IGU9Qi5maW5kS2V5KHRoaXMsSSk7aWYoZSl7bGV0IGc9dGhpc1tlXTtpZighdClyZXR1cm4gZztpZih0PT09ITApcmV0dXJuIG9lKGcpO2lmKEIuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsZyxlKTtpZihCLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMoZyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhJLHQpe2lmKEk9eihJKSxJKXtsZXQgZT1CLmZpbmRLZXkodGhpcyxJKTtyZXR1cm4hIShlJiZ0aGlzW2VdIT09dm9pZCAwJiYoIXR8fFlBKHRoaXMsdGhpc1tlXSxlLHQpKSl9cmV0dXJuITF9ZGVsZXRlKEksdCl7bGV0IGU9dGhpcyxnPSExO2Z1bmN0aW9uIHIoaSl7aWYoaT16KGkpLGkpe2xldCBzPUIuZmluZEtleShlLGkpO3MmJighdHx8WUEoZSxlW3NdLHMsdCkpJiYoZGVsZXRlIGVbc10sZz0hMCl9fXJldHVybiBCLmlzQXJyYXkoSSk/SS5mb3JFYWNoKHIpOnIoSSksZ31jbGVhcihJKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzKSxlPXQubGVuZ3RoLGc9ITE7Zm9yKDtlLS07KXtsZXQgcj10W2VdOyghSXx8WUEodGhpcyx0aGlzW3JdLHIsSSwhMCkpJiYoZGVsZXRlIHRoaXNbcl0sZz0hMCl9cmV0dXJuIGd9bm9ybWFsaXplKEkpe2xldCB0PXRoaXMsZT17fTtyZXR1cm4gQi5mb3JFYWNoKHRoaXMsKGcscik9PntsZXQgaT1CLmZpbmRLZXkoZSxyKTtpZihpKXt0W2ldPWZBKGcpLGRlbGV0ZSB0W3JdO3JldHVybn1sZXQgcz1JP0NlKHIpOlN0cmluZyhyKS50cmltKCk7cyE9PXImJmRlbGV0ZSB0W3JdLHRbc109ZkEoZyksZVtzXT0hMH0pLHRoaXN9Y29uY2F0KC4uLkkpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLkkpfXRvSlNPTihJKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBCLmZvckVhY2godGhpcywoZSxnKT0+e2UhPW51bGwmJmUhPT0hMSYmKHRbZ109SSYmQi5pc0FycmF5KGUpP2Uuam9pbigiLCAiKTplKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW0ksdF0pPT5JKyI6ICIrdCkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIHRoaXM/STpuZXcgdGhpcyhJKX1zdGF0aWMgY29uY2F0KEksLi4udCl7bGV0IGU9bmV3IHRoaXMoSSk7cmV0dXJuIHQuZm9yRWFjaChnPT5lLnNldChnKSksZX1zdGF0aWMgYWNjZXNzb3IoSSl7bGV0IGU9KHRoaXNbU0ldPXRoaXNbU0ldPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsZz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiByKGkpe2xldCBzPXooaSk7ZVtzXXx8KHNlKGcsaSksZVtzXT0hMCl9cmV0dXJuIEIuaXNBcnJheShJKT9JLmZvckVhY2gocik6cihJKSx0aGlzfX07VC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Qi5yZWR1Y2VEZXNjcmlwdG9ycyhULnByb3RvdHlwZSwoe3ZhbHVlOkF9LEkpPT57bGV0IHQ9SVswXS50b1VwcGVyQ2FzZSgpK0kuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoZSl7dGhpc1t0XT1lfX19KTtCLmZyZWV6ZU1ldGhvZHMoVCk7dmFyIG09VDtmdW5jdGlvbiBfKEEsSSl7bGV0IHQ9dGhpc3x8TyxlPUl8fHQsZz1tLmZyb20oZS5oZWFkZXJzKSxyPWUuZGF0YTtyZXR1cm4gQi5mb3JFYWNoKEEsZnVuY3Rpb24ocyl7cj1zLmNhbGwodCxyLGcubm9ybWFsaXplKCksST9JLnN0YXR1czp2b2lkIDApfSksZy5ub3JtYWxpemUoKSxyfWZ1bmN0aW9uIHYoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBSSShBLEksdCl7bC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixsLkVSUl9DQU5DRUxFRCxJLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Qi5pbmhlcml0cyhSSSxsLHtfX0NBTkNFTF9fOiEwfSk7dmFyIEo9Ukk7ZnVuY3Rpb24gYkEoQSxJLHQpe2xldCBlPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IWV8fGUodC5zdGF0dXMpP0EodCk6SShuZXcgbCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFtsLkVSUl9CQURfUkVRVUVTVCxsLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciBOST13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxJLHQsZSxnLHIpe2xldCBpPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoSSldO0IuaXNOdW1iZXIodCkmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLEIuaXNTdHJpbmcoZSkmJmkucHVzaCgicGF0aD0iK2UpLEIuaXNTdHJpbmcoZykmJmkucHVzaCgiZG9tYWluPSIrZykscj09PSEwJiZpLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1pLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IEk9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBJP2RlY29kZVVSSUNvbXBvbmVudChJWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIE1BKEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHFBKEEsSSl7cmV0dXJuIEk/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIitJLnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiAkKEEsSSl7cmV0dXJuIEEmJiFNQShJKT9xQShBLEkpOkl9dmFyIFVJPXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IEk9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxlO2Z1bmN0aW9uIGcocil7bGV0IGk9cjtyZXR1cm4gSSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gZT1nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgcz1CLmlzU3RyaW5nKGkpP2coaSk6aTtyZXR1cm4gcy5wcm90b2NvbD09PWUucHJvdG9jb2wmJnMuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gS0EoQSl7bGV0IEk9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIEkmJklbMV18fCIifWZ1bmN0aW9uIG5lKEEsSSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSksZT1uZXcgQXJyYXkoQSksZz0wLHI9MCxpO3JldHVybiBJPUkhPT12b2lkIDA/SToxZTMsZnVuY3Rpb24oYSl7bGV0IFE9RGF0ZS5ub3coKSxDPWVbcl07aXx8KGk9USksdFtnXT1hLGVbZ109UTtsZXQgbz1yLGY9MDtmb3IoO28hPT1nOylmKz10W28rK10sbz1vJUE7aWYoZz0oZysxKSVBLGc9PT1yJiYocj0ocisxKSVBKSxRLWk8SSlyZXR1cm47bGV0IG49QyYmUS1DO3JldHVybiBuP01hdGgucm91bmQoZioxZTMvbik6dm9pZCAwfX12YXIgR0k9bmU7ZnVuY3Rpb24ga0koQSxJKXtsZXQgdD0wLGU9R0koNTAsMjUwKTtyZXR1cm4gZz0+e2xldCByPWcubG9hZGVkLGk9Zy5sZW5ndGhDb21wdXRhYmxlP2cudG90YWw6dm9pZCAwLHM9ci10LGE9ZShzKSxRPXI8PWk7dD1yO2xldCBDPXtsb2FkZWQ6cix0b3RhbDppLHByb2dyZXNzOmk/ci9pOnZvaWQgMCxieXRlczpzLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZpJiZRPyhpLXIpL2E6dm9pZCAwLGV2ZW50Omd9O0NbST8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEMpfX12YXIgUWU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixMST1RZSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bGV0IGc9QS5kYXRhLHI9bS5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46c309QSxhO2Z1bmN0aW9uIFEoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IEM7aWYoQi5pc0Zvcm1EYXRhKGcpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoQz1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPUM/Qy5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IG89bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBmPSQoQS5iYXNlVVJMLEEudXJsKTtvLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxYKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksby50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBuKCl7aWYoIW8pcmV0dXJuO2xldCBjPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIG8mJm8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGQ9e2RhdGE6IWl8fGk9PT0idGV4dCJ8fGk9PT0ianNvbiI/by5yZXNwb25zZVRleHQ6by5yZXNwb25zZSxzdGF0dXM6by5zdGF0dXMsc3RhdHVzVGV4dDpvLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6b307YkEoZnVuY3Rpb24oTil7dChOKSxRKCl9LGZ1bmN0aW9uKE4pe2UoTiksUSgpfSxkKSxvPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBvP28ub25sb2FkZW5kPW46by5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshb3x8by5yZWFkeVN0YXRlIT09NHx8by5zdGF0dXM9PT0wJiYhKG8ucmVzcG9uc2VVUkwmJm8ucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KG4pfSxvLm9uYWJvcnQ9ZnVuY3Rpb24oKXtvJiYoZShuZXcgbCgiUmVxdWVzdCBhYm9ydGVkIixsLkVDT05OQUJPUlRFRCxBLG8pKSxvPW51bGwpfSxvLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBsKCJOZXR3b3JrIEVycm9yIixsLkVSUl9ORVRXT1JLLEEsbykpLG89bnVsbH0sby5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsZD1BLnRyYW5zaXRpb25hbHx8YUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGUobmV3IGwodSxkLmNsYXJpZnlUaW1lb3V0RXJyb3I/bC5FVElNRURPVVQ6bC5FQ09OTkFCT1JURUQsQSxvKSksbz1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHMmJkIuaXNGdW5jdGlvbihzKSYmKHM9cyhBKSksc3x8cyE9PSExJiZVSShmKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJk5JLnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmci5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1nPT09dm9pZCAwJiZyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIG8mJkIuZm9yRWFjaChyLnRvSlNPTigpLGZ1bmN0aW9uKHUsZCl7by5zZXRSZXF1ZXN0SGVhZGVyKGQsdSl9KSxCLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KG8ud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLGkmJmkhPT0ianNvbiImJihvLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZvLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrSShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm8udXBsb2FkJiZvLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa0koQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGE9Yz0+e28mJihlKCFjfHxjLnR5cGU/bmV3IEoobnVsbCxBLG8pOmMpLG8uYWJvcnQoKSxvPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShhKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YSgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixhKSkpO2xldCBFPUtBKGYpO2lmKEUmJncucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7ZShuZXcgbCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixsLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufW8uc2VuZChnfHxudWxsKX0pfTt2YXIgT0E9e2h0dHA6UUEseGhyOkxJfTtCLmZvckVhY2goT0EsKEEsSSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTpJfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOkl9KX19KTt2YXIgSkk9QT0+YC0gJHtBfWAsRWU9QT0+Qi5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGxBPXtnZXRBZGFwdGVyOkE9PntBPUIuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOkl9PUEsdCxlLGc9e307Zm9yKGxldCByPTA7cjxJO3IrKyl7dD1BW3JdO2xldCBpO2lmKGU9dCwhRWUodCkmJihlPU9BWyhpPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0sZT09PXZvaWQgMCkpdGhyb3cgbmV3IGwoYFVua25vd24gYWRhcHRlciBcJyR7aX1cJ2ApO2lmKGUpYnJlYWs7Z1tpfHwiJTIzIityXT1lfWlmKCFlKXtsZXQgcj1PYmplY3QuZW50cmllcyhnKS5tYXAoKFtzLGFdKT0+YGFkYXB0ZXIgJHtzfSBgKyhhPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksaT1JP3IubGVuZ3RoPjE/YHNpbmNlIDolMEFgK3IubWFwKEpJKS5qb2luKGAlMEFgKToiICIrSkkoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBlfSxhZGFwdGVyczpPQX07ZnVuY3Rpb24gVEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEoobnVsbCxBKX1mdW5jdGlvbiBEQShBKXtyZXR1cm4gVEEoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxsQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Ty5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBUQShBKSxlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlKSxlLmhlYWRlcnM9bS5mcm9tKGUuaGVhZGVycyksZX0sZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl8fChUQShBKSxlJiZlLnJlc3BvbnNlJiYoZS5yZXNwb25zZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZS5yZXNwb25zZSksZS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShlLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoZSl9KX12YXIgSEk9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gRyhBLEkpe0k9SXx8e307bGV0IHQ9e307ZnVuY3Rpb24gZShRLEMsbyl7cmV0dXJuIEIuaXNQbGFpbk9iamVjdChRKSYmQi5pc1BsYWluT2JqZWN0KEMpP0IubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6b30sUSxDKTpCLmlzUGxhaW5PYmplY3QoQyk/Qi5tZXJnZSh7fSxDKTpCLmlzQXJyYXkoQyk/Qy5zbGljZSgpOkN9ZnVuY3Rpb24gZyhRLEMsbyl7aWYoQi5pc1VuZGVmaW5lZChDKSl7aWYoIUIuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEsbyl9ZWxzZSByZXR1cm4gZShRLEMsbyl9ZnVuY3Rpb24gcihRLEMpe2lmKCFCLmlzVW5kZWZpbmVkKEMpKXJldHVybiBlKHZvaWQgMCxDKX1mdW5jdGlvbiBpKFEsQyl7aWYoQi5pc1VuZGVmaW5lZChDKSl7aWYoIUIuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEpfWVsc2UgcmV0dXJuIGUodm9pZCAwLEMpfWZ1bmN0aW9uIHMoUSxDLG8pe2lmKG8gaW4gSSlyZXR1cm4gZShRLEMpO2lmKG8gaW4gQSlyZXR1cm4gZSh2b2lkIDAsUSl9bGV0IGE9e3VybDpyLG1ldGhvZDpyLGRhdGE6cixiYXNlVVJMOmksdHJhbnNmb3JtUmVxdWVzdDppLHRyYW5zZm9ybVJlc3BvbnNlOmkscGFyYW1zU2VyaWFsaXplcjppLHRpbWVvdXQ6aSx0aW1lb3V0TWVzc2FnZTppLHdpdGhDcmVkZW50aWFsczppLHdpdGhYU1JGVG9rZW46aSxhZGFwdGVyOmkscmVzcG9uc2VUeXBlOmkseHNyZkNvb2tpZU5hbWU6aSx4c3JmSGVhZGVyTmFtZTppLG9uVXBsb2FkUHJvZ3Jlc3M6aSxvbkRvd25sb2FkUHJvZ3Jlc3M6aSxkZWNvbXByZXNzOmksbWF4Q29udGVudExlbmd0aDppLG1heEJvZHlMZW5ndGg6aSxiZWZvcmVSZWRpcmVjdDppLHRyYW5zcG9ydDppLGh0dHBBZ2VudDppLGh0dHBzQWdlbnQ6aSxjYW5jZWxUb2tlbjppLHNvY2tldFBhdGg6aSxyZXNwb25zZUVuY29kaW5nOmksdmFsaWRhdGVTdGF0dXM6cyxoZWFkZXJzOihRLEMpPT5nKEhJKFEpLEhJKEMpLCEwKX07cmV0dXJuIEIuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsSSkpLGZ1bmN0aW9uKEMpe2xldCBvPWFbQ118fGcsZj1vKEFbQ10sSVtDXSxDKTtCLmlzVW5kZWZpbmVkKGYpJiZvIT09c3x8KHRbQ109Zil9KSx0fXZhciB1QT0iMS42LjgiO3ZhciB4QT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsSSk9Pnt4QVtBXT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT1BfHwiYSIrKEk8MT8ibiAiOiIgIikrQX19KTt2YXIgWUk9e307eEEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKEksdCxlKXtmdW5jdGlvbiBnKHIsaSl7cmV0dXJuIltBeGlvcyB2Iit1QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIityKyJcJyIraSsoZT8iLiAiK2U6IiIpfXJldHVybihyLGkscyk9PntpZihJPT09ITEpdGhyb3cgbmV3IGwoZyhpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxsLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIVlJW2ldJiYoWUlbaV09ITAsY29uc29sZS53YXJuKGcoaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxJP0kocixpLHMpOiEwfX07ZnVuY3Rpb24gYWUoQSxJLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IGU9T2JqZWN0LmtleXMoQSksZz1lLmxlbmd0aDtmb3IoO2ctLSA+MDspe2xldCByPWVbZ10saT1JW3JdO2lmKGkpe2xldCBzPUFbcl0sYT1zPT09dm9pZCAwfHxpKHMscixBKTtpZihhIT09ITApdGhyb3cgbmV3IGwoIm9wdGlvbiAiK3IrIiBtdXN0IGJlICIrYSxsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IGwoIlVua25vd24gb3B0aW9uICIrcixsLkVSUl9CQURfT1BUSU9OKX19dmFyIGhBPXthc3NlcnRPcHRpb25zOmFlLHZhbGlkYXRvcnM6eEF9O3ZhciBIPWhBLnZhbGlkYXRvcnMseD1jbGFzc3tjb25zdHJ1Y3RvcihJKXt0aGlzLmRlZmF1bHRzPUksdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGtBLHJlc3BvbnNlOm5ldyBrQX19YXN5bmMgcmVxdWVzdChJLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChJLHQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7bGV0IGc7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZz17fSk6Zz1uZXcgRXJyb3I7bGV0IHI9Zy5zdGFjaz9nLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO2Uuc3RhY2s/ciYmIVN0cmluZyhlLnN0YWNrKS5lbmRzV2l0aChyLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoZS5zdGFjays9YCUwQWArcik6ZS5zdGFjaz1yfXRocm93IGV9fV9yZXF1ZXN0KEksdCl7dHlwZW9mIEk9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPUkpOnQ9SXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDplLHBhcmFtc1NlcmlhbGl6ZXI6ZyxoZWFkZXJzOnJ9PXQ7ZSE9PXZvaWQgMCYmaEEuYXNzZXJ0T3B0aW9ucyhlLHtzaWxlbnRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pfSwhMSksZyE9bnVsbCYmKEIuaXNGdW5jdGlvbihnKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpnfTpoQS5hc3NlcnRPcHRpb25zKGcse2VuY29kZTpILmZ1bmN0aW9uLHNlcmlhbGl6ZTpILmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPXImJkIubWVyZ2Uoci5jb21tb24sclt0Lm1ldGhvZF0pO3ImJkIuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIHJbRV19KSx0LmhlYWRlcnM9bS5jb25jYXQoaSxyKTtsZXQgcz1bXSxhPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4odCk9PT0hMXx8KGE9YSYmYy5zeW5jaHJvbm91cyxzLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IFE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtRLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgQyxvPTAsZjtpZighYSl7bGV0IEU9W0RBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUscyksRS5wdXNoLmFwcGx5KEUsUSksZj1FLmxlbmd0aCxDPVByb21pc2UucmVzb2x2ZSh0KTtvPGY7KUM9Qy50aGVuKEVbbysrXSxFW28rK10pO3JldHVybiBDfWY9cy5sZW5ndGg7bGV0IG49dDtmb3Iobz0wO288Zjspe2xldCBFPXNbbysrXSxjPXNbbysrXTt0cnl7bj1FKG4pfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7Qz1EQS5jYWxsKHRoaXMsbil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihvPTAsZj1RLmxlbmd0aDtvPGY7KUM9Qy50aGVuKFFbbysrXSxRW28rK10pO3JldHVybiBDfWdldFVyaShJKXtJPUcodGhpcy5kZWZhdWx0cyxJKTtsZXQgdD0kKEkuYmFzZVVSTCxJLnVybCk7cmV0dXJuIFgodCxJLnBhcmFtcyxJLnBhcmFtc1NlcmlhbGl6ZXIpfX07Qi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihJKXt4LnByb3RvdHlwZVtJXT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlcXVlc3QoRyhlfHx7fSx7bWV0aG9kOkksdXJsOnQsZGF0YTooZXx8e30pLmRhdGF9KSl9fSk7Qi5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oSSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24ocixpLHMpe3JldHVybiB0aGlzLnJlcXVlc3QoRyhzfHx7fSx7bWV0aG9kOkksaGVhZGVyczplP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpyLGRhdGE6aX0pKX19eC5wcm90b3R5cGVbSV09dCgpLHgucHJvdG90eXBlW0krIkZvcm0iXT10KCEwKX0pO3ZhciBBQT14O3ZhciBQQT1jbGFzcyBBe2NvbnN0cnVjdG9yKEkpe2lmKHR5cGVvZiBJIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24ocil7dD1yfSk7bGV0IGU9dGhpczt0aGlzLnByb21pc2UudGhlbihnPT57aWYoIWUuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9ZS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO3ItLSA+MDspZS5fbGlzdGVuZXJzW3JdKGcpO2UuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49Zz0+e2xldCByLGk9bmV3IFByb21pc2Uocz0+e2Uuc3Vic2NyaWJlKHMpLHI9c30pLnRoZW4oZyk7cmV0dXJuIGkuY2FuY2VsPWZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZShyKX0saX0sSShmdW5jdGlvbihyLGkscyl7ZS5yZWFzb258fChlLnJlYXNvbj1uZXcgSihyLGkscyksdChlLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShJKXtpZih0aGlzLnJlYXNvbil7SSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChJKTp0aGlzLl9saXN0ZW5lcnM9W0ldfXVuc3Vic2NyaWJlKEkpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKEkpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgSTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24oZyl7ST1nfSksY2FuY2VsOkl9fX0sYkk9UEE7ZnVuY3Rpb24gakEoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIFdBKEEpe3JldHVybiBCLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBaQT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoWkEpLmZvckVhY2goKFtBLEldKT0+e1pBW0ldPUF9KTt2YXIgTUk9WkE7ZnVuY3Rpb24gcUkoQSl7bGV0IEk9bmV3IEFBKEEpLHQ9VyhBQS5wcm90b3R5cGUucmVxdWVzdCxJKTtyZXR1cm4gQi5leHRlbmQodCxBQS5wcm90b3R5cGUsSSx7YWxsT3duS2V5czohMH0pLEIuZXh0ZW5kKHQsSSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHFJKEcoQSxnKSl9LHR9dmFyIGg9cUkoTyk7aC5BeGlvcz1BQTtoLkNhbmNlbGVkRXJyb3I9SjtoLkNhbmNlbFRva2VuPWJJO2guaXNDYW5jZWw9djtoLlZFUlNJT049dUE7aC50b0Zvcm1EYXRhPUw7aC5BeGlvc0Vycm9yPWw7aC5DYW5jZWw9aC5DYW5jZWxlZEVycm9yO2guYWxsPWZ1bmN0aW9uKEkpe3JldHVybiBQcm9taXNlLmFsbChJKX07aC5zcHJlYWQ9akE7aC5pc0F4aW9zRXJyb3I9V0E7aC5tZXJnZUNvbmZpZz1HO2guQXhpb3NIZWFkZXJzPW07aC5mb3JtVG9KU09OPUE9PmNBKEIuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7aC5nZXRBZGFwdGVyPWxBLmdldEFkYXB0ZXI7aC5IdHRwU3RhdHVzQ29kZT1NSTtoLmRlZmF1bHQ9aDt2YXIgZEE9aDt2YXJ7QXhpb3M6b2ksQXhpb3NFcnJvcjpCaSxDYW5jZWxlZEVycm9yOkNpLGlzQ2FuY2VsOnNpLENhbmNlbFRva2VuOm5pLFZFUlNJT046UWksYWxsOkVpLENhbmNlbDphaSxpc0F4aW9zRXJyb3I6Y2ksc3ByZWFkOmZpLHRvRm9ybURhdGE6bGksQXhpb3NIZWFkZXJzOkRpLEh0dHBTdGF0dXNDb2RlOnVpLGZvcm1Ub0pTT046aGksZ2V0QWRhcHRlcjpkaSxtZXJnZUNvbmZpZzp5aX09ZEE7dmFyIElBLGssWEEsVkE9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXtYQT1uZXcgVWludDhBcnJheShrLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0seUE9Y2xhc3N7aW5pdCgpe3JldHVybiBJQXx8KHR5cGVvZiBmZXRjaDwidSI/SUE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIitLSSkudGhlbihJPT5JLmFycmF5QnVmZmVyKCkpLnRoZW4oST0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoSSxWQSkpLnRoZW4odGhpcy5faW5pdCk6SUE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS0ksImJhc2U2NCIpLFZBKS50aGVuKHRoaXMuX2luaXQpLElBKX1faW5pdChJKXtrPUkuaW5zdGFuY2UsVkEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKEksdD0wKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT1JLmJ5dGVMZW5ndGgsZz1rLmV4cG9ydHMubWFsbG9jKGUpO1hBLnNldChJLGcpLHQ9dHx8TnVtYmVyKGsuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPWsuZXhwb3J0cy5tYWxsb2ModCksaT1rLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsdCxnLGUpLHM9WEEuc2xpY2UocixyK2kpO3JldHVybiBrLmV4cG9ydHMuZnJlZShnKSxrLmV4cG9ydHMuZnJlZShyKSxzfX0sS0k9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT0k9bmV3IHlBLFRJPSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsSSx0KXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHtJfS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KTtUSXx8KGF3YWl0IE9JLmluaXQoKSxUST0hMCk7bGV0IHM9T0kuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6c30pfXZhciB4ST1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLEksdCl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyx4SShlLEksdCkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciBQST1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxwPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sUD11ZTtmdW5jdGlvbiBoZShBLEkpe2xldCB0PW51bGw7c3dpdGNoKEEpe2Nhc2UgcC5VSW50ODp7dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIHAuSW50ODp7dD1uZXcgSW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShJKTticmVha31jYXNlIHAuVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShJKTticmVha31jYXNlIHAuSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIHAuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShJKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgWT1oZTt2YXIgWkk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsakk9bmV3IFRleHRFbmNvZGVyLFdJPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLEkpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKEksdC5mbGFncykscj1BLmZzX3N0YXQoSSkuc2l6ZSxpPW51bGw7Wkk/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6aT1uZXcgQXJyYXlCdWZmZXIocik7bGV0IHM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZChlLHMsMCxyLDApLEEuZnNfY2xvc2UoZSksc31mdW5jdGlvbiBWSShBLEksdCl7bGV0IGU9bnVsbDtaST9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTplPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixJLHQpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIHkoQSxJLHQsZSl7bGV0IGc9MDtyZXR1cm4gSSE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZSxJLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KEkuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBqKEEsSSx0KXtsZXQgZT1KU09OLnN0cmluZ2lmeShJKSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBGKEEsSSx0LGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSksaT1WSShBLGcscik7cmV0dXJuIFkoZSxpLmJ1ZmZlcil9ZnVuY3Rpb24gekEoQSxJKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLEldKSxlPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsSSx0LGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEMpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbz1qSS5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgbz1qSS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbz1RLmRhdGEuZGF0YSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbz1RLmRhdGEsZj15KEEsby5kYXRhLEMsMCksbj15KEEsby5kaXJlY3Rpb24sQywxKSxFPXR5cGVvZiBvLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKG8ubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6by5pbWFnZVR5cGUsbmFtZTpvLm5hbWUsb3JpZ2luOm8ub3JpZ2luLHNwYWNpbmc6by5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxzaXplOm8uc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O2ooQSxjLEMpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLmNlbGxzLEMsMSksRT15KEEsby5wb2ludERhdGEsQywyKSxjPXkoQSxvLmNlbGxEYXRhLEMsMyksdT17bWVzaFR5cGU6by5tZXNoVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOm8ubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxjZWxsQnVmZmVyU2l6ZTpvLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6by5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6by5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O2ooQSx1LEMpO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby52ZXJ0aWNlcyxDLDEpLEU9eShBLG8ubGluZXMsQywyKSxjPXkoQSxvLnBvbHlnb25zLEMsMyksdT15KEEsby50cmlhbmdsZVN0cmlwcyxDLDQpLGQ9eShBLG8ucG9pbnREYXRhLEMsNSksUj15KEEsby5wb2ludERhdGEsQyw2KSxOPXtwb2x5RGF0YVR5cGU6by5wb2x5RGF0YVR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOm8udmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGxpbmVzQnVmZmVyU2l6ZTpvLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6by5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOm8udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6by5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2R9YCxudW1iZXJPZkNlbGxQaXhlbHM6by5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtSfWB9O2ooQSxOLEMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBnPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4oSS5zbGljZSgpKX1jYXRjaChRKXt0aHJvdyB0eXBlb2YgUT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShRKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxRfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoZyl9bGV0IGk9QS5nZXRNb2R1bGVTdGRvdXQoKSxzPUEuZ2V0TW9kdWxlU3RkZXJyKCksYT1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmcj09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihRLEMpe2xldCBvPW51bGw7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPXtkYXRhOldJLmRlY29kZShjKX07YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz1KU09OLnBhcnNlKFdJLmRlY29kZShjKSk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKTtvPXtkYXRhOlZJKEEsbixFKX07YnJlYWt9Y2FzZSBELlRleHRGaWxlOntvPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShRLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntvPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6ZGUoQSxRLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG49ekEoQSxDKTtuLmRhdGE9RihBLEMsMCxuLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxuLmRpcmVjdGlvbj1GKEEsQywxLFAuRmxvYXQ2NCksbi5tZXRhZGF0YT1uZXcgTWFwKG4ubWV0YWRhdGEpLG89bjticmVha31jYXNlIEQuTWVzaDp7bGV0IG49ekEoQSxDKTtuLm51bWJlck9mUG9pbnRzPjA/bi5wb2ludHM9RihBLEMsMCxuLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bi5wb2ludHM9WShuLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxscz4wP24uY2VsbHM9RihBLEMsMSxuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpuLmNlbGxzPVkobi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZQb2ludFBpeGVscz4wP24ucG9pbnREYXRhPUYoQSxDLDIsbi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDMsbi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpuLmNlbGxEYXRhPVkobi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IG49ekEoQSxDKTtuLm51bWJlck9mUG9pbnRzPjA/bi5wb2ludHM9RihBLEMsMCxQLkZsb2F0MzIpOm4ucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksbi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9uLnZlcnRpY2VzPUYoQSxDLDEscC5VSW50MzIpOm4udmVydGljZXM9bmV3IFVpbnQzMkFycmF5LG4ubGluZXNCdWZmZXJTaXplPjA/bi5saW5lcz1GKEEsQywyLHAuVUludDMyKTpuLmxpbmVzPW5ldyBVaW50MzJBcnJheSxuLnBvbHlnb25zQnVmZmVyU2l6ZT4wP24ucG9seWdvbnM9RihBLEMsMyxwLlVJbnQzMik6bi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksbi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9uLnRyaWFuZ2xlU3RyaXBzPUYoQSxDLDQscC5VSW50MzIpOm4udHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LG4ubnVtYmVyT2ZQb2ludFBpeGVscz4wP24ucG9pbnREYXRhPUYoQSxDLDUsbi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsNixuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpuLmNlbGxEYXRhPVkobi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOm99O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDppLHN0ZGVycjpzLG91dHB1dHM6YX19dmFyIFhJPXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSxJKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLEkpO2chPT1udWxsJiZ0LnB1c2goZyl9cmV0dXJuIHR9ZnVuY3Rpb24gcGUoQSxJKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSx3ZSYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ST90OnQuc2xpY2UoMCl9dmFyIHpJPW1lO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfST1GZTtmdW5jdGlvbiBTZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdkk9U2U7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICRJPVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsSSx0LGUpe2xldCBnPVhJKEEsSSx0LGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKGkudHlwZT09PUQuQmluYXJ5U3RyZWFtfHxpLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBzPWkuZGF0YTtyLnB1c2gocyl9ZWxzZSBpZihpLnR5cGU9PT1ELkltYWdlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLl9JKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuTWVzaCl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi52SShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLiRJKHMpKX19KSxGQShnLHpJKHIsITApKX12YXIgQXQ9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLEksdCxlLGcscil7bGV0IGk9YXdhaXQgUEkoQSxJLHIpO3JldHVybiBhd2FpdCBBdChpLHQsZSxnKX19O29BKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO0J0KGx0KTtleHBvcnR7bm4gYXMgZG93bnNhbXBsZSxYciBhcyBkb3duc2FtcGxlQmluU2hyaW5rLEFuIGFzIGRvd25zYW1wbGVMYWJlbEltYWdlLHRuIGFzIGRvd25zYW1wbGVTaWdtYSxhbiBhcyBnYXVzc2lhbktlcm5lbFJhZGl1cyxMIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsUiBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxHIGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsSXMgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixCdCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCx0cyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLFJBIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py b/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py index bf2561596..daa50c7cf 100644 --- a/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py +++ b/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.4.1" +__version__ = "1.4.2" diff --git a/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py b/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py index bf2561596..daa50c7cf 100644 --- a/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py +++ b/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py @@ -1 +1 @@ -__version__ = "1.4.1" +__version__ = "1.4.2" diff --git a/packages/downsample/typescript/package.json b/packages/downsample/typescript/package.json index 888175668..37d345cf0 100644 --- a/packages/downsample/typescript/package.json +++ b/packages/downsample/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/downsample", - "version": "1.4.1", + "version": "1.4.2", "packageManager": "pnpm@9.6.0", "description": "Pipelines for downsampling images.", "type": "module",